dominds 1.19.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 (186) hide show
  1. package/dist/cli/team-definition-audit.d.ts +2 -1
  2. package/dist/cli/team-definition-audit.js +20 -8
  3. package/dist/cli/validate-team-def.js +3 -3
  4. package/dist/docs/mcp-support.md +11 -0
  5. package/dist/docs/mcp-support.zh.md +7 -0
  6. package/dist/docs/team_mgmt-toolset.md +5 -2
  7. package/dist/docs/team_mgmt-toolset.zh.md +4 -2
  8. package/dist/docs/tool-availability-protocol.md +4 -2
  9. package/dist/mcp/config.d.ts +1 -0
  10. package/dist/mcp/config.js +16 -0
  11. package/dist/mcp/supervisor.d.ts +7 -1
  12. package/dist/mcp/supervisor.js +298 -16
  13. package/dist/minds/load.js +5 -0
  14. package/dist/minds/system-prompt.d.ts +1 -0
  15. package/dist/minds/system-prompt.js +14 -6
  16. package/dist/tools/builtins.js +2 -0
  17. package/dist/tools/env.js +10 -58
  18. package/dist/tools/manual/render.js +4 -0
  19. package/dist/tools/mcp.d.ts +1 -0
  20. package/dist/tools/mcp.js +55 -5
  21. package/dist/tools/prompts/mcp_admin/en/errors.md +0 -14
  22. package/dist/tools/prompts/mcp_admin/en/index.md +5 -3
  23. package/dist/tools/prompts/mcp_admin/en/principles.md +11 -5
  24. package/dist/tools/prompts/mcp_admin/en/scenarios.md +19 -3
  25. package/dist/tools/prompts/mcp_admin/en/tools.md +85 -21
  26. package/dist/tools/prompts/mcp_admin/zh/errors.md +0 -14
  27. package/dist/tools/prompts/mcp_admin/zh/index.md +5 -3
  28. package/dist/tools/prompts/mcp_admin/zh/principles.md +11 -5
  29. package/dist/tools/prompts/mcp_admin/zh/scenarios.md +19 -3
  30. package/dist/tools/prompts/mcp_admin/zh/tools.md +85 -21
  31. package/dist/tools/prompts/os/en/errors.md +0 -28
  32. package/dist/tools/prompts/os/en/scenarios.md +1 -1
  33. package/dist/tools/prompts/os/en/tools.md +8 -17
  34. package/dist/tools/prompts/os/zh/errors.md +0 -28
  35. package/dist/tools/prompts/os/zh/scenarios.md +1 -1
  36. package/dist/tools/prompts/os/zh/tools.md +8 -17
  37. package/dist/tools/registry.d.ts +5 -0
  38. package/dist/tools/team_mgmt-mcp-manual.d.ts +2 -2
  39. package/dist/tools/team_mgmt-mcp-manual.js +57 -16
  40. package/dist/tools/team_mgmt.js +4 -4
  41. package/package.json +3 -3
  42. package/webapp/dist/assets/{_basePickBy-B7M9Q0Fa.js → _basePickBy-Dnh413xT.js} +3 -3
  43. package/webapp/dist/assets/_basePickBy-Dnh413xT.js.map +1 -0
  44. package/webapp/dist/assets/{_baseUniq-DAeYoL6j.js → _baseUniq-DWzYqpN_.js} +2 -2
  45. package/webapp/dist/assets/_baseUniq-DWzYqpN_.js.map +1 -0
  46. package/webapp/dist/assets/{arc-Bh4nDbNR.js → arc-vfBkNCOx.js} +2 -2
  47. package/webapp/dist/assets/arc-vfBkNCOx.js.map +1 -0
  48. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CxqmdsIm.js → architectureDiagram-VXUJARFQ-DiUEBXOa.js} +8 -26
  49. package/webapp/dist/assets/architectureDiagram-VXUJARFQ-DiUEBXOa.js.map +1 -0
  50. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-CxIWLtpt.js → blockDiagram-VD42YOAC-BqK1KM2m.js} +170 -187
  51. package/webapp/dist/assets/blockDiagram-VD42YOAC-BqK1KM2m.js.map +1 -0
  52. package/webapp/dist/assets/{c4Diagram-IC4MRINW-1qErOIgG.js → c4Diagram-YG6GDRKO-ClHNu1Uo.js} +4 -4
  53. package/webapp/dist/assets/c4Diagram-YG6GDRKO-ClHNu1Uo.js.map +1 -0
  54. package/webapp/dist/assets/{channel-DkgZHNUe.js → channel-BbWLVc8W.js} +2 -2
  55. package/webapp/dist/assets/channel-BbWLVc8W.js.map +1 -0
  56. package/webapp/dist/assets/{chunk-4BX2VUAB-BmdMbU9v.js → chunk-4BX2VUAB-CItdSmZH.js} +2 -2
  57. package/webapp/dist/assets/chunk-4BX2VUAB-CItdSmZH.js.map +1 -0
  58. package/webapp/dist/assets/{chunk-55IACEB6-D6LDTDBy.js → chunk-55IACEB6-DSCX9WCf.js} +2 -2
  59. package/webapp/dist/assets/chunk-55IACEB6-DSCX9WCf.js.map +1 -0
  60. package/webapp/dist/assets/{chunk-WL4C6EOR-B-Pk44be.js → chunk-B4BG7PRW-5CRXFeD9.js} +121 -171
  61. package/webapp/dist/assets/chunk-B4BG7PRW-5CRXFeD9.js.map +1 -0
  62. package/webapp/dist/assets/{chunk-NQ4KR5QH-wlvxalE3.js → chunk-DI55MBZ5-CRMf6XZu.js} +7 -9
  63. package/webapp/dist/assets/chunk-DI55MBZ5-CRMf6XZu.js.map +1 -0
  64. package/webapp/dist/assets/{chunk-FMBD7UC4-C-BdCe4C.js → chunk-FMBD7UC4-BJ1vT2se.js} +2 -2
  65. package/webapp/dist/assets/chunk-FMBD7UC4-BJ1vT2se.js.map +1 -0
  66. package/webapp/dist/assets/{chunk-KX2RTZJC-CA7sDJO5.js → chunk-QN33PNHL-CGyezTSD.js} +2 -2
  67. package/webapp/dist/assets/chunk-QN33PNHL-CGyezTSD.js.map +1 -0
  68. package/webapp/dist/assets/{chunk-QZHKN3VN-Bo1VMcph.js → chunk-QZHKN3VN-9xs15j8C.js} +2 -2
  69. package/webapp/dist/assets/chunk-QZHKN3VN-9xs15j8C.js.map +1 -0
  70. package/webapp/dist/assets/{chunk-JSJVCQXG-WA_BLIm9.js → chunk-TZMSLE5B-D2g6Tj7Z.js} +6 -14
  71. package/webapp/dist/assets/chunk-TZMSLE5B-D2g6Tj7Z.js.map +1 -0
  72. package/webapp/dist/assets/{classDiagram-VBA2DB6C-BqKuyb49.js → classDiagram-2ON5EDUG-BQFGGJNm.js} +6 -7
  73. package/webapp/dist/assets/classDiagram-2ON5EDUG-BQFGGJNm.js.map +1 -0
  74. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-BqKuyb49.js → classDiagram-v2-WZHVMYZB-BQFGGJNm.js} +6 -7
  75. package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-BQFGGJNm.js.map +1 -0
  76. package/webapp/dist/assets/{clone-BX5z8WVZ.js → clone-DOfPd4cz.js} +2 -2
  77. package/webapp/dist/assets/clone-DOfPd4cz.js.map +1 -0
  78. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-B-s11SgN.js → cose-bilkent-S5V4N54A-BYN-vqm8.js} +2 -2
  79. package/webapp/dist/assets/cose-bilkent-S5V4N54A-BYN-vqm8.js.map +1 -0
  80. package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
  81. package/webapp/dist/assets/{dagre-KLK3FWXG-DmQFV2qK.js → dagre-6UL2VRFP-ClEaFABE.js} +7 -7
  82. package/webapp/dist/assets/dagre-6UL2VRFP-ClEaFABE.js.map +1 -0
  83. package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
  84. package/webapp/dist/assets/{diagram-E7M64L7V-QRaBfST8.js → diagram-PSM6KHXK-CM4hLE_0.js} +10 -10
  85. package/webapp/dist/assets/diagram-PSM6KHXK-CM4hLE_0.js.map +1 -0
  86. package/webapp/dist/assets/{diagram-IFDJBPK2-lrWn1Obo.js → diagram-QEK2KX5R-BZjGFX-2.js} +8 -9
  87. package/webapp/dist/assets/diagram-QEK2KX5R-BZjGFX-2.js.map +1 -0
  88. package/webapp/dist/assets/{diagram-P4PSJMXO-sTU7Hh-Y.js → diagram-S2PKOQOG-Bvw01OOG.js} +8 -8
  89. package/webapp/dist/assets/diagram-S2PKOQOG-Bvw01OOG.js.map +1 -0
  90. package/webapp/dist/assets/{erDiagram-INFDFZHY-Cx6jc9Wq.js → erDiagram-Q2GNP2WA-ctHu5zQL.js} +75 -96
  91. package/webapp/dist/assets/erDiagram-Q2GNP2WA-ctHu5zQL.js.map +1 -0
  92. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-DfGI49Dz.js → flowDiagram-NV44I4VS-m7ofIhri.js} +81 -98
  93. package/webapp/dist/assets/flowDiagram-NV44I4VS-m7ofIhri.js.map +1 -0
  94. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-nrcHWWaM.js → ganttDiagram-JELNMOA3-D9wS5Veb.js} +3 -28
  95. package/webapp/dist/assets/ganttDiagram-JELNMOA3-D9wS5Veb.js.map +1 -0
  96. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js → gitGraphDiagram-V2S2FVAM-B86qqJx7.js} +46 -38
  97. package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-B86qqJx7.js.map +1 -0
  98. package/webapp/dist/assets/graph-u844GGQC.js +425 -0
  99. package/webapp/dist/assets/graph-u844GGQC.js.map +1 -0
  100. package/webapp/dist/assets/{index-DZFkLLVz.css → index-BGdI3lWA.css} +1 -1
  101. package/webapp/dist/assets/{index--fy89xGh.js → index-tinPEZoH.js} +1059 -1034
  102. package/webapp/dist/assets/{index--fy89xGh.js.map → index-tinPEZoH.js.map} +1 -1
  103. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-PIoZHr7s.js → infoDiagram-HS3SLOUP-DwRPUctP.js} +7 -7
  104. package/webapp/dist/assets/infoDiagram-HS3SLOUP-DwRPUctP.js.map +1 -0
  105. package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
  106. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-C2qidjQ5.js → journeyDiagram-XKPGCS4Q-B91ZO-ec.js} +5 -5
  107. package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-B91ZO-ec.js.map +1 -0
  108. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Du0TC8WS.js → kanban-definition-3W4ZIXB7-CoogrZ07.js} +3 -5
  109. package/webapp/dist/assets/kanban-definition-3W4ZIXB7-CoogrZ07.js.map +1 -0
  110. package/webapp/dist/assets/{layout-VmEo1OEB.js → layout-BrzQmqFJ.js} +5 -5
  111. package/webapp/dist/assets/layout-BrzQmqFJ.js.map +1 -0
  112. package/webapp/dist/assets/{linear-B662YHAc.js → linear-C6H7K9Zy.js} +2 -2
  113. package/webapp/dist/assets/linear-C6H7K9Zy.js.map +1 -0
  114. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-D7arZj95.js → mindmap-definition-VGOIOE7T-UDHZQkNZ.js} +5 -7
  115. package/webapp/dist/assets/mindmap-definition-VGOIOE7T-UDHZQkNZ.js.map +1 -0
  116. package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
  117. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DvjPP4PA.js → pieDiagram-ADFJNKIX-M81uyQ1J.js} +8 -8
  118. package/webapp/dist/assets/pieDiagram-ADFJNKIX-M81uyQ1J.js.map +1 -0
  119. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-B_JUGMj_.js → quadrantDiagram-AYHSOK5B-ClzIh9Gb.js} +3 -3
  120. package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-ClzIh9Gb.js.map +1 -0
  121. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-DF0mpvE3.js → requirementDiagram-UZGBJVZJ-DLK3A-pn.js} +6 -16
  122. package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-DLK3A-pn.js.map +1 -0
  123. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-CoXlxv00.js → sankeyDiagram-TZEHDZUN-CYqju8I1.js} +2 -2
  124. package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-CYqju8I1.js.map +1 -0
  125. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DYqT5Pg7.js → sequenceDiagram-WL72ISMW-2guv6eOd.js} +201 -601
  126. package/webapp/dist/assets/sequenceDiagram-WL72ISMW-2guv6eOd.js.map +1 -0
  127. package/webapp/dist/assets/{stateDiagram-RAJIS63D-D9b1mN8-.js → stateDiagram-FKZM4ZOC-iujqSp0X.js} +9 -9
  128. package/webapp/dist/assets/stateDiagram-FKZM4ZOC-iujqSp0X.js.map +1 -0
  129. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DNzgudL_.js → stateDiagram-v2-4FDKWEC3-BxzY81ky.js} +5 -5
  130. package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-BxzY81ky.js.map +1 -0
  131. package/webapp/dist/assets/{timeline-definition-YZTLITO2-CkyKUY7A.js → timeline-definition-IT6M3QCI-DjCFSC8d.js} +3 -3
  132. package/webapp/dist/assets/timeline-definition-IT6M3QCI-DjCFSC8d.js.map +1 -0
  133. package/webapp/dist/assets/{treemap-KZPCXAKY-CZd09kF-.js → treemap-GDKQZRPO-iaBzDWCP.js} +24 -37
  134. package/webapp/dist/assets/treemap-GDKQZRPO-iaBzDWCP.js.map +1 -0
  135. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BRwRloPc.js → xychartDiagram-PRI3JC2R-R6Jl1c89.js} +4 -4
  136. package/webapp/dist/assets/xychartDiagram-PRI3JC2R-R6Jl1c89.js.map +1 -0
  137. package/webapp/dist/index.html +2 -2
  138. package/webapp/dist/assets/_basePickBy-B7M9Q0Fa.js.map +0 -1
  139. package/webapp/dist/assets/_baseUniq-DAeYoL6j.js.map +0 -1
  140. package/webapp/dist/assets/arc-Bh4nDbNR.js.map +0 -1
  141. package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-CxqmdsIm.js.map +0 -1
  142. package/webapp/dist/assets/blockDiagram-WCTKOSBZ-CxIWLtpt.js.map +0 -1
  143. package/webapp/dist/assets/c4Diagram-IC4MRINW-1qErOIgG.js.map +0 -1
  144. package/webapp/dist/assets/channel-DkgZHNUe.js.map +0 -1
  145. package/webapp/dist/assets/chunk-4BX2VUAB-BmdMbU9v.js.map +0 -1
  146. package/webapp/dist/assets/chunk-55IACEB6-D6LDTDBy.js.map +0 -1
  147. package/webapp/dist/assets/chunk-FMBD7UC4-C-BdCe4C.js.map +0 -1
  148. package/webapp/dist/assets/chunk-JSJVCQXG-WA_BLIm9.js.map +0 -1
  149. package/webapp/dist/assets/chunk-KX2RTZJC-CA7sDJO5.js.map +0 -1
  150. package/webapp/dist/assets/chunk-NQ4KR5QH-wlvxalE3.js.map +0 -1
  151. package/webapp/dist/assets/chunk-QZHKN3VN-Bo1VMcph.js.map +0 -1
  152. package/webapp/dist/assets/chunk-WL4C6EOR-B-Pk44be.js.map +0 -1
  153. package/webapp/dist/assets/classDiagram-VBA2DB6C-BqKuyb49.js.map +0 -1
  154. package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-BqKuyb49.js.map +0 -1
  155. package/webapp/dist/assets/clone-BX5z8WVZ.js.map +0 -1
  156. package/webapp/dist/assets/cose-bilkent-S5V4N54A-B-s11SgN.js.map +0 -1
  157. package/webapp/dist/assets/dagre-KLK3FWXG-DmQFV2qK.js.map +0 -1
  158. package/webapp/dist/assets/diagram-E7M64L7V-QRaBfST8.js.map +0 -1
  159. package/webapp/dist/assets/diagram-IFDJBPK2-lrWn1Obo.js.map +0 -1
  160. package/webapp/dist/assets/diagram-P4PSJMXO-sTU7Hh-Y.js.map +0 -1
  161. package/webapp/dist/assets/erDiagram-INFDFZHY-Cx6jc9Wq.js.map +0 -1
  162. package/webapp/dist/assets/flowDiagram-PKNHOUZH-DfGI49Dz.js.map +0 -1
  163. package/webapp/dist/assets/ganttDiagram-A5KZAMGK-nrcHWWaM.js.map +0 -1
  164. package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js.map +0 -1
  165. package/webapp/dist/assets/graph-R5G-y8tB.js +0 -782
  166. package/webapp/dist/assets/graph-R5G-y8tB.js.map +0 -1
  167. package/webapp/dist/assets/infoDiagram-LFFYTUFH-PIoZHr7s.js.map +0 -1
  168. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-oCM-LYk1.js +0 -966
  169. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-oCM-LYk1.js.map +0 -1
  170. package/webapp/dist/assets/journeyDiagram-4ABVD52K-C2qidjQ5.js.map +0 -1
  171. package/webapp/dist/assets/kanban-definition-K7BYSVSG-Du0TC8WS.js.map +0 -1
  172. package/webapp/dist/assets/layout-VmEo1OEB.js.map +0 -1
  173. package/webapp/dist/assets/linear-B662YHAc.js.map +0 -1
  174. package/webapp/dist/assets/mindmap-definition-YRQLILUH-D7arZj95.js.map +0 -1
  175. package/webapp/dist/assets/pieDiagram-SKSYHLDU-DvjPP4PA.js.map +0 -1
  176. package/webapp/dist/assets/quadrantDiagram-337W2JSQ-B_JUGMj_.js.map +0 -1
  177. package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-DF0mpvE3.js.map +0 -1
  178. package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CoXlxv00.js.map +0 -1
  179. package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-DYqT5Pg7.js.map +0 -1
  180. package/webapp/dist/assets/stateDiagram-RAJIS63D-D9b1mN8-.js.map +0 -1
  181. package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-DNzgudL_.js.map +0 -1
  182. package/webapp/dist/assets/timeline-definition-YZTLITO2-CkyKUY7A.js.map +0 -1
  183. package/webapp/dist/assets/treemap-KZPCXAKY-CZd09kF-.js.map +0 -1
  184. package/webapp/dist/assets/vennDiagram-LZ73GAT5-BxVF5Olo.js +0 -2487
  185. package/webapp/dist/assets/vennDiagram-LZ73GAT5-BxVF5Olo.js.map +0 -1
  186. package/webapp/dist/assets/xychartDiagram-JWTSCODW-BRwRloPc.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
  ## 使用示例
@@ -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>;
@@ -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,8 +522,8 @@ 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` 可选(字符串):用于固定相对路径解析目录。',
487
528
  'HTTP headers 支持三种值:字面量字符串、`{ env: NAME }`、`{ prefix: "Bearer ", env: NAME }`;认证 token 建议从环境变量读取,不要写死在 YAML。',
488
529
  '用 `tools.whitelist/blacklist` 控制暴露的工具,用 `transform` 做命名变换。',
@@ -495,7 +536,7 @@ async function renderMcpManual(language) {
495
536
  '团队管理者建议:配置并验证 MCP 后,应先精读该 server 暴露的每个工具 description/参数,再与人类用户讨论本 rtws 中这些工具的使用意图,然后把正式手册沉淀到 `manual.contentFile`;若还需要在团队管理层额外解释业务边界,可再补 inline `content + sections`。',
496
537
  '章节组织建议采用“半结构化”:可优先考虑 `何时使用`、`安全边界`、`不可用时业务处置` 这类高价值章节,但不要求所有 toolset 都照抄同一模板。应从真实业务目标出发,决定哪些章节需要展开、哪些只需一句话、哪些可以合并或另起更贴切的标题。',
497
538
  '对每个 MCP toolset,团队管理者仍应刻意写明“不可用时业务处置规约”:至少回答 1) 当前 toolset 暂不可达时是否必须找协调者/专员接手;2) 是否允许走人工或其他工具链降级路径;3) 哪些业务动作在该 toolset 恢复前必须暂停,禁止擅自继续。',
498
- '最小诊断流程(建议顺序):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`。',
499
540
  ]) +
