Skip to content

fix(edit_file): 前置定位模式校验并明确参数互斥规则 - #674

Merged
origami-chen merged 2 commits into
MemTensor:v1.2.6from
Orsted290:fix-edit-file-selection-validation-v126
Oct 20, 2026
Merged

origami-chen merged 2 commits into
MemTensor:v1.2.6from
Orsted290:fix-edit-file-selection-validation-v126

Conversation

@Orsted290

Copy link
Copy Markdown
Contributor

问题与修复

edit_file 原先在读取文件、查找匹配之后才检查定位参数互斥,创建文件及部分提前返回路径会绕过检查。模型参数说明也未明确定位模式和计数断言的关系。

  • 将参数类型、定位互斥及创建模式约束统一前置,覆盖注册器校验和直接 execute,在任何文件访问前拒绝冲突。
  • 明确默认唯一匹配、occurrence、line_hint、replace_all=true 的定位语义;仅 replace_all=true 与定位参数互斥,false 可以和定位参数组合。
  • expected_replacements 保持为独立计数断言,在写入前验证选中数量;创建模式仅接受省略/null 或 1,包括无变化操作。
  • 补充参数/工具契约说明,以及缺失文件、空文件、无匹配、创建、无变化和合法定位模式回归。

例如,old_text="" 配合 replace_all=true, occurrence=1 现在直接返回参数错误,不创建文件或目录;replace_all=false, occurrence=2, expected_replacements=1 可以正常替换第二处。

改动范围

  • App/memmy-agent/src/core/agent-runtime/tools/filesystem.ts
  • App/memmy-agent/src/templates/agent/tool-contract.md
  • App/memmy-agent/tests/core/agent-runtime/tools/edit-file-validation.test.ts
  • App/memmy-agent/tests/core/agent-runtime/tools/tool-descriptions.test.ts

本 PR 不包含别名收敛或 exec 输出单位修复。

迁移与验证

替代原 PR #662,从上游 v1.2.6(8cd095c7)新建分支,仅 cherry-pick 原 PR 的修复提交,不携带 v1.2.4 的其他历史提交。git range-diff 确认迁移前后补丁等价。

  • 本分支在新基线上的回归:6 个文件、241 项通过。
  • 两项修复在 v1.2.6 上组合验证:21 个文件、669 项通过。
  • git diff --check 通过。
  • 本轮未重新打包、运行桌面验收或全量类型检查;此前旧基线上的验收不能替代本版本验收。

合并协调

两条新 PR 均独立以 v1.2.6 为基线。修复修改相邻参数入口与工具契约,先合并一条后另一条仍需协调重叠修改;必须同时保留别名归一化与定位校验。已迁移原组合结果并通过上述联合回归。旧 PR 在新 PR 创建后可关闭,避免重复合并。

@origami-chen
origami-chen merged commit 3a5f5c4 into MemTensor:v1.2.6 Oct 20, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants