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,306 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+ var _chunkRZNQGEGJcjs = require('./chunk-RZNQGEGJ.cjs');
4
+
5
+
6
+ var _chunkLE5P3SJWcjs = require('./chunk-LE5P3SJW.cjs');
7
+
8
+
9
+
10
+
11
+
12
+
13
+ var _chunkJSP7ZROScjs = require('./chunk-JSP7ZROS.cjs');
14
+
15
+ // src/memory/transport.ts
16
+ var _agentcore20260804 = require('@alicloud/agentcore20260804'); var _agentcore202608042 = _interopRequireDefault(_agentcore20260804);
17
+ var _openapicore = require('@alicloud/openapi-core');
18
+ var _typescript = require('@darabonba/typescript'); var Dara = _interopRequireWildcard(_typescript);
19
+
20
+ var GeneratedClient = typeof _agentcore202608042.default === "function" ? _agentcore202608042.default : _agentcore202608042.default.default;
21
+ var DaraURL = _nullishCoalesce(Dara.URL, () => ( Dara.default.URL));
22
+ var pathComponent = (value) => DaraURL.percentEncode(value);
23
+ var MemoryTransport = class {
24
+ constructor(store, runtime, logger = _chunkLE5P3SJWcjs.nullLogger) {
25
+ this.store = store;
26
+ this.runtime = runtime;
27
+ this.logger = logger;
28
+ }
29
+
30
+
31
+
32
+ async request(operation, method, path, map, body, query) {
33
+ const runtime = await this.runtime();
34
+ const credential = await _asyncNullishCoalesce(runtime.accessKeyCredential, async () => ( await _optionalChain([runtime, 'access', _ => _.resourceSTS, 'optionalAccess', _2 => _2.get, 'call', _3 => _3(_chunkRZNQGEGJcjs.HIGH_CODE_SDK_PURPOSE)])));
35
+ if (!credential) throw new (0, _chunkJSP7ZROScjs.ResourceNotConfiguredError)("AgentCore Memory data-plane credentials are not configured");
36
+ const url = runtime.endpoint ? new URL(runtime.endpoint.includes("://") ? runtime.endpoint : `https://${runtime.endpoint}`) : void 0;
37
+ const client = new GeneratedClient(new _openapicore.$OpenApiUtil.Config({
38
+ accessKeyId: credential.accessKeyId,
39
+ accessKeySecret: credential.accessKeySecret,
40
+ securityToken: credential.securityToken,
41
+ regionId: runtime.regionId,
42
+ endpoint: _optionalChain([url, 'optionalAccess', _4 => _4.host]),
43
+ protocol: _optionalChain([url, 'optionalAccess', _5 => _5.protocol, 'access', _6 => _6.slice, 'call', _7 => _7(0, -1)])
44
+ }));
45
+ const params = new _openapicore.$OpenApiUtil.Params({
46
+ action: operation,
47
+ version: "2026-08-04",
48
+ protocol: "HTTPS",
49
+ pathname: `/workspaces/${pathComponent(runtime.workspaceId)}/memorystores/${pathComponent(this.store)}${path}`,
50
+ method,
51
+ authType: "AK",
52
+ style: "ROA",
53
+ reqBodyType: body === void 0 ? "json" : "formData",
54
+ bodyType: "json"
55
+ });
56
+ const request = new _openapicore.$OpenApiUtil.OpenApiRequest({
57
+ headers: {},
58
+ query: _openapicore.OpenApiUtil.query(_nullishCoalesce(query, () => ( {}))),
59
+ body: body === void 0 ? void 0 : { body: JSON.stringify(body) }
60
+ });
61
+ const add = operation === "AddMemories";
62
+ let raw;
63
+ this.logger.debug("agentcore.memory.request.started", { operation, memory_store_name: this.store });
64
+ try {
65
+ raw = await client.callApi(params, request, new (0, _typescript.RuntimeOptions)({
66
+ autoretry: false,
67
+ maxAttempts: 1,
68
+ connectTimeout: add ? 12e4 : void 0,
69
+ readTimeout: add ? 12e4 : void 0
70
+ }));
71
+ } catch (cause) {
72
+ const details2 = errorDetails(cause);
73
+ const error = add && (details2.httpStatusCode === void 0 || details2.httpStatusCode >= 500) ? new (0, _chunkJSP7ZROScjs.AddMemoriesOutcomeUnknownError)(operation, details2) : new (0, _chunkJSP7ZROScjs.MemoryAPIError)(operation, details2);
74
+ this.logFailure(error);
75
+ throw error;
76
+ }
77
+ const response = record(raw);
78
+ const payload = record(response.body);
79
+ const details = {
80
+ serviceCode: text(payload.code),
81
+ httpStatusCode: _nullishCoalesce(integer(payload.httpStatusCode), () => ( integer(response.statusCode))),
82
+ requestId: _nullishCoalesce(text(payload.requestId), () => ( text(record(response.headers)["x-acs-request-id"])))
83
+ };
84
+ try {
85
+ if ((_nullishCoalesce(integer(response.statusCode), () => ( 0))) >= 400 || payload.success === false) {
86
+ throw add && (_nullishCoalesce(details.httpStatusCode, () => ( 0))) >= 500 ? new (0, _chunkJSP7ZROScjs.AddMemoriesOutcomeUnknownError)(operation, details) : new (0, _chunkJSP7ZROScjs.MemoryAPIError)(operation, details);
87
+ }
88
+ if (payload.success !== true) throw new (0, _chunkJSP7ZROScjs.MemoryContractError)(operation, "body.success must be true");
89
+ return map(payload);
90
+ } catch (cause) {
91
+ const error = add && cause instanceof _chunkJSP7ZROScjs.MemoryContractError ? new (0, _chunkJSP7ZROScjs.AddMemoriesOutcomeUnknownError)(operation, details) : cause;
92
+ if (error instanceof _chunkJSP7ZROScjs.MemoryAPIError || error instanceof _chunkJSP7ZROScjs.MemoryContractError) this.logFailure(error);
93
+ throw error;
94
+ }
95
+ }
96
+ logFailure(error) {
97
+ this.logger.warn("agentcore.memory.request.failed", {
98
+ operation: error.operation,
99
+ memory_store_name: this.store,
100
+ error_type: error.name,
101
+ status: error instanceof _chunkJSP7ZROScjs.MemoryAPIError ? error.httpStatusCode : void 0,
102
+ service_code: error instanceof _chunkJSP7ZROScjs.MemoryAPIError ? error.serviceCode : void 0,
103
+ request_id: error instanceof _chunkJSP7ZROScjs.MemoryAPIError ? error.requestId : void 0
104
+ });
105
+ }
106
+ };
107
+ function record(value) {
108
+ return value && typeof value === "object" && !Array.isArray(value) ? value : {};
109
+ }
110
+ function text(value) {
111
+ return typeof value === "string" && value ? value : void 0;
112
+ }
113
+ function integer(value) {
114
+ return typeof value === "number" && Number.isInteger(value) ? value : void 0;
115
+ }
116
+ function errorDetails(error) {
117
+ let current = record(error);
118
+ const result = {};
119
+ for (let i = 0; i < 4; i++) {
120
+ const data = record(current.data);
121
+ const response = record(current.response);
122
+ result.serviceCode ??= _nullishCoalesce(_nullishCoalesce(text(current.code), () => ( text(data.code))), () => ( text(data.Code)));
123
+ result.httpStatusCode ??= _nullishCoalesce(_nullishCoalesce(_nullishCoalesce(integer(current.statusCode), () => ( integer(data.statusCode))), () => ( integer(data.StatusCode))), () => ( integer(response.statusCode)));
124
+ result.requestId ??= _nullishCoalesce(_nullishCoalesce(_nullishCoalesce(text(current.requestId), () => ( text(data.requestId))), () => ( text(data.RequestId))), () => ( text(record(response.headers)["x-acs-request-id"])));
125
+ if (!current.innerException) break;
126
+ current = record(current.innerException);
127
+ }
128
+ return result;
129
+ }
130
+
131
+ // src/memory/client.ts
132
+ var MemoryStore = class {
133
+
134
+
135
+ constructor(name, options) {
136
+ this.memoryStoreName = required(name, "memoryStoreName");
137
+ this.transport = new MemoryTransport(name, options.runtime, options.logger);
138
+ }
139
+ async addMemories(options) {
140
+ const scope = validateScope(options.scope);
141
+ const hasText = options.text !== void 0;
142
+ const hasMessages = options.messages !== void 0;
143
+ if (hasText === hasMessages) throw new (0, _chunkJSP7ZROScjs.MemoryValidationError)("exactly one of text or messages must be provided");
144
+ const text2 = hasText ? required(options.text, "text") : void 0;
145
+ let messages;
146
+ if (hasMessages) {
147
+ if (!Array.isArray(options.messages) || !options.messages.length) throw new (0, _chunkJSP7ZROScjs.MemoryValidationError)("messages must be a non-empty array");
148
+ messages = options.messages.map((message) => ({ role: required(_optionalChain([message, 'optionalAccess', _8 => _8.role]), "messages[].role"), content: required(_optionalChain([message, 'optionalAccess', _9 => _9.content]), "messages[].content") }));
149
+ }
150
+ const metadata = validateMetadata(options.metadata);
151
+ return this.transport.request("AddMemories", "POST", "/memories", (body) => Object.freeze({ memoryIds: Object.freeze(array(record(body.data).memories, "AddMemories", "data.memories").map((item) => string(record(item).memoryId, "AddMemories", "data.memories[].memoryId", true))) }), { scope, text: text2, messages, metadata });
152
+ }
153
+ async searchMemories(query, options = {}) {
154
+ required(query, "query");
155
+ const scope = validateScope(options.scope);
156
+ bounded(options.topK, "topK", 50);
157
+ const metadata = validateMetadata(options.metadata);
158
+ if (options.enableRerank !== void 0 && typeof options.enableRerank !== "boolean") throw new (0, _chunkJSP7ZROScjs.MemoryValidationError)("enableRerank must be a boolean");
159
+ for (const key of ["minScore", "minSimilarity"]) if (options[key] !== void 0 && (typeof options[key] !== "number" || !Number.isFinite(options[key]))) throw new (0, _chunkJSP7ZROScjs.MemoryValidationError)(`${key} must be a finite number`);
160
+ return this.transport.request("SearchMemories", "POST", "/memories/search", (body) => Object.freeze({ memories: Object.freeze(array(record(body.data).memories, "SearchMemories", "data.memories").map((item) => {
161
+ const hit = record(item);
162
+ if (typeof hit.score !== "number" || typeof hit.similarity !== "number") throw new (0, _chunkJSP7ZROScjs.MemoryContractError)("SearchMemories", "score and similarity must be numbers");
163
+ return Object.freeze({ memory: parseMemory(hit.memory, "SearchMemories"), score: hit.score, similarity: hit.similarity });
164
+ })) }), { query, scope, topK: options.topK, metadata, enableRerank: options.enableRerank, minScore: options.minScore, minSimilarity: options.minSimilarity });
165
+ }
166
+ async listMemories(options = {}) {
167
+ optionalScopeString(options.userId, "userId");
168
+ optionalScopeString(options.agentId, "agentId");
169
+ optionalScopeString(options.sessionId, "sessionId");
170
+ validatePage(options);
171
+ return this.transport.request(
172
+ "ListMemories",
173
+ "GET",
174
+ "/memories",
175
+ (body) => page(body, "ListMemories", (item) => parseMemory(item, "ListMemories")),
176
+ void 0,
177
+ { userId: options.userId, agentId: options.agentId, sessionId: options.sessionId, maxResults: options.maxResults, nextToken: options.nextToken }
178
+ );
179
+ }
180
+ async getMemory(memoryId) {
181
+ required(memoryId, "memoryId");
182
+ return this.transport.request("GetMemory", "GET", `/memories/${pathComponent(memoryId)}`, (body) => parseMemory(body.data, "GetMemory"));
183
+ }
184
+ async updateMemory(memoryId, options) {
185
+ required(memoryId, "memoryId");
186
+ if (options.text === void 0 && options.metadata === void 0) throw new (0, _chunkJSP7ZROScjs.MemoryValidationError)("at least one of text or metadata must be provided");
187
+ optional(options.text, "text");
188
+ const metadata = validateMetadata(options.metadata);
189
+ return this.transport.request("UpdateMemory", "PUT", `/memories/${pathComponent(memoryId)}`, (body) => parseMemory(body.data, "UpdateMemory"), { text: options.text, metadata });
190
+ }
191
+ async deleteMemory(memoryId) {
192
+ required(memoryId, "memoryId");
193
+ return this.transport.request("DeleteMemory", "DELETE", `/memories/${pathComponent(memoryId)}`, () => void 0);
194
+ }
195
+ async listMemorySessions(options = {}) {
196
+ optionalScopeString(options.userId, "userId");
197
+ optionalScopeString(options.agentId, "agentId");
198
+ validatePage(options);
199
+ return this.transport.request("ListMemorySessions", "GET", "/sessions", (body) => page(body, "ListMemorySessions", (item) => {
200
+ const session = Object.freeze({
201
+ agentId: optionalString(record(item).agentId, "ListMemorySessions", "items[].agentId"),
202
+ sessionId: optionalString(record(item).sessionId, "ListMemorySessions", "items[].sessionId"),
203
+ userId: optionalString(record(item).userId, "ListMemorySessions", "items[].userId")
204
+ });
205
+ if (session.userId === void 0 && session.agentId === void 0 && session.sessionId === void 0) throw new (0, _chunkJSP7ZROScjs.MemoryContractError)("ListMemorySessions", "items[] must contain at least one scope field");
206
+ return session;
207
+ }), void 0, { userId: options.userId, agentId: options.agentId, maxResults: options.maxResults, nextToken: options.nextToken });
208
+ }
209
+ async listMemorySessionMessages(sessionId, options = {}) {
210
+ required(sessionId, "sessionId");
211
+ optionalScopeString(sessionId, "sessionId");
212
+ optionalScopeString(options.userId, "userId");
213
+ optionalScopeString(options.agentId, "agentId");
214
+ if (options.userId === void 0 && options.agentId === void 0) throw new (0, _chunkJSP7ZROScjs.MemoryValidationError)("at least one of userId or agentId must be provided");
215
+ validatePage(options);
216
+ return this.transport.request(
217
+ "ListMemorySessionMessages",
218
+ "GET",
219
+ "/messages",
220
+ (body) => page(body, "ListMemorySessionMessages", (item) => Object.freeze({
221
+ role: string(record(item).role, "ListMemorySessionMessages", "items[].role", true),
222
+ content: string(record(item).content, "ListMemorySessionMessages", "items[].content", true)
223
+ })),
224
+ void 0,
225
+ { userId: options.userId, agentId: options.agentId, sessionId, maxResults: options.maxResults, nextToken: options.nextToken }
226
+ );
227
+ }
228
+ };
229
+ function required(value, field) {
230
+ if (typeof value !== "string" || !value.trim()) throw new (0, _chunkJSP7ZROScjs.MemoryValidationError)(`${field} must be a non-empty string`);
231
+ return value;
232
+ }
233
+ function optional(value, field) {
234
+ if (value !== void 0) required(value, field);
235
+ }
236
+ function bounded(value, field, maximum) {
237
+ if (value !== void 0 && (typeof value !== "number" || !Number.isInteger(value) || value < 1 || value > maximum)) throw new (0, _chunkJSP7ZROScjs.MemoryValidationError)(`${field} must be an integer from 1 to ${maximum}`);
238
+ }
239
+ function optionalScopeString(value, field) {
240
+ if (value === void 0) return;
241
+ if (["*", "__default__"].includes(required(value, field).trim())) throw new (0, _chunkJSP7ZROScjs.MemoryValidationError)(`${field} must not use a reserved scope value`);
242
+ }
243
+ function validateScope(scope) {
244
+ if (scope === void 0) return void 0;
245
+ if (!scope || typeof scope !== "object" || Array.isArray(scope)) throw new (0, _chunkJSP7ZROScjs.MemoryValidationError)("scope must be a MemoryScope");
246
+ optionalScopeString(scope.userId, "scope.userId");
247
+ optionalScopeString(scope.agentId, "scope.agentId");
248
+ optionalScopeString(scope.sessionId, "scope.sessionId");
249
+ return { userId: scope.userId, agentId: scope.agentId, sessionId: scope.sessionId };
250
+ }
251
+ function validateMetadata(value) {
252
+ if (value === void 0) return void 0;
253
+ if (!value || typeof value !== "object" || Array.isArray(value) || Object.entries(value).some(([key, item]) => !key.trim() || typeof item !== "string")) throw new (0, _chunkJSP7ZROScjs.MemoryValidationError)("metadata must contain non-empty string keys and string values");
254
+ return { ...value };
255
+ }
256
+ function validatePage(options) {
257
+ bounded(options.maxResults, "maxResults", 100);
258
+ if (options.nextToken !== void 0 && typeof options.nextToken !== "string") throw new (0, _chunkJSP7ZROScjs.MemoryValidationError)("nextToken must be a string");
259
+ }
260
+ function array(value, operation, path) {
261
+ if (value === void 0 || value === null) return [];
262
+ if (!Array.isArray(value)) throw new (0, _chunkJSP7ZROScjs.MemoryContractError)(operation, `${path} must be an array`);
263
+ return value;
264
+ }
265
+ function string(value, operation, path, nonEmpty = false) {
266
+ if (typeof value !== "string" || nonEmpty && !value.trim()) throw new (0, _chunkJSP7ZROScjs.MemoryContractError)(operation, `${path} must be ${nonEmpty ? "a non-empty" : "a"} string`);
267
+ return value;
268
+ }
269
+ function optionalString(value, operation, path) {
270
+ return value === void 0 || value === null ? void 0 : string(value, operation, path);
271
+ }
272
+ function parseMemory(value, operation) {
273
+ const item = record(value);
274
+ const scope = record(item.scope);
275
+ const memoryId = string(item.memoryId, operation, "memory.memoryId", true);
276
+ const text2 = string(record(item.content).text, operation, "memory.content.text");
277
+ if (!item.scope || typeof item.scope !== "object" || Array.isArray(item.scope)) throw new (0, _chunkJSP7ZROScjs.MemoryContractError)(operation, "memory.scope must be an object");
278
+ let metadata;
279
+ if (item.metadata !== void 0 && item.metadata !== null) {
280
+ if (typeof item.metadata !== "object" || Array.isArray(item.metadata) || Object.entries(item.metadata).some(([key, value2]) => !key.trim() || typeof value2 !== "string")) throw new (0, _chunkJSP7ZROScjs.MemoryContractError)(operation, "memory.metadata must contain string keys and values");
281
+ metadata = Object.freeze({ ...item.metadata });
282
+ }
283
+ return Object.freeze({
284
+ memoryId,
285
+ content: Object.freeze({ text: text2 }),
286
+ scope: Object.freeze({ agentId: optionalString(scope.agentId, operation, "memory.scope.agentId"), sessionId: optionalString(scope.sessionId, operation, "memory.scope.sessionId"), userId: optionalString(scope.userId, operation, "memory.scope.userId") }),
287
+ metadata,
288
+ createdAt: optionalString(item.createdAt, operation, "memory.createdAt"),
289
+ updatedAt: optionalString(item.updatedAt, operation, "memory.updatedAt")
290
+ });
291
+ }
292
+ function page(body, operation, parse) {
293
+ for (const key of ["maxResults", "totalCount"]) if (body[key] !== void 0 && body[key] !== null && (typeof body[key] !== "number" || !Number.isInteger(body[key]))) throw new (0, _chunkJSP7ZROScjs.MemoryContractError)(operation, `body.${key} must be an integer`);
294
+ return Object.freeze({
295
+ items: Object.freeze(array(body.items, operation, "body.items").map(parse)),
296
+ maxResults: body.maxResults == null ? void 0 : body.maxResults,
297
+ totalCount: body.totalCount == null ? void 0 : body.totalCount,
298
+ nextToken: optionalString(body.nextToken, operation, "body.nextToken") || void 0
299
+ });
300
+ }
301
+
302
+
303
+
304
+
305
+ exports.MemoryStore = MemoryStore; exports.validateScope = validateScope;
306
+ //# sourceMappingURL=chunk-QIZO3A4Y.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-QIZO3A4Y.cjs","../src/memory/transport.ts","../src/memory/client.ts"],"names":[],"mappings":"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","file":"/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-QIZO3A4Y.cjs","sourcesContent":[null,"import Client from '@alicloud/agentcore20260804';\nimport { $OpenApiUtil, OpenApiUtil } from '@alicloud/openapi-core';\nimport * as Dara from '@darabonba/typescript';\nimport { RuntimeOptions } from '@darabonba/typescript';\nimport type { AccessKeyCredential, CredentialProvider } from '../auth/access-key';\nimport { HIGH_CODE_SDK_PURPOSE } from '../auth/resource-sts';\nimport { AddMemoriesOutcomeUnknownError, MemoryAPIError, MemoryContractError, ResourceNotConfiguredError, type MemoryErrorDetails } from '../errors';\nimport { nullLogger, type Logger } from '../logging';\n\nconst GeneratedClient = typeof Client === 'function' ? Client : (Client as unknown as { default: typeof Client }).default;\n// CJS exposes URL directly; native ESM only exposes it on module.exports/default.\nconst DaraURL = Dara.URL ?? (Dara as unknown as { default: typeof Dara }).default.URL;\nexport interface MemoryRuntime {\n workspaceId: string;\n regionId: string;\n endpoint?: string;\n accessKeyCredential?: AccessKeyCredential;\n resourceSTS?: CredentialProvider;\n}\nexport type MemoryOperation = 'AddMemories' | 'SearchMemories' | 'ListMemories' | 'GetMemory' | 'UpdateMemory' | 'DeleteMemory' | 'ListMemorySessions' | 'ListMemorySessionMessages';\nexport const pathComponent = (value: string): string => DaraURL.percentEncode(value);\n\n/** Memory methods absent from the public generated package, using its existing POP transport. */\nexport class MemoryTransport {\n constructor(private readonly store: string, private readonly runtime: () => Promise<MemoryRuntime>, private readonly logger: Logger = nullLogger) {}\n async request<T>(operation: MemoryOperation, method: string, path: string, map: (body: Record<string, unknown>) => T,\n body?: Record<string, unknown>, query?: Record<string, unknown>): Promise<T> {\n const runtime = await this.runtime();\n const credential = runtime.accessKeyCredential ?? await runtime.resourceSTS?.get(HIGH_CODE_SDK_PURPOSE);\n if (!credential) throw new ResourceNotConfiguredError('AgentCore Memory data-plane credentials are not configured');\n const url = runtime.endpoint ? new URL(runtime.endpoint.includes('://') ? runtime.endpoint : `https://${runtime.endpoint}`) : undefined;\n const client = new GeneratedClient(new $OpenApiUtil.Config({ accessKeyId: credential.accessKeyId, accessKeySecret: credential.accessKeySecret,\n securityToken: credential.securityToken, regionId: runtime.regionId, endpoint: url?.host, protocol: url?.protocol.slice(0, -1) }));\n const params = new $OpenApiUtil.Params({ action: operation, version: '2026-08-04', protocol: 'HTTPS',\n pathname: `/workspaces/${pathComponent(runtime.workspaceId)}/memorystores/${pathComponent(this.store)}${path}`,\n method, authType: 'AK', style: 'ROA', reqBodyType: body === undefined ? 'json' : 'formData', bodyType: 'json' });\n // The generated Python contract wraps JSON in the form field `body`.\n const request = new $OpenApiUtil.OpenApiRequest({ headers: {}, query: OpenApiUtil.query(query ?? {}),\n body: body === undefined ? undefined : { body: JSON.stringify(body) } });\n const add = operation === 'AddMemories';\n let raw: unknown;\n this.logger.debug('agentcore.memory.request.started', { operation, memory_store_name: this.store });\n try {\n // httpx also uses connectTimeout as socket inactivity timeout while awaiting the response.\n raw = await client.callApi(params, request, new RuntimeOptions({ autoretry: false, maxAttempts: 1,\n connectTimeout: add ? 120_000 : undefined, readTimeout: add ? 120_000 : undefined }));\n } catch (cause) {\n const details = errorDetails(cause);\n const error = add && (details.httpStatusCode === undefined || details.httpStatusCode >= 500)\n ? new AddMemoriesOutcomeUnknownError(operation, details) : new MemoryAPIError(operation, details);\n this.logFailure(error); throw error;\n }\n const response = record(raw); const payload = record(response.body);\n const details: MemoryErrorDetails = { serviceCode: text(payload.code), httpStatusCode: integer(payload.httpStatusCode) ?? integer(response.statusCode),\n requestId: text(payload.requestId) ?? text(record(response.headers)['x-acs-request-id']) };\n try {\n if ((integer(response.statusCode) ?? 0) >= 400 || payload.success === false) {\n throw add && (details.httpStatusCode ?? 0) >= 500 ? new AddMemoriesOutcomeUnknownError(operation, details) : new MemoryAPIError(operation, details);\n }\n if (payload.success !== true) throw new MemoryContractError(operation, 'body.success must be true');\n return map(payload);\n } catch (cause) {\n const error = add && cause instanceof MemoryContractError ? new AddMemoriesOutcomeUnknownError(operation, details) : cause;\n if (error instanceof MemoryAPIError || error instanceof MemoryContractError) this.logFailure(error);\n throw error;\n }\n }\n private logFailure(error: MemoryAPIError | MemoryContractError): void {\n this.logger.warn('agentcore.memory.request.failed', { operation: error.operation, memory_store_name: this.store, error_type: error.name,\n status: error instanceof MemoryAPIError ? error.httpStatusCode : undefined,\n service_code: error instanceof MemoryAPIError ? error.serviceCode : undefined,\n request_id: error instanceof MemoryAPIError ? error.requestId : undefined });\n }\n}\nexport function record(value: unknown): Record<string, unknown> { return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : {}; }\nfunction text(value: unknown): string | undefined { return typeof value === 'string' && value ? value : undefined; }\nfunction integer(value: unknown): number | undefined { return typeof value === 'number' && Number.isInteger(value) ? value : undefined; }\nfunction errorDetails(error: unknown): MemoryErrorDetails {\n let current = record(error); const result: MemoryErrorDetails = {};\n for (let i = 0; i < 4; i++) {\n const data = record(current.data); const response = record(current.response);\n result.serviceCode ??= text(current.code) ?? text(data.code) ?? text(data.Code);\n result.httpStatusCode ??= integer(current.statusCode) ?? integer(data.statusCode) ?? integer(data.StatusCode) ?? integer(response.statusCode);\n result.requestId ??= text(current.requestId) ?? text(data.requestId) ?? text(data.RequestId) ?? text(record(response.headers)['x-acs-request-id']);\n if (!current.innerException) break;\n current = record(current.innerException);\n }\n return result;\n}\n","import { MemoryContractError, MemoryValidationError } from '../errors';\nimport type { Logger } from '../logging';\nimport { MemoryTransport, pathComponent, record, type MemoryRuntime, type MemoryOperation } from './transport';\nimport type { AddMemoriesOptions, AddMemoriesResult, ListMemoriesOptions, ListMemorySessionsOptions, ListMemorySessionMessagesOptions, Memory, MemoryMessage, MemoryScope, MemorySession,\n Page, PageOptions, SearchMemoriesOptions, SearchMemoriesResult, UpdateMemoryOptions } from './models';\n\n/** A local binding to an existing MemoryStore. No lookup or creation at construction. */\nexport class MemoryStore {\n readonly memoryStoreName: string;\n private readonly transport: MemoryTransport;\n constructor(name: string, options: { runtime: () => Promise<MemoryRuntime>; logger?: Logger }) {\n this.memoryStoreName = required(name, 'memoryStoreName');\n this.transport = new MemoryTransport(name, options.runtime, options.logger);\n }\n async addMemories(options: AddMemoriesOptions): Promise<AddMemoriesResult> {\n const scope = validateScope(options.scope);\n const hasText = options.text !== undefined; const hasMessages = options.messages !== undefined;\n if (hasText === hasMessages) throw new MemoryValidationError('exactly one of text or messages must be provided');\n const text = hasText ? required(options.text, 'text') : undefined;\n let messages: MemoryMessage[] | undefined;\n if (hasMessages) {\n if (!Array.isArray(options.messages) || !options.messages.length) throw new MemoryValidationError('messages must be a non-empty array');\n messages = options.messages.map((message) => ({ role: required(message?.role, 'messages[].role'), content: required(message?.content, 'messages[].content') }));\n }\n const metadata = validateMetadata(options.metadata);\n return this.transport.request('AddMemories', 'POST', '/memories', (body) => Object.freeze({ memoryIds: Object.freeze(array(record(body.data).memories, 'AddMemories', 'data.memories').map((item) =>\n string(record(item).memoryId, 'AddMemories', 'data.memories[].memoryId', true))) }), { scope, text, messages, metadata });\n }\n async searchMemories(query: string, options: SearchMemoriesOptions = {}): Promise<SearchMemoriesResult> {\n required(query, 'query'); const scope = validateScope(options.scope);\n bounded(options.topK, 'topK', 50); const metadata = validateMetadata(options.metadata);\n if (options.enableRerank !== undefined && typeof options.enableRerank !== 'boolean') throw new MemoryValidationError('enableRerank must be a boolean');\n for (const key of ['minScore', 'minSimilarity'] as const) if (options[key] !== undefined && (typeof options[key] !== 'number' || !Number.isFinite(options[key]))) throw new MemoryValidationError(`${key} must be a finite number`);\n return this.transport.request('SearchMemories', 'POST', '/memories/search', (body) => Object.freeze({ memories: Object.freeze(array(record(body.data).memories, 'SearchMemories', 'data.memories').map((item) => {\n const hit = record(item);\n if (typeof hit.score !== 'number' || typeof hit.similarity !== 'number') throw new MemoryContractError('SearchMemories', 'score and similarity must be numbers');\n return Object.freeze({ memory: parseMemory(hit.memory, 'SearchMemories'), score: hit.score, similarity: hit.similarity });\n })) }), { query, scope, topK: options.topK, metadata, enableRerank: options.enableRerank, minScore: options.minScore, minSimilarity: options.minSimilarity });\n }\n async listMemories(options: ListMemoriesOptions = {}): Promise<Page<Memory>> {\n optionalScopeString(options.userId, 'userId'); optionalScopeString(options.agentId, 'agentId'); optionalScopeString(options.sessionId, 'sessionId');\n validatePage(options);\n return this.transport.request('ListMemories', 'GET', '/memories', (body) => page(body, 'ListMemories', (item) => parseMemory(item, 'ListMemories')),\n undefined, { userId: options.userId, agentId: options.agentId, sessionId: options.sessionId, maxResults: options.maxResults, nextToken: options.nextToken });\n }\n async getMemory(memoryId: string): Promise<Memory> {\n required(memoryId, 'memoryId');\n return this.transport.request('GetMemory', 'GET', `/memories/${pathComponent(memoryId)}`, (body) => parseMemory(body.data, 'GetMemory'));\n }\n async updateMemory(memoryId: string, options: UpdateMemoryOptions): Promise<Memory> {\n required(memoryId, 'memoryId');\n if (options.text === undefined && options.metadata === undefined) throw new MemoryValidationError('at least one of text or metadata must be provided');\n optional(options.text, 'text'); const metadata = validateMetadata(options.metadata);\n return this.transport.request('UpdateMemory', 'PUT', `/memories/${pathComponent(memoryId)}`, (body) => parseMemory(body.data, 'UpdateMemory'), { text: options.text, metadata });\n }\n async deleteMemory(memoryId: string): Promise<void> {\n required(memoryId, 'memoryId');\n return this.transport.request('DeleteMemory', 'DELETE', `/memories/${pathComponent(memoryId)}`, () => undefined);\n }\n async listMemorySessions(options: ListMemorySessionsOptions = {}): Promise<Page<MemorySession>> {\n optionalScopeString(options.userId, 'userId'); optionalScopeString(options.agentId, 'agentId'); validatePage(options);\n return this.transport.request('ListMemorySessions', 'GET', '/sessions', (body) => page(body, 'ListMemorySessions', (item) => {\n const session = Object.freeze({\n agentId: optionalString(record(item).agentId, 'ListMemorySessions', 'items[].agentId'),\n sessionId: optionalString(record(item).sessionId, 'ListMemorySessions', 'items[].sessionId'),\n userId: optionalString(record(item).userId, 'ListMemorySessions', 'items[].userId'),\n });\n if (session.userId === undefined && session.agentId === undefined && session.sessionId === undefined) throw new MemoryContractError('ListMemorySessions', 'items[] must contain at least one scope field');\n return session;\n }), undefined, { userId: options.userId, agentId: options.agentId, maxResults: options.maxResults, nextToken: options.nextToken });\n }\n async listMemorySessionMessages(sessionId: string, options: ListMemorySessionMessagesOptions = {}): Promise<Page<MemoryMessage>> {\n required(sessionId, 'sessionId'); optionalScopeString(sessionId, 'sessionId');\n optionalScopeString(options.userId, 'userId'); optionalScopeString(options.agentId, 'agentId');\n if (options.userId === undefined && options.agentId === undefined) throw new MemoryValidationError('at least one of userId or agentId must be provided');\n validatePage(options);\n return this.transport.request('ListMemorySessionMessages', 'GET', '/messages',\n (body) => page(body, 'ListMemorySessionMessages', (item) => Object.freeze({\n role: string(record(item).role, 'ListMemorySessionMessages', 'items[].role', true),\n content: string(record(item).content, 'ListMemorySessionMessages', 'items[].content', true),\n })), undefined, { userId: options.userId, agentId: options.agentId, sessionId, maxResults: options.maxResults, nextToken: options.nextToken });\n }\n}\n\nfunction required(value: unknown, field: string): string {\n if (typeof value !== 'string' || !value.trim()) throw new MemoryValidationError(`${field} must be a non-empty string`);\n return value;\n}\nfunction optional(value: unknown, field: string): void { if (value !== undefined) required(value, field); }\nfunction bounded(value: unknown, field: string, maximum: number): void {\n if (value !== undefined && (typeof value !== 'number' || !Number.isInteger(value) || value < 1 || value > maximum)) throw new MemoryValidationError(`${field} must be an integer from 1 to ${maximum}`);\n}\nfunction optionalScopeString(value: unknown, field: string): void {\n if (value === undefined) return;\n if (['*', '__default__'].includes(required(value, field).trim())) throw new MemoryValidationError(`${field} must not use a reserved scope value`);\n}\nexport function validateScope(scope: MemoryScope | undefined): MemoryScope | undefined {\n if (scope === undefined) return undefined;\n if (!scope || typeof scope !== 'object' || Array.isArray(scope)) throw new MemoryValidationError('scope must be a MemoryScope');\n optionalScopeString(scope.userId, 'scope.userId'); optionalScopeString(scope.agentId, 'scope.agentId'); optionalScopeString(scope.sessionId, 'scope.sessionId');\n return { userId: scope.userId, agentId: scope.agentId, sessionId: scope.sessionId };\n}\nfunction validateMetadata(value: Readonly<Record<string, string>> | undefined): Record<string, string> | undefined {\n if (value === undefined) return undefined;\n if (!value || typeof value !== 'object' || Array.isArray(value) || Object.entries(value).some(([key, item]) => !key.trim() || typeof item !== 'string')) throw new MemoryValidationError('metadata must contain non-empty string keys and string values');\n return { ...value };\n}\nfunction validatePage(options: PageOptions): void {\n bounded(options.maxResults, 'maxResults', 100);\n if (options.nextToken !== undefined && typeof options.nextToken !== 'string') throw new MemoryValidationError('nextToken must be a string');\n}\nfunction array(value: unknown, operation: MemoryOperation, path: string): unknown[] {\n if (value === undefined || value === null) return [];\n if (!Array.isArray(value)) throw new MemoryContractError(operation, `${path} must be an array`);\n return value;\n}\nfunction string(value: unknown, operation: MemoryOperation, path: string, nonEmpty = false): string {\n if (typeof value !== 'string' || (nonEmpty && !value.trim())) throw new MemoryContractError(operation, `${path} must be ${nonEmpty ? 'a non-empty' : 'a'} string`);\n return value;\n}\nfunction optionalString(value: unknown, operation: MemoryOperation, path: string): string | undefined { return value === undefined || value === null ? undefined : string(value, operation, path); }\nfunction parseMemory(value: unknown, operation: MemoryOperation): Memory {\n const item = record(value); const scope = record(item.scope);\n const memoryId = string(item.memoryId, operation, 'memory.memoryId', true);\n const text = string(record(item.content).text, operation, 'memory.content.text');\n if (!item.scope || typeof item.scope !== 'object' || Array.isArray(item.scope)) throw new MemoryContractError(operation, 'memory.scope must be an object');\n let metadata: Readonly<Record<string, string>> | undefined;\n if (item.metadata !== undefined && item.metadata !== null) {\n if (typeof item.metadata !== 'object' || Array.isArray(item.metadata) || Object.entries(item.metadata).some(([key, value]) => !key.trim() || typeof value !== 'string')) throw new MemoryContractError(operation, 'memory.metadata must contain string keys and values');\n metadata = Object.freeze({ ...item.metadata as Record<string, string> });\n }\n return Object.freeze({ memoryId, content: Object.freeze({ text }), scope: Object.freeze({ agentId: optionalString(scope.agentId, operation, 'memory.scope.agentId'), sessionId: optionalString(scope.sessionId, operation, 'memory.scope.sessionId'), userId: optionalString(scope.userId, operation, 'memory.scope.userId') }),\n metadata, createdAt: optionalString(item.createdAt, operation, 'memory.createdAt'), updatedAt: optionalString(item.updatedAt, operation, 'memory.updatedAt') });\n}\nfunction page<T>(body: Record<string, unknown>, operation: MemoryOperation, parse: (item: unknown) => T): Page<T> {\n for (const key of ['maxResults', 'totalCount']) if (body[key] !== undefined && body[key] !== null && (typeof body[key] !== 'number' || !Number.isInteger(body[key]))) throw new MemoryContractError(operation, `body.${key} must be an integer`);\n return Object.freeze({ items: Object.freeze(array(body.items, operation, 'body.items').map(parse)), maxResults: body.maxResults == null ? undefined : body.maxResults as number,\n totalCount: body.totalCount == null ? undefined : body.totalCount as number, nextToken: optionalString(body.nextToken, operation, 'body.nextToken') || undefined });\n}\n"]}
@@ -0,0 +1,202 @@
1
+ import {
2
+ AGENT_IDENTITY_DATA_PURPOSE
3
+ } from "./chunk-IUCLCPVV.js";
4
+ import {
5
+ ControllerClient
6
+ } from "./chunk-UBP5CHU7.js";
7
+ import {
8
+ nullLogger
9
+ } from "./chunk-NZL3VPJ2.js";
10
+ import {
11
+ AuthenticationError,
12
+ ConfigError,
13
+ CredentialExchangeError,
14
+ WorkloadAccessTokenRejectedError,
15
+ WorkloadIdentityNotConfiguredError
16
+ } from "./chunk-MZ5UWGXS.js";
17
+
18
+ // src/auth/workload-access-token.ts
19
+ var WorkloadAccessTokenProvider = class {
20
+ controller;
21
+ #token;
22
+ pending;
23
+ constructor(endpoint, source, options = {}) {
24
+ this.controller = new ControllerClient(endpoint, source, options);
25
+ }
26
+ async get() {
27
+ if (this.#token !== void 0) return this.#token;
28
+ if (this.pending) return this.pending;
29
+ const request = this.exchange();
30
+ this.pending = request;
31
+ try {
32
+ this.#token = await request;
33
+ return this.#token;
34
+ } finally {
35
+ this.pending = void 0;
36
+ }
37
+ }
38
+ async invalidate(token) {
39
+ if (this.pending) await this.pending.catch(() => void 0);
40
+ if (token === void 0 || token === this.#token) this.#token = void 0;
41
+ }
42
+ close() {
43
+ this.controller.close();
44
+ this.#token = void 0;
45
+ }
46
+ async exchange() {
47
+ const response = await this.controller.post("/api/v1/workload/token");
48
+ if (response.status === 404) throw new WorkloadIdentityNotConfiguredError("the current Agent has no configured Workload Identity");
49
+ if (response.status < 200 || response.status >= 300) throw new AuthenticationError(`Controller workload token request failed with HTTP ${response.status}`);
50
+ const payload = response.payload;
51
+ const token = payload && typeof payload === "object" && "workloadAccessToken" in payload ? payload.workloadAccessToken : void 0;
52
+ if (typeof token !== "string" || !token.trim()) throw new AuthenticationError("Controller returned an empty workload access token");
53
+ return token.trim();
54
+ }
55
+ };
56
+
57
+ // src/auth/bound-credentials.ts
58
+ import { inspect } from "util";
59
+ import Client, { GetResourceAPIKeyRequest } from "@alicloud/agentidentitydata20251127";
60
+ import { $OpenApiUtil } from "@alicloud/openapi-core";
61
+ import { RuntimeOptions } from "@darabonba/typescript";
62
+ var GeneratedClient = typeof Client === "function" ? Client : Client.default;
63
+ var WAT_ERRORS = /* @__PURE__ */ new Set(["WORKLOAD_ACCESS_TOKEN_EXPIRED", "WORKLOAD_ACCESS_TOKEN_INVALID"]);
64
+ var BoundCredential = class {
65
+ constructor(providerName, value, metadata) {
66
+ this.metadata = metadata;
67
+ this.providerName = providerName;
68
+ this.#value = value;
69
+ }
70
+ metadata;
71
+ providerName;
72
+ #value;
73
+ get value() {
74
+ return this.#value;
75
+ }
76
+ get credentialType() {
77
+ return this.metadata.credentialType;
78
+ }
79
+ asHeaders() {
80
+ if (this.credentialType !== "mcpHeader") throw new ConfigError("Credential must have type mcpHeader to read headers");
81
+ let data;
82
+ try {
83
+ data = JSON.parse(this.#value);
84
+ } catch {
85
+ throw new ConfigError("Invalid MCP Header credential payload");
86
+ }
87
+ const entries = fields(data).headers;
88
+ if (!Array.isArray(entries) || !entries.length) throw new ConfigError("MCP Header credential must contain a non-empty headers array");
89
+ const headers = {};
90
+ for (const entry of entries) {
91
+ const { name, value } = fields(entry);
92
+ if (typeof name !== "string" || !/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) throw new ConfigError("Invalid credential header name");
93
+ if (typeof value !== "string" || /[\x00-\x1f\x7f]/.test(value)) throw new ConfigError("Invalid credential header value");
94
+ const folded = name.toLowerCase();
95
+ if (Object.hasOwn(headers, folded)) throw new ConfigError("Duplicate credential header name");
96
+ Object.defineProperty(headers, folded, { value, enumerable: true, configurable: true, writable: true });
97
+ }
98
+ return headers;
99
+ }
100
+ [inspect.custom]() {
101
+ return `BoundCredential(providerName=${JSON.stringify(this.providerName)}, <redacted>)`;
102
+ }
103
+ toJSON() {
104
+ return this[inspect.custom]();
105
+ }
106
+ };
107
+ var BoundCredentials = class {
108
+ constructor(runtime, logger = nullLogger) {
109
+ this.runtime = runtime;
110
+ this.logger = logger;
111
+ }
112
+ runtime;
113
+ logger;
114
+ async get(credentialName) {
115
+ return this.resolve(credentialName);
116
+ }
117
+ /** @internal Bind only after validating the credential's MCP application scope. */
118
+ async getForMCP(credentialName, serverId) {
119
+ return this.resolve(credentialName, serverId);
120
+ }
121
+ async resolve(credentialName, serverId) {
122
+ credentialName = credentialName.trim();
123
+ if (!credentialName) throw new TypeError("credential name must not be empty");
124
+ const { workspaceId, regionId, workloadAccessToken: wat, resourceSTS: sts, controlPlane } = await this.runtime();
125
+ if (!wat || !sts) throw new CredentialExchangeError("AgentCore credential runtime is not configured");
126
+ const metadata = await controlPlane.resolveCredential(credentialName);
127
+ if (serverId !== void 0) {
128
+ if (metadata.credentialType !== "mcpHeader") throw new ConfigError("MCP credential must have type mcpHeader");
129
+ if (!(metadata.resourceScope === "ALL" || metadata.resourceScope === "SPECIFIED" && metadata.resourceRefs.some((ref) => ref.resourceType === "mcpServer" && ref.resourceId === serverId))) {
130
+ throw new ConfigError("MCP credential does not allow the selected MCP server");
131
+ }
132
+ }
133
+ const providerName = `${workspaceId}-${credentialName}`;
134
+ this.logger.info("agentcore.credential.resolve.started", { workspace_id: workspaceId, credential_name: credentialName });
135
+ const credential = await sts.get(AGENT_IDENTITY_DATA_PURPOSE);
136
+ let token = await wat.get();
137
+ let value;
138
+ try {
139
+ value = await this.getAPIKey(regionId, credential, providerName, token);
140
+ } catch (error) {
141
+ if (!(error instanceof WorkloadAccessTokenRejectedError)) throw error;
142
+ this.logger.warn("agentcore.credential.resolve.wat_rejected", { workspace_id: workspaceId, credential_name: credentialName, retry: true });
143
+ await wat.invalidate(token);
144
+ token = await wat.get();
145
+ value = await this.getAPIKey(regionId, credential, providerName, token);
146
+ }
147
+ this.logger.info("agentcore.credential.resolve.succeeded", { workspace_id: workspaceId, credential_name: credentialName });
148
+ return new BoundCredential(providerName, value, metadata);
149
+ }
150
+ async getAPIKey(regionId, credential, providerName, token) {
151
+ const endpoint = `agentidentitydata.${regionId}.aliyuncs.com`;
152
+ const client = new GeneratedClient(new $OpenApiUtil.Config({
153
+ accessKeyId: credential.accessKeyId,
154
+ accessKeySecret: credential.accessKeySecret,
155
+ securityToken: credential.securityToken,
156
+ regionId,
157
+ endpoint,
158
+ protocol: "https"
159
+ }));
160
+ try {
161
+ const response = await client.getResourceAPIKeyWithOptions(new GetResourceAPIKeyRequest({
162
+ resourceCredentialProviderName: providerName,
163
+ workloadAccessToken: token
164
+ }), new RuntimeOptions({ autoretry: false, connectTimeout: 1e4, readTimeout: 3e4 }));
165
+ const value = response.body?.APIKey;
166
+ if (typeof value !== "string" || !value) throw new CredentialExchangeError("Agent Identity Data returned an empty or invalid API key");
167
+ return value;
168
+ } catch (error) {
169
+ if (watRejection(error)) throw new WorkloadAccessTokenRejectedError("Agent Identity Data rejected the Workload Access Token");
170
+ const details = fields(error);
171
+ const data = fields(details.data);
172
+ this.logger.warn("agentcore.credential.api.failed", {
173
+ endpoint: `https://${endpoint}/`,
174
+ provider_name: providerName,
175
+ error_type: error instanceof Error ? error.name : "Error",
176
+ request_id: String(details.requestId ?? data.RequestId ?? data.requestId ?? "")
177
+ });
178
+ if (error instanceof CredentialExchangeError) throw error;
179
+ throw new CredentialExchangeError("Agent Identity Data API key request failed");
180
+ }
181
+ }
182
+ };
183
+ function fields(value) {
184
+ return value && typeof value === "object" ? value : {};
185
+ }
186
+ function watRejection(error) {
187
+ let current = fields(error);
188
+ for (let depth = 0; depth < 3; depth++) {
189
+ const data = fields(current.data);
190
+ if ([current.code, data.Code, data.code].some((code) => typeof code === "string" && WAT_ERRORS.has(code.toUpperCase()))) return true;
191
+ if (!current.innerException) return false;
192
+ current = fields(current.innerException);
193
+ }
194
+ return false;
195
+ }
196
+
197
+ export {
198
+ WorkloadAccessTokenProvider,
199
+ BoundCredential,
200
+ BoundCredentials
201
+ };
202
+ //# sourceMappingURL=chunk-RBAY4MO2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/workload-access-token.ts","../src/auth/bound-credentials.ts"],"sourcesContent":["import { AuthenticationError, WorkloadIdentityNotConfiguredError } from '../errors';\nimport type { AgentSATokenSource } from './agent-sa-token';\nimport { ControllerClient, type ControllerOptions } from './controller';\n\nexport class WorkloadAccessTokenProvider {\n private readonly controller: ControllerClient;\n #token?: string;\n private pending?: Promise<string>;\n\n constructor(endpoint: string, source: AgentSATokenSource, options: ControllerOptions = {}) {\n this.controller = new ControllerClient(endpoint, source, options);\n }\n async get(): Promise<string> {\n if (this.#token !== undefined) return this.#token;\n if (this.pending) return this.pending;\n const request = this.exchange();\n this.pending = request;\n try { this.#token = await request; return this.#token; }\n finally { this.pending = undefined; }\n }\n async invalidate(token?: string): Promise<void> {\n // Serialize invalidation after an exchange, including an initially empty cache.\n if (this.pending) await this.pending.catch(() => undefined);\n if (token === undefined || token === this.#token) this.#token = undefined;\n }\n close(): void { this.controller.close(); this.#token = undefined; }\n\n private async exchange(): Promise<string> {\n const response = await this.controller.post('/api/v1/workload/token');\n if (response.status === 404) throw new WorkloadIdentityNotConfiguredError('the current Agent has no configured Workload Identity');\n if (response.status < 200 || response.status >= 300) throw new AuthenticationError(`Controller workload token request failed with HTTP ${response.status}`);\n const payload = response.payload;\n const token = payload && typeof payload === 'object' && 'workloadAccessToken' in payload ? payload.workloadAccessToken : undefined;\n if (typeof token !== 'string' || !token.trim()) throw new AuthenticationError('Controller returned an empty workload access token');\n return token.trim();\n }\n}\n","import { inspect } from 'node:util';\nimport Client, { GetResourceAPIKeyRequest } from '@alicloud/agentidentitydata20251127';\nimport { $OpenApiUtil } from '@alicloud/openapi-core';\nimport { RuntimeOptions } from '@darabonba/typescript';\nimport { ConfigError, CredentialExchangeError, WorkloadAccessTokenRejectedError } from '../errors';\nimport type { AgentCoreControlPlane, CredentialMetadata } from '../controlplane/client';\nimport { nullLogger, type Logger } from '../logging';\nimport type { AccessKeyCredential, CredentialProvider } from './access-key';\nimport { AGENT_IDENTITY_DATA_PURPOSE } from './resource-sts';\n\nconst GeneratedClient = typeof Client === 'function' ? Client : (Client as unknown as { default: typeof Client }).default;\nconst WAT_ERRORS = new Set(['WORKLOAD_ACCESS_TOKEN_EXPIRED', 'WORKLOAD_ACCESS_TOKEN_INVALID']);\ninterface CredentialRuntime {\n workspaceId: string;\n regionId: string;\n controlPlane: AgentCoreControlPlane;\n resourceSTS?: CredentialProvider;\n workloadAccessToken?: { get(): Promise<string>; invalidate(token: string): Promise<void> };\n}\n\nexport class BoundCredential {\n readonly providerName: string;\n #value: string;\n constructor(providerName: string, value: string, readonly metadata: CredentialMetadata) { this.providerName = providerName; this.#value = value; }\n get value(): string { return this.#value; }\n get credentialType(): string { return this.metadata.credentialType; }\n asHeaders(): Record<string, string> {\n if (this.credentialType !== 'mcpHeader') throw new ConfigError('Credential must have type mcpHeader to read headers');\n let data: unknown;\n try { data = JSON.parse(this.#value); } catch { throw new ConfigError('Invalid MCP Header credential payload'); }\n const entries = fields(data).headers;\n if (!Array.isArray(entries) || !entries.length) throw new ConfigError('MCP Header credential must contain a non-empty headers array');\n const headers: Record<string, string> = {};\n for (const entry of entries) {\n const { name, value } = fields(entry);\n if (typeof name !== 'string' || !/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) throw new ConfigError('Invalid credential header name');\n if (typeof value !== 'string' || /[\\x00-\\x1f\\x7f]/.test(value)) throw new ConfigError('Invalid credential header value');\n const folded = name.toLowerCase();\n if (Object.hasOwn(headers, folded)) throw new ConfigError('Duplicate credential header name');\n Object.defineProperty(headers, folded, { value, enumerable: true, configurable: true, writable: true });\n }\n return headers;\n }\n [inspect.custom](): string { return `BoundCredential(providerName=${JSON.stringify(this.providerName)}, <redacted>)`; }\n toJSON(): string { return this[inspect.custom](); }\n}\n\n/** Resolve metadata by name, then fetch the secret from AgentIdentity. WAT/STS cache independently. */\nexport class BoundCredentials {\n constructor(private readonly runtime: () => Promise<CredentialRuntime>, private readonly logger: Logger = nullLogger) {}\n async get(credentialName: string): Promise<BoundCredential> {\n return this.resolve(credentialName);\n }\n /** @internal Bind only after validating the credential's MCP application scope. */\n async getForMCP(credentialName: string, serverId: string): Promise<BoundCredential> {\n return this.resolve(credentialName, serverId);\n }\n private async resolve(credentialName: string, serverId?: string): Promise<BoundCredential> {\n credentialName = credentialName.trim();\n if (!credentialName) throw new TypeError('credential name must not be empty');\n const { workspaceId, regionId, workloadAccessToken: wat, resourceSTS: sts, controlPlane } = await this.runtime();\n if (!wat || !sts) throw new CredentialExchangeError('AgentCore credential runtime is not configured');\n const metadata = await controlPlane.resolveCredential(credentialName);\n if (serverId !== undefined) {\n if (metadata.credentialType !== 'mcpHeader') throw new ConfigError('MCP credential must have type mcpHeader');\n if (!(metadata.resourceScope === 'ALL' || (metadata.resourceScope === 'SPECIFIED' &&\n metadata.resourceRefs.some((ref) => ref.resourceType === 'mcpServer' && ref.resourceId === serverId)))) {\n throw new ConfigError('MCP credential does not allow the selected MCP server');\n }\n }\n // Matches the control plane's CreateCredential provider naming contract.\n const providerName = `${workspaceId}-${credentialName}`;\n this.logger.info('agentcore.credential.resolve.started', { workspace_id: workspaceId, credential_name: credentialName });\n const credential = await sts.get(AGENT_IDENTITY_DATA_PURPOSE);\n let token = await wat.get(); let value: string;\n try { value = await this.getAPIKey(regionId, credential, providerName, token); }\n catch (error) {\n if (!(error instanceof WorkloadAccessTokenRejectedError)) throw error;\n this.logger.warn('agentcore.credential.resolve.wat_rejected', { workspace_id: workspaceId, credential_name: credentialName, retry: true });\n await wat.invalidate(token); token = await wat.get();\n value = await this.getAPIKey(regionId, credential, providerName, token);\n }\n this.logger.info('agentcore.credential.resolve.succeeded', { workspace_id: workspaceId, credential_name: credentialName });\n return new BoundCredential(providerName, value, metadata);\n }\n private async getAPIKey(regionId: string, credential: AccessKeyCredential, providerName: string, token: string): Promise<string> {\n const endpoint = `agentidentitydata.${regionId}.aliyuncs.com`;\n const client = new GeneratedClient(new $OpenApiUtil.Config({\n accessKeyId: credential.accessKeyId, accessKeySecret: credential.accessKeySecret, securityToken: credential.securityToken,\n regionId, endpoint, protocol: 'https',\n }));\n try {\n const response = await client.getResourceAPIKeyWithOptions(new GetResourceAPIKeyRequest({\n resourceCredentialProviderName: providerName, workloadAccessToken: token,\n }), new RuntimeOptions({ autoretry: false, connectTimeout: 10_000, readTimeout: 30_000 }));\n const value = response.body?.APIKey;\n if (typeof value !== 'string' || !value) throw new CredentialExchangeError('Agent Identity Data returned an empty or invalid API key');\n return value;\n } catch (error) {\n if (watRejection(error)) throw new WorkloadAccessTokenRejectedError('Agent Identity Data rejected the Workload Access Token');\n const details = fields(error); const data = fields(details.data);\n this.logger.warn('agentcore.credential.api.failed', { endpoint: `https://${endpoint}/`, provider_name: providerName,\n error_type: error instanceof Error ? error.name : 'Error', request_id: String(details.requestId ?? data.RequestId ?? data.requestId ?? '') });\n if (error instanceof CredentialExchangeError) throw error;\n // Generated SDK errors may contain a credential-bearing request; do not attach them.\n throw new CredentialExchangeError('Agent Identity Data API key request failed');\n }\n }\n}\nfunction fields(value: unknown): Record<string, unknown> { return value && typeof value === 'object' ? value as Record<string, unknown> : {}; }\nfunction watRejection(error: unknown): boolean {\n let current = fields(error);\n for (let depth = 0; depth < 3; depth++) {\n const data = fields(current.data);\n if ([current.code, data.Code, data.code].some((code) => typeof code === 'string' && WAT_ERRORS.has(code.toUpperCase()))) return true;\n if (!current.innerException) return false;\n current = fields(current.innerException);\n }\n return false;\n}\n"],"mappings":"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","names":[]}