OH12: Git / Worktree OpenHarness · 对标 S12
与 S12 同主题:用独立 worktree 做文件系统隔离时,需要封装 git worktree add、回到主树、以及与 cwd 权限规则联动。
上游:HKUDS/OpenHarness · 本仓库快照:reference/rererence_harness/OpenHarness/ · 路径亦见 专题映射表。
course-s12)。🎯 关键路径(读什么)
在 src/openharness/ 下优先打开:
tools/enter_worktree_tool.py:git worktree add、分支创建。tools/exit_worktree_tool.py:离开 worktree 上下文(回到主 repo 路径语义)。tools/bash_tool.py:通用git子命令仍多经 Shell。
🔍 源码导读
与权限、上下文
worktree 路径解析后成为新的操作根;PermissionChecker 的 path_rules 仍基于绝对路径匹配。读 enter_worktree 返回给模型的文本,应包含可写 cwd 提示便于后续工具调用。
失败路径
非 git 仓库、分支已存在、git 返回非零等,一律收敛为 ToolResult(is_error=True),由模型在对话中处理。
⚖️ 与课内叙事对照
| 维度 | 课内 S12 | OpenHarness |
|---|---|---|
| 隔离 | 课内 worktree 模式 | 显式工具而非隐式 fork |
| 与 OH06 | 子 Agent | 可组合:worktree 给写盘边界,agent 给算力边界 |
| 清理 | remove worktree | 是否暴露为工具依产品选择;可读 exit 工具语义 |
🤔 思考题
enter_worktree成功后,模型如何获知新的cwd?工具输出是否足够机器可读?- 若用户在 worktree 里跑
bash git push,权限走 Bash 规则还是 Git 特判? - 与 OH06
local_agent同时使用时,如何避免两个隔离机制互相打架?
📎 延伸阅读
OH01–12 目录 · OH11 · OH 课纲 · S12 · D12