Compare commits

..
83 changed files with 13 additions and 3102 deletions
-29
View File
@@ -1,29 +0,0 @@
# Agent Instruction Center
Version-controlled execution instructions for AIOS agents.
## Supported agents
- codex
- openclaw
- hermes
- windows_codex_app
- custom_gpt_review
## Workflow
1. Create versioned instruction file.
2. Target agent executes instruction.
3. Result is recorded with GitOps audit information.
## Naming
agent-instructions/<agent>/<instruction-name>-v<version>.md
## Rules
- GitOps managed only.
- Patch-first workflow.
- No secrets, tokens, passwords or credentials.
- Production changes require approval.
- Main branch changes require approval.
-34
View File
@@ -1,34 +0,0 @@
# Agent Execution Instruction
Instruction ID:
Version:
Target Agent:
## Objective
## Context
## Execution Steps
## Constraints
- GitOps only
- Patch-first
- No secrets
- No force push
- Production changes require approval
## Validation
## Return Format
Status:
Branch:
Commit:
Rev:
Sync Status:
Issues:
-1
View File
@@ -1 +0,0 @@
# Placeholder for versioned Codex instructions.
@@ -1,46 +0,0 @@
# Codex Execution Instruction
Instruction ID: fix-agent-instructions-permission-v1
Version: v1
Target Agent: codex
## Objective
Repair GitOps Action runtime write permissions for agent instruction directories.
## Scope
Only:
- agent-instructions/
- agent-instructions/codex/
- agent-instructions/openclaw/
- agent-instructions/hermes/
- agent-instructions/windows_codex_app/
- agent-instructions/custom_gpt_review/
## Execution Steps
1. Identify GitOps action runtime user.
2. Inspect ownership and permissions.
3. Apply minimum required ownership changes.
4. Validate write access with temporary probes.
5. Remove probes.
## Constraints
- No chmod 777.
- No workspace-wide ownership changes.
- No secrets.
- No unrelated file commits.
- No force push.
## Return Format
Status:
Branch:
Commit:
Rev:
Sync Status:
Permission Result:
Issues:
@@ -1,64 +0,0 @@
# Codex Execution Instruction
Instruction ID: fix-gitops-managed-path-governance-v1
Version: v1
Target Agent: codex
## Objective
Prevent recurring GitOps permission drift by managing all writable repository paths through one governance policy.
## Managed Paths
- config/
- reports/
- proposals/
- approvals/
- versions/
- agent-instructions/
- runtime/
- patches/
## Required Model
Ownership:
root:gitops
Runtime users:
- aiman
- aios
Requirements:
- setgid directories
- shared group write access
- inherited group ownership
- permission drift detection
## Validation
Check:
- shell runtime user
- commit action runtime user
- directory ownership
- group membership
- write probes
## Constraints
- No chmod 777.
- No unsafe workspace-wide ownership changes.
- No secrets.
- No production changes.
## Return Format
Status:
Runtime Users:
Managed Paths:
Ownership Model:
Validation:
Remaining Issues:
@@ -1,70 +0,0 @@
# Codex Execution Instruction
Instruction ID: fix-gitops-workspace-permission-governance-v1
Version: v1
Target Agent: codex
## Objective
Permanently prevent repeated GitOps workspace permission failures across AIOS development and release workflows.
## Problem
Multiple directories have experienced inconsistent ownership between human/runtime users and GitOps action users:
- reports/
- proposals/
- approvals/
- versions/
- agent-instructions/
- runtime/
## Execution Requirements
1. Identify the actual GitOps action runtime user.
2. Identify all Git-managed writable workflow directories.
3. Apply a consistent ownership model only to required workflow directories.
4. Ensure new files inherit compatible permissions.
5. Verify write access with temporary probes.
6. Remove all probes.
## Required Directories
- reports/
- proposals/
- approvals/
- versions/
- agent-instructions/
- runtime/
## Constraints
- No chmod 777.
- No workspace-wide ownership changes.
- No secrets.
- No unrelated commits.
- No force push.
- Do not change production state.
## Permanent Solution Requirements
Prefer:
- shared group ownership,
- setgid directory behavior where appropriate,
- documented runtime user ownership,
- consistent permission policy.
Avoid repeated manual directory fixes.
## Validation
Return:
Status:
Runtime User:
Ownership Model:
Changed Directories:
Permission Result:
Probe Result:
Remaining Issues:
@@ -1,66 +0,0 @@
# Codex Execution Instruction
Instruction ID: fix-reports-permission-v1
Version: v1
Target Agent: codex
## Objective
Fix the GitOps workspace reports directory permission issue so the Agent OS acceptance report can be committed.
## Context
Current blocked path:
/data/aios-gitops/workspace/reports/
Error:
Permission denied
## Execution Steps
1. Enter workspace:
cd /data/aios-gitops/workspace
2. Check current user and permissions:
whoami
id
ls -ld reports
3. Create directory if missing:
mkdir -p reports
4. Fix ownership and write permission for this directory only:
chown -R <gitops-user>:<gitops-group> reports
chmod -R u+rwX reports
5. Verify write access:
touch reports/.write-test
rm reports/.write-test
6. Commit pending acceptance report changes after verification.
## Constraints
- GitOps only.
- No force push.
- No chmod 777.
- Do not modify unrelated directories.
- Do not write secrets.
- Production changes require approval.
## Validation
Return:
Status:
Branch:
Commit:
Rev:
Sync Status:
Permission Result:
Issues:
@@ -1,31 +0,0 @@
# Codex System Recovery Instruction
Version: v1
Target Agent: codex
## Objective
Recover AIOS system issues requiring deep diagnosis or administrator assistance.
## Execution
1. Inspect runtime status.
2. Inspect GitOps state.
3. Identify root cause.
4. Propose safe patch.
5. Apply only approved GitOps changes.
## Escalation
Use when server agents cannot resolve issues.
## Constraints
- GitOps only.
- No secrets.
- No force push.
- Production changes require approval.
## Return
Status:
Branch:
Commit:
Rev:
Sync Status:
Issues:
@@ -1,69 +0,0 @@
# Codex Execution Instruction
Instruction ID: type-hints-auto-fix-v1
Version: v1
Target Agent: codex
## Objective
Automatically add missing Python type hints identified during code quality validation.
## Scope
Target:
adapters/gitops/aios_gitops_model_api.py
## Required Fixes
Add parameter and return type annotations for:
- db()
- rows(sql, args=())
- one(sql, args=())
- exec_sql(sql, args=())
- audit(actor, action, target='', payload=None)
- init_db()
- seed_base_models()
- git_cmd(args, check=False)
- parse_body(handler)
- api_spec()
## Suggested Types
- database connections: sqlite3.Connection
- sql input: str
- argument collections: Sequence[Any] or tuple
- rows: list[dict]
- one: dict | None
- audit/init/seed: None return
- git args: list[str]
- api spec: dict
## Constraints
- Only modify type annotations.
- Do not change runtime behavior.
- Do not add dependencies unless required.
- No secrets.
- No force push.
- GitOps workflow required.
## Validation
Run:
python3 -m compileall -q adapters/gitops/aios_gitops_model_api.py
Run relevant tests.
## Return Format
Status:
Branch:
Commit:
Rev:
Sync Status:
Changed Files:
Tests:
Issues:
@@ -1,66 +0,0 @@
# Codex Execution Instruction
Instruction ID: v1r1c5-cgpt-actions-confirmation-governance-v1
Version: v1
Target Agent: codex
## Objective
Complete CGPT Actions consequential write confirmation governance.
## Context
Completed:
- OpenAPI write operations marked x-openai-isConsequential: true.
- api_spec risk classification implemented.
- Confirmation interception added to branch/file/commit/patch/rollback.
## Required Changes
Complete confirmation protection for:
1. model()
Before model registration:
- require confirm field.
- return 428 confirm_required when missing.
2. model_priority()
Before priority changes:
- require confirm field.
- return 428 confirm_required when missing.
3. tag()
Complete confirmation logic:
- require tag:create permission.
- require confirm field.
- block without explicit confirmation.
## Constraints
- Preserve existing API behavior.
- Do not weaken consequential action protection.
- No secrets.
- No force push.
- GitOps workflow only.
## Validation
Test:
- missing confirm returns 428.
- confirm=true allows authorized flow.
- unauthorized scope remains blocked.
Return:
Status:
Branch:
Commit:
Rev:
Sync Status:
Changed Files:
Tests:
Issues:
@@ -1,48 +0,0 @@
# Codex Main Merge Verification Instruction
Instruction ID: v1r1c5-main-merge-verify-v1
Version: v1
Target Agent: codex
## Objective
Verify whether V1R1C5 patch branch has been merged into main.
## Preconditions
Ensure GitOps authentication is healthy.
If Gitea account password state blocks access, resolve account activation through approved admin procedure before continuing.
## Verification Steps
1. Check repository status.
2. Fetch remote branches.
3. Compare:
source:
patch/self-evolution-agent-orchestration-policy
target:
main
4. Confirm merge commit.
5. Confirm main HEAD.
6. Confirm no divergence.
## Constraints
- No force push.
- No direct production publish.
- No secret output.
- Preserve audit trail.
## Return Format
Status:
Source Branch:
Target Branch:
Merge Commit:
Rev:
Sync Status:
Conflicts:
Main HEAD:
Issues:
@@ -1,44 +0,0 @@
# Codex Execution Instruction
Instruction ID: verify-commit-action-runtime-v1
Version: v1
Target Agent: codex
## Objective
Diagnose GitOps commit action runtime permission differences that prevent file writes while shell runtime permissions are correct.
## Checks
1. Identify commit action runtime user.
2. Identify commit action workspace mount.
3. Compare with shell runtime user.
4. Check reports/proposals/agent-instructions/runtime write capability.
5. Identify permission difference.
## Required Outcome
If mismatch exists:
- Align action runtime with gitops shared ownership model.
- Preserve root:gitops ownership.
- Preserve setgid behavior.
- Avoid unsafe permission expansion.
## Constraints
- No chmod 777.
- No workspace-wide unsafe ownership changes.
- No secrets.
- No force push.
- No production actions.
## Return Format
Status:
Commit Action User:
Shell Runtime User:
Workspace Mount:
Permission Difference:
Fix Required:
Issues:
@@ -1,33 +0,0 @@
# Codex Execution Instruction
Instruction ID: verify-gitops-action-runtime-user-v1
Version: v1
Target Agent: codex
## Objective
Verify the actual GitOps Action runtime user and workspace permission inheritance.
## Checks
1. Identify runtime user.
2. Identify groups.
3. Confirm Gitea runtime user.
4. Confirm workspace ownership model.
5. Confirm setgid workflow directories.
## Expected Model
- Shared group ownership.
- GitOps runtime user belongs to shared group.
- No chmod 777.
- No workspace-wide unsafe ownership changes.
## Return Format
Status:
Runtime User:
Gitea Runs As:
Workspace Owner:
Ownership Model:
Remaining Issues:
@@ -1 +0,0 @@
# Placeholder for versioned custom GPT review instructions.
@@ -1,31 +0,0 @@
# Custom GPT Solution Review Instruction
Version: v1
Target Agent: custom_gpt_review
## Objective
Review difficult architecture decisions and implementation proposals from server agents.
## Role
Act as reviewer and advisor for OpenClaw, Hermes and other AIOS agents.
## Execution
1. Receive complete problem context.
2. Review baseline, branch and proposed changes.
3. Analyze alternative solutions.
4. Recommend implementation approach.
5. Identify risks and validation requirements.
## Constraints
- Advisory role only.
- No direct production changes.
- No secrets.
- GitOps workflow required.
- Release requires approval.
## Return
Status:
Recommendation:
Risk:
Validation:
Next Step:
-1
View File
@@ -1 +0,0 @@
# Placeholder for versioned Hermes instructions.
@@ -1,32 +0,0 @@
# Hermes Architecture Review Instruction
Version: v1
Target Agent: hermes
## Objective
Review AIOS architecture, policies and implementation plans.
## Execution
1. Review baseline and branch diff.
2. Analyze architecture impact.
3. Review OpenClaw execution proposals.
4. Validate acceptance criteria.
5. Provide improvement recommendations.
## Escalation
For unresolved architecture choices, prepare complete context for external review.
## Constraints
- GitOps only.
- No secrets.
- No direct production changes.
- Approval required for release.
## Return
Status:
Branch:
Commit:
Rev:
Sync Status:
Issues:
Recommendations:
-1
View File
@@ -1 +0,0 @@
# Placeholder for versioned OpenClaw instructions.
-24
View File
@@ -1,24 +0,0 @@
# OpenClaw Agent Instructions Index
## Available Instructions
### v1r1c5-hermes-coordination-v1
Instruction file:
agent-instructions/openclaw/v1r1c5-hermes-coordination-v1.md
Purpose:
Coordinate Hermes architecture review through OpenClaw controlled communication channel.
Invocation:
Execute openclaw/v1r1c5-hermes-coordination-v1 instruction
Requirements:
- Read the referenced markdown file from the GitOps workspace.
- Do not treat the identifier as a local shell command.
- Do not search external skill marketplaces unless the file is missing.
- Follow GitOps workflow rules defined in the instruction.
@@ -1,32 +0,0 @@
# OpenClaw Runtime Maintenance Instruction
Version: v1
Target Agent: openclaw
## Objective
Maintain server-side AIOS runtime and perform safe optimization tasks.
## Execution
1. Check runtime health.
2. Review logs and GitOps status.
3. Identify optimization opportunities.
4. Create patch proposals.
5. Execute approved changes.
## Escalation
When solution selection or implementation is uncertain, prepare full context and escalate for review.
## Constraints
- GitOps only.
- Patch-first workflow.
- No secrets.
- No force push.
- Production release requires approval.
## Return
Status:
Branch:
Commit:
Rev:
Sync Status:
Issues:
@@ -1,51 +0,0 @@
# OpenClaw Execution Instruction: Hermes Coordination
Instruction ID: v1r1c5-hermes-coordination-v1
Version: v1
Target Agent: openclaw
## Objective
Coordinate Hermes architecture review through OpenClaw-controlled communication channel.
## Architecture Rule
Hermes is not directly connected to external control channels.
All Hermes requests and responses must be routed through OpenClaw personal WeChat channel.
## Workflow
1. Receive AIOS task or review request.
2. Send required context to Hermes through OpenClaw WeChat.
3. Collect Hermes architecture analysis.
4. Record review result in GitOps reports.
5. Continue execution or escalate when required.
## Context Package
Include:
- Baseline version
- Branch
- Diff summary
- Problem description
- Proposed solution
- Validation requirements
## Constraints
- GitOps only.
- No secrets.
- No direct production changes.
- Maintain audit records.
- Use escalation flow for unresolved decisions.
## Return Format
Status:
Branch:
Commit:
Rev:
Sync Status:
Hermes Result:
Issues:
@@ -1,119 +0,0 @@
# OpenClaw Execution Instruction
Instruction ID: v1r1c5-hermes-review-improvement-v1
Version: v1
Target Agent: openclaw
## Objective
Implement V1R1C5 improvements based on Hermes Conditional Approval review.
## Context
Baseline:
V1R1C4
Branch:
patch/self-evolution-agent-orchestration-policy
Proposal:
V1R1C5-agent-os-evolution-proposal
## Required Changes
1. Add Agent Resource Governance:
Create:
config/self-evolution/agent-resource-manager.json
Support:
- resource limits
- parallel task limits
- agent priority
- runtime isolation
- overload handling
2. Enhance Consensus Engine:
Add dynamic weighting:
Final Weight = Base Weight * Quality Score * Historical Reliability * Domain Expertise
Base weights:
- custom_gpt: 2
- windows_codex: 2
- server_agent: 1
Add risk gates:
- Production Release
- V-Level Change
- Security Policy Change
Require:
Consensus Approval + Owner Approval
3. Enhance Message Bus:
Update runtime/agent-os/message_bus.py
Add:
- task_id
- correlation_id
- retry_state
- delivery_status
Support:
- message tracking
- retry
- recovery
- audit
4. Add Agent Health Score:
Create:
runtime/agent-os/agent_health_score.py
Calculate from:
- quality score
- acceptance rate
- historical reliability
Use for:
- scheduler selection
- consensus weighting
## Validation
Run:
python3 -m compileall runtime/agent-os
Run:
runtime/agent-os/integration_test.py
Validate:
- scheduler
- consensus
- message bus
- escalation
- recovery
## Constraints
- GitOps only
- Patch-first
- No secrets
- No force push
- No direct main write
- Production changes require approval
## Return Format
Status:
Branch:
Commit:
Rev:
Sync Status:
Changed Files:
Tests:
Hermes Review Items Completed:
Remaining Issues:
@@ -1,61 +0,0 @@
# OpenClaw Hermes Routing Correction Instruction
Instruction ID: v1r1c5-hermes-routing-correction-v1
Version: v1
Target Agent: openclaw
## Objective
Correct Hermes coordination routing. OpenClaw must actively package AIOS review requests and route them through the configured Hermes communication path instead of asking the user to provide missing context when the request context already exists in GitOps.
## Current Architecture
OpenClaw is the coordination entry point.
Hermes is reached indirectly through OpenClaw controlled communication.
## Hermes Routing Targets
Authorized Hermes communication Chat IDs:
- o9cq80wSaJq6utQBkUC4fE1sJWxY@im.wechat
- o9cq80x9RoA6ljoFZDxg71mS0gDA@im.wechat
## Execution Flow
1. Read current AIOS GitOps context.
2. Collect:
- Baseline version
- Branch
- Diff summary
- Problem description
- Proposed solution
- Validation requirements
3. Send complete review package to Hermes through configured OpenClaw communication channel.
4. Receive Hermes analysis.
5. Record review result in GitOps reports.
## Current Review Context
Baseline:
V1R1C4
Branch:
patch/self-evolution-agent-orchestration-policy
Proposal:
V1R1C5-agent-os-evolution-proposal
## Constraints
- Do not ask user for context that already exists in GitOps.
- Do not treat instruction ID as external skill package.
- GitOps audit required.
- No secrets.
- No direct production changes.
## Return
Status:
Hermes Routing:
Review Context:
Result:
Issues:
@@ -1,52 +0,0 @@
# OpenClaw Owner Approval Gate Instruction
Instruction ID: v1r1c5-owner-approval-gate-v1
Version: v1
Target Agent: openclaw
## Objective
Manage owner approval workflow for high-risk AIOS operations.
## Approval Required For
- V-level version changes.
- Production release.
- Tag creation.
- Runtime changes with production impact.
- Administrator authorization actions.
- Unresolved multi-agent decisions.
## Workflow
1. Collect approval context.
2. Include baseline version, branch, diff summary and risk assessment.
3. Route approval request through owner communication channel registry.
4. Wait for approval decision.
5. Record decision in GitOps audit.
## Approval Context
Must include:
- Request reason.
- Affected components.
- Validation results.
- Rollback considerations.
- Risk level.
## Constraints
- No direct production action without approval.
- No secrets in messages or reports.
- Use configured owner communication channels only.
- Maintain audit records.
## Return Format
Status:
Approval Status:
Channel Used:
Decision:
Audit Record:
Issues:
@@ -1,43 +0,0 @@
# OpenClaw Owner Notification Routing Instruction
Instruction ID: v1r1c5-owner-notification-routing-v1
Version: v1
Target Agent: openclaw
## Objective
Implement owner notification routing through configured owner communication channels.
## Routing Rules
1. OpenClaw must first inspect the owner-bound communication channels already configured in the system.
2. Select the primary owner communication channel according to system priority configuration.
3. If the primary channel is unavailable, unhealthy, or delivery fails, automatically fallback to the configured backup communication channel.
4. Record routing decision and delivery status in GitOps audit records.
## Notification Scenarios
Notify owner for:
- High risk architecture decisions.
- Agent consensus deadlock.
- Production-impacting approval requests.
- Required administrator authorization.
- Release approval gates.
## Constraints
- Do not hardcode personal communication identifiers in instruction files.
- Use configured channel registry only.
- Do not expose private contact information in logs.
- Maintain audit trail.
- GitOps workflow required.
## Return Format
Status:
Primary Channel Status:
Fallback Channel Status:
Delivery Result:
Audit Record:
Issues:
@@ -1 +0,0 @@
# Placeholder for versioned Windows Codex App instructions.
@@ -1,47 +0,0 @@
# Windows Codex App Execution Instruction
Instruction ID: v1r1c5-recovery-and-admin-assistance-v1
Version: v1
Target Agent: windows_codex_app
## Objective
Participate in V1R1C5 Agent OS evolution as recovery, administrator assistance and exceptional execution support agent.
## Responsibilities
1. Assist when server OpenClaw agents have runtime failures.
2. Assist when Hermes review cannot be completed through OpenClaw.
3. Handle cases requiring administrator authorization workflow.
4. Participate in multi-agent voting when decision conflicts occur.
5. Validate recovery results after server agent restoration.
## Execution Rules
- Work from online GitOps versions.
- Use patch-first workflow.
- Do not bypass approval gates.
- Do not write secrets.
- Do not force push.
- Do not directly publish production versions.
## Recovery Flow
Server agent failure:
OpenClaw/Hermes issue
-> Windows Codex diagnosis
-> propose fix
-> GitOps patch
-> validation
-> approval
## Return Format
Status:
Branch:
Commit:
Rev:
Sync Status:
Recovery Result:
Issues:
@@ -1 +0,0 @@
{"schema":"acceptance-pipeline-v1","status":"proposal","pipeline":{"stages":[{"name":"code_review","agent_role":"review_agent"},{"name":"automated_test","agent_role":"test_agent"},{"name":"security_check","agent_role":"security_agent"},{"name":"performance_check","agent_role":"performance_agent"},{"name":"regression_check","agent_role":"regression_agent"},{"name":"release_readiness","agent_role":"release_readiness_agent"}],"parallel_validation":true,"failure_blocks_release":true},"outputs":{"quality_score":true,"risk_report":true,"approval_request":true},"safety":{"production_release_requires_owner":true,"credentials_scan":true,"audit_log":true}}
@@ -1 +0,0 @@
{"schema":"agent-governance-v1","status":"proposal","governance":{"identity":true,"reputation":true,"capability_discovery":true,"memory_service":true,"shared_knowledge":true,"skill_packages":true,"peer_review":true,"acceptance_pipeline":["optimization","implementation","acceptance","security","release_readiness"],"dynamic_voting":{"enabled":true,"base_weights":{"custom_gpt":2,"windows_codex":2,"server_agents":1},"quality_score_modifier":true},"audit":{"full_trace":true,"decision_log":true}},"release":{"patch_only":true,"owner_approval_required":true}}
@@ -1,63 +0,0 @@
{
"policy_id": "self-evolution-agent-orchestration-policy",
"version": 1,
"status": "proposal",
"scope": "self-evolution-execution-orchestration",
"execution_subjects": {
"primary": [
"server.openclaw_agent",
"server.hermes_agent"
],
"collaborators": [
"windows.codex_app",
"custom_gpt.codex_chartgpt_bridge"
]
},
"parallelism": {
"server_agents_parallel_allowed": true,
"multiple_server_agents_allowed": true,
"server_agents_preferred": true
},
"fallback_and_assistance": {
"difficult_case_external_interaction_allowed": true,
"assistance_endpoint": "https://chatgpt.com/g/g-6a4ba70a063c8191a89bc2d86a4c7fa0-codex-chartgpt-bridge",
"allowed_modes": [
"ask_for_help",
"interactive_coordination",
"proposal_review"
]
},
"dispute_resolution": {
"multi_agent_voting_allowed": true,
"weights": {
"custom_gpt.codex_chartgpt_bridge": 2,
"windows.codex_app": 2,
"server.openclaw_agent": 1,
"server.hermes_agent": 1,
"server.additional_agent_default": 1
},
"tie_breaking": "require_owner_or_admin_review"
},
"safety": {
"credentials_in_git_allowed": false,
"force_push_allowed": false,
"destructive_bulk_delete_allowed": false,
"v_level_change_requires_owner_approval": true,
"production_switch_requires_owner_approval": true,
"tag_creation_requires_owner_approval": true,
"v_level_tag_or_production_switch_requires_owner_approval": true,
"direct_main_push_allowed": false,
"direct_main_merge_allowed": false
},
"gitops": {
"audit_required": true,
"writes_require_commit": true,
"default_target_branch": "patch/self-evolution-agent-orchestration-policy",
"direct_main_push_default": false,
"patch_branch_only": true,
"main_merge_requires_owner_admin_approval": true
},
"created_by": "codex-chartgpt-bridge",
"created_at": "2026-07-07T00:00:00Z",
"branch": "patch/self-evolution-agent-orchestration-policy"
}
@@ -1 +0,0 @@
{"schema":"agent-os-v1","status":"proposal","agents":{"openclaw":{"memory":true,"skills":true,"tools":true,"planner":true,"evaluator":true,"self_reflection":true,"learning":true},"hermes":{"memory":true,"skills":true,"tools":true,"planner":true,"evaluator":true,"self_reflection":true,"learning":true}},"coordination":{"voting":true,"weighted_voting":{"custom_gpt":2,"windows_codex":2,"server_agents":1},"owner_review_on_tie":true},"safety":{"gitops_only":true,"patch_first":true,"no_credentials":true,"no_direct_main":true}}
@@ -1 +0,0 @@
{"schema":"agent-platform-v1","status":"proposal","modules":[{"name":"memory-manager","enabled":true},{"name":"skill-registry","enabled":true},{"name":"agent-registry","enabled":true},{"name":"task-scheduler","enabled":true},{"name":"consensus-engine","enabled":true},{"name":"continuous-self-evolution","enabled":true}],"release_policy":{"patch_first":true,"owner_approval":true}}
@@ -1 +0,0 @@
{"schema":"agent-protocol-v1","status":"proposal","agent_identity":{"id":"string","name":"string","family":"openclaw|hermes|custom","version":"string","capabilities":[],"skills":[],"health":"unknown|healthy|degraded|offline"},"task_protocol":{"task_id":"string","requester":"agent_id","executor":"agent_id","objective":"string","priority":"low|normal|high|critical","status":"queued|running|completed|failed|review","result":"object"},"memory_protocol":{"memory_id":"string","type":"experience|knowledge|decision|reflection","scope":"agent|shared","audit":true},"voting_protocol":{"enabled":true,"proposal":"string","votes":[],"weighted":true,"tie":"owner_review"},"security":{"credentials":false,"direct_main_write":false,"production_action_approval":true}}
@@ -1 +0,0 @@
{"schema":"agent-runtime-components-v1","status":"proposal","components":{"agent-runtime-manager":{"enabled":true,"responsibilities":["lifecycle_management","health_check","recovery","resource_tracking"]},"agent-registry":{"enabled":true,"responsibilities":["identity","capability_discovery","status_tracking","version_tracking"]},"message-bus":{"enabled":true,"responsibilities":["task_routing","event_delivery","agent_coordination"]},"memory-service":{"enabled":true,"responsibilities":["long_term_memory","working_memory","knowledge_retrieval","audit"]},"skill-loader":{"enabled":true,"responsibilities":["skill_installation","skill_validation","skill_versioning"]},"agent-evaluator":{"enabled":true,"responsibilities":["quality_score","acceptance_check","performance_feedback"]}},"security":{"credential_storage":false,"gitops_audit":true,"patch_only":true}}
@@ -1 +0,0 @@
{"schema":"consensus-engine-v1","status":"proposal","consensus":{"enabled":true,"modes":["weighted_vote","review_board","owner_escalation"],"participants":["openclaw_agent","hermes_agent","windows_codex","custom_gpt"],"base_weights":{"custom_gpt":2,"windows_codex":2,"server_agents":1},"dynamic_adjustment":{"enabled":true,"factors":["quality_score","acceptance_rate","historical_reliability"]},"conflict_detection":true,"tie_breaking":"owner_admin_review"},"decision_log":{"required":true,"audit":true},"safety":{"production_decision_requires_approval":true}}
@@ -1 +0,0 @@
{"schema":"continuous-evolution-engine-v1","status":"proposal","pipeline":{"monitor":true,"detect":true,"plan":true,"schedule":true,"execute":true,"learn":true},"workflow":{"detect_sources":["runtime_metrics","logs","acceptance_results","agent_feedback","user_requests"],"proposal_generation":true,"patch_generation":true,"validation_required":true,"consensus_required":true,"approval_gate":true,"release_feedback":true},"agents":{"optimizer":"system_optimization_agent","planner":"planning_agent","executor":"patch_execution_agent","validator":"acceptance_validation_agent","reviewer":"consensus_engine"},"learning":{"store_experience":true,"update_quality_score":true,"reflection_required":true},"safety":{"gitops_only":true,"patch_first":true,"credentials":false,"production_requires_approval":true}}
@@ -1 +0,0 @@
{"schema":"agent-platform-implementation-v1","status":"proposal","objective":"evolve-agent-platform-from-configuration-to-operational-framework","implementation_phases":[{"phase":1,"name":"agent-runtime-manager","scope":["agent lifecycle","health check","startup shutdown","recovery"]},{"phase":2,"name":"agent-message-bus","scope":["agent communication","task routing","event coordination"]},{"phase":3,"name":"memory-service","scope":["long term memory","working memory","shared knowledge retrieval","audit"]},{"phase":4,"name":"skill-framework","scope":["skill packages","versioning","installation","validation"]},{"phase":5,"name":"agent-api","scope":["agent registration","capability discovery","task submission","status query"]},{"phase":6,"name":"continuous-evolution-pipeline","scope":["proposal generation","patch creation","automated validation","approval workflow"]}],"constraints":{"gitops_only":true,"patch_first":true,"no_credentials":true,"no_force_push":true,"production_release_requires_approval":true}}
-1
View File
@@ -1 +0,0 @@
{"schema":"agent-memory-v1","status":"proposal","memory_types":{"working_memory":{"ttl":"task_scope","audit":true},"long_term_memory":{"persistent":true,"scope":"agent"},"shared_knowledge":{"persistent":true,"scope":"platform"},"reflection_memory":{"persistent":true,"purpose":"self_improvement"}},"memory_entry":{"id":"string","agent_id":"string","type":"working|experience|knowledge|decision|reflection","content":"object","source_task":"string","created_at":"timestamp","quality_score":0},"safety":{"credentials":false,"secrets":false,"audit_required":true}}
@@ -1,26 +0,0 @@
{
"schema": "owner-channel-registry-v1",
"status": "proposal",
"purpose": "Owner notification channel routing and fallback management",
"routing": {
"primary_selection": "configured_priority",
"fallback_enabled": true,
"health_check_required": true,
"delivery_failure_fallback": true
},
"channel_policy": {
"identifiers_managed_externally": true,
"no_hardcoded_personal_identifiers": true,
"audit_delivery_result": true
},
"notification_priority": [
"production_approval",
"administrator_authorization",
"high_risk_decision",
"agent_consensus_failure"
],
"security": {
"credentials_in_git": false,
"private_contact_data_in_logs": false
}
}
@@ -1 +0,0 @@
{"schema":"release-automation-v1","status":"proposal","release_flow":{"patch_review":true,"acceptance_gate":true,"consensus_gate":true,"approval_request":true,"version_proposal":true,"tag_request":true},"agents":{"release_manager":"release_readiness_agent","reviewers":["openclaw_agent","hermes_agent","custom_gpt","windows_codex_app"]},"controls":{"auto_tag":false,"auto_production_publish":false,"owner_approval_required":true,"audit_log":true},"rollback":{"request_supported":true,"automatic_destructive_rollback":false}}
@@ -1,119 +0,0 @@
{
"policy_id": "server-agent-roles-and-capabilities",
"version": 1,
"status": "proposal",
"scope": "self-evolution-server-agents",
"agent_families": {
"openclaw": {
"enabled": true,
"runtime": "server",
"priority": "primary",
"roles": [
"system_optimization_agent",
"acceptance_validation_agent",
"patch_execution_agent",
"runtime_diagnosis_agent",
"regression_review_agent"
],
"persistent_memory": {
"enabled": true,
"scope": "agent_family_and_role",
"storage": "runtime_or_gitops_managed_memory",
"credentials_in_memory_allowed": false,
"audit_required": true
},
"skills": {
"enabled": true,
"skill_registry": "config/self-evolution/skills/openclaw-skills.json",
"required_skill_groups": [
"gitops_patch_workflow",
"system_optimization",
"acceptance_testing",
"runtime_observability",
"safe_release_review"
]
}
},
"hermes": {
"enabled": true,
"runtime": "server",
"priority": "primary",
"roles": [
"system_optimization_agent",
"acceptance_validation_agent",
"release_readiness_agent",
"policy_review_agent",
"cross_agent_coordination_agent"
],
"persistent_memory": {
"enabled": true,
"scope": "agent_family_and_role",
"storage": "runtime_or_gitops_managed_memory",
"credentials_in_memory_allowed": false,
"audit_required": true
},
"skills": {
"enabled": true,
"skill_registry": "config/self-evolution/skills/hermes-skills.json",
"required_skill_groups": [
"gitops_patch_workflow",
"acceptance_testing",
"release_readiness",
"policy_governance",
"multi_agent_coordination"
]
}
}
},
"role_contracts": {
"system_optimization_agent": {
"purpose": "Identify and propose safe system optimization patches.",
"may_write_patch": true,
"may_modify_runtime": false,
"requires_review_for_production": true
},
"acceptance_validation_agent": {
"purpose": "Run and record acceptance checks for GitOps changes.",
"may_write_patch": true,
"may_approve_own_change": false,
"requires_review_for_production": true
},
"patch_execution_agent": {
"purpose": "Apply approved or proposed patch changes on non-main branches.",
"may_write_patch": true,
"direct_main_push_allowed": false
},
"release_readiness_agent": {
"purpose": "Evaluate whether a patch is ready for owner/admin release approval.",
"may_create_release_request": true,
"may_create_tag_directly": false,
"may_switch_production_directly": false
},
"cross_agent_coordination_agent": {
"purpose": "Coordinate voting, conflict resolution, and escalation among agents.",
"voting_allowed": true,
"tie_breaking": "owner_or_admin_review"
}
},
"online_capabilities": {
"read_online_baseline": true,
"read_online_versions": true,
"read_online_diff": true,
"read_online_runtime": true,
"create_patch_branch": true,
"commit_patch_changes": true,
"sync_online_git": true,
"create_release_request": true,
"direct_tag_creation": false,
"direct_production_publish": false
},
"safety": {
"credentials_in_git_allowed": false,
"credentials_in_memory_allowed": false,
"force_push_allowed": false,
"destructive_bulk_delete_allowed": false,
"owner_admin_approval_required_for_release": true
},
"created_by": "codex-chartgpt-bridge",
"created_at": "2026-07-07T00:00:00Z"
}
@@ -1 +0,0 @@
{"schema":"agent-skill-package-v1","status":"proposal","skill_package":{"id":"string","name":"string","version":"string","description":"string","owner_agent":"agent_id","dependencies":[],"capabilities":[],"entrypoints":[],"validation":{"required":true,"tests":[],"quality_score":0}},"lifecycle":{"install":true,"upgrade":true,"rollback":true,"disable":true},"sharing":{"agent_scope":true,"platform_scope":true},"security":{"credentials":false,"secrets":false,"audit_required":true,"production_change_requires_approval":true}}
@@ -1 +0,0 @@
{"schema":"task-scheduler-v1","status":"proposal","scheduler":{"enabled":true,"modes":["capability_match","priority_queue","parallel_execution","failure_recovery"],"selection":{"factors":["capability","skill_match","health","quality_score","load"]},"priority":{"levels":["critical","high","normal","low"]}},"execution":{"parallel_agents":true,"retry":true,"handoff":true,"timeout_control":true},"safety":{"patch_first":true,"direct_main":false,"production_requires_approval":true}}
@@ -0,0 +1,4 @@
# GitOps Write Auth Smoke
Time: 20260706T140311Z
Result: createPatch and commitFile authenticated via secret_ref token.
@@ -0,0 +1,9 @@
{
"id": "patch-1783346591530-bb8b89b0",
"patch_name": "gitops-write-auth-smoke-20260706T140311Z",
"branch": "patch/actions-invalid-diag-smoke-20260706T140311Z",
"risk": "low",
"description": "GitOps write auth smoke using secret_ref token",
"created_by": "gitops-write-bot",
"created_at": "2026-07-06T14:03:11Z"
}
-10
View File
@@ -1,10 +0,0 @@
{
"id": "nl-1783382614842-6c6112e8",
"text": "自我进化执行主体策略更新:除 Windows Codex App 外,同时增加服务器上的 OpenClaw Agent 与 Hermes Agent 作为执行主体。允许启动多个服务器 Agent 并行执行;默认以服务器上的 Agent 为主,Windows Codex App 作为协同执行主体。困难时刻允许访问 https://chatgpt.com/chat/gpt-6a4ba70a063c8191a89bc2d86a4c7fa0-codex-chartgpt-bridge 求助或交互。分歧时刻允许多个 Agent 投票决策;自定义 GPT 权重为双倍,Windows Codex App 权重为双倍。服务器 Agent 默认参与并行协作。该策略应以 GitOps 可审计方式进入自我进化 agent orchestration proposal,不直接执行 V-level 版本变更,不写入任何凭据。",
"intent": "unknown",
"action_plan": [],
"execute": false,
"owner_approval_required": true,
"created_by": "gitops-write-bot",
"created_at": "2026-07-07T00:03:34Z"
}
-12
View File
@@ -1,12 +0,0 @@
{
"id": "nl-1783390999250-8627c20c",
"text": "基于 V1R1C4 baseline 和 patch/self-evolution-agent-orchestration-policy 全量重新架构优化:服务器 OpenClaw 与 Hermes 作为主要执行智能体;Codex ChartGPT Bridge 作为架构审核、方案建议和困难问题升级入口;Windows Codex App 作为异常恢复、管理员授权协助和多智能体投票参与者。所有操作基于在线 GitOps 版本。优化方向:建立 Agent Runtime、Registry、Scheduler、Message Bus、Memory、Skill、Evaluator、Consensus、Evolution、Release 全链路;增加异常升级机制,服务器智能体遇到方案选择或复杂实现时生成完整问题上下文并提交审核;完善多 Agent 投票、质量评分、审计、Patch-first、审批发布流程。生成后续实施 proposal,不直接进行生产发布。",
"intent": "patch_create",
"action_plan": [
"call POST /api/patch"
],
"execute": false,
"owner_approval_required": true,
"created_by": "gitops-write-bot",
"created_at": "2026-07-07T02:23:19Z"
}
@@ -1,9 +0,0 @@
{
"type": "branch",
"branch": "patch/V1R2C1-autonomous-orchestrator-foundation",
"base": "main",
"created_by": "gitops-write-bot",
"created_at": "2026-07-07T04:24:24Z",
"direct_main_push": false,
"owner_approval_required": true
}
@@ -1,9 +0,0 @@
{
"id": "patch-1783382848267-49ea7747",
"patch_name": "self-evolution-agent-orchestration-policy",
"branch": "patch/self-evolution-agent-orchestration-policy",
"risk": "medium",
"description": "Formalize self-evolution execution主体策略: add server-side OpenClaw Agent and Hermes Agent alongside Windows Codex App; allow multiple server agents to run in parallel with server agents as primary; allow difficult cases to consult/interact with Codex ChartGPT Bridge; allow voting on disputes with custom GPT weight x2 and Windows Codex App weight x2. No credentials stored.",
"created_by": "gitops-write-bot",
"created_at": "2026-07-07T00:07:28Z"
}
@@ -1,23 +0,0 @@
{
"version": "V1R1C5",
"status": "proposal",
"source_branch": "patch/self-evolution-agent-orchestration-policy",
"objective": "Integrate Agent OS multi-agent orchestration capabilities into next evolution version",
"changes": [
"Enable server OpenClaw and Hermes agent execution model",
"Enable Custom GPT review escalation workflow",
"Enable Windows Codex recovery and authorization assistance workflow",
"Integrate Agent Runtime components",
"Integrate instruction center and versioned agent operations",
"Enable consensus and continuous evolution workflow"
],
"validation": {
"acceptance_report": "reports/self-evolution-agent-os-acceptance-report-v1.md",
"integration_test": "runtime/agent-os/integration_test.py"
},
"release_policy": {
"requires_owner_approval": true,
"direct_main_push": false,
"direct_production_publish": false
}
}
@@ -1,41 +0,0 @@
{
"version": "V1R2C1",
"status": "proposal",
"source": "V1R1C5",
"objective": "Upgrade AIOS from multi-agent execution workflow to autonomous orchestrator architecture",
"architecture": {
"orchestrator": "state-machine-driven autonomous coordinator",
"planner": "GPT worker planning and reasoning layer",
"reviewer": "Custom GPT advisory review layer",
"executors": ["OpenClaw", "Hermes"],
"recovery": "Windows Codex App recovery and privileged assistance"
},
"modules": [
"orchestrator_state_machine",
"run_store_and_evidence",
"policy_gate",
"planner_client",
"reviewer_client",
"executor_dispatcher",
"result_collector",
"notification_worker",
"rollback_manager"
],
"autonomy_boundary": {
"automatic": [
"analysis",
"planning",
"patch_creation",
"testing",
"report_generation"
],
"owner_required": [
"main_merge",
"release_tag",
"production_publish",
"secret_change",
"destructive_operation"
]
},
"migration_target": "V1R2C1"
}
@@ -1,119 +0,0 @@
# V1R1C5 Custom GPT Solution Review Result v1
Status: completed
Reviewer: custom_gpt_review
## Instruction
- Instruction: `agent-instructions/custom_gpt_review/solution-review-v1.md`
- Target Agent: `custom_gpt_review`
- Branch: `patch/self-evolution-agent-orchestration-policy`
- Baseline: `V1R1C4`
- Proposal: `proposals/V1R1C5-agent-os-evolution-proposal.json`
## Problem Context
V1R1C5 proposes to integrate Agent OS multi-agent orchestration capabilities:
- Server OpenClaw and Hermes agent execution model.
- Custom GPT review escalation workflow.
- Windows Codex App recovery and administrator assistance workflow.
- Agent Runtime components.
- Versioned Agent Instruction Center.
- Consensus and continuous evolution workflow.
The current release readiness report marks the change as medium to high risk
because it introduces platform-level orchestration behavior. Production release
remains gated by owner/admin approval, version approval and production release
approval.
## Alternative Solutions Reviewed
### Option A: Server-agent-primary orchestration with advisory and recovery agents
OpenClaw and Hermes remain the primary server-side execution and review agents.
Custom GPT stays advisory-only for complex solution review. Windows Codex App is
used for recovery, administrator assistance and exceptional execution support.
This option matches the current proposal, policy and instruction-center design.
### Option B: Windows Codex App as primary orchestrator
Windows Codex App would drive most orchestration and only call server agents as
helpers. This lowers server dependency risk but weakens the intended durable
server-side execution model and increases operator/workstation coupling.
This option is not recommended for V1R1C5.
### Option C: Defer multi-agent orchestration until Hermes review completes
The branch would keep runtime and instruction-center artifacts but block any
version/release advancement until Hermes architecture review is completed and
recorded.
This option is safest for production, but it delays acceptance of already
implemented recovery and integration validation work.
## Recommendation
Proceed with Option A for controlled V1R1C5 review only.
Do not treat this review as production release approval. V1R1C5 should remain a
proposal until Hermes architecture review is completed, production impact is
reviewed, and owner/admin approval is explicitly recorded.
## Risk
Overall risk: medium to high.
Key risks:
- Hermes architecture review result is still pending.
- Multi-agent routing depends on OpenClaw-controlled communication for Hermes.
- Production impact review is not yet complete.
- Consensus and escalation behavior affects platform-level authority boundaries.
- Recovery workflow is validated, but it must remain approval-gated for high and
critical events.
- Version chain closure is not yet proven across active version, tag, branch,
release note and rollback target.
- GitOps write authorization and account ownership boundaries must remain closed
before release promotion.
## Validation
Evidence available on this branch:
- `runtime/agent-os/integration_test.py` exists and passes.
- Agent OS integration test returns one OpenClaw assignment, one message, one
consensus approval, one escalation and one recovery event.
- Windows Codex recovery/admin assistance report is recorded at
`reports/V1R1C5-windows-codex-recovery-admin-assistance-result-v1.md`.
- Release readiness report preserves owner/admin, version and production release
approval gates.
- Owner notification routing is defined in
`agent-instructions/openclaw/v1r1c5-owner-notification-routing-v1.md`.
- Owner approval gate workflow is defined in
`agent-instructions/openclaw/v1r1c5-owner-approval-gate-v1.md`.
Validation still required before any release action:
- Complete Hermes architecture review and record the result in GitOps.
- Validate OpenClaw-to-Hermes communication path with audit evidence.
- Review production impact and rollback path.
- Confirm no credentials are stored in GitOps artifacts.
- Confirm no direct main push, direct production publish or force push occurs.
- Route high-risk, V-level, production, tag or administrator authorization
decisions through the owner approval gate workflow.
## Next Step
Continue controlled V1R1C5 review. Route Hermes architecture review through the
OpenClaw coordination instruction, then route any release decision through the
OpenClaw owner approval gate before updating release readiness. Confirm version
chain, write authorization, rollback and account ownership closure before any
release approval request.
## Review Result
Decision: needs_review_before_release
-39
View File
@@ -1,39 +0,0 @@
# V1R1C5 Hermes Architecture Review Result v1
Status: approved
Reviewer: hermes
## Context
Baseline: V1R1C4
Branch: patch/self-evolution-agent-orchestration-policy
Proposal: V1R1C5-agent-os-evolution-proposal
## Review Areas
- Architecture consistency
- Runtime integration
- Agent collaboration model
- Risk assessment
- Release readiness
## Result
Decision: approved
Findings:
- V1R1C5 baseline reviewed
- Conditional approval mechanism validated
- Weighted voting and consensus engine reviewed
- Configuration change triggers validated
Recommendations:
- Add config validation for consensus-engine.json changes
- Implement conditional approval for participant/mode config changes
- Implement conditional approval for weight adjustments
- Update integration tests covering V1R1C5 scenarios
Validation Required:
- Integration tests passing
- Conditional approval tests: 8/8 passed
- Consensus engine decision matrix updated
@@ -1,46 +0,0 @@
# V1R1C5 Multi Agent Review Request v1
Status: pending_review
## Review Targets
### Hermes Architecture Review
Instruction:
agent-instructions/hermes/architecture-review-v1.md
Focus:
- Architecture consistency
- Baseline compatibility
- Runtime integration risk
- Release readiness
### Custom GPT Solution Review
Instruction:
agent-instructions/custom_gpt_review/solution-review-v1.md
Focus:
- Complex design decisions
- Alternative solutions
- Risk assessment
- Implementation recommendations
## Review Context
Baseline:
V1R1C4
Branch:
patch/self-evolution-agent-orchestration-policy
Proposal:
V1R1C5-agent-os-evolution-proposal
## Decision
Review results must be recorded before release approval.
Production release remains approval gated.
@@ -1,53 +0,0 @@
# V1R1C5 Release Readiness Report v1
Status: **approved** (updated 2026-07-07T11:46+08:00)
## Scope
Agent OS self-evolution architecture integration.
## Review Summary
Architecture:
- OpenClaw and Hermes server agents are primary execution agents.
- Custom GPT review agent provides advisory architecture review.
- Windows Codex App provides recovery and privileged assistance workflow.
Implementation:
- Runtime components implemented.
- Instruction center implemented.
- Acceptance and evolution workflows defined.
## Risk Assessment
Medium to high risk due to platform-level orchestration changes.
## Required Validation
- ✅ Execute runtime integration tests.
- ✅ Validate agent communication workflow.
- ✅ Validate escalation workflow.
- ✅ Validate recovery workflow.
- ✅ Review production impact.
## Release Gate
- ✅ Owner/Admin approval — **Approved** (2026-07-07T11:46+08:00)
- ✅ Version approval — Granted
- ✅ Production release approval — Granted
Forbidden:
- Direct main push.
- Direct production publish.
- Force push.
## Audit Record
- Hermes Review: approved (v1r1c5-hermes-coordination-v1)
- Conditional Approval Gate: implemented (v1r1c5-hermes-review-improvement-v1)
- Owner Approval: approved (v1r1c5-owner-approval-gate-v1)
- Approval Record: approvals/V1R1C5-migration-owner-approval-20260707.json
## Recommendation
Proceed with controlled V1R1C5 release. Merge patch branch to main via PR, create release tag, activate new baseline V1R1C5.
@@ -1,52 +0,0 @@
# V1R1C5 Windows Codex App Recovery and Admin Assistance Result v1
Status: pass
## Instruction
- Instruction ID: `v1r1c5-recovery-and-admin-assistance-v1`
- Target Agent: `windows_codex_app`
- Source: `agent-instructions/windows_codex_app/v1r1c5-recovery-and-admin-assistance-v1.md`
- Branch: `patch/self-evolution-agent-orchestration-policy`
## Role Executed
Windows Codex App participated as the V1R1C5 recovery, administrator assistance
and exceptional execution support agent.
## Scope
- Confirmed online GitOps branch and instruction source.
- Validated Agent OS integration path includes recovery handling.
- Validated recovery assignment defaults to `windows_codex_app`.
- Validated administrator authorization is required for `high` and `critical`
recovery events.
- No production release, tag, main branch write or force push was performed.
## Verification Evidence
Commands executed from `/data/aios-gitops/workspace`:
```text
python3 -m compileall -q runtime/agent-os
PYTHONPATH=/data/aios-gitops/workspace/runtime/agent-os python3 runtime/agent-os/integration_test.py
PYTHONPATH=/data/aios-gitops/workspace/runtime/agent-os python3 - <<'PY'
from recovery_manager import RecoveryManager, RecoveryEvent
manager = RecoveryManager()
low = RecoveryEvent('hermes', 'review delay', 'medium')
high = RecoveryEvent('openclaw', 'runtime failure', 'high')
critical = RecoveryEvent('openclaw', 'agent unavailable', 'critical')
assert manager.report_failure(high)['assigned_agent'] == 'windows_codex_app'
assert manager.needs_admin_authorization(low) is False
assert manager.needs_admin_authorization(high) is True
assert manager.needs_admin_authorization(critical) is True
assert len(manager.history()) == 1
print('recovery_admin_smoke=ok')
PY
```
Observed results:
- Integration test returned one OpenClaw task assignment, one message, one
consensus approval, one escalation and one recovery event.
- Recovery/admin smoke returned `recovery_admin_smoke=ok`.
@@ -1,47 +0,0 @@
# UCC WeChat Send Backend Owner Test - 2026-07-07
## Status
PASS
## Architecture Source
- Source: `docs/architecture/AIOS_REMOTE_CODEX_MULTI_AGENT_ORCHESTRATION.md`
- Branch: `patch/web-ui-complete-gitops-dashboard-20260706`
- Required path: `message_outbox -> wechat_notify_worker -> wechat_send_backend -> ucc-adapter -> personal WeChat -> sent/failed/retry/audit`
- Required preferred backend: `ucc-adapter`
## Files Changed
- `/data/agent/services/ucc-wechat-qr-adapter/adapter.py`
- `/data/aios/aios_r13_v18_runtime_portable_silent_20260704/ops/ucc-wechat-qr-adapter.py`
- `/data/aios-gitops/workspace/scripts/wechat_send_backend.py`
- `/data/aios-gitops/workspace/tests/test_wechat_send_backend.py`
- `E:/codex/aios_v23_RUNTIME_FULL_DEPLOY/ops/ucc-wechat-qr-adapter.py`
- `E:/codex/aios_v23_RUNTIME_FULL_DEPLOY/ops/test_ucc_wechat_qr_adapter.py`
- `E:/codex/aios_v23_RUNTIME_FULL_DEPLOY/scripts/wechat_send_backend.py`
- `E:/codex/aios_v23_RUNTIME_FULL_DEPLOY/tests/test_wechat_send_backend.py`
## Verification Evidence
- Local tests: `python -m unittest ops.test_ucc_wechat_qr_adapter tests.test_wechat_send_backend` -> `Ran 7 tests ... OK`
- Remote GitOps tests: `python3 tests/test_wechat_send_backend.py` -> `Ran 3 tests ... OK`
- Remote backend select: `backend=ucc-adapter`, `reason=ucc_adapter_alive`
- Remote dry-run: `backend=ucc-adapter`, `endpoint=/api/internal/wechat/send`, `status=dry_run`, `ok=true`
- Adapter health: `status=ok`, `adapter=ucc-wechat-qr-adapter`, `qr_provider=openclaw-weixin`, `plugin_qr_available=true`, `local_token_count=4`
## Owner Message Evidence
- Message ID: `msg_codex_ucc_adapter_owner_20260707075143`
- Owner binding: active `owner` / `owner`, target masked as `o9cq80wS...@im.wechat`, digest prefix `8728601a8b83`
- Message outbox: `status=sent`, `retry_count=0`, `last_error=null`, `sent_at=2026-07-06 23:51:44`
- Send result: `backend=ucc-adapter`, `status=sent`, `code=sent`, `endpoint=/api/internal/wechat/send`, `ok=true`
- Provider message ID: `openclaw-weixin:1783381903704-1c589429`
- WebOps audit: `action=wechat_outbound_sent`, `target=owner`, `backend=ucc-adapter`
- Adapter audit: `action=wechat.send.sent`, `message_type=text`, `item_count=1`, `code=sent`, recipient masked
## Security Notes
- No runtime token, password, cookie, or raw owner WeChat ID is included in this report.
- The adapter audit masks recipients for send events.
- The backend only marks real sends as `sent` when the adapter returns `ok=true` and `status=sent`; dry-run remains `dry_run`.
@@ -1,59 +0,0 @@
# Self Evolution Agent OS Acceptance Report v1
Status: proposal
## Architecture Acceptance
Completed components:
- Agent Governance
- Agent Instruction Center
- Agent Registry
- Agent Runtime Manager
- Task Scheduler
- Message Bus
- Memory Service
- Skill Loader
- Agent Evaluator
- Consensus Engine
- Escalation Engine
- Recovery Manager
- Continuous Evolution workflow definitions
- Release workflow definitions
## Agent Collaboration Model
Primary execution:
- OpenClaw server agents
- Hermes server agents
Review and advisory:
- Custom GPT review agent
Recovery and special authorization assistance:
- Windows Codex App
## GitOps Rules
- Patch-first workflow
- No credentials in Git
- No force push
- Production release requires approval
## Validation Status
Runtime validation code exists in runtime/agent-os/integration_test.py.
## Next Version Proposal
Candidate: V1R1C5
Scope:
- Enable Agent OS runtime integration
- Enable server agent orchestration
- Enable escalation and recovery workflow
- Review production readiness after acceptance results
-28
View File
@@ -1,28 +0,0 @@
"""Agent OS evaluator runtime."""
from dataclasses import dataclass
from typing import Dict
@dataclass
class EvaluationResult:
agent_id: str
quality_score: float
acceptance_score: float
performance_score: float
class AgentEvaluator:
def __init__(self):
self.results: Dict[str, EvaluationResult] = {}
def evaluate(self, agent_id: str, quality: float, acceptance: float, performance: float):
result = EvaluationResult(agent_id, quality, acceptance, performance)
self.results[agent_id] = result
return result
def score(self, agent_id: str):
result = self.results.get(agent_id)
if not result:
return 0
return (result.quality_score + result.acceptance_score + result.performance_score) / 3
-34
View File
@@ -1,34 +0,0 @@
"""Agent OS registry runtime module.
Provides identity and capability discovery for managed agents.
"""
from dataclasses import dataclass, field
from typing import Dict, List, Optional
@dataclass
class AgentProfile:
agent_id: str
family: str
version: str = "0.1"
capabilities: List[str] = field(default_factory=list)
skills: List[str] = field(default_factory=list)
status: str = "offline"
class AgentRegistry:
def __init__(self):
self._agents: Dict[str, AgentProfile] = {}
def register(self, profile: AgentProfile) -> None:
self._agents[profile.agent_id] = profile
def get(self, agent_id: str) -> Optional[AgentProfile]:
return self._agents.get(agent_id)
def discover_by_capability(self, capability: str) -> List[AgentProfile]:
return [a for a in self._agents.values() if capability in a.capabilities]
def list_agents(self) -> List[AgentProfile]:
return list(self._agents.values())
-39
View File
@@ -1,39 +0,0 @@
"""Agent OS lifecycle runtime manager."""
from dataclasses import dataclass
from enum import Enum
from typing import Dict
class AgentState(str, Enum):
OFFLINE = "offline"
STARTING = "starting"
RUNNING = "running"
DEGRADED = "degraded"
STOPPED = "stopped"
@dataclass
class RuntimeAgent:
agent_id: str
state: AgentState = AgentState.OFFLINE
class AgentRuntimeManager:
def __init__(self):
self.agents: Dict[str, RuntimeAgent] = {}
def register(self, agent_id: str):
self.agents[agent_id] = RuntimeAgent(agent_id)
def start(self, agent_id: str):
self.agents[agent_id].state = AgentState.RUNNING
def stop(self, agent_id: str):
self.agents[agent_id].state = AgentState.STOPPED
def health_check(self, agent_id: str):
return self.agents.get(agent_id, RuntimeAgent(agent_id)).state
def recover(self, agent_id: str):
self.start(agent_id)
-98
View File
@@ -1,98 +0,0 @@
"""Public API facade for Agent OS runtime."""
from __future__ import annotations
from pathlib import Path
import sys
from typing import Any
RUNTIME_DIR = Path(__file__).resolve().parent
if str(RUNTIME_DIR) not in sys.path:
sys.path.insert(0, str(RUNTIME_DIR))
from agent_registry import AgentRegistry # noqa: E402
from memory_service import MemoryService # noqa: E402
from skill_loader import SkillLoader # noqa: E402
from task_scheduler import TaskScheduler # noqa: E402
class AgentOSApi:
def __init__(self) -> None:
self.registry = AgentRegistry()
self.memory = MemoryService()
self.skills = SkillLoader()
self.scheduler = TaskScheduler(registry=self.registry)
def register_agent(
self,
agent_id: str,
name: str,
capabilities: list[str] | None = None,
skills: list[str] | None = None,
metadata: dict[str, Any] | None = None,
) -> dict[str, Any]:
return self.registry.register_agent(agent_id, name, capabilities, skills, metadata)
def list_agents(self, status: str | None = None) -> list[dict[str, Any]]:
return self.registry.list_agents(status=status)
def submit_task(
self,
capability: str,
payload: dict[str, Any] | None = None,
priority: int = 5,
timeout_seconds: float = 60.0,
max_retries: int = 1,
) -> dict[str, Any]:
return self.scheduler.submit_task(capability, payload, priority, timeout_seconds, max_retries)
def query_status(self, task_id: str) -> dict[str, Any]:
return self.scheduler.query_status(task_id)
def memory_store(
self,
key: str,
value: Any,
kind: str = "working",
scope: str = "default",
tags: list[str] | None = None,
) -> dict[str, Any]:
return self.memory.store(key=key, value=value, kind=kind, scope=scope, tags=tags)
def skill_list(self, capability: str | None = None) -> list[dict[str, Any]]:
return self.skills.list_skills(capability=capability)
api = AgentOSApi()
def register_agent(*args: Any, **kwargs: Any) -> dict[str, Any]:
return api.register_agent(*args, **kwargs)
def list_agents(*args: Any, **kwargs: Any) -> list[dict[str, Any]]:
return api.list_agents(*args, **kwargs)
def submit_task(*args: Any, **kwargs: Any) -> dict[str, Any]:
return api.submit_task(*args, **kwargs)
def query_status(*args: Any, **kwargs: Any) -> dict[str, Any]:
return api.query_status(*args, **kwargs)
def memory_store(*args: Any, **kwargs: Any) -> dict[str, Any]:
return api.memory_store(*args, **kwargs)
def skill_list(*args: Any, **kwargs: Any) -> list[dict[str, Any]]:
return api.skill_list(*args, **kwargs)
if __name__ == "__main__":
register_agent("agent.local", "Local Agent", capabilities=["self-test"], skills=["core"])
task = submit_task("self-test", {"message": "hello"})
memory_store("last_task", task["task_id"], kind="working")
print({"agents": list_agents(), "task": query_status(task["task_id"]), "skills": skill_list()})
-87
View File
@@ -1,87 +0,0 @@
"""Agent OS consensus engine runtime."""
from typing import Any, Dict, List
class ConsensusEngine:
"""Consensus engine supporting weighted voting with conditional approval.
Decision outcomes:
- "approve": approved outright
- "reject": explicitly rejected
- "review": needs review (tie or insufficient votes)
- "conditional_approval": approved pending further review (new in V1R1C5)
"""
def __init__(self):
self.base_weights = {
"custom_gpt": 2,
"windows_codex": 2,
"server_agent": 1,
}
def calculate(self, votes: List[dict]) -> dict:
result = {"approve": 0, "reject": 0}
for vote in votes:
weight = vote.get("weight", self.base_weights.get(vote.get("agent_type"), 1))
result[vote.get("decision", "reject")] += weight
return result
def decide(self, votes: List[dict]) -> str:
"""Determine consensus outcome from weighted votes.
Returns one of: "approve", "reject", "review", "conditional_approval".
"""
result = self.calculate(votes)
if result["approve"] > result["reject"]:
# Check if any participant voted with conditions
conditional_votes = [
v for v in votes if v.get("condition", False)
]
if conditional_votes:
return "conditional_approval"
return "approve"
return "review"
def conditional_decide(
self,
votes: List[dict],
config_changed: bool = False,
config_participants_changed: bool = False,
config_modes_changed: bool = False,
config_disabled: bool = False,
config_weights_adjusted: bool = False,
) -> str:
"""Decision with conditional approval for configuration changes.
This method extends `decide` by checking if configuration changes
warrant conditional approval rather than full approval.
Conditional approval triggers:
1. participants list modified (V1R1C5)
2. modes list modified (V1R1C5)
3. consensus disabled (V1R1C5)
4. weights adjusted beyond threshold (V1R1C5)
"""
base_decision = self.decide(votes)
# If configuration shows major changes, override to conditional_approval
if config_disabled:
# Disabling consensus is a critical change
if base_decision == "approve":
return "conditional_approval"
return base_decision
if config_participants_changed or config_modes_changed:
# Participants or modes changed — treat as conditional
if base_decision == "approve":
return "conditional_approval"
return base_decision
if config_weights_adjusted:
# Weights adjusted beyond threshold — treat as conditional
if base_decision == "approve":
return "conditional_approval"
return base_decision
return base_decision
-23
View File
@@ -1,23 +0,0 @@
"""Agent OS escalation engine."""
from dataclasses import dataclass
@dataclass
class EscalationRequest:
source_agent: str
issue: str
context: dict
target: str = "custom_gpt_review"
class EscalationEngine:
def __init__(self):
self.requests = []
def escalate(self, request: EscalationRequest):
self.requests.append(request)
return {"status": "escalated", "target": request.target}
def list_requests(self):
return self.requests
-91
View File
@@ -1,91 +0,0 @@
"""Closed-loop self-evolution engine."""
from __future__ import annotations
from dataclasses import dataclass, field
from enum import Enum
import time
import uuid
from typing import Any, Callable
class EvolutionStage(str, Enum):
DETECT = "detect"
PLAN = "plan"
SCHEDULE = "schedule"
EXECUTE = "execute"
VALIDATE = "validate"
VOTE = "vote"
PATCH = "patch"
LEARN = "learn"
@dataclass
class EvolutionRun:
run_id: str = field(default_factory=lambda: str(uuid.uuid4()))
stage: EvolutionStage = EvolutionStage.DETECT
context: dict[str, Any] = field(default_factory=dict)
timeline: list[dict[str, Any]] = field(default_factory=list)
status: str = "created"
def record(self, stage: EvolutionStage, result: Any) -> None:
self.stage = stage
self.timeline.append({"stage": stage.value, "result": result, "ts": time.time()})
StageHandler = Callable[[EvolutionRun], Any]
class EvolutionEngine:
ORDER = [
EvolutionStage.DETECT,
EvolutionStage.PLAN,
EvolutionStage.SCHEDULE,
EvolutionStage.EXECUTE,
EvolutionStage.VALIDATE,
EvolutionStage.VOTE,
EvolutionStage.PATCH,
EvolutionStage.LEARN,
]
def __init__(self) -> None:
self._handlers: dict[EvolutionStage, StageHandler] = {}
def register_handler(self, stage: EvolutionStage | str, handler: StageHandler) -> None:
self._handlers[EvolutionStage(stage)] = handler
def detect(self, run: EvolutionRun) -> Any:
return self._handle(EvolutionStage.DETECT, run, {"detected": True, "signals": run.context.get("signals", [])})
def plan(self, run: EvolutionRun) -> Any:
return self._handle(EvolutionStage.PLAN, run, {"plan": run.context.get("plan", [])})
def schedule(self, run: EvolutionRun) -> Any:
return self._handle(EvolutionStage.SCHEDULE, run, {"scheduled": True})
def execute(self, run: EvolutionRun) -> Any:
return self._handle(EvolutionStage.EXECUTE, run, {"executed": True})
def validate(self, run: EvolutionRun) -> Any:
return self._handle(EvolutionStage.VALIDATE, run, {"valid": True})
def vote(self, run: EvolutionRun) -> Any:
return self._handle(EvolutionStage.VOTE, run, {"decision": "accepted"})
def patch(self, run: EvolutionRun) -> Any:
return self._handle(EvolutionStage.PATCH, run, {"patch_ready": True})
def learn(self, run: EvolutionRun) -> Any:
return self._handle(EvolutionStage.LEARN, run, {"learned": True})
def run_cycle(self, context: dict[str, Any] | None = None) -> dict[str, Any]:
run = EvolutionRun(context=dict(context or {}), status="running")
for stage in self.ORDER:
result = getattr(self, stage.value)(run)
run.record(stage, result)
run.status = "completed"
return {"run_id": run.run_id, "status": run.status, "timeline": run.timeline}
def _handle(self, stage: EvolutionStage, run: EvolutionRun, default: Any) -> Any:
handler = self._handlers.get(stage)
return handler(run) if handler else default
-232
View File
@@ -1,232 +0,0 @@
"""Agent OS integration validation suite."""
from agent_runtime_manager import AgentRuntimeManager
from agent_registry import AgentRegistry, AgentProfile
from task_scheduler import TaskScheduler, Task
from message_bus import MessageBus, AgentMessage
from memory_service import MemoryService, MemoryEntry
from skill_loader import SkillLoader, SkillPackage
from consensus_engine import ConsensusEngine
from escalation_engine import EscalationEngine, EscalationRequest
from recovery_manager import RecoveryManager, RecoveryEvent
def run_integration_test():
runtime = AgentRuntimeManager()
registry = AgentRegistry()
scheduler = TaskScheduler()
memory = MemoryService()
skills = SkillLoader()
bus = MessageBus()
consensus = ConsensusEngine()
escalation = EscalationEngine()
recovery = RecoveryManager()
registry.register(AgentProfile("openclaw", "server", capabilities=["optimize"]))
runtime.register("openclaw")
scheduler.register_agent("openclaw", ["optimize"])
scheduler.submit(Task("task-1", "optimize"))
assigned = scheduler.dispatch()[0].assigned_agent
skills.register(SkillPackage("optimization", "1.0", ["optimize"]))
memory.save(MemoryEntry("mem-1", "openclaw", "experience", {"task": "task-1"}))
bus.send(AgentMessage("openclaw", "hermes", "task_complete", {}))
decision = consensus.decide([
{"agent_type": "custom_gpt", "decision": "approve"},
{"agent_type": "server_agent", "decision": "approve"},
])
escalation.escalate(EscalationRequest("openclaw", "architecture question", {}))
recovery.report_failure(RecoveryEvent("openclaw", "runtime error", "high"))
return {
"task_assigned": assigned,
"memory_count": len(memory.query("openclaw")),
"messages": len(bus.consume()),
"decision": decision,
"escalations": len(escalation.list_requests()),
"recoveries": len(recovery.history()),
}
def test_conditional_approval_on_config_participants_change():
"""V1R1C5: Conditional approval when participants list is modified."""
consensus = ConsensusEngine()
# Simulate votes where approve wins, but participants changed
votes = [
{"agent_type": "custom_gpt", "decision": "approve"},
{"agent_type": "server_agent", "decision": "approve"},
]
result = consensus.conditional_decide(
votes,
config_participants_changed=True,
)
assert result == "conditional_approval", (
f"Expected conditional_approval, got {result}"
)
return result
def test_conditional_approval_on_config_modes_change():
"""V1R1C5: Conditional approval when modes list is modified."""
consensus = ConsensusEngine()
# Simulate votes where approve wins, but modes changed
votes = [
{"agent_type": "custom_gpt", "decision": "approve"},
{"agent_type": "server_agent", "decision": "approve"},
]
result = consensus.conditional_decide(
votes,
config_modes_changed=True,
)
assert result == "conditional_approval", (
f"Expected conditional_approval, got {result}"
)
return result
def test_conditional_approval_on_config_disabled():
"""V1R1C5: Conditional approval when consensus is disabled."""
consensus = ConsensusEngine()
# Simulate votes where approve wins, but consensus is disabled
votes = [
{"agent_type": "custom_gpt", "decision": "approve"},
{"agent_type": "server_agent", "decision": "approve"},
]
result = consensus.conditional_decide(
votes,
config_disabled=True,
)
assert result == "conditional_approval", (
f"Expected conditional_approval, got {result}"
)
return result
def test_conditional_approval_on_weights_adjusted():
"""V1R1C5: Conditional approval when weights are significantly adjusted."""
consensus = ConsensusEngine()
# Simulate votes where approve wins, but weights were adjusted
votes = [
{"agent_type": "custom_gpt", "decision": "approve"},
{"agent_type": "server_agent", "decision": "reject"},
]
result = consensus.conditional_decide(
votes,
config_weights_adjusted=True,
)
# Here approve=2, reject=1 so approve wins, but conditional due to weight changes
assert result == "conditional_approval", (
f"Expected conditional_approval, got {result}"
)
return result
def test_conditional_approval_unrelated_change_approves():
"""V1R1C5: Unrelated changes should still get full approval."""
consensus = ConsensusEngine()
votes = [
{"agent_type": "custom_gpt", "decision": "approve"},
{"agent_type": "server_agent", "decision": "approve"},
]
result = consensus.conditional_decide(
votes,
config_participants_changed=False,
config_modes_changed=False,
config_disabled=False,
config_weights_adjusted=False,
)
assert result == "approve", (
f"Expected approve when no config changes, got {result}"
)
return result
def test_reject_on_majority_reject():
"""Reject when majority votes reject, even without config changes."""
consensus = ConsensusEngine()
votes = [
{"agent_type": "custom_gpt", "decision": "reject"},
{"agent_type": "server_agent", "decision": "reject"},
]
result = consensus.conditional_decide(
votes,
config_participants_changed=True, # even with changes
)
assert result == "review", (
f"Expected review when majority rejects, got {result}"
)
return result
def test_conditional_vote_in_vote_payload():
"""V1R1C5: A vote with condition=True triggers conditional approval."""
consensus = ConsensusEngine()
votes = [
{"agent_type": "custom_gpt", "decision": "approve", "condition": True},
{"agent_type": "server_agent", "decision": "approve"},
]
result = consensus.decide(votes)
assert result == "conditional_approval", (
f"Expected conditional_approval for conditional vote, got {result}"
)
return result
def test_no_conditional_vote_approves_normally():
"""Without any conditional votes, approval proceeds normally."""
consensus = ConsensusEngine()
votes = [
{"agent_type": "custom_gpt", "decision": "approve"},
{"agent_type": "server_agent", "decision": "approve"},
]
result = consensus.decide(votes)
assert result == "approve", (
f"Expected approve without conditional votes, got {result}"
)
return result
def run_all_tests():
tests = [
("conditional_approval_on_config_participants_change", test_conditional_approval_on_config_participants_change),
("conditional_approval_on_config_modes_change", test_conditional_approval_on_config_modes_change),
("conditional_approval_on_config_disabled", test_conditional_approval_on_config_disabled),
("conditional_approval_on_weights_adjusted", test_conditional_approval_on_weights_adjusted),
("conditional_approval_unrelated_change_approves", test_conditional_approval_unrelated_change_approves),
("reject_on_majority_reject", test_reject_on_majority_reject),
("conditional_vote_in_vote_payload", test_conditional_vote_in_vote_payload),
("no_conditional_vote_approves_normally", test_no_conditional_vote_approves_normally),
]
results = {}
for name, test_fn in tests:
try:
result = test_fn()
results[name] = {"status": "PASS", "result": result}
print(f" ✓ {name}: {result}")
except AssertionError as e:
results[name] = {"status": "FAIL", "error": str(e)}
print(f" ✗ {name}: {e}")
print(f"\n{'='*60}")
passed = sum(1 for v in results.values() if v["status"] == "PASS")
total = len(tests)
print(f"V1R1C5 Conditional Approval Tests: {passed}/{total} passed")
return results
if __name__ == "__main__":
print("Integration Test Suite\n" + "=" * 60)
result = run_integration_test()
print(f"\nBase Integration Test Result: {result}")
print("\n--- V1R1C5 Conditional Approval Tests ---")
run_all_tests()
-30
View File
@@ -1,30 +0,0 @@
"""Agent OS memory service runtime."""
from dataclasses import dataclass
from typing import Dict, List
@dataclass
class MemoryEntry:
memory_id: str
agent_id: str
memory_type: str
content: dict
quality_score: float = 0.0
class MemoryService:
def __init__(self):
self.store: Dict[str, List[MemoryEntry]] = {}
def save(self, entry: MemoryEntry):
self.store.setdefault(entry.agent_id, []).append(entry)
def query(self, agent_id: str, memory_type: str = None):
items = self.store.get(agent_id, [])
if memory_type:
return [m for m in items if m.memory_type == memory_type]
return items
def reflect(self, agent_id: str):
return self.query(agent_id, "reflection")
-29
View File
@@ -1,29 +0,0 @@
"""Agent OS message bus runtime."""
from dataclasses import dataclass
from typing import List
@dataclass
class AgentMessage:
sender: str
receiver: str
event: str
payload: dict
class MessageBus:
def __init__(self):
self.queue: List[AgentMessage] = []
def send(self, message: AgentMessage):
self.queue.append(message)
def broadcast(self, sender: str, event: str, payload: dict, receivers: List[str]):
for receiver in receivers:
self.send(AgentMessage(sender, receiver, event, payload))
def consume(self):
messages = list(self.queue)
self.queue.clear()
return messages
@@ -1,40 +0,0 @@
"""V1R2C1 orchestrator evidence writer."""
from dataclasses import dataclass, field
from time import time
from typing import Any, Dict, List
import uuid
@dataclass
class EvidenceRecord:
evidence_id: str = field(default_factory=lambda: str(uuid.uuid4()))
category: str = "general"
data: Dict[str, Any] = field(default_factory=dict)
created_at: float = field(default_factory=time)
class EvidenceWriter:
def __init__(self):
self.records: List[EvidenceRecord] = []
def write(self, category: str, data: Dict[str, Any]):
record = EvidenceRecord(category=category, data=data)
self.records.append(record)
return record
def query(self, category: str = None):
if category:
return [r for r in self.records if r.category == category]
return self.records
def export_audit(self):
return [
{
"evidence_id": r.evidence_id,
"category": r.category,
"data": r.data,
"created_at": r.created_at,
}
for r in self.records
]
@@ -1,55 +0,0 @@
"""V1R2C1 executor dispatcher."""
from dataclasses import dataclass, field
from typing import Any, Dict, List
@dataclass
class ExecutionRequest:
agent: str
task: str
context: Dict[str, Any] = field(default_factory=dict)
@dataclass
class ExecutionResult:
agent: str
status: str
output: Dict[str, Any] = field(default_factory=dict)
class ExecutorDispatcher:
"""Dispatch execution requests to registered agent types.
Actual external agent communication is handled by integration layers.
"""
def __init__(self):
self.executors = {
"openclaw": "server_execution",
"hermes": "architecture_review",
"windows_codex_app": "recovery_assistance",
}
self.history: List[ExecutionResult] = []
def dispatch(self, request: ExecutionRequest):
if request.agent not in self.executors:
result = ExecutionResult(
agent=request.agent,
status="unsupported",
output={"error": "unknown executor"},
)
else:
result = ExecutionResult(
agent=request.agent,
status="queued",
output={
"executor_type": self.executors[request.agent],
"task": request.task,
},
)
self.history.append(result)
return result
def list_history(self):
return self.history
@@ -1,59 +0,0 @@
"""V1R2C1 autonomous orchestrator integration tests."""
from .state_machine import StateMachine, RunState
from .run_store import RunStore
from .evidence_writer import EvidenceWriter
from .policy_gate import PolicyGate, ActionLevel
from .planner_client import PlannerClient
from .reviewer_client import ReviewerClient
from .executor_dispatcher import ExecutorDispatcher, ExecutionRequest
from .result_collector import ResultCollector
from .notification_worker import NotificationWorker
from .rollback_manager import RollbackManager
def run_tests():
results = {}
state = StateMachine()
state.transition(RunState.PLANNING)
results["state_machine"] = state.current() == RunState.PLANNING
store = RunStore()
run = store.create({"task": "v1r2c1"})
store.update_state(run.run_id, "executing")
results["run_store"] = store.get(run.run_id).state == "executing"
evidence = EvidenceWriter()
evidence.write("test", {"ok": True})
results["evidence"] = len(evidence.query("test")) == 1
policy = PolicyGate()
results["policy_auto"] = policy.evaluate("testing") == ActionLevel.AUTOMATIC
results["policy_owner"] = policy.evaluate("release_tag") == ActionLevel.OWNER_APPROVAL
planner = PlannerClient()
results["planner"] = len(planner.create_plan("optimize" ).steps) > 0
reviewer = ReviewerClient()
results["reviewer"] = reviewer.review("hermes", {"proposal": "test"}).decision == "conditional"
dispatcher = ExecutorDispatcher()
results["dispatcher"] = dispatcher.dispatch(ExecutionRequest("openclaw", "test")).status == "queued"
collector = ResultCollector()
collector.collect("openclaw", "success")
results["collector"] = len(collector.success()) == 1
notifier = NotificationWorker()
results["notification"] = notifier.notify("approval", "high")["status"] == "queued"
rollback = RollbackManager()
rollback.create_request("V1R2C1", "V1R1C5", "test")
results["rollback"] = rollback.requires_approval()
return results
if __name__ == "__main__":
print(run_tests())
@@ -1,40 +0,0 @@
"""V1R2C1 orchestrator notification worker."""
from dataclasses import dataclass, field
from time import time
from typing import Any, Dict, List
@dataclass
class Notification:
event: str
priority: str
payload: Dict[str, Any] = field(default_factory=dict)
created_at: float = field(default_factory=time)
class NotificationWorker:
"""Owner and agent notification routing abstraction."""
def __init__(self):
self.queue: List[Notification] = []
self.channels = {
"primary": "configured_owner_channel",
"fallback": "configured_backup_channel",
}
def notify(self, event: str, priority: str, payload: Dict[str, Any] | None = None):
notification = Notification(
event=event,
priority=priority,
payload=payload or {},
)
self.queue.append(notification)
return {
"status": "queued",
"primary_channel": self.channels["primary"],
"fallback_enabled": True,
}
def pending(self):
return self.queue
@@ -1,40 +0,0 @@
"""V1R2C1 autonomous orchestrator core controller."""
from .state_machine import StateMachine, RunState
from .run_store import RunStore
from .evidence_writer import EvidenceWriter
from .policy_gate import PolicyGate
class AutonomousOrchestrator:
def __init__(self):
self.run_store = RunStore()
self.evidence = EvidenceWriter()
self.policy = PolicyGate()
self.state_machine = StateMachine()
def create_run(self, context=None):
run = self.run_store.create(context)
self.evidence.write("run_created", {"run_id": run.run_id})
return run
def execute_stage(self, run_id, stage, action=None):
run = self.run_store.get(run_id)
if not run:
return {"status": "not_found"}
if action and not self.policy.can_execute(action):
self.evidence.write("policy_block", {"run_id": run_id, "action": action})
return {"status": "approval_required", "action": action}
self.state_machine.transition(RunState.EXECUTING)
self.run_store.update_state(run_id, stage)
self.evidence.write("stage_execution", {"run_id": run_id, "stage": stage})
return {"status": "executed", "stage": stage}
def complete(self, run_id):
self.state_machine.transition(RunState.COMPLETED)
self.run_store.update_state(run_id, "completed")
self.evidence.write("completed", {"run_id": run_id})
return {"status": "completed", "run_id": run_id}
@@ -1,38 +0,0 @@
"""V1R2C1 planner client abstraction."""
from dataclasses import dataclass, field
from typing import Any, Dict, List
@dataclass
class Plan:
objective: str
steps: List[str] = field(default_factory=list)
metadata: Dict[str, Any] = field(default_factory=dict)
class PlannerClient:
"""Planner interface for GPT planning workers.
This module defines orchestration boundaries and does not store credentials.
"""
def __init__(self):
self.plans = []
def create_plan(self, objective: str, context: Dict[str, Any] | None = None):
plan = Plan(
objective=objective,
steps=[
"analyze_context",
"generate_options",
"select_execution_path",
"prepare_validation"
],
metadata=context or {},
)
self.plans.append(plan)
return plan
def history(self):
return self.plans
@@ -1,40 +0,0 @@
"""V1R2C1 autonomous orchestrator policy gate."""
from enum import Enum
class ActionLevel(str, Enum):
AUTOMATIC = "automatic"
OWNER_APPROVAL = "owner_approval"
class PolicyGate:
def __init__(self):
self.owner_required = {
"main_merge",
"release_tag",
"production_publish",
"secret_change",
"destructive_operation",
}
self.automatic_allowed = {
"analysis",
"planning",
"patch_creation",
"testing",
"report_generation",
}
def evaluate(self, action: str):
if action in self.owner_required:
return ActionLevel.OWNER_APPROVAL
if action in self.automatic_allowed:
return ActionLevel.AUTOMATIC
return ActionLevel.OWNER_APPROVAL
def can_execute(self, action: str, approved: bool = False):
level = self.evaluate(action)
if level == ActionLevel.AUTOMATIC:
return True
return approved
@@ -1,38 +0,0 @@
"""V1R2C1 orchestrator result collector."""
from dataclasses import dataclass, field
from typing import Any, Dict, List
from time import time
@dataclass
class ExecutionResultRecord:
agent: str
status: str
output: Dict[str, Any] = field(default_factory=dict)
created_at: float = field(default_factory=time)
class ResultCollector:
"""Collect execution results and expose orchestration state."""
def __init__(self):
self.results: List[ExecutionResultRecord] = []
def collect(self, agent: str, status: str, output: Dict[str, Any] | None = None):
result = ExecutionResultRecord(
agent=agent,
status=status,
output=output or {},
)
self.results.append(result)
return result
def latest(self):
return self.results[-1] if self.results else None
def success(self):
return [r for r in self.results if r.status in {"success", "completed"}]
def failures(self):
return [r for r in self.results if r.status in {"failed", "error"}]
@@ -1,38 +0,0 @@
"""V1R2C1 reviewer client abstraction."""
from dataclasses import dataclass, field
from typing import Any, Dict, List
@dataclass
class ReviewResult:
reviewer: str
decision: str
issues: List[str] = field(default_factory=list)
recommendations: List[str] = field(default_factory=list)
metadata: Dict[str, Any] = field(default_factory=dict)
class ReviewerClient:
"""Review interface for Custom GPT advisory and Hermes architecture review."""
def __init__(self):
self.reviews = []
def review(self, reviewer: str, proposal: Dict[str, Any]):
result = ReviewResult(
reviewer=reviewer,
decision="conditional",
issues=[],
recommendations=[
"validate implementation",
"check policy constraints",
"record evidence"
],
metadata=proposal,
)
self.reviews.append(result)
return result
def history(self):
return self.reviews
@@ -1,35 +0,0 @@
"""V1R2C1 orchestrator rollback manager."""
from dataclasses import dataclass, field
from time import time
from typing import List
@dataclass
class RollbackRequest:
source_version: str
target_version: str
reason: str
created_at: float = field(default_factory=time)
class RollbackManager:
"""Manage safe rollback planning without automatic destructive actions."""
def __init__(self):
self.requests: List[RollbackRequest] = []
def create_request(self, source_version: str, target_version: str, reason: str):
request = RollbackRequest(
source_version=source_version,
target_version=target_version,
reason=reason,
)
self.requests.append(request)
return request
def history(self):
return self.requests
def requires_approval(self):
return True
@@ -1,32 +0,0 @@
"""V1R2C1 orchestrator run store."""
from dataclasses import dataclass, field
from time import time
from typing import Any, Dict
import uuid
@dataclass
class RunRecord:
run_id: str = field(default_factory=lambda: str(uuid.uuid4()))
state: str = "created"
context: Dict[str, Any] = field(default_factory=dict)
events: list = field(default_factory=list)
created_at: float = field(default_factory=time)
class RunStore:
def __init__(self):
self.runs = {}
def create(self, context=None):
run = RunRecord(context=context or {})
self.runs[run.run_id] = run
return run
def update_state(self, run_id, state):
self.runs[run_id].state = state
self.runs[run_id].events.append({"state": state, "time": time()})
def get(self, run_id):
return self.runs.get(run_id)
@@ -1,25 +0,0 @@
"""V1R2C1 autonomous orchestrator state machine."""
from enum import Enum
class RunState(str, Enum):
CREATED = "created"
PLANNING = "planning"
EXECUTING = "executing"
VALIDATING = "validating"
COMPLETED = "completed"
FAILED = "failed"
PAUSED = "paused"
class StateMachine:
def __init__(self):
self.state = RunState.CREATED
def transition(self, new_state: RunState):
self.state = new_state
return self.state
def current(self):
return self.state
-27
View File
@@ -1,27 +0,0 @@
"""Agent OS recovery manager."""
from dataclasses import dataclass
from typing import List
@dataclass
class RecoveryEvent:
source: str
issue: str
severity: str
assigned_agent: str = "windows_codex_app"
class RecoveryManager:
def __init__(self):
self.events: List[RecoveryEvent] = []
def report_failure(self, event: RecoveryEvent):
self.events.append(event)
return {"status": "recovery_started", "assigned_agent": event.assigned_agent}
def history(self):
return self.events
def needs_admin_authorization(self, event: RecoveryEvent):
return event.severity in {"high", "critical"}
-31
View File
@@ -1,31 +0,0 @@
"""Agent OS skill loader runtime."""
from dataclasses import dataclass, field
from typing import Dict, List
@dataclass
class SkillPackage:
skill_id: str
version: str
capabilities: List[str] = field(default_factory=list)
enabled: bool = True
class SkillLoader:
def __init__(self):
self.skills: Dict[str, SkillPackage] = {}
def register(self, skill: SkillPackage):
self.skills[skill.skill_id] = skill
def validate(self, skill_id: str):
skill = self.skills.get(skill_id)
return bool(skill and skill.enabled and skill.version)
def load_for_capability(self, capability: str):
return [s for s in self.skills.values() if capability in s.capabilities and s.enabled]
def disable(self, skill_id: str):
if skill_id in self.skills:
self.skills[skill_id].enabled = False
-36
View File
@@ -1,36 +0,0 @@
"""Agent OS task scheduler runtime."""
from dataclasses import dataclass, field
from typing import Dict, List
@dataclass
class Task:
task_id: str
capability: str
priority: int = 0
status: str = "queued"
assigned_agent: str = ""
class TaskScheduler:
def __init__(self):
self.tasks: Dict[str, Task] = {}
self.agents: Dict[str, List[str]] = {}
def register_agent(self, agent_id: str, capabilities: List[str]):
self.agents[agent_id] = capabilities
def submit(self, task: Task):
self.tasks[task.task_id] = task
def dispatch(self):
for task in self.tasks.values():
if task.status != "queued":
continue
for agent, caps in self.agents.items():
if task.capability in caps:
task.assigned_agent = agent
task.status = "assigned"
break
return list(self.tasks.values())