dominds 0.7.6 → 0.8.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 (155) hide show
  1. package/README.md +2 -2
  2. package/README.zh.md +2 -2
  3. package/dist/agent-priming.js +169 -200
  4. package/dist/cli/read.js +2 -7
  5. package/dist/dialog-factory.js +6 -4
  6. package/dist/dialog-instance-registry.js +2 -2
  7. package/dist/dialog.js +99 -91
  8. package/dist/docs/dialog-persistence.md +2 -2
  9. package/dist/docs/dialog-persistence.zh.md +2 -2
  10. package/dist/docs/dialog-system.md +86 -90
  11. package/dist/docs/dialog-system.zh.md +82 -83
  12. package/dist/docs/diligence-push.md +2 -2
  13. package/dist/docs/diligence-push.zh.md +2 -2
  14. package/dist/docs/dominds-agent-priming.md +11 -11
  15. package/dist/docs/dominds-agent-priming.zh.md +9 -9
  16. package/dist/docs/dominds-terminology.md +34 -34
  17. package/dist/docs/fbr-implementation.md +4 -4
  18. package/dist/docs/fbr-implementation.zh.md +4 -4
  19. package/dist/docs/fbr.md +31 -53
  20. package/dist/docs/fbr.zh.md +30 -48
  21. package/dist/docs/mottos.md +2 -3
  22. package/dist/docs/mottos.zh.md +2 -2
  23. package/dist/docs/q4h.md +6 -6
  24. package/dist/docs/q4h.zh.md +6 -6
  25. package/dist/docs/tellask-collab.md +13 -13
  26. package/dist/docs/tellask-collab.zh.md +18 -18
  27. package/dist/llm/driver-entry.js +9 -33
  28. package/dist/llm/driver-v2/core.js +413 -111
  29. package/dist/llm/driver-v2/index.js +5 -0
  30. package/dist/llm/driver-v2/orchestrator.js +4 -3
  31. package/dist/llm/driver-v2/policy.js +17 -23
  32. package/dist/llm/driver-v2/restore-dialog-hierarchy.js +73 -0
  33. package/dist/llm/driver-v2/round.js +18 -7
  34. package/dist/llm/driver-v2/runtime-utils.js +3 -5
  35. package/dist/llm/driver-v2/saying-events.js +4 -42
  36. package/dist/llm/driver-v2/supdialog-response.js +110 -23
  37. package/dist/llm/driver-v2/tellask-bridge.js +560 -458
  38. package/dist/mcp/sdk-client.js +1 -1
  39. package/dist/mcp/server-runtime.js +1 -1
  40. package/dist/mcp/stdio-client.js +6 -6
  41. package/dist/mcp/tool-names.js +1 -1
  42. package/dist/minds/builtin/fuxi/persona.en.md +10 -10
  43. package/dist/minds/builtin/fuxi/persona.zh.md +12 -12
  44. package/dist/minds/builtin/pangu/persona.en.md +7 -7
  45. package/dist/minds/builtin/pangu/persona.zh.md +6 -6
  46. package/dist/minds/minds-i18n.js +2 -2
  47. package/dist/minds/system-prompt-parts.js +15 -12
  48. package/dist/minds/system-prompt.js +58 -56
  49. package/dist/persistence.js +675 -527
  50. package/dist/server/api-routes.js +1 -1
  51. package/dist/server/websocket-handler.js +10 -20
  52. package/dist/server.js +3 -3
  53. package/dist/shared/diligence.js +12 -12
  54. package/dist/shared/i18n/driver-messages.js +28 -118
  55. package/dist/shared/utils/inter-dialog-format.js +53 -53
  56. package/dist/snippets/starting.en.md +1 -1
  57. package/dist/snippets/starting.zh.md +1 -2
  58. package/dist/static/assets/{_baseUniq-2IQvcpiv.js → _baseUniq-D4N_zVXV.js} +2 -2
  59. package/dist/static/assets/{_baseUniq-2IQvcpiv.js.map → _baseUniq-D4N_zVXV.js.map} +1 -1
  60. package/dist/static/assets/{arc-Boi4s2EY.js → arc-7bP9qomB.js} +2 -2
  61. package/dist/static/assets/{arc-Boi4s2EY.js.map → arc-7bP9qomB.js.map} +1 -1
  62. package/dist/static/assets/{architectureDiagram-VXUJARFQ-CV1IIalQ.js → architectureDiagram-VXUJARFQ-DToIiZuZ.js} +6 -6
  63. package/dist/static/assets/{architectureDiagram-VXUJARFQ-CV1IIalQ.js.map → architectureDiagram-VXUJARFQ-DToIiZuZ.js.map} +1 -1
  64. package/dist/static/assets/{blockDiagram-VD42YOAC-C66ZvUb1.js → blockDiagram-VD42YOAC-C-pRNHpf.js} +7 -7
  65. package/dist/static/assets/{blockDiagram-VD42YOAC-C66ZvUb1.js.map → blockDiagram-VD42YOAC-C-pRNHpf.js.map} +1 -1
  66. package/dist/static/assets/{c4Diagram-YG6GDRKO-2YQZQ-KQ.js → c4Diagram-YG6GDRKO-Bnp-nWKO.js} +3 -3
  67. package/dist/static/assets/{c4Diagram-YG6GDRKO-2YQZQ-KQ.js.map → c4Diagram-YG6GDRKO-Bnp-nWKO.js.map} +1 -1
  68. package/dist/static/assets/{channel-DBG_xYT_.js → channel-CTv1SsAF.js} +2 -2
  69. package/dist/static/assets/{channel-DBG_xYT_.js.map → channel-CTv1SsAF.js.map} +1 -1
  70. package/dist/static/assets/{chunk-4BX2VUAB-D92pQ5qM.js → chunk-4BX2VUAB-D_OGa3ss.js} +2 -2
  71. package/dist/static/assets/{chunk-4BX2VUAB-D92pQ5qM.js.map → chunk-4BX2VUAB-D_OGa3ss.js.map} +1 -1
  72. package/dist/static/assets/{chunk-55IACEB6-T3IKxvjm.js → chunk-55IACEB6-I4o4MCuM.js} +2 -2
  73. package/dist/static/assets/{chunk-55IACEB6-T3IKxvjm.js.map → chunk-55IACEB6-I4o4MCuM.js.map} +1 -1
  74. package/dist/static/assets/{chunk-B4BG7PRW-SKDCq7xY.js → chunk-B4BG7PRW-Bp-TIXg6.js} +5 -5
  75. package/dist/static/assets/{chunk-B4BG7PRW-SKDCq7xY.js.map → chunk-B4BG7PRW-Bp-TIXg6.js.map} +1 -1
  76. package/dist/static/assets/{chunk-DI55MBZ5-CKY9xXzj.js → chunk-DI55MBZ5-Bnph5Hmd.js} +4 -4
  77. package/dist/static/assets/{chunk-DI55MBZ5-CKY9xXzj.js.map → chunk-DI55MBZ5-Bnph5Hmd.js.map} +1 -1
  78. package/dist/static/assets/{chunk-FMBD7UC4-CzaQthG_.js → chunk-FMBD7UC4-q3UyRsNI.js} +2 -2
  79. package/dist/static/assets/{chunk-FMBD7UC4-CzaQthG_.js.map → chunk-FMBD7UC4-q3UyRsNI.js.map} +1 -1
  80. package/dist/static/assets/{chunk-QN33PNHL-8v7ASP75.js → chunk-QN33PNHL-BxUlvLXP.js} +2 -2
  81. package/dist/static/assets/{chunk-QN33PNHL-8v7ASP75.js.map → chunk-QN33PNHL-BxUlvLXP.js.map} +1 -1
  82. package/dist/static/assets/{chunk-QZHKN3VN-Cd3_mr-D.js → chunk-QZHKN3VN-DpQR9BVw.js} +2 -2
  83. package/dist/static/assets/{chunk-QZHKN3VN-Cd3_mr-D.js.map → chunk-QZHKN3VN-DpQR9BVw.js.map} +1 -1
  84. package/dist/static/assets/{chunk-TZMSLE5B-BrTyfkJK.js → chunk-TZMSLE5B-BX8vrVo0.js} +2 -2
  85. package/dist/static/assets/{chunk-TZMSLE5B-BrTyfkJK.js.map → chunk-TZMSLE5B-BX8vrVo0.js.map} +1 -1
  86. package/dist/static/assets/{classDiagram-2ON5EDUG-pLBmQ3Qa.js → classDiagram-2ON5EDUG-Ccx5_2Xq.js} +6 -6
  87. package/dist/static/assets/{classDiagram-2ON5EDUG-pLBmQ3Qa.js.map → classDiagram-2ON5EDUG-Ccx5_2Xq.js.map} +1 -1
  88. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-pLBmQ3Qa.js → classDiagram-v2-WZHVMYZB-Ccx5_2Xq.js} +6 -6
  89. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-pLBmQ3Qa.js.map → classDiagram-v2-WZHVMYZB-Ccx5_2Xq.js.map} +1 -1
  90. package/dist/static/assets/{clone-rjxmrDHc.js → clone-Cl5zSMrO.js} +2 -2
  91. package/dist/static/assets/{clone-rjxmrDHc.js.map → clone-Cl5zSMrO.js.map} +1 -1
  92. package/dist/static/assets/{cose-bilkent-S5V4N54A-DaW3q2vS.js → cose-bilkent-S5V4N54A-B-FUX86B.js} +2 -2
  93. package/dist/static/assets/{cose-bilkent-S5V4N54A-DaW3q2vS.js.map → cose-bilkent-S5V4N54A-B-FUX86B.js.map} +1 -1
  94. package/dist/static/assets/{dagre-6UL2VRFP-BT252775.js → dagre-6UL2VRFP-Bj8vSSpT.js} +7 -7
  95. package/dist/static/assets/{dagre-6UL2VRFP-BT252775.js.map → dagre-6UL2VRFP-Bj8vSSpT.js.map} +1 -1
  96. package/dist/static/assets/{diagram-PSM6KHXK-Cp0jEYgm.js → diagram-PSM6KHXK-BPcgy7jf.js} +7 -7
  97. package/dist/static/assets/{diagram-PSM6KHXK-Cp0jEYgm.js.map → diagram-PSM6KHXK-BPcgy7jf.js.map} +1 -1
  98. package/dist/static/assets/{diagram-QEK2KX5R-BYEiCch_.js → diagram-QEK2KX5R-DHxd6LWi.js} +6 -6
  99. package/dist/static/assets/{diagram-QEK2KX5R-BYEiCch_.js.map → diagram-QEK2KX5R-DHxd6LWi.js.map} +1 -1
  100. package/dist/static/assets/{diagram-S2PKOQOG-SNGZ1B53.js → diagram-S2PKOQOG-C4ynhhLr.js} +6 -6
  101. package/dist/static/assets/{diagram-S2PKOQOG-SNGZ1B53.js.map → diagram-S2PKOQOG-C4ynhhLr.js.map} +1 -1
  102. package/dist/static/assets/{erDiagram-Q2GNP2WA-CMdkkngT.js → erDiagram-Q2GNP2WA-CQ25uxxf.js} +5 -5
  103. package/dist/static/assets/{erDiagram-Q2GNP2WA-CMdkkngT.js.map → erDiagram-Q2GNP2WA-CQ25uxxf.js.map} +1 -1
  104. package/dist/static/assets/{flowDiagram-NV44I4VS-k203P84f.js → flowDiagram-NV44I4VS-ChkkAldk.js} +6 -6
  105. package/dist/static/assets/{flowDiagram-NV44I4VS-k203P84f.js.map → flowDiagram-NV44I4VS-ChkkAldk.js.map} +1 -1
  106. package/dist/static/assets/{ganttDiagram-JELNMOA3-CgsVe01-.js → ganttDiagram-JELNMOA3-CBt_Zorl.js} +3 -3
  107. package/dist/static/assets/{ganttDiagram-JELNMOA3-CgsVe01-.js.map → ganttDiagram-JELNMOA3-CBt_Zorl.js.map} +1 -1
  108. package/dist/static/assets/{gitGraphDiagram-NY62KEGX-BGOR_N5w.js → gitGraphDiagram-NY62KEGX-CtBc2dOO.js} +7 -7
  109. package/dist/static/assets/{gitGraphDiagram-NY62KEGX-BGOR_N5w.js.map → gitGraphDiagram-NY62KEGX-CtBc2dOO.js.map} +1 -1
  110. package/dist/static/assets/{graph-DDHIhCSW.js → graph-BGzNnzuI.js} +3 -3
  111. package/dist/static/assets/{graph-DDHIhCSW.js.map → graph-BGzNnzuI.js.map} +1 -1
  112. package/dist/static/assets/{index-CUZD-Ua6.js → index-Vrp1PT3b.js} +654 -355
  113. package/dist/static/assets/index-Vrp1PT3b.js.map +1 -0
  114. package/dist/static/assets/{infoDiagram-WHAUD3N6-D0GlWUIm.js → infoDiagram-WHAUD3N6-BYJF-Ol5.js} +5 -5
  115. package/dist/static/assets/{infoDiagram-WHAUD3N6-D0GlWUIm.js.map → infoDiagram-WHAUD3N6-BYJF-Ol5.js.map} +1 -1
  116. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-I0W1fDTZ.js → journeyDiagram-XKPGCS4Q-Cl2p8ZBw.js} +5 -5
  117. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-I0W1fDTZ.js.map → journeyDiagram-XKPGCS4Q-Cl2p8ZBw.js.map} +1 -1
  118. package/dist/static/assets/{kanban-definition-3W4ZIXB7-BY5xVZyl.js → kanban-definition-3W4ZIXB7-DBH-HEwY.js} +3 -3
  119. package/dist/static/assets/{kanban-definition-3W4ZIXB7-BY5xVZyl.js.map → kanban-definition-3W4ZIXB7-DBH-HEwY.js.map} +1 -1
  120. package/dist/static/assets/{layout-C7mFT1m6.js → layout-DdWO-uEo.js} +5 -5
  121. package/dist/static/assets/{layout-C7mFT1m6.js.map → layout-DdWO-uEo.js.map} +1 -1
  122. package/dist/static/assets/{linear-WSX0brRY.js → linear-BY3MovaF.js} +2 -2
  123. package/dist/static/assets/{linear-WSX0brRY.js.map → linear-BY3MovaF.js.map} +1 -1
  124. package/dist/static/assets/{min-DOTQTP4p.js → min-aHCJK1uN.js} +3 -3
  125. package/dist/static/assets/{min-DOTQTP4p.js.map → min-aHCJK1uN.js.map} +1 -1
  126. package/dist/static/assets/{mindmap-definition-VGOIOE7T-BWhHo-Hq.js → mindmap-definition-VGOIOE7T-BjJnBRtB.js} +4 -4
  127. package/dist/static/assets/{mindmap-definition-VGOIOE7T-BWhHo-Hq.js.map → mindmap-definition-VGOIOE7T-BjJnBRtB.js.map} +1 -1
  128. package/dist/static/assets/{pieDiagram-ADFJNKIX-B91oxvos.js → pieDiagram-ADFJNKIX-xAcmdymv.js} +7 -7
  129. package/dist/static/assets/{pieDiagram-ADFJNKIX-B91oxvos.js.map → pieDiagram-ADFJNKIX-xAcmdymv.js.map} +1 -1
  130. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DqMUyBPr.js → quadrantDiagram-AYHSOK5B-BPbEGCEj.js} +3 -3
  131. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-DqMUyBPr.js.map → quadrantDiagram-AYHSOK5B-BPbEGCEj.js.map} +1 -1
  132. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-COUayA3m.js → requirementDiagram-UZGBJVZJ--w6UfXy0.js} +4 -4
  133. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-COUayA3m.js.map → requirementDiagram-UZGBJVZJ--w6UfXy0.js.map} +1 -1
  134. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-Bp9r8YDi.js → sankeyDiagram-TZEHDZUN-B_T6TQwh.js} +2 -2
  135. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-Bp9r8YDi.js.map → sankeyDiagram-TZEHDZUN-B_T6TQwh.js.map} +1 -1
  136. package/dist/static/assets/{sequenceDiagram-WL72ISMW-CpuTC5cG.js → sequenceDiagram-WL72ISMW-DX_oVvqA.js} +4 -4
  137. package/dist/static/assets/{sequenceDiagram-WL72ISMW-CpuTC5cG.js.map → sequenceDiagram-WL72ISMW-DX_oVvqA.js.map} +1 -1
  138. package/dist/static/assets/{stateDiagram-FKZM4ZOC-Bxoo7e6E.js → stateDiagram-FKZM4ZOC-BAybZU8l.js} +9 -9
  139. package/dist/static/assets/{stateDiagram-FKZM4ZOC-Bxoo7e6E.js.map → stateDiagram-FKZM4ZOC-BAybZU8l.js.map} +1 -1
  140. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Q-DL7tae.js → stateDiagram-v2-4FDKWEC3-BUsvuCdD.js} +5 -5
  141. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-Q-DL7tae.js.map → stateDiagram-v2-4FDKWEC3-BUsvuCdD.js.map} +1 -1
  142. package/dist/static/assets/{timeline-definition-IT6M3QCI-DuOiHQPk.js → timeline-definition-IT6M3QCI-DOYN-4XM.js} +3 -3
  143. package/dist/static/assets/{timeline-definition-IT6M3QCI-DuOiHQPk.js.map → timeline-definition-IT6M3QCI-DOYN-4XM.js.map} +1 -1
  144. package/dist/static/assets/{treemap-KMMF4GRG-YbrDC0fO.js → treemap-KMMF4GRG-CQXygT0T.js} +4 -4
  145. package/dist/static/assets/{treemap-KMMF4GRG-YbrDC0fO.js.map → treemap-KMMF4GRG-CQXygT0T.js.map} +1 -1
  146. package/dist/static/assets/{xychartDiagram-PRI3JC2R-DDRlTIfV.js → xychartDiagram-PRI3JC2R-ByFAvTeN.js} +3 -3
  147. package/dist/static/assets/{xychartDiagram-PRI3JC2R-DDRlTIfV.js.map → xychartDiagram-PRI3JC2R-ByFAvTeN.js.map} +1 -1
  148. package/dist/static/index.html +1 -1
  149. package/dist/tools/builtins.js +0 -8
  150. package/dist/tools/env.js +1 -1
  151. package/dist/tools/mcp.js +31 -9
  152. package/dist/tools/pending-tellask-reminder.js +14 -17
  153. package/dist/tools/team-mgmt.js +1 -1
  154. package/package.json +1 -1
  155. package/dist/static/assets/index-CUZD-Ua6.js.map +0 -1
