Skip to content

让变更追踪支持删除文件和 shell 侧文件变更检测 #23

Description

@ztygod

背景

ChangeTracker 当前主要跟踪通过 write_fileedit_file 产生的写入。运行时类型中已经包含 deleted 状态,但仓库还没有删除文件工具;同时,shell 命令可能创建、修改或删除文件,这些变化目前不会自动进入 checkpoint 或 rollback。

这会让 edit 模式下的失败回滚不完整:如果 agent 通过 shell 命令生成文件、删除文件或修改文件,即使运行失败,也可能留下未追踪的工作区变化。

目标

让变更追踪覆盖删除文件和可选的 shell 侧文件变更检测,使 checkpoint、trace 和 rollback 更接近真实工作区变化。

改动方向

先补齐文件工具层的删除能力,并让 ChangeTracker 能记录 created、modified、deleted 三类状态。对于 shell 侧变化,设计一个可选检测机制,例如命令执行前后扫描候选文件 hash 差异;该机制需要有明确开关、文件范围和性能边界,避免在大型仓库中造成不可接受的开销。

可能涉及模块

  • src/runtime/change-tracker.ts
  • src/runtime/types.ts
  • src/tool/fs
  • src/tool/bash/bash.tool.ts
  • src/agent/agent.ts
  • src/runtime/workspace-scanner.ts
  • tests/agenttests/tool

任务清单

  • 新增受 writeFile 权限保护的 delete_file 工具
  • ChangeTracker 支持记录删除文件的 before/after hash 与内容
  • 确保 rollback 能恢复被删除文件,并移除失败运行中新建的文件
  • 设计 shell 命令执行前后的可选文件变化检测机制
  • 将 shell 侧检测结果写入 change set 和 trace
  • 补充删除、恢复删除、新建回滚、shell 修改检测的测试

验收标准

  • 删除文件会生成 deleted change set
  • rollback 能恢复被删除文件的原始内容
  • rollback 能删除失败运行中新建的文件
  • shell 造成的文件变化在启用检测时可被记录
  • 检测机制默认边界清晰,不会扫描常见生成目录或无限制读取大文件
  • 路径安全限制仍阻止工作区外文件操作

建议标签

feature、runtime、safety

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions