@nitrostack/core 1.0.17 → 1.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/app-decorator.d.ts +5 -0
- package/dist/core/app-decorator.d.ts.map +1 -1
- package/dist/core/app-decorator.js +2 -1
- package/dist/core/app-decorator.js.map +1 -1
- package/dist/core/builders.d.ts.map +1 -1
- package/dist/core/builders.js +2 -0
- package/dist/core/builders.js.map +1 -1
- package/dist/core/decorators.d.ts +11 -0
- package/dist/core/decorators.d.ts.map +1 -1
- package/dist/core/decorators.js.map +1 -1
- package/dist/core/health/health-checks.resource.d.ts +4 -3
- package/dist/core/health/health-checks.resource.d.ts.map +1 -1
- package/dist/core/health/health-checks.resource.js +35 -8
- package/dist/core/health/health-checks.resource.js.map +1 -1
- package/dist/core/health/health.interface.d.ts +40 -0
- package/dist/core/health/health.interface.d.ts.map +1 -0
- package/dist/core/health/health.interface.js +2 -0
- package/dist/core/health/health.interface.js.map +1 -0
- package/dist/core/index.d.ts +11 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +9 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/interceptors/data-spillover.interceptor.d.ts +30 -0
- package/dist/core/interceptors/data-spillover.interceptor.d.ts.map +1 -0
- package/dist/core/interceptors/data-spillover.interceptor.js +174 -0
- package/dist/core/interceptors/data-spillover.interceptor.js.map +1 -0
- package/dist/core/interceptors/interceptor.decorator.d.ts +17 -8
- package/dist/core/interceptors/interceptor.decorator.d.ts.map +1 -1
- package/dist/core/interceptors/interceptor.decorator.js +36 -11
- package/dist/core/interceptors/interceptor.decorator.js.map +1 -1
- package/dist/core/interceptors/interceptor.interface.d.ts +4 -0
- package/dist/core/interceptors/interceptor.interface.d.ts.map +1 -1
- package/dist/core/interceptors/spillover/fs-spillover.store.d.ts +54 -0
- package/dist/core/interceptors/spillover/fs-spillover.store.d.ts.map +1 -0
- package/dist/core/interceptors/spillover/fs-spillover.store.js +302 -0
- package/dist/core/interceptors/spillover/fs-spillover.store.js.map +1 -0
- package/dist/core/interceptors/spillover/index.d.ts +6 -0
- package/dist/core/interceptors/spillover/index.d.ts.map +1 -0
- package/dist/core/interceptors/spillover/index.js +6 -0
- package/dist/core/interceptors/spillover/index.js.map +1 -0
- package/dist/core/interceptors/spillover/memory-spillover.store.d.ts +25 -0
- package/dist/core/interceptors/spillover/memory-spillover.store.d.ts.map +1 -0
- package/dist/core/interceptors/spillover/memory-spillover.store.js +115 -0
- package/dist/core/interceptors/spillover/memory-spillover.store.js.map +1 -0
- package/dist/core/interceptors/spillover/preview-generator.d.ts +7 -0
- package/dist/core/interceptors/spillover/preview-generator.d.ts.map +1 -0
- package/dist/core/interceptors/spillover/preview-generator.js +79 -0
- package/dist/core/interceptors/spillover/preview-generator.js.map +1 -0
- package/dist/core/interceptors/spillover/spillover-store.interface.d.ts +20 -0
- package/dist/core/interceptors/spillover/spillover-store.interface.d.ts.map +1 -0
- package/dist/core/interceptors/spillover/spillover-store.interface.js +2 -0
- package/dist/core/interceptors/spillover/spillover-store.interface.js.map +1 -0
- package/dist/core/interceptors/spillover/types.d.ts +71 -0
- package/dist/core/interceptors/spillover/types.d.ts.map +1 -0
- package/dist/core/interceptors/spillover/types.js +12 -0
- package/dist/core/interceptors/spillover/types.js.map +1 -0
- package/dist/core/protocol/adapter.d.ts +7 -1
- package/dist/core/protocol/adapter.d.ts.map +1 -1
- package/dist/core/protocol/modern-v2.adapter.d.ts +95 -2
- package/dist/core/protocol/modern-v2.adapter.d.ts.map +1 -1
- package/dist/core/protocol/modern-v2.adapter.js +703 -165
- package/dist/core/protocol/modern-v2.adapter.js.map +1 -1
- package/dist/core/server.d.ts +104 -4
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +465 -52
- package/dist/core/server.js.map +1 -1
- package/dist/core/task.d.ts.map +1 -1
- package/dist/core/task.js +8 -7
- package/dist/core/task.js.map +1 -1
- package/dist/core/tool.d.ts +12 -3
- package/dist/core/tool.d.ts.map +1 -1
- package/dist/core/tool.js +21 -3
- package/dist/core/tool.js.map +1 -1
- package/dist/core/transforms/catalog.transform.d.ts +40 -0
- package/dist/core/transforms/catalog.transform.d.ts.map +1 -0
- package/dist/core/transforms/catalog.transform.js +52 -0
- package/dist/core/transforms/catalog.transform.js.map +1 -0
- package/dist/core/transforms/code-mode/code-mode.transform.d.ts +75 -0
- package/dist/core/transforms/code-mode/code-mode.transform.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/code-mode.transform.js +226 -0
- package/dist/core/transforms/code-mode/code-mode.transform.js.map +1 -0
- package/dist/core/transforms/code-mode/destructive-guard.d.ts +7 -0
- package/dist/core/transforms/code-mode/destructive-guard.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/destructive-guard.js +18 -0
- package/dist/core/transforms/code-mode/destructive-guard.js.map +1 -0
- package/dist/core/transforms/code-mode/guest-evaluator.d.ts +17 -0
- package/dist/core/transforms/code-mode/guest-evaluator.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/guest-evaluator.js +277 -0
- package/dist/core/transforms/code-mode/guest-evaluator.js.map +1 -0
- package/dist/core/transforms/code-mode/index.d.ts +11 -0
- package/dist/core/transforms/code-mode/index.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/index.js +11 -0
- package/dist/core/transforms/code-mode/index.js.map +1 -0
- package/dist/core/transforms/code-mode/ipc-messages.d.ts +31 -0
- package/dist/core/transforms/code-mode/ipc-messages.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/ipc-messages.js +2 -0
- package/dist/core/transforms/code-mode/ipc-messages.js.map +1 -0
- package/dist/core/transforms/code-mode/legible-error.d.ts +8 -0
- package/dist/core/transforms/code-mode/legible-error.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/legible-error.js +17 -0
- package/dist/core/transforms/code-mode/legible-error.js.map +1 -0
- package/dist/core/transforms/code-mode/quickjs-wasm.provider.d.ts +25 -0
- package/dist/core/transforms/code-mode/quickjs-wasm.provider.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/quickjs-wasm.provider.js +31 -0
- package/dist/core/transforms/code-mode/quickjs-wasm.provider.js.map +1 -0
- package/dist/core/transforms/code-mode/sandbox.interface.d.ts +10 -0
- package/dist/core/transforms/code-mode/sandbox.interface.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/sandbox.interface.js +2 -0
- package/dist/core/transforms/code-mode/sandbox.interface.js.map +1 -0
- package/dist/core/transforms/code-mode/sandbox.worker.d.ts +2 -0
- package/dist/core/transforms/code-mode/sandbox.worker.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/sandbox.worker.js +69 -0
- package/dist/core/transforms/code-mode/sandbox.worker.js.map +1 -0
- package/dist/core/transforms/code-mode/synthetic-tools.d.ts +23 -0
- package/dist/core/transforms/code-mode/synthetic-tools.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/synthetic-tools.js +112 -0
- package/dist/core/transforms/code-mode/synthetic-tools.js.map +1 -0
- package/dist/core/transforms/code-mode/types.d.ts +32 -0
- package/dist/core/transforms/code-mode/types.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/types.js +2 -0
- package/dist/core/transforms/code-mode/types.js.map +1 -0
- package/dist/core/transforms/code-mode/worker-pool.d.ts +71 -0
- package/dist/core/transforms/code-mode/worker-pool.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/worker-pool.js +435 -0
- package/dist/core/transforms/code-mode/worker-pool.js.map +1 -0
- package/dist/core/transforms/index.d.ts +6 -0
- package/dist/core/transforms/index.d.ts.map +1 -0
- package/dist/core/transforms/index.js +6 -0
- package/dist/core/transforms/index.js.map +1 -0
- package/dist/core/transforms/search/base-search.transform.d.ts +59 -0
- package/dist/core/transforms/search/base-search.transform.d.ts.map +1 -0
- package/dist/core/transforms/search/base-search.transform.js +169 -0
- package/dist/core/transforms/search/base-search.transform.js.map +1 -0
- package/dist/core/transforms/search/bm25-search.transform.d.ts +27 -0
- package/dist/core/transforms/search/bm25-search.transform.d.ts.map +1 -0
- package/dist/core/transforms/search/bm25-search.transform.js +37 -0
- package/dist/core/transforms/search/bm25-search.transform.js.map +1 -0
- package/dist/core/transforms/search/bm25.engine.d.ts +46 -0
- package/dist/core/transforms/search/bm25.engine.d.ts.map +1 -0
- package/dist/core/transforms/search/bm25.engine.js +160 -0
- package/dist/core/transforms/search/bm25.engine.js.map +1 -0
- package/dist/core/transforms/search/index.d.ts +9 -0
- package/dist/core/transforms/search/index.d.ts.map +1 -0
- package/dist/core/transforms/search/index.js +9 -0
- package/dist/core/transforms/search/index.js.map +1 -0
- package/dist/core/transforms/search/regex-match.worker.d.ts +2 -0
- package/dist/core/transforms/search/regex-match.worker.d.ts.map +1 -0
- package/dist/core/transforms/search/regex-match.worker.js +19 -0
- package/dist/core/transforms/search/regex-match.worker.js.map +1 -0
- package/dist/core/transforms/search/regex-search.transform.d.ts +41 -0
- package/dist/core/transforms/search/regex-search.transform.d.ts.map +1 -0
- package/dist/core/transforms/search/regex-search.transform.js +237 -0
- package/dist/core/transforms/search/regex-search.transform.js.map +1 -0
- package/dist/core/transforms/search/synthetic-tools.d.ts +11 -0
- package/dist/core/transforms/search/synthetic-tools.d.ts.map +1 -0
- package/dist/core/transforms/search/synthetic-tools.js +76 -0
- package/dist/core/transforms/search/synthetic-tools.js.map +1 -0
- package/dist/core/transforms/search/tokenizer.d.ts +11 -0
- package/dist/core/transforms/search/tokenizer.d.ts.map +1 -0
- package/dist/core/transforms/search/tokenizer.js +38 -0
- package/dist/core/transforms/search/tokenizer.js.map +1 -0
- package/dist/core/transforms/search/tool-serializer.d.ts +6 -0
- package/dist/core/transforms/search/tool-serializer.d.ts.map +1 -0
- package/dist/core/transforms/search/tool-serializer.js +41 -0
- package/dist/core/transforms/search/tool-serializer.js.map +1 -0
- package/dist/core/transforms/search/types.d.ts +36 -0
- package/dist/core/transforms/search/types.d.ts.map +1 -0
- package/dist/core/transforms/search/types.js +2 -0
- package/dist/core/transforms/search/types.js.map +1 -0
- package/dist/core/transforms/tool-cache-key.d.ts +15 -0
- package/dist/core/transforms/tool-cache-key.d.ts.map +1 -0
- package/dist/core/transforms/tool-cache-key.js +61 -0
- package/dist/core/transforms/tool-cache-key.js.map +1 -0
- package/dist/core/transforms/transform.interface.d.ts +34 -0
- package/dist/core/transforms/transform.interface.d.ts.map +1 -0
- package/dist/core/transforms/transform.interface.js +2 -0
- package/dist/core/transforms/transform.interface.js.map +1 -0
- package/dist/core/transforms/validate-tool-arguments.d.ts +10 -0
- package/dist/core/transforms/validate-tool-arguments.d.ts.map +1 -0
- package/dist/core/transforms/validate-tool-arguments.js +62 -0
- package/dist/core/transforms/validate-tool-arguments.js.map +1 -0
- package/dist/core/transforms/visibility/index.d.ts +3 -0
- package/dist/core/transforms/visibility/index.d.ts.map +1 -0
- package/dist/core/transforms/visibility/index.js +3 -0
- package/dist/core/transforms/visibility/index.js.map +1 -0
- package/dist/core/transforms/visibility/session-store.d.ts +132 -0
- package/dist/core/transforms/visibility/session-store.d.ts.map +1 -0
- package/dist/core/transforms/visibility/session-store.js +330 -0
- package/dist/core/transforms/visibility/session-store.js.map +1 -0
- package/dist/core/transforms/visibility/visibility.transform.d.ts +42 -0
- package/dist/core/transforms/visibility/visibility.transform.d.ts.map +1 -0
- package/dist/core/transforms/visibility/visibility.transform.js +109 -0
- package/dist/core/transforms/visibility/visibility.transform.js.map +1 -0
- package/dist/core/types.d.ts +60 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +3 -0
- package/dist/testing/index.js.map +1 -1
- package/package.json +8 -2
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { getQuickJS } from 'quickjs-emscripten';
|
|
2
|
+
/**
|
|
3
|
+
* Converts a JavaScript value to a QuickJS handle using JSON parsing in the context.
|
|
4
|
+
*/
|
|
5
|
+
function jsonToHandle(context, value) {
|
|
6
|
+
const jsonGlobal = context.getProp(context.global, 'JSON');
|
|
7
|
+
const parseFn = context.getProp(jsonGlobal, 'parse');
|
|
8
|
+
let serialized;
|
|
9
|
+
try {
|
|
10
|
+
serialized = JSON.stringify(value === undefined ? null : value);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
serialized = JSON.stringify(String(value));
|
|
14
|
+
}
|
|
15
|
+
const jsonStr = context.newString(serialized);
|
|
16
|
+
try {
|
|
17
|
+
const res = context.callFunction(parseFn, jsonGlobal, jsonStr);
|
|
18
|
+
return context.unwrapResult(res);
|
|
19
|
+
}
|
|
20
|
+
finally {
|
|
21
|
+
jsonStr.dispose();
|
|
22
|
+
parseFn.dispose();
|
|
23
|
+
jsonGlobal.dispose();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Executes all pending microtask jobs in the QuickJS runtime.
|
|
28
|
+
*/
|
|
29
|
+
function pumpMicrotasks(runtime) {
|
|
30
|
+
while (runtime.hasPendingJob()) {
|
|
31
|
+
const res = runtime.executePendingJobs();
|
|
32
|
+
if (res && 'error' in res && res.error) {
|
|
33
|
+
res.error.dispose();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Formats error details into a clean, human- and model-legible message.
|
|
39
|
+
*/
|
|
40
|
+
function extractErrorMessage(dumped, limits) {
|
|
41
|
+
if (dumped && typeof dumped === 'object') {
|
|
42
|
+
const d = dumped;
|
|
43
|
+
if (d.name === 'InternalError' && d.message === 'interrupted') {
|
|
44
|
+
return `Execution interrupted: timeout exceeded (${limits.timeoutMs}ms)`;
|
|
45
|
+
}
|
|
46
|
+
if (d.name === 'InternalError' && d.message === 'out of memory') {
|
|
47
|
+
return `out of memory: exceeded heap limit of ${limits.memoryLimitMb}MB`;
|
|
48
|
+
}
|
|
49
|
+
if (typeof d.message === 'string' && d.message.length > 0) {
|
|
50
|
+
return d.message;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return String(dumped);
|
|
54
|
+
}
|
|
55
|
+
function byteCount(computed) {
|
|
56
|
+
if (typeof computed === 'number' && Number.isFinite(computed))
|
|
57
|
+
return computed;
|
|
58
|
+
if (!computed || typeof computed !== 'object')
|
|
59
|
+
return undefined;
|
|
60
|
+
const record = computed;
|
|
61
|
+
for (const key of ['memory_used_size', 'malloc_size', 'bytes']) {
|
|
62
|
+
const value = record[key];
|
|
63
|
+
if (typeof value === 'number' && Number.isFinite(value))
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Memory used by a QuickJS runtime, in megabytes.
|
|
70
|
+
* Prefers a numeric reading. The text dump is the fallback, and a format
|
|
71
|
+
* change or a missing API reports 0 rather than failing the script.
|
|
72
|
+
*/
|
|
73
|
+
export function memoryUsedMb(runtime) {
|
|
74
|
+
try {
|
|
75
|
+
if (typeof runtime.computeMemoryUsage === 'function') {
|
|
76
|
+
const computed = runtime.computeMemoryUsage();
|
|
77
|
+
const bytes = byteCount(computed);
|
|
78
|
+
const dispose = computed?.dispose;
|
|
79
|
+
if (typeof dispose === 'function') {
|
|
80
|
+
try {
|
|
81
|
+
dispose.call(computed);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Handle was already released.
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (bytes !== undefined)
|
|
88
|
+
return bytes / (1024 * 1024);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Fall through to the text dump.
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
const dump = runtime.dumpMemoryUsage?.() ?? '';
|
|
96
|
+
const match = dump.match(/memory used\s+\d+\s+(\d+)/);
|
|
97
|
+
if (match?.[1])
|
|
98
|
+
return parseInt(match[1], 10) / (1024 * 1024);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Telemetry only.
|
|
102
|
+
}
|
|
103
|
+
return 0;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Evaluates JavaScript guest code inside an isolated QuickJS WebAssembly sandbox.
|
|
107
|
+
* Supports async callTool bridging across IPC/host dispatcher, microtask pumping,
|
|
108
|
+
* console capturing, circuit breaker enforcement, and 2-tier timeout protection.
|
|
109
|
+
*/
|
|
110
|
+
export async function evaluateGuestScript(code, limits, ipcToolDispatcher) {
|
|
111
|
+
const QuickJS = await getQuickJS();
|
|
112
|
+
const runtime = QuickJS.newRuntime();
|
|
113
|
+
const context = runtime.newContext();
|
|
114
|
+
const logs = [];
|
|
115
|
+
const pendingDeferreds = new Set();
|
|
116
|
+
let toolCallCount = 0;
|
|
117
|
+
const startTime = Date.now();
|
|
118
|
+
const deadline = startTime + limits.timeoutMs;
|
|
119
|
+
try {
|
|
120
|
+
// 1. Enforce memory constraints
|
|
121
|
+
runtime.setMemoryLimit(limits.memoryLimitMb * 1024 * 1024);
|
|
122
|
+
runtime.setMaxStackSize(1024 * 1024);
|
|
123
|
+
// 2. Tier 1: Soft Interrupt Handler
|
|
124
|
+
runtime.setInterruptHandler(() => Date.now() > deadline);
|
|
125
|
+
// 3. Inject sandboxed console
|
|
126
|
+
const consoleHandle = context.newObject();
|
|
127
|
+
const createLogFn = (level) => {
|
|
128
|
+
return context.newFunction(level, (...args) => {
|
|
129
|
+
if (logs.length >= 100)
|
|
130
|
+
return;
|
|
131
|
+
const msg = args
|
|
132
|
+
.map((a) => {
|
|
133
|
+
const d = context.dump(a);
|
|
134
|
+
return typeof d === 'string' ? d : JSON.stringify(d);
|
|
135
|
+
})
|
|
136
|
+
.join(' ');
|
|
137
|
+
logs.push({
|
|
138
|
+
level,
|
|
139
|
+
message: msg.length > 2000 ? `${msg.slice(0, 2000)}…` : msg,
|
|
140
|
+
timestamp: Date.now(),
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
const logFn = createLogFn('log');
|
|
145
|
+
const warnFn = createLogFn('warn');
|
|
146
|
+
const errorFn = createLogFn('error');
|
|
147
|
+
context.setProp(consoleHandle, 'log', logFn);
|
|
148
|
+
context.setProp(consoleHandle, 'warn', warnFn);
|
|
149
|
+
context.setProp(consoleHandle, 'error', errorFn);
|
|
150
|
+
context.setProp(context.global, 'console', consoleHandle);
|
|
151
|
+
consoleHandle.dispose();
|
|
152
|
+
logFn.dispose();
|
|
153
|
+
warnFn.dispose();
|
|
154
|
+
errorFn.dispose();
|
|
155
|
+
// 4. Inject callTool() with Promise bridging
|
|
156
|
+
const callToolFn = context.newFunction('callTool', (nameHandle, argsHandle) => {
|
|
157
|
+
toolCallCount++;
|
|
158
|
+
if (toolCallCount > limits.maxToolCalls) {
|
|
159
|
+
throw new Error(`Circuit breaker: exceeded maximum allowed tool calls (${limits.maxToolCalls})`);
|
|
160
|
+
}
|
|
161
|
+
let toolName = '';
|
|
162
|
+
try {
|
|
163
|
+
toolName = context.getString(nameHandle);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
toolName = String(context.dump(nameHandle));
|
|
167
|
+
}
|
|
168
|
+
const toolArgs = (context.dump(argsHandle) || {});
|
|
169
|
+
const deferred = context.newPromise();
|
|
170
|
+
pendingDeferreds.add(deferred);
|
|
171
|
+
// Dispatch async call across IPC boundary
|
|
172
|
+
ipcToolDispatcher(toolName, toolArgs)
|
|
173
|
+
.then((result) => {
|
|
174
|
+
if (!context.alive)
|
|
175
|
+
return;
|
|
176
|
+
const valHandle = jsonToHandle(context, result);
|
|
177
|
+
deferred.resolve(valHandle);
|
|
178
|
+
valHandle.dispose();
|
|
179
|
+
})
|
|
180
|
+
.catch((err) => {
|
|
181
|
+
if (!context.alive)
|
|
182
|
+
return;
|
|
183
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
184
|
+
const errHandle = context.newError(errMsg);
|
|
185
|
+
deferred.reject(errHandle);
|
|
186
|
+
errHandle.dispose();
|
|
187
|
+
})
|
|
188
|
+
.finally(() => {
|
|
189
|
+
pendingDeferreds.delete(deferred);
|
|
190
|
+
if (!context.alive)
|
|
191
|
+
return;
|
|
192
|
+
// The deferred owns resolve/reject handles distinct from the one returned
|
|
193
|
+
// below; without this they accumulate against the guest heap limit.
|
|
194
|
+
deferred.dispose();
|
|
195
|
+
pumpMicrotasks(runtime);
|
|
196
|
+
});
|
|
197
|
+
return deferred.handle;
|
|
198
|
+
});
|
|
199
|
+
context.setProp(context.global, 'callTool', callToolFn);
|
|
200
|
+
callToolFn.dispose();
|
|
201
|
+
// 5. Wrap guest code in an async IIFE and evaluate
|
|
202
|
+
const wrappedCode = `(async () => {\n${code}\n})()`;
|
|
203
|
+
const evalResult = context.evalCode(wrappedCode);
|
|
204
|
+
if (evalResult.error) {
|
|
205
|
+
const errorMsg = extractErrorMessage(context.dump(evalResult.error), limits);
|
|
206
|
+
evalResult.error.dispose();
|
|
207
|
+
return {
|
|
208
|
+
success: false,
|
|
209
|
+
error: errorMsg,
|
|
210
|
+
logs,
|
|
211
|
+
toolCallCount,
|
|
212
|
+
durationMs: Date.now() - startTime,
|
|
213
|
+
memoryUsedMb: memoryUsedMb(runtime),
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
// 6. Await promise resolution with microtask event-loop pumping
|
|
217
|
+
const promiseHandle = evalResult.value;
|
|
218
|
+
let success = false;
|
|
219
|
+
let resultValue = undefined;
|
|
220
|
+
let errorMessage = undefined;
|
|
221
|
+
try {
|
|
222
|
+
while (true) {
|
|
223
|
+
pumpMicrotasks(runtime);
|
|
224
|
+
const state = context.getPromiseState(promiseHandle);
|
|
225
|
+
if (state.type === 'fulfilled') {
|
|
226
|
+
resultValue = context.dump(state.value);
|
|
227
|
+
state.value.dispose();
|
|
228
|
+
success = true;
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
else if (state.type === 'rejected') {
|
|
232
|
+
const dumped = context.dump(state.error);
|
|
233
|
+
state.error.dispose();
|
|
234
|
+
success = false;
|
|
235
|
+
errorMessage = extractErrorMessage(dumped, limits);
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
if (Date.now() > deadline) {
|
|
239
|
+
success = false;
|
|
240
|
+
errorMessage = `Execution interrupted: timeout exceeded (${limits.timeoutMs}ms)`;
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
// Yield to Node event loop for IPC message delivery and promise settling
|
|
244
|
+
await new Promise((resolve) => setTimeout(resolve, 2));
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
finally {
|
|
248
|
+
promiseHandle.dispose();
|
|
249
|
+
}
|
|
250
|
+
const usedMb = memoryUsedMb(runtime);
|
|
251
|
+
return {
|
|
252
|
+
success,
|
|
253
|
+
value: success ? resultValue : undefined,
|
|
254
|
+
error: success ? undefined : errorMessage,
|
|
255
|
+
logs,
|
|
256
|
+
toolCallCount,
|
|
257
|
+
durationMs: Date.now() - startTime,
|
|
258
|
+
memoryUsedMb: usedMb,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
finally {
|
|
262
|
+
// A timed-out script can still own callTool deferreds. Free them before the
|
|
263
|
+
// runtime or QuickJS aborts in JS_FreeRuntime.
|
|
264
|
+
for (const deferred of pendingDeferreds) {
|
|
265
|
+
try {
|
|
266
|
+
deferred.dispose();
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
// Already released by the tool-call settlement path.
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
pendingDeferreds.clear();
|
|
273
|
+
context.dispose();
|
|
274
|
+
runtime.dispose();
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=guest-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest-evaluator.js","sourceRoot":"","sources":["../../../../src/core/transforms/code-mode/guest-evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export * from './sandbox.interface.js';
|
|
3
|
+
export * from './legible-error.js';
|
|
4
|
+
export * from './ipc-messages.js';
|
|
5
|
+
export * from './worker-pool.js';
|
|
6
|
+
export * from './guest-evaluator.js';
|
|
7
|
+
export * from './quickjs-wasm.provider.js';
|
|
8
|
+
export * from './destructive-guard.js';
|
|
9
|
+
export * from './synthetic-tools.js';
|
|
10
|
+
export * from './code-mode.transform.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/transforms/code-mode/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export * from './sandbox.interface.js';
|
|
3
|
+
export * from './legible-error.js';
|
|
4
|
+
export * from './ipc-messages.js';
|
|
5
|
+
export * from './worker-pool.js';
|
|
6
|
+
export * from './guest-evaluator.js';
|
|
7
|
+
export * from './quickjs-wasm.provider.js';
|
|
8
|
+
export * from './destructive-guard.js';
|
|
9
|
+
export * from './synthetic-tools.js';
|
|
10
|
+
export * from './code-mode.transform.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/transforms/code-mode/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ExecutionLimits, SandboxExecutionResult } from './types.js';
|
|
2
|
+
export type HostToWorkerMessage = {
|
|
3
|
+
type: 'EXECUTE';
|
|
4
|
+
taskId: string;
|
|
5
|
+
code: string;
|
|
6
|
+
limits: ExecutionLimits;
|
|
7
|
+
} | {
|
|
8
|
+
type: 'TOOL_RESPONSE';
|
|
9
|
+
taskId: string;
|
|
10
|
+
callId: string;
|
|
11
|
+
result?: unknown;
|
|
12
|
+
error?: string;
|
|
13
|
+
} | {
|
|
14
|
+
type: 'SHUTDOWN';
|
|
15
|
+
};
|
|
16
|
+
export type WorkerToHostMessage = {
|
|
17
|
+
type: 'TOOL_REQUEST';
|
|
18
|
+
taskId: string;
|
|
19
|
+
callId: string;
|
|
20
|
+
toolName: string;
|
|
21
|
+
args: Record<string, unknown>;
|
|
22
|
+
} | {
|
|
23
|
+
type: 'EXECUTION_COMPLETE';
|
|
24
|
+
taskId: string;
|
|
25
|
+
result: SandboxExecutionResult;
|
|
26
|
+
} | {
|
|
27
|
+
type: 'EXECUTION_FAILED';
|
|
28
|
+
taskId: string;
|
|
29
|
+
error: string;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=ipc-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipc-messages.d.ts","sourceRoot":"","sources":["../../../../src/core/transforms/code-mode/ipc-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGrE,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3F;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAGzB,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACzG;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,GAC9E;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipc-messages.js","sourceRoot":"","sources":["../../../../src/core/transforms/code-mode/ipc-messages.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Tool } from '../../tool.js';
|
|
2
|
+
/**
|
|
3
|
+
* When guest sandbox code calls a tool with invalid or missing arguments,
|
|
4
|
+
* formatLegibleToolError extracts the canonical parameter schema and formats
|
|
5
|
+
* an actionable, self-correcting error message for the LLM.
|
|
6
|
+
*/
|
|
7
|
+
export declare function formatLegibleToolError(tool: Tool, rawError: unknown): Promise<string>;
|
|
8
|
+
//# sourceMappingURL=legible-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legible-error.d.ts","sourceRoot":"","sources":["../../../../src/core/transforms/code-mode/legible-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAY3F"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* When guest sandbox code calls a tool with invalid or missing arguments,
|
|
3
|
+
* formatLegibleToolError extracts the canonical parameter schema and formats
|
|
4
|
+
* an actionable, self-correcting error message for the LLM.
|
|
5
|
+
*/
|
|
6
|
+
export async function formatLegibleToolError(tool, rawError) {
|
|
7
|
+
const mcpTool = await tool.toMcpTool();
|
|
8
|
+
const schema = mcpTool.inputSchema || {};
|
|
9
|
+
const properties = schema?.properties || {};
|
|
10
|
+
const requiredSet = new Set(Array.isArray(schema?.required) ? schema.required : []);
|
|
11
|
+
const paramSummary = Object.keys(properties)
|
|
12
|
+
.map((key) => `${key}${requiredSet.has(key) ? '*' : ''}`)
|
|
13
|
+
.join(', ');
|
|
14
|
+
const baseMessage = rawError instanceof Error ? rawError.message : String(rawError);
|
|
15
|
+
return `callTool('${tool.name}') failed: ${baseMessage}\nValid parameters for ${tool.name} (* = required): ${paramSummary || '(none)'}`;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=legible-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legible-error.js","sourceRoot":"","sources":["../../../../src/core/transforms/code-mode/legible-error.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAU,EAAE,QAAiB;IACxE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IACvC,MAAM,MAAM,GAAI,OAAO,CAAC,WAAmC,IAAI,EAAE,CAAC;IAClE,MAAM,UAAU,GAAG,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEpF,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;SACzC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;SACxD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,WAAW,GAAG,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpF,OAAO,aAAa,IAAI,CAAC,IAAI,cAAc,WAAW,0BAA0B,IAAI,CAAC,IAAI,oBAAoB,YAAY,IAAI,QAAQ,EAAE,CAAC;AAC1I,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ExecutionContext } from '../../types.js';
|
|
2
|
+
import { SandboxProvider, ToolDispatcher } from './sandbox.interface.js';
|
|
3
|
+
import { ExecutionLimits, SandboxExecutionResult } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Sandboxed execution provider utilizing QuickJS compiled to WebAssembly.
|
|
6
|
+
* Guarantees memory isolation and cross-platform zero-dependency execution.
|
|
7
|
+
*/
|
|
8
|
+
export declare class QuickJsWasmSandboxProvider implements SandboxProvider {
|
|
9
|
+
readonly name = "quickjs-wasm";
|
|
10
|
+
/**
|
|
11
|
+
* Warms the QuickJS WebAssembly module so the first execute() does not pay for
|
|
12
|
+
* compilation. `getQuickJS` memoizes process-wide, so there is nothing to cache here.
|
|
13
|
+
*/
|
|
14
|
+
initialize(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Executes a user-provided script in the QuickJS WebAssembly sandbox.
|
|
17
|
+
*/
|
|
18
|
+
execute(code: string, dispatcher: ToolDispatcher, limits: ExecutionLimits, context?: ExecutionContext): Promise<SandboxExecutionResult>;
|
|
19
|
+
/**
|
|
20
|
+
* No-op: each execute() builds and tears down its own runtime and context, and the
|
|
21
|
+
* WebAssembly module itself is shared process-wide rather than owned here.
|
|
22
|
+
*/
|
|
23
|
+
dispose(): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=quickjs-wasm.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickjs-wasm.provider.d.ts","sourceRoot":"","sources":["../../../../src/core/transforms/code-mode/quickjs-wasm.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGrE;;;GAGG;AACH,qBAAa,0BAA2B,YAAW,eAAe;IAChE,QAAQ,CAAC,IAAI,kBAAkB;IAE/B;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,sBAAsB,CAAC;IASlC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { getQuickJS } from 'quickjs-emscripten';
|
|
2
|
+
import { evaluateGuestScript } from './guest-evaluator.js';
|
|
3
|
+
/**
|
|
4
|
+
* Sandboxed execution provider utilizing QuickJS compiled to WebAssembly.
|
|
5
|
+
* Guarantees memory isolation and cross-platform zero-dependency execution.
|
|
6
|
+
*/
|
|
7
|
+
export class QuickJsWasmSandboxProvider {
|
|
8
|
+
name = 'quickjs-wasm';
|
|
9
|
+
/**
|
|
10
|
+
* Warms the QuickJS WebAssembly module so the first execute() does not pay for
|
|
11
|
+
* compilation. `getQuickJS` memoizes process-wide, so there is nothing to cache here.
|
|
12
|
+
*/
|
|
13
|
+
async initialize() {
|
|
14
|
+
await getQuickJS();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Executes a user-provided script in the QuickJS WebAssembly sandbox.
|
|
18
|
+
*/
|
|
19
|
+
async execute(code, dispatcher, limits, context) {
|
|
20
|
+
await this.initialize();
|
|
21
|
+
return evaluateGuestScript(code, limits, (toolName, args) => dispatcher(toolName, args, context));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* No-op: each execute() builds and tears down its own runtime and context, and the
|
|
25
|
+
* WebAssembly module itself is shared process-wide rather than owned here.
|
|
26
|
+
*/
|
|
27
|
+
async dispose() {
|
|
28
|
+
// Nothing to release.
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=quickjs-wasm.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickjs-wasm.provider.js","sourceRoot":"","sources":["../../../../src/core/transforms/code-mode/quickjs-wasm.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;GAGG;AACH,MAAM,OAAO,0BAA0B;IAC5B,IAAI,GAAG,cAAc,CAAC;IAE/B;;;OAGG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,IAAY,EACZ,UAA0B,EAC1B,MAAuB,EACvB,OAA0B;QAE1B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,mBAAmB,CACxB,IAAI,EACJ,MAAM,EACN,CAAC,QAAgB,EAAE,IAA6B,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CACzF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO;QACX,sBAAsB;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ExecutionContext } from '../../types.js';
|
|
2
|
+
import { ExecutionLimits, SandboxExecutionResult } from './types.js';
|
|
3
|
+
export type ToolDispatcher = (name: string, args: Record<string, unknown>, context?: ExecutionContext) => Promise<unknown>;
|
|
4
|
+
export interface SandboxProvider {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
initialize(): Promise<void>;
|
|
7
|
+
execute(code: string, dispatcher: ToolDispatcher, limits: ExecutionLimits, context?: ExecutionContext): Promise<SandboxExecutionResult>;
|
|
8
|
+
dispose(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=sandbox.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.interface.d.ts","sourceRoot":"","sources":["../../../../src/core/transforms/code-mode/sandbox.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAErE,MAAM,MAAM,cAAc,GAAG,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,gBAAgB,KACvB,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.interface.js","sourceRoot":"","sources":["../../../../src/core/transforms/code-mode/sandbox.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.worker.d.ts","sourceRoot":"","sources":["../../../../src/core/transforms/code-mode/sandbox.worker.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { parentPort } from 'node:worker_threads';
|
|
2
|
+
import { evaluateGuestScript } from './guest-evaluator.js';
|
|
3
|
+
if (parentPort) {
|
|
4
|
+
const pendingToolCalls = new Map();
|
|
5
|
+
parentPort.on('message', async (msg) => {
|
|
6
|
+
if (msg.type === 'SHUTDOWN') {
|
|
7
|
+
process.exit(0);
|
|
8
|
+
}
|
|
9
|
+
if (msg.type === 'TOOL_RESPONSE') {
|
|
10
|
+
const pending = pendingToolCalls.get(msg.callId);
|
|
11
|
+
if (pending) {
|
|
12
|
+
pendingToolCalls.delete(msg.callId);
|
|
13
|
+
if (msg.error) {
|
|
14
|
+
pending.reject(new Error(msg.error));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
pending.resolve(msg.result);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (msg.type === 'EXECUTE') {
|
|
23
|
+
try {
|
|
24
|
+
const result = await evaluateGuestScript(msg.code, msg.limits, (toolName, args) => {
|
|
25
|
+
const callId = crypto.randomUUID();
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
pendingToolCalls.set(callId, { resolve, reject });
|
|
28
|
+
parentPort.postMessage({
|
|
29
|
+
type: 'TOOL_REQUEST',
|
|
30
|
+
taskId: msg.taskId,
|
|
31
|
+
callId,
|
|
32
|
+
toolName,
|
|
33
|
+
args: args || {},
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
parentPort.postMessage({
|
|
38
|
+
type: 'EXECUTION_COMPLETE',
|
|
39
|
+
taskId: msg.taskId,
|
|
40
|
+
result,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
const result = {
|
|
45
|
+
success: false,
|
|
46
|
+
error: err instanceof Error ? err.message : String(err),
|
|
47
|
+
logs: [],
|
|
48
|
+
toolCallCount: 0,
|
|
49
|
+
durationMs: 0,
|
|
50
|
+
memoryUsedMb: 0,
|
|
51
|
+
};
|
|
52
|
+
parentPort.postMessage({
|
|
53
|
+
type: 'EXECUTION_COMPLETE',
|
|
54
|
+
taskId: msg.taskId,
|
|
55
|
+
result,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
// A script that ended (timeout, throw, or return) must not leave callTool
|
|
60
|
+
// promises pending for the life of the worker.
|
|
61
|
+
for (const pending of pendingToolCalls.values()) {
|
|
62
|
+
pending.reject(new Error('callTool interrupted: script execution ended'));
|
|
63
|
+
}
|
|
64
|
+
pendingToolCalls.clear();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=sandbox.worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.worker.js","sourceRoot":"","sources":["../../../../src/core/transforms/code-mode/sandbox.worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Tool } from '../../tool.js';
|
|
2
|
+
import { ExecutionContext } from '../../types.js';
|
|
3
|
+
import { BM25Engine } from '../search/bm25.engine.js';
|
|
4
|
+
import { WorkerPool } from './worker-pool.js';
|
|
5
|
+
import { ExecutionLimits } from './types.js';
|
|
6
|
+
export interface CodeModeSyntheticToolNames {
|
|
7
|
+
searchToolName?: string;
|
|
8
|
+
getSchemaToolName?: string;
|
|
9
|
+
executeToolName?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Narrows a set of tool names to those the caller is authorized to see.
|
|
13
|
+
*/
|
|
14
|
+
export type AuthorizedToolFilter = (names: string[], context?: ExecutionContext) => Promise<Tool[]>;
|
|
15
|
+
/**
|
|
16
|
+
* Builds the 3 synthetic meta-tools (search, get_schema, execute) for Code Mode.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildCodeModeTools(bm25Engine: BM25Engine<Tool>, rawTools: Map<string, Tool>, workerPool: WorkerPool, limits: ExecutionLimits, customNames?: CodeModeSyntheticToolNames, filterAuthorized?: AuthorizedToolFilter): {
|
|
19
|
+
searchTool: Tool;
|
|
20
|
+
getSchemaTool: Tool;
|
|
21
|
+
executeTool: Tool;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=synthetic-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthetic-tools.d.ts","sourceRoot":"","sources":["../../../../src/core/transforms/code-mode/synthetic-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,0BAA0B;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,CAAC,EAAE,gBAAgB,KACvB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAErB;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,EAC5B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EAC3B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,eAAe,EACvB,WAAW,GAAE,0BAA+B,EAC5C,gBAAgB,GAAE,oBAC2D,GAC5E;IAAE,UAAU,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,IAAI,CAAA;CAAE,CAwH9D"}
|