@tyvm/knowhow 0.0.21 โ 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.
- package/package.json +3 -1
- package/src/agents/tools/executeScript/README.md +78 -0
- package/src/agents/tools/executeScript/definition.ts +73 -0
- package/src/agents/tools/executeScript/examples/quick-test.ts +80 -0
- package/src/agents/tools/executeScript/examples/serialization-test.ts +309 -0
- package/src/agents/tools/executeScript/examples/test-runner.ts +204 -0
- package/src/agents/tools/executeScript/index.ts +74 -0
- package/src/agents/tools/index.ts +1 -0
- package/src/agents/tools/list.ts +2 -1
- package/src/cli.ts +2 -6
- package/src/clients/index.ts +23 -9
- package/src/services/Tools.ts +19 -3
- package/src/services/script-execution/SandboxContext.ts +278 -0
- package/src/services/script-execution/ScriptExecutor.ts +337 -0
- package/src/services/script-execution/ScriptPolicy.ts +236 -0
- package/src/services/script-execution/ScriptTracer.ts +249 -0
- package/src/services/script-execution/types.ts +134 -0
- package/ts_build/src/agents/tools/executeScript/definition.d.ts +2 -0
- package/ts_build/src/agents/tools/executeScript/definition.js +70 -0
- package/ts_build/src/agents/tools/executeScript/definition.js.map +1 -0
- package/ts_build/src/agents/tools/executeScript/examples/quick-test.d.ts +3 -0
- package/ts_build/src/agents/tools/executeScript/examples/quick-test.js +68 -0
- package/ts_build/src/agents/tools/executeScript/examples/quick-test.js.map +1 -0
- package/ts_build/src/agents/tools/executeScript/examples/serialization-test.d.ts +15 -0
- package/ts_build/src/agents/tools/executeScript/examples/serialization-test.js +267 -0
- package/ts_build/src/agents/tools/executeScript/examples/serialization-test.js.map +1 -0
- package/ts_build/src/agents/tools/executeScript/examples/simple-example.d.ts +20 -0
- package/ts_build/src/agents/tools/executeScript/examples/simple-example.js +35 -0
- package/ts_build/src/agents/tools/executeScript/examples/simple-example.js.map +1 -0
- package/ts_build/src/agents/tools/executeScript/examples/test-runner.d.ts +4 -0
- package/ts_build/src/agents/tools/executeScript/examples/test-runner.js +202 -0
- package/ts_build/src/agents/tools/executeScript/examples/test-runner.js.map +1 -0
- package/ts_build/src/agents/tools/executeScript/handler.d.ts +27 -0
- package/ts_build/src/agents/tools/executeScript/handler.js +64 -0
- package/ts_build/src/agents/tools/executeScript/handler.js.map +1 -0
- package/ts_build/src/agents/tools/executeScript/index.d.ts +27 -0
- package/ts_build/src/agents/tools/executeScript/index.js +64 -0
- package/ts_build/src/agents/tools/executeScript/index.js.map +1 -0
- package/ts_build/src/agents/tools/executeScript.d.ts +29 -0
- package/ts_build/src/agents/tools/executeScript.js +124 -0
- package/ts_build/src/agents/tools/executeScript.js.map +1 -0
- package/ts_build/src/agents/tools/index.d.ts +1 -0
- package/ts_build/src/agents/tools/index.js +1 -0
- package/ts_build/src/agents/tools/index.js.map +1 -1
- package/ts_build/src/agents/tools/list.js +2 -0
- package/ts_build/src/agents/tools/list.js.map +1 -1
- package/ts_build/src/cli.js +2 -6
- package/ts_build/src/cli.js.map +1 -1
- package/ts_build/src/clients/index.d.ts +9 -2
- package/ts_build/src/clients/index.js +17 -4
- package/ts_build/src/clients/index.js.map +1 -1
- package/ts_build/src/services/Tools.d.ts +3 -0
- package/ts_build/src/services/Tools.js +10 -2
- package/ts_build/src/services/Tools.js.map +1 -1
- package/ts_build/src/services/script-execution/SandboxContext.d.ts +34 -0
- package/ts_build/src/services/script-execution/SandboxContext.js +188 -0
- package/ts_build/src/services/script-execution/SandboxContext.js.map +1 -0
- package/ts_build/src/services/script-execution/ScriptExecutor.d.ts +17 -0
- package/ts_build/src/services/script-execution/ScriptExecutor.js +207 -0
- package/ts_build/src/services/script-execution/ScriptExecutor.js.map +1 -0
- package/ts_build/src/services/script-execution/ScriptPolicy.d.ts +27 -0
- package/ts_build/src/services/script-execution/ScriptPolicy.js +150 -0
- package/ts_build/src/services/script-execution/ScriptPolicy.js.map +1 -0
- package/ts_build/src/services/script-execution/ScriptTracer.d.ts +19 -0
- package/ts_build/src/services/script-execution/ScriptTracer.js +186 -0
- package/ts_build/src/services/script-execution/ScriptTracer.js.map +1 -0
- package/ts_build/src/services/script-execution/types.d.ts +108 -0
- package/ts_build/src/services/script-execution/types.js +3 -0
- package/ts_build/src/services/script-execution/types.js.map +1 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { TraceEvent, TraceMetrics, ExecutionTrace, QuotaUsage } from "./types";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Handles tracing and monitoring of script execution
|
|
5
|
+
*/
|
|
6
|
+
export class ScriptTracer {
|
|
7
|
+
private events: TraceEvent[] = [];
|
|
8
|
+
private metrics: TraceMetrics;
|
|
9
|
+
private startTime: number;
|
|
10
|
+
|
|
11
|
+
constructor() {
|
|
12
|
+
this.startTime = Date.now();
|
|
13
|
+
this.metrics = {
|
|
14
|
+
executionTimeMs: 0,
|
|
15
|
+
toolCallCount: 0,
|
|
16
|
+
llmCallCount: 0,
|
|
17
|
+
tokenUsage: {
|
|
18
|
+
prompt: 0,
|
|
19
|
+
completion: 0,
|
|
20
|
+
total: 0,
|
|
21
|
+
},
|
|
22
|
+
memoryUsage: {
|
|
23
|
+
heapUsed: 0,
|
|
24
|
+
heapTotal: 0,
|
|
25
|
+
},
|
|
26
|
+
costUsd: 0,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Emit a trace event
|
|
32
|
+
*/
|
|
33
|
+
emitEvent(type: string, data: any): void {
|
|
34
|
+
const event: TraceEvent = {
|
|
35
|
+
id: `evt-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
36
|
+
type,
|
|
37
|
+
timestamp: Date.now(),
|
|
38
|
+
data: this.sanitizeEventData(data),
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
this.events.push(event);
|
|
42
|
+
this.updateMetrics(event);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Record cost for tracking
|
|
47
|
+
*/
|
|
48
|
+
recordCost(costUsd: number): void {
|
|
49
|
+
this.metrics.costUsd += costUsd;
|
|
50
|
+
this.emitEvent("cost_recorded", {
|
|
51
|
+
costUsd,
|
|
52
|
+
totalCost: this.metrics.costUsd,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Get current quota usage
|
|
58
|
+
*/
|
|
59
|
+
getCurrentQuota(): QuotaUsage {
|
|
60
|
+
return {
|
|
61
|
+
toolCalls: this.metrics.toolCallCount,
|
|
62
|
+
tokens: this.metrics.tokenUsage.total,
|
|
63
|
+
executionTimeMs: Date.now() - this.startTime,
|
|
64
|
+
costUsd: this.metrics.costUsd,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Get all trace events
|
|
70
|
+
*/
|
|
71
|
+
getEvents(): TraceEvent[] {
|
|
72
|
+
return [...this.events];
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Get current metrics
|
|
77
|
+
*/
|
|
78
|
+
getMetrics(): TraceMetrics {
|
|
79
|
+
return {
|
|
80
|
+
...this.metrics,
|
|
81
|
+
executionTimeMs: Date.now() - this.startTime,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Generate execution trace
|
|
87
|
+
*/
|
|
88
|
+
getTrace(): ExecutionTrace {
|
|
89
|
+
return {
|
|
90
|
+
id: `trace-${Date.now()}`,
|
|
91
|
+
startTime: this.startTime,
|
|
92
|
+
endTime: Date.now(),
|
|
93
|
+
events: this.getEvents(),
|
|
94
|
+
metrics: this.getMetrics(),
|
|
95
|
+
success: !this.events.some((e) => e.type.includes("error")),
|
|
96
|
+
error: this.getLastError(),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Clear all events and reset metrics
|
|
102
|
+
*/
|
|
103
|
+
reset(): void {
|
|
104
|
+
this.events = [];
|
|
105
|
+
this.startTime = Date.now();
|
|
106
|
+
this.metrics = {
|
|
107
|
+
executionTimeMs: 0,
|
|
108
|
+
toolCallCount: 0,
|
|
109
|
+
llmCallCount: 0,
|
|
110
|
+
tokenUsage: {
|
|
111
|
+
prompt: 0,
|
|
112
|
+
completion: 0,
|
|
113
|
+
total: 0,
|
|
114
|
+
},
|
|
115
|
+
memoryUsage: {
|
|
116
|
+
heapUsed: 0,
|
|
117
|
+
heapTotal: 0,
|
|
118
|
+
},
|
|
119
|
+
costUsd: 0,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Update metrics based on events
|
|
125
|
+
*/
|
|
126
|
+
private updateMetrics(event: TraceEvent): void {
|
|
127
|
+
switch (event.type) {
|
|
128
|
+
case "tool_call_start":
|
|
129
|
+
this.metrics.toolCallCount++;
|
|
130
|
+
break;
|
|
131
|
+
|
|
132
|
+
case "llm_call_start":
|
|
133
|
+
this.metrics.llmCallCount++;
|
|
134
|
+
break;
|
|
135
|
+
|
|
136
|
+
case "llm_call_success":
|
|
137
|
+
if (event.data && event.data.usage) {
|
|
138
|
+
const usage = event.data.usage;
|
|
139
|
+
this.metrics.tokenUsage.prompt += usage.prompt_tokens || 0;
|
|
140
|
+
this.metrics.tokenUsage.completion += usage.completion_tokens || 0;
|
|
141
|
+
this.metrics.tokenUsage.total += usage.total_tokens || 0;
|
|
142
|
+
}
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Update memory usage if available
|
|
147
|
+
if (typeof process !== "undefined" && process.memoryUsage) {
|
|
148
|
+
const memUsage = process.memoryUsage();
|
|
149
|
+
this.metrics.memoryUsage.heapUsed = memUsage.heapUsed;
|
|
150
|
+
this.metrics.memoryUsage.heapTotal = memUsage.heapTotal;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Get the last error from events
|
|
156
|
+
*/
|
|
157
|
+
private getLastError(): string | undefined {
|
|
158
|
+
const errorEvents = this.events
|
|
159
|
+
.filter((e) => e.type.includes("error"))
|
|
160
|
+
.reverse();
|
|
161
|
+
|
|
162
|
+
if (errorEvents.length > 0) {
|
|
163
|
+
const lastError = errorEvents[0];
|
|
164
|
+
return (
|
|
165
|
+
lastError.data?.error || lastError.data?.message || "Unknown error"
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Sanitize event data to prevent sensitive information leaks
|
|
174
|
+
*/
|
|
175
|
+
private sanitizeEventData(data: any): any {
|
|
176
|
+
if (data === null || data === undefined) {
|
|
177
|
+
return data;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (typeof data === "string") {
|
|
181
|
+
// Truncate very long strings
|
|
182
|
+
return data.length > 1000
|
|
183
|
+
? data.substring(0, 1000) + "...[TRUNCATED]"
|
|
184
|
+
: data;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (Array.isArray(data)) {
|
|
188
|
+
return data.map((item) => this.sanitizeEventData(item));
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (typeof data === "object") {
|
|
192
|
+
const sanitized: any = {};
|
|
193
|
+
for (const [key, value] of Object.entries(data)) {
|
|
194
|
+
// Redact sensitive keys
|
|
195
|
+
if (this.isSensitiveKey(key)) {
|
|
196
|
+
sanitized[key] = "[REDACTED]";
|
|
197
|
+
} else if (key === "parameters" && typeof value === "object") {
|
|
198
|
+
// Special handling for tool parameters
|
|
199
|
+
sanitized[key] = this.sanitizeParameters(value);
|
|
200
|
+
} else {
|
|
201
|
+
sanitized[key] = this.sanitizeEventData(value);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return sanitized;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return data;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Check if a key contains sensitive information
|
|
212
|
+
*/
|
|
213
|
+
private isSensitiveKey(key: string): boolean {
|
|
214
|
+
const lowerKey = key.toLowerCase();
|
|
215
|
+
const sensitivePatterns = [
|
|
216
|
+
"password",
|
|
217
|
+
"secret",
|
|
218
|
+
"token",
|
|
219
|
+
"key",
|
|
220
|
+
"auth",
|
|
221
|
+
"credential",
|
|
222
|
+
"private",
|
|
223
|
+
"confidential",
|
|
224
|
+
];
|
|
225
|
+
|
|
226
|
+
return sensitivePatterns.some((pattern) => lowerKey.includes(pattern));
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Sanitize tool parameters
|
|
231
|
+
*/
|
|
232
|
+
private sanitizeParameters(params: any): any {
|
|
233
|
+
if (!params || typeof params !== "object") {
|
|
234
|
+
return params;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const sanitized: any = {};
|
|
238
|
+
for (const [key, value] of Object.entries(params)) {
|
|
239
|
+
if (this.isSensitiveKey(key)) {
|
|
240
|
+
sanitized[key] = "[REDACTED]";
|
|
241
|
+
} else if (typeof value === "string" && value.length > 500) {
|
|
242
|
+
sanitized[key] = value.substring(0, 500) + "...[TRUNCATED]";
|
|
243
|
+
} else {
|
|
244
|
+
sanitized[key] = this.sanitizeEventData(value);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return sanitized;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { Message } from '../../clients/types';
|
|
2
|
+
|
|
3
|
+
// Basic trace event interface
|
|
4
|
+
export interface TraceEvent {
|
|
5
|
+
id: string;
|
|
6
|
+
type: string;
|
|
7
|
+
timestamp: number;
|
|
8
|
+
data: any;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// Trace metrics for performance monitoring
|
|
12
|
+
export interface TraceMetrics {
|
|
13
|
+
executionTimeMs: number;
|
|
14
|
+
toolCallCount: number;
|
|
15
|
+
llmCallCount: number;
|
|
16
|
+
tokenUsage: {
|
|
17
|
+
prompt: number;
|
|
18
|
+
completion: number;
|
|
19
|
+
total: number;
|
|
20
|
+
};
|
|
21
|
+
memoryUsage: {
|
|
22
|
+
heapUsed: number;
|
|
23
|
+
heapTotal: number;
|
|
24
|
+
};
|
|
25
|
+
costUsd: number;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Complete execution trace
|
|
29
|
+
export interface ExecutionTrace {
|
|
30
|
+
id: string;
|
|
31
|
+
startTime: number;
|
|
32
|
+
endTime: number;
|
|
33
|
+
events: TraceEvent[];
|
|
34
|
+
metrics: TraceMetrics;
|
|
35
|
+
success: boolean;
|
|
36
|
+
error?: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Resource quotas for script execution
|
|
40
|
+
export interface ResourceQuotas {
|
|
41
|
+
maxToolCalls: number;
|
|
42
|
+
maxTokens: number;
|
|
43
|
+
maxExecutionTimeMs: number;
|
|
44
|
+
maxCostUsd: number;
|
|
45
|
+
maxMemoryMb: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Security policy configuration
|
|
49
|
+
export interface SecurityPolicy {
|
|
50
|
+
allowlistedTools: string[];
|
|
51
|
+
denylistedTools: string[];
|
|
52
|
+
maxScriptLength: number;
|
|
53
|
+
allowNetworkAccess: boolean;
|
|
54
|
+
allowFileSystemAccess: boolean;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Current quota usage tracking
|
|
58
|
+
export interface QuotaUsage {
|
|
59
|
+
toolCalls: number;
|
|
60
|
+
tokens: number;
|
|
61
|
+
executionTimeMs: number;
|
|
62
|
+
costUsd: number;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Policy violation record
|
|
66
|
+
export interface PolicyViolation {
|
|
67
|
+
id: string;
|
|
68
|
+
type: 'quota_exceeded' | 'tool_denied' | 'tool_not_allowed' | 'script_validation';
|
|
69
|
+
message: string;
|
|
70
|
+
timestamp: number;
|
|
71
|
+
usage: QuotaUsage;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Script execution request
|
|
75
|
+
export interface ExecutionRequest {
|
|
76
|
+
script: string;
|
|
77
|
+
context?: Record<string, any>;
|
|
78
|
+
quotas?: Partial<ResourceQuotas>;
|
|
79
|
+
policy?: Partial<SecurityPolicy>;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Script execution result
|
|
83
|
+
export interface ExecutionResult {
|
|
84
|
+
success: boolean;
|
|
85
|
+
error: string | null;
|
|
86
|
+
result: any;
|
|
87
|
+
trace: ExecutionTrace;
|
|
88
|
+
artifacts: Artifact[];
|
|
89
|
+
consoleOutput: string[];
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Artifact created by script
|
|
93
|
+
export interface Artifact {
|
|
94
|
+
id: string;
|
|
95
|
+
name: string;
|
|
96
|
+
type: 'text' | 'json' | 'csv' | 'html' | 'markdown';
|
|
97
|
+
content: string;
|
|
98
|
+
createdAt: string;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Tool execution result
|
|
102
|
+
export interface ToolResult {
|
|
103
|
+
success: boolean;
|
|
104
|
+
result?: any;
|
|
105
|
+
error?: string;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Tool call record
|
|
109
|
+
export interface ToolCall {
|
|
110
|
+
id: string;
|
|
111
|
+
name: string;
|
|
112
|
+
args: Record<string, any>;
|
|
113
|
+
result?: any;
|
|
114
|
+
error?: string;
|
|
115
|
+
timestamp: number;
|
|
116
|
+
duration?: number;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// LLM call record
|
|
120
|
+
export interface LLMCall {
|
|
121
|
+
id: string;
|
|
122
|
+
model: string;
|
|
123
|
+
messages: Message[];
|
|
124
|
+
response?: any;
|
|
125
|
+
error?: string;
|
|
126
|
+
timestamp: number;
|
|
127
|
+
duration?: number;
|
|
128
|
+
tokenUsage?: {
|
|
129
|
+
prompt: number;
|
|
130
|
+
completion: number;
|
|
131
|
+
total: number;
|
|
132
|
+
};
|
|
133
|
+
cost?: number;
|
|
134
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.executeScriptDefinition = void 0;
|
|
4
|
+
exports.executeScriptDefinition = {
|
|
5
|
+
type: "function",
|
|
6
|
+
function: {
|
|
7
|
+
name: "executeScript",
|
|
8
|
+
description: `Execute TypeScript code in a secure sandbox environment with access to tools and AI models.
|
|
9
|
+
|
|
10
|
+
The script has access to:
|
|
11
|
+
- callTool(toolName, parameters): Call any available tool
|
|
12
|
+
- llm(messages, options): Make LLM calls
|
|
13
|
+
- createArtifact(name, content, type): Create downloadable artifacts
|
|
14
|
+
- console: Standard console logging
|
|
15
|
+
- getQuotaUsage(): Check resource usage
|
|
16
|
+
- sleep(ms): Pause execution for a specified time
|
|
17
|
+
|
|
18
|
+
Example:
|
|
19
|
+
\`\`\`typescript
|
|
20
|
+
// Call a tool
|
|
21
|
+
const searchResult = await callTool('textSearch', { searchTerm: 'hello world' });
|
|
22
|
+
console.log('Search found:', searchResult);
|
|
23
|
+
|
|
24
|
+
// Call LLM
|
|
25
|
+
const response = await llm([
|
|
26
|
+
{ role: 'user', content: 'Explain quantum computing' }
|
|
27
|
+
], { model: 'gpt-4o-mini', maxTokens: 100 });
|
|
28
|
+
console.log('LLM response:', response.choices[0].message.content);
|
|
29
|
+
|
|
30
|
+
// Create an artifact
|
|
31
|
+
createArtifact('summary.md', '# Summary\\nThis is a test', 'markdown');
|
|
32
|
+
|
|
33
|
+
return { message: 'Script completed successfully' };
|
|
34
|
+
\`\`\`
|
|
35
|
+
|
|
36
|
+
Must either return or await the a top level function
|
|
37
|
+
|
|
38
|
+
Test tools yourself to know the return type when scripting. Can pass JSON.stringified data into llm call if you don't need to know the type.
|
|
39
|
+
You cannot use isolation breaking methods like: setTimeout setInterval setImmediate clearTimeout clearInterval
|
|
40
|
+
|
|
41
|
+
Security: Scripts run in isolation with quotas on tool calls, tokens, time, and cost.`,
|
|
42
|
+
parameters: {
|
|
43
|
+
type: "object",
|
|
44
|
+
properties: {
|
|
45
|
+
script: {
|
|
46
|
+
type: "string",
|
|
47
|
+
description: "The TypeScript code to execute",
|
|
48
|
+
},
|
|
49
|
+
maxToolCalls: {
|
|
50
|
+
type: "number",
|
|
51
|
+
description: "Maximum number of tool calls allowed (default: 50)",
|
|
52
|
+
},
|
|
53
|
+
maxTokens: {
|
|
54
|
+
type: "number",
|
|
55
|
+
description: "Maximum tokens for LLM calls (default: 10000)",
|
|
56
|
+
},
|
|
57
|
+
maxExecutionTimeMs: {
|
|
58
|
+
type: "number",
|
|
59
|
+
description: "Maximum execution time in milliseconds (default: 30000)",
|
|
60
|
+
},
|
|
61
|
+
maxCostUsd: {
|
|
62
|
+
type: "number",
|
|
63
|
+
description: "Maximum cost in USD (default: 1.0)",
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
required: ["script"],
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../../../src/agents/tools/executeScript/definition.ts"],"names":[],"mappings":";;;AAKa,QAAA,uBAAuB,GAAS;IAC3C,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wFAiCuE;QAEpF,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gCAAgC;iBAC9C;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oDAAoD;iBAClE;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+CAA+C;iBAC7D;gBACD,kBAAkB,EAAE;oBAClB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,yDAAyD;iBAC5D;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oCAAoC;iBAClD;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.quickTest = void 0;
|
|
5
|
+
const executeScript_1 = require("../../executeScript");
|
|
6
|
+
const services_1 = require("../../../../services");
|
|
7
|
+
const clients_1 = require("../../../../clients");
|
|
8
|
+
const simpleScript = `
|
|
9
|
+
console.log("Hello from executeScript!");
|
|
10
|
+
|
|
11
|
+
async function main() {
|
|
12
|
+
// Test basic functionality
|
|
13
|
+
console.log("Running simple test...");
|
|
14
|
+
|
|
15
|
+
// Try a simple tool call
|
|
16
|
+
const files = await callTool("fileSearch", { searchTerm: "*.ts" });
|
|
17
|
+
console.log("Found", files?.length || 0, "TypeScript files");
|
|
18
|
+
|
|
19
|
+
return {
|
|
20
|
+
message: "Simple test completed!",
|
|
21
|
+
filesFound: files?.length || 0,
|
|
22
|
+
timestamp: new Date().toISOString()
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
await main().then(result => {
|
|
27
|
+
console.log("Result:", result);
|
|
28
|
+
}).catch(error => {
|
|
29
|
+
console.error("Error:", error);
|
|
30
|
+
});
|
|
31
|
+
`;
|
|
32
|
+
async function quickTest() {
|
|
33
|
+
console.log("๐งช Quick executeScript test\n");
|
|
34
|
+
try {
|
|
35
|
+
const result = await (0, executeScript_1.executeScript)({
|
|
36
|
+
script: simpleScript,
|
|
37
|
+
maxToolCalls: 5,
|
|
38
|
+
maxTokens: 100,
|
|
39
|
+
maxExecutionTimeMs: 10000,
|
|
40
|
+
maxCostUsd: 0.1,
|
|
41
|
+
}, {
|
|
42
|
+
tools: services_1.Tools,
|
|
43
|
+
clients: clients_1.Clients,
|
|
44
|
+
});
|
|
45
|
+
console.log("\n๐ QUICK TEST RESULT:");
|
|
46
|
+
console.log("Success:", result.success);
|
|
47
|
+
console.log("Result:", result.result);
|
|
48
|
+
console.log("Tool calls:", result.quotaUsage.toolCalls);
|
|
49
|
+
console.log("Cost: $" + result.quotaUsage.costUsd.toFixed(4));
|
|
50
|
+
if (result.consoleOutput.length > 0) {
|
|
51
|
+
console.log("\n๐ Console Output:");
|
|
52
|
+
result.consoleOutput.forEach((entry) => {
|
|
53
|
+
console.log(` ${entry}`);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (!result.success) {
|
|
57
|
+
console.log("โ Error:", result.error);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.error("๐ฅ Test failed:", error);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.quickTest = quickTest;
|
|
65
|
+
if (require.main === module) {
|
|
66
|
+
quickTest();
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=quick-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quick-test.js","sourceRoot":"","sources":["../../../../../../src/agents/tools/executeScript/examples/quick-test.ts"],"names":[],"mappings":";;;;AAMA,uDAAoD;AACpD,mDAA6C;AAC7C,iDAA8C;AAG9C,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuBpB,CAAC;AAEF,KAAK,UAAU,SAAS;IACtB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAE7C,IAAI;QACF,MAAM,MAAM,GAAG,MAAM,IAAA,6BAAa,EAChC;YACE,MAAM,EAAE,YAAY;YACpB,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,GAAG;YACd,kBAAkB,EAAE,KAAK;YACzB,UAAU,EAAE,GAAG;SAChB,EACD;YACE,KAAK,EAAE,gBAAK;YACZ,OAAO,EAAE,iBAAO;SACjB,CACF,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9D,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACnB,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;SACvC;KACF;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;KACzC;AACH,CAAC;AAMQ,8BAAS;AAJlB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAC3B,SAAS,EAAE,CAAC;CACb"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
interface TestCase {
|
|
3
|
+
name: string;
|
|
4
|
+
script: string;
|
|
5
|
+
expectedToWork: boolean;
|
|
6
|
+
description: string;
|
|
7
|
+
}
|
|
8
|
+
declare const testCases: TestCase[];
|
|
9
|
+
declare function runSerializationTests(): Promise<{
|
|
10
|
+
passed: number;
|
|
11
|
+
failed: number;
|
|
12
|
+
unexpected: number;
|
|
13
|
+
details: any[];
|
|
14
|
+
}>;
|
|
15
|
+
export { runSerializationTests, testCases };
|