500
541
  fmtCodeBlock('yaml', [
501
542
  '# 最小模板(stdio)',
@@ -565,8 +606,8 @@ async function renderMcpManual(language) {
565
606
  return (fmtHeader('.minds/mcp.yaml') +
566
607
  fmtList([
567
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`.',
568
- 'Hot reload: edits usually apply without restarting Dominds; use `mcp_restart` when needed.',
569
- "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.",
570
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.',
571
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.',
572
613
  'Use `tools.whitelist/blacklist` for exposure control and `transform` for naming transforms.',
@@ -579,7 +620,7 @@ async function renderMcpManual(language) {
579
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.',
580
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.',
581
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.',
582
- '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.',
583
624
  ]) +
584
625
  fmtCodeBlock('yaml', [
585
626
  '# Minimal template (stdio)',
@@ -3641,7 +3641,7 @@ function renderTroubleshooting(language) {
3641
3641
  '症状:提示“Model not found” → 原因:model key 未定义/拼写错误/不在该 provider 下 → 步骤:用 `team_mgmt_list_models({ provider_pattern: \"<providerKey>\", model_pattern: \"*\" })` 查已有模型 key,再修正 `.minds/team.yaml` 引用或补全 `.minds/llm.yaml`。',
3642
3642
  '症状:提示“permission denied / forbidden / not allowed” → 原因:权限规则(目录或扩展名)命中 deny-list 或未被 allow-list 覆盖 → 步骤:用 `man({ "toolsetId": "team_mgmt", "topics": ["permissions"] })` 复核规则,并检查该成员的 `*_dirs/no_*_dirs/*_file_ext_names/no_*_file_ext_names` 配置。',
3643
3643
  '症状:`team.yaml` 里引用的 app toolset 缺失 / app 相关能力失效 → 原因:enabled app 未正确安装/启用、apps-host 启动失败,或 app 自身 host 模块/运行时损坏 → 步骤:`team_mgmt_validate_team_cfg({})` 仍然可用;先用它确认具体缺失项,再检查 `.minds/app.yaml`、已启用 apps 解析结果与相关 app 安装路径;必要时让持有 team_mgmt 的团队管理智能体继续用 `team_mgmt_read_file` / `team_mgmt_ripgrep_*` / `man({ "toolsetId": "team_mgmt", "topics": ["toolsets","troubleshooting"] })` 排查。',
3644
- '症状:MCP 不生效 → 原因:mcp 配置错误/服务不可用/租用未释放 → 步骤:先运行 `team_mgmt_validate_mcp_cfg({})` 汇总错误。注意:该校验既可能报告永久配置问题,也可能报告“当前服务不可达/未加载”这类暂态问题;若只是 server 临时不可连,服务恢复后重跑通常即可正常。必要时用 `mcp_restart`;完成后用 `mcp_release` 释放租用。',
3644
+ '症状:MCP 不生效 → 原因:mcp 配置错误/服务不可用/被禁用/租用未释放 → 步骤:先运行 `team_mgmt_validate_mcp_cfg({})` 汇总错误。注意:该校验既可能报告永久配置问题,也可能报告“当前服务不可达/未加载”这类暂态问题;若只是 server 临时不可连,服务恢复后重跑通常即可正常。必要时用 `mcp_restart` 启用/重启;要停用时用 `mcp_disable`;只在当前对话确实持有不再需要的 lease 时用 `mcp_release`。',
3645
3645
  ]));
3646
3646
  }
3647
3647
  return (fmtHeader('Troubleshooting (symptom → cause → steps)') +
@@ -3652,7 +3652,7 @@ function renderTroubleshooting(language) {
3652
3652
  'Symptom: "Model not found" → Cause: model key not defined / typo / not under that provider → Steps: run `team_mgmt_list_models({ provider_pattern: \"<providerKey>\", model_pattern: \"*\" })` and fix `.minds/team.yaml` references or update `.minds/llm.yaml`.',
3653
3653
  'Symptom: "permission denied / forbidden / not allowed" → Cause: permission rules (directory or extension) hit deny-list or are not covered by allow-list → Steps: review `man({ "toolsetId": "team_mgmt", "topics": ["permissions"] })` and the member `*_dirs/no_*_dirs/*_file_ext_names/no_*_file_ext_names` config.',
3654
3654
  'Symptom: an app-provided toolset referenced from `team.yaml` is missing / app capability is unavailable → Cause: enabled app not installed/enabled correctly, apps-host startup failure, or a broken app host module/runtime → Steps: `team_mgmt_validate_team_cfg({})` remains available; use it first to identify the missing binding, then inspect `.minds/app.yaml`, enabled-app resolution, and the app install path. The team manager should continue with `team_mgmt_read_file`, `team_mgmt_ripgrep_*`, and `man({ "toolsetId": "team_mgmt", "topics": ["toolsets","troubleshooting"] })`.',
3655
- 'Symptom: MCP not working → Cause: bad config / server down / leasing issues → Steps: run `team_mgmt_validate_mcp_cfg({})` first. Note: the validator may report both permanent config errors and transient runtime-availability issues; if the server is merely down/unreachable for now, rerunning after recovery will often clear the problem. Then use `mcp_restart` if needed; call `mcp_release` when done.',
3655
+ 'Symptom: MCP not working → Cause: bad config / server down / disabled server / leasing issues → Steps: run `team_mgmt_validate_mcp_cfg({})` first. Note: the validator may report both permanent config errors and transient runtime-availability issues; if the server is merely down/unreachable for now, rerunning after recovery will often clear the problem. Then use `mcp_restart` to enable/restart if needed; use `mcp_disable` to disable; call `mcp_release` only when the current dialog actually holds a lease it no longer needs.',
3656
3656
  ]));
3657
3657
  }
3658
3658
  function isLikelyAppToolsetBindingProblem(problem) {
@@ -3782,7 +3782,7 @@ async function renderToolsets(language) {
3782
3782
  : '按模型/工作形态选择匹配的 toolsets:默认把 `ws_read` / `ws_mod` 作为通用基线;当目标模型属于 `gpt-5.x` 家族时,在基线上追加 `codex_inspect_and_patch_tools`(`apply_patch`、`readonly_shell`),不是替换 `ws_read` / `ws_mod`。如果还需要“读/探测 rtws”,通常要再给 `os`(`shell_cmd`)并严格限制在少数专员成员手里。',
3783
3783
  'MCP toolset 不是静态写死:它由 `.minds/mcp.yaml` 的 `servers.<serverId>` 动态映射而来(toolset 名称 = `serverId`)。下方会展示当前映射快照。',
3784
3784
  '`os` 是 shell 工具集,当前包含 `shell_cmd` / `stop_daemon` / `get_daemon_output`。一旦成员拥有这些工具(包括通过 `os` 获得),其 id 必须出现在顶层 `shell_specialists`。',
3785
- '`mcp_admin` 用于 MCP 运维:`mcp_restart` / `mcp_release` 管理 server 会话租用,并配有 `env_get` / `env_set` / `env_unset` 便于联调环境变量。',
3785
+ '`mcp_admin` 用于 MCP 运维:`mcp_restart` 启用/重启 server,`mcp_disable` 禁用 server 并保留 0 工具 toolset/手册可见性,`mcp_release` 只释放当前对话 lease;并配有 `env_get` / `env_set` / `env_unset` 便于联调环境变量。',
3786
3786
  '授予 `team_mgmt` 不只是“给工具权限”:一旦某成员承担团队管理职责,其 `persona.*.md` 也必须明确要求在执行团队管理操作前先查看 `man({ "toolsetId": "team_mgmt" })` 相关章节,并按手册标准做法维护 `.minds/**` 团队心智资产。',
3787
3787
  '最佳实践:把 `os`(尤其 `shell_cmd`)只授予具备良好纪律/风控意识的人设成员(例如 “cmdr/ops”),并同步维护 `shell_specialists`。对不具备 shell 工具的成员,系统提示会明确要求其将 shell 执行委派给这类专员,并提供可审查的命令提案与理由。',
3788
3788
  '常见三种模式(示例写在 `.minds/team.yaml` 的 `members.<id>.toolsets` 下):',
@@ -3796,7 +3796,7 @@ async function renderToolsets(language) {
3796
3796
  : 'Pick toolsets to match the model/work style: keep `ws_read` / `ws_mod` as the general baseline; for models in the `gpt-5.x` family, add `codex_inspect_and_patch_tools` (`apply_patch`, `readonly_shell`) on top rather than replacing `ws_read` / `ws_mod`. If you also need to read/probe the rtws, you typically must grant `os` (`shell_cmd`) and keep it restricted to a small number of specialist operators.',
3797
3797
  'MCP toolsets are not hardcoded: they are dynamically mapped from `.minds/mcp.yaml` `servers.<serverId>` (toolset name = `serverId`). The current mapping snapshot is shown below.',
3798
3798
  '`os` is the shell toolset, currently including `shell_cmd`, `stop_daemon`, and `get_daemon_output`. If a member has any of these tools (including via `os`), that member id must appear in top-level `shell_specialists`.',
3799
- '`mcp_admin` is for MCP operations: use `mcp_restart` / `mcp_release` to manage server leasing lifecycle, with `env_get` / `env_set` / `env_unset` available for environment debugging.',
3799
+ '`mcp_admin` is for MCP operations: `mcp_restart` enables/restarts a server, `mcp_disable` disables a server while keeping its zero-tool toolset/manual visible, and `mcp_release` only releases the current dialog lease; `env_get` / `env_set` / `env_unset` are available for environment debugging.',
3800
3800
  'Granting `team_mgmt` is not just a tool-access change: once a member carries team-management responsibility, that member’s `persona.*.md` must explicitly require reading the relevant `man({ "toolsetId": "team_mgmt" })` chapters before any team-management action, and maintaining `.minds/**` team mind assets by handbook-standard workflow.',
3801
3801
  'Best practice: grant `os` (especially `shell_cmd`) only to a disciplined, risk-aware operator persona (e.g. “cmdr/ops”), and keep `shell_specialists` in sync. For members without shell tools, the system prompt explicitly tells them to delegate shell execution to such a specialist, with a reviewable command proposal and justification.',
3802
3802
  'Three common patterns (in `.minds/team.yaml` under `members.<id>.toolsets`):',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dominds",
3
- "version": "1.19.2",
3
+ "version": "1.19.3",
4
4
  "description": "Dominds CLI and aggregation shell for the LongRun AI kernel/runtime packages.",
5
5
  "type": "commonjs",
6
6
  "publishConfig": {
@@ -52,8 +52,8 @@
52
52
  "ws": "^8.19.0",
53
53
  "yaml": "^2.8.2",
54
54
  "zod": "^4.3.6",
55
- "@longrun-ai/kernel": "1.11.1",
56
- "@longrun-ai/shell": "1.11.1",
55
+ "@longrun-ai/kernel": "1.11.2",
56
+ "@longrun-ai/shell": "1.11.2",
57
57
  "@longrun-ai/codex-auth": "0.12.1"
58
58
  },
59
59
  "devDependencies": {
@@ -1,5 +1,5 @@
1
- import { e as isSymbol, c as baseFlatten, g as baseIteratee, k as keys, h as baseFindIndex, j as baseEach, l as arrayMap, m as hasPath, n as castPath, t as toKey, o as baseGet } from "./_baseUniq-DAeYoL6j.js";
2
- import { aU as isObject, aC as baseRest, aV as isIterateeCall, aW as keysIn, aX as eq, aY as isArrayLike, aZ as isArray, a_ as identity, a$ as isIndex, b0 as assignValue } from "./index--fy89xGh.js";
1
+ import { e as isSymbol, c as baseFlatten, g as baseIteratee, k as keys, h as baseFindIndex, j as baseEach, l as arrayMap, m as hasPath, n as castPath, t as toKey, o as baseGet } from "./_baseUniq-DWzYqpN_.js";
2
+ import { aR as isObject, aA as baseRest, aS as isIterateeCall, aT as keysIn, aU as eq, aV as isArrayLike, aW as isArray, aX as identity, aY as isIndex, aZ as assignValue } from "./index-tinPEZoH.js";
3
3
  var reWhitespace = /\s/;
4
4
  function trimmedEndIndex(string) {
5
5
  var index = string.length;
@@ -193,4 +193,4 @@ export {
193
193
  map as m,
194
194
  toFinite as t
195
195
  };
196
- //# sourceMappingURL=_basePickBy-B7M9Q0Fa.js.map
196
+ //# sourceMappingURL=_basePickBy-Dnh413xT.js.map