@cdot65/prisma-airs-cli 1.4.2 → 2.2.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 (149) 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.map +1 -1
  17. package/dist/cli/commands/redteam.js +268 -1
  18. package/dist/cli/commands/redteam.js.map +1 -1
  19. package/dist/cli/commands/runtime.d.ts.map +1 -1
  20. package/dist/cli/commands/runtime.js +83 -50
  21. package/dist/cli/commands/runtime.js.map +1 -1
  22. package/dist/cli/commands/topics-apply.d.ts +16 -0
  23. package/dist/cli/commands/topics-apply.d.ts.map +1 -0
  24. package/dist/cli/commands/topics-apply.js +69 -0
  25. package/dist/cli/commands/topics-apply.js.map +1 -0
  26. package/dist/cli/commands/topics-create.d.ts +16 -0
  27. package/dist/cli/commands/topics-create.d.ts.map +1 -0
  28. package/dist/cli/commands/topics-create.js +71 -0
  29. package/dist/cli/commands/topics-create.js.map +1 -0
  30. package/dist/cli/commands/topics-eval.d.ts +7 -0
  31. package/dist/cli/commands/topics-eval.d.ts.map +1 -0
  32. package/dist/cli/commands/topics-eval.js +65 -0
  33. package/dist/cli/commands/topics-eval.js.map +1 -0
  34. package/dist/cli/commands/topics-revert.d.ts +9 -0
  35. package/dist/cli/commands/topics-revert.d.ts.map +1 -0
  36. package/dist/cli/commands/topics-revert.js +52 -0
  37. package/dist/cli/commands/topics-revert.js.map +1 -0
  38. package/dist/cli/commands/topics-sample.d.ts +4 -0
  39. package/dist/cli/commands/topics-sample.d.ts.map +1 -0
  40. package/dist/cli/commands/topics-sample.js +27 -0
  41. package/dist/cli/commands/topics-sample.js.map +1 -0
  42. package/dist/cli/renderer/audit.d.ts +3 -0
  43. package/dist/cli/renderer/audit.d.ts.map +1 -1
  44. package/dist/cli/renderer/audit.js +14 -0
  45. package/dist/cli/renderer/audit.js.map +1 -1
  46. package/dist/cli/renderer/eval.d.ts +30 -0
  47. package/dist/cli/renderer/eval.d.ts.map +1 -0
  48. package/dist/cli/renderer/eval.js +61 -0
  49. package/dist/cli/renderer/eval.js.map +1 -0
  50. package/dist/cli/renderer/index.d.ts +1 -1
  51. package/dist/cli/renderer/index.d.ts.map +1 -1
  52. package/dist/cli/renderer/index.js +1 -1
  53. package/dist/cli/renderer/index.js.map +1 -1
  54. package/dist/cli/renderer/redteam.d.ts +37 -0
  55. package/dist/cli/renderer/redteam.d.ts.map +1 -1
  56. package/dist/cli/renderer/redteam.js +64 -0
  57. package/dist/cli/renderer/redteam.js.map +1 -1
  58. package/dist/config/loader.d.ts.map +1 -1
  59. package/dist/config/loader.js +0 -6
  60. package/dist/config/loader.js.map +1 -1
  61. package/dist/config/schema.d.ts +0 -15
  62. package/dist/config/schema.d.ts.map +1 -1
  63. package/dist/config/schema.js +0 -6
  64. package/dist/config/schema.js.map +1 -1
  65. package/dist/core/constraints.d.ts +1 -0
  66. package/dist/core/constraints.d.ts.map +1 -1
  67. package/dist/core/constraints.js +7 -0
  68. package/dist/core/constraints.js.map +1 -1
  69. package/dist/core/prompt-loader.d.ts +14 -0
  70. package/dist/core/prompt-loader.d.ts.map +1 -0
  71. package/dist/core/prompt-loader.js +122 -0
  72. package/dist/core/prompt-loader.js.map +1 -0
  73. package/dist/core/types.d.ts +0 -74
  74. package/dist/core/types.d.ts.map +1 -1
  75. package/dist/index.d.ts +1 -10
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +0 -16
  78. package/dist/index.js.map +1 -1
  79. package/dist/llm/service.d.ts +6 -2
  80. package/dist/llm/service.d.ts.map +1 -1
  81. package/dist/llm/service.js +0 -5
  82. package/dist/llm/service.js.map +1 -1
  83. package/dist/llm/types.d.ts +18 -0
  84. package/dist/llm/types.d.ts.map +1 -0
  85. package/dist/{persistence → llm}/types.js.map +1 -1
  86. package/package.json +2 -2
  87. package/dist/cli/commands/generate.d.ts +0 -4
  88. package/dist/cli/commands/generate.d.ts.map +0 -1
  89. package/dist/cli/commands/generate.js +0 -228
  90. package/dist/cli/commands/generate.js.map +0 -1
  91. package/dist/cli/commands/list.d.ts +0 -4
  92. package/dist/cli/commands/list.d.ts.map +0 -1
  93. package/dist/cli/commands/list.js +0 -23
  94. package/dist/cli/commands/list.js.map +0 -1
  95. package/dist/cli/commands/report.d.ts +0 -4
  96. package/dist/cli/commands/report.d.ts.map +0 -1
  97. package/dist/cli/commands/report.js +0 -116
  98. package/dist/cli/commands/report.js.map +0 -1
  99. package/dist/cli/commands/resume.d.ts +0 -4
  100. package/dist/cli/commands/resume.d.ts.map +0 -1
  101. package/dist/cli/commands/resume.js +0 -135
  102. package/dist/cli/commands/resume.js.map +0 -1
  103. package/dist/cli/prompts.d.ts +0 -9
  104. package/dist/cli/prompts.d.ts.map +0 -1
  105. package/dist/cli/prompts.js +0 -90
  106. package/dist/cli/prompts.js.map +0 -1
  107. package/dist/cli/renderer/generate.d.ts +0 -29
  108. package/dist/cli/renderer/generate.d.ts.map +0 -1
  109. package/dist/cli/renderer/generate.js +0 -132
  110. package/dist/cli/renderer/generate.js.map +0 -1
  111. package/dist/core/loop.d.ts +0 -48
  112. package/dist/core/loop.d.ts.map +0 -1
  113. package/dist/core/loop.js +0 -430
  114. package/dist/core/loop.js.map +0 -1
  115. package/dist/memory/diff.d.ts +0 -4
  116. package/dist/memory/diff.d.ts.map +0 -1
  117. package/dist/memory/diff.js +0 -24
  118. package/dist/memory/diff.js.map +0 -1
  119. package/dist/memory/extractor.d.ts +0 -15
  120. package/dist/memory/extractor.d.ts.map +0 -1
  121. package/dist/memory/extractor.js +0 -133
  122. package/dist/memory/extractor.js.map +0 -1
  123. package/dist/memory/injector.d.ts +0 -22
  124. package/dist/memory/injector.d.ts.map +0 -1
  125. package/dist/memory/injector.js +0 -90
  126. package/dist/memory/injector.js.map +0 -1
  127. package/dist/memory/prompts/extract-learnings.d.ts +0 -3
  128. package/dist/memory/prompts/extract-learnings.d.ts.map +0 -1
  129. package/dist/memory/prompts/extract-learnings.js +0 -40
  130. package/dist/memory/prompts/extract-learnings.js.map +0 -1
  131. package/dist/memory/schemas.d.ts +0 -63
  132. package/dist/memory/schemas.d.ts.map +0 -1
  133. package/dist/memory/schemas.js +0 -13
  134. package/dist/memory/schemas.js.map +0 -1
  135. package/dist/memory/store.d.ts +0 -28
  136. package/dist/memory/store.d.ts.map +0 -1
  137. package/dist/memory/store.js +0 -103
  138. package/dist/memory/store.js.map +0 -1
  139. package/dist/memory/types.d.ts +0 -55
  140. package/dist/memory/types.d.ts.map +0 -1
  141. package/dist/memory/types.js +0 -6
  142. package/dist/memory/types.js.map +0 -1
  143. package/dist/persistence/store.d.ts +0 -21
  144. package/dist/persistence/store.d.ts.map +0 -1
  145. package/dist/persistence/store.js +0 -77
  146. package/dist/persistence/store.js.map +0 -1
  147. package/dist/persistence/types.d.ts +0 -23
  148. package/dist/persistence/types.d.ts.map +0 -1
  149. /package/dist/{persistence → llm}/types.js +0 -0
