opencode-orchestrator 0.8.12 β†’ 0.8.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +277 -67
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -28,70 +28,214 @@ Multi-agent system that autonomously executes complex tasks. Commander delegates
28
28
 
29
29
  ---
30
30
 
31
- ## πŸ›οΈ Master Session Architecture
31
+ ## πŸ›οΈ Architecture Overview
32
+
33
+ ### πŸš€ User Flow: Real Scenario
34
+
35
+ > **Example:** `/task "Build a REST API with user authentication"`
36
+
37
+ ```
38
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
39
+ β”‚ πŸ‘€ USER: /task "Build a REST API with user authentication" β”‚
40
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
41
+ β”‚
42
+ β–Ό
43
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
44
+ β”‚ 🎯 COMMANDER (Master Session) β”‚
45
+ β”‚ β”‚
46
+ β”‚ "I'll break this into parallel tasks and delegate to specialized agents" β”‚
47
+ β”‚ β”‚
48
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
49
+ β”‚ β”‚ πŸ“‹ Creates TODO.md: β”‚ β”‚
50
+ β”‚ β”‚ - [ ] Research: Express.js + JWT best practices β”‚ β”‚
51
+ β”‚ β”‚ - [ ] Setup: Project structure + dependencies β”‚ β”‚
52
+ β”‚ β”‚ - [ ] Implement: User model + auth routes β”‚ β”‚
53
+ β”‚ β”‚ - [ ] Test: API endpoints verification β”‚ β”‚
54
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
55
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
56
+ β”‚
57
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
58
+ β”‚ β”‚ β”‚
59
+ β–Ό β–Ό β–Ό
60
+
61
+ ╔═══════════════════╗ ╔═══════════════════╗ ╔═══════════════════╗
62
+ β•‘ πŸ” PLANNER β•‘ β•‘ πŸ”¨ WORKER #1 β•‘ β•‘ πŸ”¨ WORKER #2 β•‘
63
+ β•‘ Session: ses_001 β•‘ β•‘ Session: ses_002 β•‘ β•‘ Session: ses_003 β•‘
64
+ ╠═══════════════════╣ ╠═══════════════════╣ ╠═══════════════════╣
65
+ β•‘ Research Express β•‘ β•‘ Create src/ β•‘ β•‘ Write auth.ts β•‘
66
+ β•‘ + JWT docs β•‘ β•‘ Setup package.jsonβ•‘ β•‘ + user.model.ts β•‘
67
+ β•‘ β•‘ β•‘ β•‘ β•‘ β•‘
68
+ β•‘ πŸ“₯ websearch() β•‘ β•‘ πŸ“₯ write files β•‘ β•‘ πŸ“₯ write files β•‘
69
+ β•‘ οΏ½ cache_docs() β•‘ β•‘ οΏ½ run_background β•‘ β•‘ β•‘
70
+ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• β•‘ β†’ npm install β•‘ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
71
+ β”‚ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• β”‚
72
+ β”‚ β”‚ β”‚
73
+ β”‚ ⚑ ALL RUN IN PARALLEL (async: true) β”‚
74
+ β”‚ ⏱️ Commander monitors, doesn't wait β”‚
75
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
76
+ β–Ό
77
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
78
+ β”‚ πŸ”„ BACKGROUND PROCESSES β”‚
79
+ β”‚ β”‚
80
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
81
+ β”‚ β”‚ npm install β”‚ β”‚ npm run build β”‚ β”‚ npm test β”‚ β”‚
82
+ β”‚ β”‚ (bg_cmd_001) β”‚ β”‚ (bg_cmd_002) β”‚ β”‚ (bg_cmd_003) β”‚ β”‚
83
+ β”‚ β”‚ ⏳ running... β”‚ β”‚ ⏳ running... β”‚ β”‚ ⏳ pending... β”‚ β”‚
84
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
85
+ β”‚ β”‚
86
+ β”‚ β€’ Check with: check_background / list_background β”‚
87
+ β”‚ β€’ Non-blocking: Commander continues other work β”‚
88
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
89
+ β”‚
90
+ β–Ό
91
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
92
+ β”‚ πŸ“Š ASYNC RESULT COLLECTION β”‚
93
+ β”‚ β”‚
94
+ β”‚ get_task_result("ses_001") ──▢ βœ… Planner done: "Found JWT patterns..." β”‚
95
+ β”‚ get_task_result("ses_002") ──▢ βœ… Worker #1 done: "Project setup complete" β”‚
96
+ β”‚ get_task_result("ses_003") ──▢ ⏳ Still running... β”‚
97
+ β”‚ β”‚
98
+ β”‚ Commander: "Worker #2 still working, I'll delegate review task meanwhile" β”‚
99
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
100
+ β”‚
101
+ β–Ό
102
+ ╔═══════════════════╗
103
+ β•‘ βœ… REVIEWER β•‘
104
+ β•‘ Session: ses_004 β•‘
105
+ ╠═══════════════════╣
106
+ β•‘ Verify endpoints β•‘
107
+ β•‘ Update TODO.md: β•‘
108
+ β•‘ - [x] Research βœ“ β•‘
109
+ β•‘ - [x] Setup βœ“ β•‘
110
+ β•‘ - [x] Implement βœ“β•‘
111
+ β•‘ - [x] Test βœ“ β•‘
112
+ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
113
+ β”‚
114
+ β–Ό
115
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
116
+ β”‚ πŸŽ–οΈ MISSION COMPLETE β”‚
117
+ β”‚ β”‚
118
+ β”‚ Commander: "All TODOs checked. Mission complete." β”‚
119
+ β”‚ β”‚
120
+ β”‚ Output: <mission_seal>SEALED</mission_seal> β”‚
121
+ β”‚ β”‚
122
+ β”‚ βœ… Session cleanup β†’ Resources freed β†’ Ready for next mission β”‚
123
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
124
+ ```
125
+
126
+ **Key Concepts Visualized:**
127
+
128
+ | Concept | How It Works |
129
+ |---------|--------------|
130
+ | **Session** | Each agent runs in isolated session (ses_001, ses_002...) |
131
+ | **Parallel Agents** | Multiple Workers execute simultaneously, not sequentially |
132
+ | **Background Commands** | Long-running commands (npm install) don't block agents |
133
+ | **Async Collection** | Commander polls results, continues work while waiting |
134
+ | **Auto-Continue** | If TODOs remain, loop continues until all `[x]` checked |
135
+
136
+ ### πŸ“Š Project Architecture
32
137
 
