@promptci/core 0.0.1 → 0.2.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 (253) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +29 -30
  3. package/dist/action-pinning.d.ts +37 -0
  4. package/dist/action-pinning.d.ts.map +1 -0
  5. package/dist/action-pinning.js +277 -0
  6. package/dist/action-pinning.js.map +1 -0
  7. package/dist/agent-practices.d.ts +3 -1
  8. package/dist/agent-practices.d.ts.map +1 -1
  9. package/dist/agent-practices.js +198 -94
  10. package/dist/agent-practices.js.map +1 -1
  11. package/dist/ai-config.d.ts +178 -0
  12. package/dist/ai-config.d.ts.map +1 -0
  13. package/dist/ai-config.js +721 -0
  14. package/dist/ai-config.js.map +1 -0
  15. package/dist/alias-files.d.ts +33 -0
  16. package/dist/alias-files.d.ts.map +1 -0
  17. package/dist/alias-files.js +60 -0
  18. package/dist/alias-files.js.map +1 -0
  19. package/dist/baseline.d.ts +17 -1
  20. package/dist/baseline.d.ts.map +1 -1
  21. package/dist/baseline.js +5 -1
  22. package/dist/baseline.js.map +1 -1
  23. package/dist/buried-critical.d.ts +17 -0
  24. package/dist/buried-critical.d.ts.map +1 -0
  25. package/dist/buried-critical.js +107 -0
  26. package/dist/buried-critical.js.map +1 -0
  27. package/dist/canonical-owner.d.ts.map +1 -1
  28. package/dist/canonical-owner.js +60 -30
  29. package/dist/canonical-owner.js.map +1 -1
  30. package/dist/ci-alignment.d.ts.map +1 -1
  31. package/dist/ci-alignment.js +3 -2
  32. package/dist/ci-alignment.js.map +1 -1
  33. package/dist/command-validity.d.ts +16 -0
  34. package/dist/command-validity.d.ts.map +1 -1
  35. package/dist/command-validity.js +387 -134
  36. package/dist/command-validity.js.map +1 -1
  37. package/dist/conflicts.d.ts.map +1 -1
  38. package/dist/conflicts.js +4 -44
  39. package/dist/conflicts.js.map +1 -1
  40. package/dist/context-analysis.d.ts.map +1 -1
  41. package/dist/context-analysis.js +13 -2
  42. package/dist/context-analysis.js.map +1 -1
  43. package/dist/context-bloat.d.ts +20 -1
  44. package/dist/context-bloat.d.ts.map +1 -1
  45. package/dist/context-bloat.js +99 -15
  46. package/dist/context-bloat.js.map +1 -1
  47. package/dist/context-optimizer.d.ts.map +1 -1
  48. package/dist/context-optimizer.js +18 -54
  49. package/dist/context-optimizer.js.map +1 -1
  50. package/dist/copilot-instructions-detector.d.ts +24 -0
  51. package/dist/copilot-instructions-detector.d.ts.map +1 -0
  52. package/dist/copilot-instructions-detector.js +145 -0
  53. package/dist/copilot-instructions-detector.js.map +1 -0
  54. package/dist/cursor-rules-detector.d.ts +17 -0
  55. package/dist/cursor-rules-detector.d.ts.map +1 -0
  56. package/dist/cursor-rules-detector.js +110 -0
  57. package/dist/cursor-rules-detector.js.map +1 -0
  58. package/dist/custom-rules.d.ts +52 -0
  59. package/dist/custom-rules.d.ts.map +1 -0
  60. package/dist/custom-rules.js +303 -0
  61. package/dist/custom-rules.js.map +1 -0
  62. package/dist/dead-references.d.ts +8 -2
  63. package/dist/dead-references.d.ts.map +1 -1
  64. package/dist/dead-references.js +315 -68
  65. package/dist/dead-references.js.map +1 -1
  66. package/dist/dependency-staleness.d.ts +35 -0
  67. package/dist/dependency-staleness.d.ts.map +1 -0
  68. package/dist/dependency-staleness.js +1001 -0
  69. package/dist/dependency-staleness.js.map +1 -0
  70. package/dist/detectors.d.ts +1 -3
  71. package/dist/detectors.d.ts.map +1 -1
  72. package/dist/detectors.js +74 -56
  73. package/dist/detectors.js.map +1 -1
  74. package/dist/duplicates.d.ts.map +1 -1
  75. package/dist/duplicates.js +15 -9
  76. package/dist/duplicates.js.map +1 -1
  77. package/dist/evidence.d.ts +39 -0
  78. package/dist/evidence.d.ts.map +1 -0
  79. package/dist/evidence.js +78 -0
  80. package/dist/evidence.js.map +1 -0
  81. package/dist/finding-id.d.ts +21 -0
  82. package/dist/finding-id.d.ts.map +1 -0
  83. package/dist/finding-id.js +31 -0
  84. package/dist/finding-id.js.map +1 -0
  85. package/dist/fix-engine.d.ts +11 -0
  86. package/dist/fix-engine.d.ts.map +1 -1
  87. package/dist/fix-engine.js +88 -71
  88. package/dist/fix-engine.js.map +1 -1
  89. package/dist/frameworks/dotnet.js +2 -2
  90. package/dist/frameworks/dotnet.js.map +1 -1
  91. package/dist/frameworks/python.d.ts.map +1 -1
  92. package/dist/frameworks/python.js +5 -2
  93. package/dist/frameworks/python.js.map +1 -1
  94. package/dist/frameworks/rust.d.ts.map +1 -1
  95. package/dist/frameworks/rust.js +2 -1
  96. package/dist/frameworks/rust.js.map +1 -1
  97. package/dist/git-symlinks.d.ts +30 -0
  98. package/dist/git-symlinks.d.ts.map +1 -0
  99. package/dist/git-symlinks.js +161 -0
  100. package/dist/git-symlinks.js.map +1 -0
  101. package/dist/gitignore.d.ts +22 -0
  102. package/dist/gitignore.d.ts.map +1 -0
  103. package/dist/gitignore.js +157 -0
  104. package/dist/gitignore.js.map +1 -0
  105. package/dist/health-score.d.ts.map +1 -1
  106. package/dist/health-score.js +35 -5
  107. package/dist/health-score.js.map +1 -1
  108. package/dist/hooks-settings-detector.d.ts +17 -0
  109. package/dist/hooks-settings-detector.d.ts.map +1 -0
  110. package/dist/hooks-settings-detector.js +228 -0
  111. package/dist/hooks-settings-detector.js.map +1 -0
  112. package/dist/index.d.ts +29 -8
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +21 -6
  115. package/dist/index.js.map +1 -1
  116. package/dist/makefile.d.ts +37 -0
  117. package/dist/makefile.d.ts.map +1 -0
  118. package/dist/makefile.js +156 -0
  119. package/dist/makefile.js.map +1 -0
  120. package/dist/manifest-consistency.d.ts +6 -0
  121. package/dist/manifest-consistency.d.ts.map +1 -1
  122. package/dist/manifest-consistency.js +75 -10
  123. package/dist/manifest-consistency.js.map +1 -1
  124. package/dist/markdown-fences.d.ts +112 -0
  125. package/dist/markdown-fences.d.ts.map +1 -0
  126. package/dist/markdown-fences.js +174 -0
  127. package/dist/markdown-fences.js.map +1 -0
  128. package/dist/mcp-config-detector.d.ts +20 -0
  129. package/dist/mcp-config-detector.d.ts.map +1 -0
  130. package/dist/mcp-config-detector.js +237 -0
  131. package/dist/mcp-config-detector.js.map +1 -0
  132. package/dist/missing-context.d.ts.map +1 -1
  133. package/dist/missing-context.js +2 -52
  134. package/dist/missing-context.js.map +1 -1
  135. package/dist/model-budgets.d.ts +69 -0
  136. package/dist/model-budgets.d.ts.map +1 -0
  137. package/dist/model-budgets.js +110 -0
  138. package/dist/model-budgets.js.map +1 -0
  139. package/dist/negative-instructions.d.ts +26 -0
  140. package/dist/negative-instructions.d.ts.map +1 -0
  141. package/dist/negative-instructions.js +169 -0
  142. package/dist/negative-instructions.js.map +1 -0
  143. package/dist/path-containment.d.ts +41 -0
  144. package/dist/path-containment.d.ts.map +1 -0
  145. package/dist/path-containment.js +123 -0
  146. package/dist/path-containment.js.map +1 -0
  147. package/dist/project-type.d.ts +12 -2
  148. package/dist/project-type.d.ts.map +1 -1
  149. package/dist/project-type.js +25 -12
  150. package/dist/project-type.js.map +1 -1
  151. package/dist/prompt-cache.d.ts.map +1 -1
  152. package/dist/prompt-cache.js +33 -24
  153. package/dist/prompt-cache.js.map +1 -1
  154. package/dist/promptci-gitignore.d.ts +34 -0
  155. package/dist/promptci-gitignore.d.ts.map +1 -0
  156. package/dist/promptci-gitignore.js +42 -0
  157. package/dist/promptci-gitignore.js.map +1 -0
  158. package/dist/repo-context.d.ts +80 -0
  159. package/dist/repo-context.d.ts.map +1 -1
  160. package/dist/repo-context.js +170 -16
  161. package/dist/repo-context.js.map +1 -1
  162. package/dist/report.d.ts +8 -0
  163. package/dist/report.d.ts.map +1 -1
  164. package/dist/report.js +163 -63
  165. package/dist/report.js.map +1 -1
  166. package/dist/scan.d.ts.map +1 -1
  167. package/dist/scan.js +47 -4
  168. package/dist/scan.js.map +1 -1
  169. package/dist/scanner.d.ts +61 -1
  170. package/dist/scanner.d.ts.map +1 -1
  171. package/dist/scanner.js +367 -70
  172. package/dist/scanner.js.map +1 -1
  173. package/dist/security-pack.d.ts +20 -0
  174. package/dist/security-pack.d.ts.map +1 -1
  175. package/dist/security-pack.js +33 -14
  176. package/dist/security-pack.js.map +1 -1
  177. package/dist/skill-supply-chain.d.ts +132 -0
  178. package/dist/skill-supply-chain.d.ts.map +1 -0
  179. package/dist/skill-supply-chain.js +2954 -0
  180. package/dist/skill-supply-chain.js.map +1 -0
  181. package/dist/skills-detector.d.ts +23 -0
  182. package/dist/skills-detector.d.ts.map +1 -0
  183. package/dist/skills-detector.js +279 -0
  184. package/dist/skills-detector.js.map +1 -0
  185. package/dist/stale-instructions.d.ts +4 -1
  186. package/dist/stale-instructions.d.ts.map +1 -1
  187. package/dist/stale-instructions.js +53 -55
  188. package/dist/stale-instructions.js.map +1 -1
  189. package/dist/subagents-detector.d.ts +19 -0
  190. package/dist/subagents-detector.d.ts.map +1 -0
  191. package/dist/subagents-detector.js +155 -0
  192. package/dist/subagents-detector.js.map +1 -0
  193. package/dist/suppression.d.ts +2 -0
  194. package/dist/suppression.d.ts.map +1 -1
  195. package/dist/suppression.js +16 -47
  196. package/dist/suppression.js.map +1 -1
  197. package/dist/types.d.ts +62 -4
  198. package/dist/types.d.ts.map +1 -1
  199. package/dist/types.js +47 -1
  200. package/dist/types.js.map +1 -1
  201. package/dist/vague-guidance.d.ts +15 -2
  202. package/dist/vague-guidance.d.ts.map +1 -1
  203. package/dist/vague-guidance.js +44 -41
  204. package/dist/vague-guidance.js.map +1 -1
  205. package/dist/windsurf-detector.d.ts +22 -0
  206. package/dist/windsurf-detector.d.ts.map +1 -0
  207. package/dist/windsurf-detector.js +96 -0
  208. package/dist/windsurf-detector.js.map +1 -0
  209. package/dist/within-section-dedup.d.ts +16 -0
  210. package/dist/within-section-dedup.d.ts.map +1 -0
  211. package/dist/within-section-dedup.js +148 -0
  212. package/dist/within-section-dedup.js.map +1 -0
  213. package/dist/workspace-manifests.d.ts +80 -0
  214. package/dist/workspace-manifests.d.ts.map +1 -0
  215. package/dist/workspace-manifests.js +333 -0
  216. package/dist/workspace-manifests.js.map +1 -0
  217. package/package.json +11 -8
  218. package/dist/cheap-model-routing.d.ts +0 -4
  219. package/dist/cheap-model-routing.d.ts.map +0 -1
  220. package/dist/cheap-model-routing.js +0 -43
  221. package/dist/cheap-model-routing.js.map +0 -1
  222. package/dist/cli-output-filter.d.ts +0 -16
  223. package/dist/cli-output-filter.d.ts.map +0 -1
  224. package/dist/cli-output-filter.js +0 -88
  225. package/dist/cli-output-filter.js.map +0 -1
  226. package/dist/context-cost.d.ts +0 -4
  227. package/dist/context-cost.d.ts.map +0 -1
  228. package/dist/context-cost.js +0 -70
  229. package/dist/context-cost.js.map +0 -1
  230. package/dist/context-recommender.d.ts +0 -3
  231. package/dist/context-recommender.d.ts.map +0 -1
  232. package/dist/context-recommender.js +0 -329
  233. package/dist/context-recommender.js.map +0 -1
  234. package/dist/llm.d.ts +0 -6
  235. package/dist/llm.d.ts.map +0 -1
  236. package/dist/llm.js +0 -67
  237. package/dist/llm.js.map +0 -1
  238. package/dist/mcp-detector.d.ts +0 -4
  239. package/dist/mcp-detector.d.ts.map +0 -1
  240. package/dist/mcp-detector.js +0 -131
  241. package/dist/mcp-detector.js.map +0 -1
  242. package/dist/native-tool-preference.d.ts +0 -20
  243. package/dist/native-tool-preference.d.ts.map +0 -1
  244. package/dist/native-tool-preference.js +0 -94
  245. package/dist/native-tool-preference.js.map +0 -1
  246. package/dist/output-verbosity.d.ts +0 -3
  247. package/dist/output-verbosity.d.ts.map +0 -1
  248. package/dist/output-verbosity.js +0 -83
  249. package/dist/output-verbosity.js.map +0 -1
  250. package/dist/product-boundary.d.ts +0 -11
  251. package/dist/product-boundary.d.ts.map +0 -1
  252. package/dist/product-boundary.js +0 -301
  253. package/dist/product-boundary.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"stale-instructions.d.ts","sourceRoot":"","sources":["../src/stale-instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAsB,aAAa,EAAE,MAAM,YAAY,CAAC;AAqMrF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAwFjF"}
