@opencodereview/core 1.9.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 (453) hide show
  1. package/dist/ai/anthropic-provider.d.ts +41 -0
  2. package/dist/ai/anthropic-provider.d.ts.map +1 -0
  3. package/dist/ai/anthropic-provider.js +139 -0
  4. package/dist/ai/anthropic-provider.js.map +1 -0
  5. package/dist/ai/index.d.ts +39 -0
  6. package/dist/ai/index.d.ts.map +1 -0
  7. package/dist/ai/index.js +41 -0
  8. package/dist/ai/index.js.map +1 -0
  9. package/dist/ai/ollama-provider.d.ts +46 -0
  10. package/dist/ai/ollama-provider.d.ts.map +1 -0
  11. package/dist/ai/ollama-provider.js +149 -0
  12. package/dist/ai/ollama-provider.js.map +1 -0
  13. package/dist/ai/openai-provider.d.ts +44 -0
  14. package/dist/ai/openai-provider.d.ts.map +1 -0
  15. package/dist/ai/openai-provider.js +137 -0
  16. package/dist/ai/openai-provider.js.map +1 -0
  17. package/dist/ai/orchestrator.d.ts +60 -0
  18. package/dist/ai/orchestrator.d.ts.map +1 -0
  19. package/dist/ai/orchestrator.js +188 -0
  20. package/dist/ai/orchestrator.js.map +1 -0
  21. package/dist/ai/prompts.d.ts +27 -0
  22. package/dist/ai/prompts.d.ts.map +1 -0
  23. package/dist/ai/prompts.js +112 -0
  24. package/dist/ai/prompts.js.map +1 -0
  25. package/dist/ai/types.d.ts +75 -0
  26. package/dist/ai/types.d.ts.map +1 -0
  27. package/dist/ai/types.js +10 -0
  28. package/dist/ai/types.js.map +1 -0
  29. package/dist/ai/v4/embedding/index.d.ts +10 -0
  30. package/dist/ai/v4/embedding/index.d.ts.map +1 -0
  31. package/dist/ai/v4/embedding/index.js +10 -0
  32. package/dist/ai/v4/embedding/index.js.map +1 -0
  33. package/dist/ai/v4/embedding/local.d.ts +68 -0
  34. package/dist/ai/v4/embedding/local.d.ts.map +1 -0
  35. package/dist/ai/v4/embedding/local.js +167 -0
  36. package/dist/ai/v4/embedding/local.js.map +1 -0
  37. package/dist/ai/v4/embedding/ollama.d.ts +58 -0
  38. package/dist/ai/v4/embedding/ollama.d.ts.map +1 -0
  39. package/dist/ai/v4/embedding/ollama.js +101 -0
  40. package/dist/ai/v4/embedding/ollama.js.map +1 -0
  41. package/dist/ai/v4/embedding/openai.d.ts +36 -0
  42. package/dist/ai/v4/embedding/openai.d.ts.map +1 -0
  43. package/dist/ai/v4/embedding/openai.js +76 -0
  44. package/dist/ai/v4/embedding/openai.js.map +1 -0
  45. package/dist/ai/v4/embedding/similarity.d.ts +36 -0
  46. package/dist/ai/v4/embedding/similarity.d.ts.map +1 -0
  47. package/dist/ai/v4/embedding/similarity.js +60 -0
  48. package/dist/ai/v4/embedding/similarity.js.map +1 -0
  49. package/dist/ai/v4/index.d.ts +51 -0
  50. package/dist/ai/v4/index.d.ts.map +1 -0
  51. package/dist/ai/v4/index.js +54 -0
  52. package/dist/ai/v4/index.js.map +1 -0
  53. package/dist/ai/v4/llm/anthropic.d.ts +38 -0
  54. package/dist/ai/v4/llm/anthropic.d.ts.map +1 -0
  55. package/dist/ai/v4/llm/anthropic.js +86 -0
  56. package/dist/ai/v4/llm/anthropic.js.map +1 -0
  57. package/dist/ai/v4/llm/index.d.ts +9 -0
  58. package/dist/ai/v4/llm/index.d.ts.map +1 -0
  59. package/dist/ai/v4/llm/index.js +9 -0
  60. package/dist/ai/v4/llm/index.js.map +1 -0
  61. package/dist/ai/v4/llm/ollama.d.ts +39 -0
  62. package/dist/ai/v4/llm/ollama.d.ts.map +1 -0
  63. package/dist/ai/v4/llm/ollama.js +95 -0
  64. package/dist/ai/v4/llm/ollama.js.map +1 -0
  65. package/dist/ai/v4/llm/openai.d.ts +38 -0
  66. package/dist/ai/v4/llm/openai.d.ts.map +1 -0
  67. package/dist/ai/v4/llm/openai.js +88 -0
  68. package/dist/ai/v4/llm/openai.js.map +1 -0
  69. package/dist/ai/v4/patterns/defect-patterns.d.ts +57 -0
  70. package/dist/ai/v4/patterns/defect-patterns.d.ts.map +1 -0
  71. package/dist/ai/v4/patterns/defect-patterns.js +331 -0
  72. package/dist/ai/v4/patterns/defect-patterns.js.map +1 -0
  73. package/dist/ai/v4/patterns/index.d.ts +8 -0
  74. package/dist/ai/v4/patterns/index.d.ts.map +1 -0
  75. package/dist/ai/v4/patterns/index.js +7 -0
  76. package/dist/ai/v4/patterns/index.js.map +1 -0
  77. package/dist/ai/v4/pipeline.d.ts +74 -0
  78. package/dist/ai/v4/pipeline.d.ts.map +1 -0
  79. package/dist/ai/v4/pipeline.js +381 -0
  80. package/dist/ai/v4/pipeline.js.map +1 -0
  81. package/dist/ai/v4/sla.d.ts +62 -0
  82. package/dist/ai/v4/sla.d.ts.map +1 -0
  83. package/dist/ai/v4/sla.js +136 -0
  84. package/dist/ai/v4/sla.js.map +1 -0
  85. package/dist/ai/v4/types.d.ts +117 -0
  86. package/dist/ai/v4/types.d.ts.map +1 -0
  87. package/dist/ai/v4/types.js +16 -0
  88. package/dist/ai/v4/types.js.map +1 -0
  89. package/dist/ai-healer/prompt-builder.d.ts +33 -0
  90. package/dist/ai-healer/prompt-builder.d.ts.map +1 -0
  91. package/dist/ai-healer/prompt-builder.js +89 -0
  92. package/dist/ai-healer/prompt-builder.js.map +1 -0
  93. package/dist/config/defaults.d.ts +14 -0
  94. package/dist/config/defaults.d.ts.map +1 -0
  95. package/dist/config/defaults.js +57 -0
  96. package/dist/config/defaults.js.map +1 -0
  97. package/dist/config/index.d.ts +8 -0
  98. package/dist/config/index.d.ts.map +1 -0
  99. package/dist/config/index.js +6 -0
  100. package/dist/config/index.js.map +1 -0
  101. package/dist/config/loader.d.ts +33 -0
  102. package/dist/config/loader.d.ts.map +1 -0
  103. package/dist/config/loader.js +245 -0
  104. package/dist/config/loader.js.map +1 -0
  105. package/dist/config/types.d.ts +58 -0
  106. package/dist/config/types.d.ts.map +1 -0
  107. package/dist/config/types.js +7 -0
  108. package/dist/config/types.js.map +1 -0
  109. package/dist/config/v4-config.d.ts +77 -0
  110. package/dist/config/v4-config.d.ts.map +1 -0
  111. package/dist/config/v4-config.js +336 -0
  112. package/dist/config/v4-config.js.map +1 -0
  113. package/dist/detectors/ai-detector.d.ts +38 -0
  114. package/dist/detectors/ai-detector.d.ts.map +1 -0
  115. package/dist/detectors/ai-detector.js +62 -0
  116. package/dist/detectors/ai-detector.js.map +1 -0
  117. package/dist/detectors/context-break.d.ts +57 -0
  118. package/dist/detectors/context-break.d.ts.map +1 -0
  119. package/dist/detectors/context-break.js +199 -0
  120. package/dist/detectors/context-break.js.map +1 -0
  121. package/dist/detectors/deep-hallucination.d.ts +42 -0
  122. package/dist/detectors/deep-hallucination.d.ts.map +1 -0
  123. package/dist/detectors/deep-hallucination.js +297 -0
  124. package/dist/detectors/deep-hallucination.js.map +1 -0
  125. package/dist/detectors/duplication.d.ts +61 -0
  126. package/dist/detectors/duplication.d.ts.map +1 -0
  127. package/dist/detectors/duplication.js +204 -0
  128. package/dist/detectors/duplication.js.map +1 -0
  129. package/dist/detectors/hallucination.d.ts +80 -0
  130. package/dist/detectors/hallucination.d.ts.map +1 -0
  131. package/dist/detectors/hallucination.js +350 -0
  132. package/dist/detectors/hallucination.js.map +1 -0
  133. package/dist/detectors/index.d.ts +35 -0
  134. package/dist/detectors/index.d.ts.map +1 -0
  135. package/dist/detectors/index.js +33 -0
  136. package/dist/detectors/index.js.map +1 -0
  137. package/dist/detectors/logic-gap.d.ts +58 -0
  138. package/dist/detectors/logic-gap.d.ts.map +1 -0
  139. package/dist/detectors/logic-gap.js +284 -0
  140. package/dist/detectors/logic-gap.js.map +1 -0
  141. package/dist/detectors/over-engineering.d.ts +44 -0
  142. package/dist/detectors/over-engineering.d.ts.map +1 -0
  143. package/dist/detectors/over-engineering.js +257 -0
  144. package/dist/detectors/over-engineering.js.map +1 -0
  145. package/dist/detectors/security-pattern.d.ts +43 -0
  146. package/dist/detectors/security-pattern.d.ts.map +1 -0
  147. package/dist/detectors/security-pattern.js +235 -0
  148. package/dist/detectors/security-pattern.js.map +1 -0
  149. package/dist/detectors/stale-api.d.ts +44 -0
  150. package/dist/detectors/stale-api.d.ts.map +1 -0
  151. package/dist/detectors/stale-api.js +160 -0
  152. package/dist/detectors/stale-api.js.map +1 -0
  153. package/dist/detectors/type-safety.d.ts +41 -0
  154. package/dist/detectors/type-safety.d.ts.map +1 -0
  155. package/dist/detectors/type-safety.js +306 -0
  156. package/dist/detectors/type-safety.js.map +1 -0
  157. package/dist/detectors/v4/context-coherence.d.ts +67 -0
  158. package/dist/detectors/v4/context-coherence.d.ts.map +1 -0
  159. package/dist/detectors/v4/context-coherence.js +319 -0
  160. package/dist/detectors/v4/context-coherence.js.map +1 -0
  161. package/dist/detectors/v4/hallucinated-import.d.ts +52 -0
  162. package/dist/detectors/v4/hallucinated-import.d.ts.map +1 -0
  163. package/dist/detectors/v4/hallucinated-import.js +206 -0
  164. package/dist/detectors/v4/hallucinated-import.js.map +1 -0
  165. package/dist/detectors/v4/index.d.ts +28 -0
  166. package/dist/detectors/v4/index.d.ts.map +1 -0
  167. package/dist/detectors/v4/index.js +40 -0
  168. package/dist/detectors/v4/index.js.map +1 -0
  169. package/dist/detectors/v4/over-engineering.d.ts +69 -0
  170. package/dist/detectors/v4/over-engineering.d.ts.map +1 -0
  171. package/dist/detectors/v4/over-engineering.js +234 -0
  172. package/dist/detectors/v4/over-engineering.js.map +1 -0
  173. package/dist/detectors/v4/security-pattern.d.ts +46 -0
  174. package/dist/detectors/v4/security-pattern.d.ts.map +1 -0
  175. package/dist/detectors/v4/security-pattern.js +233 -0
  176. package/dist/detectors/v4/security-pattern.js.map +1 -0
  177. package/dist/detectors/v4/stale-api.d.ts +59 -0
  178. package/dist/detectors/v4/stale-api.d.ts.map +1 -0
  179. package/dist/detectors/v4/stale-api.js +470 -0
  180. package/dist/detectors/v4/stale-api.js.map +1 -0
  181. package/dist/detectors/v4/types.d.ts +74 -0
  182. package/dist/detectors/v4/types.d.ts.map +1 -0
  183. package/dist/detectors/v4/types.js +10 -0
  184. package/dist/detectors/v4/types.js.map +1 -0
  185. package/dist/diff/filter.d.ts +35 -0
  186. package/dist/diff/filter.d.ts.map +1 -0
  187. package/dist/diff/filter.js +65 -0
  188. package/dist/diff/filter.js.map +1 -0
  189. package/dist/diff/index.d.ts +9 -0
  190. package/dist/diff/index.d.ts.map +1 -0
  191. package/dist/diff/index.js +8 -0
  192. package/dist/diff/index.js.map +1 -0
  193. package/dist/diff/parser.d.ts +61 -0
  194. package/dist/diff/parser.d.ts.map +1 -0
  195. package/dist/diff/parser.js +203 -0
  196. package/dist/diff/parser.js.map +1 -0
  197. package/dist/i18n/en.d.ts +18 -0
  198. package/dist/i18n/en.d.ts.map +1 -0
  199. package/dist/i18n/en.js +83 -0
  200. package/dist/i18n/en.js.map +1 -0
  201. package/dist/i18n/index.d.ts +13 -0
  202. package/dist/i18n/index.d.ts.map +1 -0
  203. package/dist/i18n/index.js +14 -0
  204. package/dist/i18n/index.js.map +1 -0
  205. package/dist/i18n/provider.d.ts +54 -0
  206. package/dist/i18n/provider.d.ts.map +1 -0
  207. package/dist/i18n/provider.js +88 -0
  208. package/dist/i18n/provider.js.map +1 -0
  209. package/dist/i18n/types.d.ts +37 -0
  210. package/dist/i18n/types.d.ts.map +1 -0
  211. package/dist/i18n/types.js +10 -0
  212. package/dist/i18n/types.js.map +1 -0
  213. package/dist/i18n/zh.d.ts +14 -0
  214. package/dist/i18n/zh.d.ts.map +1 -0
  215. package/dist/i18n/zh.js +83 -0
  216. package/dist/i18n/zh.js.map +1 -0
  217. package/dist/index.d.ts +113 -0
  218. package/dist/index.d.ts.map +1 -0
  219. package/dist/index.js +106 -0
  220. package/dist/index.js.map +1 -0
  221. package/dist/ir/index.d.ts +10 -0
  222. package/dist/ir/index.d.ts.map +1 -0
  223. package/dist/ir/index.js +9 -0
  224. package/dist/ir/index.js.map +1 -0
  225. package/dist/ir/types.d.ts +126 -0
  226. package/dist/ir/types.d.ts.map +1 -0
  227. package/dist/ir/types.js +33 -0
  228. package/dist/ir/types.js.map +1 -0
  229. package/dist/languages/go/index.d.ts +7 -0
  230. package/dist/languages/go/index.d.ts.map +1 -0
  231. package/dist/languages/go/index.js +7 -0
  232. package/dist/languages/go/index.js.map +1 -0
  233. package/dist/languages/go/parser.d.ts +89 -0
  234. package/dist/languages/go/parser.d.ts.map +1 -0
  235. package/dist/languages/go/parser.js +509 -0
  236. package/dist/languages/go/parser.js.map +1 -0
  237. package/dist/languages/index.d.ts +13 -0
  238. package/dist/languages/index.d.ts.map +1 -0
  239. package/dist/languages/index.js +14 -0
  240. package/dist/languages/index.js.map +1 -0
  241. package/dist/languages/java/index.d.ts +7 -0
  242. package/dist/languages/java/index.d.ts.map +1 -0
  243. package/dist/languages/java/index.js +7 -0
  244. package/dist/languages/java/index.js.map +1 -0
  245. package/dist/languages/java/parser.d.ts +82 -0
  246. package/dist/languages/java/parser.d.ts.map +1 -0
  247. package/dist/languages/java/parser.js +492 -0
  248. package/dist/languages/java/parser.js.map +1 -0
  249. package/dist/languages/kotlin/index.d.ts +7 -0
  250. package/dist/languages/kotlin/index.d.ts.map +1 -0
  251. package/dist/languages/kotlin/index.js +7 -0
  252. package/dist/languages/kotlin/index.js.map +1 -0
  253. package/dist/languages/kotlin/parser.d.ts +84 -0
  254. package/dist/languages/kotlin/parser.d.ts.map +1 -0
  255. package/dist/languages/kotlin/parser.js +507 -0
  256. package/dist/languages/kotlin/parser.js.map +1 -0
  257. package/dist/languages/python/index.d.ts +7 -0
  258. package/dist/languages/python/index.d.ts.map +1 -0
  259. package/dist/languages/python/index.js +7 -0
  260. package/dist/languages/python/index.js.map +1 -0
  261. package/dist/languages/python/parser.d.ts +91 -0
  262. package/dist/languages/python/parser.d.ts.map +1 -0
  263. package/dist/languages/python/parser.js +375 -0
  264. package/dist/languages/python/parser.js.map +1 -0
  265. package/dist/languages/registry.d.ts +81 -0
  266. package/dist/languages/registry.d.ts.map +1 -0
  267. package/dist/languages/registry.js +150 -0
  268. package/dist/languages/registry.js.map +1 -0
  269. package/dist/languages/types.d.ts +137 -0
  270. package/dist/languages/types.d.ts.map +1 -0
  271. package/dist/languages/types.js +10 -0
  272. package/dist/languages/types.js.map +1 -0
  273. package/dist/languages/typescript/index.d.ts +7 -0
  274. package/dist/languages/typescript/index.d.ts.map +1 -0
  275. package/dist/languages/typescript/index.js +7 -0
  276. package/dist/languages/typescript/index.js.map +1 -0
  277. package/dist/languages/typescript/parser.d.ts +51 -0
  278. package/dist/languages/typescript/parser.d.ts.map +1 -0
  279. package/dist/languages/typescript/parser.js +286 -0
  280. package/dist/languages/typescript/parser.js.map +1 -0
  281. package/dist/license/generator.d.ts +43 -0
  282. package/dist/license/generator.d.ts.map +1 -0
  283. package/dist/license/generator.js +72 -0
  284. package/dist/license/generator.js.map +1 -0
  285. package/dist/license/index.d.ts +11 -0
  286. package/dist/license/index.d.ts.map +1 -0
  287. package/dist/license/index.js +12 -0
  288. package/dist/license/index.js.map +1 -0
  289. package/dist/license/types.d.ts +85 -0
  290. package/dist/license/types.d.ts.map +1 -0
  291. package/dist/license/types.js +10 -0
  292. package/dist/license/types.js.map +1 -0
  293. package/dist/license/validator.d.ts +77 -0
  294. package/dist/license/validator.d.ts.map +1 -0
  295. package/dist/license/validator.js +275 -0
  296. package/dist/license/validator.js.map +1 -0
  297. package/dist/parser/extractor.d.ts +31 -0
  298. package/dist/parser/extractor.d.ts.map +1 -0
  299. package/dist/parser/extractor.js +10 -0
  300. package/dist/parser/extractor.js.map +1 -0
  301. package/dist/parser/extractors/go.d.ts +21 -0
  302. package/dist/parser/extractors/go.d.ts.map +1 -0
  303. package/dist/parser/extractors/go.js +569 -0
  304. package/dist/parser/extractors/go.js.map +1 -0
  305. package/dist/parser/extractors/index.d.ts +13 -0
  306. package/dist/parser/extractors/index.d.ts.map +1 -0
  307. package/dist/parser/extractors/index.js +13 -0
  308. package/dist/parser/extractors/index.js.map +1 -0
  309. package/dist/parser/extractors/java.d.ts +24 -0
  310. package/dist/parser/extractors/java.d.ts.map +1 -0
  311. package/dist/parser/extractors/java.js +611 -0
  312. package/dist/parser/extractors/java.js.map +1 -0
  313. package/dist/parser/extractors/kotlin.d.ts +25 -0
  314. package/dist/parser/extractors/kotlin.d.ts.map +1 -0
  315. package/dist/parser/extractors/kotlin.js +665 -0
  316. package/dist/parser/extractors/kotlin.js.map +1 -0
  317. package/dist/parser/extractors/python.d.ts +21 -0
  318. package/dist/parser/extractors/python.d.ts.map +1 -0
  319. package/dist/parser/extractors/python.js +514 -0
  320. package/dist/parser/extractors/python.js.map +1 -0
  321. package/dist/parser/extractors/typescript.d.ts +23 -0
  322. package/dist/parser/extractors/typescript.d.ts.map +1 -0
  323. package/dist/parser/extractors/typescript.js +664 -0
  324. package/dist/parser/extractors/typescript.js.map +1 -0
  325. package/dist/parser/index.d.ts +15 -0
  326. package/dist/parser/index.d.ts.map +1 -0
  327. package/dist/parser/index.js +14 -0
  328. package/dist/parser/index.js.map +1 -0
  329. package/dist/parser/manager.d.ts +50 -0
  330. package/dist/parser/manager.d.ts.map +1 -0
  331. package/dist/parser/manager.js +159 -0
  332. package/dist/parser/manager.js.map +1 -0
  333. package/dist/registry/builtins/go-builtins.d.ts +13 -0
  334. package/dist/registry/builtins/go-builtins.d.ts.map +1 -0
  335. package/dist/registry/builtins/go-builtins.js +63 -0
  336. package/dist/registry/builtins/go-builtins.js.map +1 -0
  337. package/dist/registry/builtins/java-builtins.d.ts +10 -0
  338. package/dist/registry/builtins/java-builtins.d.ts.map +1 -0
  339. package/dist/registry/builtins/java-builtins.js +59 -0
  340. package/dist/registry/builtins/java-builtins.js.map +1 -0
  341. package/dist/registry/builtins/kotlin-builtins.d.ts +10 -0
  342. package/dist/registry/builtins/kotlin-builtins.d.ts.map +1 -0
  343. package/dist/registry/builtins/kotlin-builtins.js +38 -0
  344. package/dist/registry/builtins/kotlin-builtins.js.map +1 -0
  345. package/dist/registry/builtins/node-builtins.d.ts +10 -0
  346. package/dist/registry/builtins/node-builtins.d.ts.map +1 -0
  347. package/dist/registry/builtins/node-builtins.js +36 -0
  348. package/dist/registry/builtins/node-builtins.js.map +1 -0
  349. package/dist/registry/builtins/python-builtins.d.ts +10 -0
  350. package/dist/registry/builtins/python-builtins.d.ts.map +1 -0
  351. package/dist/registry/builtins/python-builtins.js +43 -0
  352. package/dist/registry/builtins/python-builtins.js.map +1 -0
  353. package/dist/registry/cache.d.ts +53 -0
  354. package/dist/registry/cache.d.ts.map +1 -0
  355. package/dist/registry/cache.js +147 -0
  356. package/dist/registry/cache.js.map +1 -0
  357. package/dist/registry/go-registry.d.ts +52 -0
  358. package/dist/registry/go-registry.d.ts.map +1 -0
  359. package/dist/registry/go-registry.js +148 -0
  360. package/dist/registry/go-registry.js.map +1 -0
  361. package/dist/registry/index.d.ts +18 -0
  362. package/dist/registry/index.d.ts.map +1 -0
  363. package/dist/registry/index.js +21 -0
  364. package/dist/registry/index.js.map +1 -0
  365. package/dist/registry/maven-registry.d.ts +57 -0
  366. package/dist/registry/maven-registry.d.ts.map +1 -0
  367. package/dist/registry/maven-registry.js +155 -0
  368. package/dist/registry/maven-registry.js.map +1 -0
  369. package/dist/registry/npm-registry.d.ts +40 -0
  370. package/dist/registry/npm-registry.d.ts.map +1 -0
  371. package/dist/registry/npm-registry.js +155 -0
  372. package/dist/registry/npm-registry.js.map +1 -0
  373. package/dist/registry/pypi-registry.d.ts +49 -0
  374. package/dist/registry/pypi-registry.d.ts.map +1 -0
  375. package/dist/registry/pypi-registry.js +175 -0
  376. package/dist/registry/pypi-registry.js.map +1 -0
  377. package/dist/registry/registry-manager.d.ts +45 -0
  378. package/dist/registry/registry-manager.d.ts.map +1 -0
  379. package/dist/registry/registry-manager.js +107 -0
  380. package/dist/registry/registry-manager.js.map +1 -0
  381. package/dist/registry/types.d.ts +83 -0
  382. package/dist/registry/types.d.ts.map +1 -0
  383. package/dist/registry/types.js +12 -0
  384. package/dist/registry/types.js.map +1 -0
  385. package/dist/reporter/html-reporter.d.ts +20 -0
  386. package/dist/reporter/html-reporter.d.ts.map +1 -0
  387. package/dist/reporter/html-reporter.js +612 -0
  388. package/dist/reporter/html-reporter.js.map +1 -0
  389. package/dist/reporter/index.d.ts +28 -0
  390. package/dist/reporter/index.d.ts.map +1 -0
  391. package/dist/reporter/index.js +48 -0
  392. package/dist/reporter/index.js.map +1 -0
  393. package/dist/reporter/markdown-reporter.d.ts +16 -0
  394. package/dist/reporter/markdown-reporter.d.ts.map +1 -0
  395. package/dist/reporter/markdown-reporter.js +182 -0
  396. package/dist/reporter/markdown-reporter.js.map +1 -0
  397. package/dist/reporter/sarif-reporter.d.ts +67 -0
  398. package/dist/reporter/sarif-reporter.d.ts.map +1 -0
  399. package/dist/reporter/sarif-reporter.js +73 -0
  400. package/dist/reporter/sarif-reporter.js.map +1 -0
  401. package/dist/reporter/terminal-reporter.d.ts +14 -0
  402. package/dist/reporter/terminal-reporter.d.ts.map +1 -0
  403. package/dist/reporter/terminal-reporter.js +126 -0
  404. package/dist/reporter/terminal-reporter.js.map +1 -0
  405. package/dist/reporter/types.d.ts +43 -0
  406. package/dist/reporter/types.d.ts.map +1 -0
  407. package/dist/reporter/types.js +10 -0
  408. package/dist/reporter/types.js.map +1 -0
  409. package/dist/reporter/v4-html.d.ts +24 -0
  410. package/dist/reporter/v4-html.d.ts.map +1 -0
  411. package/dist/reporter/v4-html.js +359 -0
  412. package/dist/reporter/v4-html.js.map +1 -0
  413. package/dist/reporter/v4-terminal.d.ts +55 -0
  414. package/dist/reporter/v4-terminal.d.ts.map +1 -0
  415. package/dist/reporter/v4-terminal.js +199 -0
  416. package/dist/reporter/v4-terminal.js.map +1 -0
  417. package/dist/scanner/index.d.ts +9 -0
  418. package/dist/scanner/index.d.ts.map +1 -0
  419. package/dist/scanner/index.js +9 -0
  420. package/dist/scanner/index.js.map +1 -0
  421. package/dist/scanner/v4-scanner.d.ts +162 -0
  422. package/dist/scanner/v4-scanner.d.ts.map +1 -0
  423. package/dist/scanner/v4-scanner.js +327 -0
  424. package/dist/scanner/v4-scanner.js.map +1 -0
  425. package/dist/scorer/report.d.ts +52 -0
  426. package/dist/scorer/report.d.ts.map +1 -0
  427. package/dist/scorer/report.js +347 -0
  428. package/dist/scorer/report.js.map +1 -0
  429. package/dist/scorer/scoring-engine.d.ts +170 -0
  430. package/dist/scorer/scoring-engine.d.ts.map +1 -0
  431. package/dist/scorer/scoring-engine.js +308 -0
  432. package/dist/scorer/scoring-engine.js.map +1 -0
  433. package/dist/scorer/v4-adapter.d.ts +87 -0
  434. package/dist/scorer/v4-adapter.d.ts.map +1 -0
  435. package/dist/scorer/v4-adapter.js +145 -0
  436. package/dist/scorer/v4-adapter.js.map +1 -0
  437. package/dist/sla/index.d.ts +7 -0
  438. package/dist/sla/index.d.ts.map +1 -0
  439. package/dist/sla/index.js +6 -0
  440. package/dist/sla/index.js.map +1 -0
  441. package/dist/sla/tracker.d.ts +70 -0
  442. package/dist/sla/tracker.d.ts.map +1 -0
  443. package/dist/sla/tracker.js +151 -0
  444. package/dist/sla/tracker.js.map +1 -0
  445. package/dist/sla/types.d.ts +67 -0
  446. package/dist/sla/types.d.ts.map +1 -0
  447. package/dist/sla/types.js +42 -0
  448. package/dist/sla/types.js.map +1 -0
  449. package/dist/types.d.ts +172 -0
  450. package/dist/types.d.ts.map +1 -0
  451. package/dist/types.js +69 -0
  452. package/dist/types.js.map +1 -0
  453. package/package.json +97 -0
