Files
pikasTech-agentrun/docs/reference/spec-v01-backend-codex.md
T
2026-05-29 10:35:33 +08:00

7.0 KiB
Raw Blame History

v0.1 Codex Backend 规格

Codex backend 是 AgentRun v0.1 的第一真实 Code Agent backend 候选。它用于证明 runner、backend adapter、Kubernetes Secret projection、真实 provider 调用、event normalization 和 terminal status 的完整闭环。

在系统中的职责划分

  • 作为 backendProfile=codex 的具体实现。
  • 使用真实 Codex/Codex-compatible 配置执行最短 turn,不使用 fake provider 作为综合联调通过证据。
  • 消费 Kubernetes Secret projection 提供的 Codex 凭据文件。
  • 把 Codex 输出归一化为 AgentRun 标准 events 和 terminal status。
  • 将 provider/auth/protocol/timeout/cancel 错误映射为 spec-v01-backend-adapter.md 定义的 failureKind。

协议选型与实现参考

v0.1 Codex backend 的协议固定为 Codex CLI app-server JSON-RPC over stdio。Backend adapter 必须启动受控子进程:

codex app-server --listen stdio://

Adapter 通过 stdin 写入换行分隔 JSON-RPC 请求,通过 stdout 逐行读取 JSON-RPC response 和 notificationstderr 只作为有界诊断日志。最小请求序列是 initializethread/startthread/resumeturn/startresponse 中必须提取 thread/turn identitynotification 和后续输出必须归一化为 backend_statusassistant_messagetool_callcommand_outputerrorterminal_status events。

不得把以下路径作为 v0.1 Codex backend 的正式实现或综合联调通过证据:直接 Responses HTTP 代理、OpenAI SDK wrapper、codex exec 一次性命令输出、fake provider、固定文本回复、只读 shortcut 或本地 shell 模拟。裸 HTTP 或 codex exec --json 可以作为 provider/upstream 诊断,但最终通过必须来自 app-server stdio turn。

实现必须参考成熟代码:

参考 需要吸收的经验
UniDesk src/components/microservices/code-queue/src/code-agent/codex.ts Bun/TS 中 spawn codex app-server --listen stdio://、JSON-RPC request/response、thread start/resume、turn start、stderr 有界采集、exit/failure 分类。
UniDesk src/components/microservices/code-queue/src/code-agent/common.ts backend port/capability、model/profile 边界、文本 input shape、Git/proxy env 处理和 provider 端口归一化。
HWLAB internal/cloud/codex-stdio-session.mjs long-lived stdio session readiness、Codex home/workspace/protocol gate、child env redaction、trace recorder、cancel/timeout/failure kind。
HWLAB scripts/code-agent-chat-smoke.mjs fake app-server 自测试方式、thread/start + turn/start 调用顺序、session reuse、tool trace 和 Secret 不泄露断言。

这些参考用于协议和质量标准,不复制 UniDesk/HWLAB 的业务 prompt、硬件路径、tenant policy、hostPath Secret 做法或任何明文密钥。

测试凭据来源

v0.1 综合联调用的 Codex 测试凭据源固定为 operator 环境中的以下两个文件:

~/.codex/auth.json
~/.codex/config.toml

这两个文件只能作为 Kubernetes Secret 创建或轮换的输入源,不能通过 hostPath 挂载进 Pod,不能复制进镜像,不能提交到 source branch、GitOps branch、artifact catalog、issue、PR、event、trace、日志或 CLI 输出。

v0.1 默认 Kubernetes Secret

对象 v0.1 规格
Namespace agentrun-v01
Secret name agentrun-v01-provider-codex
Secret key auth.json,来自 ~/.codex/auth.json
Secret key config.toml,来自 ~/.codex/config.toml
Consumer runner 或 backend adapter Pod
Projection target 容器用户的 ~/.codex/auth.json~/.codex/config.toml
File mode 只读,建议 0400 或等价最小权限

Kubernetes Secret 的创建、轮换和权限控制属于集群密钥管理流程;source branch 只声明 SecretRef 名称、key 和 mount intent。deploy/deploy.json 和 rendered GitOps manifest 不得包含 Secret data。

Runtime 行为

  • Adapter 必须在调用 Codex 前验证 auth.jsonconfig.toml 均存在且可读;缺失时返回 secret-unavailable
  • Codex 运行时必须使用被投影的 .codex 目录;不得 fallback 到镜像内默认凭据或节点宿主机 ~/.codex
  • config.toml 指向 hyueapi 或其他 OpenAI-compatible upstreamrunner/backend Pod 的 proxy 与 NO_PROXY 必须保持该配置可用;不得在日志中打印完整 auth/config 内容。
  • 模型名、provider profile、upstream host 可以作为 redacted metadata 输出;provider credential、token、Authorization header 和文件内容不得输出。
  • 一个最短 turn 至少要产生 backend_status、一个 assistant 或 error event、以及 terminal_status

与 Secret 分发规格的关系

spec-v01-secret-distribution.md 是 SecretRef、Kubernetes projection、redaction 和 missing secret failure 的权威。本文件只定义 Codex backend 对测试凭据文件的消费方式。

Run 的 executionPolicy.secretScope 应引用 agentrun-v01-provider-codexauth.jsonconfig.toml,而不是携带 provider credential 或文件内容。

测试规格

T1 Codex Secret projection

阅读 AGENTS.md、本文和 spec-v01-secret-distribution.md,然后在 agentrun-v01 中通过 Kubernetes Secret 管理把 operator 的 ~/.codex/auth.json~/.codex/config.toml 注入为 agentrun-v01-provider-codex。确认 runner/backend Pod 只能看到投影后的 ~/.codex/auth.json~/.codex/config.toml,没有 hostPath,日志和 event 不显示文件内容。

T2 真实 Codex 最短 turn

阅读本文和 spec-v01-validation.md,然后用 backendProfile=codex 创建真实 run 并提交一个最短 turn command。确认 runner 调用真实 Codex providermanager 可查询 backend_status、assistant 或 error event、terminal_status,且 Secret value 未泄露。

T3 Missing auth/config failure

阅读本文,然后分别移除或改名 Secret 中的 auth.jsonconfig.toml key,启动真实 run。确认 adapter 在调用 provider 前失败为 secret-unavailablefailure response 为 JSON,日志不包含 Secret value。

T4 Provider auth failure

阅读本文,然后使用无效的 Codex Secret 创建 run。确认 backend 返回 provider-auth-failed 或等价 failureKind,记录上游状态分类和 trace correlation,但不打印 Authorization header、token 或 auth/config 文件内容。

规格的实现情况

规格项 状态 说明
Codex backend 规格 已定义 本文为 v0.1 第一真实 backend 权威。
Codex Secret projection 未实现 需要后续 Kubernetes Secret 和 runner/backend manifest。
Codex adapter 未实现 需要后续代码实现。
真实 provider turn 未实现 综合联调必须真实完成后才能发布通过。
hostPath ~/.codex 不采用 只能通过 Kubernetes Secret projection 注入。