@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
@@ -28,6 +28,43 @@ const MATCHERS = [
28
28
  { kind: 'enum', re: /^export\s+(?:const\s+)?enum\s+([A-Za-z_$][\w$]*)/ },
29
29
  { kind: 'const', re: /^export\s+(?:const|let|var)\s+([A-Za-z_$][\w$]*)/ },
30
30
  ];
31
+ /**
32
+ * Top-level (comma-separated) simple-identifier declarator names in a
33
+ * const/let/var declaration list, e.g. `a = 1, b = fn(1, 2), c = 3` → [a,b,c].
34
+ * Commas inside parens/brackets/braces/strings don't split. Destructuring
35
+ * patterns (a segment starting with `{`/`[`) yield no name — kept as-is. Pure.
36
+ */
37
+ function declaratorNames(decl) {
38
+ const names = [];
39
+ let depth = 0;
40
+ let start = 0;
41
+ let str = null;
42
+ const take = (seg) => {
43
+ const m = seg.trim().match(/^([A-Za-z_$][\w$]*)/);
44
+ if (m)
45
+ names.push(m[1]);
46
+ };
47
+ for (let i = 0; i < decl.length; i++) {
48
+ const ch = decl[i];
49
+ if (str) {
50
+ if (ch === str && decl[i - 1] !== '\\')
51
+ str = null;
52
+ continue;
53
+ }
54
+ if (ch === '"' || ch === "'" || ch === '`')
55
+ str = ch;
56
+ else if (ch === '(' || ch === '[' || ch === '{')
57
+ depth++;
58
+ else if (ch === ')' || ch === ']' || ch === '}')
59
+ depth--;
60
+ else if (ch === ',' && depth === 0) {
61
+ take(decl.slice(start, i));
62
+ start = i + 1;
63
+ }
64
+ }
65
+ take(decl.slice(start));
66
+ return names;
67
+ }
31
68
  /** Extract exported symbols from one source file. Pure. */
32
69
  export function extractSymbols(source, file) {
33
70
  const out = [];
@@ -37,9 +74,29 @@ export function extractSymbols(source, file) {
37
74
  const trimmed = raw.trimStart();
38
75
  if (!trimmed.startsWith('export'))
39
76
  continue;
77
+ // `export * as ns from '…'` (ES2020) creates a real named export `ns` — a
78
+ // namespace binding — unlike bare `export * from '…'` which adds no local
79
+ // name. Index it (kind 'const', the closest value-binding kind) before the
80
+ // blanket `export *` skip below.
81
+ const nsRe = /^export\s+\*\s+as\s+([A-Za-z_$][\w$]*)\s+from\b/;
82
+ const nsm = trimmed.match(nsRe);
83
+ if (nsm) {
84
+ out.push({ name: nsm[1], kind: 'const', file, line: i + 1, signature: trimmed.slice(0, SIG_MAX).replace(/\s+$/, '') });
85
+ continue;
86
+ }
40
87
  // Skip re-export / bare forms handled elsewhere: `export {` and `export *`.
41
88
  if (/^export\s*[*{]/.test(trimmed))
42
89
  continue;
90
+ // const/let/var can declare MULTIPLE comma-separated bindings — index each
91
+ // (`export const a = 1, b = 2` → a AND b). Exclude `const enum` (handled by
92
+ // the enum matcher) and leave destructuring exports unindexed as before.
93
+ const declM = trimmed.match(/^export\s+(?:const|let|var)\s+(?!enum\b)(.*)$/);
94
+ if (declM) {
95
+ const sig = trimmed.slice(0, SIG_MAX).replace(/\s+$/, '');
96
+ for (const name of declaratorNames(declM[1]))
97
+ out.push({ name, kind: 'const', file, line: i + 1, signature: sig });
98
+ continue;
99
+ }
43
100
  for (const { kind, re } of MATCHERS) {
44
101
  const m = trimmed.match(re);
45
102
  if (!m)
@@ -77,6 +134,9 @@ export function extractImports(source, file) {
77
134
  const line = lines[i];
78
135
  if (!/\b(?:from|import|require)\b/.test(line))
79
136
  continue;
137
+ // A whole-import type-only form: `import type …` / `export type …`. NOT
138
+ // inline `import { type X }` (mixed with value imports → still a runtime edge).
139
+ const isTypeOnly = /^\s*(?:import|export)\s+type\b/.test(line);
80
140
  const seen = new Set();
81
141
  for (const re of IMPORT_RES) {
82
142
  re.lastIndex = 0;
@@ -86,7 +146,7 @@ export function extractImports(source, file) {
86
146
  if (seen.has(spec))
87
147
  continue; // same spec caught by two patterns on one line
88
148
  seen.add(spec);
89
- out.push({ from: file, spec, line: i + 1 });
149
+ out.push({ from: file, spec, line: i + 1, isTypeOnly });
90
150
  }
91
151
  }
92
152
  }
@@ -106,16 +166,20 @@ function joinRelative(fromFile, spec) {
106
166
  return parts.join('/');
107
167
  }
108
168
  const RESOLVE_EXTS = ['', '.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.mts', '.cts'];
109
- /**
110
- * Resolve a spec to a repo-relative file in `fileSet`, or null. Only relative
111
- * specs (`.`/`..`) resolve; bare specifiers (packages, aliases, `node:`) are
112
- * external → null. Tries the path as-is, common extensions, and `/index.*`,
113
- * and rewrites a `.js` spec to its `.ts` sibling (TS ESM convention).
114
- */
115
- export function resolveImport(fromFile, spec, fileSet) {
116
- if (!spec.startsWith('.'))
169
+ /** Substitute a spec through one alias (with `*` wildcard), or null if no match. Pure. */
170
+ function applyAlias(pattern, target, spec) {
171
+ const star = pattern.indexOf('*');
172
+ if (star < 0)
173
+ return spec === pattern ? target : null;
174
+ const prefix = pattern.slice(0, star);
175
+ const suffix = pattern.slice(star + 1);
176
+ if (spec.length < prefix.length + suffix.length || !spec.startsWith(prefix) || !spec.endsWith(suffix))
117
177
  return null;
118
- const base = joinRelative(fromFile, spec);
178
+ const mid = spec.slice(prefix.length, spec.length - suffix.length);
179
+ return target.includes('*') ? target.replace('*', mid) : target;
180
+ }
181
+ /** Resolve a bare repo-relative base path to a file in `fileSet` (exts + /index + .js→.ts). Pure. */
182
+ function resolveInFileSet(base, fileSet) {
119
183
  const bases = [base];
120
184
  const jsExt = base.match(/\.(js|jsx|mjs|cjs)$/);
121
185
  if (jsExt)
@@ -132,15 +196,35 @@ export function resolveImport(fromFile, spec, fileSet) {
132
196
  }
133
197
  return null;
134
198
  }
135
- /** Build an index from already-read files. Pure. */
136
- export function buildIndex(files) {
199
+ /**
200
+ * Resolve a spec to a repo-relative file in `fileSet`, or null. Relative specs
201
+ * (`.`/`..`) resolve against the importing file's dir. Bare specifiers resolve
202
+ * only if they match a tsconfig-`paths`/workspace `alias` — otherwise they're
203
+ * external (packages, `node:`) → null. Tries common extensions and `/index.*`,
204
+ * and rewrites a `.js` spec to its `.ts` sibling (TS ESM convention). Pure.
205
+ */
206
+ export function resolveImport(fromFile, spec, fileSet, aliases = []) {
207
+ if (spec.startsWith('.'))
208
+ return resolveInFileSet(joinRelative(fromFile, spec), fileSet);
209
+ for (const a of aliases) {
210
+ const cand = applyAlias(a.pattern, a.target, spec);
211
+ if (cand == null)
212
+ continue;
213
+ const r = resolveInFileSet(cand, fileSet);
214
+ if (r)
215
+ return r;
216
+ }
217
+ return null;
218
+ }
219
+ /** Build an index from already-read files. `aliases` resolve bare-specifier internal imports. Pure. */
220
+ export function buildIndex(files, aliases = []) {
137
221
  const symbols = [];
138
222
  const fileSet = new Set(files.map((f) => f.file));
139
223
  const imports = [];
140
224
  for (const { file, source } of files) {
141
225
  symbols.push(...extractSymbols(source, file));
142
226
  for (const imp of extractImports(source, file)) {
143
- imports.push({ ...imp, resolved: resolveImport(imp.from, imp.spec, fileSet) });
227
+ imports.push({ ...imp, resolved: resolveImport(imp.from, imp.spec, fileSet, aliases) });
144
228
  }
145
229
  }
146
230
  // Stable order: file, then line.
@@ -1 +1 @@
1
- {"version":3,"file":"codegraph.js","sourceRoot":"","sources":["../../../src/codegraph/codegraph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codegraph.js","sourceRoot":"","sources":["../../../src/codegraph/codegraph.ts"],"names":[],"mappings":"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"}
@@ -4,11 +4,18 @@
4
4
  * Shared by the `codegraph` CLI command and the codegraph MCP tools so the
5
5
  * scan/persist behaviour can't drift between them.
6
6
  */
7
- import { type CodeIndex } from './codegraph.js';
7
+ import { type CodeIndex, type ImportAlias } from './codegraph.js';
8
8
  export declare const INDEX_REL: string;
9
9
  /** Recursively collect source files under `root`, skipping vendor/build dirs and .d.ts. */
10
10
  export declare function walkSourceFiles(root: string): string[];
11
11
  export declare function indexPath(root: string): string;
12
+ /**
13
+ * Read `<root>/tsconfig.json` and derive repo-relative import aliases from
14
+ * `compilerOptions.paths` (+ `baseUrl`). Tolerant of JSONC comments/trailing
15
+ * commas; returns [] on any problem (so bare-specifier imports stay external,
16
+ * as before). Only the first target of each path pattern is used. Pure-ish (fs read).
17
+ */
18
+ export declare function parseTsconfigAliases(root: string): ImportAlias[];
12
19
  /** Scan a repo (or a subpath of it) and build the index. `root` is the repo
13
20
  * root used for relative paths; `scanRoot` (default = root) is where to walk. */
14
21
  export declare function scanRepo(root: string, scanRoot?: string): CodeIndex;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/codegraph/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE5D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAQ/D,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBtD;AAMD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;iFACiF;AACjF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,SAAS,CAMzE;AAED,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAI9D;AAED,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAMxD"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/codegraph/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE9E,eAAO,MAAM,SAAS,QAAwC,CAAC;AAQ/D,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBtD;AAMD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AA2BD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAgBhE;AAED;iFACiF;AACjF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,SAAS,CAMzE;AAED,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAI9D;AAED,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAMxD"}
@@ -53,6 +53,83 @@ function safeRead(abs) {
53
53
  export function indexPath(root) {
54
54
  return path.join(root, INDEX_REL);
55
55
  }
56
+ /**
57
+ * Strip JSONC `//` and block comments + trailing commas, STRING-AWARE so a `/*`
58
+ * inside a path pattern (e.g. `"@app/*"`, ubiquitous in tsconfig paths) isn't
59
+ * mistaken for a comment start. Pure.
60
+ */
61
+ function stripJsonc(s) {
62
+ let out = '';
63
+ let inStr = false, esc = false;
64
+ for (let i = 0; i < s.length; i++) {
65
+ const ch = s[i];
66
+ if (inStr) {
67
+ out += ch;
68
+ if (esc)
69
+ esc = false;
70
+ else if (ch === '\\')
71
+ esc = true;
72
+ else if (ch === '"')
73
+ inStr = false;
74
+ continue;
75
+ }
76
+ if (ch === '"') {
77
+ inStr = true;
78
+ out += ch;
79
+ continue;
80
+ }
81
+ if (ch === '/' && s[i + 1] === '/') {
82
+ while (i < s.length && s[i] !== '\n')
83
+ i++;
84
+ out += '\n';
85
+ continue;
86
+ }
87
+ if (ch === '/' && s[i + 1] === '*') {
88
+ i += 2;
89
+ while (i < s.length && !(s[i] === '*' && s[i + 1] === '/'))
90
+ i++;
91
+ i++;
92
+ continue;
93
+ }
94
+ out += ch;
95
+ }
96
+ return out.replace(/,(\s*[}\]])/g, '$1');
97
+ }
98
+ /**
99
+ * Read `<root>/tsconfig.json` and derive repo-relative import aliases from
100
+ * `compilerOptions.paths` (+ `baseUrl`). Tolerant of JSONC comments/trailing
101
+ * commas; returns [] on any problem (so bare-specifier imports stay external,
102
+ * as before). Only the first target of each path pattern is used. Pure-ish (fs read).
103
+ */
104
+ export function parseTsconfigAliases(root) {
105
+ let raw;
106
+ try {
107
+ raw = fs.readFileSync(path.join(root, 'tsconfig.json'), 'utf8');
108
+ }
109
+ catch {
110
+ return [];
111
+ }
112
+ const json = stripJsonc(raw);
113
+ let cfg;
114
+ try {
115
+ cfg = JSON.parse(json);
116
+ }
117
+ catch {
118
+ return [];
119
+ }
120
+ const co = cfg.compilerOptions ?? {};
121
+ if (!co.paths || typeof co.paths !== 'object')
122
+ return [];
123
+ const baseUrl = typeof co.baseUrl === 'string' ? co.baseUrl : '.';
124
+ const aliases = [];
125
+ for (const [pattern, targets] of Object.entries(co.paths)) {
126
+ const first = Array.isArray(targets) ? targets[0] : undefined;
127
+ if (typeof first !== 'string')
128
+ continue;
129
+ aliases.push({ pattern, target: path.join(baseUrl, first).split(path.sep).join('/') });
130
+ }
131
+ return aliases;
132
+ }
56
133
  /** Scan a repo (or a subpath of it) and build the index. `root` is the repo
57
134
  * root used for relative paths; `scanRoot` (default = root) is where to walk. */
58
135
  export function scanRepo(root, scanRoot = root) {
@@ -60,7 +137,7 @@ export function scanRepo(root, scanRoot = root) {
60
137
  const read = files
61
138
  .map((abs) => ({ file: path.relative(root, abs), source: safeRead(abs) }))
62
139
  .filter((f) => f.source !== null);
63
- return buildIndex(read);
140
+ return buildIndex(read, parseTsconfigAliases(root));
64
141
  }
65
142
  /** Persist the index to .swarm/codegraph.json under `root`. */
66
143
  export function saveIndex(root, index) {
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/codegraph/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/codegraph/store.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":"cycles.d.ts","sourceRoot":"","sources":["../../../src/commands/cycles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AA8B1E,eAAO,MAAM,aAAa,EAAE,OAW3B,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"cycles.d.ts","sourceRoot":"","sources":["../../../src/commands/cycles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AA+B1E,eAAO,MAAM,aAAa,EAAE,OAa3B,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -15,6 +15,7 @@ async function run(ctx) {
15
15
  const root = ctx.cwd || process.cwd();
16
16
  const asJson = ctx.flags.format === 'json';
17
17
  const ci = ctx.flags.ci === true;
18
+ const includeTypeOnly = ctx.flags['include-type-only'] === true;
18
19
  let index = loadIndex(root);
19
20
  if (!index) {
20
21
  index = scanRepo(root);
@@ -23,7 +24,7 @@ async function run(ctx) {
23
24
  }
24
25
  catch { /* read-only fs — index is in memory */ }
25
26
  }
26
- const res = findCycles(index);
27
+ const res = findCycles(index, { includeTypeOnly });
27
28
  const count = res.cycles.length + res.selfLoops.length;
28
29
  if (asJson) {
29
30
  process.stdout.write(JSON.stringify({ count, ...res }, null, 2) + '\n');
@@ -40,10 +41,12 @@ export const cyclesCommand = {
40
41
  description: 'Find circular import dependencies via the import graph (madge --circular style) — catch the TDZ/undefined-export bugs they cause',
41
42
  options: [
42
43
  { name: 'ci', description: 'exit 1 if any circular dependency exists (gate a build)', type: 'boolean' },
44
+ { name: 'include-type-only', description: 'also count TypeScript `import type` edges (excluded by default — they erase at compile time and cause no runtime cycle)', type: 'boolean' },
43
45
  ],
44
46
  examples: [
45
47
  { command: 'swarmdo cycles', description: 'List circular imports in the repo' },
46
48
  { command: 'swarmdo cycles --ci', description: 'Fail CI when a cycle is introduced' },
49
+ { command: 'swarmdo cycles --include-type-only', description: 'Strict view: count type-only imports too' },
47
50
  ],
48
51
  action: run,
49
52
  };