@promptci/core 0.2.2 → 0.4.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 (181) hide show
  1. package/dist/action-pinning.d.ts.map +1 -1
  2. package/dist/action-pinning.js +86 -55
  3. package/dist/action-pinning.js.map +1 -1
  4. package/dist/agent-practices.d.ts +5 -1
  5. package/dist/agent-practices.d.ts.map +1 -1
  6. package/dist/agent-practices.js +59 -34
  7. package/dist/agent-practices.js.map +1 -1
  8. package/dist/ai-config.d.ts +13 -6
  9. package/dist/ai-config.d.ts.map +1 -1
  10. package/dist/ai-config.js +25 -78
  11. package/dist/ai-config.js.map +1 -1
  12. package/dist/baseline.d.ts +8 -0
  13. package/dist/baseline.d.ts.map +1 -1
  14. package/dist/baseline.js +15 -0
  15. package/dist/baseline.js.map +1 -1
  16. package/dist/ci-alignment.d.ts +3 -1
  17. package/dist/ci-alignment.d.ts.map +1 -1
  18. package/dist/ci-alignment.js +8 -1
  19. package/dist/ci-alignment.js.map +1 -1
  20. package/dist/close-match.d.ts +97 -0
  21. package/dist/close-match.d.ts.map +1 -0
  22. package/dist/close-match.js +215 -0
  23. package/dist/close-match.js.map +1 -0
  24. package/dist/command-context.d.ts +67 -0
  25. package/dist/command-context.d.ts.map +1 -0
  26. package/dist/command-context.js +291 -0
  27. package/dist/command-context.js.map +1 -0
  28. package/dist/command-validity.d.ts.map +1 -1
  29. package/dist/command-validity.js +510 -32
  30. package/dist/command-validity.js.map +1 -1
  31. package/dist/context-optimizer.d.ts.map +1 -1
  32. package/dist/context-optimizer.js +9 -2
  33. package/dist/context-optimizer.js.map +1 -1
  34. package/dist/dead-references.d.ts +14 -1
  35. package/dist/dead-references.d.ts.map +1 -1
  36. package/dist/dead-references.js +264 -17
  37. package/dist/dead-references.js.map +1 -1
  38. package/dist/dependency-staleness.d.ts.map +1 -1
  39. package/dist/dependency-staleness.js +24 -38
  40. package/dist/dependency-staleness.js.map +1 -1
  41. package/dist/detectors.js +1 -1
  42. package/dist/detectors.js.map +1 -1
  43. package/dist/discovery.d.ts +138 -0
  44. package/dist/discovery.d.ts.map +1 -0
  45. package/dist/discovery.js +569 -0
  46. package/dist/discovery.js.map +1 -0
  47. package/dist/duplicates.d.ts +24 -2
  48. package/dist/duplicates.d.ts.map +1 -1
  49. package/dist/duplicates.js +313 -9
  50. package/dist/duplicates.js.map +1 -1
  51. package/dist/fix-engine.d.ts.map +1 -1
  52. package/dist/fix-engine.js +75 -1
  53. package/dist/fix-engine.js.map +1 -1
  54. package/dist/frameworks/dotnet.d.ts.map +1 -1
  55. package/dist/frameworks/dotnet.js +10 -11
  56. package/dist/frameworks/dotnet.js.map +1 -1
  57. package/dist/frameworks/go.d.ts.map +1 -1
  58. package/dist/frameworks/go.js +8 -4
  59. package/dist/frameworks/go.js.map +1 -1
  60. package/dist/frameworks/nextjs.d.ts.map +1 -1
  61. package/dist/frameworks/nextjs.js +8 -17
  62. package/dist/frameworks/nextjs.js.map +1 -1
  63. package/dist/frameworks/python.d.ts.map +1 -1
  64. package/dist/frameworks/python.js +5 -3
  65. package/dist/frameworks/python.js.map +1 -1
  66. package/dist/frameworks/rust.d.ts.map +1 -1
  67. package/dist/frameworks/rust.js +3 -3
  68. package/dist/frameworks/rust.js.map +1 -1
  69. package/dist/frameworks/unity.d.ts.map +1 -1
  70. package/dist/frameworks/unity.js +6 -5
  71. package/dist/frameworks/unity.js.map +1 -1
  72. package/dist/gitignore.d.ts +31 -2
  73. package/dist/gitignore.d.ts.map +1 -1
  74. package/dist/gitignore.js +33 -8
  75. package/dist/gitignore.js.map +1 -1
  76. package/dist/health-score.d.ts +15 -1
  77. package/dist/health-score.d.ts.map +1 -1
  78. package/dist/health-score.js +25 -2
  79. package/dist/health-score.js.map +1 -1
  80. package/dist/hooks-settings-detector.d.ts.map +1 -1
  81. package/dist/hooks-settings-detector.js +5 -1
  82. package/dist/hooks-settings-detector.js.map +1 -1
  83. package/dist/index.d.ts +10 -2
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +16 -2
  86. package/dist/index.js.map +1 -1
  87. package/dist/known-paths.d.ts +82 -0
  88. package/dist/known-paths.d.ts.map +1 -0
  89. package/dist/known-paths.js +152 -0
  90. package/dist/known-paths.js.map +1 -0
  91. package/dist/makefile.d.ts.map +1 -1
  92. package/dist/makefile.js +17 -13
  93. package/dist/makefile.js.map +1 -1
  94. package/dist/manifest-consistency.d.ts +1 -1
  95. package/dist/manifest-consistency.d.ts.map +1 -1
  96. package/dist/manifest-consistency.js +18 -8
  97. package/dist/manifest-consistency.js.map +1 -1
  98. package/dist/markdown-fences.d.ts.map +1 -1
  99. package/dist/markdown-fences.js +7 -3
  100. package/dist/markdown-fences.js.map +1 -1
  101. package/dist/mcp-config-detector.d.ts.map +1 -1
  102. package/dist/mcp-config-detector.js +5 -1
  103. package/dist/mcp-config-detector.js.map +1 -1
  104. package/dist/project-type.d.ts +2 -1
  105. package/dist/project-type.d.ts.map +1 -1
  106. package/dist/project-type.js +36 -48
  107. package/dist/project-type.js.map +1 -1
  108. package/dist/prompt-cache.d.ts.map +1 -1
  109. package/dist/prompt-cache.js +13 -2
  110. package/dist/prompt-cache.js.map +1 -1
  111. package/dist/provenance/check.d.ts +40 -0
  112. package/dist/provenance/check.d.ts.map +1 -0
  113. package/dist/provenance/check.js +157 -0
  114. package/dist/provenance/check.js.map +1 -0
  115. package/dist/provenance/index.d.ts +13 -0
  116. package/dist/provenance/index.d.ts.map +1 -0
  117. package/dist/provenance/index.js +21 -0
  118. package/dist/provenance/index.js.map +1 -0
  119. package/dist/provenance/instruction-advice.d.ts +3 -0
  120. package/dist/provenance/instruction-advice.d.ts.map +1 -0
  121. package/dist/provenance/instruction-advice.js +570 -0
  122. package/dist/provenance/instruction-advice.js.map +1 -0
  123. package/dist/provenance/repo-checks.d.ts +3 -0
  124. package/dist/provenance/repo-checks.d.ts.map +1 -0
  125. package/dist/provenance/repo-checks.js +644 -0
  126. package/dist/provenance/repo-checks.js.map +1 -0
  127. package/dist/provenance/tool-config.d.ts +3 -0
  128. package/dist/provenance/tool-config.d.ts.map +1 -0
  129. package/dist/provenance/tool-config.js +480 -0
  130. package/dist/provenance/tool-config.js.map +1 -0
  131. package/dist/provenance/types.d.ts +116 -0
  132. package/dist/provenance/types.d.ts.map +1 -0
  133. package/dist/provenance/types.js +17 -0
  134. package/dist/provenance/types.js.map +1 -0
  135. package/dist/repo-context.d.ts +9 -0
  136. package/dist/repo-context.d.ts.map +1 -1
  137. package/dist/repo-context.js +35 -41
  138. package/dist/repo-context.js.map +1 -1
  139. package/dist/repo-tree.d.ts +163 -9
  140. package/dist/repo-tree.d.ts.map +1 -1
  141. package/dist/repo-tree.js +226 -34
  142. package/dist/repo-tree.js.map +1 -1
  143. package/dist/report.d.ts.map +1 -1
  144. package/dist/report.js +6 -0
  145. package/dist/report.js.map +1 -1
  146. package/dist/sample-text.d.ts +36 -0
  147. package/dist/sample-text.d.ts.map +1 -0
  148. package/dist/sample-text.js +72 -0
  149. package/dist/sample-text.js.map +1 -0
  150. package/dist/sarif.d.ts +27 -0
  151. package/dist/sarif.d.ts.map +1 -0
  152. package/dist/sarif.js +357 -0
  153. package/dist/sarif.js.map +1 -0
  154. package/dist/scan.d.ts.map +1 -1
  155. package/dist/scan.js +8 -2
  156. package/dist/scan.js.map +1 -1
  157. package/dist/scanner.d.ts +4 -3
  158. package/dist/scanner.d.ts.map +1 -1
  159. package/dist/scanner.js +36 -77
  160. package/dist/scanner.js.map +1 -1
  161. package/dist/security-pack.d.ts.map +1 -1
  162. package/dist/security-pack.js +117 -35
  163. package/dist/security-pack.js.map +1 -1
  164. package/dist/skill-supply-chain.d.ts.map +1 -1
  165. package/dist/skill-supply-chain.js +29 -19
  166. package/dist/skill-supply-chain.js.map +1 -1
  167. package/dist/skills-detector.d.ts.map +1 -1
  168. package/dist/skills-detector.js +11 -3
  169. package/dist/skills-detector.js.map +1 -1
  170. package/dist/token-estimates.d.ts +42 -0
  171. package/dist/token-estimates.d.ts.map +1 -0
  172. package/dist/token-estimates.js +200 -0
  173. package/dist/token-estimates.js.map +1 -0
  174. package/dist/types.d.ts +99 -0
  175. package/dist/types.d.ts.map +1 -1
  176. package/dist/types.js.map +1 -1
  177. package/dist/workspace-manifests.d.ts +6 -0
  178. package/dist/workspace-manifests.d.ts.map +1 -1
  179. package/dist/workspace-manifests.js +13 -8
  180. package/dist/workspace-manifests.js.map +1 -1
  181. package/package.json +5 -2
@@ -5,11 +5,14 @@
5
5
  * exact matches or near-duplicates (Jaccard ≥ 0.8).
6
6
  *
7
7
  * When the same section appears in N files, ONE issue is emitted listing
8
- * all N files — not N*(N-1)/2 pairwise issues.
8
+ * all N files — not N*(N-1)/2 pairwise issues. When whole files mirror each
9
+ * other (most sections match), ONE warning is emitted for the group of files
10
+ * in place of the per-section findings between them (pcic-1ik0.5).
9
11
  *
10
12
  * Wording is intentionally cautious — all findings are heuristic.
11
13
  */
12
14
  import * as crypto from 'node:crypto';
15
+ import * as path from 'node:path';
13
16
  import { snippet } from './evidence.js';
14
17
  import { fileIdPath, sectionIdPath } from './finding-id.js';
15
18
  /**
@@ -104,6 +107,41 @@ function isBoilerplateHeading(heading) {
104
107
  }
105
108
  return false;
106
109
  }
110
+ /**
111
+ * The ONE definition of "the same text" for an UNATTENDED consolidation edit,
112
+ * shared by per-section duplicate findings, mirrored-file findings and the
113
+ * import recipe (pcic-1ik0.5, pcic-1ik0.10). Two sections are the same text
114
+ * only when they are byte-identical after normalising exactly these, and
115
+ * nothing else:
116
+ *
117
+ * - line endings (CRLF and CR become LF);
118
+ * - trailing whitespace at the end of each line;
119
+ * - a leading byte-order mark;
120
+ * - leading and trailing blank lines of the section.
121
+ *
122
+ * No interior whitespace is collapsed, no indentation is trimmed, no reflow is
123
+ * treated as equal and no Markdown is modelled: a nested list, `<pre>` or
124
+ * inline-code spacing, a reflowed paragraph, tabs versus spaces, or a
125
+ * different Unicode normalisation all count as different, and the finding is
126
+ * then advisory. That costs a few auto-fixes and removes the whole class of
127
+ * "equal after normalising, different in meaning" wrong edits.
128
+ */
129
+ export function sameSectionText(section) {
130
+ const lines = section.text
131
+ .replace(/^\uFEFF/, '')
132
+ .replace(/\r\n?/g, '\n')
133
+ .split('\n')
134
+ .map((line) => line.replace(/[ \t\f\v]+$/, ''));
135
+ while (lines.length > 0 && lines[0] === '')
136
+ lines.shift();
137
+ while (lines.length > 0 && lines[lines.length - 1] === '')
138
+ lines.pop();
139
+ return lines.join('\n');
140
+ }
141
+ /** True when every section in the list has the same text (see {@link sameSectionText}). */
142
+ function allSameText(sections) {
143
+ return new Set(sections.map(sameSectionText)).size === 1;
144
+ }
107
145
  function normalizedHeading(heading) {
108
146
  return heading?.toLowerCase().replace(/\s+/g, ' ').trim() ?? '';
109
147
  }
@@ -265,11 +303,28 @@ export function detectDuplicates(files) {
265
303
  clusterConfidence.set(root, edge.confidence);
266
304
  }
267
305
  }
306
+ // pcic-1ik0.5: clusters entirely inside a group of mirrored files are
307
+ // reported once for the group (below), not once per section.
308
+ const mirrors = findMirrorGroups(files, edges, sectionByKey);
309
+ const absorbed = new Map(); // mirror group index → its clusters
310
+ for (const [, keys] of clusters) {
311
+ if (keys.length < 2)
312
+ continue;
313
+ const group = mirrorGroupOf(keys.map((k) => sectionByKey.get(k).filePath), mirrors);
314
+ if (group === undefined)
315
+ continue;
316
+ const list = absorbed.get(group) ?? [];
317
+ list.push(keys);
318
+ absorbed.set(group, list);
319
+ }
320
+ const absorbedKeys = new Set([...absorbed.values()].flat(2));
268
321
  // Emit one issue per cluster
269
322
  const issues = [];
270
323
  for (const [root, keys] of clusters) {
271
324
  if (keys.length < 2)
272
325
  continue;
326
+ if (absorbedKeys.has(keys[0]))
327
+ continue;
273
328
  const sections = keys.map((k) => sectionByKey.get(k));
274
329
  const severity = clusterSeverity.get(root) ?? 'warning';
275
330
  const confidence = clusterConfidence.get(root) ?? 0.75;
@@ -285,9 +340,15 @@ export function detectDuplicates(files) {
285
340
  ? `Possible duplicate: ${headingLabel} (${fileCount} files)`
286
341
  : `Possible duplicate: ${headingLabel}`;
287
342
  const duplicateTokens = sections.slice(1).reduce((sum, s) => sum + Math.round(s.text.length / 4), 0);
288
- const summary = fileCount > 2
343
+ // Copies that are similar but not the same text (near-duplicates) must not
344
+ // be consolidated unattended: the pointer would replace the text that
345
+ // differs, and with it the evidence of a conflict. Same text = equal after
346
+ // collapsing whitespace and line endings (pcic-1ik0.5, PromptCI#160).
347
+ const identical = allSameText(sections);
348
+ const summary = (fileCount > 2
289
349
  ? `This section appears highly similar in ${fileCount} files. Consider consolidating into one canonical location.`
290
- : 'These sections appear highly similar. Consider consolidating them into one canonical location.';
350
+ : 'These sections appear highly similar. Consider consolidating them into one canonical location.') +
351
+ (identical ? '' : ' The copies are not identical: they differ in places, so compare them before consolidating.');
291
352
  issues.push({
292
353
  id: clusterIssueId(keys),
293
354
  severity,
@@ -306,18 +367,261 @@ export function detectDuplicates(files) {
306
367
  snippet(sections[0].normalizedText, 200),
307
368
  `Duplicated size: ~${duplicateTokens} tokens`,
308
369
  ],
309
- recommendation: `Consolidate these sections into one canonical location (e.g. AGENTS.md) and use forwarding pointers to save ~${duplicateTokens} tokens per session. If both are intentional, add a comment clarifying the distinction.`,
370
+ recommendation: (identical
371
+ ? ''
372
+ : 'The copies differ: decide which text is right before consolidating, since a pointer would discard the other. Then ') +
373
+ `${identical ? 'Consolidate' : 'consolidate'} these sections into one canonical location (e.g. AGENTS.md) and use forwarding pointers to save ~${duplicateTokens} tokens per session. If both are intentional, add a comment clarifying the distinction.`,
310
374
  // `applyFixRecipe` can consolidate a duplicate that spans MULTIPLE files
311
- // (pick a canonical file, replace the copies with a forwarding pointer).
312
- // A cluster confined to one file has no other file to point at, so it
313
- // stays advisory. Same-file duplicate *headings* are handled by the other
314
- // detectors below and are never auto-applied.
315
- autoApplySafe: fileCount >= 2,
375
+ // (pick a canonical file, replace the copies with a forwarding pointer),
376
+ // but only copies that are the same text: a near-duplicate stays
377
+ // advisory. A cluster confined to one file has no other file to point
378
+ // at, so it stays advisory too. Same-file duplicate *headings* are
379
+ // handled by the other detectors below and are never auto-applied.
380
+ autoApplySafe: fileCount >= 2 && identical,
316
381
  confidence,
317
382
  });
318
383
  }
384
+ for (const [group, groupClusters] of [...absorbed].sort((a, b) => a[0] - b[0])) {
385
+ issues.push(mirrorIssue(mirrors.groups[group], groupClusters, sectionByKey, mirrors));
386
+ }
319
387
  return issues;
320
388
  }