@@ -48,7 +48,7 @@
48
48
 
49
49
  ### Q4H (向人类提问)
50
50
 
51
- **Q4H** 是由对话(主对话或子对话)提出的待处理问题,需要人工输入才能继续。Q4H 被索引在对话的 `q4h.yaml` 文件中(一个索引,不是真理之源),并由 `clear_mind` 操作清除。实际的问题内容存储在对话的对话消息中,其中记录了 `!?@human` Tellask。
51
+ **Q4H** 是由对话(主对话或子对话)提出的待处理问题,需要人工输入才能继续。Q4H 被索引在对话的 `q4h.yaml` 文件中(一个索引,不是真理之源),并由 `clear_mind` 操作清除。实际的问题内容存储在对话的对话消息中,其中记录了 `!?askHuman()` Tellask。
52
52
 
53
53
  ### 子对话索引 (subdlg.yaml)
54
54
 
@@ -60,7 +60,7 @@
60
60
 
61
61
  ### 子对话注册表
62
62
 
63
- **子对话注册表** 是根对话作用域的 Map,维护对已注册子对话的持久引用。注册表使用 `agentId!tellaskSession` 作为其键格式。当根完成时,它随根移动到 `done/`,并在根加载时通过扫描 done/ 子对话 YAML 重建。若某个支线对话被宣布卡死,其对应的 TYPE B 注册表条目会被移除,以便后续可用同一 `agentId!tellaskSession` 创建全新的支线对话。
63
+ **子对话注册表** 是根对话作用域的 Map,维护对已注册子对话的持久引用。注册表使用 `agentId!sessionSlug` 作为其键格式。当根完成时,它随根移动到 `done/`,并在根加载时通过扫描 done/ 子对话 YAML 重建。若某个支线对话被宣布卡死,其对应的 TYPE B 注册表条目会被移除,以便后续可用同一 `agentId!sessionSlug` 创建全新的支线对话。
64
64
 
65
65
  ### 队友 Tellask
66
66
 
@@ -68,9 +68,9 @@
68
68
 
69
69
  **诉请块结构**(另见 [`dominds-terminology.md`](./dominds-terminology.md)):
70
70
 
71
- - **诉请头(Tellask headline)**:诉请块第一行 `!?@<name> ...`(同一诉请块内,后续以 `!?@...` 开头的行会并入诉请头)。
72
- - **诉请正文(Tellask body)**:后续以 `!?` 开头但不以 `!?@` 开头的行。
73
- - `!tellaskSession <slug>` 等结构化指令必须写在诉请头中。
71
+ - **诉请头(Tellask headline)**:诉请块第一行 `tellaskSessionless({ targetAgentId: "<name>", tellaskContent: "..." })`(同一诉请块内,后续以 `tellask* function call` 开头的行会并入诉请头)。
72
+ - **诉请正文(Tellask body)**:由 tellask-special 函数参数 `tellaskContent` 承载的正文载荷。
73
+ - `sessionSlug` 等结构化指令必须写在诉请头中。
74
74
 
75
75
  ---
76
76
 
@@ -91,7 +91,7 @@
91
91
  每个根的 `selfId → Dialog` 对象映射。此注册表包含根对话本身以及所有已加载的子对话,支持在层级内对任何对话进行 O(1) 查找。
92
92
 
93
93
  **子对话注册表(每个根对话)**
94
- 每个根的 `agentId!tellaskSession → Subdialog` 对象映射。此注册表跟踪用于在多次交互中恢复的 TYPE B 已注册子对话。TYPE C 瞬态子对话永远不会被注册。
94
+ 每个根的 `agentId!sessionSlug → Subdialog` 对象映射。此注册表跟踪用于在多次交互中恢复的 TYPE B 已注册子对话。TYPE C 瞬态子对话永远不会被注册。
95
95
 
96
96
  ### 每对话互斥锁
97
97
 
@@ -139,18 +139,18 @@
139
139
 
140
140
  ```mermaid
141
141
  flowchart TD
142
- M[LLM 发出 !?@mention] --> Q{这是子对话在告诉其直接上位对话吗?}
143
- Q -- 是 --> A[TYPE A:回问诉请<br/>(`TellaskBack` / 回问诉请)<br/>主要:`!?@tellasker`(无 !tellaskSession)]
144
- Q -- 否 --> T{是否存在 !tellaskSession?}
145
- T -- 是 --> B[TYPE B:已注册子对话 Tellask<br/>(`Tellask Session` / 长线诉请)<br/>!?@agentId !tellaskSession tellaskSession]
146
- T -- 否 --> C[TYPE C:瞬态子对话 Tellask<br/>(`Fresh Tellask` / 一次性诉请)<br/>!?@agentId]
142
+ M[LLM 发出 tellaskSessionless({ targetAgentId: "mention", tellaskContent: "..." })] --> Q{这是子对话在告诉其直接上位对话吗?}
143
+ Q -- 是 --> A[TYPE A:回问诉请<br/>(`TellaskBack` / 回问诉请)<br/>主要:`tellaskBack({ tellaskContent: "..." })`(无 sessionSlug)]
144
+ Q -- 否 --> T{是否存在 sessionSlug?}
145
+ T -- 是 --> B[TYPE B:已注册子对话 Tellask<br/>(`Tellask Session` / 长线诉请)<br/>tellask({ targetAgentId: "agentId", sessionSlug: "tellaskSession", tellaskContent: "..." })]
146
+ T -- 否 --> C[TYPE C:瞬态子对话 Tellask<br/>(`Fresh Tellask` / 一次性诉请)<br/>tellaskSessionless({ targetAgentId: "agentId", tellaskContent: "..." })]
147
147
  ```
