agent-exec transport e64b5afee9fabb0925523057eb540b68/8399a44af60d

This commit is contained in:
agent-exec-transport
2026-10-17 06:55:22 +00:00
parent a160b03c7b
commit 1ada9955d5
3 changed files with 12 additions and 6 deletions
+1 -1
View File
@@ -31,7 +31,7 @@
## 本次升级或首次接入验证 ## 本次升级或首次接入验证
- 入口:`AGENTS.md` 保留原内容并追加「Agent 执行与新项目准入(强制)」;`PROJECT.md`「验证」节补充 `scripts/agent-exec validate --repo .` 与 `scripts/dm governance check --repo .`;`AGENT-EXECUTION.md` 原样保留(`governance init --adopt` 跳过已存在文件)。 - 入口:`AGENTS.md` 保留原内容并追加「Agent 执行与新项目准入(强制)」;`PROJECT.md`「验证」节补充 `scripts/agent-exec validate --repo .` 与 `scripts/dm governance check --repo .`;`AGENT-EXECUTION.md` 原样保留(`governance init --adopt` 跳过已存在文件)。
- 版本获取:`deps/development-guidelines` @ `2688fd2be6a5`,`deps/development-manager` @ `42e675fec8e0`;`.gitmodules` 使用规范 SSH 地址,不含凭证或本机路径。 - 版本获取:`deps/development-guidelines` @ `2688fd2be6a5`,`deps/development-manager` @ `bd3a7de57a3a`;`.gitmodules` 使用规范 SSH 地址,不含凭证或本机路径。
- 占位符:模板占位符已全部替换;`policy/guidelines-adoption.md` 与追加的准入段中不再有模板尖括号文字。 - 占位符:模板占位符已全部替换;`policy/guidelines-adoption.md` 与追加的准入段中不再有模板尖括号文字。
- 冲突检查:仓内原无其他采纳记录(无 `policy/adoption.md`),原无旧版 Agent 执行入口(无 `scripts/agent_exec.py`),原无 `.gitea/workflows`,治理 workflow 为新增,无需修改既有 CI。 - 冲突检查:仓内原无其他采纳记录(无 `policy/adoption.md`),原无旧版 Agent 执行入口(无 `scripts/agent_exec.py`),原无 `.gitea/workflows`,治理 workflow 为新增,无需修改既有 CI。
- 正负例与 Review/CI 证据:见 `.task/feature-governance-adoption.md`。 - 正负例与 Review/CI 证据:见 `.task/feature-governance-adoption.md`。
+10 -4
View File
@@ -8,6 +8,12 @@ dm="$root/deps/development-manager"
die() { echo "dm: $*" >&2; exit 2; } 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),不读取工作区文件。 # 1. 钉住版本只来自索引中的 gitlink(mode 160000),不读取工作区文件。
entry=$(git -C "$root" ls-files -s -- deps/development-manager 2>/dev/null || true) entry=$(git -C "$root" ls-files -s -- deps/development-manager 2>/dev/null || true)
[ -n "$entry" ] || die "索引中缺少 deps/development-manager 的 gitlink,无法确定钉住的 DM 版本" [ -n "$entry" ] || die "索引中缺少 deps/development-manager 的 gitlink,无法确定钉住的 DM 版本"
@@ -17,15 +23,15 @@ read -r mode pin _stage _path <<<"$entry"
# 2. 检出必须存在且确为 DM 独立仓库(避免 git -C 误解析到外层仓库),HEAD 必须等于钉住提交。 # 2. 检出必须存在且确为 DM 独立仓库(避免 git -C 误解析到外层仓库),HEAD 必须等于钉住提交。
[ -e "$dm/.git" ] || die "deps/development-manager 未检出;请按钉住提交 $pin 检出该 gitlink" [ -e "$dm/.git" ] || die "deps/development-manager 未检出;请按钉住提交 $pin 检出该 gitlink"
top=$(git -C "$dm" rev-parse --show-toplevel 2>/dev/null || true) top=$(dmgit rev-parse --show-toplevel 2>/dev/null || true)
[ -n "$top" ] && [ "$top" = "$(cd "$dm" && pwd -P)" ] \ [ -n "$top" ] && [ "$top" = "$(cd "$dm" && pwd -P)" ] \
|| die "deps/development-manager 不是独立检出;请按钉住提交 $pin 检出该 gitlink" || die "deps/development-manager 不是独立检出;请按钉住提交 $pin 检出该 gitlink"
head=$(git -C "$dm" rev-parse HEAD 2>/dev/null || true) head=$(dmgit rev-parse HEAD 2>/dev/null || true)
[ "$head" = "$pin" ] \ [ "$head" = "$pin" ] \
|| die "deps/development-manager HEAD(${head:-未知})与钉住提交 $pin 不一致;请按钉住提交检出" || die "deps/development-manager HEAD(${head:-未知})与钉住提交 $pin 不一致;请按钉住提交检出"
# 3. 检出工作树必须干净(忽略嵌套 submodule 状态)。 # 3. 检出工作树必须干净(忽略嵌套 submodule 状态)。
dirty=$(git -C "$dm" status --porcelain --ignore-submodules=all) \ dirty=$(dmgit status --porcelain --ignore-submodules=all) \
|| die "无法读取 deps/development-manager 的工作树状态" || die "无法读取 deps/development-manager 的工作树状态"
[ -z "$dirty" ] || die "deps/development-manager 存在未提交改动,拒绝运行(请先清理该检出)" [ -z "$dirty" ] || die "deps/development-manager 存在未提交改动,拒绝运行(请先清理该检出)"
@@ -38,7 +44,7 @@ if [ ! -x "$bin" ]; then
cache=$(cd "$cache" && pwd -P) cache=$(cd "$cache" && pwd -P)
bin="$cache/dm-server-$pin" bin="$cache/dm-server-$pin"
work=$(mktemp -d "$cache/build-$pin.XXXXXX") work=$(mktemp -d "$cache/build-$pin.XXXXXX")
if ! (cd "$dm" && go build -trimpath -o "$work/dm-server" ./cmd/dm-server); then if ! (dm_clean_env; cd "$dm" && GOWORK=off go build -trimpath -o "$work/dm-server" ./cmd/dm-server); then
rm -rf "$work" rm -rf "$work"
die "构建 dm-server 失败($pin)" die "构建 dm-server 失败($pin)"
fi fi