目标
实现 Agent permission 传递和 Worker/Reviewer shell 隔离,建立凭证安全的运行时基础。
实现要点
Agent permission 传递 (
src/plugin/agents.ts扩展)AgentEntry增加正式permission字段解析- 解析结果传递给 OpenCode config(agent permission map)
capabilities只用于 Lint 和文档校验,不用于运行时授权- Reviewer permission:
write: deny,edit: deny,bash: "gh pr view|diff|checks" - Worker permission: write 限定 worktree,bash 限定 git commit/push/test
Shell 隔离 (
src/plugin/shell.ts新增)createIsolatedShellEnv(agent: AgentEntry): Record<string, string>- 为 Worker 设置隔离的
HOME(临时目录)、GH_CONFIG_DIR、Git credential config - Worker 只获得允许 feature branch push 的最小 Git 凭证
- Reviewer 不获得任何 GitHub 写凭证(
GH_TOKEN设为只读 token 或空) detectAmbientCredentials(): AmbientCredentialReport:检查GH_TOKEN、GITHUB_TOKEN、~/.config/gh/hosts.yml、git credential helper
Runtime 启用前检查
- 检测到可用 GitHub 写凭证 → Runtime enforcement 降级为 advisory
- 记录降级原因(包括检测到的凭证来源)
shell.env只作为附加措施,不作为唯一隔离边界
验收标准
- [ ] ambient credential 检测测试:有 GH_TOKEN → 降级
- [ ] Worker shell 隔离测试:Worker 无法访问宿主 GH_TOKEN
- [ ] Reviewer shell 隔离测试:Reviewer 无 GitHub 写凭证
- [ ] Agent permission 传递测试:OpenCode config 正确接收
Worktree
- 路径:
.worktree/tdd-d4a-agent-isolation/ - 分支:
feat/tdd-d4a-agent-isolation