@cdot65/prisma-airs-cli 2.12.0 → 3.0.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 (392) hide show
  1. package/README.md +27 -169
  2. package/dist/chunk-JXHYQFEK.js +1752 -0
  3. package/dist/cli/index.js +6511 -4
  4. package/dist/dlp-5XKWITZX.js +710 -0
  5. package/dist/index.d.ts +1396 -26
  6. package/dist/index.js +40 -37
  7. package/package.json +22 -25
  8. package/dist/airs/dlp/data-filtering-profiles.d.ts +0 -10
  9. package/dist/airs/dlp/data-filtering-profiles.d.ts.map +0 -1
  10. package/dist/airs/dlp/data-filtering-profiles.js +0 -17
  11. package/dist/airs/dlp/data-filtering-profiles.js.map +0 -1
  12. package/dist/airs/dlp/data-patterns.d.ts +0 -13
  13. package/dist/airs/dlp/data-patterns.d.ts.map +0 -1
  14. package/dist/airs/dlp/data-patterns.js +0 -26
  15. package/dist/airs/dlp/data-patterns.js.map +0 -1
  16. package/dist/airs/dlp/data-profiles.d.ts +0 -12
  17. package/dist/airs/dlp/data-profiles.d.ts.map +0 -1
  18. package/dist/airs/dlp/data-profiles.js +0 -23
  19. package/dist/airs/dlp/data-profiles.js.map +0 -1
  20. package/dist/airs/dlp/dictionaries.d.ts +0 -13
  21. package/dist/airs/dlp/dictionaries.d.ts.map +0 -1
  22. package/dist/airs/dlp/dictionaries.js +0 -34
  23. package/dist/airs/dlp/dictionaries.js.map +0 -1
  24. package/dist/airs/dlp/index.d.ts +0 -6
  25. package/dist/airs/dlp/index.d.ts.map +0 -1
  26. package/dist/airs/dlp/index.js +0 -6
  27. package/dist/airs/dlp/index.js.map +0 -1
  28. package/dist/airs/dlp/types.d.ts +0 -36
  29. package/dist/airs/dlp/types.d.ts.map +0 -1
  30. package/dist/airs/dlp/types.js +0 -2
  31. package/dist/airs/dlp/types.js.map +0 -1
  32. package/dist/airs/management.d.ts +0 -69
  33. package/dist/airs/management.d.ts.map +0 -1
  34. package/dist/airs/management.js +0 -370
  35. package/dist/airs/management.js.map +0 -1
  36. package/dist/airs/modelsecurity.d.ts +0 -74
  37. package/dist/airs/modelsecurity.d.ts.map +0 -1
  38. package/dist/airs/modelsecurity.js +0 -337
  39. package/dist/airs/modelsecurity.js.map +0 -1
  40. package/dist/airs/promptsets.d.ts +0 -50
  41. package/dist/airs/promptsets.d.ts.map +0 -1
  42. package/dist/airs/promptsets.js +0 -120
  43. package/dist/airs/promptsets.js.map +0 -1
  44. package/dist/airs/redteam.d.ts +0 -75
  45. package/dist/airs/redteam.d.ts.map +0 -1
  46. package/dist/airs/redteam.js +0 -418
  47. package/dist/airs/redteam.js.map +0 -1
  48. package/dist/airs/runtime.d.ts +0 -27
  49. package/dist/airs/runtime.d.ts.map +0 -1
  50. package/dist/airs/runtime.js +0 -158
  51. package/dist/airs/runtime.js.map +0 -1
  52. package/dist/airs/scanner.d.ts +0 -36
  53. package/dist/airs/scanner.d.ts.map +0 -1
  54. package/dist/airs/scanner.js +0 -101
  55. package/dist/airs/scanner.js.map +0 -1
  56. package/dist/airs/types.d.ts +0 -838
  57. package/dist/airs/types.d.ts.map +0 -1
  58. package/dist/airs/types.js +0 -6
  59. package/dist/airs/types.js.map +0 -1
  60. package/dist/audit/evaluator.d.ts +0 -17
  61. package/dist/audit/evaluator.d.ts.map +0 -1
  62. package/dist/audit/evaluator.js +0 -82
  63. package/dist/audit/evaluator.js.map +0 -1
  64. package/dist/audit/report.d.ts +0 -38
  65. package/dist/audit/report.d.ts.map +0 -1
  66. package/dist/audit/report.js +0 -141
  67. package/dist/audit/report.js.map +0 -1
  68. package/dist/audit/runner.d.ts +0 -18
  69. package/dist/audit/runner.d.ts.map +0 -1
  70. package/dist/audit/runner.js +0 -60
  71. package/dist/audit/runner.js.map +0 -1
  72. package/dist/audit/types.d.ts +0 -53
  73. package/dist/audit/types.d.ts.map +0 -1
  74. package/dist/audit/types.js +0 -5
  75. package/dist/audit/types.js.map +0 -1
  76. package/dist/backup/index.d.ts +0 -3
  77. package/dist/backup/index.d.ts.map +0 -1
  78. package/dist/backup/index.js +0 -3
  79. package/dist/backup/index.js.map +0 -1
  80. package/dist/backup/io.d.ts +0 -15
  81. package/dist/backup/io.d.ts.map +0 -1
  82. package/dist/backup/io.js +0 -67
  83. package/dist/backup/io.js.map +0 -1
  84. package/dist/backup/types.d.ts +0 -25
  85. package/dist/backup/types.d.ts.map +0 -1
  86. package/dist/backup/types.js +0 -2
  87. package/dist/backup/types.js.map +0 -1
  88. package/dist/cli/builders/profile-builder.d.ts +0 -45
  89. package/dist/cli/builders/profile-builder.d.ts.map +0 -1
  90. package/dist/cli/builders/profile-builder.js +0 -308
  91. package/dist/cli/builders/profile-builder.js.map +0 -1
  92. package/dist/cli/bulk-scan-state.d.ts +0 -15
  93. package/dist/cli/bulk-scan-state.d.ts.map +0 -1
  94. package/dist/cli/bulk-scan-state.js +0 -20
  95. package/dist/cli/bulk-scan-state.js.map +0 -1
  96. package/dist/cli/commands/audit.d.ts +0 -4
  97. package/dist/cli/commands/audit.d.ts.map +0 -1
  98. package/dist/cli/commands/audit.js +0 -113
  99. package/dist/cli/commands/audit.js.map +0 -1
  100. package/dist/cli/commands/backup.d.ts +0 -10
  101. package/dist/cli/commands/backup.d.ts.map +0 -1
  102. package/dist/cli/commands/backup.js +0 -102
  103. package/dist/cli/commands/backup.js.map +0 -1
  104. package/dist/cli/commands/dlp/build-body.d.ts +0 -28
  105. package/dist/cli/commands/dlp/build-body.d.ts.map +0 -1
  106. package/dist/cli/commands/dlp/build-body.js +0 -174
  107. package/dist/cli/commands/dlp/build-body.js.map +0 -1
  108. package/dist/cli/commands/dlp/dictionaries.d.ts +0 -3
  109. package/dist/cli/commands/dlp/dictionaries.d.ts.map +0 -1
  110. package/dist/cli/commands/dlp/dictionaries.js +0 -167
  111. package/dist/cli/commands/dlp/dictionaries.js.map +0 -1
  112. package/dist/cli/commands/dlp/filtering-profiles.d.ts +0 -3
  113. package/dist/cli/commands/dlp/filtering-profiles.d.ts.map +0 -1
  114. package/dist/cli/commands/dlp/filtering-profiles.js +0 -82
  115. package/dist/cli/commands/dlp/filtering-profiles.js.map +0 -1
  116. package/dist/cli/commands/dlp/generate.d.ts +0 -3
  117. package/dist/cli/commands/dlp/generate.d.ts.map +0 -1
  118. package/dist/cli/commands/dlp/generate.js +0 -51
  119. package/dist/cli/commands/dlp/generate.js.map +0 -1
  120. package/dist/cli/commands/dlp/index.d.ts +0 -3
  121. package/dist/cli/commands/dlp/index.d.ts.map +0 -1
  122. package/dist/cli/commands/dlp/index.js +0 -16
  123. package/dist/cli/commands/dlp/index.js.map +0 -1
  124. package/dist/cli/commands/dlp/patch.d.ts +0 -15
  125. package/dist/cli/commands/dlp/patch.d.ts.map +0 -1
  126. package/dist/cli/commands/dlp/patch.js +0 -70
  127. package/dist/cli/commands/dlp/patch.js.map +0 -1
  128. package/dist/cli/commands/dlp/patterns.d.ts +0 -3
  129. package/dist/cli/commands/dlp/patterns.d.ts.map +0 -1
  130. package/dist/cli/commands/dlp/patterns.js +0 -127
  131. package/dist/cli/commands/dlp/patterns.js.map +0 -1
  132. package/dist/cli/commands/dlp/profiles.d.ts +0 -3
  133. package/dist/cli/commands/dlp/profiles.d.ts.map +0 -1
  134. package/dist/cli/commands/dlp/profiles.js +0 -126
  135. package/dist/cli/commands/dlp/profiles.js.map +0 -1
  136. package/dist/cli/commands/modelsecurity.d.ts +0 -4
  137. package/dist/cli/commands/modelsecurity.d.ts.map +0 -1
  138. package/dist/cli/commands/modelsecurity.js +0 -605
  139. package/dist/cli/commands/modelsecurity.js.map +0 -1
  140. package/dist/cli/commands/profiles-cleanup.d.ts +0 -26
  141. package/dist/cli/commands/profiles-cleanup.d.ts.map +0 -1
  142. package/dist/cli/commands/profiles-cleanup.js +0 -113
  143. package/dist/cli/commands/profiles-cleanup.js.map +0 -1
  144. package/dist/cli/commands/redteam.d.ts +0 -12
  145. package/dist/cli/commands/redteam.d.ts.map +0 -1
  146. package/dist/cli/commands/redteam.js +0 -1075
  147. package/dist/cli/commands/redteam.js.map +0 -1
  148. package/dist/cli/commands/restore.d.ts +0 -11
  149. package/dist/cli/commands/restore.d.ts.map +0 -1
  150. package/dist/cli/commands/restore.js +0 -109
  151. package/dist/cli/commands/restore.js.map +0 -1
  152. package/dist/cli/commands/runtime.d.ts +0 -6
  153. package/dist/cli/commands/runtime.d.ts.map +0 -1
  154. package/dist/cli/commands/runtime.js +0 -869
  155. package/dist/cli/commands/runtime.js.map +0 -1
  156. package/dist/cli/commands/topics-apply.d.ts +0 -16
  157. package/dist/cli/commands/topics-apply.d.ts.map +0 -1
  158. package/dist/cli/commands/topics-apply.js +0 -69
  159. package/dist/cli/commands/topics-apply.js.map +0 -1
  160. package/dist/cli/commands/topics-create.d.ts +0 -16
  161. package/dist/cli/commands/topics-create.d.ts.map +0 -1
  162. package/dist/cli/commands/topics-create.js +0 -71
  163. package/dist/cli/commands/topics-create.js.map +0 -1
  164. package/dist/cli/commands/topics-eval.d.ts +0 -7
  165. package/dist/cli/commands/topics-eval.d.ts.map +0 -1
  166. package/dist/cli/commands/topics-eval.js +0 -65
  167. package/dist/cli/commands/topics-eval.js.map +0 -1
  168. package/dist/cli/commands/topics-revert.d.ts +0 -9
  169. package/dist/cli/commands/topics-revert.d.ts.map +0 -1
  170. package/dist/cli/commands/topics-revert.js +0 -52
  171. package/dist/cli/commands/topics-revert.js.map +0 -1
  172. package/dist/cli/commands/topics-sample.d.ts +0 -4
  173. package/dist/cli/commands/topics-sample.d.ts.map +0 -1
  174. package/dist/cli/commands/topics-sample.js +0 -27
  175. package/dist/cli/commands/topics-sample.js.map +0 -1
  176. package/dist/cli/debug-logger.d.ts +0 -11
  177. package/dist/cli/debug-logger.d.ts.map +0 -1
  178. package/dist/cli/debug-logger.js +0 -137
  179. package/dist/cli/debug-logger.js.map +0 -1
  180. package/dist/cli/index.d.ts +0 -3
  181. package/dist/cli/index.d.ts.map +0 -1
  182. package/dist/cli/index.js.map +0 -1
  183. package/dist/cli/parse-input.d.ts +0 -9
  184. package/dist/cli/parse-input.d.ts.map +0 -1
  185. package/dist/cli/parse-input.js +0 -109
  186. package/dist/cli/parse-input.js.map +0 -1
  187. package/dist/cli/program.d.ts +0 -3
  188. package/dist/cli/program.d.ts.map +0 -1
  189. package/dist/cli/program.js +0 -32
  190. package/dist/cli/program.js.map +0 -1
  191. package/dist/cli/renderer/audit.d.ts +0 -11
  192. package/dist/cli/renderer/audit.d.ts.map +0 -1
  193. package/dist/cli/renderer/audit.js +0 -58
  194. package/dist/cli/renderer/audit.js.map +0 -1
  195. package/dist/cli/renderer/backup.d.ts +0 -8
  196. package/dist/cli/renderer/backup.d.ts.map +0 -1
  197. package/dist/cli/renderer/backup.js +0 -50
  198. package/dist/cli/renderer/backup.js.map +0 -1
  199. package/dist/cli/renderer/common.d.ts +0 -14
  200. package/dist/cli/renderer/common.d.ts.map +0 -1
  201. package/dist/cli/renderer/common.js +0 -50
  202. package/dist/cli/renderer/common.js.map +0 -1
  203. package/dist/cli/renderer/dlp.d.ts +0 -34
  204. package/dist/cli/renderer/dlp.d.ts.map +0 -1
  205. package/dist/cli/renderer/dlp.js +0 -348
  206. package/dist/cli/renderer/dlp.js.map +0 -1
  207. package/dist/cli/renderer/eval.d.ts +0 -30
  208. package/dist/cli/renderer/eval.d.ts.map +0 -1
  209. package/dist/cli/renderer/eval.js +0 -61
  210. package/dist/cli/renderer/eval.js.map +0 -1
  211. package/dist/cli/renderer/index.d.ts +0 -9
  212. package/dist/cli/renderer/index.d.ts.map +0 -1
  213. package/dist/cli/renderer/index.js +0 -9
  214. package/dist/cli/renderer/index.js.map +0 -1
  215. package/dist/cli/renderer/modelsecurity.d.ts +0 -35
  216. package/dist/cli/renderer/modelsecurity.d.ts.map +0 -1
  217. package/dist/cli/renderer/modelsecurity.js +0 -339
  218. package/dist/cli/renderer/modelsecurity.js.map +0 -1
  219. package/dist/cli/renderer/redteam.d.ts +0 -224
  220. package/dist/cli/renderer/redteam.d.ts.map +0 -1
  221. package/dist/cli/renderer/redteam.js +0 -500
  222. package/dist/cli/renderer/redteam.js.map +0 -1
  223. package/dist/cli/renderer/runtime.d.ts +0 -135
  224. package/dist/cli/renderer/runtime.d.ts.map +0 -1
  225. package/dist/cli/renderer/runtime.js +0 -426
  226. package/dist/cli/renderer/runtime.js.map +0 -1
  227. package/dist/config/loader.d.ts +0 -3
  228. package/dist/config/loader.d.ts.map +0 -1
  229. package/dist/config/loader.js +0 -59
  230. package/dist/config/loader.js.map +0 -1
  231. package/dist/config/schema.d.ts +0 -63
  232. package/dist/config/schema.d.ts.map +0 -1
  233. package/dist/config/schema.js +0 -38
  234. package/dist/config/schema.js.map +0 -1
  235. package/dist/core/constraints.d.ts +0 -19
  236. package/dist/core/constraints.d.ts.map +0 -1
  237. package/dist/core/constraints.js +0 -82
  238. package/dist/core/constraints.js.map +0 -1
  239. package/dist/core/metrics.d.ts +0 -13
  240. package/dist/core/metrics.d.ts.map +0 -1
  241. package/dist/core/metrics.js +0 -73
  242. package/dist/core/metrics.js.map +0 -1
  243. package/dist/core/prompt-loader.d.ts +0 -14
  244. package/dist/core/prompt-loader.d.ts.map +0 -1
  245. package/dist/core/prompt-loader.js +0 -122
  246. package/dist/core/prompt-loader.js.map +0 -1
  247. package/dist/core/types.d.ts +0 -96
  248. package/dist/core/types.d.ts.map +0 -1
  249. package/dist/core/types.js +0 -5
  250. package/dist/core/types.js.map +0 -1
  251. package/dist/dlp/embed/docx.d.ts +0 -3
  252. package/dist/dlp/embed/docx.d.ts.map +0 -1
  253. package/dist/dlp/embed/docx.js +0 -63
  254. package/dist/dlp/embed/docx.js.map +0 -1
  255. package/dist/dlp/embed/index.d.ts +0 -6
  256. package/dist/dlp/embed/index.d.ts.map +0 -1
  257. package/dist/dlp/embed/index.js +0 -20
  258. package/dist/dlp/embed/index.js.map +0 -1
  259. package/dist/dlp/embed/jpeg.d.ts +0 -5
  260. package/dist/dlp/embed/jpeg.d.ts.map +0 -1
  261. package/dist/dlp/embed/jpeg.js +0 -67
  262. package/dist/dlp/embed/jpeg.js.map +0 -1
  263. package/dist/dlp/embed/overlay.d.ts +0 -7
  264. package/dist/dlp/embed/overlay.d.ts.map +0 -1
  265. package/dist/dlp/embed/overlay.js +0 -21
  266. package/dist/dlp/embed/overlay.js.map +0 -1
  267. package/dist/dlp/embed/pdf.d.ts +0 -7
  268. package/dist/dlp/embed/pdf.d.ts.map +0 -1
  269. package/dist/dlp/embed/pdf.js +0 -124
  270. package/dist/dlp/embed/pdf.js.map +0 -1
  271. package/dist/dlp/embed/png-chunks.d.ts +0 -12
  272. package/dist/dlp/embed/png-chunks.d.ts.map +0 -1
  273. package/dist/dlp/embed/png-chunks.js +0 -85
  274. package/dist/dlp/embed/png-chunks.js.map +0 -1
  275. package/dist/dlp/embed/png.d.ts +0 -5
  276. package/dist/dlp/embed/png.d.ts.map +0 -1
  277. package/dist/dlp/embed/png.js +0 -75
  278. package/dist/dlp/embed/png.js.map +0 -1
  279. package/dist/dlp/embed/svg.d.ts +0 -3
  280. package/dist/dlp/embed/svg.d.ts.map +0 -1
  281. package/dist/dlp/embed/svg.js +0 -43
  282. package/dist/dlp/embed/svg.js.map +0 -1
  283. package/dist/dlp/embed/zip.d.ts +0 -3
  284. package/dist/dlp/embed/zip.d.ts.map +0 -1
  285. package/dist/dlp/embed/zip.js +0 -25
  286. package/dist/dlp/embed/zip.js.map +0 -1
  287. package/dist/dlp/generate/docx.d.ts +0 -3
  288. package/dist/dlp/generate/docx.d.ts.map +0 -1
  289. package/dist/dlp/generate/docx.js +0 -24
  290. package/dist/dlp/generate/docx.js.map +0 -1
  291. package/dist/dlp/generate/index.d.ts +0 -5
  292. package/dist/dlp/generate/index.d.ts.map +0 -1
  293. package/dist/dlp/generate/index.js +0 -21
  294. package/dist/dlp/generate/index.js.map +0 -1
  295. package/dist/dlp/generate/jpeg.d.ts +0 -3
  296. package/dist/dlp/generate/jpeg.d.ts.map +0 -1
  297. package/dist/dlp/generate/jpeg.js +0 -8
  298. package/dist/dlp/generate/jpeg.js.map +0 -1
  299. package/dist/dlp/generate/pdf.d.ts +0 -3
  300. package/dist/dlp/generate/pdf.d.ts.map +0 -1
  301. package/dist/dlp/generate/pdf.js +0 -19
  302. package/dist/dlp/generate/pdf.js.map +0 -1
  303. package/dist/dlp/generate/png.d.ts +0 -3
  304. package/dist/dlp/generate/png.d.ts.map +0 -1
  305. package/dist/dlp/generate/png.js +0 -8
  306. package/dist/dlp/generate/png.js.map +0 -1
  307. package/dist/dlp/generate/raster.d.ts +0 -9
  308. package/dist/dlp/generate/raster.d.ts.map +0 -1
  309. package/dist/dlp/generate/raster.js +0 -20
  310. package/dist/dlp/generate/raster.js.map +0 -1
  311. package/dist/dlp/generate/svg.d.ts +0 -3
  312. package/dist/dlp/generate/svg.d.ts.map +0 -1
  313. package/dist/dlp/generate/svg.js +0 -17
  314. package/dist/dlp/generate/svg.js.map +0 -1
  315. package/dist/dlp/index.d.ts +0 -15
  316. package/dist/dlp/index.d.ts.map +0 -1
  317. package/dist/dlp/index.js +0 -54
  318. package/dist/dlp/index.js.map +0 -1
  319. package/dist/dlp/lorem.d.ts +0 -3
  320. package/dist/dlp/lorem.d.ts.map +0 -1
  321. package/dist/dlp/lorem.js +0 -65
  322. package/dist/dlp/lorem.js.map +0 -1
  323. package/dist/dlp/manifest.d.ts +0 -11
  324. package/dist/dlp/manifest.d.ts.map +0 -1
  325. package/dist/dlp/manifest.js +0 -14
  326. package/dist/dlp/manifest.js.map +0 -1
  327. package/dist/dlp/payload.d.ts +0 -6
  328. package/dist/dlp/payload.d.ts.map +0 -1
  329. package/dist/dlp/payload.js +0 -62
  330. package/dist/dlp/payload.js.map +0 -1
  331. package/dist/dlp/rng.d.ts +0 -9
  332. package/dist/dlp/rng.d.ts.map +0 -1
  333. package/dist/dlp/rng.js +0 -28
  334. package/dist/dlp/rng.js.map +0 -1
  335. package/dist/dlp/types.d.ts +0 -26
  336. package/dist/dlp/types.d.ts.map +0 -1
  337. package/dist/dlp/types.js +0 -2
  338. package/dist/dlp/types.js.map +0 -1
  339. package/dist/index.d.ts.map +0 -1
  340. package/dist/index.js.map +0 -1
  341. package/dist/llm/prompts/analyze-results.d.ts +0 -3
  342. package/dist/llm/prompts/analyze-results.d.ts.map +0 -1
  343. package/dist/llm/prompts/analyze-results.js +0 -52
  344. package/dist/llm/prompts/analyze-results.js.map +0 -1
  345. package/dist/llm/prompts/generate-companion.d.ts +0 -3
  346. package/dist/llm/prompts/generate-companion.d.ts.map +0 -1
  347. package/dist/llm/prompts/generate-companion.js +0 -42
  348. package/dist/llm/prompts/generate-companion.js.map +0 -1
  349. package/dist/llm/prompts/generate-tests.d.ts +0 -3
  350. package/dist/llm/prompts/generate-tests.d.ts.map +0 -1
  351. package/dist/llm/prompts/generate-tests.js +0 -46
  352. package/dist/llm/prompts/generate-tests.js.map +0 -1
  353. package/dist/llm/prompts/generate-topic.d.ts +0 -4
  354. package/dist/llm/prompts/generate-topic.d.ts.map +0 -1
  355. package/dist/llm/prompts/generate-topic.js +0 -41
  356. package/dist/llm/prompts/generate-topic.js.map +0 -1
  357. package/dist/llm/prompts/improve-topic.d.ts +0 -3
  358. package/dist/llm/prompts/improve-topic.d.ts.map +0 -1
  359. package/dist/llm/prompts/improve-topic.js +0 -77
  360. package/dist/llm/prompts/improve-topic.js.map +0 -1
  361. package/dist/llm/prompts/simplify-topic.d.ts +0 -3
  362. package/dist/llm/prompts/simplify-topic.d.ts.map +0 -1
  363. package/dist/llm/prompts/simplify-topic.js +0 -50
  364. package/dist/llm/prompts/simplify-topic.js.map +0 -1
  365. package/dist/llm/provider.d.ts +0 -21
  366. package/dist/llm/provider.d.ts.map +0 -1
  367. package/dist/llm/provider.js +0 -76
  368. package/dist/llm/provider.js.map +0 -1
  369. package/dist/llm/schemas.d.ts +0 -97
  370. package/dist/llm/schemas.d.ts.map +0 -1
  371. package/dist/llm/schemas.js +0 -24
  372. package/dist/llm/schemas.js.map +0 -1
  373. package/dist/llm/service.d.ts +0 -34
  374. package/dist/llm/service.d.ts.map +0 -1
  375. package/dist/llm/service.js +0 -268
  376. package/dist/llm/service.js.map +0 -1
  377. package/dist/llm/types.d.ts +0 -18
  378. package/dist/llm/types.d.ts.map +0 -1
  379. package/dist/llm/types.js +0 -2
  380. package/dist/llm/types.js.map +0 -1
  381. package/dist/report/html.d.ts +0 -6
  382. package/dist/report/html.d.ts.map +0 -1
  383. package/dist/report/html.js +0 -200
  384. package/dist/report/html.js.map +0 -1
  385. package/dist/report/json.d.ts +0 -11
  386. package/dist/report/json.d.ts.map +0 -1
  387. package/dist/report/json.js +0 -74
  388. package/dist/report/json.js.map +0 -1
  389. package/dist/report/types.d.ts +0 -58
  390. package/dist/report/types.d.ts.map +0 -1
  391. package/dist/report/types.js +0 -5
  392. package/dist/report/types.js.map +0 -1
