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.
- package/LICENSE +202 -0
- package/README.md +189 -0
- package/dist/access-key-CkoHq3S8.d.cts +30 -0
- package/dist/access-key-CkoHq3S8.d.ts +30 -0
- package/dist/agent-sa-token-DD1Sb8P1.d.cts +14 -0
- package/dist/agent-sa-token-DD1Sb8P1.d.ts +14 -0
- package/dist/auth/index.cjs +36 -0
- package/dist/auth/index.cjs.map +1 -0
- package/dist/auth/index.d.cts +34 -0
- package/dist/auth/index.d.ts +34 -0
- package/dist/auth/index.js +36 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/bound-credentials-C1fM0thh.d.cts +39 -0
- package/dist/bound-credentials-DqT64Q2s.d.ts +39 -0
- package/dist/chunk-2E5EWEDG.cjs +142 -0
- package/dist/chunk-2E5EWEDG.cjs.map +1 -0
- package/dist/chunk-55XZZRKO.js +220 -0
- package/dist/chunk-55XZZRKO.js.map +1 -0
- package/dist/chunk-5JXA7JPS.js +29 -0
- package/dist/chunk-5JXA7JPS.js.map +1 -0
- package/dist/chunk-5RKN46UU.cjs +139 -0
- package/dist/chunk-5RKN46UU.cjs.map +1 -0
- package/dist/chunk-5ZOLHQXO.js +296 -0
- package/dist/chunk-5ZOLHQXO.js.map +1 -0
- package/dist/chunk-7Y263YIW.js +298 -0
- package/dist/chunk-7Y263YIW.js.map +1 -0
- package/dist/chunk-A3PF2SPD.cjs +141 -0
- package/dist/chunk-A3PF2SPD.cjs.map +1 -0
- package/dist/chunk-A3WMLVJC.cjs +141 -0
- package/dist/chunk-A3WMLVJC.cjs.map +1 -0
- package/dist/chunk-BVZ7H2F5.cjs +582 -0
- package/dist/chunk-BVZ7H2F5.cjs.map +1 -0
- package/dist/chunk-EGUKJE3Z.cjs +24 -0
- package/dist/chunk-EGUKJE3Z.cjs.map +1 -0
- package/dist/chunk-EKXZKKJJ.js +24 -0
- package/dist/chunk-EKXZKKJJ.js.map +1 -0
- package/dist/chunk-GYLT23D3.js +110 -0
- package/dist/chunk-GYLT23D3.js.map +1 -0
- package/dist/chunk-IF7LMBXC.js +306 -0
- package/dist/chunk-IF7LMBXC.js.map +1 -0
- package/dist/chunk-IUCLCPVV.js +113 -0
- package/dist/chunk-IUCLCPVV.js.map +1 -0
- package/dist/chunk-JSP7ZROS.cjs +95 -0
- package/dist/chunk-JSP7ZROS.cjs.map +1 -0
- package/dist/chunk-JW62DVIC.js +238 -0
- package/dist/chunk-JW62DVIC.js.map +1 -0
- package/dist/chunk-K3TE7625.js +139 -0
- package/dist/chunk-K3TE7625.js.map +1 -0
- package/dist/chunk-LE5P3SJW.cjs +16 -0
- package/dist/chunk-LE5P3SJW.cjs.map +1 -0
- package/dist/chunk-LXHW6OT4.cjs +77 -0
- package/dist/chunk-LXHW6OT4.cjs.map +1 -0
- package/dist/chunk-MICRSJ6R.js +48 -0
- package/dist/chunk-MICRSJ6R.js.map +1 -0
- package/dist/chunk-MWAHO47B.cjs +220 -0
- package/dist/chunk-MWAHO47B.cjs.map +1 -0
- package/dist/chunk-MZ5UWGXS.js +95 -0
- package/dist/chunk-MZ5UWGXS.js.map +1 -0
- package/dist/chunk-NZL3VPJ2.js +16 -0
- package/dist/chunk-NZL3VPJ2.js.map +1 -0
- package/dist/chunk-PC4FM2RP.cjs +180 -0
- package/dist/chunk-PC4FM2RP.cjs.map +1 -0
- package/dist/chunk-PKYET77D.cjs +296 -0
- package/dist/chunk-PKYET77D.cjs.map +1 -0
- package/dist/chunk-PTJPB27L.js +31 -0
- package/dist/chunk-PTJPB27L.js.map +1 -0
- package/dist/chunk-QIZO3A4Y.cjs +306 -0
- package/dist/chunk-QIZO3A4Y.cjs.map +1 -0
- package/dist/chunk-RBAY4MO2.js +202 -0
- package/dist/chunk-RBAY4MO2.js.map +1 -0
- package/dist/chunk-RHY7Y43E.js +582 -0
- package/dist/chunk-RHY7Y43E.js.map +1 -0
- package/dist/chunk-RQRI6RCG.cjs +238 -0
- package/dist/chunk-RQRI6RCG.cjs.map +1 -0
- package/dist/chunk-RYXL25AI.js +141 -0
- package/dist/chunk-RYXL25AI.js.map +1 -0
- package/dist/chunk-RZNQGEGJ.cjs +113 -0
- package/dist/chunk-RZNQGEGJ.cjs.map +1 -0
- package/dist/chunk-S7PWSJNP.cjs +48 -0
- package/dist/chunk-S7PWSJNP.cjs.map +1 -0
- package/dist/chunk-TWEO5XVM.cjs +298 -0
- package/dist/chunk-TWEO5XVM.cjs.map +1 -0
- package/dist/chunk-UBP5CHU7.js +142 -0
- package/dist/chunk-UBP5CHU7.js.map +1 -0
- package/dist/chunk-ULJTQSLE.cjs +35 -0
- package/dist/chunk-ULJTQSLE.cjs.map +1 -0
- package/dist/chunk-UWPKFJYM.js +77 -0
- package/dist/chunk-UWPKFJYM.js.map +1 -0
- package/dist/chunk-WKZUYPDS.js +180 -0
- package/dist/chunk-WKZUYPDS.js.map +1 -0
- package/dist/chunk-YZP55W7S.cjs +29 -0
- package/dist/chunk-YZP55W7S.cjs.map +1 -0
- package/dist/chunk-ZELRQU4J.cjs +31 -0
- package/dist/chunk-ZELRQU4J.cjs.map +1 -0
- package/dist/chunk-ZLKYXRNM.js +141 -0
- package/dist/chunk-ZLKYXRNM.js.map +1 -0
- package/dist/chunk-ZLQ2IBTC.cjs +110 -0
- package/dist/chunk-ZLQ2IBTC.cjs.map +1 -0
- package/dist/chunk-ZTWLCHCO.cjs +202 -0
- package/dist/chunk-ZTWLCHCO.cjs.map +1 -0
- package/dist/chunk-ZWQBAJ5O.js +35 -0
- package/dist/chunk-ZWQBAJ5O.js.map +1 -0
- package/dist/client-DDU4-ygJ.d.cts +72 -0
- package/dist/client-pDzS7EZR.d.ts +72 -0
- package/dist/collaboration/index.cjs +44 -0
- package/dist/collaboration/index.cjs.map +1 -0
- package/dist/collaboration/index.d.cts +73 -0
- package/dist/collaboration/index.d.ts +73 -0
- package/dist/collaboration/index.js +44 -0
- package/dist/collaboration/index.js.map +1 -0
- package/dist/common-BSXkQfxI.d.cts +25 -0
- package/dist/common-BSXkQfxI.d.ts +25 -0
- package/dist/common-DRdI-75k.d.ts +8 -0
- package/dist/common-_vxreiEW.d.cts +8 -0
- package/dist/config-CMkmMtx1.d.cts +20 -0
- package/dist/config-CMkmMtx1.d.ts +20 -0
- package/dist/context-M9rOTifU.d.cts +12 -0
- package/dist/context-M9rOTifU.d.ts +12 -0
- package/dist/controller-DWs3Sy04.d.cts +9 -0
- package/dist/controller-DmI4L4sP.d.ts +9 -0
- package/dist/controlplane/index.cjs +13 -0
- package/dist/controlplane/index.cjs.map +1 -0
- package/dist/controlplane/index.d.cts +66 -0
- package/dist/controlplane/index.d.ts +66 -0
- package/dist/controlplane/index.js +13 -0
- package/dist/controlplane/index.js.map +1 -0
- package/dist/errors-BjGO6N10.d.ts +93 -0
- package/dist/errors-D9OtcR-o.d.cts +93 -0
- package/dist/event-converters-BIn8odqo.d.ts +38 -0
- package/dist/event-converters-Cn_NeGyQ.d.cts +38 -0
- package/dist/google-adk-model-N47R7GB2.js +208 -0
- package/dist/google-adk-model-N47R7GB2.js.map +1 -0
- package/dist/google-adk-model-PDBKY5YZ.cjs +208 -0
- package/dist/google-adk-model-PDBKY5YZ.cjs.map +1 -0
- package/dist/index.cjs +322 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +78 -0
- package/dist/index.d.ts +78 -0
- package/dist/index.js +322 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/ai-sdk.cjs +15 -0
- package/dist/integrations/ai-sdk.cjs.map +1 -0
- package/dist/integrations/ai-sdk.d.cts +21 -0
- package/dist/integrations/ai-sdk.d.ts +21 -0
- package/dist/integrations/ai-sdk.js +15 -0
- package/dist/integrations/ai-sdk.js.map +1 -0
- package/dist/integrations/google-adk.cjs +90 -0
- package/dist/integrations/google-adk.cjs.map +1 -0
- package/dist/integrations/google-adk.d.cts +46 -0
- package/dist/integrations/google-adk.d.ts +46 -0
- package/dist/integrations/google-adk.js +90 -0
- package/dist/integrations/google-adk.js.map +1 -0
- package/dist/integrations/langchain.cjs +95 -0
- package/dist/integrations/langchain.cjs.map +1 -0
- package/dist/integrations/langchain.d.cts +52 -0
- package/dist/integrations/langchain.d.ts +52 -0
- package/dist/integrations/langchain.js +95 -0
- package/dist/integrations/langchain.js.map +1 -0
- package/dist/integrations/langgraph.cjs +30 -0
- package/dist/integrations/langgraph.cjs.map +1 -0
- package/dist/integrations/langgraph.d.cts +53 -0
- package/dist/integrations/langgraph.d.ts +53 -0
- package/dist/integrations/langgraph.js +30 -0
- package/dist/integrations/langgraph.js.map +1 -0
- package/dist/integrations/mastra.cjs +108 -0
- package/dist/integrations/mastra.cjs.map +1 -0
- package/dist/integrations/mastra.d.cts +47 -0
- package/dist/integrations/mastra.d.ts +47 -0
- package/dist/integrations/mastra.js +108 -0
- package/dist/integrations/mastra.js.map +1 -0
- package/dist/langchain-adapter-DFJdEX04.d.cts +47 -0
- package/dist/langchain-adapter-DJsyjm5V.d.ts +47 -0
- package/dist/langchain-provider-NF5GIDQV.cjs +227 -0
- package/dist/langchain-provider-NF5GIDQV.cjs.map +1 -0
- package/dist/langchain-provider-PHL4UWNF.js +227 -0
- package/dist/langchain-provider-PHL4UWNF.js.map +1 -0
- package/dist/loader-DrIQ37nm.d.ts +38 -0
- package/dist/loader-eWuJ2GSL.d.cts +38 -0
- package/dist/logging-C8GLLg1f.d.cts +9 -0
- package/dist/logging-C8GLLg1f.d.ts +9 -0
- package/dist/managed-CwLx9h4C.d.cts +32 -0
- package/dist/managed-D9eQK1ut.d.ts +32 -0
- package/dist/mcp/index.cjs +12 -0
- package/dist/mcp/index.cjs.map +1 -0
- package/dist/mcp/index.d.cts +62 -0
- package/dist/mcp/index.d.ts +62 -0
- package/dist/mcp/index.js +12 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/memory/index.cjs +12 -0
- package/dist/memory/index.cjs.map +1 -0
- package/dist/memory/index.d.cts +113 -0
- package/dist/memory/index.d.ts +113 -0
- package/dist/memory/index.js +12 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/model/index.cjs +16 -0
- package/dist/model/index.cjs.map +1 -0
- package/dist/model/index.d.cts +129 -0
- package/dist/model/index.d.ts +129 -0
- package/dist/model/index.js +16 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model-CkYHzHPk.d.cts +50 -0
- package/dist/model-CkYHzHPk.d.ts +50 -0
- package/dist/runtime/index.cjs +49 -0
- package/dist/runtime/index.cjs.map +1 -0
- package/dist/runtime/index.d.cts +73 -0
- package/dist/runtime/index.d.ts +73 -0
- package/dist/runtime/index.js +49 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/server/index.cjs +604 -0
- package/dist/server/index.cjs.map +1 -0
- package/dist/server/index.d.cts +69 -0
- package/dist/server/index.d.ts +69 -0
- package/dist/server/index.js +604 -0
- package/dist/server/index.js.map +1 -0
- package/dist/skill/index.cjs +14 -0
- package/dist/skill/index.cjs.map +1 -0
- package/dist/skill/index.d.cts +16 -0
- package/dist/skill/index.d.ts +16 -0
- package/dist/skill/index.js +14 -0
- package/dist/skill/index.js.map +1 -0
- package/package.json +292 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AgentEvent,
|
|
3
|
+
EventType
|
|
4
|
+
} from "./chunk-PTJPB27L.js";
|
|
5
|
+
|
|
6
|
+
// src/integrations/event-converters.ts
|
|
7
|
+
import { randomUUID } from "crypto";
|
|
8
|
+
var endText = () => new AgentEvent(EventType.TEXT_END, {});
|
|
9
|
+
function messageEvents(message) {
|
|
10
|
+
const blocks = message?.contentBlocks ?? (typeof message?.content === "string" ? [{ type: "text", text: message.content }] : message?.content ?? []);
|
|
11
|
+
return blocks.flatMap((block) => {
|
|
12
|
+
if (block.type !== "text" && block.type !== "reasoning") return [];
|
|
13
|
+
const delta = block.type === "text" ? block.text : block.reasoning;
|
|
14
|
+
return delta ? [new AgentEvent(
|
|
15
|
+
block.type === "text" ? EventType.TEXT : EventType.REASONING,
|
|
16
|
+
{ delta }
|
|
17
|
+
)] : [];
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
var EventConverter = class {
|
|
21
|
+
/** One converter per invocation; supply the entire framework event stream. */
|
|
22
|
+
async *stream(events) {
|
|
23
|
+
for await (const event of events) yield* this.convert(event);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
var LangChainEventConverter = class extends EventConverter {
|
|
27
|
+
streamed = /* @__PURE__ */ new Map();
|
|
28
|
+
messages = /* @__PURE__ */ new Map();
|
|
29
|
+
segments = /* @__PURE__ */ new Map();
|
|
30
|
+
calls = /* @__PURE__ */ new Set();
|
|
31
|
+
results = /* @__PURE__ */ new Set();
|
|
32
|
+
convert(event) {
|
|
33
|
+
const data = event.data ?? {}, runId = event.run_id;
|
|
34
|
+
if (event.event === "on_chat_model_stream") {
|
|
35
|
+
const events = messageEvents(data.chunk);
|
|
36
|
+
const kinds = this.streamed.get(runId) ?? /* @__PURE__ */ new Set();
|
|
37
|
+
events.forEach((e) => kinds.add(e.type));
|
|
38
|
+
this.streamed.set(runId, kinds);
|
|
39
|
+
return this.withMessageIds(runId, events);
|
|
40
|
+
} else if (event.event === "on_chat_model_end") {
|
|
41
|
+
const output = data.output, streamed = this.streamed.get(runId);
|
|
42
|
+
const events = this.withMessageIds(runId, messageEvents(output).filter((e) => !streamed?.has(e.type)));
|
|
43
|
+
this.streamed.delete(runId);
|
|
44
|
+
events.push(...this.endMessage(runId));
|
|
45
|
+
this.segments.delete(runId);
|
|
46
|
+
for (const call of output?.tool_calls ?? []) {
|
|
47
|
+
this.calls.add(call.id);
|
|
48
|
+
events.push(new AgentEvent(EventType.TOOL_CALL, { id: call.id, name: call.name, args: call.args }));
|
|
49
|
+
}
|
|
50
|
+
return events;
|
|
51
|
+
} else if (event.event === "on_tool_end") {
|
|
52
|
+
return this.toolResult(data.output);
|
|
53
|
+
} else if (event.event === "on_chain_end") {
|
|
54
|
+
const messages = Array.isArray(data.output) ? data.output : data.output?.messages ?? [];
|
|
55
|
+
return messages.filter((message) => (message?.type ?? message?._getType?.()) === "tool" && this.calls.has(message.tool_call_id)).flatMap((message) => this.toolResult(message));
|
|
56
|
+
}
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
toolResult(message) {
|
|
60
|
+
const id = message?.tool_call_id;
|
|
61
|
+
if (!id || this.results.has(id)) return [];
|
|
62
|
+
this.results.add(id);
|
|
63
|
+
return [new AgentEvent(EventType.TOOL_RESULT, { id, name: message.name, result: message.content })];
|
|
64
|
+
}
|
|
65
|
+
endMessage(runId) {
|
|
66
|
+
const previous = this.messages.get(runId);
|
|
67
|
+
this.messages.delete(runId);
|
|
68
|
+
return previous ? [new AgentEvent(
|
|
69
|
+
previous.event === EventType.TEXT ? EventType.TEXT_END : EventType.REASONING_END,
|
|
70
|
+
{ message_id: previous.data.message_id }
|
|
71
|
+
)] : [];
|
|
72
|
+
}
|
|
73
|
+
withMessageIds(runId, events) {
|
|
74
|
+
const converted = [];
|
|
75
|
+
for (const event of events) {
|
|
76
|
+
const previous = this.messages.get(runId);
|
|
77
|
+
let messageId = previous?.data.message_id;
|
|
78
|
+
if (!previous || previous.event !== event.event) {
|
|
79
|
+
converted.push(...this.endMessage(runId));
|
|
80
|
+
const segment = (this.segments.get(runId) ?? 0) + 1;
|
|
81
|
+
this.segments.set(runId, segment);
|
|
82
|
+
messageId = `${runId}:${segment}`;
|
|
83
|
+
}
|
|
84
|
+
const identified = new AgentEvent(event.event, { ...event.data, message_id: messageId });
|
|
85
|
+
this.messages.set(runId, identified);
|
|
86
|
+
converted.push(identified);
|
|
87
|
+
}
|
|
88
|
+
return converted;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
var GoogleADKEventConverter = class extends EventConverter {
|
|
92
|
+
partial = /* @__PURE__ */ new Set();
|
|
93
|
+
calls = /* @__PURE__ */ new Set();
|
|
94
|
+
convert(event) {
|
|
95
|
+
if (event.errorCode) return [new AgentEvent(EventType.ERROR, { code: event.errorCode, message: event.errorMessage })];
|
|
96
|
+
const events = [], author = event.author;
|
|
97
|
+
for (const part of event.content?.parts ?? []) {
|
|
98
|
+
if (part.text && (event.partial || !this.partial.has(author))) events.push(new AgentEvent(
|
|
99
|
+
part.thought ? EventType.REASONING : EventType.TEXT,
|
|
100
|
+
{ delta: part.text }
|
|
101
|
+
));
|
|
102
|
+
const call = part.functionCall;
|
|
103
|
+
if (call && !this.calls.has(call.id)) {
|
|
104
|
+
this.calls.add(call.id);
|
|
105
|
+
events.push(new AgentEvent(EventType.TOOL_CALL, { id: call.id, name: call.name, args: call.args }));
|
|
106
|
+
}
|
|
107
|
+
const result = part.functionResponse;
|
|
108
|
+
if (result) events.push(new AgentEvent(EventType.TOOL_RESULT, { id: result.id, name: result.name, result: result.response }));
|
|
109
|
+
}
|
|
110
|
+
if (event.partial) this.partial.add(author);
|
|
111
|
+
else {
|
|
112
|
+
this.partial.delete(author);
|
|
113
|
+
events.push(endText(), new AgentEvent(EventType.REASONING_END, {}));
|
|
114
|
+
}
|
|
115
|
+
return events;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
var AISDKEventConverter = class extends EventConverter {
|
|
119
|
+
textId;
|
|
120
|
+
convert(event) {
|
|
121
|
+
switch (event.type) {
|
|
122
|
+
case "text-start":
|
|
123
|
+
this.textId = randomUUID();
|
|
124
|
+
return [];
|
|
125
|
+
case "text-delta":
|
|
126
|
+
return [new AgentEvent(EventType.TEXT, { delta: event.text, message_id: this.textId })];
|
|
127
|
+
case "text-end":
|
|
128
|
+
return [endText()];
|
|
129
|
+
case "reasoning-delta":
|
|
130
|
+
return [new AgentEvent(EventType.REASONING, { delta: event.text })];
|
|
131
|
+
case "reasoning-end":
|
|
132
|
+
return [new AgentEvent(EventType.REASONING_END, {})];
|
|
133
|
+
case "tool-call":
|
|
134
|
+
return [new AgentEvent(EventType.TOOL_CALL, { id: event.toolCallId, name: event.toolName, args: event.input })];
|
|
135
|
+
case "tool-result":
|
|
136
|
+
return [new AgentEvent(EventType.TOOL_RESULT, { id: event.toolCallId, name: event.toolName, result: event.output })];
|
|
137
|
+
case "tool-error":
|
|
138
|
+
return [new AgentEvent(EventType.TOOL_RESULT, { id: event.toolCallId, name: event.toolName, result: String(event.error) })];
|
|
139
|
+
case "error":
|
|
140
|
+
throw event.error;
|
|
141
|
+
default:
|
|
142
|
+
return [];
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
var MastraEventConverter = class extends EventConverter {
|
|
147
|
+
textId;
|
|
148
|
+
convert(event) {
|
|
149
|
+
const data = event.payload ?? {};
|
|
150
|
+
switch (event.type) {
|
|
151
|
+
case "text-start":
|
|
152
|
+
this.textId = randomUUID();
|
|
153
|
+
return [];
|
|
154
|
+
case "text-delta":
|
|
155
|
+
return [new AgentEvent(EventType.TEXT, { delta: data.text, message_id: this.textId })];
|
|
156
|
+
case "text-end":
|
|
157
|
+
return [endText()];
|
|
158
|
+
case "reasoning-delta":
|
|
159
|
+
return [new AgentEvent(EventType.REASONING, { delta: data.text })];
|
|
160
|
+
case "reasoning-end":
|
|
161
|
+
return [new AgentEvent(EventType.REASONING_END, {})];
|
|
162
|
+
case "tool-call":
|
|
163
|
+
return [new AgentEvent(EventType.TOOL_CALL, { id: data.toolCallId, name: data.toolName, args: data.args })];
|
|
164
|
+
case "tool-result":
|
|
165
|
+
return [new AgentEvent(EventType.TOOL_RESULT, { id: data.toolCallId, name: data.toolName, result: data.result })];
|
|
166
|
+
case "error":
|
|
167
|
+
throw data.error;
|
|
168
|
+
default:
|
|
169
|
+
return [];
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
export {
|
|
175
|
+
LangChainEventConverter,
|
|
176
|
+
GoogleADKEventConverter,
|
|
177
|
+
AISDKEventConverter,
|
|
178
|
+
MastraEventConverter
|
|
179
|
+
};
|
|
180
|
+
//# sourceMappingURL=chunk-WKZUYPDS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/integrations/event-converters.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { AgentEvent, EventType } from '../server/model';\n\n// These adapters accept native framework events, including framework extension fields.\ntype NativeEvent = Record<string, any>;\nconst endText = () => new AgentEvent(EventType.TEXT_END, {});\nfunction messageEvents(message: any): AgentEvent[] {\n const blocks = message?.contentBlocks ?? (typeof message?.content === 'string'\n ? [{ type: 'text', text: message.content }] : message?.content ?? []);\n return blocks.flatMap((block: any) => {\n if (block.type !== 'text' && block.type !== 'reasoning') return [];\n const delta = block.type === 'text' ? block.text : block.reasoning;\n return delta ? [new AgentEvent(block.type === 'text' ? EventType.TEXT : EventType.REASONING,\n { delta })] : [];\n });\n}\n\nabstract class EventConverter {\n abstract convert(event: NativeEvent): AgentEvent[];\n /** One converter per invocation; supply the entire framework event stream. */\n async *stream(events: AsyncIterable<NativeEvent>): AsyncGenerator<AgentEvent> {\n for await (const event of events) yield* this.convert(event);\n }\n}\n\n/** streamEvents(version: 'v2'); emit complete arguments once at model end. */\nexport class LangChainEventConverter extends EventConverter {\n private readonly streamed = new Map<string, Set<string>>();\n private readonly messages = new Map<string, AgentEvent>();\n private readonly segments = new Map<string, number>();\n private readonly calls = new Set<string>();\n private readonly results = new Set<string>();\n convert(event: NativeEvent): AgentEvent[] {\n const data = event.data ?? {}, runId = event.run_id;\n if (event.event === 'on_chat_model_stream') {\n const events = messageEvents(data.chunk);\n const kinds = this.streamed.get(runId) ?? new Set<string>();\n events.forEach(e => kinds.add(e.type));\n this.streamed.set(runId, kinds);\n return this.withMessageIds(runId, events);\n } else if (event.event === 'on_chat_model_end') {\n const output = data.output, streamed = this.streamed.get(runId);\n const events = this.withMessageIds(runId, messageEvents(output).filter(e => !streamed?.has(e.type)));\n this.streamed.delete(runId);\n events.push(...this.endMessage(runId));\n this.segments.delete(runId);\n for (const call of output?.tool_calls ?? []) {\n this.calls.add(call.id);\n events.push(new AgentEvent(EventType.TOOL_CALL, { id: call.id, name: call.name, args: call.args }));\n }\n return events;\n } else if (event.event === 'on_tool_end') {\n return this.toolResult(data.output);\n } else if (event.event === 'on_chain_end') {\n // Handled ToolNode failures have no on_tool_end. Root snapshots repeat\n // results and history, so only forward calls observed in this invocation.\n const messages = Array.isArray(data.output) ? data.output : data.output?.messages ?? [];\n return messages.filter((message: any) => (message?.type ?? message?._getType?.()) === 'tool'\n && this.calls.has(message.tool_call_id)).flatMap((message: any) => this.toolResult(message));\n }\n return [];\n }\n private toolResult(message: any): AgentEvent[] {\n const id = message?.tool_call_id;\n if (!id || this.results.has(id)) return [];\n this.results.add(id);\n return [new AgentEvent(EventType.TOOL_RESULT, { id, name: message.name, result: message.content })];\n }\n private endMessage(runId: string): AgentEvent[] {\n const previous = this.messages.get(runId);\n this.messages.delete(runId);\n return previous ? [new AgentEvent(previous.event === EventType.TEXT ? EventType.TEXT_END : EventType.REASONING_END,\n { message_id: previous.data.message_id })] : [];\n }\n private withMessageIds(runId: string, events: AgentEvent[]): AgentEvent[] {\n const converted: AgentEvent[] = [];\n for (const event of events) {\n const previous = this.messages.get(runId);\n let messageId = previous?.data.message_id;\n if (!previous || previous.event !== event.event) {\n converted.push(...this.endMessage(runId));\n const segment = (this.segments.get(runId) ?? 0) + 1;\n this.segments.set(runId, segment);\n messageId = `${runId}:${segment}`;\n }\n const identified = new AgentEvent(event.event, { ...event.data, message_id: messageId });\n this.messages.set(runId, identified);\n converted.push(identified);\n }\n return converted;\n }\n}\n\n/** ADK runAsync events; final snapshots must not duplicate partial text. */\nexport class GoogleADKEventConverter extends EventConverter {\n private readonly partial = new Set<string>();\n private readonly calls = new Set<string>();\n convert(event: NativeEvent): AgentEvent[] {\n if (event.errorCode) return [new AgentEvent(EventType.ERROR, { code: event.errorCode, message: event.errorMessage })];\n const events: AgentEvent[] = [], author = event.author;\n for (const part of event.content?.parts ?? []) {\n if (part.text && (event.partial || !this.partial.has(author))) events.push(new AgentEvent(\n part.thought ? EventType.REASONING : EventType.TEXT, { delta: part.text },\n ));\n const call = part.functionCall;\n if (call && !this.calls.has(call.id)) {\n this.calls.add(call.id);\n events.push(new AgentEvent(EventType.TOOL_CALL, { id: call.id, name: call.name, args: call.args }));\n }\n const result = part.functionResponse;\n if (result) events.push(new AgentEvent(EventType.TOOL_RESULT, { id: result.id, name: result.name, result: result.response }));\n }\n if (event.partial) this.partial.add(author);\n else {\n this.partial.delete(author);\n events.push(endText(), new AgentEvent(EventType.REASONING_END, {}));\n }\n return events;\n }\n}\n\n/** Vercel AI SDK fullStream. TextStream alone has already lost tool events. */\nexport class AISDKEventConverter extends EventConverter {\n private textId?: string;\n convert(event: NativeEvent): AgentEvent[] {\n switch (event.type) {\n case 'text-start': this.textId = randomUUID(); return [];\n case 'text-delta': return [new AgentEvent(EventType.TEXT, { delta: event.text, message_id: this.textId })];\n case 'text-end': return [endText()];\n case 'reasoning-delta': return [new AgentEvent(EventType.REASONING, { delta: event.text })];\n case 'reasoning-end': return [new AgentEvent(EventType.REASONING_END, {})];\n case 'tool-call': return [new AgentEvent(EventType.TOOL_CALL, { id: event.toolCallId, name: event.toolName, args: event.input })];\n case 'tool-result': return [new AgentEvent(EventType.TOOL_RESULT, { id: event.toolCallId, name: event.toolName, result: event.output })];\n case 'tool-error': return [new AgentEvent(EventType.TOOL_RESULT, { id: event.toolCallId, name: event.toolName, result: String(event.error) })];\n case 'error': throw event.error;\n default: return [];\n }\n }\n}\n\n/** Mastra fullStream has payload-wrapped events, unlike AI SDK fullStream. */\nexport class MastraEventConverter extends EventConverter {\n private textId?: string;\n convert(event: NativeEvent): AgentEvent[] {\n const data = event.payload ?? {};\n switch (event.type) {\n case 'text-start': this.textId = randomUUID(); return [];\n case 'text-delta': return [new AgentEvent(EventType.TEXT, { delta: data.text, message_id: this.textId })];\n case 'text-end': return [endText()];\n case 'reasoning-delta': return [new AgentEvent(EventType.REASONING, { delta: data.text })];\n case 'reasoning-end': return [new AgentEvent(EventType.REASONING_END, {})];\n case 'tool-call': return [new AgentEvent(EventType.TOOL_CALL, { id: data.toolCallId, name: data.toolName, args: data.args })];\n case 'tool-result': return [new AgentEvent(EventType.TOOL_RESULT, { id: data.toolCallId, name: data.toolName, result: data.result })];\n case 'error': throw data.error;\n default: return [];\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkJSP7ZROScjs = require('./chunk-JSP7ZROS.cjs');
|
|
4
|
+
|
|
5
|
+
// src/http.ts
|
|
6
|
+
async function readBytes(response, maxBytes, label) {
|
|
7
|
+
if (!response.body) return new Uint8Array();
|
|
8
|
+
const reader = response.body.getReader();
|
|
9
|
+
const chunks = [];
|
|
10
|
+
let size = 0;
|
|
11
|
+
try {
|
|
12
|
+
for (; ; ) {
|
|
13
|
+
const result = await reader.read();
|
|
14
|
+
if (result.done) break;
|
|
15
|
+
size += result.value.length;
|
|
16
|
+
if (size > maxBytes) throw new (0, _chunkJSP7ZROScjs.ConfigError)(`${label} exceeds the ${maxBytes} byte size limit`);
|
|
17
|
+
chunks.push(result.value);
|
|
18
|
+
}
|
|
19
|
+
} finally {
|
|
20
|
+
await reader.cancel().catch(() => void 0);
|
|
21
|
+
reader.releaseLock();
|
|
22
|
+
}
|
|
23
|
+
return Buffer.concat(chunks, size);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
exports.readBytes = readBytes;
|
|
29
|
+
//# sourceMappingURL=chunk-YZP55W7S.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-YZP55W7S.cjs","../src/http.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACDA,MAAA,SAAsB,SAAA,CAAU,QAAA,EAAoB,QAAA,EAAkB,KAAA,EAAoC;AACxG,EAAA,GAAA,CAAI,CAAC,QAAA,CAAS,IAAA,EAAM,OAAO,IAAI,UAAA,CAAW,CAAA;AAC1C,EAAA,MAAM,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU,CAAA;AACvC,EAAA,MAAM,OAAA,EAAuB,CAAC,CAAA;AAC9B,EAAA,IAAI,KAAA,EAAO,CAAA;AACX,EAAA,IAAI;AACF,IAAA,IAAA,CAAA,EAAA,EAAA,EAAS;AACP,MAAA,MAAM,OAAA,EAAS,MAAM,MAAA,CAAO,IAAA,CAAK,CAAA;AACjC,MAAA,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,KAAA;AACjB,MAAA,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,MAAA;AACrB,MAAA,GAAA,CAAI,KAAA,EAAO,QAAA,EAAU,MAAM,IAAI,kCAAA,CAAY,CAAA,EAAA;AACnB,MAAA;AAC1B,IAAA;AACA,EAAA;AAAqD,IAAA;AAAsB,IAAA;AAAG,EAAA;AAC/C,EAAA;AACnC;ADMkD;AACA;AACA;AACA","file":"/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-YZP55W7S.cjs","sourcesContent":[null,"import { ConfigError } from './errors';\n\n/** Read a bounded body without retaining a credential-bearing URL in errors. */\nexport async function readBytes(response: Response, maxBytes: number, label: string): Promise<Uint8Array> {\n if (!response.body) return new Uint8Array();\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let size = 0;\n try {\n for (;;) {\n const result = await reader.read();\n if (result.done) break;\n size += result.value.length;\n if (size > maxBytes) throw new ConfigError(`${label} exceeds the ${maxBytes} byte size limit`);\n chunks.push(result.value);\n }\n } finally { await reader.cancel().catch(() => undefined); reader.releaseLock(); }\n return Buffer.concat(chunks, size);\n}\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/server/model.ts
|
|
2
|
+
var EventType = {
|
|
3
|
+
TEXT: "TEXT",
|
|
4
|
+
TEXT_END: "TEXT_END",
|
|
5
|
+
REASONING: "REASONING",
|
|
6
|
+
REASONING_END: "REASONING_END",
|
|
7
|
+
TOOL_CALL: "TOOL_CALL",
|
|
8
|
+
TOOL_CALL_CHUNK: "TOOL_CALL_CHUNK",
|
|
9
|
+
TOOL_RESULT: "TOOL_RESULT",
|
|
10
|
+
ERROR: "ERROR"
|
|
11
|
+
};
|
|
12
|
+
var AgentEvent = class {
|
|
13
|
+
constructor(event, data) {
|
|
14
|
+
this.event = event;
|
|
15
|
+
this.data = data;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
get type() {
|
|
20
|
+
return this.event;
|
|
21
|
+
}
|
|
22
|
+
toJSON() {
|
|
23
|
+
return { ...this.data, type: this.event };
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
exports.EventType = EventType; exports.AgentEvent = AgentEvent;
|
|
31
|
+
//# sourceMappingURL=chunk-ZELRQU4J.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-ZELRQU4J.cjs","../src/server/model.ts"],"names":[],"mappings":"AAAA;ACqBO,IAAM,UAAA,EAAY;AAAA,EACvB,IAAA,EAAM,MAAA;AAAA,EAAQ,QAAA,EAAU,UAAA;AAAA,EAAY,SAAA,EAAW,WAAA;AAAA,EAAa,aAAA,EAAe,eAAA;AAAA,EAAiB,SAAA,EAAW,WAAA;AAAA,EACvG,eAAA,EAAiB,iBAAA;AAAA,EAAmB,WAAA,EAAa,aAAA;AAAA,EAAe,KAAA,EAAO;AACzE,CAAA;AACO,IAAM,WAAA,EAAN,MAAiB;AAAA,EACtB,WAAA,CAAqB,KAAA,EAAwB,IAAA,EAA+B;AAAvD,IAAA,IAAA,CAAA,MAAA,EAAA,KAAA;AAAwB,IAAA,IAAA,CAAA,KAAA,EAAA,IAAA;AAAA,EAAgC;AAAA,EAAxD;AAAA,EAAwB;AAAA,EAC7C,IAAI,IAAA,CAAA,EAAe;AAAE,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EAAO;AAAA,EACxC,MAAA,CAAA,EAAkC;AAAE,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA;AAAA,EAAG;AACjF,CAAA;ADJA;AACA;AACE;AACA;AACF,+DAAC","file":"/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-ZELRQU4J.cjs","sourcesContent":[null,"export type MessageRole = 'developer' | 'system' | 'user' | 'assistant' | 'tool' | 'activity' | 'reasoning';\nexport interface ToolCall { id: string; type: string; function: Record<string, unknown>; }\nexport interface Message {\n role: MessageRole;\n content?: string | ReadonlyArray<Record<string, unknown>> | null;\n id?: string;\n name?: string;\n toolCalls?: ToolCall[];\n toolCallId?: string;\n}\nexport interface AgentTool { name: string; description: string; parameters: Record<string, unknown>; }\nexport interface AgentRequest {\n protocol: string;\n messages: Message[];\n tools?: AgentTool[];\n stream: boolean;\n rawRequest: Request;\n rawPayload: Record<string, unknown>;\n /** Forward this signal to model/tool calls and any long-running application work. */\n signal: AbortSignal;\n}\nexport const EventType = {\n TEXT: 'TEXT', TEXT_END: 'TEXT_END', REASONING: 'REASONING', REASONING_END: 'REASONING_END', TOOL_CALL: 'TOOL_CALL',\n TOOL_CALL_CHUNK: 'TOOL_CALL_CHUNK', TOOL_RESULT: 'TOOL_RESULT', ERROR: 'ERROR',\n} as const;\nexport class AgentEvent {\n constructor(readonly event: string, readonly data: Record<string, unknown>) {}\n get type(): string { return this.event; }\n toJSON(): Record<string, unknown> { return { ...this.data, type: this.event }; }\n}\nexport type AgentOutput = string | AgentEvent | undefined | null;\nexport type AgentResult = AgentOutput | Iterable<AgentOutput> | AsyncIterable<AgentOutput>;\n"]}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Tool
|
|
3
|
+
} from "./chunk-EKXZKKJJ.js";
|
|
4
|
+
import {
|
|
5
|
+
nullLogger
|
|
6
|
+
} from "./chunk-NZL3VPJ2.js";
|
|
7
|
+
import {
|
|
8
|
+
ConfigError
|
|
9
|
+
} from "./chunk-MZ5UWGXS.js";
|
|
10
|
+
|
|
11
|
+
// src/skill/tools.ts
|
|
12
|
+
import { spawn } from "child_process";
|
|
13
|
+
import { lstat, readFile, readdir, realpath, stat } from "fs/promises";
|
|
14
|
+
import { dirname, isAbsolute, join, relative, resolve, sep } from "path";
|
|
15
|
+
function skillTools(skills, options = {}) {
|
|
16
|
+
const timeout = options.commandTimeoutSeconds ?? 300;
|
|
17
|
+
if (!Number.isInteger(timeout) || timeout <= 0) throw new ConfigError("command timeout must be a positive integer");
|
|
18
|
+
const selected = new Map(skills.map((skill) => [skill.name, skill]));
|
|
19
|
+
if (selected.size !== skills.length) throw new ConfigError("selected Skills must have unique names");
|
|
20
|
+
const missing = (name) => JSON.stringify({ error: `Skill '${String(name)}' not found. Available skills: ${[...selected.keys()].join(", ") || "none"}` });
|
|
21
|
+
const tools = [new Tool({
|
|
22
|
+
name: "load_skills",
|
|
23
|
+
description: `Load skill instructions for the agent. Call without arguments to list all available skills, or with a skill name to get detailed instructions.
|
|
24
|
+
|
|
25
|
+
Available skills:
|
|
26
|
+
${skills.map((s) => `- ${s.name}: ${s.description}`).join("\n")}`,
|
|
27
|
+
parameters: { type: "object", properties: { name: { type: "string", description: "The name of the skill to load. If omitted, returns all available skills." } } },
|
|
28
|
+
invoke: async ({ name }) => {
|
|
29
|
+
if (name === void 0 || name === null || name === "") return JSON.stringify({ skills: skills.map(({ name: name2, description }) => ({ name: name2, description })) });
|
|
30
|
+
const skill = typeof name === "string" ? selected.get(name) : void 0;
|
|
31
|
+
if (!skill) return missing(name);
|
|
32
|
+
return JSON.stringify({ name: skill.name, description: skill.description, instruction: skill.instruction, files: await list(skill.root) });
|
|
33
|
+
}
|
|
34
|
+
}), new Tool({
|
|
35
|
+
name: "read_skill_file",
|
|
36
|
+
description: "Read a file from a skill's directory, or list the directory when the relative path points to a directory.",
|
|
37
|
+
parameters: { type: "object", properties: { name: { type: "string" }, relative_path: { type: "string" } }, required: ["name", "relative_path"] },
|
|
38
|
+
invoke: async ({ name, relative_path: resource }) => {
|
|
39
|
+
const skill = typeof name === "string" ? selected.get(name) : void 0;
|
|
40
|
+
if (!skill) return missing(name);
|
|
41
|
+
if (typeof resource !== "string") return JSON.stringify({ error: "relative_path must be a string" });
|
|
42
|
+
try {
|
|
43
|
+
if (isAbsolute(resource) || resource.split(/[\\/]/).includes("..")) throw new Error("Path is outside the skill directory. Access denied.");
|
|
44
|
+
const path = join(skill.root, resource);
|
|
45
|
+
const target = await realpath(path);
|
|
46
|
+
const root = await realpath(skill.root);
|
|
47
|
+
const relation = relative(root, target);
|
|
48
|
+
if (relation === ".." || relation.startsWith(`..${sep}`) || isAbsolute(relation) || (await lstat(path)).isSymbolicLink()) throw new Error("Path is outside the skill directory. Access denied.");
|
|
49
|
+
if ((await stat(path)).isDirectory()) return JSON.stringify({ files: await list(path) });
|
|
50
|
+
return JSON.stringify({ content: new TextDecoder("utf8", { fatal: true }).decode(await readFile(path)) });
|
|
51
|
+
} catch (error) {
|
|
52
|
+
return JSON.stringify({ error: error instanceof Error ? error.message : "Failed to read skill file" });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
})];
|
|
56
|
+
if ((process.env.ALLOW_EXECUTE_COMMAND ?? "true").toLowerCase() !== "false") tools.push(new Tool({
|
|
57
|
+
name: "execute_command",
|
|
58
|
+
description: "Execute a shell command in the Agent container for a selected Skill. Before calling this tool, display the exact command and ask the user for confirmation. Returns stdout, stderr, exit_code, and timeout status.",
|
|
59
|
+
parameters: { type: "object", properties: { command: { type: "string" }, cwd: { type: "string", description: "Optional working directory." }, timeout: { type: "integer", description: "Optional timeout in seconds." } }, required: ["command"] },
|
|
60
|
+
invoke: (args) => execute(args, defaultDirectory(skills), timeout, options)
|
|
61
|
+
}));
|
|
62
|
+
return tools;
|
|
63
|
+
}
|
|
64
|
+
async function list(root) {
|
|
65
|
+
return (await readdir(root, { withFileTypes: true })).filter((e) => !e.name.startsWith(".")).map((e) => e.name + (e.isDirectory() ? "/" : "")).sort();
|
|
66
|
+
}
|
|
67
|
+
function defaultDirectory(skills) {
|
|
68
|
+
if (skills.length === 1) return skills[0].root;
|
|
69
|
+
if (skills.length && skills[0].workspaceId && skills.every((s) => s.source === "agentcore" && s.workspaceId === skills[0].workspaceId)) {
|
|
70
|
+
let common = resolve(skills[0].root);
|
|
71
|
+
for (const skill of skills.slice(1)) while (relative(common, skill.root).startsWith(`..${sep}`) || relative(common, skill.root) === "..") common = dirname(common);
|
|
72
|
+
return common;
|
|
73
|
+
}
|
|
74
|
+
if (skills.length && skills.every((s) => dirname(s.root) === dirname(skills[0].root))) return dirname(skills[0].root);
|
|
75
|
+
return process.cwd();
|
|
76
|
+
}
|
|
77
|
+
async function execute(args, defaultCwd, defaultTimeout, options) {
|
|
78
|
+
const { command, cwd = defaultCwd, timeout = defaultTimeout } = args;
|
|
79
|
+
if (typeof command !== "string" || !command) return JSON.stringify({ error: "command must be a non-empty string" });
|
|
80
|
+
if (typeof timeout !== "number" || !Number.isInteger(timeout) || timeout <= 0) return JSON.stringify({ error: "timeout must be a positive integer" });
|
|
81
|
+
try {
|
|
82
|
+
if (typeof cwd !== "string" || !(await stat(cwd)).isDirectory()) throw new Error("Working directory does not exist");
|
|
83
|
+
if (options.commandApproval && !await options.commandApproval(command, cwd)) return JSON.stringify({ error: "Command execution rejected by user." });
|
|
84
|
+
const logger = options.logger ?? nullLogger;
|
|
85
|
+
logger.info("agentcore.skill.command.started", { cwd, timeout_seconds: timeout });
|
|
86
|
+
const result = await runCommand(command, cwd, timeout);
|
|
87
|
+
logger.info("agentcore.skill.command.completed", { cwd, exit_code: result.exit_code, timed_out: result.timed_out });
|
|
88
|
+
return JSON.stringify(result);
|
|
89
|
+
} catch (error) {
|
|
90
|
+
return JSON.stringify({ error: error instanceof Error ? error.message : "Failed to execute command" });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function runCommand(command, cwd, timeout) {
|
|
94
|
+
return new Promise((accept, reject) => {
|
|
95
|
+
const child = spawn(command, { shell: true, cwd, detached: process.platform !== "win32", stdio: ["ignore", "pipe", "pipe"] });
|
|
96
|
+
const limit = 100 * 1024;
|
|
97
|
+
const output = [Buffer.alloc(0), Buffer.alloc(0)];
|
|
98
|
+
const truncated = [false, false];
|
|
99
|
+
for (const [index, stream] of [child.stdout, child.stderr].entries()) stream.on("data", (chunk) => {
|
|
100
|
+
const remaining = limit - output[index].length;
|
|
101
|
+
if (chunk.length > remaining) truncated[index] = true;
|
|
102
|
+
if (remaining > 0) output[index] = Buffer.concat([output[index], chunk.subarray(0, remaining)]);
|
|
103
|
+
});
|
|
104
|
+
let timedOut = false;
|
|
105
|
+
let killTimer;
|
|
106
|
+
const signal = (value) => {
|
|
107
|
+
if (!child.pid) return;
|
|
108
|
+
try {
|
|
109
|
+
if (process.platform === "win32") child.kill(value);
|
|
110
|
+
else process.kill(-child.pid, value);
|
|
111
|
+
} catch (error) {
|
|
112
|
+
if (error.code !== "ESRCH") child.kill(value);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
const timer = setTimeout(() => {
|
|
116
|
+
timedOut = true;
|
|
117
|
+
signal("SIGTERM");
|
|
118
|
+
killTimer = setTimeout(() => signal("SIGKILL"), 100);
|
|
119
|
+
}, timeout * 1e3);
|
|
120
|
+
child.on("error", (error) => {
|
|
121
|
+
clearTimeout(timer);
|
|
122
|
+
clearTimeout(killTimer);
|
|
123
|
+
reject(error);
|
|
124
|
+
});
|
|
125
|
+
child.on("close", (code) => {
|
|
126
|
+
clearTimeout(timer);
|
|
127
|
+
if (timedOut) {
|
|
128
|
+
clearTimeout(killTimer);
|
|
129
|
+
signal("SIGKILL");
|
|
130
|
+
}
|
|
131
|
+
const text = (index) => output[index].toString("utf8") + (truncated[index] ? `
|
|
132
|
+
... [output truncated, exceeded ${limit} bytes]` : "");
|
|
133
|
+
accept(timedOut ? { stdout: "", stderr: `Command timed out after ${timeout} seconds.`, exit_code: -1, timed_out: true } : { stdout: text(0), stderr: text(1), exit_code: code ?? -1, timed_out: false });
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export {
|
|
139
|
+
skillTools
|
|
140
|
+
};
|
|
141
|
+
//# sourceMappingURL=chunk-ZLKYXRNM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/skill/tools.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport { lstat, readFile, readdir, realpath, stat } from 'node:fs/promises';\nimport { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';\nimport { ConfigError } from '../errors';\nimport { Tool, type ToolArguments } from '../integrations/common';\nimport { nullLogger, type Logger } from '../logging';\nimport type { Skill } from './loader';\n\nexport interface SkillToolsOptions {\n commandApproval?: (command: string, cwd: string) => boolean | Promise<boolean>;\n commandTimeoutSeconds?: number;\n logger?: Logger;\n}\nexport function skillTools(skills: readonly Skill[], options: SkillToolsOptions = {}): Tool[] {\n const timeout = options.commandTimeoutSeconds ?? 300;\n if (!Number.isInteger(timeout) || timeout <= 0) throw new ConfigError('command timeout must be a positive integer');\n const selected = new Map(skills.map((skill) => [skill.name, skill]));\n if (selected.size !== skills.length) throw new ConfigError('selected Skills must have unique names');\n const missing = (name: unknown) => JSON.stringify({ error: `Skill '${String(name)}' not found. Available skills: ${[...selected.keys()].join(', ') || 'none'}` });\n const tools = [new Tool({\n name: 'load_skills', description: `Load skill instructions for the agent. Call without arguments to list all available skills, or with a skill name to get detailed instructions.\\n\\nAvailable skills:\\n${skills.map((s) => `- ${s.name}: ${s.description}`).join('\\n')}`,\n parameters: { type: 'object', properties: { name: { type: 'string', description: 'The name of the skill to load. If omitted, returns all available skills.' } } },\n invoke: async ({ name }) => {\n if (name === undefined || name === null || name === '') return JSON.stringify({ skills: skills.map(({ name, description }) => ({ name, description })) });\n const skill = typeof name === 'string' ? selected.get(name) : undefined;\n if (!skill) return missing(name);\n return JSON.stringify({ name: skill.name, description: skill.description, instruction: skill.instruction, files: await list(skill.root) });\n },\n }), new Tool({\n name: 'read_skill_file', description: \"Read a file from a skill's directory, or list the directory when the relative path points to a directory.\",\n parameters: { type: 'object', properties: { name: { type: 'string' }, relative_path: { type: 'string' } }, required: ['name', 'relative_path'] },\n invoke: async ({ name, relative_path: resource }) => {\n const skill = typeof name === 'string' ? selected.get(name) : undefined;\n if (!skill) return missing(name);\n if (typeof resource !== 'string') return JSON.stringify({ error: 'relative_path must be a string' });\n try {\n if (isAbsolute(resource) || resource.split(/[\\\\/]/).includes('..')) throw new Error('Path is outside the skill directory. Access denied.');\n const path = join(skill.root, resource); const target = await realpath(path); const root = await realpath(skill.root);\n const relation = relative(root, target);\n if (relation === '..' || relation.startsWith(`..${sep}`) || isAbsolute(relation) || (await lstat(path)).isSymbolicLink()) throw new Error('Path is outside the skill directory. Access denied.');\n if ((await stat(path)).isDirectory()) return JSON.stringify({ files: await list(path) });\n return JSON.stringify({ content: new TextDecoder('utf8', { fatal: true }).decode(await readFile(path)) });\n } catch (error) { return JSON.stringify({ error: error instanceof Error ? error.message : 'Failed to read skill file' }); }\n },\n })];\n if ((process.env.ALLOW_EXECUTE_COMMAND ?? 'true').toLowerCase() !== 'false') tools.push(new Tool({\n name: 'execute_command', description: 'Execute a shell command in the Agent container for a selected Skill. Before calling this tool, display the exact command and ask the user for confirmation. Returns stdout, stderr, exit_code, and timeout status.',\n parameters: { type: 'object', properties: { command: { type: 'string' }, cwd: { type: 'string', description: 'Optional working directory.' }, timeout: { type: 'integer', description: 'Optional timeout in seconds.' } }, required: ['command'] },\n invoke: (args) => execute(args, defaultDirectory(skills), timeout, options),\n }));\n return tools;\n}\nasync function list(root: string): Promise<string[]> {\n return (await readdir(root, { withFileTypes: true })).filter((e) => !e.name.startsWith('.')).map((e) => e.name + (e.isDirectory() ? '/' : '')).sort();\n}\nfunction defaultDirectory(skills: readonly Skill[]): string {\n if (skills.length === 1) return skills[0]!.root;\n if (skills.length && skills[0]!.workspaceId && skills.every((s) => s.source === 'agentcore' && s.workspaceId === skills[0]!.workspaceId)) {\n let common = resolve(skills[0]!.root);\n for (const skill of skills.slice(1)) while (relative(common, skill.root).startsWith(`..${sep}`) || relative(common, skill.root) === '..') common = dirname(common);\n return common;\n }\n if (skills.length && skills.every((s) => dirname(s.root) === dirname(skills[0]!.root))) return dirname(skills[0]!.root);\n return process.cwd();\n}\nasync function execute(args: ToolArguments, defaultCwd: string, defaultTimeout: number, options: SkillToolsOptions): Promise<string> {\n const { command, cwd = defaultCwd, timeout = defaultTimeout } = args;\n if (typeof command !== 'string' || !command) return JSON.stringify({ error: 'command must be a non-empty string' });\n if (typeof timeout !== 'number' || !Number.isInteger(timeout) || timeout <= 0) return JSON.stringify({ error: 'timeout must be a positive integer' });\n try {\n if (typeof cwd !== 'string' || !(await stat(cwd)).isDirectory()) throw new Error('Working directory does not exist');\n if (options.commandApproval && !await options.commandApproval(command, cwd)) return JSON.stringify({ error: 'Command execution rejected by user.' });\n const logger = options.logger ?? nullLogger;\n logger.info('agentcore.skill.command.started', { cwd, timeout_seconds: timeout });\n const result = await runCommand(command, cwd, timeout);\n logger.info('agentcore.skill.command.completed', { cwd, exit_code: result.exit_code, timed_out: result.timed_out });\n return JSON.stringify(result);\n } catch (error) { return JSON.stringify({ error: error instanceof Error ? error.message : 'Failed to execute command' }); }\n}\nfunction runCommand(command: string, cwd: string, timeout: number): Promise<{ stdout: string; stderr: string; exit_code: number; timed_out: boolean }> {\n return new Promise((accept, reject) => {\n const child = spawn(command, { shell: true, cwd, detached: process.platform !== 'win32', stdio: ['ignore', 'pipe', 'pipe'] });\n const limit = 100 * 1024;\n const output = [Buffer.alloc(0), Buffer.alloc(0)]; const truncated = [false, false];\n for (const [index, stream] of [child.stdout, child.stderr].entries()) stream.on('data', (chunk: Buffer) => {\n const remaining = limit - output[index]!.length;\n if (chunk.length > remaining) truncated[index] = true;\n if (remaining > 0) output[index] = Buffer.concat([output[index]!, chunk.subarray(0, remaining)]);\n });\n let timedOut = false; let killTimer: ReturnType<typeof setTimeout> | undefined;\n const signal = (value: NodeJS.Signals) => {\n if (!child.pid) return;\n try { if (process.platform === 'win32') child.kill(value); else process.kill(-child.pid, value); }\n catch (error) { if ((error as NodeJS.ErrnoException).code !== 'ESRCH') child.kill(value); }\n };\n const timer = setTimeout(() => { timedOut = true; signal('SIGTERM'); killTimer = setTimeout(() => signal('SIGKILL'), 100); }, timeout * 1000);\n child.on('error', (error) => { clearTimeout(timer); clearTimeout(killTimer); reject(error); });\n child.on('close', (code) => {\n clearTimeout(timer);\n // Even if the shell exits first, kill any remaining children of a timed-out command.\n if (timedOut) { clearTimeout(killTimer); signal('SIGKILL'); }\n const text = (index: number) => output[index]!.toString('utf8') + (truncated[index] ? `\\n... [output truncated, exceeded ${limit} bytes]` : '');\n accept(timedOut ? { stdout: '', stderr: `Command timed out after ${timeout} seconds.`, exit_code: -1, timed_out: true }\n : { stdout: text(0), stderr: text(1), exit_code: code ?? -1, timed_out: false });\n });\n });\n}\n"],"mappings":"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","names":["name"]}
|
|
@@ -0,0 +1,110 @@
|
|
|
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 _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkLXHW6OT4cjs = require('./chunk-LXHW6OT4.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkA3WMLVJCcjs = require('./chunk-A3WMLVJC.cjs');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunkJSP7ZROScjs = require('./chunk-JSP7ZROS.cjs');
|
|
13
|
+
|
|
14
|
+
// src/integrations/langgraph.ts
|
|
15
|
+
var _messages = require('@langchain/core/messages');
|
|
16
|
+
|
|
17
|
+
// src/integrations/langchain-adapter.ts
|
|
18
|
+
var _tools = require('@langchain/core/tools');
|
|
19
|
+
async function model(client, options = {}) {
|
|
20
|
+
if ("languageModel" in client) {
|
|
21
|
+
const { ProviderChatModel } = await Promise.resolve().then(() => _interopRequireWildcard(require("./langchain-provider-NF5GIDQV.cjs")));
|
|
22
|
+
return new ProviderChatModel(client, options);
|
|
23
|
+
}
|
|
24
|
+
const { provider, model: model2, baseURL, maxTokens } = client.settings;
|
|
25
|
+
const fetch = client.httpFetch.bind(client);
|
|
26
|
+
if (provider === "anthropic") {
|
|
27
|
+
const { ChatAnthropic } = await Promise.resolve().then(() => _interopRequireWildcard(require("@langchain/anthropic")));
|
|
28
|
+
return new ChatAnthropic({
|
|
29
|
+
streamUsage: true,
|
|
30
|
+
maxTokens,
|
|
31
|
+
...options,
|
|
32
|
+
model: model2,
|
|
33
|
+
apiKey: "agentcore-transport",
|
|
34
|
+
anthropicApiUrl: baseURL,
|
|
35
|
+
maxRetries: 0,
|
|
36
|
+
clientOptions: { baseURL, fetch }
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
const { ChatOpenAI } = await Promise.resolve().then(() => _interopRequireWildcard(require("@langchain/openai")));
|
|
40
|
+
return new ChatOpenAI({
|
|
41
|
+
streamUsage: true,
|
|
42
|
+
useResponsesApi: false,
|
|
43
|
+
maxTokens,
|
|
44
|
+
...options,
|
|
45
|
+
model: model2,
|
|
46
|
+
apiKey: "agentcore-transport",
|
|
47
|
+
maxRetries: 0,
|
|
48
|
+
configuration: { baseURL, fetch }
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function tools(values) {
|
|
52
|
+
return values.map((value) => _tools.tool.call(void 0, (args) => value.invoke(args), {
|
|
53
|
+
// LangChain's JSON Schema validator annotates its schema during dereferencing.
|
|
54
|
+
name: value.name,
|
|
55
|
+
description: value.description,
|
|
56
|
+
schema: structuredClone(value.parameters)
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
function skillTools2(values, options = {}) {
|
|
60
|
+
return tools(_chunkA3WMLVJCcjs.skillTools.call(void 0, values, options));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// src/integrations/langgraph.ts
|
|
64
|
+
var AgentCoreMemoryNodes = class {
|
|
65
|
+
constructor(store, options = {}) {
|
|
66
|
+
this.store = store;
|
|
67
|
+
this.options = options;
|
|
68
|
+
this.topK = _nullishCoalesce(options.topK, () => ( 5));
|
|
69
|
+
_chunkLXHW6OT4cjs.validateTopK.call(void 0, this.topK);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
async recall(state) {
|
|
75
|
+
if (state.memoryQuery === void 0) throw new (0, _chunkJSP7ZROScjs.MemoryValidationError)("memoryQuery is required");
|
|
76
|
+
return { memoryText: await _chunkLXHW6OT4cjs.recallMemory.call(void 0, this.store, state.memoryQuery, state.memoryReadScope, { topK: this.topK, logger: this.options.logger }) };
|
|
77
|
+
}
|
|
78
|
+
async record(state) {
|
|
79
|
+
if (!Array.isArray(state.memoryMessages)) throw new (0, _chunkJSP7ZROScjs.MemoryValidationError)("memoryMessages must be an array");
|
|
80
|
+
await _chunkLXHW6OT4cjs.recordMemory.call(void 0, this.store, state.memoryMessages, state.memoryWriteScope, { logger: this.options.logger });
|
|
81
|
+
return { memoryMessages: [] };
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
function withMemory(messages, memoryText) {
|
|
85
|
+
const result = [...messages];
|
|
86
|
+
const note = _chunkLXHW6OT4cjs.referenceText.call(void 0, memoryText);
|
|
87
|
+
if (!note) return result;
|
|
88
|
+
const first = result[0];
|
|
89
|
+
if (_messages.SystemMessage.isInstance(first)) {
|
|
90
|
+
result[0] = new (0, _messages.SystemMessage)({
|
|
91
|
+
id: first.id,
|
|
92
|
+
name: first.name,
|
|
93
|
+
additional_kwargs: first.additional_kwargs,
|
|
94
|
+
response_metadata: first.response_metadata,
|
|
95
|
+
content: typeof first.content === "string" ? `${first.content}
|
|
96
|
+
|
|
97
|
+
${note}` : [...first.content, { type: "text", text: note }]
|
|
98
|
+
});
|
|
99
|
+
} else result.unshift(new (0, _messages.SystemMessage)(note));
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
exports.model = model; exports.tools = tools; exports.skillTools = skillTools2; exports.AgentCoreMemoryNodes = AgentCoreMemoryNodes; exports.withMemory = withMemory;
|
|
110
|
+
//# sourceMappingURL=chunk-ZLQ2IBTC.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-ZLQ2IBTC.cjs","../src/integrations/langgraph.ts","../src/integrations/langchain-adapter.ts"],"names":["model","skillTools"],"mappings":"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","file":"/Users/zhuoguang/Documents/Code/collaborate/hiclaw/agentcore-sdk-nodejs/dist/chunk-ZLQ2IBTC.cjs","sourcesContent":[null,"import { SystemMessage, type BaseMessage } from '@langchain/core/messages';\nimport { MemoryValidationError } from '../errors';\nimport type { MemoryStore, MemoryScope, MemoryMessage } from '../memory';\nimport type { Logger } from '../logging';\nimport { recallMemory, recordMemory, referenceText, validateTopK } from './memory/common';\nexport { model, tools, skillTools } from './langchain-adapter';\nexport type { LangChainModelOptions, LangChainProviderOptions } from './langchain-adapter';\n\nexport interface MemoryNodeState {\n memoryQuery?: string;\n memoryReadScope?: MemoryScope;\n memoryWriteScope?: MemoryScope;\n memoryMessages?: readonly MemoryMessage[];\n memoryText?: string;\n}\n\n/** Explicit graph nodes: the application owns state, turn boundaries and edges. */\nexport class AgentCoreMemoryNodes {\n private readonly topK: number;\n constructor(private readonly store: MemoryStore, private readonly options: { topK?: number; logger?: Logger } = {}) {\n this.topK = options.topK ?? 5; validateTopK(this.topK);\n }\n async recall(state: MemoryNodeState): Promise<{ memoryText: string }> {\n if (state.memoryQuery === undefined) throw new MemoryValidationError('memoryQuery is required');\n return { memoryText: await recallMemory(this.store, state.memoryQuery, state.memoryReadScope, { topK: this.topK, logger: this.options.logger }) };\n }\n async record(state: MemoryNodeState): Promise<{ memoryMessages: MemoryMessage[] }> {\n if (!Array.isArray(state.memoryMessages)) throw new MemoryValidationError('memoryMessages must be an array');\n await recordMemory(this.store, state.memoryMessages, state.memoryWriteScope, { logger: this.options.logger });\n return { memoryMessages: [] };\n }\n}\n\n/** Add reference data to model input without persisting it in graph history. */\nexport function withMemory(messages: readonly BaseMessage[], memoryText: string): BaseMessage[] {\n const result = [...messages]; const note = referenceText(memoryText);\n if (!note) return result;\n const first = result[0];\n if (SystemMessage.isInstance(first)) {\n result[0] = new SystemMessage({ id: first.id, name: first.name, additional_kwargs: first.additional_kwargs, response_metadata: first.response_metadata,\n content: typeof first.content === 'string' ? `${first.content}\\n\\n${note}` : [...first.content, { type: 'text', text: note }] });\n } else result.unshift(new SystemMessage(note));\n return result;\n}\nexport { LangChainEventConverter as AgentCoreConverter } from './event-converters';\n","import type { ChatOpenAIFields } from '@langchain/openai';\nimport type { ChatAnthropicInput } from '@langchain/anthropic';\nimport { tool, type StructuredToolInterface } from '@langchain/core/tools';\nimport type { JsonSchema7Type } from '@langchain/core/utils/json_schema';\nimport type { ModelClient, ProviderModelClient } from '../model';\nimport type { ProviderChatModel, LangChainProviderOptions } from './langchain-provider';\nimport type { Tool, ToolArguments } from './common';\nimport { skillTools as canonicalSkillTools, type Skill, type SkillToolsOptions } from '../skill';\n\ntype CoreOwnedFields = 'model' | 'modelName' | 'apiKey' | 'openAIApiKey' | 'anthropicApiKey'\n | 'anthropicApiUrl' | 'configuration' | 'clientOptions' | 'createClient' | 'completions' | 'responses' | 'maxRetries';\n/** Provider-specific generation options; identity and transport belong to ModelClient. */\nexport type LangChainModelOptions = Omit<ChatOpenAIFields, CoreOwnedFields> | Omit<ChatAnthropicInput, CoreOwnedFields>;\n\nexport type { LangChainProviderOptions } from './langchain-provider';\nexport function model(client: ModelClient, options?: LangChainModelOptions): Promise<import('@langchain/openai').ChatOpenAI | import('@langchain/anthropic').ChatAnthropic>;\nexport function model(client: ProviderModelClient, options?: LangChainProviderOptions): Promise<ProviderChatModel>;\nexport async function model(client: ModelClient | ProviderModelClient, options: LangChainModelOptions | LangChainProviderOptions = {}) {\n if ('languageModel' in client) {\n const { ProviderChatModel } = await import('./langchain-provider');\n return new ProviderChatModel(client, options as LangChainProviderOptions);\n }\n const { provider, model, baseURL, maxTokens } = client.settings;\n const fetch = client.httpFetch.bind(client);\n if (provider === 'anthropic') {\n const { ChatAnthropic } = await import('@langchain/anthropic');\n return new ChatAnthropic({ streamUsage: true, maxTokens,\n ...options as ChatAnthropicInput,\n model, apiKey: 'agentcore-transport', anthropicApiUrl: baseURL, maxRetries: 0,\n clientOptions: { baseURL, fetch },\n });\n }\n const { ChatOpenAI } = await import('@langchain/openai');\n return new ChatOpenAI({ streamUsage: true, useResponsesApi: false, maxTokens,\n ...options as ChatOpenAIFields,\n model, apiKey: 'agentcore-transport', maxRetries: 0, configuration: { baseURL, fetch },\n });\n}\n\n/** Keep native schema validation, ToolMessage conversion, callbacks and tool execution. */\nexport function tools(values: readonly Tool[]): StructuredToolInterface[] {\n return values.map(value => tool((args: ToolArguments) => value.invoke(args), {\n // LangChain's JSON Schema validator annotates its schema during dereferencing.\n name: value.name, description: value.description, schema: structuredClone(value.parameters) as JsonSchema7Type,\n }));\n}\nexport function skillTools(values: readonly Skill[], options: SkillToolsOptions = {}): StructuredToolInterface[] {\n return tools(canonicalSkillTools(values, options));\n}\n"]}
|