alibabacloud-agentcore-sdk 0.1.2 → 0.1.3
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 +1 -0
- package/dist/auth/index.cjs +6 -7
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.js +5 -6
- package/dist/{chunk-RZNQGEGJ.cjs → chunk-25KH5XKG.cjs} +6 -6
- package/dist/{chunk-RZNQGEGJ.cjs.map → chunk-25KH5XKG.cjs.map} +1 -1
- package/dist/{chunk-A3WMLVJC.cjs → chunk-2TRT7RSV.cjs} +5 -7
- package/dist/chunk-2TRT7RSV.cjs.map +1 -0
- package/dist/{chunk-K3TE7625.js → chunk-3JXIMUUY.js} +2 -2
- package/dist/{chunk-LXHW6OT4.cjs → chunk-5P5SJLNH.cjs} +17 -15
- package/dist/chunk-5P5SJLNH.cjs.map +1 -0
- package/dist/{chunk-TWEO5XVM.cjs → chunk-5S55CTNM.cjs} +18 -20
- package/dist/chunk-5S55CTNM.cjs.map +1 -0
- package/dist/{chunk-JW62DVIC.js → chunk-5UQIUMSF.js} +3 -5
- package/dist/{chunk-JW62DVIC.js.map → chunk-5UQIUMSF.js.map} +1 -1
- package/dist/{chunk-IF7LMBXC.js → chunk-6EJFZSYH.js} +18 -14
- package/dist/chunk-6EJFZSYH.js.map +1 -0
- package/dist/{chunk-ZWQBAJ5O.js → chunk-6NNPSP3O.js} +2 -2
- package/dist/{chunk-IUCLCPVV.js → chunk-76NTQYJB.js} +3 -3
- package/dist/{chunk-7Y263YIW.js → chunk-7AJ2V7RN.js} +5 -7
- package/dist/{chunk-7Y263YIW.js.map → chunk-7AJ2V7RN.js.map} +1 -1
- package/dist/{chunk-5ZOLHQXO.js → chunk-7UBN3SJI.js} +7 -9
- package/dist/{chunk-5ZOLHQXO.js.map → chunk-7UBN3SJI.js.map} +1 -1
- package/dist/{chunk-MZ5UWGXS.js → chunk-AEQ76QIO.js} +33 -5
- package/dist/chunk-AEQ76QIO.js.map +1 -0
- package/dist/{chunk-UBP5CHU7.js → chunk-AX3NM2DK.js} +5 -7
- package/dist/{chunk-UBP5CHU7.js.map → chunk-AX3NM2DK.js.map} +1 -1
- package/dist/{chunk-55XZZRKO.js → chunk-D45QSOR4.js} +4 -6
- package/dist/{chunk-55XZZRKO.js.map → chunk-D45QSOR4.js.map} +1 -1
- package/dist/{chunk-MICRSJ6R.js → chunk-EKLTJ65H.js} +2 -2
- package/dist/{chunk-RBAY4MO2.js → chunk-FG7K3EF7.js} +6 -8
- package/dist/{chunk-RBAY4MO2.js.map → chunk-FG7K3EF7.js.map} +1 -1
- package/dist/{chunk-ZLQ2IBTC.cjs → chunk-GOJ4Q4QW.cjs} +12 -12
- package/dist/{chunk-ZLQ2IBTC.cjs.map → chunk-GOJ4Q4QW.cjs.map} +1 -1
- package/dist/{chunk-UWPKFJYM.js → chunk-HMKA537A.js} +11 -9
- package/dist/{chunk-UWPKFJYM.js.map → chunk-HMKA537A.js.map} +1 -1
- package/dist/{chunk-GYLT23D3.js → chunk-IJ4VJIQV.js} +5 -5
- package/dist/{chunk-PKYET77D.cjs → chunk-JK6KPDVW.cjs} +39 -41
- package/dist/chunk-JK6KPDVW.cjs.map +1 -0
- package/dist/{chunk-2E5EWEDG.cjs → chunk-KQTZUIMI.cjs} +10 -12
- package/dist/chunk-KQTZUIMI.cjs.map +1 -0
- package/dist/{chunk-ZLKYXRNM.js → chunk-KTKZCLYB.js} +3 -5
- package/dist/{chunk-ZLKYXRNM.js.map → chunk-KTKZCLYB.js.map} +1 -1
- package/dist/{chunk-RHY7Y43E.js → chunk-L74ASQWF.js} +8 -9
- package/dist/chunk-L74ASQWF.js.map +1 -0
- package/dist/{chunk-S7PWSJNP.cjs → chunk-LQM754U3.cjs} +5 -5
- package/dist/{chunk-S7PWSJNP.cjs.map → chunk-LQM754U3.cjs.map} +1 -1
- package/dist/{chunk-5JXA7JPS.js → chunk-NRYDUATX.js} +2 -2
- package/dist/{chunk-A3PF2SPD.cjs → chunk-NWWTBPYG.cjs} +5 -5
- package/dist/{chunk-A3PF2SPD.cjs.map → chunk-NWWTBPYG.cjs.map} +1 -1
- package/dist/{chunk-5RKN46UU.cjs → chunk-NXMTTQQK.cjs} +15 -15
- package/dist/{chunk-5RKN46UU.cjs.map → chunk-NXMTTQQK.cjs.map} +1 -1
- package/dist/{chunk-RYXL25AI.js → chunk-PS3EAUMK.js} +2 -2
- package/dist/{chunk-QIZO3A4Y.cjs → chunk-QT736X32.cjs} +43 -39
- package/dist/chunk-QT736X32.cjs.map +1 -0
- package/dist/{chunk-ULJTQSLE.cjs → chunk-R7NVBTPK.cjs} +3 -3
- package/dist/{chunk-ULJTQSLE.cjs.map → chunk-R7NVBTPK.cjs.map} +1 -1
- package/dist/{chunk-YZP55W7S.cjs → chunk-RJCDBVZ6.cjs} +3 -3
- package/dist/{chunk-YZP55W7S.cjs.map → chunk-RJCDBVZ6.cjs.map} +1 -1
- package/dist/{chunk-ZTWLCHCO.cjs → chunk-UKRJR66Y.cjs} +24 -26
- package/dist/chunk-UKRJR66Y.cjs.map +1 -0
- package/dist/{chunk-MWAHO47B.cjs → chunk-UMTUXOKE.cjs} +25 -27
- package/dist/chunk-UMTUXOKE.cjs.map +1 -0
- package/dist/{chunk-JSP7ZROS.cjs → chunk-V4A6MJ42.cjs} +36 -8
- package/dist/chunk-V4A6MJ42.cjs.map +1 -0
- package/dist/{chunk-BVZ7H2F5.cjs → chunk-VYOJJECB.cjs} +55 -56
- package/dist/chunk-VYOJJECB.cjs.map +1 -0
- package/dist/{chunk-RQRI6RCG.cjs → chunk-ZXPTDLXJ.cjs} +12 -14
- package/dist/chunk-ZXPTDLXJ.cjs.map +1 -0
- package/dist/collaboration/index.cjs +3 -3
- package/dist/collaboration/index.d.cts +2 -2
- package/dist/collaboration/index.d.ts +2 -2
- package/dist/collaboration/index.js +2 -2
- package/dist/controlplane/index.cjs +7 -8
- package/dist/controlplane/index.cjs.map +1 -1
- package/dist/controlplane/index.js +6 -7
- package/dist/{errors-D9OtcR-o.d.cts → errors-BGfCbCgs.d.cts} +4 -1
- package/dist/{errors-BjGO6N10.d.ts → errors-D_809AqR.d.ts} +4 -1
- package/dist/{google-adk-model-N47R7GB2.js → google-adk-model-V7SC6RQD.js} +3 -3
- package/dist/{google-adk-model-PDBKY5YZ.cjs → google-adk-model-WYWEQI4R.cjs} +13 -13
- package/dist/{google-adk-model-PDBKY5YZ.cjs.map → google-adk-model-WYWEQI4R.cjs.map} +1 -1
- package/dist/index.cjs +33 -35
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +15 -17
- package/dist/index.js.map +1 -1
- package/dist/integrations/ai-sdk.cjs +3 -3
- package/dist/integrations/ai-sdk.js +2 -2
- package/dist/integrations/google-adk.cjs +13 -14
- package/dist/integrations/google-adk.cjs.map +1 -1
- package/dist/integrations/google-adk.js +9 -10
- package/dist/integrations/google-adk.js.map +1 -1
- package/dist/integrations/langchain.cjs +18 -19
- package/dist/integrations/langchain.cjs.map +1 -1
- package/dist/integrations/langchain.js +11 -12
- package/dist/integrations/langchain.js.map +1 -1
- package/dist/integrations/langgraph.cjs +10 -11
- package/dist/integrations/langgraph.cjs.map +1 -1
- package/dist/integrations/langgraph.js +9 -10
- package/dist/integrations/mastra.cjs +14 -15
- package/dist/integrations/mastra.cjs.map +1 -1
- package/dist/integrations/mastra.js +8 -9
- package/dist/integrations/mastra.js.map +1 -1
- package/dist/{langchain-provider-NF5GIDQV.cjs → langchain-provider-EBQPAP6O.cjs} +10 -10
- package/dist/{langchain-provider-NF5GIDQV.cjs.map → langchain-provider-EBQPAP6O.cjs.map} +1 -1
- package/dist/{langchain-provider-PHL4UWNF.js → langchain-provider-MWLP3I7S.js} +2 -2
- package/dist/mcp/index.cjs +3 -4
- package/dist/mcp/index.cjs.map +1 -1
- package/dist/mcp/index.js +2 -3
- package/dist/memory/index.cjs +6 -7
- package/dist/memory/index.cjs.map +1 -1
- package/dist/memory/index.js +5 -6
- package/dist/model/index.cjs +4 -5
- package/dist/model/index.cjs.map +1 -1
- package/dist/model/index.js +3 -4
- package/dist/runtime/index.cjs +7 -8
- package/dist/runtime/index.cjs.map +1 -1
- package/dist/runtime/index.js +6 -7
- package/dist/server/index.cjs +13 -15
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.js +5 -7
- package/dist/server/index.js.map +1 -1
- package/dist/skill/index.cjs +4 -5
- package/dist/skill/index.cjs.map +1 -1
- package/dist/skill/index.js +3 -4
- package/package.json +1 -1
- package/dist/chunk-2E5EWEDG.cjs.map +0 -1
- package/dist/chunk-A3WMLVJC.cjs.map +0 -1
- package/dist/chunk-BVZ7H2F5.cjs.map +0 -1
- package/dist/chunk-IF7LMBXC.js.map +0 -1
- package/dist/chunk-JSP7ZROS.cjs.map +0 -1
- package/dist/chunk-LE5P3SJW.cjs +0 -16
- package/dist/chunk-LE5P3SJW.cjs.map +0 -1
- package/dist/chunk-LXHW6OT4.cjs.map +0 -1
- package/dist/chunk-MWAHO47B.cjs.map +0 -1
- package/dist/chunk-MZ5UWGXS.js.map +0 -1
- package/dist/chunk-NZL3VPJ2.js +0 -16
- package/dist/chunk-NZL3VPJ2.js.map +0 -1
- package/dist/chunk-PKYET77D.cjs.map +0 -1
- package/dist/chunk-QIZO3A4Y.cjs.map +0 -1
- package/dist/chunk-RHY7Y43E.js.map +0 -1
- package/dist/chunk-RQRI6RCG.cjs.map +0 -1
- package/dist/chunk-TWEO5XVM.cjs.map +0 -1
- package/dist/chunk-ZTWLCHCO.cjs.map +0 -1
- /package/dist/{chunk-K3TE7625.js.map → chunk-3JXIMUUY.js.map} +0 -0
- /package/dist/{chunk-ZWQBAJ5O.js.map → chunk-6NNPSP3O.js.map} +0 -0
- /package/dist/{chunk-IUCLCPVV.js.map → chunk-76NTQYJB.js.map} +0 -0
- /package/dist/{chunk-MICRSJ6R.js.map → chunk-EKLTJ65H.js.map} +0 -0
- /package/dist/{chunk-GYLT23D3.js.map → chunk-IJ4VJIQV.js.map} +0 -0
- /package/dist/{chunk-5JXA7JPS.js.map → chunk-NRYDUATX.js.map} +0 -0
- /package/dist/{chunk-RYXL25AI.js.map → chunk-PS3EAUMK.js.map} +0 -0
- /package/dist/{google-adk-model-N47R7GB2.js.map → google-adk-model-V7SC6RQD.js.map} +0 -0
- /package/dist/{langchain-provider-PHL4UWNF.js.map → langchain-provider-MWLP3I7S.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mcp/client.ts","../src/mcp/headers.ts"],"sourcesContent":["import { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';\nimport { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';\nimport { StdioClientTransport, type StdioServerParameters } from '@modelcontextprotocol/sdk/client/stdio.js';\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { CallToolResultSchema, McpError, ErrorCode, type CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport { inspect } from 'node:util';\nimport { ConfigError } from '../errors';\nimport { nullLogger, type Logger } from '../logging';\nimport type { MCPDescriptor } from '../controlplane/client';\nimport type { AgentConfig } from '../runtime/config';\nimport type { HeadersProvider } from '../model/client';\nimport { Tool, type ToolArguments } from '../integrations/common';\nimport { mergeMCPHeaders } from './headers';\n\nexport interface MCPTimeouts { sessionMs?: number; metadataMs?: number; toolMs?: number; }\nexport interface ManagedMCPOptions extends MCPTimeouts { headers?: Readonly<Record<string, string>>; credentialName?: string; }\nexport type DirectMCPOptions = ({ url: string; transport?: 'streamable-http' | 'sse'; headersProvider?: HeadersProvider } |\n { transport: 'stdio'; server: StdioServerParameters }) & MCPTimeouts & { logger?: Logger };\nexport interface MCPCallOptions { signal?: AbortSignal; }\ninterface Session {\n client: Client;\n transport: Transport;\n abort: AbortController;\n invalid: boolean;\n active: Set<Promise<unknown>>;\n closing?: Promise<void>;\n}\n\nexport function mcpServerURL(gatewayURL: string, id: string): string {\n const gateway = gatewayURL.replace(/\\/+$/, '').replace(/\\/(?:mcp|mcp-servers)$/, '');\n return `${gateway}/mcp-servers/${encodeURIComponent(id)}`;\n}\n\nexport class MCPClient {\n readonly descriptor?: MCPDescriptor;\n private readonly logger: Logger;\n private state?: Session;\n private opening?: Promise<Session>;\n private closed = false;\n private closing?: Promise<void>;\n private readonly timeouts: Required<MCPTimeouts>;\n\n private constructor(private readonly options: DirectMCPOptions, descriptor?: MCPDescriptor) {\n this.descriptor = descriptor;\n this.logger = options.logger ?? nullLogger;\n this.timeouts = { sessionMs: options.sessionMs ?? 30_000, metadataMs: options.metadataMs ?? 60_000, toolMs: options.toolMs ?? 600_000 };\n if (Object.values(this.timeouts).some((timeout) => !Number.isFinite(timeout) || timeout <= 0)) throw new ConfigError('MCP operation timeouts must be positive');\n if (options.transport !== 'stdio') {\n let url: URL;\n try { url = new URL(options.url); } catch { throw new ConfigError('Direct MCP URL must be HTTP(S)'); }\n if (!['http:', 'https:'].includes(url.protocol)) throw new ConfigError('Direct MCP URL must be HTTP(S)');\n if (options.transport !== undefined && !['streamable-http', 'sse'].includes(options.transport)) throw new ConfigError('MCP transport must be streamable-http, sse, or stdio');\n }\n this.logger.info('agentcore.mcp.client.created', { mode: descriptor ? 'managed' : 'direct', transport: options.transport ?? 'streamable-http', url: this.safeURL });\n }\n static platform(config: AgentConfig, descriptor: MCPDescriptor, options: Omit<ManagedMCPOptions, 'credentialName'> & {\n logger?: Logger; credentialHeadersProvider?: () => Promise<Record<string, string>>;\n } = {}): MCPClient {\n const { headers: custom, credentialHeadersProvider, ...connectionOptions } = options;\n const customHeaders = mergeMCPHeaders({}, custom);\n const headers = mergeMCPHeaders(config.gatewayHeaders, custom);\n return new MCPClient({ ...connectionOptions, url: mcpServerURL(config.mcpGatewayUrl, descriptor.mcpServerId), transport: 'streamable-http', headersProvider: async () => {\n if (!credentialHeadersProvider) return headers;\n const bound = mergeMCPHeaders(config.gatewayHeaders, await credentialHeadersProvider());\n return mergeMCPHeaders(bound, customHeaders);\n } }, descriptor);\n }\n static direct(options: DirectMCPOptions): MCPClient { return new MCPClient(options); }\n\n async listTools(options: MCPCallOptions = {}): Promise<Tool[]> {\n return this.withSession('list_tools', async (session) => {\n const definitions: Awaited<ReturnType<Client['listTools']>>['tools'] = [];\n let cursor: string | undefined;\n const deadline = AbortSignal.timeout(this.timeouts.metadataMs);\n const signal = AbortSignal.any([deadline, ...(options.signal ? [options.signal] : [])]);\n do {\n const result = await session.client.listTools(cursor ? { cursor } : undefined, { signal, timeout: this.timeouts.metadataMs });\n definitions.push(...result.tools); cursor = result.nextCursor;\n } while (cursor);\n return definitions.map((definition) => new Tool({ name: definition.name, description: definition.description ?? '', parameters: definition.inputSchema,\n invoke: (arguments_) => this.callTool(definition.name, arguments_),\n }));\n });\n }\n async tools(options: MCPCallOptions = {}): Promise<Tool[]> { return this.listTools(options); }\n async callTool(name: string, arguments_: ToolArguments, options: MCPCallOptions = {}): Promise<CallToolResult> {\n return this.withSession('call_tool', (session) => session.client.callTool({ name, arguments: arguments_ }, CallToolResultSchema,\n { timeout: this.timeouts.toolMs, signal: options.signal }) as Promise<CallToolResult>);\n }\n\n close(): Promise<void> {\n if (this.closing) return this.closing;\n this.closed = true;\n this.closing = (async () => {\n if (this.opening && this.state) this.state.abort.abort();\n await this.opening?.catch(() => undefined);\n if (this.state) await this.retire(this.state);\n })();\n return this.closing;\n }\n [inspect.custom](): string { return `MCPClient(url=${this.safeURL}, <redacted>)`; }\n toJSON(): string { return this[inspect.custom](); }\n\n private get safeURL(): string {\n if (this.options.transport === 'stdio') return 'stdio';\n const url = new URL(this.options.url); return `${url.origin}${url.pathname}`;\n }\n private async acquire(): Promise<Session> {\n for (;;) {\n if (this.closed) throw new Error('MCP client is closed');\n if (this.opening) return this.opening;\n if (this.state?.invalid) { await this.retire(this.state); continue; }\n if (this.state) return this.state;\n const request = this.open(); this.opening = request;\n try { return await request; } finally { this.opening = undefined; }\n }\n }\n private async open(): Promise<Session> {\n const client = new Client({ name: 'agentcore-sdk', version: '0.1.0' });\n const abort = new AbortController();\n let transport: Transport;\n if (this.options.transport === 'stdio') transport = new StdioClientTransport(this.options.server);\n else {\n const headers = await this.options.headersProvider?.() ?? {};\n const fetch: typeof globalThis.fetch = (input, init) => globalThis.fetch(input, { ...init, redirect: 'manual', signal: AbortSignal.any([abort.signal, ...(init?.signal ? [init.signal] : [])]) });\n transport = this.options.transport === 'sse'\n ? new SSEClientTransport(new URL(this.options.url), { requestInit: { headers }, fetch })\n : new StreamableHTTPClientTransport(new URL(this.options.url), { requestInit: { headers }, fetch });\n }\n const session: Session = { client, transport, abort, invalid: false, active: new Set() };\n this.state = session;\n const timer = setTimeout(() => abort.abort(new Error('MCP session open timed out')), this.timeouts.sessionMs);\n client.onclose = () => { session.invalid = true; };\n client.onerror = (error) => {\n if (this.closed || session.closing) return;\n session.invalid = true;\n this.logger.warn('agentcore.mcp.session.error', { url: this.safeURL, errorType: error.name });\n };\n this.logger.info('agentcore.mcp.session.open.started', { url: this.safeURL, timeoutMs: this.timeouts.sessionMs });\n try {\n await client.connect(transport, { signal: abort.signal, timeout: this.timeouts.sessionMs });\n abort.signal.throwIfAborted();\n if (this.closed) throw new Error('MCP client is closed');\n this.logger.info('agentcore.mcp.session.open.succeeded', { url: this.safeURL });\n return session;\n } catch (error) { await this.retire(session); throw error; }\n finally { clearTimeout(timer); }\n }\n\n private async withSession<T>(operation: string, call: (session: Session) => Promise<T>): Promise<T> {\n const session = await this.acquire();\n if (this.closed) throw new Error('MCP client is closed');\n const request = call(session); session.active.add(request);\n this.logger.info('agentcore.mcp.request.started', { operation, url: this.safeURL });\n try { const result = await request; this.logger.info('agentcore.mcp.request.succeeded', { operation, url: this.safeURL }); return result; }\n catch (error) {\n if (!(error instanceof McpError) || [ErrorCode.ConnectionClosed, ErrorCode.RequestTimeout].includes(error.code)) session.invalid = true;\n this.logger.warn('agentcore.mcp.request.failed', { operation, url: this.safeURL, errorType: error instanceof Error ? error.name : 'unknown' });\n throw error;\n } finally { session.active.delete(request); }\n }\n private retire(session: Session): Promise<void> {\n if (session.closing) return session.closing;\n session.invalid = true;\n session.closing = (async () => {\n await Promise.allSettled([...session.active]);\n session.abort.abort();\n try { await session.client.close(); }\n catch (error) { this.logger.warn('agentcore.mcp.session.close.failed', { errorType: error instanceof Error ? error.name : 'unknown', url: this.safeURL }); }\n if (this.state === session) this.state = undefined;\n })();\n return session.closing;\n }\n}\n","import { ConfigError } from '../errors';\n\nconst transportHeaders = new Set([\n 'host', 'content-length', 'connection', 'transfer-encoding', 'upgrade',\n 'mcp-session-id', 'mcp-protocol-version', 'last-event-id', 'content-type', 'accept',\n]);\n\n/** Copy fixed headers, rejecting case-insensitive credential/transport conflicts. */\nexport function mergeMCPHeaders(base: Readonly<Record<string, string>>, custom?: Readonly<Record<string, string>>): Record<string, string> {\n const result = { ...base };\n if (custom === undefined) return result;\n if (!custom || typeof custom !== 'object' || Array.isArray(custom)) throw new ConfigError('MCP headers must be an object');\n const protectedNames = new Set([...Object.keys(base).map((name) => name.toLowerCase()), ...transportHeaders, 'authorization']);\n const seen = new Set<string>();\n for (const [name, value] of Object.entries(custom)) {\n if (!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) throw new ConfigError('Invalid MCP header name');\n if (typeof value !== 'string' || /[\\x00-\\x1f\\x7f]/.test(value)) throw new ConfigError('MCP header values must be strings without control characters');\n const folded = name.toLowerCase();\n if (protectedNames.has(folded)) throw new ConfigError(`MCP header is protected: ${folded}`);\n if (seen.has(folded)) throw new ConfigError(`Duplicate MCP header: ${folded}`);\n seen.add(folded);\n Object.defineProperty(result, folded, { value, enumerable: true, configurable: true, writable: true });\n }\n return result;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/mcp/client.ts","../src/mcp/headers.ts"],"sourcesContent":["import { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';\nimport { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';\nimport { StdioClientTransport, type StdioServerParameters } from '@modelcontextprotocol/sdk/client/stdio.js';\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { CallToolResultSchema, McpError, ErrorCode, type CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport { inspect } from 'node:util';\nimport { ConfigError } from '../errors';\nimport { nullLogger, type Logger } from '../logging';\nimport type { MCPDescriptor } from '../controlplane/client';\nimport type { AgentConfig } from '../runtime/config';\nimport type { HeadersProvider } from '../model/client';\nimport { Tool, type ToolArguments } from '../integrations/common';\nimport { mergeMCPHeaders } from './headers';\n\nexport interface MCPTimeouts { sessionMs?: number; metadataMs?: number; toolMs?: number; }\nexport interface ManagedMCPOptions extends MCPTimeouts { headers?: Readonly<Record<string, string>>; credentialName?: string; }\nexport type DirectMCPOptions = ({ url: string; transport?: 'streamable-http' | 'sse'; headersProvider?: HeadersProvider } |\n { transport: 'stdio'; server: StdioServerParameters }) & MCPTimeouts & { logger?: Logger };\nexport interface MCPCallOptions { signal?: AbortSignal; }\ninterface Session {\n client: Client;\n transport: Transport;\n abort: AbortController;\n invalid: boolean;\n active: Set<Promise<unknown>>;\n closing?: Promise<void>;\n}\n\nexport function mcpServerURL(gatewayURL: string, id: string): string {\n const gateway = gatewayURL.replace(/\\/+$/, '').replace(/\\/(?:mcp|mcp-servers)$/, '');\n return `${gateway}/mcp-servers/${encodeURIComponent(id)}`;\n}\n\nexport class MCPClient {\n readonly descriptor?: MCPDescriptor;\n private readonly logger: Logger;\n private state?: Session;\n private opening?: Promise<Session>;\n private closed = false;\n private closing?: Promise<void>;\n private readonly timeouts: Required<MCPTimeouts>;\n\n private constructor(private readonly options: DirectMCPOptions, descriptor?: MCPDescriptor) {\n this.descriptor = descriptor;\n this.logger = options.logger ?? nullLogger;\n this.timeouts = { sessionMs: options.sessionMs ?? 30_000, metadataMs: options.metadataMs ?? 60_000, toolMs: options.toolMs ?? 600_000 };\n if (Object.values(this.timeouts).some((timeout) => !Number.isFinite(timeout) || timeout <= 0)) throw new ConfigError('MCP operation timeouts must be positive');\n if (options.transport !== 'stdio') {\n let url: URL;\n try { url = new URL(options.url); } catch { throw new ConfigError('Direct MCP URL must be HTTP(S)'); }\n if (!['http:', 'https:'].includes(url.protocol)) throw new ConfigError('Direct MCP URL must be HTTP(S)');\n if (options.transport !== undefined && !['streamable-http', 'sse'].includes(options.transport)) throw new ConfigError('MCP transport must be streamable-http, sse, or stdio');\n }\n this.logger.info('agentcore.mcp.client.created', { mode: descriptor ? 'managed' : 'direct', transport: options.transport ?? 'streamable-http', url: this.safeURL });\n }\n static platform(config: AgentConfig, descriptor: MCPDescriptor, options: Omit<ManagedMCPOptions, 'credentialName'> & {\n logger?: Logger; credentialHeadersProvider?: () => Promise<Record<string, string>>;\n } = {}): MCPClient {\n const { headers: custom, credentialHeadersProvider, ...connectionOptions } = options;\n const customHeaders = mergeMCPHeaders({}, custom);\n const headers = mergeMCPHeaders(config.gatewayHeaders, custom);\n return new MCPClient({ ...connectionOptions, url: mcpServerURL(config.mcpGatewayUrl, descriptor.mcpServerId), transport: 'streamable-http', headersProvider: async () => {\n if (!credentialHeadersProvider) return headers;\n const bound = mergeMCPHeaders(config.gatewayHeaders, await credentialHeadersProvider());\n return mergeMCPHeaders(bound, customHeaders);\n } }, descriptor);\n }\n static direct(options: DirectMCPOptions): MCPClient { return new MCPClient(options); }\n\n async listTools(options: MCPCallOptions = {}): Promise<Tool[]> {\n return this.withSession('list_tools', async (session) => {\n const definitions: Awaited<ReturnType<Client['listTools']>>['tools'] = [];\n let cursor: string | undefined;\n const deadline = AbortSignal.timeout(this.timeouts.metadataMs);\n const signal = AbortSignal.any([deadline, ...(options.signal ? [options.signal] : [])]);\n do {\n const result = await session.client.listTools(cursor ? { cursor } : undefined, { signal, timeout: this.timeouts.metadataMs });\n definitions.push(...result.tools); cursor = result.nextCursor;\n } while (cursor);\n return definitions.map((definition) => new Tool({ name: definition.name, description: definition.description ?? '', parameters: definition.inputSchema,\n invoke: (arguments_) => this.callTool(definition.name, arguments_),\n }));\n });\n }\n async tools(options: MCPCallOptions = {}): Promise<Tool[]> { return this.listTools(options); }\n async callTool(name: string, arguments_: ToolArguments, options: MCPCallOptions = {}): Promise<CallToolResult> {\n return this.withSession('call_tool', (session) => session.client.callTool({ name, arguments: arguments_ }, CallToolResultSchema,\n { timeout: this.timeouts.toolMs, signal: options.signal }) as Promise<CallToolResult>);\n }\n\n close(): Promise<void> {\n if (this.closing) return this.closing;\n this.closed = true;\n this.closing = (async () => {\n if (this.opening && this.state) this.state.abort.abort();\n await this.opening?.catch(() => undefined);\n if (this.state) await this.retire(this.state);\n })();\n return this.closing;\n }\n [inspect.custom](): string { return `MCPClient(url=${this.safeURL}, <redacted>)`; }\n toJSON(): string { return this[inspect.custom](); }\n\n private get safeURL(): string {\n if (this.options.transport === 'stdio') return 'stdio';\n const url = new URL(this.options.url); return `${url.origin}${url.pathname}`;\n }\n private async acquire(): Promise<Session> {\n for (;;) {\n if (this.closed) throw new Error('MCP client is closed');\n if (this.opening) return this.opening;\n if (this.state?.invalid) { await this.retire(this.state); continue; }\n if (this.state) return this.state;\n const request = this.open(); this.opening = request;\n try { return await request; } finally { this.opening = undefined; }\n }\n }\n private async open(): Promise<Session> {\n const client = new Client({ name: 'agentcore-sdk', version: '0.1.0' });\n const abort = new AbortController();\n let transport: Transport;\n if (this.options.transport === 'stdio') transport = new StdioClientTransport(this.options.server);\n else {\n const headers = await this.options.headersProvider?.() ?? {};\n const fetch: typeof globalThis.fetch = (input, init) => globalThis.fetch(input, { ...init, redirect: 'manual', signal: AbortSignal.any([abort.signal, ...(init?.signal ? [init.signal] : [])]) });\n transport = this.options.transport === 'sse'\n ? new SSEClientTransport(new URL(this.options.url), { requestInit: { headers }, fetch })\n : new StreamableHTTPClientTransport(new URL(this.options.url), { requestInit: { headers }, fetch });\n }\n const session: Session = { client, transport, abort, invalid: false, active: new Set() };\n this.state = session;\n const timer = setTimeout(() => abort.abort(new Error('MCP session open timed out')), this.timeouts.sessionMs);\n client.onclose = () => { session.invalid = true; };\n client.onerror = (error) => {\n if (this.closed || session.closing) return;\n session.invalid = true;\n this.logger.warn('agentcore.mcp.session.error', { url: this.safeURL, errorType: error.name });\n };\n this.logger.info('agentcore.mcp.session.open.started', { url: this.safeURL, timeoutMs: this.timeouts.sessionMs });\n try {\n await client.connect(transport, { signal: abort.signal, timeout: this.timeouts.sessionMs });\n abort.signal.throwIfAborted();\n if (this.closed) throw new Error('MCP client is closed');\n this.logger.info('agentcore.mcp.session.open.succeeded', { url: this.safeURL });\n return session;\n } catch (error) { await this.retire(session); throw error; }\n finally { clearTimeout(timer); }\n }\n\n private async withSession<T>(operation: string, call: (session: Session) => Promise<T>): Promise<T> {\n const session = await this.acquire();\n if (this.closed) throw new Error('MCP client is closed');\n const request = call(session); session.active.add(request);\n this.logger.info('agentcore.mcp.request.started', { operation, url: this.safeURL });\n try { const result = await request; this.logger.info('agentcore.mcp.request.succeeded', { operation, url: this.safeURL }); return result; }\n catch (error) {\n if (!(error instanceof McpError) || [ErrorCode.ConnectionClosed, ErrorCode.RequestTimeout].includes(error.code)) session.invalid = true;\n this.logger.warn('agentcore.mcp.request.failed', { operation, url: this.safeURL, errorType: error instanceof Error ? error.name : 'unknown' });\n throw error;\n } finally { session.active.delete(request); }\n }\n private retire(session: Session): Promise<void> {\n if (session.closing) return session.closing;\n session.invalid = true;\n session.closing = (async () => {\n await Promise.allSettled([...session.active]);\n session.abort.abort();\n try { await session.client.close(); }\n catch (error) { this.logger.warn('agentcore.mcp.session.close.failed', { errorType: error instanceof Error ? error.name : 'unknown', url: this.safeURL }); }\n if (this.state === session) this.state = undefined;\n })();\n return session.closing;\n }\n}\n","import { ConfigError } from '../errors';\n\nconst transportHeaders = new Set([\n 'host', 'content-length', 'connection', 'transfer-encoding', 'upgrade',\n 'mcp-session-id', 'mcp-protocol-version', 'last-event-id', 'content-type', 'accept',\n]);\n\n/** Copy fixed headers, rejecting case-insensitive credential/transport conflicts. */\nexport function mergeMCPHeaders(base: Readonly<Record<string, string>>, custom?: Readonly<Record<string, string>>): Record<string, string> {\n const result = { ...base };\n if (custom === undefined) return result;\n if (!custom || typeof custom !== 'object' || Array.isArray(custom)) throw new ConfigError('MCP headers must be an object');\n const protectedNames = new Set([...Object.keys(base).map((name) => name.toLowerCase()), ...transportHeaders, 'authorization']);\n const seen = new Set<string>();\n for (const [name, value] of Object.entries(custom)) {\n if (!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) throw new ConfigError('Invalid MCP header name');\n if (typeof value !== 'string' || /[\\x00-\\x1f\\x7f]/.test(value)) throw new ConfigError('MCP header values must be strings without control characters');\n const folded = name.toLowerCase();\n if (protectedNames.has(folded)) throw new ConfigError(`MCP header is protected: ${folded}`);\n if (seen.has(folded)) throw new ConfigError(`Duplicate MCP header: ${folded}`);\n seen.add(folded);\n Object.defineProperty(result, folded, { value, enumerable: true, configurable: true, writable: true });\n }\n return result;\n}\n"],"mappings":";;;;;;;;;AAAA,SAAS,cAAc;AACvB,SAAS,qCAAqC;AAC9C,SAAS,0BAA0B;AACnC,SAAS,4BAAwD;AAEjE,SAAS,sBAAsB,UAAU,iBAAsC;AAC/E,SAAS,eAAe;;;ACJxB,IAAM,mBAAmB,oBAAI,IAAI;AAAA,EAC/B;AAAA,EAAQ;AAAA,EAAkB;AAAA,EAAc;AAAA,EAAqB;AAAA,EAC7D;AAAA,EAAkB;AAAA,EAAwB;AAAA,EAAiB;AAAA,EAAgB;AAC7E,CAAC;AAGM,SAAS,gBAAgB,MAAwC,QAAmE;AACzI,QAAM,SAAS,EAAE,GAAG,KAAK;AACzB,MAAI,WAAW,OAAW,QAAO;AACjC,MAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,EAAG,OAAM,IAAI,YAAY,+BAA+B;AACzH,QAAM,iBAAiB,oBAAI,IAAI,CAAC,GAAG,OAAO,KAAK,IAAI,EAAE,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC,GAAG,GAAG,kBAAkB,eAAe,CAAC;AAC7H,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,QAAI,CAAC,gCAAgC,KAAK,IAAI,EAAG,OAAM,IAAI,YAAY,yBAAyB;AAChG,QAAI,OAAO,UAAU,YAAY,kBAAkB,KAAK,KAAK,EAAG,OAAM,IAAI,YAAY,8DAA8D;AACpJ,UAAM,SAAS,KAAK,YAAY;AAChC,QAAI,eAAe,IAAI,MAAM,EAAG,OAAM,IAAI,YAAY,4BAA4B,MAAM,EAAE;AAC1F,QAAI,KAAK,IAAI,MAAM,EAAG,OAAM,IAAI,YAAY,yBAAyB,MAAM,EAAE;AAC7E,SAAK,IAAI,MAAM;AACf,WAAO,eAAe,QAAQ,QAAQ,EAAE,OAAO,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;AAAA,EACvG;AACA,SAAO;AACT;;;ADKO,SAAS,aAAa,YAAoB,IAAoB;AACnE,QAAM,UAAU,WAAW,QAAQ,QAAQ,EAAE,EAAE,QAAQ,0BAA0B,EAAE;AACnF,SAAO,GAAG,OAAO,gBAAgB,mBAAmB,EAAE,CAAC;AACzD;AAEO,IAAM,YAAN,MAAM,WAAU;AAAA,EASb,YAA6B,SAA2B,YAA4B;AAAvD;AACnC,SAAK,aAAa;AAClB,SAAK,SAAS,QAAQ,UAAU;AAChC,SAAK,WAAW,EAAE,WAAW,QAAQ,aAAa,KAAQ,YAAY,QAAQ,cAAc,KAAQ,QAAQ,QAAQ,UAAU,IAAQ;AACtI,QAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,OAAO,SAAS,OAAO,KAAK,WAAW,CAAC,EAAG,OAAM,IAAI,YAAY,yCAAyC;AAC9J,QAAI,QAAQ,cAAc,SAAS;AACjC,UAAI;AACJ,UAAI;AAAE,cAAM,IAAI,IAAI,QAAQ,GAAG;AAAA,MAAG,QAAQ;AAAE,cAAM,IAAI,YAAY,gCAAgC;AAAA,MAAG;AACrG,UAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,SAAS,IAAI,QAAQ,EAAG,OAAM,IAAI,YAAY,gCAAgC;AACvG,UAAI,QAAQ,cAAc,UAAa,CAAC,CAAC,mBAAmB,KAAK,EAAE,SAAS,QAAQ,SAAS,EAAG,OAAM,IAAI,YAAY,sDAAsD;AAAA,IAC9K;AACA,SAAK,OAAO,KAAK,gCAAgC,EAAE,MAAM,aAAa,YAAY,UAAU,WAAW,QAAQ,aAAa,mBAAmB,KAAK,KAAK,QAAQ,CAAC;AAAA,EACpK;AAAA,EAZqC;AAAA,EAR5B;AAAA,EACQ;AAAA,EACT;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACS;AAAA,EAejB,OAAO,SAAS,QAAqB,YAA2B,UAE5D,CAAC,GAAc;AACjB,UAAM,EAAE,SAAS,QAAQ,2BAA2B,GAAG,kBAAkB,IAAI;AAC7E,UAAM,gBAAgB,gBAAgB,CAAC,GAAG,MAAM;AAChD,UAAM,UAAU,gBAAgB,OAAO,gBAAgB,MAAM;AAC7D,WAAO,IAAI,WAAU,EAAE,GAAG,mBAAmB,KAAK,aAAa,OAAO,eAAe,WAAW,WAAW,GAAG,WAAW,mBAAmB,iBAAiB,YAAY;AACvK,UAAI,CAAC,0BAA2B,QAAO;AACvC,YAAM,QAAQ,gBAAgB,OAAO,gBAAgB,MAAM,0BAA0B,CAAC;AACtF,aAAO,gBAAgB,OAAO,aAAa;AAAA,IAC7C,EAAE,GAAG,UAAU;AAAA,EACjB;AAAA,EACA,OAAO,OAAO,SAAsC;AAAE,WAAO,IAAI,WAAU,OAAO;AAAA,EAAG;AAAA,EAErF,MAAM,UAAU,UAA0B,CAAC,GAAoB;AAC7D,WAAO,KAAK,YAAY,cAAc,OAAO,YAAY;AACvD,YAAM,cAAiE,CAAC;AACxE,UAAI;AACJ,YAAM,WAAW,YAAY,QAAQ,KAAK,SAAS,UAAU;AAC7D,YAAM,SAAS,YAAY,IAAI,CAAC,UAAU,GAAI,QAAQ,SAAS,CAAC,QAAQ,MAAM,IAAI,CAAC,CAAE,CAAC;AACtF,SAAG;AACD,cAAM,SAAS,MAAM,QAAQ,OAAO,UAAU,SAAS,EAAE,OAAO,IAAI,QAAW,EAAE,QAAQ,SAAS,KAAK,SAAS,WAAW,CAAC;AAC5H,oBAAY,KAAK,GAAG,OAAO,KAAK;AAAG,iBAAS,OAAO;AAAA,MACrD,SAAS;AACT,aAAO,YAAY,IAAI,CAAC,eAAe,IAAI,KAAK;AAAA,QAAE,MAAM,WAAW;AAAA,QAAM,aAAa,WAAW,eAAe;AAAA,QAAI,YAAY,WAAW;AAAA,QACzI,QAAQ,CAAC,eAAe,KAAK,SAAS,WAAW,MAAM,UAAU;AAAA,MACnE,CAAC,CAAC;AAAA,IACJ,CAAC;AAAA,EACH;AAAA,EACA,MAAM,MAAM,UAA0B,CAAC,GAAoB;AAAE,WAAO,KAAK,UAAU,OAAO;AAAA,EAAG;AAAA,EAC7F,MAAM,SAAS,MAAc,YAA2B,UAA0B,CAAC,GAA4B;AAC7G,WAAO,KAAK,YAAY,aAAa,CAAC,YAAY,QAAQ,OAAO;AAAA,MAAS,EAAE,MAAM,WAAW,WAAW;AAAA,MAAG;AAAA,MACzG,EAAE,SAAS,KAAK,SAAS,QAAQ,QAAQ,QAAQ,OAAO;AAAA,IAAC,CAA4B;AAAA,EACzF;AAAA,EAEA,QAAuB;AACrB,QAAI,KAAK,QAAS,QAAO,KAAK;AAC9B,SAAK,SAAS;AACd,SAAK,WAAW,YAAY;AAC1B,UAAI,KAAK,WAAW,KAAK,MAAO,MAAK,MAAM,MAAM,MAAM;AACvD,YAAM,KAAK,SAAS,MAAM,MAAM,MAAS;AACzC,UAAI,KAAK,MAAO,OAAM,KAAK,OAAO,KAAK,KAAK;AAAA,IAC9C,GAAG;AACH,WAAO,KAAK;AAAA,EACd;AAAA,EACA,CAAC,QAAQ,MAAM,IAAY;AAAE,WAAO,iBAAiB,KAAK,OAAO;AAAA,EAAiB;AAAA,EAClF,SAAiB;AAAE,WAAO,KAAK,QAAQ,MAAM,EAAE;AAAA,EAAG;AAAA,EAElD,IAAY,UAAkB;AAC5B,QAAI,KAAK,QAAQ,cAAc,QAAS,QAAO;AAC/C,UAAM,MAAM,IAAI,IAAI,KAAK,QAAQ,GAAG;AAAG,WAAO,GAAG,IAAI,MAAM,GAAG,IAAI,QAAQ;AAAA,EAC5E;AAAA,EACA,MAAc,UAA4B;AACxC,eAAS;AACP,UAAI,KAAK,OAAQ,OAAM,IAAI,MAAM,sBAAsB;AACvD,UAAI,KAAK,QAAS,QAAO,KAAK;AAC9B,UAAI,KAAK,OAAO,SAAS;AAAE,cAAM,KAAK,OAAO,KAAK,KAAK;AAAG;AAAA,MAAU;AACpE,UAAI,KAAK,MAAO,QAAO,KAAK;AAC5B,YAAM,UAAU,KAAK,KAAK;AAAG,WAAK,UAAU;AAC5C,UAAI;AAAE,eAAO,MAAM;AAAA,MAAS,UAAE;AAAU,aAAK,UAAU;AAAA,MAAW;AAAA,IACpE;AAAA,EACF;AAAA,EACA,MAAc,OAAyB;AACrC,UAAM,SAAS,IAAI,OAAO,EAAE,MAAM,iBAAiB,SAAS,QAAQ,CAAC;AACrE,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI;AACJ,QAAI,KAAK,QAAQ,cAAc,QAAS,aAAY,IAAI,qBAAqB,KAAK,QAAQ,MAAM;AAAA,SAC3F;AACH,YAAM,UAAU,MAAM,KAAK,QAAQ,kBAAkB,KAAK,CAAC;AAC3D,YAAM,QAAiC,CAAC,OAAO,SAAS,WAAW,MAAM,OAAO,EAAE,GAAG,MAAM,UAAU,UAAU,QAAQ,YAAY,IAAI,CAAC,MAAM,QAAQ,GAAI,MAAM,SAAS,CAAC,KAAK,MAAM,IAAI,CAAC,CAAE,CAAC,EAAE,CAAC;AAChM,kBAAY,KAAK,QAAQ,cAAc,QACnC,IAAI,mBAAmB,IAAI,IAAI,KAAK,QAAQ,GAAG,GAAG,EAAE,aAAa,EAAE,QAAQ,GAAG,MAAM,CAAC,IACrF,IAAI,8BAA8B,IAAI,IAAI,KAAK,QAAQ,GAAG,GAAG,EAAE,aAAa,EAAE,QAAQ,GAAG,MAAM,CAAC;AAAA,IACtG;AACA,UAAM,UAAmB,EAAE,QAAQ,WAAW,OAAO,SAAS,OAAO,QAAQ,oBAAI,IAAI,EAAE;AACvF,SAAK,QAAQ;AACb,UAAM,QAAQ,WAAW,MAAM,MAAM,MAAM,IAAI,MAAM,4BAA4B,CAAC,GAAG,KAAK,SAAS,SAAS;AAC5G,WAAO,UAAU,MAAM;AAAE,cAAQ,UAAU;AAAA,IAAM;AACjD,WAAO,UAAU,CAAC,UAAU;AAC1B,UAAI,KAAK,UAAU,QAAQ,QAAS;AACpC,cAAQ,UAAU;AAClB,WAAK,OAAO,KAAK,+BAA+B,EAAE,KAAK,KAAK,SAAS,WAAW,MAAM,KAAK,CAAC;AAAA,IAC9F;AACA,SAAK,OAAO,KAAK,sCAAsC,EAAE,KAAK,KAAK,SAAS,WAAW,KAAK,SAAS,UAAU,CAAC;AAChH,QAAI;AACF,YAAM,OAAO,QAAQ,WAAW,EAAE,QAAQ,MAAM,QAAQ,SAAS,KAAK,SAAS,UAAU,CAAC;AAC1F,YAAM,OAAO,eAAe;AAC5B,UAAI,KAAK,OAAQ,OAAM,IAAI,MAAM,sBAAsB;AACvD,WAAK,OAAO,KAAK,wCAAwC,EAAE,KAAK,KAAK,QAAQ,CAAC;AAC9E,aAAO;AAAA,IACT,SAAS,OAAO;AAAE,YAAM,KAAK,OAAO,OAAO;AAAG,YAAM;AAAA,IAAO,UAC3D;AAAU,mBAAa,KAAK;AAAA,IAAG;AAAA,EACjC;AAAA,EAEA,MAAc,YAAe,WAAmB,MAAoD;AAClG,UAAM,UAAU,MAAM,KAAK,QAAQ;AACnC,QAAI,KAAK,OAAQ,OAAM,IAAI,MAAM,sBAAsB;AACvD,UAAM,UAAU,KAAK,OAAO;AAAG,YAAQ,OAAO,IAAI,OAAO;AACzD,SAAK,OAAO,KAAK,iCAAiC,EAAE,WAAW,KAAK,KAAK,QAAQ,CAAC;AAClF,QAAI;AAAE,YAAM,SAAS,MAAM;AAAS,WAAK,OAAO,KAAK,mCAAmC,EAAE,WAAW,KAAK,KAAK,QAAQ,CAAC;AAAG,aAAO;AAAA,IAAQ,SACnI,OAAO;AACZ,UAAI,EAAE,iBAAiB,aAAa,CAAC,UAAU,kBAAkB,UAAU,cAAc,EAAE,SAAS,MAAM,IAAI,EAAG,SAAQ,UAAU;AACnI,WAAK,OAAO,KAAK,gCAAgC,EAAE,WAAW,KAAK,KAAK,SAAS,WAAW,iBAAiB,QAAQ,MAAM,OAAO,UAAU,CAAC;AAC7I,YAAM;AAAA,IACR,UAAE;AAAU,cAAQ,OAAO,OAAO,OAAO;AAAA,IAAG;AAAA,EAC9C;AAAA,EACQ,OAAO,SAAiC;AAC9C,QAAI,QAAQ,QAAS,QAAO,QAAQ;AACpC,YAAQ,UAAU;AAClB,YAAQ,WAAW,YAAY;AAC7B,YAAM,QAAQ,WAAW,CAAC,GAAG,QAAQ,MAAM,CAAC;AAC5C,cAAQ,MAAM,MAAM;AACpB,UAAI;AAAE,cAAM,QAAQ,OAAO,MAAM;AAAA,MAAG,SAC7B,OAAO;AAAE,aAAK,OAAO,KAAK,sCAAsC,EAAE,WAAW,iBAAiB,QAAQ,MAAM,OAAO,WAAW,KAAK,KAAK,QAAQ,CAAC;AAAA,MAAG;AAC3J,UAAI,KAAK,UAAU,QAAS,MAAK,QAAQ;AAAA,IAC3C,GAAG;AACH,WAAO,QAAQ;AAAA,EACjB;AACF;","names":[]}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
HIGH_CODE_SDK_PURPOSE
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import {
|
|
5
|
-
nullLogger
|
|
6
|
-
} from "./chunk-NZL3VPJ2.js";
|
|
3
|
+
} from "./chunk-76NTQYJB.js";
|
|
7
4
|
import {
|
|
8
5
|
AddMemoriesOutcomeUnknownError,
|
|
9
6
|
MemoryAPIError,
|
|
10
7
|
MemoryContractError,
|
|
11
8
|
MemoryValidationError,
|
|
12
|
-
ResourceNotConfiguredError
|
|
13
|
-
|
|
9
|
+
ResourceNotConfiguredError,
|
|
10
|
+
nullLogger
|
|
11
|
+
} from "./chunk-AEQ76QIO.js";
|
|
14
12
|
|
|
15
13
|
// src/memory/transport.ts
|
|
16
14
|
import Client from "@alicloud/agentcore20260804";
|
|
@@ -79,7 +77,8 @@ var MemoryTransport = class {
|
|
|
79
77
|
const details = {
|
|
80
78
|
serviceCode: text(payload.code),
|
|
81
79
|
httpStatusCode: integer(payload.httpStatusCode) ?? integer(response.statusCode),
|
|
82
|
-
requestId: text(payload.requestId) ??
|
|
80
|
+
requestId: text(payload.requestId) ?? headerRequestId(response.headers),
|
|
81
|
+
serviceMessage: text(payload.message)
|
|
83
82
|
};
|
|
84
83
|
try {
|
|
85
84
|
if ((integer(response.statusCode) ?? 0) >= 400 || payload.success === false) {
|
|
@@ -88,7 +87,7 @@ var MemoryTransport = class {
|
|
|
88
87
|
if (payload.success !== true) throw new MemoryContractError(operation, "body.success must be true");
|
|
89
88
|
return map(payload);
|
|
90
89
|
} catch (cause) {
|
|
91
|
-
const error = add && cause instanceof MemoryContractError ? new AddMemoriesOutcomeUnknownError(operation, details) : cause;
|
|
90
|
+
const error = add && cause instanceof MemoryContractError ? new AddMemoriesOutcomeUnknownError(operation, { ...details, serviceMessage: details.serviceMessage ?? cause.detail }) : cause;
|
|
92
91
|
if (error instanceof MemoryAPIError || error instanceof MemoryContractError) this.logFailure(error);
|
|
93
92
|
throw error;
|
|
94
93
|
}
|
|
@@ -98,9 +97,10 @@ var MemoryTransport = class {
|
|
|
98
97
|
operation: error.operation,
|
|
99
98
|
memory_store_name: this.store,
|
|
100
99
|
error_type: error.name,
|
|
101
|
-
status: error instanceof MemoryAPIError ? error.httpStatusCode :
|
|
102
|
-
service_code: error instanceof MemoryAPIError ? error.serviceCode :
|
|
103
|
-
request_id: error instanceof MemoryAPIError ? error.requestId :
|
|
100
|
+
status: error instanceof MemoryAPIError ? error.httpStatusCode ?? "-" : "-",
|
|
101
|
+
service_code: error instanceof MemoryAPIError ? error.serviceCode ?? "-" : "-",
|
|
102
|
+
request_id: error instanceof MemoryAPIError ? error.requestId ?? "-" : "-",
|
|
103
|
+
message: error instanceof MemoryAPIError ? error.serviceMessage ?? "-" : error.detail
|
|
104
104
|
});
|
|
105
105
|
}
|
|
106
106
|
};
|
|
@@ -108,11 +108,14 @@ function record(value) {
|
|
|
108
108
|
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
109
109
|
}
|
|
110
110
|
function text(value) {
|
|
111
|
-
return typeof value === "string" && value ? value : void 0;
|
|
111
|
+
return typeof value === "string" && value && value !== "undefined" ? value : void 0;
|
|
112
112
|
}
|
|
113
113
|
function integer(value) {
|
|
114
114
|
return typeof value === "number" && Number.isInteger(value) ? value : void 0;
|
|
115
115
|
}
|
|
116
|
+
function headerRequestId(headers) {
|
|
117
|
+
return text(Object.entries(record(headers)).find(([key]) => key.toLowerCase() === "x-acs-request-id")?.[1]);
|
|
118
|
+
}
|
|
116
119
|
function errorDetails(error) {
|
|
117
120
|
let current = record(error);
|
|
118
121
|
const result = {};
|
|
@@ -121,7 +124,8 @@ function errorDetails(error) {
|
|
|
121
124
|
const response = record(current.response);
|
|
122
125
|
result.serviceCode ??= text(current.code) ?? text(data.code) ?? text(data.Code);
|
|
123
126
|
result.httpStatusCode ??= integer(current.statusCode) ?? integer(data.statusCode) ?? integer(data.StatusCode) ?? integer(response.statusCode);
|
|
124
|
-
result.requestId ??= text(current.requestId) ?? text(data.requestId) ?? text(data.RequestId) ??
|
|
127
|
+
result.requestId ??= text(current.requestId) ?? text(data.requestId) ?? text(data.RequestId) ?? headerRequestId(data.headers) ?? headerRequestId(response.headers);
|
|
128
|
+
result.serviceMessage ??= text(data.message) ?? text(data.Message) ?? text(current.message);
|
|
125
129
|
if (!current.innerException) break;
|
|
126
130
|
current = record(current.innerException);
|
|
127
131
|
}
|
|
@@ -303,4 +307,4 @@ export {
|
|
|
303
307
|
MemoryStore,
|
|
304
308
|
validateScope
|
|
305
309
|
};
|
|
306
|
-
//# sourceMappingURL=chunk-
|
|
310
|
+
//# sourceMappingURL=chunk-6EJFZSYH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/memory/transport.ts","../src/memory/client.ts"],"sourcesContent":["import Client from '@alicloud/agentcore20260804';\nimport { $OpenApiUtil, OpenApiUtil } from '@alicloud/openapi-core';\nimport * as Dara from '@darabonba/typescript';\nimport { RuntimeOptions } from '@darabonba/typescript';\nimport type { AccessKeyCredential, CredentialProvider } from '../auth/access-key';\nimport { HIGH_CODE_SDK_PURPOSE } from '../auth/resource-sts';\nimport { AddMemoriesOutcomeUnknownError, MemoryAPIError, MemoryContractError, ResourceNotConfiguredError, type MemoryErrorDetails } from '../errors';\nimport { nullLogger, type Logger } from '../logging';\n\nconst GeneratedClient = typeof Client === 'function' ? Client : (Client as unknown as { default: typeof Client }).default;\n// CJS exposes URL directly; native ESM only exposes it on module.exports/default.\nconst DaraURL = Dara.URL ?? (Dara as unknown as { default: typeof Dara }).default.URL;\nexport interface MemoryRuntime {\n workspaceId: string;\n regionId: string;\n endpoint?: string;\n accessKeyCredential?: AccessKeyCredential;\n resourceSTS?: CredentialProvider;\n}\nexport type MemoryOperation = 'AddMemories' | 'SearchMemories' | 'ListMemories' | 'GetMemory' | 'UpdateMemory' | 'DeleteMemory' | 'ListMemorySessions' | 'ListMemorySessionMessages';\nexport const pathComponent = (value: string): string => DaraURL.percentEncode(value);\n\n/** Memory methods absent from the public generated package, using its existing POP transport. */\nexport class MemoryTransport {\n constructor(private readonly store: string, private readonly runtime: () => Promise<MemoryRuntime>, private readonly logger: Logger = nullLogger) {}\n async request<T>(operation: MemoryOperation, method: string, path: string, map: (body: Record<string, unknown>) => T,\n body?: Record<string, unknown>, query?: Record<string, unknown>): Promise<T> {\n const runtime = await this.runtime();\n const credential = runtime.accessKeyCredential ?? await runtime.resourceSTS?.get(HIGH_CODE_SDK_PURPOSE);\n if (!credential) throw new ResourceNotConfiguredError('AgentCore Memory data-plane credentials are not configured');\n const url = runtime.endpoint ? new URL(runtime.endpoint.includes('://') ? runtime.endpoint : `https://${runtime.endpoint}`) : undefined;\n const client = new GeneratedClient(new $OpenApiUtil.Config({ accessKeyId: credential.accessKeyId, accessKeySecret: credential.accessKeySecret,\n securityToken: credential.securityToken, regionId: runtime.regionId, endpoint: url?.host, protocol: url?.protocol.slice(0, -1) }));\n const params = new $OpenApiUtil.Params({ action: operation, version: '2026-08-04', protocol: 'HTTPS',\n pathname: `/workspaces/${pathComponent(runtime.workspaceId)}/memorystores/${pathComponent(this.store)}${path}`,\n method, authType: 'AK', style: 'ROA', reqBodyType: body === undefined ? 'json' : 'formData', bodyType: 'json' });\n // The generated Python contract wraps JSON in the form field `body`.\n const request = new $OpenApiUtil.OpenApiRequest({ headers: {}, query: OpenApiUtil.query(query ?? {}),\n body: body === undefined ? undefined : { body: JSON.stringify(body) } });\n const add = operation === 'AddMemories';\n let raw: unknown;\n this.logger.debug('agentcore.memory.request.started', { operation, memory_store_name: this.store });\n try {\n // httpx also uses connectTimeout as socket inactivity timeout while awaiting the response.\n raw = await client.callApi(params, request, new RuntimeOptions({ autoretry: false, maxAttempts: 1,\n connectTimeout: add ? 120_000 : undefined, readTimeout: add ? 120_000 : undefined }));\n } catch (cause) {\n const details = errorDetails(cause);\n const error = add && (details.httpStatusCode === undefined || details.httpStatusCode >= 500)\n ? new AddMemoriesOutcomeUnknownError(operation, details) : new MemoryAPIError(operation, details);\n this.logFailure(error); throw error;\n }\n const response = record(raw); const payload = record(response.body);\n const details: MemoryErrorDetails = { serviceCode: text(payload.code), httpStatusCode: integer(payload.httpStatusCode) ?? integer(response.statusCode),\n requestId: text(payload.requestId) ?? headerRequestId(response.headers), serviceMessage: text(payload.message) };\n try {\n if ((integer(response.statusCode) ?? 0) >= 400 || payload.success === false) {\n throw add && (details.httpStatusCode ?? 0) >= 500 ? new AddMemoriesOutcomeUnknownError(operation, details) : new MemoryAPIError(operation, details);\n }\n if (payload.success !== true) throw new MemoryContractError(operation, 'body.success must be true');\n return map(payload);\n } catch (cause) {\n const error = add && cause instanceof MemoryContractError\n ? new AddMemoriesOutcomeUnknownError(operation, { ...details, serviceMessage: details.serviceMessage ?? cause.detail }) : cause;\n if (error instanceof MemoryAPIError || error instanceof MemoryContractError) this.logFailure(error);\n throw error;\n }\n }\n private logFailure(error: MemoryAPIError | MemoryContractError): void {\n this.logger.warn('agentcore.memory.request.failed', { operation: error.operation, memory_store_name: this.store, error_type: error.name,\n status: error instanceof MemoryAPIError ? error.httpStatusCode ?? '-' : '-',\n service_code: error instanceof MemoryAPIError ? error.serviceCode ?? '-' : '-',\n request_id: error instanceof MemoryAPIError ? error.requestId ?? '-' : '-',\n message: error instanceof MemoryAPIError ? error.serviceMessage ?? '-' : error.detail });\n }\n}\nexport function record(value: unknown): Record<string, unknown> { return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : {}; }\n// The generated client stringifies missing error fields as \"undefined\".\nfunction text(value: unknown): string | undefined { return typeof value === 'string' && value && value !== 'undefined' ? value : undefined; }\nfunction integer(value: unknown): number | undefined { return typeof value === 'number' && Number.isInteger(value) ? value : undefined; }\nfunction headerRequestId(headers: unknown): string | undefined {\n return text(Object.entries(record(headers)).find(([key]) => key.toLowerCase() === 'x-acs-request-id')?.[1]);\n}\nfunction errorDetails(error: unknown): MemoryErrorDetails {\n let current = record(error); const result: MemoryErrorDetails = {};\n for (let i = 0; i < 4; i++) {\n const data = record(current.data); const response = record(current.response);\n result.serviceCode ??= text(current.code) ?? text(data.code) ?? text(data.Code);\n result.httpStatusCode ??= integer(current.statusCode) ?? integer(data.statusCode) ?? integer(data.StatusCode) ?? integer(response.statusCode);\n result.requestId ??= text(current.requestId) ?? text(data.requestId) ?? text(data.RequestId)\n ?? headerRequestId(data.headers) ?? headerRequestId(response.headers);\n result.serviceMessage ??= text(data.message) ?? text(data.Message) ?? text(current.message);\n if (!current.innerException) break;\n current = record(current.innerException);\n }\n return result;\n}\n","import { MemoryContractError, MemoryValidationError } from '../errors';\nimport type { Logger } from '../logging';\nimport { MemoryTransport, pathComponent, record, type MemoryRuntime, type MemoryOperation } from './transport';\nimport type { AddMemoriesOptions, AddMemoriesResult, ListMemoriesOptions, ListMemorySessionsOptions, ListMemorySessionMessagesOptions, Memory, MemoryMessage, MemoryScope, MemorySession,\n Page, PageOptions, SearchMemoriesOptions, SearchMemoriesResult, UpdateMemoryOptions } from './models';\n\n/** A local binding to an existing MemoryStore. No lookup or creation at construction. */\nexport class MemoryStore {\n readonly memoryStoreName: string;\n private readonly transport: MemoryTransport;\n constructor(name: string, options: { runtime: () => Promise<MemoryRuntime>; logger?: Logger }) {\n this.memoryStoreName = required(name, 'memoryStoreName');\n this.transport = new MemoryTransport(name, options.runtime, options.logger);\n }\n async addMemories(options: AddMemoriesOptions): Promise<AddMemoriesResult> {\n const scope = validateScope(options.scope);\n const hasText = options.text !== undefined; const hasMessages = options.messages !== undefined;\n if (hasText === hasMessages) throw new MemoryValidationError('exactly one of text or messages must be provided');\n const text = hasText ? required(options.text, 'text') : undefined;\n let messages: MemoryMessage[] | undefined;\n if (hasMessages) {\n if (!Array.isArray(options.messages) || !options.messages.length) throw new MemoryValidationError('messages must be a non-empty array');\n messages = options.messages.map((message) => ({ role: required(message?.role, 'messages[].role'), content: required(message?.content, 'messages[].content') }));\n }\n const metadata = validateMetadata(options.metadata);\n return this.transport.request('AddMemories', 'POST', '/memories', (body) => Object.freeze({ memoryIds: Object.freeze(array(record(body.data).memories, 'AddMemories', 'data.memories').map((item) =>\n string(record(item).memoryId, 'AddMemories', 'data.memories[].memoryId', true))) }), { scope, text, messages, metadata });\n }\n async searchMemories(query: string, options: SearchMemoriesOptions = {}): Promise<SearchMemoriesResult> {\n required(query, 'query'); const scope = validateScope(options.scope);\n bounded(options.topK, 'topK', 50); const metadata = validateMetadata(options.metadata);\n if (options.enableRerank !== undefined && typeof options.enableRerank !== 'boolean') throw new MemoryValidationError('enableRerank must be a boolean');\n for (const key of ['minScore', 'minSimilarity'] as const) if (options[key] !== undefined && (typeof options[key] !== 'number' || !Number.isFinite(options[key]))) throw new MemoryValidationError(`${key} must be a finite number`);\n return this.transport.request('SearchMemories', 'POST', '/memories/search', (body) => Object.freeze({ memories: Object.freeze(array(record(body.data).memories, 'SearchMemories', 'data.memories').map((item) => {\n const hit = record(item);\n if (typeof hit.score !== 'number' || typeof hit.similarity !== 'number') throw new MemoryContractError('SearchMemories', 'score and similarity must be numbers');\n return Object.freeze({ memory: parseMemory(hit.memory, 'SearchMemories'), score: hit.score, similarity: hit.similarity });\n })) }), { query, scope, topK: options.topK, metadata, enableRerank: options.enableRerank, minScore: options.minScore, minSimilarity: options.minSimilarity });\n }\n async listMemories(options: ListMemoriesOptions = {}): Promise<Page<Memory>> {\n optionalScopeString(options.userId, 'userId'); optionalScopeString(options.agentId, 'agentId'); optionalScopeString(options.sessionId, 'sessionId');\n validatePage(options);\n return this.transport.request('ListMemories', 'GET', '/memories', (body) => page(body, 'ListMemories', (item) => parseMemory(item, 'ListMemories')),\n undefined, { userId: options.userId, agentId: options.agentId, sessionId: options.sessionId, maxResults: options.maxResults, nextToken: options.nextToken });\n }\n async getMemory(memoryId: string): Promise<Memory> {\n required(memoryId, 'memoryId');\n return this.transport.request('GetMemory', 'GET', `/memories/${pathComponent(memoryId)}`, (body) => parseMemory(body.data, 'GetMemory'));\n }\n async updateMemory(memoryId: string, options: UpdateMemoryOptions): Promise<Memory> {\n required(memoryId, 'memoryId');\n if (options.text === undefined && options.metadata === undefined) throw new MemoryValidationError('at least one of text or metadata must be provided');\n optional(options.text, 'text'); const metadata = validateMetadata(options.metadata);\n return this.transport.request('UpdateMemory', 'PUT', `/memories/${pathComponent(memoryId)}`, (body) => parseMemory(body.data, 'UpdateMemory'), { text: options.text, metadata });\n }\n async deleteMemory(memoryId: string): Promise<void> {\n required(memoryId, 'memoryId');\n return this.transport.request('DeleteMemory', 'DELETE', `/memories/${pathComponent(memoryId)}`, () => undefined);\n }\n async listMemorySessions(options: ListMemorySessionsOptions = {}): Promise<Page<MemorySession>> {\n optionalScopeString(options.userId, 'userId'); optionalScopeString(options.agentId, 'agentId'); validatePage(options);\n return this.transport.request('ListMemorySessions', 'GET', '/sessions', (body) => page(body, 'ListMemorySessions', (item) => {\n const session = Object.freeze({\n agentId: optionalString(record(item).agentId, 'ListMemorySessions', 'items[].agentId'),\n sessionId: optionalString(record(item).sessionId, 'ListMemorySessions', 'items[].sessionId'),\n userId: optionalString(record(item).userId, 'ListMemorySessions', 'items[].userId'),\n });\n if (session.userId === undefined && session.agentId === undefined && session.sessionId === undefined) throw new MemoryContractError('ListMemorySessions', 'items[] must contain at least one scope field');\n return session;\n }), undefined, { userId: options.userId, agentId: options.agentId, maxResults: options.maxResults, nextToken: options.nextToken });\n }\n async listMemorySessionMessages(sessionId: string, options: ListMemorySessionMessagesOptions = {}): Promise<Page<MemoryMessage>> {\n required(sessionId, 'sessionId'); optionalScopeString(sessionId, 'sessionId');\n optionalScopeString(options.userId, 'userId'); optionalScopeString(options.agentId, 'agentId');\n if (options.userId === undefined && options.agentId === undefined) throw new MemoryValidationError('at least one of userId or agentId must be provided');\n validatePage(options);\n return this.transport.request('ListMemorySessionMessages', 'GET', '/messages',\n (body) => page(body, 'ListMemorySessionMessages', (item) => Object.freeze({\n role: string(record(item).role, 'ListMemorySessionMessages', 'items[].role', true),\n content: string(record(item).content, 'ListMemorySessionMessages', 'items[].content', true),\n })), undefined, { userId: options.userId, agentId: options.agentId, sessionId, maxResults: options.maxResults, nextToken: options.nextToken });\n }\n}\n\nfunction required(value: unknown, field: string): string {\n if (typeof value !== 'string' || !value.trim()) throw new MemoryValidationError(`${field} must be a non-empty string`);\n return value;\n}\nfunction optional(value: unknown, field: string): void { if (value !== undefined) required(value, field); }\nfunction bounded(value: unknown, field: string, maximum: number): void {\n if (value !== undefined && (typeof value !== 'number' || !Number.isInteger(value) || value < 1 || value > maximum)) throw new MemoryValidationError(`${field} must be an integer from 1 to ${maximum}`);\n}\nfunction optionalScopeString(value: unknown, field: string): void {\n if (value === undefined) return;\n if (['*', '__default__'].includes(required(value, field).trim())) throw new MemoryValidationError(`${field} must not use a reserved scope value`);\n}\nexport function validateScope(scope: MemoryScope | undefined): MemoryScope | undefined {\n if (scope === undefined) return undefined;\n if (!scope || typeof scope !== 'object' || Array.isArray(scope)) throw new MemoryValidationError('scope must be a MemoryScope');\n optionalScopeString(scope.userId, 'scope.userId'); optionalScopeString(scope.agentId, 'scope.agentId'); optionalScopeString(scope.sessionId, 'scope.sessionId');\n return { userId: scope.userId, agentId: scope.agentId, sessionId: scope.sessionId };\n}\nfunction validateMetadata(value: Readonly<Record<string, string>> | undefined): Record<string, string> | undefined {\n if (value === undefined) return undefined;\n if (!value || typeof value !== 'object' || Array.isArray(value) || Object.entries(value).some(([key, item]) => !key.trim() || typeof item !== 'string')) throw new MemoryValidationError('metadata must contain non-empty string keys and string values');\n return { ...value };\n}\nfunction validatePage(options: PageOptions): void {\n bounded(options.maxResults, 'maxResults', 100);\n if (options.nextToken !== undefined && typeof options.nextToken !== 'string') throw new MemoryValidationError('nextToken must be a string');\n}\nfunction array(value: unknown, operation: MemoryOperation, path: string): unknown[] {\n if (value === undefined || value === null) return [];\n if (!Array.isArray(value)) throw new MemoryContractError(operation, `${path} must be an array`);\n return value;\n}\nfunction string(value: unknown, operation: MemoryOperation, path: string, nonEmpty = false): string {\n if (typeof value !== 'string' || (nonEmpty && !value.trim())) throw new MemoryContractError(operation, `${path} must be ${nonEmpty ? 'a non-empty' : 'a'} string`);\n return value;\n}\nfunction optionalString(value: unknown, operation: MemoryOperation, path: string): string | undefined { return value === undefined || value === null ? undefined : string(value, operation, path); }\nfunction parseMemory(value: unknown, operation: MemoryOperation): Memory {\n const item = record(value); const scope = record(item.scope);\n const memoryId = string(item.memoryId, operation, 'memory.memoryId', true);\n const text = string(record(item.content).text, operation, 'memory.content.text');\n if (!item.scope || typeof item.scope !== 'object' || Array.isArray(item.scope)) throw new MemoryContractError(operation, 'memory.scope must be an object');\n let metadata: Readonly<Record<string, string>> | undefined;\n if (item.metadata !== undefined && item.metadata !== null) {\n if (typeof item.metadata !== 'object' || Array.isArray(item.metadata) || Object.entries(item.metadata).some(([key, value]) => !key.trim() || typeof value !== 'string')) throw new MemoryContractError(operation, 'memory.metadata must contain string keys and values');\n metadata = Object.freeze({ ...item.metadata as Record<string, string> });\n }\n return Object.freeze({ memoryId, content: Object.freeze({ text }), scope: Object.freeze({ agentId: optionalString(scope.agentId, operation, 'memory.scope.agentId'), sessionId: optionalString(scope.sessionId, operation, 'memory.scope.sessionId'), userId: optionalString(scope.userId, operation, 'memory.scope.userId') }),\n metadata, createdAt: optionalString(item.createdAt, operation, 'memory.createdAt'), updatedAt: optionalString(item.updatedAt, operation, 'memory.updatedAt') });\n}\nfunction page<T>(body: Record<string, unknown>, operation: MemoryOperation, parse: (item: unknown) => T): Page<T> {\n for (const key of ['maxResults', 'totalCount']) if (body[key] !== undefined && body[key] !== null && (typeof body[key] !== 'number' || !Number.isInteger(body[key]))) throw new MemoryContractError(operation, `body.${key} must be an integer`);\n return Object.freeze({ items: Object.freeze(array(body.items, operation, 'body.items').map(parse)), maxResults: body.maxResults == null ? undefined : body.maxResults as number,\n totalCount: body.totalCount == null ? undefined : body.totalCount as number, nextToken: optionalString(body.nextToken, operation, 'body.nextToken') || undefined });\n}\n"],"mappings":"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","names":["details","text","value"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ContextError
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AEQ76QIO.js";
|
|
4
4
|
|
|
5
5
|
// src/runtime/context.ts
|
|
6
6
|
import { AsyncLocalStorage } from "async_hooks";
|
|
@@ -32,4 +32,4 @@ export {
|
|
|
32
32
|
currentContext,
|
|
33
33
|
useContext
|
|
34
34
|
};
|
|
35
|
-
//# sourceMappingURL=chunk-
|
|
35
|
+
//# sourceMappingURL=chunk-6NNPSP3O.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ControllerClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AX3NM2DK.js";
|
|
4
4
|
import {
|
|
5
5
|
CredentialExchangeError
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-AEQ76QIO.js";
|
|
7
7
|
|
|
8
8
|
// src/auth/access-key.ts
|
|
9
9
|
import { inspect } from "util";
|
|
@@ -110,4 +110,4 @@ export {
|
|
|
110
110
|
AGENT_IDENTITY_DATA_PURPOSE,
|
|
111
111
|
ResourceSTSProvider
|
|
112
112
|
};
|
|
113
|
-
//# sourceMappingURL=chunk-
|
|
113
|
+
//# sourceMappingURL=chunk-76NTQYJB.js.map
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
httpUrl,
|
|
3
3
|
requiredString
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import {
|
|
6
|
-
nullLogger
|
|
7
|
-
} from "./chunk-NZL3VPJ2.js";
|
|
4
|
+
} from "./chunk-3JXIMUUY.js";
|
|
8
5
|
import {
|
|
9
6
|
ConfigError,
|
|
10
|
-
InvocationError
|
|
11
|
-
|
|
7
|
+
InvocationError,
|
|
8
|
+
nullLogger
|
|
9
|
+
} from "./chunk-AEQ76QIO.js";
|
|
12
10
|
|
|
13
11
|
// src/model/client.ts
|
|
14
12
|
import OpenAI from "openai";
|
|
@@ -295,4 +293,4 @@ export {
|
|
|
295
293
|
ModelClient,
|
|
296
294
|
ProviderModelClient
|
|
297
295
|
};
|
|
298
|
-
//# sourceMappingURL=chunk-
|
|
296
|
+
//# sourceMappingURL=chunk-7AJ2V7RN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/model/client.ts","../src/model/provider.ts"],"sourcesContent":["import OpenAI from 'openai';\nimport Anthropic from '@anthropic-ai/sdk';\nimport { inspect } from 'node:util';\nimport { ConfigError, InvocationError } from '../errors';\nimport { nullLogger, type Logger } from '../logging';\nimport { httpUrl, requiredString, type AgentConfig } from '../runtime/config';\nimport type { ModelDescriptor } from '../controlplane/client';\n\nexport type ModelProtocol = 'openai' | 'anthropic';\nexport type ModelMessage = { role: string; content?: unknown; [key: string]: unknown };\nexport type ModelParameters = Record<string, unknown>;\nexport type ModelResponse = Record<string, unknown>;\nexport type HeadersProvider = () => Readonly<Record<string, string>> | Promise<Readonly<Record<string, string>>>;\nexport interface ModelCallOptions { signal?: AbortSignal; }\nexport interface DirectModelOptions {\n model: string;\n baseURL: string;\n provider?: ModelProtocol;\n apiKey?: string;\n apiKeyProvider?: () => string | Promise<string>;\n headersProvider?: HeadersProvider;\n timeoutMs?: number;\n logger?: Logger;\n}\nexport interface ModelSettings {\n readonly model: string;\n readonly provider: ModelProtocol;\n readonly baseURL: string;\n readonly maxTokens?: number;\n}\n\nexport function managedModelProtocol(protocol: string): ModelProtocol {\n switch (protocol.trim().toLowerCase()) {\n case 'openai/v1': return 'openai';\n case 'anthropic': return 'anthropic';\n default: throw new ConfigError(`managed model protocol has no SDK adapter: ${protocol}`);\n }\n}\nexport function modelBaseURL(gatewayURL: string, connectionId: string, protocol: string): string {\n const provider = managedModelProtocol(protocol);\n const gateway = gatewayURL.replace(/\\/+$/, '').replace(/\\/v1$/, '').replace(/\\/model-connection$/, '');\n return `${gateway}/model-connection/${encodeURIComponent(connectionId)}${provider === 'openai' ? '/v1' : ''}`;\n}\n\nexport class ModelClient {\n readonly descriptor?: ModelDescriptor;\n readonly settings: ModelSettings;\n private readonly logger: Logger;\n private readonly openai?: OpenAI;\n private readonly anthropic?: Anthropic;\n private readonly lifetime = new AbortController();\n private readonly requestHeaders: HeadersProvider;\n\n private constructor(settings: ModelSettings, requestHeaders: HeadersProvider, descriptor: ModelDescriptor | undefined, logger: Logger, private readonly timeoutMs: number) {\n this.settings = Object.freeze(settings); this.requestHeaders = requestHeaders;\n this.descriptor = descriptor; this.logger = logger;\n const fetch = this.httpFetch.bind(this);\n // OpenAI requires a non-empty constructor key; our fetch always replaces it\n // with the current provider headers, so this marker is never transmitted.\n if (settings.provider === 'openai') this.openai = new OpenAI({ baseURL: settings.baseURL, apiKey: 'agentcore-transport', fetch, timeout: timeoutMs, maxRetries: 0 });\n else this.anthropic = new Anthropic({ baseURL: settings.baseURL, apiKey: null, authToken: '', defaultHeaders: { 'X-Api-Key': null, Authorization: null }, fetch, timeout: timeoutMs, maxRetries: 0 });\n this.logger.info('agentcore.model.client.created', { mode: descriptor ? 'managed' : 'direct', model: settings.model, provider: settings.provider, baseURL: settings.baseURL });\n }\n\n static platform(config: AgentConfig, descriptor: ModelDescriptor, options: { logger?: Logger; timeoutMs?: number } = {}): ModelClient {\n const provider = managedModelProtocol(descriptor.protocol);\n const headers = { ...config.gatewayHeaders };\n return new ModelClient({ model: descriptor.modelName, provider, baseURL: modelBaseURL(config.modelGatewayUrl, descriptor.connectionId, descriptor.protocol), maxTokens: descriptor.maxTokens },\n () => headers, descriptor, options.logger ?? nullLogger, options.timeoutMs ?? 600_000);\n }\n static direct(options: DirectModelOptions): ModelClient {\n if (options.apiKey !== undefined && options.apiKeyProvider !== undefined) throw new ConfigError('apiKey and apiKeyProvider are mutually exclusive');\n const provider = options.provider ?? 'openai';\n if (provider !== 'openai' && provider !== 'anthropic') throw new ConfigError(`direct model protocol has no SDK adapter: ${provider}`);\n const model = requiredString(options.model, 'model'); const baseURL = httpUrl(options.baseURL, 'direct model baseURL');\n const resolve = async () => {\n const headers: Record<string, string> = {};\n const key = options.apiKeyProvider ? requiredString(await options.apiKeyProvider(), 'apiKeyProvider result') : options.apiKey;\n if (key) headers[provider === 'openai' ? 'authorization' : 'x-api-key'] = provider === 'openai' ? `Bearer ${key}` : key;\n Object.assign(headers, await options.headersProvider?.());\n return headers;\n };\n return new ModelClient({ model, baseURL, provider }, resolve, undefined, options.logger ?? nullLogger, options.timeoutMs ?? 600_000);\n }\n\n /** Headers are resolved for framework transports as well as direct API calls. */\n async headers(): Promise<Readonly<Record<string, string>>> { return this.requestHeaders(); }\n\n async completion(messages: readonly ModelMessage[], parameters: ModelParameters = {}, options: ModelCallOptions = {}): Promise<ModelResponse> {\n this.reject(parameters, ['messages', 'stream']);\n return this.invokeRequest('completion', async () => {\n if (this.openai) return this.openai.chat.completions.create({ ...parameters, model: this.settings.model, messages: [...messages], stream: false } as OpenAI.ChatCompletionCreateParamsNonStreaming, options);\n return this.anthropic!.messages.create({ ...this.anthropicParameters(messages, parameters), model: this.settings.model, stream: false } as Anthropic.MessageCreateParamsNonStreaming, options);\n });\n }\n async invoke(messages: readonly ModelMessage[], parameters: ModelParameters = {}, options: ModelCallOptions = {}): Promise<ModelResponse> { return this.completion(messages, parameters, options); }\n async *stream(messages: readonly ModelMessage[], parameters: ModelParameters = {}, options: ModelCallOptions = {}): AsyncGenerator<ModelResponse> {\n this.reject(parameters, ['messages', 'stream']);\n const request = async () => this.openai\n ? this.openai.chat.completions.create({ ...parameters, model: this.settings.model, messages: [...messages], stream: true } as OpenAI.ChatCompletionCreateParamsStreaming, options)\n : this.anthropic!.messages.create({ ...this.anthropicParameters(messages, parameters), model: this.settings.model, stream: true } as Anthropic.MessageCreateParamsStreaming, options);\n yield* this.invokeStream('stream', request);\n }\n async responses(input: unknown, parameters: ModelParameters = {}, options: ModelCallOptions = {}): Promise<ModelResponse> {\n this.reject(parameters, ['input', 'stream']); this.requireOpenAI('Responses API');\n return this.invokeRequest('responses', () => this.openai!.responses.create({ ...parameters, model: this.settings.model, input, stream: false } as OpenAI.Responses.ResponseCreateParamsNonStreaming, options));\n }\n async *responsesStream(input: unknown, parameters: ModelParameters = {}, options: ModelCallOptions = {}): AsyncGenerator<ModelResponse> {\n this.reject(parameters, ['input', 'stream']); this.requireOpenAI('Responses API');\n yield* this.invokeStream('responsesStream', () => this.openai!.responses.create({ ...parameters, model: this.settings.model, input, stream: true } as OpenAI.Responses.ResponseCreateParamsStreaming, options));\n }\n async embedding(input: unknown, parameters: ModelParameters = {}, options: ModelCallOptions = {}): Promise<ModelResponse> {\n this.reject(parameters, ['input']);\n if (this.descriptor) throw new InvocationError('managed model protocol does not publish Embedding API');\n this.requireOpenAI('Embedding API');\n return this.invokeRequest('embedding', () => this.openai!.embeddings.create({ ...parameters, model: this.settings.model, input } as OpenAI.EmbeddingCreateParams, options));\n }\n close(): void { this.lifetime.abort(); }\n [inspect.custom](): string { return `ModelClient(model=${this.settings.model}, provider=${this.settings.provider}, <redacted>)`; }\n toJSON(): string { return this[inspect.custom](); }\n\n private requireOpenAI(operation: string): void { if (!this.openai) throw new InvocationError(`Anthropic protocol does not publish ${operation}`); }\n private reject(parameters: ModelParameters, operationFields: string[]): void {\n this.lifetime.signal.throwIfAborted();\n const reserved = ['model', 'resourceName', 'resource_name', 'extra_headers', ...operationFields];\n const conflicts = reserved.filter((name) => Object.hasOwn(parameters, name));\n if (conflicts.length) throw new TypeError(`reserved model request parameters: ${conflicts.join(', ')}`);\n }\n private anthropicParameters(messages: readonly ModelMessage[], parameters: ModelParameters): Record<string, unknown> {\n const systemMessages = messages.filter((m) => m.role === 'system').map((m) => m.content);\n const body = { ...parameters, messages: messages.filter((m) => m.role !== 'system') };\n const maxTokens = parameters.max_tokens ?? this.settings.maxTokens;\n if (maxTokens === undefined) throw new ConfigError('Anthropic model requires max_tokens');\n Object.assign(body, { max_tokens: maxTokens });\n if (systemMessages.length) {\n if (Object.hasOwn(parameters, 'system')) throw new TypeError('system is already set by a system message');\n if (systemMessages.length > 1 && !systemMessages.every((v) => typeof v === 'string')) throw new TypeError('multiple Anthropic system messages must contain text');\n Object.assign(body, { system: systemMessages.length === 1 ? systemMessages[0] : systemMessages.join('\\n\\n') });\n }\n return body;\n }\n /** Authenticated transport shared by native clients and framework adapters. */\n async httpFetch(input: Parameters<typeof fetch>[0], init?: Parameters<typeof fetch>[1]): Promise<Response> {\n this.lifetime.signal.throwIfAborted();\n const request = new Request(input, init);\n const url = new URL(request.url);\n const headers = new Headers(request.headers);\n // Native SDK auth is populated here, including dynamic direct credentials.\n headers.delete('authorization'); headers.delete('x-api-key');\n for (const [key, value] of Object.entries(await this.requestHeaders())) headers.set(key, value);\n this.logger.info('agentcore.model.http.request', { method: request.method, url: `${url.origin}${url.pathname}` });\n return globalThis.fetch(request, { headers, redirect: 'manual',\n signal: AbortSignal.any([this.lifetime.signal, request.signal, AbortSignal.timeout(this.timeoutMs)]),\n });\n }\n private async invokeRequest(operation: string, request: () => Promise<unknown>): Promise<ModelResponse> {\n try { return await request() as ModelResponse; }\n catch (cause) { this.failed(operation, cause); throw new InvocationError('model request failed', { cause }); }\n }\n private async *invokeStream(operation: string, request: () => Promise<AsyncIterable<unknown> & { controller: AbortController }>): AsyncGenerator<ModelResponse> {\n let stream: (AsyncIterable<unknown> & { controller: AbortController }) | undefined;\n try { stream = await request(); for await (const event of stream) yield event as ModelResponse; }\n catch (cause) { this.failed(operation, cause); throw new InvocationError('model stream request failed', { cause }); }\n finally { stream?.controller.abort(); }\n }\n private failed(operation: string, error: unknown): void {\n const status = error && typeof error === 'object' && 'status' in error ? String(error.status) : undefined;\n const requestId = error && typeof error === 'object' && 'request_id' in error ? String(error.request_id) : undefined;\n this.logger.warn('agentcore.model.request.failed', { operation, baseURL: this.settings.baseURL, model: this.settings.model, status, requestId });\n }\n}\n","import type { EmbeddingModelV3, LanguageModelV3 } from '@ai-sdk/provider';\nimport type { generateText, streamText, embedMany, ModelMessage, ToolSet } from 'ai';\nimport { inspect } from 'node:util';\nimport { ConfigError } from '../errors';\nimport { nullLogger, type Logger } from '../logging';\nimport type { ModelCallOptions } from './client';\n\nexport interface DirectProviderOptions {\n /** A configured AI SDK provider model. The provider owns its endpoint and auth. */\n languageModel: LanguageModelV3;\n embeddingModel?: EmbeddingModelV3;\n timeoutMs?: number;\n logger?: Logger;\n}\nexport type ProviderGenerateOptions<T extends ToolSet = ToolSet> = Omit<Parameters<typeof generateText<T>>[0], 'model' | 'messages' | 'prompt' | 'abortSignal'>;\nexport type ProviderStreamOptions<T extends ToolSet = ToolSet> = Omit<Parameters<typeof streamText<T>>[0], 'model' | 'messages' | 'prompt' | 'abortSignal'>;\nexport type ProviderEmbeddingOptions = Omit<Parameters<typeof embedMany>[0], 'model' | 'values' | 'abortSignal'>;\n\n/** Multi-provider Direct models use AI SDK messages/results, not a simulated OpenAI protocol. */\nexport class ProviderModelClient {\n readonly settings: Readonly<{ model: string; provider: string }>;\n readonly languageModel: LanguageModelV3;\n private readonly lifetime = new AbortController();\n private readonly logger: Logger;\n private readonly timeoutMs: number;\n private readonly embeddingModel?: EmbeddingModelV3;\n\n constructor(options: DirectProviderOptions) {\n const model = options.languageModel;\n this.settings = Object.freeze({ model: model.modelId, provider: model.provider });\n this.timeoutMs = options.timeoutMs ?? 600_000;\n this.logger = options.logger ?? nullLogger;\n // Keep lifecycle enforcement when this model is handed to a framework.\n this.languageModel = {\n specificationVersion: 'v3', provider: model.provider, modelId: model.modelId,\n supportedUrls: model.supportedUrls,\n doGenerate: async args => {\n const abortSignal = this.signal(args.abortSignal);\n return model.doGenerate({ ...args, abortSignal });\n },\n doStream: async args => {\n const abortSignal = this.signal(args.abortSignal);\n return model.doStream({ ...args, abortSignal });\n },\n };\n this.embeddingModel = options.embeddingModel;\n this.logger.info('agentcore.model.client.created', { mode: 'direct-provider', ...this.settings });\n }\n\n async completion<T extends ToolSet = ToolSet>(messages: readonly ModelMessage[], parameters: ProviderGenerateOptions<T> = {}, options: ModelCallOptions = {}) {\n const abortSignal = this.signal(options.signal);\n const { generateText } = await import('ai');\n return this.request('completion', () => generateText<T>({ maxRetries: 0, ...parameters,\n model: this.languageModel, messages: [...messages], abortSignal,\n }));\n }\n async invoke<T extends ToolSet = ToolSet>(messages: readonly ModelMessage[], parameters: ProviderGenerateOptions<T> = {}, options: ModelCallOptions = {}) {\n return this.completion(messages, parameters, options);\n }\n async *stream<T extends ToolSet = ToolSet>(messages: readonly ModelMessage[], parameters: ProviderStreamOptions<T> = {}, options: ModelCallOptions = {}) {\n const controller = new AbortController();\n const abortSignal = this.signal(AbortSignal.any([controller.signal, ...(options.signal ? [options.signal] : [])]));\n const { streamText } = await import('ai');\n try {\n // The iterator below propagates errors and logs safe metadata. AI SDK's\n // default onError prints the entire error, including provider request data.\n const result = streamText<T>({ maxRetries: 0, onError: () => {}, ...parameters, model: this.languageModel, messages: [...messages], abortSignal });\n for await (const part of result.fullStream) {\n if (part.type === 'error') throw part.error;\n yield part;\n }\n } catch (error) { this.failed('stream', error); throw error; }\n finally { controller.abort(); }\n }\n async embedding(input: string | readonly string[], parameters: ProviderEmbeddingOptions = {}, options: ModelCallOptions = {}) {\n const abortSignal = this.signal(options.signal);\n if (!this.embeddingModel) throw new ConfigError('direct provider embedding requires embeddingModel');\n const { embedMany } = await import('ai');\n return this.request('embedding', () => embedMany({ maxRetries: 0, ...parameters, model: this.embeddingModel!,\n values: typeof input === 'string' ? [input] : [...input], abortSignal,\n }));\n }\n close(): void { this.lifetime.abort(); }\n [inspect.custom](): string { return `ProviderModelClient(model=${this.settings.model}, provider=${this.settings.provider}, <redacted>)`; }\n toJSON(): string { return this[inspect.custom](); }\n\n private signal(signal?: AbortSignal): AbortSignal {\n this.lifetime.signal.throwIfAborted();\n return AbortSignal.any([this.lifetime.signal, AbortSignal.timeout(this.timeoutMs), ...(signal ? [signal] : [])]);\n }\n private async request<T>(operation: string, invoke: () => Promise<T>): Promise<T> {\n try { return await invoke(); } catch (error) { this.failed(operation, error); throw error; }\n }\n private failed(operation: string, error: unknown): void {\n this.logger.warn('agentcore.model.request.failed', { operation, ...this.settings,\n errorType: error instanceof Error ? error.name : typeof error,\n });\n }\n}\n"],"mappings":"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","names":["inspect","inspect"]}
|
|
1
|
+
{"version":3,"sources":["../src/model/client.ts","../src/model/provider.ts"],"sourcesContent":["import OpenAI from 'openai';\nimport Anthropic from '@anthropic-ai/sdk';\nimport { inspect } from 'node:util';\nimport { ConfigError, InvocationError } from '../errors';\nimport { nullLogger, type Logger } from '../logging';\nimport { httpUrl, requiredString, type AgentConfig } from '../runtime/config';\nimport type { ModelDescriptor } from '../controlplane/client';\n\nexport type ModelProtocol = 'openai' | 'anthropic';\nexport type ModelMessage = { role: string; content?: unknown; [key: string]: unknown };\nexport type ModelParameters = Record<string, unknown>;\nexport type ModelResponse = Record<string, unknown>;\nexport type HeadersProvider = () => Readonly<Record<string, string>> | Promise<Readonly<Record<string, string>>>;\nexport interface ModelCallOptions { signal?: AbortSignal; }\nexport interface DirectModelOptions {\n model: string;\n baseURL: string;\n provider?: ModelProtocol;\n apiKey?: string;\n apiKeyProvider?: () => string | Promise<string>;\n headersProvider?: HeadersProvider;\n timeoutMs?: number;\n logger?: Logger;\n}\nexport interface ModelSettings {\n readonly model: string;\n readonly provider: ModelProtocol;\n readonly baseURL: string;\n readonly maxTokens?: number;\n}\n\nexport function managedModelProtocol(protocol: string): ModelProtocol {\n switch (protocol.trim().toLowerCase()) {\n case 'openai/v1': return 'openai';\n case 'anthropic': return 'anthropic';\n default: throw new ConfigError(`managed model protocol has no SDK adapter: ${protocol}`);\n }\n}\nexport function modelBaseURL(gatewayURL: string, connectionId: string, protocol: string): string {\n const provider = managedModelProtocol(protocol);\n const gateway = gatewayURL.replace(/\\/+$/, '').replace(/\\/v1$/, '').replace(/\\/model-connection$/, '');\n return `${gateway}/model-connection/${encodeURIComponent(connectionId)}${provider === 'openai' ? '/v1' : ''}`;\n}\n\nexport class ModelClient {\n readonly descriptor?: ModelDescriptor;\n readonly settings: ModelSettings;\n private readonly logger: Logger;\n private readonly openai?: OpenAI;\n private readonly anthropic?: Anthropic;\n private readonly lifetime = new AbortController();\n private readonly requestHeaders: HeadersProvider;\n\n private constructor(settings: ModelSettings, requestHeaders: HeadersProvider, descriptor: ModelDescriptor | undefined, logger: Logger, private readonly timeoutMs: number) {\n this.settings = Object.freeze(settings); this.requestHeaders = requestHeaders;\n this.descriptor = descriptor; this.logger = logger;\n const fetch = this.httpFetch.bind(this);\n // OpenAI requires a non-empty constructor key; our fetch always replaces it\n // with the current provider headers, so this marker is never transmitted.\n if (settings.provider === 'openai') this.openai = new OpenAI({ baseURL: settings.baseURL, apiKey: 'agentcore-transport', fetch, timeout: timeoutMs, maxRetries: 0 });\n else this.anthropic = new Anthropic({ baseURL: settings.baseURL, apiKey: null, authToken: '', defaultHeaders: { 'X-Api-Key': null, Authorization: null }, fetch, timeout: timeoutMs, maxRetries: 0 });\n this.logger.info('agentcore.model.client.created', { mode: descriptor ? 'managed' : 'direct', model: settings.model, provider: settings.provider, baseURL: settings.baseURL });\n }\n\n static platform(config: AgentConfig, descriptor: ModelDescriptor, options: { logger?: Logger; timeoutMs?: number } = {}): ModelClient {\n const provider = managedModelProtocol(descriptor.protocol);\n const headers = { ...config.gatewayHeaders };\n return new ModelClient({ model: descriptor.modelName, provider, baseURL: modelBaseURL(config.modelGatewayUrl, descriptor.connectionId, descriptor.protocol), maxTokens: descriptor.maxTokens },\n () => headers, descriptor, options.logger ?? nullLogger, options.timeoutMs ?? 600_000);\n }\n static direct(options: DirectModelOptions): ModelClient {\n if (options.apiKey !== undefined && options.apiKeyProvider !== undefined) throw new ConfigError('apiKey and apiKeyProvider are mutually exclusive');\n const provider = options.provider ?? 'openai';\n if (provider !== 'openai' && provider !== 'anthropic') throw new ConfigError(`direct model protocol has no SDK adapter: ${provider}`);\n const model = requiredString(options.model, 'model'); const baseURL = httpUrl(options.baseURL, 'direct model baseURL');\n const resolve = async () => {\n const headers: Record<string, string> = {};\n const key = options.apiKeyProvider ? requiredString(await options.apiKeyProvider(), 'apiKeyProvider result') : options.apiKey;\n if (key) headers[provider === 'openai' ? 'authorization' : 'x-api-key'] = provider === 'openai' ? `Bearer ${key}` : key;\n Object.assign(headers, await options.headersProvider?.());\n return headers;\n };\n return new ModelClient({ model, baseURL, provider }, resolve, undefined, options.logger ?? nullLogger, options.timeoutMs ?? 600_000);\n }\n\n /** Headers are resolved for framework transports as well as direct API calls. */\n async headers(): Promise<Readonly<Record<string, string>>> { return this.requestHeaders(); }\n\n async completion(messages: readonly ModelMessage[], parameters: ModelParameters = {}, options: ModelCallOptions = {}): Promise<ModelResponse> {\n this.reject(parameters, ['messages', 'stream']);\n return this.invokeRequest('completion', async () => {\n if (this.openai) return this.openai.chat.completions.create({ ...parameters, model: this.settings.model, messages: [...messages], stream: false } as OpenAI.ChatCompletionCreateParamsNonStreaming, options);\n return this.anthropic!.messages.create({ ...this.anthropicParameters(messages, parameters), model: this.settings.model, stream: false } as Anthropic.MessageCreateParamsNonStreaming, options);\n });\n }\n async invoke(messages: readonly ModelMessage[], parameters: ModelParameters = {}, options: ModelCallOptions = {}): Promise<ModelResponse> { return this.completion(messages, parameters, options); }\n async *stream(messages: readonly ModelMessage[], parameters: ModelParameters = {}, options: ModelCallOptions = {}): AsyncGenerator<ModelResponse> {\n this.reject(parameters, ['messages', 'stream']);\n const request = async () => this.openai\n ? this.openai.chat.completions.create({ ...parameters, model: this.settings.model, messages: [...messages], stream: true } as OpenAI.ChatCompletionCreateParamsStreaming, options)\n : this.anthropic!.messages.create({ ...this.anthropicParameters(messages, parameters), model: this.settings.model, stream: true } as Anthropic.MessageCreateParamsStreaming, options);\n yield* this.invokeStream('stream', request);\n }\n async responses(input: unknown, parameters: ModelParameters = {}, options: ModelCallOptions = {}): Promise<ModelResponse> {\n this.reject(parameters, ['input', 'stream']); this.requireOpenAI('Responses API');\n return this.invokeRequest('responses', () => this.openai!.responses.create({ ...parameters, model: this.settings.model, input, stream: false } as OpenAI.Responses.ResponseCreateParamsNonStreaming, options));\n }\n async *responsesStream(input: unknown, parameters: ModelParameters = {}, options: ModelCallOptions = {}): AsyncGenerator<ModelResponse> {\n this.reject(parameters, ['input', 'stream']); this.requireOpenAI('Responses API');\n yield* this.invokeStream('responsesStream', () => this.openai!.responses.create({ ...parameters, model: this.settings.model, input, stream: true } as OpenAI.Responses.ResponseCreateParamsStreaming, options));\n }\n async embedding(input: unknown, parameters: ModelParameters = {}, options: ModelCallOptions = {}): Promise<ModelResponse> {\n this.reject(parameters, ['input']);\n if (this.descriptor) throw new InvocationError('managed model protocol does not publish Embedding API');\n this.requireOpenAI('Embedding API');\n return this.invokeRequest('embedding', () => this.openai!.embeddings.create({ ...parameters, model: this.settings.model, input } as OpenAI.EmbeddingCreateParams, options));\n }\n close(): void { this.lifetime.abort(); }\n [inspect.custom](): string { return `ModelClient(model=${this.settings.model}, provider=${this.settings.provider}, <redacted>)`; }\n toJSON(): string { return this[inspect.custom](); }\n\n private requireOpenAI(operation: string): void { if (!this.openai) throw new InvocationError(`Anthropic protocol does not publish ${operation}`); }\n private reject(parameters: ModelParameters, operationFields: string[]): void {\n this.lifetime.signal.throwIfAborted();\n const reserved = ['model', 'resourceName', 'resource_name', 'extra_headers', ...operationFields];\n const conflicts = reserved.filter((name) => Object.hasOwn(parameters, name));\n if (conflicts.length) throw new TypeError(`reserved model request parameters: ${conflicts.join(', ')}`);\n }\n private anthropicParameters(messages: readonly ModelMessage[], parameters: ModelParameters): Record<string, unknown> {\n const systemMessages = messages.filter((m) => m.role === 'system').map((m) => m.content);\n const body = { ...parameters, messages: messages.filter((m) => m.role !== 'system') };\n const maxTokens = parameters.max_tokens ?? this.settings.maxTokens;\n if (maxTokens === undefined) throw new ConfigError('Anthropic model requires max_tokens');\n Object.assign(body, { max_tokens: maxTokens });\n if (systemMessages.length) {\n if (Object.hasOwn(parameters, 'system')) throw new TypeError('system is already set by a system message');\n if (systemMessages.length > 1 && !systemMessages.every((v) => typeof v === 'string')) throw new TypeError('multiple Anthropic system messages must contain text');\n Object.assign(body, { system: systemMessages.length === 1 ? systemMessages[0] : systemMessages.join('\\n\\n') });\n }\n return body;\n }\n /** Authenticated transport shared by native clients and framework adapters. */\n async httpFetch(input: Parameters<typeof fetch>[0], init?: Parameters<typeof fetch>[1]): Promise<Response> {\n this.lifetime.signal.throwIfAborted();\n const request = new Request(input, init);\n const url = new URL(request.url);\n const headers = new Headers(request.headers);\n // Native SDK auth is populated here, including dynamic direct credentials.\n headers.delete('authorization'); headers.delete('x-api-key');\n for (const [key, value] of Object.entries(await this.requestHeaders())) headers.set(key, value);\n this.logger.info('agentcore.model.http.request', { method: request.method, url: `${url.origin}${url.pathname}` });\n return globalThis.fetch(request, { headers, redirect: 'manual',\n signal: AbortSignal.any([this.lifetime.signal, request.signal, AbortSignal.timeout(this.timeoutMs)]),\n });\n }\n private async invokeRequest(operation: string, request: () => Promise<unknown>): Promise<ModelResponse> {\n try { return await request() as ModelResponse; }\n catch (cause) { this.failed(operation, cause); throw new InvocationError('model request failed', { cause }); }\n }\n private async *invokeStream(operation: string, request: () => Promise<AsyncIterable<unknown> & { controller: AbortController }>): AsyncGenerator<ModelResponse> {\n let stream: (AsyncIterable<unknown> & { controller: AbortController }) | undefined;\n try { stream = await request(); for await (const event of stream) yield event as ModelResponse; }\n catch (cause) { this.failed(operation, cause); throw new InvocationError('model stream request failed', { cause }); }\n finally { stream?.controller.abort(); }\n }\n private failed(operation: string, error: unknown): void {\n const status = error && typeof error === 'object' && 'status' in error ? String(error.status) : undefined;\n const requestId = error && typeof error === 'object' && 'request_id' in error ? String(error.request_id) : undefined;\n this.logger.warn('agentcore.model.request.failed', { operation, baseURL: this.settings.baseURL, model: this.settings.model, status, requestId });\n }\n}\n","import type { EmbeddingModelV3, LanguageModelV3 } from '@ai-sdk/provider';\nimport type { generateText, streamText, embedMany, ModelMessage, ToolSet } from 'ai';\nimport { inspect } from 'node:util';\nimport { ConfigError } from '../errors';\nimport { nullLogger, type Logger } from '../logging';\nimport type { ModelCallOptions } from './client';\n\nexport interface DirectProviderOptions {\n /** A configured AI SDK provider model. The provider owns its endpoint and auth. */\n languageModel: LanguageModelV3;\n embeddingModel?: EmbeddingModelV3;\n timeoutMs?: number;\n logger?: Logger;\n}\nexport type ProviderGenerateOptions<T extends ToolSet = ToolSet> = Omit<Parameters<typeof generateText<T>>[0], 'model' | 'messages' | 'prompt' | 'abortSignal'>;\nexport type ProviderStreamOptions<T extends ToolSet = ToolSet> = Omit<Parameters<typeof streamText<T>>[0], 'model' | 'messages' | 'prompt' | 'abortSignal'>;\nexport type ProviderEmbeddingOptions = Omit<Parameters<typeof embedMany>[0], 'model' | 'values' | 'abortSignal'>;\n\n/** Multi-provider Direct models use AI SDK messages/results, not a simulated OpenAI protocol. */\nexport class ProviderModelClient {\n readonly settings: Readonly<{ model: string; provider: string }>;\n readonly languageModel: LanguageModelV3;\n private readonly lifetime = new AbortController();\n private readonly logger: Logger;\n private readonly timeoutMs: number;\n private readonly embeddingModel?: EmbeddingModelV3;\n\n constructor(options: DirectProviderOptions) {\n const model = options.languageModel;\n this.settings = Object.freeze({ model: model.modelId, provider: model.provider });\n this.timeoutMs = options.timeoutMs ?? 600_000;\n this.logger = options.logger ?? nullLogger;\n // Keep lifecycle enforcement when this model is handed to a framework.\n this.languageModel = {\n specificationVersion: 'v3', provider: model.provider, modelId: model.modelId,\n supportedUrls: model.supportedUrls,\n doGenerate: async args => {\n const abortSignal = this.signal(args.abortSignal);\n return model.doGenerate({ ...args, abortSignal });\n },\n doStream: async args => {\n const abortSignal = this.signal(args.abortSignal);\n return model.doStream({ ...args, abortSignal });\n },\n };\n this.embeddingModel = options.embeddingModel;\n this.logger.info('agentcore.model.client.created', { mode: 'direct-provider', ...this.settings });\n }\n\n async completion<T extends ToolSet = ToolSet>(messages: readonly ModelMessage[], parameters: ProviderGenerateOptions<T> = {}, options: ModelCallOptions = {}) {\n const abortSignal = this.signal(options.signal);\n const { generateText } = await import('ai');\n return this.request('completion', () => generateText<T>({ maxRetries: 0, ...parameters,\n model: this.languageModel, messages: [...messages], abortSignal,\n }));\n }\n async invoke<T extends ToolSet = ToolSet>(messages: readonly ModelMessage[], parameters: ProviderGenerateOptions<T> = {}, options: ModelCallOptions = {}) {\n return this.completion(messages, parameters, options);\n }\n async *stream<T extends ToolSet = ToolSet>(messages: readonly ModelMessage[], parameters: ProviderStreamOptions<T> = {}, options: ModelCallOptions = {}) {\n const controller = new AbortController();\n const abortSignal = this.signal(AbortSignal.any([controller.signal, ...(options.signal ? [options.signal] : [])]));\n const { streamText } = await import('ai');\n try {\n // The iterator below propagates errors and logs safe metadata. AI SDK's\n // default onError prints the entire error, including provider request data.\n const result = streamText<T>({ maxRetries: 0, onError: () => {}, ...parameters, model: this.languageModel, messages: [...messages], abortSignal });\n for await (const part of result.fullStream) {\n if (part.type === 'error') throw part.error;\n yield part;\n }\n } catch (error) { this.failed('stream', error); throw error; }\n finally { controller.abort(); }\n }\n async embedding(input: string | readonly string[], parameters: ProviderEmbeddingOptions = {}, options: ModelCallOptions = {}) {\n const abortSignal = this.signal(options.signal);\n if (!this.embeddingModel) throw new ConfigError('direct provider embedding requires embeddingModel');\n const { embedMany } = await import('ai');\n return this.request('embedding', () => embedMany({ maxRetries: 0, ...parameters, model: this.embeddingModel!,\n values: typeof input === 'string' ? [input] : [...input], abortSignal,\n }));\n }\n close(): void { this.lifetime.abort(); }\n [inspect.custom](): string { return `ProviderModelClient(model=${this.settings.model}, provider=${this.settings.provider}, <redacted>)`; }\n toJSON(): string { return this[inspect.custom](); }\n\n private signal(signal?: AbortSignal): AbortSignal {\n this.lifetime.signal.throwIfAborted();\n return AbortSignal.any([this.lifetime.signal, AbortSignal.timeout(this.timeoutMs), ...(signal ? [signal] : [])]);\n }\n private async request<T>(operation: string, invoke: () => Promise<T>): Promise<T> {\n try { return await invoke(); } catch (error) { this.failed(operation, error); throw error; }\n }\n private failed(operation: string, error: unknown): void {\n this.logger.warn('agentcore.model.request.failed', { operation, ...this.settings,\n errorType: error instanceof Error ? error.name : typeof error,\n });\n }\n}\n"],"mappings":"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","names":["inspect","inspect"]}
|
|
@@ -1,23 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
2
|
readBytes
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NRYDUATX.js";
|
|
4
4
|
import {
|
|
5
5
|
HIGH_CODE_SDK_PURPOSE
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-76NTQYJB.js";
|
|
7
7
|
import {
|
|
8
8
|
httpUrl,
|
|
9
9
|
requiredString
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import {
|
|
12
|
-
nullLogger
|
|
13
|
-
} from "./chunk-NZL3VPJ2.js";
|
|
10
|
+
} from "./chunk-3JXIMUUY.js";
|
|
14
11
|
import {
|
|
15
12
|
ConfigError,
|
|
16
13
|
InvocationError,
|
|
17
14
|
MCPServerNotFoundError,
|
|
18
15
|
ModelConnectionNotFoundError,
|
|
19
|
-
ResourceNotConfiguredError
|
|
20
|
-
|
|
16
|
+
ResourceNotConfiguredError,
|
|
17
|
+
nullLogger
|
|
18
|
+
} from "./chunk-AEQ76QIO.js";
|
|
21
19
|
|
|
22
20
|
// src/controlplane/client.ts
|
|
23
21
|
import Client, * as models from "@alicloud/agentcore20260804";
|
|
@@ -293,4 +291,4 @@ function internalOSSURL(url) {
|
|
|
293
291
|
export {
|
|
294
292
|
AgentCoreControlPlane
|
|
295
293
|
};
|
|
296
|
-
//# sourceMappingURL=chunk-
|
|
294
|
+
//# sourceMappingURL=chunk-7UBN3SJI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/controlplane/client.ts"],"sourcesContent":["import Client, * as models from '@alicloud/agentcore20260804';\nimport { $OpenApiUtil } from '@alicloud/openapi-core';\nimport { RuntimeOptions } from '@darabonba/typescript';\nimport { AccessKeyCredential, type CredentialProvider } from '../auth/access-key';\nimport { HIGH_CODE_SDK_PURPOSE } from '../auth/resource-sts';\nimport { ConfigError, InvocationError, MCPServerNotFoundError, ModelConnectionNotFoundError, ResourceNotConfiguredError } from '../errors';\nimport { readBytes } from '../http';\nimport { nullLogger, type Logger } from '../logging';\nimport { httpUrl, requiredString } from '../runtime/config';\n\n// The generated package is CJS: native ESM sees module.exports as the default.\nconst GeneratedClient = typeof Client === 'function' ? Client : (Client as unknown as { default: typeof Client }).default;\n\nexport interface ModelDescriptor {\n readonly connectionId: string;\n readonly connectionName: string;\n readonly protocol: string;\n readonly providerType: string;\n readonly modelId: string;\n readonly modelName: string;\n readonly contextSize?: number;\n readonly maxTokens?: number;\n readonly capabilities: Readonly<Record<string, boolean>>;\n}\nexport interface MCPDescriptor {\n readonly mcpServerId: string;\n readonly name: string;\n readonly protocol: string;\n readonly type: string;\n readonly status: string;\n}\nexport interface SkillArtifact { version: string; archive: Uint8Array; }\nexport interface CredentialMetadata {\n readonly credentialId: string;\n readonly name: string;\n readonly credentialType: string;\n readonly resourceScope: string;\n readonly resourceRefs: ReadonlyArray<{ resourceType: string; resourceId: string }>;\n}\nexport interface ControlPlaneOptions {\n workspaceId: string;\n regionId: string;\n accessKeyCredential?: AccessKeyCredential;\n resourceSTSProvider?: CredentialProvider;\n endpoint?: string;\n logger?: Logger;\n}\n\nfunction exact<T>(items: T[], field: keyof T, name: string, label: string, ErrorType: typeof ResourceNotConfiguredError = ResourceNotConfiguredError): T {\n const matches = items.filter((item) => item[field] === name);\n if (!matches.length) throw new ErrorType(`${label} ${JSON.stringify(name)} does not exist`);\n if (matches.length !== 1) throw new ConfigError(`${label} ${JSON.stringify(name)} is not unique`);\n return matches[0]!;\n}\n\nfunction errorField(error: unknown, key: string): unknown {\n return error && typeof error === 'object' ? (error as Record<string, unknown>)[key] : undefined;\n}\nfunction responseBody<T>(body: T | undefined): T {\n if (body === undefined) throw new ConfigError('AgentCore returned an empty control-plane response');\n return body;\n}\nfunction endpointFailure(error: unknown): boolean {\n const status = errorField(error, 'statusCode');\n const code = errorField(error, 'code');\n return (typeof status === 'number' && status >= 500 && status < 600) ||\n ['ECONNREFUSED', 'ECONNRESET', 'ENOTFOUND', 'EAI_AGAIN', 'ETIMEDOUT', 'ESOCKETTIMEDOUT'].includes(String(code)) ||\n errorField(error, 'name') === 'TimeoutError';\n}\n\nexport class AgentCoreControlPlane {\n readonly workspaceId: string;\n readonly regionId: string;\n private readonly endpoint?: string;\n private readonly protocol?: string;\n private discoveredEndpoint?: string;\n private readonly logger: Logger;\n private readonly lifetime = new AbortController();\n\n constructor(private readonly options: ControlPlaneOptions) {\n this.workspaceId = requiredString(options.workspaceId, 'workspaceId');\n this.regionId = requiredString(options.regionId, 'regionId');\n if (!options.accessKeyCredential && !options.resourceSTSProvider) throw new ConfigError('AgentCore control plane requires an AccessKey credential source');\n if (options.endpoint !== undefined) {\n const value = options.endpoint.trim();\n const url = new URL(httpUrl(value.includes('://') ? value : `https://${value}`, 'AgentCore control endpoint'));\n if (url.pathname !== '/') throw new ConfigError('AgentCore control endpoint must not contain a path');\n this.endpoint = url.host; this.protocol = url.protocol.slice(0, -1);\n }\n this.logger = options.logger ?? nullLogger;\n }\n\n async resolveModel(connectionName: string, modelName?: string): Promise<ModelDescriptor> {\n const client = await this.client();\n const connections: models.ListModelConnectionsResponseBodyItems[] = [];\n let nextToken: string | undefined;\n do {\n const response = await this.invoke(client, 'ListModelConnections', () => client.listModelConnectionsWithOptions(this.workspaceId,\n new models.ListModelConnectionsRequest({ name: connectionName, searchType: 'accurate', maxResults: 100, nextToken }), {}, this.runtimeOptions()));\n const body = responseBody(response.body);\n connections.push(...(body.items ?? [])); nextToken = body.nextToken;\n } while (nextToken);\n const connection = exact(connections, 'name', connectionName, 'model connection', ModelConnectionNotFoundError);\n const connectionId = requiredString(connection.connectionId, 'connectionId');\n const available: models.ListModelsResponseBodyItems[] = [];\n do {\n const response = await this.invoke(client, 'ListModels', () => client.listModelsWithOptions(this.workspaceId,\n new models.ListModelsRequest({ connectionId, modelName, maxResults: 100, nextToken }), {}, this.runtimeOptions()));\n const body = responseBody(response.body);\n available.push(...(body.items ?? [])); nextToken = body.nextToken;\n } while (nextToken);\n let model: models.ListModelsResponseBodyItems;\n if (modelName !== undefined) model = exact(available, 'modelName', modelName, 'model');\n else {\n if (available.length !== 1) throw new ResourceNotConfiguredError(`model connection ${JSON.stringify(connectionName)} requires an explicit model name`);\n model = available[0]!;\n }\n const capabilities = Object.fromEntries(Object.entries(model.capabilities ?? {}).filter((entry): entry is [string, boolean] => typeof entry[1] === 'boolean'));\n const descriptor = Object.freeze({ connectionId, connectionName: requiredString(connection.name, 'connection name'),\n protocol: connection.protocol ?? '', providerType: connection.providerType ?? '',\n modelId: requiredString(model.modelId, 'modelId'), modelName: requiredString(model.modelName, 'modelName'),\n contextSize: model.contextSize, maxTokens: model.maxTokens, capabilities: Object.freeze(capabilities),\n });\n this.logger.info('agentcore.control_plane.model.resolve.succeeded', { connectionName, connectionId, modelName: descriptor.modelName });\n return descriptor;\n }\n\n async resolveMCP(name: string): Promise<MCPDescriptor> {\n const client = await this.client();\n const items: models.ListMcpsResponseBodyItems[] = [];\n let nextToken: string | undefined;\n do {\n const response = await this.invoke(client, 'ListMcps', () => client.listMcpsWithOptions(this.workspaceId,\n new models.ListMcpsRequest({ name, searchType: 'accurate', maxResults: 100, nextToken }), {}, this.runtimeOptions()));\n const body = responseBody(response.body);\n items.push(...(body.items ?? [])); nextToken = body.nextToken;\n } while (nextToken);\n const item = exact(items, 'name', name, 'MCP server', MCPServerNotFoundError);\n const descriptor = Object.freeze({ mcpServerId: requiredString(item.mcpServerId, 'mcpServerId'),\n name: requiredString(item.name, 'MCP name'), protocol: item.protocol ?? '', type: item.type ?? '', status: item.status ?? '',\n });\n this.logger.info('agentcore.control_plane.mcp.resolve.succeeded', { name, mcpServerId: descriptor.mcpServerId, protocol: descriptor.protocol });\n return descriptor;\n }\n\n async getSkill(name: string, version?: string): Promise<SkillArtifact> {\n const client = await this.client();\n if (version === undefined) {\n const detail = await this.invoke(client, 'GetSkillDetail', () => client.getSkillDetailWithOptions(this.workspaceId, name, new models.GetSkillDetailRequest({}), {}, this.runtimeOptions()));\n version = latestVersion(responseBody(detail.body).data);\n }\n const resolvedVersion = version;\n const response = await this.invoke(client, 'DownloadSkillVersionViaOss', () => client.downloadSkillVersionViaOssWithOptions(this.workspaceId, name, resolvedVersion,\n new models.DownloadSkillVersionViaOssRequest({}), {}, this.runtimeOptions()));\n const downloadURL = responseBody(response.body).data;\n if (typeof downloadURL !== 'string') throw new ConfigError('AgentCore returned an invalid Skill download URL');\n return { version: resolvedVersion, archive: await this.downloadSkill(downloadURL) };\n }\n\n close(): void { this.lifetime.abort(); }\n\n async resolveCredential(name: string): Promise<CredentialMetadata> {\n const client = await this.client();\n const params = new $OpenApiUtil.Params({ action: 'ListCredentials', version: '2026-08-04', protocol: 'HTTPS',\n pathname: `/workspaces/${encodeURIComponent(this.workspaceId)}/credentials`, method: 'GET', authType: 'AK',\n style: 'ROA', reqBodyType: 'json', bodyType: 'json' });\n const items: Record<string, unknown>[] = [];\n let nextToken: string | undefined;\n do {\n const request = new $OpenApiUtil.OpenApiRequest({ query: { name, maxResults: '100', ...(nextToken ? { nextToken } : {}) } });\n const response = await this.invoke(client, 'ListCredentials', () => client.callApi(params, request, this.runtimeOptions()));\n const body = responseBody(response.body);\n items.push(...(body.items ?? [])); nextToken = body.nextToken;\n } while (nextToken);\n const item = exact(items, 'name', name, 'credential');\n const refs = (item.resourceRefs ?? []) as Array<Record<string, unknown>>;\n return {\n credentialId: requiredString(item.credentialId, 'credentialId'), name: requiredString(item.name, 'name'),\n credentialType: requiredString(item.credentialType, 'credentialType'), resourceScope: String(item.resourceScope ?? ''),\n resourceRefs: refs.map((ref) => ({ resourceType: requiredString(ref.resourceType, 'resourceType'), resourceId: requiredString(ref.resourceId, 'resourceId') })),\n };\n }\n\n private runtimeOptions(): RuntimeOptions { return new RuntimeOptions({ autoretry: false, connectTimeout: 10_000, readTimeout: 30_000 }); }\n private async client(): Promise<Client> {\n this.lifetime.signal.throwIfAborted();\n const credential = this.options.accessKeyCredential ?? await this.options.resourceSTSProvider!.get(HIGH_CODE_SDK_PURPOSE);\n return new GeneratedClient(new $OpenApiUtil.Config({\n accessKeyId: credential.accessKeyId, accessKeySecret: credential.accessKeySecret, securityToken: credential.securityToken,\n regionId: this.regionId, endpoint: this.endpoint ?? this.discoveredEndpoint, protocol: this.protocol,\n }));\n }\n private async invoke<T>(client: Client, operation: string, call: () => Promise<T>): Promise<T> {\n this.lifetime.signal.throwIfAborted();\n const invoke = async () => {\n this.logger.debug('agentcore.control_plane.request.started', { operation, host: client._endpoint });\n try { return await call(); }\n catch (cause) {\n const data = errorField(cause, 'data');\n this.logger.warn('agentcore.control_plane.request.failed', { operation, host: client._endpoint,\n status: String(errorField(cause, 'statusCode') ?? '-'), code: String(errorField(cause, 'code') ?? '-'),\n requestId: String(errorField(cause, 'requestId') ?? errorField(data, 'RequestId') ?? errorField(data, 'requestId') ?? '-'),\n });\n throw new InvocationError('AgentCore control-plane request failed', { cause });\n }\n };\n try { return await invoke(); }\n catch (error) {\n if (!(error instanceof InvocationError) || this.endpoint || client._endpoint !== `agentcore.${this.regionId}.aliyuncs.com` || !endpointFailure(error.cause)) throw error;\n const host = `agentcore-vpc.${this.regionId}.aliyuncs.com`;\n this.logger.warn('agentcore.control_plane.endpoint.fallback', { operation, fromHost: client._endpoint, toHost: host });\n client._endpoint = host;\n const result = await invoke(); this.discoveredEndpoint = host; return result;\n }\n }\n\n private async downloadSkill(value: string): Promise<Uint8Array> {\n let original: URL;\n try { original = new URL(value); } catch { throw new ConfigError('AgentCore returned an invalid Skill download URL'); }\n if (!['http:', 'https:'].includes(original.protocol) || original.username || original.password) throw new ConfigError('AgentCore returned an invalid Skill download URL');\n let candidate = original;\n for (;;) {\n this.lifetime.signal.throwIfAborted();\n let status: number | undefined;\n try {\n const response = await fetch(candidate, { redirect: 'manual', signal: AbortSignal.any([this.lifetime.signal, AbortSignal.timeout(30_000)]) });\n if (response.ok) {\n const archive = await readBytes(response, 10 * 1024 * 1024, 'Skill archive');\n if (!archive.length) throw new ConfigError('Skill package is empty');\n return archive;\n }\n status = response.status; await response.body?.cancel();\n } catch (error) {\n this.lifetime.signal.throwIfAborted();\n if (error instanceof ConfigError) throw error;\n }\n this.logger.warn('agentcore.control_plane.skill.download.failed', { host: candidate.host, path: candidate.pathname, status });\n const fallback = candidate === original && (status === undefined || status >= 500 && status < 600) ? internalOSSURL(original) : undefined;\n if (!fallback) throw new InvocationError(status ? `Skill package download failed with HTTP ${status}` : 'Skill package download failed');\n this.logger.warn('agentcore.control_plane.skill.download.fallback', { fromHost: candidate.host, toHost: fallback.host });\n candidate = fallback;\n }\n }\n}\n\nfunction latestVersion(data?: models.GetSkillDetailResponseBodyData): string {\n if (!data) throw new ResourceNotConfiguredError('AgentCore Skill does not exist');\n for (const [label, value] of Object.entries(data.labels ?? {})) if (label.toLowerCase() === 'latest' && value) return value;\n const online = (data.versions ?? []).filter((v) => v.status?.toLowerCase() === 'online' && v.version);\n online.sort((a, b) => (b.updateTime ?? -1) - (a.updateTime ?? -1) || (b.version ?? '').localeCompare(a.version ?? ''));\n if (!online[0]?.version) throw new ResourceNotConfiguredError('AgentCore Skill has no online version');\n return online[0].version;\n}\n\nexport function internalOSSURL(url: URL): URL | undefined {\n const match = /^([a-z0-9-]+)\\.(oss-[a-z]+-[a-z0-9-]+)\\.aliyuncs\\.com$/.exec(url.hostname);\n if (!match || match[2]!.endsWith('-internal') || match[2]!.startsWith('oss-accelerate') || url.username || url.password) return undefined;\n if (url.searchParams.getAll('x-oss-additional-headers').some((v) => v.split(';').includes('host'))) return undefined;\n const result = new URL(url); result.hostname = `${match[1]}.${match[2]}-internal.aliyuncs.com`; return result;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/controlplane/client.ts"],"sourcesContent":["import Client, * as models from '@alicloud/agentcore20260804';\nimport { $OpenApiUtil } from '@alicloud/openapi-core';\nimport { RuntimeOptions } from '@darabonba/typescript';\nimport { AccessKeyCredential, type CredentialProvider } from '../auth/access-key';\nimport { HIGH_CODE_SDK_PURPOSE } from '../auth/resource-sts';\nimport { ConfigError, InvocationError, MCPServerNotFoundError, ModelConnectionNotFoundError, ResourceNotConfiguredError } from '../errors';\nimport { readBytes } from '../http';\nimport { nullLogger, type Logger } from '../logging';\nimport { httpUrl, requiredString } from '../runtime/config';\n\n// The generated package is CJS: native ESM sees module.exports as the default.\nconst GeneratedClient = typeof Client === 'function' ? Client : (Client as unknown as { default: typeof Client }).default;\n\nexport interface ModelDescriptor {\n readonly connectionId: string;\n readonly connectionName: string;\n readonly protocol: string;\n readonly providerType: string;\n readonly modelId: string;\n readonly modelName: string;\n readonly contextSize?: number;\n readonly maxTokens?: number;\n readonly capabilities: Readonly<Record<string, boolean>>;\n}\nexport interface MCPDescriptor {\n readonly mcpServerId: string;\n readonly name: string;\n readonly protocol: string;\n readonly type: string;\n readonly status: string;\n}\nexport interface SkillArtifact { version: string; archive: Uint8Array; }\nexport interface CredentialMetadata {\n readonly credentialId: string;\n readonly name: string;\n readonly credentialType: string;\n readonly resourceScope: string;\n readonly resourceRefs: ReadonlyArray<{ resourceType: string; resourceId: string }>;\n}\nexport interface ControlPlaneOptions {\n workspaceId: string;\n regionId: string;\n accessKeyCredential?: AccessKeyCredential;\n resourceSTSProvider?: CredentialProvider;\n endpoint?: string;\n logger?: Logger;\n}\n\nfunction exact<T>(items: T[], field: keyof T, name: string, label: string, ErrorType: typeof ResourceNotConfiguredError = ResourceNotConfiguredError): T {\n const matches = items.filter((item) => item[field] === name);\n if (!matches.length) throw new ErrorType(`${label} ${JSON.stringify(name)} does not exist`);\n if (matches.length !== 1) throw new ConfigError(`${label} ${JSON.stringify(name)} is not unique`);\n return matches[0]!;\n}\n\nfunction errorField(error: unknown, key: string): unknown {\n return error && typeof error === 'object' ? (error as Record<string, unknown>)[key] : undefined;\n}\nfunction responseBody<T>(body: T | undefined): T {\n if (body === undefined) throw new ConfigError('AgentCore returned an empty control-plane response');\n return body;\n}\nfunction endpointFailure(error: unknown): boolean {\n const status = errorField(error, 'statusCode');\n const code = errorField(error, 'code');\n return (typeof status === 'number' && status >= 500 && status < 600) ||\n ['ECONNREFUSED', 'ECONNRESET', 'ENOTFOUND', 'EAI_AGAIN', 'ETIMEDOUT', 'ESOCKETTIMEDOUT'].includes(String(code)) ||\n errorField(error, 'name') === 'TimeoutError';\n}\n\nexport class AgentCoreControlPlane {\n readonly workspaceId: string;\n readonly regionId: string;\n private readonly endpoint?: string;\n private readonly protocol?: string;\n private discoveredEndpoint?: string;\n private readonly logger: Logger;\n private readonly lifetime = new AbortController();\n\n constructor(private readonly options: ControlPlaneOptions) {\n this.workspaceId = requiredString(options.workspaceId, 'workspaceId');\n this.regionId = requiredString(options.regionId, 'regionId');\n if (!options.accessKeyCredential && !options.resourceSTSProvider) throw new ConfigError('AgentCore control plane requires an AccessKey credential source');\n if (options.endpoint !== undefined) {\n const value = options.endpoint.trim();\n const url = new URL(httpUrl(value.includes('://') ? value : `https://${value}`, 'AgentCore control endpoint'));\n if (url.pathname !== '/') throw new ConfigError('AgentCore control endpoint must not contain a path');\n this.endpoint = url.host; this.protocol = url.protocol.slice(0, -1);\n }\n this.logger = options.logger ?? nullLogger;\n }\n\n async resolveModel(connectionName: string, modelName?: string): Promise<ModelDescriptor> {\n const client = await this.client();\n const connections: models.ListModelConnectionsResponseBodyItems[] = [];\n let nextToken: string | undefined;\n do {\n const response = await this.invoke(client, 'ListModelConnections', () => client.listModelConnectionsWithOptions(this.workspaceId,\n new models.ListModelConnectionsRequest({ name: connectionName, searchType: 'accurate', maxResults: 100, nextToken }), {}, this.runtimeOptions()));\n const body = responseBody(response.body);\n connections.push(...(body.items ?? [])); nextToken = body.nextToken;\n } while (nextToken);\n const connection = exact(connections, 'name', connectionName, 'model connection', ModelConnectionNotFoundError);\n const connectionId = requiredString(connection.connectionId, 'connectionId');\n const available: models.ListModelsResponseBodyItems[] = [];\n do {\n const response = await this.invoke(client, 'ListModels', () => client.listModelsWithOptions(this.workspaceId,\n new models.ListModelsRequest({ connectionId, modelName, maxResults: 100, nextToken }), {}, this.runtimeOptions()));\n const body = responseBody(response.body);\n available.push(...(body.items ?? [])); nextToken = body.nextToken;\n } while (nextToken);\n let model: models.ListModelsResponseBodyItems;\n if (modelName !== undefined) model = exact(available, 'modelName', modelName, 'model');\n else {\n if (available.length !== 1) throw new ResourceNotConfiguredError(`model connection ${JSON.stringify(connectionName)} requires an explicit model name`);\n model = available[0]!;\n }\n const capabilities = Object.fromEntries(Object.entries(model.capabilities ?? {}).filter((entry): entry is [string, boolean] => typeof entry[1] === 'boolean'));\n const descriptor = Object.freeze({ connectionId, connectionName: requiredString(connection.name, 'connection name'),\n protocol: connection.protocol ?? '', providerType: connection.providerType ?? '',\n modelId: requiredString(model.modelId, 'modelId'), modelName: requiredString(model.modelName, 'modelName'),\n contextSize: model.contextSize, maxTokens: model.maxTokens, capabilities: Object.freeze(capabilities),\n });\n this.logger.info('agentcore.control_plane.model.resolve.succeeded', { connectionName, connectionId, modelName: descriptor.modelName });\n return descriptor;\n }\n\n async resolveMCP(name: string): Promise<MCPDescriptor> {\n const client = await this.client();\n const items: models.ListMcpsResponseBodyItems[] = [];\n let nextToken: string | undefined;\n do {\n const response = await this.invoke(client, 'ListMcps', () => client.listMcpsWithOptions(this.workspaceId,\n new models.ListMcpsRequest({ name, searchType: 'accurate', maxResults: 100, nextToken }), {}, this.runtimeOptions()));\n const body = responseBody(response.body);\n items.push(...(body.items ?? [])); nextToken = body.nextToken;\n } while (nextToken);\n const item = exact(items, 'name', name, 'MCP server', MCPServerNotFoundError);\n const descriptor = Object.freeze({ mcpServerId: requiredString(item.mcpServerId, 'mcpServerId'),\n name: requiredString(item.name, 'MCP name'), protocol: item.protocol ?? '', type: item.type ?? '', status: item.status ?? '',\n });\n this.logger.info('agentcore.control_plane.mcp.resolve.succeeded', { name, mcpServerId: descriptor.mcpServerId, protocol: descriptor.protocol });\n return descriptor;\n }\n\n async getSkill(name: string, version?: string): Promise<SkillArtifact> {\n const client = await this.client();\n if (version === undefined) {\n const detail = await this.invoke(client, 'GetSkillDetail', () => client.getSkillDetailWithOptions(this.workspaceId, name, new models.GetSkillDetailRequest({}), {}, this.runtimeOptions()));\n version = latestVersion(responseBody(detail.body).data);\n }\n const resolvedVersion = version;\n const response = await this.invoke(client, 'DownloadSkillVersionViaOss', () => client.downloadSkillVersionViaOssWithOptions(this.workspaceId, name, resolvedVersion,\n new models.DownloadSkillVersionViaOssRequest({}), {}, this.runtimeOptions()));\n const downloadURL = responseBody(response.body).data;\n if (typeof downloadURL !== 'string') throw new ConfigError('AgentCore returned an invalid Skill download URL');\n return { version: resolvedVersion, archive: await this.downloadSkill(downloadURL) };\n }\n\n close(): void { this.lifetime.abort(); }\n\n async resolveCredential(name: string): Promise<CredentialMetadata> {\n const client = await this.client();\n const params = new $OpenApiUtil.Params({ action: 'ListCredentials', version: '2026-08-04', protocol: 'HTTPS',\n pathname: `/workspaces/${encodeURIComponent(this.workspaceId)}/credentials`, method: 'GET', authType: 'AK',\n style: 'ROA', reqBodyType: 'json', bodyType: 'json' });\n const items: Record<string, unknown>[] = [];\n let nextToken: string | undefined;\n do {\n const request = new $OpenApiUtil.OpenApiRequest({ query: { name, maxResults: '100', ...(nextToken ? { nextToken } : {}) } });\n const response = await this.invoke(client, 'ListCredentials', () => client.callApi(params, request, this.runtimeOptions()));\n const body = responseBody(response.body);\n items.push(...(body.items ?? [])); nextToken = body.nextToken;\n } while (nextToken);\n const item = exact(items, 'name', name, 'credential');\n const refs = (item.resourceRefs ?? []) as Array<Record<string, unknown>>;\n return {\n credentialId: requiredString(item.credentialId, 'credentialId'), name: requiredString(item.name, 'name'),\n credentialType: requiredString(item.credentialType, 'credentialType'), resourceScope: String(item.resourceScope ?? ''),\n resourceRefs: refs.map((ref) => ({ resourceType: requiredString(ref.resourceType, 'resourceType'), resourceId: requiredString(ref.resourceId, 'resourceId') })),\n };\n }\n\n private runtimeOptions(): RuntimeOptions { return new RuntimeOptions({ autoretry: false, connectTimeout: 10_000, readTimeout: 30_000 }); }\n private async client(): Promise<Client> {\n this.lifetime.signal.throwIfAborted();\n const credential = this.options.accessKeyCredential ?? await this.options.resourceSTSProvider!.get(HIGH_CODE_SDK_PURPOSE);\n return new GeneratedClient(new $OpenApiUtil.Config({\n accessKeyId: credential.accessKeyId, accessKeySecret: credential.accessKeySecret, securityToken: credential.securityToken,\n regionId: this.regionId, endpoint: this.endpoint ?? this.discoveredEndpoint, protocol: this.protocol,\n }));\n }\n private async invoke<T>(client: Client, operation: string, call: () => Promise<T>): Promise<T> {\n this.lifetime.signal.throwIfAborted();\n const invoke = async () => {\n this.logger.debug('agentcore.control_plane.request.started', { operation, host: client._endpoint });\n try { return await call(); }\n catch (cause) {\n const data = errorField(cause, 'data');\n this.logger.warn('agentcore.control_plane.request.failed', { operation, host: client._endpoint,\n status: String(errorField(cause, 'statusCode') ?? '-'), code: String(errorField(cause, 'code') ?? '-'),\n requestId: String(errorField(cause, 'requestId') ?? errorField(data, 'RequestId') ?? errorField(data, 'requestId') ?? '-'),\n });\n throw new InvocationError('AgentCore control-plane request failed', { cause });\n }\n };\n try { return await invoke(); }\n catch (error) {\n if (!(error instanceof InvocationError) || this.endpoint || client._endpoint !== `agentcore.${this.regionId}.aliyuncs.com` || !endpointFailure(error.cause)) throw error;\n const host = `agentcore-vpc.${this.regionId}.aliyuncs.com`;\n this.logger.warn('agentcore.control_plane.endpoint.fallback', { operation, fromHost: client._endpoint, toHost: host });\n client._endpoint = host;\n const result = await invoke(); this.discoveredEndpoint = host; return result;\n }\n }\n\n private async downloadSkill(value: string): Promise<Uint8Array> {\n let original: URL;\n try { original = new URL(value); } catch { throw new ConfigError('AgentCore returned an invalid Skill download URL'); }\n if (!['http:', 'https:'].includes(original.protocol) || original.username || original.password) throw new ConfigError('AgentCore returned an invalid Skill download URL');\n let candidate = original;\n for (;;) {\n this.lifetime.signal.throwIfAborted();\n let status: number | undefined;\n try {\n const response = await fetch(candidate, { redirect: 'manual', signal: AbortSignal.any([this.lifetime.signal, AbortSignal.timeout(30_000)]) });\n if (response.ok) {\n const archive = await readBytes(response, 10 * 1024 * 1024, 'Skill archive');\n if (!archive.length) throw new ConfigError('Skill package is empty');\n return archive;\n }\n status = response.status; await response.body?.cancel();\n } catch (error) {\n this.lifetime.signal.throwIfAborted();\n if (error instanceof ConfigError) throw error;\n }\n this.logger.warn('agentcore.control_plane.skill.download.failed', { host: candidate.host, path: candidate.pathname, status });\n const fallback = candidate === original && (status === undefined || status >= 500 && status < 600) ? internalOSSURL(original) : undefined;\n if (!fallback) throw new InvocationError(status ? `Skill package download failed with HTTP ${status}` : 'Skill package download failed');\n this.logger.warn('agentcore.control_plane.skill.download.fallback', { fromHost: candidate.host, toHost: fallback.host });\n candidate = fallback;\n }\n }\n}\n\nfunction latestVersion(data?: models.GetSkillDetailResponseBodyData): string {\n if (!data) throw new ResourceNotConfiguredError('AgentCore Skill does not exist');\n for (const [label, value] of Object.entries(data.labels ?? {})) if (label.toLowerCase() === 'latest' && value) return value;\n const online = (data.versions ?? []).filter((v) => v.status?.toLowerCase() === 'online' && v.version);\n online.sort((a, b) => (b.updateTime ?? -1) - (a.updateTime ?? -1) || (b.version ?? '').localeCompare(a.version ?? ''));\n if (!online[0]?.version) throw new ResourceNotConfiguredError('AgentCore Skill has no online version');\n return online[0].version;\n}\n\nexport function internalOSSURL(url: URL): URL | undefined {\n const match = /^([a-z0-9-]+)\\.(oss-[a-z]+-[a-z0-9-]+)\\.aliyuncs\\.com$/.exec(url.hostname);\n if (!match || match[2]!.endsWith('-internal') || match[2]!.startsWith('oss-accelerate') || url.username || url.password) return undefined;\n if (url.searchParams.getAll('x-oss-additional-headers').some((v) => v.split(';').includes('host'))) return undefined;\n const result = new URL(url); result.hostname = `${match[1]}.${match[2]}-internal.aliyuncs.com`; return result;\n}\n"],"mappings":"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","names":[]}
|