veto-sdk 1.0.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 (146) hide show
  1. package/README.md +209 -0
  2. package/dist/benchmark/cli.d.ts +22 -0
  3. package/dist/benchmark/cli.d.ts.map +1 -0
  4. package/dist/benchmark/cli.js +238 -0
  5. package/dist/benchmark/cli.js.map +1 -0
  6. package/dist/benchmark/index.d.ts +10 -0
  7. package/dist/benchmark/index.d.ts.map +1 -0
  8. package/dist/benchmark/index.js +10 -0
  9. package/dist/benchmark/index.js.map +1 -0
  10. package/dist/benchmark/loader.d.ts +19 -0
  11. package/dist/benchmark/loader.d.ts.map +1 -0
  12. package/dist/benchmark/loader.js +321 -0
  13. package/dist/benchmark/loader.js.map +1 -0
  14. package/dist/benchmark/metrics.d.ts +35 -0
  15. package/dist/benchmark/metrics.d.ts.map +1 -0
  16. package/dist/benchmark/metrics.js +195 -0
  17. package/dist/benchmark/metrics.js.map +1 -0
  18. package/dist/benchmark/runner.d.ts +39 -0
  19. package/dist/benchmark/runner.d.ts.map +1 -0
  20. package/dist/benchmark/runner.js +279 -0
  21. package/dist/benchmark/runner.js.map +1 -0
  22. package/dist/benchmark/types.d.ts +188 -0
  23. package/dist/benchmark/types.d.ts.map +1 -0
  24. package/dist/benchmark/types.js +24 -0
  25. package/dist/benchmark/types.js.map +1 -0
  26. package/dist/cli/bin.d.ts +8 -0
  27. package/dist/cli/bin.d.ts.map +1 -0
  28. package/dist/cli/bin.js +120 -0
  29. package/dist/cli/bin.js.map +1 -0
  30. package/dist/cli/config.d.ts +126 -0
  31. package/dist/cli/config.d.ts.map +1 -0
  32. package/dist/cli/config.js +137 -0
  33. package/dist/cli/config.js.map +1 -0
  34. package/dist/cli/index.d.ts +9 -0
  35. package/dist/cli/index.d.ts.map +1 -0
  36. package/dist/cli/index.js +9 -0
  37. package/dist/cli/index.js.map +1 -0
  38. package/dist/cli/init.d.ts +64 -0
  39. package/dist/cli/init.d.ts.map +1 -0
  40. package/dist/cli/init.js +160 -0
  41. package/dist/cli/init.js.map +1 -0
  42. package/dist/cli/templates.d.ts +22 -0
  43. package/dist/cli/templates.d.ts.map +1 -0
  44. package/dist/cli/templates.js +132 -0
  45. package/dist/cli/templates.js.map +1 -0
  46. package/dist/core/history.d.ts +104 -0
  47. package/dist/core/history.d.ts.map +1 -0
  48. package/dist/core/history.js +148 -0
  49. package/dist/core/history.js.map +1 -0
  50. package/dist/core/index.d.ts +10 -0
  51. package/dist/core/index.d.ts.map +1 -0
  52. package/dist/core/index.js +10 -0
  53. package/dist/core/index.js.map +1 -0
  54. package/dist/core/interceptor.d.ts +96 -0
  55. package/dist/core/interceptor.d.ts.map +1 -0
  56. package/dist/core/interceptor.js +227 -0
  57. package/dist/core/interceptor.js.map +1 -0
  58. package/dist/core/validator.d.ts +107 -0
  59. package/dist/core/validator.d.ts.map +1 -0
  60. package/dist/core/validator.js +263 -0
  61. package/dist/core/validator.js.map +1 -0
  62. package/dist/core/veto.d.ts +265 -0
  63. package/dist/core/veto.d.ts.map +1 -0
  64. package/dist/core/veto.js +681 -0
  65. package/dist/core/veto.js.map +1 -0
  66. package/dist/index.d.ts +43 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +40 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/kernel/client.d.ts +82 -0
  71. package/dist/kernel/client.d.ts.map +1 -0
  72. package/dist/kernel/client.js +162 -0
  73. package/dist/kernel/client.js.map +1 -0
  74. package/dist/kernel/index.d.ts +9 -0
  75. package/dist/kernel/index.d.ts.map +1 -0
  76. package/dist/kernel/index.js +9 -0
  77. package/dist/kernel/index.js.map +1 -0
  78. package/dist/kernel/prompt.d.ts +27 -0
  79. package/dist/kernel/prompt.d.ts.map +1 -0
  80. package/dist/kernel/prompt.js +127 -0
  81. package/dist/kernel/prompt.js.map +1 -0
  82. package/dist/kernel/types.d.ts +85 -0
  83. package/dist/kernel/types.d.ts.map +1 -0
  84. package/dist/kernel/types.js +52 -0
  85. package/dist/kernel/types.js.map +1 -0
  86. package/dist/providers/adapters.d.ts +167 -0
  87. package/dist/providers/adapters.d.ts.map +1 -0
  88. package/dist/providers/adapters.js +244 -0
  89. package/dist/providers/adapters.js.map +1 -0
  90. package/dist/providers/index.d.ts +11 -0
  91. package/dist/providers/index.d.ts.map +1 -0
  92. package/dist/providers/index.js +11 -0
  93. package/dist/providers/index.js.map +1 -0
  94. package/dist/providers/types.d.ts +92 -0
  95. package/dist/providers/types.d.ts.map +1 -0
  96. package/dist/providers/types.js +10 -0
  97. package/dist/providers/types.js.map +1 -0
  98. package/dist/rules/api-client.d.ts +103 -0
  99. package/dist/rules/api-client.d.ts.map +1 -0
  100. package/dist/rules/api-client.js +241 -0
  101. package/dist/rules/api-client.js.map +1 -0
  102. package/dist/rules/index.d.ts +10 -0
  103. package/dist/rules/index.d.ts.map +1 -0
  104. package/dist/rules/index.js +10 -0
  105. package/dist/rules/index.js.map +1 -0
  106. package/dist/rules/loader.d.ts +116 -0
  107. package/dist/rules/loader.d.ts.map +1 -0
  108. package/dist/rules/loader.js +300 -0
  109. package/dist/rules/loader.js.map +1 -0
  110. package/dist/rules/rule-validator.d.ts +135 -0
  111. package/dist/rules/rule-validator.d.ts.map +1 -0
  112. package/dist/rules/rule-validator.js +239 -0
  113. package/dist/rules/rule-validator.js.map +1 -0
  114. package/dist/rules/types.d.ts +162 -0
  115. package/dist/rules/types.d.ts.map +1 -0
  116. package/dist/rules/types.js +16 -0
  117. package/dist/rules/types.js.map +1 -0
  118. package/dist/types/config.d.ts +171 -0
  119. package/dist/types/config.d.ts.map +1 -0
  120. package/dist/types/config.js +31 -0
  121. package/dist/types/config.js.map +1 -0
  122. package/dist/types/index.d.ts +8 -0
  123. package/dist/types/index.d.ts.map +1 -0
  124. package/dist/types/index.js +8 -0
  125. package/dist/types/index.js.map +1 -0
  126. package/dist/types/tool.d.ts +156 -0
  127. package/dist/types/tool.d.ts.map +1 -0
  128. package/dist/types/tool.js +27 -0
  129. package/dist/types/tool.js.map +1 -0
  130. package/dist/utils/glob.d.ts +21 -0
  131. package/dist/utils/glob.d.ts.map +1 -0
  132. package/dist/utils/glob.js +147 -0
  133. package/dist/utils/glob.js.map +1 -0
  134. package/dist/utils/id.d.ts +28 -0
  135. package/dist/utils/id.d.ts.map +1 -0
  136. package/dist/utils/id.js +43 -0
  137. package/dist/utils/id.js.map +1 -0
  138. package/dist/utils/index.d.ts +9 -0
  139. package/dist/utils/index.d.ts.map +1 -0
  140. package/dist/utils/index.js +9 -0
  141. package/dist/utils/index.js.map +1 -0
  142. package/dist/utils/logger.d.ts +97 -0
  143. package/dist/utils/logger.d.ts.map +1 -0
  144. package/dist/utils/logger.js +153 -0
  145. package/dist/utils/logger.js.map +1 -0
  146. package/package.json +90 -0
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Simple glob utility for matching files.
3
+ *
4
+ * @module utils/glob
5
+ */
6
+ import { readdirSync, statSync } from 'node:fs';
7
+ import { join, resolve } from 'node:path';
8
+ /**
9
+ * Simple glob pattern matching.
10
+ * Supports:
11
+ * - ** for recursive directory matching
12
+ * - * for wildcard matching in filenames
13
+ *
14
+ * @param pattern - Glob pattern (e.g., "data/**\/*.jsonl")
15
+ * @param cwd - Working directory (defaults to process.cwd())
16
+ * @returns Array of matching file paths
17
+ */
18
+ export async function glob(pattern, cwd = process.cwd()) {
19
+ const absolutePattern = resolve(cwd, pattern);
20
+ const parts = absolutePattern.split(/[\\/]/);
21
+ // Find the first part with wildcards
22
+ let baseIndex = 0;
23
+ for (let i = 0; i < parts.length; i++) {
24
+ if (parts[i].includes('*')) {
25
+ baseIndex = i;
26
+ break;
27
+ }
28
+ baseIndex = i + 1;
29
+ }
30
+ const basePath = parts.slice(0, baseIndex).join('/') || '/';
31
+ const patternParts = parts.slice(baseIndex);
32
+ if (patternParts.length === 0) {
33
+ // No wildcards, return the path if it exists
34
+ try {
35
+ statSync(absolutePattern);
36
+ return [absolutePattern];
37
+ }
38
+ catch {
39
+ return [];
40
+ }
41
+ }
42
+ return matchPattern(basePath, patternParts);
43
+ }
44
+ /**
45
+ * Recursively match pattern parts against directory structure.
46
+ */
47
+ function matchPattern(currentPath, patternParts) {
48
+ if (patternParts.length === 0) {
49
+ return [currentPath];
50
+ }
51
+ const [currentPattern, ...remainingParts] = patternParts;
52
+ const results = [];
53
+ try {
54
+ const stat = statSync(currentPath);
55
+ if (!stat.isDirectory()) {
56
+ return [];
57
+ }
58
+ }
59
+ catch {
60
+ return [];
61
+ }
62
+ const entries = readdirSync(currentPath);
63
+ if (currentPattern === '**') {
64
+ // Match current directory and all subdirectories
65
+ // First, try matching remaining pattern in current directory
66
+ results.push(...matchPattern(currentPath, remainingParts));
67
+ // Then recurse into subdirectories
68
+ for (const entry of entries) {
69
+ const entryPath = join(currentPath, entry);
70
+ try {
71
+ const stat = statSync(entryPath);
72
+ if (stat.isDirectory()) {
73
+ // Continue with ** pattern in subdirectory
74
+ results.push(...matchPattern(entryPath, patternParts));
75
+ }
76
+ }
77
+ catch {
78
+ // Skip inaccessible entries
79
+ }
80
+ }
81
+ }
82
+ else {
83
+ // Match current pattern
84
+ const regex = patternToRegex(currentPattern);
85
+ for (const entry of entries) {
86
+ if (regex.test(entry)) {
87
+ const entryPath = join(currentPath, entry);
88
+ if (remainingParts.length === 0) {
89
+ // This is the last pattern part
90
+ results.push(entryPath);
91
+ }
92
+ else {
93
+ // Continue matching remaining parts
94
+ try {
95
+ const stat = statSync(entryPath);
96
+ if (stat.isDirectory()) {
97
+ results.push(...matchPattern(entryPath, remainingParts));
98
+ }
99
+ }
100
+ catch {
101
+ // Skip inaccessible entries
102
+ }
103
+ }
104
+ }
105
+ }
106
+ }
107
+ return results;
108
+ }
109
+ /**
110
+ * Convert glob pattern to regex.
111
+ */
112
+ function patternToRegex(pattern) {
113
+ const escaped = pattern
114
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
115
+ .replace(/\*/g, '.*')
116
+ .replace(/\?/g, '.');
117
+ return new RegExp(`^${escaped}$`);
118
+ }
119
+ /**
120
+ * Synchronous version of glob.
121
+ */
122
+ export function globSync(pattern, cwd = process.cwd()) {
123
+ // The async version is actually sync, just return directly
124
+ const absolutePattern = resolve(cwd, pattern);
125
+ const parts = absolutePattern.split(/[\\/]/);
126
+ let baseIndex = 0;
127
+ for (let i = 0; i < parts.length; i++) {
128
+ if (parts[i].includes('*')) {
129
+ baseIndex = i;
130
+ break;
131
+ }
132
+ baseIndex = i + 1;
133
+ }
134
+ const basePath = parts.slice(0, baseIndex).join('/') || '/';
135
+ const patternParts = parts.slice(baseIndex);
136
+ if (patternParts.length === 0) {
137
+ try {
138
+ statSync(absolutePattern);
139
+ return [absolutePattern];
140
+ }
141
+ catch {
142
+ return [];
143
+ }
144
+ }
145
+ return matchPattern(basePath, patternParts);
146
+ }
147
+ //# sourceMappingURL=glob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/utils/glob.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * ID generation utilities for Veto.
3
+ *
4
+ * @module utils/id
5
+ */
6
+ /**
7
+ * Generate a random ID for tool calls.
8
+ *
9
+ * Creates a unique identifier suitable for tracking tool call instances.
10
+ * Uses crypto.randomUUID when available, falls back to a custom implementation.
11
+ *
12
+ * @param prefix - Optional prefix for the ID
13
+ * @returns A unique string ID
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const callId = generateId('call');
18
+ * // Returns something like: 'call_a1b2c3d4e5f6'
19
+ * ```
20
+ */
21
+ export declare function generateId(prefix?: string): string;
22
+ /**
23
+ * Generate a tool call ID in the format expected by providers.
24
+ *
25
+ * @returns A unique tool call ID
26
+ */
27
+ export declare function generateToolCallId(): string;
28
+ //# sourceMappingURL=id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,MAAM,SAAS,GAAG,MAAM,CAclD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * ID generation utilities for Veto.
3
+ *
4
+ * @module utils/id
5
+ */
6
+ /**
7
+ * Generate a random ID for tool calls.
8
+ *
9
+ * Creates a unique identifier suitable for tracking tool call instances.
10
+ * Uses crypto.randomUUID when available, falls back to a custom implementation.
11
+ *
12
+ * @param prefix - Optional prefix for the ID
13
+ * @returns A unique string ID
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const callId = generateId('call');
18
+ * // Returns something like: 'call_a1b2c3d4e5f6'
19
+ * ```
20
+ */
21
+ export function generateId(prefix = 'veto') {
22
+ // Use crypto.randomUUID if available (Node 19+, modern browsers)
23
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
24
+ const uuid = crypto.randomUUID();
25
+ return `${prefix}_${uuid.replace(/-/g, '').slice(0, 12)}`;
26
+ }
27
+ // Fallback for older environments
28
+ const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
29
+ let id = '';
30
+ for (let i = 0; i < 12; i++) {
31
+ id += chars.charAt(Math.floor(Math.random() * chars.length));
32
+ }
33
+ return `${prefix}_${id}`;
34
+ }
35
+ /**
36
+ * Generate a tool call ID in the format expected by providers.
37
+ *
38
+ * @returns A unique tool call ID
39
+ */
40
+ export function generateToolCallId() {
41
+ return generateId('call');
42
+ }
43
+ //# sourceMappingURL=id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,UAAU,CAAC,MAAM,GAAG,MAAM;IACxC,iEAAiE;IACjE,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,kCAAkC;IAClC,MAAM,KAAK,GAAG,sCAAsC,CAAC;IACrD,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,GAAG,MAAM,IAAI,EAAE,EAAE,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Utility exports for Veto.
3
+ *
4
+ * @module utils
5
+ */
6
+ export * from './logger.js';
7
+ export * from './id.js';
8
+ export * from './glob.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Utility exports for Veto.
3
+ *
4
+ * @module utils
5
+ */
6
+ export * from './logger.js';
7
+ export * from './id.js';
8
+ export * from './glob.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Logging infrastructure for Veto.
3
+ *
4
+ * Provides a flexible logging system with configurable log levels
5
+ * and support for custom logger implementations.
6
+ *
7
+ * @module utils/logger
8
+ */
9
+ import type { LogLevel } from '../types/config.js';
10
+ /**
11
+ * Log entry structure for structured logging.
12
+ */
13
+ export interface LogEntry {
14
+ /** Log level of this entry */
15
+ level: LogLevel;
16
+ /** Log message */
17
+ message: string;
18
+ /** Timestamp of the log entry */
19
+ timestamp: Date;
20
+ /** Additional context data */
21
+ context?: Record<string, unknown>;
22
+ /** Error object if applicable */
23
+ error?: Error;
24
+ }
25
+ /**
26
+ * Logger interface that can be implemented for custom logging.
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const customLogger: Logger = {
31
+ * debug: (msg, ctx) => myLoggingService.log('debug', msg, ctx),
32
+ * info: (msg, ctx) => myLoggingService.log('info', msg, ctx),
33
+ * warn: (msg, ctx) => myLoggingService.log('warn', msg, ctx),
34
+ * error: (msg, ctx, err) => myLoggingService.log('error', msg, { ...ctx, err }),
35
+ * };
36
+ * ```
37
+ */
38
+ export interface Logger {
39
+ debug(message: string, context?: Record<string, unknown>): void;
40
+ info(message: string, context?: Record<string, unknown>): void;
41
+ warn(message: string, context?: Record<string, unknown>): void;
42
+ error(message: string, context?: Record<string, unknown>, error?: Error): void;
43
+ }
44
+ /**
45
+ * Create a console-based logger with the specified log level.
46
+ *
47
+ * @param level - Minimum log level to emit
48
+ * @returns Logger instance
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * const logger = createLogger('info');
53
+ * logger.debug('This will not be logged');
54
+ * logger.info('This will be logged');
55
+ * ```
56
+ */
57
+ export declare function createLogger(level: LogLevel): Logger;
58
+ /**
59
+ * A no-op logger that discards all messages.
60
+ * Useful for testing or when logging should be completely disabled.
61
+ */
62
+ export declare const silentLogger: Logger;
63
+ /**
64
+ * Create a logger that stores entries in memory.
65
+ * Useful for testing or capturing logs for later analysis.
66
+ *
67
+ * @param level - Minimum log level to capture
68
+ * @returns Object containing the logger and captured entries
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * const { logger, entries } = createMemoryLogger('debug');
73
+ * logger.info('test message', { key: 'value' });
74
+ * console.log(entries); // [{ level: 'info', message: 'test message', ... }]
75
+ * ```
76
+ */
77
+ export declare function createMemoryLogger(level?: LogLevel): {
78
+ logger: Logger;
79
+ entries: LogEntry[];
80
+ clear: () => void;
81
+ };
82
+ /**
83
+ * Create a child logger with additional default context.
84
+ *
85
+ * @param parent - Parent logger to wrap
86
+ * @param defaultContext - Context to include in all log entries
87
+ * @returns Logger with merged context
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * const parentLogger = createLogger('info');
92
+ * const childLogger = createChildLogger(parentLogger, { component: 'validator' });
93
+ * childLogger.info('Validation complete'); // Includes { component: 'validator' }
94
+ * ```
95
+ */
96
+ export declare function createChildLogger(parent: Logger, defaultContext: Record<string, unknown>): Logger;
97
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Logging infrastructure for Veto.
3
+ *
4
+ * Provides a flexible logging system with configurable log levels
5
+ * and support for custom logger implementations.
6
+ *
7
+ * @module utils/logger
8
+ */
9
+ /**
10
+ * Numeric priority for log levels (lower = more verbose).
11
+ */
12
+ const LOG_LEVEL_PRIORITY = {
13
+ debug: 0,
14
+ info: 1,
15
+ warn: 2,
16
+ error: 3,
17
+ silent: 4,
18
+ };
19
+ /**
20
+ * Check if a log level should be emitted given the configured level.
21
+ */
22
+ function shouldLog(messageLevel, configuredLevel) {
23
+ return LOG_LEVEL_PRIORITY[messageLevel] >= LOG_LEVEL_PRIORITY[configuredLevel];
24
+ }
25
+ /**
26
+ * Format a log message with optional context.
27
+ */
28
+ function formatMessage(level, message, context) {
29
+ const timestamp = new Date().toISOString();
30
+ const levelStr = level.toUpperCase().padEnd(5);
31
+ const prefix = `[${timestamp}] [VETO] ${levelStr}`;
32
+ if (context && Object.keys(context).length > 0) {
33
+ const contextStr = JSON.stringify(context);
34
+ return `${prefix} ${message} ${contextStr}`;
35
+ }
36
+ return `${prefix} ${message}`;
37
+ }
38
+ /**
39
+ * Create a console-based logger with the specified log level.
40
+ *
41
+ * @param level - Minimum log level to emit
42
+ * @returns Logger instance
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const logger = createLogger('info');
47
+ * logger.debug('This will not be logged');
48
+ * logger.info('This will be logged');
49
+ * ```
50
+ */
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
+ };
77
+ }
78
+ /**
79
+ * A no-op logger that discards all messages.
80
+ * Useful for testing or when logging should be completely disabled.
81
+ */
82
+ export const silentLogger = {
83
+ debug: () => { },
84
+ info: () => { },
85
+ warn: () => { },
86
+ error: () => { },
87
+ };
88
+ /**
89
+ * Create a logger that stores entries in memory.
90
+ * Useful for testing or capturing logs for later analysis.
91
+ *
92
+ * @param level - Minimum log level to capture
93
+ * @returns Object containing the logger and captured entries
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const { logger, entries } = createMemoryLogger('debug');
98
+ * logger.info('test message', { key: 'value' });
99
+ * console.log(entries); // [{ level: 'info', message: 'test message', ... }]
100
+ * ```
101
+ */
102
+ export function createMemoryLogger(level = 'debug') {
103
+ const entries = [];
104
+ const addEntry = (messageLevel, message, context, error) => {
105
+ if (shouldLog(messageLevel, level)) {
106
+ entries.push({
107
+ level: messageLevel,
108
+ message,
109
+ timestamp: new Date(),
110
+ context,
111
+ error,
112
+ });
113
+ }
114
+ };
115
+ return {
116
+ entries,
117
+ clear: () => {
118
+ entries.length = 0;
119
+ },
120
+ logger: {
121
+ debug: (message, context) => addEntry('debug', message, context),
122
+ info: (message, context) => addEntry('info', message, context),
123
+ warn: (message, context) => addEntry('warn', message, context),
124
+ error: (message, context, error) => addEntry('error', message, context, error),
125
+ },
126
+ };
127
+ }
128
+ /**
129
+ * Create a child logger with additional default context.
130
+ *
131
+ * @param parent - Parent logger to wrap
132
+ * @param defaultContext - Context to include in all log entries
133
+ * @returns Logger with merged context
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * const parentLogger = createLogger('info');
138
+ * const childLogger = createChildLogger(parentLogger, { component: 'validator' });
139
+ * childLogger.info('Validation complete'); // Includes { component: 'validator' }
140
+ * ```
141
+ */
142
+ export function createChildLogger(parent, defaultContext) {
143
+ const mergeContext = (context) => {
144
+ return { ...defaultContext, ...context };
145
+ };
146
+ return {
147
+ debug: (message, context) => parent.debug(message, mergeContext(context)),
148
+ info: (message, context) => parent.info(message, mergeContext(context)),
149
+ warn: (message, context) => parent.warn(message, mergeContext(context)),
150
+ error: (message, context, error) => parent.error(message, mergeContext(context), error),
151
+ };
152
+ }
153
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "veto-sdk",
3
+ "version": "1.0.0",
4
+ "description": "Guardrails for AI agent tool calls - intercept, validate, and control",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "dev": "tsc --watch",
11
+ "test": "vitest run",
12
+ "test:watch": "vitest",
13
+ "test:coverage": "vitest run --coverage",
14
+ "typecheck": "tsc --noEmit",
15
+ "benchmark": "node dist/benchmark/cli.js",
16
+ "benchmark:dev": "tsx src/benchmark/cli.ts"
17
+ },
18
+ "keywords": [
19
+ "ai",
20
+ "agent",
21
+ "guardrail",
22
+ "tool-calls",
23
+ "safety",
24
+ "llm",
25
+ "openai",
26
+ "anthropic",
27
+ "gemini",
28
+ "claude",
29
+ "veto"
30
+ ],
31
+ "author": "Plaw, Inc.",
32
+ "license": "Apache-2.0",
33
+ "devDependencies": {
34
+ "@types/node": "^20.10.0",
35
+ "@vitest/coverage-v8": "^4.0.16",
36
+ "openai": "^4.77.0",
37
+ "tsx": "^4.7.0",
38
+ "typescript": "^5.7.0",
39
+ "vitest": "^4.0.16"
40
+ },
41
+ "peerDependencies": {
42
+ "openai": "^4.0.0",
43
+ "zod": "^3.22.0"
44
+ },
45
+ "peerDependenciesMeta": {
46
+ "openai": {
47
+ "optional": true
48
+ },
49
+ "zod": {
50
+ "optional": true
51
+ }
52
+ },
53
+ "engines": {
54
+ "node": ">=18.0.0"
55
+ },
56
+ "files": [
57
+ "dist",
58
+ "README.md"
59
+ ],
60
+ "exports": {
61
+ ".": {
62
+ "types": "./dist/index.d.ts",
63
+ "import": "./dist/index.js"
64
+ },
65
+ "./providers/*": {
66
+ "types": "./dist/providers/*.d.ts",
67
+ "import": "./dist/providers/*.js"
68
+ },
69
+ "./rules": {
70
+ "types": "./dist/rules/index.d.ts",
71
+ "import": "./dist/rules/index.js"
72
+ },
73
+ "./kernel": {
74
+ "types": "./dist/kernel/index.d.ts",
75
+ "import": "./dist/kernel/index.js"
76
+ }
77
+ },
78
+ "dependencies": {
79
+ "yaml": "^2.8.2"
80
+ },
81
+ "repository": {
82
+ "type": "git",
83
+ "url": "https://github.com/VulnZap/veto",
84
+ "directory": "packages/sdk"
85
+ },
86
+ "homepage": "https://veto.run",
87
+ "bugs": {
88
+ "url": "https://github.com/VulnZap/veto/issues"
89
+ }
90
+ }