dominds 1.23.10 → 1.24.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 (257) hide show
  1. package/dist/apps/runtime.js +2 -2
  2. package/dist/dialog-display-state.d.ts +2 -3
  3. package/dist/dialog-display-state.js +53 -145
  4. package/dist/dialog-drive-work.d.ts +4 -0
  5. package/dist/dialog-drive-work.js +40 -0
  6. package/dist/dialog-fork.d.ts +0 -1
  7. package/dist/dialog-fork.js +28 -32
  8. package/dist/dialog-generation-run.d.ts +4 -0
  9. package/dist/dialog-generation-run.js +24 -0
  10. package/dist/dialog-global-registry.d.ts +7 -8
  11. package/dist/dialog-global-registry.js +39 -33
  12. package/dist/dialog-instance-registry.js +12 -12
  13. package/dist/dialog-interruption.js +2 -2
  14. package/dist/dialog-latest-state.d.ts +4 -0
  15. package/dist/dialog-latest-state.js +14 -0
  16. package/dist/dialog.d.ts +31 -30
  17. package/dist/dialog.js +146 -56
  18. package/dist/docs/agent-priming.md +1 -1
  19. package/dist/docs/agent-priming.zh.md +1 -1
  20. package/dist/docs/app-constitution.md +1 -1
  21. package/dist/docs/app-constitution.zh.md +1 -1
  22. package/dist/docs/dialog-persistence.md +2 -2
  23. package/dist/docs/dialog-persistence.zh.md +2 -2
  24. package/dist/docs/dialog-system.md +72 -75
  25. package/dist/docs/dialog-system.zh.md +79 -82
  26. package/dist/docs/diligence-push.md +30 -40
  27. package/dist/docs/diligence-push.zh.md +15 -20
  28. package/dist/docs/dominds-agent-collaboration.zh.md +12 -10
  29. package/dist/docs/dominds-terminology.md +5 -2
  30. package/dist/docs/idle-reminder-wake.md +1 -1
  31. package/dist/docs/idle-reminder-wake.zh.md +1 -1
  32. package/dist/docs/issues/tellask-background-continuation-live-bugs-2026-05-17.zh.md +101 -0
  33. package/dist/docs/mcp-prompts-resources.md +13 -6
  34. package/dist/docs/mcp-support.md +18 -9
  35. package/dist/docs/mcp-support.zh.md +13 -8
  36. package/dist/docs/memory-system.md +51 -1
  37. package/dist/docs/memory-system.zh.md +51 -1
  38. package/dist/docs/team_mgmt-toolset.md +27 -10
  39. package/dist/docs/team_mgmt-toolset.zh.md +20 -9
  40. package/dist/docs/tellask-background-continuation-refactor.zh.md +1017 -0
  41. package/dist/docs/tellask-collab.md +4 -4
  42. package/dist/docs/tellask-collab.zh.md +4 -4
  43. package/dist/evt-registry.js +1 -0
  44. package/dist/llm/defaults.yaml +12 -9
  45. package/dist/llm/kernel-driver/drive.js +315 -67
  46. package/dist/llm/kernel-driver/engine.d.ts +1 -1
  47. package/dist/llm/kernel-driver/engine.js +4 -4
  48. package/dist/llm/kernel-driver/flow.js +203 -131
  49. package/dist/llm/kernel-driver/idle-reminder-wake.js +2 -4
  50. package/dist/llm/kernel-driver/loop.d.ts +4 -1
  51. package/dist/llm/kernel-driver/loop.js +268 -62
  52. package/dist/llm/kernel-driver/reply-guidance.js +29 -50
  53. package/dist/llm/kernel-driver/runtime.d.ts +10 -0
  54. package/dist/llm/kernel-driver/runtime.js +29 -84
  55. package/dist/llm/kernel-driver/sideDialog-txn.js +3 -0
  56. package/dist/llm/kernel-driver/sideDialog.d.ts +4 -13
  57. package/dist/llm/kernel-driver/sideDialog.js +165 -161
  58. package/dist/llm/kernel-driver/tellask-special.d.ts +5 -2
  59. package/dist/llm/kernel-driver/tellask-special.js +166 -184
  60. package/dist/llm/kernel-driver/types.d.ts +12 -8
  61. package/dist/mcp/config.d.ts +13 -5
  62. package/dist/mcp/config.js +37 -24
  63. package/dist/mcp/resources.d.ts +14 -3
  64. package/dist/mcp/resources.js +9 -6
  65. package/dist/mcp/supervisor.js +6 -1
  66. package/dist/mcp/tool-names.d.ts +2 -2
  67. package/dist/mcp/tool-names.js +4 -7
  68. package/dist/minds/system-prompt-parts.js +3 -0
  69. package/dist/persistence-errors.d.ts +1 -1
  70. package/dist/persistence.d.ts +81 -51
  71. package/dist/persistence.js +1747 -427
  72. package/dist/priming.d.ts +1 -1
  73. package/dist/priming.js +2 -2
  74. package/dist/recovery/proceeding-drive.js +46 -11
  75. package/dist/recovery/reply-special.js +42 -35
  76. package/dist/runtime/background-callee-summary.d.ts +2 -0
  77. package/dist/runtime/background-callee-summary.js +14 -0
  78. package/dist/runtime/driver-messages.d.ts +0 -8
  79. package/dist/runtime/driver-messages.js +0 -59
  80. package/dist/server/api-routes.js +40 -27
  81. package/dist/server/websocket-handler.js +39 -78
  82. package/dist/server.js +2 -2
  83. package/dist/shared-reminders.js +14 -3
  84. package/dist/skills/load.d.ts +7 -0
  85. package/dist/tools/cmd-runner.js +2 -0
  86. package/dist/tools/ctrl.js +6 -6
  87. package/dist/tools/os.js +2 -0
  88. package/dist/tools/pending-tellask-reminder.js +9 -9
  89. package/dist/tools/prompts/control/en/index.md +2 -0
  90. package/dist/tools/prompts/control/en/principles.md +1 -0
  91. package/dist/tools/prompts/control/en/tools.md +3 -0
  92. package/dist/tools/prompts/control/zh/index.md +2 -0
  93. package/dist/tools/prompts/control/zh/principles.md +1 -0
  94. package/dist/tools/prompts/control/zh/tools.md +3 -0
  95. package/dist/tools/prompts/personal_memory/en/principles.md +4 -1
  96. package/dist/tools/prompts/personal_memory/zh/principles.md +4 -1
  97. package/dist/tools/prompts/skills/en/index.md +1 -1
  98. package/dist/tools/prompts/skills/en/principles.md +5 -1
  99. package/dist/tools/prompts/skills/zh/index.md +1 -1
  100. package/dist/tools/prompts/skills/zh/principles.md +5 -1
  101. package/dist/tools/prompts/team_memory/en/principles.md +3 -0
  102. package/dist/tools/prompts/team_memory/en/scenarios.md +1 -1
  103. package/dist/tools/prompts/team_memory/zh/principles.md +3 -0
  104. package/dist/tools/prompts/team_memory/zh/scenarios.md +1 -1
  105. package/dist/tools/shell-capture-env.d.ts +1 -0
  106. package/dist/tools/shell-capture-env.js +44 -0
  107. package/dist/tools/skills.js +2 -0
  108. package/dist/tools/team_mgmt-mcp-manual.js +8 -8
  109. package/dist/tools/team_mgmt.js +34 -12
  110. package/dist/utils/task-package.js +9 -1
  111. package/package.json +3 -3
  112. package/webapp/dist/assets/{_basePickBy-CBh9Agsi.js → _basePickBy-DBvh4H3k.js} +3 -3
  113. package/webapp/dist/assets/_basePickBy-DBvh4H3k.js.map +1 -0
  114. package/webapp/dist/assets/{_baseUniq-D2UXV506.js → _baseUniq-CQmc9B-o.js} +2 -2
  115. package/webapp/dist/assets/_baseUniq-CQmc9B-o.js.map +1 -0
  116. package/webapp/dist/assets/{arc-CmeRUuzC.js → arc-DfLiOX_4.js} +2 -2
  117. package/webapp/dist/assets/arc-DfLiOX_4.js.map +1 -0
  118. package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-D5hfsb4A.js → architectureDiagram-2XIMDMQ5-CaTVJ5ev.js} +26 -8
  119. package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-CaTVJ5ev.js.map +1 -0
  120. package/webapp/dist/assets/{blockDiagram-VD42YOAC-BVswEa9D.js → blockDiagram-WCTKOSBZ-DlmAtUca.js} +187 -170
  121. package/webapp/dist/assets/blockDiagram-WCTKOSBZ-DlmAtUca.js.map +1 -0
  122. package/webapp/dist/assets/{c4Diagram-YG6GDRKO-Bgm6yzGX.js → c4Diagram-IC4MRINW-CNHKD5Sl.js} +4 -4
  123. package/webapp/dist/assets/c4Diagram-IC4MRINW-CNHKD5Sl.js.map +1 -0
  124. package/webapp/dist/assets/{channel-CDo0v82C.js → channel-BTWhZYd5.js} +2 -2
  125. package/webapp/dist/assets/channel-BTWhZYd5.js.map +1 -0
  126. package/webapp/dist/assets/{chunk-4BX2VUAB-DMqSdYxu.js → chunk-4BX2VUAB-CV1n0Uhy.js} +2 -2
  127. package/webapp/dist/assets/chunk-4BX2VUAB-CV1n0Uhy.js.map +1 -0
  128. package/webapp/dist/assets/{chunk-55IACEB6-CudmE3Fx.js → chunk-55IACEB6-C5r77i_p.js} +2 -2
  129. package/webapp/dist/assets/chunk-55IACEB6-C5r77i_p.js.map +1 -0
  130. package/webapp/dist/assets/{chunk-FMBD7UC4-BSVSuNxy.js → chunk-FMBD7UC4-DJ1yHxrH.js} +2 -2
  131. package/webapp/dist/assets/chunk-FMBD7UC4-DJ1yHxrH.js.map +1 -0
  132. package/webapp/dist/assets/{chunk-TZMSLE5B-aW2uEdtS.js → chunk-JSJVCQXG-Ahg9hCCm.js} +14 -6
  133. package/webapp/dist/assets/chunk-JSJVCQXG-Ahg9hCCm.js.map +1 -0
  134. package/webapp/dist/assets/{chunk-QN33PNHL-Cbf-pIxI.js → chunk-KX2RTZJC-qBrewKt0.js} +2 -2
  135. package/webapp/dist/assets/chunk-KX2RTZJC-qBrewKt0.js.map +1 -0
  136. package/webapp/dist/assets/{chunk-DI55MBZ5-CZCetJxI.js → chunk-NQ4KR5QH-1lEdM6Wi.js} +9 -7
  137. package/webapp/dist/assets/chunk-NQ4KR5QH-1lEdM6Wi.js.map +1 -0
  138. package/webapp/dist/assets/{chunk-QZHKN3VN-DYyIY8_q.js → chunk-QZHKN3VN-ChVR749G.js} +2 -2
  139. package/webapp/dist/assets/chunk-QZHKN3VN-ChVR749G.js.map +1 -0
  140. package/webapp/dist/assets/{chunk-B4BG7PRW-d5dfiagO.js → chunk-WL4C6EOR-BAUXgk0K.js} +171 -121
  141. package/webapp/dist/assets/chunk-WL4C6EOR-BAUXgk0K.js.map +1 -0
  142. package/webapp/dist/assets/{classDiagram-2ON5EDUG-C4-5PgVL.js → classDiagram-VBA2DB6C-DlqyhKve.js} +7 -6
  143. package/webapp/dist/assets/classDiagram-VBA2DB6C-DlqyhKve.js.map +1 -0
  144. package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-C4-5PgVL.js → classDiagram-v2-RAHNMMFH-DlqyhKve.js} +7 -6
  145. package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-DlqyhKve.js.map +1 -0
  146. package/webapp/dist/assets/{clone-DivPByZ0.js → clone-BFiIqUsc.js} +2 -2
  147. package/webapp/dist/assets/clone-BFiIqUsc.js.map +1 -0
  148. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-CwBAjMT3.js → cose-bilkent-S5V4N54A-JYvhtd6J.js} +2 -2
  149. package/webapp/dist/assets/cose-bilkent-S5V4N54A-JYvhtd6J.js.map +1 -0
  150. package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
  151. package/webapp/dist/assets/{dagre-6UL2VRFP-tC56AIio.js → dagre-KLK3FWXG-CCGcQh6w.js} +7 -7
  152. package/webapp/dist/assets/dagre-KLK3FWXG-CCGcQh6w.js.map +1 -0
  153. package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
  154. package/webapp/dist/assets/{diagram-PSM6KHXK-dEF_O6uj.js → diagram-E7M64L7V-BXC4AxAd.js} +10 -10
  155. package/webapp/dist/assets/diagram-E7M64L7V-BXC4AxAd.js.map +1 -0
  156. package/webapp/dist/assets/{diagram-QEK2KX5R-BC3CyB81.js → diagram-IFDJBPK2-B--Sb3XT.js} +9 -8
  157. package/webapp/dist/assets/diagram-IFDJBPK2-B--Sb3XT.js.map +1 -0
  158. package/webapp/dist/assets/{diagram-S2PKOQOG-BV-YMbA_.js → diagram-P4PSJMXO-CVqgtrh3.js} +8 -8
  159. package/webapp/dist/assets/diagram-P4PSJMXO-CVqgtrh3.js.map +1 -0
  160. package/webapp/dist/assets/{erDiagram-Q2GNP2WA-DIgdtwce.js → erDiagram-INFDFZHY-BniHaRTt.js} +96 -75
  161. package/webapp/dist/assets/erDiagram-INFDFZHY-BniHaRTt.js.map +1 -0
  162. package/webapp/dist/assets/{flowDiagram-NV44I4VS-C7Mawlld.js → flowDiagram-PKNHOUZH-wLKFBWTR.js} +98 -81
  163. package/webapp/dist/assets/flowDiagram-PKNHOUZH-wLKFBWTR.js.map +1 -0
  164. package/webapp/dist/assets/{ganttDiagram-JELNMOA3-DgaYLOeL.js → ganttDiagram-A5KZAMGK-DrptcitZ.js} +28 -3
  165. package/webapp/dist/assets/ganttDiagram-A5KZAMGK-DrptcitZ.js.map +1 -0
  166. package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-Dwv1ZLFB.js → gitGraphDiagram-K3NZZRJ6-C6l5aP44.js} +38 -46
  167. package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-C6l5aP44.js.map +1 -0
  168. package/webapp/dist/assets/graph-DXuQGYQN.js +782 -0
  169. package/webapp/dist/assets/graph-DXuQGYQN.js.map +1 -0
  170. package/webapp/dist/assets/{index-BGdI3lWA.css → index-BQoNJEGT.css} +19 -27
  171. package/webapp/dist/assets/{index-BsSFGqVX.js → index-DuQ1OCMG.js} +1435 -1348
  172. package/webapp/dist/assets/{index-BsSFGqVX.js.map → index-DuQ1OCMG.js.map} +1 -1
  173. package/webapp/dist/assets/{infoDiagram-HS3SLOUP-PDKRqD6y.js → infoDiagram-LFFYTUFH-BbleCSjW.js} +7 -7
  174. package/webapp/dist/assets/infoDiagram-LFFYTUFH-BbleCSjW.js.map +1 -0
  175. package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
  176. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-DmV-LZuk.js +966 -0
  177. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-DmV-LZuk.js.map +1 -0
  178. package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-DDD6YlTa.js → journeyDiagram-4ABVD52K-D3sQFfac.js} +5 -5
  179. package/webapp/dist/assets/journeyDiagram-4ABVD52K-D3sQFfac.js.map +1 -0
  180. package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-CK-CJzXm.js → kanban-definition-K7BYSVSG-BEeBlBtM.js} +5 -3
  181. package/webapp/dist/assets/kanban-definition-K7BYSVSG-BEeBlBtM.js.map +1 -0
  182. package/webapp/dist/assets/{layout-DRs2ltCp.js → layout-g7jjgV-W.js} +5 -5
  183. package/webapp/dist/assets/layout-g7jjgV-W.js.map +1 -0
  184. package/webapp/dist/assets/{linear-CiMu0dYF.js → linear-D_X91Yek.js} +2 -2
  185. package/webapp/dist/assets/linear-D_X91Yek.js.map +1 -0
  186. package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-C8yEoHXx.js → mindmap-definition-YRQLILUH-NkMAIgRY.js} +7 -5
  187. package/webapp/dist/assets/mindmap-definition-YRQLILUH-NkMAIgRY.js.map +1 -0
  188. package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
  189. package/webapp/dist/assets/{pieDiagram-ADFJNKIX-BhtVILXQ.js → pieDiagram-SKSYHLDU-Z6E4GEPC.js} +8 -8
  190. package/webapp/dist/assets/pieDiagram-SKSYHLDU-Z6E4GEPC.js.map +1 -0
  191. package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-B7Xuuv_G.js → quadrantDiagram-337W2JSQ-BH8hfOuU.js} +3 -3
  192. package/webapp/dist/assets/quadrantDiagram-337W2JSQ-BH8hfOuU.js.map +1 -0
  193. package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-DY6Q4U6l.js → requirementDiagram-Z7DCOOCP-DRJkvoQI.js} +16 -6
  194. package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-DRJkvoQI.js.map +1 -0
  195. package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-DZPox4PX.js → sankeyDiagram-WA2Y5GQK-D2VwjtJo.js} +2 -2
  196. package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-D2VwjtJo.js.map +1 -0
  197. package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-Bg6GPP0w.js → sequenceDiagram-2WXFIKYE-Cq-gEPOw.js} +601 -201
  198. package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-Cq-gEPOw.js.map +1 -0
  199. package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-CcskYNpn.js → stateDiagram-RAJIS63D-CFM8Jqke.js} +9 -9
  200. package/webapp/dist/assets/stateDiagram-RAJIS63D-CFM8Jqke.js.map +1 -0
  201. package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-Dja5UwuW.js → stateDiagram-v2-FVOUBMTO-Dip5iGX_.js} +5 -5
  202. package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-Dip5iGX_.js.map +1 -0
  203. package/webapp/dist/assets/{timeline-definition-IT6M3QCI-CA-Wvxg8.js → timeline-definition-YZTLITO2-OI9JzMjX.js} +3 -3
  204. package/webapp/dist/assets/timeline-definition-YZTLITO2-OI9JzMjX.js.map +1 -0
  205. package/webapp/dist/assets/{treemap-GDKQZRPO-CF_Fur4n.js → treemap-KZPCXAKY-CtNF416A.js} +37 -24
  206. package/webapp/dist/assets/treemap-KZPCXAKY-CtNF416A.js.map +1 -0
  207. package/webapp/dist/assets/vennDiagram-LZ73GAT5-CjaPj4FZ.js +2487 -0
  208. package/webapp/dist/assets/vennDiagram-LZ73GAT5-CjaPj4FZ.js.map +1 -0
  209. package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-CYc3vOkZ.js → xychartDiagram-JWTSCODW-21mBt9iu.js} +4 -4
  210. package/webapp/dist/assets/xychartDiagram-JWTSCODW-21mBt9iu.js.map +1 -0
  211. package/webapp/dist/index.html +2 -2
  212. package/dist/docs/tellask-revive-context-refactor.zh.md +0 -604
  213. package/webapp/dist/assets/_basePickBy-CBh9Agsi.js.map +0 -1
  214. package/webapp/dist/assets/_baseUniq-D2UXV506.js.map +0 -1
  215. package/webapp/dist/assets/arc-CmeRUuzC.js.map +0 -1
  216. package/webapp/dist/assets/architectureDiagram-VXUJARFQ-D5hfsb4A.js.map +0 -1
  217. package/webapp/dist/assets/blockDiagram-VD42YOAC-BVswEa9D.js.map +0 -1
  218. package/webapp/dist/assets/c4Diagram-YG6GDRKO-Bgm6yzGX.js.map +0 -1
  219. package/webapp/dist/assets/channel-CDo0v82C.js.map +0 -1
  220. package/webapp/dist/assets/chunk-4BX2VUAB-DMqSdYxu.js.map +0 -1
  221. package/webapp/dist/assets/chunk-55IACEB6-CudmE3Fx.js.map +0 -1
  222. package/webapp/dist/assets/chunk-B4BG7PRW-d5dfiagO.js.map +0 -1
  223. package/webapp/dist/assets/chunk-DI55MBZ5-CZCetJxI.js.map +0 -1
  224. package/webapp/dist/assets/chunk-FMBD7UC4-BSVSuNxy.js.map +0 -1
  225. package/webapp/dist/assets/chunk-QN33PNHL-Cbf-pIxI.js.map +0 -1
  226. package/webapp/dist/assets/chunk-QZHKN3VN-DYyIY8_q.js.map +0 -1
  227. package/webapp/dist/assets/chunk-TZMSLE5B-aW2uEdtS.js.map +0 -1
  228. package/webapp/dist/assets/classDiagram-2ON5EDUG-C4-5PgVL.js.map +0 -1
  229. package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-C4-5PgVL.js.map +0 -1
  230. package/webapp/dist/assets/clone-DivPByZ0.js.map +0 -1
  231. package/webapp/dist/assets/cose-bilkent-S5V4N54A-CwBAjMT3.js.map +0 -1
  232. package/webapp/dist/assets/dagre-6UL2VRFP-tC56AIio.js.map +0 -1
  233. package/webapp/dist/assets/diagram-PSM6KHXK-dEF_O6uj.js.map +0 -1
  234. package/webapp/dist/assets/diagram-QEK2KX5R-BC3CyB81.js.map +0 -1
  235. package/webapp/dist/assets/diagram-S2PKOQOG-BV-YMbA_.js.map +0 -1
  236. package/webapp/dist/assets/erDiagram-Q2GNP2WA-DIgdtwce.js.map +0 -1
  237. package/webapp/dist/assets/flowDiagram-NV44I4VS-C7Mawlld.js.map +0 -1
  238. package/webapp/dist/assets/ganttDiagram-JELNMOA3-DgaYLOeL.js.map +0 -1
  239. package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-Dwv1ZLFB.js.map +0 -1
  240. package/webapp/dist/assets/graph-saC_350a.js +0 -425
  241. package/webapp/dist/assets/graph-saC_350a.js.map +0 -1
  242. package/webapp/dist/assets/infoDiagram-HS3SLOUP-PDKRqD6y.js.map +0 -1
  243. package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-DDD6YlTa.js.map +0 -1
  244. package/webapp/dist/assets/kanban-definition-3W4ZIXB7-CK-CJzXm.js.map +0 -1
  245. package/webapp/dist/assets/layout-DRs2ltCp.js.map +0 -1
  246. package/webapp/dist/assets/linear-CiMu0dYF.js.map +0 -1
  247. package/webapp/dist/assets/mindmap-definition-VGOIOE7T-C8yEoHXx.js.map +0 -1
  248. package/webapp/dist/assets/pieDiagram-ADFJNKIX-BhtVILXQ.js.map +0 -1
  249. package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-B7Xuuv_G.js.map +0 -1
  250. package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-DY6Q4U6l.js.map +0 -1
  251. package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-DZPox4PX.js.map +0 -1
  252. package/webapp/dist/assets/sequenceDiagram-WL72ISMW-Bg6GPP0w.js.map +0 -1
  253. package/webapp/dist/assets/stateDiagram-FKZM4ZOC-CcskYNpn.js.map +0 -1
  254. package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-Dja5UwuW.js.map +0 -1
  255. package/webapp/dist/assets/timeline-definition-IT6M3QCI-CA-Wvxg8.js.map +0 -1
  256. package/webapp/dist/assets/treemap-GDKQZRPO-CF_Fur4n.js.map +0 -1
  257. package/webapp/dist/assets/xychartDiagram-PRI3JC2R-CYc3vOkZ.js.map +0 -1
@@ -62,11 +62,11 @@ A **Q4H** is a pending question raised by a dialog (main or sideDialog) that req
62
62
 
63
63
  ### SideDialog Index (subdlg.yaml)
64
64
 
65
- A **subdlg.yaml** file indexes pending sideDialogs that an askerDialog is waiting for. Like `q4h.yaml`, it is an index file, not the source of truth:
65
+ A **subdlg.yaml** file indexes pending background callee dialogs for an askerDialog. Like `q4h.yaml`, it is an index file, not the source of truth:
66
66
 
67
- - The index tracks which sideDialog IDs the tellasker is waiting for
67
+ - The index tracks which sideDialog IDs still owe a response to the caller
68
68
  - Actual sideDialog state is verified from disk (done/ directory)
69
- - Used by the backend coroutine for crash recovery and auto-revive
69
+ - Used by the backend coroutine for crash recovery, observability, and result-arrival handling
70
70
 
71
71
  ### SideDialog Registry
72
72
 
@@ -113,13 +113,13 @@ Each Dialog object carries an exclusive mutex with an associated wait queue. Whe
113
113
  Backend coroutines drive dialogs using the following pattern:
114
114
 
115
115
  1. Scan the Global Registry to identify main dialogs needing driving
116
- 2. For each candidate, check resumption conditions (Q4H answered, sideDialog completions received)
116
+ 2. For each candidate, check concrete drive sources (Q4H answered, queued prompt, result arrival, open generation recovery, etc.)
117
117
  3. Acquire the dialog's mutex before driving
