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
package/dist/dialog.d.ts CHANGED
@@ -14,9 +14,9 @@
14
14
  */
15
15
  import type { ContextHealthSnapshot } from '@longrun-ai/kernel/types/context-health';
16
16
  import type { DialogEvent, NativeToolCallPayload, ReminderContent, WebSearchCallAction, WebSearchCallSource } from '@longrun-ai/kernel/types/dialog';
17
- import type { DialogQueuedDeferredQ4HAnswerState, DialogQueuedPromptState, DialogQueuedUserGenerationBoundaryState, DialogRunControlSpec, DialogRuntimePrompt, DialogSideDialogReplyTarget, DialogUserPrompt, DriveIntent } from '@longrun-ai/kernel/types/drive-intent';
17
+ import type { DialogCalleeReplyTarget, DialogQueuedDeferredQ4HAnswerState, DialogQueuedPromptState, DialogQueuedUserGenerationBoundaryState, DialogRunControlSpec, DialogRuntimePrompt, DialogUserPrompt, DriveIntent } from '@longrun-ai/kernel/types/drive-intent';
18
18
  import type { LanguageCode } from '@longrun-ai/kernel/types/language';
19
- import type { CalleeCourseNumber, CalleeGenerationSeqNumber, CallSiteCourseNo, CallSiteGenseqNo, DialogAskerStackState, DialogMetadataFile, HumanQuestion, ProviderData, ReasoningPayload, TellaskCallRecordName, TellaskReplyDirective } from '@longrun-ai/kernel/types/storage';
19
+ import type { ActiveCalleesFile, CalleeCourseNumber, CalleeGenerationSeqNumber, CallSiteCourseNo, CallSiteGenseqNo, DialogAskerStackState, DialogLatestFile, DialogMetadataFile, HumanQuestion, ProviderData, ReasoningPayload, TellaskCallRecordName, TellaskReplyDirective } from '@longrun-ai/kernel/types/storage';
20
20
  import { ChatMessage, FuncResultMsg, TellaskCarryoverMsg, TellaskResultMsg } from './llm/client';
21
21
  import type { ToolResultImageIngest, UserImageIngest } from './llm/gen';
22
22
  import type { JsonValue } from './tool';
@@ -38,9 +38,6 @@ type NewCourseHook = (args: {
38
38
  prompt: DialogRuntimePrompt;
39
39
  runControl?: DialogRunControlSpec;
40
40
  }) => Promise<NewCourseHookResult>;
41
- export type DialogSuspensionStatusOptions = Readonly<{
42
- allowPendingSideDialogs?: boolean;
43
- }>;
44
41
  export declare class DialogID {
45
42
  readonly selfId: string;
46
43
  readonly rootId: string;
@@ -61,11 +58,11 @@ export declare class DialogID {
61
58
  hashCode(): string;
62
59
  }
63
60
  /**
64
- * Phase 6: Pending sideDialog record for Type A sideDialog supply mechanism.
65
- * Tracks a sideDialog that was created but not yet completed.
61
+ * Phase 6: Active callee dispatch record.
62
+ * Tracks a sideDialog that has been dispatched but not yet completed.
66
63
  */
67
- export interface PendingSideDialog {
68
- sideDialogId: DialogID;
64
+ export interface ActiveCalleeDispatch {
65
+ calleeDialogId: DialogID;
69
66
  createdAt: string;
70
67
  mentionList?: string[];
71
68
  tellaskContent: string;
@@ -86,6 +83,7 @@ export interface SideDialogResponse {
86
83
  completedAt: string;
87
84
  callType: 'A' | 'B' | 'C';
88
85
  }
86
+ export declare function scheduleGlobalDialogMutexCleanupForRoot(rootId: string): void;
89
87
  /**
90
88
  * Common dialog initialization parameters (shared between MainDialog and SideDialog)
91
89
  */
@@ -99,7 +97,7 @@ export interface DialogInitParams {
99
97
  createdAt?: string;
100
98
  updatedAt?: string;
101
99
  contextHealth?: ContextHealthSnapshot;
102
- pendingCourseStartPrompt?: DialogRuntimePrompt;
100
+ pendingRuntimePrompt?: DialogRuntimePrompt;
103
101
  };
104
102
  }
105
103
  export type VisibleReminderTarget = Readonly<{
@@ -161,7 +159,7 @@ export declare abstract class Dialog {
161
159
  protected _courseRuntimeNoticeMsgs: ChatMessage[];
162
160
  protected _generationStarted: boolean;
163
161
  protected _generationStartedGenseq: number;
164
- protected _pendingSideDialogIds: DialogID[];
162
+ protected _activeCalleeDialogIds: DialogID[];
165
163
  protected _suspensionState: 'active' | 'suspended' | 'resumed';
166
164
  diligencePushRemainingBudget: number;
167
165
  disableDiligencePush: boolean;
@@ -217,35 +215,36 @@ export declare abstract class Dialog {
217
215
  isLocked(): boolean;
218
216
  /**
219
217
  * Check if dialog has pending Q4H questions.
220
- * Queries persistence for current questions4Human state.
218
+ * Reads the dialog latest user-wait state; q4h.yaml remains the detailed question payload store.
221
219
  */
222
220
  hasPendingQ4H(): Promise<boolean>;
223
221
  /**
224
- * Check if dialog has pending sideDialogs.
222
+ * Check if dialog has active callee dispatches.
225
223
  */
226
- hasPendingSideDialogs(): Promise<boolean>;
224
+ hasActiveCalleeDispatches(): Promise<boolean>;
227
225
  /**
228
- * Check if dialog can be driven (not suspended for Q4H or sideDialogs).
226
+ * Check if dialog can be driven.
227
+ *
228
+ * Active callee dispatches are background callee work: they are observable, but they must not
229
+ * block the caller dialog from continuing when some other concrete drive source exists.
229
230
  */
230
- canDrive(options?: DialogSuspensionStatusOptions): Promise<boolean>;
231
+ canDrive(): Promise<boolean>;
231
232
  /**
232
233
  * Get suspension status for logging/debugging.
233
234
  */
234
- getSuspensionStatus(options?: DialogSuspensionStatusOptions): Promise<{
235
+ getSuspensionStatus(): Promise<{
235
236
  q4h: boolean;
236
- sideDialogs: boolean;
237
- blockingSideDialogs: boolean;
237
+ backgroundCalleeDialogs: boolean;
238
238
  canDrive: boolean;
239
239
  }>;
240
- get pendingSideDialogIds(): ReadonlyArray<DialogID>;
241
- addPendingSideDialogs(ids: DialogID[]): void;
242
- removePendingSideDialog(id: DialogID): void;
243
- clearPendingSideDialogs(): void;
240
+ get activeCalleeDialogIds(): ReadonlyArray<DialogID>;
241
+ addActiveCalleeDialogs(ids: DialogID[]): void;
242
+ removeActiveCalleeDispatch(id: DialogID): void;
243
+ clearActiveCalleeDialogs(): void;
244
244
  /**
245
- * Load pending sideDialogs from persistence into memory.
246
- * Used during crash recovery to restore suspension state.
245
+ * Load active callee dispatches from persistence into memory.
247
246
  */
248
- loadPendingSideDialogsFromPersistence(): Promise<void>;
247
+ loadActiveCalleeDispatchesFromPersistence(): Promise<void>;
249
248
  /**
250
249
  * Abstract method for creating sideDialogs.
251
250
  * Implemented by MainDialog to create SideDialog instances.
@@ -325,7 +324,7 @@ export declare abstract class Dialog {
325
324
  get createdAt(): string;
326
325
  get updatedAt(): string;
327
326
  private replaceQueuedPromptState;
328
- private setNewCourseStartPrompt;
327
+ private setPendingRuntimePrompt;
329
328
  private mergePromptQ4HAnswerCallId;
330
329
  private enqueueQueuedPromptState;
331
330
  private peekLatestUpNext;
@@ -352,7 +351,7 @@ export declare abstract class Dialog {
352
351
  userLanguageCode?: LanguageCode;
353
352
  tellaskReplyDirective: TellaskReplyDirective;
354
353
  skipTaskdoc?: boolean;
355
- sideDialogReplyTarget: DialogSideDialogReplyTarget;
354
+ calleeDialogReplyTarget: DialogCalleeReplyTarget;
356
355
  }): DialogQueuedPromptState;
357
356
  private persistPendingRuntimePrompt;
358
357
  private runtimePromptCommon;
@@ -371,7 +370,7 @@ export declare abstract class Dialog {
371
370
  userLanguageCode?: LanguageCode;
372
371
  tellaskReplyDirective: TellaskReplyDirective;
373
372
  skipTaskdoc?: boolean;
374
- sideDialogReplyTarget: DialogSideDialogReplyTarget;
373
+ calleeDialogReplyTarget: DialogCalleeReplyTarget;
375
374
  }): Promise<DialogQueuedPromptState>;
376
375
  hasUpNext(): boolean;
377
376
  peekUpNext(): DialogQueuedPromptState | undefined;
@@ -623,9 +622,11 @@ export declare abstract class DialogStore {
623
622
  * Load Questions for Human state from storage
624
623
  */
625
624
  loadQuestions4Human(_dialogId: DialogID, _status: 'running' | 'completed' | 'archived'): Promise<HumanQuestion[]>;
625
+ loadDialogLatest(_dialogId: DialogID, _status: 'running' | 'completed' | 'archived'): Promise<DialogLatestFile | null>;
626
626
  loadDialogMetadata(_dialogId: DialogID, _status: 'running' | 'completed' | 'archived'): Promise<DialogMetadataFile | null>;
627
627
  loadSideDialogAssignmentFromAsker(_dialogId: DialogID, _status: 'running' | 'completed' | 'archived'): Promise<AssignmentFromAsker | null>;
628
- loadPendingSideDialogs(_dialogId: DialogID, _status: 'running' | 'completed' | 'archived'): Promise<PendingSideDialog[]>;
628
+ loadActiveCalleeDispatches(_dialogId: DialogID, _status: 'running' | 'completed' | 'archived'): Promise<ActiveCalleeDispatch[]>;
629
+ loadActiveCallees(_dialogId: DialogID, _status: 'running' | 'completed' | 'archived'): Promise<ActiveCalleesFile>;
629
630
  saveSideDialogRegistry(_dialog: MainDialog, _mainDialogId: DialogID, _entries: Array<{
630
631
  key: string;
631
632
  sideDialogId: DialogID;
package/dist/dialog.js CHANGED
@@ -1,6 +1,40 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.DialogStore = exports.MainDialog = exports.SideDialog = exports.Dialog = exports.DialogID = exports.InvalidReminderIndexError = void 0;
37
+ exports.scheduleGlobalDialogMutexCleanupForRoot = scheduleGlobalDialogMutexCleanupForRoot;
4
38
  exports.buildSideDialogAskerStack = buildSideDialogAskerStack;
5
39
  const id_1 = require("@longrun-ai/kernel/utils/id");
6
40
  const time_1 = require("@longrun-ai/kernel/utils/time");
@@ -14,6 +48,10 @@ const work_language_1 = require("./runtime/work-language");
14
48
  const shared_reminders_1 = require("./shared-reminders");
15
49
  const tool_1 = require("./tool");
16
50
  const id_2 = require("./utils/id");
51
+ async function wakeRootDialogDrive(rootId, meta) {
52
+ const { globalDialogRegistry } = await Promise.resolve().then(() => __importStar(require('./dialog-global-registry')));
53
+ globalDialogRegistry.wakeDrive(rootId, meta);
54
+ }
17
55
  class InvalidReminderIndexError extends Error {
18
56
  constructor(index, total) {
19
57
  super(`Reminder target index ${index} is stale; current reminder count is ${total}`);
@@ -65,6 +103,7 @@ class DialogID {
65
103
  }
66
104
  exports.DialogID = DialogID;
67
105
  const globalDialogMutexes = new Map();
106
+ const pendingGlobalDialogMutexCleanupRootIds = new Set();
68
107
  function getGlobalDialogMutex(dialogId) {
69
108
  const key = dialogId.key();
70
109
  const existing = globalDialogMutexes.get(key);
@@ -74,6 +113,36 @@ function getGlobalDialogMutex(dialogId) {
74
113
  globalDialogMutexes.set(key, created);
75
114
  return created;
76
115
  }
116
+ function clearIdleGlobalDialogMutexesForRoot(rootId) {
117
+ const sideDialogPrefix = `${rootId}#`;
118
+ let hasRemainingMutex = false;
119
+ for (const [key, mutex] of globalDialogMutexes.entries()) {
120
+ if (key !== rootId && !key.startsWith(sideDialogPrefix)) {
121
+ continue;
122
+ }
123
+ if (!mutex.isLocked()) {
124
+ globalDialogMutexes.delete(key);
125
+ }
126
+ else {
127
+ hasRemainingMutex = true;
128
+ }
129
+ }
130
+ return hasRemainingMutex;
131
+ }
132
+ function scheduleGlobalDialogMutexCleanupForRoot(rootId) {
133
+ pendingGlobalDialogMutexCleanupRootIds.add(rootId);
134
+ if (!clearIdleGlobalDialogMutexesForRoot(rootId)) {
135
+ pendingGlobalDialogMutexCleanupRootIds.delete(rootId);
136
+ }
137
+ }
138
+ function cleanupPendingGlobalDialogMutexesForRoot(rootId) {
139
+ if (!pendingGlobalDialogMutexCleanupRootIds.has(rootId)) {
140
+ return;
141
+ }
142
+ if (!clearIdleGlobalDialogMutexesForRoot(rootId)) {
143
+ pendingGlobalDialogMutexCleanupRootIds.delete(rootId);
144
+ }
145
+ }
77
146
  function compareVisibleReminderTargetOrder(a, b) {
78
147
  return (0, tool_1.compareReminderDisplayOrder)(a.reminder, b.reminder);
79
148
  }
@@ -122,8 +191,8 @@ function buildSideDialogAssignmentPromptMeta(sideDialog) {
122
191
  targetCallId: assignment.callId,
123
192
  tellaskContent: assignment.tellaskContent,
124
193
  },
125
- sideDialogReplyTarget: {
126
- ownerDialogId: assignment.askerDialogId,
194
+ calleeDialogReplyTarget: {
195
+ callerDialogId: assignment.askerDialogId,
127
196
  callType: 'B',
128
197
  callId: assignment.callId,
129
198
  callSiteCourse: assignment.callSiteCourse,
@@ -139,8 +208,8 @@ function buildSideDialogAssignmentPromptMeta(sideDialog) {
139
208
  targetCallId: assignment.callId,
140
209
  tellaskContent: assignment.tellaskContent,
141
210
  },
142
- sideDialogReplyTarget: {
143
- ownerDialogId: assignment.askerDialogId,
211
+ calleeDialogReplyTarget: {
212
+ callerDialogId: assignment.askerDialogId,
144
213
  callType: 'C',
145
214
  callId: assignment.callId,
146
215
  callSiteCourse: assignment.callSiteCourse,
@@ -175,7 +244,7 @@ class Dialog {
175
244
  // Used to ensure proper ordering when multiple generations occur
176
245
  this._generationStartedGenseq = 0;
177
246
  // Pending sideDialog IDs (for auto-revive tracking)
178
- this._pendingSideDialogIds = [];
247
+ this._activeCalleeDialogIds = [];
179
248
  // Phase 11: Suspension state for Type A sideDialog mechanism
180
249
  // Tracks whether this dialog is in normal state, suspended, or resuming from suspension
181
250
  this._suspensionState = 'active';
@@ -214,8 +283,8 @@ class Dialog {
214
283
  this._lastUserLanguageCode = (0, work_language_1.getWorkLanguage)();
215
284
  this._lastContextHealth = initialState?.contextHealth;
216
285
  this._lastContextHealthGenseq = undefined;
217
- if (initialState?.pendingCourseStartPrompt) {
218
- this.setNewCourseStartPrompt(initialState.pendingCourseStartPrompt);
286
+ if (initialState?.pendingRuntimePrompt) {
287
+ this.setPendingRuntimePrompt(initialState.pendingRuntimePrompt);
219
288
  }
220
289
  this.resetCourseLanguageNotice();
221
290
  }
@@ -303,7 +372,11 @@ class Dialog {
303
372
  * FIFO queue ensures fairness when multiple callers wait.
304
373
  */
305
374
  async acquire() {
306
- return await this._mutex.acquire();
375
+ const release = await this._mutex.acquire();
376
+ return () => {
377
+ release();
378
+ cleanupPendingGlobalDialogMutexesForRoot(this.id.rootId);
379
+ };
307
380
  }
308
381
  /**
309
382
  * Run an async function while holding the dialog mutex.
@@ -326,31 +399,30 @@ class Dialog {
326
399
  }
327
400
  /**
328
401
  * Check if dialog has pending Q4H questions.
329
- * Queries persistence for current questions4Human state.
402
+ * Reads the dialog latest user-wait state; q4h.yaml remains the detailed question payload store.
330
403
  */
331
404
  async hasPendingQ4H() {
332
405
  try {
333
- const questions = await this.dlgStore.loadQuestions4Human(this.id, this.status);
334
- return questions.length > 0;
406
+ const latest = await this.dlgStore.loadDialogLatest(this.id, this.status);
407
+ return latest?.userWait?.kind === 'awaiting_user_answer';
335
408
  }
336
409
  catch (err) {
337
- log_1.log.warn('Failed to load Q4H state for pending check', undefined, {
410
+ log_1.log.error('Failed to load Q4H state for pending check', err, {
338
411
  dialogId: this.id.selfId,
339
- error: err,
340
412
  });
341
- return true;
413
+ throw err;
342
414
  }
343
415
  }
344
416
  /**
345
- * Check if dialog has pending sideDialogs.
417
+ * Check if dialog has active callee dispatches.
346
418
  */
347
- async hasPendingSideDialogs() {
419
+ async hasActiveCalleeDispatches() {
348
420
  try {
349
- const pending = await this.dlgStore.loadPendingSideDialogs(this.id, this.status);
350
- return pending.length > 0;
421
+ const activeCallees = await this.dlgStore.loadActiveCallees(this.id, this.status);
422
+ return activeCallees.batches.some((batch) => batch.callees.some((callee) => callee.status === 'pending'));
351
423
  }
352
424
  catch (err) {
353
- log_1.log.warn('Failed to load pending sideDialogs for pending check', undefined, {
425
+ log_1.log.warn('Failed to load active callees for dispatch check', undefined, {
354
426
  dialogId: this.id.selfId,
355
427
  error: err,
356
428
  });
@@ -358,50 +430,50 @@ class Dialog {
358
430
  }
359
431
  }
360
432
  /**
361
- * Check if dialog can be driven (not suspended for Q4H or sideDialogs).
433
+ * Check if dialog can be driven.
434
+ *
435
+ * Active callee dispatches are background callee work: they are observable, but they must not
436
+ * block the caller dialog from continuing when some other concrete drive source exists.
362
437
  */
363
- async canDrive(options) {
364
- const suspension = await this.getSuspensionStatus(options);
438
+ async canDrive() {
439
+ const suspension = await this.getSuspensionStatus();
365
440
  return suspension.canDrive;
366
441
  }
367
442
  /**
368
443
  * Get suspension status for logging/debugging.
369
444
  */
370
- async getSuspensionStatus(options) {
445
+ async getSuspensionStatus() {
371
446
  const hasQ4H = await this.hasPendingQ4H();
372
- const hasSideDialogs = await this.hasPendingSideDialogs();
373
- const blockingSideDialogs = hasSideDialogs && options?.allowPendingSideDialogs !== true;
447
+ const hasBackgroundCalleeDialogs = await this.hasActiveCalleeDispatches();
374
448
  return {
375
449
  q4h: hasQ4H,
376
- sideDialogs: hasSideDialogs,
377
- blockingSideDialogs,
378
- canDrive: !hasQ4H && !blockingSideDialogs,
450
+ backgroundCalleeDialogs: hasBackgroundCalleeDialogs,
451
+ canDrive: !hasQ4H,
379
452
  };
380
453
  }
381
- get pendingSideDialogIds() {
382
- return this._pendingSideDialogIds;
454
+ get activeCalleeDialogIds() {
455
+ return this._activeCalleeDialogIds;
383
456
  }
384
- addPendingSideDialogs(ids) {
385
- this._pendingSideDialogIds.push(...ids);
457
+ addActiveCalleeDialogs(ids) {
458
+ this._activeCalleeDialogIds.push(...ids);
386
459
  }
387
- removePendingSideDialog(id) {
388
- this._pendingSideDialogIds = this._pendingSideDialogIds.filter((pending) => pending.selfId !== id.selfId);
460
+ removeActiveCalleeDispatch(id) {
461
+ this._activeCalleeDialogIds = this._activeCalleeDialogIds.filter((activeCallee) => activeCallee.selfId !== id.selfId);
389
462
  }
390
- clearPendingSideDialogs() {
391
- this._pendingSideDialogIds = [];
463
+ clearActiveCalleeDialogs() {
464
+ this._activeCalleeDialogIds = [];
392
465
  }
393
466
  /**
394
- * Load pending sideDialogs from persistence into memory.
395
- * Used during crash recovery to restore suspension state.
467
+ * Load active callee dispatches from persistence into memory.
396
468
  */
397
- async loadPendingSideDialogsFromPersistence() {
469
+ async loadActiveCalleeDispatchesFromPersistence() {
398
470
  try {
399
- const pending = await this.dlgStore.loadPendingSideDialogs(this.id, this.status);
400
- this.clearPendingSideDialogs();
401
- this.addPendingSideDialogs(pending.map((record) => record.sideDialogId));
471
+ const activeCalleeDispatches = await this.dlgStore.loadActiveCalleeDispatches(this.id, this.status);
472
+ this.clearActiveCalleeDialogs();
473
+ this.addActiveCalleeDialogs(activeCalleeDispatches.map((record) => record.calleeDialogId));
402
474
  }
403
475
  catch (err) {
404
- log_1.log.warn('Failed to load pending sideDialogs from persistence', undefined, {
476
+ log_1.log.warn('Failed to load active callee dispatches from persistence', undefined, {
405
477
  dialogId: this.id.selfId,
406
478
  error: err,
407
479
  });
@@ -723,7 +795,7 @@ class Dialog {
723
795
  ? {}
724
796
  : { skipTaskdoc: nextPrompt.skipTaskdoc }),
725
797
  tellaskReplyDirective: nextPrompt.tellaskReplyDirective,
726
- sideDialogReplyTarget: nextPrompt.sideDialogReplyTarget,
798
+ calleeDialogReplyTarget: nextPrompt.calleeDialogReplyTarget,
727
799
  };
728
800
  return prompt;
729
801
  }
@@ -760,7 +832,7 @@ class Dialog {
760
832
  }
761
833
  throw new Error(`UpNext prompt replacement invariant violation: missing drive intent dialog=${this.id.valueOf()} existingMsgId=${existingMsgId}`);
762
834
  }
763
- setNewCourseStartPrompt(prompt) {
835
+ setPendingRuntimePrompt(prompt) {
764
836
  const prepared = typeof prompt === 'string'
765
837
  ? {
766
838
  content: prompt,
@@ -782,12 +854,12 @@ class Dialog {
782
854
  origin: 'runtime',
783
855
  ...(prepared.skipTaskdoc === undefined ? {} : { skipTaskdoc: prepared.skipTaskdoc }),
784
856
  };
785
- const normalized = prepared.sideDialogReplyTarget !== undefined
857
+ const normalized = prepared.calleeDialogReplyTarget !== undefined
786
858
  ? (() => {
787
859
  const prompt = {
788
860
  ...runtimeCommon,
789
861
  tellaskReplyDirective: prepared.tellaskReplyDirective,
790
- sideDialogReplyTarget: prepared.sideDialogReplyTarget,
862
+ calleeDialogReplyTarget: prepared.calleeDialogReplyTarget,
791
863
  };
792
864
  return prompt;
793
865
  })()
@@ -804,7 +876,7 @@ class Dialog {
804
876
  return prompt;
805
877
  })();
806
878
  this._upNextQueue = [
807
- normalized.sideDialogReplyTarget !== undefined
879
+ normalized.calleeDialogReplyTarget !== undefined
808
880
  ? {
809
881
  kind: 'new_course_runtime_sideDialog',
810
882
  prompt: normalized.content,
@@ -814,7 +886,7 @@ class Dialog {
814
886
  origin: 'runtime',
815
887
  tellaskReplyDirective: normalized.tellaskReplyDirective,
816
888
  skipTaskdoc: normalized.skipTaskdoc,
817
- sideDialogReplyTarget: normalized.sideDialogReplyTarget,
889
+ calleeDialogReplyTarget: normalized.calleeDialogReplyTarget,
818
890
  }
819
891
  : normalized.tellaskReplyDirective !== undefined
820
892
  ? {
@@ -885,7 +957,7 @@ class Dialog {
885
957
  origin: 'runtime',
886
958
  ...(state.skipTaskdoc === undefined ? {} : { skipTaskdoc: state.skipTaskdoc }),
887
959
  tellaskReplyDirective: state.tellaskReplyDirective,
888
- sideDialogReplyTarget: state.sideDialogReplyTarget,
960
+ calleeDialogReplyTarget: state.calleeDialogReplyTarget,
889
961
  };
890
962
  return prompt;
891
963
  }
@@ -997,7 +1069,7 @@ class Dialog {
997
1069
  origin: 'runtime',
998
1070
  tellaskReplyDirective: options.tellaskReplyDirective,
999
1071
  skipTaskdoc: options.skipTaskdoc,
1000
- sideDialogReplyTarget: options.sideDialogReplyTarget,
1072
+ calleeDialogReplyTarget: options.calleeDialogReplyTarget,
1001
1073
  runControl: undefined,
1002
1074
  };
1003
1075
  this.enqueueQueuedPromptState(created);
@@ -1011,7 +1083,7 @@ class Dialog {
1011
1083
  userLanguageCode: options.userLanguageCode ?? existing.userLanguageCode ?? this._lastUserLanguageCode,
1012
1084
  tellaskReplyDirective: options.tellaskReplyDirective,
1013
1085
  skipTaskdoc: options.skipTaskdoc ?? existing.skipTaskdoc,
1014
- sideDialogReplyTarget: options.sideDialogReplyTarget,
1086
+ calleeDialogReplyTarget: options.calleeDialogReplyTarget,
1015
1087
  runControl: undefined,
1016
1088
  };
1017
1089
  this.replaceQueuedPromptState(existing.msgId, merged);
@@ -1020,6 +1092,12 @@ class Dialog {
1020
1092
  }
1021
1093
  async persistPendingRuntimePrompt(prompt) {
1022
1094
  await this.dlgStore.persistPendingRuntimePrompt(this, prompt);
1095
+ if (this.id.selfId === this.id.rootId) {
1096
+ await wakeRootDialogDrive(this.id.rootId, {
1097
+ source: 'dialog_runtime_prompt',
1098
+ reason: `queued_runtime_prompt:${prompt.msgId}`,
1099
+ });
1100
+ }
1023
1101
  }
1024
1102
  runtimePromptCommon(options) {
1025
1103
  const trimmed = options.prompt.trim();
@@ -1062,7 +1140,7 @@ class Dialog {
1062
1140
  kind: 'new_course_runtime_sideDialog',
1063
1141
  tellaskReplyDirective: options.tellaskReplyDirective,
1064
1142
  skipTaskdoc: options.skipTaskdoc,
1065
- sideDialogReplyTarget: options.sideDialogReplyTarget,
1143
+ calleeDialogReplyTarget: options.calleeDialogReplyTarget,
1066
1144
  };
1067
1145
  this.enqueueQueuedPromptState(created);
1068
1146
  await this.persistPendingRuntimePrompt({
@@ -1073,7 +1151,7 @@ class Dialog {
1073
1151
  origin: 'runtime',
1074
1152
  tellaskReplyDirective: created.tellaskReplyDirective,
1075
1153
  skipTaskdoc: created.skipTaskdoc,
1076
- sideDialogReplyTarget: created.sideDialogReplyTarget,
1154
+ calleeDialogReplyTarget: created.calleeDialogReplyTarget,
1077
1155
  });
1078
1156
  return created;
1079
1157
  }
@@ -1165,13 +1243,19 @@ class Dialog {
1165
1243
  if (this.dlgStore) {
1166
1244
  await this.dlgStore.startNewCourse(this, nextPrompt);
1167
1245
  }
1246
+ if (this.id.selfId === this.id.rootId) {
1247
+ await wakeRootDialogDrive(this.id.rootId, {
1248
+ source: 'dialog_start_new_course',
1249
+ reason: `queued_runtime_prompt:${nextPrompt.msgId}`,
1250
+ });
1251
+ }
1168
1252
  const storeCourse = this.dlgStore
1169
1253
  ? await this.dlgStore.loadCurrentCourse(this.id)
1170
1254
  : this._currentCourse + 1;
1171
1255
  this._currentCourse = storeCourse;
1172
1256
  this._updatedAt = (0, time_1.formatUnifiedTimestamp)(new Date());
1173
1257
  this.resetCourseLanguageNotice();
1174
- const normalized = this.setNewCourseStartPrompt(nextPrompt);
1258
+ const normalized = this.setPendingRuntimePrompt(nextPrompt);
1175
1259
  if (options?.skipEnqueueIntent !== true) {
1176
1260
  this._driveIntents.length = 0;
1177
1261
  this._driveIntents.push({
@@ -1900,15 +1984,21 @@ class DialogStore {
1900
1984
  async loadQuestions4Human(_dialogId, _status) {
1901
1985
  return [];
1902
1986
  }
1987
+ async loadDialogLatest(_dialogId, _status) {
1988
+ return null;
1989
+ }
1903
1990
  async loadDialogMetadata(_dialogId, _status) {
1904
1991
  return null;
1905
1992
  }
1906
1993
  async loadSideDialogAssignmentFromAsker(_dialogId, _status) {
1907
1994
  return null;
1908
1995
  }
1909
- async loadPendingSideDialogs(_dialogId, _status) {
1996
+ async loadActiveCalleeDispatches(_dialogId, _status) {
1910
1997
  return [];
1911
1998
  }
1999
+ async loadActiveCallees(_dialogId, _status) {
2000
+ return { batches: [] };
2001
+ }
1912
2002
  async saveSideDialogRegistry(_dialog, _mainDialogId, _entries, _status) { }
1913
2003
  async loadSideDialogRegistry(_mainDialog, _status) { }
1914
2004
  /**
@@ -20,7 +20,7 @@ reminder snapshot.
20
20
  - transcript / tool / tellask history records
21
21
  - current reminder snapshot
22
22
  - Explicitly dropped:
23
- - pending sideDialogs
23
+ - active callee dispatches
24
24
  - questions4human
25
25
  - sideDialog registry / sideDialog responses
26
26
  - other runtime-only waiting / blocking / orchestration state
@@ -19,7 +19,7 @@
19
19
  - transcript / tool / tellask 等历史 record
20
20
  - 当前 reminder 快照
21
21
  - 会明确丢弃:
22
- - pending sideDialogs
22
+ - active callee dispatches
23
23
  - questions4human
24
24
  - sideDialog registry / sideDialog responses
25
25
  - 其它依赖运行中协程、阻塞关系、等待关系的 runtime state
@@ -380,7 +380,7 @@ So `Web Dev App` should make the `playwright-interactive` relationship explicit
380
380
  It must be explicit that **an app is not the same thing as a skill**, and that both are now first-class mechanisms in the current implementation:
381
381
 
382
382
  - An **app** is a Dominds install/resolve/composition unit. It has an `id`, a manifest (`.minds/app.yaml`), team-facing assets (`.minds/team.yaml`, persona/knowhow/pitfalls), env docs (`.minds/env.md`), and participates in rtws-level lock/configuration/resolution.
383
- - A **skill** is a pure-Markdown capability asset inside the rtws. It is currently loaded from `.minds/skills/team_shared/**` and `.minds/skills/individual/**`, selects `SKILL.cn.md` / `SKILL.en.md` / `SKILL.md` by work language preference, and injects the body directly into the agent system prompt. It is best suited for soft guidance, checklists, decision heuristics, and team-specific methods, not for distributable product capability that depends on a stable tool contract.
383
+ - A **skill** is a pure-Markdown capability asset inside the rtws. It is currently loaded from `.minds/skills/team_shared/**` and `.minds/skills/individual/**`, selects `SKILL.cn.md` / `SKILL.en.md` / `SKILL.md` by work language preference, injects a skill index into the agent system prompt, and exposes the body on demand through `read_skill`. It is best suited for soft guidance, checklists, decision heuristics, and team-specific methods, not for distributable product capability that depends on a stable tool contract.
384
384
  - Skill frontmatter currently supports `name`, `description`, `allowed-tools`, `user-invocable`, and `disable-model-invocation`; the last three are currently compatibility/migration metadata only. They do not automatically grant tool permissions and do not replace team/toolset runtime policy.
385
385
  - A **toolset manual / app-bundled manual** is a better place for guidance that is shipped together with tools: it is skill-like in tone, but distributed together with dedicated tools, toolsets, and app identity. That is a better fit for something like `web-dev`.
386
386
  - `playwright-interactive/` should not be classified as that pure-Markdown rtws skill category. More precisely, it represents a guidance layer on top of built-in browser execution capability. In Dominds, the cleaner move is to package dedicated tools, toolset manual, recommended teammate definitions, and runtime state together as an app such as `@longrun-ai/web-dev`.
@@ -374,7 +374,7 @@ Install JSON 是 app 与 Kernel/CLI 之间的**安装/运行握手载荷**。它
374
374
  这里必须明确 **app 与 skill 不是同一层概念**,而且两者在现有实现中都已经是正式机制:
375
375
 
376
376
  - **App** 是 Dominds 的安装/解析/组合单元:它有自己的 `id`、manifest(`.minds/app.yaml`)、团队资产(`.minds/team.yaml`、persona/knowhow/pitfalls)、环境说明(`.minds/env.md`),并可被 `dominds install` 纳入某个 rtws。
377
- - **Skill** 是 rtws 内的纯 Markdown 技能资产:当前从 `.minds/skills/team_shared/**` 与 `.minds/skills/individual/**` 读取,按工作语言优先选择 `SKILL.cn.md` / `SKILL.en.md` / `SKILL.md`,并把正文直接注入智能体系统提示词。它更适合承载软性的操作指导、检查清单、判断口诀与团队特定方法学,而不是承载需要稳定工具契约的可分发产品能力。
377
+ - **Skill** 是 rtws 内的纯 Markdown 技能资产:当前从 `.minds/skills/team_shared/**` 与 `.minds/skills/individual/**` 读取,按工作语言优先选择 `SKILL.cn.md` / `SKILL.en.md` / `SKILL.md`,并把 skill 索引注入智能体系统提示词,正文按需通过 `read_skill` 读取。它更适合承载软性的操作指导、检查清单、判断口诀与团队特定方法学,而不是承载需要稳定工具契约的可分发产品能力。
378
378
  - Skill frontmatter 当前支持 `name`、`description`、`allowed-tools`、`user-invocable`、`disable-model-invocation`;其中后 3 项目前主要用于兼容/迁移语义,不会自动授予工具权限,也不会替代团队 / 工具集调度规则。
379
379
  - **工具集操作手册 / 随 App 附带的操作手册** 更适合表达“和工具一起分发的操作指导”:它的性质接近 skill,但会与专属工具、工具集和 App 身份一起打包,更适合像 `web-dev` 这种需要整体分发与安装解析的能力。
380
380
  - `playwright-interactive/` 不应被归类为上述“纯 Markdown rtws skill”;更准确地说,它体现的是“内置浏览器能力之上的指导层”。在 Dominds 中,更正交的做法是像 `@longrun-ai/web-dev` 这样,把专属工具、工具集操作手册、推荐智能体队友定义与运行态缓存一起封装成 app。
@@ -321,7 +321,7 @@ To support main dialog fork, persistence now records which root-generation viewp
321
321
  - marks when a sideDialog already exists on the root timeline, so fork can decide whether to include it
322
322
  - `reminders_reconciled_record`
323
323
  - `questions4human_reconciled_record`
324
- - `pending_sideDialogs_reconciled_record`
324
+ - `active_callees_reconciled_record`
325
325
  - `sideDialog_registry_reconciled_record`
326
326
  - `sideDialog_responses_reconciled_record`
327
327
 
@@ -329,7 +329,7 @@ To support main dialog fork, persistence now records which root-generation viewp
329
329
 
330
330
  - These reconciliation records are state snapshots, not LLM transcript content; message reconstruction must skip them
331
331
  - Any sideDialog transcript record that participates in root-fork cutoff trimming must carry `rootCourse/rootGenseq`
332
- - When writing a forked main dialog, persistence appends a baseline reconciliation set into `course-1` so reminders / Q4H / pending sideDialogs / registry / responses are restored to the pre-cutoff state
332
+ - When writing a forked main dialog, persistence appends a baseline reconciliation set into `course-1` so reminders / Q4H / active callee dispatches / registry / responses are restored to the pre-cutoff state
333
333
 
334
334
  ---
335
335
 
@@ -318,7 +318,7 @@ status: 'active' # 当前对话状态
318
318
  - 记录某个支线对话何时在 root 时间线上已“存在”,供 fork 时判断是否应纳入新树
319
319
  - `reminders_reconciled_record`
320
320
  - `questions4human_reconciled_record`
321
- - `pending_sideDialogs_reconciled_record`
321
+ - `active_callees_reconciled_record`
322
322
  - `sideDialog_registry_reconciled_record`
323
323
  - `sideDialog_responses_reconciled_record`
324
324
 
@@ -326,7 +326,7 @@ status: 'active' # 当前对话状态
326
326
 
327
327
  - 这些对账记录是状态快照,不属于 LLM transcript 内容;重建消息上下文时应跳过
328
328
  - 支线对话 transcript 中凡是需要参与 root fork 边界裁剪的记录,都必须带 `rootCourse/rootGenseq`
329
- - fork 写入新主线对话时,会在 `course-1` 追加一组 baseline 对账记录,用来把 reminders / Q4H / pending sideDialogs / registry / responses 恢复到切点前状态
329
+ - fork 写入新主线对话时,会在 `course-1` 追加一组 baseline 对账记录,用来把 reminders / Q4H / active callee dispatch / registry / responses 恢复到切点前状态
330
330
 
331
331
  ---
332
332