33
138
  ```
34
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
35
- β”‚ πŸ‘€ USER REQUEST β”‚
36
- β”‚ "/task Build a REST API" β”‚
37
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
38
- β”‚
39
- β–Ό
40
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
41
- β”‚ 🎯 MASTER SESSION (Commander Agent) β”‚
42
- β”‚ β”‚
43
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
44
- β”‚ β”‚ 1️⃣ THINK β†’ Analyze request, assess complexity (L1/L2/L3) β”‚ β”‚
45
- β”‚ β”‚ 2️⃣ PLAN β†’ Create .opencode/todo.md via Planner β”‚ β”‚
46
- β”‚ β”‚ 3️⃣ DELEGATE β†’ Spawn Worker Sessions via delegate_task β”‚ β”‚
47
- β”‚ β”‚ 4️⃣ MONITOR β†’ Watch .opencode/ for progress, handle completions β”‚ β”‚
48
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
49
- β”‚ β”‚
50
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
51
- β”‚ β”‚ Session State β”‚ β”‚ 4 CONSOLIDATED AGENTS β”‚ β”‚
52
- β”‚ β”‚ Map<id,state> β”‚ β”‚ 🎯 Commander πŸ“‹ Planner β”‚ β”‚
53
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ πŸ”¨ Worker βœ… Reviewer β”‚ β”‚
54
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
55
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
56
- β”‚ β”‚ Plugin Hooks β”‚ β”‚
57
- β”‚ β”‚ event β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
58
- β”‚ β”‚ chat.message β”‚ β”‚ πŸ”„ SessionRecovery (auto error handling) β”‚ β”‚
59
- β”‚ β”‚ tool.execute β”‚ β”‚ πŸ“‹ TodoContinuation (auto-resume on idle) β”‚ β”‚
60
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ πŸ“£ TaskToastManager (consolidated notifications)β”‚ β”‚
61
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
62
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
63
- β”‚
64
- delegate_task (async)
65
- β”‚
66
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
67
- β–Ό β–Ό β–Ό
139
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
140
+ β”‚ OpenCode Orchestrator Plugin β”‚
141
+ β”‚ src/index.ts β”‚
142
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
143
+ β”‚
144
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
145
+ β–Ό β–Ό β–Ό
146
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
147
+ β”‚ Plugin Hooks β”‚ β”‚ Core Systems β”‚ β”‚ Tools β”‚
148
+ β”‚ plugin-handlers/ β”‚ β”‚ src/core/ β”‚ β”‚ src/tools/ β”‚
149
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
150
+ β”‚ β€’ chat.message β”‚ β”‚ β€’ agents/ β”‚ β”‚ β€’ parallel/ β”‚
151
+ β”‚ β€’ event β”‚ β”‚ ParallelManager β”‚ β”‚ delegate_task β”‚
152
+ β”‚ β€’ tool.execute β”‚ β”‚ TaskStore β”‚ β”‚ get_task_result β”‚
153
+ β”‚ β€’ assistant.done β”‚ β”‚ Concurrency β”‚ β”‚ β€’ web/ β”‚
154
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β€’ loop/ β”‚ β”‚ webfetch, websearch β”‚
155
+ β”‚ MissionSeal β”‚ β”‚ β€’ background-cmd/ β”‚
156
+ β”‚ TodoContinuation β”‚ β”‚ run_background β”‚
157
+ β”‚ β€’ recovery/ β”‚ β”‚ β€’ search β”‚
158
+ β”‚ SessionRecovery β”‚ β”‚ grep, glob, mgrep β”‚
159
+ β”‚ β€’ notification/ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
160
+ β”‚ Toast, Manager β”‚
161
+ β”‚ β€’ session/ β”‚
162
+ β”‚ SharedContext β”‚
163
+ β”‚ β€’ cache/ β”‚
164
+ β”‚ DocumentCache β”‚
165
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
166
+ β”‚
167
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
168
+ β–Ό β–Ό β–Ό
68
169
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
69
- β”‚ ⚑ Worker Session 1 β”‚ β”‚ ⚑ Worker Session 2 β”‚ β”‚ ⚑ Worker Session N β”‚
70
- β”‚ Agent: Planner β”‚ β”‚ Agent: Worker β”‚ β”‚ Agent: Reviewer β”‚
71
- β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
72
- β”‚ β€’ Independent exec β”‚ β”‚ β€’ Independent exec β”‚ β”‚ β€’ Independent exec β”‚
73
- β”‚ β€’ Read/Write β”‚ β”‚ β€’ Read/Write β”‚ β”‚ β€’ Read/Write β”‚
74
- β”‚ .opencode/ β”‚ β”‚ .opencode/ β”‚ β”‚ .opencode/ β”‚
75
- β”‚ β€’ Notify parent β”‚ β”‚ β€’ Notify parent β”‚ β”‚ β€’ Notify parent β”‚
76
- β”‚ on complete β”‚ β”‚ on complete β”‚ β”‚ on complete β”‚
170
+ β”‚ 🎯 Commander β”‚ β”‚ πŸ“‹ Planner β”‚ β”‚ πŸ”¨ Worker β”‚
171
+ β”‚ Orchestrator β”‚ β”‚ Research+Plan β”‚ β”‚ Implementation β”‚
172
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
173
+ β”‚ β€’ Mission control β”‚ β”‚ β€’ Task decompose β”‚ β”‚ β€’ Code writing β”‚
174
+ β”‚ β€’ Parallel delegate β”‚ β”‚ β€’ Doc research β”‚ β”‚ β€’ File operations β”‚
175
+ β”‚ β€’ TODO monitoring β”‚ β”‚ β€’ TODO creation β”‚ β”‚ β€’ Command execution β”‚
77
176
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
78
- β”‚ β”‚ β”‚
79
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
80
- β–Ό
81
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
82
- β”‚ πŸ“ SHARED CONTEXT (.opencode/) β”‚
83
- β”‚ β”‚
84
- β”‚ .opencode/todo.md ← Master TODO (Planner creates, Reviewer updates) β”‚
85
- β”‚ .opencode/context.md ← Adaptive context (shrinks as progress increases) β”‚
86
- β”‚ .opencode/docs/ ← Cached docs (Planner/Worker save, auto-expire) β”‚
87
- β”‚ .opencode/archive/ ← Old context for reference β”‚
88
- β”‚ β”‚
89
- β”‚ ⚑ All sessions read/write this shared workspace β”‚
90
- β”‚ πŸ“Š Progress is tracked via todo.md checkboxes β”‚
91
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
177
+ β”‚ β”‚ β”‚
178
+ β”‚ β”‚ β”‚
179
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
180
+ β”‚ β–Ό β”‚ β”‚
181
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
182
+ β”‚ β”‚ βœ… Reviewer β”‚ β”‚ β”‚
183
+ β”‚ β”‚ Quality+Context β”‚ β”‚ β”‚
184
+ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚
185
+ β”‚ β”‚ β€’ Verification β”‚ β”‚ β”‚
186
+ β”‚ β”‚ β€’ TODO updates β”‚ β”‚ β”‚
187
+ β”‚ β”‚ β€’ Context manage β”‚ β”‚ β”‚
188
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
189
+ β”‚ β”‚ β”‚ β”‚
190
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
191
+ β–Ό
192
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
193
+ β”‚ πŸ“ Shared Workspace (.opencode/) β”‚
194
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
195
+ β”‚ todo.md β”‚ Hierarchical task list (Epic β†’ Task β†’ Subtask) β”‚
196
+ β”‚ context.md β”‚ Adaptive context (shrinks with progress) β”‚
197
+ β”‚ loop-state.json β”‚ Mission loop iteration state β”‚
198
+ β”‚ docs/ β”‚ Cached documentation (auto-expire) β”‚
199
+ β”‚ archive/ β”‚ Old context snapshots β”‚
200
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
201
+ ```
202
+
203
+
204
+ ### πŸ“‚ Directory Structure
205
+
206
+ ```
207
+ src/
208
+ β”œβ”€β”€ index.ts # Plugin main entry point
209
+ β”œβ”€β”€ agents/
210
+ β”‚ β”œβ”€β”€ commander.ts # Commander agent definition
211
+ β”‚ β”œβ”€β”€ definitions.ts # Agent exports
212
+ β”‚ β”œβ”€β”€ prompts/ # Prompt fragments (commander/, planner/, worker/, reviewer/)
213
+ β”‚ └── subagents/ # Subagent definitions (planner.ts, worker.ts, reviewer.ts)
214
+ β”œβ”€β”€ core/
215
+ β”‚ β”œβ”€β”€ agents/ # ParallelAgentManager, TaskStore, ConcurrencyController
216
+ β”‚ β”œβ”€β”€ cache/ # DocumentCache
217
+ β”‚ β”œβ”€β”€ loop/ # MissionSeal, TodoContinuation, TodoEnforcer
218
+ β”‚ β”œβ”€β”€ notification/ # Toast, TaskToastManager
219
+ β”‚ β”œβ”€β”€ recovery/ # SessionRecovery, ErrorPatterns
220
+ β”‚ β”œβ”€β”€ session/ # SharedContext
221
+ β”‚ └── task/ # TaskScheduler, TaskParser
222
+ β”œβ”€β”€ plugin-handlers/
223
+ β”‚ β”œβ”€β”€ chat-message-handler.ts # /task detection, mission start
224
+ β”‚ β”œβ”€β”€ event-handler.ts # session.idle, session.error handling
225
+ β”‚ β”œβ”€β”€ tool-execute-handler.ts # Tool completion tracking
226
+ β”‚ └── assistant-done-handler.ts # Response completion
227
+ β”œβ”€β”€ shared/
228
+ β”‚ β”œβ”€β”€ constants/ # PATHS, TOOL_NAMES, MISSION_SEAL, etc.
229
+ β”‚ β”œβ”€β”€ agent/ # Agent definitions, names
230
+ β”‚ └── errors/ # Error types
231
+ β”œβ”€β”€ tools/
232
+ β”‚ β”œβ”€β”€ parallel/ # delegate_task, get_task_result, list_tasks, cancel_task
233
+ β”‚ β”œβ”€β”€ web/ # webfetch, websearch, codesearch, cache_docs
234
+ β”‚ β”œβ”€β”€ background-cmd/ # run_background, check_background, list_background
235
+ β”‚ └── search.ts # grep_search, glob_search, mgrep
236
+ └── utils/ # Utility functions
92
237
  ```
