dominds 1.13.2 → 1.15.2
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/bootstrap/global-dialog-event-broadcaster.d.ts +18 -0
- package/dist/bootstrap/global-dialog-event-broadcaster.js +81 -0
- package/dist/dialog-fork.js +13 -12
- package/dist/dialog.d.ts +61 -50
- package/dist/dialog.js +284 -78
- package/dist/docs/dialog-system.md +12 -0
- package/dist/docs/dialog-system.zh.md +12 -0
- package/dist/docs/dominds-terminology.md +17 -0
- package/dist/docs/issues/global-dialog-event-broadcaster-missing.md +128 -0
- package/dist/docs/llm-provider-isolation.md +35 -0
- package/dist/docs/llm-provider-isolation.zh.md +35 -0
- package/dist/llm/client.d.ts +2 -1
- package/dist/llm/defaults.yaml +118 -4
- package/dist/llm/gen/anthropic.js +2 -4
- package/dist/llm/gen/codex.d.ts +11 -0
- package/dist/llm/gen/codex.js +41 -31
- package/dist/llm/gen/failure-classifier.js +17 -0
- package/dist/llm/gen/mock.js +45 -21
- package/dist/llm/gen/openai-compatible.d.ts +2 -0
- package/dist/llm/gen/openai-compatible.js +43 -38
- package/dist/llm/gen/openai.d.ts +3 -1
- package/dist/llm/gen/openai.js +888 -71
- package/dist/llm/gen/tool-call-context.d.ts +7 -2
- package/dist/llm/gen/tool-call-context.js +55 -13
- package/dist/llm/gen.d.ts +60 -3
- package/dist/llm/kernel-driver/context.js +1 -1
- package/dist/llm/kernel-driver/drive.js +374 -348
- package/dist/llm/kernel-driver/flow.js +3 -3
- package/dist/llm/kernel-driver/guardrails.d.ts +1 -1
- package/dist/llm/kernel-driver/guardrails.js +4 -4
- package/dist/llm/kernel-driver/runtime.js +11 -29
- package/dist/llm/kernel-driver/subdialog.js +56 -5
- package/dist/llm/kernel-driver/tellask-special.d.ts +38 -12
- package/dist/llm/kernel-driver/tellask-special.js +489 -180
- package/dist/llm/kernel-driver/types.d.ts +1 -1
- package/dist/persistence.d.ts +30 -62
- package/dist/persistence.js +978 -986
- package/dist/priming.js +398 -365
- package/dist/recovery/reply-special.js +3 -3
- package/dist/runtime/inter-dialog-format.d.ts +1 -1
- package/dist/runtime/inter-dialog-format.js +1 -1
- package/dist/runtime/reply-prompt-copy.js +4 -4
- package/dist/server/setup-routes.js +26 -5
- package/dist/server/snippets-routes.d.ts +1 -0
- package/dist/server/snippets-routes.js +20 -9
- package/dist/server/websocket-handler.js +58 -25
- package/dist/shared/utils/fbr.js +12 -8
- package/dist/shared/utils/inter-dialog-format.js +6 -4
- package/dist/team.d.ts +24 -13
- package/dist/team.js +123 -32
- package/dist/tool.d.ts +26 -0
- package/dist/tool.js +97 -0
- package/dist/tools/team_mgmt.js +18 -0
- package/package.json +2 -2
- package/webapp/dist/assets/{_basePickBy-CBOtd63g.js → _basePickBy-DsirmCgI.js} +3 -3
- package/webapp/dist/assets/_basePickBy-DsirmCgI.js.map +1 -0
- package/webapp/dist/assets/{_baseUniq-mfoKz4Wm.js → _baseUniq-tR6G8loB.js} +2 -2
- package/webapp/dist/assets/_baseUniq-tR6G8loB.js.map +1 -0
- package/webapp/dist/assets/{arc-Dq0WZLyu.js → arc-CzxpASkZ.js} +2 -2
- package/webapp/dist/assets/arc-CzxpASkZ.js.map +1 -0
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-CNmygmp3.js → architectureDiagram-2XIMDMQ5-BSH7H5oI.js} +26 -8
- package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-BSH7H5oI.js.map +1 -0
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-DvE0lybt.js → blockDiagram-WCTKOSBZ-DpLIr7yO.js} +187 -170
- package/webapp/dist/assets/blockDiagram-WCTKOSBZ-DpLIr7yO.js.map +1 -0
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-CR7zJ2_u.js → c4Diagram-IC4MRINW-WuYKgWfY.js} +4 -4
- package/webapp/dist/assets/c4Diagram-IC4MRINW-WuYKgWfY.js.map +1 -0
- package/webapp/dist/assets/{channel-DrTrnYx4.js → channel-B-v9dqLN.js} +2 -2
- package/webapp/dist/assets/channel-B-v9dqLN.js.map +1 -0
- package/webapp/dist/assets/{chunk-4BX2VUAB-CVuJEIeN.js → chunk-4BX2VUAB-MtFUfKZy.js} +2 -2
- package/webapp/dist/assets/chunk-4BX2VUAB-MtFUfKZy.js.map +1 -0
- package/webapp/dist/assets/{chunk-55IACEB6-BxUoXApB.js → chunk-55IACEB6-rY9AJdzj.js} +2 -2
- package/webapp/dist/assets/chunk-55IACEB6-rY9AJdzj.js.map +1 -0
- package/webapp/dist/assets/{chunk-FMBD7UC4-TX-LVAaV.js → chunk-FMBD7UC4-B-RtOs7e.js} +2 -2
- package/webapp/dist/assets/chunk-FMBD7UC4-B-RtOs7e.js.map +1 -0
- package/webapp/dist/assets/{chunk-TZMSLE5B-Cw689yRl.js → chunk-JSJVCQXG-Da1d3uS4.js} +14 -6
- package/webapp/dist/assets/chunk-JSJVCQXG-Da1d3uS4.js.map +1 -0
- package/webapp/dist/assets/{chunk-QN33PNHL-D1uiKlOO.js → chunk-KX2RTZJC-DH9UrpuG.js} +2 -2
- package/webapp/dist/assets/chunk-KX2RTZJC-DH9UrpuG.js.map +1 -0
- package/webapp/dist/assets/{chunk-DI55MBZ5-SAhxUTqQ.js → chunk-NQ4KR5QH-CK365lrr.js} +9 -7
- package/webapp/dist/assets/chunk-NQ4KR5QH-CK365lrr.js.map +1 -0
- package/webapp/dist/assets/{chunk-QZHKN3VN-BxuV0Oba.js → chunk-QZHKN3VN-BCaWPGDm.js} +2 -2
- package/webapp/dist/assets/chunk-QZHKN3VN-BCaWPGDm.js.map +1 -0
- package/webapp/dist/assets/{chunk-B4BG7PRW-DpMa3-9L.js → chunk-WL4C6EOR-DDCnEwft.js} +171 -121
- package/webapp/dist/assets/chunk-WL4C6EOR-DDCnEwft.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-2ON5EDUG-BTTGianr.js → classDiagram-VBA2DB6C-CvMBU4WA.js} +7 -6
- package/webapp/dist/assets/classDiagram-VBA2DB6C-CvMBU4WA.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-BTTGianr.js → classDiagram-v2-RAHNMMFH-CvMBU4WA.js} +7 -6
- package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-CvMBU4WA.js.map +1 -0
- package/webapp/dist/assets/{clone-Dk8cAI3I.js → clone-r98jR0MC.js} +2 -2
- package/webapp/dist/assets/clone-r98jR0MC.js.map +1 -0
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BjJnzB2N.js → cose-bilkent-S5V4N54A-t6J60Ogk.js} +2 -2
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-t6J60Ogk.js.map +1 -0
- package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
- package/webapp/dist/assets/{dagre-6UL2VRFP-VF-xGhAf.js → dagre-KLK3FWXG-BlqmY2DV.js} +7 -7
- package/webapp/dist/assets/dagre-KLK3FWXG-BlqmY2DV.js.map +1 -0
- package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
- package/webapp/dist/assets/{diagram-PSM6KHXK-Ba5U0oRY.js → diagram-E7M64L7V-FwCHeIUD.js} +10 -10
- package/webapp/dist/assets/diagram-E7M64L7V-FwCHeIUD.js.map +1 -0
- package/webapp/dist/assets/{diagram-QEK2KX5R-DoYCnEw_.js → diagram-IFDJBPK2-NhtmkuZG.js} +9 -8
- package/webapp/dist/assets/diagram-IFDJBPK2-NhtmkuZG.js.map +1 -0
- package/webapp/dist/assets/{diagram-S2PKOQOG-CkK4SRyE.js → diagram-P4PSJMXO-B9FcmokX.js} +8 -8
- package/webapp/dist/assets/diagram-P4PSJMXO-B9FcmokX.js.map +1 -0
- package/webapp/dist/assets/{erDiagram-Q2GNP2WA-DkI5eYww.js → erDiagram-INFDFZHY-DHKmWvtB.js} +96 -75
- package/webapp/dist/assets/erDiagram-INFDFZHY-DHKmWvtB.js.map +1 -0
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-wOdPUQ7Y.js → flowDiagram-PKNHOUZH-C7Zi8I7T.js} +98 -81
- package/webapp/dist/assets/flowDiagram-PKNHOUZH-C7Zi8I7T.js.map +1 -0
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-BtRWgkUH.js → ganttDiagram-A5KZAMGK-Cv2T8tz_.js} +28 -3
- package/webapp/dist/assets/ganttDiagram-A5KZAMGK-Cv2T8tz_.js.map +1 -0
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-Bsz7u1vi.js → gitGraphDiagram-K3NZZRJ6-DztaipJU.js} +38 -46
- package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-DztaipJU.js.map +1 -0
- package/webapp/dist/assets/graph-C5yf62Vs.js +782 -0
- package/webapp/dist/assets/graph-C5yf62Vs.js.map +1 -0
- package/webapp/dist/assets/{index-xvYYeHuy.css → index-YaxF76or.css} +1 -1
- package/webapp/dist/assets/{index-rYmIohM_.js → index-hve5MWPs.js} +1603 -1415
- package/webapp/dist/assets/index-hve5MWPs.js.map +1 -0
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-BMaxCvH5.js → infoDiagram-LFFYTUFH-VgsbBPZP.js} +7 -7
- package/webapp/dist/assets/infoDiagram-LFFYTUFH-VgsbBPZP.js.map +1 -0
- package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-C7j3YWdw.js +966 -0
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-C7j3YWdw.js.map +1 -0
- package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-ejyerzmG.js → journeyDiagram-4ABVD52K-OO8sev-Y.js} +5 -5
- package/webapp/dist/assets/journeyDiagram-4ABVD52K-OO8sev-Y.js.map +1 -0
- package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-CYj35TEs.js → kanban-definition-K7BYSVSG-DiYCC1Ig.js} +5 -3
- package/webapp/dist/assets/kanban-definition-K7BYSVSG-DiYCC1Ig.js.map +1 -0
- package/webapp/dist/assets/{layout-7Ql4zmuL.js → layout-DdZSgGdu.js} +5 -5
- package/webapp/dist/assets/layout-DdZSgGdu.js.map +1 -0
- package/webapp/dist/assets/{linear-CVmgVPuZ.js → linear-7-aHtaFi.js} +2 -2
- package/webapp/dist/assets/linear-7-aHtaFi.js.map +1 -0
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-DOpxjGVo.js → mindmap-definition-YRQLILUH-IG3I-RdD.js} +7 -5
- package/webapp/dist/assets/mindmap-definition-YRQLILUH-IG3I-RdD.js.map +1 -0
- package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
- package/webapp/dist/assets/{pieDiagram-ADFJNKIX-CLQjpmAG.js → pieDiagram-SKSYHLDU-z68KJT5r.js} +8 -8
- package/webapp/dist/assets/pieDiagram-SKSYHLDU-z68KJT5r.js.map +1 -0
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-ClD_bz7z.js → quadrantDiagram-337W2JSQ-DaENWdO6.js} +3 -3
- package/webapp/dist/assets/quadrantDiagram-337W2JSQ-DaENWdO6.js.map +1 -0
- package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-DOpb-TWH.js → requirementDiagram-Z7DCOOCP-ROTFv4sa.js} +16 -6
- package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-ROTFv4sa.js.map +1 -0
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-D8Hsj3yx.js → sankeyDiagram-WA2Y5GQK-CK7qtpzw.js} +2 -2
- package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CK7qtpzw.js.map +1 -0
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-CFMNjBER.js → sequenceDiagram-2WXFIKYE-R5lDySeI.js} +601 -201
- package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-R5lDySeI.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-BQeDlw0P.js → stateDiagram-RAJIS63D-sr7msF5U.js} +9 -9
- package/webapp/dist/assets/stateDiagram-RAJIS63D-sr7msF5U.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-DscX61Rs.js → stateDiagram-v2-FVOUBMTO-X663liwS.js} +5 -5
- package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-X663liwS.js.map +1 -0
- package/webapp/dist/assets/{timeline-definition-IT6M3QCI-BcXPSTiw.js → timeline-definition-YZTLITO2-Bw0TdG26.js} +3 -3
- package/webapp/dist/assets/timeline-definition-YZTLITO2-Bw0TdG26.js.map +1 -0
- package/webapp/dist/assets/{treemap-GDKQZRPO-BBr4UV0Z.js → treemap-KZPCXAKY-D_sjKwI7.js} +37 -24
- package/webapp/dist/assets/treemap-KZPCXAKY-D_sjKwI7.js.map +1 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-DhlHIHid.js +2487 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-DhlHIHid.js.map +1 -0
- package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-CS5RAtQE.js → xychartDiagram-JWTSCODW-C65ESjTc.js} +4 -4
- package/webapp/dist/assets/xychartDiagram-JWTSCODW-C65ESjTc.js.map +1 -0
- package/webapp/dist/index.html +2 -2
- package/webapp/dist/assets/_basePickBy-CBOtd63g.js.map +0 -1
- package/webapp/dist/assets/_baseUniq-mfoKz4Wm.js.map +0 -1
- package/webapp/dist/assets/arc-Dq0WZLyu.js.map +0 -1
- package/webapp/dist/assets/architectureDiagram-VXUJARFQ-CNmygmp3.js.map +0 -1
- package/webapp/dist/assets/blockDiagram-VD42YOAC-DvE0lybt.js.map +0 -1
- package/webapp/dist/assets/c4Diagram-YG6GDRKO-CR7zJ2_u.js.map +0 -1
- package/webapp/dist/assets/channel-DrTrnYx4.js.map +0 -1
- package/webapp/dist/assets/chunk-4BX2VUAB-CVuJEIeN.js.map +0 -1
- package/webapp/dist/assets/chunk-55IACEB6-BxUoXApB.js.map +0 -1
- package/webapp/dist/assets/chunk-B4BG7PRW-DpMa3-9L.js.map +0 -1
- package/webapp/dist/assets/chunk-DI55MBZ5-SAhxUTqQ.js.map +0 -1
- package/webapp/dist/assets/chunk-FMBD7UC4-TX-LVAaV.js.map +0 -1
- package/webapp/dist/assets/chunk-QN33PNHL-D1uiKlOO.js.map +0 -1
- package/webapp/dist/assets/chunk-QZHKN3VN-BxuV0Oba.js.map +0 -1
- package/webapp/dist/assets/chunk-TZMSLE5B-Cw689yRl.js.map +0 -1
- package/webapp/dist/assets/classDiagram-2ON5EDUG-BTTGianr.js.map +0 -1
- package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-BTTGianr.js.map +0 -1
- package/webapp/dist/assets/clone-Dk8cAI3I.js.map +0 -1
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-BjJnzB2N.js.map +0 -1
- package/webapp/dist/assets/dagre-6UL2VRFP-VF-xGhAf.js.map +0 -1
- package/webapp/dist/assets/diagram-PSM6KHXK-Ba5U0oRY.js.map +0 -1
- package/webapp/dist/assets/diagram-QEK2KX5R-DoYCnEw_.js.map +0 -1
- package/webapp/dist/assets/diagram-S2PKOQOG-CkK4SRyE.js.map +0 -1
- package/webapp/dist/assets/erDiagram-Q2GNP2WA-DkI5eYww.js.map +0 -1
- package/webapp/dist/assets/flowDiagram-NV44I4VS-wOdPUQ7Y.js.map +0 -1
- package/webapp/dist/assets/ganttDiagram-JELNMOA3-BtRWgkUH.js.map +0 -1
- package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-Bsz7u1vi.js.map +0 -1
- package/webapp/dist/assets/graph-DAMkuTbn.js +0 -425
- package/webapp/dist/assets/graph-DAMkuTbn.js.map +0 -1
- package/webapp/dist/assets/index-rYmIohM_.js.map +0 -1
- package/webapp/dist/assets/infoDiagram-HS3SLOUP-BMaxCvH5.js.map +0 -1
- package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-ejyerzmG.js.map +0 -1
- package/webapp/dist/assets/kanban-definition-3W4ZIXB7-CYj35TEs.js.map +0 -1
- package/webapp/dist/assets/layout-7Ql4zmuL.js.map +0 -1
- package/webapp/dist/assets/linear-CVmgVPuZ.js.map +0 -1
- package/webapp/dist/assets/mindmap-definition-VGOIOE7T-DOpxjGVo.js.map +0 -1
- package/webapp/dist/assets/pieDiagram-ADFJNKIX-CLQjpmAG.js.map +0 -1
- package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-ClD_bz7z.js.map +0 -1
- package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-DOpb-TWH.js.map +0 -1
- package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-D8Hsj3yx.js.map +0 -1
- package/webapp/dist/assets/sequenceDiagram-WL72ISMW-CFMNjBER.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-FKZM4ZOC-BQeDlw0P.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-DscX61Rs.js.map +0 -1
- package/webapp/dist/assets/timeline-definition-IT6M3QCI-BcXPSTiw.js.map +0 -1
- package/webapp/dist/assets/treemap-GDKQZRPO-BBr4UV0Z.js.map +0 -1
- package/webapp/dist/assets/xychartDiagram-PRI3JC2R-CS5RAtQE.js.map +0 -1
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.isTellaskCallFunctionName = isTellaskCallFunctionName;
|
|
4
4
|
exports.loadLatestActiveTellaskReplyDirective = loadLatestActiveTellaskReplyDirective;
|
|
5
5
|
exports.deliverTellaskBackReplyFromDirective = deliverTellaskBackReplyFromDirective;
|
|
6
6
|
exports.recoverPendingReplyTellaskCalls = recoverPendingReplyTellaskCalls;
|
|
7
|
-
exports.
|
|
8
|
-
exports.
|
|
7
|
+
exports.resolveTellaskFunctionCalls = resolveTellaskFunctionCalls;
|
|
8
|
+
exports.formatTellaskInvalidCallResult = formatTellaskInvalidCallResult;
|
|
9
|
+
exports.formatPendingTellaskFuncResultContent = formatPendingTellaskFuncResultContent;
|
|
10
|
+
exports.formatResolvedAskHumanResultContent = formatResolvedAskHumanResultContent;
|
|
11
|
+
exports.executeTellaskCalls = executeTellaskCalls;
|
|
12
|
+
exports.processTellaskFunctionRound = processTellaskFunctionRound;
|
|
9
13
|
const util_1 = require("util");
|
|
10
14
|
const storage_1 = require("@longrun-ai/kernel/types/storage");
|
|
11
15
|
const id_1 = require("@longrun-ai/kernel/utils/id");
|
|
@@ -33,7 +37,8 @@ const TELLASK_SPECIAL_FUNCTION_NAMES = [
|
|
|
33
37
|
'askHuman',
|
|
34
38
|
'freshBootsReasoning',
|
|
35
39
|
];
|
|
36
|
-
|
|
40
|
+
const MULTIPLE_ASKHUMAN_CALLS_ERROR = '不允许一轮多次调用 askHuman,必须单次调用问所有问题。 Do not call askHuman multiple times in one round; ask all questions in a single askHuman call.';
|
|
41
|
+
function isTellaskCallFunctionName(name) {
|
|
37
42
|
return TELLASK_SPECIAL_FUNCTION_NAMES.includes(name);
|
|
38
43
|
}
|
|
39
44
|
function isReplyTellaskCallName(name) {
|
|
@@ -156,17 +161,39 @@ async function deliverTellaskBackReplyFromDirective(args) {
|
|
|
156
161
|
deliveryMode: args.deliveryMode,
|
|
157
162
|
language: (0, work_language_1.getWorkLanguage)(),
|
|
158
163
|
});
|
|
159
|
-
await targetDialog.receiveTellaskResponse(args.dlg.agentId, 'tellaskBack', undefined, args.directive.tellaskContent, 'completed', args.dlg.id, {
|
|
164
|
+
const replyMirror = await targetDialog.receiveTellaskResponse(args.dlg.agentId, 'tellaskBack', undefined, args.directive.tellaskContent, 'completed', args.dlg.id, {
|
|
160
165
|
response,
|
|
161
166
|
agentId: args.dlg.agentId,
|
|
162
167
|
callId: args.directive.targetCallId,
|
|
163
168
|
originMemberId: targetDialog.agentId,
|
|
164
169
|
});
|
|
170
|
+
await targetDialog.addChatMessages(replyMirror);
|
|
165
171
|
await reviveDialogIfUnblocked(targetDialog, args.callbacks, 'reply_tellask_back_delivered');
|
|
166
172
|
}
|
|
167
|
-
function
|
|
173
|
+
function isReplyTellaskCallRecord(record) {
|
|
168
174
|
return isReplyTellaskCallName(record.name);
|
|
169
175
|
}
|
|
176
|
+
function parseReplyTellaskCallRecord(record) {
|
|
177
|
+
const parsed = parseTellaskCall({
|
|
178
|
+
type: 'func_call_msg',
|
|
179
|
+
role: 'assistant',
|
|
180
|
+
genseq: record.genseq,
|
|
181
|
+
id: record.id,
|
|
182
|
+
name: record.name,
|
|
183
|
+
arguments: record.rawArgumentsText,
|
|
184
|
+
});
|
|
185
|
+
if (!parsed.ok) {
|
|
186
|
+
throw new Error(`reply recovery invariant violation: invalid persisted raw arguments for ${record.name} (callId=${record.id})`);
|
|
187
|
+
}
|
|
188
|
+
switch (parsed.value.callName) {
|
|
189
|
+
case 'replyTellask':
|
|
190
|
+
case 'replyTellaskSessionless':
|
|
191
|
+
case 'replyTellaskBack':
|
|
192
|
+
return parsed.value;
|
|
193
|
+
default:
|
|
194
|
+
throw new Error(`reply recovery invariant violation: unexpected persisted call type ${parsed.value.callName} (callId=${record.id})`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
170
197
|
function formatReplyRecoveryFailureResult(args) {
|
|
171
198
|
return (0, work_language_1.getWorkLanguage)() === 'zh'
|
|
172
199
|
? `恢复重试 \`${args.callName}\` 失败:${args.errorText}`
|
|
@@ -181,8 +208,8 @@ async function recoverPendingReplyTellaskCalls(args) {
|
|
|
181
208
|
const resolvedReplyCallIds = new Set();
|
|
182
209
|
const replyCalls = [];
|
|
183
210
|
for (const event of events) {
|
|
184
|
-
if (event.type === 'func_result_record') {
|
|
185
|
-
const callId = event.id.trim();
|
|
211
|
+
if (event.type === 'func_result_record' || event.type === 'tellask_result_record') {
|
|
212
|
+
const callId = event.type === 'func_result_record' ? event.id.trim() : event.callId.trim();
|
|
186
213
|
if (callId !== '') {
|
|
187
214
|
funcResultIds.add(callId);
|
|
188
215
|
}
|
|
@@ -195,10 +222,10 @@ async function recoverPendingReplyTellaskCalls(args) {
|
|
|
195
222
|
}
|
|
196
223
|
continue;
|
|
197
224
|
}
|
|
198
|
-
if (event.type !== '
|
|
225
|
+
if (event.type !== 'tellask_call_record') {
|
|
199
226
|
continue;
|
|
200
227
|
}
|
|
201
|
-
if (!
|
|
228
|
+
if (!isReplyTellaskCallRecord(event)) {
|
|
202
229
|
continue;
|
|
203
230
|
}
|
|
204
231
|
replyCalls.push(event);
|
|
@@ -209,6 +236,7 @@ async function recoverPendingReplyTellaskCalls(args) {
|
|
|
209
236
|
if (callId === '' || funcResultIds.has(callId)) {
|
|
210
237
|
continue;
|
|
211
238
|
}
|
|
239
|
+
const parsedCall = parseReplyTellaskCallRecord(call);
|
|
212
240
|
if (resolvedReplyCallIds.has(callId)) {
|
|
213
241
|
await args.dlg.receiveFuncResult({
|
|
214
242
|
type: 'func_result_msg',
|
|
@@ -218,7 +246,7 @@ async function recoverPendingReplyTellaskCalls(args) {
|
|
|
218
246
|
name: call.name,
|
|
219
247
|
content: formatReplyFuncResult({
|
|
220
248
|
replyCallName: call.name,
|
|
221
|
-
replyContent:
|
|
249
|
+
replyContent: parsedCall.replyContent,
|
|
222
250
|
}),
|
|
223
251
|
});
|
|
224
252
|
funcResultIds.add(callId);
|
|
@@ -228,11 +256,7 @@ async function recoverPendingReplyTellaskCalls(args) {
|
|
|
228
256
|
try {
|
|
229
257
|
const execution = await executeReplyTellaskCall({
|
|
230
258
|
dlg: args.dlg,
|
|
231
|
-
call:
|
|
232
|
-
callId: call.id,
|
|
233
|
-
callName: call.name,
|
|
234
|
-
replyContent: call.replyContent,
|
|
235
|
-
},
|
|
259
|
+
call: parsedCall,
|
|
236
260
|
callbacks: args.callbacks,
|
|
237
261
|
});
|
|
238
262
|
for (const message of execution.messages) {
|
|
@@ -240,8 +264,13 @@ async function recoverPendingReplyTellaskCalls(args) {
|
|
|
240
264
|
throw new Error(`reply recovery invariant violation: unexpected message type ${message.type}`);
|
|
241
265
|
}
|
|
242
266
|
await args.dlg.receiveFuncResult({
|
|
243
|
-
|
|
267
|
+
type: 'func_result_msg',
|
|
268
|
+
role: 'tool',
|
|
244
269
|
genseq: call.genseq,
|
|
270
|
+
id: message.id,
|
|
271
|
+
name: message.name,
|
|
272
|
+
content: message.content,
|
|
273
|
+
contentItems: message.contentItems,
|
|
245
274
|
});
|
|
246
275
|
}
|
|
247
276
|
funcResultIds.add(callId);
|
|
@@ -353,8 +382,8 @@ function normalizeTeammateTargetAgentId(rawTarget) {
|
|
|
353
382
|
}
|
|
354
383
|
return { ok: true, value: withoutAt };
|
|
355
384
|
}
|
|
356
|
-
function
|
|
357
|
-
if (!
|
|
385
|
+
function parseTellaskCall(call) {
|
|
386
|
+
if (!isTellaskCallFunctionName(call.name)) {
|
|
358
387
|
return { ok: false, error: `unsupported tellask special function '${call.name}'` };
|
|
359
388
|
}
|
|
360
389
|
const argsResult = parseFuncCallArgsObject(call);
|
|
@@ -487,13 +516,16 @@ function parseTellaskSpecialCall(call) {
|
|
|
487
516
|
}
|
|
488
517
|
}
|
|
489
518
|
}
|
|
490
|
-
function
|
|
491
|
-
|
|
519
|
+
function getRawArgumentsText(call) {
|
|
520
|
+
return typeof call.arguments === 'string' ? call.arguments : JSON.stringify(call.arguments ?? {});
|
|
521
|
+
}
|
|
522
|
+
function resolveTellaskFunctionCalls(funcCalls, options) {
|
|
523
|
+
const validCalls = [];
|
|
524
|
+
const invalidCalls = [];
|
|
492
525
|
const normalCalls = [];
|
|
493
|
-
const parseIssues = [];
|
|
494
526
|
const allowed = options?.allowedSpecials ?? null;
|
|
495
527
|
for (const call of funcCalls) {
|
|
496
|
-
if (!
|
|
528
|
+
if (!isTellaskCallFunctionName(call.name)) {
|
|
497
529
|
normalCalls.push(call);
|
|
498
530
|
continue;
|
|
499
531
|
}
|
|
@@ -501,14 +533,147 @@ function classifyTellaskSpecialFunctionCalls(funcCalls, options) {
|
|
|
501
533
|
normalCalls.push(call);
|
|
502
534
|
continue;
|
|
503
535
|
}
|
|
504
|
-
const
|
|
536
|
+
const rawArgumentsText = getRawArgumentsText(call);
|
|
537
|
+
const parsed = parseTellaskCall(call);
|
|
505
538
|
if (!parsed.ok) {
|
|
506
|
-
|
|
539
|
+
invalidCalls.push({
|
|
540
|
+
originalCall: call,
|
|
541
|
+
error: parsed.error,
|
|
542
|
+
rawArgumentsText,
|
|
543
|
+
contextArguments: rawArgumentsText,
|
|
544
|
+
});
|
|
507
545
|
continue;
|
|
508
546
|
}
|
|
509
|
-
|
|
547
|
+
validCalls.push({
|
|
548
|
+
originalCall: call,
|
|
549
|
+
call: parsed.value,
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
return { validCalls, invalidCalls, normalCalls };
|
|
553
|
+
}
|
|
554
|
+
function formatTellaskInvalidCallResult(args) {
|
|
555
|
+
return {
|
|
556
|
+
type: 'func_result_msg',
|
|
557
|
+
id: args.call.id,
|
|
558
|
+
name: args.call.name,
|
|
559
|
+
content: args.call.name === 'askHuman' && args.error === MULTIPLE_ASKHUMAN_CALLS_ERROR
|
|
560
|
+
? args.error
|
|
561
|
+
: `Invalid arguments for tellask special function '${args.call.name}': ${args.error}`,
|
|
562
|
+
role: 'tool',
|
|
563
|
+
genseq: args.call.genseq,
|
|
564
|
+
};
|
|
565
|
+
}
|
|
566
|
+
function formatPendingTellaskFuncResultContent(name, startedAtMs) {
|
|
567
|
+
const language = (0, work_language_1.getWorkLanguage)();
|
|
568
|
+
const elapsed = (() => {
|
|
569
|
+
if (startedAtMs === null) {
|
|
570
|
+
return language === 'zh' ? '未知时长' : 'unknown elapsed time';
|
|
571
|
+
}
|
|
572
|
+
const elapsedMs = Math.max(0, Date.now() - startedAtMs);
|
|
573
|
+
const elapsedSec = Math.floor(elapsedMs / 1000);
|
|
574
|
+
return language === 'zh' ? `${elapsedSec} 秒` : `${elapsedSec}s`;
|
|
575
|
+
})();
|
|
576
|
+
if (name === 'askHuman') {
|
|
577
|
+
return language === 'zh'
|
|
578
|
+
? `Q4H 仍在等待人类回复,已持续 ${elapsed}。`
|
|
579
|
+
: `Q4H is still waiting for human reply (elapsed ${elapsed}).`;
|
|
580
|
+
}
|
|
581
|
+
return language === 'zh'
|
|
582
|
+
? `支线对话仍在进行中,已持续 ${elapsed}。`
|
|
583
|
+
: `Sideline dialog is still running (elapsed ${elapsed}).`;
|
|
584
|
+
}
|
|
585
|
+
function formatResolvedAskHumanResultContent() {
|
|
586
|
+
return (0, work_language_1.getWorkLanguage)() === 'zh'
|
|
587
|
+
? 'Q4H 已结束等待状态,请参考 askHuman 结果气泡。'
|
|
588
|
+
: 'Q4H wait is resolved; refer to the askHuman result bubble.';
|
|
589
|
+
}
|
|
590
|
+
function buildPendingTellaskFuncResult(args) {
|
|
591
|
+
return {
|
|
592
|
+
type: 'func_result_msg',
|
|
593
|
+
role: 'tool',
|
|
594
|
+
genseq: args.genseq,
|
|
595
|
+
id: args.callId,
|
|
596
|
+
name: args.callName,
|
|
597
|
+
content: formatPendingTellaskFuncResultContent(args.callName, null),
|
|
598
|
+
};
|
|
599
|
+
}
|
|
600
|
+
async function persistTellaskFuncResult(dlg, result) {
|
|
601
|
+
if (!isTellaskCallFunctionName(result.name)) {
|
|
602
|
+
throw new Error(`persistTellaskFuncResult invariant violation: ${result.name} is not tellask special`);
|
|
510
603
|
}
|
|
511
|
-
|
|
604
|
+
await dlg.receiveFuncResult(result);
|
|
605
|
+
}
|
|
606
|
+
function buildTellaskResultToolOutput(args) {
|
|
607
|
+
return {
|
|
608
|
+
type: 'tellask_result_msg',
|
|
609
|
+
role: 'tool',
|
|
610
|
+
genseq: args.genseq,
|
|
611
|
+
callId: args.callId,
|
|
612
|
+
callName: args.callName,
|
|
613
|
+
status: args.status,
|
|
614
|
+
content: args.content,
|
|
615
|
+
call: args.callName === 'tellask'
|
|
616
|
+
? {
|
|
617
|
+
tellaskContent: args.tellaskContent,
|
|
618
|
+
mentionList: args.mentionList ?? [],
|
|
619
|
+
...(args.sessionSlug ? { sessionSlug: args.sessionSlug } : {}),
|
|
620
|
+
}
|
|
621
|
+
: args.callName === 'tellaskSessionless'
|
|
622
|
+
? {
|
|
623
|
+
tellaskContent: args.tellaskContent,
|
|
624
|
+
mentionList: args.mentionList ?? [],
|
|
625
|
+
}
|
|
626
|
+
: {
|
|
627
|
+
tellaskContent: args.tellaskContent,
|
|
628
|
+
},
|
|
629
|
+
responder: {
|
|
630
|
+
responderId: args.responderId,
|
|
631
|
+
...(args.agentId ? { agentId: args.agentId } : {}),
|
|
632
|
+
...(args.originMemberId ? { originMemberId: args.originMemberId } : {}),
|
|
633
|
+
},
|
|
634
|
+
...(args.calleeDialogId !== undefined ||
|
|
635
|
+
args.calleeCourse !== undefined ||
|
|
636
|
+
args.calleeGenseq !== undefined
|
|
637
|
+
? {
|
|
638
|
+
route: {
|
|
639
|
+
...(args.calleeDialogId ? { calleeDialogId: args.calleeDialogId } : {}),
|
|
640
|
+
...(typeof args.calleeCourse === 'number' ? { calleeCourse: args.calleeCourse } : {}),
|
|
641
|
+
...(typeof args.calleeGenseq === 'number' ? { calleeGenseq: args.calleeGenseq } : {}),
|
|
642
|
+
},
|
|
643
|
+
}
|
|
644
|
+
: {}),
|
|
645
|
+
};
|
|
646
|
+
}
|
|
647
|
+
function buildTellaskCarryoverToolOutput(args) {
|
|
648
|
+
return {
|
|
649
|
+
type: 'tellask_carryover_msg',
|
|
650
|
+
role: 'user',
|
|
651
|
+
genseq: args.genseq,
|
|
652
|
+
content: args.content,
|
|
653
|
+
originCourse: args.originCourse,
|
|
654
|
+
carryoverCourse: args.carryoverCourse,
|
|
655
|
+
responderId: args.responderId,
|
|
656
|
+
callName: args.callName,
|
|
657
|
+
tellaskContent: args.tellaskContent,
|
|
658
|
+
status: args.status,
|
|
659
|
+
response: args.response,
|
|
660
|
+
agentId: args.agentId,
|
|
661
|
+
callId: args.callId,
|
|
662
|
+
originMemberId: args.originMemberId,
|
|
663
|
+
...(args.callName === 'tellask'
|
|
664
|
+
? {
|
|
665
|
+
mentionList: args.mentionList ?? [],
|
|
666
|
+
sessionSlug: args.sessionSlug ?? '',
|
|
667
|
+
}
|
|
668
|
+
: args.callName === 'tellaskSessionless'
|
|
669
|
+
? {
|
|
670
|
+
mentionList: args.mentionList ?? [],
|
|
671
|
+
}
|
|
672
|
+
: {}),
|
|
673
|
+
...(args.calleeDialogId ? { calleeDialogId: args.calleeDialogId } : {}),
|
|
674
|
+
...(typeof args.calleeCourse === 'number' ? { calleeCourse: args.calleeCourse } : {}),
|
|
675
|
+
...(typeof args.calleeGenseq === 'number' ? { calleeGenseq: args.calleeGenseq } : {}),
|
|
676
|
+
};
|
|
512
677
|
}
|
|
513
678
|
function showErrorToAi(err) {
|
|
514
679
|
try {
|
|
@@ -644,27 +809,37 @@ async function finishRegisteredTellaskReplacement(args) {
|
|
|
644
809
|
sessionSlug: pendingRecord.sessionSlug,
|
|
645
810
|
});
|
|
646
811
|
const immediateMirror = carryoverContent !== undefined
|
|
647
|
-
? {
|
|
648
|
-
|
|
649
|
-
role: 'user',
|
|
812
|
+
? buildTellaskCarryoverToolOutput({
|
|
813
|
+
genseq: ownerDialog.activeGenSeqOrUndefined ?? 1,
|
|
650
814
|
content: carryoverContent,
|
|
651
815
|
originCourse: carryoverOriginCourse,
|
|
816
|
+
carryoverCourse: ownerDialog.currentCourse,
|
|
652
817
|
responderId: subdialog.agentId,
|
|
653
818
|
callName: pendingRecord.callName,
|
|
654
819
|
tellaskContent: pendingRecord.tellaskContent,
|
|
655
820
|
status: 'failed',
|
|
821
|
+
response,
|
|
822
|
+
agentId: subdialog.agentId,
|
|
656
823
|
callId: pendingRecord.callId,
|
|
657
|
-
|
|
658
|
-
: {
|
|
659
|
-
type: 'tellask_result_msg',
|
|
660
|
-
role: 'tool',
|
|
661
|
-
responderId: subdialog.agentId,
|
|
824
|
+
originMemberId: requesterId,
|
|
662
825
|
mentionList: pendingRecord.mentionList,
|
|
663
|
-
|
|
664
|
-
|
|
826
|
+
sessionSlug: pendingRecord.sessionSlug,
|
|
827
|
+
calleeDialogId: subdialog.id.selfId,
|
|
828
|
+
})
|
|
829
|
+
: buildTellaskResultToolOutput({
|
|
830
|
+
genseq: ownerDialog.activeGenSeqOrUndefined ?? 1,
|
|
665
831
|
callId: pendingRecord.callId,
|
|
832
|
+
callName: pendingRecord.callName,
|
|
666
833
|
content: response,
|
|
667
|
-
|
|
834
|
+
status: 'failed',
|
|
835
|
+
responderId: subdialog.agentId,
|
|
836
|
+
tellaskContent: pendingRecord.tellaskContent,
|
|
837
|
+
mentionList: pendingRecord.mentionList,
|
|
838
|
+
sessionSlug: pendingRecord.sessionSlug,
|
|
839
|
+
agentId: subdialog.agentId,
|
|
840
|
+
originMemberId: requesterId,
|
|
841
|
+
calleeDialogId: subdialog.id.selfId,
|
|
842
|
+
});
|
|
668
843
|
await ownerDialog.addChatMessages(immediateMirror);
|
|
669
844
|
}
|
|
670
845
|
async function reviveDialogIfUnblocked(dialog, callbacks, reason) {
|
|
@@ -733,15 +908,11 @@ async function executeTellaskCall(dlg, mentionList, body, callId, callbacks, opt
|
|
|
733
908
|
throw new Error(`Q4H call invariant violation: empty callId (rootId=${dlg.id.rootId} selfId=${dlg.id.selfId})`);
|
|
734
909
|
}
|
|
735
910
|
const questionId = `q4h-${dlg.id.rootId}-${dlg.id.selfId}-c${dlg.currentCourse}-${normalizedCallId}`;
|
|
736
|
-
const normalizedRemainingCallIds = Array.from(new Set((options?.q4hRemainingCallIds ?? [])
|
|
737
|
-
.map((value) => value.trim())
|
|
738
|
-
.filter((value) => value !== '' && value !== normalizedCallId)));
|
|
739
911
|
const question = {
|
|
740
912
|
id: questionId,
|
|
741
913
|
tellaskContent: body.trim(),
|
|
742
914
|
askedAt: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
743
915
|
callId: normalizedCallId,
|
|
744
|
-
remainingCallIds: normalizedRemainingCallIds.length > 0 ? normalizedRemainingCallIds : undefined,
|
|
745
916
|
callSiteRef: {
|
|
746
917
|
course: dlg.currentCourse,
|
|
747
918
|
messageIndex: dlg.msgs.length,
|
|
@@ -756,7 +927,6 @@ async function executeTellaskCall(dlg, mentionList, body, callId, callbacks, opt
|
|
|
756
927
|
tellaskContent: question.tellaskContent,
|
|
757
928
|
askedAt: question.askedAt,
|
|
758
929
|
callId: question.callId,
|
|
759
|
-
remainingCallIds: question.remainingCallIds,
|
|
760
930
|
callSiteRef: question.callSiteRef,
|
|
761
931
|
rootId: dlg.id.rootId,
|
|
762
932
|
agentId: dlg.agentId,
|
|
@@ -783,16 +953,18 @@ async function executeTellaskCall(dlg, mentionList, body, callId, callbacks, opt
|
|
|
783
953
|
});
|
|
784
954
|
const msg = (0, driver_messages_1.formatDomindsNoteQ4HRegisterFailed)((0, work_language_1.getWorkLanguage)(), { error: errMsg });
|
|
785
955
|
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
786
|
-
toolOutputs.push({
|
|
787
|
-
|
|
788
|
-
role: 'tool',
|
|
789
|
-
responderId: 'dominds',
|
|
790
|
-
mentionList: normalizedMentionList,
|
|
791
|
-
tellaskContent: body,
|
|
792
|
-
status: 'failed',
|
|
956
|
+
toolOutputs.push(buildTellaskResultToolOutput({
|
|
957
|
+
genseq: dlg.activeGenSeqOrUndefined ?? 1,
|
|
793
958
|
callId,
|
|
959
|
+
callName,
|
|
794
960
|
content: msg,
|
|
795
|
-
|
|
961
|
+
status: 'failed',
|
|
962
|
+
responderId: 'dominds',
|
|
963
|
+
tellaskContent: body,
|
|
964
|
+
mentionList: normalizedMentionList,
|
|
965
|
+
agentId: 'dominds',
|
|
966
|
+
originMemberId: dlg.agentId,
|
|
967
|
+
}));
|
|
796
968
|
await dlg.receiveTellaskCallResult('dominds', callName, mentionList, body, msg, 'failed', callId);
|
|
797
969
|
dlg.clearCurrentCallId();
|
|
798
970
|
return toolOutputs;
|
|
@@ -813,16 +985,18 @@ async function executeTellaskCall(dlg, mentionList, body, callId, callbacks, opt
|
|
|
813
985
|
firstMention: firstMentionForError,
|
|
814
986
|
});
|
|
815
987
|
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
816
|
-
toolOutputs.push({
|
|
817
|
-
|
|
818
|
-
role: 'tool',
|
|
819
|
-
responderId: 'dominds',
|
|
820
|
-
mentionList: normalizedMentionList,
|
|
821
|
-
tellaskContent: body,
|
|
822
|
-
status: 'failed',
|
|
988
|
+
toolOutputs.push(buildTellaskResultToolOutput({
|
|
989
|
+
genseq: dlg.activeGenSeqOrUndefined ?? 1,
|
|
823
990
|
callId,
|
|
991
|
+
callName,
|
|
824
992
|
content: msg,
|
|
825
|
-
|
|
993
|
+
status: 'failed',
|
|
994
|
+
responderId: 'dominds',
|
|
995
|
+
tellaskContent: body,
|
|
996
|
+
mentionList: normalizedMentionList,
|
|
997
|
+
agentId: 'dominds',
|
|
998
|
+
originMemberId: dlg.agentId,
|
|
999
|
+
}));
|
|
826
1000
|
await dlg.receiveTellaskCallResult('dominds', callName, mentionList, body, msg, 'failed', callId);
|
|
827
1001
|
dlg.clearCurrentCallId();
|
|
828
1002
|
return toolOutputs;
|
|
@@ -832,16 +1006,18 @@ async function executeTellaskCall(dlg, mentionList, body, callId, callbacks, opt
|
|
|
832
1006
|
if (memberFbrEffort < 1) {
|
|
833
1007
|
const msg = (0, driver_messages_1.formatDomindsNoteFbrDisabled)((0, work_language_1.getWorkLanguage)());
|
|
834
1008
|
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
835
|
-
toolOutputs.push({
|
|
836
|
-
|
|
837
|
-
role: 'tool',
|
|
838
|
-
responderId: 'dominds',
|
|
839
|
-
mentionList: normalizedMentionList,
|
|
840
|
-
tellaskContent: body,
|
|
841
|
-
status: 'failed',
|
|
1009
|
+
toolOutputs.push(buildTellaskResultToolOutput({
|
|
1010
|
+
genseq: dlg.activeGenSeqOrUndefined ?? 1,
|
|
842
1011
|
callId,
|
|
1012
|
+
callName,
|
|
843
1013
|
content: msg,
|
|
844
|
-
|
|
1014
|
+
status: 'failed',
|
|
1015
|
+
responderId: 'dominds',
|
|
1016
|
+
tellaskContent: body,
|
|
1017
|
+
mentionList: normalizedMentionList,
|
|
1018
|
+
agentId: 'dominds',
|
|
1019
|
+
originMemberId: dlg.agentId,
|
|
1020
|
+
}));
|
|
845
1021
|
await dlg.receiveTellaskCallResult('dominds', callName, mentionList, body, msg, 'failed', callId);
|
|
846
1022
|
dlg.clearCurrentCallId();
|
|
847
1023
|
return toolOutputs;
|
|
@@ -858,16 +1034,18 @@ async function executeTellaskCall(dlg, mentionList, body, callId, callbacks, opt
|
|
|
858
1034
|
if (fbrEffort < 1) {
|
|
859
1035
|
const msg = (0, driver_messages_1.formatDomindsNoteFbrDisabled)((0, work_language_1.getWorkLanguage)());
|
|
860
1036
|
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
861
|
-
toolOutputs.push({
|
|
862
|
-
|
|
863
|
-
role: 'tool',
|
|
864
|
-
responderId: 'dominds',
|
|
865
|
-
mentionList: normalizedMentionList,
|
|
866
|
-
tellaskContent: body,
|
|
867
|
-
status: 'failed',
|
|
1037
|
+
toolOutputs.push(buildTellaskResultToolOutput({
|
|
1038
|
+
genseq: dlg.activeGenSeqOrUndefined ?? 1,
|
|
868
1039
|
callId,
|
|
1040
|
+
callName,
|
|
869
1041
|
content: msg,
|
|
870
|
-
|
|
1042
|
+
status: 'failed',
|
|
1043
|
+
responderId: 'dominds',
|
|
1044
|
+
tellaskContent: body,
|
|
1045
|
+
mentionList: normalizedMentionList,
|
|
1046
|
+
agentId: 'dominds',
|
|
1047
|
+
originMemberId: dlg.agentId,
|
|
1048
|
+
}));
|
|
871
1049
|
await dlg.receiveTellaskCallResult('dominds', callName, mentionList, body, msg, 'failed', callId);
|
|
872
1050
|
dlg.clearCurrentCallId();
|
|
873
1051
|
return toolOutputs;
|
|
@@ -880,16 +1058,18 @@ async function executeTellaskCall(dlg, mentionList, body, callId, callbacks, opt
|
|
|
880
1058
|
kind: 'internal_error',
|
|
881
1059
|
});
|
|
882
1060
|
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
883
|
-
toolOutputs.push({
|
|
884
|
-
|
|
885
|
-
role: 'tool',
|
|
886
|
-
responderId: 'dominds',
|
|
887
|
-
mentionList: normalizedMentionList,
|
|
888
|
-
tellaskContent: body,
|
|
889
|
-
status: 'failed',
|
|
1061
|
+
toolOutputs.push(buildTellaskResultToolOutput({
|
|
1062
|
+
genseq: dlg.activeGenSeqOrUndefined ?? 1,
|
|
890
1063
|
callId,
|
|
1064
|
+
callName,
|
|
891
1065
|
content: msg,
|
|
892
|
-
|
|
1066
|
+
status: 'failed',
|
|
1067
|
+
responderId: 'dominds',
|
|
1068
|
+
tellaskContent: body,
|
|
1069
|
+
mentionList: normalizedMentionList,
|
|
1070
|
+
agentId: 'dominds',
|
|
1071
|
+
originMemberId: dlg.agentId,
|
|
1072
|
+
}));
|
|
893
1073
|
await dlg.receiveTellaskCallResult('dominds', callName, mentionList, body, msg, 'failed', callId);
|
|
894
1074
|
dlg.clearCurrentCallId();
|
|
895
1075
|
return toolOutputs;
|
|
@@ -960,16 +1140,18 @@ async function executeTellaskCall(dlg, mentionList, body, callId, callbacks, opt
|
|
|
960
1140
|
if (isDirectSelfCall) {
|
|
961
1141
|
const msg = (0, driver_messages_1.formatDomindsNoteDirectSelfCall)((0, work_language_1.getWorkLanguage)());
|
|
962
1142
|
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
963
|
-
toolOutputs.push({
|
|
964
|
-
|
|
965
|
-
role: 'tool',
|
|
966
|
-
responderId: 'dominds',
|
|
967
|
-
mentionList: normalizedMentionList,
|
|
968
|
-
tellaskContent: body,
|
|
969
|
-
status: 'failed',
|
|
1143
|
+
toolOutputs.push(buildTellaskResultToolOutput({
|
|
1144
|
+
genseq: dlg.activeGenSeqOrUndefined ?? 1,
|
|
970
1145
|
callId,
|
|
1146
|
+
callName,
|
|
971
1147
|
content: msg,
|
|
972
|
-
|
|
1148
|
+
status: 'failed',
|
|
1149
|
+
responderId: 'dominds',
|
|
1150
|
+
tellaskContent: body,
|
|
1151
|
+
mentionList: normalizedMentionList,
|
|
1152
|
+
agentId: 'dominds',
|
|
1153
|
+
originMemberId: dlg.agentId,
|
|
1154
|
+
}));
|
|
973
1155
|
await dlg.receiveTellaskCallResult('dominds', callName, mentionList, body, msg, 'failed', callId);
|
|
974
1156
|
dlg.clearCurrentCallId();
|
|
975
1157
|
return toolOutputs;
|
|
@@ -1025,16 +1207,19 @@ async function executeTellaskCall(dlg, mentionList, body, callId, callbacks, opt
|
|
|
1025
1207
|
language: (0, work_language_1.getWorkLanguage)(),
|
|
1026
1208
|
});
|
|
1027
1209
|
dlg.setSuspensionState('resumed');
|
|
1028
|
-
toolOutputs.push({
|
|
1029
|
-
|
|
1030
|
-
role: 'tool',
|
|
1031
|
-
responderId: parseResult.agentId,
|
|
1032
|
-
mentionList,
|
|
1033
|
-
tellaskContent: body,
|
|
1034
|
-
status: 'completed',
|
|
1210
|
+
toolOutputs.push(buildTellaskResultToolOutput({
|
|
1211
|
+
genseq: dlg.activeGenSeqOrUndefined ?? 1,
|
|
1035
1212
|
callId,
|
|
1213
|
+
callName,
|
|
1036
1214
|
content: responseContent,
|
|
1037
|
-
|
|
1215
|
+
status: 'completed',
|
|
1216
|
+
responderId: parseResult.agentId,
|
|
1217
|
+
tellaskContent: body,
|
|
1218
|
+
mentionList,
|
|
1219
|
+
agentId: parseResult.agentId,
|
|
1220
|
+
originMemberId: dlg.agentId,
|
|
1221
|
+
calleeDialogId: supdialog.id.selfId,
|
|
1222
|
+
}));
|
|
1038
1223
|
await dlg.receiveTellaskResponse(parseResult.agentId, callName, mentionList, body, 'completed', supdialog.id, {
|
|
1039
1224
|
response: responseContent,
|
|
1040
1225
|
agentId: parseResult.agentId,
|
|
@@ -1056,16 +1241,19 @@ async function executeTellaskCall(dlg, mentionList, body, callId, callbacks, opt
|
|
|
1056
1241
|
status: 'failed',
|
|
1057
1242
|
language: (0, work_language_1.getWorkLanguage)(),
|
|
1058
1243
|
});
|
|
1059
|
-
toolOutputs.push({
|
|
1060
|
-
|
|
1061
|
-
role: 'tool',
|
|
1062
|
-
responderId: parseResult.agentId,
|
|
1063
|
-
mentionList,
|
|
1064
|
-
tellaskContent: body,
|
|
1065
|
-
status: 'failed',
|
|
1244
|
+
toolOutputs.push(buildTellaskResultToolOutput({
|
|
1245
|
+
genseq: dlg.activeGenSeqOrUndefined ?? 1,
|
|
1066
1246
|
callId,
|
|
1247
|
+
callName,
|
|
1067
1248
|
content: errorContent,
|
|
1068
|
-
|
|
1249
|
+
status: 'failed',
|
|
1250
|
+
responderId: parseResult.agentId,
|
|
1251
|
+
tellaskContent: body,
|
|
1252
|
+
mentionList,
|
|
1253
|
+
agentId: parseResult.agentId,
|
|
1254
|
+
originMemberId: dlg.agentId,
|
|
1255
|
+
calleeDialogId: supdialog.id.selfId,
|
|
1256
|
+
}));
|
|
1069
1257
|
await dlg.receiveTellaskResponse(parseResult.agentId, callName, mentionList, body, 'failed', supdialog.id, {
|
|
1070
1258
|
response: errorContent,
|
|
1071
1259
|
agentId: parseResult.agentId,
|
|
@@ -1320,7 +1508,7 @@ async function executeTellaskCall(dlg, mentionList, body, callId, callbacks, opt
|
|
|
1320
1508
|
msgId: resumePrompt.msgId,
|
|
1321
1509
|
grammar: resumePrompt.grammar,
|
|
1322
1510
|
userLanguageCode: resumePrompt.userLanguageCode,
|
|
1323
|
-
|
|
1511
|
+
q4hAnswerCallId: resumePrompt.q4hAnswerCallId,
|
|
1324
1512
|
tellaskReplyDirective: resumePrompt.tellaskReplyDirective,
|
|
1325
1513
|
skipTaskdoc: resumePrompt.skipTaskdoc,
|
|
1326
1514
|
subdialogReplyTarget: resumePrompt.subdialogReplyTarget,
|
|
@@ -1464,22 +1652,24 @@ async function executeTellaskCall(dlg, mentionList, body, callId, callbacks, opt
|
|
|
1464
1652
|
firstMention: options.targetForError ?? 'unknown',
|
|
1465
1653
|
});
|
|
1466
1654
|
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
1467
|
-
toolOutputs.push({
|
|
1468
|
-
|
|
1469
|
-
role: 'tool',
|
|
1470
|
-
responderId: 'dominds',
|
|
1471
|
-
mentionList: normalizedMentionList,
|
|
1472
|
-
tellaskContent: body,
|
|
1473
|
-
status: 'failed',
|
|
1655
|
+
toolOutputs.push(buildTellaskResultToolOutput({
|
|
1656
|
+
genseq: dlg.activeGenSeqOrUndefined ?? 1,
|
|
1474
1657
|
callId,
|
|
1658
|
+
callName,
|
|
1475
1659
|
content: msg,
|
|
1476
|
-
|
|
1660
|
+
status: 'failed',
|
|
1661
|
+
responderId: 'dominds',
|
|
1662
|
+
tellaskContent: body,
|
|
1663
|
+
mentionList: normalizedMentionList,
|
|
1664
|
+
agentId: 'dominds',
|
|
1665
|
+
originMemberId: dlg.agentId,
|
|
1666
|
+
}));
|
|
1477
1667
|
await dlg.receiveTellaskCallResult('dominds', callName, mentionList, body, msg, 'failed', callId);
|
|
1478
1668
|
dlg.clearCurrentCallId();
|
|
1479
1669
|
}
|
|
1480
1670
|
return toolOutputs;
|
|
1481
1671
|
}
|
|
1482
|
-
async function
|
|
1672
|
+
async function emitTellaskCallEvents(args) {
|
|
1483
1673
|
await args.dlg.callingStart({
|
|
1484
1674
|
callName: args.callName,
|
|
1485
1675
|
callId: args.callId,
|
|
@@ -1667,69 +1857,10 @@ function toExecutableValidTellaskCall(call) {
|
|
|
1667
1857
|
};
|
|
1668
1858
|
}
|
|
1669
1859
|
}
|
|
1670
|
-
function normalizeQ4HCalls(calls, dlg) {
|
|
1671
|
-
const q4hCalls = calls.filter((call) => call.callName === 'askHuman');
|
|
1672
|
-
const nonQ4HCalls = calls
|
|
1673
|
-
.filter((call) => call.callName !== 'askHuman')
|
|
1674
|
-
.map((call) => {
|
|
1675
|
-
switch (call.callName) {
|
|
1676
|
-
case 'tellask':
|
|
1677
|
-
case 'tellaskSessionless':
|
|
1678
|
-
return { ...call, mentionList: [...call.mentionList] };
|
|
1679
|
-
case 'tellaskBack':
|
|
1680
|
-
case 'replyTellask':
|
|
1681
|
-
case 'replyTellaskSessionless':
|
|
1682
|
-
case 'replyTellaskBack':
|
|
1683
|
-
case 'freshBootsReasoning':
|
|
1684
|
-
return { ...call };
|
|
1685
|
-
}
|
|
1686
|
-
});
|
|
1687
|
-
if (q4hCalls.length <= 1) {
|
|
1688
|
-
return q4hCalls.length === 1 ? [...nonQ4HCalls, { ...q4hCalls[0] }] : nonQ4HCalls;
|
|
1689
|
-
}
|
|
1690
|
-
const primary = q4hCalls[0];
|
|
1691
|
-
const remainingCallIds = q4hCalls
|
|
1692
|
-
.slice(1)
|
|
1693
|
-
.map((call) => call.callId.trim())
|
|
1694
|
-
.filter((callId) => callId !== '');
|
|
1695
|
-
const language = (0, work_language_1.getWorkLanguage)();
|
|
1696
|
-
const intro = language === 'zh'
|
|
1697
|
-
? `我这次有 ${q4hCalls.length} 个问题,想请你一次性回复:`
|
|
1698
|
-
: `I have ${q4hCalls.length} questions this round. Please answer them in one response:`;
|
|
1699
|
-
const mergedBody = [
|
|
1700
|
-
intro,
|
|
1701
|
-
...q4hCalls.map((call, index) => {
|
|
1702
|
-
const body = call.tellaskContent.trim();
|
|
1703
|
-
const normalizedBody = body !== ''
|
|
1704
|
-
? body
|
|
1705
|
-
: language === 'zh'
|
|
1706
|
-
? '请结合当前上下文补充这一项。'
|
|
1707
|
-
: 'Please provide this item based on the current context.';
|
|
1708
|
-
return language === 'zh'
|
|
1709
|
-
? `问题 ${index + 1}:\n${normalizedBody}`
|
|
1710
|
-
: `Question ${index + 1}:\n${normalizedBody}`;
|
|
1711
|
-
}),
|
|
1712
|
-
].join('\n\n');
|
|
1713
|
-
const mergedQ4HCall = {
|
|
1714
|
-
callName: 'askHuman',
|
|
1715
|
-
callId: primary.callId,
|
|
1716
|
-
tellaskContent: mergedBody,
|
|
1717
|
-
q4hRemainingCallIds: remainingCallIds.length > 0 ? remainingCallIds : undefined,
|
|
1718
|
-
};
|
|
1719
|
-
log_1.log.debug('Q4H multi-question normalized into a single prompt', undefined, {
|
|
1720
|
-
rootId: dlg.id.rootId,
|
|
1721
|
-
selfId: dlg.id.selfId,
|
|
1722
|
-
mergedCount: q4hCalls.length,
|
|
1723
|
-
primaryCallId: primary.callId,
|
|
1724
|
-
remainingCallIds,
|
|
1725
|
-
});
|
|
1726
|
-
return [...nonQ4HCalls, mergedQ4HCall];
|
|
1727
|
-
}
|
|
1728
1860
|
async function executeValidTellaskCalls(args) {
|
|
1729
|
-
const executionCalls = normalizeQ4HCalls(args.calls, args.dlg);
|
|
1730
1861
|
const results = [];
|
|
1731
1862
|
const successfulReplyCallIds = [];
|
|
1732
|
-
for (const call of
|
|
1863
|
+
for (const call of args.calls) {
|
|
1733
1864
|
const runtimeMentionList = (() => {
|
|
1734
1865
|
switch (call.callName) {
|
|
1735
1866
|
case 'tellask':
|
|
@@ -1747,7 +1878,7 @@ async function executeValidTellaskCalls(args) {
|
|
|
1747
1878
|
if (!isReplyTellaskCallName(call.callName)) {
|
|
1748
1879
|
const nonReplyCall = call;
|
|
1749
1880
|
const sessionSlug = nonReplyCall.callName === 'tellask' ? nonReplyCall.sessionSlug : undefined;
|
|
1750
|
-
await
|
|
1881
|
+
await emitTellaskCallEvents({
|
|
1751
1882
|
dlg: args.dlg,
|
|
1752
1883
|
callName: nonReplyCall.callName,
|
|
1753
1884
|
mentionList: runtimeMentionList,
|
|
@@ -1818,7 +1949,6 @@ async function executeValidTellaskCalls(args) {
|
|
|
1818
1949
|
callName: call.callName,
|
|
1819
1950
|
parseResult,
|
|
1820
1951
|
targetForError,
|
|
1821
|
-
q4hRemainingCallIds: call.q4hRemainingCallIds,
|
|
1822
1952
|
fbrEffortOverride: call.callName === 'freshBootsReasoning' ? call.effort : undefined,
|
|
1823
1953
|
});
|
|
1824
1954
|
results.push(toolOutputs);
|
|
@@ -1828,7 +1958,7 @@ async function executeValidTellaskCalls(args) {
|
|
|
1828
1958
|
successfulReplyCallIds,
|
|
1829
1959
|
};
|
|
1830
1960
|
}
|
|
1831
|
-
async function
|
|
1961
|
+
async function executeTellaskCalls(args) {
|
|
1832
1962
|
if (args.calls.length === 0) {
|
|
1833
1963
|
return { toolOutputs: [], successfulReplyCallIds: [] };
|
|
1834
1964
|
}
|
|
@@ -1838,3 +1968,182 @@ async function executeTellaskSpecialCalls(args) {
|
|
|
1838
1968
|
callbacks: args.callbacks,
|
|
1839
1969
|
});
|
|
1840
1970
|
}
|
|
1971
|
+
async function processTellaskFunctionRound(args) {
|
|
1972
|
+
const multiAskHumanCalls = args.funcCalls.filter((call) => call.name === 'askHuman' && args.allowedSpecials.has('askHuman'));
|
|
1973
|
+
const funcCallsForResolution = multiAskHumanCalls.length > 1
|
|
1974
|
+
? args.funcCalls.filter((call) => call.name !== 'askHuman')
|
|
1975
|
+
: args.funcCalls;
|
|
1976
|
+
const resolvedTellask = resolveTellaskFunctionCalls(funcCallsForResolution, {
|
|
1977
|
+
allowedSpecials: args.allowedSpecials,
|
|
1978
|
+
});
|
|
1979
|
+
const validByCallId = new Map(resolvedTellask.validCalls.map((handled) => [handled.originalCall.id, handled]));
|
|
1980
|
+
const invalidByCallId = new Map(resolvedTellask.invalidCalls.map((issue) => [issue.originalCall.id, issue]));
|
|
1981
|
+
const orderedSpecialDispositions = [];
|
|
1982
|
+
for (const originalCall of args.funcCalls) {
|
|
1983
|
+
if (!isTellaskCallFunctionName(originalCall.name) ||
|
|
1984
|
+
!args.allowedSpecials.has(originalCall.name)) {
|
|
1985
|
+
continue;
|
|
1986
|
+
}
|
|
1987
|
+
if (multiAskHumanCalls.length > 1 && originalCall.name === 'askHuman') {
|
|
1988
|
+
orderedSpecialDispositions.push({
|
|
1989
|
+
kind: 'invalid',
|
|
1990
|
+
issue: {
|
|
1991
|
+
originalCall,
|
|
1992
|
+
error: MULTIPLE_ASKHUMAN_CALLS_ERROR,
|
|
1993
|
+
rawArgumentsText: getRawArgumentsText(originalCall),
|
|
1994
|
+
contextArguments: getRawArgumentsText(originalCall),
|
|
1995
|
+
},
|
|
1996
|
+
});
|
|
1997
|
+
continue;
|
|
1998
|
+
}
|
|
1999
|
+
const handled = validByCallId.get(originalCall.id);
|
|
2000
|
+
if (handled) {
|
|
2001
|
+
orderedSpecialDispositions.push({ kind: 'valid', handled });
|
|
2002
|
+
continue;
|
|
2003
|
+
}
|
|
2004
|
+
const issue = invalidByCallId.get(originalCall.id);
|
|
2005
|
+
if (issue) {
|
|
2006
|
+
orderedSpecialDispositions.push({ kind: 'invalid', issue });
|
|
2007
|
+
continue;
|
|
2008
|
+
}
|
|
2009
|
+
throw new Error(`kernel-driver tellask special call invariant violation: unresolved tellask disposition for '${originalCall.id}' (${originalCall.name})`);
|
|
2010
|
+
}
|
|
2011
|
+
const orderedValidCalls = orderedSpecialDispositions.flatMap((entry) => entry.kind === 'valid' ? [entry.handled] : []);
|
|
2012
|
+
const orderedInvalidCalls = orderedSpecialDispositions.flatMap((entry) => entry.kind === 'invalid' ? [entry.issue] : []);
|
|
2013
|
+
const specialCallById = new Map(orderedValidCalls.map(({ call }) => [call.callId, call]));
|
|
2014
|
+
const originalCallById = new Map(args.funcCalls.map((call) => [call.id, call]));
|
|
2015
|
+
const tellaskCallMessages = [];
|
|
2016
|
+
const issueResults = [];
|
|
2017
|
+
for (const disposition of orderedSpecialDispositions) {
|
|
2018
|
+
if (disposition.kind === 'valid') {
|
|
2019
|
+
const handled = disposition.handled;
|
|
2020
|
+
await args.dlg.persistTellaskCall(handled.originalCall.id, handled.call.callName, getRawArgumentsText(handled.originalCall), handled.originalCall.genseq, {
|
|
2021
|
+
deliveryMode: isReplyTellaskCallName(handled.call.callName)
|
|
2022
|
+
? 'func_call_requested'
|
|
2023
|
+
: 'tellask_call_start',
|
|
2024
|
+
});
|
|
2025
|
+
tellaskCallMessages.push({
|
|
2026
|
+
type: 'func_call_msg',
|
|
2027
|
+
role: 'assistant',
|
|
2028
|
+
genseq: handled.originalCall.genseq,
|
|
2029
|
+
id: handled.originalCall.id,
|
|
2030
|
+
name: handled.call.callName,
|
|
2031
|
+
arguments: getRawArgumentsText(handled.originalCall),
|
|
2032
|
+
});
|
|
2033
|
+
continue;
|
|
2034
|
+
}
|
|
2035
|
+
const issue = disposition.issue;
|
|
2036
|
+
await args.dlg.funcCallRequested(issue.originalCall.id, issue.originalCall.name, issue.contextArguments);
|
|
2037
|
+
const result = formatTellaskInvalidCallResult({
|
|
2038
|
+
call: issue.originalCall,
|
|
2039
|
+
error: issue.error,
|
|
2040
|
+
});
|
|
2041
|
+
await args.dlg.persistTellaskCallResultPair({
|
|
2042
|
+
id: issue.originalCall.id,
|
|
2043
|
+
name: issue.originalCall.name,
|
|
2044
|
+
rawArgumentsText: issue.rawArgumentsText,
|
|
2045
|
+
genseq: issue.originalCall.genseq,
|
|
2046
|
+
result,
|
|
2047
|
+
deliveryMode: 'func_call_requested',
|
|
2048
|
+
});
|
|
2049
|
+
tellaskCallMessages.push({
|
|
2050
|
+
type: 'func_call_msg',
|
|
2051
|
+
role: 'assistant',
|
|
2052
|
+
genseq: issue.originalCall.genseq,
|
|
2053
|
+
id: issue.originalCall.id,
|
|
2054
|
+
name: issue.originalCall.name,
|
|
2055
|
+
arguments: issue.rawArgumentsText,
|
|
2056
|
+
});
|
|
2057
|
+
issueResults.push(result);
|
|
2058
|
+
}
|
|
2059
|
+
let tellaskExecution;
|
|
2060
|
+
try {
|
|
2061
|
+
tellaskExecution = await executeTellaskCalls({
|
|
2062
|
+
dlg: args.dlg,
|
|
2063
|
+
calls: orderedValidCalls.map((handled) => handled.call),
|
|
2064
|
+
callbacks: args.callbacks,
|
|
2065
|
+
});
|
|
2066
|
+
}
|
|
2067
|
+
catch (err) {
|
|
2068
|
+
const errText = err instanceof Error ? `${err.name}: ${err.message}` : String(err);
|
|
2069
|
+
for (const { call } of orderedValidCalls) {
|
|
2070
|
+
if (issueResults.some((result) => result.id === call.callId)) {
|
|
2071
|
+
continue;
|
|
2072
|
+
}
|
|
2073
|
+
const originalCall = originalCallById.get(call.callId);
|
|
2074
|
+
if (!originalCall) {
|
|
2075
|
+
throw new Error(`kernel-driver tellask special call invariant violation: missing original call for '${call.callId}'`);
|
|
2076
|
+
}
|
|
2077
|
+
await persistTellaskFuncResult(args.dlg, {
|
|
2078
|
+
type: 'func_result_msg',
|
|
2079
|
+
id: call.callId,
|
|
2080
|
+
name: call.callName,
|
|
2081
|
+
content: `Special function '${call.callName}' execution failed: ${errText}`,
|
|
2082
|
+
role: 'tool',
|
|
2083
|
+
genseq: originalCall.genseq,
|
|
2084
|
+
});
|
|
2085
|
+
}
|
|
2086
|
+
throw err;
|
|
2087
|
+
}
|
|
2088
|
+
const tellaskFuncResults = [];
|
|
2089
|
+
const tellaskFuncResultByCallId = new Map();
|
|
2090
|
+
const tellaskToolOutputs = [];
|
|
2091
|
+
for (const output of tellaskExecution.toolOutputs) {
|
|
2092
|
+
if (output.type === 'func_result_msg') {
|
|
2093
|
+
const result = output;
|
|
2094
|
+
tellaskFuncResultByCallId.set(result.id, result);
|
|
2095
|
+
tellaskFuncResults.push(result);
|
|
2096
|
+
continue;
|
|
2097
|
+
}
|
|
2098
|
+
if (output.type === 'tellask_result_msg') {
|
|
2099
|
+
const callId = typeof output.callId === 'string' ? output.callId : '';
|
|
2100
|
+
if (callId === '') {
|
|
2101
|
+
tellaskToolOutputs.push(output);
|
|
2102
|
+
continue;
|
|
2103
|
+
}
|
|
2104
|
+
const originatingCall = specialCallById.get(callId);
|
|
2105
|
+
if (originatingCall) {
|
|
2106
|
+
const originalCall = originalCallById.get(callId);
|
|
2107
|
+
const result = {
|
|
2108
|
+
type: 'func_result_msg',
|
|
2109
|
+
role: 'tool',
|
|
2110
|
+
genseq: originalCall?.genseq ?? 1,
|
|
2111
|
+
id: callId,
|
|
2112
|
+
name: originatingCall.callName,
|
|
2113
|
+
content: output.content,
|
|
2114
|
+
};
|
|
2115
|
+
tellaskFuncResultByCallId.set(callId, result);
|
|
2116
|
+
tellaskFuncResults.push(result);
|
|
2117
|
+
}
|
|
2118
|
+
continue;
|
|
2119
|
+
}
|
|
2120
|
+
tellaskToolOutputs.push(output);
|
|
2121
|
+
}
|
|
2122
|
+
for (const { call } of orderedValidCalls) {
|
|
2123
|
+
if (tellaskFuncResultByCallId.has(call.callId)) {
|
|
2124
|
+
continue;
|
|
2125
|
+
}
|
|
2126
|
+
const originalCall = originalCallById.get(call.callId);
|
|
2127
|
+
if (!originalCall) {
|
|
2128
|
+
throw new Error(`kernel-driver tellask call invariant violation: missing original call for '${call.callId}'`);
|
|
2129
|
+
}
|
|
2130
|
+
const pendingResult = buildPendingTellaskFuncResult({
|
|
2131
|
+
callId: call.callId,
|
|
2132
|
+
callName: call.callName,
|
|
2133
|
+
genseq: originalCall.genseq,
|
|
2134
|
+
});
|
|
2135
|
+
tellaskFuncResultByCallId.set(call.callId, pendingResult);
|
|
2136
|
+
tellaskFuncResults.push(pendingResult);
|
|
2137
|
+
}
|
|
2138
|
+
for (const result of tellaskFuncResults) {
|
|
2139
|
+
await persistTellaskFuncResult(args.dlg, result);
|
|
2140
|
+
}
|
|
2141
|
+
return {
|
|
2142
|
+
normalCalls: resolvedTellask.normalCalls,
|
|
2143
|
+
tellaskCallMessages,
|
|
2144
|
+
tellaskResults: [...issueResults, ...tellaskFuncResults],
|
|
2145
|
+
toolOutputs: tellaskToolOutputs,
|
|
2146
|
+
handledCallIds: orderedValidCalls.map(({ call }) => call.callId),
|
|
2147
|
+
shouldStopAfterReplyTool: tellaskExecution.successfulReplyCallIds.length > 0,
|
|
2148
|
+
};
|
|
2149
|
+
}
|