@swarmdo/cli 1.27.0 → 1.29.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 (58) hide show
  1. package/.claude/helpers/auto-memory-hook.mjs +5 -1
  2. package/README.md +10 -8
  3. package/bin/cli.js +38 -0
  4. package/dist/src/apply/apply.d.ts +6 -0
  5. package/dist/src/apply/apply.d.ts.map +1 -1
  6. package/dist/src/apply/apply.js +41 -8
  7. package/dist/src/apply/apply.js.map +1 -1
  8. package/dist/src/commands/apply.d.ts.map +1 -1
  9. package/dist/src/commands/apply.js +17 -4
  10. package/dist/src/commands/apply.js.map +1 -1
  11. package/dist/src/commands/compact-snapshot.d.ts +17 -0
  12. package/dist/src/commands/compact-snapshot.d.ts.map +1 -0
  13. package/dist/src/commands/compact-snapshot.js +133 -0
  14. package/dist/src/commands/compact-snapshot.js.map +1 -0
  15. package/dist/src/commands/index.d.ts.map +1 -1
  16. package/dist/src/commands/index.js +4 -3
  17. package/dist/src/commands/index.js.map +1 -1
  18. package/dist/src/commands/pack.d.ts +8 -0
  19. package/dist/src/commands/pack.d.ts.map +1 -1
  20. package/dist/src/commands/pack.js +28 -2
  21. package/dist/src/commands/pack.js.map +1 -1
  22. package/dist/src/compact/compact.d.ts.map +1 -1
  23. package/dist/src/compact/compact.js +17 -7
  24. package/dist/src/compact/compact.js.map +1 -1
  25. package/dist/src/compact-snapshot/compact-snapshot.d.ts +58 -0
  26. package/dist/src/compact-snapshot/compact-snapshot.d.ts.map +1 -0
  27. package/dist/src/compact-snapshot/compact-snapshot.js +104 -0
  28. package/dist/src/compact-snapshot/compact-snapshot.js.map +1 -0
  29. package/dist/src/config-lint/lint.d.ts.map +1 -1
  30. package/dist/src/config-lint/lint.js +16 -2
  31. package/dist/src/config-lint/lint.js.map +1 -1
  32. package/dist/src/init/helpers-generator.d.ts.map +1 -1
  33. package/dist/src/init/helpers-generator.js +33 -3
  34. package/dist/src/init/helpers-generator.js.map +1 -1
  35. package/dist/src/redact/redact.js +1 -1
  36. package/dist/src/redact/redact.js.map +1 -1
  37. package/dist/src/sbom/sbom.d.ts.map +1 -1
  38. package/dist/src/sbom/sbom.js +5 -2
  39. package/dist/src/sbom/sbom.js.map +1 -1
  40. package/dist/src/swarmvector/model-prices.d.ts.map +1 -1
  41. package/dist/src/swarmvector/model-prices.js +12 -2
  42. package/dist/src/swarmvector/model-prices.js.map +1 -1
  43. package/dist/src/testreport/testreport.d.ts.map +1 -1
  44. package/dist/src/testreport/testreport.js +11 -2
  45. package/dist/src/testreport/testreport.js.map +1 -1
  46. package/dist/src/transcript/export.d.ts +5 -0
  47. package/dist/src/transcript/export.d.ts.map +1 -1
  48. package/dist/src/transcript/export.js +8 -1
  49. package/dist/src/transcript/export.js.map +1 -1
  50. package/dist/src/usage/claude-pricing.d.ts +6 -2
  51. package/dist/src/usage/claude-pricing.d.ts.map +1 -1
  52. package/dist/src/usage/claude-pricing.js +33 -4
  53. package/dist/src/usage/claude-pricing.js.map +1 -1
  54. package/dist/src/usage/transcript-usage.js +1 -1
  55. package/dist/src/usage/transcript-usage.js.map +1 -1
  56. package/dist/tsconfig.tsbuildinfo +1 -1
  57. package/package.json +1 -1
  58. package/plugins/swarmdo-metaharness/.claude-plugin/plugin.json +5 -2
