dominds 1.18.2 → 1.19.3

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 (251) hide show
  1. package/dist/access-control.js +6 -6
  2. package/dist/apps/runtime.d.ts +2 -2
  3. package/dist/apps/runtime.js +28 -28
  4. package/dist/apps-host/client.d.ts +1 -1
  5. package/dist/apps-host/host.js +7 -7
  6. package/dist/apps-host/ipc-types.d.ts +2 -2
  7. package/dist/apps-host/ipc-types.js +10 -10
  8. package/dist/cli/read.d.ts +0 -1
  9. package/dist/cli/read.js +1 -6
  10. package/dist/cli/team-definition-audit.d.ts +2 -1
  11. package/dist/cli/team-definition-audit.js +20 -8
  12. package/dist/cli/validate-team-def.js +3 -3
  13. package/dist/dialog-display-state.d.ts +6 -6
  14. package/dist/dialog-display-state.js +46 -46
  15. package/dist/dialog-factory.d.ts +12 -12
  16. package/dist/dialog-factory.js +33 -30
  17. package/dist/dialog-fork.d.ts +2 -2
  18. package/dist/dialog-fork.js +140 -115
  19. package/dist/dialog-global-registry.d.ts +5 -5
  20. package/dist/dialog-global-registry.js +11 -11
  21. package/dist/dialog-instance-registry.d.ts +3 -3
  22. package/dist/dialog-instance-registry.js +52 -41
  23. package/dist/dialog.d.ts +100 -113
  24. package/dist/dialog.js +274 -229
  25. package/dist/docs/agent-priming.md +5 -5
  26. package/dist/docs/agent-priming.zh.md +5 -5
  27. package/dist/docs/app-constitution.md +1 -1
  28. package/dist/docs/app-constitution.zh.md +1 -1
  29. package/dist/docs/cli-usage.md +1 -1
  30. package/dist/docs/cli-usage.zh.md +1 -1
  31. package/dist/docs/design.md +14 -14
  32. package/dist/docs/design.zh.md +14 -14
  33. package/dist/docs/dialog-persistence.md +58 -58
  34. package/dist/docs/dialog-persistence.zh.md +61 -61
  35. package/dist/docs/dialog-system.md +363 -367
  36. package/dist/docs/dialog-system.zh.md +355 -357
  37. package/dist/docs/diligence-push.md +18 -18
  38. package/dist/docs/diligence-push.zh.md +17 -17
  39. package/dist/docs/dominds-agent-collaboration.zh.md +3 -3
  40. package/dist/docs/dominds-terminology.md +46 -47
  41. package/dist/docs/encapsulated-taskdoc.md +4 -4
  42. package/dist/docs/encapsulated-taskdoc.zh.md +3 -3
  43. package/dist/docs/fbr.md +30 -30
  44. package/dist/docs/fbr.zh.md +15 -15
  45. package/dist/docs/i18n.md +2 -2
  46. package/dist/docs/i18n.zh.md +2 -2
  47. package/dist/docs/mcp-support.md +16 -4
  48. package/dist/docs/mcp-support.zh.md +10 -2
  49. package/dist/docs/memory-system.md +4 -4
  50. package/dist/docs/memory-system.zh.md +1 -1
  51. package/dist/docs/mottos.md +1 -1
  52. package/dist/docs/mottos.zh.md +1 -1
  53. package/dist/docs/q4h.md +3 -3
  54. package/dist/docs/q4h.zh.md +1 -1
  55. package/dist/docs/roadmap.md +2 -2
  56. package/dist/docs/team_mgmt-toolset.md +16 -5
  57. package/dist/docs/team_mgmt-toolset.zh.md +13 -4
  58. package/dist/docs/tellask-collab.md +18 -18
  59. package/dist/docs/tellask-collab.zh.md +8 -8
  60. package/dist/docs/tellask-revive-context-refactor.zh.md +591 -0
  61. package/dist/docs/tool-availability-protocol.md +4 -2
  62. package/dist/evt-registry.d.ts +1 -2
  63. package/dist/evt-registry.js +2 -7
  64. package/dist/llm/gen/mock.js +9 -0
  65. package/dist/llm/kernel-driver/context.d.ts +1 -2
  66. package/dist/llm/kernel-driver/context.js +12 -26
  67. package/dist/llm/kernel-driver/drive.js +99 -75
  68. package/dist/llm/kernel-driver/engine.d.ts +2 -2
  69. package/dist/llm/kernel-driver/engine.js +10 -10
  70. package/dist/llm/kernel-driver/fbr.js +6 -6
  71. package/dist/llm/kernel-driver/flow.d.ts +1 -1
  72. package/dist/llm/kernel-driver/flow.js +129 -93
  73. package/dist/llm/kernel-driver/guardrails.js +4 -4
  74. package/dist/llm/kernel-driver/index.d.ts +1 -1
  75. package/dist/llm/kernel-driver/index.js +2 -2
  76. package/dist/llm/kernel-driver/loop.js +30 -30
  77. package/dist/llm/kernel-driver/reply-guidance.js +47 -52
  78. package/dist/llm/kernel-driver/restore.d.ts +3 -3
  79. package/dist/llm/kernel-driver/restore.js +23 -28
  80. package/dist/llm/kernel-driver/runtime.d.ts +1 -1
  81. package/dist/llm/kernel-driver/runtime.js +1 -1
  82. package/dist/llm/kernel-driver/sideDialog-txn.d.ts +8 -0
  83. package/dist/llm/kernel-driver/{subdialog-txn.js → sideDialog-txn.js} +13 -13
  84. package/dist/llm/kernel-driver/{subdialog.d.ts → sideDialog.d.ts} +13 -13
  85. package/dist/llm/kernel-driver/{subdialog.js → sideDialog.js} +203 -170
  86. package/dist/llm/kernel-driver/tellask-special.d.ts +7 -3
  87. package/dist/llm/kernel-driver/tellask-special.js +474 -497
  88. package/dist/llm/kernel-driver/types.d.ts +25 -9
  89. package/dist/mcp/config.d.ts +2 -0
  90. package/dist/mcp/config.js +23 -2
  91. package/dist/mcp/supervisor.d.ts +9 -1
  92. package/dist/mcp/supervisor.js +300 -17
  93. package/dist/minds/builtin/pangu/persona.en.md +4 -4
  94. package/dist/minds/load.js +11 -6
  95. package/dist/minds/system-prompt-parts.d.ts +1 -1
  96. package/dist/minds/system-prompt-parts.js +12 -12
  97. package/dist/minds/system-prompt.d.ts +2 -1
  98. package/dist/minds/system-prompt.js +70 -62
  99. package/dist/persistence-errors.d.ts +1 -1
  100. package/dist/persistence.d.ts +126 -121
  101. package/dist/persistence.js +1190 -786
  102. package/dist/priming.d.ts +3 -3
  103. package/dist/priming.js +62 -61
  104. package/dist/recovery/reply-special.js +5 -5
  105. package/dist/runtime/driver-messages.d.ts +3 -2
  106. package/dist/runtime/driver-messages.js +68 -57
  107. package/dist/runtime/inter-dialog-format.d.ts +12 -10
  108. package/dist/runtime/inter-dialog-format.js +80 -35
  109. package/dist/runtime/interjection-pause-stop.js +1 -1
  110. package/dist/runtime/reply-prompt-copy.d.ts +7 -3
  111. package/dist/runtime/reply-prompt-copy.js +39 -14
  112. package/dist/server/api-routes.js +87 -83
  113. package/dist/server/static-server.js +1 -1
  114. package/dist/server/websocket-handler.js +163 -153
  115. package/dist/tool-availability.js +1 -1
  116. package/dist/tools/app-reminders.js +17 -4
  117. package/dist/tools/builtins.js +2 -0
  118. package/dist/tools/ctrl.js +5 -5
  119. package/dist/tools/env.js +10 -58
  120. package/dist/tools/manual/render.js +4 -0
  121. package/dist/tools/mcp.d.ts +1 -0
  122. package/dist/tools/mcp.js +55 -5
  123. package/dist/tools/os.js +16 -16
  124. package/dist/tools/pending-tellask-reminder.js +20 -14
  125. package/dist/tools/prompts/control/en/index.md +1 -1
  126. package/dist/tools/prompts/control/en/principles.md +8 -8
  127. package/dist/tools/prompts/control/en/scenarios.md +7 -7
  128. package/dist/tools/prompts/control/en/tools.md +7 -7
  129. package/dist/tools/prompts/control/zh/principles.md +4 -4
  130. package/dist/tools/prompts/control/zh/scenarios.md +5 -5
  131. package/dist/tools/prompts/control/zh/tools.md +3 -3
  132. package/dist/tools/prompts/mcp_admin/en/errors.md +0 -14
  133. package/dist/tools/prompts/mcp_admin/en/index.md +5 -3
  134. package/dist/tools/prompts/mcp_admin/en/principles.md +11 -5
  135. package/dist/tools/prompts/mcp_admin/en/scenarios.md +19 -3
  136. package/dist/tools/prompts/mcp_admin/en/tools.md +85 -21
  137. package/dist/tools/prompts/mcp_admin/zh/errors.md +0 -14
  138. package/dist/tools/prompts/mcp_admin/zh/index.md +5 -3
  139. package/dist/tools/prompts/mcp_admin/zh/principles.md +11 -5
  140. package/dist/tools/prompts/mcp_admin/zh/scenarios.md +19 -3
  141. package/dist/tools/prompts/mcp_admin/zh/tools.md +85 -21
  142. package/dist/tools/prompts/os/en/errors.md +0 -28
  143. package/dist/tools/prompts/os/en/scenarios.md +1 -1
  144. package/dist/tools/prompts/os/en/tools.md +8 -17
  145. package/dist/tools/prompts/os/zh/errors.md +0 -28
  146. package/dist/tools/prompts/os/zh/scenarios.md +1 -1
  147. package/dist/tools/prompts/os/zh/tools.md +8 -17
  148. package/dist/tools/prompts/team_memory/en/scenarios.md +1 -1
  149. package/dist/tools/prompts/team_memory/zh/scenarios.md +1 -1
  150. package/dist/tools/registry.d.ts +5 -0
  151. package/dist/tools/team_mgmt-manual.js +2 -2
  152. package/dist/tools/team_mgmt-mcp-manual.d.ts +2 -2
  153. package/dist/tools/team_mgmt-mcp-manual.js +67 -16
  154. package/dist/tools/team_mgmt.js +8 -8
  155. package/dist/utils/taskdoc.js +12 -12
  156. package/package.json +3 -3
  157. package/webapp/dist/assets/{_basePickBy-BPJaiZdW.js → _basePickBy-Dnh413xT.js} +3 -3
  158. package/webapp/dist/assets/{_basePickBy-BPJaiZdW.js.map → _basePickBy-Dnh413xT.js.map} +1 -1
  159. package/webapp/dist/assets/{_baseUniq-BEetT15i.js → _baseUniq-DWzYqpN_.js} +2 -2
  160. package/webapp/dist/assets/{_baseUniq-BEetT15i.js.map → _baseUniq-DWzYqpN_.js.map} +1 -1
  161. package/webapp/dist/assets/{arc-Dm7Zf36f.js → arc-vfBkNCOx.js} +2 -2
  162. package/webapp/dist/assets/{arc-Dm7Zf36f.js.map → arc-vfBkNCOx.js.map} +1 -1
  163. package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-BpTPtkuo.js → architectureDiagram-VXUJARFQ-DiUEBXOa.js} +7 -7
  164. package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-BpTPtkuo.js.map → architectureDiagram-VXUJARFQ-DiUEBXOa.js.map} +1 -1
  165. package/webapp/dist/assets/{blockDiagram-VD42YOAC-C8fLN0iu.js → blockDiagram-VD42YOAC-BqK1KM2m.js} +7 -7
  166. package/webapp/dist/assets/{blockDiagram-VD42YOAC-C8fLN0iu.js.map → blockDiagram-VD42YOAC-BqK1KM2m.js.map} +1 -1
  167. package/webapp/dist/assets/{c4Diagram-YG6GDRKO-BpPr62CH.js → c4Diagram-YG6GDRKO-ClHNu1Uo.js} +3 -3
  168. package/webapp/dist/assets/{c4Diagram-YG6GDRKO-BpPr62CH.js.map → c4Diagram-YG6GDRKO-ClHNu1Uo.js.map} +1 -1
  169. package/webapp/dist/assets/{channel-EMYoPjW3.js → channel-BbWLVc8W.js} +2 -2
  170. package/webapp/dist/assets/{channel-EMYoPjW3.js.map → channel-BbWLVc8W.js.map} +1 -1
  171. package/webapp/dist/assets/{chunk-4BX2VUAB-CefNtjWG.js → chunk-4BX2VUAB-CItdSmZH.js} +2 -2
  172. package/webapp/dist/assets/{chunk-4BX2VUAB-CefNtjWG.js.map → chunk-4BX2VUAB-CItdSmZH.js.map} +1 -1
  173. package/webapp/dist/assets/{chunk-55IACEB6-C_X7T43V.js → chunk-55IACEB6-DSCX9WCf.js} +2 -2
  174. package/webapp/dist/assets/{chunk-55IACEB6-C_X7T43V.js.map → chunk-55IACEB6-DSCX9WCf.js.map} +1 -1
  175. package/webapp/dist/assets/{chunk-B4BG7PRW-BRe3_2oA.js → chunk-B4BG7PRW-5CRXFeD9.js} +5 -5
  176. package/webapp/dist/assets/{chunk-B4BG7PRW-BRe3_2oA.js.map → chunk-B4BG7PRW-5CRXFeD9.js.map} +1 -1
  177. package/webapp/dist/assets/{chunk-DI55MBZ5-CbvrsI_w.js → chunk-DI55MBZ5-CRMf6XZu.js} +4 -4
  178. package/webapp/dist/assets/{chunk-DI55MBZ5-CbvrsI_w.js.map → chunk-DI55MBZ5-CRMf6XZu.js.map} +1 -1
  179. package/webapp/dist/assets/{chunk-FMBD7UC4-ORmtkrtS.js → chunk-FMBD7UC4-BJ1vT2se.js} +2 -2
  180. package/webapp/dist/assets/{chunk-FMBD7UC4-ORmtkrtS.js.map → chunk-FMBD7UC4-BJ1vT2se.js.map} +1 -1
  181. package/webapp/dist/assets/{chunk-QN33PNHL-LTAOVhWu.js → chunk-QN33PNHL-CGyezTSD.js} +2 -2
  182. package/webapp/dist/assets/{chunk-QN33PNHL-LTAOVhWu.js.map → chunk-QN33PNHL-CGyezTSD.js.map} +1 -1
  183. package/webapp/dist/assets/{chunk-QZHKN3VN-ZoUM_4u5.js → chunk-QZHKN3VN-9xs15j8C.js} +2 -2
  184. package/webapp/dist/assets/{chunk-QZHKN3VN-ZoUM_4u5.js.map → chunk-QZHKN3VN-9xs15j8C.js.map} +1 -1
  185. package/webapp/dist/assets/{chunk-TZMSLE5B-Gao4qrq7.js → chunk-TZMSLE5B-D2g6Tj7Z.js} +2 -2
  186. package/webapp/dist/assets/{chunk-TZMSLE5B-Gao4qrq7.js.map → chunk-TZMSLE5B-D2g6Tj7Z.js.map} +1 -1
  187. package/webapp/dist/assets/{classDiagram-2ON5EDUG-uha1vIGN.js → classDiagram-2ON5EDUG-BQFGGJNm.js} +6 -6
  188. package/webapp/dist/assets/{classDiagram-2ON5EDUG-uha1vIGN.js.map → classDiagram-2ON5EDUG-BQFGGJNm.js.map} +1 -1
  189. package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-uha1vIGN.js → classDiagram-v2-WZHVMYZB-BQFGGJNm.js} +6 -6
  190. package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-uha1vIGN.js.map → classDiagram-v2-WZHVMYZB-BQFGGJNm.js.map} +1 -1
  191. package/webapp/dist/assets/{clone-_9Ayb1Gp.js → clone-DOfPd4cz.js} +2 -2
  192. package/webapp/dist/assets/{clone-_9Ayb1Gp.js.map → clone-DOfPd4cz.js.map} +1 -1
  193. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-C8wDw3NY.js → cose-bilkent-S5V4N54A-BYN-vqm8.js} +2 -2
  194. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-C8wDw3NY.js.map → cose-bilkent-S5V4N54A-BYN-vqm8.js.map} +1 -1
  195. package/webapp/dist/assets/{dagre-6UL2VRFP-BUSeNot0.js → dagre-6UL2VRFP-ClEaFABE.js} +7 -7
  196. package/webapp/dist/assets/{dagre-6UL2VRFP-BUSeNot0.js.map → dagre-6UL2VRFP-ClEaFABE.js.map} +1 -1
  197. package/webapp/dist/assets/{diagram-PSM6KHXK-CMZAksVC.js → diagram-PSM6KHXK-CM4hLE_0.js} +8 -8
  198. package/webapp/dist/assets/{diagram-PSM6KHXK-CMZAksVC.js.map → diagram-PSM6KHXK-CM4hLE_0.js.map} +1 -1
  199. package/webapp/dist/assets/{diagram-QEK2KX5R-BQKoRtwy.js → diagram-QEK2KX5R-BZjGFX-2.js} +7 -7
  200. package/webapp/dist/assets/{diagram-QEK2KX5R-BQKoRtwy.js.map → diagram-QEK2KX5R-BZjGFX-2.js.map} +1 -1
  201. package/webapp/dist/assets/{diagram-S2PKOQOG-DjMG97kd.js → diagram-S2PKOQOG-Bvw01OOG.js} +7 -7
  202. package/webapp/dist/assets/{diagram-S2PKOQOG-DjMG97kd.js.map → diagram-S2PKOQOG-Bvw01OOG.js.map} +1 -1
  203. package/webapp/dist/assets/{erDiagram-Q2GNP2WA-BujwA137.js → erDiagram-Q2GNP2WA-ctHu5zQL.js} +5 -5
  204. package/webapp/dist/assets/{erDiagram-Q2GNP2WA-BujwA137.js.map → erDiagram-Q2GNP2WA-ctHu5zQL.js.map} +1 -1
  205. package/webapp/dist/assets/{flowDiagram-NV44I4VS-DgwPjg4y.js → flowDiagram-NV44I4VS-m7ofIhri.js} +6 -6
  206. package/webapp/dist/assets/{flowDiagram-NV44I4VS-DgwPjg4y.js.map → flowDiagram-NV44I4VS-m7ofIhri.js.map} +1 -1
  207. package/webapp/dist/assets/{ganttDiagram-JELNMOA3-Db2ykf3E.js → ganttDiagram-JELNMOA3-D9wS5Veb.js} +3 -3
  208. package/webapp/dist/assets/{ganttDiagram-JELNMOA3-Db2ykf3E.js.map → ganttDiagram-JELNMOA3-D9wS5Veb.js.map} +1 -1
  209. package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-D_gSifkv.js → gitGraphDiagram-V2S2FVAM-B86qqJx7.js} +8 -8
  210. package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-D_gSifkv.js.map → gitGraphDiagram-V2S2FVAM-B86qqJx7.js.map} +1 -1
  211. package/webapp/dist/assets/{graph-BHjCU5xP.js → graph-u844GGQC.js} +3 -3
  212. package/webapp/dist/assets/{graph-BHjCU5xP.js.map → graph-u844GGQC.js.map} +1 -1
  213. package/webapp/dist/assets/{index-xvYYeHuy.css → index-BGdI3lWA.css} +17 -9
  214. package/webapp/dist/assets/{index-DLajsIDJ.js → index-tinPEZoH.js} +1211 -995
  215. package/webapp/dist/assets/index-tinPEZoH.js.map +1 -0
  216. package/webapp/dist/assets/{infoDiagram-HS3SLOUP-BDba5pKs.js → infoDiagram-HS3SLOUP-DwRPUctP.js} +6 -6
  217. package/webapp/dist/assets/{infoDiagram-HS3SLOUP-BDba5pKs.js.map → infoDiagram-HS3SLOUP-DwRPUctP.js.map} +1 -1
  218. package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-CmJAbmlm.js → journeyDiagram-XKPGCS4Q-B91ZO-ec.js} +5 -5
  219. package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-CmJAbmlm.js.map → journeyDiagram-XKPGCS4Q-B91ZO-ec.js.map} +1 -1
  220. package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-DxQeBTDk.js → kanban-definition-3W4ZIXB7-CoogrZ07.js} +3 -3
  221. package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-DxQeBTDk.js.map → kanban-definition-3W4ZIXB7-CoogrZ07.js.map} +1 -1
  222. package/webapp/dist/assets/{layout-DteV_yE8.js → layout-BrzQmqFJ.js} +5 -5
  223. package/webapp/dist/assets/{layout-DteV_yE8.js.map → layout-BrzQmqFJ.js.map} +1 -1
  224. package/webapp/dist/assets/{linear-zItbPrND.js → linear-C6H7K9Zy.js} +2 -2
  225. package/webapp/dist/assets/{linear-zItbPrND.js.map → linear-C6H7K9Zy.js.map} +1 -1
  226. package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-BJXI7UqO.js → mindmap-definition-VGOIOE7T-UDHZQkNZ.js} +4 -4
  227. package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-BJXI7UqO.js.map → mindmap-definition-VGOIOE7T-UDHZQkNZ.js.map} +1 -1
  228. package/webapp/dist/assets/{pieDiagram-ADFJNKIX-BpM-aH2p.js → pieDiagram-ADFJNKIX-M81uyQ1J.js} +8 -8
  229. package/webapp/dist/assets/{pieDiagram-ADFJNKIX-BpM-aH2p.js.map → pieDiagram-ADFJNKIX-M81uyQ1J.js.map} +1 -1
  230. package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-NXdIpA15.js → quadrantDiagram-AYHSOK5B-ClzIh9Gb.js} +3 -3
  231. package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-NXdIpA15.js.map → quadrantDiagram-AYHSOK5B-ClzIh9Gb.js.map} +1 -1
  232. package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-D1AICAA0.js → requirementDiagram-UZGBJVZJ-DLK3A-pn.js} +4 -4
  233. package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-D1AICAA0.js.map → requirementDiagram-UZGBJVZJ-DLK3A-pn.js.map} +1 -1
  234. package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-WiReDPfo.js → sankeyDiagram-TZEHDZUN-CYqju8I1.js} +2 -2
  235. package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-WiReDPfo.js.map → sankeyDiagram-TZEHDZUN-CYqju8I1.js.map} +1 -1
  236. package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-Cw76oP8t.js → sequenceDiagram-WL72ISMW-2guv6eOd.js} +4 -4
  237. package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-Cw76oP8t.js.map → sequenceDiagram-WL72ISMW-2guv6eOd.js.map} +1 -1
  238. package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-QjCeRczs.js → stateDiagram-FKZM4ZOC-iujqSp0X.js} +9 -9
  239. package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-QjCeRczs.js.map → stateDiagram-FKZM4ZOC-iujqSp0X.js.map} +1 -1
  240. package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-IClqxQ4s.js → stateDiagram-v2-4FDKWEC3-BxzY81ky.js} +5 -5
  241. package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-IClqxQ4s.js.map → stateDiagram-v2-4FDKWEC3-BxzY81ky.js.map} +1 -1
  242. package/webapp/dist/assets/{timeline-definition-IT6M3QCI-BfyfTY7m.js → timeline-definition-IT6M3QCI-DjCFSC8d.js} +3 -3
  243. package/webapp/dist/assets/{timeline-definition-IT6M3QCI-BfyfTY7m.js.map → timeline-definition-IT6M3QCI-DjCFSC8d.js.map} +1 -1
  244. package/webapp/dist/assets/{treemap-GDKQZRPO-C5MiL6--.js → treemap-GDKQZRPO-iaBzDWCP.js} +5 -5
  245. package/webapp/dist/assets/{treemap-GDKQZRPO-C5MiL6--.js.map → treemap-GDKQZRPO-iaBzDWCP.js.map} +1 -1
  246. package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-ybaJrSry.js → xychartDiagram-PRI3JC2R-R6Jl1c89.js} +3 -3
  247. package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-ybaJrSry.js.map → xychartDiagram-PRI3JC2R-R6Jl1c89.js.map} +1 -1
  248. package/webapp/dist/index.html +2 -2
  249. package/dist/docs/issues/global-dialog-event-broadcaster-missing.md +0 -128
  250. package/dist/llm/kernel-driver/subdialog-txn.d.ts +0 -8
  251. package/webapp/dist/assets/index-DLajsIDJ.js.map +0 -1
@@ -21,7 +21,7 @@
21
21
 
22
22
  ### 1. mcp_restart
23
23
 
24
- 重启 MCP 服务。
24
+ 按当前 `.minds/mcp.yaml` 配置启用并重建 MCP 服务。如果目标 server 当前是 `enabled: false`,会先写回 `enabled: true` 再尝试启动。重启成功后会替换全局 MCP runtime/tool 注册,并清理旧 runtime 上所有对话持有的 lease;重启失败时保留旧 runtime/lease,避免排障过程中把仍可用的连接拆掉。
25
25
 
26
26
  **参数:**
27
27
 
@@ -30,9 +30,7 @@
30
30
  **返回:**
31
31
 
32
32
  ```yaml
33
- status: ok|error
34
- serverId: <MCP 服务标识符>
35
- restarted_at: <重启时间戳>
33
+ ok: restarted <MCP 服务标识符>
36
34
  ```
37
35
 
38
36
  **错误:**
@@ -50,9 +48,13 @@ restarted_at: <重启时间戳>
50
48
  **返回:**
51
49
 
52
50
  ```yaml
53
- status: ok|error
54
- serverId: <MCP 服务标识符>
55
- released_at: <释放时间戳>
51
+ ok: released <MCP 服务标识符> for dialog <对话标识符>
52
+ ```
53
+
54
+ 如果当前对话没有可释放的 lease,返回:
55
+
56
+ ```yaml
57
+ ok: no active lease for <MCP 服务标识符> (or server is truely-stateless)
56
58
  ```
57
59
 
58
60
  **错误:**
@@ -60,7 +62,21 @@ released_at: <释放时间戳>
60
62
  - `MCP_NOT_FOUND`:MCP 服务不存在
61
63
  - `MCP_NOT_RUNNING`:MCP 服务未运行
62
64
 
63
- ### 3. env_get
65
+ ### 3. mcp_disable
66
+
67
+ 禁用 MCP 服务并将 `.minds/mcp.yaml` 中对应 server 写为 `enabled: false`。该操作不等待新服务可用:会无条件清理已加载 runtime/lease。禁用后的 server 仍作为 0 工具 MCP toolset 可见,并在手册中明确标记为 disabled。
68
+
69
+ **参数:**
70
+
71
+ - `serverId`(必需):MCP 服务标识符
72
+
73
+ **返回:**
74
+
75
+ ```yaml
76
+ ok: disabled <MCP 服务标识符> and set enabled=false
77
+ ```
78
+
79
+ ### 4. env_get
64
80
 
65
81
  获取环境变量(与 os 工具集共享)。
66
82
 
@@ -70,16 +86,41 @@ released_at: <释放时间戳>
70
86
 
71
87
  **返回:**
72
88
 
89
+ - 已设置:直接返回环境变量值
90
+ - 未设置:返回 `(unset)`
91
+
92
+ ### 5. env_set
93
+
94
+ 设置 Dominds 服务进程的环境变量(与 os 工具集共享)。
95
+
96
+ **参数:**
97
+
98
+ - `key`(必需):环境变量名称
99
+ - `value`(必需):环境变量值
100
+
101
+ **返回:**
102
+
73
103
  ```yaml
74
- status: ok|error
75
- key: <环境变量名称>
76
- value: <环境变量值>
77
- retrieved_at: <获取时间戳>
104
+ ok: <环境变量名称>
105
+ prev: <之前的值或 (unset)>
106
+ next: <新的值>
78
107
  ```
79
108
 
80
- **错误:**
109
+ ### 6. env_unset
81
110
 
82
- - `ENV_NOT_FOUND`:环境变量不存在
111
+ 删除 Dominds 服务进程的环境变量(与 os 工具集共享)。
112
+
113
+ **参数:**
114
+
115
+ - `key`(必需):环境变量名称
116
+
117
+ **返回:**
118
+
119
+ ```yaml
120
+ ok: <环境变量名称>
121
+ prev: <之前的值或 (unset)>
122
+ next: (unset)
123
+ ```
83
124
 
84
125
  ## 使用示例
85
126
 
@@ -99,6 +140,14 @@ mcp_release({
99
140
  });
100
141
  ```
101
142
 
143
+ ### 禁用 MCP 服务
144
+
145
+ ```typescript
146
+ mcp_disable({
147
+ serverId: 'browser',
148
+ });
149
+ ```
150
+
102
151
  ### 获取环境变量
103
152
 
104
153
  ```typescript
@@ -107,17 +156,32 @@ env_get({
107
156
  });
108
157
  ```
109
158
 
110
- ## YAML 输出契约
159
+ ### 设置环境变量
160
+
161
+ ```typescript
162
+ env_set({
163
+ key: 'MCP_AUTH_TOKEN',
164
+ value: 'local-token',
165
+ });
166
+ ```
167
+
168
+ ### 删除环境变量
169
+
170
+ ```typescript
171
+ env_unset({
172
+ key: 'MCP_AUTH_TOKEN',
173
+ });
174
+ ```
175
+
176
+ ## 输出契约
111
177
 
112
- 所有工具的输出都使用 YAML 格式,便于程序化处理:
178
+ 这些工具使用各自工具小节描述的简短文本返回格式:
113
179
 
114
- - `status`:操作状态,`ok` 表示成功,`error` 表示失败
115
- - 其他字段:具体操作的附加信息
180
+ - 成功:以 `ok:` 开头
181
+ - 失败:以 `error:` 开头
116
182
 
117
183
  错误时返回:
118
184
 
119
185
  ```yaml
120
- status: error
121
- error_code: <错误代码>
122
- message: <错误消息>
186
+ error: <错误消息>
123
187
  ```
@@ -56,34 +56,6 @@
56
56
  - Restart daemon process
57
57
  - Check daemon process logs
58
58
 
59
- ### ENV_NOT_FOUND
60
-
61
- **Description:** Environment variable doesn't exist.
62
-
63
- **Cause:**
64
-
65
- - Environment variable not set
66
- - Environment variable has been deleted
67
-
68
- **Solution:**
69
-
70
- - Use `env_set` to set environment variable
71
- - Check if environment variable name is correct
72
-
73
- ### ENV_PERMISSION_DENIED
74
-
75
- **Description:** Insufficient permissions for environment variable operation.
76
-
77
- **Cause:**
78
-
79
- - Some environment variables require root permissions
80
- - System-protected environment variables
81
-
82
- **Solution:**
83
-
84
- - Use sudo to elevate permissions
85
- - Avoid modifying system-protected environment variables
86
-
87
59
  ## Frequently Asked Questions
88
60
 
89
61
  ### Q: What security risks does shell command execution have?
@@ -90,7 +90,7 @@ Manage environment variables.
90
90
  ### Example
91
91
 
92
92
  ```typescript
93
- // View all environment variables
93
+ // View one environment variable
94
94
  env_get({
95
95
  key: 'PATH',
96
96
  });
@@ -90,16 +90,8 @@ Get environment variable.
90
90
 
91
91
  **Returns:**
92
92
 
93
- ```yaml
94
- status: ok|error
95
- key: <environment variable name>
96
- value: <environment variable value>
97
- retrieved_at: <retrieval timestamp>
98
- ```
99
-
100
- **Errors:**
101
-
102
- - `ENV_NOT_FOUND`: Environment variable doesn't exist
93
+ - Set: returns the environment variable value directly
94
+ - Unset: returns `(unset)`
103
95
 
104
96
  ### 5. env_set
105
97
 
@@ -113,10 +105,9 @@ Set environment variable.
113
105
  **Returns:**
114
106
 
115
107
  ```yaml
116
- status: ok|error
117
- key: <environment variable name>
118
- value: <environment variable value>
119
- set_at: <set timestamp>
108
+ ok: <environment variable name>
109
+ prev: <previous value or (unset)>
110
+ next: <new value>
120
111
  ```
121
112
 
122
113
  ### 6. env_unset
@@ -130,9 +121,9 @@ Delete environment variable.
130
121
  **Returns:**
131
122
 
132
123
  ```yaml
133
- status: ok|error
134
- key: <environment variable name>
135
- unset_at: <deletion timestamp>
124
+ ok: <environment variable name>
125
+ prev: <previous value or (unset)>
126
+ next: (unset)
136
127
  ```
