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 @@ askerDialog 可以在执行期间接收来自当前需向它回复的支线对
62
62
 
63
63
  ### 支线对话索引 (subdlg.yaml)
64
64
 
65
- **subdlg.yaml** 文件索引诉请者正在等待的待处理支线对话。与 `q4h.yaml` 类似,它是一个索引文件,不是真理之源:
65
+ **subdlg.yaml** 文件索引诉请者名下仍未回贴的后台被诉请者对话。与 `q4h.yaml` 类似,它是一个索引文件,不是真理之源:
66
66
 
67
- - 索引跟踪诉请者正在等待哪些支线对话 ID
67
+ - 索引跟踪哪些支线对话 ID 仍欠 caller 回贴
68
68
  - 实际的支线对话状态从磁盘 (done/ 目录) 验证
69
- - 用于后端协程的崩溃恢复和自动重启
69
+ - 用于后端协程的崩溃恢复、可观测状态和结果到达处理
70
70
 
71
71
  ### 支线对话注册表
72
72
 
@@ -112,13 +112,13 @@ askerDialog 可以在执行期间接收来自当前需向它回复的支线对
112
112
  后端协程使用以下模式驱动对话:
113
113
 
114
114
  1. 扫描全局注册表以识别需要驱动的主线对话
115
- 2. 对于每个候选者,检查恢复条件(Q4H 已回答,支线对话完成已接收)
115
+ 2. 对于每个候选者,检查具体驱动来源(Q4H 已回答、queued prompt、结果到达、open generation 恢复等)
116
116
  3. 在驱动之前获取对话的互斥锁
117
- 4. 执行生成循环直到挂起点或完成
117
+ 4. 执行生成循环直到自然 idle、进入 Q4H 或完成
118
118
  5. 释放互斥锁
119
119
  6. 将所有状态变更持久化到存储
120
120
 
121
- 驱动循环持续进行,直到对话挂起(等待 Q4H 或支线对话)或完成。当条件变化时(用户回答 Q4H,支线对话完成),后端通过存储检查检测这些变化并自动恢复驱动。
121
+ 驱动循环持续进行,直到对话自然 idle、进入 Q4H 或完成。active callee dispatch 是后台被诉请者事实,不会单独挂起 caller;但只有 pending active callee dispatch、没有其它具体驱动来源时,caller 应自然 idle,不靠鞭策语维持主线空转。当用户回答 Q4H 或 callee 结果到达时,后端记录该具体事实,并仅从该事实驱动受影响对话。
122
122
 
123
123
  ### 前端集成
124
124
 
@@ -149,7 +149,7 @@ askerDialog 可以在执行期间接收来自当前需向它回复的支线对
149
149
 
150
150
  - 每次消息生成后
151
151
  - 挂起时(Q4H 提出,支线对话创建)
152
- - 恢复时(Q4H 已回答,支线对话完成)
152
+ - 恢复时(Q4H 已回答,callee 结果到达)
153
153
  - 完成时
154
154
 
155
155
  这确保了崩溃恢复,并使后端能够从任何持久化状态恢复,而不依赖于前端状态。
@@ -174,23 +174,23 @@ askerDialog 可以在执行期间接收来自当前需向它回复的支线对
174
174
  点击 `Continue` 后,后端必须重新从 persistence 真源判定当前对话属于哪一种情况,而不能只根据表面的 `displayState` 做静态推断:
175
175
 
176
176
  - **情况 1:当前对话没有回复义务**
177
- 这时若也没有其他 blocker,就应直接继续 drive;若已回到普通待用户输入态,则 `resume_dialog` 不应再被视为可继续。
178
- - **情况 2:当前对话仍有回复义务,但处于 suspend 状态**
179
- 常见于仍在等待 Q4H / pending sideDialogs。此时 `Continue` 应退出插话 paused projection,并恢复成真实的 `blocked`。
177
+ 这时若也没有 Q4H 等用户等待事实,就应直接继续 drive;若已回到普通待用户输入态,则 `resume_dialog` 不应再被视为可继续。
178
+ - **情况 2:当前对话仍有回复义务,但正在等待用户输入**
179
+ 典型例子是 pending Q4H。此时 `Continue` 应退出插话 paused projection,并恢复成真实的 `blocked`。
180
180
  - **情况 3:当前对话仍有回复义务,但已不再 suspend,具备继续推进条件**
181
- 例如 blocker 已消失,或存在允许继续的 queued prompt。此时 `Continue` 不应先落一个中间 `blocked/idle` 占位态,而应直接继续 drive。
181
+ 例如 Q4H/用户等待事实已消失,或存在允许继续的 queued prompt。此时 `Continue` 不应先落一个中间 `blocked/idle` 占位态,而应直接继续 drive。
182
182
 
183
183
  **因此有两个实现约束**:
184
184
 
185
185
  - `refreshRunControlProjectionFromPersistenceFacts()` 在用户尚未点击 `Continue` 前,必须保留这层“插话已处理;原任务已暂停”的 `stopped` 投影;否则 UI 会过早塌回普通 `blocked`,破坏多轮插话体验。反过来,如果当前其实没有待恢复原任务,则根本不应建立这层 paused projection。
186
186
  - 真正决定 `Continue` 结果的逻辑,必须在恢复驱动路径中重新读取 fresh persistence facts;不能把“可点 Continue”误解为“必然立即 proceeding”。
