@swarmdo/cli 1.19.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 (105) 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 +8 -0
  5. package/dist/src/apply/apply.d.ts.map +1 -1
  6. package/dist/src/apply/apply.js +70 -10
  7. package/dist/src/apply/apply.js.map +1 -1
  8. package/dist/src/changelog/changelog.d.ts.map +1 -1
  9. package/dist/src/changelog/changelog.js +26 -3
  10. package/dist/src/changelog/changelog.js.map +1 -1
  11. package/dist/src/codegraph/codegraph.d.ts +26 -7
  12. package/dist/src/codegraph/codegraph.d.ts.map +1 -1
  13. package/dist/src/codegraph/codegraph.js +97 -13
  14. package/dist/src/codegraph/codegraph.js.map +1 -1
  15. package/dist/src/codegraph/store.d.ts +8 -1
  16. package/dist/src/codegraph/store.d.ts.map +1 -1
  17. package/dist/src/codegraph/store.js +78 -1
  18. package/dist/src/codegraph/store.js.map +1 -1
  19. package/dist/src/commands/apply.d.ts.map +1 -1
  20. package/dist/src/commands/apply.js +17 -4
  21. package/dist/src/commands/apply.js.map +1 -1
  22. package/dist/src/commands/compact-snapshot.d.ts +17 -0
  23. package/dist/src/commands/compact-snapshot.d.ts.map +1 -0
  24. package/dist/src/commands/compact-snapshot.js +133 -0
  25. package/dist/src/commands/compact-snapshot.js.map +1 -0
  26. package/dist/src/commands/cycles.d.ts.map +1 -1
  27. package/dist/src/commands/cycles.js +4 -1
  28. package/dist/src/commands/cycles.js.map +1 -1
  29. package/dist/src/commands/hotspots.d.ts.map +1 -1
  30. package/dist/src/commands/hotspots.js +5 -2
  31. package/dist/src/commands/hotspots.js.map +1 -1
  32. package/dist/src/commands/index.d.ts.map +1 -1
  33. package/dist/src/commands/index.js +4 -3
  34. package/dist/src/commands/index.js.map +1 -1
  35. package/dist/src/commands/pack.d.ts +8 -0
  36. package/dist/src/commands/pack.d.ts.map +1 -1
  37. package/dist/src/commands/pack.js +28 -2
  38. package/dist/src/commands/pack.js.map +1 -1
  39. package/dist/src/commands/release.d.ts.map +1 -1
  40. package/dist/src/commands/release.js +5 -1
  41. package/dist/src/commands/release.js.map +1 -1
  42. package/dist/src/commands/testreport.d.ts.map +1 -1
  43. package/dist/src/commands/testreport.js +2 -1
  44. package/dist/src/commands/testreport.js.map +1 -1
  45. package/dist/src/compact/compact.d.ts.map +1 -1
  46. package/dist/src/compact/compact.js +17 -7
  47. package/dist/src/compact/compact.js.map +1 -1
  48. package/dist/src/compact-snapshot/compact-snapshot.d.ts +58 -0
  49. package/dist/src/compact-snapshot/compact-snapshot.d.ts.map +1 -0
  50. package/dist/src/compact-snapshot/compact-snapshot.js +104 -0
  51. package/dist/src/compact-snapshot/compact-snapshot.js.map +1 -0
  52. package/dist/src/config-lint/lint.d.ts.map +1 -1
  53. package/dist/src/config-lint/lint.js +16 -2
  54. package/dist/src/config-lint/lint.js.map +1 -1
  55. package/dist/src/cycles/cycles.d.ts +12 -2
  56. package/dist/src/cycles/cycles.d.ts.map +1 -1
  57. package/dist/src/cycles/cycles.js +5 -3
  58. package/dist/src/cycles/cycles.js.map +1 -1
  59. package/dist/src/env/env.d.ts +5 -2
  60. package/dist/src/env/env.d.ts.map +1 -1
  61. package/dist/src/env/env.js +24 -3
  62. package/dist/src/env/env.js.map +1 -1
  63. package/dist/src/hotspots/hotspots.d.ts +15 -0
  64. package/dist/src/hotspots/hotspots.d.ts.map +1 -1
  65. package/dist/src/hotspots/hotspots.js +33 -1
  66. package/dist/src/hotspots/hotspots.js.map +1 -1
  67. package/dist/src/init/helpers-generator.d.ts.map +1 -1
  68. package/dist/src/init/helpers-generator.js +33 -3
  69. package/dist/src/init/helpers-generator.js.map +1 -1
  70. package/dist/src/license/license.d.ts +31 -2
  71. package/dist/src/license/license.d.ts.map +1 -1
  72. package/dist/src/license/license.js +133 -11
  73. package/dist/src/license/license.js.map +1 -1
  74. package/dist/src/pack/pack.d.ts +2 -3
  75. package/dist/src/pack/pack.d.ts.map +1 -1
  76. package/dist/src/pack/pack.js +68 -12
  77. package/dist/src/pack/pack.js.map +1 -1
  78. package/dist/src/redact/redact.d.ts.map +1 -1
  79. package/dist/src/redact/redact.js +14 -2
  80. package/dist/src/redact/redact.js.map +1 -1
  81. package/dist/src/sbom/sbom.d.ts +16 -0
  82. package/dist/src/sbom/sbom.d.ts.map +1 -1
  83. package/dist/src/sbom/sbom.js +33 -3
  84. package/dist/src/sbom/sbom.js.map +1 -1
  85. package/dist/src/swarmvector/model-prices.d.ts.map +1 -1
  86. package/dist/src/swarmvector/model-prices.js +12 -2
  87. package/dist/src/swarmvector/model-prices.js.map +1 -1
  88. package/dist/src/testreport/testreport.d.ts +14 -0
  89. package/dist/src/testreport/testreport.d.ts.map +1 -1
  90. package/dist/src/testreport/testreport.js +82 -9
  91. package/dist/src/testreport/testreport.js.map +1 -1
  92. package/dist/src/transcript/export.d.ts +5 -0
  93. package/dist/src/transcript/export.d.ts.map +1 -1
  94. package/dist/src/transcript/export.js +8 -1
  95. package/dist/src/transcript/export.js.map +1 -1
  96. package/dist/src/usage/claude-pricing.d.ts +12 -2
  97. package/dist/src/usage/claude-pricing.d.ts.map +1 -1
  98. package/dist/src/usage/claude-pricing.js +45 -13
  99. package/dist/src/usage/claude-pricing.js.map +1 -1
  100. package/dist/src/usage/transcript-usage.d.ts.map +1 -1
  101. package/dist/src/usage/transcript-usage.js +5 -2
  102. package/dist/src/usage/transcript-usage.js.map +1 -1
  103. package/dist/tsconfig.tsbuildinfo +1 -1
  104. package/package.json +1 -1
  105. 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.19.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)
@@ -15,6 +15,8 @@ export interface HunkLine {
15
15
  /** ' ' context, '-' removal, '+' addition */
16
16
  type: ' ' | '-' | '+';
17
17
  content: string;
18
+ /** true if a `` marker immediately followed this line */
19
+ noEol?: boolean;
18
20
  }
19
21
  export interface Hunk {
20
22
  oldStart: number;
@@ -39,6 +41,12 @@ export interface HunkResult {
39
41
  at?: number;
40
42
  /** how many context lines were trimmed to make it fit */
41
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;
42
50
  }
43
51
  export interface ApplyResult {
44
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;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,CA+CpD;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,CA6CjG"}
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;
@@ -54,7 +57,10 @@ export function parsePatch(text) {
54
57
  hunk.lines.push({ type: ' ', content: '' }); // blank context line written without the leading space
55
58
  }
56
59
  else if (line.startsWith('\\')) {
57
- // "" — ignore
60
+ // "" — attaches to the preceding hunk line,
61
+ // recording that that side of the diff has no trailing newline.
62
+ if (hunk.lines.length)
63
+ hunk.lines[hunk.lines.length - 1].noEol = true;
58
64
  }
59
65
  else {
60
66
  hunk = null; // end of hunk block
@@ -87,6 +93,16 @@ function blockMatchesAt(source, at, block) {
87
93
  return false;
88
94
  return true;
89
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
+ }
90
106
  /**
91
107
  * Find where `block` occurs in `source`, preferring the position nearest
92
108
  * `expected` (0-based). Returns -1 if not found. Deterministic: on ties the
@@ -114,11 +130,24 @@ function findBlock(source, block, expected) {
114
130
  export function applyPatch(source, patch, opts = {}) {
115
131
  const fuzz = opts.fuzz ?? 2;
116
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;
117
141
  const lines = source.split('\n');
118
142
  if (trailingNewline)
119
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);
120
146
  let offset = 0;
121
147
  const results = [];
148
+ // If a hunk that reaches EOF carries an explicit no-newline marker, it — not
149
+ // the source — decides the output's trailing newline. undefined = no marker.
150
+ let eofNoEol;
122
151
  for (const hunk of patch.hunks) {
123
152
  const { oldBlock, newBlock } = hunkBlocks(hunk);
124
153
  const expected = hunk.oldStart - 1 + offset;
@@ -136,7 +165,7 @@ export function applyPatch(source, patch, opts = {}) {
136
165
  if (lead > leadTrimmable || tail > tailTrimmable)
137
166
  continue;
138
167
  const trimmed = oldBlock.slice(lead, oldBlock.length - tail);
139
- const at = findBlock(lines, trimmed, expected + lead);
168
+ const at = findBlock(matchLines, trimmed, expected + lead);
140
169
  if (at >= 0) {
141
170
  placed = at - lead;
142
171
  usedFuzz = f;
@@ -150,19 +179,50 @@ export function applyPatch(source, patch, opts = {}) {
150
179
  results.push({ hunk, applied: false });
151
180
  continue;
152
181
  }
153
- // Splice: remove oldBlock.length lines at `placed`, insert newBlock.
154
- // (trimLead/trimTail only affected *matching*, not what we replace.)
155
- void trimLead;
156
- void trimTail;
157
- 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);
158
192
  offset += newBlock.length - oldBlock.length;
159
- results.push({ hunk, applied: true, at: placed, fuzzUsed: usedFuzz });
193
+ results.push({ hunk, applied: true, at: placed, fuzzUsed: usedFuzz, ...(ambiguous && { ambiguous: true }) });
194
+ // If this hunk's new content is now the tail of the file, its markers
195
+ // determine whether the file ends with a newline.
196
+ if (placed + newBlock.length === lines.length)
197
+ eofNoEol = newSideEndsNoEol(hunk);
160
198
  }
161
199
  let result = lines.join('\n');
162
- if (trailingNewline)
200
+ // The patch's explicit EOF marker wins; absent one, keep the source's state.
201
+ const endWithNewline = eofNoEol === undefined ? trailingNewline : !eofNoEol;
202
+ if (endWithNewline)
163
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);
164
209
  return { ok: results.every((r) => r.applied), result, hunks: results };
165
210
  }
211
+ /**
212
+ * Whether the NEW side of `hunk` ends without a trailing newline — read from the
213
+ * last context/addition line's marker. Returns undefined if the hunk carries no
214
+ * `\ No newline` marker at all (so the source's state should be kept). Pure.
215
+ */
216
+ function newSideEndsNoEol(hunk) {
217
+ if (!hunk.lines.some((l) => l.noEol))
218
+ return undefined;
219
+ for (let i = hunk.lines.length - 1; i >= 0; i--) {
220
+ const l = hunk.lines[i];
221
+ if (l.type === ' ' || l.type === '+')
222
+ return !!l.noEol;
223
+ }
224
+ return undefined;
225
+ }
166
226
  function countLeadingContext(hunk) {
167
227
  let n = 0;
168
228
  for (const l of hunk.lines) {
@@ -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":"changelog.d.ts","sourceRoot":"","sources":["../../../src/changelog/changelog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,iEAAiE;AACjE,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAY7E,CAAC;AAIF,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,YAAY,CAclF;AAED;0EAC0E;AAC1E,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE,CASvD;AAED,MAAM,WAAW,cAAc;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAC;CAAE;AACzF,MAAM,WAAW,cAAc;IAAG,QAAQ,EAAE,YAAY,EAAE,CAAC;IAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,YAAY,EAAE,CAAC;CAAE;AAE9G,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,cAAc,CAWzG;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAQD,8DAA8D;AAC9D,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,MAAM,CA2BzF;AAID,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;AAEnD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAIpD;AAED,qDAAqD;AACrD,wBAAgB,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAOrD;AAED,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAQ5D;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,YAAY,EAAE,CAG5E"}
1
+ {"version":3,"file":"changelog.d.ts","sourceRoot":"","sources":["../../../src/changelog/changelog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,iEAAiE;AACjE,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAY7E,CAAC;AAaF,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,YAAY,CA4BlF;AAED;0EAC0E;AAC1E,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE,CASvD;AAED,MAAM,WAAW,cAAc;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAC;CAAE;AACzF,MAAM,WAAW,cAAc;IAAG,QAAQ,EAAE,YAAY,EAAE,CAAC;IAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,YAAY,EAAE,CAAC;CAAE;AAE9G,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,cAAc,CAWzG;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAQD,8DAA8D;AAC9D,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,MAAM,CA2BzF;AAID,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;AAEnD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAIpD;AAED,qDAAqD;AACrD,wBAAgB,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAOrD;AAED,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAQ5D;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,YAAY,EAAE,CAG5E"}
@@ -24,18 +24,41 @@ export const SECTIONS = [
24
24
  { type: 'chore', label: 'Chores', hidden: true },
25
25
  ];
26
26
  const SUBJECT_RE = /^(\w+)(?:\(([^)]+)\))?(!)?:\s+(.+)$/;
27
+ // git's default revert subject: `Revert "<original subject>"` (git-revert(1)).
28
+ // The conventional `revert:` type is handled by SUBJECT_RE; this catches the
29
+ // bare git form, which otherwise falls into the hidden `other` bucket.
30
+ const REVERT_RE = /^Revert\s+"(.+)"$/;
31
+ // Conventional Commits: a breaking-change footer MUST be the uppercase token
32
+ // `BREAKING CHANGE` (or `BREAKING-CHANGE`) at the start of a footer line,
33
+ // followed by `: `. Anchoring to a line start avoids a false positive when the
34
+ // phrase merely appears in prose ("this is not a BREAKING CHANGE, just …").
35
+ const BREAKING_RE = /^BREAKING[ -]CHANGE:\s/m;
27
36
  /** Parse one conventional-commit subject (+ optional body for BREAKING CHANGE). */
28
37
  export function parseCommit(hash, subject, body = '') {
29
- const m = SUBJECT_RE.exec(subject.trim());
38
+ const trimmed = subject.trim();
39
+ const rev = REVERT_RE.exec(trimmed);
40
+ if (rev) {
41
+ // Recurse into the quoted original subject to lift its scope/description.
42
+ const inner = SUBJECT_RE.exec(rev[1].trim());
43
+ return {
44
+ hash,
45
+ type: 'revert',
46
+ scope: inner ? inner[2] ?? null : null,
47
+ breaking: BREAKING_RE.test(body),
48
+ subject: inner ? inner[4].trim() : rev[1].trim(),
49
+ raw: trimmed,
50
+ };
51
+ }
52
+ const m = SUBJECT_RE.exec(trimmed);
30
53
  if (!m) {
31
- return { hash, type: null, scope: null, breaking: /BREAKING[ -]CHANGE/.test(body), subject: subject.trim(), raw: subject.trim() };
54
+ return { hash, type: null, scope: null, breaking: BREAKING_RE.test(body), subject: subject.trim(), raw: subject.trim() };
32
55
  }
33
56
  const [, type, scope, bang, desc] = m;
34
57
  return {
35
58
  hash,
36
59
  type: type.toLowerCase(),
37
60
  scope: scope ?? null,
38
- breaking: bang === '!' || /BREAKING[ -]CHANGE/.test(body),
61
+ breaking: bang === '!' || BREAKING_RE.test(body),
39
62
  subject: desc.trim(),
40
63
  raw: subject.trim(),
41
64
  };
@@ -1 +1 @@
1
- {"version":3,"file":"changelog.js","sourceRoot":"","sources":["../../../src/changelog/changelog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"changelog.js","sourceRoot":"","sources":["../../../src/changelog/changelog.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,13 @@ export interface ImportEdge {
31
31
  resolved: string | null;
32
32
  /** 1-based line of the import */
33
33
  line: number;
34
+ /**
35
+ * True for a TypeScript type-only import/export (`import type …`,
36
+ * `export type … from …`). These are erased at compile time (with
37
+ * isolatedModules/verbatimModuleSyntax) so they create NO runtime dependency
38
+ * — relevant to cycle detection, where a type-only "cycle" is benign.
39
+ */
40
+ isTypeOnly?: boolean;
34
41
  }
35
42
  export interface CodeIndex {
36
43
  /** Repo-relative file → symbols declared in it. */
@@ -46,19 +53,31 @@ export declare function extractImports(source: string, file: string): Array<{
46
53
  from: string;
47
54
  spec: string;
48
55
  line: number;
56
+ isTypeOnly: boolean;
49
57
  }>;
50
58
  /**
51
- * Resolve a spec to a repo-relative file in `fileSet`, or null. Only relative
52
- * specs (`.`/`..`) resolve; bare specifiers (packages, aliases, `node:`) are
53
- * external null. Tries the path as-is, common extensions, and `/index.*`,
54
- * and rewrites a `.js` spec to its `.ts` sibling (TS ESM convention).
59
+ * A tsconfig `paths` / workspace alias: a bare-specifier pattern mapped to a
60
+ * repo-relative target (baseUrl already applied), each optionally containing a
61
+ * single star wildcard e.g. pattern `@swarmdo/[star]` target
62
+ * `v3/@swarmdo/[star]/src`, where `[star]` captures the remaining spec.
55
63
  */
56
- export declare function resolveImport(fromFile: string, spec: string, fileSet: Set<string>): string | null;
57
- /** Build an index from already-read files. Pure. */
64
+ export interface ImportAlias {
65
+ pattern: string;
66
+ target: string;
67
+ }
68
+ /**
69
+ * Resolve a spec to a repo-relative file in `fileSet`, or null. Relative specs
70
+ * (`.`/`..`) resolve against the importing file's dir. Bare specifiers resolve
71
+ * only if they match a tsconfig-`paths`/workspace `alias` — otherwise they're
72
+ * external (packages, `node:`) → null. Tries common extensions and `/index.*`,
73
+ * and rewrites a `.js` spec to its `.ts` sibling (TS ESM convention). Pure.
74
+ */
75
+ export declare function resolveImport(fromFile: string, spec: string, fileSet: Set<string>, aliases?: ImportAlias[]): string | null;
76
+ /** Build an index from already-read files. `aliases` resolve bare-specifier internal imports. Pure. */
58
77
  export declare function buildIndex(files: Array<{
59
78
  file: string;
60
79
  source: string;
61
- }>): CodeIndex;
80
+ }>, aliases?: ImportAlias[]): CodeIndex;
62
81
  export interface QueryOptions {
63
82
  /** Substring/case-insensitive match instead of exact. */
64
83
  fuzzy?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"codegraph.d.ts","sourceRoot":"","sources":["../../../src/codegraph/codegraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,OAAO,GACP,WAAW,GACX,MAAM,GACN,OAAO,GACP,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,8FAA8F;AAC9F,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,mDAAmD;IACnD,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,6FAA6F;IAC7F,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAqBD,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAwBzE;AAeD,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAmBhH;AAeD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAejG;AAED,oDAAoD;AACpD,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,CAcpF;AAED,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GAAG,UAAU,EAAE,CAMhG;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAE1E;AAED,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAExE;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAE1E;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,0CAA0C;AAC1C,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAWvD"}
1
+ {"version":3,"file":"codegraph.d.ts","sourceRoot":"","sources":["../../../src/codegraph/codegraph.ts"],"names":[],"mappings":"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"}