alibabacloud-agentcore-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +189 -0
  3. package/dist/access-key-CkoHq3S8.d.cts +30 -0
  4. package/dist/access-key-CkoHq3S8.d.ts +30 -0
  5. package/dist/agent-sa-token-DD1Sb8P1.d.cts +14 -0
  6. package/dist/agent-sa-token-DD1Sb8P1.d.ts +14 -0
  7. package/dist/auth/index.cjs +36 -0
  8. package/dist/auth/index.cjs.map +1 -0
  9. package/dist/auth/index.d.cts +34 -0
  10. package/dist/auth/index.d.ts +34 -0
  11. package/dist/auth/index.js +36 -0
  12. package/dist/auth/index.js.map +1 -0
  13. package/dist/bound-credentials-C1fM0thh.d.cts +39 -0
  14. package/dist/bound-credentials-DqT64Q2s.d.ts +39 -0
  15. package/dist/chunk-2E5EWEDG.cjs +142 -0
  16. package/dist/chunk-2E5EWEDG.cjs.map +1 -0
  17. package/dist/chunk-55XZZRKO.js +220 -0
  18. package/dist/chunk-55XZZRKO.js.map +1 -0
  19. package/dist/chunk-5JXA7JPS.js +29 -0
  20. package/dist/chunk-5JXA7JPS.js.map +1 -0
  21. package/dist/chunk-5RKN46UU.cjs +139 -0
  22. package/dist/chunk-5RKN46UU.cjs.map +1 -0
  23. package/dist/chunk-5ZOLHQXO.js +296 -0
  24. package/dist/chunk-5ZOLHQXO.js.map +1 -0
  25. package/dist/chunk-7Y263YIW.js +298 -0
  26. package/dist/chunk-7Y263YIW.js.map +1 -0
  27. package/dist/chunk-A3PF2SPD.cjs +141 -0
  28. package/dist/chunk-A3PF2SPD.cjs.map +1 -0
  29. package/dist/chunk-A3WMLVJC.cjs +141 -0
  30. package/dist/chunk-A3WMLVJC.cjs.map +1 -0
  31. package/dist/chunk-BVZ7H2F5.cjs +582 -0
  32. package/dist/chunk-BVZ7H2F5.cjs.map +1 -0
  33. package/dist/chunk-EGUKJE3Z.cjs +24 -0
  34. package/dist/chunk-EGUKJE3Z.cjs.map +1 -0
  35. package/dist/chunk-EKXZKKJJ.js +24 -0
  36. package/dist/chunk-EKXZKKJJ.js.map +1 -0
  37. package/dist/chunk-GYLT23D3.js +110 -0
  38. package/dist/chunk-GYLT23D3.js.map +1 -0
  39. package/dist/chunk-IF7LMBXC.js +306 -0
  40. package/dist/chunk-IF7LMBXC.js.map +1 -0
  41. package/dist/chunk-IUCLCPVV.js +113 -0
  42. package/dist/chunk-IUCLCPVV.js.map +1 -0
  43. package/dist/chunk-JSP7ZROS.cjs +95 -0
  44. package/dist/chunk-JSP7ZROS.cjs.map +1 -0
  45. package/dist/chunk-JW62DVIC.js +238 -0
  46. package/dist/chunk-JW62DVIC.js.map +1 -0
  47. package/dist/chunk-K3TE7625.js +139 -0
  48. package/dist/chunk-K3TE7625.js.map +1 -0
  49. package/dist/chunk-LE5P3SJW.cjs +16 -0
  50. package/dist/chunk-LE5P3SJW.cjs.map +1 -0
  51. package/dist/chunk-LXHW6OT4.cjs +77 -0
  52. package/dist/chunk-LXHW6OT4.cjs.map +1 -0
  53. package/dist/chunk-MICRSJ6R.js +48 -0
  54. package/dist/chunk-MICRSJ6R.js.map +1 -0
  55. package/dist/chunk-MWAHO47B.cjs +220 -0
  56. package/dist/chunk-MWAHO47B.cjs.map +1 -0
  57. package/dist/chunk-MZ5UWGXS.js +95 -0
  58. package/dist/chunk-MZ5UWGXS.js.map +1 -0
  59. package/dist/chunk-NZL3VPJ2.js +16 -0
  60. package/dist/chunk-NZL3VPJ2.js.map +1 -0
  61. package/dist/chunk-PC4FM2RP.cjs +180 -0
  62. package/dist/chunk-PC4FM2RP.cjs.map +1 -0
  63. package/dist/chunk-PKYET77D.cjs +296 -0
  64. package/dist/chunk-PKYET77D.cjs.map +1 -0
  65. package/dist/chunk-PTJPB27L.js +31 -0
  66. package/dist/chunk-PTJPB27L.js.map +1 -0
  67. package/dist/chunk-QIZO3A4Y.cjs +306 -0
  68. package/dist/chunk-QIZO3A4Y.cjs.map +1 -0
  69. package/dist/chunk-RBAY4MO2.js +202 -0
  70. package/dist/chunk-RBAY4MO2.js.map +1 -0
  71. package/dist/chunk-RHY7Y43E.js +582 -0
  72. package/dist/chunk-RHY7Y43E.js.map +1 -0
  73. package/dist/chunk-RQRI6RCG.cjs +238 -0
  74. package/dist/chunk-RQRI6RCG.cjs.map +1 -0
  75. package/dist/chunk-RYXL25AI.js +141 -0
  76. package/dist/chunk-RYXL25AI.js.map +1 -0
  77. package/dist/chunk-RZNQGEGJ.cjs +113 -0
  78. package/dist/chunk-RZNQGEGJ.cjs.map +1 -0
  79. package/dist/chunk-S7PWSJNP.cjs +48 -0
  80. package/dist/chunk-S7PWSJNP.cjs.map +1 -0
  81. package/dist/chunk-TWEO5XVM.cjs +298 -0
  82. package/dist/chunk-TWEO5XVM.cjs.map +1 -0
  83. package/dist/chunk-UBP5CHU7.js +142 -0
  84. package/dist/chunk-UBP5CHU7.js.map +1 -0
  85. package/dist/chunk-ULJTQSLE.cjs +35 -0
  86. package/dist/chunk-ULJTQSLE.cjs.map +1 -0
  87. package/dist/chunk-UWPKFJYM.js +77 -0
  88. package/dist/chunk-UWPKFJYM.js.map +1 -0
  89. package/dist/chunk-WKZUYPDS.js +180 -0
  90. package/dist/chunk-WKZUYPDS.js.map +1 -0
  91. package/dist/chunk-YZP55W7S.cjs +29 -0
  92. package/dist/chunk-YZP55W7S.cjs.map +1 -0
  93. package/dist/chunk-ZELRQU4J.cjs +31 -0
  94. package/dist/chunk-ZELRQU4J.cjs.map +1 -0
  95. package/dist/chunk-ZLKYXRNM.js +141 -0
  96. package/dist/chunk-ZLKYXRNM.js.map +1 -0
  97. package/dist/chunk-ZLQ2IBTC.cjs +110 -0
  98. package/dist/chunk-ZLQ2IBTC.cjs.map +1 -0
  99. package/dist/chunk-ZTWLCHCO.cjs +202 -0
  100. package/dist/chunk-ZTWLCHCO.cjs.map +1 -0
  101. package/dist/chunk-ZWQBAJ5O.js +35 -0
  102. package/dist/chunk-ZWQBAJ5O.js.map +1 -0
  103. package/dist/client-DDU4-ygJ.d.cts +72 -0
  104. package/dist/client-pDzS7EZR.d.ts +72 -0
  105. package/dist/collaboration/index.cjs +44 -0
  106. package/dist/collaboration/index.cjs.map +1 -0
  107. package/dist/collaboration/index.d.cts +73 -0
  108. package/dist/collaboration/index.d.ts +73 -0
  109. package/dist/collaboration/index.js +44 -0
  110. package/dist/collaboration/index.js.map +1 -0
  111. package/dist/common-BSXkQfxI.d.cts +25 -0
  112. package/dist/common-BSXkQfxI.d.ts +25 -0
  113. package/dist/common-DRdI-75k.d.ts +8 -0
  114. package/dist/common-_vxreiEW.d.cts +8 -0
  115. package/dist/config-CMkmMtx1.d.cts +20 -0
  116. package/dist/config-CMkmMtx1.d.ts +20 -0
  117. package/dist/context-M9rOTifU.d.cts +12 -0
  118. package/dist/context-M9rOTifU.d.ts +12 -0
  119. package/dist/controller-DWs3Sy04.d.cts +9 -0
  120. package/dist/controller-DmI4L4sP.d.ts +9 -0
  121. package/dist/controlplane/index.cjs +13 -0
  122. package/dist/controlplane/index.cjs.map +1 -0
  123. package/dist/controlplane/index.d.cts +66 -0
  124. package/dist/controlplane/index.d.ts +66 -0
  125. package/dist/controlplane/index.js +13 -0
  126. package/dist/controlplane/index.js.map +1 -0
  127. package/dist/errors-BjGO6N10.d.ts +93 -0
  128. package/dist/errors-D9OtcR-o.d.cts +93 -0
  129. package/dist/event-converters-BIn8odqo.d.ts +38 -0
  130. package/dist/event-converters-Cn_NeGyQ.d.cts +38 -0
  131. package/dist/google-adk-model-N47R7GB2.js +208 -0
  132. package/dist/google-adk-model-N47R7GB2.js.map +1 -0
  133. package/dist/google-adk-model-PDBKY5YZ.cjs +208 -0
  134. package/dist/google-adk-model-PDBKY5YZ.cjs.map +1 -0
  135. package/dist/index.cjs +322 -0
  136. package/dist/index.cjs.map +1 -0
  137. package/dist/index.d.cts +78 -0
  138. package/dist/index.d.ts +78 -0
  139. package/dist/index.js +322 -0
  140. package/dist/index.js.map +1 -0
  141. package/dist/integrations/ai-sdk.cjs +15 -0
  142. package/dist/integrations/ai-sdk.cjs.map +1 -0
  143. package/dist/integrations/ai-sdk.d.cts +21 -0
  144. package/dist/integrations/ai-sdk.d.ts +21 -0
  145. package/dist/integrations/ai-sdk.js +15 -0
  146. package/dist/integrations/ai-sdk.js.map +1 -0
  147. package/dist/integrations/google-adk.cjs +90 -0
  148. package/dist/integrations/google-adk.cjs.map +1 -0
  149. package/dist/integrations/google-adk.d.cts +46 -0
  150. package/dist/integrations/google-adk.d.ts +46 -0
  151. package/dist/integrations/google-adk.js +90 -0
  152. package/dist/integrations/google-adk.js.map +1 -0
  153. package/dist/integrations/langchain.cjs +95 -0
  154. package/dist/integrations/langchain.cjs.map +1 -0
  155. package/dist/integrations/langchain.d.cts +52 -0
  156. package/dist/integrations/langchain.d.ts +52 -0
  157. package/dist/integrations/langchain.js +95 -0
  158. package/dist/integrations/langchain.js.map +1 -0
  159. package/dist/integrations/langgraph.cjs +30 -0
  160. package/dist/integrations/langgraph.cjs.map +1 -0
  161. package/dist/integrations/langgraph.d.cts +53 -0
  162. package/dist/integrations/langgraph.d.ts +53 -0
  163. package/dist/integrations/langgraph.js +30 -0
  164. package/dist/integrations/langgraph.js.map +1 -0
  165. package/dist/integrations/mastra.cjs +108 -0
  166. package/dist/integrations/mastra.cjs.map +1 -0
  167. package/dist/integrations/mastra.d.cts +47 -0
  168. package/dist/integrations/mastra.d.ts +47 -0
  169. package/dist/integrations/mastra.js +108 -0
  170. package/dist/integrations/mastra.js.map +1 -0
  171. package/dist/langchain-adapter-DFJdEX04.d.cts +47 -0
  172. package/dist/langchain-adapter-DJsyjm5V.d.ts +47 -0
  173. package/dist/langchain-provider-NF5GIDQV.cjs +227 -0
  174. package/dist/langchain-provider-NF5GIDQV.cjs.map +1 -0
  175. package/dist/langchain-provider-PHL4UWNF.js +227 -0
  176. package/dist/langchain-provider-PHL4UWNF.js.map +1 -0
  177. package/dist/loader-DrIQ37nm.d.ts +38 -0
  178. package/dist/loader-eWuJ2GSL.d.cts +38 -0
  179. package/dist/logging-C8GLLg1f.d.cts +9 -0
  180. package/dist/logging-C8GLLg1f.d.ts +9 -0
  181. package/dist/managed-CwLx9h4C.d.cts +32 -0
  182. package/dist/managed-D9eQK1ut.d.ts +32 -0
  183. package/dist/mcp/index.cjs +12 -0
  184. package/dist/mcp/index.cjs.map +1 -0
  185. package/dist/mcp/index.d.cts +62 -0
  186. package/dist/mcp/index.d.ts +62 -0
  187. package/dist/mcp/index.js +12 -0
  188. package/dist/mcp/index.js.map +1 -0
  189. package/dist/memory/index.cjs +12 -0
  190. package/dist/memory/index.cjs.map +1 -0
  191. package/dist/memory/index.d.cts +113 -0
  192. package/dist/memory/index.d.ts +113 -0
  193. package/dist/memory/index.js +12 -0
  194. package/dist/memory/index.js.map +1 -0
  195. package/dist/model/index.cjs +16 -0
  196. package/dist/model/index.cjs.map +1 -0
  197. package/dist/model/index.d.cts +129 -0
  198. package/dist/model/index.d.ts +129 -0
  199. package/dist/model/index.js +16 -0
  200. package/dist/model/index.js.map +1 -0
  201. package/dist/model-CkYHzHPk.d.cts +50 -0
  202. package/dist/model-CkYHzHPk.d.ts +50 -0
  203. package/dist/runtime/index.cjs +49 -0
  204. package/dist/runtime/index.cjs.map +1 -0
  205. package/dist/runtime/index.d.cts +73 -0
  206. package/dist/runtime/index.d.ts +73 -0
  207. package/dist/runtime/index.js +49 -0
  208. package/dist/runtime/index.js.map +1 -0
  209. package/dist/server/index.cjs +604 -0
  210. package/dist/server/index.cjs.map +1 -0
  211. package/dist/server/index.d.cts +69 -0
  212. package/dist/server/index.d.ts +69 -0
  213. package/dist/server/index.js +604 -0
  214. package/dist/server/index.js.map +1 -0
  215. package/dist/skill/index.cjs +14 -0
  216. package/dist/skill/index.cjs.map +1 -0
  217. package/dist/skill/index.d.cts +16 -0
  218. package/dist/skill/index.d.ts +16 -0
  219. package/dist/skill/index.js +14 -0
  220. package/dist/skill/index.js.map +1 -0
  221. package/package.json +292 -0
