dominds 1.17.7 → 1.18.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/dialog-fork.js +11 -5
- package/dist/dialog-instance-registry.js +1 -18
- package/dist/dialog.d.ts +21 -31
- package/dist/dialog.js +207 -56
- package/dist/docs/dialog-system.md +3 -2
- package/dist/docs/dialog-system.zh.md +3 -2
- package/dist/docs/tellask-collab.md +2 -1
- package/dist/docs/tellask-collab.zh.md +2 -1
- package/dist/llm/defaults.yaml +43 -0
- package/dist/llm/gen/anthropic.js +153 -12
- package/dist/llm/gen/codex.js +160 -10
- package/dist/llm/gen/openai-compatible.js +141 -81
- package/dist/llm/gen/openai.js +178 -12
- package/dist/llm/gen/tool-result-image-ingest.d.ts +17 -8
- package/dist/llm/gen/tool-result-image-ingest.js +127 -27
- package/dist/llm/gen.d.ts +13 -0
- package/dist/llm/kernel-driver/drive.js +79 -15
- package/dist/llm/kernel-driver/flow.js +158 -41
- package/dist/llm/kernel-driver/reply-guidance.d.ts +6 -6
- package/dist/llm/kernel-driver/reply-guidance.js +169 -2
- package/dist/llm/kernel-driver/runtime.d.ts +2 -2
- package/dist/llm/kernel-driver/subdialog.js +4 -0
- package/dist/llm/kernel-driver/tellask-special.d.ts +2 -0
- package/dist/llm/kernel-driver/tellask-special.js +11 -6
- package/dist/llm/kernel-driver/types.d.ts +14 -24
- package/dist/minds/system-prompt.js +8 -8
- package/dist/persistence.d.ts +6 -5
- package/dist/persistence.js +198 -39
- package/dist/priming.js +98 -3
- package/dist/runtime/driver-messages.d.ts +1 -0
- package/dist/runtime/driver-messages.js +32 -10
- package/dist/runtime/reply-prompt-copy.js +4 -4
- package/dist/server/api-routes.js +11 -43
- package/dist/server/websocket-handler.js +155 -10
- package/dist/tools/builtins.js +10 -4
- package/dist/tools/cmd-runner.js +110 -49
- package/dist/tools/picture.d.ts +3 -0
- package/dist/tools/picture.js +344 -0
- package/dist/tools/prompts/control/en/principles.md +4 -2
- package/dist/tools/prompts/control/en/scenarios.md +2 -1
- package/dist/tools/prompts/control/en/tools.md +6 -6
- package/dist/tools/prompts/control/zh/principles.md +4 -2
- package/dist/tools/prompts/control/zh/scenarios.md +2 -1
- package/dist/tools/prompts/control/zh/tools.md +1 -1
- package/dist/tools/prompts/ws_mod.en.md +1 -0
- package/dist/tools/prompts/ws_mod.zh.md +1 -0
- package/dist/tools/prompts/ws_read/en/tools.md +25 -5
- package/dist/tools/prompts/ws_read/zh/tools.md +25 -5
- package/package.json +4 -4
- package/webapp/dist/assets/{_basePickBy-u7tNFRWr.js → _basePickBy-BPJaiZdW.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-u7tNFRWr.js.map → _basePickBy-BPJaiZdW.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-CH9LRkiH.js → _baseUniq-BEetT15i.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-CH9LRkiH.js.map → _baseUniq-BEetT15i.js.map} +1 -1
- package/webapp/dist/assets/{arc-Bo0Lw3ZP.js → arc-Dm7Zf36f.js} +2 -2
- package/webapp/dist/assets/{arc-Bo0Lw3ZP.js.map → arc-Dm7Zf36f.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-Ckyr89Iw.js → architectureDiagram-VXUJARFQ-BpTPtkuo.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-Ckyr89Iw.js.map → architectureDiagram-VXUJARFQ-BpTPtkuo.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-BSXoLLq_.js → blockDiagram-VD42YOAC-C8fLN0iu.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-BSXoLLq_.js.map → blockDiagram-VD42YOAC-C8fLN0iu.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-CgCG1cP0.js → c4Diagram-YG6GDRKO-BpPr62CH.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-CgCG1cP0.js.map → c4Diagram-YG6GDRKO-BpPr62CH.js.map} +1 -1
- package/webapp/dist/assets/{channel-Crbz0zgt.js → channel-EMYoPjW3.js} +2 -2
- package/webapp/dist/assets/{channel-Crbz0zgt.js.map → channel-EMYoPjW3.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-BIIEb_5S.js → chunk-4BX2VUAB-CefNtjWG.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-BIIEb_5S.js.map → chunk-4BX2VUAB-CefNtjWG.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-CaJzGgc9.js → chunk-55IACEB6-C_X7T43V.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-CaJzGgc9.js.map → chunk-55IACEB6-C_X7T43V.js.map} +1 -1
- package/webapp/dist/assets/{chunk-B4BG7PRW-DHQwhO9F.js → chunk-B4BG7PRW-BRe3_2oA.js} +5 -5
- package/webapp/dist/assets/{chunk-B4BG7PRW-DHQwhO9F.js.map → chunk-B4BG7PRW-BRe3_2oA.js.map} +1 -1
- package/webapp/dist/assets/{chunk-DI55MBZ5-CG1lO0R8.js → chunk-DI55MBZ5-CbvrsI_w.js} +4 -4
- package/webapp/dist/assets/{chunk-DI55MBZ5-CG1lO0R8.js.map → chunk-DI55MBZ5-CbvrsI_w.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-DAUsTLPS.js → chunk-FMBD7UC4-ORmtkrtS.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-DAUsTLPS.js.map → chunk-FMBD7UC4-ORmtkrtS.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QN33PNHL-BfQs-QHE.js → chunk-QN33PNHL-LTAOVhWu.js} +2 -2
- package/webapp/dist/assets/{chunk-QN33PNHL-BfQs-QHE.js.map → chunk-QN33PNHL-LTAOVhWu.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-C5iKQ6mQ.js → chunk-QZHKN3VN-ZoUM_4u5.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-C5iKQ6mQ.js.map → chunk-QZHKN3VN-ZoUM_4u5.js.map} +1 -1
- package/webapp/dist/assets/{chunk-TZMSLE5B-CBShDwy2.js → chunk-TZMSLE5B-Gao4qrq7.js} +2 -2
- package/webapp/dist/assets/{chunk-TZMSLE5B-CBShDwy2.js.map → chunk-TZMSLE5B-Gao4qrq7.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-2ON5EDUG-DrfJDzYO.js → classDiagram-2ON5EDUG-uha1vIGN.js} +6 -6
- package/webapp/dist/assets/{classDiagram-2ON5EDUG-DrfJDzYO.js.map → classDiagram-2ON5EDUG-uha1vIGN.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-DrfJDzYO.js → classDiagram-v2-WZHVMYZB-uha1vIGN.js} +6 -6
- package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-DrfJDzYO.js.map → classDiagram-v2-WZHVMYZB-uha1vIGN.js.map} +1 -1
- package/webapp/dist/assets/{clone-Cd-48URG.js → clone-_9Ayb1Gp.js} +2 -2
- package/webapp/dist/assets/{clone-Cd-48URG.js.map → clone-_9Ayb1Gp.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-CCji0YN3.js → cose-bilkent-S5V4N54A-C8wDw3NY.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-CCji0YN3.js.map → cose-bilkent-S5V4N54A-C8wDw3NY.js.map} +1 -1
- package/webapp/dist/assets/{dagre-6UL2VRFP-B94p-Dpl.js → dagre-6UL2VRFP-BUSeNot0.js} +7 -7
- package/webapp/dist/assets/{dagre-6UL2VRFP-B94p-Dpl.js.map → dagre-6UL2VRFP-BUSeNot0.js.map} +1 -1
- package/webapp/dist/assets/{diagram-PSM6KHXK-DP-zGmAS.js → diagram-PSM6KHXK-CMZAksVC.js} +8 -8
- package/webapp/dist/assets/{diagram-PSM6KHXK-DP-zGmAS.js.map → diagram-PSM6KHXK-CMZAksVC.js.map} +1 -1
- package/webapp/dist/assets/{diagram-QEK2KX5R-DquJirs4.js → diagram-QEK2KX5R-BQKoRtwy.js} +7 -7
- package/webapp/dist/assets/{diagram-QEK2KX5R-DquJirs4.js.map → diagram-QEK2KX5R-BQKoRtwy.js.map} +1 -1
- package/webapp/dist/assets/{diagram-S2PKOQOG-Dt5W2t6V.js → diagram-S2PKOQOG-DjMG97kd.js} +7 -7
- package/webapp/dist/assets/{diagram-S2PKOQOG-Dt5W2t6V.js.map → diagram-S2PKOQOG-DjMG97kd.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-Q2GNP2WA-Bs0-2Rfj.js → erDiagram-Q2GNP2WA-BujwA137.js} +5 -5
- package/webapp/dist/assets/{erDiagram-Q2GNP2WA-Bs0-2Rfj.js.map → erDiagram-Q2GNP2WA-BujwA137.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-cJjXWAlK.js → flowDiagram-NV44I4VS-DgwPjg4y.js} +6 -6
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-cJjXWAlK.js.map → flowDiagram-NV44I4VS-DgwPjg4y.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-Du1AUaKm.js → ganttDiagram-JELNMOA3-Db2ykf3E.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-Du1AUaKm.js.map → ganttDiagram-JELNMOA3-Db2ykf3E.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-D_jVOYOK.js → gitGraphDiagram-V2S2FVAM-D_gSifkv.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-D_jVOYOK.js.map → gitGraphDiagram-V2S2FVAM-D_gSifkv.js.map} +1 -1
- package/webapp/dist/assets/{graph-CuF_sq4r.js → graph-BHjCU5xP.js} +3 -3
- package/webapp/dist/assets/{graph-CuF_sq4r.js.map → graph-BHjCU5xP.js.map} +1 -1
- package/webapp/dist/assets/{index-DAShQcjb.js → index-DLajsIDJ.js} +1363 -248
- package/webapp/dist/assets/{index-DAShQcjb.js.map → index-DLajsIDJ.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-CEFlo_Hl.js → infoDiagram-HS3SLOUP-BDba5pKs.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-CEFlo_Hl.js.map → infoDiagram-HS3SLOUP-BDba5pKs.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-zc2Q4Se9.js → journeyDiagram-XKPGCS4Q-CmJAbmlm.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-zc2Q4Se9.js.map → journeyDiagram-XKPGCS4Q-CmJAbmlm.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-oT42RM2a.js → kanban-definition-3W4ZIXB7-DxQeBTDk.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-oT42RM2a.js.map → kanban-definition-3W4ZIXB7-DxQeBTDk.js.map} +1 -1
- package/webapp/dist/assets/{layout-BvaOu3k2.js → layout-DteV_yE8.js} +5 -5
- package/webapp/dist/assets/{layout-BvaOu3k2.js.map → layout-DteV_yE8.js.map} +1 -1
- package/webapp/dist/assets/{linear-Cg-CjocS.js → linear-zItbPrND.js} +2 -2
- package/webapp/dist/assets/{linear-Cg-CjocS.js.map → linear-zItbPrND.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-CVFVrU22.js → mindmap-definition-VGOIOE7T-BJXI7UqO.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-CVFVrU22.js.map → mindmap-definition-VGOIOE7T-BJXI7UqO.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-ADFJNKIX-Bai5CMos.js → pieDiagram-ADFJNKIX-BpM-aH2p.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-ADFJNKIX-Bai5CMos.js.map → pieDiagram-ADFJNKIX-BpM-aH2p.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-BPXDO_2E.js → quadrantDiagram-AYHSOK5B-NXdIpA15.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-BPXDO_2E.js.map → quadrantDiagram-AYHSOK5B-NXdIpA15.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-Dgj9X9cE.js → requirementDiagram-UZGBJVZJ-D1AICAA0.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-Dgj9X9cE.js.map → requirementDiagram-UZGBJVZJ-D1AICAA0.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-Dc0mO4OD.js → sankeyDiagram-TZEHDZUN-WiReDPfo.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-Dc0mO4OD.js.map → sankeyDiagram-TZEHDZUN-WiReDPfo.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-DZJTga0d.js → sequenceDiagram-WL72ISMW-Cw76oP8t.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-DZJTga0d.js.map → sequenceDiagram-WL72ISMW-Cw76oP8t.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-RNxYatKM.js → stateDiagram-FKZM4ZOC-QjCeRczs.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-RNxYatKM.js.map → stateDiagram-FKZM4ZOC-QjCeRczs.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-ADxYqWzo.js → stateDiagram-v2-4FDKWEC3-IClqxQ4s.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-ADxYqWzo.js.map → stateDiagram-v2-4FDKWEC3-IClqxQ4s.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-IT6M3QCI-Qx_h1e-i.js → timeline-definition-IT6M3QCI-BfyfTY7m.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-IT6M3QCI-Qx_h1e-i.js.map → timeline-definition-IT6M3QCI-BfyfTY7m.js.map} +1 -1
- package/webapp/dist/assets/{treemap-GDKQZRPO-BHzYvXGn.js → treemap-GDKQZRPO-C5MiL6--.js} +5 -5
- package/webapp/dist/assets/{treemap-GDKQZRPO-BHzYvXGn.js.map → treemap-GDKQZRPO-C5MiL6--.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-DGdjkYQQ.js → xychartDiagram-PRI3JC2R-ybaJrSry.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-DGdjkYQQ.js.map → xychartDiagram-PRI3JC2R-ybaJrSry.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
|
@@ -238,6 +238,9 @@ function hasMeaningfulBatchOutput(batch) {
|
|
|
238
238
|
if (output.kind === 'tool_result_image_ingest') {
|
|
239
239
|
continue;
|
|
240
240
|
}
|
|
241
|
+
if (output.kind === 'user_image_ingest') {
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
241
244
|
if (output.kind !== 'message') {
|
|
242
245
|
return true;
|
|
243
246
|
}
|
|
@@ -346,7 +349,7 @@ const TELLASK_SPECIAL_VIRTUAL_TOOLS = [
|
|
|
346
349
|
{
|
|
347
350
|
type: 'func',
|
|
348
351
|
name: 'tellaskBack',
|
|
349
|
-
description: 'Ask back to the requester dialog in sideline context.',
|
|
352
|
+
description: 'Ask back to the requester dialog in sideline context when upstream clarification/decision is required or ownership cannot be determined from SOP.',
|
|
350
353
|
parameters: {
|
|
351
354
|
type: 'object',
|
|
352
355
|
properties: {
|
|
@@ -565,34 +568,70 @@ function resolveUpNextPrompt(dlg) {
|
|
|
565
568
|
q4h: runControl.q4h,
|
|
566
569
|
};
|
|
567
570
|
})();
|
|
568
|
-
|
|
571
|
+
const common = {
|
|
569
572
|
content: upNext.prompt,
|
|
570
573
|
msgId: upNext.msgId,
|
|
571
574
|
grammar: upNext.grammar ?? 'markdown',
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
q4hAnswerCallId: upNext.q4hAnswerCallId,
|
|
575
|
-
tellaskReplyDirective: upNext.tellaskReplyDirective,
|
|
576
|
-
skipTaskdoc: upNext.skipTaskdoc,
|
|
577
|
-
subdialogReplyTarget: upNext.subdialogReplyTarget,
|
|
578
|
-
runControl: normalizedRunControl,
|
|
575
|
+
...(upNext.userLanguageCode === undefined ? {} : { userLanguageCode: upNext.userLanguageCode }),
|
|
576
|
+
...(normalizedRunControl === undefined ? {} : { runControl: normalizedRunControl }),
|
|
579
577
|
};
|
|
578
|
+
switch (upNext.kind) {
|
|
579
|
+
case 'user_generation_boundary':
|
|
580
|
+
case 'deferred_q4h_answer': {
|
|
581
|
+
const prompt = {
|
|
582
|
+
...common,
|
|
583
|
+
origin: 'user',
|
|
584
|
+
...(upNext.q4hAnswerCallId === undefined
|
|
585
|
+
? {}
|
|
586
|
+
: { q4hAnswerCallId: upNext.q4hAnswerCallId }),
|
|
587
|
+
};
|
|
588
|
+
return prompt;
|
|
589
|
+
}
|
|
590
|
+
case 'registered_assignment_update':
|
|
591
|
+
case 'new_course_runtime_guide':
|
|
592
|
+
case 'new_course_runtime_reply':
|
|
593
|
+
case 'new_course_runtime_subdialog': {
|
|
594
|
+
const runtimeCommon = {
|
|
595
|
+
...common,
|
|
596
|
+
origin: 'runtime',
|
|
597
|
+
...(upNext.skipTaskdoc === undefined ? {} : { skipTaskdoc: upNext.skipTaskdoc }),
|
|
598
|
+
};
|
|
599
|
+
if (upNext.kind === 'registered_assignment_update' ||
|
|
600
|
+
upNext.kind === 'new_course_runtime_subdialog') {
|
|
601
|
+
const prompt = {
|
|
602
|
+
...runtimeCommon,
|
|
603
|
+
tellaskReplyDirective: upNext.tellaskReplyDirective,
|
|
604
|
+
subdialogReplyTarget: upNext.subdialogReplyTarget,
|
|
605
|
+
};
|
|
606
|
+
return prompt;
|
|
607
|
+
}
|
|
608
|
+
if (upNext.kind === 'new_course_runtime_reply') {
|
|
609
|
+
const prompt = {
|
|
610
|
+
...runtimeCommon,
|
|
611
|
+
tellaskReplyDirective: upNext.tellaskReplyDirective,
|
|
612
|
+
};
|
|
613
|
+
return prompt;
|
|
614
|
+
}
|
|
615
|
+
const prompt = runtimeCommon;
|
|
616
|
+
return prompt;
|
|
617
|
+
}
|
|
618
|
+
}
|
|
580
619
|
}
|
|
581
620
|
async function renderRemindersForContext(dlg) {
|
|
582
621
|
const reminders = await dlg.listVisibleReminders();
|
|
583
622
|
if (reminders.length === 0)
|
|
584
623
|
return [];
|
|
585
624
|
const language = (0, work_language_1.getWorkLanguage)();
|
|
586
|
-
const
|
|
625
|
+
const renderedItems = [];
|
|
587
626
|
for (const reminder of reminders) {
|
|
588
627
|
if (!reminder || !(0, tool_1.reminderEchoBackEnabled)(reminder)) {
|
|
589
628
|
continue;
|
|
590
629
|
}
|
|
591
630
|
if (reminder.owner) {
|
|
592
|
-
|
|
631
|
+
renderedItems.push(await reminder.owner.renderReminder(dlg, reminder));
|
|
593
632
|
continue;
|
|
594
633
|
}
|
|
595
|
-
|
|
634
|
+
renderedItems.push({
|
|
596
635
|
type: 'transient_guide_msg',
|
|
597
636
|
role: 'assistant',
|
|
598
637
|
content: (0, driver_messages_1.formatReminderItemGuide)(language, reminder.id, reminder.content, {
|
|
@@ -601,7 +640,16 @@ async function renderRemindersForContext(dlg) {
|
|
|
601
640
|
}),
|
|
602
641
|
});
|
|
603
642
|
}
|
|
604
|
-
|
|
643
|
+
if (renderedItems.length === 0)
|
|
644
|
+
return [];
|
|
645
|
+
return [
|
|
646
|
+
{
|
|
647
|
+
type: 'environment_msg',
|
|
648
|
+
role: 'user',
|
|
649
|
+
content: (0, driver_messages_1.formatReminderContextGuide)(language),
|
|
650
|
+
},
|
|
651
|
+
...renderedItems,
|
|
652
|
+
];
|
|
605
653
|
}
|
|
606
654
|
function hasSameReplyDirective(left, right) {
|
|
607
655
|
if (!left || !right) {
|
|
@@ -835,7 +883,7 @@ async function executeFunctionCalls(args) {
|
|
|
835
883
|
if (!preparedInvocationArgs || !preparedInvocationArgs.ok) {
|
|
836
884
|
outcome = 'failure';
|
|
837
885
|
const errorText = preparedInvocationArgs?.error ?? 'Arguments could not be prepared for tool invocation';
|
|
838
|
-
log_1.log.
|
|
886
|
+
log_1.log.debug('kernel-driver rejected function call arguments before execution', undefined, {
|
|
839
887
|
funcName: func.name,
|
|
840
888
|
arguments: argsStr,
|
|
841
889
|
error: errorText,
|
|
@@ -929,6 +977,7 @@ async function executeFunctionRound(args) {
|
|
|
929
977
|
funcCalls: args.funcCalls,
|
|
930
978
|
allowedSpecials,
|
|
931
979
|
callbacks: args.callbacks,
|
|
980
|
+
activePromptReplyDirective: args.activePromptReplyDirective,
|
|
932
981
|
});
|
|
933
982
|
throwIfAborted(args.abortSignal, args.dlg);
|
|
934
983
|
const genericExecutions = await executeFunctionCalls({
|
|
@@ -1464,8 +1513,11 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1464
1513
|
msgId: currentPrompt.msgId,
|
|
1465
1514
|
grammar: 'markdown',
|
|
1466
1515
|
content: replyGuidance.promptContent,
|
|
1516
|
+
...(currentPrompt.contentItems === undefined
|
|
1517
|
+
? {}
|
|
1518
|
+
: { contentItems: currentPrompt.contentItems }),
|
|
1467
1519
|
});
|
|
1468
|
-
await dlg.persistUserMessage(replyGuidance.promptContent, currentPrompt.msgId, 'markdown', origin, persistedUserLanguageCode, q4hAnswerCallId, replyGuidance.persistedTellaskReplyDirective);
|
|
1520
|
+
await dlg.persistUserMessage(replyGuidance.promptContent, currentPrompt.msgId, 'markdown', origin, persistedUserLanguageCode, q4hAnswerCallId, replyGuidance.persistedTellaskReplyDirective, currentPrompt.contentItems);
|
|
1469
1521
|
await persistence_1.DialogPersistence.clearPendingCourseStartPrompt(dlg.id, currentPrompt.msgId, dlg.status);
|
|
1470
1522
|
}
|
|
1471
1523
|
if (renderPromptAsRuntimeGuideBubble) {
|
|
@@ -1485,6 +1537,9 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1485
1537
|
genseq: dlg.activeGenSeq,
|
|
1486
1538
|
msgId: currentPrompt.msgId,
|
|
1487
1539
|
content: replyGuidance.promptContent,
|
|
1540
|
+
...(currentPrompt.contentItems === undefined
|
|
1541
|
+
? {}
|
|
1542
|
+
: { contentItems: currentPrompt.contentItems }),
|
|
1488
1543
|
grammar: 'markdown',
|
|
1489
1544
|
origin,
|
|
1490
1545
|
userLanguageCode: persistedUserLanguageCode,
|
|
@@ -1768,6 +1823,10 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1768
1823
|
throwIfAborted(abortSignal, dlg);
|
|
1769
1824
|
await dlg.toolResultImageIngest(ingest);
|
|
1770
1825
|
},
|
|
1826
|
+
userImageIngest: async (ingest) => {
|
|
1827
|
+
throwIfAborted(abortSignal, dlg);
|
|
1828
|
+
await dlg.userImageIngest(ingest);
|
|
1829
|
+
},
|
|
1771
1830
|
};
|
|
1772
1831
|
const res = await (0, runtime_1.runLlmRequestWithRetry)({
|
|
1773
1832
|
dlg,
|
|
@@ -1882,6 +1941,10 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1882
1941
|
await dlg.toolResultImageIngest(output.ingest);
|
|
1883
1942
|
break;
|
|
1884
1943
|
}
|
|
1944
|
+
case 'user_image_ingest': {
|
|
1945
|
+
await dlg.userImageIngest(output.ingest);
|
|
1946
|
+
break;
|
|
1947
|
+
}
|
|
1885
1948
|
default: {
|
|
1886
1949
|
const _exhaustive = output;
|
|
1887
1950
|
throw new Error(`Unhandled batch output kind: ${String(_exhaustive)}`);
|
|
@@ -1967,6 +2030,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1967
2030
|
callbacks,
|
|
1968
2031
|
abortSignal,
|
|
1969
2032
|
allowTellaskFunctions: policy.allowTellaskFunctions,
|
|
2033
|
+
activePromptReplyDirective: currentPrompt?.tellaskReplyDirective,
|
|
1970
2034
|
});
|
|
1971
2035
|
if (routed.tellaskToolOutputs.length > 0) {
|
|
1972
2036
|
newMsgs.push(...routed.tellaskToolOutputs);
|
|
@@ -140,6 +140,18 @@ function hasNoPromptSubdialogResumeEntitlement(dialog, driveOptions) {
|
|
|
140
140
|
}
|
|
141
141
|
return entitlement.ownerDialogId === dialog.id.selfId;
|
|
142
142
|
}
|
|
143
|
+
function shouldAllowPendingSubdialogsForParentRevive(dialog, driveOptions) {
|
|
144
|
+
if (!(dialog instanceof dialog_1.SubDialog)) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
const entitlement = driveOptions?.noPromptSubdialogResumeEntitlement;
|
|
148
|
+
if (!entitlement) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
return (driveOptions?.source === 'kernel_driver_supply_response_parent_revive' &&
|
|
152
|
+
entitlement.ownerDialogId === dialog.id.selfId &&
|
|
153
|
+
entitlement.reason === 'reply_tellask_back_delivered');
|
|
154
|
+
}
|
|
143
155
|
function resolveDriveRequestSource(humanPrompt, driveOptions) {
|
|
144
156
|
if (driveOptions?.source) {
|
|
145
157
|
return driveOptions.source;
|
|
@@ -355,20 +367,59 @@ async function resolveEffectivePrompt(dialog, humanPrompt) {
|
|
|
355
367
|
}
|
|
356
368
|
return {
|
|
357
369
|
fromUpNext: true,
|
|
358
|
-
prompt: {
|
|
359
|
-
|
|
360
|
-
msgId: upNext.msgId,
|
|
361
|
-
grammar: upNext.grammar ?? 'markdown',
|
|
362
|
-
origin: upNext.origin,
|
|
363
|
-
userLanguageCode: upNext.userLanguageCode === 'zh' || upNext.userLanguageCode === 'en'
|
|
370
|
+
prompt: (() => {
|
|
371
|
+
const normalizedUserLanguageCode = upNext.userLanguageCode === 'zh' || upNext.userLanguageCode === 'en'
|
|
364
372
|
? upNext.userLanguageCode
|
|
365
|
-
: undefined
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
373
|
+
: undefined;
|
|
374
|
+
const common = {
|
|
375
|
+
content: upNext.prompt,
|
|
376
|
+
msgId: upNext.msgId,
|
|
377
|
+
grammar: upNext.grammar ?? 'markdown',
|
|
378
|
+
userLanguageCode: normalizedUserLanguageCode,
|
|
379
|
+
runControl: upNext.runControl,
|
|
380
|
+
};
|
|
381
|
+
switch (upNext.kind) {
|
|
382
|
+
case 'user_generation_boundary':
|
|
383
|
+
case 'deferred_q4h_answer': {
|
|
384
|
+
const prompt = {
|
|
385
|
+
...common,
|
|
386
|
+
origin: 'user',
|
|
387
|
+
...(upNext.q4hAnswerCallId === undefined
|
|
388
|
+
? {}
|
|
389
|
+
: { q4hAnswerCallId: upNext.q4hAnswerCallId }),
|
|
390
|
+
};
|
|
391
|
+
return prompt;
|
|
392
|
+
}
|
|
393
|
+
case 'registered_assignment_update':
|
|
394
|
+
case 'new_course_runtime_guide':
|
|
395
|
+
case 'new_course_runtime_reply':
|
|
396
|
+
case 'new_course_runtime_subdialog': {
|
|
397
|
+
const runtimeCommon = {
|
|
398
|
+
...common,
|
|
399
|
+
origin: 'runtime',
|
|
400
|
+
...(upNext.skipTaskdoc === undefined ? {} : { skipTaskdoc: upNext.skipTaskdoc }),
|
|
401
|
+
};
|
|
402
|
+
if (upNext.kind === 'registered_assignment_update' ||
|
|
403
|
+
upNext.kind === 'new_course_runtime_subdialog') {
|
|
404
|
+
const prompt = {
|
|
405
|
+
...runtimeCommon,
|
|
406
|
+
tellaskReplyDirective: upNext.tellaskReplyDirective,
|
|
407
|
+
subdialogReplyTarget: upNext.subdialogReplyTarget,
|
|
408
|
+
};
|
|
409
|
+
return prompt;
|
|
410
|
+
}
|
|
411
|
+
if (upNext.kind === 'new_course_runtime_reply') {
|
|
412
|
+
const prompt = {
|
|
413
|
+
...runtimeCommon,
|
|
414
|
+
tellaskReplyDirective: upNext.tellaskReplyDirective,
|
|
415
|
+
};
|
|
416
|
+
return prompt;
|
|
417
|
+
}
|
|
418
|
+
const prompt = runtimeCommon;
|
|
419
|
+
return prompt;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
})(),
|
|
372
423
|
};
|
|
373
424
|
}
|
|
374
425
|
async function executeDriveRound(args) {
|
|
@@ -484,9 +535,12 @@ async function executeDriveRound(args) {
|
|
|
484
535
|
// Do not refactor this branch using only `displayState` or only the previous interrupted
|
|
485
536
|
// marker. The correct behavior emerges from combining fresh blocker facts, queued prompt
|
|
486
537
|
// state, and the deferred reply reassertion logic elsewhere.
|
|
538
|
+
const allowPendingSubdialogsForParentRevive = shouldAllowPendingSubdialogsForParentRevive(dialog, driveOptions);
|
|
487
539
|
const suspension = resumeFromInterjectionPause
|
|
488
540
|
? await loadFreshSuspensionStatusFromPersistence(dialog)
|
|
489
|
-
: await dialog.getSuspensionStatus(
|
|
541
|
+
: await dialog.getSuspensionStatus({
|
|
542
|
+
allowPendingSubdialogs: allowPendingSubdialogsForParentRevive,
|
|
543
|
+
});
|
|
490
544
|
const queuedPrompt = dialog.peekUpNext();
|
|
491
545
|
const queuedSubdialogPromptCanResume = dialog instanceof dialog_1.SubDialog && queuedPrompt !== undefined;
|
|
492
546
|
if (!suspension.canDrive && !queuedSubdialogPromptCanResume) {
|
|
@@ -714,25 +768,44 @@ async function executeDriveRound(args) {
|
|
|
714
768
|
});
|
|
715
769
|
}
|
|
716
770
|
else {
|
|
717
|
-
|
|
771
|
+
const shouldDirectFallbackAfterAskBackParentRevive = shouldAllowPendingSubdialogsForParentRevive(dialog, driveOptions);
|
|
772
|
+
if (!activePromptWasReplyToolReminder &&
|
|
773
|
+
!shouldDirectFallbackAfterAskBackParentRevive) {
|
|
718
774
|
const language = (0, work_language_1.getWorkLanguage)();
|
|
719
|
-
followUp =
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
775
|
+
followUp =
|
|
776
|
+
subdialogReplyTarget === undefined
|
|
777
|
+
? {
|
|
778
|
+
kind: 'runtime_reply_reminder',
|
|
779
|
+
prompt: await buildReplyToolReminderPrompt({
|
|
780
|
+
dlg: dialog,
|
|
781
|
+
directive: activeTellaskReplyDirective,
|
|
782
|
+
language,
|
|
783
|
+
}),
|
|
784
|
+
msgId: (0, id_1.generateShortId)(),
|
|
785
|
+
grammar: 'markdown',
|
|
786
|
+
origin: 'runtime',
|
|
787
|
+
userLanguageCode: language,
|
|
788
|
+
tellaskReplyDirective: activeTellaskReplyDirective,
|
|
789
|
+
}
|
|
790
|
+
: {
|
|
791
|
+
kind: 'runtime_subdialog_reply_reminder',
|
|
792
|
+
prompt: await buildReplyToolReminderPrompt({
|
|
793
|
+
dlg: dialog,
|
|
794
|
+
directive: activeTellaskReplyDirective,
|
|
795
|
+
language,
|
|
796
|
+
}),
|
|
797
|
+
msgId: (0, id_1.generateShortId)(),
|
|
798
|
+
grammar: 'markdown',
|
|
799
|
+
origin: 'runtime',
|
|
800
|
+
userLanguageCode: language,
|
|
801
|
+
tellaskReplyDirective: activeTellaskReplyDirective,
|
|
802
|
+
subdialogReplyTarget,
|
|
803
|
+
};
|
|
732
804
|
log_1.log.debug('kernel-driver queued subdialog replyTellask reminder after plain reply', undefined, {
|
|
733
805
|
dialogId: dialog.id.valueOf(),
|
|
734
806
|
targetCallId: activeTellaskReplyDirective.targetCallId,
|
|
735
807
|
targetOwnerDialogId: subdialogReplyTarget?.ownerDialogId,
|
|
808
|
+
directFallbackAfterAskBackParentRevive: shouldDirectFallbackAfterAskBackParentRevive,
|
|
736
809
|
});
|
|
737
810
|
}
|
|
738
811
|
else {
|
|
@@ -821,6 +894,7 @@ async function executeDriveRound(args) {
|
|
|
821
894
|
if (!activePromptWasReplyToolReminder) {
|
|
822
895
|
const language = (0, work_language_1.getWorkLanguage)();
|
|
823
896
|
followUp = {
|
|
897
|
+
kind: 'runtime_reply_reminder',
|
|
824
898
|
prompt: await buildReplyToolReminderPrompt({
|
|
825
899
|
dlg: dialog,
|
|
826
900
|
directive: activeTellaskReplyDirective,
|
|
@@ -863,20 +937,63 @@ async function executeDriveRound(args) {
|
|
|
863
937
|
source: 'kernel_driver_follow_up',
|
|
864
938
|
reason: 'follow_up_prompt',
|
|
865
939
|
},
|
|
866
|
-
humanPrompt: {
|
|
867
|
-
|
|
868
|
-
msgId: followUp.msgId,
|
|
869
|
-
grammar: followUp.grammar ?? 'markdown',
|
|
870
|
-
origin: followUp.origin,
|
|
871
|
-
userLanguageCode: followUp.userLanguageCode === 'zh' || followUp.userLanguageCode === 'en'
|
|
940
|
+
humanPrompt: (() => {
|
|
941
|
+
const normalizedUserLanguageCode = followUp.userLanguageCode === 'zh' || followUp.userLanguageCode === 'en'
|
|
872
942
|
? followUp.userLanguageCode
|
|
873
|
-
: undefined
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
943
|
+
: undefined;
|
|
944
|
+
const common = {
|
|
945
|
+
content: followUp.prompt,
|
|
946
|
+
msgId: followUp.msgId,
|
|
947
|
+
grammar: followUp.grammar ?? 'markdown',
|
|
948
|
+
userLanguageCode: normalizedUserLanguageCode,
|
|
949
|
+
runControl: followUp.runControl,
|
|
950
|
+
};
|
|
951
|
+
switch (followUp.kind) {
|
|
952
|
+
case 'user_generation_boundary':
|
|
953
|
+
case 'deferred_q4h_answer': {
|
|
954
|
+
const prompt = {
|
|
955
|
+
...common,
|
|
956
|
+
origin: 'user',
|
|
957
|
+
...(followUp.q4hAnswerCallId === undefined
|
|
958
|
+
? {}
|
|
959
|
+
: { q4hAnswerCallId: followUp.q4hAnswerCallId }),
|
|
960
|
+
};
|
|
961
|
+
return prompt;
|
|
962
|
+
}
|
|
963
|
+
case 'registered_assignment_update':
|
|
964
|
+
case 'new_course_runtime_guide':
|
|
965
|
+
case 'new_course_runtime_reply':
|
|
966
|
+
case 'new_course_runtime_subdialog':
|
|
967
|
+
case 'runtime_reply_reminder':
|
|
968
|
+
case 'runtime_subdialog_reply_reminder': {
|
|
969
|
+
const runtimeCommon = {
|
|
970
|
+
...common,
|
|
971
|
+
origin: 'runtime',
|
|
972
|
+
...(followUp.skipTaskdoc === undefined
|
|
973
|
+
? {}
|
|
974
|
+
: { skipTaskdoc: followUp.skipTaskdoc }),
|
|
975
|
+
};
|
|
976
|
+
if (followUp.kind === 'registered_assignment_update' ||
|
|
977
|
+
followUp.kind === 'new_course_runtime_subdialog') {
|
|
978
|
+
const prompt = {
|
|
979
|
+
...runtimeCommon,
|
|
980
|
+
tellaskReplyDirective: followUp.tellaskReplyDirective,
|
|
981
|
+
subdialogReplyTarget: followUp.subdialogReplyTarget,
|
|
982
|
+
};
|
|
983
|
+
return prompt;
|
|
984
|
+
}
|
|
985
|
+
if (followUp.kind === 'new_course_runtime_reply') {
|
|
986
|
+
const prompt = {
|
|
987
|
+
...runtimeCommon,
|
|
988
|
+
tellaskReplyDirective: followUp.tellaskReplyDirective,
|
|
989
|
+
};
|
|
990
|
+
return prompt;
|
|
991
|
+
}
|
|
992
|
+
const prompt = runtimeCommon;
|
|
993
|
+
return prompt;
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
})(),
|
|
880
997
|
});
|
|
881
998
|
}
|
|
882
999
|
if (shouldPauseAfterLocalUserInterjection &&
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import type { TellaskReplyDirective } from '@longrun-ai/kernel/types/storage';
|
|
2
2
|
import { Dialog } from '../../dialog';
|
|
3
|
-
import type {
|
|
3
|
+
import type { KernelDriverPrompt } from './types';
|
|
4
4
|
export declare function resolveReplyTargetAgentId(args: {
|
|
5
5
|
dlg: Dialog;
|
|
6
6
|
directive: TellaskReplyDirective;
|
|
7
7
|
}): Promise<string | undefined>;
|
|
8
8
|
export declare function resolvePromptReplyGuidance(args: {
|
|
9
9
|
dlg: Dialog;
|
|
10
|
-
prompt:
|
|
10
|
+
prompt: KernelDriverPrompt | undefined;
|
|
11
11
|
language?: 'zh' | 'en';
|
|
12
12
|
}): Promise<{
|
|
13
|
-
activeReplyDirective:
|
|
14
|
-
deferredReplyReassertionDirective:
|
|
13
|
+
activeReplyDirective: KernelDriverPrompt['tellaskReplyDirective'];
|
|
14
|
+
deferredReplyReassertionDirective: KernelDriverPrompt['tellaskReplyDirective'];
|
|
15
15
|
isQ4HAnswerPrompt: boolean;
|
|
16
16
|
promptContent: string | undefined;
|
|
17
|
-
persistedTellaskReplyDirective:
|
|
17
|
+
persistedTellaskReplyDirective: KernelDriverPrompt['tellaskReplyDirective'];
|
|
18
18
|
suppressInterDialogReplyGuidance: boolean;
|
|
19
19
|
transientGuideContent: string | undefined;
|
|
20
20
|
}>;
|
|
@@ -23,6 +23,6 @@ export declare function buildReplyObligationSuppressionGuide(args: {
|
|
|
23
23
|
}): string;
|
|
24
24
|
export declare function buildReplyObligationReassertionPrompt(args: {
|
|
25
25
|
dlg: Dialog;
|
|
26
|
-
directive: NonNullable<
|
|
26
|
+
directive: NonNullable<KernelDriverPrompt['tellaskReplyDirective']>;
|
|
27
27
|
language: 'zh' | 'en';
|
|
28
28
|
}): Promise<string>;
|
|
@@ -82,6 +82,149 @@ function buildPromptContentWithExactReplyToolName(args) {
|
|
|
82
82
|
});
|
|
83
83
|
return `${note}\n\n${args.prompt.content}`;
|
|
84
84
|
}
|
|
85
|
+
function hasSameReplyDirective(left, right) {
|
|
86
|
+
if (!left || !right) {
|
|
87
|
+
return left === right;
|
|
88
|
+
}
|
|
89
|
+
if (left.expectedReplyCallName !== right.expectedReplyCallName) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
if (left.targetCallId !== right.targetCallId || left.tellaskContent !== right.tellaskContent) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
if (left.expectedReplyCallName === 'replyTellaskBack') {
|
|
96
|
+
return (right.expectedReplyCallName === 'replyTellaskBack' &&
|
|
97
|
+
left.targetDialogId === right.targetDialogId);
|
|
98
|
+
}
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
function buildCurrentSubdialogAssignmentDirective(dlg) {
|
|
102
|
+
switch (dlg.assignmentFromSup.callName) {
|
|
103
|
+
case 'tellask':
|
|
104
|
+
return {
|
|
105
|
+
expectedReplyCallName: 'replyTellask',
|
|
106
|
+
targetCallId: dlg.assignmentFromSup.callId,
|
|
107
|
+
tellaskContent: dlg.assignmentFromSup.tellaskContent,
|
|
108
|
+
};
|
|
109
|
+
case 'tellaskSessionless':
|
|
110
|
+
case 'freshBootsReasoning':
|
|
111
|
+
return {
|
|
112
|
+
expectedReplyCallName: 'replyTellaskSessionless',
|
|
113
|
+
targetCallId: dlg.assignmentFromSup.callId,
|
|
114
|
+
tellaskContent: dlg.assignmentFromSup.tellaskContent,
|
|
115
|
+
};
|
|
116
|
+
default: {
|
|
117
|
+
const _exhaustive = dlg.assignmentFromSup.callName;
|
|
118
|
+
throw new Error(`Unsupported subdialog assignment callName: ${_exhaustive}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async function hasCurrentCourseHumanPromptRecord(args) {
|
|
123
|
+
const events = await persistence_1.DialogPersistence.loadCourseEvents(args.dlg.id, args.dlg.currentCourse, args.dlg.status);
|
|
124
|
+
for (const event of events) {
|
|
125
|
+
if (event.type === 'human_text_record' && event.msgId === args.msgId) {
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
async function resolveFreshCurrentSubdialogAssignmentDirective(args) {
|
|
132
|
+
if (!(args.dlg instanceof dialog_1.SubDialog) || args.prompt?.origin !== 'runtime') {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
const promptDirective = args.prompt.tellaskReplyDirective;
|
|
136
|
+
if (!promptDirective) {
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
const currentAssignmentDirective = buildCurrentSubdialogAssignmentDirective(args.dlg);
|
|
140
|
+
if (!hasSameReplyDirective(promptDirective, currentAssignmentDirective)) {
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
if (await hasCurrentCourseHumanPromptRecord({
|
|
144
|
+
dlg: args.dlg,
|
|
145
|
+
msgId: args.prompt.msgId,
|
|
146
|
+
})) {
|
|
147
|
+
return undefined;
|
|
148
|
+
}
|
|
149
|
+
const latest = await persistence_1.DialogPersistence.loadDialogLatest(args.dlg.id, args.dlg.status);
|
|
150
|
+
if (!latest) {
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
const targetCallId = currentAssignmentDirective.targetCallId.trim();
|
|
154
|
+
for (let course = latest.currentCourse; course >= 1; course -= 1) {
|
|
155
|
+
const events = await persistence_1.DialogPersistence.loadCourseEvents(args.dlg.id, course, args.dlg.status);
|
|
156
|
+
for (const event of events) {
|
|
157
|
+
if (event.type === 'tellask_reply_resolution_record' &&
|
|
158
|
+
event.targetCallId.trim() === targetCallId) {
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return currentAssignmentDirective;
|
|
164
|
+
}
|
|
165
|
+
async function resolveFreshPendingAskBackReplyDirective(args) {
|
|
166
|
+
const prompt = args.prompt;
|
|
167
|
+
if (prompt?.origin !== 'runtime' ||
|
|
168
|
+
prompt.tellaskReplyDirective?.expectedReplyCallName !== 'replyTellaskBack') {
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
if (await hasCurrentCourseHumanPromptRecord({
|
|
172
|
+
dlg: args.dlg,
|
|
173
|
+
msgId: prompt.msgId,
|
|
174
|
+
})) {
|
|
175
|
+
return undefined;
|
|
176
|
+
}
|
|
177
|
+
const rootDialog = args.dlg instanceof dialog_1.RootDialog
|
|
178
|
+
? args.dlg
|
|
179
|
+
: args.dlg instanceof dialog_1.SubDialog
|
|
180
|
+
? args.dlg.rootDialog
|
|
181
|
+
: undefined;
|
|
182
|
+
if (!rootDialog) {
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
const requesterDialogId = new dialog_1.DialogID(prompt.tellaskReplyDirective.targetDialogId, rootDialog.id.rootId);
|
|
186
|
+
const latest = await persistence_1.DialogPersistence.loadDialogLatest(requesterDialogId, rootDialog.status);
|
|
187
|
+
if (!latest) {
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
const targetCallId = prompt.tellaskReplyDirective.targetCallId.trim();
|
|
191
|
+
let sawAskBackCall = false;
|
|
192
|
+
for (let course = latest.currentCourse; course >= 1; course -= 1) {
|
|
193
|
+
const events = await persistence_1.DialogPersistence.loadCourseEvents(requesterDialogId, course, rootDialog.status);
|
|
194
|
+
for (const event of events) {
|
|
195
|
+
if (event.type === 'tellask_result_record' && event.callId.trim() === targetCallId) {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
if (event.type === 'tellask_call_record' &&
|
|
199
|
+
event.id.trim() === targetCallId &&
|
|
200
|
+
event.name === 'tellaskBack') {
|
|
201
|
+
sawAskBackCall = true;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return sawAskBackCall ? prompt.tellaskReplyDirective : undefined;
|
|
206
|
+
}
|
|
207
|
+
function resolveFreshReplyDirective(args) {
|
|
208
|
+
const promptDirective = args.promptDirective;
|
|
209
|
+
const persistedDirective = args.persistedDirective;
|
|
210
|
+
if (!promptDirective) {
|
|
211
|
+
return persistedDirective;
|
|
212
|
+
}
|
|
213
|
+
if (!persistedDirective) {
|
|
214
|
+
return undefined;
|
|
215
|
+
}
|
|
216
|
+
return hasSameReplyDirective(promptDirective, persistedDirective)
|
|
217
|
+
? promptDirective
|
|
218
|
+
: persistedDirective;
|
|
219
|
+
}
|
|
220
|
+
function resolvePromptPersistedReplyDirective(args) {
|
|
221
|
+
const promptDirective = args.promptDirective;
|
|
222
|
+
const persistedDirective = args.persistedDirective;
|
|
223
|
+
if (!promptDirective || !persistedDirective) {
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
226
|
+
return hasSameReplyDirective(promptDirective, persistedDirective) ? promptDirective : undefined;
|
|
227
|
+
}
|
|
85
228
|
async function shouldSuppressInterDialogReplyGuidanceForUserInterjection(args) {
|
|
86
229
|
// WARNING:
|
|
87
230
|
// This suppression decision is not a cosmetic prompt tweak. It is one leg of the full
|
|
@@ -126,13 +269,34 @@ async function shouldSuppressInterDialogReplyGuidanceForUserInterjection(args) {
|
|
|
126
269
|
async function resolvePromptReplyGuidance(args) {
|
|
127
270
|
const prompt = args.prompt;
|
|
128
271
|
const isQ4HAnswerPrompt = typeof prompt?.q4hAnswerCallId === 'string' && prompt.q4hAnswerCallId.trim() !== '';
|
|
272
|
+
const latest = await persistence_1.DialogPersistence.loadDialogLatest(args.dlg.id, args.dlg.status);
|
|
273
|
+
const persistedCurrentSubdialogAssignmentDirective = await resolveFreshCurrentSubdialogAssignmentDirective({
|
|
274
|
+
dlg: args.dlg,
|
|
275
|
+
prompt,
|
|
276
|
+
});
|
|
277
|
+
const persistedPendingAskBackReplyDirective = await resolveFreshPendingAskBackReplyDirective({
|
|
278
|
+
dlg: args.dlg,
|
|
279
|
+
prompt,
|
|
280
|
+
});
|
|
281
|
+
const persistedPendingCourseStartDirective = prompt !== undefined &&
|
|
282
|
+
latest?.pendingCourseStartPrompt?.msgId === prompt.msgId &&
|
|
283
|
+
latest.pendingCourseStartPrompt.origin === 'runtime'
|
|
284
|
+
? latest.pendingCourseStartPrompt.tellaskReplyDirective
|
|
285
|
+
: undefined;
|
|
286
|
+
const persistedActiveReplyDirective = persistedCurrentSubdialogAssignmentDirective ??
|
|
287
|
+
persistedPendingAskBackReplyDirective ??
|
|
288
|
+
persistedPendingCourseStartDirective ??
|
|
289
|
+
(await (0, tellask_special_1.loadLatestActiveTellaskReplyDirective)(args.dlg));
|
|
129
290
|
const suppressInterDialogReplyGuidance = isQ4HAnswerPrompt
|
|
130
291
|
? false
|
|
131
292
|
: await shouldSuppressInterDialogReplyGuidanceForUserInterjection({
|
|
132
293
|
dlg: args.dlg,
|
|
133
294
|
prompt,
|
|
134
295
|
});
|
|
135
|
-
const availableReplyDirective =
|
|
296
|
+
const availableReplyDirective = resolveFreshReplyDirective({
|
|
297
|
+
promptDirective: prompt?.tellaskReplyDirective,
|
|
298
|
+
persistedDirective: persistedActiveReplyDirective,
|
|
299
|
+
});
|
|
136
300
|
const activeReplyDirective = suppressInterDialogReplyGuidance
|
|
137
301
|
? undefined
|
|
138
302
|
: availableReplyDirective;
|
|
@@ -153,7 +317,10 @@ async function resolvePromptReplyGuidance(args) {
|
|
|
153
317
|
: undefined,
|
|
154
318
|
isQ4HAnswerPrompt,
|
|
155
319
|
promptContent,
|
|
156
|
-
persistedTellaskReplyDirective:
|
|
320
|
+
persistedTellaskReplyDirective: resolvePromptPersistedReplyDirective({
|
|
321
|
+
promptDirective: prompt?.tellaskReplyDirective,
|
|
322
|
+
persistedDirective: persistedActiveReplyDirective,
|
|
323
|
+
}),
|
|
157
324
|
suppressInterDialogReplyGuidance,
|
|
158
325
|
transientGuideContent: suppressInterDialogReplyGuidance && prompt !== undefined
|
|
159
326
|
? buildReplyObligationSuppressionGuide({
|