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
|
@@ -8,10 +8,11 @@ export type McpDeclaredToolsets = Readonly<{
|
|
|
8
8
|
kind: 'loaded';
|
|
9
9
|
declaredServerIds: ReadonlySet<string>;
|
|
10
10
|
invalidServerIds: ReadonlySet<string>;
|
|
11
|
+
disabledServerIds: ReadonlySet<string>;
|
|
11
12
|
}>;
|
|
12
13
|
export type ToolsetAuditItem = Readonly<{
|
|
13
14
|
toolsetName: string;
|
|
14
|
-
status: 'registered' | 'mcp_declared_unloaded' | 'mcp_declared_invalid' | 'missing';
|
|
15
|
+
status: 'registered' | 'mcp_declared_unloaded' | 'mcp_declared_invalid' | 'mcp_declared_disabled' | 'missing';
|
|
15
16
|
}>;
|
|
16
17
|
export type ToolsetAuditReport = Readonly<{
|
|
17
18
|
mcp: McpDeclaredToolsets;
|
|
@@ -45,6 +45,7 @@ async function readMcpDeclaredToolsets() {
|
|
|
45
45
|
kind: 'loaded',
|
|
46
46
|
declaredServerIds: new Set(parsed.serverIdsInYamlOrder),
|
|
47
47
|
invalidServerIds: new Set(parsed.invalidServers.map((s) => s.serverId)),
|
|
48
|
+
disabledServerIds: new Set(parsed.disabledServerIdsInYamlOrder),
|
|
48
49
|
};
|
|
49
50
|
}
|
|
50
51
|
function buildToolsetAuditReport(params) {
|
|
@@ -58,20 +59,28 @@ function buildToolsetAuditReport(params) {
|
|
|
58
59
|
const explicitToolsets = listExplicitToolsets(member);
|
|
59
60
|
const items = [];
|
|
60
61
|
for (const toolsetName of explicitToolsets) {
|
|
61
|
-
if (registeredToolsets.has(toolsetName)) {
|
|
62
|
-
items.push({ toolsetName, status: 'registered' });
|
|
63
|
-
continue;
|
|
64
|
-
}
|
|
65
62
|
if (params.mcp.kind === 'loaded' && params.mcp.declaredServerIds.has(toolsetName)) {
|
|
66
63
|
if (params.mcp.invalidServerIds.has(toolsetName)) {
|
|
67
64
|
items.push({ toolsetName, status: 'mcp_declared_invalid' });
|
|
68
65
|
warnings.push(`@${member.id}: toolset '${toolsetName}' is declared in mcp.yaml but server config is invalid.`);
|
|
69
66
|
}
|
|
67
|
+
else if (params.mcp.disabledServerIds.has(toolsetName)) {
|
|
68
|
+
items.push({ toolsetName, status: 'mcp_declared_disabled' });
|
|
69
|
+
}
|
|
70
70
|
else {
|
|
71
|
-
|
|
71
|
+
if (registeredToolsets.has(toolsetName)) {
|
|
72
|
+
items.push({ toolsetName, status: 'registered' });
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
items.push({ toolsetName, status: 'mcp_declared_unloaded' });
|
|
76
|
+
}
|
|
72
77
|
}
|
|
73
78
|
continue;
|
|
74
79
|
}
|
|
80
|
+
if (registeredToolsets.has(toolsetName)) {
|
|
81
|
+
items.push({ toolsetName, status: 'registered' });
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
75
84
|
items.push({ toolsetName, status: 'missing' });
|
|
76
85
|
warnings.push(`@${member.id}: toolset '${toolsetName}' is neither registered nor declared in mcp.yaml.`);
|
|
77
86
|
}
|
|
@@ -91,6 +100,7 @@ function countByStatus(report) {
|
|
|
91
100
|
registered: 0,
|
|
92
101
|
mcp_declared_unloaded: 0,
|
|
93
102
|
mcp_declared_invalid: 0,
|
|
103
|
+
mcp_declared_disabled: 0,
|
|
94
104
|
missing: 0,
|
|
95
105
|
};
|
|
96
106
|
for (const memberReport of report.byMember) {
|
|
@@ -107,6 +117,8 @@ function statusLabel(status) {
|
|
|
107
117
|
return 'DEFERRED';
|
|
108
118
|
if (status === 'mcp_declared_invalid')
|
|
109
119
|
return 'INVALID';
|
|
120
|
+
if (status === 'mcp_declared_disabled')
|
|
121
|
+
return 'DISABLED';
|
|
110
122
|
return 'MISS';
|
|
111
123
|
}
|
|
112
124
|
function hasHardToolsetAuditFailures(report) {
|
|
@@ -125,12 +137,12 @@ function printToolsetAudit(report, options) {
|
|
|
125
137
|
process.stdout.write('- MCP config: invalid (`.minds/mcp.yaml` parse/read failed)\n');
|
|
126
138
|
}
|
|
127
139
|
else {
|
|
128
|
-
process.stdout.write(`- MCP config: loaded (declared servers: ${report.mcp.declaredServerIds.size}, invalid server configs: ${report.mcp.invalidServerIds.size})\n`);
|
|
140
|
+
process.stdout.write(`- MCP config: loaded (declared servers: ${report.mcp.declaredServerIds.size}, invalid server configs: ${report.mcp.invalidServerIds.size}, disabled servers: ${report.mcp.disabledServerIds.size})\n`);
|
|
129
141
|
}
|
|
130
|
-
process.stdout.write(`- Summary: ${counts.registered} OK, ${counts.mcp_declared_unloaded} DEFERRED, ${counts.mcp_declared_invalid} INVALID, ${counts.missing} MISS\n`);
|
|
142
|
+
process.stdout.write(`- Summary: ${counts.registered} OK, ${counts.mcp_declared_unloaded} DEFERRED, ${counts.mcp_declared_disabled} DISABLED, ${counts.mcp_declared_invalid} INVALID, ${counts.missing} MISS\n`);
|
|
131
143
|
if (options?.includeTransientLegend !== false) {
|
|
132
144
|
process.stdout.write('- Status notes: `DEFERRED` means the toolset is declared via `.minds/mcp.yaml` but is not currently loaded into the registry. This is often temporary (for example MCP server down/unreachable); if the MCP service recovers, rerun validation and it may clear without editing `team.yaml`.\n');
|
|
133
|
-
process.stdout.write('- Status notes: `INVALID` means the MCP server declaration itself is invalid and needs a config fix. `MISS` means the toolset is neither registered nor declared in `.minds/mcp.yaml`.\n');
|
|
145
|
+
process.stdout.write('- Status notes: `DISABLED` means the MCP server has `enabled: false`; it remains declared but intentionally exposes zero tools until `mcp_restart` enables it. `INVALID` means the MCP server declaration itself is invalid and needs a config fix. `MISS` means the toolset is neither registered nor declared in `.minds/mcp.yaml`.\n');
|
|
134
146
|
}
|
|
135
147
|
if (report.byMember.length === 0) {
|
|
136
148
|
process.stdout.write('- Members: none\n');
|
|
@@ -8,10 +8,10 @@ function printUsage() {
|
|
|
8
8
|
console.log('Usage: dominds validate_team_def [<member-id>]');
|
|
9
9
|
console.log('');
|
|
10
10
|
console.log('Validate explicit toolset declarations in `.minds/team.yaml` against the current toolset registry and `.minds/mcp.yaml` declarations.');
|
|
11
|
-
console.log('MCP-declared but currently unloaded toolsets are reported as `DEFERRED
|
|
11
|
+
console.log('MCP-declared but currently unloaded toolsets are reported as `DEFERRED`; disabled MCP toolsets are reported as `DISABLED` when `enabled: false` is set in `.minds/mcp.yaml`.');
|
|
12
12
|
console.log('');
|
|
13
13
|
console.log('Exit codes:');
|
|
14
|
-
console.log(' 0 No hard definition errors (`OK` / `DEFERRED` only)');
|
|
14
|
+
console.log(' 0 No hard definition errors (`OK` / `DEFERRED` / `DISABLED` only)');
|
|
15
15
|
console.log(' 2 Hard definition errors found (`INVALID` / `MISS`)');
|
|
16
16
|
console.log('');
|
|
17
17
|
console.log('Examples:');
|
|
@@ -70,7 +70,7 @@ async function main() {
|
|
|
70
70
|
mcp: await (0, team_definition_audit_1.readMcpDeclaredToolsets)(),
|
|
71
71
|
});
|
|
72
72
|
process.stdout.write('# Team Definition Validation\n');
|
|
73
|
-
process.stdout.write('This command checks explicit toolset references in `.minds/team.yaml`. `DEFERRED` usually means the toolset is declared through MCP but is not currently loaded;
|
|
73
|
+
process.stdout.write('This command checks explicit toolset references in `.minds/team.yaml`. `DEFERRED` usually means the toolset is declared through MCP but is not currently loaded; `DISABLED` means the server is intentionally `enabled: false` and exposes zero tools until `mcp_restart` enables it.\n');
|
|
74
74
|
(0, team_definition_audit_1.printToolsetAudit)(report, { heading: '## Definition Audit' });
|
|
75
75
|
if ((0, team_definition_audit_1.hasHardToolsetAuditFailures)(report)) {
|
|
76
76
|
process.exit(2);
|
package/dist/docs/mcp-support.md
CHANGED
|
@@ -98,6 +98,12 @@ Releasing:
|
|
|
98
98
|
|
|
99
99
|
- Agents should call `mcp_release({"serverId":"<serverId>"})` (from `mcp_admin`) to release the
|
|
100
100
|
leased runtime instance for the current dialog.
|
|
101
|
+
- `mcp_restart({"serverId":"<serverId>"})` enables a disabled server (`enabled: true`) before
|
|
102
|
+
starting it. After a successful restart, Dominds replaces the global runtime and clears all dialog
|
|
103
|
+
leases on the old runtime.
|
|
104
|
+
- `mcp_disable({"serverId":"<serverId>"})` disables a server (`enabled: false`) and stops any loaded
|
|
105
|
+
runtime/leases. Disabled servers remain visible as zero-tool MCP toolsets, and their configured
|
|
106
|
+
manual remains readable with an explicit disabled notice.
|
|
101
107
|
|
|
102
108
|
### Shared behavior (`truely-stateless: true`)
|
|
103
109
|
|
|
@@ -397,6 +403,11 @@ This is a Dominds-oriented schema. It is intentionally small and should be easy
|
|
|
397
403
|
version: 1
|
|
398
404
|
servers:
|
|
399
405
|
<serverId>:
|
|
406
|
+
# Optional operational switch. `mcp_disable` writes this to false; `mcp_restart`
|
|
407
|
+
# writes it back to true before starting the server.
|
|
408
|
+
# Disabled servers start no runtime and expose a zero-tool toolset/manual marked disabled.
|
|
409
|
+
enabled: true
|
|
410
|
+
|
|
400
411
|
# Concurrency model (IMPORTANT)
|
|
401
412
|
# - Default false: per-dialog client leasing (safer for stateful servers)
|
|
402
413
|
# - True: shared client across dialogs (only for servers that are truly stateless)
|
|
@@ -75,6 +75,8 @@ Dominds 的行为:
|
|
|
75
75
|
释放:
|
|
76
76
|
|
|
77
77
|
- 智能体应调用 `mcp_release({"serverId":"<serverId>"})`(来自 `mcp_admin`)来释放当前对话持有的租赁运行时实例。
|
|
78
|
+
- `mcp_restart({"serverId":"<serverId>"})` 会先启用被禁用的 server(`enabled: true`),再启动它。成功重启后,Dominds 会替换全局 runtime,并清理旧 runtime 上的全部对话 lease。
|
|
79
|
+
- `mcp_disable({"serverId":"<serverId>"})` 会禁用 server(`enabled: false`),并停止已加载 runtime/lease。禁用 server 仍作为 0 工具 MCP toolset 可见,已配置手册也会带明确 disabled 提示继续可读。
|
|
78
80
|
|
|
79
81
|
### 共享行为(`truely-stateless: true`)
|
|
80
82
|
|
|
@@ -322,6 +324,11 @@ headers:
|
|
|
322
324
|
version: 1
|
|
323
325
|
servers:
|
|
324
326
|
<serverId>:
|
|
327
|
+
# 可选运维开关。`mcp_disable` 会把它写成 false;`mcp_restart`
|
|
328
|
+
# 会在启动前写回 true。
|
|
329
|
+
# disabled server 不启动 runtime,并暴露为带 disabled 标记的 0 工具 toolset/手册。
|
|
330
|
+
enabled: true
|
|
331
|
+
|
|
325
332
|
# 并发模型(重要)
|
|
326
333
|
# - 默认 false:每对话客户端租赁(对有状态服务器更安全)
|
|
327
334
|
# - True:跨对话共享客户端(仅适用于真正无状态的服务器)
|
|
@@ -384,7 +384,9 @@ Notes:
|
|
|
384
384
|
|
|
385
385
|
- MCP tool names are global across all toolsets (built-in + MCP). Collisions cause tools to be
|
|
386
386
|
skipped and should surface via Problems + logs.
|
|
387
|
-
- `mcp_admin` is a built-in toolset
|
|
387
|
+
- `mcp_admin` is a built-in toolset for MCP operations: `mcp_restart` enables/restarts a server,
|
|
388
|
+
`mcp_disable` disables a server while keeping its zero-tool toolset/manual visible, and
|
|
389
|
+
`mcp_release` releases the current dialog lease.
|
|
388
390
|
- Optional manual information can live in `.minds/mcp.yaml` at `servers.<serverId>.manual`:
|
|
389
391
|
- `contentFile`: the topic-file directory prefix for the formal runtime manual; the final `man({ "toolsetId": "<serverId>" })` content shown to the LLM is loaded from here
|
|
390
392
|
- `content` / `sections`: inline team-management guidance shown in the `team_mgmt` MCP chapter (`sections` supports `[{ title, content }]` or `{ "<title>": "<content>" }`)
|
|
@@ -635,4 +637,5 @@ This avoids needing to grant full rtws access to configure the team.
|
|
|
635
637
|
- Confirm the teammate is granted the relevant `<serverId>` toolset in `.minds/team.yaml`.
|
|
636
638
|
- **MCP server keeps failing to (re)load**:
|
|
637
639
|
- Check Problems details (missing env var, invalid tool name, collisions, connection errors).
|
|
638
|
-
- After fixing config, use `mcp_restart` (from `mcp_admin`)
|
|
640
|
+
- After fixing config, use `mcp_restart` (from `mcp_admin`) to enable/restart the server. Use
|
|
641
|
+
`mcp_disable` to disable it while keeping the configured manual visible as a zero-tool toolset.
|
|
@@ -321,7 +321,8 @@ members:
|
|
|
321
321
|
注意:
|
|
322
322
|
|
|
323
323
|
- MCP 工具名称在所有工具集(内置 + MCP)中是全局的。冲突导致工具被跳过,应通过问题 + 日志暴露
|
|
324
|
-
- `mcp_admin`
|
|
324
|
+
- `mcp_admin` 是 MCP 运维内置工具集:`mcp_restart` 启用/重启 server,`mcp_disable` 禁用
|
|
325
|
+
server 并保留 0 工具 toolset/手册可见性,`mcp_release` 释放当前对话 lease
|
|
325
326
|
- 可选手册:可在 `.minds/mcp.yaml` 的 `servers.<serverId>.manual` 提供手册相关信息:
|
|
326
327
|
- `contentFile`:正式 runtime 手册的 topic 文件目录前缀;`man({ "toolsetId": "<serverId>" })` 最终给 LLM 看的正文从这里加载
|
|
327
328
|
- `content` / `sections`:补充给 `team_mgmt` MCP 章节看的 inline 团队管理说明(`sections` 支持 `[{ title, content }]` 或 `{ "<title>": "<content>" }`)
|
|
@@ -540,4 +541,5 @@ members:
|
|
|
540
541
|
- 确认队友在 `.minds/team.yaml` 中被授予了相关的 `<serverId>` 工具集
|
|
541
542
|
- **MCP 服务器持续 (re)load 失败**:
|
|
542
543
|
- 检查问题详细信息(缺少 env 变量、无效的工具名称、冲突、连接错误)
|
|
543
|
-
- 修复配置后,使用 `mcp_admin` 中的 `mcp_restart`
|
|
544
|
+
- 修复配置后,使用 `mcp_admin` 中的 `mcp_restart` 启用/重启 server。若需禁用,使用
|
|
545
|
+
`mcp_disable`,它会保留 0 工具 toolset 和已配置手册可见性
|
|
@@ -79,7 +79,8 @@ Non-goals:
|
|
|
79
79
|
Update triggers:
|
|
80
80
|
|
|
81
81
|
- `.minds/mcp.yaml` reload
|
|
82
|
-
- `mcp_restart`
|
|
82
|
+
- `mcp_restart` (also writes `enabled: true` when a configured MCP server is disabled)
|
|
83
|
+
- `mcp_disable` (writes `enabled: false`; the server remains visible as a zero-tool toolset/manual)
|
|
83
84
|
- MCP collision-resolution re-registration
|
|
84
85
|
|
|
85
86
|
### 2. Runtime Lease Protocol
|
|
@@ -105,7 +106,8 @@ Update triggers:
|
|
|
105
106
|
|
|
106
107
|
- first MCP tool call acquires a lease
|
|
107
108
|
- `mcp_release`
|
|
108
|
-
-
|
|
109
|
+
- successful `mcp_restart` tears old-runtime leases down
|
|
110
|
+
- `mcp_disable` tears loaded runtime leases down
|
|
109
111
|
|
|
110
112
|
### 3. Member Tool-Binding Protocol
|
|
111
113
|
|
package/dist/mcp/config.d.ts
CHANGED
package/dist/mcp/config.js
CHANGED
|
@@ -26,6 +26,7 @@ function parseMcpYaml(rawText) {
|
|
|
26
26
|
invalidServers: res.invalidServers,
|
|
27
27
|
serverIdsInYamlOrder: res.serverIdsInYamlOrder,
|
|
28
28
|
validServerIdsInYamlOrder: res.validServerIdsInYamlOrder,
|
|
29
|
+
disabledServerIdsInYamlOrder: res.disabledServerIdsInYamlOrder,
|
|
29
30
|
rawText,
|
|
30
31
|
};
|
|
31
32
|
}
|
|
@@ -45,9 +46,14 @@ function parseWorkspaceConfig(value) {
|
|
|
45
46
|
const invalidServers = [];
|
|
46
47
|
const serverIdsInYamlOrder = [];
|
|
47
48
|
const validServerIdsInYamlOrder = [];
|
|
49
|
+
const disabledServerIdsInYamlOrder = [];
|
|
48
50
|
for (const [serverId, serverRaw] of Object.entries(serversRecord)) {
|
|
49
51
|
serverIdsInYamlOrder.push(serverId);
|
|
50
52
|
try {
|
|
53
|
+
if (isDisabledServerConfig(serverId, serverRaw)) {
|
|
54
|
+
disabledServerIdsInYamlOrder.push(serverId);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
51
57
|
servers[serverId] = parseServerConfig(serverId, serverRaw);
|
|
52
58
|
validServerIdsInYamlOrder.push(serverId);
|
|
53
59
|
}
|
|
@@ -63,8 +69,18 @@ function parseWorkspaceConfig(value) {
|
|
|
63
69
|
invalidServers,
|
|
64
70
|
serverIdsInYamlOrder,
|
|
65
71
|
validServerIdsInYamlOrder,
|
|
72
|
+
disabledServerIdsInYamlOrder,
|
|
66
73
|
};
|
|
67
74
|
}
|
|
75
|
+
function isDisabledServerConfig(serverId, value) {
|
|
76
|
+
const obj = asRecord(value, `servers.${serverId}`);
|
|
77
|
+
const enabled = obj.enabled;
|
|
78
|
+
if (enabled === undefined || enabled === true)
|
|
79
|
+
return false;
|
|
80
|
+
if (enabled === false)
|
|
81
|
+
return true;
|
|
82
|
+
throw new Error(`Invalid mcp.yaml: servers.${serverId}.enabled must be a boolean`);
|
|
83
|
+
}
|
|
68
84
|
function parseServerConfig(serverId, value) {
|
|
69
85
|
const obj = asRecord(value, `servers.${serverId}`);
|
|
70
86
|
const truelyStatelessVal = obj['truely-stateless'];
|
package/dist/mcp/supervisor.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { McpStreamableHttpServerConfig } from './config';
|
|
|
2
2
|
export type McpDeclaredServerRuntimeStatus = Readonly<{
|
|
3
3
|
serverId: string;
|
|
4
4
|
transport: 'stdio' | 'streamable_http' | 'invalid' | 'unknown';
|
|
5
|
-
status: 'loaded' | 'temporarily_unavailable' | 'config_invalid';
|
|
5
|
+
status: 'loaded' | 'temporarily_unavailable' | 'config_invalid' | 'disabled';
|
|
6
6
|
errorText?: string;
|
|
7
7
|
}>;
|
|
8
8
|
export declare function isMcpToolsetLeasedToDialog(serverId: string, dialogKey: string): boolean;
|
|
@@ -26,6 +26,12 @@ export declare function requestMcpServerRestart(serverId: string): Promise<{
|
|
|
26
26
|
ok: false;
|
|
27
27
|
errorText: string;
|
|
28
28
|
}>;
|
|
29
|
+
export declare function requestMcpServerDisable(serverId: string): Promise<{
|
|
30
|
+
ok: true;
|
|
31
|
+
} | {
|
|
32
|
+
ok: false;
|
|
33
|
+
errorText: string;
|
|
34
|
+
}>;
|
|
29
35
|
export declare function requestMcpConfigReload(reason?: string): Promise<{
|
|
30
36
|
ok: true;
|
|
31
37
|
} | {
|