fix: 接入 dsflash-go model catalog
This commit is contained in:
@@ -47,7 +47,7 @@
|
||||
- Codex Secret projection 必须先保持只读,再复制到 writable `CODEX_HOME` 后启动 app-server;综合联调不得把只读 Secret volume 直接当作 `CODEX_HOME` 的通过证据。
|
||||
- 真实 `agentrun-mgr`、runner Job 或受控 runner process、真实 backend adapter。
|
||||
- 至少一个真实 Code Agent provider turn;Codex stdio backend 必须通过 `codex app-server --listen stdio://` 的 JSON-RPC stdio turn 完成,mock、fixture、source-only、dry-run、fake provider、直接 Responses HTTP 或 `codex exec` 一次性输出不能作为通过证据。如果 provider credential SecretRef 缺失,综合联调必须标记 blocked,不能降级为 mock pass。
|
||||
- 若变更涉及 backend profile,综合联调必须分别覆盖 `backendProfile=codex`、`backendProfile=deepseek` 与 `backendProfile=minimax-m3`,并按 `codex -> deepseek -> minimax-m3 -> codex` 顺序证明 profile 切换不互相污染。
|
||||
- 若变更涉及 backend profile,综合联调必须分别覆盖 `backendProfile=codex`、`backendProfile=deepseek`、`backendProfile=minimax-m3` 与 `backendProfile=dsflash-go`,并按 `codex -> deepseek -> minimax-m3 -> dsflash-go -> codex` 顺序证明 profile 切换不互相污染;`dsflash-go` 还必须证明 `model-catalog.json` 与 1M/900k context metadata 生效。
|
||||
|
||||
综合联调最小闭环:
|
||||
|
||||
@@ -107,7 +107,7 @@ CLI 与 RESTful API 可以复用同一个真实 run 做联调。若两者观察
|
||||
| ResourceBundleRef | 使用 `repoUrl + ref/branch + bundles[]` 启动 runner | runner checkout 到允许 workspace,event/result 能回答 repo、requested ref/commit、actual commit、workspace 摘要;不使用 host path、cloud-api artifact revision 或 CI/CD rollout 状态作为 bundle 内容来源。 |
|
||||
| Resource prompt/skill assembly | 使用同一 `ResourceBundleRef.kind="gitbundle"` 指定 `bundles[]` 和 `promptRefs` | 新 thread 首轮注入 initial prompt 和 gitbundle skill facts;resume 不重复注入;required prompt 缺失 blocked;不使用用户长 prompt、旧硬编码 prompt、镜像 `/app/skills` 或默认 Codex skill registry 替代。 |
|
||||
| DS 短 prompt 探测 | 通过正式 CLI/Web 等价入口向真实 `backendProfile=deepseek` 发送短 prompt | “可见 skill”回复包含 gitbundle `.agents/skills` 中的业务 skill 而不只是 Codex 默认系统 skill;“当前 HWLAB 初始规则”能回答 hwpod/HWPOD 四要素/禁止路径;“编译 D601-F103-V2”能触发 `hwpod -> hwpod-cli -> hwpod-compiler-cli -> /v1/hwpod-node-ops -> hwpod-node` 正向链路。 |
|
||||
| ProfileRef/SecretRef | 分别验证 `codex`、`deepseek` 与 `minimax-m3` profile | 只使用当前 profile SecretRef;缺失时 `secret-unavailable`,不 fallback,不泄露 Secret 值。 |
|
||||
| ProfileRef/SecretRef | 分别验证 `codex`、`deepseek`、`minimax-m3` 与 `dsflash-go` profile | 只使用当前 profile SecretRef;`dsflash-go` 必须投影 `model-catalog.json`;缺失时 `secret-unavailable`,不 fallback,不泄露 Secret 值。 |
|
||||
| bounded output | 触发工具/命令输出摘要 | result/event 只含摘要、字节数、截断标记和必要引用,不把大 stdout/stderr 塞入单个 JSON 响应。 |
|
||||
|
||||
这组验收吸收 HWLAB v0.2 的成熟判定口径,但不验证 HWLAB 用户鉴权、HWPOD 授权、Workbench UI、`traceId -> runId` 业务映射或 HWLAB result/trace schema 转换。
|
||||
@@ -163,7 +163,7 @@ CLI 与 RESTful API 可以复用同一个真实 run 做联调。若两者观察
|
||||
- 对同一 run 使用相同 idempotency key 提交相同 command 两次,再用相同 key 提交不同 payload,确认前两次返回同一个 command,第三次结构化失败。
|
||||
- 对同一 pending run 启动两个真实 runner 或重复 claim,确认只有一个 owner 成功,失败方为 `runner-lease-conflict` 或等价 failureKind,且不继续调用 backend。
|
||||
- 用不存在的 provider SecretRef 创建 run 并启动 runner,确认失败为 `secret-unavailable`,不会降级为 mock pass,也不会打印 Secret value。
|
||||
- 用 `backendProfile=deepseek` 或 `backendProfile=minimax-m3` 但只提供 `codex` SecretRef 的 run 启动 runner,确认失败为 `secret-unavailable`,不会 fallback 到 `codex`。
|
||||
- 用 `backendProfile=deepseek`、`backendProfile=minimax-m3` 或 `backendProfile=dsflash-go` 但只提供 `codex` SecretRef 的 run 启动 runner,确认失败为 `secret-unavailable`,不会 fallback 到 `codex`;`dsflash-go` 缺少 `model-catalog.json` 时也必须在 provider 调用前失败。
|
||||
- 对同一 run 分页读取 events,确认 `seq` 单调、`afterSeq` 翻页无重复、重复读取同一页不会改变 durable facts。
|
||||
|
||||
T7 只定义人工验收的检查面和判定口径。若后续为减少人工操作引入 helper 命令,它只能输出手动步骤、当前证据或 dry-run 计划,不能把这些负向场景改造成阻断发布的自动门禁。
|
||||
@@ -172,12 +172,13 @@ T7 只定义人工验收的检查面和判定口径。若后续为减少人工
|
||||
|
||||
阅读本文、[spec-v01-services.md](spec-v01-services.md)、[spec-v01-backend-codex.md](spec-v01-backend-codex.md) 和 [spec-v01-secret-distribution.md](spec-v01-secret-distribution.md),然后在真实 `agentrun-v01` 运行面用正式 CLI 和 RESTful API 手动验证以下内容:
|
||||
|
||||
- `GET /api/v1/backends` 和 `./scripts/agentrun backends list` 同时列出 `codex`、`deepseek` 与 `minimax-m3`,并显示三者共享 `backendKind=codex-app-server-stdio`、`protocol=codex-app-server-jsonrpc-stdio`、`transport=stdio`。
|
||||
- `GET /api/v1/backends` 和 `./scripts/agentrun backends list` 同时列出 `codex`、`deepseek`、`minimax-m3` 与 `dsflash-go`,并显示四者共享 `backendKind=codex-app-server-stdio`、`protocol=codex-app-server-jsonrpc-stdio`、`transport=stdio`;`dsflash-go` 的 `requiredSecretKeys` 必须包含 `model-catalog.json`。
|
||||
- 用 `backendProfile=codex` 完成一个真实 app-server stdio turn,记录 runId、commandId、terminal_status 和 redacted backend_status。
|
||||
- 用 `backendProfile=deepseek` 完成一个真实 app-server stdio turn,确认 SecretRef 为 `agentrun-v01-provider-deepseek`,runtime `CODEX_HOME` 与 `codex` run 隔离,assistant 回复非空或失败被正确归类为 provider blocker。
|
||||
- 用 `backendProfile=minimax-m3` 完成一个真实 app-server stdio turn,确认 SecretRef 为 `agentrun-v01-provider-minimax-m3`,runtime `CODEX_HOME` 与 `codex`/`deepseek` run 隔离,assistant 回复非空或失败被正确归类为 provider blocker。
|
||||
- 再次用 `backendProfile=codex` 完成真实 turn,确认没有继承 DeepSeek 或 MiniMax-M3 model/base URL/config。
|
||||
- 删除或替换 `deepseek`/`minimax-m3` SecretRef 后复测,必须 `secret-unavailable`,不能使用 `codex` SecretRef 或默认 Codex config。
|
||||
- 用 `backendProfile=dsflash-go` 完成一个真实 app-server stdio turn,确认 SecretRef 为 `agentrun-v01-provider-dsflash-go`,runtime `CODEX_HOME` 与其他 profile 隔离,`config.toml` 指向 `deepseek-v4-flash`、1M/900k context 和 profile-local `model_catalog_json`;assistant 回复非空或失败被正确归类为 provider blocker,compact 404 必须归类为 `provider-compact-unsupported`。
|
||||
- 再次用 `backendProfile=codex` 完成真实 turn,确认没有继承 DeepSeek、MiniMax-M3 或 dsflash-go model/base URL/config/model catalog。
|
||||
- 删除或替换 `deepseek`/`minimax-m3`/`dsflash-go` SecretRef 后复测,必须 `secret-unavailable`,不能使用 `codex` SecretRef 或默认 Codex config。
|
||||
|
||||
T8 是涉及 backend profile 变更时的综合联调标准;不涉及 backend profile 的普通发布仍至少执行已有真实主闭环。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user