alibabacloud-agentcore-sdk 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -2
- package/dist/auth/index.cjs +6 -7
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.js +5 -6
- package/dist/{chunk-RZNQGEGJ.cjs → chunk-25KH5XKG.cjs} +6 -6
- package/dist/{chunk-RZNQGEGJ.cjs.map → chunk-25KH5XKG.cjs.map} +1 -1
- package/dist/{chunk-A3WMLVJC.cjs → chunk-2TRT7RSV.cjs} +5 -7
- package/dist/chunk-2TRT7RSV.cjs.map +1 -0
- package/dist/{chunk-K3TE7625.js → chunk-3JXIMUUY.js} +2 -2
- package/dist/{chunk-UWPKFJYM.js → chunk-45S6S5WI.js} +13 -11
- package/dist/chunk-45S6S5WI.js.map +1 -0
- package/dist/{chunk-TWEO5XVM.cjs → chunk-5S55CTNM.cjs} +18 -20
- package/dist/chunk-5S55CTNM.cjs.map +1 -0
- package/dist/{chunk-JW62DVIC.js → chunk-5UQIUMSF.js} +3 -5
- package/dist/{chunk-JW62DVIC.js.map → chunk-5UQIUMSF.js.map} +1 -1
- package/dist/{chunk-ZWQBAJ5O.js → chunk-6NNPSP3O.js} +2 -2
- package/dist/{chunk-IUCLCPVV.js → chunk-76NTQYJB.js} +3 -3
- package/dist/{chunk-7Y263YIW.js → chunk-7AJ2V7RN.js} +5 -7
- package/dist/{chunk-7Y263YIW.js.map → chunk-7AJ2V7RN.js.map} +1 -1
- package/dist/{chunk-5ZOLHQXO.js → chunk-7UBN3SJI.js} +7 -9
- package/dist/{chunk-5ZOLHQXO.js.map → chunk-7UBN3SJI.js.map} +1 -1
- package/dist/{chunk-MZ5UWGXS.js → chunk-AEQ76QIO.js} +33 -5
- package/dist/chunk-AEQ76QIO.js.map +1 -0
- package/dist/{chunk-UBP5CHU7.js → chunk-AX3NM2DK.js} +5 -7
- package/dist/{chunk-UBP5CHU7.js.map → chunk-AX3NM2DK.js.map} +1 -1
- package/dist/{chunk-55XZZRKO.js → chunk-D45QSOR4.js} +4 -6
- package/dist/{chunk-55XZZRKO.js.map → chunk-D45QSOR4.js.map} +1 -1
- package/dist/{chunk-MICRSJ6R.js → chunk-EKLTJ65H.js} +2 -2
- package/dist/{chunk-RBAY4MO2.js → chunk-FG7K3EF7.js} +6 -8
- package/dist/{chunk-RBAY4MO2.js.map → chunk-FG7K3EF7.js.map} +1 -1
- package/dist/{chunk-PKYET77D.cjs → chunk-JK6KPDVW.cjs} +39 -41
- package/dist/chunk-JK6KPDVW.cjs.map +1 -0
- package/dist/{chunk-2E5EWEDG.cjs → chunk-KQTZUIMI.cjs} +10 -12
- package/dist/chunk-KQTZUIMI.cjs.map +1 -0
- package/dist/{chunk-ZLKYXRNM.js → chunk-KTKZCLYB.js} +3 -5
- package/dist/{chunk-ZLKYXRNM.js.map → chunk-KTKZCLYB.js.map} +1 -1
- package/dist/{chunk-RHY7Y43E.js → chunk-L74ASQWF.js} +8 -9
- package/dist/chunk-L74ASQWF.js.map +1 -0
- package/dist/{chunk-S7PWSJNP.cjs → chunk-LQM754U3.cjs} +5 -5
- package/dist/{chunk-S7PWSJNP.cjs.map → chunk-LQM754U3.cjs.map} +1 -1
- package/dist/{chunk-GYLT23D3.js → chunk-NI3U6RZL.js} +5 -5
- package/dist/{chunk-5JXA7JPS.js → chunk-NRYDUATX.js} +2 -2
- package/dist/{chunk-A3PF2SPD.cjs → chunk-NWWTBPYG.cjs} +5 -5
- package/dist/{chunk-A3PF2SPD.cjs.map → chunk-NWWTBPYG.cjs.map} +1 -1
- package/dist/{chunk-5RKN46UU.cjs → chunk-NXMTTQQK.cjs} +15 -15
- package/dist/{chunk-5RKN46UU.cjs.map → chunk-NXMTTQQK.cjs.map} +1 -1
- package/dist/{chunk-IF7LMBXC.js → chunk-PHVKSATD.js} +60 -16
- package/dist/chunk-PHVKSATD.js.map +1 -0
- package/dist/{chunk-RYXL25AI.js → chunk-PS3EAUMK.js} +2 -2
- package/dist/{chunk-ULJTQSLE.cjs → chunk-R7NVBTPK.cjs} +3 -3
- package/dist/{chunk-ULJTQSLE.cjs.map → chunk-R7NVBTPK.cjs.map} +1 -1
- package/dist/{chunk-YZP55W7S.cjs → chunk-RJCDBVZ6.cjs} +3 -3
- package/dist/{chunk-YZP55W7S.cjs.map → chunk-RJCDBVZ6.cjs.map} +1 -1
- package/dist/{chunk-LXHW6OT4.cjs → chunk-T26WN7TD.cjs} +19 -17
- package/dist/chunk-T26WN7TD.cjs.map +1 -0
- package/dist/{chunk-ZTWLCHCO.cjs → chunk-UKRJR66Y.cjs} +24 -26
- package/dist/chunk-UKRJR66Y.cjs.map +1 -0
- package/dist/{chunk-MWAHO47B.cjs → chunk-UMTUXOKE.cjs} +25 -27
- package/dist/chunk-UMTUXOKE.cjs.map +1 -0
- package/dist/{chunk-JSP7ZROS.cjs → chunk-V4A6MJ42.cjs} +36 -8
- package/dist/chunk-V4A6MJ42.cjs.map +1 -0
- package/dist/{chunk-BVZ7H2F5.cjs → chunk-VYOJJECB.cjs} +55 -56
- package/dist/chunk-VYOJJECB.cjs.map +1 -0
- package/dist/{chunk-ZLQ2IBTC.cjs → chunk-WRRIPTJP.cjs} +12 -12
- package/dist/{chunk-ZLQ2IBTC.cjs.map → chunk-WRRIPTJP.cjs.map} +1 -1
- package/dist/{chunk-QIZO3A4Y.cjs → chunk-ZIXZWQSP.cjs} +85 -41
- package/dist/chunk-ZIXZWQSP.cjs.map +1 -0
- package/dist/{chunk-RQRI6RCG.cjs → chunk-ZXPTDLXJ.cjs} +12 -14
- package/dist/chunk-ZXPTDLXJ.cjs.map +1 -0
- package/dist/collaboration/index.cjs +3 -3
- package/dist/collaboration/index.d.cts +2 -2
- package/dist/collaboration/index.d.ts +2 -2
- package/dist/collaboration/index.js +2 -2
- package/dist/controlplane/index.cjs +7 -8
- package/dist/controlplane/index.cjs.map +1 -1
- package/dist/controlplane/index.js +6 -7
- package/dist/{errors-D9OtcR-o.d.cts → errors-BGfCbCgs.d.cts} +4 -1
- package/dist/{errors-BjGO6N10.d.ts → errors-D_809AqR.d.ts} +4 -1
- package/dist/{google-adk-model-N47R7GB2.js → google-adk-model-V7SC6RQD.js} +3 -3
- package/dist/{google-adk-model-PDBKY5YZ.cjs → google-adk-model-WYWEQI4R.cjs} +13 -13
- package/dist/{google-adk-model-PDBKY5YZ.cjs.map → google-adk-model-WYWEQI4R.cjs.map} +1 -1
- package/dist/index.cjs +33 -35
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +15 -17
- package/dist/index.js.map +1 -1
- package/dist/integrations/ai-sdk.cjs +3 -3
- package/dist/integrations/ai-sdk.js +2 -2
- package/dist/integrations/google-adk.cjs +14 -15
- package/dist/integrations/google-adk.cjs.map +1 -1
- package/dist/integrations/google-adk.js +10 -11
- package/dist/integrations/google-adk.js.map +1 -1
- package/dist/integrations/langchain.cjs +18 -19
- package/dist/integrations/langchain.cjs.map +1 -1
- package/dist/integrations/langchain.d.cts +3 -2
- package/dist/integrations/langchain.d.ts +3 -2
- package/dist/integrations/langchain.js +11 -12
- package/dist/integrations/langchain.js.map +1 -1
- package/dist/integrations/langgraph.cjs +10 -11
- package/dist/integrations/langgraph.cjs.map +1 -1
- package/dist/integrations/langgraph.d.cts +3 -2
- package/dist/integrations/langgraph.d.ts +3 -2
- package/dist/integrations/langgraph.js +9 -10
- package/dist/integrations/mastra.cjs +14 -15
- package/dist/integrations/mastra.cjs.map +1 -1
- package/dist/integrations/mastra.js +8 -9
- package/dist/integrations/mastra.js.map +1 -1
- package/dist/{langchain-adapter-DJsyjm5V.d.ts → langchain-adapter-CaTCXaeo.d.ts} +4 -2
- package/dist/{langchain-adapter-DFJdEX04.d.cts → langchain-adapter-DtxU7oAi.d.cts} +4 -2
- package/dist/{langchain-provider-PHL4UWNF.js → langchain-provider-JFWLKOGL.js} +26 -2
- package/dist/langchain-provider-JFWLKOGL.js.map +1 -0
- package/dist/{langchain-provider-NF5GIDQV.cjs → langchain-provider-UKO27CQA.cjs} +38 -14
- package/dist/langchain-provider-UKO27CQA.cjs.map +1 -0
- package/dist/mcp/index.cjs +3 -4
- package/dist/mcp/index.cjs.map +1 -1
- package/dist/mcp/index.js +2 -3
- package/dist/memory/index.cjs +6 -7
- package/dist/memory/index.cjs.map +1 -1
- package/dist/memory/index.d.cts +24 -2
- package/dist/memory/index.d.ts +24 -2
- package/dist/memory/index.js +5 -6
- package/dist/model/index.cjs +4 -5
- package/dist/model/index.cjs.map +1 -1
- package/dist/model/index.js +3 -4
- package/dist/runtime/index.cjs +7 -8
- package/dist/runtime/index.cjs.map +1 -1
- package/dist/runtime/index.js +6 -7
- package/dist/server/index.cjs +13 -15
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.js +5 -7
- package/dist/server/index.js.map +1 -1
- package/dist/skill/index.cjs +4 -5
- package/dist/skill/index.cjs.map +1 -1
- package/dist/skill/index.js +3 -4
- package/package.json +1 -1
- package/dist/chunk-2E5EWEDG.cjs.map +0 -1
- package/dist/chunk-A3WMLVJC.cjs.map +0 -1
- package/dist/chunk-BVZ7H2F5.cjs.map +0 -1
- package/dist/chunk-IF7LMBXC.js.map +0 -1
- package/dist/chunk-JSP7ZROS.cjs.map +0 -1
- package/dist/chunk-LE5P3SJW.cjs +0 -16
- package/dist/chunk-LE5P3SJW.cjs.map +0 -1
- package/dist/chunk-LXHW6OT4.cjs.map +0 -1
- package/dist/chunk-MWAHO47B.cjs.map +0 -1
- package/dist/chunk-MZ5UWGXS.js.map +0 -1
- package/dist/chunk-NZL3VPJ2.js +0 -16
- package/dist/chunk-NZL3VPJ2.js.map +0 -1
- package/dist/chunk-PKYET77D.cjs.map +0 -1
- package/dist/chunk-QIZO3A4Y.cjs.map +0 -1
- package/dist/chunk-RHY7Y43E.js.map +0 -1
- package/dist/chunk-RQRI6RCG.cjs.map +0 -1
- package/dist/chunk-TWEO5XVM.cjs.map +0 -1
- package/dist/chunk-UWPKFJYM.js.map +0 -1
- package/dist/chunk-ZTWLCHCO.cjs.map +0 -1
- package/dist/langchain-provider-NF5GIDQV.cjs.map +0 -1
- package/dist/langchain-provider-PHL4UWNF.js.map +0 -1
- /package/dist/{chunk-K3TE7625.js.map → chunk-3JXIMUUY.js.map} +0 -0
- /package/dist/{chunk-ZWQBAJ5O.js.map → chunk-6NNPSP3O.js.map} +0 -0
- /package/dist/{chunk-IUCLCPVV.js.map → chunk-76NTQYJB.js.map} +0 -0
- /package/dist/{chunk-MICRSJ6R.js.map → chunk-EKLTJ65H.js.map} +0 -0
- /package/dist/{chunk-GYLT23D3.js.map → chunk-NI3U6RZL.js.map} +0 -0
- /package/dist/{chunk-5JXA7JPS.js.map → chunk-NRYDUATX.js.map} +0 -0
- /package/dist/{chunk-RYXL25AI.js.map → chunk-PS3EAUMK.js.map} +0 -0
- /package/dist/{google-adk-model-N47R7GB2.js.map → google-adk-model-V7SC6RQD.js.map} +0 -0
|
@@ -3,10 +3,8 @@
|
|
|
3
3
|
var _chunkEGUKJE3Zcjs = require('./chunk-EGUKJE3Z.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var _chunkLE5P3SJWcjs = require('./chunk-LE5P3SJW.cjs');
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
var _chunkJSP7ZROScjs = require('./chunk-JSP7ZROS.cjs');
|
|
7
|
+
var _chunkV4A6MJ42cjs = require('./chunk-V4A6MJ42.cjs');
|
|
10
8
|
|
|
11
9
|
// src/mcp/client.ts
|
|
12
10
|
var _indexjs = require('@modelcontextprotocol/sdk/client/index.js');
|
|
@@ -32,15 +30,15 @@ var transportHeaders = /* @__PURE__ */ new Set([
|
|
|
32
30
|
function mergeMCPHeaders(base, custom) {
|
|
33
31
|
const result = { ...base };
|
|
34
32
|
if (custom === void 0) return result;
|
|
35
|
-
if (!custom || typeof custom !== "object" || Array.isArray(custom)) throw new (0,
|
|
33
|
+
if (!custom || typeof custom !== "object" || Array.isArray(custom)) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("MCP headers must be an object");
|
|
36
34
|
const protectedNames = /* @__PURE__ */ new Set([...Object.keys(base).map((name) => name.toLowerCase()), ...transportHeaders, "authorization"]);
|
|
37
35
|
const seen = /* @__PURE__ */ new Set();
|
|
38
36
|
for (const [name, value] of Object.entries(custom)) {
|
|
39
|
-
if (!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) throw new (0,
|
|
40
|
-
if (typeof value !== "string" || /[\x00-\x1f\x7f]/.test(value)) throw new (0,
|
|
37
|
+
if (!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("Invalid MCP header name");
|
|
38
|
+
if (typeof value !== "string" || /[\x00-\x1f\x7f]/.test(value)) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("MCP header values must be strings without control characters");
|
|
41
39
|
const folded = name.toLowerCase();
|
|
42
|
-
if (protectedNames.has(folded)) throw new (0,
|
|
43
|
-
if (seen.has(folded)) throw new (0,
|
|
40
|
+
if (protectedNames.has(folded)) throw new (0, _chunkV4A6MJ42cjs.ConfigError)(`MCP header is protected: ${folded}`);
|
|
41
|
+
if (seen.has(folded)) throw new (0, _chunkV4A6MJ42cjs.ConfigError)(`Duplicate MCP header: ${folded}`);
|
|
44
42
|
seen.add(folded);
|
|
45
43
|
Object.defineProperty(result, folded, { value, enumerable: true, configurable: true, writable: true });
|
|
46
44
|
}
|
|
@@ -56,18 +54,18 @@ var MCPClient = (_class = class _MCPClient {
|
|
|
56
54
|
constructor(options, descriptor) {;_class.prototype.__init.call(this);
|
|
57
55
|
this.options = options;
|
|
58
56
|
this.descriptor = descriptor;
|
|
59
|
-
this.logger = _nullishCoalesce(options.logger, () => (
|
|
57
|
+
this.logger = _nullishCoalesce(options.logger, () => ( _chunkV4A6MJ42cjs.nullLogger));
|
|
60
58
|
this.timeouts = { sessionMs: _nullishCoalesce(options.sessionMs, () => ( 3e4)), metadataMs: _nullishCoalesce(options.metadataMs, () => ( 6e4)), toolMs: _nullishCoalesce(options.toolMs, () => ( 6e5)) };
|
|
61
|
-
if (Object.values(this.timeouts).some((timeout) => !Number.isFinite(timeout) || timeout <= 0)) throw new (0,
|
|
59
|
+
if (Object.values(this.timeouts).some((timeout) => !Number.isFinite(timeout) || timeout <= 0)) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("MCP operation timeouts must be positive");
|
|
62
60
|
if (options.transport !== "stdio") {
|
|
63
61
|
let url;
|
|
64
62
|
try {
|
|
65
63
|
url = new URL(options.url);
|
|
66
64
|
} catch (e) {
|
|
67
|
-
throw new (0,
|
|
65
|
+
throw new (0, _chunkV4A6MJ42cjs.ConfigError)("Direct MCP URL must be HTTP(S)");
|
|
68
66
|
}
|
|
69
|
-
if (!["http:", "https:"].includes(url.protocol)) throw new (0,
|
|
70
|
-
if (options.transport !== void 0 && !["streamable-http", "sse"].includes(options.transport)) throw new (0,
|
|
67
|
+
if (!["http:", "https:"].includes(url.protocol)) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("Direct MCP URL must be HTTP(S)");
|
|
68
|
+
if (options.transport !== void 0 && !["streamable-http", "sse"].includes(options.transport)) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("MCP transport must be streamable-http, sse, or stdio");
|
|
71
69
|
}
|
|
72
70
|
this.logger.info("agentcore.mcp.client.created", { mode: descriptor ? "managed" : "direct", transport: _nullishCoalesce(options.transport, () => ( "streamable-http")), url: this.safeURL });
|
|
73
71
|
}
|
|
@@ -235,4 +233,4 @@ var MCPClient = (_class = class _MCPClient {
|
|
|
235
233
|
|
|
236
234
|
|
|
237
235
|
exports.mergeMCPHeaders = mergeMCPHeaders; exports.mcpServerURL = mcpServerURL; exports.MCPClient = MCPClient;
|
|
238
|
-
//# sourceMappingURL=chunk-
|
|
236
|
+
//# sourceMappingURL=chunk-ZXPTDLXJ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/agentcore-sdk-nodejs/agentcore-sdk-nodejs/dist/chunk-ZXPTDLXJ.cjs","../src/mcp/client.ts","../src/mcp/headers.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACA;ACRA,oEAAuB;AACvB,sFAA8C;AAC9C,gEAAmC;AACnC,oEAAiE;AAEjE,6DAA+E;AAC/E,4BAAwB;ADSxB;AACA;AEdA,IAAM,iBAAA,kBAAmB,IAAI,GAAA,CAAI;AAAA,EAC/B,MAAA;AAAA,EAAQ,gBAAA;AAAA,EAAkB,YAAA;AAAA,EAAc,mBAAA;AAAA,EAAqB,SAAA;AAAA,EAC7D,gBAAA;AAAA,EAAkB,sBAAA;AAAA,EAAwB,eAAA;AAAA,EAAiB,cAAA;AAAA,EAAgB;AAC7E,CAAC,CAAA;AAGM,SAAS,eAAA,CAAgB,IAAA,EAAwC,MAAA,EAAmE;AACzI,EAAA,MAAM,OAAA,EAAS,EAAE,GAAG,KAAK,CAAA;AACzB,EAAA,GAAA,CAAI,OAAA,IAAW,KAAA,CAAA,EAAW,OAAO,MAAA;AACjC,EAAA,GAAA,CAAI,CAAC,OAAA,GAAU,OAAO,OAAA,IAAW,SAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG,MAAM,IAAI,kCAAA,CAAY,+BAA+B,CAAA;AACzH,EAAA,MAAM,eAAA,kBAAiB,IAAI,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,EAAA,GAAS,IAAA,CAAK,WAAA,CAAY,CAAC,CAAA,EAAG,GAAG,gBAAA,EAAkB,eAAe,CAAC,CAAA;AAC7H,EAAA,MAAM,KAAA,kBAAO,IAAI,GAAA,CAAY,CAAA;AAC7B,EAAA,IAAA,CAAA,MAAW,CAAC,IAAA,EAAM,KAAK,EAAA,GAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClD,IAAA,GAAA,CAAI,CAAC,+BAAA,CAAgC,IAAA,CAAK,IAAI,CAAA,EAAG,MAAM,IAAI,kCAAA,CAAY,yBAAyB,CAAA;AAChG,IAAA,GAAA,CAAI,OAAO,MAAA,IAAU,SAAA,GAAY,iBAAA,CAAkB,IAAA,CAAK,KAAK,CAAA,EAAG,MAAM,IAAI,kCAAA,CAAY,8DAA8D,CAAA;AACpJ,IAAA,MAAM,OAAA,EAAS,IAAA,CAAK,WAAA,CAAY,CAAA;AAChC,IAAA,GAAA,CAAI,cAAA,CAAe,GAAA,CAAI,MAAM,CAAA,EAAG,MAAM,IAAI,kCAAA,CAAY,CAAA,yBAAA,EAA4B,MAAM,CAAA,CAAA;AACX,IAAA;AAC9D,IAAA;AACsE,IAAA;AACvF,EAAA;AACO,EAAA;AACT;AFsB6F;AACA;AClBxB;AACgB,EAAA;AAC5B,EAAA;AACzD;AAEuB;AASuE,EAAA;AAAvD,IAAA;AACjB,IAAA;AACc,IAAA;AAC4D,IAAA;AACZ,IAAA;AAC7C,IAAA;AAC7B,MAAA;AACA,MAAA;AAA2B,QAAA;AAAW,MAAA;AAAwD,QAAA;AAAG,MAAA;AAC9B,MAAA;AACa,MAAA;AACtF,IAAA;AACkF,IAAA;AACpF,EAAA;AAZqC,EAAA;AAR5B,EAAA;AACQ,EAAA;AACT,EAAA;AACA,EAAA;AACS,iBAAA;AACT,EAAA;AACS,EAAA;AAiBE,EAAA;AAC4D,IAAA;AAC7B,IAAA;AACa,IAAA;AACwB,IAAA;AAC5C,MAAA;AAC+C,MAAA;AAC3C,MAAA;AAC9B,IAAA;AACjB,EAAA;AACoD,EAAA;AAA8B,IAAA;AAAG,EAAA;AAEtB,EAAA;AACJ,IAAA;AACiB,MAAA;AACpE,MAAA;AACyD,MAAA;AACyB,MAAA;AACnF,MAAA;AACgF,QAAA;AACjD,QAAA;AAAmB,QAAA;AAC5C,MAAA;AACuC,MAAA;AAAmB,QAAA;AAA6C,QAAA;AAA2B,QAAA;AACxE,QAAA;AACjE,MAAA;AACH,IAAA;AACH,EAAA;AAC2D,EAAA;AAA+B,IAAA;AAAG,EAAA;AACkB,EAAA;AAC5C,IAAA;AAAuC,MAAA;AAAG,MAAA;AACjD,MAAA;AAA6B,IAAA;AACzF,EAAA;AAEuB,EAAA;AACS,IAAA;AAChB,IAAA;AACc,IAAA;AAC6B,MAAA;AACd,MAAA;AACG,MAAA;AAC3C,IAAA;AACS,IAAA;AACd,EAAA;AAC2B,EAAA;AAAsC,IAAA;AAAiB,EAAA;AACjE,EAAA;AAA8B,IAAA;AAAG,EAAA;AAEpB,EAAA;AACmB,IAAA;AACX,IAAA;AAAsC,IAAA;AAC5E,EAAA;AAC0C,EAAA;AAC/B,IAAA;AACgD,MAAA;AACzB,MAAA;AACL,MAAA;AAA8B,QAAA;AAAG,QAAA;AAAU,MAAA;AACxC,MAAA;AACF,MAAA;AAAkB,MAAA;AACxC,MAAA;AAAe,QAAA;AAAW,MAAA;AAAyB,QAAA;AAAW,MAAA;AACpE,IAAA;AACF,EAAA;AACuC,EAAA;AACgC,IAAA;AACnC,IAAA;AAC9B,IAAA;AAC8E,IAAA;AAC7E,IAAA;AACwD,MAAA;AACoD,MAAA;AAEvE,MAAA;AAE1C,IAAA;AACiF,IAAA;AACpE,IAAA;AACwE,IAAA;AAC9D,IAAA;AAAoB,MAAA;AAAM,IAAA;AACrB,IAAA;AACU,MAAA;AAClB,MAAA;AACoE,MAAA;AACxF,IAAA;AACuF,IAAA;AACnF,IAAA;AAC6E,MAAA;AACnD,MAAA;AAC2B,MAAA;AACuB,MAAA;AACvE,MAAA;AACO,IAAA;AAA2B,MAAA;AAAS,MAAA;AACpD,IAAA;AAA4B,MAAA;AAAG,IAAA;AACjC,EAAA;AAEoG,EAAA;AAC/D,IAAA;AACoB,IAAA;AAC3B,IAAA;AAA6B,IAAA;AACyB,IAAA;AAC9E,IAAA;AAAuB,MAAA;AAA6F,MAAA;AAAU,MAAA;AACpH,IAAA;AAC+D,MAAA;AACM,MAAA;AAC3E,MAAA;AACN,IAAA;AAAuC,MAAA;AAAG,IAAA;AAC9C,EAAA;AACgD,EAAA;AACV,IAAA;AAClB,IAAA;AACa,IAAA;AACe,MAAA;AACxB,MAAA;AAChB,MAAA;AAA6B,QAAA;AACnB,MAAA;AAAuF,QAAA;AAAsD,MAAA;AAClH,MAAA;AACxC,IAAA;AACY,IAAA;AACjB,EAAA;AACF;ADuD6F;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/agentcore-sdk-nodejs/agentcore-sdk-nodejs/dist/chunk-ZXPTDLXJ.cjs","sourcesContent":[null,"import { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';\nimport { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';\nimport { StdioClientTransport, type StdioServerParameters } from '@modelcontextprotocol/sdk/client/stdio.js';\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { CallToolResultSchema, McpError, ErrorCode, type CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport { inspect } from 'node:util';\nimport { ConfigError } from '../errors';\nimport { nullLogger, type Logger } from '../logging';\nimport type { MCPDescriptor } from '../controlplane/client';\nimport type { AgentConfig } from '../runtime/config';\nimport type { HeadersProvider } from '../model/client';\nimport { Tool, type ToolArguments } from '../integrations/common';\nimport { mergeMCPHeaders } from './headers';\n\nexport interface MCPTimeouts { sessionMs?: number; metadataMs?: number; toolMs?: number; }\nexport interface ManagedMCPOptions extends MCPTimeouts { headers?: Readonly<Record<string, string>>; credentialName?: string; }\nexport type DirectMCPOptions = ({ url: string; transport?: 'streamable-http' | 'sse'; headersProvider?: HeadersProvider } |\n { transport: 'stdio'; server: StdioServerParameters }) & MCPTimeouts & { logger?: Logger };\nexport interface MCPCallOptions { signal?: AbortSignal; }\ninterface Session {\n client: Client;\n transport: Transport;\n abort: AbortController;\n invalid: boolean;\n active: Set<Promise<unknown>>;\n closing?: Promise<void>;\n}\n\nexport function mcpServerURL(gatewayURL: string, id: string): string {\n const gateway = gatewayURL.replace(/\\/+$/, '').replace(/\\/(?:mcp|mcp-servers)$/, '');\n return `${gateway}/mcp-servers/${encodeURIComponent(id)}`;\n}\n\nexport class MCPClient {\n readonly descriptor?: MCPDescriptor;\n private readonly logger: Logger;\n private state?: Session;\n private opening?: Promise<Session>;\n private closed = false;\n private closing?: Promise<void>;\n private readonly timeouts: Required<MCPTimeouts>;\n\n private constructor(private readonly options: DirectMCPOptions, descriptor?: MCPDescriptor) {\n this.descriptor = descriptor;\n this.logger = options.logger ?? nullLogger;\n this.timeouts = { sessionMs: options.sessionMs ?? 30_000, metadataMs: options.metadataMs ?? 60_000, toolMs: options.toolMs ?? 600_000 };\n if (Object.values(this.timeouts).some((timeout) => !Number.isFinite(timeout) || timeout <= 0)) throw new ConfigError('MCP operation timeouts must be positive');\n if (options.transport !== 'stdio') {\n let url: URL;\n try { url = new URL(options.url); } catch { throw new ConfigError('Direct MCP URL must be HTTP(S)'); }\n if (!['http:', 'https:'].includes(url.protocol)) throw new ConfigError('Direct MCP URL must be HTTP(S)');\n if (options.transport !== undefined && !['streamable-http', 'sse'].includes(options.transport)) throw new ConfigError('MCP transport must be streamable-http, sse, or stdio');\n }\n this.logger.info('agentcore.mcp.client.created', { mode: descriptor ? 'managed' : 'direct', transport: options.transport ?? 'streamable-http', url: this.safeURL });\n }\n static platform(config: AgentConfig, descriptor: MCPDescriptor, options: Omit<ManagedMCPOptions, 'credentialName'> & {\n logger?: Logger; credentialHeadersProvider?: () => Promise<Record<string, string>>;\n } = {}): MCPClient {\n const { headers: custom, credentialHeadersProvider, ...connectionOptions } = options;\n const customHeaders = mergeMCPHeaders({}, custom);\n const headers = mergeMCPHeaders(config.gatewayHeaders, custom);\n return new MCPClient({ ...connectionOptions, url: mcpServerURL(config.mcpGatewayUrl, descriptor.mcpServerId), transport: 'streamable-http', headersProvider: async () => {\n if (!credentialHeadersProvider) return headers;\n const bound = mergeMCPHeaders(config.gatewayHeaders, await credentialHeadersProvider());\n return mergeMCPHeaders(bound, customHeaders);\n } }, descriptor);\n }\n static direct(options: DirectMCPOptions): MCPClient { return new MCPClient(options); }\n\n async listTools(options: MCPCallOptions = {}): Promise<Tool[]> {\n return this.withSession('list_tools', async (session) => {\n const definitions: Awaited<ReturnType<Client['listTools']>>['tools'] = [];\n let cursor: string | undefined;\n const deadline = AbortSignal.timeout(this.timeouts.metadataMs);\n const signal = AbortSignal.any([deadline, ...(options.signal ? [options.signal] : [])]);\n do {\n const result = await session.client.listTools(cursor ? { cursor } : undefined, { signal, timeout: this.timeouts.metadataMs });\n definitions.push(...result.tools); cursor = result.nextCursor;\n } while (cursor);\n return definitions.map((definition) => new Tool({ name: definition.name, description: definition.description ?? '', parameters: definition.inputSchema,\n invoke: (arguments_) => this.callTool(definition.name, arguments_),\n }));\n });\n }\n async tools(options: MCPCallOptions = {}): Promise<Tool[]> { return this.listTools(options); }\n async callTool(name: string, arguments_: ToolArguments, options: MCPCallOptions = {}): Promise<CallToolResult> {\n return this.withSession('call_tool', (session) => session.client.callTool({ name, arguments: arguments_ }, CallToolResultSchema,\n { timeout: this.timeouts.toolMs, signal: options.signal }) as Promise<CallToolResult>);\n }\n\n close(): Promise<void> {\n if (this.closing) return this.closing;\n this.closed = true;\n this.closing = (async () => {\n if (this.opening && this.state) this.state.abort.abort();\n await this.opening?.catch(() => undefined);\n if (this.state) await this.retire(this.state);\n })();\n return this.closing;\n }\n [inspect.custom](): string { return `MCPClient(url=${this.safeURL}, <redacted>)`; }\n toJSON(): string { return this[inspect.custom](); }\n\n private get safeURL(): string {\n if (this.options.transport === 'stdio') return 'stdio';\n const url = new URL(this.options.url); return `${url.origin}${url.pathname}`;\n }\n private async acquire(): Promise<Session> {\n for (;;) {\n if (this.closed) throw new Error('MCP client is closed');\n if (this.opening) return this.opening;\n if (this.state?.invalid) { await this.retire(this.state); continue; }\n if (this.state) return this.state;\n const request = this.open(); this.opening = request;\n try { return await request; } finally { this.opening = undefined; }\n }\n }\n private async open(): Promise<Session> {\n const client = new Client({ name: 'agentcore-sdk', version: '0.1.0' });\n const abort = new AbortController();\n let transport: Transport;\n if (this.options.transport === 'stdio') transport = new StdioClientTransport(this.options.server);\n else {\n const headers = await this.options.headersProvider?.() ?? {};\n const fetch: typeof globalThis.fetch = (input, init) => globalThis.fetch(input, { ...init, redirect: 'manual', signal: AbortSignal.any([abort.signal, ...(init?.signal ? [init.signal] : [])]) });\n transport = this.options.transport === 'sse'\n ? new SSEClientTransport(new URL(this.options.url), { requestInit: { headers }, fetch })\n : new StreamableHTTPClientTransport(new URL(this.options.url), { requestInit: { headers }, fetch });\n }\n const session: Session = { client, transport, abort, invalid: false, active: new Set() };\n this.state = session;\n const timer = setTimeout(() => abort.abort(new Error('MCP session open timed out')), this.timeouts.sessionMs);\n client.onclose = () => { session.invalid = true; };\n client.onerror = (error) => {\n if (this.closed || session.closing) return;\n session.invalid = true;\n this.logger.warn('agentcore.mcp.session.error', { url: this.safeURL, errorType: error.name });\n };\n this.logger.info('agentcore.mcp.session.open.started', { url: this.safeURL, timeoutMs: this.timeouts.sessionMs });\n try {\n await client.connect(transport, { signal: abort.signal, timeout: this.timeouts.sessionMs });\n abort.signal.throwIfAborted();\n if (this.closed) throw new Error('MCP client is closed');\n this.logger.info('agentcore.mcp.session.open.succeeded', { url: this.safeURL });\n return session;\n } catch (error) { await this.retire(session); throw error; }\n finally { clearTimeout(timer); }\n }\n\n private async withSession<T>(operation: string, call: (session: Session) => Promise<T>): Promise<T> {\n const session = await this.acquire();\n if (this.closed) throw new Error('MCP client is closed');\n const request = call(session); session.active.add(request);\n this.logger.info('agentcore.mcp.request.started', { operation, url: this.safeURL });\n try { const result = await request; this.logger.info('agentcore.mcp.request.succeeded', { operation, url: this.safeURL }); return result; }\n catch (error) {\n if (!(error instanceof McpError) || [ErrorCode.ConnectionClosed, ErrorCode.RequestTimeout].includes(error.code)) session.invalid = true;\n this.logger.warn('agentcore.mcp.request.failed', { operation, url: this.safeURL, errorType: error instanceof Error ? error.name : 'unknown' });\n throw error;\n } finally { session.active.delete(request); }\n }\n private retire(session: Session): Promise<void> {\n if (session.closing) return session.closing;\n session.invalid = true;\n session.closing = (async () => {\n await Promise.allSettled([...session.active]);\n session.abort.abort();\n try { await session.client.close(); }\n catch (error) { this.logger.warn('agentcore.mcp.session.close.failed', { errorType: error instanceof Error ? error.name : 'unknown', url: this.safeURL }); }\n if (this.state === session) this.state = undefined;\n })();\n return session.closing;\n }\n}\n","import { ConfigError } from '../errors';\n\nconst transportHeaders = new Set([\n 'host', 'content-length', 'connection', 'transfer-encoding', 'upgrade',\n 'mcp-session-id', 'mcp-protocol-version', 'last-event-id', 'content-type', 'accept',\n]);\n\n/** Copy fixed headers, rejecting case-insensitive credential/transport conflicts. */\nexport function mergeMCPHeaders(base: Readonly<Record<string, string>>, custom?: Readonly<Record<string, string>>): Record<string, string> {\n const result = { ...base };\n if (custom === undefined) return result;\n if (!custom || typeof custom !== 'object' || Array.isArray(custom)) throw new ConfigError('MCP headers must be an object');\n const protectedNames = new Set([...Object.keys(base).map((name) => name.toLowerCase()), ...transportHeaders, 'authorization']);\n const seen = new Set<string>();\n for (const [name, value] of Object.entries(custom)) {\n if (!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) throw new ConfigError('Invalid MCP header name');\n if (typeof value !== 'string' || /[\\x00-\\x1f\\x7f]/.test(value)) throw new ConfigError('MCP header values must be strings without control characters');\n const folded = name.toLowerCase();\n if (protectedNames.has(folded)) throw new ConfigError(`MCP header is protected: ${folded}`);\n if (seen.has(folded)) throw new ConfigError(`Duplicate MCP header: ${folded}`);\n seen.add(folded);\n Object.defineProperty(result, folded, { value, enumerable: true, configurable: true, writable: true });\n }\n return result;\n}\n"]}
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
var
|
|
22
|
-
require('../chunk-
|
|
21
|
+
var _chunkNWWTBPYGcjs = require('../chunk-NWWTBPYG.cjs');
|
|
22
|
+
require('../chunk-V4A6MJ42.cjs');
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
|
|
@@ -40,5 +40,5 @@ require('../chunk-JSP7ZROS.cjs');
|
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
exports.CollaborationConfigError =
|
|
43
|
+
exports.CollaborationConfigError = _chunkNWWTBPYGcjs.CollaborationConfigError; exports.CollaborationContextError = _chunkNWWTBPYGcjs.CollaborationContextError; exports.CollaborationContextRequiredError = _chunkNWWTBPYGcjs.CollaborationContextRequiredError; exports.CollaborationDisabledError = _chunkNWWTBPYGcjs.CollaborationDisabledError; exports.CollaborationError = _chunkNWWTBPYGcjs.CollaborationError; exports.CollaborationFileTooLargeError = _chunkNWWTBPYGcjs.CollaborationFileTooLargeError; exports.CollaborationRoleUnsupportedError = _chunkNWWTBPYGcjs.CollaborationRoleUnsupportedError; exports.CollaborationTaskConflictError = _chunkNWWTBPYGcjs.CollaborationTaskConflictError; exports.CollaborationTaskInvalidError = _chunkNWWTBPYGcjs.CollaborationTaskInvalidError; exports.CollaborationTaskNotFoundError = _chunkNWWTBPYGcjs.CollaborationTaskNotFoundError; exports.CollaborationTaskUnauthorizedError = _chunkNWWTBPYGcjs.CollaborationTaskUnauthorizedError; exports.CollaborationTaskUnavailableError = _chunkNWWTBPYGcjs.CollaborationTaskUnavailableError; exports.CollaborationTeamUnavailableError = _chunkNWWTBPYGcjs.CollaborationTeamUnavailableError; exports.CollaborationToolArgumentError = _chunkNWWTBPYGcjs.CollaborationToolArgumentError; exports.CollaborationTurnContext = _chunkNWWTBPYGcjs.CollaborationTurnContext; exports.bindCollaborationContext = _chunkNWWTBPYGcjs.bindCollaborationContext; exports.currentCollaborationContext = _chunkNWWTBPYGcjs.currentCollaborationContext; exports.parseCollaborationContext = _chunkNWWTBPYGcjs.parseCollaborationContext; exports.useCollaborationContext = _chunkNWWTBPYGcjs.useCollaborationContext;
|
|
44
44
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { inspect } from 'node:util';
|
|
2
|
-
import { C as ConfigError, a as ContextError, A as AgentCoreError } from '../errors-
|
|
3
|
-
export { b as CollaborationOptions, c as CollaborationRuntime, W as Worker } from '../errors-
|
|
2
|
+
import { C as ConfigError, a as ContextError, A as AgentCoreError } from '../errors-BGfCbCgs.cjs';
|
|
3
|
+
export { b as CollaborationOptions, c as CollaborationRuntime, W as Worker } from '../errors-BGfCbCgs.cjs';
|
|
4
4
|
import '../common-BSXkQfxI.cjs';
|
|
5
5
|
import '../logging-C8GLLg1f.cjs';
|
|
6
6
|
import '../loader-eWuJ2GSL.cjs';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { inspect } from 'node:util';
|
|
2
|
-
import { C as ConfigError, a as ContextError, A as AgentCoreError } from '../errors-
|
|
3
|
-
export { b as CollaborationOptions, c as CollaborationRuntime, W as Worker } from '../errors-
|
|
2
|
+
import { C as ConfigError, a as ContextError, A as AgentCoreError } from '../errors-D_809AqR.js';
|
|
3
|
+
export { b as CollaborationOptions, c as CollaborationRuntime, W as Worker } from '../errors-D_809AqR.js';
|
|
4
4
|
import '../common-BSXkQfxI.js';
|
|
5
5
|
import '../logging-C8GLLg1f.js';
|
|
6
6
|
import '../loader-DrIQ37nm.js';
|
|
@@ -18,8 +18,8 @@ import {
|
|
|
18
18
|
currentCollaborationContext,
|
|
19
19
|
parseCollaborationContext,
|
|
20
20
|
useCollaborationContext
|
|
21
|
-
} from "../chunk-
|
|
22
|
-
import "../chunk-
|
|
21
|
+
} from "../chunk-PS3EAUMK.js";
|
|
22
|
+
import "../chunk-AEQ76QIO.js";
|
|
23
23
|
export {
|
|
24
24
|
CollaborationConfigError,
|
|
25
25
|
CollaborationContextError,
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
5
|
-
require('../chunk-
|
|
6
|
-
require('../chunk-
|
|
7
|
-
require('../chunk-
|
|
8
|
-
require('../chunk-
|
|
9
|
-
require('../chunk-JSP7ZROS.cjs');
|
|
3
|
+
var _chunkJK6KPDVWcjs = require('../chunk-JK6KPDVW.cjs');
|
|
4
|
+
require('../chunk-RJCDBVZ6.cjs');
|
|
5
|
+
require('../chunk-25KH5XKG.cjs');
|
|
6
|
+
require('../chunk-KQTZUIMI.cjs');
|
|
7
|
+
require('../chunk-NXMTTQQK.cjs');
|
|
8
|
+
require('../chunk-V4A6MJ42.cjs');
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
exports.AgentCoreControlPlane =
|
|
11
|
+
exports.AgentCoreControlPlane = _chunkJK6KPDVWcjs.AgentCoreControlPlane;
|
|
13
12
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/agentcore-sdk-nodejs/agentcore-sdk-nodejs/dist/controlplane/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/agentcore-sdk-nodejs/agentcore-sdk-nodejs/dist/controlplane/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACF,wEAAC","file":"/home/runner/work/agentcore-sdk-nodejs/agentcore-sdk-nodejs/dist/controlplane/index.cjs"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AgentCoreControlPlane
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
5
|
-
import "../chunk-
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
9
|
-
import "../chunk-MZ5UWGXS.js";
|
|
3
|
+
} from "../chunk-7UBN3SJI.js";
|
|
4
|
+
import "../chunk-NRYDUATX.js";
|
|
5
|
+
import "../chunk-76NTQYJB.js";
|
|
6
|
+
import "../chunk-AX3NM2DK.js";
|
|
7
|
+
import "../chunk-3JXIMUUY.js";
|
|
8
|
+
import "../chunk-AEQ76QIO.js";
|
|
10
9
|
export {
|
|
11
10
|
AgentCoreControlPlane
|
|
12
11
|
};
|
|
@@ -70,6 +70,7 @@ interface MemoryErrorDetails {
|
|
|
70
70
|
serviceCode?: string;
|
|
71
71
|
httpStatusCode?: number;
|
|
72
72
|
requestId?: string;
|
|
73
|
+
serviceMessage?: string;
|
|
73
74
|
}
|
|
74
75
|
declare class MemoryAPIError extends AgentCoreError {
|
|
75
76
|
readonly operation: string;
|
|
@@ -77,7 +78,9 @@ declare class MemoryAPIError extends AgentCoreError {
|
|
|
77
78
|
readonly serviceCode?: string;
|
|
78
79
|
readonly httpStatusCode?: number;
|
|
79
80
|
readonly requestId?: string;
|
|
81
|
+
readonly serviceMessage?: string;
|
|
80
82
|
constructor(operation: string, details?: MemoryErrorDetails);
|
|
83
|
+
protected summary(operation: string): string;
|
|
81
84
|
}
|
|
82
85
|
declare class MemoryContractError extends AgentCoreError {
|
|
83
86
|
readonly operation: string;
|
|
@@ -87,7 +90,7 @@ declare class MemoryContractError extends AgentCoreError {
|
|
|
87
90
|
}
|
|
88
91
|
declare class AddMemoriesOutcomeUnknownError extends MemoryAPIError {
|
|
89
92
|
readonly code = "ADD_MEMORIES_OUTCOME_UNKNOWN";
|
|
90
|
-
|
|
93
|
+
protected summary(): string;
|
|
91
94
|
}
|
|
92
95
|
|
|
93
96
|
export { AgentCoreError as A, ConfigError as C, InvocationError as I, MCPServerNotFoundError as M, ResourceNotConfiguredError as R, UnsupportedFeatureError as U, type Worker as W, ContextError as a, type CollaborationOptions as b, type CollaborationRuntime as c, AddMemoriesOutcomeUnknownError as d, AuthenticationError as e, CredentialExchangeError as f, MemoryAPIError as g, MemoryContractError as h, type MemoryErrorDetails as i, MemoryValidationError as j, ModelConnectionNotFoundError as k, WorkloadAccessTokenRejectedError as l, WorkloadIdentityNotConfiguredError as m };
|
|
@@ -70,6 +70,7 @@ interface MemoryErrorDetails {
|
|
|
70
70
|
serviceCode?: string;
|
|
71
71
|
httpStatusCode?: number;
|
|
72
72
|
requestId?: string;
|
|
73
|
+
serviceMessage?: string;
|
|
73
74
|
}
|
|
74
75
|
declare class MemoryAPIError extends AgentCoreError {
|
|
75
76
|
readonly operation: string;
|
|
@@ -77,7 +78,9 @@ declare class MemoryAPIError extends AgentCoreError {
|
|
|
77
78
|
readonly serviceCode?: string;
|
|
78
79
|
readonly httpStatusCode?: number;
|
|
79
80
|
readonly requestId?: string;
|
|
81
|
+
readonly serviceMessage?: string;
|
|
80
82
|
constructor(operation: string, details?: MemoryErrorDetails);
|
|
83
|
+
protected summary(operation: string): string;
|
|
81
84
|
}
|
|
82
85
|
declare class MemoryContractError extends AgentCoreError {
|
|
83
86
|
readonly operation: string;
|
|
@@ -87,7 +90,7 @@ declare class MemoryContractError extends AgentCoreError {
|
|
|
87
90
|
}
|
|
88
91
|
declare class AddMemoriesOutcomeUnknownError extends MemoryAPIError {
|
|
89
92
|
readonly code = "ADD_MEMORIES_OUTCOME_UNKNOWN";
|
|
90
|
-
|
|
93
|
+
protected summary(): string;
|
|
91
94
|
}
|
|
92
95
|
|
|
93
96
|
export { AgentCoreError as A, ConfigError as C, InvocationError as I, MCPServerNotFoundError as M, ResourceNotConfiguredError as R, UnsupportedFeatureError as U, type Worker as W, ContextError as a, type CollaborationOptions as b, type CollaborationRuntime as c, AddMemoriesOutcomeUnknownError as d, AuthenticationError as e, CredentialExchangeError as f, MemoryAPIError as g, MemoryContractError as h, type MemoryErrorDetails as i, MemoryValidationError as j, ModelConnectionNotFoundError as k, WorkloadAccessTokenRejectedError as l, WorkloadIdentityNotConfiguredError as m };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
languageModel
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-EKLTJ65H.js";
|
|
4
4
|
import "./chunk-WKZUYPDS.js";
|
|
5
5
|
import "./chunk-PTJPB27L.js";
|
|
6
6
|
import {
|
|
7
7
|
ConfigError,
|
|
8
8
|
InvocationError
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-AEQ76QIO.js";
|
|
10
10
|
|
|
11
11
|
// src/integrations/google-adk-model.ts
|
|
12
12
|
import { BaseLlm } from "@google/adk";
|
|
@@ -205,4 +205,4 @@ function completion(reason, usage) {
|
|
|
205
205
|
export {
|
|
206
206
|
AgentCoreLlm
|
|
207
207
|
};
|
|
208
|
-
//# sourceMappingURL=google-adk-model-
|
|
208
|
+
//# sourceMappingURL=google-adk-model-V7SC6RQD.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
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; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkLQM754U3cjs = require('./chunk-LQM754U3.cjs');
|
|
4
4
|
require('./chunk-PC4FM2RP.cjs');
|
|
5
5
|
require('./chunk-ZELRQU4J.cjs');
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkV4A6MJ42cjs = require('./chunk-V4A6MJ42.cjs');
|
|
10
10
|
|
|
11
11
|
// src/integrations/google-adk-model.ts
|
|
12
12
|
var _adk = require('@google/adk');
|
|
@@ -15,10 +15,10 @@ var AgentCoreLlm = class extends _adk.BaseLlm {
|
|
|
15
15
|
|
|
16
16
|
constructor(client) {
|
|
17
17
|
super({ model: client.settings.model });
|
|
18
|
-
this.delegate =
|
|
18
|
+
this.delegate = _chunkLQM754U3cjs.languageModel.call(void 0, client);
|
|
19
19
|
}
|
|
20
20
|
async connect() {
|
|
21
|
-
throw new (0,
|
|
21
|
+
throw new (0, _chunkV4A6MJ42cjs.ConfigError)("AgentCore models do not implement ADK bidirectional live connections");
|
|
22
22
|
}
|
|
23
23
|
async *generateContentAsync(request, stream = false, abortSignal) {
|
|
24
24
|
const lifetime = new AbortController();
|
|
@@ -62,7 +62,7 @@ var AgentCoreLlm = class extends _adk.BaseLlm {
|
|
|
62
62
|
yield { content: { role: "model", parts }, partial: false, turnComplete: true, ...completion(item.finishReason, item.usage) };
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
-
if (!finished) throw new (0,
|
|
65
|
+
if (!finished) throw new (0, _chunkV4A6MJ42cjs.InvocationError)("model stream ended without a completion event");
|
|
66
66
|
} finally {
|
|
67
67
|
lifetime.abort();
|
|
68
68
|
reader.releaseLock();
|
|
@@ -85,7 +85,7 @@ function prompt(contents) {
|
|
|
85
85
|
for (const [partIndex, part] of (_nullishCoalesce(content.parts, () => ( []))).entries()) {
|
|
86
86
|
if (part.functionCall) {
|
|
87
87
|
const call = part.functionCall;
|
|
88
|
-
if (!assistant || !call.name) throw new (0,
|
|
88
|
+
if (!assistant || !call.name) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("ADK functionCall requires a model message and tool name");
|
|
89
89
|
const id = _nullishCoalesce(call.id, () => ( `call-${index}-${partIndex}`));
|
|
90
90
|
pending.push({ id, name: call.name });
|
|
91
91
|
group.push({ type: "tool-call", toolCallId: id, toolName: call.name, input: _nullishCoalesce(call.args, () => ( {})) });
|
|
@@ -93,7 +93,7 @@ function prompt(contents) {
|
|
|
93
93
|
flush();
|
|
94
94
|
const response = part.functionResponse;
|
|
95
95
|
const match = pending.findIndex((call2) => response.id ? call2.id === response.id : call2.name === response.name);
|
|
96
|
-
if (match < 0) throw new (0,
|
|
96
|
+
if (match < 0) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("ADK functionResponse has no matching functionCall");
|
|
97
97
|
const call = pending.splice(match, 1)[0];
|
|
98
98
|
result.push({ role: "tool", content: [{
|
|
99
99
|
type: "tool-result",
|
|
@@ -110,9 +110,9 @@ function prompt(contents) {
|
|
|
110
110
|
else if (!part.thought) group.push({ type: "text", text: part.text });
|
|
111
111
|
} else if (_optionalChain([part, 'access', _6 => _6.inlineData, 'optionalAccess', _7 => _7.data]) !== void 0 || _optionalChain([part, 'access', _8 => _8.fileData, 'optionalAccess', _9 => _9.fileUri])) {
|
|
112
112
|
const mediaType = _nullishCoalesce(_optionalChain([part, 'access', _10 => _10.inlineData, 'optionalAccess', _11 => _11.mimeType]), () => ( _optionalChain([part, 'access', _12 => _12.fileData, 'optionalAccess', _13 => _13.mimeType])));
|
|
113
|
-
if (!mediaType) throw new (0,
|
|
113
|
+
if (!mediaType) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("ADK file content requires mimeType");
|
|
114
114
|
group.push({ type: "file", mediaType, data: _nullishCoalesce(_optionalChain([part, 'access', _14 => _14.inlineData, 'optionalAccess', _15 => _15.data]), () => ( new URL(part.fileData.fileUri))) });
|
|
115
|
-
} else throw new (0,
|
|
115
|
+
} else throw new (0, _chunkV4A6MJ42cjs.ConfigError)("unsupported ADK content part for AgentCore models");
|
|
116
116
|
}
|
|
117
117
|
flush();
|
|
118
118
|
}
|
|
@@ -123,7 +123,7 @@ function systemText(value) {
|
|
|
123
123
|
if (Array.isArray(value)) return value.map(systemText).join("\n");
|
|
124
124
|
if ("parts" in value) return (_nullishCoalesce(value.parts, () => ( []))).map(systemText).join("\n");
|
|
125
125
|
if ("text" in value && value.text !== void 0) return value.text;
|
|
126
|
-
throw new (0,
|
|
126
|
+
throw new (0, _chunkV4A6MJ42cjs.ConfigError)("ADK system instruction must contain text");
|
|
127
127
|
}
|
|
128
128
|
function jsonSchema(value) {
|
|
129
129
|
const schema = structuredClone(value);
|
|
@@ -146,11 +146,11 @@ function requestOptions(request, abortSignal) {
|
|
|
146
146
|
if (config.systemInstruction) messages.unshift({ role: "system", content: systemText(config.systemInstruction) });
|
|
147
147
|
const allowed = _nullishCoalesce(_optionalChain([config, 'access', _16 => _16.toolConfig, 'optionalAccess', _17 => _17.functionCallingConfig, 'optionalAccess', _18 => _18.allowedFunctionNames]), () => ( request.allowedTools));
|
|
148
148
|
const declarations = (_nullishCoalesce(config.tools, () => ( []))).flatMap((tool) => {
|
|
149
|
-
if (!("functionDeclarations" in tool)) throw new (0,
|
|
149
|
+
if (!("functionDeclarations" in tool)) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("Gemini built-in tools are not supported by AgentCore model protocols");
|
|
150
150
|
return _nullishCoalesce(tool.functionDeclarations, () => ( []));
|
|
151
151
|
}).filter((tool) => !allowed || allowed.includes(tool.name));
|
|
152
152
|
const functions = declarations.map((tool) => {
|
|
153
|
-
if (!tool.name) throw new (0,
|
|
153
|
+
if (!tool.name) throw new (0, _chunkV4A6MJ42cjs.ConfigError)("ADK function declaration requires a name");
|
|
154
154
|
return {
|
|
155
155
|
type: "function",
|
|
156
156
|
name: tool.name,
|
|
@@ -205,4 +205,4 @@ function completion(reason, usage) {
|
|
|
205
205
|
|
|
206
206
|
|
|
207
207
|
exports.AgentCoreLlm = AgentCoreLlm;
|
|
208
|
-
//# sourceMappingURL=google-adk-model-
|
|
208
|
+
//# sourceMappingURL=google-adk-model-WYWEQI4R.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/agentcore-sdk-nodejs/agentcore-sdk-nodejs/dist/google-adk-model-PDBKY5YZ.cjs","../src/integrations/google-adk-model.ts"],"names":["result"],"mappings":"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","file":"/home/runner/work/agentcore-sdk-nodejs/agentcore-sdk-nodejs/dist/google-adk-model-PDBKY5YZ.cjs","sourcesContent":[null,"import { BaseLlm, type LlmRequest, type LlmResponse } from '@google/adk';\nimport { FinishReason, type Content, type ContentUnion, type Part } from '@google/genai';\nimport type { LanguageModelV3, LanguageModelV3CallOptions, LanguageModelV3Content, LanguageModelV3FinishReason,\n LanguageModelV3Message, LanguageModelV3Prompt, LanguageModelV3Usage } from '@ai-sdk/provider';\nimport type { ModelClient, ProviderModelClient } from '../model';\nimport { ConfigError, InvocationError } from '../errors';\nimport { languageModel } from './ai-sdk';\n\n/** ADK owns the agent loop; AI SDK normalizes native and direct provider models. */\nexport class AgentCoreLlm extends BaseLlm {\n private readonly delegate: LanguageModelV3;\n constructor(client: ModelClient | ProviderModelClient) { super({ model: client.settings.model }); this.delegate = languageModel(client); }\n async connect(): Promise<never> { throw new ConfigError('AgentCore models do not implement ADK bidirectional live connections'); }\n async *generateContentAsync(request: LlmRequest, stream = false, abortSignal?: AbortSignal): AsyncGenerator<LlmResponse> {\n const lifetime = new AbortController();\n const signals = [lifetime.signal, abortSignal, request.config?.abortSignal].filter((value): value is AbortSignal => value !== undefined);\n const options = requestOptions(request, AbortSignal.any(signals));\n try {\n if (!stream) {\n const result = await this.delegate.doGenerate(options);\n yield { content: { role: 'model', parts: result.content.flatMap(outputParts) }, ...completion(result.finishReason, result.usage) };\n return;\n }\n const result = await this.delegate.doStream(options);\n const reader = result.stream.getReader();\n const parts: Part[] = []; const text = new Map<string, Part>(); let finished = false;\n try {\n while (true) {\n const next = await reader.read(); if (next.done) break;\n const item = next.value;\n if (item.type === 'error') throw item.error;\n if (item.type === 'text-delta' || item.type === 'reasoning-delta') {\n const key = `${item.type}:${item.id}`; let part = text.get(key);\n if (!part) { part = { text: '', ...(item.type === 'reasoning-delta' ? { thought: true } : {}) }; text.set(key, part); parts.push(part); }\n part.text += item.delta;\n yield { content: { role: 'model', parts: [{ text: item.delta, thought: part.thought }] }, partial: true, turnComplete: false };\n } else if (item.type === 'reasoning-end') {\n const signature = item.providerMetadata?.anthropic?.signature;\n const part = text.get(`reasoning-delta:${item.id}`);\n if (part && typeof signature === 'string') part.thoughtSignature = signature;\n } else if (item.type === 'tool-call' || item.type === 'file') {\n parts.push(...outputParts(item));\n } else if (item.type === 'finish') {\n finished = true;\n yield { content: { role: 'model', parts }, partial: false, turnComplete: true, ...completion(item.finishReason, item.usage) };\n }\n }\n if (!finished) throw new InvocationError('model stream ended without a completion event');\n } finally { lifetime.abort(); reader.releaseLock(); }\n } finally { lifetime.abort(); }\n }\n}\n\ntype ChatPart = Extract<LanguageModelV3Message, { role: 'assistant' }>['content'][number];\ntype UserPart = Extract<LanguageModelV3Message, { role: 'user' }>['content'][number];\nfunction prompt(contents: Content[]): LanguageModelV3Prompt {\n const result: LanguageModelV3Prompt = []; const pending: { name: string; id: string }[] = [];\n for (const [index, content] of contents.entries()) {\n const assistant = content.role === 'model'; let group: ChatPart[] = [];\n const flush = () => {\n if (group.length) result.push(assistant ? { role: 'assistant', content: group } : { role: 'user', content: group as UserPart[] });\n group = [];\n };\n for (const [partIndex, part] of (content.parts ?? []).entries()) {\n if (part.functionCall) {\n const call = part.functionCall;\n if (!assistant || !call.name) throw new ConfigError('ADK functionCall requires a model message and tool name');\n const id = call.id ?? `call-${index}-${partIndex}`; pending.push({ id, name: call.name });\n group.push({ type: 'tool-call', toolCallId: id, toolName: call.name, input: call.args ?? {} });\n } else if (part.functionResponse) {\n flush(); const response = part.functionResponse;\n const match = pending.findIndex(call => response.id ? call.id === response.id : call.name === response.name);\n if (match < 0) throw new ConfigError('ADK functionResponse has no matching functionCall');\n const call = pending.splice(match, 1)[0]!;\n result.push({ role: 'tool', content: [{ type: 'tool-result', toolCallId: call.id, toolName: call.name,\n output: { type: 'text', value: JSON.stringify(response.response ?? {}) } }] });\n } else if (part.text !== undefined) {\n if (part.thought && assistant) group.push({ type: 'reasoning', text: part.text,\n providerOptions: part.thoughtSignature ? { anthropic: { signature: part.thoughtSignature } } : undefined });\n else if (!part.thought) group.push({ type: 'text', text: part.text });\n } else if (part.inlineData?.data !== undefined || part.fileData?.fileUri) {\n const mediaType = part.inlineData?.mimeType ?? part.fileData?.mimeType;\n if (!mediaType) throw new ConfigError('ADK file content requires mimeType');\n group.push({ type: 'file', mediaType, data: part.inlineData?.data ?? new URL(part.fileData!.fileUri!) });\n } else throw new ConfigError('unsupported ADK content part for AgentCore models');\n }\n flush();\n }\n return result;\n}\nfunction systemText(value: ContentUnion): string {\n if (typeof value === 'string') return value;\n if (Array.isArray(value)) return value.map(systemText).join('\\n');\n if ('parts' in value) return (value.parts ?? []).map(systemText).join('\\n');\n if ('text' in value && value.text !== undefined) return value.text;\n throw new ConfigError('ADK system instruction must contain text');\n}\n/** Translate GenAI's OpenAPI-style Schema; native parametersJsonSchema bypasses this. */\nfunction jsonSchema(value: unknown): Record<string, unknown> {\n const schema = structuredClone(value) as Record<string, unknown>;\n if (typeof schema.type === 'string') schema.type = schema.type.toLowerCase();\n for (const key of ['minItems', 'maxItems', 'minLength', 'maxLength', 'minProperties', 'maxProperties']) {\n if (typeof schema[key] === 'string') schema[key] = Number(schema[key]);\n }\n if (Array.isArray(schema.enum) && (schema.type === 'integer' || schema.type === 'number')) schema.enum = schema.enum.map(Number);\n if (schema.properties) schema.properties = Object.fromEntries(Object.entries(schema.properties).map(([key, item]) => [key, jsonSchema(item)]));\n if (schema.items) schema.items = jsonSchema(schema.items);\n if (Array.isArray(schema.anyOf)) schema.anyOf = schema.anyOf.map(jsonSchema);\n const nullable = schema.nullable; delete schema.nullable; delete schema.propertyOrdering;\n return nullable ? { anyOf: [schema, { type: 'null' }] } : schema;\n}\nfunction requestOptions(request: LlmRequest, abortSignal: AbortSignal): LanguageModelV3CallOptions {\n const config = request.config ?? {};\n const messages = prompt(request.contents);\n if (config.systemInstruction) messages.unshift({ role: 'system', content: systemText(config.systemInstruction) });\n const allowed = config.toolConfig?.functionCallingConfig?.allowedFunctionNames ?? request.allowedTools;\n const declarations = (config.tools ?? []).flatMap(tool => {\n if (!('functionDeclarations' in tool)) throw new ConfigError('Gemini built-in tools are not supported by AgentCore model protocols');\n return tool.functionDeclarations ?? [];\n }).filter(tool => !allowed || allowed.includes(tool.name!));\n const functions = declarations.map(tool => {\n if (!tool.name) throw new ConfigError('ADK function declaration requires a name');\n return { type: 'function' as const, name: tool.name, description: tool.description,\n inputSchema: tool.parametersJsonSchema ? structuredClone(tool.parametersJsonSchema) as Record<string, unknown>\n : tool.parameters ? jsonSchema(tool.parameters) : { type: 'object', properties: {} } };\n });\n const mode = config.toolConfig?.functionCallingConfig?.mode;\n const options: LanguageModelV3CallOptions = { prompt: messages, abortSignal,\n maxOutputTokens: config.maxOutputTokens, temperature: config.temperature, topP: config.topP, topK: config.topK,\n stopSequences: config.stopSequences, seed: config.seed, presencePenalty: config.presencePenalty, frequencyPenalty: config.frequencyPenalty,\n tools: functions.length ? functions : undefined,\n toolChoice: mode === 'NONE' || allowed?.length === 0 ? { type: 'none' } : mode === 'ANY' ? { type: 'required' } : { type: 'auto' },\n };\n if (config.responseMimeType === 'application/json' || config.responseJsonSchema || config.responseSchema) {\n options.responseFormat = { type: 'json', schema: config.responseJsonSchema ? structuredClone(config.responseJsonSchema) as Record<string, unknown>\n : config.responseSchema ? jsonSchema(config.responseSchema) : undefined };\n }\n return options;\n}\nfunction outputParts(item: LanguageModelV3Content): Part[] {\n if (item.type === 'text') return [{ text: item.text }];\n if (item.type === 'reasoning') {\n const signature = item.providerMetadata?.anthropic?.signature;\n return [{ text: item.text, thought: true, thoughtSignature: typeof signature === 'string' ? signature : undefined }];\n }\n if (item.type === 'tool-call') return [{ functionCall: { id: item.toolCallId, name: item.toolName, args: JSON.parse(item.input) } }];\n if (item.type === 'file') return [{ inlineData: { mimeType: item.mediaType, data: typeof item.data === 'string' ? item.data : Buffer.from(item.data).toString('base64') } }];\n return [];\n}\nfunction completion(reason: LanguageModelV3FinishReason, usage: LanguageModelV3Usage): Partial<LlmResponse> {\n const input = usage.inputTokens.total, output = usage.outputTokens.total;\n return { finishReason: reason.unified === 'length' ? FinishReason.MAX_TOKENS : reason.unified === 'content-filter' ? FinishReason.SAFETY\n : reason.unified === 'stop' || reason.unified === 'tool-calls' ? FinishReason.STOP : FinishReason.OTHER,\n ...(reason.unified === 'error' ? { errorCode: 'MODEL_ERROR', errorMessage: 'model generation failed' } : {}),\n usageMetadata: { promptTokenCount: input, candidatesTokenCount: output, totalTokenCount: input !== undefined && output !== undefined ? input + output : undefined,\n cachedContentTokenCount: usage.inputTokens.cacheRead, thoughtsTokenCount: usage.outputTokens.reasoning },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/agentcore-sdk-nodejs/agentcore-sdk-nodejs/dist/google-adk-model-WYWEQI4R.cjs","../src/integrations/google-adk-model.ts"],"names":["result"],"mappings":"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","file":"/home/runner/work/agentcore-sdk-nodejs/agentcore-sdk-nodejs/dist/google-adk-model-WYWEQI4R.cjs","sourcesContent":[null,"import { BaseLlm, type LlmRequest, type LlmResponse } from '@google/adk';\nimport { FinishReason, type Content, type ContentUnion, type Part } from '@google/genai';\nimport type { LanguageModelV3, LanguageModelV3CallOptions, LanguageModelV3Content, LanguageModelV3FinishReason,\n LanguageModelV3Message, LanguageModelV3Prompt, LanguageModelV3Usage } from '@ai-sdk/provider';\nimport type { ModelClient, ProviderModelClient } from '../model';\nimport { ConfigError, InvocationError } from '../errors';\nimport { languageModel } from './ai-sdk';\n\n/** ADK owns the agent loop; AI SDK normalizes native and direct provider models. */\nexport class AgentCoreLlm extends BaseLlm {\n private readonly delegate: LanguageModelV3;\n constructor(client: ModelClient | ProviderModelClient) { super({ model: client.settings.model }); this.delegate = languageModel(client); }\n async connect(): Promise<never> { throw new ConfigError('AgentCore models do not implement ADK bidirectional live connections'); }\n async *generateContentAsync(request: LlmRequest, stream = false, abortSignal?: AbortSignal): AsyncGenerator<LlmResponse> {\n const lifetime = new AbortController();\n const signals = [lifetime.signal, abortSignal, request.config?.abortSignal].filter((value): value is AbortSignal => value !== undefined);\n const options = requestOptions(request, AbortSignal.any(signals));\n try {\n if (!stream) {\n const result = await this.delegate.doGenerate(options);\n yield { content: { role: 'model', parts: result.content.flatMap(outputParts) }, ...completion(result.finishReason, result.usage) };\n return;\n }\n const result = await this.delegate.doStream(options);\n const reader = result.stream.getReader();\n const parts: Part[] = []; const text = new Map<string, Part>(); let finished = false;\n try {\n while (true) {\n const next = await reader.read(); if (next.done) break;\n const item = next.value;\n if (item.type === 'error') throw item.error;\n if (item.type === 'text-delta' || item.type === 'reasoning-delta') {\n const key = `${item.type}:${item.id}`; let part = text.get(key);\n if (!part) { part = { text: '', ...(item.type === 'reasoning-delta' ? { thought: true } : {}) }; text.set(key, part); parts.push(part); }\n part.text += item.delta;\n yield { content: { role: 'model', parts: [{ text: item.delta, thought: part.thought }] }, partial: true, turnComplete: false };\n } else if (item.type === 'reasoning-end') {\n const signature = item.providerMetadata?.anthropic?.signature;\n const part = text.get(`reasoning-delta:${item.id}`);\n if (part && typeof signature === 'string') part.thoughtSignature = signature;\n } else if (item.type === 'tool-call' || item.type === 'file') {\n parts.push(...outputParts(item));\n } else if (item.type === 'finish') {\n finished = true;\n yield { content: { role: 'model', parts }, partial: false, turnComplete: true, ...completion(item.finishReason, item.usage) };\n }\n }\n if (!finished) throw new InvocationError('model stream ended without a completion event');\n } finally { lifetime.abort(); reader.releaseLock(); }\n } finally { lifetime.abort(); }\n }\n}\n\ntype ChatPart = Extract<LanguageModelV3Message, { role: 'assistant' }>['content'][number];\ntype UserPart = Extract<LanguageModelV3Message, { role: 'user' }>['content'][number];\nfunction prompt(contents: Content[]): LanguageModelV3Prompt {\n const result: LanguageModelV3Prompt = []; const pending: { name: string; id: string }[] = [];\n for (const [index, content] of contents.entries()) {\n const assistant = content.role === 'model'; let group: ChatPart[] = [];\n const flush = () => {\n if (group.length) result.push(assistant ? { role: 'assistant', content: group } : { role: 'user', content: group as UserPart[] });\n group = [];\n };\n for (const [partIndex, part] of (content.parts ?? []).entries()) {\n if (part.functionCall) {\n const call = part.functionCall;\n if (!assistant || !call.name) throw new ConfigError('ADK functionCall requires a model message and tool name');\n const id = call.id ?? `call-${index}-${partIndex}`; pending.push({ id, name: call.name });\n group.push({ type: 'tool-call', toolCallId: id, toolName: call.name, input: call.args ?? {} });\n } else if (part.functionResponse) {\n flush(); const response = part.functionResponse;\n const match = pending.findIndex(call => response.id ? call.id === response.id : call.name === response.name);\n if (match < 0) throw new ConfigError('ADK functionResponse has no matching functionCall');\n const call = pending.splice(match, 1)[0]!;\n result.push({ role: 'tool', content: [{ type: 'tool-result', toolCallId: call.id, toolName: call.name,\n output: { type: 'text', value: JSON.stringify(response.response ?? {}) } }] });\n } else if (part.text !== undefined) {\n if (part.thought && assistant) group.push({ type: 'reasoning', text: part.text,\n providerOptions: part.thoughtSignature ? { anthropic: { signature: part.thoughtSignature } } : undefined });\n else if (!part.thought) group.push({ type: 'text', text: part.text });\n } else if (part.inlineData?.data !== undefined || part.fileData?.fileUri) {\n const mediaType = part.inlineData?.mimeType ?? part.fileData?.mimeType;\n if (!mediaType) throw new ConfigError('ADK file content requires mimeType');\n group.push({ type: 'file', mediaType, data: part.inlineData?.data ?? new URL(part.fileData!.fileUri!) });\n } else throw new ConfigError('unsupported ADK content part for AgentCore models');\n }\n flush();\n }\n return result;\n}\nfunction systemText(value: ContentUnion): string {\n if (typeof value === 'string') return value;\n if (Array.isArray(value)) return value.map(systemText).join('\\n');\n if ('parts' in value) return (value.parts ?? []).map(systemText).join('\\n');\n if ('text' in value && value.text !== undefined) return value.text;\n throw new ConfigError('ADK system instruction must contain text');\n}\n/** Translate GenAI's OpenAPI-style Schema; native parametersJsonSchema bypasses this. */\nfunction jsonSchema(value: unknown): Record<string, unknown> {\n const schema = structuredClone(value) as Record<string, unknown>;\n if (typeof schema.type === 'string') schema.type = schema.type.toLowerCase();\n for (const key of ['minItems', 'maxItems', 'minLength', 'maxLength', 'minProperties', 'maxProperties']) {\n if (typeof schema[key] === 'string') schema[key] = Number(schema[key]);\n }\n if (Array.isArray(schema.enum) && (schema.type === 'integer' || schema.type === 'number')) schema.enum = schema.enum.map(Number);\n if (schema.properties) schema.properties = Object.fromEntries(Object.entries(schema.properties).map(([key, item]) => [key, jsonSchema(item)]));\n if (schema.items) schema.items = jsonSchema(schema.items);\n if (Array.isArray(schema.anyOf)) schema.anyOf = schema.anyOf.map(jsonSchema);\n const nullable = schema.nullable; delete schema.nullable; delete schema.propertyOrdering;\n return nullable ? { anyOf: [schema, { type: 'null' }] } : schema;\n}\nfunction requestOptions(request: LlmRequest, abortSignal: AbortSignal): LanguageModelV3CallOptions {\n const config = request.config ?? {};\n const messages = prompt(request.contents);\n if (config.systemInstruction) messages.unshift({ role: 'system', content: systemText(config.systemInstruction) });\n const allowed = config.toolConfig?.functionCallingConfig?.allowedFunctionNames ?? request.allowedTools;\n const declarations = (config.tools ?? []).flatMap(tool => {\n if (!('functionDeclarations' in tool)) throw new ConfigError('Gemini built-in tools are not supported by AgentCore model protocols');\n return tool.functionDeclarations ?? [];\n }).filter(tool => !allowed || allowed.includes(tool.name!));\n const functions = declarations.map(tool => {\n if (!tool.name) throw new ConfigError('ADK function declaration requires a name');\n return { type: 'function' as const, name: tool.name, description: tool.description,\n inputSchema: tool.parametersJsonSchema ? structuredClone(tool.parametersJsonSchema) as Record<string, unknown>\n : tool.parameters ? jsonSchema(tool.parameters) : { type: 'object', properties: {} } };\n });\n const mode = config.toolConfig?.functionCallingConfig?.mode;\n const options: LanguageModelV3CallOptions = { prompt: messages, abortSignal,\n maxOutputTokens: config.maxOutputTokens, temperature: config.temperature, topP: config.topP, topK: config.topK,\n stopSequences: config.stopSequences, seed: config.seed, presencePenalty: config.presencePenalty, frequencyPenalty: config.frequencyPenalty,\n tools: functions.length ? functions : undefined,\n toolChoice: mode === 'NONE' || allowed?.length === 0 ? { type: 'none' } : mode === 'ANY' ? { type: 'required' } : { type: 'auto' },\n };\n if (config.responseMimeType === 'application/json' || config.responseJsonSchema || config.responseSchema) {\n options.responseFormat = { type: 'json', schema: config.responseJsonSchema ? structuredClone(config.responseJsonSchema) as Record<string, unknown>\n : config.responseSchema ? jsonSchema(config.responseSchema) : undefined };\n }\n return options;\n}\nfunction outputParts(item: LanguageModelV3Content): Part[] {\n if (item.type === 'text') return [{ text: item.text }];\n if (item.type === 'reasoning') {\n const signature = item.providerMetadata?.anthropic?.signature;\n return [{ text: item.text, thought: true, thoughtSignature: typeof signature === 'string' ? signature : undefined }];\n }\n if (item.type === 'tool-call') return [{ functionCall: { id: item.toolCallId, name: item.toolName, args: JSON.parse(item.input) } }];\n if (item.type === 'file') return [{ inlineData: { mimeType: item.mediaType, data: typeof item.data === 'string' ? item.data : Buffer.from(item.data).toString('base64') } }];\n return [];\n}\nfunction completion(reason: LanguageModelV3FinishReason, usage: LanguageModelV3Usage): Partial<LlmResponse> {\n const input = usage.inputTokens.total, output = usage.outputTokens.total;\n return { finishReason: reason.unified === 'length' ? FinishReason.MAX_TOKENS : reason.unified === 'content-filter' ? FinishReason.SAFETY\n : reason.unified === 'stop' || reason.unified === 'tool-calls' ? FinishReason.STOP : FinishReason.OTHER,\n ...(reason.unified === 'error' ? { errorCode: 'MODEL_ERROR', errorMessage: 'model generation failed' } : {}),\n usageMetadata: { promptTokenCount: input, candidatesTokenCount: output, totalTokenCount: input !== undefined && output !== undefined ? input + output : undefined,\n cachedContentTokenCount: usage.inputTokens.cacheRead, thoughtsTokenCount: usage.outputTokens.reasoning },\n };\n}\n"]}
|