mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 15:38:19 +08:00
feat(agent): 新增 apply_patch 多文件补丁编辑工具
参考 Codex apply_patch 设计,支持单次调用对多个文本文件执行新增、 更新和删除:补丁以 *** Begin Patch / *** End Patch 包裹,Update 段 用 @@ 分隔 hunk,上下文行须与当前内容精确一致;先整体校验全部文件 操作,通过后才逐个原子写盘,并以校验期 sha256 防止并发修改。 - 工具描述与系统提示词明确 apply_patch / edit_file / write_file 分工: 跨多文件或增删文件用 apply_patch,单文件单处替换用 edit_file - 注册进工具工厂与 ALWAYS_INCLUDE 列表,加入策略 inventory 与 MCP 隐藏列表,流式回调归类为 file_write - 同步 create-moviepilot-plugin / publish-moviepilot-plugin / create-moviepilot-skill 技能的 allowed-tools 与版本 - 新增 tests/test_agent_apply_patch.py 覆盖解析、多文件应用、 整体拒绝、权限边界与版本冲突场景
This commit is contained in:
@@ -29,7 +29,9 @@ def test_modified_builtin_skills_have_incremented_versions() -> None:
|
||||
"organize-files": "3",
|
||||
"transfer-failed-retry": "4",
|
||||
"generate-identifiers": "3",
|
||||
"create-moviepilot-plugin": "3",
|
||||
"create-moviepilot-plugin": "4",
|
||||
"create-moviepilot-skill": "2",
|
||||
"publish-moviepilot-plugin": "2",
|
||||
}
|
||||
|
||||
for skill_name, expected_version in expected_versions.items():
|
||||
@@ -79,6 +81,7 @@ def test_agent_core_prompt_does_not_block_plugin_source_edits() -> None:
|
||||
assert "file editing tools, or generated patches to change code" not in core_prompt
|
||||
assert "write_file" in allowed_tools
|
||||
assert "edit_file" in allowed_tools
|
||||
assert "apply_patch" in allowed_tools
|
||||
assert "search_web" in allowed_tools
|
||||
assert "browse_webpage" in allowed_tools
|
||||
|
||||
@@ -89,6 +92,8 @@ def test_agent_core_prompt_routes_code_tools_safely() -> None:
|
||||
|
||||
assert '`execute_command(action="run")` with `rg`' in core_prompt
|
||||
assert "`replace_all=true` only when every match must change" in core_prompt
|
||||
assert "pick the editing tool by scope" in core_prompt
|
||||
assert "Use `apply_patch` when one logical change spans multiple files" in core_prompt
|
||||
assert "Use `action=run` for short bounded commands" in core_prompt
|
||||
assert "including SSH" in core_prompt
|
||||
assert "Never use shell redirection" in core_prompt
|
||||
|
||||
Reference in New Issue
Block a user