补齐Agent Git工作树审阅与聊天状态交互

This commit is contained in:
AIGameCreator App
2026-07-13 11:21:29 +08:00
parent 5c3b8ec267
commit 5e1d4ddeee
10 changed files with 720 additions and 22 deletions
@@ -4204,3 +4204,9 @@
- 决策:patchset 预检通过后在同一项目写锁内自动 checkpoint,prepared 审计成功后才推进一次 revision 并应用全部变更。锁内再次校验 policy、pending 身份、revision / verification gate 和 repository fingerprint;应用中途失败必须回滚。revision / gate、回滚或完成审计不完整进入 `needs-reconciliation``executing` 恢复不得自动重放。成功审计只保存路径、operation、前后摘要与字节数,不保存源码正文。
- 决策:`project.diff` 增加可选的有界内容 hunks;使用成熟文本 diff 库在项目锁内比较 checkpoint 与当前项目,生成后重算路径差异,不一致时拒绝混合快照;二进制、非 UTF-8、文件 / 总预算截断必须显式标记。最新内容 diff 在 128 KiB context bundle 中作为压缩保护项最多保留 24,256 字符,避免被普通 observation 的 1,600 字符上限截断。Agent 完成 patchset 后先用返回的 checkpointId 审查内容 diff,再执行可验证命令。
- 验证:本地 441 项 Tauri 测试已覆盖多文件成功、预检全失败、大小写重复、敏感 / 链接路径、SHA 漂移、prepared / completed 审计失败、应用中断回滚和一次 revision。真实 `gpt-5.5``llm-runtime` 套件已形成唯一 patchset,同时更新 / 创建文件并读取绑定 checkpointId 的 2 项未截断内容 diff,通过最终命令、项目验证和桌面 / 移动浏览器验证;Runner 强杀恢复后副作用重放、重复 action / message / receipt、半完成文件和密钥 / 诱饵泄露均为 0。
## 2026-07-13 AI 游戏创作 Agent Runtime V1.4 Git 工作树审阅
- 决策:新增一等只读 `git.inspect`,共享 command id 为 `project.git_inspect`且默认 `auto`。工具只接受 `includeDiff / maxFiles / maxChars`,返回精确 Git top-level 的 HEAD / branch、staged / unstaged / untracked 安全路径和有界 staged / unstaged unified diff;不改项目 revision 或 verification gate。
- 决策:Git 读取必须隔离 system/global config、hooks、fsmonitor、pager、external diff、textconv、optional locks、prompt 和网络;项目根必须就是 Git top-level。路径经可移植路径、项目边界、普通文件、硬 / 符号链接和敏感路径过滤;untracked 只列名不读正文,前后快照漂移时整次失败。
- 决策:本轮明确不开放 Git 写操作。`add / commit / push / pull / fetch`、分支切换、merge / rebase / reset / stash / clean、tag、submodule 和 worktree 继续禁止;后续本地 commit 必须单独设计 HEAD / index / 文件快照、精确确认与 Runner 崩溃不重放,不复用通用 `command.exec`
@@ -315,6 +315,30 @@ npm run ai-game-creator-shell:agent-runtime:real-e2e -- --config-dir <AppData> -
发布 AppData 中配置的真实 `gpt-5.5` 已通过 V1.3 `llm-runtime` 套件:同一 run 先用 `file.read` 取得完整 SHA-256,只执行 1 次 `project.patchset`,同时更新 `game/index.html` 和创建第二个文件;prepared / completed 审计各 1 条,patchset 只推进 1 次 revision,随后用返回的 checkpointId 读取 2 项未截断内容 hunks。Runner 强制终止后恢复原 run / session,最终项目验证、桌面 / 移动浏览器验证、3 个隔离实例和唯一 join 均通过;87 条 task、144 条 event、130 条 Agent DB 记录中副作用重放、重复 action / message / receipt、半完成文件、密钥和诱饵泄露均为 0,临时项目已按 sentinel 清理。
## V1.4 Git 工作树安全审阅
### `git.inspect`
单 Agent 新增一等只读 `git.inspect`,用于在修改前后读取当前工作树状态和有界 unified diff,不再要求模型为常规 Git 审阅申请一次通用 `command.exec` 确认:
```json
{
"includeDiff": true,
"maxFiles": 20,
"maxChars": 24000
}
```
- 共享 command id 为 `project.git_inspect`,默认权限为 `auto`;项目或 per-Agent policy 仍可将它改为 `confirm``deny`。该工具只读,不推进 project revision,不改变 verification gate。
- 项目目录必须精确等于 Git top-level;不向父目录探测仓库,不接受 nested root、bare repository 或不可用的 worktree。
- Git 进程使用项目外受信可执行文件、清空环境和隔离 HOME;固定关闭 system/global config、hooks、fsmonitor、pager、external diff、textconv、optional locks、签名校验、交互 prompt 和网络代理。
- status 使用 NUL 分隔格式解析,返回 HEAD / branch、staged / unstaged / untracked 的安全相对路径。所有路径必须通过可移植路径、项目边界、普通文件和敏感路径校验;`.agent`、VCS 控制面、`.env*`、密钥、凭据、数据库、dump、依赖、构建和缓存目录不得出现在返回值或 diff 中。
- `includeDiff=true` 分别对安全 staged 和 unstaged tracked 路径生成内容 diffuntracked 只列路径,不读正文。默认 20 个文件、24,000 字符,公开上限固定为 50 个文件和 24,000 字符;超出上限必须显式返回 `truncated=true`
- status 和 diff 前后的安全快照不一致时整次失败,不得把并发混合状态作为完整审阅结果。最新成功 Git diff 在 context bundle 中按内容 diff 保护项最多保留 24,256 字符。
- 本轮不实现 `git add/commit/push/pull/fetch`、分支切换、merge/rebase/reset/stash/clean、tag、submodule 或 worktree 操作;本地提交需要独立的 HEAD / index / 文件快照、准确确认和崩溃不重放设计,不从只读 inspect 工具顺带放开。
真实 Provider E2E 必须在 disposable Git 仓库中证明:Agent 先读取初始工作树,patchset 后读取同时包含 changed / untracked 的安全状态和 tracked content hunk,敏感诱饵路径与正文不出现在 observation、context bundle、Agent DB 或报告中,且 Git 审阅不增加 project revision。
## 验收命令
- `npm run ai-game-creator-shell:typecheck`