agent-exec transport 10744e242fc07c8b53c17e7ad7a55cf4/cb4ae8cd1607

This commit is contained in:
agent-exec-transport
2026-10-17 09:05:56 +00:00
parent efa3d48a9b
commit 271d95ff68
7 changed files with 161 additions and 1 deletions
+2
View File
@@ -168,6 +168,8 @@ jobs:
ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt
- name: Validate AGENT-EXECUTION.md with the pinned shared executor
run: scripts/agent-exec validate --repo .
- name: Governance check with the pinned kit
run: scripts/dm governance check --repo .
- name: Install Node 22
run: |
set -euo pipefail
+66
View File
@@ -0,0 +1,66 @@
# <任务标题> 任务卡
任务主记录:<Issue/PR 链接,或注明"本文件随 PR 描述维护">。
状态:<进行中 / 待审核 / 已合入 / 已放弃>;owner:<填写>。
## 基线与授权
- 权威仓:<仓 URL 或逻辑 ID>;root_target:main;immediate_target:<main 或 feature/initiative>
- branch_kind:<initiative | child | standalone>;initiative_id:<稳定 ID,普通任务为空>
- R0(initial_main_sha):<完整 SHA>;工作区:<路径>(worktree / clone);分支:<feature|fix|hotfix/...>
- 父任务信息(仅子任务填写):parent_branch=<父分支>;parent_head_sha=<SHA>;parent_pr=<父 PR>
- accepting_requirements:<true | false>(仅 initiative 可为 true;冻结后为 false)
- 需求分流:verdict=<JOIN | NEW>;selected_initiative=<分支或无>;候选=<分支@HEAD 列表或无>;理由=<不适配/适配依据>;triage 收据=<源码外路径与摘要>
- 授权与交付终点:<本次允许的动作与终点;未授权事项写明>
- 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md;外部 Agent 一单元一新进程/会话/工作区)
## 目标与非目标
<预期结果、受影响入口/模块/契约;明确不做什么。>
## Agent 实施收据
按根目录 AGENT-EXECUTION.md 路由;外部 Agent 一单元一新进程/会话/隔离工作区。实施、修复与测试必须通过登记的候选执行;未配置或候选安全耗尽停在 unavailable/blocked,禁止 host 隐式代写。
| 单元 ID | 预期范围 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 |
|---|---|---|---|---|---|---|---|---|---|
| 待定义 | — | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | — |
## 复用材料(task-start 自动检索结果摘录)
- 相关近期提交:<git log -- <paths> 命中;无则写无>。
- 相关经验条目:<检索命中;无则写无>。
## 同步记录
| 节点 | sync_base_sha | tested_head_sha | checked_at | 结果 |
|---|---|---|---|---|
| 启动 | <R0> | <HEAD> | <日期时间> | <一致/已同步> |
| 验收前 | <填写> | <填写> | <填写> | <填写> |
字段没有发生的写"无",不省略。本卡与 PR 描述同源:开 PR 时将"目标与非目标、结果与验证、影响与剩余项"复制进 PR 描述,不另写第二份。
## 交付调度(有多个就绪任务时)
- 调度记录 / entry_id / 当前 attempt_id:<平台或调度服务链接及标识;未入队写无>。
- 入队源 HEAD / owner / 依赖:<完整 SHA、身份、依赖或无>。
- 固定候选引用:<调度尝试中的 base/head、组件与配置;未固定写无>。
- 窗口、最终 CI、Review 与真实合入结果:<引用调度记录及原始证据,不复制全队列>。
定义见 [合入调度与 CI 分配](../standards/merge-queue.md)。本段在候选固定前整理;固定后先使用源码之外的记录保存运行结果,再按项目闭合流程回填。
## 结果与验证(完成后填写)
- 结果:<交付了什么;未发生写无>。
- 验证:<结论性摘要:PASS/FAIL/SKIP/NOT_RUN 逐项;逐条证据见下表,来源标注与写入规则见 [按影响选择验证与证据](../standards/verification.md)>。
- 影响与剩余项:<影响面、遗留风险、后续任务>。
| 时间(UTC) | 命令 | 被测 HEAD | exit | 来源 | 摘要/位置 |
|---|---|---|---|---|---|
| <时间> | <命令;由项目 evidence 工具写入,无工具时附命令+对象 SHA+输出 digest 并标 SELF> | <HEAD> | <exit> | GATE/REPLAY/SELF | <摘要/位置> |
## 回收(task-finish)
- 合入核对:<分支已包含于目标分支的核对输出>。
- 未跟踪/ignored 文件处置:<归档/可再生/存疑 逐项;无则写无>。
- 回收动作:<worktree remove、分支删除、prune;放弃路径注明原因>。
+2
View File
@@ -67,6 +67,8 @@ U2 起实施与部署分别评审。
测试。实际目标以根 Makefile 为准。`make test-governance` 可独立检查开发门禁,使用临时
真实仓库,不访问生产数据;操作与证据要求见 [开发门禁](policy/governance.md)。
`scripts/agent-exec validate --repo .` 核验 `AGENT-EXECUTION.md`,`scripts/dm governance check --repo .` 核验治理 kit 入口与采纳状态(只读);二者均在 CI 中运行。
`make build` 在 backend 模块内编译,replace 指向该模块自己的 `deps/`;
`scripts/check-pins.sh` 核对这些 gitlink 与 Dev 顶层指针,`make test-worktree` 另核对
真正被测的组件工作树。两者分别验证固定组合与实际检出,不能相互替代。
+31
View File
@@ -0,0 +1,31 @@
# 通用规范采纳记录
- 项目/负责人:Agent-System-Dev / weichen
- 状态:active
- 规范位置:`deps/development-guidelines`
- 规范性文档目录:`policy/`(项目规则与制度放此处;只收紧不放宽上游规范)
- 过程文档位置:任务卡 `.task/`,归档 `.task/archive/`,规划记录 `docs/superpowers/plans/`;任务主记录在对应 PR 中
- 版本权威:本仓 gitlink `deps/development-guidelines` @ `2688fd2be6a5`(完整提交 `2688fd2be6a52c0bf110e7e6366b6f291ab5e4eb`);可读标签:无
- 批准/生效依据:`feature/governance-v2-closeout PR(Agent-System-Dev)`;在该 PR 合入前,证据、Review 与 CI 须先记录于 `.task/feature-governance-v2-closeout.md`
- 替代范围和迁移说明:无。既有 [policy/adoption.md](adoption.md) 的逐条决策保持不变,本文件不替代其内容。
逐条规范的采纳、不适用理由与执行方式以 [policy/adoption.md](adoption.md) 为准,本文件不重复其表格。
本仓 `make task-*`(`scripts/task.sh`、`scripts/task_triage.py`、`scripts/task_pr_check.py`)仍是权威任务生命周期;
`scripts/task` 只是 DM 共享入口,供不含 `task.sh` 的仓库使用,本仓不以它替代 `make task-*`。
本文件由 kit 要求的采纳入口只登记以下一行,其余规范沿用 [policy/adoption.md](adoption.md):
| 规范/工作流 | 适用条件与范围 | 采纳或不适用理由 | 执行方式/证据 |
|---|---|---|---|
| [standards/agent-execution.md](../deps/development-guidelines/standards/agent-execution.md) | 工程 Agent CLI 执行路由、会话隔离与受控集成 | 凡允许 AI 协助必须采纳;配置见 `AGENT-EXECUTION.md` | advisory:`AGENT-EXECUTION.md` + `scripts/agent-exec`(validate / admit);CI 步骤「Validate AGENT-EXECUTION.md with the pinned shared executor」与「Governance check with the pinned kit」(`scripts/dm governance check --repo .`)。分支保护要求 governance check 为必需检查之前,不宣称为强制(enforced)门禁 |
## 项目差异
无。项目差异(如有)以 [policy/adoption.md](adoption.md) 的「项目差异」节为准。
## 本次升级或首次接入验证
- 入口:根目录 `AGENTS.md`、`PROJECT.md`、`AGENT-EXECUTION.md`、`scripts/dm`、`scripts/task`、`.task/templates/task-card.md`。
- 相对链接:规范文档统一经 `../deps/development-guidelines/...` 引用;本仓内文档使用仓内相对路径。
- 版本获取:`deps/development-guidelines` gitlink 固定于上表版本;`deps/development-manager` gitlink 固定于 `0552b7358d6955057d6eea090326f83317ed992a`,由 `scripts/dm` 按该提交构建共享 dm-server。
- 验证:在采纳 PR 的临时副本中运行 `scripts/dm governance check --repo .` 与 `scripts/agent-exec validate --repo .`,结果与 `make test-governance` 记录于 `.task/feature-governance-v2-closeout.md`。
Executable
+55
View File
@@ -0,0 +1,55 @@
#!/usr/bin/env bash
# 共享 dm-server 薄入口:读取 deps/development-manager 的 gitlink 钉住提交,
# 按该提交构建并缓存 dm-server,再 exec 其子命令(agent-exec、task、governance)。执行语义与退出码以该二进制为准。
set -euo pipefail
root=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)
dm="$root/deps/development-manager"
die() { echo "dm: $*" >&2; exit 2; }
# git 钩子会导出仓库本地变量(GIT_DIR、GIT_INDEX_FILE 等),它们会让 `git -C "$dm"` 解析到外层仓库。
# 所有针对 DM 检出的 git 与 go 调用都在清除这些变量后执行;读取外层 gitlink 与最终 exec 仍保留继承环境。
dm_local_env="GIT_DIR GIT_WORK_TREE GIT_INDEX_FILE GIT_PREFIX GIT_OBJECT_DIRECTORY GIT_ALTERNATE_OBJECT_DIRECTORIES GIT_COMMON_DIR GIT_GRAFT_FILE GIT_NAMESPACE GIT_CONFIG GIT_CONFIG_PARAMETERS GIT_CONFIG_COUNT GIT_SHALLOW_FILE GIT_IMPLICIT_WORK_TREE $(git rev-parse --local-env-vars 2>/dev/null || true)"
dm_clean_env() { for v in $dm_local_env; do unset "$v"; done; }
dmgit() ( dm_clean_env; git -C "$dm" "$@" )
# 1. 钉住版本只来自索引中的 gitlink(mode 160000),不读取工作区文件。
entry=$(git -C "$root" ls-files -s -- deps/development-manager 2>/dev/null || true)
[ -n "$entry" ] || die "索引中缺少 deps/development-manager 的 gitlink,无法确定钉住的 DM 版本"
read -r mode pin _stage _path <<<"$entry"
[ "$mode" = 160000 ] || die "deps/development-manager 不是 gitlink(mode=$mode)"
[[ "$pin" =~ ^[0-9a-f]{40}$ ]] || die "gitlink 提交格式无效:$pin"
# 2. 检出必须存在且确为 DM 独立仓库(避免 git -C 误解析到外层仓库),HEAD 必须等于钉住提交。
[ -e "$dm/.git" ] || die "deps/development-manager 未检出;请按钉住提交 $pin 检出该 gitlink"
top=$(dmgit rev-parse --show-toplevel 2>/dev/null || true)
[ -n "$top" ] && [ "$top" = "$(cd "$dm" && pwd -P)" ] \
|| die "deps/development-manager 不是独立检出;请按钉住提交 $pin 检出该 gitlink"
head=$(dmgit rev-parse HEAD 2>/dev/null || true)
[ "$head" = "$pin" ] \
|| die "deps/development-manager HEAD(${head:-未知})与钉住提交 $pin 不一致;请按钉住提交检出"
# 3. 检出工作树必须干净(忽略嵌套 submodule 状态)。
dirty=$(dmgit status --porcelain --ignore-submodules=all) \
|| die "无法读取 deps/development-manager 的工作树状态"
[ -z "$dirty" ] || die "deps/development-manager 存在未提交改动,拒绝运行(请先清理该检出)"
# 4. 二进制按钉住提交缓存;缺失时在缓存目录内临时构建,完成后原子改名,避免留下半成品。
cache="${DM_CACHE:-${XDG_CACHE_HOME:-$HOME/.cache}/development-manager/dm-server}"
bin="$cache/dm-server-$pin"
if [ ! -x "$bin" ]; then
command -v go >/dev/null 2>&1 || die "缺少 go,无法构建 dm-server($pin)"
mkdir -p "$cache"
cache=$(cd "$cache" && pwd -P)
bin="$cache/dm-server-$pin"
work=$(mktemp -d "$cache/build-$pin.XXXXXX")
if ! (dm_clean_env; cd "$dm" && GOWORK=off go build -trimpath -o "$work/dm-server" ./cmd/dm-server); then
rm -rf "$work"
die "构建 dm-server 失败($pin)"
fi
mv -f "$work/dm-server" "$bin"
rm -rf "$work"
fi
exec "$bin" "$@"
Executable
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# 通用任务入口:转调 scripts/dm 的 task 子命令(triage / start / pr-check)。
set -euo pipefail
exec "$(dirname "$0")/dm" task "$@"