8.3 KiB
8.3 KiB
AIOS V2 模块契约
- 文档版本:
V2R1C0-candidate - 状态:候选实现契约基线
- 原则:Control Plane 权威、Runtime 执行、全链路租户隔离、所有状态可审计
1. 通用上下文契约
所有控制与执行请求必须携带以下上下文:
| 字段 | 必填 | 说明 |
|---|---|---|
tenant_id |
是 | 权威租户标识 |
principal_id |
控制请求是 | 已认证主体 |
trace_id |
是 | 全链路追踪 |
task_id |
执行阶段是 | AIOS 权威任务 |
session_id |
Web/交互请求建议 | 用户会话 |
policy_version |
控制请求是 | 策略版本 |
idempotency_key |
创建/执行是 | 幂等键 |
规则:
- 缺少必填字段时 fail closed。
- 客户端不得覆盖由可信代理或 AIOS 生成的
tenant_id。 - Runtime 返回的 tenant/task/trace 必须与请求完全匹配。
- 所有持久化键、缓存键和队列分区必须包含租户命名空间。
2. Tenant Contract
2.1 TenantRecord
tenant_id
display_name
status
metadata
created_at
updated_at
约束:
tenant_id不可为空且不可变。status至少支持active和受控停用状态。- Tenant 只由 AIOS Control Plane 创建和维护。
- Runtime 不得创建租户。
实现:active-runtime/app/aios_v2/control_plane.py
3. Agent Contract
3.1 AgentRecord
agent_id
tenant_id
display_name
runtime
capabilities
enabled
metadata
created_at
updated_at
约束:
- Agent 属于唯一租户。
runtime由 Registry 决定,可取openclaw、hermes或后续注册 Runtime。capabilities是允许调度的动作集合。metadata可存cell_id、profile_id、priority 等非敏感引用。- 不得在 Agent metadata 中保存明文凭据。
4. Task Contract
4.1 TaskRecord
task_id
tenant_id
agent_id
action
payload
state
revision
idempotency_key
request_digest
result
error
created_by
approved_by
created_at
updated_at
4.2 状态机
CREATED -> APPROVED -> RUNNING -> COMPLETED
| | |
+----------+----------+-> CANCELLED
+-> FAILED
允许转换:
| 当前 | 允许目标 |
|---|---|
| CREATED | APPROVED, CANCELLED |
| APPROVED | RUNNING, CANCELLED |
| RUNNING | COMPLETED, FAILED, CANCELLED |
| COMPLETED | 无 |
| FAILED | 无 |
| CANCELLED | 无 |
约束:
- 每次转换必须校验
revision。 - COMPLETED 必须带
result。 - FAILED 必须带
error。 - 每次转换生成 AuditEvent。
- Runtime 不得直接写 Task Store,只能通过 Orchestrator reconcile。
5. Policy Contract
5.1 PolicyDecision
allowed
reason
policy_version
约束:
- Policy 默认拒绝。
- Runtime 不得覆盖 PolicyDecision。
- 拒绝必须审计。
- 高风险动作必须经过 Approval。
6. Audit Contract
6.1 AuditEvent
event_id
tenant_id
principal_id
trace_id
action
resource_type
resource_id
outcome
policy_version
details
created_at
约束:
- 按租户查询。
details不得包含明文凭据。- OpenClaw/Hermes 生命周期事件必须映射到统一 AuditEvent。
- 生产版需增加不可变外部固化和完整性验证。
7. OpenClaw Contract
7.1 OpenClawCommand
contract_version
command_id
tenant_id
task_id
trace_id
action
payload
idempotency_key
created_at
expires_at
key_id
signature
签名覆盖:
- command_id
- tenant_id
- task_id
- trace_id
- action
- payload
- idempotency_key
- created_at / expires_at
- contract_version / key_id
约束:
- 使用规范化 JSON 和 HMAC-SHA256。
- 只接受已批准任务生成的命令。
- 过期、未来时间超差、签名错误命令必须拒绝。
key_id只引用运行时材料,不包含材料本身。
7.2 OpenClawResult
command_id
tenant_id
task_id
trace_id
state
output
error
started_at
finished_at
runtime_id
attempts
状态:
ACCEPTED
RUNNING
COMPLETED
FAILED
CANCELLED
TIMED_OUT
REJECTED
约束:
- Adapter 对外只接受终态结果用于 reconcile。
- 身份字段不匹配时拒绝回写。
- 结果通过 Orchestrator 更新 AIOS Task。
7.3 RuntimeHealth
runtime
runtime_id
status
version
heartbeat_at
active_tasks
workspace_isolated
credential_ref_configured
details
健康策略:
- heartbeat 不得超时。
- workspace isolation 与 credential reference 必须符合策略。
- 不安全 Runtime 应 quarantine,不得继续接收新任务。
实现:active-runtime/app/aios_openclaw/
8. Hermes Contract
8.1 HermesJob
job_id
tenant_id
cell_id
profile_id
task_id
trace_id
action
payload
idempotency_key
priority
state
revision
assigned_worker_id
lease_expires_at
created_at
updated_at
状态机:
QUEUED -> CLAIMED -> RUNNING -> COMPLETED
| | |
+---------+----------+-> CANCELLED
+-> FAILED
约束:
tenant_id + cell_id + profile_id形成执行分区。- claim 只能领取同分区 Job。
- Worker ID 不得跨分区复用。
- Lease 到期 Job 回到 QUEUED。
- revision 冲突不得覆盖。
8.2 HermesResult
job_id
tenant_id
task_id
trace_id
state
worker_id
output
error
started_at
finished_at
约束:
- COMPLETED 必须有 output。
- FAILED 必须有 error。
- 只允许 AIOS Orchestrator reconcile。
8.3 HermesHealth
runtime_id
status
version
heartbeat_at
active_workers
active_jobs
queued_jobs
tenant_partitions
profile_isolation_enforced
details
实现:active-runtime/app/aios_hermes/
9. Execution Evidence Contract
9.1 ExecutionEvidence
execution_id
tenant_id
task_id
agent_id
executor
branch
status
progress_completed
progress_total
current_step
last_commit
test_status
test_summary
result_summary
claimed_at
heartbeat_at
completed_at
状态建议:
claimed
running
blocked
complete
failed
cancelled
约束:
- 按租户存储和查询。
- 每个阻塞必须记录原因、责任方和解除条件。
- 每次结果必须记录 branch、commit、测试命令和状态。
- 不得包含 Secret 或完整敏感 payload。
10. GitOps Status Contract
available
service_status
workspace_mode
workspace_branch
workspace_ref
workspace_dirty
candidate_branch
release_channel
release_version
sync_status
details
约束:
- Web 响应不得包含 remote URL、凭据或 stderr。
- Controller 必须
detached + clean。 sync_status必须区分 local 和 Gitea 镜像状态。
11. Web/API Contract
11.1 身份头
可信代理注入:
X-AIOS-Authenticated
X-AIOS-Tenant-ID
X-AIOS-Principal-ID
X-AIOS-Roles
X-AIOS-Trace-ID
X-AIOS-Session-ID
X-AIOS-Policy-Version
生产约束:
- 代理必须删除客户端同名头后重新注入。
- 应用不得直接暴露公网端口。
11.2 核心 API
GET /api/v2/health
POST /api/v2/tenants
GET /api/v2/tenants/current
POST /api/v2/agents
GET /api/v2/agents
POST /api/v2/tasks
GET /api/v2/tasks
GET /api/v2/tasks/{id}
POST /api/v2/tasks/{id}/approve
POST /api/v2/tasks/{id}/start
POST /api/v2/tasks/{id}/complete
POST /api/v2/tasks/{id}/fail
POST /api/v2/tasks/{id}/cancel
POST /api/v2/tasks/{id}/dispatch
GET /api/v2/audit
GET /api/v2/runtime
GET /api/v2/executions
GET /api/v2/gitops
POST /api/v2/hermes/results/reconcile
12. Persistence Contract
候选版:
- SQLite WAL
BEGIN IMMEDIATE- 原子 snapshot
- schema version
- restart restore
持久化范围:
- tenants
- agents
- tasks
- audit
- idempotency
生产替换要求:
- 不改变 Domain/API Contract。
- 提供 migration、backup、restore、HA、RLS/隔离和容量测试。
13. Deployment Contract
systemd
- 非 root
aios用户。 - 状态目录
/var/lib/aios-v2。 - 最小权限和文件系统保护。
Docker
- 非 root UID/GID。
- read-only root filesystem。
- drop all capabilities。
- 独立状态 volume。
Rollback
- 回滚前备份状态。
- 默认只回滚代码。
- 状态恢复需显式授权。
- 回滚后必须执行 healthcheck。
14. 契约变更规则
任何以下变化必须在同一提交或同一分支更新本文档:
- 字段、状态、Header、API、错误语义;
- 租户或安全约束;
- OpenClaw/Hermes 边界;
- Persistence 或 Deployment Contract;
- Evidence/Audit 格式。
不兼容变化必须新增 ADR 和版本号,不得静默修改。