@@ -99,7 +99,11 @@ class JsonFileBackend {
99
99
  async query(opts) {
100
100
  let results = [...this.entries.values()];
101
101
  if (opts?.namespace) results = results.filter(e => e.namespace === opts.namespace);
102
- if (opts?.type) results = results.filter(e => e.type === opts.type);
102
+ // NOTE: opts.type is the QueryType search STRATEGY (semantic|keyword|hybrid|…),
103
+ // NOT an entry MemoryType. This JSON backend has no vector search, so the
104
+ // strategy is moot — filtering entries by it excluded everything (a 'hybrid'
105
+ // query matched no 'semantic' entries), which zeroed out the bridge's
106
+ // content-hash dedup and let the store bloat ~22x per re-import (#53).
103
107
  if (opts?.limit) results = results.slice(0, opts.limit);
104
108
  return results;
105
109
  }
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![swarmdo](swarmdo/assets/brand/logo-full.svg)](https://swarmdo.com)
4
4
 
5
- [![npm version (swarmdo)](https://img.shields.io/badge/npx%20swarmdo-v1.27.0-cb3837?style=for-the-badge&logo=npm&logoColor=white)](https://github.com/SwarmDo/swarmdo/releases)
5
+ [![npm version (swarmdo)](https://img.shields.io/badge/npx%20swarmdo-v1.29.0-cb3837?style=for-the-badge&logo=npm&logoColor=white)](https://github.com/SwarmDo/swarmdo/releases)
6
6
  [![MIT License](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](https://github.com/SwarmDo/swarmdo/blob/main/LICENSE)
7
7
  [![Website](https://img.shields.io/badge/swarmdo.com-e2a33c?style=for-the-badge&logoColor=black)](https://swarmdo.com)
8
8
  [![Star on GitHub](https://img.shields.io/github/stars/SwarmDo/swarmdo?style=for-the-badge&logo=github&color=gold)](https://github.com/SwarmDo/swarmdo)
@@ -47,17 +47,17 @@ There are **two different install paths** with very different surface areas. Pic
47
47
 
48
48
  | | **Claude Code Plugin** | **CLI install (`npx swarmdo init`)** |
49
49
  |---|---|---|
50
- | What it gives you | Slash commands + a few skills + agent definitions per-plugin | Full Swarmdo loop — 98 agents, 60+ commands, 30 skills, MCP server, hooks, daemon |
50
+ | What it gives you | Slash commands + skills + agent definitions per-plugin; `swarmdo-core` also registers the swarmdo MCP server | Full Swarmdo loop — 98 agents, 60+ commands, 30 skills, MCP server, hooks, daemon |
51
51
  | Files in your workspace | **Zero** | `.claude/`, `.swarmdo/`, `CLAUDE.md`, helpers, settings |
52
- | MCP server registered | **No** (`memory_store`, `swarm_init`, etc. unavailable to Claude) | Yes |
52
+ | MCP server registered | **Yes with `swarmdo-core`** (via the plugin's `.mcp.json`); other plugins are commands/skills only | Yes |
53
53
  | Hooks installed | No | Yes |
54
- | Best for | Try a single plugin's commands without committing to the full install | Production use — everything works as documented |
54
+ | Best for | Try Swarmdo without committing files to your workspace | Production use — everything works as documented |
55
55
 
56
- ### Path A — Claude Code Plugins (lite, slash commands only)
56
+ ### Path A — Claude Code Plugins (zero files in your repo)
57
57
 
58
58
  ```bash
59
59
  # Add the marketplace
60
- /plugin marketplace add upstream/swarmdo
60
+ /plugin marketplace add SwarmDo/swarmdo
61
61
 
62
62
  # Install core + any plugins you need
63
63
  /plugin install swarmdo-core@swarmdo
@@ -66,7 +66,9 @@ There are **two different install paths** with very different surface areas. Pic
66
66
  /plugin install swarmdo-neural-trader@swarmdo
67
67
  ```
68
68
 
69
- This adds slash commands and agent definitions only. The Swarmdo MCP server is NOT registered, so `memory_store`, `swarm_init`, `agent_spawn`, etc. won't be callable from Claude. For the full loop, use Path B below.
69
+ `swarmdo-core` registers the swarmdo MCP server (300+ tools) plus base agents and setup skills; the other plugins add their slash commands and agent definitions. Hooks and the daemon still require Path B.
70
+
71
+ > 📦 `swarmdo-core` has been submitted to Anthropic's Claude Code plugin directory (community marketplace). Once approved it will also be installable via `/plugin install swarmdo-core@claude-community` — no marketplace-add needed.
70
72
 
71
73
  <details>
72
74
  <summary><strong>🔌 All 35 plugins</strong></summary>
@@ -159,7 +161,7 @@ This adds slash commands and agent definitions only. The Swarmdo MCP server is N
159
161
 
160
162
  ```bash
161
163
  # One-line install (POSIX shells only — see Windows note below)
162
- curl -fsSL https://cdn.jsdelivr.net/gh/upstream/swarmdo@main/scripts/install.sh | bash
164
+ curl -fsSL https://cdn.jsdelivr.net/gh/SwarmDo/swarmdo@main/scripts/install.sh | bash
163
165
  ```
164
166
 
165
167
  **All platforms (including native Windows PowerShell / cmd):**
package/bin/cli.js CHANGED
@@ -93,6 +93,20 @@ console.log = (...args) => {
93
93
  _origLog.apply(console, args);
94
94
  };
95
95
 
96
+ // Claude Code plugin hint (code.claude.com/docs/en/plugin-hints): when a
97
+ // session runs swarmdo through Claude Code's Bash tool, emit the one-line
98
+ // marker so Claude Code can offer to install our plugin. Emitted here in the
99
+ // bin shim — NOT in dist/src/index.js — so it also covers the #2256 fast
100
+ // paths below (--version/--help are exactly the probes Claude runs on an
101
+ // unfamiliar CLI). Claude Code strips the line from all output before it
102
+ // reaches the model and only prompts if/when swarmdo-core is listed in the
103
+ // official Anthropic marketplace; until then it is silently dropped.
104
+ if (process.env.CLAUDECODE) {
105
+ process.stderr.write(
106
+ '<claude-code-hint v="1" type="plugin" value="swarmdo-core@claude-plugins-official" />\n'
107
+ );
108
+ }
109
+
96
110
  // #2256 fast path: --version / -V / --help / -h must NOT trigger heavy
97
111
  // imports (agentic-flow, swarmvector ONNX, etc.) — those eagerly download a
98
112
  // 23 MB ONNX model on cold cache, blocking 60+ s and causing SIGTERM
@@ -116,6 +130,30 @@ console.log = (...args) => {
116
130
  // loading. The version short-circuit is the only one safe to inline.
117
131
  }
118
132
 
133
+ // #45 fast path: `compact-snapshot` is wired to UserPromptSubmit (fires on
134
+ // EVERY prompt) and PreCompact, so it must not pay the full-CLI bootstrap
135
+ // (~0.6s incl. the 23 MB ONNX load). Its own module imports only fs/git/output
136
+ // + the pure engine, so dispatch it directly and exit before any heavy import.
137
+ // A bare `--help` still falls through to the rich help path below.
138
+ {
139
+ const _argv = process.argv.slice(2);
140
+ if (_argv[0] === 'compact-snapshot' && !_argv.includes('--help') && !_argv.includes('-h')) {
141
+ try {
142
+ const mod = await import('../dist/src/commands/compact-snapshot.js');
143
+ const cmd = mod.default ?? mod.compactSnapshotCommand;
144
+ const rest = _argv.slice(1);
145
+ const args = rest.filter((a) => !a.startsWith('-'));
146
+ const flags = {};
147
+ for (const a of rest) if (a.startsWith('--')) flags[a.replace(/^--/, '')] = true;
148
+ const res = await cmd.action({ cwd: process.cwd(), args, flags, rawArgs: rest });
149
+ process.exit(res && typeof res.exitCode === 'number' ? res.exitCode : 0);
150
+ } catch (e) {
151
+ // Best-effort: a failure here must never block a turn (it runs in hooks).
152
+ process.exit(0);
153
+ }
154
+ }
155
+ }
156
+
119
157
  // Check if we should run in MCP server mode
120
158
  // Conditions:
121
159
  // 1. stdin is being piped AND no CLI arguments provided (auto-detect)
@@ -41,6 +41,12 @@ export interface HunkResult {
41
41
  at?: number;
42
42
  /** how many context lines were trimmed to make it fit */
43
43
  fuzzUsed?: number;
44
+ /**
45
+ * True when the matched block occurs at MORE THAN ONE position in the file —
46
+ * the hunk landed at the nearest, but a duplicate/boilerplate block elsewhere
47
+ * means it may have modified the wrong occurrence. Callers should verify.
48
+ */
49
+ ambiguous?: boolean;
44
50
  }
45
51
  export interface ApplyResult {
46
52
  ok: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/apply/apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,QAAQ;IACvB,6CAA6C;IAC7C,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CAiDpD;AAsCD,MAAM,WAAW,YAAY;IAC3B,6FAA6F;IAC7F,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,sGAAsG;AACtG,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,GAAE,YAAiB,GAAG,WAAW,CAqDjG"}
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/apply/apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,QAAQ;IACvB,6CAA6C;IAC7C,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CAoDpD;AA8CD,MAAM,WAAW,YAAY;IAC3B,6FAA6F;IAC7F,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,sGAAsG;AACtG,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,GAAE,YAAiB,GAAG,WAAW,CAyEjG"}
@@ -19,7 +19,10 @@ export function parsePatch(text) {
19
19
  let hunk = null;
20
20
  const stripPrefix = (p) => p.replace(/^[ab]\//, '').replace(/\t.*$/, '').trim();
21
21
  for (let i = 0; i < lines.length; i++) {
22
- const line = lines[i];
22
+ // CRLF tolerance (#9): a diff generated on/for CRLF files carries \r on
23
+ // every line; strip it so hunk content compares EOL-agnostically.
24
+ const raw = lines[i];
25
+ const line = raw.endsWith('\r') ? raw.slice(0, -1) : raw;
23
26
  if (line.startsWith('diff --git')) {
24
27
  cur = null;
25
28
  hunk = null;
@@ -90,6 +93,16 @@ function blockMatchesAt(source, at, block) {
90
93
  return false;
91
94
  return true;
92
95
  }
96
+ /** How many positions in `source` the `block` matches. Pure. */
97
+ function countMatches(source, block) {
98
+ if (block.length === 0)
99
+ return 0;
100
+ let n = 0;
101
+ for (let i = 0; i + block.length <= source.length; i++)
102
+ if (blockMatchesAt(source, i, block))
103
+ n++;
104
+ return n;
105
+ }
93
106
  /**
94
107
  * Find where `block` occurs in `source`, preferring the position nearest
95
108
  * `expected` (0-based). Returns -1 if not found. Deterministic: on ties the
@@ -117,9 +130,19 @@ function findBlock(source, block, expected) {
117
130
  export function applyPatch(source, patch, opts = {}) {
118
131
  const fuzz = opts.fuzz ?? 2;
119
132
  const trailingNewline = source.endsWith('\n');
133
+ // CRLF support (#9): match EOL-agnostically, then write inserted lines with
134
+ // the file's dominant EOL so CRLF sources stay CRLF. `lines` keeps each
135
+ // line's original bytes (untouched lines round-trip exactly); `matchLines`
136
+ // is the \r-stripped twin every comparison runs against. The two are spliced
137
+ // in lockstep so indices stay aligned.
138
+ const crlfCount = (source.match(/\r\n/g) ?? []).length;
139
+ const newlineCount = (source.match(/\n/g) ?? []).length;
140
+ const dominantCrlf = crlfCount > newlineCount - crlfCount;
120
141
  const lines = source.split('\n');
121
142
  if (trailingNewline)
122
143
  lines.pop(); // drop the empty element from a trailing \n
144
+ const stripCr = (s) => (s.endsWith('\r') ? s.slice(0, -1) : s);
145
+ const matchLines = lines.map(stripCr);
123
146
  let offset = 0;
124
147
  const results = [];
125
148
  // If a hunk that reaches EOF carries an explicit no-newline marker, it — not
@@ -142,7 +165,7 @@ export function applyPatch(source, patch, opts = {}) {
142
165
  if (lead > leadTrimmable || tail > tailTrimmable)
143
166
  continue;
144
167
  const trimmed = oldBlock.slice(lead, oldBlock.length - tail);
145
- const at = findBlock(lines, trimmed, expected + lead);
168
+ const at = findBlock(matchLines, trimmed, expected + lead);
146
169
  if (at >= 0) {
147
170
  placed = at - lead;
148
171
  usedFuzz = f;
@@ -156,13 +179,18 @@ export function applyPatch(source, patch, opts = {}) {
156
179
  results.push({ hunk, applied: false });
157
180
  continue;
158
181
  }
159
- // Splice: remove oldBlock.length lines at `placed`, insert newBlock.
160
- // (trimLead/trimTail only affected *matching*, not what we replace.)
161
- void trimLead;
162
- void trimTail;
163
- lines.splice(placed, oldBlock.length, ...newBlock);
182
+ // A hunk is AMBIGUOUS if the block it matched on occurs elsewhere too — the
183
+ // nearest-match tiebreak may have picked the wrong duplicate. Check the
184
+ // matched (trimmed) block against the current lines BEFORE splicing.
185
+ const matchedBlock = oldBlock.slice(trimLead, oldBlock.length - trimTail);
186
+ const ambiguous = countMatches(matchLines, matchedBlock) > 1;
187
+ // Splice: remove oldBlock.length lines at `placed`, insert newBlock —
188
+ // raw lines get the file's dominant EOL, the match twin stays stripped.
189
+ const insertRaw = dominantCrlf ? newBlock.map((l) => l + '\r') : newBlock;
190
+ lines.splice(placed, oldBlock.length, ...insertRaw);
191
+ matchLines.splice(placed, oldBlock.length, ...newBlock);
164
192
  offset += newBlock.length - oldBlock.length;
165
- results.push({ hunk, applied: true, at: placed, fuzzUsed: usedFuzz });
193
+ results.push({ hunk, applied: true, at: placed, fuzzUsed: usedFuzz, ...(ambiguous && { ambiguous: true }) });
166
194
  // If this hunk's new content is now the tail of the file, its markers
167
195
  // determine whether the file ends with a newline.
168
196
  if (placed + newBlock.length === lines.length)
@@ -173,6 +201,11 @@ export function applyPatch(source, patch, opts = {}) {
173
201
  const endWithNewline = eofNoEol === undefined ? trailingNewline : !eofNoEol;
174
202
  if (endWithNewline)
175
203
  result += '\n';
204
+ // An inserted line that became the no-trailing-newline tail carries the
205
+ // dominant-EOL \r it was given for joining — a bare CR at EOF is never
206
+ // meaningful, so drop it.
207
+ else if (result.endsWith('\r'))
208
+ result = result.slice(0, -1);
176
209
  return { ok: results.every((r) => r.applied), result, hunks: results };
177
210
  }
178
211
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/apply/apply.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/apply/apply.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/commands/apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AAwF1E,eAAO,MAAM,YAAY,EAAE,OAc1B,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/commands/apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AAoG1E,eAAO,MAAM,YAAY,EAAE,OAe1B,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -32,6 +32,7 @@ async function run(ctx) {
32
32
  const root = ctx.cwd || process.cwd();
33
33
  const dryRun = ctx.flags['dry-run'] === true;
34
34
  const partial = ctx.flags.partial === true;
35
+ const strict = ctx.flags.strict === true;
35
36
  // The parser may deliver --fuzz as a number or a string; accept both.
36
37
  const fuzz = typeof ctx.flags.fuzz === 'number' ? ctx.flags.fuzz
37
38
  : typeof ctx.flags.fuzz === 'string' ? parseInt(ctx.flags.fuzz, 10)
@@ -61,6 +62,7 @@ async function run(ctx) {
61
62
  }
62
63
  let totalApplied = 0;
63
64
  let totalRejected = 0;
65
+ let totalAmbiguous = 0;
64
66
  const writes = [];
65
67
  for (const fp of patches) {
66
68
  const file = targetFile(root, fp);
@@ -85,8 +87,16 @@ async function run(ctx) {
85
87
  totalApplied += applied;
86
88
  totalRejected += rejected;
87
89
  const fuzzy = res.hunks.filter((h) => h.applied && (h.fuzzUsed ?? 0) > 0).length;
90
+ const ambiguous = res.hunks.filter((h) => h.applied && h.ambiguous).length;
91
+ totalAmbiguous += ambiguous;
88
92
  const tag = rejected === 0 ? output.dim('ok') : output.bold(`${rejected} rejected`);
89
- output.writeln(`${rel} ${applied}/${res.hunks.length} hunks${fuzzy ? output.dim(` (${fuzzy} fuzzy)`) : ''} ${tag}`);
93
+ const ambTag = ambiguous ? output.error(` ${ambiguous} ambiguous`) : '';
94
+ output.writeln(`${rel} ${applied}/${res.hunks.length} hunks${fuzzy ? output.dim(` (${fuzzy} fuzzy)`) : ''} ${tag}${ambTag}`);
95
+ if (ambiguous) {
96
+ for (const h of res.hunks.filter((x) => x.applied && x.ambiguous)) {
97
+ output.writeln(output.dim(` ⚠ hunk @ line ${(h.at ?? 0) + 1}: matched a block that also appears elsewhere — verify it landed on the intended one`));
98
+ }
99
+ }
90
100
  if (rejected === 0 || partial) {
91
101
  if (res.result !== source)
92
102
  writes.push({ file, content: res.result });
@@ -97,9 +107,11 @@ async function run(ctx) {
97
107
  fs.writeFileSync(w.file, w.content);
98
108
  }
99
109
  const verb = dryRun ? 'would apply' : 'applied';
100
- output.writeln(output.dim(`${verb} ${totalApplied} hunks, ${totalRejected} rejected${dryRun ? ' (dry run)' : ''}`));
101
- // Exit 1 if anything was rejected a CI/agent can branch on it.
102
- const code = totalRejected > 0 ? 1 : 0;
110
+ const ambSummary = totalAmbiguous ? `, ${totalAmbiguous} ambiguous` : '';
111
+ output.writeln(output.dim(`${verb} ${totalApplied} hunks, ${totalRejected} rejected${ambSummary}${dryRun ? ' (dry run)' : ''}`));
112
+ // Exit 1 if anything was rejected a CI/agent can branch on it. With --strict,
113
+ // an ambiguous match (possibly landed on the wrong duplicate) also fails.
114
+ const code = totalRejected > 0 || (strict && totalAmbiguous > 0) ? 1 : 0;
103
115
  return { success: code === 0, exitCode: code };
104
116
  }
105
117
  export const applyCommand = {
@@ -109,6 +121,7 @@ export const applyCommand = {
109
121
  { name: 'dry-run', description: 'report what would apply/reject without writing', type: 'boolean' },
110
122
  { name: 'fuzz', description: 'max context lines to drop when matching a drifted hunk (default 2)', type: 'string' },
111
123
  { name: 'partial', description: 'write files even when some of their hunks are rejected', type: 'boolean' },
124
+ { name: 'strict', description: 'exit 1 if any hunk matched an ambiguous (duplicated) block, even if it applied', type: 'boolean' },
112
125
  ],
113
126
  examples: [
114
127
  { command: 'swarmdo apply changes.patch', description: 'Apply a patch file' },
@@ -1 +1 @@
1
- {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/commands/apply.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/commands/apply.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `swarmdo compact-snapshot` — capture / restore a compaction-survival digest.
3
+ *
4
+ * swarmdo compact-snapshot write # snapshot working state (call on PreCompact)
5
+ * swarmdo compact-snapshot read # print the digest, then consume it (first
6
+ * # prompt after compaction re-injects it)
7
+ * swarmdo compact-snapshot read --keep # print without consuming
8
+ *
9
+ * The digest (recently edited files, uncommitted changes, branch) lets an agent
10
+ * re-ground after context compaction instead of re-exploring. The engine is
11
+ * pure + tested (../compact-snapshot/compact-snapshot.ts); this wrapper does the
12
+ * fs read (edit ledger), git calls, and one-shot persistence.
13
+ */
14
+ import type { Command } from '../types.js';
15
+ export declare const compactSnapshotCommand: Command;
16
+ export default compactSnapshotCommand;
17
+ //# sourceMappingURL=compact-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compact-snapshot.d.ts","sourceRoot":"","sources":["../../../src/commands/compact-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AA4F1E,eAAO,MAAM,sBAAsB,EAAE,OAWpC,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * `swarmdo compact-snapshot` — capture / restore a compaction-survival digest.
3
+ *
4
+ * swarmdo compact-snapshot write # snapshot working state (call on PreCompact)
5
+ * swarmdo compact-snapshot read # print the digest, then consume it (first
6
+ * # prompt after compaction re-injects it)
7
+ * swarmdo compact-snapshot read --keep # print without consuming
8
+ *
9
+ * The digest (recently edited files, uncommitted changes, branch) lets an agent
10
+ * re-ground after context compaction instead of re-exploring. The engine is
11
+ * pure + tested (../compact-snapshot/compact-snapshot.ts); this wrapper does the
12
+ * fs read (edit ledger), git calls, and one-shot persistence.
13
+ */
14
+ import { execFileSync } from 'node:child_process';
15
+ import fs from 'node:fs';
16
+ import path from 'node:path';
17
+ import { output } from '../output.js';
18
+ import { buildDigest, formatDigest, isDigestEmpty, } from '../compact-snapshot/compact-snapshot.js';
19
+ const DIGEST_FILE = 'compact-digest.json';
20
+ const LEDGER_FILE = 'pending-insights.jsonl';
21
+ function dataDir(root) {
22
+ return path.join(root, '.swarmdo', 'data');
23
+ }
24
+ /** Best-effort git; returns '' on any failure (not-a-repo, no git). */
25
+ function git(root, args) {
26
+ try {
27
+ return execFileSync('git', args, { cwd: root, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'], maxBuffer: 8 * 1024 * 1024 });
28
+ }
29
+ catch {
30
+ return '';
31
+ }
32
+ }
33
+ /** Read edit records from the pending-insights ledger. Tolerant of junk lines. */
34
+ function readEdits(root) {
35
+ const p = path.join(dataDir(root), LEDGER_FILE);
36
+ let raw;
37
+ try {
38
+ raw = fs.readFileSync(p, 'utf8');
39
+ }
40
+ catch {
41
+ return [];
42
+ }
43
+ const out = [];
44
+ for (const line of raw.split('\n')) {
45
+ if (!line.trim())
46
+ continue;
47
+ try {
48
+ const rec = JSON.parse(line);
49
+ if (rec && rec.type === 'edit' && typeof rec.file === 'string') {
50
+ out.push({ file: rec.file, timestamp: typeof rec.timestamp === 'number' ? rec.timestamp : 0 });
51
+ }
52
+ }
53
+ catch { /* skip malformed line */ }
54
+ }
55
+ return out;
56
+ }
57
+ function doWrite(root) {
58
+ // Drop swarmdo's own state dirs — they're not the user's working set and
59
+ // are usually gitignored anyway; filtering keeps the digest signal clean.
60
+ const gitStatus = git(root, ['status', '--porcelain'])
61
+ .split('\n')
62
+ .filter(Boolean)
63
+ .filter((l) => !/(^|\s|"|-> )\.(swarmdo|swarm|git)\//.test(l));
64
+ const digest = buildDigest({
65
+ now: Date.now(),
66
+ edits: readEdits(root),
67
+ gitStatus,
68
+ branch: git(root, ['rev-parse', '--abbrev-ref', 'HEAD']).trim() || undefined,
69
+ });
70
+ if (isDigestEmpty(digest)) {
71
+ // Nothing worth restoring — remove any stale digest so a later `read` is clean.
72
+ try {
73
+ fs.rmSync(path.join(dataDir(root), DIGEST_FILE));
74
+ }
75
+ catch { /* none */ }
76
+ output.writeln('compact-snapshot: no working state to capture');
77
+ return { success: true, exitCode: 0 };
78
+ }
79
+ try {
80
+ fs.mkdirSync(dataDir(root), { recursive: true });
81
+ fs.writeFileSync(path.join(dataDir(root), DIGEST_FILE), JSON.stringify(digest, null, 2) + '\n');
82
+ }
83
+ catch (e) {
84
+ output.printError(`compact-snapshot: could not write digest — ${e.message}`);
85
+ return { success: false, exitCode: 1 };
86
+ }
87
+ output.writeln(`compact-snapshot: captured ${digest.recentFiles.length} edited + ${digest.uncommitted.length} uncommitted`);
88
+ return { success: true, exitCode: 0 };
89
+ }
90
+ function doRead(root, keep) {
91
+ const file = path.join(dataDir(root), DIGEST_FILE);
92
+ let digest;
93
+ try {
94
+ digest = JSON.parse(fs.readFileSync(file, 'utf8'));
95
+ }
96
+ catch {
97
+ return { success: true, exitCode: 0 };
98
+ } // no digest → nothing to inject
99
+ const text = formatDigest(digest, Date.now());
100
+ if (text)
101
+ process.stdout.write(text + '\n');
102
+ if (!keep) {
103
+ try {
104
+ fs.rmSync(file);
105
+ }
106
+ catch { /* already gone */ }
107
+ } // consume-once
108
+ return { success: true, exitCode: 0 };
109
+ }
110
+ async function run(ctx) {
111
+ const root = ctx.cwd || process.cwd();
112
+ const mode = (ctx.args[0] ?? 'read').toLowerCase();
113
+ if (mode === 'write')
114
+ return doWrite(root);
115
+ if (mode === 'read')
116
+ return doRead(root, ctx.flags.keep === true);
117
+ output.printError(`compact-snapshot: unknown mode "${mode}" (use write | read)`);
118
+ return { success: false, exitCode: 1 };
119
+ }
120
+ export const compactSnapshotCommand = {
121
+ name: 'compact-snapshot',
122
+ description: 'Capture/restore a working-state digest that survives context compaction — recent edits, uncommitted changes, branch — so an agent re-grounds instead of re-exploring',
123
+ options: [
124
+ { name: 'keep', description: 'on read, print the digest without consuming it', type: 'boolean' },
125
+ ],
126
+ examples: [
127
+ { command: 'swarmdo compact-snapshot write', description: 'Snapshot working state (wire to a PreCompact hook)' },
128
+ { command: 'swarmdo compact-snapshot read', description: 'Print + consume the digest (wire to the first post-compaction prompt)' },
129
+ ],
130
+ action: run,
131
+ };
132
+ export default compactSnapshotCommand;
133
+ //# sourceMappingURL=compact-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compact-snapshot.js","sourceRoot":"","sources":["../../../src/commands/compact-snapshot.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,7 @@ const commandLoaders = {
22
22
  // Deterministic command-output compression (rtk/headroom demand) — a
23
23
  // zero-token stream filter, distinct from caveman `compress` for files.
24
24
  compact: () => import('./compact.js'),
25
+ 'compact-snapshot': () => import('./compact-snapshot.js'),
25
26
  // Secret detection + redaction on the agent data path (gitleaks/trufflehog
26
27
  // demand) — mask API keys/tokens before they reach an LLM/log/memory.
27
28
  redact: () => import('./redact.js'),
@@ -286,7 +287,7 @@ export async function getCommandsByCategory() {
286
287
  // three slots from 'statusline' onward (completionsCmd received the
287
288
  // statusline module, analyzeCmd received completions, …), scrambling the
288
289
  // categorized help. Every load now has a named slot.
289
- const [daemonCmd, doctorCmd, embeddingsCmd, neuralCmd, performanceCmd, securityCmd, swarmvectorCmd, hiveMindCmd, configCmd, statuslineCmd, compressCmd, efficiencyCmd, completionsCmd, migrateCmd, workflowCmd, analyzeCmd, routeCmd, progressCmd, providersCmd, pluginsCmd, deploymentCmd, claimsCmd, issuesCmd, updateCmd, processCmd, guidanceCmd, applianceCmd, cleanupCmd, autopilotCmd, demoCmd, usageCmd, repairCmd, hudCmd, compactCmd, codegraphCmd, redactCmd, packCmd, envCmd, licenseCmd, sbomCmd, applyCmd, hotspotsCmd, affectedCmd, cyclesCmd, testreportCmd,] = await Promise.all([
290
+ const [daemonCmd, doctorCmd, embeddingsCmd, neuralCmd, performanceCmd, securityCmd, swarmvectorCmd, hiveMindCmd, configCmd, statuslineCmd, compressCmd, efficiencyCmd, completionsCmd, migrateCmd, workflowCmd, analyzeCmd, routeCmd, progressCmd, providersCmd, pluginsCmd, deploymentCmd, claimsCmd, issuesCmd, updateCmd, processCmd, guidanceCmd, applianceCmd, cleanupCmd, autopilotCmd, demoCmd, usageCmd, repairCmd, hudCmd, compactCmd, codegraphCmd, redactCmd, packCmd, envCmd, licenseCmd, sbomCmd, applyCmd, hotspotsCmd, affectedCmd, cyclesCmd, testreportCmd, compactSnapshotCmd,] = await Promise.all([
290
291
  loadCommand('daemon'), loadCommand('doctor'), loadCommand('embeddings'), loadCommand('neural'),
291
292
  loadCommand('performance'), loadCommand('security'), loadCommand('swarmvector'), loadCommand('hive-mind'),
292
293
  loadCommand('config'), loadCommand('statusline'), loadCommand('compress'), loadCommand('efficiency'),
@@ -294,7 +295,7 @@ export async function getCommandsByCategory() {
294
295
  loadCommand('analyze'), loadCommand('route'), loadCommand('progress'), loadCommand('providers'),
295
296
  loadCommand('plugins'), loadCommand('deployment'), loadCommand('claims'), loadCommand('issues'),
296
297
  loadCommand('update'), loadCommand('process'), loadCommand('guidance'), loadCommand('appliance'),
297
- loadCommand('cleanup'), loadCommand('autopilot'), loadCommand('demo'), loadCommand('usage'), loadCommand('repair'), loadCommand('hud'), loadCommand('compact'), loadCommand('codegraph'), loadCommand('redact'), loadCommand('pack'), loadCommand('env'), loadCommand('license'), loadCommand('sbom'), loadCommand('apply'), loadCommand('hotspots'), loadCommand('affected'), loadCommand('cycles'), loadCommand('testreport'),
298
+ loadCommand('cleanup'), loadCommand('autopilot'), loadCommand('demo'), loadCommand('usage'), loadCommand('repair'), loadCommand('hud'), loadCommand('compact'), loadCommand('codegraph'), loadCommand('redact'), loadCommand('pack'), loadCommand('env'), loadCommand('license'), loadCommand('sbom'), loadCommand('apply'), loadCommand('hotspots'), loadCommand('affected'), loadCommand('cycles'), loadCommand('testreport'), loadCommand('compact-snapshot'),
298
299
  ]);
299
300
  return {
300
301
  primary: [
@@ -310,7 +311,7 @@ export async function getCommandsByCategory() {
310
311
  utility: [
311
312
  configCmd, doctorCmd, daemonCmd, completionsCmd,
312
313
  migrateCmd, workflowCmd, demoCmd,
313
- statuslineCmd, compressCmd, compactCmd, redactCmd, packCmd, envCmd, licenseCmd, sbomCmd, applyCmd, hotspotsCmd, affectedCmd, cyclesCmd, testreportCmd, efficiencyCmd,
314
+ statuslineCmd, compressCmd, compactCmd, redactCmd, packCmd, envCmd, licenseCmd, sbomCmd, applyCmd, hotspotsCmd, affectedCmd, cyclesCmd, testreportCmd, compactSnapshotCmd, efficiencyCmd,
314
315
  ].filter(Boolean),
315
316
  analysis: [
316
317
  analyzeCmd, routeCmd, progressCmd, usageCmd, hudCmd, codegraphCmd,