opencode-swarm-plugin 0.44.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 (205) hide show
  1. package/bin/swarm.serve.test.ts +6 -4
  2. package/bin/swarm.ts +16 -10
  3. package/dist/compaction-prompt-scoring.js +139 -0
  4. package/dist/eval-capture.js +12811 -0
  5. package/dist/hive.d.ts.map +1 -1
  6. package/dist/index.js +7644 -62599
  7. package/dist/plugin.js +23766 -78721
  8. package/dist/swarm-orchestrate.d.ts.map +1 -1
  9. package/dist/swarm-prompts.d.ts.map +1 -1
  10. package/dist/swarm-review.d.ts.map +1 -1
  11. package/package.json +17 -5
  12. package/.changeset/swarm-insights-data-layer.md +0 -63
  13. package/.hive/analysis/eval-failure-analysis-2025-12-25.md +0 -331
  14. package/.hive/analysis/session-data-quality-audit.md +0 -320
  15. package/.hive/eval-results.json +0 -483
  16. package/.hive/issues.jsonl +0 -138
  17. package/.hive/memories.jsonl +0 -729
  18. package/.opencode/eval-history.jsonl +0 -327
  19. package/.turbo/turbo-build.log +0 -9
  20. package/CHANGELOG.md +0 -2286
  21. package/SCORER-ANALYSIS.md +0 -598
  22. package/docs/analysis/subagent-coordination-patterns.md +0 -902
  23. package/docs/analysis-socratic-planner-pattern.md +0 -504
  24. package/docs/planning/ADR-001-monorepo-structure.md +0 -171
  25. package/docs/planning/ADR-002-package-extraction.md +0 -393
  26. package/docs/planning/ADR-003-performance-improvements.md +0 -451
  27. package/docs/planning/ADR-004-message-queue-features.md +0 -187
  28. package/docs/planning/ADR-005-devtools-observability.md +0 -202
  29. package/docs/planning/ADR-007-swarm-enhancements-worktree-review.md +0 -168
  30. package/docs/planning/ADR-008-worker-handoff-protocol.md +0 -293
  31. package/docs/planning/ADR-009-oh-my-opencode-patterns.md +0 -353
  32. package/docs/planning/ADR-010-cass-inhousing.md +0 -1215
  33. package/docs/planning/ROADMAP.md +0 -368
  34. package/docs/semantic-memory-cli-syntax.md +0 -123
  35. package/docs/swarm-mail-architecture.md +0 -1147
  36. package/docs/testing/context-recovery-test.md +0 -470
  37. package/evals/ARCHITECTURE.md +0 -1189
  38. package/evals/README.md +0 -768
  39. package/evals/compaction-prompt.eval.ts +0 -149
  40. package/evals/compaction-resumption.eval.ts +0 -289
  41. package/evals/coordinator-behavior.eval.ts +0 -307
  42. package/evals/coordinator-session.eval.ts +0 -154
  43. package/evals/evalite.config.ts.bak +0 -15
  44. package/evals/example.eval.ts +0 -31
  45. package/evals/fixtures/cass-baseline.ts +0 -217
  46. package/evals/fixtures/compaction-cases.ts +0 -350
  47. package/evals/fixtures/compaction-prompt-cases.ts +0 -311
  48. package/evals/fixtures/coordinator-sessions.ts +0 -328
  49. package/evals/fixtures/decomposition-cases.ts +0 -105
  50. package/evals/lib/compaction-loader.test.ts +0 -248
  51. package/evals/lib/compaction-loader.ts +0 -320
  52. package/evals/lib/data-loader.evalite-test.ts +0 -289
  53. package/evals/lib/data-loader.test.ts +0 -345
  54. package/evals/lib/data-loader.ts +0 -281
  55. package/evals/lib/llm.ts +0 -115
  56. package/evals/scorers/compaction-prompt-scorers.ts +0 -145
  57. package/evals/scorers/compaction-scorers.ts +0 -305
  58. package/evals/scorers/coordinator-discipline.evalite-test.ts +0 -539
  59. package/evals/scorers/coordinator-discipline.ts +0 -325
  60. package/evals/scorers/index.test.ts +0 -146
  61. package/evals/scorers/index.ts +0 -328
  62. package/evals/scorers/outcome-scorers.evalite-test.ts +0 -27
  63. package/evals/scorers/outcome-scorers.ts +0 -349
  64. package/evals/swarm-decomposition.eval.ts +0 -121
  65. package/examples/commands/swarm.md +0 -745
  66. package/examples/plugin-wrapper-template.ts +0 -2515
  67. package/examples/skills/hive-workflow/SKILL.md +0 -212
  68. package/examples/skills/skill-creator/SKILL.md +0 -223
  69. package/examples/skills/swarm-coordination/SKILL.md +0 -292
  70. package/global-skills/cli-builder/SKILL.md +0 -344
  71. package/global-skills/cli-builder/references/advanced-patterns.md +0 -244
  72. package/global-skills/learning-systems/SKILL.md +0 -644
  73. package/global-skills/skill-creator/LICENSE.txt +0 -202
  74. package/global-skills/skill-creator/SKILL.md +0 -352
  75. package/global-skills/skill-creator/references/output-patterns.md +0 -82
  76. package/global-skills/skill-creator/references/workflows.md +0 -28
  77. package/global-skills/swarm-coordination/SKILL.md +0 -995
  78. package/global-skills/swarm-coordination/references/coordinator-patterns.md +0 -235
  79. package/global-skills/swarm-coordination/references/strategies.md +0 -138
  80. package/global-skills/system-design/SKILL.md +0 -213
  81. package/global-skills/testing-patterns/SKILL.md +0 -430
  82. package/global-skills/testing-patterns/references/dependency-breaking-catalog.md +0 -586
  83. package/opencode-swarm-plugin-0.30.7.tgz +0 -0
  84. package/opencode-swarm-plugin-0.31.0.tgz +0 -0
  85. package/scripts/cleanup-test-memories.ts +0 -346
  86. package/scripts/init-skill.ts +0 -222
  87. package/scripts/migrate-unknown-sessions.ts +0 -349
  88. package/scripts/validate-skill.ts +0 -204
  89. package/src/agent-mail.ts +0 -1724
  90. package/src/anti-patterns.test.ts +0 -1167
  91. package/src/anti-patterns.ts +0 -448
  92. package/src/compaction-capture.integration.test.ts +0 -257
  93. package/src/compaction-hook.test.ts +0 -838
  94. package/src/compaction-hook.ts +0 -1204
  95. package/src/compaction-observability.integration.test.ts +0 -139
  96. package/src/compaction-observability.test.ts +0 -187
  97. package/src/compaction-observability.ts +0 -324
  98. package/src/compaction-prompt-scorers.test.ts +0 -475
  99. package/src/compaction-prompt-scoring.ts +0 -300
  100. package/src/contributor-tools.test.ts +0 -133
  101. package/src/contributor-tools.ts +0 -201
  102. package/src/dashboard.test.ts +0 -611
  103. package/src/dashboard.ts +0 -462
  104. package/src/error-enrichment.test.ts +0 -403
  105. package/src/error-enrichment.ts +0 -219
  106. package/src/eval-capture.test.ts +0 -1015
  107. package/src/eval-capture.ts +0 -929
  108. package/src/eval-gates.test.ts +0 -306
  109. package/src/eval-gates.ts +0 -218
  110. package/src/eval-history.test.ts +0 -508
  111. package/src/eval-history.ts +0 -214
  112. package/src/eval-learning.test.ts +0 -378
  113. package/src/eval-learning.ts +0 -360
  114. package/src/eval-runner.test.ts +0 -223
  115. package/src/eval-runner.ts +0 -402
  116. package/src/export-tools.test.ts +0 -476
  117. package/src/export-tools.ts +0 -257
  118. package/src/hive.integration.test.ts +0 -2241
  119. package/src/hive.ts +0 -1628
  120. package/src/index.ts +0 -940
  121. package/src/learning.integration.test.ts +0 -1815
  122. package/src/learning.ts +0 -1079
  123. package/src/logger.test.ts +0 -189
  124. package/src/logger.ts +0 -135
  125. package/src/mandate-promotion.test.ts +0 -473
  126. package/src/mandate-promotion.ts +0 -239
  127. package/src/mandate-storage.integration.test.ts +0 -601
  128. package/src/mandate-storage.test.ts +0 -578
  129. package/src/mandate-storage.ts +0 -794
  130. package/src/mandates.ts +0 -540
  131. package/src/memory-tools.test.ts +0 -195
  132. package/src/memory-tools.ts +0 -344
  133. package/src/memory.integration.test.ts +0 -334
  134. package/src/memory.test.ts +0 -158
  135. package/src/memory.ts +0 -527
  136. package/src/model-selection.test.ts +0 -188
  137. package/src/model-selection.ts +0 -68
  138. package/src/observability-tools.test.ts +0 -359
  139. package/src/observability-tools.ts +0 -871
  140. package/src/output-guardrails.test.ts +0 -438
  141. package/src/output-guardrails.ts +0 -381
  142. package/src/pattern-maturity.test.ts +0 -1160
  143. package/src/pattern-maturity.ts +0 -525
  144. package/src/planning-guardrails.test.ts +0 -491
  145. package/src/planning-guardrails.ts +0 -438
  146. package/src/plugin.ts +0 -23
  147. package/src/post-compaction-tracker.test.ts +0 -251
  148. package/src/post-compaction-tracker.ts +0 -237
  149. package/src/query-tools.test.ts +0 -636
  150. package/src/query-tools.ts +0 -324
  151. package/src/rate-limiter.integration.test.ts +0 -466
  152. package/src/rate-limiter.ts +0 -774
  153. package/src/replay-tools.test.ts +0 -496
  154. package/src/replay-tools.ts +0 -240
  155. package/src/repo-crawl.integration.test.ts +0 -441
  156. package/src/repo-crawl.ts +0 -610
  157. package/src/schemas/cell-events.test.ts +0 -347
  158. package/src/schemas/cell-events.ts +0 -807
  159. package/src/schemas/cell.ts +0 -257
  160. package/src/schemas/evaluation.ts +0 -166
  161. package/src/schemas/index.test.ts +0 -199
  162. package/src/schemas/index.ts +0 -286
  163. package/src/schemas/mandate.ts +0 -232
  164. package/src/schemas/swarm-context.ts +0 -115
  165. package/src/schemas/task.ts +0 -161
  166. package/src/schemas/worker-handoff.test.ts +0 -302
  167. package/src/schemas/worker-handoff.ts +0 -131
  168. package/src/sessions/agent-discovery.test.ts +0 -137
  169. package/src/sessions/agent-discovery.ts +0 -112
  170. package/src/sessions/index.ts +0 -15
  171. package/src/skills.integration.test.ts +0 -1192
  172. package/src/skills.test.ts +0 -643
  173. package/src/skills.ts +0 -1549
  174. package/src/storage.integration.test.ts +0 -341
  175. package/src/storage.ts +0 -884
  176. package/src/structured.integration.test.ts +0 -817
  177. package/src/structured.test.ts +0 -1046
  178. package/src/structured.ts +0 -762
  179. package/src/swarm-decompose.test.ts +0 -188
  180. package/src/swarm-decompose.ts +0 -1302
  181. package/src/swarm-deferred.integration.test.ts +0 -157
  182. package/src/swarm-deferred.test.ts +0 -38
  183. package/src/swarm-insights.test.ts +0 -214
  184. package/src/swarm-insights.ts +0 -459
  185. package/src/swarm-mail.integration.test.ts +0 -970
  186. package/src/swarm-mail.ts +0 -739
  187. package/src/swarm-orchestrate.integration.test.ts +0 -282
  188. package/src/swarm-orchestrate.test.ts +0 -548
  189. package/src/swarm-orchestrate.ts +0 -3084
  190. package/src/swarm-prompts.test.ts +0 -1270
  191. package/src/swarm-prompts.ts +0 -2077
  192. package/src/swarm-research.integration.test.ts +0 -701
  193. package/src/swarm-research.test.ts +0 -698
  194. package/src/swarm-research.ts +0 -472
  195. package/src/swarm-review.integration.test.ts +0 -285
  196. package/src/swarm-review.test.ts +0 -879
  197. package/src/swarm-review.ts +0 -709
  198. package/src/swarm-strategies.ts +0 -407
  199. package/src/swarm-worktree.test.ts +0 -501
  200. package/src/swarm-worktree.ts +0 -575
  201. package/src/swarm.integration.test.ts +0 -2377
  202. package/src/swarm.ts +0 -38
  203. package/src/tool-adapter.integration.test.ts +0 -1221
  204. package/src/tool-availability.ts +0 -461
  205. package/tsconfig.json +0 -28