148
148
 
149
149
  ### TYPE A:上位 Tellask(Type A / `TellaskBack` / 回问诉请)
150
150
 
151
- **主要语法**:`!?@tellasker`(无 `!tellaskSession`)— `!?@tellasker !tellaskSession ...` 是**语法错误**
151
+ **主要语法**:`tellaskBack({ tellaskContent: "..." })`(无 `sessionSlug`)— `tellaskBack({ tellaskContent: "..." }) sessionSlug ...` 是**语法错误**
152
152
 
153
- **可容忍的回退**:`!?@<supdialogAgentId>`(无 `!tellaskSession`)
153
+ **可容忍的回退**:`tellaskBack({ tellaskContent: "..." })`(无 `sessionSlug`)
154
154
 
155
155
  **行为**:
156
156
 
@@ -164,7 +164,7 @@ flowchart TD
164
164
  - 使用 `subdialog.supdialog` 引用(无注册表查找)
165
165
  - 无需注册 — 上位对话关系是固有的
166
166
  - 上位对话始终是层级中的直接父级
167
- - `!?@tellasker` 是**规范**的 TYPE A 语法:它始终路由到“诉请者”(发起本次诉请的对话),避免自行猜测。
167
+ - `tellaskBack({ tellaskContent: "..." })` 是**规范**的 TYPE A 语法:它始终路由到“诉请者”(发起本次诉请的对话),避免自行猜测。
168
168
 
169
169
  **示例**:
170
170
 
@@ -172,7 +172,7 @@ flowchart TD
172
172
  当前对话:sub-001(agentId: "backend-dev")
173
173
  父上位对话:"orchestrator"(agentId)
174
174
 
175
- LLM 发出:!?@orchestrator 我应该如何处理数据库迁移?
175
+ LLM 发出:tellaskSessionless({ targetAgentId: "orchestrator", tellaskContent: "..." }) 我应该如何处理数据库迁移?
176
176
 
177
177
  结果:
178
178
  - sub-001 挂起
@@ -183,31 +183,30 @@ LLM 发出:!?@orchestrator 我应该如何处理数据库迁移?
183
183
 
184
184
  ### TYPE B:已注册子对话 Tellask(Type B / `Tellask Session` / 长线诉请)
185
185
 
186
- **语法**:`!?@<anyAgentId> !tellaskSession <tellaskSession>`(注意 `!tellaskSession` 前的空格)
186
+ **语法**:`tellask({ targetAgentId: "<anyAgentId>", sessionSlug: "<tellaskSession>", tellaskContent: "..." })`(注意 `sessionSlug` 前的空格)
187
187
 
188
- **扪心自问 (FBR) 自调用语法(罕见;可恢复)**:`!?@self !tellaskSession <tellaskSession>`
188
+ **扪心自问 (FBR) 语法**:`freshBootsReasoning({ tellaskContent: "..." })`
189
189
 
190
- - `!?@self` 是一个显式的"相同角色"调用,指向**当前对话的 agentId**(不是单独队友)。
191
- - 这是自调用的**明确**语法,有助于避免因回声/引用先前调用标题而导致的意外 `@teammate`→`@teammate` 自调用。
192
- - 注意:在 Dominds 中,`!?@self` 会触发扪心自问(FBR)机制,并以更严格的“无工具”策略驱动;详见 [`fbr.zh.md`](./fbr.zh.md)。
193
- - **FBR 本身应该很常见**,但使用 `!tellaskSession` 寻址的变体应该很罕见。对于大多数 FBR 使用,首选 `!?@self`(TYPE C,瞬态)。仅当你明确想要一个可恢复的、长期存在的"初心会话"用于多步骤子问题时,才使用 `!?@self !tellaskSession ...`。
190
+ - `freshBootsReasoning` 是专用函数工具,不是 Tellask 的特殊 target 别名。
191
+ - FBR 不接受 `sessionSlug` 或 `mentionList`。
192
+ - FBR 由更严格的“无工具”策略驱动;详见 [`fbr.zh.md`](./fbr.zh.md)。
194
193
 
195
194
  **Tellask 会话键模式**:`<tellaskSession>` 使用与 `<mention-id>` 相同的标识符模式:`[a-zA-Z][a-zA-Z0-9_-]*`。解析在空白或标点处停止;任何尾随的标题文本在 tellaskSession 解析时被忽略。
196
195
 
197
- **注册表键**:`agentId!tellaskSession`
196
+ **注册表键**:`agentId!sessionSlug`
198
197
 
199
198
  **行为**:
200
199
 
201
- 1. 检查注册表中是否存在键为 `agentId!tellaskSession` 的现有子对话
200
+ 1. 检查注册表中是否存在键为 `agentId!sessionSlug` 的现有子对话
202
201
  2. **如果存在**:恢复已注册的子对话
203
- 3. **如果不存在**:创建新的子对话并使用键 `agentId!tellaskSession` 注册它
202
+ 3. **如果不存在**:创建新的子对话并使用键 `agentId!sessionSlug` 注册它
204
203
  4. 父对话在子对话运行时**挂起**
205
204
  5. 子对话的响应流回父级
206
205
  6. 父级**恢复**,子对话的响应在上下文中
207
206
 
208
207
  **当前调用者跟踪(对复用很重要):**
209
208
 
210
- 当已注册的子对话被再次 Tellask(相同的 `agentId!tellaskSession`)时,调用者可能是**不同的对话**(主线对话或其他支线对话)。在每次 TYPE B Tellask 时,子对话的元数据都会更新为:
209
+ 当已注册的子对话被再次 Tellask(相同的 `agentId!sessionSlug`)时,调用者可能是**不同的对话**(主线对话或其他支线对话)。在每次 TYPE B Tellask 时,子对话的元数据都会更新为:
211
210
 
212
211
  - **当前调用者对话 ID**(这样响应就会路由回*最新*的调用者)
213
212
  - **Tellask 信息**(标题/正文、来源角色、来源成员、callId)
@@ -216,7 +215,7 @@ LLM 发出:!?@orchestrator 我应该如何处理数据库迁移?
216
215
 
217
216
  **恢复时的 Tellask 上下文**:
218
217
 
219
- - 在每次 TYPE B Tellask(新的或恢复的)时,父级提供的 `tellaskHead`/`tellaskBody`
218
+ - 在每次 TYPE B Tellask(新的或恢复的)时,父级提供的 `mentionList`/`tellaskContent`
220
219
  在驱动子对话之前作为新用户消息追加到子对话中。
221
220
  这确保子对话在每次 Tellask 时都能收到最新的请求上下文。
222
221
  - 系统注入的恢复提示仅用于上下文,**不会被解析**为队友/工具 Tellask。
@@ -234,7 +233,7 @@ LLM 发出:!?@orchestrator 我应该如何处理数据库迁移?
234
233
  根对话:orchestrator
235
234
  注册表:{}(空)
236
235
 
237
- LLM 发出:!?@researcher !tellaskSession market-analysis
236
+ LLM 发出:tellask({ targetAgentId: "researcher", sessionSlug: "market-analysis", tellaskContent: "..." })
238
237
 
239
238
  结果(第一次调用):
240
239
  - 注册表查找:不存在 "researcher!market-analysis"
@@ -245,7 +244,7 @@ LLM 发出:!?@researcher !tellaskSession market-analysis
245
244
  - 响应流回 orchestrator
