Add an rdm deploy source to svc (downstream composite binary)

Why: RDM capabilities (two-trees-one-net, rdm.* trace-audit command face)
only exist in the downstream Agent-System-RDM composite binary; svc's three
existing sources all produce the Dev binary, so none of it could be deployed
or lifecycle-managed. This adds --from rdm[@<sha>] with the same isolated
source-repo semantics as the dev source.

Evidence: make test-governance 138/138 (two new stub cases: deploy E2E and
commits/update track); real deployment rdm@2aef3fc recorded in the task card
(pins materialized, pure-Go build, web workbench to htdocs, serve health OK,
rdm.ping/rdm.inspect.capabilities committed, update --check reports latest);
make test full suite exit=0. All segments written by make evidence.

Impact: scripts/svc.sh (rdm source resolution/materialization/deploy/update/
commits, probe timeouts, rdm seed skip, ELF env-DSN evidence fallback),
docs/svc.md 5.4, tests/test_svc.py. RDM-side CLI alignment landed as RDM
PR #228; no base submodules touched.

Refs: task card .task/feature-svc-rdm-source.md; RDM PR #228/#229.
This commit is contained in:
2026-10-11 20:46:03 +00:00
parent effb4edfcd
commit 419380187d
4 changed files with 398 additions and 32 deletions
+41 -7
View File
@@ -168,7 +168,7 @@ scripts/svc.sh ui deploy --kind static --dir ../dist # 直接服务既有
| `SVC_<NAME>_ALLOWED_HOSTS` | 逗号分隔的额外主机名,传给 `AGENT_SYSTEM_ALLOWED_HOSTS`,供反向代理的 Host / Origin 校验 |
| `--model-base/--model-key/--model-name`、`--light-*`、`--tavily-keys` | 启动健康后播种 |
| `--dry-run` | 只解析并打印部署计划(来源、物化路径、产物去向、启动参数) |
| `--pick [dev\|release]` | 交互式编号选提交(需 TTY) |
| `--pick [dev\|release\|rdm]` | 交互式编号选提交(需 TTY) |
| `--config FILE` / `--env FILE` | 配置文件(见 §9) |
| `-- <剩余参数>` | 原样透传给 `agent-system serve` |
@@ -268,7 +268,8 @@ scripts/svc.sh <agent名> config --clear # 移除(回命令行参数
## 5. 命令参考:部署来源
`deploy --from` 支持三种来源(**缺省 = `dev` 远端最新**),agent 与 static 共用:
`deploy --from` 支持四种来源(**缺省 = `dev` 远端最新**):dev/local/release 通用于
agent 与 static,rdm 仅限 agent。
### 5.1 dev(缺省)—— 远端最新 / 指定提交
@@ -315,12 +316,44 @@ dev 源的提交解析、`commits` 列举与构建 worktree 物化全部基于
仓库定位:`SVC_RELEASES_DIR` > `../Agent-System-Releases`。制品缺失时提示先在
Releases 仓跑 `scripts/build-release.sh <v>`。
### 5.4 辅助
### 5.4 rdm —— 下游组合仓 Agent-System-RDM(agent 专用)
```
--from rdm # RDM 源仓 origin/main 最新
--from rdm@<sha> # 指定提交
```
部署**下游组合二进制**(基座 + RDM 领域插件:两树一网与 `rdm.*` 追溯审计命令面)。
与 dev 源同构的独立源仓机制:默认 `~/.cache/agent-system-svc/rdm-src`
(`SVC_RDM_SRC_DIR` 覆盖路径;克隆来源 `SVC_RDM_ORIGIN` 覆盖,缺省为 RDM 远端 ssh
地址),流程 = fetch → `worktree add --detach runtime/.worktrees/rdm-<sha>` →
`git submodule update --init --recursive`(物化 `pins/` 基座钉入组合)→ `make build`
(纯 Go,无需 npm)→ `bin/agent-system-rdm` 复制为环境二进制 → worktree 回收。
与基座部署的差异:
- **插件目录按空集安装**:RDM 组合插件编译进二进制(`extension.RegisterCompiled`),
无声明式插件资产;管理页「插件管理」列表只反映目录插件,组合插件经
`/api/registry` 与命令面可见;
- **web/ 工作台**:RDM 自带零构建静态工作台(直连后端 API),deploy 时复制到
`runtime/<name>/htdocs/`,用伴生 static 服务伺服
(`scripts/svc.sh <name>web deploy --kind static --dir runtime/<name>/htdocs`;
注意该目录随本环境 `rm --purge` 一并删除);
- **启动兼容**:组合二进制容忍基座风格的首位 `serve` 子命令并提供 `version`
子命令;svc 的 `version`/`serve -h` 探测带 timeout 护栏;
- **不支持** `--mock` 与 `--config`(组合 CLI 无此旗标);模型设置播种
(`--model-*`/`--tavily-keys`)仅基座产物支持,rdm 源跳过(登记态
`source=rdm@*` 即识别形态,跨裸 start/restart 稳定);
- **PG 档**:`db <pg实例>` 绑定同样走 `AGENT_SYSTEM_DSN` 环境交付;RDM CLI 在
`-dsn` 为空时回退读该环境变量(无 `config explain` 子命令时,svc 以 ELF 内静态
引用作能力证据)。
### 5.5 辅助
```bash
scripts/svc.sh commits [dev|release] [N] # 可部署提交表(默认 20 条)
scripts/svc.sh <name> deploy --pick # 交互式编号选择
scripts/svc.sh <name> deploy --dry-run # 只打印计划
scripts/svc.sh commits [dev|release|rdm] [N] # 可部署提交表(默认 20 条)
scripts/svc.sh <name> deploy --pick # 交互式编号选择
scripts/svc.sh <name> deploy --dry-run # 只打印计划
```
`commits` 表格:dev 源标注 `[最新]`(源仓 origin/main 顶)与 `[已部署:<服务名>]`
@@ -422,6 +455,7 @@ scripts/svc.sh update [name...] [--check] [--all] [--no-fetch]
|---|---|
| `local@<sha>` / `dev@<sha>` | 一律 `deploy --from dev@<远端 main 最新>`(独立部署源仓 + 隔离 worktree 构建;不 pull 主检出、不看工作树状态) |
| `release@<版本>` | `deploy --from release@<Releases 最新版本>`(sha256 校验) |
| `rdm@<sha>` | `deploy --from rdm@<RDM 远端 main 最新>`(组合二进制;见 §5.4) |
任一服务失败不中断其余服务;最终汇总 `成功/失败/跳过`。退出码:0 全部成功或最新;
1 有失败;2 用法错误。
@@ -615,7 +649,7 @@ scripts/svc.sh prod deploy --env .env.prod # 等价
| `pid` | 最近启动 pid |
| `addr` | 监听地址(持久化,下次 start 复用) |
| `tags` | 标签(逗号分隔) |
| `source` | 部署来源:`local@<sha>` / `dev@<sha>` / `release@<版本>` / `dir@<路径>` / `postgres@local` / `clone@<名>` |
| `source` | 部署来源:`local@<sha>` / `dev@<sha>` / `release@<版本>` / `rdm@<sha>` / `dir@<路径>` / `postgres@local` / `clone@<名>` |
| `version` | 产物版本串(`agent-system version` 输出) |
| `started` | 最近启动时间 |
| `pidcheck` | 进程判定标记(见 §6.1) |