opencode-swarm-plugin 0.44.0 → 0.44.2
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 +18 -12
- 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/hive.js +14834 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7743 -62593
- package/dist/plugin.js +24052 -78907
- package/dist/swarm-orchestrate.d.ts.map +1 -1
- package/dist/swarm-prompts.d.ts.map +1 -1
- package/dist/swarm-prompts.js +39407 -0
- package/dist/swarm-review.d.ts.map +1 -1
- package/dist/swarm-validation.d.ts +127 -0
- package/dist/swarm-validation.d.ts.map +1 -0
- package/dist/validators/index.d.ts +7 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/schema-validator.d.ts +58 -0
- package/dist/validators/schema-validator.d.ts.map +1 -0
- 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,282 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Integration tests for swarm-orchestrate.ts runtime
|
|
3
|
-
*
|
|
4
|
-
* Tests that plugin tools work end-to-end without "dbOverride required" errors.
|
|
5
|
-
* These tests verify Worker 1's fix (auto-adapter creation) works in plugin context.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { afterEach, beforeEach, describe, expect, test } from "bun:test";
|
|
9
|
-
import { mkdirSync, rmSync } from "node:fs";
|
|
10
|
-
import { tmpdir } from "node:os";
|
|
11
|
-
import { join } from "node:path";
|
|
12
|
-
import {
|
|
13
|
-
type SwarmMailAdapter,
|
|
14
|
-
clearAdapterCache,
|
|
15
|
-
createInMemorySwarmMailLibSQL,
|
|
16
|
-
} from "swarm-mail";
|
|
17
|
-
import { swarm_complete } from "./swarm-orchestrate";
|
|
18
|
-
|
|
19
|
-
describe("swarm_complete integration", () => {
|
|
20
|
-
let testProjectPath: string;
|
|
21
|
-
let swarmMail: SwarmMailAdapter;
|
|
22
|
-
|
|
23
|
-
beforeEach(async () => {
|
|
24
|
-
// Create temp project directory
|
|
25
|
-
testProjectPath = join(tmpdir(), `swarm-test-${Date.now()}`);
|
|
26
|
-
mkdirSync(testProjectPath, { recursive: true });
|
|
27
|
-
|
|
28
|
-
// Initialize swarm-mail for this project
|
|
29
|
-
swarmMail = await createInMemorySwarmMailLibSQL(testProjectPath);
|
|
30
|
-
|
|
31
|
-
// Register a test agent
|
|
32
|
-
await swarmMail.registerAgent(testProjectPath, "TestWorker", {
|
|
33
|
-
program: "test",
|
|
34
|
-
model: "test-model",
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
afterEach(async () => {
|
|
39
|
-
// Clean up
|
|
40
|
-
await swarmMail.close();
|
|
41
|
-
clearAdapterCache();
|
|
42
|
-
rmSync(testProjectPath, { recursive: true, force: true });
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
test("swarm_complete accesses database without dbOverride error", async () => {
|
|
46
|
-
const beadId = "test-bead-123";
|
|
47
|
-
|
|
48
|
-
// Call swarm_complete - the key test is that it doesn't throw "dbOverride required"
|
|
49
|
-
// when trying to access the database for deferred resolution
|
|
50
|
-
// The deferred won't exist (table not in schema yet), but that's expected and non-fatal
|
|
51
|
-
const result = await swarm_complete.execute({
|
|
52
|
-
project_key: testProjectPath,
|
|
53
|
-
agent_name: "TestWorker",
|
|
54
|
-
bead_id: beadId,
|
|
55
|
-
summary: "Test task completed",
|
|
56
|
-
files_touched: ["test.ts"],
|
|
57
|
-
skip_verification: true,
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
// Should complete successfully (even without deferred table)
|
|
61
|
-
expect(result).toBeDefined();
|
|
62
|
-
expect(result).toContain("Task completed");
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
test("swarm_complete handles missing deferred gracefully", async () => {
|
|
66
|
-
// Call swarm_complete without creating deferred first
|
|
67
|
-
// Should NOT throw "dbOverride required" - should complete normally
|
|
68
|
-
const result = await swarm_complete.execute({
|
|
69
|
-
project_key: testProjectPath,
|
|
70
|
-
agent_name: "TestWorker",
|
|
71
|
-
bead_id: "no-deferred-bead",
|
|
72
|
-
summary: "Task without deferred",
|
|
73
|
-
files_touched: ["test.ts"],
|
|
74
|
-
skip_verification: true,
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
// Should complete successfully even without deferred
|
|
78
|
-
expect(result).toBeDefined();
|
|
79
|
-
expect(result).toContain("Task completed");
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
describe("swarm_recover integration", () => {
|
|
84
|
-
let testProjectPath: string;
|
|
85
|
-
let swarmMail: SwarmMailAdapter;
|
|
86
|
-
|
|
87
|
-
beforeEach(async () => {
|
|
88
|
-
testProjectPath = join(tmpdir(), `swarm-test-${Date.now()}`);
|
|
89
|
-
mkdirSync(testProjectPath, { recursive: true });
|
|
90
|
-
swarmMail = await createInMemorySwarmMailLibSQL(testProjectPath);
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
afterEach(async () => {
|
|
94
|
-
await swarmMail.close();
|
|
95
|
-
clearAdapterCache();
|
|
96
|
-
rmSync(testProjectPath, { recursive: true, force: true });
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
test("swarm_recover accesses database without dbOverride error", async () => {
|
|
100
|
-
const { swarm_recover } = await import("./swarm-orchestrate");
|
|
101
|
-
|
|
102
|
-
const epicId = "epic-123";
|
|
103
|
-
|
|
104
|
-
// Call swarm_recover - the key test is that it doesn't throw "dbOverride required"
|
|
105
|
-
// when trying to query swarm_contexts table
|
|
106
|
-
// The table doesn't exist yet (not in schema), so it should return { found: false }
|
|
107
|
-
const result = await swarm_recover.execute({
|
|
108
|
-
project_key: testProjectPath,
|
|
109
|
-
epic_id: epicId,
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
// Should return graceful fallback (not throw error)
|
|
113
|
-
const parsed = JSON.parse(result);
|
|
114
|
-
expect(parsed.found).toBe(false);
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
test("checkpoint recovery returns not found for missing checkpoint", async () => {
|
|
118
|
-
const { swarm_recover } = await import("./swarm-orchestrate");
|
|
119
|
-
|
|
120
|
-
// Query non-existent epic - should return { found: false }, not error
|
|
121
|
-
const result = await swarm_recover.execute({
|
|
122
|
-
project_key: testProjectPath,
|
|
123
|
-
epic_id: "non-existent-epic",
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
const parsed = JSON.parse(result);
|
|
127
|
-
expect(parsed.found).toBe(false);
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
describe("E2E swarm coordination", () => {
|
|
132
|
-
let testProjectPath: string;
|
|
133
|
-
let swarmMail: SwarmMailAdapter;
|
|
134
|
-
|
|
135
|
-
beforeEach(async () => {
|
|
136
|
-
// Create temp project directory
|
|
137
|
-
testProjectPath = join(tmpdir(), `swarm-e2e-${Date.now()}`);
|
|
138
|
-
mkdirSync(testProjectPath, { recursive: true });
|
|
139
|
-
|
|
140
|
-
// Initialize swarm-mail for this project
|
|
141
|
-
swarmMail = await createInMemorySwarmMailLibSQL(testProjectPath);
|
|
142
|
-
|
|
143
|
-
// Set working directory so hive and swarm tools use this project
|
|
144
|
-
const { setHiveWorkingDirectory } = await import("./hive");
|
|
145
|
-
setHiveWorkingDirectory(testProjectPath);
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
afterEach(async () => {
|
|
149
|
-
// Clean up
|
|
150
|
-
await swarmMail.close();
|
|
151
|
-
clearAdapterCache();
|
|
152
|
-
rmSync(testProjectPath, { recursive: true, force: true });
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
test("full multi-worker coordination flow", async () => {
|
|
156
|
-
// Import all necessary tools
|
|
157
|
-
const { hive_create_epic } = await import("./hive");
|
|
158
|
-
|
|
159
|
-
// Step 1: Create epic with 2 subtasks using hive_create_epic
|
|
160
|
-
const epicResult = await hive_create_epic.execute({
|
|
161
|
-
epic_title: "E2E Test Epic",
|
|
162
|
-
epic_description: "Full coordination flow test",
|
|
163
|
-
subtasks: [
|
|
164
|
-
{
|
|
165
|
-
title: "Subtask 1: Setup",
|
|
166
|
-
priority: 2,
|
|
167
|
-
files: ["src/setup.ts"],
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
title: "Subtask 2: Implementation",
|
|
171
|
-
priority: 2,
|
|
172
|
-
files: ["src/impl.ts"],
|
|
173
|
-
},
|
|
174
|
-
],
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
// Parse the JSON result to get epic and subtask IDs
|
|
178
|
-
const epicData = JSON.parse(epicResult);
|
|
179
|
-
expect(epicData.success).toBe(true);
|
|
180
|
-
expect(epicData.epic).toBeDefined();
|
|
181
|
-
expect(epicData.subtasks).toBeDefined();
|
|
182
|
-
expect(epicData.subtasks.length).toBe(2);
|
|
183
|
-
|
|
184
|
-
const epicId = epicData.epic.id;
|
|
185
|
-
const subtask1Id = epicData.subtasks[0].id;
|
|
186
|
-
const subtask2Id = epicData.subtasks[1].id;
|
|
187
|
-
|
|
188
|
-
// Step 2: Register 2 workers in swarm-mail
|
|
189
|
-
await swarmMail.registerAgent(testProjectPath, "Worker1", {
|
|
190
|
-
program: "test",
|
|
191
|
-
model: "test-model-1",
|
|
192
|
-
});
|
|
193
|
-
await swarmMail.registerAgent(testProjectPath, "Worker2", {
|
|
194
|
-
program: "test",
|
|
195
|
-
model: "test-model-2",
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
// Step 3: Simulate workers reserving files (parallel coordination)
|
|
199
|
-
await swarmMail.reserveFiles(
|
|
200
|
-
testProjectPath,
|
|
201
|
-
"Worker1",
|
|
202
|
-
["src/setup.ts"],
|
|
203
|
-
{
|
|
204
|
-
reason: `${subtask1Id}: Setup work`,
|
|
205
|
-
exclusive: true,
|
|
206
|
-
},
|
|
207
|
-
);
|
|
208
|
-
|
|
209
|
-
await swarmMail.reserveFiles(
|
|
210
|
-
testProjectPath,
|
|
211
|
-
"Worker2",
|
|
212
|
-
["src/impl.ts"],
|
|
213
|
-
{
|
|
214
|
-
reason: `${subtask2Id}: Implementation work`,
|
|
215
|
-
exclusive: true,
|
|
216
|
-
},
|
|
217
|
-
);
|
|
218
|
-
|
|
219
|
-
// Verify both workers have active reservations
|
|
220
|
-
const db = await swarmMail.getDatabase();
|
|
221
|
-
const activeReservationsResult = await db.query<{ path_pattern: string; agent_name: string }>(
|
|
222
|
-
"SELECT path_pattern, agent_name FROM reservations WHERE agent_name IN (?, ?) AND released_at IS NULL",
|
|
223
|
-
["Worker1", "Worker2"],
|
|
224
|
-
);
|
|
225
|
-
const activeReservations = activeReservationsResult.rows;
|
|
226
|
-
expect(activeReservations.length).toBe(2);
|
|
227
|
-
expect(activeReservations.some(r => r.agent_name === "Worker1" && r.path_pattern === "src/setup.ts")).toBe(true);
|
|
228
|
-
expect(activeReservations.some(r => r.agent_name === "Worker2" && r.path_pattern === "src/impl.ts")).toBe(true);
|
|
229
|
-
|
|
230
|
-
// Step 4: Both workers complete their tasks (using swarm_complete)
|
|
231
|
-
const { swarm_complete } = await import("./swarm-orchestrate");
|
|
232
|
-
|
|
233
|
-
const worker1CompleteResult = await swarm_complete.execute({
|
|
234
|
-
project_key: testProjectPath,
|
|
235
|
-
agent_name: "Worker1",
|
|
236
|
-
bead_id: subtask1Id,
|
|
237
|
-
summary: "Setup completed",
|
|
238
|
-
files_touched: ["src/setup.ts"],
|
|
239
|
-
skip_verification: true,
|
|
240
|
-
skip_review: true,
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
const worker1Complete = JSON.parse(worker1CompleteResult);
|
|
244
|
-
expect(worker1Complete.success).toBe(true);
|
|
245
|
-
expect(worker1Complete.closed).toBe(true);
|
|
246
|
-
|
|
247
|
-
const worker2CompleteResult = await swarm_complete.execute({
|
|
248
|
-
project_key: testProjectPath,
|
|
249
|
-
agent_name: "Worker2",
|
|
250
|
-
bead_id: subtask2Id,
|
|
251
|
-
summary: "Implementation completed",
|
|
252
|
-
files_touched: ["src/impl.ts"],
|
|
253
|
-
skip_verification: true,
|
|
254
|
-
skip_review: true,
|
|
255
|
-
});
|
|
256
|
-
|
|
257
|
-
const worker2Complete = JSON.parse(worker2CompleteResult);
|
|
258
|
-
expect(worker2Complete.success).toBe(true);
|
|
259
|
-
expect(worker2Complete.closed).toBe(true);
|
|
260
|
-
|
|
261
|
-
// Step 5: Verify completion results
|
|
262
|
-
// Both workers should have successfully completed their tasks
|
|
263
|
-
expect(worker1Complete.success).toBe(true);
|
|
264
|
-
expect(worker1Complete.closed).toBe(true);
|
|
265
|
-
expect(worker1Complete.bead_id).toBe(subtask1Id);
|
|
266
|
-
|
|
267
|
-
expect(worker2Complete.success).toBe(true);
|
|
268
|
-
expect(worker2Complete.closed).toBe(true);
|
|
269
|
-
expect(worker2Complete.bead_id).toBe(subtask2Id);
|
|
270
|
-
|
|
271
|
-
// Step 6: Verify coordination flow completed
|
|
272
|
-
// SUCCESS CRITERIA MET:
|
|
273
|
-
// ✅ Epic created with 2 subtasks (hive_create_epic)
|
|
274
|
-
// ✅ 2 workers registered in swarm-mail
|
|
275
|
-
// ✅ Workers reserved their respective files (parallel coordination)
|
|
276
|
-
// ✅ Workers completed tasks (swarm_complete)
|
|
277
|
-
// ✅ Cells marked as closed (verified via completion response)
|
|
278
|
-
|
|
279
|
-
// This test demonstrates full E2E swarm coordination without
|
|
280
|
-
// requiring external database or filesystem access
|
|
281
|
-
});
|
|
282
|
-
});
|