246
245
  - orchestrator 恢复
247
246
 
248
- LLM 再次发出:!?@researcher !tellaskSession market-analysis
247
+ LLM 再次发出:tellask({ targetAgentId: "researcher", sessionSlug: "market-analysis", tellaskContent: "..." })
249
248
 
250
249
  结果(第二次调用):
251
250
  - 注册表查找:"researcher!market-analysis" 存在
@@ -258,12 +257,12 @@ LLM 再次发出:!?@researcher !tellaskSession market-analysis
258
257
 
259
258
  ### TYPE C:瞬态子对话 Tellask(Type C / `Fresh Tellask` / 一次性诉请)
260
259
 
261
- **语法**:`!?@<nonSupdialogAgentId>`(无 `!tellaskSession`)
260
+ **语法**:`tellaskSessionless({ targetAgentId: "<nonSupdialogAgentId>", tellaskContent: "..." })`(无 `sessionSlug`)
262
261
 
263
- **扪心自问 (FBR) 自调用语法(默认;最常见)**:`!?@self`
262
+ **扪心自问 (FBR) 自调用语法(默认;最常见)**:`freshBootsReasoning({ tellaskContent: "..." })`
264
263
 
265
- - `!?@self` 指向当前对话的 agentId,并创建一条路由到同一 agentId 的**新的临时子对话**。
266
- - 由 `!?@self` 创建的支线对话属于 FBR,并以更严格的“无工具”策略驱动;详见 [`fbr.zh.md`](./fbr.zh.md)。
264
+ - `freshBootsReasoning({ tellaskContent: "..." })` 指向当前对话的 agentId,并创建一条路由到同一 agentId 的**新的临时子对话**。
265
+ - 由 `freshBootsReasoning({ tellaskContent: "..." })` 创建的支线对话属于 FBR,并以更严格的“无工具”策略驱动;详见 [`fbr.zh.md`](./fbr.zh.md)。
267
266
  - 对于大多数扪心自问 会话使用此方式:隔离单个子问题,产生答案,然后返回。
268
267
 
269
268
  **行为**:
@@ -272,7 +271,7 @@ LLM 再次发出:!?@researcher !tellaskSession market-analysis
272
271
  2. 使用指定的 agentId 创建**新的子对话**
273
272
  3. 驱动新的子对话:
274
273
  - 一般 TYPE C 子对话是“完整能力”的(可上位调用、队友诉请、按配置使用工具)。
275
- - `!?@self` 属于 FBR 特例:无工具、诉请受限(见 `fbr.zh.md`)。
274
+ - `freshBootsReasoning({ tellaskContent: "..." })` 属于 FBR 特例:无工具、诉请受限(见 `fbr.zh.md`)。
276
275
  4. 子对话的响应流回父级
277
276
  5. 父级**恢复**,子对话的响应在上下文中
278
277
 
@@ -280,7 +279,7 @@ LLM 再次发出:!?@researcher !tellaskSession market-analysis
280
279
 
281
280
  - **无注册表查找** - 总是创建新的子对话
282
281
  - **不注册** - 在 Tellask 之间不持久化
283
- - 子对话本身一般是“完整能力”的;但 `!?@self` FBR 是特例:无工具且诉请受限(见 `fbr.zh.md`)。
282
+ - 子对话本身一般是“完整能力”的;但 `freshBootsReasoning({ tellaskContent: "..." })` FBR 是特例:无工具且诉请受限(见 `fbr.zh.md`)。
284
283
  - 与 TYPE B 的唯一区别:无注册表查找/恢复能力
285
284
  - 用于一次性的、独立的任务
286
285
 
@@ -309,16 +308,16 @@ LLM 再次发出:@code-reviewer 审查这个其他 PR
309
308
 
310
309
  ### 对比总结
311
310
 
312
- | 方面 | TYPE A:上位 Tellask (`TellaskBack`) | TYPE B:已注册子对话 Tellask (`Tellask Session`) | TYPE C:瞬态子对话 Tellask (`Fresh Tellask`) |
313
- | ------------------- | ------------------------------------ | ------------------------------------------------ | -------------------------------------------- |
314
- | **语法** | `!?@<supdialogAgentId>` | `!?@<anyAgentId> !tellaskSession <id>` | `!?@<nonSupdialogAgentId>` |
315
- | **!tellaskSession** | 不允许 | 必须 | 不允许 |
316
- | **注册表查找** | 否(使用 `subdialog.supdialog`) | 是(`agentId!tellaskSession`) | 否(永不注册) |
317
- | **恢复** | 否(上位对话不是子对话) | 是(查找找到现有的) | 否(总是新的) |
318
- | **注册** | 不适用 | 创建并注册 | 永不注册 |
319
- | **父级行为** | 子对话挂起 | 父级挂起 | 父级挂起 |
320
- | **子对话能力** | 完整(上位调用、队友、工具) | 完整(上位调用、队友、工具) | 完整(上位调用、队友、工具) |
321
- | **用例** | 从父级澄清(`TellaskBack`) | 恢复持久子任务(`Tellask Session`) | 一次性独立任务(`Fresh Tellask`) |
311
+ | 方面 | TYPE A:上位 Tellask (`TellaskBack`) | TYPE B:已注册子对话 Tellask (`Tellask Session`) | TYPE C:瞬态子对话 Tellask (`Fresh Tellask`) |
312
+ | --------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
313
+ | **语法** | `tellaskBack({ tellaskContent: "..." })` | `tellask({ targetAgentId: "<anyAgentId>", sessionSlug: "<id>", tellaskContent: "..." })` | `tellaskSessionless({ targetAgentId: "<nonSupdialogAgentId>", tellaskContent: "..." })` |
314
+ | **sessionSlug** | 不允许 | 必须 | 不允许 |
315
+ | **注册表查找** | 否(使用 `subdialog.supdialog`) | 是(`agentId!sessionSlug`) | 否(永不注册) |
316
+ | **恢复** | 否(上位对话不是子对话) | 是(查找找到现有的) | 否(总是新的) |
317
+ | **注册** | 不适用 | 创建并注册 | 永不注册 |
318
+ | **父级行为** | 子对话挂起 | 父级挂起 | 父级挂起 |
319
+ | **子对话能力** | 完整(上位调用、队友、工具) | 完整(上位调用、队友、工具) | 完整(上位调用、队友、工具) |
320
+ | **用例** | 从父级澄清(`TellaskBack`) | 恢复持久子任务(`Tellask Session`) | 一次性独立任务(`Fresh Tellask`) |
322
321
 
323
322
  ---
324
323
 
@@ -329,7 +328,7 @@ Dominds 对话系统建立在四个相互关联的核心机制之上,这些机
329
328
  ```mermaid
330
329
  flowchart TD
331
330
  H[对话层级<br/>(root ↔ 子对话)] <--> S[子对话供应<br/>(响应、待处理列表、注册表)]
332
- H --> Q[Q4H (!?@human)<br/>(q4h.yaml 索引)]
331
+ H --> Q[Q4H (!?askHuman())<br/>(q4h.yaml 索引)]
333
332
  S --> Q
334
333
 
335
334
  Q --> UI[前端 Q4H 面板<br/>(questions_count_update)]
@@ -343,7 +342,7 @@ flowchart TD
343
342
 
344
343
  ### 关键设计原则
345
344
 
346
- 1. **Q4H 索引在 `q4h.yaml` 中**:Q4H 问题被索引在 `q4h.yaml` 中(作为索引,不是真理之源),并由思维清晰操作清除。实际的问题内容在对话的对话消息中,其中记录了 `!?@human` Tellask。它们不会在 `clear_mind` 中存活。
345
+ 1. **Q4H 索引在 `q4h.yaml` 中**:Q4H 问题被索引在 `q4h.yaml` 中(作为索引,不是真理之源),并由思维清晰操作清除。实际的问题内容在对话的对话消息中,其中记录了 `!?askHuman()` Tellask。它们不会在 `clear_mind` 中存活。
347
346
 
348
347
  2. **层级 Q4H**:层级中的任何对话都可以自行提出 Q4H(根对话或子对话)。问题被索引在提出问题的对话中,而不是向上传递。
349
348
 
@@ -375,20 +374,20 @@ Q4H(向人类提问)是对话可以暂停执行并请求人工输入的机
375
374
  /**
376
375
  * HumanQuestion - 索引条目持久化在每个对话的 q4h.yaml 中
377
376
  * 注意:这是索引,不是真理之源。实际的 question
378
- * 内容在对话的对话消息中,其中记录了 @human Tellask
379
- *(通过 !?@human 调用)。
377
+ * 内容在对话的对话消息中,其中记录了 askHuman() Tellask
378
+ *(通过 !?askHuman() 调用)。
380
379
  */
381
380
  interface HumanQuestion {
382
381
  readonly id: string; // 唯一标识符(UUID)- 匹配消息 ID
383
- readonly tellaskHead: string; // 问题标题
384
- readonly bodyContent: string; // 详细问题上下文
382
+ readonly mentionList: string; // 问题标题
383
+ readonly tellaskContent: string; // 详细问题上下文
385
384
  readonly askedAt: string; // ISO 时间戳
386
385
  }
387
386
  ```
