veto-sdk 2.0.0 → 2.2.1

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 (121) hide show
  1. package/dist/browser/index.d.ts +1 -1
  2. package/dist/browser/index.d.ts.map +1 -1
  3. package/dist/browser/index.js.map +1 -1
  4. package/dist/browser/protect.d.ts.map +1 -1
  5. package/dist/browser/protect.js +9 -1
  6. package/dist/browser/protect.js.map +1 -1
  7. package/dist/browser/types.d.ts +20 -1
  8. package/dist/browser/types.d.ts.map +1 -1
  9. package/dist/browser/veto.d.ts +10 -0
  10. package/dist/browser/veto.d.ts.map +1 -1
  11. package/dist/browser/veto.js +77 -4
  12. package/dist/browser/veto.js.map +1 -1
  13. package/dist/cloud/types.d.ts +17 -2
  14. package/dist/cloud/types.d.ts.map +1 -1
  15. package/dist/compiler/evaluator.d.ts.map +1 -1
  16. package/dist/compiler/evaluator.js +6 -0
  17. package/dist/compiler/evaluator.js.map +1 -1
  18. package/dist/core/events.d.ts +13 -1
  19. package/dist/core/events.d.ts.map +1 -1
  20. package/dist/core/events.js +37 -4
  21. package/dist/core/events.js.map +1 -1
  22. package/dist/core/protect.d.ts +7 -1
  23. package/dist/core/protect.d.ts.map +1 -1
  24. package/dist/core/protect.js +23 -5
  25. package/dist/core/protect.js.map +1 -1
  26. package/dist/core/veto.d.ts +43 -1
  27. package/dist/core/veto.d.ts.map +1 -1
  28. package/dist/core/veto.js +256 -13
  29. package/dist/core/veto.js.map +1 -1
  30. package/dist/deterministic/regex-safety.d.ts.map +1 -1
  31. package/dist/deterministic/regex-safety.js +42 -1
  32. package/dist/deterministic/regex-safety.js.map +1 -1
  33. package/dist/deterministic/types.d.ts +103 -0
  34. package/dist/deterministic/types.d.ts.map +1 -1
  35. package/dist/economic/budget-engine.d.ts +29 -0
  36. package/dist/economic/budget-engine.d.ts.map +1 -0
  37. package/dist/economic/budget-engine.js +146 -0
  38. package/dist/economic/budget-engine.js.map +1 -0
  39. package/dist/economic/connectors/ap2.d.ts +51 -0
  40. package/dist/economic/connectors/ap2.d.ts.map +1 -0
  41. package/dist/economic/connectors/ap2.js +133 -0
  42. package/dist/economic/connectors/ap2.js.map +1 -0
  43. package/dist/economic/connectors/index.d.ts +8 -0
  44. package/dist/economic/connectors/index.d.ts.map +1 -0
  45. package/dist/economic/connectors/index.js +8 -0
  46. package/dist/economic/connectors/index.js.map +1 -0
  47. package/dist/economic/connectors/mpp.d.ts +41 -0
  48. package/dist/economic/connectors/mpp.d.ts.map +1 -0
  49. package/dist/economic/connectors/mpp.js +97 -0
  50. package/dist/economic/connectors/mpp.js.map +1 -0
  51. package/dist/economic/connectors/x402.d.ts +20 -0
  52. package/dist/economic/connectors/x402.d.ts.map +1 -0
  53. package/dist/economic/connectors/x402.js +142 -0
  54. package/dist/economic/connectors/x402.js.map +1 -0
  55. package/dist/economic/evaluator.d.ts +77 -0
  56. package/dist/economic/evaluator.d.ts.map +1 -0
  57. package/dist/economic/evaluator.js +231 -0
  58. package/dist/economic/evaluator.js.map +1 -0
  59. package/dist/economic/index.d.ts +13 -0
  60. package/dist/economic/index.d.ts.map +1 -0
  61. package/dist/economic/index.js +15 -0
  62. package/dist/economic/index.js.map +1 -0
  63. package/dist/economic/types.d.ts +188 -0
  64. package/dist/economic/types.d.ts.map +1 -0
  65. package/dist/economic/types.js +10 -0
  66. package/dist/economic/types.js.map +1 -0
  67. package/dist/extractors/content.d.ts +42 -0
  68. package/dist/extractors/content.d.ts.map +1 -0
  69. package/dist/extractors/content.js +171 -0
  70. package/dist/extractors/content.js.map +1 -0
  71. package/dist/extractors/index.d.ts +7 -0
  72. package/dist/extractors/index.d.ts.map +1 -0
  73. package/dist/extractors/index.js +7 -0
  74. package/dist/extractors/index.js.map +1 -0
  75. package/dist/index.d.ts +9 -3
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +10 -2
  78. package/dist/index.js.map +1 -1
  79. package/dist/policy/generator.d.ts +110 -0
  80. package/dist/policy/generator.d.ts.map +1 -0
  81. package/dist/policy/generator.js +465 -0
  82. package/dist/policy/generator.js.map +1 -0
  83. package/dist/policy/index.d.ts +7 -0
  84. package/dist/policy/index.d.ts.map +1 -0
  85. package/dist/policy/index.js +7 -0
  86. package/dist/policy/index.js.map +1 -0
  87. package/dist/providers/adapters.d.ts +27 -0
  88. package/dist/providers/adapters.d.ts.map +1 -1
  89. package/dist/providers/adapters.js +58 -0
  90. package/dist/providers/adapters.js.map +1 -1
  91. package/dist/rules/condition-evaluator.d.ts +6 -0
  92. package/dist/rules/condition-evaluator.d.ts.map +1 -1
  93. package/dist/rules/condition-evaluator.js +60 -18
  94. package/dist/rules/condition-evaluator.js.map +1 -1
  95. package/dist/rules/expression-validator.d.ts.map +1 -1
  96. package/dist/rules/expression-validator.js +5 -0
  97. package/dist/rules/expression-validator.js.map +1 -1
  98. package/dist/rules/index.d.ts +1 -0
  99. package/dist/rules/index.d.ts.map +1 -1
  100. package/dist/rules/index.js +1 -0
  101. package/dist/rules/index.js.map +1 -1
  102. package/dist/rules/local-evaluator.d.ts +65 -0
  103. package/dist/rules/local-evaluator.d.ts.map +1 -0
  104. package/dist/rules/local-evaluator.js +250 -0
  105. package/dist/rules/local-evaluator.js.map +1 -0
  106. package/dist/rules/policy-ir-schema.d.ts +109 -0
  107. package/dist/rules/policy-ir-schema.d.ts.map +1 -1
  108. package/dist/rules/policy-ir-schema.js +90 -0
  109. package/dist/rules/policy-ir-schema.js.map +1 -1
  110. package/dist/rules/policy-packs.d.ts.map +1 -1
  111. package/dist/rules/policy-packs.js +1 -0
  112. package/dist/rules/policy-packs.js.map +1 -1
  113. package/dist/types/config.d.ts +2 -1
  114. package/dist/types/config.d.ts.map +1 -1
  115. package/dist/types/config.js.map +1 -1
  116. package/dist/utils/logger.d.ts +38 -2
  117. package/dist/utils/logger.d.ts.map +1 -1
  118. package/dist/utils/logger.js +231 -26
  119. package/dist/utils/logger.js.map +1 -1
  120. package/package.json +27 -12
  121. package/packs/economic-agent.yaml +62 -0
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @module utils/logger
8
8
  */
