@tyvm/knowhow 0.0.20 → 0.0.22

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 (72) hide show
  1. package/package.json +3 -1
  2. package/src/agents/base/base.ts +16 -77
  3. package/src/agents/tools/executeScript/README.md +78 -0
  4. package/src/agents/tools/executeScript/definition.ts +73 -0
  5. package/src/agents/tools/executeScript/examples/quick-test.ts +80 -0
  6. package/src/agents/tools/executeScript/examples/serialization-test.ts +309 -0
  7. package/src/agents/tools/executeScript/examples/test-runner.ts +204 -0
  8. package/src/agents/tools/executeScript/index.ts +74 -0
  9. package/src/agents/tools/index.ts +1 -0
  10. package/src/agents/tools/list.ts +2 -1
  11. package/src/cli.ts +2 -6
  12. package/src/clients/index.ts +23 -9
  13. package/src/services/Tools.ts +150 -9
  14. package/src/services/script-execution/SandboxContext.ts +278 -0
  15. package/src/services/script-execution/ScriptExecutor.ts +337 -0
  16. package/src/services/script-execution/ScriptPolicy.ts +236 -0
  17. package/src/services/script-execution/ScriptTracer.ts +249 -0
  18. package/src/services/script-execution/types.ts +134 -0
  19. package/ts_build/src/agents/base/base.js +2 -53
  20. package/ts_build/src/agents/base/base.js.map +1 -1
  21. package/ts_build/src/agents/tools/executeScript/definition.d.ts +2 -0
  22. package/ts_build/src/agents/tools/executeScript/definition.js +70 -0
  23. package/ts_build/src/agents/tools/executeScript/definition.js.map +1 -0
  24. package/ts_build/src/agents/tools/executeScript/examples/quick-test.d.ts +3 -0
  25. package/ts_build/src/agents/tools/executeScript/examples/quick-test.js +68 -0
  26. package/ts_build/src/agents/tools/executeScript/examples/quick-test.js.map +1 -0
  27. package/ts_build/src/agents/tools/executeScript/examples/serialization-test.d.ts +15 -0
  28. package/ts_build/src/agents/tools/executeScript/examples/serialization-test.js +267 -0
  29. package/ts_build/src/agents/tools/executeScript/examples/serialization-test.js.map +1 -0
  30. package/ts_build/src/agents/tools/executeScript/examples/simple-example.d.ts +20 -0
  31. package/ts_build/src/agents/tools/executeScript/examples/simple-example.js +35 -0
  32. package/ts_build/src/agents/tools/executeScript/examples/simple-example.js.map +1 -0
  33. package/ts_build/src/agents/tools/executeScript/examples/test-runner.d.ts +4 -0
  34. package/ts_build/src/agents/tools/executeScript/examples/test-runner.js +202 -0
  35. package/ts_build/src/agents/tools/executeScript/examples/test-runner.js.map +1 -0
  36. package/ts_build/src/agents/tools/executeScript/handler.d.ts +27 -0
  37. package/ts_build/src/agents/tools/executeScript/handler.js +64 -0
  38. package/ts_build/src/agents/tools/executeScript/handler.js.map +1 -0
  39. package/ts_build/src/agents/tools/executeScript/index.d.ts +27 -0
  40. package/ts_build/src/agents/tools/executeScript/index.js +64 -0
  41. package/ts_build/src/agents/tools/executeScript/index.js.map +1 -0
  42. package/ts_build/src/agents/tools/executeScript.d.ts +29 -0
  43. package/ts_build/src/agents/tools/executeScript.js +124 -0
  44. package/ts_build/src/agents/tools/executeScript.js.map +1 -0
  45. package/ts_build/src/agents/tools/index.d.ts +1 -0
  46. package/ts_build/src/agents/tools/index.js +1 -0
  47. package/ts_build/src/agents/tools/index.js.map +1 -1
  48. package/ts_build/src/agents/tools/list.js +2 -0
  49. package/ts_build/src/agents/tools/list.js.map +1 -1
  50. package/ts_build/src/cli.js +2 -6
  51. package/ts_build/src/cli.js.map +1 -1
  52. package/ts_build/src/clients/index.d.ts +9 -2
  53. package/ts_build/src/clients/index.js +17 -4
  54. package/ts_build/src/clients/index.js.map +1 -1
  55. package/ts_build/src/services/Tools.d.ts +11 -1
  56. package/ts_build/src/services/Tools.js +94 -3
  57. package/ts_build/src/services/Tools.js.map +1 -1
  58. package/ts_build/src/services/script-execution/SandboxContext.d.ts +34 -0
  59. package/ts_build/src/services/script-execution/SandboxContext.js +188 -0
  60. package/ts_build/src/services/script-execution/SandboxContext.js.map +1 -0
  61. package/ts_build/src/services/script-execution/ScriptExecutor.d.ts +17 -0
  62. package/ts_build/src/services/script-execution/ScriptExecutor.js +207 -0
  63. package/ts_build/src/services/script-execution/ScriptExecutor.js.map +1 -0
  64. package/ts_build/src/services/script-execution/ScriptPolicy.d.ts +27 -0
  65. package/ts_build/src/services/script-execution/ScriptPolicy.js +150 -0
  66. package/ts_build/src/services/script-execution/ScriptPolicy.js.map +1 -0
  67. package/ts_build/src/services/script-execution/ScriptTracer.d.ts +19 -0
  68. package/ts_build/src/services/script-execution/ScriptTracer.js +186 -0
  69. package/ts_build/src/services/script-execution/ScriptTracer.js.map +1 -0
  70. package/ts_build/src/services/script-execution/types.d.ts +108 -0
  71. package/ts_build/src/services/script-execution/types.js +3 -0
  72. package/ts_build/src/services/script-execution/types.js.map +1 -0
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ScriptExecutor = void 0;
7
+ const isolated_vm_1 = __importDefault(require("isolated-vm"));
8
+ const SandboxContext_1 = require("./SandboxContext");
9
+ const ScriptTracer_1 = require("./ScriptTracer");
10
+ const ScriptPolicy_1 = require("./ScriptPolicy");
11
+ class ScriptExecutor {
12
+ toolsService;
13
+ clients;
14
+ defaultQuotas = {
15
+ maxToolCalls: 50,
16
+ maxTokens: 10000,
17
+ maxExecutionTimeMs: 30000,
18
+ maxCostUsd: 1.0,
19
+ maxMemoryMb: 100,
20
+ };
21
+ defaultPolicy = {
22
+ allowlistedTools: [],
23
+ denylistedTools: [
24
+ "execCommand",
25
+ "writeFileChunk",
26
+ "patchFile",
27
+ ],
28
+ maxScriptLength: 50000,
29
+ allowNetworkAccess: false,
30
+ allowFileSystemAccess: false,
31
+ };
32
+ constructor(toolsService = null, clients = null) {
33
+ this.toolsService = toolsService;
34
+ this.clients = clients;
35
+ }
36
+ async execute(request) {
37
+ const tracer = new ScriptTracer_1.ScriptTracer();
38
+ const quotas = { ...this.defaultQuotas, ...request.quotas };
39
+ const policy = { ...this.defaultPolicy, ...request.policy };
40
+ const policyEnforcer = new ScriptPolicy_1.ScriptPolicyEnforcer(quotas, policy);
41
+ tracer.emitEvent("execution_start", {
42
+ scriptLength: request.script.length,
43
+ quotas,
44
+ policy: {
45
+ ...policy,
46
+ allowlistedTools: `${policy.allowlistedTools.length} tools`,
47
+ denylistedTools: `${policy.denylistedTools.length} tools`,
48
+ },
49
+ });
50
+ try {
51
+ const validation = policyEnforcer.validateScript(request.script);
52
+ if (!validation.valid) {
53
+ tracer.emitEvent("script_validation_failed", {
54
+ issues: validation.issues,
55
+ });
56
+ return {
57
+ success: false,
58
+ error: `Script validation failed: ${validation.issues.join(", ")}`,
59
+ result: null,
60
+ trace: tracer.getTrace(),
61
+ artifacts: [],
62
+ consoleOutput: [],
63
+ };
64
+ }
65
+ tracer.emitEvent("script_validation_passed", {});
66
+ const context = new SandboxContext_1.SandboxContext(this.toolsService, this.clients, tracer, policyEnforcer);
67
+ const startTime = Date.now();
68
+ const timeoutMs = quotas.maxExecutionTimeMs;
69
+ const result = await this.executeWithTimeout(request.script, context, timeoutMs, tracer, policyEnforcer);
70
+ const executionTime = Date.now() - startTime;
71
+ tracer.emitEvent("execution_complete", {
72
+ executionTimeMs: executionTime,
73
+ finalUsage: policyEnforcer.getUsage(),
74
+ });
75
+ return {
76
+ success: true,
77
+ error: null,
78
+ result,
79
+ trace: tracer.getTrace(),
80
+ artifacts: context.getArtifacts(),
81
+ consoleOutput: context.getConsoleOutput(),
82
+ };
83
+ }
84
+ catch (error) {
85
+ const errorMessage = error instanceof Error ? error.message : String(error);
86
+ tracer.emitEvent("execution_error", {
87
+ error: errorMessage,
88
+ finalUsage: policyEnforcer.getUsage(),
89
+ });
90
+ return {
91
+ success: false,
92
+ error: errorMessage,
93
+ result: null,
94
+ trace: tracer.getTrace(),
95
+ artifacts: [],
96
+ consoleOutput: [],
97
+ };
98
+ }
99
+ }
100
+ async executeWithTimeout(script, context, timeoutMs, tracer, policyEnforcer) {
101
+ return new Promise((resolve, reject) => {
102
+ const timeoutId = setTimeout(() => {
103
+ tracer.emitEvent("execution_timeout", { timeoutMs });
104
+ reject(new Error(`Script execution timed out after ${timeoutMs}ms`));
105
+ }, timeoutMs);
106
+ this.executeScriptSecure(script, context, tracer, policyEnforcer)
107
+ .then((result) => {
108
+ clearTimeout(timeoutId);
109
+ resolve(result);
110
+ })
111
+ .catch((error) => {
112
+ clearTimeout(timeoutId);
113
+ reject(error);
114
+ });
115
+ });
116
+ }
117
+ async executeScriptSecure(script, context, tracer, policyEnforcer) {
118
+ tracer.emitEvent("secure_execution_start", {
119
+ note: "Using isolated-vm for secure execution",
120
+ });
121
+ const isolate = new isolated_vm_1.default.Isolate({
122
+ memoryLimit: policyEnforcer.getQuotas().maxMemoryMb,
123
+ });
124
+ try {
125
+ const vmContext = await isolate.createContext();
126
+ tracer.emitEvent("vm_context_created", {});
127
+ await this.setupIsolatedContext(vmContext, context, tracer);
128
+ tracer.emitEvent("script_compilation_start", {});
129
+ const wrappedScript = `
130
+ (async function() {
131
+ "use strict";
132
+ ${script}
133
+ })()
134
+ `;
135
+ const compiledScript = await isolate.compileScript(wrappedScript);
136
+ tracer.emitEvent("script_compilation_complete", {});
137
+ tracer.emitEvent("script_execution_start", {});
138
+ const result = await compiledScript.run(vmContext, {
139
+ timeout: policyEnforcer.getQuotas().maxExecutionTimeMs,
140
+ promise: true,
141
+ });
142
+ tracer.emitEvent("script_execution_complete", {
143
+ resultType: typeof result,
144
+ });
145
+ return result;
146
+ }
147
+ finally {
148
+ isolate.dispose();
149
+ tracer.emitEvent("vm_cleanup_complete", {});
150
+ }
151
+ }
152
+ async setupIsolatedContext(vmContext, sandboxContext, tracer) {
153
+ tracer.emitEvent("context_setup_start", {});
154
+ const globalRef = vmContext.global;
155
+ await globalRef.set("globalThis", globalRef.derefInto());
156
+ const exposeAsync = async (name, fn) => {
157
+ await globalRef.set(`__host_${name}`, new isolated_vm_1.default.Reference(async (...args) => {
158
+ const result = await fn(...args);
159
+ return new isolated_vm_1.default.ExternalCopy(result).copyInto();
160
+ }));
161
+ await vmContext.eval(`
162
+ globalThis.${name} = (...a) =>
163
+ __host_${name}.apply(undefined, a,
164
+ { arguments: { copy: true }, result: { promise: true, copy: true } });
165
+ `);
166
+ };
167
+ const exposeSync = async (name, fn) => {
168
+ await globalRef.set(`__host_${name}`, new isolated_vm_1.default.Reference((...args) => {
169
+ const result = fn(...args);
170
+ return new isolated_vm_1.default.ExternalCopy(result).copyInto();
171
+ }));
172
+ await vmContext.eval(`
173
+ globalThis.${name} = (...a) =>
174
+ __host_${name}.apply(undefined, a,
175
+ { arguments: { copy: true }, result: { copy: true } });
176
+ `);
177
+ };
178
+ await exposeAsync("callTool", (tool, params) => sandboxContext.callTool(tool, params));
179
+ await exposeAsync("llm", (messages, options) => sandboxContext.llm(messages, options || {}));
180
+ await exposeAsync("sleep", (ms) => sandboxContext.sleep(ms));
181
+ await exposeSync("createArtifact", (name, content, type) => sandboxContext.createArtifact(name, content, type));
182
+ await exposeSync("getQuotaUsage", () => sandboxContext.getQuotaUsage());
183
+ for (const level of ["log", "info", "warn", "error"]) {
184
+ await globalRef.set(`__console_${level}`, new isolated_vm_1.default.Reference((...args) => sandboxContext.console[level](...args)));
185
+ }
186
+ await vmContext.eval(`
187
+ globalThis.console = {};
188
+ for (const lvl of ["log", "info", "warn", "error"]) {
189
+ globalThis.console[lvl] = (...a) =>
190
+ globalThis["__console_" + lvl].apply(undefined, a,
191
+ { arguments: { copy: true } });
192
+ }
193
+ `);
194
+ tracer.emitEvent("context_setup_complete", {});
195
+ }
196
+ async executeScriptFallback(script, context, tracer, policyEnforcer) {
197
+ throw new Error("Isolated-vm execution failed, no fallback available");
198
+ }
199
+ getDefaultQuotas() {
200
+ return { ...this.defaultQuotas };
201
+ }
202
+ getDefaultPolicy() {
203
+ return { ...this.defaultPolicy };
204
+ }
205
+ }
206
+ exports.ScriptExecutor = ScriptExecutor;
207
+ //# sourceMappingURL=ScriptExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScriptExecutor.js","sourceRoot":"","sources":["../../../../src/services/script-execution/ScriptExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { ResourceQuotas, SecurityPolicy, QuotaUsage, PolicyViolation } from './types';
2
+ export declare class ScriptPolicyEnforcer {
3
+ private quotas;
4
+ private policy;
5
+ private usage;
6
+ private violations;
7
+ constructor(quotas: ResourceQuotas, policy: SecurityPolicy);
8
+ checkToolCall(toolName: string): boolean;
9
+ recordToolCall(): void;
10
+ checkTokenUsage(tokens: number): boolean;
11
+ recordTokenUsage(tokens: number): void;
12
+ checkExecutionTime(currentTimeMs: number): boolean;
13
+ checkCost(additionalCost: number): boolean;
14
+ recordCost(cost: number): void;
15
+ getUsage(): QuotaUsage;
16
+ getQuotas(): ResourceQuotas;
17
+ getViolations(): PolicyViolation[];
18
+ hasViolations(): boolean;
19
+ getLastViolation(): PolicyViolation | undefined;
20
+ resetUsage(): void;
21
+ resetViolations(): void;
22
+ validateScript(scriptContent: string): {
23
+ valid: boolean;
24
+ issues: string[];
25
+ };
26
+ private recordViolation;
27
+ }
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ScriptPolicyEnforcer = void 0;
4
+ class ScriptPolicyEnforcer {
5
+ quotas;
6
+ policy;
7
+ usage;
8
+ violations = [];
9
+ constructor(quotas, policy) {
10
+ this.quotas = quotas;
11
+ this.policy = policy;
12
+ this.usage = {
13
+ toolCalls: 0,
14
+ tokens: 0,
15
+ executionTimeMs: 0,
16
+ costUsd: 0
17
+ };
18
+ }
19
+ checkToolCall(toolName) {
20
+ if (this.policy.denylistedTools && this.policy.denylistedTools.includes(toolName)) {
21
+ this.recordViolation('tool_denied', `Tool '${toolName}' is in denylist`);
22
+ return false;
23
+ }
24
+ if (this.policy.allowlistedTools && this.policy.allowlistedTools.length > 0 &&
25
+ !this.policy.allowlistedTools.includes(toolName)) {
26
+ this.recordViolation('tool_not_allowed', `Tool '${toolName}' is not in allowlist`);
27
+ return false;
28
+ }
29
+ if (this.usage.toolCalls >= this.quotas.maxToolCalls) {
30
+ this.recordViolation('quota_exceeded', 'Maximum tool calls exceeded');
31
+ return false;
32
+ }
33
+ return true;
34
+ }
35
+ recordToolCall() {
36
+ this.usage.toolCalls++;
37
+ }
38
+ checkTokenUsage(tokens) {
39
+ if (this.usage.tokens + tokens > this.quotas.maxTokens) {
40
+ this.recordViolation('quota_exceeded', 'Maximum tokens would be exceeded');
41
+ return false;
42
+ }
43
+ return true;
44
+ }
45
+ recordTokenUsage(tokens) {
46
+ this.usage.tokens += tokens;
47
+ }
48
+ checkExecutionTime(currentTimeMs) {
49
+ if (currentTimeMs > this.quotas.maxExecutionTimeMs) {
50
+ this.recordViolation('quota_exceeded', 'Maximum execution time exceeded');
51
+ return false;
52
+ }
53
+ this.usage.executionTimeMs = currentTimeMs;
54
+ return true;
55
+ }
56
+ checkCost(additionalCost) {
57
+ if (this.usage.costUsd + additionalCost > this.quotas.maxCostUsd) {
58
+ this.recordViolation('quota_exceeded', 'Maximum cost would be exceeded');
59
+ return false;
60
+ }
61
+ return true;
62
+ }
63
+ recordCost(cost) {
64
+ this.usage.costUsd += cost;
65
+ }
66
+ getUsage() {
67
+ return { ...this.usage };
68
+ }
69
+ getQuotas() {
70
+ return { ...this.quotas };
71
+ }
72
+ getViolations() {
73
+ return [...this.violations];
74
+ }
75
+ hasViolations() {
76
+ return this.violations.length > 0;
77
+ }
78
+ getLastViolation() {
79
+ return this.violations[this.violations.length - 1];
80
+ }
81
+ resetUsage() {
82
+ this.usage = {
83
+ toolCalls: 0,
84
+ tokens: 0,
85
+ executionTimeMs: 0,
86
+ costUsd: 0
87
+ };
88
+ }
89
+ resetViolations() {
90
+ this.violations = [];
91
+ }
92
+ validateScript(scriptContent) {
93
+ const issues = [];
94
+ const dangerousPatterns = [
95
+ /require\s*\(/gi,
96
+ /import\s+.*\s+from/gi,
97
+ /process\./gi,
98
+ /global\./gi,
99
+ /eval\s*\(/gi,
100
+ /Function\s*\(/gi,
101
+ /setTimeout/gi,
102
+ /setInterval/gi,
103
+ /fetch\s*\(/gi,
104
+ /XMLHttpRequest/gi,
105
+ /WebSocket/gi,
106
+ /location\./gi,
107
+ /document\./gi,
108
+ /window\./gi,
109
+ ];
110
+ for (const pattern of dangerousPatterns) {
111
+ if (pattern.test(scriptContent)) {
112
+ issues.push(`Potentially dangerous pattern detected: ${pattern.source}`);
113
+ }
114
+ }
115
+ if (scriptContent.length > this.policy.maxScriptLength) {
116
+ issues.push(`Script too long: ${scriptContent.length} > ${this.policy.maxScriptLength}`);
117
+ }
118
+ const complexityIndicators = [
119
+ /for\s*\(/gi,
120
+ /while\s*\(/gi,
121
+ /function\s+\w+/gi,
122
+ /=>\s*{/gi,
123
+ /if\s*\(/gi,
124
+ ];
125
+ let complexityScore = 0;
126
+ for (const indicator of complexityIndicators) {
127
+ const matches = scriptContent.match(indicator);
128
+ complexityScore += matches ? matches.length : 0;
129
+ }
130
+ if (complexityScore > 50) {
131
+ issues.push(`Script complexity too high: ${complexityScore} constructs detected`);
132
+ }
133
+ return {
134
+ valid: issues.length === 0,
135
+ issues
136
+ };
137
+ }
138
+ recordViolation(type, message) {
139
+ const violation = {
140
+ id: `violation-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
141
+ type,
142
+ message,
143
+ timestamp: Date.now(),
144
+ usage: { ...this.usage }
145
+ };
146
+ this.violations.push(violation);
147
+ }
148
+ }
149
+ exports.ScriptPolicyEnforcer = ScriptPolicyEnforcer;
150
+ //# sourceMappingURL=ScriptPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScriptPolicy.js","sourceRoot":"","sources":["../../../../src/services/script-execution/ScriptPolicy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { TraceEvent, TraceMetrics, ExecutionTrace, QuotaUsage } from "./types";
2
+ export declare class ScriptTracer {
3
+ private events;
4
+ private metrics;
5
+ private startTime;
6
+ constructor();
7
+ emitEvent(type: string, data: any): void;
8
+ recordCost(costUsd: number): void;
9
+ getCurrentQuota(): QuotaUsage;
10
+ getEvents(): TraceEvent[];
11
+ getMetrics(): TraceMetrics;
12
+ getTrace(): ExecutionTrace;
13
+ reset(): void;
14
+ private updateMetrics;
15
+ private getLastError;
16
+ private sanitizeEventData;
17
+ private isSensitiveKey;
18
+ private sanitizeParameters;
19
+ }
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ScriptTracer = void 0;
4
+ class ScriptTracer {
5
+ events = [];
6
+ metrics;
7
+ startTime;
8
+ constructor() {
9
+ this.startTime = Date.now();
10
+ this.metrics = {
11
+ executionTimeMs: 0,
12
+ toolCallCount: 0,
13
+ llmCallCount: 0,
14
+ tokenUsage: {
15
+ prompt: 0,
16
+ completion: 0,
17
+ total: 0,
18
+ },
19
+ memoryUsage: {
20
+ heapUsed: 0,
21
+ heapTotal: 0,
22
+ },
23
+ costUsd: 0,
24
+ };
25
+ }
26
+ emitEvent(type, data) {
27
+ const event = {
28
+ id: `evt-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
29
+ type,
30
+ timestamp: Date.now(),
31
+ data: this.sanitizeEventData(data),
32
+ };
33
+ this.events.push(event);
34
+ this.updateMetrics(event);
35
+ }
36
+ recordCost(costUsd) {
37
+ this.metrics.costUsd += costUsd;
38
+ this.emitEvent("cost_recorded", {
39
+ costUsd,
40
+ totalCost: this.metrics.costUsd,
41
+ });
42
+ }
43
+ getCurrentQuota() {
44
+ return {
45
+ toolCalls: this.metrics.toolCallCount,
46
+ tokens: this.metrics.tokenUsage.total,
47
+ executionTimeMs: Date.now() - this.startTime,
48
+ costUsd: this.metrics.costUsd,
49
+ };
50
+ }
51
+ getEvents() {
52
+ return [...this.events];
53
+ }
54
+ getMetrics() {
55
+ return {
56
+ ...this.metrics,
57
+ executionTimeMs: Date.now() - this.startTime,
58
+ };
59
+ }
60
+ getTrace() {
61
+ return {
62
+ id: `trace-${Date.now()}`,
63
+ startTime: this.startTime,
64
+ endTime: Date.now(),
65
+ events: this.getEvents(),
66
+ metrics: this.getMetrics(),
67
+ success: !this.events.some((e) => e.type.includes("error")),
68
+ error: this.getLastError(),
69
+ };
70
+ }
71
+ reset() {
72
+ this.events = [];
73
+ this.startTime = Date.now();
74
+ this.metrics = {
75
+ executionTimeMs: 0,
76
+ toolCallCount: 0,
77
+ llmCallCount: 0,
78
+ tokenUsage: {
79
+ prompt: 0,
80
+ completion: 0,
81
+ total: 0,
82
+ },
83
+ memoryUsage: {
84
+ heapUsed: 0,
85
+ heapTotal: 0,
86
+ },
87
+ costUsd: 0,
88
+ };
89
+ }
90
+ updateMetrics(event) {
91
+ switch (event.type) {
92
+ case "tool_call_start":
93
+ this.metrics.toolCallCount++;
94
+ break;
95
+ case "llm_call_start":
96
+ this.metrics.llmCallCount++;
97
+ break;
98
+ case "llm_call_success":
99
+ if (event.data && event.data.usage) {
100
+ const usage = event.data.usage;
101
+ this.metrics.tokenUsage.prompt += usage.prompt_tokens || 0;
102
+ this.metrics.tokenUsage.completion += usage.completion_tokens || 0;
103
+ this.metrics.tokenUsage.total += usage.total_tokens || 0;
104
+ }
105
+ break;
106
+ }
107
+ if (typeof process !== "undefined" && process.memoryUsage) {
108
+ const memUsage = process.memoryUsage();
109
+ this.metrics.memoryUsage.heapUsed = memUsage.heapUsed;
110
+ this.metrics.memoryUsage.heapTotal = memUsage.heapTotal;
111
+ }
112
+ }
113
+ getLastError() {
114
+ const errorEvents = this.events
115
+ .filter((e) => e.type.includes("error"))
116
+ .reverse();
117
+ if (errorEvents.length > 0) {
118
+ const lastError = errorEvents[0];
119
+ return (lastError.data?.error || lastError.data?.message || "Unknown error");
120
+ }
121
+ return undefined;
122
+ }
123
+ sanitizeEventData(data) {
124
+ if (data === null || data === undefined) {
125
+ return data;
126
+ }
127
+ if (typeof data === "string") {
128
+ return data.length > 1000
129
+ ? data.substring(0, 1000) + "...[TRUNCATED]"
130
+ : data;
131
+ }
132
+ if (Array.isArray(data)) {
133
+ return data.map((item) => this.sanitizeEventData(item));
134
+ }
135
+ if (typeof data === "object") {
136
+ const sanitized = {};
137
+ for (const [key, value] of Object.entries(data)) {
138
+ if (this.isSensitiveKey(key)) {
139
+ sanitized[key] = "[REDACTED]";
140
+ }
141
+ else if (key === "parameters" && typeof value === "object") {
142
+ sanitized[key] = this.sanitizeParameters(value);
143
+ }
144
+ else {
145
+ sanitized[key] = this.sanitizeEventData(value);
146
+ }
147
+ }
148
+ return sanitized;
149
+ }
150
+ return data;
151
+ }
152
+ isSensitiveKey(key) {
153
+ const lowerKey = key.toLowerCase();
154
+ const sensitivePatterns = [
155
+ "password",
156
+ "secret",
157
+ "token",
158
+ "key",
159
+ "auth",
160
+ "credential",
161
+ "private",
162
+ "confidential",
163
+ ];
164
+ return sensitivePatterns.some((pattern) => lowerKey.includes(pattern));
165
+ }
166
+ sanitizeParameters(params) {
167
+ if (!params || typeof params !== "object") {
168
+ return params;
169
+ }
170
+ const sanitized = {};
171
+ for (const [key, value] of Object.entries(params)) {
172
+ if (this.isSensitiveKey(key)) {
173
+ sanitized[key] = "[REDACTED]";
174
+ }
175
+ else if (typeof value === "string" && value.length > 500) {
176
+ sanitized[key] = value.substring(0, 500) + "...[TRUNCATED]";
177
+ }
178
+ else {
179
+ sanitized[key] = this.sanitizeEventData(value);
180
+ }
181
+ }
182
+ return sanitized;
183
+ }
184
+ }
185
+ exports.ScriptTracer = ScriptTracer;
186
+ //# sourceMappingURL=ScriptTracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScriptTracer.js","sourceRoot":"","sources":["../../../../src/services/script-execution/ScriptTracer.ts"],"names":[],"mappings":"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"}