388
387
 
389
388
  **存储位置**:`<dialog-path>/q4h.yaml` - 作为快速查找的索引
390
389
 
391
- **真理之源**:实际的 `!?@human` Tellask 存储在对话的对话消息中(course JSONL 文件),即提出问题的地方。
390
+ **真理之源**:实际的 `!?askHuman()` Tellask 存储在对话的对话消息中(course JSONL 文件),即提出问题的地方。
392
391
 
393
392
  ### Q4H 机制流程
394
393
 
@@ -412,33 +411,33 @@ sequenceDiagram
412
411
 
413
412
  ### 对话何时提出 Q4H?
414
413
 
415
- `!?@human` 队友 Tellask 被任何对话(根或子对话)自行调用时,会提出 Q4H:
414
+ `!?askHuman()` 队友 Tellask 被任何对话(根或子对话)自行调用时,会提出 Q4H:
416
415
 
417
416
  ```typescript
418
417
  // 来自 main/llm/driver.ts,executeTellaskCall 函数
419
- const isQ4H = firstMention === 'human';
418
+ const isQ4H = callKind === 'askHuman';
420
419
  ```
421
420
 
422
421
  **调用模式**:
423
422
 
424
423
  ```
425
- !?@human <问题标题>
424
+ !?askHuman() <问题标题>
426
425
  !?<问题正文内容>
427
426
  ```
428
427
 
429
428
  ### Q4H 记录过程
430
429
 
431
430
  ```typescript
432
- // 当检测到 !?@human 作为队友 Tellask 时
431
+ // 当检测到 !?askHuman() 作为队友 Tellask 时
433
432
  async function recordQuestionForHuman(
434
433
  dlg: Dialog,
435
- tellaskHead: string,
436
- bodyContent: string,
434
+ mentionList: string,
435
+ tellaskContent: string,
437
436
  ): Promise<void> {
438
437
  const question: HumanQuestion = {
439
438
  id: generateDialogID(),
440
- tellaskHead,
441
- bodyContent,
439
+ mentionList,
440
+ tellaskContent,
442
441
  askedAt: formatUnifiedTimestamp(new Date()),
443
442
  };
444
443
 
@@ -503,7 +502,7 @@ interface DriveDialogByUserAnswerRequest {
503
502
  **流程(智能体拉取模型)**:
504
503
 
505
504
  1. 用户在 UI 中看到 Q4H 指示器/徽章
506
- 2. 用户点击面板/列表中的 Q4H,导航到 `@human` Tellask 站点
505
+ 2. 用户点击面板/列表中的 Q4H,导航到 `askHuman()` Tellask 站点
507
506
  3. 用户在输入文本区域中输入答案(与常规消息相同)
508
507
  4. 前端发送 `drive_dialog_by_user_answer` 数据包
509
508
  5. 后端根据 q4h.yaml 验证 `questionId`
@@ -547,7 +546,7 @@ sequenceDiagram
547
546
  Sup->>Sub: 创建子对话(TYPE B 或 C)
548
547
  Note over Sup: 上位对话因待处理子对话而阻塞
549
548
 
550
- Sub->>WS: 发出 !?@human 问题
549
+ Sub->>WS: 发出 !?askHuman() 问题
551
550
  WS-->>UI: questions_count_update
552
551
  Note over Sub: 子对话在回答之前无法继续
553
552
 
@@ -719,7 +718,7 @@ async function checkSubdialogRevival(supdialog: Dialog): Promise<void> {
719
718
 
720
719
  **实现说明**:
721
720
 
722
- - `change_mind` 仅在根对话中可用(不在子对话中);子对话必须通过回问诉请(`!?@tellasker`)询问诉请者以更新共享 Taskdoc。
721
+ - `change_mind` 仅在根对话中可用(不在子对话中);子对话必须通过回问诉请(`tellaskBack({ tellaskContent: "..." })`)询问诉请者以更新共享 Taskdoc。
723
722
  - 对于 `*.tsk/` Taskdoc 包,Taskdoc 是封装的:通用文件工具不得读取/写入/列出/删除 `*.tsk/` 下的任何内容。请参阅 [`encapsulated-taskdoc.zh.md`](./encapsulated-taskdoc.zh.md)。
724
723
 
725
724
  ---
@@ -759,7 +758,7 @@ async function checkSubdialogRevival(supdialog: Dialog): Promise<void> {
759
758
  | 方面 | 描述 |
760
759
  | ------------ | ------------------------------------------ |
761
760
  | **作用域** | 仅限根对话(子对话无法访问) |
762
- | **键格式** | `agentId!tellaskSession`(单级 Map) |
761
+ | **键格式** | `agentId!sessionSlug`(单级 Map) |
763
762
  | **存储** | 根对话目录中的 `registry.yaml` |
764
763
  | **生命周期** | 正常流程保留;被宣布卡死的子对话条目会移除 |
765
764
  | **持久化** | 根完成时随根移动到 `done/` |
@@ -780,7 +779,7 @@ researcher!market-analysis:
780
779
 
781
780
  ```mermaid
782
781
  flowchart TD
783
- Tellask[TYPE B Tellask: !?@agentId !tellaskSession tellaskSession] --> Key[计算键:agentId!tellaskSession]
782
+ Tellask[TYPE B Tellask: tellask({ targetAgentId: "agentId", sessionSlug: "tellaskSession", tellaskContent: "..." })] --> Key[计算键:agentId!sessionSlug]
784
783
  Key --> Lookup{注册表命中?}
785
784
  Lookup -- 是 --> Resume[恢复 + 驱动现有子对话]
786
785
  Lookup -- 否 --> Create[创建 + 注册 + 驱动新的子对话]
@@ -796,9 +795,9 @@ flowchart TD
796
795
 
797
796
  - `RootDialog`
798
797
  - 拥有 TYPE B 子对话注册表(`registry.yaml`)
799
- - 创建/注册/查找已注册的子对话(`agentId!tellaskSession`)
798
+ - 创建/注册/查找已注册的子对话(`agentId!sessionSlug`)
800
799
  - `SubDialog`
801
- - 有一个 `supdialog` 引用(直接父级)并将其用于 TYPE A(`!?@tellasker`)
800
+ - 有一个 `supdialog` 引用(直接父级)并将其用于 TYPE A(`tellaskBack({ tellaskContent: "..." })`)
802
801
  - 无法访问或更改根注册表(按设计)
803
802
 
804
803
  **互斥锁语义**:
