Skip to content

feat(acp): add OpenCode YOLO agent config and ACP setSessionMode switching#269

Merged
jim60105 merged 2 commits intomasterfrom
issue-264-opencode-yolo-mode-switching
Mar 9, 2026
Merged

feat(acp): add OpenCode YOLO agent config and ACP setSessionMode switching#269
jim60105 merged 2 commits intomasterfrom
issue-264-opencode-yolo-mode-switching

Conversation

@bot0419
Copy link
Copy Markdown
Collaborator

@bot0419 bot0419 commented Mar 9, 2026

工作報告

概述

實作 OpenCode YOLO Agent 配置與 ACP setSessionMode 模式切換功能。當 YOLO 模式啟用時,OpenCode 會透過 ACP setSessionMode("yolo") 切換到具有完全寬鬆權限的 yolo Agent,取代先前無效的 OPENCODE_YOLO 環境變數方案。

變更內容

1. OpenCode 配置 (agent-config/opencode.json)

  • 新增 yolo Agent 定義,權限為 "*": "allow"(完全不受限)
  • 新增 "default_agent": "build" 確保預設使用受限模式
  • 既有 build Agent 權限規則完全未修改

2. ACP 層 (src/acp/)

  • agent-connector.ts:新增 setSessionMode() 方法,使用穩定的 ACP SDK connection.setSessionMode()
  • agent-factory.ts:新增 getSessionModeOverride() 函數,僅在 opencode + yolo 時回傳 "yolo"
  • agent-factory.ts:移除無效的 OPENCODE_YOLO 環境變數設定,改為說明性註解
  • sandbox-manager.ts:從 OpenCode 允許環境變數列表移除 OPENCODE_YOLO

3. SessionOrchestrator 整合 (src/core/session-orchestrator.ts)

  • 在全部 5 種 Session 類型的 setSessionModel() 之後插入 setSessionMode() 調用:
    • processMessageInternal()(一般訊息 + 頻道潛伏)
    • processSpontaneousPost()(自發性發文)
    • processSelfResearch()(自我研究)
    • processMemoryMaintenance()(記憶維護)
    • processReminder()(提醒)

4. 文件更新

  • AGENTS.md:更新 Session Flow 範例、新增 OpenCode YOLO Mode 說明
  • docs/DESIGN.md:更新 opencode.json 描述
  • docs/AGENT_PERMISSIONS.md:更新 OPENCODE_YOLO 相關說明
  • docs/features/28-*.feature:新增 3 個 OpenCode setSessionMode 場景
  • docs/features/29-*.feature:移除 OPENCODE_YOLO 環境變數相關場景

測試結果

  • deno fmt --check src/ tests/ 通過
  • deno lint src/ tests/ 通過
  • deno check src/main.ts 通過
  • ✅ 全部 1139 個測試通過(含新增測試)

新增測試

  • AgentConnector.setSessionMode 成功呼叫與未連線拋錯
  • getSessionModeOverride 四種組合(opencode±yolo, copilot+yolo, gemini+yolo)
  • SessionOrchestrator opencode+yolo 呼叫 setSessionMode、opencode 非 yolo 不呼叫、copilot+yolo 不呼叫

設計決策

決策 理由
移除 OPENCODE_YOLO 環境變數 上游 PR anomalyco/opencode#11833 從未生效,保留無意義
使用 setSessionMode("yolo") 而非 CLI flag OpenCode 不支援 --yolo CLI flag,需透過 ACP 協定切換 Agent
getSessionModeOverride() 放在 agent-factory.ts Agent 特定邏輯歸 Factory,Connector 為通用協定層
yolo Agent 的 mode: "primary" 確保出現在 ACP availableModes 列表中

Resolves #264, #265, #266, #267, #268

jim60105 and others added 2 commits March 9, 2026 20:15
…ching

Add a yolo agent definition to agent-config/opencode.json with permissive
permissions, implement AgentConnector.setSessionMode() and
getSessionModeOverride() helper, wire setSessionMode() into all 5 session
types in SessionOrchestrator, and remove the unused OPENCODE_YOLO env var.

- Add yolo agent with "*": "allow" permissions to opencode.json
- Add default_agent: "build" to ensure restricted mode by default
- Implement AgentConnector.setSessionMode() using stable ACP SDK method
- Add getSessionModeOverride() in agent-factory.ts for opencode+yolo
- Call setSessionMode() after setSessionModel() in all session flows
- Remove OPENCODE_YOLO env var from agent-factory and sandbox-manager
- Update AGENTS.md, DESIGN.md, AGENT_PERMISSIONS.md, BDD feature specs
- Add comprehensive tests for all changes (1139 tests pass)

Resolves #264, #265, #266, #267, #268

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Jim Chen <Jim@ChenJ.im>
@codecov
Copy link
Copy Markdown

codecov bot commented Mar 9, 2026

Codecov Report

❌ Patch coverage is 78.94737% with 8 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/core/session-orchestrator.ts 61.90% 4 Missing and 4 partials ⚠️

📢 Thoughts on this report? Let us know!

@jim60105 jim60105 merged commit b50b996 into master Mar 9, 2026
5 checks passed
@jim60105 jim60105 deleted the issue-264-opencode-yolo-mode-switching branch March 9, 2026 13:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment