dominds 0.7.6 → 0.8.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/README.md +2 -2
- package/README.zh.md +2 -2
- package/dist/agent-priming.js +169 -200
- package/dist/cli/read.js +2 -7
- package/dist/dialog-factory.js +6 -4
- package/dist/dialog-instance-registry.js +2 -2
- package/dist/dialog.js +99 -91
- package/dist/docs/dialog-persistence.md +2 -2
- package/dist/docs/dialog-persistence.zh.md +2 -2
- package/dist/docs/dialog-system.md +86 -90
- package/dist/docs/dialog-system.zh.md +82 -83
- package/dist/docs/diligence-push.md +2 -2
- package/dist/docs/diligence-push.zh.md +2 -2
- package/dist/docs/dominds-agent-priming.md +11 -11
- package/dist/docs/dominds-agent-priming.zh.md +9 -9
- package/dist/docs/dominds-terminology.md +34 -34
- package/dist/docs/fbr-implementation.md +4 -4
- package/dist/docs/fbr-implementation.zh.md +4 -4
- package/dist/docs/fbr.md +31 -53
- package/dist/docs/fbr.zh.md +30 -48
- package/dist/docs/mottos.md +2 -3
- package/dist/docs/mottos.zh.md +2 -2
- package/dist/docs/q4h.md +6 -6
- package/dist/docs/q4h.zh.md +6 -6
- package/dist/docs/tellask-collab.md +13 -13
- package/dist/docs/tellask-collab.zh.md +18 -18
- package/dist/llm/driver-entry.js +9 -33
- package/dist/llm/driver-v2/core.js +413 -111
- package/dist/llm/driver-v2/index.js +5 -0
- package/dist/llm/driver-v2/orchestrator.js +4 -3
- package/dist/llm/driver-v2/policy.js +17 -23
- package/dist/llm/driver-v2/restore-dialog-hierarchy.js +73 -0
- package/dist/llm/driver-v2/round.js +18 -7
- package/dist/llm/driver-v2/runtime-utils.js +3 -5
- package/dist/llm/driver-v2/saying-events.js +4 -42
- package/dist/llm/driver-v2/supdialog-response.js +110 -23
- package/dist/llm/driver-v2/tellask-bridge.js +560 -458
- package/dist/mcp/sdk-client.js +1 -1
- package/dist/mcp/server-runtime.js +1 -1
- package/dist/mcp/stdio-client.js +6 -6
- package/dist/mcp/tool-names.js +1 -1
- package/dist/minds/builtin/fuxi/persona.en.md +10 -10
- package/dist/minds/builtin/fuxi/persona.zh.md +12 -12
- package/dist/minds/builtin/pangu/persona.en.md +7 -7
- package/dist/minds/builtin/pangu/persona.zh.md +6 -6
- package/dist/minds/minds-i18n.js +2 -2
- package/dist/minds/system-prompt-parts.js +15 -12
- package/dist/minds/system-prompt.js +58 -56
- package/dist/persistence.js +675 -527
- package/dist/server/api-routes.js +1 -1
- package/dist/server/websocket-handler.js +10 -20
- package/dist/server.js +3 -3
- package/dist/shared/diligence.js +12 -12
- package/dist/shared/i18n/driver-messages.js +28 -118
- package/dist/shared/utils/inter-dialog-format.js +53 -53
- package/dist/snippets/starting.en.md +1 -1
- package/dist/snippets/starting.zh.md +1 -2
- package/dist/static/assets/{_baseUniq-2IQvcpiv.js → _baseUniq-D4N_zVXV.js} +2 -2
- package/dist/static/assets/{_baseUniq-2IQvcpiv.js.map → _baseUniq-D4N_zVXV.js.map} +1 -1
- package/dist/static/assets/{arc-Boi4s2EY.js → arc-7bP9qomB.js} +2 -2
- package/dist/static/assets/{arc-Boi4s2EY.js.map → arc-7bP9qomB.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-CV1IIalQ.js → architectureDiagram-VXUJARFQ-DToIiZuZ.js} +6 -6
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-CV1IIalQ.js.map → architectureDiagram-VXUJARFQ-DToIiZuZ.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-C66ZvUb1.js → blockDiagram-VD42YOAC-C-pRNHpf.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-C66ZvUb1.js.map → blockDiagram-VD42YOAC-C-pRNHpf.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-2YQZQ-KQ.js → c4Diagram-YG6GDRKO-Bnp-nWKO.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-2YQZQ-KQ.js.map → c4Diagram-YG6GDRKO-Bnp-nWKO.js.map} +1 -1
- package/dist/static/assets/{channel-DBG_xYT_.js → channel-CTv1SsAF.js} +2 -2
- package/dist/static/assets/{channel-DBG_xYT_.js.map → channel-CTv1SsAF.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-D92pQ5qM.js → chunk-4BX2VUAB-D_OGa3ss.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-D92pQ5qM.js.map → chunk-4BX2VUAB-D_OGa3ss.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-T3IKxvjm.js → chunk-55IACEB6-I4o4MCuM.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-T3IKxvjm.js.map → chunk-55IACEB6-I4o4MCuM.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW-SKDCq7xY.js → chunk-B4BG7PRW-Bp-TIXg6.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW-SKDCq7xY.js.map → chunk-B4BG7PRW-Bp-TIXg6.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-CKY9xXzj.js → chunk-DI55MBZ5-Bnph5Hmd.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-CKY9xXzj.js.map → chunk-DI55MBZ5-Bnph5Hmd.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-CzaQthG_.js → chunk-FMBD7UC4-q3UyRsNI.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-CzaQthG_.js.map → chunk-FMBD7UC4-q3UyRsNI.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-8v7ASP75.js → chunk-QN33PNHL-BxUlvLXP.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-8v7ASP75.js.map → chunk-QN33PNHL-BxUlvLXP.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-Cd3_mr-D.js → chunk-QZHKN3VN-DpQR9BVw.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-Cd3_mr-D.js.map → chunk-QZHKN3VN-DpQR9BVw.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-BrTyfkJK.js → chunk-TZMSLE5B-BX8vrVo0.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-BrTyfkJK.js.map → chunk-TZMSLE5B-BX8vrVo0.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-pLBmQ3Qa.js → classDiagram-2ON5EDUG-Ccx5_2Xq.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-pLBmQ3Qa.js.map → classDiagram-2ON5EDUG-Ccx5_2Xq.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-pLBmQ3Qa.js → classDiagram-v2-WZHVMYZB-Ccx5_2Xq.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-pLBmQ3Qa.js.map → classDiagram-v2-WZHVMYZB-Ccx5_2Xq.js.map} +1 -1
- package/dist/static/assets/{clone-rjxmrDHc.js → clone-Cl5zSMrO.js} +2 -2
- package/dist/static/assets/{clone-rjxmrDHc.js.map → clone-Cl5zSMrO.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-DaW3q2vS.js → cose-bilkent-S5V4N54A-B-FUX86B.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-DaW3q2vS.js.map → cose-bilkent-S5V4N54A-B-FUX86B.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-BT252775.js → dagre-6UL2VRFP-Bj8vSSpT.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-BT252775.js.map → dagre-6UL2VRFP-Bj8vSSpT.js.map} +1 -1
- package/dist/static/assets/{diagram-PSM6KHXK-Cp0jEYgm.js → diagram-PSM6KHXK-BPcgy7jf.js} +7 -7
- package/dist/static/assets/{diagram-PSM6KHXK-Cp0jEYgm.js.map → diagram-PSM6KHXK-BPcgy7jf.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-BYEiCch_.js → diagram-QEK2KX5R-DHxd6LWi.js} +6 -6
- package/dist/static/assets/{diagram-QEK2KX5R-BYEiCch_.js.map → diagram-QEK2KX5R-DHxd6LWi.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-SNGZ1B53.js → diagram-S2PKOQOG-C4ynhhLr.js} +6 -6
- package/dist/static/assets/{diagram-S2PKOQOG-SNGZ1B53.js.map → diagram-S2PKOQOG-C4ynhhLr.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-CMdkkngT.js → erDiagram-Q2GNP2WA-CQ25uxxf.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-CMdkkngT.js.map → erDiagram-Q2GNP2WA-CQ25uxxf.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-k203P84f.js → flowDiagram-NV44I4VS-ChkkAldk.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-k203P84f.js.map → flowDiagram-NV44I4VS-ChkkAldk.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-CgsVe01-.js → ganttDiagram-JELNMOA3-CBt_Zorl.js} +3 -3
- package/dist/static/assets/{ganttDiagram-JELNMOA3-CgsVe01-.js.map → ganttDiagram-JELNMOA3-CBt_Zorl.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-BGOR_N5w.js → gitGraphDiagram-NY62KEGX-CtBc2dOO.js} +7 -7
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-BGOR_N5w.js.map → gitGraphDiagram-NY62KEGX-CtBc2dOO.js.map} +1 -1
- package/dist/static/assets/{graph-DDHIhCSW.js → graph-BGzNnzuI.js} +3 -3
- package/dist/static/assets/{graph-DDHIhCSW.js.map → graph-BGzNnzuI.js.map} +1 -1
- package/dist/static/assets/{index-CUZD-Ua6.js → index-Vrp1PT3b.js} +654 -355
- package/dist/static/assets/index-Vrp1PT3b.js.map +1 -0
- package/dist/static/assets/{infoDiagram-WHAUD3N6-D0GlWUIm.js → infoDiagram-WHAUD3N6-BYJF-Ol5.js} +5 -5
- package/dist/static/assets/{infoDiagram-WHAUD3N6-D0GlWUIm.js.map → infoDiagram-WHAUD3N6-BYJF-Ol5.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-I0W1fDTZ.js → journeyDiagram-XKPGCS4Q-Cl2p8ZBw.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-I0W1fDTZ.js.map → journeyDiagram-XKPGCS4Q-Cl2p8ZBw.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BY5xVZyl.js → kanban-definition-3W4ZIXB7-DBH-HEwY.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BY5xVZyl.js.map → kanban-definition-3W4ZIXB7-DBH-HEwY.js.map} +1 -1
- package/dist/static/assets/{layout-C7mFT1m6.js → layout-DdWO-uEo.js} +5 -5
- package/dist/static/assets/{layout-C7mFT1m6.js.map → layout-DdWO-uEo.js.map} +1 -1
- package/dist/static/assets/{linear-WSX0brRY.js → linear-BY3MovaF.js} +2 -2
- package/dist/static/assets/{linear-WSX0brRY.js.map → linear-BY3MovaF.js.map} +1 -1
- package/dist/static/assets/{min-DOTQTP4p.js → min-aHCJK1uN.js} +3 -3
- package/dist/static/assets/{min-DOTQTP4p.js.map → min-aHCJK1uN.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-BWhHo-Hq.js → mindmap-definition-VGOIOE7T-BjJnBRtB.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-BWhHo-Hq.js.map → mindmap-definition-VGOIOE7T-BjJnBRtB.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-B91oxvos.js → pieDiagram-ADFJNKIX-xAcmdymv.js} +7 -7
- package/dist/static/assets/{pieDiagram-ADFJNKIX-B91oxvos.js.map → pieDiagram-ADFJNKIX-xAcmdymv.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DqMUyBPr.js → quadrantDiagram-AYHSOK5B-BPbEGCEj.js} +3 -3
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DqMUyBPr.js.map → quadrantDiagram-AYHSOK5B-BPbEGCEj.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-COUayA3m.js → requirementDiagram-UZGBJVZJ--w6UfXy0.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-COUayA3m.js.map → requirementDiagram-UZGBJVZJ--w6UfXy0.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-Bp9r8YDi.js → sankeyDiagram-TZEHDZUN-B_T6TQwh.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-Bp9r8YDi.js.map → sankeyDiagram-TZEHDZUN-B_T6TQwh.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-CpuTC5cG.js → sequenceDiagram-WL72ISMW-DX_oVvqA.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-CpuTC5cG.js.map → sequenceDiagram-WL72ISMW-DX_oVvqA.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-Bxoo7e6E.js → stateDiagram-FKZM4ZOC-BAybZU8l.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-Bxoo7e6E.js.map → stateDiagram-FKZM4ZOC-BAybZU8l.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Q-DL7tae.js → stateDiagram-v2-4FDKWEC3-BUsvuCdD.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Q-DL7tae.js.map → stateDiagram-v2-4FDKWEC3-BUsvuCdD.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-DuOiHQPk.js → timeline-definition-IT6M3QCI-DOYN-4XM.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-DuOiHQPk.js.map → timeline-definition-IT6M3QCI-DOYN-4XM.js.map} +1 -1
- package/dist/static/assets/{treemap-KMMF4GRG-YbrDC0fO.js → treemap-KMMF4GRG-CQXygT0T.js} +4 -4
- package/dist/static/assets/{treemap-KMMF4GRG-YbrDC0fO.js.map → treemap-KMMF4GRG-CQXygT0T.js.map} +1 -1
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-DDRlTIfV.js → xychartDiagram-PRI3JC2R-ByFAvTeN.js} +3 -3
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-DDRlTIfV.js.map → xychartDiagram-PRI3JC2R-ByFAvTeN.js.map} +1 -1
- package/dist/static/index.html +1 -1
- package/dist/tools/builtins.js +0 -8
- package/dist/tools/env.js +1 -1
- package/dist/tools/mcp.js +31 -9
- package/dist/tools/pending-tellask-reminder.js +14 -17
- package/dist/tools/team-mgmt.js +1 -1
- package/package.json +1 -1
- package/dist/static/assets/index-CUZD-Ua6.js.map +0 -1
|
@@ -33,7 +33,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.
|
|
36
|
+
exports.isTellaskSpecialFunctionName = isTellaskSpecialFunctionName;
|
|
37
|
+
exports.classifyTellaskSpecialFunctionCalls = classifyTellaskSpecialFunctionCalls;
|
|
38
|
+
exports.executeTellaskSpecialCalls = executeTellaskSpecialCalls;
|
|
37
39
|
const util_1 = require("util");
|
|
38
40
|
const dialog_1 = require("../../dialog");
|
|
39
41
|
const evt_registry_1 = require("../../evt-registry");
|
|
@@ -47,6 +49,194 @@ const time_1 = require("../../shared/utils/time");
|
|
|
47
49
|
const team_1 = require("../../team");
|
|
48
50
|
const pending_tellask_reminder_1 = require("../../tools/pending-tellask-reminder");
|
|
49
51
|
const subdialog_txn_1 = require("./subdialog-txn");
|
|
52
|
+
const TELLASK_SPECIAL_FUNCTION_NAMES = [
|
|
53
|
+
'tellaskBack',
|
|
54
|
+
'tellask',
|
|
55
|
+
'tellaskSessionless',
|
|
56
|
+
'askHuman',
|
|
57
|
+
'freshBootsReasoning',
|
|
58
|
+
];
|
|
59
|
+
function isTellaskSpecialFunctionName(name) {
|
|
60
|
+
return TELLASK_SPECIAL_FUNCTION_NAMES.includes(name);
|
|
61
|
+
}
|
|
62
|
+
function isRecord(value) {
|
|
63
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
64
|
+
}
|
|
65
|
+
function parseFuncCallArgsObject(call) {
|
|
66
|
+
try {
|
|
67
|
+
const parsed = JSON.parse(call.arguments || '{}');
|
|
68
|
+
if (!isRecord(parsed)) {
|
|
69
|
+
return { ok: false, error: 'arguments must be a JSON object' };
|
|
70
|
+
}
|
|
71
|
+
return { ok: true, value: parsed };
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
return {
|
|
75
|
+
ok: false,
|
|
76
|
+
error: `arguments must be valid JSON: ${err instanceof Error ? err.message : String(err)}`,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function readRequiredStringField(obj, field) {
|
|
81
|
+
const value = obj[field];
|
|
82
|
+
if (typeof value !== 'string') {
|
|
83
|
+
return { ok: false, error: `field '${field}' must be a string` };
|
|
84
|
+
}
|
|
85
|
+
const trimmed = value.trim();
|
|
86
|
+
if (trimmed === '') {
|
|
87
|
+
return { ok: false, error: `field '${field}' must not be empty` };
|
|
88
|
+
}
|
|
89
|
+
return { ok: true, value: trimmed };
|
|
90
|
+
}
|
|
91
|
+
function readOptionalStringField(obj, field) {
|
|
92
|
+
const value = obj[field];
|
|
93
|
+
if (value === undefined) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
if (typeof value !== 'string') {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const trimmed = value.trim();
|
|
100
|
+
return trimmed === '' ? null : trimmed;
|
|
101
|
+
}
|
|
102
|
+
function readTargetAgentId(obj) {
|
|
103
|
+
const target = readOptionalStringField(obj, 'targetAgentId') ??
|
|
104
|
+
readOptionalStringField(obj, 'agentId') ??
|
|
105
|
+
readOptionalStringField(obj, 'target');
|
|
106
|
+
if (!target) {
|
|
107
|
+
return {
|
|
108
|
+
ok: false,
|
|
109
|
+
error: "missing target agent id (expected 'targetAgentId' or 'agentId')",
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return { ok: true, value: target };
|
|
113
|
+
}
|
|
114
|
+
function normalizeTeammateTargetAgentId(rawTarget) {
|
|
115
|
+
const trimmed = rawTarget.trim();
|
|
116
|
+
const withoutAt = trimmed.startsWith('@') ? trimmed.slice(1).trim() : trimmed;
|
|
117
|
+
if (withoutAt === '') {
|
|
118
|
+
return {
|
|
119
|
+
ok: false,
|
|
120
|
+
error: 'targetAgentId must not be empty',
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
return { ok: true, value: withoutAt };
|
|
124
|
+
}
|
|
125
|
+
function parseTellaskSpecialCall(call) {
|
|
126
|
+
if (!isTellaskSpecialFunctionName(call.name)) {
|
|
127
|
+
return { ok: false, error: `unsupported tellask special function '${call.name}'` };
|
|
128
|
+
}
|
|
129
|
+
const argsResult = parseFuncCallArgsObject(call);
|
|
130
|
+
if (!argsResult.ok) {
|
|
131
|
+
return argsResult;
|
|
132
|
+
}
|
|
133
|
+
const args = argsResult.value;
|
|
134
|
+
const tellaskContent = readRequiredStringField(args, 'tellaskContent');
|
|
135
|
+
if (!tellaskContent.ok) {
|
|
136
|
+
return tellaskContent;
|
|
137
|
+
}
|
|
138
|
+
switch (call.name) {
|
|
139
|
+
case 'tellaskBack': {
|
|
140
|
+
return {
|
|
141
|
+
ok: true,
|
|
142
|
+
value: {
|
|
143
|
+
callId: call.id,
|
|
144
|
+
callName: 'tellaskBack',
|
|
145
|
+
tellaskContent: tellaskContent.value,
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
case 'askHuman': {
|
|
150
|
+
return {
|
|
151
|
+
ok: true,
|
|
152
|
+
value: {
|
|
153
|
+
callId: call.id,
|
|
154
|
+
callName: 'askHuman',
|
|
155
|
+
tellaskContent: tellaskContent.value,
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
case 'freshBootsReasoning': {
|
|
160
|
+
return {
|
|
161
|
+
ok: true,
|
|
162
|
+
value: {
|
|
163
|
+
callId: call.id,
|
|
164
|
+
callName: 'freshBootsReasoning',
|
|
165
|
+
tellaskContent: tellaskContent.value,
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
case 'tellask': {
|
|
170
|
+
const target = readTargetAgentId(args);
|
|
171
|
+
if (!target.ok) {
|
|
172
|
+
return target;
|
|
173
|
+
}
|
|
174
|
+
const normalizedTarget = normalizeTeammateTargetAgentId(target.value);
|
|
175
|
+
if (!normalizedTarget.ok) {
|
|
176
|
+
return normalizedTarget;
|
|
177
|
+
}
|
|
178
|
+
const sessionSlug = readRequiredStringField(args, 'sessionSlug');
|
|
179
|
+
if (!sessionSlug.ok) {
|
|
180
|
+
return sessionSlug;
|
|
181
|
+
}
|
|
182
|
+
if (!isValidSessionSlug(sessionSlug.value)) {
|
|
183
|
+
return {
|
|
184
|
+
ok: false,
|
|
185
|
+
error: "field 'sessionSlug' must match <alpha>[<alnum|_|->]*(.<segment>)*, e.g. 'build-loop' or 'repo.sync'",
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
ok: true,
|
|
190
|
+
value: {
|
|
191
|
+
callId: call.id,
|
|
192
|
+
callName: 'tellask',
|
|
193
|
+
targetAgentId: normalizedTarget.value,
|
|
194
|
+
sessionSlug: sessionSlug.value,
|
|
195
|
+
mentionList: [`@${normalizedTarget.value}`],
|
|
196
|
+
tellaskContent: tellaskContent.value,
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
case 'tellaskSessionless': {
|
|
201
|
+
const target = readTargetAgentId(args);
|
|
202
|
+
if (!target.ok) {
|
|
203
|
+
return target;
|
|
204
|
+
}
|
|
205
|
+
const normalizedTarget = normalizeTeammateTargetAgentId(target.value);
|
|
206
|
+
if (!normalizedTarget.ok) {
|
|
207
|
+
return normalizedTarget;
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
ok: true,
|
|
211
|
+
value: {
|
|
212
|
+
callId: call.id,
|
|
213
|
+
callName: 'tellaskSessionless',
|
|
214
|
+
targetAgentId: normalizedTarget.value,
|
|
215
|
+
mentionList: [`@${normalizedTarget.value}`],
|
|
216
|
+
tellaskContent: tellaskContent.value,
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
function classifyTellaskSpecialFunctionCalls(funcCalls) {
|
|
223
|
+
const specialCalls = [];
|
|
224
|
+
const normalCalls = [];
|
|
225
|
+
const parseIssues = [];
|
|
226
|
+
for (const call of funcCalls) {
|
|
227
|
+
if (!isTellaskSpecialFunctionName(call.name)) {
|
|
228
|
+
normalCalls.push(call);
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
const parsed = parseTellaskSpecialCall(call);
|
|
232
|
+
if (!parsed.ok) {
|
|
233
|
+
parseIssues.push({ call, error: parsed.error });
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
specialCalls.push(parsed.value);
|
|
237
|
+
}
|
|
238
|
+
return { specialCalls, normalCalls, parseIssues };
|
|
239
|
+
}
|
|
50
240
|
function showErrorToAi(err) {
|
|
51
241
|
try {
|
|
52
242
|
if (err instanceof Error) {
|
|
@@ -76,7 +266,7 @@ async function syncPendingTellaskReminderBestEffort(dlg, where) {
|
|
|
76
266
|
await dlg.processReminderUpdates();
|
|
77
267
|
}
|
|
78
268
|
catch (err) {
|
|
79
|
-
log_1.log.warn('Failed to sync pending tellask reminder', {
|
|
269
|
+
log_1.log.warn('Failed to sync pending tellask reminder', undefined, {
|
|
80
270
|
where,
|
|
81
271
|
dialogId: dlg.id.selfId,
|
|
82
272
|
rootId: dlg.id.rootId,
|
|
@@ -84,75 +274,12 @@ async function syncPendingTellaskReminderBestEffort(dlg, where) {
|
|
|
84
274
|
});
|
|
85
275
|
}
|
|
86
276
|
}
|
|
87
|
-
function
|
|
88
|
-
const segments =
|
|
277
|
+
function isValidSessionSlug(sessionSlug) {
|
|
278
|
+
const segments = sessionSlug.split('.');
|
|
89
279
|
if (segments.length === 0)
|
|
90
280
|
return false;
|
|
91
281
|
return segments.every((segment) => /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(segment));
|
|
92
282
|
}
|
|
93
|
-
function parseTellaskSessionDirectiveFromHeadline(tellaskHead) {
|
|
94
|
-
const re = /(^|\s)!tellaskSession\s+([^\s]+)/g;
|
|
95
|
-
const ids = [];
|
|
96
|
-
for (const match of tellaskHead.matchAll(re)) {
|
|
97
|
-
const raw = match[2] ?? '';
|
|
98
|
-
const candidate = raw.trim();
|
|
99
|
-
const m = candidate.match(/^([a-zA-Z][a-zA-Z0-9_-]*(?:\.[a-zA-Z0-9_-]+)*)/);
|
|
100
|
-
const tellaskSession = (m?.[1] ?? '').trim();
|
|
101
|
-
if (!isValidTellaskSession(tellaskSession)) {
|
|
102
|
-
return { kind: 'invalid' };
|
|
103
|
-
}
|
|
104
|
-
ids.push(tellaskSession);
|
|
105
|
-
}
|
|
106
|
-
const unique = Array.from(new Set(ids));
|
|
107
|
-
if (unique.length === 0)
|
|
108
|
-
return { kind: 'none' };
|
|
109
|
-
if (unique.length === 1)
|
|
110
|
-
return { kind: 'one', tellaskSession: unique[0] ?? '' };
|
|
111
|
-
return { kind: 'multiple' };
|
|
112
|
-
}
|
|
113
|
-
function extractSingleTellaskSessionFromHeadline(tellaskHead) {
|
|
114
|
-
const parsed = parseTellaskSessionDirectiveFromHeadline(tellaskHead);
|
|
115
|
-
if (parsed.kind === 'one')
|
|
116
|
-
return parsed.tellaskSession;
|
|
117
|
-
return null;
|
|
118
|
-
}
|
|
119
|
-
function parseTeammateTellask(firstMention, tellaskHead, currentDialog) {
|
|
120
|
-
if (firstMention === 'self') {
|
|
121
|
-
const agentId = currentDialog?.agentId ?? 'self';
|
|
122
|
-
const tellaskSession = extractSingleTellaskSessionFromHeadline(tellaskHead);
|
|
123
|
-
if (tellaskSession) {
|
|
124
|
-
return {
|
|
125
|
-
type: 'B',
|
|
126
|
-
agentId,
|
|
127
|
-
tellaskSession,
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
return {
|
|
131
|
-
type: 'C',
|
|
132
|
-
agentId,
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
const tellaskSession = extractSingleTellaskSessionFromHeadline(tellaskHead);
|
|
136
|
-
if (tellaskSession) {
|
|
137
|
-
return {
|
|
138
|
-
type: 'B',
|
|
139
|
-
agentId: firstMention,
|
|
140
|
-
tellaskSession,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
if (currentDialog &&
|
|
144
|
-
currentDialog.supdialog &&
|
|
145
|
-
firstMention === currentDialog.supdialog.agentId) {
|
|
146
|
-
return {
|
|
147
|
-
type: 'A',
|
|
148
|
-
agentId: firstMention,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
return {
|
|
152
|
-
type: 'C',
|
|
153
|
-
agentId: firstMention,
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
283
|
function resolveFbrEffort(member) {
|
|
157
284
|
const raw = member?.fbr_effort;
|
|
158
285
|
if (typeof raw !== 'number' || !Number.isFinite(raw))
|
|
@@ -183,8 +310,8 @@ async function scheduleInheritedAgentPrimingForSubdialog(callerDialog, subdialog
|
|
|
183
310
|
const agentPrimingModule = await agentPrimingModulePromise;
|
|
184
311
|
await agentPrimingModule.scheduleAgentPrimingForNewDialog(subdialog, { mode: inheritedMode });
|
|
185
312
|
}
|
|
186
|
-
async function createSubDialogWithInheritedPriming(callerDialog, targetAgentId,
|
|
187
|
-
const subdialog = await callerDialog.createSubDialog(targetAgentId,
|
|
313
|
+
async function createSubDialogWithInheritedPriming(callerDialog, targetAgentId, mentionList, tellaskContent, options) {
|
|
314
|
+
const subdialog = await callerDialog.createSubDialog(targetAgentId, mentionList, tellaskContent, options);
|
|
188
315
|
await scheduleInheritedAgentPrimingForSubdialog(callerDialog, subdialog);
|
|
189
316
|
return subdialog;
|
|
190
317
|
}
|
|
@@ -192,14 +319,14 @@ async function updateSubdialogAssignment(subdialog, assignment) {
|
|
|
192
319
|
subdialog.assignmentFromSup = assignment;
|
|
193
320
|
await persistence_1.DialogPersistence.updateSubdialogAssignment(subdialog.id, assignment);
|
|
194
321
|
}
|
|
195
|
-
async function lookupLiveRegisteredSubdialog(rootDialog, agentId,
|
|
196
|
-
const existing = rootDialog.lookupSubdialog(agentId,
|
|
322
|
+
async function lookupLiveRegisteredSubdialog(rootDialog, agentId, sessionSlug) {
|
|
323
|
+
const existing = rootDialog.lookupSubdialog(agentId, sessionSlug);
|
|
197
324
|
if (!existing) {
|
|
198
325
|
return undefined;
|
|
199
326
|
}
|
|
200
|
-
const existingSession = existing.
|
|
327
|
+
const existingSession = existing.sessionSlug;
|
|
201
328
|
if (!existingSession) {
|
|
202
|
-
throw new Error(`Type B registry invariant violation: lookupSubdialog returned entry without
|
|
329
|
+
throw new Error(`Type B registry invariant violation: lookupSubdialog returned entry without sessionSlug (root=${rootDialog.id.valueOf()} sub=${existing.id.valueOf()})`);
|
|
203
330
|
}
|
|
204
331
|
const latest = await persistence_1.DialogPersistence.loadDialogLatest(existing.id, rootDialog.status);
|
|
205
332
|
const runState = latest?.runState;
|
|
@@ -211,11 +338,11 @@ async function lookupLiveRegisteredSubdialog(rootDialog, agentId, tellaskSession
|
|
|
211
338
|
throw new Error(`Failed to unregister dead registered subdialog: root=${rootDialog.id.valueOf()} sub=${existing.id.valueOf()} session=${existingSession}`);
|
|
212
339
|
}
|
|
213
340
|
await rootDialog.saveSubdialogRegistry();
|
|
214
|
-
log_1.log.
|
|
341
|
+
log_1.log.debug('Pruned dead registered subdialog from Type B registry', undefined, {
|
|
215
342
|
rootId: rootDialog.id.rootId,
|
|
216
343
|
subdialogId: existing.id.selfId,
|
|
217
344
|
agentId: existing.agentId,
|
|
218
|
-
|
|
345
|
+
sessionSlug: existingSession,
|
|
219
346
|
});
|
|
220
347
|
return undefined;
|
|
221
348
|
}
|
|
@@ -241,181 +368,21 @@ async function extractSupdialogResponseForTypeA(supdialog) {
|
|
|
241
368
|
return extractLastAssistantResponse(supdialog.msgs, 'Supdialog completed without producing output.');
|
|
242
369
|
}
|
|
243
370
|
catch (err) {
|
|
244
|
-
log_1.log.warn('Failed to extract supdialog response for Type A',
|
|
371
|
+
log_1.log.warn('Failed to extract supdialog response for Type A', err);
|
|
245
372
|
return 'Supdialog completed with errors.';
|
|
246
373
|
}
|
|
247
374
|
}
|
|
248
|
-
function
|
|
249
|
-
const charCode = char.charCodeAt(0);
|
|
250
|
-
return ((charCode >= 48 && charCode <= 57) ||
|
|
251
|
-
(charCode >= 65 && charCode <= 90) ||
|
|
252
|
-
(charCode >= 97 && charCode <= 122) ||
|
|
253
|
-
char === '_' ||
|
|
254
|
-
char === '-' ||
|
|
255
|
-
char === '.' ||
|
|
256
|
-
/\p{L}/u.test(char) ||
|
|
257
|
-
/\p{N}/u.test(char));
|
|
258
|
-
}
|
|
259
|
-
function trimTrailingDots(value) {
|
|
260
|
-
let out = value;
|
|
261
|
-
while (out.endsWith('.'))
|
|
262
|
-
out = out.slice(0, -1);
|
|
263
|
-
return out;
|
|
264
|
-
}
|
|
265
|
-
function isMentionBoundaryChar(char) {
|
|
266
|
-
if (char === '' || char === '\n' || char === '\t' || char === ' ')
|
|
267
|
-
return true;
|
|
268
|
-
return !isValidMentionChar(char);
|
|
269
|
-
}
|
|
270
|
-
function extractMentionIdsFromHeadline(tellaskHead) {
|
|
271
|
-
const out = [];
|
|
272
|
-
const seen = new Set();
|
|
273
|
-
for (let i = 0; i < tellaskHead.length; i++) {
|
|
274
|
-
const ch = tellaskHead[i] ?? '';
|
|
275
|
-
if (ch !== '@')
|
|
276
|
-
continue;
|
|
277
|
-
const prev = i === 0 ? '' : (tellaskHead[i - 1] ?? '');
|
|
278
|
-
if (!isMentionBoundaryChar(prev))
|
|
279
|
-
continue;
|
|
280
|
-
let j = i + 1;
|
|
281
|
-
let raw = '';
|
|
282
|
-
while (j < tellaskHead.length) {
|
|
283
|
-
const c = tellaskHead[j] ?? '';
|
|
284
|
-
if (c !== '' && isValidMentionChar(c)) {
|
|
285
|
-
raw += c;
|
|
286
|
-
j += 1;
|
|
287
|
-
continue;
|
|
288
|
-
}
|
|
289
|
-
break;
|
|
290
|
-
}
|
|
291
|
-
const id = trimTrailingDots(raw);
|
|
292
|
-
if (id === '')
|
|
293
|
-
continue;
|
|
294
|
-
if (!seen.has(id)) {
|
|
295
|
-
seen.add(id);
|
|
296
|
-
out.push(id);
|
|
297
|
-
}
|
|
298
|
-
i = j - 1;
|
|
299
|
-
}
|
|
300
|
-
return out;
|
|
301
|
-
}
|
|
302
|
-
async function emitMalformedTellaskResponses(dlg, collectedCalls) {
|
|
303
|
-
const toolOutputs = [];
|
|
304
|
-
const language = (0, runtime_language_1.getWorkLanguage)();
|
|
305
|
-
for (const call of collectedCalls) {
|
|
306
|
-
if (call.validation.kind !== 'malformed')
|
|
307
|
-
continue;
|
|
308
|
-
const firstLineAfterPrefix = (call.tellaskHead.split('\n')[0] ?? '').trim();
|
|
309
|
-
const msg = (0, driver_messages_1.formatDomindsNoteMalformedTellaskCall)(language, call.validation.reason, {
|
|
310
|
-
firstLineAfterPrefix,
|
|
311
|
-
});
|
|
312
|
-
toolOutputs.push({
|
|
313
|
-
type: 'environment_msg',
|
|
314
|
-
role: 'user',
|
|
315
|
-
content: msg,
|
|
316
|
-
});
|
|
317
|
-
toolOutputs.push({
|
|
318
|
-
type: 'tellask_result_msg',
|
|
319
|
-
role: 'tool',
|
|
320
|
-
responderId: 'dominds',
|
|
321
|
-
tellaskHead: call.tellaskHead,
|
|
322
|
-
status: 'failed',
|
|
323
|
-
content: msg,
|
|
324
|
-
});
|
|
325
|
-
await dlg.receiveTeammateCallResult('dominds', call.tellaskHead, msg, 'failed', call.callId);
|
|
326
|
-
dlg.clearCurrentCallId();
|
|
327
|
-
}
|
|
328
|
-
return toolOutputs;
|
|
329
|
-
}
|
|
330
|
-
async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, callId, callbacks, options) {
|
|
375
|
+
async function executeTellaskCall(dlg, agent, mentionList, body, callId, callbacks, options) {
|
|
331
376
|
const toolOutputs = [];
|
|
332
377
|
let suspend = false;
|
|
333
378
|
const subdialogsCreated = [];
|
|
379
|
+
const callName = options.callName;
|
|
380
|
+
const parseResult = options.parseResult;
|
|
381
|
+
const normalizedMentionList = mentionList ?? [];
|
|
382
|
+
const isFreshBootsCall = callName === 'freshBootsReasoning';
|
|
334
383
|
const team = await team_1.Team.load();
|
|
335
|
-
const
|
|
336
|
-
const
|
|
337
|
-
const member = isSelfAlias
|
|
338
|
-
? team.getMember(dlg.agentId)
|
|
339
|
-
: isTellaskerAlias
|
|
340
|
-
? null
|
|
341
|
-
: team.getMember(firstMention);
|
|
342
|
-
const allowMultiTeammateTargets = options?.allowMultiTeammateTargets ?? true;
|
|
343
|
-
if (allowMultiTeammateTargets && member && !isSelfAlias && !isTellaskerAlias) {
|
|
344
|
-
const mentioned = extractMentionIdsFromHeadline(tellaskHead);
|
|
345
|
-
const uniqueMentioned = Array.from(new Set(mentioned));
|
|
346
|
-
const knownTargets = uniqueMentioned.filter((id) => team.getMember(id) !== null);
|
|
347
|
-
if (!knownTargets.includes(firstMention)) {
|
|
348
|
-
knownTargets.unshift(firstMention);
|
|
349
|
-
}
|
|
350
|
-
if (knownTargets.length >= 2) {
|
|
351
|
-
const unknown = uniqueMentioned.filter((id) => team.getMember(id) === null &&
|
|
352
|
-
id !== 'self' &&
|
|
353
|
-
id !== 'tellasker' &&
|
|
354
|
-
id !== 'human' &&
|
|
355
|
-
id !== 'dominds');
|
|
356
|
-
if (unknown.length > 0) {
|
|
357
|
-
const msg = (0, driver_messages_1.formatDomindsNoteInvalidMultiTeammateTargets)((0, runtime_language_1.getWorkLanguage)(), { unknown });
|
|
358
|
-
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
359
|
-
toolOutputs.push({
|
|
360
|
-
type: 'tellask_result_msg',
|
|
361
|
-
role: 'tool',
|
|
362
|
-
responderId: 'dominds',
|
|
363
|
-
tellaskHead,
|
|
364
|
-
status: 'failed',
|
|
365
|
-
content: msg,
|
|
366
|
-
});
|
|
367
|
-
await dlg.receiveTeammateCallResult('dominds', tellaskHead, msg, 'failed', callId);
|
|
368
|
-
dlg.clearCurrentCallId();
|
|
369
|
-
return { toolOutputs, suspend: false, subdialogsCreated: [] };
|
|
370
|
-
}
|
|
371
|
-
if (options?.skipTellaskSessionDirectiveValidation !== true) {
|
|
372
|
-
const tellaskSessionDirective = parseTellaskSessionDirectiveFromHeadline(tellaskHead);
|
|
373
|
-
if (tellaskSessionDirective.kind === 'multiple') {
|
|
374
|
-
const msg = (0, driver_messages_1.formatDomindsNoteMultipleTellaskSessionDirectives)((0, runtime_language_1.getWorkLanguage)());
|
|
375
|
-
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
376
|
-
toolOutputs.push({
|
|
377
|
-
type: 'tellask_result_msg',
|
|
378
|
-
role: 'tool',
|
|
379
|
-
responderId: 'dominds',
|
|
380
|
-
tellaskHead,
|
|
381
|
-
status: 'failed',
|
|
382
|
-
content: msg,
|
|
383
|
-
});
|
|
384
|
-
await dlg.receiveTeammateCallResult('dominds', tellaskHead, msg, 'failed', callId);
|
|
385
|
-
dlg.clearCurrentCallId();
|
|
386
|
-
return { toolOutputs, suspend: false, subdialogsCreated: [] };
|
|
387
|
-
}
|
|
388
|
-
if (tellaskSessionDirective.kind === 'invalid') {
|
|
389
|
-
const msg = (0, driver_messages_1.formatDomindsNoteInvalidTellaskSessionDirective)((0, runtime_language_1.getWorkLanguage)());
|
|
390
|
-
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
391
|
-
toolOutputs.push({
|
|
392
|
-
type: 'tellask_result_msg',
|
|
393
|
-
role: 'tool',
|
|
394
|
-
responderId: 'dominds',
|
|
395
|
-
tellaskHead,
|
|
396
|
-
status: 'failed',
|
|
397
|
-
content: msg,
|
|
398
|
-
});
|
|
399
|
-
await dlg.receiveTeammateCallResult('dominds', tellaskHead, msg, 'failed', callId);
|
|
400
|
-
dlg.clearCurrentCallId();
|
|
401
|
-
return { toolOutputs, suspend: false, subdialogsCreated: [] };
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
const perTargetResults = await Promise.all(knownTargets.map(async (targetId) => {
|
|
405
|
-
return await executeTellaskCall(dlg, agent, targetId, tellaskHead, body, callId, callbacks, {
|
|
406
|
-
allowMultiTeammateTargets: false,
|
|
407
|
-
collectiveTargets: knownTargets,
|
|
408
|
-
skipTellaskSessionDirectiveValidation: true,
|
|
409
|
-
});
|
|
410
|
-
}));
|
|
411
|
-
return {
|
|
412
|
-
toolOutputs: perTargetResults.flatMap((r) => r.toolOutputs),
|
|
413
|
-
suspend: perTargetResults.some((r) => r.suspend),
|
|
414
|
-
subdialogsCreated: perTargetResults.flatMap((r) => r.subdialogsCreated),
|
|
415
|
-
};
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
const isQ4H = firstMention === 'human';
|
|
384
|
+
const member = parseResult !== null && parseResult.type !== 'A' ? team.getMember(parseResult.agentId) : null;
|
|
385
|
+
const isQ4H = callName === 'askHuman';
|
|
419
386
|
if (isQ4H) {
|
|
420
387
|
try {
|
|
421
388
|
const normalizedCallId = callId.trim();
|
|
@@ -428,8 +395,7 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
428
395
|
.filter((value) => value !== '' && value !== normalizedCallId)));
|
|
429
396
|
const question = {
|
|
430
397
|
id: questionId,
|
|
431
|
-
|
|
432
|
-
bodyContent: body.trim(),
|
|
398
|
+
tellaskContent: body.trim(),
|
|
433
399
|
askedAt: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
434
400
|
callId: normalizedCallId,
|
|
435
401
|
remainingCallIds: normalizedRemainingCallIds.length > 0 ? normalizedRemainingCallIds : undefined,
|
|
@@ -444,8 +410,7 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
444
410
|
question: {
|
|
445
411
|
id: question.id,
|
|
446
412
|
selfId: dlg.id.selfId,
|
|
447
|
-
|
|
448
|
-
bodyContent: question.bodyContent,
|
|
413
|
+
tellaskContent: question.tellaskContent,
|
|
449
414
|
askedAt: question.askedAt,
|
|
450
415
|
callId: question.callId,
|
|
451
416
|
remainingCallIds: question.remainingCallIds,
|
|
@@ -471,7 +436,7 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
471
436
|
}
|
|
472
437
|
log_1.log.error('Q4H: Failed to register question', q4hErr, {
|
|
473
438
|
dialogId: dlg.id.selfId,
|
|
474
|
-
|
|
439
|
+
callId,
|
|
475
440
|
});
|
|
476
441
|
const msg = (0, driver_messages_1.formatDomindsNoteQ4HRegisterFailed)((0, runtime_language_1.getWorkLanguage)(), { error: errMsg });
|
|
477
442
|
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
@@ -479,89 +444,47 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
479
444
|
type: 'tellask_result_msg',
|
|
480
445
|
role: 'tool',
|
|
481
446
|
responderId: 'dominds',
|
|
482
|
-
|
|
447
|
+
mentionList: normalizedMentionList,
|
|
448
|
+
tellaskContent: body,
|
|
483
449
|
status: 'failed',
|
|
450
|
+
callId,
|
|
484
451
|
content: msg,
|
|
485
452
|
});
|
|
486
|
-
await dlg.receiveTeammateCallResult('dominds',
|
|
453
|
+
await dlg.receiveTeammateCallResult('dominds', callName, mentionList, body, msg, 'failed', callId);
|
|
487
454
|
dlg.clearCurrentCallId();
|
|
488
455
|
return { toolOutputs, suspend: false, subdialogsCreated: [] };
|
|
489
456
|
}
|
|
490
457
|
}
|
|
491
|
-
if (
|
|
492
|
-
if (
|
|
493
|
-
|
|
494
|
-
try {
|
|
495
|
-
await dlg.receiveTeammateResponse('dominds', tellaskHead, 'failed', dlg.id, {
|
|
496
|
-
response,
|
|
497
|
-
agentId: 'dominds',
|
|
498
|
-
callId,
|
|
499
|
-
originMemberId: dlg.agentId,
|
|
500
|
-
});
|
|
501
|
-
}
|
|
502
|
-
catch (err) {
|
|
503
|
-
log_1.log.warn('Failed to emit @tellasker misuse response', err, {
|
|
504
|
-
dialogId: dlg.id.selfId,
|
|
505
|
-
agentId: dlg.agentId,
|
|
506
|
-
});
|
|
507
|
-
}
|
|
508
|
-
return { toolOutputs, suspend: false, subdialogsCreated: [] };
|
|
458
|
+
if (parseResult) {
|
|
459
|
+
if (callName === 'tellaskBack' && parseResult.type !== 'A') {
|
|
460
|
+
throw new Error(`tellaskBack invariant violation: expected Type A parseResult (callId=${callId}, got=${parseResult.type})`);
|
|
509
461
|
}
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
type: 'tellask_result_msg',
|
|
535
|
-
role: 'tool',
|
|
536
|
-
responderId: 'dominds',
|
|
537
|
-
tellaskHead,
|
|
538
|
-
status: 'failed',
|
|
539
|
-
content: msg,
|
|
540
|
-
});
|
|
541
|
-
await dlg.receiveTeammateCallResult('dominds', tellaskHead, msg, 'failed', callId);
|
|
542
|
-
dlg.clearCurrentCallId();
|
|
543
|
-
return { toolOutputs, suspend: false, subdialogsCreated: [] };
|
|
544
|
-
}
|
|
545
|
-
if (tellaskSessionDirective.kind === 'invalid') {
|
|
546
|
-
const msg = (0, driver_messages_1.formatDomindsNoteInvalidTellaskSessionDirective)((0, runtime_language_1.getWorkLanguage)());
|
|
547
|
-
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
548
|
-
toolOutputs.push({
|
|
549
|
-
type: 'tellask_result_msg',
|
|
550
|
-
role: 'tool',
|
|
551
|
-
responderId: 'dominds',
|
|
552
|
-
tellaskHead,
|
|
553
|
-
status: 'failed',
|
|
554
|
-
content: msg,
|
|
555
|
-
});
|
|
556
|
-
await dlg.receiveTeammateCallResult('dominds', tellaskHead, msg, 'failed', callId);
|
|
557
|
-
dlg.clearCurrentCallId();
|
|
558
|
-
return { toolOutputs, suspend: false, subdialogsCreated: [] };
|
|
559
|
-
}
|
|
462
|
+
const subdialogCallName = callName === 'tellaskBack' ? 'freshBootsReasoning' : callName;
|
|
463
|
+
const rawCallingCourse = dlg.activeGenCourseOrUndefined ?? dlg.currentCourse;
|
|
464
|
+
const callingCourse = Number.isFinite(rawCallingCourse) && rawCallingCourse > 0
|
|
465
|
+
? Math.floor(rawCallingCourse)
|
|
466
|
+
: undefined;
|
|
467
|
+
const firstMentionForError = options.targetForError ?? parseResult.agentId;
|
|
468
|
+
if (parseResult.type !== 'A' && member === null) {
|
|
469
|
+
const msg = (0, driver_messages_1.formatDomindsNoteTellaskForTeammatesOnly)((0, runtime_language_1.getWorkLanguage)(), {
|
|
470
|
+
firstMention: firstMentionForError,
|
|
471
|
+
});
|
|
472
|
+
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
473
|
+
toolOutputs.push({
|
|
474
|
+
type: 'tellask_result_msg',
|
|
475
|
+
role: 'tool',
|
|
476
|
+
responderId: 'dominds',
|
|
477
|
+
mentionList: normalizedMentionList,
|
|
478
|
+
tellaskContent: body,
|
|
479
|
+
status: 'failed',
|
|
480
|
+
callId,
|
|
481
|
+
content: msg,
|
|
482
|
+
});
|
|
483
|
+
await dlg.receiveTeammateCallResult('dominds', callName, mentionList, body, msg, 'failed', callId);
|
|
484
|
+
dlg.clearCurrentCallId();
|
|
485
|
+
return { toolOutputs, suspend: false, subdialogsCreated: [] };
|
|
560
486
|
}
|
|
561
|
-
|
|
562
|
-
? { type: 'A', agentId: dlg.supdialog.agentId }
|
|
563
|
-
: parseTeammateTellask(firstMention, tellaskHead, dlg);
|
|
564
|
-
if (isSelfAlias) {
|
|
487
|
+
if (isFreshBootsCall) {
|
|
565
488
|
const fbrEffort = resolveFbrEffort(member);
|
|
566
489
|
if (fbrEffort < 1) {
|
|
567
490
|
const msg = (0, driver_messages_1.formatDomindsNoteFbrDisabled)((0, runtime_language_1.getWorkLanguage)());
|
|
@@ -570,11 +493,13 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
570
493
|
type: 'tellask_result_msg',
|
|
571
494
|
role: 'tool',
|
|
572
495
|
responderId: 'dominds',
|
|
573
|
-
|
|
496
|
+
mentionList: normalizedMentionList,
|
|
497
|
+
tellaskContent: body,
|
|
574
498
|
status: 'failed',
|
|
499
|
+
callId,
|
|
575
500
|
content: msg,
|
|
576
501
|
});
|
|
577
|
-
await dlg.receiveTeammateCallResult('dominds',
|
|
502
|
+
await dlg.receiveTeammateCallResult('dominds', callName, mentionList, body, msg, 'failed', callId);
|
|
578
503
|
dlg.clearCurrentCallId();
|
|
579
504
|
return { toolOutputs, suspend: false, subdialogsCreated: [] };
|
|
580
505
|
}
|
|
@@ -584,7 +509,8 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
584
509
|
const createdSubs = [];
|
|
585
510
|
const pendingRecords = [];
|
|
586
511
|
for (let i = 1; i <= fbrEffort; i++) {
|
|
587
|
-
const sub = await createSubDialogWithInheritedPriming(dlg, parseResult.agentId,
|
|
512
|
+
const sub = await createSubDialogWithInheritedPriming(dlg, parseResult.agentId, mentionList, body, {
|
|
513
|
+
callName: subdialogCallName,
|
|
588
514
|
originMemberId,
|
|
589
515
|
callerDialogId: callerDialog.id.selfId,
|
|
590
516
|
callId,
|
|
@@ -594,8 +520,12 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
594
520
|
pendingRecords.push({
|
|
595
521
|
subdialogId: sub.id.selfId,
|
|
596
522
|
createdAt: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
597
|
-
|
|
523
|
+
callName: subdialogCallName,
|
|
524
|
+
mentionList,
|
|
525
|
+
tellaskContent: body,
|
|
598
526
|
targetAgentId: parseResult.agentId,
|
|
527
|
+
callId,
|
|
528
|
+
callingCourse,
|
|
599
529
|
callType: 'C',
|
|
600
530
|
});
|
|
601
531
|
}
|
|
@@ -609,10 +539,11 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
609
539
|
for (const sub of createdSubs) {
|
|
610
540
|
const initPrompt = {
|
|
611
541
|
content: (0, inter_dialog_format_1.formatAssignmentFromSupdialog)({
|
|
542
|
+
callName: subdialogCallName,
|
|
612
543
|
fromAgentId: dlg.agentId,
|
|
613
544
|
toAgentId: sub.agentId,
|
|
614
|
-
|
|
615
|
-
|
|
545
|
+
mentionList,
|
|
546
|
+
tellaskContent: body,
|
|
616
547
|
language: (0, runtime_language_1.getWorkLanguage)(),
|
|
617
548
|
collectiveTargets: options?.collectiveTargets ?? [sub.agentId],
|
|
618
549
|
}),
|
|
@@ -646,16 +577,18 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
646
577
|
type: 'tellask_result_msg',
|
|
647
578
|
role: 'tool',
|
|
648
579
|
responderId: 'dominds',
|
|
649
|
-
|
|
580
|
+
mentionList: normalizedMentionList,
|
|
581
|
+
tellaskContent: body,
|
|
650
582
|
status: 'failed',
|
|
583
|
+
callId,
|
|
651
584
|
content: msg,
|
|
652
585
|
});
|
|
653
|
-
await dlg.receiveTeammateCallResult('dominds',
|
|
586
|
+
await dlg.receiveTeammateCallResult('dominds', callName, mentionList, body, msg, 'failed', callId);
|
|
654
587
|
dlg.clearCurrentCallId();
|
|
655
588
|
return { toolOutputs, suspend: false, subdialogsCreated: [] };
|
|
656
589
|
}
|
|
657
590
|
const pendingOwner = callerDialog;
|
|
658
|
-
const baseSession = parseResult.
|
|
591
|
+
const baseSession = parseResult.sessionSlug;
|
|
659
592
|
const derivedPrefix = `${baseSession}.fbr-`;
|
|
660
593
|
const createdOrExisting = await (0, subdialog_txn_1.withSubdialogTxnLock)(rootDialog.id, async () => {
|
|
661
594
|
const results = [];
|
|
@@ -664,14 +597,14 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
664
597
|
return [baseSession];
|
|
665
598
|
const set = new Set();
|
|
666
599
|
for (const sub of rootDialog.getRegisteredSubdialogs()) {
|
|
667
|
-
const
|
|
668
|
-
if (typeof
|
|
600
|
+
const sessionSlug = sub.sessionSlug;
|
|
601
|
+
if (typeof sessionSlug !== 'string')
|
|
669
602
|
continue;
|
|
670
603
|
if (sub.agentId !== parseResult.agentId)
|
|
671
604
|
continue;
|
|
672
|
-
if (!
|
|
605
|
+
if (!sessionSlug.startsWith(derivedPrefix))
|
|
673
606
|
continue;
|
|
674
|
-
set.add(
|
|
607
|
+
set.add(sessionSlug);
|
|
675
608
|
}
|
|
676
609
|
while (set.size < desired) {
|
|
677
610
|
const candidate = `${derivedPrefix}${(0, id_1.generateShortId)()}`;
|
|
@@ -688,10 +621,10 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
688
621
|
};
|
|
689
622
|
const sessions = ensurePoolSessions(fbrEffort);
|
|
690
623
|
for (const derivedSession of sessions) {
|
|
691
|
-
const indexedHeadLine = tellaskHead;
|
|
692
624
|
const assignment = {
|
|
693
|
-
|
|
694
|
-
|
|
625
|
+
callName: subdialogCallName,
|
|
626
|
+
mentionList,
|
|
627
|
+
tellaskContent: body,
|
|
695
628
|
originMemberId,
|
|
696
629
|
callerDialogId: callerDialog.id.selfId,
|
|
697
630
|
callId,
|
|
@@ -708,24 +641,23 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
708
641
|
results.push({
|
|
709
642
|
kind: 'existing',
|
|
710
643
|
subdialog: existing,
|
|
711
|
-
|
|
712
|
-
indexedHeadLine,
|
|
644
|
+
sessionSlug: derivedSession,
|
|
713
645
|
});
|
|
714
646
|
continue;
|
|
715
647
|
}
|
|
716
|
-
const created = await createSubDialogWithInheritedPriming(rootDialog, parseResult.agentId,
|
|
648
|
+
const created = await createSubDialogWithInheritedPriming(rootDialog, parseResult.agentId, mentionList, body, {
|
|
649
|
+
callName: subdialogCallName,
|
|
717
650
|
originMemberId,
|
|
718
651
|
callerDialogId: callerDialog.id.selfId,
|
|
719
652
|
callId,
|
|
720
|
-
|
|
653
|
+
sessionSlug: derivedSession,
|
|
721
654
|
collectiveTargets: options?.collectiveTargets ?? [parseResult.agentId],
|
|
722
655
|
});
|
|
723
656
|
rootDialog.registerSubdialog(created);
|
|
724
657
|
results.push({
|
|
725
658
|
kind: 'created',
|
|
726
659
|
subdialog: created,
|
|
727
|
-
|
|
728
|
-
indexedHeadLine,
|
|
660
|
+
sessionSlug: derivedSession,
|
|
729
661
|
});
|
|
730
662
|
}
|
|
731
663
|
await rootDialog.saveSubdialogRegistry();
|
|
@@ -734,10 +666,14 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
734
666
|
const pendingRecords = createdOrExisting.map((r) => ({
|
|
735
667
|
subdialogId: r.subdialog.id.selfId,
|
|
736
668
|
createdAt: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
737
|
-
|
|
669
|
+
callName: subdialogCallName,
|
|
670
|
+
mentionList,
|
|
671
|
+
tellaskContent: body,
|
|
738
672
|
targetAgentId: parseResult.agentId,
|
|
673
|
+
callId,
|
|
674
|
+
callingCourse,
|
|
739
675
|
callType: 'B',
|
|
740
|
-
|
|
676
|
+
sessionSlug: r.sessionSlug,
|
|
741
677
|
}));
|
|
742
678
|
await (0, subdialog_txn_1.withSubdialogTxnLock)(pendingOwner.id, async () => {
|
|
743
679
|
const toRemove = new Set(pendingRecords.map((p) => p.subdialogId));
|
|
@@ -751,10 +687,11 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
751
687
|
for (const r of createdOrExisting) {
|
|
752
688
|
const prompt = {
|
|
753
689
|
content: (0, inter_dialog_format_1.formatAssignmentFromSupdialog)({
|
|
690
|
+
callName: subdialogCallName,
|
|
754
691
|
fromAgentId: dlg.agentId,
|
|
755
692
|
toAgentId: r.subdialog.agentId,
|
|
756
|
-
|
|
757
|
-
|
|
693
|
+
mentionList,
|
|
694
|
+
tellaskContent: body,
|
|
758
695
|
language: (0, runtime_language_1.getWorkLanguage)(),
|
|
759
696
|
collectiveTargets: options?.collectiveTargets ?? [r.subdialog.agentId],
|
|
760
697
|
}),
|
|
@@ -772,44 +709,43 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
772
709
|
return { toolOutputs, suspend: true, subdialogsCreated };
|
|
773
710
|
}
|
|
774
711
|
}
|
|
775
|
-
const isDirectSelfCall = !
|
|
712
|
+
const isDirectSelfCall = !isFreshBootsCall && parseResult.agentId === dlg.agentId;
|
|
776
713
|
if (isDirectSelfCall) {
|
|
777
|
-
const
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
}
|
|
714
|
+
const msg = (0, driver_messages_1.formatDomindsNoteDirectSelfCall)((0, runtime_language_1.getWorkLanguage)());
|
|
715
|
+
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
716
|
+
toolOutputs.push({
|
|
717
|
+
type: 'tellask_result_msg',
|
|
718
|
+
role: 'tool',
|
|
719
|
+
responderId: 'dominds',
|
|
720
|
+
mentionList: normalizedMentionList,
|
|
721
|
+
tellaskContent: body,
|
|
722
|
+
status: 'failed',
|
|
723
|
+
callId,
|
|
724
|
+
content: msg,
|
|
725
|
+
});
|
|
726
|
+
await dlg.receiveTeammateCallResult('dominds', callName, mentionList, body, msg, 'failed', callId);
|
|
727
|
+
dlg.clearCurrentCallId();
|
|
728
|
+
return { toolOutputs, suspend: false, subdialogsCreated: [] };
|
|
792
729
|
}
|
|
793
730
|
if (parseResult.type === 'A') {
|
|
794
731
|
if (dlg instanceof dialog_1.SubDialog) {
|
|
795
732
|
const supdialog = dlg.supdialog;
|
|
796
733
|
dlg.setSuspensionState('suspended');
|
|
797
734
|
try {
|
|
798
|
-
const tellaskHeadForSupdialog = isTellaskerAlias && tellaskHead.startsWith('@tellasker')
|
|
799
|
-
? `@${supdialog.agentId}${tellaskHead.slice('@tellasker'.length)}`
|
|
800
|
-
: tellaskHead;
|
|
801
735
|
const assignment = dlg.assignmentFromSup;
|
|
802
736
|
const supPrompt = {
|
|
803
737
|
content: (0, inter_dialog_format_1.formatSupdialogCallPrompt)({
|
|
804
738
|
fromAgentId: dlg.agentId,
|
|
805
739
|
toAgentId: supdialog.agentId,
|
|
806
740
|
subdialogRequest: {
|
|
807
|
-
|
|
808
|
-
|
|
741
|
+
callName,
|
|
742
|
+
mentionList,
|
|
743
|
+
tellaskContent: body,
|
|
809
744
|
},
|
|
810
745
|
supdialogAssignment: {
|
|
811
|
-
|
|
812
|
-
|
|
746
|
+
callName: assignment.callName,
|
|
747
|
+
mentionList: assignment.mentionList,
|
|
748
|
+
tellaskContent: assignment.tellaskContent,
|
|
813
749
|
},
|
|
814
750
|
language: (0, runtime_language_1.getWorkLanguage)(),
|
|
815
751
|
}),
|
|
@@ -819,9 +755,11 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
819
755
|
await callbacks.driveDialog(supdialog, { humanPrompt: supPrompt, waitInQue: true });
|
|
820
756
|
const responseText = await extractSupdialogResponseForTypeA(supdialog);
|
|
821
757
|
const responseContent = (0, inter_dialog_format_1.formatTeammateResponseContent)({
|
|
758
|
+
callName,
|
|
822
759
|
responderId: parseResult.agentId,
|
|
823
760
|
requesterId: dlg.agentId,
|
|
824
|
-
|
|
761
|
+
mentionList,
|
|
762
|
+
tellaskContent: body,
|
|
825
763
|
responseBody: responseText,
|
|
826
764
|
language: (0, runtime_language_1.getWorkLanguage)(),
|
|
827
765
|
});
|
|
@@ -830,11 +768,13 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
830
768
|
type: 'tellask_result_msg',
|
|
831
769
|
role: 'tool',
|
|
832
770
|
responderId: parseResult.agentId,
|
|
833
|
-
|
|
771
|
+
mentionList,
|
|
772
|
+
tellaskContent: body,
|
|
834
773
|
status: 'completed',
|
|
774
|
+
callId,
|
|
835
775
|
content: responseContent,
|
|
836
776
|
});
|
|
837
|
-
await dlg.receiveTeammateResponse(parseResult.agentId,
|
|
777
|
+
await dlg.receiveTeammateResponse(parseResult.agentId, callName, mentionList, body, 'completed', supdialog.id, {
|
|
838
778
|
response: responseText,
|
|
839
779
|
agentId: parseResult.agentId,
|
|
840
780
|
callId,
|
|
@@ -849,11 +789,13 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
849
789
|
type: 'tellask_result_msg',
|
|
850
790
|
role: 'tool',
|
|
851
791
|
responderId: parseResult.agentId,
|
|
852
|
-
|
|
792
|
+
mentionList,
|
|
793
|
+
tellaskContent: body,
|
|
853
794
|
status: 'failed',
|
|
795
|
+
callId,
|
|
854
796
|
content: errorText,
|
|
855
797
|
});
|
|
856
|
-
await dlg.receiveTeammateResponse(parseResult.agentId,
|
|
798
|
+
await dlg.receiveTeammateResponse(parseResult.agentId, callName, mentionList, body, 'failed', supdialog.id, {
|
|
857
799
|
response: errorText,
|
|
858
800
|
agentId: parseResult.agentId,
|
|
859
801
|
callId,
|
|
@@ -862,7 +804,7 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
862
804
|
}
|
|
863
805
|
}
|
|
864
806
|
else {
|
|
865
|
-
log_1.log.warn('Type A call on dialog without supdialog, falling back to Type C', {
|
|
807
|
+
log_1.log.warn('Type A call on dialog without supdialog, falling back to Type C', undefined, {
|
|
866
808
|
dialogId: dlg.id.selfId,
|
|
867
809
|
});
|
|
868
810
|
}
|
|
@@ -877,24 +819,29 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
877
819
|
rootDialog = dlg.rootDialog;
|
|
878
820
|
}
|
|
879
821
|
if (!rootDialog) {
|
|
880
|
-
log_1.log.warn('Type B call without root dialog, falling back to Type C', {
|
|
822
|
+
log_1.log.warn('Type B call without root dialog, falling back to Type C', undefined, {
|
|
881
823
|
dialogId: dlg.id.selfId,
|
|
882
824
|
});
|
|
883
825
|
try {
|
|
884
|
-
const sub = await createSubDialogWithInheritedPriming(dlg, parseResult.agentId,
|
|
826
|
+
const sub = await createSubDialogWithInheritedPriming(dlg, parseResult.agentId, mentionList, body, {
|
|
827
|
+
callName: subdialogCallName,
|
|
885
828
|
originMemberId: dlg.agentId,
|
|
886
829
|
callerDialogId: callerDialog.id.selfId,
|
|
887
830
|
callId,
|
|
888
|
-
|
|
831
|
+
sessionSlug: parseResult.sessionSlug,
|
|
889
832
|
collectiveTargets: options?.collectiveTargets ?? [parseResult.agentId],
|
|
890
833
|
});
|
|
891
834
|
const pendingRecord = {
|
|
892
835
|
subdialogId: sub.id.selfId,
|
|
893
836
|
createdAt: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
894
|
-
|
|
837
|
+
callName: subdialogCallName,
|
|
838
|
+
mentionList,
|
|
839
|
+
tellaskContent: body,
|
|
895
840
|
targetAgentId: parseResult.agentId,
|
|
841
|
+
callId,
|
|
842
|
+
callingCourse,
|
|
896
843
|
callType: 'C',
|
|
897
|
-
|
|
844
|
+
sessionSlug: parseResult.sessionSlug,
|
|
898
845
|
};
|
|
899
846
|
await (0, subdialog_txn_1.withSubdialogTxnLock)(dlg.id, async () => {
|
|
900
847
|
await persistence_1.DialogPersistence.appendPendingSubdialog(dlg.id, pendingRecord);
|
|
@@ -902,10 +849,11 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
902
849
|
await syncPendingTellaskReminderBestEffort(dlg, 'driver-v2:executeTellaskCall:TypeB-fallback:appendPending');
|
|
903
850
|
const initPrompt = {
|
|
904
851
|
content: (0, inter_dialog_format_1.formatAssignmentFromSupdialog)({
|
|
852
|
+
callName: subdialogCallName,
|
|
905
853
|
fromAgentId: dlg.agentId,
|
|
906
854
|
toAgentId: sub.agentId,
|
|
907
|
-
|
|
908
|
-
|
|
855
|
+
mentionList,
|
|
856
|
+
tellaskContent: body,
|
|
909
857
|
language: (0, runtime_language_1.getWorkLanguage)(),
|
|
910
858
|
collectiveTargets: options?.collectiveTargets ?? [sub.agentId],
|
|
911
859
|
}),
|
|
@@ -928,8 +876,9 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
928
876
|
else {
|
|
929
877
|
const originMemberId = dlg.agentId;
|
|
930
878
|
const assignment = {
|
|
931
|
-
|
|
932
|
-
|
|
879
|
+
callName: subdialogCallName,
|
|
880
|
+
mentionList,
|
|
881
|
+
tellaskContent: body,
|
|
933
882
|
originMemberId,
|
|
934
883
|
callerDialogId: callerDialog.id.selfId,
|
|
935
884
|
callId,
|
|
@@ -937,7 +886,7 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
937
886
|
};
|
|
938
887
|
const pendingOwner = callerDialog;
|
|
939
888
|
const result = await (0, subdialog_txn_1.withSubdialogTxnLock)(rootDialog.id, async () => {
|
|
940
|
-
const existing = await lookupLiveRegisteredSubdialog(rootDialog, parseResult.agentId, parseResult.
|
|
889
|
+
const existing = await lookupLiveRegisteredSubdialog(rootDialog, parseResult.agentId, parseResult.sessionSlug);
|
|
941
890
|
if (existing) {
|
|
942
891
|
try {
|
|
943
892
|
await updateSubdialogAssignment(existing, assignment);
|
|
@@ -947,11 +896,12 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
947
896
|
}
|
|
948
897
|
return { kind: 'existing', subdialog: existing };
|
|
949
898
|
}
|
|
950
|
-
const created = await createSubDialogWithInheritedPriming(rootDialog, parseResult.agentId,
|
|
899
|
+
const created = await createSubDialogWithInheritedPriming(rootDialog, parseResult.agentId, mentionList, body, {
|
|
900
|
+
callName: subdialogCallName,
|
|
951
901
|
originMemberId,
|
|
952
902
|
callerDialogId: callerDialog.id.selfId,
|
|
953
903
|
callId,
|
|
954
|
-
|
|
904
|
+
sessionSlug: parseResult.sessionSlug,
|
|
955
905
|
collectiveTargets: options?.collectiveTargets ?? [parseResult.agentId],
|
|
956
906
|
});
|
|
957
907
|
rootDialog.registerSubdialog(created);
|
|
@@ -961,10 +911,14 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
961
911
|
const pendingRecord = {
|
|
962
912
|
subdialogId: result.subdialog.id.selfId,
|
|
963
913
|
createdAt: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
964
|
-
|
|
914
|
+
callName: subdialogCallName,
|
|
915
|
+
mentionList,
|
|
916
|
+
tellaskContent: body,
|
|
965
917
|
targetAgentId: parseResult.agentId,
|
|
918
|
+
callId,
|
|
919
|
+
callingCourse,
|
|
966
920
|
callType: 'B',
|
|
967
|
-
|
|
921
|
+
sessionSlug: parseResult.sessionSlug,
|
|
968
922
|
};
|
|
969
923
|
await (0, subdialog_txn_1.withSubdialogTxnLock)(pendingOwner.id, async () => {
|
|
970
924
|
await persistence_1.DialogPersistence.mutatePendingSubdialogs(pendingOwner.id, (previous) => {
|
|
@@ -977,10 +931,11 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
977
931
|
if (result.kind === 'existing') {
|
|
978
932
|
const resumePrompt = {
|
|
979
933
|
content: (0, inter_dialog_format_1.formatAssignmentFromSupdialog)({
|
|
934
|
+
callName: subdialogCallName,
|
|
980
935
|
fromAgentId: dlg.agentId,
|
|
981
936
|
toAgentId: result.subdialog.agentId,
|
|
982
|
-
|
|
983
|
-
|
|
937
|
+
mentionList,
|
|
938
|
+
tellaskContent: body,
|
|
984
939
|
language: (0, runtime_language_1.getWorkLanguage)(),
|
|
985
940
|
collectiveTargets: options?.collectiveTargets ?? [result.subdialog.agentId],
|
|
986
941
|
}),
|
|
@@ -997,10 +952,11 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
997
952
|
else {
|
|
998
953
|
const initPrompt = {
|
|
999
954
|
content: (0, inter_dialog_format_1.formatAssignmentFromSupdialog)({
|
|
955
|
+
callName: subdialogCallName,
|
|
1000
956
|
fromAgentId: rootDialog.agentId,
|
|
1001
957
|
toAgentId: result.subdialog.agentId,
|
|
1002
|
-
|
|
1003
|
-
|
|
958
|
+
mentionList,
|
|
959
|
+
tellaskContent: body,
|
|
1004
960
|
language: (0, runtime_language_1.getWorkLanguage)(),
|
|
1005
961
|
collectiveTargets: options?.collectiveTargets ?? [result.subdialog.agentId],
|
|
1006
962
|
}),
|
|
@@ -1020,7 +976,8 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
1020
976
|
}
|
|
1021
977
|
if (parseResult.type === 'C') {
|
|
1022
978
|
try {
|
|
1023
|
-
const sub = await createSubDialogWithInheritedPriming(dlg, parseResult.agentId,
|
|
979
|
+
const sub = await createSubDialogWithInheritedPriming(dlg, parseResult.agentId, mentionList, body, {
|
|
980
|
+
callName: subdialogCallName,
|
|
1024
981
|
originMemberId: dlg.agentId,
|
|
1025
982
|
callerDialogId: dlg.id.selfId,
|
|
1026
983
|
callId,
|
|
@@ -1029,8 +986,12 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
1029
986
|
const pendingRecord = {
|
|
1030
987
|
subdialogId: sub.id.selfId,
|
|
1031
988
|
createdAt: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
1032
|
-
|
|
989
|
+
callName: subdialogCallName,
|
|
990
|
+
mentionList,
|
|
991
|
+
tellaskContent: body,
|
|
1033
992
|
targetAgentId: parseResult.agentId,
|
|
993
|
+
callId,
|
|
994
|
+
callingCourse,
|
|
1034
995
|
callType: 'C',
|
|
1035
996
|
};
|
|
1036
997
|
await (0, subdialog_txn_1.withSubdialogTxnLock)(dlg.id, async () => {
|
|
@@ -1039,10 +1000,11 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
1039
1000
|
await syncPendingTellaskReminderBestEffort(dlg, 'driver-v2:executeTellaskCall:TypeC:appendPending');
|
|
1040
1001
|
const initPrompt = {
|
|
1041
1002
|
content: (0, inter_dialog_format_1.formatAssignmentFromSupdialog)({
|
|
1003
|
+
callName,
|
|
1042
1004
|
fromAgentId: dlg.agentId,
|
|
1043
1005
|
toAgentId: sub.agentId,
|
|
1044
|
-
|
|
1045
|
-
|
|
1006
|
+
mentionList,
|
|
1007
|
+
tellaskContent: body,
|
|
1046
1008
|
language: (0, runtime_language_1.getWorkLanguage)(),
|
|
1047
1009
|
collectiveTargets: options?.collectiveTargets ?? [sub.agentId],
|
|
1048
1010
|
}),
|
|
@@ -1064,83 +1026,223 @@ async function executeTellaskCall(dlg, agent, firstMention, tellaskHead, body, c
|
|
|
1064
1026
|
}
|
|
1065
1027
|
}
|
|
1066
1028
|
else {
|
|
1067
|
-
const msg =
|
|
1029
|
+
const msg = callName === 'tellaskBack'
|
|
1030
|
+
? (0, driver_messages_1.formatDomindsNoteTellaskerOnlyInSidelineDialog)((0, runtime_language_1.getWorkLanguage)())
|
|
1031
|
+
: (0, driver_messages_1.formatDomindsNoteTellaskForTeammatesOnly)((0, runtime_language_1.getWorkLanguage)(), {
|
|
1032
|
+
firstMention: options.targetForError ?? 'unknown',
|
|
1033
|
+
});
|
|
1068
1034
|
toolOutputs.push({ type: 'environment_msg', role: 'user', content: msg });
|
|
1069
1035
|
toolOutputs.push({
|
|
1070
1036
|
type: 'tellask_result_msg',
|
|
1071
1037
|
role: 'tool',
|
|
1072
1038
|
responderId: 'dominds',
|
|
1073
|
-
|
|
1039
|
+
mentionList: normalizedMentionList,
|
|
1040
|
+
tellaskContent: body,
|
|
1074
1041
|
status: 'failed',
|
|
1042
|
+
callId,
|
|
1075
1043
|
content: msg,
|
|
1076
1044
|
});
|
|
1077
|
-
await dlg.receiveTeammateCallResult('dominds',
|
|
1045
|
+
await dlg.receiveTeammateCallResult('dominds', callName, mentionList, body, msg, 'failed', callId);
|
|
1078
1046
|
dlg.clearCurrentCallId();
|
|
1079
1047
|
}
|
|
1080
1048
|
return { toolOutputs, suspend, subdialogsCreated };
|
|
1081
1049
|
}
|
|
1082
|
-
async function
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1050
|
+
async function emitTellaskSpecialCallEvents(args) {
|
|
1051
|
+
await args.dlg.callingStart({
|
|
1052
|
+
callName: args.callName,
|
|
1053
|
+
callId: args.callId,
|
|
1054
|
+
mentionList: args.mentionList,
|
|
1055
|
+
tellaskContent: args.tellaskContent,
|
|
1056
|
+
});
|
|
1057
|
+
}
|
|
1058
|
+
function toExecutableValidTellaskCall(call) {
|
|
1059
|
+
switch (call.callName) {
|
|
1060
|
+
case 'tellaskBack':
|
|
1061
|
+
return {
|
|
1062
|
+
callName: call.callName,
|
|
1063
|
+
tellaskContent: call.tellaskContent,
|
|
1064
|
+
callId: call.callId,
|
|
1065
|
+
};
|
|
1066
|
+
case 'tellask':
|
|
1067
|
+
return {
|
|
1068
|
+
callName: call.callName,
|
|
1069
|
+
mentionList: [...call.mentionList],
|
|
1070
|
+
tellaskContent: call.tellaskContent,
|
|
1071
|
+
targetAgentId: call.targetAgentId,
|
|
1072
|
+
sessionSlug: call.sessionSlug,
|
|
1073
|
+
callId: call.callId,
|
|
1074
|
+
};
|
|
1075
|
+
case 'tellaskSessionless':
|
|
1076
|
+
return {
|
|
1077
|
+
callName: call.callName,
|
|
1078
|
+
mentionList: [...call.mentionList],
|
|
1079
|
+
tellaskContent: call.tellaskContent,
|
|
1080
|
+
targetAgentId: call.targetAgentId,
|
|
1081
|
+
callId: call.callId,
|
|
1082
|
+
};
|
|
1083
|
+
case 'askHuman':
|
|
1084
|
+
return {
|
|
1085
|
+
callName: call.callName,
|
|
1086
|
+
tellaskContent: call.tellaskContent,
|
|
1087
|
+
callId: call.callId,
|
|
1088
|
+
};
|
|
1089
|
+
case 'freshBootsReasoning':
|
|
1090
|
+
return {
|
|
1091
|
+
callName: call.callName,
|
|
1092
|
+
tellaskContent: call.tellaskContent,
|
|
1093
|
+
callId: call.callId,
|
|
1094
|
+
};
|
|
1094
1095
|
}
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
? '请结合当前上下文补充这一项。'
|
|
1113
|
-
: 'Please provide this item based on the current context.';
|
|
1114
|
-
return language === 'zh'
|
|
1115
|
-
? `问题 ${index + 1}:\n${normalizedBody}`
|
|
1116
|
-
: `Question ${index + 1}:\n${normalizedBody}`;
|
|
1117
|
-
}),
|
|
1118
|
-
].join('\n\n');
|
|
1119
|
-
mergedQ4HCall = {
|
|
1120
|
-
...primary,
|
|
1121
|
-
body: mergedBody,
|
|
1122
|
-
q4hRemainingCallIds: remainingCallIds.length > 0 ? remainingCallIds : undefined,
|
|
1123
|
-
};
|
|
1124
|
-
log_1.log.info('Q4H multi-question normalized into a single prompt', undefined, {
|
|
1125
|
-
rootId: dlg.id.rootId,
|
|
1126
|
-
selfId: dlg.id.selfId,
|
|
1127
|
-
mergedCount: q4hCalls.length,
|
|
1128
|
-
primaryCallId: primary.callId,
|
|
1129
|
-
remainingCallIds,
|
|
1130
|
-
});
|
|
1096
|
+
}
|
|
1097
|
+
function normalizeQ4HCalls(calls, dlg) {
|
|
1098
|
+
const q4hCalls = calls.filter((call) => call.callName === 'askHuman');
|
|
1099
|
+
const nonQ4HCalls = calls
|
|
1100
|
+
.filter((call) => call.callName !== 'askHuman')
|
|
1101
|
+
.map((call) => {
|
|
1102
|
+
switch (call.callName) {
|
|
1103
|
+
case 'tellask':
|
|
1104
|
+
case 'tellaskSessionless':
|
|
1105
|
+
return { ...call, mentionList: [...call.mentionList] };
|
|
1106
|
+
case 'tellaskBack':
|
|
1107
|
+
case 'freshBootsReasoning':
|
|
1108
|
+
return { ...call };
|
|
1109
|
+
}
|
|
1110
|
+
});
|
|
1111
|
+
if (q4hCalls.length <= 1) {
|
|
1112
|
+
return q4hCalls.length === 1 ? [...nonQ4HCalls, { ...q4hCalls[0] }] : nonQ4HCalls;
|
|
1131
1113
|
}
|
|
1132
|
-
const
|
|
1133
|
-
|
|
1134
|
-
|
|
1114
|
+
const primary = q4hCalls[0];
|
|
1115
|
+
const remainingCallIds = q4hCalls
|
|
1116
|
+
.slice(1)
|
|
1117
|
+
.map((call) => call.callId.trim())
|
|
1118
|
+
.filter((callId) => callId !== '');
|
|
1119
|
+
const language = (0, runtime_language_1.getWorkLanguage)();
|
|
1120
|
+
const intro = language === 'zh'
|
|
1121
|
+
? `我这次有 ${q4hCalls.length} 个问题,想请你一次性回复:`
|
|
1122
|
+
: `I have ${q4hCalls.length} questions this round. Please answer them in one response:`;
|
|
1123
|
+
const mergedBody = [
|
|
1124
|
+
intro,
|
|
1125
|
+
...q4hCalls.map((call, index) => {
|
|
1126
|
+
const body = call.tellaskContent.trim();
|
|
1127
|
+
const normalizedBody = body !== ''
|
|
1128
|
+
? body
|
|
1129
|
+
: language === 'zh'
|
|
1130
|
+
? '请结合当前上下文补充这一项。'
|
|
1131
|
+
: 'Please provide this item based on the current context.';
|
|
1132
|
+
return language === 'zh'
|
|
1133
|
+
? `问题 ${index + 1}:\n${normalizedBody}`
|
|
1134
|
+
: `Question ${index + 1}:\n${normalizedBody}`;
|
|
1135
|
+
}),
|
|
1136
|
+
].join('\n\n');
|
|
1137
|
+
const mergedQ4HCall = {
|
|
1138
|
+
callName: 'askHuman',
|
|
1139
|
+
callId: primary.callId,
|
|
1140
|
+
tellaskContent: mergedBody,
|
|
1141
|
+
q4hRemainingCallIds: remainingCallIds.length > 0 ? remainingCallIds : undefined,
|
|
1142
|
+
};
|
|
1143
|
+
log_1.log.debug('Q4H multi-question normalized into a single prompt', undefined, {
|
|
1144
|
+
rootId: dlg.id.rootId,
|
|
1145
|
+
selfId: dlg.id.selfId,
|
|
1146
|
+
mergedCount: q4hCalls.length,
|
|
1147
|
+
primaryCallId: primary.callId,
|
|
1148
|
+
remainingCallIds,
|
|
1149
|
+
});
|
|
1150
|
+
return [...nonQ4HCalls, mergedQ4HCall];
|
|
1151
|
+
}
|
|
1152
|
+
async function executeValidTellaskCalls(args) {
|
|
1153
|
+
const executionCalls = normalizeQ4HCalls(args.calls, args.dlg);
|
|
1135
1154
|
const results = [];
|
|
1136
1155
|
for (const call of executionCalls) {
|
|
1137
|
-
const
|
|
1156
|
+
const runtimeMentionList = (() => {
|
|
1157
|
+
switch (call.callName) {
|
|
1158
|
+
case 'tellask':
|
|
1159
|
+
case 'tellaskSessionless':
|
|
1160
|
+
return call.mentionList;
|
|
1161
|
+
case 'tellaskBack':
|
|
1162
|
+
case 'askHuman':
|
|
1163
|
+
case 'freshBootsReasoning':
|
|
1164
|
+
return undefined;
|
|
1165
|
+
}
|
|
1166
|
+
})();
|
|
1167
|
+
if (args.emitCallEvents) {
|
|
1168
|
+
await emitTellaskSpecialCallEvents({
|
|
1169
|
+
dlg: args.dlg,
|
|
1170
|
+
callName: call.callName,
|
|
1171
|
+
mentionList: runtimeMentionList,
|
|
1172
|
+
tellaskContent: call.tellaskContent,
|
|
1173
|
+
callId: call.callId,
|
|
1174
|
+
});
|
|
1175
|
+
}
|
|
1176
|
+
let targetForError;
|
|
1177
|
+
let parseResult;
|
|
1178
|
+
switch (call.callName) {
|
|
1179
|
+
case 'tellaskBack': {
|
|
1180
|
+
targetForError = args.dlg instanceof dialog_1.SubDialog ? args.dlg.supdialog.agentId : undefined;
|
|
1181
|
+
parseResult =
|
|
1182
|
+
args.dlg instanceof dialog_1.SubDialog ? { type: 'A', agentId: args.dlg.supdialog.agentId } : null;
|
|
1183
|
+
break;
|
|
1184
|
+
}
|
|
1185
|
+
case 'tellask': {
|
|
1186
|
+
const targetAgentId = call.targetAgentId;
|
|
1187
|
+
if (targetAgentId.trim() === '') {
|
|
1188
|
+
throw new Error(`tellask invariant violation: missing targetAgentId for callId=${call.callId}`);
|
|
1189
|
+
}
|
|
1190
|
+
if (!call.sessionSlug) {
|
|
1191
|
+
throw new Error(`tellask invariant violation: missing sessionSlug for callId=${call.callId}`);
|
|
1192
|
+
}
|
|
1193
|
+
targetForError = targetAgentId;
|
|
1194
|
+
parseResult = { type: 'B', agentId: targetAgentId, sessionSlug: call.sessionSlug };
|
|
1195
|
+
break;
|
|
1196
|
+
}
|
|
1197
|
+
case 'tellaskSessionless': {
|
|
1198
|
+
const targetAgentId = call.targetAgentId;
|
|
1199
|
+
if (targetAgentId.trim() === '') {
|
|
1200
|
+
throw new Error(`tellaskSessionless invariant violation: missing targetAgentId for callId=${call.callId}`);
|
|
1201
|
+
}
|
|
1202
|
+
targetForError = targetAgentId;
|
|
1203
|
+
parseResult = { type: 'C', agentId: targetAgentId };
|
|
1204
|
+
break;
|
|
1205
|
+
}
|
|
1206
|
+
case 'askHuman': {
|
|
1207
|
+
targetForError = undefined;
|
|
1208
|
+
parseResult = null;
|
|
1209
|
+
break;
|
|
1210
|
+
}
|
|
1211
|
+
case 'freshBootsReasoning': {
|
|
1212
|
+
targetForError = args.dlg.agentId;
|
|
1213
|
+
parseResult = { type: 'C', agentId: args.dlg.agentId };
|
|
1214
|
+
break;
|
|
1215
|
+
}
|
|
1216
|
+
}
|
|
1217
|
+
const result = await executeTellaskCall(args.dlg, args.agent, runtimeMentionList, call.tellaskContent, call.callId, args.callbacks, {
|
|
1218
|
+
callName: call.callName,
|
|
1219
|
+
parseResult,
|
|
1220
|
+
targetForError,
|
|
1138
1221
|
q4hRemainingCallIds: call.q4hRemainingCallIds,
|
|
1139
1222
|
});
|
|
1140
1223
|
results.push(result);
|
|
1141
1224
|
}
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1225
|
+
return {
|
|
1226
|
+
suspend: results.some((result) => result.suspend),
|
|
1227
|
+
toolOutputs: results.flatMap((result) => result.toolOutputs),
|
|
1228
|
+
subdialogsCreated: results.flatMap((result) => result.subdialogsCreated),
|
|
1229
|
+
};
|
|
1230
|
+
}
|
|
1231
|
+
async function executeTellaskSpecialCalls(args) {
|
|
1232
|
+
const callbacks = ensureCallbacks(args.callbacks);
|
|
1233
|
+
if (args.calls.length === 0) {
|
|
1234
|
+
return { suspend: false, toolOutputs: [], subdialogsCreated: [] };
|
|
1235
|
+
}
|
|
1236
|
+
const tellaskResult = await executeValidTellaskCalls({
|
|
1237
|
+
dlg: args.dlg,
|
|
1238
|
+
agent: args.agent,
|
|
1239
|
+
calls: args.calls.map((call) => toExecutableValidTellaskCall(call)),
|
|
1240
|
+
callbacks,
|
|
1241
|
+
emitCallEvents: true,
|
|
1242
|
+
});
|
|
1243
|
+
return {
|
|
1244
|
+
suspend: tellaskResult.suspend,
|
|
1245
|
+
toolOutputs: tellaskResult.toolOutputs,
|
|
1246
|
+
subdialogsCreated: tellaskResult.subdialogsCreated,
|
|
1247
|
+
};
|
|
1146
1248
|
}
|