187
187
  - 若 `Continue` 后真源仍是 `blocked`,回复责任重申文案应当立即作为 runtime guide 同时进入 `dlg.msgs` 与持久化课程历史,并同步发前端气泡;这样后面真正恢复 drive 时只需正常读取上下文,不应再额外补发一条重复的 runtime prompt。
188
- - run-control 工具栏中的 `resumable` 计数,应与“是否允许手动 Continue 尝试”保持一致。因此,处于 interjection-paused `stopped` 的对话即便底层仍有 blocker,也应计入 `resumable`;因为 `Continue` 的业务语义正是“退出这层临时 paused projection,并从真源重判下一步”。
188
+ - run-control 工具栏中的 `resumable` 计数,应与“是否允许手动 Continue 尝试”保持一致。因此,处于 interjection-paused `stopped` 的对话即便底层仍有用户等待事实,也应计入 `resumable`;因为 `Continue` 的业务语义正是“退出这层临时 paused projection,并从真源重判下一步”。
189
189
 
190
190
  **心智模型提醒**:
191
191
 
192
192
  - 不能只看 `displayState.kind === 'stopped'` 就理解这条链路。
193
- - 不能只看 blocker facts 就理解为什么 UI 仍显示 `stopped`。
193
+ - 不能只看用户等待事实就理解为什么 UI 仍显示 `stopped`。
194
194
  - 也不能只看 `resume_dialog` eligibility 就推断恢复后一定马上运行。
195
195
  - 更不能把所有 `origin === 'user'` 的输入都笼统视作“用户插话”;`q4hAnswerCallId` 非空的 prompt 是 askHuman answer continuation,必须按另一条语义链处理。
196
196
 
@@ -224,7 +224,7 @@ flowchart TD
224
224
 
225
225
  **行为**:
226
226
 
227
- 1. 当前支线对话**挂起**
227
+ 1. 当前 callee 记录回问诉请并等待诉请者答复
228
228
  2. 驱动程序切换到驱动**诉请者**(TYPE A 中为直接 askerDialog;使用 `sideDialog.askerDialog` 引用)
229
229
  3. 诉请者的响应流回支线对话
230
230
  4. 支线对话**恢复**,诉请者的响应在上下文中
@@ -239,9 +239,9 @@ flowchart TD
239
239
  **支线交付规则(规范)**:
240
240
 
241
241
  - 只有当所有目标完成时,支线对话才可直接正常回复诉请者。
242
- - 支线对话没有独立的活性维持状态。支线继续推进,是因为正常业务状态仍未完成:工具结果需要处理、Q4H 待答、下游支线待回贴,或已有显式 runtime/user prompt 排队。不要新增只为维持活跃而存在的旁路。
242
+ - 支线对话没有独立的活性维持状态。支线继续推进,是因为正常业务状态仍未完成:工具结果需要处理、Q4H 待答、下游 callee 待回贴,或已有显式 runtime/user prompt 排队。不要新增只为维持活跃而存在的旁路。
243
243
  - 回复义务的尾部处理是一条很小的状态机:运行时到达未挂起的尾部后,只检查本次 drive 产出的最新非空 assistant generation 候选;同一 generation 同时存在 saying/thinking 时优先取公开 saying。若支线仍欠 `replyTellask*`,并且已经产出候选内容但没有调用精确 reply 工具,运行时只排队一次 reply-tool reminder;如果模型在 reminder 后仍只产出 thinking/saying,运行时会有意通过 direct-reply fallback 投递该内容,并显式标注 fallback。
244
- - 运行时不得通过回扫历史消息文本来推断这个尾部状态。历史上下文属于模型和 UI;调度状态必须由当前 drive result、active reply obligation、pending blocker 索引或 queued prompt 等显式状态携带。
244
+ - 运行时不得通过回扫历史消息文本来推断这个尾部状态。历史上下文属于模型和 UI;调度状态必须由当前 drive result、active reply obligation、pending Q4H 索引或 queued prompt 等显式状态携带。
245
245
  - 若目标尚未完成,不要默认直接 `tellaskBack`;应先按团队规程 / SOP / 职责卡判断能否明确负责人,若能明确且属于执行性处理,直接 `tellask` / `tellaskSessionless` 对应负责人。
246
246
  - 只有当必须由诉请者补充需求、澄清目标、做业务裁决、确认验收口径、提供缺失输入,或现有规程无法明确判责时,才使用 `tellaskBack({ tellaskContent: "..." })` 回问诉请者再继续。
247
247
  - **FBR 例外**:FBR 支线对话禁止一切 tellask(包括 `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`),只能列出缺口与阻塞原因并直接回复。
@@ -275,10 +275,10 @@ flowchart TD
275
275
  LLM 发出:tellaskSessionless({ targetAgentId: "orchestrator", tellaskContent: "..." }) 我应该如何处理数据库迁移?
276
276
 
277
277
  结果:
278
- - sub-001 挂起
278
+ - sub-001 记录回问诉请并等待诉请者答复
279
279
  - 驱动程序使用问题驱动 orchestrator
280
280
  - orchestrator 用指导响应
