dominds 1.16.1 → 1.16.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 (175) hide show
  1. package/dist/dialog-display-state.d.ts +4 -0
  2. package/dist/dialog-display-state.js +138 -19
  3. package/dist/dialog-fork.js +13 -5
  4. package/dist/dialog-interruption.d.ts +18 -0
  5. package/dist/dialog-interruption.js +34 -0
  6. package/dist/docs/dominds-agent-collaboration.zh.md +401 -0
  7. package/dist/llm/api-quirks.d.ts +11 -0
  8. package/dist/llm/api-quirks.js +322 -24
  9. package/dist/llm/defaults.yaml +2 -1
  10. package/dist/llm/gen/mock.d.ts +1 -1
  11. package/dist/llm/gen/mock.js +12 -0
  12. package/dist/llm/gen/openai-compatible.d.ts +1 -1
  13. package/dist/llm/gen/openai-compatible.js +9 -1
  14. package/dist/llm/gen/openai.d.ts +1 -1
  15. package/dist/llm/gen/openai.js +16 -2
  16. package/dist/llm/gen.d.ts +10 -0
  17. package/dist/llm/gen.js +10 -0
  18. package/dist/llm/kernel-driver/drive.js +994 -866
  19. package/dist/llm/kernel-driver/runtime.d.ts +16 -2
  20. package/dist/llm/kernel-driver/runtime.js +75 -10
  21. package/dist/llm/stop-reason-i18n.d.ts +9 -0
  22. package/dist/llm/stop-reason-i18n.js +114 -0
  23. package/dist/persistence-errors.d.ts +26 -0
  24. package/dist/persistence-errors.js +68 -0
  25. package/dist/persistence.d.ts +119 -82
  26. package/dist/persistence.js +1055 -426
  27. package/dist/server/api-routes.js +174 -58
  28. package/dist/server/websocket-handler.js +125 -21
  29. package/dist/tools/team_mgmt.js +2 -2
  30. package/package.json +3 -3
  31. package/webapp/dist/assets/{_basePickBy-C0MXVhMo.js → _basePickBy-BJWCmtUm.js} +3 -3
  32. package/webapp/dist/assets/_basePickBy-BJWCmtUm.js.map +1 -0
  33. package/webapp/dist/assets/{_baseUniq-CRygl41M.js → _baseUniq-D6k_lGfs.js} +2 -2
  34. package/webapp/dist/assets/_baseUniq-D6k_lGfs.js.map +1 -0
  35. package/webapp/dist/assets/{arc-BeHJtnt2.js → arc-DYDaESgj.js} +2 -2
  36. package/webapp/dist/assets/arc-DYDaESgj.js.map +1 -0
  37. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CGdo5TVi.js → architectureDiagram-VXUJARFQ-DZMT7dqc.js} +8 -26
  38. package/webapp/dist/assets/architectureDiagram-VXUJARFQ-DZMT7dqc.js.map +1 -0
  39. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-C59VaSGw.js → blockDiagram-VD42YOAC-CABpgVAa.js} +170 -187
  40. package/webapp/dist/assets/blockDiagram-VD42YOAC-CABpgVAa.js.map +1 -0
  41. package/webapp/dist/assets/{c4Diagram-IC4MRINW-B3YCBmTx.js → c4Diagram-YG6GDRKO-COLZS8Ul.js} +4 -4
  42. package/webapp/dist/assets/c4Diagram-YG6GDRKO-COLZS8Ul.js.map +1 -0
  43. package/webapp/dist/assets/{channel-Dn4i8EAY.js → channel-CYFm9Cri.js} +2 -2
  44. package/webapp/dist/assets/channel-CYFm9Cri.js.map +1 -0
  45. package/webapp/dist/assets/{chunk-4BX2VUAB-CQbB3HlW.js → chunk-4BX2VUAB-CX_-XbaN.js} +2 -2
  46. package/webapp/dist/assets/chunk-4BX2VUAB-CX_-XbaN.js.map +1 -0
  47. package/webapp/dist/assets/{chunk-55IACEB6-CkQR_Qu9.js → chunk-55IACEB6-ByD-NdBC.js} +2 -2
  48. package/webapp/dist/assets/chunk-55IACEB6-ByD-NdBC.js.map +1 -0
  49. package/webapp/dist/assets/{chunk-WL4C6EOR-Bjl-j3bf.js → chunk-B4BG7PRW-BANemsDD.js} +121 -171
  50. package/webapp/dist/assets/chunk-B4BG7PRW-BANemsDD.js.map +1 -0
  51. package/webapp/dist/assets/{chunk-NQ4KR5QH-DBxY8LL2.js → chunk-DI55MBZ5-DV7sdJmQ.js} +7 -9
  52. package/webapp/dist/assets/chunk-DI55MBZ5-DV7sdJmQ.js.map +1 -0
  53. package/webapp/dist/assets/{chunk-FMBD7UC4-YSIOuaST.js → chunk-FMBD7UC4-DYGviJnf.js} +2 -2
  54. package/webapp/dist/assets/chunk-FMBD7UC4-DYGviJnf.js.map +1 -0
  55. package/webapp/dist/assets/{chunk-KX2RTZJC-DFiwgnFf.js → chunk-QN33PNHL-B8DWRL9f.js} +2 -2
  56. package/webapp/dist/assets/chunk-QN33PNHL-B8DWRL9f.js.map +1 -0
  57. package/webapp/dist/assets/{chunk-QZHKN3VN-BAdR6lLc.js → chunk-QZHKN3VN-B1aYIzMR.js} +2 -2
  58. package/webapp/dist/assets/chunk-QZHKN3VN-B1aYIzMR.js.map +1 -0
  59. package/webapp/dist/assets/{chunk-JSJVCQXG-CWDLRawz.js → chunk-TZMSLE5B-_HISzxl3.js} +6 -14
  60. package/webapp/dist/assets/chunk-TZMSLE5B-_HISzxl3.js.map +1 -0
  61. package/webapp/dist/assets/{classDiagram-VBA2DB6C-KBeS6WXD.js → classDiagram-2ON5EDUG-CpyYj1Rc.js} +6 -7
  62. package/webapp/dist/assets/classDiagram-2ON5EDUG-CpyYj1Rc.js.map +1 -0
  63. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-KBeS6WXD.js → classDiagram-v2-WZHVMYZB-CpyYj1Rc.js} +6 -7
  64. package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-CpyYj1Rc.js.map +1 -0
  65. package/webapp/dist/assets/{clone-C7-aS2vm.js → clone-B_9AxWIU.js} +2 -2
  66. package/webapp/dist/assets/clone-B_9AxWIU.js.map +1 -0
  67. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-Bo5IsL-5.js → cose-bilkent-S5V4N54A-17ECLfPR.js} +2 -2
  68. package/webapp/dist/assets/cose-bilkent-S5V4N54A-17ECLfPR.js.map +1 -0
  69. package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
  70. package/webapp/dist/assets/{dagre-KLK3FWXG-C3FeHj7D.js → dagre-6UL2VRFP-DhRqcF1o.js} +7 -7
  71. package/webapp/dist/assets/dagre-6UL2VRFP-DhRqcF1o.js.map +1 -0
  72. package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
  73. package/webapp/dist/assets/{diagram-E7M64L7V-0HfiRW0u.js → diagram-PSM6KHXK-lpDT6Wwb.js} +10 -10
  74. package/webapp/dist/assets/diagram-PSM6KHXK-lpDT6Wwb.js.map +1 -0
  75. package/webapp/dist/assets/{diagram-IFDJBPK2-DJwh7SMO.js → diagram-QEK2KX5R-ohxbPpDH.js} +8 -9
  76. package/webapp/dist/assets/diagram-QEK2KX5R-ohxbPpDH.js.map +1 -0
  77. package/webapp/dist/assets/{diagram-P4PSJMXO-Y0RbvUZX.js → diagram-S2PKOQOG-DAFFGfch.js} +8 -8
  78. package/webapp/dist/assets/diagram-S2PKOQOG-DAFFGfch.js.map +1 -0
  79. package/webapp/dist/assets/{erDiagram-INFDFZHY-B183xyLa.js → erDiagram-Q2GNP2WA-BH-7rI43.js} +75 -96
  80. package/webapp/dist/assets/erDiagram-Q2GNP2WA-BH-7rI43.js.map +1 -0
  81. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-C_BR3Y3J.js → flowDiagram-NV44I4VS-CdEjFbz4.js} +81 -98
  82. package/webapp/dist/assets/flowDiagram-NV44I4VS-CdEjFbz4.js.map +1 -0
  83. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-CHLgkuJT.js → ganttDiagram-JELNMOA3-Cju2t-lK.js} +3 -28
  84. package/webapp/dist/assets/ganttDiagram-JELNMOA3-Cju2t-lK.js.map +1 -0
  85. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D6C_HU1q.js → gitGraphDiagram-V2S2FVAM-CUJ5oxCg.js} +46 -38
  86. package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-CUJ5oxCg.js.map +1 -0
  87. package/webapp/dist/assets/graph-mhcc7ldf.js +425 -0
  88. package/webapp/dist/assets/graph-mhcc7ldf.js.map +1 -0
  89. package/webapp/dist/assets/{index-CLoNHmSQ.js → index-BLnM-uON.js} +2098 -1841
  90. package/webapp/dist/assets/{index-CLoNHmSQ.js.map → index-BLnM-uON.js.map} +1 -1
  91. package/webapp/dist/assets/{index-YaxF76or.css → index-xvYYeHuy.css} +1 -1
  92. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-mnMS61NO.js → infoDiagram-HS3SLOUP-Df8p0okQ.js} +7 -7
  93. package/webapp/dist/assets/infoDiagram-HS3SLOUP-Df8p0okQ.js.map +1 -0
  94. package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
  95. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-BdeERn0r.js → journeyDiagram-XKPGCS4Q-BXMl8H-d.js} +5 -5
  96. package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-BXMl8H-d.js.map +1 -0
  97. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-MLeCGcYg.js → kanban-definition-3W4ZIXB7-Cc5RwCEh.js} +3 -5
  98. package/webapp/dist/assets/kanban-definition-3W4ZIXB7-Cc5RwCEh.js.map +1 -0
  99. package/webapp/dist/assets/{layout-DY9VEQ9M.js → layout-BB2SvQcE.js} +5 -5
  100. package/webapp/dist/assets/layout-BB2SvQcE.js.map +1 -0
  101. package/webapp/dist/assets/{linear-D-T1xRsr.js → linear-Cj50lA0a.js} +2 -2
  102. package/webapp/dist/assets/linear-Cj50lA0a.js.map +1 -0
  103. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-CrVm8vj2.js → mindmap-definition-VGOIOE7T-BLBklJVX.js} +5 -7
  104. package/webapp/dist/assets/mindmap-definition-VGOIOE7T-BLBklJVX.js.map +1 -0
  105. package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
  106. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-GtLLV0r1.js → pieDiagram-ADFJNKIX-BQrOgSc-.js} +8 -8
  107. package/webapp/dist/assets/pieDiagram-ADFJNKIX-BQrOgSc-.js.map +1 -0
  108. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-BCgk_2LP.js → quadrantDiagram-AYHSOK5B-C62TxtsO.js} +3 -3
  109. package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-C62TxtsO.js.map +1 -0
  110. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-DYUKHWKR.js → requirementDiagram-UZGBJVZJ-Is6Q3osM.js} +6 -16
  111. package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-Is6Q3osM.js.map +1 -0
  112. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-CFAH8OaY.js → sankeyDiagram-TZEHDZUN-CCAW8Dr2.js} +2 -2
  113. package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-CCAW8Dr2.js.map +1 -0
  114. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-BTnhbv6w.js → sequenceDiagram-WL72ISMW-DpODpbl6.js} +201 -601
  115. package/webapp/dist/assets/sequenceDiagram-WL72ISMW-DpODpbl6.js.map +1 -0
  116. package/webapp/dist/assets/{stateDiagram-RAJIS63D-DWUnJTwO.js → stateDiagram-FKZM4ZOC-B8LHaf5T.js} +9 -9
  117. package/webapp/dist/assets/stateDiagram-FKZM4ZOC-B8LHaf5T.js.map +1 -0
  118. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-B-fc52bp.js → stateDiagram-v2-4FDKWEC3-4FzTkpgz.js} +5 -5
  119. package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-4FzTkpgz.js.map +1 -0
  120. package/webapp/dist/assets/{timeline-definition-YZTLITO2-BMZ52QaG.js → timeline-definition-IT6M3QCI-Ckxc4qZe.js} +3 -3
  121. package/webapp/dist/assets/timeline-definition-IT6M3QCI-Ckxc4qZe.js.map +1 -0
  122. package/webapp/dist/assets/{treemap-KZPCXAKY-fgSrze0S.js → treemap-GDKQZRPO-QQa4vKMv.js} +24 -37
  123. package/webapp/dist/assets/treemap-GDKQZRPO-QQa4vKMv.js.map +1 -0
  124. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-D6aviLtC.js → xychartDiagram-PRI3JC2R-Ba2uJcs6.js} +4 -4
  125. package/webapp/dist/assets/xychartDiagram-PRI3JC2R-Ba2uJcs6.js.map +1 -0
  126. package/webapp/dist/index.html +2 -2
  127. package/webapp/dist/assets/_basePickBy-C0MXVhMo.js.map +0 -1
  128. package/webapp/dist/assets/_baseUniq-CRygl41M.js.map +0 -1
  129. package/webapp/dist/assets/arc-BeHJtnt2.js.map +0 -1
  130. package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-CGdo5TVi.js.map +0 -1
  131. package/webapp/dist/assets/blockDiagram-WCTKOSBZ-C59VaSGw.js.map +0 -1
  132. package/webapp/dist/assets/c4Diagram-IC4MRINW-B3YCBmTx.js.map +0 -1
  133. package/webapp/dist/assets/channel-Dn4i8EAY.js.map +0 -1
  134. package/webapp/dist/assets/chunk-4BX2VUAB-CQbB3HlW.js.map +0 -1
  135. package/webapp/dist/assets/chunk-55IACEB6-CkQR_Qu9.js.map +0 -1
  136. package/webapp/dist/assets/chunk-FMBD7UC4-YSIOuaST.js.map +0 -1
  137. package/webapp/dist/assets/chunk-JSJVCQXG-CWDLRawz.js.map +0 -1
  138. package/webapp/dist/assets/chunk-KX2RTZJC-DFiwgnFf.js.map +0 -1
  139. package/webapp/dist/assets/chunk-NQ4KR5QH-DBxY8LL2.js.map +0 -1
  140. package/webapp/dist/assets/chunk-QZHKN3VN-BAdR6lLc.js.map +0 -1
  141. package/webapp/dist/assets/chunk-WL4C6EOR-Bjl-j3bf.js.map +0 -1
  142. package/webapp/dist/assets/classDiagram-VBA2DB6C-KBeS6WXD.js.map +0 -1
  143. package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-KBeS6WXD.js.map +0 -1
  144. package/webapp/dist/assets/clone-C7-aS2vm.js.map +0 -1
  145. package/webapp/dist/assets/cose-bilkent-S5V4N54A-Bo5IsL-5.js.map +0 -1
  146. package/webapp/dist/assets/dagre-KLK3FWXG-C3FeHj7D.js.map +0 -1
  147. package/webapp/dist/assets/diagram-E7M64L7V-0HfiRW0u.js.map +0 -1
  148. package/webapp/dist/assets/diagram-IFDJBPK2-DJwh7SMO.js.map +0 -1
  149. package/webapp/dist/assets/diagram-P4PSJMXO-Y0RbvUZX.js.map +0 -1
  150. package/webapp/dist/assets/erDiagram-INFDFZHY-B183xyLa.js.map +0 -1
  151. package/webapp/dist/assets/flowDiagram-PKNHOUZH-C_BR3Y3J.js.map +0 -1
  152. package/webapp/dist/assets/ganttDiagram-A5KZAMGK-CHLgkuJT.js.map +0 -1
  153. package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-D6C_HU1q.js.map +0 -1
  154. package/webapp/dist/assets/graph-D0hgB-X8.js +0 -782
  155. package/webapp/dist/assets/graph-D0hgB-X8.js.map +0 -1
  156. package/webapp/dist/assets/infoDiagram-LFFYTUFH-mnMS61NO.js.map +0 -1
  157. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-XFIJsnJj.js +0 -966
  158. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-XFIJsnJj.js.map +0 -1
  159. package/webapp/dist/assets/journeyDiagram-4ABVD52K-BdeERn0r.js.map +0 -1
  160. package/webapp/dist/assets/kanban-definition-K7BYSVSG-MLeCGcYg.js.map +0 -1
  161. package/webapp/dist/assets/layout-DY9VEQ9M.js.map +0 -1
  162. package/webapp/dist/assets/linear-D-T1xRsr.js.map +0 -1
  163. package/webapp/dist/assets/mindmap-definition-YRQLILUH-CrVm8vj2.js.map +0 -1
  164. package/webapp/dist/assets/pieDiagram-SKSYHLDU-GtLLV0r1.js.map +0 -1
  165. package/webapp/dist/assets/quadrantDiagram-337W2JSQ-BCgk_2LP.js.map +0 -1
  166. package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-DYUKHWKR.js.map +0 -1
  167. package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CFAH8OaY.js.map +0 -1
  168. package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-BTnhbv6w.js.map +0 -1
  169. package/webapp/dist/assets/stateDiagram-RAJIS63D-DWUnJTwO.js.map +0 -1
  170. package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-B-fc52bp.js.map +0 -1
  171. package/webapp/dist/assets/timeline-definition-YZTLITO2-BMZ52QaG.js.map +0 -1
  172. package/webapp/dist/assets/treemap-KZPCXAKY-fgSrze0S.js.map +0 -1
  173. package/webapp/dist/assets/vennDiagram-LZ73GAT5-D5DmDY9l.js +0 -2487
  174. package/webapp/dist/assets/vennDiagram-LZ73GAT5-D5DmDY9l.js.map +0 -1
  175. package/webapp/dist/assets/xychartDiagram-JWTSCODW-D6aviLtC.js.map +0 -1