1
+ {"version":3,"file":"stale-instructions.d.ts","sourceRoot":"","sources":["../src/stale-instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAsB,aAAa,EAAE,MAAM,YAAY,CAAC;AAoBrF,oEAAoE;AACpE,wBAAgB,WAAW,CAAC,GAAG,GAAE,IAAiB,GAAG,MAAM,CAE1D;AAqKD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAgGjF"}
@@ -2,7 +2,8 @@
2
2
  * Stale-instruction detector for PromptCI.
3
3
  *
4
4
  * Flags sections that likely reference outdated content:
5
- * - Years 2019–2023 that appear outside code blocks
5
+ * - Recent-but-past years that appear outside code blocks (rolling window,
6
+ * see STALE_YEAR_WINDOW below)
6
7
  * - Cleanup keywords: "TODO remove", "remove later", "temporary fix", "workaround"
7
8
  * - "deprecated" near a version number or tool name
8
9
  * - Known old framework versions (React 16, Next.js 9, Unity 2019, etc.)
@@ -10,14 +11,47 @@
10
11
  * Findings are heuristic — wording is intentionally cautious.
11
12
  */
12
13
  import * as crypto from 'node:crypto';
14
+ import { stripCodeBlocks } from './markdown-fences.js';
15
+ import { snippet } from './evidence.js';
16
+ import { sectionIdPath } from './finding-id.js';
13
17
  // ─── Pattern definitions ──────────────────────────────────────────────────────
18
+ /**
19
+ * BUG-14: the stale-year window is derived from the current date rather than
20
+ * hardcoded. The previous literal alternation (2019…2025) was correct only for
21
+ * calendar 2026 and silently stopped flagging last year's dates every Jan 1.
22
+ *
23
+ * How far back the window reaches. In year Y the detector flags
24
+ * Y-STALE_YEAR_WINDOW … Y-1 inclusive; the current year is never stale, and
25
+ * years older than the window are assumed to be deliberate historical
26
+ * references (founding dates, cited papers, license years) rather than
27
+ * instructions that rotted.
28
+ */
29
+ const STALE_YEAR_WINDOW = 7;
30
+ /** Seam for tests; production callers always get the real clock. */
31
+ export function currentYear(now = new Date()) {
32
+ return now.getFullYear();
33
+ }
34
+ let cachedYear = 0;
35
+ let cachedYearRe = null;
14
36
  /**
15
37
  * Years likely stale in an AI instruction context.
16
- * 2023 is now included since the current year is 2026.
17
- * Must not be immediately preceded by "/" or "-" (avoids ISO dates like 2022-01-01
18
- * or paths like /2022/report) — those are not year references.
38
+ * Must not be immediately preceded or followed by "/" or "-" (avoids ISO dates
39
+ * like 2022-01-01 or paths like /2022/report) — those are not year references.
40
+ *
41
+ * Rebuilt only when the calendar year changes, so a long-running process that
42
+ * crosses midnight on New Year's Eve picks up the new window.
19
43
  */
20
- const STALE_YEAR_RE = /(?<![/-])\b(2019|2020|2021|2022|2023|2024|2025)\b(?![/-])/g;
44
+ function staleYearPattern() {
45
+ const year = currentYear();
46
+ if (cachedYearRe && cachedYear === year)
47
+ return cachedYearRe;
48
+ const years = [];
49
+ for (let y = year - STALE_YEAR_WINDOW; y <= year - 1; y++)
50
+ years.push(String(y));
51
+ cachedYear = year;
52
+ cachedYearRe = new RegExp(`(?<![/-])\\b(${years.join('|')})\\b(?![/-])`, 'g');
53
+ return cachedYearRe;
54
+ }
21
55
  /**
22
56
  * BUG-A1: Section headings that indicate historical records rather than active
23
57
  * instructions. Old year references in changelogs and release notes are expected
@@ -81,14 +115,10 @@ const OLD_VERSION_PATTERNS = [
81
115
  ];
82
116
  // ─── Helpers ─────────────────────────────────────────────────────────────────
83
117
  function issueId(section, tag) {
84
- const key = `${section.filePath}:${section.startLine}:${tag}`;
118
+ const key = `${sectionIdPath(section)}:${section.startLine}:${tag}`;
85
119
  const hash = crypto.createHash('sha1').update(key).digest('hex').slice(0, 12);
86
120
  return `stale-${hash}`;
87
121
  }
88
- function snippet(text, maxLen = 120) {
89
- const clean = text.replace(/\s+/g, ' ').trim();
90
- return clean.length <= maxLen ? clean : `${clean.slice(0, maxLen)}…`;
91
- }
92
122
  function collectMatches(text, re) {
93
123
  const matches = [];
94
124
  let m;
@@ -117,7 +147,9 @@ function collectOldHtmlTodoMatches(text) {
117
147
  const cloned = new RegExp(HTML_COMMENT_DATED_TODO_RE.source, HTML_COMMENT_DATED_TODO_RE.flags);
118
148
  while ((m = cloned.exec(text)) !== null) {
119
149
  const year = Number(m[2]);
120
- if (year <= 2025) {
150
+ // BUG-14: was `year <= 2025`. Anything before the current year is a dated
151
+ // marker that has already come due; the current year has not.
152
+ if (year < currentYear()) {
121
153
  matches.push(m[0]);
122
154
  }
123
155
  }
@@ -142,47 +174,6 @@ function isVersionInNegationContext(text, index) {
142
174
  const preceding = text.slice(Math.max(0, index - 80), index).toLowerCase();
143
175
  return /\b(?:do\s+not|don['']?t|avoid|never|no\s+longer|drop(?:ped|ping)?|remov(?:ed?|ing)|deprecat(?:ed?|ing)|stop(?:ped|ping)?\s+(?:using|support(?:ing)?))\b(?:(?!\n[ \t]*\n)[^.!?])*$/.test(preceding);
144
176
  }
145
- /**
146
- * Strip fenced code blocks from text before scanning for stale years.
147
- * Code blocks often contain version pins or changelog entries that are
148
- * expected to reference specific years and should not trigger the detector.
149
- *
150
- * ST3: tracks fence character + length (matching scanner.ts's S1 fix and
151
- * vague-guidance.ts's V4 fix) instead of a `` ```...``` `` regex, so ~~~
152
- * fences are also stripped and an unclosed fence correctly swallows the
153
- * remainder of the text (rather than leaving it unstripped, as
154
- * `/```[\s\S]*?```/` did when no closing fence existed).
155
- */
156
- function stripCodeBlocks(text, stripInlineCode = true) {
157
- const lines = text.split('\n');
158
- const kept = [];
159
- let inBlock = false;
160
- let fenceChar = null;
161
- let fenceLen = 0;
162
- for (const line of lines) {
163
- if (!inBlock) {
164
- const openMatch = /^ {0,3}([`~]{3,})/.exec(line);
165
- if (openMatch) {
166
- inBlock = true;
167
- fenceChar = openMatch[1][0] ?? null;
168
- fenceLen = openMatch[1].length;
169
- continue;
170
- }
171
- kept.push(line);
172
- }
173
- else {
174
- const closeMatch = /^ {0,3}([`~]{3,})\s*$/.exec(line);
175
- if (closeMatch && closeMatch[1][0] === fenceChar && closeMatch[1].length >= fenceLen) {
176
- inBlock = false;
177
- fenceChar = null;
178
- fenceLen = 0;
179
- }
180
- // else: still inside the fence — drop the line
181
- }
182
- }
183
- const noFences = kept.join('\n');
184
- return stripInlineCode ? noFences.replace(/`[^`\n]+`/g, '') : noFences;
185
- }
186
177
  // ─── Main detector ────────────────────────────────────────────────────────────
187
178
  /**
188
179
  * Detect sections that may contain stale or outdated instructions.
@@ -200,13 +191,13 @@ export function detectStaleInstructions(files) {
200
191
  if (section.heading && HISTORY_SECTION_RE.test(section.heading))
201
192
  continue;
202
193
  const text = section.text;
203
- const textNoCode = stripCodeBlocks(text);
204
- const textNoFencedCode = stripCodeBlocks(text, false);
194
+ const textNoCode = stripCodeBlocks(text, { stripInlineCode: true });
195
+ const textNoFencedCode = stripCodeBlocks(text);
205
196
  const evidence = [];
206
197
  let confidence = 0;
207
198
  const sectionKey = `${file.path}:${section.startLine}`;
208
199
  // 1. Stale years — only in prose, not inside code blocks (confidence 0.6)
209
- const yearMatches = collectMatches(textNoCode, STALE_YEAR_RE);
200
+ const yearMatches = collectMatches(textNoCode, staleYearPattern());
210
201
  if (yearMatches.length > 0) {
211
202
  evidence.push(`Year reference(s) that may be outdated: ${[...new Set(yearMatches)].join(', ')}`);
212
203
  confidence = Math.max(confidence, 0.6);
@@ -260,6 +251,13 @@ export function detectStaleInstructions(files) {
260
251
  evidence: [`Section: "${snippet(text, 100)}"`, ...evidence],
261
252
  recommendation: 'Review this section for accuracy. Update any outdated version numbers, tool references, ' +
262
253
  'or remove temporary notes that are no longer relevant.',
254
+ // BUG-14: advisory only. This finding is deliberately NOT auto-fixable —
255
+ // a year in an instruction file may be a copyright line, a release date,
256
+ // a version pin, or a prose reference, and rewriting it to the current
257
+ // year corrupts every one of those.
258
+ fixRecipe: 'Edit each flagged reference by hand: replace outdated version pins and tool names with ' +
259
+ 'current ones, and delete temporary notes that no longer apply. Leave copyright lines, ' +
260
+ 'release dates, and historical references as they are.',
263
261
  confidence,
264
262
  });
265
263
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stale-instructions.js","sourceRoot":"","sources":["../src/stale-instructions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stale-instructions.js","sourceRoot":"","sources":["../src/stale-instructions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Subagents Detector (issue #23)
3
+ *
4
+ * Audits subagent definitions (`.claude/agents/*.md`) against known Claude Code
5
+ * conventions and against each other:
6
+ *
7
+ * - Frontmatter validity: present, closed, required `name`/`description`.
8
+ * - Unknown `model`: not a recognized Claude alias or `claude-*` id.
9
+ * - Unknown `tools`: names that are not built-in tools or `mcp__*` tools
10
+ * (a likely typo). Reported at low confidence — the tool set evolves.
11
+ * - Duplicated system prompts: two agents whose bodies are near-identical,
12
+ * which usually means a copy-paste that should be one agent.
13
+ *
14
+ * Deterministic and offline; findings are cautiously worded.
15
+ */
16
+ import type { RepoContext } from './repo-context.js';
17
+ import type { PromptCiIssue } from './types.js';
18
+ export declare function detectSubagents(context: RepoContext): PromptCiIssue[];
19
+ //# sourceMappingURL=subagents-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagents-detector.d.ts","sourceRoot":"","sources":["../src/subagents-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA8DhD,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CA0GrE"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Subagents Detector (issue #23)
3
+ *
4
+ * Audits subagent definitions (`.claude/agents/*.md`) against known Claude Code
5
+ * conventions and against each other:
6
+ *
7
+ * - Frontmatter validity: present, closed, required `name`/`description`.
8
+ * - Unknown `model`: not a recognized Claude alias or `claude-*` id.
9
+ * - Unknown `tools`: names that are not built-in tools or `mcp__*` tools
10
+ * (a likely typo). Reported at low confidence — the tool set evolves.
11
+ * - Duplicated system prompts: two agents whose bodies are near-identical,
12
+ * which usually means a copy-paste that should be one agent.
13
+ *
14
+ * Deterministic and offline; findings are cautiously worded.
15
+ */
16
+ import * as path from 'node:path';
17
+ import { parseFrontmatter, readTextWithinRoot, shortHash, asStringList, toPosix, withScannerPaths, aiConfigIssue as base, frontmatterStructureIssues, } from './ai-config.js';
18
+ const SURFACE = {
19
+ idPrefix: 'agent',
20
+ noun: 'Subagent',
21
+ why: 'A subagent needs `name` and `description` frontmatter to be registered.',
22
+ recommendation: 'Add frontmatter with `name` and `description` at the top of the agent file.',
23
+ };
24
+ /** Recognized model aliases accepted in agent frontmatter. Full `claude-*` ids also pass. */
25
+ const KNOWN_MODEL_ALIASES = new Set(['sonnet', 'opus', 'haiku', 'inherit', 'default', 'opusplan']);
26
+ /** Built-in Claude Code tool names an agent may grant. `mcp__*` tools also pass. */
27
+ const KNOWN_TOOLS = new Set([
28
+ 'Task', 'Bash', 'BashOutput', 'KillBash', 'KillShell', 'Glob', 'Grep', 'LS',
29
+ 'Read', 'Edit', 'MultiEdit', 'Write', 'NotebookRead', 'NotebookEdit',
30
+ 'WebFetch', 'WebSearch', 'TodoWrite', 'SlashCommand', 'ExitPlanMode', 'Agent',
31
+ ]);
32
+ /** Jaccard similarity at or above this over normalized body lines flags a near-duplicate. */
33
+ const DUP_SIMILARITY = 0.8;
34
+ /** Ignore trivially-short agent bodies when comparing for duplication. */
35
+ const MIN_BODY_LINES = 5;
36
+ function id(kind, key) {
37
+ return `ai-config-agent-${kind}-${shortHash(key)}`;
38
+ }
39
+ function normalizeBodyLines(body) {
40
+ const set = new Set();
41
+ for (const raw of body.split(/\r?\n/)) {
42
+ const norm = raw.trim().toLowerCase().replace(/\s+/g, ' ');
43
+ if (norm.length >= 8)
44
+ set.add(norm);
45
+ }
46
+ return set;
47
+ }
48
+ function jaccard(a, b) {
49
+ if (a.size === 0 || b.size === 0)
50
+ return 0;
51
+ let intersection = 0;
52
+ const [small, large] = a.size <= b.size ? [a, b] : [b, a];
53
+ for (const item of small)
54
+ if (large.has(item))
55
+ intersection++;
56
+ const union = a.size + b.size - intersection;
57
+ return union === 0 ? 0 : intersection / union;
58
+ }
59
+ export function detectSubagents(context) {
60
+ const issues = [];
61
+ const parsed = [];
62
+ for (const filePath of context.aiConfig.agents) {
63
+ const content = readTextWithinRoot(context.repoRoot, filePath);
64
+ if (content === undefined)
65
+ continue;
66
+ const fm = parseFrontmatter(content);
67
+ issues.push(...frontmatterStructureIssues(filePath, content, fm, SURFACE));
68
+ if (!fm.present)
69
+ continue;
70
+ const name = typeof fm.data.name === 'string' ? fm.data.name.trim() : undefined;
71
+ const description = typeof fm.data.description === 'string' ? fm.data.description.trim() : undefined;
72
+ if (!name) {
73
+ issues.push(base({
74
+ id: id('missing-name', filePath),
75
+ title: 'Subagent frontmatter is missing `name`',
76
+ summary: `${filePath} has no \`name\` field, so it cannot be invoked by name.`,
77
+ filePaths: [filePath],
78
+ locations: [{ filePath, startLine: 1, endLine: fm.fenceEndLine > 0 ? fm.fenceEndLine : 1 }],
79
+ evidence: [`Keys present: ${Object.keys(fm.data).join(', ') || '(none)'}`],
80
+ recommendation: 'Add a `name` field to the frontmatter.',
81
+ confidence: 0.85,
82
+ }));
83
+ }
84
+ if (!description) {
85
+ issues.push(base({
86
+ id: id('missing-description', filePath),
87
+ title: 'Subagent frontmatter is missing `description`',
88
+ summary: `${filePath} has no \`description\`. The description tells the orchestrator when to delegate to this agent.`,
89
+ filePaths: [filePath],
90
+ locations: [{ filePath, startLine: 1, endLine: fm.fenceEndLine > 0 ? fm.fenceEndLine : 1 }],
91
+ evidence: [`Keys present: ${Object.keys(fm.data).join(', ') || '(none)'}`],
92
+ recommendation: 'Add a `description` explaining what the agent is for and when to use it.',
93
+ confidence: 0.85,
94
+ }));
95
+ }
96
+ // Unknown model alias.
97
+ const model = typeof fm.data.model === 'string' ? fm.data.model.trim() : undefined;
98
+ if (model && !KNOWN_MODEL_ALIASES.has(model.toLowerCase()) && !/^claude-/i.test(model)) {
99
+ issues.push(base({
100
+ id: id('unknown-model', `${filePath}|${model}`),
101
+ title: 'Subagent references an unrecognized model',
102
+ summary: `${filePath}: \`model: ${model}\` is not a known alias (sonnet, opus, haiku, inherit) or a \`claude-*\` id.`,
103
+ filePaths: [filePath],
104
+ locations: [{ filePath, startLine: fm.keyLines.model ?? 1, endLine: fm.keyLines.model ?? 1 }],
105
+ evidence: [`model: ${model}`],
106
+ recommendation: 'Use a supported model alias or a full model id, or remove `model` to inherit the session model.',
107
+ confidence: 0.5,
108
+ }));
109
+ }
110
+ // Unknown tools (likely typos).
111
+ const tools = asStringList(fm.data.tools);
112
+ const unknownTools = tools.filter((t) => t !== '*' && !t.startsWith('mcp__') && !KNOWN_TOOLS.has(t));
113
+ if (unknownTools.length > 0) {
114
+ issues.push(base({
115
+ id: id('unknown-tools', `${filePath}|${unknownTools.join(',')}`),
116
+ severity: 'info',
117
+ title: 'Subagent grants tools that may not exist',
118
+ summary: `${filePath} lists ${unknownTools.length} tool name(s) that are not built-in tools or \`mcp__*\` tools: ${unknownTools.join(', ')}.`,
119
+ filePaths: [filePath],
120
+ locations: [{ filePath, startLine: fm.keyLines.tools ?? 1, endLine: fm.keyLines.tools ?? 1 }],
121
+ evidence: [`Unrecognized: ${unknownTools.join(', ')}`, `Declared tools: ${tools.join(', ')}`],
122
+ recommendation: 'Check the tool names against the built-in tool set (or your MCP server tool names) for typos.',
123
+ confidence: 0.4,
124
+ }));
125
+ }
126
+ const body = content.split(/\r?\n/).slice(Math.max(0, fm.bodyStartLine - 1)).join('\n');
127
+ const bodyLines = normalizeBodyLines(body);
128
+ parsed.push({ filePath, bodyLines });
129
+ }
130
+ // Duplicated system-prompt content across agents.
131
+ const comparable = parsed.filter((a) => a.bodyLines.size >= MIN_BODY_LINES);
132
+ for (let i = 0; i < comparable.length; i++) {
133
+ for (let j = i + 1; j < comparable.length; j++) {
134
+ const a = comparable[i];
135
+ const b = comparable[j];
136
+ const sim = jaccard(a.bodyLines, b.bodyLines);
137
+ if (sim >= DUP_SIMILARITY) {
138
+ const pair = [a.filePath, b.filePath].sort();
139
+ issues.push(base({
140
+ id: id('dup-prompt', pair.join('|')),
141
+ title: 'Two subagents share near-identical system prompts',
142
+ summary: `${toPosix(path.basename(pair[0]))} and ${toPosix(path.basename(pair[1]))} have ${Math.round(sim * 100)}% identical prompt bodies, which usually means a copy-paste that should be consolidated.`,
143
+ filePaths: pair,
144
+ locations: pair.map((p) => ({ filePath: p, startLine: 1, endLine: 1 })),
145
+ evidence: [`Body similarity: ${Math.round(sim * 100)}%`, `Agents: ${pair.join(', ')}`],
146
+ recommendation: 'Differentiate the agents\' instructions, or merge them into one agent if they do the same job.',
147
+ confidence: sim === 1 ? 0.8 : 0.55,
148
+ }));
149
+ }
150
+ }
151
+ }
152
+ // Scanner-form paths so inline suppressions can match (see withScannerPaths).
153
+ return withScannerPaths(context.repoRoot, issues);
154
+ }
155
+ //# sourceMappingURL=subagents-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagents-detector.js","sourceRoot":"","sources":["../src/subagents-detector.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,8 @@
22
22
  import type { IssueCategory, InstructionFile, PromptCiIssue } from './types.js';
23
23
  export type SuppressionAnnotation = {
24
24
  filePath: string;
25
+ /** Repo-relative `filePath` (forward slashes), when the file came from the scanner. */
26
+ relativePath?: string;
25
27
  category: IssueCategory | 'all';
26
28
  reason: string;
27
29
  startLine: number;
@@ -1 +1 @@
1
- {"version":3,"file":"suppression.d.ts","sourceRoot":"","sources":["../src/suppression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAsB,aAAa,EAAE,MAAM,YAAY,CAAC;AA0BpG,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,GAAG,KAAK,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,KAAK,EAAE,OAAO,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAuQF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,qBAAqB,EAAE,CAEnF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,qBAAqB,EAAE,GACnC,aAAa,EAAE,CAiBjB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EAAE,EACvB,WAAW,EAAE,qBAAqB,EAAE,GACnC;IAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAAC,UAAU,EAAE,aAAa,EAAE,CAAA;CAAE,CA4C1D"}
1
+ {"version":3,"file":"suppression.d.ts","sourceRoot":"","sources":["../src/suppression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAsB,aAAa,EAAE,MAAM,YAAY,CAAC;AA6BpG,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,aAAa,GAAG,KAAK,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,KAAK,EAAE,OAAO,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAoOF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,qBAAqB,EAAE,CAEnF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,qBAAqB,EAAE,GACnC,aAAa,EAAE,CAiBjB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EAAE,EACvB,WAAW,EAAE,qBAAqB,EAAE,GACnC;IAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAAC,UAAU,EAAE,aAAa,EAAE,CAAA;CAAE,CA4C1D"}
@@ -20,6 +20,7 @@
20
20
  * - An unpaired `promptci-ignore-start` (no matching end) → warning issue.
21
21
  */
22
22
  import * as crypto from 'node:crypto';
23
+ import { blankCodeBlockLines } from './markdown-fences.js';
23
24
  // ── Constants ─────────────────────────────────────────────────────────────────
24
25
  /** All valid IssueCategory values plus the catch-all 'all' token. */
25
26
  const VALID_ISSUE_CATEGORIES = [
@@ -32,7 +33,9 @@ const VALID_ISSUE_CATEGORIES = [
32
33
  'structure',
33
34
  'command_validity',
34
35
  'agent_practices',
36
+ 'ai_config',
35
37
  'security',
38
+ 'custom',
36
39
  ];
37
40
  const VALID_SUPPRESSION_CATEGORIES = new Set([
38
41
  ...VALID_ISSUE_CATEGORIES,
@@ -90,7 +93,13 @@ function getSectionEndLine(annotationLine, annotationEndLine, sections, fileLine
90
93
  }
91
94
  /** Extract the `reason:` value from the comment body, or null if absent. */
92
95
  function extractReason(body) {
93
- const m = /reason:\s*(.+?)(?:\n|$)/i.exec(body);
96
+ // The terminator must accept a CRLF (`\r\n`) line ending, not just `\n`.
97
+ // `.` never matches a line terminator (including `\r`), so on a CRLF
98
+ // checkout `/reason:\s*(.+?)(?:\n|$)/` finds no `\n` immediately after the
99
+ // captured reason (a `\r` sits between) and returns null — invalidating
100
+ // every otherwise-correct annotation. `\r?\n` closes on both endings; the
101
+ // trailing `.trim()` also strips any stray `\r` from the capture.
102
+ const m = /reason:\s*(.+?)(?:\r?\n|$)/i.exec(body);
94
103
  return m ? m[1].trim() : null;
95
104
  }
96
105
  function validate(rawCategory, reason) {
@@ -115,49 +124,6 @@ function annotationIssueId(filePath, startLine, tag) {
115
124
  const hash = crypto.createHash('sha1').update(key).digest('hex').slice(0, 12);
116
125
  return `suppression-invalid-${hash}`;
117
126
  }
118
- /**
119
- * SU3: blank out fenced code block lines (``` or ~~~, matching fence
120
- * char/length per CommonMark — the same tracking used in scanner.ts,
121
- * vague-guidance.ts, stale-instructions.ts, conflicts.ts, and
122
- * command-validity.ts) so a documented EXAMPLE of the annotation syntax
123
- * doesn't get parsed as a real suppression. The old approach only stripped
124
- * ` ``` ` fences via a single regex — a ~~~ fence containing an annotation
125
- * example was scanned as prose and treated as a REAL suppression.
126
- *
127
- * Replaces each fenced line with an empty string (not removing it) so the
128
- * total line count is unchanged — `charToLine` offsets computed against this
129
- * output still map to the correct line numbers in the ORIGINAL file.
130
- */
131
- function stripFencedBlocksPreservingLines(content) {
132
- const lines = content.split('\n');
133
- const kept = [];
134
- let inBlock = false;
135
- let fenceChar = null;
136
- let fenceLen = 0;
137
- for (const line of lines) {
138
- if (!inBlock) {
139
- const openMatch = /^ {0,3}([`~]{3,})/.exec(line);
140
- if (openMatch) {
141
- inBlock = true;
142
- fenceChar = openMatch[1][0] ?? null;
143
- fenceLen = openMatch[1].length;
144
- kept.push('');
145
- continue;
146
- }
147
- kept.push(line);
148
- }
149
- else {
150
- const closeMatch = /^ {0,3}([`~]{3,})\s*$/.exec(line);
151
- if (closeMatch && closeMatch[1][0] === fenceChar && closeMatch[1].length >= fenceLen) {
152
- inBlock = false;
153
- fenceChar = null;
154
- fenceLen = 0;
155
- }
156
- kept.push('');
157
- }
158
- }
159
- return kept.join('\n');
160
- }
161
127
  // ── Main parser ───────────────────────────────────────────────────────────────
162
128
  function parseFileSuppressions(file) {
163
129
  const { content, path: filePath, sections, lineCount } = file;
@@ -165,7 +131,7 @@ function parseFileSuppressions(file) {
165
131
  // Strip fenced code blocks before parsing so examples of the annotation
166
132
  // syntax (e.g. in README.md) don't get interpreted as real suppressions.
167
133
  // Preserve line count so offsets still map to the original file's lines.
168
- const contentForParsing = stripFencedBlocksPreservingLines(content);
134
+ const contentForParsing = blankCodeBlockLines(content);
169
135
  // ── Single annotations ────────────────────────────────────────────────────
170
136
  const singleRe = new RegExp(SINGLE_RE.source, SINGLE_RE.flags);
171
137
  let m;
@@ -243,7 +209,10 @@ function parseFileSuppressions(file) {
243
209
  }
244
210
  if (openStart)
245
211
  pushUnpairedStart(openStart);
246
- return annotations;
212
+ // Carried only for the invalid-annotation finding id (pcic-whm): matching
213
+ // against issues still uses the absolute `filePath`.
214
+ const { relativePath } = file;
215
+ return relativePath === undefined ? annotations : annotations.map((a) => ({ ...a, relativePath }));
247
216
  }
248
217
  // ── Public API ────────────────────────────────────────────────────────────────
249
218
  /**
@@ -263,7 +232,7 @@ export function buildValidationIssues(annotations) {
263
232
  return annotations
264
233
  .filter((ann) => !ann.valid)
265
234
  .map((ann) => ({
266
- id: annotationIssueId(ann.filePath, ann.startLine, ann.validationMessage ?? ''),
235
+ id: annotationIssueId(ann.relativePath ?? ann.filePath, ann.startLine, ann.validationMessage ?? ''),
267
236
  severity: 'warning',
268
237
  category: 'structure',
269
238
  title: 'Invalid promptci-ignore annotation',
@@ -1 +1 @@
1
- {"version":3,"file":"suppression.js","sourceRoot":"","sources":["../src/suppression.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"suppression.js","sourceRoot":"","sources":["../src/suppression.ts"],"names":[],"mappings":"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"}