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.
Files changed (48) hide show
  1. package/.turbo/turbo-build.log +10 -9
  2. package/.turbo/turbo-test.log +319 -317
  3. package/CHANGELOG.md +134 -0
  4. package/README.md +7 -4
  5. package/bin/swarm.ts +388 -128
  6. package/dist/compaction-hook.d.ts +1 -1
  7. package/dist/compaction-hook.d.ts.map +1 -1
  8. package/dist/hive.d.ts.map +1 -1
  9. package/dist/index.d.ts +0 -2
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +123 -134
  12. package/dist/memory-tools.d.ts.map +1 -1
  13. package/dist/memory.d.ts +5 -4
  14. package/dist/memory.d.ts.map +1 -1
  15. package/dist/plugin.js +118 -131
  16. package/dist/swarm-orchestrate.d.ts +29 -5
  17. package/dist/swarm-orchestrate.d.ts.map +1 -1
  18. package/dist/swarm-prompts.d.ts +7 -0
  19. package/dist/swarm-prompts.d.ts.map +1 -1
  20. package/dist/swarm.d.ts +0 -2
  21. package/dist/swarm.d.ts.map +1 -1
  22. package/evals/lib/{data-loader.test.ts → data-loader.evalite-test.ts} +7 -6
  23. package/evals/lib/data-loader.ts +1 -1
  24. package/evals/scorers/{outcome-scorers.test.ts → outcome-scorers.evalite-test.ts} +1 -1
  25. package/examples/plugin-wrapper-template.ts +19 -4
  26. package/global-skills/swarm-coordination/SKILL.md +118 -8
  27. package/package.json +2 -2
  28. package/src/compaction-hook.ts +5 -3
  29. package/src/hive.integration.test.ts +83 -1
  30. package/src/hive.ts +37 -12
  31. package/src/mandate-storage.integration.test.ts +601 -0
  32. package/src/memory-tools.ts +6 -4
  33. package/src/memory.integration.test.ts +117 -49
  34. package/src/memory.test.ts +41 -217
  35. package/src/memory.ts +12 -8
  36. package/src/repo-crawl.integration.test.ts +441 -0
  37. package/src/skills.integration.test.ts +1056 -0
  38. package/src/structured.integration.test.ts +817 -0
  39. package/src/swarm-deferred.integration.test.ts +157 -0
  40. package/src/swarm-deferred.test.ts +38 -0
  41. package/src/swarm-mail.integration.test.ts +15 -19
  42. package/src/swarm-orchestrate.integration.test.ts +282 -0
  43. package/src/swarm-orchestrate.ts +96 -201
  44. package/src/swarm-prompts.test.ts +92 -0
  45. package/src/swarm-prompts.ts +69 -0
  46. package/src/swarm-review.integration.test.ts +290 -0
  47. package/src/swarm.integration.test.ts +23 -20
  48. 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
- getMigrationStatus,
41
- migrateLegacyMemories,
42
- targetHasMemories,
40
+ migratePGliteToLibSQL,
41
+ pgliteExists,
42
+ getLibSQLProjectTempDirName,
43
+ getLibSQLDatabasePath,
44
+ hashLibSQLProjectPath,
43
45
  } from "swarm-mail";
44
- import { getSwarmMail } from "swarm-mail";
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: Monitor
1057
- \`\`\`
1058
- swarm_status(epic_id, project_key)
1059
- swarmmail_inbox()
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
- Intervene if: blocked >5min, file conflicts, scope creep.
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
- swarm_complete(...)
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 FIRST
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\n4. **Unblock blocked work** - Resolve dependencies, reassign if needed\n5. **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";
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,2wDAsDpC,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"}
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"}
@@ -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;