@@ -0,0 +1,401 @@
1
+ # Dominds 智能体协作机制
2
+
3
+ 本文档面向**不运行在 Dominds 内部**、但需要理解 Dominds 协作方式的智能体与人类设计者。
4
+
5
+ 目标不是介绍实现细节,也不是比较优劣,而是回答两个问题:
6
+
7
+ 1. Dominds 团队在运行时是如何协作、挂起、恢复、回贴和升级给人的。
8
+ 2. 当用户描述一个业务场景时,外部智能体应如何据此设计一支合适的 Dominds 团队。
9
+
10
+ 相关参考:
11
+
12
+ - [对话系统实现](./dialog-system.zh.md)
13
+ - [术语表](./dominds-terminology.md)
14
+ - [记忆系统](./memory-system.zh.md)
15
+ - [封装式差遣牒](./encapsulated-taskdoc.zh.md)
16
+ - [Agent Priming(启动脚本)](./agent-priming.zh.md)
17
+ - [团队管理工具集](./team_mgmt-toolset.zh.md)
18
+
19
+ ## 一句话理解
20
+
21
+ Dominds 不是把“多个智能体”简单并排摆在一起,而是把**对话**作为协作单元,把**差遣牒**作为共享任务真源,把 `team.yaml` 作为组织结构定义,再用 **Tellask / TellaskBack / Q4H** 驱动跨角色协作。
22
+
23
+ 如果你是外部智能体,可以把 Dominds 理解为一种“有组织结构、共享公告板、显式挂起恢复机制”的多智能体工作系统。
24
+
25
+ ## 核心对象
26
+
27
+ ### 1. 团队成员不是“人格”,而是职责包
28
+
29
+ Dominds 团队成员通常由以下几类信息组成:
30
+
31
+ - **身份与职责**:这个成员负责什么,不负责什么。
32
+ - **路由卡(`gofor` / `nogo`)**:告诉其他成员“什么时候应该找我”“什么事情不要找我”。
33
+ - **能力边界**:模型、工具集、目录权限、是否能跑 shell、是否能改 `.minds/`、是否能维护团队记忆。
34
+ - **长期心智**:`persona / knowledge / lessons`。
35
+
36
+ 对外部智能体来说,设计团队时不要先想“起几个炫酷角色名”,而要先想:每个成员是否对应了一个稳定职责包。
37
+
38
+ ### 2. 对话才是运行中的协作实体
39
+
40
+ 在 Dominds 里,团队成员是静态定义;真正运行起来的是**对话**:
41
+
42
+ - **主线对话**:承载当前任务的共享差遣牒,负责整体推进。
43
+ - **支线对话**:围绕某个分项任务临时展开的工作对话。
44
+ - **诉请者对话 / 被诉请者对话**:一次协作调用中的 caller / callee 角色,不等于上下级。
45
+
46
+ 这意味着:同一个成员可以在不同时间参与多条对话;团队结构与运行中的对话流是两层东西。
47
+
48
+ ### 3. 差遣牒是共享任务真源
49
+
50
+ 每个对话树都有一份封装的任务包(`*.tsk/`),其中最核心的是三段:
51
+
52
+ - `goals`:这次任务完成时必须为真的结果。
53
+ - `constraints`:必须遵守的硬约束。
54
+ - `progress`:当前状态、关键决策、下一步。
55
+
56
+ 对于外部智能体,这一点非常重要:**Dominds 的共享协作不是靠“大家都记住聊天历史”,而是靠差遣牒持续对齐。**
57
+
58
+ 进一步说:
59
+
60
+ - 长期稳定的团队共识,放进 `team_memory` 或 `.minds/**`
61
+ - 成员个人的长期索引和习惯,放进 `personal_memory`
62
+ - 当前工作集细节,放进 reminder
63
+ - 需要复用的开场历史,做成 priming script
64
+
65
+ ### 4. `gofor` 是路由卡,不是完整岗位说明书
66
+
67
+ `gofor` 的作用是告诉其他成员或人类:
68
+
69
+ - 什么时候应该把事情诉请给这个成员
70
+ - 诉请后大概会得到什么帮助或产出
71
+
72
+ 它不应该替代完整的 `persona/knowledge/lessons`,也不应该塞满成员自己的全部操作细则。
73
+
74
+ 如果你是外部智能体,要为用户设计团队,`gofor` 最适合写成“何时找我 + 我返回什么”的路由卡,而不是长篇职责描述。
75
+
76
+ ## Dominds 的协作是怎样发生的
77
+
78
+ 下面用外部智能体容易复用的方式描述一次典型协作。
79
+
80
+ ### 1. 主线接单
81
+
82
+ 通常由 `default_responder` 先接到任务,开启主线对话。
83
+
84
+ 主线对话的第一职责不是立刻到处派工,而是先冻结任务真相:
85
+
86
+ - 把目标写入差遣牒 `goals`
87
+ - 把硬约束写入 `constraints`
88
+ - 把当前判断与下一步写入 `progress`
89
+
90
+ 如果这一步没有做好,后续再多支线也会失焦。
91
+
92
+ ### 2. 主线决定哪些工作要拆出去
93
+
94
+ 主线对话根据任务类型,决定哪些内容要交给其他成员。
95
+
96
+ 常见拆分维度:
97
+
98
+ - 业务判断
99
+ - 方案设计
100
+ - 编码实现
101
+ - shell 执行
102
+ - 测试验证
103
+ - 文案 / i18n
104
+ - 团队治理 / 配置变更
105
+
106
+ 这不是“平均分配工作量”,而是把**职责边界不同、上下文不同、工具权限不同**的工作拆开。
107
+
108
+ ### 3. 诉请产生支线协作
109
+
110
+ Dominds 里主要有三种协作诉请:
111
+
112
+ - **TellaskBack(回问诉请)**:支线需要澄清时,回问当前诉请者对话。
113
+ - **Tellask Session(长线诉请)**:适合多轮迭代、上下文可续用的协作。
114
+ - **Fresh Tellask(一次性诉请)**:一次性的、无需保留后续续话语义的协作。
115
+
116
+ 外部智能体做团队设计时,可以按下面的经验判断:
117
+
118
+ - 要持续多轮 debug、持续走查、反复修改同一子问题,用 **长线诉请**
119
+ - 只需要一次性取证、跑一次命令、给一份审阅结果,用 **一次性诉请**
120
+ - 支线发现关键信息缺失,不能猜,就用 **回问诉请**
121
+
122
+ ### 4. 协作不是“发消息就结束”,而是挂起与恢复
123
+
124
+ Dominds 的关键特征之一,是诉请后的运行态会显式管理:
125
+
126
+ - 主线可因等待支线结果而挂起
127
+ - 支线可因等待澄清而挂起
128
+ - 对话恢复由后端协程统一驱动
129
+ - 回贴会回到“当前诉请者对话”
130
+
131
+ 因此,从外部智能体的视角,Dominds 协作设计要考虑的不是“谁给谁发消息”,而是:
132
+
133
+ - 谁拥有当前任务真相
134
+ - 谁在等待谁
135
+ - 谁有权继续推进
136
+ - 谁的回复会被自动路由回哪条工作线
137
+
138
+ ### 5. 向人请示(Q4H)是正式阻塞点
139
+
140
+ 当没有足够依据继续推进,或需要人类决策时,Dominds 用 `askHuman(...)` 形成 **Q4H**。
141
+
142
+ Q4H 不是“顺手问一句”,而是一个正式的待答问题:
143
+
144
+ - 对话会因此挂起
145
+ - 问题会被索引与展示
146
+ - 人类回答后,对话再恢复
147
+
148
+ 外部智能体在设计团队时,应主动规划哪些点必须升级给人,而不是把人类只当成最后兜底。
149
+
150
+ ### 6. 支线负责产出结果,不负责偷偷改全局真相
151
+
152
+ 在 Dominds 的用户语境里,只有**主线对话主理人**拥有 `change_mind` 权限。
153
+
154
+ 这意味着:
155
+
156
+ - 支线可以分析、实现、验证、回贴
157
+ - 支线可以通过回问诉请要澄清
158
+ - 但共享差遣牒的更新权应收敛在主线
159
+
160
+ 这是一条很重要的组织规则:**谁拥有共享任务真源的更新权,谁就承担整体推进责任。**
161
+
162
+ 对外部智能体来说,这意味着团队设计时要分清:
163
+
164
+ - 谁是“局部执行 owner”
165
+ - 谁是“全局任务 owner”
166
+
167
+ 它们可以是同一个成员,也可以不是。
168
+
169
+ ## 外部智能体应如何设计 Dominds 团队
170
+
171
+ 下面这部分可直接作为 ChatGPT Pro 一类外部智能体的设计方法。
172
+
173
+ ### 第一步:先抽象业务工作流,不要先抽象岗位名
174
+
175
+ 先把用户需求拆成 5 个问题:
176
+
177
+ 1. 这项业务最终要交付什么结果。
178
+ 2. 哪些判断需要长期连续的上下文。
179
+ 3. 哪些工作需要不同工具、不同权限或不同专业视角。
180
+ 4. 哪些节点必须由人确认。
181
+ 5. 哪些规则必须长期沉淀为团队共识,而不是只存在于一次对话里。
182
+
183
+ 然后再决定团队成员,而不是反过来。
184
+
185
+ ### 第二步:用“职责边界”来拆成员
186
+
187
+ 一个成员适合独立存在,通常意味着它至少满足以下一条:
188
+
189
+ - 需要独立工具权限边界
190
+ - 需要长期稳定的专业判断口径
191
+ - 需要承担明确的交付物
192
+ - 需要频繁被其他成员诉请
193
+ - 需要作为治理或审批节点存在
194
+
195
+ 如果一个角色既没有独立权限,也没有稳定职责,也没有清晰产出,通常不值得单独设成成员。
196
+
197
+ ### 第三步:先定主线 owner,再定支线成员
198
+
199
+ 给用户设计团队时,先确定:
200
+
201
+ - 谁作为 `default_responder`
202
+ - 谁负责维护差遣牒
203
+ - 谁负责汇总支线回贴并继续推进
204
+
205
+ 然后再配置其他成员,例如:
206
+
207
+ - 实现型成员
208
+ - 证据收集型成员
209
+ - 审阅 / QA 成员
210
+ - 业务 owner
211
+ - 治理 / 团队配置成员
212
+ - shell specialist
213
+
214
+ 如果主线 owner 不清楚,团队很容易退化成“很多专家都在说话,但没人真正推进”。
215
+
216
+ ### 第四步:按协作持续性选择诉请形态
217
+
218
+ 团队设计时,可以把成员之间的连接关系分成三类:
219
+
220
+ - **长线协作链路**:例如“主线 PM ↔ 全栈开发”“主线 SRE ↔ 变更评审”
221
+ - **一次性能力调用**:例如“主线 → shell 专员跑一次命令”
222
+ - **高风险澄清链路**:例如“支线实现 → 主线 owner 回问约束”
223
+
224
+ 如果用户业务本身需要反复迭代同一问题,优先设计成长线诉请链路,并给出稳定的 `sessionSlug` 命名策略。
225
+
226
+ ### 第五步:把记忆和治理也当成职责设计的一部分
227
+
228
+ 外部智能体在设计团队时,不应只列“谁做开发、谁做测试”,还应明确:
229
+
230
+ - 谁维护 `team_memory`
231
+ - 谁能改 `.minds/**`
232
+ - 谁维护 priming scripts
233
+ - 谁需要个人记忆作为职责域索引
234
+ - 哪些业务约束必须进入差遣牒而不是停留在聊天里
235
+
236
+ 这决定团队能否在长程协作中持续稳定运转。
237
+
238
+ ## 一套可复用的设计框架
239
+
240
+ 外部智能体可按以下顺序为用户产出 Dominds 团队方案。
241
+
242
+ ### 1. 业务摘要
243
+
244
+ - 目标结果是什么
245
+ - 当前阶段是什么
246
+ - 主要风险是什么
247
+ - 哪些节点需要人工拍板
248
+
249
+ ### 2. 主线设计
250
+
251
+ - `default_responder` 选谁
252
+ - 主线对话由谁维护差遣牒
253
+ - 主线默认先做哪三件事
254
+
255
+ ### 3. 成员设计
256
+
257
+ 每个成员至少说明以下几点:
258
+
259
+ - `memberId`
260
+ - 角色名称
261
+ - `gofor`
262
+ - 主要交付物
263
+ - 非职责范围
264
+ - 需要的 toolsets / 权限边界
265
+ - 是否需要被其他成员长期反复诉请
266
+
267
+ ### 4. 协作链路设计
268
+
269
+ 至少说明:
270
+
271
+ - 哪些成员和主线是长线协作
272
+ - 哪些成员只接受一次性诉请
273
+ - 哪些成员可以发起回问诉请
274
+ - 哪些节点需要 Q4H
275
+
276
+ ### 5. 共享状态设计
277
+
278
+ 明确以下内容写到哪里:
279
+
280
+ - 任务目标和约束:差遣牒
281
+ - 关键决策和当前状态:差遣牒 `progress`
282
+ - 长期团队规范:`team_memory` / `.minds/**`
283
+ - 成员个人索引:`personal_memory`
284
+ - 短期工作集:reminder
285
+ - 可复用开场上下文:priming
286
+
287
+ ## 面向外部智能体的产出模板
288
+
289
+ 外部智能体可直接按下面模板向用户提交方案。
290
+
291
+ ```markdown
292
+ # Dominds 团队设计方案
293
+
294
+ ## 业务目标
295
+
296
+ - ...
297
+
298
+ ## 主线设计
299
+
300
+ - default_responder: ...
301
+ - 主线 owner: ...
302
+ - 主线职责:
303
+ - 冻结 goals / constraints / progress
304
+ - 决定派工
305
+ - 汇总支线结果
306
+ - 必要时发起 Q4H
307
+
308
+ ## 成员清单
309
+
310
+ | memberId | 负责什么 | 何时诉请它(gofor) | 主要交付 | 不负责什么 | 工具/权限 |
311
+ | -------- | -------- | ------------------- | -------- | ---------- | --------- |
312
+ | ... | ... | ... | ... | ... | ... |
313
+
314
+ ## 协作链路
315
+
316
+ - 长线诉请:
317
+ - 主线 -> 成员A:sessionSlug=...
318
+ - 主线 -> 成员B:sessionSlug=...
319
+ - 一次性诉请:
320
+ - 主线 -> 成员C:用于...
321
+ - 回问诉请:
322
+ - 成员A 在以下场景必须回问主线:...
323
+
324
+ ## 人类介入点(Q4H)
325
+
326
+ - ...
327
+
328
+ ## 共享状态规则
329
+
330
+ - goals:
331
+ - constraints:
332
+ - progress:
333
+ - team_memory:
334
+ - personal_memory:
335
+ - priming:
336
+
337
+ ## 风险与反模式检查
338
+
339
+ - 是否存在无人维护差遣牒的情况
340
+ - 是否把 `gofor` 写成了冗长岗位说明书
341
+ - 是否把需要长期迭代的问题误设计成一次性诉请
342
+ - 是否把应由人拍板的事项错误地下放给支线自主决定
343
+ ```
344
+
345
+ ## 典型场景下的设计提示
346
+
347
+ ### 1. 端到端产品/研发场景
348
+
349
+ 通常至少要区分:
350
+
351
+ - 主线 owner
352
+ - 实现 owner
353
+ - UX / 交互评审
354
+ - QA / 浏览器验证
355
+ - shell specialist
356
+ - i18n 或文案
357
+
358
+ 适合用长线诉请的链路通常是“主线 ↔ 实现 owner”“主线 ↔ UX”。
359
+
360
+ ### 2. SRE / 变更治理场景
361
+
362
+ 通常至少要区分:
363
+
364
+ - 变更 owner
365
+ - 证据采集 / shell 执行
366
+ - 风险评审
367
+ - 发布 / 回滚治理
368
+
369
+ 这类场景尤其要明确 Q4H 节点,因为人类审批、豁免和回滚授权往往不可省略。
370
+
371
+ ### 3. 内容/知识运营场景
372
+
373
+ 通常至少要区分:
374
+
375
+ - 主线编辑 owner
376
+ - 资料搜集 / 整理
377
+ - 事实校对
378
+ - 风格与术语统一
379
+
380
+ 这类场景更容易受益于 priming 和团队记忆,因为术语、风格和结构常需长期复用。
381
+
382
+ ## 常见误区
383
+
384
+ - 把团队成员设计成“按职称堆人头”,而不是按职责边界拆分。
385
+ - 没有明确主线 owner,导致谁都能提建议,但没人维护任务真相。
386
+ - 让支线直接承担全局协调,却不给它差遣牒治理权。
387
+ - 把所有协作都设计成长线诉请,导致上下文负担过重。
388
+ - 把所有协作都设计成一次性诉请,导致持续工作线反复丢上下文。
389
+ - 把 `gofor`、`persona`、`knowledge`、`lessons` 混成一坨。
390
+ - 把关键约束留在聊天里,没有写进差遣牒或团队记忆。
391
+
392
+ ## 给更强外部智能体的最后建议
393
+
394
+ 当你根据用户描述去设计 Dominds 团队时,优先产出这四样:
395
+
396
+ 1. **主线 owner 与差遣牒治理规则**
397
+ 2. **成员职责边界与路由卡**
398
+ 3. **成员之间该用长线诉请还是一次性诉请**
399
+ 4. **哪些地方必须升级给人**
400
+
401
+ 如果这四样已经清楚,`team.yaml`、priming、memory 只是落地形式;如果这四样不清楚,堆再多成员和工具也不会形成稳定协作。
@@ -1,3 +1,4 @@
1
+ import type { DialogLlmRetryRecoveryAction } from '@longrun-ai/kernel/types/display-state';
1
2
  import type { LanguageCode } from '@longrun-ai/kernel/types/language';
2
3
  import type { ProviderConfig } from './client';
3
4
  import type { LlmRetryStrategy } from './gen';
@@ -9,11 +10,14 @@ export type LlmFailureSummary = {
9
10
  code?: string;
10
11
  };
11
12
  export type LlmQuirkFailureHandling = {
13
+ sourceQuirk?: string;
14
+ } & ({
12
15
  kind: 'default';
13
16
  } | {
14
17
  kind: 'give_up';
15
18
  message?: string;
16
19
  summaryTextI18n?: Partial<Record<LanguageCode, string>>;
20
+ recoveryAction?: DialogLlmRetryRecoveryAction;
17
21
  } | {
18
22
  kind: 'retry_strategy';
19
23
  retryStrategy: LlmRetryStrategy;
@@ -22,14 +26,21 @@ export type LlmQuirkFailureHandling = {
22
26
  kind: 'single_retry';
23
27
  delayMs: number;
24
28
  message?: string;
29
+ });
30
+ export type LlmQuirkRecoveryUsage = {
31
+ action: DialogLlmRetryRecoveryAction;
32
+ sourceQuirk?: string;
25
33
  };
26
34
  export type LlmFailureQuirkHandlerSession = {
35
+ quirkName: string;
27
36
  onFailure: (args: {
28
37
  provider: string;
29
38
  providerConfig: ProviderConfig;
30
39
  failure: LlmFailureSummary;
31
40
  error: unknown;
32
41
  }) => LlmQuirkFailureHandling;
42
+ onRequestSucceeded?: () => void;
43
+ onRecoveryActionUsed?: (usage: LlmQuirkRecoveryUsage) => void;
33
44
  };
34
45
  export declare function normalizeProviderApiQuirks(providerConfig: ProviderConfig): Set<string>;
35
46
  export declare function createLlmFailureQuirkHandlerSession(providerConfig: ProviderConfig): LlmFailureQuirkHandlerSession | undefined;