137
128
 
138
129
  ## Usage Examples
@@ -56,34 +56,6 @@
56
56
  - 重新启动守护进程
57
57
  - 检查守护进程日志
58
58
 
59
- ### ENV_NOT_FOUND
60
-
61
- **描述:** 环境变量不存在。
62
-
63
- **原因:**
64
-
65
- - 环境变量未被设置
66
- - 环境变量已被删除
67
-
68
- **解决方案:**
69
-
70
- - 使用 `env_set` 设置环境变量
71
- - 检查环境变量名称是否正确
72
-
73
- ### ENV_PERMISSION_DENIED
74
-
75
- **描述:** 环境变量操作权限不足。
76
-
77
- **原因:**
78
-
79
- - 某些环境变量需要 root 权限
80
- - 系统保护的环境变量
81
-
82
- **解决方案:**
83
-
84
- - 使用 sudo 提升权限
85
- - 避免修改系统保护的环境变量
86
-
87
59
  ## 常见问题
88
60
 
89
61
  ### Q: Shell 命令执行有什么安全风险?
@@ -90,7 +90,7 @@ shell_cmd({
90
90
  ### 示例
91
91
 
92
92
  ```typescript
93
- // 查看所有环境变量
93
+ // 查看单个环境变量
94
94
  env_get({
95
95
  key: 'PATH',
96
96
  });
@@ -90,16 +90,8 @@ stderr: <请求时返回 stderr 输出>
90
90
 
91
91
  **返回:**
92
92
 
93
- ```yaml
94
- status: ok|error
95
- key: <环境变量名称>
96
- value: <环境变量值>
97
- retrieved_at: <获取时间戳>
98
- ```
99
-
100
- **错误:**
101
-
102
- - `ENV_NOT_FOUND`:环境变量不存在
93
+ - 已设置:直接返回环境变量值
94
+ - 未设置:返回 `(unset)`
103
95
 
104
96
  ### 5. env_set
105
97
 
@@ -113,10 +105,9 @@ retrieved_at: <获取时间戳>
113
105
  **返回:**
114
106
 
115
107
  ```yaml
116
- status: ok|error
117
- key: <环境变量名称>
118
- value: <环境变量值>
119
- set_at: <设置时间戳>
108
+ ok: <环境变量名称>
109
+ prev: <之前的值或 (unset)>
110
+ next: <新的值>
120
111
  ```
121
112
 
122
113
  ### 6. env_unset
@@ -130,9 +121,9 @@ set_at: <设置时间戳>
130
121
  **返回:**
131
122
 
132
123
  ```yaml
133
- status: ok|error
134
- key: <环境变量名称>
135
- unset_at: <删除时间戳>
124
+ ok: <环境变量名称>
125
+ prev: <之前的值或 (unset)>
126
+ next: (unset)
136
127
  ```
137
128
 
138
129
  ## 使用示例
@@ -103,7 +103,7 @@ Maintain shared terminology and standard wording across the team.
103
103
  add_team_memory({
104
104
  path: 'team/glossary/dialog-terms',
105
105
  content:
106
- '## Dialog Terms\n\n- In user-facing copy, prefer: Mainline dialog / Sideline dialog\n- In implementation context, main dialog / subdialog / supdialog are acceptable\n- Do not surface implementation terms directly into user-facing copy',
106
+ '## Dialog Terms\n\n- In user-facing copy, prefer: Main Dialog / Side Dialog\n- In implementation context, main dialog / sideDialog / askerDialog are acceptable\n- Do not surface implementation terms directly into user-facing copy',
107
107
  });
108
108
  ```
109
109
 
@@ -103,7 +103,7 @@ add_team_memory({
103
103
  add_team_memory({
104
104
  path: 'team/glossary/dialog-terms',
105
105
  content:
106
- '## 对话术语\n\n- 用户面向文案优先使用:主线对话 / 支线对话\n- 实现上下文可使用:main dialog / subdialog / supdialog\n- 不要把实现术语直接裸露到用户可见 copy',
106
+ '## 对话术语\n\n- 用户面向文案优先使用:主线对话 / 支线对话\n- 实现上下文可使用:main dialog / sideDialog / askerDialog\n- 不要把实现术语直接裸露到用户可见 copy',
107
107
  });
108
108
  ```
109
109
 
@@ -28,6 +28,11 @@ export type ToolsetMeta = {
28
28
  * When omitted, `man` falls back to deriving topic files from `promptFilesI18n`.
29
29
  */
30
30
  manualSpec?: ManualSpec;
31
+ /**
32
+ * Optional notice prepended by the generic `man` tool. Runtime-generated toolsets
33
+ * use this to surface operational state without hiding their configured manual.
34
+ */
35
+ manualNoticeI18n?: I18nText;
31
36
  };
32
37
  export declare const toolsetMetaRegistry: Map<string, ToolsetMeta>;
33
38
  export declare const reminderOwnersRegistry: Map<string, ReminderOwner>;
@@ -114,7 +114,7 @@ async function renderTeamMgmtGuideContent(language, topicsRaw = []) {
114
114
  '`model_param_options` 可选:用于记录该 provider 支持的 `.minds/team.yaml model_params` 选项(文档用途)。',
115
115
  '`apiQuirks` 可选:写在 `providers.<providerKey>.apiQuirks`,类型是 `string|string[]`。它是 provider 级 transport / 网关兼容开关,用来描述“这个供应商/网关的 API 有非标准行为”,不是 `.minds/team.yaml` 的成员参数,也不是 `model_params`。',
116
116
  '使用原则:只有在你确认某个上游网关确实偏离了标准协议,而且 Dominds 已为这个偏差实现了命名 quirk 时才配置;不要把它当作随意调参入口。当前实现里,未知 quirk 值通常不会报错,但也不会带来任何效果。',
117
- '当前已知示例:OpenAI Responses 包装层支持 `apiQuirks: xcode.best`(或数组里包含它)。它一方面会把供应商额外发出的 `keepalive` 流事件识别为 heartbeat,而不是当作异常事件处理;另一方面也会对该网关特有的失败模式做 provider-specific failure handling,包括“同一对话上下文连续返回 empty response”时先做少量临时重试;如果在同一未变化上下文里连续达到阈值,就判定这是 provider 侧 same-context deadlock,而不是普通基础设施抖动:此时继续沿用同一上下文自动重试大概率仍然不会有真实进展,必须引入新的信息或新的指令(例如补充上下文、改写问题、换一个切入方式,或在确实需要人类判断时调用 askHuman)。这类 provider/API retry 状态在同一次 driver 自动续跑链里会继续沿用,不因中途换 course 而自动清零;若当前对话启用了鞭策,driver 也会优先判断是否能按鞭策逻辑直接续跑一次,而不是先落入 stopped,并且一旦 driver 接受这次自动恢复资格,就会立刻记作已消费;这里的恢复语义是“deadlock break”而不是普通空转鞭策,所以即使当前轮次已经登记了在途诉请/支线对话,也不会仅因 pending subdialog 就否决这一次恢复;以及把网关返回的 HTML 版 502 Bad Gateway 错误页和 `500 auth_unavailable: no auth available` 这类基础设施失败归类为 conservative 策略重试。最小示例:\n```yaml\nproviders:\n my_gateway:\n apiType: openai\n baseUrl: https://example.invalid/v1\n apiKeyEnvVar: MY_GATEWAY_API_KEY\n apiQuirks: xcode.best\n models:\n my_model: { name: "upstream-model-id" }\n```',
117
+ '当前已知示例:OpenAI Responses 包装层支持 `apiQuirks: xcode.best`(或数组里包含它)。它一方面会把供应商额外发出的 `keepalive` 流事件识别为 heartbeat,而不是当作异常事件处理;另一方面也会对该网关特有的失败模式做 provider-specific failure handling,包括“同一对话上下文连续返回 empty response”时先做少量临时重试;如果在同一未变化上下文里连续达到阈值,就判定这是 provider 侧 same-context deadlock,而不是普通基础设施抖动:此时继续沿用同一上下文自动重试大概率仍然不会有真实进展,必须引入新的信息或新的指令(例如补充上下文、改写问题、换一个切入方式,或在确实需要人类判断时调用 askHuman)。这类 provider/API retry 状态在同一次 driver 自动续跑链里会继续沿用,不因中途换 course 而自动清零;若当前对话启用了鞭策,driver 也会优先判断是否能按鞭策逻辑直接续跑一次,而不是先落入 stopped,并且一旦 driver 接受这次自动恢复资格,就会立刻记作已消费;这里的恢复语义是“deadlock break”而不是普通空转鞭策,所以即使当前轮次已经登记了在途诉请/支线对话,也不会仅因 pending sideDialog 就否决这一次恢复;以及把网关返回的 HTML 版 502 Bad Gateway 错误页和 `500 auth_unavailable: no auth available` 这类基础设施失败归类为 conservative 策略重试。最小示例:\n```yaml\nproviders:\n my_gateway:\n apiType: openai\n baseUrl: https://example.invalid/v1\n apiKeyEnvVar: MY_GATEWAY_API_KEY\n apiQuirks: xcode.best\n models:\n my_model: { name: "upstream-model-id" }\n```',
118
118
  '边界提醒:`apiQuirks` 只影响实现里显式消费它的 provider/generator。就当前实现看,至少 OpenAI Responses 路径会读取它;不要假设所有 `apiType` 都支持或需要它。若配置后行为仍异常,应继续检查上游网关文档、抓流事件类型,并结合 `team_mgmt_check_provider(...)` / 运行日志排查。',
119
119
  ])
120
120
  : fmtHeader('.minds/llm.yaml') +
@@ -128,7 +128,7 @@ async function renderTeamMgmtGuideContent(language, topicsRaw = []) {
128
128
  'Optional: `model_param_options` documents `.minds/team.yaml model_params` knobs (documentation only).',
129
129
  '`apiQuirks` is optional under `providers.<providerKey>.apiQuirks`, with type `string|string[]`. It is a provider-level transport / gateway compatibility switch for non-standard upstream API behavior. It is not a `.minds/team.yaml` member field and not part of `model_params`.',
130
130
  'Use it only when you have confirmed that an upstream gateway deviates from the expected protocol and Dominds has an explicitly named quirk for that deviation. Do not treat it as a generic tuning field. In the current implementation, unknown quirk values are usually ignored rather than rejected, so a typo may silently do nothing.',
131
- 'Known current example: the OpenAI Responses wrapper supports `apiQuirks: xcode.best` (or an array containing it). It not only treats vendor-emitted `keepalive` stream events as heartbeat events instead of unexpected protocol noise, but also applies provider-specific failure handling for gateway-specific failures, including repeated empty responses in the same unchanged dialog context (a few temporary retries first; once the unchanged-context streak reaches the threshold, Dominds treats it as a provider-side same-context deadlock rather than ordinary infrastructure flakiness, which means repeating the same automatic retry path is no longer expected to make real progress and fresh information or fresh instructions are required, such as adding context, reframing the ask, changing the angle, or calling askHuman when human judgment is genuinely needed; this provider/API retry state intentionally continues across course changes within the same driver auto-continue chain; if Diligence Push is enabled for the dialog, the driver will first see whether it can continue once through that path before falling into stopped, and that recovery budget is considered consumed as soon as the driver accepts that path; this is a deadlock-break recovery rather than the ordinary idle-time Diligence Push, so a pending subdialog alone does not veto that one recovery injection) and gateway-returned HTML 502 Bad Gateway pages plus `500 auth_unavailable: no auth available` infrastructure failures classified into conservative retry. Minimal example:\n```yaml\nproviders:\n my_gateway:\n apiType: openai\n baseUrl: https://example.invalid/v1\n apiKeyEnvVar: MY_GATEWAY_API_KEY\n apiQuirks: xcode.best\n models:\n my_model: { name: "upstream-model-id" }\n```',
131
+ 'Known current example: the OpenAI Responses wrapper supports `apiQuirks: xcode.best` (or an array containing it). It not only treats vendor-emitted `keepalive` stream events as heartbeat events instead of unexpected protocol noise, but also applies provider-specific failure handling for gateway-specific failures, including repeated empty responses in the same unchanged dialog context (a few temporary retries first; once the unchanged-context streak reaches the threshold, Dominds treats it as a provider-side same-context deadlock rather than ordinary infrastructure flakiness, which means repeating the same automatic retry path is no longer expected to make real progress and fresh information or fresh instructions are required, such as adding context, reframing the ask, changing the angle, or calling askHuman when human judgment is genuinely needed; this provider/API retry state intentionally continues across course changes within the same driver auto-continue chain; if Diligence Push is enabled for the dialog, the driver will first see whether it can continue once through that path before falling into stopped, and that recovery budget is considered consumed as soon as the driver accepts that path; this is a deadlock-break recovery rather than the ordinary idle-time Diligence Push, so a pending sideDialog alone does not veto that one recovery injection) and gateway-returned HTML 502 Bad Gateway pages plus `500 auth_unavailable: no auth available` infrastructure failures classified into conservative retry. Minimal example:\n```yaml\nproviders:\n my_gateway:\n apiType: openai\n baseUrl: https://example.invalid/v1\n apiKeyEnvVar: MY_GATEWAY_API_KEY\n apiQuirks: xcode.best\n models:\n my_model: { name: "upstream-model-id" }\n```',
132
132
  'Boundary reminder: `apiQuirks` only affects providers/generators that explicitly read it in code. In the current implementation, at least the OpenAI Responses path consumes it; do not assume every `apiType` supports or needs it. If behavior is still wrong after setting it, continue with upstream gateway docs, raw stream event inspection, and `team_mgmt_check_provider(...)` / runtime logs.',
133
133
  ]);
134
134
  }
