@cdot65/prisma-airs-cli 1.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 (234) hide show
  1. package/README.md +42 -0
  2. package/dist/airs/management.d.ts +58 -0
  3. package/dist/airs/management.d.ts.map +1 -0
  4. package/dist/airs/management.js +287 -0
  5. package/dist/airs/management.js.map +1 -0
  6. package/dist/airs/modelsecurity.d.ts +74 -0
  7. package/dist/airs/modelsecurity.d.ts.map +1 -0
  8. package/dist/airs/modelsecurity.js +337 -0
  9. package/dist/airs/modelsecurity.js.map +1 -0
  10. package/dist/airs/promptsets.d.ts +50 -0
  11. package/dist/airs/promptsets.d.ts.map +1 -0
  12. package/dist/airs/promptsets.js +133 -0
  13. package/dist/airs/promptsets.js.map +1 -0
  14. package/dist/airs/redteam.d.ts +45 -0
  15. package/dist/airs/redteam.d.ts.map +1 -0
  16. package/dist/airs/redteam.js +219 -0
  17. package/dist/airs/redteam.js.map +1 -0
  18. package/dist/airs/runtime.d.ts +27 -0
  19. package/dist/airs/runtime.d.ts.map +1 -0
  20. package/dist/airs/runtime.js +158 -0
  21. package/dist/airs/runtime.js.map +1 -0
  22. package/dist/airs/scanner.d.ts +22 -0
  23. package/dist/airs/scanner.d.ts.map +1 -0
  24. package/dist/airs/scanner.js +62 -0
  25. package/dist/airs/scanner.js.map +1 -0
  26. package/dist/airs/types.d.ts +683 -0
  27. package/dist/airs/types.d.ts.map +1 -0
  28. package/dist/airs/types.js +6 -0
  29. package/dist/airs/types.js.map +1 -0
  30. package/dist/audit/evaluator.d.ts +17 -0
  31. package/dist/audit/evaluator.d.ts.map +1 -0
  32. package/dist/audit/evaluator.js +82 -0
  33. package/dist/audit/evaluator.js.map +1 -0
  34. package/dist/audit/report.d.ts +38 -0
  35. package/dist/audit/report.d.ts.map +1 -0
  36. package/dist/audit/report.js +141 -0
  37. package/dist/audit/report.js.map +1 -0
  38. package/dist/audit/runner.d.ts +18 -0
  39. package/dist/audit/runner.d.ts.map +1 -0
  40. package/dist/audit/runner.js +60 -0
  41. package/dist/audit/runner.js.map +1 -0
  42. package/dist/audit/types.d.ts +53 -0
  43. package/dist/audit/types.d.ts.map +1 -0
  44. package/dist/audit/types.js +5 -0
  45. package/dist/audit/types.js.map +1 -0
  46. package/dist/cli/bulk-scan-state.d.ts +15 -0
  47. package/dist/cli/bulk-scan-state.d.ts.map +1 -0
  48. package/dist/cli/bulk-scan-state.js +20 -0
  49. package/dist/cli/bulk-scan-state.js.map +1 -0
  50. package/dist/cli/commands/audit.d.ts +4 -0
  51. package/dist/cli/commands/audit.d.ts.map +1 -0
  52. package/dist/cli/commands/audit.js +113 -0
  53. package/dist/cli/commands/audit.js.map +1 -0
  54. package/dist/cli/commands/generate.d.ts +4 -0
  55. package/dist/cli/commands/generate.d.ts.map +1 -0
  56. package/dist/cli/commands/generate.js +231 -0
  57. package/dist/cli/commands/generate.js.map +1 -0
  58. package/dist/cli/commands/list.d.ts +4 -0
  59. package/dist/cli/commands/list.d.ts.map +1 -0
  60. package/dist/cli/commands/list.js +23 -0
  61. package/dist/cli/commands/list.js.map +1 -0
  62. package/dist/cli/commands/modelsecurity.d.ts +4 -0
  63. package/dist/cli/commands/modelsecurity.d.ts.map +1 -0
  64. package/dist/cli/commands/modelsecurity.js +499 -0
  65. package/dist/cli/commands/modelsecurity.js.map +1 -0
  66. package/dist/cli/commands/redteam.d.ts +4 -0
  67. package/dist/cli/commands/redteam.d.ts.map +1 -0
  68. package/dist/cli/commands/redteam.js +630 -0
  69. package/dist/cli/commands/redteam.js.map +1 -0
  70. package/dist/cli/commands/report.d.ts +4 -0
  71. package/dist/cli/commands/report.d.ts.map +1 -0
  72. package/dist/cli/commands/report.js +116 -0
  73. package/dist/cli/commands/report.js.map +1 -0
  74. package/dist/cli/commands/resume.d.ts +4 -0
  75. package/dist/cli/commands/resume.d.ts.map +1 -0
  76. package/dist/cli/commands/resume.js +138 -0
  77. package/dist/cli/commands/resume.js.map +1 -0
  78. package/dist/cli/commands/runtime.d.ts +3 -0
  79. package/dist/cli/commands/runtime.d.ts.map +1 -0
  80. package/dist/cli/commands/runtime.js +582 -0
  81. package/dist/cli/commands/runtime.js.map +1 -0
  82. package/dist/cli/index.d.ts +3 -0
  83. package/dist/cli/index.d.ts.map +1 -0
  84. package/dist/cli/index.js +46 -0
  85. package/dist/cli/index.js.map +1 -0
  86. package/dist/cli/parse-input.d.ts +9 -0
  87. package/dist/cli/parse-input.d.ts.map +1 -0
  88. package/dist/cli/parse-input.js +109 -0
  89. package/dist/cli/parse-input.js.map +1 -0
  90. package/dist/cli/prompts.d.ts +9 -0
  91. package/dist/cli/prompts.d.ts.map +1 -0
  92. package/dist/cli/prompts.js +90 -0
  93. package/dist/cli/prompts.js.map +1 -0
  94. package/dist/cli/renderer/audit.d.ts +8 -0
  95. package/dist/cli/renderer/audit.d.ts.map +1 -0
  96. package/dist/cli/renderer/audit.js +44 -0
  97. package/dist/cli/renderer/audit.js.map +1 -0
  98. package/dist/cli/renderer/common.d.ts +3 -0
  99. package/dist/cli/renderer/common.d.ts.map +1 -0
  100. package/dist/cli/renderer/common.js +6 -0
  101. package/dist/cli/renderer/common.js.map +1 -0
  102. package/dist/cli/renderer/generate.d.ts +29 -0
  103. package/dist/cli/renderer/generate.d.ts.map +1 -0
  104. package/dist/cli/renderer/generate.js +132 -0
  105. package/dist/cli/renderer/generate.js.map +1 -0
  106. package/dist/cli/renderer/index.d.ts +7 -0
  107. package/dist/cli/renderer/index.d.ts.map +1 -0
  108. package/dist/cli/renderer/index.js +7 -0
  109. package/dist/cli/renderer/index.js.map +1 -0
  110. package/dist/cli/renderer/modelsecurity.d.ts +34 -0
  111. package/dist/cli/renderer/modelsecurity.d.ts.map +1 -0
  112. package/dist/cli/renderer/modelsecurity.js +285 -0
  113. package/dist/cli/renderer/modelsecurity.js.map +1 -0
  114. package/dist/cli/renderer/redteam.d.ts +152 -0
  115. package/dist/cli/renderer/redteam.d.ts.map +1 -0
  116. package/dist/cli/renderer/redteam.js +294 -0
  117. package/dist/cli/renderer/redteam.js.map +1 -0
  118. package/dist/cli/renderer/runtime.d.ts +87 -0
  119. package/dist/cli/renderer/runtime.d.ts.map +1 -0
  120. package/dist/cli/renderer/runtime.js +230 -0
  121. package/dist/cli/renderer/runtime.js.map +1 -0
  122. package/dist/config/loader.d.ts +3 -0
  123. package/dist/config/loader.d.ts.map +1 -0
  124. package/dist/config/loader.js +65 -0
  125. package/dist/config/loader.js.map +1 -0
  126. package/dist/config/schema.d.ts +78 -0
  127. package/dist/config/schema.d.ts.map +1 -0
  128. package/dist/config/schema.js +44 -0
  129. package/dist/config/schema.js.map +1 -0
  130. package/dist/core/constraints.d.ts +18 -0
  131. package/dist/core/constraints.d.ts.map +1 -0
  132. package/dist/core/constraints.js +75 -0
  133. package/dist/core/constraints.js.map +1 -0
  134. package/dist/core/loop.d.ts +54 -0
  135. package/dist/core/loop.d.ts.map +1 -0
  136. package/dist/core/loop.js +462 -0
  137. package/dist/core/loop.js.map +1 -0
  138. package/dist/core/metrics.d.ts +13 -0
  139. package/dist/core/metrics.d.ts.map +1 -0
  140. package/dist/core/metrics.js +73 -0
  141. package/dist/core/metrics.js.map +1 -0
  142. package/dist/core/types.d.ts +175 -0
  143. package/dist/core/types.d.ts.map +1 -0
  144. package/dist/core/types.js +5 -0
  145. package/dist/core/types.js.map +1 -0
  146. package/dist/index.d.ts +35 -0
  147. package/dist/index.d.ts.map +1 -0
  148. package/dist/index.js +49 -0
  149. package/dist/index.js.map +1 -0
  150. package/dist/llm/prompts/analyze-results.d.ts +3 -0
  151. package/dist/llm/prompts/analyze-results.d.ts.map +1 -0
  152. package/dist/llm/prompts/analyze-results.js +52 -0
  153. package/dist/llm/prompts/analyze-results.js.map +1 -0
  154. package/dist/llm/prompts/generate-companion.d.ts +3 -0
  155. package/dist/llm/prompts/generate-companion.d.ts.map +1 -0
  156. package/dist/llm/prompts/generate-companion.js +42 -0
  157. package/dist/llm/prompts/generate-companion.js.map +1 -0
  158. package/dist/llm/prompts/generate-tests.d.ts +3 -0
  159. package/dist/llm/prompts/generate-tests.d.ts.map +1 -0
  160. package/dist/llm/prompts/generate-tests.js +46 -0
  161. package/dist/llm/prompts/generate-tests.js.map +1 -0
  162. package/dist/llm/prompts/generate-topic.d.ts +4 -0
  163. package/dist/llm/prompts/generate-topic.d.ts.map +1 -0
  164. package/dist/llm/prompts/generate-topic.js +41 -0
  165. package/dist/llm/prompts/generate-topic.js.map +1 -0
  166. package/dist/llm/prompts/improve-topic.d.ts +3 -0
  167. package/dist/llm/prompts/improve-topic.d.ts.map +1 -0
  168. package/dist/llm/prompts/improve-topic.js +77 -0
  169. package/dist/llm/prompts/improve-topic.js.map +1 -0
  170. package/dist/llm/prompts/simplify-topic.d.ts +3 -0
  171. package/dist/llm/prompts/simplify-topic.d.ts.map +1 -0
  172. package/dist/llm/prompts/simplify-topic.js +50 -0
  173. package/dist/llm/prompts/simplify-topic.js.map +1 -0
  174. package/dist/llm/provider.d.ts +21 -0
  175. package/dist/llm/provider.d.ts.map +1 -0
  176. package/dist/llm/provider.js +76 -0
  177. package/dist/llm/provider.js.map +1 -0
  178. package/dist/llm/schemas.d.ts +97 -0
  179. package/dist/llm/schemas.d.ts.map +1 -0
  180. package/dist/llm/schemas.js +24 -0
  181. package/dist/llm/schemas.js.map +1 -0
  182. package/dist/llm/service.d.ts +30 -0
  183. package/dist/llm/service.d.ts.map +1 -0
  184. package/dist/llm/service.js +273 -0
  185. package/dist/llm/service.js.map +1 -0
  186. package/dist/memory/diff.d.ts +4 -0
  187. package/dist/memory/diff.d.ts.map +1 -0
  188. package/dist/memory/diff.js +24 -0
  189. package/dist/memory/diff.js.map +1 -0
  190. package/dist/memory/extractor.d.ts +15 -0
  191. package/dist/memory/extractor.d.ts.map +1 -0
  192. package/dist/memory/extractor.js +133 -0
  193. package/dist/memory/extractor.js.map +1 -0
  194. package/dist/memory/injector.d.ts +22 -0
  195. package/dist/memory/injector.d.ts.map +1 -0
  196. package/dist/memory/injector.js +90 -0
  197. package/dist/memory/injector.js.map +1 -0
  198. package/dist/memory/prompts/extract-learnings.d.ts +3 -0
  199. package/dist/memory/prompts/extract-learnings.d.ts.map +1 -0
  200. package/dist/memory/prompts/extract-learnings.js +40 -0
  201. package/dist/memory/prompts/extract-learnings.js.map +1 -0
  202. package/dist/memory/schemas.d.ts +63 -0
  203. package/dist/memory/schemas.d.ts.map +1 -0
  204. package/dist/memory/schemas.js +13 -0
  205. package/dist/memory/schemas.js.map +1 -0
  206. package/dist/memory/store.d.ts +28 -0
  207. package/dist/memory/store.d.ts.map +1 -0
  208. package/dist/memory/store.js +103 -0
  209. package/dist/memory/store.js.map +1 -0
  210. package/dist/memory/types.d.ts +55 -0
  211. package/dist/memory/types.d.ts.map +1 -0
  212. package/dist/memory/types.js +6 -0
  213. package/dist/memory/types.js.map +1 -0
  214. package/dist/persistence/store.d.ts +21 -0
  215. package/dist/persistence/store.d.ts.map +1 -0
  216. package/dist/persistence/store.js +77 -0
  217. package/dist/persistence/store.js.map +1 -0
  218. package/dist/persistence/types.d.ts +23 -0
  219. package/dist/persistence/types.d.ts.map +1 -0
  220. package/dist/persistence/types.js +2 -0
  221. package/dist/persistence/types.js.map +1 -0
  222. package/dist/report/html.d.ts +6 -0
  223. package/dist/report/html.d.ts.map +1 -0
  224. package/dist/report/html.js +200 -0
  225. package/dist/report/html.js.map +1 -0
  226. package/dist/report/json.d.ts +11 -0
  227. package/dist/report/json.d.ts.map +1 -0
  228. package/dist/report/json.js +74 -0
  229. package/dist/report/json.js.map +1 -0
  230. package/dist/report/types.d.ts +58 -0
  231. package/dist/report/types.d.ts.map +1 -0
  232. package/dist/report/types.js +5 -0
  233. package/dist/report/types.js.map +1 -0
  234. package/package.json +67 -0
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from 'node:fs';
3
+ import { dirname, join } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import 'dotenv/config';
6
+ import chalk from 'chalk';
7
+ import { Command } from 'commander';
8
+ import { registerAuditCommand } from './commands/audit.js';
9
+ import { registerGenerateCommand } from './commands/generate.js';
10
+ import { registerListCommand } from './commands/list.js';
11
+ import { registerModelSecurityCommand } from './commands/modelsecurity.js';
12
+ import { registerRedteamCommand } from './commands/redteam.js';
13
+ import { registerReportCommand } from './commands/report.js';
14
+ import { registerResumeCommand } from './commands/resume.js';
15
+ import { registerRuntimeCommand } from './commands/runtime.js';
16
+ const __dirname = dirname(fileURLToPath(import.meta.url));
17
+ const pkg = JSON.parse(readFileSync(join(__dirname, '../../package.json'), 'utf-8'));
18
+ const program = new Command();
19
+ program
20
+ .name('airs')
21
+ .description('CLI and library for Palo Alto Prisma AIRS — guardrail refinement, AI red teaming, model security scanning, profile audits')
22
+ .version(pkg.version);
23
+ // Primary command groups
24
+ registerRuntimeCommand(program);
25
+ registerRedteamCommand(program);
26
+ registerModelSecurityCommand(program);
27
+ // ---------------------------------------------------------------------------
28
+ // Backward-compatible top-level aliases (deprecated — use runtime subcommands)
29
+ // ---------------------------------------------------------------------------
30
+ const deprecationNotice = (oldCmd, newCmd) => chalk.yellow(`[deprecated] "airs ${oldCmd}" → use "airs ${newCmd}"`);
31
+ function registerDeprecated(registerFn, oldCmd, newCmd) {
32
+ registerFn(program);
33
+ const cmd = program.commands.find((c) => c.name() === oldCmd);
34
+ if (cmd) {
35
+ cmd.hook('preAction', () => {
36
+ console.error(deprecationNotice(oldCmd, newCmd));
37
+ });
38
+ }
39
+ }
40
+ registerDeprecated(registerGenerateCommand, 'generate', 'runtime topics generate');
41
+ registerDeprecated(registerResumeCommand, 'resume', 'runtime topics resume');
42
+ registerDeprecated(registerReportCommand, 'report', 'runtime topics report');
43
+ registerDeprecated(registerListCommand, 'list', 'runtime topics runs');
44
+ registerDeprecated(registerAuditCommand, 'audit', 'runtime profiles audit');
45
+ program.parse();
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAErF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CACV,2HAA2H,CAC5H;KACA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,yBAAyB;AACzB,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AAEtC,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAC9E,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE,CAC3D,KAAK,CAAC,MAAM,CAAC,sBAAsB,MAAM,iBAAiB,MAAM,GAAG,CAAC,CAAC;AAEvE,SAAS,kBAAkB,CACzB,UAAoD,EACpD,MAAc,EACd,MAAc;IAEd,UAAU,CAAC,OAAO,CAAC,CAAC;IACpB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC;IAC9D,IAAI,GAAG,EAAE,CAAC;QACR,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,kBAAkB,CAAC,uBAAuB,EAAE,UAAU,EAAE,yBAAyB,CAAC,CAAC;AACnF,kBAAkB,CAAC,qBAAqB,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAAC;AAC7E,kBAAkB,CAAC,qBAAqB,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAAC;AAC7E,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC;AACvE,kBAAkB,CAAC,oBAAoB,EAAE,OAAO,EAAE,wBAAwB,CAAC,CAAC;AAE5E,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Parse an input file into an array of prompt strings.
3
+ *
4
+ * - `.csv` files: parses CSV, extracts the `prompt` column by header name.
5
+ * Handles quoted fields, escaped quotes, and commas within quotes.
6
+ * - `.txt` / extensionless: splits on newlines, trims, filters blanks.
7
+ */
8
+ export declare function parseInputFile(content: string, filePath: string): string[];
9
+ //# sourceMappingURL=parse-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-input.d.ts","sourceRoot":"","sources":["../../src/cli/parse-input.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAS1E"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Parse an input file into an array of prompt strings.
3
+ *
4
+ * - `.csv` files: parses CSV, extracts the `prompt` column by header name.
5
+ * Handles quoted fields, escaped quotes, and commas within quotes.
6
+ * - `.txt` / extensionless: splits on newlines, trims, filters blanks.
7
+ */
8
+ export function parseInputFile(content, filePath) {
9
+ const isCsv = /\.csv$/i.test(filePath);
10
+ if (isCsv) {
11
+ return parseCsv(content);
12
+ }
13
+ return content
14
+ .split('\n')
15
+ .map((l) => l.trim())
16
+ .filter((l) => l.length > 0);
17
+ }
18
+ /** Parse CSV content and extract the `prompt` column values. */
19
+ function parseCsv(content) {
20
+ const rows = parseCsvRows(content);
21
+ if (rows.length === 0)
22
+ return [];
23
+ const header = rows[0];
24
+ const promptIdx = header.findIndex((h) => h.trim().toLowerCase() === 'prompt');
25
+ if (promptIdx === -1) {
26
+ throw new Error('No "prompt" column found in CSV header');
27
+ }
28
+ return rows
29
+ .slice(1)
30
+ .map((row) => row[promptIdx]?.trim() ?? '')
31
+ .filter((p) => p.length > 0);
32
+ }
33
+ /**
34
+ * Minimal RFC 4180 CSV row parser.
35
+ * Handles quoted fields, escaped double-quotes (""), and commas within quotes.
36
+ */
37
+ function parseCsvRows(content) {
38
+ const rows = [];
39
+ let i = 0;
40
+ const len = content.length;
41
+ while (i < len) {
42
+ const { row, nextIndex } = parseRow(content, i, len);
43
+ if (row.length > 0 && !(row.length === 1 && row[0] === '')) {
44
+ rows.push(row);
45
+ }
46
+ i = nextIndex;
47
+ }
48
+ return rows;
49
+ }
50
+ function parseRow(content, start, len) {
51
+ const fields = [];
52
+ let i = start;
53
+ while (i < len) {
54
+ if (content[i] === '\n' || content[i] === '\r') {
55
+ // End of row — consume \r\n or \n
56
+ if (content[i] === '\r' && i + 1 < len && content[i + 1] === '\n') {
57
+ i += 2;
58
+ }
59
+ else {
60
+ i += 1;
61
+ }
62
+ break;
63
+ }
64
+ if (content[i] === '"') {
65
+ // Quoted field
66
+ const { value, nextIndex } = parseQuotedField(content, i, len);
67
+ fields.push(value);
68
+ i = nextIndex;
69
+ }
70
+ else {
71
+ // Unquoted field
72
+ let end = i;
73
+ while (end < len && content[end] !== ',' && content[end] !== '\n' && content[end] !== '\r') {
74
+ end++;
75
+ }
76
+ fields.push(content.slice(i, end));
77
+ i = end;
78
+ }
79
+ // Consume comma separator
80
+ if (i < len && content[i] === ',') {
81
+ i++;
82
+ }
83
+ }
84
+ return { row: fields, nextIndex: i };
85
+ }
86
+ function parseQuotedField(content, start, len) {
87
+ let i = start + 1; // skip opening quote
88
+ let value = '';
89
+ while (i < len) {
90
+ if (content[i] === '"') {
91
+ if (i + 1 < len && content[i + 1] === '"') {
92
+ // Escaped quote
93
+ value += '"';
94
+ i += 2;
95
+ }
96
+ else {
97
+ // Closing quote
98
+ i++; // skip closing quote
99
+ break;
100
+ }
101
+ }
102
+ else {
103
+ value += content[i];
104
+ i++;
105
+ }
106
+ }
107
+ return { value, nextIndex: i };
108
+ }
109
+ //# sourceMappingURL=parse-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-input.js","sourceRoot":"","sources":["../../src/cli/parse-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { LlmProvider } from '../config/schema.js';
2
+ import type { UserInput } from '../core/types.js';
3
+ /** Interactively collect all user inputs for a generation run via Inquirer prompts. */
4
+ export declare function collectUserInput(): Promise<UserInput>;
5
+ /** Prompt the user to select an LLM provider from the supported list. */
6
+ export declare function selectLlmProvider(): Promise<LlmProvider>;
7
+ /** Prompt the user to confirm whether to continue refining after an iteration. */
8
+ export declare function confirmContinue(iteration: number, coverage: number): Promise<boolean>;
9
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/cli/prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,uFAAuF;AACvF,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,SAAS,CAAC,CA6E3D;AAED,yEAAyE;AACzE,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAY9D;AAED,kFAAkF;AAClF,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK3F"}
@@ -0,0 +1,90 @@
1
+ import { confirm, input, number, select } from '@inquirer/prompts';
2
+ /** Interactively collect all user inputs for a generation run via Inquirer prompts. */
3
+ export async function collectUserInput() {
4
+ const topicDescription = await input({
5
+ message: 'Describe the topic to create a guardrail for:',
6
+ validate: (v) => (v.trim().length > 0 ? true : 'Description is required'),
7
+ });
8
+ const intent = await select({
9
+ message: 'Should this topic be blocked or allowed?',
10
+ choices: [
11
+ { name: 'Block', value: 'block' },
12
+ { name: 'Allow', value: 'allow' },
13
+ ],
14
+ });
15
+ const profileName = await input({
16
+ message: 'AIRS security profile name:',
17
+ validate: (v) => (v.trim().length > 0 ? true : 'Profile name is required'),
18
+ });
19
+ const hasSeedExamples = await confirm({
20
+ message: 'Do you have seed examples to provide?',
21
+ default: false,
22
+ });
23
+ let seedExamples;
24
+ if (hasSeedExamples) {
25
+ const examplesRaw = await input({
26
+ message: 'Enter examples (one per line, empty line to finish):\nPaste examples separated by newlines:',
27
+ });
28
+ seedExamples = examplesRaw
29
+ .split('\n')
30
+ .map((s) => s.trim())
31
+ .filter((s) => s.length > 0);
32
+ }
33
+ const maxIterations = (await number({
34
+ message: 'Max iterations (default 20):',
35
+ default: 20,
36
+ min: 1,
37
+ max: 100,
38
+ })) ?? 20;
39
+ const targetCoverageRaw = (await number({
40
+ message: 'Target coverage % (default 90):',
41
+ default: 90,
42
+ min: 10,
43
+ max: 100,
44
+ })) ?? 90;
45
+ const accumulateTests = await confirm({
46
+ message: 'Accumulate test prompts across iterations?',
47
+ default: false,
48
+ });
49
+ let maxAccumulatedTests;
50
+ if (accumulateTests) {
51
+ const cap = await number({
52
+ message: 'Max accumulated tests (0 = no limit):',
53
+ default: 0,
54
+ min: 0,
55
+ });
56
+ maxAccumulatedTests = cap && cap > 0 ? cap : undefined;
57
+ }
58
+ return {
59
+ topicDescription,
60
+ intent,
61
+ profileName,
62
+ seedExamples,
63
+ maxIterations,
64
+ targetCoverage: targetCoverageRaw / 100,
65
+ accumulateTests,
66
+ maxAccumulatedTests,
67
+ };
68
+ }
69
+ /** Prompt the user to select an LLM provider from the supported list. */
70
+ export async function selectLlmProvider() {
71
+ return select({
72
+ message: 'Select LLM provider:',
73
+ choices: [
74
+ { name: 'Claude API', value: 'claude-api' },
75
+ { name: 'Claude (Vertex AI)', value: 'claude-vertex' },
76
+ { name: 'Claude (Bedrock)', value: 'claude-bedrock' },
77
+ { name: 'Gemini API', value: 'gemini-api' },
78
+ { name: 'Gemini (Vertex AI)', value: 'gemini-vertex' },
79
+ { name: 'Gemini (Bedrock)', value: 'gemini-bedrock' },
80
+ ],
81
+ });
82
+ }
83
+ /** Prompt the user to confirm whether to continue refining after an iteration. */
84
+ export async function confirmContinue(iteration, coverage) {
85
+ return confirm({
86
+ message: `Iteration ${iteration} complete (coverage: ${(coverage * 100).toFixed(1)}%). Continue refining?`,
87
+ default: true,
88
+ });
89
+ }
90
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/cli/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { AuditResult, ConflictPair, ProfileTopic } from '../../audit/types.js';
2
+ /** Render profile topics discovered during audit. */
3
+ export declare function renderAuditTopics(topics: ProfileTopic[]): void;
4
+ /** Render audit completion with per-topic metrics table. */
5
+ export declare function renderAuditComplete(result: AuditResult): void;
6
+ /** Render detected cross-topic conflicts. */
7
+ export declare function renderConflicts(conflicts: ConflictPair[]): void;
8
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/cli/renderer/audit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpF,qDAAqD;AACrD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAO9D;AAED,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAiB7D;AAED,6CAA6C;AAC7C,wBAAgB,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,IAAI,CAa/D"}
@@ -0,0 +1,44 @@
1
+ import chalk from 'chalk';
2
+ /** Render profile topics discovered during audit. */
3
+ export function renderAuditTopics(topics) {
4
+ for (const t of topics) {
5
+ const actionColor = t.action === 'block' ? chalk.red : chalk.green;
6
+ console.log(` ${actionColor(`[${t.action}]`)} ${chalk.bold(t.topicName)}`);
7
+ if (t.description)
8
+ console.log(chalk.dim(` ${t.description}`));
9
+ }
10
+ console.log();
11
+ }
12
+ /** Render audit completion with per-topic metrics table. */
13
+ export function renderAuditComplete(result) {
14
+ console.log(chalk.bold('\n Per-Topic Results:\n'));
15
+ console.log(chalk.dim(' Topic Coverage TPR TNR Accuracy Tests'));
16
+ console.log(chalk.dim(` ${'─'.repeat(72)}`));
17
+ for (const tr of result.topics) {
18
+ const m = tr.metrics;
19
+ const name = tr.topic.topicName.padEnd(30);
20
+ const cov = `${(m.coverage * 100).toFixed(0)}%`.padStart(6);
21
+ const tpr = `${(m.truePositiveRate * 100).toFixed(0)}%`.padStart(6);
22
+ const tnr = `${(m.trueNegativeRate * 100).toFixed(0)}%`.padStart(6);
23
+ const acc = `${(m.accuracy * 100).toFixed(0)}%`.padStart(6);
24
+ const tests = String(tr.testResults.length).padStart(5);
25
+ const covColor = m.coverage >= 0.9 ? chalk.green : m.coverage >= 0.5 ? chalk.yellow : chalk.red;
26
+ console.log(` ${name} ${covColor(cov)} ${tpr} ${tnr} ${acc} ${tests}`);
27
+ }
28
+ }
29
+ /** Render detected cross-topic conflicts. */
30
+ export function renderConflicts(conflicts) {
31
+ console.log(chalk.bold.yellow(`\n Conflicts Detected: ${conflicts.length}\n`));
32
+ for (const c of conflicts) {
33
+ console.log(chalk.yellow(` ${c.topicA} ↔ ${c.topicB}`));
34
+ console.log(chalk.dim(` ${c.description}`));
35
+ for (const e of c.evidence.slice(0, 3)) {
36
+ console.log(chalk.dim(` • "${e}"`));
37
+ }
38
+ if (c.evidence.length > 3) {
39
+ console.log(chalk.dim(` ...and ${c.evidence.length - 3} more`));
40
+ }
41
+ }
42
+ console.log();
43
+ }
44
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/cli/renderer/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Render an error message to stderr. */
2
+ export declare function renderError(message: string): void;
3
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/cli/renderer/common.ts"],"names":[],"mappings":"AAEA,yCAAyC;AACzC,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD"}
@@ -0,0 +1,6 @@
1
+ import chalk from 'chalk';
2
+ /** Render an error message to stderr. */
3
+ export function renderError(message) {
4
+ console.error(chalk.red(`\n Error: ${message}\n`));
5
+ }
6
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/cli/renderer/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,yCAAyC;AACzC,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,OAAO,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { AnalysisReport, CustomTopic, EfficacyMetrics, IterationResult, RunState, TestResult } from '../../core/types.js';
2
+ import type { RunStateSummary } from '../../persistence/types.js';
3
+ /** Render the application banner. */
4
+ export declare function renderHeader(): void;
5
+ /** Render iteration number header. */
6
+ export declare function renderIterationStart(iteration: number): void;
7
+ /** Render a topic's name, description, and examples. */
8
+ export declare function renderTopic(topic: CustomTopic): void;
9
+ /** Render companion allow topic info (two-phase generation). */
10
+ export declare function renderCompanionTopic(topic: CustomTopic): void;
11
+ /** Render a scan progress bar with percentage. */
12
+ export declare function renderTestProgress(completed: number, total: number): void;
13
+ /** Render efficacy metrics with color-coded coverage. */
14
+ export declare function renderMetrics(metrics: EfficacyMetrics): void;
15
+ /** Render analysis summary with FP/FN pattern details. */
16
+ export declare function renderAnalysis(analysis: AnalysisReport): void;
17
+ /** Render per-test-case results table. */
18
+ export declare function renderTestResults(results: TestResult[]): void;
19
+ /** Render loop completion summary with best iteration and run ID. */
20
+ export declare function renderLoopComplete(runState: RunState): void;
21
+ /** Render a list of saved runs with status, coverage, and topic description. */
22
+ export declare function renderRunList(runs: RunStateSummary[]): void;
23
+ /** Render a one-line iteration summary with duration and coverage. */
24
+ export declare function renderIterationSummary(result: IterationResult): void;
25
+ /** Render memory loading status (count of learnings loaded or "none found"). */
26
+ export declare function renderMemoryLoaded(learningCount: number): void;
27
+ /** Render count of learnings extracted from the current run. */
28
+ export declare function renderMemoryExtracted(learningCount: number): void;
29
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/renderer/generate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,eAAe,EACf,eAAe,EACf,QAAQ,EACR,UAAU,EACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,qCAAqC;AACrC,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED,sCAAsC;AACtC,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED,wDAAwD;AACxD,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAQpD;AAED,gEAAgE;AAChE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAI7D;AAED,kDAAkD;AAClD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAKzE;AAED,yDAAyD;AACzD,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAe5D;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAe7D;AAED,0CAA0C;AAC1C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAS7D;AAED,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAW3D;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,IAAI,CAsB3D;AAED,sEAAsE;AACtE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAUpE;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAM9D;AAED,gEAAgE;AAChE,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAEjE"}
@@ -0,0 +1,132 @@
1
+ import chalk from 'chalk';
2
+ /** Render the application banner. */
3
+ export function renderHeader() {
4
+ console.log(chalk.bold.cyan('\n Prisma AIRS Guardrail Generator'));
5
+ console.log(chalk.dim(' Iterative custom topic refinement\n'));
6
+ }
7
+ /** Render iteration number header. */
8
+ export function renderIterationStart(iteration) {
9
+ console.log(chalk.bold(`\n━━━ Iteration ${iteration} ━━━`));
10
+ }
11
+ /** Render a topic's name, description, and examples. */
12
+ export function renderTopic(topic) {
13
+ console.log(chalk.bold(' Topic:'));
14
+ console.log(` Name: ${chalk.white(topic.name)}`);
15
+ console.log(` Desc: ${chalk.white(topic.description)}`);
16
+ console.log(' Examples:');
17
+ for (const ex of topic.examples) {
18
+ console.log(` ${chalk.dim('•')} ${ex}`);
19
+ }
20
+ }
21
+ /** Render companion allow topic info (two-phase generation). */
22
+ export function renderCompanionTopic(topic) {
23
+ console.log(chalk.bold(' Companion Allow Topic:'));
24
+ console.log(` Name: ${chalk.white(topic.name)}`);
25
+ console.log(` Desc: ${chalk.white(topic.description)}`);
26
+ }
27
+ /** Render a scan progress bar with percentage. */
28
+ export function renderTestProgress(completed, total) {
29
+ const pct = Math.round((completed / total) * 100);
30
+ const bar = '█'.repeat(Math.round(pct / 5)) + '░'.repeat(20 - Math.round(pct / 5));
31
+ process.stdout.write(`\r Scanning: ${bar} ${pct}% (${completed}/${total})`);
32
+ if (completed === total)
33
+ console.log();
34
+ }
35
+ /** Render efficacy metrics with color-coded coverage. */
36
+ export function renderMetrics(metrics) {
37
+ const coverageColor = metrics.coverage >= 0.9 ? chalk.green : metrics.coverage >= 0.7 ? chalk.yellow : chalk.red;
38
+ console.log(chalk.bold('\n Metrics:'));
39
+ console.log(` Coverage: ${coverageColor(`${(metrics.coverage * 100).toFixed(1)}%`)}`);
40
+ console.log(` Accuracy: ${(metrics.accuracy * 100).toFixed(1)}%`);
41
+ console.log(` TPR: ${(metrics.truePositiveRate * 100).toFixed(1)}%`);
42
+ console.log(` TNR: ${(metrics.trueNegativeRate * 100).toFixed(1)}%`);
43
+ console.log(` F1 Score: ${metrics.f1Score.toFixed(3)}`);
44
+ let countsLine = ` TP: ${metrics.truePositives} TN: ${metrics.trueNegatives} FP: ${metrics.falsePositives} FN: ${metrics.falseNegatives}`;
45
+ if (metrics.regressionCount > 0) {
46
+ countsLine += chalk.red(` Regressions: ${metrics.regressionCount}`);
47
+ }
48
+ console.log(chalk.dim(countsLine));
49
+ }
50
+ /** Render analysis summary with FP/FN pattern details. */
51
+ export function renderAnalysis(analysis) {
52
+ console.log(chalk.bold('\n Analysis:'));
53
+ console.log(` ${analysis.summary}`);
54
+ if (analysis.falsePositivePatterns.length > 0) {
55
+ console.log(chalk.yellow(' FP patterns:'));
56
+ for (const p of analysis.falsePositivePatterns) {
57
+ console.log(` ${chalk.dim('•')} ${p}`);
58
+ }
59
+ }
60
+ if (analysis.falseNegativePatterns.length > 0) {
61
+ console.log(chalk.red(' FN patterns:'));
62
+ for (const p of analysis.falseNegativePatterns) {
63
+ console.log(` ${chalk.dim('•')} ${p}`);
64
+ }
65
+ }
66
+ }
67
+ /** Render per-test-case results table. */
68
+ export function renderTestResults(results) {
69
+ console.log(chalk.bold('\n Test Results:'));
70
+ for (const r of results) {
71
+ const icon = r.correct ? chalk.green('✓') : chalk.red('✗');
72
+ const expected = r.testCase.expectedTriggered ? 'triggered' : 'safe';
73
+ const actual = r.actualTriggered ? 'triggered' : 'safe';
74
+ const status = r.correct ? '' : chalk.red(` (expected ${expected}, got ${actual})`);
75
+ console.log(` ${icon} ${r.testCase.prompt}${status}`);
76
+ }
77
+ }
78
+ /** Render loop completion summary with best iteration and run ID. */
79
+ export function renderLoopComplete(runState) {
80
+ const best = runState.iterations[runState.bestIteration - 1];
81
+ console.log(chalk.bold.green('\n━━━ Complete ━━━'));
82
+ console.log(` Best iteration: ${runState.bestIteration} (coverage: ${(runState.bestCoverage * 100).toFixed(1)}%)`);
83
+ console.log(` Total iterations: ${runState.iterations.length}`);
84
+ if (best) {
85
+ renderTopic(best.topic);
86
+ }
87
+ console.log(`\n Run ID: ${chalk.dim(runState.id)}\n`);
88
+ }
89
+ /** Render a list of saved runs with status, coverage, and topic description. */
90
+ export function renderRunList(runs) {
91
+ if (runs.length === 0) {
92
+ console.log(chalk.dim(' No saved runs found.\n'));
93
+ return;
94
+ }
95
+ console.log(chalk.bold('\n Saved Runs:\n'));
96
+ for (const run of runs) {
97
+ const statusColor = run.status === 'completed'
98
+ ? chalk.green
99
+ : run.status === 'running'
100
+ ? chalk.blue
101
+ : run.status === 'paused'
102
+ ? chalk.yellow
103
+ : chalk.red;
104
+ console.log(` ${chalk.dim(run.id)}`);
105
+ console.log(` Status: ${statusColor(run.status)} Coverage: ${(run.bestCoverage * 100).toFixed(1)}% Iterations: ${run.currentIteration}`);
106
+ console.log(` Topic: ${run.topicDescription}`);
107
+ console.log(` Created: ${run.createdAt}\n`);
108
+ }
109
+ }
110
+ /** Render a one-line iteration summary with duration and coverage. */
111
+ export function renderIterationSummary(result) {
112
+ const coverageColor = result.metrics.coverage >= 0.9
113
+ ? chalk.green
114
+ : result.metrics.coverage >= 0.7
115
+ ? chalk.yellow
116
+ : chalk.red;
117
+ console.log(` ${chalk.dim(`[${result.durationMs}ms]`)} Coverage: ${coverageColor(`${(result.metrics.coverage * 100).toFixed(1)}%`)} | Accuracy: ${(result.metrics.accuracy * 100).toFixed(1)}%`);
118
+ }
119
+ /** Render memory loading status (count of learnings loaded or "none found"). */
120
+ export function renderMemoryLoaded(learningCount) {
121
+ if (learningCount > 0) {
122
+ console.log(chalk.cyan(` Memory: loaded ${learningCount} learnings from previous runs`));
123
+ }
124
+ else {
125
+ console.log(chalk.dim(' Memory: no previous learnings found'));
126
+ }
127
+ }
128
+ /** Render count of learnings extracted from the current run. */
129
+ export function renderMemoryExtracted(learningCount) {
130
+ console.log(chalk.cyan(` Memory: extracted ${learningCount} learnings from this run`));
131
+ }
132
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/renderer/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from './audit.js';
2
+ export * from './common.js';
3
+ export * from './generate.js';
4
+ export * from './modelsecurity.js';
5
+ export * from './redteam.js';
6
+ export * from './runtime.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/renderer/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './audit.js';
2
+ export * from './common.js';
3
+ export * from './generate.js';
4
+ export * from './modelsecurity.js';
5
+ export * from './redteam.js';
6
+ export * from './runtime.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/renderer/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { ModelSecurityEvaluation, ModelSecurityFile, ModelSecurityGroup, ModelSecurityRule, ModelSecurityRuleInstance, ModelSecurityScan, ModelSecurityViolation } from '../../airs/types.js';
2
+ /** Render the model security banner. */
3
+ export declare function renderModelSecurityHeader(): void;
4
+ /** Render security group list. */
5
+ export declare function renderGroupList(groups: ModelSecurityGroup[]): void;
6
+ /** Render security group detail. */
7
+ export declare function renderGroupDetail(group: ModelSecurityGroup): void;
8
+ /** Render security rule list. */
9
+ export declare function renderRuleList(rules: ModelSecurityRule[]): void;
10
+ /** Render security rule detail. */
11
+ export declare function renderRuleDetail(rule: ModelSecurityRule): void;
12
+ /** Render rule instance list. */
13
+ export declare function renderRuleInstanceList(instances: ModelSecurityRuleInstance[]): void;
14
+ /** Render rule instance detail. */
15
+ export declare function renderRuleInstanceDetail(instance: ModelSecurityRuleInstance): void;
16
+ /** Render a list of model security scans. */
17
+ export declare function renderMsScanList(scans: ModelSecurityScan[]): void;
18
+ /** Render full scan detail. */
19
+ export declare function renderMsScanDetail(scan: ModelSecurityScan): void;
20
+ /** Render a list of evaluations. */
21
+ export declare function renderEvaluationList(evaluations: ModelSecurityEvaluation[]): void;
22
+ /** Render a single evaluation detail. */
23
+ export declare function renderEvaluationDetail(evaluation: ModelSecurityEvaluation): void;
24
+ /** Render a list of violations. */
25
+ export declare function renderViolationList(violations: ModelSecurityViolation[]): void;
26
+ /** Render a single violation detail. */
27
+ export declare function renderViolationDetail(violation: ModelSecurityViolation): void;
28
+ /** Render a list of scanned files. */
29
+ export declare function renderFileList(files: ModelSecurityFile[]): void;
30
+ /** Render label keys. */
31
+ export declare function renderLabelKeys(keys: string[]): void;
32
+ /** Render label values for a key. */
33
+ export declare function renderLabelValues(key: string, values: string[]): void;
34
+ //# sourceMappingURL=modelsecurity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelsecurity.d.ts","sourceRoot":"","sources":["../../../src/cli/renderer/modelsecurity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAE7B,wCAAwC;AACxC,wBAAgB,yBAAyB,IAAI,IAAI,CAGhD;AAED,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAYlE;AAED,oCAAoC;AACpC,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAWjE;AAED,iCAAiC;AACjC,wBAAgB,cAAc,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAe/D;AAED,mCAAmC;AACnC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CA8B9D;AAED,iCAAiC;AACjC,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,yBAAyB,EAAE,GAAG,IAAI,CAcnF;AAED,mCAAmC;AACnC,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI,CAyBlF;AAMD,6CAA6C;AAC7C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,IAAI,CA0BjE;AAED,+BAA+B;AAC/B,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CA6BhE;AAMD,oCAAoC;AACpC,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAajF;AAED,yCAAyC;AACzC,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,uBAAuB,GAAG,IAAI,CAgBhF;AAMD,mCAAmC;AACnC,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,sBAAsB,EAAE,GAAG,IAAI,CAa9E;AAED,wCAAwC;AACxC,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI,CAU7E;AAMD,sCAAsC;AACtC,wBAAgB,cAAc,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAa/D;AAMD,yBAAyB;AACzB,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAUpD;AAED,qCAAqC;AACrC,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAUrE"}