@cdot65/prisma-airs-cli 1.4.2 → 2.3.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 (150) hide show
  1. package/README.md +8 -6
  2. package/dist/airs/management.d.ts +2 -0
  3. package/dist/airs/management.d.ts.map +1 -1
  4. package/dist/airs/management.js +14 -0
  5. package/dist/airs/management.js.map +1 -1
  6. package/dist/airs/redteam.d.ts +15 -1
  7. package/dist/airs/redteam.d.ts.map +1 -1
  8. package/dist/airs/redteam.js +105 -0
  9. package/dist/airs/redteam.js.map +1 -1
  10. package/dist/airs/runtime.js +3 -3
  11. package/dist/airs/runtime.js.map +1 -1
  12. package/dist/airs/types.d.ts +80 -0
  13. package/dist/airs/types.d.ts.map +1 -1
  14. package/dist/audit/runner.d.ts +1 -1
  15. package/dist/audit/runner.d.ts.map +1 -1
  16. package/dist/cli/commands/redteam.d.ts +4 -0
  17. package/dist/cli/commands/redteam.d.ts.map +1 -1
  18. package/dist/cli/commands/redteam.js +323 -1
  19. package/dist/cli/commands/redteam.js.map +1 -1
  20. package/dist/cli/commands/runtime.d.ts.map +1 -1
  21. package/dist/cli/commands/runtime.js +83 -50
  22. package/dist/cli/commands/runtime.js.map +1 -1
  23. package/dist/cli/commands/topics-apply.d.ts +16 -0
  24. package/dist/cli/commands/topics-apply.d.ts.map +1 -0
  25. package/dist/cli/commands/topics-apply.js +69 -0
  26. package/dist/cli/commands/topics-apply.js.map +1 -0
  27. package/dist/cli/commands/topics-create.d.ts +16 -0
  28. package/dist/cli/commands/topics-create.d.ts.map +1 -0
  29. package/dist/cli/commands/topics-create.js +71 -0
  30. package/dist/cli/commands/topics-create.js.map +1 -0
  31. package/dist/cli/commands/topics-eval.d.ts +7 -0
  32. package/dist/cli/commands/topics-eval.d.ts.map +1 -0
  33. package/dist/cli/commands/topics-eval.js +65 -0
  34. package/dist/cli/commands/topics-eval.js.map +1 -0
  35. package/dist/cli/commands/topics-revert.d.ts +9 -0
  36. package/dist/cli/commands/topics-revert.d.ts.map +1 -0
  37. package/dist/cli/commands/topics-revert.js +52 -0
  38. package/dist/cli/commands/topics-revert.js.map +1 -0
  39. package/dist/cli/commands/topics-sample.d.ts +4 -0
  40. package/dist/cli/commands/topics-sample.d.ts.map +1 -0
  41. package/dist/cli/commands/topics-sample.js +27 -0
  42. package/dist/cli/commands/topics-sample.js.map +1 -0
  43. package/dist/cli/renderer/audit.d.ts +3 -0
  44. package/dist/cli/renderer/audit.d.ts.map +1 -1
  45. package/dist/cli/renderer/audit.js +14 -0
  46. package/dist/cli/renderer/audit.js.map +1 -1
  47. package/dist/cli/renderer/eval.d.ts +30 -0
  48. package/dist/cli/renderer/eval.d.ts.map +1 -0
  49. package/dist/cli/renderer/eval.js +61 -0
  50. package/dist/cli/renderer/eval.js.map +1 -0
  51. package/dist/cli/renderer/index.d.ts +1 -1
  52. package/dist/cli/renderer/index.d.ts.map +1 -1
  53. package/dist/cli/renderer/index.js +1 -1
  54. package/dist/cli/renderer/index.js.map +1 -1
  55. package/dist/cli/renderer/redteam.d.ts +37 -0
  56. package/dist/cli/renderer/redteam.d.ts.map +1 -1
  57. package/dist/cli/renderer/redteam.js +64 -0
  58. package/dist/cli/renderer/redteam.js.map +1 -1
  59. package/dist/config/loader.d.ts.map +1 -1
  60. package/dist/config/loader.js +0 -6
  61. package/dist/config/loader.js.map +1 -1
  62. package/dist/config/schema.d.ts +0 -15
  63. package/dist/config/schema.d.ts.map +1 -1
  64. package/dist/config/schema.js +0 -6
  65. package/dist/config/schema.js.map +1 -1
  66. package/dist/core/constraints.d.ts +1 -0
  67. package/dist/core/constraints.d.ts.map +1 -1
  68. package/dist/core/constraints.js +7 -0
  69. package/dist/core/constraints.js.map +1 -1
  70. package/dist/core/prompt-loader.d.ts +14 -0
  71. package/dist/core/prompt-loader.d.ts.map +1 -0
  72. package/dist/core/prompt-loader.js +122 -0
  73. package/dist/core/prompt-loader.js.map +1 -0
  74. package/dist/core/types.d.ts +0 -74
  75. package/dist/core/types.d.ts.map +1 -1
  76. package/dist/index.d.ts +1 -10
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +0 -16
  79. package/dist/index.js.map +1 -1
  80. package/dist/llm/service.d.ts +6 -2
  81. package/dist/llm/service.d.ts.map +1 -1
  82. package/dist/llm/service.js +0 -5
  83. package/dist/llm/service.js.map +1 -1
  84. package/dist/llm/types.d.ts +18 -0
  85. package/dist/llm/types.d.ts.map +1 -0
  86. package/dist/{persistence → llm}/types.js.map +1 -1
  87. package/package.json +2 -2
  88. package/dist/cli/commands/generate.d.ts +0 -4
  89. package/dist/cli/commands/generate.d.ts.map +0 -1
  90. package/dist/cli/commands/generate.js +0 -228
  91. package/dist/cli/commands/generate.js.map +0 -1
  92. package/dist/cli/commands/list.d.ts +0 -4
  93. package/dist/cli/commands/list.d.ts.map +0 -1
  94. package/dist/cli/commands/list.js +0 -23
  95. package/dist/cli/commands/list.js.map +0 -1
  96. package/dist/cli/commands/report.d.ts +0 -4
  97. package/dist/cli/commands/report.d.ts.map +0 -1
  98. package/dist/cli/commands/report.js +0 -116
  99. package/dist/cli/commands/report.js.map +0 -1
  100. package/dist/cli/commands/resume.d.ts +0 -4
  101. package/dist/cli/commands/resume.d.ts.map +0 -1
  102. package/dist/cli/commands/resume.js +0 -135
  103. package/dist/cli/commands/resume.js.map +0 -1
  104. package/dist/cli/prompts.d.ts +0 -9
  105. package/dist/cli/prompts.d.ts.map +0 -1
  106. package/dist/cli/prompts.js +0 -90
  107. package/dist/cli/prompts.js.map +0 -1
  108. package/dist/cli/renderer/generate.d.ts +0 -29
  109. package/dist/cli/renderer/generate.d.ts.map +0 -1
  110. package/dist/cli/renderer/generate.js +0 -132
  111. package/dist/cli/renderer/generate.js.map +0 -1
  112. package/dist/core/loop.d.ts +0 -48
  113. package/dist/core/loop.d.ts.map +0 -1
  114. package/dist/core/loop.js +0 -430
  115. package/dist/core/loop.js.map +0 -1
  116. package/dist/memory/diff.d.ts +0 -4
  117. package/dist/memory/diff.d.ts.map +0 -1
  118. package/dist/memory/diff.js +0 -24
  119. package/dist/memory/diff.js.map +0 -1
  120. package/dist/memory/extractor.d.ts +0 -15
  121. package/dist/memory/extractor.d.ts.map +0 -1
  122. package/dist/memory/extractor.js +0 -133
  123. package/dist/memory/extractor.js.map +0 -1
  124. package/dist/memory/injector.d.ts +0 -22
  125. package/dist/memory/injector.d.ts.map +0 -1
  126. package/dist/memory/injector.js +0 -90
  127. package/dist/memory/injector.js.map +0 -1
  128. package/dist/memory/prompts/extract-learnings.d.ts +0 -3
  129. package/dist/memory/prompts/extract-learnings.d.ts.map +0 -1
  130. package/dist/memory/prompts/extract-learnings.js +0 -40
  131. package/dist/memory/prompts/extract-learnings.js.map +0 -1
  132. package/dist/memory/schemas.d.ts +0 -63
  133. package/dist/memory/schemas.d.ts.map +0 -1
  134. package/dist/memory/schemas.js +0 -13
  135. package/dist/memory/schemas.js.map +0 -1
  136. package/dist/memory/store.d.ts +0 -28
  137. package/dist/memory/store.d.ts.map +0 -1
  138. package/dist/memory/store.js +0 -103
  139. package/dist/memory/store.js.map +0 -1
  140. package/dist/memory/types.d.ts +0 -55
  141. package/dist/memory/types.d.ts.map +0 -1
  142. package/dist/memory/types.js +0 -6
  143. package/dist/memory/types.js.map +0 -1
  144. package/dist/persistence/store.d.ts +0 -21
  145. package/dist/persistence/store.d.ts.map +0 -1
  146. package/dist/persistence/store.js +0 -77
  147. package/dist/persistence/store.js.map +0 -1
  148. package/dist/persistence/types.d.ts +0 -23
  149. package/dist/persistence/types.d.ts.map +0 -1
  150. /package/dist/{persistence → llm}/types.js +0 -0
@@ -1,228 +0,0 @@
1
- import * as fs from 'node:fs';
2
- import * as path from 'node:path';
3
- import { SdkManagementService } from '../../airs/management.js';
4
- import { SdkPromptSetService } from '../../airs/promptsets.js';
5
- import { AirsScanService, DebugScanService, RateLimitedScanService } from '../../airs/scanner.js';
6
- import { loadConfig } from '../../config/loader.js';
7
- import { runLoop } from '../../core/loop.js';
8
- import { createLlmProvider } from '../../llm/provider.js';
9
- import { LangChainLlmService } from '../../llm/service.js';
10
- import { LearningExtractor } from '../../memory/extractor.js';
11
- import { MemoryInjector } from '../../memory/injector.js';
12
- import { MemoryStore } from '../../memory/store.js';
13
- import { JsonFileStore } from '../../persistence/store.js';
14
- import { collectUserInput } from '../prompts.js';
15
- import { renderAnalysis, renderCompanionTopic, renderError, renderHeader, renderIterationStart, renderIterationSummary, renderLoopComplete, renderMemoryExtracted, renderMemoryLoaded, renderMetrics, renderTestProgress, renderTestsAccumulated, renderTestsComposed, renderTopic, } from '../renderer/index.js';
16
- /** Register the `generate` command — starts a new guardrail generation loop. */
17
- export function registerGenerateCommand(parent) {
18
- parent
19
- .command('generate')
20
- .description('Start a new guardrail generation loop')
21
- .option('--provider <provider>', 'LLM provider')
22
- .option('--model <model>', 'LLM model name')
23
- .option('--profile <name>', 'AIRS security profile name')
24
- .option('--topic <description>', 'Topic description')
25
- .option('--intent <intent>', 'Intent: block or allow')
26
- .option('--max-iterations <n>', 'Max iterations', '20')
27
- .option('--target-coverage <n>', 'Target coverage %', '90')
28
- .option('--max-regressions <n>', 'Stop after N consecutive coverage regressions (0 = disable)', '3')
29
- .option('--plateau-window <n>', 'Iterations to check for plateau (0 = disable)', '0')
30
- .option('--plateau-band <pct>', 'Max coverage variance for plateau detection', '0.05')
31
- .option('--accumulate-tests', 'Carry forward test prompts across iterations', false)
32
- .option('--max-accumulated-tests <n>', 'Max accumulated test count cap')
33
- .option('--memory', 'Enable learning memory (default)')
34
- .option('--no-memory', 'Disable learning memory')
35
- .option('--debug-scans', 'Dump raw AIRS scan responses to JSONL for debugging', false)
36
- .option('--create-prompt-set', 'Create custom prompt set from test cases after loop', false)
37
- .option('--prompt-set-name <name>', 'Override auto-generated prompt set name')
38
- .option('--rate <n>', 'Max AIRS scan API calls per second (default: unlimited)')
39
- .option('--save-tests <path>', 'Save best iteration test cases to CSV')
40
- .action(async (opts) => {
41
- try {
42
- renderHeader();
43
- const config = await loadConfig({
44
- llmProvider: opts.provider,
45
- llmModel: opts.model,
46
- memoryEnabled: opts.memory !== undefined ? String(opts.memory) : undefined,
47
- });
48
- // Collect user input (interactive or from CLI flags)
49
- let userInput;
50
- if (opts.topic && opts.profile) {
51
- userInput = {
52
- topicDescription: opts.topic,
53
- intent: (opts.intent ?? 'block'),
54
- profileName: opts.profile,
55
- maxIterations: Number.parseInt(opts.maxIterations, 10),
56
- targetCoverage: Number.parseInt(opts.targetCoverage, 10) / 100,
57
- maxRegressions: Number.parseInt(opts.maxRegressions, 10),
58
- plateauWindow: Number.parseInt(opts.plateauWindow, 10),
59
- plateauBand: Number.parseFloat(opts.plateauBand),
60
- accumulateTests: opts.accumulateTests ?? false,
61
- maxAccumulatedTests: opts.maxAccumulatedTests
62
- ? Number.parseInt(opts.maxAccumulatedTests, 10)
63
- : undefined,
64
- createPromptSet: opts.createPromptSet ?? false,
65
- promptSetName: opts.promptSetName,
66
- };
67
- }
68
- else {
69
- userInput = await collectUserInput();
70
- }
71
- // Initialize services
72
- const model = await createLlmProvider({
73
- provider: config.llmProvider,
74
- model: config.llmModel,
75
- anthropicApiKey: config.anthropicApiKey,
76
- googleApiKey: config.googleApiKey,
77
- googleCloudProject: config.googleCloudProject,
78
- googleCloudLocation: config.googleCloudLocation,
79
- awsRegion: config.awsRegion,
80
- awsAccessKeyId: config.awsAccessKeyId,
81
- awsSecretAccessKey: config.awsSecretAccessKey,
82
- });
83
- // Set up memory system
84
- const memoryEnabled = config.memoryEnabled;
85
- const memoryStore = memoryEnabled ? new MemoryStore(config.memoryDir) : undefined;
86
- const memoryInjector = memoryStore
87
- ? new MemoryInjector(memoryStore, config.maxMemoryChars)
88
- : undefined;
89
- const llm = new LangChainLlmService(model, memoryInjector);
90
- if (!config.airsApiKey)
91
- throw new Error('PANW_AI_SEC_API_KEY is required');
92
- let scanner = new AirsScanService(config.airsApiKey);
93
- if (opts.rate) {
94
- scanner = new RateLimitedScanService(scanner, Number.parseInt(opts.rate, 10));
95
- }
96
- if (opts.debugScans) {
97
- const debugPath = path.join(config.dataDir, '..', `debug-scans-${Date.now()}.jsonl`);
98
- scanner = new DebugScanService(scanner, debugPath);
99
- }
100
- const management = new SdkManagementService({
101
- clientId: config.mgmtClientId,
102
- clientSecret: config.mgmtClientSecret,
103
- tsgId: config.mgmtTsgId,
104
- apiEndpoint: config.mgmtEndpoint,
105
- tokenEndpoint: config.mgmtTokenEndpoint,
106
- });
107
- const store = new JsonFileStore(config.dataDir);
108
- // Load memory before loop
109
- if (memoryEnabled) {
110
- const learningCount = await llm.loadMemory(userInput.topicDescription);
111
- renderMemoryLoaded(learningCount);
112
- }
113
- const memoryExtractor = memoryStore ? new LearningExtractor(model, memoryStore) : undefined;
114
- // Set up prompt set service if requested
115
- const promptSets = userInput.createPromptSet
116
- ? new SdkPromptSetService({
117
- clientId: config.mgmtClientId,
118
- clientSecret: config.mgmtClientSecret,
119
- tsgId: config.mgmtTsgId,
120
- tokenEndpoint: config.mgmtTokenEndpoint,
121
- })
122
- : undefined;
123
- // Warn about allow-intent coverage expectations
124
- if (userInput.intent === 'allow') {
125
- console.log(' \u26A0 Allow-intent topics typically achieve 40\u201370% coverage due to AIRS semantic matching.');
126
- console.log(' Consider using --target-coverage 65 for realistic expectations.');
127
- console.log();
128
- }
129
- // Run the loop
130
- for await (const event of runLoop(userInput, {
131
- llm,
132
- management,
133
- scanner,
134
- memory: memoryExtractor ? { extractor: memoryExtractor } : undefined,
135
- promptSets,
136
- })) {
137
- switch (event.type) {
138
- case 'iteration:start':
139
- renderIterationStart(event.iteration);
140
- break;
141
- case 'generate:complete':
142
- renderTopic(event.topic);
143
- break;
144
- case 'companion:generated':
145
- renderCompanionTopic(event.topic);
146
- break;
147
- case 'companion:created':
148
- console.log(` \u2713 Companion allow topic created (${event.topicId})`);
149
- break;
150
- case 'tests:composed':
151
- renderTestsComposed(event.generated, event.carriedFailures, event.regressionTier, event.total);
152
- break;
153
- case 'tests:accumulated':
154
- renderTestsAccumulated(event.newCount, event.totalCount, event.droppedCount);
155
- break;
156
- case 'test:progress':
157
- renderTestProgress(event.completed, event.total);
158
- break;
159
- case 'evaluate:complete':
160
- renderMetrics(event.metrics);
161
- break;
162
- case 'analyze:complete':
163
- renderAnalysis(event.analysis);
164
- break;
165
- case 'iteration:complete':
166
- renderIterationSummary(event.result);
167
- break;
168
- case 'topic:reverted':
169
- console.log(` ↩ Reverted to best definition (iteration ${event.revertedToIteration})`);
170
- renderTopic(event.topic);
171
- break;
172
- case 'topic:simplified':
173
- console.log(' ⚡ Topic simplified after consecutive regressions');
174
- renderTopic(event.topic);
175
- break;
176
- case 'topic:duplicate':
177
- console.log(` ⚠ Topic identical to iteration ${event.duplicateOfIteration} — skipping scan`);
178
- break;
179
- case 'loop:plateau':
180
- console.log(` ⚠ Coverage plateaued at ${(event.band[0] * 100).toFixed(1)}–${(event.band[1] * 100).toFixed(1)}%`);
181
- console.log(` Platform ceiling likely reached (best: ${(event.bestCoverage * 100).toFixed(1)}%)`);
182
- break;
183
- case 'memory:extracted':
184
- renderMemoryExtracted(event.learningCount);
185
- break;
186
- case 'promptset:created':
187
- console.log(` ✓ Custom prompt set created: ${event.promptSetName} (${event.promptCount} prompts)`);
188
- break;
189
- case 'loop:complete':
190
- await store.save(event.runState);
191
- renderLoopComplete(event.runState);
192
- if (opts.saveTests) {
193
- const bestIdx = event.runState.bestIteration > 0
194
- ? event.runState.bestIteration - 1
195
- : event.runState.iterations.length - 1;
196
- const best = event.runState.iterations[bestIdx];
197
- if (best) {
198
- const resultMap = new Map(best.testResults.map((r) => [r.testCase.prompt, r]));
199
- const csvRows = [
200
- 'prompt,expected_triggered,category,source,actual_triggered,correct',
201
- ];
202
- for (const tc of best.testCases) {
203
- const tr = resultMap.get(tc.prompt);
204
- const csvEscape = (s) => `"${s.replace(/"/g, '""')}"`;
205
- csvRows.push([
206
- csvEscape(tc.prompt),
207
- tc.expectedTriggered,
208
- csvEscape(tc.category),
209
- tc.source ?? 'generated',
210
- tr?.actualTriggered ?? '',
211
- tr?.correct ?? '',
212
- ].join(','));
213
- }
214
- fs.writeFileSync(opts.saveTests, csvRows.join('\n'), 'utf-8');
215
- console.log(` ✓ Test cases saved to ${opts.saveTests} (${best.testCases.length} rows)`);
216
- }
217
- }
218
- break;
219
- }
220
- }
221
- }
222
- catch (err) {
223
- renderError(err instanceof Error ? err.message : String(err));
224
- process.exit(1);
225
- }
226
- });
227
- }
228
- //# sourceMappingURL=generate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { Command } from 'commander';
2
- /** Register the `list` (or `runs`) command — lists all saved runs. */
3
- export declare function registerListCommand(parent: Command, commandName?: string): void;
4
- //# sourceMappingURL=list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,SAAS,GAAG,IAAI,CAgB/E"}
@@ -1,23 +0,0 @@
1
- import { loadConfig } from '../../config/loader.js';
2
- import { JsonFileStore } from '../../persistence/store.js';
3
- import { renderError, renderHeader, renderRunList } from '../renderer/index.js';
4
- /** Register the `list` (or `runs`) command — lists all saved runs. */
5
- export function registerListCommand(parent, commandName = 'list') {
6
- parent
7
- .command(commandName)
8
- .description('List all saved generation runs')
9
- .action(async () => {
10
- try {
11
- renderHeader();
12
- const config = await loadConfig();
13
- const store = new JsonFileStore(config.dataDir);
14
- const runs = await store.list();
15
- renderRunList(runs);
16
- }
17
- catch (err) {
18
- renderError(err instanceof Error ? err.message : String(err));
19
- process.exit(1);
20
- }
21
- });
22
- }
23
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEhF,sEAAsE;AACtE,MAAM,UAAU,mBAAmB,CAAC,MAAe,EAAE,WAAW,GAAG,MAAM;IACvE,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,YAAY,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YAChC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { Command } from 'commander';
2
- /** Register the `report` command — view detailed results for a run. */
3
- export declare function registerReportCommand(parent: Command): void;
4
- //# sourceMappingURL=report.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,uEAAuE;AACvE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAiH3D"}
@@ -1,116 +0,0 @@
1
- import { writeFile } from 'node:fs/promises';
2
- import chalk from 'chalk';
3
- import { loadConfig } from '../../config/loader.js';
4
- import { JsonFileStore } from '../../persistence/store.js';
5
- import { buildReportHtml } from '../../report/html.js';
6
- import { buildReportJson } from '../../report/json.js';
7
- import { renderAnalysis, renderError, renderHeader, renderMetrics, renderTestResults, renderTopic, } from '../renderer/index.js';
8
- /** Register the `report` command — view detailed results for a run. */
9
- export function registerReportCommand(parent) {
10
- parent
11
- .command('report <runId>')
12
- .description('View detailed report for a run')
13
- .option('--iteration <n>', 'Show specific iteration')
14
- .option('--format <format>', 'Output format: terminal, json, html', 'terminal')
15
- .option('--tests', 'Include per-test-case details')
16
- .option('--diff <runId>', 'Compare with another run')
17
- .option('--output <path>', 'Output file path (html format)')
18
- .action(async (runId, opts) => {
19
- try {
20
- const config = await loadConfig();
21
- const store = new JsonFileStore(config.dataDir);
22
- const run = await store.load(runId);
23
- if (!run) {
24
- renderError(`Run ${runId} not found`);
25
- process.exit(1);
26
- }
27
- let diffRun = null;
28
- if (opts.diff) {
29
- diffRun = await store.load(opts.diff);
30
- if (!diffRun) {
31
- renderError(`Diff run ${opts.diff} not found`);
32
- process.exit(1);
33
- }
34
- }
35
- const format = opts.format;
36
- if (format === 'json') {
37
- const report = buildReportJson(run, {
38
- includeTests: opts.tests ?? false,
39
- diffRun,
40
- });
41
- console.log(JSON.stringify(report, null, 2));
42
- return;
43
- }
44
- if (format === 'html') {
45
- const report = buildReportJson(run, {
46
- includeTests: opts.tests ?? false,
47
- diffRun,
48
- });
49
- const html = buildReportHtml(report);
50
- const outputPath = opts.output ?? `${runId}-report.html`;
51
- await writeFile(outputPath, html, 'utf-8');
52
- console.log(chalk.green(` Report written to ${outputPath}`));
53
- return;
54
- }
55
- // Terminal format (default — unchanged behavior)
56
- renderHeader();
57
- console.log(chalk.bold(`\n Run: ${run.id}`));
58
- console.log(` Status: ${run.status}`);
59
- console.log(` Created: ${run.createdAt}`);
60
- console.log(` Topic: ${run.userInput.topicDescription}`);
61
- console.log(` Intent: ${run.userInput.intent}`);
62
- console.log(` Best coverage: ${(run.bestCoverage * 100).toFixed(1)}% (iteration ${run.bestIteration})`);
63
- console.log(` Total iterations: ${run.iterations.length}`);
64
- if (opts.iteration) {
65
- const idx = Number.parseInt(opts.iteration, 10) - 1;
66
- const iter = run.iterations[idx];
67
- if (!iter) {
68
- renderError(`Iteration ${opts.iteration} not found`);
69
- process.exit(1);
70
- }
71
- console.log(chalk.bold(`\n Iteration ${iter.iteration}:`));
72
- renderTopic(iter.topic);
73
- renderMetrics(iter.metrics);
74
- renderAnalysis(iter.analysis);
75
- if (opts.tests)
76
- renderTestResults(iter.testResults);
77
- }
78
- else {
79
- // Show best iteration
80
- const best = run.iterations[run.bestIteration - 1];
81
- if (best) {
82
- console.log(chalk.bold(`\n Best Iteration (${best.iteration}):`));
83
- renderTopic(best.topic);
84
- renderMetrics(best.metrics);
85
- renderAnalysis(best.analysis);
86
- if (opts.tests)
87
- renderTestResults(best.testResults);
88
- }
89
- }
90
- if (opts.diff && diffRun) {
91
- const report = buildReportJson(run, { diffRun });
92
- if (report.diff) {
93
- const d = report.diff;
94
- console.log(chalk.bold('\n Run Comparison:'));
95
- console.log(` Base: ${d.baseRunId} | Compare: ${d.compareRunId}`);
96
- const fmtDelta = (label, val) => {
97
- const sign = val >= 0 ? '+' : '';
98
- const color = val > 0 ? chalk.green : val < 0 ? chalk.red : chalk.gray;
99
- console.log(` ${label}: ${color(`${sign}${(val * 100).toFixed(1)}%`)}`);
100
- };
101
- fmtDelta('Coverage', d.metricsDelta.coverage);
102
- fmtDelta('TPR', d.metricsDelta.tpr);
103
- fmtDelta('TNR', d.metricsDelta.tnr);
104
- fmtDelta('Accuracy', d.metricsDelta.accuracy);
105
- fmtDelta('F1', d.metricsDelta.f1);
106
- }
107
- }
108
- console.log();
109
- }
110
- catch (err) {
111
- renderError(err instanceof Error ? err.message : String(err));
112
- process.exit(1);
113
- }
114
- });
115
- }
116
- //# sourceMappingURL=report.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { Command } from 'commander';
2
- /** Register the `resume` command — resumes a paused or failed run. */
3
- export declare function registerResumeCommand(parent: Command): void;
4
- //# sourceMappingURL=resume.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/resume.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBzC,sEAAsE;AACtE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAwI3D"}
@@ -1,135 +0,0 @@
1
- import * as path from 'node:path';
2
- import { SdkManagementService } from '../../airs/management.js';
3
- import { SdkPromptSetService } from '../../airs/promptsets.js';
4
- import { AirsScanService, DebugScanService, RateLimitedScanService } from '../../airs/scanner.js';
5
- import { loadConfig } from '../../config/loader.js';
6
- import { runLoop } from '../../core/loop.js';
7
- import { createLlmProvider } from '../../llm/provider.js';
8
- import { LangChainLlmService } from '../../llm/service.js';
9
- import { JsonFileStore } from '../../persistence/store.js';
10
- import { renderAnalysis, renderCompanionTopic, renderError, renderHeader, renderIterationStart, renderIterationSummary, renderLoopComplete, renderMetrics, renderTestProgress, renderTestsAccumulated, renderTestsComposed, renderTopic, } from '../renderer/index.js';
11
- /** Register the `resume` command — resumes a paused or failed run. */
12
- export function registerResumeCommand(parent) {
13
- parent
14
- .command('resume <runId>')
15
- .description('Resume a paused or failed run')
16
- .option('--max-iterations <n>', 'Additional iterations to run', '10')
17
- .option('--rate <n>', 'Max AIRS scan API calls per second (default: unlimited)')
18
- .option('--debug-scans', 'Dump raw AIRS scan responses to JSONL for debugging', false)
19
- .option('--create-prompt-set', 'Create custom prompt set from test cases after loop', false)
20
- .option('--prompt-set-name <name>', 'Override auto-generated prompt set name')
21
- .action(async (runId, opts) => {
22
- try {
23
- renderHeader();
24
- const config = await loadConfig();
25
- const store = new JsonFileStore(config.dataDir);
26
- const existingRun = await store.load(runId);
27
- if (!existingRun) {
28
- renderError(`Run ${runId} not found`);
29
- process.exit(1);
30
- }
31
- if (existingRun.status === 'completed') {
32
- renderError('Run is already completed');
33
- process.exit(1);
34
- }
35
- const additionalIterations = Number.parseInt(opts.maxIterations, 10);
36
- // Resume with updated max iterations
37
- const userInput = {
38
- ...existingRun.userInput,
39
- maxIterations: existingRun.currentIteration + additionalIterations,
40
- createPromptSet: opts.createPromptSet ?? false,
41
- promptSetName: opts.promptSetName,
42
- };
43
- const model = await createLlmProvider({
44
- provider: config.llmProvider,
45
- model: config.llmModel,
46
- anthropicApiKey: config.anthropicApiKey,
47
- googleApiKey: config.googleApiKey,
48
- googleCloudProject: config.googleCloudProject,
49
- googleCloudLocation: config.googleCloudLocation,
50
- awsRegion: config.awsRegion,
51
- awsAccessKeyId: config.awsAccessKeyId,
52
- awsSecretAccessKey: config.awsSecretAccessKey,
53
- });
54
- const llm = new LangChainLlmService(model);
55
- if (!config.airsApiKey)
56
- throw new Error('PANW_AI_SEC_API_KEY is required');
57
- let scanner = new AirsScanService(config.airsApiKey);
58
- if (opts.rate) {
59
- scanner = new RateLimitedScanService(scanner, Number.parseInt(opts.rate, 10));
60
- }
61
- if (opts.debugScans) {
62
- const debugPath = path.join(config.dataDir, '..', `debug-scans-${runId}.jsonl`);
63
- scanner = new DebugScanService(scanner, debugPath);
64
- }
65
- const management = new SdkManagementService({
66
- clientId: config.mgmtClientId,
67
- clientSecret: config.mgmtClientSecret,
68
- tsgId: config.mgmtTsgId,
69
- apiEndpoint: config.mgmtEndpoint,
70
- tokenEndpoint: config.mgmtTokenEndpoint,
71
- });
72
- // Set up prompt set service if requested
73
- const promptSets = userInput.createPromptSet
74
- ? new SdkPromptSetService({
75
- clientId: config.mgmtClientId,
76
- clientSecret: config.mgmtClientSecret,
77
- tsgId: config.mgmtTsgId,
78
- tokenEndpoint: config.mgmtTokenEndpoint,
79
- })
80
- : undefined;
81
- console.log(` Resuming run ${runId} from iteration ${existingRun.currentIteration}...`);
82
- for await (const event of runLoop(userInput, {
83
- llm,
84
- management,
85
- scanner,
86
- promptSets,
87
- })) {
88
- switch (event.type) {
89
- case 'iteration:start':
90
- renderIterationStart(event.iteration);
91
- break;
92
- case 'generate:complete':
93
- renderTopic(event.topic);
94
- break;
95
- case 'companion:generated':
96
- renderCompanionTopic(event.topic);
97
- break;
98
- case 'companion:created':
99
- console.log(` \u2713 Companion allow topic created (${event.topicId})`);
100
- break;
101
- case 'tests:composed':
102
- renderTestsComposed(event.generated, event.carriedFailures, event.regressionTier, event.total);
103
- break;
104
- case 'tests:accumulated':
105
- renderTestsAccumulated(event.newCount, event.totalCount, event.droppedCount);
106
- break;
107
- case 'test:progress':
108
- renderTestProgress(event.completed, event.total);
109
- break;
110
- case 'evaluate:complete':
111
- renderMetrics(event.metrics);
112
- break;
113
- case 'analyze:complete':
114
- renderAnalysis(event.analysis);
115
- break;
116
- case 'iteration:complete':
117
- renderIterationSummary(event.result);
118
- break;
119
- case 'promptset:created':
120
- console.log(` ✓ Custom prompt set created: ${event.promptSetName} (${event.promptCount} prompts)`);
121
- break;
122
- case 'loop:complete':
123
- await store.save(event.runState);
124
- renderLoopComplete(event.runState);
125
- break;
126
- }
127
- }
128
- }
129
- catch (err) {
130
- renderError(err instanceof Error ? err.message : String(err));
131
- process.exit(1);
132
- }
133
- });
134
- }
135
- //# sourceMappingURL=resume.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../src/cli/commands/resume.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
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
@@ -1 +0,0 @@
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"}