veto-sdk 1.13.0 → 1.15.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.
- package/README.md +44 -19
- package/dist/benchmark/loader.js +2 -2
- package/dist/benchmark/loader.js.map +1 -1
- package/dist/cli/agent.d.ts +85 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +240 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/bin.js +162 -12
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/colors.d.ts +50 -0
- package/dist/cli/colors.d.ts.map +1 -0
- package/dist/cli/colors.js +71 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/cli/index.d.ts +3 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +3 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +6 -0
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/repl-context.d.ts +6 -1
- package/dist/cli/repl-context.d.ts.map +1 -1
- package/dist/cli/repl-context.js +16 -5
- package/dist/cli/repl-context.js.map +1 -1
- package/dist/cli/repl-generate.d.ts +10 -0
- package/dist/cli/repl-generate.d.ts.map +1 -1
- package/dist/cli/repl-generate.js +71 -3
- package/dist/cli/repl-generate.js.map +1 -1
- package/dist/cli/repl.d.ts +8 -0
- package/dist/cli/repl.d.ts.map +1 -1
- package/dist/cli/repl.js +174 -39
- package/dist/cli/repl.js.map +1 -1
- package/dist/cli/scan.d.ts +2 -0
- package/dist/cli/scan.d.ts.map +1 -1
- package/dist/cli/scan.js +26 -11
- package/dist/cli/scan.js.map +1 -1
- package/dist/cli/studio/actions.d.ts +6 -0
- package/dist/cli/studio/actions.d.ts.map +1 -0
- package/dist/cli/studio/actions.js +843 -0
- package/dist/cli/studio/actions.js.map +1 -0
- package/dist/cli/studio/events.d.ts +8 -0
- package/dist/cli/studio/events.d.ts.map +1 -0
- package/dist/cli/studio/events.js +42 -0
- package/dist/cli/studio/events.js.map +1 -0
- package/dist/cli/studio/renderers/ansi.d.ts +14 -0
- package/dist/cli/studio/renderers/ansi.d.ts.map +1 -0
- package/dist/cli/studio/renderers/ansi.js +97 -0
- package/dist/cli/studio/renderers/ansi.js.map +1 -0
- package/dist/cli/studio/renderers/opentui.d.ts +13 -0
- package/dist/cli/studio/renderers/opentui.d.ts.map +1 -0
- package/dist/cli/studio/renderers/opentui.js +30 -0
- package/dist/cli/studio/renderers/opentui.js.map +1 -0
- package/dist/cli/studio/start.d.ts +18 -0
- package/dist/cli/studio/start.d.ts.map +1 -0
- package/dist/cli/studio/start.js +117 -0
- package/dist/cli/studio/start.js.map +1 -0
- package/dist/cli/studio/state.d.ts +104 -0
- package/dist/cli/studio/state.d.ts.map +1 -0
- package/dist/cli/studio/state.js +245 -0
- package/dist/cli/studio/state.js.map +1 -0
- package/dist/cli/templates.d.ts +1 -1
- package/dist/cli/templates.d.ts.map +1 -1
- package/dist/cli/templates.js +13 -0
- package/dist/cli/templates.js.map +1 -1
- package/dist/cli/version.d.ts +2 -0
- package/dist/cli/version.d.ts.map +1 -0
- package/dist/cli/version.js +25 -0
- package/dist/cli/version.js.map +1 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -175,28 +175,50 @@ const csvAudit = veto.exportDecisions("csv");
|
|
|
175
175
|
|
|
176
176
|
## CLI Commands
|
|
177
177
|
|
|
178
|
-
| Command
|
|
179
|
-
|
|
|
180
|
-
| `npx veto`
|
|
181
|
-
| `npx veto --repl`
|
|
182
|
-
| `npx veto repl`
|
|
183
|
-
| `npx veto
|
|
184
|
-
| `npx veto
|
|
185
|
-
| `npx veto
|
|
186
|
-
| `npx veto
|
|
187
|
-
| `npx veto
|
|
188
|
-
| `npx veto
|
|
189
|
-
| `npx veto
|
|
190
|
-
|
|
191
|
-
|
|
178
|
+
| Command | Description |
|
|
179
|
+
| ------------------------ | ----------------------------------------------------- |
|
|
180
|
+
| `npx veto` | Start Veto Studio (full-screen TUI) |
|
|
181
|
+
| `npx veto --repl` | Start Veto Studio (explicit flag) |
|
|
182
|
+
| `npx veto repl` | Start Veto Studio |
|
|
183
|
+
| `npx veto repl --legacy` | Start legacy line-based REPL |
|
|
184
|
+
| `npx veto init` | Initialize Veto in current directory |
|
|
185
|
+
| `npx veto learn` | Observe tool calls and generate starter policies |
|
|
186
|
+
| `npx veto compile` | Compile natural-language policy text into YAML |
|
|
187
|
+
| `npx veto test` | Run adversarial policy gap analysis |
|
|
188
|
+
| `npx veto scan` | Audit discovered tools vs loaded rule coverage |
|
|
189
|
+
| `npx veto diff` | Diff policy snapshots and replay deterministic impact |
|
|
190
|
+
| `npx veto version` | Show version |
|
|
191
|
+
|
|
192
|
+
Migration notes:
|
|
193
|
+
|
|
194
|
+
- Legacy REPL is still available via `npx veto repl --legacy`.
|
|
195
|
+
- Studio template fallback is opt-in (`--demo-template` or `studio.generation.allowTemplateFallback: true`).
|
|
196
|
+
|
|
197
|
+
Veto Studio examples:
|
|
192
198
|
|
|
193
199
|
```bash
|
|
194
|
-
# Start
|
|
200
|
+
# Start full-screen Veto Studio
|
|
195
201
|
npx veto
|
|
196
202
|
|
|
197
|
-
# Start
|
|
203
|
+
# Start Studio with explicit flag
|
|
198
204
|
npx veto --repl
|
|
199
205
|
|
|
206
|
+
# Force ANSI renderer
|
|
207
|
+
npx veto repl --renderer ansi
|
|
208
|
+
|
|
209
|
+
# Open a specific workspace from multi-repo root
|
|
210
|
+
npx veto repl --directory ./packages/sdk
|
|
211
|
+
|
|
212
|
+
# Enable explicit template demo mode (otherwise no silent fallback in Studio)
|
|
213
|
+
npx veto repl --demo-template
|
|
214
|
+
|
|
215
|
+
# Legacy line-based REPL remains available
|
|
216
|
+
npx veto repl --legacy
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Legacy REPL slash-command examples:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
200
222
|
# Test a call locally (no network)
|
|
201
223
|
/test transfer_funds({"amount": 50000})
|
|
202
224
|
|
|
@@ -211,9 +233,6 @@ test my agent against current rules
|
|
|
211
233
|
|
|
212
234
|
# Export merged rules
|
|
213
235
|
/export
|
|
214
|
-
|
|
215
|
-
# Save generated YAML to a custom file during prompt flow
|
|
216
|
-
# Save to ./veto/rules/transfer-funds-block-25000.yaml? [Y/n/edit/path]
|
|
217
236
|
```
|
|
218
237
|
|
|
219
238
|
Coverage audit examples:
|
|
@@ -222,6 +241,12 @@ Coverage audit examples:
|
|
|
222
241
|
# Human-readable coverage report
|
|
223
242
|
npx veto scan
|
|
224
243
|
|
|
244
|
+
# Scan an explicit workspace directory
|
|
245
|
+
npx veto scan --directory ./packages/sdk
|
|
246
|
+
|
|
247
|
+
# Include examples/ and tests/ directories in scan scope
|
|
248
|
+
npx veto scan --include-examples --include-tests
|
|
249
|
+
|
|
225
250
|
# CI gate: fail when uncovered tools are found
|
|
226
251
|
npx veto scan --fail-uncovered
|
|
227
252
|
|
package/dist/benchmark/loader.js
CHANGED
|
@@ -38,7 +38,7 @@ export async function loadBenchmarkSamples(pattern, maxSamples = 0, shuffle = fa
|
|
|
38
38
|
samples.push(sample);
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
catch
|
|
41
|
+
catch {
|
|
42
42
|
// Skip malformed lines
|
|
43
43
|
continue;
|
|
44
44
|
}
|
|
@@ -301,7 +301,7 @@ function extractCategory(filePath) {
|
|
|
301
301
|
*/
|
|
302
302
|
function shuffleArray(array, seed) {
|
|
303
303
|
const result = [...array];
|
|
304
|
-
|
|
304
|
+
const random = seed !== undefined ? seededRandom(seed) : Math.random;
|
|
305
305
|
for (let i = result.length - 1; i > 0; i--) {
|
|
306
306
|
const j = Math.floor(random() * (i + 1));
|
|
307
307
|
[result[i], result[j]] = [result[j], result[i]];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/benchmark/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AA8BxC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAe,EACf,aAAqB,CAAC,EACtB,UAAmB,KAAK,EACxB,IAAa;IAEb,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;IAElC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAEhC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAErE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,CAAC;gBACpD,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAEzE,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/benchmark/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent-native CLI utilities for Veto.
|
|
3
|
+
*
|
|
4
|
+
* Allows autonomous LLMs to configure Veto without human interaction.
|
|
5
|
+
* All commands return JSON for programmatic parsing and never prompt for input.
|
|
6
|
+
*
|
|
7
|
+
* @module cli/agent
|
|
8
|
+
*/
|
|
9
|
+
import { type InitResult } from './init.js';
|
|
10
|
+
import { type ScanResult } from './scan.js';
|
|
11
|
+
import { type ToolImpact } from './repl.js';
|
|
12
|
+
/**
|
|
13
|
+
* Result of an agent operation.
|
|
14
|
+
*/
|
|
15
|
+
export interface AgentResult<T = unknown> {
|
|
16
|
+
success: boolean;
|
|
17
|
+
data?: T;
|
|
18
|
+
error?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Policy list item.
|
|
22
|
+
*/
|
|
23
|
+
export interface PolicyListItem {
|
|
24
|
+
id: string;
|
|
25
|
+
name?: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
action: string;
|
|
28
|
+
tools: string[];
|
|
29
|
+
enabled: boolean;
|
|
30
|
+
file: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Policy add result.
|
|
34
|
+
*/
|
|
35
|
+
export interface PolicyAddResult {
|
|
36
|
+
file: string;
|
|
37
|
+
rules: string[];
|
|
38
|
+
impacts: ToolImpact[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Configuration for agent operations.
|
|
42
|
+
*/
|
|
43
|
+
export interface AgentOptions {
|
|
44
|
+
/** Project directory */
|
|
45
|
+
directory?: string;
|
|
46
|
+
/** Output format: json or yaml */
|
|
47
|
+
format?: 'json' | 'yaml';
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Initialize Veto in agent mode.
|
|
51
|
+
*
|
|
52
|
+
* @param options - Agent options
|
|
53
|
+
* @returns Result with initialization details
|
|
54
|
+
*/
|
|
55
|
+
export declare function agentInit(options?: AgentOptions): Promise<AgentResult<InitResult>>;
|
|
56
|
+
/**
|
|
57
|
+
* List all policies in the project.
|
|
58
|
+
*
|
|
59
|
+
* @param options - Agent options
|
|
60
|
+
* @returns List of policies
|
|
61
|
+
*/
|
|
62
|
+
export declare function agentPolicyList(options?: AgentOptions): Promise<AgentResult<PolicyListItem[]>>;
|
|
63
|
+
/**
|
|
64
|
+
* Add a new policy from a natural language prompt.
|
|
65
|
+
*
|
|
66
|
+
* @param prompt - Policy description
|
|
67
|
+
* @param options - Agent options
|
|
68
|
+
* @returns Result with policy details
|
|
69
|
+
*/
|
|
70
|
+
export declare function agentPolicyAdd(prompt: string, options?: AgentOptions): Promise<AgentResult<PolicyAddResult>>;
|
|
71
|
+
/**
|
|
72
|
+
* Scan project tools and show coverage.
|
|
73
|
+
*
|
|
74
|
+
* @param options - Agent options
|
|
75
|
+
* @returns Scan result with tool coverage
|
|
76
|
+
*/
|
|
77
|
+
export declare function agentScan(options?: AgentOptions): Promise<AgentResult<ScanResult>>;
|
|
78
|
+
/**
|
|
79
|
+
* Get the current Veto configuration.
|
|
80
|
+
*
|
|
81
|
+
* @param options - Agent options
|
|
82
|
+
* @returns Configuration object
|
|
83
|
+
*/
|
|
84
|
+
export declare function agentConfig(options?: AgentOptions): Promise<AgentResult<Record<string, unknown>>>;
|
|
85
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/cli/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAI/D;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CA2B5F;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAkExG;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAgDtH;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAwB5F;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAkC3G"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent-native CLI utilities for Veto.
|
|
3
|
+
*
|
|
4
|
+
* Allows autonomous LLMs to configure Veto without human interaction.
|
|
5
|
+
* All commands return JSON for programmatic parsing and never prompt for input.
|
|
6
|
+
*
|
|
7
|
+
* @module cli/agent
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
10
|
+
import { join, resolve } from 'node:path';
|
|
11
|
+
import { parse as parseYaml, stringify } from 'yaml';
|
|
12
|
+
import { init } from './init.js';
|
|
13
|
+
import { scan } from './scan.js';
|
|
14
|
+
import { generatePolicyFromPrompt } from './repl-generate.js';
|
|
15
|
+
import { analyzeToolImpact } from './repl.js';
|
|
16
|
+
import { createReplSessionContext } from './repl-context.js';
|
|
17
|
+
/**
|
|
18
|
+
* Initialize Veto in agent mode.
|
|
19
|
+
*
|
|
20
|
+
* @param options - Agent options
|
|
21
|
+
* @returns Result with initialization details
|
|
22
|
+
*/
|
|
23
|
+
export async function agentInit(options = {}) {
|
|
24
|
+
try {
|
|
25
|
+
const result = await init({
|
|
26
|
+
directory: options.directory,
|
|
27
|
+
agent: true,
|
|
28
|
+
yes: true,
|
|
29
|
+
quiet: true,
|
|
30
|
+
});
|
|
31
|
+
if (!options.format || options.format === 'json') {
|
|
32
|
+
const output = { success: result.success, data: result };
|
|
33
|
+
if (result.messages.length > 0) {
|
|
34
|
+
output.messages = result.messages;
|
|
35
|
+
}
|
|
36
|
+
console.log(JSON.stringify(output));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
console.log(stringify({ ...result }));
|
|
40
|
+
}
|
|
41
|
+
return { success: result.success, data: result };
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
45
|
+
if (!options.format || options.format === 'json') {
|
|
46
|
+
console.log(JSON.stringify({ success: false, error: message }));
|
|
47
|
+
}
|
|
48
|
+
return { success: false, error: message };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* List all policies in the project.
|
|
53
|
+
*
|
|
54
|
+
* @param options - Agent options
|
|
55
|
+
* @returns List of policies
|
|
56
|
+
*/
|
|
57
|
+
export async function agentPolicyList(options = {}) {
|
|
58
|
+
try {
|
|
59
|
+
const cwd = resolve(options.directory ?? process.cwd());
|
|
60
|
+
const rulesDir = join(cwd, 'veto', 'rules');
|
|
61
|
+
if (!existsSync(rulesDir)) {
|
|
62
|
+
const result = [];
|
|
63
|
+
if (!options.format || options.format === 'json') {
|
|
64
|
+
console.log(JSON.stringify({ success: true, data: result }));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.log(stringify({ success: true, policies: result }));
|
|
68
|
+
}
|
|
69
|
+
return { success: true, data: result };
|
|
70
|
+
}
|
|
71
|
+
const policies = [];
|
|
72
|
+
const { readdirSync, statSync } = await import('node:fs');
|
|
73
|
+
const files = readdirSync(rulesDir);
|
|
74
|
+
for (const file of files) {
|
|
75
|
+
if (!file.endsWith('.yaml') && !file.endsWith('.yml')) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const filePath = join(rulesDir, file);
|
|
79
|
+
const stat = statSync(filePath);
|
|
80
|
+
if (!stat.isFile()) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
85
|
+
const parsed = parseYaml(content);
|
|
86
|
+
if (parsed?.rules && Array.isArray(parsed.rules)) {
|
|
87
|
+
for (const rule of parsed.rules) {
|
|
88
|
+
policies.push({
|
|
89
|
+
id: rule.id,
|
|
90
|
+
name: rule.name,
|
|
91
|
+
description: rule.description,
|
|
92
|
+
action: rule.action,
|
|
93
|
+
tools: rule.tools ?? [],
|
|
94
|
+
enabled: rule.enabled ?? true,
|
|
95
|
+
file: `veto/rules/${file}`,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Skip invalid files
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (!options.format || options.format === 'json') {
|
|
105
|
+
console.log(JSON.stringify({ success: true, data: policies }));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
console.log(stringify({ success: true, policies }));
|
|
109
|
+
}
|
|
110
|
+
return { success: true, data: policies };
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
114
|
+
if (!options.format || options.format === 'json') {
|
|
115
|
+
console.log(JSON.stringify({ success: false, error: message }));
|
|
116
|
+
}
|
|
117
|
+
return { success: false, error: message };
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Add a new policy from a natural language prompt.
|
|
122
|
+
*
|
|
123
|
+
* @param prompt - Policy description
|
|
124
|
+
* @param options - Agent options
|
|
125
|
+
* @returns Result with policy details
|
|
126
|
+
*/
|
|
127
|
+
export async function agentPolicyAdd(prompt, options = {}) {
|
|
128
|
+
try {
|
|
129
|
+
const cwd = resolve(options.directory ?? process.cwd());
|
|
130
|
+
const context = await createReplSessionContext(cwd);
|
|
131
|
+
const generated = await generatePolicyFromPrompt({
|
|
132
|
+
prompt,
|
|
133
|
+
projectDir: cwd,
|
|
134
|
+
rulesDirectory: context.rulesDir,
|
|
135
|
+
tools: context.discoveredTools,
|
|
136
|
+
existingRules: context.allRules,
|
|
137
|
+
});
|
|
138
|
+
const parsed = parseYaml(generated.yaml);
|
|
139
|
+
const rules = (parsed.rules ?? []);
|
|
140
|
+
const impacts = analyzeToolImpact(rules, context.discoveredTools);
|
|
141
|
+
// Determine save path
|
|
142
|
+
const ruleId = rules[0]?.id ?? 'policy';
|
|
143
|
+
const safeId = ruleId.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
144
|
+
const savePath = join(cwd, 'veto', 'rules', `${safeId}.yaml`);
|
|
145
|
+
// Ensure directory exists
|
|
146
|
+
mkdirSync(join(cwd, 'veto', 'rules'), { recursive: true });
|
|
147
|
+
// Write the policy
|
|
148
|
+
writeFileSync(savePath, generated.yaml, 'utf-8');
|
|
149
|
+
const result = {
|
|
150
|
+
file: savePath,
|
|
151
|
+
rules: rules.map((r) => r.id),
|
|
152
|
+
impacts,
|
|
153
|
+
};
|
|
154
|
+
if (!options.format || options.format === 'json') {
|
|
155
|
+
console.log(JSON.stringify({ success: true, data: result }));
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
console.log(stringify({ success: true, ...result }));
|
|
159
|
+
}
|
|
160
|
+
return { success: true, data: result };
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
164
|
+
if (!options.format || options.format === 'json') {
|
|
165
|
+
console.log(JSON.stringify({ success: false, error: message }));
|
|
166
|
+
}
|
|
167
|
+
return { success: false, error: message };
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Scan project tools and show coverage.
|
|
172
|
+
*
|
|
173
|
+
* @param options - Agent options
|
|
174
|
+
* @returns Scan result with tool coverage
|
|
175
|
+
*/
|
|
176
|
+
export async function agentScan(options = {}) {
|
|
177
|
+
try {
|
|
178
|
+
const result = await scan({
|
|
179
|
+
directory: options.directory,
|
|
180
|
+
quiet: true,
|
|
181
|
+
failUncovered: false,
|
|
182
|
+
suggest: false,
|
|
183
|
+
format: 'json',
|
|
184
|
+
});
|
|
185
|
+
if (!options.format || options.format === 'json') {
|
|
186
|
+
console.log(JSON.stringify({ success: result.success, data: result }));
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
console.log(stringify({ ...result }));
|
|
190
|
+
}
|
|
191
|
+
return { success: result.success, data: result };
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
195
|
+
if (!options.format || options.format === 'json') {
|
|
196
|
+
console.log(JSON.stringify({ success: false, error: message }));
|
|
197
|
+
}
|
|
198
|
+
return { success: false, error: message };
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get the current Veto configuration.
|
|
203
|
+
*
|
|
204
|
+
* @param options - Agent options
|
|
205
|
+
* @returns Configuration object
|
|
206
|
+
*/
|
|
207
|
+
export async function agentConfig(options = {}) {
|
|
208
|
+
try {
|
|
209
|
+
const cwd = resolve(options.directory ?? process.cwd());
|
|
210
|
+
const configPath = join(cwd, 'veto', 'veto.config.yaml');
|
|
211
|
+
if (!existsSync(configPath)) {
|
|
212
|
+
const result = { initialized: false };
|
|
213
|
+
if (!options.format || options.format === 'json') {
|
|
214
|
+
console.log(JSON.stringify({ success: true, data: result }));
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
console.log(stringify({ success: true, ...result }));
|
|
218
|
+
}
|
|
219
|
+
return { success: true, data: result };
|
|
220
|
+
}
|
|
221
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
222
|
+
const config = parseYaml(content);
|
|
223
|
+
const result = { initialized: true, ...config };
|
|
224
|
+
if (!options.format || options.format === 'json') {
|
|
225
|
+
console.log(JSON.stringify({ success: true, data: result }));
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
console.log(stringify({ success: true, ...result }));
|
|
229
|
+
}
|
|
230
|
+
return { success: true, data: result };
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
234
|
+
if (!options.format || options.format === 'json') {
|
|
235
|
+
console.log(JSON.stringify({ success: false, error: message }));
|
|
236
|
+
}
|
|
237
|
+
return { success: false, error: message };
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/cli/agent.ts"],"names":[],"mappings":"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"}
|