Skip to content

移除已废弃的文件系统工具:MoveFile / CopyFile / CreateDir / RemoveDir #677

@phantom5099

Description

@phantom5099

背景

NeoCode 的工具集中,filesystem_move_filefilesystem_copy_filefilesystem_create_dirfilesystem_remove_dir 四个工具已经不再被模型实际调用。在当前的工具使用策略中,文件移动/复制使用 filesystem_write_file 完成(直接写入目标路径),目录创建/删除由 bash 兜底。这四个工具已退化为死代码。

问题

  1. 提示词膨胀:四个工具的描述、schema 和用法指南占用模型上下文预算,每次请求都携带无用的工具定义。
  2. 代码复杂度:Runtime 中为这些工具维护了特殊的 pre-capture / post-delete 路径(如 remove_dir 的递归预捕获逻辑)、toolCallTouchedPaths 中的 source_path/destination_path 双路径解析、isFileWriteTool 中的多工具枚举,这些分支不会执行,却增加了测试成本和误改风险。
  3. 前端冗余eventBridge.tsFILE_WRITE_TOOLS_trackFileChangeFromTool 为 move/copy 维护了 source_path/destination_path 双路径分支。
  4. 权限映射残留permission_mapper.go 中仍有四个工具的权限 action 映射 case。
  5. Pin 策略扩散pin_checker.go 中 copy/move 被列入 defaultPinToolNames,增加了不必要的 pin 判断分支。
  6. 测试债务:四个工具共 ~900 行测试代码(move_file_test 263 行、copy_file_test 210 行、remove_dir_test 166 行、create_dir_test 136 行,加上各文件的交叉引用测试)每次 CI 都要编译执行。

方案

彻底删除四个工具及其所有引用,包括:

  • 删除 8 个文件(4 个实现 + 4 个测试)
  • 移除 tools/names.go 中的 4 个工具名常量
  • 移除 tools/filesystem/helpers.go 中的本地常量
  • 移除 tools/permission_mapper.go 中的权限映射 case
  • 移除 app/bootstrap.gorunner/runner.go 中的注册调用
  • 清理 runtime/toolexec.go 中的 RemoveDir 递归预捕获逻辑、MoveFile post-delete 逻辑,简化 isFileWriteTooltoolCallTouchedPaths
  • 清理 context/pin_checker.go 中的 copy/move pin 条目
  • 清理 promptasset/templates/core/tool_usage.md 中的用法指南
  • 清理 web/src/utils/eventBridge.ts 中的 move/copy 分支
  • 清理 docs/architecture/architecture-v1.md 中的工具表条目
  • 移除相关的单元测试用例

收益

维度 收益
代码量 净删除 ~1700 行,0 新增
工具定义数 减少 4 个,模型每次请求少携带约 200 token 的 schema/description
提示词大小 tool_usage.md 减少 4 行工具使用指令
Runtime 分支 isFileWriteTool 从 7 个 case 降到 3 个;toolCallTouchedPaths 去掉 switch 分支
前端分支 FILE_WRITE_TOOLS 从 5 个降到 3 个;_trackFileChangeFromTool 去除 move/copy 双路径分支
可维护性 后续修改文件写入链路时,不再需要考虑已废弃的多文件工具语义

风险评估

  • 向后兼容:在线服务不涉及。本地会话历史中如果包含这四个工具的历史调用记录,仅工具名出现在 metadata 中,不影响回放。
  • 功能回归:bash 工具已覆盖目录创建/删除能力(mkdir/rm -rf),文件移动/复制通过 filesystem_write_file 写目标路径实现,不存在能力缺口。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions