dominds 1.18.2 → 1.19.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.
Files changed (277) hide show
  1. package/dist/access-control.js +6 -6
  2. package/dist/apps/runtime.d.ts +2 -2
  3. package/dist/apps/runtime.js +28 -28
  4. package/dist/apps-host/client.d.ts +1 -1
  5. package/dist/apps-host/host.js +7 -7
  6. package/dist/apps-host/ipc-types.d.ts +2 -2
  7. package/dist/apps-host/ipc-types.js +10 -10
  8. package/dist/cli/read.d.ts +0 -1
  9. package/dist/cli/read.js +1 -6
  10. package/dist/dialog-display-state.d.ts +6 -6
  11. package/dist/dialog-display-state.js +46 -46
  12. package/dist/dialog-factory.d.ts +12 -12
  13. package/dist/dialog-factory.js +33 -30
  14. package/dist/dialog-fork.d.ts +2 -2
  15. package/dist/dialog-fork.js +140 -115
  16. package/dist/dialog-global-registry.d.ts +5 -5
  17. package/dist/dialog-global-registry.js +11 -11
  18. package/dist/dialog-instance-registry.d.ts +3 -3
  19. package/dist/dialog-instance-registry.js +52 -41
  20. package/dist/dialog.d.ts +100 -113
  21. package/dist/dialog.js +274 -229
  22. package/dist/docs/agent-priming.md +5 -5
  23. package/dist/docs/agent-priming.zh.md +5 -5
  24. package/dist/docs/app-constitution.md +1 -1
  25. package/dist/docs/app-constitution.zh.md +1 -1
  26. package/dist/docs/cli-usage.md +1 -1
  27. package/dist/docs/cli-usage.zh.md +1 -1
  28. package/dist/docs/design.md +14 -14
  29. package/dist/docs/design.zh.md +14 -14
  30. package/dist/docs/dialog-persistence.md +58 -58
  31. package/dist/docs/dialog-persistence.zh.md +61 -61
  32. package/dist/docs/dialog-system.md +363 -367
  33. package/dist/docs/dialog-system.zh.md +355 -357
  34. package/dist/docs/diligence-push.md +18 -18
  35. package/dist/docs/diligence-push.zh.md +17 -17
  36. package/dist/docs/dominds-agent-collaboration.zh.md +3 -3
  37. package/dist/docs/dominds-terminology.md +46 -47
  38. package/dist/docs/encapsulated-taskdoc.md +4 -4
  39. package/dist/docs/encapsulated-taskdoc.zh.md +3 -3
  40. package/dist/docs/fbr.md +30 -30
  41. package/dist/docs/fbr.zh.md +15 -15
  42. package/dist/docs/i18n.md +2 -2
  43. package/dist/docs/i18n.zh.md +2 -2
  44. package/dist/docs/mcp-support.md +5 -4
  45. package/dist/docs/mcp-support.zh.md +3 -2
  46. package/dist/docs/memory-system.md +4 -4
  47. package/dist/docs/memory-system.zh.md +1 -1
  48. package/dist/docs/mottos.md +1 -1
  49. package/dist/docs/mottos.zh.md +1 -1
  50. package/dist/docs/q4h.md +3 -3
  51. package/dist/docs/q4h.zh.md +1 -1
  52. package/dist/docs/roadmap.md +2 -2
  53. package/dist/docs/team_mgmt-toolset.md +11 -3
  54. package/dist/docs/team_mgmt-toolset.zh.md +9 -2
  55. package/dist/docs/tellask-collab.md +18 -18
  56. package/dist/docs/tellask-collab.zh.md +8 -8
  57. package/dist/docs/tellask-revive-context-refactor.zh.md +591 -0
  58. package/dist/evt-registry.d.ts +1 -2
  59. package/dist/evt-registry.js +2 -7
  60. package/dist/llm/gen/mock.js +9 -0
  61. package/dist/llm/kernel-driver/context.d.ts +1 -2
  62. package/dist/llm/kernel-driver/context.js +12 -26
  63. package/dist/llm/kernel-driver/drive.js +99 -75
  64. package/dist/llm/kernel-driver/engine.d.ts +2 -2
  65. package/dist/llm/kernel-driver/engine.js +10 -10
  66. package/dist/llm/kernel-driver/fbr.js +6 -6
  67. package/dist/llm/kernel-driver/flow.d.ts +1 -1
  68. package/dist/llm/kernel-driver/flow.js +129 -93
  69. package/dist/llm/kernel-driver/guardrails.js +4 -4
  70. package/dist/llm/kernel-driver/index.d.ts +1 -1
  71. package/dist/llm/kernel-driver/index.js +2 -2
  72. package/dist/llm/kernel-driver/loop.js +30 -30
  73. package/dist/llm/kernel-driver/reply-guidance.js +47 -52
  74. package/dist/llm/kernel-driver/restore.d.ts +3 -3
  75. package/dist/llm/kernel-driver/restore.js +23 -28
  76. package/dist/llm/kernel-driver/runtime.d.ts +1 -1
  77. package/dist/llm/kernel-driver/runtime.js +1 -1
  78. package/dist/llm/kernel-driver/sideDialog-txn.d.ts +8 -0
  79. package/dist/llm/kernel-driver/{subdialog-txn.js → sideDialog-txn.js} +13 -13
  80. package/dist/llm/kernel-driver/{subdialog.d.ts → sideDialog.d.ts} +13 -13
  81. package/dist/llm/kernel-driver/{subdialog.js → sideDialog.js} +203 -170
  82. package/dist/llm/kernel-driver/tellask-special.d.ts +7 -3
  83. package/dist/llm/kernel-driver/tellask-special.js +474 -497
  84. package/dist/llm/kernel-driver/types.d.ts +25 -9
  85. package/dist/mcp/config.d.ts +1 -0
  86. package/dist/mcp/config.js +7 -2
  87. package/dist/mcp/supervisor.d.ts +2 -0
  88. package/dist/mcp/supervisor.js +2 -1
  89. package/dist/minds/builtin/pangu/persona.en.md +4 -4
  90. package/dist/minds/load.js +6 -6
  91. package/dist/minds/system-prompt-parts.d.ts +1 -1
  92. package/dist/minds/system-prompt-parts.js +12 -12
  93. package/dist/minds/system-prompt.d.ts +1 -1
  94. package/dist/minds/system-prompt.js +56 -56
  95. package/dist/persistence-errors.d.ts +1 -1
  96. package/dist/persistence.d.ts +126 -121
  97. package/dist/persistence.js +1190 -786
  98. package/dist/priming.d.ts +3 -3
  99. package/dist/priming.js +62 -61
  100. package/dist/recovery/reply-special.js +5 -5
  101. package/dist/runtime/driver-messages.d.ts +3 -2
  102. package/dist/runtime/driver-messages.js +68 -57
  103. package/dist/runtime/inter-dialog-format.d.ts +12 -10
  104. package/dist/runtime/inter-dialog-format.js +80 -35
  105. package/dist/runtime/interjection-pause-stop.js +1 -1
  106. package/dist/runtime/reply-prompt-copy.d.ts +7 -3
  107. package/dist/runtime/reply-prompt-copy.js +39 -14
  108. package/dist/server/api-routes.js +87 -83
  109. package/dist/server/static-server.js +1 -1
  110. package/dist/server/websocket-handler.js +163 -153
  111. package/dist/tool-availability.js +1 -1
  112. package/dist/tools/app-reminders.js +17 -4
  113. package/dist/tools/ctrl.js +5 -5
  114. package/dist/tools/os.js +16 -16
  115. package/dist/tools/pending-tellask-reminder.js +20 -14
  116. package/dist/tools/prompts/control/en/index.md +1 -1
  117. package/dist/tools/prompts/control/en/principles.md +8 -8
  118. package/dist/tools/prompts/control/en/scenarios.md +7 -7
  119. package/dist/tools/prompts/control/en/tools.md +7 -7
  120. package/dist/tools/prompts/control/zh/principles.md +4 -4
  121. package/dist/tools/prompts/control/zh/scenarios.md +5 -5
  122. package/dist/tools/prompts/control/zh/tools.md +3 -3
  123. package/dist/tools/prompts/team_memory/en/scenarios.md +1 -1
  124. package/dist/tools/prompts/team_memory/zh/scenarios.md +1 -1
  125. package/dist/tools/team_mgmt-manual.js +2 -2
  126. package/dist/tools/team_mgmt-mcp-manual.js +10 -0
  127. package/dist/tools/team_mgmt.js +4 -4
  128. package/dist/utils/taskdoc.js +12 -12
  129. package/package.json +3 -3
  130. package/webapp/dist/assets/{_basePickBy-BPJaiZdW.js → _basePickBy-B7M9Q0Fa.js} +3 -3
  131. package/webapp/dist/assets/_basePickBy-B7M9Q0Fa.js.map +1 -0
  132. package/webapp/dist/assets/{_baseUniq-BEetT15i.js → _baseUniq-DAeYoL6j.js} +2 -2
  133. package/webapp/dist/assets/_baseUniq-DAeYoL6j.js.map +1 -0
  134. package/webapp/dist/assets/{arc-Dm7Zf36f.js → arc-Bh4nDbNR.js} +2 -2
  135. package/webapp/dist/assets/arc-Bh4nDbNR.js.map +1 -0
  136. package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-BpTPtkuo.js → architectureDiagram-2XIMDMQ5-CxqmdsIm.js} +26 -8
  137. package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-CxqmdsIm.js.map +1 -0
  138. package/webapp/dist/assets/{blockDiagram-VD42YOAC-C8fLN0iu.js → blockDiagram-WCTKOSBZ-CxIWLtpt.js} +187 -170
  139. package/webapp/dist/assets/blockDiagram-WCTKOSBZ-CxIWLtpt.js.map +1 -0
  140. package/webapp/dist/assets/{c4Diagram-YG6GDRKO-BpPr62CH.js → c4Diagram-IC4MRINW-1qErOIgG.js} +4 -4
  141. package/webapp/dist/assets/c4Diagram-IC4MRINW-1qErOIgG.js.map +1 -0
  142. package/webapp/dist/assets/{channel-EMYoPjW3.js → channel-DkgZHNUe.js} +2 -2
  143. package/webapp/dist/assets/channel-DkgZHNUe.js.map +1 -0
  144. package/webapp/dist/assets/{chunk-4BX2VUAB-CefNtjWG.js → chunk-4BX2VUAB-BmdMbU9v.js} +2 -2
  145. package/webapp/dist/assets/chunk-4BX2VUAB-BmdMbU9v.js.map +1 -0
  146. package/webapp/dist/assets/{chunk-55IACEB6-C_X7T43V.js → chunk-55IACEB6-D6LDTDBy.js} +2 -2
  147. package/webapp/dist/assets/chunk-55IACEB6-D6LDTDBy.js.map +1 -0
  148. package/webapp/dist/assets/{chunk-FMBD7UC4-ORmtkrtS.js → chunk-FMBD7UC4-C-BdCe4C.js} +2 -2
  149. package/webapp/dist/assets/chunk-FMBD7UC4-C-BdCe4C.js.map +1 -0
  150. package/webapp/dist/assets/{chunk-TZMSLE5B-Gao4qrq7.js → chunk-JSJVCQXG-WA_BLIm9.js} +14 -6
  151. package/webapp/dist/assets/chunk-JSJVCQXG-WA_BLIm9.js.map +1 -0
  152. package/webapp/dist/assets/{chunk-QN33PNHL-LTAOVhWu.js → chunk-KX2RTZJC-CA7sDJO5.js} +2 -2
  153. package/webapp/dist/assets/chunk-KX2RTZJC-CA7sDJO5.js.map +1 -0
  154. package/webapp/dist/assets/{chunk-DI55MBZ5-CbvrsI_w.js → chunk-NQ4KR5QH-wlvxalE3.js} +9 -7
  155. package/webapp/dist/assets/chunk-NQ4KR5QH-wlvxalE3.js.map +1 -0
  156. package/webapp/dist/assets/{chunk-QZHKN3VN-ZoUM_4u5.js → chunk-QZHKN3VN-Bo1VMcph.js} +2 -2
  157. package/webapp/dist/assets/chunk-QZHKN3VN-Bo1VMcph.js.map +1 -0
  158. package/webapp/dist/assets/{chunk-B4BG7PRW-BRe3_2oA.js → chunk-WL4C6EOR-B-Pk44be.js} +171 -121
  159. package/webapp/dist/assets/chunk-WL4C6EOR-B-Pk44be.js.map +1 -0
  160. package/webapp/dist/assets/{classDiagram-2ON5EDUG-uha1vIGN.js → classDiagram-VBA2DB6C-BqKuyb49.js} +7 -6
  161. package/webapp/dist/assets/classDiagram-VBA2DB6C-BqKuyb49.js.map +1 -0
  162. package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-uha1vIGN.js → classDiagram-v2-RAHNMMFH-BqKuyb49.js} +7 -6
  163. package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-BqKuyb49.js.map +1 -0
  164. package/webapp/dist/assets/{clone-_9Ayb1Gp.js → clone-BX5z8WVZ.js} +2 -2
  165. package/webapp/dist/assets/clone-BX5z8WVZ.js.map +1 -0
  166. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-C8wDw3NY.js → cose-bilkent-S5V4N54A-B-s11SgN.js} +2 -2
  167. package/webapp/dist/assets/cose-bilkent-S5V4N54A-B-s11SgN.js.map +1 -0
  168. package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
  169. package/webapp/dist/assets/{dagre-6UL2VRFP-BUSeNot0.js → dagre-KLK3FWXG-DmQFV2qK.js} +7 -7
  170. package/webapp/dist/assets/dagre-KLK3FWXG-DmQFV2qK.js.map +1 -0
  171. package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
  172. package/webapp/dist/assets/{diagram-PSM6KHXK-CMZAksVC.js → diagram-E7M64L7V-QRaBfST8.js} +10 -10
  173. package/webapp/dist/assets/diagram-E7M64L7V-QRaBfST8.js.map +1 -0
  174. package/webapp/dist/assets/{diagram-QEK2KX5R-BQKoRtwy.js → diagram-IFDJBPK2-lrWn1Obo.js} +9 -8
  175. package/webapp/dist/assets/diagram-IFDJBPK2-lrWn1Obo.js.map +1 -0
  176. package/webapp/dist/assets/{diagram-S2PKOQOG-DjMG97kd.js → diagram-P4PSJMXO-sTU7Hh-Y.js} +8 -8
  177. package/webapp/dist/assets/diagram-P4PSJMXO-sTU7Hh-Y.js.map +1 -0
  178. package/webapp/dist/assets/{erDiagram-Q2GNP2WA-BujwA137.js → erDiagram-INFDFZHY-Cx6jc9Wq.js} +96 -75
  179. package/webapp/dist/assets/erDiagram-INFDFZHY-Cx6jc9Wq.js.map +1 -0
  180. package/webapp/dist/assets/{flowDiagram-NV44I4VS-DgwPjg4y.js → flowDiagram-PKNHOUZH-DfGI49Dz.js} +98 -81
  181. package/webapp/dist/assets/flowDiagram-PKNHOUZH-DfGI49Dz.js.map +1 -0
  182. package/webapp/dist/assets/{ganttDiagram-JELNMOA3-Db2ykf3E.js → ganttDiagram-A5KZAMGK-nrcHWWaM.js} +28 -3
  183. package/webapp/dist/assets/ganttDiagram-A5KZAMGK-nrcHWWaM.js.map +1 -0
  184. package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-D_gSifkv.js → gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js} +38 -46
  185. package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js.map +1 -0
  186. package/webapp/dist/assets/graph-R5G-y8tB.js +782 -0
  187. package/webapp/dist/assets/graph-R5G-y8tB.js.map +1 -0
  188. package/webapp/dist/assets/{index-DLajsIDJ.js → index--fy89xGh.js} +2214 -2023
  189. package/webapp/dist/assets/index--fy89xGh.js.map +1 -0
  190. package/webapp/dist/assets/{index-xvYYeHuy.css → index-DZFkLLVz.css} +18 -10
  191. package/webapp/dist/assets/{infoDiagram-HS3SLOUP-BDba5pKs.js → infoDiagram-LFFYTUFH-PIoZHr7s.js} +7 -7
  192. package/webapp/dist/assets/infoDiagram-LFFYTUFH-PIoZHr7s.js.map +1 -0
  193. package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
  194. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-oCM-LYk1.js +966 -0
  195. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-oCM-LYk1.js.map +1 -0
  196. package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-CmJAbmlm.js → journeyDiagram-4ABVD52K-C2qidjQ5.js} +5 -5
  197. package/webapp/dist/assets/journeyDiagram-4ABVD52K-C2qidjQ5.js.map +1 -0
  198. package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-DxQeBTDk.js → kanban-definition-K7BYSVSG-Du0TC8WS.js} +5 -3
  199. package/webapp/dist/assets/kanban-definition-K7BYSVSG-Du0TC8WS.js.map +1 -0
  200. package/webapp/dist/assets/{layout-DteV_yE8.js → layout-VmEo1OEB.js} +5 -5
  201. package/webapp/dist/assets/layout-VmEo1OEB.js.map +1 -0
  202. package/webapp/dist/assets/{linear-zItbPrND.js → linear-B662YHAc.js} +2 -2
  203. package/webapp/dist/assets/linear-B662YHAc.js.map +1 -0
  204. package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-BJXI7UqO.js → mindmap-definition-YRQLILUH-D7arZj95.js} +7 -5
  205. package/webapp/dist/assets/mindmap-definition-YRQLILUH-D7arZj95.js.map +1 -0
  206. package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
  207. package/webapp/dist/assets/{pieDiagram-ADFJNKIX-BpM-aH2p.js → pieDiagram-SKSYHLDU-DvjPP4PA.js} +8 -8
  208. package/webapp/dist/assets/pieDiagram-SKSYHLDU-DvjPP4PA.js.map +1 -0
  209. package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-NXdIpA15.js → quadrantDiagram-337W2JSQ-B_JUGMj_.js} +3 -3
  210. package/webapp/dist/assets/quadrantDiagram-337W2JSQ-B_JUGMj_.js.map +1 -0
  211. package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-D1AICAA0.js → requirementDiagram-Z7DCOOCP-DF0mpvE3.js} +16 -6
  212. package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-DF0mpvE3.js.map +1 -0
  213. package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-WiReDPfo.js → sankeyDiagram-WA2Y5GQK-CoXlxv00.js} +2 -2
  214. package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CoXlxv00.js.map +1 -0
  215. package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-Cw76oP8t.js → sequenceDiagram-2WXFIKYE-DYqT5Pg7.js} +601 -201
  216. package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-DYqT5Pg7.js.map +1 -0
  217. package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-QjCeRczs.js → stateDiagram-RAJIS63D-D9b1mN8-.js} +9 -9
  218. package/webapp/dist/assets/stateDiagram-RAJIS63D-D9b1mN8-.js.map +1 -0
  219. package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-IClqxQ4s.js → stateDiagram-v2-FVOUBMTO-DNzgudL_.js} +5 -5
  220. package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-DNzgudL_.js.map +1 -0
  221. package/webapp/dist/assets/{timeline-definition-IT6M3QCI-BfyfTY7m.js → timeline-definition-YZTLITO2-CkyKUY7A.js} +3 -3
  222. package/webapp/dist/assets/timeline-definition-YZTLITO2-CkyKUY7A.js.map +1 -0
  223. package/webapp/dist/assets/{treemap-GDKQZRPO-C5MiL6--.js → treemap-KZPCXAKY-CZd09kF-.js} +37 -24
  224. package/webapp/dist/assets/treemap-KZPCXAKY-CZd09kF-.js.map +1 -0
  225. package/webapp/dist/assets/vennDiagram-LZ73GAT5-BxVF5Olo.js +2487 -0
  226. package/webapp/dist/assets/vennDiagram-LZ73GAT5-BxVF5Olo.js.map +1 -0
  227. package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-ybaJrSry.js → xychartDiagram-JWTSCODW-BRwRloPc.js} +4 -4
  228. package/webapp/dist/assets/xychartDiagram-JWTSCODW-BRwRloPc.js.map +1 -0
  229. package/webapp/dist/index.html +2 -2
  230. package/dist/docs/issues/global-dialog-event-broadcaster-missing.md +0 -128
  231. package/dist/llm/kernel-driver/subdialog-txn.d.ts +0 -8
  232. package/webapp/dist/assets/_basePickBy-BPJaiZdW.js.map +0 -1
  233. package/webapp/dist/assets/_baseUniq-BEetT15i.js.map +0 -1
  234. package/webapp/dist/assets/arc-Dm7Zf36f.js.map +0 -1
  235. package/webapp/dist/assets/architectureDiagram-VXUJARFQ-BpTPtkuo.js.map +0 -1
  236. package/webapp/dist/assets/blockDiagram-VD42YOAC-C8fLN0iu.js.map +0 -1
  237. package/webapp/dist/assets/c4Diagram-YG6GDRKO-BpPr62CH.js.map +0 -1
  238. package/webapp/dist/assets/channel-EMYoPjW3.js.map +0 -1
  239. package/webapp/dist/assets/chunk-4BX2VUAB-CefNtjWG.js.map +0 -1
  240. package/webapp/dist/assets/chunk-55IACEB6-C_X7T43V.js.map +0 -1
  241. package/webapp/dist/assets/chunk-B4BG7PRW-BRe3_2oA.js.map +0 -1
  242. package/webapp/dist/assets/chunk-DI55MBZ5-CbvrsI_w.js.map +0 -1
  243. package/webapp/dist/assets/chunk-FMBD7UC4-ORmtkrtS.js.map +0 -1
  244. package/webapp/dist/assets/chunk-QN33PNHL-LTAOVhWu.js.map +0 -1
  245. package/webapp/dist/assets/chunk-QZHKN3VN-ZoUM_4u5.js.map +0 -1
  246. package/webapp/dist/assets/chunk-TZMSLE5B-Gao4qrq7.js.map +0 -1
  247. package/webapp/dist/assets/classDiagram-2ON5EDUG-uha1vIGN.js.map +0 -1
  248. package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-uha1vIGN.js.map +0 -1
  249. package/webapp/dist/assets/clone-_9Ayb1Gp.js.map +0 -1
  250. package/webapp/dist/assets/cose-bilkent-S5V4N54A-C8wDw3NY.js.map +0 -1
  251. package/webapp/dist/assets/dagre-6UL2VRFP-BUSeNot0.js.map +0 -1
  252. package/webapp/dist/assets/diagram-PSM6KHXK-CMZAksVC.js.map +0 -1
  253. package/webapp/dist/assets/diagram-QEK2KX5R-BQKoRtwy.js.map +0 -1
  254. package/webapp/dist/assets/diagram-S2PKOQOG-DjMG97kd.js.map +0 -1
  255. package/webapp/dist/assets/erDiagram-Q2GNP2WA-BujwA137.js.map +0 -1
  256. package/webapp/dist/assets/flowDiagram-NV44I4VS-DgwPjg4y.js.map +0 -1
  257. package/webapp/dist/assets/ganttDiagram-JELNMOA3-Db2ykf3E.js.map +0 -1
  258. package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-D_gSifkv.js.map +0 -1
  259. package/webapp/dist/assets/graph-BHjCU5xP.js +0 -425
  260. package/webapp/dist/assets/graph-BHjCU5xP.js.map +0 -1
  261. package/webapp/dist/assets/index-DLajsIDJ.js.map +0 -1
  262. package/webapp/dist/assets/infoDiagram-HS3SLOUP-BDba5pKs.js.map +0 -1
  263. package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-CmJAbmlm.js.map +0 -1
  264. package/webapp/dist/assets/kanban-definition-3W4ZIXB7-DxQeBTDk.js.map +0 -1
  265. package/webapp/dist/assets/layout-DteV_yE8.js.map +0 -1
  266. package/webapp/dist/assets/linear-zItbPrND.js.map +0 -1
  267. package/webapp/dist/assets/mindmap-definition-VGOIOE7T-BJXI7UqO.js.map +0 -1
  268. package/webapp/dist/assets/pieDiagram-ADFJNKIX-BpM-aH2p.js.map +0 -1
  269. package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-NXdIpA15.js.map +0 -1
  270. package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-D1AICAA0.js.map +0 -1
  271. package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-WiReDPfo.js.map +0 -1
  272. package/webapp/dist/assets/sequenceDiagram-WL72ISMW-Cw76oP8t.js.map +0 -1
  273. package/webapp/dist/assets/stateDiagram-FKZM4ZOC-QjCeRczs.js.map +0 -1
  274. package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-IClqxQ4s.js.map +0 -1
  275. package/webapp/dist/assets/timeline-definition-IT6M3QCI-BfyfTY7m.js.map +0 -1
  276. package/webapp/dist/assets/treemap-GDKQZRPO-C5MiL6--.js.map +0 -1
  277. package/webapp/dist/assets/xychartDiagram-PRI3JC2R-ybaJrSry.js.map +0 -1
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildDriveBaseContextMessages = buildDriveBaseContextMessages;
4
4
  exports.appendDriveEphemeralContext = appendDriveEphemeralContext;
5
- exports.appendDriveTailContext = appendDriveTailContext;
6
5
  exports.assembleDriveContextMessages = assembleDriveContextMessages;
7
6
  function buildDriveBaseContextMessages(parts) {
8
7
  return [
@@ -15,36 +14,23 @@ function buildDriveBaseContextMessages(parts) {
15
14
  }
16
15
  function appendDriveEphemeralContext(base, parts) {
17
16
  const next = [...base];
18
- if (Array.isArray(parts.subdialogResponseContextMsgs) &&
19
- parts.subdialogResponseContextMsgs.length > 0) {
20
- next.push(...parts.subdialogResponseContextMsgs);
17
+ if (Array.isArray(parts.sideDialogResponseContextMsgs) &&
18
+ parts.sideDialogResponseContextMsgs.length > 0) {
19
+ next.push(...parts.sideDialogResponseContextMsgs);
21
20
  }
22
21
  if (Array.isArray(parts.runtimeGuideMsgs) && parts.runtimeGuideMsgs.length > 0) {
23
22
  next.push(...parts.runtimeGuideMsgs);
24
23
  }
25
24
  return next;
26
25
  }
27
- function hasUserPromptLikeAnchor(source) {
28
- for (const msg of source) {
29
- if (!msg)
30
- continue;
31
- if ((msg.type === 'prompting_msg' ||
32
- msg.type === 'environment_msg' ||
33
- msg.type === 'tellask_carryover_msg') &&
34
- msg.role === 'user') {
35
- return true;
36
- }
37
- }
38
- return false;
39
- }
40
- function appendDriveTailContext(source, parts) {
41
- if (hasUserPromptLikeAnchor(source)) {
42
- return [...source, ...parts.renderedReminders];
43
- }
44
- return [...source, ...parts.renderedReminders];
45
- }
46
26
  function assembleDriveContextMessages(args) {
47
- const baseMsgs = buildDriveBaseContextMessages(args.base);
48
- const withEphemeral = appendDriveEphemeralContext(baseMsgs, args.ephemeral);
49
- return appendDriveTailContext(withEphemeral, args.tail);
27
+ const baseMsgs = [
28
+ ...args.base.prependedContextMessages,
29
+ ...args.base.memories,
30
+ ...(args.base.taskDocMsg ? [args.base.taskDocMsg] : []),
31
+ ...args.base.coursePrefixMsgs,
32
+ ...args.tail.renderedReminders,
33
+ ...args.base.dialogMsgsForContext,
34
+ ];
35
+ return appendDriveEphemeralContext(baseMsgs, args.ephemeral);
50
36
  }
@@ -122,11 +122,11 @@ function throwIfAborted(abortSignal, dlg) {
122
122
  }
123
123
  throw new KernelDriverInterruptedError(buildAbortedSystemStopReason());
124
124
  }
125
- function isFbrSubdialogDialog(dlg) {
126
- return dlg instanceof dialog_1.SubDialog && dlg.assignmentFromSup.callName === 'freshBootsReasoning';
125
+ function isFbrSideDialog(dlg) {
126
+ return dlg instanceof dialog_1.SideDialog && dlg.assignmentFromAsker.callName === 'freshBootsReasoning';
127
127
  }
128
128
  async function loadDialogFbrState(dialog) {
129
- if (!isFbrSubdialogDialog(dialog))
129
+ if (!isFbrSideDialog(dialog))
130
130
  return undefined;
131
131
  const latest = await persistence_1.DialogPersistence.loadDialogLatest(dialog.id, dialog.status);
132
132
  return latest?.fbrState;
@@ -138,14 +138,15 @@ async function persistDialogFbrState(dialog, fbrState) {
138
138
  }));
139
139
  }
140
140
  function buildKernelDriverFbrPrompt(dlg, state) {
141
- const collectiveTargets = dlg.assignmentFromSup.collectiveTargets && dlg.assignmentFromSup.collectiveTargets.length > 0
142
- ? [...dlg.assignmentFromSup.collectiveTargets]
141
+ const collectiveTargets = dlg.assignmentFromAsker.collectiveTargets &&
142
+ dlg.assignmentFromAsker.collectiveTargets.length > 0
143
+ ? [...dlg.assignmentFromAsker.collectiveTargets]
143
144
  : [dlg.agentId];
144
145
  return {
145
146
  content: (0, fbr_1.buildFbrPromptForState)({
146
147
  state,
147
- tellaskContent: dlg.assignmentFromSup.tellaskContent,
148
- fromAgentId: dlg.assignmentFromSup.originMemberId,
148
+ tellaskContent: dlg.assignmentFromAsker.tellaskContent,
149
+ fromAgentId: dlg.assignmentFromAsker.originMemberId,
149
150
  toAgentId: dlg.agentId,
150
151
  language: (0, work_language_1.getWorkLanguage)(),
151
152
  collectiveTargets,
@@ -323,7 +324,7 @@ function createFreshBootsReasoningTool(args) {
323
324
  return {
324
325
  type: 'func',
325
326
  name: 'freshBootsReasoning',
326
- description: 'Start a tool-less FBR sideline. `tellaskContent` must stay neutral and factual: Goal/Facts/Constraints/Evidence[/Unknowns], with no analysis scaffold. If the user says “FBR x3” or “3x FBR”, set `effort: 3`: `xN` is the absolute effort value, not “N times the current default”. ' +
327
+ description: 'Start a tool-less FBR Side Dialog. `tellaskContent` must stay neutral and factual: Goal/Facts/Constraints/Evidence[/Unknowns], with no analysis scaffold. If the user says “FBR x3” or “3x FBR”, set `effort: 3`: `xN` is the absolute effort value, not “N times the current default”. ' +
327
328
  fbrDefaultHint,
328
329
  parameters: {
329
330
  type: 'object',
@@ -334,7 +335,7 @@ function createFreshBootsReasoningTool(args) {
334
335
  },
335
336
  effort: {
336
337
  type: 'integer',
337
- description: `Optional absolute FBR effort (0..100 integer). “x3” / “3x” means \`effort: 3\`, not “3 × current fbr_effort”. Runtime maps effort N to N serial FBR passes in one sideline window. When omitted, runtime defaults to current member fbr_effort=${fbrDefault}.`,
338
+ description: `Optional absolute FBR effort (0..100 integer). “x3” / “3x” means \`effort: 3\`, not “3 × current fbr_effort”. Runtime maps effort N to N serial FBR passes in one Side Dialog window. When omitted, runtime defaults to current member fbr_effort=${fbrDefault}.`,
338
339
  },
339
340
  },
340
341
  required: ['tellaskContent'],
@@ -349,7 +350,7 @@ const TELLASK_SPECIAL_VIRTUAL_TOOLS = [
349
350
  {
350
351
  type: 'func',
351
352
  name: 'tellaskBack',
352
- description: 'Ask back to the requester dialog in sideline context when upstream clarification/decision is required or ownership cannot be determined from SOP.',
353
+ description: 'Ask back to the tellasker in Side Dialog context when tellasker clarification/decision is required or ownership cannot be determined from SOP.',
353
354
  parameters: {
354
355
  type: 'object',
355
356
  properties: {
@@ -365,7 +366,7 @@ const TELLASK_SPECIAL_VIRTUAL_TOOLS = [
365
366
  {
366
367
  type: 'func',
367
368
  name: 'tellask',
368
- description: 'Create or resume a teammate sideline dialog with sessionSlug.',
369
+ description: 'Create or resume a teammate Side Dialog with sessionSlug.',
369
370
  parameters: {
370
371
  type: 'object',
371
372
  properties: {
@@ -383,7 +384,7 @@ const TELLASK_SPECIAL_VIRTUAL_TOOLS = [
383
384
  {
384
385
  type: 'func',
385
386
  name: 'tellaskSessionless',
386
- description: 'Create a one-shot teammate sideline dialog with no assignment-update channel; later tellaskSessionless calls create new dialogs rather than updating or stopping this one.',
387
+ description: 'Create a one-shot teammate Side Dialog with no assignment-update channel; later tellaskSessionless calls create new dialogs rather than updating or stopping this one.',
387
388
  parameters: {
388
389
  type: 'object',
389
390
  properties: {
@@ -590,18 +591,18 @@ function resolveUpNextPrompt(dlg) {
590
591
  case 'registered_assignment_update':
591
592
  case 'new_course_runtime_guide':
592
593
  case 'new_course_runtime_reply':
593
- case 'new_course_runtime_subdialog': {
594
+ case 'new_course_runtime_sideDialog': {
594
595
  const runtimeCommon = {
595
596
  ...common,
596
597
  origin: 'runtime',
597
598
  ...(upNext.skipTaskdoc === undefined ? {} : { skipTaskdoc: upNext.skipTaskdoc }),
598
599
  };
599
600
  if (upNext.kind === 'registered_assignment_update' ||
600
- upNext.kind === 'new_course_runtime_subdialog') {
601
+ upNext.kind === 'new_course_runtime_sideDialog') {
601
602
  const prompt = {
602
603
  ...runtimeCommon,
603
604
  tellaskReplyDirective: upNext.tellaskReplyDirective,
604
- subdialogReplyTarget: upNext.subdialogReplyTarget,
605
+ sideDialogReplyTarget: upNext.sideDialogReplyTarget,
605
606
  };
606
607
  return prompt;
607
608
  }
@@ -632,8 +633,8 @@ async function renderRemindersForContext(dlg) {
632
633
  continue;
633
634
  }
634
635
  renderedItems.push({
635
- type: 'transient_guide_msg',
636
- role: 'assistant',
636
+ type: 'environment_msg',
637
+ role: 'user',
637
638
  content: (0, driver_messages_1.formatReminderItemGuide)(language, reminder.id, reminder.content, {
638
639
  meta: reminder.meta,
639
640
  scope: reminder.scope,
@@ -658,13 +659,11 @@ function hasSameReplyDirective(left, right) {
658
659
  if (left.expectedReplyCallName !== right.expectedReplyCallName) {
659
660
  return false;
660
661
  }
661
- if (left.targetCallId !== right.targetCallId || left.tellaskContent !== right.tellaskContent) {
662
+ if (left.targetDialogId !== right.targetDialogId ||
663
+ left.targetCallId !== right.targetCallId ||
664
+ left.tellaskContent !== right.tellaskContent) {
662
665
  return false;
663
666
  }
664
- if (left.expectedReplyCallName === 'replyTellaskBack') {
665
- return (right.expectedReplyCallName === 'replyTellaskBack' &&
666
- left.targetDialogId === right.targetDialogId);
667
- }
668
667
  return true;
669
668
  }
670
669
  function buildPendingTellaskFuncResult(args) {
@@ -674,13 +673,13 @@ function buildPendingTellaskFuncResult(args) {
674
673
  genseq: args.genseq,
675
674
  id: args.callId,
676
675
  name: args.callName,
677
- content: (0, tellask_special_1.formatPendingTellaskFuncResultContent)(args.callName, null),
676
+ content: (0, tellask_special_1.formatPendingTellaskFuncResultContent)(args.callName, null, args.callId),
678
677
  };
679
678
  }
680
679
  async function loadPendingTellaskSpecialStates(dialog) {
681
680
  const pendingByCallId = new Map();
682
- const pendingSubdialogs = await persistence_1.DialogPersistence.loadPendingSubdialogs(dialog.id, dialog.status);
683
- for (const pending of pendingSubdialogs) {
681
+ const pendingSideDialogs = await persistence_1.DialogPersistence.loadPendingSideDialogs(dialog.id, dialog.status);
682
+ for (const pending of pendingSideDialogs) {
684
683
  const callId = pending.callId.trim();
685
684
  if (callId === '') {
686
685
  continue;
@@ -711,21 +710,26 @@ async function projectTellaskFuncResultsForContext(args) {
711
710
  if (!hasSpecialFuncCall) {
712
711
  return {
713
712
  messages: [...args.dialogMsgsForContext],
714
- projectedResultCallIds: new Set(),
715
713
  };
716
714
  }
717
715
  const pendingSpecialByCallId = await loadPendingTellaskSpecialStates(args.dialog);
718
- // Only technical tool-result-shaped messages can satisfy provider tool-call adjacency. A
719
- // carryover message is different: it is already the canonical latest-course business context and
720
- // intentionally does not act as a tool-result surrogate for an older-course call that is no
721
- // longer present in current context.
716
+ // Only technical tool-result-shaped messages can satisfy provider tool-call adjacency. Tellask
717
+ // result/carryover messages are business facts in timeline order; the adjacent call-site
718
+ // projection must be only a pending/pointer status, never the real reply body.
722
719
  const pairedToolResultContentByCallId = new Map();
723
720
  const existingSpecialFuncResults = new Map();
724
721
  for (const msg of args.dialogMsgsForContext) {
725
722
  if (msg.type === 'tellask_result_msg') {
726
723
  const callId = typeof msg.callId === 'string' ? msg.callId.trim() : '';
727
724
  if (callId !== '') {
728
- pairedToolResultContentByCallId.set(callId, msg.content);
725
+ if (!(0, tellask_special_1.isTellaskCallFunctionName)(msg.callName)) {
726
+ throw new Error(`tellask result projection invariant violation: unsupported callName '${msg.callName}' for callId=${callId}`);
727
+ }
728
+ pairedToolResultContentByCallId.set(callId, (0, tellask_special_1.formatResolvedTellaskFuncResultContent)({
729
+ name: msg.callName,
730
+ callId,
731
+ status: msg.status,
732
+ }));
729
733
  }
730
734
  continue;
731
735
  }
@@ -734,7 +738,6 @@ async function projectTellaskFuncResultsForContext(args) {
734
738
  }
735
739
  }
736
740
  const projected = [];
737
- const projectedResultCallIds = new Set();
738
741
  const specialCallIds = new Set();
739
742
  for (const msg of args.dialogMsgsForContext) {
740
743
  if (msg.type === 'func_result_msg' && specialCallIds.has(msg.id)) {
@@ -750,7 +753,6 @@ async function projectTellaskFuncResultsForContext(args) {
750
753
  specialCallIds.add(msg.id);
751
754
  const pairedToolResultContent = pairedToolResultContentByCallId.get(msg.id);
752
755
  if (pairedToolResultContent !== undefined) {
753
- projectedResultCallIds.add(msg.id);
754
756
  projected.push({
755
757
  type: 'func_result_msg',
756
758
  role: 'tool',
@@ -763,24 +765,21 @@ async function projectTellaskFuncResultsForContext(args) {
763
765
  }
764
766
  const existingResult = existingSpecialFuncResults.get(msg.id);
765
767
  if (existingResult) {
766
- projectedResultCallIds.add(msg.id);
767
768
  projected.push(existingResult);
768
769
  continue;
769
770
  }
770
771
  const pendingSpecialState = pendingSpecialByCallId.get(msg.id);
771
772
  if (pendingSpecialState?.callName === msg.name) {
772
- projectedResultCallIds.add(msg.id);
773
773
  projected.push({
774
774
  type: 'func_result_msg',
775
775
  role: 'tool',
776
776
  genseq: msg.genseq,
777
777
  id: msg.id,
778
778
  name: msg.name,
779
- content: (0, tellask_special_1.formatPendingTellaskFuncResultContent)(msg.name, pendingSpecialState.startedAtMs),
779
+ content: (0, tellask_special_1.formatPendingTellaskFuncResultContent)(msg.name, pendingSpecialState.startedAtMs, msg.id),
780
780
  });
781
781
  continue;
782
782
  }
783
- projectedResultCallIds.add(msg.id);
784
783
  projected.push(buildPendingTellaskFuncResult({
785
784
  callId: msg.id,
786
785
  callName: msg.name,
@@ -789,7 +788,6 @@ async function projectTellaskFuncResultsForContext(args) {
789
788
  }
790
789
  return {
791
790
  messages: projected,
792
- projectedResultCallIds,
793
791
  };
794
792
  }
795
793
  async function buildDialogMsgsForContext(dlg) {
@@ -798,15 +796,21 @@ async function buildDialogMsgsForContext(dlg) {
798
796
  dialog: dlg,
799
797
  dialogMsgsForContext: rawDialogMsgsForContext,
800
798
  });
801
- const businessFiltered = projected.messages.filter((msg) => {
802
- if (msg.type !== 'tellask_result_msg') {
803
- return true;
804
- }
805
- // Business tellask result bubbles stay in storage/UI, but when the same latest-course call is
806
- // also projected into an adjacent technical tool result for provider context we omit the
807
- // duplicate bubble form here. Carryover messages are intentionally not filtered by this branch:
808
- // they are already the canonical latest-course context, not a tool-pair surrogate.
809
- return !projected.projectedResultCallIds.has(msg.callId);
799
+ const activeReplyObligation = await persistence_1.DialogPersistence.loadActiveTellaskReplyObligation(dlg.id, dlg.status);
800
+ const activeReplyObligationContext = activeReplyObligation === undefined
801
+ ? []
802
+ : [
803
+ {
804
+ type: 'environment_msg',
805
+ role: 'user',
806
+ content: (0, reply_prompt_copy_1.buildActiveReplyObligationContextText)({
807
+ language: (0, work_language_1.getWorkLanguage)(),
808
+ directive: activeReplyObligation,
809
+ }),
810
+ },
811
+ ];
812
+ const businessFiltered = [...activeReplyObligationContext, ...projected.messages].filter((msg) => {
813
+ return msg.type !== 'tellask_result_msg' || msg.content.trim() !== '';
810
814
  });
811
815
  const sanitized = (0, tool_call_context_1.sanitizeToolContextForProvider)(businessFiltered);
812
816
  if (sanitized.droppedViolations.length > 0) {
@@ -857,13 +861,20 @@ function shouldImmediatelyFollowUpToolOutcome(tool, outcome) {
857
861
  return shouldImmediatelyFollowUpSuccessfulToolResult(tool);
858
862
  }
859
863
  async function executeFunctionCalls(args) {
860
- const functionPromises = args.funcCalls.map(async (func) => {
864
+ const preparedCalls = args.funcCalls.map((func) => {
861
865
  throwIfAborted(args.abortSignal, args.dlg);
862
866
  const callGenseq = func.genseq;
863
867
  const argsStr = typeof func.arguments === 'string' ? func.arguments : JSON.stringify(func.arguments ?? {});
864
868
  const tool = args.agentTools.find((t) => t.type === 'func' && t.name === func.name);
865
869
  const preparedInvocationArgs = tool !== undefined ? (0, tool_1.resolveFuncToolInvocationArguments)(tool, argsStr) : null;
866
- await args.dlg.funcCallRequested(func.id, func.name, argsStr);
870
+ return { func, callGenseq, argsStr, tool, preparedInvocationArgs };
871
+ });
872
+ for (const prepared of preparedCalls) {
873
+ throwIfAborted(args.abortSignal, args.dlg);
874
+ await args.dlg.persistFunctionCall(prepared.func.id, prepared.func.name, prepared.argsStr, prepared.callGenseq);
875
+ }
876
+ const functionPromises = preparedCalls.map(async ({ func, callGenseq, argsStr, tool, preparedInvocationArgs, }) => {
877
+ throwIfAborted(args.abortSignal, args.dlg);
867
878
  let result;
868
879
  let outcome = 'success';
869
880
  let rethrowError;
@@ -908,7 +919,9 @@ async function executeFunctionCalls(args) {
908
919
  id: func.id,
909
920
  name: func.name,
910
921
  content: output.content,
911
- contentItems: Array.isArray(output.contentItems) ? [...output.contentItems] : undefined,
922
+ contentItems: Array.isArray(output.contentItems)
923
+ ? [...output.contentItems]
924
+ : undefined,
912
925
  role: 'tool',
913
926
  genseq: callGenseq,
914
927
  };
@@ -940,7 +953,7 @@ async function executeFunctionCalls(args) {
940
953
  }
941
954
  }
942
955
  }
943
- await args.dlg.persistFunctionCallResultPair(func.id, func.name, argsStr, callGenseq, result);
956
+ await args.dlg.receiveFuncResult(result);
944
957
  if (rethrowError !== undefined) {
945
958
  throw rethrowError;
946
959
  }
@@ -1076,12 +1089,12 @@ async function resetDiligenceBudgetAfterQ4H(dlg, team) {
1076
1089
  }
1077
1090
  }
1078
1091
  async function maybeContinueWithDiligencePrompt(args) {
1079
- const { dlg, team, suppressDiligencePushForDrive, allowPendingSubdialogs } = args;
1080
- if (!(dlg instanceof dialog_1.RootDialog)) {
1092
+ const { dlg, team, suppressDiligencePushForDrive, allowPendingSideDialogs } = args;
1093
+ if (!(dlg instanceof dialog_1.MainDialog)) {
1081
1094
  return { kind: 'break' };
1082
1095
  }
1083
1096
  const suspension = await dlg.getSuspensionStatus({
1084
- allowPendingSubdialogs: allowPendingSubdialogs === true,
1097
+ allowPendingSideDialogs: allowPendingSideDialogs === true,
1085
1098
  });
1086
1099
  if (!suspension.canDrive) {
1087
1100
  if (suspension.q4h) {
@@ -1091,7 +1104,7 @@ async function maybeContinueWithDiligencePrompt(args) {
1091
1104
  }
1092
1105
  const prepared = await (0, runtime_1.maybePrepareDiligenceAutoContinuePrompt)({
1093
1106
  dlg,
1094
- isRootDialog: true,
1107
+ isMainDialog: true,
1095
1108
  remainingBudget: dlg.diligencePushRemainingBudget,
1096
1109
  diligencePushMax: resolveMemberDiligencePushMax(team, dlg.agentId),
1097
1110
  suppressDiligencePush: suppressDiligencePushForDrive,
@@ -1130,16 +1143,16 @@ async function maybePrepareRetryStoppedRecoveryPrompt(args) {
1130
1143
  suppressDiligencePushForDrive: args.suppressDiligencePushForDrive,
1131
1144
  // `diligence_push_once` is a provider-quirk deadlock breaker rather than the ordinary
1132
1145
  // "dialog is about to go idle" auto-continue path. In practice this can happen in a
1133
- // function-result-driven generation round right after the root dialog has already registered
1134
- // a pending tellask/subdialog. Keep Q4H as a hard blocker, but do not let pending subdialogs
1146
+ // function-result-driven generation round right after the main dialog has already registered
1147
+ // a pending tellask/sideDialog. Keep Q4H as a hard blocker, but do not let pending sideDialogs
1135
1148
  // veto this one-time recovery injection or the same-context deadlock cannot be broken.
1136
- allowPendingSubdialogs: true,
1149
+ allowPendingSideDialogs: true,
1137
1150
  });
1138
1151
  }
1139
1152
  async function maybeContinueWithHealthPromptBeforeDiligence(args) {
1140
1153
  const { dlg, providerCfg, model } = args;
1141
1154
  // This path is only used as a higher-priority alternative to Diligence Push.
1142
- if (!(dlg instanceof dialog_1.RootDialog)) {
1155
+ if (!(dlg instanceof dialog_1.MainDialog)) {
1143
1156
  return { kind: 'no_health_prompt' };
1144
1157
  }
1145
1158
  const snapshot = dlg.getLastContextHealth();
@@ -1242,7 +1255,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
1242
1255
  genIterNo += 1;
1243
1256
  throwIfAborted(abortSignal, dlg);
1244
1257
  const activeFbrState = await loadDialogFbrState(dlg);
1245
- if (isFbrSubdialogDialog(dlg)) {
1258
+ if (isFbrSideDialog(dlg)) {
1246
1259
  dlg.setFbrConclusionToolsEnabled(activeFbrState !== undefined && (0, fbr_1.isFbrFinalizationState)(activeFbrState));
1247
1260
  if (pendingPrompt === undefined &&
1248
1261
  activeFbrState &&
@@ -1315,11 +1328,11 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
1315
1328
  };
1316
1329
  const retryPolicy = resolveKernelDriverRetryPolicy(providerCfg);
1317
1330
  const canonicalFuncTools = agentTools.filter((t) => t.type === 'func');
1318
- const isSubdialog = dlg.id.rootId !== dlg.id.selfId;
1331
+ const isSideDialog = dlg.id.rootId !== dlg.id.selfId;
1319
1332
  const fbrEffortDefault = resolveFbrEffortDefaultForTool(agent);
1320
1333
  const effectiveFuncTools = policy.mode === 'default'
1321
1334
  ? mergeTellaskVirtualTools(canonicalFuncTools, {
1322
- includeTellaskBack: isSubdialog,
1335
+ includeTellaskBack: isSideDialog,
1323
1336
  fbrEffortDefault,
1324
1337
  })
1325
1338
  : canonicalFuncTools;
@@ -1392,7 +1405,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
1392
1405
  let contextHealthForGen;
1393
1406
  let llmGenModelForGen = model;
1394
1407
  const currentPrompt = pendingPrompt;
1395
- const currentReplyTarget = currentPrompt?.subdialogReplyTarget;
1408
+ const currentReplyTarget = currentPrompt?.sideDialogReplyTarget;
1396
1409
  const currentFbrState = await loadDialogFbrState(dlg);
1397
1410
  let currentRuntimeGuideMsg;
1398
1411
  const currentPromptFromFbrState = currentPrompt !== undefined &&
@@ -1552,7 +1565,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
1552
1565
  // Ideal: provider SDKs should support a dedicated role='environment' for runtime
1553
1566
  // metadata. Today, most providers only accept user/assistant (and tool as a special
1554
1567
  // case), so Dominds must project environment/system-like content as role='user'.
1555
- const replyTarget = currentPrompt.subdialogReplyTarget;
1568
+ const replyTarget = currentPrompt.sideDialogReplyTarget;
1556
1569
  if (replyTarget) {
1557
1570
  const normalizedCallId = replyTarget.callId.trim();
1558
1571
  if (normalizedCallId === '') {
@@ -1565,8 +1578,8 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
1565
1578
  callId: normalizedCallId,
1566
1579
  genseq: dlg.activeGenSeq,
1567
1580
  ...(0, storage_1.toRootGenerationAnchor)({
1568
- rootCourse: (dlg instanceof dialog_1.SubDialog ? dlg.rootDialog : dlg).currentCourse,
1569
- rootGenseq: (dlg instanceof dialog_1.SubDialog ? dlg.rootDialog : dlg).activeGenSeqOrUndefined ?? 0,
1581
+ rootCourse: (dlg instanceof dialog_1.SideDialog ? dlg.mainDialog : dlg).currentCourse,
1582
+ rootGenseq: (dlg instanceof dialog_1.SideDialog ? dlg.mainDialog : dlg).activeGenSeqOrUndefined ?? 0,
1570
1583
  }),
1571
1584
  };
1572
1585
  const course = dlg.activeGenCourseOrUndefined ?? dlg.currentCourse;
@@ -1579,18 +1592,29 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
1579
1592
  ? await (0, taskdoc_1.formatTaskDocContent)(dlg)
1580
1593
  : undefined;
1581
1594
  const renderedReminders = await renderRemindersForContext(dlg);
1595
+ const dialogMsgsForContext = await buildDialogMsgsForContext(dlg);
1596
+ const reminderContextBlock = renderedReminders.length > 0
1597
+ ? [
1598
+ ...renderedReminders,
1599
+ {
1600
+ type: 'environment_msg',
1601
+ role: 'user',
1602
+ content: (0, driver_messages_1.formatReminderContextFooter)((0, work_language_1.getWorkLanguage)()),
1603
+ },
1604
+ ]
1605
+ : renderedReminders;
1582
1606
  const ctxMsgs = (0, context_1.assembleDriveContextMessages)({
1583
1607
  base: {
1584
1608
  prependedContextMessages: policy.prependedContextMessages,
1585
1609
  memories: minds.memories,
1586
1610
  taskDocMsg,
1587
1611
  coursePrefixMsgs: dlg.getCoursePrefixMsgs(),
1588
- dialogMsgsForContext: await buildDialogMsgsForContext(dlg),
1612
+ dialogMsgsForContext,
1589
1613
  },
1590
1614
  ephemeral: {
1591
1615
  runtimeGuideMsgs: currentRuntimeGuideMsg ? [currentRuntimeGuideMsg] : undefined,
1592
1616
  },
1593
- tail: { renderedReminders },
1617
+ tail: { renderedReminders: reminderContextBlock },
1594
1618
  });
1595
1619
  const newMsgs = [];
1596
1620
  const streamedFuncCalls = [];
@@ -1991,7 +2015,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
1991
2015
  }
1992
2016
  const nextFbrState = (0, fbr_1.advanceFbrState)(persistedFbrState);
1993
2017
  if (nextFbrState) {
1994
- if (!isFbrSubdialogDialog(dlg)) {
2018
+ if (!isFbrSideDialog(dlg)) {
1995
2019
  throw new Error(`kernel-driver FBR invariant violation: persisted FBR state on non-FBR dialog (${dlg.id.valueOf()})`);
1996
2020
  }
1997
2021
  await persistDialogFbrState(dlg, nextFbrState);
@@ -2006,7 +2030,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
2006
2030
  }),
2007
2031
  responseGenseq: genseq,
2008
2032
  };
2009
- if (!isFbrSubdialogDialog(dlg)) {
2033
+ if (!isFbrSideDialog(dlg)) {
2010
2034
  throw new Error(`kernel-driver FBR invariant violation: persisted FBR state on non-FBR dialog (${dlg.id.valueOf()})`);
2011
2035
  }
2012
2036
  await persistDialogFbrState(dlg, undefined);
@@ -2053,7 +2077,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
2053
2077
  responseText: inspection.content,
2054
2078
  responseGenseq: inspection.genseq,
2055
2079
  };
2056
- if (!isFbrSubdialogDialog(dlg)) {
2080
+ if (!isFbrSideDialog(dlg)) {
2057
2081
  throw new Error(`kernel-driver FBR invariant violation: persisted FBR state on non-FBR dialog (${dlg.id.valueOf()})`);
2058
2082
  }
2059
2083
  await persistDialogFbrState(dlg, undefined);
@@ -2071,7 +2095,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
2071
2095
  }
2072
2096
  const nextFbrState = (0, fbr_1.advanceFbrState)(persistedFbrState);
2073
2097
  if (nextFbrState) {
2074
- if (!isFbrSubdialogDialog(dlg)) {
2098
+ if (!isFbrSideDialog(dlg)) {
2075
2099
  throw new Error(`kernel-driver FBR invariant violation: persisted FBR state on non-FBR dialog (${dlg.id.valueOf()})`);
2076
2100
  }
2077
2101
  await persistDialogFbrState(dlg, nextFbrState);
@@ -2089,7 +2113,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
2089
2113
  dlg.activeGenSeqOrUndefined ??
2090
2114
  1,
2091
2115
  };
2092
- if (!isFbrSubdialogDialog(dlg)) {
2116
+ if (!isFbrSideDialog(dlg)) {
2093
2117
  throw new Error(`kernel-driver FBR invariant violation: persisted FBR state on non-FBR dialog (${dlg.id.valueOf()})`);
2094
2118
  }
2095
2119
  await persistDialogFbrState(dlg, undefined);
@@ -2115,10 +2139,10 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
2115
2139
  await dlg.processReminderUpdates();
2116
2140
  pubRemindersVer = dlg.remindersVer;
2117
2141
  }
2118
- // Tool execution may have created pending Q4H/subdialogs mid-round. Respect the
2142
+ // Tool execution may have created pending Q4H/sideDialogs mid-round. Respect the
2119
2143
  // dialog's actual suspension state here so auto-continue is decided in one place.
2120
2144
  const suspensionAfterToolRound = await dlg.getSuspensionStatus({
2121
- allowPendingSubdialogs: routed.hasImmediateFollowupToolCalls,
2145
+ allowPendingSideDialogs: routed.hasImmediateFollowupToolCalls,
2122
2146
  });
2123
2147
  if (!suspensionAfterToolRound.canDrive) {
2124
2148
  await resetDiligenceBudgetAfterQ4H(dlg, team);
@@ -2,9 +2,9 @@ import type { Dialog, DialogID } from '../../dialog';
2
2
  import type { KernelDriverCoreResult, KernelDriverDriveArgs, KernelDriverDriveCallbacks, KernelDriverDriveResult, KernelDriverEmitSayingArgs, KernelDriverEmitSayingResult, KernelDriverSupplyResponseArgs, KernelDriverSupplyResponseResult } from './types';
3
3
  export declare function driveDialogStream(...driveArgs: KernelDriverDriveArgs): KernelDriverDriveResult;
4
4
  export declare function emitSayingEventsBridge(...args: KernelDriverEmitSayingArgs): KernelDriverEmitSayingResult;
5
- export declare function supplyResponseToSupdialog(...args: KernelDriverSupplyResponseArgs): KernelDriverSupplyResponseResult;
5
+ export declare function supplyResponseToAskerDialog(...args: KernelDriverSupplyResponseArgs): KernelDriverSupplyResponseResult;
6
6
  export declare function driveDialogStreamCore(dlg: Dialog, callbacks: KernelDriverDriveCallbacks, humanPrompt?: KernelDriverDriveArgs[1], driveOptions?: KernelDriverDriveArgs[3]): Promise<KernelDriverCoreResult>;
7
- export declare function supplyResponseToSubdialogBridge(parentDialog: Dialog, subdialogId: DialogID, responseText: string, callType: 'A' | 'B' | 'C', callId?: string, status?: 'completed' | 'failed', calleeResponseRef?: {
7
+ export declare function supplyResponseToSideDialogBridge(parentDialog: Dialog, sideDialogId: DialogID, responseText: string, callType: 'A' | 'B' | 'C', callId?: string, status?: 'completed' | 'failed', calleeResponseRef?: {
8
8
  course: number;
9
9
  genseq: number;
10
10
  }): Promise<void>;
@@ -2,13 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.driveDialogStream = driveDialogStream;
4
4
  exports.emitSayingEventsBridge = emitSayingEventsBridge;
5
- exports.supplyResponseToSupdialog = supplyResponseToSupdialog;
5
+ exports.supplyResponseToAskerDialog = supplyResponseToAskerDialog;
6
6
  exports.driveDialogStreamCore = driveDialogStreamCore;
7
- exports.supplyResponseToSubdialogBridge = supplyResponseToSubdialogBridge;
7
+ exports.supplyResponseToSideDialogBridge = supplyResponseToSideDialogBridge;
8
8
  const drive_1 = require("./drive");
9
9
  const events_1 = require("./events");
10
10
  const flow_1 = require("./flow");
11
- const subdialog_1 = require("./subdialog");
11
+ const sideDialog_1 = require("./sideDialog");
12
12
  const types_1 = require("./types");
13
13
  function dispatchDrive(dialog, options) {
14
14
  if (options.humanPrompt) {
@@ -33,11 +33,11 @@ async function emitSayingEventsBridge(...args) {
33
33
  const [dlg, content] = args;
34
34
  return await (0, events_1.emitSayingEvents)(dlg, content);
35
35
  }
36
- async function supplyResponseToSupdialog(...args) {
37
- const [parentDialog, subdialogId, responseText, callType, callId, status, calleeResponseRef] = args;
38
- return await (0, subdialog_1.supplyResponseToSupdialog)({
36
+ async function supplyResponseToAskerDialog(...args) {
37
+ const [parentDialog, sideDialogId, responseText, callType, callId, status, calleeResponseRef] = args;
38
+ return await (0, sideDialog_1.supplyResponseToAskerDialog)({
39
39
  parentDialog,
40
- subdialogId,
40
+ sideDialogId,
41
41
  responseText,
42
42
  callType,
43
43
  callId,
@@ -51,10 +51,10 @@ async function supplyResponseToSupdialog(...args) {
51
51
  async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions) {
52
52
  return await (0, drive_1.driveDialogStreamCore)(dlg, callbacks, humanPrompt, driveOptions);
53
53
  }
54
- async function supplyResponseToSubdialogBridge(parentDialog, subdialogId, responseText, callType, callId, status, calleeResponseRef) {
55
- await (0, subdialog_1.supplyResponseToSupdialog)({
54
+ async function supplyResponseToSideDialogBridge(parentDialog, sideDialogId, responseText, callType, callId, status, calleeResponseRef) {
55
+ await (0, sideDialog_1.supplyResponseToAskerDialog)({
56
56
  parentDialog,
57
- subdialogId,
57
+ sideDialogId,
58
58
  responseText,
59
59
  callType,
60
60
  callId,
@@ -104,7 +104,7 @@ function buildFbrSystemPrompt(language, phase) {
104
104
  '# 扪心自问(FBR)支线对话',
105
105
  '',
106
106
  '- 你正在处理一次由 `freshBootsReasoning` 触发的 FBR 支线对话。',
107
- '- 诉请正文是主要任务上下文;不要假设能访问上游对话历史。',
107
+ '- 诉请正文是主要任务上下文;不要假设能访问诉请者一侧的对话历史。',
108
108
  '- 若使用可恢复会话,你可以使用本支线对话自身的会话历史作为显式上下文。',
109
109
  '- 发散阶段要对反直觉、离谱、少数派的候选想法保持开放,把它们当作待检验候选,而不是提前镇压。',
110
110
  '- 收敛阶段要自主去噪:只保留跨轮稳定共识、彼此能互证且能被诉请正文支撑的内容;未获独立支撑的离谱想法默认当噪音丢弃,不进入最终结论。',
@@ -115,11 +115,11 @@ function buildFbrSystemPrompt(language, phase) {
115
115
  ].join('\n');
116
116
  }
117
117
  return [
118
- '# Fresh Boots Reasoning (FBR) sideline dialog',
118
+ '# Fresh Boots Reasoning (FBR) Side Dialog',
119
119
  '',
120
- '- You are handling an FBR sideline dialog triggered by `freshBootsReasoning`.',
121
- '- The tellask body is the primary task context; do not assume access to upstream dialog history.',
122
- '- If this is a resumable session, you may use this sideline dialog’s own session history as explicit context.',
120
+ '- You are handling an FBR Side Dialog triggered by `freshBootsReasoning`.',
121
+ '- The tellask body is the primary task context; do not assume access to tellasker-side dialog history.',
122
+ '- If this is a resumable session, you may use this Side Dialog’s own session history as explicit context.',
123
123
  '- In divergence, stay open to counterintuitive, wild, or minority hypotheses; treat them as candidates to test instead of suppressing them early.',
124
124
  '- In convergence, denoise autonomously: keep only stable cross-round consensus, mutually reinforcing points, and body-grounded evidence; unsupported wild ideas default to noise and must not enter the final conclusion.',
125
125
  '- If critical context is missing, state what is missing and why it blocks a responsible conclusion.',
@@ -356,7 +356,7 @@ function advanceFbrState(state) {
356
356
  }
357
357
  function buildFbrPromptForState(args) {
358
358
  if (args.state.phase === 'divergence') {
359
- return (0, inter_dialog_format_1.formatAssignmentFromSupdialog)({
359
+ return (0, inter_dialog_format_1.formatAssignmentFromAskerDialog)({
360
360
  callName: 'freshBootsReasoning',
361
361
  fromAgentId: args.fromAgentId,
362
362
  toAgentId: args.toAgentId,
@@ -1,4 +1,4 @@
1
- import type { ScheduleDriveFn } from './subdialog';
1
+ import type { ScheduleDriveFn } from './sideDialog';
2
2
  import type { KernelDriverDriveArgs, KernelDriverDriveInvoker, KernelDriverDriveResult, KernelDriverDriveScheduler, KernelDriverRuntimeState } from './types';
3
3
  export declare function executeDriveRound(args: {
4
4
  runtime: KernelDriverRuntimeState;