389
+ // ── Mirrored instruction files (pcic-1ik0.5) ─────────────────────────────────
390
+ /**
391
+ * Two files mirror each other when their matching sections (exact, or at the
392
+ * near-duplicate threshold) make up at least MIRROR_SHARE of BOTH files'
393
+ * comparable sections, or at least MIRROR_COPY_SHARE of EITHER file's (one
394
+ * file is mostly a copy of parts of the other, e.g. an AGENTS.md cut down
395
+ * from a longer CLAUDE.md). Below both, the shared sections stay ordinary
396
+ * per-section findings: two files that merely repeat a few sections are not
397
+ * copies of each other.
398
+ */
399
+ const MIRROR_SHARE = 0.5;
400
+ const MIRROR_COPY_SHARE = 0.8;
401
+ /**
402
+ * A pair needs at least this many matching sections, unless each file is a
403
+ * single section and the two match (a whole one-section file copied).
404
+ */
405
+ const MIRROR_MIN_SHARED = 2;
406
+ /**
407
+ * Id of a mirror-group finding: sha1 of `mirror:` plus the group's
408
+ * repo-relative file paths in canonical order, joined by `|`. It depends only
409
+ * on which files form the group, so it is the same in every checkout and does
410
+ * not change when the copied sections inside the files do.
411
+ */
412
+ function mirrorIssueId(relativePaths) {
413
+ const hash = crypto.createHash('sha1').update(`mirror:${relativePaths.join('|')}`).digest('hex').slice(0, 12);
414
+ return `duplicate-${hash}`;
415
+ }
416
+ /** The canonical file of a group: AGENTS.md when present, else the first path. */
417
+ function canonicalFirst(files) {
418
+ const sorted = [...files].sort();
419
+ const agents = sorted.find((f) => path.basename(f).toLowerCase() === 'agents.md');
420
+ return agents ? [agents, ...sorted.filter((f) => f !== agents)] : sorted;
421
+ }
422
+ /**
423
+ * Groups of instruction files that mirror one another: every pair linked in a
424
+ * group shares at least MIRROR_SHARE of each file's comparable sections.
425
+ * Repositories keep AGENTS.md, CLAUDE.md and GEMINI.md (or per-tool rule
426
+ * files) identical on purpose, or generate them; reported per section, one
427
+ * mirror was dozens of high-severity findings.
428
+ */
429
+ function findMirrorGroups(files, edges, sectionByKey) {
430
+ // The share's denominator: EVERY section of the file that has body text,
431
+ // short ones included. Counting only the sections long enough to compare
432
+ // made two files whose one long section matched read as "1 of 1" mirrors
433
+ // however many short sections each had of its own.
434
+ const comparableKeys = new Map();
435
+ for (const file of files) {
436
+ for (const s of file.sections) {
437
+ if (!hasBody(s))
438
+ continue;
439
+ const set = comparableKeys.get(s.filePath) ?? new Set();
440
+ set.add(`${sectionIdPath(s)}:${s.startLine}`);
441
+ comparableKeys.set(s.filePath, set);
442
+ }
443
+ }
444
+ // For each ordered file pair, the sections of the first that match the second.
445
+ const matched = new Map();
446
+ const exactPairs = new Set();
447
+ const note = (from, to, key) => {
448
+ const byTarget = matched.get(from) ?? new Map();
449
+ const keys = byTarget.get(to) ?? new Set();
450
+ keys.add(key);
451
+ byTarget.set(to, keys);
452
+ matched.set(from, byTarget);
453
+ };
454
+ for (const edge of edges) {
455
+ if (edge.severity !== 'high' && edge.severity !== 'warning')
456
+ continue; // borderline matches do not count
457
+ const a = sectionByKey.get(edge.keyA).filePath;
458
+ const b = sectionByKey.get(edge.keyB).filePath;
459
+ if (a === b)
460
+ continue;
461
+ note(a, b, edge.keyA);
462
+ note(b, a, edge.keyB);
463
+ if (edge.severity === 'high')
464
+ exactPairs.add([a, b].sort().join('\u0000'));
465
+ }
466
+ const denominator = (file, keys) => new Set([...(comparableKeys.get(file) ?? []), ...keys]).size;
467
+ const parent = new Map();
468
+ const mirrored = new Set();
469
+ const mirrorPairs = new Set();
470
+ for (const [a, byTarget] of matched) {
471
+ for (const [b, aKeys] of byTarget) {
472
+ if (a >= b)
473
+ continue; // each unordered pair once
474
+ const bKeys = matched.get(b)?.get(a) ?? new Set();
475
+ const aShare = aKeys.size / denominator(a, aKeys);
476
+ const bShare = bKeys.size / denominator(b, bKeys);
477
+ // A one-section file counts only as an EXACT copy: near-identical
478
+ // single-section files (sibling slash commands sharing a template)
479
+ // are separate files on purpose.
480
+ const wholeFiles = aShare === 1 && bShare === 1 && exactPairs.has([a, b].sort().join('\u0000'));
481
+ if (Math.min(aKeys.size, bKeys.size) < MIRROR_MIN_SHARED && !wholeFiles)
482
+ continue;
483
+ if (Math.min(aShare, bShare) < MIRROR_SHARE && Math.max(aShare, bShare) < MIRROR_COPY_SHARE)
484
+ continue;
485
+ union(parent, a, b);
486
+ mirrored.add(a);
487
+ mirrored.add(b);
488
+ mirrorPairs.add(pairKey(a, b));
489
+ }
490
+ }
491
+ const members = new Map();
492
+ for (const file of mirrored) {
493
+ const root = find(parent, file);
494
+ members.set(root, [...(members.get(root) ?? []), file]);
495
+ }
496
+ // Every pair in a group must itself be a mirror pair. Connected components
497
+ // alone would chain A~B and B~C into one group although A and C share
498
+ // nothing, and the consolidation fix would then point C's own text at A.
499
+ const groups = [...members.values()]
500
+ .flatMap((component) => splitIntoCliques(component, (x, y) => mirrorPairs.has(pairKey(x, y))))
501
+ .map(canonicalFirst)
502
+ .sort((x, y) => x[0].localeCompare(y[0]));
503
+ const comparable = new Map();
504
+ const groupOfFile = new Map();
505
+ groups.forEach((files, i) => {
506
+ for (const file of files) {
507
+ groupOfFile.set(file, i);
508
+ comparable.set(file, comparableKeys.get(file)?.size ?? 0);
509
+ }
510
+ });
511
+ return { groups, groupOfFile, comparable };
512
+ }
513
+ const pairKey = (a, b) => (a < b ? `${a}\u0000${b}` : `${b}\u0000${a}`);
514
+ /**
515
+ * Split a connected set of files into groups in which every two files are
516
+ * linked, deterministically: seed each group with the canonical remaining file
517
+ * (AGENTS.md first, else the first path), add each other remaining file, in
518
+ * path order, that is linked to every member so far, and repeat with what is
519
+ * left. Groups of one file are dropped.
520
+ */
521
+ function splitIntoCliques(files, linked) {
522
+ const groups = [];
523
+ let remaining = canonicalFirst(files);
524
+ while (remaining.length > 1) {
525
+ const group = [remaining[0]];
526
+ for (const file of remaining.slice(1)) {
527
+ if (group.every((member) => linked(member, file)))
528
+ group.push(file);
529
+ }
530
+ if (group.length > 1)
531
+ groups.push(group);
532
+ remaining = canonicalFirst(remaining.filter((f) => !group.includes(f)));
533
+ }
534
+ return groups;
535
+ }
536
+ /** True when a section has text beyond its heading line. */
537
+ function hasBody(section) {
538
+ const body = section.text.replace(/^\s*#{1,6}\s+[^\n]*\n?/, '');
539
+ return normalizeSection(body).length > 0;
540
+ }
541
+ /** The mirror group holding every one of these files (at least two distinct), if any. */
542
+ function mirrorGroupOf(files, mirrors) {
543
+ const distinct = [...new Set(files)];
544
+ if (distinct.length < 2)
545
+ return undefined;
546
+ const group = mirrors.groupOfFile.get(distinct[0]);
547
+ if (group === undefined)
548
+ return undefined;
549
+ return distinct.every((f) => mirrors.groupOfFile.get(f) === group) ? group : undefined;
550
+ }
551
+ /** ONE warning for a group of mirrored files, replacing its per-section duplicate findings. */
552
+ function mirrorIssue(files, groupClusters, sectionByKey, mirrors) {
553
+ const canonical = files[0];
554
+ const sectionsOf = (keys) => keys.map((k) => sectionByKey.get(k));
555
+ const all = groupClusters.flatMap(sectionsOf);
556
+ const label = new Map();
557
+ const idPath = new Map();
558
+ for (const s of all) {
559
+ label.set(s.filePath, s.relativePath ?? path.basename(s.filePath));
560
+ // A section's id path is its FILE's repo-relative path (finding-id.ts).
561
+ idPath.set(s.filePath, sectionIdPath(s));
562
+ }
563
+ const names = files.map((f) => label.get(f) ?? path.basename(f));
564
+ const canonicalName = names[0];
565
+ // Tokens a session pays for the copies: every section of a cluster but one
566
+ // (the canonical file's, when it holds one).
567
+ let duplicateTokens = 0;
568
+ for (const keys of groupClusters) {
569
+ const sections = sectionsOf(keys);
570
+ const keep = sections.find((s) => s.filePath === canonical) ?? sections[0];
571
+ duplicateTokens += sections.filter((s) => s !== keep).reduce((sum, s) => sum + Math.round(s.text.length / 4), 0);
572
+ }
573
+ const shared = (file) => new Set(all.filter((s) => s.filePath === file).map((s) => s.startLine)).size;
574
+ const order = new Map(files.map((f, i) => [f, i]));
575
+ const locations = [...all]
576
+ .sort((a, b) => order.get(a.filePath) - order.get(b.filePath) || a.startLine - b.startLine)
577
+ .map((s) => ({ filePath: s.filePath, startLine: s.startLine, endLine: s.endLine }));
578
+ const heading = (keys) => sectionsOf(keys)[0].heading ?? '(untitled)';
579
+ const headings = [...new Set(groupClusters.map(heading))];
580
+ // Copies that have DRIFTED (near-duplicates, not the same text) must not be
581
+ // replaced unattended: the pointer would delete the text that differs, and
582
+ // with it the evidence of a conflict. Same rule as per-section findings.
583
+ const drifted = groupClusters.filter((keys) => !allSameText(sectionsOf(keys))).map(heading);
584
+ const counts = files
585
+ .map((f, i) => `${names[i]} ${shared(f)} of ${Math.max(shared(f), mirrors.comparable.get(f) ?? 0)}`)
586
+ .join(', ');
587
+ return {
588
+ id: mirrorIssueId(files.map((f) => idPath.get(f) ?? f)),
589
+ severity: 'warning',
590
+ category: 'duplicate',
591
+ title: `Possible mirrored instruction files: ${names.join(', ')}`,
592
+ summary: `These ${files.length} instruction files appear to be copies of one another: ${groupClusters.length} ` +
593
+ 'section(s) have the same or nearly the same text in more than one of them, covering most of at least one ' +
594
+ `file (shared sections per file: ${counts}). That is common when copies are kept in step for tools that ` +
595
+ 'read different files, or generated. Reported once for the group rather than once per section. Every tool ' +
596
+ `that loads more than one of them pays about ${duplicateTokens} extra tokens per session, and copies tend ` +
597
+ 'to drift apart.' +
598
+ (drifted.length > 0
599
+ ? ` The copies already differ in ${drifted.length} section(s): ${snippet(drifted.join(', '), 200)}.`
600
+ : ''),
601
+ filePaths: files,
602
+ locations,
603
+ // The member files and shared headings. Counts and sizes live in the
604
+ // summary; identity is `fingerprintKey`, so neither moves the fingerprint.
605
+ evidence: [...names.map((n) => `Mirrored file: ${n}`), `Shared sections: ${snippet(headings.join(', '), 200)}`],
606
+ recommendation: (drifted.length > 0
607
+ ? `Reconcile the sections that differ (${snippet(drifted.join(', '), 120)}) first: decide which text is ` +
608
+ 'right, since a pointer would discard the other. Then consider '
609
+ : 'Consider ') +
610
+ `keeping one canonical file (here ${canonicalName}) and replacing the others with a short pointer ` +
611
+ `such as "Follow ${path.basename(canonicalName)}", or a symlink where the tool follows one. If a generator ` +
612
+ 'writes these files, configure it to write the pointer instead. Keep only genuinely tool-specific guidance ' +
613
+ 'in the other files.',
614
+ // The consolidation recipe replaces each copied section outside the
615
+ // canonical (first-listed) file with a pointer to it. Only safe when every
616
+ // copy is the same text; otherwise advisory.
617
+ autoApplySafe: drifted.length === 0,
618
+ // One identity per mirror group, keyed on its canonical file: editing a
619
+ // copied section, or the group gaining or losing a member, is the same
620
+ // finding (baseline, trend, SARIF), not "resolved + new".
621
+ fingerprintKey: `duplicate-mirror:${idPath.get(canonical) ?? canonical}`,
622
+ confidence: 0.8,
623
+ };
624
+ }
321
625
  // ── BUG-004: Same-heading duplicate within a single file ─────────────────────
322
626
  /**
323
627
  * Detect when the same section heading appears more than once in a single
@@ -1 +1 @@
1
- {"version":3,"file":"duplicates.js","sourceRoot":"","sources":["../src/duplicates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"duplicates.js","sourceRoot":"","sources":["../src/duplicates.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fix-engine.d.ts","sourceRoot":"","sources":["../src/fix-engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAiBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,GAAG,MAAM,CAUxF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,EAAE,CAAC,CA+JvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAE1D"}
1
+ {"version":3,"file":"fix-engine.d.ts","sourceRoot":"","sources":["../src/fix-engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,aAAa,EAAE,MAAM,YAAY,CAAC;AAKzD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAiBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,GAAG,MAAM,CAUxF;AAqED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,EAAE,CAAC,CAwKvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAE1D"}
@@ -1,7 +1,7 @@
1
1
  import * as path from 'node:path';
2
2
  import * as fs from 'node:fs/promises';
3
3
  import { renderPromptCiGitignore } from './promptci-gitignore.js';
4
- import { isWithinRoot } from './path-containment.js';
4
+ import { isWithinRoot, realPathWithinRoot } from './path-containment.js';
5
5
  import { gitignoreLineMatchesTarget } from './security-pack.js';
6
6
  /**
7
7
  * True when an active (non-comment) line of the given .gitignore content
@@ -30,12 +30,86 @@ export function resolveSafePath(repoRoot, relativeOrAbsolutePath) {
30
30
  }
31
31
  return resolvedPath;
32
32
  }
33
+ /** Occurrences of `needle` (a plain string, never a pattern) in `haystack`. */
34
+ function countOccurrences(haystack, needle) {
35
+ let count = 0;
36
+ for (let at = haystack.indexOf(needle); at !== -1; at = haystack.indexOf(needle, at + needle.length)) {
37
+ count++;
38
+ }
39
+ return count;
40
+ }
41
+ /**
42
+ * pcic-oonz: applies the line-anchored substitutions a detector computed (see
43
+ * {@link FixEdit}).
44
+ *
45
+ * All-or-nothing on purpose. Every edit must land on an existing line whose
46
+ * text contains its `find` exactly once; the first one that does not abandons
47
+ * the whole issue and returns no changes. A finding whose recipe is stale
48
+ * (someone edited the file between the scan and the fix) is then re-detected
49
+ * on the next scan against the current text, rather than half-rewritten here.
50
+ *
51
+ * Lines are split with their terminators attached and rejoined verbatim, so a
52
+ * one-token substitution leaves every other byte of the file — including mixed
53
+ * or CRLF line endings and a missing trailing newline — exactly as it was.
54
+ */
55
+ async function applyLineEdits(edits, repoRoot) {
56
+ const byFile = new Map();
57
+ for (const edit of edits) {
58
+ const filePath = resolveSafePath(repoRoot, edit.filePath);
59
+ const list = byFile.get(filePath) ?? [];
60
+ list.push(edit);
61
+ byFile.set(filePath, list);
62
+ }
63
+ const changes = [];
64
+ for (const [filePath, fileEdits] of byFile) {
65
+ // The lexical check in resolveSafePath cannot see a symlink: an in-root
66
+ // `AGENTS.md` committed as a link to a file outside the root would be
67
+ // written THROUGH. Refuse that, the same policy reads already follow.
68
+ if (!realPathWithinRoot(path.resolve(repoRoot), filePath))
69
+ return [];
70
+ let content;
71
+ try {
72
+ content = await fs.readFile(filePath, 'utf-8');
73
+ }
74
+ catch {
75
+ return []; // a file the recipe needs is gone: apply nothing
76
+ }
77
+ // Terminators stay attached to their line, so join('') restores the file.
78
+ const lines = content.split(/(?<=\n)/);
79
+ for (const { line, find, replace } of fileEdits) {
80
+ const idx = line - 1;
81
+ const text = lines[idx];
82
+ if (text === undefined || !find || find.includes('\n'))
83
+ return [];
84
+ if (countOccurrences(text, find) !== 1)
85
+ return [];
86
+ // Spliced by index, not via String.replace: a `$&`, `$1` or `$$` in the
87
+ // replacement is replacement-pattern syntax there, and a path or script
88
+ // name containing `$` would be silently corrupted.
89
+ const at = text.indexOf(find);
90
+ lines[idx] = text.slice(0, at) + replace + text.slice(at + find.length);
91
+ }
92
+ const newContent = lines.join('');
93
+ if (newContent === content)
94
+ continue;
95
+ changes.push({ filePath, originalContent: content, newContent });
96
+ }
97
+ return changes;
98
+ }
33
99
  /**
34
100
  * Computes the proposed file changes to fix a given PromptCiIssue.
35
101
  * Returns an array of FileChanges that would be applied.
36
102
  */
37
103
  export async function applyFixRecipe(issue, repoRoot) {
38
104
  const changes = [];
105
+ // 0. Detector-computed substitutions (pcic-oonz): a mistyped package-manager
106
+ // script name with exactly one close match in the manifest, and a broken
107
+ // relative link whose basename exists exactly once in the tree. The detector
108
+ // knew the parsed command / link target and the candidate set, so it carries
109
+ // the edit rather than making the fix engine re-derive any of it.
110
+ if (issue.fixEdits && issue.fixEdits.length > 0) {
111
+ return applyLineEdits(issue.fixEdits, repoRoot);
112
+ }
39
113
  // 1. Missing .promptci/ in .gitignore
40
114
  if (issue.id === 'security-pack-no-promptci-gitignore') {
41
115
  const gitignorePath = resolveSafePath(repoRoot, '.gitignore');
@@ -1 +1 @@
1
- {"version":3,"file":"fix-engine.js","sourceRoot":"","sources":["../src/fix-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fix-engine.js","sourceRoot":"","sources":["../src/fix-engine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dotnet.d.ts","sourceRoot":"","sources":["../../src/frameworks/dotnet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CA+ElE"}
1
+ {"version":3,"file":"dotnet.d.ts","sourceRoot":"","sources":["../../src/frameworks/dotnet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CAgFlE"}
@@ -1,18 +1,18 @@
1
- import * as fs from 'node:fs';
2
1
  import { readTextWithinRoot } from '../ai-config.js';
2
+ import { treeFor } from '../repo-tree.js';
3
3
  export function detectDotnet(context) {
4
4
  const issues = [];
5
5
  const { repoRoot, files } = context;
6
+ // pcic-e6xa: the root listing comes from the scan's tree — see the note in
7
+ // frameworks/go.ts.
8
+ const tree = treeFor(context);
9
+ const rootEntries = tree.entries(tree.root);
10
+ const rootFiles = typeof rootEntries === 'string'
11
+ ? []
12
+ : [...rootEntries.values()].filter((e) => !e.isDirectory()).map((e) => e.name).sort();
6
13
  // Detect if dotnet project
7
- let hasDotnet = context.projectType === 'dotnet';
8
- if (!hasDotnet) {
9
- try {
10
- hasDotnet = fs.readdirSync(repoRoot).some(f => f.endsWith('.sln') || f.endsWith('.csproj'));
11
- }
12
- catch {
13
- // ignore
14
- }
15
- }
14
+ const hasDotnet = context.projectType === 'dotnet' ||
15
+ rootFiles.some((f) => f.endsWith('.sln') || f.endsWith('.csproj'));
16
16
  const combinedContent = files.map(f => f.content).join('\n');
17
17
  const hasDotnetMentions = /\bdotnet\b|\.sln\b|\.csproj\b|\bxunit\b|\bnunit\b|\bmstest\b/i.test(combinedContent);
18
18
  if (!hasDotnet && !hasDotnetMentions) {
@@ -40,7 +40,6 @@ export function detectDotnet(context) {
40
40
  // Let's find any csproj at the root to check target framework
41
41
  let targetFramework;
42
42
  try {
43
- const rootFiles = fs.readdirSync(repoRoot);
44
43
  const csprojFile = rootFiles.find(f => f.endsWith('.csproj'));
45
44
  if (csprojFile) {
46
45
  const csprojContent = readTextWithinRoot(repoRoot, csprojFile) ?? '';