281
- - sub-001 恢复,Orchestrator 的响应在上下文中
281
+ - sub-001 带着 orchestrator 的响应继续
282
282
  ```
283
283
 
284
284
  ### TYPE B:已注册支线对话诉请(长线诉请)
@@ -300,9 +300,9 @@ LLM 发出:tellaskSessionless({ targetAgentId: "orchestrator", tellaskContent:
300
300
  1. 检查注册表中是否存在键为 `agentId!sessionSlug` 的现有支线对话
301
301
  2. **如果存在**:恢复已注册的支线对话
302
302
  3. **如果不存在**:创建新的支线对话并使用键 `agentId!sessionSlug` 注册它
303
- 4. 诉请者在支线对话运行时**挂起**
304
- 5. 支线对话的响应流回诉请者
305
- 6. 诉请者**恢复**,支线对话的响应在上下文中
303
+ 4. 诉请者记录后台被诉请者事实;不会仅因 active callee dispatch 被阻塞
304
+ 5. 支线对话的响应流回诉请者,形成结果到达事实
305
+ 6. 诉请者可因结果到达、queued prompt、用户输入、无 pending active callee 时的 Diligence Push 或其它显式驱动源继续
306
306
 
307
307
  **当前诉请者跟踪(对复用很重要):**
308
308
 
@@ -339,20 +339,18 @@ LLM 发出:tellask({ targetAgentId: "researcher", sessionSlug: "market-analysi
339
339
  - 注册表查找:不存在 "researcher!market-analysis"
340
340
  - 创建新的支线对话 "researcher!market-analysis"
341
341
  - 在主线的注册表中注册它
342
- - orchestrator 挂起
342
+ - orchestrator 记录后台被诉请者事实
343
343
  - 驱动 researcher 支线对话
344
- - 响应流回 orchestrator
345
- - orchestrator 恢复
344
+ - 响应作为结果到达事实流回 orchestrator
346
345
 
347
346
  LLM 再次发出:tellask({ targetAgentId: "researcher", sessionSlug: "market-analysis", tellaskContent: "..." })
348
347
 
349
348
  结果(第二次调用):
350
349
  - 注册表查找:"researcher!market-analysis" 存在
351
350
  - 恢复现有的支线对话
352
- - orchestrator 挂起
351
+ - orchestrator 记录后台被诉请者事实
353
352
  - 从离开的地方继续驱动现有的 researcher 支线对话
354
- - 响应流回 orchestrator
355
- - orchestrator 恢复
353
+ - 响应作为结果到达事实流回 orchestrator
356
354
  ```
357
355
 
358
356
  ### TYPE C:瞬态支线对话诉请(一次性诉请)
@@ -367,13 +365,13 @@ LLM 再次发出:tellask({ targetAgentId: "researcher", sessionSlug: "market-a
367
365
 
368
366
  **行为**:
369
367
 
370
- 1. 当前对话**挂起**
368
+ 1. 当前对话记录后台被诉请者事实;不会仅因 active callee dispatch 被阻塞
371
369
  2. 使用指定的 agentId 创建**新的支线对话**
372
370
  3. 驱动新的支线对话:
373
371
  - 一般 TYPE C 支线对话是“完整能力”的(可回问诉请者、队友诉请、按配置使用工具)。
374
372
  - `freshBootsReasoning({ tellaskContent: "..." })` 属于 FBR 特例:无工具、禁止任何诉请(见 `fbr.zh.md`)。
375
- 4. 支线对话的响应流回诉请者
376
- 5. 诉请者**恢复**,支线对话的响应在上下文中
373
+ 4. 支线对话的响应作为结果到达事实流回诉请者
374
+ 5. 诉请者可因结果到达、queued prompt、用户输入、无 pending active callee 时的 Diligence Push 或其它显式驱动源继续
377
375
 
378
376
  **关键特征**:
379
377
 
@@ -394,19 +392,18 @@ LLM 再次发出:tellask({ targetAgentId: "researcher", sessionSlug: "market-a
394
392
  LLM 发出:@code-reviewer 请审查这个 PR
395
393
 
396
394
  结果:
397
- - orchestrator 挂起
395
+ - orchestrator 记录后台被诉请者事实
398
396
  - 使用 agentId "code-reviewer" 创建新的支线对话
399
397
  - 驱动 code-reviewer 支线对话(它可以进行自己的诉请、工具等)
400
- - code-reviewer 完成并返回审查结果
401
- - orchestrator 恢复,审查结果在上下文中
398
+ - code-reviewer 完成,审查结果作为结果到达事实流回 orchestrator
402
399
 
403
400
  LLM 再次发出:@code-reviewer 审查这个其他 PR
404
401
 
405
402
  结果:
406
- - orchestrator 挂起
403
+ - orchestrator 记录后台被诉请者事实
407
404
  - 创建另一个新的支线对话(与之前的不同!)
408
405
  - 驱动新的 code-reviewer 支线对话
409
- - orchestrator 恢复,新的审查结果在上下文中
406
+ - 新的审查结果作为结果到达事实流回 orchestrator
410
407
  ```
411
408
 
412
409
  ### 对比总结
@@ -418,7 +415,7 @@ LLM 再次发出:@code-reviewer 审查这个其他 PR
418
415
  | **注册表查找** | 否(使用 `sideDialog.askerDialog`) | 是(`agentId!sessionSlug`) | 否(永不注册) |
419
416
  | **恢复** | 否(诉请者不是支线对话) | 是(查找找到现有的) | 否(总是新的) |
420
417
  | **注册** | 不适用 | 创建并注册 | 永不注册 |
421
- | **诉请者行为** | 支线对话挂起 | 诉请者挂起 | 诉请者挂起 |
418
+ | **诉请者行为** | callee 等待诉请者回问回复 | 诉请者记录后台被诉请者事实 | 诉请者记录后台被诉请者事实 |
422
419
  | **支线对话能力** | 完整(回问诉请者、队友、工具) | 完整(回问诉请者、队友、工具) | 完整(回问诉请者、队友、工具) |
423
420
  | **用例** | 从诉请者澄清 | 恢复持久支线任务 | 一次性独立任务 |
424
421
 
@@ -453,15 +450,15 @@ flowchart TD
453
450
 
454
451
  4. **UI 将 Q4H 呈现为队友诉请**:UI 类似于其他队友诉请处理 Q4H,具有导航链接到对话中的诉请站点。用户使用与常规消息相同的输入文本区域内联回答。
455
452
 
456
- 5. **支线对话响应供应**:支线对话通过持久化将响应写入*当前诉请者*的上下文(不是回调)。对于 TYPE B,每次诉请都会用最新的诉请者 + tellaskInfo 更新支线对话的 `assignmentFromAsker`,因此响应被路由到最近的诉请者(主线或支线对话)。这支持分离操作、复用和崩溃恢复。
453
+ 5. **callee 响应供应**:callee 通过持久化将响应写入*当前诉请者*的上下文(不是回调)。对于 TYPE B,每次诉请都会用最新的诉请者 + tellaskInfo 更新支线对话的 `assignmentFromAsker`,因此响应被路由到最近的诉请者(主线或支线对话)。这支持分离操作、复用和崩溃恢复。
457
454
 
458
- TYPE B 长线诉请更新的确认边界必须谨慎区分:pending 状态与 `asker-stack.jsonl` 更新,只表示运行时已接受/登记新要求;只有支线 driver 实际消费 `registered_assignment_update` up-next、写入可见更新气泡和 assignment anchor 后,才表示目标支线已收到并开始处理更新。`registered_assignment_update` up-next 是运行态调度状态,不是持久化 redo log;不要为了“更新气泡”即时可重放而新增严格持久队列。后端进程重启后的业务自愈依赖 loud facts 与足够上下文(pending reminder、asker stack 最新 assignment、旧 call 是否缺少终态、目标支线是否缺少 assignment anchor),让 LLM 自主决定重发、修正或等待,而不是追求技术层面绝不丢内存队列。
455
+ TYPE B 长线诉请更新的确认边界必须谨慎区分:pending 状态与 `asker-stack.jsonl` 更新,只表示运行时已接受/登记新要求;只有 callee driver 实际消费 `registered_assignment_update` up-next、写入可见更新气泡和 assignment anchor 后,才表示目标 callee 已收到并开始处理更新。`registered_assignment_update` up-next 是运行态调度状态,不是持久化 redo log;不要为了“更新气泡”即时可重放而新增严格持久队列。后端进程重启后的业务自愈依赖 loud facts 与足够上下文(pending reminder、asker stack 最新 assignment、旧 call 是否缺少终态、目标 callee 是否缺少 assignment anchor),让 LLM 自主决定重发、修正或继续观察后台事实,而不是追求技术层面绝不丢内存队列。
459
456
 
460
457
  6. **支线对话注册表**:已注册的支线对话(TYPE B 长线诉请)在主线对话作用域的注册表中跟踪。注册表在 `clear_mind` 操作中持续存在,并在主线加载时重建。
461
458
 
462
459
  7. **状态保留契约**:
463
460
  - `clear_mind`:清除消息,清除 Q4H 索引,保留提醒,保留注册表
464
- - 支线对话完成:向当前诉请者写入响应,从待处理列表中删除(注册表不变)
461
+ - callee 完成:向当前诉请者写入响应,从待处理列表中删除(注册表不变)
465
462
  - 支线对话宣布卡死:将 runState 标记为 dead,并移除对应 TYPE B 注册表条目;同一 slug 可作为全新支线重新发起
466
463
  - Q4H 回答:从索引中清除已回答的问题,继续对话
467
464
 
@@ -648,7 +645,7 @@ sequenceDiagram
648
645
  participant Driver as driveDialogStream
649
646
 
650
647
  Asker->>Side: 创建支线对话(TYPE B 或 C)
651
- Note over Asker: 诉请者因待处理支线对话而阻塞
648
+ Note over Asker: 诉请者记录后台被诉请者事实
652
649
 
653
650
  Side->>WS: 发出 askHuman({ tellaskContent: "..." }) 问题
654
651
  WS-->>UI: questions_count_update
@@ -657,7 +654,7 @@ sequenceDiagram
657
654
  UI->>WS: drive_dialog_by_user_answer(dialog=sideDialogId, questionId, content)
658
655
  WS->>Driver: driveDialogStream(sideDialog, human answer)
659
656
  Driver-->>Side: 支线对话恢复
660
- Side-->>Asker: 响应供应(清除待处理支线对话)
657
+ Side-->>Asker: 供应结果到达事实(清除该 pending callee)
661
658
  ```
662
659
 
663
660
  ### Q4H 与思维清晰操作
@@ -701,7 +698,7 @@ flowchart TD
701
698
  - `.dialogs/run/<root-id>/sideDialogs/<sub-id>/q4h.yaml`
702
699
  - `.dialogs/run/<root-id>/registry.yaml`(仅主线;TYPE B 注册表)
703
700
 
704
- ### 支线对话响应供应机制
701
+ ### callee 响应供应机制
705
702
 
706
703
  **核心原则**:支线对话通过持久化向**当前诉请者**的上下文供应响应,而不是通过回调(TYPE A 时诉请者为直接 askerDialog)。
707
704
 
@@ -715,37 +712,36 @@ sequenceDiagram
715
712
  Asker->>Driver: 创建支线对话(添加到待处理列表)
716
713
  Driver->>Side: 驱动支线对话(分离执行)
717
714
  Side-->>Store: 持久化最终响应
718
- Driver-->>Asker: 供应响应 + 清除待处理支线对话
719
- opt 诉请者是主线且现在已解除阻塞
720
- Driver-->>Asker: 设置 needsDrive=true(自动重启)
715
+ Driver-->>Asker: 供应结果到达事实 + 清除 pending callee
716
+ opt 结果到达形成显式驱动源
717
+ Driver-->>Asker: 设置 needsDrive=true
721
718
  end
722
719
  ```
723
720
 
724
- ### 支线对话 Q4H 和诉请者恢复
721
+ ### 支线对话 Q4H 和诉请者结果到达
725
722
 
726
- 当支线对话提出 Q4H 并等待人工输入时,诉请者的自动重启逻辑必须处理这种情况:
723
+ callee 提出 Q4H 并等待人工输入时,caller 的 result-arrival 处理必须尊重“还没有 callee 结果”这个事实:
727
724
 
728
725
  ```typescript
729
- // 诉请者检查支线对话完成状态
730
- async function checkSideDialogRevival(askerDialog: Dialog): Promise<void> {
731
- const pending = await loadPendingSideDialogs(askerDialog.id);
726
+ // caller 检查 callee 完成状态
727
+ async function checkCalleeResultArrival(caller: Dialog): Promise<void> {
728
+ const pending = await loadActiveCalleeDispatches(caller.id);
732
729
 
733
730
  for (const p of pending) {
734
- // 检查支线对话是否有未解决的 Q4H
731
+ // 检查 callee 是否有未解决的 Q4H
735
732
  const sideDialogQ4H = await DialogPersistence.loadQuestions4HumanState(p.sideDialogId);
736
733
 
737
734
  if (sideDialogQ4H.length > 0) {
738
- // 支线对话正在等待人工输入
739
- // 不要自动重启 - 等待人工回答 Q4H
740
- log.debug(`支线对话 ${p.sideDialogId} 有 ${sideDialogQ4H.length} 个 Q4H,跳过自动重启`);
735
+ // callee 正在等待人工输入;此时还不存在结果到达事实
736
+ log.debug(`callee ${p.sideDialogId} ${sideDialogQ4H.length} Q4H,跳过结果到达处理`);
741
737
  continue;
742
738
  }
743
739
 
744
- // 支线对话没有 Q4H,检查是否完成
740
+ // callee 没有 Q4H,检查是否完成
745
741
  const isDone = await isSideDialogCompleted(p.sideDialogId);
746
742
  if (isDone) {
747
- // 合并响应并自动重启
748
- await incorporateSideDialogResponse(askerDialog, p.sideDialogId);
743
+ // 合并响应,并从这个具体事实触发后续调度
744
+ await incorporateSideDialogResponse(caller, p.sideDialogId);
749
745
  }
750
746
  }
751
747
  }
@@ -896,7 +892,7 @@ flowchart TD
896
892
  Key --> Lookup{注册表命中?}
897
893
  Lookup -- 是 --> Resume[恢复 + 驱动现有支线对话]
898
894
  Lookup -- 否 --> Create[创建 + 注册 + 驱动新的支线对话]
899
- Resume --> Supply[向诉请者供应响应]
895
+ Resume --> Supply[向诉请者供应结果到达事实]
900
896
  Create --> Supply
901
897
  ```
902
898
 
@@ -1060,8 +1056,8 @@ interface RegistryMethods {
1060
1056
  **fork 后动作**(由后端返回给 UI):
1061
1057
 
1062
1058
  - `draft_user_text`:若目标 generation 是一条用户输入,则把该文本回填到新对话输入框中,等待用户决定是否发送
1063
- - `restore_pending`:若切点之前存在待处理 Q4H 或待处理支线对话,则恢复这些阻塞态,让新主线继续处于阻塞状态
1064
- - `auto_continue`:若切点之前没有待处理阻塞,则新主线以 `interrupted(system_stop: fork_dialog_continue)` 初始化,UI 随后立即发送 `resume_dialog`
1059
+ - `restore_pending`:若切点之前存在待处理 Q4H,则恢复该用户等待状态;active callee dispatches 复制为后台被诉请者事实,不投影为阻塞态
1060
+ - `auto_continue`:若切点之前没有待处理 Q4H 等用户等待事实,则新主线以 `interrupted(system_stop: fork_dialog_continue)` 初始化,UI 随后立即发送 `resume_dialog`
1065
1061
 
1066
1062
  **一致性要求**:
1067
1063
 
@@ -1219,7 +1215,7 @@ Dominds 的运行时**不**持久化单一的类似枚举的 "awaiting …" 状
1219
1215
 
1220
1216
  - 持久化状态(API/索引):`running | completed | archived`
1221
1217
  - 持久化 `latest.yaml`:`status`、`needsDrive`、`generating`
1222
- - 派生的门控:`hasPendingQ4H()` `hasPendingSideDialogs()`
1218
+ - 派生的门控:`hasPendingQ4H()`;active callee dispatches 是后台被诉请者事实,不是驱动门控
1223
1219
 
1224
1220
  **持久化状态生命周期**:
1225
1221
 
@@ -1235,9 +1231,10 @@ stateDiagram-v2
1235
1231
 
1236
1232
  ```mermaid
1237
1233
  flowchart TD
1238
- A[status=running] --> B{可以驱动?\\n(没有待处理的 Q4H\\n且没有待处理的支线对话)}
1239
- B -- 否 --> S[已暂停\\n(等待 Q4H 和/或支线对话)]
1240
- S -->|Q4H 回答\\n或支线对话响应供应| C{需要驱动?}
1234
+ A[status=running] --> B{可以驱动?\\n(没有待处理的 Q4H}
1235
+ B -- 否 --> S[已暂停\\n(等待 Q4H]
1236
+ S -->|Q4H 回答| C{需要驱动?}
1237
+ R[结果到达] --> C
1241
1238
  B -- 是 --> C{需要驱动?}
1242
1239
  C -- 否 --> I[空闲\\n(等待触发器)]
1243
1240
  C -- 是 --> D[驱动循环\\n(流式传输时 generating=true)]
@@ -1261,7 +1258,7 @@ sequenceDiagram
1261
1258
  Side->>Driver: 发出 `tellaskBack({ tellaskContent: "..." })` + 问题
1262
1259
  Driver->>Asker: 驱动诉请者以回答
1263
1260
  Asker-->>Driver: 响应文本
1264
- Driver-->>Side: 恢复支线对话,响应在上下文中
1261
+ Driver-->>Side: 驱动 callee,诉请者响应在上下文中
1265
1262
  ```
1266
1263
 
1267
1264
  #### TYPE B:已注册支线对话诉请(长线诉请)(`tellask({ targetAgentId: "agentId", sessionSlug: "tellaskSession", tellaskContent: "..." })`)
@@ -1287,17 +1284,17 @@ sequenceDiagram
1287
1284
  Driver->>Side: 创建 + 注册 + 驱动
1288
1285
  end
1289
1286
  Side-->>Driver: 最终响应
1290
- Driver-->>Tellasker: 供应响应 + 清除待处理支线对话
1291
- opt 诉请者是主线且现在已解除阻塞
1292
- Driver-->>Tellasker: 设置 needsDrive=true(自动重启调度)
1287
+ Driver-->>Tellasker: 供应结果到达事实 + 清除 pending callee
1288
+ opt 结果到达形成显式驱动源
1289
+ Driver-->>Tellasker: 设置 needsDrive=true(结果到达处理)
1293
1290
  end
1294
1291
  ```
1295
1292
 
1296
1293
  call-site 呼应不变量:每个 `tellask` 发起点的 `callId`,后续都必须在诉请者对话历史里留下同
1297
- `callId` 的呼应点。正常支线回复、跨程 carryover、已注册会话被更新后的替代通知都可以结束这次
1298
- call;不能静默删除或覆盖 pending 轮次。已注册会话被更新时,替代通知的文案不能在目标支线实际消费
1299
- 更新前宣称“更新已送达/目标支线正在按新要求处理”;在此之前只能表达“旧轮已被新要求登记替换,等待
1300
- 目标支线在安全边界消费更新”。
1294
+ `callId` 的呼应点。正常 callee 回复、跨程 carryover、已注册会话被更新后的替代通知都可以结束这次
1295
+ call;不能静默删除或覆盖 pending 轮次。已注册会话被更新时,替代通知的文案不能在目标 callee 实际消费
1296
+ 更新前宣称“更新已送达/目标 callee 正在按新要求处理”;在此之前只能表达“旧轮已被新要求登记替换,目标
1297
+ callee 尚未在安全边界消费更新”。
1301
1298
 
1302
1299
  WebUI 外链不变量:生成 `/dl/*` URL 时必须在业务现场显式写出目标语义,避免复用泛化 deep-link
1303
1300
  helper。`/dl/callsite` 只表示诉请者对话里的发起气泡:`selfId/course` 是诉请者对话坐标,`callId`
@@ -1318,7 +1315,7 @@ sequenceDiagram
1318
1315
  Driver->>Side: 创建(不注册)
1319
1316
  Driver->>Side: 驱动
1320
1317
  Side-->>Driver: 最终响应
1321
- Driver-->>Tellasker: 供应响应(无注册表更新)
1318
+ Driver-->>Tellasker: 供应结果到达事实(无注册表更新)
1322
1319
  ```
1323
1320
 
1324
1321
  ### Q4H 生命周期状态
@@ -1348,7 +1345,7 @@ sequenceDiagram
1348
1345
  participant Driver as driveDialogStream
1349
1346
 
1350
1347
  Asker->>Side: 创建支线对话(TYPE B 或 C)
1351
- Note over Asker,Side: 诉请者因待处理支线对话而阻塞
1348
+ Note over Asker,Side: 诉请者记录后台被诉请者事实
1352
1349
  Side->>WS: 发出 askHuman({ tellaskContent: "..." }) 问题(Q4H)
1353
1350
  WS-->>UI: questions_count_update(全局)
1354
1351
 
@@ -1358,10 +1355,10 @@ sequenceDiagram
1358
1355
  WS->>Side: 清除 q4h.yaml 条目
1359
1356
  WS->>Driver: driveDialogStream(sideDialog, user answer)
1360
1357
  Driver-->>Side: 支线对话恢复并继续
1361
- Side-->>Asker: 支线对话响应供应给诉请者(清除待处理支线对话)
1358
+ Side-->>Asker: callee 响应供应给诉请者(结果到达事实;清除该 pending callee)
1362
1359
 
1363
- opt 诉请者是主线且现在已解除阻塞
1364
- Asker-->>Asker: 设置 needsDrive=true(自动重启)
1360
+ opt 诉请者有 result-arrival 驱动事实
1361
+ Asker-->>Asker: 设置 needsDrive=true(结果到达处理)
1365
1362
  end
1366
1363
  ```
1367
1364
 
@@ -1417,7 +1414,7 @@ sequenceDiagram
1417
1414
  Asker->>Side: createSideDialog()
1418
1415
  Side->>Store: recordQuestionForHuman()
1419
1416
  Side-->>UI: questions_count_update(支线对话)
1420
- Asker-->>Asker: suspended(等待 Q4H/支线对话)
1417
+ Asker-->>Asker: 记录后台被诉请者事实;只有 Q4H 是用户等待阻塞点
1421
1418
 
1422
1419
  User->>UI: 选择支线对话 Q4H
1423
1420
  User->>Asker: drive_dialog_by_user_answer(targetSideDialogId)
@@ -1426,7 +1423,7 @@ sequenceDiagram
1426
1423
  Side->>Store: clearQuestions4HumanState()
1427
1424
  Side-->>Side: driveDialogStream(answer)
1428
1425
  Side->>Store: write response.yaml
1429
- Side-->>Asker: supply response(恢复主线对话)
1426
+ Side-->>Asker: supply result-arrival fact
1430
1427
  ```
1431
1428
 
1432
1429
  ### 3. 已注册支线对话诉请(TYPE B / 长线诉请)
@@ -1440,14 +1437,14 @@ sequenceDiagram
1440
1437
  Main->>Store: lookup registry key "researcher!market"
1441
1438
  alt not found
1442
1439
  Main->>Store: create sideDialog + save registry.yaml
1443
- Main->>Side: drive(主线暂停)
1440
+ Main->>Side: drive(后台被诉请者工作)
1444
1441
  else found
1445
1442
  Main->>Store: load sideDialog + update lastAccessed
1446
- Main->>Side: drive(主线暂停)
1443
+ Main->>Side: drive(后台被诉请者工作)
1447
1444
  end
1448
1445
 
1449
1446
  Side->>Store: write response.yaml
1450
- Side-->>Main: supply response(主线恢复)
1447
+ Side-->>Main: supply result-arrival fact
1451
1448
  ```
1452
1449
 
1453
1450
  ### 4. 清晰度操作保留注册表
@@ -8,17 +8,16 @@ Dominds main dialogs are intended for long-run operation. A main dialog "stoppin
8
8
  is often not what operators want: they want the agent to keep pushing forward until it either:
9
9
 
10
10
  - legitimately suspends for a human decision (Q4H), or
11
- - legitimately suspends waiting for Side Dialogs (tellask/backfill).
11
+ - has no local work to do while retaining background callee facts (pending tellask/backfill).
12
12
 
13
13
  This document specifies two related runtime controls:
14
14
 
15
- - **Auto-continue injection**: for **main dialogs only**, whenever the driver would otherwise stop,
16
- runtime auto-sends a short diligence prompt (rendered as a normal user bubble) and continues
17
- generation, except when the dialog is legitimately suspended (Q4H or pending Side Dialogs).
18
- - **Side Dialog quirk recovery push**: when a provider/API quirk explicitly requests a one-time
19
- `diligence_push_once` recovery, a Side Dialog may receive a built-in runtime template, but only
20
- when it currently has an active reply obligation; the template must name the one `replyTellask*`
21
- tool confirmed by runtime.
15
+ - **Auto-continue injection**: for **main dialogs only**, whenever the driver would otherwise stop
16
+ and there is no Q4H or pending active callee dispatch, runtime auto-sends a short diligence prompt
17
+ (rendered as a normal user bubble) and continues generation. Pending tellask is a background
18
+ callee fact, not a blocking state; but when no other concrete drive source exists, it means the
19
+ main dialog has reached an idleable background-wait boundary and must not be kept spinning by a
20
+ Diligence Push prompt.
22
21
  - **Required tool-use control**: for ordinary main and side dialog rounds, the Diligence Push
23
22
  checkbox controls whether the provider request must end through a Dominds tool call. When checked,
24
23
  the model is expected to call a tool such as `askHuman`, `tellask*`, `replyTellask*`, or another
@@ -28,7 +27,7 @@ This document specifies two related runtime controls:
28
27
 
29
28
  ## Goals
30
29
 
31
- - Prevent main dialogs from stopping except for legitimate suspension states (Q4H / Side Dialogs).
30
+ - Prevent main dialogs from stopping except for Q4H or a natural boundary with no local work.
32
31
  - Keep behavior predictable and bounded (no infinite loops).
33
32
  - Make the Diligence Push text configurable per rtws (runtime workspace) and language.
34
33
  - Provide a clear, user-controlled "disable" mechanism.
@@ -36,9 +35,9 @@ This document specifies two related runtime controls:
36
35
  ## Non-goals
37
36
 
38
37
  - Auto-completing / auto-marking a dialog as done.
39
- - Auto-injecting ordinary Diligence Push prompts into Side Dialogs (Side Dialogs remain scoped and
40
- should report back to their tellasker; only the provider-quirk recovery exception may use the Side
41
- Dialog template).
38
+ - Auto-injecting Diligence Push prompts into Side Dialogs. Side Dialogs remain scoped and should
39
+ either continue from ordinary business facts or report back to their tellasker; direct-reply
40
+ fallback and caller-side judgment handle unintended plain-text stops.
42
41
 
43
42
  ## Definitions
44
43
 
@@ -62,30 +61,22 @@ This is the "controlled convergence" path. The diligence-push mechanism should *
62
61
 
63
62
  ### Trigger conditions (must all hold)
64
63
 
65
- - Dialog is the **Main Dialog**; Side Dialogs only use the provider deadlock recovery exception
66
- below.
67
- - Dialog is **not suspended**:
68
- - no pending Q4H, and
69
- - no pending Side Dialogs (waiting for backfill).
64
+ - Dialog is the **Main Dialog**.
65
+ - Dialog has no wait fact that should legitimately stop auto-continuation:
66
+ - no pending Q4H.
67
+ - no pending active callee dispatch.
70
68
  - The driver would otherwise stop the generation loop (i.e., no tool/function outputs require another iteration).
71
69
 
72
- ### Exception: provider deadlock recovery
70
+ ### Provider deadlock recovery
73
71
 
74
72
  Some provider/API quirk handlers may request a one-time Diligence Push recovery after Dominds stops
75
73
  same-context retries for a known deadlock pattern. This is not the ordinary "dialog is about to go
76
- idle" path. In that recovery-only case, pending sideDialogs do not veto the single Diligence Push
77
- injection, because the deadlock may happen in a function-result-driven generation round right after
78
- the main dialog has already registered an in-flight tellask/sideDialog.
79
-
80
- Side Dialogs may also use this recovery path, but only for provider/API retry-stopped deadlock
81
- recovery while an active reply obligation still exists. This is not a general mechanism for keeping
82
- Side Dialogs active. Normal Side Dialog continuation must come from ordinary business state: tool
83
- results, Q4H, downstream Side Dialog blockers, or queued runtime/user prompts. If no active reply
84
- obligation exists, runtime does not inject a push and leaves the retry-stopped state for a human to
85
- handle. The Side Dialog recovery template does not read rtws diligence files; it uses a built-in
86
- bilingual template containing the current time, the current Tellask goal, and the single
87
- runtime-confirmed `replyTellask*` tool (for example `replyTellaskSessionless({ replyContent })`).
88
- The LLM must not guess the reply variant. Q4H remains a hard blocker.
74
+ idle" path, but it still follows the same background-wait boundary. Diligence recovery injection is
75
+ main-dialog-only, and a pending active callee dispatch vetoes the one-time Diligence Push injection.
76
+ Active callee dispatch is a background callee fact, not a caller blocking state: the caller may keep
77
+ working from other concrete facts, but active callee dispatch alone is not a reason to keep driving
78
+ the mainline. Side Dialog retry-stopped recovery does not inject a Diligence prompt; ordinary
79
+ business facts, direct-reply fallback, or the caller's next judgment decide how work proceeds.
89
80
 
90
81
  ### Action
91
82
 
@@ -176,14 +167,13 @@ Rules:
176
167
  Implemented in the kernel driver loop (`dominds/main/llm/kernel-driver/drive.ts`) as a small
177
168
  post-iteration check:
178
169
 
179
- 1. If the dialog is suspended, stop (Q4H / sideDialog pending), except for the deadlock-recovery
180
- special case described above where one recovery-only Diligence Push may ignore pending
181
- sideDialogs.
170
+ 1. If the dialog is waiting for Q4H or still has a pending active callee dispatch, stop. Active
171
+ callee dispatch is a background callee fact, not a caller blocking state; but without another
172
+ concrete drive source it is a natural idle boundary and must not trigger Diligence injection.
182
173
  2. If there is any tool feedback, continue normally.
183
174
  3. Otherwise, attempt diligence-push auto-continue:
184
175
  - Main Dialog: resolve the rtws diligence file or built-in fallback text.
185
- - Side Dialog: only for provider-quirk recovery with an active reply obligation; otherwise do
186
- not inject.
176
+ - Side Dialog: do not inject Diligence Push.
187
177
  - If disabled → stop normally.
188
178
  - If budget exhausted → emit an informational UI notice and stop further automatic Diligence
189
179
  Pushes for the current budget.
@@ -217,11 +207,11 @@ Regression tests should cover:
217
207
 
218
208
  - Main dialog: tool-only output → diligence injection → continued response
219
209
  - Main dialog: empty assistant output → diligence injection → continued response
210
+ - Main dialog: only pending tellask / active callee dispatch → no Diligence injection; retain the
211
+ background state and naturally idle
220
212
  - SideDialog: ordinary idle path has no diligence injection
221
- - SideDialog: provider quirk recovery + active reply obligation inject the Side Dialog template in
222
- the work language, include the current Tellask goal, and name the exact active `replyTellask*`
223
- - SideDialog: provider quirk recovery + no active reply obligation → no injection; leave the
224
- stopped/give-up state for human handling
213
+ - SideDialog: provider quirk recovery has no Diligence injection; direct-reply fallback or caller
214
+ judgment handles the next business move
225
215
  - rtws config:
226
216
  - `.minds/diligence.md` is honored when lang-specific file is absent
227
217
  - empty diligence file disables diligence-push