@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
@@ -25,6 +25,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
25
25
  }) : target, mod));
26
26
 
27
27
  //#endregion
28
+ const require_errors = require('./errors-CTel18cM.cjs');
28
29
  let ajv = require("ajv");
29
30
  ajv = __toESM(ajv);
30
31
  let zod = require("zod");
@@ -71,6 +72,14 @@ const RESERVED_WORDS = new Set([
71
72
  "with",
72
73
  "yield"
73
74
  ]);
75
+ const UNDERSCORE_CHAR_CODE = 95;
76
+ function trimEdgeUnderscores(value) {
77
+ let start = 0;
78
+ let end = value.length;
79
+ while (start < end && value.charCodeAt(start) === UNDERSCORE_CHAR_CODE) start += 1;
80
+ while (end > start && value.charCodeAt(end - 1) === UNDERSCORE_CHAR_CODE) end -= 1;
81
+ return value.slice(start, end);
82
+ }
74
83
  /**
75
84
  * Returns whether the value is a valid JavaScript identifier.
76
85
  */
@@ -93,8 +102,8 @@ function assertValidIdentifier(value, label = "identifier") {
93
102
  * Converts a raw identifier-like value into a safe JavaScript identifier.
94
103
  */
95
104
  function sanitizeIdentifier(value) {
96
- const sanitized = value.trim().replace(/[^A-Za-z0-9_$]+/g, "_").replace(/^_+|_+$/g, "");
97
- let safeName = sanitized.length > 0 ? sanitized : "_";
105
+ const trimmed = trimEdgeUnderscores(value.trim().replace(/[^A-Za-z0-9_$]+/g, "_"));
106
+ let safeName = trimmed.length > 0 ? trimmed : "_";
98
107
  if (/^[0-9]/.test(safeName)) safeName = `_${safeName}`;
99
108
  if (isReservedWord(safeName)) safeName = `${safeName}_`;
100
109
  return safeName;
@@ -115,65 +124,6 @@ function sanitizeToolName(name) {
115
124
  return sanitizeIdentifier(name);
116
125
  }
117
126
 
118
- //#endregion
119
- //#region src/errors.ts
120
- /**
121
- * Structured failure used internally to propagate executor and tool errors.
122
- */
123
- var ExecuteFailure = class extends Error {
124
- code;
125
- /**
126
- * Creates a structured failure with a trusted executor or tool error code.
127
- */
128
- constructor(code, message) {
129
- super(message);
130
- this.code = code;
131
- this.name = "ExecuteFailure";
132
- }
133
- };
134
- /**
135
- * Returns whether a thrown value is an {@link ExecuteFailure}.
136
- */
137
- function isExecuteFailure(value) {
138
- return value instanceof ExecuteFailure;
139
- }
140
- /**
141
- * Returns whether a value can be serialized through the JSON-only host/guest boundary.
142
- */
143
- function isJsonSerializable(value, active = /* @__PURE__ */ new Set(), memo = /* @__PURE__ */ new WeakSet()) {
144
- if (value === null) return true;
145
- switch (typeof value) {
146
- case "string":
147
- case "boolean": return true;
148
- case "number": return Number.isFinite(value);
149
- case "bigint":
150
- case "function":
151
- case "symbol":
152
- case "undefined": return false;
153
- case "object": {
154
- const objectValue = value;
155
- if (memo.has(objectValue)) return true;
156
- if (active.has(objectValue)) return false;
157
- active.add(objectValue);
158
- let isSerializable = false;
159
- try {
160
- if (Array.isArray(value)) {
161
- isSerializable = value.every((item) => isJsonSerializable(item, active, memo));
162
- return isSerializable;
163
- }
164
- const prototype = Object.getPrototypeOf(value);
165
- if (prototype !== Object.prototype && prototype !== null) return false;
166
- isSerializable = Object.values(value).every((item) => isJsonSerializable(item, active, memo));
167
- return isSerializable;
168
- } finally {
169
- active.delete(objectValue);
170
- if (isSerializable) memo.add(objectValue);
171
- }
172
- }
173
- }
174
- return false;
175
- }
176
-
177
127
  //#endregion
178
128
  //#region src/schema/normalizeSchema.ts
179
129
  const z = "z" in zod && typeof zod.z === "object" ? zod.z : zod;
@@ -331,15 +281,15 @@ function resolveProvider(provider) {
331
281
  resolvedTools[safeName] = {
332
282
  description: descriptor.description,
333
283
  execute: async (input, context) => {
334
- if (inputValidator && !inputValidator(input)) throw new ExecuteFailure("validation_error", formatValidationMessage(ajv$1, "input", originalName, inputValidator));
284
+ if (inputValidator && !inputValidator(input)) throw new require_errors.ExecuteFailure("validation_error", formatValidationMessage(ajv$1, "input", originalName, inputValidator));
335
285
  try {
336
286
  const result = await descriptor.execute(input, context);
337
- if (!isJsonSerializable(result)) throw new ExecuteFailure("serialization_error", `Tool ${originalName} returned a non-serializable value`);
338
- if (outputValidator && !outputValidator(result)) throw new ExecuteFailure("validation_error", formatValidationMessage(ajv$1, "output", originalName, outputValidator));
287
+ if (!require_errors.isJsonSerializable(result)) throw new require_errors.ExecuteFailure("serialization_error", `Tool ${originalName} returned a non-serializable value`);
288
+ if (outputValidator && !outputValidator(result)) throw new require_errors.ExecuteFailure("validation_error", formatValidationMessage(ajv$1, "output", originalName, outputValidator));
339
289
  return result;
340
290
  } catch (error) {
341
- if (isExecuteFailure(error)) throw error;
342
- throw new ExecuteFailure("tool_error", error instanceof Error ? error.message : `Tool ${originalName} failed`);
291
+ if (require_errors.isExecuteFailure(error)) throw error;
292
+ throw new require_errors.ExecuteFailure("tool_error", error instanceof Error ? error.message : `Tool ${originalName} failed`);
343
293
  }
344
294
  },
345
295
  inputSchema,
@@ -363,12 +313,6 @@ function resolveProvider(provider) {
363
313
  }
364
314
 
365
315
  //#endregion
366
- Object.defineProperty(exports, 'ExecuteFailure', {
367
- enumerable: true,
368
- get: function () {
369
- return ExecuteFailure;
370
- }
371
- });
372
316
  Object.defineProperty(exports, '__toESM', {
373
317
  enumerable: true,
374
318
  get: function () {
@@ -387,18 +331,6 @@ Object.defineProperty(exports, 'generateTypesFromJsonSchema', {
387
331
  return generateTypesFromJsonSchema;
388
332
  }
389
333
  });
390
- Object.defineProperty(exports, 'isExecuteFailure', {
391
- enumerable: true,
392
- get: function () {
393
- return isExecuteFailure;
394
- }
395
- });
396
- Object.defineProperty(exports, 'isJsonSerializable', {
397
- enumerable: true,
398
- get: function () {
399
- return isJsonSerializable;
400
- }
401
- });
402
334
  Object.defineProperty(exports, 'isReservedWord', {
403
335
  enumerable: true,
404
336
  get: function () {
@@ -453,4 +385,4 @@ Object.defineProperty(exports, 'serializePropertyName', {
453
385
  return serializePropertyName;
454
386
  }
455
387
  });
456
- //# sourceMappingURL=resolveProvider-CixOjPKp.cjs.map
388
+ //# sourceMappingURL=resolveProvider-D__uEvDj.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveProvider-D__uEvDj.cjs","names":["isRecord","lines: string[]","ajv","Ajv","originalToSafeName: Record<string, string>","safeToOriginalName: Record<string, string>","resolvedTools: Record<string, ResolvedToolDescriptor>","typegenTools: Record<string, TypegenToolDescriptor>","ExecuteFailure","isJsonSerializable","isExecuteFailure"],"sources":["../src/identifier.ts","../src/sanitize.ts","../src/schema/normalizeSchema.ts","../src/typegen/render.ts","../src/typegen/jsonSchema.ts","../src/provider/resolveProvider.ts"],"sourcesContent":["const RESERVED_WORDS = new Set([\n \"await\",\n \"break\",\n \"case\",\n \"catch\",\n \"class\",\n \"const\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"delete\",\n \"do\",\n \"else\",\n \"enum\",\n \"export\",\n \"extends\",\n \"false\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"import\",\n \"in\",\n \"instanceof\",\n \"new\",\n \"null\",\n \"return\",\n \"super\",\n \"switch\",\n \"this\",\n \"throw\",\n \"true\",\n \"try\",\n \"typeof\",\n \"var\",\n \"void\",\n \"while\",\n \"with\",\n \"yield\",\n]);\n\nconst UNDERSCORE_CHAR_CODE = 95;\n\nfunction trimEdgeUnderscores(value: string): string {\n let start = 0;\n let end = value.length;\n\n while (start < end && value.charCodeAt(start) === UNDERSCORE_CHAR_CODE) {\n start += 1;\n }\n\n while (end > start && value.charCodeAt(end - 1) === UNDERSCORE_CHAR_CODE) {\n end -= 1;\n }\n\n return value.slice(start, end);\n}\n\n/**\n * Returns whether the value is a valid JavaScript identifier.\n */\nexport function isValidIdentifier(value: string): boolean {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(value);\n}\n\n/**\n * Returns whether the identifier is reserved in JavaScript source.\n */\nexport function isReservedWord(value: string): boolean {\n return RESERVED_WORDS.has(value);\n}\n\n/**\n * Throws when the value cannot be used as a bare JavaScript identifier.\n */\nexport function assertValidIdentifier(\n value: string,\n label = \"identifier\",\n): void {\n if (!isValidIdentifier(value) || isReservedWord(value)) {\n throw new Error(`Invalid ${label}: ${value}`);\n }\n}\n\n/**\n * Converts a raw identifier-like value into a safe JavaScript identifier.\n */\nexport function sanitizeIdentifier(value: string): string {\n const sanitized = value.trim().replace(/[^A-Za-z0-9_$]+/g, \"_\");\n\n const trimmed = trimEdgeUnderscores(sanitized);\n\n let safeName = trimmed.length > 0 ? trimmed : \"_\";\n\n if (/^[0-9]/.test(safeName)) {\n safeName = `_${safeName}`;\n }\n\n if (isReservedWord(safeName)) {\n safeName = `${safeName}_`;\n }\n\n return safeName;\n}\n\n/**\n * Renders the name as a bare identifier when possible, otherwise as a string literal.\n */\nexport function serializePropertyName(name: string): string {\n return isValidIdentifier(name) ? name : JSON.stringify(name);\n}\n","import { sanitizeIdentifier } from \"./identifier\";\n\n/**\n * Converts a raw tool name into a safe JavaScript identifier.\n */\nexport function sanitizeToolName(name: string): string {\n return sanitizeIdentifier(name);\n}\n","import * as zod from \"zod\";\nimport type { ZodRawShape, ZodTypeAny } from \"zod\";\n\nimport type { JsonSchema, ToolSchema } from \"../types\";\n\nconst z = \"z\" in zod && typeof zod.z === \"object\" ? zod.z : zod;\nconst toJsonSchema =\n (\"toJSONSchema\" in zod ? zod.toJSONSchema : undefined) ??\n (\"toJSONSchema\" in z ? z.toJSONSchema : undefined);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isZodSchema(value: unknown): value is ZodTypeAny {\n return isRecord(value) && typeof value.safeParse === \"function\";\n}\n\nfunction isZodRawShape(value: unknown): value is ZodRawShape {\n return (\n isRecord(value) &&\n Object.keys(value).length > 0 &&\n Object.values(value).every(isZodSchema)\n );\n}\n\nfunction normalizeZodSchema(schema: ZodTypeAny): JsonSchema {\n if (typeof toJsonSchema !== \"function\") {\n throw new Error(\"Installed zod package does not expose toJSONSchema\");\n }\n\n const jsonSchema = toJsonSchema(schema) as JsonSchema & {\n $schema?: string;\n };\n\n if (\"$schema\" in jsonSchema) {\n const { $schema: _ignored, ...rest } = jsonSchema;\n return rest;\n }\n\n return jsonSchema;\n}\n\n/**\n * Normalizes supported tool schema inputs to the JSON Schema form used internally.\n */\nexport function normalizeToolSchema(\n schema: ToolSchema | undefined,\n phase: \"input\" | \"output\",\n toolName: string,\n): JsonSchema | undefined {\n if (schema === undefined) {\n return undefined;\n }\n\n if (isZodSchema(schema)) {\n return normalizeZodSchema(schema);\n }\n\n if (isZodRawShape(schema)) {\n return normalizeZodSchema(z.object(schema));\n }\n\n if (isRecord(schema)) {\n return schema;\n }\n\n throw new Error(\n `Unsupported ${phase} schema for tool ${toolName}. Expected JSON Schema, a Zod schema, or an MCP-style Zod shape.`,\n );\n}\n","/**\n * Indents each line of the given string by a specified number of levels.\n */\nexport function indent(value: string, level = 1): string {\n return value\n .split(\"\\n\")\n .map((line) => `${\" \".repeat(level)}${line}`)\n .join(\"\\n\");\n}\n\n/**\n * Renders a short TSDoc-style block when documentation is available.\n */\nexport function renderDocComment(lines: string[]): string {\n if (lines.length === 0) {\n return \"\";\n }\n\n return [\"/**\", ...lines.map((line) => ` * ${line}`), \" */\"].join(\"\\n\");\n}\n\n/**\n * Renders a namespace declaration with optional members.\n */\nexport function renderNamespaceDeclaration(\n name: string,\n members: string[],\n): string {\n if (members.length === 0) {\n return `declare namespace ${name} {}`;\n }\n\n return `declare namespace ${name} {\\n${indent(members.join(\"\\n\\n\"))}\\n}`;\n}\n","import { isValidIdentifier, serializePropertyName } from \"../identifier\";\nimport type { JsonSchema, TypegenToolDescriptor } from \"../types\";\nimport { indent, renderDocComment, renderNamespaceDeclaration } from \"./render\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nexport { indent } from \"./render\";\n\n/**\n * Converts a supported JSON Schema fragment into a TypeScript type expression.\n */\nexport function schemaToType(\n schema: JsonSchema | undefined,\n level = 0,\n): string {\n if (!schema) {\n return \"unknown\";\n }\n\n if (\n \"allOf\" in schema ||\n \"anyOf\" in schema ||\n \"oneOf\" in schema ||\n \"$ref\" in schema ||\n Array.isArray(schema.type)\n ) {\n return \"unknown\";\n }\n\n switch (schema.type) {\n case \"string\":\n return \"string\";\n case \"number\":\n case \"integer\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"null\":\n return \"null\";\n case \"array\": {\n const itemType = schemaToType(\n isRecord(schema.items) ? (schema.items as JsonSchema) : undefined,\n level + 1,\n );\n\n if (isValidIdentifier(itemType)) {\n return `${itemType}[]`;\n }\n\n return `Array<${itemType}>`;\n }\n case \"object\": {\n const properties = isRecord(schema.properties) ? schema.properties : {};\n const required = new Set(\n Array.isArray(schema.required)\n ? schema.required.filter(\n (value): value is string => typeof value === \"string\",\n )\n : [],\n );\n const entries = Object.entries(properties);\n\n if (entries.length === 0) {\n return \"Record<string, unknown>\";\n }\n\n const lines = entries.map(([name, propertySchema]) => {\n const propertyType = schemaToType(\n isRecord(propertySchema) ? (propertySchema as JsonSchema) : undefined,\n level + 1,\n );\n const optionalToken = required.has(name) ? \"\" : \"?\";\n return `${serializePropertyName(name)}${optionalToken}: ${propertyType};`;\n });\n\n return `{\\n${indent(lines.join(\"\\n\"), level + 1)}\\n${\" \".repeat(level)}}`;\n }\n default:\n return \"unknown\";\n }\n}\n\nfunction formatToolDeclaration(\n name: string,\n tool: TypegenToolDescriptor,\n): string {\n const lines: string[] = [];\n const comment = tool.description ? renderDocComment([tool.description]) : \"\";\n if (comment) {\n lines.push(comment);\n }\n\n const inputType = schemaToType(tool.inputSchema);\n const outputType = schemaToType(tool.outputSchema);\n lines.push(`function ${name}(input: ${inputType}): Promise<${outputType}>;`);\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Generates a namespace declaration for a provider's tool schemas.\n */\nexport function generateTypesFromJsonSchema(\n providerName: string,\n tools: Record<string, TypegenToolDescriptor>,\n): string {\n return renderNamespaceDeclaration(\n providerName,\n Object.entries(tools).map(([name, tool]) =>\n formatToolDeclaration(name, tool),\n ),\n );\n}\n","import Ajv, { type AnySchemaObject, type ValidateFunction } from \"ajv\";\n\nimport {\n ExecuteFailure,\n isExecuteFailure,\n isJsonSerializable,\n} from \"../errors\";\nimport { assertValidIdentifier } from \"../identifier\";\nimport { sanitizeToolName } from \"../sanitize\";\nimport { normalizeToolSchema } from \"../schema/normalizeSchema\";\nimport { generateTypesFromJsonSchema } from \"../typegen/jsonSchema\";\nimport type {\n JsonSchema,\n ResolvedToolDescriptor,\n ResolvedToolProvider,\n ToolExecutionContext,\n ToolProvider,\n TypegenToolDescriptor,\n} from \"../types\";\n\nconst DEFAULT_PROVIDER_NAME = \"codemode\";\nfunction assertValidNamespace(name: string): void {\n assertValidIdentifier(name, \"provider namespace\");\n}\n\nfunction compileValidator(\n ajv: Ajv,\n schema: JsonSchema | undefined,\n): ValidateFunction | undefined {\n return schema ? ajv.compile(schema as AnySchemaObject) : undefined;\n}\n\nfunction formatValidationMessage(\n ajv: Ajv,\n phase: \"input\" | \"output\",\n toolName: string,\n validator: ValidateFunction,\n): string {\n return `Invalid ${phase} for tool ${toolName}: ${ajv.errorsText(validator.errors)}`;\n}\n\n/**\n * Resolves a tool provider into the validated, sanitized shape consumed by executors.\n */\nexport function resolveProvider(provider: ToolProvider): ResolvedToolProvider {\n const name = provider.name ?? DEFAULT_PROVIDER_NAME;\n assertValidNamespace(name);\n\n // strict: false allows schemas with extra keywords (e.g. Zod-generated $schema)\n // that don't conform to the strict JSON Schema vocabulary.\n const ajv = new Ajv({\n allErrors: true,\n strict: false,\n });\n\n const originalToSafeName: Record<string, string> = {};\n const safeToOriginalName: Record<string, string> = {};\n const usedSafeNames = new Set<string>();\n const resolvedTools: Record<string, ResolvedToolDescriptor> = {};\n const typegenTools: Record<string, TypegenToolDescriptor> = {};\n\n for (const [originalName, descriptor] of Object.entries(provider.tools)) {\n const baseSafeName = sanitizeToolName(originalName);\n let safeName = baseSafeName;\n let suffix = 2;\n\n while (usedSafeNames.has(safeName)) {\n safeName = `${baseSafeName}__${suffix}`;\n suffix += 1;\n }\n\n usedSafeNames.add(safeName);\n originalToSafeName[originalName] = safeName;\n safeToOriginalName[safeName] = originalName;\n\n const inputSchema = normalizeToolSchema(\n descriptor.inputSchema,\n \"input\",\n originalName,\n );\n const outputSchema = normalizeToolSchema(\n descriptor.outputSchema,\n \"output\",\n originalName,\n );\n const inputValidator = compileValidator(ajv, inputSchema);\n const outputValidator = compileValidator(ajv, outputSchema);\n\n resolvedTools[safeName] = {\n description: descriptor.description,\n execute: async (\n input: unknown,\n context: ToolExecutionContext,\n ): Promise<unknown> => {\n if (inputValidator && !inputValidator(input)) {\n throw new ExecuteFailure(\n \"validation_error\",\n formatValidationMessage(ajv, \"input\", originalName, inputValidator),\n );\n }\n\n try {\n const result = await descriptor.execute(input, context);\n\n if (!isJsonSerializable(result)) {\n throw new ExecuteFailure(\n \"serialization_error\",\n `Tool ${originalName} returned a non-serializable value`,\n );\n }\n\n if (outputValidator && !outputValidator(result)) {\n throw new ExecuteFailure(\n \"validation_error\",\n formatValidationMessage(\n ajv,\n \"output\",\n originalName,\n outputValidator,\n ),\n );\n }\n\n return result;\n } catch (error) {\n if (isExecuteFailure(error)) {\n throw error;\n }\n\n throw new ExecuteFailure(\n \"tool_error\",\n error instanceof Error\n ? error.message\n : `Tool ${originalName} failed`,\n );\n }\n },\n inputSchema,\n originalName,\n outputSchema,\n safeName,\n };\n\n typegenTools[safeName] = {\n description: descriptor.description,\n inputSchema,\n outputSchema,\n };\n }\n\n return {\n name,\n originalToSafeName,\n safeToOriginalName,\n tools: resolvedTools,\n types: provider.types ?? generateTypesFromJsonSchema(name, typegenTools),\n };\n}\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { n as isExecuteFailure, r as isJsonSerializable, t as ExecuteFailure } from "./errors-CgBwm39w.js";
1
2
  import Ajv from "ajv";
2
3
  import * as zod from "zod";
3
4
 
@@ -42,6 +43,14 @@ const RESERVED_WORDS = new Set([
42
43
  "with",
43
44
  "yield"
44
45
  ]);
46
+ const UNDERSCORE_CHAR_CODE = 95;
47
+ function trimEdgeUnderscores(value) {
48
+ let start = 0;
49
+ let end = value.length;
50
+ while (start < end && value.charCodeAt(start) === UNDERSCORE_CHAR_CODE) start += 1;
51
+ while (end > start && value.charCodeAt(end - 1) === UNDERSCORE_CHAR_CODE) end -= 1;
52
+ return value.slice(start, end);
53
+ }
45
54
  /**
46
55
  * Returns whether the value is a valid JavaScript identifier.
47
56
  */
@@ -64,8 +73,8 @@ function assertValidIdentifier(value, label = "identifier") {
64
73
  * Converts a raw identifier-like value into a safe JavaScript identifier.
65
74
  */
66
75
  function sanitizeIdentifier(value) {
67
- const sanitized = value.trim().replace(/[^A-Za-z0-9_$]+/g, "_").replace(/^_+|_+$/g, "");
68
- let safeName = sanitized.length > 0 ? sanitized : "_";
76
+ const trimmed = trimEdgeUnderscores(value.trim().replace(/[^A-Za-z0-9_$]+/g, "_"));
77
+ let safeName = trimmed.length > 0 ? trimmed : "_";
69
78
  if (/^[0-9]/.test(safeName)) safeName = `_${safeName}`;
70
79
  if (isReservedWord(safeName)) safeName = `${safeName}_`;
71
80
  return safeName;
@@ -86,65 +95,6 @@ function sanitizeToolName(name) {
86
95
  return sanitizeIdentifier(name);
87
96
  }
88
97
 
89
- //#endregion
90
- //#region src/errors.ts
91
- /**
92
- * Structured failure used internally to propagate executor and tool errors.
93
- */
94
- var ExecuteFailure = class extends Error {
95
- code;
96
- /**
97
- * Creates a structured failure with a trusted executor or tool error code.
98
- */
99
- constructor(code, message) {
100
- super(message);
101
- this.code = code;
102
- this.name = "ExecuteFailure";
103
- }
104
- };
105
- /**
106
- * Returns whether a thrown value is an {@link ExecuteFailure}.
107
- */
108
- function isExecuteFailure(value) {
109
- return value instanceof ExecuteFailure;
110
- }
111
- /**
112
- * Returns whether a value can be serialized through the JSON-only host/guest boundary.
113
- */
114
- function isJsonSerializable(value, active = /* @__PURE__ */ new Set(), memo = /* @__PURE__ */ new WeakSet()) {
115
- if (value === null) return true;
116
- switch (typeof value) {
117
- case "string":
118
- case "boolean": return true;
119
- case "number": return Number.isFinite(value);
120
- case "bigint":
121
- case "function":
122
- case "symbol":
123
- case "undefined": return false;
124
- case "object": {
125
- const objectValue = value;
126
- if (memo.has(objectValue)) return true;
127
- if (active.has(objectValue)) return false;
128
- active.add(objectValue);
129
- let isSerializable = false;
130
- try {
131
- if (Array.isArray(value)) {
132
- isSerializable = value.every((item) => isJsonSerializable(item, active, memo));
133
- return isSerializable;
134
- }
135
- const prototype = Object.getPrototypeOf(value);
136
- if (prototype !== Object.prototype && prototype !== null) return false;
137
- isSerializable = Object.values(value).every((item) => isJsonSerializable(item, active, memo));
138
- return isSerializable;
139
- } finally {
140
- active.delete(objectValue);
141
- if (isSerializable) memo.add(objectValue);
142
- }
143
- }
144
- }
145
- return false;
146
- }
147
-
148
98
  //#endregion
149
99
  //#region src/schema/normalizeSchema.ts
150
100
  const z = "z" in zod && typeof zod.z === "object" ? zod.z : zod;
@@ -334,5 +284,5 @@ function resolveProvider(provider) {
334
284
  }
335
285
 
336
286
  //#endregion
337
- export { renderNamespaceDeclaration as a, isJsonSerializable as c, isReservedWord as d, isValidIdentifier as f, renderDocComment as i, sanitizeToolName as l, serializePropertyName as m, generateTypesFromJsonSchema as n, ExecuteFailure as o, sanitizeIdentifier as p, schemaToType as r, isExecuteFailure as s, resolveProvider as t, assertValidIdentifier as u };
338
- //# sourceMappingURL=resolveProvider-CUxAvFCK.js.map
287
+ export { renderNamespaceDeclaration as a, isReservedWord as c, serializePropertyName as d, renderDocComment as i, isValidIdentifier as l, generateTypesFromJsonSchema as n, sanitizeToolName as o, schemaToType as r, assertValidIdentifier as s, resolveProvider as t, sanitizeIdentifier as u };
288
+ //# sourceMappingURL=resolveProvider-TuOLZT2_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveProvider-TuOLZT2_.js","names":["isRecord","lines: string[]","originalToSafeName: Record<string, string>","safeToOriginalName: Record<string, string>","resolvedTools: Record<string, ResolvedToolDescriptor>","typegenTools: Record<string, TypegenToolDescriptor>"],"sources":["../src/identifier.ts","../src/sanitize.ts","../src/schema/normalizeSchema.ts","../src/typegen/render.ts","../src/typegen/jsonSchema.ts","../src/provider/resolveProvider.ts"],"sourcesContent":["const RESERVED_WORDS = new Set([\n \"await\",\n \"break\",\n \"case\",\n \"catch\",\n \"class\",\n \"const\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"delete\",\n \"do\",\n \"else\",\n \"enum\",\n \"export\",\n \"extends\",\n \"false\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"import\",\n \"in\",\n \"instanceof\",\n \"new\",\n \"null\",\n \"return\",\n \"super\",\n \"switch\",\n \"this\",\n \"throw\",\n \"true\",\n \"try\",\n \"typeof\",\n \"var\",\n \"void\",\n \"while\",\n \"with\",\n \"yield\",\n]);\n\nconst UNDERSCORE_CHAR_CODE = 95;\n\nfunction trimEdgeUnderscores(value: string): string {\n let start = 0;\n let end = value.length;\n\n while (start < end && value.charCodeAt(start) === UNDERSCORE_CHAR_CODE) {\n start += 1;\n }\n\n while (end > start && value.charCodeAt(end - 1) === UNDERSCORE_CHAR_CODE) {\n end -= 1;\n }\n\n return value.slice(start, end);\n}\n\n/**\n * Returns whether the value is a valid JavaScript identifier.\n */\nexport function isValidIdentifier(value: string): boolean {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(value);\n}\n\n/**\n * Returns whether the identifier is reserved in JavaScript source.\n */\nexport function isReservedWord(value: string): boolean {\n return RESERVED_WORDS.has(value);\n}\n\n/**\n * Throws when the value cannot be used as a bare JavaScript identifier.\n */\nexport function assertValidIdentifier(\n value: string,\n label = \"identifier\",\n): void {\n if (!isValidIdentifier(value) || isReservedWord(value)) {\n throw new Error(`Invalid ${label}: ${value}`);\n }\n}\n\n/**\n * Converts a raw identifier-like value into a safe JavaScript identifier.\n */\nexport function sanitizeIdentifier(value: string): string {\n const sanitized = value.trim().replace(/[^A-Za-z0-9_$]+/g, \"_\");\n\n const trimmed = trimEdgeUnderscores(sanitized);\n\n let safeName = trimmed.length > 0 ? trimmed : \"_\";\n\n if (/^[0-9]/.test(safeName)) {\n safeName = `_${safeName}`;\n }\n\n if (isReservedWord(safeName)) {\n safeName = `${safeName}_`;\n }\n\n return safeName;\n}\n\n/**\n * Renders the name as a bare identifier when possible, otherwise as a string literal.\n */\nexport function serializePropertyName(name: string): string {\n return isValidIdentifier(name) ? name : JSON.stringify(name);\n}\n","import { sanitizeIdentifier } from \"./identifier\";\n\n/**\n * Converts a raw tool name into a safe JavaScript identifier.\n */\nexport function sanitizeToolName(name: string): string {\n return sanitizeIdentifier(name);\n}\n","import * as zod from \"zod\";\nimport type { ZodRawShape, ZodTypeAny } from \"zod\";\n\nimport type { JsonSchema, ToolSchema } from \"../types\";\n\nconst z = \"z\" in zod && typeof zod.z === \"object\" ? zod.z : zod;\nconst toJsonSchema =\n (\"toJSONSchema\" in zod ? zod.toJSONSchema : undefined) ??\n (\"toJSONSchema\" in z ? z.toJSONSchema : undefined);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isZodSchema(value: unknown): value is ZodTypeAny {\n return isRecord(value) && typeof value.safeParse === \"function\";\n}\n\nfunction isZodRawShape(value: unknown): value is ZodRawShape {\n return (\n isRecord(value) &&\n Object.keys(value).length > 0 &&\n Object.values(value).every(isZodSchema)\n );\n}\n\nfunction normalizeZodSchema(schema: ZodTypeAny): JsonSchema {\n if (typeof toJsonSchema !== \"function\") {\n throw new Error(\"Installed zod package does not expose toJSONSchema\");\n }\n\n const jsonSchema = toJsonSchema(schema) as JsonSchema & {\n $schema?: string;\n };\n\n if (\"$schema\" in jsonSchema) {\n const { $schema: _ignored, ...rest } = jsonSchema;\n return rest;\n }\n\n return jsonSchema;\n}\n\n/**\n * Normalizes supported tool schema inputs to the JSON Schema form used internally.\n */\nexport function normalizeToolSchema(\n schema: ToolSchema | undefined,\n phase: \"input\" | \"output\",\n toolName: string,\n): JsonSchema | undefined {\n if (schema === undefined) {\n return undefined;\n }\n\n if (isZodSchema(schema)) {\n return normalizeZodSchema(schema);\n }\n\n if (isZodRawShape(schema)) {\n return normalizeZodSchema(z.object(schema));\n }\n\n if (isRecord(schema)) {\n return schema;\n }\n\n throw new Error(\n `Unsupported ${phase} schema for tool ${toolName}. Expected JSON Schema, a Zod schema, or an MCP-style Zod shape.`,\n );\n}\n","/**\n * Indents each line of the given string by a specified number of levels.\n */\nexport function indent(value: string, level = 1): string {\n return value\n .split(\"\\n\")\n .map((line) => `${\" \".repeat(level)}${line}`)\n .join(\"\\n\");\n}\n\n/**\n * Renders a short TSDoc-style block when documentation is available.\n */\nexport function renderDocComment(lines: string[]): string {\n if (lines.length === 0) {\n return \"\";\n }\n\n return [\"/**\", ...lines.map((line) => ` * ${line}`), \" */\"].join(\"\\n\");\n}\n\n/**\n * Renders a namespace declaration with optional members.\n */\nexport function renderNamespaceDeclaration(\n name: string,\n members: string[],\n): string {\n if (members.length === 0) {\n return `declare namespace ${name} {}`;\n }\n\n return `declare namespace ${name} {\\n${indent(members.join(\"\\n\\n\"))}\\n}`;\n}\n","import { isValidIdentifier, serializePropertyName } from \"../identifier\";\nimport type { JsonSchema, TypegenToolDescriptor } from \"../types\";\nimport { indent, renderDocComment, renderNamespaceDeclaration } from \"./render\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nexport { indent } from \"./render\";\n\n/**\n * Converts a supported JSON Schema fragment into a TypeScript type expression.\n */\nexport function schemaToType(\n schema: JsonSchema | undefined,\n level = 0,\n): string {\n if (!schema) {\n return \"unknown\";\n }\n\n if (\n \"allOf\" in schema ||\n \"anyOf\" in schema ||\n \"oneOf\" in schema ||\n \"$ref\" in schema ||\n Array.isArray(schema.type)\n ) {\n return \"unknown\";\n }\n\n switch (schema.type) {\n case \"string\":\n return \"string\";\n case \"number\":\n case \"integer\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"null\":\n return \"null\";\n case \"array\": {\n const itemType = schemaToType(\n isRecord(schema.items) ? (schema.items as JsonSchema) : undefined,\n level + 1,\n );\n\n if (isValidIdentifier(itemType)) {\n return `${itemType}[]`;\n }\n\n return `Array<${itemType}>`;\n }\n case \"object\": {\n const properties = isRecord(schema.properties) ? schema.properties : {};\n const required = new Set(\n Array.isArray(schema.required)\n ? schema.required.filter(\n (value): value is string => typeof value === \"string\",\n )\n : [],\n );\n const entries = Object.entries(properties);\n\n if (entries.length === 0) {\n return \"Record<string, unknown>\";\n }\n\n const lines = entries.map(([name, propertySchema]) => {\n const propertyType = schemaToType(\n isRecord(propertySchema) ? (propertySchema as JsonSchema) : undefined,\n level + 1,\n );\n const optionalToken = required.has(name) ? \"\" : \"?\";\n return `${serializePropertyName(name)}${optionalToken}: ${propertyType};`;\n });\n\n return `{\\n${indent(lines.join(\"\\n\"), level + 1)}\\n${\" \".repeat(level)}}`;\n }\n default:\n return \"unknown\";\n }\n}\n\nfunction formatToolDeclaration(\n name: string,\n tool: TypegenToolDescriptor,\n): string {\n const lines: string[] = [];\n const comment = tool.description ? renderDocComment([tool.description]) : \"\";\n if (comment) {\n lines.push(comment);\n }\n\n const inputType = schemaToType(tool.inputSchema);\n const outputType = schemaToType(tool.outputSchema);\n lines.push(`function ${name}(input: ${inputType}): Promise<${outputType}>;`);\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Generates a namespace declaration for a provider's tool schemas.\n */\nexport function generateTypesFromJsonSchema(\n providerName: string,\n tools: Record<string, TypegenToolDescriptor>,\n): string {\n return renderNamespaceDeclaration(\n providerName,\n Object.entries(tools).map(([name, tool]) =>\n formatToolDeclaration(name, tool),\n ),\n );\n}\n","import Ajv, { type AnySchemaObject, type ValidateFunction } from \"ajv\";\n\nimport {\n ExecuteFailure,\n isExecuteFailure,\n isJsonSerializable,\n} from \"../errors\";\nimport { assertValidIdentifier } from \"../identifier\";\nimport { sanitizeToolName } from \"../sanitize\";\nimport { normalizeToolSchema } from \"../schema/normalizeSchema\";\nimport { generateTypesFromJsonSchema } from \"../typegen/jsonSchema\";\nimport type {\n JsonSchema,\n ResolvedToolDescriptor,\n ResolvedToolProvider,\n ToolExecutionContext,\n ToolProvider,\n TypegenToolDescriptor,\n} from \"../types\";\n\nconst DEFAULT_PROVIDER_NAME = \"codemode\";\nfunction assertValidNamespace(name: string): void {\n assertValidIdentifier(name, \"provider namespace\");\n}\n\nfunction compileValidator(\n ajv: Ajv,\n schema: JsonSchema | undefined,\n): ValidateFunction | undefined {\n return schema ? ajv.compile(schema as AnySchemaObject) : undefined;\n}\n\nfunction formatValidationMessage(\n ajv: Ajv,\n phase: \"input\" | \"output\",\n toolName: string,\n validator: ValidateFunction,\n): string {\n return `Invalid ${phase} for tool ${toolName}: ${ajv.errorsText(validator.errors)}`;\n}\n\n/**\n * Resolves a tool provider into the validated, sanitized shape consumed by executors.\n */\nexport function resolveProvider(provider: ToolProvider): ResolvedToolProvider {\n const name = provider.name ?? DEFAULT_PROVIDER_NAME;\n assertValidNamespace(name);\n\n // strict: false allows schemas with extra keywords (e.g. Zod-generated $schema)\n // that don't conform to the strict JSON Schema vocabulary.\n const ajv = new Ajv({\n allErrors: true,\n strict: false,\n });\n\n const originalToSafeName: Record<string, string> = {};\n const safeToOriginalName: Record<string, string> = {};\n const usedSafeNames = new Set<string>();\n const resolvedTools: Record<string, ResolvedToolDescriptor> = {};\n const typegenTools: Record<string, TypegenToolDescriptor> = {};\n\n for (const [originalName, descriptor] of Object.entries(provider.tools)) {\n const baseSafeName = sanitizeToolName(originalName);\n let safeName = baseSafeName;\n let suffix = 2;\n\n while (usedSafeNames.has(safeName)) {\n safeName = `${baseSafeName}__${suffix}`;\n suffix += 1;\n }\n\n usedSafeNames.add(safeName);\n originalToSafeName[originalName] = safeName;\n safeToOriginalName[safeName] = originalName;\n\n const inputSchema = normalizeToolSchema(\n descriptor.inputSchema,\n \"input\",\n originalName,\n );\n const outputSchema = normalizeToolSchema(\n descriptor.outputSchema,\n \"output\",\n originalName,\n );\n const inputValidator = compileValidator(ajv, inputSchema);\n const outputValidator = compileValidator(ajv, outputSchema);\n\n resolvedTools[safeName] = {\n description: descriptor.description,\n execute: async (\n input: unknown,\n context: ToolExecutionContext,\n ): Promise<unknown> => {\n if (inputValidator && !inputValidator(input)) {\n throw new ExecuteFailure(\n \"validation_error\",\n formatValidationMessage(ajv, \"input\", originalName, inputValidator),\n );\n }\n\n try {\n const result = await descriptor.execute(input, context);\n\n if (!isJsonSerializable(result)) {\n throw new ExecuteFailure(\n \"serialization_error\",\n `Tool ${originalName} returned a non-serializable value`,\n );\n }\n\n if (outputValidator && !outputValidator(result)) {\n throw new ExecuteFailure(\n \"validation_error\",\n formatValidationMessage(\n ajv,\n \"output\",\n originalName,\n outputValidator,\n ),\n );\n }\n\n return result;\n } catch (error) {\n if (isExecuteFailure(error)) {\n throw error;\n }\n\n throw new ExecuteFailure(\n \"tool_error\",\n error instanceof Error\n ? error.message\n : `Tool ${originalName} failed`,\n );\n }\n },\n inputSchema,\n originalName,\n outputSchema,\n safeName,\n };\n\n typegenTools[safeName] = {\n description: descriptor.description,\n inputSchema,\n outputSchema,\n };\n }\n\n return {\n name,\n originalToSafeName,\n safeToOriginalName,\n tools: resolvedTools,\n types: provider.types ?? generateTypesFromJsonSchema(name, typegenTools),\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ import { n as isExecuteFailure, r as isJsonSerializable, t as ExecuteFailure } from "./errors-CgBwm39w.js";
2
+
3
+ //#region src/executor/shared.ts
4
+ const EXECUTION_TIMEOUT_MESSAGE = "Execution timed out";
5
+ /**
6
+ * Canonical error codes that may safely cross trusted executor boundaries.
7
+ */
8
+ const KNOWN_EXECUTE_ERROR_CODES = new Set([
9
+ "timeout",
10
+ "memory_limit",
11
+ "validation_error",
12
+ "tool_error",
13
+ "runtime_error",
14
+ "serialization_error",
15
+ "internal_error"
16
+ ]);
17
+ /**
18
+ * Returns whether the value is one of execbox's stable execution error codes.
19
+ */
20
+ function isKnownExecuteErrorCode(value) {
21
+ return KNOWN_EXECUTE_ERROR_CODES.has(value);
22
+ }
23
+ /**
24
+ * Returns the stable timeout message used across executor implementations.
25
+ */
26
+ function getExecutionTimeoutMessage() {
27
+ return EXECUTION_TIMEOUT_MESSAGE;
28
+ }
29
+ /**
30
+ * Creates the canonical timeout failure result used for preflight cancellation.
31
+ */
32
+ function createTimeoutExecuteResult(durationMs = 0) {
33
+ return {
34
+ durationMs,
35
+ error: {
36
+ code: "timeout",
37
+ message: getExecutionTimeoutMessage()
38
+ },
39
+ logs: [],
40
+ ok: false
41
+ };
42
+ }
43
+ /**
44
+ * Normalizes an unknown thrown value into a human-readable message.
45
+ */
46
+ function normalizeThrownMessage(error) {
47
+ if (error instanceof Error) return error.message;
48
+ if (typeof error === "object" && error !== null && "message" in error) {
49
+ const message = error.message;
50
+ if (typeof message === "string") return message;
51
+ }
52
+ return String(error);
53
+ }
54
+ /**
55
+ * Returns the thrown error name when one is available.
56
+ */
57
+ function normalizeThrownName(error) {
58
+ if (error instanceof Error) return error.name;
59
+ if (typeof error === "object" && error !== null && "name" in error) {
60
+ const name = error.name;
61
+ if (typeof name === "string") return name;
62
+ }
63
+ }
64
+ /**
65
+ * Builds the standard tool execution context passed to resolved tool wrappers.
66
+ */
67
+ function createExecutionContext(signal, providerName, safeToolName, originalToolName) {
68
+ return {
69
+ originalToolName,
70
+ providerName,
71
+ safeToolName,
72
+ signal
73
+ };
74
+ }
75
+ /**
76
+ * Truncates captured logs to the configured line and character limits.
77
+ */
78
+ function truncateLogs(logs, maxLogLines, maxLogChars) {
79
+ const limitedLines = logs.slice(0, maxLogLines);
80
+ let remainingChars = maxLogChars;
81
+ const truncated = [];
82
+ for (const line of limitedLines) {
83
+ if (remainingChars <= 0) break;
84
+ if (line.length <= remainingChars) {
85
+ truncated.push(line);
86
+ remainingChars -= line.length;
87
+ continue;
88
+ }
89
+ truncated.push(line.slice(0, remainingChars));
90
+ break;
91
+ }
92
+ return truncated;
93
+ }
94
+ function formatLogValue(value) {
95
+ if (typeof value === "string") return value;
96
+ if (value === void 0) return "undefined";
97
+ try {
98
+ return JSON.stringify(value);
99
+ } catch {
100
+ return String(value);
101
+ }
102
+ }
103
+ /**
104
+ * Formats guest console arguments into a single host-side log line.
105
+ */
106
+ function formatConsoleLine(values) {
107
+ return values.map((value) => formatLogValue(value)).join(" ");
108
+ }
109
+
110
+ //#endregion
111
+ //#region src/runner.ts
112
+ function toTrustedExecuteError(error) {
113
+ if (isExecuteFailure(error)) return {
114
+ code: error.code,
115
+ message: error.message
116
+ };
117
+ return {
118
+ code: "tool_error",
119
+ message: normalizeThrownMessage(error)
120
+ };
121
+ }
122
+ /**
123
+ * Converts resolved providers into manifest metadata that reveals only namespace details.
124
+ */
125
+ function extractProviderManifests(providers) {
126
+ return providers.map((provider) => ({
127
+ name: provider.name,
128
+ tools: Object.fromEntries(Object.entries(provider.tools).map(([safeToolName, descriptor]) => [safeToolName, {
129
+ description: descriptor.description,
130
+ originalName: descriptor.originalName,
131
+ safeName: descriptor.safeName
132
+ }])),
133
+ types: provider.types
134
+ }));
135
+ }
136
+ /**
137
+ * Creates a host-side dispatcher for runner-emitted tool calls.
138
+ */
139
+ function createToolCallDispatcher(providers, signal) {
140
+ const providerMap = new Map(providers.map((provider) => [provider.name, provider]));
141
+ return async (call) => {
142
+ const provider = providerMap.get(call.providerName);
143
+ const descriptor = provider?.tools[call.safeToolName];
144
+ if (!provider || !descriptor) return {
145
+ error: {
146
+ code: "internal_error",
147
+ message: `Unknown tool ${call.providerName}.${call.safeToolName}`
148
+ },
149
+ ok: false
150
+ };
151
+ try {
152
+ if (signal.aborted) return {
153
+ error: {
154
+ code: "timeout",
155
+ message: getExecutionTimeoutMessage()
156
+ },
157
+ ok: false
158
+ };
159
+ const result = await descriptor.execute(call.input, createExecutionContext(signal, provider.name, descriptor.safeName, descriptor.originalName));
160
+ if (result !== void 0 && !isJsonSerializable(result)) throw new ExecuteFailure("serialization_error", "Host value is not JSON-serializable");
161
+ return {
162
+ ok: true,
163
+ result
164
+ };
165
+ } catch (error) {
166
+ return {
167
+ error: toTrustedExecuteError(error),
168
+ ok: false
169
+ };
170
+ }
171
+ };
172
+ }
173
+
174
+ //#endregion
175
+ export { formatConsoleLine as a, normalizeThrownMessage as c, createTimeoutExecuteResult as i, normalizeThrownName as l, extractProviderManifests as n, getExecutionTimeoutMessage as o, createExecutionContext as r, isKnownExecuteErrorCode as s, createToolCallDispatcher as t, truncateLogs as u };
176
+ //# sourceMappingURL=runner-8eVWfKxh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-8eVWfKxh.js","names":["truncated: string[]"],"sources":["../src/executor/shared.ts","../src/runner.ts"],"sourcesContent":["import type {\n ExecuteError,\n ExecuteErrorCode,\n ExecuteResult,\n ToolExecutionContext,\n} from \"../types\";\n\nconst EXECUTION_TIMEOUT_MESSAGE = \"Execution timed out\";\n\n/**\n * Canonical error codes that may safely cross trusted executor boundaries.\n */\nconst KNOWN_EXECUTE_ERROR_CODES = new Set<ExecuteErrorCode>([\n \"timeout\",\n \"memory_limit\",\n \"validation_error\",\n \"tool_error\",\n \"runtime_error\",\n \"serialization_error\",\n \"internal_error\",\n]);\n\n/**\n * Returns whether the value is one of execbox's stable execution error codes.\n */\nexport function isKnownExecuteErrorCode(\n value: unknown,\n): value is ExecuteErrorCode {\n return KNOWN_EXECUTE_ERROR_CODES.has(value as ExecuteErrorCode);\n}\n\n/**\n * Returns the stable timeout message used across executor implementations.\n */\nexport function getExecutionTimeoutMessage(): string {\n return EXECUTION_TIMEOUT_MESSAGE;\n}\n\n/**\n * Creates the canonical timeout failure result used for preflight cancellation.\n */\nexport function createTimeoutExecuteResult(durationMs = 0): ExecuteResult {\n return {\n durationMs,\n error: {\n code: \"timeout\",\n message: getExecutionTimeoutMessage(),\n } satisfies ExecuteError,\n logs: [],\n ok: false,\n };\n}\n\n/**\n * Normalizes an unknown thrown value into a human-readable message.\n */\nexport function normalizeThrownMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n if (typeof error === \"object\" && error !== null && \"message\" in error) {\n const message = (error as { message?: unknown }).message;\n if (typeof message === \"string\") {\n return message;\n }\n }\n\n return String(error);\n}\n\n/**\n * Returns the thrown error name when one is available.\n */\nexport function normalizeThrownName(error: unknown): string | undefined {\n if (error instanceof Error) {\n return error.name;\n }\n\n if (typeof error === \"object\" && error !== null && \"name\" in error) {\n const name = (error as { name?: unknown }).name;\n if (typeof name === \"string\") {\n return name;\n }\n }\n\n return undefined;\n}\n\n/**\n * Builds the standard tool execution context passed to resolved tool wrappers.\n */\nexport function createExecutionContext(\n signal: AbortSignal,\n providerName: string,\n safeToolName: string,\n originalToolName: string,\n): ToolExecutionContext {\n return {\n originalToolName,\n providerName,\n safeToolName,\n signal,\n };\n}\n\n/**\n * Truncates captured logs to the configured line and character limits.\n */\nexport function truncateLogs(\n logs: string[],\n maxLogLines: number,\n maxLogChars: number,\n): string[] {\n const limitedLines = logs.slice(0, maxLogLines);\n let remainingChars = maxLogChars;\n const truncated: string[] = [];\n\n for (const line of limitedLines) {\n if (remainingChars <= 0) {\n break;\n }\n\n if (line.length <= remainingChars) {\n truncated.push(line);\n remainingChars -= line.length;\n continue;\n }\n\n truncated.push(line.slice(0, remainingChars));\n break;\n }\n\n return truncated;\n}\n\nfunction formatLogValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value === undefined) {\n return \"undefined\";\n }\n\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\n/**\n * Formats guest console arguments into a single host-side log line.\n */\nexport function formatConsoleLine(values: unknown[]): string {\n return values.map((value) => formatLogValue(value)).join(\" \");\n}\n","import {\n createExecutionContext,\n getExecutionTimeoutMessage,\n normalizeThrownMessage,\n} from \"./executor/shared.ts\";\nimport {\n ExecuteFailure,\n isExecuteFailure,\n isJsonSerializable,\n} from \"./errors.ts\";\nimport type { ExecuteError, ResolvedToolProvider } from \"./types.ts\";\n\n/**\n * Transport-safe metadata for one exposed tool.\n */\nexport interface ProviderToolManifest {\n description?: string;\n originalName: string;\n safeName: string;\n}\n\n/**\n * Namespace manifest shared with runner implementations.\n */\nexport interface ProviderManifest {\n name: string;\n tools: Record<string, ProviderToolManifest>;\n types: string;\n}\n\n/**\n * Execution limits forwarded to runner implementations.\n */\nexport interface ExecutorRuntimeOptions {\n maxLogChars?: number;\n maxLogLines?: number;\n memoryLimitBytes?: number;\n timeoutMs?: number;\n}\n\n/**\n * Public execution options accepted by executors per call.\n */\nexport interface ExecutionOptions extends ExecutorRuntimeOptions {\n signal?: AbortSignal;\n}\n\n/**\n * Tool invocation request emitted from a runner.\n */\nexport interface ToolCall {\n input: unknown;\n providerName: string;\n safeToolName: string;\n}\n\n/**\n * Trusted host response to a tool invocation request.\n */\nexport type ToolCallResult =\n | {\n ok: true;\n result: unknown;\n }\n | {\n error: ExecuteError;\n ok: false;\n };\n\nfunction toTrustedExecuteError(error: unknown): ExecuteError {\n if (isExecuteFailure(error)) {\n return {\n code: error.code,\n message: error.message,\n };\n }\n\n return {\n code: \"tool_error\",\n message: normalizeThrownMessage(error),\n };\n}\n\n/**\n * Converts resolved providers into manifest metadata that reveals only namespace details.\n */\nexport function extractProviderManifests(\n providers: ResolvedToolProvider[],\n): ProviderManifest[] {\n return providers.map((provider) => ({\n name: provider.name,\n tools: Object.fromEntries(\n Object.entries(provider.tools).map(([safeToolName, descriptor]) => [\n safeToolName,\n {\n description: descriptor.description,\n originalName: descriptor.originalName,\n safeName: descriptor.safeName,\n },\n ]),\n ),\n types: provider.types,\n }));\n}\n\n/**\n * Creates a host-side dispatcher for runner-emitted tool calls.\n */\nexport function createToolCallDispatcher(\n providers: ResolvedToolProvider[],\n signal: AbortSignal,\n): (call: ToolCall) => Promise<ToolCallResult> {\n const providerMap = new Map(\n providers.map((provider) => [provider.name, provider] as const),\n );\n\n return async (call) => {\n const provider = providerMap.get(call.providerName);\n const descriptor = provider?.tools[call.safeToolName];\n\n if (!provider || !descriptor) {\n return {\n error: {\n code: \"internal_error\",\n message: `Unknown tool ${call.providerName}.${call.safeToolName}`,\n },\n ok: false,\n };\n }\n\n try {\n if (signal.aborted) {\n return {\n error: {\n code: \"timeout\",\n message: getExecutionTimeoutMessage(),\n },\n ok: false,\n };\n }\n\n const result = await descriptor.execute(\n call.input,\n createExecutionContext(\n signal,\n provider.name,\n descriptor.safeName,\n descriptor.originalName,\n ),\n );\n\n if (result !== undefined && !isJsonSerializable(result)) {\n throw new ExecuteFailure(\n \"serialization_error\",\n \"Host value is not JSON-serializable\",\n );\n }\n\n return {\n ok: true,\n result,\n };\n } catch (error) {\n return {\n error: toTrustedExecuteError(error),\n ok: false,\n };\n }\n };\n}\n"],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Public TypeScript declarations for this package entrypoint.
4
+ */
1
5
  import { ZodRawShape, ZodTypeAny } from "zod";
2
6
 
3
7
  //#region src/types.d.ts
@@ -170,25 +174,5 @@ declare function extractProviderManifests(providers: ResolvedToolProvider[]): Pr
170
174
  */
171
175
  declare function createToolCallDispatcher(providers: ResolvedToolProvider[], signal: AbortSignal): (call: ToolCall) => Promise<ToolCallResult>;
172
176
  //#endregion
173
- //#region src/executor/executor.d.ts
174
- /**
175
- * Optional pooling controls for executor implementations that can reuse
176
- * host-side shells while still creating a fresh guest runtime per execution.
177
- */
178
- interface ExecutorPoolOptions {
179
- idleTimeoutMs?: number;
180
- maxSize: number;
181
- minSize?: number;
182
- prewarm?: boolean | number;
183
- }
184
- /**
185
- * Executes JavaScript against one or more resolved tool providers.
186
- */
187
- interface Executor {
188
- execute(code: string, providers: ResolvedToolProvider[], options?: ExecutionOptions): Promise<ExecuteResult>;
189
- dispose?(): Promise<void> | void;
190
- prewarm?(count?: number): Promise<void>;
191
- }
192
- //#endregion
193
- export { ToolDescriptor as _, ProviderManifest as a, ToolSchema as b, ToolCallResult as c, ExecuteError as d, ExecuteErrorCode as f, ResolvedToolProvider as g, ResolvedToolDescriptor as h, ExecutorRuntimeOptions as i, createToolCallDispatcher as l, JsonSchema as m, ExecutorPoolOptions as n, ProviderToolManifest as o, ExecuteResult as p, ExecutionOptions as r, ToolCall as s, Executor as t, extractProviderManifests as u, ToolExecutionContext as v, TypegenToolDescriptor as x, ToolProvider as y };
194
- //# sourceMappingURL=executor-B_S-ZRgM.d.ts.map
177
+ export { ToolProvider as _, ToolCall as a, extractProviderManifests as c, ExecuteResult as d, JsonSchema as f, ToolExecutionContext as g, ToolDescriptor as h, ProviderToolManifest as i, ExecuteError as l, ResolvedToolProvider as m, ExecutorRuntimeOptions as n, ToolCallResult as o, ResolvedToolDescriptor as p, ProviderManifest as r, createToolCallDispatcher as s, ExecutionOptions as t, ExecuteErrorCode as u, ToolSchema as v, TypegenToolDescriptor as y };
178
+ //# sourceMappingURL=runner-BJu1lZFi.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-BJu1lZFi.d.cts","names":[],"sources":["../src/types.ts","../src/runner.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;AAKA,CAAA,CAAA;AAKY,IAAA,CALA,UAAA,CAAA,CAAA,CAAa,MAKH,CAAA,MAAA,CAAA,CAAA,OAAA,CAAA;;;;AAAwC,IAAA,CAAlD,UAAA,CAAA,CAAA,CAAa,UAAqC,CAAA,CAAA,CAAxB,UAAwB,CAAA,CAAA,CAAX,WAAW;AAK9D,CAAA,CAAA;AAYA,CAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,KAAA,CAAA,QAAA,CAAA,EAAA,CAAA,SAAA,CAAA,GAAA,CAAA,OAAA,CAAA,IAAA,CAAA,KAAA;AAUA,CAAA,CAAA;AAiBiB,IAAA,CAvCL,gBAAA,CAAA,CAAA,CAuCyB,CAAA,OAAA,CAE3B,CAAA,CAAA,CAAA,CAAA,YAAA,CAAW,CAAA,CAAA,CAAA,CAAA,gBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA,aAAA,CAAA,CAAA,CAAA,CAAA,CAAA,mBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,cAAA,CAAA;AAYrB,CAAA,CAAA;;;AAUa,SAAA,CAnDI,YAAA,CAmDJ;EACN,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,QAAA,CAAA,KAAA,CAAA,QAAA,CAAA,CAAA,CAAA;EAAO,IAAA,CAAA,CAlDN,gBAkDM;EAMG,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,QAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,CAAA;EAYA,OAAA,CAAA,CAAA,MAAA;;;;;AAYoD,IAAA,CAxEzD,aAwEyD,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA;EAMpD,UAAA,CAAA,CAAA,MAAA;EAIK,IAAA,CAAA,CAAA,MAAA,CAAA,CAAA;EAEA,EAAA,CAAA,CAAA,IAAA;EAEE,MAAA,CAAA,CAjFV,CAiFU;CAAf,CAAA,CAAA,CAAA;EAAM,UAAA,CAAA,CAAA,MAAA;EAQH,KAAA,CAAA,CArFC,YAqFD;EACV,IAAA,CAAA,CAAA,MAAA,CAAA,CAAA;EADkC,EAAA,CAAA,CAAA,KAAA;CAIrB;;;;UAjFE,oBAAA;;UAEP;ECzCO,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,OAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA;EASA,YAAA,CAAA,CAAA,MAAgB;EAShB,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CAAA,CAAA;EAUA,YAAA,CAAA,CAAA,MAAiB;EAOjB,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,YAAA,CAAA,CAAA,CAAA;EASL,gBAAA,CAAA,CAAc,MAAA;AA2B1B;AAsBA,CAAA,CAAA;;;AAGU,SAAA,CD3CO,cAAA,CC2CP;EAAqB,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,KAAA,CAAA,QAAA,CAAA,WAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,KAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA;EAAR,WAAA,CAAA,CAAA,CAAA,MAAA;EAAO,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,KAAA,CAAA,MAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,CAAA;gBDvCd;;iBAEC;;qCAIJ,yBACN;;;;;UAMU,YAAA;;;;SAIR,eAAe;;;;;;;UAQP,sBAAA;;;;gBAID;;iBAEC;;;;;;qCAMoB,yBAAyB;;;;;UAM7C,oBAAA;;;;sBAIK;;sBAEA;;SAEb,eAAe;;;;;;;KAQZ,qBAAA,CAAA,CAAA,CAAwB,KAClC,0EAGA,QAAQ,KAAK;;;;;AAlIf,CAAA,CAAA;AAKY,SAAA,CCKK,oBAAA,CDLK;EAAG,WAAA,CAAA,CAAA,CAAA,MAAA;EAAa,YAAA,CAAA,CAAA,MAAA;EAAa,QAAA,CAAA,CAAA,MAAA;;AAKnD,CAAA,CAAA;AAYA,CAAA,CAAA,CAAA,SAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,eAAA;AAUA,CAAA,CAAA;AAiBiB,SAAA,CC9BA,gBAAA,CD8BoB;EAcpB,IAAA,CAAA,CAAA,MAAA;EAID,KAAA,CAAA,CC9CP,MD8CO,CAAA,MAAA,CAAA,CC9CQ,oBD8CR,CAAA;EAEC,KAAA,CAAA,CAAA,MAAA;;;;AAWjB,CAAA,CAAA;AAYiB,SAAA,CChEA,sBAAA,CDgEsB;EAIvB,WAAA,CAAA,CAAA,CAAA,MAAA;EAEC,WAAA,CAAA,CAAA,CAAA,MAAA;EAMoB,gBAAA,CAAA,CAAA,CAAA,MAAA;EAAyB,SAAA,CAAA,CAAA,CAAA,MAAA;;AAM9D,CAAA,CAAA;;;AAQwB,SAAA,CChFP,gBAAA,CAAA,OAAA,CAAyB,sBDgFlB,CAAA;EAAf,MAAA,CAAA,CAAA,CC/EE,WD+EF;;AAQT,CAAA,CAAA;;;AAIe,SAAA,CCrFE,QAAA,CDqFF;EAAL,KAAA,CAAA,CAAA,OAAA;EAAR,YAAA,CAAA,CAAA,MAAA;EAAO,YAAA,CAAA,CAAA,MAAA;;;;ACxHT,CAAA,CAAA;AASiB,IAAA,CAmCL,cAAA,CAAA,CAAA,CAnCqB;EAShB,EAAA,CAAA,CAAA,IAAA;EAUA,MAAA,CAAA,CAAA,OAAA;AAOjB,CAAA,CAAA,CAAA,CAAiB;EASL,KAAA,CAAA,CAMC,YANa;EA2BV,EAAA,CAAA,CAAA,KAAA;AAsBhB,CAAA;;;;AAG+B,OAAA,CAAA,QAAA,CAzBf,wBAAA,CAyBe,SAAA,CAAA,CAxBlB,oBAwBkB,CAAA,CAAA,CAAA,CAAA,CAvB5B,gBAuB4B,CAAA,CAAA;;;;iBAHf,wBAAA,YACH,gCACH,qBACA,aAAa,QAAQ"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Public TypeScript declarations for this package entrypoint.
4
+ */
1
5
  import { ZodRawShape, ZodTypeAny } from "zod";
2
6
 
3
7
  //#region src/types.d.ts
@@ -170,25 +174,5 @@ declare function extractProviderManifests(providers: ResolvedToolProvider[]): Pr
170
174
  */
171
175
  declare function createToolCallDispatcher(providers: ResolvedToolProvider[], signal: AbortSignal): (call: ToolCall) => Promise<ToolCallResult>;
172
176
  //#endregion
173
- //#region src/executor/executor.d.ts
174
- /**
175
- * Optional pooling controls for executor implementations that can reuse
176
- * host-side shells while still creating a fresh guest runtime per execution.
177
- */
178
- interface ExecutorPoolOptions {
179
- idleTimeoutMs?: number;
180
- maxSize: number;
181
- minSize?: number;
182
- prewarm?: boolean | number;
183
- }
184
- /**
185
- * Executes JavaScript against one or more resolved tool providers.
186
- */
187
- interface Executor {
188
- execute(code: string, providers: ResolvedToolProvider[], options?: ExecutionOptions): Promise<ExecuteResult>;
189
- dispose?(): Promise<void> | void;
190
- prewarm?(count?: number): Promise<void>;
191
- }
192
- //#endregion
193
- export { ToolDescriptor as _, ProviderManifest as a, ToolSchema as b, ToolCallResult as c, ExecuteError as d, ExecuteErrorCode as f, ResolvedToolProvider as g, ResolvedToolDescriptor as h, ExecutorRuntimeOptions as i, createToolCallDispatcher as l, JsonSchema as m, ExecutorPoolOptions as n, ProviderToolManifest as o, ExecuteResult as p, ExecutionOptions as r, ToolCall as s, Executor as t, extractProviderManifests as u, ToolExecutionContext as v, TypegenToolDescriptor as x, ToolProvider as y };
194
- //# sourceMappingURL=executor-CLQwhiIE.d.cts.map
177
+ export { ToolProvider as _, ToolCall as a, extractProviderManifests as c, ExecuteResult as d, JsonSchema as f, ToolExecutionContext as g, ToolDescriptor as h, ProviderToolManifest as i, ExecuteError as l, ResolvedToolProvider as m, ExecutorRuntimeOptions as n, ToolCallResult as o, ResolvedToolDescriptor as p, ProviderManifest as r, createToolCallDispatcher as s, ExecutionOptions as t, ExecuteErrorCode as u, ToolSchema as v, TypegenToolDescriptor as y };
178
+ //# sourceMappingURL=runner-CbC-ncVb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-CbC-ncVb.d.ts","names":[],"sources":["../src/types.ts","../src/runner.ts"],"sourcesContent":[],"mappings":"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"}