@ai-setting/roy-agent-core 1.7.72 → 1.7.76
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/dist/env/agent/agent-component.js +6 -6
- package/dist/env/agent/agent-registry.d.ts +4 -1
- package/dist/env/agent/index.js +6 -6
- package/dist/env/error-reply.d.ts +46 -0
- package/dist/env/error-reply.js +3 -1
- package/dist/env/event-source/event-source-handlers.js +13 -12
- package/dist/env/event-source/index.js +14 -13
- package/dist/env/index.js +31 -30
- package/dist/env/llm/index.js +2 -2
- package/dist/env/llm/orphan-toolcall.d.ts +107 -0
- package/dist/env/plugin/index.js +3 -3
- package/dist/env/prompt/index.js +4 -3
- package/dist/env/prompt/prompts-index.d.ts +27 -3
- package/dist/env/session/index.js +4 -4
- package/dist/env/session/storage/index.js +3 -3
- package/dist/env/task/backend/index.js +9 -1
- package/dist/env/task/delegate/delegate-tool.d.ts +8 -0
- package/dist/env/task/delegate/delegate-tool.js +5 -4
- package/dist/env/task/delegate/index.js +5 -4
- package/dist/env/task/hooks/contexts.d.ts +12 -1
- package/dist/env/task/hooks/task-hook-points.d.ts +8 -3
- package/dist/env/task/index.d.ts +1 -0
- package/dist/env/task/index.js +17 -7
- package/dist/env/task/mcp/index.js +3 -2
- package/dist/env/task/plugins/index.d.ts +3 -0
- package/dist/env/task/plugins/index.js +33 -9
- package/dist/env/task/plugins/lark-card-patch-notifier.d.ts +61 -0
- package/dist/env/task/plugins/lark-card-patch-notifier.js +6 -2
- package/dist/env/task/plugins/lark-cli-task-notify-plugin.d.ts +42 -0
- package/dist/env/task/prompt/index.js +2 -1
- package/dist/env/task/prompt/task-discipline.d.ts +9 -3
- package/dist/env/task/task-component.d.ts +79 -0
- package/dist/env/task/tools/cancel-tool.d.ts +36 -0
- package/dist/env/task/tools/completion-copy.d.ts +92 -0
- package/dist/env/task/tools/index.d.ts +2 -0
- package/dist/env/task/tools/index.js +7 -2
- package/dist/env/task/tools/pre-complete-tool.d.ts +32 -0
- package/dist/env/task/tools/task-types.d.ts +71 -17
- package/dist/env/task/types.d.ts +13 -1
- package/dist/env/tool/built-in/compact-session-tool.d.ts +120 -0
- package/dist/env/tool/built-in/index.d.ts +2 -0
- package/dist/env/tool/built-in/index.js +6 -2
- package/dist/env/tool/index.js +4 -4
- package/dist/env/workflow/engine/index.js +6 -6
- package/dist/env/workflow/index.js +15 -13
- package/dist/env/workflow/plugins/index.js +2 -2
- package/dist/env/workflow/tools/ask-user-tool.d.ts +88 -0
- package/dist/env/workflow/tools/index.js +11 -9
- package/dist/env/workflow/tools/run-workflow.d.ts +2 -2
- package/dist/env/workflow/types/index.js +2 -2
- package/dist/env/workflow/types/workflow-hil.d.ts +25 -1
- package/dist/env/workflow/utils/index.js +5 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.js +43 -33
- package/dist/shared/@ai-setting/{roy-agent-core-sm0sf6sb.js → roy-agent-core-0qyrk5k0.js} +2 -2
- package/dist/shared/@ai-setting/{roy-agent-core-kmbct9yg.js → roy-agent-core-0snm5hc5.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-yr1mryb8.js → roy-agent-core-1v4g0d4x.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-rxb00gjm.js → roy-agent-core-264qexac.js} +1 -1
- package/dist/shared/@ai-setting/roy-agent-core-2akfd64z.js +374 -0
- package/dist/shared/@ai-setting/{roy-agent-core-skyc30qx.js → roy-agent-core-3fh1f7s7.js} +2 -2
- package/dist/shared/@ai-setting/roy-agent-core-4rtg69cn.js +26 -0
- package/dist/shared/@ai-setting/{roy-agent-core-add1zqsh.js → roy-agent-core-6cy43nss.js} +22 -1
- package/dist/shared/@ai-setting/{roy-agent-core-vah6g5yx.js → roy-agent-core-6rh8k6ba.js} +5 -5
- package/dist/shared/@ai-setting/{roy-agent-core-kpg25s2q.js → roy-agent-core-8ez6mccb.js} +4 -2
- package/dist/shared/@ai-setting/{roy-agent-core-yhwxpj12.js → roy-agent-core-9vxh6f8h.js} +233 -16
- package/dist/shared/@ai-setting/{roy-agent-core-7qvw65jt.js → roy-agent-core-aa2j7bk9.js} +11 -8
- package/dist/shared/@ai-setting/{roy-agent-core-sjr1kmfz.js → roy-agent-core-acj8ag08.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-mds8tqd0.js → roy-agent-core-cgtq6427.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-34jz9mgh.js → roy-agent-core-cmprygrp.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-wr7mv7k3.js → roy-agent-core-cxy143m4.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-pakhchy7.js → roy-agent-core-ddyk1rc0.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-attpry6g.js → roy-agent-core-dqxec05w.js} +4 -3
- package/dist/shared/@ai-setting/{roy-agent-core-vm8h5zyj.js → roy-agent-core-ed233k5z.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-jrj30vq3.js → roy-agent-core-er070zjq.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-40rv283c.js → roy-agent-core-fghc2m8z.js} +152 -2
- package/dist/shared/@ai-setting/{roy-agent-core-5gw0qa8m.js → roy-agent-core-ghnagzrh.js} +557 -92
- package/dist/shared/@ai-setting/{roy-agent-core-4jjwewvw.js → roy-agent-core-m46fe3x4.js} +41 -30
- package/dist/shared/@ai-setting/{roy-agent-core-e25xkv53.js → roy-agent-core-mkc3zshb.js} +3 -1
- package/dist/shared/@ai-setting/{roy-agent-core-hfyfavp3.js → roy-agent-core-mww0mnd9.js} +231 -27
- package/dist/shared/@ai-setting/{roy-agent-core-46rv4d7d.js → roy-agent-core-nmx9934r.js} +92 -2
- package/dist/shared/@ai-setting/{roy-agent-core-1w9y7mxj.js → roy-agent-core-p3zv1mx5.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-jgb3bb42.js → roy-agent-core-q5r75vev.js} +17 -8
- package/dist/shared/@ai-setting/{roy-agent-core-y12kyxwa.js → roy-agent-core-t3rrb959.js} +33 -9
- package/dist/shared/@ai-setting/{roy-agent-core-dt104qa1.js → roy-agent-core-v85n42ve.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-gr48c89p.js → roy-agent-core-v87njmq7.js} +3 -3
- package/dist/shared/@ai-setting/{roy-agent-core-7sj9xs9c.js → roy-agent-core-vffccgf6.js} +252 -25
- package/dist/shared/@ai-setting/{roy-agent-core-2gzt2q8c.js → roy-agent-core-z43aj03k.js} +134 -29
- package/dist/shared/@ai-setting/roy-agent-core-zycadbpx.js +662 -0
- package/package.json +1 -1
- package/dist/shared/@ai-setting/roy-agent-core-1p6syv85.js +0 -1083
- package/dist/shared/@ai-setting/roy-agent-core-58804s3j.js +0 -155
|
@@ -838,6 +838,126 @@ import { createGoogleGenerativeAI } from "@ai-sdk/google";
|
|
|
838
838
|
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
|
|
839
839
|
init_logger();
|
|
840
840
|
|
|
841
|
+
// src/env/llm/orphan-toolcall.ts
|
|
842
|
+
var ORPHAN_PLACEHOLDER_PREFIX = "[Tool result missing: run interrupted]";
|
|
843
|
+
function toolNameOf(tc) {
|
|
844
|
+
return tc.function?.name || tc.name || "unknown";
|
|
845
|
+
}
|
|
846
|
+
function extractPendingEvent(msg, events) {
|
|
847
|
+
const added = [];
|
|
848
|
+
const removed = [];
|
|
849
|
+
const toolCalls = msg.toolCalls;
|
|
850
|
+
if (Array.isArray(toolCalls)) {
|
|
851
|
+
for (const tc of toolCalls) {
|
|
852
|
+
if (tc?.id)
|
|
853
|
+
added.push({ id: tc.id, name: toolNameOf(tc) });
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
const content = msg.content;
|
|
857
|
+
if (Array.isArray(content)) {
|
|
858
|
+
for (const part of content) {
|
|
859
|
+
if (!part)
|
|
860
|
+
continue;
|
|
861
|
+
if (part.type === "tool-call" && typeof part.toolCallId === "string") {
|
|
862
|
+
added.push({
|
|
863
|
+
id: part.toolCallId,
|
|
864
|
+
name: typeof part.toolName === "string" ? part.toolName : "unknown"
|
|
865
|
+
});
|
|
866
|
+
}
|
|
867
|
+
if (part.type === "tool-result" && typeof part.toolCallId === "string") {
|
|
868
|
+
removed.push(part.toolCallId);
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
if (msg.role === "tool" && typeof msg.toolCallId === "string") {
|
|
873
|
+
removed.push(msg.toolCallId);
|
|
874
|
+
}
|
|
875
|
+
events.push({ added, removed });
|
|
876
|
+
}
|
|
877
|
+
function collectOrphans(roles, events) {
|
|
878
|
+
const pending = new Map;
|
|
879
|
+
const orphans = [];
|
|
880
|
+
const reported = new Set;
|
|
881
|
+
for (let index = 0;index < roles.length; index++) {
|
|
882
|
+
const { added, removed } = events[index];
|
|
883
|
+
for (const id of removed)
|
|
884
|
+
pending.delete(id);
|
|
885
|
+
for (const { id, name } of added) {
|
|
886
|
+
if (!pending.has(id))
|
|
887
|
+
pending.set(id, name);
|
|
888
|
+
}
|
|
889
|
+
const role = roles[index];
|
|
890
|
+
if ((role === "user" || role === "system") && pending.size > 0) {
|
|
891
|
+
for (const [id, name] of pending) {
|
|
892
|
+
if (!reported.has(id)) {
|
|
893
|
+
reported.add(id);
|
|
894
|
+
orphans.push({ toolCallId: id, toolName: name, messageIndex: index });
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
pending.clear();
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
for (const [id, name] of pending) {
|
|
901
|
+
if (!reported.has(id)) {
|
|
902
|
+
reported.add(id);
|
|
903
|
+
orphans.push({
|
|
904
|
+
toolCallId: id,
|
|
905
|
+
toolName: name,
|
|
906
|
+
messageIndex: roles.length
|
|
907
|
+
});
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
return orphans;
|
|
911
|
+
}
|
|
912
|
+
function repairOrphanSdkMessages(messages, options) {
|
|
913
|
+
const events = [];
|
|
914
|
+
const roles = [];
|
|
915
|
+
for (const msg of messages) {
|
|
916
|
+
roles.push(msg.role);
|
|
917
|
+
extractPendingEvent(msg, events);
|
|
918
|
+
}
|
|
919
|
+
const orphans = collectOrphans(roles, events);
|
|
920
|
+
if (orphans.length === 0) {
|
|
921
|
+
return { messages, orphans: [], repairedCount: 0 };
|
|
922
|
+
}
|
|
923
|
+
const reason = options?.reason ?? "context limit or crash";
|
|
924
|
+
const value = JSON.stringify({ error: `${ORPHAN_PLACEHOLDER_PREFIX} ${reason}` });
|
|
925
|
+
const byIndex = new Map;
|
|
926
|
+
for (const orphan of orphans) {
|
|
927
|
+
const list = byIndex.get(orphan.messageIndex) ?? [];
|
|
928
|
+
list.push(orphan);
|
|
929
|
+
byIndex.set(orphan.messageIndex, list);
|
|
930
|
+
}
|
|
931
|
+
const result = [];
|
|
932
|
+
const endGroup = byIndex.get(messages.length);
|
|
933
|
+
const placeholder = (orphan) => ({
|
|
934
|
+
role: "tool",
|
|
935
|
+
content: [
|
|
936
|
+
{
|
|
937
|
+
type: "tool-result",
|
|
938
|
+
toolCallId: orphan.toolCallId,
|
|
939
|
+
toolName: orphan.toolName,
|
|
940
|
+
output: { type: "text", value }
|
|
941
|
+
}
|
|
942
|
+
]
|
|
943
|
+
});
|
|
944
|
+
messages.forEach((msg, index) => {
|
|
945
|
+
const group = byIndex.get(index);
|
|
946
|
+
if (group) {
|
|
947
|
+
for (const orphan of group) {
|
|
948
|
+
result.push(placeholder(orphan));
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
result.push(msg);
|
|
952
|
+
});
|
|
953
|
+
if (endGroup) {
|
|
954
|
+
for (const orphan of endGroup) {
|
|
955
|
+
result.push(placeholder(orphan));
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
return { messages: result, orphans, repairedCount: orphans.length };
|
|
959
|
+
}
|
|
960
|
+
|
|
841
961
|
// src/env/llm/llm-cache.ts
|
|
842
962
|
function isOpenAICompatibleProvider(providerName) {
|
|
843
963
|
return providerName === "openai-compatible" || providerName === "openai" || providerName.startsWith("minimax") || providerName === "deepseek" || providerName.startsWith("deepseek") || providerName === "glm" || providerName.startsWith("glm");
|
|
@@ -1207,6 +1327,24 @@ function convertToSDKMessages(messages, options) {
|
|
|
1207
1327
|
};
|
|
1208
1328
|
}
|
|
1209
1329
|
if (msg.role === "tool") {
|
|
1330
|
+
if (!msg.toolCallId && Array.isArray(msg.content)) {
|
|
1331
|
+
const part = msg.content.find((p) => p?.type === "tool-result" && typeof p.toolCallId === "string");
|
|
1332
|
+
if (part) {
|
|
1333
|
+
const convertedPart = {
|
|
1334
|
+
role: "tool",
|
|
1335
|
+
content: [{
|
|
1336
|
+
type: "tool-result",
|
|
1337
|
+
toolCallId: part.toolCallId,
|
|
1338
|
+
toolName: part.toolName || "unknown",
|
|
1339
|
+
output: {
|
|
1340
|
+
type: "text",
|
|
1341
|
+
value: typeof part.output === "string" ? part.output : JSON.stringify(part.output ?? "")
|
|
1342
|
+
}
|
|
1343
|
+
}]
|
|
1344
|
+
};
|
|
1345
|
+
return convertedPart;
|
|
1346
|
+
}
|
|
1347
|
+
}
|
|
1210
1348
|
if (!msg.toolCallId) {
|
|
1211
1349
|
logger3.warn("Tool message missing toolCallId", { msg });
|
|
1212
1350
|
}
|
|
@@ -1410,6 +1548,12 @@ async function invoke(config, options, ctx) {
|
|
|
1410
1548
|
sessionId: options.context?.sessionId,
|
|
1411
1549
|
provider: providerId
|
|
1412
1550
|
});
|
|
1551
|
+
const orphanRepair = repairOrphanSdkMessages(messages, {
|
|
1552
|
+
reason: "repaired before AI SDK fallback (Task #4992 defence 2)"
|
|
1553
|
+
});
|
|
1554
|
+
if (orphanRepair.repairedCount > 0) {
|
|
1555
|
+
logger3.warn(`[invoke] Repaired ${orphanRepair.repairedCount} orphan tool-call(s) before AI SDK fallback: ` + orphanRepair.orphans.map((o) => o.toolCallId).join(", "));
|
|
1556
|
+
}
|
|
1413
1557
|
const toolCallIds = new Set;
|
|
1414
1558
|
const assistantToolCalls = [];
|
|
1415
1559
|
const toolResultIds = [];
|
|
@@ -1457,7 +1601,7 @@ async function invoke(config, options, ctx) {
|
|
|
1457
1601
|
}
|
|
1458
1602
|
const streamTextOptions = {
|
|
1459
1603
|
model: provider.languageModel(modelId),
|
|
1460
|
-
messages,
|
|
1604
|
+
messages: orphanRepair.messages,
|
|
1461
1605
|
tools,
|
|
1462
1606
|
temperature: providerOptions.temperature,
|
|
1463
1607
|
maxTokens: providerOptions.maxTokens,
|
|
@@ -1704,6 +1848,12 @@ async function invokeNonStream(config, options, ctx) {
|
|
|
1704
1848
|
sessionId: options.context?.sessionId,
|
|
1705
1849
|
provider: providerId
|
|
1706
1850
|
});
|
|
1851
|
+
const orphanRepair = repairOrphanSdkMessages(messages, {
|
|
1852
|
+
reason: "repaired before AI SDK generateText (Task #4992 defence 2)"
|
|
1853
|
+
});
|
|
1854
|
+
if (orphanRepair.repairedCount > 0) {
|
|
1855
|
+
logger3.warn(`[invokeNonStream] Repaired ${orphanRepair.repairedCount} orphan tool-call(s): ` + orphanRepair.orphans.map((o) => o.toolCallId).join(", "));
|
|
1856
|
+
}
|
|
1707
1857
|
const tools = options.tools && options.tools.length > 0 ? convertToolsToSDK(options.tools, providerId) : undefined;
|
|
1708
1858
|
const providerOptions = generateProviderOptions(providerId, {
|
|
1709
1859
|
temperature: options.temperature,
|
|
@@ -1713,7 +1863,7 @@ async function invokeNonStream(config, options, ctx) {
|
|
|
1713
1863
|
const genTextFn = generateText;
|
|
1714
1864
|
const result = await genTextFn({
|
|
1715
1865
|
model: provider.languageModel(modelId),
|
|
1716
|
-
messages,
|
|
1866
|
+
messages: orphanRepair.messages,
|
|
1717
1867
|
tools,
|
|
1718
1868
|
temperature: providerOptions.temperature,
|
|
1719
1869
|
maxTokens: providerOptions.maxTokens,
|