feat: add minimax m3 backend profile

This commit is contained in:
Codex
2026-06-02 07:57:09 +08:00
parent 719584e2ce
commit c3915a3f19
24 changed files with 177 additions and 80 deletions
+10 -8
View File
@@ -10,7 +10,7 @@ AgentRun 是面向 UniDesk 与 HWLAB 的共享 Code Agent 执行基础设施。`
- `agentrun-mgr` 是公共 RESTful API 和 durable facts authority,负责 run、command、event、runner、backend、lease 的持久状态和鉴权前置边界。
- `agentrun-runner` 是短生命周期 per-run 或 per-attempt 执行者,必须从 manager claim run,并把 event、heartbeat 和 terminal status 写回 manager。
- Backend adapter 隐藏具体 Agent 工具协议,`v0.1` 使用一个真实 Codex stdio backend kind 形成闭环,并在该 kind 下支持 `codex``deepseek` profile;其他 backend kind 不进入第一波实现。
- Backend adapter 隐藏具体 Agent 工具协议,`v0.1` 使用一个真实 Codex stdio backend kind 形成闭环,并在该 kind 下支持 `codex``deepseek``minimax-m3` profile;其他 backend kind 不进入第一波实现。
- AgentRun CLI 是受控操作入口,负责创建 run、提交 command、轮询 events、手动启动 runner 和查看 backend capabilityCLI 不等待完整模型 turn。
- RuntimeAssembly 是 runner/backend 启动前的装配 SPEC,负责把 backend image、profile credential、session、Git-only resource bundle 和 tool credential scope 统一成受控 Job 输入;装配权威规格见 [spec-v01-runtime-assembly.md](spec-v01-runtime-assembly.md)。
- AgentRun Queue 是吸收 UniDesk Code Queue 的任务队列层,负责 task、attempt、retry、judge、summary、stats、read cursor 和 commander 聚合;Queue 查询只返回 Session 引用,输出和 trace 进入 Session API/CLI。权威规格见 [spec-v01-queue.md](spec-v01-queue.md)。
@@ -26,22 +26,23 @@ AgentRun 是面向 UniDesk 与 HWLAB 的共享 Code Agent 执行基础设施。`
AgentRun `v0.1` 的自研组件优先使用 Bun + TypeScript 实现:`agentrun-mgr``agentrun-runner`、backend adapter、Codex backend、AgentRun CLI 和后续 scheduler 都属于该边界。官方 TypeScript CLI 入口固定为 `scripts/agentrun-cli.ts`,入口只做参数解析和路由,复杂逻辑拆到 `scripts/src/``src/`G14/CI/人工非交互命令使用 `./scripts/agentrun` launcher 启动同一入口。Postgres、Kubernetes、Tekton、Argo CD、YAML manifest 和 shell 级容器启动命令属于外部运行面或部署面,不受“必须 TypeScript 实现”的约束。
`backendProfile=codex``backendProfile=deepseek``v0.1` 协议固定为同一个 Codex CLI app-server JSON-RPC over stdio backend kindrunner/backend adapter 启动受控 `codex app-server --listen stdio://` 子进程,经 stdin/stdout 发送换行分隔 JSON-RPC,请求顺序至少覆盖 `initialize``thread/start``thread/resume``turn/start``backendProfile` 只选择 profile/config/SecretRef`backendKind``protocol` 和进程生命周期仍是 `codex-app-server-stdio`。直接调用 Responses HTTP、OpenAI SDK、`codex exec` 一次性输出或文本 fallback 只能作为诊断/自测试辅助,不能作为 Codex backend 综合联调通过证据。
`backendProfile=codex``backendProfile=deepseek``backendProfile=minimax-m3``v0.1` 协议固定为同一个 Codex CLI app-server JSON-RPC over stdio backend kindrunner/backend adapter 启动受控 `codex app-server --listen stdio://` 子进程,经 stdin/stdout 发送换行分隔 JSON-RPC,请求顺序至少覆盖 `initialize``thread/start``thread/resume``turn/start``backendProfile` 只选择 profile/config/SecretRef`backendKind``protocol` 和进程生命周期仍是 `codex-app-server-stdio`。直接调用 Responses HTTP、OpenAI SDK、`codex exec` 一次性输出或文本 fallback 只能作为诊断/自测试辅助,不能作为 Codex backend 综合联调通过证据。
实现参考必须优先读取并吸收两个成熟代码路径:UniDesk Code Queue 的 Bun/TS `src/components/microservices/code-queue/src/code-agent/codex.ts``common.ts`,以及 HWLAB v0.2 的 `internal/cloud/codex-stdio-session.mjs``scripts/code-agent-chat-smoke.mjs``docs/reference/spec-v02-deepseek-proxy.md``docs/reference/code-agent-chat-readiness.md`。AgentRun 复用的是 stdio JSON-RPC、session/turn 生命周期、trace、redaction、Secret projection、profile overlay、DeepSeek/Moon Bridge 分层诊断和 failureKind 经验,不复制 UniDesk/HWLAB 的环境专用路径、业务 prompt、bridge host、namespace 或明文凭据。
## Backend Profile 边界
`v0.1` 需要支持个可手动选择的 backend profile,但不引入完整多 backend 调度:
`v0.1` 需要支持个可手动选择的 backend profile,但不引入完整多 backend 调度:
| backendProfile | backendKind | v0.1 处理 | SecretRef | 说明 |
| --- | --- | --- | --- | --- |
| `codex` | `codex-app-server-stdio` | 保留,P0 | `agentrun-v01-provider-codex` | 现有 GPT/Codex profile,必须保持默认行为不回归。 |
| `deepseek` | `codex-app-server-stdio` | 新增,P0 | `agentrun-v01-provider-deepseek` | DeepSeek-compatible Codex profile;通过 profile 专属 `auth.json`/`config.toml` 或等价 SecretRef 配置上游、模型和 base URL。 |
| `minimax-m3` | `codex-app-server-stdio` | 新增,P0 | `agentrun-v01-provider-minimax-m3` | MiniMax-M3 OpenAI-compatible Codex profile;沿 DeepSeek 相同路径由 `auth.json`/`config.toml` 配置上游、模型和 base URL。 |
完整多 backend 路由仍然 deferred。`v0.1` 只允许 manager/runner 按 run 中的 `backendProfile` 显式选择 `codex``deepseek`,并在 capability 中报告者共享同一个 `protocol=codex-app-server-jsonrpc-stdio``transport=stdio`。MiniMax/OpenCode 废弃,不进入 AgentRun Queue 首版,也不作为 fallback 或 judge backend。
完整多 backend 路由仍然 deferred。`v0.1` 只允许 manager/runner 按 run 中的 `backendProfile` 显式选择 `codex``deepseek``minimax-m3`,并在 capability 中报告者共享同一个 `protocol=codex-app-server-jsonrpc-stdio``transport=stdio`MiniMax/OpenCode 直连路线废弃,不进入 AgentRun Queue 首版,也不作为 fallback 或 judge backend。
`codex``deepseek` 之间不得隐式 fallback:缺少 `deepseek` SecretRef 时必须失败为 `secret-unavailable`,不能改用 `codex` Secret`deepseek` 运行失败也不能重试到 `codex`。同一轮发布的综合联调必须证明 `codex -> deepseek -> codex` 的切换不会污染彼此的 SecretRef、`CODEX_HOME`、模型或 upstream 配置。
`codex``deepseek``minimax-m3` 之间不得隐式 fallback:缺少 `deepseek``minimax-m3` SecretRef 时必须失败为 `secret-unavailable`,不能改用 `codex` Secret任一 profile 运行失败也不能重试到另一个 profile。同一轮发布的综合联调必须证明 `codex -> deepseek -> minimax-m3 -> codex` 的切换不会污染彼此的 SecretRef、`CODEX_HOME`、模型或 upstream 配置。
## 内部架构
@@ -80,7 +81,7 @@ Runner inbound API 只允许本地或私有诊断,不作为业务客户端入
| `agentrun-mgr` | 长驻服务 | 保留,P0 | 公共 RESTful API、durable facts、idempotency、runner claim、event append 和 status authority。 | `spec-v01-agentrun-mgr.md` |
| `agentrun-runner` | 短生命周期执行入口 | 保留,P0 | per-run/per-attempt executorclaim run、poll command、调用 backend、写回 events/status。 | `spec-v01-agentrun-runner.md` |
| Backend adapter | 执行适配层 | 保留,P0 | 统一 backend capability、event normalization、error mapping 和 credential boundary。 | `spec-v01-backend-adapter.md` |
| Codex stdio backend profiles | 具体 Agent backend | 保留,P0 | `v0.1` 使用一个真实 Codex app-server stdio backend kind,必须支持 `codex``deepseek` 个 profile;完整多 backend 路由仍 deferred。 | `spec-v01-backend-codex.md` |
| Codex stdio backend profiles | 具体 Agent backend | 保留,P0 | `v0.1` 使用一个真实 Codex app-server stdio backend kind,必须支持 `codex``deepseek` `minimax-m3`个 profile;完整多 backend 路由仍 deferred。 | `spec-v01-backend-codex.md` |
| AgentRun CLI | CLI/Job 工具 | 保留,P0 | JSON 输出、短返回、run/command/event/runner/backend 操作入口。 | `spec-v01-cli.md` |
| Postgres durable store | 稳定外部服务 | 保留,P0 | 使用 `agentrun-v01-postgres` 保存 runs、commands、events、runners、backends、leases 和 migration ledger;不使用 file/sqlite 作为 v0.1 durable store。 | `spec-v01-postgres.md` |
| Secret distribution | 系统能力 | 保留,P0 | Provider credential 只通过 Kubernetes SecretRef、ServiceAccount/RBAC 和 runner env/file projection 分发;Codex 测试凭据使用 `~/.codex/auth.json``~/.codex/config.toml` 生成 Secret projectionsource、GitOps、logs 和 events 不保存明文。 | `spec-v01-secret-distribution.md` |
@@ -90,7 +91,7 @@ Runner inbound API 只允许本地或私有诊断,不作为业务客户端入
| Observability | 最小事件/日志合同 | 保留,P1 子项 | 作为 manager/runner 的 event、terminal status、failureKind、logPath 和 redaction 最小合同,不拆独立观测系统。 | 并入 `spec-v01-agentrun-mgr.md``spec-v01-agentrun-runner.md` |
| `agentrun-scheduler` | 长驻调度器 | Deferred | M1-M3 稳定后再实现自动 pending scan、capacity selection 和 runner Job 创建。 | `spec-v01-scheduler.md` |
| AgentRun Queue | 系统能力 | 新增,P0 规格 | 直接吸收 UniDesk Code Queue 的队列能力;第一版只做 RESTful API、CLI 和轻量轮询,不做 Event/OA/integrations,不迁移历史数据。 | `spec-v01-queue.md` |
| 多 backend 路由 | 系统能力 | Deferred | `v0.1` 不做跨 backend kind 的自动路由和调度;仅支持同一 Codex stdio backend kind 下的 `codex`/`deepseek` profile 手动选择。MiniMax/OpenCode 不进入 Queue 首版。 | 后续版本 spec |
| 多 backend 路由 | 系统能力 | Deferred | `v0.1` 不做跨 backend kind 的自动路由和调度;仅支持同一 Codex stdio backend kind 下的 `codex`/`deepseek`/`minimax-m3` profile 手动选择。MiniMax/OpenCode 直连路线不进入 Queue 首版。 | 后续版本 spec |
| UI | 前端 | Deferred | `v0.1` 不要求独立 UIUniDesk/HWLAB canary 可通过 CLI/API 验证。 | 后续版本 spec |
| judge/retry 自动化 | 系统能力 | Deferred | `v0.1` 只定义基础 terminal 和 failure visibility,不实现复杂 judge。 | 后续版本 spec |
@@ -134,7 +135,7 @@ Run create 的最小字段合同:
| `projectId` | 必填,例如 `pikasTech/unidesk``pikasTech/HWLAB`。 |
| `workspaceRef` | 必填,描述 source/worktree/workspace,不由 runner 猜测。 |
| `providerId` | 必填,例如 `G14``D601`;只表示目标 provider,不直接授予权限。 |
| `backendProfile` | 必填,`v0.1` allowlist 为 `codex``deepseek`;两者共享 `codex-app-server-stdio` backend kind。 |
| `backendProfile` | 必填,`v0.1` allowlist 为 `codex``deepseek``minimax-m3`;三者共享 `codex-app-server-stdio` backend kind。 |
| `executionPolicy` | 必填或由 manager 显式写入默认值,至少包含 sandbox、approval、timeout、network 和 secret scope。 |
| `traceSink` | 字段必须存在;可以为 `null` 或显式 sink,表示标准事件是否需要镜像给 tenant。 |
@@ -199,4 +200,5 @@ Manager 负责校验、保存和返回这些字段;runner 只能消费已保
| `agentrun-runner` 实现 | 已实现/已通过主闭环 | host process runner 与 Kubernetes Job 共用 `runOnce`runner 通过 manager API claim/poll/report,不直连 Postgres;真实 Kubernetes Job 已完成 Codex turn。 |
| `codex` profile | 已实现/已通过主闭环 | Codex app-server stdio backend 已有协议、失败分类、脱敏和 fake self-test;真实 Codex provider turn 已通过 RESTful API 与 CLI 主闭环。 |
| `deepseek` profile | 已实现/已通过主闭环 | DeepSeek 已作为同一 Codex stdio backend kind 的 profile/config/SecretRef 选择进入 v0.1;自测试覆盖 registry、runner Secret 选择、fake stdio turn 和无 fallback,真实 `agentrun-v01` 已通过 `codex -> deepseek -> codex` 切换联调。 |
| `minimax-m3` profile | 已实现/待真实主闭环 | MiniMax-M3 已作为同一 Codex stdio backend kind 的 profile/config/SecretRef 选择进入 v0.1;自测试覆盖 registry、runner Secret 选择、fake stdio turn 和无 fallback,真实 `agentrun-v01` 仍需用 AgentRun CLI 手动验收。 |
| 自动 scheduler | Deferred | 不作为 `v0.1` 第一阶段验收目标。 |