118
- 4. Execute the generation loop until suspension point or completion
118
+ 4. Execute the generation loop until it naturally idles, reaches Q4H, or completes
119
119
  5. Release the mutex
120
120
  6. Persist all state changes to storage
121
121
 
122
- The driving loop continues until a dialog suspends (awaiting Q4H or sideDialog) or completes. When conditions change (user answers Q4H, sideDialog finishes), the backend detects these via storage checks and resumes driving automatically.
122
+ The driving loop continues until a dialog naturally idles, reaches Q4H, or completes. Pending sideDialogs are background callee work; they do not suspend the caller by themselves. However, when the only remaining fact is a pending active callee dispatch and there is no other concrete drive source, the caller should naturally idle rather than keep the mainline spinning through Diligence Push. When a user answers Q4H or a callee result arrives, the backend records that concrete fact and drives the affected dialog only from that fact.
123
123
 
124
124
  ### Frontend Integration
125
125
 
@@ -149,8 +149,8 @@ Missing broadcaster is therefore a runtime bootstrap invariant violation, not a
149
149
  Dialog state is persisted to storage at key points:
150
150
 
151
151
  - After each message generation
152
- - On suspension (Q4H raised, sideDialog created)
153
- - On resumption (Q4H answered, sideDialog completed)
152
+ - When Q4H is raised, a background callee dialog is created, or another observable fact changes
153
+ - When Q4H is answered or a callee result arrives
154
154
  - On completion
155
155
 
156
156
  This ensures crash recovery and enables the backend to resume from any persisted state without depending on frontend state.
@@ -175,23 +175,23 @@ When a dialog still carries an inter-dialog reply obligation, but the user tempo
175
175
  After the user clicks `Continue`, the backend MUST re-evaluate fresh persistence facts and decide which true-source case now applies. It must not infer the result purely from the visible `displayState`:
176
176
 
177
177
  - **Case 1: the dialog no longer has a reply obligation**
178
- If there is also no blocker, the dialog should simply continue driving. If it has already become ordinary idle-waiting-user, then `resume_dialog` is no longer actually resumable.
179
- - **Case 2: the dialog still has a reply obligation and is still suspended**
180
- Typical examples are pending Q4H or pending sideDialogs. In this case, `Continue` should exit the interjection-paused projection and restore the true `blocked` state.
178
+ If there is also no user-wait fact such as Q4H, the dialog should simply continue driving. If it has already become ordinary idle-waiting-user, then `resume_dialog` is no longer actually resumable.
179
+ - **Case 2: the dialog still has a reply obligation and is waiting for user input**
180
+ The canonical example is pending Q4H. In this case, `Continue` should exit the interjection-paused projection and restore the true `blocked` state.
181
181
  - **Case 3: the dialog still has a reply obligation but is no longer suspended and is eligible to proceed**
