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.
- package/dist/cli/team-definition-audit.d.ts +2 -1
- package/dist/cli/team-definition-audit.js +20 -8
- package/dist/cli/validate-team-def.js +3 -3
- package/dist/docs/mcp-support.md +11 -0
- package/dist/docs/mcp-support.zh.md +7 -0
- package/dist/docs/team_mgmt-toolset.md +5 -2
- package/dist/docs/team_mgmt-toolset.zh.md +4 -2
- package/dist/docs/tool-availability-protocol.md +4 -2
- package/dist/mcp/config.d.ts +1 -0
- package/dist/mcp/config.js +16 -0
- package/dist/mcp/supervisor.d.ts +7 -1
- package/dist/mcp/supervisor.js +298 -16
- package/dist/minds/load.js +5 -0
- package/dist/minds/system-prompt.d.ts +1 -0
- package/dist/minds/system-prompt.js +14 -6
- package/dist/tools/builtins.js +2 -0
- package/dist/tools/env.js +10 -58
- package/dist/tools/manual/render.js +4 -0
- package/dist/tools/mcp.d.ts +1 -0
- package/dist/tools/mcp.js +55 -5
- package/dist/tools/prompts/mcp_admin/en/errors.md +0 -14
- package/dist/tools/prompts/mcp_admin/en/index.md +5 -3
- package/dist/tools/prompts/mcp_admin/en/principles.md +11 -5
- package/dist/tools/prompts/mcp_admin/en/scenarios.md +19 -3
- package/dist/tools/prompts/mcp_admin/en/tools.md +85 -21
- package/dist/tools/prompts/mcp_admin/zh/errors.md +0 -14
- package/dist/tools/prompts/mcp_admin/zh/index.md +5 -3
- package/dist/tools/prompts/mcp_admin/zh/principles.md +11 -5
- package/dist/tools/prompts/mcp_admin/zh/scenarios.md +19 -3
- package/dist/tools/prompts/mcp_admin/zh/tools.md +85 -21
- package/dist/tools/prompts/os/en/errors.md +0 -28
- package/dist/tools/prompts/os/en/scenarios.md +1 -1
- package/dist/tools/prompts/os/en/tools.md +8 -17
- package/dist/tools/prompts/os/zh/errors.md +0 -28
- package/dist/tools/prompts/os/zh/scenarios.md +1 -1
- package/dist/tools/prompts/os/zh/tools.md +8 -17
- package/dist/tools/registry.d.ts +5 -0
- package/dist/tools/team_mgmt-mcp-manual.d.ts +2 -2
- package/dist/tools/team_mgmt-mcp-manual.js +57 -16
- package/dist/tools/team_mgmt.js +4 -4
- package/package.json +3 -3
- package/webapp/dist/assets/{_basePickBy-B7M9Q0Fa.js → _basePickBy-Dnh413xT.js} +3 -3
- package/webapp/dist/assets/_basePickBy-Dnh413xT.js.map +1 -0
- package/webapp/dist/assets/{_baseUniq-DAeYoL6j.js → _baseUniq-DWzYqpN_.js} +2 -2
- package/webapp/dist/assets/_baseUniq-DWzYqpN_.js.map +1 -0
- package/webapp/dist/assets/{arc-Bh4nDbNR.js → arc-vfBkNCOx.js} +2 -2
- package/webapp/dist/assets/arc-vfBkNCOx.js.map +1 -0
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CxqmdsIm.js → architectureDiagram-VXUJARFQ-DiUEBXOa.js} +8 -26
- package/webapp/dist/assets/architectureDiagram-VXUJARFQ-DiUEBXOa.js.map +1 -0
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-CxIWLtpt.js → blockDiagram-VD42YOAC-BqK1KM2m.js} +170 -187
- package/webapp/dist/assets/blockDiagram-VD42YOAC-BqK1KM2m.js.map +1 -0
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-1qErOIgG.js → c4Diagram-YG6GDRKO-ClHNu1Uo.js} +4 -4
- package/webapp/dist/assets/c4Diagram-YG6GDRKO-ClHNu1Uo.js.map +1 -0
- package/webapp/dist/assets/{channel-DkgZHNUe.js → channel-BbWLVc8W.js} +2 -2
- package/webapp/dist/assets/channel-BbWLVc8W.js.map +1 -0
- package/webapp/dist/assets/{chunk-4BX2VUAB-BmdMbU9v.js → chunk-4BX2VUAB-CItdSmZH.js} +2 -2
- package/webapp/dist/assets/chunk-4BX2VUAB-CItdSmZH.js.map +1 -0
- package/webapp/dist/assets/{chunk-55IACEB6-D6LDTDBy.js → chunk-55IACEB6-DSCX9WCf.js} +2 -2
- package/webapp/dist/assets/chunk-55IACEB6-DSCX9WCf.js.map +1 -0
- package/webapp/dist/assets/{chunk-WL4C6EOR-B-Pk44be.js → chunk-B4BG7PRW-5CRXFeD9.js} +121 -171
- package/webapp/dist/assets/chunk-B4BG7PRW-5CRXFeD9.js.map +1 -0
- package/webapp/dist/assets/{chunk-NQ4KR5QH-wlvxalE3.js → chunk-DI55MBZ5-CRMf6XZu.js} +7 -9
- package/webapp/dist/assets/chunk-DI55MBZ5-CRMf6XZu.js.map +1 -0
- package/webapp/dist/assets/{chunk-FMBD7UC4-C-BdCe4C.js → chunk-FMBD7UC4-BJ1vT2se.js} +2 -2
- package/webapp/dist/assets/chunk-FMBD7UC4-BJ1vT2se.js.map +1 -0
- package/webapp/dist/assets/{chunk-KX2RTZJC-CA7sDJO5.js → chunk-QN33PNHL-CGyezTSD.js} +2 -2
- package/webapp/dist/assets/chunk-QN33PNHL-CGyezTSD.js.map +1 -0
- package/webapp/dist/assets/{chunk-QZHKN3VN-Bo1VMcph.js → chunk-QZHKN3VN-9xs15j8C.js} +2 -2
- package/webapp/dist/assets/chunk-QZHKN3VN-9xs15j8C.js.map +1 -0
- package/webapp/dist/assets/{chunk-JSJVCQXG-WA_BLIm9.js → chunk-TZMSLE5B-D2g6Tj7Z.js} +6 -14
- package/webapp/dist/assets/chunk-TZMSLE5B-D2g6Tj7Z.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-BqKuyb49.js → classDiagram-2ON5EDUG-BQFGGJNm.js} +6 -7
- package/webapp/dist/assets/classDiagram-2ON5EDUG-BQFGGJNm.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-BqKuyb49.js → classDiagram-v2-WZHVMYZB-BQFGGJNm.js} +6 -7
- package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-BQFGGJNm.js.map +1 -0
- package/webapp/dist/assets/{clone-BX5z8WVZ.js → clone-DOfPd4cz.js} +2 -2
- package/webapp/dist/assets/clone-DOfPd4cz.js.map +1 -0
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-B-s11SgN.js → cose-bilkent-S5V4N54A-BYN-vqm8.js} +2 -2
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-BYN-vqm8.js.map +1 -0
- package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-DmQFV2qK.js → dagre-6UL2VRFP-ClEaFABE.js} +7 -7
- package/webapp/dist/assets/dagre-6UL2VRFP-ClEaFABE.js.map +1 -0
- package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-QRaBfST8.js → diagram-PSM6KHXK-CM4hLE_0.js} +10 -10
- package/webapp/dist/assets/diagram-PSM6KHXK-CM4hLE_0.js.map +1 -0
- package/webapp/dist/assets/{diagram-IFDJBPK2-lrWn1Obo.js → diagram-QEK2KX5R-BZjGFX-2.js} +8 -9
- package/webapp/dist/assets/diagram-QEK2KX5R-BZjGFX-2.js.map +1 -0
- package/webapp/dist/assets/{diagram-P4PSJMXO-sTU7Hh-Y.js → diagram-S2PKOQOG-Bvw01OOG.js} +8 -8
- package/webapp/dist/assets/diagram-S2PKOQOG-Bvw01OOG.js.map +1 -0
- package/webapp/dist/assets/{erDiagram-INFDFZHY-Cx6jc9Wq.js → erDiagram-Q2GNP2WA-ctHu5zQL.js} +75 -96
- package/webapp/dist/assets/erDiagram-Q2GNP2WA-ctHu5zQL.js.map +1 -0
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-DfGI49Dz.js → flowDiagram-NV44I4VS-m7ofIhri.js} +81 -98
- package/webapp/dist/assets/flowDiagram-NV44I4VS-m7ofIhri.js.map +1 -0
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-nrcHWWaM.js → ganttDiagram-JELNMOA3-D9wS5Veb.js} +3 -28
- package/webapp/dist/assets/ganttDiagram-JELNMOA3-D9wS5Veb.js.map +1 -0
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js → gitGraphDiagram-V2S2FVAM-B86qqJx7.js} +46 -38
- package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-B86qqJx7.js.map +1 -0
- package/webapp/dist/assets/graph-u844GGQC.js +425 -0
- package/webapp/dist/assets/graph-u844GGQC.js.map +1 -0
- package/webapp/dist/assets/{index-DZFkLLVz.css → index-BGdI3lWA.css} +1 -1
- package/webapp/dist/assets/{index--fy89xGh.js → index-tinPEZoH.js} +1059 -1034
- package/webapp/dist/assets/{index--fy89xGh.js.map → index-tinPEZoH.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-PIoZHr7s.js → infoDiagram-HS3SLOUP-DwRPUctP.js} +7 -7
- package/webapp/dist/assets/infoDiagram-HS3SLOUP-DwRPUctP.js.map +1 -0
- package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-C2qidjQ5.js → journeyDiagram-XKPGCS4Q-B91ZO-ec.js} +5 -5
- package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-B91ZO-ec.js.map +1 -0
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Du0TC8WS.js → kanban-definition-3W4ZIXB7-CoogrZ07.js} +3 -5
- package/webapp/dist/assets/kanban-definition-3W4ZIXB7-CoogrZ07.js.map +1 -0
- package/webapp/dist/assets/{layout-VmEo1OEB.js → layout-BrzQmqFJ.js} +5 -5
- package/webapp/dist/assets/layout-BrzQmqFJ.js.map +1 -0
- package/webapp/dist/assets/{linear-B662YHAc.js → linear-C6H7K9Zy.js} +2 -2
- package/webapp/dist/assets/linear-C6H7K9Zy.js.map +1 -0
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-D7arZj95.js → mindmap-definition-VGOIOE7T-UDHZQkNZ.js} +5 -7
- package/webapp/dist/assets/mindmap-definition-VGOIOE7T-UDHZQkNZ.js.map +1 -0
- package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DvjPP4PA.js → pieDiagram-ADFJNKIX-M81uyQ1J.js} +8 -8
- package/webapp/dist/assets/pieDiagram-ADFJNKIX-M81uyQ1J.js.map +1 -0
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-B_JUGMj_.js → quadrantDiagram-AYHSOK5B-ClzIh9Gb.js} +3 -3
- package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-ClzIh9Gb.js.map +1 -0
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-DF0mpvE3.js → requirementDiagram-UZGBJVZJ-DLK3A-pn.js} +6 -16
- package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-DLK3A-pn.js.map +1 -0
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-CoXlxv00.js → sankeyDiagram-TZEHDZUN-CYqju8I1.js} +2 -2
- package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-CYqju8I1.js.map +1 -0
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DYqT5Pg7.js → sequenceDiagram-WL72ISMW-2guv6eOd.js} +201 -601
- package/webapp/dist/assets/sequenceDiagram-WL72ISMW-2guv6eOd.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-D9b1mN8-.js → stateDiagram-FKZM4ZOC-iujqSp0X.js} +9 -9
- package/webapp/dist/assets/stateDiagram-FKZM4ZOC-iujqSp0X.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DNzgudL_.js → stateDiagram-v2-4FDKWEC3-BxzY81ky.js} +5 -5
- package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-BxzY81ky.js.map +1 -0
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-CkyKUY7A.js → timeline-definition-IT6M3QCI-DjCFSC8d.js} +3 -3
- package/webapp/dist/assets/timeline-definition-IT6M3QCI-DjCFSC8d.js.map +1 -0
- package/webapp/dist/assets/{treemap-KZPCXAKY-CZd09kF-.js → treemap-GDKQZRPO-iaBzDWCP.js} +24 -37
- package/webapp/dist/assets/treemap-GDKQZRPO-iaBzDWCP.js.map +1 -0
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BRwRloPc.js → xychartDiagram-PRI3JC2R-R6Jl1c89.js} +4 -4
- package/webapp/dist/assets/xychartDiagram-PRI3JC2R-R6Jl1c89.js.map +1 -0
- package/webapp/dist/index.html +2 -2
- package/webapp/dist/assets/_basePickBy-B7M9Q0Fa.js.map +0 -1
- package/webapp/dist/assets/_baseUniq-DAeYoL6j.js.map +0 -1
- package/webapp/dist/assets/arc-Bh4nDbNR.js.map +0 -1
- package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-CxqmdsIm.js.map +0 -1
- package/webapp/dist/assets/blockDiagram-WCTKOSBZ-CxIWLtpt.js.map +0 -1
- package/webapp/dist/assets/c4Diagram-IC4MRINW-1qErOIgG.js.map +0 -1
- package/webapp/dist/assets/channel-DkgZHNUe.js.map +0 -1
- package/webapp/dist/assets/chunk-4BX2VUAB-BmdMbU9v.js.map +0 -1
- package/webapp/dist/assets/chunk-55IACEB6-D6LDTDBy.js.map +0 -1
- package/webapp/dist/assets/chunk-FMBD7UC4-C-BdCe4C.js.map +0 -1
- package/webapp/dist/assets/chunk-JSJVCQXG-WA_BLIm9.js.map +0 -1
- package/webapp/dist/assets/chunk-KX2RTZJC-CA7sDJO5.js.map +0 -1
- package/webapp/dist/assets/chunk-NQ4KR5QH-wlvxalE3.js.map +0 -1
- package/webapp/dist/assets/chunk-QZHKN3VN-Bo1VMcph.js.map +0 -1
- package/webapp/dist/assets/chunk-WL4C6EOR-B-Pk44be.js.map +0 -1
- package/webapp/dist/assets/classDiagram-VBA2DB6C-BqKuyb49.js.map +0 -1
- package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-BqKuyb49.js.map +0 -1
- package/webapp/dist/assets/clone-BX5z8WVZ.js.map +0 -1
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-B-s11SgN.js.map +0 -1
- package/webapp/dist/assets/dagre-KLK3FWXG-DmQFV2qK.js.map +0 -1
- package/webapp/dist/assets/diagram-E7M64L7V-QRaBfST8.js.map +0 -1
- package/webapp/dist/assets/diagram-IFDJBPK2-lrWn1Obo.js.map +0 -1
- package/webapp/dist/assets/diagram-P4PSJMXO-sTU7Hh-Y.js.map +0 -1
- package/webapp/dist/assets/erDiagram-INFDFZHY-Cx6jc9Wq.js.map +0 -1
- package/webapp/dist/assets/flowDiagram-PKNHOUZH-DfGI49Dz.js.map +0 -1
- package/webapp/dist/assets/ganttDiagram-A5KZAMGK-nrcHWWaM.js.map +0 -1
- package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js.map +0 -1
- package/webapp/dist/assets/graph-R5G-y8tB.js +0 -782
- package/webapp/dist/assets/graph-R5G-y8tB.js.map +0 -1
- package/webapp/dist/assets/infoDiagram-LFFYTUFH-PIoZHr7s.js.map +0 -1
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-oCM-LYk1.js +0 -966
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-oCM-LYk1.js.map +0 -1
- package/webapp/dist/assets/journeyDiagram-4ABVD52K-C2qidjQ5.js.map +0 -1
- package/webapp/dist/assets/kanban-definition-K7BYSVSG-Du0TC8WS.js.map +0 -1
- package/webapp/dist/assets/layout-VmEo1OEB.js.map +0 -1
- package/webapp/dist/assets/linear-B662YHAc.js.map +0 -1
- package/webapp/dist/assets/mindmap-definition-YRQLILUH-D7arZj95.js.map +0 -1
- package/webapp/dist/assets/pieDiagram-SKSYHLDU-DvjPP4PA.js.map +0 -1
- package/webapp/dist/assets/quadrantDiagram-337W2JSQ-B_JUGMj_.js.map +0 -1
- package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-DF0mpvE3.js.map +0 -1
- package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CoXlxv00.js.map +0 -1
- package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-DYqT5Pg7.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-RAJIS63D-D9b1mN8-.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-DNzgudL_.js.map +0 -1
- package/webapp/dist/assets/timeline-definition-YZTLITO2-CkyKUY7A.js.map +0 -1
- package/webapp/dist/assets/treemap-KZPCXAKY-CZd09kF-.js.map +0 -1
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-BxVF5Olo.js +0 -2487
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-BxVF5Olo.js.map +0 -1
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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.
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
retrieved_at: <获取时间戳>
|
|
104
|
+
ok: <环境变量名称>
|
|
105
|
+
prev: <之前的值或 (unset)>
|
|
106
|
+
next: <新的值>
|
|
78
107
|
```
|
|
79
108
|
|
|
80
|
-
|
|
109
|
+
### 6. env_unset
|
|
81
110
|
|
|
82
|
-
|
|
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
|
-
|
|
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
|
-
|
|
178
|
+
这些工具使用各自工具小节描述的简短文本返回格式:
|
|
113
179
|
|
|
114
|
-
- `
|
|
115
|
-
-
|
|
180
|
+
- 成功:以 `ok:` 开头
|
|
181
|
+
- 失败:以 `error:` 开头
|
|
116
182
|
|
|
117
183
|
错误时返回:
|
|
118
184
|
|
|
119
185
|
```yaml
|
|
120
|
-
|
|
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,16 +90,8 @@ Get environment variable.
|
|
|
90
90
|
|
|
91
91
|
**Returns:**
|
|
92
92
|
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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,16 +90,8 @@ stderr: <请求时返回 stderr 输出>
|
|
|
90
90
|
|
|
91
91
|
**返回:**
|
|
92
92
|
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
124
|
+
ok: <环境变量名称>
|
|
125
|
+
prev: <之前的值或 (unset)>
|
|
126
|
+
next: (unset)
|
|
136
127
|
```
|
|
137
128
|
|
|
138
129
|
## 使用示例
|
package/dist/tools/registry.d.ts
CHANGED
|
@@ -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 === '
|
|
160
|
+
: entry.status === 'disabled'
|
|
161
161
|
? language === 'zh'
|
|
162
|
-
? '
|
|
163
|
-
: '
|
|
164
|
-
:
|
|
165
|
-
? '
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
?
|
|
199
|
-
|
|
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'
|
|
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
|
|
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`
|
|
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)',
|
package/dist/tools/team_mgmt.js
CHANGED
|
@@ -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
|
|
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
|
|
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`
|
|
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:
|
|
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.
|
|
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.
|
|
56
|
-
"@longrun-ai/shell": "1.11.
|
|
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-
|
|
2
|
-
import {
|
|
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-
|
|
196
|
+
//# sourceMappingURL=_basePickBy-Dnh413xT.js.map
|