dominds 1.21.0 → 1.22.0
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 +13 -14
- package/dist/dialog-instance-registry.js +5 -2
- package/dist/docs/diligence-push.md +13 -5
- package/dist/docs/diligence-push.zh.md +5 -2
- 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 +11 -6
- package/dist/docs/team_mgmt-toolset.zh.md +5 -4
- package/dist/docs/tool-availability-protocol.md +4 -1
- package/dist/docs/volcengine-coding-plan-openai-compatible.zh.md +386 -0
- package/dist/llm/api-quirks.d.ts +4 -0
- package/dist/llm/api-quirks.js +74 -6
- package/dist/llm/defaults.yaml +23 -17
- package/dist/llm/gen/anthropic.d.ts +9 -2
- package/dist/llm/gen/anthropic.js +479 -120
- 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 +18 -4
- package/dist/llm/gen/openai-compatible.js +733 -192
- package/dist/llm/gen/openai.d.ts +2 -1
- package/dist/llm/gen/openai.js +24 -6
- package/dist/llm/gen.d.ts +2 -0
- package/dist/llm/kernel-driver/drive.js +43 -8
- package/dist/llm/kernel-driver/runtime.d.ts +1 -0
- package/dist/llm/kernel-driver/runtime.js +5 -4
- 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.js +4 -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 +25 -13
- package/dist/skills/load.d.ts +9 -1
- package/dist/skills/load.js +113 -20
- 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 +44 -0
- package/dist/tools/fs.d.ts +3 -0
- package/dist/tools/fs.js +297 -16
- package/dist/tools/manual/render.js +59 -0
- package/dist/tools/manual/spec.d.ts +1 -0
- package/dist/tools/manual/spec.js +1 -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/prompts/skills/en/errors.md +13 -0
- package/dist/tools/prompts/skills/en/index.md +10 -0
- package/dist/tools/prompts/skills/en/principles.md +8 -0
- package/dist/tools/prompts/skills/en/scenarios.md +35 -0
- package/dist/tools/prompts/skills/en/tools.md +27 -0
- package/dist/tools/prompts/skills/zh/errors.md +13 -0
- package/dist/tools/prompts/skills/zh/index.md +10 -0
- package/dist/tools/prompts/skills/zh/principles.md +8 -0
- package/dist/tools/prompts/skills/zh/scenarios.md +35 -0
- package/dist/tools/prompts/skills/zh/tools.md +27 -0
- package/dist/tools/prompts/ws_mod/en/tools.md +10 -0
- package/dist/tools/prompts/ws_mod/zh/tools.md +10 -0
- package/dist/tools/prompts/ws_read/en/index.md +8 -6
- package/dist/tools/prompts/ws_read/en/tools.md +25 -7
- package/dist/tools/prompts/ws_read/zh/index.md +8 -6
- package/dist/tools/prompts/ws_read/zh/tools.md +25 -7
- package/dist/tools/resources.d.ts +3 -0
- package/dist/tools/resources.js +183 -0
- package/dist/tools/skills.d.ts +6 -0
- package/dist/tools/skills.js +911 -0
- package/dist/tools/team_mgmt-manual.js +6 -6
- package/dist/tools/team_mgmt-mcp-manual.js +34 -19
- package/dist/tools/team_mgmt.d.ts +5 -0
- package/dist/tools/team_mgmt.js +335 -9
- 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-DALTrUR6.js → _basePickBy-BYnYcdaa.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-DALTrUR6.js.map → _basePickBy-BYnYcdaa.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-Ct6zuX8K.js → _baseUniq-CHLBB955.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-Ct6zuX8K.js.map → _baseUniq-CHLBB955.js.map} +1 -1
- package/webapp/dist/assets/{arc-C8McUO1O.js → arc-DQXtgZdO.js} +2 -2
- package/webapp/dist/assets/{arc-C8McUO1O.js.map → arc-DQXtgZdO.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CEGC5ev9.js → architectureDiagram-2XIMDMQ5-CzP5Yf9x.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CEGC5ev9.js.map → architectureDiagram-2XIMDMQ5-CzP5Yf9x.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-_UHgnZ4O.js → blockDiagram-WCTKOSBZ-sOx5Byq8.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-_UHgnZ4O.js.map → blockDiagram-WCTKOSBZ-sOx5Byq8.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-H26UgYXJ.js → c4Diagram-IC4MRINW-D8-GiS6c.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-H26UgYXJ.js.map → c4Diagram-IC4MRINW-D8-GiS6c.js.map} +1 -1
- package/webapp/dist/assets/{channel-B3Np_FaY.js → channel-Bvke0iMP.js} +2 -2
- package/webapp/dist/assets/{channel-B3Np_FaY.js.map → channel-Bvke0iMP.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-DgfTnQ-2.js → chunk-4BX2VUAB-C9pln2M7.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-DgfTnQ-2.js.map → chunk-4BX2VUAB-C9pln2M7.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-B7NYImSP.js → chunk-55IACEB6-BLDXNtAM.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-B7NYImSP.js.map → chunk-55IACEB6-BLDXNtAM.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-D0lml2o5.js → chunk-FMBD7UC4-dYd3QdHa.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-D0lml2o5.js.map → chunk-FMBD7UC4-dYd3QdHa.js.map} +1 -1
- package/webapp/dist/assets/{chunk-JSJVCQXG-ea_U6N63.js → chunk-JSJVCQXG-SqHEmHHd.js} +2 -2
- package/webapp/dist/assets/{chunk-JSJVCQXG-ea_U6N63.js.map → chunk-JSJVCQXG-SqHEmHHd.js.map} +1 -1
- package/webapp/dist/assets/{chunk-KX2RTZJC-B8y-NuK2.js → chunk-KX2RTZJC-CRXgzI2d.js} +2 -2
- package/webapp/dist/assets/{chunk-KX2RTZJC-B8y-NuK2.js.map → chunk-KX2RTZJC-CRXgzI2d.js.map} +1 -1
- package/webapp/dist/assets/{chunk-NQ4KR5QH-BQo9vkyL.js → chunk-NQ4KR5QH-IMA2JZhH.js} +4 -4
- package/webapp/dist/assets/{chunk-NQ4KR5QH-BQo9vkyL.js.map → chunk-NQ4KR5QH-IMA2JZhH.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-D20IGCZ0.js → chunk-QZHKN3VN-DBaGWjY3.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-D20IGCZ0.js.map → chunk-QZHKN3VN-DBaGWjY3.js.map} +1 -1
- package/webapp/dist/assets/{chunk-WL4C6EOR-W2SB0exS.js → chunk-WL4C6EOR-QLmsLbcS.js} +6 -6
- package/webapp/dist/assets/{chunk-WL4C6EOR-W2SB0exS.js.map → chunk-WL4C6EOR-QLmsLbcS.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-CCyd2n1g.js → classDiagram-VBA2DB6C-jN4lhUtx.js} +7 -7
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-CCyd2n1g.js.map → classDiagram-VBA2DB6C-jN4lhUtx.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-CCyd2n1g.js → classDiagram-v2-RAHNMMFH-jN4lhUtx.js} +7 -7
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-CCyd2n1g.js.map → classDiagram-v2-RAHNMMFH-jN4lhUtx.js.map} +1 -1
- package/webapp/dist/assets/{clone-BcYWI-ZT.js → clone-DPC4Vt09.js} +2 -2
- package/webapp/dist/assets/{clone-BcYWI-ZT.js.map → clone-DPC4Vt09.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BSOmDWTn.js → cose-bilkent-S5V4N54A-BtVgObsc.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BSOmDWTn.js.map → cose-bilkent-S5V4N54A-BtVgObsc.js.map} +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-BltY2wl7.js → dagre-KLK3FWXG-Bv6mn-UV.js} +7 -7
- package/webapp/dist/assets/{dagre-KLK3FWXG-BltY2wl7.js.map → dagre-KLK3FWXG-Bv6mn-UV.js.map} +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-Bnov-gQQ.js → diagram-E7M64L7V-D2OPgDkq.js} +8 -8
- package/webapp/dist/assets/{diagram-E7M64L7V-Bnov-gQQ.js.map → diagram-E7M64L7V-D2OPgDkq.js.map} +1 -1
- package/webapp/dist/assets/{diagram-IFDJBPK2-3QdI65tR.js → diagram-IFDJBPK2-CZpDu-e5.js} +7 -7
- package/webapp/dist/assets/{diagram-IFDJBPK2-3QdI65tR.js.map → diagram-IFDJBPK2-CZpDu-e5.js.map} +1 -1
- package/webapp/dist/assets/{diagram-P4PSJMXO-QDyoRzyu.js → diagram-P4PSJMXO-BkMbbW0p.js} +7 -7
- package/webapp/dist/assets/{diagram-P4PSJMXO-QDyoRzyu.js.map → diagram-P4PSJMXO-BkMbbW0p.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-INFDFZHY-Ce0rHVXh.js → erDiagram-INFDFZHY-Kf17ek1z.js} +5 -5
- package/webapp/dist/assets/{erDiagram-INFDFZHY-Ce0rHVXh.js.map → erDiagram-INFDFZHY-Kf17ek1z.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-Cg_pSmnh.js → flowDiagram-PKNHOUZH-Cort4hNL.js} +7 -7
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-Cg_pSmnh.js.map → flowDiagram-PKNHOUZH-Cort4hNL.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-DvvtGk3D.js → ganttDiagram-A5KZAMGK-DcXFKB1Y.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-DvvtGk3D.js.map → ganttDiagram-A5KZAMGK-DcXFKB1Y.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-BD6Jswe_.js → gitGraphDiagram-K3NZZRJ6-BORnqZ0-.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-BD6Jswe_.js.map → gitGraphDiagram-K3NZZRJ6-BORnqZ0-.js.map} +1 -1
- package/webapp/dist/assets/{graph-C9jJ1Bv-.js → graph-D4Uth-MK.js} +3 -3
- package/webapp/dist/assets/{graph-C9jJ1Bv-.js.map → graph-D4Uth-MK.js.map} +1 -1
- package/webapp/dist/assets/{index-i_R7w1hQ.js → index-YBIJr7jH.js} +302 -129
- package/webapp/dist/assets/{index-i_R7w1hQ.js.map → index-YBIJr7jH.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-DQHdRh4Q.js → infoDiagram-LFFYTUFH-DDjsEPg3.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-DQHdRh4Q.js.map → infoDiagram-LFFYTUFH-DDjsEPg3.js.map} +1 -1
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-CzaWPbGe.js → ishikawaDiagram-PHBUUO56-Bb2sPnCX.js} +2 -2
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-CzaWPbGe.js.map → ishikawaDiagram-PHBUUO56-Bb2sPnCX.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-8G8rcD3o.js → journeyDiagram-4ABVD52K-BtRY6eBa.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-8G8rcD3o.js.map → journeyDiagram-4ABVD52K-BtRY6eBa.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-5BVvFxtu.js → kanban-definition-K7BYSVSG-aGmxT2H9.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-5BVvFxtu.js.map → kanban-definition-K7BYSVSG-aGmxT2H9.js.map} +1 -1
- package/webapp/dist/assets/{layout-DtLoWiZt.js → layout-BuLicmwh.js} +5 -5
- package/webapp/dist/assets/{layout-DtLoWiZt.js.map → layout-BuLicmwh.js.map} +1 -1
- package/webapp/dist/assets/{linear-248taKqA.js → linear-DIPh96mp.js} +2 -2
- package/webapp/dist/assets/{linear-248taKqA.js.map → linear-DIPh96mp.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-36DiW7W4.js → mindmap-definition-YRQLILUH-ofWsysn9.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-36DiW7W4.js.map → mindmap-definition-YRQLILUH-ofWsysn9.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-BKywZ2gZ.js → pieDiagram-SKSYHLDU-DQqCTITO.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-BKywZ2gZ.js.map → pieDiagram-SKSYHLDU-DQqCTITO.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-BRSGJe_7.js → quadrantDiagram-337W2JSQ-DxWc0avu.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-BRSGJe_7.js.map → quadrantDiagram-337W2JSQ-DxWc0avu.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-DR5uqpu_.js → requirementDiagram-Z7DCOOCP-DHgYfzwt.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-DR5uqpu_.js.map → requirementDiagram-Z7DCOOCP-DHgYfzwt.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-BPPCgHPi.js → sankeyDiagram-WA2Y5GQK-Cuhwe80W.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-BPPCgHPi.js.map → sankeyDiagram-WA2Y5GQK-Cuhwe80W.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-_LPADDBa.js → sequenceDiagram-2WXFIKYE-DqSNoro8.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-_LPADDBa.js.map → sequenceDiagram-2WXFIKYE-DqSNoro8.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-QcP2FlqB.js → stateDiagram-RAJIS63D-D1mvuJi6.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-QcP2FlqB.js.map → stateDiagram-RAJIS63D-D1mvuJi6.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-CPTaAnAl.js → stateDiagram-v2-FVOUBMTO-BCYX5Gy-.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-CPTaAnAl.js.map → stateDiagram-v2-FVOUBMTO-BCYX5Gy-.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-DdzSb9za.js → timeline-definition-YZTLITO2-DDLYGao7.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-DdzSb9za.js.map → timeline-definition-YZTLITO2-DDLYGao7.js.map} +1 -1
- package/webapp/dist/assets/{treemap-KZPCXAKY-C6SI9m0Q.js → treemap-KZPCXAKY-DXkv1e6y.js} +5 -5
- package/webapp/dist/assets/{treemap-KZPCXAKY-C6SI9m0Q.js.map → treemap-KZPCXAKY-DXkv1e6y.js.map} +1 -1
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-qSqddmnT.js → vennDiagram-LZ73GAT5-DMxsg9P0.js} +2 -2
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-qSqddmnT.js.map → vennDiagram-LZ73GAT5-DMxsg9P0.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-4xSt7JsB.js → xychartDiagram-JWTSCODW-BJ2qipzT.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-4xSt7JsB.js.map → xychartDiagram-JWTSCODW-BJ2qipzT.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
package/dist/access-control.js
CHANGED
|
@@ -58,6 +58,15 @@ function hasFileExtAccess(fileExtName, whitelist, blacklist) {
|
|
|
58
58
|
}
|
|
59
59
|
return false;
|
|
60
60
|
}
|
|
61
|
+
function resolveRtwsRelativePath(targetPath) {
|
|
62
|
+
const cwd = path_1.default.resolve(process.cwd());
|
|
63
|
+
const resolvedPath = path_1.default.resolve(cwd, targetPath);
|
|
64
|
+
const relativePath = path_1.default.relative(cwd, resolvedPath);
|
|
65
|
+
if (relativePath === '' || (!relativePath.startsWith('..') && !path_1.default.isAbsolute(relativePath))) {
|
|
66
|
+
return relativePath;
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
61
70
|
/**
|
|
62
71
|
* Directory-specific pattern matching for access control.
|
|
63
72
|
* This function determines if a target path (file or directory) should be controlled
|
|
@@ -175,15 +184,10 @@ function matchesPattern(targetPath, dirPattern) {
|
|
|
175
184
|
* 6. If whitelist patterns exist but none match, deny access
|
|
176
185
|
*/
|
|
177
186
|
function hasReadAccess(member, targetPath) {
|
|
178
|
-
// Get resolved relative path from rtws root
|
|
179
|
-
const cwd = path_1.default.resolve(process.cwd());
|
|
180
|
-
const resolvedPath = path_1.default.resolve(cwd, targetPath);
|
|
181
187
|
// Ensure path is within rtws
|
|
182
|
-
|
|
188
|
+
const relativePath = resolveRtwsRelativePath(targetPath);
|
|
189
|
+
if (relativePath === null)
|
|
183
190
|
return false;
|
|
184
|
-
}
|
|
185
|
-
// Get relative path from rtws root
|
|
186
|
-
const relativePath = path_1.default.relative(cwd, resolvedPath);
|
|
187
191
|
// Taskdocs (`*.tsk/`) are encapsulated and hard-denied for all general file tools.
|
|
188
192
|
if (isEncapsulatedTaskPath(relativePath)) {
|
|
189
193
|
return false;
|
|
@@ -238,15 +242,10 @@ function hasReadAccess(member, targetPath) {
|
|
|
238
242
|
* 6. If whitelist patterns exist but none match, deny access
|
|
239
243
|
*/
|
|
240
244
|
function hasWriteAccess(member, targetPath) {
|
|
241
|
-
// Get resolved relative path from rtws root
|
|
242
|
-
const cwd = path_1.default.resolve(process.cwd());
|
|
243
|
-
const resolvedPath = path_1.default.resolve(cwd, targetPath);
|
|
244
245
|
// Ensure path is within rtws
|
|
245
|
-
|
|
246
|
+
const relativePath = resolveRtwsRelativePath(targetPath);
|
|
247
|
+
if (relativePath === null)
|
|
246
248
|
return false;
|
|
247
|
-
}
|
|
248
|
-
// Get relative path from rtws root
|
|
249
|
-
const relativePath = path_1.default.relative(cwd, resolvedPath);
|
|
250
249
|
// Taskdocs (`*.tsk/`) are encapsulated and hard-denied for all general file tools.
|
|
251
250
|
if (isEncapsulatedTaskPath(relativePath)) {
|
|
252
251
|
return false;
|
|
@@ -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,
|
|
@@ -154,7 +154,10 @@ async function ensureDialogLoaded(mainDialog, targetId, status, visitedSelfIds =
|
|
|
154
154
|
contextHealth: state.contextHealth,
|
|
155
155
|
pendingCourseStartPrompt,
|
|
156
156
|
});
|
|
157
|
-
sideDialog.disableDiligencePush =
|
|
157
|
+
sideDialog.disableDiligencePush =
|
|
158
|
+
latest && typeof latest.disableDiligencePush === 'boolean'
|
|
159
|
+
? latest.disableDiligencePush
|
|
160
|
+
: false;
|
|
158
161
|
if (sideDialog.sessionSlug) {
|
|
159
162
|
mainDialog.registerSideDialog(sideDialog);
|
|
160
163
|
}
|
|
@@ -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
|
|
|
@@ -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
|
|
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 an explicit provider quirk profile. Volcano Engine Ark Coding Plan is the canonical example: its OpenAI-compatible integration reuses the Chat Completions transport shape, but `thinking`, `reasoning_content`, tool-call/thinking alternation, `<think>` compatibility, and model capability metadata must stay inside the `volcengine-coding-plan` quirk instead of becoming generic `openai-compatible` semantics. 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 的基础传输形态,但它的 `thinking`、`reasoning_content`、工具调用交替、`<think>` 兼容与模型能力表必须留在 `volcengine-coding-plan` 专项 quirk 中,不能进入通用 `openai-compatible` 语义。设计记录见 [`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 and declare the matching quirk)
|
|
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
|
|
@@ -394,11 +394,16 @@ Notes:
|
|
|
394
394
|
- `content` / `sections`: inline team-management guidance shown in the `team_mgmt` MCP chapter (`sections` supports `[{ title, content }]` or `{ "<title>": "<content>" }`)
|
|
395
395
|
- Missing manual does **not** mean the toolset is unavailable. Standard tool metadata comes from MCP
|
|
396
396
|
`tools/list`; agents should continue by reading each tool’s own description/arguments. Dominds
|
|
397
|
-
still reports a warning so the team can add at least a short overall positioning note
|
|
397
|
+
still reports a warning so the team can add at least a short overall positioning note and list
|
|
398
|
+
tool names to clarify attribution.
|
|
398
399
|
- Team-manager recommendation: after MCP config validation passes, rely on MCP-provided tool
|
|
399
|
-
descriptions/arguments first, and still write a short positioning note for each MCP server
|
|
400
|
-
|
|
401
|
-
|
|
400
|
+
descriptions/arguments first, and still write a short positioning note for each MCP server and
|
|
401
|
+
list tool names to make clear which tools belong to this toolset. Use `manual.contentFile` or
|
|
402
|
+
inline `content + sections` for richer handwritten guidance such as examples, pitfalls, safety
|
|
403
|
+
boundaries, failure handling, and coordination norms.
|
|
404
|
+
- Tool-list writing rule: list tool names, with a short purpose group when useful; do not copy
|
|
405
|
+
parameter schemas or long tool descriptions, because those contracts are provided by
|
|
406
|
+
function-tool definitions in the system prompt.
|
|
402
407
|
- Use a semi-structured chapter shape for optional enhancements: high-value sections often include
|
|
403
408
|
`When To Use`, `Guardrails`, and `Business Handling When Unavailable`, but do not force every
|
|
404
409
|
toolset into one fixed template.
|
|
@@ -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` 端点并声明对应 quirk)
|
|
272
272
|
- **识图支持**:如果该 provider/model 支持 Chat Completions 的多模态输入,Dominds 会把工具输出里的图片(`func_result_msg.contentItems[].type=input_image`,来自 MCP 等工具)读取 artifact 后作为 `image_url` 形式喂给模型;不支持的 mimeType 会降级成文本提示。
|
|
273
273
|
|
|
274
274
|
```yaml
|
|
@@ -328,8 +328,9 @@ members:
|
|
|
328
328
|
- 可选手册:可在 `.minds/mcp.yaml` 的 `servers.<serverId>.manual` 提供手册相关信息:
|
|
329
329
|
- `contentFile`:正式 runtime 手册的 topic 文件目录前缀;`man({ "toolsetId": "<serverId>" })` 最终给 LLM 看的正文从这里加载,包括 `scenarios`、`errors` 等手写章节
|
|
330
330
|
- `content` / `sections`:补充给 `team_mgmt` MCP 章节看的 inline 团队管理说明(`sections` 支持 `[{ title, content }]` 或 `{ "<title>": "<content>" }`)
|
|
331
|
-
- 没有手册 **不代表** 该 toolset 不可用;标准工具元数据来自 MCP `tools/list`。智能体应继续依据每个工具自身的 description/参数来使用。Dominds 仍会发出 warning
|
|
332
|
-
- 建议团队管理者在 MCP 配置验证通过后,优先依赖 MCP server 暴露的工具 description/参数;同时给每个 MCP server
|
|
331
|
+
- 没有手册 **不代表** 该 toolset 不可用;标准工具元数据来自 MCP `tools/list`。智能体应继续依据每个工具自身的 description/参数来使用。Dominds 仍会发出 warning,提醒团队至少补充简短整体定位说明,并列出工具名清单以澄清归属关系。
|
|
332
|
+
- 建议团队管理者在 MCP 配置验证通过后,优先依赖 MCP server 暴露的工具 description/参数;同时给每个 MCP server 写一段简短定位,并列出工具名清单,明确“哪些工具属于这个 toolset”。若需要更完整的综合示例、避坑指南、安全边界、故障处置或协作规范,再写 `manual.contentFile` 或 inline `content + sections`。
|
|
333
|
+
- 工具列表只列工具名即可,必要时补一句用途归类;不要复制参数 schema 或长篇工具 description,因为这些契约由系统提示里的函数工具定义提供。
|
|
333
334
|
- 可选增强的章节组织建议采用“半结构化”:可优先考虑 `何时使用`、`安全边界`、`不可用时业务处置` 这类高价值章节,但不要求所有 toolset 都照抄同一模板。
|
|
334
335
|
- 对高风险 MCP toolset,建议明确“不可用时业务处置规约”,至少回答:
|
|
335
336
|
- 当前 toolset 暂不可达时,是否必须找协调者/专员接手
|
|
@@ -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:
|