182
- For example, the blocker has disappeared, or a queued prompt provides a valid continuation path. In this case, `Continue` must not first fall back to an intermediate placeholder `blocked/idle` state; it should keep driving immediately.
182
+ For example, the Q4H/user-wait fact has disappeared, or a queued prompt provides a valid continuation path. In this case, `Continue` must not first fall back to an intermediate placeholder `blocked/idle` state; it should keep driving immediately.
183
183
 
184
184
  **This leads to two implementation constraints**:
185
185
 
186
186
  - `refreshRunControlProjectionFromPersistenceFacts()` MUST preserve the special "interjection handled; original task paused" `stopped` projection until the user explicitly clicks `Continue`; otherwise the UI collapses back to ordinary `blocked` too early and breaks multi-turn interjection UX. Conversely, when there is no parked original task, this paused projection should not be created at all.
187
187
  - The actual outcome of `Continue` MUST be decided in the resume drive path by re-reading fresh persistence facts. "Continue is clickable" does not mean "the dialog will definitely enter proceeding immediately".
188
188
  - If `Continue` reveals that the true state is still `blocked`, the reply-obligation reassertion copy should be materialized immediately as a runtime guide in both `dlg.msgs` and persisted course history, while also surfacing as a frontend bubble. That lets the later real resume path rely on ordinary context replay instead of synthesizing a second duplicate runtime prompt.
189
- - The run-control toolbar's `resumable` count should align with "manual Continue attempt is meaningful". Therefore an interjection-paused `stopped` dialog still counts as resumable even when underlying blocker facts remain, because the business meaning of `Continue` there is "exit the temporary paused projection and re-evaluate from source-of-truth facts".
189
+ - The run-control toolbar's `resumable` count should align with "manual Continue attempt is meaningful". Therefore an interjection-paused `stopped` dialog still counts as resumable even when underlying user-wait facts remain, because the business meaning of `Continue` there is "exit the temporary paused projection and re-evaluate from source-of-truth facts".
190
190
 
191
191
  **Mental-model warning**:
192
192
 
193
193
  - Do not reason about this flow from `displayState.kind === 'stopped'` alone.
194
- - Do not reason about it from blocker facts alone and then wonder why the UI still shows `stopped`.
194
+ - Do not reason about it from user-wait facts alone and then wonder why the UI still shows `stopped`.
195
195
  - Do not reason about it from `resume_dialog` eligibility alone and assume resumption always means immediate running.
196
196
  - Do not flatten every `origin === 'user'` prompt into "interjection"; a non-empty `q4hAnswerCallId` means askHuman answer continuation and follows a different semantic path.
197
197
 
@@ -225,10 +225,10 @@ flowchart TD
225
225
 
226
226
  **Behavior**:
227
227
 
228
- 1. Current sideDialog **suspends**
228
+ 1. Current callee records the ask-back and waits for the tellasker's answer
229
229
  2. Driver switches to drive the **tellasker** (direct askerDialog for TYPE A; uses `sideDialog.askerDialog` reference)
230
230
  3. Tellasker response flows back to the sideDialog
231
- 4. SideDialog **resumes** with tellasker's response in context
231
+ 4. Callee continues with the tellasker's response in context
232
232
 
233
233
  **Key Characteristics**:
234
234
 
@@ -241,9 +241,9 @@ flowchart TD
241
241
 
242
242
  - If a Side Dialog has completed all assigned goals and can deliver the final result, it MUST reply directly with the response body; do not use `tellaskBack` to send final delivery.
243
243
  - Runtime treats that direct reply as the completion delivery to the tellasker and injects the work-language marker automatically (`【Completed】` in English work language, `【最终完成】` in Chinese work language).
