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.
- package/bin/swarm.serve.test.ts +6 -4
- package/bin/swarm.ts +16 -10
- package/dist/compaction-prompt-scoring.js +139 -0
- package/dist/eval-capture.js +12811 -0
- package/dist/hive.d.ts.map +1 -1
- package/dist/index.js +7644 -62599
- package/dist/plugin.js +23766 -78721
- package/dist/swarm-orchestrate.d.ts.map +1 -1
- package/dist/swarm-prompts.d.ts.map +1 -1
- package/dist/swarm-review.d.ts.map +1 -1
- package/package.json +17 -5
- package/.changeset/swarm-insights-data-layer.md +0 -63
- package/.hive/analysis/eval-failure-analysis-2025-12-25.md +0 -331
- package/.hive/analysis/session-data-quality-audit.md +0 -320
- package/.hive/eval-results.json +0 -483
- package/.hive/issues.jsonl +0 -138
- package/.hive/memories.jsonl +0 -729
- package/.opencode/eval-history.jsonl +0 -327
- package/.turbo/turbo-build.log +0 -9
- package/CHANGELOG.md +0 -2286
- package/SCORER-ANALYSIS.md +0 -598
- package/docs/analysis/subagent-coordination-patterns.md +0 -902
- package/docs/analysis-socratic-planner-pattern.md +0 -504
- package/docs/planning/ADR-001-monorepo-structure.md +0 -171
- package/docs/planning/ADR-002-package-extraction.md +0 -393
- package/docs/planning/ADR-003-performance-improvements.md +0 -451
- package/docs/planning/ADR-004-message-queue-features.md +0 -187
- package/docs/planning/ADR-005-devtools-observability.md +0 -202
- package/docs/planning/ADR-007-swarm-enhancements-worktree-review.md +0 -168
- package/docs/planning/ADR-008-worker-handoff-protocol.md +0 -293
- package/docs/planning/ADR-009-oh-my-opencode-patterns.md +0 -353
- package/docs/planning/ADR-010-cass-inhousing.md +0 -1215
- package/docs/planning/ROADMAP.md +0 -368
- package/docs/semantic-memory-cli-syntax.md +0 -123
- package/docs/swarm-mail-architecture.md +0 -1147
- package/docs/testing/context-recovery-test.md +0 -470
- package/evals/ARCHITECTURE.md +0 -1189
- package/evals/README.md +0 -768
- package/evals/compaction-prompt.eval.ts +0 -149
- package/evals/compaction-resumption.eval.ts +0 -289
- package/evals/coordinator-behavior.eval.ts +0 -307
- package/evals/coordinator-session.eval.ts +0 -154
- package/evals/evalite.config.ts.bak +0 -15
- package/evals/example.eval.ts +0 -31
- package/evals/fixtures/cass-baseline.ts +0 -217
- package/evals/fixtures/compaction-cases.ts +0 -350
- package/evals/fixtures/compaction-prompt-cases.ts +0 -311
- package/evals/fixtures/coordinator-sessions.ts +0 -328
- package/evals/fixtures/decomposition-cases.ts +0 -105
- package/evals/lib/compaction-loader.test.ts +0 -248
- package/evals/lib/compaction-loader.ts +0 -320
- package/evals/lib/data-loader.evalite-test.ts +0 -289
- package/evals/lib/data-loader.test.ts +0 -345
- package/evals/lib/data-loader.ts +0 -281
- package/evals/lib/llm.ts +0 -115
- package/evals/scorers/compaction-prompt-scorers.ts +0 -145
- package/evals/scorers/compaction-scorers.ts +0 -305
- package/evals/scorers/coordinator-discipline.evalite-test.ts +0 -539
- package/evals/scorers/coordinator-discipline.ts +0 -325
- package/evals/scorers/index.test.ts +0 -146
- package/evals/scorers/index.ts +0 -328
- package/evals/scorers/outcome-scorers.evalite-test.ts +0 -27
- package/evals/scorers/outcome-scorers.ts +0 -349
- package/evals/swarm-decomposition.eval.ts +0 -121
- package/examples/commands/swarm.md +0 -745
- package/examples/plugin-wrapper-template.ts +0 -2515
- package/examples/skills/hive-workflow/SKILL.md +0 -212
- package/examples/skills/skill-creator/SKILL.md +0 -223
- package/examples/skills/swarm-coordination/SKILL.md +0 -292
- package/global-skills/cli-builder/SKILL.md +0 -344
- package/global-skills/cli-builder/references/advanced-patterns.md +0 -244
- package/global-skills/learning-systems/SKILL.md +0 -644
- package/global-skills/skill-creator/LICENSE.txt +0 -202
- package/global-skills/skill-creator/SKILL.md +0 -352
- package/global-skills/skill-creator/references/output-patterns.md +0 -82
- package/global-skills/skill-creator/references/workflows.md +0 -28
- package/global-skills/swarm-coordination/SKILL.md +0 -995
- package/global-skills/swarm-coordination/references/coordinator-patterns.md +0 -235
- package/global-skills/swarm-coordination/references/strategies.md +0 -138
- package/global-skills/system-design/SKILL.md +0 -213
- package/global-skills/testing-patterns/SKILL.md +0 -430
- package/global-skills/testing-patterns/references/dependency-breaking-catalog.md +0 -586
- package/opencode-swarm-plugin-0.30.7.tgz +0 -0
- package/opencode-swarm-plugin-0.31.0.tgz +0 -0
- package/scripts/cleanup-test-memories.ts +0 -346
- package/scripts/init-skill.ts +0 -222
- package/scripts/migrate-unknown-sessions.ts +0 -349
- package/scripts/validate-skill.ts +0 -204
- package/src/agent-mail.ts +0 -1724
- package/src/anti-patterns.test.ts +0 -1167
- package/src/anti-patterns.ts +0 -448
- package/src/compaction-capture.integration.test.ts +0 -257
- package/src/compaction-hook.test.ts +0 -838
- package/src/compaction-hook.ts +0 -1204
- package/src/compaction-observability.integration.test.ts +0 -139
- package/src/compaction-observability.test.ts +0 -187
- package/src/compaction-observability.ts +0 -324
- package/src/compaction-prompt-scorers.test.ts +0 -475
- package/src/compaction-prompt-scoring.ts +0 -300
- package/src/contributor-tools.test.ts +0 -133
- package/src/contributor-tools.ts +0 -201
- package/src/dashboard.test.ts +0 -611
- package/src/dashboard.ts +0 -462
- package/src/error-enrichment.test.ts +0 -403
- package/src/error-enrichment.ts +0 -219
- package/src/eval-capture.test.ts +0 -1015
- package/src/eval-capture.ts +0 -929
- package/src/eval-gates.test.ts +0 -306
- package/src/eval-gates.ts +0 -218
- package/src/eval-history.test.ts +0 -508
- package/src/eval-history.ts +0 -214
- package/src/eval-learning.test.ts +0 -378
- package/src/eval-learning.ts +0 -360
- package/src/eval-runner.test.ts +0 -223
- package/src/eval-runner.ts +0 -402
- package/src/export-tools.test.ts +0 -476
- package/src/export-tools.ts +0 -257
- package/src/hive.integration.test.ts +0 -2241
- package/src/hive.ts +0 -1628
- package/src/index.ts +0 -940
- package/src/learning.integration.test.ts +0 -1815
- package/src/learning.ts +0 -1079
- package/src/logger.test.ts +0 -189
- package/src/logger.ts +0 -135
- package/src/mandate-promotion.test.ts +0 -473
- package/src/mandate-promotion.ts +0 -239
- package/src/mandate-storage.integration.test.ts +0 -601
- package/src/mandate-storage.test.ts +0 -578
- package/src/mandate-storage.ts +0 -794
- package/src/mandates.ts +0 -540
- package/src/memory-tools.test.ts +0 -195
- package/src/memory-tools.ts +0 -344
- package/src/memory.integration.test.ts +0 -334
- package/src/memory.test.ts +0 -158
- package/src/memory.ts +0 -527
- package/src/model-selection.test.ts +0 -188
- package/src/model-selection.ts +0 -68
- package/src/observability-tools.test.ts +0 -359
- package/src/observability-tools.ts +0 -871
- package/src/output-guardrails.test.ts +0 -438
- package/src/output-guardrails.ts +0 -381
- package/src/pattern-maturity.test.ts +0 -1160
- package/src/pattern-maturity.ts +0 -525
- package/src/planning-guardrails.test.ts +0 -491
- package/src/planning-guardrails.ts +0 -438
- package/src/plugin.ts +0 -23
- package/src/post-compaction-tracker.test.ts +0 -251
- package/src/post-compaction-tracker.ts +0 -237
- package/src/query-tools.test.ts +0 -636
- package/src/query-tools.ts +0 -324
- package/src/rate-limiter.integration.test.ts +0 -466
- package/src/rate-limiter.ts +0 -774
- package/src/replay-tools.test.ts +0 -496
- package/src/replay-tools.ts +0 -240
- package/src/repo-crawl.integration.test.ts +0 -441
- package/src/repo-crawl.ts +0 -610
- package/src/schemas/cell-events.test.ts +0 -347
- package/src/schemas/cell-events.ts +0 -807
- package/src/schemas/cell.ts +0 -257
- package/src/schemas/evaluation.ts +0 -166
- package/src/schemas/index.test.ts +0 -199
- package/src/schemas/index.ts +0 -286
- package/src/schemas/mandate.ts +0 -232
- package/src/schemas/swarm-context.ts +0 -115
- package/src/schemas/task.ts +0 -161
- package/src/schemas/worker-handoff.test.ts +0 -302
- package/src/schemas/worker-handoff.ts +0 -131
- package/src/sessions/agent-discovery.test.ts +0 -137
- package/src/sessions/agent-discovery.ts +0 -112
- package/src/sessions/index.ts +0 -15
- package/src/skills.integration.test.ts +0 -1192
- package/src/skills.test.ts +0 -643
- package/src/skills.ts +0 -1549
- package/src/storage.integration.test.ts +0 -341
- package/src/storage.ts +0 -884
- package/src/structured.integration.test.ts +0 -817
- package/src/structured.test.ts +0 -1046
- package/src/structured.ts +0 -762
- package/src/swarm-decompose.test.ts +0 -188
- package/src/swarm-decompose.ts +0 -1302
- package/src/swarm-deferred.integration.test.ts +0 -157
- package/src/swarm-deferred.test.ts +0 -38
- package/src/swarm-insights.test.ts +0 -214
- package/src/swarm-insights.ts +0 -459
- package/src/swarm-mail.integration.test.ts +0 -970
- package/src/swarm-mail.ts +0 -739
- package/src/swarm-orchestrate.integration.test.ts +0 -282
- package/src/swarm-orchestrate.test.ts +0 -548
- package/src/swarm-orchestrate.ts +0 -3084
- package/src/swarm-prompts.test.ts +0 -1270
- package/src/swarm-prompts.ts +0 -2077
- package/src/swarm-research.integration.test.ts +0 -701
- package/src/swarm-research.test.ts +0 -698
- package/src/swarm-research.ts +0 -472
- package/src/swarm-review.integration.test.ts +0 -285
- package/src/swarm-review.test.ts +0 -879
- package/src/swarm-review.ts +0 -709
- package/src/swarm-strategies.ts +0 -407
- package/src/swarm-worktree.test.ts +0 -501
- package/src/swarm-worktree.ts +0 -575
- package/src/swarm.integration.test.ts +0 -2377
- package/src/swarm.ts +0 -38
- package/src/tool-adapter.integration.test.ts +0 -1221
- package/src/tool-availability.ts +0 -461
- package/tsconfig.json +0 -28
|
@@ -1,393 +0,0 @@
|
|
|
1
|
-
# ADR-002: Package Extraction Strategy
|
|
2
|
-
|
|
3
|
-
## Status
|
|
4
|
-
|
|
5
|
-
Proposed
|
|
6
|
-
|
|
7
|
-
## Context
|
|
8
|
-
|
|
9
|
-
Following ADR-001's decision to adopt a monorepo structure, we need a detailed strategy for extracting the Swarm Mail actor-model primitives from the existing opencode-swarm-plugin codebase into a standalone `swarm-mail` package.
|
|
10
|
-
|
|
11
|
-
The extraction must:
|
|
12
|
-
|
|
13
|
-
1. Preserve all functionality without breaking changes
|
|
14
|
-
2. Maintain backward compatibility for existing plugin users
|
|
15
|
-
3. Provide clean API boundaries between packages
|
|
16
|
-
4. Support independent versioning and publishing
|
|
17
|
-
|
|
18
|
-
**Current Structure:**
|
|
19
|
-
|
|
20
|
-
- `src/streams/` - Event sourcing primitives (~1.5K lines)
|
|
21
|
-
- `src/agent-mail.ts` - High-level API (~500 lines)
|
|
22
|
-
- `src/swarm-mail.ts` - Integration layer (~200 lines)
|
|
23
|
-
- Integration tests scattered across codebase
|
|
24
|
-
|
|
25
|
-
**Target Structure:**
|
|
26
|
-
|
|
27
|
-
- `packages/swarm-mail` - Standalone actor-model library
|
|
28
|
-
- `packages/opencode-swarm-plugin` - OpenCode integration (depends on swarm-mail)
|
|
29
|
-
|
|
30
|
-
## Decision
|
|
31
|
-
|
|
32
|
-
### Phase 1: Boundary Analysis (Pre-extraction)
|
|
33
|
-
|
|
34
|
-
**1.1 Identify Public API Surface**
|
|
35
|
-
|
|
36
|
-
```typescript
|
|
37
|
-
// swarm-mail will export:
|
|
38
|
-
export {
|
|
39
|
-
initializeSwarmMail,
|
|
40
|
-
sendMessage,
|
|
41
|
-
getInbox,
|
|
42
|
-
readMessage,
|
|
43
|
-
reserveFiles,
|
|
44
|
-
releaseReservations,
|
|
45
|
-
} from "./agent-mail";
|
|
46
|
-
export { SwarmMailStore, appendEvent, queryProjection } from "./streams/store";
|
|
47
|
-
export { MailboxService, LockService, AskService } from "./streams/effect";
|
|
48
|
-
export type { SwarmMailEvent, Message, FileReservation } from "./schemas";
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
**1.2 Dependency Audit**
|
|
52
|
-
Use `dependency-cruiser` to detect:
|
|
53
|
-
|
|
54
|
-
- Circular dependencies (fail build if found)
|
|
55
|
-
- External dependencies (must be in swarm-mail package.json)
|
|
56
|
-
- Internal coupling (refactor before extraction)
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
npx depcruise --config .dependency-cruiser.js src/
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
**1.3 Breaking Change Detection**
|
|
63
|
-
Run full test suite with coverage:
|
|
64
|
-
|
|
65
|
-
- Integration tests must pass 100%
|
|
66
|
-
- Type checking must succeed
|
|
67
|
-
- Public API must remain unchanged
|
|
68
|
-
|
|
69
|
-
### Phase 2: Extraction Steps
|
|
70
|
-
|
|
71
|
-
**2.1 Create Package Structure**
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
mkdir -p packages/swarm-mail/src/{streams,effect}
|
|
75
|
-
mkdir -p packages/opencode-swarm-plugin/src
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
**2.2 Move Files (Atomic Operation)**
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
# Streams infrastructure
|
|
82
|
-
git mv src/streams/* packages/swarm-mail/src/streams/
|
|
83
|
-
|
|
84
|
-
# Agent Mail API
|
|
85
|
-
git mv src/agent-mail.ts packages/swarm-mail/src/
|
|
86
|
-
git mv src/swarm-mail.ts packages/swarm-mail/src/
|
|
87
|
-
|
|
88
|
-
# Schemas
|
|
89
|
-
git mv src/schemas/swarm-context.ts packages/swarm-mail/src/schemas/
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
**2.3 Update Imports**
|
|
93
|
-
|
|
94
|
-
```typescript
|
|
95
|
-
// Before (in opencode-swarm-plugin):
|
|
96
|
-
import { initializeSwarmMail } from "../agent-mail";
|
|
97
|
-
|
|
98
|
-
// After:
|
|
99
|
-
import { initializeSwarmMail } from "swarm-mail";
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
Run AST-based codemod:
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
npx jscodeshift -t codemods/update-imports.js packages/opencode-swarm-plugin/src/**/*.ts
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
**2.4 Configure Package Dependencies**
|
|
109
|
-
|
|
110
|
-
```json
|
|
111
|
-
// packages/swarm-mail/package.json
|
|
112
|
-
{
|
|
113
|
-
"name": "swarm-mail",
|
|
114
|
-
"version": "0.1.0",
|
|
115
|
-
"main": "./dist/index.js",
|
|
116
|
-
"types": "./dist/index.d.ts",
|
|
117
|
-
"dependencies": {
|
|
118
|
-
"effect": "^3.12.3",
|
|
119
|
-
"@electric-sql/pglite": "^0.2.14",
|
|
120
|
-
"zod": "^3.24.1"
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// packages/opencode-swarm-plugin/package.json
|
|
125
|
-
{
|
|
126
|
-
"name": "opencode-swarm-plugin",
|
|
127
|
-
"dependencies": {
|
|
128
|
-
"swarm-mail": "workspace:*"
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
**2.5 Migrate Tests**
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
# Integration tests for swarm-mail
|
|
137
|
-
git mv src/agent-mail.integration.test.ts packages/swarm-mail/src/
|
|
138
|
-
git mv src/swarm-mail.integration.test.ts packages/swarm-mail/src/
|
|
139
|
-
git mv src/streams/**/*.test.ts packages/swarm-mail/src/streams/
|
|
140
|
-
|
|
141
|
-
# Plugin-specific tests stay in opencode-swarm-plugin
|
|
142
|
-
# Update test imports to use swarm-mail
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
### Phase 3: API Cleanup
|
|
146
|
-
|
|
147
|
-
**3.1 Define Public Exports**
|
|
148
|
-
|
|
149
|
-
```typescript
|
|
150
|
-
// packages/swarm-mail/src/index.ts
|
|
151
|
-
export {
|
|
152
|
-
// High-level API
|
|
153
|
-
initializeSwarmMail,
|
|
154
|
-
sendMessage,
|
|
155
|
-
getInbox,
|
|
156
|
-
readMessage,
|
|
157
|
-
summarizeThread,
|
|
158
|
-
reserveFiles,
|
|
159
|
-
releaseReservations,
|
|
160
|
-
acknowledgeMessage,
|
|
161
|
-
} from "./agent-mail";
|
|
162
|
-
|
|
163
|
-
export {
|
|
164
|
-
// Effect Services
|
|
165
|
-
MailboxService,
|
|
166
|
-
LockService,
|
|
167
|
-
AskService,
|
|
168
|
-
DurableDeferred,
|
|
169
|
-
} from "./streams/effect";
|
|
170
|
-
|
|
171
|
-
export {
|
|
172
|
-
// Event Sourcing
|
|
173
|
-
SwarmMailStore,
|
|
174
|
-
appendEvent,
|
|
175
|
-
queryProjection,
|
|
176
|
-
} from "./streams/store";
|
|
177
|
-
|
|
178
|
-
export type {
|
|
179
|
-
// Types
|
|
180
|
-
SwarmMailEvent,
|
|
181
|
-
Message,
|
|
182
|
-
FileReservation,
|
|
183
|
-
AgentRegistration,
|
|
184
|
-
} from "./schemas";
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
**3.2 Mark Internal APIs**
|
|
188
|
-
Use JSDoc `@internal` for non-public exports:
|
|
189
|
-
|
|
190
|
-
```typescript
|
|
191
|
-
/**
|
|
192
|
-
* @internal
|
|
193
|
-
* Internal projection builder - do not use outside swarm-mail
|
|
194
|
-
*/
|
|
195
|
-
export const buildProjection = ...
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
**3.3 Version Exports**
|
|
199
|
-
Support both named and default exports:
|
|
200
|
-
|
|
201
|
-
```typescript
|
|
202
|
-
// Allow: import { initializeSwarmMail } from 'swarm-mail'
|
|
203
|
-
// Allow: import SwarmMail from 'swarm-mail'
|
|
204
|
-
export default {
|
|
205
|
-
initializeSwarmMail,
|
|
206
|
-
sendMessage,
|
|
207
|
-
// ...
|
|
208
|
-
};
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
### Phase 4: Backward Compatibility (Transition Period)
|
|
212
|
-
|
|
213
|
-
**4.1 Re-export from Plugin**
|
|
214
|
-
|
|
215
|
-
```typescript
|
|
216
|
-
// packages/opencode-swarm-plugin/src/agent-mail.ts (deprecated wrapper)
|
|
217
|
-
/**
|
|
218
|
-
* @deprecated Import from 'swarm-mail' instead
|
|
219
|
-
*/
|
|
220
|
-
export {
|
|
221
|
-
initializeSwarmMail,
|
|
222
|
-
sendMessage,
|
|
223
|
-
// ...
|
|
224
|
-
} from "swarm-mail";
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
**4.2 Add Deprecation Warnings**
|
|
228
|
-
|
|
229
|
-
```typescript
|
|
230
|
-
// packages/opencode-swarm-plugin/src/index.ts
|
|
231
|
-
if (process.env.NODE_ENV !== "production") {
|
|
232
|
-
console.warn(
|
|
233
|
-
"[opencode-swarm-plugin] Importing agent-mail APIs from opencode-swarm-plugin is deprecated. " +
|
|
234
|
-
'Import from swarm-mail instead: import { initializeSwarmMail } from "swarm-mail"',
|
|
235
|
-
);
|
|
236
|
-
}
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
**4.3 Migration Timeline**
|
|
240
|
-
|
|
241
|
-
- v0.1.0 - Initial extraction, both packages work
|
|
242
|
-
- v0.2.0 - Add deprecation warnings
|
|
243
|
-
- v1.0.0 - Remove re-exports, swarm-mail required
|
|
244
|
-
|
|
245
|
-
### Phase 5: Verification
|
|
246
|
-
|
|
247
|
-
**5.1 Build Verification**
|
|
248
|
-
|
|
249
|
-
```bash
|
|
250
|
-
# Clean build
|
|
251
|
-
rm -rf node_modules packages/*/dist
|
|
252
|
-
bun install
|
|
253
|
-
|
|
254
|
-
# Build all packages
|
|
255
|
-
turbo run build
|
|
256
|
-
|
|
257
|
-
# Expected: swarm-mail builds first, then opencode-swarm-plugin
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
**5.2 Test Verification**
|
|
261
|
-
|
|
262
|
-
```bash
|
|
263
|
-
# Run all tests
|
|
264
|
-
turbo run test
|
|
265
|
-
|
|
266
|
-
# Expected: All integration tests pass
|
|
267
|
-
# Expected: No type errors
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
**5.3 Publish Dry Run**
|
|
271
|
-
|
|
272
|
-
```bash
|
|
273
|
-
# Test publishing workflow
|
|
274
|
-
npx changeset add
|
|
275
|
-
npx changeset version
|
|
276
|
-
npm pack --dry-run
|
|
277
|
-
|
|
278
|
-
# Expected: Valid tarball for swarm-mail
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
## Consequences
|
|
282
|
-
|
|
283
|
-
### Easier
|
|
284
|
-
|
|
285
|
-
- **Independent publishing** - swarm-mail can be versioned separately
|
|
286
|
-
- **Clear boundaries** - Public API explicitly defined
|
|
287
|
-
- **Standalone usage** - Other projects can use swarm-mail without plugin
|
|
288
|
-
- **Focused testing** - swarm-mail tests independent of plugin
|
|
289
|
-
- **Type safety** - TypeScript enforces package boundaries
|
|
290
|
-
|
|
291
|
-
### More Difficult
|
|
292
|
-
|
|
293
|
-
- **Import paths change** - All consumers must update imports
|
|
294
|
-
- **Two-package maintenance** - Breaking changes require coordination
|
|
295
|
-
- **Version alignment** - opencode-swarm-plugin must specify compatible swarm-mail version
|
|
296
|
-
- **Testing complexity** - Must test both standalone and integrated usage
|
|
297
|
-
|
|
298
|
-
### Risks & Mitigations
|
|
299
|
-
|
|
300
|
-
| Risk | Impact | Mitigation |
|
|
301
|
-
| ---------------------------------- | -------- | ------------------------------------------------- |
|
|
302
|
-
| Breaking changes during extraction | Critical | Feature branch, full test coverage, manual QA |
|
|
303
|
-
| Missed dependencies | High | dependency-cruiser validation, build from scratch |
|
|
304
|
-
| Import path confusion | Medium | Clear migration guide, deprecation warnings |
|
|
305
|
-
| Circular dependencies | High | Pre-extraction analysis, dependency-cruiser gate |
|
|
306
|
-
| Version mismatch bugs | Medium | Peer dependency constraints, CI matrix testing |
|
|
307
|
-
|
|
308
|
-
## Implementation Notes
|
|
309
|
-
|
|
310
|
-
### Pre-Extraction Checklist
|
|
311
|
-
|
|
312
|
-
- [ ] Run dependency-cruiser to detect circular deps
|
|
313
|
-
- [ ] Audit all imports in src/streams/, src/agent-mail.ts
|
|
314
|
-
- [ ] Document current public API surface
|
|
315
|
-
- [ ] Create feature branch for extraction
|
|
316
|
-
- [ ] Ensure all tests pass with 100% coverage
|
|
317
|
-
|
|
318
|
-
### Extraction Checklist
|
|
319
|
-
|
|
320
|
-
- [ ] Create packages/swarm-mail directory structure
|
|
321
|
-
- [ ] Move src/streams/\* to swarm-mail
|
|
322
|
-
- [ ] Move agent-mail.ts, swarm-mail.ts to swarm-mail
|
|
323
|
-
- [ ] Update all imports in opencode-swarm-plugin
|
|
324
|
-
- [ ] Configure package.json dependencies
|
|
325
|
-
- [ ] Migrate integration tests
|
|
326
|
-
- [ ] Add index.ts with public exports
|
|
327
|
-
- [ ] Build both packages
|
|
328
|
-
- [ ] Run full test suite
|
|
329
|
-
|
|
330
|
-
### Post-Extraction Checklist
|
|
331
|
-
|
|
332
|
-
- [ ] Add deprecation warnings in opencode-swarm-plugin
|
|
333
|
-
- [ ] Write migration guide for users
|
|
334
|
-
- [ ] Generate TypeDoc for swarm-mail API
|
|
335
|
-
- [ ] Add README with usage examples
|
|
336
|
-
- [ ] Configure Changesets for versioning
|
|
337
|
-
- [ ] Publish swarm-mail@0.1.0 to npm
|
|
338
|
-
- [ ] Update opencode-swarm-plugin to depend on published version
|
|
339
|
-
|
|
340
|
-
### Success Criteria
|
|
341
|
-
|
|
342
|
-
- [ ] `bun run build` succeeds for both packages
|
|
343
|
-
- [ ] All integration tests pass
|
|
344
|
-
- [ ] No circular dependencies detected
|
|
345
|
-
- [ ] Published swarm-mail works in standalone project
|
|
346
|
-
- [ ] opencode-swarm-plugin works with published swarm-mail
|
|
347
|
-
- [ ] Type checking passes with no errors
|
|
348
|
-
- [ ] Migration guide tested with real user
|
|
349
|
-
|
|
350
|
-
### Codemod Example (update-imports.js)
|
|
351
|
-
|
|
352
|
-
```javascript
|
|
353
|
-
module.exports = function transformer(file, api) {
|
|
354
|
-
const j = api.jscodeshift;
|
|
355
|
-
const root = j(file.source);
|
|
356
|
-
|
|
357
|
-
// Replace ../agent-mail with swarm-mail
|
|
358
|
-
root
|
|
359
|
-
.find(j.ImportDeclaration, {
|
|
360
|
-
source: {
|
|
361
|
-
value: (v) =>
|
|
362
|
-
v.includes("../agent-mail") || v.includes("../swarm-mail"),
|
|
363
|
-
},
|
|
364
|
-
})
|
|
365
|
-
.forEach((path) => {
|
|
366
|
-
path.node.source.value = "swarm-mail";
|
|
367
|
-
});
|
|
368
|
-
|
|
369
|
-
return root.toSource();
|
|
370
|
-
};
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
### Dependency Cruiser Config
|
|
374
|
-
|
|
375
|
-
```javascript
|
|
376
|
-
// .dependency-cruiser.js
|
|
377
|
-
module.exports = {
|
|
378
|
-
forbidden: [
|
|
379
|
-
{
|
|
380
|
-
name: "no-circular",
|
|
381
|
-
severity: "error",
|
|
382
|
-
from: {},
|
|
383
|
-
to: { circular: true },
|
|
384
|
-
},
|
|
385
|
-
{
|
|
386
|
-
name: "no-plugin-in-mail",
|
|
387
|
-
severity: "error",
|
|
388
|
-
from: { path: "^packages/swarm-mail" },
|
|
389
|
-
to: { path: "^packages/opencode-swarm-plugin" },
|
|
390
|
-
},
|
|
391
|
-
],
|
|
392
|
-
};
|
|
393
|
-
```
|