9
- import type { LogLevel } from '../types/config.js';
9
+ import type { LogLevel, StreamLogMode } from '../types/config.js';
10
10
  /**
11
11
  * Log entry structure for structured logging.
12
12
  */
@@ -22,6 +22,18 @@ export interface LogEntry {
22
22
  /** Error object if applicable */
23
23
  error?: Error;
24
24
  }
25
+ /**
26
+ * Structured payload for one-line tool decision stream output.
27
+ */
28
+ export interface DecisionStreamEvent {
29
+ decision: 'allow' | 'deny' | 'await';
30
+ toolName: string;
31
+ arguments?: Record<string, unknown>;
32
+ reason?: string;
33
+ ruleId?: string;
34
+ latencyMs?: number;
35
+ approvalId?: string;
36
+ }
25
37
  /**
26
38
  * Logger interface that can be implemented for custom logging.
27
39
  *
@@ -41,6 +53,29 @@ export interface Logger {
41
53
  warn(message: string, context?: Record<string, unknown>): void;
42
54
  error(message: string, context?: Record<string, unknown>, error?: Error): void;
43
55
  }
56
+ export interface DecisionStreamLogger extends Logger {
57
+ streamDecision(event: DecisionStreamEvent): void;
58
+ }
59
+ /**
60
+ * Check if a log level should be emitted given the configured level.
61
+ */
62
+ declare function shouldLog(messageLevel: Exclude<LogLevel, 'stream'>, configuredLevel: LogLevel): boolean;
63
+ declare function formatCompactDecision(event: DecisionStreamEvent): string;
64
+ declare function formatVerboseDecision(event: DecisionStreamEvent): string;
65
+ /**
66
+ * Format a log message with optional context.
67
+ */
68
+ declare function formatMessage(level: Exclude<LogLevel, 'stream'>, message: string, context?: Record<string, unknown>): string;
69
+ export declare class StreamLogger implements DecisionStreamLogger {
70
+ private readonly mode;
71
+ constructor(mode?: StreamLogMode);
72
+ debug(): void;
73
+ info(): void;
74
+ warn(message: string, context?: Record<string, unknown>): void;
75
+ error(message: string, context?: Record<string, unknown>, error?: Error): void;
76
+ streamDecision(event: DecisionStreamEvent): void;
77
+ }
78
+ export declare function isDecisionStreamLogger(logger: Logger): logger is DecisionStreamLogger;
44
79
  /**
45
80
  * Create a console-based logger with the specified log level.
46
81
  *
@@ -54,7 +89,7 @@ export interface Logger {
54
89
  * logger.info('This will be logged');
55
90
  * ```
56
91
  */
