@anvia/core 1.0.0-rc.6 → 1.0.0-rc.8
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 +30 -13
- package/dist/agent/index.d.ts +13 -13
- package/dist/agent/index.js +15 -15
- package/dist/agent/interactions/index.d.ts +1 -1
- package/dist/agent/interactions/index.js +2 -2
- package/dist/{agent-BK3jud9q.d.ts → agent-XPQBM4rX.d.ts} +10 -10
- package/dist/{chunk-UBE4WH6G.js → chunk-3RWESPUG.js} +122 -3
- package/dist/chunk-3RWESPUG.js.map +1 -0
- package/dist/{chunk-BAEFBTOW.js → chunk-3SKZ2BKP.js} +7 -5
- package/dist/chunk-3SKZ2BKP.js.map +1 -0
- package/dist/{chunk-SROQA7I7.js → chunk-3XQGVDU5.js} +2 -2
- package/dist/chunk-3XQGVDU5.js.map +1 -0
- package/dist/{chunk-QXQQ2DBM.js → chunk-5C6B6ZRH.js} +2 -2
- package/dist/{chunk-7O45T5F2.js → chunk-6BBOCFHV.js} +2 -2
- package/dist/{chunk-7YAH2F3J.js → chunk-76JLMBVT.js} +24 -12
- package/dist/chunk-76JLMBVT.js.map +1 -0
- package/dist/chunk-7JLAIN6E.js +15 -0
- package/dist/chunk-7JLAIN6E.js.map +1 -0
- package/dist/chunk-7PHMK7W4.js +1516 -0
- package/dist/chunk-7PHMK7W4.js.map +1 -0
- package/dist/{chunk-MGNTXGTX.js → chunk-D4PACGPA.js} +1 -1
- package/dist/{chunk-7OCVDT2X.js → chunk-EFLT7XZD.js} +9 -3
- package/dist/chunk-EFLT7XZD.js.map +1 -0
- package/dist/{chunk-RZDI7B6Z.js → chunk-EMZKPRE6.js} +9 -8
- package/dist/chunk-EMZKPRE6.js.map +1 -0
- package/dist/{chunk-HVHTVGPP.js → chunk-I3Q7XSBB.js} +9 -3
- package/dist/chunk-I3Q7XSBB.js.map +1 -0
- package/dist/{chunk-BOCJCECN.js → chunk-LTXABCOO.js} +4 -4
- package/dist/{chunk-BEU6FCTN.js → chunk-OJBFDBLG.js} +2 -2
- package/dist/{chunk-G5OACQEI.js → chunk-QGX73TSQ.js} +2 -2
- package/dist/{chunk-JXZTTNCR.js → chunk-SJMSS5SI.js} +3 -3
- package/dist/{chunk-JXZTTNCR.js.map → chunk-SJMSS5SI.js.map} +1 -1
- package/dist/{chunk-YXLDR2O4.js → chunk-T2C3CGDQ.js} +9 -3
- package/dist/chunk-T2C3CGDQ.js.map +1 -0
- package/dist/{chunk-VGJRXUPT.js → chunk-X4LK4ODN.js} +2 -2
- package/dist/chunk-X4LK4ODN.js.map +1 -0
- package/dist/{chunk-QXSVVYQK.js → chunk-YA2655FX.js} +169 -432
- package/dist/chunk-YA2655FX.js.map +1 -0
- package/dist/{chunk-H7BI3BSP.js → chunk-ZA564323.js} +2 -2
- package/dist/{client-BdQ_QZsY.d.ts → client-DTPl0hZv.d.ts} +2 -2
- package/dist/completion/index.d.ts +3 -3
- package/dist/completion/index.js +10 -5
- package/dist/{dynamic-tools--Aw37H9d.d.ts → dynamic-tools-aIZlg5x1.d.ts} +3 -3
- package/dist/embeddings/index.js +2 -2
- package/dist/evals/index.d.ts +6 -6
- package/dist/evals/index.js +51 -19
- package/dist/evals/index.js.map +1 -1
- package/dist/extractor/index.d.ts +1 -1
- package/dist/extractor/index.js +7 -6
- package/dist/guardrails/index.d.ts +4 -4
- package/dist/image-generation/index.d.ts +1 -1
- package/dist/image-generation/index.js +4 -2
- package/dist/index.d.ts +14 -14
- package/dist/index.js +23 -19
- package/dist/internal/agent.d.ts +11 -11
- package/dist/internal/agent.js +15 -15
- package/dist/mcp/index.d.ts +4 -4
- package/dist/mcp/index.js +10 -8
- package/dist/memory/index.d.ts +3 -3
- package/dist/memory/index.js +6 -5
- package/dist/{middleware-QZsbz7Hf.d.ts → middleware-kcF8AusP.d.ts} +8 -5
- package/dist/observability/index.d.ts +6 -6
- package/dist/observability/index.js +7 -6
- package/dist/pipeline/index.d.ts +11 -11
- package/dist/pipeline/index.js +8 -7
- package/dist/pipeline/index.js.map +1 -1
- package/dist/{message-schema-_sP_RKhh.d.ts → provider-output-error-BEwDgVv3.d.ts} +34 -3
- package/dist/skills/index.d.ts +4 -4
- package/dist/skills/index.js +7 -8
- package/dist/speech-generation/index.d.ts +1 -1
- package/dist/speech-generation/index.js +4 -2
- package/dist/{text-DTg1a8Mg.d.ts → text-ZLECpQE7.d.ts} +1 -1
- package/dist/{think-tool-C0n_dF2K.d.ts → think-tool-BwCsJ365.d.ts} +1 -1
- package/dist/tool/index.d.ts +6 -6
- package/dist/tool/index.js +6 -6
- package/dist/{tool-xHM_GmzT.d.ts → tool-BpqpoRSE.d.ts} +1 -1
- package/dist/transcription/index.d.ts +1 -1
- package/dist/transcription/index.js +4 -2
- package/dist/{types-D0Y2ZWS3.d.ts → types-CXNE592e.d.ts} +1 -1
- package/dist/{types-Dyp7arZQ.d.ts → types-DC1U1XwW.d.ts} +1 -1
- package/dist/{types-B1KL4w14.d.ts → types-DKOXVTcq.d.ts} +1 -1
- package/dist/{types-DboZvHR_.d.ts → types-DgvozfPc.d.ts} +3 -2
- package/dist/{types-D7A6CIGt.d.ts → types-DhkodEft.d.ts} +1 -1
- package/dist/{types-2DBdXArn.d.ts → types-Sue2hb_L.d.ts} +5 -5
- package/dist/vector-store/index.d.ts +4 -4
- package/dist/vector-store/index.js +5 -5
- package/package.json +1 -1
- package/dist/chunk-7OCVDT2X.js.map +0 -1
- package/dist/chunk-7YAH2F3J.js.map +0 -1
- package/dist/chunk-BAEFBTOW.js.map +0 -1
- package/dist/chunk-CQNNSZPG.js +0 -9
- package/dist/chunk-CQNNSZPG.js.map +0 -1
- package/dist/chunk-HT4P3SSG.js +0 -573
- package/dist/chunk-HT4P3SSG.js.map +0 -1
- package/dist/chunk-HVHTVGPP.js.map +0 -1
- package/dist/chunk-QXSVVYQK.js.map +0 -1
- package/dist/chunk-RZDI7B6Z.js.map +0 -1
- package/dist/chunk-SROQA7I7.js.map +0 -1
- package/dist/chunk-UBE4WH6G.js.map +0 -1
- package/dist/chunk-VGJRXUPT.js.map +0 -1
- package/dist/chunk-YXLDR2O4.js.map +0 -1
- /package/dist/{chunk-QXQQ2DBM.js.map → chunk-5C6B6ZRH.js.map} +0 -0
- /package/dist/{chunk-7O45T5F2.js.map → chunk-6BBOCFHV.js.map} +0 -0
- /package/dist/{chunk-MGNTXGTX.js.map → chunk-D4PACGPA.js.map} +0 -0
- /package/dist/{chunk-BOCJCECN.js.map → chunk-LTXABCOO.js.map} +0 -0
- /package/dist/{chunk-BEU6FCTN.js.map → chunk-OJBFDBLG.js.map} +0 -0
- /package/dist/{chunk-G5OACQEI.js.map → chunk-QGX73TSQ.js.map} +0 -0
- /package/dist/{chunk-H7BI3BSP.js.map → chunk-ZA564323.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mcp/client.ts","../src/mcp/abort.ts","../src/mcp/result.ts","../src/mcp/tool.ts","../src/mcp/url-safety.ts","../src/mcp/client-group.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport type { JsonObject } from \"../completion/index\";\nimport { abortError, throwIfAborted } from \"../internal/abort\";\nimport { linkAbortSignal } from \"./abort\";\nimport { createMcpTool } from \"./tool\";\nimport type { McpClientOptions, McpConnectOptions, McpServer, McpServerInfo } from \"./types\";\nimport { createSafeMcpFetch, parseAndValidateMcpUrl, parseMcpHttpUrl } from \"./url-safety\";\n\nlet coreClientVersion: string | undefined;\n\ntype ClientResource = {\n readonly client: Client;\n closePromise?: Promise<void> | undefined;\n};\n\ntype McpFetch = NonNullable<\n NonNullable<ConstructorParameters<typeof StreamableHTTPClientTransport>[1]>[\"fetch\"]\n>;\n\nconst transportOwnedHttpHeaders = new Set([\n \"accept\",\n \"content-type\",\n \"last-event-id\",\n \"mcp-protocol-version\",\n \"mcp-session-id\",\n]);\n\nexport class McpClient {\n readonly name: string;\n\n readonly #options: McpClientOptions;\n #closed = false;\n #connectAbortController?: AbortController | undefined;\n #connecting?: Promise<McpServer> | undefined;\n #resource?: ClientResource | undefined;\n #server?: McpServer | undefined;\n\n constructor(options: McpClientOptions) {\n if (options.name.trim() === \"\") {\n throw new TypeError(\"MCP client name must not be empty\");\n }\n this.name = options.name;\n this.#options = options;\n }\n\n connect(options: McpConnectOptions = {}): Promise<McpServer> {\n if (this.#closed) {\n return Promise.reject(new Error(`MCP client \"${this.name}\" is closed`));\n }\n if (this.#server !== undefined) {\n return Promise.resolve(this.#server);\n }\n if (this.#connecting !== undefined) {\n return this.#connecting;\n }\n\n if (options.abortSignal?.aborted === true) {\n return Promise.reject(abortError(options.abortSignal.reason));\n }\n\n const abortController = new AbortController();\n const unlinkAbortSignal = linkAbortSignal(options.abortSignal, abortController);\n this.#connectAbortController = abortController;\n const connecting = this.#initialize(abortController.signal);\n this.#connecting = connecting;\n const clearConnecting = () => {\n unlinkAbortSignal();\n if (this.#connecting === connecting) {\n this.#connecting = undefined;\n }\n if (this.#connectAbortController === abortController) {\n this.#connectAbortController = undefined;\n }\n };\n void connecting.then(clearConnecting, clearConnecting);\n return connecting;\n }\n\n async close(): Promise<void> {\n this.#closed = true;\n this.#connectAbortController?.abort(\n abortError(new Error(`MCP client \"${this.name}\" was closed during connection`)),\n );\n\n const resource = this.#resource;\n if (resource !== undefined) {\n await closeResource(resource);\n }\n }\n\n async #initialize(abortSignal: AbortSignal): Promise<McpServer> {\n const client = createSdkClient();\n const resource: ClientResource = { client };\n this.#resource = resource;\n\n try {\n throwIfAborted(abortSignal);\n const transport = await createTransport(this.#options, { abortSignal });\n throwIfAborted(abortSignal);\n await client.connect(transport, requestOptions(abortSignal));\n throwIfAborted(abortSignal);\n const definitions = await listAllTools(client, abortSignal);\n throwIfAborted(abortSignal);\n const tools = definitions.map((definition) =>\n createMcpTool({\n definition,\n client,\n serverName: this.name,\n prefix: this.#options.tools?.prefix,\n }),\n );\n assertUniqueToolNames(tools, this.name);\n\n if (this.#closed) {\n throw new Error(`MCP client \"${this.name}\" was closed during connection`);\n }\n\n const serverInfo = copyServerInfo(client.getServerVersion());\n const capabilities = copyJsonObject(client.getServerCapabilities());\n const instructions = client.getInstructions();\n let registration: McpServer = {\n name: this.name,\n tools,\n };\n if (serverInfo !== undefined) registration = { ...registration, serverInfo };\n if (capabilities !== undefined) registration = { ...registration, capabilities };\n if (instructions !== undefined) registration = { ...registration, instructions };\n const server = freezeServer(registration);\n this.#server = server;\n return server;\n } catch (error) {\n try {\n await closeResource(resource);\n } catch {\n // Preserve the actionable connection or discovery failure.\n }\n if (this.#resource === resource) {\n this.#resource = undefined;\n }\n this.#server = undefined;\n throw error;\n }\n }\n}\n\nasync function createTransport(\n options: McpClientOptions,\n connectOptions: McpConnectOptions,\n): Promise<Transport> {\n const transport = options.transport;\n if (transport.type === \"custom\") {\n return transport.create({ abortSignal: connectOptions.abortSignal });\n }\n if (transport.type === \"stdio\") {\n let parameters: ConstructorParameters<typeof StdioClientTransport>[0] = {\n command: transport.command,\n };\n if (transport.args !== undefined) parameters = { ...parameters, args: transport.args };\n if (transport.env !== undefined) parameters = { ...parameters, env: transport.env };\n if (transport.cwd !== undefined) parameters = { ...parameters, cwd: transport.cwd };\n if (transport.stderr !== undefined) parameters = { ...parameters, stderr: transport.stderr };\n if (transport.maxBufferSize !== undefined) {\n parameters = { ...parameters, maxBufferSize: transport.maxBufferSize };\n }\n return new StdioClientTransport(parameters);\n }\n\n const ssrfProtection = transport.ssrfProtection ?? \"strict\";\n if (ssrfProtection !== \"strict\" && ssrfProtection !== \"disabled\") {\n throw new TypeError(\"MCP Streamable HTTP ssrfProtection must be strict or disabled\");\n }\n let parameters: ConstructorParameters<typeof StreamableHTTPClientTransport>[1] = {};\n let url: URL;\n let transportFetch: McpFetch | undefined;\n if (ssrfProtection === \"strict\") {\n transportFetch = createSafeMcpFetch();\n url = parseAndValidateMcpUrl(transport.url);\n } else {\n url = parseMcpHttpUrl(transport.url);\n }\n if (transport.headers !== undefined) {\n const headers = copyMcpHeaders(transport.headers, transport.authProvider !== undefined);\n const fetchRequest = transportFetch ?? defaultMcpFetch;\n transportFetch = createMcpEndpointFetch(url, headers, fetchRequest);\n }\n if (transportFetch !== undefined) parameters = { ...parameters, fetch: transportFetch };\n if (transport.authProvider !== undefined) {\n parameters = { ...parameters, authProvider: transport.authProvider };\n }\n if (transport.reconnectionOptions !== undefined) {\n parameters = { ...parameters, reconnectionOptions: transport.reconnectionOptions };\n }\n if (transport.sessionId !== undefined) {\n parameters = { ...parameters, sessionId: transport.sessionId };\n }\n return asSdkTransport(new StreamableHTTPClientTransport(url, parameters));\n}\n\nfunction copyMcpHeaders(\n value: Readonly<Record<string, string>>,\n hasAuthProvider: boolean,\n): Headers {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(\"MCP Streamable HTTP headers must be a plain object\");\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new TypeError(\"MCP Streamable HTTP headers must be a plain object\");\n }\n const headers = new Headers();\n for (const [name, headerValue] of Object.entries(value)) {\n if (typeof headerValue !== \"string\") {\n throw new TypeError(`MCP Streamable HTTP header ${name} must be a string`);\n }\n const normalizedName = name.toLowerCase();\n if (transportOwnedHttpHeaders.has(normalizedName)) {\n throw new TypeError(`MCP Streamable HTTP header ${name} is owned by the transport`);\n }\n if (hasAuthProvider && normalizedName === \"authorization\") {\n throw new TypeError(\n \"MCP Streamable HTTP authorization header cannot be combined with authProvider\",\n );\n }\n headers.set(name, headerValue);\n }\n return headers;\n}\n\nfunction createMcpEndpointFetch(\n endpoint: URL,\n configuredHeaders: Headers,\n fetchRequest: McpFetch,\n): McpFetch {\n return (input, init) => {\n const requestUrl = input instanceof Request ? new URL(input.url) : new URL(input);\n if (requestUrl.href !== endpoint.href) return fetchRequest(input, init);\n\n const requestHeaders = new Headers(\n init?.headers ?? (input instanceof Request ? input.headers : undefined),\n );\n configuredHeaders.forEach((value, name) => {\n requestHeaders.set(name, value);\n });\n return fetchRequest(input, { ...init, headers: requestHeaders, redirect: \"error\" });\n };\n}\n\nconst defaultMcpFetch: McpFetch = (input, init) => globalThis.fetch(input, init);\n\nasync function listAllTools(\n client: Client,\n abortSignal?: AbortSignal | undefined,\n): Promise<Awaited<ReturnType<Client[\"listTools\"]>>[\"tools\"]> {\n const tools: Awaited<ReturnType<Client[\"listTools\"]>>[\"tools\"] = [];\n const seenCursors = new Set<string>();\n let cursor: string | undefined;\n\n do {\n const page = await client.listTools(\n cursor === undefined ? undefined : { cursor },\n requestOptions(abortSignal),\n );\n tools.push(...page.tools);\n cursor = page.nextCursor;\n if (cursor !== undefined && seenCursors.has(cursor)) {\n throw new Error(`MCP server returned a repeated tools cursor: ${cursor}`);\n }\n if (cursor !== undefined) {\n seenCursors.add(cursor);\n }\n } while (cursor !== undefined);\n\n return tools;\n}\n\nfunction assertUniqueToolNames(tools: readonly { name: string }[], serverName: string): void {\n const names = new Set<string>();\n for (const tool of tools) {\n if (names.has(tool.name)) {\n throw new Error(`Duplicate MCP tool name \"${tool.name}\" from server \"${serverName}\"`);\n }\n names.add(tool.name);\n }\n}\n\nfunction createSdkClient(): Client {\n return new Client({\n name: \"@anvia/core\",\n version: getCoreClientVersion(),\n });\n}\n\nfunction getCoreClientVersion(): string {\n if (coreClientVersion === undefined) {\n coreClientVersion = readCorePackageVersion();\n }\n return coreClientVersion;\n}\n\nfunction requestOptions(signal?: AbortSignal | undefined): { signal?: AbortSignal } {\n return signal === undefined ? {} : { signal };\n}\n\nfunction asSdkTransport(transport: unknown): Transport {\n return transport as Transport;\n}\n\nfunction closeResource(resource: ClientResource): Promise<void> {\n resource.closePromise ??= resource.client.close();\n return resource.closePromise;\n}\n\nfunction readCorePackageVersion(): string {\n try {\n const packageJson = JSON.parse(\n readFileSync(new URL(\"../../package.json\", import.meta.url), \"utf8\"),\n ) as { version?: unknown };\n return typeof packageJson.version === \"string\" ? packageJson.version : \"0.0.0\";\n } catch {\n return \"0.0.0\";\n }\n}\n\nfunction copyServerInfo(value: ReturnType<Client[\"getServerVersion\"]>): McpServerInfo | undefined {\n if (value === undefined) {\n return undefined;\n }\n return deepFreeze(structuredClone(value)) as McpServerInfo;\n}\n\nfunction copyJsonObject(value: unknown): JsonObject | undefined {\n if (value === undefined) {\n return undefined;\n }\n return deepFreeze(structuredClone(value)) as JsonObject;\n}\n\nfunction freezeServer(server: McpServer): McpServer {\n Object.freeze(server.tools);\n return Object.freeze(server);\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) {\n return value;\n }\n for (const child of Object.values(value)) {\n deepFreeze(child);\n }\n return Object.freeze(value);\n}\n","export function linkAbortSignal(\n source: AbortSignal | undefined,\n target: AbortController,\n): () => void {\n if (source === undefined) {\n return () => undefined;\n }\n if (source.aborted) {\n target.abort(source.reason);\n return () => undefined;\n }\n\n const onAbort = () => target.abort(source.reason);\n source.addEventListener(\"abort\", onAbort, { once: true });\n return () => source.removeEventListener(\"abort\", onAbort);\n}\n","import type { ToolResultContentPart } from \"../completion/index\";\nimport { isRecord } from \"../internal/record\";\n\ntype McpResultContent =\n | { type: \"text\"; text: string }\n | { type: \"image\"; data: string; mimeType: string }\n | { type: \"audio\"; data: string; mimeType: string }\n | {\n type: \"resource\";\n resource:\n | { uri: string; text: string; mimeType?: string | undefined }\n | { uri: string; blob: string; mimeType?: string | undefined };\n }\n | {\n type: \"resource_link\";\n uri: string;\n name: string;\n mimeType?: string | undefined;\n };\n\nexport type McpToolCallResult =\n | {\n content: McpResultContent[];\n structuredContent?: Record<string, unknown> | undefined;\n isError?: boolean | undefined;\n }\n | {\n toolResult: unknown;\n };\n\nexport function createCallToolParams(\n name: string,\n args: unknown,\n): { name: string; arguments?: Record<string, unknown> } {\n if (args === null || args === undefined) {\n return { name };\n }\n\n if (!isRecord(args)) {\n throw new Error(\"MCP tool arguments must be a JSON object\");\n }\n\n return { name, arguments: args };\n}\n\nexport function mapMcpToolResult(result: McpToolCallResult): readonly ToolResultContentPart[] {\n if (\"toolResult\" in result) {\n return [{ type: \"text\", text: serializeMcpValue(result.toolResult) }];\n }\n\n if (result.isError === true) {\n throw new Error(mcpErrorMessage(result.content));\n }\n\n const content = result.content.map(mapMcpContent);\n if (content.length === 0 && result.structuredContent !== undefined) {\n content.push({ type: \"text\", text: serializeMcpValue(result.structuredContent) });\n }\n return content;\n}\n\nfunction mcpErrorMessage(content: McpResultContent[]): string {\n const text = content\n .map((item) => (item.type === \"text\" ? item.text : undefined))\n .filter((item): item is string => item !== undefined)\n .join(\"\\n\");\n\n return text === \"\" ? \"MCP tool returned an error\" : text;\n}\n\nfunction mapMcpContent(content: McpResultContent): ToolResultContentPart {\n if (content.type === \"text\") {\n return { type: \"text\", text: content.text };\n }\n\n if (content.type === \"image\") {\n return {\n type: \"file\",\n data: { type: \"data\", data: content.data },\n mediaType: content.mimeType,\n };\n }\n\n if (content.type === \"resource\") {\n return { type: \"text\", text: serializeResource(content.resource) };\n }\n\n if (content.type === \"audio\") {\n throw new Error(`Unsupported MCP tool result content type: audio (${content.mimeType})`);\n }\n\n throw new Error(`Unsupported MCP tool result content type: resource_link (${content.uri})`);\n}\n\nfunction serializeResource(\n resource:\n | { uri: string; text: string; mimeType?: string | undefined }\n | { uri: string; blob: string; mimeType?: string | undefined },\n): string {\n const mediaType =\n resource.mimeType ?? (\"text\" in resource ? \"text/plain\" : \"application/octet-stream\");\n const encoding = \"text\" in resource ? \"text\" : \"base64\";\n const data = \"text\" in resource ? resource.text : resource.blob;\n return `MCP resource (${resource.uri}; ${mediaType}; ${encoding})\\n${data}`;\n}\n\nfunction serializeMcpValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n let serialized: string | undefined;\n try {\n serialized = JSON.stringify(value);\n } catch (error) {\n throw new TypeError(\"MCP tool results must be JSON-serializable.\", { cause: error });\n }\n if (serialized === undefined) {\n throw new TypeError(\"MCP tool results must be JSON-serializable.\");\n }\n return serialized;\n}\n","import type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport type { JsonObject, ToolDefinition } from \"../completion/index\";\nimport { ToolOutput } from \"../tool\";\nimport { createCallToolParams, mapMcpToolResult } from \"./result\";\nimport type { McpTool } from \"./types\";\n\ntype SdkMcpToolDefinition = Awaited<ReturnType<Client[\"listTools\"]>>[\"tools\"][number];\n\nexport function createMcpTool(options: {\n definition: SdkMcpToolDefinition;\n client: Client;\n serverName: string;\n prefix?: string | undefined;\n}): McpTool {\n const { definition, client, serverName, prefix = \"\" } = options;\n const exposedName = `${prefix}${definition.name}`;\n const provenance = Object.freeze({\n serverName,\n remoteName: definition.name,\n });\n const toolDefinition = Object.freeze<ToolDefinition>({\n name: exposedName,\n description: definition.description ?? \"\",\n parameters: deepFreeze(structuredClone(definition.inputSchema)) as unknown as JsonObject,\n });\n const tool: McpTool = {\n name: exposedName,\n mcp: provenance,\n definition(): ToolDefinition {\n return toolDefinition;\n },\n async call(args, context) {\n const result = await client.callTool(\n createCallToolParams(definition.name, args),\n undefined,\n context?.abortSignal === undefined ? {} : { signal: context.abortSignal },\n );\n return ToolOutput.content(mapMcpToolResult(result));\n },\n };\n return Object.freeze(tool);\n}\n\nexport function isMcpTool(tool: unknown): tool is McpTool {\n if (typeof tool !== \"object\" || tool === null || !(\"mcp\" in tool)) {\n return false;\n }\n const mcp = tool.mcp;\n return (\n typeof mcp === \"object\" &&\n mcp !== null &&\n \"serverName\" in mcp &&\n typeof mcp.serverName === \"string\" &&\n mcp.serverName.length > 0 &&\n \"remoteName\" in mcp &&\n typeof mcp.remoteName === \"string\" &&\n mcp.remoteName.length > 0\n );\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) {\n return value;\n }\n for (const child of Object.values(value)) {\n deepFreeze(child);\n }\n return Object.freeze(value);\n}\n","import type { LookupAddress } from \"node:dns\";\nimport { lookup } from \"node:dns/promises\";\nimport type { LookupFunction } from \"node:net\";\nimport { BlockList, isIP } from \"node:net\";\nimport type { StreamableHTTPClientTransportOptions } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport { Agent, Pool, fetch as undiciFetch } from \"undici\";\n\ntype FetchLike = NonNullable<StreamableHTTPClientTransportOptions[\"fetch\"]>;\n\nexport type McpAddressResolver = (hostname: string) => Promise<LookupAddress[]>;\n\nconst blockedIpv4Addresses = new BlockList();\nconst blockedIpv6Addresses = new BlockList();\n\nfor (const [network, prefix] of [\n [\"0.0.0.0\", 8],\n [\"10.0.0.0\", 8],\n [\"100.64.0.0\", 10],\n [\"127.0.0.0\", 8],\n [\"169.254.0.0\", 16],\n [\"172.16.0.0\", 12],\n [\"192.0.0.0\", 24],\n [\"192.0.2.0\", 24],\n [\"192.88.99.0\", 24],\n [\"192.168.0.0\", 16],\n [\"198.18.0.0\", 15],\n [\"198.51.100.0\", 24],\n [\"203.0.113.0\", 24],\n [\"224.0.0.0\", 4],\n [\"240.0.0.0\", 4],\n] as const) {\n blockedIpv4Addresses.addSubnet(network, prefix, \"ipv4\");\n}\n\nfor (const [network, prefix] of [\n [\"::\", 96],\n [\"::ffff:0:0\", 96],\n [\"64:ff9b::\", 96],\n [\"64:ff9b:1::\", 48],\n [\"100::\", 64],\n [\"2001::\", 32],\n [\"2001:2::\", 48],\n [\"2001:10::\", 28],\n [\"2001:20::\", 28],\n [\"2001:db8::\", 32],\n [\"2002::\", 16],\n [\"fc00::\", 7],\n [\"fe80::\", 10],\n [\"fec0::\", 10],\n [\"ff00::\", 8],\n] as const) {\n blockedIpv6Addresses.addSubnet(network, prefix, \"ipv6\");\n}\n\nconst defaultAddressResolver: McpAddressResolver = (hostname) =>\n lookup(hostname, { all: true, verbatim: true });\n\nexport function parseAndValidateMcpUrl(url: string | URL): URL {\n const parsed = parseMcpHttpUrl(url);\n validateMcpHostname(parsed.hostname);\n return parsed;\n}\n\nexport function parseMcpHttpUrl(url: string | URL): URL {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new Error(`Invalid MCP URL: ${url}`);\n }\n\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(`MCP URL blocked: only HTTP(S) URLs are allowed (${parsed.protocol})`);\n }\n\n return parsed;\n}\n\nexport async function resolveAndValidateMcpHostname(\n hostname: string,\n resolveAddresses: McpAddressResolver = defaultAddressResolver,\n): Promise<LookupAddress[]> {\n const normalizedHostname = normalizeHostname(hostname);\n validateMcpHostname(normalizedHostname);\n\n const family = isIP(normalizedHostname);\n if (family !== 0) {\n return [{ address: normalizedHostname, family }];\n }\n\n let addresses: LookupAddress[];\n try {\n addresses = await resolveAddresses(normalizedHostname);\n } catch (cause) {\n throw new Error(`Unable to resolve MCP URL hostname (${normalizedHostname})`, { cause });\n }\n\n if (addresses.length === 0) {\n throw new Error(`Unable to resolve MCP URL hostname (${normalizedHostname})`);\n }\n\n for (const { address } of addresses) {\n validateMcpHostname(address);\n }\n\n return addresses;\n}\n\nexport function createSafeMcpLookup(\n resolveAddresses: McpAddressResolver = defaultAddressResolver,\n): LookupFunction {\n return (hostname, options, callback) => {\n void resolveAndValidateMcpHostname(hostname, resolveAddresses).then(\n (addresses) => {\n const requestedFamily = normalizeRequestedFamily(options.family);\n const matchingAddresses =\n requestedFamily === 0\n ? addresses\n : addresses.filter(({ family }) => family === requestedFamily);\n\n if (matchingAddresses.length === 0) {\n const error = new Error(`No matching address family for MCP URL (${hostname})`);\n Object.assign(error, { code: \"EAI_ADDRFAMILY\" });\n callback(error, []);\n return;\n }\n\n if (options.all) {\n callback(null, matchingAddresses);\n return;\n }\n\n const address = matchingAddresses[0];\n if (!address) {\n callback(new Error(`Unable to resolve MCP URL hostname (${hostname})`), []);\n return;\n }\n callback(null, address.address, address.family);\n },\n (cause: unknown) => {\n callback(asError(cause), []);\n },\n );\n };\n}\n\nexport function createSafeMcpFetch(): FetchLike {\n return (url, init) => {\n parseAndValidateMcpUrl(url);\n return undiciFetch(url as Parameters<typeof undiciFetch>[0], {\n ...(init as Parameters<typeof undiciFetch>[1]),\n dispatcher: safeMcpDispatcher,\n }) as unknown as ReturnType<FetchLike>;\n };\n}\n\nfunction validateMcpHostname(hostname: string): void {\n const normalizedHostname = normalizeHostname(hostname);\n\n if (normalizedHostname === \"localhost\" || normalizedHostname.endsWith(\".localhost\")) {\n throw new Error(`MCP URL blocked: localhost not allowed (${normalizedHostname})`);\n }\n\n const family = isIP(normalizedHostname);\n if (family === 0) {\n return;\n }\n\n if (\n (family === 4 && normalizedHostname.startsWith(\"127.\")) ||\n (family === 6 && normalizedHostname === \"::1\")\n ) {\n throw new Error(`MCP URL blocked: localhost not allowed (${normalizedHostname})`);\n }\n\n if (normalizedHostname === \"169.254.169.254\" || normalizedHostname === \"fd00:ec2::254\") {\n throw new Error(`MCP URL blocked: cloud metadata endpoint not allowed (${normalizedHostname})`);\n }\n\n if (\n (family === 4 && blockedIpv4Addresses.check(normalizedHostname, \"ipv4\")) ||\n (family === 6 && blockedIpv6Addresses.check(normalizedHostname, \"ipv6\"))\n ) {\n const range = family === 4 ? \"IP\" : \"IPv6\";\n throw new Error(`MCP URL blocked: private ${range} range not allowed (${normalizedHostname})`);\n }\n}\n\nfunction normalizeHostname(hostname: string): string {\n const withoutBrackets =\n hostname.startsWith(\"[\") && hostname.endsWith(\"]\") ? hostname.slice(1, -1) : hostname;\n return withoutBrackets.toLowerCase().replace(/\\.+$/, \"\");\n}\n\nfunction normalizeRequestedFamily(family: number | string | undefined): 0 | 4 | 6 {\n if (family === 4 || family === \"IPv4\") {\n return 4;\n }\n if (family === 6 || family === \"IPv6\") {\n return 6;\n }\n return 0;\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nconst safeMcpDispatcher = new Agent({\n autoSelectFamily: true,\n connect: {\n lookup: createSafeMcpLookup(),\n },\n factory(origin, options) {\n parseAndValidateMcpUrl(origin);\n return new Pool(origin, options as Pool.Options);\n },\n});\n","import { linkAbortSignal } from \"./abort\";\nimport type { McpClient } from \"./client\";\nimport type { McpClientGroupConnectOptions, McpServer } from \"./types\";\n\nexport class McpClientGroup {\n readonly clients: readonly McpClient[];\n readonly servers: readonly McpServer[];\n\n #closePromise?: Promise<void> | undefined;\n\n private constructor(clients: readonly McpClient[], servers: readonly McpServer[]) {\n this.clients = Object.freeze([...clients]);\n this.servers = Object.freeze([...servers]);\n }\n\n static async connect(options: McpClientGroupConnectOptions): Promise<McpClientGroup> {\n const clients = [...options.clients];\n assertUniqueClientNames(clients);\n\n const abortController = new AbortController();\n const unlinkAbortSignal = linkAbortSignal(options.abortSignal, abortController);\n let firstConnectionFailure: unknown;\n let connectionFailed = false;\n const connections = clients.map((client) =>\n client.connect({ abortSignal: abortController.signal }).catch((error: unknown) => {\n if (!connectionFailed) {\n connectionFailed = true;\n firstConnectionFailure = error;\n abortController.abort(error);\n }\n throw error;\n }),\n );\n const settled = await Promise.allSettled(connections).finally(unlinkAbortSignal);\n const firstFailure = settled.find(\n (result): result is PromiseRejectedResult => result.status === \"rejected\",\n );\n if (firstFailure !== undefined) {\n await rollbackSuccessfulClients(clients, settled);\n throw connectionFailed ? firstConnectionFailure : firstFailure.reason;\n }\n\n const servers = settled.map((result) => (result as PromiseFulfilledResult<McpServer>).value);\n try {\n assertUniqueServerAndToolNames(servers);\n } catch (error) {\n try {\n await closeAll(clients);\n } catch {\n // Preserve the registration validation failure that caused rollback.\n }\n throw error;\n }\n\n return new McpClientGroup(clients, servers);\n }\n\n close(): Promise<void> {\n this.#closePromise ??= closeAll(this.clients);\n return this.#closePromise;\n }\n}\n\nfunction assertUniqueClientNames(clients: readonly McpClient[]): void {\n const names = new Set<string>();\n for (const client of clients) {\n if (names.has(client.name)) {\n throw new Error(`Duplicate MCP client name \"${client.name}\"`);\n }\n names.add(client.name);\n }\n}\n\nfunction assertUniqueServerAndToolNames(servers: readonly McpServer[]): void {\n const serverNames = new Set<string>();\n const toolNames = new Map<string, string>();\n for (const server of servers) {\n if (serverNames.has(server.name)) {\n throw new Error(`Duplicate MCP server name \"${server.name}\"`);\n }\n serverNames.add(server.name);\n\n for (const tool of server.tools) {\n const existing = toolNames.get(tool.name);\n if (existing !== undefined) {\n throw new Error(\n `Duplicate MCP tool name \"${tool.name}\" from servers \"${existing}\" and \"${server.name}\"`,\n );\n }\n toolNames.set(tool.name, server.name);\n }\n }\n}\n\nasync function rollbackSuccessfulClients(\n clients: readonly McpClient[],\n settled: readonly PromiseSettledResult<McpServer>[],\n): Promise<void> {\n const successful = clients.filter((_, index) => settled[index]?.status === \"fulfilled\");\n try {\n await closeAll(successful);\n } catch {\n // Preserve the connection failure that caused rollback.\n }\n}\n\nasync function closeAll(clients: readonly McpClient[]): Promise<void> {\n const settled = await Promise.allSettled(clients.map((client) => client.close()));\n const errors = settled.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n if (errors.length > 0) {\n throw new AggregateError(errors, \"Failed to close one or more MCP clients\");\n }\n}\n"],"mappings":"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","names":["parameters","deepFreeze"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/skills/instructions.ts","../src/skills/tools.ts","../src/skills/load.ts","../src/skills/local.ts","../src/skills/types.ts"],"sourcesContent":["import type { Skill } from \"./types\";\n\nexport function skillInstructions(skills: Skill[]): string {\n if (skills.length === 0) {\n return \"\";\n }\n\n return [\n \"You have access to Agent Skills.\",\n \"Skills are compact capability packages. Use the skill tools to load full instructions, references, or scripts only when a skill is relevant.\",\n \"\",\n \"Available skills:\",\n ...skills.map(formatSkill),\n \"\",\n \"Skill tools:\",\n \"- get_skill_instructions: load full SKILL.md guidance for a skill.\",\n \"- get_skill_reference: read a reference file from a skill.\",\n \"- get_skill_script: read a script file from a skill.\",\n \"- run_skill_script: execute a script from a skill with arguments.\",\n ].join(\"\\n\");\n}\n\nfunction formatSkill(skill: Skill): string {\n const lines = [`- ${skill.name}: ${skill.description}`];\n if (skill.references.length > 0) {\n lines.push(` references: ${skill.references.join(\", \")}`);\n }\n if (skill.scripts.length > 0) {\n lines.push(` scripts: ${skill.scripts.join(\", \")}`);\n }\n return lines.join(\"\\n\");\n}\n","import { spawn } from \"node:child_process\";\nimport { readFile } from \"node:fs/promises\";\nimport { isAbsolute, relative, resolve } from \"node:path\";\nimport { z } from \"zod\";\nimport { type AnyTool, createTool } from \"../tool\";\nimport { markSkillTool } from \"../tool/skill-tool-marker\";\nimport type { Skill } from \"./types\";\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst MAX_OUTPUT_CHARS = 20_000;\n\nexport function createSkillTools(skills: Skill[]): AnyTool[] {\n const registry = new SkillRegistry(skills);\n\n return [\n markSkillTool(\n createTool({\n name: \"get_skill_instructions\",\n description: \"Load the full SKILL.md instructions for an Agent Skill.\",\n inputSchema: z.object({\n skillName: z.string().describe(\"The name of the skill to load.\"),\n }),\n outputSchema: z.string(),\n execute: ({ skillName }) => registry.get(skillName).instructions,\n }),\n ),\n markSkillTool(\n createTool({\n name: \"get_skill_reference\",\n description: \"Read a reference file from an Agent Skill.\",\n inputSchema: z.object({\n skillName: z.string().describe(\"The name of the skill.\"),\n referencePath: z.string().describe(\"A path listed in the skill references.\"),\n }),\n outputSchema: z.string(),\n execute: ({ skillName, referencePath }) => registry.readReference(skillName, referencePath),\n }),\n ),\n markSkillTool(\n createTool({\n name: \"get_skill_script\",\n description: \"Read a script file from an Agent Skill.\",\n inputSchema: z.object({\n skillName: z.string().describe(\"The name of the skill.\"),\n scriptPath: z.string().describe(\"A path listed in the skill scripts.\"),\n }),\n outputSchema: z.string(),\n execute: ({ skillName, scriptPath }) => registry.readScript(skillName, scriptPath),\n }),\n ),\n markSkillTool(\n createTool({\n name: \"run_skill_script\",\n description: \"Execute a script from an Agent Skill with optional arguments.\",\n inputSchema: z.object({\n skillName: z.string().describe(\"The name of the skill.\"),\n scriptPath: z.string().describe(\"A path listed in the skill scripts.\"),\n args: z.array(z.string()).optional().describe(\"Arguments passed to the script.\"),\n timeoutMs: z.number().int().positive().optional().describe(\"Execution timeout in ms.\"),\n }),\n outputSchema: z.string(),\n execute: ({ skillName, scriptPath, args = [], timeoutMs = DEFAULT_TIMEOUT_MS }) =>\n registry.runScript(skillName, scriptPath, args, timeoutMs),\n }),\n ),\n ];\n}\n\nclass SkillRegistry {\n private readonly skills = new Map<string, Skill>();\n\n constructor(skills: Skill[]) {\n for (const skill of skills) {\n this.skills.set(skill.name, skill);\n }\n }\n\n get(skillName: string): Skill {\n const skill = this.skills.get(skillName);\n if (skill === undefined) {\n throw new Error(`Skill not found: ${skillName}`);\n }\n return skill;\n }\n\n async readReference(skillName: string, referencePath: string): Promise<string> {\n const skill = this.get(skillName);\n const path = this.resolveContainedPath(skill, \"references\", referencePath);\n if (!skill.references.includes(referencePath)) {\n throw new Error(`Skill reference not found: ${skillName}/${referencePath}`);\n }\n return readFile(path, \"utf8\");\n }\n\n async readScript(skillName: string, scriptPath: string): Promise<string> {\n const skill = this.get(skillName);\n const path = this.resolveContainedPath(skill, \"scripts\", scriptPath);\n if (!skill.scripts.includes(scriptPath)) {\n throw new Error(`Skill script not found: ${skillName}/${scriptPath}`);\n }\n return readFile(path, \"utf8\");\n }\n\n async runScript(\n skillName: string,\n scriptPath: string,\n args: string[],\n timeoutMs: number,\n ): Promise<string> {\n const skill = this.get(skillName);\n const script = this.resolveContainedPath(skill, \"scripts\", scriptPath);\n if (!skill.scripts.includes(scriptPath)) {\n throw new Error(`Skill script not found: ${skillName}/${scriptPath}`);\n }\n return runExecutable(script, args, skill.directory, timeoutMs);\n }\n\n private resolveContainedPath(\n skill: Skill,\n section: \"references\" | \"scripts\",\n requestedPath: string,\n ): string {\n if (requestedPath.length === 0 || isAbsolute(requestedPath)) {\n throw new Error(`Invalid skill path: ${requestedPath}`);\n }\n\n const root = resolve(skill.directory, section);\n const resolved = resolve(root, requestedPath);\n const rel = relative(root, resolved);\n if (rel === \"..\" || rel.startsWith(`..${\"/\"}`) || rel.startsWith(`..${\"\\\\\"}`)) {\n throw new Error(`Invalid skill path: ${requestedPath}`);\n }\n\n return resolved;\n }\n}\n\nfunction runExecutable(\n command: string,\n args: string[],\n cwd: string,\n timeoutMs: number,\n): Promise<string> {\n return new Promise((resolvePromise, reject) => {\n const child = spawn(command, args, {\n cwd,\n shell: false,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let stdout = \"\";\n let stderr = \"\";\n let timedOut = false;\n const timeout = setTimeout(() => {\n timedOut = true;\n child.kill();\n }, timeoutMs);\n\n child.stdout.setEncoding(\"utf8\");\n child.stderr.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (chunk) => {\n stdout = appendLimited(stdout, chunk);\n });\n child.stderr.on(\"data\", (chunk) => {\n stderr = appendLimited(stderr, chunk);\n });\n child.on(\"error\", (error) => {\n clearTimeout(timeout);\n reject(error);\n });\n child.on(\"close\", (code, signal) => {\n clearTimeout(timeout);\n if (timedOut) {\n reject(new Error(`Skill script timed out after ${timeoutMs}ms`));\n return;\n }\n\n const output = formatProcessOutput(stdout, stderr);\n if (code !== 0) {\n reject(new Error(`Skill script exited with code ${code ?? \"unknown\"}: ${output}`));\n return;\n }\n if (signal !== null) {\n reject(new Error(`Skill script exited with signal ${signal}: ${output}`));\n return;\n }\n\n resolvePromise(output);\n });\n });\n}\n\nfunction formatProcessOutput(stdout: string, stderr: string): string {\n const parts: string[] = [];\n if (stdout.length > 0) {\n parts.push(`stdout:\\n${stdout}`);\n }\n if (stderr.length > 0) {\n parts.push(`stderr:\\n${stderr}`);\n }\n return parts.length === 0 ? \"\" : parts.join(\"\\n\\n\");\n}\n\nfunction appendLimited(current: string, chunk: string): string {\n const next = current + chunk;\n if (next.length <= MAX_OUTPUT_CHARS) {\n return next;\n }\n return `${next.slice(0, MAX_OUTPUT_CHARS)}\\n[truncated]`;\n}\n","import { skillInstructions } from \"./instructions\";\nimport { createSkillTools } from \"./tools\";\nimport type { Skill, SkillLoader, SkillSet } from \"./types\";\n\nexport async function loadSkills(loaders: SkillLoader | SkillLoader[]): Promise<SkillSet> {\n const ordered = Array.isArray(loaders) ? loaders : [loaders];\n const byName = new Map<string, Skill>();\n\n for (const loader of ordered) {\n for (const loaded of await loader.load()) {\n byName.delete(loaded.name);\n byName.set(loaded.name, loaded);\n }\n }\n\n const skills = [...byName.values()];\n return {\n skills,\n instructions: skillInstructions(skills),\n tools: skills.length === 0 ? [] : createSkillTools(skills),\n };\n}\n","import { readdir, readFile, stat } from \"node:fs/promises\";\nimport { basename, join, relative, resolve, sep } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { isRecord } from \"../internal/record\";\nimport type { Skill, SkillLoader, SkillValidationIssue } from \"./types\";\nimport { SkillValidationError } from \"./types\";\n\ntype SkillFrontmatter = {\n name?: unknown;\n description?: unknown;\n license?: unknown;\n metadata?: unknown;\n};\n\nconst NAME_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\nconst MAX_NAME_LENGTH = 64;\nconst MAX_DESCRIPTION_LENGTH = 1024;\n\nexport const skill = {\n local(path: string): SkillLoader {\n return {\n load: () => loadLocalSkills(path),\n };\n },\n};\n\nasync function loadLocalSkills(path: string): Promise<Skill[]> {\n const root = resolve(path);\n if (await hasSkillFile(root)) {\n return [await readSkill(root)];\n }\n\n const entries = await readdir(root, { withFileTypes: true });\n const skills: Skill[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n const directory = join(root, entry.name);\n if (await hasSkillFile(directory)) {\n skills.push(await readSkill(directory));\n }\n }\n return skills;\n}\n\nasync function hasSkillFile(directory: string): Promise<boolean> {\n try {\n const info = await stat(join(directory, \"SKILL.md\"));\n return info.isFile();\n } catch {\n return false;\n }\n}\n\nasync function readSkill(directory: string): Promise<Skill> {\n const skillPath = join(directory, \"SKILL.md\");\n const markdown = await readFile(skillPath, \"utf8\");\n const parsed = parseSkillMarkdown(markdown, skillPath);\n validateSkillFrontmatter(parsed.frontmatter, directory, skillPath);\n\n const name = parsed.frontmatter.name as string;\n const description = parsed.frontmatter.description as string;\n const license =\n typeof parsed.frontmatter.license === \"string\" ? parsed.frontmatter.license : undefined;\n const metadata = isRecord(parsed.frontmatter.metadata) ? parsed.frontmatter.metadata : undefined;\n\n return {\n name,\n description,\n instructions: parsed.body.trim(),\n directory,\n references: await listRelativeFiles(join(directory, \"references\")),\n scripts: await listRelativeFiles(join(directory, \"scripts\")),\n license,\n metadata,\n };\n}\n\nfunction parseSkillMarkdown(\n markdown: string,\n path: string,\n): { frontmatter: SkillFrontmatter; body: string } {\n if (!markdown.startsWith(\"---\\n\") && !markdown.startsWith(\"---\\r\\n\")) {\n throw new SkillValidationError(\"Skill validation failed\", [\n { path, message: \"SKILL.md must start with YAML frontmatter\" },\n ]);\n }\n\n const newline = markdown.startsWith(\"---\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n const marker = `${newline}---${newline}`;\n const end = markdown.indexOf(marker, 3);\n if (end === -1) {\n throw new SkillValidationError(\"Skill validation failed\", [\n { path, message: \"SKILL.md frontmatter must end with ---\" },\n ]);\n }\n\n const rawFrontmatter = markdown.slice(3 + newline.length, end);\n const body = markdown.slice(end + marker.length);\n const parsed = parseYaml(rawFrontmatter);\n if (!isRecord(parsed)) {\n throw new SkillValidationError(\"Skill validation failed\", [\n { path, message: \"SKILL.md frontmatter must be a YAML object\" },\n ]);\n }\n\n return { frontmatter: parsed, body };\n}\n\nfunction validateSkillFrontmatter(\n frontmatter: SkillFrontmatter,\n directory: string,\n path: string,\n): void {\n const issues: SkillValidationIssue[] = [];\n const name = frontmatter.name;\n const description = frontmatter.description;\n\n if (typeof name !== \"string\" || name.length === 0) {\n issues.push({ path, message: \"name is required\" });\n } else {\n if (name.length > MAX_NAME_LENGTH) {\n issues.push({ path, message: `name must be at most ${MAX_NAME_LENGTH} characters` });\n }\n if (!NAME_PATTERN.test(name)) {\n issues.push({\n path,\n message: \"name must contain lowercase letters, numbers, and hyphens only\",\n });\n }\n if (basename(directory) !== name) {\n issues.push({ path, message: \"name must match the skill directory name\" });\n }\n }\n\n if (typeof description !== \"string\" || description.length === 0) {\n issues.push({ path, message: \"description is required\" });\n } else if (description.length > MAX_DESCRIPTION_LENGTH) {\n issues.push({\n path,\n message: `description must be at most ${MAX_DESCRIPTION_LENGTH} characters`,\n });\n }\n\n if (issues.length > 0) {\n throw new SkillValidationError(\"Skill validation failed\", issues);\n }\n}\n\nasync function listRelativeFiles(directory: string): Promise<string[]> {\n try {\n const info = await stat(directory);\n if (!info.isDirectory()) {\n return [];\n }\n } catch {\n return [];\n }\n\n const files: string[] = [];\n await collectFiles(directory, directory, files);\n return files.sort();\n}\n\nasync function collectFiles(root: string, directory: string, files: string[]): Promise<void> {\n const entries = await readdir(directory, { withFileTypes: true });\n for (const entry of entries) {\n const path = join(directory, entry.name);\n if (entry.isDirectory()) {\n await collectFiles(root, path, files);\n } else if (entry.isFile()) {\n files.push(toPortablePath(relative(root, path)));\n }\n }\n}\n\nfunction toPortablePath(path: string): string {\n return sep === \"/\" ? path : path.split(sep).join(\"/\");\n}\n","import type { AnyTool } from \"../tool\";\n\nexport type Skill = {\n readonly name: string;\n readonly description: string;\n readonly instructions: string;\n readonly directory: string;\n readonly references: string[];\n readonly scripts: string[];\n readonly license?: string | undefined;\n readonly metadata?: Record<string, unknown> | undefined;\n};\n\nexport type SkillLoader = {\n load(): Promise<Skill[]>;\n};\n\nexport type SkillSet = {\n readonly skills: Skill[];\n readonly tools: AnyTool[];\n readonly instructions: string;\n};\n\nexport type SkillValidationIssue = {\n path: string;\n message: string;\n};\n\nexport class SkillValidationError extends Error {\n readonly issues: SkillValidationIssue[];\n\n constructor(message: string, issues: SkillValidationIssue[]) {\n super(message);\n this.name = \"SkillValidationError\";\n this.issues = issues;\n }\n}\n"],"mappings":"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","names":["skill","skill","readFile","relative","resolve","resolve","readFile","relative"]}
|
package/dist/chunk-CQNNSZPG.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/record.ts"],"sourcesContent":["export function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":";AAAO,SAAS,SAAS,OAAkD;AACzE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;","names":[]}
|