@@ -2,8 +2,8 @@ import type { LanguageCode } from '@longrun-ai/kernel/types/language';
2
2
  import { type McpToolsetManualState } from '../mcp/manual-problems';
3
3
  export type McpToolsetMappingEntry = {
4
4
  serverId: string;
5
- transport: 'stdio' | 'streamable_http' | 'invalid';
6
- status: 'registered' | 'declared_unloaded' | 'declared_invalid';
5
+ transport: 'stdio' | 'streamable_http' | 'invalid' | 'unknown';
6
+ status: 'registered' | 'declared_unloaded' | 'declared_invalid' | 'disabled';
7
7
  loadedToolCount?: number;
8
8
  loadedToolNames?: string[];
9
9
  loadedToolNamesPreview?: string[];
@@ -157,14 +157,24 @@ function renderAutoGeneratedMcpManualDraftSection(language, entry) {
157
157
  ? language === 'zh'
158
158
  ? '已加载'
159
159
  : 'loaded'
160
- : entry.status === 'declared_unloaded'
160
+ : entry.status === 'disabled'
161
161
  ? language === 'zh'
162
- ? '已声明但未加载'
163
- : 'declared but not loaded'
164
- : language === 'zh'
165
- ? '声明无效'
166
- : 'invalid declaration';
167
- const transportText = entry.transport === 'invalid' ? 'invalid' : entry.transport === 'stdio' ? 'stdio' : 'http';
162
+ ? '已禁用'
163
+ : 'disabled'
164
+ : entry.status === 'declared_unloaded'
165
+ ? language === 'zh'
166
+ ? '已声明但未加载'
167
+ : 'declared but not loaded'
168
+ : language === 'zh'
169
+ ? '声明无效'
170
+ : 'invalid declaration';
171
+ const transportText = entry.transport === 'invalid'
172
+ ? 'invalid'
173
+ : entry.transport === 'unknown'
174
+ ? 'unknown'
175
+ : entry.transport === 'stdio'
176
+ ? 'stdio'
177
+ : 'http';
168
178
  lines.push(`\n### toolset \`${entry.serverId}\``);
169
179
  lines.push(...fmtList([
170
180
  language === 'zh'
@@ -195,8 +205,12 @@ function renderAutoGeneratedMcpManualDraftSection(language, entry) {
195
205
  else {
196
206
  lines.push(...fmtList([
197
207
  language === 'zh'
198
- ? '当前无法给出已加载 tools 清单(通常因为该 server 尚未加载)。先运行 `team_mgmt_validate_mcp_cfg({})`,必要时再 `mcp_restart`。'
199
- : 'Loaded tools are not currently available (usually because this server is not loaded yet). Run `team_mgmt_validate_mcp_cfg({})`, then `mcp_restart` if needed.',
208
+ ? entry.status === 'disabled'
209
+ ? ' server 当前为 disabled,按设计暴露为 0 工具 toolset。需要启用时运行 `mcp_restart`。'
210
+ : '当前无法给出已加载 tools 清单(通常因为该 server 尚未加载或启动失败)。先运行 `team_mgmt_validate_mcp_cfg({})`,必要时再 `mcp_restart`。'
211
+ : entry.status === 'disabled'
212
+ ? 'This server is disabled and intentionally exposed as a zero-tool toolset. Run `mcp_restart` to enable it.'
213
+ : 'Loaded tools are not currently available (usually because this server is not loaded yet or failed to start). Run `team_mgmt_validate_mcp_cfg({})`, then `mcp_restart` if needed.',
200
214
  ])
201
215
  .trimEnd()
202
216
  .split('\n'));
@@ -290,6 +304,7 @@ async function readMcpToolsetMappingSnapshot() {
290
304
  for (const invalid of parsed.invalidServers) {
291
305
  invalidByServerId.set(invalid.serverId, invalid.errorText);
292
306
  }
307
+ const disabledServerIds = new Set(parsed.disabledServerIdsInYamlOrder);
293
308
  const entries = [];
294
309
  for (const serverId of parsed.serverIdsInYamlOrder) {
295
310
  const invalidError = invalidByServerId.get(serverId);
@@ -310,6 +325,18 @@ async function readMcpToolsetMappingSnapshot() {
310
325
  });
311
326
  continue;
312
327
  }
328
+ if (disabledServerIds.has(serverId)) {
329
+ entries.push({
330
+ serverId,
331
+ transport: 'unknown',
332
+ status: 'disabled',
333
+ loadedToolCount: 0,
334
+ loadedToolNames: [],
335
+ loadedToolNamesPreview: [],
336
+ manualState,
337
+ });
338
+ continue;
339
+ }
313
340
  const transport = parsed.config.servers[serverId]?.transport ?? 'invalid';
314
341
  const loadedTools = registeredToolsets[serverId];
315
342
  if (loadedTools) {
@@ -378,7 +405,13 @@ function renderMcpToolsetMappingSection(language, snapshot) {
378
405
  }
379
406
  const lines = [];
380
407
  for (const entry of snapshot.entries) {
381
- const transportText = entry.transport === 'invalid' ? 'invalid' : entry.transport === 'stdio' ? 'stdio' : 'http';
408
+ const transportText = entry.transport === 'invalid'
409
+ ? 'invalid'
410
+ : entry.transport === 'unknown'
411
+ ? 'unknown'
412
+ : entry.transport === 'stdio'
413
+ ? 'stdio'
414
+ : 'http';
382
415
  const manualText = describeMcpManualState(language, entry.manualState);
383
416
  if (entry.status === 'registered') {
384
417
  const preview = entry.loadedToolNamesPreview ?? [];
@@ -399,6 +432,12 @@ function renderMcpToolsetMappingSection(language, snapshot) {
399
432
  : `\`servers.${entry.serverId}\` -> toolset \`${entry.serverId}\` (transport=${transportText}, status=declared but not loaded; ${manualText})`);
400
433
  continue;
401
434
  }
435
+ if (entry.status === 'disabled') {
436
+ lines.push(language === 'zh'
437
+ ? `\`servers.${entry.serverId}\` -> toolset \`${entry.serverId}\`(状态=已禁用,tools=0;${manualText})`
438
+ : `\`servers.${entry.serverId}\` -> toolset \`${entry.serverId}\` (status=disabled, tools=0; ${manualText})`);
439
+ continue;
440
+ }
402
441
  lines.push(language === 'zh'
403
442
  ? `\`servers.${entry.serverId}\` -> toolset \`${entry.serverId}\`(状态=声明无效:${firstNonEmptyLine(entry.errorText ?? '')};${manualText})`
404
443
  : `\`servers.${entry.serverId}\` -> toolset \`${entry.serverId}\` (status=invalid declaration: ${firstNonEmptyLine(entry.errorText ?? '')}; ${manualText})`);
@@ -406,11 +445,13 @@ function renderMcpToolsetMappingSection(language, snapshot) {
406
445
  const tail = language === 'zh'
407
446
  ? [
408
447
  '说明:`已声明但未加载` 通常表示当前会话尚未完成 MCP 重载,或 server 启动失败。',
448
+ '说明:`已禁用` 表示该 server 在 `.minds/mcp.yaml` 中为 `enabled: false`,会保留 0 工具 toolset 和手册可见性。',
409
449
  '说明:MCP toolset “没有 manual” 不等于“不可用”。无 manual 仅表示团队管理者没有提供章节化手册;你应继续阅读每个工具的 description/参数并谨慎使用。',
410
450
  '建议:运行 `team_mgmt_validate_mcp_cfg({})`,必要时执行 `mcp_restart`。',
411
451
  ]
412
452
  : [
413
453
  '`declared but not loaded` usually means MCP reload has not completed in the current session, or server startup failed.',
454
+ '`disabled` means the server has `enabled: false` in `.minds/mcp.yaml`; Dominds keeps a zero-tool toolset and manual visible.',
414
455
  'Important: “missing manual” for an MCP toolset does NOT mean unavailable. It only means the team manager did not provide chapterized manual text; continue by reading each tool description/arguments and use with care.',
415
456
  'Recommendation: run `team_mgmt_validate_mcp_cfg({})`, then `mcp_restart` if needed.',
416
457
  ];
@@ -481,9 +522,10 @@ async function renderMcpManual(language) {
481
522
  return (fmtHeader('.minds/mcp.yaml') +
482
523
  fmtList([
483
524
  '每个 MCP `serverId` 注册一个 toolset,toolset 名称 = `serverId`(不加 `mcp_` 前缀)。成员通过 `members.<id>.toolsets` 选择能用哪些 MCP toolset。',
484
- '支持热重载:编辑 `.minds/mcp.yaml` 后通常无需重启 Dominds;必要时用 `mcp_restart`。',
485
- '默认按“每个对话租用一个 MCP 运行时实例”运行(更安全):某个对话首次使用该 server 时,可能为它启动/持有一个运行时实例(HTTP 连接或 stdio 进程),并添加 sticky reminder。确认当前对话不再需要该运行时实例后,用 `mcp_release` 释放。租约只表达运行时资源归属,不决定该 server 的全局工具注册/可见性;如确实是无状态服务器,可配置 `truely-stateless: true` 允许跨对话共享。',
525
+ '支持热重载:编辑 `.minds/mcp.yaml` 后通常无需重启 Dominds;必要时用 `mcp_restart`。`mcp_restart` 会把目标 server 的 `enabled: false` 写回 `enabled: true` 后尝试启动;成功后替换全局 runtime 并清掉旧 runtime 的全部对话 lease。',
526
+ '默认按“每个对话租用一个 MCP 运行时实例”运行(更安全):某个对话首次使用该 server 时,可能为它启动/持有一个运行时实例(HTTP 连接或 stdio 进程),并添加 sticky reminder。确认当前对话不再需要该运行时实例后,用 `mcp_release` 释放。租约只表达运行时资源归属,不决定该 server 的全局工具注册/可见性;如确实是无状态服务器,可配置 `truely-stateless: true` 允许跨对话共享。若需停用某 server,用 `mcp_disable` 写入 `enabled: false`;禁用后仍会保留 0 工具 toolset 和手册可见性。',
486
527
  'stdio 配置格式:`command` 必须是字符串(可执行命令),参数放在 `args`(string[],可省略,默认空数组)。`cwd` 可选(字符串):用于固定相对路径解析目录。',
528
+ 'HTTP headers 支持三种值:字面量字符串、`{ env: NAME }`、`{ prefix: "Bearer ", env: NAME }`;认证 token 建议从环境变量读取,不要写死在 YAML。',
487
529
  '用 `tools.whitelist/blacklist` 控制暴露的工具,用 `transform` 做命名变换。',
488
530
  '常见坑:stdio transport 需要可执行命令路径正确,且受成员权限(目录 + 扩展名:`*_dirs/no_*_dirs/*_file_ext_names/no_*_file_ext_names`)约束;HTTP transport 需要服务可达(url/端口/网络)。',
489
531
  '高频坑(stdio 路径):若未设置 `cwd`,相对路径按 Dominds 进程工作目录(通常 rtws 根目录)解析;建议显式配置 `cwd` 或直接使用绝对路径。`cwd` 必须存在且是目录。',
@@ -494,7 +536,7 @@ async function renderMcpManual(language) {
494
536
  '团队管理者建议:配置并验证 MCP 后,应先精读该 server 暴露的每个工具 description/参数,再与人类用户讨论本 rtws 中这些工具的使用意图,然后把正式手册沉淀到 `manual.contentFile`;若还需要在团队管理层额外解释业务边界,可再补 inline `content + sections`。',
495
537
  '章节组织建议采用“半结构化”:可优先考虑 `何时使用`、`安全边界`、`不可用时业务处置` 这类高价值章节,但不要求所有 toolset 都照抄同一模板。应从真实业务目标出发,决定哪些章节需要展开、哪些只需一句话、哪些可以合并或另起更贴切的标题。',
496
538
  '对每个 MCP toolset,团队管理者仍应刻意写明“不可用时业务处置规约”:至少回答 1) 当前 toolset 暂不可达时是否必须找协调者/专员接手;2) 是否允许走人工或其他工具链降级路径;3) 哪些业务动作在该 toolset 恢复前必须暂停,禁止擅自继续。',
497
- '最小诊断流程(建议顺序):1) 先用 `team_mgmt_check_provider({ provider_key: "<providerKey>", model: "", all_models: false, live: false })` 确认 LLM provider 可用;2) 再检查该成员的目录权限(`man({ "toolsetId": "team_mgmt", "topics": ["permissions"] })`);3) 运行 `team_mgmt_validate_mcp_cfg({})` 汇总 `.minds/mcp.yaml` 与 MCP 问题;4) 必要时 `mcp_restart`,用完记得 `mcp_release`。',
539
+ '最小诊断流程(建议顺序):1) 先用 `team_mgmt_check_provider({ provider_key: "<providerKey>", model: "", all_models: false, live: false })` 确认 LLM provider 可用;2) 再检查该成员的目录权限(`man({ "toolsetId": "team_mgmt", "topics": ["permissions"] })`);3) 运行 `team_mgmt_validate_mcp_cfg({})` 汇总 `.minds/mcp.yaml` 与 MCP 问题;4) 必要时 `mcp_restart` 启用/重启,或 `mcp_disable` 禁用;只在当前对话确实持有不再需要的 lease 时使用 `mcp_release`。',
498
540
  ]) +
499
541
  fmtCodeBlock('yaml', [
500
542
  '# 最小模板(stdio)',
@@ -545,6 +587,10 @@ async function renderMcpManual(language) {
545
587
  ' truely-stateless: false',
546
588
  ' transport: streamable_http',
547
589
  ' url: http://127.0.0.1:3000/mcp',
590
+ ' # headers:',
591
+ ' # Authorization:',
592
+ ' # prefix: "Bearer "',
593
+ ' # env: MCP_AUTH_TOKEN',
548
594
  ' tools: { whitelist: [], blacklist: [] }',
549
595
  ' transform: []',
550
596
  ' manual:',
@@ -560,9 +606,10 @@ async function renderMcpManual(language) {
560
606
  return (fmtHeader('.minds/mcp.yaml') +
561
607
  fmtList([
562
608
  'Each MCP `serverId` registers one toolset, and the toolset name is exactly `serverId` (no `mcp_` prefix). Members choose MCP access via `members.<id>.toolsets`.',
563
- 'Hot reload: edits usually apply without restarting Dominds; use `mcp_restart` when needed.',
564
- "Default is per-dialog MCP runtime leasing (safer): a dialog's first use may start/hold one runtime instance for that server (an HTTP connection or stdio process), and first use adds a sticky reminder. Call `mcp_release` when you're sure the current dialog no longer needs that runtime instance. This lease is about runtime resource ownership only; tool registration/visibility still follows the latest global server instance. If the server is truly stateless, set `truely-stateless: true` to allow cross-dialog sharing.",
609
+ 'Hot reload: edits usually apply without restarting Dominds; use `mcp_restart` when needed. `mcp_restart` writes `enabled: true` when the target server is currently `enabled: false`, then tries to start it; after success it replaces the global runtime and clears all dialog leases on the old runtime.',
610
+ "Default is per-dialog MCP runtime leasing (safer): a dialog's first use may start/hold one runtime instance for that server (an HTTP connection or stdio process), and first use adds a sticky reminder. Call `mcp_release` when you're sure the current dialog no longer needs that runtime instance. This lease is about runtime resource ownership only; tool registration/visibility still follows the latest global server instance. If the server is truly stateless, set `truely-stateless: true` to allow cross-dialog sharing. To disable a server, use `mcp_disable` to write `enabled: false`; disabled servers remain visible as zero-tool toolsets with their manuals.",
565
611
  'Stdio shape: `command` must be a string executable; parameters go in `args` (string[], optional, defaults to empty). Optional `cwd` (string) fixes the working directory used for relative paths.',
612
+ 'HTTP headers support three value forms: literal strings, `{ env: NAME }`, and `{ prefix: "Bearer ", env: NAME }`; keep auth tokens in env instead of hardcoding them in YAML.',
566
613
  'Use `tools.whitelist/blacklist` for exposure control and `transform` for naming transforms.',
567
614
  'Common pitfalls: stdio transport needs a correct executable/command path, and is subject to member permissions (directory + extension: `*_dirs/no_*_dirs/*_file_ext_names/no_*_file_ext_names`); HTTP transport requires the server URL to be reachable.',
568
615
  'High-frequency pitfall (stdio paths): if `cwd` is omitted, relative paths are resolved from Dominds process cwd (usually rtws root). Prefer setting `cwd` explicitly or use absolute paths. `cwd` must exist and be a directory.',
@@ -573,7 +620,7 @@ async function renderMcpManual(language) {
573
620
  'Team-manager recommendation: after MCP config is validated, carefully read descriptions/arguments of each exposed tool, discuss intended usage for this rtws with the human user, then write the formal manual into `manual.contentFile`; if extra team-management interpretation is still useful, add inline `content + sections` alongside it.',
574
621
  'Use a semi-structured chapter shape: high-value sections often include `When To Use`, `Guardrails`, and `Business Handling When Unavailable`, but do not force every toolset into one fixed template. Start from the real business goal, then decide which sections deserve depth, which can stay brief, and which should be merged or renamed to fit the scenario.',
575
622
  'For each MCP toolset, still document unavailable-case business rules explicitly: at minimum answer 1) whether a temporarily unavailable toolset must be escalated to a coordinator or specialist, 2) whether a manual or alternate-tool fallback path is allowed, and 3) which business actions must pause until this toolset recovers.',
576
- 'Minimal diagnostic flow: 1) run `team_mgmt_check_provider({ provider_key: "<providerKey>", model: "", all_models: false, live: false })` to confirm the LLM provider works; 2) review member directory permissions (`man({ "toolsetId": "team_mgmt", "topics": ["permissions"] })`); 3) run `team_mgmt_validate_mcp_cfg({})` to summarize `.minds/mcp.yaml` + MCP issues; 4) use `mcp_restart` if needed, and `mcp_release` when done.',
623
+ 'Minimal diagnostic flow: 1) run `team_mgmt_check_provider({ provider_key: "<providerKey>", model: "", all_models: false, live: false })` to confirm the LLM provider works; 2) review member directory permissions (`man({ "toolsetId": "team_mgmt", "topics": ["permissions"] })`); 3) run `team_mgmt_validate_mcp_cfg({})` to summarize `.minds/mcp.yaml` + MCP issues; 4) use `mcp_restart` to enable/restart, or `mcp_disable` to disable; use `mcp_release` only when the current dialog actually holds a lease it no longer needs.',
577
624
  ]) +
578
625
  fmtCodeBlock('yaml', [
579
626
  '# Minimal template (stdio)',
@@ -624,6 +671,10 @@ async function renderMcpManual(language) {
624
671
  ' truely-stateless: false',
625
672
  ' transport: streamable_http',
626
673
  ' url: http://127.0.0.1:3000/mcp',
674
+ ' # headers:',
675
+ ' # Authorization:',
676
+ ' # prefix: "Bearer "',
677
+ ' # env: MCP_AUTH_TOKEN',
627
678
  ' tools: { whitelist: [], blacklist: [] }',
628
679
  ' transform: []',
629
680
  ' manual:',