@swarmdo/cli 1.4.8 → 1.5.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 (88) hide show
  1. package/README.md +3 -1
  2. package/dist/src/commands/hooks.d.ts.map +1 -1
  3. package/dist/src/commands/hooks.js +26 -24
  4. package/dist/src/commands/hooks.js.map +1 -1
  5. package/dist/src/commands/index.d.ts.map +1 -1
  6. package/dist/src/commands/index.js +4 -0
  7. package/dist/src/commands/index.js.map +1 -1
  8. package/dist/src/commands/integrations.d.ts +14 -0
  9. package/dist/src/commands/integrations.d.ts.map +1 -0
  10. package/dist/src/commands/integrations.js +158 -0
  11. package/dist/src/commands/integrations.js.map +1 -0
  12. package/dist/src/commands/memory.d.ts.map +1 -1
  13. package/dist/src/commands/memory.js +50 -1
  14. package/dist/src/commands/memory.js.map +1 -1
  15. package/dist/src/commands/providers.d.ts.map +1 -1
  16. package/dist/src/commands/providers.js +3 -0
  17. package/dist/src/commands/providers.js.map +1 -1
  18. package/dist/src/commands/release.d.ts +15 -0
  19. package/dist/src/commands/release.d.ts.map +1 -0
  20. package/dist/src/commands/release.js +224 -0
  21. package/dist/src/commands/release.js.map +1 -0
  22. package/dist/src/commands/security.d.ts.map +1 -1
  23. package/dist/src/commands/security.js +14 -0
  24. package/dist/src/commands/security.js.map +1 -1
  25. package/dist/src/commands/transcript.d.ts.map +1 -1
  26. package/dist/src/commands/transcript.js +82 -1
  27. package/dist/src/commands/transcript.js.map +1 -1
  28. package/dist/src/commands/usage.d.ts.map +1 -1
  29. package/dist/src/commands/usage.js +80 -1
  30. package/dist/src/commands/usage.js.map +1 -1
  31. package/dist/src/config-lint/lint.d.ts.map +1 -1
  32. package/dist/src/config-lint/lint.js +11 -1
  33. package/dist/src/config-lint/lint.js.map +1 -1
  34. package/dist/src/init/statusline-generator.js +6 -6
  35. package/dist/src/integrations/integrations.d.ts +54 -0
  36. package/dist/src/integrations/integrations.d.ts.map +1 -0
  37. package/dist/src/integrations/integrations.js +162 -0
  38. package/dist/src/integrations/integrations.js.map +1 -0
  39. package/dist/src/mcp-tools/agent-execute-core.d.ts.map +1 -1
  40. package/dist/src/mcp-tools/agent-execute-core.js +25 -3
  41. package/dist/src/mcp-tools/agent-execute-core.js.map +1 -1
  42. package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -1
  43. package/dist/src/mcp-tools/agentdb-tools.js +8 -8
  44. package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
  45. package/dist/src/memory/graph-edge-writer.d.ts +12 -0
  46. package/dist/src/memory/graph-edge-writer.d.ts.map +1 -1
  47. package/dist/src/memory/graph-edge-writer.js +32 -1
  48. package/dist/src/memory/graph-edge-writer.js.map +1 -1
  49. package/dist/src/memory-vault/watch.d.ts +32 -0
  50. package/dist/src/memory-vault/watch.d.ts.map +1 -0
  51. package/dist/src/memory-vault/watch.js +66 -0
  52. package/dist/src/memory-vault/watch.js.map +1 -0
  53. package/dist/src/providers/openrouter-config.d.ts +91 -0
  54. package/dist/src/providers/openrouter-config.d.ts.map +1 -0
  55. package/dist/src/providers/openrouter-config.js +186 -0
  56. package/dist/src/providers/openrouter-config.js.map +1 -0
  57. package/dist/src/release/release.d.ts +72 -0
  58. package/dist/src/release/release.d.ts.map +1 -0
  59. package/dist/src/release/release.js +86 -0
  60. package/dist/src/release/release.js.map +1 -0
  61. package/dist/src/resilience/backoff.d.ts +23 -0
  62. package/dist/src/resilience/backoff.d.ts.map +1 -0
  63. package/dist/src/resilience/backoff.js +30 -0
  64. package/dist/src/resilience/backoff.js.map +1 -0
  65. package/dist/src/swarmvector/model-router.d.ts.map +1 -1
  66. package/dist/src/swarmvector/model-router.js +14 -0
  67. package/dist/src/swarmvector/model-router.js.map +1 -1
  68. package/dist/src/transcript/search.d.ts +39 -0
  69. package/dist/src/transcript/search.d.ts.map +1 -0
  70. package/dist/src/transcript/search.js +67 -0
  71. package/dist/src/transcript/search.js.map +1 -0
  72. package/dist/src/usage/diff.d.ts +69 -0
  73. package/dist/src/usage/diff.d.ts.map +1 -0
  74. package/dist/src/usage/diff.js +112 -0
  75. package/dist/src/usage/diff.js.map +1 -0
  76. package/dist/tsconfig.tsbuildinfo +1 -1
  77. package/package.json +1 -3
  78. package/plugins/swarmdo-metaharness/scripts/smoke.sh +11 -11
  79. package/plugins/swarmdo-metaharness/scripts/test-mcp-tools.mjs +16 -2
  80. package/vendor/cli-core/dist/src/index.js +1 -1
  81. package/vendor/cli-core/dist/src/index.js.map +1 -1
  82. package/vendor/neural/dist/flash-attention.d.ts +1 -1
  83. package/vendor/neural/dist/flash-attention.js +1 -1
  84. package/vendor/shared/dist/hooks/safety/git-commit.js +1 -1
  85. package/vendor/shared/dist/hooks/safety/git-commit.js.map +1 -1
  86. package/vendor/shared/dist/mcp/transport/http.d.ts.map +1 -1
  87. package/vendor/shared/dist/mcp/transport/http.js +8 -1
  88. package/vendor/shared/dist/mcp/transport/http.js.map +1 -1