57
- export declare function createLogger(level: LogLevel): Logger;
92
+ export declare function createLogger(level: LogLevel, streamMode?: StreamLogMode): Logger;
58
93
  /**
59
94
  * A no-op logger that discards all messages.
60
95
  * Useful for testing or when logging should be completely disabled.
@@ -94,4 +129,5 @@ export declare function createMemoryLogger(level?: LogLevel): {
94
129
  * ```
95
130
  */
96
131
  export declare function createChildLogger(parent: Logger, defaultContext: Record<string, unknown>): Logger;
132
+ export { formatCompactDecision, formatMessage, formatVerboseDecision, shouldLog, };
97
133
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,8BAA8B;IAC9B,KAAK,EAAE,QAAQ,CAAC;IAChB,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,SAAS,EAAE,IAAI,CAAC;IAChB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,iCAAiC;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CAChF;AAwCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAiCpD;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,MAK1B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,GAAE,QAAkB,GAAG;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAiCA;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACtC,MAAM,CAcR"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -12,16 +12,187 @@
12
12
  const LOG_LEVEL_PRIORITY = {
13
13
  debug: 0,
14
14
  info: 1,
15
+ stream: 1,
15
16
  warn: 2,
16
17
  error: 3,
17
18
  silent: 4,
18
19
  };
