dominds 1.22.1 → 1.23.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 +2 -2
- package/dist/docs/dialog-system.md +3 -2
- package/dist/docs/dialog-system.zh.md +3 -2
- package/dist/docs/encapsulated-taskdoc.md +11 -2
- package/dist/docs/encapsulated-taskdoc.zh.md +10 -1
- package/dist/docs/llm-provider-isolation.md +1 -1
- package/dist/docs/llm-provider-isolation.zh.md +1 -1
- package/dist/docs/team_mgmt-toolset.md +1 -0
- package/dist/docs/team_mgmt-toolset.zh.md +1 -0
- package/dist/llm/defaults.yaml +43 -0
- package/dist/llm/gen/openai-compatible.d.ts +3 -0
- package/dist/llm/gen/openai-compatible.js +294 -11
- package/dist/minds/system-prompt-parts.js +8 -8
- package/dist/runtime/driver-messages.js +4 -4
- package/dist/team.d.ts +2 -1
- package/dist/team.js +11 -1
- package/dist/tools/ctrl.js +48 -11
- package/dist/tools/prompts/control/en/principles.md +3 -3
- package/dist/tools/prompts/control/en/scenarios.md +4 -0
- package/dist/tools/prompts/control/en/tools.md +6 -3
- package/dist/tools/prompts/control/zh/principles.md +3 -3
- package/dist/tools/prompts/control/zh/scenarios.md +4 -0
- package/dist/tools/prompts/control/zh/tools.md +6 -3
- package/dist/tools/team_mgmt-manual.js +2 -2
- package/dist/tools/team_mgmt.js +2 -2
- package/dist/utils/task-package.d.ts +16 -0
- package/dist/utils/task-package.js +132 -55
- package/dist/utils/taskdoc.js +21 -16
- package/package.json +2 -2
- package/webapp/dist/assets/{_basePickBy-DUbW5G8a.js → _basePickBy-CGhMqD96.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-DUbW5G8a.js.map → _basePickBy-CGhMqD96.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-vou1IeXB.js → _baseUniq-XCMW7z1Y.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-vou1IeXB.js.map → _baseUniq-XCMW7z1Y.js.map} +1 -1
- package/webapp/dist/assets/{arc-D_O9oO0B.js → arc-B6fzk0T5.js} +2 -2
- package/webapp/dist/assets/{arc-D_O9oO0B.js.map → arc-B6fzk0T5.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-B7k9SWSL.js → architectureDiagram-2XIMDMQ5-DmSI_GUt.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-B7k9SWSL.js.map → architectureDiagram-2XIMDMQ5-DmSI_GUt.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-e3xTmffi.js → blockDiagram-WCTKOSBZ-Bp0nb8IZ.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-e3xTmffi.js.map → blockDiagram-WCTKOSBZ-Bp0nb8IZ.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-DVvi-N2o.js → c4Diagram-IC4MRINW-gYpylqGb.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-DVvi-N2o.js.map → c4Diagram-IC4MRINW-gYpylqGb.js.map} +1 -1
- package/webapp/dist/assets/{channel-CH387UD2.js → channel-BmQ3YyUn.js} +2 -2
- package/webapp/dist/assets/{channel-CH387UD2.js.map → channel-BmQ3YyUn.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-BOo0Xj3m.js → chunk-4BX2VUAB-B5pwFRwA.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-BOo0Xj3m.js.map → chunk-4BX2VUAB-B5pwFRwA.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-CI4uRAx_.js → chunk-55IACEB6-CZf6oMWM.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-CI4uRAx_.js.map → chunk-55IACEB6-CZf6oMWM.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-C4N1ovxD.js → chunk-FMBD7UC4-yZWCDzVz.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-C4N1ovxD.js.map → chunk-FMBD7UC4-yZWCDzVz.js.map} +1 -1
- package/webapp/dist/assets/{chunk-JSJVCQXG-5U4Hu7pC.js → chunk-JSJVCQXG-Cg1ST73M.js} +2 -2
- package/webapp/dist/assets/{chunk-JSJVCQXG-5U4Hu7pC.js.map → chunk-JSJVCQXG-Cg1ST73M.js.map} +1 -1
- package/webapp/dist/assets/{chunk-KX2RTZJC-BXPDNuct.js → chunk-KX2RTZJC-ByGtlX9q.js} +2 -2
- package/webapp/dist/assets/{chunk-KX2RTZJC-BXPDNuct.js.map → chunk-KX2RTZJC-ByGtlX9q.js.map} +1 -1
- package/webapp/dist/assets/{chunk-NQ4KR5QH-oVsExnnn.js → chunk-NQ4KR5QH-DoXvfhSY.js} +4 -4
- package/webapp/dist/assets/{chunk-NQ4KR5QH-oVsExnnn.js.map → chunk-NQ4KR5QH-DoXvfhSY.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-C6FzEv2C.js → chunk-QZHKN3VN-2gX2qsHB.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-C6FzEv2C.js.map → chunk-QZHKN3VN-2gX2qsHB.js.map} +1 -1
- package/webapp/dist/assets/{chunk-WL4C6EOR-Ir7e_B7t.js → chunk-WL4C6EOR-L-9bPNxS.js} +6 -6
- package/webapp/dist/assets/{chunk-WL4C6EOR-Ir7e_B7t.js.map → chunk-WL4C6EOR-L-9bPNxS.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-CPYs_LAr.js → classDiagram-VBA2DB6C-B79Oe3Df.js} +7 -7
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-CPYs_LAr.js.map → classDiagram-VBA2DB6C-B79Oe3Df.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-CPYs_LAr.js → classDiagram-v2-RAHNMMFH-B79Oe3Df.js} +7 -7
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-CPYs_LAr.js.map → classDiagram-v2-RAHNMMFH-B79Oe3Df.js.map} +1 -1
- package/webapp/dist/assets/{clone-CToca8rS.js → clone-DvlY9Sdn.js} +2 -2
- package/webapp/dist/assets/{clone-CToca8rS.js.map → clone-DvlY9Sdn.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-DLNtqY7a.js → cose-bilkent-S5V4N54A-CtkGd0W6.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-DLNtqY7a.js.map → cose-bilkent-S5V4N54A-CtkGd0W6.js.map} +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-Bkt-O9uW.js → dagre-KLK3FWXG-B3W6QTXQ.js} +7 -7
- package/webapp/dist/assets/{dagre-KLK3FWXG-Bkt-O9uW.js.map → dagre-KLK3FWXG-B3W6QTXQ.js.map} +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-B4JR_u4V.js → diagram-E7M64L7V-B6-J_E5Q.js} +8 -8
- package/webapp/dist/assets/{diagram-E7M64L7V-B4JR_u4V.js.map → diagram-E7M64L7V-B6-J_E5Q.js.map} +1 -1
- package/webapp/dist/assets/{diagram-IFDJBPK2-D9zRh8b7.js → diagram-IFDJBPK2-C-PH_Yx3.js} +7 -7
- package/webapp/dist/assets/{diagram-IFDJBPK2-D9zRh8b7.js.map → diagram-IFDJBPK2-C-PH_Yx3.js.map} +1 -1
- package/webapp/dist/assets/{diagram-P4PSJMXO-CAaXVWnX.js → diagram-P4PSJMXO-CB5xXDup.js} +7 -7
- package/webapp/dist/assets/{diagram-P4PSJMXO-CAaXVWnX.js.map → diagram-P4PSJMXO-CB5xXDup.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-INFDFZHY-DDeoaSkJ.js → erDiagram-INFDFZHY-CuAhTGVU.js} +5 -5
- package/webapp/dist/assets/{erDiagram-INFDFZHY-DDeoaSkJ.js.map → erDiagram-INFDFZHY-CuAhTGVU.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-DEYqzSEJ.js → flowDiagram-PKNHOUZH-D3cIOfGj.js} +7 -7
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-DEYqzSEJ.js.map → flowDiagram-PKNHOUZH-D3cIOfGj.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-BuLOSh0d.js → ganttDiagram-A5KZAMGK-CSFhVYXV.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-BuLOSh0d.js.map → ganttDiagram-A5KZAMGK-CSFhVYXV.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-CBrwZvBf.js → gitGraphDiagram-K3NZZRJ6-CiEaxACG.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-CBrwZvBf.js.map → gitGraphDiagram-K3NZZRJ6-CiEaxACG.js.map} +1 -1
- package/webapp/dist/assets/{graph-fX6cvjwR.js → graph-CYGALRuy.js} +3 -3
- package/webapp/dist/assets/{graph-fX6cvjwR.js.map → graph-CYGALRuy.js.map} +1 -1
- package/webapp/dist/assets/{index-B3WzTLcD.js → index-BTazqQrV.js} +152 -51
- package/webapp/dist/assets/{index-B3WzTLcD.js.map → index-BTazqQrV.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-Ci3XYvve.js → infoDiagram-LFFYTUFH-CiWJjQyU.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-Ci3XYvve.js.map → infoDiagram-LFFYTUFH-CiWJjQyU.js.map} +1 -1
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-DOH5ua9R.js → ishikawaDiagram-PHBUUO56-MlIIUO7o.js} +2 -2
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-DOH5ua9R.js.map → ishikawaDiagram-PHBUUO56-MlIIUO7o.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-DM_fiZlj.js → journeyDiagram-4ABVD52K-BBqwkA3d.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-DM_fiZlj.js.map → journeyDiagram-4ABVD52K-BBqwkA3d.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-CSh2hqc2.js → kanban-definition-K7BYSVSG-BS4GzDbo.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-CSh2hqc2.js.map → kanban-definition-K7BYSVSG-BS4GzDbo.js.map} +1 -1
- package/webapp/dist/assets/{layout-yZEK1LgL.js → layout-DaJO-1DW.js} +5 -5
- package/webapp/dist/assets/{layout-yZEK1LgL.js.map → layout-DaJO-1DW.js.map} +1 -1
- package/webapp/dist/assets/{linear-m76SmdtZ.js → linear-SWy2Cl7G.js} +2 -2
- package/webapp/dist/assets/{linear-m76SmdtZ.js.map → linear-SWy2Cl7G.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-NiwP-SLH.js → mindmap-definition-YRQLILUH-B_gNrT3l.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-NiwP-SLH.js.map → mindmap-definition-YRQLILUH-B_gNrT3l.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-CSCapDSD.js → pieDiagram-SKSYHLDU-CVh3lLBA.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-CSCapDSD.js.map → pieDiagram-SKSYHLDU-CVh3lLBA.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-CbDGQH91.js → quadrantDiagram-337W2JSQ-D0zAkVD7.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-CbDGQH91.js.map → quadrantDiagram-337W2JSQ-D0zAkVD7.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-CeG2yodp.js → requirementDiagram-Z7DCOOCP--CTFD60w.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-CeG2yodp.js.map → requirementDiagram-Z7DCOOCP--CTFD60w.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-B_l8tKqa.js → sankeyDiagram-WA2Y5GQK-XZnViaAX.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-B_l8tKqa.js.map → sankeyDiagram-WA2Y5GQK-XZnViaAX.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-Dc5gBIi5.js → sequenceDiagram-2WXFIKYE-BWAMhn_x.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-Dc5gBIi5.js.map → sequenceDiagram-2WXFIKYE-BWAMhn_x.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-DMYeNS1r.js → stateDiagram-RAJIS63D--jsLD0Dg.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-DMYeNS1r.js.map → stateDiagram-RAJIS63D--jsLD0Dg.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-MfUJuUEe.js → stateDiagram-v2-FVOUBMTO-DUG9vyI5.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-MfUJuUEe.js.map → stateDiagram-v2-FVOUBMTO-DUG9vyI5.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-Ci2CZEky.js → timeline-definition-YZTLITO2-BROLp1hL.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-Ci2CZEky.js.map → timeline-definition-YZTLITO2-BROLp1hL.js.map} +1 -1
- package/webapp/dist/assets/{treemap-KZPCXAKY-CNgzp4sT.js → treemap-KZPCXAKY-BXuIlbYo.js} +5 -5
- package/webapp/dist/assets/{treemap-KZPCXAKY-CNgzp4sT.js.map → treemap-KZPCXAKY-BXuIlbYo.js.map} +1 -1
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BYxtNx2s.js → vennDiagram-LZ73GAT5-BXWd8gBB.js} +2 -2
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BYxtNx2s.js.map → vennDiagram-LZ73GAT5-BXWd8gBB.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BUS3bn9p.js → xychartDiagram-JWTSCODW-DR5z9o6h.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BUS3bn9p.js.map → xychartDiagram-JWTSCODW-DR5z9o6h.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
package/dist/access-control.js
CHANGED
|
@@ -311,12 +311,12 @@ function getAccessDeniedMessage(operation, targetPath, language = 'en') {
|
|
|
311
311
|
lines.push('');
|
|
312
312
|
if (language === 'zh') {
|
|
313
313
|
lines.push(`- 说明:\`*.tsk/\` 是封装差遣牒。通用文件工具无法读/写/列目录/删除其中内容(硬编码无条件拒绝)。`);
|
|
314
|
-
lines.push(`- 提示:新增章节请使用 \`do_mind\`;少量追加请使用 \`mind_more\`(默认 progress:\`mind_more({\"items\":[\"...\"]})
|
|
314
|
+
lines.push(`- 提示:新增章节请使用 \`do_mind\`;少量追加请使用 \`mind_more\`(默认 progress:\`mind_more({\"items\":[\"...\"]})\`);改写已有整章请使用带当前内容哈希的 \`change_mind\`(顶层:\`change_mind({\"selector\":\"goals|constraints|progress\",\"content\":\"...\",\"previous_content_hash\":\"sha256:...\"})\`;额外章节:先 \`recall_taskdoc\` 取得 \`content_hash\`,再 \`change_mind({\"category\":\"<category>\",\"selector\":\"<selector>\",\"content\":\"...\",\"previous_content_hash\":\"sha256:...\"})\`)。`);
|
|
315
315
|
lines.push(`- 提示:读取额外章节请使用函数工具 \`recall_taskdoc\`:\`recall_taskdoc({\"category\":\"<category>\",\"selector\":\"<selector>\"})\`。`);
|
|
316
316
|
}
|
|
317
317
|
else {
|
|
318
318
|
lines.push(`- Note: \`*.tsk/\` is an encapsulated Taskdoc. It is hard-denied for all general file tools.`);
|
|
319
|
-
lines.push(`- Hint: To create a section, use \`do_mind\`; for small append-only updates, use \`mind_more\` (defaults to progress: \`mind_more({\"items\":[\"...\"]})\`); for full-section replacements
|
|
319
|
+
lines.push(`- Hint: To create a section, use \`do_mind\`; for small append-only updates, use \`mind_more\` (defaults to progress: \`mind_more({\"items\":[\"...\"]})\`); for full-section replacements, use \`change_mind\` with the current content hash (top-level: \`change_mind({\"selector\":\"goals|constraints|progress\",\"content\":\"...\",\"previous_content_hash\":\"sha256:...\"})\`; extra sections: call \`recall_taskdoc\` for \`content_hash\` first, then \`change_mind({\"category\":\"<category>\",\"selector\":\"<selector>\",\"content\":\"...\",\"previous_content_hash\":\"sha256:...\"})\`).`);
|
|
320
320
|
lines.push(`- Hint: To read extra sections, use \`recall_taskdoc({\"category\":\"<category>\",\"selector\":\"<selector>\"})\`.`);
|
|
321
321
|
}
|
|
322
322
|
}
|
|
@@ -821,7 +821,7 @@ Invoke the function tool `clear_mind` with:
|
|
|
821
821
|
|
|
822
822
|
- `do_mind`: create one new section; fails if the target already exists.
|
|
823
823
|
- `mind_more`: append small entries to an existing section; defaults to `progress`.
|
|
824
|
-
- `change_mind`: replace one existing section; fails if the target does not exist.
|
|
824
|
+
- `change_mind`: replace one existing section; fails if the target does not exist or `previous_content_hash` does not match the current content hash.
|
|
825
825
|
- `never_mind`: delete one existing section.
|
|
826
826
|
|
|
827
827
|
**Common section arguments**:
|
|
@@ -829,11 +829,12 @@ Invoke the function tool `clear_mind` with:
|
|
|
829
829
|
- `selector: "goals" | "constraints" | "progress"` for top-level sections; or a valid selector with `category`
|
|
830
830
|
- `category?: string`
|
|
831
831
|
- `content: string` for `do_mind` / `change_mind`
|
|
832
|
+
- `previous_content_hash: string` for `change_mind`
|
|
832
833
|
|
|
833
834
|
Example:
|
|
834
835
|
|
|
835
836
|
```text
|
|
836
|
-
Invoke `do_mind` to create a missing section, or `change_mind` to replace an existing section.
|
|
837
|
+
Invoke `do_mind` to create a missing section, or `change_mind` with the current `content_hash` as `previous_content_hash` to replace an existing section.
|
|
837
838
|
```
|
|
838
839
|
|
|
839
840
|
**Behavior**:
|
|
@@ -798,7 +798,7 @@ async function checkSideDialogRevival(askerDialog: Dialog): Promise<void> {
|
|
|
798
798
|
|
|
799
799
|
- `do_mind`:创建一个新章节;若目标已存在则失败。
|
|
800
800
|
- `mind_more`:向已有章节追加少量条目;默认追加到 `progress`。
|
|
801
|
-
- `change_mind
|
|
801
|
+
- `change_mind`:替换一个已有章节;若目标不存在,或 `previous_content_hash` 与当前内容哈希不匹配,则失败。
|
|
802
802
|
- `never_mind`:删除一个已有章节。
|
|
803
803
|
|
|
804
804
|
**通用章节参数**:
|
|
@@ -806,11 +806,12 @@ async function checkSideDialogRevival(askerDialog: Dialog): Promise<void> {
|
|
|
806
806
|
- 顶层章节使用 `selector: "goals" | "constraints" | "progress"`;额外章节使用有效 `selector` 加 `category`
|
|
807
807
|
- `category?: string`
|
|
808
808
|
- `do_mind` / `change_mind` 使用 `content: string`
|
|
809
|
+
- `change_mind` 还需要 `previous_content_hash: string`
|
|
809
810
|
|
|
810
811
|
示例:
|
|
811
812
|
|
|
812
813
|
```text
|
|
813
|
-
调用 `do_mind` 创建缺失章节,或调用 `change_mind` 替换已有章节。
|
|
814
|
+
调用 `do_mind` 创建缺失章节,或调用 `change_mind` 并带上当前 `content_hash` 作为 `previous_content_hash` 替换已有章节。
|
|
814
815
|
```
|
|
815
816
|
|
|
816
817
|
**行为**:
|
|
@@ -174,7 +174,7 @@ Taskdoc mutation function tools each affect **exactly one** section file of the
|
|
|
174
174
|
|
|
175
175
|
- `do_mind` creates a new section file and MUST fail if the target already exists.
|
|
176
176
|
- `mind_more` appends entries without deduplicating or rewriting old content.
|
|
177
|
-
- `change_mind` replaces an existing section file and MUST fail if the target does not exist.
|
|
177
|
+
- `change_mind` replaces an existing section file and MUST fail if the target does not exist or if the supplied `previous_content_hash` does not match the current section content hash.
|
|
178
178
|
- `never_mind` deletes an existing section file.
|
|
179
179
|
|
|
180
180
|
Critically:
|
|
@@ -191,6 +191,7 @@ They take:
|
|
|
191
191
|
|
|
192
192
|
- `selector` (required)
|
|
193
193
|
- `content` (required)
|
|
194
|
+
- `previous_content_hash` (required for `change_mind`)
|
|
194
195
|
- `category` (optional)
|
|
195
196
|
|
|
196
197
|
When `category` is missing/empty, `selector` targets the **top-level** section files:
|
|
@@ -218,6 +219,13 @@ Hard prohibitions:
|
|
|
218
219
|
- `contracts|acceptance|grants|runbook|decisions|risks` MUST NOT be written outside `category="bearinmind"`.
|
|
219
220
|
- No other category is auto-injected into the system prompt (only an index may be shown).
|
|
220
221
|
|
|
222
|
+
`previous_content_hash` is the `sha256:...` hash of the current section content after Dominds' canonical Markdown file-ending normalization. It is not stored as extra state.
|
|
223
|
+
|
|
224
|
+
- For auto-injected top-level sections (`goals`, `constraints`, `progress`), the injected Taskdoc status block shows each current `content_hash`.
|
|
225
|
+
- For non-auto-injected sections, call `recall_taskdoc({ category, selector })`; its result includes `content_hash`.
|
|
226
|
+
- On hash mismatch, the write MUST fail. The agent must re-read/review the current section and retry only after fully merging existing content.
|
|
227
|
+
- If the proposed replacement would overwrite, delete, or materially replace existing content, the agent must have either direct human confirmation for that replacement, or a human-approved explicit SOP/acceptance standard that authorizes the replacement after considering the existing content.
|
|
228
|
+
|
|
221
229
|
### `recall_taskdoc` (read-only; for non-auto-injected sections)
|
|
222
230
|
|
|
223
231
|
Because general file tools cannot read anything under `*.tsk/`, Dominds provides a dedicated read tool:
|
|
@@ -230,6 +238,7 @@ Behavior:
|
|
|
230
238
|
|
|
231
239
|
- Reads `bearinmind/<whitelisted>.md` or `<category>/<selector>.md`.
|
|
232
240
|
- The top-level three sections (`goals` / `constraints` / `progress`) are already auto-injected, so `recall_taskdoc` does not read them.
|
|
241
|
+
- Returns the section `content_hash` for use as `change_mind.previous_content_hash`.
|
|
233
242
|
|
|
234
243
|
Example (bearinmind):
|
|
235
244
|
|
|
@@ -249,7 +258,7 @@ Example:
|
|
|
249
258
|
|
|
250
259
|
```text
|
|
251
260
|
Call the function tool `change_mind` with:
|
|
252
|
-
{ "selector": "constraints", "content": "- MUST not browse the web.\n- MUST keep responses under 10 lines unless asked otherwise.\n" }
|
|
261
|
+
{ "selector": "constraints", "content": "- MUST not browse the web.\n- MUST keep responses under 10 lines unless asked otherwise.\n", "previous_content_hash": "sha256:..." }
|
|
253
262
|
```
|
|
254
263
|
|
|
255
264
|
### Behavioral rules
|
|
@@ -185,7 +185,7 @@ Dominds 必须从任务包构造一个**有效差遣牒**用于提示词和 UI
|
|
|
185
185
|
|
|
186
186
|
- `do_mind` 创建新章节文件;如果目标已存在,必须失败。
|
|
187
187
|
- `mind_more` 追加条目,不会自动去重或改写旧内容。
|
|
188
|
-
- `change_mind`
|
|
188
|
+
- `change_mind` 替换已有章节文件;如果目标不存在,或传入的 `previous_content_hash` 与当前章节内容哈希不匹配,必须失败。
|
|
189
189
|
- `never_mind` 删除已有章节文件。
|
|
190
190
|
|
|
191
191
|
关键点:
|
|
@@ -202,6 +202,7 @@ Dominds 必须从任务包构造一个**有效差遣牒**用于提示词和 UI
|
|
|
202
202
|
|
|
203
203
|
- `selector`(必需)
|
|
204
204
|
- `content`(必需)
|
|
205
|
+
- `previous_content_hash`(`change_mind` 必需)
|
|
205
206
|
- `category`(可选)
|
|
206
207
|
|
|
207
208
|
当 `category` 缺失/为空时,`selector` 指向**顶层**部分文件:
|
|
@@ -229,6 +230,13 @@ Dominds 必须从任务包构造一个**有效差遣牒**用于提示词和 UI
|
|
|
229
230
|
- `contracts|acceptance|grants|runbook|decisions|risks` 不得在 `category="bearinmind"` 之外编写。
|
|
230
231
|
- 没有其他类别会自动注入系统提示(只会显示一个索引)。
|
|
231
232
|
|
|
233
|
+
`previous_content_hash` 是当前章节内容在 Dominds 规范化 Markdown 文件结尾之后得到的 `sha256:...` 哈希;它不是额外持久状态。
|
|
234
|
+
|
|
235
|
+
- 顶层自动注入章节(`goals`、`constraints`、`progress`)的当前 `content_hash` 会显示在注入的差遣牒状态块中。
|
|
236
|
+
- 非自动注入章节需要先调用 `recall_taskdoc({ category, selector })`;返回结果会包含 `content_hash`。
|
|
237
|
+
- 哈希不匹配时写入必须失败。智能体必须重新读取/回顾当前章节,并且只在充分合并原有内容后重试。
|
|
238
|
+
- 如果拟替换内容会冲掉、删除或实质替换原有内容,智能体必须已获得该替换的直接人类确认,或存在人类认可的明确 SOP/验收标准,并且已按该标准考虑过原有内容。
|
|
239
|
+
|
|
232
240
|
### `recall_taskdoc`(只读;用于非自动注入的部分)
|
|
233
241
|
|
|
234
242
|
因为通用文件工具无法读取 `*.tsk/` 下的任何内容,Dominds 提供了一个专门的读取工具:
|
|
@@ -241,6 +249,7 @@ recall_taskdoc({ category, selector })
|
|
|
241
249
|
|
|
242
250
|
- 读取 `bearinmind/<whitelisted>.md` 或 `<category>/<selector>.md`。
|
|
243
251
|
- 顶层三段(`goals` / `constraints` / `progress`)已经自动注入,因此 `recall_taskdoc` 不会读取它们。
|
|
252
|
+
- 返回章节 `content_hash`,供 `change_mind.previous_content_hash` 使用。
|
|
244
253
|
|
|
245
254
|
示例(bearinmind):
|
|
246
255
|
|
|
@@ -12,7 +12,7 @@ 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.
|
|
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. Kimi Code also uses the OpenAI-compatible Chat Completions shape, but must use the built-in `kimi-code` provider's dedicated `/coding/v1` endpoint, real Dominds User-Agent, `prompt_cache_key`, and Kimi-specific `thinking`/`reasoning_effort` request shaping. See [`volcengine-coding-plan-openai-compatible.zh.md`](./volcengine-coding-plan-openai-compatible.zh.md) for the Volcano migration design record.
|
|
16
16
|
|
|
17
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.
|
|
18
18
|
|
|
@@ -12,7 +12,7 @@ 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
|
|
15
|
+
某些 provider 虽然暴露 OpenAI-compatible 或 Anthropic-compatible endpoint,但仍可能需要明确的 provider quirk profile。火山方舟 Coding Plan 现在走 OpenAI-compatible Chat Completions 形态,并使用专属 `/api/coding/v3` endpoint;历史 Anthropic-compatible 火山工具调用 quirk 已取消。Kimi Code 也走 OpenAI-compatible Chat Completions 形态,但必须使用内置 `kimi-code` provider 的专属 `/coding/v1` endpoint、真实 Dominds User-Agent、`prompt_cache_key` 和 Kimi 专用 `thinking`/`reasoning_effort` 请求整形。火山迁移设计记录见 [`volcengine-coding-plan-openai-compatible.zh.md`](./volcengine-coding-plan-openai-compatible.zh.md)。
|
|
16
16
|
|
|
17
17
|
不同 wrapper 下看起来同名的字段,不代表它们可以互相兼容。比如 `reasoning_effort`、`verbosity`、`parallel_tool_calls`、web search 相关开关,名字可能相似,但可接受值、请求载荷形状、流事件生命周期、校验规则和运行时含义都可能不同。
|
|
18
18
|
|
|
@@ -328,6 +328,7 @@ used in `.minds/team.yaml` member configurations.
|
|
|
328
328
|
- `anthropic`: uses the official Anthropic **Messages API**. `model_params.anthropic.thinking` uses the official Anthropic object shape.
|
|
329
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
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
|
+
- Kimi Code uses the built-in `kimi-code` provider (`https://api.kimi.com/coding/v1`, `KIMI_CODE_API_KEY`, model `kimi-for-coding`) rather than a generic Moonshot/Open Platform endpoint.
|
|
331
332
|
- **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
333
|
|
|
333
334
|
```yaml
|
|
@@ -269,6 +269,7 @@
|
|
|
269
269
|
- `anthropic`:使用 Anthropic 官方 **Messages API**。`model_params.anthropic.thinking` 使用 Anthropic 官方 object 形态。
|
|
270
270
|
- `anthropic-compatible`:使用 Anthropic 兼容的 **Messages API**。`model_params.anthropic-compatible.thinking` 使用 Dominds boolean 开关:`true` 发送 `thinking.type=enabled`,`false` 发送 `thinking.type=disabled`。
|
|
271
271
|
- `openai-compatible`:使用 OpenAI **Chat Completions API**(适用于多数“OpenAI 兼容”第三方/代理;例如手动配置的 Ark `.../api/v3` 端点;火山方舟 Coding Plan 必须使用专属 `.../api/coding/v3` 端点)
|
|
272
|
+
- Kimi Code 使用内置 `kimi-code` provider(`https://api.kimi.com/coding/v1`、`KIMI_CODE_API_KEY`、模型 `kimi-for-coding`),不要配置成普通 Moonshot/Open Platform endpoint。
|
|
272
273
|
- **识图支持**:如果该 provider/model 支持 Chat Completions 的多模态输入,Dominds 会把工具输出里的图片(`func_result_msg.contentItems[].type=input_image`,来自 MCP 等工具)读取 artifact 后作为 `image_url` 形式喂给模型;不支持的 mimeType 会降级成文本提示。
|
|
273
274
|
|
|
274
275
|
```yaml
|
package/dist/llm/defaults.yaml
CHANGED
|
@@ -449,6 +449,49 @@ providers:
|
|
|
449
449
|
input_length: 128000
|
|
450
450
|
output_length: 8192
|
|
451
451
|
context_window: '128K'
|
|
452
|
+
kimi-code:
|
|
453
|
+
name: Kimi Code
|
|
454
|
+
apiType: openai-compatible
|
|
455
|
+
apiQuirks:
|
|
456
|
+
- kimi-code
|
|
457
|
+
- kimi-cli-cloak # TODO: remove this once Kimi officially admits Dominds
|
|
458
|
+
baseUrl: https://api.kimi.com/coding/v1
|
|
459
|
+
apiKeyEnvVar: KIMI_CODE_API_KEY
|
|
460
|
+
tech_spec_url: https://www.kimi.com/code/docs/en/third-party-tools/other-coding-agents.html
|
|
461
|
+
api_mgmt_url: https://www.kimi.com/code/console
|
|
462
|
+
model_param_options:
|
|
463
|
+
openai-compatible:
|
|
464
|
+
thinking:
|
|
465
|
+
prominent: true
|
|
466
|
+
default: medium
|
|
467
|
+
type: enum
|
|
468
|
+
values: [auto, off, low, medium, high]
|
|
469
|
+
description: Kimi Code thinking mode. auto leaves thinking/reasoning_effort unset; off sends thinking.type=disabled; low/medium/high send thinking.type=enabled plus the matching reasoning_effort.
|
|
470
|
+
reasoning_effort:
|
|
471
|
+
type: enum
|
|
472
|
+
values: [low, medium, high]
|
|
473
|
+
description: Advanced Kimi Code wire-level reasoning effort override. Prefer the prominent thinking enum for normal setup; do not combine with auto/off/disabled thinking.
|
|
474
|
+
temperature:
|
|
475
|
+
type: number
|
|
476
|
+
min: 0
|
|
477
|
+
max: 2
|
|
478
|
+
description: Sampling temperature. Leave unset unless you have verified the current Kimi Code API accepts the chosen value.
|
|
479
|
+
top_p:
|
|
480
|
+
type: number
|
|
481
|
+
min: 0
|
|
482
|
+
max: 1
|
|
483
|
+
description: Nucleus sampling parameter.
|
|
484
|
+
models:
|
|
485
|
+
kimi-for-coding:
|
|
486
|
+
name: Kimi For Coding
|
|
487
|
+
supports_thinking: true
|
|
488
|
+
default_thinking: true
|
|
489
|
+
supports_tool_choice: false
|
|
490
|
+
supports_image_input: true
|
|
491
|
+
context_length: 262144
|
|
492
|
+
input_length: 262144
|
|
493
|
+
output_length: 32768
|
|
494
|
+
context_window: '262K'
|
|
452
495
|
volcano-engine-coding-plan:
|
|
453
496
|
name: Volcano Ark Coding Plan
|
|
454
497
|
apiType: openai-compatible
|
|
@@ -18,11 +18,14 @@ import { type LlmBatchResult, type LlmFailureDisposition, type LlmGenerator, typ
|
|
|
18
18
|
type OpenAiCompatibleChatExtraParams = {
|
|
19
19
|
thinking?: boolean | Record<string, unknown>;
|
|
20
20
|
reasoning_effort?: NonNullable<Team.ModelParams['openai-compatible']>['reasoning_effort'];
|
|
21
|
+
prompt_cache_key?: string;
|
|
21
22
|
};
|
|
22
23
|
export declare function resolveOpenAiCompatibleToolChoice(funcTools: readonly FuncTool[], requestContext: LlmRequestContext, modelInfo?: ModelInfo): 'none' | 'auto' | 'required' | undefined;
|
|
23
24
|
export declare function buildOpenAiCompatibleExtraParamsForTest(args: {
|
|
25
|
+
providerConfig?: ProviderConfig;
|
|
24
26
|
agent: Team.Member;
|
|
25
27
|
openAiParams: NonNullable<Team.ModelParams['openai-compatible']>;
|
|
28
|
+
requestContext?: LlmRequestContext;
|
|
26
29
|
}): OpenAiCompatibleChatExtraParams;
|
|
27
30
|
export declare function wrapOpenAiCompatibleRejectedRequestErrorForTest(args: {
|
|
28
31
|
error: unknown;
|