OH12: Git / Worktree OpenHarness · 对标 S12

S12 同主题:用独立 worktree 做文件系统隔离时,需要封装 git worktree add、回到主树、以及与 cwd 权限规则联动。

上游:HKUDS/OpenHarness · 本仓库快照:reference/rererence_harness/OpenHarness/ · 路径亦见 专题映射表

与 S12 站内导图对齐course-s12)。

🎯 关键路径(读什么)

src/openharness/ 下优先打开:

  • tools/enter_worktree_tool.pygit 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),由模型在对话中处理。

⚖️ 与课内叙事对照

维度课内 S12OpenHarness
隔离课内 worktree 模式显式工具而非隐式 fork
与 OH06子 Agent可组合:worktree 给写盘边界,agent 给算力边界
清理remove worktree是否暴露为工具依产品选择;可读 exit 工具语义

🤔 思考题

  1. enter_worktree 成功后,模型如何获知新的 cwd?工具输出是否足够机器可读?
  2. 若用户在 worktree 里跑 bash git push,权限走 Bash 规则还是 Git 特判?
  3. OH06 local_agent 同时使用时,如何避免两个隔离机制互相打架?

📎 延伸阅读

OH01–12 目录 · OH11 · OH 课纲 · S12 · D12