20
+ const ANSI_RESET = '\u001B[0m';
21
+ const ANSI_GREEN = '\u001B[32m';
22
+ const ANSI_RED = '\u001B[31m';
23
+ const ANSI_YELLOW = '\u001B[33m';
24
+ const ANSI_DIM = '\u001B[2m';
25
+ const ANSI_BOLD = '\u001B[1m';
19
26
  /**
20
27
  * Check if a log level should be emitted given the configured level.
21
28
  */
22
29
  function shouldLog(messageLevel, configuredLevel) {
23
30
  return LOG_LEVEL_PRIORITY[messageLevel] >= LOG_LEVEL_PRIORITY[configuredLevel];
24
31
  }
32
+ function isPlainObject(value) {
33
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
34
+ }
35
+ function escapeString(value) {
36
+ return value.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
37
+ }
38
+ function formatScalar(value) {
39
+ if (typeof value === 'string') {
40
+ return `'${escapeString(value)}'`;
41
+ }
42
+ if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {
43
+ return String(value);
44
+ }
45
+ if (value === null) {
46
+ return 'null';
47
+ }
48
+ if (value instanceof Date) {
49
+ return `'${value.toISOString()}'`;
50
+ }
51
+ if (typeof value === 'undefined') {
52
+ return 'undefined';
53
+ }
54
+ return String(value);
55
+ }
56
+ function formatValue(value, depth = 0) {
57
+ if (value === null
58
+ || typeof value === 'string'
59
+ || typeof value === 'number'
60
+ || typeof value === 'boolean'
61
+ || typeof value === 'bigint'
62
+ || typeof value === 'undefined'
63
+ || value instanceof Date) {
64
+ return formatScalar(value);
65
+ }
66
+ if (Array.isArray(value)) {
67
+ if (depth >= 2) {
68
+ return '[…]';
69
+ }
70
+ return `[${value.map((item) => formatValue(item, depth + 1)).join(', ')}]`;
71
+ }
72
+ if (isPlainObject(value)) {
73
+ if (depth >= 2) {
74
+ return '{…}';
75
+ }
76
+ return `{${Object.entries(value)
77
+ .map(([key, item]) => `${key}: ${formatValue(item, depth + 1)}`)
78
+ .join(', ')}}`;
79
+ }
80
+ return formatScalar(value);
81
+ }
82
+ function truncate(value, maxLength) {
83
+ if (value.length <= maxLength) {
84
+ return value;
85
+ }
86
+ return `${value.slice(0, Math.max(0, maxLength - 1))}…`;
87
+ }
88
+ function formatCallArguments(args, maxLength = 120) {
89
+ if (!args || Object.keys(args).length === 0) {
90
+ return '';
91
+ }
92
+ const inlineEntries = Object.entries(args)
93
+ .map(([key, value]) => `${key}=${formatValue(value)}`)
94
+ .join(', ');
95
+ if (inlineEntries.length <= maxLength) {
96
+ return inlineEntries;
97
+ }
98
+ return truncate(formatValue(args), maxLength);
99
+ }
100
+ function formatDuration(latencyMs) {
101
+ if (typeof latencyMs !== 'number' || !Number.isFinite(latencyMs) || latencyMs < 0) {
102
+ return null;
103
+ }
104
+ return `${Math.round(latencyMs)}ms`;
105
+ }
106
+ function supportsColor() {
107
+ return typeof process !== 'undefined' && Boolean(process.stderr?.isTTY);
108
+ }
109
+ function colorize(value, color) {
110
+ if (!supportsColor()) {
111
+ return value;
112
+ }
113
+ return `${color}${value}${ANSI_RESET}`;
114
+ }
115
+ function dim(value) {
116
+ if (!supportsColor()) {
117
+ return value;
118
+ }
119
+ return `${ANSI_DIM}${value}${ANSI_RESET}`;
120
+ }
121
+ function bold(value) {
122
+ if (!supportsColor()) {
123
+ return value;
124
+ }
125
+ return `${ANSI_BOLD}${value}${ANSI_RESET}`;
126
+ }
127
+ function getDecisionLabel(decision) {
128
+ switch (decision) {
129
+ case 'allow':
130
+ return colorize('ALLOW', ANSI_GREEN);
131
+ case 'deny':
132
+ return colorize('DENY', ANSI_RED);
133
+ case 'await':
134
+ return colorize('AWAIT', ANSI_YELLOW);
135
+ }
136
+ }
137
+ function formatDecisionReason(reason, maxLength) {
138
+ if (!reason || reason.trim().length === 0) {
139
+ return null;
140
+ }
141
+ return truncate(reason.trim(), maxLength);
142
+ }
143
+ function formatCompactDecision(event) {
144
+ const args = formatCallArguments(event.arguments, 140);
145
+ const call = args.length > 0 ? `${event.toolName}(${args})` : `${event.toolName}()`;
146
+ const metaParts = [];
147
+ if (event.decision !== 'await') {
148
+ metaParts.push(event.decision === 'allow' ? '✓' : '✗');
149
+ }
150
+ else {
151
+ metaParts.push('…');
152
+ }
153
+ const duration = formatDuration(event.latencyMs);
154
+ if (duration) {
155
+ metaParts.push(duration);
156
+ }
157
+ if (event.ruleId) {
158
+ metaParts.push(`[rule: ${event.ruleId}]`);
159
+ }
160
+ if (event.approvalId && event.decision === 'await') {
161
+ metaParts.push(`[approval: ${event.approvalId}]`);
162
+ }
163
+ const reason = formatDecisionReason(event.reason, 140);
164
+ const meta = metaParts.length > 0 ? ` ${dim(metaParts.join(' '))}` : '';
165
+ const suffix = reason ? ` ${dim(`— ${reason}`)}` : '';
166
+ return `${getDecisionLabel(event.decision)} ${call}${meta}${suffix}`;
167
+ }
168
+ function formatVerboseDecision(event) {
169
+ const args = formatCallArguments(event.arguments, 320);
170
+ const duration = formatDuration(event.latencyMs);
171
+ const reason = formatDecisionReason(event.reason, 320) ?? 'n/a';
172
+ const lines = [
173
+ `${bold('VETO DECISION')} ${getDecisionLabel(event.decision)}`,
174
+ `tool: ${event.toolName}`,
175
+ `args: ${args.length > 0 ? args : '(none)'}`,
176
+ `reason: ${reason}`,
177
+ ];
178
+ if (event.ruleId) {
179
+ lines.push(`rule: ${event.ruleId}`);
180
+ }
181
+ if (event.approvalId) {
182
+ lines.push(`approval: ${event.approvalId}`);
183
+ }
184
+ if (duration) {
185
+ lines.push(`latency: ${duration}`);
186
+ }
187
+ return lines.join('\n');
188
+ }
189
+ function writeToStderr(message) {
190
+ if (typeof process !== 'undefined' && typeof process.stderr?.write === 'function') {
191
+ process.stderr.write(`${message}\n`);
192
+ return;
193
+ }
194
+ console.log(message);
195
+ }
25
196
  /**
26
197
  * Format a log message with optional context.
27
198
  */
