opencode-swarm-plugin 0.43.0 → 0.44.1

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 (208) hide show
  1. package/bin/cass.characterization.test.ts +422 -0
  2. package/bin/swarm.serve.test.ts +6 -4
  3. package/bin/swarm.test.ts +68 -0
  4. package/bin/swarm.ts +81 -8
  5. package/dist/compaction-prompt-scoring.js +139 -0
  6. package/dist/contributor-tools.d.ts +42 -0
  7. package/dist/contributor-tools.d.ts.map +1 -0
  8. package/dist/eval-capture.js +12811 -0
  9. package/dist/hive.d.ts.map +1 -1
  10. package/dist/index.d.ts +12 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +7728 -62590
  13. package/dist/plugin.js +23833 -78695
  14. package/dist/sessions/agent-discovery.d.ts +59 -0
  15. package/dist/sessions/agent-discovery.d.ts.map +1 -0
  16. package/dist/sessions/index.d.ts +10 -0
  17. package/dist/sessions/index.d.ts.map +1 -0
  18. package/dist/swarm-orchestrate.d.ts.map +1 -1
  19. package/dist/swarm-prompts.d.ts.map +1 -1
  20. package/dist/swarm-review.d.ts.map +1 -1
  21. package/package.json +17 -5
  22. package/.changeset/swarm-insights-data-layer.md +0 -63
  23. package/.hive/analysis/eval-failure-analysis-2025-12-25.md +0 -331
  24. package/.hive/analysis/session-data-quality-audit.md +0 -320
  25. package/.hive/eval-results.json +0 -483
  26. package/.hive/issues.jsonl +0 -138
  27. package/.hive/memories.jsonl +0 -729
  28. package/.opencode/eval-history.jsonl +0 -327
  29. package/.turbo/turbo-build.log +0 -9
  30. package/CHANGELOG.md +0 -2255
  31. package/SCORER-ANALYSIS.md +0 -598
  32. package/docs/analysis/subagent-coordination-patterns.md +0 -902
  33. package/docs/analysis-socratic-planner-pattern.md +0 -504
  34. package/docs/planning/ADR-001-monorepo-structure.md +0 -171
  35. package/docs/planning/ADR-002-package-extraction.md +0 -393
  36. package/docs/planning/ADR-003-performance-improvements.md +0 -451
  37. package/docs/planning/ADR-004-message-queue-features.md +0 -187
  38. package/docs/planning/ADR-005-devtools-observability.md +0 -202
  39. package/docs/planning/ADR-007-swarm-enhancements-worktree-review.md +0 -168
  40. package/docs/planning/ADR-008-worker-handoff-protocol.md +0 -293
  41. package/docs/planning/ADR-009-oh-my-opencode-patterns.md +0 -353
  42. package/docs/planning/ROADMAP.md +0 -368
  43. package/docs/semantic-memory-cli-syntax.md +0 -123
  44. package/docs/swarm-mail-architecture.md +0 -1147
  45. package/docs/testing/context-recovery-test.md +0 -470
  46. package/evals/ARCHITECTURE.md +0 -1189
  47. package/evals/README.md +0 -768
  48. package/evals/compaction-prompt.eval.ts +0 -149
  49. package/evals/compaction-resumption.eval.ts +0 -289
  50. package/evals/coordinator-behavior.eval.ts +0 -307
  51. package/evals/coordinator-session.eval.ts +0 -154
  52. package/evals/evalite.config.ts.bak +0 -15
  53. package/evals/example.eval.ts +0 -31
  54. package/evals/fixtures/compaction-cases.ts +0 -350
  55. package/evals/fixtures/compaction-prompt-cases.ts +0 -311
  56. package/evals/fixtures/coordinator-sessions.ts +0 -328
  57. package/evals/fixtures/decomposition-cases.ts +0 -105
  58. package/evals/lib/compaction-loader.test.ts +0 -248
  59. package/evals/lib/compaction-loader.ts +0 -320
  60. package/evals/lib/data-loader.evalite-test.ts +0 -289
  61. package/evals/lib/data-loader.test.ts +0 -345
  62. package/evals/lib/data-loader.ts +0 -281
  63. package/evals/lib/llm.ts +0 -115
  64. package/evals/scorers/compaction-prompt-scorers.ts +0 -145
  65. package/evals/scorers/compaction-scorers.ts +0 -305
  66. package/evals/scorers/coordinator-discipline.evalite-test.ts +0 -539
  67. package/evals/scorers/coordinator-discipline.ts +0 -325
  68. package/evals/scorers/index.test.ts +0 -146
  69. package/evals/scorers/index.ts +0 -328
  70. package/evals/scorers/outcome-scorers.evalite-test.ts +0 -27
  71. package/evals/scorers/outcome-scorers.ts +0 -349
  72. package/evals/swarm-decomposition.eval.ts +0 -121
  73. package/examples/commands/swarm.md +0 -745
  74. package/examples/plugin-wrapper-template.ts +0 -2426
  75. package/examples/skills/hive-workflow/SKILL.md +0 -212
  76. package/examples/skills/skill-creator/SKILL.md +0 -223
  77. package/examples/skills/swarm-coordination/SKILL.md +0 -292
  78. package/global-skills/cli-builder/SKILL.md +0 -344
  79. package/global-skills/cli-builder/references/advanced-patterns.md +0 -244
  80. package/global-skills/learning-systems/SKILL.md +0 -644
  81. package/global-skills/skill-creator/LICENSE.txt +0 -202
  82. package/global-skills/skill-creator/SKILL.md +0 -352
  83. package/global-skills/skill-creator/references/output-patterns.md +0 -82
  84. package/global-skills/skill-creator/references/workflows.md +0 -28
  85. package/global-skills/swarm-coordination/SKILL.md +0 -995
  86. package/global-skills/swarm-coordination/references/coordinator-patterns.md +0 -235
  87. package/global-skills/swarm-coordination/references/strategies.md +0 -138
  88. package/global-skills/system-design/SKILL.md +0 -213
  89. package/global-skills/testing-patterns/SKILL.md +0 -430
  90. package/global-skills/testing-patterns/references/dependency-breaking-catalog.md +0 -586
  91. package/opencode-swarm-plugin-0.30.7.tgz +0 -0
  92. package/opencode-swarm-plugin-0.31.0.tgz +0 -0
  93. package/scripts/cleanup-test-memories.ts +0 -346
  94. package/scripts/init-skill.ts +0 -222
  95. package/scripts/migrate-unknown-sessions.ts +0 -349
  96. package/scripts/validate-skill.ts +0 -204
  97. package/src/agent-mail.ts +0 -1724
  98. package/src/anti-patterns.test.ts +0 -1167
  99. package/src/anti-patterns.ts +0 -448
  100. package/src/compaction-capture.integration.test.ts +0 -257
  101. package/src/compaction-hook.test.ts +0 -838
  102. package/src/compaction-hook.ts +0 -1204
  103. package/src/compaction-observability.integration.test.ts +0 -139
  104. package/src/compaction-observability.test.ts +0 -187
  105. package/src/compaction-observability.ts +0 -324
  106. package/src/compaction-prompt-scorers.test.ts +0 -475
  107. package/src/compaction-prompt-scoring.ts +0 -300
  108. package/src/dashboard.test.ts +0 -611
  109. package/src/dashboard.ts +0 -462
  110. package/src/error-enrichment.test.ts +0 -403
  111. package/src/error-enrichment.ts +0 -219
  112. package/src/eval-capture.test.ts +0 -1015
  113. package/src/eval-capture.ts +0 -929
  114. package/src/eval-gates.test.ts +0 -306
  115. package/src/eval-gates.ts +0 -218
  116. package/src/eval-history.test.ts +0 -508
  117. package/src/eval-history.ts +0 -214
  118. package/src/eval-learning.test.ts +0 -378
  119. package/src/eval-learning.ts +0 -360
  120. package/src/eval-runner.test.ts +0 -223
  121. package/src/eval-runner.ts +0 -402
  122. package/src/export-tools.test.ts +0 -476
  123. package/src/export-tools.ts +0 -257
  124. package/src/hive.integration.test.ts +0 -2241
  125. package/src/hive.ts +0 -1628
  126. package/src/index.ts +0 -935
  127. package/src/learning.integration.test.ts +0 -1815
  128. package/src/learning.ts +0 -1079
  129. package/src/logger.test.ts +0 -189
  130. package/src/logger.ts +0 -135
  131. package/src/mandate-promotion.test.ts +0 -473
  132. package/src/mandate-promotion.ts +0 -239
  133. package/src/mandate-storage.integration.test.ts +0 -601
  134. package/src/mandate-storage.test.ts +0 -578
  135. package/src/mandate-storage.ts +0 -794
  136. package/src/mandates.ts +0 -540
  137. package/src/memory-tools.test.ts +0 -195
  138. package/src/memory-tools.ts +0 -344
  139. package/src/memory.integration.test.ts +0 -334
  140. package/src/memory.test.ts +0 -158
  141. package/src/memory.ts +0 -527
  142. package/src/model-selection.test.ts +0 -188
  143. package/src/model-selection.ts +0 -68
  144. package/src/observability-tools.test.ts +0 -359
  145. package/src/observability-tools.ts +0 -871
  146. package/src/output-guardrails.test.ts +0 -438
  147. package/src/output-guardrails.ts +0 -381
  148. package/src/pattern-maturity.test.ts +0 -1160
  149. package/src/pattern-maturity.ts +0 -525
  150. package/src/planning-guardrails.test.ts +0 -491
  151. package/src/planning-guardrails.ts +0 -438
  152. package/src/plugin.ts +0 -23
  153. package/src/post-compaction-tracker.test.ts +0 -251
  154. package/src/post-compaction-tracker.ts +0 -237
  155. package/src/query-tools.test.ts +0 -636
  156. package/src/query-tools.ts +0 -324
  157. package/src/rate-limiter.integration.test.ts +0 -466
  158. package/src/rate-limiter.ts +0 -774
  159. package/src/replay-tools.test.ts +0 -496
  160. package/src/replay-tools.ts +0 -240
  161. package/src/repo-crawl.integration.test.ts +0 -441
  162. package/src/repo-crawl.ts +0 -610
  163. package/src/schemas/cell-events.test.ts +0 -347
  164. package/src/schemas/cell-events.ts +0 -807
  165. package/src/schemas/cell.ts +0 -257
  166. package/src/schemas/evaluation.ts +0 -166
  167. package/src/schemas/index.test.ts +0 -199
  168. package/src/schemas/index.ts +0 -286
  169. package/src/schemas/mandate.ts +0 -232
  170. package/src/schemas/swarm-context.ts +0 -115
  171. package/src/schemas/task.ts +0 -161
  172. package/src/schemas/worker-handoff.test.ts +0 -302
  173. package/src/schemas/worker-handoff.ts +0 -131
  174. package/src/skills.integration.test.ts +0 -1192
  175. package/src/skills.test.ts +0 -643
  176. package/src/skills.ts +0 -1549
  177. package/src/storage.integration.test.ts +0 -341
  178. package/src/storage.ts +0 -884
  179. package/src/structured.integration.test.ts +0 -817
  180. package/src/structured.test.ts +0 -1046
  181. package/src/structured.ts +0 -762
  182. package/src/swarm-decompose.test.ts +0 -188
  183. package/src/swarm-decompose.ts +0 -1302
  184. package/src/swarm-deferred.integration.test.ts +0 -157
  185. package/src/swarm-deferred.test.ts +0 -38
  186. package/src/swarm-insights.test.ts +0 -214
  187. package/src/swarm-insights.ts +0 -459
  188. package/src/swarm-mail.integration.test.ts +0 -970
  189. package/src/swarm-mail.ts +0 -739
  190. package/src/swarm-orchestrate.integration.test.ts +0 -282
  191. package/src/swarm-orchestrate.test.ts +0 -548
  192. package/src/swarm-orchestrate.ts +0 -3084
  193. package/src/swarm-prompts.test.ts +0 -1270
  194. package/src/swarm-prompts.ts +0 -2077
  195. package/src/swarm-research.integration.test.ts +0 -701
  196. package/src/swarm-research.test.ts +0 -698
  197. package/src/swarm-research.ts +0 -472
  198. package/src/swarm-review.integration.test.ts +0 -285
  199. package/src/swarm-review.test.ts +0 -879
  200. package/src/swarm-review.ts +0 -709
  201. package/src/swarm-strategies.ts +0 -407
  202. package/src/swarm-worktree.test.ts +0 -501
  203. package/src/swarm-worktree.ts +0 -575
  204. package/src/swarm.integration.test.ts +0 -2377
  205. package/src/swarm.ts +0 -38
  206. package/src/tool-adapter.integration.test.ts +0 -1221
  207. package/src/tool-availability.ts +0 -461
  208. package/tsconfig.json +0 -28
