背景
NeoCode 的工具集中,filesystem_move_file、filesystem_copy_file、filesystem_create_dir、filesystem_remove_dir 四个工具已经不再被模型实际调用。在当前的工具使用策略中,文件移动/复制使用 filesystem_write_file 完成(直接写入目标路径),目录创建/删除由 bash 兜底。这四个工具已退化为死代码。
问题
- 提示词膨胀:四个工具的描述、schema 和用法指南占用模型上下文预算,每次请求都携带无用的工具定义。
- 代码复杂度:Runtime 中为这些工具维护了特殊的 pre-capture / post-delete 路径(如
remove_dir 的递归预捕获逻辑)、toolCallTouchedPaths 中的 source_path/destination_path 双路径解析、isFileWriteTool 中的多工具枚举,这些分支不会执行,却增加了测试成本和误改风险。
- 前端冗余:
eventBridge.ts 中 FILE_WRITE_TOOLS 和 _trackFileChangeFromTool 为 move/copy 维护了 source_path/destination_path 双路径分支。
- 权限映射残留:
permission_mapper.go 中仍有四个工具的权限 action 映射 case。
- Pin 策略扩散:
pin_checker.go 中 copy/move 被列入 defaultPinToolNames,增加了不必要的 pin 判断分支。
- 测试债务:四个工具共 ~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.go 和 runner/runner.go 中的注册调用
- 清理
runtime/toolexec.go 中的 RemoveDir 递归预捕获逻辑、MoveFile post-delete 逻辑,简化 isFileWriteTool 和 toolCallTouchedPaths
- 清理
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 写目标路径实现,不存在能力缺口。
背景
NeoCode 的工具集中,
filesystem_move_file、filesystem_copy_file、filesystem_create_dir、filesystem_remove_dir四个工具已经不再被模型实际调用。在当前的工具使用策略中,文件移动/复制使用filesystem_write_file完成(直接写入目标路径),目录创建/删除由bash兜底。这四个工具已退化为死代码。问题
remove_dir的递归预捕获逻辑)、toolCallTouchedPaths中的source_path/destination_path双路径解析、isFileWriteTool中的多工具枚举,这些分支不会执行,却增加了测试成本和误改风险。eventBridge.ts中FILE_WRITE_TOOLS和_trackFileChangeFromTool为 move/copy 维护了source_path/destination_path双路径分支。permission_mapper.go中仍有四个工具的权限 action 映射 case。pin_checker.go中 copy/move 被列入defaultPinToolNames,增加了不必要的 pin 判断分支。方案
彻底删除四个工具及其所有引用,包括:
tools/names.go中的 4 个工具名常量tools/filesystem/helpers.go中的本地常量tools/permission_mapper.go中的权限映射 caseapp/bootstrap.go和runner/runner.go中的注册调用runtime/toolexec.go中的 RemoveDir 递归预捕获逻辑、MoveFile post-delete 逻辑,简化isFileWriteTool和toolCallTouchedPathscontext/pin_checker.go中的 copy/move pin 条目promptasset/templates/core/tool_usage.md中的用法指南web/src/utils/eventBridge.ts中的 move/copy 分支docs/architecture/architecture-v1.md中的工具表条目收益
tool_usage.md减少 4 行工具使用指令isFileWriteTool从 7 个 case 降到 3 个;toolCallTouchedPaths去掉 switch 分支FILE_WRITE_TOOLS从 5 个降到 3 个;_trackFileChangeFromTool去除 move/copy 双路径分支风险评估
mkdir/rm -rf),文件移动/复制通过filesystem_write_file写目标路径实现,不存在能力缺口。