@@ -35,6 +206,60 @@ function formatMessage(level, message, context) {
35
206
  }
36
207
  return `${prefix} ${message}`;
37
208
  }
209
+ class ConsoleLogger {
210
+ level;
211
+ constructor(level) {
212
+ this.level = level;
213
+ }
214
+ debug(message, context) {
215
+ if (shouldLog('debug', this.level)) {
216
+ console.debug(formatMessage('debug', message, context));
217
+ }
218
+ }
219
+ info(message, context) {
220
+ if (shouldLog('info', this.level)) {
221
+ console.info(formatMessage('info', message, context));
222
+ }
223
+ }
224
+ warn(message, context) {
225
+ if (shouldLog('warn', this.level)) {
226
+ console.warn(formatMessage('warn', message, context));
227
+ }
228
+ }
229
+ error(message, context, error) {
230
+ if (shouldLog('error', this.level)) {
231
+ console.error(formatMessage('error', message, context));
232
+ if (error) {
233
+ console.error(error);
234
+ }
235
+ }
236
+ }
237
+ }
238
+ export class StreamLogger {
239
+ mode;
240
+ constructor(mode = 'compact') {
241
+ this.mode = mode;
242
+ }
243
+ debug() { }
244
+ info() { }
245
+ warn(message, context) {
246
+ writeToStderr(formatMessage('warn', message, context));
247
+ }
248
+ error(message, context, error) {
249
+ writeToStderr(formatMessage('error', message, context));
250
+ if (error) {
251
+ writeToStderr(error.stack ?? error.message);
252
+ }
253
+ }
254
+ streamDecision(event) {
255
+ writeToStderr(this.mode === 'verbose'
256
+ ? formatVerboseDecision(event)
257
+ : formatCompactDecision(event));
258
+ }
259
+ }
260
+ export function isDecisionStreamLogger(logger) {
261
+ return typeof logger.streamDecision === 'function';
262
+ }
38
263
  /**
39
264
  * Create a console-based logger with the specified log level.
40
265
  *
@@ -48,32 +273,11 @@ function formatMessage(level, message, context) {
48
273
  * logger.info('This will be logged');
49
274
  * ```
50
275
  */