package/CHANGELOG.md DELETED
@@ -1,2286 +0,0 @@
1
- # opencode-swarm-plugin
2
-
3
- ## 0.44.0
4
-
5
- ### Minor Changes
6
-
7
- - [`5c13dcf`](https://github.com/joelhooks/swarm-tools/commit/5c13dcf02ca0613199dbc84c5809bf8b9d57d3d1) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🎯 New Tool: `contributor_lookup`
8
-
9
- ```
10
- ┌────────────────────────────────────────────────┐
11
- │ GitHub Profile → Changeset Credit Line │
12
- │ │
13
- │ @bcheung → Thanks to Brian Cheung │
14
- │ twitter: ... → ([@justBCheung](x.com/)) │
15
- │ → for reporting #53! │
16
- └────────────────────────────────────────────────┘
17
- ```
18
-
19
- Workers can now call `contributor_lookup(login, issue)` to automatically:
20
-
21
- 1. Fetch GitHub profile (name, twitter, bio)
22
- 2. Get a ready-to-paste changeset credit line
23
- 3. Store contributor info in semantic-memory
24
-
25
- **Usage:**
26
-
27
- ```typescript
28
- contributor_lookup({ login: "bcheung", issue: 53 });
29
- // → "Thanks to Brian Cheung ([@justBCheung](https://x.com/justBCheung)) for reporting #53!"
30
- ```
31
-
32
- No more forgetting to credit contributors properly. The tool handles fallbacks when twitter/name is missing.
33
-
34
- ## 0.43.0
35
-
36
- ### Minor Changes
37
-
38
- - [`d74f68b`](https://github.com/joelhooks/swarm-tools/commit/d74f68ba491fdd127173c1993400c16b17479c3a) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🔭 Observability Stack: See What Your Swarm Is Doing
39
-
40
- ```
41
- ╭──────────────────────────────────────────────────────────╮
42
- │ │
43
- │ "Observability is about instrumenting your system │
44
- │ in a way that ensures sufficient information about │
45
- │ a system's runtime is collected and analyzed so │
46
- │ that when something goes wrong, it can help you │
47
- │ understand why." │
48
- │ │
49
- │ — AI Engineering, Chip Huyen │
50
- │ │
51
- ╰──────────────────────────────────────────────────────────╯
52
- ```
53
-
54
- Five new modules for understanding multi-agent coordination at runtime:
55
-
56
- ### Error Enrichment (`error-enrichment.ts`)
57
-
58
- ```typescript
59
- throw new SwarmError("File reservation failed", {
60
- file: "src/auth.ts",
61
- agent: "DarkHawk",
62
- epic_id: "mjmas3zxlmg",
63
- recent_events: [
64
- /* last 5 events */
65
- ],
66
- });
67
- ```
68
-
69
- - `SwarmError` class with structured context (file, line, agent, epic, events)
70
- - `enrichError()` wraps any error with swarm context
71
- - `debugLog()` respects `DEBUG=swarm:*` patterns
72
- - `suggestFix()` maps 8+ error patterns to actionable fixes
73
-
74
- ### SQL Analytics (`swarm query`)
75
-
76
- ```bash
77
- swarm query --preset failed_decompositions
78
- swarm query --sql "SELECT * FROM events WHERE type='worker_spawned'"
79
- swarm query --preset duration_by_strategy --format csv
80
- ```
81
-
82
- 10 preset queries: `failed_decompositions`, `duration_by_strategy`, `file_conflicts`, `worker_success_rate`, `review_rejections`, `blocked_tasks`, `agent_activity`, `event_frequency`, `error_patterns`, `compaction_stats`
83
-
84
- ### Dashboard Data (`swarm dashboard`)
85
-
86
- ```bash
87
- swarm dashboard --epic mjmas3zxlmg --refresh 1000
88
- ```
89
-
90
- Real-time data fetching: worker status, subtask progress, file locks, recent messages, epic list.
91
-
92
- ### Event Replay (`swarm replay`)
93
-
94
- ```bash
95
- swarm replay mjmas3zxlmg --speed 2x --type worker_spawned
96
- swarm replay mjmas3zxlmg --agent DarkHawk --since "2025-12-25T10:00:00"
97
- ```
98
-
99
- Replay epic events with timing control. Filter by type, agent, time range. Debug coordination failures by watching the sequence unfold.
100
-
101
- ### Export Formats (`swarm export`)
102
-
103
- ```bash
104
- swarm export --format otlp --epic mjmas3zxlmg # OpenTelemetry traces
105
- swarm export --format csv --output events.csv # RFC 4180 compliant
106
- swarm export --format json | jq '.[] | select(.type=="error")'
107
- ```
108
-
109
- **Test Coverage:** 225 tests (150 unit + 75 CLI integration)
110
-
111
- **TDD Enforced:** RED cells first, GREEN cells second. Every function tested before implementation.
112
-
113
- ## 0.42.9
114
-
115
- ### Patch Changes
116
-
117
- - [`823987d`](https://github.com/joelhooks/swarm-tools/commit/823987d7b7ef57bf636665008ebbcdffe333e828) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Worktree Support + Graceful Degradation
118
-
119
- ```
120
- ┌─────────────────────────────────────────────────────┐
121
- │ │
122
- │ "It is impossible to reduce the probability │
123
- │ of a fault to zero; therefore it is usually │
124
- │ best to design fault-tolerance mechanisms │
125
- │ that prevent faults from causing failures." │
126
- │ │
127
- │ — Kleppmann, DDIA │
128
- │ │
129
- └─────────────────────────────────────────────────────┘
130
- ```
131
-
132
- ### Git Worktree Support (#52)
133
-
134
- All worktrees now share the main repository's database. No more isolated state per worktree.
135
-
136
- ```
137
- BEFORE: AFTER:
138
- main-repo/.opencode/swarm.db main-repo/.opencode/swarm.db
139
- worktree-1/.opencode/swarm.db worktree-1/ ──┐
140
- worktree-2/.opencode/swarm.db worktree-2/ ──┼─→ main-repo/.opencode/
141
- worktree-3/ ──┘
142
- ```
143
-
144
- **How it works:**
145
-
146
- - Detects worktrees by checking if `.git` is a file (not directory)
147
- - Parses `gitdir:` path to resolve main repo location
148
- - All DB operations automatically use main repo's `.opencode/`
149
-
150
- ### Graceful Degradation for semantic-memory (#53)
151
-
152
- When Ollama is unavailable, `semantic-memory_find` now falls back to full-text search instead of erroring.
153
-
154
- **Before:** `OllamaError: Connection failed` → tool fails
155
- **After:** Warning logged → FTS results returned → tool works
156
-
157
- Also added `repairStaleEmbeddings()` to fix the "dimensions are different: 0 != 1024" error when memories were stored without embeddings.
158
-
159
- ### New Skill: gh-issue-triage
160
-
161
- Added `.opencode/skills/gh-issue-triage/` for GitHub issue triage workflow:
162
-
163
- - Extracts contributor profiles including Twitter handles
164
- - Templates for acknowledgment comments
165
- - Changeset credit templates with @mentions
166
-
167
- ***
168
-
169
- Thanks to [@justBCheung](https://x.com/justBCheung) for filing both issues with excellent debugging context. 🙏
170
-
171
- - Updated dependencies [[`823987d`](https://github.com/joelhooks/swarm-tools/commit/823987d7b7ef57bf636665008ebbcdffe333e828)]:
172
- - swarm-mail@1.6.0
173
-
174
- ## 0.42.8
175
-
176
- ### Patch Changes
177
-
178
- - [`a797bea`](https://github.com/joelhooks/swarm-tools/commit/a797bea871e5d698ebb38b41f47ff07faa7c108b) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🔗 Tweets Now Link to the Right PR
179
-
180
- Release tweets were linking to the wrong PR. The old logic grabbed "most recent merged PR that isn't a version bump" - but with the new `release:` prefix on version PRs, it was picking up stale PRs.
181
-
182
- **Fixed:** Now uses `github.sha` to find the exact PR that triggered the workflow. No more guessing.
183
-
184
- ```
185
- BEFORE: gh pr list --limit 5 --jq 'filter...' → wrong PR
186
- AFTER: gh pr list --search "${{ github.sha }}" → triggering PR
187
- ```
188
-
189
- ## 0.42.7
190
-
191
- ### Patch Changes
192
-
193
- - [`7a6a4a3`](https://github.com/joelhooks/swarm-tools/commit/7a6a4a37c4ea753de359dac5062d11186ee98ccd) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 📐 Swarm Insights Gets Its Blueprint
194
-
195
- > _"The major documentation tool for information architecture... diagrams."_
196
- > — Jesse James Garrett, The Elements of User Experience
197
-
198
- The README now shows you how the swarm learns, not just that it does.
199
-
200
- **Added:**
201
-
202
- - ASCII diagram of the swarm learning loop (task → decompose → execute → complete → insights → repeat)
203
- - Data flow architecture showing Event Store → Insights Aggregation → Agents
204
- - Full API reference with TypeScript examples for coordinators and workers
205
- - Token budget table (500 for coordinators, 300 for workers)
206
- - Recommendation threshold table (≥80% = good, <40% = AVOID)
207
- - Data sources table (Event Store, Semantic Memory, Anti-Pattern Registry)
208
-
209
- **Why it matters:**
210
- Diagrams > prose for architecture. Now you can see the feedback loop at a glance instead of reading paragraphs. The API examples are copy-pasteable.
211
-
212
- ```
213
- ┌──────────┐ ┌──────────┐ ┌──────────┐
214
- │ TASK │───▶│ INSIGHTS │───▶│ BETTER │
215
- │ │ │ LAYER │ │ SWARMS │
216
- └──────────┘ └──────────┘ └──────────┘
217
- ```
218
-
219
- - [`0ad79d5`](https://github.com/joelhooks/swarm-tools/commit/0ad79d57cd119517a8e04d0e74b4909f20a7f0be) Thanks [@joelhooks](https://github.com/joelhooks)! - ## Release Tweets Link to Source, PR Titles Get Smart
220
-
221
- - Tweets now include link to the feature PR (or commit if pushed direct to main)
222
- - Version bump PRs get AI-generated titles from changeset content via Opus
223
- - No more "chore: update versions" - titles describe what actually shipped
224
-
225
- ## 0.42.6
226
-
227
- ### Patch Changes
228
-
229
- - [`ab90238`](https://github.com/joelhooks/swarm-tools/commit/ab902386883fa9654c9977d28888582fafc093e5) Thanks [@joelhooks](https://github.com/joelhooks)! - ## Query Epic Children Without Rawdogging JSONL
230
-
231
- `hive_cells` and `hive_query` now support `parent_id` filter. Find all children of an epic in one call:
232
-
233
- ```typescript
234
- hive_cells({ parent_id: "epic-id" }); // Returns all subtasks
235
- hive_query({ parent_id: "epic-id", status: "open" }); // Open subtasks only
236
- ```
237
-
238
- No more grep/jq on issues.jsonl. The tools do what they should.
239
-
240
- - Updated dependencies [[`ab90238`](https://github.com/joelhooks/swarm-tools/commit/ab902386883fa9654c9977d28888582fafc093e5)]:
241
- - swarm-mail@1.5.5
242
-
243
- ## 0.42.5
244
-
245
- ### Patch Changes
246
-
247
- - [`45af762`](https://github.com/joelhooks/swarm-tools/commit/45af762ce656cf652847027d176d7bb7ff91f19b) Thanks [@joelhooks](https://github.com/joelhooks)! - ## The Bees Can Finally Tweet
248
-
249
- New @swarmtoolsai app with proper OAuth. Releases now announce themselves.
250
-
251
- ## 0.42.4
252
-
253
- ### Patch Changes
254
-
255
- - [`4c7d869`](https://github.com/joelhooks/swarm-tools/commit/4c7d869e385677318fbbda7fa464bbe1223039f1) Thanks [@joelhooks](https://github.com/joelhooks)! - ## Switched to X API v2
256
-
257
- Old action used deprecated v1.1 API. Now using direct OAuth 1.0a signed requests to v2 endpoint.
258
-
259
- ## 0.42.3
260
-
261
- ### Patch Changes
262
-
263
- - [`35eab3e`](https://github.com/joelhooks/swarm-tools/commit/35eab3e9e482b41e1535020a485561d5174e943c) Thanks [@joelhooks](https://github.com/joelhooks)! - ## First Real Tweet Incoming
264
-
265
- Fixed X OAuth tokens - now with write permissions. Let's see if the bees can actually post.
266
-
267
- ## 0.42.2
268
-
269
- ### Patch Changes
270
-
271
- - [`9ded2a0`](https://github.com/joelhooks/swarm-tools/commit/9ded2a0929f430a3297e3b62858aa1143179542f) Thanks [@joelhooks](https://github.com/joelhooks)! - ## Tweet Bot Learns to Speak Swarm
272
-
273
- Release tweets now use a manyshot prompt with examples that match the project's voice: terse, technical, slightly cheeky. Focus on what devs can DO, not what we shipped.
274
-
275
- ## 0.42.1
276
-
277
- ### Patch Changes
278
-
279
- - [`f6707d5`](https://github.com/joelhooks/swarm-tools/commit/f6707d53eb92021b6976212e903994c98c798483) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐦 @swarmtoolsai Now Tweets Releases
280
-
281
- Automated release announcements are live! When packages publish to npm, Claude summarizes the changelog into a tweet and posts from @swarmtoolsai.
282
-
283
- No more manual "hey we shipped" posts - the bees handle it now.
284
-
285
- ## 0.42.0
286
-
287
- ### Minor Changes
288
-
289
- - [`a79e04b`](https://github.com/joelhooks/swarm-tools/commit/a79e04b1bb3b40c09c5265b5d11739864799e4e2) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🔭 Swarm Observability: See What Your Bees Are Doing
290
-
291
- > "Observability is about instrumenting your system in a way that ensures sufficient information about a system's runtime is collected and analyzed so that when something goes wrong, it can help you understand why."
292
- > — Chip Huyen, _AI Engineering_
293
-
294
- New CLI commands to understand swarm health and history:
295
-
296
- ### `swarm stats`
297
-
298
- ```
299
- ┌─────────────────────────────────────────┐
300
- │ 🐝 SWARM STATISTICS 🐝 │
301
- ├─────────────────────────────────────────┤
302
- │ Total Swarms: 42 Success: 87% │
303
- │ Avg Duration: 4.2min │
304
- ├─────────────────────────────────────────┤
305
- │ BY STRATEGY │
306
- │ ├─ file-based 92% (23/25) │
307
- │ ├─ feature-based 78% (14/18) │
308
- │ ├─ risk-based 67% (2/3) │
309
- ├─────────────────────────────────────────┤
310
- │ COORDINATOR HEALTH │
311
- │ Violation Rate: 2% │
312
- │ Spawn Efficiency: 94% │
313
- │ Review Rate: 88% │
314
- └─────────────────────────────────────────┘
315
- ```
316
-
317
- Options: `--since 24h/7d/30d`, `--json`
318
-
319
- ### `swarm history`
320
-
321
- Timeline of recent swarm activity with filtering:
322
-
323
- - `--status success/failed/in_progress`
324
- - `--strategy file-based/feature-based/risk-based`
325
- - `--verbose` for subtask details
326
-
327
- ### Prompt Insights Integration
328
-
329
- Coordinators and workers now receive injected insights from past swarm outcomes:
330
-
331
- - Strategy success rates as markdown tables
332
- - Anti-pattern warnings for low-success strategies
333
- - File/domain-specific learnings from semantic memory
334
-
335
- This creates a feedback loop where swarms learn from their own history.
336
-
337
- ### Also in this release
338
-
339
- - **swarm-dashboard** (WIP): React/Vite visualizer scaffold
340
- - **ADR-006**: Swarm PTY decision document
341
- - **CI fix**: Smarter changeset detection prevents empty PR errors
342
-
343
- ### Patch Changes
344
-
345
- - Updated dependencies [[`a79e04b`](https://github.com/joelhooks/swarm-tools/commit/a79e04b1bb3b40c09c5265b5d11739864799e4e2)]:
346
- - swarm-mail@1.5.4
347
-
348
- ## 0.41.0
349
-
350
- ### Minor Changes
351
-
352
- - [`179b3f0`](https://github.com/joelhooks/swarm-tools/commit/179b3f0e49c7959f8d754c1274d301d0b3845a79) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Compaction Prompt Now Speaks Swarm
353
-
354
- > _"Memory is essential for communication: we recall past interactions, infer preferences, and construct evolving mental models of those we engage with."_
355
- > — Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory
356
-
357
- When context compacts mid-swarm, coordinators were waking up confused. They had state information but no protocol guidance. Now the compaction prompt includes a condensed version of the swarm command template.
358
-
359
- **What's New:**
360
-
361
- The `SWARM_COMPACTION_CONTEXT` now includes:
362
-
363
- 1. **What Good Looks Like** - Behavioral examples showing ideal coordinator behavior
364
-
365
- - ✅ Spawned researcher for unfamiliar tech → got summary → stored in semantic-memory
366
- - ✅ Checked inbox every 5-10 minutes → caught blocked worker → unblocked in 2min
367
- - ❌ Called context7 directly → dumped 50KB → context exhaustion
368
-
369
- 2. **Mandatory Behaviors Checklist** - Post-compaction protocol
370
- - Inbox monitoring (every 5-10 min with intervention triggers)
371
- - Skill loading (before spawning workers)
372
- - Worker review (after every worker returns, 3-strike rule)
373
- - Research spawning (never call context7/pdf-brain directly)
374
-
375
- **Why This Matters:**
376
-
377
- Coordinators resuming from compaction now have:
378
-
379
- - Clear behavioral guidance (not just state)
380
- - Actionable tool call examples
381
- - Anti-patterns to avoid
382
- - The same protocol as fresh `/swarm` invocations
383
-
384
- **Backward Compatible:** Existing compaction hooks continue to work. This adds guidance, doesn't change the hook signature.
385
-
386
- ### Patch Changes
387
-
388
- - [`3e7c126`](https://github.com/joelhooks/swarm-tools/commit/3e7c126b11aa6ad909ebcb2ab3cf77883f9acfe4) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🧪 Bulletproof Test Suite
389
-
390
- > "Setting up our tests to run synchronously and using mocking libraries will greatly speed up our testing"
391
- > — ng-book
392
-
393
- Fixed test isolation issues that caused 19 tests to fail when run together but pass in isolation.
394
-
395
- ### The Culprits
396
-
397
- **1. Global fetch pollution** (`ollama.test.ts`)
398
-
399
- ```typescript
400
- // BEFORE: Replaced global.fetch, never restored it
401
- global.fetch = mockFetch;
402
-
403
- // AFTER: Save and restore
404
- const originalFetch = global.fetch;
405
- afterEach(() => {
406
- global.fetch = originalFetch;
407
- });
408
- ```
409
-
410
- **2. Port conflicts** (`durable-server.test.ts`)
411
-
412
- - Tests used hardcoded ports (4483, 4484, 4485)
413
- - Parallel test runs fought over the same ports
414
- - Fixed: Use `port: 0` for OS-assigned ports, made `server.url` a getter
415
-
416
- **3. AI SDK schema incompatibility** (`memory-operations.ts`)
417
-
418
- - `z.discriminatedUnion` creates `oneOf` at top level
419
- - Anthropic API requires `type: object` at top level
420
- - Fixed: Flat object schema with optional fields
421
-
422
- ### Test Stats
423
-
424
- ```
425
- Before: 19 failures when run together
426
- After: 0 failures, 1406 tests pass
427
- ```
428
-
429
- ### Files Changed
430
-
431
- - `src/memory/ollama.test.ts` - Restore global.fetch after each test
432
- - `src/streams/durable-server.ts` - Dynamic port getter
433
- - `src/streams/durable-server.test.ts` - Use port 0, rewrite for isolation
434
- - `src/memory/memory-operations.ts` - Flat schema for Anthropic compatibility
435
- - Renamed `memory-operations.test.ts` → `memory-operations.integration.test.ts`
436
-
437
- - Updated dependencies [[`3e7c126`](https://github.com/joelhooks/swarm-tools/commit/3e7c126b11aa6ad909ebcb2ab3cf77883f9acfe4)]:
438
- - swarm-mail@1.5.3
439
-
440
- ## 0.40.0
441
-
442
- ### Minor Changes
443
-
444
- - [`948e031`](https://github.com/joelhooks/swarm-tools/commit/948e0318fe5e2c1a5d695a56533fc2a2a7753887) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🔭 Observability Swarm: See What the Bees Are Doing
445
-
446
- > "The unexamined swarm is not worth coordinating." — Socrates, probably
447
-
448
- Four parallel workers descended on the observability stack and emerged victorious. The compaction hook no longer runs in darkness, coordinator sessions are now viewable, and the docs finally explain what all those JSONL files are for.
449
-
450
- ### What's New
451
-
452
- **Compaction Observability** (`src/compaction-observability.ts`)
453
-
454
- - Metrics collector tracks phases: START → GATHER → DETECT → INJECT → COMPLETE
455
- - Pattern extraction/skipping with reasons ("why didn't this get captured?")
456
- - Timing breakdown per phase (analysis vs extraction vs storage)
457
- - 15 tests (11 unit + 4 integration)
458
-
459
- **`swarm log sessions` CLI**
460
-
461
- - `swarm log sessions` — list all captured coordinator sessions
462
- - `swarm log sessions <id>` — view events for a session (partial ID matching)
463
- - `swarm log sessions --latest` — quick access to most recent
464
- - `--type`, `--since`, `--limit`, `--json` filters
465
- - 64 tests covering parsing, listing, filtering
466
-
467
- **Coordinator Observability Docs**
468
-
469
- - AGENTS.md: overview with quick commands
470
- - evals/README.md: deep dive with ASCII flow diagrams, event type reference, JSONL examples, jq recipes
471
-
472
- **Research: Coordinator Prompt Eval** (`.hive/analysis/coordinator-prompt-eval-research.md`)
473
-
474
- - 26KB analysis of prompt iteration strategies
475
- - Recommends: versioning + evalite (defer LLM-as-Judge to v0.34+)
476
- - Implementation plan with effort estimates
477
-
478
- ### The Observability Story
479
-
480
- ```
481
- CAPTURE ──────────► VIEW ──────────► SCORE
482
- (eval-capture.ts) (swarm log (coordinator
483
- sessions) evals)
484
- ```
485
-
486
- Now you can answer:
487
-
488
- - "What did the last 10 compaction runs extract?"
489
- - "Why didn't this pattern get captured?"
490
- - "Which coordinator sessions had violations?"
491
-
492
- ## 0.39.1
493
-
494
- ### Patch Changes
495
-
496
- - [`19a6557`](https://github.com/joelhooks/swarm-tools/commit/19a6557cee9878858e7f61e2aba86b37a3ec10ad) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Eval Quality Gates: Signal Over Noise
497
-
498
- The eval system now filters coordinator sessions to focus on high-quality data.
499
-
500
- **Problem:** 67 of 82 captured sessions had <3 events - noise from aborted runs, test pokes, and incomplete swarms. This diluted eval scores and made metrics unreliable.
501
-
502
- **Solution:** Quality filters applied BEFORE sampling:
503
-
504
- | Filter | Default | Purpose |
505
- | -------------------- | ------- | --------------------------------- |
506
- | `minEvents` | 3 | Skip incomplete/aborted sessions |
507
- | `requireWorkerSpawn` | true | Ensure coordinator delegated work |
508
- | `requireReview` | true | Ensure full swarm lifecycle |
509
-
510
- **Impact:**
511
-
512
- - Filters 93 noisy sessions automatically
513
- - Overall eval score: 63% → 71% (true signal, not diluted)
514
- - Coordinator discipline: 47% → 57% (accurate measurement)
515
-
516
- **Usage:**
517
-
518
- ```typescript
519
- // Default: high-quality sessions only
520
- const sessions = await loadCapturedSessions();
521
-
522
- // Override for specific analysis
523
- const allSessions = await loadCapturedSessions({
524
- minEvents: 1,
525
- requireWorkerSpawn: false,
526
- requireReview: false,
527
- });
528
- ```
529
-
530
- Includes 7 unit tests covering filter logic and edge cases.
531
-
532
- ## 0.39.0
533
-
534
- ### Minor Changes
535
-
536
- - [`aa12943`](https://github.com/joelhooks/swarm-tools/commit/aa12943f3edc8d5e23878b22f44073e4c71367c5) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Eval-Driven Development: The System That Scores Itself
537
-
538
- > "What gets measured gets managed." — Peter Drucker
539
- > "What gets scored gets improved." — The Swarm
540
-
541
- The plugin now evaluates its own output quality through a progressive gate system. Every compaction prompt gets scored, tracked, and learned from. Regressions become impossible to ignore.
542
-
543
- ### The Pipeline
544
-
545
- ```
546
- CAPTURE → SCORE → STORE → GATE → LEARN → IMPROVE
547
- ↑ ↓
548
- └──────────────────────────────────────┘
549
- ```
550
-
551
- ### What's New
552
-
553
- **Event Capture** (5 integration points)
554
-
555
- - `detection_triggered` - When compaction is detected
556
- - `prompt_generated` - Full LLM prompt captured
557
- - `context_injected` - Final content before injection
558
- - All events stored to `~/.config/swarm-tools/sessions/{session_id}.jsonl`
559
-
560
- **5 Compaction Prompt Scorers**
561
-
562
- - `epicIdSpecificity` - Real IDs, not placeholders (20%)
563
- - `actionability` - Specific tool calls with values (20%)
564
- - `coordinatorIdentity` - ASCII header + mandates (25%)
565
- - `forbiddenToolsPresent` - Lists what NOT to do (15%)
566
- - `postCompactionDiscipline` - First tool is correct (20%)
567
-
568
- **Progressive Gates**
569
- | Phase | Threshold | Behavior |
570
- |-------|-----------|----------|
571
- | Bootstrap | N/A | Always pass, building baseline |
572
- | Stabilization | 0.6 | Warn but pass |
573
- | Production | 0.7 | Fail CI on regression |
574
-
575
- **CLI Commands**
576
-
577
- ```bash
578
- swarm eval status # Current phase, thresholds, scores
579
- swarm eval history # Trends with sparklines ▁▂▃▄▅▆▇█
580
- swarm eval run [--ci] # Execute evals, gate check
581
- ```
582
-
583
- **CI Integration**
584
-
585
- - Runs after tests pass
586
- - Posts results as PR comment with emoji status
587
- - Only fails in production phase with actual regression
588
-
589
- **Learning Feedback Loop**
590
-
591
- - Significant score drops auto-stored to semantic memory
592
- - Future agents learn from past failures
593
- - Pattern maturity tracking
594
-
595
- ### Breaking Changes
596
-
597
- None. All new functionality is additive.
598
-
599
- ### Files Changed
600
-
601
- - `src/eval-capture.ts` - Event capture with Zod schemas
602
- - `src/eval-gates.ts` - Progressive gate logic
603
- - `src/eval-history.ts` - Score tracking over time
604
- - `src/eval-learning.ts` - Failure-to-learning extraction
605
- - `src/compaction-prompt-scoring.ts` - 5 pure scoring functions
606
- - `evals/compaction-prompt.eval.ts` - Evalite integration
607
- - `bin/swarm.ts` - CLI commands
608
- - `.github/workflows/ci.yml` - CI integration
609
-
610
- ### Test Coverage
611
-
612
- - 422 new tests for eval-capture
613
- - 48 CLI tests
614
- - 7 integration tests for capture wiring
615
- - All existing tests still passing
616
-
617
- ### Patch Changes
618
-
619
- - Updated dependencies [[`aa12943`](https://github.com/joelhooks/swarm-tools/commit/aa12943f3edc8d5e23878b22f44073e4c71367c5)]:
620
- - swarm-mail@1.5.2
621
-
622
- ## 0.38.0
623
-
624
- ### Minor Changes
625
-
626
- - [`41a1965`](https://github.com/joelhooks/swarm-tools/commit/41a19657b252eb1c7a7dc82bc59ab13589e8758f) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Coordinators Now Delegate Research to Workers
627
-
628
- Coordinators finally know their place. They orchestrate, they don't fetch.
629
-
630
- **The Problem:**
631
- Coordinators were calling `repo-crawl_file`, `webfetch`, `context7_*` directly, burning expensive Sonnet context on raw file contents instead of spawning researcher workers.
632
-
633
- **The Fix:**
634
-
635
- ### Forbidden Tools Section
636
-
637
- COORDINATOR_PROMPT now explicitly lists tools coordinators must NEVER call:
638
-
639
- - `repo-crawl_*`, `repo-autopsy_*` - repository fetching
640
- - `webfetch`, `fetch_fetch` - web fetching
641
- - `context7_*` - library documentation
642
- - `pdf-brain_search`, `pdf-brain_read` - knowledge base
643
-
644
- ### Phase 1.5: Research Phase
645
-
646
- New workflow phase between Initialize and Knowledge Gathering:
647
-
648
- ```
649
- swarm_spawn_researcher(
650
- research_id="research-nextjs-cache",
651
- tech_stack=["Next.js 16 Cache Components"],
652
- project_path="/path/to/project"
653
- )
654
- ```
655
-
656
- ### Strong Coordinator Identity Post-Compaction
657
-
658
- When context compacts, the resuming agent now sees:
659
-
660
- ```
661
- ┌─────────────────────────────────────────────────────────────┐
662
- │ 🐝 YOU ARE THE COORDINATOR 🐝 │
663
- │ NOT A WORKER. NOT AN IMPLEMENTER. │
664
- │ YOU ORCHESTRATE. │
665
- └─────────────────────────────────────────────────────────────┘
666
- ```
667
-
668
- ### runResearchPhase Returns Spawn Instructions
669
-
670
- ```typescript
671
- const result = await runResearchPhase(task, projectPath);
672
- // result.spawn_instructions = [
673
- // { research_id, tech, prompt, subagent_type: "swarm/researcher" }
674
- // ]
675
- ```
676
-
677
- **32+ new tests, all 425 passing.**
678
-
679
- - [`b06f69b`](https://github.com/joelhooks/swarm-tools/commit/b06f69bc3db099c14f712585d88b42c801123d01) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🔬 Eval Capture Pipeline: Complete
680
-
681
- > "The purpose of computing is insight, not numbers." — Richard Hamming
682
-
683
- Wire all eval-capture functions into the swarm execution path, enabling ground-truth collection from real swarm executions.
684
-
685
- **What changed:**
686
-
687
- | Function | Wired Into | Purpose |
688
- | ------------------------- | ------------------------------ | ---------------------------------- |
689
- | `captureDecomposition()` | `swarm_validate_decomposition` | Records task → subtasks mapping |
690
- | `captureSubtaskOutcome()` | `swarm_complete` | Records per-subtask execution data |
691
- | `finalizeEvalRecord()` | `swarm_record_outcome` | Computes aggregate metrics |
692
-
693
- **New npm scripts:**
694
-
695
- ```bash
696
- bun run eval:run # Run all evals
697
- bun run eval:decomposition # Decomposition quality
698
- bun run eval:coordinator # Coordinator discipline
699
- ```
700
-
701
- **Data flow:**
702
-
703
- ```
704
- swarm_decompose → captureDecomposition → .opencode/eval-data.jsonl
705
-
706
- swarm_complete → captureSubtaskOutcome → updates record with outcomes
707
-
708
- swarm_record_outcome → finalizeEvalRecord → computes scope_accuracy, time_balance
709
-
710
- evalite → reads JSONL → scores decomposition quality
711
- ```
712
-
713
- **Why it matters:**
714
-
715
- - Enables data-driven decomposition strategy selection
716
- - Tracks which strategies work for which task types
717
- - Provides ground truth for Evalite evals
718
- - Foundation for learning from swarm outcomes
719
-
720
- **Key discovery:** New cell ID format doesn't follow `epicId.subtaskNum` pattern. Must use `cell.parent_id` to get epic ID for subtasks.
721
-
722
- ### Patch Changes
723
-
724
- - [`56e5d4c`](https://github.com/joelhooks/swarm-tools/commit/56e5d4c5ac96ddd2184d12c63e163bb9c291fb69) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🔬 Eval Capture Pipeline: Phase 1
725
-
726
- > "The first step toward wisdom is getting things right. The second step is getting them wrong in interesting ways." — Marvin Minsky
727
-
728
- Wire `captureDecomposition()` into `swarm_validate_decomposition` to record decomposition inputs/outputs for evaluation.
729
-
730
- **What changed:**
731
-
732
- - `swarm_validate_decomposition` now calls `captureDecomposition()` after successful validation
733
- - Captures: epicId, projectPath, task, context, strategy, epicTitle, subtasks
734
- - Data persisted to `.opencode/eval-data.jsonl` for Evalite consumption
735
-
736
- **Why it matters:**
737
-
738
- - Enables ground-truth collection from real swarm executions
739
- - Foundation for decomposition quality evals
740
- - Tracks what strategies work for which task types
741
-
742
- **Tests added:**
743
-
744
- - Verifies `captureDecomposition` called with correct params on success
745
- - Verifies NOT called on validation failure
746
- - Handles optional context/description fields
747
-
748
- **Next:** Wire `captureSubtaskOutcome()` and `finalizeEvalRecord()` to complete the pipeline.
749
-
750
- ## 0.37.0
751
-
752
- ### Minor Changes
753
-
754
- - [`66b5795`](https://github.com/joelhooks/swarm-tools/commit/66b57951e2c114702c663b98829d5f7626607a16) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 `swarm cells` - Query Your Hive Like a Pro
755
-
756
- New CLI command AND plugin tool for querying cells directly from the database.
757
-
758
- ### CLI: `swarm cells`
759
-
760
- ```bash
761
- swarm cells # List all cells (table format)
762
- swarm cells --status open # Filter by status
763
- swarm cells --type bug # Filter by type
764
- swarm cells --ready # Next unblocked cell
765
- swarm cells mjkmd # Partial ID lookup
766
- swarm cells --json # Raw JSON for scripting
767
- ```
768
-
769
- **Replaces:** The awkward `swarm tool hive_query --json '{"status":"open"}'` pattern.
770
-
771
- ### Plugin Tool: `hive_cells`
772
-
773
- ```typescript
774
- // Agents can now query cells directly
775
- hive_cells({ status: "open", type: "task" });
776
- hive_cells({ id: "mjkmd" }); // Partial ID works!
777
- hive_cells({ ready: true }); // Next unblocked
778
- ```
779
-
780
- **Why this matters:**
781
-
782
- - Reads from DATABASE (fast, indexed) not JSONL files
783
- - Partial ID resolution built-in
784
- - Consistent JSON array output
785
- - Rich descriptions encourage agentic use
786
-
787
- ### Also Fixed
788
-
789
- - `swarm_review_feedback` tests updated for coordinator-driven retry architecture
790
- - 425 tests passing
791
-
792
- ## 0.36.1
793
-
794
- ### Patch Changes
795
-
796
- - [`9c1f3f3`](https://github.com/joelhooks/swarm-tools/commit/9c1f3f3e7204f02c133c4a036fa34e83d8376a8c) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Coordinator Discipline: Prohibition-First Enforcement
797
-
798
- Coordinators kept "just doing it themselves" after compaction. Now they can't.
799
-
800
- **The Problem:**
801
- After context compaction, coordinators would ignore their own instructions to "spawn workers for remaining subtasks" and edit files directly. The compaction context was narrative ("do this") rather than prescriptive ("NEVER do that").
802
-
803
- **The Fix:**
804
-
805
- ### 1. Prohibition-First Compaction Context
806
-
807
- The `SWARM_COMPACTION_CONTEXT` now leads with explicit anti-patterns:
808
-
809
- ```markdown
810
- ### ⛔ NEVER DO THESE (Coordinator Anti-Patterns)
811
-
812
- - ❌ **NEVER** use `edit` or `write` tools - SPAWN A WORKER
813
- - ❌ **NEVER** run tests with `bash` - SPAWN A WORKER
814
- - ❌ **NEVER** implement features yourself - SPAWN A WORKER
815
- - ❌ **NEVER** "just do it myself to save time" - NO. SPAWN A WORKER.
816
- ```
817
-
818
- ### 2. Runtime Violation Detection
819
-
820
- `detectCoordinatorViolation()` is now wired up in `tool.execute.before`:
821
-
822
- - Detects when coordinators call `edit`, `write`, or test commands
823
- - Emits warnings to help coordinators self-correct
824
- - Captures VIOLATION events for post-hoc analysis
825
-
826
- ### 3. Coordinator Context Tracking
827
-
828
- New functions track when we're in coordinator mode:
829
-
830
- - `setCoordinatorContext()` - Activated when `hive_create_epic` or `swarm_decompose` is called
831
- - `isInCoordinatorContext()` - Checks if we're currently coordinating
832
- - `clearCoordinatorContext()` - Cleared when epic is closed
833
-
834
- **Why This Matters:**
835
-
836
- Coordinators that do implementation work burn context, create conflicts, and defeat the purpose of swarm coordination. This fix makes the anti-pattern visible and provides guardrails to prevent it.
837
-
838
- **Validation:**
839
-
840
- - Check `~/.config/swarm-tools/sessions/` for VIOLATION events
841
- - Run `coordinator-behavior.eval.ts` to score coordinator discipline
842
-
843
- - [`4c23c7a`](https://github.com/joelhooks/swarm-tools/commit/4c23c7a31013bc6537d83a9294b51540056cde93) Thanks [@joelhooks](https://github.com/joelhooks)! - ## Fix Double Hook Registration
844
-
845
- The compaction hook was firing twice per compaction event because OpenCode's plugin loader
846
- calls ALL exports as plugin functions. We were exporting `SwarmPlugin` as both:
847
-
848
- 1. Named export: `export const SwarmPlugin`
849
- 2. Default export: `export default SwarmPlugin`
850
-
851
- This caused the plugin to register twice, doubling all hook invocations.
852
-
853
- **Fix:** Changed to default-only export pattern:
854
-
855
- - `src/index.ts`: `const SwarmPlugin` (no export keyword)
856
- - `src/plugin.ts`: `export default SwarmPlugin` (no named re-export)
857
-
858
- **Impact:** Compaction hooks now fire once. LLM calls during compaction reduced by 50%.
859
-
860
- - Updated dependencies [[`e0c422d`](https://github.com/joelhooks/swarm-tools/commit/e0c422de3f5e15c117cc0cc655c0b03242245be4), [`43c8c93`](https://github.com/joelhooks/swarm-tools/commit/43c8c93ef90b2f04ce59317192334f69d7c4204e)]:
861
- - swarm-mail@1.5.1
862
-
863
- ## 0.36.0
864
-
865
- ### Minor Changes
866
-
867
- - [`ae213aa`](https://github.com/joelhooks/swarm-tools/commit/ae213aa49be977e425e0a767b5b2db16e462f76b) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🔬 Compaction Hook: Now With X-Ray Vision
868
-
869
- The compaction hook was logging to `console.log` like a caveman. Now it writes structured JSON logs to `~/.config/swarm-tools/logs/compaction.log` - visible via `swarm log compaction`.
870
-
871
- **The Problem:**
872
-
873
- - Plugin wrapper used `console.log` → stdout → invisible
874
- - npm package had pino logging → but wrapper didn't use it
875
- - Running `/compact` gave zero visibility into what happened
876
-
877
- **The Fix:**
878
- Added comprehensive file-based logging throughout the compaction flow:
879
-
880
- ```
881
- ┌─────────────────────────────────────────────────────────────┐
882
- │ COMPACTION LOGGING │
883
- ├─────────────────────────────────────────────────────────────┤
884
- │ compaction_hook_invoked │ Full input/output objects │
885
- │ detect_swarm_* │ CLI calls, cells, confidence │
886
- │ query_swarm_state_* │ Epic/subtask extraction │
887
- │ generate_compaction_prompt_*│ LLM timing, success/failure │
888
- │ context_injected_via_* │ Which API used │
889
- │ compaction_complete_* │ Final result + timing │
890
- └─────────────────────────────────────────────────────────────┘
891
- ```
892
-
893
- **Also Enhanced:**
894
-
895
- - SDK message scanning for precise swarm state extraction
896
- - Merged scanned state (ground truth) with hive detection (heuristic)
897
- - 9 new tests for `scanSessionMessages()` (32 total passing)
898
-
899
- **To See It Work:**
900
-
901
- ```bash
902
- swarm setup --reinstall # Regenerate plugin wrapper
903
- # Run /compact in OpenCode
904
- swarm log compaction # See what happened
905
- ```
906
-
907
- ### Patch Changes
908
-
909
- - [`5cfc42e`](https://github.com/joelhooks/swarm-tools/commit/5cfc42e93d3e5424e308857a40af4fd9fbda0ba3) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Swarm Workers Unchained
910
-
911
- Removed the vestigial `max_subtasks` parameter from decomposition tools. It was dead code - the prompts already say "as many as needed" and the replacement was doing nothing.
912
-
913
- **What changed:**
914
-
915
- - Removed `max_subtasks` arg from `swarm_decompose`, `swarm_plan_prompt`, `swarm_delegate_planning`
916
- - Removed from `DecomposeArgsSchema`
917
- - Renamed `max_subtasks` → `subtask_count` in eval capture (records actual count, not a limit)
918
- - Cleaned up tests that were passing the unused parameter
919
-
920
- **Why it matters:**
921
- The LLM decides how many subtasks based on task complexity, not an arbitrary cap. "Plan aggressively" means spawn as many workers as the task needs.
922
-
923
- **No functional change** - the parameter wasn't being used anyway.
924
-
925
- ## 0.35.0
926
-
927
- ### Minor Changes
928
-
929
- - [`084f888`](https://github.com/joelhooks/swarm-tools/commit/084f888fcac4912f594428b1ac7148c8a8aaa422) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 👁️ Watch Your Swarm in Real-Time
930
-
931
- `swarm log` now has a `--watch` mode for continuous log monitoring. No more running the command repeatedly - just sit back and watch the bees work.
932
-
933
- ```bash
934
- # Watch all logs
935
- swarm log --watch
936
-
937
- # Watch with filters
938
- swarm log compaction -w --level error
939
-
940
- # Faster polling (500ms instead of default 1s)
941
- swarm log --watch --interval 500
942
- ```
943
-
944
- **New flags:**
945
-
946
- - `--watch`, `-w` - Enable continuous monitoring mode
947
- - `--interval <ms>` - Poll interval in milliseconds (default: 1000, min: 100)
948
-
949
- **How it works:**
950
-
951
- - Shows initial logs (last N lines based on `--limit`)
952
- - Polls log files for new entries at the specified interval
953
- - Tracks file positions for efficient incremental reads
954
- - Handles log rotation gracefully (detects file truncation)
955
- - All existing filters work: `--level`, `--since`, module name
956
- - Clean shutdown on Ctrl+C
957
-
958
- _"The hive that watches itself, debugs itself."_
959
-
960
- ## 0.34.0
961
-
962
- ### Minor Changes
963
-
964
- - [`704c366`](https://github.com/joelhooks/swarm-tools/commit/704c36690fb6fd52cfb9222ddeef3b663dfdb9ed) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🪵 Pino Logging Infrastructure
965
-
966
- > "You can't improve what you can't measure." — Peter Drucker
967
-
968
- Finally, visibility into what the swarm is actually doing.
969
-
970
- ### What's New
971
-
972
- **Structured Logging with Pino**
973
-
974
- - Daily log rotation via `pino-roll` (14-day retention)
975
- - Logs to `~/.config/swarm-tools/logs/`
976
- - Module-specific log files (e.g., `compaction.1log`, `swarm.1log`)
977
- - Pretty mode for development: `SWARM_LOG_PRETTY=1`
978
-
979
- **Compaction Hook Instrumented**
980
-
981
- - 14 strategic log points across all phases
982
- - START: session context, trigger reason
983
- - GATHER: per-source timing (hive, swarm-mail, skills)
984
- - DETECT/INJECT: confidence scores, context decisions
985
- - COMPLETE: duration, success, what was injected
986
-
987
- **New CLI: `swarm log`**
988
-
989
- ```bash
990
- swarm log # Tail recent logs
991
- swarm log compaction # Filter by module
992
- swarm log --level warn # Filter by severity
993
- swarm log --since 1h # Last hour only
994
- swarm log --json | jq # Pipe to jq for analysis
995
- ```
996
-
997
- ### Why This Matters
998
-
999
- The compaction hook does a LOT of work with zero visibility:
1000
-
1001
- - Context injection decisions
1002
- - Data gathering from multiple sources
1003
- - Template rendering and size calculations
1004
-
1005
- Now you can answer: "What did compaction do on the last run?"
1006
-
1007
- ### Technical Details
1008
-
1009
- - Pino + pino-roll for async, non-blocking file writes
1010
- - Child loggers for module namespacing
1011
- - Lazy initialization pattern for test isolation
1012
- - 56 new tests (10 logger + 18 compaction + 28 CLI)
1013
-
1014
- Complements existing `DEBUG=swarm:*` env var approach — Pino for structured file logs, debug for stderr filtering.
1015
-
1016
- ### Patch Changes
1017
-
1018
- - [`b5792bd`](https://github.com/joelhooks/swarm-tools/commit/b5792bd5f6aa4bf3ad9757fe351bc144e84f09af) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🎯 Coordinators Remember Who They Are
1019
-
1020
- Fixed the compaction bug where coordinators lost their identity after context compression.
1021
-
1022
- **The Problem:**
1023
- After compaction, coordinators would wake up and start doing worker tasks directly (running tests, editing files) instead of spawning workers. The injected context said "you are a coordinator" but gave worker-style resume commands.
1024
-
1025
- **The Fix:**
1026
- `buildDynamicSwarmState()` now generates coordinator-focused context:
1027
-
1028
- ```
1029
- ## 🎯 YOU ARE THE COORDINATOR
1030
-
1031
- **Primary role:** Orchestrate workers, review their output, unblock dependencies.
1032
- **Spawn workers** for implementation tasks - don't do them yourself.
1033
-
1034
- **RESUME STEPS:**
1035
- 1. Check swarm status: `swarm_status(epic_id="bd-actual-id", ...)`
1036
- 2. Check inbox: `swarmmail_inbox(limit=5)`
1037
- 3. For in_progress subtasks: Review with `swarm_review`
1038
- 4. For open subtasks: Spawn workers with `swarm_spawn_subtask`
1039
- 5. For blocked subtasks: Investigate and unblock
1040
- ```
1041
-
1042
- Also captures specific swarm state during detection:
1043
-
1044
- - Epic ID and title (not placeholders)
1045
- - Subtask counts by status
1046
- - Actual project path
1047
-
1048
- **New eval infrastructure:**
1049
-
1050
- - `coordinator-behavior.eval.ts` - LLM-as-judge eval testing whether Claude actually behaves like a coordinator given the injected context
1051
- - Scorers for coordinator tools, avoiding worker behaviors, and coordinator mindset
1052
-
1053
- > "The coordinator's job is to keep the swarm cooking, not to cook themselves."
1054
-
1055
- - Updated dependencies [[`a78a40d`](https://github.com/joelhooks/swarm-tools/commit/a78a40de32eb34d1738b208f2a36929a4ab6cb81), [`5a7c084`](https://github.com/joelhooks/swarm-tools/commit/5a7c084514297b5b9ca5df9459a74f18eb805b8a)]:
1056
- - swarm-mail@1.5.0
1057
-
1058
- ## 0.33.0
1059
-
1060
- ### Minor Changes
1061
-
1062
- - [`c41abcf`](https://github.com/joelhooks/swarm-tools/commit/c41abcfa37292b72fe41e0cf9d25c6612ae75fa2) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🎓 Skills Grow Up: Discovery Moves to OpenCode
1063
-
1064
- > _"The best code is no code at all. Every new line of code you willingly bring into the world is code that has to be debugged, code that has to be read and understood, code that has to be supported."_
1065
- > — Jeff Atwood
1066
-
1067
- Skills outgrew the nest. OpenCode is shipping native skills support following the [Agent Skills spec](https://spec.agentskills.com/), and our discovery tools are now redundant. Time to deprecate the scaffolding and let the platform handle what it does best.
1068
-
1069
- ### What Changed
1070
-
1071
- **Deprecated Tools** (soft deprecation with console warnings):
1072
-
1073
- - `skills_list` - OpenCode will handle discovery natively
1074
- - `skills_use` - OpenCode will handle loading via `use skill <name>` syntax
1075
- - `skills_read` - OpenCode will handle resource access transparently
1076
- - `skills_execute` - OpenCode will handle script execution in skill context
1077
-
1078
- **Authoring Tools Kept** (fully functional, no changes):
1079
-
1080
- - `skills_create` - Create new skills with SKILL.md template
1081
- - `skills_update` - Update existing skill content
1082
- - `skills_init` - Initialize skills directory in projects
1083
- - `skills_add_script` - Add executable scripts to skills
1084
- - `skills_delete` - Remove project skills
1085
-
1086
- **Bundled Skills** - All 6 global skills remain intact and spec-compliant:
1087
-
1088
- - `testing-patterns` - Feathers seams + Beck's 4 rules
1089
- - `swarm-coordination` - Multi-agent task orchestration
1090
- - `cli-builder` - Command-line interface patterns
1091
- - `learning-systems` - Confidence decay, pattern maturity
1092
- - `skill-creator` - Meta-skill for authoring new skills
1093
- - `system-design` - Architecture decision frameworks
1094
-
1095
- ### Why It Matters
1096
-
1097
- **Before:** Two overlapping skill systems causing confusion. Agents could use plugin tools OR OpenCode's native syntax, with different behavior and semantics.
1098
-
1099
- **After:** One canonical path. OpenCode owns discovery and loading. Plugin owns authoring and validation. Clean separation of concerns.
1100
-
1101
- **Benefits:**
1102
-
1103
- - No tool conflicts between plugin and platform
1104
- - Native OpenCode syntax (`use skill testing-patterns`) works seamlessly
1105
- - Simpler mental model for users
1106
- - Authoring tools remain for creating spec-compliant skills
1107
-
1108
- ### Migration Path
1109
-
1110
- **For Discovery/Loading:**
1111
-
1112
- ```typescript
1113
- // OLD (deprecated, still works but warns)
1114
- skills_list()
1115
- skills_use(name="testing-patterns")
1116
-
1117
- // NEW (OpenCode native syntax)
1118
- use skill testing-patterns
1119
- use skill cli-builder with "building argument parser"
1120
- ```
1121
-
1122
- **For Authoring (no change needed):**
1123
-
1124
- ```typescript
1125
- // Still fully supported
1126
- skills_create((name = "my-skill"), (description = "Domain expertise"));
1127
- skills_update((name = "my-skill"), (content = "Updated SKILL.md"));
1128
- skills_add_script(
1129
- (skill_name = "my-skill"),
1130
- (script_name = "validate.ts"),
1131
- (content = "...")
1132
- );
1133
- ```
1134
-
1135
- ### Backward Compatibility
1136
-
1137
- **Yes, with warnings.** Deprecated tools continue to function but emit console warnings directing users to OpenCode's native syntax. No breaking changes in this release.
1138
-
1139
- Future major version (v1.0) will remove deprecated discovery tools entirely. Authoring tools remain permanent.
1140
-
1141
- ### What This Means for Bundled Skills
1142
-
1143
- Nothing changes. All 6 global skills ship with the plugin and are accessible via OpenCode's native `use skill <name>` syntax. They follow the Agent Skills spec and work identically whether loaded via deprecated plugin tools or native OpenCode.
1144
-
1145
- The `global-skills/` directory remains the canonical source for our curated skill library.
1146
-
1147
- - [`4feebaf`](https://github.com/joelhooks/swarm-tools/commit/4feebafed61caa8e2e8729b44bd415d71afd6834) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 LLM-Powered Compaction: The Swarm Remembers
1148
-
1149
- > "The best way to predict the future is to invent it." — Alan Kay
1150
-
1151
- Compaction just got smarter. Instead of static "here's what to preserve" instructions, the swarm now **generates dynamic continuation prompts** with actual state data.
1152
-
1153
- **What changed:**
1154
-
1155
- The `experimental.session.compacting` hook now uses a three-level fallback chain:
1156
-
1157
- 1. **LLM-Generated Prompt** (NEW) - Queries actual swarm state (cells, epics, subtasks), shells out to `opencode run -m <liteModel>` to generate a structured continuation prompt with real IDs, real status, real next actions
1158
- 2. **Static Context** - Falls back to `SWARM_COMPACTION_CONTEXT` if LLM fails
1159
- 3. **Detection Fallback** - For low-confidence swarm detection, injects `SWARM_DETECTION_FALLBACK`
1160
- 4. **None** - No injection if no swarm evidence
1161
-
1162
- **Progressive Enhancement:**
1163
-
1164
- Uses OpenCode PR #5907's new `output.prompt` API when available:
1165
-
1166
- ```typescript
1167
- if ("prompt" in output) {
1168
- output.prompt = llmGeneratedPrompt; // Replaces entire compaction prompt
1169
- } else {
1170
- output.context.push(llmGeneratedPrompt); // Old API fallback
1171
- }
1172
- ```
1173
-
1174
- **New interfaces:**
1175
-
1176
- - `SwarmStateSnapshot` - Structured state for LLM input
1177
- - `querySwarmState()` - Queries cells via swarm CLI
1178
- - `generateCompactionPrompt()` - Shells out to lite model (30s timeout)
1179
-
1180
- **Why it matters:**
1181
-
1182
- Before: "Hey, you should preserve swarm state" (agent has to figure out what that means)
1183
- After: "Here's epic bd-xyz with 3/5 subtasks done, bd-xyz.2 is blocked on auth, spawn bd-xyz.4 next"
1184
-
1185
- The coordinator wakes up from compaction with **concrete data**, not instructions to go find data.
1186
-
1187
- **Backward compatible:** Falls back gracefully on older OpenCode versions or LLM failures.
1188
-
1189
- - [`652fd16`](https://github.com/joelhooks/swarm-tools/commit/652fd16ff424eff92ebb3f5da0599caf676de2ce) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🔭 Observability Stack MVP: See What Your Swarm Is Doing
1190
-
1191
- > "You can't improve what you can't measure." — Peter Drucker
1192
-
1193
- The swarm just got eyes. This release adds comprehensive observability for multi-agent coordination, answering the eternal question: "Why did my epic fail?"
1194
-
1195
- ### What's New
1196
-
1197
- **Structured Error Classes** (swarm-mail)
1198
-
1199
- - `BaseSwarmError` with rich context: agent, bead_id, epic_id, timestamp, recent events
1200
- - Specialized errors: `ReservationError`, `CheckpointError`, `ValidationError`, `DecompositionError`
1201
- - Every error includes actionable suggestions for resolution
1202
- - Full `toJSON()` serialization for logging and debugging
1203
-
1204
- **DEBUG Logging** (swarm-mail)
1205
-
1206
- - `DEBUG=swarm:*` environment variable filtering
1207
- - 4 subsystems: `swarm:events`, `swarm:reservations`, `swarm:messages`, `swarm:checkpoints`
1208
- - Zero overhead when disabled
1209
-
1210
- **swarm-db CLI** (swarm-mail)
1211
-
1212
- ```bash
1213
- # Raw SQL queries (SELECT only, max 1000 rows)
1214
- swarm-db query "SELECT type, COUNT(*) FROM events GROUP BY type"
1215
-
1216
- # Pre-built analytics
1217
- swarm-db analytics failed-decompositions --since 7d --format json
1218
-
1219
- # List available analytics
1220
- swarm-db list
1221
- ```
1222
-
1223
- **10 Pre-built Analytics Queries** (Four Golden Signals mapped)
1224
- | Query | What It Answers |
1225
- |-------|-----------------|
1226
- | `failed-decompositions` | Which strategies are failing? |
1227
- | `strategy-success-rates` | What's working? |
1228
- | `lock-contention` | Where are agents fighting over files? |
1229
- | `agent-activity` | Who's doing what? |
1230
- | `message-latency` | How fast is coordination? |
1231
- | `scope-violations` | Who's touching files they shouldn't? |
1232
- | `task-duration` | How long do tasks take? |
1233
- | `checkpoint-frequency` | Are agents checkpointing enough? |
1234
- | `recovery-success` | Do checkpoints actually help? |
1235
- | `human-feedback` | What are reviewers rejecting? |
1236
-
1237
- **Agent-Facing Tools** (opencode-swarm-plugin)
1238
-
1239
- ```typescript
1240
- // Query analytics programmatically
1241
- swarm_analytics({
1242
- query: "failed-decompositions",
1243
- since: "7d",
1244
- format: "summary",
1245
- });
1246
-
1247
- // Raw SQL for power users (max 50 rows, context-safe)
1248
- swarm_query({ sql: "SELECT * FROM events WHERE type = 'task_blocked'" });
1249
-
1250
- // Auto-diagnosis for debugging
1251
- swarm_diagnose({
1252
- epic_id: "bd-123",
1253
- include: ["blockers", "errors", "timeline"],
1254
- });
1255
-
1256
- // Learning insights for feedback loops
1257
- swarm_insights({ scope: "epic", metrics: ["success_rate", "avg_duration"] });
1258
- ```
1259
-
1260
- ### Why This Matters
1261
-
1262
- Before: "The swarm failed. No idea why."
1263
- After: "Strategy X failed 80% of the time due to file conflicts. Switching to Y."
1264
-
1265
- Event sourcing was already 80% of the solution. This release adds the diagnostic views to make that data actionable.
1266
-
1267
- ### Test Coverage
1268
-
1269
- - 588 tests passing
1270
- - 1214 assertions
1271
- - Full TDD: every feature started with a failing test
1272
-
1273
- - [`ca9936d`](https://github.com/joelhooks/swarm-tools/commit/ca9936d09b749449ef3c88fd3ec8b937f6ed7c29) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🔬 Research Phase: Docs Before Decomposition
1274
-
1275
- Swarm coordinators now gather documentation BEFORE breaking down tasks. No more workers fumbling through outdated API assumptions.
1276
-
1277
- **What's New:**
1278
-
1279
- - **swarm/researcher agent** - READ-ONLY doc gatherer that discovers tools, reads lockfiles, fetches version-specific docs, and stores findings in semantic-memory
1280
- - **Pre-decomposition research** - Coordinator analyzes task → identifies tech stack → spawns researchers → injects findings into shared_context
1281
- - **On-demand research for workers** - Workers can spawn researchers when hitting unknowns mid-task
1282
- - **`--check-upgrades` flag** - Compare installed vs latest versions from npm registry
1283
-
1284
- **New Tools:**
1285
-
1286
- | Tool | Purpose |
1287
- | ------------------------ | ----------------------------------------------------------- |
1288
- | `swarm_discover_tools` | Runtime discovery of available doc tools (MCP, CLI, skills) |
1289
- | `swarm_get_versions` | Parse lockfiles (npm/pnpm/yarn/bun) for installed versions |
1290
- | `swarm_spawn_researcher` | Generate researcher prompt for Task tool |
1291
- | `swarm_research_phase` | Manual trigger for research orchestration |
1292
-
1293
- **Architecture:**
1294
-
1295
- ```
1296
- Coordinator receives task
1297
-
1298
- runResearchPhase(task, projectPath)
1299
-
1300
- extractTechStack() → identify technologies
1301
- discoverDocTools() → find available tools
1302
- getInstalledVersions() → read lockfiles
1303
- Spawn researchers (parallel)
1304
- Collect summaries → shared_context
1305
-
1306
- Normal decomposition with enriched context
1307
- ```
1308
-
1309
- **Why This Matters:**
1310
-
1311
- Workers now start with version-specific documentation instead of hallucinating APIs. Researchers store detailed findings in semantic-memory, so future agents don't repeat the research.
1312
-
1313
- ### Patch Changes
1314
-
1315
- - Updated dependencies [[`652fd16`](https://github.com/joelhooks/swarm-tools/commit/652fd16ff424eff92ebb3f5da0599caf676de2ce)]:
1316
- - swarm-mail@1.4.0
1317
-
1318
- ## 0.32.0
1319
-
1320
- ### Minor Changes
1321
-
1322
- - [#54](https://github.com/joelhooks/swarm-tools/pull/54) [`358e18f`](https://github.com/joelhooks/swarm-tools/commit/358e18f0f7f18d03492ef16c2c1d3edd85c00101) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🔍 Coordinator Review Gate + UBS Removal
1323
-
1324
- > _"This asynchronous back and forth between submitter and reviewer can add days to the process of getting changes made. Do Code Reviews Promptly!"_
1325
- > — Sam Newman, _Building Microservices_
1326
-
1327
- Two changes that make swarm coordination tighter:
1328
-
1329
- ### Coordinator Review Tools
1330
-
1331
- New tools for coordinators to review worker output before approval:
1332
-
1333
- ```
1334
- ┌─────────────────────────────────────────────────────┐
1335
- │ COORDINATOR REVIEW FLOW │
1336
- ├─────────────────────────────────────────────────────┤
1337
- │ 1. Worker completes → sends completion message │
1338
- │ 2. Coordinator: swarm_review(task_id, files) │
1339
- │ → Gets diff + epic context + review prompt │
1340
- │ 3. Coordinator reviews against epic goals │
1341
- │ 4. swarm_review_feedback(status, issues) │
1342
- │ → approved: worker can finalize │
1343
- │ → needs_changes: worker gets feedback │
1344
- │ 5. 3-strike rule: 3 rejections = blocked │
1345
- └─────────────────────────────────────────────────────┘
1346
- ```
1347
-
1348
- **New tools:**
1349
-
1350
- - `swarm_review` - Generate review prompt with epic context + git diff
1351
- - `swarm_review_feedback` - Send approval/rejection with structured issues
1352
-
1353
- **Updated prompts:**
1354
-
1355
- - Coordinator prompt now includes review checklist
1356
- - Worker prompt explains the review gate
1357
- - Skills updated with review patterns
1358
-
1359
- ### UBS Scan Removed from swarm_complete
1360
-
1361
- The `skip_ubs_scan` parameter is gone. UBS was already disabled in v0.31 for performance - this cleans up the vestigial code.
1362
-
1363
- **Removed:**
1364
-
1365
- - `skip_ubs_scan` parameter from schema
1366
- - `ubs_scan` deprecation object from output
1367
- - All UBS-related helper functions
1368
- - ~100 lines of dead code
1369
-
1370
- **If you need UBS scanning:** Run it manually before commit:
1371
-
1372
- ```bash
1373
- ubs scan src/
1374
- ```
1375
-
1376
- ### CLI Improvements
1377
-
1378
- The `swarm` CLI got smarter:
1379
-
1380
- - Better error messages for missing dependencies
1381
- - Cleaner output formatting
1382
- - Improved help text
1383
-
1384
- ### Patch Changes
1385
-
1386
- - [#54](https://github.com/joelhooks/swarm-tools/pull/54) [`358e18f`](https://github.com/joelhooks/swarm-tools/commit/358e18f0f7f18d03492ef16c2c1d3edd85c00101) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🧪 Integration Test Coverage: 0% → 95%
1387
-
1388
- > _"Many characterization tests look like 'sunny day' tests. They don't test many special conditions; they just verify that particular behaviors are present. From their presence, we can infer that refactoring hasn't broken anything."_
1389
- > — Michael Feathers, _Working Effectively with Legacy Code_
1390
-
1391
- We had a bug that broke ALL swarm tools:
1392
-
1393
- ```
1394
- Error: [streams/store] dbOverride parameter is required for this function.
1395
- PGlite getDatabase() has been removed.
1396
- ```
1397
-
1398
- **Why didn't tests catch it?** No integration tests exercised the full tool → store → DB path.
1399
-
1400
- **Now they do.**
1401
-
1402
- ```
1403
- ┌─────────────────────────────────────────────────────────────────┐
1404
- │ tool-adapter.integration.test.ts │
1405
- ├─────────────────────────────────────────────────────────────────┤
1406
- │ 20 tests | 75 assertions | 1.3s │
1407
- │ │
1408
- │ ✅ swarmmail_* tools (6 tests) │
1409
- │ ✅ hive_* tools (7 tests) │
1410
- │ ✅ swarm_progress, swarm_status (2 tests) │
1411
- │ ✅ swarm_broadcast, swarm_checkpoint (2 tests) │
1412
- │ ✅ semantic_memory_store, semantic_memory_find (2 tests) │
1413
- │ ✅ Smoke test - 9 tools in sequence (1 test) │
1414
- └─────────────────────────────────────────────────────────────────┘
1415
- ```
1416
-
1417
- ### What's Tested
1418
-
1419
- Each test calls `tool.execute()` and verifies:
1420
-
1421
- 1. No "dbOverride required" error (the bug symptom)
1422
- 2. Tool returns expected structure
1423
- 3. Full path works: tool → store → DB → response
1424
-
1425
- ### The Smoke Test
1426
-
1427
- Runs 9 tools in sequence to catch interaction bugs:
1428
-
1429
- ```
1430
- swarmmail_init → hive_create → swarmmail_reserve → swarm_progress
1431
- → semantic_memory_store → semantic_memory_find → swarmmail_send
1432
- → hive_close → swarmmail_release
1433
- ```
1434
-
1435
- If ANY step throws "dbOverride required", the test fails.
1436
-
1437
- ### Also Fixed
1438
-
1439
- - **Auto-adapter creation** in store.ts - functions now auto-create adapters when not provided
1440
- - **Exported `clearAdapterCache()`** for test isolation
1441
- - **Migrated test files** from old `getDatabase()` to adapter pattern
1442
-
1443
- ### Mandatory Coordinator Review Loop
1444
-
1445
- Added `COORDINATOR_POST_WORKER_CHECKLIST` constant and `post_completion_instructions` field to `swarm_spawn_subtask`. Coordinators now get explicit instructions to review worker output before spawning the next worker.
1446
-
1447
- The "dbOverride required" bug **cannot recur undetected**.
1448
-
1449
- - Updated dependencies [[`358e18f`](https://github.com/joelhooks/swarm-tools/commit/358e18f0f7f18d03492ef16c2c1d3edd85c00101), [`358e18f`](https://github.com/joelhooks/swarm-tools/commit/358e18f0f7f18d03492ef16c2c1d3edd85c00101), [`358e18f`](https://github.com/joelhooks/swarm-tools/commit/358e18f0f7f18d03492ef16c2c1d3edd85c00101), [`358e18f`](https://github.com/joelhooks/swarm-tools/commit/358e18f0f7f18d03492ef16c2c1d3edd85c00101)]:
1450
- - swarm-mail@1.3.0
1451
-
1452
- ## 0.31.7
1453
-
1454
- ### Patch Changes
1455
-
1456
- - [`97e89a6`](https://github.com/joelhooks/swarm-tools/commit/97e89a6d944b70f205eeb83eb3f2c55a42f5dc08) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Setup Skips Already-Migrated Memories
1457
-
1458
- `swarm setup` now detects when semantic memories have already been migrated and skips the migration prompt entirely.
1459
-
1460
- **Before:** Setup would prompt "Migrate to swarm-mail database?" even when all memories were already migrated, then hang.
1461
-
1462
- **After:** Setup checks if target database has memories first. If already migrated, shows dim "Already migrated to swarm-mail" and moves on.
1463
-
1464
- **Changes:**
1465
-
1466
- - Added `targetHasMemories(targetDb)` function to swarm-mail
1467
- - Updated setup flow to check target before prompting
1468
- - Fixed connection cleanup in all code paths (try/finally pattern)
1469
- - Suppressed internal PGLite NOTICE messages from user output
1470
-
1471
- **Root cause of hang:** PGLite connection wasn't being closed in all paths, keeping the Node.js event loop alive indefinitely.
1472
-
1473
- - Updated dependencies [[`97e89a6`](https://github.com/joelhooks/swarm-tools/commit/97e89a6d944b70f205eeb83eb3f2c55a42f5dc08)]:
1474
- - swarm-mail@1.2.2
1475
-
1476
- ## 0.31.6
1477
-
1478
- ### Patch Changes
1479
-
1480
- - [`3147d36`](https://github.com/joelhooks/swarm-tools/commit/3147d36cf2355b9cfe461c7dfc3b30675ea36d89) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🚪 Setup Now Exits Cleanly After Migration
1481
-
1482
- Fixed a process hang where `swarm setup` would complete the migration but never exit.
1483
-
1484
- **Root cause:** The PGLite connection created for memory migration kept the Node.js event loop alive indefinitely.
1485
-
1486
- **Fix:** Close the swarmMail connection after migration completes. The connection is scoped to the migration block and not needed afterward.
1487
-
1488
- ```typescript
1489
- // After migration completes
1490
- await swarmMail.close();
1491
- ```
1492
-
1493
- **Before:** `swarm setup` hangs after "Migration complete" message
1494
- **After:** Process exits cleanly, returns to shell
1495
-
1496
- ## 0.31.5
1497
-
1498
- ### Patch Changes
1499
-
1500
- - Updated dependencies [[`64368aa`](https://github.com/joelhooks/swarm-tools/commit/64368aa6106089346cd2b1324f6235d5c673964b)]:
1501
- - swarm-mail@1.2.1
1502
-
1503
- ## 0.31.4
1504
-
1505
- ### Patch Changes
1506
-
1507
- - Updated dependencies [[`70ff3e0`](https://github.com/joelhooks/swarm-tools/commit/70ff3e054cd1991154f7631ce078798de1076ba8)]:
1508
- - swarm-mail@1.2.0
1509
-
1510
- ## 0.31.3
1511
-
1512
- ### Patch Changes
1513
-
1514
- - [`fdddd27`](https://github.com/joelhooks/swarm-tools/commit/fdddd27f9c8627f7de2b9f108827c66c7040b049) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Short Hashes Now Welcome
1515
-
1516
- The WorkerHandoff schema was too strict - it rejected short project names and partial hashes.
1517
-
1518
- **Before:** Required 3+ hyphen-separated segments (regex nightmare)
1519
-
1520
- ```
1521
- /^[a-z0-9]+(-[a-z0-9]+){2,}(\.[\w-]+)?$/
1522
- ```
1523
-
1524
- **After:** Any non-empty string, validated at runtime via `resolvePartialId()`
1525
-
1526
- Now you can use:
1527
-
1528
- - Full IDs: `opencode-swarm-monorepo-lf2p4u-mjd4pjujc7e`
1529
- - Short hashes: `mjd4pjujc7e`
1530
- - Partial hashes: `mjd4pjuj`
1531
-
1532
- The hive tools already had smart ID resolution - we just needed to stop blocking it at the schema level.
1533
-
1534
- ## 0.31.2
1535
-
1536
- ### Patch Changes
1537
-
1538
- - [`d5ec86e`](https://github.com/joelhooks/swarm-tools/commit/d5ec86e77bdb1cd06cf168946aaaff91208dfac1) Thanks [@joelhooks](https://github.com/joelhooks)! - Rebuild with fixed swarm-mail dependency (bigint date fix)
1539
-
1540
- ## 0.31.1
1541
-
1542
- ### Patch Changes
1543
-
1544
- - [`19995a6`](https://github.com/joelhooks/swarm-tools/commit/19995a68dd1283de1d13afa6fc028bd1273d1b27) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Squashed the BigInt Date Bug
1545
-
1546
- PGLite returns BIGINT columns as JavaScript `bigint` type. The `Date` constructor throws when given a bigint:
1547
-
1548
- ```javascript
1549
- new Date(1734628445371n); // TypeError: Cannot convert a BigInt value to a number
1550
- ```
1551
-
1552
- This caused `Invalid Date` errors in all hive operations (`hive_query`, `hive_create`, etc).
1553
-
1554
- **Fix:** Wrap timestamps in `Number()` before passing to `Date`:
1555
-
1556
- ```typescript
1557
- // Before (broken)
1558
- new Date(cell.created_at);
1559
-
1560
- // After (works with both number and bigint)
1561
- new Date(Number(cell.created_at));
1562
- ```
1563
-
1564
- **Files fixed:**
1565
-
1566
- - `swarm-mail/src/hive/jsonl.ts` - JSONL export functions
1567
- - `opencode-swarm-plugin/src/hive.ts` - `formatCellForOutput()`
1568
-
1569
- **Tests added:** 6 new tests covering bigint date handling edge cases.
1570
-
1571
- - Updated dependencies [[`19995a6`](https://github.com/joelhooks/swarm-tools/commit/19995a68dd1283de1d13afa6fc028bd1273d1b27)]:
1572
- - swarm-mail@1.1.1
1573
-
1574
- ## 0.31.0
1575
-
1576
- ### Minor Changes
1577
-
1578
- - [`39593d7`](https://github.com/joelhooks/swarm-tools/commit/39593d7ee817c683ad1877af52ad5f2ca140c4e2) Thanks [@joelhooks](https://github.com/joelhooks)! - ## Smart ID Resolution: Git-Style Partial Hashes for Hive
1579
-
1580
- ```
1581
- ┌─────────────────────────────────────────────────────────────┐
1582
- │ BEFORE: hive_close(id="opencode-swarm-monorepo-lf2p4u-mjcadqq3fb9") │
1583
- │ AFTER: hive_close(id="mjcadqq3fb9") │
1584
- └─────────────────────────────────────────────────────────────┘
1585
- ```
1586
-
1587
- Cell IDs got long. Now you can use just the hash portion.
1588
-
1589
- **What changed:**
1590
-
1591
- ### swarm-mail
1592
-
1593
- - Added `resolvePartialId(adapter, partialId)` to resolve partial hashes to full cell IDs
1594
- - Supports exact match, prefix match, suffix match, and substring match
1595
- - Returns helpful error messages for ambiguous matches ("Found 3 cells matching 'abc': ...")
1596
- - 36 new tests covering all resolution scenarios
1597
-
1598
- ### opencode-swarm-plugin
1599
-
1600
- - `hive_update`, `hive_close`, `hive_start` now accept partial IDs
1601
- - Resolution happens transparently - full ID returned in response
1602
- - Backward compatible - full IDs still work
1603
-
1604
- **JSONL Fix (bonus):**
1605
-
1606
- - `serializeToJSONL()` now adds trailing newline for POSIX compliance
1607
- - Prevents parse errors when appending to existing files
1608
-
1609
- **Why it matters:**
1610
-
1611
- - Less typing, fewer copy-paste errors
1612
- - Matches git's partial SHA workflow (muscle memory)
1613
- - Ambiguous matches fail fast with actionable error messages
1614
-
1615
- > "The best interface is no interface" - Golden Krishna
1616
- > (But if you must have one, make it forgive typos)
1617
-
1618
- ***
1619
-
1620
- ## Auto-Sync at Key Events
1621
-
1622
- ```
1623
- ┌─────────────────────────────────────────┐
1624
- │ hive_create_epic → auto-sync │
1625
- │ swarm_complete → auto-sync │
1626
- │ process.exit → safety net sync │
1627
- └─────────────────────────────────────────┘
1628
- ```
1629
-
1630
- Cells no longer get lost when processes exit unexpectedly.
1631
-
1632
- **What changed:**
1633
-
1634
- - `hive_create_epic` syncs after creating epic + subtasks (workers can see them immediately)
1635
- - `swarm_complete` syncs before worker exits (completed work persists)
1636
- - `process.on('beforeExit')` hook catches any remaining dirty cells
1637
-
1638
- **Why it matters:**
1639
-
1640
- - Spawned workers couldn't see cells created by coordinator (race condition)
1641
- - Worker crashes could lose completed work
1642
- - Now the lazy-write pattern has strategic checkpoints
1643
-
1644
- ***
1645
-
1646
- ## Removed Arbitrary Subtask Limits
1647
-
1648
- ```
1649
- BEFORE: max_subtasks capped at 10 (why tho?)
1650
- AFTER: no limit - LLM decides based on task complexity
1651
- ```
1652
-
1653
- **What changed:**
1654
-
1655
- - Removed `.max(10)` from `swarm_decompose` and `swarm_plan_prompt`
1656
- - `max_subtasks` is now optional with no default
1657
- - Prompt says "as many as needed" instead of "2-10"
1658
-
1659
- **Why it matters:**
1660
-
1661
- - Complex epics need more than 10 subtasks
1662
- - Arbitrary limits force awkward decomposition
1663
- - Trust the coordinator to make good decisions
1664
-
1665
- ### Patch Changes
1666
-
1667
- - Updated dependencies [[`39593d7`](https://github.com/joelhooks/swarm-tools/commit/39593d7ee817c683ad1877af52ad5f2ca140c4e2)]:
1668
- - swarm-mail@1.1.0
1669
-
1670
- ## 0.30.7
1671
-
1672
- ### Patch Changes
1673
-
1674
- - Updated dependencies [[`230e9aa`](https://github.com/joelhooks/swarm-tools/commit/230e9aa91708610183119680cb5f6924c1089552), [`181fdd5`](https://github.com/joelhooks/swarm-tools/commit/181fdd507b957ceb95e069ae71d527d3f7e1b940)]:
1675
- - swarm-mail@1.0.0
1676
-
1677
- ## 0.30.6
1678
-
1679
- ### Patch Changes
1680
-
1681
- - [`32a2885`](https://github.com/joelhooks/swarm-tools/commit/32a2885115cc3e574e86d8e492f60ee189627488) Thanks [@joelhooks](https://github.com/joelhooks)! - chore: verify CI publish flow works
1682
-
1683
- ## 0.30.5
1684
-
1685
- ### Patch Changes
1686
-
1687
- - [`08e61ab`](https://github.com/joelhooks/swarm-tools/commit/08e61abd96ced0443a5ac5dca0e8f362ed869075) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Workers Now Choose Their Own Model
1688
-
1689
- Added intelligent model selection for swarm workers based on task characteristics.
1690
-
1691
- **What changed:**
1692
-
1693
- - `swarm setup` now asks for a "lite model" preference (docs/tests/simple edits)
1694
- - New `selectWorkerModel()` function auto-selects based on file types
1695
- - `swarm_spawn_subtask` includes `recommended_model` in metadata
1696
- - `DecomposedSubtask` schema supports optional explicit `model` field
1697
-
1698
- **Model selection priority:**
1699
-
1700
- 1. Explicit `model` field in subtask (if specified)
1701
- 2. File-type inference:
1702
- - All `.md`/`.mdx` files → lite model
1703
- - All `.test.`/`.spec.` files → lite model
1704
- 3. Mixed or implementation files → primary model
1705
-
1706
- **Why it matters:**
1707
-
1708
- - Cost savings: docs and tests don't need expensive models
1709
- - Faster execution: lite models are snappier for simple tasks
1710
- - Better defaults: right-sized models for each subtask type
1711
- - Still flexible: coordinators can override per-subtask
1712
-
1713
- **Backward compatible:**
1714
-
1715
- - Existing workflows continue to work
1716
- - Model selection is transparent to agents
1717
- - Defaults to primary model if lite model not configured
1718
-
1719
- **Example:**
1720
-
1721
- ```typescript
1722
- // Subtask with all markdown files
1723
- { files: ["README.md", "docs/guide.mdx"] }
1724
- // → selects lite model (haiku)
1725
-
1726
- // Subtask with mixed files
1727
- { files: ["src/auth.ts", "README.md"] }
1728
- // → selects primary model (sonnet)
1729
-
1730
- // Explicit override
1731
- { files: ["complex-refactor.ts"], model: "anthropic/claude-opus-4-5" }
1732
- // → uses opus as specified
1733
- ```
1734
-
1735
- ## 0.30.4
1736
-
1737
- ### Patch Changes
1738
-
1739
- - [`1c9a2e8`](https://github.com/joelhooks/swarm-tools/commit/1c9a2e8a148b79a33cb8c5b565e485f33d1f617c) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Fix Migration Adapter Type (for real this time)
1740
-
1741
- The previous release (0.30.3) was published before this fix landed. Now it's actually in.
1742
-
1743
- **The Bug:**
1744
-
1745
- ```
1746
- targetDb.query is not a function
1747
- ```
1748
-
1749
- **Root Cause:**
1750
- `getSwarmMail()` returns `SwarmMailAdapter`, not `DatabaseAdapter`. Need to call `getDatabase()` first.
1751
-
1752
- **The Fix:**
1753
-
1754
- ```typescript
1755
- const swarmMail = await getSwarmMail(cwd);
1756
- const targetDb = await swarmMail.getDatabase(cwd);
1757
- ```
1758
-
1759
- ## 0.30.3
1760
-
1761
- ### Patch Changes
1762
-
1763
- - [`cc84c8f`](https://github.com/joelhooks/swarm-tools/commit/cc84c8f066696c7625dc307a5163ff50d672634e) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Fix Migration Adapter Type Mismatch
1764
-
1765
- > _"The compiler is your friend. Listen to it."_
1766
- > — Every TypeScript developer, eventually
1767
-
1768
- Fixed a runtime error in `swarm setup` where the legacy memory migration was receiving a `SwarmMailAdapter` instead of a `DatabaseAdapter`.
1769
-
1770
- **The Bug:**
1771
-
1772
- ```
1773
- targetDb.query is not a function
1774
- ```
1775
-
1776
- **Root Cause:**
1777
- `getSwarmMail()` returns a `SwarmMailAdapter` which has `getDatabase()` method, not a direct `query()` method. The migration code expected a `DatabaseAdapter`.
1778
-
1779
- **The Fix:**
1780
-
1781
- ```typescript
1782
- // Before (wrong)
1783
- const targetDb = await getSwarmMail(cwd);
1784
-
1785
- // After (correct)
1786
- const swarmMail = await getSwarmMail(cwd);
1787
- const targetDb = await swarmMail.getDatabase(cwd);
1788
- ```
1789
-
1790
- **Test Added:**
1791
- New test case verifies that passing an invalid adapter (without `query()`) fails gracefully with a descriptive error instead of crashing.
1792
-
1793
- - [`1e41c9b`](https://github.com/joelhooks/swarm-tools/commit/1e41c9b42ae468761f813d406171d182fb9948e0) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Semantic Memory Consolidation
1794
-
1795
- > _"Simplicity is the ultimate sophistication."_
1796
- > — Leonardo da Vinci
1797
-
1798
- The semantic memory system has moved into swarm-mail, bringing persistent learning to the hive.
1799
-
1800
- ### What's New
1801
-
1802
- **Semantic Memory in swarm-mail:**
1803
-
1804
- - `createSemanticMemory()` - Initialize memory store with PGLite + Ollama embeddings
1805
- - `getMigrationStatus()` - Check if legacy memory needs migration
1806
- - `migrateLegacyMemory()` - Migrate from old semantic-memory-mcp format
1807
- - Automatic migration on first use (no manual intervention needed)
1808
-
1809
- **Legacy Migration:**
1810
-
1811
- - Detects old `~/.semantic-memory/` databases
1812
- - Migrates memories, embeddings, and metadata
1813
- - Preserves all tags and timestamps
1814
- - Creates backup before migration
1815
-
1816
- **Worker Handoff Protocol:**
1817
-
1818
- - Agents can now hand off work mid-task
1819
- - State preserved via swarm mail messages
1820
- - Enables long-running tasks across context limits
1821
-
1822
- ### Breaking Changes
1823
-
1824
- None - this is additive. The old semantic-memory-mcp still works but is deprecated.
1825
-
1826
- ### Files Added/Changed
1827
-
1828
- - `packages/swarm-mail/src/memory/` - New memory subsystem
1829
- - `packages/swarm-mail/src/memory/migrate-legacy.ts` - Migration tooling
1830
- - `packages/opencode-swarm-plugin/bin/swarm.ts` - Uses new exports
1831
-
1832
- - Updated dependencies [[`1e41c9b`](https://github.com/joelhooks/swarm-tools/commit/1e41c9b42ae468761f813d406171d182fb9948e0)]:
1833
- - swarm-mail@0.5.0
1834
-
1835
- ## 0.30.2
1836
-
1837
- ### Patch Changes
1838
-
1839
- - [`5858148`](https://github.com/joelhooks/swarm-tools/commit/5858148d5785393c0a6993a2595fba275f305707) Thanks [@joelhooks](https://github.com/joelhooks)! - chore: trigger publish workflow
1840
-
1841
- ## 0.30.1
1842
-
1843
- ### Patch Changes
1844
-
1845
- - [`57d5600`](https://github.com/joelhooks/swarm-tools/commit/57d5600a53e148ce1d1da48b3b5a8723a5552e04) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🚦 Review Gate UX Fix + Verbose Setup
1846
-
1847
- > _"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."_
1848
- > — Douglas Adams, _Mostly Harmless_
1849
-
1850
- Two UX improvements that make swarm coordination feel less like shouting into the void.
1851
-
1852
- ### What Changed
1853
-
1854
- **Review Gate Response Fix:**
1855
-
1856
- - `swarm_complete` no longer returns `success: false` when code review is pending
1857
- - Now returns `success: true` with `status: "pending_review"` or `status: "needs_changes"`
1858
- - **Why it matters**: The old format made review checkpoints look like errors. Agents would retry unnecessarily or report failures when the workflow was actually working as designed. Review gates are a feature, not a bug.
1859
-
1860
- **Setup Command Verbosity:**
1861
-
1862
- - Added `p.log.step()` and `p.log.success()` throughout swarm setup
1863
- - Users can now see exactly what's happening: dependency checks, git init, swarm-mail connection
1864
- - **Why it matters**: Silent setup commands feel broken. Explicit progress logs build trust and make debugging easier when setup actually does fail.
1865
-
1866
- ### Why It Matters
1867
-
1868
- **For Agents:**
1869
-
1870
- - No more false-negative responses from review gates
1871
- - Clear workflow state (pending vs. needs changes vs. complete)
1872
- - Reduced retry loops and error noise
1873
-
1874
- **For Users:**
1875
-
1876
- - Setup command shows its work (not a black box)
1877
- - Review process is transparent in logs
1878
- - Easier to diagnose when things actually break
1879
-
1880
- **Backward compatible:** Yes. Existing agents checking for `success: false` will still work, they just won't see false errors anymore.
1881
-
1882
- ## 0.30.0
1883
-
1884
- ### Minor Changes
1885
-
1886
- - [`f3917ad`](https://github.com/joelhooks/swarm-tools/commit/f3917ad911d3c716a2470a01c66bce3500f644f4) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 The Great bd CLI Purge
1887
-
1888
- The `bd` CLI is officially dead. Long live HiveAdapter!
1889
-
1890
- **What changed:**
1891
-
1892
- ### `swarm init` Command Rewritten
1893
-
1894
- - No longer shells out to `bd init` or `bd create`
1895
- - Uses `ensureHiveDirectory()` and `getHiveAdapter()` directly
1896
- - Supports `.beads` → `.hive` migration with user prompts
1897
- - Creates cells via HiveAdapter, not CLI
1898
-
1899
- ### Auto-sync Removed from `index.ts`
1900
-
1901
- - Removed `void $\`bd sync\`.quiet().nothrow()`after`hive_close`
1902
- - Users should call `hive_sync` explicitly at session end
1903
- - This was a fire-and-forget that could race with other operations
1904
-
1905
- ### Plugin Template Updated
1906
-
1907
- - `detectSwarm()` now has confidence levels (HIGH/MEDIUM/LOW/NONE)
1908
- - Added `SWARM_DETECTION_FALLBACK` for uncertain cases
1909
- - Compaction hook injects context based on confidence:
1910
- - HIGH/MEDIUM → Full swarm context
1911
- - LOW → Fallback detection prompt
1912
- - NONE → No injection
1913
-
1914
- ### Error Handling Fixed
1915
-
1916
- - `execTool()` now handles both string and object error formats
1917
- - Fixes "Tool execution failed" generic error from `swarm_complete`
1918
- - Actual error messages now propagate to the agent
1919
-
1920
- **Why it matters:**
1921
-
1922
- - No external CLI dependency for core functionality
1923
- - HiveAdapter is type-safe and testable
1924
- - Plugin works in environments without `bd` installed
1925
- - Better error messages for debugging
1926
-
1927
- **Migration:** Run `swarm setup` to update your deployed plugin.
1928
-
1929
- ## 0.29.0
1930
-
1931
- ### Minor Changes
1932
-
1933
- - [`a2ff1f4`](https://github.com/joelhooks/swarm-tools/commit/a2ff1f4257a2e9857f63abe4e9b941a573f44380) Thanks [@joelhooks](https://github.com/joelhooks)! - ## 🐝 Cell IDs Now Wear Their Project Colors
1934
-
1935
- > _"We may fantasize about being International Men of Mystery, but our code needs to be mundane and clear. One of the most important parts of clear code is good names."_
1936
- > — Martin Fowler, _Refactoring_
1937
-
1938
- Cell IDs finally know where they came from. Instead of anonymous `bd-xxx` prefixes,
1939
- new cells proudly display their project name: `swarm-mail-lf2p4u-abc123`.
1940
-
1941
- ### What Changed
1942
-
1943
- **swarm-mail:**
1944
-
1945
- - `generateBeadId()` now reads `package.json` name field from project directory
1946
- - Added `slugifyProjectName()` for safe ID generation (lowercase, special chars → dashes)
1947
- - Falls back to `cell-` prefix if no package.json or no name field
1948
-
1949
- **opencode-swarm-plugin:**
1950
-
1951
- - Removed all `bd` CLI usage from `swarm-orchestrate.ts` - now uses HiveAdapter
1952
- - Improved compaction hook swarm detection with confidence levels (high/medium/low)
1953
- - Added fallback detection prompt for uncertain swarm states
1954
-
1955
- ### Examples
1956
-
1957
- | Before | After |
1958
- | ----------------------- | ------------------------------- |
1959
- | `bd-lf2p4u-mjbneh7mqah` | `swarm-mail-lf2p4u-mjbneh7mqah` |
1960
- | `bd-abc123-xyz` | `my-cool-app-abc123-xyz` |
1961
- | (no package.json) | `cell-abc123-xyz` |
1962
-
1963
- ### Why It Matters
1964
-
1965
- - **Identifiable at a glance** - Know which project a cell belongs to without looking it up
1966
- - **Multi-project workspaces** - Filter/search cells by project prefix
1967
- - **Terminology cleanup** - Removes legacy "bead" (`bd-`) from user-facing IDs
1968
-
1969
- ### Backward Compatible
1970
-
1971
- Existing `bd-*` IDs still work fine. No migration needed - only NEW cells get project prefixes.
1972
-
1973
- ### Compaction: Keeping the Swarm Alive
1974
-
1975
- > _"Intelligent and structured group dynamics that emerge not from a leader, but from the local interactions of the elements themselves."_
1976
- > — Daniel Shiffman, _The Nature of Code_
1977
-
1978
- The compaction hook now uses multi-signal detection to keep swarms cooking through context compression:
1979
-
1980
- - **HIGH confidence:** Active reservations, in_progress cells → full swarm context
1981
- - **MEDIUM confidence:** Open subtasks, unclosed epics → full swarm context
1982
- - **LOW confidence:** Any cells exist → fallback detection prompt
1983
-
1984
- Philosophy: Err on the side of continuation. A false positive costs context space. A false negative loses the swarm.
1985
-
1986
- ### Patch Changes
1987
-
1988
- - Updated dependencies [[`a2ff1f4`](https://github.com/joelhooks/swarm-tools/commit/a2ff1f4257a2e9857f63abe4e9b941a573f44380)]:
1989
- - swarm-mail@0.4.0
1990
-
1991
- ## 0.28.2
1992
-
1993
- ### Patch Changes
1994
-
1995
- - Updated dependencies [[`90409ef`](https://github.com/joelhooks/swarm-tools/commit/90409ef4f353844b25fe04221bc80d6f930eced2)]:
1996
- - swarm-mail@0.3.4
1997
-
1998
- ## 0.28.1
1999
-
2000
- ### Patch Changes
2001
-
2002
- - [`0ee4f65`](https://github.com/joelhooks/swarm-tools/commit/0ee4f656c2fb2cf62d3ef06d329d9e093d124c33) Thanks [@joelhooks](https://github.com/joelhooks)! - Add postinstall hint and update repo URL
2003
-
2004
- - Show "Run swarm setup" hint after npm install
2005
- - Update repo URL to github.com/joelhooks/swarm-tools
2006
- - Add "Get started" commands to version output
2007
-
2008
- ## 0.28.0
2009
-
2010
- ### Minor Changes
2011
-
2012
- - [`de2fa62`](https://github.com/joelhooks/swarm-tools/commit/de2fa628524b88511e06164104ff7b5fb93d39e5) Thanks [@joelhooks](https://github.com/joelhooks)! - Add full beads→hive migration pipeline with JSONL import to PGLite
2013
-
2014
- - Add `mergeHistoricBeads()` to merge beads.base.jsonl into issues.jsonl
2015
- - Add `importJsonlToPGLite()` to import JSONL records into PGLite database
2016
- - Wire both functions into `swarm setup` migration flow
2017
- - Fix closed_at constraint issue when importing closed cells
2018
- - TDD: 12 new integration tests for migration functions
2019
-
2020
- ## 0.27.4
2021
-
2022
- ### Patch Changes
2023
-
2024
- - [`f23f774`](https://github.com/joelhooks/swarm-tools/commit/f23f774e4b83a3422d8266b6b1ad083daaec03e2) Thanks [@joelhooks](https://github.com/joelhooks)! - Enforce coordinator always spawns workers, never executes work directly
2025
-
2026
- - Added "Coordinator Role Boundaries" section to /swarm command
2027
- - Coordinators now explicitly forbidden from editing code, running tests, or making "quick fixes"
2028
- - Updated Phase 5 to clarify coordinators NEVER reserve files (workers do)
2029
- - Updated Phase 6 with patterns for both parallel and sequential worker spawning
2030
- - Worker agent template now confirms it was spawned correctly and to report coordinator violations
2031
-
2032
- ## 0.27.3
2033
-
2034
- ### Patch Changes
2035
-
2036
- - [`ec23d25`](https://github.com/joelhooks/swarm-tools/commit/ec23d25aeca667c0294a6255fecf11dd7d7fd6b3) Thanks [@joelhooks](https://github.com/joelhooks)! - Add .beads → .hive directory migration support
2037
-
2038
- - Fix migration version collision: beadsMigration now v7, cellsViewMigration now v8 (was conflicting with streams v6)
2039
- - Add `checkBeadsMigrationNeeded()` to detect legacy .beads directories
2040
- - Add `migrateBeadsToHive()` to rename .beads to .hive
2041
- - Add `ensureHiveDirectory()` to create .hive if missing (called by hive_sync)
2042
- - Update hive_sync to ensure .hive directory exists before writing
2043
- - Add migration prompt to `swarm setup` CLI flow
2044
-
2045
- - Updated dependencies [[`ec23d25`](https://github.com/joelhooks/swarm-tools/commit/ec23d25aeca667c0294a6255fecf11dd7d7fd6b3)]:
2046
- - swarm-mail@0.3.3
2047
-
2048
- ## 0.27.2
2049
-
2050
- ### Patch Changes
2051
-
2052
- - [`50a2bf5`](https://github.com/joelhooks/swarm-tools/commit/50a2bf51c5320c038f202191d7acbfd2179f2cb3) Thanks [@joelhooks](https://github.com/joelhooks)! - Fix cells view migration not being applied
2053
-
2054
- The v7 migration (cellsViewMigration) that creates the `cells` view was added after
2055
- swarm-mail@0.3.0 was published. This caused `hive_sync` to fail with
2056
- "relation cells does not exist" because the JSONL export queries the `cells` view.
2057
-
2058
- This patch ensures the v7 migration is included in the published package.
2059
-
2060
- - Updated dependencies [[`50a2bf5`](https://github.com/joelhooks/swarm-tools/commit/50a2bf51c5320c038f202191d7acbfd2179f2cb3)]:
2061
- - swarm-mail@0.3.2
2062
-
2063
- ## 0.27.0
2064
-
2065
- ### Minor Changes
2066
-
2067
- - [`26fd2ef`](https://github.com/joelhooks/swarm-tools/commit/26fd2ef27562edc39f7db7a9cdbed399a465200d) Thanks [@joelhooks](https://github.com/joelhooks)! - Rename beads → hive across the codebase
2068
-
2069
- - `createBeadsAdapter` → `createHiveAdapter` (old name still exported as alias)
2070
- - `BeadsAdapter` type → `HiveAdapter` type
2071
- - All internal references updated to use hive terminology
2072
- - Backward compatible: old exports still work but are deprecated
2073
-
2074
- - [`ab23071`](https://github.com/joelhooks/swarm-tools/commit/ab23071cc7509c4fc37e1cac0f38a3812022cdf5) Thanks [@joelhooks](https://github.com/joelhooks)! - Add swarm-aware compaction hook to keep swarms cooking after context compression
2075
-
2076
- - New `experimental.session.compacting` hook detects active swarms and injects recovery context
2077
- - `hasSwarmSign()` checks for swarm evidence: in-progress beads, subtasks, unclosed epics
2078
- - Compaction prompt instructs coordinator to immediately resume orchestration
2079
- - Fix @types/node conflicts by pinning to 22.19.3 in root overrides
2080
-
2081
- ### Patch Changes
2082
-
2083
- - Updated dependencies [[`26fd2ef`](https://github.com/joelhooks/swarm-tools/commit/26fd2ef27562edc39f7db7a9cdbed399a465200d)]:
2084
- - swarm-mail@0.3.0
2085
-
2086
- ## 0.26.1
2087
-
2088
- ### Patch Changes
2089
-
2090
- - [`b2d4a84`](https://github.com/joelhooks/swarm-tools/commit/b2d4a84748cdef4b9dbca7666dd3d313b6cd2b24) Thanks [@joelhooks](https://github.com/joelhooks)! - Add automatic JSONL migration for beads on first use
2091
-
2092
- - Auto-migrate from `.beads/issues.jsonl` when database is empty
2093
- - Fix import to handle missing dependencies/labels/comments arrays
2094
- - Fix closed bead import to satisfy check constraint (status + closed_at)
2095
- - Migrates 500+ historical beads seamlessly on first adapter initialization
2096
-
2097
- - Updated dependencies [[`b2d4a84`](https://github.com/joelhooks/swarm-tools/commit/b2d4a84748cdef4b9dbca7666dd3d313b6cd2b24)]:
2098
- - swarm-mail@0.2.1
2099
-
2100
- ## 0.26.0
2101
-
2102
- ### Minor Changes
2103
-
2104
- - [`1a7b02f`](https://github.com/joelhooks/swarm-tools/commit/1a7b02f707a1490f14465467c6024331d5064878) Thanks [@joelhooks](https://github.com/joelhooks)! - Add PGLite socket server adapter with hybrid daemon management and move streams storage to $TMPDIR.
2105
-
2106
- **Socket Server Adapter:**
2107
-
2108
- - New `createSocketAdapter()` wrapping postgres.js for DatabaseAdapter interface
2109
- - Daemon lifecycle: `startDaemon()`, `stopDaemon()`, `isDaemonRunning()`, `healthCheck()`
2110
- - Auto-start daemon on first use with `SWARM_MAIL_SOCKET=true` env var
2111
- - Graceful fallback to embedded PGLite on failure
2112
- - CLI: `swarm-mail-daemon start|stop|status`
2113
-
2114
- **$TMPDIR Storage (BREAKING):**
2115
-
2116
- - Streams now stored in `$TMPDIR/opencode-<project-name>-<hash>/streams`
2117
- - Eliminates git pollution from `.opencode/streams/`
2118
- - Auto-cleaned on reboot (ephemeral coordination state)
2119
- - New exports: `getProjectTempDirName()`, `hashProjectPath()`
2120
-
2121
- This fixes the multi-agent PGLite corruption issue by having all agents connect to a single pglite-server daemon via PostgreSQL wire protocol.
2122
-
2123
- ### Patch Changes
2124
-
2125
- - Updated dependencies [[`1a7b02f`](https://github.com/joelhooks/swarm-tools/commit/1a7b02f707a1490f14465467c6024331d5064878)]:
2126
- - swarm-mail@0.2.0
2127
-
2128
- ## 0.25.3
2129
-
2130
- ### Patch Changes
2131
-
2132
- - [`7471fd4`](https://github.com/joelhooks/swarm-tools/commit/7471fd43ef9b16b32e503d7cd4bdc5b7a74537e4) Thanks [@joelhooks](https://github.com/joelhooks)! - Fix swarm_complete tool execution failures and remove debug logging
2133
-
2134
- **opencode-swarm-plugin:**
2135
-
2136
- - Fix: Made sendSwarmMessage non-fatal in swarm_complete - failures no longer cause "Tool execution failed" errors
2137
- - Fix: Added message_sent and message_error fields to swarm_complete response for better error visibility
2138
- - Chore: Removed console.log statements from index.ts, swarm-orchestrate.ts, storage.ts, rate-limiter.ts
2139
- - Test: Added integration tests for swarm_complete error handling
2140
-
2141
- **swarm-mail:**
2142
-
2143
- - Chore: Cleaned up debug logging and improved migration handling
2144
-
2145
- - Updated dependencies [[`7471fd4`](https://github.com/joelhooks/swarm-tools/commit/7471fd43ef9b16b32e503d7cd4bdc5b7a74537e4)]:
2146
- - swarm-mail@0.1.4
2147
-
2148
- ## 0.25.2
2149
-
2150
- ### Patch Changes
2151
-
2152
- - [`34a2c3a`](https://github.com/joelhooks/swarm-tools/commit/34a2c3a07f036297db449414ef8dbeb7b39721e2) Thanks [@joelhooks](https://github.com/joelhooks)! - Grant swarm workers autonomy to file beads against the epic
2153
-
2154
- Workers can now create bugs, tech debt, and follow-up tasks linked to their parent epic via `parent_id`. Prompt explicitly encourages workers to file issues rather than silently ignoring them.
2155
-
2156
- ## 0.25.1
2157
-
2158
- ### Patch Changes
2159
-
2160
- - [`757f4a6`](https://github.com/joelhooks/swarm-tools/commit/757f4a690721b3f04a414e4c1694660862504e54) Thanks [@joelhooks](https://github.com/joelhooks)! - Fix skills_update tool - add `content` parameter as primary (with `body` as backwards-compat alias)
2161
-
2162
- The tool was only accepting `body` but users expected `content`. Now both work:
2163
-
2164
- - `skills_update(name="foo", content="new stuff")` - preferred
2165
- - `skills_update(name="foo", body="new stuff")` - still works for backwards compat
2166
-
2167
- - [`3d619ff`](https://github.com/joelhooks/swarm-tools/commit/3d619ffda78b2e6066491f053e8fad8dac7b5b71) Thanks [@joelhooks](https://github.com/joelhooks)! - Fix swarm_complete failing when bead project doesn't match CWD
2168
-
2169
- - Use `project_key` as working directory for `bd close` command
2170
- - Improved error messages with context-specific recovery steps
2171
- - Added planning guardrails to warn when todowrite is used for parallel work (should use swarm)
2172
-
2173
- ## 0.25.0
2174
-
2175
- ### Minor Changes
2176
-
2177
- - [`b70ae35`](https://github.com/joelhooks/swarm-tools/commit/b70ae352876515bdfe68511d72bb472c85b7fdfc) Thanks [@joelhooks](https://github.com/joelhooks)! - Add Socratic planning phase and improved worker prompts to swarm setup
2178
-
2179
- **SWARM_COMMAND template:**
2180
-
2181
- - Added Phase 0: Socratic Planning - asks clarifying questions before decomposing
2182
- - Supports `--fast`, `--auto`, `--confirm-only` flags to skip questions
2183
- - ONE question at a time with concrete options and recommendations
2184
-
2185
- **Worker agent template:**
2186
-
2187
- - Reinforces the 9-step survival checklist from SUBTASK_PROMPT_V2
2188
- - Explicitly lists all steps with emphasis on non-negotiables
2189
- - Explains WHY skipping steps causes problems (lost work, conflicts, etc.)
2190
-
2191
- **Agent path consolidation:**
2192
-
2193
- - Now creates nested paths: `~/.config/opencode/agent/swarm/worker.md`
2194
- - Matches `Task(subagent_type="swarm/worker")` format
2195
- - Cleans up legacy flat files (`swarm-worker.md`) on reinstall
2196
-
2197
- To get the new prompts, run `swarm setup` and choose "Reinstall everything".
2198
-
2199
- ## 0.24.0
2200
-
2201
- ### Minor Changes
2202
-
2203
- - [`434f48f`](https://github.com/joelhooks/swarm-tools/commit/434f48f207c3509f6b924caeb47cd6e019dcc0e1) Thanks [@joelhooks](https://github.com/joelhooks)! - Add worker survival checklist and Socratic planning for swarm coordination
2204
-
2205
- **Worker Survival Checklist (9-step mandatory flow):**
2206
-
2207
- - Workers now follow a strict initialization sequence: swarmmail_init → semantic-memory_find → skills_use → swarmmail_reserve
2208
- - Workers reserve their own files (coordinators no longer reserve on behalf of workers)
2209
- - Auto-checkpoint at 25/50/75% progress milestones
2210
- - Workers store learnings via semantic-memory before completing
2211
-
2212
- **Socratic Planning:**
2213
-
2214
- - New `swarm_plan_interactive` tool with 4 modes: socratic (default), fast, auto, confirm-only
2215
- - Default mode asks clarifying questions before decomposition
2216
- - Escape hatches for experienced users: `--fast`, `--auto`, `--confirm-only` flags on /swarm command
2217
-
2218
- **Updated Skills:**
2219
-
2220
- - swarm-coordination skill now documents worker survival patterns and coordinator rules
2221
-
2222
- ### Patch Changes
2223
-
2224
- - [#15](https://github.com/joelhooks/swarm-tools/pull/15) [`299f2d3`](https://github.com/joelhooks/swarm-tools/commit/299f2d3305796bcb411f9b90715cda3513d17b54) Thanks [@tayiorbeii](https://github.com/tayiorbeii)! - Sync bundled skills into the global skills directory during `swarm setup` reinstall, fix bundled-skill path resolution, and make AGENTS.md skill-awareness updates work without relying on `opencode run`.
2225
-
2226
- ## 0.23.6
2227
-
2228
- ### Patch Changes
2229
-
2230
- - Updated dependencies [[`22befbf`](https://github.com/joelhooks/opencode-swarm-plugin/commit/22befbfa120a37a585cfec0709597172efda92a4)]:
2231
- - swarm-mail@0.1.3
2232
-
2233
- ## 0.23.5
2234
-
2235
- ### Patch Changes
2236
-
2237
- - [`3826c6d`](https://github.com/joelhooks/opencode-swarm-plugin/commit/3826c6d887f937ccb201b7c4322cbc7b46823658) Thanks [@joelhooks](https://github.com/joelhooks)! - Fix workspace:\* resolution by running bun install before pack
2238
-
2239
- The lockfile was stale, causing bun pack to resolve workspace:\* to old versions.
2240
- Now runs bun install first to ensure lockfile matches current package.json versions.
2241
-
2242
- ## 0.23.4
2243
-
2244
- ### Patch Changes
2245
-
2246
- - Updated dependencies [[`2d0fe9f`](https://github.com/joelhooks/opencode-swarm-plugin/commit/2d0fe9fc6278874ea6c4a92f0395cbdd11c4e994)]:
2247
- - swarm-mail@0.1.2
2248
-
2249
- ## 0.23.3
2250
-
2251
- ### Patch Changes
2252
-
2253
- - [`9c4e4f9`](https://github.com/joelhooks/opencode-swarm-plugin/commit/9c4e4f9511672ab8598c7202850c87acf1bfd4b7) Thanks [@joelhooks](https://github.com/joelhooks)! - Fix swarm-mail package to include dist folder
2254
-
2255
- - Add files field to swarm-mail package.json to explicitly include dist/
2256
- - Previous publish was missing build output, causing "Cannot find module" errors
2257
-
2258
- - Updated dependencies [[`9c4e4f9`](https://github.com/joelhooks/opencode-swarm-plugin/commit/9c4e4f9511672ab8598c7202850c87acf1bfd4b7)]:
2259
- - swarm-mail@0.1.1
2260
-
2261
- ## 0.23.2
2262
-
2263
- ### Patch Changes
2264
-
2265
- - [`7f9ead6`](https://github.com/joelhooks/opencode-swarm-plugin/commit/7f9ead65dab1dd5dc9aff57df0871cc390556fe1) Thanks [@joelhooks](https://github.com/joelhooks)! - Fix workspace:\* protocol resolution using bun pack + npm publish
2266
-
2267
- Uses bun pack to create tarball (which resolves workspace:\* to actual versions) then npm publish for OIDC trusted publisher support.
2268
-
2269
- ## 0.23.1
2270
-
2271
- ### Patch Changes
2272
-
2273
- - [`64ad0e4`](https://github.com/joelhooks/opencode-swarm-plugin/commit/64ad0e4fc033597027e3b0614865cfbf955b5983) Thanks [@joelhooks](https://github.com/joelhooks)! - Fix workspace:\* protocol resolution in npm publish
2274
-
2275
- Use bun publish instead of npm publish to properly resolve workspace:\* protocols to actual versions.
2276
-
2277
- ## 0.23.0
2278
-
2279
- ### Minor Changes
2280
-
2281
- - [`b66d77e`](https://github.com/joelhooks/opencode-swarm-plugin/commit/b66d77e484e9b7021b3264d1a7e8f54a16ea5204) Thanks [@joelhooks](https://github.com/joelhooks)! - Add changesets workflow and semantic memory test isolation
2282
-
2283
- - OIDC publish workflow with GitHub Actions
2284
- - Changesets for independent package versioning
2285
- - TEST_SEMANTIC_MEMORY_COLLECTION env var for test isolation
2286
- - Prevents test pollution of production semantic-memory