@poe-platform/safe-js 0.1.604 → 0.1.605

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/safe-js/chunks/{chunk-HMJGGU6F.js → chunk-3XEB5VOF.js} +1 -1
  2. package/dist/safe-js/chunks/{chunk-HMJGGU6F.js.map → chunk-3XEB5VOF.js.map} +2 -2
  3. package/dist/safe-js/chunks/{chunk-CQHN2MZQ.js → chunk-KX5Y2HHX.js} +2 -2
  4. package/dist/safe-js/chunks/chunk-KX5Y2HHX.js.map +7 -0
  5. package/dist/safe-js/chunks/{cli-runtime-TURGGYT5.js → cli-runtime-EEHCUG52.js} +3 -3
  6. package/dist/safe-js/chunks/{mcp-KV554TH7.js → mcp-TNQ6HZC7.js} +3 -3
  7. package/dist/safe-js/cli.js +2 -2
  8. package/dist/safe-js/index.js +2 -2
  9. package/dist/safe-js/modules/mcp-transport.d.ts +5 -4
  10. package/dist/safe-js/modules/mcp.d.ts +5 -2
  11. package/package.json +2 -2
  12. package/dist/safe-js/chunks/chunk-CQHN2MZQ.js.map +0 -7
  13. package/dist/tiny-mcp-client/index.d.ts +0 -662
  14. package/dist/tiny-stdio-mcp-server/content/audio.d.ts +0 -15
  15. package/dist/tiny-stdio-mcp-server/content/convert.d.ts +0 -16
  16. package/dist/tiny-stdio-mcp-server/content/file-type.d.ts +0 -11
  17. package/dist/tiny-stdio-mcp-server/content/file.d.ts +0 -28
  18. package/dist/tiny-stdio-mcp-server/content/image.d.ts +0 -15
  19. package/dist/tiny-stdio-mcp-server/content/index.d.ts +0 -7
  20. package/dist/tiny-stdio-mcp-server/content/mime.d.ts +0 -7
  21. package/dist/tiny-stdio-mcp-server/content/remote.d.ts +0 -5
  22. package/dist/tiny-stdio-mcp-server/index.d.ts +0 -9
  23. package/dist/tiny-stdio-mcp-server/schema.d.ts +0 -20
  24. package/dist/tiny-stdio-mcp-server/server.d.ts +0 -35
  25. package/dist/tiny-stdio-mcp-server/types.d.ts +0 -256
  26. /package/dist/safe-js/chunks/{cli-runtime-TURGGYT5.js.map → cli-runtime-EEHCUG52.js.map} +0 -0
  27. /package/dist/safe-js/chunks/{mcp-KV554TH7.js.map → mcp-TNQ6HZC7.js.map} +0 -0
@@ -2,7 +2,7 @@ import {
2
2
  McpError,
3
3
  connectMcpTransport,
4
4
  normalizeMcpOptions
5
- } from "./chunk-HMJGGU6F.js";
5
+ } from "./chunk-3XEB5VOF.js";
6
6
  import {
7
7
  declareHostOperation,
8
8
  runResources
@@ -402,4 +402,4 @@ function isPlainObjectRecord(value) {
402
402
  export {
403
403
  makeMcpModule
404
404
  };
405
- //# sourceMappingURL=chunk-CQHN2MZQ.js.map
405
+ //# sourceMappingURL=chunk-KX5Y2HHX.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/modules/mcp.ts"],
4
+ "sourcesContent": ["import { McpError } from \"tiny-mcp-client\";\nimport { hostErrorData } from \"../error/shape.js\";\nimport { declareHostOperation } from \"../interp/host-bridge.js\";\nimport { runResources } from \"../interp/resources.js\";\nimport {\n connectMcpTransport,\n normalizeMcpOptions,\n type ManagedMcpConnection,\n type McpModuleOptions\n} from \"./mcp-transport.js\";\n\nexport type McpModuleServerHandle = {\n command: string;\n args?: string[];\n env?: Record<string, string>;\n};\n\nexport type McpModuleTool = {\n name: string;\n description?: string;\n schema?: unknown;\n};\n\nexport type McpModuleToolCall = {\n name: string;\n args?: unknown;\n};\n\nexport type McpModuleToolBatchError = {\n name: string;\n message: string;\n};\n\nexport type McpModuleToolBatchResult =\n | {\n ok: true;\n value: unknown;\n }\n | {\n ok: false;\n error: McpModuleToolBatchError;\n };\n\nexport type McpModuleClient = {\n tools(): Promise<McpModuleTool[]>;\n tool(name: string, args?: unknown): Promise<unknown>;\n toolBatch(calls: McpModuleToolCall[]): Promise<McpModuleToolBatchResult[]>;\n};\n\nexport type McpConnection = {\n listTools(params?: { cursor?: string }): Promise<{\n tools: unknown[];\n nextCursor?: string;\n }>;\n callTool(params: { name: string; arguments?: unknown }): Promise<unknown>;\n callToolBatch?(\n params: Array<{\n name: string;\n arguments?: unknown;\n }>\n ): Promise<McpModuleToolBatchResult[]>;\n};\n\ntype McpToolRequest = Parameters<McpConnection[\"callTool\"]>[0];\n\ntype NormalizedToolBatchCall =\n | {\n ok: true;\n request: McpToolRequest;\n }\n | {\n ok: false;\n error: McpModuleToolBatchError;\n };\n\nconst DEFAULT_TOOL_BATCH_CONCURRENCY = 4;\n\nexport type ConnectMcp = (server: McpModuleServerHandle) => Promise<McpConnection> | McpConnection;\n\nexport type McpNamedServerHandle = { name: string };\nexport type ManagedMcpClient = McpModuleClient & { close(): Promise<void> };\nexport type ManagedMcpModule = {\n servers: Record<string, ManagedMcpClient>;\n server(name: string): McpNamedServerHandle;\n client(handle: McpNamedServerHandle | string): Promise<ManagedMcpClient>;\n};\n\ntype CustomMcpModule = {\n server(server: McpModuleServerHandle): McpModuleServerHandle;\n client(handle: McpModuleServerHandle): Promise<McpModuleClient>;\n};\n\nexport function makeMcpModule(options: McpModuleOptions): ManagedMcpModule;\nexport function makeMcpModule(connectMcp: ConnectMcp): CustomMcpModule;\nexport function makeMcpModule(\n connectMcp: ConnectMcp | McpModuleOptions\n): CustomMcpModule | ManagedMcpModule {\n if (typeof connectMcp !== \"function\") {\n const options = normalizeMcpOptions(connectMcp);\n const servers = Object.create(null) as Record<string, ManagedMcpClient>;\n for (const [name, config] of Object.entries(options.servers)) {\n const connections = new WeakMap<object, ManagedMcpConnection>();\n const directScope = {};\n const connection = () => {\n const scope = runResources.getStore();\n scope?.signal.throwIfAborted();\n options.signal?.throwIfAborted();\n const owner = scope ?? directScope;\n let current = connections.get(owner);\n if (current === undefined) {\n current = connectMcpTransport(config, options, scope?.signal);\n connections.set(owner, current);\n scope?.add(current.close);\n }\n return current.ready;\n };\n const invoke = async <Result>(\n operation: (client: Awaited<ReturnType<typeof connection>>) => Promise<Result>\n ): Promise<Result> => {\n try {\n const result = await operation(await connection());\n runResources.getStore()?.signal.throwIfAborted();\n options.signal?.throwIfAborted();\n return result;\n } catch (error) {\n runResources.getStore()?.signal.throwIfAborted();\n options.signal?.throwIfAborted();\n if (error instanceof McpError) {\n hostErrorData.set(error, {\n code: error.code,\n ...(error.data === undefined ? {} : { data: error.data })\n });\n }\n throw error;\n }\n };\n servers[name] = {\n tools: declareHostOperation(\n async () =>\n invoke(async (client) => {\n const tools: McpModuleTool[] = [];\n const cursors = new Set<string>();\n let pages = 0;\n let cursor: string | undefined;\n do {\n const result = await client.listTools(\n cursor === undefined ? undefined : { cursor }\n );\n pages += 1;\n tools.push(...normalizeToolsResult(result));\n cursor = result.nextCursor;\n if (cursor !== undefined) {\n if (typeof cursor !== \"string\" || cursors.has(cursor))\n throw new Error(\"MCP tools pagination did not advance.\");\n cursors.add(cursor);\n if (pages >= options.maxToolPages!)\n throw new Error(\"MCP tools page limit exceeded.\");\n }\n } while (cursor !== undefined);\n return tools;\n }),\n \"re-issue\"\n ),\n tool: declareHostOperation(async (toolName: string, args?: unknown) => {\n const request = createNullRecord({\n name: readNonEmptyTrimmedString(toolName, \"MCP tool name\"),\n ...(args === undefined ? {} : { arguments: readToolArguments(args) })\n });\n return invoke((client) => client.callTool(request));\n }, \"read-side-effect\"),\n toolBatch: declareHostOperation(async (calls: McpModuleToolCall[]) => {\n const normalized = readToolBatchCalls(calls);\n if (normalized.length === 0) return [];\n return invoke((client) => executeToolBatch(client, normalized));\n }, \"read-side-effect\"),\n close: declareHostOperation(async () => {\n const owner = runResources.getStore() ?? directScope;\n const current = connections.get(owner);\n if (current !== undefined) {\n await current.close();\n connections.delete(owner);\n }\n }, \"re-issue\")\n };\n }\n const readName = (value: unknown): string => {\n const name = readNonEmptyString(value, \"MCP server name\");\n if (!Object.hasOwn(servers, name)) throw new Error(`MCP server '${name}' is not configured.`);\n return name;\n };\n return {\n servers,\n server(name: string) {\n return createNullRecord({ name: readName(name) });\n },\n async client(handle: McpNamedServerHandle | string) {\n if (typeof handle === \"string\") return servers[readName(handle)];\n if (!isRecord(handle) || Object.keys(handle).length !== 1 || !Object.hasOwn(handle, \"name\"))\n throw new TypeError(\"MCP client requires a named server handle.\");\n return servers[readName(getOwnProperty(handle, \"name\"))];\n }\n };\n }\n return {\n server(server: McpModuleServerHandle) {\n return normalizeServerHandle(server);\n },\n\n async client(handle: McpModuleServerHandle) {\n const connection = validateConnection(await connectMcp(normalizeServerHandle(handle)));\n\n return {\n async tools() {\n return normalizeToolsResult(await connection.listTools());\n },\n\n async tool(name: string, args?: unknown) {\n return connection.callTool(\n createNullRecord({\n name: readNonEmptyTrimmedString(name, \"MCP tool name\"),\n ...(args === undefined ? {} : { arguments: readToolArguments(args) })\n })\n );\n },\n\n async toolBatch(calls: McpModuleToolCall[]) {\n return executeToolBatch(connection, readToolBatchCalls(calls));\n }\n };\n }\n };\n}\n\nasync function executeToolBatch(\n connection: McpConnection,\n calls: NormalizedToolBatchCall[]\n): Promise<McpModuleToolBatchResult[]> {\n if (calls.length === 0) {\n return [];\n }\n\n if (connection.callToolBatch !== undefined && calls.every((call) => call.ok)) {\n try {\n return normalizeProtocolBatchResults(\n await connection.callToolBatch(calls.map((call) => call.request)),\n calls.length\n );\n } catch (error) {\n const batchError = normalizeToolBatchError(error);\n return calls.map(() =>\n createNullRecord({\n ok: false,\n error: batchError\n })\n );\n }\n }\n\n return executeToolBatchWithConcurrency(connection, calls, DEFAULT_TOOL_BATCH_CONCURRENCY);\n}\n\nasync function executeToolBatchWithConcurrency(\n connection: McpConnection,\n calls: NormalizedToolBatchCall[],\n concurrency: number\n): Promise<McpModuleToolBatchResult[]> {\n const results = new Array<McpModuleToolBatchResult>(calls.length);\n let nextIndex = 0;\n let disconnectError: McpModuleToolBatchError | undefined;\n\n const workerCount = Math.min(concurrency, calls.length);\n const workers = Array.from({ length: workerCount }, async () => {\n while (nextIndex < calls.length) {\n const index = nextIndex;\n nextIndex += 1;\n\n const call = calls[index];\n if (call === undefined) {\n continue;\n }\n\n if (!call.ok) {\n results[index] = createNullRecord({\n ok: false,\n error: call.error\n });\n continue;\n }\n\n if (disconnectError !== undefined) {\n results[index] = createNullRecord({\n ok: false,\n error: disconnectError\n });\n continue;\n }\n\n try {\n results[index] = createNullRecord({\n ok: true,\n value: await connection.callTool(call.request)\n });\n } catch (error) {\n const toolError = normalizeToolBatchError(error);\n results[index] = createNullRecord({\n ok: false,\n error: toolError\n });\n\n if (isMcpDisconnectError(toolError)) {\n disconnectError = toolError;\n }\n }\n }\n });\n\n await Promise.all(workers);\n\n return results;\n}\n\nfunction normalizeProtocolBatchResults(\n value: unknown,\n expectedLength: number\n): McpModuleToolBatchResult[] {\n if (!Array.isArray(value) || value.length !== expectedLength) {\n throw new Error(\n \"MCP callToolBatch() must resolve to a result array matching the input length.\"\n );\n }\n\n return value.map((entry, index) => normalizeProtocolBatchResult(entry, index));\n}\n\nfunction normalizeProtocolBatchResult(value: unknown, index: number): McpModuleToolBatchResult {\n if (!isRecord(value)) {\n throw new Error(`MCP callToolBatch()[${index}] must be a result envelope.`);\n }\n\n const ok = getOwnProperty(value, \"ok\");\n if (typeof ok !== \"boolean\") {\n throw new Error(`MCP callToolBatch()[${index}] must be a result envelope.`);\n }\n\n if (ok === true) {\n return createNullRecord({\n ok: true,\n value: getOwnProperty(value, \"value\")\n });\n }\n\n return createNullRecord({\n ok: false,\n error: normalizeToolBatchError(getOwnProperty(value, \"error\"))\n });\n}\n\nfunction normalizeServerHandle(value: unknown): McpModuleServerHandle {\n if (!isRecord(value)) {\n throw new Error(\"MCP server must be an object.\");\n }\n\n const command = getOwnProperty(value, \"command\");\n const args = getOwnProperty(value, \"args\");\n const env = getOwnProperty(value, \"env\");\n\n return createNullRecord({\n command: readNonEmptyTrimmedString(command, \"MCP server command\"),\n ...(args === undefined ? {} : { args: readStringArray(args, \"MCP server args\") }),\n ...(env === undefined ? {} : { env: readStringRecord(env, \"MCP server env\") })\n });\n}\n\nfunction validateConnection(value: unknown): McpConnection {\n if (\n !isRecord(value) ||\n typeof value.listTools !== \"function\" ||\n typeof value.callTool !== \"function\"\n ) {\n throw new Error(\"connectMcp must resolve to an object with listTools() and callTool().\");\n }\n\n const callToolBatch = getOwnProperty(value, \"callToolBatch\");\n\n return createNullRecord({\n listTools: () => (value.listTools as McpConnection[\"listTools\"])(),\n callTool: (params) => (value.callTool as McpConnection[\"callTool\"])(params),\n ...(typeof callToolBatch === \"function\"\n ? {\n callToolBatch: (params: McpToolRequest[]) =>\n (callToolBatch as NonNullable<McpConnection[\"callToolBatch\"]>)(params)\n }\n : {})\n });\n}\n\nfunction normalizeToolsResult(value: unknown): McpModuleTool[] {\n const tools = isRecord(value) ? getOwnProperty(value, \"tools\") : undefined;\n if (!Array.isArray(tools)) {\n throw new Error(\"MCP listTools() must resolve to an object with a tools array.\");\n }\n\n return tools.map((tool, index) => normalizeTool(tool, index));\n}\n\nfunction normalizeTool(value: unknown, index: number): McpModuleTool {\n if (!isRecord(value)) {\n throw new Error(`MCP tool[${index}] must be an object.`);\n }\n\n const description = getOwnProperty(value, \"description\");\n const inputSchema = getOwnProperty(value, \"inputSchema\");\n\n return createNullRecord({\n name: readNonEmptyString(getOwnProperty(value, \"name\"), `MCP tool[${index}] name`),\n ...(description === undefined\n ? {}\n : { description: readOptionalString(description, `MCP tool[${index}] description`) }),\n ...(inputSchema === undefined ? {} : { schema: inputSchema })\n });\n}\n\nfunction readStringArray(value: unknown, label: string): string[] {\n if (!Array.isArray(value) || value.some((entry) => typeof entry !== \"string\")) {\n throw new Error(`${label} must be an array of strings.`);\n }\n\n return [...value];\n}\n\nfunction readStringRecord(value: unknown, label: string): Record<string, string> {\n if (!isRecord(value)) {\n throw new Error(`${label} must be an object.`);\n }\n\n const entries = Object.entries(value);\n\n if (entries.some(([, entry]) => typeof entry !== \"string\")) {\n throw new Error(`${label} must be a string record.`);\n }\n\n return createNullRecord(Object.fromEntries(entries) as Record<string, string>);\n}\n\nfunction readOptionalString(value: unknown, label: string): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (typeof value !== \"string\") {\n throw new Error(`${label} must be a string.`);\n }\n\n return value;\n}\n\nfunction readNonEmptyString(value: unknown, label: string): string {\n const text = readOptionalString(value, label);\n\n if (text === undefined || text.trim().length === 0) {\n throw new Error(`${label} must be a non-empty string.`);\n }\n\n return text;\n}\n\nfunction readNonEmptyTrimmedString(value: unknown, label: string): string {\n return readNonEmptyString(value, label).trim();\n}\n\nfunction readToolArguments(value: unknown): Record<string, unknown> {\n if (!isPlainObjectRecord(value)) {\n throw new Error(\"MCP tool arguments must be an object.\");\n }\n\n return createNullRecord(Object.fromEntries(Object.entries(value)) as Record<string, unknown>);\n}\n\nfunction readToolBatchCalls(value: unknown): NormalizedToolBatchCall[] {\n if (!Array.isArray(value)) {\n throw new Error(\"MCP toolBatch calls must be an array.\");\n }\n\n return value.map((entry, index) => normalizeToolBatchCall(entry, index));\n}\n\nfunction normalizeToolBatchCall(value: unknown, index: number): NormalizedToolBatchCall {\n try {\n if (!isRecord(value)) {\n throw new Error(`MCP toolBatch call[${index}] must be an object.`);\n }\n\n const args = getOwnProperty(value, \"args\");\n\n return createNullRecord({\n ok: true,\n request: createNullRecord({\n name: readNonEmptyTrimmedString(\n getOwnProperty(value, \"name\"),\n `MCP toolBatch call[${index}] name`\n ),\n ...(args === undefined ? {} : { arguments: readToolArguments(args) })\n })\n });\n } catch (error) {\n return createNullRecord({\n ok: false,\n error: normalizeToolBatchError(error)\n });\n }\n}\n\nfunction normalizeToolBatchError(error: unknown): McpModuleToolBatchError {\n if (error instanceof Error) {\n return createNullRecord({\n name: error.name.length === 0 ? \"Error\" : error.name,\n message: error.message\n });\n }\n\n if (isRecord(error)) {\n const nameValue = getOwnProperty(error, \"name\");\n const messageValue = getOwnProperty(error, \"message\");\n const name = typeof nameValue === \"string\" && nameValue.trim().length > 0 ? nameValue : \"Error\";\n const message = typeof messageValue === \"string\" ? messageValue : String(error);\n\n return createNullRecord({\n name,\n message\n });\n }\n\n return createNullRecord({\n name: \"Error\",\n message: error === undefined ? \"\" : String(error)\n });\n}\n\nfunction isMcpDisconnectError(error: McpModuleToolBatchError): boolean {\n const message = error.message.toLowerCase();\n\n return (\n message.includes(\"disconnected\") ||\n message.includes(\"connection closed\") ||\n message.includes(\"transport closed\") ||\n message.includes(\"disposed\") ||\n message.includes(\"eof\")\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction getOwnProperty<Name extends PropertyKey>(value: object, name: Name): unknown {\n return hasOwnProperty(value, name) ? value[name] : undefined;\n}\n\nfunction hasOwnProperty<Name extends PropertyKey>(\n value: object,\n name: Name\n): value is Record<Name, unknown> {\n return Object.prototype.hasOwnProperty.call(value, name);\n}\n\nfunction createNullRecord<T extends object>(value: T): T {\n return Object.assign(Object.create(null) as T, value);\n}\n\nfunction isPlainObjectRecord(value: unknown): value is Record<string, unknown> {\n if (!isRecord(value) || Array.isArray(value)) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-EWBAW6TL.js";
16
16
  import {
17
17
  parseMcpConfig
18
- } from "./chunk-HMJGGU6F.js";
18
+ } from "./chunk-3XEB5VOF.js";
19
19
  import {
20
20
  lint
21
21
  } from "./chunk-V3HUN3KA.js";
@@ -263,7 +263,7 @@ async function runScriptFile(filepath, parsed, options) {
263
263
  import("./dump-DIYPSXHZ.js"),
264
264
  import("./runtime-modules-UHNN2KUT.js"),
265
265
  import("./fs-DZ5JTN5G.js"),
266
- import("./mcp-KV554TH7.js")
266
+ import("./mcp-TNQ6HZC7.js")
267
267
  ]);
268
268
  const loaded = loadExecutableSource(filepath, await options.readFile(filepath, "utf8"));
269
269
  const meta = {
@@ -682,4 +682,4 @@ export {
682
682
  exitCodeForError,
683
683
  runCli
684
684
  };
685
- //# sourceMappingURL=cli-runtime-TURGGYT5.js.map
685
+ //# sourceMappingURL=cli-runtime-EEHCUG52.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  makeMcpModule
3
- } from "./chunk-CQHN2MZQ.js";
4
- import "./chunk-HMJGGU6F.js";
3
+ } from "./chunk-KX5Y2HHX.js";
4
+ import "./chunk-3XEB5VOF.js";
5
5
  import "./chunk-OO5IGGV3.js";
6
6
  import "./chunk-QY3SVPUP.js";
7
7
  import "./chunk-4YIDX44G.js";
8
8
  export {
9
9
  makeMcpModule
10
10
  };
11
- //# sourceMappingURL=mcp-KV554TH7.js.map
11
+ //# sourceMappingURL=mcp-TNQ6HZC7.js.map
@@ -13,7 +13,7 @@ import path from "node:path";
13
13
  import { fileURLToPath } from "node:url";
14
14
  async function runCli(argv, options = {}) {
15
15
  if (!argv.includes("--help") && !argv.includes("-h")) {
16
- const runtime = await import("./chunks/cli-runtime-TURGGYT5.js");
16
+ const runtime = await import("./chunks/cli-runtime-EEHCUG52.js");
17
17
  return runtime.runCli(argv, options, createUsage());
18
18
  }
19
19
  const brokenPipe = createBrokenPipeState();
@@ -32,7 +32,7 @@ async function runCli(argv, options = {}) {
32
32
  stderr.write(`${error instanceof Error ? error.message : String(error)}
33
33
  `);
34
34
  if (brokenPipe.closed) return 0;
35
- const { exitCodeForError } = await import("./chunks/cli-runtime-TURGGYT5.js");
35
+ const { exitCodeForError } = await import("./chunks/cli-runtime-EEHCUG52.js");
36
36
  return exitCodeForError(error);
37
37
  }
38
38
  }
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunks/chunk-DD32ZIO4.js";
7
7
  import {
8
8
  makeMcpModule
9
- } from "./chunks/chunk-CQHN2MZQ.js";
9
+ } from "./chunks/chunk-KX5Y2HHX.js";
10
10
  import {
11
11
  AgentSpawnError,
12
12
  EnvAccessError,
@@ -30,7 +30,7 @@ import {
30
30
  } from "./chunks/chunk-EWBAW6TL.js";
31
31
  import {
32
32
  parseMcpConfig
33
- } from "./chunks/chunk-HMJGGU6F.js";
33
+ } from "./chunks/chunk-3XEB5VOF.js";
34
34
  import {
35
35
  lint
36
36
  } from "./chunks/chunk-V3HUN3KA.js";
