dominds 1.21.1 → 1.22.1
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/dialog-instance-registry.js +8 -6
- package/dist/dialog.d.ts +2 -2
- package/dist/dialog.js +3 -3
- package/dist/docs/diligence-push.md +32 -17
- package/dist/docs/diligence-push.zh.md +16 -11
- package/dist/docs/dominds-terminology.md +3 -3
- package/dist/docs/fbr.md +8 -8
- package/dist/docs/fbr.zh.md +7 -7
- package/dist/docs/llm-provider-isolation.md +2 -0
- package/dist/docs/llm-provider-isolation.zh.md +2 -0
- package/dist/docs/mcp-prompts-resources.md +120 -0
- package/dist/docs/mcp-support.md +2 -0
- package/dist/docs/team_mgmt-toolset.md +2 -2
- package/dist/docs/team_mgmt-toolset.zh.md +2 -2
- package/dist/docs/tool-availability-protocol.md +4 -1
- package/dist/docs/volcengine-coding-plan-openai-compatible.zh.md +387 -0
- package/dist/llm/api-quirks.d.ts +2 -2
- package/dist/llm/api-quirks.js +72 -8
- package/dist/llm/client.d.ts +1 -0
- package/dist/llm/defaults.yaml +23 -21
- package/dist/llm/gen/anthropic.d.ts +0 -6
- package/dist/llm/gen/anthropic.js +98 -503
- package/dist/llm/gen/codex.d.ts +4 -1
- package/dist/llm/gen/codex.js +28 -3
- package/dist/llm/gen/failure-classifier.js +2 -1
- package/dist/llm/gen/openai-compatible.d.ts +29 -5
- package/dist/llm/gen/openai-compatible.js +917 -196
- package/dist/llm/gen/openai.d.ts +2 -1
- package/dist/llm/gen/openai.js +24 -6
- package/dist/llm/gen.d.ts +5 -2
- package/dist/llm/kernel-driver/drive.js +199 -122
- package/dist/llm/kernel-driver/runtime.d.ts +1 -0
- package/dist/llm/kernel-driver/runtime.js +40 -14
- package/dist/llm/kernel-driver/tellask-special.js +12 -9
- package/dist/mcp/config.d.ts +21 -0
- package/dist/mcp/config.js +70 -0
- package/dist/mcp/resources.d.ts +69 -0
- package/dist/mcp/resources.js +447 -0
- package/dist/mcp/sdk-client.d.ts +36 -0
- package/dist/mcp/sdk-client.js +79 -0
- package/dist/mcp/supervisor.d.ts +2 -0
- package/dist/mcp/supervisor.js +38 -0
- package/dist/minds/load.js +22 -9
- package/dist/persistence.d.ts +2 -3
- package/dist/persistence.js +57 -77
- package/dist/problems.js +2 -1
- package/dist/server/api-routes.js +7 -1
- package/dist/server/snippets-routes.d.ts +2 -53
- package/dist/server/snippets-routes.js +79 -1
- package/dist/server/websocket-handler.js +42 -16
- package/dist/skills/load.d.ts +9 -1
- package/dist/skills/load.js +63 -9
- package/dist/team.d.ts +15 -1
- package/dist/team.js +78 -8
- package/dist/tool-availability.js +92 -15
- package/dist/tools/builtins.js +16 -0
- package/dist/tools/prompts/resources/en/errors.md +6 -0
- package/dist/tools/prompts/resources/en/index.md +10 -0
- package/dist/tools/prompts/resources/en/principles.md +6 -0
- package/dist/tools/prompts/resources/en/scenarios.md +22 -0
- package/dist/tools/prompts/resources/en/tools.md +10 -0
- package/dist/tools/prompts/resources/zh/errors.md +6 -0
- package/dist/tools/prompts/resources/zh/index.md +9 -0
- package/dist/tools/prompts/resources/zh/principles.md +6 -0
- package/dist/tools/prompts/resources/zh/scenarios.md +22 -0
- package/dist/tools/prompts/resources/zh/tools.md +10 -0
- package/dist/tools/resources.d.ts +3 -0
- package/dist/tools/resources.js +183 -0
- package/dist/tools/skills.d.ts +1 -0
- package/dist/tools/skills.js +81 -1
- package/dist/tools/team_mgmt-manual.js +6 -6
- package/dist/tools/team_mgmt.js +17 -5
- package/dist/tools/toolset-manual.d.ts +1 -0
- package/dist/tools/toolset-manual.js +4 -0
- package/package.json +3 -3
- package/webapp/dist/assets/{_basePickBy-Bykc_Ofa.js → _basePickBy-DUbW5G8a.js} +3 -3
- package/webapp/dist/assets/_basePickBy-DUbW5G8a.js.map +1 -0
- package/webapp/dist/assets/{_baseUniq-DLbrL6lI.js → _baseUniq-vou1IeXB.js} +2 -2
- package/webapp/dist/assets/_baseUniq-vou1IeXB.js.map +1 -0
- package/webapp/dist/assets/{arc-DNhbWbht.js → arc-D_O9oO0B.js} +2 -2
- package/webapp/dist/assets/arc-D_O9oO0B.js.map +1 -0
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-CzDiW-tr.js → architectureDiagram-2XIMDMQ5-B7k9SWSL.js} +26 -8
- package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-B7k9SWSL.js.map +1 -0
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-RrxjTltH.js → blockDiagram-WCTKOSBZ-e3xTmffi.js} +187 -170
- package/webapp/dist/assets/blockDiagram-WCTKOSBZ-e3xTmffi.js.map +1 -0
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-lftE3Ba_.js → c4Diagram-IC4MRINW-DVvi-N2o.js} +4 -4
- package/webapp/dist/assets/c4Diagram-IC4MRINW-DVvi-N2o.js.map +1 -0
- package/webapp/dist/assets/{channel-DNkowTag.js → channel-CH387UD2.js} +2 -2
- package/webapp/dist/assets/channel-CH387UD2.js.map +1 -0
- package/webapp/dist/assets/{chunk-4BX2VUAB-Cq_3x_zL.js → chunk-4BX2VUAB-BOo0Xj3m.js} +2 -2
- package/webapp/dist/assets/chunk-4BX2VUAB-BOo0Xj3m.js.map +1 -0
- package/webapp/dist/assets/{chunk-55IACEB6-CUUCRvYF.js → chunk-55IACEB6-CI4uRAx_.js} +2 -2
- package/webapp/dist/assets/chunk-55IACEB6-CI4uRAx_.js.map +1 -0
- package/webapp/dist/assets/{chunk-FMBD7UC4-C8krVsNf.js → chunk-FMBD7UC4-C4N1ovxD.js} +2 -2
- package/webapp/dist/assets/chunk-FMBD7UC4-C4N1ovxD.js.map +1 -0
- package/webapp/dist/assets/{chunk-TZMSLE5B-DiuCcVSY.js → chunk-JSJVCQXG-5U4Hu7pC.js} +14 -6
- package/webapp/dist/assets/chunk-JSJVCQXG-5U4Hu7pC.js.map +1 -0
- package/webapp/dist/assets/{chunk-QN33PNHL-B2f0ZKyf.js → chunk-KX2RTZJC-BXPDNuct.js} +2 -2
- package/webapp/dist/assets/chunk-KX2RTZJC-BXPDNuct.js.map +1 -0
- package/webapp/dist/assets/{chunk-DI55MBZ5-BwtzRGRI.js → chunk-NQ4KR5QH-oVsExnnn.js} +9 -7
- package/webapp/dist/assets/chunk-NQ4KR5QH-oVsExnnn.js.map +1 -0
- package/webapp/dist/assets/{chunk-QZHKN3VN-DnMfaFpr.js → chunk-QZHKN3VN-C6FzEv2C.js} +2 -2
- package/webapp/dist/assets/chunk-QZHKN3VN-C6FzEv2C.js.map +1 -0
- package/webapp/dist/assets/{chunk-B4BG7PRW-DSxZvr3b.js → chunk-WL4C6EOR-Ir7e_B7t.js} +171 -121
- package/webapp/dist/assets/chunk-WL4C6EOR-Ir7e_B7t.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-2ON5EDUG-Dx7rEITq.js → classDiagram-VBA2DB6C-CPYs_LAr.js} +7 -6
- package/webapp/dist/assets/classDiagram-VBA2DB6C-CPYs_LAr.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-Dx7rEITq.js → classDiagram-v2-RAHNMMFH-CPYs_LAr.js} +7 -6
- package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-CPYs_LAr.js.map +1 -0
- package/webapp/dist/assets/{clone-E3g7pzJk.js → clone-CToca8rS.js} +2 -2
- package/webapp/dist/assets/clone-CToca8rS.js.map +1 -0
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-Djn8s_be.js → cose-bilkent-S5V4N54A-DLNtqY7a.js} +2 -2
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-DLNtqY7a.js.map +1 -0
- package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
- package/webapp/dist/assets/{dagre-6UL2VRFP-Bu5j2QjT.js → dagre-KLK3FWXG-Bkt-O9uW.js} +7 -7
- package/webapp/dist/assets/dagre-KLK3FWXG-Bkt-O9uW.js.map +1 -0
- package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
- package/webapp/dist/assets/{diagram-PSM6KHXK-BH1bxFLu.js → diagram-E7M64L7V-B4JR_u4V.js} +10 -10
- package/webapp/dist/assets/diagram-E7M64L7V-B4JR_u4V.js.map +1 -0
- package/webapp/dist/assets/{diagram-QEK2KX5R-BfnpXovp.js → diagram-IFDJBPK2-D9zRh8b7.js} +9 -8
- package/webapp/dist/assets/diagram-IFDJBPK2-D9zRh8b7.js.map +1 -0
- package/webapp/dist/assets/{diagram-S2PKOQOG-C6W_geXb.js → diagram-P4PSJMXO-CAaXVWnX.js} +8 -8
- package/webapp/dist/assets/diagram-P4PSJMXO-CAaXVWnX.js.map +1 -0
- package/webapp/dist/assets/{erDiagram-Q2GNP2WA-MMq-1uef.js → erDiagram-INFDFZHY-DDeoaSkJ.js} +96 -75
- package/webapp/dist/assets/erDiagram-INFDFZHY-DDeoaSkJ.js.map +1 -0
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-DhabwrYX.js → flowDiagram-PKNHOUZH-DEYqzSEJ.js} +98 -81
- package/webapp/dist/assets/flowDiagram-PKNHOUZH-DEYqzSEJ.js.map +1 -0
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-DlYQJWeZ.js → ganttDiagram-A5KZAMGK-BuLOSh0d.js} +28 -3
- package/webapp/dist/assets/ganttDiagram-A5KZAMGK-BuLOSh0d.js.map +1 -0
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-CX6gTpVR.js → gitGraphDiagram-K3NZZRJ6-CBrwZvBf.js} +38 -46
- package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-CBrwZvBf.js.map +1 -0
- package/webapp/dist/assets/graph-fX6cvjwR.js +782 -0
- package/webapp/dist/assets/graph-fX6cvjwR.js.map +1 -0
- package/webapp/dist/assets/{index-n9DBNPjf.js → index-B3WzTLcD.js} +1194 -1099
- package/webapp/dist/assets/{index-n9DBNPjf.js.map → index-B3WzTLcD.js.map} +1 -1
- package/webapp/dist/assets/{index-BGdI3lWA.css → index-DZFkLLVz.css} +1 -1
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-Bd_c4ryh.js → infoDiagram-LFFYTUFH-Ci3XYvve.js} +7 -7
- package/webapp/dist/assets/infoDiagram-LFFYTUFH-Ci3XYvve.js.map +1 -0
- package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-DOH5ua9R.js +966 -0
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-DOH5ua9R.js.map +1 -0
- package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-CxhNxA57.js → journeyDiagram-4ABVD52K-DM_fiZlj.js} +5 -5
- package/webapp/dist/assets/journeyDiagram-4ABVD52K-DM_fiZlj.js.map +1 -0
- package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-DizD4_xO.js → kanban-definition-K7BYSVSG-CSh2hqc2.js} +5 -3
- package/webapp/dist/assets/kanban-definition-K7BYSVSG-CSh2hqc2.js.map +1 -0
- package/webapp/dist/assets/{layout-Et2JKDy4.js → layout-yZEK1LgL.js} +5 -5
- package/webapp/dist/assets/layout-yZEK1LgL.js.map +1 -0
- package/webapp/dist/assets/{linear-vv9IKfjA.js → linear-m76SmdtZ.js} +2 -2
- package/webapp/dist/assets/linear-m76SmdtZ.js.map +1 -0
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-BjZ2IG-q.js → mindmap-definition-YRQLILUH-NiwP-SLH.js} +7 -5
- package/webapp/dist/assets/mindmap-definition-YRQLILUH-NiwP-SLH.js.map +1 -0
- package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
- package/webapp/dist/assets/{pieDiagram-ADFJNKIX-Dsym3Tvc.js → pieDiagram-SKSYHLDU-CSCapDSD.js} +8 -8
- package/webapp/dist/assets/pieDiagram-SKSYHLDU-CSCapDSD.js.map +1 -0
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-BiDOgUeI.js → quadrantDiagram-337W2JSQ-CbDGQH91.js} +3 -3
- package/webapp/dist/assets/quadrantDiagram-337W2JSQ-CbDGQH91.js.map +1 -0
- package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-CwjS_Vo9.js → requirementDiagram-Z7DCOOCP-CeG2yodp.js} +16 -6
- package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-CeG2yodp.js.map +1 -0
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-BxoOhMxL.js → sankeyDiagram-WA2Y5GQK-B_l8tKqa.js} +2 -2
- package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-B_l8tKqa.js.map +1 -0
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-DvDiYf5j.js → sequenceDiagram-2WXFIKYE-Dc5gBIi5.js} +601 -201
- package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-Dc5gBIi5.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-CS0eUnn1.js → stateDiagram-RAJIS63D-DMYeNS1r.js} +9 -9
- package/webapp/dist/assets/stateDiagram-RAJIS63D-DMYeNS1r.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-CWLL1BTf.js → stateDiagram-v2-FVOUBMTO-MfUJuUEe.js} +5 -5
- package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-MfUJuUEe.js.map +1 -0
- package/webapp/dist/assets/{timeline-definition-IT6M3QCI-BsehS0iC.js → timeline-definition-YZTLITO2-Ci2CZEky.js} +3 -3
- package/webapp/dist/assets/timeline-definition-YZTLITO2-Ci2CZEky.js.map +1 -0
- package/webapp/dist/assets/{treemap-GDKQZRPO-D1_uwOCA.js → treemap-KZPCXAKY-CNgzp4sT.js} +37 -24
- package/webapp/dist/assets/treemap-KZPCXAKY-CNgzp4sT.js.map +1 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-BYxtNx2s.js +2487 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-BYxtNx2s.js.map +1 -0
- package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-B7O9E6vS.js → xychartDiagram-JWTSCODW-BUS3bn9p.js} +4 -4
- package/webapp/dist/assets/xychartDiagram-JWTSCODW-BUS3bn9p.js.map +1 -0
- package/webapp/dist/index.html +2 -2
- package/webapp/dist/assets/_basePickBy-Bykc_Ofa.js.map +0 -1
- package/webapp/dist/assets/_baseUniq-DLbrL6lI.js.map +0 -1
- package/webapp/dist/assets/arc-DNhbWbht.js.map +0 -1
- package/webapp/dist/assets/architectureDiagram-VXUJARFQ-CzDiW-tr.js.map +0 -1
- package/webapp/dist/assets/blockDiagram-VD42YOAC-RrxjTltH.js.map +0 -1
- package/webapp/dist/assets/c4Diagram-YG6GDRKO-lftE3Ba_.js.map +0 -1
- package/webapp/dist/assets/channel-DNkowTag.js.map +0 -1
- package/webapp/dist/assets/chunk-4BX2VUAB-Cq_3x_zL.js.map +0 -1
- package/webapp/dist/assets/chunk-55IACEB6-CUUCRvYF.js.map +0 -1
- package/webapp/dist/assets/chunk-B4BG7PRW-DSxZvr3b.js.map +0 -1
- package/webapp/dist/assets/chunk-DI55MBZ5-BwtzRGRI.js.map +0 -1
- package/webapp/dist/assets/chunk-FMBD7UC4-C8krVsNf.js.map +0 -1
- package/webapp/dist/assets/chunk-QN33PNHL-B2f0ZKyf.js.map +0 -1
- package/webapp/dist/assets/chunk-QZHKN3VN-DnMfaFpr.js.map +0 -1
- package/webapp/dist/assets/chunk-TZMSLE5B-DiuCcVSY.js.map +0 -1
- package/webapp/dist/assets/classDiagram-2ON5EDUG-Dx7rEITq.js.map +0 -1
- package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-Dx7rEITq.js.map +0 -1
- package/webapp/dist/assets/clone-E3g7pzJk.js.map +0 -1
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-Djn8s_be.js.map +0 -1
- package/webapp/dist/assets/dagre-6UL2VRFP-Bu5j2QjT.js.map +0 -1
- package/webapp/dist/assets/diagram-PSM6KHXK-BH1bxFLu.js.map +0 -1
- package/webapp/dist/assets/diagram-QEK2KX5R-BfnpXovp.js.map +0 -1
- package/webapp/dist/assets/diagram-S2PKOQOG-C6W_geXb.js.map +0 -1
- package/webapp/dist/assets/erDiagram-Q2GNP2WA-MMq-1uef.js.map +0 -1
- package/webapp/dist/assets/flowDiagram-NV44I4VS-DhabwrYX.js.map +0 -1
- package/webapp/dist/assets/ganttDiagram-JELNMOA3-DlYQJWeZ.js.map +0 -1
- package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-CX6gTpVR.js.map +0 -1
- package/webapp/dist/assets/graph-CwsSRKMf.js +0 -425
- package/webapp/dist/assets/graph-CwsSRKMf.js.map +0 -1
- package/webapp/dist/assets/infoDiagram-HS3SLOUP-Bd_c4ryh.js.map +0 -1
- package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-CxhNxA57.js.map +0 -1
- package/webapp/dist/assets/kanban-definition-3W4ZIXB7-DizD4_xO.js.map +0 -1
- package/webapp/dist/assets/layout-Et2JKDy4.js.map +0 -1
- package/webapp/dist/assets/linear-vv9IKfjA.js.map +0 -1
- package/webapp/dist/assets/mindmap-definition-VGOIOE7T-BjZ2IG-q.js.map +0 -1
- package/webapp/dist/assets/pieDiagram-ADFJNKIX-Dsym3Tvc.js.map +0 -1
- package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-BiDOgUeI.js.map +0 -1
- package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-CwjS_Vo9.js.map +0 -1
- package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-BxoOhMxL.js.map +0 -1
- package/webapp/dist/assets/sequenceDiagram-WL72ISMW-DvDiYf5j.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-FKZM4ZOC-CS0eUnn1.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-CWLL1BTf.js.map +0 -1
- package/webapp/dist/assets/timeline-definition-IT6M3QCI-BsehS0iC.js.map +0 -1
- package/webapp/dist/assets/treemap-GDKQZRPO-D1_uwOCA.js.map +0 -1
- package/webapp/dist/assets/xychartDiagram-PRI3JC2R-B7O9E6vS.js.map +0 -1
|
@@ -68,7 +68,7 @@ async function getOrRestoreMainDialog(rootId, status) {
|
|
|
68
68
|
catch (_err) {
|
|
69
69
|
diligencePushMax = diligence_1.DEFAULT_DILIGENCE_PUSH_MAX;
|
|
70
70
|
}
|
|
71
|
-
const defaultDisableDiligencePush =
|
|
71
|
+
const defaultDisableDiligencePush = false;
|
|
72
72
|
const rootStore = new persistence_1.DiskFileDialogStore(mainDialogId);
|
|
73
73
|
const mainDialog = new dialog_1.MainDialog(rootStore, rootMetadata.taskDocPath, mainDialogId, rootMetadata.agentId, {
|
|
74
74
|
messages: rootState.messages,
|
|
@@ -85,10 +85,9 @@ async function getOrRestoreMainDialog(rootId, status) {
|
|
|
85
85
|
? latest.diligencePushRemainingBudget
|
|
86
86
|
: undefined;
|
|
87
87
|
const normalizedRemainingBudget = clampNonNegativeFiniteInt(persistedRemainingBudget, diligencePushMax > 0 ? diligencePushMax : 0);
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
: normalizedRemainingBudget;
|
|
88
|
+
// `diligence-push-max` only seeds defaults. Persisted per-dialog budget is the runtime source of
|
|
89
|
+
// truth, including operator-added budget above (or despite) the current team default.
|
|
90
|
+
mainDialog.diligencePushRemainingBudget = normalizedRemainingBudget;
|
|
92
91
|
mainDialog.setPersistenceStatus(status);
|
|
93
92
|
dialog_global_registry_1.globalDialogRegistry.register(mainDialog);
|
|
94
93
|
// Keep the in-memory main dialog fully hydrated regardless of persistence status
|
|
@@ -154,7 +153,10 @@ async function ensureDialogLoaded(mainDialog, targetId, status, visitedSelfIds =
|
|
|
154
153
|
contextHealth: state.contextHealth,
|
|
155
154
|
pendingCourseStartPrompt,
|
|
156
155
|
});
|
|
157
|
-
sideDialog.disableDiligencePush =
|
|
156
|
+
sideDialog.disableDiligencePush =
|
|
157
|
+
latest && typeof latest.disableDiligencePush === 'boolean'
|
|
158
|
+
? latest.disableDiligencePush
|
|
159
|
+
: false;
|
|
158
160
|
if (sideDialog.sessionSlug) {
|
|
159
161
|
mainDialog.registerSideDialog(sideDialog);
|
|
160
162
|
}
|
package/dist/dialog.d.ts
CHANGED
|
@@ -438,7 +438,7 @@ export declare abstract class Dialog {
|
|
|
438
438
|
}): Promise<void>;
|
|
439
439
|
persistAgentMessage(content: string, genseq: number, type: 'thinking_msg' | 'saying_msg', provider_data?: ProviderData, reasoning?: ReasoningPayload): Promise<void>;
|
|
440
440
|
persistUiOnlyMarkdown(content: string, genseq: number): Promise<void>;
|
|
441
|
-
persistFunctionCall(id: string, name: string, rawArgumentsText: string, genseq: number): Promise<void>;
|
|
441
|
+
persistFunctionCall(id: string, name: string, rawArgumentsText: string, genseq: number, rawId?: string): Promise<void>;
|
|
442
442
|
persistTellaskCall(id: string, name: TellaskCallRecordName, rawArgumentsText: string, genseq: number, options?: {
|
|
443
443
|
deliveryMode?: 'tellask_call_start' | 'func_call_requested';
|
|
444
444
|
}): Promise<void>;
|
|
@@ -670,7 +670,7 @@ export declare abstract class DialogStore {
|
|
|
670
670
|
/**
|
|
671
671
|
* Persist a function call to storage
|
|
672
672
|
*/
|
|
673
|
-
persistFunctionCall(_dialog: Dialog, _id: string, _name: string, _rawArgumentsText: string, _genseq: number): Promise<void>;
|
|
673
|
+
persistFunctionCall(_dialog: Dialog, _id: string, _name: string, _rawArgumentsText: string, _genseq: number, _rawId?: string): Promise<void>;
|
|
674
674
|
persistTellaskCall(_dialog: Dialog, _id: string, _name: TellaskCallRecordName, _rawArgumentsText: string, _genseq: number, _options?: {
|
|
675
675
|
deliveryMode?: 'tellask_call_start' | 'func_call_requested';
|
|
676
676
|
}): Promise<void>;
|
package/dist/dialog.js
CHANGED
|
@@ -1452,8 +1452,8 @@ class Dialog {
|
|
|
1452
1452
|
async persistUiOnlyMarkdown(content, genseq) {
|
|
1453
1453
|
return await this.dlgStore.persistUiOnlyMarkdown(this, content, genseq);
|
|
1454
1454
|
}
|
|
1455
|
-
async persistFunctionCall(id, name, rawArgumentsText, genseq) {
|
|
1456
|
-
return await this.dlgStore.persistFunctionCall(this, id, name, rawArgumentsText, genseq);
|
|
1455
|
+
async persistFunctionCall(id, name, rawArgumentsText, genseq, rawId) {
|
|
1456
|
+
return await this.dlgStore.persistFunctionCall(this, id, name, rawArgumentsText, genseq, rawId);
|
|
1457
1457
|
}
|
|
1458
1458
|
async persistTellaskCall(id, name, rawArgumentsText, genseq, options) {
|
|
1459
1459
|
return await this.dlgStore.persistTellaskCall(this, id, name, rawArgumentsText, genseq, options);
|
|
@@ -1895,7 +1895,7 @@ class DialogStore {
|
|
|
1895
1895
|
/**
|
|
1896
1896
|
* Persist a function call to storage
|
|
1897
1897
|
*/
|
|
1898
|
-
async persistFunctionCall(_dialog, _id, _name, _rawArgumentsText, _genseq) { }
|
|
1898
|
+
async persistFunctionCall(_dialog, _id, _name, _rawArgumentsText, _genseq, _rawId) { }
|
|
1899
1899
|
async persistTellaskCall(_dialog, _id, _name, _rawArgumentsText, _genseq, _options) { }
|
|
1900
1900
|
/**
|
|
1901
1901
|
* Start a new course in storage
|
|
@@ -10,10 +10,17 @@ is often not what operators want: they want the agent to keep pushing forward un
|
|
|
10
10
|
- legitimately suspends for a human decision (Q4H), or
|
|
11
11
|
- legitimately suspends waiting for Side Dialogs (tellask/backfill).
|
|
12
12
|
|
|
13
|
-
This document specifies
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
This document specifies two related runtime controls:
|
|
14
|
+
|
|
15
|
+
- **Auto-continue injection**: for **main dialogs only**, whenever the driver would otherwise stop,
|
|
16
|
+
runtime auto-sends a short diligence prompt (rendered as a normal user bubble) and continues
|
|
17
|
+
generation, except when the dialog is legitimately suspended (Q4H or pending Side Dialogs).
|
|
18
|
+
- **Required tool-use control**: for ordinary main and side dialog rounds, the Diligence Push
|
|
19
|
+
checkbox controls whether the provider request must end through a Dominds tool call. When checked,
|
|
20
|
+
the model is expected to call a tool such as `askHuman`, `tellask*`, `replyTellask*`, or another
|
|
21
|
+
runtime-provided function instead of stopping with a plain-text question/final answer. FBR middle
|
|
22
|
+
rounds are the intentional exception: they may run with no callable tools; FBR closure requires one
|
|
23
|
+
of the conclusion tools.
|
|
17
24
|
|
|
18
25
|
## Goals
|
|
19
26
|
|
|
@@ -25,7 +32,8 @@ is legitimately suspended (Q4H or pending Side Dialogs).
|
|
|
25
32
|
## Non-goals
|
|
26
33
|
|
|
27
34
|
- Auto-completing / auto-marking a dialog as done.
|
|
28
|
-
-
|
|
35
|
+
- Auto-injecting Diligence Push prompts into Side Dialogs (Side Dialogs remain scoped and should
|
|
36
|
+
report back to their tellasker).
|
|
29
37
|
|
|
30
38
|
## Definitions
|
|
31
39
|
|
|
@@ -74,15 +82,20 @@ To avoid infinite loops, diligence-push has a per-dialog budget (per-member `dil
|
|
|
74
82
|
how many auto-continued diligence prompts can be injected for a given dialog before the runtime stops
|
|
75
83
|
issuing further automatic Diligence Pushes for that budget.
|
|
76
84
|
|
|
77
|
-
- Default: **
|
|
78
|
-
- If `< 1`,
|
|
85
|
+
- Default: **99**
|
|
86
|
+
- If `< 1`, new dialogs start with no automatic Diligence Push budget
|
|
79
87
|
- Configurable per-member via `diligence-push-max` in `.minds/team.yaml`
|
|
80
88
|
|
|
81
|
-
|
|
89
|
+
Important: `diligence-push-max` is only the default budget used when a dialog instance is created
|
|
90
|
+
or reset. Runtime decisions must use the concrete dialog's remaining budget
|
|
91
|
+
(`diligencePushRemainingBudget`), so a manually refilled dialog can keep auto-continuing even when
|
|
92
|
+
the team default is `0`.
|
|
82
93
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
dialog
|
|
94
|
+
### Q4H suspension
|
|
95
|
+
|
|
96
|
+
When a dialog becomes suspended due to a pending Q4H (Questions for Human), Diligence Push stops
|
|
97
|
+
while that suspension is active. Q4H does not reapply the member default budget; the dialog keeps its
|
|
98
|
+
own remaining budget so operator adjustments survive the suspension boundary.
|
|
86
99
|
|
|
87
100
|
### Budget exhausted → stop auto-pushing for that budget
|
|
88
101
|
|
|
@@ -95,9 +108,8 @@ Diligence-push can be disabled per-rtws in either of these ways:
|
|
|
95
108
|
|
|
96
109
|
- If the selected diligence file exists but its content is empty/whitespace, diligence-push is disabled (no injection).
|
|
97
110
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
- If `diligence-push-max < 1`, diligence-push is disabled for that member (no injection).
|
|
111
|
+
To stop auto-continue for a specific dialog, set that dialog's remaining budget to `0` or use the
|
|
112
|
+
per-dialog Diligence Push disable switch.
|
|
101
113
|
|
|
102
114
|
## Diligence prompt resolution
|
|
103
115
|
|
|
@@ -114,9 +126,10 @@ If the first existing file in the above order has empty/whitespace content, **di
|
|
|
114
126
|
Note: YAML frontmatter in diligence files is **ignored** by the runtime. If present, it is treated as
|
|
115
127
|
non-content metadata and stripped from the prompt body.
|
|
116
128
|
|
|
117
|
-
### Team member
|
|
129
|
+
### Team member default budget: `diligence-push-max`
|
|
118
130
|
|
|
119
|
-
Each team member can optionally
|
|
131
|
+
Each team member can optionally set the starting Diligence Push budget for new or reset dialogs via
|
|
132
|
+
`.minds/team.yaml`:
|
|
120
133
|
|
|
121
134
|
```yaml
|
|
122
135
|
members:
|
|
@@ -127,7 +140,9 @@ members:
|
|
|
127
140
|
Rules:
|
|
128
141
|
|
|
129
142
|
- If missing, `diligence-push-max` defaults to **99** for that member.
|
|
130
|
-
- If `diligence-push-max < 1`,
|
|
143
|
+
- If `diligence-push-max < 1`, newly created dialogs start with remaining budget `0`.
|
|
144
|
+
- After creation or reset, runtime business logic follows the dialog's own remaining budget rather
|
|
145
|
+
than treating `diligence-push-max` as runtime authority.
|
|
131
146
|
- Built-in shadow members `fuxi` and `pangu` default to `diligence-push-max: 0` unless explicitly overridden in team.yaml.
|
|
132
147
|
|
|
133
148
|
## UX notes
|
|
@@ -9,7 +9,10 @@ Dominds 主线对话旨在长期运行。主线对话"停止"(变为空闲)
|
|
|
9
9
|
- 合法地暂停等待人类决策(Q4H),或
|
|
10
10
|
- 合法地暂停等待支线对话(tellask/backfill)。
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
本文档指定两个相关但不同的运行时控制:
|
|
13
|
+
|
|
14
|
+
- **自动续推注入**:仅针对**主线对话**,当驱动程序即将停止时,运行时会自动发送一个简短的鞭策语(渲染为正常的用户气泡)并继续生成,除非对话处于合法暂停状态(Q4H 或待处理的支线对话)。
|
|
15
|
+
- **强制工具调用控制**:对于普通的主线/支线对话轮次,`鞭策` 勾选项控制本轮 provider 请求是否必须通过 Dominds 工具结束。勾选时,模型应通过 `askHuman`、`tellask*`、`replyTellask*` 或其他运行时函数完成这一轮,而不是用普通文本直接收尾。FBR 中间轮是刻意例外:它们可以处于无可调用工具状态;FBR 收口阶段则必须调用两个结论工具之一。
|
|
13
16
|
|
|
14
17
|
## 目标
|
|
15
18
|
|
|
@@ -21,7 +24,7 @@ Dominds 主线对话旨在长期运行。主线对话"停止"(变为空闲)
|
|
|
21
24
|
## 非目标
|
|
22
25
|
|
|
23
26
|
- 自动完成/自动将对话标记为完成。
|
|
24
|
-
-
|
|
27
|
+
- 将自动鞭策语注入应用于支线对话(支线对话保持范围,应向其诉请者报告)。
|
|
25
28
|
|
|
26
29
|
## 定义
|
|
27
30
|
|
|
@@ -67,12 +70,15 @@ Dominds 主线对话旨在长期运行。主线对话"停止"(变为空闲)
|
|
|
67
70
|
为避免无限循环,diligence-push 有一个按对话的预算(每个成员的 `diligence-push-max`),控制对于给定对话在当前预算内还能注入多少个自动继续的鞭策语;预算耗尽后,运行时会停止继续自动鞭策。
|
|
68
71
|
|
|
69
72
|
- 默认值:**99**
|
|
70
|
-
- 如果 `< 1
|
|
73
|
+
- 如果 `< 1`,则新建对话从 0 个自动鞭策预算开始
|
|
71
74
|
- 可通过 `.minds/team.yaml` 中的 `diligence-push-max` 按成员配置
|
|
72
75
|
|
|
73
|
-
|
|
76
|
+
重要:`diligence-push-max` 只是在创建或重置对话实例时使用的默认预算。运行时业务判断必须以具体对话自己的剩余预算
|
|
77
|
+
(`diligencePushRemainingBudget`)为准;因此即使团队默认值是 `0`,手工补充过预算的对话也应继续自动鞭策。
|
|
78
|
+
|
|
79
|
+
### Q4H 暂停
|
|
74
80
|
|
|
75
|
-
当对话因待处理的 Q4H(Questions for Human
|
|
81
|
+
当对话因待处理的 Q4H(Questions for Human)而暂停时,鞭策会在该暂停期间停止。Q4H 不会重新套用成员默认预算;对话会保留自己的剩余预算,因此操作员调整过的预算能跨过暂停边界继续生效。
|
|
76
82
|
|
|
77
83
|
### 预算耗尽 → 停止继续自动鞭策当前预算
|
|
78
84
|
|
|
@@ -84,9 +90,7 @@ Dominds 主线对话旨在长期运行。主线对话"停止"(变为空闲)
|
|
|
84
90
|
|
|
85
91
|
- 如果选中的鞭策语文件存在但其内容为空/仅空白,则禁用 diligence-push(不注入)。
|
|
86
92
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
- 如果 `diligence-push-max < 1`,则该成员的 diligence-push 被禁用(不注入)。
|
|
93
|
+
若要停止某个具体对话的自动续推,应将该对话的剩余预算设为 `0`,或使用该对话自己的鞭策禁用开关。
|
|
90
94
|
|
|
91
95
|
## 鞭策语解析
|
|
92
96
|
|
|
@@ -102,9 +106,9 @@ Dominds 主线对话旨在长期运行。主线对话"停止"(变为空闲)
|
|
|
102
106
|
|
|
103
107
|
注意:鞭策语文件中的 YAML frontmatter 会被运行时忽略。如果存在,它被视为非内容元数据并从提示正文中剥离。
|
|
104
108
|
|
|
105
|
-
###
|
|
109
|
+
### 团队成员默认预算:`diligence-push-max`
|
|
106
110
|
|
|
107
|
-
每个团队成员可以选择通过 `.minds/team.yaml`
|
|
111
|
+
每个团队成员可以选择通过 `.minds/team.yaml` 设置新建或重置对话的鞭策起始预算:
|
|
108
112
|
|
|
109
113
|
```yaml
|
|
110
114
|
members:
|
|
@@ -115,7 +119,8 @@ members:
|
|
|
115
119
|
规则:
|
|
116
120
|
|
|
117
121
|
- 如果缺失,`diligence-push-max` 对于该成员默认为 **99**。
|
|
118
|
-
- 如果 `diligence-push-max < 1
|
|
122
|
+
- 如果 `diligence-push-max < 1`,则新建对话的剩余预算从 `0` 开始。
|
|
123
|
+
- 创建或重置之后,运行时业务逻辑以对话自己的剩余预算为准,而不是再次把 `diligence-push-max` 当作启停闸门。
|
|
119
124
|
- 内置影子成员 `fuxi` 和 `pangu` 默认为 `diligence-push-max: 0`,除非在 team.yaml 中显式覆盖。
|
|
120
125
|
|
|
121
126
|
## UX 备注
|
|
@@ -425,11 +425,11 @@ Example / 示例(概念):
|
|
|
425
425
|
|
|
426
426
|
### Diligence Push(鞭策)
|
|
427
427
|
|
|
428
|
-
- EN: A proactive continuation mechanism that nudges an agent forward when it's idle or blocked (a "Diligence Push"), using configurable prompts and
|
|
429
|
-
- ZH:
|
|
428
|
+
- EN: A proactive continuation mechanism that nudges an agent forward when it's idle or blocked (a "Diligence Push"), using configurable prompts and per-dialog remaining budgets. **Always use "Diligence Push"; never use "keep-going", "勤奋", "proactive-push", or "auto-continue".**
|
|
429
|
+
- ZH: 一种主动继续机制,在智能体空闲或阻塞时通过可配置的提示词和每个对话自己的剩余预算进行"鞭策"。**统一使用"鞭策";禁止使用"保持运行"、"勤奋"、"自动继续"、"催促"等变体。**
|
|
430
430
|
|
|
431
431
|
- EN: Related terms: "Diligence Push prompt" (prompt file), "Diligence Push-max" config, "Diligence Push injection" (prompt injection).
|
|
432
|
-
- ZH: 相关术语:"鞭策提示词"(提示词文件)、"
|
|
432
|
+
- ZH: 相关术语:"鞭策提示词"(提示词文件)、"鞭策默认预算"(配置项)、"鞭策注入"(注入机制)。
|
|
433
433
|
|
|
434
434
|
### 用词原则:者 / 器 与 -or / -er
|
|
435
435
|
|
package/dist/docs/fbr.md
CHANGED
|
@@ -14,12 +14,12 @@ The mechanism is the runtime-enforced contract applied to the spawned Side Dialo
|
|
|
14
14
|
|
|
15
15
|
## 2. Design principles and tradeoffs
|
|
16
16
|
|
|
17
|
-
### 2.1 Predictability first: FBR
|
|
17
|
+
### 2.1 Predictability first: FBR cannot use ordinary tools until final closure
|
|
18
18
|
|
|
19
19
|
FBR is meant to be “reasoning over text”, not “an agent run that explores the environment”. To keep it safe and
|
|
20
20
|
predictable, FBR Side Dialogs must be:
|
|
21
21
|
|
|
22
|
-
- **
|
|
22
|
+
- **isolated from ordinary tools during divergence/convergence** (no tellask / file / shell / browser / rtws access; provider requests may use `tool_choice: "none"` or equivalent), and
|
|
23
23
|
- **closure-only in the final stage** (exactly two conclusion functions, no other tools), and
|
|
24
24
|
- **body-first** (the tellask body is the authoritative task context).
|
|
25
25
|
|
|
@@ -75,12 +75,12 @@ When driving an FBR Side Dialog created by `freshBootsReasoning({ tellaskContent
|
|
|
75
75
|
Intuition: “fresh boots” means “fresh relative to the tellasker-side thread”, not “ignores baseline system rules”. Runtime may
|
|
76
76
|
still inject baseline policy/safety/formatting context, but the tellask body remains the authority.
|
|
77
77
|
|
|
78
|
-
### 4.2 Tool
|
|
78
|
+
### 4.2 Tool isolation (prompt + technical enforcement)
|
|
79
79
|
|
|
80
80
|
Tool-less FBR has two layers, both required:
|
|
81
81
|
|
|
82
82
|
1. **Prompt contract**: the runtime must communicate the current phase constraints unambiguously.
|
|
83
|
-
2. **API/transport contract**: divergence/convergence must
|
|
83
|
+
2. **API/transport contract**: divergence/convergence must expose no callable Dominds tools; final closure may expose exactly two conclusion functions and nothing else.
|
|
84
84
|
|
|
85
85
|
#### 4.2.1 System prompt requirements (no tool instructions)
|
|
86
86
|
|
|
@@ -110,12 +110,12 @@ If a provider integration normally injects a tool prompt or schema, then for FBR
|
|
|
110
110
|
|
|
111
111
|
Under no circumstances should the FBR Side Dialog see any tool definitions.
|
|
112
112
|
|
|
113
|
-
#### 4.2.3
|
|
113
|
+
#### 4.2.3 Divergence/convergence requests expose no callable tools
|
|
114
114
|
|
|
115
|
-
For divergence/convergence, the LLM request for an FBR Side Dialog (`freshBootsReasoning`) MUST have
|
|
115
|
+
For divergence/convergence, the LLM request for an FBR Side Dialog (`freshBootsReasoning`) MUST have no callable Dominds tools available:
|
|
116
116
|
|
|
117
117
|
- the request payload must not include tool/function definitions (effective tool list must be empty)
|
|
118
|
-
- provider tool-calling / function-calling modes
|
|
118
|
+
- provider tool-calling / function-calling modes should use `none` or the closest provider-equivalent disabled mode
|
|
119
119
|
|
|
120
120
|
In the final closure phase, runtime MAY expose exactly these two functions and no others:
|
|
121
121
|
|
|
@@ -217,7 +217,7 @@ members:
|
|
|
217
217
|
|
|
218
218
|
## 9. Acceptance checklist
|
|
219
219
|
|
|
220
|
-
- `freshBootsReasoning({ tellaskContent: "..." })` triggers
|
|
220
|
+
- `freshBootsReasoning({ tellaskContent: "..." })` triggers FBR; divergence/convergence expose no callable tools, and final closure requires one of the two conclusion tools.
|
|
221
221
|
- The system prompt body contains no tool instructions; tool-related wording comes only from the separate fixed notice.
|
|
222
222
|
- FBR Side Dialogs cannot issue teammate Tellasks (including `tellaskBack`).
|
|
223
223
|
- `fbr-effort` defaults to `3`, accepts `0..100`, rejects invalid values, and fails loudly when disabled.
|
package/dist/docs/fbr.zh.md
CHANGED
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
|
|
13
13
|
## 2. 设计原则与取舍(为什么这样做)
|
|
14
14
|
|
|
15
|
-
### 2.1 可预期优先:FBR
|
|
15
|
+
### 2.1 可预期优先:FBR 在最终收口前不得使用普通工具
|
|
16
16
|
|
|
17
17
|
FBR 的价值来自“把推理拉回文本”:让被诉请者只围绕诉请正文进行独立推理,而不是在工具、环境、副作用里游走。为此,FBR 支线对话必须满足:
|
|
18
18
|
|
|
19
|
-
-
|
|
19
|
+
- **发散/收敛阶段与普通工具隔离**(不能 tellask、读文件、跑 shell、浏览、访问 rtws;provider 请求可使用 `tool_choice: "none"` 或等价禁用模式)
|
|
20
20
|
- **最终收口阶段只开放两个结论函数**
|
|
21
21
|
- **上下文以诉请正文为权威**(不是“默认继承诉请者一侧历史”)
|
|
22
22
|
|
|
@@ -76,7 +76,7 @@ FBR 的价值来自“把推理拉回文本”:让被诉请者只围绕诉请
|
|
|
76
76
|
FBR 的阶段性约束必须同时满足两类要求:
|
|
77
77
|
|
|
78
78
|
1. **提示词契约**:运行时必须把当前阶段的能力边界表达得明确无歧义。
|
|
79
|
-
2. **API
|
|
79
|
+
2. **API/传输层契约**:发散/收敛阶段不得暴露任何可调用的 Dominds 工具;最终收口阶段只允许两个结论函数。
|
|
80
80
|
|
|
81
81
|
#### 4.2.1 system prompt 的要求(不得包含工具说明)
|
|
82
82
|
|
|
@@ -106,12 +106,12 @@ FBR 支线对话的 system prompt 必须明确包含(措辞可不同,但语
|
|
|
106
106
|
|
|
107
107
|
无论如何,FBR 支线对话都不应看到任何工具定义。
|
|
108
108
|
|
|
109
|
-
#### 4.2.3 发散/收敛阶段的 LLM
|
|
109
|
+
#### 4.2.3 发散/收敛阶段的 LLM 请求不得暴露可调用工具
|
|
110
110
|
|
|
111
|
-
发起 `freshBootsReasoning` FBR
|
|
111
|
+
发起 `freshBootsReasoning` FBR 支线对话的发散/收敛请求必须做到没有可调用的 Dominds 工具:
|
|
112
112
|
|
|
113
113
|
- 请求 payload 中不得包含任何 tool/function 定义(有效工具列表必须为空)
|
|
114
|
-
-
|
|
114
|
+
- provider 工具调用/函数调用模式应使用 `none` 或最接近的禁用模式
|
|
115
115
|
|
|
116
116
|
最终收口阶段,运行时只可开放以下两个函数:
|
|
117
117
|
|
|
@@ -212,7 +212,7 @@ members:
|
|
|
212
212
|
|
|
213
213
|
## 9. 验收清单(实现检查点)
|
|
214
214
|
|
|
215
|
-
- `freshBootsReasoning({ tellaskContent: "..." })` 触发 FBR
|
|
215
|
+
- `freshBootsReasoning({ tellaskContent: "..." })` 触发 FBR:发散/收敛阶段不得暴露可调用工具;最终收口阶段必须调用两个结论工具之一。
|
|
216
216
|
- system prompt 本体不含工具说明;工具相关文本只能来自独立、固定的“无工具提示”。
|
|
217
217
|
- FBR 支线对话不得发起队友诉请(包括 `tellaskBack`)。
|
|
218
218
|
- `fbr-effort` 默认 `3`,接受 `0..100`,禁用时明确报错拒绝。
|
|
@@ -12,6 +12,8 @@ This means:
|
|
|
12
12
|
- `apiType: anthropic` owns official Anthropic Messages semantics, including object-shaped `model_params.anthropic.thinking`.
|
|
13
13
|
- `apiType: anthropic-compatible` owns Anthropic-compatible gateway semantics, including boolean `model_params.anthropic-compatible.thinking` mapped to provider `enabled` / `disabled` request objects.
|
|
14
14
|
|
|
15
|
+
Some providers expose OpenAI-compatible or Anthropic-compatible endpoints while still requiring explicit provider quirks. Volcano Engine Ark Coding Plan now uses the OpenAI-compatible Chat Completions shape with its dedicated `/api/coding/v3` endpoint; the historical Anthropic-compatible Volcano tool-call quirks have been removed. See [`volcengine-coding-plan-openai-compatible.zh.md`](./volcengine-coding-plan-openai-compatible.zh.md) for the design record.
|
|
16
|
+
|
|
15
17
|
Similar field names across wrappers do not imply compatibility. For example, `reasoning_effort`, `verbosity`, `parallel_tool_calls`, and web search controls may look similar but can still differ in accepted values, payload shape, lifecycle events, validation rules, and runtime meaning.
|
|
16
18
|
|
|
17
19
|
## Hard Rules
|
|
@@ -12,6 +12,8 @@ Dominds 把每个 LLM provider wrapper 视为独立的协议适配器,而不
|
|
|
12
12
|
- `apiType: anthropic` 只负责 Anthropic 官方 Messages 语义,包括 object 形态的 `model_params.anthropic.thinking`。
|
|
13
13
|
- `apiType: anthropic-compatible` 负责 Anthropic 兼容网关语义,包括 boolean 形态的 `model_params.anthropic-compatible.thinking`,并映射为 provider 请求里的 `enabled` / `disabled` object。
|
|
14
14
|
|
|
15
|
+
某些 provider 虽然暴露 OpenAI-compatible 或 Anthropic-compatible endpoint,但仍可能需要明确的 provider quirk profile。火山方舟 Coding Plan 现在走 OpenAI-compatible Chat Completions 形态,并使用专属 `/api/coding/v3` endpoint;历史 Anthropic-compatible 火山工具调用 quirk 已取消。设计记录见 [`volcengine-coding-plan-openai-compatible.zh.md`](./volcengine-coding-plan-openai-compatible.zh.md)。
|
|
16
|
+
|
|
15
17
|
不同 wrapper 下看起来同名的字段,不代表它们可以互相兼容。比如 `reasoning_effort`、`verbosity`、`parallel_tool_calls`、web search 相关开关,名字可能相似,但可接受值、请求载荷形状、流事件生命周期、校验规则和运行时含义都可能不同。
|
|
16
18
|
|
|
17
19
|
## 强约束
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# MCP Prompts and Resources
|
|
2
|
+
|
|
3
|
+
This document defines how Dominds maps MCP prompts and resources into the runtime.
|
|
4
|
+
It extends the tool-focused MCP support described in [mcp-support.md](./mcp-support.md).
|
|
5
|
+
|
|
6
|
+
## Design Position
|
|
7
|
+
|
|
8
|
+
MCP primitives have different control semantics:
|
|
9
|
+
|
|
10
|
+
- **Tools** are model-controlled actions. Dominds exposes them as function tools.
|
|
11
|
+
- **Prompts** are user-controlled templates. Dominds exposes them as read-only snippets.
|
|
12
|
+
- **Resources** are application-controlled context objects. Dominds exposes them through a
|
|
13
|
+
resource registry and explicit read tools.
|
|
14
|
+
|
|
15
|
+
Dominds should not flatten all MCP primitives into ordinary model tools. Doing so loses the
|
|
16
|
+
control boundary that makes MCP debuggable and safe.
|
|
17
|
+
|
|
18
|
+
## Prompts -> Read-Only Snippets
|
|
19
|
+
|
|
20
|
+
MCP prompts are surfaced in the Snippets panel as read-only templates.
|
|
21
|
+
|
|
22
|
+
Expected behavior:
|
|
23
|
+
|
|
24
|
+
- `prompts/list` contributes dynamic snippet entries grouped by MCP server.
|
|
25
|
+
- `prompts/get` renders a selected prompt before insertion.
|
|
26
|
+
- Prompt arguments are collected by the UI before insertion when the prompt declares arguments.
|
|
27
|
+
- MCP prompt snippets cannot be edited or saved back through Dominds.
|
|
28
|
+
- Prompt IDs are Dominds-local stable IDs derived from server ID plus transformed MCP prompt name.
|
|
29
|
+
|
|
30
|
+
This keeps prompts user-selected while reusing the existing Dominds snippet workflow.
|
|
31
|
+
|
|
32
|
+
## Resources -> Resource Registry
|
|
33
|
+
|
|
34
|
+
MCP resources and resource templates are surfaced through a Dominds resource registry.
|
|
35
|
+
|
|
36
|
+
Resource entries:
|
|
37
|
+
|
|
38
|
+
- Static resources come from `resources/list`.
|
|
39
|
+
- Resource templates come from `resources/templates/list`.
|
|
40
|
+
- Static resource IDs are derived from the resource URI after configured transforms.
|
|
41
|
+
- Template resource IDs are derived from the URI template after configured transforms.
|
|
42
|
+
- The original URI or URI template remains the source of truth used for MCP requests.
|
|
43
|
+
|
|
44
|
+
The resource registry is intentionally separate from Dominds files, docs, and memory. Those
|
|
45
|
+
domains keep their existing dedicated concepts. The resource registry is the generic MCP-shaped
|
|
46
|
+
context surface.
|
|
47
|
+
|
|
48
|
+
## Resource Tools
|
|
49
|
+
|
|
50
|
+
Dominds provides explicit read-only tools:
|
|
51
|
+
|
|
52
|
+
- `list_resources`: list available resources and resource templates.
|
|
53
|
+
- `fetch_resource`: fetch a static resource or a rendered resource template.
|
|
54
|
+
|
|
55
|
+
Template fetching requires `arguments`. Passing arguments to a static resource is an error.
|
|
56
|
+
Missing template variables are errors. Oversized results and unsupported MIME types are errors,
|
|
57
|
+
not silent fallbacks.
|
|
58
|
+
|
|
59
|
+
## Resource Skills
|
|
60
|
+
|
|
61
|
+
Markdown resources with valid Agent Skill frontmatter may be exposed as read-only virtual skills.
|
|
62
|
+
|
|
63
|
+
Rules:
|
|
64
|
+
|
|
65
|
+
- Resource skills are opt-in through `.minds/mcp.yaml`.
|
|
66
|
+
- Only textual markdown resources are eligible.
|
|
67
|
+
- The frontmatter must pass the same validation as local Dominds skills.
|
|
68
|
+
- Resource skills are read-only and keep MCP provenance.
|
|
69
|
+
- Invalid or duplicate resource skills are reported loudly through Problems/logs.
|
|
70
|
+
|
|
71
|
+
Dominds skills are loaded as an index in the system prompt. Skill bodies are read on demand with
|
|
72
|
+
`read_skill`, so resource skills do not inflate every generation by default.
|
|
73
|
+
|
|
74
|
+
## Config Shape
|
|
75
|
+
|
|
76
|
+
Example:
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
version: 1
|
|
80
|
+
servers:
|
|
81
|
+
workstation:
|
|
82
|
+
transport: streamable_http
|
|
83
|
+
url: http://127.0.0.1:43178/mcp
|
|
84
|
+
headers:
|
|
85
|
+
Authorization: Bearer dw
|
|
86
|
+
|
|
87
|
+
prompts:
|
|
88
|
+
whitelist:
|
|
89
|
+
- 'workstation.*'
|
|
90
|
+
transform:
|
|
91
|
+
- prefix: 'workstation_'
|
|
92
|
+
|
|
93
|
+
resources:
|
|
94
|
+
whitelist:
|
|
95
|
+
- 'workstation-handbook://*'
|
|
96
|
+
- 'workstation-skill://*'
|
|
97
|
+
blacklist:
|
|
98
|
+
- '*secret*'
|
|
99
|
+
transform:
|
|
100
|
+
- prefix: 'workstation_'
|
|
101
|
+
mimeTypes:
|
|
102
|
+
- text/markdown
|
|
103
|
+
- text/plain
|
|
104
|
+
maxBytes: 50000
|
|
105
|
+
skills:
|
|
106
|
+
enabled: true
|
|
107
|
+
whitelist:
|
|
108
|
+
- 'workstation-skill://*'
|
|
109
|
+
transform:
|
|
110
|
+
- prefix: 'workstation_skill_'
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Filtering matches original MCP names/URIs/templates. Transforms only produce Dominds-local IDs.
|
|
114
|
+
|
|
115
|
+
## Non-Goals
|
|
116
|
+
|
|
117
|
+
- No write-back to MCP prompts or resources.
|
|
118
|
+
- No automatic conversion of every markdown resource into a skill.
|
|
119
|
+
- No implicit prompt/resource access for servers filtered out by `.minds/mcp.yaml`.
|
|
120
|
+
- No compatibility fallback that silently calls MCP tools when resources or prompts fail.
|
package/dist/docs/mcp-support.md
CHANGED
|
@@ -15,6 +15,8 @@ MCP TypeScript SDK):
|
|
|
15
15
|
|
|
16
16
|
- `.minds/mcp.yaml` loader with mandatory hot-reload.
|
|
17
17
|
- MCP-derived tools/toolsets registered into the existing global tool(set) registry.
|
|
18
|
+
- MCP prompts and resources are mapped separately from tools; see
|
|
19
|
+
[mcp-prompts-resources.md](./mcp-prompts-resources.md).
|
|
18
20
|
- Supported transports: `stdio` and `streamable_http` (SSE transport is not supported as a separate
|
|
19
21
|
config option).
|
|
20
22
|
- rtws Problems surfaced to the WebUI (Problems pill + panel) for MCP and LLM provider
|
|
@@ -326,8 +326,8 @@ used in `.minds/team.yaml` member configurations.
|
|
|
326
326
|
|
|
327
327
|
- `openai`: uses the OpenAI **Responses API** (best for OpenAI official endpoints; requires a `/v1`-style `responses` endpoint)
|
|
328
328
|
- `anthropic`: uses the official Anthropic **Messages API**. `model_params.anthropic.thinking` uses the official Anthropic object shape.
|
|
329
|
-
- `anthropic-compatible`: uses Anthropic-compatible **Messages API
|
|
330
|
-
- `openai-compatible`: uses the OpenAI **Chat Completions API** (best for most “OpenAI-compatible” third-party/proxy endpoints; e.g. a manually configured Ark `.../api/v3` endpoint)
|
|
329
|
+
- `anthropic-compatible`: uses Anthropic-compatible **Messages API**. `model_params.anthropic-compatible.thinking` uses the Dominds boolean switch: `true` sends `thinking.type=enabled`; `false` sends `thinking.type=disabled`.
|
|
330
|
+
- `openai-compatible`: uses the OpenAI **Chat Completions API** (best for most “OpenAI-compatible” third-party/proxy endpoints; e.g. a manually configured Ark `.../api/v3` endpoint; Volcano Engine Ark Coding Plan must use its dedicated `.../api/coding/v3` endpoint)
|
|
331
331
|
- **Vision support**: if the provider/model supports multimodal Chat Completions, Dominds will pass tool-output images (`func_result_msg.contentItems[].type=input_image`, e.g. from MCP tools) to the model as `image_url` inputs after reading the persisted artifact; unsupported mime types are downgraded to text.
|
|
332
332
|
|
|
333
333
|
```yaml
|
|
@@ -267,8 +267,8 @@
|
|
|
267
267
|
|
|
268
268
|
- `openai`:使用 OpenAI **Responses API**(适用于 OpenAI 官方;需要 `/v1` 语义的 `responses` 端点)
|
|
269
269
|
- `anthropic`:使用 Anthropic 官方 **Messages API**。`model_params.anthropic.thinking` 使用 Anthropic 官方 object 形态。
|
|
270
|
-
- `anthropic-compatible`:使用 Anthropic 兼容的 **Messages API
|
|
271
|
-
- `openai-compatible`:使用 OpenAI **Chat Completions API**(适用于多数“OpenAI 兼容”第三方/代理;例如手动配置的 Ark `.../api/v3` 端点)
|
|
270
|
+
- `anthropic-compatible`:使用 Anthropic 兼容的 **Messages API**。`model_params.anthropic-compatible.thinking` 使用 Dominds boolean 开关:`true` 发送 `thinking.type=enabled`,`false` 发送 `thinking.type=disabled`。
|
|
271
|
+
- `openai-compatible`:使用 OpenAI **Chat Completions API**(适用于多数“OpenAI 兼容”第三方/代理;例如手动配置的 Ark `.../api/v3` 端点;火山方舟 Coding Plan 必须使用专属 `.../api/coding/v3` 端点)
|
|
272
272
|
- **识图支持**:如果该 provider/model 支持 Chat Completions 的多模态输入,Dominds 会把工具输出里的图片(`func_result_msg.contentItems[].type=input_image`,来自 MCP 等工具)读取 artifact 后作为 `image_url` 形式喂给模型;不支持的 mimeType 会降级成文本提示。
|
|
273
273
|
|
|
274
274
|
```yaml
|
|
@@ -227,7 +227,10 @@ layer.
|
|
|
227
227
|
|
|
228
228
|
- WebUI tools widget no longer caches authority snapshots per dialog.
|
|
229
229
|
- The widget fetches a fresh `/api/tool-availability` snapshot and renders the composed visible
|
|
230
|
-
toolsets/
|
|
230
|
+
toolsets/standalone tools for the current context.
|
|
231
|
+
- Composition includes runtime-injected standalone tools such as `man` and `read_skill`, plus the
|
|
232
|
+
intrinsic `control` toolset with main-dialog vs side-dialog filtering, so the widget follows the
|
|
233
|
+
effective tools of a fresh drive/load rather than only static `.minds/team.yaml` bindings.
|
|
231
234
|
- In-flight prompts are still not rewritten retroactively. A fresh drive/load uses the latest
|
|
232
235
|
composed availability snapshot, which remains the intended contract.
|
|
233
236
|
- App-controlled dynamic availability is still intentionally narrow in surface area:
|