@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":"context-bloat.js","sourceRoot":"","sources":["../src/context-bloat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-bloat.js","sourceRoot":"","sources":["../src/context-bloat.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"context-optimizer.d.ts","sourceRoot":"","sources":["../src/context-optimizer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAsClD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuB5E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAK1D;AAkED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,eAAe,EAAE,EACxB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAyIzB"}
1
+ {"version":3,"file":"context-optimizer.d.ts","sourceRoot":"","sources":["../src/context-optimizer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AAEtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA0ClD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuB5E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAK1D;AAUD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,eAAe,EAAE,EACxB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CA8IzB"}
@@ -1,17 +1,23 @@
1
1
  import * as path from 'node:path';
2
2
  import { existsSync } from 'node:fs';
3
+ import { parseSections } from './scanner.js';
4
+ import { INSTRUCTION_FILE_TYPES } from './types.js';
3
5
  const DATE_PATTERNS = [
4
6
  /\b(?:last\s+updated|last\s+modified|updated\s+at|modified\s+at|date)\b\s*:\s*\b\d{4}-\d{2}-\d{2}\b/i,
5
7
  /\b\d{4}-\d{2}-\d{2}t\d{2}:\d{2}:\d{2}\b/i,
6
8
  /\b(?:january|february|march|april|may|june|july|august|september|october|november|december)\s+\d{1,2}(?:st|nd|rd|th)?,\s+\d{4}\b/i,
7
9
  ];
10
+ // These must match *pasted scan output*, never prose that merely mentions
11
+ // PromptCI. `/promptci\s+report/i`, `/latest\s+scan\s+results/i` and
12
+ // `/scan\s+history/i` used to be in this list, so any repo documenting PromptCI
13
+ // — this one's own README included — had those sections torn out into a
14
+ // generated docs file. Every surviving pattern requires a concrete artifact:
15
+ // a number the scanner emitted, or the exact title/footer of a generated report.
8
16
  const SCAN_REPORT_PATTERNS = [
9
17
  /health\s+score\s*:\s*\d+/i,
10
- /files\s+scanned\s*:\s*\d+/i,
11
- /promptci\s+report/i,
12
- /\bgenerated\s+by\s+promptci\b/i,
13
- /latest\s+scan\s+results/i,
14
- /scan\s+history/i,
18
+ /files\s+scanned\s*:\s*\**\s*\d+/i,
19
+ /^#{1,6}\s*promptci\s+health\s+report\s*$/im,
20
+ /\bgenerated\s+by\s+\[?promptci\b/i,
15
21
  ];
16
22
  const BRANCH_TASK_PATTERNS = [
17
23
  /current\s+branch\s*:\s*\S+/i,
@@ -62,53 +68,6 @@ function slugify(text) {
62
68
  .replace(/[\s_]+/g, '-')
63
69
  .replace(/^-+|-+$/g, '');
64
70
  }
65
- function parseSections(content, filePath) {
66
- const lines = content.replace(/\r\n/g, '\n').split('\n');
67
- const sections = [];
68
- let currentHeading = undefined;
69
- let currentStartLine = 1;
70
- let currentLines = [];
71
- const flush = (endLine) => {
72
- const text = currentLines.join('\n');
73
- const id = currentHeading !== undefined ? slugify(currentHeading) : `${filePath}:0`;
74
- sections.push({
75
- id,
76
- filePath,
77
- heading: currentHeading,
78
- startLine: currentStartLine,
79
- endLine,
80
- text,
81
- normalizedText: text.toLowerCase().trim(),
82
- });
83
- };
84
- let inCodeBlock = false;
85
- for (let i = 0; i < lines.length; i++) {
86
- const lineNum = i + 1;
87
- const line = lines[i] ?? '';
88
- // Track fenced code blocks so bash comments (`# text`) are not treated as headings.
89
- if (/^[`~]{3}/.test(line)) {
90
- inCodeBlock = !inCodeBlock;
91
- currentLines.push(line);
92
- continue;
93
- }
94
- const headingMatch = !inCodeBlock && /^(#{1,3})\s+(.+)/.exec(line);
95
- if (headingMatch) {
96
- if (currentLines.length > 0 || currentHeading !== undefined) {
97
- flush(lineNum - 1);
98
- }
99
- currentHeading = headingMatch[2].trim();
100
- currentStartLine = lineNum;
101
- currentLines = [line];
102
- }
103
- else {
104
- currentLines.push(line);
105
- }
106
- }
107
- if (currentLines.length > 0 || currentHeading !== undefined) {
108
- flush(lines.length);
109
- }
110
- return sections;
111
- }
112
71
  export async function optimizeContext(files, options) {
113
72
  const repoRoot = path.resolve(options.repoRoot);
114
73
  const characterLimit = options.characterLimit ?? 2000;
@@ -128,8 +87,13 @@ export async function optimizeContext(files, options) {
128
87
  const resolvedDocsDir = path.resolve(repoRoot, targetDocsDir);
129
88
  const generatedFilenames = new Set();
130
89
  const changes = [];
131
- // Focus only on instruction files
132
- const targetFiles = files.filter((f) => ['claude', 'agents', 'cursor', 'copilot', 'readme', 'prompt'].includes(f.fileType));
90
+ // Focus only on agent instruction files. 'readme' is deliberately absent:
91
+ // README.md is a human-facing document that happens to be scanned for
92
+ // context cost, and restructuring someone's README is never what they asked
93
+ // for when they ran `promptci context optimize`. Persona files (SOUL.md,
94
+ // USER.md, TOOLS.md) are excluded for the same reason: they are identity
95
+ // prose a user writes by hand, and `optimize --write` must not restructure them.
96
+ const targetFiles = files.filter((f) => INSTRUCTION_FILE_TYPES.has(f.fileType) && f.fileType !== 'persona');
133
97
  for (const file of targetFiles) {
134
98
  const originalContent = file.content;
135
99
  // Apply cleaners to the entire file content
@@ -1 +1 @@
1
- {"version":3,"file":"context-optimizer.js","sourceRoot":"","sources":["../src/context-optimizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-optimizer.js","sourceRoot":"","sources":["../src/context-optimizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Copilot Instructions Detector (issue #66)
3
+ *
4
+ * Audits GitHub Copilot per-file instruction files (`.github/instructions/**\/*.md`).
5
+ * These use `applyTo:` frontmatter globs to scope which files they apply to —
6
+ * analogous to Cursor's `.mdc` `globs`. This mirrors `detectCursorRules`:
7
+ *
8
+ * - Frontmatter validity: present, closed, structurally sound.
9
+ * - `applyTo:` absent — the file then applies to *every* Copilot request by
10
+ * default, which is often unintentional.
11
+ * - `applyTo:` globs that match zero files in the repo — a scope keyed to a
12
+ * path that no longer exists never fires.
13
+ * - `applyTo:` globs that match only ignored / build-output files — informational.
14
+ *
15
+ * The legacy single-file `.github/copilot-instructions.md` is always-on and has
16
+ * no `applyTo` support, so discovery (see AI_CONFIG_GLOBS) scopes to
17
+ * `.github/instructions/` only and never reaches this detector.
18
+ *
19
+ * Deterministic and offline; findings are cautiously worded.
20
+ */
21
+ import type { RepoContext } from './repo-context.js';
22
+ import type { PromptCiIssue } from './types.js';
23
+ export declare function detectCopilotInstructions(context: RepoContext): PromptCiIssue[];
24
+ //# sourceMappingURL=copilot-instructions-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-instructions-detector.d.ts","sourceRoot":"","sources":["../src/copilot-instructions-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA2DhD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CAmF/E"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Copilot Instructions Detector (issue #66)
3
+ *
4
+ * Audits GitHub Copilot per-file instruction files (`.github/instructions/**\/*.md`).
5
+ * These use `applyTo:` frontmatter globs to scope which files they apply to —
6
+ * analogous to Cursor's `.mdc` `globs`. This mirrors `detectCursorRules`:
7
+ *
8
+ * - Frontmatter validity: present, closed, structurally sound.
9
+ * - `applyTo:` absent — the file then applies to *every* Copilot request by
10
+ * default, which is often unintentional.
11
+ * - `applyTo:` globs that match zero files in the repo — a scope keyed to a
12
+ * path that no longer exists never fires.
13
+ * - `applyTo:` globs that match only ignored / build-output files — informational.
14
+ *
15
+ * The legacy single-file `.github/copilot-instructions.md` is always-on and has
16
+ * no `applyTo` support, so discovery (see AI_CONFIG_GLOBS) scopes to
17
+ * `.github/instructions/` only and never reaches this detector.
18
+ *
19
+ * Deterministic and offline; findings are cautiously worded.
20
+ */
21
+ import micromatch from 'micromatch';
22
+ import { parseFrontmatter, readTextWithinRoot, listFiles, shortHash, asStringList, withScannerPaths, aiConfigIssue as base, frontmatterStructureIssues, } from './ai-config.js';
23
+ const SURFACE = {
24
+ idPrefix: 'copilot',
25
+ noun: 'Copilot instructions file',
26
+ why: 'A `.instructions.md` file uses an `applyTo:` frontmatter glob to control which files it applies to.',
27
+ recommendation: 'Add a frontmatter block with an `applyTo:` glob (use `applyTo: "**"` to apply to every request).',
28
+ // A frontmatter-less instructions file still loads (Copilot treats it as
29
+ // apply-to-everything), so this is softer news than a skill that cannot register.
30
+ noFrontmatterTitle: 'Copilot instructions file is missing frontmatter',
31
+ noFrontmatterSeverity: 'warning',
32
+ noFrontmatterConfidence: 0.7,
33
+ };
34
+ /**
35
+ * "Does this glob match any real file" excludes only dependency/VCS trees — a
36
+ * scope may legitimately target `dist/` or a source dir named `build/`.
37
+ */
38
+ const GLOB_TEST_IGNORE = ['**/node_modules/**', '**/.git/**'];
39
+ /**
40
+ * Trees that are ignored or build output: a glob matching only these is scoped
41
+ * to generated/vendored files, which is worth an info but not a warning.
42
+ */
43
+ const IGNORED_TREES = [
44
+ '**/node_modules/**', '**/.git/**', '**/dist/**', '**/build/**',
45
+ '**/.next/**', '**/out/**', '**/coverage/**', '**/worktrees/**', '**/.worktrees/**',
46
+ ];
47
+ function id(kind, key) {
48
+ return `ai-config-copilot-${kind}-${shortHash(key)}`;
49
+ }
50
+ /** A glob we can meaningfully test for zero matches (skip negations/vars/placeholders). */
51
+ function isTestableGlob(glob) {
52
+ const g = glob.trim();
53
+ if (!g)
54
+ return false;
55
+ if (g.startsWith('!'))
56
+ return false;
57
+ if (g.includes('$') || g.includes('<') || g.includes('>'))
58
+ return false;
59
+ return true;
60
+ }
61
+ /** A glob of `**` (or `** slash *`) means "every file" — always valid, never dead. */
62
+ function matchesEverything(glob) {
63
+ const g = glob.trim();
64
+ return g === '**' || g === '**/*';
65
+ }
66
+ export function detectCopilotInstructions(context) {
67
+ const issues = [];
68
+ const files = context.aiConfig.copilotInstructions;
69
+ // TWO repo walks shared across every glob test, built lazily so repos with no
70
+ // testable globs never pay for them. `broad` includes build/vendored output
71
+ // (only node_modules/.git excluded); `source` excludes ignored trees, so a
72
+ // glob that matches `broad` but not `source` hits only ignored files.
73
+ let broad = null;
74
+ let source = null;
75
+ const matchesBroad = (patterns) => {
76
+ broad ??= listFiles(context.repoRoot, ['**/*'], GLOB_TEST_IGNORE);
77
+ return micromatch.some(broad, patterns, { dot: true });
78
+ };
79
+ const matchesSource = (patterns) => {
80
+ source ??= listFiles(context.repoRoot, ['**/*'], IGNORED_TREES);
81
+ return micromatch.some(source, patterns, { dot: true });
82
+ };
83
+ for (const filePath of files) {
84
+ const content = readTextWithinRoot(context.repoRoot, filePath);
85
+ if (content === undefined)
86
+ continue;
87
+ const fm = parseFrontmatter(content);
88
+ issues.push(...frontmatterStructureIssues(filePath, content, fm, SURFACE));
89
+ if (!fm.present)
90
+ continue;
91
+ const applyTo = asStringList(fm.data.applyTo);
92
+ // No `applyTo` at all → the file applies to every request.
93
+ if (applyTo.length === 0) {
94
+ issues.push(base({
95
+ id: id('no-applyto', filePath),
96
+ title: 'Copilot instructions file has no applyTo glob',
97
+ summary: `${filePath} defines no \`applyTo\` glob, so Copilot applies it to every request by default — often unintentional.`,
98
+ filePaths: [filePath],
99
+ locations: [{ filePath, startLine: 1, endLine: fm.fenceEndLine > 0 ? fm.fenceEndLine : 1 }],
100
+ evidence: [`Keys present: ${Object.keys(fm.data).join(', ') || '(none)'}`],
101
+ recommendation: 'Add an `applyTo:` glob scoping the file to the paths it is about, or set `applyTo: "**"` to make the always-on scope explicit.',
102
+ confidence: 0.7,
103
+ }));
104
+ continue; // no globs to test
105
+ }
106
+ const globLine = fm.keyLines.applyTo ?? 1;
107
+ for (const glob of applyTo) {
108
+ if (!isTestableGlob(glob) || matchesEverything(glob))
109
+ continue;
110
+ const normalized = glob.replace(/^\//, '');
111
+ // A slashless pattern like `*.ts` is intended as "any depth"; fast-glob
112
+ // only matches it at the root, so also try a `**/`-anchored variant
113
+ // before declaring the glob dead, to avoid false positives.
114
+ const candidates = normalized.includes('/') ? [normalized] : [normalized, `**/${normalized}`];
115
+ if (!matchesBroad(candidates)) {
116
+ issues.push(base({
117
+ id: id('dead-glob', `${filePath}|${glob}`),
118
+ title: 'Copilot instructions applyTo glob matches no files',
119
+ summary: `${filePath}: the \`applyTo\` glob \`${glob}\` matches no files in the repository, so this instructions file never applies.`,
120
+ filePaths: [filePath],
121
+ locations: [{ filePath, startLine: globLine, endLine: globLine }],
122
+ evidence: [`Glob: ${glob}`],
123
+ recommendation: 'Update the glob to match real paths, or remove the file if the code it targeted is gone.',
124
+ confidence: 0.6,
125
+ }));
126
+ }
127
+ else if (!matchesSource(candidates)) {
128
+ issues.push(base({
129
+ id: id('ignored-glob', `${filePath}|${glob}`),
130
+ severity: 'info',
131
+ title: 'Copilot instructions applyTo glob matches only ignored files',
132
+ summary: `${filePath}: the \`applyTo\` glob \`${glob}\` matches only ignored or build-output files, so it rarely applies to files you edit.`,
133
+ filePaths: [filePath],
134
+ locations: [{ filePath, startLine: globLine, endLine: globLine }],
135
+ evidence: [`Glob: ${glob}`],
136
+ recommendation: 'Point the glob at source paths, or remove the file if it was meant to target generated output.',
137
+ confidence: 0.55,
138
+ }));
139
+ }
140
+ }
141
+ }
142
+ // Scanner-form paths so inline suppressions can match (see withScannerPaths).
143
+ return withScannerPaths(context.repoRoot, issues);
144
+ }
145
+ //# sourceMappingURL=copilot-instructions-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-instructions-detector.js","sourceRoot":"","sources":["../src/copilot-instructions-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Cursor Rules Detector (issue #23)
3
+ *
4
+ * Audits Cursor project rules (`.cursor/rules/**\/*.mdc`):
5
+ *
6
+ * - Frontmatter validity: present, closed, structurally sound.
7
+ * - `globs` that match zero files in the repo — an Auto-Attached rule keyed to
8
+ * a path that no longer exists never fires.
9
+ * - Rules with no trigger at all (no `description`, no `globs`, not
10
+ * `alwaysApply`) which can never activate.
11
+ *
12
+ * Deterministic and offline; findings are cautiously worded.
13
+ */
14
+ import type { RepoContext } from './repo-context.js';
15
+ import type { PromptCiIssue } from './types.js';
16
+ export declare function detectCursorRules(context: RepoContext): PromptCiIssue[];
17
+ //# sourceMappingURL=cursor-rules-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-rules-detector.d.ts","sourceRoot":"","sources":["../src/cursor-rules-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA8ChD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CAkEvE"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Cursor Rules Detector (issue #23)
3
+ *
4
+ * Audits Cursor project rules (`.cursor/rules/**\/*.mdc`):
5
+ *
6
+ * - Frontmatter validity: present, closed, structurally sound.
7
+ * - `globs` that match zero files in the repo — an Auto-Attached rule keyed to
8
+ * a path that no longer exists never fires.
9
+ * - Rules with no trigger at all (no `description`, no `globs`, not
10
+ * `alwaysApply`) which can never activate.
11
+ *
12
+ * Deterministic and offline; findings are cautiously worded.
13
+ */
14
+ import micromatch from 'micromatch';
15
+ import { parseFrontmatter, readTextWithinRoot, listFiles, shortHash, asStringList, withScannerPaths, aiConfigIssue as base, frontmatterStructureIssues, } from './ai-config.js';
16
+ const SURFACE = {
17
+ idPrefix: 'cursor',
18
+ noun: 'Cursor rule',
19
+ why: 'A .mdc rule needs metadata (`description`, `globs`, or `alwaysApply`) to control when it applies.',
20
+ recommendation: 'Add a frontmatter block describing the rule and its trigger (globs or alwaysApply).',
21
+ // A metadata-less .mdc still loads as a manual rule, so this is softer news
22
+ // than a skill/subagent that cannot register at all.
23
+ noFrontmatterTitle: 'Cursor rule is missing frontmatter',
24
+ noFrontmatterSeverity: 'warning',
25
+ noFrontmatterConfidence: 0.7,
26
+ };
27
+ /**
28
+ * Glob-existence testing needs different visibility than config discovery: a
29
+ * rule may legitimately target `dist/` output or a *source* directory named
30
+ * `build/`, so only dependency/VCS trees are excluded when asking "does this
31
+ * glob match anything".
32
+ */
33
+ const GLOB_TEST_IGNORE = ['**/node_modules/**', '**/.git/**'];
34
+ function id(kind, key) {
35
+ return `ai-config-cursor-${kind}-${shortHash(key)}`;
36
+ }
37
+ /** A glob we can meaningfully test for zero matches (skip negations/vars/placeholders). */
38
+ function isTestableGlob(glob) {
39
+ const g = glob.trim();
40
+ if (!g)
41
+ return false;
42
+ if (g.startsWith('!'))
43
+ return false;
44
+ if (g.includes('$') || g.includes('<') || g.includes('>'))
45
+ return false;
46
+ return true;
47
+ }
48
+ export function detectCursorRules(context) {
49
+ const issues = [];
50
+ const files = context.aiConfig.cursorRules;
51
+ // ONE repo walk shared by every dead-glob test, built lazily so repos
52
+ // without testable globs never pay for it. Testing each glob with its own
53
+ // fg.sync call would walk the full tree once per glob per rule.
54
+ let repoListing = null;
55
+ const globMatchesAnything = (patterns) => {
56
+ repoListing ??= listFiles(context.repoRoot, ['**/*'], GLOB_TEST_IGNORE);
57
+ return micromatch.some(repoListing, patterns, { dot: true });
58
+ };
59
+ for (const filePath of files) {
60
+ const content = readTextWithinRoot(context.repoRoot, filePath);
61
+ if (content === undefined)
62
+ continue;
63
+ const fm = parseFrontmatter(content);
64
+ issues.push(...frontmatterStructureIssues(filePath, content, fm, SURFACE));
65
+ if (!fm.present)
66
+ continue;
67
+ const description = typeof fm.data.description === 'string' ? fm.data.description.trim() : '';
68
+ const globs = asStringList(fm.data.globs);
69
+ const alwaysApply = fm.data.alwaysApply === true ||
70
+ (typeof fm.data.alwaysApply === 'string' && fm.data.alwaysApply.trim().toLowerCase() === 'true');
71
+ // A rule with no trigger can never activate.
72
+ if (!description && globs.length === 0 && !alwaysApply) {
73
+ issues.push(base({
74
+ id: id('no-trigger', filePath),
75
+ title: 'Cursor rule has no trigger',
76
+ summary: `${filePath} defines no \`description\`, no \`globs\`, and \`alwaysApply\` is not set, so Cursor has no signal for when to apply it.`,
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 `description` (agent-requested), `globs` (auto-attached), or `alwaysApply: true`.',
81
+ confidence: 0.7,
82
+ }));
83
+ }
84
+ // Globs that match zero files.
85
+ for (const glob of globs) {
86
+ if (!isTestableGlob(glob))
87
+ continue;
88
+ const normalized = glob.replace(/^\//, '');
89
+ // Cursor treats a slashless pattern like `*.tsx` as "any depth", but
90
+ // fast-glob only matches it at the root — so also try a `**/`-anchored
91
+ // variant before declaring the glob dead, to avoid false positives.
92
+ const candidates = normalized.includes('/') ? [normalized] : [normalized, `**/${normalized}`];
93
+ if (!globMatchesAnything(candidates)) {
94
+ issues.push(base({
95
+ id: id('dead-glob', `${filePath}|${glob}`),
96
+ title: 'Cursor rule glob matches no files',
97
+ summary: `${filePath}: the \`globs\` pattern \`${glob}\` matches no files in the repository, so this auto-attached rule never fires.`,
98
+ filePaths: [filePath],
99
+ locations: [{ filePath, startLine: fm.keyLines.globs ?? 1, endLine: fm.keyLines.globs ?? 1 }],
100
+ evidence: [`Glob: ${glob}`],
101
+ recommendation: 'Update the glob to match real paths, or remove the rule if the code it targeted is gone.',
102
+ confidence: 0.6,
103
+ }));
104
+ }
105
+ }
106
+ }
107
+ // Scanner-form paths so inline suppressions can match (see withScannerPaths).
108
+ return withScannerPaths(context.repoRoot, issues);
109
+ }
110
+ //# sourceMappingURL=cursor-rules-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-rules-detector.js","sourceRoot":"","sources":["../src/cursor-rules-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Custom-rules engine (Decision D10) — a deterministic interpreter for
3
+ * `.promptci/custom-rules.json`. It lets a repo add its own instruction checks
4
+ * without shipping code, and those findings behave exactly like built-in ones:
5
+ * they carry `custom:*` ids, participate in suppression and the baseline/ratchet,
6
+ * and run identically in a local scan and the GitHub Action (both go through
7
+ * `buildRepoContext`).
8
+ *
9
+ * Four rule types:
10
+ * - `forbiddenPattern` — flag each file whose text matches a regex.
11
+ * - `absentPattern` — flag the repo when a required regex is absent from all targeted files.
12
+ * - `requiredSection` — flag the repo when a required heading appears in no targeted file.
13
+ * - `crossFileConflict` — flag when a regex's captured value differs across files.
14
+ *
15
+ * Everything here is deterministic: no clock, network, or randomness. Malformed
16
+ * config is rejected with a clear, actionable error naming the offending key —
17
+ * never a crash or a silent skip.
18
+ */
19
+ import type { InstructionFile, IssueSeverity, PromptCiIssue } from './types.js';
20
+ export declare const CUSTOM_RULES_FILE: string;
21
+ export declare const CUSTOM_RULE_TYPES: readonly ["forbiddenPattern", "absentPattern", "requiredSection", "crossFileConflict"];
22
+ export type CustomRuleType = (typeof CUSTOM_RULE_TYPES)[number];
23
+ /** A validated custom rule. `severity` is resolved (default `warning`). */
24
+ export type CustomRule = {
25
+ id: string;
26
+ type: CustomRuleType;
27
+ message: string;
28
+ severity: IssueSeverity;
29
+ files?: string[];
30
+ pattern?: string;
31
+ flags?: string;
32
+ heading?: string;
33
+ };
34
+ /** All validation failures throw this so callers can present them cleanly. */
35
+ export declare class CustomRulesError extends Error {
36
+ constructor(message: string);
37
+ }
38
+ /**
39
+ * Validate a parsed `.promptci/custom-rules.json` value into typed rules.
40
+ * Accepts either `{ "rules": [...] }` or a bare `[...]` array. Throws a
41
+ * {@link CustomRulesError} naming the offending key on any problem.
42
+ */
43
+ export declare function parseCustomRules(raw: unknown): CustomRule[];
44
+ /**
45
+ * Load and validate `.promptci/custom-rules.json` from a repo root. A missing
46
+ * file yields no rules; invalid JSON or an invalid schema throws a
47
+ * {@link CustomRulesError} with an actionable message.
48
+ */
49
+ export declare function loadCustomRules(repoRoot: string): Promise<CustomRule[]>;
50
+ /** Run all validated custom rules over the scanned instruction files. */
51
+ export declare function runCustomRules(files: InstructionFile[], rules: CustomRule[], repoRoot: string): PromptCiIssue[];
52
+ //# sourceMappingURL=custom-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-rules.d.ts","sourceRoot":"","sources":["../src/custom-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhF,eAAO,MAAM,iBAAiB,QAA8C,CAAC;AAE7E,eAAO,MAAM,iBAAiB,wFAKpB,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAKhE,2EAA2E;AAC3E,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAIF,8EAA8E;AAC9E,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AA8BD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,CAwE3D;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAoB7E;AAoID,yEAAyE;AACzE,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EAAE,EACxB,KAAK,EAAE,UAAU,EAAE,EACnB,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,CAoBjB"}