@@ -1,4 +1,5 @@
1
- import { McpClient, type HttpTransportFetch, type StdioSpawn } from "../../tiny-mcp-client/index.js";
1
+ import { type ChildProcessWithoutNullStreams, type SpawnOptions } from "node:child_process";
2
+ import type { McpConnection } from "./mcp.js";
2
3
  export type McpServerConfig = {
3
4
  command: string;
4
5
  args?: string[];
@@ -14,11 +15,11 @@ export type McpModuleOptions = {
14
15
  closeTimeoutMs?: number;
15
16
  maxToolPages?: number;
16
17
  signal?: AbortSignal;
17
- fetch?: HttpTransportFetch;
18
- spawn?: StdioSpawn;
18
+ fetch?: (input: string | URL, init?: RequestInit) => Promise<Response>;
19
+ spawn?: (command: string, args: ReadonlyArray<string>, options: SpawnOptions) => ChildProcessWithoutNullStreams;
19
20
  };
20
21
  export type ManagedMcpConnection = {
21
- ready: Promise<McpClient>;
22
+ ready: Promise<McpConnection>;
22
23
  close(): Promise<void>;
23
24
  };
24
25
  export declare function parseMcpConfig(source: string, directory: string): McpModuleOptions;
@@ -29,9 +29,12 @@ export type McpModuleClient = {
29
29
  tool(name: string, args?: unknown): Promise<unknown>;
30
30
  toolBatch(calls: McpModuleToolCall[]): Promise<McpModuleToolBatchResult[]>;
31
31
  };
32
- type McpConnection = {
33
- listTools(): Promise<{
32
+ export type McpConnection = {
33
+ listTools(params?: {
34
+ cursor?: string;
35
+ }): Promise<{
34
36
  tools: unknown[];
37
+ nextCursor?: string;
35
38
  }>;
36
39
  callTool(params: {
37
40
  name: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@poe-platform/safe-js",
3
- "version": "0.1.604",
3
+ "version": "0.1.605",
4
4
  "description": "Budgeted JavaScript interpreter with explicit host capabilities and resumable execution",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -68,7 +68,7 @@
68
68
  "access": "public"
69
69
  },
70
70
  "dependencies": {
71
- "@poe-platform/safe-fs": "0.1.604",
71
+ "@poe-platform/safe-fs": "0.1.605",
72
72
  "temporal-polyfill": "1.0.4",
73
73
  "@petamoriken/float16": "^3.9.3",
74
74
  "@formatjs/intl-localematcher": "0.8.13",
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/modules/mcp.ts"],
4
- "sourcesContent": ["import { McpError } from \"tiny-mcp-client\";\nimport { hostErrorData } from \"../error/shape.js\";\nimport { declareHostOperation } from \"../interp/host-bridge.js\";\nimport { runResources } from \"../interp/resources.js\";\nimport {\n connectMcpTransport,\n normalizeMcpOptions,\n type ManagedMcpConnection,\n type McpModuleOptions\n} from \"./mcp-transport.js\";\n\nexport type McpModuleServerHandle = {\n command: string;\n args?: string[];\n env?: Record<string, string>;\n};\n\nexport type McpModuleTool = {\n name: string;\n description?: string;\n schema?: unknown;\n};\n\nexport type McpModuleToolCall = {\n name: string;\n args?: unknown;\n};\n\nexport type McpModuleToolBatchError = {\n name: string;\n message: string;\n};\n\nexport type McpModuleToolBatchResult =\n | {\n ok: true;\n value: unknown;\n }\n | {\n ok: false;\n error: McpModuleToolBatchError;\n };\n\nexport type McpModuleClient = {\n tools(): Promise<McpModuleTool[]>;\n tool(name: string, args?: unknown): Promise<unknown>;\n toolBatch(calls: McpModuleToolCall[]): Promise<McpModuleToolBatchResult[]>;\n};\n\ntype McpConnection = {\n listTools(): Promise<{\n tools: unknown[];\n }>;\n callTool(params: { name: string; arguments?: unknown }): Promise<unknown>;\n callToolBatch?(\n params: Array<{\n name: string;\n arguments?: unknown;\n }>\n ): Promise<McpModuleToolBatchResult[]>;\n};\n\ntype McpToolRequest = Parameters<McpConnection[\"callTool\"]>[0];\n\ntype NormalizedToolBatchCall =\n | {\n ok: true;\n request: McpToolRequest;\n }\n | {\n ok: false;\n error: McpModuleToolBatchError;\n };\n\nconst DEFAULT_TOOL_BATCH_CONCURRENCY = 4;\n\nexport type ConnectMcp = (server: McpModuleServerHandle) => Promise<McpConnection> | McpConnection;\n\nexport type McpNamedServerHandle = { name: string };\nexport type ManagedMcpClient = McpModuleClient & { close(): Promise<void> };\nexport type ManagedMcpModule = {\n servers: Record<string, ManagedMcpClient>;\n server(name: string): McpNamedServerHandle;\n client(handle: McpNamedServerHandle | string): Promise<ManagedMcpClient>;\n};\n\ntype CustomMcpModule = {\n server(server: McpModuleServerHandle): McpModuleServerHandle;\n client(handle: McpModuleServerHandle): Promise<McpModuleClient>;\n};\n\nexport function makeMcpModule(options: McpModuleOptions): ManagedMcpModule;\nexport function makeMcpModule(connectMcp: ConnectMcp): CustomMcpModule;\nexport function makeMcpModule(\n connectMcp: ConnectMcp | McpModuleOptions\n): CustomMcpModule | ManagedMcpModule {\n if (typeof connectMcp !== \"function\") {\n const options = normalizeMcpOptions(connectMcp);\n const servers = Object.create(null) as Record<string, ManagedMcpClient>;\n for (const [name, config] of Object.entries(options.servers)) {\n const connections = new WeakMap<object, ManagedMcpConnection>();\n const directScope = {};\n const connection = () => {\n const scope = runResources.getStore();\n scope?.signal.throwIfAborted();\n options.signal?.throwIfAborted();\n const owner = scope ?? directScope;\n let current = connections.get(owner);\n if (current === undefined) {\n current = connectMcpTransport(config, options, scope?.signal);\n connections.set(owner, current);\n scope?.add(current.close);\n }\n return current.ready;\n };\n const invoke = async <Result>(\n operation: (client: Awaited<ReturnType<typeof connection>>) => Promise<Result>\n ): Promise<Result> => {\n try {\n const result = await operation(await connection());\n runResources.getStore()?.signal.throwIfAborted();\n options.signal?.throwIfAborted();\n return result;\n } catch (error) {\n runResources.getStore()?.signal.throwIfAborted();\n options.signal?.throwIfAborted();\n if (error instanceof McpError) {\n hostErrorData.set(error, {\n code: error.code,\n ...(error.data === undefined ? {} : { data: error.data })\n });\n }\n throw error;\n }\n };\n servers[name] = {\n tools: declareHostOperation(\n async () =>\n invoke(async (client) => {\n const tools: McpModuleTool[] = [];\n const cursors = new Set<string>();\n let pages = 0;\n let cursor: string | undefined;\n do {\n const result = await client.listTools(\n cursor === undefined ? undefined : { cursor }\n );\n pages += 1;\n tools.push(...normalizeToolsResult(result));\n cursor = result.nextCursor;\n if (cursor !== undefined) {\n if (typeof cursor !== \"string\" || cursors.has(cursor))\n throw new Error(\"MCP tools pagination did not advance.\");\n cursors.add(cursor);\n if (pages >= options.maxToolPages!)\n throw new Error(\"MCP tools page limit exceeded.\");\n }\n } while (cursor !== undefined);\n return tools;\n }),\n \"re-issue\"\n ),\n tool: declareHostOperation(async (toolName: string, args?: unknown) => {\n const request = createNullRecord({\n name: readNonEmptyTrimmedString(toolName, \"MCP tool name\"),\n ...(args === undefined ? {} : { arguments: readToolArguments(args) })\n });\n return invoke((client) => client.callTool(request));\n }, \"read-side-effect\"),\n toolBatch: declareHostOperation(async (calls: McpModuleToolCall[]) => {\n const normalized = readToolBatchCalls(calls);\n if (normalized.length === 0) return [];\n return invoke((client) => executeToolBatch(client, normalized));\n }, \"read-side-effect\"),\n close: declareHostOperation(async () => {\n const owner = runResources.getStore() ?? directScope;\n const current = connections.get(owner);\n if (current !== undefined) {\n await current.close();\n connections.delete(owner);\n }\n }, \"re-issue\")\n };\n }\n const readName = (value: unknown): string => {\n const name = readNonEmptyString(value, \"MCP server name\");\n if (!Object.hasOwn(servers, name)) throw new Error(`MCP server '${name}' is not configured.`);\n return name;\n };\n return {\n servers,\n server(name: string) {\n return createNullRecord({ name: readName(name) });\n },\n async client(handle: McpNamedServerHandle | string) {\n if (typeof handle === \"string\") return servers[readName(handle)];\n if (!isRecord(handle) || Object.keys(handle).length !== 1 || !Object.hasOwn(handle, \"name\"))\n throw new TypeError(\"MCP client requires a named server handle.\");\n return servers[readName(getOwnProperty(handle, \"name\"))];\n }\n };\n }\n return {\n server(server: McpModuleServerHandle) {\n return normalizeServerHandle(server);\n },\n\n async client(handle: McpModuleServerHandle) {\n const connection = validateConnection(await connectMcp(normalizeServerHandle(handle)));\n\n return {\n async tools() {\n return normalizeToolsResult(await connection.listTools());\n },\n\n async tool(name: string, args?: unknown) {\n return connection.callTool(\n createNullRecord({\n name: readNonEmptyTrimmedString(name, \"MCP tool name\"),\n ...(args === undefined ? {} : { arguments: readToolArguments(args) })\n })\n );\n },\n\n async toolBatch(calls: McpModuleToolCall[]) {\n return executeToolBatch(connection, readToolBatchCalls(calls));\n }\n };\n }\n };\n}\n\nasync function executeToolBatch(\n connection: McpConnection,\n calls: NormalizedToolBatchCall[]\n): Promise<McpModuleToolBatchResult[]> {\n if (calls.length === 0) {\n return [];\n }\n\n if (connection.callToolBatch !== undefined && calls.every((call) => call.ok)) {\n try {\n return normalizeProtocolBatchResults(\n await connection.callToolBatch(calls.map((call) => call.request)),\n calls.length\n );\n } catch (error) {\n const batchError = normalizeToolBatchError(error);\n return calls.map(() =>\n createNullRecord({\n ok: false,\n error: batchError\n })\n );\n }\n }\n\n return executeToolBatchWithConcurrency(connection, calls, DEFAULT_TOOL_BATCH_CONCURRENCY);\n}\n\nasync function executeToolBatchWithConcurrency(\n connection: McpConnection,\n calls: NormalizedToolBatchCall[],\n concurrency: number\n): Promise<McpModuleToolBatchResult[]> {\n const results = new Array<McpModuleToolBatchResult>(calls.length);\n let nextIndex = 0;\n let disconnectError: McpModuleToolBatchError | undefined;\n\n const workerCount = Math.min(concurrency, calls.length);\n const workers = Array.from({ length: workerCount }, async () => {\n while (nextIndex < calls.length) {\n const index = nextIndex;\n nextIndex += 1;\n\n const call = calls[index];\n if (call === undefined) {\n continue;\n }\n\n if (!call.ok) {\n results[index] = createNullRecord({\n ok: false,\n error: call.error\n });\n continue;\n }\n\n if (disconnectError !== undefined) {\n results[index] = createNullRecord({\n ok: false,\n error: disconnectError\n });\n continue;\n }\n\n try {\n results[index] = createNullRecord({\n ok: true,\n value: await connection.callTool(call.request)\n });\n } catch (error) {\n const toolError = normalizeToolBatchError(error);\n results[index] = createNullRecord({\n ok: false,\n error: toolError\n });\n\n if (isMcpDisconnectError(toolError)) {\n disconnectError = toolError;\n }\n }\n }\n });\n\n await Promise.all(workers);\n\n return results;\n}\n\nfunction normalizeProtocolBatchResults(\n value: unknown,\n expectedLength: number\n): McpModuleToolBatchResult[] {\n if (!Array.isArray(value) || value.length !== expectedLength) {\n throw new Error(\n \"MCP callToolBatch() must resolve to a result array matching the input length.\"\n );\n }\n\n return value.map((entry, index) => normalizeProtocolBatchResult(entry, index));\n}\n\nfunction normalizeProtocolBatchResult(value: unknown, index: number): McpModuleToolBatchResult {\n if (!isRecord(value)) {\n throw new Error(`MCP callToolBatch()[${index}] must be a result envelope.`);\n }\n\n const ok = getOwnProperty(value, \"ok\");\n if (typeof ok !== \"boolean\") {\n throw new Error(`MCP callToolBatch()[${index}] must be a result envelope.`);\n }\n\n if (ok === true) {\n return createNullRecord({\n ok: true,\n value: getOwnProperty(value, \"value\")\n });\n }\n\n return createNullRecord({\n ok: false,\n error: normalizeToolBatchError(getOwnProperty(value, \"error\"))\n });\n}\n\nfunction normalizeServerHandle(value: unknown): McpModuleServerHandle {\n if (!isRecord(value)) {\n throw new Error(\"MCP server must be an object.\");\n }\n\n const command = getOwnProperty(value, \"command\");\n const args = getOwnProperty(value, \"args\");\n const env = getOwnProperty(value, \"env\");\n\n return createNullRecord({\n command: readNonEmptyTrimmedString(command, \"MCP server command\"),\n ...(args === undefined ? {} : { args: readStringArray(args, \"MCP server args\") }),\n ...(env === undefined ? {} : { env: readStringRecord(env, \"MCP server env\") })\n });\n}\n\nfunction validateConnection(value: unknown): McpConnection {\n if (\n !isRecord(value) ||\n typeof value.listTools !== \"function\" ||\n typeof value.callTool !== \"function\"\n ) {\n throw new Error(\"connectMcp must resolve to an object with listTools() and callTool().\");\n }\n\n const callToolBatch = getOwnProperty(value, \"callToolBatch\");\n\n return createNullRecord({\n listTools: () => (value.listTools as McpConnection[\"listTools\"])(),\n callTool: (params) => (value.callTool as McpConnection[\"callTool\"])(params),\n ...(typeof callToolBatch === \"function\"\n ? {\n callToolBatch: (params: McpToolRequest[]) =>\n (callToolBatch as NonNullable<McpConnection[\"callToolBatch\"]>)(params)\n }\n : {})\n });\n}\n\nfunction normalizeToolsResult(value: unknown): McpModuleTool[] {\n const tools = isRecord(value) ? getOwnProperty(value, \"tools\") : undefined;\n if (!Array.isArray(tools)) {\n throw new Error(\"MCP listTools() must resolve to an object with a tools array.\");\n }\n\n return tools.map((tool, index) => normalizeTool(tool, index));\n}\n\nfunction normalizeTool(value: unknown, index: number): McpModuleTool {\n if (!isRecord(value)) {\n throw new Error(`MCP tool[${index}] must be an object.`);\n }\n\n const description = getOwnProperty(value, \"description\");\n const inputSchema = getOwnProperty(value, \"inputSchema\");\n\n return createNullRecord({\n name: readNonEmptyString(getOwnProperty(value, \"name\"), `MCP tool[${index}] name`),\n ...(description === undefined\n ? {}\n : { description: readOptionalString(description, `MCP tool[${index}] description`) }),\n ...(inputSchema === undefined ? {} : { schema: inputSchema })\n });\n}\n\nfunction readStringArray(value: unknown, label: string): string[] {\n if (!Array.isArray(value) || value.some((entry) => typeof entry !== \"string\")) {\n throw new Error(`${label} must be an array of strings.`);\n }\n\n return [...value];\n}\n\nfunction readStringRecord(value: unknown, label: string): Record<string, string> {\n if (!isRecord(value)) {\n throw new Error(`${label} must be an object.`);\n }\n\n const entries = Object.entries(value);\n\n if (entries.some(([, entry]) => typeof entry !== \"string\")) {\n throw new Error(`${label} must be a string record.`);\n }\n\n return createNullRecord(Object.fromEntries(entries) as Record<string, string>);\n}\n\nfunction readOptionalString(value: unknown, label: string): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (typeof value !== \"string\") {\n throw new Error(`${label} must be a string.`);\n }\n\n return value;\n}\n\nfunction readNonEmptyString(value: unknown, label: string): string {\n const text = readOptionalString(value, label);\n\n if (text === undefined || text.trim().length === 0) {\n throw new Error(`${label} must be a non-empty string.`);\n }\n\n return text;\n}\n\nfunction readNonEmptyTrimmedString(value: unknown, label: string): string {\n return readNonEmptyString(value, label).trim();\n}\n\nfunction readToolArguments(value: unknown): Record<string, unknown> {\n if (!isPlainObjectRecord(value)) {\n throw new Error(\"MCP tool arguments must be an object.\");\n }\n\n return createNullRecord(Object.fromEntries(Object.entries(value)) as Record<string, unknown>);\n}\n\nfunction readToolBatchCalls(value: unknown): NormalizedToolBatchCall[] {\n if (!Array.isArray(value)) {\n throw new Error(\"MCP toolBatch calls must be an array.\");\n }\n\n return value.map((entry, index) => normalizeToolBatchCall(entry, index));\n}\n\nfunction normalizeToolBatchCall(value: unknown, index: number): NormalizedToolBatchCall {\n try {\n if (!isRecord(value)) {\n throw new Error(`MCP toolBatch call[${index}] must be an object.`);\n }\n\n const args = getOwnProperty(value, \"args\");\n\n return createNullRecord({\n ok: true,\n request: createNullRecord({\n name: readNonEmptyTrimmedString(\n getOwnProperty(value, \"name\"),\n `MCP toolBatch call[${index}] name`\n ),\n ...(args === undefined ? {} : { arguments: readToolArguments(args) })\n })\n });\n } catch (error) {\n return createNullRecord({\n ok: false,\n error: normalizeToolBatchError(error)\n });\n }\n}\n\nfunction normalizeToolBatchError(error: unknown): McpModuleToolBatchError {\n if (error instanceof Error) {\n return createNullRecord({\n name: error.name.length === 0 ? \"Error\" : error.name,\n message: error.message\n });\n }\n\n if (isRecord(error)) {\n const nameValue = getOwnProperty(error, \"name\");\n const messageValue = getOwnProperty(error, \"message\");\n const name = typeof nameValue === \"string\" && nameValue.trim().length > 0 ? nameValue : \"Error\";\n const message = typeof messageValue === \"string\" ? messageValue : String(error);\n\n return createNullRecord({\n name,\n message\n });\n }\n\n return createNullRecord({\n name: \"Error\",\n message: error === undefined ? \"\" : String(error)\n });\n}\n\nfunction isMcpDisconnectError(error: McpModuleToolBatchError): boolean {\n const message = error.message.toLowerCase();\n\n return (\n message.includes(\"disconnected\") ||\n message.includes(\"connection closed\") ||\n message.includes(\"transport closed\") ||\n message.includes(\"disposed\") ||\n message.includes(\"eof\")\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction getOwnProperty<Name extends PropertyKey>(value: object, name: Name): unknown {\n return hasOwnProperty(value, name) ? value[name] : undefined;\n}\n\nfunction hasOwnProperty<Name extends PropertyKey>(\n value: object,\n name: Name\n): value is Record<Name, unknown> {\n return Object.prototype.hasOwnProperty.call(value, name);\n}\n\nfunction createNullRecord<T extends object>(value: T): T {\n return Object.assign(Object.create(null) as T, value);\n}\n\nfunction isPlainObjectRecord(value: unknown): value is Record<string, unknown> {\n if (!isRecord(value) || Array.isArray(value)) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }