dominds 1.8.2 → 1.8.4

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.
Files changed (154) hide show
  1. package/dist/apps/run-control.js +21 -4
  2. package/dist/apps/runtime.js +66 -24
  3. package/dist/dialog.js +23 -1
  4. package/dist/docs/app-constitution.md +3 -1
  5. package/dist/docs/app-constitution.zh.md +3 -1
  6. package/dist/docs/dialog-system.zh.md +5 -5
  7. package/dist/llm/kernel-driver/context.js +2 -31
  8. package/dist/llm/kernel-driver/drive.js +6 -8
  9. package/dist/llm/kernel-driver/subdialog.js +8 -0
  10. package/dist/minds/system-prompt.js +2 -2
  11. package/dist/priming.js +4 -0
  12. package/dist/server/websocket-handler.js +16 -0
  13. package/dist/server.js +7 -2
  14. package/dist/shared/diligence.js +2 -2
  15. package/dist/shared/i18n/driver-messages.js +47 -7
  16. package/dist/static/assets/{_basePickBy-DOCpneO0.js → _basePickBy-b79Z8z7v.js} +3 -3
  17. package/dist/static/assets/{_basePickBy-DOCpneO0.js.map → _basePickBy-b79Z8z7v.js.map} +1 -1
  18. package/dist/static/assets/{_baseUniq-DBZLqTK1.js → _baseUniq-EKRe-CHy.js} +2 -2
  19. package/dist/static/assets/{_baseUniq-DBZLqTK1.js.map → _baseUniq-EKRe-CHy.js.map} +1 -1
  20. package/dist/static/assets/{arc-Dw9YkyBZ.js → arc-CBReIrdk.js} +2 -2
  21. package/dist/static/assets/{arc-Dw9YkyBZ.js.map → arc-CBReIrdk.js.map} +1 -1
  22. package/dist/static/assets/{architectureDiagram-VXUJARFQ-DiXBIlTy.js → architectureDiagram-VXUJARFQ-arl_gJGi.js} +7 -7
  23. package/dist/static/assets/{architectureDiagram-VXUJARFQ-DiXBIlTy.js.map → architectureDiagram-VXUJARFQ-arl_gJGi.js.map} +1 -1
  24. package/dist/static/assets/{blockDiagram-VD42YOAC-CBTqG3TT.js → blockDiagram-VD42YOAC-BvLkPr7Y.js} +7 -7
  25. package/dist/static/assets/{blockDiagram-VD42YOAC-CBTqG3TT.js.map → blockDiagram-VD42YOAC-BvLkPr7Y.js.map} +1 -1
  26. package/dist/static/assets/{c4Diagram-YG6GDRKO-CKltdqcg.js → c4Diagram-YG6GDRKO-DLQB9QIV.js} +3 -3
  27. package/dist/static/assets/{c4Diagram-YG6GDRKO-CKltdqcg.js.map → c4Diagram-YG6GDRKO-DLQB9QIV.js.map} +1 -1
  28. package/dist/static/assets/{channel-CsfA5ddv.js → channel-C-1aKDRA.js} +2 -2
  29. package/dist/static/assets/{channel-CsfA5ddv.js.map → channel-C-1aKDRA.js.map} +1 -1
  30. package/dist/static/assets/{chunk-4BX2VUAB-BCdL9ibi.js → chunk-4BX2VUAB-guy7Bw0c.js} +2 -2
  31. package/dist/static/assets/{chunk-4BX2VUAB-BCdL9ibi.js.map → chunk-4BX2VUAB-guy7Bw0c.js.map} +1 -1
  32. package/dist/static/assets/{chunk-55IACEB6-CcKnxlqS.js → chunk-55IACEB6-CPekYUDl.js} +2 -2
  33. package/dist/static/assets/{chunk-55IACEB6-CcKnxlqS.js.map → chunk-55IACEB6-CPekYUDl.js.map} +1 -1
  34. package/dist/static/assets/{chunk-B4BG7PRW-BnypOYYo.js → chunk-B4BG7PRW-C7_VGVGd.js} +5 -5
  35. package/dist/static/assets/{chunk-B4BG7PRW-BnypOYYo.js.map → chunk-B4BG7PRW-C7_VGVGd.js.map} +1 -1
  36. package/dist/static/assets/{chunk-DI55MBZ5-BGYHpvhR.js → chunk-DI55MBZ5-B7Z_kPEp.js} +4 -4
  37. package/dist/static/assets/{chunk-DI55MBZ5-BGYHpvhR.js.map → chunk-DI55MBZ5-B7Z_kPEp.js.map} +1 -1
  38. package/dist/static/assets/{chunk-FMBD7UC4-Crf0Br1R.js → chunk-FMBD7UC4-CNyLnVLQ.js} +2 -2
  39. package/dist/static/assets/{chunk-FMBD7UC4-Crf0Br1R.js.map → chunk-FMBD7UC4-CNyLnVLQ.js.map} +1 -1
  40. package/dist/static/assets/{chunk-QN33PNHL-Cg1EQYdQ.js → chunk-QN33PNHL-De0KQ1wi.js} +2 -2
  41. package/dist/static/assets/{chunk-QN33PNHL-Cg1EQYdQ.js.map → chunk-QN33PNHL-De0KQ1wi.js.map} +1 -1
  42. package/dist/static/assets/{chunk-QZHKN3VN-DRH7UNkC.js → chunk-QZHKN3VN-DsfWQPDD.js} +2 -2
  43. package/dist/static/assets/{chunk-QZHKN3VN-DRH7UNkC.js.map → chunk-QZHKN3VN-DsfWQPDD.js.map} +1 -1
  44. package/dist/static/assets/{chunk-TZMSLE5B-CaZqBdnu.js → chunk-TZMSLE5B-BGHvMn1A.js} +2 -2
  45. package/dist/static/assets/{chunk-TZMSLE5B-CaZqBdnu.js.map → chunk-TZMSLE5B-BGHvMn1A.js.map} +1 -1
  46. package/dist/static/assets/{classDiagram-2ON5EDUG-DSsG0iFI.js → classDiagram-2ON5EDUG-JmOuUZWB.js} +6 -6
  47. package/dist/static/assets/{classDiagram-2ON5EDUG-DSsG0iFI.js.map → classDiagram-2ON5EDUG-JmOuUZWB.js.map} +1 -1
  48. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-DSsG0iFI.js → classDiagram-v2-WZHVMYZB-JmOuUZWB.js} +6 -6
  49. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-DSsG0iFI.js.map → classDiagram-v2-WZHVMYZB-JmOuUZWB.js.map} +1 -1
  50. package/dist/static/assets/{clone-xhbAL4G8.js → clone-bFKUwLh9.js} +2 -2
  51. package/dist/static/assets/{clone-xhbAL4G8.js.map → clone-bFKUwLh9.js.map} +1 -1
  52. package/dist/static/assets/{cose-bilkent-S5V4N54A-B7Rtmhjt.js → cose-bilkent-S5V4N54A-B-TrWbLI.js} +2 -2
  53. package/dist/static/assets/{cose-bilkent-S5V4N54A-B7Rtmhjt.js.map → cose-bilkent-S5V4N54A-B-TrWbLI.js.map} +1 -1
  54. package/dist/static/assets/{dagre-6UL2VRFP-BkqhLTnX.js → dagre-6UL2VRFP-eFdBPojd.js} +7 -7
  55. package/dist/static/assets/{dagre-6UL2VRFP-BkqhLTnX.js.map → dagre-6UL2VRFP-eFdBPojd.js.map} +1 -1
  56. package/dist/static/assets/{diagram-PSM6KHXK-CZKtGq3a.js → diagram-PSM6KHXK-CG-pEDnm.js} +8 -8
  57. package/dist/static/assets/{diagram-PSM6KHXK-CZKtGq3a.js.map → diagram-PSM6KHXK-CG-pEDnm.js.map} +1 -1
  58. package/dist/static/assets/{diagram-QEK2KX5R-CnMVuAHl.js → diagram-QEK2KX5R-DIMTH7OH.js} +7 -7
  59. package/dist/static/assets/{diagram-QEK2KX5R-CnMVuAHl.js.map → diagram-QEK2KX5R-DIMTH7OH.js.map} +1 -1
  60. package/dist/static/assets/{diagram-S2PKOQOG-CeSf7JXc.js → diagram-S2PKOQOG-CtsocJ3s.js} +7 -7
  61. package/dist/static/assets/{diagram-S2PKOQOG-CeSf7JXc.js.map → diagram-S2PKOQOG-CtsocJ3s.js.map} +1 -1
  62. package/dist/static/assets/{erDiagram-Q2GNP2WA-CSt8_Jg8.js → erDiagram-Q2GNP2WA-DE2fcc5h.js} +5 -5
  63. package/dist/static/assets/{erDiagram-Q2GNP2WA-CSt8_Jg8.js.map → erDiagram-Q2GNP2WA-DE2fcc5h.js.map} +1 -1
  64. package/dist/static/assets/{flowDiagram-NV44I4VS-D5Ml-CXN.js → flowDiagram-NV44I4VS-CRmxnCqy.js} +6 -6
  65. package/dist/static/assets/{flowDiagram-NV44I4VS-D5Ml-CXN.js.map → flowDiagram-NV44I4VS-CRmxnCqy.js.map} +1 -1
  66. package/dist/static/assets/{ganttDiagram-JELNMOA3-CyMWbWsa.js → ganttDiagram-JELNMOA3-MIOIERui.js} +3 -3
  67. package/dist/static/assets/{ganttDiagram-JELNMOA3-CyMWbWsa.js.map → ganttDiagram-JELNMOA3-MIOIERui.js.map} +1 -1
  68. package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-vl516Is8.js → gitGraphDiagram-V2S2FVAM-crIYDBIk.js} +8 -8
  69. package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-vl516Is8.js.map → gitGraphDiagram-V2S2FVAM-crIYDBIk.js.map} +1 -1
  70. package/dist/static/assets/{graph-BGZ_sL_x.js → graph-CB0VmlGP.js} +3 -3
  71. package/dist/static/assets/{graph-BGZ_sL_x.js.map → graph-CB0VmlGP.js.map} +1 -1
  72. package/dist/static/assets/{index-C-RsyM0K.js → index-CzBEs1w4.js} +53 -35
  73. package/dist/static/assets/{index-C-RsyM0K.js.map → index-CzBEs1w4.js.map} +1 -1
  74. package/dist/static/assets/{infoDiagram-HS3SLOUP-6wx0LbHY.js → infoDiagram-HS3SLOUP-CnsCAuJf.js} +6 -6
  75. package/dist/static/assets/{infoDiagram-HS3SLOUP-6wx0LbHY.js.map → infoDiagram-HS3SLOUP-CnsCAuJf.js.map} +1 -1
  76. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-YPjC-r77.js → journeyDiagram-XKPGCS4Q-BtzLS-NC.js} +5 -5
  77. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-YPjC-r77.js.map → journeyDiagram-XKPGCS4Q-BtzLS-NC.js.map} +1 -1
  78. package/dist/static/assets/{kanban-definition-3W4ZIXB7-DlG-ZWTO.js → kanban-definition-3W4ZIXB7-CwykQ3vY.js} +3 -3
  79. package/dist/static/assets/{kanban-definition-3W4ZIXB7-DlG-ZWTO.js.map → kanban-definition-3W4ZIXB7-CwykQ3vY.js.map} +1 -1
  80. package/dist/static/assets/{layout-BZJKhYY3.js → layout-Cu6uuh5P.js} +5 -5
  81. package/dist/static/assets/{layout-BZJKhYY3.js.map → layout-Cu6uuh5P.js.map} +1 -1
  82. package/dist/static/assets/{linear-Bau37zh5.js → linear-BXsc4B31.js} +2 -2
  83. package/dist/static/assets/{linear-Bau37zh5.js.map → linear-BXsc4B31.js.map} +1 -1
  84. package/dist/static/assets/{mindmap-definition-VGOIOE7T-n2WXgX4b.js → mindmap-definition-VGOIOE7T-BtD61cN8.js} +4 -4
  85. package/dist/static/assets/{mindmap-definition-VGOIOE7T-n2WXgX4b.js.map → mindmap-definition-VGOIOE7T-BtD61cN8.js.map} +1 -1
  86. package/dist/static/assets/{pieDiagram-ADFJNKIX-DgW7FkI4.js → pieDiagram-ADFJNKIX-B2EbMDmb.js} +8 -8
  87. package/dist/static/assets/{pieDiagram-ADFJNKIX-DgW7FkI4.js.map → pieDiagram-ADFJNKIX-B2EbMDmb.js.map} +1 -1
  88. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-BtsDjIpC.js → quadrantDiagram-AYHSOK5B-BwYvMil1.js} +3 -3
  89. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-BtsDjIpC.js.map → quadrantDiagram-AYHSOK5B-BwYvMil1.js.map} +1 -1
  90. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-DPzuPEge.js → requirementDiagram-UZGBJVZJ-syDAMAIY.js} +4 -4
  91. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-DPzuPEge.js.map → requirementDiagram-UZGBJVZJ-syDAMAIY.js.map} +1 -1
  92. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-BJS1ETtL.js → sankeyDiagram-TZEHDZUN-ifN71SAO.js} +2 -2
  93. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-BJS1ETtL.js.map → sankeyDiagram-TZEHDZUN-ifN71SAO.js.map} +1 -1
  94. package/dist/static/assets/{sequenceDiagram-WL72ISMW-DXEpa4ly.js → sequenceDiagram-WL72ISMW-ytS-PG6f.js} +4 -4
  95. package/dist/static/assets/{sequenceDiagram-WL72ISMW-DXEpa4ly.js.map → sequenceDiagram-WL72ISMW-ytS-PG6f.js.map} +1 -1
  96. package/dist/static/assets/{stateDiagram-FKZM4ZOC-CGU6VJY5.js → stateDiagram-FKZM4ZOC-BICTjIiL.js} +9 -9
  97. package/dist/static/assets/{stateDiagram-FKZM4ZOC-CGU6VJY5.js.map → stateDiagram-FKZM4ZOC-BICTjIiL.js.map} +1 -1
  98. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Dx_GvlFA.js → stateDiagram-v2-4FDKWEC3-BD67hjdo.js} +5 -5
  99. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Dx_GvlFA.js.map → stateDiagram-v2-4FDKWEC3-BD67hjdo.js.map} +1 -1
  100. package/dist/static/assets/{timeline-definition-IT6M3QCI-DcWLmdgJ.js → timeline-definition-IT6M3QCI-Bn4PeFHS.js} +3 -3
  101. package/dist/static/assets/{timeline-definition-IT6M3QCI-DcWLmdgJ.js.map → timeline-definition-IT6M3QCI-Bn4PeFHS.js.map} +1 -1
  102. package/dist/static/assets/{treemap-GDKQZRPO-BhUwKF9C.js → treemap-GDKQZRPO-C-_A6aNF.js} +5 -5
  103. package/dist/static/assets/{treemap-GDKQZRPO-BhUwKF9C.js.map → treemap-GDKQZRPO-C-_A6aNF.js.map} +1 -1
  104. package/dist/static/assets/{xychartDiagram-PRI3JC2R-Cr4t0oCq.js → xychartDiagram-PRI3JC2R-BaUb_VjF.js} +3 -3
  105. package/dist/static/assets/{xychartDiagram-PRI3JC2R-Cr4t0oCq.js.map → xychartDiagram-PRI3JC2R-BaUb_VjF.js.map} +1 -1
  106. package/dist/static/index.html +1 -1
  107. package/dist/tools/pending-tellask-reminder.js +2 -2
  108. package/dist/tools/prompts/team_mgmt/en/errors.md +6 -0
  109. package/dist/tools/prompts/team_mgmt/zh/errors.md +6 -0
  110. package/dist/tools/team_mgmt.js +29 -0
  111. package/package.json +1 -1
  112. package/dist/apps/installed-file.js +0 -207
  113. package/dist/apps/runtime-port.js +0 -91
  114. package/dist/docs/kernel-app-architecture.md +0 -286
  115. package/dist/docs/kernel-app-architecture.zh.md +0 -285
  116. package/dist/llm/driver-entry.js +0 -28
  117. package/dist/llm/driver-v2/context-health.js +0 -121
  118. package/dist/llm/driver-v2/context.js +0 -56
  119. package/dist/llm/driver-v2/core.js +0 -1545
  120. package/dist/llm/driver-v2/index.js +0 -26
  121. package/dist/llm/driver-v2/orchestrator.js +0 -158
  122. package/dist/llm/driver-v2/policy.js +0 -129
  123. package/dist/llm/driver-v2/restore-dialog-hierarchy.js +0 -73
  124. package/dist/llm/driver-v2/round.js +0 -366
  125. package/dist/llm/driver-v2/runtime-utils.js +0 -365
  126. package/dist/llm/driver-v2/saying-events.js +0 -20
  127. package/dist/llm/driver-v2/subdialog-txn.js +0 -42
  128. package/dist/llm/driver-v2/supdialog-response.js +0 -400
  129. package/dist/llm/driver-v2/tellask-bridge.js +0 -1148
  130. package/dist/llm/driver-v2/types.js +0 -10
  131. package/dist/llm/driver-v2-ref-only/context-health.js +0 -121
  132. package/dist/llm/driver-v2-ref-only/context.js +0 -17
  133. package/dist/llm/driver-v2-ref-only/core.js +0 -1710
  134. package/dist/llm/driver-v2-ref-only/index.js +0 -26
  135. package/dist/llm/driver-v2-ref-only/orchestrator.js +0 -158
  136. package/dist/llm/driver-v2-ref-only/policy.js +0 -129
  137. package/dist/llm/driver-v2-ref-only/restore-dialog-hierarchy.js +0 -73
  138. package/dist/llm/driver-v2-ref-only/round.js +0 -366
  139. package/dist/llm/driver-v2-ref-only/runtime-utils.js +0 -473
  140. package/dist/llm/driver-v2-ref-only/saying-events.js +0 -18
  141. package/dist/llm/driver-v2-ref-only/subdialog-txn.js +0 -42
  142. package/dist/llm/driver-v2-ref-only/supdialog-response.js +0 -453
  143. package/dist/llm/driver-v2-ref-only/tellask-bridge.js +0 -1178
  144. package/dist/llm/driver-v2-ref-only/types.js +0 -10
  145. package/dist/tools/prompts/memory/en/errors.md +0 -155
  146. package/dist/tools/prompts/memory/en/index.md +0 -47
  147. package/dist/tools/prompts/memory/en/principles.md +0 -79
  148. package/dist/tools/prompts/memory/en/scenarios.md +0 -174
  149. package/dist/tools/prompts/memory/en/tools.md +0 -154
  150. package/dist/tools/prompts/memory/zh/errors.md +0 -155
  151. package/dist/tools/prompts/memory/zh/index.md +0 -47
  152. package/dist/tools/prompts/memory/zh/principles.md +0 -79
  153. package/dist/tools/prompts/memory/zh/scenarios.md +0 -174
  154. package/dist/tools/prompts/memory/zh/tools.md +0 -154
@@ -1,400 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.supplyResponseToSupdialogV2 = supplyResponseToSupdialogV2;
4
- exports.supplySubdialogResponseToSpecificCallerIfPendingV2 = supplySubdialogResponseToSpecificCallerIfPendingV2;
5
- exports.supplySubdialogResponseToAssignedCallerIfPendingV2 = supplySubdialogResponseToAssignedCallerIfPendingV2;
6
- const dialog_1 = require("../../dialog");
7
- const dialog_global_registry_1 = require("../../dialog-global-registry");
8
- const dialog_instance_registry_1 = require("../../dialog-instance-registry");
9
- const log_1 = require("../../log");
10
- const persistence_1 = require("../../persistence");
11
- const time_1 = require("../../shared/utils/time");
12
- const pending_tellask_reminder_1 = require("../../tools/pending-tellask-reminder");
13
- const subdialog_txn_1 = require("./subdialog-txn");
14
- async function syncPendingTellaskReminderBestEffort(dlg, where) {
15
- try {
16
- const changed = await (0, pending_tellask_reminder_1.syncPendingTellaskReminderState)(dlg);
17
- if (!changed)
18
- return;
19
- await dlg.processReminderUpdates();
20
- }
21
- catch (err) {
22
- log_1.log.warn('Failed to sync pending tellask reminder', undefined, {
23
- where,
24
- dialogId: dlg.id.selfId,
25
- rootId: dlg.id.rootId,
26
- error: err instanceof Error ? err.message : String(err),
27
- });
28
- }
29
- }
30
- function buildFbrRelayPayload(subdialog, finalResponseText) {
31
- const language = subdialog.getLastUserLanguageCode();
32
- const isZh = language === 'zh';
33
- const roundSayingMsgs = subdialog.msgs
34
- .filter((msg) => msg.type === 'saying_msg')
35
- .map((msg) => msg.content)
36
- .filter((content) => content.trim() !== '')
37
- .map((content, idx) => ({
38
- idx,
39
- content,
40
- }));
41
- if (roundSayingMsgs.length <= 1) {
42
- return `${finalResponseText}\n\n${buildFbrDistillPrompt(language)}`;
43
- }
44
- const roundsText = roundSayingMsgs
45
- .map((entry) => `### ${isZh ? `FBR 第 ${entry.idx + 1} 轮` : `FBR Round ${entry.idx + 1}`}\n${entry.content}`)
46
- .join('\n\n');
47
- const allRoundPayload = isZh
48
- ? `## FBR 全量回帖(按轮次)\n\n${roundsText}`
49
- : `## FBR Full Conclusions (by round)\n\n${roundsText}`;
50
- return `${allRoundPayload}\n\n${buildFbrDistillPrompt(language)}`;
51
- }
52
- function buildFbrDistillPrompt(language) {
53
- if (language === 'zh') {
54
- return `## 提示上游:收到全量回帖后请提炼\n\n以上为该次 FBR 的全量结论,包含全部轮次。上游请在收到这条全量回帖后进行综合提炼(distill),形成可执行项与决策后立即执行;若需要人类澄清/授权/决策,立即发起 \`askHuman\`。`;
55
- }
56
- return `## Upstream Distill Note\n\nThe text above is the full FBR output for this run, containing all rounds. After receiving this full reply, distill the full set and execute immediately once actionable decisions are formed; if human clarification/authorization/decision is required, issue \`askHuman\` immediately.`;
57
- }
58
- async function resolveOwnerDialogBySelfId(subdialog, ownerDialogId) {
59
- const rootDialog = subdialog.rootDialog;
60
- if (!(await ensureDialogFreshOrDiscard(rootDialog, 'resolveOwnerDialogBySelfId:root'))) {
61
- return undefined;
62
- }
63
- if (ownerDialogId === rootDialog.id.selfId) {
64
- return rootDialog;
65
- }
66
- const existing = rootDialog.lookupDialog(ownerDialogId);
67
- if (existing) {
68
- if (!(await ensureDialogFreshOrDiscard(existing, 'resolveOwnerDialogBySelfId:lookup'))) {
69
- return undefined;
70
- }
71
- return existing;
72
- }
73
- const restored = await (0, dialog_instance_registry_1.ensureDialogLoaded)(rootDialog, new dialog_1.DialogID(ownerDialogId, rootDialog.id.rootId), rootDialog.status);
74
- if (!restored) {
75
- return undefined;
76
- }
77
- if (!(await ensureDialogFreshOrDiscard(restored, 'resolveOwnerDialogBySelfId:restore'))) {
78
- return undefined;
79
- }
80
- return restored;
81
- }
82
- async function ensureDialogFreshOrDiscard(dialog, where) {
83
- try {
84
- const metadata = await persistence_1.DialogPersistence.loadDialogMetadata(dialog.id, dialog.status);
85
- if (metadata) {
86
- return true;
87
- }
88
- }
89
- catch (err) {
90
- log_1.log.warn('driver-v2 failed to verify dialog freshness against persisted status', undefined, {
91
- where,
92
- rootId: dialog.id.rootId,
93
- selfId: dialog.id.selfId,
94
- status: dialog.status,
95
- error: err instanceof Error ? err.message : String(err),
96
- });
97
- }
98
- log_1.log.warn('driver-v2 discarding stale dialog object due to status/path mismatch', undefined, {
99
- where,
100
- rootId: dialog.id.rootId,
101
- selfId: dialog.id.selfId,
102
- status: dialog.status,
103
- });
104
- if (dialog instanceof dialog_1.RootDialog) {
105
- dialog_global_registry_1.globalDialogRegistry.unregister(dialog.id.rootId);
106
- }
107
- return false;
108
- }
109
- async function resolveLatestAssignmentAnchorRef(args) {
110
- const normalizedCallId = args.callId.trim();
111
- if (normalizedCallId === '') {
112
- return undefined;
113
- }
114
- const latest = await persistence_1.DialogPersistence.loadDialogLatest(args.calleeDialogId, args.status);
115
- if (!latest) {
116
- return undefined;
117
- }
118
- const maxCourse = Math.floor(latest.currentCourse);
119
- for (let course = maxCourse; course >= 1; course -= 1) {
120
- const courseEvents = await persistence_1.DialogPersistence.loadCourseEvents(args.calleeDialogId, course, args.status);
121
- for (let i = courseEvents.length - 1; i >= 0; i -= 1) {
122
- const event = courseEvents[i];
123
- if (event.type !== 'teammate_call_anchor_record') {
124
- continue;
125
- }
126
- if (event.anchorRole !== 'assignment') {
127
- continue;
128
- }
129
- if (event.callId.trim() !== normalizedCallId) {
130
- continue;
131
- }
132
- if (!Number.isFinite(event.genseq) || event.genseq <= 0) {
133
- continue;
134
- }
135
- return { course, genseq: Math.floor(event.genseq) };
136
- }
137
- }
138
- return undefined;
139
- }
140
- async function supplyResponseToSupdialogV2(args) {
141
- const { parentDialog, subdialogId, responseText, callType, callId, status = 'completed', calleeResponseRef, scheduleDrive, subdialog: maybeSubdialog, } = args;
142
- try {
143
- const result = await (0, subdialog_txn_1.withSubdialogTxnLock)(parentDialog.id, async () => {
144
- const pendingSubdialogs = await persistence_1.DialogPersistence.loadPendingSubdialogs(parentDialog.id, parentDialog.status);
145
- let pendingRecord;
146
- const filteredPending = [];
147
- for (const pending of pendingSubdialogs) {
148
- if (pending.subdialogId === subdialogId.selfId) {
149
- pendingRecord = pending;
150
- }
151
- else {
152
- filteredPending.push(pending);
153
- }
154
- }
155
- let responderId = subdialogId.rootId;
156
- let responderAgentId;
157
- let callName = 'tellaskSessionless';
158
- let mentionList;
159
- let tellaskContent = responseText;
160
- let originMemberId;
161
- try {
162
- const metadata = await persistence_1.DialogPersistence.loadDialogMetadata(subdialogId, parentDialog.status);
163
- if (metadata && metadata.assignmentFromSup) {
164
- originMemberId = metadata.assignmentFromSup.originMemberId;
165
- if (!pendingRecord) {
166
- callName = metadata.assignmentFromSup.callName;
167
- mentionList = metadata.assignmentFromSup.mentionList;
168
- tellaskContent = metadata.assignmentFromSup.tellaskContent;
169
- }
170
- }
171
- if (!pendingRecord && metadata && typeof metadata.agentId === 'string') {
172
- if (metadata.agentId.trim() !== '') {
173
- responderId = metadata.agentId;
174
- responderAgentId = metadata.agentId;
175
- }
176
- }
177
- }
178
- catch (err) {
179
- log_1.log.warn('Failed to load subdialog metadata for response record', undefined, {
180
- parentId: parentDialog.id.selfId,
181
- subdialogId: subdialogId.selfId,
182
- error: err,
183
- });
184
- }
185
- if (!originMemberId) {
186
- originMemberId = parentDialog.agentId;
187
- }
188
- if (pendingRecord) {
189
- callName = pendingRecord.callName;
190
- responderId = pendingRecord.targetAgentId;
191
- responderAgentId = pendingRecord.targetAgentId;
192
- mentionList = pendingRecord.mentionList;
193
- tellaskContent = pendingRecord.tellaskContent;
194
- }
195
- if ((callName === 'tellask' || callName === 'tellaskSessionless') &&
196
- (!Array.isArray(mentionList) || mentionList.length < 1)) {
197
- mentionList = [`@${responderId}`];
198
- }
199
- await persistence_1.DialogPersistence.savePendingSubdialogs(parentDialog.id, filteredPending, parentDialog.status);
200
- const hasQ4H = await parentDialog.hasPendingQ4H();
201
- const shouldRevive = !hasQ4H && filteredPending.length === 0;
202
- if (shouldRevive && parentDialog instanceof dialog_1.RootDialog) {
203
- await persistence_1.DialogPersistence.setNeedsDrive(parentDialog.id, true, parentDialog.status);
204
- }
205
- return {
206
- responderId,
207
- responderAgentId,
208
- callName,
209
- mentionList,
210
- tellaskContent,
211
- originMemberId,
212
- callId: pendingRecord?.callId,
213
- callingCourse: pendingRecord &&
214
- typeof pendingRecord.callingCourse === 'number' &&
215
- Number.isFinite(pendingRecord.callingCourse) &&
216
- pendingRecord.callingCourse > 0
217
- ? Math.floor(pendingRecord.callingCourse)
218
- : undefined,
219
- shouldRevive,
220
- };
221
- });
222
- const normalizedCallId = typeof callId === 'string' ? callId.trim() : '';
223
- const fallbackCallId = typeof result.callId === 'string' ? result.callId.trim() : '';
224
- const resolvedCallId = normalizedCallId !== '' ? normalizedCallId : fallbackCallId;
225
- const rootForLookup = parentDialog instanceof dialog_1.RootDialog
226
- ? parentDialog
227
- : parentDialog instanceof dialog_1.SubDialog
228
- ? parentDialog.rootDialog
229
- : undefined;
230
- const resolvedSubdialog = maybeSubdialog ?? rootForLookup?.lookupDialog(subdialogId.selfId);
231
- const shouldReportFbrUpstream = callType === 'C' &&
232
- result.callName === 'freshBootsReasoning' &&
233
- resolvedSubdialog !== undefined;
234
- const upstreamResponseText = shouldReportFbrUpstream
235
- ? buildFbrRelayPayload(resolvedSubdialog, responseText)
236
- : responseText;
237
- if (resolvedCallId !== '' && calleeResponseRef) {
238
- const assignmentRef = await resolveLatestAssignmentAnchorRef({
239
- calleeDialogId: subdialogId,
240
- callId: resolvedCallId,
241
- status: parentDialog.status,
242
- });
243
- if (!assignmentRef) {
244
- log_1.log.error('Missing assignment anchor for teammate response anchor', undefined, {
245
- parentId: parentDialog.id.selfId,
246
- subdialogId: subdialogId.selfId,
247
- callId: resolvedCallId,
248
- responseCourse: calleeResponseRef.course,
249
- responseGenseq: calleeResponseRef.genseq,
250
- });
251
- }
252
- const anchorRecord = {
253
- ts: (0, time_1.formatUnifiedTimestamp)(new Date()),
254
- type: 'teammate_call_anchor_record',
255
- anchorRole: 'response',
256
- callId: resolvedCallId,
257
- genseq: calleeResponseRef.genseq,
258
- assignmentCourse: assignmentRef?.course,
259
- assignmentGenseq: assignmentRef?.genseq,
260
- callerDialogId: parentDialog.id.selfId,
261
- callerCourse: result.callingCourse,
262
- };
263
- await persistence_1.DialogPersistence.appendEvent(subdialogId, calleeResponseRef.course, anchorRecord, parentDialog.status);
264
- }
265
- await syncPendingTellaskReminderBestEffort(parentDialog, 'driver-v2:supplyResponseToSupdialog');
266
- await parentDialog.receiveTeammateResponse(result.responderId, result.callName, result.mentionList, result.tellaskContent, status, subdialogId, {
267
- response: upstreamResponseText,
268
- agentId: result.responderAgentId ?? result.responderId,
269
- callId: resolvedCallId,
270
- originMemberId: result.originMemberId ?? parentDialog.agentId,
271
- calleeCourse: calleeResponseRef?.course,
272
- calleeGenseq: calleeResponseRef?.genseq,
273
- });
274
- // Keep in-memory dialog context in sync with live teammate-response events immediately.
275
- // v2 context assembly now relies on dialog msgs + persisted teammate_response_record only.
276
- const immediateMirror = {
277
- type: 'tellask_result_msg',
278
- role: 'tool',
279
- responderId: result.responderId,
280
- mentionList: result.mentionList,
281
- tellaskContent: result.tellaskContent,
282
- status,
283
- callId: resolvedCallId,
284
- content: upstreamResponseText,
285
- };
286
- await parentDialog.addChatMessages(immediateMirror);
287
- if (result.shouldRevive) {
288
- const isRoot = parentDialog instanceof dialog_1.RootDialog;
289
- const hasRegistryEntry = isRoot
290
- ? dialog_global_registry_1.globalDialogRegistry.get(parentDialog.id.rootId) !== undefined
291
- : false;
292
- log_1.log.debug(`All Type ${callType} subdialogs complete, parent ${parentDialog.id.selfId} scheduling auto-revive`, undefined, {
293
- rootId: parentDialog.id.rootId,
294
- selfId: parentDialog.id.selfId,
295
- via: isRoot && hasRegistryEntry ? 'backend_loop_trigger' : 'direct_schedule_drive',
296
- isRoot,
297
- hasRegistryEntry,
298
- });
299
- if (isRoot) {
300
- dialog_global_registry_1.globalDialogRegistry.markNeedsDrive(parentDialog.id.rootId, {
301
- source: 'driver_v2_supply_response',
302
- reason: `all_pending_subdialogs_resolved:type_${callType}`,
303
- });
304
- }
305
- // Root dialogs should normally be resumed by backend loop drive-trigger.
306
- // Direct schedule is kept only as fallback for non-root callers or when registry
307
- // entry is not available yet (e.g., transient bootstrap windows).
308
- if (!isRoot || !hasRegistryEntry) {
309
- scheduleDrive(parentDialog, {
310
- waitInQue: true,
311
- driveOptions: { suppressDiligencePush: parentDialog.disableDiligencePush },
312
- });
313
- }
314
- }
315
- }
316
- catch (error) {
317
- log_1.log.error('driver-v2 failed to supply subdialog response', error, {
318
- parentId: parentDialog.id.selfId,
319
- subdialogId: subdialogId.selfId,
320
- });
321
- throw error;
322
- }
323
- }
324
- async function supplySubdialogResponseToSpecificCallerIfPendingV2(args) {
325
- const { subdialog, responseText, responseGenseq, target, scheduleDrive } = args;
326
- const assignment = subdialog.assignmentFromSup;
327
- if (!assignment) {
328
- return false;
329
- }
330
- const ownerDialog = await resolveOwnerDialogBySelfId(subdialog, target.ownerDialogId);
331
- if (!ownerDialog) {
332
- return false;
333
- }
334
- if (!(await ensureDialogFreshOrDiscard(ownerDialog, 'supplySubdialogResponseToSpecificCallerIfPendingV2:owner'))) {
335
- return false;
336
- }
337
- const pending = await persistence_1.DialogPersistence.loadPendingSubdialogs(ownerDialog.id, ownerDialog.status);
338
- const pendingRecord = pending.find((p) => p.subdialogId === subdialog.id.selfId);
339
- if (!pendingRecord) {
340
- return false;
341
- }
342
- if (pendingRecord.callType !== target.callType) {
343
- log_1.log.warn('Reply target callType does not match pending callType; skipping stale reply target', undefined, {
344
- rootId: subdialog.rootDialog.id.rootId,
345
- subdialogId: subdialog.id.selfId,
346
- ownerDialogId: ownerDialog.id.selfId,
347
- targetCallType: target.callType,
348
- pendingCallType: pendingRecord.callType,
349
- });
350
- return false;
351
- }
352
- await supplyResponseToSupdialogV2({
353
- parentDialog: ownerDialog,
354
- subdialogId: subdialog.id,
355
- responseText,
356
- subdialog,
357
- callType: pendingRecord.callType,
358
- callId: target.callId,
359
- status: 'completed',
360
- calleeResponseRef: { course: subdialog.currentCourse, genseq: responseGenseq },
361
- scheduleDrive,
362
- });
363
- return true;
364
- }
365
- async function supplySubdialogResponseToAssignedCallerIfPendingV2(args) {
366
- const { subdialog, responseText, responseGenseq, scheduleDrive } = args;
367
- const assignment = subdialog.assignmentFromSup;
368
- if (!assignment) {
369
- return false;
370
- }
371
- const callerDialog = await resolveOwnerDialogBySelfId(subdialog, assignment.callerDialogId);
372
- if (!callerDialog) {
373
- log_1.log.warn('Missing caller dialog for subdialog response supply', undefined, {
374
- rootId: subdialog.rootDialog.id.rootId,
375
- subdialogId: subdialog.id.selfId,
376
- callerDialogId: assignment.callerDialogId,
377
- });
378
- return false;
379
- }
380
- if (!(await ensureDialogFreshOrDiscard(callerDialog, 'supplySubdialogResponseToAssignedCallerIfPendingV2:caller'))) {
381
- return false;
382
- }
383
- const pending = await persistence_1.DialogPersistence.loadPendingSubdialogs(callerDialog.id, callerDialog.status);
384
- const pendingRecord = pending.find((p) => p.subdialogId === subdialog.id.selfId);
385
- if (!pendingRecord) {
386
- return false;
387
- }
388
- await supplyResponseToSupdialogV2({
389
- parentDialog: callerDialog,
390
- subdialogId: subdialog.id,
391
- responseText,
392
- subdialog,
393
- callType: pendingRecord.callType,
394
- callId: assignment.callId,
395
- status: 'completed',
396
- calleeResponseRef: { course: subdialog.currentCourse, genseq: responseGenseq },
397
- scheduleDrive,
398
- });
399
- return true;
400
- }