dominds 0.8.7 → 0.8.9

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 (208) hide show
  1. package/dist/cli/manual.js +5 -2
  2. package/dist/dialog-run-state.js +18 -1
  3. package/dist/docs/dialog-system.md +74 -36
  4. package/dist/docs/dialog-system.zh.md +71 -36
  5. package/dist/docs/dominds-terminology.md +30 -15
  6. package/dist/docs/fbr.md +12 -15
  7. package/dist/docs/fbr.zh.md +14 -17
  8. package/dist/docs/keep-going.zh.md +162 -0
  9. package/dist/docs/q4h.md +5 -5
  10. package/dist/docs/q4h.zh.md +5 -5
  11. package/dist/docs/showing-by-doing.md +208 -0
  12. package/dist/docs/showing-by-doing.zh.md +177 -0
  13. package/dist/docs/team-mgmt-toolset.md +12 -12
  14. package/dist/docs/team-mgmt-toolset.zh.md +12 -12
  15. package/dist/docs/tellask-collab.md +39 -13
  16. package/dist/docs/tellask-collab.zh.md +38 -12
  17. package/dist/llm/defaults.yaml +7 -0
  18. package/dist/llm/driver-v2/core.js +16 -4
  19. package/dist/llm/driver-v2/tellask-bridge.js +9 -6
  20. package/dist/minds/promptdocs.js +263 -0
  21. package/dist/minds/system-prompt.js +28 -0
  22. package/dist/server/api-routes.js +1 -1
  23. package/dist/shared/i18n/driver-messages.js +0 -10
  24. package/dist/shared/utils/inter-dialog-format.js +25 -9
  25. package/dist/showing-by-doing.js +34 -31
  26. package/dist/snippets/README.en.md +3 -0
  27. package/dist/static/assets/{_baseUniq-BD4L1En6.js → _baseUniq-rwtkYcxR.js} +2 -2
  28. package/dist/static/assets/{_baseUniq-BD4L1En6.js.map → _baseUniq-rwtkYcxR.js.map} +1 -1
  29. package/dist/static/assets/{arc-CiT0QyKL.js → arc-BTyYupKm.js} +2 -2
  30. package/dist/static/assets/{arc-CiT0QyKL.js.map → arc-BTyYupKm.js.map} +1 -1
  31. package/dist/static/assets/{architectureDiagram-VXUJARFQ-CVmn9WWl.js → architectureDiagram-VXUJARFQ-D4-EEDYn.js} +6 -6
  32. package/dist/static/assets/{architectureDiagram-VXUJARFQ-CVmn9WWl.js.map → architectureDiagram-VXUJARFQ-D4-EEDYn.js.map} +1 -1
  33. package/dist/static/assets/{blockDiagram-VD42YOAC-D-lDhhYK.js → blockDiagram-VD42YOAC-lp1hslWH.js} +7 -7
  34. package/dist/static/assets/{blockDiagram-VD42YOAC-D-lDhhYK.js.map → blockDiagram-VD42YOAC-lp1hslWH.js.map} +1 -1
  35. package/dist/static/assets/{c4Diagram-YG6GDRKO-DqB2vQg0.js → c4Diagram-YG6GDRKO-CzfjUT-v.js} +3 -3
  36. package/dist/static/assets/{c4Diagram-YG6GDRKO-DqB2vQg0.js.map → c4Diagram-YG6GDRKO-CzfjUT-v.js.map} +1 -1
  37. package/dist/static/assets/{channel-DK0lTvYw.js → channel-JDsHVrdu.js} +2 -2
  38. package/dist/static/assets/{channel-DK0lTvYw.js.map → channel-JDsHVrdu.js.map} +1 -1
  39. package/dist/static/assets/{chunk-4BX2VUAB-BKIaLua2.js → chunk-4BX2VUAB-D_AEpkik.js} +2 -2
  40. package/dist/static/assets/{chunk-4BX2VUAB-BKIaLua2.js.map → chunk-4BX2VUAB-D_AEpkik.js.map} +1 -1
  41. package/dist/static/assets/{chunk-55IACEB6-DJzjYAfG.js → chunk-55IACEB6-3UliSZil.js} +2 -2
  42. package/dist/static/assets/{chunk-55IACEB6-DJzjYAfG.js.map → chunk-55IACEB6-3UliSZil.js.map} +1 -1
  43. package/dist/static/assets/{chunk-B4BG7PRW-BKrZorXR.js → chunk-B4BG7PRW-CCSPITb4.js} +5 -5
  44. package/dist/static/assets/{chunk-B4BG7PRW-BKrZorXR.js.map → chunk-B4BG7PRW-CCSPITb4.js.map} +1 -1
  45. package/dist/static/assets/{chunk-DI55MBZ5-T8vlHFzX.js → chunk-DI55MBZ5-C8yHXGlB.js} +4 -4
  46. package/dist/static/assets/{chunk-DI55MBZ5-T8vlHFzX.js.map → chunk-DI55MBZ5-C8yHXGlB.js.map} +1 -1
  47. package/dist/static/assets/{chunk-FMBD7UC4-Ck-wGXOH.js → chunk-FMBD7UC4-DxXHAkjy.js} +2 -2
  48. package/dist/static/assets/{chunk-FMBD7UC4-Ck-wGXOH.js.map → chunk-FMBD7UC4-DxXHAkjy.js.map} +1 -1
  49. package/dist/static/assets/{chunk-QN33PNHL-DXEmgZy1.js → chunk-QN33PNHL-DCAYEM3a.js} +2 -2
  50. package/dist/static/assets/{chunk-QN33PNHL-DXEmgZy1.js.map → chunk-QN33PNHL-DCAYEM3a.js.map} +1 -1
  51. package/dist/static/assets/{chunk-QZHKN3VN-skp0d7Z5.js → chunk-QZHKN3VN-DeUpec6F.js} +2 -2
  52. package/dist/static/assets/{chunk-QZHKN3VN-skp0d7Z5.js.map → chunk-QZHKN3VN-DeUpec6F.js.map} +1 -1
  53. package/dist/static/assets/{chunk-TZMSLE5B-BLPqXWiC.js → chunk-TZMSLE5B-CBqy05uj.js} +2 -2
  54. package/dist/static/assets/{chunk-TZMSLE5B-BLPqXWiC.js.map → chunk-TZMSLE5B-CBqy05uj.js.map} +1 -1
  55. package/dist/static/assets/{classDiagram-2ON5EDUG-BnL38CfP.js → classDiagram-2ON5EDUG-DNPFStZY.js} +6 -6
  56. package/dist/static/assets/{classDiagram-2ON5EDUG-BnL38CfP.js.map → classDiagram-2ON5EDUG-DNPFStZY.js.map} +1 -1
  57. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-BnL38CfP.js → classDiagram-v2-WZHVMYZB-DNPFStZY.js} +6 -6
  58. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-BnL38CfP.js.map → classDiagram-v2-WZHVMYZB-DNPFStZY.js.map} +1 -1
  59. package/dist/static/assets/{clone-BizhJUyY.js → clone-BAGTZpbL.js} +2 -2
  60. package/dist/static/assets/{clone-BizhJUyY.js.map → clone-BAGTZpbL.js.map} +1 -1
  61. package/dist/static/assets/{cose-bilkent-S5V4N54A-BYkdVEyo.js → cose-bilkent-S5V4N54A-B9NEtdLi.js} +2 -2
  62. package/dist/static/assets/{cose-bilkent-S5V4N54A-BYkdVEyo.js.map → cose-bilkent-S5V4N54A-B9NEtdLi.js.map} +1 -1
  63. package/dist/static/assets/{dagre-6UL2VRFP-Dx3MF6Vf.js → dagre-6UL2VRFP-BnofEgY-.js} +7 -7
  64. package/dist/static/assets/{dagre-6UL2VRFP-Dx3MF6Vf.js.map → dagre-6UL2VRFP-BnofEgY-.js.map} +1 -1
  65. package/dist/static/assets/{diagram-PSM6KHXK-D72iHgGT.js → diagram-PSM6KHXK-CXN3JGnX.js} +7 -7
  66. package/dist/static/assets/{diagram-PSM6KHXK-D72iHgGT.js.map → diagram-PSM6KHXK-CXN3JGnX.js.map} +1 -1
  67. package/dist/static/assets/{diagram-QEK2KX5R-TAdaDXCD.js → diagram-QEK2KX5R-Bpf_NUSv.js} +6 -6
  68. package/dist/static/assets/{diagram-QEK2KX5R-TAdaDXCD.js.map → diagram-QEK2KX5R-Bpf_NUSv.js.map} +1 -1
  69. package/dist/static/assets/{diagram-S2PKOQOG-CIHCjso7.js → diagram-S2PKOQOG-D_SIAoY9.js} +6 -6
  70. package/dist/static/assets/{diagram-S2PKOQOG-CIHCjso7.js.map → diagram-S2PKOQOG-D_SIAoY9.js.map} +1 -1
  71. package/dist/static/assets/{erDiagram-Q2GNP2WA-UwmxzLFe.js → erDiagram-Q2GNP2WA-dzhjooSh.js} +5 -5
  72. package/dist/static/assets/{erDiagram-Q2GNP2WA-UwmxzLFe.js.map → erDiagram-Q2GNP2WA-dzhjooSh.js.map} +1 -1
  73. package/dist/static/assets/{flowDiagram-NV44I4VS-BHMfjtLb.js → flowDiagram-NV44I4VS-BXhfqZju.js} +6 -6
  74. package/dist/static/assets/{flowDiagram-NV44I4VS-BHMfjtLb.js.map → flowDiagram-NV44I4VS-BXhfqZju.js.map} +1 -1
  75. package/dist/static/assets/{ganttDiagram-JELNMOA3-DgFZ2Tss.js → ganttDiagram-JELNMOA3-D05vcZ4f.js} +3 -3
  76. package/dist/static/assets/{ganttDiagram-JELNMOA3-DgFZ2Tss.js.map → ganttDiagram-JELNMOA3-D05vcZ4f.js.map} +1 -1
  77. package/dist/static/assets/{gitGraphDiagram-NY62KEGX-Bx70pens.js → gitGraphDiagram-NY62KEGX-CQe5stSg.js} +7 -7
  78. package/dist/static/assets/{gitGraphDiagram-NY62KEGX-Bx70pens.js.map → gitGraphDiagram-NY62KEGX-CQe5stSg.js.map} +1 -1
  79. package/dist/static/assets/{graph-CTeLR7V9.js → graph-KwgPFpCM.js} +3 -3
  80. package/dist/static/assets/{graph-CTeLR7V9.js.map → graph-KwgPFpCM.js.map} +1 -1
  81. package/dist/static/assets/{index-Dk3Y5xFN.js → index-B2yxi4rE.js} +66 -54
  82. package/dist/static/assets/index-B2yxi4rE.js.map +1 -0
  83. package/dist/static/assets/{infoDiagram-WHAUD3N6-BXuamYlp.js → infoDiagram-WHAUD3N6-BeYGZtD7.js} +5 -5
  84. package/dist/static/assets/{infoDiagram-WHAUD3N6-BXuamYlp.js.map → infoDiagram-WHAUD3N6-BeYGZtD7.js.map} +1 -1
  85. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-DlHDnf1C.js → journeyDiagram-XKPGCS4Q-Cds1EaPv.js} +5 -5
  86. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-DlHDnf1C.js.map → journeyDiagram-XKPGCS4Q-Cds1EaPv.js.map} +1 -1
  87. package/dist/static/assets/{kanban-definition-3W4ZIXB7-CE78kpjk.js → kanban-definition-3W4ZIXB7-PVug-7Ew.js} +3 -3
  88. package/dist/static/assets/{kanban-definition-3W4ZIXB7-CE78kpjk.js.map → kanban-definition-3W4ZIXB7-PVug-7Ew.js.map} +1 -1
  89. package/dist/static/assets/{layout-CwEDdoLZ.js → layout-CYmyvr8n.js} +5 -5
  90. package/dist/static/assets/{layout-CwEDdoLZ.js.map → layout-CYmyvr8n.js.map} +1 -1
  91. package/dist/static/assets/{linear-DySzt0_b.js → linear-DAZdg4CR.js} +2 -2
  92. package/dist/static/assets/{linear-DySzt0_b.js.map → linear-DAZdg4CR.js.map} +1 -1
  93. package/dist/static/assets/{min-BobJ0IGS.js → min-BFZBB1Eh.js} +3 -3
  94. package/dist/static/assets/{min-BobJ0IGS.js.map → min-BFZBB1Eh.js.map} +1 -1
  95. package/dist/static/assets/{mindmap-definition-VGOIOE7T-C6YHQOYr.js → mindmap-definition-VGOIOE7T-CwOzFU9Z.js} +4 -4
  96. package/dist/static/assets/{mindmap-definition-VGOIOE7T-C6YHQOYr.js.map → mindmap-definition-VGOIOE7T-CwOzFU9Z.js.map} +1 -1
  97. package/dist/static/assets/{pieDiagram-ADFJNKIX-CS3bw7nO.js → pieDiagram-ADFJNKIX-m3-_s56r.js} +7 -7
  98. package/dist/static/assets/{pieDiagram-ADFJNKIX-CS3bw7nO.js.map → pieDiagram-ADFJNKIX-m3-_s56r.js.map} +1 -1
  99. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DA8KltS6.js → quadrantDiagram-AYHSOK5B-CgsN9Zih.js} +3 -3
  100. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DA8KltS6.js.map → quadrantDiagram-AYHSOK5B-CgsN9Zih.js.map} +1 -1
  101. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-gpRhELLx.js → requirementDiagram-UZGBJVZJ-gCVOVHjp.js} +4 -4
  102. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-gpRhELLx.js.map → requirementDiagram-UZGBJVZJ-gCVOVHjp.js.map} +1 -1
  103. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-D4V6BNsU.js → sankeyDiagram-TZEHDZUN-B2MQ4SbV.js} +2 -2
  104. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-D4V6BNsU.js.map → sankeyDiagram-TZEHDZUN-B2MQ4SbV.js.map} +1 -1
  105. package/dist/static/assets/{sequenceDiagram-WL72ISMW-D9FBgXQP.js → sequenceDiagram-WL72ISMW-DzKBb9NP.js} +4 -4
  106. package/dist/static/assets/{sequenceDiagram-WL72ISMW-D9FBgXQP.js.map → sequenceDiagram-WL72ISMW-DzKBb9NP.js.map} +1 -1
  107. package/dist/static/assets/{stateDiagram-FKZM4ZOC-D2ubI3pq.js → stateDiagram-FKZM4ZOC-CUis_SbN.js} +9 -9
  108. package/dist/static/assets/{stateDiagram-FKZM4ZOC-D2ubI3pq.js.map → stateDiagram-FKZM4ZOC-CUis_SbN.js.map} +1 -1
  109. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-rc_6AuIv.js → stateDiagram-v2-4FDKWEC3-DyrlNAib.js} +5 -5
  110. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-rc_6AuIv.js.map → stateDiagram-v2-4FDKWEC3-DyrlNAib.js.map} +1 -1
  111. package/dist/static/assets/{timeline-definition-IT6M3QCI-CwSj73ze.js → timeline-definition-IT6M3QCI-Cbncr0Ri.js} +3 -3
  112. package/dist/static/assets/{timeline-definition-IT6M3QCI-CwSj73ze.js.map → timeline-definition-IT6M3QCI-Cbncr0Ri.js.map} +1 -1
  113. package/dist/static/assets/{treemap-KMMF4GRG-D0n0ynwO.js → treemap-KMMF4GRG-WK9byIa9.js} +4 -4
  114. package/dist/static/assets/{treemap-KMMF4GRG-D0n0ynwO.js.map → treemap-KMMF4GRG-WK9byIa9.js.map} +1 -1
  115. package/dist/static/assets/{xychartDiagram-PRI3JC2R-DMTyj-VZ.js → xychartDiagram-PRI3JC2R-B2Du-Xj7.js} +3 -3
  116. package/dist/static/assets/{xychartDiagram-PRI3JC2R-DMTyj-VZ.js.map → xychartDiagram-PRI3JC2R-B2Du-Xj7.js.map} +1 -1
  117. package/dist/static/index.html +1 -1
  118. package/dist/tools/builtins.js +1 -1
  119. package/dist/tools/context-health.js +7 -7
  120. package/dist/tools/manual/render.js +11 -3
  121. package/dist/tools/manual/schema.js +18 -6
  122. package/dist/tools/prompts/codex_style_tools/en/errors.md +7 -5
  123. package/dist/tools/prompts/codex_style_tools/en/index.md +13 -3
  124. package/dist/tools/prompts/codex_style_tools/en/principles.md +10 -0
  125. package/dist/tools/prompts/codex_style_tools/en/scenarios.md +2 -0
  126. package/dist/tools/prompts/codex_style_tools/en/tools.md +12 -8
  127. package/dist/tools/prompts/codex_style_tools/zh/errors.md +7 -5
  128. package/dist/tools/prompts/codex_style_tools/zh/index.md +13 -3
  129. package/dist/tools/prompts/codex_style_tools/zh/principles.md +10 -0
  130. package/dist/tools/prompts/codex_style_tools/zh/scenarios.md +2 -0
  131. package/dist/tools/prompts/codex_style_tools/zh/tools.md +12 -8
  132. package/dist/tools/prompts/control/en/errors.md +7 -5
  133. package/dist/tools/prompts/control/en/index.md +13 -3
  134. package/dist/tools/prompts/control/en/principles.md +10 -0
  135. package/dist/tools/prompts/control/en/scenarios.md +2 -0
  136. package/dist/tools/prompts/control/en/tools.md +12 -8
  137. package/dist/tools/prompts/control/zh/errors.md +7 -5
  138. package/dist/tools/prompts/control/zh/index.md +13 -3
  139. package/dist/tools/prompts/control/zh/principles.md +10 -0
  140. package/dist/tools/prompts/control/zh/scenarios.md +2 -0
  141. package/dist/tools/prompts/control/zh/tools.md +12 -8
  142. package/dist/tools/prompts/mcp_admin/en/errors.md +7 -5
  143. package/dist/tools/prompts/mcp_admin/en/index.md +13 -3
  144. package/dist/tools/prompts/mcp_admin/en/principles.md +10 -0
  145. package/dist/tools/prompts/mcp_admin/en/scenarios.md +2 -0
  146. package/dist/tools/prompts/mcp_admin/en/tools.md +12 -8
  147. package/dist/tools/prompts/mcp_admin/zh/errors.md +7 -5
  148. package/dist/tools/prompts/mcp_admin/zh/index.md +13 -3
  149. package/dist/tools/prompts/mcp_admin/zh/principles.md +10 -0
  150. package/dist/tools/prompts/mcp_admin/zh/scenarios.md +2 -0
  151. package/dist/tools/prompts/mcp_admin/zh/tools.md +12 -8
  152. package/dist/tools/prompts/memory/en/errors.md +7 -5
  153. package/dist/tools/prompts/memory/en/index.md +13 -3
  154. package/dist/tools/prompts/memory/en/principles.md +10 -0
  155. package/dist/tools/prompts/memory/en/scenarios.md +2 -0
  156. package/dist/tools/prompts/memory/en/tools.md +12 -8
  157. package/dist/tools/prompts/memory/zh/errors.md +7 -5
  158. package/dist/tools/prompts/memory/zh/index.md +13 -3
  159. package/dist/tools/prompts/memory/zh/principles.md +10 -0
  160. package/dist/tools/prompts/memory/zh/scenarios.md +2 -0
  161. package/dist/tools/prompts/memory/zh/tools.md +12 -8
  162. package/dist/tools/prompts/os/en/errors.md +7 -5
  163. package/dist/tools/prompts/os/en/index.md +13 -3
  164. package/dist/tools/prompts/os/en/principles.md +10 -0
  165. package/dist/tools/prompts/os/en/scenarios.md +2 -0
  166. package/dist/tools/prompts/os/en/tools.md +12 -8
  167. package/dist/tools/prompts/os/zh/errors.md +7 -5
  168. package/dist/tools/prompts/os/zh/index.md +13 -3
  169. package/dist/tools/prompts/os/zh/principles.md +10 -0
  170. package/dist/tools/prompts/os/zh/scenarios.md +2 -0
  171. package/dist/tools/prompts/os/zh/tools.md +12 -8
  172. package/dist/tools/prompts/team_memory/en/errors.md +7 -5
  173. package/dist/tools/prompts/team_memory/en/index.md +13 -3
  174. package/dist/tools/prompts/team_memory/en/principles.md +10 -0
  175. package/dist/tools/prompts/team_memory/en/scenarios.md +2 -0
  176. package/dist/tools/prompts/team_memory/en/tools.md +12 -8
  177. package/dist/tools/prompts/team_memory/zh/errors.md +7 -5
  178. package/dist/tools/prompts/team_memory/zh/index.md +13 -3
  179. package/dist/tools/prompts/team_memory/zh/principles.md +10 -0
  180. package/dist/tools/prompts/team_memory/zh/scenarios.md +2 -0
  181. package/dist/tools/prompts/team_memory/zh/tools.md +12 -8
  182. package/dist/tools/prompts/team_mgmt/en/errors.md +7 -5
  183. package/dist/tools/prompts/team_mgmt/en/index.md +13 -3
  184. package/dist/tools/prompts/team_mgmt/en/principles.md +10 -0
  185. package/dist/tools/prompts/team_mgmt/en/scenarios.md +2 -0
  186. package/dist/tools/prompts/team_mgmt/en/tools.md +12 -8
  187. package/dist/tools/prompts/team_mgmt/zh/errors.md +7 -5
  188. package/dist/tools/prompts/team_mgmt/zh/index.md +13 -3
  189. package/dist/tools/prompts/team_mgmt/zh/principles.md +10 -0
  190. package/dist/tools/prompts/team_mgmt/zh/scenarios.md +2 -0
  191. package/dist/tools/prompts/team_mgmt/zh/tools.md +12 -8
  192. package/dist/tools/prompts/ws_mod/en/errors.md +7 -5
  193. package/dist/tools/prompts/ws_mod/en/index.md +13 -3
  194. package/dist/tools/prompts/ws_mod/en/principles.md +10 -0
  195. package/dist/tools/prompts/ws_mod/en/scenarios.md +2 -0
  196. package/dist/tools/prompts/ws_mod/en/tools.md +12 -8
  197. package/dist/tools/prompts/ws_mod/zh/errors.md +7 -5
  198. package/dist/tools/prompts/ws_mod/zh/index.md +13 -3
  199. package/dist/tools/prompts/ws_mod/zh/principles.md +10 -0
  200. package/dist/tools/prompts/ws_mod/zh/scenarios.md +2 -0
  201. package/dist/tools/prompts/ws_mod/zh/tools.md +12 -8
  202. package/dist/tools/toolset-manual.js +2 -4
  203. package/dist/utils/task-doc.js +16 -16
  204. package/package.json +1 -1
  205. package/dist/minds/builtin/cmdr/persona.md +0 -3
  206. package/dist/minds/builtin/dijiang/knowledge.md +0 -287
  207. package/dist/minds/builtin/dijiang/persona.md +0 -7
  208. package/dist/static/assets/index-Dk3Y5xFN.js.map +0 -1
@@ -13,10 +13,10 @@
13
13
  */
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.main = main;
16
+ require("../tools/builtins");
16
17
  const render_1 = require("../tools/manual/render");
17
18
  const spec_1 = require("../tools/manual/spec");
18
19
  const registry_1 = require("../tools/registry");
19
- require("../tools/builtins");
20
20
  function printUsage() {
21
21
  console.log('Usage: dominds manual <toolsetId> [--topic <name>|--topics <a,b,c>|--all] [--lang <en|zh>]');
22
22
  console.log(' dominds manual --list');
@@ -134,7 +134,10 @@ function toAvailableToolNames(toolsetId) {
134
134
  const toolset = (0, registry_1.getToolset)(toolsetId) ?? [];
135
135
  const names = new Set();
136
136
  for (const tool of toolset) {
137
- if (tool && typeof tool === 'object' && 'type' in tool && tool.type === 'func') {
137
+ if (tool &&
138
+ typeof tool === 'object' &&
139
+ 'type' in tool &&
140
+ tool.type === 'func') {
138
141
  names.add(tool.name);
139
142
  }
140
143
  }
@@ -37,6 +37,19 @@ const activeRunsByDialogKey = new Map();
37
37
  function setRunStateBroadcaster(fn) {
38
38
  broadcastToClients = fn;
39
39
  }
40
+ function syncRunControlCountsAfterActiveRunChange(trigger, dialogId) {
41
+ void (async () => {
42
+ try {
43
+ await broadcastRunControlCountsSnapshot();
44
+ }
45
+ catch (err) {
46
+ log.warn('Failed to broadcast run-control counts snapshot after active-run change', err, {
47
+ dialogId: dialogId.valueOf(),
48
+ trigger,
49
+ });
50
+ }
51
+ })();
52
+ }
40
53
  function classifyRunControlBucket(state) {
41
54
  if (!state)
42
55
  return 'none';
@@ -110,10 +123,14 @@ function createActiveRun(dialogId) {
110
123
  }
111
124
  const run = { abortController: new AbortController() };
112
125
  activeRunsByDialogKey.set(key, run);
126
+ syncRunControlCountsAfterActiveRunChange('create_active_run', dialogId);
113
127
  return run.abortController.signal;
114
128
  }
115
129
  function clearActiveRun(dialogId) {
116
- activeRunsByDialogKey.delete(dialogId.key());
130
+ const deleted = activeRunsByDialogKey.delete(dialogId.key());
131
+ if (!deleted)
132
+ return;
133
+ syncRunControlCountsAfterActiveRunChange('clear_active_run', dialogId);
117
134
  }
118
135
  function getStopRequestedReason(dialogId) {
119
136
  return activeRunsByDialogKey.get(dialogId.key())?.stopRequested;
@@ -27,20 +27,30 @@ This document provides detailed implementation specifications for the Dominds di
27
27
  ## Terminology
28
28
 
29
29
  This chapter defines the implementation-facing terms used throughout this document.
30
- For bilingual / user-facing naming conventions (mainline dialog / sideline dialog; tellasker / tellaskee), see [`dominds-terminology.md`](./dominds-terminology.md).
30
+ For bilingual / user-facing naming conventions (mainline dialog / sideline dialog; tellasker dialog / tellaskee dialog), see [`dominds-terminology.md`](./dominds-terminology.md).
31
31
  For Taskdoc package structure and encapsulation rules, see [`encapsulated-taskdoc.md`](./encapsulated-taskdoc.md).
32
32
 
33
33
  ### Supdialog
34
34
 
35
35
  A **supdialog** (short for "super dialog") is the supdialog in a hierarchical dialog relationship. It orchestrates and manages subdialogs, providing context, objectives, and guidance while receiving results, questions, and escalations from its subdialogs. The supdialog maintains the overall task context and determines when subdialogs are no longer needed.
36
36
 
37
+ Note: **supdialog** is a structural parent in the dialog hierarchy. It is not the same as the **tellasker dialog** (the caller for the current Tellask). For TYPE A (`tellaskBack`), the tellasker dialog is the direct supdialog; for TYPE B/C, the tellasker dialog may be a different dialog.
38
+
37
39
  A supdialog may receive **TellaskBack** from its subdialogs during their task execution. When a subdialog needs guidance or additional context, it can Tellask back via `tellaskBack({ tellaskContent: "..." })` (TYPE A / `TellaskBack` / 回问诉请), which provides responses that feed back into the subdialog's context.
38
40
 
39
41
  ### Subdialog
40
42
 
41
43
  A **subdialog** is a specialized dialog spawned by a supdialog to handle specific subtasks. Subdialogs operate with fresh context, focusing on targeted objectives while maintaining a communication link back to their supdialog.
42
44
 
43
- **TellaskBack**: A subdialog can Tellask its supdialog (tellasker) to request clarification during task execution. This allows the subdialog to ask questions and receive guidance while maintaining its own context and progress.
45
+ **TellaskBack**: A subdialog can Tellask its **tellasker dialog** to request clarification during task execution. In TYPE A, the tellasker dialog is the direct supdialog. This allows the subdialog to ask questions and receive guidance while maintaining its own context and progress.
46
+
47
+ ### Tellasker dialog / Tellaskee dialog (caller roles)
48
+
49
+ A **tellasker dialog** is the dialog that issued the current Tellask (the caller). A **tellaskee dialog** is the dialog handling that Tellask (this dialog). These are **call roles**, not hierarchy:
50
+
51
+ - For TYPE A (`tellaskBack`), the tellasker dialog is the direct supdialog.
52
+ - For TYPE B/C, the tellasker dialog may be a different dialog (root dialog or another sideline dialog).
53
+ - Responses route to the **current tellasker dialog** recorded in `assignmentFromSup`.
44
54
 
45
55
  ### Main Dialog (Root Dialog)
46
56
 
@@ -48,7 +58,7 @@ The **main dialog** (also called **root dialog**) is the top-level dialog in a d
48
58
 
49
59
  ### Q4H (Questions for Human)
50
60
 
51
- A **Q4H** is a pending question raised by a dialog (main or subdialog) that requires human input to proceed. Q4Hs are indexed in the dialog's `q4h.yaml` file (an index, not source of truth) and are **cleared by `clear_mind` operations**. The actual question content is stored in the dialog's messages where the `!?askHuman()` Tellask was recorded.
61
+ A **Q4H** is a pending question raised by a dialog (main or subdialog) that requires human input to proceed. Q4Hs are indexed in the dialog's `q4h.yaml` file (an index, not source of truth) and are **cleared by `clear_mind` operations**. The actual question content is stored in the dialog's messages where the `askHuman({ tellaskContent: "..." })` Tellask was recorded.
52
62
 
53
63
  ### Subdialog Index (subdlg.yaml)
54
64
 
@@ -141,14 +151,14 @@ This section documents the three distinct types of teammate Tellasks in the Domi
141
151
 
142
152
  ```mermaid
143
153
  flowchart TD
144
- M[LLM emits tellaskSessionless({ targetAgentId: "mention", tellaskContent: "..." })] --> Q{Is this a subdialog telling its direct supdialog?}
154
+ M[LLM emits tellaskSessionless({ targetAgentId: "mention", tellaskContent: "..." })] --> Q{Is this a subdialog Tellasking its direct supdialog (tellasker dialog for TYPE A)?}
145
155
  Q -- yes --> A[TYPE A: TellaskBack<br/>(`TellaskBack` / 回问诉请)<br/>Primary: tellaskBack({ tellaskContent: "..." }) (NO sessionSlug)]
146
156
  Q -- no --> T{Is sessionSlug present?}
147
157
  T -- yes --> B[TYPE B: Registered subdialog Tellask<br/>(`Tellask Session` / 长线诉请)<br/>tellask({ targetAgentId: "agentId", sessionSlug: "tellaskSession", tellaskContent: "..." })]
148
158
  T -- no --> C[TYPE C: Transient subdialog Tellask<br/>(`Fresh Tellask` / 一次性诉请)<br/>tellaskSessionless({ targetAgentId: "agentId", tellaskContent: "..." })]
149
159
  ```
150
160
 
151
- ### TYPE A: Supdialog Tellask (Type A / `TellaskBack` / 回问诉请)
161
+ ### TYPE A: TellaskBack (Type A / `TellaskBack` / 回问诉请)
152
162
 
153
163
  **Primary syntax**: `tellaskBack({ tellaskContent: "..." })` (NO `sessionSlug`) — `tellaskBack({ tellaskContent: "..." }) sessionSlug ...` is a **syntax error**
154
164
 
@@ -157,21 +167,35 @@ flowchart TD
157
167
  **Behavior**:
158
168
 
159
169
  1. Current subdialog **suspends**
160
- 2. Driver switches to drive the **supdialog** (using `subdialog.supdialog` reference)
161
- 3. Supdialog response flows back to the subdialog
162
- 4. Subdialog **resumes** with supdialog's response in context
170
+ 2. Driver switches to drive the **tellasker dialog** (direct supdialog for TYPE A; uses `subdialog.supdialog` reference)
171
+ 3. Tellasker dialog response flows back to the subdialog
172
+ 4. Subdialog **resumes** with tellasker dialog's response in context
163
173
 
164
174
  **Key Characteristics**:
165
175
 
166
176
  - Uses `subdialog.supdialog` reference (no registry lookup)
167
177
  - No registration - supdialog relationship is inherent
168
- - Supdialog is always the direct parent in the hierarchy
178
+ - Supdialog is always the direct parent in the hierarchy (the tellasker dialog for TYPE A)
169
179
  - `tellaskBack({ tellaskContent: "..." })` is the canonical Type A syntax: it always routes to the tellasker (the dialog that issued the current Tellask).
170
180
  - This matters especially when the supdialog’s `agentId` is identical to the subdialog’s `agentId` (common when a sideline
171
181
  is created via `freshBootsReasoning({ tellaskContent: "..." })`), where an explicit `tellaskBack({ tellaskContent: "..." })` is easier to get wrong by accident.
172
182
  - The explicit `tellaskBack({ tellaskContent: "..." })` form is accepted as a semantic fallback for backwards compatibility, but is more
173
183
  error-prone in FBR/self-subdialog cases.
174
184
 
185
+ **Sideline delivery rule (normative)**:
186
+
187
+ - A sideline dialog may reply directly to the tellasker dialog **only when all assigned goals are complete**.
188
+ - If any goal is incomplete or critical context is missing, it MUST issue `tellaskBack({ tellaskContent: "..." })` to request clarification or next-step confirmation before proceeding.
189
+ - **FBR exception**: FBR sideline dialogs are tellask-free (no `tellaskBack`); they must list missing context and return.
190
+
191
+ **Content markers (first line required)**:
192
+
193
+ - `【tellaskBack】` — required when asking the tellasker dialog for clarification / next-step confirmation.
194
+ - `【最终完成】` — required for final delivery when all goals are complete.
195
+ - FBR-only: `【FBR-直接回复】` or `【FBR-仅推理】` for FBR sideline responses.
196
+
197
+ Note: no extra "Status: ..." line is required; the first-line marker is the stage reminder.
198
+
175
199
  **Example**:
176
200
 
177
201
  ```
@@ -214,7 +238,7 @@ headline text is ignored for tellaskSession parsing.
214
238
 
215
239
  **Current Caller Tracking (important for reuse):**
216
240
 
217
- When a registered subdialog is Tellasked again (same `agentId!sessionSlug`), the caller can be a **different dialog** (mainline or another sideline). On every Type B Tellask, the subdialog’s metadata is updated with:
241
+ When a registered subdialog is Tellasked again (same `agentId!sessionSlug`), the caller can be a **different dialog** (root dialog or another sideline dialog). On every Type B Tellask, the subdialog’s metadata is updated with:
218
242
 
219
243
  - The **current caller dialog ID** (so responses route back to the _latest_ caller)
220
244
  - The **Tellask info** (headline/body, origin role, origin member, callId)
@@ -279,7 +303,7 @@ Result (second call):
279
303
  2. Create **NEW subdialog** with the specified agentId
280
304
  3. Drive the new subdialog:
281
305
  - For general Type C, the subdialog is full-fledged (supcalls, teammate Tellasks, tools per config).
282
- - For `freshBootsReasoning({ tellaskContent: "..." })`, runtime applies the FBR tool-less policy (no tools; restricted Tellasks).
306
+ - For `freshBootsReasoning({ tellaskContent: "..." })`, runtime applies the FBR tool-less policy (no tools; no Tellasks).
283
307
  4. Subdialog response flows back to parent
284
308
  5. Parent **resumes** with subdialog's response
285
309
 
@@ -287,7 +311,7 @@ Result (second call):
287
311
 
288
312
  - **No registry lookup** - always creates a new subdialog
289
313
  - **Not registered** - no persistence across Tellasks
290
- - The subdialog itself is fully capable **except** for `freshBootsReasoning({ tellaskContent: "..." })` FBR, which is tool-less and Tellask-restricted (see `fbr.md`).
314
+ - The subdialog itself is fully capable **except** for `freshBootsReasoning({ tellaskContent: "..." })` FBR, which is tool-less and tellask-free (see `fbr.md`).
291
315
  - Only difference from TYPE B: no registry lookup/resume capability
292
316
  - Used for one-off, independent tasks
293
317
 
@@ -336,7 +360,7 @@ The Dominds dialog system is built on four interconnected core mechanisms that w
336
360
  ```mermaid
337
361
  flowchart TD
338
362
  H[Dialog hierarchy<br/>(root ↔ subdialogs)] <--> S[Subdialog supply<br/>(responses, pending list, registry)]
339
- H --> Q[Q4H (!?askHuman())<br/>(q4h.yaml index)]
363
+ H --> Q[Q4H (askHuman({ tellaskContent: "..." }))<br/>(q4h.yaml index)]
340
364
  S --> Q
341
365
 
342
366
  Q --> UI[Frontend Q4H panel<br/>(questions_count_update)]
@@ -350,7 +374,7 @@ flowchart TD
350
374
 
351
375
  ### Key Design Principles
352
376
 
353
- 1. **Q4H Index in `q4h.yaml`**: Q4H questions are indexed in `q4h.yaml` (as an index, not source of truth) and cleared by mental clarity operations. The actual question content is in the dialog's messages where the `!?askHuman()` Tellask was recorded. They do not survive `clear_mind`.
377
+ 1. **Q4H Index in `q4h.yaml`**: Q4H questions are indexed in `q4h.yaml` (as an index, not source of truth) and cleared by mental clarity operations. The actual question content is in the dialog's messages where the `askHuman({ tellaskContent: "..." })` Tellask was recorded. They do not survive `clear_mind`.
354
378
 
355
379
  2. **Hierarchical Q4H**: Any dialog in the hierarchy can raise Q4H on its own right (root dialog or subdialog). Questions are indexed in the dialog that asked them, not passed upward.
356
380
 
@@ -364,7 +388,7 @@ flowchart TD
364
388
 
365
389
  7. **State Preservation Contract**:
366
390
  - `clear_mind`: Clears messages, clears Q4H index, preserves reminders, preserves registry
367
- - Subdialog completion: Writes response to supdialog, removes from pending list (registry unchanged)
391
+ - Subdialog completion: Writes response to the current tellasker dialog, removes from pending list (registry unchanged)
368
392
  - Subdialog declared dead: marks runState dead and removes its Type B registry entry; same slug can be reused as a fresh sideline dialog
369
393
  - Q4H answer: Clears the answered question from index, continues the dialog
370
394
 
@@ -383,7 +407,7 @@ Q4H (Questions for Human) is the mechanism by which dialogs can suspend executio
383
407
  * HumanQuestion - index entry persisted in q4h.yaml per dialog
384
408
  * NOTE: This is an INDEX, not the source of truth. The actual question
385
409
  * content is in the dialog's messages where the askHuman() Tellask was recorded
386
- * (invoked via !?askHuman()).
410
+ * (invoked via askHuman({ tellaskContent: "..." })).
387
411
  */
388
412
  interface HumanQuestion {
389
413
  readonly id: string; // Unique identifier (UUID) - matches message ID
@@ -395,7 +419,7 @@ interface HumanQuestion {
395
419
 
396
420
  **Storage Location**: `<dialog-path>/q4h.yaml` - serves as an index for quick lookup
397
421
 
398
- **Source of Truth**: The actual `!?askHuman()` Tellask is stored in the dialog's messages (course JSONL files), where the question was asked.
422
+ **Source of Truth**: The actual `askHuman({ tellaskContent: "..." })` Tellask is stored in the dialog's messages (course JSONL files), where the question was asked.
399
423
 
400
424
  ### Q4H Mechanism Flow
401
425
 
@@ -419,24 +443,23 @@ sequenceDiagram
419
443
 
420
444
  ### When Does a Dialog Raise Q4H?
421
445
 
422
- Q4H is raised when the `!?askHuman()` teammate Tellask is invoked by ANY dialog (root or subdialog) on its own right:
446
+ Q4H is raised when the `askHuman({ tellaskContent: "..." })` tellask function is invoked by ANY dialog (root or subdialog) on its own right:
423
447
 
424
448
  ```typescript
425
- // From main/llm/driver.ts, executeTellaskCall function
426
- const isQ4H = callKind === 'askHuman';
449
+ // From main/llm/driver-v2/tellask-bridge.ts
450
+ const isQ4H = callName === 'askHuman';
427
451
  ```
428
452
 
429
453
  **Invocation Pattern**:
430
454
 
431
- ```
432
- !?askHuman() <question headline>
433
- !?<question body content>
455
+ ```typescript
456
+ askHuman({ tellaskContent: '<question headline>\n<question body content>' });
434
457
  ```
435
458
 
436
459
  ### Q4H Recording Process
437
460
 
438
461
  ```typescript
439
- // When !?askHuman() is detected as a teammate Tellask
462
+ // When askHuman({ tellaskContent: "..." }) is detected as a teammate Tellask
440
463
  async function recordQuestionForHuman(
441
464
  dlg: Dialog,
442
465
  mentionList: string,
@@ -554,7 +577,7 @@ sequenceDiagram
554
577
  Sup->>Sub: creates subdialog (Type B or C)
555
578
  Note over Sup: Supdialog is blocked on pending subdialogs
556
579
 
557
- Sub->>WS: emits !?askHuman() question
580
+ Sub->>WS: emits askHuman({ tellaskContent: "..." }) question
558
581
  WS-->>UI: questions_count_update
559
582
  Note over Sub: Subdialog cannot proceed until answered
560
583
 
@@ -607,11 +630,11 @@ flowchart TD
607
630
 
608
631
  ### Subdialog Response Supply Mechanism
609
632
 
610
- **Core Principle**: Subdialogs supply responses to supdialog's context via persistence, not callbacks.
633
+ **Core Principle**: Subdialogs supply responses to the **current tellasker dialog's** context via persistence, not callbacks (the tellasker is the direct supdialog for TYPE A; for TYPE B/C it may be a different dialog).
611
634
 
612
635
  ```mermaid
613
636
  sequenceDiagram
614
- participant Sup as Supdialog
637
+ participant Sup as Tellasker dialog
615
638
  participant Driver as Backend driver
616
639
  participant Sub as Subdialog
617
640
  participant Store as Persistence
@@ -923,10 +946,25 @@ interface RegistryMethods {
923
946
  **Context Inheritance**: New subdialogs automatically receive:
924
947
 
925
948
  - Reference to the same rtws (runtime workspace) Taskdoc (recommended: `tasks/feature-auth.tsk/`); `dlg.taskDocPath` is fixed at dialog creation and never reassigned
926
- - Supdialog Tellask context (mentionList + tellaskContent) explaining their purpose
949
+ - Tellasker dialog Tellask context (mentionList + tellaskContent) explaining their purpose
927
950
  - Access to shared team memories
928
951
  - Access to their agent's individual memories
929
952
 
953
+ ### Subdialog course header (required)
954
+
955
+ At the start of every subdialog course, the runtime must prepend a role header to the assignment prompt:
956
+
957
+ - EN: `You are the responder (tellaskee dialog) for this dialog; the tellasker dialog is @xxx (the current caller).`
958
+ - ZH: `你是当前被诉请者对话(tellaskee dialog)的主理人;诉请者对话(tellasker dialog)为 @xxx(当前发起本次诉请)。`
959
+
960
+ **FBR special handling**: FBR is a self-subdialog and must keep a dedicated header to avoid confusion:
961
+
962
+ - EN (example): `This is an FBR sideline dialog; the tellasker dialog is @xxx (may be the same agent).`
963
+ - ZH(示例): `这是一次 FBR 支线对话;诉请者对话为 @xxx(可能与当前对话同一 agent)。`
964
+
965
+ **Insertion point**: prefer a single insertion point by updating `formatAssignmentFromSupdialog()` (covers `dialog.ts`, `tellask-bridge`, and `agent-priming`).
966
+ Frontend twin must stay in sync: `dominds/webapp/src/shared/utils/inter-dialog-format.ts`.
967
+
930
968
  **Storage**: All subdialogs are stored flat under the main dialog's (root dialog's) `subdialogs/` directory, regardless of nesting depth.
931
969
 
932
970
  **Navigation**: Each subdialog maintains a reference to its parent, enabling upward traversal to the main dialog.
@@ -950,9 +988,9 @@ interface RegistryMethods {
950
988
 
951
989
  ### Communication Patterns
952
990
 
953
- **Upward Communication**: Subdialogs communicate results, questions, and escalations to their supdialogs.
991
+ **Upward Communication**: Subdialogs communicate results, questions, and escalations to their **tellasker dialog** (the caller).
954
992
 
955
- - **Clarification Requests (TYPE A / `TellaskBack`)**: A subdialog may Tellask its supdialog to request clarification while working on its subtask. The supdialog provides guidance, and the subdialog continues with updated context.
993
+ - **Clarification Requests (TYPE A / `TellaskBack`)**: A subdialog may Tellask its tellasker dialog to request clarification while working on its subtask. For TYPE A, the tellasker dialog is the direct supdialog. The tellasker dialog provides guidance, and the subdialog continues with updated context.
956
994
  - **Subtask Response**: When a subdialog produces a final "saying" content block (no pending Q4H), that message is treated as the response to the **current caller** recorded in `assignmentFromSup` (root or another subdialog). This keeps responses aligned with the most recent Tellask site.
957
995
  - **Q4H Escalation**: If a subdialog has Q4H, it suspends. The user can answer via the UI, which triggers continuation of the subdialog only.
958
996
  - **Registered Subdialogs (TYPE B / `Tellask Session`)**: A parent can resume a previously created registered subdialog, enabling ongoing task continuation.
@@ -1045,7 +1083,7 @@ To make the UI **faithfully reflect the original generation order**, and to ensu
1045
1083
 
1046
1084
  **Teammate Tellask Capability**: Agents can invoke all three types of teammate Tellasks:
1047
1085
 
1048
- - TYPE A / `TellaskBack`: Tellask supdialog for clarification
1086
+ - TYPE A / `TellaskBack`: Tellask the tellasker dialog for clarification (direct supdialog for TYPE A)
1049
1087
  - TYPE B / `Tellask Session`: Tellask/resume registered subdialogs
1050
1088
  - TYPE C / `Fresh Tellask`: Spawn transient subdialogs
1051
1089
 
@@ -1096,10 +1134,10 @@ rendered in different markdown viewers.
1096
1134
  sequenceDiagram
1097
1135
  participant Sub as Subdialog
1098
1136
  participant Driver as Backend driver
1099
- participant Sup as Supdialog (direct parent)
1137
+ participant Sup as Tellasker dialog (direct supdialog)
1100
1138
 
1101
1139
  Sub->>Driver: emits `tellaskBack({ tellaskContent: "..." })` + question
1102
- Driver->>Sup: drive supdialog to answer
1140
+ Driver->>Sup: drive tellasker dialog to answer
1103
1141
  Sup-->>Driver: response text
1104
1142
  Driver-->>Sub: resume subdialog with response in context
1105
1143
  ```
@@ -1148,7 +1186,7 @@ sequenceDiagram
1148
1186
 
1149
1187
  ```mermaid
1150
1188
  flowchart TD
1151
- A[!?askHuman() Tellask emitted] --> B[Append HumanQuestion entry to q4h.yaml]
1189
+ A[askHuman({ tellaskContent: "..." }) Tellask emitted] --> B[Append HumanQuestion entry to q4h.yaml]
1152
1190
  B --> C[Emit questions_count_update]
1153
1191
  C --> D[UI shows Q4H badge / list]
1154
1192
  D --> E{How is it cleared?}
@@ -1173,7 +1211,7 @@ sequenceDiagram
1173
1211
 
1174
1212
  Sup->>Sub: create subdialog (Type B or C)
1175
1213
  Note over Sup,Sub: Supdialog becomes blocked on pending subdialogs
1176
- Sub->>WS: emits !?askHuman() question (Q4H)
1214
+ Sub->>WS: emits askHuman({ tellaskContent: "..." }) question (Q4H)
1177
1215
  WS-->>UI: questions_count_update (global)
1178
1216
 
1179
1217
  Note over Sub: Subdialog cannot proceed until answered
@@ -1202,7 +1240,7 @@ sequenceDiagram
1202
1240
  participant Store as Persistence (q4h.yaml)
1203
1241
  participant UI as Frontend
1204
1242
 
1205
- User->>Main: !?askHuman() question
1243
+ User->>Main: askHuman({ tellaskContent: "..." }) question
1206
1244
  Main->>Store: recordQuestionForHuman()
1207
1245
  Main-->>UI: questions_count_update
1208
1246
  Main-->>Main: suspend root drive loop