244
- - There is no separate technical state for keeping Side Dialogs active. A Side Dialog continues because normal business state still requires work: a tool result needs reaction, Q4H is pending, a downstream Side Dialog is pending, or an explicit runtime/user prompt is queued. Do not add a side path whose only purpose is to keep a dialog active.
244
+ - There is no separate technical state for keeping Side Dialogs active. A Side Dialog continues because normal business state still requires work: a tool result needs reaction, Q4H is pending, a downstream callee reply is pending, or an explicit runtime/user prompt is queued. Do not add a side path whose only purpose is to keep a dialog active.
245
245
  - Reply-obligation tail handling is one small state machine: after runtime reaches a non-suspended tail, it inspects the newest non-empty assistant generation candidate produced by the current drive, preferring public saying over thinking when both exist on the same generation. If a Side Dialog still owes `replyTellask*` and has produced that candidate content without using the exact reply tool, runtime queues one reply-tool reminder. If the next answer to that reminder is still only thinking/saying, runtime intentionally delivers that content through direct-reply fallback and marks it as fallback.
246
- - Runtime must not infer this tail state by scanning historical message text. Historical context is for the model and the UI; scheduling state must be carried explicitly by the current drive result, active reply obligation, pending blocker indexes, or queued prompts.
246
+ - Runtime must not infer this tail state by scanning historical message text. Historical context is for the model and the UI; scheduling state must be carried explicitly by the current drive result, active reply obligation, pending Q4H indexes, or queued prompts.
247
247
  - If the work is unfinished, do not default to `tellaskBack`; first use team SOP / role ownership to judge whether a responsible owner is already clear, and if yes for execution work, directly use `tellask` / `tellaskSessionless` for that owner.
248
248
  - Use `tellaskBack({ tellaskContent: "..." })` only when the tellasker must clarify the request, decide a tradeoff, confirm acceptance criteria, provide missing input, or current SOP cannot determine ownership.
249
249
  - **FBR exception**: FBR Side Dialogs forbid all tellask calls (including `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`); they must list missing context and return.
@@ -280,10 +280,10 @@ Tellasker: "orchestrator" (agentId)
280
280
  LLM emits: tellaskSessionless({ targetAgentId: "orchestrator", tellaskContent: "..." }) How should I handle the database migration?
281
281
 
282
282
  Result:
283
- - sub-001 suspends
283
+ - sub-001 records the ask-back and waits for the tellasker's answer
284
284
  - Driver drives orchestrator with the question
285
285
  - orchestrator responds with guidance
286
- - sub-001 resumes with orchestrator's response
286
+ - sub-001 continues with orchestrator's response
287
287
  ```
288
288
 
289
289
  ### TYPE B: Registered SideDialog Tellask (Type B / `Tellask Session` / Registered Session Tellask)
@@ -307,9 +307,9 @@ headline text is ignored for tellaskSession parsing.
307
307
  1. Check registry for existing sideDialog with key `agentId!sessionSlug`
308
308
  2. **If exists**: Resume the registered sideDialog
309
309
  3. **If not exists**: Create NEW sideDialog AND register it with key `agentId!sessionSlug`
310
- 4. Tellasker **suspends** while sideDialog runs
311
- 5. SideDialog response flows back to the tellasker
312
- 6. Tellasker **resumes** with sideDialog's response
310
+ 4. Tellasker records a background callee fact; active callee dispatches do not suspend the tellasker by themselves
311
+ 5. SideDialog response flows back to the tellasker as a result-arrival fact
312
+ 6. The tellasker may continue from result arrival, a queued prompt, user input, Diligence Push when no active callee is pending, or another explicit driving source
313
313
 
314
314
  **Current Tellasker Tracking (important for reuse):**
315
315
 
@@ -356,20 +356,18 @@ Result (first call):
356
356
  - Registry lookup: no "researcher!market-analysis" exists
357
357
  - Create new sideDialog "researcher!market-analysis"
358
358
  - Register it in main dialog's registry
359
- - orchestrator suspends
359
+ - orchestrator records background callee work
360
360
  - Drive researcher sideDialog
361
- - Response flows back to orchestrator
362
- - orchestrator resumes
361
+ - Response arrives back to orchestrator as a concrete fact
363
362
 
364
363
  LLM emits again: tellask({ targetAgentId: "researcher", sessionSlug: "market-analysis", tellaskContent: "..." })
365
364
 
366
365
  Result (second call):
367
366
  - Registry lookup: "researcher!market-analysis" exists
368
367
  - Resume existing sideDialog
369
- - orchestrator suspends
368
+ - orchestrator records background callee work
370
369
  - Drive existing researcher sideDialog from where it left off
371
- - Response flows back to orchestrator
372
- - orchestrator resumes
370
+ - Response arrives back to orchestrator as a concrete fact
373
371
  ```
374
372
 
375
373
  ### TYPE C: Transient SideDialog Tellask (Type C / `Fresh Tellask` / One-shot Tellask)
@@ -384,13 +382,13 @@ Result (second call):
384
382
 
385
383
  **Behavior**:
386
384
 
387
- 1. Current dialog **suspends**
385
+ 1. Current dialog records a background callee fact; active callee dispatches do not suspend it by themselves
388
386
  2. Create **NEW sideDialog** with the specified agentId
389
387
  3. Drive the new sideDialog:
390
388
  - For general Type C, the sideDialog is full-fledged (TellaskBack, teammate Tellasks, tools per config).
391
389
  - For `freshBootsReasoning({ tellaskContent: "..." })`, runtime applies the FBR tool-less policy (no tools; no Tellasks).
392
- 4. SideDialog response flows back to the tellasker
393
- 5. Tellasker **resumes** with sideDialog's response
390
+ 4. SideDialog response flows back to the tellasker as a result-arrival fact
391
+ 5. The tellasker may continue from result arrival, a queued prompt, user input, Diligence Push when no active callee is pending, or another explicit driving source
394
392
 
395
393
  **Key Characteristics**:
396
394
 
@@ -411,19 +409,18 @@ Current dialog: orchestrator
411
409
  LLM emits: @code-reviewer Please review this PR
412
410
 
413
411
  Result:
414
- - orchestrator suspends
412
+ - orchestrator records background callee work
415
413
  - Create NEW sideDialog with agentId "code-reviewer"
416
414
  - Drive the code-reviewer sideDialog (it can make its own Tellasks, tools, etc.)
417
- - code-reviewer completes with review findings
418
- - orchestrator resumes with review in context
415
+ - code-reviewer completes; review findings arrive as a result-arrival fact
419
416
 
420
417
  LLM emits again: @code-reviewer Review this other PR
421
418
 
422
419
  Result:
423
- - orchestrator suspends
420
+ - orchestrator records background callee work
424
421
  - Create ANOTHER NEW sideDialog (not the same as before!)
425
422
  - Drive the new code-reviewer sideDialog