@@ -1,268 +0,0 @@
1
- import { byteLen, MAX_COMBINED_LENGTH, MAX_DESCRIPTION_LENGTH, MAX_EXAMPLE_LENGTH, MAX_EXAMPLES, MAX_NAME_LENGTH, validateTopic, } from '../core/constraints.js';
2
- import { analyzeResultsPrompt } from './prompts/analyze-results.js';
3
- import { generateCompanionPrompt } from './prompts/generate-companion.js';
4
- import { generateTestsPrompt } from './prompts/generate-tests.js';
5
- import { buildSeedExamplesSection, generateTopicPrompt } from './prompts/generate-topic.js';
6
- import { improveTopicPrompt } from './prompts/improve-topic.js';
7
- import { simplifyTopicPrompt } from './prompts/simplify-topic.js';
8
- import { AnalysisReportSchema, CustomTopicSchema, TestSuiteSchema, } from './schemas.js';
9
- const MAX_RETRIES = 3;
10
- /** Truncate a string so its UTF-8 byte length does not exceed maxBytes. */
11
- function sliceToBytes(s, maxBytes) {
12
- while (Buffer.byteLength(s, 'utf8') > maxBytes) {
13
- s = s.slice(0, -1);
14
- }
15
- return s;
16
- }
17
- /** Clamp topic fields to fit Prisma AIRS constraints (byte-aware, including combined limit) */
18
- function clampTopic(topic) {
19
- const name = sliceToBytes(topic.name, MAX_NAME_LENGTH);
20
- let description = sliceToBytes(topic.description, MAX_DESCRIPTION_LENGTH);
21
- const examples = topic.examples
22
- .slice(0, MAX_EXAMPLES)
23
- .map((e) => sliceToBytes(e, MAX_EXAMPLE_LENGTH));
24
- // Enforce combined byte-length limit by dropping examples from the end, then trimming description
25
- const combined = () => byteLen(name) + byteLen(description) + examples.reduce((s, e) => s + byteLen(e), 0);
26
- while (combined() > MAX_COMBINED_LENGTH && examples.length > 1) {
27
- examples.pop();
28
- }
29
- /* v8 ignore next 4 -- unreachable with current MAX constants (100+250+250=600 < 1000) */
30
- if (combined() > MAX_COMBINED_LENGTH) {
31
- const overflow = combined() - MAX_COMBINED_LENGTH;
32
- description = sliceToBytes(description, byteLen(description) - overflow);
33
- }
34
- return { name, description, examples };
35
- }
36
- export class LangChainLlmService {
37
- model;
38
- memoryInjector;
39
- memorySection = '';
40
- constructor(model, memoryInjector) {
41
- this.model = model;
42
- this.memoryInjector = memoryInjector;
43
- }
44
- async loadMemory(topicDescription) {
45
- if (!this.memoryInjector)
46
- return 0;
47
- this.memorySection = await this.memoryInjector.buildMemorySection(topicDescription);
48
- // Count lines starting with "- [" as learning count
49
- return this.memorySection.split('\n').filter((l) => l.startsWith('- [')).length;
50
- }
51
- async generateTopic(description, intent, seeds) {
52
- const structured = this.model.withStructuredOutput(CustomTopicSchema);
53
- const chain = generateTopicPrompt.pipe(structured);
54
- for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
55
- try {
56
- const raw = await chain.invoke({
57
- topicDescription: description,
58
- intent,
59
- seedExamplesSection: buildSeedExamplesSection(seeds),
60
- memorySection: this.memorySection,
61
- });
62
- const result = clampTopic(raw);
63
- const errors = validateTopic(result);
64
- if (errors.length === 0)
65
- return result;
66
- if (attempt === MAX_RETRIES - 1) {
67
- throw new Error(`LLM output violates constraints after ${MAX_RETRIES} attempts: ${errors.map((e) => e.message).join(', ')}`);
68
- }
69
- }
70
- catch (err) {
71
- if (attempt === MAX_RETRIES - 1)
72
- throw err;
73
- }
74
- }
75
- /* v8 ignore next */
76
- throw new Error('Unreachable');
77
- }
78
- async generateCompanionTopic(blockTopicName, blockDescription) {
79
- const structured = this.model.withStructuredOutput(CustomTopicSchema);
80
- const chain = generateCompanionPrompt.pipe(structured);
81
- for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
82
- try {
83
- const raw = await chain.invoke({
84
- blockTopicName,
85
- blockTopicDescription: blockDescription,
86
- });
87
- const result = clampTopic(raw);
88
- const errors = validateTopic(result);
89
- if (errors.length === 0)
90
- return result;
91
- if (attempt === MAX_RETRIES - 1) {
92
- throw new Error(`LLM output violates constraints after ${MAX_RETRIES} attempts: ${errors.map((e) => e.message).join(', ')}`);
93
- }
94
- }
95
- catch (err) {
96
- if (attempt === MAX_RETRIES - 1)
97
- throw err;
98
- }
99
- }
100
- /* v8 ignore next */
101
- throw new Error('Unreachable');
102
- }
103
- async generateTests(topic, intent, categoryBreakdown) {
104
- const structured = this.model.withStructuredOutput(TestSuiteSchema);
105
- const chain = generateTestsPrompt.pipe(structured);
106
- let categoryBreakdownSection = '';
107
- if (categoryBreakdown && categoryBreakdown.length > 0) {
108
- const lines = categoryBreakdown.map((c) => `- ${c.category}: ${c.fp + c.fn}/${c.total} errors (${(c.errorRate * 100).toFixed(0)}%) — ${c.fp} FP, ${c.fn} FN`);
109
- categoryBreakdownSection = `\nPrevious iteration per-category error rates (generate proportionally more tests for high-error categories):\n${lines.join('\n')}\n`;
110
- }
111
- for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
112
- try {
113
- const raw = await chain.invoke({
114
- topicName: topic.name,
115
- topicDescription: topic.description,
116
- topicExamples: topic.examples.length > 0
117
- ? topic.examples.map((e, i) => `${i + 1}. ${e}`).join('\n')
118
- : 'None (description-only mode)',
119
- exampleCount: topic.examples.length,
120
- intent,
121
- categoryBreakdownSection,
122
- memorySection: this.memorySection,
123
- });
124
- return raw;
125
- }
126
- catch (err) {
127
- if (attempt === MAX_RETRIES - 1)
128
- throw err;
129
- }
130
- }
131
- /* v8 ignore next */
132
- throw new Error('Unreachable');
133
- }
134
- async analyzeResults(topic, results, metrics, intent) {
135
- const structured = this.model.withStructuredOutput(AnalysisReportSchema);
136
- const chain = analyzeResultsPrompt.pipe(structured);
137
- const fps = results.filter((r) => !r.testCase.expectedTriggered && r.actualTriggered);
138
- const fns = results.filter((r) => r.testCase.expectedTriggered && !r.actualTriggered);
139
- for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
140
- try {
141
- const raw = await chain.invoke({
142
- topicName: topic.name,
143
- topicDescription: topic.description,
144
- topicExamples: topic.examples.length > 0 ? topic.examples.join(', ') : 'None (description-only)',
145
- exampleCount: topic.examples.length,
146
- tpr: `${(metrics.truePositiveRate * 100).toFixed(1)}%`,
147
- tnr: `${(metrics.trueNegativeRate * 100).toFixed(1)}%`,
148
- accuracy: `${(metrics.accuracy * 100).toFixed(1)}%`,
149
- coverage: `${(metrics.coverage * 100).toFixed(1)}%`,
150
- falsePositives: fps.length > 0
151
- ? fps.map((r) => `- "${r.testCase.prompt}" (${r.testCase.category})`).join('\n')
152
- : 'None',
153
- falseNegatives: fns.length > 0
154
- ? fns.map((r) => `- "${r.testCase.prompt}" (${r.testCase.category})`).join('\n')
155
- : 'None',
156
- intent,
157
- memorySection: this.memorySection,
158
- });
159
- return raw;
160
- }
161
- catch (err) {
162
- if (attempt === MAX_RETRIES - 1)
163
- throw err;
164
- }
165
- }
166
- /* v8 ignore next */
167
- throw new Error('Unreachable');
168
- }
169
- async improveTopic(topic, metrics, analysis, results, iteration, targetCoverage, intent, bestContext) {
170
- const structured = this.model.withStructuredOutput(CustomTopicSchema);
171
- const chain = improveTopicPrompt.pipe(structured);
172
- const fps = results.filter((r) => !r.testCase.expectedTriggered && r.actualTriggered);
173
- const fns = results.filter((r) => r.testCase.expectedTriggered && !r.actualTriggered);
174
- // Build best-context template variables
175
- const bestCoverage = bestContext
176
- ? `${(bestContext.bestCoverage * 100).toFixed(1)}%`
177
- : `${(metrics.coverage * 100).toFixed(1)}%`;
178
- const bestIteration = bestContext ? bestContext.bestIteration : iteration;
179
- let bestTopicSection = '';
180
- if (bestContext?.bestTopic && metrics.coverage < bestContext.bestCoverage) {
181
- const bt = bestContext.bestTopic;
182
- bestTopicSection = `REGRESSION WARNING: Coverage has dropped from ${(bestContext.bestCoverage * 100).toFixed(1)}% (iteration ${bestContext.bestIteration}) to ${(metrics.coverage * 100).toFixed(1)}%.
183
- The best-performing definition was:
184
- Description: ${bt.description}
185
- Examples: ${bt.examples.join(', ')}
186
- Consider reverting toward this simpler definition rather than adding more specificity.`;
187
- }
188
- for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
189
- try {
190
- const raw = await chain.invoke({
191
- currentName: topic.name,
192
- currentDescription: topic.description,
193
- currentExamples: topic.examples.length > 0 ? topic.examples.join(', ') : 'None (description-only)',
194
- exampleCount: topic.examples.length,
195
- iteration,
196
- coverage: `${(metrics.coverage * 100).toFixed(1)}%`,
197
- targetCoverage: `${(targetCoverage * 100).toFixed(1)}%`,
198
- tpr: `${(metrics.truePositiveRate * 100).toFixed(1)}%`,
199
- tnr: `${(metrics.trueNegativeRate * 100).toFixed(1)}%`,
200
- accuracy: `${(metrics.accuracy * 100).toFixed(1)}%`,
201
- bestCoverage,
202
- bestIteration,
203
- bestTopicSection,
204
- analysisSummary: analysis.summary,
205
- fpPatterns: analysis.falsePositivePatterns.join('; ') || 'None',
206
- fnPatterns: analysis.falseNegativePatterns.join('; ') || 'None',
207
- specificFPs: fps.map((r) => `- "${r.testCase.prompt}"`).join('\n') || 'None',
208
- specificFNs: fns.map((r) => `- "${r.testCase.prompt}"`).join('\n') || 'None',
209
- suggestions: analysis.suggestions.join('; '),
210
- intent,
211
- memorySection: this.memorySection,
212
- });
213
- const result = clampTopic(raw);
214
- const errors = validateTopic(result);
215
- if (errors.length === 0)
216
- return result;
217
- if (attempt === MAX_RETRIES - 1) {
218
- throw new Error(`LLM output violates constraints after ${MAX_RETRIES} attempts: ${errors.map((e) => e.message).join(', ')}`);
219
- }
220
- }
221
- catch (err) {
222
- if (attempt === MAX_RETRIES - 1)
223
- throw err;
224
- }
225
- }
226
- /* v8 ignore next */
227
- throw new Error('Unreachable');
228
- }
229
- async simplifyTopic(currentTopic, bestTopic, metrics, _analysis, intent) {
230
- const structured = this.model.withStructuredOutput(CustomTopicSchema);
231
- const chain = simplifyTopicPrompt.pipe(structured);
232
- for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
233
- try {
234
- const raw = await chain.invoke({
235
- currentName: currentTopic.name,
236
- currentDescription: currentTopic.description,
237
- currentExamples: currentTopic.examples.length > 0
238
- ? currentTopic.examples.join(', ')
239
- : 'None (description-only)',
240
- bestCoverage: `${(metrics.coverage * 100).toFixed(1)}%`,
241
- bestDescription: bestTopic.description,
242
- bestExamples: bestTopic.examples.length > 0
243
- ? bestTopic.examples.join(', ')
244
- : 'None (description-only)',
245
- coverage: `${(metrics.coverage * 100).toFixed(1)}%`,
246
- tpr: `${(metrics.truePositiveRate * 100).toFixed(1)}%`,
247
- tnr: `${(metrics.trueNegativeRate * 100).toFixed(1)}%`,
248
- intent,
249
- memorySection: this.memorySection,
250
- });
251
- const result = clampTopic(raw);
252
- const errors = validateTopic(result);
253
- if (errors.length === 0)
254
- return result;
255
- if (attempt === MAX_RETRIES - 1) {
256
- throw new Error(`LLM output violates constraints after ${MAX_RETRIES} attempts: ${errors.map((e) => e.message).join(', ')}`);
257
- }
258
- }
259
- catch (err) {
260
- if (attempt === MAX_RETRIES - 1)
261
- throw err;
262
- }
263
- }
264
- /* v8 ignore next */
265
- throw new Error('Unreachable');
266
- }
267
- }
268
- //# sourceMappingURL=service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/llm/service.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import type { AnalysisReport, CategoryBreakdown, CustomTopic, EfficacyMetrics, TestCase, TestResult } from '../core/types.js';
2
- /** Contract for LLM operations used by the audit runner. */
3
- export interface LlmService {
4
- generateTopic(description: string, intent: string, seeds?: string[]): Promise<CustomTopic>;
5
- generateTests(topic: CustomTopic, intent: string, categoryBreakdown?: CategoryBreakdown[]): Promise<{
6
- positiveTests: TestCase[];
7
- negativeTests: TestCase[];
8
- }>;
9
- analyzeResults(topic: CustomTopic, results: TestResult[], metrics: EfficacyMetrics, intent: string): Promise<AnalysisReport>;
10
- simplifyTopic(currentTopic: CustomTopic, bestTopic: CustomTopic, metrics: EfficacyMetrics, analysis: AnalysisReport, intent: string): Promise<CustomTopic>;
11
- generateCompanionTopic(blockTopicName: string, blockDescription: string): Promise<CustomTopic>;
12
- improveTopic(topic: CustomTopic, metrics: EfficacyMetrics, analysis: AnalysisReport, results: TestResult[], iteration: number, targetCoverage: number, intent: string, bestContext?: {
13
- bestCoverage: number;
14
- bestIteration: number;
15
- bestTopic?: CustomTopic;
16
- }): Promise<CustomTopic>;
17
- }
18
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,QAAQ,EACR,UAAU,EACX,MAAM,kBAAkB,CAAC;AAE1B,4DAA4D;AAC5D,MAAM,WAAW,UAAU;IACzB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3F,aAAa,CACX,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,GACtC,OAAO,CAAC;QAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;QAAC,aAAa,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC,CAAC;IACrE,cAAc,CACZ,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B,aAAa,CACX,YAAY,EAAE,WAAW,EACzB,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/F,YAAY,CACV,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,UAAU,EAAE,EACrB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,WAAW,CAAA;KAAE,GACrF,OAAO,CAAC,WAAW,CAAC,CAAC;CACzB"}
package/dist/llm/types.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":""}
@@ -1,6 +0,0 @@
1
- /**
2
- * HTML report builder — self-contained HTML from ReportOutput.
3
- */
4
- import type { ReportOutput } from './types.js';
5
- export declare function buildReportHtml(report: ReportOutput): string;
6
- //# sourceMappingURL=html.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAoB,YAAY,EAAuB,MAAM,YAAY,CAAC;AAqJtF,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAoE5D"}
@@ -1,200 +0,0 @@
1
- /**
2
- * HTML report builder — self-contained HTML from ReportOutput.
3
- */
4
- function esc(s) {
5
- return s
6
- .replace(/&/g, '&amp;')
7
- .replace(/</g, '&lt;')
8
- .replace(/>/g, '&gt;')
9
- .replace(/"/g, '&quot;');
10
- }
11
- function pct(n) {
12
- return `${(n * 100).toFixed(1)}%`;
13
- }
14
- function delta(n) {
15
- const sign = n >= 0 ? '+' : '';
16
- return `${sign}${(n * 100).toFixed(1)}%`;
17
- }
18
- function deltaClass(n) {
19
- if (n > 0)
20
- return 'positive';
21
- if (n < 0)
22
- return 'negative';
23
- return 'neutral';
24
- }
25
- function renderMetricsTable(m) {
26
- return `<table class="metrics">
27
- <tr><th>Coverage</th><td>${pct(m.coverage)}</td></tr>
28
- <tr><th>Accuracy</th><td>${pct(m.accuracy)}</td></tr>
29
- <tr><th>TPR</th><td>${pct(m.truePositiveRate)}</td></tr>
30
- <tr><th>TNR</th><td>${pct(m.trueNegativeRate)}</td></tr>
31
- <tr><th>F1</th><td>${pct(m.f1Score)}</td></tr>
32
- <tr><th>TP</th><td>${m.truePositives}</td></tr>
33
- <tr><th>TN</th><td>${m.trueNegatives}</td></tr>
34
- <tr><th>FP</th><td>${m.falsePositives}</td></tr>
35
- <tr><th>FN</th><td>${m.falseNegatives}</td></tr>
36
- <tr><th>Regressions</th><td>${m.regressionCount}</td></tr>
37
- </table>`;
38
- }
39
- function renderTestTable(tests) {
40
- const rows = tests
41
- .map((t) => `<tr class="${t.correct ? 'pass' : 'fail'}">
42
- <td>${esc(t.prompt)}</td>
43
- <td>${t.expectedTriggered ? 'Yes' : 'No'}</td>
44
- <td>${t.actualTriggered ? 'Yes' : 'No'}</td>
45
- <td>${t.correct ? 'Pass' : 'Fail'}</td>
46
- <td>${esc(t.category)}</td>
47
- <td>${t.source ? esc(t.source) : '-'}</td>
48
- <td>${t.scanAction}</td>
49
- </tr>`)
50
- .join('\n');
51
- return `<table class="tests">
52
- <thead><tr>
53
- <th>Prompt</th><th>Expected</th><th>Actual</th><th>Result</th>
54
- <th>Category</th><th>Source</th><th>Action</th>
55
- </tr></thead>
56
- <tbody>${rows}</tbody>
57
- </table>`;
58
- }
59
- function renderIteration(iter) {
60
- const examplesHtml = iter.topic.examples.length > 0
61
- ? `<ul>${iter.topic.examples.map((e) => `<li>${esc(e)}</li>`).join('')}</ul>`
62
- : '<p>None</p>';
63
- const analysisHtml = `
64
- <p>${esc(iter.analysis.summary)}</p>
65
- ${iter.analysis.falsePositivePatterns.length > 0 ? `<p><strong>FP Patterns:</strong> ${iter.analysis.falsePositivePatterns.map(esc).join('; ')}</p>` : ''}
66
- ${iter.analysis.falseNegativePatterns.length > 0 ? `<p><strong>FN Patterns:</strong> ${iter.analysis.falseNegativePatterns.map(esc).join('; ')}</p>` : ''}
67
- ${iter.analysis.suggestions.length > 0 ? `<p><strong>Suggestions:</strong> ${iter.analysis.suggestions.map(esc).join('; ')}</p>` : ''}
68
- `;
69
- const testsHtml = iter.tests ? `<h4>Test Results</h4>${renderTestTable(iter.tests)}` : '';
70
- return `<section class="iteration">
71
- <h3>Iteration ${iter.iteration}</h3>
72
- <p class="meta">Duration: ${(iter.durationMs / 1000).toFixed(1)}s | ${iter.timestamp}</p>
73
- <h4>Topic</h4>
74
- <p><strong>${esc(iter.topic.name)}</strong></p>
75
- <p>${esc(iter.topic.description)}</p>
76
- <h4>Examples</h4>
77
- ${examplesHtml}
78
- <h4>Metrics</h4>
79
- ${renderMetricsTable(iter.metrics)}
80
- <h4>Analysis</h4>
81
- ${analysisHtml}
82
- ${testsHtml}
83
- </section>`;
84
- }
85
- function renderTrends(iterations) {
86
- if (iterations.length < 2)
87
- return '';
88
- const rows = iterations
89
- .map((iter) => `<tr>
90
- <td>${iter.iteration}</td>
91
- <td>${pct(iter.metrics.coverage)}</td>
92
- <td>${pct(iter.metrics.truePositiveRate)}</td>
93
- <td>${pct(iter.metrics.trueNegativeRate)}</td>
94
- <td>${pct(iter.metrics.accuracy)}</td>
95
- <td>${pct(iter.metrics.f1Score)}</td>
96
- <td>${iter.metrics.falsePositives}</td>
97
- <td>${iter.metrics.falseNegatives}</td>
98
- </tr>`)
99
- .join('\n');
100
- return `<section class="trends">
101
- <h2>Iteration Trends</h2>
102
- <table class="metrics">
103
- <thead><tr>
104
- <th>Iter</th><th>Coverage</th><th>TPR</th><th>TNR</th>
105
- <th>Accuracy</th><th>F1</th><th>FP</th><th>FN</th>
106
- </tr></thead>
107
- <tbody>${rows}</tbody>
108
- </table>
109
- </section>`;
110
- }
111
- function renderDiff(diff) {
112
- const d = diff.metricsDelta;
113
- return `<section class="diff">
114
- <h2>Run Comparison</h2>
115
- <table class="metrics">
116
- <thead><tr><th>Metric</th><th>${esc(diff.baseRunId)}</th><th>${esc(diff.compareRunId)}</th><th>Delta</th></tr></thead>
117
- <tbody>
118
- <tr><td>Coverage</td><td>${pct(diff.baseMetrics.coverage)}</td><td>${pct(diff.compareMetrics.coverage)}</td><td class="${deltaClass(d.coverage)}">${delta(d.coverage)}</td></tr>
119
- <tr><td>TPR</td><td>${pct(diff.baseMetrics.truePositiveRate)}</td><td>${pct(diff.compareMetrics.truePositiveRate)}</td><td class="${deltaClass(d.tpr)}">${delta(d.tpr)}</td></tr>
120
- <tr><td>TNR</td><td>${pct(diff.baseMetrics.trueNegativeRate)}</td><td>${pct(diff.compareMetrics.trueNegativeRate)}</td><td class="${deltaClass(d.tnr)}">${delta(d.tnr)}</td></tr>
121
- <tr><td>Accuracy</td><td>${pct(diff.baseMetrics.accuracy)}</td><td>${pct(diff.compareMetrics.accuracy)}</td><td class="${deltaClass(d.accuracy)}">${delta(d.accuracy)}</td></tr>
122
- <tr><td>F1</td><td>${pct(diff.baseMetrics.f1Score)}</td><td>${pct(diff.compareMetrics.f1Score)}</td><td class="${deltaClass(d.f1)}">${delta(d.f1)}</td></tr>
123
- </tbody>
124
- </table>
125
- <h3>Topic Comparison</h3>
126
- <div class="topic-diff">
127
- <div><h4>Base</h4><p><strong>${esc(diff.baseTopic.name)}</strong></p><p>${esc(diff.baseTopic.description)}</p></div>
128
- <div><h4>Compare</h4><p><strong>${esc(diff.compareTopic.name)}</strong></p><p>${esc(diff.compareTopic.description)}</p></div>
129
- </div>
130
- </section>`;
131
- }
132
- export function buildReportHtml(report) {
133
- const iterationsHtml = report.iterations.map(renderIteration).join('\n');
134
- const trendsHtml = renderTrends(report.iterations);
135
- const diffHtml = report.diff ? renderDiff(report.diff) : '';
136
- return `<!DOCTYPE html>
137
- <html lang="en">
138
- <head>
139
- <meta charset="UTF-8">
140
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
141
- <title>Prisma AIRS CLI Report — ${esc(report.run.id)}</title>
142
- <style>
143
- * { margin: 0; padding: 0; box-sizing: border-box; }
144
- body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; max-width: 1200px; margin: 0 auto; padding: 2rem; background: #f8f9fa; color: #212529; }
145
- h1 { font-size: 1.8rem; margin-bottom: 0.5rem; }
146
- h2 { font-size: 1.4rem; margin: 1.5rem 0 0.75rem; border-bottom: 2px solid #dee2e6; padding-bottom: 0.25rem; }
147
- h3 { font-size: 1.1rem; margin: 1rem 0 0.5rem; }
148
- h4 { font-size: 0.95rem; margin: 0.75rem 0 0.25rem; color: #495057; }
149
- .header { background: #212529; color: #fff; padding: 1.5rem; border-radius: 8px; margin-bottom: 1.5rem; }
150
- .header h1 { color: #fff; }
151
- .header .meta { color: #adb5bd; font-size: 0.9rem; }
152
- .summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; margin-bottom: 1.5rem; }
153
- .summary-card { background: #fff; padding: 1rem; border-radius: 6px; border: 1px solid #dee2e6; }
154
- .summary-card .label { font-size: 0.8rem; color: #6c757d; text-transform: uppercase; }
155
- .summary-card .value { font-size: 1.3rem; font-weight: 600; }
156
- table { width: 100%; border-collapse: collapse; margin: 0.5rem 0 1rem; }
157
- th, td { padding: 0.5rem 0.75rem; text-align: left; border-bottom: 1px solid #dee2e6; }
158
- th { background: #f1f3f5; font-size: 0.85rem; text-transform: uppercase; color: #495057; }
159
- .pass td:nth-child(4) { color: #2b8a3e; font-weight: 600; }
160
- .fail td:nth-child(4) { color: #c92a2a; font-weight: 600; }
161
- .iteration { background: #fff; padding: 1.25rem; border-radius: 6px; border: 1px solid #dee2e6; margin-bottom: 1rem; }
162
- .meta { font-size: 0.85rem; color: #868e96; }
163
- .positive { color: #2b8a3e; }
164
- .negative { color: #c92a2a; }
165
- .neutral { color: #868e96; }
166
- .trends { background: #fff; padding: 1.25rem; border-radius: 6px; border: 1px solid #dee2e6; margin-bottom: 1rem; }
167
- .diff { background: #fff; padding: 1.25rem; border-radius: 6px; border: 1px solid #dee2e6; margin-bottom: 1rem; }
168
- .topic-diff { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
169
- .tests { font-size: 0.85rem; }
170
- .tests td:first-child { max-width: 400px; word-break: break-word; }
171
- </style>
172
- </head>
173
- <body>
174
- <div class="header">
175
- <h1>Prisma AIRS CLI Evaluation Report</h1>
176
- <p class="meta">Generated ${esc(report.generatedAt)} | Run ${esc(report.run.id)}</p>
177
- </div>
178
-
179
- <div class="summary">
180
- <div class="summary-card"><div class="label">Status</div><div class="value">${esc(report.run.status)}</div></div>
181
- <div class="summary-card"><div class="label">Intent</div><div class="value">${esc(report.run.intent)}</div></div>
182
- <div class="summary-card"><div class="label">Best Coverage</div><div class="value">${pct(report.run.bestCoverage)}</div></div>
183
- <div class="summary-card"><div class="label">Iterations</div><div class="value">${report.run.totalIterations}</div></div>
184
- <div class="summary-card"><div class="label">Best Iteration</div><div class="value">#${report.run.bestIteration}</div></div>
185
- <div class="summary-card"><div class="label">Profile</div><div class="value">${esc(report.run.profileName)}</div></div>
186
- </div>
187
-
188
- <h2>Topic</h2>
189
- <p>${esc(report.run.topicDescription)}</p>
190
-
191
- ${trendsHtml}
192
-
193
- <h2>Iterations</h2>
194
- ${iterationsHtml}
195
-
196
- ${diffHtml}
197
- </body>
198
- </html>`;
199
- }
200
- //# sourceMappingURL=html.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,SAAS,GAAG,CAAC,CAAS;IACpB,OAAO,CAAC;SACL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,GAAG,CAAC,CAAS;IACpB,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACpC,CAAC;AAED,SAAS,KAAK,CAAC,CAAS;IACtB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IAC7B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAkB;IAC5C,OAAO;+BACsB,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;+BACf,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;0BACpB,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC;0BACvB,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC;yBACxB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;yBACd,CAAC,CAAC,aAAa;yBACf,CAAC,CAAC,aAAa;yBACf,CAAC,CAAC,cAAc;yBAChB,CAAC,CAAC,cAAc;kCACP,CAAC,CAAC,eAAe;WACxC,CAAC;AACZ,CAAC;AAED,SAAS,eAAe,CAAC,KAAmB;IAC1C,MAAM,IAAI,GAAG,KAAK;SACf,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACrC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YACb,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YAClC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YAChC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YAC3B,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;YACf,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;YAC9B,CAAC,CAAC,UAAU;UACd,CACL;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;;;aAKI,IAAI;WACN,CAAC;AACZ,CAAC;AAED,SAAS,eAAe,CAAC,IAAsB;IAC7C,MAAM,YAAY,GAChB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC5B,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO;QAC7E,CAAC,CAAC,aAAa,CAAC;IAEpB,MAAM,YAAY,GAAG;SACd,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;MAC7B,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oCAAoC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;MACvJ,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oCAAoC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;MACvJ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oCAAoC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;GACtI,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,wBAAwB,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1F,OAAO;oBACW,IAAI,CAAC,SAAS;gCACF,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,SAAS;;iBAEvE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;SAC5B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;;MAE9B,YAAY;;MAEZ,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;;MAEhC,YAAY;MACZ,SAAS;aACF,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,UAA8B;IAClD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,IAAI,GAAG,UAAU;SACpB,GAAG,CACF,CAAC,IAAI,EAAE,EAAE,CACP;YACI,IAAI,CAAC,SAAS;YACd,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,cAAc;YAC3B,IAAI,CAAC,OAAO,CAAC,cAAc;UAC7B,CACL;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;;;;;eAOM,IAAI;;aAEN,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,IAAa;IAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;IAC5B,OAAO;;;sCAG6B,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;;mCAExD,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,mBAAmB,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;8BAC/I,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,mBAAmB,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;8BAChJ,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,mBAAmB,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;mCAC3I,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,mBAAmB,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;6BAChJ,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,mBAAmB,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;;;;;qCAKpH,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;wCACvE,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;;aAE3G,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5D,OAAO;;;;;oCAK2B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAmCtB,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;;;;kFAID,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;kFACtB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;yFACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;sFAC/B,MAAM,CAAC,GAAG,CAAC,eAAe;2FACrB,MAAM,CAAC,GAAG,CAAC,aAAa;mFAChC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;;;;OAIvG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;;IAEnC,UAAU;;;IAGV,cAAc;;IAEd,QAAQ;;QAEJ,CAAC;AACT,CAAC"}
@@ -1,11 +0,0 @@
1
- /**
2
- * JSON report builder — pure function mapping RunState to structured ReportOutput.
3
- */
4
- import type { RunState } from '../core/types.js';
5
- import type { ReportOutput } from './types.js';
6
- export interface BuildReportOptions {
7
- includeTests?: boolean;
8
- diffRun?: RunState | null;
9
- }
10
- export declare function buildReportJson(run: RunState, options?: BuildReportOptions): ReportOutput;
11
- //# sourceMappingURL=json.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/report/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAoB,YAAY,EAAuB,MAAM,YAAY,CAAC;AAEtF,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,GAAE,kBAAuB,GAAG,YAAY,CAqD7F"}
@@ -1,74 +0,0 @@
1
- /**
2
- * JSON report builder — pure function mapping RunState to structured ReportOutput.
3
- */
4
- export function buildReportJson(run, options = {}) {
5
- const iterations = run.iterations.map((iter) => {
6
- const summary = {
7
- iteration: iter.iteration,
8
- timestamp: iter.timestamp,
9
- durationMs: iter.durationMs,
10
- topic: iter.topic,
11
- metrics: iter.metrics,
12
- analysis: iter.analysis,
13
- };
14
- if (options.includeTests) {
15
- summary.tests = iter.testResults.map((r) => {
16
- const detail = {
17
- prompt: r.testCase.prompt,
18
- expectedTriggered: r.testCase.expectedTriggered,
19
- actualTriggered: r.actualTriggered,
20
- correct: r.correct,
21
- category: r.testCase.category,
22
- scanAction: r.scanAction,
23
- };
24
- if (r.testCase.source) {
25
- detail.source = r.testCase.source;
26
- }
27
- return detail;
28
- });
29
- }
30
- return summary;
31
- });
32
- const report = {
33
- version: 1,
34
- generatedAt: new Date().toISOString(),
35
- run: {
36
- id: run.id,
37
- createdAt: run.createdAt,
38
- status: run.status,
39
- intent: run.userInput.intent,
40
- topicDescription: run.userInput.topicDescription,
41
- profileName: run.userInput.profileName,
42
- bestIteration: run.bestIteration,
43
- bestCoverage: run.bestCoverage,
44
- totalIterations: run.iterations.length,
45
- },
46
- iterations,
47
- };
48
- if (options.diffRun) {
49
- report.diff = buildDiff(run, options.diffRun);
50
- }
51
- return report;
52
- }
53
- function buildDiff(baseRun, compareRun) {
54
- const baseIter = baseRun.iterations[baseRun.bestIteration - 1];
55
- const compareIter = compareRun.iterations[compareRun.bestIteration - 1];
56
- const baseMetrics = baseIter.metrics;
57
- const compareMetrics = compareIter.metrics;
58
- return {
59
- baseRunId: baseRun.id,
60
- compareRunId: compareRun.id,
61
- metricsDelta: {
62
- coverage: compareMetrics.coverage - baseMetrics.coverage,
63
- tpr: compareMetrics.truePositiveRate - baseMetrics.truePositiveRate,
64
- tnr: compareMetrics.trueNegativeRate - baseMetrics.trueNegativeRate,
65
- accuracy: compareMetrics.accuracy - baseMetrics.accuracy,
66
- f1: compareMetrics.f1Score - baseMetrics.f1Score,
67
- },
68
- baseMetrics,
69
- compareMetrics,
70
- baseTopic: baseIter.topic,
71
- compareTopic: compareIter.topic,
72
- };
73
- }
74
- //# sourceMappingURL=json.js.map