@@ -0,0 +1,612 @@
1
+ /**
2
+ * HTML Reporter
3
+ *
4
+ * Generates a self-contained HTML report file with no external dependencies.
5
+ * Inspired by Google Lighthouse report design.
6
+ *
7
+ * Features:
8
+ * - Overall score gauge with grade
9
+ * - Dimension bar charts (pure CSS)
10
+ * - Issue summary by severity
11
+ * - Issue list with collapsible source code
12
+ * - SLA metrics panel
13
+ * - Light/dark theme support
14
+ * - Responsive layout
15
+ *
16
+ * @since 0.3.0
17
+ */
18
+ // ─── Color System ──────────────────────────────────────────────────
19
+ const GRADE_COLORS = {
20
+ 'A+': '#22c55e',
21
+ 'A': '#22c55e',
22
+ 'B': '#3b82f6',
23
+ 'C': '#eab308',
24
+ 'D': '#f97316',
25
+ 'F': '#ef4444',
26
+ };
27
+ const SEVERITY_COLORS = {
28
+ critical: '#ef4444',
29
+ high: '#f97316',
30
+ medium: '#eab308',
31
+ low: '#3b82f6',
32
+ info: '#6b7280',
33
+ };
34
+ // ─── Helper Functions ──────────────────────────────────────────────
35
+ function escapeHtml(text) {
36
+ return text
37
+ .replace(/&/g, '&')
38
+ .replace(/</g, '&lt;')
39
+ .replace(/>/g, '&gt;')
40
+ .replace(/"/g, '&quot;')
41
+ .replace(/'/g, '&#039;');
42
+ }
43
+ function gradeColor(grade) {
44
+ return GRADE_COLORS[grade] || '#6b7280';
45
+ }
46
+ function severityColor(severity) {
47
+ return SEVERITY_COLORS[severity] || '#6b7280';
48
+ }
49
+ function slaLevelName(level) {
50
+ switch (level) {
51
+ case 'L1': return 'Fast Scan';
52
+ case 'L2': return 'Standard';
53
+ case 'L3': return 'Deep Scan';
54
+ default: return level;
55
+ }
56
+ }
57
+ function severityOrder(severity) {
58
+ switch (severity) {
59
+ case 'critical': return 0;
60
+ case 'high': return 1;
61
+ case 'medium': return 2;
62
+ case 'low': return 3;
63
+ case 'info': return 4;
64
+ default: return 5;
65
+ }
66
+ }
67
+ // ─── CSS Styles ────────────────────────────────────────────────────
68
+ function generateCSS(theme) {
69
+ const isDark = theme === 'dark';
70
+ return `
71
+ :root {
72
+ --bg-primary: ${isDark ? '#0f172a' : '#ffffff'};
73
+ --bg-secondary: ${isDark ? '#1e293b' : '#f8fafc'};
74
+ --bg-card: ${isDark ? '#1e293b' : '#ffffff'};
75
+ --text-primary: ${isDark ? '#f1f5f9' : '#0f172a'};
76
+ --text-secondary: ${isDark ? '#94a3b8' : '#64748b'};
77
+ --border: ${isDark ? '#334155' : '#e2e8f0'};
78
+ --shadow: ${isDark ? '0 1px 3px rgba(0,0,0,0.4)' : '0 1px 3px rgba(0,0,0,0.1)'};
79
+ }
80
+
81
+ * { margin: 0; padding: 0; box-sizing: border-box; }
82
+
83
+ body {
84
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
85
+ background: var(--bg-primary);
86
+ color: var(--text-primary);
87
+ line-height: 1.6;
88
+ padding: 0;
89
+ }
90
+
91
+ .container {
92
+ max-width: 1100px;
93
+ margin: 0 auto;
94
+ padding: 24px;
95
+ }
96
+
97
+ .header {
98
+ text-align: center;
99
+ padding: 32px 0 24px;
100
+ border-bottom: 1px solid var(--border);
101
+ margin-bottom: 32px;
102
+ }
103
+
104
+ .header h1 {
105
+ font-size: 24px;
106
+ font-weight: 700;
107
+ margin-bottom: 4px;
108
+ }
109
+
110
+ .header .subtitle {
111
+ color: var(--text-secondary);
112
+ font-size: 14px;
113
+ }
114
+
115
+ .score-section {
116
+ display: flex;
117
+ align-items: center;
118
+ justify-content: center;
119
+ gap: 48px;
120
+ margin-bottom: 32px;
121
+ flex-wrap: wrap;
122
+ }
123
+
124
+ .score-gauge {
125
+ width: 160px;
126
+ height: 160px;
127
+ }
128
+
129
+ .score-gauge circle {
130
+ transition: stroke-dashoffset 0.8s ease-in-out;
131
+ }
132
+
133
+ .score-info {
134
+ text-align: left;
135
+ }
136
+
137
+ .score-info .grade {
138
+ font-size: 36px;
139
+ font-weight: 800;
140
+ margin-bottom: 4px;
141
+ }
142
+
143
+ .score-info .status {
144
+ font-size: 16px;
145
+ font-weight: 600;
146
+ margin-bottom: 12px;
147
+ }
148
+
149
+ .score-info .meta {
150
+ color: var(--text-secondary);
151
+ font-size: 14px;
152
+ line-height: 1.8;
153
+ }
154
+
155
+ .card {
156
+ background: var(--bg-card);
157
+ border: 1px solid var(--border);
158
+ border-radius: 8px;
159
+ padding: 24px;
160
+ margin-bottom: 24px;
161
+ box-shadow: var(--shadow);
162
+ }
163
+
164
+ .card h2 {
165
+ font-size: 18px;
166
+ font-weight: 700;
167
+ margin-bottom: 16px;
168
+ padding-bottom: 8px;
169
+ border-bottom: 1px solid var(--border);
170
+ }
171
+
172
+ .dimensions-grid {
173
+ display: grid;
174
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
175
+ gap: 16px;
176
+ }
177
+
178
+ .dim-card {
179
+ background: var(--bg-secondary);
180
+ border-radius: 6px;
181
+ padding: 16px;
182
+ }
183
+
184
+ .dim-card .dim-header {
185
+ display: flex;
186
+ justify-content: space-between;
187
+ align-items: center;
188
+ margin-bottom: 8px;
189
+ }
190
+
191
+ .dim-card .dim-name {
192
+ font-weight: 600;
193
+ font-size: 14px;
194
+ }
195
+
196
+ .dim-card .dim-score {
197
+ font-weight: 700;
198
+ font-size: 14px;
199
+ }
200
+
201
+ .bar-track {
202
+ width: 100%;
203
+ height: 8px;
204
+ background: var(--border);
205
+ border-radius: 4px;
206
+ overflow: hidden;
207
+ }
208
+
209
+ .bar-fill {
210
+ height: 100%;
211
+ border-radius: 4px;
212
+ transition: width 0.6s ease-in-out;
213
+ }
214
+
215
+ .dim-card .dim-issues {
216
+ color: var(--text-secondary);
217
+ font-size: 12px;
218
+ margin-top: 6px;
219
+ }
220
+
221
+ .severity-grid {
222
+ display: flex;
223
+ gap: 12px;
224
+ flex-wrap: wrap;
225
+ }
226
+
227
+ .severity-badge {
228
+ display: inline-flex;
229
+ align-items: center;
230
+ gap: 8px;
231
+ padding: 8px 16px;
232
+ border-radius: 20px;
233
+ font-weight: 600;
234
+ font-size: 14px;
235
+ }
236
+
237
+ .severity-dot {
238
+ width: 10px;
239
+ height: 10px;
240
+ border-radius: 50%;
241
+ }
242
+
243
+ .issue-list {
244
+ list-style: none;
245
+ }
246
+
247
+ .issue-item {
248
+ border: 1px solid var(--border);
249
+ border-radius: 6px;
250
+ margin-bottom: 8px;
251
+ overflow: hidden;
252
+ }
253
+
254
+ .issue-header {
255
+ display: flex;
256
+ align-items: center;
257
+ padding: 12px 16px;
258
+ cursor: pointer;
259
+ gap: 12px;
260
+ background: var(--bg-secondary);
261
+ user-select: none;
262
+ }
263
+
264
+ .issue-header:hover {
265
+ opacity: 0.85;
266
+ }
267
+
268
+ .issue-sev {
269
+ display: inline-block;
270
+ padding: 2px 8px;
271
+ border-radius: 4px;
272
+ font-size: 11px;
273
+ font-weight: 700;
274
+ text-transform: uppercase;
275
+ color: #fff;
276
+ flex-shrink: 0;
277
+ }
278
+
279
+ .issue-file {
280
+ color: var(--text-secondary);
281
+ font-family: monospace;
282
+ font-size: 13px;
283
+ flex-shrink: 0;
284
+ }
285
+
286
+ .issue-msg {
287
+ flex: 1;
288
+ font-size: 14px;
289
+ }
290
+
291
+ .issue-toggle {
292
+ color: var(--text-secondary);
293
+ font-size: 12px;
294
+ flex-shrink: 0;
295
+ }
296
+
297
+ .issue-body {
298
+ display: none;
299
+ padding: 16px;
300
+ border-top: 1px solid var(--border);
301
+ font-size: 14px;
302
+ }
303
+
304
+ .issue-body.open {
305
+ display: block;
306
+ }
307
+
308
+ .issue-detail {
309
+ margin-bottom: 8px;
310
+ }
311
+
312
+ .issue-detail strong {
313
+ display: inline-block;
314
+ min-width: 100px;
315
+ color: var(--text-secondary);
316
+ }
317
+
318
+ .issue-source {
319
+ background: ${isDark ? '#0d1117' : '#f6f8fa'};
320
+ border: 1px solid var(--border);
321
+ border-radius: 4px;
322
+ padding: 12px;
323
+ font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
324
+ font-size: 13px;
325
+ overflow-x: auto;
326
+ white-space: pre;
327
+ margin-top: 8px;
328
+ }
329
+
330
+ .sla-table {
331
+ width: 100%;
332
+ border-collapse: collapse;
333
+ }
334
+
335
+ .sla-table th,
336
+ .sla-table td {
337
+ padding: 8px 12px;
338
+ text-align: left;
339
+ border-bottom: 1px solid var(--border);
340
+ font-size: 14px;
341
+ }
342
+
343
+ .sla-table th {
344
+ color: var(--text-secondary);
345
+ font-weight: 600;
346
+ }
347
+
348
+ .footer {
349
+ text-align: center;
350
+ color: var(--text-secondary);
351
+ font-size: 13px;
352
+ padding: 24px 0;
353
+ border-top: 1px solid var(--border);
354
+ margin-top: 32px;
355
+ }
356
+
357
+ .footer a {
358
+ color: var(--text-secondary);
359
+ text-decoration: underline;
360
+ }
361
+
362
+ @media (max-width: 640px) {
363
+ .container { padding: 16px; }
364
+ .score-section { gap: 24px; }
365
+ .score-gauge { width: 120px; height: 120px; }
366
+ .score-info .grade { font-size: 28px; }
367
+ .dimensions-grid { grid-template-columns: 1fr; }
368
+ }
369
+ `;
370
+ }
371
+ // ─── SVG Gauge ─────────────────────────────────────────────────────
372
+ function scoreGaugeSVG(score, grade) {
373
+ const color = gradeColor(grade);
374
+ const circumference = 2 * Math.PI * 50;
375
+ const offset = circumference * (1 - score / 100);
376
+ return `<svg class="score-gauge" viewBox="0 0 120 120">
377
+ <circle cx="60" cy="60" r="50" fill="none" stroke="var(--border)" stroke-width="8"/>
378
+ <circle cx="60" cy="60" r="50" fill="none"
379
+ stroke="${color}" stroke-width="8"
380
+ stroke-dasharray="${circumference.toFixed(2)}"
381
+ stroke-dashoffset="${offset.toFixed(2)}"
382
+ stroke-linecap="round"
383
+ transform="rotate(-90 60 60)"/>
384
+ <text x="60" y="52" text-anchor="middle" font-size="28" font-weight="700"
385
+ fill="var(--text-primary)">${score}</text>
386
+ <text x="60" y="72" text-anchor="middle" font-size="13"
387
+ fill="var(--text-secondary)">Grade ${escapeHtml(grade)}</text>
388
+ </svg>`;
389
+ }
390
+ // ─── Section Generators ────────────────────────────────────────────
391
+ function headerSection(data) {
392
+ return `
393
+ <div class="header">
394
+ <h1>🔬 Open Code Review Report</h1>
395
+ <div class="subtitle">${escapeHtml(data.projectName)} · ${escapeHtml(data.scanDate)}</div>
396
+ </div>`;
397
+ }
398
+ function scoreSection(data) {
399
+ const { score } = data;
400
+ const color = gradeColor(score.grade);
401
+ return `
402
+ <div class="score-section">
403
+ ${scoreGaugeSVG(score.overallScore, score.grade)}
404
+ <div class="score-info">
405
+ <div class="grade" style="color: ${color}">Grade ${escapeHtml(score.grade)}</div>
406
+ <div class="status">${score.passed
407
+ ? '✅ PASSED'
408
+ : '❌ FAILED'} (threshold: ${score.threshold})</div>
409
+ <div class="meta">
410
+ 📁 ${data.filesScanned} files scanned (${score.passedFiles} passed, ${score.failedFiles} failed)<br>
411
+ ⚠️ ${score.issueCount} issues found<br>
412
+ ⏱️ ${(data.duration / 1000).toFixed(1)}s · 🌐 ${data.languages.map(l => escapeHtml(l)).join(', ')}
413
+ </div>
414
+ </div>
415
+ </div>`;
416
+ }
417
+ function dimensionsSection(data) {
418
+ const dims = Object.values(data.score.dimensions);
419
+ const dimCards = dims.map(dim => {
420
+ const pct = Math.round((dim.score / dim.maxScore) * 100);
421
+ const color = pct >= 90 ? '#22c55e' : pct >= 75 ? '#3b82f6' : pct >= 60 ? '#eab308' : '#ef4444';
422
+ return `
423
+ <div class="dim-card">
424
+ <div class="dim-header">
425
+ <span class="dim-name">${escapeHtml(dim.name)}</span>
426
+ <span class="dim-score">${dim.score}/${dim.maxScore}</span>
427
+ </div>
428
+ <div class="bar-track">
429
+ <div class="bar-fill" style="width: ${pct}%; background: ${color};"></div>
430
+ </div>
431
+ <div class="dim-issues">${dim.issueCount} issue${dim.issueCount !== 1 ? 's' : ''} · ${pct}%</div>
432
+ </div>`;
433
+ }).join('');
434
+ return `
435
+ <div class="card">
436
+ <h2>📊 Scoring Dimensions</h2>
437
+ <div class="dimensions-grid">
438
+ ${dimCards}
439
+ </div>
440
+ </div>`;
441
+ }
442
+ function severitySummarySection(issues) {
443
+ const counts = { critical: 0, high: 0, medium: 0, low: 0, info: 0 };
444
+ for (const issue of issues) {
445
+ counts[issue.severity] = (counts[issue.severity] || 0) + 1;
446
+ }
447
+ const badges = Object.entries(counts)
448
+ .filter(([, count]) => count > 0)
449
+ .map(([sev, count]) => {
450
+ const color = severityColor(sev);
451
+ return `
452
+ <div class="severity-badge" style="background: ${color}22;">
453
+ <span class="severity-dot" style="background: ${color};"></span>
454
+ ${sev.charAt(0).toUpperCase() + sev.slice(1)}: ${count}
455
+ </div>`;
456
+ }).join('');
457
+ if (!badges) {
458
+ return `
459
+ <div class="card">
460
+ <h2>✅ No Issues Found</h2>
461
+ <p style="color: var(--text-secondary);">Great job! No issues were detected in the scanned files.</p>
462
+ </div>`;
463
+ }
464
+ return `
465
+ <div class="card">
466
+ <h2>⚠️ Issue Summary</h2>
467
+ <div class="severity-grid">
468
+ ${badges}
469
+ </div>
470
+ </div>`;
471
+ }
472
+ function dimensionDetailsSection(data) {
473
+ const dims = Object.values(data.score.dimensions);
474
+ const details = dims.map(dim => {
475
+ const pct = Math.round((dim.score / dim.maxScore) * 100);
476
+ const topIssues = [...dim.issues]
477
+ .sort((a, b) => severityOrder(a.severity) - severityOrder(b.severity))
478
+ .slice(0, 3);
479
+ const issueRows = topIssues.map(issue => `
480
+ <div style="display: flex; align-items: center; gap: 8px; padding: 6px 0; font-size: 13px;">
481
+ <span class="issue-sev" style="background: ${severityColor(issue.severity)};">${issue.severity}</span>
482
+ <span style="font-family: monospace; color: var(--text-secondary);">${escapeHtml(issue.file)}:${issue.line}</span>
483
+ <span>${escapeHtml(issue.message)}</span>
484
+ </div>`).join('');
485
+ return `
486
+ <div style="margin-bottom: 16px;">
487
+ <div style="display: flex; justify-content: space-between; margin-bottom: 4px;">
488
+ <strong>${escapeHtml(dim.name)}</strong>
489
+ <span>${dim.score}/${dim.maxScore} (${pct}%) · ${dim.issueCount} issues</span>
490
+ </div>
491
+ <div class="bar-track" style="margin-bottom: 8px;">
492
+ <div class="bar-fill" style="width: ${pct}%; background: ${pct >= 90 ? '#22c55e' : pct >= 75 ? '#3b82f6' : pct >= 60 ? '#eab308' : '#ef4444'};"></div>
493
+ </div>
494
+ ${issueRows || '<div style="color: var(--text-secondary); font-size: 13px;">No issues in this dimension.</div>'}
495
+ </div>`;
496
+ }).join('');
497
+ return `
498
+ <div class="card">
499
+ <h2>📋 Dimension Details</h2>
500
+ ${details}
501
+ </div>`;
502
+ }
503
+ function issueListSection(issues, includeSource) {
504
+ if (issues.length === 0)
505
+ return '';
506
+ const sorted = [...issues].sort((a, b) => severityOrder(a.severity) - severityOrder(b.severity));
507
+ const issueItems = sorted.map((issue, idx) => {
508
+ const bodyParts = [];
509
+ bodyParts.push(`<div class="issue-detail"><strong>Detector:</strong> ${escapeHtml(issue.detector)}</div>`);
510
+ bodyParts.push(`<div class="issue-detail"><strong>Category:</strong> ${escapeHtml(issue.category)}</div>`);
511
+ if (issue.suggestion) {
512
+ bodyParts.push(`<div class="issue-detail"><strong>Fix:</strong> ${escapeHtml(issue.suggestion)}</div>`);
513
+ }
514
+ if (issue.confidence !== undefined) {
515
+ bodyParts.push(`<div class="issue-detail"><strong>Confidence:</strong> ${(issue.confidence * 100).toFixed(0)}%</div>`);
516
+ }
517
+ if (includeSource && issue.source) {
518
+ bodyParts.push(`<div class="issue-source">${escapeHtml(issue.source)}</div>`);
519
+ }
520
+ return `
521
+ <li class="issue-item">
522
+ <div class="issue-header" onclick="toggleIssue(${idx})">
523
+ <span class="issue-sev" style="background: ${severityColor(issue.severity)};">${issue.severity}</span>
524
+ <span class="issue-file">${escapeHtml(issue.file)}:${issue.line}</span>
525
+ <span class="issue-msg">${escapeHtml(issue.message)}</span>
526
+ <span class="issue-toggle" id="toggle-${idx}">▶</span>
527
+ </div>
528
+ <div class="issue-body" id="issue-${idx}">
529
+ ${bodyParts.join('\n')}
530
+ </div>
531
+ </li>`;
532
+ }).join('');
533
+ return `
534
+ <div class="card">
535
+ <h2>🔍 Issue List (${issues.length})</h2>
536
+ <ul class="issue-list">
537
+ ${issueItems}
538
+ </ul>
539
+ </div>`;
540
+ }
541
+ function slaSection(sla) {
542
+ return `
543
+ <div class="card">
544
+ <h2>📊 SLA Metrics</h2>
545
+ <table class="sla-table">
546
+ <tr><th>Metric</th><th>Value</th></tr>
547
+ <tr><td>Scan Level</td><td>${sla.level} (${slaLevelName(sla.level)})</td></tr>
548
+ <tr><td>Files Scanned</td><td>${sla.filesScanned}</td></tr>
549
+ <tr>
550
+ <td>Scan Duration</td>
551
+ <td>${(sla.scanDurationMs / 1000).toFixed(1)}s
552
+ (target: ≤${(sla.targetDurationMs / 1000).toFixed(0)}s)
553
+ ${sla.withinTarget ? '✅' : '⚠️'}
554
+ </td>
555
+ </tr>
556
+ <tr><td>Detectors Used</td><td>${sla.detectorsUsed}/${sla.detectorsTotal}</td></tr>
557
+ <tr><td>AI Analysis</td><td>${sla.aiAnalysis === 'none' ? 'None' : sla.aiAnalysis}</td></tr>
558
+ <tr><td>Issues Found</td><td>${sla.issuesFound} (${sla.criticalCount} critical, ${sla.highCount} high, ${sla.mediumCount} medium)</td></tr>
559
+ ${sla.degraded ? `<tr><td>⚠️ Degraded</td><td>${escapeHtml(sla.degradeReason || 'Unknown')}</td></tr>` : ''}
560
+ </table>
561
+ </div>`;
562
+ }
563
+ function footerSection() {
564
+ return `
565
+ <div class="footer">
566
+ Powered by <a href="https://github.com/raye-deng/open-code-review">Open Code Review</a> v0.3.0
567
+ </div>`;
568
+ }
569
+ function toggleScript() {
570
+ return `
571
+ <script>
572
+ function toggleIssue(idx) {
573
+ var body = document.getElementById('issue-' + idx);
574
+ var toggle = document.getElementById('toggle-' + idx);
575
+ if (body.classList.contains('open')) {
576
+ body.classList.remove('open');
577
+ toggle.textContent = '▶';
578
+ } else {
579
+ body.classList.add('open');
580
+ toggle.textContent = '▼';
581
+ }
582
+ }
583
+ </script>`;
584
+ }
585
+ // ─── HTML Generator ────────────────────────────────────────────────
586
+ export function generateHTML(data, options) {
587
+ const theme = options.theme || 'light';
588
+ const includeSource = options.includeSource !== false;
589
+ return `<!DOCTYPE html>
590
+ <html lang="en">
591
+ <head>
592
+ <meta charset="UTF-8">
593
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
594
+ <title>Open Code Review Report — ${escapeHtml(data.projectName)}</title>
595
+ <style>${generateCSS(theme)}</style>
596
+ </head>
597
+ <body>
598
+ <div class="container">
599
+ ${headerSection(data)}
600
+ ${scoreSection(data)}
601
+ ${dimensionsSection(data)}
602
+ ${severitySummarySection(data.issues)}
603
+ ${dimensionDetailsSection(data)}
604
+ ${issueListSection(data.issues, includeSource)}
605
+ ${data.sla ? slaSection(data.sla) : ''}
606
+ ${footerSection()}
607
+ </div>
608
+ ${toggleScript()}
609
+ </body>
610
+ </html>`;
611
+ }
612
+ //# sourceMappingURL=html-reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-reporter.js","sourceRoot":"","sources":["../../src/reporter/html-reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Reporter Module — Unified Report Generation
3
+ *
4
+ * Supports multiple output formats:
5
+ * - terminal: Human-readable terminal output
6
+ * - json: Machine-readable JSON
7
+ * - html: Self-contained HTML report
8
+ * - markdown: Rich Markdown for PR comments
9
+ * - sarif: SARIF 2.1.0 for CI tool integration
10
+ *
11
+ * @since 0.3.0
12
+ */
13
+ export type { ReportFormat, ReportOptions, ReportData } from './types.js';
14
+ export { generateHTML } from './html-reporter.js';
15
+ export { generateV4HTML } from './v4-html.js';
16
+ export { generateSARIF } from './sarif-reporter.js';
17
+ export { generateMarkdown } from './markdown-reporter.js';
18
+ export { generateTerminal } from './terminal-reporter.js';
19
+ import type { ReportData, ReportOptions } from './types.js';
20
+ /**
21
+ * Generate a report in the specified format.
22
+ *
23
+ * @param data Report data (scores, issues, SLA metrics)
24
+ * @param options Report format and display options
25
+ * @returns Formatted report string
26
+ */
27
+ export declare function generateReport(data: ReportData, options: ReportOptions): string;
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAM5D;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAkB/E"}