426
- - orchestrator resumes with new review in context
423
+ - the new review arrives as a result-arrival fact
427
424
  ```
428
425
 
429
426
  ### Comparison Summary
@@ -435,7 +432,7 @@ Result:
435
432
  | **Registry Lookup** | No (uses `sideDialog.askerDialog`) | Yes (`agentId!sessionSlug`) | No (never registered) |
436
433
  | **Resumption** | No (askerDialog not a sideDialog) | Yes (lookup finds existing) | No (always new) |
437
434
  | **Registration** | Not applicable | Created AND registered | Never registered |
438
- | **Tellasker Behavior** | SideDialog suspends | Tellasker suspends | Tellasker suspends |
435
+ | **Tellasker Behavior** | Callee waits for tellasker reply | Records background callee fact | Records background callee fact |
439
436
  | **SideDialog Capabilities** | Full (TellaskBack, teammates, tools) | Full (TellaskBack, teammates, tools) | Full (TellaskBack, teammates, tools) |
440
437
  | **Use Case** | Clarification from tellasker (`TellaskBack`) | Resume persistent subtask (`Tellask Session`) | One-off independent task (`Fresh Tellask`) |
441
438
 
@@ -663,7 +660,7 @@ sequenceDiagram
663
660
  participant Driver as driveDialogStream
664
661
 
665
662
  Asker->>Side: creates sideDialog (Type B or C)
666
- Note over Asker: AskerDialog is blocked on pending sideDialogs
663
+ Note over Asker: AskerDialog records background callee work
667
664
 
668
665
  Side->>WS: emits askHuman({ tellaskContent: "..." }) question
669
666
  WS-->>UI: questions_count_update
@@ -672,7 +669,7 @@ sequenceDiagram
672
669
  UI->>WS: drive_dialog_by_user_answer(dialog=sideDialogId, questionId, content)
673
670
  WS->>Driver: driveDialogStream(sideDialog, human answer)
674
671
  Driver-->>Side: sideDialog resumes
675
- Side-->>Asker: response supplied (clears pending-sideDialogs)
672
+ Side-->>Asker: response supplied (result-arrival fact; clears this pending callee)
676
673
  ```
677
674
 
678
675
  ### Q4H and Mental Clarity Operations
@@ -730,39 +727,38 @@ sequenceDiagram
730
727
  Asker->>Driver: create sideDialog (adds to pending list)
731
728
  Driver->>Side: drive sideDialog (detached execution)
732
729
  Side-->>Store: persist final response
733
- Driver-->>Asker: supply response + clear pending-sideDialogs
734
- opt Asker is root and now unblocked
735
- Driver-->>Asker: set needsDrive=true (auto-revive)
730
+ Driver-->>Asker: supply result-arrival fact + clear pending callee
731
+ opt result arrival creates an explicit drive source
732
+ Driver-->>Asker: set needsDrive=true
736
733
  end
737
734
  ```
738
735
 
739
- ### SideDialog Q4H and AskerDialog Revival
736
+ ### SideDialog Q4H and Tellasker Result Arrival
740
737
 
741
- When a sideDialog has raised Q4H and is waiting for human input, the askerDialog's auto-revival logic must handle this:
738
+ When a sideDialog has raised Q4H and is waiting for human input, the tellasker's result-arrival logic must respect that no callee result exists yet:
742
739
 
743
740
  ```typescript