@@ -1,90 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/cli/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAInE,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAAC;QACnC,OAAO,EAAE,+CAA+C;QACxD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC;KAC1E,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAoB;QAC7C,OAAO,EAAE,0CAA0C;QACnD,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;YACjC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;SAClC;KACF,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC;QAC9B,OAAO,EAAE,6BAA6B;QACtC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC;KAC3E,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC;QACpC,OAAO,EAAE,uCAAuC;QAChD,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,IAAI,YAAkC,CAAC;IACvC,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC;YAC9B,OAAO,EACL,6FAA6F;SAChG,CAAC,CAAC;QACH,YAAY,GAAG,WAAW;aACvB,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,aAAa,GACjB,CAAC,MAAM,MAAM,CAAC;QACZ,OAAO,EAAE,8BAA8B;QACvC,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,GAAG;KACT,CAAC,CAAC,IAAI,EAAE,CAAC;IAEZ,MAAM,iBAAiB,GACrB,CAAC,MAAM,MAAM,CAAC;QACZ,OAAO,EAAE,iCAAiC;QAC1C,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,EAAE;QACP,GAAG,EAAE,GAAG;KACT,CAAC,CAAC,IAAI,EAAE,CAAC;IAEZ,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC;QACpC,OAAO,EAAE,4CAA4C;QACrD,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,IAAI,mBAAuC,CAAC;IAC5C,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC;YACvB,OAAO,EAAE,uCAAuC;YAChD,OAAO,EAAE,CAAC;YACV,GAAG,EAAE,CAAC;SACP,CAAC,CAAC;QACH,mBAAmB,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,CAAC;IAED,OAAO;QACL,gBAAgB;QAChB,MAAM;QACN,WAAW;QACX,YAAY;QACZ,aAAa;QACb,cAAc,EAAE,iBAAiB,GAAG,GAAG;QACvC,eAAe;QACf,mBAAmB;KACpB,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,OAAO,MAAM,CAAc;QACzB,OAAO,EAAE,sBAAsB;QAC/B,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;YAC3C,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,eAAe,EAAE;YACtD,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,EAAE;YACrD,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;YAC3C,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,eAAe,EAAE;YACtD,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,EAAE;SACtD;KACF,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB,EAAE,QAAgB;IACvE,OAAO,OAAO,CAAC;QACb,OAAO,EAAE,aAAa,SAAS,wBAAwB,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;QAC1G,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;AACL,CAAC"}
@@ -1,29 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,132 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/renderer/generate.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- import type { ManagementService, PromptSetService, ScanService } from '../airs/types.js';
2
- import type { LearningExtractor } from '../memory/extractor.js';
3
- import type { AnalysisReport, CategoryBreakdown, CustomTopic, EfficacyMetrics, LoopEvent, TestCase, TestResult, UserInput } from './types.js';
4
- /** Contract for LLM operations used by the refinement loop. */
5
- export interface LlmService {
6
- /** Generate an initial topic definition from a user description. */
7
- generateTopic(description: string, intent: string, seeds?: string[]): Promise<CustomTopic>;
8
- /** Generate positive and negative test prompts for a topic. */
9
- generateTests(topic: CustomTopic, intent: string, categoryBreakdown?: CategoryBreakdown[]): Promise<{
10
- positiveTests: TestCase[];
11
- negativeTests: TestCase[];
12
- }>;
13
- /** Analyze scan results to identify false positive/negative patterns. */
14
- analyzeResults(topic: CustomTopic, results: TestResult[], metrics: EfficacyMetrics, intent: string): Promise<AnalysisReport>;
15
- /** Simplify a topic that has regressed by removing exclusion clauses and shortening. */
16
- simplifyTopic(currentTopic: CustomTopic, bestTopic: CustomTopic, metrics: EfficacyMetrics, analysis: AnalysisReport, intent: string): Promise<CustomTopic>;
17
- /** Generate a broad allow companion topic for a block-intent profile. */
18
- generateCompanionTopic(blockTopicName: string, blockDescription: string): Promise<CustomTopic>;
19
- /** Refine a topic definition based on metrics and analysis from the previous iteration. */
20
- improveTopic(topic: CustomTopic, metrics: EfficacyMetrics, analysis: AnalysisReport, results: TestResult[], iteration: number, targetCoverage: number, intent: string, bestContext?: {
21
- bestCoverage: number;
22
- bestIteration: number;
23
- bestTopic?: CustomTopic;
24
- }): Promise<CustomTopic>;
25
- }
26
- /** Dependencies injected into the refinement loop. */
27
- export interface LoopDependencies {
28
- /** LLM service for topic generation, testing, analysis, and improvement. */
29
- llm: LlmService;
30
- /** AIRS management service for topic CRUD and profile linking. */
31
- management: ManagementService;
32
- /** AIRS scan service for batch prompt scanning. */
33
- scanner: ScanService;
34
- /** Optional memory system for cross-run learning extraction. */
35
- memory?: {
36
- extractor: LearningExtractor;
37
- };
38
- /** Optional prompt set service for creating custom prompt sets from test cases. */
39
- promptSets?: PromptSetService;
40
- }
41
- /**
42
- * Main refinement loop — generates, deploys, tests, and iteratively improves a topic.
43
- * Yields typed {@link LoopEvent} discriminated unions at each stage.
44
- * @param input - User input seeding the generation run.
45
- * @param deps - Injected service dependencies.
46
- */
47
- export declare function runLoop(input: UserInput, deps: LoopDependencies): AsyncGenerator<LoopEvent>;
48
- //# sourceMappingURL=loop.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/core/loop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,eAAe,EAEf,SAAS,EAET,QAAQ,EACR,UAAU,EACV,SAAS,EACV,MAAM,YAAY,CAAC;AAEpB,+DAA+D;AAC/D,MAAM,WAAW,UAAU;IACzB,oEAAoE;IACpE,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3F,+DAA+D;IAC/D,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,yEAAyE;IACzE,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,wFAAwF;IACxF,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,yEAAyE;IACzE,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/F,2FAA2F;IAC3F,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;AAED,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,GAAG,EAAE,UAAU,CAAC;IAChB,kEAAkE;IAClE,UAAU,EAAE,iBAAiB,CAAC;IAC9B,mDAAmD;IACnD,OAAO,EAAE,WAAW,CAAC;IACrB,gEAAgE;IAChE,MAAM,CAAC,EAAE;QAAE,SAAS,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAC1C,mFAAmF;IACnF,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAgBD;;;;;GAKG;AACH,wBAAuB,OAAO,CAC5B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,gBAAgB,GACrB,cAAc,CAAC,SAAS,CAAC,CA+f3B"}