@execbox/core 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +11 -10
  2. package/dist/errors-CTel18cM.cjs +79 -0
  3. package/dist/errors-CTel18cM.cjs.map +1 -0
  4. package/dist/errors-CgBwm39w.js +61 -0
  5. package/dist/errors-CgBwm39w.js.map +1 -0
  6. package/dist/executor-B-Qe_q5_.d.ts +29 -0
  7. package/dist/executor-B-Qe_q5_.d.ts.map +1 -0
  8. package/dist/executor-C7YjuD7r.d.cts +29 -0
  9. package/dist/executor-C7YjuD7r.d.cts.map +1 -0
  10. package/dist/index.cjs +16 -186
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +6 -2
  13. package/dist/index.d.cts.map +1 -1
  14. package/dist/index.d.ts +6 -2
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +3 -173
  17. package/dist/index.js.map +1 -1
  18. package/dist/mcp/index.cjs +2 -1
  19. package/dist/mcp/index.cjs.map +1 -1
  20. package/dist/mcp/index.d.cts +7 -3
  21. package/dist/mcp/index.d.cts.map +1 -1
  22. package/dist/mcp/index.d.ts +7 -3
  23. package/dist/mcp/index.d.ts.map +1 -1
  24. package/dist/mcp/index.js +2 -1
  25. package/dist/mcp/index.js.map +1 -1
  26. package/dist/protocol/index.cjs +345 -0
  27. package/dist/protocol/index.cjs.map +1 -0
  28. package/dist/protocol/index.d.cts +169 -0
  29. package/dist/protocol/index.d.cts.map +1 -0
  30. package/dist/protocol/index.d.ts +169 -0
  31. package/dist/protocol/index.d.ts.map +1 -0
  32. package/dist/protocol/index.js +341 -0
  33. package/dist/protocol/index.js.map +1 -0
  34. package/dist/{resolveProvider-CixOjPKp.cjs → resolveProvider-D__uEvDj.cjs} +17 -85
  35. package/dist/resolveProvider-D__uEvDj.cjs.map +1 -0
  36. package/dist/{resolveProvider-CUxAvFCK.js → resolveProvider-TuOLZT2_.js} +13 -63
  37. package/dist/resolveProvider-TuOLZT2_.js.map +1 -0
  38. package/dist/runner-8eVWfKxh.js +176 -0
  39. package/dist/runner-8eVWfKxh.js.map +1 -0
  40. package/dist/{executor-B_S-ZRgM.d.ts → runner-BJu1lZFi.d.cts} +6 -22
  41. package/dist/runner-BJu1lZFi.d.cts.map +1 -0
  42. package/dist/{executor-CLQwhiIE.d.cts → runner-CbC-ncVb.d.ts} +6 -22
  43. package/dist/runner-CbC-ncVb.d.ts.map +1 -0
  44. package/dist/runner-Dt--9M2r.cjs +235 -0
  45. package/dist/runner-Dt--9M2r.cjs.map +1 -0
  46. package/package.json +20 -3
  47. package/dist/executor-B_S-ZRgM.d.ts.map +0 -1
  48. package/dist/executor-CLQwhiIE.d.cts.map +0 -1
  49. package/dist/resolveProvider-CUxAvFCK.js.map +0 -1
  50. package/dist/resolveProvider-CixOjPKp.cjs.map +0 -1
