@execbox/core 0.5.0 → 0.7.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.
- package/README.md +34 -15
- package/dist/{errors-DlbJQYs7.d.ts → errors-BIWv-QIC.d.ts} +2 -2
- package/dist/{errors-DlbJQYs7.d.ts.map → errors-BIWv-QIC.d.ts.map} +1 -1
- package/dist/{errors-wS8yjQhS.js → errors-DdWVEGU8.js} +1 -1
- package/dist/{errors-wS8yjQhS.js.map → errors-DdWVEGU8.js.map} +1 -1
- package/dist/{errors-B9ADBuDH.d.cts → errors-y4C-EIWT.d.cts} +2 -2
- package/dist/{errors-B9ADBuDH.d.cts.map → errors-y4C-EIWT.d.cts.map} +1 -1
- package/dist/{executor-B7q7K_27.d.ts → executor-BOTd9xNK.d.ts} +2 -2
- package/dist/{executor-B7q7K_27.d.ts.map → executor-BOTd9xNK.d.ts.map} +1 -1
- package/dist/{executor-BsE5nF-j.d.cts → executor-CtbrvTQ_.d.cts} +2 -2
- package/dist/{executor-BsE5nF-j.d.cts.map → executor-CtbrvTQ_.d.cts.map} +1 -1
- package/dist/index.cjs +2 -10
- package/dist/index.d.cts +4 -38
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +4 -38
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/mcp/index.cjs +101 -34
- package/dist/mcp/index.cjs.map +1 -1
- package/dist/mcp/index.d.cts +24 -4
- package/dist/mcp/index.d.cts.map +1 -1
- package/dist/mcp/index.d.ts +24 -4
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +102 -35
- package/dist/mcp/index.js.map +1 -1
- package/dist/protocol/index.cjs +7 -3
- package/dist/protocol/index.cjs.map +1 -1
- package/dist/protocol/index.d.cts +4 -4
- package/dist/protocol/index.d.cts.map +1 -1
- package/dist/protocol/index.d.ts +4 -4
- package/dist/protocol/index.d.ts.map +1 -1
- package/dist/protocol/index.js +8 -4
- package/dist/protocol/index.js.map +1 -1
- package/dist/{resolveProvider-UqQxdF4j.js → resolveProvider-CMrXPuTx.js} +14 -3
- package/dist/resolveProvider-CMrXPuTx.js.map +1 -0
- package/dist/{resolveProvider-BZYSw8Qk.cjs → resolveProvider-DFAg6No5.cjs} +12 -43
- package/dist/resolveProvider-DFAg6No5.cjs.map +1 -0
- package/dist/{runner-CsrfDub-.cjs → runner-BEY9nWc7.cjs} +2 -1
- package/dist/runner-BEY9nWc7.cjs.map +1 -0
- package/dist/{runner-6GMM-5ur.js → runner-BWAVLBi6.js} +3 -2
- package/dist/runner-BWAVLBi6.js.map +1 -0
- package/dist/{runner-ClFrFnz9.d.ts → runner-Cy18Z0u0.d.cts} +26 -2
- package/dist/runner-Cy18Z0u0.d.cts.map +1 -0
- package/dist/{runner-DSgvu6Ad.d.cts → runner-DXLu0eJV.d.ts} +26 -2
- package/dist/runner-DXLu0eJV.d.ts.map +1 -0
- package/dist/runtime.cjs +2 -2
- package/dist/runtime.d.cts +4 -4
- package/dist/runtime.d.ts +4 -4
- package/dist/runtime.js +2 -2
- package/package.json +1 -1
- package/dist/resolveProvider-BZYSw8Qk.cjs.map +0 -1
- package/dist/resolveProvider-UqQxdF4j.js.map +0 -1
- package/dist/runner-6GMM-5ur.js.map +0 -1
- package/dist/runner-ClFrFnz9.d.ts.map +0 -1
- package/dist/runner-CsrfDub-.cjs.map +0 -1
- package/dist/runner-DSgvu6Ad.d.cts.map +0 -1
package/dist/mcp/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["closePromise: Promise<void> | undefined","provider: ToolProvider","closePromise: Promise<void> | undefined"],"sources":["../../src/mcp/mcpWrappedToolTypes.ts","../../src/mcp/createMcpToolProvider.ts","../../src/mcp/codeMcpServer.ts"],"sourcesContent":["import type { ResolvedToolProvider } from \"../types\";\nimport { schemaToType } from \"../typegen/jsonSchema\";\nimport {\n renderDocComment,\n renderNamespaceDeclaration,\n} from \"../typegen/render\";\n\nconst MCP_CALL_TOOL_RESULT_TYPE = [\n \"type McpCallToolResult = {\",\n \" content: Array<{\",\n \" type: string;\",\n \" text?: string;\",\n \" data?: string;\",\n \" mimeType?: string;\",\n \" resource?: unknown;\",\n \" uri?: string;\",\n \" name?: string;\",\n \" description?: string;\",\n \" }>;\",\n \" structuredContent?: unknown;\",\n \" isError?: boolean;\",\n \" _meta?: Record<string, unknown>;\",\n \"};\",\n].join(\"\\n\");\n\n/**\n * Generates the wrapped MCP tool namespace declarations exposed to guest code.\n */\nexport function generateMcpWrappedToolTypes(\n provider: ResolvedToolProvider,\n): string {\n const declarations = [MCP_CALL_TOOL_RESULT_TYPE];\n\n for (const [safeName, tool] of Object.entries(provider.tools)) {\n const comment = renderDocComment([\n ...(tool.description ? [tool.description, \"\"] : []),\n \"Wrapped MCP tool. Inspect structuredContent first, then fall back to content text items.\",\n ]);\n\n declarations.push(\n [\n comment,\n `function ${safeName}(input: ${schemaToType(tool.inputSchema)}): Promise<McpCallToolResult>;`,\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n );\n }\n\n return renderNamespaceDeclaration(provider.name, declarations);\n}\n","import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { InMemoryTransport } from \"@modelcontextprotocol/sdk/inMemory.js\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { Implementation } from \"@modelcontextprotocol/sdk/types.js\";\n\nimport { resolveProvider } from \"../provider/resolveProvider\";\nimport type { ResolvedToolProvider, ToolProvider } from \"../types\";\nimport { generateMcpWrappedToolTypes } from \"./mcpWrappedToolTypes\";\n\n/**\n * Caller-owned MCP client source used by the convenience wrapper API.\n */\nexport type McpToolClientSource = {\n client: Client;\n serverInfo?: Implementation;\n};\n\n/**\n * Local MCP server source that requires explicit lifecycle cleanup.\n */\nexport type McpToolServerSource = {\n server: McpServer;\n serverInfo?: Implementation;\n};\n\n/**\n * Source used to discover MCP tools for wrapping.\n */\nexport type McpToolSource = McpToolClientSource | McpToolServerSource;\n\nconst DEFAULT_MCP_TOOL_CLIENT_INFO = {\n name: \"mcp-tool-client\",\n version: \"0.0.0\",\n} satisfies Implementation;\n\n/**\n * Returns the upstream server identity when the source can provide one.\n */\nexport function getMcpToolSourceServerInfo(\n source: McpToolSource,\n): Implementation | undefined {\n if (source.serverInfo) {\n return source.serverInfo;\n }\n\n if (\"client\" in source) {\n return source.client.getServerVersion();\n }\n\n return undefined;\n}\n\n/**\n * Options for wrapping MCP tools into a code-execution provider.\n */\nexport interface CreateMcpToolProviderOptions {\n /** Namespace exposed to guest code for the wrapped tools. */\n namespace?: string;\n /** Implementation metadata exposed to local `{ server }` sources as the client identity. */\n clientInfo?: Implementation;\n}\n\n/**\n * Explicit handle for a wrapped MCP provider and any owned source connections.\n */\nexport interface McpToolProviderHandle {\n /** Resolved provider exposed to the executor or wrapper server. */\n provider: ResolvedToolProvider;\n /** Best-effort upstream server identity when available. */\n serverInfo?: Implementation;\n /** Releases any internal MCP client/server connection opened for the provider. */\n close: () => Promise<void>;\n}\n\ninterface OpenMcpToolClientResult {\n client: Client;\n close: () => Promise<void>;\n}\n\nasync function closeAll(closers: Array<() => Promise<void>>): Promise<void> {\n const results = await Promise.allSettled(closers.map((close) => close()));\n const rejected = results.find(\n (result): result is PromiseRejectedResult => result.status === \"rejected\",\n );\n\n if (rejected) {\n throw rejected.reason;\n }\n}\n\nasync function openMcpToolClient(\n source: McpToolSource,\n clientInfo: Implementation,\n): Promise<OpenMcpToolClientResult> {\n if (\"client\" in source) {\n return {\n client: source.client,\n close: async () => {},\n };\n }\n\n if (source.server.isConnected()) {\n throw new Error(\"{ server } sources must be unconnected local MCP servers\");\n }\n\n const [clientTransport, serverTransport] =\n InMemoryTransport.createLinkedPair();\n const client = new Client(clientInfo);\n let closePromise: Promise<void> | undefined;\n let serverConnected = false;\n\n try {\n await source.server.connect(serverTransport);\n serverConnected = true;\n await client.connect(clientTransport);\n } catch (error) {\n await Promise.allSettled([\n Promise.resolve().then(() => client.close()),\n serverConnected\n ? Promise.resolve().then(() => source.server.close())\n : Promise.resolve(),\n ]);\n throw error;\n }\n\n return {\n client,\n close: async () => {\n closePromise ??= closeAll([\n () => client.close(),\n () => source.server.close(),\n ]);\n return closePromise;\n },\n };\n}\n\n/**\n * Opens an MCP tool source as a resolved execution provider with explicit cleanup.\n */\nexport async function openMcpToolProvider(\n source: McpToolSource,\n options: CreateMcpToolProviderOptions = {},\n): Promise<McpToolProviderHandle> {\n const connection = await openMcpToolClient(\n source,\n options.clientInfo ?? DEFAULT_MCP_TOOL_CLIENT_INFO,\n );\n\n try {\n const toolsResponse = await connection.client.listTools();\n const provider: ToolProvider = {\n name: options.namespace ?? \"mcp\",\n tools: {},\n };\n\n for (const tool of toolsResponse.tools) {\n provider.tools[tool.name] = {\n description: tool.description,\n execute: async (input, context) => {\n const argumentsObject =\n typeof input === \"object\" && input !== null\n ? (input as Record<string, unknown>)\n : undefined;\n\n return connection.client.callTool(\n {\n arguments: argumentsObject,\n name: tool.name,\n },\n undefined,\n { signal: context.signal },\n );\n },\n inputSchema: tool.inputSchema,\n };\n }\n\n const resolvedProvider = resolveProvider(provider);\n\n return {\n close: connection.close,\n provider: {\n ...resolvedProvider,\n types: generateMcpWrappedToolTypes(resolvedProvider),\n },\n serverInfo: getMcpToolSourceServerInfo(source),\n };\n } catch (error) {\n await connection.close().catch(() => {});\n throw error;\n }\n}\n\n/**\n * Wraps MCP tools from a caller-owned MCP client as a resolved execution provider.\n */\nexport async function createMcpToolProvider(\n source: McpToolClientSource,\n options: CreateMcpToolProviderOptions = {},\n): Promise<ResolvedToolProvider> {\n if (\"server\" in (source as unknown as McpToolSource)) {\n throw new Error(\n \"createMcpToolProvider() no longer accepts { server } sources. Use openMcpToolProvider() to receive a cleanup handle for owned local MCP server connections.\",\n );\n }\n\n const handle = await openMcpToolProvider(source, options);\n return handle.provider;\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { Implementation } from \"@modelcontextprotocol/sdk/types.js\";\nimport * as z from \"zod\";\n\nimport type { Executor } from \"../executor/executor\";\nimport type { ResolvedToolProvider } from \"../types\";\nimport {\n openMcpToolProvider,\n type CreateMcpToolProviderOptions,\n type McpToolSource,\n} from \"./createMcpToolProvider\";\n\n/**\n * Options for exposing wrapped MCP tool execution through an MCP server.\n */\nexport interface CodeMcpServerOptions extends CreateMcpToolProviderOptions {\n /** Executor used to run guest JavaScript against the wrapped provider. */\n executor: Executor;\n /** Implementation metadata exposed to downstream clients as the wrapper server identity. */\n serverInfo?: Implementation;\n /** Maximum number of text characters returned in text content blocks. */\n maxTextChars?: number;\n /** Wrapper tool layout to expose on the returned server. */\n mode?: \"both\" | \"single\" | \"split\";\n /** Optional custom names for the wrapper tools. */\n names?: {\n execute?: string;\n search?: string;\n single?: string;\n };\n}\n\nconst DEFAULT_MAX_TEXT_CHARS = 24_000;\nconst DEFAULT_MCP_CODE_WRAPPER_SERVER_INFO = {\n name: \"mcp-code-wrapper\",\n version: \"0.0.0\",\n} satisfies Implementation;\n\nfunction truncateText(text: string, maxTextChars: number): string {\n return text.length <= maxTextChars ? text : text.slice(0, maxTextChars);\n}\n\nfunction renderText(value: unknown, maxTextChars: number): string {\n return truncateText(JSON.stringify(value, null, 2), maxTextChars);\n}\n\nfunction searchTools(\n provider: ResolvedToolProvider,\n query: string | undefined,\n limit: number,\n): Record<string, unknown> {\n const normalizedQuery = query?.toLowerCase().trim();\n const matches = Object.entries(provider.tools)\n .map(([safeName, descriptor]) => ({\n description: descriptor.description,\n inputSchema: descriptor.inputSchema,\n originalName: descriptor.originalName,\n outputSchema: descriptor.outputSchema,\n safeName,\n }))\n .filter((tool) => {\n if (!normalizedQuery) {\n return true;\n }\n\n return [tool.originalName, tool.safeName, tool.description ?? \"\"].some(\n (field) => field.toLowerCase().includes(normalizedQuery),\n );\n })\n .slice(0, limit);\n\n return {\n namespace: provider.name,\n originalToSafeName: provider.originalToSafeName,\n safeToOriginalName: provider.safeToOriginalName,\n tools: matches,\n types: provider.types,\n };\n}\n\nfunction registerExecuteTool(\n server: McpServer,\n name: string,\n provider: ResolvedToolProvider,\n executor: Executor,\n maxTextChars: number,\n description: string,\n): void {\n // Cast required: McpServer.registerTool's generic signature doesn't support\n // the narrow input/output shape we need for the code-execution tool.\n const registerTool = server.registerTool.bind(server) as (\n toolName: string,\n config: {\n description: string;\n inputSchema: Record<string, z.ZodTypeAny>;\n },\n handler: (args: { code: string }) => Promise<{\n content: Array<{ text: string; type: \"text\" }>;\n isError: boolean;\n structuredContent: Record<string, unknown>;\n }>,\n ) => void;\n\n registerTool(\n name,\n {\n description,\n inputSchema: {\n code: z.string(),\n },\n },\n async (args: { code: string }) => {\n const execution = await executor.execute(args.code, [provider]);\n\n return {\n content: [{ text: renderText(execution, maxTextChars), type: \"text\" }],\n isError: !execution.ok,\n // ExecuteResult is JSON-safe; cast satisfies the SDK's generic record type.\n structuredContent: execution as Record<string, unknown>,\n };\n },\n );\n}\n\nfunction registerSearchTool(\n server: McpServer,\n name: string,\n provider: ResolvedToolProvider,\n maxTextChars: number,\n): void {\n // Cast required: same rationale as registerExecuteTool above.\n const registerTool = server.registerTool.bind(server) as (\n toolName: string,\n config: {\n description: string;\n inputSchema: Record<string, z.ZodTypeAny>;\n },\n handler: (args: { limit?: number; query?: string }) => Promise<{\n content: Array<{ text: string; type: \"text\" }>;\n structuredContent: Record<string, unknown>;\n }>,\n ) => void;\n\n registerTool(\n name,\n {\n description: `Search wrapped MCP tools exposed under the ${provider.name} namespace.`,\n inputSchema: {\n limit: z.number().int().optional(),\n query: z.string().optional(),\n },\n },\n async (args: { limit?: number; query?: string }) => {\n const structuredContent = searchTools(\n provider,\n args.query,\n args.limit ?? 20,\n );\n return {\n content: [\n { text: renderText(structuredContent, maxTextChars), type: \"text\" },\n ],\n structuredContent,\n };\n },\n );\n}\n\nfunction attachOwnedClose(\n server: McpServer,\n closeOwnedResources: () => Promise<void>,\n): McpServer {\n const originalClose = server.close.bind(server);\n let closePromise: Promise<void> | undefined;\n\n server.close = async () => {\n closePromise ??= (async () => {\n const results = await Promise.allSettled([\n originalClose(),\n closeOwnedResources(),\n ]);\n const rejected = results.find(\n (result): result is PromiseRejectedResult =>\n result.status === \"rejected\",\n );\n\n if (rejected) {\n throw rejected.reason;\n }\n })();\n\n return closePromise;\n };\n\n return server;\n}\n\n/**\n * Creates an MCP server that exposes code-execution tools for a wrapped MCP source.\n */\nexport async function codeMcpServer(\n source: McpToolSource,\n options: CodeMcpServerOptions,\n): Promise<McpServer> {\n const maxTextChars = options.maxTextChars ?? DEFAULT_MAX_TEXT_CHARS;\n const mode = options.mode ?? \"both\";\n const names = {\n execute: options.names?.execute ?? \"mcp_execute_code\",\n search: options.names?.search ?? \"mcp_search_tools\",\n single: options.names?.single ?? \"mcp_code\",\n };\n const handle = await openMcpToolProvider(source, {\n clientInfo: options.clientInfo,\n namespace: options.namespace ?? \"mcp\",\n });\n const provider = handle.provider;\n const server = new McpServer(\n options.serverInfo ??\n handle.serverInfo ??\n DEFAULT_MCP_CODE_WRAPPER_SERVER_INFO,\n );\n\n try {\n if (mode === \"both\" || mode === \"split\") {\n registerSearchTool(server, names.search, provider, maxTextChars);\n registerExecuteTool(\n server,\n names.execute,\n provider,\n options.executor,\n maxTextChars,\n `Execute JavaScript against the wrapped ${provider.name} MCP tool namespace.`,\n );\n }\n\n if (mode === \"both\" || mode === \"single\") {\n registerExecuteTool(\n server,\n names.single,\n provider,\n options.executor,\n maxTextChars,\n `Execute JavaScript against the wrapped ${provider.name} MCP tool namespace.\\n\\n${provider.types}`,\n );\n }\n\n return attachOwnedClose(server, handle.close);\n } catch (error) {\n await handle.close().catch(() => {});\n throw error;\n }\n}\n"],"mappings":";;;;;;;;AAOA,MAAM,4BAA4B;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC,KAAK,KAAK;;;;AAKZ,SAAgB,4BACd,UACQ;CACR,MAAM,eAAe,CAAC,0BAA0B;AAEhD,MAAK,MAAM,CAAC,UAAU,SAAS,OAAO,QAAQ,SAAS,MAAM,EAAE;EAC7D,MAAM,UAAU,iBAAiB,CAC/B,GAAI,KAAK,cAAc,CAAC,KAAK,aAAa,GAAG,GAAG,EAAE,EAClD,2FACD,CAAC;AAEF,eAAa,KACX,CACE,SACA,YAAY,SAAS,UAAU,aAAa,KAAK,YAAY,CAAC,gCAC/D,CACE,OAAO,QAAQ,CACf,KAAK,KAAK,CACd;;AAGH,QAAO,2BAA2B,SAAS,MAAM,aAAa;;;;;ACnBhE,MAAM,+BAA+B;CACnC,MAAM;CACN,SAAS;CACV;;;;AAKD,SAAgB,2BACd,QAC4B;AAC5B,KAAI,OAAO,WACT,QAAO,OAAO;AAGhB,KAAI,YAAY,OACd,QAAO,OAAO,OAAO,kBAAkB;;AAiC3C,eAAe,SAAS,SAAoD;CAE1E,MAAM,YADU,MAAM,QAAQ,WAAW,QAAQ,KAAK,UAAU,OAAO,CAAC,CAAC,EAChD,MACtB,WAA4C,OAAO,WAAW,WAChE;AAED,KAAI,SACF,OAAM,SAAS;;AAInB,eAAe,kBACb,QACA,YACkC;AAClC,KAAI,YAAY,OACd,QAAO;EACL,QAAQ,OAAO;EACf,OAAO,YAAY;EACpB;AAGH,KAAI,OAAO,OAAO,aAAa,CAC7B,OAAM,IAAI,MAAM,2DAA2D;CAG7E,MAAM,CAAC,iBAAiB,mBACtB,kBAAkB,kBAAkB;CACtC,MAAM,SAAS,IAAI,OAAO,WAAW;CACrC,IAAIA;CACJ,IAAI,kBAAkB;AAEtB,KAAI;AACF,QAAM,OAAO,OAAO,QAAQ,gBAAgB;AAC5C,oBAAkB;AAClB,QAAM,OAAO,QAAQ,gBAAgB;UAC9B,OAAO;AACd,QAAM,QAAQ,WAAW,CACvB,QAAQ,SAAS,CAAC,WAAW,OAAO,OAAO,CAAC,EAC5C,kBACI,QAAQ,SAAS,CAAC,WAAW,OAAO,OAAO,OAAO,CAAC,GACnD,QAAQ,SAAS,CACtB,CAAC;AACF,QAAM;;AAGR,QAAO;EACL;EACA,OAAO,YAAY;AACjB,oBAAiB,SAAS,OAClB,OAAO,OAAO,QACd,OAAO,OAAO,OAAO,CAC5B,CAAC;AACF,UAAO;;EAEV;;;;;AAMH,eAAsB,oBACpB,QACA,UAAwC,EAAE,EACV;CAChC,MAAM,aAAa,MAAM,kBACvB,QACA,QAAQ,cAAc,6BACvB;AAED,KAAI;EACF,MAAM,gBAAgB,MAAM,WAAW,OAAO,WAAW;EACzD,MAAMC,WAAyB;GAC7B,MAAM,QAAQ,aAAa;GAC3B,OAAO,EAAE;GACV;AAED,OAAK,MAAM,QAAQ,cAAc,MAC/B,UAAS,MAAM,KAAK,QAAQ;GAC1B,aAAa,KAAK;GAClB,SAAS,OAAO,OAAO,YAAY;IACjC,MAAM,kBACJ,OAAO,UAAU,YAAY,UAAU,OAClC,QACD;AAEN,WAAO,WAAW,OAAO,SACvB;KACE,WAAW;KACX,MAAM,KAAK;KACZ,EACD,QACA,EAAE,QAAQ,QAAQ,QAAQ,CAC3B;;GAEH,aAAa,KAAK;GACnB;EAGH,MAAM,mBAAmB,gBAAgB,SAAS;AAElD,SAAO;GACL,OAAO,WAAW;GAClB,UAAU;IACR,GAAG;IACH,OAAO,4BAA4B,iBAAiB;IACrD;GACD,YAAY,2BAA2B,OAAO;GAC/C;UACM,OAAO;AACd,QAAM,WAAW,OAAO,CAAC,YAAY,GAAG;AACxC,QAAM;;;;;;AAOV,eAAsB,sBACpB,QACA,UAAwC,EAAE,EACX;AAC/B,KAAI,YAAa,OACf,OAAM,IAAI,MACR,8JACD;AAIH,SADe,MAAM,oBAAoB,QAAQ,QAAQ,EAC3C;;;;;AChLhB,MAAM,yBAAyB;AAC/B,MAAM,uCAAuC;CAC3C,MAAM;CACN,SAAS;CACV;AAED,SAAS,aAAa,MAAc,cAA8B;AAChE,QAAO,KAAK,UAAU,eAAe,OAAO,KAAK,MAAM,GAAG,aAAa;;AAGzE,SAAS,WAAW,OAAgB,cAA8B;AAChE,QAAO,aAAa,KAAK,UAAU,OAAO,MAAM,EAAE,EAAE,aAAa;;AAGnE,SAAS,YACP,UACA,OACA,OACyB;CACzB,MAAM,kBAAkB,OAAO,aAAa,CAAC,MAAM;CACnD,MAAM,UAAU,OAAO,QAAQ,SAAS,MAAM,CAC3C,KAAK,CAAC,UAAU,iBAAiB;EAChC,aAAa,WAAW;EACxB,aAAa,WAAW;EACxB,cAAc,WAAW;EACzB,cAAc,WAAW;EACzB;EACD,EAAE,CACF,QAAQ,SAAS;AAChB,MAAI,CAAC,gBACH,QAAO;AAGT,SAAO;GAAC,KAAK;GAAc,KAAK;GAAU,KAAK,eAAe;GAAG,CAAC,MAC/D,UAAU,MAAM,aAAa,CAAC,SAAS,gBAAgB,CACzD;GACD,CACD,MAAM,GAAG,MAAM;AAElB,QAAO;EACL,WAAW,SAAS;EACpB,oBAAoB,SAAS;EAC7B,oBAAoB,SAAS;EAC7B,OAAO;EACP,OAAO,SAAS;EACjB;;AAGH,SAAS,oBACP,QACA,MACA,UACA,UACA,cACA,aACM;AAgBN,CAbqB,OAAO,aAAa,KAAK,OAAO,CAcnD,MACA;EACE;EACA,aAAa,EACX,MAAM,EAAE,QAAQ,EACjB;EACF,EACD,OAAO,SAA2B;EAChC,MAAM,YAAY,MAAM,SAAS,QAAQ,KAAK,MAAM,CAAC,SAAS,CAAC;AAE/D,SAAO;GACL,SAAS,CAAC;IAAE,MAAM,WAAW,WAAW,aAAa;IAAE,MAAM;IAAQ,CAAC;GACtE,SAAS,CAAC,UAAU;GAEpB,mBAAmB;GACpB;GAEJ;;AAGH,SAAS,mBACP,QACA,MACA,UACA,cACM;AAcN,CAZqB,OAAO,aAAa,KAAK,OAAO,CAanD,MACA;EACE,aAAa,8CAA8C,SAAS,KAAK;EACzE,aAAa;GACX,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU;GAClC,OAAO,EAAE,QAAQ,CAAC,UAAU;GAC7B;EACF,EACD,OAAO,SAA6C;EAClD,MAAM,oBAAoB,YACxB,UACA,KAAK,OACL,KAAK,SAAS,GACf;AACD,SAAO;GACL,SAAS,CACP;IAAE,MAAM,WAAW,mBAAmB,aAAa;IAAE,MAAM;IAAQ,CACpE;GACD;GACD;GAEJ;;AAGH,SAAS,iBACP,QACA,qBACW;CACX,MAAM,gBAAgB,OAAO,MAAM,KAAK,OAAO;CAC/C,IAAIC;AAEJ,QAAO,QAAQ,YAAY;AACzB,oBAAkB,YAAY;GAK5B,MAAM,YAJU,MAAM,QAAQ,WAAW,CACvC,eAAe,EACf,qBAAqB,CACtB,CAAC,EACuB,MACtB,WACC,OAAO,WAAW,WACrB;AAED,OAAI,SACF,OAAM,SAAS;MAEf;AAEJ,SAAO;;AAGT,QAAO;;;;;AAMT,eAAsB,cACpB,QACA,SACoB;CACpB,MAAM,eAAe,QAAQ,gBAAgB;CAC7C,MAAM,OAAO,QAAQ,QAAQ;CAC7B,MAAM,QAAQ;EACZ,SAAS,QAAQ,OAAO,WAAW;EACnC,QAAQ,QAAQ,OAAO,UAAU;EACjC,QAAQ,QAAQ,OAAO,UAAU;EAClC;CACD,MAAM,SAAS,MAAM,oBAAoB,QAAQ;EAC/C,YAAY,QAAQ;EACpB,WAAW,QAAQ,aAAa;EACjC,CAAC;CACF,MAAM,WAAW,OAAO;CACxB,MAAM,SAAS,IAAI,UACjB,QAAQ,cACN,OAAO,cACP,qCACH;AAED,KAAI;AACF,MAAI,SAAS,UAAU,SAAS,SAAS;AACvC,sBAAmB,QAAQ,MAAM,QAAQ,UAAU,aAAa;AAChE,uBACE,QACA,MAAM,SACN,UACA,QAAQ,UACR,cACA,0CAA0C,SAAS,KAAK,sBACzD;;AAGH,MAAI,SAAS,UAAU,SAAS,SAC9B,qBACE,QACA,MAAM,QACN,UACA,QAAQ,UACR,cACA,0CAA0C,SAAS,KAAK,0BAA0B,SAAS,QAC5F;AAGH,SAAO,iBAAiB,QAAQ,OAAO,MAAM;UACtC,OAAO;AACd,QAAM,OAAO,OAAO,CAAC,YAAY,GAAG;AACpC,QAAM"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["closePromise: Promise<void> | undefined","provider: ToolProvider","closePromise: Promise<void> | undefined"],"sources":["../../src/mcp/mcpWrappedToolTypes.ts","../../src/mcp/createMcpToolProvider.ts","../../src/mcp/codeMcpServer.ts"],"sourcesContent":["import type { ResolvedToolProvider } from \"../types\";\nimport { schemaToType } from \"../typegen/jsonSchema\";\nimport {\n renderDocComment,\n renderNamespaceDeclaration,\n} from \"../typegen/render\";\n\nconst MCP_CALL_TOOL_RESULT_TYPE = [\n \"type McpCallToolResult = {\",\n \" content: Array<{\",\n \" type: string;\",\n \" text?: string;\",\n \" data?: string;\",\n \" mimeType?: string;\",\n \" resource?: unknown;\",\n \" uri?: string;\",\n \" name?: string;\",\n \" description?: string;\",\n \" }>;\",\n \" structuredContent?: unknown;\",\n \" isError?: boolean;\",\n \" _meta?: Record<string, unknown>;\",\n \"};\",\n].join(\"\\n\");\n\n/**\n * Generates one wrapped MCP tool declaration exposed to guest code.\n */\nexport function generateMcpWrappedToolType(\n provider: ResolvedToolProvider,\n safeName: string,\n): string {\n const tool = provider.tools[safeName];\n\n if (!tool) {\n throw new Error(`Unknown wrapped MCP tool: ${safeName}`);\n }\n\n const comment = renderDocComment([\n ...(tool.description ? [tool.description, \"\"] : []),\n \"Wrapped MCP tool. Inspect structuredContent first, then fall back to content text items.\",\n ]);\n\n return [\n comment,\n `function ${safeName}(input: ${schemaToType(tool.inputSchema)}): Promise<McpCallToolResult>;`,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\n/**\n * Generates the wrapped MCP tool namespace declarations exposed to guest code.\n */\nexport function generateMcpWrappedToolTypes(\n provider: ResolvedToolProvider,\n): string {\n const declarations = [\n MCP_CALL_TOOL_RESULT_TYPE,\n ...Object.keys(provider.tools).map((safeName) =>\n generateMcpWrappedToolType(provider, safeName),\n ),\n ];\n\n return renderNamespaceDeclaration(provider.name, declarations);\n}\n\n/**\n * Generates the wrapped MCP tool namespace declaration for one selected tool.\n */\nexport function generateMcpWrappedSingleToolTypes(\n provider: ResolvedToolProvider,\n safeName: string,\n): string {\n return renderNamespaceDeclaration(provider.name, [\n MCP_CALL_TOOL_RESULT_TYPE,\n generateMcpWrappedToolType(provider, safeName),\n ]);\n}\n","import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { InMemoryTransport } from \"@modelcontextprotocol/sdk/inMemory.js\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { Implementation } from \"@modelcontextprotocol/sdk/types.js\";\n\nimport { resolveProvider } from \"../provider/resolveProvider\";\nimport type {\n JsonSchema,\n ResolvedToolProvider,\n ToolAnnotations,\n ToolProvider,\n} from \"../types\";\nimport { generateMcpWrappedToolTypes } from \"./mcpWrappedToolTypes\";\n\n/**\n * Caller-owned MCP client source used by the convenience wrapper API.\n */\nexport type McpToolClientSource = {\n client: Client;\n serverInfo?: Implementation;\n};\n\n/**\n * Local MCP server source that requires explicit lifecycle cleanup.\n */\nexport type McpToolServerSource = {\n server: McpServer;\n serverInfo?: Implementation;\n};\n\n/**\n * Source used to discover MCP tools for wrapping.\n */\nexport type McpToolSource = McpToolClientSource | McpToolServerSource;\n\nconst DEFAULT_MCP_TOOL_CLIENT_INFO = {\n name: \"mcp-tool-client\",\n version: \"0.0.0\",\n} satisfies Implementation;\n\n/**\n * Returns the upstream server identity when the source can provide one.\n */\nexport function getMcpToolSourceServerInfo(\n source: McpToolSource,\n): Implementation | undefined {\n if (source.serverInfo) {\n return source.serverInfo;\n }\n\n if (\"client\" in source) {\n return source.client.getServerVersion();\n }\n\n return undefined;\n}\n\n/**\n * Options for wrapping MCP tools into a code-execution provider.\n */\nexport interface CreateMcpToolProviderOptions {\n /** Namespace exposed to guest code for the wrapped tools. */\n namespace?: string;\n /** Implementation metadata exposed to local `{ server }` sources as the client identity. */\n clientInfo?: Implementation;\n}\n\n/**\n * Full wrapped MCP tool metadata used by progressive discovery surfaces.\n */\nexport interface McpWrappedToolDefinition {\n /** Optional MCP-compatible behavior hints copied from the upstream tool. */\n annotations?: ToolAnnotations;\n /** Optional human-readable description copied from the upstream tool. */\n description?: string;\n /** Normalized input schema used for wrapped tool argument validation. */\n inputSchema?: JsonSchema;\n /** Original upstream MCP tool name. */\n originalName: string;\n /** Upstream output schema for the tool's `structuredContent`, when provided. */\n outputSchema?: JsonSchema;\n /** Sanitized tool name visible in guest code. */\n safeName: string;\n}\n\n/**\n * Explicit handle for a wrapped MCP provider and any owned source connections.\n */\nexport interface McpToolProviderHandle {\n /** Resolved provider exposed to the executor or wrapper server. */\n provider: ResolvedToolProvider;\n /** Best-effort upstream server identity when available. */\n serverInfo?: Implementation;\n /** Full wrapped MCP tool definitions keyed by safe guest-visible name. */\n toolDefinitions: Record<string, McpWrappedToolDefinition>;\n /** Releases any internal MCP client/server connection opened for the provider. */\n close: () => Promise<void>;\n}\n\ninterface OpenMcpToolClientResult {\n client: Client;\n close: () => Promise<void>;\n}\n\nasync function closeAll(closers: Array<() => Promise<void>>): Promise<void> {\n const results = await Promise.allSettled(closers.map((close) => close()));\n const rejected = results.find(\n (result): result is PromiseRejectedResult => result.status === \"rejected\",\n );\n\n if (rejected) {\n throw rejected.reason;\n }\n}\n\nfunction asJsonSchema(schema: unknown): JsonSchema | undefined {\n return typeof schema === \"object\" && schema !== null\n ? (schema as JsonSchema)\n : undefined;\n}\n\nasync function openMcpToolClient(\n source: McpToolSource,\n clientInfo: Implementation,\n): Promise<OpenMcpToolClientResult> {\n if (\"client\" in source) {\n return {\n client: source.client,\n close: async () => {},\n };\n }\n\n if (source.server.isConnected()) {\n throw new Error(\"{ server } sources must be unconnected local MCP servers\");\n }\n\n const [clientTransport, serverTransport] =\n InMemoryTransport.createLinkedPair();\n const client = new Client(clientInfo);\n let closePromise: Promise<void> | undefined;\n let serverConnected = false;\n\n try {\n await source.server.connect(serverTransport);\n serverConnected = true;\n await client.connect(clientTransport);\n } catch (error) {\n await Promise.allSettled([\n Promise.resolve().then(() => client.close()),\n serverConnected\n ? Promise.resolve().then(() => source.server.close())\n : Promise.resolve(),\n ]);\n throw error;\n }\n\n return {\n client,\n close: async () => {\n closePromise ??= closeAll([\n () => client.close(),\n () => source.server.close(),\n ]);\n return closePromise;\n },\n };\n}\n\n/**\n * Opens an MCP tool source as a resolved execution provider with explicit cleanup.\n */\nexport async function openMcpToolProvider(\n source: McpToolSource,\n options: CreateMcpToolProviderOptions = {},\n): Promise<McpToolProviderHandle> {\n const connection = await openMcpToolClient(\n source,\n options.clientInfo ?? DEFAULT_MCP_TOOL_CLIENT_INFO,\n );\n\n try {\n const toolsResponse = await connection.client.listTools();\n const toolsByOriginalName = new Map(\n toolsResponse.tools.map((tool) => [tool.name, tool] as const),\n );\n const provider: ToolProvider = {\n name: options.namespace ?? \"mcp\",\n tools: {},\n };\n\n for (const tool of toolsResponse.tools) {\n provider.tools[tool.name] = {\n annotations: tool.annotations,\n description: tool.description,\n execute: async (input, context) => {\n const argumentsObject =\n typeof input === \"object\" && input !== null\n ? (input as Record<string, unknown>)\n : undefined;\n\n return connection.client.callTool(\n {\n arguments: argumentsObject,\n name: tool.name,\n },\n undefined,\n { signal: context.signal },\n );\n },\n inputSchema: tool.inputSchema,\n };\n }\n\n const resolvedProvider = resolveProvider(provider);\n const toolDefinitions = Object.fromEntries(\n Object.entries(resolvedProvider.tools).map(([safeName, descriptor]) => {\n const upstreamTool = toolsByOriginalName.get(descriptor.originalName);\n\n return [\n safeName,\n {\n annotations: descriptor.annotations,\n description: descriptor.description,\n inputSchema: descriptor.inputSchema,\n originalName: descriptor.originalName,\n outputSchema: asJsonSchema(upstreamTool?.outputSchema),\n safeName: descriptor.safeName,\n },\n ];\n }),\n );\n\n return {\n close: connection.close,\n provider: {\n ...resolvedProvider,\n types: generateMcpWrappedToolTypes(resolvedProvider),\n },\n serverInfo: getMcpToolSourceServerInfo(source),\n toolDefinitions,\n };\n } catch (error) {\n await connection.close().catch(() => {});\n throw error;\n }\n}\n\n/**\n * Wraps MCP tools from a caller-owned MCP client as a resolved execution provider.\n */\nexport async function createMcpToolProvider(\n source: McpToolClientSource,\n options: CreateMcpToolProviderOptions = {},\n): Promise<ResolvedToolProvider> {\n if (\"server\" in (source as unknown as McpToolSource)) {\n throw new Error(\n \"createMcpToolProvider() no longer accepts { server } sources. Use openMcpToolProvider() to receive a cleanup handle for owned local MCP server connections.\",\n );\n }\n\n const handle = await openMcpToolProvider(source, options);\n return handle.provider;\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { Implementation } from \"@modelcontextprotocol/sdk/types.js\";\nimport * as z from \"zod\";\n\nimport type { Executor } from \"../executor/executor\";\nimport type { ResolvedToolProvider, ToolAnnotations } from \"../types\";\nimport {\n openMcpToolProvider,\n type CreateMcpToolProviderOptions,\n type McpWrappedToolDefinition,\n type McpToolSource,\n} from \"./createMcpToolProvider\";\nimport { generateMcpWrappedSingleToolTypes } from \"./mcpWrappedToolTypes\";\n\n/**\n * Options for exposing wrapped MCP tool execution through an MCP server.\n */\nexport interface CodeMcpServerOptions extends CreateMcpToolProviderOptions {\n /** Executor used to run guest JavaScript against the wrapped provider. */\n executor: Executor;\n /** Implementation metadata exposed to downstream clients as the wrapper server identity. */\n serverInfo?: Implementation;\n /** Maximum number of text characters returned in text content blocks. */\n maxTextChars?: number;\n /** Wrapper tool layout to expose on the returned server. */\n mode?: \"both\" | \"progressive\" | \"single\";\n /** Optional custom names for the wrapper tools. */\n names?: {\n details?: string;\n execute?: string;\n search?: string;\n single?: string;\n };\n}\n\nconst DEFAULT_MAX_TEXT_CHARS = 24_000;\nconst CODE_EXECUTION_TOOL_ANNOTATIONS = {\n destructiveHint: true,\n idempotentHint: false,\n openWorldHint: true,\n readOnlyHint: false,\n} satisfies ToolAnnotations;\nconst READ_ONLY_TOOL_ANNOTATIONS = {\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n readOnlyHint: true,\n} satisfies ToolAnnotations;\nconst DEFAULT_MCP_CODE_WRAPPER_SERVER_INFO = {\n name: \"mcp-code-wrapper\",\n version: \"0.0.0\",\n} satisfies Implementation;\n\nfunction truncateText(text: string, maxTextChars: number): string {\n return text.length <= maxTextChars ? text : text.slice(0, maxTextChars);\n}\n\nfunction renderText(value: unknown, maxTextChars: number): string {\n return truncateText(JSON.stringify(value, null, 2), maxTextChars);\n}\n\nfunction searchTools(\n toolDefinitions: Record<string, McpWrappedToolDefinition>,\n namespace: string,\n query: string | undefined,\n limit: number,\n): Record<string, unknown> {\n const normalizedQuery = query?.toLowerCase().trim();\n const matches = Object.values(toolDefinitions)\n .filter((tool) => {\n if (!normalizedQuery) {\n return true;\n }\n\n return [tool.originalName, tool.safeName, tool.description ?? \"\"].some(\n (field) => field.toLowerCase().includes(normalizedQuery),\n );\n })\n .slice(0, limit)\n .map((tool) => ({\n annotations: tool.annotations,\n description: tool.description,\n originalName: tool.originalName,\n safeName: tool.safeName,\n }));\n\n return {\n namespace,\n tools: matches,\n };\n}\n\nfunction getToolDetails(\n provider: ResolvedToolProvider,\n toolDefinitions: Record<string, McpWrappedToolDefinition>,\n safeName: string,\n): Record<string, unknown> {\n const tool = toolDefinitions[safeName];\n\n if (!tool) {\n throw new Error(`Unknown wrapped MCP tool: ${safeName}`);\n }\n\n return {\n annotations: tool.annotations,\n description: tool.description,\n inputSchema: tool.inputSchema,\n originalName: tool.originalName,\n outputSchema: tool.outputSchema,\n safeName: tool.safeName,\n types: generateMcpWrappedSingleToolTypes(provider, safeName),\n };\n}\n\nfunction registerExecuteTool(\n server: McpServer,\n name: string,\n provider: ResolvedToolProvider,\n executor: Executor,\n maxTextChars: number,\n description: string,\n): void {\n // Cast required: McpServer.registerTool's generic signature doesn't support\n // the narrow input/output shape we need for the code-execution tool.\n const registerTool = server.registerTool.bind(server) as (\n toolName: string,\n config: {\n annotations: ToolAnnotations;\n description: string;\n inputSchema: Record<string, z.ZodTypeAny>;\n },\n handler: (args: { code: string }) => Promise<{\n content: Array<{ text: string; type: \"text\" }>;\n isError: boolean;\n structuredContent: Record<string, unknown>;\n }>,\n ) => void;\n\n registerTool(\n name,\n {\n annotations: CODE_EXECUTION_TOOL_ANNOTATIONS,\n description,\n inputSchema: {\n code: z.string(),\n },\n },\n async (args: { code: string }) => {\n const execution = await executor.execute(args.code, [provider]);\n\n return {\n content: [{ text: renderText(execution, maxTextChars), type: \"text\" }],\n isError: !execution.ok,\n // ExecuteResult is JSON-safe; cast satisfies the SDK's generic record type.\n structuredContent: execution as Record<string, unknown>,\n };\n },\n );\n}\n\nfunction registerSearchTool(\n server: McpServer,\n name: string,\n namespace: string,\n toolDefinitions: Record<string, McpWrappedToolDefinition>,\n maxTextChars: number,\n): void {\n // Cast required: same rationale as registerExecuteTool above.\n const registerTool = server.registerTool.bind(server) as (\n toolName: string,\n config: {\n annotations: ToolAnnotations;\n description: string;\n inputSchema: Record<string, z.ZodTypeAny>;\n },\n handler: (args: { limit?: number; query?: string }) => Promise<{\n content: Array<{ text: string; type: \"text\" }>;\n structuredContent: Record<string, unknown>;\n }>,\n ) => void;\n\n registerTool(\n name,\n {\n annotations: READ_ONLY_TOOL_ANNOTATIONS,\n description: `Search wrapped MCP tools exposed under the ${namespace} namespace. Returns concise catalog entries only; call the details tool for schemas.`,\n inputSchema: {\n limit: z.number().int().optional(),\n query: z.string().optional(),\n },\n },\n async (args: { limit?: number; query?: string }) => {\n const structuredContent = searchTools(\n toolDefinitions,\n namespace,\n args.query,\n args.limit ?? 20,\n );\n return {\n content: [\n { text: renderText(structuredContent, maxTextChars), type: \"text\" },\n ],\n structuredContent,\n };\n },\n );\n}\n\nfunction registerDetailsTool(\n server: McpServer,\n name: string,\n provider: ResolvedToolProvider,\n toolDefinitions: Record<string, McpWrappedToolDefinition>,\n maxTextChars: number,\n): void {\n // Cast required: same rationale as registerExecuteTool above.\n const registerTool = server.registerTool.bind(server) as (\n toolName: string,\n config: {\n annotations: ToolAnnotations;\n description: string;\n inputSchema: Record<string, z.ZodTypeAny>;\n },\n handler: (args: { safeName: string }) => Promise<{\n content: Array<{ text: string; type: \"text\" }>;\n structuredContent: Record<string, unknown>;\n }>,\n ) => void;\n\n registerTool(\n name,\n {\n annotations: READ_ONLY_TOOL_ANNOTATIONS,\n description: `Return the full schema and generated TypeScript declaration for one wrapped ${provider.name} MCP tool.`,\n inputSchema: {\n safeName: z.string(),\n },\n },\n async (args: { safeName: string }) => {\n const structuredContent = getToolDetails(\n provider,\n toolDefinitions,\n args.safeName,\n );\n return {\n content: [\n { text: renderText(structuredContent, maxTextChars), type: \"text\" },\n ],\n structuredContent,\n };\n },\n );\n}\n\nfunction attachOwnedClose(\n server: McpServer,\n closeOwnedResources: () => Promise<void>,\n): McpServer {\n const originalClose = server.close.bind(server);\n let closePromise: Promise<void> | undefined;\n\n server.close = async () => {\n closePromise ??= (async () => {\n const results = await Promise.allSettled([\n originalClose(),\n closeOwnedResources(),\n ]);\n const rejected = results.find(\n (result): result is PromiseRejectedResult =>\n result.status === \"rejected\",\n );\n\n if (rejected) {\n throw rejected.reason;\n }\n })();\n\n return closePromise;\n };\n\n return server;\n}\n\n/**\n * Creates an MCP server that exposes code-execution tools for a wrapped MCP source.\n */\nexport async function codeMcpServer(\n source: McpToolSource,\n options: CodeMcpServerOptions,\n): Promise<McpServer> {\n const maxTextChars = options.maxTextChars ?? DEFAULT_MAX_TEXT_CHARS;\n const mode = options.mode ?? \"progressive\";\n const names = {\n details: options.names?.details ?? \"mcp_get_tool_details\",\n execute: options.names?.execute ?? \"mcp_execute_code\",\n search: options.names?.search ?? \"mcp_search_tools\",\n single: options.names?.single ?? \"mcp_code\",\n };\n const handle = await openMcpToolProvider(source, {\n clientInfo: options.clientInfo,\n namespace: options.namespace ?? \"mcp\",\n });\n const provider = handle.provider;\n const server = new McpServer(\n options.serverInfo ??\n handle.serverInfo ??\n DEFAULT_MCP_CODE_WRAPPER_SERVER_INFO,\n );\n\n try {\n if (mode === \"both\" || mode === \"progressive\") {\n registerSearchTool(\n server,\n names.search,\n provider.name,\n handle.toolDefinitions,\n maxTextChars,\n );\n registerDetailsTool(\n server,\n names.details,\n provider,\n handle.toolDefinitions,\n maxTextChars,\n );\n registerExecuteTool(\n server,\n names.execute,\n provider,\n options.executor,\n maxTextChars,\n `Execute JavaScript against the wrapped ${provider.name} MCP tool namespace. Use the search and details tools before writing code.`,\n );\n }\n\n if (mode === \"both\" || mode === \"single\") {\n registerExecuteTool(\n server,\n names.single,\n provider,\n options.executor,\n maxTextChars,\n `Execute JavaScript against the wrapped ${provider.name} MCP tool namespace.\\n\\n${provider.types}`,\n );\n }\n\n return attachOwnedClose(server, handle.close);\n } catch (error) {\n await handle.close().catch(() => {});\n throw error;\n }\n}\n"],"mappings":";;;;;;;;AAOA,MAAM,4BAA4B;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC,KAAK,KAAK;;;;AAKZ,SAAgB,2BACd,UACA,UACQ;CACR,MAAM,OAAO,SAAS,MAAM;AAE5B,KAAI,CAAC,KACH,OAAM,IAAI,MAAM,6BAA6B,WAAW;AAQ1D,QAAO,CALS,iBAAiB,CAC/B,GAAI,KAAK,cAAc,CAAC,KAAK,aAAa,GAAG,GAAG,EAAE,EAClD,2FACD,CAAC,EAIA,YAAY,SAAS,UAAU,aAAa,KAAK,YAAY,CAAC,gCAC/D,CACE,OAAO,QAAQ,CACf,KAAK,KAAK;;;;;AAMf,SAAgB,4BACd,UACQ;CACR,MAAM,eAAe,CACnB,2BACA,GAAG,OAAO,KAAK,SAAS,MAAM,CAAC,KAAK,aAClC,2BAA2B,UAAU,SAAS,CAC/C,CACF;AAED,QAAO,2BAA2B,SAAS,MAAM,aAAa;;;;;AAMhE,SAAgB,kCACd,UACA,UACQ;AACR,QAAO,2BAA2B,SAAS,MAAM,CAC/C,2BACA,2BAA2B,UAAU,SAAS,CAC/C,CAAC;;;;;AC1CJ,MAAM,+BAA+B;CACnC,MAAM;CACN,SAAS;CACV;;;;AAKD,SAAgB,2BACd,QAC4B;AAC5B,KAAI,OAAO,WACT,QAAO,OAAO;AAGhB,KAAI,YAAY,OACd,QAAO,OAAO,OAAO,kBAAkB;;AAqD3C,eAAe,SAAS,SAAoD;CAE1E,MAAM,YADU,MAAM,QAAQ,WAAW,QAAQ,KAAK,UAAU,OAAO,CAAC,CAAC,EAChD,MACtB,WAA4C,OAAO,WAAW,WAChE;AAED,KAAI,SACF,OAAM,SAAS;;AAInB,SAAS,aAAa,QAAyC;AAC7D,QAAO,OAAO,WAAW,YAAY,WAAW,OAC3C,SACD;;AAGN,eAAe,kBACb,QACA,YACkC;AAClC,KAAI,YAAY,OACd,QAAO;EACL,QAAQ,OAAO;EACf,OAAO,YAAY;EACpB;AAGH,KAAI,OAAO,OAAO,aAAa,CAC7B,OAAM,IAAI,MAAM,2DAA2D;CAG7E,MAAM,CAAC,iBAAiB,mBACtB,kBAAkB,kBAAkB;CACtC,MAAM,SAAS,IAAI,OAAO,WAAW;CACrC,IAAIA;CACJ,IAAI,kBAAkB;AAEtB,KAAI;AACF,QAAM,OAAO,OAAO,QAAQ,gBAAgB;AAC5C,oBAAkB;AAClB,QAAM,OAAO,QAAQ,gBAAgB;UAC9B,OAAO;AACd,QAAM,QAAQ,WAAW,CACvB,QAAQ,SAAS,CAAC,WAAW,OAAO,OAAO,CAAC,EAC5C,kBACI,QAAQ,SAAS,CAAC,WAAW,OAAO,OAAO,OAAO,CAAC,GACnD,QAAQ,SAAS,CACtB,CAAC;AACF,QAAM;;AAGR,QAAO;EACL;EACA,OAAO,YAAY;AACjB,oBAAiB,SAAS,OAClB,OAAO,OAAO,QACd,OAAO,OAAO,OAAO,CAC5B,CAAC;AACF,UAAO;;EAEV;;;;;AAMH,eAAsB,oBACpB,QACA,UAAwC,EAAE,EACV;CAChC,MAAM,aAAa,MAAM,kBACvB,QACA,QAAQ,cAAc,6BACvB;AAED,KAAI;EACF,MAAM,gBAAgB,MAAM,WAAW,OAAO,WAAW;EACzD,MAAM,sBAAsB,IAAI,IAC9B,cAAc,MAAM,KAAK,SAAS,CAAC,KAAK,MAAM,KAAK,CAAU,CAC9D;EACD,MAAMC,WAAyB;GAC7B,MAAM,QAAQ,aAAa;GAC3B,OAAO,EAAE;GACV;AAED,OAAK,MAAM,QAAQ,cAAc,MAC/B,UAAS,MAAM,KAAK,QAAQ;GAC1B,aAAa,KAAK;GAClB,aAAa,KAAK;GAClB,SAAS,OAAO,OAAO,YAAY;IACjC,MAAM,kBACJ,OAAO,UAAU,YAAY,UAAU,OAClC,QACD;AAEN,WAAO,WAAW,OAAO,SACvB;KACE,WAAW;KACX,MAAM,KAAK;KACZ,EACD,QACA,EAAE,QAAQ,QAAQ,QAAQ,CAC3B;;GAEH,aAAa,KAAK;GACnB;EAGH,MAAM,mBAAmB,gBAAgB,SAAS;EAClD,MAAM,kBAAkB,OAAO,YAC7B,OAAO,QAAQ,iBAAiB,MAAM,CAAC,KAAK,CAAC,UAAU,gBAAgB;GACrE,MAAM,eAAe,oBAAoB,IAAI,WAAW,aAAa;AAErE,UAAO,CACL,UACA;IACE,aAAa,WAAW;IACxB,aAAa,WAAW;IACxB,aAAa,WAAW;IACxB,cAAc,WAAW;IACzB,cAAc,aAAa,cAAc,aAAa;IACtD,UAAU,WAAW;IACtB,CACF;IACD,CACH;AAED,SAAO;GACL,OAAO,WAAW;GAClB,UAAU;IACR,GAAG;IACH,OAAO,4BAA4B,iBAAiB;IACrD;GACD,YAAY,2BAA2B,OAAO;GAC9C;GACD;UACM,OAAO;AACd,QAAM,WAAW,OAAO,CAAC,YAAY,GAAG;AACxC,QAAM;;;;;;AAOV,eAAsB,sBACpB,QACA,UAAwC,EAAE,EACX;AAC/B,KAAI,YAAa,OACf,OAAM,IAAI,MACR,8JACD;AAIH,SADe,MAAM,oBAAoB,QAAQ,QAAQ,EAC3C;;;;;AClOhB,MAAM,yBAAyB;AAC/B,MAAM,kCAAkC;CACtC,iBAAiB;CACjB,gBAAgB;CAChB,eAAe;CACf,cAAc;CACf;AACD,MAAM,6BAA6B;CACjC,iBAAiB;CACjB,gBAAgB;CAChB,eAAe;CACf,cAAc;CACf;AACD,MAAM,uCAAuC;CAC3C,MAAM;CACN,SAAS;CACV;AAED,SAAS,aAAa,MAAc,cAA8B;AAChE,QAAO,KAAK,UAAU,eAAe,OAAO,KAAK,MAAM,GAAG,aAAa;;AAGzE,SAAS,WAAW,OAAgB,cAA8B;AAChE,QAAO,aAAa,KAAK,UAAU,OAAO,MAAM,EAAE,EAAE,aAAa;;AAGnE,SAAS,YACP,iBACA,WACA,OACA,OACyB;CACzB,MAAM,kBAAkB,OAAO,aAAa,CAAC,MAAM;AAmBnD,QAAO;EACL;EACA,OApBc,OAAO,OAAO,gBAAgB,CAC3C,QAAQ,SAAS;AAChB,OAAI,CAAC,gBACH,QAAO;AAGT,UAAO;IAAC,KAAK;IAAc,KAAK;IAAU,KAAK,eAAe;IAAG,CAAC,MAC/D,UAAU,MAAM,aAAa,CAAC,SAAS,gBAAgB,CACzD;IACD,CACD,MAAM,GAAG,MAAM,CACf,KAAK,UAAU;GACd,aAAa,KAAK;GAClB,aAAa,KAAK;GAClB,cAAc,KAAK;GACnB,UAAU,KAAK;GAChB,EAAE;EAKJ;;AAGH,SAAS,eACP,UACA,iBACA,UACyB;CACzB,MAAM,OAAO,gBAAgB;AAE7B,KAAI,CAAC,KACH,OAAM,IAAI,MAAM,6BAA6B,WAAW;AAG1D,QAAO;EACL,aAAa,KAAK;EAClB,aAAa,KAAK;EAClB,aAAa,KAAK;EAClB,cAAc,KAAK;EACnB,cAAc,KAAK;EACnB,UAAU,KAAK;EACf,OAAO,kCAAkC,UAAU,SAAS;EAC7D;;AAGH,SAAS,oBACP,QACA,MACA,UACA,UACA,cACA,aACM;AAiBN,CAdqB,OAAO,aAAa,KAAK,OAAO,CAenD,MACA;EACE,aAAa;EACb;EACA,aAAa,EACX,MAAM,EAAE,QAAQ,EACjB;EACF,EACD,OAAO,SAA2B;EAChC,MAAM,YAAY,MAAM,SAAS,QAAQ,KAAK,MAAM,CAAC,SAAS,CAAC;AAE/D,SAAO;GACL,SAAS,CAAC;IAAE,MAAM,WAAW,WAAW,aAAa;IAAE,MAAM;IAAQ,CAAC;GACtE,SAAS,CAAC,UAAU;GAEpB,mBAAmB;GACpB;GAEJ;;AAGH,SAAS,mBACP,QACA,MACA,WACA,iBACA,cACM;AAeN,CAbqB,OAAO,aAAa,KAAK,OAAO,CAcnD,MACA;EACE,aAAa;EACb,aAAa,8CAA8C,UAAU;EACrE,aAAa;GACX,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU;GAClC,OAAO,EAAE,QAAQ,CAAC,UAAU;GAC7B;EACF,EACD,OAAO,SAA6C;EAClD,MAAM,oBAAoB,YACxB,iBACA,WACA,KAAK,OACL,KAAK,SAAS,GACf;AACD,SAAO;GACL,SAAS,CACP;IAAE,MAAM,WAAW,mBAAmB,aAAa;IAAE,MAAM;IAAQ,CACpE;GACD;GACD;GAEJ;;AAGH,SAAS,oBACP,QACA,MACA,UACA,iBACA,cACM;AAeN,CAbqB,OAAO,aAAa,KAAK,OAAO,CAcnD,MACA;EACE,aAAa;EACb,aAAa,+EAA+E,SAAS,KAAK;EAC1G,aAAa,EACX,UAAU,EAAE,QAAQ,EACrB;EACF,EACD,OAAO,SAA+B;EACpC,MAAM,oBAAoB,eACxB,UACA,iBACA,KAAK,SACN;AACD,SAAO;GACL,SAAS,CACP;IAAE,MAAM,WAAW,mBAAmB,aAAa;IAAE,MAAM;IAAQ,CACpE;GACD;GACD;GAEJ;;AAGH,SAAS,iBACP,QACA,qBACW;CACX,MAAM,gBAAgB,OAAO,MAAM,KAAK,OAAO;CAC/C,IAAIC;AAEJ,QAAO,QAAQ,YAAY;AACzB,oBAAkB,YAAY;GAK5B,MAAM,YAJU,MAAM,QAAQ,WAAW,CACvC,eAAe,EACf,qBAAqB,CACtB,CAAC,EACuB,MACtB,WACC,OAAO,WAAW,WACrB;AAED,OAAI,SACF,OAAM,SAAS;MAEf;AAEJ,SAAO;;AAGT,QAAO;;;;;AAMT,eAAsB,cACpB,QACA,SACoB;CACpB,MAAM,eAAe,QAAQ,gBAAgB;CAC7C,MAAM,OAAO,QAAQ,QAAQ;CAC7B,MAAM,QAAQ;EACZ,SAAS,QAAQ,OAAO,WAAW;EACnC,SAAS,QAAQ,OAAO,WAAW;EACnC,QAAQ,QAAQ,OAAO,UAAU;EACjC,QAAQ,QAAQ,OAAO,UAAU;EAClC;CACD,MAAM,SAAS,MAAM,oBAAoB,QAAQ;EAC/C,YAAY,QAAQ;EACpB,WAAW,QAAQ,aAAa;EACjC,CAAC;CACF,MAAM,WAAW,OAAO;CACxB,MAAM,SAAS,IAAI,UACjB,QAAQ,cACN,OAAO,cACP,qCACH;AAED,KAAI;AACF,MAAI,SAAS,UAAU,SAAS,eAAe;AAC7C,sBACE,QACA,MAAM,QACN,SAAS,MACT,OAAO,iBACP,aACD;AACD,uBACE,QACA,MAAM,SACN,UACA,OAAO,iBACP,aACD;AACD,uBACE,QACA,MAAM,SACN,UACA,QAAQ,UACR,cACA,0CAA0C,SAAS,KAAK,4EACzD;;AAGH,MAAI,SAAS,UAAU,SAAS,SAC9B,qBACE,QACA,MAAM,QACN,UACA,QAAQ,UACR,cACA,0CAA0C,SAAS,KAAK,0BAA0B,SAAS,QAC5F;AAGH,SAAO,iBAAiB,QAAQ,OAAO,MAAM;UACtC,OAAO;AACd,QAAM,OAAO,OAAO,CAAC,YAAY,GAAG;AACpC,QAAM"}
|
package/dist/protocol/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require('../errors-xD8r6fCf.cjs');
|
|
2
|
-
const require_runner = require('../runner-
|
|
2
|
+
const require_runner = require('../runner-BEY9nWc7.cjs');
|
|
3
3
|
|
|
4
4
|
//#region src/protocol/messages.ts
|
|
5
5
|
function isRecord(value) {
|
|
@@ -8,6 +8,10 @@ function isRecord(value) {
|
|
|
8
8
|
function isFiniteNumber(value) {
|
|
9
9
|
return typeof value === "number" && Number.isFinite(value);
|
|
10
10
|
}
|
|
11
|
+
function isToolAnnotations(value) {
|
|
12
|
+
if (!isRecord(value)) return false;
|
|
13
|
+
return (value.title === void 0 || typeof value.title === "string") && (value.readOnlyHint === void 0 || typeof value.readOnlyHint === "boolean") && (value.destructiveHint === void 0 || typeof value.destructiveHint === "boolean") && (value.idempotentHint === void 0 || typeof value.idempotentHint === "boolean") && (value.openWorldHint === void 0 || typeof value.openWorldHint === "boolean");
|
|
14
|
+
}
|
|
11
15
|
function isRuntimeOptions(value) {
|
|
12
16
|
if (!isRecord(value)) return false;
|
|
13
17
|
return isFiniteNumber(value.maxLogChars) && isFiniteNumber(value.maxLogLines) && isFiniteNumber(value.memoryLimitBytes) && isFiniteNumber(value.timeoutMs);
|
|
@@ -15,7 +19,7 @@ function isRuntimeOptions(value) {
|
|
|
15
19
|
function isProviderManifest(value) {
|
|
16
20
|
if (!isRecord(value) || typeof value.name !== "string") return false;
|
|
17
21
|
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"));
|
|
22
|
+
return Object.values(value.tools).every((tool) => isRecord(tool) && typeof tool.originalName === "string" && typeof tool.safeName === "string" && (tool.annotations === void 0 || isToolAnnotations(tool.annotations)) && (tool.description === void 0 || typeof tool.description === "string"));
|
|
19
23
|
}
|
|
20
24
|
function isExecuteError(value) {
|
|
21
25
|
return isRecord(value) && typeof value.code === "string" && typeof value.message === "string";
|
|
@@ -213,7 +217,7 @@ const SOURCE_MODE_EXEC_ARGV = [
|
|
|
213
217
|
"tsx"
|
|
214
218
|
];
|
|
215
219
|
/**
|
|
216
|
-
* Returns the extra Node flags needed to launch transport-backed
|
|
220
|
+
* Returns the extra Node flags needed to launch transport-backed worker entries
|
|
217
221
|
* directly from source during local development and tests.
|
|
218
222
|
*/
|
|
219
223
|
function getNodeTransportExecArgv(moduleUrl) {
|
|
@@ -1 +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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"}
|
|
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 isToolAnnotations(value: unknown): boolean {\n if (!isRecord(value)) {\n return false;\n }\n\n return (\n (value.title === undefined || typeof value.title === \"string\") &&\n (value.readOnlyHint === undefined ||\n typeof value.readOnlyHint === \"boolean\") &&\n (value.destructiveHint === undefined ||\n typeof value.destructiveHint === \"boolean\") &&\n (value.idempotentHint === undefined ||\n typeof value.idempotentHint === \"boolean\") &&\n (value.openWorldHint === undefined ||\n typeof value.openWorldHint === \"boolean\")\n );\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.annotations === undefined || isToolAnnotations(tool.annotations)) &&\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 transport-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 worker 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":";;;;AAQA,SAAS,SAAS,OAAkD;AAClE,QAAO,OAAO,UAAU,YAAY,UAAU;;AAGhD,SAAS,eAAe,OAAiC;AACvD,QAAO,OAAO,UAAU,YAAY,OAAO,SAAS,MAAM;;AAG5D,SAAS,kBAAkB,OAAyB;AAClD,KAAI,CAAC,SAAS,MAAM,CAClB,QAAO;AAGT,SACG,MAAM,UAAU,UAAa,OAAO,MAAM,UAAU,cACpD,MAAM,iBAAiB,UACtB,OAAO,MAAM,iBAAiB,eAC/B,MAAM,oBAAoB,UACzB,OAAO,MAAM,oBAAoB,eAClC,MAAM,mBAAmB,UACxB,OAAO,MAAM,mBAAmB,eACjC,MAAM,kBAAkB,UACvB,OAAO,MAAM,kBAAkB;;AAIrC,SAAS,iBAAiB,OAAiD;AACzE,KAAI,CAAC,SAAS,MAAM,CAClB,QAAO;AAGT,QACE,eAAe,MAAM,YAAY,IACjC,eAAe,MAAM,YAAY,IACjC,eAAe,MAAM,iBAAiB,IACtC,eAAe,MAAM,UAAU;;AAInC,SAAS,mBAAmB,OAA2C;AACrE,KAAI,CAAC,SAAS,MAAM,IAAI,OAAO,MAAM,SAAS,SAC5C,QAAO;AAGT,KAAI,CAAC,SAAS,MAAM,MAAM,IAAI,OAAO,MAAM,UAAU,SACnD,QAAO;AAGT,QAAO,OAAO,OAAO,MAAM,MAAM,CAAC,OAC/B,SACC,SAAS,KAAK,IACd,OAAO,KAAK,iBAAiB,YAC7B,OAAO,KAAK,aAAa,aACxB,KAAK,gBAAgB,UAAa,kBAAkB,KAAK,YAAY,MACrE,KAAK,gBAAgB,UAAa,OAAO,KAAK,gBAAgB,UAClE;;AAGH,SAAS,eACP,OAC4C;AAC5C,QACE,SAAS,MAAM,IACf,OAAO,MAAM,SAAS,YACtB,OAAO,MAAM,YAAY;;AAI7B,SAAS,cAAc,OAAsC;AAC3D,KAAI,CAAC,SAAS,MAAM,IAAI,CAAC,eAAe,MAAM,WAAW,CACvD,QAAO;AAGT,KACE,CAAC,MAAM,QAAQ,MAAM,KAAK,IAC1B,CAAC,MAAM,KAAK,OAAO,QAAQ,OAAO,QAAQ,SAAS,CAEnD,QAAO;AAGT,KAAI,OAAO,MAAM,OAAO,UACtB,QAAO;AAGT,QAAO,MAAM,KAAK,OAAO,eAAe,MAAM,MAAM;;;;;AA0FtD,SAAgB,oBACd,OAC4B;AAC5B,KAAI,CAAC,SAAS,MAAM,IAAI,OAAO,MAAM,SAAS,SAC5C,QAAO;AAGT,SAAQ,MAAM,MAAd;EACE,KAAK,SACH,QAAO,OAAO,MAAM,OAAO;EAC7B,KAAK,UACH,QACE,OAAO,MAAM,SAAS,YACtB,OAAO,MAAM,OAAO,YACpB,iBAAiB,MAAM,QAAQ,IAC/B,MAAM,QAAQ,MAAM,UAAU,IAC9B,MAAM,UAAU,MAAM,mBAAmB;EAE7C,KAAK;AACH,OAAI,OAAO,MAAM,WAAW,YAAY,OAAO,MAAM,OAAO,UAC1D,QAAO;AAGT,OAAI,MAAM,GACR,QAAO,YAAY;AAGrB,UAAO,eAAe,MAAM,MAAM;EACpC,QACE,QAAO;;;;;;AAOb,SAAgB,gBAAgB,OAAwC;AACtE,KAAI,CAAC,SAAS,MAAM,IAAI,OAAO,MAAM,SAAS,SAC5C,QAAO;AAGT,SAAQ,MAAM,MAAd;EACE,KAAK,UACH,QAAO,OAAO,MAAM,OAAO;EAC7B,KAAK,YACH,QACE,OAAO,MAAM,WAAW,YACxB,OAAO,MAAM,iBAAiB,YAC9B,OAAO,MAAM,iBAAiB,YAC9B,WAAW;EAEf,KAAK,OACH,QAAO,OAAO,MAAM,OAAO,YAAY,cAAc,MAAM;EAC7D,QACE,QAAO;;;;;;AC5Nb,MAAM,0BAA0B;AAChC,MAAM,2BAA2B;AAqCjC,SAAS,gBACP,WACA,kBACA,SACe;AACf,QAAO;EACL,YAAY,KAAK,KAAK,GAAG;EACzB,OAAO;GACL,MAAM,mBAAmB,YAAY;GACrC,SAAS,mBAAmBA,2CAA4B,GAAG;GAC5D;EACD,MAAM,EAAE;EACR,IAAI;EACL;;AAGH,SAAS,qBAAqB,SAAqC;AACjE,KAAI,CAAC,QAAQ,GACX,QAAO;EACL,YAAY,QAAQ;EACpB,OAAO,QAAQ;EACf,MAAM,QAAQ;EACd,IAAI;EACL;AAGH,QAAO;EACL,YAAY,QAAQ;EACpB,MAAM,QAAQ;EACd,IAAI;EACJ,QAAQ,QAAQ;EACjB;;;;;;AAOH,eAAsB,wBACpB,SACwB;CACxB,MAAM,YAAY,KAAK,KAAK;CAC5B,MAAM,kBAAkB,IAAI,iBAAiB;CAC7C,MAAM,mBAAmBC,wCACvB,QAAQ,WACR,gBAAgB,OACjB;CACD,MAAM,cAAc,QAAQ;AAE5B,QAAO,MAAM,IAAI,SAAwB,YAAY;EACnD,IAAI,WAAW;EACf,IAAI,mBAAmB;EACvB,IAAI,sBAAsB;EAC1B,IAAIC;EACJ,MAAM,gBAAgB,QAAQ,iBAAiB;EAE/C,MAAM,gBAAgB;AACpB,cAAW;AACX,mBAAgB,OAAO;AACvB,OAAI,aACF,cAAa,aAAa;AAE5B,OAAI,oBACF,cAAa,oBAAoB;AAEnC,aAAU;AACV,aAAU;AACV,eAAY;AACZ,gBAAa,oBAAoB,SAAS,cAAc;;EAG1D,MAAM,UAAU,WAA0B;AACxC,OAAI,SACF;AAGF,YAAS;AACT,GAAK,QAAQ,QAAQ,QAAQ,YAAY,OAAO,CAAC,CAC9C,YAAY,GAAG,CACf,cAAc;AACb,IAAK,QAAQ,QAAQ,QAAQ,UAAU,SAAS,CAAC,CAAC,YAAY,GAAG;KACjE;AACJ,WAAQ,OAAO;;EAGjB,MAAM,QAAQ,YAAoB;AAChC,UAAO,gBAAgB,WAAW,kBAAkB,QAAQ,CAAC;;EAG/D,MAAM,QAAQ,YAA+B;AAC3C,OAAI,SACF;AAGF,OAAI;IACF,MAAM,cAAc,QAAQ,UAAU,KAAK,QAAQ;AACnD,IAAK,QAAQ,QAAQ,YAAY,CAAC,OAAO,UAAU;AACjD,SAAI,SACF;AAGF,UAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,CAAC;MAC5D;YACK,OAAO;AACd,SAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,CAAC;;;EAIhE,MAAM,0BAA0B;AAC9B,OAAI,YAAY,oBACd;AAGF,yBAAsB;AACtB,sBAAmB;AACnB,mBAAgB,OAAO;AACvB,QAAK;IACH,IAAI,QAAQ;IACZ,MAAM;IACP,CAAC;AACF,yBAAsB,iBAAiB;AACrC,QAAI,SACF;AAGF,IAAK,QAAQ,QAAQ,QAAQ,UAAU,WAAW,CAAC,CAChD,YAAY,GAAG,CACf,cAAc;AACb,SAAI,SACF;AAGF,YACE,gBAAgB,WAAW,MAAMF,2CAA4B,CAAC,CAC/D;MACD;MACH,cAAc;;EAGnB,MAAM,eAAe,iBAAiB;AACpC,sBAAmB;KAClB,QAAQ,eAAe,YAAY,yBAAyB;EAE/D,MAAM,aAAa,YAA2B;AAC5C,OAAI,SACF;AAGF,OAAI,CAAC,gBAAgB,QAAQ,CAC3B;AAGF,OAAI,QAAQ,WAAW,QAAQ,OAAO,QAAQ,YAC5C;AAGF,OAAI,QAAQ,SAAS,UACnB;AAGF,OAAI,QAAQ,SAAS,aAAa;AAChC,IAAK,iBAAiB,QAA2B,CAC9C,MAAM,WAAW;AAChB,UAAK;MACH,GAAG;MACH,QAAQ,QAAQ;MAChB,MAAM;MACP,CAAC;MACF,CACD,OAAO,UAAU;AAChB,UAAK;MACH,QAAQ,QAAQ;MAChB,OAAO;OACL,MAAM;OACN,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;OAChE;MACD,IAAI;MACJ,MAAM;MACP,CAAC;MACF;AACJ;;AAGF,UAAO,qBAAqB,QAAQ,CAAC;;EAGvC,MAAM,WAAW,UAAiB;AAChC,QAAK,MAAM,QAAQ;;EAGrB,MAAM,WAAW,WAAkC;AACjD,QAAK,QAAQ,WAAW,gCAAgC;;EAG1D,MAAM,sBAAsB;AAC1B,sBAAmB;;EAGrB,MAAM,aAAa,QAAQ,UAAU,UAAU,UAAU;EACzD,MAAM,WAAW,QAAQ,UAAU,QAAQ,QAAQ;EACnD,MAAM,WAAW,QAAQ,UAAU,QAAQ,QAAQ;AACnD,eAAa,iBAAiB,SAAS,eAAe,EAAE,MAAM,MAAM,CAAC;AAErE,MAAI,aAAa,SAAS;AACxB,sBAAmB;AACnB;;AAGF,OAAK;GACH,MAAM,QAAQ;GACd,IAAI,QAAQ;GACZ,SAAS,QAAQ;GACjB,WAAWG,wCAAyB,QAAQ,UAAU;GACtD,MAAM;GACP,CAAC;GACF;;;;;AC7QJ,MAAM,wBAAwB;CAAC;CAAuB;CAAY;CAAM;;;;;AAMxE,SAAgB,yBACd,WACsB;AACtB,QAAO,UAAU,SAAS,MAAM,GAAG,CAAC,GAAG,sBAAsB,GAAG;;;;;ACwBlE,SAAS,YAAY,OAAe,SAAyB;AAC3D,QAAO,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,QAAQ,CAAC;;;;;AAM9C,SAAgB,mBACd,SACiB;CACjB,MAAMC,YAA4B,EAAE;CACpC,MAAMC,UAGD,EAAE;CACP,MAAM,wBAAQ,IAAI,KAAmB;CACrC,IAAI,WAAW;CACf,IAAI,YAAY;CAEhB,MAAM,UAAU,YAAY,QAAQ,WAAW,GAAG,QAAQ,QAAQ;CAElE,MAAM,cAAc,YAAmC;AACrD,eAAa;AAEb,MAAI;AACF,UAAO;IACL,WAAW;IACX,OAAO,MAAM,QAAQ,QAAQ;IAC9B;WACM,OAAO;AACd,gBAAa;AACb,SAAM;;;CAIV,MAAM,wBAAwB,UAA8B;EAC1D,MAAM,QAAQ,UAAU,QAAQ,MAAM;AAEtC,MAAI,SAAS,EACX,WAAU,OAAO,OAAO,EAAE;;CAI9B,MAAM,kBAAkB,UAA8B;AACpD,MAAI,MAAM,WAAW;AACnB,gBAAa,MAAM,UAAU;AAC7B,SAAM,YAAY;;;CAItB,MAAM,uBAAuB,UAA8B;AACzD,YAAU,KAAK,MAAM;AAErB,OAAK,QAAQ,iBAAiB,KAAK,EACjC,OAAM,YAAY,iBAAiB;AACjC,OAAI,SACF;AAGF,OAAI,UAAU,SAAS,MAAM,IAAI,YAAY,QAC3C,CAAK,aAAa,MAAM;KAEzB,QAAQ,cAAc;;CAI7B,MAAM,eAAe,OAAO,UAAuC;AACjE,iBAAe,MAAM;AACrB,uBAAqB,MAAM;AAC3B,QAAM,OAAO,MAAM;AACnB,eAAa;AACb,QAAM,QAAQ,QAAQ,MAAM,MAAM;;CAGpC,MAAM,cAAc,UAA8C;AAChE,iBAAe,MAAM;AACrB,uBAAqB,MAAM;AAC3B,QAAM,IAAI,MAAM;AAEhB,SAAO;GACL,SAAS,OAAO,WAAW,SAAS;AAClC,QAAI,CAAC,MAAM,IAAI,MAAM,CACnB;AAGF,UAAM,OAAO,MAAM;AAEnB,QAAI,YAAY,CAAC,UAAU;AACzB,WAAM,aAAa,MAAM;AACzB,WAAM,aAAa;AACnB;;IAGF,MAAM,SAAS,QAAQ,OAAO;AAC9B,QAAI,QAAQ;AACV,YAAO,QAAQ,WAAW,MAAM,CAAC;AACjC;;AAGF,wBAAoB,MAAM;;GAE5B,OAAO,MAAM;GACd;;CAGH,MAAM,cAAc,YAA2B;AAC7C,SAAO,CAAC,YAAY,QAAQ,SAAS,KAAK,YAAY,QAAQ,SAAS;GACrE,MAAM,SAAS,QAAQ,OAAO;AAC9B,OAAI,CAAC,OACH;AAGF,OAAI;AACF,WAAO,QAAQ,WAAW,MAAM,aAAa,CAAC,CAAC;YACxC,OAAO;AACd,WAAO,OACL,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,MAAM,CAAC,CAC1D;;;;AAKP,QAAO;EACL,SAAS,YAAY;AACnB,OAAI,SACF,OAAM,IAAI,MAAM,4BAA4B;GAG9C,MAAM,QAAQ,UAAU,KAAK;AAC7B,OAAI,MACF,QAAO,WAAW,MAAM;AAG1B,OAAI,YAAY,QAAQ,QACtB,QAAO,WAAW,MAAM,aAAa,CAAC;AAGxC,UAAO,MAAM,IAAI,SAA+B,SAAS,WAAW;AAClE,YAAQ,KAAK;KAAE;KAAQ;KAAS,CAAC;KACjC;;EAEJ,SAAS,YAAY;AACnB,OAAI,SACF;AAGF,cAAW;AAEX,UAAO,QAAQ,SAAS,EACtB,SAAQ,OAAO,EAAE,uBAAO,IAAI,MAAM,4BAA4B,CAAC;GAGjE,MAAM,cAAc,CAAC,GAAG,UAAU;AAClC,aAAU,SAAS;AACnB,SAAM,QAAQ,IAAI,YAAY,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;;EAEpE,SAAS,OAAO,UAAU;AACxB,OAAI,SACF,OAAM,IAAI,MAAM,4BAA4B;GAI9C,MAAM,UADS,YAAY,SAAS,SAAS,QAAQ,QAAQ,GACpC;AAEzB,OAAI,WAAW,EACb;GAGF,MAAM,UAAU,MAAM,QAAQ,IAC5B,MAAM,KAAK,EAAE,QAAQ,SAAS,EAAE,YAAY,MAAM,aAAa,CAAC,CACjE;AAED,QAAK,MAAM,SAAS,QAClB,qBAAoB,MAAM;;EAG/B"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @packageDocumentation
|
|
3
3
|
* Public TypeScript declarations for this package entrypoint.
|
|
4
4
|
*/
|
|
5
|
-
import { a as ToolCall, d as ExecuteResult, f as JsonSchema,
|
|
5
|
+
import { _ as ToolExecutionContext, a as ToolCall, d as ExecuteResult, f as JsonSchema, h as ToolAnnotations, 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-Cy18Z0u0.cjs";
|
|
6
6
|
|
|
7
7
|
//#region src/protocol/messages.d.ts
|
|
8
8
|
|
|
@@ -98,7 +98,7 @@ interface TransportCloseReason {
|
|
|
98
98
|
signal?: NodeJS.Signals | null;
|
|
99
99
|
}
|
|
100
100
|
/**
|
|
101
|
-
* Minimal parent-side transport contract for
|
|
101
|
+
* Minimal parent-side transport contract for transport-backed execution.
|
|
102
102
|
*/
|
|
103
103
|
interface HostTransport {
|
|
104
104
|
dispose(): Promise<void> | void;
|
|
@@ -129,7 +129,7 @@ declare function runHostTransportSession(options: HostTransportSessionOptions):
|
|
|
129
129
|
//#endregion
|
|
130
130
|
//#region src/protocol/nodeBootstrap.d.ts
|
|
131
131
|
/**
|
|
132
|
-
* Returns the extra Node flags needed to launch transport-backed
|
|
132
|
+
* Returns the extra Node flags needed to launch transport-backed worker entries
|
|
133
133
|
* directly from source during local development and tests.
|
|
134
134
|
*/
|
|
135
135
|
declare function getNodeTransportExecArgv(moduleUrl: string): string[] | undefined;
|
|
@@ -165,5 +165,5 @@ interface ResourcePool<T> {
|
|
|
165
165
|
*/
|
|
166
166
|
declare function createResourcePool<T>(options: ResourcePoolOptions<T>): ResourcePool<T>;
|
|
167
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 };
|
|
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 ToolAnnotations, type ToolCall, type ToolCallMessage, type ToolCallResult, type ToolExecutionContext, type ToolResultMessage, type TransportCloseReason, createResourcePool, getNodeTransportExecArgv, isDispatcherMessage, isRunnerMessage, runHostTransportSession };
|
|
169
169
|
//# sourceMappingURL=index.d.cts.map
|
|
@@ -1 +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":";;;;;;;;;
|
|
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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"}
|
package/dist/protocol/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @packageDocumentation
|
|
3
3
|
* Public TypeScript declarations for this package entrypoint.
|
|
4
4
|
*/
|
|
5
|
-
import { a as ToolCall, d as ExecuteResult, f as JsonSchema,
|
|
5
|
+
import { _ as ToolExecutionContext, a as ToolCall, d as ExecuteResult, f as JsonSchema, h as ToolAnnotations, 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-DXLu0eJV.js";
|
|
6
6
|
|
|
7
7
|
//#region src/protocol/messages.d.ts
|
|
8
8
|
|
|
@@ -98,7 +98,7 @@ interface TransportCloseReason {
|
|
|
98
98
|
signal?: NodeJS.Signals | null;
|
|
99
99
|
}
|
|
100
100
|
/**
|
|
101
|
-
* Minimal parent-side transport contract for
|
|
101
|
+
* Minimal parent-side transport contract for transport-backed execution.
|
|
102
102
|
*/
|
|
103
103
|
interface HostTransport {
|
|
104
104
|
dispose(): Promise<void> | void;
|
|
@@ -129,7 +129,7 @@ declare function runHostTransportSession(options: HostTransportSessionOptions):
|
|
|
129
129
|
//#endregion
|
|
130
130
|
//#region src/protocol/nodeBootstrap.d.ts
|
|
131
131
|
/**
|
|
132
|
-
* Returns the extra Node flags needed to launch transport-backed
|
|
132
|
+
* Returns the extra Node flags needed to launch transport-backed worker entries
|
|
133
133
|
* directly from source during local development and tests.
|
|
134
134
|
*/
|
|
135
135
|
declare function getNodeTransportExecArgv(moduleUrl: string): string[] | undefined;
|
|
@@ -165,5 +165,5 @@ interface ResourcePool<T> {
|
|
|
165
165
|
*/
|
|
166
166
|
declare function createResourcePool<T>(options: ResourcePoolOptions<T>): ResourcePool<T>;
|
|
167
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 };
|
|
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 ToolAnnotations, type ToolCall, type ToolCallMessage, type ToolCallResult, type ToolExecutionContext, type ToolResultMessage, type TransportCloseReason, createResourcePool, getNodeTransportExecArgv, isDispatcherMessage, isRunnerMessage, runHostTransportSession };
|
|
169
169
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/protocol/messages.ts","../../src/protocol/hostSession.ts","../../src/protocol/nodeBootstrap.ts","../../src/protocol/resourcePool.ts"],"sourcesContent":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/protocol/messages.ts","../../src/protocol/hostSession.ts","../../src/protocol/nodeBootstrap.ts","../../src/protocol/resourcePool.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/protocol/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "../errors-
|
|
2
|
-
import { n as extractProviderManifests, o as getExecutionTimeoutMessage, t as createToolCallDispatcher } from "../runner-
|
|
1
|
+
import "../errors-DdWVEGU8.js";
|
|
2
|
+
import { n as extractProviderManifests, o as getExecutionTimeoutMessage, t as createToolCallDispatcher } from "../runner-BWAVLBi6.js";
|
|
3
3
|
|
|
4
4
|
//#region src/protocol/messages.ts
|
|
5
5
|
function isRecord(value) {
|
|
@@ -8,6 +8,10 @@ function isRecord(value) {
|
|
|
8
8
|
function isFiniteNumber(value) {
|
|
9
9
|
return typeof value === "number" && Number.isFinite(value);
|
|
10
10
|
}
|
|
11
|
+
function isToolAnnotations(value) {
|
|
12
|
+
if (!isRecord(value)) return false;
|
|
13
|
+
return (value.title === void 0 || typeof value.title === "string") && (value.readOnlyHint === void 0 || typeof value.readOnlyHint === "boolean") && (value.destructiveHint === void 0 || typeof value.destructiveHint === "boolean") && (value.idempotentHint === void 0 || typeof value.idempotentHint === "boolean") && (value.openWorldHint === void 0 || typeof value.openWorldHint === "boolean");
|
|
14
|
+
}
|
|
11
15
|
function isRuntimeOptions(value) {
|
|
12
16
|
if (!isRecord(value)) return false;
|
|
13
17
|
return isFiniteNumber(value.maxLogChars) && isFiniteNumber(value.maxLogLines) && isFiniteNumber(value.memoryLimitBytes) && isFiniteNumber(value.timeoutMs);
|
|
@@ -15,7 +19,7 @@ function isRuntimeOptions(value) {
|
|
|
15
19
|
function isProviderManifest(value) {
|
|
16
20
|
if (!isRecord(value) || typeof value.name !== "string") return false;
|
|
17
21
|
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"));
|
|
22
|
+
return Object.values(value.tools).every((tool) => isRecord(tool) && typeof tool.originalName === "string" && typeof tool.safeName === "string" && (tool.annotations === void 0 || isToolAnnotations(tool.annotations)) && (tool.description === void 0 || typeof tool.description === "string"));
|
|
19
23
|
}
|
|
20
24
|
function isExecuteError(value) {
|
|
21
25
|
return isRecord(value) && typeof value.code === "string" && typeof value.message === "string";
|
|
@@ -213,7 +217,7 @@ const SOURCE_MODE_EXEC_ARGV = [
|
|
|
213
217
|
"tsx"
|
|
214
218
|
];
|
|
215
219
|
/**
|
|
216
|
-
* Returns the extra Node flags needed to launch transport-backed
|
|
220
|
+
* Returns the extra Node flags needed to launch transport-backed worker entries
|
|
217
221
|
* directly from source during local development and tests.
|
|
218
222
|
*/
|
|
219
223
|
function getNodeTransportExecArgv(moduleUrl) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["forceTerminateTimer: NodeJS.Timeout | undefined","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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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["forceTerminateTimer: NodeJS.Timeout | undefined","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 isToolAnnotations(value: unknown): boolean {\n if (!isRecord(value)) {\n return false;\n }\n\n return (\n (value.title === undefined || typeof value.title === \"string\") &&\n (value.readOnlyHint === undefined ||\n typeof value.readOnlyHint === \"boolean\") &&\n (value.destructiveHint === undefined ||\n typeof value.destructiveHint === \"boolean\") &&\n (value.idempotentHint === undefined ||\n typeof value.idempotentHint === \"boolean\") &&\n (value.openWorldHint === undefined ||\n typeof value.openWorldHint === \"boolean\")\n );\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.annotations === undefined || isToolAnnotations(tool.annotations)) &&\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 transport-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 worker 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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"}
|