8.8 KiB
8.8 KiB
v0.1 Runtime Assembly 最简规格
本文定义 AgentRun v0.1 runner/backend 启动前的最简四要素装配模型。RuntimeAssembly 只回答一个问题:一次 run 到底用哪份 backend 镜像、哪个 profile、哪份 session、哪份代码。其他能力只作为四要素的 policy 或 metadata,不扩展成新的运行时要素。
最简四要素
v0.1 只保留四个一等要素:
| 要素 | 最小字段 | v0.1 含义 | 不包含 |
|---|---|---|---|
BackendImageRef |
image |
digest-pinned backend/runner 镜像。 | API KEY、profile config、用户代码、session 文件。 |
ProfileRef |
profile、secretRef |
provider profile 和 API KEY/配置 SecretRef。 | backend 镜像、session、repo 文件。 |
SessionRef |
sessionId 或 null |
backend 会话文件持久化引用;P0 可以为 null。 |
API KEY、完整 CODEX_HOME、Git workspace。 |
ResourceBundleRef |
repoUrl、commitId |
初始代码/文件输入;P0 固定 Git-only。 | 上传文件、对象存储 artifact、inline env、Secret value。 |
P0 最小 JSON 形态:
{
"backendImageRef": {
"image": "127.0.0.1:5000/agentrun/agentrun-mgr@sha256:..."
},
"profileRef": {
"profile": "codex",
"secretRef": { "name": "agentrun-v01-provider-codex", "keys": ["auth.json", "config.toml"] }
},
"sessionRef": null,
"resourceBundleRef": {
"repoUrl": "git@github.com:pikasTech/unidesk.git",
"commitId": "<full commit sha>"
}
}
executionPolicy、observabilityPolicy、tenant identity、network、GC、failureKind、provenance 和 resource limit 都不是新的要素;它们分别挂在四要素或 run policy 上。
HWLAB v0.2 承接口径
HWLAB v0.2 原有 Code Agent 已经验证了 profile、session、workspace 和 Secret 的基本边界。RuntimeAssembly 需要把这些边界固化为 AgentRun 自身四要素,避免 runner 继续依赖 HWLAB cloud-api Pod 内路径或本地进程状态。
| HWLAB v0.2 基线能力 | HWLAB 参考入口 | RuntimeAssembly 承接字段 | 承接规则 |
|---|---|---|---|
| provider profile 可切换 | internal/cloud/code-agent-contract.ts |
ProfileRef.profile、ProfileRef.secretRef |
deepseek 与 codex 只选择 profile/config/SecretRef,不复制 backend 协议;缺失 Secret 必须失败,不 fallback。 |
| Codex app-server thread 复用 | internal/cloud/codex-stdio-session.ts、internal/cloud/code-agent-session-registry.ts |
SessionRef.sessionId、conversationId、threadId |
AgentRun 保存 backend thread/session 摘要;不保存 API KEY、auth.json、config.toml 或完整 CODEX_HOME。 |
固定 /workspace/hwlab 代码上下文 |
internal/cloud/code-agent-contract.ts |
ResourceBundleRef.repoUrl、commitId |
用 Git-only full commit 取代 HWLAB Pod 内固定路径;runner checkout 到隔离 workspace。 |
writable CODEX_HOME 与 Secret 投影分离 |
docs/reference/code-agent-chat-readiness.md |
ProfileRef + runner runtime home |
Secret 只读投影,复制到当前 run/profile writable runtime home;profile 间不共享。 |
| runner/image 可追溯 | HWLAB live build/source metadata | BackendImageRef.image |
runner/backend image 必须可追溯 digest/source commit,不能由调用方任意传未受控镜像。 |
四要素边界
BackendImageRef
image必须是 digest-pinned image。- image 来源必须是 CI/CD artifact catalog、GitOps manifest 或 manager allowlist;客户端不能在 run payload 中传任意镜像。
- v0.1 可以继续使用现有 agentrun runner 镜像,不要求立即拆独立 backend image。
- 验收时只需要能追溯实际 Deployment/Job image digest 和 source commit。
ProfileRef
profile在 v0.1 只允许codex或deepseek。secretRef只保存 Secret 名称和 key,不保存值。- 当前 profile 只能读取当前 profile 的 SecretRef;缺失必须
secret-unavailable,不能 fallback 到另一个 profile。 - profile Secret 只读投影,backend 需要可写目录时复制到 per-run/profile runtime home。
SessionRef
- P0 允许
sessionRef=null,表示不持久化 backend session 文件。 - 面向 HWLAB v0.2 原有长会话能力,SessionRef 是承接 Code Agent thread 复用的核心字段:需要支持
conversationId/sessionId/threadId到 backend session identity 的稳定映射。 - 一旦启用 session,必须只保存 backend session/cache,不保存 API KEY、
auth.json、config.toml或完整CODEX_HOME。 - session 文件目录必须和 profile credential、Git workspace 分开。
- runner 启动时,有 SessionRef 则执行
thread/resume,没有 SessionRef 则执行thread/start;profile 切换不得复用另一 profile 的 session。 - v0.1 先定义边界;持久 session store、TTL、GC 和 resume 验收按 spec-v01-hwlab-manual-dispatch.md 分阶段推进。
ResourceBundleRef
- P0 固定 Git-only,由
repoUrl + full commitId决定内容身份。 commitId必须是不可变 full commit sha,不能是 branch、tag 或HEAD。- 可选扩展只允许
subdir、sparsePaths、submodules=false、lfs=false、credentialRef;默认不启用。 credentialRef只用于拉取私有 Git repo,不等同于 backend API KEY。- 不支持上传文件、对象存储 artifact、任意 ConfigMap 文件袋或 inline env;后续需要时另写版本规格。
- 面向 HWLAB 手动调度 canary,runner materialization 必须把 Git-only bundle checkout 到允许 workspace 前缀,并在 event/result 中记录 repo、full commit、checkout path 和 tree 摘要;不得隐式使用 manager Pod、host path 或镜像内旧代码。
最简装配顺序
- Manager 根据 run 解析四要素引用。
- Manager 或 runner Job render 只使用解析后的 image、SecretRef、sessionRef 和 Git commit。
- Runner materialize profile Secret 到 writable runtime home。
- Runner materialize Git-only resource bundle 到 workspace;P0 未实现时必须显式记录为 deferred 或 null,不能猜测 host path。
- Runner 启动 backend,并在 event 中记录 image digest、profile、SecretRef 名称/key、sessionRef、repoUrl/commitId 的脱敏摘要。
任何一个要素缺失或不合法,都必须按该要素失败;不得静默 fallback。
v0.1 验收标准
A1 BackendImageRef 验收
- 实际 manager Deployment 和 runner Job 使用 digest-pinned image。
- event、CLI 或诊断输出能看到 image digest 或可追溯到 GitOps/catalog。
- run payload 不能传任意 image 字符串。
A2 ProfileRef 验收
codexrun 只挂载agentrun-v01-provider-codex。deepseekrun 只挂载agentrun-v01-provider-deepseek。codex -> deepseek -> codex切换后,CODEX_HOME、SecretRef、backend_status 不互相污染。- 删除或缺失
deepseekSecretRef 时必须secret-unavailable,不能 fallback 到codex。 - 所有输出不得包含 Secret value、
auth.json或config.toml明文。
A3 SessionRef 验收
- P0 若未启用 session,run/manifest 必须显式表现为
sessionRef=null或 equivalent deferred 状态。 - runner Job 不得把完整
CODEX_HOME、Secret projection 或 host path 当成 session store。 - 后续启用 session 前,必须补充真实验收:session 目录不包含 API KEY 或 profile credential。
A4 ResourceBundleRef 验收
- P0 ResourceBundle 只能是 Git-only:
repoUrl + full commitId。 commitId不是 branch/tag/HEAD。- checkout 只能进入允许 workspace 前缀,不能覆盖
/app、Secret projection、profile runtime home 或 session 目录。 - run payload 不携带文件正文、env dump、Secret value 或大型 artifact。
A5 综合验收
一次真实 runner Job 或 dry-run manifest 必须能同时回答:
- 用哪一个 image digest。
- 用哪一个 profile 和 SecretRef。
- 是否使用 session;若不用,必须明确为
null/deferred。 - 使用哪一个 Git repo 和 full commit;若 P0 尚未 materialize,必须明确为 deferred,不能隐式使用 host path。
实现状态
| 要素 | v0.1 状态 | 说明 |
|---|---|---|
BackendImageRef |
部分实现 | CI/CD 已使用 digest-pinned runtime image;当前 runner/backend 仍复用 agentrun 镜像。 |
ProfileRef |
已实现/已通过主闭环 | codex 与 deepseek 已通过 SecretRef、writable runtime home 和真实 stdio turn 验证。 |
SessionRef |
已实现最小持久化 | manager 持久化 sessionId/conversationId/threadId,run 创建会解析既有 session,runner 按 threadId resume;session 不保存 credential 文件,TTL/GC 后续细化。 |
ResourceBundleRef |
已实现 Git-only materialization | repoUrl + full commitId 已进入 run schema 和 runner checkout,workspace 受 AGENTRUN_WORKSPACE_ROOT 限制,event/result 记录 commit/tree/workspace 摘要。 |