code-auditor-mcp 3.1.1 → 3.4.1

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 (361) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +724 -1
  3. package/README.md +85 -11
  4. package/dist/__test_tmp__/spec18_test.d.ts +2 -0
  5. package/dist/__test_tmp__/spec18_test.d.ts.map +1 -0
  6. package/dist/__test_tmp__/spec18_test.js +5 -0
  7. package/dist/__test_tmp__/spec18_test.js.map +1 -0
  8. package/dist/__tests__/fixtures/spec-20/scripts/tool.d.ts +6 -0
  9. package/dist/__tests__/fixtures/spec-20/scripts/tool.d.ts.map +1 -0
  10. package/dist/__tests__/fixtures/spec-20/scripts/tool.js +12 -0
  11. package/dist/__tests__/fixtures/spec-20/scripts/tool.js.map +1 -0
  12. package/dist/__tests__/fixtures/spec-20/src/demo-module.d.ts +7 -0
  13. package/dist/__tests__/fixtures/spec-20/src/demo-module.d.ts.map +1 -0
  14. package/dist/__tests__/fixtures/spec-20/src/demo-module.js +13 -0
  15. package/dist/__tests__/fixtures/spec-20/src/demo-module.js.map +1 -0
  16. package/dist/analyzers/analyzerUtils.js +2 -2
  17. package/dist/analyzers/analyzerUtils.js.map +1 -1
  18. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +1 -1
  19. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
  20. package/dist/analyzers/cross-language/APIContractAnalyzer.js +2 -2
  21. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
  22. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts +3 -0
  23. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts.map +1 -1
  24. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js +3 -3
  25. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js.map +1 -1
  26. package/dist/analyzers/cross-language/SchemaValidator.d.ts +1 -1
  27. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
  28. package/dist/analyzers/cross-language/SchemaValidator.js +2 -2
  29. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
  30. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +83 -0
  31. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -0
  32. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +611 -0
  33. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -0
  34. package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
  35. package/dist/analyzers/documentationAnalyzer.js +8 -4
  36. package/dist/analyzers/documentationAnalyzer.js.map +1 -1
  37. package/dist/analyzers/orm/adapterRegistry.d.ts +41 -0
  38. package/dist/analyzers/orm/adapterRegistry.d.ts.map +1 -0
  39. package/dist/analyzers/orm/adapterRegistry.js +73 -0
  40. package/dist/analyzers/orm/adapterRegistry.js.map +1 -0
  41. package/dist/analyzers/orm/drizzleAdapter.d.ts +42 -0
  42. package/dist/analyzers/orm/drizzleAdapter.d.ts.map +1 -0
  43. package/dist/analyzers/orm/drizzleAdapter.js +166 -0
  44. package/dist/analyzers/orm/drizzleAdapter.js.map +1 -0
  45. package/dist/analyzers/orm/index.d.ts +14 -0
  46. package/dist/analyzers/orm/index.d.ts.map +1 -0
  47. package/dist/analyzers/orm/index.js +24 -0
  48. package/dist/analyzers/orm/index.js.map +1 -0
  49. package/dist/analyzers/orm/prismaAdapter.d.ts +45 -0
  50. package/dist/analyzers/orm/prismaAdapter.d.ts.map +1 -0
  51. package/dist/analyzers/orm/prismaAdapter.js +170 -0
  52. package/dist/analyzers/orm/prismaAdapter.js.map +1 -0
  53. package/dist/analyzers/orm/types.d.ts +63 -0
  54. package/dist/analyzers/orm/types.d.ts.map +1 -0
  55. package/dist/analyzers/orm/types.js +10 -0
  56. package/dist/analyzers/orm/types.js.map +1 -0
  57. package/dist/analyzers/provenance.d.ts +133 -0
  58. package/dist/analyzers/provenance.d.ts.map +1 -0
  59. package/dist/analyzers/provenance.js +1041 -0
  60. package/dist/analyzers/provenance.js.map +1 -0
  61. package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
  62. package/dist/analyzers/reactAnalyzer.js +117 -1
  63. package/dist/analyzers/reactAnalyzer.js.map +1 -1
  64. package/dist/analyzers/ruleRegistry.d.ts +38 -0
  65. package/dist/analyzers/ruleRegistry.d.ts.map +1 -0
  66. package/dist/analyzers/ruleRegistry.js +123 -0
  67. package/dist/analyzers/ruleRegistry.js.map +1 -0
  68. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +58 -0
  69. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -0
  70. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +445 -0
  71. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -0
  72. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +52 -0
  73. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
  74. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +108 -26
  75. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
  76. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +64 -0
  77. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  78. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +259 -53
  79. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  80. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
  81. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +5 -15
  82. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
  83. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
  84. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +10 -10
  85. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
  86. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +25 -0
  87. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
  88. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +250 -59
  89. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
  90. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +103 -0
  91. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -0
  92. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +750 -0
  93. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -0
  94. package/dist/auditRunner.d.ts.map +1 -1
  95. package/dist/auditRunner.js +499 -4
  96. package/dist/auditRunner.js.map +1 -1
  97. package/dist/baseline.d.ts +98 -0
  98. package/dist/baseline.d.ts.map +1 -0
  99. package/dist/baseline.js +184 -0
  100. package/dist/baseline.js.map +1 -0
  101. package/dist/churn/churnExtractor.d.ts +32 -0
  102. package/dist/churn/churnExtractor.d.ts.map +1 -0
  103. package/dist/churn/churnExtractor.js +264 -0
  104. package/dist/churn/churnExtractor.js.map +1 -0
  105. package/dist/cli.js +1218 -11
  106. package/dist/cli.js.map +1 -1
  107. package/dist/codeIndexDB-enhanced.js +1 -1
  108. package/dist/codeIndexDB-enhanced.js.map +1 -1
  109. package/dist/codeIndexDB.d.ts +101 -0
  110. package/dist/codeIndexDB.d.ts.map +1 -1
  111. package/dist/codeIndexDB.js +665 -5
  112. package/dist/codeIndexDB.js.map +1 -1
  113. package/dist/config/configLoader.d.ts.map +1 -1
  114. package/dist/config/configLoader.js +104 -7
  115. package/dist/config/configLoader.js.map +1 -1
  116. package/dist/config/defaults.d.ts +72 -1
  117. package/dist/config/defaults.d.ts.map +1 -1
  118. package/dist/config/defaults.js +146 -15
  119. package/dist/config/defaults.js.map +1 -1
  120. package/dist/config/pathProfiles.d.ts +38 -0
  121. package/dist/config/pathProfiles.d.ts.map +1 -0
  122. package/dist/config/pathProfiles.js +47 -0
  123. package/dist/config/pathProfiles.js.map +1 -0
  124. package/dist/conventions/conventionMiner.d.ts +63 -0
  125. package/dist/conventions/conventionMiner.d.ts.map +1 -0
  126. package/dist/conventions/conventionMiner.js +696 -0
  127. package/dist/conventions/conventionMiner.js.map +1 -0
  128. package/dist/coverage/coverageService.d.ts +49 -0
  129. package/dist/coverage/coverageService.d.ts.map +1 -0
  130. package/dist/coverage/coverageService.js +117 -0
  131. package/dist/coverage/coverageService.js.map +1 -0
  132. package/dist/coverage/istanbulParser.d.ts +84 -0
  133. package/dist/coverage/istanbulParser.d.ts.map +1 -0
  134. package/dist/coverage/istanbulParser.js +120 -0
  135. package/dist/coverage/istanbulParser.js.map +1 -0
  136. package/dist/coverage/lcovParser.d.ts +40 -0
  137. package/dist/coverage/lcovParser.d.ts.map +1 -0
  138. package/dist/coverage/lcovParser.js +168 -0
  139. package/dist/coverage/lcovParser.js.map +1 -0
  140. package/dist/fingerprint.d.ts +17 -0
  141. package/dist/fingerprint.d.ts.map +1 -1
  142. package/dist/fingerprint.js +42 -0
  143. package/dist/fingerprint.js.map +1 -1
  144. package/dist/grammars/tree-sitter-css.wasm +0 -0
  145. package/dist/graph/blastRadius.d.ts +27 -0
  146. package/dist/graph/blastRadius.d.ts.map +1 -0
  147. package/dist/graph/blastRadius.js +150 -0
  148. package/dist/graph/blastRadius.js.map +1 -0
  149. package/dist/graph/callGraph.d.ts +78 -0
  150. package/dist/graph/callGraph.d.ts.map +1 -0
  151. package/dist/graph/callGraph.js +484 -0
  152. package/dist/graph/callGraph.js.map +1 -0
  153. package/dist/graph/importGraph.d.ts +91 -0
  154. package/dist/graph/importGraph.d.ts.map +1 -0
  155. package/dist/graph/importGraph.js +602 -0
  156. package/dist/graph/importGraph.js.map +1 -0
  157. package/dist/graph/outputFormatter.d.ts +55 -0
  158. package/dist/graph/outputFormatter.d.ts.map +1 -0
  159. package/dist/graph/outputFormatter.js +283 -0
  160. package/dist/graph/outputFormatter.js.map +1 -0
  161. package/dist/hooks/codex.d.ts +36 -1
  162. package/dist/hooks/codex.d.ts.map +1 -1
  163. package/dist/hooks/codex.js +88 -54
  164. package/dist/hooks/codex.js.map +1 -1
  165. package/dist/hotspots/hotspotScorer.d.ts +20 -0
  166. package/dist/hotspots/hotspotScorer.d.ts.map +1 -0
  167. package/dist/hotspots/hotspotScorer.js +202 -0
  168. package/dist/hotspots/hotspotScorer.js.map +1 -0
  169. package/dist/invariants/invariant-rules.schema.json +42 -1
  170. package/dist/invariants/ruleEngine.d.ts +4 -1
  171. package/dist/invariants/ruleEngine.d.ts.map +1 -1
  172. package/dist/invariants/ruleEngine.js +141 -5
  173. package/dist/invariants/ruleEngine.js.map +1 -1
  174. package/dist/invariants/ruleValidator.d.ts.map +1 -1
  175. package/dist/invariants/ruleValidator.js +62 -1
  176. package/dist/invariants/ruleValidator.js.map +1 -1
  177. package/dist/invariants/types.d.ts +23 -2
  178. package/dist/invariants/types.d.ts.map +1 -1
  179. package/dist/languages/UniversalAnalyzer.d.ts +1 -1
  180. package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
  181. package/dist/languages/UniversalAnalyzer.js +61 -4
  182. package/dist/languages/UniversalAnalyzer.js.map +1 -1
  183. package/dist/languages/index.d.ts +1 -0
  184. package/dist/languages/index.d.ts.map +1 -1
  185. package/dist/languages/index.js +3 -0
  186. package/dist/languages/index.js.map +1 -1
  187. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts +59 -0
  188. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts.map +1 -0
  189. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +236 -0
  190. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -0
  191. package/dist/languages/tree-sitter/parser.d.ts.map +1 -1
  192. package/dist/languages/tree-sitter/parser.js +2 -0
  193. package/dist/languages/tree-sitter/parser.js.map +1 -1
  194. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
  195. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +61 -10
  196. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
  197. package/dist/ledger.d.ts +128 -0
  198. package/dist/ledger.d.ts.map +1 -0
  199. package/dist/ledger.js +345 -0
  200. package/dist/ledger.js.map +1 -0
  201. package/dist/mcp-tools/projectTasks.d.ts.map +1 -1
  202. package/dist/mcp-tools/projectTasks.js +9 -14
  203. package/dist/mcp-tools/projectTasks.js.map +1 -1
  204. package/dist/mcp.js +0 -0
  205. package/dist/mcpAuditJobs.d.ts.map +1 -1
  206. package/dist/mcpAuditJobs.js +3 -0
  207. package/dist/mcpAuditJobs.js.map +1 -1
  208. package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
  209. package/dist/reporting/csvReportGenerator.js +7 -1
  210. package/dist/reporting/csvReportGenerator.js.map +1 -1
  211. package/dist/reporting/htmlReportGenerator.d.ts.map +1 -1
  212. package/dist/reporting/htmlReportGenerator.js +5 -1
  213. package/dist/reporting/htmlReportGenerator.js.map +1 -1
  214. package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
  215. package/dist/reporting/jsonReportGenerator.js +10 -2
  216. package/dist/reporting/jsonReportGenerator.js.map +1 -1
  217. package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
  218. package/dist/reporting/sarifReportGenerator.js +17 -17
  219. package/dist/reporting/sarifReportGenerator.js.map +1 -1
  220. package/dist/scripts/runBench.d.ts +94 -0
  221. package/dist/scripts/runBench.d.ts.map +1 -0
  222. package/dist/scripts/runBench.js +1559 -0
  223. package/dist/scripts/runBench.js.map +1 -0
  224. package/dist/search/QueryParser.d.ts.map +1 -1
  225. package/dist/search/QueryParser.js +51 -4
  226. package/dist/search/QueryParser.js.map +1 -1
  227. package/dist/services/CodeMapGenerator.d.ts +33 -0
  228. package/dist/services/CodeMapGenerator.d.ts.map +1 -1
  229. package/dist/services/CodeMapGenerator.js +404 -0
  230. package/dist/services/CodeMapGenerator.js.map +1 -1
  231. package/dist/styles/normalizer.d.ts +37 -0
  232. package/dist/styles/normalizer.d.ts.map +1 -0
  233. package/dist/styles/normalizer.js +301 -0
  234. package/dist/styles/normalizer.js.map +1 -0
  235. package/dist/styles/styleExtractor.d.ts +38 -0
  236. package/dist/styles/styleExtractor.d.ts.map +1 -0
  237. package/dist/styles/styleExtractor.js +630 -0
  238. package/dist/styles/styleExtractor.js.map +1 -0
  239. package/dist/styles/styleIndexer.d.ts +35 -0
  240. package/dist/styles/styleIndexer.d.ts.map +1 -0
  241. package/dist/styles/styleIndexer.js +266 -0
  242. package/dist/styles/styleIndexer.js.map +1 -0
  243. package/dist/styles/tailwindConfigLoader.d.ts +38 -0
  244. package/dist/styles/tailwindConfigLoader.d.ts.map +1 -0
  245. package/dist/styles/tailwindConfigLoader.js +374 -0
  246. package/dist/styles/tailwindConfigLoader.js.map +1 -0
  247. package/dist/styles/tailwindExpander.d.ts +38 -0
  248. package/dist/styles/tailwindExpander.d.ts.map +1 -0
  249. package/dist/styles/tailwindExpander.js +637 -0
  250. package/dist/styles/tailwindExpander.js.map +1 -0
  251. package/dist/styles/types.d.ts +92 -0
  252. package/dist/styles/types.d.ts.map +1 -0
  253. package/dist/styles/types.js +10 -0
  254. package/dist/styles/types.js.map +1 -0
  255. package/dist/symbols.d.ts +21 -0
  256. package/dist/symbols.d.ts.map +1 -0
  257. package/dist/symbols.js +31 -0
  258. package/dist/symbols.js.map +1 -0
  259. package/dist/types.d.ts +326 -3
  260. package/dist/types.d.ts.map +1 -1
  261. package/dist/types.js.map +1 -1
  262. package/dist/utils/fileDiscovery.d.ts +1 -0
  263. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  264. package/dist/utils/fileDiscovery.js +8 -2
  265. package/dist/utils/fileDiscovery.js.map +1 -1
  266. package/package.json +9 -5
  267. package/plugin/.claude-plugin/plugin.json +1 -1
  268. package/plugin/scripts/hook-audit.sh +5 -1
  269. package/plugin/skills/code-auditor/SKILL.md +51 -0
  270. package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.d.ts +0 -21
  271. package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.d.ts.map +0 -1
  272. package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.js +0 -21
  273. package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.js.map +0 -1
  274. package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.d.ts +0 -13
  275. package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.d.ts.map +0 -1
  276. package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.js +0 -12
  277. package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.js.map +0 -1
  278. package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.d.ts +0 -11
  279. package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.d.ts.map +0 -1
  280. package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.js +0 -22
  281. package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.js.map +0 -1
  282. package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.d.ts +0 -9
  283. package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.d.ts.map +0 -1
  284. package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.js +0 -13
  285. package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.js.map +0 -1
  286. package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.d.ts +0 -13
  287. package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.d.ts.map +0 -1
  288. package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.js +0 -18
  289. package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.js.map +0 -1
  290. package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.d.ts +0 -10
  291. package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.d.ts.map +0 -1
  292. package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.js +0 -16
  293. package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.js.map +0 -1
  294. package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.d.ts +0 -14
  295. package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.d.ts.map +0 -1
  296. package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.js +0 -18
  297. package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.js.map +0 -1
  298. package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.d.ts +0 -13
  299. package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.d.ts.map +0 -1
  300. package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.js +0 -22
  301. package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.js.map +0 -1
  302. package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.d.ts +0 -10
  303. package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.d.ts.map +0 -1
  304. package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.js +0 -20
  305. package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.js.map +0 -1
  306. package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.d.ts +0 -18
  307. package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.d.ts.map +0 -1
  308. package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.js +0 -28
  309. package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.js.map +0 -1
  310. package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.d.ts +0 -11
  311. package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.d.ts.map +0 -1
  312. package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.js +0 -31
  313. package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.js.map +0 -1
  314. package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.d.ts +0 -11
  315. package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.d.ts.map +0 -1
  316. package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.js +0 -18
  317. package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.js.map +0 -1
  318. package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.d.ts +0 -13
  319. package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.d.ts.map +0 -1
  320. package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.js +0 -61
  321. package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.js.map +0 -1
  322. package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.d.ts +0 -10
  323. package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.d.ts.map +0 -1
  324. package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.js +0 -15
  325. package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.js.map +0 -1
  326. package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.d.ts +0 -11
  327. package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.d.ts.map +0 -1
  328. package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.js +0 -49
  329. package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.js.map +0 -1
  330. package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.d.ts +0 -10
  331. package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.d.ts.map +0 -1
  332. package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.js +0 -19
  333. package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.js.map +0 -1
  334. package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.d.ts +0 -37
  335. package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.d.ts.map +0 -1
  336. package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.js +0 -73
  337. package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.js.map +0 -1
  338. package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.d.ts +0 -12
  339. package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.d.ts.map +0 -1
  340. package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.js +0 -82
  341. package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.js.map +0 -1
  342. package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.d.ts +0 -10
  343. package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.d.ts.map +0 -1
  344. package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.js +0 -15
  345. package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.js.map +0 -1
  346. package/dist/analyzers/dataAccessAnalyzer.d.ts +0 -46
  347. package/dist/analyzers/dataAccessAnalyzer.d.ts.map +0 -1
  348. package/dist/analyzers/dataAccessAnalyzer.js +0 -474
  349. package/dist/analyzers/dataAccessAnalyzer.js.map +0 -1
  350. package/dist/analyzers/dryAnalyzer.d.ts +0 -31
  351. package/dist/analyzers/dryAnalyzer.d.ts.map +0 -1
  352. package/dist/analyzers/dryAnalyzer.js +0 -734
  353. package/dist/analyzers/dryAnalyzer.js.map +0 -1
  354. package/dist/analyzers/schemaAnalyzer.d.ts +0 -23
  355. package/dist/analyzers/schemaAnalyzer.d.ts.map +0 -1
  356. package/dist/analyzers/schemaAnalyzer.js +0 -564
  357. package/dist/analyzers/schemaAnalyzer.js.map +0 -1
  358. package/dist/analyzers/solidAnalyzer.d.ts +0 -33
  359. package/dist/analyzers/solidAnalyzer.d.ts.map +0 -1
  360. package/dist/analyzers/solidAnalyzer.js +0 -847
  361. package/dist/analyzers/solidAnalyzer.js.map +0 -1
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Spec 14 R5 — DOT and Mermaid Graph Output Formatting
3
+ *
4
+ * Zero rendering dependencies — just string emission.
5
+ * Produces valid Graphviz DOT and Mermaid graph TD formats.
6
+ */
7
+ import type { CallGraph } from './callGraph.js';
8
+ import type { ImportGraph } from './importGraph.js';
9
+ export interface DotOptions {
10
+ /** Graph label */
11
+ label?: string;
12
+ /** Node labels: nodeKey → display label */
13
+ nodeLabels?: Map<string, string>;
14
+ /** Community assignments for coloring: nodeKey → community ID */
15
+ communities?: Map<string, number>;
16
+ /** Legend toggle */
17
+ legend?: boolean;
18
+ /** Direction: TD (top-down) or LR (left-right) */
19
+ rankdir?: 'TD' | 'LR';
20
+ /** Max nodes to include (for large graphs) */
21
+ maxNodes?: number;
22
+ /** Show edge weights */
23
+ showWeights?: boolean;
24
+ /** Context depth (for risk neighborhood) */
25
+ depth?: number;
26
+ }
27
+ export interface MermaidOptions {
28
+ /** Graph label */
29
+ label?: string;
30
+ /** Node labels */
31
+ nodeLabels?: Map<string, string>;
32
+ /** Community assignments for styling */
33
+ communities?: Map<string, number>;
34
+ /** Max nodes */
35
+ maxNodes?: number;
36
+ /** Show edge weights */
37
+ showWeights?: boolean;
38
+ }
39
+ /**
40
+ * Emit a Graphviz DOT-format string for the given call graph.
41
+ */
42
+ export declare function callGraphToDot(graph: CallGraph, options?: DotOptions): string;
43
+ /**
44
+ * Emit a Graphviz DOT-format string for the given import graph.
45
+ */
46
+ export declare function importGraphToDot(graph: ImportGraph, options?: DotOptions): string;
47
+ /**
48
+ * Emit a Mermaid graph TD string for the given call graph.
49
+ */
50
+ export declare function callGraphToMermaid(graph: CallGraph, options?: MermaidOptions): string;
51
+ /**
52
+ * Emit a Mermaid graph TD string for the given import graph.
53
+ */
54
+ export declare function importGraphToMermaid(graph: ImportGraph, options?: MermaidOptions): string;
55
+ //# sourceMappingURL=outputFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputFormatter.d.ts","sourceRoot":"","sources":["../../src/graph/outputFormatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIpD,MAAM,WAAW,UAAU;IACzB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,iEAAiE;IACjE,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,oBAAoB;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,wCAAwC;IACxC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,gBAAgB;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAkCD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,UAAe,GAAG,MAAM,CAuEjF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,GAAE,UAAe,GAAG,MAAM,CAqErF;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,CA8DzF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,CA8D7F"}
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Spec 14 R5 — DOT and Mermaid Graph Output Formatting
3
+ *
4
+ * Zero rendering dependencies — just string emission.
5
+ * Produces valid Graphviz DOT and Mermaid graph TD formats.
6
+ */
7
+ // ── Color palette for communities ───────────────────────────────────────
8
+ const COMMUNITY_COLORS = [
9
+ '#4e79a7', '#f28e2b', '#e15759', '#76b7b2', '#59a14f',
10
+ '#edc948', '#b07aa1', '#ff9da7', '#9c755f', '#bab0ac',
11
+ '#86bcb6', '#8cd17d', '#d37295', '#b6992d', '#499894',
12
+ '#e8a838', '#9d7660', '#bc80bd', '#dfc27d', '#a6611a',
13
+ ];
14
+ function communityColor(communityId) {
15
+ return COMMUNITY_COLORS[communityId % COMMUNITY_COLORS.length];
16
+ }
17
+ // ── Node ID sanitization ────────────────────────────────────────────────
18
+ /** Sanitize an identifier for use in DOT/Mermaid output. */
19
+ function sanitizeId(id) {
20
+ return id.replace(/[^a-zA-Z0-9_]/g, '_');
21
+ }
22
+ /** Truncate a label for display. */
23
+ function truncateLabel(label, maxLen = 60) {
24
+ if (label.length <= maxLen)
25
+ return label;
26
+ return label.substring(0, maxLen - 3) + '...';
27
+ }
28
+ function escapeLabel(label) {
29
+ return label.replace(/"/g, '\\"').replace(/\n/g, '\\n');
30
+ }
31
+ // ── DOT output ──────────────────────────────────────────────────────────
32
+ /**
33
+ * Emit a Graphviz DOT-format string for the given call graph.
34
+ */
35
+ export function callGraphToDot(graph, options = {}) {
36
+ const { label, nodeLabels, communities, legend = true, rankdir = 'TB', maxNodes, showWeights = false, depth, } = options;
37
+ const lines = [];
38
+ lines.push(`digraph calls {`);
39
+ if (label)
40
+ lines.push(` label="${escapeLabel(label)}";`);
41
+ lines.push(` rankdir=${rankdir};`);
42
+ lines.push(` node [shape=box, style=filled, fontname="Helvetica"];`);
43
+ lines.push(` edge [fontname="Helvetica", fontsize=10];`);
44
+ const nodes = [...graph.nodeIds];
45
+ const included = new Set();
46
+ // If depth is specified, only include the first maxNodes (already sorted by risk)
47
+ if (maxNodes && maxNodes > 0) {
48
+ for (let i = 0; i < Math.min(maxNodes, nodes.length); i++) {
49
+ included.add(nodes[i]);
50
+ }
51
+ }
52
+ else {
53
+ for (const n of nodes)
54
+ included.add(n);
55
+ }
56
+ // Emit nodes
57
+ for (const nodeId of included) {
58
+ const name = graph.nodeNames.get(nodeId) ?? String(nodeId);
59
+ const labelText = nodeLabels?.get(String(nodeId)) ?? name;
60
+ const comm = communities?.get(String(nodeId));
61
+ const color = comm !== undefined ? communityColor(comm) : '#e0e0e0';
62
+ const nodeIdStr = sanitizeId(`n${nodeId}`);
63
+ lines.push(` ${nodeIdStr} [label="${escapeLabel(truncateLabel(labelText))}", fillcolor="${color}"];`);
64
+ }
65
+ // Emit edges
66
+ for (const [srcId, neighbors] of graph.adjacency) {
67
+ if (!included.has(srcId))
68
+ continue;
69
+ const srcStr = sanitizeId(`n${srcId}`);
70
+ for (const [dstId, weight] of neighbors) {
71
+ if (!included.has(dstId))
72
+ continue;
73
+ const dstStr = sanitizeId(`n${dstId}`);
74
+ const labelAttr = showWeights ? ` [label="${weight}"]` : '';
75
+ lines.push(` ${srcStr} -> ${dstStr}${labelAttr};`);
76
+ }
77
+ }
78
+ // Legend
79
+ if (legend && communities) {
80
+ const uniqueComms = new Set(communities.values());
81
+ lines.push(` subgraph cluster_legend {`);
82
+ lines.push(` label="Communities";`);
83
+ lines.push(` style=filled;`);
84
+ lines.push(` color=lightgrey;`);
85
+ for (const comm of uniqueComms) {
86
+ const color = communityColor(comm);
87
+ lines.push(` legend_${comm} [label="Community ${comm}", shape=ellipse, fillcolor="${color}", fontsize=8];`);
88
+ }
89
+ lines.push(` }`);
90
+ }
91
+ lines.push(`}`);
92
+ return lines.join('\n') + '\n';
93
+ }
94
+ /**
95
+ * Emit a Graphviz DOT-format string for the given import graph.
96
+ */
97
+ export function importGraphToDot(graph, options = {}) {
98
+ const { label, communities, legend = true, rankdir = 'TB', maxNodes, showWeights = false, } = options;
99
+ const lines = [];
100
+ lines.push(`digraph imports {`);
101
+ if (label)
102
+ lines.push(` label="${escapeLabel(label)}";`);
103
+ lines.push(` rankdir=${rankdir};`);
104
+ lines.push(` node [shape=folder, style=filled, fontname="Helvetica"];`);
105
+ lines.push(` edge [fontname="Helvetica", fontsize=10];`);
106
+ const files = [...graph.filePaths];
107
+ const included = new Set();
108
+ if (maxNodes && maxNodes > 0) {
109
+ for (let i = 0; i < Math.min(maxNodes, files.length); i++) {
110
+ included.add(files[i]);
111
+ }
112
+ }
113
+ else {
114
+ for (const f of files)
115
+ included.add(f);
116
+ }
117
+ // Emit nodes
118
+ for (const filePath of included) {
119
+ const comm = communities?.get(filePath);
120
+ const color = comm !== undefined ? communityColor(comm) : '#e0e0e0';
121
+ const nodeId = sanitizeId(filePath);
122
+ // Show just filename for brevity
123
+ const displayLabel = filePath.split('/').pop() ?? filePath;
124
+ lines.push(` ${nodeId} [label="${escapeLabel(displayLabel)}", fillcolor="${color}", tooltip="${escapeLabel(filePath)}"];`);
125
+ }
126
+ // Emit edges
127
+ for (const [srcFile, neighbors] of graph.adjacency) {
128
+ if (!included.has(srcFile))
129
+ continue;
130
+ const srcId = sanitizeId(srcFile);
131
+ for (const [dstFile, weight] of neighbors) {
132
+ if (!included.has(dstFile))
133
+ continue;
134
+ const dstId = sanitizeId(dstFile);
135
+ if (srcId === dstId)
136
+ continue;
137
+ const labelAttr = showWeights ? ` [label="${weight}"]` : '';
138
+ lines.push(` ${srcId} -> ${dstId}${labelAttr};`);
139
+ }
140
+ }
141
+ // Legend
142
+ if (legend && communities) {
143
+ const uniqueComms = new Set(communities.values());
144
+ lines.push(` subgraph cluster_legend {`);
145
+ lines.push(` label="Communities";`);
146
+ lines.push(` style=filled;`);
147
+ lines.push(` color=lightgrey;`);
148
+ for (const comm of uniqueComms) {
149
+ const color = communityColor(comm);
150
+ lines.push(` legend_${comm} [label="Community ${comm}", shape=ellipse, fillcolor="${color}", fontsize=8];`);
151
+ }
152
+ lines.push(` }`);
153
+ }
154
+ lines.push(`}`);
155
+ return lines.join('\n') + '\n';
156
+ }
157
+ // ── Mermaid output ──────────────────────────────────────────────────────
158
+ /**
159
+ * Emit a Mermaid graph TD string for the given call graph.
160
+ */
161
+ export function callGraphToMermaid(graph, options = {}) {
162
+ const { label, nodeLabels, communities, maxNodes, showWeights = false } = options;
163
+ const lines = [];
164
+ lines.push('```mermaid');
165
+ lines.push('graph TD');
166
+ if (label)
167
+ lines.push(` %% ${label}`);
168
+ const nodes = [...graph.nodeIds];
169
+ const included = new Set();
170
+ if (maxNodes && maxNodes > 0) {
171
+ for (let i = 0; i < Math.min(maxNodes, nodes.length); i++) {
172
+ included.add(nodes[i]);
173
+ }
174
+ }
175
+ else {
176
+ for (const n of nodes)
177
+ included.add(n);
178
+ }
179
+ // Define community styles
180
+ if (communities) {
181
+ const uniqueComms = new Set(communities.values());
182
+ for (const comm of uniqueComms) {
183
+ const color = communityColor(comm);
184
+ lines.push(` classDef comm${comm} fill:${color},stroke:#333,stroke-width:1px;`);
185
+ }
186
+ }
187
+ // Emit edges first (so they define nodes implicitly)
188
+ for (const [srcId, neighbors] of graph.adjacency) {
189
+ if (!included.has(srcId))
190
+ continue;
191
+ const srcLabel = sanitizeId(`n${srcId}`);
192
+ for (const [dstId, weight] of neighbors) {
193
+ if (!included.has(dstId))
194
+ continue;
195
+ const dstLabel = sanitizeId(`n${dstId}`);
196
+ const weightStr = showWeights ? `|${weight}|` : ' --> ';
197
+ const edgeStr = showWeights
198
+ ? ` ${srcLabel} -- "${weight}" --> ${dstLabel}`
199
+ : ` ${srcLabel} --> ${dstLabel}`;
200
+ lines.push(edgeStr);
201
+ }
202
+ }
203
+ // Emit node labels
204
+ for (const nodeId of included) {
205
+ const name = graph.nodeNames.get(nodeId) ?? String(nodeId);
206
+ const labelText = nodeLabels?.get(String(nodeId)) ?? name;
207
+ const nodeIdStr = sanitizeId(`n${nodeId}`);
208
+ lines.push(` ${nodeIdStr}["${escapeLabel(truncateLabel(labelText))}"]`);
209
+ // Assign community class
210
+ if (communities) {
211
+ const comm = communities.get(String(nodeId));
212
+ if (comm !== undefined) {
213
+ lines.push(` class ${nodeIdStr} comm${comm}`);
214
+ }
215
+ }
216
+ }
217
+ lines.push('```');
218
+ return lines.join('\n') + '\n';
219
+ }
220
+ /**
221
+ * Emit a Mermaid graph TD string for the given import graph.
222
+ */
223
+ export function importGraphToMermaid(graph, options = {}) {
224
+ const { label, communities, maxNodes, showWeights = false } = options;
225
+ const lines = [];
226
+ lines.push('```mermaid');
227
+ lines.push('graph TD');
228
+ if (label)
229
+ lines.push(` %% ${label}`);
230
+ const files = [...graph.filePaths];
231
+ const included = new Set();
232
+ if (maxNodes && maxNodes > 0) {
233
+ for (let i = 0; i < Math.min(maxNodes, files.length); i++) {
234
+ included.add(files[i]);
235
+ }
236
+ }
237
+ else {
238
+ for (const f of files)
239
+ included.add(f);
240
+ }
241
+ // Define community styles
242
+ if (communities) {
243
+ const uniqueComms = new Set(communities.values());
244
+ for (const comm of uniqueComms) {
245
+ const color = communityColor(comm);
246
+ lines.push(` classDef comm${comm} fill:${color},stroke:#333,stroke-width:1px;`);
247
+ }
248
+ }
249
+ // Emit edges
250
+ for (const [srcFile, neighbors] of graph.adjacency) {
251
+ if (!included.has(srcFile))
252
+ continue;
253
+ const srcId = sanitizeId(srcFile);
254
+ for (const [dstFile, weight] of neighbors) {
255
+ if (!included.has(dstFile))
256
+ continue;
257
+ const dstId = sanitizeId(dstFile);
258
+ if (srcId === dstId)
259
+ continue;
260
+ if (showWeights) {
261
+ lines.push(` ${srcId} -- "${weight}" --> ${dstId}`);
262
+ }
263
+ else {
264
+ lines.push(` ${srcId} --> ${dstId}`);
265
+ }
266
+ }
267
+ }
268
+ // Emit node labels
269
+ for (const filePath of included) {
270
+ const nodeId = sanitizeId(filePath);
271
+ const displayLabel = filePath.split('/').pop() ?? filePath;
272
+ lines.push(` ${nodeId}["${escapeLabel(displayLabel)}"]`);
273
+ if (communities) {
274
+ const comm = communities.get(filePath);
275
+ if (comm !== undefined) {
276
+ lines.push(` class ${nodeId} comm${comm}`);
277
+ }
278
+ }
279
+ }
280
+ lines.push('```');
281
+ return lines.join('\n') + '\n';
282
+ }
283
+ //# sourceMappingURL=outputFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputFormatter.js","sourceRoot":"","sources":["../../src/graph/outputFormatter.ts"],"names":[],"mappings":"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"}
@@ -16,5 +16,40 @@
16
16
  * 2 — critical violations found (blocking feedback loop)
17
17
  * 1 — internal error (adapter crash, not violation-related)
18
18
  */
19
- export {};
19
+ import type { HookAuditOutput } from './core.js';
20
+ export interface CodexPostToolUse {
21
+ session_id?: string;
22
+ transcript_path?: string;
23
+ cwd?: string;
24
+ hook_event_name?: string;
25
+ tool_name?: string;
26
+ tool_use_id?: string;
27
+ tool_input?: {
28
+ file_path?: string;
29
+ path?: string;
30
+ [key: string]: unknown;
31
+ };
32
+ tool_response?: unknown;
33
+ }
34
+ export interface CodexHookResult {
35
+ exitCode: number;
36
+ stdout: string;
37
+ stderr: string;
38
+ }
39
+ /**
40
+ * Build the Codex feedback payload from audit output.
41
+ */
42
+ export declare function formatCodexFeedback(output: HookAuditOutput): {
43
+ feedback: Record<string, unknown> | null;
44
+ isBlocking: boolean;
45
+ };
46
+ /**
47
+ * Process a Codex PostToolUse event and return the hook result.
48
+ * Extracted from main() for testability — tests inject a mock audit function.
49
+ */
50
+ export declare function processCodexEvent(rawStdin: string, auditFn?: (filePaths: string[], projectRoot: string) => Promise<HookAuditOutput>, resolveRoot?: (event: CodexPostToolUse) => string): Promise<CodexHookResult>;
51
+ /**
52
+ * CLI entry point — reads stdin, processes, writes result, exits.
53
+ */
54
+ export declare function main(): Promise<void>;
20
55
  //# sourceMappingURL=codex.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/hooks/codex.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG"}
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/hooks/codex.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGjD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG;IAC5D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,UAAU,EAAE,OAAO,CAAC;CACrB,CA2CA;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAChB,EAC9D,WAAW,GAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,MACoB,GAC7D,OAAO,CAAC,eAAe,CAAC,CA6C1B;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAW1C"}
@@ -18,74 +18,108 @@
18
18
  */
19
19
  import { readStdin, runHookAudit } from './core.js';
20
20
  import chalk from 'chalk';
21
- async function main() {
22
- const raw = await readStdin();
23
- if (!raw) {
24
- // No stdin data — nothing to audit
25
- process.exit(0);
21
+ /**
22
+ * Build the Codex feedback payload from audit output.
23
+ */
24
+ export function formatCodexFeedback(output) {
25
+ if (output.violations.length === 0) {
26
+ return { feedback: null, isBlocking: false };
27
+ }
28
+ const criticals = output.violations.filter((v) => v.severity === 'critical');
29
+ if (criticals.length > 0) {
30
+ return {
31
+ feedback: {
32
+ decision: 'block',
33
+ reason: `code-auditor found ${criticals.length} critical violation(s)`,
34
+ violations: output.violations.map((v) => ({
35
+ severity: v.severity,
36
+ message: v.message,
37
+ file: v.file,
38
+ line: v.line,
39
+ rule: v.rule,
40
+ suggestion: v.suggestion || null,
41
+ })),
42
+ },
43
+ isBlocking: true,
44
+ };
45
+ }
46
+ // Non-critical only
47
+ const warnings = output.violations.filter((v) => v.severity === 'warning');
48
+ if (warnings.length > 0) {
49
+ return {
50
+ feedback: {
51
+ decision: 'allow',
52
+ warnings: warnings.map((v) => ({
53
+ message: v.message,
54
+ file: v.file,
55
+ line: v.line,
56
+ suggestion: v.suggestion || null,
57
+ })),
58
+ },
59
+ isBlocking: false,
60
+ };
61
+ }
62
+ return { feedback: null, isBlocking: false };
63
+ }
64
+ /**
65
+ * Process a Codex PostToolUse event and return the hook result.
66
+ * Extracted from main() for testability — tests inject a mock audit function.
67
+ */
68
+ export async function processCodexEvent(rawStdin, auditFn = async (filePaths, projectRoot) => runHookAudit({ filePaths, projectRoot, failOn: 'critical' }), resolveRoot = (event) => event.cwd || process.env.CLAUDE_PROJECT_DIR || process.cwd()) {
69
+ const result = { exitCode: 0, stdout: '', stderr: '' };
70
+ if (!rawStdin) {
71
+ return result;
26
72
  }
27
73
  let event;
28
74
  try {
29
- event = JSON.parse(raw);
75
+ event = JSON.parse(rawStdin);
30
76
  }
31
77
  catch {
32
- console.error(chalk.red('[code-auditor codex-hook] Failed to parse stdin JSON'));
33
- process.exit(0); // Degrade gracefully
78
+ result.stderr = chalk.red('[code-auditor codex-hook] Failed to parse stdin JSON');
79
+ return result;
34
80
  }
35
81
  const filePath = event.tool_input?.file_path || event.tool_input?.path;
36
82
  if (!filePath) {
37
- // No file path — nothing to audit
38
- process.exit(0);
83
+ return result;
39
84
  }
40
- const projectRoot = process.cwd();
85
+ // Determine project root:
86
+ // 1. cwd from the event (native Codex — learn.chatgpt.com/docs/hooks)
87
+ // 2. CLAUDE_PROJECT_DIR env var (Claude Code compat mode)
88
+ // 3. process.cwd() fallback
89
+ const projectRoot = resolveRoot(event);
41
90
  try {
42
- const output = await runHookAudit({
43
- filePaths: [filePath],
44
- projectRoot,
45
- failOn: 'critical',
46
- });
47
- if (output.violations.length > 0) {
48
- // Codex PostToolUse: exit 2 replaces tool result with feedback
49
- // Write violations as JSON to stdout — Codex feeds this back to the agent
50
- const criticals = output.violations.filter((v) => v.severity === 'critical');
51
- if (criticals.length > 0) {
52
- const feedback = {
53
- decision: 'block',
54
- reason: `code-auditor found ${criticals.length} critical violation(s)`,
55
- violations: output.violations.map((v) => ({
56
- severity: v.severity,
57
- message: v.message,
58
- file: v.file,
59
- line: v.line,
60
- rule: v.rule,
61
- suggestion: v.suggestion || null,
62
- })),
63
- };
64
- process.stdout.write(JSON.stringify(feedback, null, 2) + '\n');
65
- process.exit(2);
66
- }
67
- // Non-critical violations: report but don't block
68
- const warnings = output.violations.filter((v) => v.severity === 'warning');
69
- if (warnings.length > 0) {
70
- const advisory = {
71
- decision: 'allow',
72
- warnings: warnings.map((v) => ({
73
- message: v.message,
74
- file: v.file,
75
- line: v.line,
76
- suggestion: v.suggestion || null,
77
- })),
78
- };
79
- process.stdout.write(JSON.stringify(advisory, null, 2) + '\n');
91
+ const output = await auditFn([filePath], projectRoot);
92
+ const { feedback, isBlocking } = formatCodexFeedback(output);
93
+ if (feedback) {
94
+ result.stdout = JSON.stringify(feedback, null, 2) + '\n';
95
+ if (isBlocking) {
96
+ result.exitCode = 2;
80
97
  }
81
98
  }
82
- process.exit(0);
83
99
  }
84
100
  catch (error) {
85
- // Internal error report and exit 0 (never wedge the agent loop on errors)
86
- console.error(chalk.red(`[code-auditor codex-hook] Error: ${error instanceof Error ? error.message : String(error)}`));
87
- process.exit(0);
101
+ result.stderr = chalk.red(`[code-auditor codex-hook] Error: ${error instanceof Error ? error.message : String(error)}`);
102
+ // Internal error never wedge the agent loop
103
+ }
104
+ return result;
105
+ }
106
+ /**
107
+ * CLI entry point — reads stdin, processes, writes result, exits.
108
+ */
109
+ export async function main() {
110
+ const raw = await readStdin();
111
+ const result = await processCodexEvent(raw);
112
+ if (result.stderr) {
113
+ console.error(result.stderr);
88
114
  }
115
+ if (result.stdout) {
116
+ process.stdout.write(result.stdout);
117
+ }
118
+ process.exit(result.exitCode);
119
+ }
120
+ // Auto-run when executed as an entry point (not imported by tests)
121
+ // vitest sets process.env.VITEST; when set, tests call processCodexEvent directly
122
+ if (!process.env.VITEST) {
123
+ main();
89
124
  }
90
- main();
91
125
  //# sourceMappingURL=codex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/hooks/codex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/hooks/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Hotspot Scorer — Spec 13 R2 + R3.
3
+ *
4
+ * Computes hotspot scores as churn-percentile × complexity-percentile for
5
+ * every file and function. Scores are written into the hotspot_scores table
6
+ * and recomputed on every sync (idempotent).
7
+ *
8
+ * Bus-factor risk (R3): files and functions in the top quartile of hotspot
9
+ * scores whose dominant_author_share ≥ 0.9 are flagged.
10
+ */
11
+ import type { HotspotEntry } from '../types.js';
12
+ /**
13
+ * Compute hotspot scores and write them into the hotspot_scores table.
14
+ * Also detects bus-factor risks.
15
+ *
16
+ * @param rawDb The underlying better-sqlite3 database handle.
17
+ * @returns Array of HotspotEntry for external use (CLI / reporting).
18
+ */
19
+ export declare function computeHotspots(rawDb: any): HotspotEntry[];
20
+ //# sourceMappingURL=hotspotScorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hotspotScorer.d.ts","sourceRoot":"","sources":["../../src/hotspots/hotspotScorer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,GAAG,YAAY,EAAE,CA0K1D"}