744
- // AskerDialog checks sideDialog completion status
745
- async function checkSideDialogRevival(askerDialog: Dialog): Promise<void> {
746
- const pending = await loadPendingSideDialogs(askerDialog.id);
741
+ // Tellasker checks callee completion status
742
+ async function checkCalleeResultArrival(tellasker: Dialog): Promise<void> {
743
+ const pending = await loadActiveCalleeDispatches(tellasker.id);
747
744
 
748
745
  for (const p of pending) {
749
- // Check if sideDialog has unresolved Q4H
746
+ // Check if callee has unresolved Q4H
750
747
  const sideDialogQ4H = await DialogPersistence.loadQuestions4HumanState(p.sideDialogId);
751
748
 
752
749
  if (sideDialogQ4H.length > 0) {
753
- // SideDialog is waiting for human input
754
- // Do NOT auto-revive - wait for human to answer Q4H
750
+ // Callee is waiting for human input; no result-arrival fact exists yet.
755
751
  log.debug(
756
- `SideDialog ${p.sideDialogId} has ${sideDialogQ4H.length} Q4H, skipping auto-revive`,
752
+ `callee ${p.sideDialogId} has ${sideDialogQ4H.length} Q4H, skipping result arrival`,
757
753
  );
758
754
  continue;
759
755
  }
760
756
 
761
- // SideDialog has no Q4H, check if it's done
757
+ // Callee has no Q4H, check if it's done
762
758
  const isDone = await isSideDialogCompleted(p.sideDialogId);
763
759
  if (isDone) {
764
- // Incorporate response and auto-revive
765
- await incorporateSideDialogResponse(askerDialog, p.sideDialogId);
760
+ // Incorporate response and schedule from this concrete fact.
761
+ await incorporateSideDialogResponse(tellasker, p.sideDialogId);
766
762
  }
767
763
  }
768
764
  }
@@ -1090,8 +1086,8 @@ An entire main dialog tree can be forked at the start of a chosen root generatio
1090
1086
  **Post-fork actions** (returned by backend to UI):
1091
1087
 
1092
1088
  - `draft_user_text`: if the target generation is a user message, prefill that text into the new dialog input and wait for user confirmation
1093
- - `restore_pending`: if there were pending Q4H or pending sideDialogs before the cutoff, restore those blocking states in the new main dialog
1094
- - `auto_continue`: if there is no pending blocker before the cutoff, initialize the new main dialog as `interrupted(system_stop: fork_dialog_continue)` and have UI immediately send `resume_dialog`
1089
+ - `restore_pending`: if there was pending Q4H before the cutoff, restore that user-wait state in the new main dialog; active callee dispatches are copied as background callee facts, not blockers
1090
+ - `auto_continue`: if there is no pending Q4H or other user-wait fact before the cutoff, initialize the new main dialog as `interrupted(system_stop: fork_dialog_continue)` and have UI immediately send `resume_dialog`
1095
1091
 
1096
1092
  **Consistency requirements**:
1097
1093
 
@@ -1108,7 +1104,7 @@ An entire main dialog tree can be forked at the start of a chosen root generatio
1108
1104
  - Tasks are finished successfully
1109
1105
  - Agents explicitly mark them complete
1110
1106
  - AskerDialogs determine subtasks are no longer needed
1111
- - All pending sideDialogs are complete AND all Q4H are answered
1107
+ - The responsible Dialog Responder determines no pending callee result or Q4H is still needed before completion
1112
1108
 
1113
1109
  **Registry on Completion**: When a main dialog completes, its registry moves with it to the `done/` directory and is preserved for potential restoration.
1114
1110
 
@@ -1213,7 +1209,7 @@ Additionally, some providers (especially Anthropic-compatible endpoints) enforce
1213
1209
 
1214
1210
  **Tool Invocation**: Mental clarity tools are invoked through CLI commands or agent actions.
1215
1211
 
1216
- **Status Monitoring**: Dialog status, pending sideDialogs, Q4H count, and registered sideDialogs can be inspected through CLI tools.
1212
+ **Status Monitoring**: Dialog status, active callee dispatches, Q4H count, and registered sideDialogs can be inspected through CLI tools.
1217
1213
 
1218
1214
  ### Agent Integration
1219
1215
 
@@ -1236,7 +1232,7 @@ driven is derived from persisted facts:
1236
1232
 
1237
1233
  - Persisted status (API/index): `running | completed | archived`
1238
1234
  - Persisted `latest.yaml`: `status`, `needsDrive`, `generating`
1239
- - Derived gates: `hasPendingQ4H()` and `hasPendingSideDialogs()`
1235
+ - Derived gates: `hasPendingQ4H()`; active callee dispatches are background callee facts, not a drive gate
1240
1236
 
1241
1237
  **Persisted status lifecycle:**
1242
1238
 
@@ -1252,9 +1248,10 @@ stateDiagram-v2
1252
1248
 
1253
1249
  ```mermaid
1254
1250
  flowchart TD
1255
- A[status=running] --> B{canDrive?\\n(no pending Q4H\\n& no pending sideDialogs)}
1256
- B -- no --> S[Suspended\\n(waiting on Q4H and/or sideDialogs)]
1257
- S -->|Q4H answered\\nor sideDialog responses supplied| C{needsDrive?}
1251
+ A[status=running] --> B{canDrive?\\n(no pending Q4H)}
1252
+ B -- no --> S[Suspended\\n(waiting on Q4H)]
1253
+ S -->|Q4H answered| C{needsDrive?}
1254
+ R[result arrival] --> C
1258
1255
  B -- yes --> C{needsDrive?}
1259
1256
  C -- no --> I[Idle\\n(waiting for trigger)]
1260
1257
  C -- yes --> D[Drive loop\\n(generating=true while streaming)]
@@ -1307,9 +1304,9 @@ sequenceDiagram
1307
1304
  Driver->>Side: create + register + drive
1308
1305
  end
1309
1306
  Side-->>Driver: final response
1310
- Driver-->>Tellasker: supply response + clear pending-sideDialogs
1311
- opt Tellasker is the main dialog and now unblocked
1312
- Driver-->>Tellasker: set `needsDrive=true` (auto-revive scheduling)
1307
+ Driver-->>Tellasker: supply result-arrival fact + clear pending callee
1308
+ opt result arrival creates an explicit drive source
1309
+ Driver-->>Tellasker: set `needsDrive=true`
1313
1310
  end
1314
1311
  ```
1315
1312
 
@@ -1371,7 +1368,7 @@ sequenceDiagram
1371
1368
  participant Driver as driveDialogStream
1372
1369
 
1373
1370
  Asker->>Side: create sideDialog (Type B or C)
1374
- Note over Asker,Side: AskerDialog becomes blocked on pending sideDialogs
1371
+ Note over Asker,Side: AskerDialog records background callee work
1375
1372
  Side->>WS: emits askHuman({ tellaskContent: "..." }) question (Q4H)
1376
1373
  WS-->>UI: questions_count_update (global)
1377
1374
 
@@ -1381,10 +1378,10 @@ sequenceDiagram
1381
1378
  WS->>Side: clear q4h.yaml entry
1382
1379
  WS->>Driver: driveDialogStream(sideDialog, user answer)
1383
1380
  Driver-->>Side: sideDialog resumes and continues
1384
- Side-->>Asker: sideDialog response supplied to tellasker (clears pending-sideDialogs)
1381
+ Side-->>Asker: sideDialog response supplied to tellasker (result-arrival fact; clears this pending callee)
1385
1382
 
1386
- opt Asker is the main dialog and now unblocked
1387
- Asker-->>Asker: set needsDrive=true (auto-revive)
1383
+ opt Asker has a result-arrival drive source
1384
+ Asker-->>Asker: set needsDrive=true (result-arrival handling)
1388
1385
  end
1389
1386
  ```
1390
1387
 
@@ -1426,7 +1423,7 @@ sequenceDiagram
1426
1423
  Asker->>Side: createSideDialog()
1427
1424
  Side->>Store: recordQuestionForHuman()
1428
1425
  Side-->>UI: questions_count_update (sideDialog)
1429
- Asker-->>Asker: suspended (waiting on Q4H/sideDialog)
1426
+ Asker-->>Asker: records background callee work; only Q4H is a user-wait blocker
1430
1427
 
1431
1428
  User->>UI: select sideDialog Q4H
1432
1429
  User->>Asker: drive_dialog_by_user_answer(targetSideDialogId)
@@ -1435,7 +1432,7 @@ sequenceDiagram
1435
1432
  Side->>Store: clearQuestions4HumanState()
1436
1433
  Side-->>Side: driveDialogStream(answer)
1437
1434
  Side->>Store: write response.yaml
1438
- Side-->>Asker: supply response (resume root)
1435
+ Side-->>Asker: supply result-arrival fact
1439
1436
  ```
1440
1437
 
1441
1438
  ### 3. Registered SideDialog Tellask (TYPE B / `Tellask Session` / Registered Session Tellask)
@@ -1449,14 +1446,14 @@ sequenceDiagram
1449
1446
  Main->>Store: lookup registry key "researcher!market"
1450
1447
  alt not found
1451
1448
  Main->>Store: create sideDialog + save registry.yaml
1452
- Main->>Side: drive (root suspended)
1449
+ Main->>Side: drive (background callee work)
1453
1450
  else found
1454
1451
  Main->>Store: load sideDialog + update lastAccessed
1455
- Main->>Side: drive (root suspended)
1452
+ Main->>Side: drive (background callee work)
1456
1453
  end
1457
1454
 
1458
1455
  Side->>Store: write response.yaml
1459
- Side-->>Main: supply response (root resumes)
1456
+ Side-->>Main: supply result-arrival fact
1460
1457
  ```
1461
1458
 
1462
1459
  ### 4. Clarity Operations Preserve Registry