93
238
 
94
- ---
95
239
 
96
240
  ## Installation
97
241
 
@@ -127,9 +271,17 @@ Use `/task` when you need the AI to **complete a mission autonomously**:
127
271
  **What Commander Mode Does:**
128
272
  - ♾️ **Runs until sealed** β€” Loops until agent outputs `<mission_seal>SEALED</mission_seal>`
129
273
  - 🧠 **Anti-Hallucination** β€” Researches docs before coding
130
- - ⚑ **Parallel Execution** β€” Up to 50 concurrent agents
131
- - πŸ”„ **Auto-Recovery** β€” Handles errors automatically
132
- - πŸ“Š **Triage System** β€” Adapts strategy to complexity (L1/L2/L3)
274
+ - ⚑ **Parallel Execution** β€” Up to 50 concurrent Worker Sessions
275
+ - πŸ”„ **Auto-Recovery** β€” Handles errors automatically with pattern matching
276
+ - πŸ“Š **Progress Tracking** β€” Monitors TODO completion and shows progress
277
+
278
+ **Concurrency Limits (per agent type):**
279
+ | Agent | Max Concurrent | Purpose |
280
+ |--------|---------------|-----------|
281
+ | Commander | 1 | Single orchestrator per mission |
282
+ | Planner | 3 | Research and TODO planning |
283
+ | Worker | 10 | Implementation tasks |
284
+ | Reviewer | 5 | Verification and testing |
133
285
 
