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,582 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return 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; var _class2; var _class3; var _class4;
2
+
3
+ var _chunkYZP55W7Scjs = require('./chunk-YZP55W7S.cjs');
4
+
5
+
6
+
7
+ var _chunk2E5EWEDGcjs = require('./chunk-2E5EWEDG.cjs');
8
+
9
+
10
+
11
+
12
+
13
+
14
+ var _chunk5RKN46UUcjs = require('./chunk-5RKN46UU.cjs');
15
+
16
+
17
+ var _chunkLE5P3SJWcjs = require('./chunk-LE5P3SJW.cjs');
18
+
19
+
20
+
21
+
22
+ var _chunkJSP7ZROScjs = require('./chunk-JSP7ZROS.cjs');
23
+
24
+ // src/runtime/environment.ts
25
+ var _promises = require('fs/promises');
26
+ var DEFAULT_ENV_PATH = "/var/run/agentcore/agent/env";
27
+ function words(line) {
28
+ const parts = [];
29
+ let word = "";
30
+ let quote = "";
31
+ let started = false;
32
+ for (let i = 0; i < line.length; i++) {
33
+ const char = line[i];
34
+ if (quote === "'") {
35
+ if (char === quote) quote = "";
36
+ else word += char;
37
+ } else if (char === "\\") {
38
+ const next = line[++i];
39
+ if (next === void 0) throw new Error("incomplete escape");
40
+ if (quote === '"' && next !== '"' && next !== "\\") word += "\\";
41
+ word += next;
42
+ started = true;
43
+ } else if (quote) {
44
+ if (char === quote) quote = "";
45
+ else word += char;
46
+ } else if (char === '"' || char === "'") {
47
+ quote = char;
48
+ started = true;
49
+ } else if (/\s/.test(char)) {
50
+ if (started) {
51
+ parts.push(word);
52
+ word = "";
53
+ started = false;
54
+ }
55
+ } else {
56
+ word += char;
57
+ started = true;
58
+ }
59
+ }
60
+ if (quote) throw new Error("unclosed quote");
61
+ if (started) parts.push(word);
62
+ return parts;
63
+ }
64
+ function parseRuntimeEnvironment(text) {
65
+ const values = /* @__PURE__ */ Object.create(null);
66
+ for (const [index, raw] of text.split(/\r?\n/).entries()) {
67
+ const line = raw.trim();
68
+ if (!line || line.startsWith("#")) continue;
69
+ try {
70
+ const parts = words(line);
71
+ if (parts.length !== 2 || parts[0] !== "export") throw new Error("expected export");
72
+ const match = /^([A-Za-z_][A-Za-z0-9_]*)=([\s\S]*)$/.exec(parts[1]);
73
+ if (!match || Object.hasOwn(values, match[1])) throw new Error("invalid assignment");
74
+ values[match[1]] = match[2];
75
+ } catch (e) {
76
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)(`invalid runtime env at line ${index + 1}`);
77
+ }
78
+ }
79
+ return values;
80
+ }
81
+ var RuntimeEnvironmentProvider = class {
82
+ constructor(path = DEFAULT_ENV_PATH) {
83
+ this.path = path;
84
+ }
85
+
86
+ async read() {
87
+ let text;
88
+ try {
89
+ text = await _promises.readFile.call(void 0, this.path, "utf8");
90
+ } catch (cause) {
91
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)("cannot read AgentCore runtime env", { cause });
92
+ }
93
+ return parseRuntimeEnvironment(text);
94
+ }
95
+ async snapshot() {
96
+ const values = await this.read();
97
+ const endpoint = values.AGENTCORE_CONTROL_ENDPOINT || process.env.AGENTCORE_CONTROL_ENDPOINT;
98
+ return {
99
+ controllerUrl: _chunk5RKN46UUcjs.httpUrl.call(void 0, values.AGENTCORE_CONTROLLER_URL || values.AGENTTEAMS_CONTROLLER_URL, "runtime Controller URL"),
100
+ agentSATokenFile: _chunk5RKN46UUcjs.requiredString.call(void 0, values.AGENTCORE_AUTH_TOKEN_FILE || values.AGENTTEAMS_AUTH_TOKEN_FILE, "runtime SA token file"),
101
+ controlPlaneEndpoint: _optionalChain([endpoint, 'optionalAccess', _ => _.trim, 'call', _2 => _2()]) || void 0
102
+ };
103
+ }
104
+ async value(name) {
105
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) throw new (0, _chunkJSP7ZROScjs.ConfigError)("runtime environment name is invalid");
106
+ const values = await this.read();
107
+ return _chunk5RKN46UUcjs.requiredString.call(void 0, values[name] || process.env[name], `runtime env ${name}`);
108
+ }
109
+ async taskServiceEndpoint() {
110
+ const values = await this.read();
111
+ const endpoint = values.AGENTCORE_TASK_SERVICE_ENDPOINT || process.env.AGENTCORE_TASK_SERVICE_ENDPOINT;
112
+ if (_optionalChain([endpoint, 'optionalAccess', _3 => _3.trim, 'call', _4 => _4()])) return _chunk5RKN46UUcjs.httpUrl.call(void 0, endpoint, "Task Service endpoint");
113
+ const gateway = _chunk5RKN46UUcjs.httpUrl.call(void 0, values.AGENTTEAMS_MATRIX_URL || process.env.AGENTTEAMS_MATRIX_URL, "Task Service endpoint");
114
+ return gateway.endsWith("/agentteams-app") ? gateway : `${gateway}/agentteams-app`;
115
+ }
116
+ };
117
+
118
+ // src/runtime/managed.ts
119
+
120
+ var _promises3 = require('timers/promises');
121
+ var ManagedRuntimeSource = (_class = class {
122
+ constructor(options = {}) {;_class.prototype.__init.call(this);
123
+ this.options = options;
124
+ }
125
+
126
+
127
+
128
+ __init() {this.lifetime = new AbortController()}
129
+ async resolve() {
130
+ this.lifetime.signal.throwIfAborted();
131
+ if (this.bindings) return this.bindings;
132
+ if (this.pending) return this.pending;
133
+ const request = this.load();
134
+ this.pending = request;
135
+ try {
136
+ this.bindings = await request;
137
+ return this.bindings;
138
+ } finally {
139
+ this.pending = void 0;
140
+ }
141
+ }
142
+ close() {
143
+ this.lifetime.abort();
144
+ }
145
+ async load() {
146
+ const configPath = this.options.configPath || process.env.AGENTCORE_CONFIG_PATH || _chunk5RKN46UUcjs.DEFAULT_CONFIG_PATH;
147
+ const rawTimeout = _nullishCoalesce(process.env.AGENTCORE_CONFIG_WAIT_TIMEOUT, () => ( "10"));
148
+ if (!/^\d+$/.test(rawTimeout) || !Number.isSafeInteger(Number(rawTimeout))) {
149
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)("AGENTCORE_CONFIG_WAIT_TIMEOUT must be a non-negative integer");
150
+ }
151
+ const deadline = performance.now() + Number(rawTimeout) * 1e3;
152
+ let config;
153
+ const logger = _nullishCoalesce(this.options.logger, () => ( _chunkLE5P3SJWcjs.nullLogger));
154
+ for (; ; ) {
155
+ this.lifetime.signal.throwIfAborted();
156
+ let data;
157
+ try {
158
+ data = await _promises.readFile.call(void 0, configPath);
159
+ } catch (cause) {
160
+ const remaining = deadline - performance.now();
161
+ if (!(cause && typeof cause === "object" && "code" in cause && cause.code === "ENOENT") || remaining <= 0) {
162
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)("cannot read agent.yaml", { cause });
163
+ }
164
+ logger.info("agentcore.runtime.config.waiting_for_mount", { path: configPath, retryInMs: Math.min(500, remaining) });
165
+ await _promises3.setTimeout.call(void 0, Math.min(500, remaining), void 0, { signal: this.lifetime.signal });
166
+ continue;
167
+ }
168
+ config = _chunk5RKN46UUcjs.parseAgentConfig.call(void 0, data);
169
+ break;
170
+ }
171
+ const configuredEnv = this.options.envPath || process.env.AGENTCORE_ENV_PATH;
172
+ const envPath = configuredEnv || DEFAULT_ENV_PATH;
173
+ let hasEnvironment = Boolean(configuredEnv);
174
+ if (!hasEnvironment) {
175
+ try {
176
+ await _promises.access.call(void 0, envPath);
177
+ hasEnvironment = true;
178
+ } catch (cause) {
179
+ if (!(cause && typeof cause === "object" && "code" in cause && cause.code === "ENOENT")) {
180
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)("cannot access AgentCore runtime env", { cause });
181
+ }
182
+ }
183
+ }
184
+ const environment = hasEnvironment ? await new RuntimeEnvironmentProvider(envPath).snapshot() : void 0;
185
+ const bindings = {
186
+ config,
187
+ controllerEndpoint: _optionalChain([environment, 'optionalAccess', _5 => _5.controllerUrl]),
188
+ controlPlaneEndpoint: _nullishCoalesce(_nullishCoalesce(this.options.controlPlaneEndpoint, () => ( _optionalChain([environment, 'optionalAccess', _6 => _6.controlPlaneEndpoint]))), () => ( process.env.AGENTCORE_CONTROL_ENDPOINT)),
189
+ agentSATokens: environment ? new (0, _chunk2E5EWEDGcjs.AgentSATokenProvider)(environment.agentSATokenFile) : void 0
190
+ };
191
+ this.lifetime.signal.throwIfAborted();
192
+ logger.info("agentcore.runtime.source.resolved", { mode: "managed", envLoaded: hasEnvironment, workspaceId: config.workspaceId });
193
+ return bindings;
194
+ }
195
+ }, _class);
196
+
197
+ // src/runtime/debug.ts
198
+ var _util = require('util');
199
+
200
+
201
+ // src/runtime/control-config.ts
202
+ var _crypto = require('crypto');
203
+ var _net = require('net');
204
+ function objectKey(value, field) {
205
+ const key = _chunk5RKN46UUcjs.requiredString.call(void 0, value, field);
206
+ if (/[\\\r\n]/.test(key) || key.split("/").some((p) => !p || p === "." || p === "..")) {
207
+ throw new (0, _chunkJSP7ZROScjs.CredentialExchangeError)(`Controller returned an invalid ${field}`);
208
+ }
209
+ return key;
210
+ }
211
+ var ControlConfigLoader = (_class2 = class {
212
+ constructor(endpoint, source, options = {}) {;_class2.prototype.__init2.call(this);
213
+ this.options = options;
214
+ this.controller = new (0, _chunk2E5EWEDGcjs.ControllerClient)(endpoint, source, options);
215
+ this.logger = _nullishCoalesce(options.logger, () => ( _chunkLE5P3SJWcjs.nullLogger));
216
+ }
217
+
218
+
219
+
220
+ __init2() {this.lifetime = new AbortController()}
221
+ #credential;
222
+
223
+ async load() {
224
+ const credential = await this.credential();
225
+ const data = await this.download(credential, credential.agentConfigPath);
226
+ return _chunk5RKN46UUcjs.parseAgentConfig.call(void 0, data);
227
+ }
228
+ async loadTeams() {
229
+ let credential = await this.credential();
230
+ if (!credential.teamsConfigPath) credential = await this.credential(true);
231
+ return credential.teamsConfigPath ? this.download(credential, credential.teamsConfigPath, true) : void 0;
232
+ }
233
+ close() {
234
+ this.controller.close();
235
+ this.lifetime.abort();
236
+ this.#credential = void 0;
237
+ }
238
+ async credential(force = false) {
239
+ this.lifetime.signal.throwIfAborted();
240
+ if (!force && this.#credential && this.#credential.expiration > Date.now() + 6e4) return this.#credential;
241
+ if (this.pending) return this.pending;
242
+ const request = this.exchange();
243
+ this.pending = request;
244
+ try {
245
+ this.#credential = await request;
246
+ return this.#credential;
247
+ } finally {
248
+ this.pending = void 0;
249
+ }
250
+ }
251
+ async exchange() {
252
+ const response = await this.controller.post("/api/v1/credentials/sts", { purpose: "oss", target: "control" });
253
+ if (response.status === 401) throw new (0, _chunkJSP7ZROScjs.AuthenticationError)("Controller rejected the Agent SA token");
254
+ if (response.status < 200 || response.status >= 300) throw new (0, _chunkJSP7ZROScjs.CredentialExchangeError)(`Controller control-config STS failed with HTTP ${response.status}`);
255
+ try {
256
+ const data = _chunk5RKN46UUcjs.object.call(void 0, response.payload, "control-config STS");
257
+ const read = (field) => _chunk5RKN46UUcjs.requiredString.call(void 0, data[field], field);
258
+ const endpoint = read("oss_endpoint");
259
+ const ossEndpoint = _chunk5RKN46UUcjs.httpUrl.call(void 0, endpoint.includes("://") ? endpoint : `https://${endpoint}`, "OSS endpoint");
260
+ if (new URL(ossEndpoint).pathname !== "/") throw new Error("OSS endpoint path");
261
+ const ossBucket = read("oss_bucket");
262
+ if (!/^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$/.test(ossBucket)) throw new Error("OSS bucket");
263
+ const expiration = Date.parse(read("expiration"));
264
+ if (!(expiration > Date.now())) throw new Error("expired control-config STS");
265
+ return {
266
+ accessKeyId: read("access_key_id"),
267
+ accessKeySecret: read("access_key_secret"),
268
+ securityToken: read("security_token"),
269
+ expiration,
270
+ ossEndpoint,
271
+ ossBucket,
272
+ agentConfigPath: objectKey(data.agent_config_path, "agent_config_path"),
273
+ teamsConfigPath: data.teams_config_path == null ? void 0 : objectKey(data.teams_config_path, "teams_config_path")
274
+ };
275
+ } catch (e2) {
276
+ throw new (0, _chunkJSP7ZROScjs.CredentialExchangeError)("Controller returned an invalid control-config STS response");
277
+ }
278
+ }
279
+ async download(credential, key, missingOK = false) {
280
+ const original = new URL(credential.ossEndpoint);
281
+ const candidates = [original];
282
+ if (/^(?:[a-z0-9-]+\.)?oss-.+-internal\.aliyuncs\.com$/.test(original.hostname)) {
283
+ const fallback = new URL(original);
284
+ fallback.hostname = fallback.hostname.replace("-internal.aliyuncs.com", ".aliyuncs.com");
285
+ candidates.push(fallback);
286
+ }
287
+ let lastStatus;
288
+ for (const endpoint of candidates) {
289
+ this.lifetime.signal.throwIfAborted();
290
+ const url = new URL(endpoint);
291
+ const pathStyle = url.hostname === "localhost" || _net.isIP.call(void 0, url.hostname.replace(/^\[|\]$/g, "")) !== 0;
292
+ if (!pathStyle && !url.hostname.startsWith(`${credential.ossBucket}.`)) url.hostname = `${credential.ossBucket}.${url.hostname}`;
293
+ const encodedKey = key.split("/").map((part) => encodeURIComponent(part).replace(/[!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`)).join("/");
294
+ url.pathname = `${pathStyle ? `/${credential.ossBucket}` : ""}/${encodedKey}`;
295
+ const date = (/* @__PURE__ */ new Date()).toUTCString();
296
+ const canonical = `GET
297
+
298
+
299
+ ${date}
300
+ x-oss-security-token:${credential.securityToken}
301
+ /${credential.ossBucket}/${key}`;
302
+ const signature = _crypto.createHmac.call(void 0, "sha1", credential.accessKeySecret).update(canonical).digest("base64");
303
+ this.logger.debug("agentcore.control_config.download.started", { host: url.host, path: url.pathname });
304
+ try {
305
+ const response = await fetch(url, {
306
+ headers: { Date: date, Authorization: `OSS ${credential.accessKeyId}:${signature}`, "x-oss-security-token": credential.securityToken },
307
+ redirect: "manual",
308
+ signal: AbortSignal.any([this.lifetime.signal, AbortSignal.timeout(_nullishCoalesce(this.options.timeoutMs, () => ( 1e4)))])
309
+ });
310
+ if (response.ok) {
311
+ const data = await _chunkYZP55W7Scjs.readBytes.call(void 0, response, 1024 * 1024, "runtime config");
312
+ this.logger.info("agentcore.control_config.download.succeeded", { host: url.host, bytes: data.length });
313
+ return data;
314
+ }
315
+ lastStatus = response.status;
316
+ await _optionalChain([response, 'access', _7 => _7.body, 'optionalAccess', _8 => _8.cancel, 'call', _9 => _9()]);
317
+ if (missingOK && response.status === 404) return void 0;
318
+ this.logger.warn("agentcore.control_config.download.failed", { host: url.host, status: response.status });
319
+ } catch (error) {
320
+ this.lifetime.signal.throwIfAborted();
321
+ if (error instanceof _chunkJSP7ZROScjs.ConfigError) throw error;
322
+ this.logger.warn("agentcore.control_config.download.failed", { host: url.host, reason: "transport_error" });
323
+ }
324
+ }
325
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)(lastStatus ? `AgentCore configuration download failed with HTTP ${lastStatus}` : "cannot reach the AgentCore configuration store");
326
+ }
327
+ }, _class2);
328
+
329
+ // src/runtime/debug.ts
330
+ var DebugToken = (_class3 = class {
331
+ constructor(jwtToken, controllerUrl, modelGatewayUrl, matrixUrl) {;_class3.prototype.__init3.call(this);
332
+ this.controllerUrl = controllerUrl;
333
+ this.modelGatewayUrl = modelGatewayUrl;
334
+ this.matrixUrl = matrixUrl;
335
+ this.#jwtToken = jwtToken;
336
+ }
337
+
338
+
339
+
340
+ __init3() {this.product = "agentcore"}
341
+ #jwtToken;
342
+ get jwtToken() {
343
+ return this.#jwtToken;
344
+ }
345
+ [_util.inspect.custom]() {
346
+ return "DebugToken(product=agentcore, <redacted>)";
347
+ }
348
+ toJSON() {
349
+ return this[_util.inspect.custom]();
350
+ }
351
+ }, _class3);
352
+ function parseDebugToken(value) {
353
+ try {
354
+ const encoded = value.trim();
355
+ if (!encoded || encoded.length > 35e4 || !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(encoded)) throw new Error("base64");
356
+ const raw = Buffer.from(encoded, "base64");
357
+ if (raw.length > 256 * 1024) throw new Error("size");
358
+ const data = _chunk5RKN46UUcjs.object.call(void 0, JSON.parse(new TextDecoder("utf8", { fatal: true }).decode(raw)), "debug token");
359
+ if (data.product !== "agentcore") throw new Error("product");
360
+ const controller = _chunk5RKN46UUcjs.httpUrl.call(void 0, data.controllerUrl, "controllerUrl");
361
+ if (new URL(controller).pathname !== "/") throw new Error("controllerUrl path");
362
+ return new DebugToken(
363
+ _chunk5RKN46UUcjs.requiredString.call(void 0, data.jwtToken, "jwtToken"),
364
+ controller,
365
+ _chunk5RKN46UUcjs.httpUrl.call(void 0, data.modelGatewayUrl, "modelGatewayUrl"),
366
+ _chunk5RKN46UUcjs.httpUrl.call(void 0, data.matrixUrl, "matrixUrl")
367
+ );
368
+ } catch (e3) {
369
+ throw new (0, _chunkJSP7ZROScjs.ConfigError)("AGENTCORE_DEBUG_TOKEN is invalid");
370
+ }
371
+ }
372
+ var DebugTokenExchangeUnavailable = class extends _chunkJSP7ZROScjs.AuthenticationError {
373
+ };
374
+ var DebugRuntimeSource = (_class4 = class {
375
+ constructor(token, options = {}) {;_class4.prototype.__init4.call(this);_class4.prototype.__init5.call(this);_class4.prototype.__init6.call(this);
376
+ this.token = token;
377
+ this.options = options;
378
+ this.#jwtToken = token.jwtToken;
379
+ this.configLoader = new ControlConfigLoader(token.controllerUrl, this, options);
380
+ this.controller = new (0, _chunk2E5EWEDGcjs.ControllerClient)(token.controllerUrl, this, options);
381
+ this.logger = _nullishCoalesce(options.logger, () => ( _chunkLE5P3SJWcjs.nullLogger));
382
+ }
383
+
384
+
385
+ #jwtToken;
386
+ #saToken;
387
+ __init4() {this.saExpiresAt = 0}
388
+ __init5() {this.jwtExpiresAt = 0}
389
+
390
+
391
+
392
+
393
+ __init6() {this.lifetime = new AbortController()}
394
+
395
+
396
+
397
+ get matrixUrl() {
398
+ return this.token.matrixUrl;
399
+ }
400
+ async resolve() {
401
+ this.lifetime.signal.throwIfAborted();
402
+ if (this.bindings) return this.bindings;
403
+ if (this.resolving) return this.resolving;
404
+ const request = this.load();
405
+ this.resolving = request;
406
+ try {
407
+ this.bindings = await request;
408
+ return this.bindings;
409
+ } finally {
410
+ this.resolving = void 0;
411
+ }
412
+ }
413
+ async get() {
414
+ this.lifetime.signal.throwIfAborted();
415
+ if (this.#saToken && this.saExpiresAt > Date.now() + 6e4) return this.#saToken;
416
+ return this.exchange();
417
+ }
418
+ async refresh(current) {
419
+ this.lifetime.signal.throwIfAborted();
420
+ if (this.#saToken && this.#saToken !== current) return this.#saToken;
421
+ return this.exchange();
422
+ }
423
+ async loadTeamsConfig() {
424
+ await this.resolve();
425
+ return this.configLoader.loadTeams();
426
+ }
427
+ async exchangeMatrixToken() {
428
+ const response = await this.controller.post("/api/v1/credentials/matrix-token");
429
+ if (response.status < 200 || response.status >= 300) throw new (0, _chunkJSP7ZROScjs.AuthenticationError)(`Controller Matrix token request failed with HTTP ${response.status}`);
430
+ try {
431
+ return _chunk5RKN46UUcjs.requiredString.call(void 0, _chunk5RKN46UUcjs.object.call(void 0, response.payload, "Matrix token").access_token, "access_token");
432
+ } catch (e4) {
433
+ throw new (0, _chunkJSP7ZROScjs.AuthenticationError)("Controller returned an invalid Matrix token response");
434
+ }
435
+ }
436
+ close() {
437
+ this.lifetime.abort();
438
+ if (this.refreshTimer) clearTimeout(this.refreshTimer);
439
+ this.configLoader.close();
440
+ this.controller.close();
441
+ this.#saToken = void 0;
442
+ this.#jwtToken = "";
443
+ }
444
+ [_util.inspect.custom]() {
445
+ return "DebugRuntimeSource(<redacted>)";
446
+ }
447
+ toJSON() {
448
+ return this[_util.inspect.custom]();
449
+ }
450
+ async load() {
451
+ const config = await this.configLoader.load();
452
+ this.lifetime.signal.throwIfAborted();
453
+ const override = (mounted) => {
454
+ const gateway = new URL(this.token.modelGatewayUrl);
455
+ const runtime = new URL(mounted);
456
+ if (runtime.pathname !== "/") gateway.pathname = runtime.pathname;
457
+ return gateway.toString().replace(/\/+$/, "");
458
+ };
459
+ const projected = Object.freeze({
460
+ ...config,
461
+ modelGatewayUrl: override(config.modelGatewayUrl),
462
+ mcpGatewayUrl: override(config.mcpGatewayUrl)
463
+ });
464
+ this.logger.info("agentcore.runtime.source.resolved", { mode: "debug", workspaceId: config.workspaceId });
465
+ return {
466
+ config: projected,
467
+ controllerEndpoint: this.token.controllerUrl,
468
+ controlPlaneEndpoint: this.options.controlPlaneEndpoint,
469
+ agentSATokens: this
470
+ };
471
+ }
472
+ async exchange() {
473
+ this.lifetime.signal.throwIfAborted();
474
+ if (this.exchanging) return this.exchanging;
475
+ const request = this.requestToken().then((data) => {
476
+ this.lifetime.signal.throwIfAborted();
477
+ this.#saToken = data.token;
478
+ this.saExpiresAt = data.expiresAt;
479
+ this.#jwtToken = data.jwtToken;
480
+ this.jwtExpiresAt = data.jwtExpiresAt;
481
+ this.scheduleRefresh();
482
+ this.logger.info("agentcore.runtime.debug.sa_exchange.succeeded", {
483
+ expiration: new Date(this.saExpiresAt).toISOString(),
484
+ jwtExpiration: new Date(this.jwtExpiresAt).toISOString()
485
+ });
486
+ return this.#saToken;
487
+ });
488
+ this.exchanging = request;
489
+ try {
490
+ return await request;
491
+ } finally {
492
+ this.exchanging = void 0;
493
+ }
494
+ }
495
+ scheduleRefresh(delay = Math.max(1e3, this.jwtExpiresAt - Date.now() - 3e5)) {
496
+ if (this.refreshTimer) clearTimeout(this.refreshTimer);
497
+ if (this.lifetime.signal.aborted) return;
498
+ this.refreshTimer = setTimeout(() => {
499
+ void this.backgroundRefresh();
500
+ }, delay);
501
+ this.refreshTimer.unref();
502
+ }
503
+ async backgroundRefresh() {
504
+ if (this.lifetime.signal.aborted || this.jwtExpiresAt <= Date.now()) return;
505
+ try {
506
+ await this.exchange();
507
+ } catch (error) {
508
+ if (this.lifetime.signal.aborted) return;
509
+ const remaining = this.jwtExpiresAt - Date.now();
510
+ this.logger.warn("agentcore.runtime.debug.jwt_refresh.failed", { reason: error instanceof DebugTokenExchangeUnavailable ? "temporarily_unavailable" : "authentication_failed" });
511
+ if (error instanceof DebugTokenExchangeUnavailable && remaining > 1e3) this.scheduleRefresh(Math.min(3e4, remaining / 2));
512
+ }
513
+ }
514
+ async requestToken() {
515
+ const url = `${this.token.controllerUrl}/api/v1/edge/token`;
516
+ for (let attempt = 1; attempt <= (_nullishCoalesce(this.options.maxAttempts, () => ( 3))); attempt++) {
517
+ let response;
518
+ let payload;
519
+ try {
520
+ response = await fetch(url, {
521
+ method: "POST",
522
+ headers: { "Content-Type": "application/json" },
523
+ body: JSON.stringify({ jwtToken: this.#jwtToken }),
524
+ redirect: "manual",
525
+ signal: AbortSignal.any([this.lifetime.signal, AbortSignal.timeout(_nullishCoalesce(this.options.timeoutMs, () => ( 1e4)))])
526
+ });
527
+ const text = await response.text();
528
+ try {
529
+ payload = JSON.parse(text);
530
+ } catch (e5) {
531
+ payload = void 0;
532
+ }
533
+ } catch (e6) {
534
+ this.lifetime.signal.throwIfAborted();
535
+ if (attempt === (_nullishCoalesce(this.options.maxAttempts, () => ( 3)))) throw new DebugTokenExchangeUnavailable("cannot reach the AgentCore Controller");
536
+ this.logger.warn("agentcore.runtime.debug.sa_exchange.retry", { url, attempt, reason: "transport_error" });
537
+ await _promises3.setTimeout.call(void 0, 50 * 2 ** (attempt - 1), void 0, { signal: this.lifetime.signal });
538
+ continue;
539
+ }
540
+ if ([500, 502, 503, 504].includes(response.status)) {
541
+ if (attempt === (_nullishCoalesce(this.options.maxAttempts, () => ( 3)))) throw new DebugTokenExchangeUnavailable("Controller debug token service is unavailable");
542
+ this.logger.warn("agentcore.runtime.debug.sa_exchange.retry", { url, attempt, status: response.status });
543
+ await _promises3.setTimeout.call(void 0, 50 * 2 ** (attempt - 1), void 0, { signal: this.lifetime.signal });
544
+ continue;
545
+ }
546
+ if ([401, 403].includes(response.status)) throw new (0, _chunkJSP7ZROScjs.AuthenticationError)("Controller rejected the AgentCore debug token");
547
+ if (!response.ok) throw new (0, _chunkJSP7ZROScjs.AuthenticationError)(`Controller debug token exchange failed with HTTP ${response.status}`);
548
+ try {
549
+ const data = _chunk5RKN46UUcjs.object.call(void 0, payload, "debug token response");
550
+ const token = _chunk5RKN46UUcjs.requiredString.call(void 0, data.token, "token");
551
+ const jwtToken = _chunk5RKN46UUcjs.requiredString.call(void 0, data.jwtToken, "jwtToken");
552
+ const expiresAt = Date.parse(_chunk5RKN46UUcjs.requiredString.call(void 0, data.expiresAt, "expiresAt"));
553
+ const jwtExpiresAt = Date.parse(_chunk5RKN46UUcjs.requiredString.call(void 0, data.jwtExpiresAt, "jwtExpiresAt"));
554
+ if (!(expiresAt > Date.now()) || !(jwtExpiresAt > Date.now())) throw new Error("expiry");
555
+ return { token, jwtToken, expiresAt, jwtExpiresAt };
556
+ } catch (e7) {
557
+ throw new (0, _chunkJSP7ZROScjs.AuthenticationError)("Controller returned an invalid debug token response");
558
+ }
559
+ }
560
+ throw new DebugTokenExchangeUnavailable("Controller debug token service is unavailable");
561
+ }
562
+ }, _class4);
563
+ function createRuntimeSource(options = {}) {
564
+ const raw = _optionalChain([process, 'access', _10 => _10.env, 'access', _11 => _11.AGENTCORE_DEBUG_TOKEN, 'optionalAccess', _12 => _12.trim, 'call', _13 => _13()]);
565
+ if (raw) return new DebugRuntimeSource(parseDebugToken(raw), {
566
+ controlPlaneEndpoint: _nullishCoalesce(options.controlPlaneEndpoint, () => ( process.env.AGENTCORE_CONTROL_ENDPOINT)),
567
+ logger: options.logger
568
+ });
569
+ return new ManagedRuntimeSource(options);
570
+ }
571
+
572
+
573
+
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+ exports.DEFAULT_ENV_PATH = DEFAULT_ENV_PATH; exports.parseRuntimeEnvironment = parseRuntimeEnvironment; exports.RuntimeEnvironmentProvider = RuntimeEnvironmentProvider; exports.ManagedRuntimeSource = ManagedRuntimeSource; exports.DebugToken = DebugToken; exports.parseDebugToken = parseDebugToken; exports.DebugRuntimeSource = DebugRuntimeSource; exports.createRuntimeSource = createRuntimeSource;
582
+ //# sourceMappingURL=chunk-BVZ7H2F5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-BVZ7H2F5.cjs","../src/runtime/environment.ts","../src/runtime/managed.ts","../src/runtime/debug.ts","../src/runtime/control-config.ts"],"names":[],"mappings":"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","file":"/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-BVZ7H2F5.cjs","sourcesContent":[null,"import { readFile } from 'node:fs/promises';\nimport { ConfigError } from '../errors';\nimport { httpUrl, requiredString } from './config';\n\nexport const DEFAULT_ENV_PATH = '/var/run/agentcore/agent/env';\nexport interface RuntimeEnvironment {\n controllerUrl: string;\n agentSATokenFile: string;\n controlPlaneEndpoint?: string;\n}\n\n// Tokenize shell quoting, but deliberately do not evaluate expansions or commands.\nfunction words(line: string): string[] {\n const parts: string[] = [];\n let word = '';\n let quote = '';\n let started = false;\n for (let i = 0; i < line.length; i++) {\n const char = line[i]!;\n if (quote === \"'\") {\n if (char === quote) quote = ''; else word += char;\n } else if (char === '\\\\') {\n const next = line[++i];\n if (next === undefined) throw new Error('incomplete escape');\n if (quote === '\"' && next !== '\"' && next !== '\\\\') word += '\\\\';\n word += next;\n started = true;\n } else if (quote) {\n if (char === quote) quote = ''; else word += char;\n } else if (char === '\"' || char === \"'\") {\n quote = char;\n started = true;\n } else if (/\\s/.test(char)) {\n if (started) { parts.push(word); word = ''; started = false; }\n } else {\n word += char;\n started = true;\n }\n }\n if (quote) throw new Error('unclosed quote');\n if (started) parts.push(word);\n return parts;\n}\n\nexport function parseRuntimeEnvironment(text: string): Record<string, string> {\n const values: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [index, raw] of text.split(/\\r?\\n/).entries()) {\n const line = raw.trim();\n if (!line || line.startsWith('#')) continue;\n try {\n const parts = words(line);\n if (parts.length !== 2 || parts[0] !== 'export') throw new Error('expected export');\n const match = /^([A-Za-z_][A-Za-z0-9_]*)=([\\s\\S]*)$/.exec(parts[1]!);\n if (!match || Object.hasOwn(values, match[1]!)) throw new Error('invalid assignment');\n values[match[1]!] = match[2]!;\n } catch { throw new ConfigError(`invalid runtime env at line ${index + 1}`); }\n }\n return values;\n}\n\nexport class RuntimeEnvironmentProvider {\n constructor(readonly path = DEFAULT_ENV_PATH) {}\n async read(): Promise<Record<string, string>> {\n let text: string;\n try { text = await readFile(this.path, 'utf8'); } catch (cause) {\n throw new ConfigError('cannot read AgentCore runtime env', { cause });\n }\n return parseRuntimeEnvironment(text);\n }\n async snapshot(): Promise<RuntimeEnvironment> {\n const values = await this.read();\n const endpoint = values.AGENTCORE_CONTROL_ENDPOINT || process.env.AGENTCORE_CONTROL_ENDPOINT;\n return {\n controllerUrl: httpUrl(values.AGENTCORE_CONTROLLER_URL || values.AGENTTEAMS_CONTROLLER_URL, 'runtime Controller URL'),\n agentSATokenFile: requiredString(values.AGENTCORE_AUTH_TOKEN_FILE || values.AGENTTEAMS_AUTH_TOKEN_FILE, 'runtime SA token file'),\n controlPlaneEndpoint: endpoint?.trim() || undefined,\n };\n }\n async value(name: string): Promise<string> {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) throw new ConfigError('runtime environment name is invalid');\n const values = await this.read();\n return requiredString(values[name] || process.env[name], `runtime env ${name}`);\n }\n async taskServiceEndpoint(): Promise<string> {\n const values = await this.read();\n const endpoint = values.AGENTCORE_TASK_SERVICE_ENDPOINT || process.env.AGENTCORE_TASK_SERVICE_ENDPOINT;\n if (endpoint?.trim()) return httpUrl(endpoint, 'Task Service endpoint');\n const gateway = httpUrl(values.AGENTTEAMS_MATRIX_URL || process.env.AGENTTEAMS_MATRIX_URL, 'Task Service endpoint');\n return gateway.endsWith('/agentteams-app') ? gateway : `${gateway}/agentteams-app`;\n }\n}\n","import { access, readFile } from 'node:fs/promises';\nimport { setTimeout as sleep } from 'node:timers/promises';\nimport { ConfigError } from '../errors';\nimport { AgentSATokenProvider, type AgentSATokenSource } from '../auth/agent-sa-token';\nimport { nullLogger, type Logger } from '../logging';\nimport { DEFAULT_CONFIG_PATH, parseAgentConfig, type AgentConfig } from './config';\nimport { DEFAULT_ENV_PATH, RuntimeEnvironmentProvider } from './environment';\n\nexport interface RuntimeBindings {\n config: AgentConfig;\n controllerEndpoint?: string;\n controlPlaneEndpoint?: string;\n agentSATokens?: AgentSATokenSource;\n}\nexport interface RuntimeSource {\n resolve(): Promise<RuntimeBindings>;\n close(): void | Promise<void>;\n}\nexport interface ManagedRuntimeOptions {\n configPath?: string;\n envPath?: string;\n controlPlaneEndpoint?: string;\n logger?: Logger;\n}\n\nexport class ManagedRuntimeSource implements RuntimeSource {\n private bindings?: RuntimeBindings;\n private pending?: Promise<RuntimeBindings>;\n private readonly lifetime = new AbortController();\n constructor(private readonly options: ManagedRuntimeOptions = {}) {}\n\n async resolve(): Promise<RuntimeBindings> {\n this.lifetime.signal.throwIfAborted();\n if (this.bindings) return this.bindings;\n if (this.pending) return this.pending;\n const request = this.load();\n this.pending = request;\n try { this.bindings = await request; return this.bindings; }\n finally { this.pending = undefined; }\n }\n close(): void { this.lifetime.abort(); }\n\n private async load(): Promise<RuntimeBindings> {\n const configPath = this.options.configPath || process.env.AGENTCORE_CONFIG_PATH || DEFAULT_CONFIG_PATH;\n const rawTimeout = process.env.AGENTCORE_CONFIG_WAIT_TIMEOUT ?? '10';\n if (!/^\\d+$/.test(rawTimeout) || !Number.isSafeInteger(Number(rawTimeout))) {\n throw new ConfigError('AGENTCORE_CONFIG_WAIT_TIMEOUT must be a non-negative integer');\n }\n const deadline = performance.now() + Number(rawTimeout) * 1000;\n let config: AgentConfig;\n const logger = this.options.logger ?? nullLogger;\n for (;;) {\n this.lifetime.signal.throwIfAborted();\n let data: Buffer;\n try { data = await readFile(configPath); } catch (cause) {\n const remaining = deadline - performance.now();\n if (!(cause && typeof cause === 'object' && 'code' in cause && cause.code === 'ENOENT') || remaining <= 0) {\n throw new ConfigError('cannot read agent.yaml', { cause });\n }\n logger.info('agentcore.runtime.config.waiting_for_mount', { path: configPath, retryInMs: Math.min(500, remaining) });\n await sleep(Math.min(500, remaining), undefined, { signal: this.lifetime.signal });\n continue;\n }\n config = parseAgentConfig(data);\n break;\n }\n const configuredEnv = this.options.envPath || process.env.AGENTCORE_ENV_PATH;\n const envPath = configuredEnv || DEFAULT_ENV_PATH;\n let hasEnvironment = Boolean(configuredEnv);\n if (!hasEnvironment) {\n try { await access(envPath); hasEnvironment = true; } catch (cause) {\n if (!(cause && typeof cause === 'object' && 'code' in cause && cause.code === 'ENOENT')) {\n throw new ConfigError('cannot access AgentCore runtime env', { cause });\n }\n }\n }\n const environment = hasEnvironment ? await new RuntimeEnvironmentProvider(envPath).snapshot() : undefined;\n const bindings = {\n config,\n controllerEndpoint: environment?.controllerUrl,\n controlPlaneEndpoint: this.options.controlPlaneEndpoint ?? environment?.controlPlaneEndpoint ?? process.env.AGENTCORE_CONTROL_ENDPOINT,\n agentSATokens: environment ? new AgentSATokenProvider(environment.agentSATokenFile) : undefined,\n };\n this.lifetime.signal.throwIfAborted();\n logger.info('agentcore.runtime.source.resolved', { mode: 'managed', envLoaded: hasEnvironment, workspaceId: config.workspaceId });\n return bindings;\n }\n}\n","import { inspect } from 'node:util';\nimport { setTimeout as sleep } from 'node:timers/promises';\nimport { AuthenticationError, ConfigError } from '../errors';\nimport { nullLogger, type Logger } from '../logging';\nimport { ControllerClient, type ControllerOptions } from '../auth/controller';\nimport type { AgentSATokenSource } from '../auth/agent-sa-token';\nimport { httpUrl, object, requiredString, type AgentConfig } from './config';\nimport { ControlConfigLoader } from './control-config';\nimport { ManagedRuntimeSource, type ManagedRuntimeOptions, type RuntimeBindings, type RuntimeSource } from './managed';\n\nexport class DebugToken {\n readonly product = 'agentcore';\n #jwtToken: string;\n constructor(jwtToken: string, readonly controllerUrl: string, readonly modelGatewayUrl: string, readonly matrixUrl: string) { this.#jwtToken = jwtToken; }\n get jwtToken(): string { return this.#jwtToken; }\n [inspect.custom](): string { return 'DebugToken(product=agentcore, <redacted>)'; }\n toJSON(): string { return this[inspect.custom](); }\n}\n\nexport function parseDebugToken(value: string): DebugToken {\n try {\n const encoded = value.trim();\n if (!encoded || encoded.length > 350_000 || !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(encoded)) throw new Error('base64');\n const raw = Buffer.from(encoded, 'base64');\n if (raw.length > 256 * 1024) throw new Error('size');\n const data = object(JSON.parse(new TextDecoder('utf8', { fatal: true }).decode(raw)), 'debug token');\n if (data.product !== 'agentcore') throw new Error('product');\n const controller = httpUrl(data.controllerUrl, 'controllerUrl');\n if (new URL(controller).pathname !== '/') throw new Error('controllerUrl path');\n return new DebugToken(requiredString(data.jwtToken, 'jwtToken'), controller,\n httpUrl(data.modelGatewayUrl, 'modelGatewayUrl'), httpUrl(data.matrixUrl, 'matrixUrl'));\n } catch { throw new ConfigError('AGENTCORE_DEBUG_TOKEN is invalid'); }\n}\n\nclass DebugTokenExchangeUnavailable extends AuthenticationError {}\n\nexport interface DebugRuntimeOptions extends ControllerOptions { controlPlaneEndpoint?: string; }\n\nexport class DebugRuntimeSource implements RuntimeSource, AgentSATokenSource {\n #jwtToken: string;\n #saToken?: string;\n private saExpiresAt = 0;\n private jwtExpiresAt = 0;\n private bindings?: RuntimeBindings;\n private resolving?: Promise<RuntimeBindings>;\n private exchanging?: Promise<string>;\n private refreshTimer?: ReturnType<typeof setTimeout>;\n private readonly lifetime = new AbortController();\n private readonly configLoader: ControlConfigLoader;\n private readonly controller: ControllerClient;\n private readonly logger: Logger;\n\n constructor(private readonly token: DebugToken, private readonly options: DebugRuntimeOptions = {}) {\n this.#jwtToken = token.jwtToken;\n this.configLoader = new ControlConfigLoader(token.controllerUrl, this, options);\n this.controller = new ControllerClient(token.controllerUrl, this, options);\n this.logger = options.logger ?? nullLogger;\n }\n get matrixUrl(): string { return this.token.matrixUrl; }\n\n async resolve(): Promise<RuntimeBindings> {\n this.lifetime.signal.throwIfAborted();\n if (this.bindings) return this.bindings;\n if (this.resolving) return this.resolving;\n const request = this.load();\n this.resolving = request;\n try { this.bindings = await request; return this.bindings; }\n finally { this.resolving = undefined; }\n }\n async get(): Promise<string> {\n this.lifetime.signal.throwIfAborted();\n if (this.#saToken && this.saExpiresAt > Date.now() + 60_000) return this.#saToken;\n return this.exchange();\n }\n async refresh(current: string): Promise<string> {\n this.lifetime.signal.throwIfAborted();\n if (this.#saToken && this.#saToken !== current) return this.#saToken;\n return this.exchange();\n }\n async loadTeamsConfig(): Promise<Uint8Array | undefined> { await this.resolve(); return this.configLoader.loadTeams(); }\n async exchangeMatrixToken(): Promise<string> {\n const response = await this.controller.post('/api/v1/credentials/matrix-token');\n if (response.status < 200 || response.status >= 300) throw new AuthenticationError(`Controller Matrix token request failed with HTTP ${response.status}`);\n try { return requiredString(object(response.payload, 'Matrix token').access_token, 'access_token'); }\n catch { throw new AuthenticationError('Controller returned an invalid Matrix token response'); }\n }\n close(): void {\n this.lifetime.abort();\n if (this.refreshTimer) clearTimeout(this.refreshTimer);\n this.configLoader.close(); this.controller.close(); this.#saToken = undefined; this.#jwtToken = '';\n }\n [inspect.custom](): string { return 'DebugRuntimeSource(<redacted>)'; }\n toJSON(): string { return this[inspect.custom](); }\n\n private async load(): Promise<RuntimeBindings> {\n const config = await this.configLoader.load();\n this.lifetime.signal.throwIfAborted();\n const override = (mounted: string) => {\n const gateway = new URL(this.token.modelGatewayUrl);\n const runtime = new URL(mounted);\n if (runtime.pathname !== '/') gateway.pathname = runtime.pathname;\n return gateway.toString().replace(/\\/+$/, '');\n };\n const projected: AgentConfig = Object.freeze({ ...config,\n modelGatewayUrl: override(config.modelGatewayUrl), mcpGatewayUrl: override(config.mcpGatewayUrl),\n });\n this.logger.info('agentcore.runtime.source.resolved', { mode: 'debug', workspaceId: config.workspaceId });\n return { config: projected, controllerEndpoint: this.token.controllerUrl,\n controlPlaneEndpoint: this.options.controlPlaneEndpoint, agentSATokens: this };\n }\n\n private async exchange(): Promise<string> {\n this.lifetime.signal.throwIfAborted();\n if (this.exchanging) return this.exchanging;\n const request = this.requestToken().then((data) => {\n this.lifetime.signal.throwIfAborted();\n this.#saToken = data.token; this.saExpiresAt = data.expiresAt;\n this.#jwtToken = data.jwtToken; this.jwtExpiresAt = data.jwtExpiresAt;\n this.scheduleRefresh();\n this.logger.info('agentcore.runtime.debug.sa_exchange.succeeded', {\n expiration: new Date(this.saExpiresAt).toISOString(), jwtExpiration: new Date(this.jwtExpiresAt).toISOString(),\n });\n return this.#saToken;\n });\n this.exchanging = request;\n try { return await request; } finally { this.exchanging = undefined; }\n }\n\n private scheduleRefresh(delay = Math.max(1000, this.jwtExpiresAt - Date.now() - 300_000)): void {\n if (this.refreshTimer) clearTimeout(this.refreshTimer);\n if (this.lifetime.signal.aborted) return;\n this.refreshTimer = setTimeout(() => { void this.backgroundRefresh(); }, delay);\n this.refreshTimer.unref();\n }\n private async backgroundRefresh(): Promise<void> {\n if (this.lifetime.signal.aborted || this.jwtExpiresAt <= Date.now()) return;\n try { await this.exchange(); }\n catch (error) {\n if (this.lifetime.signal.aborted) return;\n const remaining = this.jwtExpiresAt - Date.now();\n this.logger.warn('agentcore.runtime.debug.jwt_refresh.failed', { reason: error instanceof DebugTokenExchangeUnavailable ? 'temporarily_unavailable' : 'authentication_failed' });\n if (error instanceof DebugTokenExchangeUnavailable && remaining > 1000) this.scheduleRefresh(Math.min(30_000, remaining / 2));\n }\n }\n\n private async requestToken(): Promise<{ token: string; expiresAt: number; jwtToken: string; jwtExpiresAt: number }> {\n const url = `${this.token.controllerUrl}/api/v1/edge/token`;\n for (let attempt = 1; attempt <= (this.options.maxAttempts ?? 3); attempt++) {\n let response: Response;\n let payload: unknown;\n try {\n response = await fetch(url, {\n method: 'POST', headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ jwtToken: this.#jwtToken }), redirect: 'manual',\n signal: AbortSignal.any([this.lifetime.signal, AbortSignal.timeout(this.options.timeoutMs ?? 10_000)]),\n });\n const text = await response.text();\n try { payload = JSON.parse(text); } catch { payload = undefined; }\n } catch {\n this.lifetime.signal.throwIfAborted();\n if (attempt === (this.options.maxAttempts ?? 3)) throw new DebugTokenExchangeUnavailable('cannot reach the AgentCore Controller');\n this.logger.warn('agentcore.runtime.debug.sa_exchange.retry', { url, attempt, reason: 'transport_error' });\n await sleep(50 * 2 ** (attempt - 1), undefined, { signal: this.lifetime.signal }); continue;\n }\n if ([500, 502, 503, 504].includes(response.status)) {\n if (attempt === (this.options.maxAttempts ?? 3)) throw new DebugTokenExchangeUnavailable('Controller debug token service is unavailable');\n this.logger.warn('agentcore.runtime.debug.sa_exchange.retry', { url, attempt, status: response.status });\n await sleep(50 * 2 ** (attempt - 1), undefined, { signal: this.lifetime.signal }); continue;\n }\n if ([401, 403].includes(response.status)) throw new AuthenticationError('Controller rejected the AgentCore debug token');\n if (!response.ok) throw new AuthenticationError(`Controller debug token exchange failed with HTTP ${response.status}`);\n try {\n const data = object(payload, 'debug token response');\n const token = requiredString(data.token, 'token'); const jwtToken = requiredString(data.jwtToken, 'jwtToken');\n const expiresAt = Date.parse(requiredString(data.expiresAt, 'expiresAt'));\n const jwtExpiresAt = Date.parse(requiredString(data.jwtExpiresAt, 'jwtExpiresAt'));\n if (!(expiresAt > Date.now()) || !(jwtExpiresAt > Date.now())) throw new Error('expiry');\n return { token, jwtToken, expiresAt, jwtExpiresAt };\n } catch { throw new AuthenticationError('Controller returned an invalid debug token response'); }\n }\n throw new DebugTokenExchangeUnavailable('Controller debug token service is unavailable');\n }\n}\n\nexport function createRuntimeSource(options: ManagedRuntimeOptions = {}): RuntimeSource {\n const raw = process.env.AGENTCORE_DEBUG_TOKEN?.trim();\n if (raw) return new DebugRuntimeSource(parseDebugToken(raw), {\n controlPlaneEndpoint: options.controlPlaneEndpoint ?? process.env.AGENTCORE_CONTROL_ENDPOINT,\n logger: options.logger,\n });\n return new ManagedRuntimeSource(options);\n}\n","import { createHmac } from 'node:crypto';\nimport { isIP } from 'node:net';\nimport { AuthenticationError, ConfigError, CredentialExchangeError } from '../errors';\nimport { ControllerClient, type ControllerOptions } from '../auth/controller';\nimport type { AgentSATokenSource } from '../auth/agent-sa-token';\nimport { readBytes } from '../http';\nimport { nullLogger, type Logger } from '../logging';\nimport { httpUrl, object, parseAgentConfig, requiredString, type AgentConfig } from './config';\n\ninterface ControlCredential {\n accessKeyId: string;\n accessKeySecret: string;\n securityToken: string;\n expiration: number;\n ossEndpoint: string;\n ossBucket: string;\n agentConfigPath: string;\n teamsConfigPath?: string;\n}\n\nfunction objectKey(value: unknown, field: string): string {\n const key = requiredString(value, field);\n if (/[\\\\\\r\\n]/.test(key) || key.split('/').some((p) => !p || p === '.' || p === '..')) {\n throw new CredentialExchangeError(`Controller returned an invalid ${field}`);\n }\n return key;\n}\n\nexport class ControlConfigLoader {\n private readonly controller: ControllerClient;\n private readonly logger: Logger;\n private readonly lifetime = new AbortController();\n #credential?: ControlCredential;\n private pending?: Promise<ControlCredential>;\n constructor(endpoint: string, source: AgentSATokenSource, private readonly options: ControllerOptions = {}) {\n this.controller = new ControllerClient(endpoint, source, options);\n this.logger = options.logger ?? nullLogger;\n }\n\n async load(): Promise<AgentConfig> {\n const credential = await this.credential();\n const data = await this.download(credential, credential.agentConfigPath);\n return parseAgentConfig(data!);\n }\n\n async loadTeams(): Promise<Uint8Array | undefined> {\n let credential = await this.credential();\n if (!credential.teamsConfigPath) credential = await this.credential(true);\n return credential.teamsConfigPath ? this.download(credential, credential.teamsConfigPath, true) : undefined;\n }\n\n close(): void { this.controller.close(); this.lifetime.abort(); this.#credential = undefined; }\n\n private async credential(force = false): Promise<ControlCredential> {\n this.lifetime.signal.throwIfAborted();\n if (!force && this.#credential && this.#credential.expiration > Date.now() + 60_000) return this.#credential;\n if (this.pending) return this.pending;\n const request = this.exchange();\n this.pending = request;\n try { this.#credential = await request; return this.#credential; }\n finally { this.pending = undefined; }\n }\n\n private async exchange(): Promise<ControlCredential> {\n const response = await this.controller.post('/api/v1/credentials/sts', { purpose: 'oss', target: 'control' });\n if (response.status === 401) throw new AuthenticationError('Controller rejected the Agent SA token');\n if (response.status < 200 || response.status >= 300) throw new CredentialExchangeError(`Controller control-config STS failed with HTTP ${response.status}`);\n try {\n const data = object(response.payload, 'control-config STS');\n const read = (field: string) => requiredString(data[field], field);\n const endpoint = read('oss_endpoint');\n const ossEndpoint = httpUrl(endpoint.includes('://') ? endpoint : `https://${endpoint}`, 'OSS endpoint');\n if (new URL(ossEndpoint).pathname !== '/') throw new Error('OSS endpoint path');\n const ossBucket = read('oss_bucket');\n if (!/^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$/.test(ossBucket)) throw new Error('OSS bucket');\n const expiration = Date.parse(read('expiration'));\n if (!(expiration > Date.now())) throw new Error('expired control-config STS');\n return {\n accessKeyId: read('access_key_id'), accessKeySecret: read('access_key_secret'), securityToken: read('security_token'),\n expiration, ossEndpoint, ossBucket,\n agentConfigPath: objectKey(data.agent_config_path, 'agent_config_path'),\n teamsConfigPath: data.teams_config_path == null ? undefined : objectKey(data.teams_config_path, 'teams_config_path'),\n };\n } catch { throw new CredentialExchangeError('Controller returned an invalid control-config STS response'); }\n }\n\n private async download(credential: ControlCredential, key: string, missingOK = false): Promise<Uint8Array | undefined> {\n const original = new URL(credential.ossEndpoint);\n const candidates = [original];\n if (/^(?:[a-z0-9-]+\\.)?oss-.+-internal\\.aliyuncs\\.com$/.test(original.hostname)) {\n const fallback = new URL(original); fallback.hostname = fallback.hostname.replace('-internal.aliyuncs.com', '.aliyuncs.com');\n candidates.push(fallback);\n }\n let lastStatus: number | undefined;\n for (const endpoint of candidates) {\n this.lifetime.signal.throwIfAborted();\n const url = new URL(endpoint);\n const pathStyle = url.hostname === 'localhost' || isIP(url.hostname.replace(/^\\[|\\]$/g, '')) !== 0;\n if (!pathStyle && !url.hostname.startsWith(`${credential.ossBucket}.`)) url.hostname = `${credential.ossBucket}.${url.hostname}`;\n const encodedKey = key.split('/').map((part) => encodeURIComponent(part).replace(/[!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`)).join('/');\n url.pathname = `${pathStyle ? `/${credential.ossBucket}` : ''}/${encodedKey}`;\n const date = new Date().toUTCString();\n const canonical = `GET\\n\\n\\n${date}\\nx-oss-security-token:${credential.securityToken}\\n/${credential.ossBucket}/${key}`;\n const signature = createHmac('sha1', credential.accessKeySecret).update(canonical).digest('base64');\n this.logger.debug('agentcore.control_config.download.started', { host: url.host, path: url.pathname });\n try {\n const response = await fetch(url, {\n headers: { Date: date, Authorization: `OSS ${credential.accessKeyId}:${signature}`, 'x-oss-security-token': credential.securityToken },\n redirect: 'manual', signal: AbortSignal.any([this.lifetime.signal, AbortSignal.timeout(this.options.timeoutMs ?? 10_000)]),\n });\n if (response.ok) {\n const data = await readBytes(response, 1024 * 1024, 'runtime config');\n this.logger.info('agentcore.control_config.download.succeeded', { host: url.host, bytes: data.length });\n return data;\n }\n lastStatus = response.status;\n await response.body?.cancel();\n if (missingOK && response.status === 404) return undefined;\n this.logger.warn('agentcore.control_config.download.failed', { host: url.host, status: response.status });\n } catch (error) {\n this.lifetime.signal.throwIfAborted();\n if (error instanceof ConfigError) throw error;\n this.logger.warn('agentcore.control_config.download.failed', { host: url.host, reason: 'transport_error' });\n }\n }\n throw new ConfigError(lastStatus ? `AgentCore configuration download failed with HTTP ${lastStatus}` : 'cannot reach the AgentCore configuration store');\n }\n}\n"]}