veto-sdk 1.9.0 → 1.10.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.
@@ -0,0 +1,13 @@
1
+ import { Veto } from './veto.js';
2
+ export { protect, type ProtectOptions, type ProtectMode, } from './protect.js';
3
+ export { Veto };
4
+ export type { VetoBrowserOptions, GuardResult, GuardContext, } from './types.js';
5
+ export type { Rule, OutputRule, RuleCondition, RuleSeverity, RuleAction, } from '../rules/types.js';
6
+ export type { OutputValidationResult } from '../core/output-validator.js';
7
+ export { ToolCallDeniedError } from '../core/interceptor.js';
8
+ export { OutputValidator } from '../core/output-validator.js';
9
+ export { validateDeterministic } from '../deterministic/validator.js';
10
+ export { evaluateConditionCollections } from '../rules/condition-evaluator.js';
11
+ export declare function wrapAction<T>(veto: Veto, toolName: string, handler: (args: Record<string, unknown>) => T | Promise<T>): (args: Record<string, unknown>) => Promise<T>;
12
+ export declare function wrapActions(veto: Veto, actions: Record<string, (args: Record<string, unknown>) => unknown>): Record<string, (args: Record<string, unknown>) => Promise<unknown>>;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EACL,OAAO,EACP,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,IAAI,EAAE,CAAC;AAChB,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,IAAI,EACJ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAoB/E,wBAAgB,UAAU,CAAC,CAAC,EAC1B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACzD,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAQ/C;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,GAClE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAYrE"}
@@ -0,0 +1,39 @@
1
+ import { Veto } from './veto.js';
2
+ import { ToolCallDeniedError } from '../core/interceptor.js';
3
+ export { protect, } from './protect.js';
4
+ export { Veto };
5
+ export { ToolCallDeniedError } from '../core/interceptor.js';
6
+ export { OutputValidator } from '../core/output-validator.js';
7
+ export { validateDeterministic } from '../deterministic/validator.js';
8
+ export { evaluateConditionCollections } from '../rules/condition-evaluator.js';
9
+ function toDeniedValidationResult(result) {
10
+ const decision = result.decision === 'require_approval'
11
+ ? 'require_approval'
12
+ : 'deny';
13
+ return {
14
+ decision,
15
+ reason: result.reason,
16
+ metadata: {
17
+ ruleId: result.ruleId,
18
+ severity: result.severity,
19
+ approvalId: result.approvalId,
20
+ },
21
+ };
22
+ }
23
+ export function wrapAction(veto, toolName, handler) {
24
+ return async (args) => {
25
+ const result = await veto.guard(toolName, args);
26
+ if (result.decision === 'deny' || result.decision === 'require_approval') {
27
+ throw new ToolCallDeniedError(toolName, 'guard', toDeniedValidationResult(result));
28
+ }
29
+ return await handler(args);
30
+ };
31
+ }
32
+ export function wrapActions(veto, actions) {
33
+ const wrapped = {};
34
+ for (const [name, handler] of Object.entries(actions)) {
35
+ wrapped[name] = wrapAction(veto, name, async (args) => await handler(args));
36
+ }
37
+ return wrapped;
38
+ }
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EACL,OAAO,GAGR,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,IAAI,EAAE,CAAC;AAchB,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAE/E,SAAS,wBAAwB,CAC/B,MAA0C;IAE1C,MAAM,QAAQ,GAAiC,MAAM,CAAC,QAAQ,KAAK,kBAAkB;QACnF,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,MAAM,CAAC;IAEX,OAAO;QACL,QAAQ;QACR,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE;YACR,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAU,EACV,QAAgB,EAChB,OAA0D;IAE1D,OAAO,KAAK,EAAE,IAAI,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,kBAAkB,EAAE,CAAC;YACzE,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,IAAU,EACV,OAAmE;IAEnE,MAAM,OAAO,GAAwE,EAAE,CAAC;IAExF,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CACxB,IAAI,EACJ,IAAI,EACJ,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CACpC,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ProtectOptions } from '../core/protect.js';
2
+ export type { ProtectMode, ProtectOptions } from '../core/protect.js';
3
+ export declare function protect<T extends {
4
+ name: string;
5
+ }>(tools: T[], options?: ProtectOptions): Promise<T[]>;
6
+ export declare function protect<T extends {
7
+ name: string;
8
+ }>(tool: T, options?: ProtectOptions): Promise<T>;
9
+ export declare function __resetProtectCacheForTests(): void;
10
+ //# sourceMappingURL=protect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protect.d.ts","sourceRoot":"","sources":["../../src/browser/protect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEtE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAmMtE,wBAAsB,OAAO,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACtD,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAChB,wBAAsB,OAAO,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACtD,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,CAAC,CAAC,CAAC;AAwBd,wBAAgB,2BAA2B,IAAI,IAAI,CAGlD"}
@@ -0,0 +1,176 @@
1
+ import { Veto } from './veto.js';
2
+ const TOOL_PACK_HEURISTICS = [
3
+ {
4
+ patterns: ['transfer', 'payment', 'balance', 'withdraw', 'deposit', 'invoice'],
5
+ pack: '@veto/financial',
6
+ },
7
+ {
8
+ patterns: ['navigate', 'click', 'goto', 'browse', 'scroll', 'type_text'],
9
+ pack: '@veto/browser-automation',
10
+ },
11
+ {
12
+ patterns: ['query', 'sql', 'database', 'select', 'insert', 'table'],
13
+ pack: '@veto/data-access',
14
+ },
15
+ {
16
+ patterns: ['exec', 'shell', 'command', 'terminal', 'bash', 'run_code'],
17
+ pack: '@veto/coding-agent',
18
+ },
19
+ ];
20
+ let _defaultInstance = null;
21
+ const _instanceCache = new Map();
22
+ function stableSerialize(value) {
23
+ if (value === null || typeof value !== 'object') {
24
+ return JSON.stringify(value);
25
+ }
26
+ if (Array.isArray(value)) {
27
+ return `[${value.map((item) => stableSerialize(item)).join(',')}]`;
28
+ }
29
+ const entries = Object.entries(value)
30
+ .sort(([a], [b]) => a.localeCompare(b))
31
+ .map(([key, item]) => `${JSON.stringify(key)}:${stableSerialize(item)}`);
32
+ return `{${entries.join(',')}}`;
33
+ }
34
+ function normalizeProtectMode(mode) {
35
+ if (mode === 'shadow') {
36
+ // TODO: PLW-94 true shadow mode behavior.
37
+ return 'log';
38
+ }
39
+ return mode;
40
+ }
41
+ function toToolsArray(input) {
42
+ return Array.isArray(input) ? input : [input];
43
+ }
44
+ function collectHeuristicPacks(tools) {
45
+ const packs = new Set();
46
+ for (const tool of tools) {
47
+ const name = tool.name.toLowerCase();
48
+ for (const heuristic of TOOL_PACK_HEURISTICS) {
49
+ if (heuristic.patterns.some((pattern) => name.includes(pattern))) {
50
+ packs.add(heuristic.pack);
51
+ }
52
+ }
53
+ }
54
+ return [...packs].sort((a, b) => a.localeCompare(b));
55
+ }
56
+ function buildInitDecision(tools, options) {
57
+ if (options.rules) {
58
+ return {
59
+ source: 'rules',
60
+ packs: [],
61
+ rules: options.rules,
62
+ outputRules: [],
63
+ };
64
+ }
65
+ if (options.apiKey) {
66
+ return {
67
+ source: 'apiKey',
68
+ packs: [],
69
+ rules: [],
70
+ outputRules: [],
71
+ };
72
+ }
73
+ return {
74
+ source: 'allow-all',
75
+ packs: collectHeuristicPacks(tools),
76
+ rules: [],
77
+ outputRules: [],
78
+ };
79
+ }
80
+ function createCacheKey(options, decision) {
81
+ return stableSerialize({
82
+ source: decision.source,
83
+ configDir: options.configDir,
84
+ pack: options.pack,
85
+ apiKey: options.apiKey,
86
+ endpoint: options.endpoint,
87
+ mode: normalizeProtectMode(options.mode),
88
+ logLevel: options.logLevel,
89
+ sessionId: options.sessionId,
90
+ agentId: options.agentId,
91
+ userId: options.userId,
92
+ role: options.role,
93
+ packs: decision.packs,
94
+ rulesFingerprint: stableSerialize(decision.rules),
95
+ outputRulesFingerprint: stableSerialize(decision.outputRules),
96
+ budget: options.budget,
97
+ costs: options.costs,
98
+ });
99
+ }
100
+ function createAllowAllInstance(options) {
101
+ return Veto.fromRules({
102
+ rules: [],
103
+ outputRules: [],
104
+ mode: normalizeProtectMode(options.mode),
105
+ logLevel: options.logLevel,
106
+ sessionId: options.sessionId,
107
+ agentId: options.agentId,
108
+ userId: options.userId,
109
+ role: options.role,
110
+ apiKey: options.apiKey,
111
+ endpoint: options.endpoint,
112
+ onApprovalRequired: options.onApprovalRequired,
113
+ budget: options.budget,
114
+ costs: options.costs,
115
+ });
116
+ }
117
+ async function initializeVeto(tools, options) {
118
+ const decision = buildInitDecision(tools, options);
119
+ const cacheKey = createCacheKey(options, decision);
120
+ const cached = _instanceCache.get(cacheKey);
121
+ if (cached) {
122
+ return cached;
123
+ }
124
+ let instance;
125
+ try {
126
+ if (decision.source === 'apiKey') {
127
+ instance = await Veto.fromCloud({
128
+ apiKey: options.apiKey,
129
+ endpoint: options.endpoint,
130
+ });
131
+ }
132
+ else {
133
+ instance = Veto.fromRules({
134
+ rules: decision.rules,
135
+ outputRules: decision.outputRules,
136
+ mode: normalizeProtectMode(options.mode),
137
+ logLevel: options.logLevel,
138
+ sessionId: options.sessionId,
139
+ agentId: options.agentId,
140
+ userId: options.userId,
141
+ role: options.role,
142
+ apiKey: options.apiKey,
143
+ endpoint: options.endpoint,
144
+ onApprovalRequired: options.onApprovalRequired,
145
+ budget: options.budget,
146
+ costs: options.costs,
147
+ });
148
+ }
149
+ }
150
+ catch {
151
+ instance = createAllowAllInstance(options);
152
+ }
153
+ _instanceCache.set(cacheKey, instance);
154
+ return instance;
155
+ }
156
+ export async function protect(input, options) {
157
+ if (options === undefined && _defaultInstance) {
158
+ return Array.isArray(input)
159
+ ? _defaultInstance.wrap(input)
160
+ : _defaultInstance.wrapTool(input);
161
+ }
162
+ const normalizedOptions = options ?? {};
163
+ const tools = toToolsArray(input);
164
+ const instance = await initializeVeto(tools, normalizedOptions);
165
+ if (options === undefined) {
166
+ _defaultInstance = instance;
167
+ }
168
+ return Array.isArray(input)
169
+ ? instance.wrap(input)
170
+ : instance.wrapTool(input);
171
+ }
172
+ export function __resetProtectCacheForTests() {
173
+ _defaultInstance = null;
174
+ _instanceCache.clear();
175
+ }
176
+ //# sourceMappingURL=protect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protect.js","sourceRoot":"","sources":["../../src/browser/protect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { LogLevel, NamedValidator, ValidationContext, Validator } from '../types/config.js';
2
+ import type { OutputRule, Rule, RuleSeverity } from '../rules/types.js';
3
+ import type { BudgetConfig, ToolCostMap } from '../core/budget.js';
4
+ export type VetoMode = 'strict' | 'log';
5
+ export interface GuardContext {
6
+ sessionId?: string;
7
+ agentId?: string;
8
+ userId?: string;
9
+ role?: string;
10
+ }
11
+ export interface GuardResult {
12
+ decision: 'allow' | 'deny' | 'require_approval';
13
+ reason?: string;
14
+ ruleId?: string;
15
+ severity?: RuleSeverity;
16
+ approvalId?: string;
17
+ }
18
+ export interface BrowserCloudPoliciesResponse {
19
+ policies: Rule[];
20
+ outputRules?: OutputRule[];
21
+ }
22
+ export interface BrowserCloudDecisionRequest {
23
+ tool_name: string;
24
+ arguments: Record<string, unknown>;
25
+ decision: 'allow' | 'deny';
26
+ reason?: string;
27
+ mode: 'deterministic';
28
+ latency_ms: number;
29
+ source: 'client';
30
+ context?: Record<string, unknown>;
31
+ }
32
+ export interface BrowserCloudClient {
33
+ fetchPolicies: () => Promise<BrowserCloudPoliciesResponse>;
34
+ logDecision: (request: BrowserCloudDecisionRequest) => void | Promise<void>;
35
+ dispose?: () => void;
36
+ }
37
+ export interface VetoBrowserOptions<TCloudClient = BrowserCloudClient> {
38
+ rules: Rule[];
39
+ outputRules?: OutputRule[];
40
+ mode?: VetoMode;
41
+ logLevel?: LogLevel;
42
+ sessionId?: string;
43
+ agentId?: string;
44
+ userId?: string;
45
+ role?: string;
46
+ validators?: (Validator | NamedValidator)[];
47
+ apiKey?: string;
48
+ endpoint?: string;
49
+ cloudClient?: TCloudClient;
50
+ onApprovalRequired?: (context: ValidationContext, approvalId: string) => void | Promise<void>;
51
+ budget?: BudgetConfig;
52
+ costs?: ToolCostMap;
53
+ }
54
+ export interface VetoFromCloudOptions {
55
+ apiKey: string;
56
+ endpoint?: string;
57
+ refreshIntervalMs?: number;
58
+ }
59
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/browser/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,SAAS,EACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,kBAAkB,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,OAAO,CAAC,4BAA4B,CAAC,CAAC;IAC3D,WAAW,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB,CAAC,YAAY,GAAG,kBAAkB;IACnE,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,CAAC,SAAS,GAAG,cAAc,CAAC,EAAE,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,kBAAkB,CAAC,EAAE,CACnB,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,MAAM,KACf,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/browser/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ import type { ValidationResult } from '../types/config.js';
2
+ import { type HistoryStats } from '../core/history.js';
3
+ import { type BudgetStatus } from '../core/budget.js';
4
+ import { type OutputValidationResult } from '../core/output-validator.js';
5
+ import { ToolCallDeniedError } from '../core/interceptor.js';
6
+ import type { GuardContext, GuardResult, VetoBrowserOptions, VetoFromCloudOptions } from './types.js';
7
+ export declare class Veto {
8
+ private readonly logger;
9
+ private readonly mode;
10
+ private readonly sessionId?;
11
+ private readonly agentId?;
12
+ private readonly userId?;
13
+ private readonly role?;
14
+ private readonly validators;
15
+ private readonly historyTracker;
16
+ private readonly budgetTracker;
17
+ private readonly outputValidator;
18
+ private readonly cloudClient;
19
+ private readonly onApprovalRequired?;
20
+ private rulesState;
21
+ private readonly compiledExpressionCache;
22
+ private refreshIntervalId;
23
+ private constructor();
24
+ static fromRules(options: VetoBrowserOptions): Veto;
25
+ static fromCloud(options: VetoFromCloudOptions): Promise<Veto>;
26
+ private setRefreshInterval;
27
+ private getRulesForTool;
28
+ private getOutputRulesForTool;
29
+ private resolveSessionId;
30
+ private resolveAgentId;
31
+ private resolveUserId;
32
+ private resolveRole;
33
+ private shouldApplyLogOverride;
34
+ private toRuleMetadata;
35
+ private normalizeAgentScope;
36
+ private matchesRuleAgents;
37
+ private evaluateExpression;
38
+ private buildEvaluationContext;
39
+ private validateLocal;
40
+ private runValidators;
41
+ private toGuardResult;
42
+ private reportDecision;
43
+ guard(toolName: string, args: Record<string, unknown>, context?: GuardContext): Promise<GuardResult>;
44
+ validateToolCall(call: {
45
+ id?: string;
46
+ name: string;
47
+ arguments: Record<string, unknown>;
48
+ }): Promise<{
49
+ allowed: boolean;
50
+ validationResult: ValidationResult;
51
+ originalCall: {
52
+ id?: string;
53
+ name: string;
54
+ arguments: Record<string, unknown>;
55
+ };
56
+ finalArguments: Record<string, unknown>;
57
+ }>;
58
+ private denyWithApprovalHook;
59
+ wrap<T extends {
60
+ name: string;
61
+ }>(tools: T[]): T[];
62
+ wrapTool<T extends {
63
+ name: string;
64
+ }>(tool: T): T;
65
+ validateOutput(toolName: string, output: unknown): OutputValidationResult;
66
+ refreshRules(): Promise<void>;
67
+ getHistoryStats(): HistoryStats;
68
+ clearHistory(): void;
69
+ getBudgetStatus(): BudgetStatus | null;
70
+ resetBudget(): void;
71
+ dispose(): void;
72
+ }
73
+ export { ToolCallDeniedError };
74
+ //# sourceMappingURL=veto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"veto.d.ts","sourceRoot":"","sources":["../../src/browser/veto.ts"],"names":[],"mappings":"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"}