@tyvm/knowhow 0.0.108-dev.126b29e ā 0.0.108-dev.501f36f
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 +2 -3
- package/src/agents/base/base.ts +9 -0
- package/src/agents/tools/index.ts +0 -1
- package/src/agents/tools/list.ts +0 -2
- package/src/chat/CliChatService.ts +10 -1
- package/src/chat/renderer/CompactRenderer.ts +20 -0
- package/src/chat/renderer/ConsoleRenderer.ts +19 -0
- package/src/chat/renderer/FancyRenderer.ts +19 -0
- package/src/chat/renderer/types.ts +11 -0
- package/src/cli.ts +91 -664
- package/src/clients/index.ts +6 -5
- package/src/clients/types.ts +12 -4
- package/src/cloudWorker.ts +110 -122
- package/src/commands/agent.ts +246 -0
- package/src/commands/misc.ts +174 -0
- package/src/commands/modules.ts +182 -0
- package/src/commands/services.ts +77 -0
- package/src/commands/workers.ts +168 -0
- package/src/config.ts +37 -0
- package/src/fileSync.ts +50 -17
- package/src/index.ts +1 -0
- package/src/logger.ts +197 -0
- package/src/plugins/plugins.ts +0 -21
- package/src/processors/JsonCompressor.ts +6 -6
- package/src/services/EventService.ts +61 -1
- package/src/services/KnowhowClient.ts +12 -2
- package/src/services/S3.ts +0 -10
- package/src/services/modules/index.ts +70 -50
- package/src/services/modules/types.ts +4 -0
- package/src/tunnel.ts +216 -0
- package/src/types.ts +0 -1
- package/src/worker.ts +65 -336
- package/src/workers/auth/WsMiddleware.ts +99 -0
- package/src/workers/auth/authMiddleware.ts +104 -0
- package/src/workers/auth/types.ts +14 -2
- package/tests/unit/commands/github-credentials.test.ts +211 -0
- package/tests/unit/modules/moduleLoading.test.ts +39 -37
- package/tests/unit/plugins/pluginLoading.test.ts +0 -85
- package/ts_build/package.json +2 -3
- package/ts_build/src/agents/base/base.js +10 -0
- package/ts_build/src/agents/base/base.js.map +1 -1
- package/ts_build/src/agents/tools/index.d.ts +0 -1
- package/ts_build/src/agents/tools/index.js +0 -1
- package/ts_build/src/agents/tools/index.js.map +1 -1
- package/ts_build/src/agents/tools/list.js +0 -2
- package/ts_build/src/agents/tools/list.js.map +1 -1
- package/ts_build/src/chat/CliChatService.js +13 -1
- package/ts_build/src/chat/CliChatService.js.map +1 -1
- package/ts_build/src/chat/renderer/CompactRenderer.d.ts +4 -0
- package/ts_build/src/chat/renderer/CompactRenderer.js +16 -0
- package/ts_build/src/chat/renderer/CompactRenderer.js.map +1 -1
- package/ts_build/src/chat/renderer/ConsoleRenderer.d.ts +4 -0
- package/ts_build/src/chat/renderer/ConsoleRenderer.js +16 -0
- package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -1
- package/ts_build/src/chat/renderer/FancyRenderer.d.ts +4 -0
- package/ts_build/src/chat/renderer/FancyRenderer.js +16 -0
- package/ts_build/src/chat/renderer/FancyRenderer.js.map +1 -1
- package/ts_build/src/chat/renderer/types.d.ts +2 -0
- package/ts_build/src/cli.js +47 -525
- package/ts_build/src/cli.js.map +1 -1
- package/ts_build/src/clients/index.js +2 -4
- package/ts_build/src/clients/index.js.map +1 -1
- package/ts_build/src/clients/types.d.ts +2 -2
- package/ts_build/src/cloudWorker.d.ts +5 -0
- package/ts_build/src/cloudWorker.js +69 -66
- package/ts_build/src/cloudWorker.js.map +1 -1
- package/ts_build/src/commands/agent.d.ts +6 -0
- package/ts_build/src/commands/agent.js +229 -0
- package/ts_build/src/commands/agent.js.map +1 -0
- package/ts_build/src/commands/misc.d.ts +10 -0
- package/ts_build/src/commands/misc.js +197 -0
- package/ts_build/src/commands/misc.js.map +1 -0
- package/ts_build/src/commands/modules.d.ts +3 -0
- package/ts_build/src/commands/modules.js +160 -0
- package/ts_build/src/commands/modules.js.map +1 -0
- package/ts_build/src/commands/services.d.ts +5 -0
- package/ts_build/src/commands/services.js +87 -0
- package/ts_build/src/commands/services.js.map +1 -0
- package/ts_build/src/commands/workers.d.ts +6 -0
- package/ts_build/src/commands/workers.js +168 -0
- package/ts_build/src/commands/workers.js.map +1 -0
- package/ts_build/src/config.d.ts +1 -0
- package/ts_build/src/config.js +32 -0
- package/ts_build/src/config.js.map +1 -1
- package/ts_build/src/fileSync.d.ts +6 -0
- package/ts_build/src/fileSync.js +37 -12
- package/ts_build/src/fileSync.js.map +1 -1
- package/ts_build/src/index.d.ts +1 -0
- package/ts_build/src/index.js +3 -1
- package/ts_build/src/index.js.map +1 -1
- package/ts_build/src/logger.d.ts +21 -0
- package/ts_build/src/logger.js +106 -0
- package/ts_build/src/logger.js.map +1 -0
- package/ts_build/src/plugins/plugins.d.ts +0 -2
- package/ts_build/src/plugins/plugins.js +0 -11
- package/ts_build/src/plugins/plugins.js.map +1 -1
- package/ts_build/src/processors/JsonCompressor.js +4 -4
- package/ts_build/src/processors/JsonCompressor.js.map +1 -1
- package/ts_build/src/services/EventService.d.ts +6 -1
- package/ts_build/src/services/EventService.js +29 -0
- package/ts_build/src/services/EventService.js.map +1 -1
- package/ts_build/src/services/KnowhowClient.d.ts +1 -1
- package/ts_build/src/services/KnowhowClient.js +8 -2
- package/ts_build/src/services/KnowhowClient.js.map +1 -1
- package/ts_build/src/services/S3.js +0 -7
- package/ts_build/src/services/S3.js.map +1 -1
- package/ts_build/src/services/modules/index.d.ts +33 -0
- package/ts_build/src/services/modules/index.js +46 -45
- package/ts_build/src/services/modules/index.js.map +1 -1
- package/ts_build/src/services/modules/types.d.ts +4 -0
- package/ts_build/src/tunnel.d.ts +27 -0
- package/ts_build/src/tunnel.js +112 -0
- package/ts_build/src/tunnel.js.map +1 -0
- package/ts_build/src/types.d.ts +0 -1
- package/ts_build/src/types.js.map +1 -1
- package/ts_build/src/worker.d.ts +1 -4
- package/ts_build/src/worker.js +38 -244
- package/ts_build/src/worker.js.map +1 -1
- package/ts_build/src/workers/auth/WsMiddleware.d.ts +8 -0
- package/ts_build/src/workers/auth/WsMiddleware.js +65 -0
- package/ts_build/src/workers/auth/WsMiddleware.js.map +1 -0
- package/ts_build/src/workers/auth/authMiddleware.d.ts +3 -0
- package/ts_build/src/workers/auth/authMiddleware.js +60 -0
- package/ts_build/src/workers/auth/authMiddleware.js.map +1 -0
- package/ts_build/src/workers/auth/types.d.ts +8 -1
- package/ts_build/tests/unit/commands/github-credentials.test.d.ts +1 -0
- package/ts_build/tests/unit/commands/github-credentials.test.js +146 -0
- package/ts_build/tests/unit/commands/github-credentials.test.js.map +1 -0
- package/ts_build/tests/unit/modules/moduleLoading.test.js +20 -26
- package/ts_build/tests/unit/modules/moduleLoading.test.js.map +1 -1
- package/ts_build/tests/unit/plugins/pluginLoading.test.js +0 -65
- package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +1 -1
- package/src/agents/tools/executeScript/README.md +0 -94
- package/src/agents/tools/executeScript/definition.ts +0 -79
- package/src/agents/tools/executeScript/examples/dependency-injection-validation.ts +0 -272
- package/src/agents/tools/executeScript/examples/quick-test.ts +0 -74
- package/src/agents/tools/executeScript/examples/serialization-test.ts +0 -321
- package/src/agents/tools/executeScript/examples/test-runner.ts +0 -197
- package/src/agents/tools/executeScript/index.ts +0 -98
- package/src/services/script-execution/SandboxContext.ts +0 -282
- package/src/services/script-execution/ScriptExecutor.ts +0 -441
- package/src/services/script-execution/ScriptPolicy.ts +0 -194
- package/src/services/script-execution/ScriptTracer.ts +0 -249
- package/src/services/script-execution/types.ts +0 -134
- package/ts_build/src/agents/tools/executeScript/definition.d.ts +0 -2
- package/ts_build/src/agents/tools/executeScript/definition.js +0 -76
- package/ts_build/src/agents/tools/executeScript/definition.js.map +0 -1
- package/ts_build/src/agents/tools/executeScript/examples/dependency-injection-validation.d.ts +0 -18
- package/ts_build/src/agents/tools/executeScript/examples/dependency-injection-validation.js +0 -192
- package/ts_build/src/agents/tools/executeScript/examples/dependency-injection-validation.js.map +0 -1
- package/ts_build/src/agents/tools/executeScript/examples/quick-test.d.ts +0 -3
- package/ts_build/src/agents/tools/executeScript/examples/quick-test.js +0 -64
- package/ts_build/src/agents/tools/executeScript/examples/quick-test.js.map +0 -1
- package/ts_build/src/agents/tools/executeScript/examples/serialization-test.d.ts +0 -15
- package/ts_build/src/agents/tools/executeScript/examples/serialization-test.js +0 -266
- package/ts_build/src/agents/tools/executeScript/examples/serialization-test.js.map +0 -1
- package/ts_build/src/agents/tools/executeScript/examples/test-runner.d.ts +0 -4
- package/ts_build/src/agents/tools/executeScript/examples/test-runner.js +0 -208
- package/ts_build/src/agents/tools/executeScript/examples/test-runner.js.map +0 -1
- package/ts_build/src/agents/tools/executeScript/index.d.ts +0 -28
- package/ts_build/src/agents/tools/executeScript/index.js +0 -72
- package/ts_build/src/agents/tools/executeScript/index.js.map +0 -1
- package/ts_build/src/services/script-execution/SandboxContext.d.ts +0 -34
- package/ts_build/src/services/script-execution/SandboxContext.js +0 -189
- package/ts_build/src/services/script-execution/SandboxContext.js.map +0 -1
- package/ts_build/src/services/script-execution/ScriptExecutor.d.ts +0 -19
- package/ts_build/src/services/script-execution/ScriptExecutor.js +0 -269
- package/ts_build/src/services/script-execution/ScriptExecutor.js.map +0 -1
- package/ts_build/src/services/script-execution/ScriptPolicy.d.ts +0 -28
- package/ts_build/src/services/script-execution/ScriptPolicy.js +0 -115
- package/ts_build/src/services/script-execution/ScriptPolicy.js.map +0 -1
- package/ts_build/src/services/script-execution/ScriptTracer.d.ts +0 -19
- package/ts_build/src/services/script-execution/ScriptTracer.js +0 -186
- package/ts_build/src/services/script-execution/ScriptTracer.js.map +0 -1
- package/ts_build/src/services/script-execution/types.d.ts +0 -108
- package/ts_build/src/services/script-execution/types.js +0 -3
- package/ts_build/src/services/script-execution/types.js.map +0 -1
|
@@ -1,249 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,134 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,76 +0,0 @@
|
|
|
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: `Used to contruct a script that calls tools and analyzes data, not for general purpose scripting.
|
|
9
|
-
|
|
10
|
-
This is most useful for complex workflows of tool calls that need conditional logic based off tool responses.
|
|
11
|
-
|
|
12
|
-
The script has access to:
|
|
13
|
-
- callTool(toolName, parameters): Call any available tool
|
|
14
|
-
- llm(messages, options): Make LLM calls
|
|
15
|
-
- createArtifact(name, content, type): Create downloadable artifacts
|
|
16
|
-
- console: Standard console logging
|
|
17
|
-
- getQuotaUsage(): Check resource usage
|
|
18
|
-
- sleep(ms): Pause execution for a specified time, max 2000ms
|
|
19
|
-
|
|
20
|
-
The script cannot:
|
|
21
|
-
- import or require
|
|
22
|
-
- make external network requests, outside of callTool and llm
|
|
23
|
-
|
|
24
|
-
Example:
|
|
25
|
-
\`\`\`typescript
|
|
26
|
-
// Call a tool
|
|
27
|
-
const searchResult = await callTool('textSearch', { searchTerm: 'hello world' });
|
|
28
|
-
console.log('Search found:', searchResult);
|
|
29
|
-
|
|
30
|
-
// Call LLM
|
|
31
|
-
const response = await llm([
|
|
32
|
-
{ role: 'user', content: 'Explain quantum computing' }
|
|
33
|
-
], { model: 'gpt-4o-mini', maxTokens: 100 });
|
|
34
|
-
console.log('LLM response:', response.choices[0].message.content);
|
|
35
|
-
|
|
36
|
-
// Create an artifact
|
|
37
|
-
createArtifact('summary.md', '# Summary\\nThis is a test', 'markdown');
|
|
38
|
-
|
|
39
|
-
return { message: 'Script completed successfully' };
|
|
40
|
-
\`\`\`
|
|
41
|
-
|
|
42
|
-
You must return the data you want to be the functionResp
|
|
43
|
-
|
|
44
|
-
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.
|
|
45
|
-
You cannot use isolation breaking methods like: setTimeout setInterval setImmediate clearTimeout clearInterval
|
|
46
|
-
|
|
47
|
-
Security: Scripts run in isolation with quotas on tool calls, tokens, time, and cost.`,
|
|
48
|
-
parameters: {
|
|
49
|
-
type: "object",
|
|
50
|
-
properties: {
|
|
51
|
-
script: {
|
|
52
|
-
type: "string",
|
|
53
|
-
description: "The TypeScript code to execute. 4000 tokens or less",
|
|
54
|
-
},
|
|
55
|
-
maxToolCalls: {
|
|
56
|
-
type: "number",
|
|
57
|
-
description: "Maximum number of tool calls allowed (default: 50)",
|
|
58
|
-
},
|
|
59
|
-
maxTokens: {
|
|
60
|
-
type: "number",
|
|
61
|
-
description: "Maximum tokens for LLM calls (default: 10000)",
|
|
62
|
-
},
|
|
63
|
-
maxExecutionTimeMs: {
|
|
64
|
-
type: "number",
|
|
65
|
-
description: "Maximum execution time in milliseconds (default: 30000)",
|
|
66
|
-
},
|
|
67
|
-
maxCostUsd: {
|
|
68
|
-
type: "number",
|
|
69
|
-
description: "Maximum cost in USD (default: 1.0)",
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
required: ["script"],
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
};
|
|
76
|
-
//# sourceMappingURL=definition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wFAuCuE;QAEpF,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qDAAqD;iBACnE;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"}
|
package/ts_build/src/agents/tools/executeScript/examples/dependency-injection-validation.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ts-node
|
|
2
|
-
import { ToolsService } from "../../../../services/Tools";
|
|
3
|
-
import { BaseAgent } from "../../../base/base";
|
|
4
|
-
import { Message } from "../../../../clients/types";
|
|
5
|
-
declare class TestAgent1 extends BaseAgent {
|
|
6
|
-
name: string;
|
|
7
|
-
description: string;
|
|
8
|
-
getInitialMessages(userInput: string): Promise<Message[]>;
|
|
9
|
-
getToolsServiceForTest(): ToolsService;
|
|
10
|
-
}
|
|
11
|
-
declare class TestAgent2 extends BaseAgent {
|
|
12
|
-
name: string;
|
|
13
|
-
description: string;
|
|
14
|
-
getInitialMessages(userInput: string): Promise<Message[]>;
|
|
15
|
-
getToolsServiceForTest(): ToolsService;
|
|
16
|
-
}
|
|
17
|
-
declare function runValidationTests(): Promise<boolean>;
|
|
18
|
-
export { runValidationTests, TestAgent1, TestAgent2 };
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ts-node
|
|
2
|
-
"use strict";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.TestAgent2 = exports.TestAgent1 = void 0;
|
|
5
|
-
exports.runValidationTests = runValidationTests;
|
|
6
|
-
const Tools_1 = require("../../../../services/Tools");
|
|
7
|
-
const clients_1 = require("../../../../clients");
|
|
8
|
-
const services_1 = require("../../../../services/");
|
|
9
|
-
const base_1 = require("../../../base/base");
|
|
10
|
-
const __1 = require("../");
|
|
11
|
-
const definition_1 = require("../definition");
|
|
12
|
-
class TestAgent1 extends base_1.BaseAgent {
|
|
13
|
-
name = "TestAgent1";
|
|
14
|
-
description = "Test agent for dependency injection validation";
|
|
15
|
-
async getInitialMessages(userInput) {
|
|
16
|
-
return [
|
|
17
|
-
{ role: "system", content: this.description },
|
|
18
|
-
{ role: "user", content: userInput },
|
|
19
|
-
];
|
|
20
|
-
}
|
|
21
|
-
getToolsServiceForTest() {
|
|
22
|
-
return this.tools;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
exports.TestAgent1 = TestAgent1;
|
|
26
|
-
class TestAgent2 extends base_1.BaseAgent {
|
|
27
|
-
name = "TestAgent2";
|
|
28
|
-
description = "Another test agent for dependency injection validation";
|
|
29
|
-
async getInitialMessages(userInput) {
|
|
30
|
-
return [
|
|
31
|
-
{ role: "system", content: this.description },
|
|
32
|
-
{ role: "user", content: userInput },
|
|
33
|
-
];
|
|
34
|
-
}
|
|
35
|
-
getToolsServiceForTest() {
|
|
36
|
-
return this.tools;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
exports.TestAgent2 = TestAgent2;
|
|
40
|
-
function testToolWithContext(params) {
|
|
41
|
-
const context = this.getContext();
|
|
42
|
-
console.log("ā
Tool called with context:");
|
|
43
|
-
console.log("- AgentService available:", !!context.Agents);
|
|
44
|
-
console.log("- EventService available:", !!context.Events);
|
|
45
|
-
console.log("- Clients available:", !!context.Clients);
|
|
46
|
-
console.log("- ToolsService self-reference available:", !!context.Tools);
|
|
47
|
-
console.log("- Test message:", params.message);
|
|
48
|
-
return {
|
|
49
|
-
success: true,
|
|
50
|
-
contextValidated: true,
|
|
51
|
-
hasAgentService: !!context.Agents,
|
|
52
|
-
hasEventService: !!context.Events,
|
|
53
|
-
hasClients: !!context.Clients,
|
|
54
|
-
hasToolsService: !!context.Tools,
|
|
55
|
-
testMessage: params.message,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
async function runValidationTests() {
|
|
59
|
-
console.log("š§Ŗ Starting Tools Dependency Injection Validation Tests\n");
|
|
60
|
-
console.log("š Test 1: Agent Isolation");
|
|
61
|
-
const agent1 = new TestAgent1({
|
|
62
|
-
Events: new services_1.EventService(),
|
|
63
|
-
Tools: new Tools_1.ToolsService({ Clients: clients_1.Clients }),
|
|
64
|
-
});
|
|
65
|
-
const agent2 = new TestAgent2({
|
|
66
|
-
Events: new services_1.EventService(),
|
|
67
|
-
Tools: new Tools_1.ToolsService(),
|
|
68
|
-
});
|
|
69
|
-
const toolsService1 = agent1.getToolsServiceForTest();
|
|
70
|
-
const toolsService2 = agent2.getToolsServiceForTest();
|
|
71
|
-
console.log("ā
Agent1 and Agent2 have different ToolsService instances:", toolsService1 !== toolsService2);
|
|
72
|
-
console.log("\nš Test 2: Context Injection Validation");
|
|
73
|
-
const context1 = toolsService1.getContext();
|
|
74
|
-
const context2 = toolsService2.getContext();
|
|
75
|
-
console.log("ā
Agent1 context has required services:", {
|
|
76
|
-
agentService: !!context1.Agents,
|
|
77
|
-
eventService: !!context1.Events,
|
|
78
|
-
clients: !!context1.Clients,
|
|
79
|
-
toolsService: !!context1.Tools,
|
|
80
|
-
});
|
|
81
|
-
console.log("ā
Agent2 context has required services:", {
|
|
82
|
-
agentService: !!context2.Agents,
|
|
83
|
-
eventService: !!context2.Events,
|
|
84
|
-
clients: !!context2.Clients,
|
|
85
|
-
toolsService: !!context2.Tools,
|
|
86
|
-
});
|
|
87
|
-
console.log("\nš Test 3: Tool Context Access");
|
|
88
|
-
toolsService1.addTool({
|
|
89
|
-
type: "function",
|
|
90
|
-
function: {
|
|
91
|
-
name: "testToolWithContext",
|
|
92
|
-
description: "Test tool for context validation",
|
|
93
|
-
parameters: {
|
|
94
|
-
type: "object",
|
|
95
|
-
properties: {
|
|
96
|
-
message: { type: "string", description: "Test message" },
|
|
97
|
-
},
|
|
98
|
-
required: ["message"],
|
|
99
|
-
},
|
|
100
|
-
},
|
|
101
|
-
});
|
|
102
|
-
toolsService1.setFunction("testToolWithContext", testToolWithContext);
|
|
103
|
-
try {
|
|
104
|
-
const result = await toolsService1.callTool({
|
|
105
|
-
id: "test-call",
|
|
106
|
-
type: "function",
|
|
107
|
-
function: {
|
|
108
|
-
name: "testToolWithContext",
|
|
109
|
-
arguments: JSON.stringify({ message: "Hello from Agent1!" }),
|
|
110
|
-
},
|
|
111
|
-
});
|
|
112
|
-
console.log("ā
Tool executed successfully with context access:", result.functionResp?.success);
|
|
113
|
-
}
|
|
114
|
-
catch (error) {
|
|
115
|
-
console.error("ā Tool execution failed:", error);
|
|
116
|
-
}
|
|
117
|
-
console.log("\nš Test 4: Tool Isolation Between Agents");
|
|
118
|
-
const agent1Tools = toolsService1.getTools().map((t) => t.function.name);
|
|
119
|
-
const agent2Tools = toolsService2.getTools().map((t) => t.function.name);
|
|
120
|
-
console.log("Agent1 tools:", agent1Tools.length);
|
|
121
|
-
console.log("Agent2 tools:", agent2Tools.length);
|
|
122
|
-
console.log("ā
Agent2 does not have agent1's custom tool:", !agent2Tools.includes("testToolWithContext"));
|
|
123
|
-
function agent2SpecificTool(params) {
|
|
124
|
-
const context = this.getContext();
|
|
125
|
-
return {
|
|
126
|
-
agent: "Agent2",
|
|
127
|
-
data: params.data,
|
|
128
|
-
contextAvailable: !!context,
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
toolsService2.addTool({
|
|
132
|
-
type: "function",
|
|
133
|
-
function: {
|
|
134
|
-
name: "agent2SpecificTool",
|
|
135
|
-
description: "Tool specific to Agent2",
|
|
136
|
-
parameters: {
|
|
137
|
-
type: "object",
|
|
138
|
-
properties: {
|
|
139
|
-
data: { type: "string", description: "Test data" },
|
|
140
|
-
},
|
|
141
|
-
required: ["data"],
|
|
142
|
-
},
|
|
143
|
-
},
|
|
144
|
-
});
|
|
145
|
-
toolsService2.setFunction("agent2SpecificTool", agent2SpecificTool);
|
|
146
|
-
const agent1ToolsAfter = toolsService1.getTools().map((t) => t.function.name);
|
|
147
|
-
const agent2ToolsAfter = toolsService2.getTools().map((t) => t.function.name);
|
|
148
|
-
console.log("ā
Agent1 does not have agent2's tool:", !agent1ToolsAfter.includes("agent2SpecificTool"));
|
|
149
|
-
console.log("ā
Agent2 has its specific tool:", agent2ToolsAfter.includes("agent2SpecificTool"));
|
|
150
|
-
console.log("\nš Test 6: executeScript Context Integration");
|
|
151
|
-
const executeScriptTest = `
|
|
152
|
-
async function main() {
|
|
153
|
-
return callTool("testToolWithContext", {message: "Hello from executeScript!"});
|
|
154
|
-
}
|
|
155
|
-
return main()
|
|
156
|
-
`;
|
|
157
|
-
toolsService1.defineTools([definition_1.executeScriptDefinition], { executeScript: __1.executeScript });
|
|
158
|
-
try {
|
|
159
|
-
const executeResult = await toolsService1.callTool({
|
|
160
|
-
id: "execute-test",
|
|
161
|
-
type: "function",
|
|
162
|
-
function: {
|
|
163
|
-
name: "executeScript",
|
|
164
|
-
arguments: JSON.stringify({ script: executeScriptTest }),
|
|
165
|
-
},
|
|
166
|
-
});
|
|
167
|
-
console.log("ā
executeScript using dependency injection:", executeResult.functionResp);
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
console.error("ā executeScript test failed:", error);
|
|
171
|
-
}
|
|
172
|
-
console.log("\nš All Tests Completed!");
|
|
173
|
-
console.log("\nš Test Summary:");
|
|
174
|
-
console.log("ā
Agent isolation working - each agent has independent ToolsService");
|
|
175
|
-
console.log("ā
Context injection working - tools can access all required services");
|
|
176
|
-
console.log("ā
No singleton usage - tools use bound context instead");
|
|
177
|
-
console.log("ā
Backward compatibility maintained - existing patterns still work");
|
|
178
|
-
console.log("ā
executeScript migrated successfully to dependency injection");
|
|
179
|
-
return true;
|
|
180
|
-
}
|
|
181
|
-
if (require.main === module) {
|
|
182
|
-
runValidationTests()
|
|
183
|
-
.then(() => {
|
|
184
|
-
console.log("\nš Dependency Injection Implementation Complete!");
|
|
185
|
-
process.exit(0);
|
|
186
|
-
})
|
|
187
|
-
.catch((error) => {
|
|
188
|
-
console.error("\nā Validation tests failed:", error);
|
|
189
|
-
process.exit(1);
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
//# sourceMappingURL=dependency-injection-validation.js.map
|
package/ts_build/src/agents/tools/executeScript/examples/dependency-injection-validation.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-injection-validation.js","sourceRoot":"","sources":["../../../../../../src/agents/tools/executeScript/examples/dependency-injection-validation.ts"],"names":[],"mappings":"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"}
|