opencode-swarm-plugin 0.31.7 → 0.32.0
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/.turbo/turbo-build.log +10 -9
- package/.turbo/turbo-test.log +319 -317
- package/CHANGELOG.md +134 -0
- package/README.md +7 -4
- package/bin/swarm.ts +388 -128
- package/dist/compaction-hook.d.ts +1 -1
- package/dist/compaction-hook.d.ts.map +1 -1
- package/dist/hive.d.ts.map +1 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +123 -134
- package/dist/memory-tools.d.ts.map +1 -1
- package/dist/memory.d.ts +5 -4
- package/dist/memory.d.ts.map +1 -1
- package/dist/plugin.js +118 -131
- package/dist/swarm-orchestrate.d.ts +29 -5
- package/dist/swarm-orchestrate.d.ts.map +1 -1
- package/dist/swarm-prompts.d.ts +7 -0
- package/dist/swarm-prompts.d.ts.map +1 -1
- package/dist/swarm.d.ts +0 -2
- package/dist/swarm.d.ts.map +1 -1
- package/evals/lib/{data-loader.test.ts → data-loader.evalite-test.ts} +7 -6
- package/evals/lib/data-loader.ts +1 -1
- package/evals/scorers/{outcome-scorers.test.ts → outcome-scorers.evalite-test.ts} +1 -1
- package/examples/plugin-wrapper-template.ts +19 -4
- package/global-skills/swarm-coordination/SKILL.md +118 -8
- package/package.json +2 -2
- package/src/compaction-hook.ts +5 -3
- package/src/hive.integration.test.ts +83 -1
- package/src/hive.ts +37 -12
- package/src/mandate-storage.integration.test.ts +601 -0
- package/src/memory-tools.ts +6 -4
- package/src/memory.integration.test.ts +117 -49
- package/src/memory.test.ts +41 -217
- package/src/memory.ts +12 -8
- package/src/repo-crawl.integration.test.ts +441 -0
- package/src/skills.integration.test.ts +1056 -0
- package/src/structured.integration.test.ts +817 -0
- package/src/swarm-deferred.integration.test.ts +157 -0
- package/src/swarm-deferred.test.ts +38 -0
- package/src/swarm-mail.integration.test.ts +15 -19
- package/src/swarm-orchestrate.integration.test.ts +282 -0
- package/src/swarm-orchestrate.ts +96 -201
- package/src/swarm-prompts.test.ts +92 -0
- package/src/swarm-prompts.ts +69 -0
- package/src/swarm-review.integration.test.ts +290 -0
- package/src/swarm.integration.test.ts +23 -20
- package/src/tool-adapter.integration.test.ts +1221 -0
package/bin/swarm.ts
CHANGED
|
@@ -37,11 +37,13 @@ import {
|
|
|
37
37
|
} from "../src/hive";
|
|
38
38
|
import {
|
|
39
39
|
legacyDatabaseExists,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
migratePGliteToLibSQL,
|
|
41
|
+
pgliteExists,
|
|
42
|
+
getLibSQLProjectTempDirName,
|
|
43
|
+
getLibSQLDatabasePath,
|
|
44
|
+
hashLibSQLProjectPath,
|
|
43
45
|
} from "swarm-mail";
|
|
44
|
-
import {
|
|
46
|
+
import { tmpdir } from "os";
|
|
45
47
|
|
|
46
48
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
47
49
|
const pkg = JSON.parse(
|
|
@@ -709,6 +711,68 @@ function buildAgentsSemanticMemorySection(newline: string): string {
|
|
|
709
711
|
].join(newline);
|
|
710
712
|
}
|
|
711
713
|
|
|
714
|
+
function buildAgentsSwarmCoordinatorSection(newline: string): string {
|
|
715
|
+
return [
|
|
716
|
+
"## Swarm Coordinator Checklist (MANDATORY)",
|
|
717
|
+
"",
|
|
718
|
+
"When coordinating a swarm, you MUST monitor workers and review their output.",
|
|
719
|
+
"",
|
|
720
|
+
"### Monitor Loop",
|
|
721
|
+
"",
|
|
722
|
+
"```",
|
|
723
|
+
"┌─────────────────────────────────────────────────────────────┐",
|
|
724
|
+
"│ COORDINATOR MONITOR LOOP │",
|
|
725
|
+
"├─────────────────────────────────────────────────────────────┤",
|
|
726
|
+
"│ │",
|
|
727
|
+
"│ 1. CHECK INBOX │",
|
|
728
|
+
"│ swarmmail_inbox() │",
|
|
729
|
+
"│ swarmmail_read_message(message_id=N) │",
|
|
730
|
+
"│ │",
|
|
731
|
+
"│ 2. CHECK STATUS │",
|
|
732
|
+
"│ swarm_status(epic_id, project_key) │",
|
|
733
|
+
"│ │",
|
|
734
|
+
"│ 3. REVIEW COMPLETED WORK │",
|
|
735
|
+
"│ swarm_review(project_key, epic_id, task_id, files) │",
|
|
736
|
+
"│ → Generates review prompt with epic context + diff │",
|
|
737
|
+
"│ │",
|
|
738
|
+
"│ 4. SEND FEEDBACK │",
|
|
739
|
+
"│ swarm_review_feedback( │",
|
|
740
|
+
"│ project_key, task_id, worker_id, │",
|
|
741
|
+
"│ status=\"approved|needs_changes\", │",
|
|
742
|
+
"│ issues=\"[{file, line, issue, suggestion}]\" │",
|
|
743
|
+
"│ ) │",
|
|
744
|
+
"│ │",
|
|
745
|
+
"│ 5. INTERVENE IF NEEDED │",
|
|
746
|
+
"│ - Blocked >5min → unblock or reassign │",
|
|
747
|
+
"│ - File conflicts → mediate │",
|
|
748
|
+
"│ - Scope creep → approve or reject │",
|
|
749
|
+
"│ - 3 review failures → escalate to human │",
|
|
750
|
+
"│ │",
|
|
751
|
+
"└─────────────────────────────────────────────────────────────┘",
|
|
752
|
+
"```",
|
|
753
|
+
"",
|
|
754
|
+
"### Review Tools",
|
|
755
|
+
"",
|
|
756
|
+
"| Tool | Purpose |",
|
|
757
|
+
"|------|---------|",
|
|
758
|
+
"| `swarm_review` | Generate review prompt with epic context, dependencies, and git diff |",
|
|
759
|
+
"| `swarm_review_feedback` | Send approval/rejection to worker (tracks 3-strike rule) |",
|
|
760
|
+
"",
|
|
761
|
+
"### Review Criteria",
|
|
762
|
+
"",
|
|
763
|
+
"- Does work fulfill subtask requirements?",
|
|
764
|
+
"- Does it serve the overall epic goal?",
|
|
765
|
+
"- Does it enable downstream tasks?",
|
|
766
|
+
"- Type safety, no obvious bugs?",
|
|
767
|
+
"",
|
|
768
|
+
"### 3-Strike Rule",
|
|
769
|
+
"",
|
|
770
|
+
"After 3 review rejections, task is marked **blocked**. This signals an architectural problem, not \"try harder.\"",
|
|
771
|
+
"",
|
|
772
|
+
"**NEVER skip the review step.** Workers complete faster when they get feedback.",
|
|
773
|
+
].join(newline);
|
|
774
|
+
}
|
|
775
|
+
|
|
712
776
|
function updateAgentsToolPreferencesBlock(
|
|
713
777
|
content: string,
|
|
714
778
|
newline: string,
|
|
@@ -740,6 +804,9 @@ function updateAgentsToolPreferencesBlock(
|
|
|
740
804
|
const hasSemanticTools =
|
|
741
805
|
/semantic-memory_find/i.test(block) &&
|
|
742
806
|
/semantic-memory_store/i.test(block);
|
|
807
|
+
const hasSwarmReviewTools =
|
|
808
|
+
/swarm_review\b/i.test(block) &&
|
|
809
|
+
/swarm_review_feedback/i.test(block);
|
|
743
810
|
|
|
744
811
|
const linesToAdd: string[] = [];
|
|
745
812
|
if (!hasSkillsTools) {
|
|
@@ -757,6 +824,11 @@ function updateAgentsToolPreferencesBlock(
|
|
|
757
824
|
"- **semantic-memory_find, semantic-memory_store, semantic-memory_validate** - Persistent learning across sessions",
|
|
758
825
|
);
|
|
759
826
|
}
|
|
827
|
+
if (!hasSwarmReviewTools) {
|
|
828
|
+
linesToAdd.push(
|
|
829
|
+
"- **swarm_review, swarm_review_feedback** - Coordinator reviews worker output (3-strike rule)",
|
|
830
|
+
);
|
|
831
|
+
}
|
|
760
832
|
|
|
761
833
|
if (linesToAdd.length === 0) {
|
|
762
834
|
return { content, changed: false };
|
|
@@ -820,6 +892,10 @@ function updateAgentsMdContent({
|
|
|
820
892
|
const hasSemanticMemorySection =
|
|
821
893
|
/^#{1,6}\s+Semantic Memory\b/im.test(updated) ||
|
|
822
894
|
/semantic-memory_store\(/.test(updated);
|
|
895
|
+
const hasSwarmCoordinatorSection =
|
|
896
|
+
/^#{1,6}\s+Swarm Coordinator\b/im.test(updated) ||
|
|
897
|
+
/swarm_review\(/.test(updated) ||
|
|
898
|
+
/COORDINATOR MONITOR LOOP/i.test(updated);
|
|
823
899
|
|
|
824
900
|
const sectionsToAppend: string[] = [];
|
|
825
901
|
if (!hasSkillsSection) {
|
|
@@ -836,6 +912,10 @@ function updateAgentsMdContent({
|
|
|
836
912
|
sectionsToAppend.push(buildAgentsSemanticMemorySection(newline));
|
|
837
913
|
changes.push("Added Semantic Memory section");
|
|
838
914
|
}
|
|
915
|
+
if (!hasSwarmCoordinatorSection) {
|
|
916
|
+
sectionsToAppend.push(buildAgentsSwarmCoordinatorSection(newline));
|
|
917
|
+
changes.push("Added Swarm Coordinator Checklist section");
|
|
918
|
+
}
|
|
839
919
|
|
|
840
920
|
if (sectionsToAppend.length > 0) {
|
|
841
921
|
const trimmed = updated.replace(/\s+$/g, "");
|
|
@@ -1053,18 +1133,45 @@ const result2 = await Task(subagent_type="swarm/worker", prompt="<from above>")
|
|
|
1053
1133
|
|
|
1054
1134
|
**IMPORTANT:** Pass \`project_path\` to \`swarm_spawn_subtask\` so workers can call \`swarmmail_init\`.
|
|
1055
1135
|
|
|
1056
|
-
### Phase 7:
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1136
|
+
### Phase 7: MANDATORY Review Loop (NON-NEGOTIABLE)
|
|
1137
|
+
|
|
1138
|
+
**⚠️ AFTER EVERY Task() RETURNS, YOU MUST:**
|
|
1139
|
+
|
|
1140
|
+
1. **CHECK INBOX** - Worker may have sent messages
|
|
1141
|
+
\`swarmmail_inbox()\`
|
|
1142
|
+
\`swarmmail_read_message(message_id=N)\`
|
|
1143
|
+
|
|
1144
|
+
2. **REVIEW WORK** - Generate review with diff
|
|
1145
|
+
\`swarm_review(project_key, epic_id, task_id, files_touched)\`
|
|
1146
|
+
|
|
1147
|
+
3. **EVALUATE** - Does it meet epic goals?
|
|
1148
|
+
- Fulfills subtask requirements?
|
|
1149
|
+
- Serves overall epic goal?
|
|
1150
|
+
- Enables downstream tasks?
|
|
1151
|
+
- Type safety, no obvious bugs?
|
|
1152
|
+
|
|
1153
|
+
4. **SEND FEEDBACK** - Approve or request changes
|
|
1154
|
+
\`swarm_review_feedback(project_key, task_id, worker_id, status, issues)\`
|
|
1155
|
+
|
|
1156
|
+
If approved: Close cell, spawn next worker
|
|
1157
|
+
If needs_changes: Worker retries (max 3 attempts)
|
|
1158
|
+
If 3 failures: Mark blocked, escalate to human
|
|
1061
1159
|
|
|
1062
|
-
|
|
1160
|
+
5. **ONLY THEN** - Spawn next worker or complete
|
|
1161
|
+
|
|
1162
|
+
**DO NOT skip this. DO NOT batch reviews. Review EACH worker IMMEDIATELY after return.**
|
|
1163
|
+
|
|
1164
|
+
**Intervene if:**
|
|
1165
|
+
- Worker blocked >5min → unblock or reassign
|
|
1166
|
+
- File conflicts → mediate between workers
|
|
1167
|
+
- Scope creep → approve or reject expansion
|
|
1168
|
+
- Review fails 3x → mark task blocked, escalate to human
|
|
1063
1169
|
|
|
1064
1170
|
### Phase 8: Complete
|
|
1065
1171
|
\`\`\`
|
|
1066
|
-
|
|
1067
|
-
hive_sync()
|
|
1172
|
+
# After all workers complete and reviews pass:
|
|
1173
|
+
hive_sync() # Sync all cells to git
|
|
1174
|
+
# Coordinator does NOT call swarm_complete - workers do that
|
|
1068
1175
|
\`\`\`
|
|
1069
1176
|
|
|
1070
1177
|
## Strategy Reference
|
|
@@ -1377,9 +1484,44 @@ async function setup() {
|
|
|
1377
1484
|
|
|
1378
1485
|
p.intro("opencode-swarm-plugin v" + VERSION);
|
|
1379
1486
|
|
|
1487
|
+
// Migrate legacy database if present (do this first, before config check)
|
|
1488
|
+
const cwd = process.cwd();
|
|
1489
|
+
const tempDirName = getLibSQLProjectTempDirName(cwd);
|
|
1490
|
+
const tempDir = join(tmpdir(), tempDirName);
|
|
1491
|
+
const pglitePath = join(tempDir, "streams");
|
|
1492
|
+
const libsqlPath = join(tempDir, "streams.db");
|
|
1493
|
+
|
|
1494
|
+
if (pgliteExists(pglitePath)) {
|
|
1495
|
+
const migrateSpinner = p.spinner();
|
|
1496
|
+
migrateSpinner.start("Migrating...");
|
|
1497
|
+
|
|
1498
|
+
try {
|
|
1499
|
+
const result = await migratePGliteToLibSQL({
|
|
1500
|
+
pglitePath,
|
|
1501
|
+
libsqlPath,
|
|
1502
|
+
dryRun: false,
|
|
1503
|
+
onProgress: () => {},
|
|
1504
|
+
});
|
|
1505
|
+
|
|
1506
|
+
const total = result.memories.migrated + result.beads.migrated;
|
|
1507
|
+
if (total > 0) {
|
|
1508
|
+
migrateSpinner.stop(`Migrated ${result.memories.migrated} memories, ${result.beads.migrated} cells`);
|
|
1509
|
+
} else {
|
|
1510
|
+
migrateSpinner.stop("Migrated");
|
|
1511
|
+
}
|
|
1512
|
+
|
|
1513
|
+
if (result.errors.length > 0) {
|
|
1514
|
+
p.log.warn(`${result.errors.length} errors during migration`);
|
|
1515
|
+
}
|
|
1516
|
+
} catch (error) {
|
|
1517
|
+
migrateSpinner.stop("Migration failed");
|
|
1518
|
+
p.log.error(error instanceof Error ? error.message : String(error));
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1521
|
+
|
|
1380
1522
|
let isReinstall = false;
|
|
1381
1523
|
|
|
1382
|
-
// Check if already configured
|
|
1524
|
+
// Check if already configured
|
|
1383
1525
|
p.log.step("Checking existing configuration...");
|
|
1384
1526
|
const configDir = join(homedir(), ".config", "opencode");
|
|
1385
1527
|
const pluginDir = join(configDir, "plugin");
|
|
@@ -1624,7 +1766,6 @@ async function setup() {
|
|
|
1624
1766
|
|
|
1625
1767
|
// Check for .beads → .hive migration
|
|
1626
1768
|
p.log.step("Checking for legacy .beads directory...");
|
|
1627
|
-
const cwd = process.cwd();
|
|
1628
1769
|
const migrationCheck = checkBeadsMigrationNeeded(cwd);
|
|
1629
1770
|
if (migrationCheck.needed) {
|
|
1630
1771
|
p.log.warn("Found legacy .beads directory");
|
|
@@ -1683,120 +1824,6 @@ async function setup() {
|
|
|
1683
1824
|
p.log.message(dim(" No legacy .beads directory found"));
|
|
1684
1825
|
}
|
|
1685
1826
|
|
|
1686
|
-
// Check for legacy semantic-memory migration
|
|
1687
|
-
p.log.step("Checking for legacy semantic-memory database...");
|
|
1688
|
-
if (legacyDatabaseExists()) {
|
|
1689
|
-
p.log.warn("Found legacy semantic-memory database");
|
|
1690
|
-
|
|
1691
|
-
// Check if target database already has memories (already migrated)
|
|
1692
|
-
let swarmMail = null;
|
|
1693
|
-
try {
|
|
1694
|
-
swarmMail = await getSwarmMail(cwd);
|
|
1695
|
-
const targetDb = await swarmMail.getDatabase(cwd);
|
|
1696
|
-
const alreadyMigrated = await targetHasMemories(targetDb);
|
|
1697
|
-
|
|
1698
|
-
if (alreadyMigrated) {
|
|
1699
|
-
p.log.message(dim(" Already migrated to swarm-mail"));
|
|
1700
|
-
await swarmMail.close();
|
|
1701
|
-
} else {
|
|
1702
|
-
await swarmMail.close();
|
|
1703
|
-
swarmMail = null;
|
|
1704
|
-
|
|
1705
|
-
// Target is empty - show migration status and prompt
|
|
1706
|
-
const migrationStatus = await getMigrationStatus();
|
|
1707
|
-
if (migrationStatus) {
|
|
1708
|
-
const { total, withEmbeddings } = migrationStatus;
|
|
1709
|
-
p.log.message(dim(` Memories: ${total} total (${withEmbeddings} with embeddings)`));
|
|
1710
|
-
p.log.message(dim(` Will migrate to swarm-mail unified database`));
|
|
1711
|
-
|
|
1712
|
-
const shouldMigrate = await p.confirm({
|
|
1713
|
-
message: "Migrate to swarm-mail database? (recommended)",
|
|
1714
|
-
initialValue: true,
|
|
1715
|
-
});
|
|
1716
|
-
|
|
1717
|
-
if (p.isCancel(shouldMigrate)) {
|
|
1718
|
-
p.cancel("Setup cancelled");
|
|
1719
|
-
process.exit(0);
|
|
1720
|
-
}
|
|
1721
|
-
|
|
1722
|
-
if (shouldMigrate) {
|
|
1723
|
-
const migrateSpinner = p.spinner();
|
|
1724
|
-
migrateSpinner.start("Connecting to target database...");
|
|
1725
|
-
|
|
1726
|
-
try {
|
|
1727
|
-
// Get swarm-mail database for this project
|
|
1728
|
-
swarmMail = await getSwarmMail(cwd);
|
|
1729
|
-
const targetDb = await swarmMail.getDatabase(cwd);
|
|
1730
|
-
migrateSpinner.message("Migrating memories...");
|
|
1731
|
-
|
|
1732
|
-
// Run migration with progress updates
|
|
1733
|
-
const result = await migrateLegacyMemories({
|
|
1734
|
-
targetDb,
|
|
1735
|
-
onProgress: (msg) => {
|
|
1736
|
-
// Update spinner message for key milestones
|
|
1737
|
-
if (msg.includes("complete") || msg.includes("Progress:")) {
|
|
1738
|
-
migrateSpinner.message(msg.replace("[migrate] ", ""));
|
|
1739
|
-
}
|
|
1740
|
-
},
|
|
1741
|
-
});
|
|
1742
|
-
|
|
1743
|
-
migrateSpinner.stop("Semantic memory migration complete");
|
|
1744
|
-
|
|
1745
|
-
if (result.migrated > 0) {
|
|
1746
|
-
p.log.success(`Migrated ${result.migrated} memories to swarm-mail`);
|
|
1747
|
-
}
|
|
1748
|
-
if (result.skipped > 0) {
|
|
1749
|
-
p.log.message(dim(` Skipped ${result.skipped} (already exist)`));
|
|
1750
|
-
}
|
|
1751
|
-
if (result.failed > 0) {
|
|
1752
|
-
p.log.warn(`Failed to migrate ${result.failed} memories`);
|
|
1753
|
-
for (const error of result.errors.slice(0, 3)) {
|
|
1754
|
-
p.log.message(dim(` ${error}`));
|
|
1755
|
-
}
|
|
1756
|
-
if (result.errors.length > 3) {
|
|
1757
|
-
p.log.message(dim(` ... and ${result.errors.length - 3} more errors`));
|
|
1758
|
-
}
|
|
1759
|
-
}
|
|
1760
|
-
|
|
1761
|
-
// Close the connection to allow process to exit
|
|
1762
|
-
await swarmMail.close();
|
|
1763
|
-
swarmMail = null;
|
|
1764
|
-
} catch (error) {
|
|
1765
|
-
migrateSpinner.stop("Migration failed");
|
|
1766
|
-
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
1767
|
-
// Hide internal PGLite errors, only show user-actionable messages
|
|
1768
|
-
if (!errorMsg.includes("NOTICE") && !errorMsg.includes("PGlite")) {
|
|
1769
|
-
p.log.error(errorMsg);
|
|
1770
|
-
} else {
|
|
1771
|
-
p.log.warn("Migration encountered an error - please try again");
|
|
1772
|
-
}
|
|
1773
|
-
if (swarmMail) {
|
|
1774
|
-
await swarmMail.close();
|
|
1775
|
-
swarmMail = null;
|
|
1776
|
-
}
|
|
1777
|
-
}
|
|
1778
|
-
} else {
|
|
1779
|
-
p.log.warn("Skipping migration - legacy semantic-memory will continue to work but is deprecated");
|
|
1780
|
-
}
|
|
1781
|
-
}
|
|
1782
|
-
}
|
|
1783
|
-
} catch (error) {
|
|
1784
|
-
// Failed to connect to target database - log and skip
|
|
1785
|
-
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
1786
|
-
// Hide internal PGLite errors
|
|
1787
|
-
if (!errorMsg.includes("NOTICE") && !errorMsg.includes("PGlite")) {
|
|
1788
|
-
p.log.message(dim(` Could not check migration status: ${errorMsg}`));
|
|
1789
|
-
} else {
|
|
1790
|
-
p.log.message(dim(" Could not check migration status - skipping"));
|
|
1791
|
-
}
|
|
1792
|
-
if (swarmMail) {
|
|
1793
|
-
await swarmMail.close();
|
|
1794
|
-
}
|
|
1795
|
-
}
|
|
1796
|
-
} else {
|
|
1797
|
-
p.log.message(dim(" No legacy semantic-memory database found"));
|
|
1798
|
-
}
|
|
1799
|
-
|
|
1800
1827
|
// Check for legacy semantic-memory MCP server in OpenCode config
|
|
1801
1828
|
p.log.step("Checking for legacy MCP servers...");
|
|
1802
1829
|
const opencodeConfigPath = join(configDir, 'config.json');
|
|
@@ -2445,6 +2472,7 @@ ${cyan("Commands:")}
|
|
|
2445
2472
|
swarm init Initialize beads in current project
|
|
2446
2473
|
swarm config Show paths to generated config files
|
|
2447
2474
|
swarm agents Update AGENTS.md with skill awareness
|
|
2475
|
+
swarm migrate Migrate PGlite database to libSQL
|
|
2448
2476
|
swarm update Update to latest version
|
|
2449
2477
|
swarm version Show version and banner
|
|
2450
2478
|
swarm tool Execute a tool (for plugin wrapper)
|
|
@@ -2683,6 +2711,232 @@ async function agents() {
|
|
|
2683
2711
|
p.outro("Done");
|
|
2684
2712
|
}
|
|
2685
2713
|
|
|
2714
|
+
// ============================================================================
|
|
2715
|
+
// Migrate Command - PGlite → libSQL migration
|
|
2716
|
+
// ============================================================================
|
|
2717
|
+
|
|
2718
|
+
async function migrate() {
|
|
2719
|
+
p.intro("swarm migrate v" + VERSION);
|
|
2720
|
+
|
|
2721
|
+
const projectPath = process.cwd();
|
|
2722
|
+
|
|
2723
|
+
// Calculate the temp directory path (same logic as libsql.convenience.ts)
|
|
2724
|
+
const tempDirName = getLibSQLProjectTempDirName(projectPath);
|
|
2725
|
+
const tempDir = join(tmpdir(), tempDirName);
|
|
2726
|
+
const pglitePath = join(tempDir, "streams");
|
|
2727
|
+
const libsqlPath = join(tempDir, "streams.db");
|
|
2728
|
+
|
|
2729
|
+
// Check if PGlite exists
|
|
2730
|
+
if (!pgliteExists(pglitePath)) {
|
|
2731
|
+
p.log.success("No PGlite database found - nothing to migrate!");
|
|
2732
|
+
p.outro("Done");
|
|
2733
|
+
return;
|
|
2734
|
+
}
|
|
2735
|
+
|
|
2736
|
+
// Dry run to show counts
|
|
2737
|
+
const s = p.spinner();
|
|
2738
|
+
s.start("Scanning PGlite database...");
|
|
2739
|
+
|
|
2740
|
+
try {
|
|
2741
|
+
const dryResult = await migratePGliteToLibSQL({
|
|
2742
|
+
pglitePath,
|
|
2743
|
+
libsqlPath,
|
|
2744
|
+
dryRun: true,
|
|
2745
|
+
onProgress: () => {}, // silent during dry run
|
|
2746
|
+
});
|
|
2747
|
+
|
|
2748
|
+
s.stop("Scan complete");
|
|
2749
|
+
|
|
2750
|
+
// Show summary
|
|
2751
|
+
const totalItems =
|
|
2752
|
+
dryResult.memories.migrated +
|
|
2753
|
+
dryResult.beads.migrated +
|
|
2754
|
+
dryResult.messages.migrated +
|
|
2755
|
+
dryResult.agents.migrated +
|
|
2756
|
+
dryResult.events.migrated;
|
|
2757
|
+
|
|
2758
|
+
if (totalItems === 0) {
|
|
2759
|
+
p.log.warn("PGlite database exists but contains no data");
|
|
2760
|
+
p.outro("Nothing to migrate");
|
|
2761
|
+
return;
|
|
2762
|
+
}
|
|
2763
|
+
|
|
2764
|
+
p.log.step("Found data to migrate:");
|
|
2765
|
+
if (dryResult.memories.migrated > 0) {
|
|
2766
|
+
p.log.message(` 📝 ${dryResult.memories.migrated} memories`);
|
|
2767
|
+
}
|
|
2768
|
+
if (dryResult.beads.migrated > 0) {
|
|
2769
|
+
p.log.message(` 🐝 ${dryResult.beads.migrated} cells`);
|
|
2770
|
+
}
|
|
2771
|
+
if (dryResult.messages.migrated > 0) {
|
|
2772
|
+
p.log.message(` ✉️ ${dryResult.messages.migrated} messages`);
|
|
2773
|
+
}
|
|
2774
|
+
if (dryResult.agents.migrated > 0) {
|
|
2775
|
+
p.log.message(` 🤖 ${dryResult.agents.migrated} agents`);
|
|
2776
|
+
}
|
|
2777
|
+
if (dryResult.events.migrated > 0) {
|
|
2778
|
+
p.log.message(` 📋 ${dryResult.events.migrated} events`);
|
|
2779
|
+
}
|
|
2780
|
+
|
|
2781
|
+
// Confirm
|
|
2782
|
+
const confirm = await p.confirm({
|
|
2783
|
+
message: "Migrate this data to libSQL?",
|
|
2784
|
+
initialValue: true,
|
|
2785
|
+
});
|
|
2786
|
+
|
|
2787
|
+
if (p.isCancel(confirm) || !confirm) {
|
|
2788
|
+
p.outro("Migration cancelled");
|
|
2789
|
+
return;
|
|
2790
|
+
}
|
|
2791
|
+
|
|
2792
|
+
// Run actual migration
|
|
2793
|
+
const migrateSpinner = p.spinner();
|
|
2794
|
+
migrateSpinner.start("Migrating data...");
|
|
2795
|
+
|
|
2796
|
+
const result = await migratePGliteToLibSQL({
|
|
2797
|
+
pglitePath,
|
|
2798
|
+
libsqlPath,
|
|
2799
|
+
dryRun: false,
|
|
2800
|
+
onProgress: (msg) => {
|
|
2801
|
+
// Update spinner for key milestones
|
|
2802
|
+
if (msg.includes("Migrating") || msg.includes("complete")) {
|
|
2803
|
+
migrateSpinner.message(msg.replace("[migrate] ", ""));
|
|
2804
|
+
}
|
|
2805
|
+
},
|
|
2806
|
+
});
|
|
2807
|
+
|
|
2808
|
+
migrateSpinner.stop("Migration complete!");
|
|
2809
|
+
|
|
2810
|
+
// Show results
|
|
2811
|
+
const showStat = (label: string, stat: { migrated: number; skipped: number; failed: number }) => {
|
|
2812
|
+
if (stat.migrated > 0 || stat.skipped > 0 || stat.failed > 0) {
|
|
2813
|
+
const parts = [];
|
|
2814
|
+
if (stat.migrated > 0) parts.push(green(`${stat.migrated} migrated`));
|
|
2815
|
+
if (stat.skipped > 0) parts.push(dim(`${stat.skipped} skipped`));
|
|
2816
|
+
if (stat.failed > 0) parts.push(`\x1b[31m${stat.failed} failed\x1b[0m`);
|
|
2817
|
+
p.log.message(` ${label}: ${parts.join(", ")}`);
|
|
2818
|
+
}
|
|
2819
|
+
};
|
|
2820
|
+
|
|
2821
|
+
showStat("Memories", result.memories);
|
|
2822
|
+
showStat("Cells", result.beads);
|
|
2823
|
+
showStat("Messages", result.messages);
|
|
2824
|
+
showStat("Agents", result.agents);
|
|
2825
|
+
showStat("Events", result.events);
|
|
2826
|
+
|
|
2827
|
+
if (result.errors.length > 0) {
|
|
2828
|
+
p.log.warn(`${result.errors.length} errors occurred`);
|
|
2829
|
+
}
|
|
2830
|
+
|
|
2831
|
+
p.outro("Migration complete! 🐝");
|
|
2832
|
+
|
|
2833
|
+
} catch (error) {
|
|
2834
|
+
s.stop("Migration failed");
|
|
2835
|
+
p.log.error(error instanceof Error ? error.message : String(error));
|
|
2836
|
+
p.outro("Migration failed");
|
|
2837
|
+
process.exit(1);
|
|
2838
|
+
}
|
|
2839
|
+
}
|
|
2840
|
+
|
|
2841
|
+
// ============================================================================
|
|
2842
|
+
// Database Info Command
|
|
2843
|
+
// ============================================================================
|
|
2844
|
+
|
|
2845
|
+
/**
|
|
2846
|
+
* Show database location and status
|
|
2847
|
+
*
|
|
2848
|
+
* Helps debug which database is being used and its schema state.
|
|
2849
|
+
*/
|
|
2850
|
+
async function db() {
|
|
2851
|
+
const projectPath = process.cwd();
|
|
2852
|
+
const projectName = basename(projectPath);
|
|
2853
|
+
const hash = hashLibSQLProjectPath(projectPath);
|
|
2854
|
+
const dbPath = getLibSQLDatabasePath(projectPath);
|
|
2855
|
+
const dbDir = dirname(dbPath.replace("file:", ""));
|
|
2856
|
+
const dbFile = dbPath.replace("file:", "");
|
|
2857
|
+
|
|
2858
|
+
console.log(yellow(BANNER));
|
|
2859
|
+
console.log(dim(` ${TAGLINE}\n`));
|
|
2860
|
+
|
|
2861
|
+
console.log(cyan(" Database Info\n"));
|
|
2862
|
+
|
|
2863
|
+
console.log(` ${dim("Project:")} ${projectPath}`);
|
|
2864
|
+
console.log(` ${dim("Project Name:")} ${projectName}`);
|
|
2865
|
+
console.log(` ${dim("Hash:")} ${hash}`);
|
|
2866
|
+
console.log(` ${dim("DB Directory:")} ${dbDir}`);
|
|
2867
|
+
console.log(` ${dim("DB File:")} ${dbFile}`);
|
|
2868
|
+
console.log();
|
|
2869
|
+
|
|
2870
|
+
// Check if database exists
|
|
2871
|
+
if (existsSync(dbFile)) {
|
|
2872
|
+
const stats = statSync(dbFile);
|
|
2873
|
+
const sizeKB = Math.round(stats.size / 1024);
|
|
2874
|
+
console.log(` ${green("✓")} Database exists (${sizeKB} KB)`);
|
|
2875
|
+
|
|
2876
|
+
// Check schema
|
|
2877
|
+
try {
|
|
2878
|
+
const { execSync } = await import("child_process");
|
|
2879
|
+
const schema = execSync(`sqlite3 "${dbFile}" "SELECT sql FROM sqlite_master WHERE type='table' AND name='beads'"`, { encoding: "utf-8" }).trim();
|
|
2880
|
+
|
|
2881
|
+
if (schema) {
|
|
2882
|
+
const hasProjectKey = schema.includes("project_key");
|
|
2883
|
+
if (hasProjectKey) {
|
|
2884
|
+
console.log(` ${green("✓")} Schema is correct (has project_key)`);
|
|
2885
|
+
} else {
|
|
2886
|
+
console.log(` \x1b[31m✗\x1b[0m Schema is OLD (missing project_key)`);
|
|
2887
|
+
console.log();
|
|
2888
|
+
console.log(dim(" To fix: delete the database and restart OpenCode"));
|
|
2889
|
+
console.log(dim(` rm -r "${dbDir}"`));
|
|
2890
|
+
}
|
|
2891
|
+
} else {
|
|
2892
|
+
console.log(` ${dim("○")} No beads table yet (will be created on first use)`);
|
|
2893
|
+
}
|
|
2894
|
+
|
|
2895
|
+
// Check schema_version
|
|
2896
|
+
try {
|
|
2897
|
+
const version = execSync(`sqlite3 "${dbFile}" "SELECT MAX(version) FROM schema_version"`, { encoding: "utf-8" }).trim();
|
|
2898
|
+
if (version && version !== "") {
|
|
2899
|
+
console.log(` ${dim("○")} Schema version: ${version}`);
|
|
2900
|
+
}
|
|
2901
|
+
} catch {
|
|
2902
|
+
console.log(` ${dim("○")} No schema_version table`);
|
|
2903
|
+
}
|
|
2904
|
+
|
|
2905
|
+
// Count records
|
|
2906
|
+
try {
|
|
2907
|
+
const beadCount = execSync(`sqlite3 "${dbFile}" "SELECT COUNT(*) FROM beads"`, { encoding: "utf-8" }).trim();
|
|
2908
|
+
console.log(` ${dim("○")} Cells: ${beadCount}`);
|
|
2909
|
+
} catch {
|
|
2910
|
+
// Table doesn't exist yet
|
|
2911
|
+
}
|
|
2912
|
+
|
|
2913
|
+
try {
|
|
2914
|
+
const memoryCount = execSync(`sqlite3 "${dbFile}" "SELECT COUNT(*) FROM memories"`, { encoding: "utf-8" }).trim();
|
|
2915
|
+
console.log(` ${dim("○")} Memories: ${memoryCount}`);
|
|
2916
|
+
} catch {
|
|
2917
|
+
// Table doesn't exist yet
|
|
2918
|
+
}
|
|
2919
|
+
|
|
2920
|
+
} catch (error) {
|
|
2921
|
+
console.log(` ${dim("○")} Could not inspect schema (sqlite3 not available)`);
|
|
2922
|
+
}
|
|
2923
|
+
} else {
|
|
2924
|
+
console.log(` ${dim("○")} Database does not exist yet`);
|
|
2925
|
+
console.log(dim(" Will be created on first use"));
|
|
2926
|
+
}
|
|
2927
|
+
|
|
2928
|
+
// Check for legacy PGLite
|
|
2929
|
+
console.log();
|
|
2930
|
+
const pglitePath = join(dbDir, "streams");
|
|
2931
|
+
if (existsSync(pglitePath)) {
|
|
2932
|
+
console.log(` \x1b[33m!\x1b[0m Legacy PGLite directory exists`);
|
|
2933
|
+
console.log(dim(` ${pglitePath}`));
|
|
2934
|
+
console.log(dim(" Run 'swarm migrate' to migrate data"));
|
|
2935
|
+
}
|
|
2936
|
+
|
|
2937
|
+
console.log();
|
|
2938
|
+
}
|
|
2939
|
+
|
|
2686
2940
|
// ============================================================================
|
|
2687
2941
|
// Main
|
|
2688
2942
|
// ============================================================================
|
|
@@ -2721,6 +2975,12 @@ switch (command) {
|
|
|
2721
2975
|
case "agents":
|
|
2722
2976
|
await agents();
|
|
2723
2977
|
break;
|
|
2978
|
+
case "migrate":
|
|
2979
|
+
await migrate();
|
|
2980
|
+
break;
|
|
2981
|
+
case "db":
|
|
2982
|
+
await db();
|
|
2983
|
+
break;
|
|
2724
2984
|
case "version":
|
|
2725
2985
|
case "--version":
|
|
2726
2986
|
case "-v":
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
* This is NOT about preserving state for a human - it's about the swarm continuing
|
|
39
39
|
* autonomously after context compression.
|
|
40
40
|
*/
|
|
41
|
-
export declare const SWARM_COMPACTION_CONTEXT = "## \uD83D\uDC1D SWARM ACTIVE - Keep Cooking\n\nYou are the **COORDINATOR** of an active swarm. Context was compacted but the swarm is still running.\n\n**YOUR JOB:** Keep orchestrating. Spawn agents. Monitor progress. Unblock work. Ship it.\n\n### Preserve in Summary\n\nExtract from session context:\n\n1. **Epic & Subtasks** - IDs, titles, status, file assignments\n2. **What's Running** - Which agents are active, what they're working on \n3. **What's Blocked** - Blockers and what's needed to unblock\n4. **What's Done** - Completed work and any follow-ups needed\n5. **What's Next** - Pending subtasks ready to spawn\n\n### Summary Format\n\n```\n## \uD83D\uDC1D Swarm State\n\n**Epic:** <bd-xxx> - <title>\n**Project:** <path>\n**Progress:** X/Y subtasks complete\n\n**Active:**\n- <bd-xxx>: <title> [in_progress] \u2192 <agent> working on <files>\n\n**Blocked:**\n- <bd-xxx>: <title> - BLOCKED: <reason>\n\n**Completed:**\n- <bd-xxx>: <title> \u2713\n\n**Ready to Spawn:**\n- <bd-xxx>: <title> (files: <...>)\n```\n\n### On Resume - IMMEDIATELY\n\n1. `swarm_status(epic_id=\"<epic>\", project_key=\"<path>\")` - Get current state\n2. `swarmmail_inbox(limit=5)` - Check for agent messages\n3. **Spawn ready subtasks** - Don't wait, fire them off\
|
|
41
|
+
export declare const SWARM_COMPACTION_CONTEXT = "## \uD83D\uDC1D SWARM ACTIVE - Keep Cooking\n\nYou are the **COORDINATOR** of an active swarm. Context was compacted but the swarm is still running.\n\n**YOUR JOB:** Keep orchestrating. Spawn agents. Monitor progress. Unblock work. Ship it.\n\n### Preserve in Summary\n\nExtract from session context:\n\n1. **Epic & Subtasks** - IDs, titles, status, file assignments\n2. **What's Running** - Which agents are active, what they're working on \n3. **What's Blocked** - Blockers and what's needed to unblock\n4. **What's Done** - Completed work and any follow-ups needed\n5. **What's Next** - Pending subtasks ready to spawn\n\n### Summary Format\n\n```\n## \uD83D\uDC1D Swarm State\n\n**Epic:** <bd-xxx> - <title>\n**Project:** <path>\n**Progress:** X/Y subtasks complete\n\n**Active:**\n- <bd-xxx>: <title> [in_progress] \u2192 <agent> working on <files>\n\n**Blocked:**\n- <bd-xxx>: <title> - BLOCKED: <reason>\n\n**Completed:**\n- <bd-xxx>: <title> \u2713\n\n**Ready to Spawn:**\n- <bd-xxx>: <title> (files: <...>)\n```\n\n### On Resume - IMMEDIATELY\n\n1. `swarm_status(epic_id=\"<epic>\", project_key=\"<path>\")` - Get current state\n2. `swarmmail_inbox(limit=5)` - Check for agent messages\n3. `swarm_review(project_key, epic_id, task_id, files_touched)` - Review any completed work\n4. `swarm_review_feedback(project_key, task_id, worker_id, status, issues)` - Approve or request changes\n5. **Spawn ready subtasks** - Don't wait, fire them off\n6. **Unblock blocked work** - Resolve dependencies, reassign if needed\n7. **Collect completed work** - Close done subtasks, verify quality\n\n### Keep the Swarm Cooking\n\n- **Spawn aggressively** - If a subtask is ready and unblocked, spawn an agent\n- **Monitor actively** - Check status, read messages, respond to blockers\n- **Close the loop** - When all subtasks done, verify and close the epic\n- **Don't stop** - The swarm runs until the epic is closed\n\n**You are not waiting for instructions. You are the coordinator. Coordinate.**\n";
|
|
42
42
|
/**
|
|
43
43
|
* Fallback detection prompt - tells the compactor what to look for
|
|
44
44
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction-hook.d.ts","sourceRoot":"","sources":["../src/compaction-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AASH;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,
|
|
1
|
+
{"version":3,"file":"compaction-hook.d.ts","sourceRoot":"","sources":["../src/compaction-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AASH;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,k9DAwDpC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,0nCAiCpC,CAAC;AAoIF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,oBAAoB,KAEhC,QAAQ;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC7B,QAAQ;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,KAC5B,OAAO,CAAC,IAAI,CAAC,CAcjB"}
|
package/dist/hive.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hive.d.ts","sourceRoot":"","sources":["../src/hive.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hive.d.ts","sourceRoot":"","sources":["../src/hive.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -684,7 +684,6 @@ export declare const allTools: {
|
|
|
684
684
|
summary: import("zod").ZodString;
|
|
685
685
|
evaluation: import("zod").ZodOptional<import("zod").ZodString>;
|
|
686
686
|
files_touched: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
|
|
687
|
-
skip_ubs_scan: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
688
687
|
skip_verification: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
689
688
|
planned_files: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
|
|
690
689
|
start_time: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
@@ -699,7 +698,6 @@ export declare const allTools: {
|
|
|
699
698
|
summary: string;
|
|
700
699
|
evaluation?: string | undefined;
|
|
701
700
|
files_touched?: string[] | undefined;
|
|
702
|
-
skip_ubs_scan?: boolean | undefined;
|
|
703
701
|
skip_verification?: boolean | undefined;
|
|
704
702
|
planned_files?: string[] | undefined;
|
|
705
703
|
start_time?: number | undefined;
|