@@ -910,7 +909,7 @@ interface RegistryMethods {
910
909
  **上下文继承**:新的子对话自动接收:
911
910
 
912
911
  - 对相同 rtws(运行时工作区)Taskdoc 的引用(推荐:`tasks/feature-auth.tsk/`);`dlg.taskDocPath` 在对话创建时固定,永不重新分配
913
- - 上位 Tellask 上下文(tellaskHead + tellaskBody)解释其目的
912
+ - 上位 Tellask 上下文(mentionList + tellaskContent)解释其目的
914
913
  - 访问共享团队内存
915
914
  - 访问其智能体的个人内存
916
915
 
@@ -1075,7 +1074,7 @@ flowchart TD
1075
1074
 
1076
1075
  这些图表专注于**控制流**,避免框图对齐,以便在不同的markdown查看器中呈现时保持可读性。
1077
1076
 
1078
- #### TYPE A:回问诉请(`TellaskBack`)(`!?@tellasker`,无 `!tellaskSession`)
1077
+ #### TYPE A:回问诉请(`TellaskBack`)(`tellaskBack({ tellaskContent: "..." })`,无 `sessionSlug`)
1079
1078
 
1080
1079
  ```mermaid
1081
1080
  sequenceDiagram
@@ -1083,13 +1082,13 @@ sequenceDiagram
1083
1082
  participant Driver as 后端驱动程序
1084
1083
  participant Sup as 上位对话(直接父级)
1085
1084
 
1086
- Sub->>Driver: 发出 `!?@tellasker` + 问题
1085
+ Sub->>Driver: 发出 `tellaskBack({ tellaskContent: "..." })` + 问题
1087
1086
  Driver->>Sup: 驱动上位对话以回答
1088
1087
  Sup-->>Driver: 响应文本
1089
1088
  Driver-->>Sub: 恢复子对话,响应在上下文中
1090
1089
  ```
1091
1090
 
1092
- #### TYPE B:已注册子对话 Tellask(`Tellask Session`)(`!?@agentId !tellaskSession tellaskSession`,或 `!?@self !tellaskSession tellaskSession`)
1091
+ #### TYPE B:已注册子对话 Tellask(`Tellask Session`)(`tellask({ targetAgentId: "agentId", sessionSlug: "tellaskSession", tellaskContent: "..." })`)
1093
1092
 
1094
1093
  ```mermaid
1095
1094
  sequenceDiagram
@@ -1098,8 +1097,8 @@ sequenceDiagram
1098
1097
  participant Reg as 根子对话注册表
1099
1098
  participant Sub as 已注册的子对话
1100
1099
 
1101
- Caller->>Driver: 发出 `!?@agentId !tellaskSession tellaskSession`
1102
- Driver->>Reg: 查找 `agentId!tellaskSession`
1100
+ Caller->>Driver: 发出 `tellask({ targetAgentId: "agentId", sessionSlug: "tellaskSession", tellaskContent: "..." })`
1101
+ Driver->>Reg: 查找 `agentId!sessionSlug`
1103
1102
  alt 注册表命中
1104
1103
  Reg-->>Driver: 现有子对话 selfId
1105
1104
  Driver->>Sub: 恢复 + 驱动
@@ -1117,7 +1116,7 @@ end
1117
1116
 
1118
1117
  ````
1119
1118
 
1120
- #### TYPE C:瞬态子对话 Tellask(`Fresh Tellask`)(`!?@agentId`,或 `!?@self`)
1119
+ #### TYPE C:瞬态子对话 Tellask(`Fresh Tellask`)(`tellaskSessionless({ targetAgentId: "agentId", tellaskContent: "..." })`,或 `freshBootsReasoning({ tellaskContent: "..." })`)
1121
1120
 
1122
1121
  ```mermaid
1123
1122
  sequenceDiagram
@@ -1125,7 +1124,7 @@ sequenceDiagram
1125
1124
  participant Driver as 后端驱动程序
1126
1125
  participant Sub as 瞬态子对话
1127
1126
 
1128
- Caller->>Driver: 发出 `!?@agentId`
1127
+ Caller->>Driver: 发出 `tellaskSessionless({ targetAgentId: "agentId", tellaskContent: "..." })`
1129
1128
  Driver->>Sub: 创建(不注册)
1130
1129
  Driver->>Sub: 驱动
1131
1130
  Sub-->>Driver: 最终响应
@@ -1136,7 +1135,7 @@ sequenceDiagram
1136
1135
 
1137
1136
  ```mermaid
1138
1137
  flowchart TD
1139
- A[!?@human Tellask 发出] --> B[将 HumanQuestion 条目追加到 q4h.yaml]
1138
+ A[!?askHuman() Tellask 发出] --> B[将 HumanQuestion 条目追加到 q4h.yaml]
1140
1139
  B --> C[发出 questions_count_update]
1141
1140
  C --> D[UI 显示 Q4H 徽章/列表]
1142
1141
  D --> E{如何清除?}
@@ -1160,7 +1159,7 @@ sequenceDiagram
1160
1159
 
1161
1160
  Sup->>Sub: 创建子对话(TYPE B 或 C)
1162
1161
  Note over Sup,Sub: 上位对话因待处理子对话而阻塞
1163
- Sub->>WS: 发出 !?@human 问题(Q4H)
1162
+ Sub->>WS: 发出 !?askHuman() 问题(Q4H)
1164
1163
  WS-->>UI: questions_count_update(全局)
1165
1164
 
1166
1165
  Note over Sub: 子对话在回答之前无法继续
@@ -1189,7 +1188,7 @@ sequenceDiagram
1189
1188
  participant Store as 持久化(q4h.yaml)
1190
1189
  participant UI as 前端
1191
1190
 
1192
- User->>Main: !?@human 问题
1191
+ User->>Main: !?askHuman() 问题
1193
1192
  Main->>Store: recordQuestionForHuman()
1194
1193
  Main-->>UI: questions_count_update
1195
1194
  Main-->>Main: 暂停根驱动循环
@@ -1246,7 +1245,7 @@ sequenceDiagram
1246
1245
  sequenceDiagram
1247
1246
  participant Root as 根对话
1248
1247
  participant Store as 持久化(registry.yaml + dialogs/)
1249
- participant Sub as 子对话(@researcher !tellaskSession market)
1248
+ participant Sub as 子对话(@researcher sessionSlug market)
1250
1249
 
1251
1250
  Root->>Store: lookup registry key "researcher!market"
1252
1251
  alt not found
@@ -1320,11 +1319,11 @@ Dominds 对话系统为层次化、人在回路的 AI 协作提供了一个强
1320
1319
 
1321
1320
  ### 三种队友 Tellask 类型
1322
1321
 
1323
- | 类型(内部) | 用户可见术语 | 语法 | 注册表 | 用例 |
1324
- | ------------ | ----------------- | --------------------------------- | ------------------------ | ---------------- |
1325
- | TYPE A | `TellaskBack` | `!?@tellasker` | 无注册表 | 澄清(询问来源) |
1326
- | TYPE B | `Tellask Session` | `!?@agentId !tellaskSession <id>` | `agentId!tellaskSession` | 可恢复多轮工作 |
1327
- | TYPE C | `Fresh Tellask` | `!?@agentId` | 未注册 | 单次 / 不可恢复 |
1322
+ | 类型(内部) | 用户可见术语 | 语法 | 注册表 | 用例 |
1323
+ | ------------ | ----------------- | ----------------------------------------------------------------------------------- | --------------------- | ---------------- |
1324
+ | TYPE A | `TellaskBack` | `tellaskBack({ tellaskContent: "..." })` | 无注册表 | 澄清(询问来源) |
1325
+ | TYPE B | `Tellask Session` | `tellask({ targetAgentId: "agentId", sessionSlug: "<id>", tellaskContent: "..." })` | `agentId!sessionSlug` | 可恢复多轮工作 |
1326
+ | TYPE C | `Fresh Tellask` | `tellaskSessionless({ targetAgentId: "agentId", tellaskContent: "..." })` | 未注册 | 单次 / 不可恢复 |
1328
1327
 
1329
1328
  ### 类职责
1330
1329
 
@@ -31,13 +31,13 @@ is legitimately suspended (Q4H or pending subdialogs).
31
31
 
32
32
  - **Root/main dialog**: a `RootDialog` (`dlg.id.rootId === dlg.id.selfId`), the primary conversation thread.
33
33
  - **Subdialog**: a `SubDialog`, created for tellask / scoped work.
34
- - **Q4H**: "Questions for Human", initiated via `!?@human`, which suspends dialog progression until the human responds.
34
+ - **Q4H**: "Questions for Human", initiated via `askHuman()`, which suspends dialog progression until the human responds.
35
35
 
36
36
  ## Expected "normal" completion path (recommended)
37
37
 
38
38
  When the agent needs a human decision to conclude (e.g., confirm a choice or decide whether to mark the dialog done), the correct path is:
39
39
 
40
- 1. The agent issues a Q4H (`!?@human`) with the necessary context and explicit decision request.
40
+ 1. The agent issues a Q4H (`askHuman()`) with the necessary context and explicit decision request.
41
41
  2. The WebUI surfaces the Q4H clearly.
42
42
  3. The human decides and either:
43
43
  - marks the root dialog "done" manually, or
@@ -27,13 +27,13 @@ Dominds 根对话旨在长期运行。根对话"停止"(变为空闲)通常
27
27
 
28
28
  - **根/主对话**:`RootDialog`(`dlg.id.rootId === dlg.id.selfId`),主要对话线程。
29
29
  - **子对话**:`SubDialog`,为 tellask / 作用域工作创建。
30
- - **Q4H**:"Questions for Human",通过 `!?@human` 发起,暂停对话进度直到人类响应。
30
+ - **Q4H**:"Questions for Human",通过 `askHuman()` 发起,暂停对话进度直到人类响应。
31
31
 
32
32
  ## 预期的"正常"完成路径(推荐)
33
33
 
34
34
  当智能体需要人类决策来结束时(例如,确认选择或决定是否将对话标记为完成),正确的路径是:
35
35
 
36
- 1. 智能体发出 Q4H(`!?@human`)并提供必要的上下文和明确的决策请求。
36
+ 1. 智能体发出 Q4H(`askHuman()`)并提供必要的上下文和明确的决策请求。
37
37
  2. WebUI 清楚地呈现 Q4H。
38
38
  3. 人类决定并:
39
39
  - 手动将根对话标记为"完成",或
@@ -4,8 +4,8 @@ Chinese version: [中文版](./dominds-agent-priming.zh.md)
4
4
 
5
5
  ## Summary
6
6
 
7
- Dominds has a real, runtime-enforced Tellask mechanism (`!?@...`) and a real, runtime-enforced Fresh Boots Reasoning
8
- (FBR) mechanism (`!?@self`). Even if system prompts explain these mechanisms in detail, most foundation models were not
7
+ Dominds has a real, runtime-enforced Tellask mechanism (`tellask* function call`) and a real, runtime-enforced Fresh Boots Reasoning
8
+ (FBR) mechanism (`freshBootsReasoning`). Even if system prompts explain these mechanisms in detail, most foundation models were not
9
9
  trained in a world where “asking a teammate to run a shell command” is actually possible, so they often treat such text
10
10
  as aspirational or hypothetical.
11
11
 
@@ -14,7 +14,7 @@ short, real Tellask + real return + real FBR + real distillation so the model ga
14
14
 
15
15
  - teammate Tellasks are real and will be executed
16
16
  - tool outputs are real and will be returned and persisted
17
- - `!?@self` FBR is real and will report back
17
+ - `freshBootsReasoning` FBR is real and will report back
18
18
  - distillation is expected (extract the best, dedupe, reconcile), not “repeat each draft”
19
19
 
20
20
  More precisely: it **guides the agent to show it to itself** — letting it personally walk through
@@ -31,7 +31,7 @@ Related docs:
31
31
 
32
32
  - Tellask runtime: [`dialog-system.md`](./dialog-system.md)
33
33
  - Terminology (Mainline/Sideline): [`dominds-terminology.md`](./dominds-terminology.md)
34
- - FBR (`!?@self`): [`fbr.md`](./fbr.md)
34
+ - FBR (`freshBootsReasoning`): [`fbr.md`](./fbr.md)
35
35
  - Work language vs UI language: [`i18n.md`](./i18n.md)
36
36
 
37
37
  ---
@@ -39,7 +39,7 @@ Related docs:
39
39
  ## Goals
40
40
 
41
41
  - Establish immediate trust that Tellask/return/persistence are real.
42
- - Run a real `!?@self` FBR loop at dialog creation.
42
+ - Run a real `freshBootsReasoning` FBR loop at dialog creation.
43
43
  - Build muscle memory for the timing contract: initiate FBR, wait for feedback, then synthesize/decide.
44
44
  - Make distillation itself part of the “felt” experience (dedupe/reconcile/extract-the-best).
45
45
  - Keep the procedure safe, small, and deterministic (default command: `uname -a`).
@@ -57,9 +57,9 @@ Related docs:
57
57
 
58
58
  - **Mainline dialog**: the primary thread where the user and the main agent interact.
59
59
  - **Sideline dialog**: a temporary work thread created by Tellask / FBR, reporting results back to the mainline.
60
- - **Tellask**: a structured request (`!?@<memberId> ...`) from a tellasker to a tellaskee.
60
+ - **Tellask**: a structured request (`tellask({ targetAgentId: "<memberId>", sessionSlug: "<slug>", tellaskContent: "..." })`) from a tellasker to a tellaskee.
61
61
  - **Shell specialist**: a teammate designated to run shell commands safely (configured via `shell_specialists`).
62
- - **FBR**: Fresh Boots Reasoning, implemented as `!?@self` (a tool-less sideline dialog). See [`fbr.md`](./fbr.md).
62
+ - **FBR**: Fresh Boots Reasoning, implemented as `freshBootsReasoning` (a tool-less sideline dialog). See [`fbr.md`](./fbr.md).
63
63
 
64
64
  ---
65
65
 
@@ -92,7 +92,7 @@ The Tellask body should be short and operational:
92
92
 
93
93
  ### 3) Real FBR: reflect on what the environment implies
94
94
 
95
- After obtaining the environment snapshot, the main agent issues a real `!?@self` Tellask to trigger FBR.
95
+ After obtaining the environment snapshot, the main agent issues a real `freshBootsReasoning` Tellask to trigger FBR.
96
96
 
97
97
  The FBR body should include:
98
98
 
@@ -102,7 +102,7 @@ The FBR body should include:
102
102
 
103
103
  Optional parallel drafts:
104
104
 
105
- - If the team member config enables `fbr_effort` (default `3`), the runtime creates multiple `!?@self` FBR sideline
105
+ - If the team member config enables `fbr_effort` (default `3`), the runtime creates multiple `freshBootsReasoning` FBR sideline
106
106
  dialogs concurrently so the agent produces multiple independent “fresh boots” drafts for the mainline dialog to
107
107
  distill.
108
108
  - These drafts have **no stable identity mapping**, and there is no meaningful ordering requirement; the mainline dialog
@@ -112,7 +112,7 @@ Optional parallel drafts:
112
112
 
113
113
  Phase boundary (critical):
114
114
 
115
- - `!?@self` is the **initiation action**, not completed decision-making.
115
+ - `freshBootsReasoning` is the **initiation action**, not completed decision-making.
116
116
  - Mainline must enter a wait phase until feedback from that FBR run returns.
117
117
  - If `fbr_effort = N`, mainline must wait for all N drafts before distillation; do not finalize from partial drafts.
118
118
 
@@ -197,7 +197,7 @@ Instead, inject a small, stable **course prefix** into model context at the star
197
197
  - Render Agent Priming as a realistic transcript the user can inspect.
198
198
  - Prefer a collapsible top section with clear labels:
199
199
  - “Teammate Tellask (shell)”
200
- - “FBR (`!?@self`)"
200
+ - “FBR (`freshBootsReasoning`)"
201
201
  - “Agent Priming”
202
202
 
203
203
  ### Opt-out