@@ -1,353 +0,0 @@
1
- # ADR-009: Patterns from oh-my-opencode
2
-
3
- ## Status
4
-
5
- Proposed
6
-
7
- ## Context
8
-
9
- [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) by **code-yeongyu** is the most feature-rich OpenCode plugin in the wild (2961★). After deep analysis of its architecture, we identified several patterns that would significantly strengthen our swarm coordination.
10
-
11
- ```
12
- ┌─────────────────────────────────────────────────────────────────┐
13
- │ │
14
- │ "Standing on the shoulders of giants" │
15
- │ │
16
- │ oh-my-opencode innovations we're adopting: │
17
- │ • 7-Section Delegation Protocol │
18
- │ • Compaction Context Injection │
19
- │ • Preemptive Compaction (80% threshold) │
20
- │ • Event + Polling Hybrid for completion detection │
21
- │ • Parallel Execution Minimums │
22
- │ • Context-Safe Tool Limits │
23
- │ │
24
- └─────────────────────────────────────────────────────────────────┘
25
- ```
26
-
27
- ### What oh-my-opencode Does Well
28
-
29
- 1. **Agent System** - Factory-based registry with model-specific configs, BackgroundManager for async execution, structured delegation prompts
30
- 2. **21 Lifecycle Hooks** - Compaction handling, session recovery, think-mode auto-switching, external hook protocol
31
- 3. **Background Agents** - Event + polling hybrid, todo-aware completion, fire-and-forget abort
32
- 4. **LSP/AST Tools** - Zero-config LSP integration, 11 code intelligence tools, context-safe limits
33
- 5. **Claude Code Compatibility** - Dual-path config loading, 4 independent loaders, auto-migration
34
- 6. **Plugin Architecture** - Hook mapping pattern, session-scoped state, graceful degradation
35
-
36
- ### What We Already Have
37
-
38
- - Swarm Mail for inter-agent messaging
39
- - File reservations for conflict prevention
40
- - UBS scan on completion
41
- - Hive for work item tracking
42
- - Worktree isolation (ADR-007)
43
- - Structured review (ADR-007)
44
-
45
- ### Gaps This ADR Addresses
46
-
47
- 1. **Coordinator prompts lack structure** - Workers sometimes go rogue
48
- 2. **Context compaction loses critical info** - Decomposition strategy, dependency graph forgotten
49
- 3. **No preemptive compaction** - Sessions die at 100% instead of gracefully compacting at 80%
50
- 4. **Polling-only completion detection** - Slower than event-driven
51
- 5. **No parallel execution enforcement** - Researchers call tools sequentially
52
- 6. **Tool outputs can explode context** - No hard limits on results
53
-
54
- ## Decision
55
-
56
- ### 1. 7-Section Delegation Protocol
57
-
58
- Adopt oh-my-opencode's structured delegation format for coordinator → worker handoffs:
59
-
60
- ```markdown
61
- ## TASK
62
- [Specific task description]
63
-
64
- ## EXPECTED OUTCOME
65
- [What success looks like]
66
-
67
- ## REQUIRED SKILLS
68
- [Domain knowledge needed]
69
-
70
- ## REQUIRED TOOLS
71
- [Tools the worker should use]
72
-
73
- ## MUST DO
74
- - [Non-negotiable requirements]
75
- - [Quality gates]
76
-
77
- ## MUST NOT DO
78
- - [Forbidden approaches]
79
- - [Anti-patterns to avoid]
80
-
81
- ## CONTEXT
82
- [Shared context from coordinator]
83
- [Dependency information]
84
- [What other workers are doing]
85
- ```
86
-
87
- **Implementation:** Update `swarm_subtask_prompt` to generate this format.
88
-
89
- **Why:** Reduces rogue behavior. Workers have clear boundaries and success criteria.
90
-
91
- ### 2. Compaction Context Injection
92
-
93
- Preserve critical information through context compaction by injecting a structured prompt BEFORE the summarization API call:
94
-
95
- ```markdown
96
- ## 1. User Requests (As-Is)
97
- [Exact wording of original requests - preserved verbatim]
98
-
99
- ## 2. Final Goal
100
- [End result expected from this session]
101
-
102
- ## 3. Work Completed
103
- [Files modified, features implemented, problems solved]
104
-
105
- ## 4. Remaining Tasks
106
- [Pending items, follow-ups, blocked work]
107
-
108
- ## 5. MUST NOT Do
109
- [Forbidden approaches, failed attempts, anti-patterns discovered]
110
-
111
- ## 6. Swarm State (if applicable)
112
- [Epic ID, completed subtasks, in-progress workers, dependency graph]
113
- ```
114
-
115
- **Implementation:** Add `experimental.session.compacting` hook that injects this prompt.
116
-
117
- **Why:** Currently compaction loses decomposition strategy, dependency graph, and failed approaches. Workers repeat mistakes.
118
-
119
- ### 3. Preemptive Compaction
120
-
121
- Monitor token usage and trigger compaction at 80% threshold instead of waiting for overflow:
122
-
123
- ```typescript
124
- // In chat.message or message.updated hook
125
- const usageRatio = totalTokens / contextLimit;
126
- if (usageRatio >= 0.8 && !compactionInProgress.has(sessionID)) {
127
- compactionInProgress.add(sessionID);
128
- await ctx.client.session.summarize({ ... });
129
-
130
- // Auto-resume after compaction
131
- setTimeout(() => {
132
- ctx.client.session.promptAsync({ parts: [{ text: "Continue" }] });
133
- }, 500);
134
- }
135
- ```
136
-
137
- **Configuration:**
138
- ```json
139
- {
140
- "preemptive_compaction": {
141
- "enabled": true,
142
- "threshold": 0.8,
143
- "cooldown_seconds": 300
144
- }
145
- }
146
- ```
147
-
148
- **Why:** Prevents context overflow mid-work. Coordinators and workers survive long-running epics.
149
-
150
- ### 4. Event + Polling Hybrid for Completion Detection
151
-
152
- Currently we only poll for worker completion. Add event-driven detection as primary path:
153
-
154
- ```typescript
155
- // Primary: Event-driven (fast)
156
- event: async ({ event }) => {
157
- if (event.type === "session.idle") {
158
- const todos = await client.session.todo();
159
- if (todos.length === 0) {
160
- markWorkerComplete(event.properties?.info?.id);
161
- }
162
- }
163
- }
164
-
165
- // Fallback: Polling (reliable)
166
- setInterval(() => {
167
- for (const worker of runningWorkers) {
168
- const status = await client.session.status(worker.sessionID);
169
- if (status.type === "idle") {
170
- // Same completion logic
171
- }
172
- }
173
- }, 2000);
174
- ```
175
-
176
- **Why:** Events are faster. Polling catches missed events. Hybrid = reliable + fast.
177
-
178
- ### 5. Parallel Execution Minimums
179
-
180
- Enforce minimum parallel tool calls for researcher agents:
181
-
182
- ```markdown
183
- ## PARALLEL EXECUTION REQUIREMENTS
184
-
185
- You MUST launch multiple tools simultaneously in your first action.
186
- Never call tools sequentially unless output depends on prior result.
187
-
188
- Minimum parallel calls by request type:
189
- - TYPE A (conceptual): 3+ tools (context7 + pdf-brain + websearch)
190
- - TYPE B (implementation): 4+ tools (repo-autopsy + grep + ast-grep + read)
191
- - TYPE C (comprehensive): 6+ tools (all of the above)
192
-
193
- WRONG:
194
- 1. Search for X
195
- 2. Wait for result
196
- 3. Search for Y
197
-
198
- RIGHT:
199
- [Search X | Search Y | Search Z] → single response
200
- ```
201
-
202
- **Implementation:** Add to `swarm-researcher` agent prompt. Enforce via output validation.
203
-
204
- **Why:** Sequential tool calls waste round-trips and burn context. Parallel = faster + cheaper.
205
-
206
- ### 6. Context-Safe Tool Limits
207
-
208
- Add hard limits and truncation reporting to tools that can explode context:
209
-
210
- | Tool | Limit | Truncation Message |
211
- |------|-------|-------------------|
212
- | `repo-autopsy_search` | 100 results | `Found 347 results (showing first 100):` |
213
- | `cass_search` | 50 results | `Found 89 sessions (showing first 50):` |
214
- | `find-exports` | 50 results | `Found 72 exports (showing first 50):` |
215
- | `semantic-memory_find` | 20 results | `Found 45 memories (showing first 20):` |
216
-
217
- **Implementation:**
218
- ```typescript
219
- const MAX_RESULTS = 100;
220
- const total = results.length;
221
- const truncated = total > MAX_RESULTS;
222
- const limited = truncated ? results.slice(0, MAX_RESULTS) : results;
223
-
224
- if (truncated) {
225
- output.unshift(`Found ${total} results (showing first ${MAX_RESULTS}):`);
226
- }
227
- ```
228
-
229
- **Why:** Unbounded results kill context. Truncation with count lets agent know there's more.
230
-
231
- ### 7. Todo-Aware Completion (Bonus)
232
-
233
- Before marking a worker complete, check if it left unfinished work:
234
-
235
- ```typescript
236
- async function canMarkComplete(sessionID: string): Promise<boolean> {
237
- const todos = await client.session.todo({ path: { id: sessionID } });
238
- const incomplete = todos.filter(t => t.status !== "completed");
239
-
240
- if (incomplete.length > 0) {
241
- // Inject continuation prompt
242
- await client.session.prompt({
243
- path: { id: sessionID },
244
- body: { parts: [{ text: "You have incomplete TODOs. Continue working." }] }
245
- });
246
- return false;
247
- }
248
- return true;
249
- }
250
- ```
251
-
252
- **Why:** Prevents race conditions where worker marks complete before finishing TODO list.
253
-
254
- ### 8. Think Mode for Complex Decomposition (Bonus)
255
-
256
- Auto-enable extended thinking when decomposing complex tasks:
257
-
258
- ```typescript
259
- // In chat.params hook
260
- const complexityIndicators = [
261
- "decompose", "break down", "plan", "architect",
262
- "refactor across", "migrate", "redesign"
263
- ];
264
-
265
- if (complexityIndicators.some(k => prompt.toLowerCase().includes(k))) {
266
- output.message.model = { modelID: "claude-sonnet-4-5-high" };
267
- output.message.thinking = { type: "enabled", budget_tokens: 16000 };
268
- }
269
- ```
270
-
271
- **Why:** Complex decomposition benefits from extended reasoning. Auto-switching removes friction.
272
-
273
- ## Implementation
274
-
275
- ### Phase 1: Delegation Protocol + Context Injection (Priority)
276
- 1. Update `swarm_subtask_prompt` with 7-section format
277
- 2. Add compaction context injection hook
278
- 3. Test with existing swarm workflows
279
-
280
- ### Phase 2: Preemptive Compaction + Event Hybrid
281
- 1. Add token monitoring to coordinator/worker sessions
282
- 2. Implement 80% threshold compaction with cooldown
283
- 3. Add event-driven completion detection
284
- 4. Keep polling as fallback
285
-
286
- ### Phase 3: Tool Limits + Parallel Enforcement
287
- 1. Add limits to repo-autopsy, cass, find-exports, semantic-memory
288
- 2. Update swarm-researcher prompt with parallel minimums
289
- 3. Add output validation for parallel enforcement
290
-
291
- ### Phase 4: Bonus Features
292
- 1. Todo-aware completion check
293
- 2. Think mode auto-switching for decomposition
294
-
295
- ## Consequences
296
-
297
- ### Positive
298
- - **Better worker behavior**: 7-section protocol reduces rogue actions
299
- - **Context survives compaction**: Critical info preserved through summarization
300
- - **No more context overflow**: Preemptive compaction at 80%
301
- - **Faster completion detection**: Events + polling hybrid
302
- - **Cheaper research**: Parallel execution reduces round-trips
303
- - **Predictable tool output**: Hard limits prevent context explosion
304
-
305
- ### Negative
306
- - **More complexity**: Additional hooks and state management
307
- - **Prompt bloat**: 7-section format is verbose (but worth it)
308
- - **Compaction overhead**: Preemptive compaction adds latency (but prevents crashes)
309
-
310
- ### Neutral
311
- - **Attribution**: All patterns credited to code-yeongyu/oh-my-opencode
312
- - **Not a fork**: We're adopting patterns, not copying code
313
-
314
- ## Alternatives Considered
315
-
316
- ### Copy oh-my-opencode Wholesale
317
- Could fork and adapt. Rejected because:
318
- - Different architecture (we have Swarm Mail, Hive, etc.)
319
- - Our patterns complement theirs, not replace
320
- - Selective adoption is cleaner
321
-
322
- ### Skip Compaction Handling
323
- Could rely on OpenCode's built-in compaction. Rejected because:
324
- - Default compaction loses swarm-specific context
325
- - Decomposition strategy, dependency graph critical for workers
326
-
327
- ### Always Use Extended Thinking
328
- Could enable thinking for all coordinator actions. Rejected because:
329
- - Overkill for simple tasks
330
- - Slower and more expensive
331
- - Auto-detection is smarter
332
-
333
- ## References
334
-
335
- - [oh-my-opencode](https://github.com/code-yeongyu/oh-my-opencode) by code-yeongyu - Primary source
336
- - [ADR-007](./ADR-007-swarm-enhancements-worktree-review.md) - Worktree isolation + structured review
337
- - [ADR-008](./ADR-008-worker-handoff-protocol.md) - Worker handoff protocol
338
-
339
- ## Acknowledgments
340
-
341
- Major thanks to **code-yeongyu** for building oh-my-opencode and open-sourcing these patterns. The OpenCode ecosystem is stronger because of contributions like this.
342
-
343
- ```
344
- ┌─────────────────────────────────────────────────────────────────┐
345
- │ │
346
- │ 🐝 "Good artists copy, great artists steal" │
347
- │ — Picasso (probably misattributed) │
348
- │ │
349
- │ We're stealing the good stuff and making it ours. │
350
- │ With proper attribution, of course. │
351
- │ │
352
- └─────────────────────────────────────────────────────────────────┘
353
- ```
@@ -1,368 +0,0 @@
1
- # Implementation Roadmap
2
-
3
- ## Overview
4
-
5
- This roadmap implements all 5 ADRs in phased releases over 12 weeks. Each phase delivers incremental value and can ship independently.
6
-
7
- ## Phase 0: Preparation (Week 0)
8
-
9
- **Goal:** Set up monorepo infrastructure and validate all ADRs
10
-
11
- **Tasks:**
12
-
13
- - [ ] Install Turborepo + configure turbo.json
14
- - [ ] Set up Changesets for versioning
15
- - [ ] Configure dependency-cruiser for circular dep detection
16
- - [ ] Create packages/swarm-mail and packages/opencode-swarm-plugin directories
17
- - [ ] Set up TypeScript project references
18
- - [ ] Configure CI/CD with Turborepo caching
19
-
20
- **Deliverables:**
21
-
22
- - Working monorepo build (`turbo run build`)
23
- - Published ADRs in docs/planning/
24
- - CI pipeline running tests for both packages
25
-
26
- **Success Criteria:**
27
-
28
- - `bun run build` builds both packages in correct order
29
- - No circular dependencies detected
30
- - CI completes in <2 minutes (with caching)
31
-
32
- ---
33
-
34
- ## Phase 1: Package Extraction (Weeks 1-2)
35
-
36
- **Goal:** Extract swarm-mail package and publish to npm
37
-
38
- **ADRs:** ADR-001, ADR-002
39
-
40
- **Tasks:**
41
-
42
- - [ ] Move src/streams/\* to packages/swarm-mail/src/streams/
43
- - [ ] Move agent-mail.ts, swarm-mail.ts to swarm-mail
44
- - [ ] Update imports in opencode-swarm-plugin to use swarm-mail
45
- - [ ] Migrate integration tests
46
- - [ ] Write swarm-mail README with examples
47
- - [ ] Add deprecation warnings in opencode-swarm-plugin
48
- - [ ] Publish swarm-mail@0.1.0 to npm
49
-
50
- **Deliverables:**
51
-
52
- - swarm-mail published on npm
53
- - opencode-swarm-plugin depends on swarm-mail
54
- - Migration guide for existing users
55
- - TypeDoc API documentation
56
-
57
- **Success Criteria:**
58
-
59
- - All tests pass in both packages
60
- - swarm-mail works in standalone project
61
- - No circular dependencies
62
- - Published tarball <500KB
63
-
64
- ---
65
-
66
- ## Phase 2: Performance Optimizations (Weeks 3-4)
67
-
68
- **Goal:** Replace polling with live queries and add batch operations
69
-
70
- **ADRs:** ADR-003
71
-
72
- **Tasks:**
73
-
74
- - [ ] Create live query wrapper (src/streams/live-query.ts)
75
- - [ ] Add subscription cleanup tracking
76
- - [ ] Replace polling in watchInbox()
77
- - [ ] Replace polling in watchEvents()
78
- - [ ] Add batch message send API
79
- - [ ] Add batch event append API
80
- - [ ] Write integration tests for live queries
81
- - [ ] Run performance benchmarks (latency, CPU, memory)
82
-
83
- **Deliverables:**
84
-
85
- - Live queries for inbox, events, file reservations
86
- - Batch APIs for messages and events
87
- - Performance benchmarks showing improvements
88
- - Feature flag for gradual rollout
89
-
90
- **Success Criteria:**
91
-
92
- - Notification latency <50ms (99th percentile)
93
- - CPU usage <1% in idle state
94
- - Batch operations 10x faster than individual
95
- - Memory usage increase <20%
96
-
97
- **Metrics (Before → After):**
98
-
99
- - Latency: 250-500ms → <10ms (25-50x improvement)
100
- - CPU: 5-10% → <1% (5-10x reduction)
101
- - Queries/sec: 2-4 → 0 (eliminated)
102
-
103
- ---
104
-
105
- ## Phase 3: Message Queue Features (Weeks 5-7)
106
-
107
- **Goal:** Add priority queues, DLQ, TTL, pub/sub
108
-
109
- **ADRs:** ADR-004
110
-
111
- **Tasks:**
112
-
113
- **Week 5: Priority Queues + DLQ**
114
-
115
- - [ ] Add priority column to messages table
116
- - [ ] Update getInbox() to ORDER BY priority DESC
117
- - [ ] Create failed_messages table
118
- - [ ] Implement retry logic with exponential backoff
119
- - [ ] Add DLQ viewer to CLI
120
-
121
- **Week 6: TTL + Pub/Sub**
122
-
123
- - [ ] Add expires_at column to messages
124
- - [ ] Implement background TTL cleanup job
125
- - [ ] Add topic column to messages
126
- - [ ] Implement subscribeToTopic() using live queries
127
- - [ ] Support wildcard topic subscriptions
128
-
129
- **Week 7: Testing + Documentation**
130
-
131
- - [ ] Write integration tests for all features
132
- - [ ] Add examples to README
133
- - [ ] Document retry/DLQ behavior
134
- - [ ] Document pub/sub patterns
135
-
136
- **Deliverables:**
137
-
138
- - Priority queues (4 levels: 0=urgent, 3=low)
139
- - DLQ with retry tracking
140
- - TTL with background cleanup
141
- - Pub/sub with wildcard topics
142
-
143
- **Success Criteria:**
144
-
145
- - Priority messages processed first
146
- - Failed messages retry 3x before DLQ
147
- - Expired messages cleaned up within 5 minutes
148
- - Topic subscriptions work with wildcards
149
-
150
- ---
151
-
152
- ## Phase 4: DevTools + CLI (Weeks 8-10)
153
-
154
- **Goal:** Build DevTools UI and CLI for observability
155
-
156
- **ADRs:** ADR-005
157
-
158
- **Tasks:**
159
-
160
- **Week 8: CLI**
161
-
162
- - [ ] Add @effect/cli dependency
163
- - [ ] Implement `swarm events` command
164
- - [ ] Implement `swarm messages` command
165
- - [ ] Implement `swarm locks` command
166
- - [ ] Implement `swarm replay` command
167
- - [ ] Add `--tail` mode for real-time updates
168
-
169
- **Week 9: DevTools UI**
170
-
171
- - [ ] Scaffold SvelteKit app in apps/devtools
172
- - [ ] Build event stream viewer
173
- - [ ] Build message inbox/outbox viewer
174
- - [ ] Build file reservation timeline
175
- - [ ] Add SSE endpoint for real-time updates
176
-
177
- **Week 10: Integration + Polish**
178
-
179
- - [ ] Static export of DevTools UI
180
- - [ ] Embed UI in plugin (serve at /\_swarm/devtools)
181
- - [ ] Add screenshots to README
182
- - [ ] Write user guide
183
-
184
- **Deliverables:**
185
-
186
- - CLI with 5 commands (events, messages, locks, replay, metrics)
187
- - DevTools UI (embeddable SvelteKit app)
188
- - Real-time updates via SSE
189
- - User guide with screenshots
190
-
191
- **Success Criteria:**
192
-
193
- - CLI can tail events in real-time
194
- - DevTools UI shows live message stream
195
- - UI works offline (static export)
196
- - Documentation covers all CLI commands
197
-
198
- ---
199
-
200
- ## Phase 5: Metrics + Tracing (Weeks 11-12)
201
-
202
- **Goal:** Add Prometheus metrics and OpenTelemetry tracing
203
-
204
- **ADRs:** ADR-005
205
-
206
- **Tasks:**
207
-
208
- **Week 11: Metrics**
209
-
210
- - [ ] Add prom-client dependency
211
- - [ ] Instrument message send/receive latency
212
- - [ ] Add lock contention histogram
213
- - [ ] Add queue depth gauge
214
- - [ ] Expose /metrics endpoint
215
- - [ ] Add Grafana dashboard template
216
-
217
- **Week 12: Tracing**
218
-
219
- - [ ] Add @effect/opentelemetry dependency
220
- - [ ] Instrument message send/receive spans
221
- - [ ] Propagate trace context in messages
222
- - [ ] Add trace_id to message metadata
223
- - [ ] Test with Jaeger/Zipkin
224
- - [ ] Write tracing guide
225
-
226
- **Deliverables:**
227
-
228
- - Prometheus metrics at /metrics endpoint
229
- - OpenTelemetry tracing integration
230
- - Grafana dashboard template
231
- - Tracing guide with Jaeger setup
232
-
233
- **Success Criteria:**
234
-
235
- - Metrics exposed and scrapeable by Prometheus
236
- - Traces visible in Jaeger UI
237
- - Trace propagation across agents works
238
- - Documentation for all observability tools
239
-
240
- ---
241
-
242
- ## Phase 6: Saga Pattern (Future)
243
-
244
- **Goal:** Implement saga orchestration for long-running workflows
245
-
246
- **ADRs:** ADR-004 (Phase 5)
247
-
248
- **Status:** Deferred to v2.0
249
-
250
- **Tasks:**
251
-
252
- - [ ] Create saga_instances and saga_steps tables
253
- - [ ] Add saga coordinator logic
254
- - [ ] Implement compensation pattern
255
- - [ ] Add saga viewer to DevTools UI
256
- - [ ] Write saga pattern examples
257
-
258
- **Deliverables:**
259
-
260
- - Saga orchestration pattern
261
- - Compensation (undo) support
262
- - Saga viewer in DevTools
263
- - 3+ example saga workflows
264
-
265
- ---
266
-
267
- ## Release Schedule
268
-
269
- | Version | Phase | Features | ETA |
270
- | --------- | ----- | ------------------------------ | ------- |
271
- | **0.1.0** | 1 | swarm-mail package extraction | Week 2 |
272
- | **0.2.0** | 2 | Live queries, batch operations | Week 4 |
273
- | **0.3.0** | 3 | Priority, DLQ, TTL, pub/sub | Week 7 |
274
- | **0.4.0** | 4 | DevTools UI + CLI | Week 10 |
275
- | **0.5.0** | 5 | Metrics + tracing | Week 12 |
276
- | **1.0.0** | All | Stable release | Week 13 |
277
- | **2.0.0** | 6 | Saga pattern (future) | TBD |
278
-
279
- ---
280
-
281
- ## Dependencies Between Phases
282
-
283
- ```
284
- Phase 0 (Monorepo)
285
- └──> Phase 1 (Package Extraction)
286
- └──> Phase 2 (Performance)
287
- ├──> Phase 3 (Queue Features)
288
- └──> Phase 4 (DevTools)
289
- └──> Phase 5 (Metrics/Tracing)
290
- └──> Phase 6 (Sagas, future)
291
- ```
292
-
293
- **Critical Path:** Phases 0→1→2 are sequential. Phases 3-5 can partially overlap after Phase 2.
294
-
295
- ---
296
-
297
- ## Risk Mitigation
298
-
299
- | Risk | Phase | Mitigation |
300
- | ---------------------------------------- | ----- | --------------------------------------------------------- |
301
- | Breaking changes during extraction | 1 | Feature branch, comprehensive tests, migration guide |
302
- | Performance regression with live queries | 2 | Feature flag, benchmark before/after, fallback to polling |
303
- | Complexity of saga pattern | 6 | Defer to v2.0, gather user feedback first |
304
- | DevTools UI maintenance burden | 4 | Keep UI minimal, focus on CLI for power users |
305
- | Metrics overhead | 5 | Make metrics opt-in, minimal instrumentation |
306
-
307
- ---
308
-
309
- ## Success Metrics
310
-
311
- **Phase 1 (Package Extraction):**
312
-
313
- - swarm-mail used in 3+ external projects within 3 months
314
- - Zero breaking changes reported by users
315
-
316
- **Phase 2 (Performance):**
317
-
318
- - 25x faster notification latency (500ms → <10ms)
319
- - 5x lower CPU usage (10% → <2%)
320
-
321
- **Phase 3 (Queue Features):**
322
-
323
- - 95% of messages processed within priority SLA
324
- - <1% messages fail to DLQ
325
-
326
- **Phase 4 (DevTools):**
327
-
328
- - 80% of developers use DevTools UI for debugging
329
- - CLI used in 50%+ of support cases
330
-
331
- **Phase 5 (Metrics/Tracing):**
332
-
333
- - Metrics dashboard used in production monitoring
334
- - Distributed traces reduce debugging time by 50%
335
-
336
- ---
337
-
338
- ## Post-1.0 Backlog (v2.0+)
339
-
340
- **Saga Pattern** (ADR-004 Phase 5)
341
-
342
- - Long-running multi-agent workflows
343
- - Compensation (undo) support
344
- - Saga state visualization
345
-
346
- **Advanced Pub/Sub**
347
-
348
- - Message routing rules
349
- - Filter expressions (SQL-like WHERE clauses)
350
- - At-least-once vs exactly-once delivery guarantees
351
-
352
- **Multi-Project Support**
353
-
354
- - Cross-project message routing
355
- - Project-level isolation
356
- - Shared infra for mono repos
357
-
358
- **Performance Tier 2**
359
-
360
- - Connection pooling for multi-DB scenarios
361
- - Message batching optimizations
362
- - SKIP LOCKED for exactly-once semantics
363
-
364
- **Security**
365
-
366
- - Message encryption at rest
367
- - Agent authentication/authorization
368
- - Audit logging