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,139 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
+
3
+ var _chunkJSP7ZROScjs = require('./chunk-JSP7ZROS.cjs');
4
+
5
+ // src/runtime/config.ts
6
+ var _promises = require('fs/promises');
7
+ var _yaml = require('yaml');
8
+ var DEFAULT_CONFIG_PATH = "/var/run/agentcore/agent/agent.yaml";
9
+ function object(value, label) {
10
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
11
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)(`${label} must be an object`);
12
+ }
13
+ return value;
14
+ }
15
+ function requiredString(value, label) {
16
+ if (typeof value !== "string" || !value.trim()) {
17
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)(`${label} must be a non-empty string`);
18
+ }
19
+ return value.trim();
20
+ }
21
+ function httpUrl(value, label) {
22
+ const text = requiredString(value, label);
23
+ let url;
24
+ try {
25
+ url = new URL(text);
26
+ } catch (e) {
27
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)(`${label} must be an absolute HTTP(S) URL`);
28
+ }
29
+ if (!["http:", "https:"].includes(url.protocol) || !url.hostname || url.username || url.password || url.search || url.hash) {
30
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)(`${label} must be HTTP(S) without user info, query, or fragment`);
31
+ }
32
+ return text.replace(/\/+$/, "");
33
+ }
34
+ var sensitive = /* @__PURE__ */ new Set([
35
+ "apikey",
36
+ "api_key",
37
+ "authorization",
38
+ "accesskeyid",
39
+ "accesskeysecret",
40
+ "cookie",
41
+ "header",
42
+ "headers",
43
+ "password",
44
+ "secret",
45
+ "securitytoken",
46
+ "token"
47
+ ]);
48
+ function rejectInlineCredentials(value, label) {
49
+ if (Array.isArray(value)) {
50
+ value.forEach((item, i) => rejectInlineCredentials(item, `${label}[${i}]`));
51
+ } else if (value && typeof value === "object") {
52
+ for (const [key, item] of Object.entries(value)) {
53
+ if (sensitive.has(key.toLowerCase())) throw new (0, _chunkJSP7ZROScjs.ConfigError)(`${label}.${key} must not contain inline credentials`);
54
+ rejectInlineCredentials(item, `${label}.${key}`);
55
+ }
56
+ }
57
+ }
58
+ function parseAgentConfig(data) {
59
+ if (Buffer.byteLength(data) > 1024 * 1024) throw new (0, _chunkJSP7ZROScjs.ConfigError)("agent.yaml exceeds the 1 MiB size limit");
60
+ let value;
61
+ try {
62
+ const text = typeof data === "string" ? data : new TextDecoder("utf-8", { fatal: true }).decode(data);
63
+ const doc = _yaml.parseDocument.call(void 0, text, { uniqueKeys: true });
64
+ if (doc.errors.length) throw new Error("invalid YAML");
65
+ _yaml.visit.call(void 0, doc, {
66
+ Alias() {
67
+ throw new Error("YAML alias");
68
+ },
69
+ Node(_key, node) {
70
+ if ("anchor" in node && node.anchor) throw new Error("YAML anchor");
71
+ },
72
+ Pair(_key, pair) {
73
+ if (!pair.key || typeof pair.key !== "object" || !("value" in pair.key) || typeof pair.key.value !== "string") {
74
+ throw new Error("non-string YAML key");
75
+ }
76
+ }
77
+ });
78
+ value = doc.toJS();
79
+ } catch (e2) {
80
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)("invalid agent.yaml (UTF-8 YAML, unique string keys, no anchors or aliases required)");
81
+ }
82
+ return parseAgentConfigMapping(value);
83
+ }
84
+ function parseAgentConfigMapping(value) {
85
+ const root = object(value, "agent.yaml");
86
+ if (root.apiVersion !== "agentteams.io/v1alpha1" || root.kind !== "AgentConfig") {
87
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)("unsupported agent.yaml apiVersion or kind");
88
+ }
89
+ const metadata = object(root.metadata, "metadata");
90
+ const spec = object(root.spec, "spec");
91
+ const model = object(spec.model, "spec.model");
92
+ const mcp = object(spec.mcp, "spec.mcp");
93
+ rejectInlineCredentials(model, "spec.model");
94
+ rejectInlineCredentials(mcp, "spec.mcp");
95
+ const rawHeaders = object(spec.credentials, "spec.credentials").header;
96
+ if (!Array.isArray(rawHeaders) || !rawHeaders.length) throw new (0, _chunkJSP7ZROScjs.ConfigError)("spec.credentials.header must be a non-empty list");
97
+ const headers = {};
98
+ for (const raw of rawHeaders) {
99
+ const header = object(raw, "gateway header");
100
+ const key = requiredString(header.key, "header.key").toLowerCase();
101
+ const val = requiredString(header.value, "header.value");
102
+ if (!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(key) || /[\r\n]/.test(val)) throw new (0, _chunkJSP7ZROScjs.ConfigError)("invalid gateway header");
103
+ if (Object.hasOwn(headers, key)) throw new (0, _chunkJSP7ZROScjs.ConfigError)(`duplicate gateway header: ${key}`);
104
+ Object.defineProperty(headers, key, { value: val, enumerable: true });
105
+ }
106
+ if (!/^bearer\s+\S/i.test(_nullishCoalesce(headers.authorization, () => ( "")))) throw new (0, _chunkJSP7ZROScjs.ConfigError)("spec.credentials.header requires a Bearer Authorization header");
107
+ const runtimeName = requiredString(metadata.runtimeName, "metadata.runtimeName");
108
+ return Object.freeze({
109
+ apiVersion: root.apiVersion,
110
+ kind: root.kind,
111
+ name: metadata.name == null ? runtimeName : requiredString(metadata.name, "metadata.name"),
112
+ runtimeName,
113
+ workspaceId: requiredString(metadata.workspaceId, "metadata.workspaceId"),
114
+ regionId: requiredString(metadata.regionId, "metadata.regionId"),
115
+ modelGatewayUrl: httpUrl(model.gatewayUrl, "spec.model.gatewayUrl"),
116
+ mcpGatewayUrl: httpUrl(mcp.gatewayUrl, "spec.mcp.gatewayUrl"),
117
+ gatewayHeaders: Object.freeze(headers)
118
+ });
119
+ }
120
+ async function loadAgentConfig(path = process.env.AGENTCORE_CONFIG_PATH || DEFAULT_CONFIG_PATH) {
121
+ let data;
122
+ try {
123
+ data = await _promises.readFile.call(void 0, path);
124
+ } catch (cause) {
125
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)("cannot read agent.yaml", { cause });
126
+ }
127
+ return parseAgentConfig(data);
128
+ }
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+ exports.DEFAULT_CONFIG_PATH = DEFAULT_CONFIG_PATH; exports.object = object; exports.requiredString = requiredString; exports.httpUrl = httpUrl; exports.parseAgentConfig = parseAgentConfig; exports.parseAgentConfigMapping = parseAgentConfigMapping; exports.loadAgentConfig = loadAgentConfig;
139
+ //# sourceMappingURL=chunk-5RKN46UU.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-5RKN46UU.cjs","../src/runtime/config.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACJA,uCAAyB;AACzB,4BAAqC;AAG9B,IAAM,oBAAA,EAAsB,qCAAA;AAa5B,SAAS,MAAA,CAAO,KAAA,EAAgB,KAAA,EAAwC;AAC7E,EAAA,GAAA,CAAI,CAAC,MAAA,GAAS,OAAO,MAAA,IAAU,SAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/D,IAAA,MAAM,IAAI,kCAAA,CAAY,CAAA,EAAA;AACxB,EAAA;AACO,EAAA;AACT;AAE+B;AACR,EAAA;AACG,IAAA;AACxB,EAAA;AACkB,EAAA;AACpB;AAEwC;AACzB,EAAA;AACT,EAAA;AACA,EAAA;AAAoB,IAAA;AAAW,EAAA;AAAwB,IAAA;AAA6C,EAAA;AAC/E,EAAA;AACD,IAAA;AACxB,EAAA;AACoB,EAAA;AACtB;AAEkB;AAAS,EAAA;AAAU,EAAA;AAAW,EAAA;AAAiB,EAAA;AAAe,EAAA;AAC9E,EAAA;AAAU,EAAA;AAAU,EAAA;AAAW,EAAA;AAAY,EAAA;AAAU,EAAA;AAAiB,EAAA;AAAQ;AACvE;AACgB,EAAA;AACA,IAAA;AACH,EAAA;AACG,IAAA;AACD,MAAA;AAClB,MAAA;AACF,IAAA;AACF,EAAA;AACF;AAEiC;AACT,EAAA;AAClB,EAAA;AACA,EAAA;AACkB,IAAA;AACR,IAAA;AACW,IAAA;AACZ,IAAA;AACD,MAAA;AAAkB,QAAA;AAAe,MAAA;AACxB,MAAA;AAAkB,QAAA;AAAqD,MAAA;AACvE,MAAA;AACE,QAAA;AACC,UAAA;AAClB,QAAA;AACF,MAAA;AACD,IAAA;AACgB,IAAA;AACX,EAAA;AAEgB,IAAA;AACxB,EAAA;AACO,EAAA;AACT;AAEgB;AACM,EAAA;AACI,EAAA;AACA,IAAA;AACxB,EAAA;AACwB,EAAA;AACC,EAAA;AACJ,EAAA;AACG,EAAA;AACA,EAAA;AACA,EAAA;AACL,EAAA;AACA,EAAA;AACsB,EAAA;AACvB,EAAA;AACM,IAAA;AACV,IAAA;AACA,IAAA;AACP,IAAA;AACa,IAAA;AACI,IAAA;AACxB,EAAA;AACqB,EAAA;AACD,EAAA;AACC,EAAA;AACF,IAAA;AAAuB,IAAA;AACjB,IAAA;AACvB,IAAA;AACa,IAAA;AACH,IAAA;AACO,IAAA;AACM,IAAA;AACA,IAAA;AACxB,EAAA;AACH;AAEsB;AAChB,EAAA;AACA,EAAA;AAAwB,IAAA;AAAuB,EAAA;AAC3B,IAAA;AACxB,EAAA;AACwB,EAAA;AAC1B;ADQ2B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-5RKN46UU.cjs","sourcesContent":[null,"import { readFile } from 'node:fs/promises';\nimport { parseDocument, visit } from 'yaml';\nimport { ConfigError } from '../errors';\n\nexport const DEFAULT_CONFIG_PATH = '/var/run/agentcore/agent/agent.yaml';\nexport interface AgentConfig {\n readonly apiVersion: string;\n readonly kind: string;\n readonly name: string;\n readonly runtimeName: string;\n readonly workspaceId: string;\n readonly regionId: string;\n readonly modelGatewayUrl: string;\n readonly mcpGatewayUrl: string;\n readonly gatewayHeaders: Readonly<Record<string, string>>;\n}\n\nexport function object(value: unknown, label: string): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new ConfigError(`${label} must be an object`);\n }\n return value as Record<string, unknown>;\n}\n\nexport function requiredString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new ConfigError(`${label} must be a non-empty string`);\n }\n return value.trim();\n}\n\nexport function httpUrl(value: unknown, label: string): string {\n const text = requiredString(value, label);\n let url: URL;\n try { url = new URL(text); } catch { throw new ConfigError(`${label} must be an absolute HTTP(S) URL`); }\n if (!['http:', 'https:'].includes(url.protocol) || !url.hostname || url.username || url.password || url.search || url.hash) {\n throw new ConfigError(`${label} must be HTTP(S) without user info, query, or fragment`);\n }\n return text.replace(/\\/+$/, '');\n}\n\nconst sensitive = new Set(['apikey', 'api_key', 'authorization', 'accesskeyid', 'accesskeysecret',\n 'cookie', 'header', 'headers', 'password', 'secret', 'securitytoken', 'token']);\nfunction rejectInlineCredentials(value: unknown, label: string): void {\n if (Array.isArray(value)) {\n value.forEach((item, i) => rejectInlineCredentials(item, `${label}[${i}]`));\n } else if (value && typeof value === 'object') {\n for (const [key, item] of Object.entries(value)) {\n if (sensitive.has(key.toLowerCase())) throw new ConfigError(`${label}.${key} must not contain inline credentials`);\n rejectInlineCredentials(item, `${label}.${key}`);\n }\n }\n}\n\nexport function parseAgentConfig(data: string | Uint8Array): AgentConfig {\n if (Buffer.byteLength(data) > 1024 * 1024) throw new ConfigError('agent.yaml exceeds the 1 MiB size limit');\n let value: unknown;\n try {\n const text = typeof data === 'string' ? data : new TextDecoder('utf-8', { fatal: true }).decode(data);\n const doc = parseDocument(text, { uniqueKeys: true });\n if (doc.errors.length) throw new Error('invalid YAML');\n visit(doc, {\n Alias() { throw new Error('YAML alias'); },\n Node(_key, node) { if ('anchor' in node && node.anchor) throw new Error('YAML anchor'); },\n Pair(_key, pair) {\n if (!pair.key || typeof pair.key !== 'object' || !('value' in pair.key) || typeof pair.key.value !== 'string') {\n throw new Error('non-string YAML key');\n }\n },\n });\n value = doc.toJS();\n } catch {\n // YAML errors may contain a source excerpt with Consumer credentials.\n throw new ConfigError('invalid agent.yaml (UTF-8 YAML, unique string keys, no anchors or aliases required)');\n }\n return parseAgentConfigMapping(value);\n}\n\nexport function parseAgentConfigMapping(value: unknown): AgentConfig {\n const root = object(value, 'agent.yaml');\n if (root.apiVersion !== 'agentteams.io/v1alpha1' || root.kind !== 'AgentConfig') {\n throw new ConfigError('unsupported agent.yaml apiVersion or kind');\n }\n const metadata = object(root.metadata, 'metadata');\n const spec = object(root.spec, 'spec');\n const model = object(spec.model, 'spec.model');\n const mcp = object(spec.mcp, 'spec.mcp');\n rejectInlineCredentials(model, 'spec.model');\n rejectInlineCredentials(mcp, 'spec.mcp');\n const rawHeaders = object(spec.credentials, 'spec.credentials').header;\n if (!Array.isArray(rawHeaders) || !rawHeaders.length) throw new ConfigError('spec.credentials.header must be a non-empty list');\n const headers: Record<string, string> = {};\n for (const raw of rawHeaders) {\n const header = object(raw, 'gateway header');\n const key = requiredString(header.key, 'header.key').toLowerCase();\n const val = requiredString(header.value, 'header.value');\n if (!/^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/.test(key) || /[\\r\\n]/.test(val)) throw new ConfigError('invalid gateway header');\n if (Object.hasOwn(headers, key)) throw new ConfigError(`duplicate gateway header: ${key}`);\n Object.defineProperty(headers, key, { value: val, enumerable: true });\n }\n if (!/^bearer\\s+\\S/i.test(headers.authorization ?? '')) throw new ConfigError('spec.credentials.header requires a Bearer Authorization header');\n const runtimeName = requiredString(metadata.runtimeName, 'metadata.runtimeName');\n return Object.freeze({\n apiVersion: root.apiVersion, kind: root.kind,\n name: metadata.name == null ? runtimeName : requiredString(metadata.name, 'metadata.name'),\n runtimeName,\n workspaceId: requiredString(metadata.workspaceId, 'metadata.workspaceId'),\n regionId: requiredString(metadata.regionId, 'metadata.regionId'),\n modelGatewayUrl: httpUrl(model.gatewayUrl, 'spec.model.gatewayUrl'),\n mcpGatewayUrl: httpUrl(mcp.gatewayUrl, 'spec.mcp.gatewayUrl'),\n gatewayHeaders: Object.freeze(headers),\n });\n}\n\nexport async function loadAgentConfig(path = process.env.AGENTCORE_CONFIG_PATH || DEFAULT_CONFIG_PATH): Promise<AgentConfig> {\n let data: Buffer;\n try { data = await readFile(path); } catch (cause) {\n throw new ConfigError('cannot read agent.yaml', { cause });\n }\n return parseAgentConfig(data);\n}\n"]}
@@ -0,0 +1,296 @@
1
+ import {
2
+ readBytes
3
+ } from "./chunk-5JXA7JPS.js";
4
+ import {
5
+ HIGH_CODE_SDK_PURPOSE
6
+ } from "./chunk-IUCLCPVV.js";
7
+ import {
8
+ httpUrl,
9
+ requiredString
10
+ } from "./chunk-K3TE7625.js";
11
+ import {
12
+ nullLogger
13
+ } from "./chunk-NZL3VPJ2.js";
14
+ import {
15
+ ConfigError,
16
+ InvocationError,
17
+ MCPServerNotFoundError,
18
+ ModelConnectionNotFoundError,
19
+ ResourceNotConfiguredError
20
+ } from "./chunk-MZ5UWGXS.js";
21
+
22
+ // src/controlplane/client.ts
23
+ import Client, * as models from "@alicloud/agentcore20260804";
24
+ import { $OpenApiUtil } from "@alicloud/openapi-core";
25
+ import { RuntimeOptions } from "@darabonba/typescript";
26
+ var GeneratedClient = typeof Client === "function" ? Client : Client.default;
27
+ function exact(items, field, name, label, ErrorType = ResourceNotConfiguredError) {
28
+ const matches = items.filter((item) => item[field] === name);
29
+ if (!matches.length) throw new ErrorType(`${label} ${JSON.stringify(name)} does not exist`);
30
+ if (matches.length !== 1) throw new ConfigError(`${label} ${JSON.stringify(name)} is not unique`);
31
+ return matches[0];
32
+ }
33
+ function errorField(error, key) {
34
+ return error && typeof error === "object" ? error[key] : void 0;
35
+ }
36
+ function responseBody(body) {
37
+ if (body === void 0) throw new ConfigError("AgentCore returned an empty control-plane response");
38
+ return body;
39
+ }
40
+ function endpointFailure(error) {
41
+ const status = errorField(error, "statusCode");
42
+ const code = errorField(error, "code");
43
+ return typeof status === "number" && status >= 500 && status < 600 || ["ECONNREFUSED", "ECONNRESET", "ENOTFOUND", "EAI_AGAIN", "ETIMEDOUT", "ESOCKETTIMEDOUT"].includes(String(code)) || errorField(error, "name") === "TimeoutError";
44
+ }
45
+ var AgentCoreControlPlane = class {
46
+ constructor(options) {
47
+ this.options = options;
48
+ this.workspaceId = requiredString(options.workspaceId, "workspaceId");
49
+ this.regionId = requiredString(options.regionId, "regionId");
50
+ if (!options.accessKeyCredential && !options.resourceSTSProvider) throw new ConfigError("AgentCore control plane requires an AccessKey credential source");
51
+ if (options.endpoint !== void 0) {
52
+ const value = options.endpoint.trim();
53
+ const url = new URL(httpUrl(value.includes("://") ? value : `https://${value}`, "AgentCore control endpoint"));
54
+ if (url.pathname !== "/") throw new ConfigError("AgentCore control endpoint must not contain a path");
55
+ this.endpoint = url.host;
56
+ this.protocol = url.protocol.slice(0, -1);
57
+ }
58
+ this.logger = options.logger ?? nullLogger;
59
+ }
60
+ options;
61
+ workspaceId;
62
+ regionId;
63
+ endpoint;
64
+ protocol;
65
+ discoveredEndpoint;
66
+ logger;
67
+ lifetime = new AbortController();
68
+ async resolveModel(connectionName, modelName) {
69
+ const client = await this.client();
70
+ const connections = [];
71
+ let nextToken;
72
+ do {
73
+ const response = await this.invoke(client, "ListModelConnections", () => client.listModelConnectionsWithOptions(
74
+ this.workspaceId,
75
+ new models.ListModelConnectionsRequest({ name: connectionName, searchType: "accurate", maxResults: 100, nextToken }),
76
+ {},
77
+ this.runtimeOptions()
78
+ ));
79
+ const body = responseBody(response.body);
80
+ connections.push(...body.items ?? []);
81
+ nextToken = body.nextToken;
82
+ } while (nextToken);
83
+ const connection = exact(connections, "name", connectionName, "model connection", ModelConnectionNotFoundError);
84
+ const connectionId = requiredString(connection.connectionId, "connectionId");
85
+ const available = [];
86
+ do {
87
+ const response = await this.invoke(client, "ListModels", () => client.listModelsWithOptions(
88
+ this.workspaceId,
89
+ new models.ListModelsRequest({ connectionId, modelName, maxResults: 100, nextToken }),
90
+ {},
91
+ this.runtimeOptions()
92
+ ));
93
+ const body = responseBody(response.body);
94
+ available.push(...body.items ?? []);
95
+ nextToken = body.nextToken;
96
+ } while (nextToken);
97
+ let model;
98
+ if (modelName !== void 0) model = exact(available, "modelName", modelName, "model");
99
+ else {
100
+ if (available.length !== 1) throw new ResourceNotConfiguredError(`model connection ${JSON.stringify(connectionName)} requires an explicit model name`);
101
+ model = available[0];
102
+ }
103
+ const capabilities = Object.fromEntries(Object.entries(model.capabilities ?? {}).filter((entry) => typeof entry[1] === "boolean"));
104
+ const descriptor = Object.freeze({
105
+ connectionId,
106
+ connectionName: requiredString(connection.name, "connection name"),
107
+ protocol: connection.protocol ?? "",
108
+ providerType: connection.providerType ?? "",
109
+ modelId: requiredString(model.modelId, "modelId"),
110
+ modelName: requiredString(model.modelName, "modelName"),
111
+ contextSize: model.contextSize,
112
+ maxTokens: model.maxTokens,
113
+ capabilities: Object.freeze(capabilities)
114
+ });
115
+ this.logger.info("agentcore.control_plane.model.resolve.succeeded", { connectionName, connectionId, modelName: descriptor.modelName });
116
+ return descriptor;
117
+ }
118
+ async resolveMCP(name) {
119
+ const client = await this.client();
120
+ const items = [];
121
+ let nextToken;
122
+ do {
123
+ const response = await this.invoke(client, "ListMcps", () => client.listMcpsWithOptions(
124
+ this.workspaceId,
125
+ new models.ListMcpsRequest({ name, searchType: "accurate", maxResults: 100, nextToken }),
126
+ {},
127
+ this.runtimeOptions()
128
+ ));
129
+ const body = responseBody(response.body);
130
+ items.push(...body.items ?? []);
131
+ nextToken = body.nextToken;
132
+ } while (nextToken);
133
+ const item = exact(items, "name", name, "MCP server", MCPServerNotFoundError);
134
+ const descriptor = Object.freeze({
135
+ mcpServerId: requiredString(item.mcpServerId, "mcpServerId"),
136
+ name: requiredString(item.name, "MCP name"),
137
+ protocol: item.protocol ?? "",
138
+ type: item.type ?? "",
139
+ status: item.status ?? ""
140
+ });
141
+ this.logger.info("agentcore.control_plane.mcp.resolve.succeeded", { name, mcpServerId: descriptor.mcpServerId, protocol: descriptor.protocol });
142
+ return descriptor;
143
+ }
144
+ async getSkill(name, version) {
145
+ const client = await this.client();
146
+ if (version === void 0) {
147
+ const detail = await this.invoke(client, "GetSkillDetail", () => client.getSkillDetailWithOptions(this.workspaceId, name, new models.GetSkillDetailRequest({}), {}, this.runtimeOptions()));
148
+ version = latestVersion(responseBody(detail.body).data);
149
+ }
150
+ const resolvedVersion = version;
151
+ const response = await this.invoke(client, "DownloadSkillVersionViaOss", () => client.downloadSkillVersionViaOssWithOptions(
152
+ this.workspaceId,
153
+ name,
154
+ resolvedVersion,
155
+ new models.DownloadSkillVersionViaOssRequest({}),
156
+ {},
157
+ this.runtimeOptions()
158
+ ));
159
+ const downloadURL = responseBody(response.body).data;
160
+ if (typeof downloadURL !== "string") throw new ConfigError("AgentCore returned an invalid Skill download URL");
161
+ return { version: resolvedVersion, archive: await this.downloadSkill(downloadURL) };
162
+ }
163
+ close() {
164
+ this.lifetime.abort();
165
+ }
166
+ async resolveCredential(name) {
167
+ const client = await this.client();
168
+ const params = new $OpenApiUtil.Params({
169
+ action: "ListCredentials",
170
+ version: "2026-08-04",
171
+ protocol: "HTTPS",
172
+ pathname: `/workspaces/${encodeURIComponent(this.workspaceId)}/credentials`,
173
+ method: "GET",
174
+ authType: "AK",
175
+ style: "ROA",
176
+ reqBodyType: "json",
177
+ bodyType: "json"
178
+ });
179
+ const items = [];
180
+ let nextToken;
181
+ do {
182
+ const request = new $OpenApiUtil.OpenApiRequest({ query: { name, maxResults: "100", ...nextToken ? { nextToken } : {} } });
183
+ const response = await this.invoke(client, "ListCredentials", () => client.callApi(params, request, this.runtimeOptions()));
184
+ const body = responseBody(response.body);
185
+ items.push(...body.items ?? []);
186
+ nextToken = body.nextToken;
187
+ } while (nextToken);
188
+ const item = exact(items, "name", name, "credential");
189
+ const refs = item.resourceRefs ?? [];
190
+ return {
191
+ credentialId: requiredString(item.credentialId, "credentialId"),
192
+ name: requiredString(item.name, "name"),
193
+ credentialType: requiredString(item.credentialType, "credentialType"),
194
+ resourceScope: String(item.resourceScope ?? ""),
195
+ resourceRefs: refs.map((ref) => ({ resourceType: requiredString(ref.resourceType, "resourceType"), resourceId: requiredString(ref.resourceId, "resourceId") }))
196
+ };
197
+ }
198
+ runtimeOptions() {
199
+ return new RuntimeOptions({ autoretry: false, connectTimeout: 1e4, readTimeout: 3e4 });
200
+ }
201
+ async client() {
202
+ this.lifetime.signal.throwIfAborted();
203
+ const credential = this.options.accessKeyCredential ?? await this.options.resourceSTSProvider.get(HIGH_CODE_SDK_PURPOSE);
204
+ return new GeneratedClient(new $OpenApiUtil.Config({
205
+ accessKeyId: credential.accessKeyId,
206
+ accessKeySecret: credential.accessKeySecret,
207
+ securityToken: credential.securityToken,
208
+ regionId: this.regionId,
209
+ endpoint: this.endpoint ?? this.discoveredEndpoint,
210
+ protocol: this.protocol
211
+ }));
212
+ }
213
+ async invoke(client, operation, call) {
214
+ this.lifetime.signal.throwIfAborted();
215
+ const invoke = async () => {
216
+ this.logger.debug("agentcore.control_plane.request.started", { operation, host: client._endpoint });
217
+ try {
218
+ return await call();
219
+ } catch (cause) {
220
+ const data = errorField(cause, "data");
221
+ this.logger.warn("agentcore.control_plane.request.failed", {
222
+ operation,
223
+ host: client._endpoint,
224
+ status: String(errorField(cause, "statusCode") ?? "-"),
225
+ code: String(errorField(cause, "code") ?? "-"),
226
+ requestId: String(errorField(cause, "requestId") ?? errorField(data, "RequestId") ?? errorField(data, "requestId") ?? "-")
227
+ });
228
+ throw new InvocationError("AgentCore control-plane request failed", { cause });
229
+ }
230
+ };
231
+ try {
232
+ return await invoke();
233
+ } catch (error) {
234
+ if (!(error instanceof InvocationError) || this.endpoint || client._endpoint !== `agentcore.${this.regionId}.aliyuncs.com` || !endpointFailure(error.cause)) throw error;
235
+ const host = `agentcore-vpc.${this.regionId}.aliyuncs.com`;
236
+ this.logger.warn("agentcore.control_plane.endpoint.fallback", { operation, fromHost: client._endpoint, toHost: host });
237
+ client._endpoint = host;
238
+ const result = await invoke();
239
+ this.discoveredEndpoint = host;
240
+ return result;
241
+ }
242
+ }
243
+ async downloadSkill(value) {
244
+ let original;
245
+ try {
246
+ original = new URL(value);
247
+ } catch {
248
+ throw new ConfigError("AgentCore returned an invalid Skill download URL");
249
+ }
250
+ if (!["http:", "https:"].includes(original.protocol) || original.username || original.password) throw new ConfigError("AgentCore returned an invalid Skill download URL");
251
+ let candidate = original;
252
+ for (; ; ) {
253
+ this.lifetime.signal.throwIfAborted();
254
+ let status;
255
+ try {
256
+ const response = await fetch(candidate, { redirect: "manual", signal: AbortSignal.any([this.lifetime.signal, AbortSignal.timeout(3e4)]) });
257
+ if (response.ok) {
258
+ const archive = await readBytes(response, 10 * 1024 * 1024, "Skill archive");
259
+ if (!archive.length) throw new ConfigError("Skill package is empty");
260
+ return archive;
261
+ }
262
+ status = response.status;
263
+ await response.body?.cancel();
264
+ } catch (error) {
265
+ this.lifetime.signal.throwIfAborted();
266
+ if (error instanceof ConfigError) throw error;
267
+ }
268
+ this.logger.warn("agentcore.control_plane.skill.download.failed", { host: candidate.host, path: candidate.pathname, status });
269
+ const fallback = candidate === original && (status === void 0 || status >= 500 && status < 600) ? internalOSSURL(original) : void 0;
270
+ if (!fallback) throw new InvocationError(status ? `Skill package download failed with HTTP ${status}` : "Skill package download failed");
271
+ this.logger.warn("agentcore.control_plane.skill.download.fallback", { fromHost: candidate.host, toHost: fallback.host });
272
+ candidate = fallback;
273
+ }
274
+ }
275
+ };
276
+ function latestVersion(data) {
277
+ if (!data) throw new ResourceNotConfiguredError("AgentCore Skill does not exist");
278
+ for (const [label, value] of Object.entries(data.labels ?? {})) if (label.toLowerCase() === "latest" && value) return value;
279
+ const online = (data.versions ?? []).filter((v) => v.status?.toLowerCase() === "online" && v.version);
280
+ online.sort((a, b) => (b.updateTime ?? -1) - (a.updateTime ?? -1) || (b.version ?? "").localeCompare(a.version ?? ""));
281
+ if (!online[0]?.version) throw new ResourceNotConfiguredError("AgentCore Skill has no online version");
282
+ return online[0].version;
283
+ }
284
+ function internalOSSURL(url) {
285
+ const match = /^([a-z0-9-]+)\.(oss-[a-z]+-[a-z0-9-]+)\.aliyuncs\.com$/.exec(url.hostname);
286
+ if (!match || match[2].endsWith("-internal") || match[2].startsWith("oss-accelerate") || url.username || url.password) return void 0;
287
+ if (url.searchParams.getAll("x-oss-additional-headers").some((v) => v.split(";").includes("host"))) return void 0;
288
+ const result = new URL(url);
289
+ result.hostname = `${match[1]}.${match[2]}-internal.aliyuncs.com`;
290
+ return result;
291
+ }
292
+
293
+ export {
294
+ AgentCoreControlPlane
295
+ };
296
+ //# sourceMappingURL=chunk-5ZOLHQXO.js.map
@@ -0,0 +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":[]}