51
- export function createLogger(level) {
52
- return {
53
- debug(message, context) {
54
- if (shouldLog('debug', level)) {
55
- console.debug(formatMessage('debug', message, context));
56
- }
57
- },
58
- info(message, context) {
59
- if (shouldLog('info', level)) {
60
- console.info(formatMessage('info', message, context));
61
- }
62
- },
63
- warn(message, context) {
64
- if (shouldLog('warn', level)) {
65
- console.warn(formatMessage('warn', message, context));
66
- }
67
- },
68
- error(message, context, error) {
69
- if (shouldLog('error', level)) {
70
- console.error(formatMessage('error', message, context));
71
- if (error) {
72
- console.error(error);
73
- }
74
- }
75
- },
76
- };
276
+ export function createLogger(level, streamMode = 'compact') {
277
+ if (level === 'stream') {
278
+ return new StreamLogger(streamMode);
279
+ }
280
+ return new ConsoleLogger(level);
77
281
  }
78
282
  /**
79
283
  * A no-op logger that discards all messages.
@@ -150,4 +354,5 @@ export function createChildLogger(parent, defaultContext) {
150
354
  error: (message, context, error) => parent.error(message, mergeContext(context), error),
151
355
  };
152
356
  }
357
+ export { formatCompactDecision, formatMessage, formatVerboseDecision, shouldLog, };
153
358
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veto-sdk",
3
- "version": "2.0.0",
3
+ "version": "2.2.1",
4
4
  "description": "A guardrail system that intercepts and validates AI agent tool calls",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -39,7 +39,6 @@
39
39
  "@types/react": "^18.3.26",
40
40
  "@types/node": "^20.10.0",
41
41
  "@vitest/coverage-v8": "^4.0.16",
42
- "browser-use-node": "^0.1.11",
43
42
  "openai": "^4.77.0",
44
43
  "tsx": "^4.7.0",
45
44
  "typescript": "^5.3.0",
@@ -50,9 +49,12 @@
50
49
  "@google/genai": "^1.34.0",
51
50
  "openai": "^4.0.0",
52
51
  "zod": "^3.22.0",
53
- "browser-use-node": ">=0.1.0",
54
52
  "ai": ">=3.0.0",
55
- "@langchain/core": ">=0.2.0"
53
+ "@langchain/core": ">=0.2.0",
54
+ "ink": "^5.0.0",
55
+ "react": "^18.0.0",
56
+ "@opentui/core": "^0.1.0",
57
+ "picocolors": "^1.0.0"
56
58
  },
57
59
  "peerDependenciesMeta": {
58
60
  "openai": {
@@ -67,14 +69,23 @@
67
69
  "zod": {
68
70
  "optional": true
69
71
  },
70
- "browser-use-node": {
71
- "optional": true
72
- },
73
72
  "ai": {
74
73
  "optional": true
75
74
  },
76
75
  "@langchain/core": {
77
76
  "optional": true
77
+ },
78
+ "ink": {
79
+ "optional": true
80
+ },
81
+ "react": {
82
+ "optional": true
83
+ },
84
+ "@opentui/core": {
85
+ "optional": true
86
+ },
87
+ "picocolors": {
88
+ "optional": true
78
89
  }
79
90
  },
80
91
  "engines": {
@@ -149,14 +160,18 @@
149
160
  "./integrations/openai-agents": {
150
161
  "types": "./dist/integrations/openai-agents/index.d.ts",
151
162
  "import": "./dist/integrations/openai-agents/index.js"
163
+ },
164
+ "./extractors": {
165
+ "types": "./dist/extractors/index.d.ts",
166
+ "import": "./dist/extractors/index.js"
167
+ },
168
+ "./policy": {
169
+ "types": "./dist/policy/index.d.ts",
170
+ "import": "./dist/policy/index.js"
152
171
  }
153
172
  },
154
173
  "dependencies": {
155
- "@opentui/core": "^0.1.82",
156
- "ajv": "^8.17.1",
157
- "ink": "^5.2.1",
158
- "picocolors": "^1.1.1",
159
- "react": "^18.3.1",
174
+ "ajv": "^8.18.0",
160
175
  "yaml": "^2.8.2"
161
176
  }
162
177
  }
@@ -0,0 +1,62 @@
1
+ version: "1.0"
2
+ name: "@veto/economic-agent"
3
+ description: >
4
+ Sensible economic authorization defaults for AI agents that spend money.
5
+ Covers session budgets, approval thresholds, and payer validation.
6
+ One line to economic auth: extends: "@veto/economic-agent"
7
+
8
+ rules:
9
+ - id: economic-high-value-action
10
+ name: High-value action guard
11
+ description: Require approval for tool calls with cost arguments above $50
12
+ enabled: true
13
+ severity: high
14
+ action: require_approval
15
+ conditions:
16
+ - field: arguments.cost
17
+ operator: greater_than
18
+ value: 50
19
+
20
+ - id: economic-dangerous-tools
21
+ name: Block unrestricted financial tools
22
+ description: Block tools that can transfer funds without explicit cost
23
+ enabled: true
24
+ severity: critical
25
+ action: block
26
+ tools:
27
+ - transfer_funds
28
+ - withdraw
29
+ - wire_transfer
30
+ conditions:
31
+ - field: arguments.amount
32
+ operator: greater_than
33
+ value: 0
34
+
35
+ settings:
36
+ default_action: allow
37
+ fail_mode: closed
38
+
39
+ economic:
40
+ budgets:
41
+ - scope: session
42
+ limit: 100.00
43
+ currency: USD
44
+ approval_threshold: 25.00
45
+ window: session
46
+
47
+ cost_extraction:
48
+ default: "arguments.cost"
49
+ overrides:
50
+ search_api: "arguments.price_usd"
51
+ trade: "arguments.amount"
52
+ purchase: "arguments.total"
53
+
54
+ payer:
55
+ required: true
56
+ approved: []
57
+
58
+ denial_reasons:
59
+ budget_exceeded: "Action denied: would exceed {scope} budget ({spent}/{limit} {currency})"
60
+ approval_required: "Action requires approval: cost {cost} exceeds threshold {threshold}"
61
+ payer_missing: "Action denied: no payer identified for economic action"
62
+ payer_unauthorized: "Action denied: payer {payer} not in approved list"