package/README.md CHANGED
@@ -89,7 +89,7 @@ This adds slash commands and agent definitions only. The Swarmdo MCP server is N
89
89
  | [**swarmdo-agentdb**](plugins/swarmdo-agentdb/README.md) | Fast vector database for agent memory |
90
90
  | [**swarmdo-rag-memory**](plugins/swarmdo-rag-memory/README.md) | Smart retrieval — hybrid search, graph hops, diversity ranking |
91
91
  | [**swarmdo-rvf**](plugins/swarmdo-rvf/README.md) | Save and restore agent memory across sessions |
92
- | [**swarmdo-swarmvector**](plugins/swarmdo-swarmvector/README.md) | [`swarmvector`](https://npmjs.com/package/swarmvector) — GPU-accelerated search, Graph RAG, 103 tools |
92
+ | [**swarmdo-swarmvector**](plugins/swarmdo-swarmvector/README.md) | `swarmvector` (vendored in-repo at `v3/vendor/swarmvector`) — GPU-accelerated search, Graph RAG, 103 tools |
93
93
  | [**swarmdo-knowledge-graph**](plugins/swarmdo-knowledge-graph/README.md) | Build and traverse entity relationship maps |
94
94
 
95
95
  #### Intelligence & Learning
@@ -276,6 +276,8 @@ The recent release train added a full day-to-day operations layer around the swa
276
276
  | `swarmdo task … --dependencies` | **Task dependency DAG** — `task ready` lists unblocked work, `task graph` renders the graph, the dispatcher gates on readiness |
277
277
  | `swarmdo worktree` (alias `wt`) | **Parallel-agent isolation** on git worktrees — add / list / diff / merge / remove |
278
278
  | `swarmdo transcript` (alias `tx`) | **Export any Claude Code session** to clean markdown — system noise stripped, ready to share |
279
+ | `swarmdo integrations` (alias `integrate`) | **Use swarmdo from Codex CLI, GitHub Copilot CLI, and pi** — one command wires AGENTS.md + each CLI's MCP config (idempotent, dry-run first, never touches your Claude Code setup) |
280
+ | OpenRouter model pool | **Let swarms pick from any models you configure** — declare tier-mapped OpenRouter models in `swarmdo.config.json`; the router Thompson-samples among them per task and the execution layer dispatches the winner |
279
281
  | `swarmdo changelog` (alias `notes`) | **Release notes from conventional commits** — `--out NOTES.md` feeds `gh release create --notes-file` |
280
282
  | `swarmdo mcp doctor` | **MCP config diagnosis** — missing binaries, bad URLs, malformed entries across `.mcp.json` + `~/.claude.json` |
281
283
  | `swarmdo hooks notify -d` | **Desktop notifications** — OS-native toast (macOS `osascript`, Linux `notify-send`) |
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/commands/hooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AAwuK1E,eAAO,MAAM,YAAY,EAAE,OA2G1B,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/commands/hooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AAuuK1E,eAAO,MAAM,YAAY,EAAE,OA2G1B,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -3413,32 +3413,34 @@ const statuslineCommand = {
3413
3413
  const dddProgress = Math.min(100, Math.floor((domainsCompleted / totalDomains) * 100));
3414
3414
  return { domainsCompleted, totalDomains, dddProgress, patternsLearned: learning.patterns, sessionsCompleted: learning.sessions };
3415
3415
  }
3416
- // Get security status
3416
+ // Get security status from the last real `security scan` artifact.
3417
+ // (Until v1.4.17 this counted files in never-written directories against a
3418
+ // hardcoded totalCves=3 — the V3-era CVE-1/2/3 tracker — so every install
3419
+ // showed PENDING forever.)
3417
3420
  function getSecurityStatus() {
3418
- const scanResultsPath = path.join(process.cwd(), '.claude', 'security-scans');
3419
- let cvesFixed = 0;
3420
- const totalCves = 3;
3421
- if (fs.existsSync(scanResultsPath)) {
3422
- try {
3423
- const scans = fs.readdirSync(scanResultsPath).filter((f) => f.endsWith('.json'));
3424
- cvesFixed = Math.min(totalCves, scans.length);
3425
- }
3426
- catch {
3427
- // Ignore
3428
- }
3429
- }
3430
- const auditPath = path.join(process.cwd(), '.swarm', 'security');
3431
- if (fs.existsSync(auditPath)) {
3421
+ const candidates = [
3422
+ path.join(process.cwd(), '.swarmdo', 'security', 'last-scan.json'),
3423
+ path.join(process.cwd(), '.swarm', 'security', 'last-scan.json'), // legacy layout
3424
+ ];
3425
+ for (const p of candidates) {
3432
3426
  try {
3433
- const audits = fs.readdirSync(auditPath).filter((f) => f.includes('audit'));
3434
- cvesFixed = Math.min(totalCves, Math.max(cvesFixed, audits.length));
3427
+ if (!fs.existsSync(p))
3428
+ continue;
3429
+ const scan = JSON.parse(fs.readFileSync(p, 'utf-8'));
3430
+ const critical = Number(scan.critical) || 0;
3431
+ const high = Number(scan.high) || 0;
3432
+ const total = Number(scan.total) || 0;
3433
+ const scannedAt = typeof scan.scannedAt === 'string' ? scan.scannedAt : null;
3434
+ const ageMs = scannedAt ? Date.now() - new Date(scannedAt).getTime() : Number.POSITIVE_INFINITY;
3435
+ const status = critical + high > 0 ? 'VULN' : ageMs > 7 * 24 * 3600 * 1000 ? 'STALE' : 'CLEAN';
3436
+ return { status, critical, high, total, scannedAt };
3435
3437
  }
3436
3438
  catch {
3437
- // Ignore
3439
+ // unreadable artifact — try next candidate
3438
3440
  }
3439
3441
  }
3440
- const status = cvesFixed >= totalCves ? 'CLEAN' : cvesFixed > 0 ? 'IN_PROGRESS' : 'PENDING';
3441
- return { status, cvesFixed, totalCves };
3442
+ // no scan has ever run nothing is "pending", there is just no data
3443
+ return { status: 'NONE', critical: 0, high: 0, total: 0, scannedAt: null };
3442
3444
  }
3443
3445
  // Get swarm status
3444
3446
  function getSwarmStatus() {
@@ -3578,7 +3580,7 @@ const statuslineCommand = {
3578
3580
  const terminalCols = process.stdout.columns ?? 80;
3579
3581
  const autoCompact = !ctx.flags.full && terminalCols < COMPACT_WIDTH_THRESHOLD;
3580
3582
  if (ctx.flags.compact || autoCompact) {
3581
- const line = `DDD:${progress.domainsCompleted}/${progress.totalDomains} CVE:${security.cvesFixed}/${security.totalCves} Swarm:${swarm.activeAgents}/${swarm.maxAgents} Ctx:${system.contextPct}% Int:${system.intelligencePct}%`;
3583
+ const line = `DDD:${progress.domainsCompleted}/${progress.totalDomains} Sec:${security.status} Swarm:${swarm.activeAgents}/${swarm.maxAgents} Ctx:${system.contextPct}% Int:${system.intelligencePct}%`;
3582
3584
  output.writeln(line);
3583
3585
  return { success: true, data: statusData };
3584
3586
  }
@@ -3752,13 +3754,13 @@ const statuslineCommand = {
3752
3754
  perfIndicator;
3753
3755
  const swarmIndicator = swarm.coordinationActive ? `${c.brightGreen}◉${c.reset}` : `${c.dim}○${c.reset}`;
3754
3756
  const agentsColor = swarm.activeAgents > 0 ? c.brightGreen : c.red;
3755
- const securityIcon = security.status === 'CLEAN' ? '🟢' : security.status === 'IN_PROGRESS' ? '🟡' : '🔴';
3756
- const securityColor = security.status === 'CLEAN' ? c.brightGreen : security.status === 'IN_PROGRESS' ? c.brightYellow : c.brightRed;
3757
+ const securityIcon = security.status === 'CLEAN' ? '🟢' : security.status === 'STALE' ? '🟡' : security.status === 'NONE' ? '⚪' : '🔴';
3758
+ const securityColor = security.status === 'CLEAN' ? c.brightGreen : security.status === 'STALE' ? c.brightYellow : security.status === 'NONE' ? c.dim : c.brightRed;
3757
3759
  const hooksColor = hooksStats.enabled > 0 ? c.brightGreen : c.dim;
3758
3760
  const line2 = `${c.brightYellow}🤖 Swarm${c.reset} ${swarmIndicator} [${agentsColor}${String(swarm.activeAgents).padStart(2)}${c.reset}/${c.brightWhite}${swarm.maxAgents}${c.reset}] ` +
3759
3761
  `${c.brightPurple}👥 ${system.subAgents}${c.reset} ` +
3760
3762
  `${c.brightBlue}🪝 ${hooksColor}${hooksStats.enabled}${c.reset}/${c.brightWhite}${hooksStats.total}${c.reset} ` +
3761
- `${securityIcon} ${securityColor}CVE ${security.cvesFixed}${c.reset}/${c.brightWhite}${security.totalCves}${c.reset} ` +
3763
+ `${securityIcon} ${securityColor}sec ${security.status === 'VULN' ? (security.critical + security.high) + '!' : security.status === 'CLEAN' ? '✓' : security.status === 'STALE' ? 'stale' : '—'}${c.reset} ` +
3762
3764
  `${c.brightCyan}💾 ${system.memoryMB}MB${c.reset} ` +
3763
3765
  `${c.brightPurple}🧠 ${String(system.intelligencePct).padStart(3)}%${c.reset}`;
3764
3766
  const dddColor = progress.dddProgress >= 50 ? c.brightGreen : progress.dddProgress > 0 ? c.yellow : c.red;