@@ -0,0 +1,345 @@
1
+ const require_runner = require('../runner-Dt--9M2r.cjs');
2
+ require('../errors-CTel18cM.cjs');
3
+
4
+ //#region src/protocol/messages.ts
5
+ function isRecord(value) {
6
+ return typeof value === "object" && value !== null;
7
+ }
8
+ function isFiniteNumber(value) {
9
+ return typeof value === "number" && Number.isFinite(value);
10
+ }
11
+ function isRuntimeOptions(value) {
12
+ if (!isRecord(value)) return false;
13
+ return isFiniteNumber(value.maxLogChars) && isFiniteNumber(value.maxLogLines) && isFiniteNumber(value.memoryLimitBytes) && isFiniteNumber(value.timeoutMs);
14
+ }
15
+ function isProviderManifest(value) {
16
+ if (!isRecord(value) || typeof value.name !== "string") return false;
17
+ if (!isRecord(value.tools) || typeof value.types !== "string") return false;
18
+ return Object.values(value.tools).every((tool) => isRecord(tool) && typeof tool.originalName === "string" && typeof tool.safeName === "string" && (tool.description === void 0 || typeof tool.description === "string"));
19
+ }
20
+ function isExecuteError(value) {
21
+ return isRecord(value) && typeof value.code === "string" && typeof value.message === "string";
22
+ }
23
+ function isDonePayload(value) {
24
+ if (!isRecord(value) || !isFiniteNumber(value.durationMs)) return false;
25
+ if (!Array.isArray(value.logs) || !value.logs.every((log) => typeof log === "string")) return false;
26
+ if (typeof value.ok !== "boolean") return false;
27
+ return value.ok ? true : isExecuteError(value.error);
28
+ }
29
+ /**
30
+ * Returns whether an unknown value is a dispatcher-to-runner message.
31
+ */
32
+ function isDispatcherMessage(value) {
33
+ if (!isRecord(value) || typeof value.type !== "string") return false;
34
+ switch (value.type) {
35
+ case "cancel": return typeof value.id === "string";
36
+ case "execute": return typeof value.code === "string" && typeof value.id === "string" && isRuntimeOptions(value.options) && Array.isArray(value.providers) && value.providers.every(isProviderManifest);
37
+ case "tool_result":
38
+ if (typeof value.callId !== "string" || typeof value.ok !== "boolean") return false;
39
+ if (value.ok) return "result" in value;
40
+ return isExecuteError(value.error);
41
+ default: return false;
42
+ }
43
+ }
44
+ /**
45
+ * Returns whether an unknown value is a runner-to-dispatcher message.
46
+ */
47
+ function isRunnerMessage(value) {
48
+ if (!isRecord(value) || typeof value.type !== "string") return false;
49
+ switch (value.type) {
50
+ case "started": return typeof value.id === "string";
51
+ case "tool_call": return typeof value.callId === "string" && typeof value.providerName === "string" && typeof value.safeToolName === "string" && "input" in value;
52
+ case "done": return typeof value.id === "string" && isDonePayload(value);
53
+ default: return false;
54
+ }
55
+ }
56
+
57
+ //#endregion
58
+ //#region src/protocol/hostSession.ts
59
+ const DEFAULT_CANCEL_GRACE_MS = 25;
60
+ const HOST_TIMEOUT_BACKSTOP_MS = 100;
61
+ function toFailureResult(startedAt, timeoutTriggered, message) {
62
+ return {
63
+ durationMs: Date.now() - startedAt,
64
+ error: {
65
+ code: timeoutTriggered ? "timeout" : "internal_error",
66
+ message: timeoutTriggered ? require_runner.getExecutionTimeoutMessage() : message
67
+ },
68
+ logs: [],
69
+ ok: false
70
+ };
71
+ }
72
+ function normalizeDoneMessage(message) {
73
+ if (!message.ok) return {
74
+ durationMs: message.durationMs,
75
+ error: message.error,
76
+ logs: message.logs,
77
+ ok: false
78
+ };
79
+ return {
80
+ durationMs: message.durationMs,
81
+ logs: message.logs,
82
+ ok: true,
83
+ result: message.result
84
+ };
85
+ }
86
+ /**
87
+ * Runs one host-side transport session, including timeout, cancellation,
88
+ * tool-call dispatch, and result settlement.
89
+ */
90
+ async function runHostTransportSession(options) {
91
+ const startedAt = Date.now();
92
+ const abortController = new AbortController();
93
+ const dispatchToolCall = require_runner.createToolCallDispatcher(options.providers, abortController.signal);
94
+ const abortSignal = options.signal;
95
+ return await new Promise((resolve) => {
96
+ let finished = false;
97
+ let timeoutTriggered = false;
98
+ let cancellationStarted = false;
99
+ let forceTerminateTimer;
100
+ const cancelGraceMs = options.cancelGraceMs ?? DEFAULT_CANCEL_GRACE_MS;
101
+ const cleanup = () => {
102
+ finished = true;
103
+ abortController.abort();
104
+ if (timeoutTimer) clearTimeout(timeoutTimer);
105
+ if (forceTerminateTimer) clearTimeout(forceTerminateTimer);
106
+ offClose();
107
+ offError();
108
+ offMessage();
109
+ abortSignal?.removeEventListener("abort", onAbortSignal);
110
+ };
111
+ const finish = (result) => {
112
+ if (finished) return;
113
+ cleanup();
114
+ Promise.resolve(options.onSettled?.(result)).catch(() => {}).finally(() => {
115
+ Promise.resolve(options.transport.dispose()).catch(() => {});
116
+ });
117
+ resolve(result);
118
+ };
119
+ const fail = (message) => {
120
+ finish(toFailureResult(startedAt, timeoutTriggered, message));
121
+ };
122
+ const send = (message) => {
123
+ if (finished) return;
124
+ try {
125
+ const pendingSend = options.transport.send(message);
126
+ Promise.resolve(pendingSend).catch((error) => {
127
+ if (finished) return;
128
+ fail(error instanceof Error ? error.message : String(error));
129
+ });
130
+ } catch (error) {
131
+ fail(error instanceof Error ? error.message : String(error));
132
+ }
133
+ };
134
+ const startCancellation = () => {
135
+ if (finished || cancellationStarted) return;
136
+ cancellationStarted = true;
137
+ timeoutTriggered = true;
138
+ abortController.abort();
139
+ send({
140
+ id: options.executionId,
141
+ type: "cancel"
142
+ });
143
+ forceTerminateTimer = setTimeout(() => {
144
+ if (finished) return;
145
+ Promise.resolve(options.transport.terminate()).catch(() => {}).finally(() => {
146
+ if (finished) return;
147
+ finish(toFailureResult(startedAt, true, require_runner.getExecutionTimeoutMessage()));
148
+ });
149
+ }, cancelGraceMs);
150
+ };
151
+ const timeoutTimer = setTimeout(() => {
152
+ startCancellation();
153
+ }, options.runtimeOptions.timeoutMs + HOST_TIMEOUT_BACKSTOP_MS);
154
+ const onMessage = (message) => {
155
+ if (finished) return;
156
+ if (!isRunnerMessage(message)) return;
157
+ if ("id" in message && message.id !== options.executionId) return;
158
+ if (message.type === "started") return;
159
+ if (message.type === "tool_call") {
160
+ dispatchToolCall(message).then((result) => {
161
+ send({
162
+ ...result,
163
+ callId: message.callId,
164
+ type: "tool_result"
165
+ });
166
+ }).catch((error) => {
167
+ send({
168
+ callId: message.callId,
169
+ error: {
170
+ code: "internal_error",
171
+ message: error instanceof Error ? error.message : String(error)
172
+ },
173
+ ok: false,
174
+ type: "tool_result"
175
+ });
176
+ });
177
+ return;
178
+ }
179
+ finish(normalizeDoneMessage(message));
180
+ };
181
+ const onError = (error) => {
182
+ fail(error.message);
183
+ };
184
+ const onClose = (reason) => {
185
+ fail(reason?.message ?? "Transport closed unexpectedly");
186
+ };
187
+ const onAbortSignal = () => {
188
+ startCancellation();
189
+ };
190
+ const offMessage = options.transport.onMessage(onMessage);
191
+ const offError = options.transport.onError(onError);
192
+ const offClose = options.transport.onClose(onClose);
193
+ abortSignal?.addEventListener("abort", onAbortSignal, { once: true });
194
+ if (abortSignal?.aborted) {
195
+ startCancellation();
196
+ return;
197
+ }
198
+ send({
199
+ code: options.code,
200
+ id: options.executionId,
201
+ options: options.runtimeOptions,
202
+ providers: require_runner.extractProviderManifests(options.providers),
203
+ type: "execute"
204
+ });
205
+ });
206
+ }
207
+
208
+ //#endregion
209
+ //#region src/protocol/nodeBootstrap.ts
210
+ const SOURCE_MODE_EXEC_ARGV = [
211
+ "--conditions=source",
212
+ "--import",
213
+ "tsx"
214
+ ];
215
+ /**
216
+ * Returns the extra Node flags needed to launch transport-backed child entries
217
+ * directly from source during local development and tests.
218
+ */
219
+ function getNodeTransportExecArgv(moduleUrl) {
220
+ return moduleUrl.endsWith(".ts") ? [...SOURCE_MODE_EXEC_ARGV] : void 0;
221
+ }
222
+
223
+ //#endregion
224
+ //#region src/protocol/resourcePool.ts
225
+ function clampTarget(value, maxSize) {
226
+ return Math.max(0, Math.min(value, maxSize));
227
+ }
228
+ /**
229
+ * Creates a bounded async resource pool with optional idle eviction.
230
+ */
231
+ function createResourcePool(options) {
232
+ const available = [];
233
+ const waiters = [];
234
+ const inUse = /* @__PURE__ */ new Set();
235
+ let disposed = false;
236
+ let totalSize = 0;
237
+ const minSize = clampTarget(options.minSize ?? 0, options.maxSize);
238
+ const createEntry = async () => {
239
+ totalSize += 1;
240
+ try {
241
+ return {
242
+ idleTimer: void 0,
243
+ value: await options.create()
244
+ };
245
+ } catch (error) {
246
+ totalSize -= 1;
247
+ throw error;
248
+ }
249
+ };
250
+ const removeAvailableEntry = (entry) => {
251
+ const index = available.indexOf(entry);
252
+ if (index >= 0) available.splice(index, 1);
253
+ };
254
+ const clearIdleTimer = (entry) => {
255
+ if (entry.idleTimer) {
256
+ clearTimeout(entry.idleTimer);
257
+ entry.idleTimer = void 0;
258
+ }
259
+ };
260
+ const queueAvailableEntry = (entry) => {
261
+ available.push(entry);
262
+ if ((options.idleTimeoutMs ?? 0) > 0) entry.idleTimer = setTimeout(() => {
263
+ if (disposed) return;
264
+ if (available.includes(entry) && totalSize > minSize) destroyEntry(entry);
265
+ }, options.idleTimeoutMs);
266
+ };
267
+ const destroyEntry = async (entry) => {
268
+ clearIdleTimer(entry);
269
+ removeAvailableEntry(entry);
270
+ inUse.delete(entry);
271
+ totalSize -= 1;
272
+ await options.destroy(entry.value);
273
+ };
274
+ const leaseEntry = (entry) => {
275
+ clearIdleTimer(entry);
276
+ removeAvailableEntry(entry);
277
+ inUse.add(entry);
278
+ return {
279
+ release: async (reusable = true) => {
280
+ if (!inUse.has(entry)) return;
281
+ inUse.delete(entry);
282
+ if (disposed || !reusable) {
283
+ await destroyEntry(entry);
284
+ await fillWaiters();
285
+ return;
286
+ }
287
+ const waiter = waiters.shift();
288
+ if (waiter) {
289
+ waiter.resolve(leaseEntry(entry));
290
+ return;
291
+ }
292
+ queueAvailableEntry(entry);
293
+ },
294
+ value: entry.value
295
+ };
296
+ };
297
+ const fillWaiters = async () => {
298
+ while (!disposed && waiters.length > 0 && totalSize < options.maxSize) {
299
+ const waiter = waiters.shift();
300
+ if (!waiter) return;
301
+ try {
302
+ waiter.resolve(leaseEntry(await createEntry()));
303
+ } catch (error) {
304
+ waiter.reject(error instanceof Error ? error : new Error(String(error)));
305
+ }
306
+ }
307
+ };
308
+ return {
309
+ acquire: async () => {
310
+ if (disposed) throw new Error("Resource pool is disposed");
311
+ const entry = available.pop();
312
+ if (entry) return leaseEntry(entry);
313
+ if (totalSize < options.maxSize) return leaseEntry(await createEntry());
314
+ return await new Promise((resolve, reject) => {
315
+ waiters.push({
316
+ reject,
317
+ resolve
318
+ });
319
+ });
320
+ },
321
+ dispose: async () => {
322
+ if (disposed) return;
323
+ disposed = true;
324
+ while (waiters.length > 0) waiters.shift()?.reject(/* @__PURE__ */ new Error("Resource pool is disposed"));
325
+ const idleEntries = [...available];
326
+ available.length = 0;
327
+ await Promise.all(idleEntries.map((entry) => destroyEntry(entry)));
328
+ },
329
+ prewarm: async (count) => {
330
+ if (disposed) throw new Error("Resource pool is disposed");
331
+ const missing = clampTarget(count ?? minSize, options.maxSize) - totalSize;
332
+ if (missing <= 0) return;
333
+ const created = await Promise.all(Array.from({ length: missing }, async () => await createEntry()));
334
+ for (const entry of created) queueAvailableEntry(entry);
335
+ }
336
+ };
337
+ }
338
+
339
+ //#endregion
340
+ exports.createResourcePool = createResourcePool;
341
+ exports.getNodeTransportExecArgv = getNodeTransportExecArgv;
342
+ exports.isDispatcherMessage = isDispatcherMessage;
343
+ exports.isRunnerMessage = isRunnerMessage;
344
+ exports.runHostTransportSession = runHostTransportSession;
345
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["getExecutionTimeoutMessage","createToolCallDispatcher","forceTerminateTimer: NodeJS.Timeout | undefined","extractProviderManifests","available: PoolEntry<T>[]","waiters: Array<{\n reject: (error: Error) => void;\n resolve: (lease: ResourcePoolLease<T>) => void;\n }>"],"sources":["../../src/protocol/messages.ts","../../src/protocol/hostSession.ts","../../src/protocol/nodeBootstrap.ts","../../src/protocol/resourcePool.ts"],"sourcesContent":["import type {\n ExecutorRuntimeOptions,\n ProviderManifest,\n ToolCall,\n ToolCallResult,\n} from \"../runner.ts\";\nimport type { ExecuteResult } from \"../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction isRuntimeOptions(value: unknown): value is ExecutorRuntimeOptions {\n if (!isRecord(value)) {\n return false;\n }\n\n return (\n isFiniteNumber(value.maxLogChars) &&\n isFiniteNumber(value.maxLogLines) &&\n isFiniteNumber(value.memoryLimitBytes) &&\n isFiniteNumber(value.timeoutMs)\n );\n}\n\nfunction isProviderManifest(value: unknown): value is ProviderManifest {\n if (!isRecord(value) || typeof value.name !== \"string\") {\n return false;\n }\n\n if (!isRecord(value.tools) || typeof value.types !== \"string\") {\n return false;\n }\n\n return Object.values(value.tools).every(\n (tool) =>\n isRecord(tool) &&\n typeof tool.originalName === \"string\" &&\n typeof tool.safeName === \"string\" &&\n (tool.description === undefined || typeof tool.description === \"string\"),\n );\n}\n\nfunction isExecuteError(\n value: unknown,\n): value is { code: string; message: string } {\n return (\n isRecord(value) &&\n typeof value.code === \"string\" &&\n typeof value.message === \"string\"\n );\n}\n\nfunction isDonePayload(value: unknown): value is DoneMessage {\n if (!isRecord(value) || !isFiniteNumber(value.durationMs)) {\n return false;\n }\n\n if (\n !Array.isArray(value.logs) ||\n !value.logs.every((log) => typeof log === \"string\")\n ) {\n return false;\n }\n\n if (typeof value.ok !== \"boolean\") {\n return false;\n }\n\n return value.ok ? true : isExecuteError(value.error);\n}\n\n/**\n * Message sent from dispatcher to runner to start one execution session.\n */\nexport interface ExecuteMessage {\n code: string;\n id: string;\n options: ExecutorRuntimeOptions;\n providers: ProviderManifest[];\n type: \"execute\";\n}\n\n/**\n * Message sent from dispatcher to request prompt cancellation.\n */\nexport interface CancelMessage {\n id: string;\n type: \"cancel\";\n}\n\n/**\n * Message sent from a runner when guest code invokes a host tool.\n */\nexport interface ToolCallMessage extends ToolCall {\n callId: string;\n type: \"tool_call\";\n}\n\n/**\n * Message carrying a trusted host tool result back to the runner.\n */\nexport type ToolResultMessage = {\n callId: string;\n type: \"tool_result\";\n} & ToolCallResult;\n\n/**\n * Message indicating the runner has finished bootstrapping guest execution timing.\n */\nexport interface StartedMessage {\n id: string;\n type: \"started\";\n}\n\n/**\n * Final successful execution result returned by a runner.\n *\n * Node IPC can omit `undefined` fields during serialization, so `result`\n * remains optional at the protocol boundary and is normalized by the host.\n */\nexport type DoneSuccessMessage<T = unknown> = {\n durationMs: number;\n id: string;\n logs: string[];\n ok: true;\n result?: T;\n type: \"done\";\n};\n\n/**\n * Final failed execution result returned by a runner.\n */\nexport type DoneFailureMessage = {\n id: string;\n type: \"done\";\n} & Extract<ExecuteResult, { ok: false }>;\n\n/**\n * Final execution result returned by a runner.\n */\nexport type DoneMessage = DoneSuccessMessage | DoneFailureMessage;\n\n/**\n * Messages accepted by a runner transport endpoint.\n */\nexport type DispatcherMessage =\n | CancelMessage\n | ExecuteMessage\n | ToolResultMessage;\n\n/**\n * Messages emitted by a runner transport endpoint.\n */\nexport type RunnerMessage = DoneMessage | StartedMessage | ToolCallMessage;\n\n/**\n * Returns whether an unknown value is a dispatcher-to-runner message.\n */\nexport function isDispatcherMessage(\n value: unknown,\n): value is DispatcherMessage {\n if (!isRecord(value) || typeof value.type !== \"string\") {\n return false;\n }\n\n switch (value.type) {\n case \"cancel\":\n return typeof value.id === \"string\";\n case \"execute\":\n return (\n typeof value.code === \"string\" &&\n typeof value.id === \"string\" &&\n isRuntimeOptions(value.options) &&\n Array.isArray(value.providers) &&\n value.providers.every(isProviderManifest)\n );\n case \"tool_result\":\n if (typeof value.callId !== \"string\" || typeof value.ok !== \"boolean\") {\n return false;\n }\n\n if (value.ok) {\n return \"result\" in value;\n }\n\n return isExecuteError(value.error);\n default:\n return false;\n }\n}\n\n/**\n * Returns whether an unknown value is a runner-to-dispatcher message.\n */\nexport function isRunnerMessage(value: unknown): value is RunnerMessage {\n if (!isRecord(value) || typeof value.type !== \"string\") {\n return false;\n }\n\n switch (value.type) {\n case \"started\":\n return typeof value.id === \"string\";\n case \"tool_call\":\n return (\n typeof value.callId === \"string\" &&\n typeof value.providerName === \"string\" &&\n typeof value.safeToolName === \"string\" &&\n \"input\" in value\n );\n case \"done\":\n return typeof value.id === \"string\" && isDonePayload(value);\n default:\n return false;\n }\n}\n","import {\n createToolCallDispatcher,\n extractProviderManifests,\n type ExecutorRuntimeOptions,\n} from \"../runner.ts\";\nimport { getExecutionTimeoutMessage } from \"../executor/shared.ts\";\nimport type { ExecuteResult, ResolvedToolProvider } from \"../types.ts\";\n\nimport type {\n DispatcherMessage,\n DoneMessage,\n RunnerMessage,\n ToolCallMessage,\n} from \"./messages.ts\";\nimport { isRunnerMessage } from \"./messages.ts\";\n\nconst DEFAULT_CANCEL_GRACE_MS = 25;\nconst HOST_TIMEOUT_BACKSTOP_MS = 100;\n\n/**\n * Describes an unexpected transport shutdown reported to the host session.\n */\nexport interface TransportCloseReason {\n code?: number | null;\n message: string;\n signal?: NodeJS.Signals | null;\n}\n\n/**\n * Minimal parent-side transport contract for worker/process-backed execution.\n */\nexport interface HostTransport {\n dispose(): Promise<void> | void;\n onClose(handler: (reason?: TransportCloseReason) => void): () => void;\n onError(handler: (error: Error) => void): () => void;\n onMessage(handler: (message: RunnerMessage) => void): () => void;\n send(message: DispatcherMessage): Promise<void> | void;\n terminate(): Promise<void> | void;\n}\n\n/**\n * Configuration for one transport-backed execution session.\n */\nexport interface HostTransportSessionOptions {\n cancelGraceMs?: number;\n code: string;\n executionId: string;\n onSettled?: (result: ExecuteResult) => Promise<void> | void;\n providers: ResolvedToolProvider[];\n runtimeOptions: Required<ExecutorRuntimeOptions>;\n signal?: AbortSignal;\n transport: HostTransport;\n}\n\nfunction toFailureResult(\n startedAt: number,\n timeoutTriggered: boolean,\n message: string,\n): ExecuteResult {\n return {\n durationMs: Date.now() - startedAt,\n error: {\n code: timeoutTriggered ? \"timeout\" : \"internal_error\",\n message: timeoutTriggered ? getExecutionTimeoutMessage() : message,\n },\n logs: [],\n ok: false,\n };\n}\n\nfunction normalizeDoneMessage(message: DoneMessage): ExecuteResult {\n if (!message.ok) {\n return {\n durationMs: message.durationMs,\n error: message.error,\n logs: message.logs,\n ok: false,\n };\n }\n\n return {\n durationMs: message.durationMs,\n logs: message.logs,\n ok: true,\n result: message.result,\n };\n}\n\n/**\n * Runs one host-side transport session, including timeout, cancellation,\n * tool-call dispatch, and result settlement.\n */\nexport async function runHostTransportSession(\n options: HostTransportSessionOptions,\n): Promise<ExecuteResult> {\n const startedAt = Date.now();\n const abortController = new AbortController();\n const dispatchToolCall = createToolCallDispatcher(\n options.providers,\n abortController.signal,\n );\n const abortSignal = options.signal;\n\n return await new Promise<ExecuteResult>((resolve) => {\n let finished = false;\n let timeoutTriggered = false;\n let cancellationStarted = false;\n let forceTerminateTimer: NodeJS.Timeout | undefined;\n const cancelGraceMs = options.cancelGraceMs ?? DEFAULT_CANCEL_GRACE_MS;\n\n const cleanup = () => {\n finished = true;\n abortController.abort();\n if (timeoutTimer) {\n clearTimeout(timeoutTimer);\n }\n if (forceTerminateTimer) {\n clearTimeout(forceTerminateTimer);\n }\n offClose();\n offError();\n offMessage();\n abortSignal?.removeEventListener(\"abort\", onAbortSignal);\n };\n\n const finish = (result: ExecuteResult) => {\n if (finished) {\n return;\n }\n\n cleanup();\n void Promise.resolve(options.onSettled?.(result))\n .catch(() => {})\n .finally(() => {\n void Promise.resolve(options.transport.dispose()).catch(() => {});\n });\n resolve(result);\n };\n\n const fail = (message: string) => {\n finish(toFailureResult(startedAt, timeoutTriggered, message));\n };\n\n const send = (message: DispatcherMessage) => {\n if (finished) {\n return;\n }\n\n try {\n const pendingSend = options.transport.send(message);\n void Promise.resolve(pendingSend).catch((error) => {\n if (finished) {\n return;\n }\n\n fail(error instanceof Error ? error.message : String(error));\n });\n } catch (error) {\n fail(error instanceof Error ? error.message : String(error));\n }\n };\n\n const startCancellation = () => {\n if (finished || cancellationStarted) {\n return;\n }\n\n cancellationStarted = true;\n timeoutTriggered = true;\n abortController.abort();\n send({\n id: options.executionId,\n type: \"cancel\",\n });\n forceTerminateTimer = setTimeout(() => {\n if (finished) {\n return;\n }\n\n void Promise.resolve(options.transport.terminate())\n .catch(() => {})\n .finally(() => {\n if (finished) {\n return;\n }\n\n finish(\n toFailureResult(startedAt, true, getExecutionTimeoutMessage()),\n );\n });\n }, cancelGraceMs);\n };\n\n const timeoutTimer = setTimeout(() => {\n startCancellation();\n }, options.runtimeOptions.timeoutMs + HOST_TIMEOUT_BACKSTOP_MS);\n\n const onMessage = (message: RunnerMessage) => {\n if (finished) {\n return;\n }\n\n if (!isRunnerMessage(message)) {\n return;\n }\n\n if (\"id\" in message && message.id !== options.executionId) {\n return;\n }\n\n if (message.type === \"started\") {\n return;\n }\n\n if (message.type === \"tool_call\") {\n void dispatchToolCall(message as ToolCallMessage)\n .then((result) => {\n send({\n ...result,\n callId: message.callId,\n type: \"tool_result\",\n });\n })\n .catch((error) => {\n send({\n callId: message.callId,\n error: {\n code: \"internal_error\",\n message: error instanceof Error ? error.message : String(error),\n },\n ok: false,\n type: \"tool_result\",\n });\n });\n return;\n }\n\n finish(normalizeDoneMessage(message));\n };\n\n const onError = (error: Error) => {\n fail(error.message);\n };\n\n const onClose = (reason?: TransportCloseReason) => {\n fail(reason?.message ?? \"Transport closed unexpectedly\");\n };\n\n const onAbortSignal = () => {\n startCancellation();\n };\n\n const offMessage = options.transport.onMessage(onMessage);\n const offError = options.transport.onError(onError);\n const offClose = options.transport.onClose(onClose);\n abortSignal?.addEventListener(\"abort\", onAbortSignal, { once: true });\n\n if (abortSignal?.aborted) {\n startCancellation();\n return;\n }\n\n send({\n code: options.code,\n id: options.executionId,\n options: options.runtimeOptions,\n providers: extractProviderManifests(options.providers),\n type: \"execute\",\n });\n });\n}\n","const SOURCE_MODE_EXEC_ARGV = [\"--conditions=source\", \"--import\", \"tsx\"];\n\n/**\n * Returns the extra Node flags needed to launch transport-backed child entries\n * directly from source during local development and tests.\n */\nexport function getNodeTransportExecArgv(\n moduleUrl: string,\n): string[] | undefined {\n return moduleUrl.endsWith(\".ts\") ? [...SOURCE_MODE_EXEC_ARGV] : undefined;\n}\n","/**\n * One checked-out pooled resource plus its release hook.\n */\nexport interface ResourcePoolLease<T> {\n release(reusable?: boolean): Promise<void>;\n value: T;\n}\n\n/**\n * Configuration for a reusable async resource pool.\n */\nexport interface ResourcePoolOptions<T> {\n create: () => Promise<T> | T;\n destroy: (value: T) => Promise<void> | void;\n idleTimeoutMs?: number;\n maxSize: number;\n minSize?: number;\n}\n\n/**\n * Minimal async pool contract used by the pooled executors.\n */\nexport interface ResourcePool<T> {\n acquire(): Promise<ResourcePoolLease<T>>;\n dispose(): Promise<void>;\n prewarm(count?: number): Promise<void>;\n}\n\ninterface PoolEntry<T> {\n idleTimer: NodeJS.Timeout | undefined;\n value: T;\n}\n\nfunction clampTarget(value: number, maxSize: number): number {\n return Math.max(0, Math.min(value, maxSize));\n}\n\n/**\n * Creates a bounded async resource pool with optional idle eviction.\n */\nexport function createResourcePool<T>(\n options: ResourcePoolOptions<T>,\n): ResourcePool<T> {\n const available: PoolEntry<T>[] = [];\n const waiters: Array<{\n reject: (error: Error) => void;\n resolve: (lease: ResourcePoolLease<T>) => void;\n }> = [];\n const inUse = new Set<PoolEntry<T>>();\n let disposed = false;\n let totalSize = 0;\n\n const minSize = clampTarget(options.minSize ?? 0, options.maxSize);\n\n const createEntry = async (): Promise<PoolEntry<T>> => {\n totalSize += 1;\n\n try {\n return {\n idleTimer: undefined,\n value: await options.create(),\n };\n } catch (error) {\n totalSize -= 1;\n throw error;\n }\n };\n\n const removeAvailableEntry = (entry: PoolEntry<T>): void => {\n const index = available.indexOf(entry);\n\n if (index >= 0) {\n available.splice(index, 1);\n }\n };\n\n const clearIdleTimer = (entry: PoolEntry<T>): void => {\n if (entry.idleTimer) {\n clearTimeout(entry.idleTimer);\n entry.idleTimer = undefined;\n }\n };\n\n const queueAvailableEntry = (entry: PoolEntry<T>): void => {\n available.push(entry);\n\n if ((options.idleTimeoutMs ?? 0) > 0) {\n entry.idleTimer = setTimeout(() => {\n if (disposed) {\n return;\n }\n\n if (available.includes(entry) && totalSize > minSize) {\n void destroyEntry(entry);\n }\n }, options.idleTimeoutMs);\n }\n };\n\n const destroyEntry = async (entry: PoolEntry<T>): Promise<void> => {\n clearIdleTimer(entry);\n removeAvailableEntry(entry);\n inUse.delete(entry);\n totalSize -= 1;\n await options.destroy(entry.value);\n };\n\n const leaseEntry = (entry: PoolEntry<T>): ResourcePoolLease<T> => {\n clearIdleTimer(entry);\n removeAvailableEntry(entry);\n inUse.add(entry);\n\n return {\n release: async (reusable = true) => {\n if (!inUse.has(entry)) {\n return;\n }\n\n inUse.delete(entry);\n\n if (disposed || !reusable) {\n await destroyEntry(entry);\n await fillWaiters();\n return;\n }\n\n const waiter = waiters.shift();\n if (waiter) {\n waiter.resolve(leaseEntry(entry));\n return;\n }\n\n queueAvailableEntry(entry);\n },\n value: entry.value,\n };\n };\n\n const fillWaiters = async (): Promise<void> => {\n while (!disposed && waiters.length > 0 && totalSize < options.maxSize) {\n const waiter = waiters.shift();\n if (!waiter) {\n return;\n }\n\n try {\n waiter.resolve(leaseEntry(await createEntry()));\n } catch (error) {\n waiter.reject(\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }\n };\n\n return {\n acquire: async () => {\n if (disposed) {\n throw new Error(\"Resource pool is disposed\");\n }\n\n const entry = available.pop();\n if (entry) {\n return leaseEntry(entry);\n }\n\n if (totalSize < options.maxSize) {\n return leaseEntry(await createEntry());\n }\n\n return await new Promise<ResourcePoolLease<T>>((resolve, reject) => {\n waiters.push({ reject, resolve });\n });\n },\n dispose: async () => {\n if (disposed) {\n return;\n }\n\n disposed = true;\n\n while (waiters.length > 0) {\n waiters.shift()?.reject(new Error(\"Resource pool is disposed\"));\n }\n\n const idleEntries = [...available];\n available.length = 0;\n await Promise.all(idleEntries.map((entry) => destroyEntry(entry)));\n },\n prewarm: async (count) => {\n if (disposed) {\n throw new Error(\"Resource pool is disposed\");\n }\n\n const target = clampTarget(count ?? minSize, options.maxSize);\n const missing = target - totalSize;\n\n if (missing <= 0) {\n return;\n }\n\n const created = await Promise.all(\n Array.from({ length: missing }, async () => await createEntry()),\n );\n\n for (const entry of created) {\n queueAvailableEntry(entry);\n }\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Public TypeScript declarations for this package entrypoint.
4
+ */
5
+ import { a as ToolCall, d as ExecuteResult, f as JsonSchema, g as ToolExecutionContext, i as ProviderToolManifest, l as ExecuteError, m as ResolvedToolProvider, n as ExecutorRuntimeOptions, o as ToolCallResult, p as ResolvedToolDescriptor, r as ProviderManifest, u as ExecuteErrorCode } from "../runner-BJu1lZFi.cjs";
6
+
7
+ //#region src/protocol/messages.d.ts
8
+
9
+ /**
10
+ * Message sent from dispatcher to runner to start one execution session.
11
+ */
12
+ interface ExecuteMessage {
13
+ code: string;
14
+ id: string;
15
+ options: ExecutorRuntimeOptions;
16
+ providers: ProviderManifest[];
17
+ type: "execute";
18
+ }
19
+ /**
20
+ * Message sent from dispatcher to request prompt cancellation.
21
+ */
22
+ interface CancelMessage {
23
+ id: string;
24
+ type: "cancel";
25
+ }
26
+ /**
27
+ * Message sent from a runner when guest code invokes a host tool.
28
+ */
29
+ interface ToolCallMessage extends ToolCall {
30
+ callId: string;
31
+ type: "tool_call";
32
+ }
33
+ /**
34
+ * Message carrying a trusted host tool result back to the runner.
35
+ */
36
+ type ToolResultMessage = {
37
+ callId: string;
38
+ type: "tool_result";
39
+ } & ToolCallResult;
40
+ /**
41
+ * Message indicating the runner has finished bootstrapping guest execution timing.
42
+ */
43
+ interface StartedMessage {
44
+ id: string;
45
+ type: "started";
46
+ }
47
+ /**
48
+ * Final successful execution result returned by a runner.
49
+ *
50
+ * Node IPC can omit `undefined` fields during serialization, so `result`
51
+ * remains optional at the protocol boundary and is normalized by the host.
52
+ */
53
+ type DoneSuccessMessage<T = unknown> = {
54
+ durationMs: number;
55
+ id: string;
56
+ logs: string[];
57
+ ok: true;
58
+ result?: T;
59
+ type: "done";
60
+ };
61
+ /**
62
+ * Final failed execution result returned by a runner.
63
+ */
64
+ type DoneFailureMessage = {
65
+ id: string;
66
+ type: "done";
67
+ } & Extract<ExecuteResult, {
68
+ ok: false;
69
+ }>;
70
+ /**
71
+ * Final execution result returned by a runner.
72
+ */
73
+ type DoneMessage = DoneSuccessMessage | DoneFailureMessage;
74
+ /**
75
+ * Messages accepted by a runner transport endpoint.
76
+ */
77
+ type DispatcherMessage = CancelMessage | ExecuteMessage | ToolResultMessage;
78
+ /**
79
+ * Messages emitted by a runner transport endpoint.
80
+ */
81
+ type RunnerMessage = DoneMessage | StartedMessage | ToolCallMessage;
82
+ /**
83
+ * Returns whether an unknown value is a dispatcher-to-runner message.
84
+ */
85
+ declare function isDispatcherMessage(value: unknown): value is DispatcherMessage;
86
+ /**
87
+ * Returns whether an unknown value is a runner-to-dispatcher message.
88
+ */
89
+ declare function isRunnerMessage(value: unknown): value is RunnerMessage;
90
+ //#endregion
91
+ //#region src/protocol/hostSession.d.ts
92
+ /**
93
+ * Describes an unexpected transport shutdown reported to the host session.
94
+ */
95
+ interface TransportCloseReason {
96
+ code?: number | null;
97
+ message: string;
98
+ signal?: NodeJS.Signals | null;
99
+ }
100
+ /**
101
+ * Minimal parent-side transport contract for worker/process-backed execution.
102
+ */
103
+ interface HostTransport {
104
+ dispose(): Promise<void> | void;
105
+ onClose(handler: (reason?: TransportCloseReason) => void): () => void;
106
+ onError(handler: (error: Error) => void): () => void;
107
+ onMessage(handler: (message: RunnerMessage) => void): () => void;
108
+ send(message: DispatcherMessage): Promise<void> | void;
109
+ terminate(): Promise<void> | void;
110
+ }
111
+ /**
112
+ * Configuration for one transport-backed execution session.
113
+ */
114
+ interface HostTransportSessionOptions {
115
+ cancelGraceMs?: number;
116
+ code: string;
117
+ executionId: string;
118
+ onSettled?: (result: ExecuteResult) => Promise<void> | void;
119
+ providers: ResolvedToolProvider[];
120
+ runtimeOptions: Required<ExecutorRuntimeOptions>;
121
+ signal?: AbortSignal;
122
+ transport: HostTransport;
123
+ }
124
+ /**
125
+ * Runs one host-side transport session, including timeout, cancellation,
126
+ * tool-call dispatch, and result settlement.
127
+ */
128
+ declare function runHostTransportSession(options: HostTransportSessionOptions): Promise<ExecuteResult>;
129
+ //#endregion
130
+ //#region src/protocol/nodeBootstrap.d.ts
131
+ /**
132
+ * Returns the extra Node flags needed to launch transport-backed child entries
133
+ * directly from source during local development and tests.
134
+ */
135
+ declare function getNodeTransportExecArgv(moduleUrl: string): string[] | undefined;
136
+ //#endregion
137
+ //#region src/protocol/resourcePool.d.ts
138
+ /**
139
+ * One checked-out pooled resource plus its release hook.
140
+ */
141
+ interface ResourcePoolLease<T> {
142
+ release(reusable?: boolean): Promise<void>;
143
+ value: T;
144
+ }
145
+ /**
146
+ * Configuration for a reusable async resource pool.
147
+ */
148
+ interface ResourcePoolOptions<T> {
149
+ create: () => Promise<T> | T;
150
+ destroy: (value: T) => Promise<void> | void;
151
+ idleTimeoutMs?: number;
152
+ maxSize: number;
153
+ minSize?: number;
154
+ }
155
+ /**
156
+ * Minimal async pool contract used by the pooled executors.
157
+ */
158
+ interface ResourcePool<T> {
159
+ acquire(): Promise<ResourcePoolLease<T>>;
160
+ dispose(): Promise<void>;
161
+ prewarm(count?: number): Promise<void>;
162
+ }
163
+ /**
164
+ * Creates a bounded async resource pool with optional idle eviction.
165
+ */
166
+ declare function createResourcePool<T>(options: ResourcePoolOptions<T>): ResourcePool<T>;
167
+ //#endregion
168
+ export { type CancelMessage, type DispatcherMessage, type DoneFailureMessage, type DoneMessage, type DoneSuccessMessage, type ExecuteError, type ExecuteErrorCode, type ExecuteMessage, type ExecuteResult, type ExecutorRuntimeOptions, type HostTransport, type HostTransportSessionOptions, type JsonSchema, type ProviderManifest, type ProviderToolManifest, type ResolvedToolDescriptor, type ResolvedToolProvider, type ResourcePool, type ResourcePoolLease, type ResourcePoolOptions, type RunnerMessage, type StartedMessage, type ToolCall, type ToolCallMessage, type ToolCallResult, type ToolExecutionContext, type ToolResultMessage, type TransportCloseReason, createResourcePool, getNodeTransportExecArgv, isDispatcherMessage, isRunnerMessage, runHostTransportSession };
169
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/protocol/messages.ts","../../src/protocol/hostSession.ts","../../src/protocol/nodeBootstrap.ts","../../src/protocol/resourcePool.ts"],"sourcesContent":[],"mappings":"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"}