134
286
  **πŸŽ–οΈ Mission Seal Loop:**
135
287
  ```
@@ -172,7 +324,65 @@ What's the difference between useState and useReducer?
172
324
 
173
325
  ---
174
326
 
175
- ## The 7 Agents
327
+ ## πŸ”„ Mission Loop Mechanism
328
+
329
+ The Commander uses an event-driven mission loop to autonomously complete missions:
330
+
331
+ ```
332
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
333
+ β”‚ MISSION LOOP LIFECYCLE β”‚
334
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
335
+
336
+ 1️⃣ User sends "/task 'mission'"
337
+ ↓
338
+ 2️⃣ chat.message handler detects /task
339
+ ↓
340
+ 3️⃣ Create session + startMissionLoop()
341
+ ↓
342
+ Write .opencode/loop-state.json:
343
+ {
344
+ "active": true,
345
+ "sessionID": "ses_abc",
346
+ "iteration": 1,
347
+ "maxIterations": 20
348
+ }
349
+ ↓
350
+ 4️⃣ Commander receives prompt β†’ delegates work
351
+ ↓
352
+ 5️⃣ Worker sessions execute β†’ results collected
353
+ ↓
354
+ 6️⃣ session.idle event triggers
355
+ ↓
356
+ Check for <mission_seal>SEALED</mission_seal>
357
+ β”œβ”€ Seal found? β†’ Clear loop state β†’ Complete βœ…
358
+ └─ Not found? β†’ Increment iteration β†’ Continue loop
359
+ ↓
360
+ Show countdown toast (3 seconds)
361
+ ↓
362
+ Inject continuation prompt
363
+ ↓
364
+ [Loop back to step 4]
365
+ ```
366
+
367
+ **Key Loop Components:**
368
+
369
+ | Component | File | Purpose |
370
+ |-----------|-------|---------|
371
+ | Loop State | `src/core/loop/mission-seal.ts` | State management (.opencode/loop-state.json) |
372
+ | Seal Detection | `src/core/loop/mission-seal-handler.ts` | Detect `<mission_seal>` in responses |
373
+ | Continuation | `src/core/loop/mission-seal-handler.ts` | Inject prompts to continue work |
374
+ | Countdown | `src/core/loop/mission-seal-handler.ts` | 3-second countdown toast |
375
+ | Idle Handler | `src/plugin-handlers/assistant-done-handler.ts` | Monitor session.idle events |
376
+
377
+ **Why Event-Driven?**
378
+ - No fixed iteration limits - loop continues until sealed
379
+ - Resilient to network delays
380
+ - Can be interrupted by user at any time
381
+ - Efficient polling (500ms interval with backoff)
382
+
383
+ ---
384
+
385
+ ## The 4 Agents
176
386
 
177
387
  | Agent | Role | Responsibility |
178
388
  | :--------------- | :----------- | :--------------------------------- |
@@ -210,7 +420,7 @@ What's the difference between useState and useReducer?
210
420
  | Notifications | 100/parent | FIFO eviction |
211
421
  | Event History | 100 | Ring buffer |
212
422
  | Session TTL | 60 min | Auto cleanup |
213
- | Poll Interval | 1 second | Fast completion detection |
423
+ | Poll Interval | 500ms | Fast completion detection |
214
424
  | Max Poll Count | 600 | Hard limit prevents infinite loops |
215
425
  | Sync Timeout | 5 min | Safe delegate_task timeout |
216
426
  | Recovery Attempts | 3 | Auto session error recovery |
@@ -238,9 +448,9 @@ Automatic recovery from common errors:
238
448
 
239
449
  ### Todo Continuation
240
450
  - Monitors `session.idle` events
241
- - 2-second countdown before auto-continuation
451
+ - 3-second countdown toast before auto-continuation
242
452
  - Cancels on user interaction
243
- - Skips if background tasks running
453
+ - Skips if background tasks running or session is recovering
244
454
 
245
455
  ### noReply Optimization
246
456
  - Individual task completion: `noReply: true` (saves tokens)
@@ -274,9 +484,9 @@ tail -f "$(node -e 'console.log(require("os").tmpdir())')/opencode-orchestrator.
274
484
  ## Documentation
275
485
 
276
486
  - **[System Architecture](docs/SYSTEM_ARCHITECTURE.md)** β€” Detailed technical docs
277
- - **[OpenCode SDK Reference](docs/OPENCODE_SDK_REFERENCE.md)** β€” API usage reference
487
+ - **[Architecture and Flow](docs/ARCHITECTURE_AND_FLOW.md)** β€” Complete architecture guide with scenarios
488
+ - **[Improvement Suggestions](docs/IMPROVEMENT_SUGGESTIONS.md)** β€” Project improvement recommendations
278
489
  - [Release Notes](docs/releases/) β€” Version history
279
- - [Troubleshooting](docs/PLUGIN_TROUBLESHOOTING.md)
280
490
 
281
491
  ---
282
492
 
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "opencode-orchestrator",
3
3
  "displayName": "OpenCode Orchestrator",
4
4
  "description": "Distributed Cognitive Architecture for OpenCode. Turns simple prompts into specialized multi-agent workflows (Planner, Coder, Reviewer).",
5
- "version": "0.8.12",
5
+ "version": "0.8.14",
6
6
  "author": "agnusdei1207",
7
7
  "license": "MIT",
8
8
  "repository": {