3.9 KiB
AIOS OpenClaw Run Provenance Writer
本插件为 AIOS V2R1 提供 Owner 签名的运行授权、持久 Provenance Store 与专用 Evidence Writer。它不授予通用 Shell 或任意文件写权限。
AIOS Runtime HTTP 合同
插件在 OpenClaw loopback Gateway 内注册 /v1/health、/v1/execute 和
/v1/commands/<id>。执行请求必须同时通过本机 CredentialRef 比对与 Ed25519
签名验证;热路径只读取公钥,不读取 Candidate 私密签名材料。
Runtime 仅允许无副作用的 status 与在线验收专用 acceptance.delay。它不把
返回成功冒充为模型推理或任意 Agent 执行。命令身份、幂等键和终态以追加式
JSONL 持久化;Gateway 重启时遗留的 RUNNING 命令会收敛为
FAILED/restart_interrupted,避免把重启误报成真实超时。
取消只对当前进程内仍在执行的命令生效,超时由签名命令的 expires_at 与
30 秒硬上限共同约束。未知 action、错误签名、过期命令、跨 tenant 状态查询、
冲突的 command_id 或幂等键均失败关闭。
安全边界
- 签名合同:
aios.run-provenance/v1,Ed25519,授权最长 15 分钟。 - 授权绑定:
run_id、sender_id、任务、执行器实例、当前 Claim OID、Candidate OID 与任务分支。 - 路径:仅允许七个
.agent/*.jsonEvidence 文件。 - 操作:仅允许
create/update,随后执行固定 argv 的git add、git commit和当前任务分支普通 push。 - 通用
exec/shell/bash/write/edit/apply_patch/file_write始终拒绝。 toolCallIdpermit 只能消费一次;参数摘要变化、过期、签名篡改、Run/Sender 不匹配均拒绝。- Writer 拒绝 symlink、路径逃逸、脏 Worktree、错误分支、错误 HEAD、Candidate 非祖先及暂存范围扩大。
- Gateway 以服务用户调用 Git 时,仅对配置中的精确
writerRepoRoot注入命令级safe.directory,不写全局 Git 配置。 - 禁止 reset、rebase、amend、Tag 和 force push。提交后 push 失败时保留可审计的 local-ahead 状态,不伪造回滚。
组件
issuer.mjs:在受保护边界读取现有 Ed25519 材料,生成公开验签材料并原子写入一次性签发记录。provenance.js:严格 Schema、canonical JSON、Ed25519 sign/verify 和安全 Store 读取。index.js:OpenClaw hook、Owner/Run/Sender 验证与一次性 permit。writer.js:限定路径原子写入、固定 Git 操作和追加式审计。
部署与回滚
部署必须先备份运行插件和 OpenClaw 配置,再安装 Git 中已测试的完整目录,配置绝对路径、Key ID、任务分支和审计路径,执行 openclaw plugins doctor 后才重启 Gateway。回滚只恢复备份插件与配置并重启,不修改任务分支历史或业务状态。
验证
执行:
node --test test/*.test.js
验收还必须包含受保护签发、Heartbeat 实际 commit/push、审计链验证,以及 README.md 等未授权路径的拒绝测试。
Candidate task-plane transport
protectedDispatchTransport=task-plane 仅用于隔离 Candidate 验证。它要求:
- TaskPlan 与服务器配置的
task_id、repository、patch branch、完整 base OID、允许路径和 capability 完全一致; - Owner provenance 已通过现有签名校验,Policy approval 与 TaskPlan 摘要、Owner principal、有效期绑定;
- Broker 端点只能是 loopback HTTP,Bearer 凭据只能从绝对路径的受控凭据投影读取;
- Broker 返回
simulation=false、真实 provisioning 元数据和secret-ref://引用,禁止返回 Token 或 Authorization 内容; - Broker 不可达时直接失败,不回退到
mock或sandbox; - 配置
protectedDispatchAuditPath时仅写入脱敏 JSONL 审计记录。
该 Candidate 不修改生产插件或 Gateway;OpenClaw/Codex 原生子会话未完成前必须分别报告为未验证。