dominds 1.18.2 → 1.19.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access-control.js +6 -6
- package/dist/apps/runtime.d.ts +2 -2
- package/dist/apps/runtime.js +28 -28
- package/dist/apps-host/client.d.ts +1 -1
- package/dist/apps-host/host.js +7 -7
- package/dist/apps-host/ipc-types.d.ts +2 -2
- package/dist/apps-host/ipc-types.js +10 -10
- package/dist/cli/read.d.ts +0 -1
- package/dist/cli/read.js +1 -6
- 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/dialog-display-state.d.ts +6 -6
- package/dist/dialog-display-state.js +46 -46
- package/dist/dialog-factory.d.ts +12 -12
- package/dist/dialog-factory.js +33 -30
- package/dist/dialog-fork.d.ts +2 -2
- package/dist/dialog-fork.js +140 -115
- package/dist/dialog-global-registry.d.ts +5 -5
- package/dist/dialog-global-registry.js +11 -11
- package/dist/dialog-instance-registry.d.ts +3 -3
- package/dist/dialog-instance-registry.js +52 -41
- package/dist/dialog.d.ts +100 -113
- package/dist/dialog.js +274 -229
- package/dist/docs/agent-priming.md +5 -5
- package/dist/docs/agent-priming.zh.md +5 -5
- package/dist/docs/app-constitution.md +1 -1
- package/dist/docs/app-constitution.zh.md +1 -1
- package/dist/docs/cli-usage.md +1 -1
- package/dist/docs/cli-usage.zh.md +1 -1
- package/dist/docs/design.md +14 -14
- package/dist/docs/design.zh.md +14 -14
- package/dist/docs/dialog-persistence.md +58 -58
- package/dist/docs/dialog-persistence.zh.md +61 -61
- package/dist/docs/dialog-system.md +363 -367
- package/dist/docs/dialog-system.zh.md +355 -357
- package/dist/docs/diligence-push.md +18 -18
- package/dist/docs/diligence-push.zh.md +17 -17
- package/dist/docs/dominds-agent-collaboration.zh.md +3 -3
- package/dist/docs/dominds-terminology.md +46 -47
- package/dist/docs/encapsulated-taskdoc.md +4 -4
- package/dist/docs/encapsulated-taskdoc.zh.md +3 -3
- package/dist/docs/fbr.md +30 -30
- package/dist/docs/fbr.zh.md +15 -15
- package/dist/docs/i18n.md +2 -2
- package/dist/docs/i18n.zh.md +2 -2
- package/dist/docs/mcp-support.md +16 -4
- package/dist/docs/mcp-support.zh.md +10 -2
- package/dist/docs/memory-system.md +4 -4
- package/dist/docs/memory-system.zh.md +1 -1
- package/dist/docs/mottos.md +1 -1
- package/dist/docs/mottos.zh.md +1 -1
- package/dist/docs/q4h.md +3 -3
- package/dist/docs/q4h.zh.md +1 -1
- package/dist/docs/roadmap.md +2 -2
- package/dist/docs/team_mgmt-toolset.md +16 -5
- package/dist/docs/team_mgmt-toolset.zh.md +13 -4
- package/dist/docs/tellask-collab.md +18 -18
- package/dist/docs/tellask-collab.zh.md +8 -8
- package/dist/docs/tellask-revive-context-refactor.zh.md +591 -0
- package/dist/docs/tool-availability-protocol.md +4 -2
- package/dist/evt-registry.d.ts +1 -2
- package/dist/evt-registry.js +2 -7
- package/dist/llm/gen/mock.js +9 -0
- package/dist/llm/kernel-driver/context.d.ts +1 -2
- package/dist/llm/kernel-driver/context.js +12 -26
- package/dist/llm/kernel-driver/drive.js +99 -75
- package/dist/llm/kernel-driver/engine.d.ts +2 -2
- package/dist/llm/kernel-driver/engine.js +10 -10
- package/dist/llm/kernel-driver/fbr.js +6 -6
- package/dist/llm/kernel-driver/flow.d.ts +1 -1
- package/dist/llm/kernel-driver/flow.js +129 -93
- package/dist/llm/kernel-driver/guardrails.js +4 -4
- package/dist/llm/kernel-driver/index.d.ts +1 -1
- package/dist/llm/kernel-driver/index.js +2 -2
- package/dist/llm/kernel-driver/loop.js +30 -30
- package/dist/llm/kernel-driver/reply-guidance.js +47 -52
- package/dist/llm/kernel-driver/restore.d.ts +3 -3
- package/dist/llm/kernel-driver/restore.js +23 -28
- package/dist/llm/kernel-driver/runtime.d.ts +1 -1
- package/dist/llm/kernel-driver/runtime.js +1 -1
- package/dist/llm/kernel-driver/sideDialog-txn.d.ts +8 -0
- package/dist/llm/kernel-driver/{subdialog-txn.js → sideDialog-txn.js} +13 -13
- package/dist/llm/kernel-driver/{subdialog.d.ts → sideDialog.d.ts} +13 -13
- package/dist/llm/kernel-driver/{subdialog.js → sideDialog.js} +203 -170
- package/dist/llm/kernel-driver/tellask-special.d.ts +7 -3
- package/dist/llm/kernel-driver/tellask-special.js +474 -497
- package/dist/llm/kernel-driver/types.d.ts +25 -9
- package/dist/mcp/config.d.ts +2 -0
- package/dist/mcp/config.js +23 -2
- package/dist/mcp/supervisor.d.ts +9 -1
- package/dist/mcp/supervisor.js +300 -17
- package/dist/minds/builtin/pangu/persona.en.md +4 -4
- package/dist/minds/load.js +11 -6
- package/dist/minds/system-prompt-parts.d.ts +1 -1
- package/dist/minds/system-prompt-parts.js +12 -12
- package/dist/minds/system-prompt.d.ts +2 -1
- package/dist/minds/system-prompt.js +70 -62
- package/dist/persistence-errors.d.ts +1 -1
- package/dist/persistence.d.ts +126 -121
- package/dist/persistence.js +1190 -786
- package/dist/priming.d.ts +3 -3
- package/dist/priming.js +62 -61
- package/dist/recovery/reply-special.js +5 -5
- package/dist/runtime/driver-messages.d.ts +3 -2
- package/dist/runtime/driver-messages.js +68 -57
- package/dist/runtime/inter-dialog-format.d.ts +12 -10
- package/dist/runtime/inter-dialog-format.js +80 -35
- package/dist/runtime/interjection-pause-stop.js +1 -1
- package/dist/runtime/reply-prompt-copy.d.ts +7 -3
- package/dist/runtime/reply-prompt-copy.js +39 -14
- package/dist/server/api-routes.js +87 -83
- package/dist/server/static-server.js +1 -1
- package/dist/server/websocket-handler.js +163 -153
- package/dist/tool-availability.js +1 -1
- package/dist/tools/app-reminders.js +17 -4
- package/dist/tools/builtins.js +2 -0
- package/dist/tools/ctrl.js +5 -5
- 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/os.js +16 -16
- package/dist/tools/pending-tellask-reminder.js +20 -14
- package/dist/tools/prompts/control/en/index.md +1 -1
- package/dist/tools/prompts/control/en/principles.md +8 -8
- package/dist/tools/prompts/control/en/scenarios.md +7 -7
- package/dist/tools/prompts/control/en/tools.md +7 -7
- package/dist/tools/prompts/control/zh/principles.md +4 -4
- package/dist/tools/prompts/control/zh/scenarios.md +5 -5
- package/dist/tools/prompts/control/zh/tools.md +3 -3
- 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/prompts/team_memory/en/scenarios.md +1 -1
- package/dist/tools/prompts/team_memory/zh/scenarios.md +1 -1
- package/dist/tools/registry.d.ts +5 -0
- package/dist/tools/team_mgmt-manual.js +2 -2
- package/dist/tools/team_mgmt-mcp-manual.d.ts +2 -2
- package/dist/tools/team_mgmt-mcp-manual.js +67 -16
- package/dist/tools/team_mgmt.js +8 -8
- package/dist/utils/taskdoc.js +12 -12
- package/package.json +3 -3
- package/webapp/dist/assets/{_basePickBy-BPJaiZdW.js → _basePickBy-Dnh413xT.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-BPJaiZdW.js.map → _basePickBy-Dnh413xT.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-BEetT15i.js → _baseUniq-DWzYqpN_.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-BEetT15i.js.map → _baseUniq-DWzYqpN_.js.map} +1 -1
- package/webapp/dist/assets/{arc-Dm7Zf36f.js → arc-vfBkNCOx.js} +2 -2
- package/webapp/dist/assets/{arc-Dm7Zf36f.js.map → arc-vfBkNCOx.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-BpTPtkuo.js → architectureDiagram-VXUJARFQ-DiUEBXOa.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-BpTPtkuo.js.map → architectureDiagram-VXUJARFQ-DiUEBXOa.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-C8fLN0iu.js → blockDiagram-VD42YOAC-BqK1KM2m.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-C8fLN0iu.js.map → blockDiagram-VD42YOAC-BqK1KM2m.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-BpPr62CH.js → c4Diagram-YG6GDRKO-ClHNu1Uo.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-BpPr62CH.js.map → c4Diagram-YG6GDRKO-ClHNu1Uo.js.map} +1 -1
- package/webapp/dist/assets/{channel-EMYoPjW3.js → channel-BbWLVc8W.js} +2 -2
- package/webapp/dist/assets/{channel-EMYoPjW3.js.map → channel-BbWLVc8W.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-CefNtjWG.js → chunk-4BX2VUAB-CItdSmZH.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-CefNtjWG.js.map → chunk-4BX2VUAB-CItdSmZH.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-C_X7T43V.js → chunk-55IACEB6-DSCX9WCf.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-C_X7T43V.js.map → chunk-55IACEB6-DSCX9WCf.js.map} +1 -1
- package/webapp/dist/assets/{chunk-B4BG7PRW-BRe3_2oA.js → chunk-B4BG7PRW-5CRXFeD9.js} +5 -5
- package/webapp/dist/assets/{chunk-B4BG7PRW-BRe3_2oA.js.map → chunk-B4BG7PRW-5CRXFeD9.js.map} +1 -1
- package/webapp/dist/assets/{chunk-DI55MBZ5-CbvrsI_w.js → chunk-DI55MBZ5-CRMf6XZu.js} +4 -4
- package/webapp/dist/assets/{chunk-DI55MBZ5-CbvrsI_w.js.map → chunk-DI55MBZ5-CRMf6XZu.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-ORmtkrtS.js → chunk-FMBD7UC4-BJ1vT2se.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-ORmtkrtS.js.map → chunk-FMBD7UC4-BJ1vT2se.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QN33PNHL-LTAOVhWu.js → chunk-QN33PNHL-CGyezTSD.js} +2 -2
- package/webapp/dist/assets/{chunk-QN33PNHL-LTAOVhWu.js.map → chunk-QN33PNHL-CGyezTSD.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-ZoUM_4u5.js → chunk-QZHKN3VN-9xs15j8C.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-ZoUM_4u5.js.map → chunk-QZHKN3VN-9xs15j8C.js.map} +1 -1
- package/webapp/dist/assets/{chunk-TZMSLE5B-Gao4qrq7.js → chunk-TZMSLE5B-D2g6Tj7Z.js} +2 -2
- package/webapp/dist/assets/{chunk-TZMSLE5B-Gao4qrq7.js.map → chunk-TZMSLE5B-D2g6Tj7Z.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-2ON5EDUG-uha1vIGN.js → classDiagram-2ON5EDUG-BQFGGJNm.js} +6 -6
- package/webapp/dist/assets/{classDiagram-2ON5EDUG-uha1vIGN.js.map → classDiagram-2ON5EDUG-BQFGGJNm.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-uha1vIGN.js → classDiagram-v2-WZHVMYZB-BQFGGJNm.js} +6 -6
- package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-uha1vIGN.js.map → classDiagram-v2-WZHVMYZB-BQFGGJNm.js.map} +1 -1
- package/webapp/dist/assets/{clone-_9Ayb1Gp.js → clone-DOfPd4cz.js} +2 -2
- package/webapp/dist/assets/{clone-_9Ayb1Gp.js.map → clone-DOfPd4cz.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-C8wDw3NY.js → cose-bilkent-S5V4N54A-BYN-vqm8.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-C8wDw3NY.js.map → cose-bilkent-S5V4N54A-BYN-vqm8.js.map} +1 -1
- package/webapp/dist/assets/{dagre-6UL2VRFP-BUSeNot0.js → dagre-6UL2VRFP-ClEaFABE.js} +7 -7
- package/webapp/dist/assets/{dagre-6UL2VRFP-BUSeNot0.js.map → dagre-6UL2VRFP-ClEaFABE.js.map} +1 -1
- package/webapp/dist/assets/{diagram-PSM6KHXK-CMZAksVC.js → diagram-PSM6KHXK-CM4hLE_0.js} +8 -8
- package/webapp/dist/assets/{diagram-PSM6KHXK-CMZAksVC.js.map → diagram-PSM6KHXK-CM4hLE_0.js.map} +1 -1
- package/webapp/dist/assets/{diagram-QEK2KX5R-BQKoRtwy.js → diagram-QEK2KX5R-BZjGFX-2.js} +7 -7
- package/webapp/dist/assets/{diagram-QEK2KX5R-BQKoRtwy.js.map → diagram-QEK2KX5R-BZjGFX-2.js.map} +1 -1
- package/webapp/dist/assets/{diagram-S2PKOQOG-DjMG97kd.js → diagram-S2PKOQOG-Bvw01OOG.js} +7 -7
- package/webapp/dist/assets/{diagram-S2PKOQOG-DjMG97kd.js.map → diagram-S2PKOQOG-Bvw01OOG.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-Q2GNP2WA-BujwA137.js → erDiagram-Q2GNP2WA-ctHu5zQL.js} +5 -5
- package/webapp/dist/assets/{erDiagram-Q2GNP2WA-BujwA137.js.map → erDiagram-Q2GNP2WA-ctHu5zQL.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-DgwPjg4y.js → flowDiagram-NV44I4VS-m7ofIhri.js} +6 -6
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-DgwPjg4y.js.map → flowDiagram-NV44I4VS-m7ofIhri.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-Db2ykf3E.js → ganttDiagram-JELNMOA3-D9wS5Veb.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-Db2ykf3E.js.map → ganttDiagram-JELNMOA3-D9wS5Veb.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-D_gSifkv.js → gitGraphDiagram-V2S2FVAM-B86qqJx7.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-D_gSifkv.js.map → gitGraphDiagram-V2S2FVAM-B86qqJx7.js.map} +1 -1
- package/webapp/dist/assets/{graph-BHjCU5xP.js → graph-u844GGQC.js} +3 -3
- package/webapp/dist/assets/{graph-BHjCU5xP.js.map → graph-u844GGQC.js.map} +1 -1
- package/webapp/dist/assets/{index-xvYYeHuy.css → index-BGdI3lWA.css} +17 -9
- package/webapp/dist/assets/{index-DLajsIDJ.js → index-tinPEZoH.js} +1211 -995
- package/webapp/dist/assets/index-tinPEZoH.js.map +1 -0
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-BDba5pKs.js → infoDiagram-HS3SLOUP-DwRPUctP.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-BDba5pKs.js.map → infoDiagram-HS3SLOUP-DwRPUctP.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-CmJAbmlm.js → journeyDiagram-XKPGCS4Q-B91ZO-ec.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-CmJAbmlm.js.map → journeyDiagram-XKPGCS4Q-B91ZO-ec.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-DxQeBTDk.js → kanban-definition-3W4ZIXB7-CoogrZ07.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-DxQeBTDk.js.map → kanban-definition-3W4ZIXB7-CoogrZ07.js.map} +1 -1
- package/webapp/dist/assets/{layout-DteV_yE8.js → layout-BrzQmqFJ.js} +5 -5
- package/webapp/dist/assets/{layout-DteV_yE8.js.map → layout-BrzQmqFJ.js.map} +1 -1
- package/webapp/dist/assets/{linear-zItbPrND.js → linear-C6H7K9Zy.js} +2 -2
- package/webapp/dist/assets/{linear-zItbPrND.js.map → linear-C6H7K9Zy.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-BJXI7UqO.js → mindmap-definition-VGOIOE7T-UDHZQkNZ.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-BJXI7UqO.js.map → mindmap-definition-VGOIOE7T-UDHZQkNZ.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-ADFJNKIX-BpM-aH2p.js → pieDiagram-ADFJNKIX-M81uyQ1J.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-ADFJNKIX-BpM-aH2p.js.map → pieDiagram-ADFJNKIX-M81uyQ1J.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-NXdIpA15.js → quadrantDiagram-AYHSOK5B-ClzIh9Gb.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-NXdIpA15.js.map → quadrantDiagram-AYHSOK5B-ClzIh9Gb.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-D1AICAA0.js → requirementDiagram-UZGBJVZJ-DLK3A-pn.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-D1AICAA0.js.map → requirementDiagram-UZGBJVZJ-DLK3A-pn.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-WiReDPfo.js → sankeyDiagram-TZEHDZUN-CYqju8I1.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-WiReDPfo.js.map → sankeyDiagram-TZEHDZUN-CYqju8I1.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-Cw76oP8t.js → sequenceDiagram-WL72ISMW-2guv6eOd.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-Cw76oP8t.js.map → sequenceDiagram-WL72ISMW-2guv6eOd.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-QjCeRczs.js → stateDiagram-FKZM4ZOC-iujqSp0X.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-QjCeRczs.js.map → stateDiagram-FKZM4ZOC-iujqSp0X.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-IClqxQ4s.js → stateDiagram-v2-4FDKWEC3-BxzY81ky.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-IClqxQ4s.js.map → stateDiagram-v2-4FDKWEC3-BxzY81ky.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-IT6M3QCI-BfyfTY7m.js → timeline-definition-IT6M3QCI-DjCFSC8d.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-IT6M3QCI-BfyfTY7m.js.map → timeline-definition-IT6M3QCI-DjCFSC8d.js.map} +1 -1
- package/webapp/dist/assets/{treemap-GDKQZRPO-C5MiL6--.js → treemap-GDKQZRPO-iaBzDWCP.js} +5 -5
- package/webapp/dist/assets/{treemap-GDKQZRPO-C5MiL6--.js.map → treemap-GDKQZRPO-iaBzDWCP.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-ybaJrSry.js → xychartDiagram-PRI3JC2R-R6Jl1c89.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-ybaJrSry.js.map → xychartDiagram-PRI3JC2R-R6Jl1c89.js.map} +1 -1
- package/webapp/dist/index.html +2 -2
- package/dist/docs/issues/global-dialog-event-broadcaster-missing.md +0 -128
- package/dist/llm/kernel-driver/subdialog-txn.d.ts +0 -8
- package/webapp/dist/assets/index-DLajsIDJ.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
|
## 使用示例
|
|
@@ -103,7 +103,7 @@ Maintain shared terminology and standard wording across the team.
|
|
|
103
103
|
add_team_memory({
|
|
104
104
|
path: 'team/glossary/dialog-terms',
|
|
105
105
|
content:
|
|
106
|
-
'## Dialog Terms\n\n- In user-facing copy, prefer:
|
|
106
|
+
'## Dialog Terms\n\n- In user-facing copy, prefer: Main Dialog / Side Dialog\n- In implementation context, main dialog / sideDialog / askerDialog are acceptable\n- Do not surface implementation terms directly into user-facing copy',
|
|
107
107
|
});
|
|
108
108
|
```
|
|
109
109
|
|
|
@@ -103,7 +103,7 @@ add_team_memory({
|
|
|
103
103
|
add_team_memory({
|
|
104
104
|
path: 'team/glossary/dialog-terms',
|
|
105
105
|
content:
|
|
106
|
-
'## 对话术语\n\n- 用户面向文案优先使用:主线对话 / 支线对话\n- 实现上下文可使用:main dialog /
|
|
106
|
+
'## 对话术语\n\n- 用户面向文案优先使用:主线对话 / 支线对话\n- 实现上下文可使用:main dialog / sideDialog / askerDialog\n- 不要把实现术语直接裸露到用户可见 copy',
|
|
107
107
|
});
|
|
108
108
|
```
|
|
109
109
|
|
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>;
|
|
@@ -114,7 +114,7 @@ async function renderTeamMgmtGuideContent(language, topicsRaw = []) {
|
|
|
114
114
|
'`model_param_options` 可选:用于记录该 provider 支持的 `.minds/team.yaml model_params` 选项(文档用途)。',
|
|
115
115
|
'`apiQuirks` 可选:写在 `providers.<providerKey>.apiQuirks`,类型是 `string|string[]`。它是 provider 级 transport / 网关兼容开关,用来描述“这个供应商/网关的 API 有非标准行为”,不是 `.minds/team.yaml` 的成员参数,也不是 `model_params`。',
|
|
116
116
|
'使用原则:只有在你确认某个上游网关确实偏离了标准协议,而且 Dominds 已为这个偏差实现了命名 quirk 时才配置;不要把它当作随意调参入口。当前实现里,未知 quirk 值通常不会报错,但也不会带来任何效果。',
|
|
117
|
-
'当前已知示例:OpenAI Responses 包装层支持 `apiQuirks: xcode.best`(或数组里包含它)。它一方面会把供应商额外发出的 `keepalive` 流事件识别为 heartbeat,而不是当作异常事件处理;另一方面也会对该网关特有的失败模式做 provider-specific failure handling,包括“同一对话上下文连续返回 empty response”时先做少量临时重试;如果在同一未变化上下文里连续达到阈值,就判定这是 provider 侧 same-context deadlock,而不是普通基础设施抖动:此时继续沿用同一上下文自动重试大概率仍然不会有真实进展,必须引入新的信息或新的指令(例如补充上下文、改写问题、换一个切入方式,或在确实需要人类判断时调用 askHuman)。这类 provider/API retry 状态在同一次 driver 自动续跑链里会继续沿用,不因中途换 course 而自动清零;若当前对话启用了鞭策,driver 也会优先判断是否能按鞭策逻辑直接续跑一次,而不是先落入 stopped,并且一旦 driver 接受这次自动恢复资格,就会立刻记作已消费;这里的恢复语义是“deadlock break”而不是普通空转鞭策,所以即使当前轮次已经登记了在途诉请/支线对话,也不会仅因 pending
|
|
117
|
+
'当前已知示例:OpenAI Responses 包装层支持 `apiQuirks: xcode.best`(或数组里包含它)。它一方面会把供应商额外发出的 `keepalive` 流事件识别为 heartbeat,而不是当作异常事件处理;另一方面也会对该网关特有的失败模式做 provider-specific failure handling,包括“同一对话上下文连续返回 empty response”时先做少量临时重试;如果在同一未变化上下文里连续达到阈值,就判定这是 provider 侧 same-context deadlock,而不是普通基础设施抖动:此时继续沿用同一上下文自动重试大概率仍然不会有真实进展,必须引入新的信息或新的指令(例如补充上下文、改写问题、换一个切入方式,或在确实需要人类判断时调用 askHuman)。这类 provider/API retry 状态在同一次 driver 自动续跑链里会继续沿用,不因中途换 course 而自动清零;若当前对话启用了鞭策,driver 也会优先判断是否能按鞭策逻辑直接续跑一次,而不是先落入 stopped,并且一旦 driver 接受这次自动恢复资格,就会立刻记作已消费;这里的恢复语义是“deadlock break”而不是普通空转鞭策,所以即使当前轮次已经登记了在途诉请/支线对话,也不会仅因 pending sideDialog 就否决这一次恢复;以及把网关返回的 HTML 版 502 Bad Gateway 错误页和 `500 auth_unavailable: no auth available` 这类基础设施失败归类为 conservative 策略重试。最小示例:\n```yaml\nproviders:\n my_gateway:\n apiType: openai\n baseUrl: https://example.invalid/v1\n apiKeyEnvVar: MY_GATEWAY_API_KEY\n apiQuirks: xcode.best\n models:\n my_model: { name: "upstream-model-id" }\n```',
|
|
118
118
|
'边界提醒:`apiQuirks` 只影响实现里显式消费它的 provider/generator。就当前实现看,至少 OpenAI Responses 路径会读取它;不要假设所有 `apiType` 都支持或需要它。若配置后行为仍异常,应继续检查上游网关文档、抓流事件类型,并结合 `team_mgmt_check_provider(...)` / 运行日志排查。',
|
|
119
119
|
])
|
|
120
120
|
: fmtHeader('.minds/llm.yaml') +
|
|
@@ -128,7 +128,7 @@ async function renderTeamMgmtGuideContent(language, topicsRaw = []) {
|
|
|
128
128
|
'Optional: `model_param_options` documents `.minds/team.yaml model_params` knobs (documentation only).',
|
|
129
129
|
'`apiQuirks` is optional under `providers.<providerKey>.apiQuirks`, with type `string|string[]`. It is a provider-level transport / gateway compatibility switch for non-standard upstream API behavior. It is not a `.minds/team.yaml` member field and not part of `model_params`.',
|
|
130
130
|
'Use it only when you have confirmed that an upstream gateway deviates from the expected protocol and Dominds has an explicitly named quirk for that deviation. Do not treat it as a generic tuning field. In the current implementation, unknown quirk values are usually ignored rather than rejected, so a typo may silently do nothing.',
|
|
131
|
-
'Known current example: the OpenAI Responses wrapper supports `apiQuirks: xcode.best` (or an array containing it). It not only treats vendor-emitted `keepalive` stream events as heartbeat events instead of unexpected protocol noise, but also applies provider-specific failure handling for gateway-specific failures, including repeated empty responses in the same unchanged dialog context (a few temporary retries first; once the unchanged-context streak reaches the threshold, Dominds treats it as a provider-side same-context deadlock rather than ordinary infrastructure flakiness, which means repeating the same automatic retry path is no longer expected to make real progress and fresh information or fresh instructions are required, such as adding context, reframing the ask, changing the angle, or calling askHuman when human judgment is genuinely needed; this provider/API retry state intentionally continues across course changes within the same driver auto-continue chain; if Diligence Push is enabled for the dialog, the driver will first see whether it can continue once through that path before falling into stopped, and that recovery budget is considered consumed as soon as the driver accepts that path; this is a deadlock-break recovery rather than the ordinary idle-time Diligence Push, so a pending
|
|
131
|
+
'Known current example: the OpenAI Responses wrapper supports `apiQuirks: xcode.best` (or an array containing it). It not only treats vendor-emitted `keepalive` stream events as heartbeat events instead of unexpected protocol noise, but also applies provider-specific failure handling for gateway-specific failures, including repeated empty responses in the same unchanged dialog context (a few temporary retries first; once the unchanged-context streak reaches the threshold, Dominds treats it as a provider-side same-context deadlock rather than ordinary infrastructure flakiness, which means repeating the same automatic retry path is no longer expected to make real progress and fresh information or fresh instructions are required, such as adding context, reframing the ask, changing the angle, or calling askHuman when human judgment is genuinely needed; this provider/API retry state intentionally continues across course changes within the same driver auto-continue chain; if Diligence Push is enabled for the dialog, the driver will first see whether it can continue once through that path before falling into stopped, and that recovery budget is considered consumed as soon as the driver accepts that path; this is a deadlock-break recovery rather than the ordinary idle-time Diligence Push, so a pending sideDialog alone does not veto that one recovery injection) and gateway-returned HTML 502 Bad Gateway pages plus `500 auth_unavailable: no auth available` infrastructure failures classified into conservative retry. Minimal example:\n```yaml\nproviders:\n my_gateway:\n apiType: openai\n baseUrl: https://example.invalid/v1\n apiKeyEnvVar: MY_GATEWAY_API_KEY\n apiQuirks: xcode.best\n models:\n my_model: { name: "upstream-model-id" }\n```',
|
|
132
132
|
'Boundary reminder: `apiQuirks` only affects providers/generators that explicitly read it in code. In the current implementation, at least the OpenAI Responses path consumes it; do not assume every `apiType` supports or needs it. If behavior is still wrong after setting it, continue with upstream gateway docs, raw stream event inspection, and `team_mgmt_check_provider(...)` / runtime logs.',
|
|
133
133
|
]);
|
|
134
134
|
}
|
|
@@ -2,8 +2,8 @@ import type { LanguageCode } from '@longrun-ai/kernel/types/language';
|
|
|
2
2
|
import { type McpToolsetManualState } from '../mcp/manual-problems';
|
|
3
3
|
export type McpToolsetMappingEntry = {
|
|
4
4
|
serverId: string;
|
|
5
|
-
transport: 'stdio' | 'streamable_http' | 'invalid';
|
|
6
|
-
status: 'registered' | 'declared_unloaded' | 'declared_invalid';
|
|
5
|
+
transport: 'stdio' | 'streamable_http' | 'invalid' | 'unknown';
|
|
6
|
+
status: 'registered' | 'declared_unloaded' | 'declared_invalid' | 'disabled';
|
|
7
7
|
loadedToolCount?: number;
|
|
8
8
|
loadedToolNames?: string[];
|
|
9
9
|
loadedToolNamesPreview?: string[];
|
|
@@ -157,14 +157,24 @@ function renderAutoGeneratedMcpManualDraftSection(language, entry) {
|
|
|
157
157
|
? language === 'zh'
|
|
158
158
|
? '已加载'
|
|
159
159
|
: 'loaded'
|
|
160
|
-
: entry.status === '
|
|
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,9 +522,10 @@ async function renderMcpManual(language) {
|
|
|
481
522
|
return (fmtHeader('.minds/mcp.yaml') +
|
|
482
523
|
fmtList([
|
|
483
524
|
'每个 MCP `serverId` 注册一个 toolset,toolset 名称 = `serverId`(不加 `mcp_` 前缀)。成员通过 `members.<id>.toolsets` 选择能用哪些 MCP toolset。',
|
|
484
|
-
'支持热重载:编辑 `.minds/mcp.yaml` 后通常无需重启 Dominds;必要时用 `mcp_restart
|
|
485
|
-
'默认按“每个对话租用一个 MCP 运行时实例”运行(更安全):某个对话首次使用该 server 时,可能为它启动/持有一个运行时实例(HTTP 连接或 stdio 进程),并添加 sticky reminder。确认当前对话不再需要该运行时实例后,用 `mcp_release` 释放。租约只表达运行时资源归属,不决定该 server 的全局工具注册/可见性;如确实是无状态服务器,可配置 `truely-stateless: true`
|
|
525
|
+
'支持热重载:编辑 `.minds/mcp.yaml` 后通常无需重启 Dominds;必要时用 `mcp_restart`。`mcp_restart` 会把目标 server 的 `enabled: false` 写回 `enabled: true` 后尝试启动;成功后替换全局 runtime 并清掉旧 runtime 的全部对话 lease。',
|
|
526
|
+
'默认按“每个对话租用一个 MCP 运行时实例”运行(更安全):某个对话首次使用该 server 时,可能为它启动/持有一个运行时实例(HTTP 连接或 stdio 进程),并添加 sticky reminder。确认当前对话不再需要该运行时实例后,用 `mcp_release` 释放。租约只表达运行时资源归属,不决定该 server 的全局工具注册/可见性;如确实是无状态服务器,可配置 `truely-stateless: true` 允许跨对话共享。若需停用某 server,用 `mcp_disable` 写入 `enabled: false`;禁用后仍会保留 0 工具 toolset 和手册可见性。',
|
|
486
527
|
'stdio 配置格式:`command` 必须是字符串(可执行命令),参数放在 `args`(string[],可省略,默认空数组)。`cwd` 可选(字符串):用于固定相对路径解析目录。',
|
|
528
|
+
'HTTP headers 支持三种值:字面量字符串、`{ env: NAME }`、`{ prefix: "Bearer ", env: NAME }`;认证 token 建议从环境变量读取,不要写死在 YAML。',
|
|
487
529
|
'用 `tools.whitelist/blacklist` 控制暴露的工具,用 `transform` 做命名变换。',
|
|
488
530
|
'常见坑:stdio transport 需要可执行命令路径正确,且受成员权限(目录 + 扩展名:`*_dirs/no_*_dirs/*_file_ext_names/no_*_file_ext_names`)约束;HTTP transport 需要服务可达(url/端口/网络)。',
|
|
489
531
|
'高频坑(stdio 路径):若未设置 `cwd`,相对路径按 Dominds 进程工作目录(通常 rtws 根目录)解析;建议显式配置 `cwd` 或直接使用绝对路径。`cwd` 必须存在且是目录。',
|
|
@@ -494,7 +536,7 @@ async function renderMcpManual(language) {
|
|
|
494
536
|
'团队管理者建议:配置并验证 MCP 后,应先精读该 server 暴露的每个工具 description/参数,再与人类用户讨论本 rtws 中这些工具的使用意图,然后把正式手册沉淀到 `manual.contentFile`;若还需要在团队管理层额外解释业务边界,可再补 inline `content + sections`。',
|
|
495
537
|
'章节组织建议采用“半结构化”:可优先考虑 `何时使用`、`安全边界`、`不可用时业务处置` 这类高价值章节,但不要求所有 toolset 都照抄同一模板。应从真实业务目标出发,决定哪些章节需要展开、哪些只需一句话、哪些可以合并或另起更贴切的标题。',
|
|
496
538
|
'对每个 MCP toolset,团队管理者仍应刻意写明“不可用时业务处置规约”:至少回答 1) 当前 toolset 暂不可达时是否必须找协调者/专员接手;2) 是否允许走人工或其他工具链降级路径;3) 哪些业务动作在该 toolset 恢复前必须暂停,禁止擅自继续。',
|
|
497
|
-
'最小诊断流程(建议顺序):1) 先用 `team_mgmt_check_provider({ provider_key: "<providerKey>", model: "", all_models: false, live: false })` 确认 LLM provider 可用;2) 再检查该成员的目录权限(`man({ "toolsetId": "team_mgmt", "topics": ["permissions"] })`);3) 运行 `team_mgmt_validate_mcp_cfg({})` 汇总 `.minds/mcp.yaml` 与 MCP 问题;4) 必要时 `mcp_restart
|
|
539
|
+
'最小诊断流程(建议顺序):1) 先用 `team_mgmt_check_provider({ provider_key: "<providerKey>", model: "", all_models: false, live: false })` 确认 LLM provider 可用;2) 再检查该成员的目录权限(`man({ "toolsetId": "team_mgmt", "topics": ["permissions"] })`);3) 运行 `team_mgmt_validate_mcp_cfg({})` 汇总 `.minds/mcp.yaml` 与 MCP 问题;4) 必要时 `mcp_restart` 启用/重启,或 `mcp_disable` 禁用;只在当前对话确实持有不再需要的 lease 时使用 `mcp_release`。',
|
|
498
540
|
]) +
|
|
499
541
|
fmtCodeBlock('yaml', [
|
|
500
542
|
'# 最小模板(stdio)',
|
|
@@ -545,6 +587,10 @@ async function renderMcpManual(language) {
|
|
|
545
587
|
' truely-stateless: false',
|
|
546
588
|
' transport: streamable_http',
|
|
547
589
|
' url: http://127.0.0.1:3000/mcp',
|
|
590
|
+
' # headers:',
|
|
591
|
+
' # Authorization:',
|
|
592
|
+
' # prefix: "Bearer "',
|
|
593
|
+
' # env: MCP_AUTH_TOKEN',
|
|
548
594
|
' tools: { whitelist: [], blacklist: [] }',
|
|
549
595
|
' transform: []',
|
|
550
596
|
' manual:',
|
|
@@ -560,9 +606,10 @@ async function renderMcpManual(language) {
|
|
|
560
606
|
return (fmtHeader('.minds/mcp.yaml') +
|
|
561
607
|
fmtList([
|
|
562
608
|
'Each MCP `serverId` registers one toolset, and the toolset name is exactly `serverId` (no `mcp_` prefix). Members choose MCP access via `members.<id>.toolsets`.',
|
|
563
|
-
'Hot reload: edits usually apply without restarting Dominds; use `mcp_restart` when needed.',
|
|
564
|
-
"Default is per-dialog MCP runtime leasing (safer): a dialog's first use may start/hold one runtime instance for that server (an HTTP connection or stdio process), and first use adds a sticky reminder. Call `mcp_release` when you're sure the current dialog no longer needs that runtime instance. This lease is about runtime resource ownership only; tool registration/visibility still follows the latest global server instance. If the server is truly stateless, set `truely-stateless: true` to allow cross-dialog sharing.",
|
|
609
|
+
'Hot reload: edits usually apply without restarting Dominds; use `mcp_restart` when needed. `mcp_restart` writes `enabled: true` when the target server is currently `enabled: false`, then tries to start it; after success it replaces the global runtime and clears all dialog leases on the old runtime.',
|
|
610
|
+
"Default is per-dialog MCP runtime leasing (safer): a dialog's first use may start/hold one runtime instance for that server (an HTTP connection or stdio process), and first use adds a sticky reminder. Call `mcp_release` when you're sure the current dialog no longer needs that runtime instance. This lease is about runtime resource ownership only; tool registration/visibility still follows the latest global server instance. If the server is truly stateless, set `truely-stateless: true` to allow cross-dialog sharing. To disable a server, use `mcp_disable` to write `enabled: false`; disabled servers remain visible as zero-tool toolsets with their manuals.",
|
|
565
611
|
'Stdio shape: `command` must be a string executable; parameters go in `args` (string[], optional, defaults to empty). Optional `cwd` (string) fixes the working directory used for relative paths.',
|
|
612
|
+
'HTTP headers support three value forms: literal strings, `{ env: NAME }`, and `{ prefix: "Bearer ", env: NAME }`; keep auth tokens in env instead of hardcoding them in YAML.',
|
|
566
613
|
'Use `tools.whitelist/blacklist` for exposure control and `transform` for naming transforms.',
|
|
567
614
|
'Common pitfalls: stdio transport needs a correct executable/command path, and is subject to member permissions (directory + extension: `*_dirs/no_*_dirs/*_file_ext_names/no_*_file_ext_names`); HTTP transport requires the server URL to be reachable.',
|
|
568
615
|
'High-frequency pitfall (stdio paths): if `cwd` is omitted, relative paths are resolved from Dominds process cwd (usually rtws root). Prefer setting `cwd` explicitly or use absolute paths. `cwd` must exist and be a directory.',
|
|
@@ -573,7 +620,7 @@ async function renderMcpManual(language) {
|
|
|
573
620
|
'Team-manager recommendation: after MCP config is validated, carefully read descriptions/arguments of each exposed tool, discuss intended usage for this rtws with the human user, then write the formal manual into `manual.contentFile`; if extra team-management interpretation is still useful, add inline `content + sections` alongside it.',
|
|
574
621
|
'Use a semi-structured chapter shape: high-value sections often include `When To Use`, `Guardrails`, and `Business Handling When Unavailable`, but do not force every toolset into one fixed template. Start from the real business goal, then decide which sections deserve depth, which can stay brief, and which should be merged or renamed to fit the scenario.',
|
|
575
622
|
'For each MCP toolset, still document unavailable-case business rules explicitly: at minimum answer 1) whether a temporarily unavailable toolset must be escalated to a coordinator or specialist, 2) whether a manual or alternate-tool fallback path is allowed, and 3) which business actions must pause until this toolset recovers.',
|
|
576
|
-
'Minimal diagnostic flow: 1) run `team_mgmt_check_provider({ provider_key: "<providerKey>", model: "", all_models: false, live: false })` to confirm the LLM provider works; 2) review member directory permissions (`man({ "toolsetId": "team_mgmt", "topics": ["permissions"] })`); 3) run `team_mgmt_validate_mcp_cfg({})` to summarize `.minds/mcp.yaml` + MCP issues; 4) use `mcp_restart`
|
|
623
|
+
'Minimal diagnostic flow: 1) run `team_mgmt_check_provider({ provider_key: "<providerKey>", model: "", all_models: false, live: false })` to confirm the LLM provider works; 2) review member directory permissions (`man({ "toolsetId": "team_mgmt", "topics": ["permissions"] })`); 3) run `team_mgmt_validate_mcp_cfg({})` to summarize `.minds/mcp.yaml` + MCP issues; 4) use `mcp_restart` to enable/restart, or `mcp_disable` to disable; use `mcp_release` only when the current dialog actually holds a lease it no longer needs.',
|
|
577
624
|
]) +
|
|
578
625
|
fmtCodeBlock('yaml', [
|
|
579
626
|
'# Minimal template (stdio)',
|
|
@@ -624,6 +671,10 @@ async function renderMcpManual(language) {
|
|
|
624
671
|
' truely-stateless: false',
|
|
625
672
|
' transport: streamable_http',
|
|
626
673
|
' url: http://127.0.0.1:3000/mcp',
|
|
674
|
+
' # headers:',
|
|
675
|
+
' # Authorization:',
|
|
676
|
+
' # prefix: "Bearer "',
|
|
677
|
+
' # env: MCP_AUTH_TOKEN',
|
|
627
678
|
' tools: { whitelist: [], blacklist: [] }',
|
|
628
679
|
' transform: []',
|
|
629
680
|
' manual:',
|