@@ -0,0 +1,238 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
2
+
3
+ var _chunkEGUKJE3Zcjs = require('./chunk-EGUKJE3Z.cjs');
4
+
5
+
6
+ var _chunkLE5P3SJWcjs = require('./chunk-LE5P3SJW.cjs');
7
+
8
+
9
+ var _chunkJSP7ZROScjs = require('./chunk-JSP7ZROS.cjs');
10
+
11
+ // src/mcp/client.ts
12
+ var _indexjs = require('@modelcontextprotocol/sdk/client/index.js');
13
+ var _streamableHttpjs = require('@modelcontextprotocol/sdk/client/streamableHttp.js');
14
+ var _ssejs = require('@modelcontextprotocol/sdk/client/sse.js');
15
+ var _stdiojs = require('@modelcontextprotocol/sdk/client/stdio.js');
16
+ var _typesjs = require('@modelcontextprotocol/sdk/types.js');
17
+ var _util = require('util');
18
+
19
+ // src/mcp/headers.ts
20
+ var transportHeaders = /* @__PURE__ */ new Set([
21
+ "host",
22
+ "content-length",
23
+ "connection",
24
+ "transfer-encoding",
25
+ "upgrade",
26
+ "mcp-session-id",
27
+ "mcp-protocol-version",
28
+ "last-event-id",
29
+ "content-type",
30
+ "accept"
31
+ ]);
32
+ function mergeMCPHeaders(base, custom) {
33
+ const result = { ...base };
34
+ if (custom === void 0) return result;
35
+ if (!custom || typeof custom !== "object" || Array.isArray(custom)) throw new (0, _chunkJSP7ZROScjs.ConfigError)("MCP headers must be an object");
36
+ const protectedNames = /* @__PURE__ */ new Set([...Object.keys(base).map((name) => name.toLowerCase()), ...transportHeaders, "authorization"]);
37
+ const seen = /* @__PURE__ */ new Set();
38
+ for (const [name, value] of Object.entries(custom)) {
39
+ if (!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) throw new (0, _chunkJSP7ZROScjs.ConfigError)("Invalid MCP header name");
40
+ if (typeof value !== "string" || /[\x00-\x1f\x7f]/.test(value)) throw new (0, _chunkJSP7ZROScjs.ConfigError)("MCP header values must be strings without control characters");
41
+ const folded = name.toLowerCase();
42
+ if (protectedNames.has(folded)) throw new (0, _chunkJSP7ZROScjs.ConfigError)(`MCP header is protected: ${folded}`);
43
+ if (seen.has(folded)) throw new (0, _chunkJSP7ZROScjs.ConfigError)(`Duplicate MCP header: ${folded}`);
44
+ seen.add(folded);
45
+ Object.defineProperty(result, folded, { value, enumerable: true, configurable: true, writable: true });
46
+ }
47
+ return result;
48
+ }
49
+
50
+ // src/mcp/client.ts
51
+ function mcpServerURL(gatewayURL, id) {
52
+ const gateway = gatewayURL.replace(/\/+$/, "").replace(/\/(?:mcp|mcp-servers)$/, "");
53
+ return `${gateway}/mcp-servers/${encodeURIComponent(id)}`;
54
+ }
55
+ var MCPClient = (_class = class _MCPClient {
56
+ constructor(options, descriptor) {;_class.prototype.__init.call(this);
57
+ this.options = options;
58
+ this.descriptor = descriptor;
59
+ this.logger = _nullishCoalesce(options.logger, () => ( _chunkLE5P3SJWcjs.nullLogger));
60
+ this.timeouts = { sessionMs: _nullishCoalesce(options.sessionMs, () => ( 3e4)), metadataMs: _nullishCoalesce(options.metadataMs, () => ( 6e4)), toolMs: _nullishCoalesce(options.toolMs, () => ( 6e5)) };
61
+ if (Object.values(this.timeouts).some((timeout) => !Number.isFinite(timeout) || timeout <= 0)) throw new (0, _chunkJSP7ZROScjs.ConfigError)("MCP operation timeouts must be positive");
62
+ if (options.transport !== "stdio") {
63
+ let url;
64
+ try {
65
+ url = new URL(options.url);
66
+ } catch (e) {
67
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)("Direct MCP URL must be HTTP(S)");
68
+ }
69
+ if (!["http:", "https:"].includes(url.protocol)) throw new (0, _chunkJSP7ZROScjs.ConfigError)("Direct MCP URL must be HTTP(S)");
70
+ if (options.transport !== void 0 && !["streamable-http", "sse"].includes(options.transport)) throw new (0, _chunkJSP7ZROScjs.ConfigError)("MCP transport must be streamable-http, sse, or stdio");
71
+ }
72
+ this.logger.info("agentcore.mcp.client.created", { mode: descriptor ? "managed" : "direct", transport: _nullishCoalesce(options.transport, () => ( "streamable-http")), url: this.safeURL });
73
+ }
74
+
75
+
76
+
77
+
78
+
79
+ __init() {this.closed = false}
80
+
81
+
82
+ static platform(config, descriptor, options = {}) {
83
+ const { headers: custom, credentialHeadersProvider, ...connectionOptions } = options;
84
+ const customHeaders = mergeMCPHeaders({}, custom);
85
+ const headers = mergeMCPHeaders(config.gatewayHeaders, custom);
86
+ return new _MCPClient({ ...connectionOptions, url: mcpServerURL(config.mcpGatewayUrl, descriptor.mcpServerId), transport: "streamable-http", headersProvider: async () => {
87
+ if (!credentialHeadersProvider) return headers;
88
+ const bound = mergeMCPHeaders(config.gatewayHeaders, await credentialHeadersProvider());
89
+ return mergeMCPHeaders(bound, customHeaders);
90
+ } }, descriptor);
91
+ }
92
+ static direct(options) {
93
+ return new _MCPClient(options);
94
+ }
95
+ async listTools(options = {}) {
96
+ return this.withSession("list_tools", async (session) => {
97
+ const definitions = [];
98
+ let cursor;
99
+ const deadline = AbortSignal.timeout(this.timeouts.metadataMs);
100
+ const signal = AbortSignal.any([deadline, ...options.signal ? [options.signal] : []]);
101
+ do {
102
+ const result = await session.client.listTools(cursor ? { cursor } : void 0, { signal, timeout: this.timeouts.metadataMs });
103
+ definitions.push(...result.tools);
104
+ cursor = result.nextCursor;
105
+ } while (cursor);
106
+ return definitions.map((definition) => new (0, _chunkEGUKJE3Zcjs.Tool)({
107
+ name: definition.name,
108
+ description: _nullishCoalesce(definition.description, () => ( "")),
109
+ parameters: definition.inputSchema,
110
+ invoke: (arguments_) => this.callTool(definition.name, arguments_)
111
+ }));
112
+ });
113
+ }
114
+ async tools(options = {}) {
115
+ return this.listTools(options);
116
+ }
117
+ async callTool(name, arguments_, options = {}) {
118
+ return this.withSession("call_tool", (session) => session.client.callTool(
119
+ { name, arguments: arguments_ },
120
+ _typesjs.CallToolResultSchema,
121
+ { timeout: this.timeouts.toolMs, signal: options.signal }
122
+ ));
123
+ }
124
+ close() {
125
+ if (this.closing) return this.closing;
126
+ this.closed = true;
127
+ this.closing = (async () => {
128
+ if (this.opening && this.state) this.state.abort.abort();
129
+ await _optionalChain([this, 'access', _ => _.opening, 'optionalAccess', _2 => _2.catch, 'call', _3 => _3(() => void 0)]);
130
+ if (this.state) await this.retire(this.state);
131
+ })();
132
+ return this.closing;
133
+ }
134
+ [_util.inspect.custom]() {
135
+ return `MCPClient(url=${this.safeURL}, <redacted>)`;
136
+ }
137
+ toJSON() {
138
+ return this[_util.inspect.custom]();
139
+ }
140
+ get safeURL() {
141
+ if (this.options.transport === "stdio") return "stdio";
142
+ const url = new URL(this.options.url);
143
+ return `${url.origin}${url.pathname}`;
144
+ }
145
+ async acquire() {
146
+ for (; ; ) {
147
+ if (this.closed) throw new Error("MCP client is closed");
148
+ if (this.opening) return this.opening;
149
+ if (_optionalChain([this, 'access', _4 => _4.state, 'optionalAccess', _5 => _5.invalid])) {
150
+ await this.retire(this.state);
151
+ continue;
152
+ }
153
+ if (this.state) return this.state;
154
+ const request = this.open();
155
+ this.opening = request;
156
+ try {
157
+ return await request;
158
+ } finally {
159
+ this.opening = void 0;
160
+ }
161
+ }
162
+ }
163
+ async open() {
164
+ const client = new (0, _indexjs.Client)({ name: "agentcore-sdk", version: "0.1.0" });
165
+ const abort = new AbortController();
166
+ let transport;
167
+ if (this.options.transport === "stdio") transport = new (0, _stdiojs.StdioClientTransport)(this.options.server);
168
+ else {
169
+ const headers = await _asyncNullishCoalesce(await _optionalChain([this, 'access', _6 => _6.options, 'access', _7 => _7.headersProvider, 'optionalCall', _8 => _8()]), async () => ( {}));
170
+ const fetch = (input, init) => globalThis.fetch(input, { ...init, redirect: "manual", signal: AbortSignal.any([abort.signal, ..._optionalChain([init, 'optionalAccess', _9 => _9.signal]) ? [init.signal] : []]) });
171
+ transport = this.options.transport === "sse" ? new (0, _ssejs.SSEClientTransport)(new URL(this.options.url), { requestInit: { headers }, fetch }) : new (0, _streamableHttpjs.StreamableHTTPClientTransport)(new URL(this.options.url), { requestInit: { headers }, fetch });
172
+ }
173
+ const session = { client, transport, abort, invalid: false, active: /* @__PURE__ */ new Set() };
174
+ this.state = session;
175
+ const timer = setTimeout(() => abort.abort(new Error("MCP session open timed out")), this.timeouts.sessionMs);
176
+ client.onclose = () => {
177
+ session.invalid = true;
178
+ };
179
+ client.onerror = (error) => {
180
+ if (this.closed || session.closing) return;
181
+ session.invalid = true;
182
+ this.logger.warn("agentcore.mcp.session.error", { url: this.safeURL, errorType: error.name });
183
+ };
184
+ this.logger.info("agentcore.mcp.session.open.started", { url: this.safeURL, timeoutMs: this.timeouts.sessionMs });
185
+ try {
186
+ await client.connect(transport, { signal: abort.signal, timeout: this.timeouts.sessionMs });
187
+ abort.signal.throwIfAborted();
188
+ if (this.closed) throw new Error("MCP client is closed");
189
+ this.logger.info("agentcore.mcp.session.open.succeeded", { url: this.safeURL });
190
+ return session;
191
+ } catch (error) {
192
+ await this.retire(session);
193
+ throw error;
194
+ } finally {
195
+ clearTimeout(timer);
196
+ }
197
+ }
198
+ async withSession(operation, call) {
199
+ const session = await this.acquire();
200
+ if (this.closed) throw new Error("MCP client is closed");
201
+ const request = call(session);
202
+ session.active.add(request);
203
+ this.logger.info("agentcore.mcp.request.started", { operation, url: this.safeURL });
204
+ try {
205
+ const result = await request;
206
+ this.logger.info("agentcore.mcp.request.succeeded", { operation, url: this.safeURL });
207
+ return result;
208
+ } catch (error) {
209
+ if (!(error instanceof _typesjs.McpError) || [_typesjs.ErrorCode.ConnectionClosed, _typesjs.ErrorCode.RequestTimeout].includes(error.code)) session.invalid = true;
210
+ this.logger.warn("agentcore.mcp.request.failed", { operation, url: this.safeURL, errorType: error instanceof Error ? error.name : "unknown" });
211
+ throw error;
212
+ } finally {
213
+ session.active.delete(request);
214
+ }
215
+ }
216
+ retire(session) {
217
+ if (session.closing) return session.closing;
218
+ session.invalid = true;
219
+ session.closing = (async () => {
220
+ await Promise.allSettled([...session.active]);
221
+ session.abort.abort();
222
+ try {
223
+ await session.client.close();
224
+ } catch (error) {
225
+ this.logger.warn("agentcore.mcp.session.close.failed", { errorType: error instanceof Error ? error.name : "unknown", url: this.safeURL });
226
+ }
227
+ if (this.state === session) this.state = void 0;
228
+ })();
229
+ return session.closing;
230
+ }
231
+ }, _class);
232
+
233
+
234
+
235
+
236
+
237
+ exports.mergeMCPHeaders = mergeMCPHeaders; exports.mcpServerURL = mcpServerURL; exports.MCPClient = MCPClient;
238
+ //# sourceMappingURL=chunk-RQRI6RCG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-RQRI6RCG.cjs","../src/mcp/client.ts","../src/mcp/headers.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACVA,oEAAuB;AACvB,sFAA8C;AAC9C,gEAAmC;AACnC,oEAAiE;AAEjE,6DAA+E;AAC/E,4BAAwB;ADWxB;AACA;AEhBA,IAAM,iBAAA,kBAAmB,IAAI,GAAA,CAAI;AAAA,EAC/B,MAAA;AAAA,EAAQ,gBAAA;AAAA,EAAkB,YAAA;AAAA,EAAc,mBAAA;AAAA,EAAqB,SAAA;AAAA,EAC7D,gBAAA;AAAA,EAAkB,sBAAA;AAAA,EAAwB,eAAA;AAAA,EAAiB,cAAA;AAAA,EAAgB;AAC7E,CAAC,CAAA;AAGM,SAAS,eAAA,CAAgB,IAAA,EAAwC,MAAA,EAAmE;AACzI,EAAA,MAAM,OAAA,EAAS,EAAE,GAAG,KAAK,CAAA;AACzB,EAAA,GAAA,CAAI,OAAA,IAAW,KAAA,CAAA,EAAW,OAAO,MAAA;AACjC,EAAA,GAAA,CAAI,CAAC,OAAA,GAAU,OAAO,OAAA,IAAW,SAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG,MAAM,IAAI,kCAAA,CAAY,+BAA+B,CAAA;AACzH,EAAA,MAAM,eAAA,kBAAiB,IAAI,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,EAAA,GAAS,IAAA,CAAK,WAAA,CAAY,CAAC,CAAA,EAAG,GAAG,gBAAA,EAAkB,eAAe,CAAC,CAAA;AAC7H,EAAA,MAAM,KAAA,kBAAO,IAAI,GAAA,CAAY,CAAA;AAC7B,EAAA,IAAA,CAAA,MAAW,CAAC,IAAA,EAAM,KAAK,EAAA,GAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClD,IAAA,GAAA,CAAI,CAAC,+BAAA,CAAgC,IAAA,CAAK,IAAI,CAAA,EAAG,MAAM,IAAI,kCAAA,CAAY,yBAAyB,CAAA;AAChG,IAAA,GAAA,CAAI,OAAO,MAAA,IAAU,SAAA,GAAY,iBAAA,CAAkB,IAAA,CAAK,KAAK,CAAA,EAAG,MAAM,IAAI,kCAAA,CAAY,8DAA8D,CAAA;AACpJ,IAAA,MAAM,OAAA,EAAS,IAAA,CAAK,WAAA,CAAY,CAAA;AAChC,IAAA,GAAA,CAAI,cAAA,CAAe,GAAA,CAAI,MAAM,CAAA,EAAG,MAAM,IAAI,kCAAA,CAAY,CAAA,yBAAA,EAA4B,MAAM,CAAA,CAAA;AACX,IAAA;AAC9D,IAAA;AACsE,IAAA;AACvF,EAAA;AACO,EAAA;AACT;AFwB6F;AACA;ACpBxB;AACgB,EAAA;AAC5B,EAAA;AACzD;AAEuB;AASuE,EAAA;AAAvD,IAAA;AACjB,IAAA;AACc,IAAA;AAC4D,IAAA;AACZ,IAAA;AAC7C,IAAA;AAC7B,MAAA;AACA,MAAA;AAA2B,QAAA;AAAW,MAAA;AAAwD,QAAA;AAAG,MAAA;AAC9B,MAAA;AACa,MAAA;AACtF,IAAA;AACkF,IAAA;AACpF,EAAA;AAZqC,EAAA;AAR5B,EAAA;AACQ,EAAA;AACT,EAAA;AACA,EAAA;AACS,iBAAA;AACT,EAAA;AACS,EAAA;AAiBE,EAAA;AAC4D,IAAA;AAC7B,IAAA;AACa,IAAA;AACwB,IAAA;AAC5C,MAAA;AAC+C,MAAA;AAC3C,MAAA;AAC9B,IAAA;AACjB,EAAA;AACoD,EAAA;AAA8B,IAAA;AAAG,EAAA;AAEtB,EAAA;AACJ,IAAA;AACiB,MAAA;AACpE,MAAA;AACyD,MAAA;AACyB,MAAA;AACnF,MAAA;AACgF,QAAA;AACjD,QAAA;AAAmB,QAAA;AAC5C,MAAA;AACuC,MAAA;AAAmB,QAAA;AAA6C,QAAA;AAA2B,QAAA;AACxE,QAAA;AACjE,MAAA;AACH,IAAA;AACH,EAAA;AAC2D,EAAA;AAA+B,IAAA;AAAG,EAAA;AACkB,EAAA;AAC5C,IAAA;AAAuC,MAAA;AAAG,MAAA;AACjD,MAAA;AAA6B,IAAA;AACzF,EAAA;AAEuB,EAAA;AACS,IAAA;AAChB,IAAA;AACc,IAAA;AAC6B,MAAA;AACd,MAAA;AACG,MAAA;AAC3C,IAAA;AACS,IAAA;AACd,EAAA;AAC2B,EAAA;AAAsC,IAAA;AAAiB,EAAA;AACjE,EAAA;AAA8B,IAAA;AAAG,EAAA;AAEpB,EAAA;AACmB,IAAA;AACX,IAAA;AAAsC,IAAA;AAC5E,EAAA;AAC0C,EAAA;AAC/B,IAAA;AACgD,MAAA;AACzB,MAAA;AACL,MAAA;AAA8B,QAAA;AAAG,QAAA;AAAU,MAAA;AACxC,MAAA;AACF,MAAA;AAAkB,MAAA;AACxC,MAAA;AAAe,QAAA;AAAW,MAAA;AAAyB,QAAA;AAAW,MAAA;AACpE,IAAA;AACF,EAAA;AACuC,EAAA;AACgC,IAAA;AACnC,IAAA;AAC9B,IAAA;AAC8E,IAAA;AAC7E,IAAA;AACwD,MAAA;AACoD,MAAA;AAEvE,MAAA;AAE1C,IAAA;AACiF,IAAA;AACpE,IAAA;AACwE,IAAA;AAC9D,IAAA;AAAoB,MAAA;AAAM,IAAA;AACrB,IAAA;AACU,MAAA;AAClB,MAAA;AACoE,MAAA;AACxF,IAAA;AACuF,IAAA;AACnF,IAAA;AAC6E,MAAA;AACnD,MAAA;AAC2B,MAAA;AACuB,MAAA;AACvE,MAAA;AACO,IAAA;AAA2B,MAAA;AAAS,MAAA;AACpD,IAAA;AAA4B,MAAA;AAAG,IAAA;AACjC,EAAA;AAEoG,EAAA;AAC/D,IAAA;AACoB,IAAA;AAC3B,IAAA;AAA6B,IAAA;AACyB,IAAA;AAC9E,IAAA;AAAuB,MAAA;AAA6F,MAAA;AAAU,MAAA;AACpH,IAAA;AAC+D,MAAA;AACM,MAAA;AAC3E,MAAA;AACN,IAAA;AAAuC,MAAA;AAAG,IAAA;AAC9C,EAAA;AACgD,EAAA;AACV,IAAA;AAClB,IAAA;AACa,IAAA;AACe,MAAA;AACxB,MAAA;AAChB,MAAA;AAA6B,QAAA;AACnB,MAAA;AAAuF,QAAA;AAAsD,MAAA;AAClH,MAAA;AACxC,IAAA;AACY,IAAA;AACjB,EAAA;AACF;ADyD6F;AACA;AACA;AACA;AACA;AACA","file":"/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-RQRI6RCG.cjs","sourcesContent":[null,"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"]}
@@ -0,0 +1,141 @@
1
+ import {
2
+ AgentCoreError,
3
+ ConfigError,
4
+ ContextError
5
+ } from "./chunk-MZ5UWGXS.js";
6
+
7
+ // src/collaboration/errors.ts
8
+ var CollaborationError = class extends AgentCoreError {
9
+ code = "COLLABORATION_ERROR";
10
+ retryable = false;
11
+ };
12
+ var CollaborationConfigError = class extends ConfigError {
13
+ code = "COLLABORATION_CONFIG_INVALID";
14
+ retryable = true;
15
+ };
16
+ var CollaborationContextError = class extends ContextError {
17
+ code = "COLLABORATION_CONTEXT_INVALID";
18
+ retryable = false;
19
+ };
20
+ var CollaborationDisabledError = class extends CollaborationError {
21
+ code = "COLLABORATION_DISABLED";
22
+ };
23
+ var CollaborationContextRequiredError = class extends CollaborationError {
24
+ code = "COLLABORATION_CONTEXT_REQUIRED";
25
+ };
26
+ var CollaborationTeamUnavailableError = class extends CollaborationError {
27
+ code = "COLLABORATION_TEAM_UNAVAILABLE";
28
+ };
29
+ var CollaborationRoleUnsupportedError = class extends CollaborationError {
30
+ code = "COLLABORATION_ROLE_UNSUPPORTED";
31
+ };
32
+ var CollaborationToolArgumentError = class extends CollaborationError {
33
+ code = "COLLABORATION_ARGUMENT_INVALID";
34
+ };
35
+ var CollaborationTaskUnauthorizedError = class extends CollaborationError {
36
+ code = "COLLABORATION_TASK_UNAUTHORIZED";
37
+ };
38
+ var CollaborationTaskInvalidError = class extends CollaborationError {
39
+ code = "COLLABORATION_TASK_INVALID";
40
+ };
41
+ var CollaborationTaskNotFoundError = class extends CollaborationError {
42
+ code = "COLLABORATION_TASK_NOT_FOUND";
43
+ };
44
+ var CollaborationTaskConflictError = class extends CollaborationError {
45
+ code = "COLLABORATION_TASK_CONFLICT";
46
+ };
47
+ var CollaborationFileTooLargeError = class extends CollaborationError {
48
+ code = "COLLABORATION_FILE_TOO_LARGE";
49
+ };
50
+ var CollaborationTaskUnavailableError = class extends CollaborationError {
51
+ code = "COLLABORATION_TASK_UNAVAILABLE";
52
+ retryable = true;
53
+ };
54
+
55
+ // src/collaboration/context.ts
56
+ import { AsyncLocalStorage } from "async_hooks";
57
+ import { inspect } from "util";
58
+ var CollaborationTurnContext = class {
59
+ constructor(sessionId, teamId, roomId, eventId, roomKind) {
60
+ this.sessionId = sessionId;
61
+ this.teamId = teamId;
62
+ this.roomId = roomId;
63
+ this.eventId = eventId;
64
+ this.roomKind = roomKind;
65
+ Object.freeze(this);
66
+ }
67
+ sessionId;
68
+ teamId;
69
+ roomId;
70
+ eventId;
71
+ roomKind;
72
+ [inspect.custom]() {
73
+ return "CollaborationTurnContext(<redacted>)";
74
+ }
75
+ toJSON() {
76
+ return this[inspect.custom]();
77
+ }
78
+ };
79
+ var context = new AsyncLocalStorage();
80
+ function currentCollaborationContext(required = true) {
81
+ const value = context.getStore();
82
+ if (!value && required) throw new CollaborationContextRequiredError("No collaboration request context is active.");
83
+ return value;
84
+ }
85
+ function useCollaborationContext(value, callback) {
86
+ return context.run(value, callback);
87
+ }
88
+ function bindCollaborationContext(headers, callback) {
89
+ return useCollaborationContext(parseCollaborationContext(headers), callback);
90
+ }
91
+ function parseCollaborationContext(headers) {
92
+ const normalized = Object.fromEntries(Object.entries(headers).map(([key, value]) => [key.toLowerCase(), value]));
93
+ const encoded = normalized["x-agentcore-collaboration-context"];
94
+ if (encoded === void 0) return;
95
+ let data;
96
+ try {
97
+ if (!encoded || encoded.length > 8192 || !/^[A-Za-z0-9+/_-]+={0,2}$/.test(encoded) || encoded.replace(/=+$/, "").length % 4 === 1) throw new Error("base64");
98
+ data = JSON.parse(new TextDecoder("utf8", { fatal: true }).decode(Buffer.from(encoded, "base64url")));
99
+ if (!data || Array.isArray(data) || data.version !== 1) throw new Error("schema");
100
+ } catch {
101
+ throw new CollaborationContextError("collaboration context header is invalid");
102
+ }
103
+ const field = (name, required = true) => {
104
+ const value = data[name];
105
+ if (value == null && !required) return;
106
+ if (typeof value !== "string" || !value.trim() || value.length > 1024) throw new CollaborationContextError(`collaboration context ${name} is invalid`);
107
+ return value.trim();
108
+ };
109
+ const kind = field("roomKind");
110
+ if (kind !== "dm" && kind !== "group" && kind !== "task") throw new CollaborationContextError("collaboration context roomKind is invalid");
111
+ return new CollaborationTurnContext(
112
+ normalized["x-agentcore-session-id"]?.trim() || void 0,
113
+ field("teamId", kind === "task"),
114
+ field("roomId"),
115
+ field("eventId"),
116
+ kind
117
+ );
118
+ }
119
+
120
+ export {
121
+ CollaborationError,
122
+ CollaborationConfigError,
123
+ CollaborationContextError,
124
+ CollaborationDisabledError,
125
+ CollaborationContextRequiredError,
126
+ CollaborationTeamUnavailableError,
127
+ CollaborationRoleUnsupportedError,
128
+ CollaborationToolArgumentError,
129
+ CollaborationTaskUnauthorizedError,
130
+ CollaborationTaskInvalidError,
131
+ CollaborationTaskNotFoundError,
132
+ CollaborationTaskConflictError,
133
+ CollaborationFileTooLargeError,
134
+ CollaborationTaskUnavailableError,
135
+ CollaborationTurnContext,
136
+ currentCollaborationContext,
137
+ useCollaborationContext,
138
+ bindCollaborationContext,
139
+ parseCollaborationContext
140
+ };
141
+ //# sourceMappingURL=chunk-RYXL25AI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/collaboration/errors.ts","../src/collaboration/context.ts"],"sourcesContent":["import { AgentCoreError, ConfigError, ContextError } from '../errors';\n\nexport class CollaborationError extends AgentCoreError {\n override readonly code: string = 'COLLABORATION_ERROR';\n readonly retryable: boolean = false;\n}\nexport class CollaborationConfigError extends ConfigError {\n override readonly code = 'COLLABORATION_CONFIG_INVALID';\n readonly retryable = true;\n}\nexport class CollaborationContextError extends ContextError {\n override readonly code = 'COLLABORATION_CONTEXT_INVALID';\n readonly retryable = false;\n}\nexport class CollaborationDisabledError extends CollaborationError { override readonly code = 'COLLABORATION_DISABLED'; }\nexport class CollaborationContextRequiredError extends CollaborationError { override readonly code = 'COLLABORATION_CONTEXT_REQUIRED'; }\nexport class CollaborationTeamUnavailableError extends CollaborationError { override readonly code = 'COLLABORATION_TEAM_UNAVAILABLE'; }\nexport class CollaborationRoleUnsupportedError extends CollaborationError { override readonly code = 'COLLABORATION_ROLE_UNSUPPORTED'; }\nexport class CollaborationToolArgumentError extends CollaborationError { override readonly code = 'COLLABORATION_ARGUMENT_INVALID'; }\nexport class CollaborationTaskUnauthorizedError extends CollaborationError { override readonly code = 'COLLABORATION_TASK_UNAUTHORIZED'; }\nexport class CollaborationTaskInvalidError extends CollaborationError { override readonly code = 'COLLABORATION_TASK_INVALID'; }\nexport class CollaborationTaskNotFoundError extends CollaborationError { override readonly code = 'COLLABORATION_TASK_NOT_FOUND'; }\nexport class CollaborationTaskConflictError extends CollaborationError { override readonly code = 'COLLABORATION_TASK_CONFLICT'; }\nexport class CollaborationFileTooLargeError extends CollaborationError { override readonly code = 'COLLABORATION_FILE_TOO_LARGE'; }\nexport class CollaborationTaskUnavailableError extends CollaborationError {\n override readonly code = 'COLLABORATION_TASK_UNAVAILABLE';\n override readonly retryable = true;\n}\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { inspect } from 'node:util';\nimport { CollaborationContextError, CollaborationContextRequiredError } from './errors';\n\nexport class CollaborationTurnContext {\n constructor(readonly sessionId: string | undefined, readonly teamId: string | undefined,\n readonly roomId: string, readonly eventId: string, readonly roomKind: 'dm' | 'group' | 'task') { Object.freeze(this); }\n [inspect.custom](): string { return 'CollaborationTurnContext(<redacted>)'; }\n toJSON(): string { return this[inspect.custom](); }\n}\nconst context = new AsyncLocalStorage<CollaborationTurnContext | undefined>();\nexport function currentCollaborationContext(required?: true): CollaborationTurnContext;\nexport function currentCollaborationContext(required: false): CollaborationTurnContext | undefined;\nexport function currentCollaborationContext(required = true): CollaborationTurnContext | undefined {\n const value = context.getStore();\n if (!value && required) throw new CollaborationContextRequiredError('No collaboration request context is active.');\n return value;\n}\nexport function useCollaborationContext<T>(value: CollaborationTurnContext | undefined, callback: () => T): T { return context.run(value, callback); }\nexport function bindCollaborationContext<T>(headers: Readonly<Record<string, string>>, callback: () => T): T {\n return useCollaborationContext(parseCollaborationContext(headers), callback);\n}\nexport function parseCollaborationContext(headers: Readonly<Record<string, string>>): CollaborationTurnContext | undefined {\n const normalized = Object.fromEntries(Object.entries(headers).map(([key, value]) => [key.toLowerCase(), value]));\n const encoded = normalized['x-agentcore-collaboration-context'];\n if (encoded === undefined) return;\n let data: Record<string, unknown>;\n try {\n if (!encoded || encoded.length > 8192 || !/^[A-Za-z0-9+/_-]+={0,2}$/.test(encoded) || encoded.replace(/=+$/, '').length % 4 === 1) throw new Error('base64');\n data = JSON.parse(new TextDecoder('utf8', { fatal: true }).decode(Buffer.from(encoded, 'base64url')));\n if (!data || Array.isArray(data) || data.version !== 1) throw new Error('schema');\n } catch { throw new CollaborationContextError('collaboration context header is invalid'); }\n const field = (name: string, required = true): string | undefined => {\n const value = data[name];\n if (value == null && !required) return;\n if (typeof value !== 'string' || !value.trim() || value.length > 1024) throw new CollaborationContextError(`collaboration context ${name} is invalid`);\n return value.trim();\n };\n const kind = field('roomKind');\n if (kind !== 'dm' && kind !== 'group' && kind !== 'task') throw new CollaborationContextError('collaboration context roomKind is invalid');\n return new CollaborationTurnContext(normalized['x-agentcore-session-id']?.trim() || undefined,\n field('teamId', kind === 'task'), field('roomId')!, field('eventId')!, kind);\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,113 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2;
2
+
3
+ var _chunk2E5EWEDGcjs = require('./chunk-2E5EWEDG.cjs');
4
+
5
+
6
+ var _chunkJSP7ZROScjs = require('./chunk-JSP7ZROS.cjs');
7
+
8
+ // src/auth/access-key.ts
9
+ var _util = require('util');
10
+ var AccessKeyCredential = class {
11
+ #values;
12
+ constructor(values) {
13
+ if (!_optionalChain([values, 'access', _ => _.accessKeyId, 'optionalAccess', _2 => _2.trim, 'call', _3 => _3()]) || !_optionalChain([values, 'access', _4 => _4.accessKeySecret, 'optionalAccess', _5 => _5.trim, 'call', _6 => _6()]) || values.securityToken !== void 0 && !values.securityToken.trim()) {
14
+ throw new TypeError("AccessKey ID, secret and optional security token must not be empty");
15
+ }
16
+ this.#values = { ...values };
17
+ }
18
+ get accessKeyId() {
19
+ return this.#values.accessKeyId;
20
+ }
21
+ get accessKeySecret() {
22
+ return this.#values.accessKeySecret;
23
+ }
24
+ get securityToken() {
25
+ return this.#values.securityToken;
26
+ }
27
+ [_util.inspect.custom]() {
28
+ return `AccessKeyCredential(type=${this.securityToken ? "sts" : "access_key"}, <redacted>)`;
29
+ }
30
+ toJSON() {
31
+ return this[_util.inspect.custom]();
32
+ }
33
+ };
34
+ var ResourceCredential = (_class = class extends AccessKeyCredential {
35
+
36
+ __init() {this.credentialType = "ram_sts"}
37
+ constructor(values) {
38
+ super(values);_class.prototype.__init.call(this);;
39
+ if (!Number.isFinite(values.expiration.getTime())) throw new TypeError("STS expiration must be a valid Date");
40
+ this.expiration = new Date(values.expiration);
41
+ }
42
+ [_util.inspect.custom]() {
43
+ return `ResourceCredential(expiration=${this.expiration.toISOString()}, <redacted>)`;
44
+ }
45
+ }, _class);
46
+
47
+ // src/auth/resource-sts.ts
48
+ var HIGH_CODE_SDK_PURPOSE = "highcode_sdk";
49
+ var AGENT_IDENTITY_DATA_PURPOSE = "agentidentitydata";
50
+ var ResourceSTSProvider = (_class2 = class {
51
+
52
+ __init2() {this.cache = /* @__PURE__ */ new Map()}
53
+ __init3() {this.pending = /* @__PURE__ */ new Map()}
54
+ constructor(endpoint, source, options = {}) {;_class2.prototype.__init2.call(this);_class2.prototype.__init3.call(this);
55
+ this.controller = new (0, _chunk2E5EWEDGcjs.ControllerClient)(endpoint, source, options);
56
+ }
57
+ async get(purpose) {
58
+ if (purpose !== void 0) {
59
+ purpose = purpose.trim();
60
+ if (!purpose) throw new TypeError("purpose must not be empty");
61
+ }
62
+ const cached = this.cache.get(purpose);
63
+ if (cached && cached.expiration.getTime() > Date.now() + 3e5) return cached;
64
+ const current = this.pending.get(purpose);
65
+ if (current) return current;
66
+ const request = this.exchange(purpose);
67
+ this.pending.set(purpose, request);
68
+ try {
69
+ const credential = await request;
70
+ this.cache.set(purpose, credential);
71
+ return credential;
72
+ } finally {
73
+ this.pending.delete(purpose);
74
+ }
75
+ }
76
+ close() {
77
+ this.controller.close();
78
+ this.cache.clear();
79
+ }
80
+ async exchange(purpose) {
81
+ const response = await this.controller.post("/api/v1/credentials/sts", purpose);
82
+ if (response.status < 200 || response.status >= 300) {
83
+ throw new (0, _chunkJSP7ZROScjs.CredentialExchangeError)(`Controller STS request failed with HTTP ${response.status}${response.message ? `: ${response.message}` : ""}`);
84
+ }
85
+ try {
86
+ const value = response.payload;
87
+ const read = (key) => {
88
+ const item = value[key];
89
+ if (typeof item !== "string" || !item.trim()) throw new Error("invalid field");
90
+ return item.trim();
91
+ };
92
+ const expiration = new Date(read("expiration"));
93
+ if (!(expiration.getTime() > Date.now())) throw new Error("expired STS");
94
+ return new ResourceCredential({
95
+ accessKeyId: read("access_key_id"),
96
+ accessKeySecret: read("access_key_secret"),
97
+ securityToken: read("security_token"),
98
+ expiration
99
+ });
100
+ } catch (e) {
101
+ throw new (0, _chunkJSP7ZROScjs.CredentialExchangeError)("Controller returned an invalid STS response");
102
+ }
103
+ }
104
+ }, _class2);
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+ exports.AccessKeyCredential = AccessKeyCredential; exports.ResourceCredential = ResourceCredential; exports.HIGH_CODE_SDK_PURPOSE = HIGH_CODE_SDK_PURPOSE; exports.AGENT_IDENTITY_DATA_PURPOSE = AGENT_IDENTITY_DATA_PURPOSE; exports.ResourceSTSProvider = ResourceSTSProvider;
113
+ //# sourceMappingURL=chunk-RZNQGEGJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-RZNQGEGJ.cjs","../src/auth/access-key.ts","../src/auth/resource-sts.ts"],"names":[],"mappings":"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","file":"/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-RZNQGEGJ.cjs","sourcesContent":[null,"import { inspect } from 'node:util';\n\nexport interface AccessKeyOptions {\n accessKeyId: string;\n accessKeySecret: string;\n securityToken?: string;\n}\n\nexport class AccessKeyCredential {\n #values: AccessKeyOptions;\n constructor(values: AccessKeyOptions) {\n if (!values.accessKeyId?.trim() || !values.accessKeySecret?.trim() ||\n (values.securityToken !== undefined && !values.securityToken.trim())) {\n throw new TypeError('AccessKey ID, secret and optional security token must not be empty');\n }\n this.#values = { ...values };\n }\n get accessKeyId(): string { return this.#values.accessKeyId; }\n get accessKeySecret(): string { return this.#values.accessKeySecret; }\n get securityToken(): string | undefined { return this.#values.securityToken; }\n [inspect.custom](): string { return `AccessKeyCredential(type=${this.securityToken ? 'sts' : 'access_key'}, <redacted>)`; }\n toJSON(): string { return this[inspect.custom](); }\n}\n\nexport class ResourceCredential extends AccessKeyCredential {\n readonly expiration: Date;\n readonly credentialType = 'ram_sts';\n constructor(values: AccessKeyOptions & { securityToken: string; expiration: Date }) {\n super(values);\n if (!Number.isFinite(values.expiration.getTime())) throw new TypeError('STS expiration must be a valid Date');\n this.expiration = new Date(values.expiration);\n }\n [inspect.custom](): string { return `ResourceCredential(expiration=${this.expiration.toISOString()}, <redacted>)`; }\n}\n\nexport interface CredentialProvider {\n get(purpose?: string): Promise<AccessKeyCredential> | AccessKeyCredential;\n}\n","import { CredentialExchangeError } from '../errors';\nimport { ResourceCredential } from './access-key';\nimport type { AgentSATokenSource } from './agent-sa-token';\nimport { ControllerClient, type ControllerOptions } from './controller';\n\nexport const HIGH_CODE_SDK_PURPOSE = 'highcode_sdk';\nexport const AGENT_IDENTITY_DATA_PURPOSE = 'agentidentitydata';\n\nexport class ResourceSTSProvider {\n private readonly controller: ControllerClient;\n private readonly cache = new Map<string | undefined, ResourceCredential>();\n private readonly pending = new Map<string | undefined, Promise<ResourceCredential>>();\n\n constructor(endpoint: string, source: AgentSATokenSource, options: ControllerOptions = {}) {\n this.controller = new ControllerClient(endpoint, source, options);\n }\n async get(purpose?: string): Promise<ResourceCredential> {\n if (purpose !== undefined) {\n purpose = purpose.trim();\n if (!purpose) throw new TypeError('purpose must not be empty');\n }\n const cached = this.cache.get(purpose);\n if (cached && cached.expiration.getTime() > Date.now() + 300_000) return cached;\n const current = this.pending.get(purpose);\n if (current) return current;\n const request = this.exchange(purpose);\n this.pending.set(purpose, request);\n try {\n const credential = await request;\n this.cache.set(purpose, credential);\n return credential;\n } finally { this.pending.delete(purpose); }\n }\n close(): void { this.controller.close(); this.cache.clear(); }\n\n private async exchange(purpose?: string): Promise<ResourceCredential> {\n const response = await this.controller.post('/api/v1/credentials/sts', purpose);\n if (response.status < 200 || response.status >= 300) {\n throw new CredentialExchangeError(`Controller STS request failed with HTTP ${response.status}${response.message ? `: ${response.message}` : ''}`);\n }\n try {\n const value = response.payload as Record<string, unknown>;\n const read = (key: string): string => {\n const item = value[key];\n if (typeof item !== 'string' || !item.trim()) throw new Error('invalid field');\n return item.trim();\n };\n const expiration = new Date(read('expiration'));\n if (!(expiration.getTime() > Date.now())) throw new Error('expired STS');\n return new ResourceCredential({\n accessKeyId: read('access_key_id'), accessKeySecret: read('access_key_secret'),\n securityToken: read('security_token'), expiration,\n });\n } catch { throw new CredentialExchangeError('Controller returned an invalid STS response'); }\n }\n}\n"]}
@@ -0,0 +1,48 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkJSP7ZROScjs = require('./chunk-JSP7ZROS.cjs');
4
+
5
+ // src/integrations/ai-sdk.ts
6
+ var _openaicompatible = require('@ai-sdk/openai-compatible');
7
+ var _openai = require('@ai-sdk/openai');
8
+ var _anthropic = require('@ai-sdk/anthropic');
9
+ var _ai = require('ai');
10
+ function languageModel(client, options = {}) {
11
+ if ("languageModel" in client) {
12
+ if (options.api) throw new (0, _chunkJSP7ZROScjs.ConfigError)("select the API when constructing the direct provider model");
13
+ return client.languageModel;
14
+ }
15
+ const { provider, baseURL, model, maxTokens } = client.settings;
16
+ const fetch = client.httpFetch.bind(client);
17
+ let result;
18
+ if (provider === "anthropic") {
19
+ if (options.api === "responses") throw new (0, _chunkJSP7ZROScjs.ConfigError)("Anthropic protocol does not publish Responses API");
20
+ result = _anthropic.createAnthropic.call(void 0, { baseURL: `${baseURL.replace(/\/+$/, "")}/v1`, apiKey: "agentcore-transport", fetch })(model);
21
+ } else if (options.api === "responses") {
22
+ result = _openai.createOpenAI.call(void 0, { baseURL, apiKey: "agentcore-transport", fetch }).responses(model);
23
+ } else {
24
+ result = _openaicompatible.createOpenAICompatible.call(void 0, { name: "agentcore", baseURL, fetch, supportsStructuredOutputs: true }).chatModel(model);
25
+ }
26
+ return maxTokens === void 0 ? result : _ai.wrapLanguageModel.call(void 0, {
27
+ model: result,
28
+ middleware: _ai.defaultSettingsMiddleware.call(void 0, { settings: { maxOutputTokens: maxTokens } })
29
+ });
30
+ }
31
+ function tools(items) {
32
+ const result = /* @__PURE__ */ Object.create(null);
33
+ for (const item of items) {
34
+ if (Object.hasOwn(result, item.name)) throw new (0, _chunkJSP7ZROScjs.ConfigError)(`duplicate tool name: ${item.name}`);
35
+ result[item.name] = _ai.tool.call(void 0, {
36
+ description: item.description,
37
+ inputSchema: _ai.jsonSchema.call(void 0, item.parameters),
38
+ execute: (arguments_) => item.invoke(arguments_)
39
+ });
40
+ }
41
+ return result;
42
+ }
43
+
44
+
45
+
46
+
47
+ exports.languageModel = languageModel; exports.tools = tools;
48
+ //# sourceMappingURL=chunk-S7PWSJNP.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-S7PWSJNP.cjs","../src/integrations/ai-sdk.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACJA,6DAAuC;AACvC,wCAA6B;AAC7B,8CAAgC;AAEhC,wBAA6F;AAOtF,SAAS,aAAA,CAAc,MAAA,EAA2C,QAAA,EAA0C,CAAC,CAAA,EAAoB;AACtI,EAAA,GAAA,CAAI,gBAAA,GAAmB,MAAA,EAAQ;AAC7B,IAAA,GAAA,CAAI,OAAA,CAAQ,GAAA,EAAK,MAAM,IAAI,kCAAA,CAAY,4DAA4D,CAAA;AACnG,IAAA,OAAO,MAAA,CAAO,aAAA;AAAA,EAChB;AACA,EAAA,MAAM,EAAE,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,UAAU,EAAA,EAAI,MAAA,CAAO,QAAA;AACvD,EAAA,MAAM,MAAA,EAAQ,MAAA,CAAO,SAAA,CAAU,IAAA,CAAK,MAAM,CAAA;AAC1C,EAAA,IAAI,MAAA;AACJ,EAAA,GAAA,CAAI,SAAA,IAAa,WAAA,EAAa;AAC5B,IAAA,GAAA,CAAI,OAAA,CAAQ,IAAA,IAAQ,WAAA,EAAa,MAAM,IAAI,kCAAA,CAAY,mDAAmD,CAAA;AAC1G,IAAA,OAAA,EAAS,wCAAA,EAAkB,OAAA,EAAS,CAAA,EAAA;AACX,EAAA;AACQ,IAAA;AAC5B,EAAA;AAE6B,IAAA;AACpC,EAAA;AAE0C,EAAA;AACjC,IAAA;AAAoB,IAAA;AAC5B,EAAA;AACH;AAGuD;AACtB,EAAA;AACL,EAAA;AACc,IAAA;AACb,IAAA;AACL,MAAA;AAC0B,MAAA;AACd,MAAA;AAC/B,IAAA;AACH,EAAA;AACO,EAAA;AACT;ADJyC;AACA;AACA;AACA;AACA","file":"/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-S7PWSJNP.cjs","sourcesContent":[null,"import { createOpenAICompatible } from '@ai-sdk/openai-compatible';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport { createAnthropic } from '@ai-sdk/anthropic';\nimport type { LanguageModelV3 } from '@ai-sdk/provider';\nimport { defaultSettingsMiddleware, jsonSchema, tool, wrapLanguageModel, type ToolSet } from 'ai';\nimport { ConfigError } from '../errors';\nimport type { ModelClient } from '../model/client';\nimport type { ProviderModelClient } from '../model/provider';\nimport type { Tool, ToolArguments } from './common';\n\n/** The caller owns the ModelClient (or its Core); this adapter does not close it. */\nexport function languageModel(client: ModelClient | ProviderModelClient, options: { api?: 'chat' | 'responses' } = {}): LanguageModelV3 {\n if ('languageModel' in client) {\n if (options.api) throw new ConfigError('select the API when constructing the direct provider model');\n return client.languageModel;\n }\n const { provider, baseURL, model, maxTokens } = client.settings;\n const fetch = client.httpFetch.bind(client);\n let result: LanguageModelV3;\n if (provider === 'anthropic') {\n if (options.api === 'responses') throw new ConfigError('Anthropic protocol does not publish Responses API');\n result = createAnthropic({ baseURL: `${baseURL.replace(/\\/+$/, '')}/v1`, apiKey: 'agentcore-transport', fetch })(model);\n } else if (options.api === 'responses') {\n result = createOpenAI({ baseURL, apiKey: 'agentcore-transport', fetch }).responses(model);\n } else {\n // Forward explicitly requested schemas; the backend decides model support.\n result = createOpenAICompatible({ name: 'agentcore', baseURL, fetch, supportsStructuredOutputs: true }).chatModel(model);\n }\n // A descriptor supplies defaults, not a limit on explicit per-call settings.\n return maxTokens === undefined ? result : wrapLanguageModel({\n model: result, middleware: defaultSettingsMiddleware({ settings: { maxOutputTokens: maxTokens } }),\n });\n}\n\n/** MCP and Skill tools share the same canonical Tool representation. */\nexport function tools(items: readonly Tool[]): ToolSet {\n const result: ToolSet = Object.create(null) as ToolSet;\n for (const item of items) {\n if (Object.hasOwn(result, item.name)) throw new ConfigError(`duplicate tool name: ${item.name}`);\n result[item.name] = tool({\n description: item.description,\n inputSchema: jsonSchema<ToolArguments>(item.parameters),\n execute: (arguments_) => item.invoke(arguments_),\n });\n }\n return result;\n}\nexport { AISDKEventConverter as AgentCoreConverter } from './event-converters';\n"]}