dominds 1.23.0 → 1.23.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/access-control.js +4 -4
- package/dist/docs/encapsulated-taskdoc.md +11 -8
- package/dist/docs/encapsulated-taskdoc.zh.md +12 -9
- package/dist/minds/minds-i18n.js +2 -2
- package/dist/minds/system-prompt-parts.js +8 -8
- package/dist/runtime/driver-messages.js +4 -4
- package/dist/tools/ctrl.d.ts +1 -1
- package/dist/tools/ctrl.js +29 -27
- package/dist/tools/prompts/control/en/principles.md +2 -2
- package/dist/tools/prompts/control/en/scenarios.md +25 -4
- package/dist/tools/prompts/control/en/tools.md +17 -8
- package/dist/tools/prompts/control/zh/principles.md +2 -2
- package/dist/tools/prompts/control/zh/scenarios.md +25 -4
- package/dist/tools/prompts/control/zh/tools.md +17 -8
- package/dist/utils/task-package.d.ts +1 -1
- package/dist/utils/task-package.js +3 -4
- package/dist/utils/taskdoc.js +18 -23
- package/package.json +2 -2
- package/webapp/dist/assets/{_basePickBy-CGhMqD96.js → _basePickBy-C3SVVywm.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-CGhMqD96.js.map → _basePickBy-C3SVVywm.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-XCMW7z1Y.js → _baseUniq-egNq6cCa.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-XCMW7z1Y.js.map → _baseUniq-egNq6cCa.js.map} +1 -1
- package/webapp/dist/assets/{arc-B6fzk0T5.js → arc-CASAlRvm.js} +2 -2
- package/webapp/dist/assets/{arc-B6fzk0T5.js.map → arc-CASAlRvm.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DmSI_GUt.js → architectureDiagram-2XIMDMQ5-B6n5FQmS.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DmSI_GUt.js.map → architectureDiagram-2XIMDMQ5-B6n5FQmS.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-Bp0nb8IZ.js → blockDiagram-WCTKOSBZ-D2UGGjic.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-Bp0nb8IZ.js.map → blockDiagram-WCTKOSBZ-D2UGGjic.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-gYpylqGb.js → c4Diagram-IC4MRINW-BOY_bQFP.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-gYpylqGb.js.map → c4Diagram-IC4MRINW-BOY_bQFP.js.map} +1 -1
- package/webapp/dist/assets/{channel-BmQ3YyUn.js → channel-CZ_X09H1.js} +2 -2
- package/webapp/dist/assets/{channel-BmQ3YyUn.js.map → channel-CZ_X09H1.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-B5pwFRwA.js → chunk-4BX2VUAB-BIwyAzZQ.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-B5pwFRwA.js.map → chunk-4BX2VUAB-BIwyAzZQ.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-CZf6oMWM.js → chunk-55IACEB6-zSjTFoCX.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-CZf6oMWM.js.map → chunk-55IACEB6-zSjTFoCX.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-yZWCDzVz.js → chunk-FMBD7UC4-CTpuRfdB.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-yZWCDzVz.js.map → chunk-FMBD7UC4-CTpuRfdB.js.map} +1 -1
- package/webapp/dist/assets/{chunk-JSJVCQXG-Cg1ST73M.js → chunk-JSJVCQXG-CJ3DM4in.js} +2 -2
- package/webapp/dist/assets/{chunk-JSJVCQXG-Cg1ST73M.js.map → chunk-JSJVCQXG-CJ3DM4in.js.map} +1 -1
- package/webapp/dist/assets/{chunk-KX2RTZJC-ByGtlX9q.js → chunk-KX2RTZJC-B97EakhO.js} +2 -2
- package/webapp/dist/assets/{chunk-KX2RTZJC-ByGtlX9q.js.map → chunk-KX2RTZJC-B97EakhO.js.map} +1 -1
- package/webapp/dist/assets/{chunk-NQ4KR5QH-DoXvfhSY.js → chunk-NQ4KR5QH-5o1o5x0z.js} +4 -4
- package/webapp/dist/assets/{chunk-NQ4KR5QH-DoXvfhSY.js.map → chunk-NQ4KR5QH-5o1o5x0z.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-2gX2qsHB.js → chunk-QZHKN3VN-D33FSIEb.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-2gX2qsHB.js.map → chunk-QZHKN3VN-D33FSIEb.js.map} +1 -1
- package/webapp/dist/assets/{chunk-WL4C6EOR-L-9bPNxS.js → chunk-WL4C6EOR-C2InqFin.js} +6 -6
- package/webapp/dist/assets/{chunk-WL4C6EOR-L-9bPNxS.js.map → chunk-WL4C6EOR-C2InqFin.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-B79Oe3Df.js → classDiagram-VBA2DB6C-BfLZmK48.js} +7 -7
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-B79Oe3Df.js.map → classDiagram-VBA2DB6C-BfLZmK48.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-B79Oe3Df.js → classDiagram-v2-RAHNMMFH-BfLZmK48.js} +7 -7
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-B79Oe3Df.js.map → classDiagram-v2-RAHNMMFH-BfLZmK48.js.map} +1 -1
- package/webapp/dist/assets/{clone-DvlY9Sdn.js → clone-BSCHnHfl.js} +2 -2
- package/webapp/dist/assets/{clone-DvlY9Sdn.js.map → clone-BSCHnHfl.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-CtkGd0W6.js → cose-bilkent-S5V4N54A-CeQ1jAJJ.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-CtkGd0W6.js.map → cose-bilkent-S5V4N54A-CeQ1jAJJ.js.map} +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-B3W6QTXQ.js → dagre-KLK3FWXG-WUuNYzcK.js} +7 -7
- package/webapp/dist/assets/{dagre-KLK3FWXG-B3W6QTXQ.js.map → dagre-KLK3FWXG-WUuNYzcK.js.map} +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-B6-J_E5Q.js → diagram-E7M64L7V-jOVCIExP.js} +8 -8
- package/webapp/dist/assets/{diagram-E7M64L7V-B6-J_E5Q.js.map → diagram-E7M64L7V-jOVCIExP.js.map} +1 -1
- package/webapp/dist/assets/{diagram-IFDJBPK2-C-PH_Yx3.js → diagram-IFDJBPK2-cCeQqotA.js} +7 -7
- package/webapp/dist/assets/{diagram-IFDJBPK2-C-PH_Yx3.js.map → diagram-IFDJBPK2-cCeQqotA.js.map} +1 -1
- package/webapp/dist/assets/{diagram-P4PSJMXO-CB5xXDup.js → diagram-P4PSJMXO-DjAYFRLv.js} +7 -7
- package/webapp/dist/assets/{diagram-P4PSJMXO-CB5xXDup.js.map → diagram-P4PSJMXO-DjAYFRLv.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-INFDFZHY-CuAhTGVU.js → erDiagram-INFDFZHY-Dl_6U5fV.js} +5 -5
- package/webapp/dist/assets/{erDiagram-INFDFZHY-CuAhTGVU.js.map → erDiagram-INFDFZHY-Dl_6U5fV.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-D3cIOfGj.js → flowDiagram-PKNHOUZH-D80nrZ3S.js} +7 -7
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-D3cIOfGj.js.map → flowDiagram-PKNHOUZH-D80nrZ3S.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-CSFhVYXV.js → ganttDiagram-A5KZAMGK-T3WdMrgj.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-CSFhVYXV.js.map → ganttDiagram-A5KZAMGK-T3WdMrgj.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-CiEaxACG.js → gitGraphDiagram-K3NZZRJ6-ifV-jkKL.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-CiEaxACG.js.map → gitGraphDiagram-K3NZZRJ6-ifV-jkKL.js.map} +1 -1
- package/webapp/dist/assets/{graph-CYGALRuy.js → graph-D5jmnb35.js} +3 -3
- package/webapp/dist/assets/{graph-CYGALRuy.js.map → graph-D5jmnb35.js.map} +1 -1
- package/webapp/dist/assets/{index-BTazqQrV.js → index-CGbZlct2.js} +503 -142
- package/webapp/dist/assets/{index-BTazqQrV.js.map → index-CGbZlct2.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-CiWJjQyU.js → infoDiagram-LFFYTUFH-C340CY5x.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-CiWJjQyU.js.map → infoDiagram-LFFYTUFH-C340CY5x.js.map} +1 -1
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-MlIIUO7o.js → ishikawaDiagram-PHBUUO56-Bu4RsELK.js} +2 -2
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-MlIIUO7o.js.map → ishikawaDiagram-PHBUUO56-Bu4RsELK.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-BBqwkA3d.js → journeyDiagram-4ABVD52K-Dvv3ypKA.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-BBqwkA3d.js.map → journeyDiagram-4ABVD52K-Dvv3ypKA.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-BS4GzDbo.js → kanban-definition-K7BYSVSG-D_rsetjW.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-BS4GzDbo.js.map → kanban-definition-K7BYSVSG-D_rsetjW.js.map} +1 -1
- package/webapp/dist/assets/{layout-DaJO-1DW.js → layout-CLmOfwnS.js} +5 -5
- package/webapp/dist/assets/{layout-DaJO-1DW.js.map → layout-CLmOfwnS.js.map} +1 -1
- package/webapp/dist/assets/{linear-SWy2Cl7G.js → linear-DFAmViqi.js} +2 -2
- package/webapp/dist/assets/{linear-SWy2Cl7G.js.map → linear-DFAmViqi.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-B_gNrT3l.js → mindmap-definition-YRQLILUH-Ce3_czeS.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-B_gNrT3l.js.map → mindmap-definition-YRQLILUH-Ce3_czeS.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-CVh3lLBA.js → pieDiagram-SKSYHLDU-U6_un5Sc.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-CVh3lLBA.js.map → pieDiagram-SKSYHLDU-U6_un5Sc.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-D0zAkVD7.js → quadrantDiagram-337W2JSQ-DmVJQItS.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-D0zAkVD7.js.map → quadrantDiagram-337W2JSQ-DmVJQItS.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP--CTFD60w.js → requirementDiagram-Z7DCOOCP-BkNhSY-g.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP--CTFD60w.js.map → requirementDiagram-Z7DCOOCP-BkNhSY-g.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-XZnViaAX.js → sankeyDiagram-WA2Y5GQK-E3UEy5SX.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-XZnViaAX.js.map → sankeyDiagram-WA2Y5GQK-E3UEy5SX.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-BWAMhn_x.js → sequenceDiagram-2WXFIKYE-k0w9WKAO.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-BWAMhn_x.js.map → sequenceDiagram-2WXFIKYE-k0w9WKAO.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-RAJIS63D--jsLD0Dg.js → stateDiagram-RAJIS63D-DRgdJrlx.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-RAJIS63D--jsLD0Dg.js.map → stateDiagram-RAJIS63D-DRgdJrlx.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DUG9vyI5.js → stateDiagram-v2-FVOUBMTO-edtkX9x6.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DUG9vyI5.js.map → stateDiagram-v2-FVOUBMTO-edtkX9x6.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-BROLp1hL.js → timeline-definition-YZTLITO2-D0zyXyNL.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-BROLp1hL.js.map → timeline-definition-YZTLITO2-D0zyXyNL.js.map} +1 -1
- package/webapp/dist/assets/{treemap-KZPCXAKY-BXuIlbYo.js → treemap-KZPCXAKY-CglsYqbQ.js} +5 -5
- package/webapp/dist/assets/{treemap-KZPCXAKY-BXuIlbYo.js.map → treemap-KZPCXAKY-CglsYqbQ.js.map} +1 -1
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BXWd8gBB.js → vennDiagram-LZ73GAT5-DsUizzvt.js} +2 -2
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BXWd8gBB.js.map → vennDiagram-LZ73GAT5-DsUizzvt.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-DR5z9o6h.js → xychartDiagram-JWTSCODW-DvYQ4zKY.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-DR5z9o6h.js.map → xychartDiagram-JWTSCODW-DvYQ4zKY.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
package/dist/access-control.js
CHANGED
|
@@ -311,13 +311,13 @@ 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\":[\"...\"]})
|
|
315
|
-
lines.push(`-
|
|
314
|
+
lines.push(`- 提示:新增章节请使用 \`do_mind\`;少量追加请使用 \`mind_more\`(默认 progress:\`mind_more({\"items\":[\"...\"]})\`);改写已有整章请先用 \`recall_taskdoc\` 取得当前内容哈希,再使用带 \`previous_content_hash\` 的 \`change_mind\`(顶层示例:先 \`recall_taskdoc({\"selector\":\"progress\"})\`,再 \`change_mind({\"selector\":\"progress\",\"content\":\"...\",\"previous_content_hash\":\"crc32:...\"})\`;额外章节:先 \`recall_taskdoc({\"category\":\"<category>\",\"selector\":\"<selector>\"})\`,再 \`change_mind({\"category\":\"<category>\",\"selector\":\"<selector>\",\"content\":\"...\",\"previous_content_hash\":\"crc32:...\"})\`)。`);
|
|
315
|
+
lines.push(`- 提示:读取章节或取得 content_hash 请使用函数工具 \`recall_taskdoc\`:顶层 \`recall_taskdoc({\"selector\":\"progress\"})\`;额外章节 \`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,
|
|
320
|
-
lines.push(`- Hint: To read
|
|
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, call \`recall_taskdoc\` for the current content hash first, then use \`change_mind\` with \`previous_content_hash\` (top-level example: first \`recall_taskdoc({\"selector\":\"progress\"})\`, then \`change_mind({\"selector\":\"progress\",\"content\":\"...\",\"previous_content_hash\":\"crc32:...\"})\`; extra sections: first \`recall_taskdoc({\"category\":\"<category>\",\"selector\":\"<selector>\"})\`, then \`change_mind({\"category\":\"<category>\",\"selector\":\"<selector>\",\"content\":\"...\",\"previous_content_hash\":\"crc32:...\"})\`).`);
|
|
320
|
+
lines.push(`- Hint: To read a section or get content_hash, use \`recall_taskdoc\`: top-level \`recall_taskdoc({\"selector\":\"progress\"})\`; extra section \`recall_taskdoc({\"category\":\"<category>\",\"selector\":\"<selector>\"})\`.`);
|
|
321
321
|
}
|
|
322
322
|
}
|
|
323
323
|
if (isMindsPath(targetPath)) {
|
|
@@ -149,7 +149,7 @@ Below is the canonical copy. If you need to rephrase it for UI layout, you MUST
|
|
|
149
149
|
|
|
150
150
|
- Any `.tsk/` directory and its subpaths (`**/*.tsk/**`) are encapsulated state: general file tools MUST NOT read/write/list them (e.g. `read_file` / `write_file` / `list_dir`).
|
|
151
151
|
- Taskdoc updates MUST go through explicit Taskdoc function tools: `do_mind` creates a new section, `mind_more` appends small entries to an existing section, `change_mind` replaces an existing section, and `never_mind` deletes a section.
|
|
152
|
-
- To read
|
|
152
|
+
- To read any Taskdoc section or get its `content_hash`, use the function tool `recall_taskdoc({ selector, category? })`.
|
|
153
153
|
|
|
154
154
|
**Taskdoc auto-injection rules (system prompt)**
|
|
155
155
|
|
|
@@ -219,25 +219,25 @@ Hard prohibitions:
|
|
|
219
219
|
- `contracts|acceptance|grants|runbook|decisions|risks` MUST NOT be written outside `category="bearinmind"`.
|
|
220
220
|
- No other category is auto-injected into the system prompt (only an index may be shown).
|
|
221
221
|
|
|
222
|
-
`previous_content_hash` is the `
|
|
222
|
+
`previous_content_hash` is the `crc32:...` checksum of the current section content after Dominds' canonical Markdown file-ending normalization. It is not stored as extra state.
|
|
223
223
|
|
|
224
|
-
- For
|
|
225
|
-
- For non-auto-injected sections, call `recall_taskdoc({ category, selector })`; its result includes `content_hash`.
|
|
224
|
+
- For top-level sections (`goals`, `constraints`, `progress`), call `recall_taskdoc({ selector })`; its result includes `content_hash`.
|
|
225
|
+
- For extra non-auto-injected sections, call `recall_taskdoc({ category, selector })`; its result includes `content_hash`.
|
|
226
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
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
228
|
|
|
229
|
-
### `recall_taskdoc` (read-only; for
|
|
229
|
+
### `recall_taskdoc` (read-only; for Taskdoc sections and content_hash)
|
|
230
230
|
|
|
231
231
|
Because general file tools cannot read anything under `*.tsk/`, Dominds provides a dedicated read tool:
|
|
232
232
|
|
|
233
233
|
```
|
|
234
|
-
recall_taskdoc({
|
|
234
|
+
recall_taskdoc({ selector, category? })
|
|
235
235
|
```
|
|
236
236
|
|
|
237
237
|
Behavior:
|
|
238
238
|
|
|
239
239
|
- Reads `bearinmind/<whitelisted>.md` or `<category>/<selector>.md`.
|
|
240
|
-
- The top-level three sections (`goals` / `constraints` / `progress`) are
|
|
240
|
+
- The top-level three sections (`goals` / `constraints` / `progress`) are auto-injected as content, but their `content_hash` is only returned by `recall_taskdoc`.
|
|
241
241
|
- Returns the section `content_hash` for use as `change_mind.previous_content_hash`.
|
|
242
242
|
|
|
243
243
|
Example (bearinmind):
|
|
@@ -257,8 +257,11 @@ Call the function tool `recall_taskdoc` with:
|
|
|
257
257
|
Example:
|
|
258
258
|
|
|
259
259
|
```text
|
|
260
|
+
Call the function tool `recall_taskdoc` with:
|
|
261
|
+
{ "selector": "constraints" }
|
|
262
|
+
|
|
260
263
|
Call the function tool `change_mind` with:
|
|
261
|
-
{ "selector": "constraints", "content": "- MUST not browse the web.\n- MUST keep responses under 10 lines unless asked otherwise.\n", "previous_content_hash": "
|
|
264
|
+
{ "selector": "constraints", "content": "- MUST not browse the web.\n- MUST keep responses under 10 lines unless asked otherwise.\n", "previous_content_hash": "crc32:..." }
|
|
262
265
|
```
|
|
263
266
|
|
|
264
267
|
### Behavioral rules
|
|
@@ -148,7 +148,7 @@ Dominds 必须从任务包构造一个**有效差遣牒**用于提示词和 UI
|
|
|
148
148
|
|
|
149
149
|
- 任何 `.tsk/` 目录及其子路径(`**/*.tsk/**`)都是封装状态:禁止使用任何通用文件工具读取/写入/列目录(例如 `read_file` / `write_file` / `list_dir` 等)。
|
|
150
150
|
- 更新差遣牒只能使用显式差遣牒函数工具:`do_mind` 创建新章节,`mind_more` 向已有章节追加少量条目,`change_mind` 替换已有章节,`never_mind` 删除章节。
|
|
151
|
-
-
|
|
151
|
+
- 读取任意差遣牒章节或取得其 `content_hash`,只能使用函数工具 `recall_taskdoc({ selector, category? })`。
|
|
152
152
|
|
|
153
153
|
**差遣牒自动注入规则(系统提示)**
|
|
154
154
|
|
|
@@ -164,7 +164,7 @@ Dominds 必须从任务包构造一个**有效差遣牒**用于提示词和 UI
|
|
|
164
164
|
|
|
165
165
|
- Any `.tsk/` directory and its subpaths (`**/*.tsk/**`) are encapsulated state: general file tools MUST NOT read/write/list them (e.g. `read_file` / `write_file` / `list_dir`).
|
|
166
166
|
- Taskdoc updates MUST go through explicit Taskdoc function tools: `do_mind` creates a new section, `mind_more` appends small entries to an existing section, `change_mind` replaces an existing section, and `never_mind` deletes a section.
|
|
167
|
-
- To read
|
|
167
|
+
- To read any Taskdoc section or get its `content_hash`, use the function tool `recall_taskdoc({ selector, category? })`.
|
|
168
168
|
|
|
169
169
|
**Taskdoc auto-injection rules (system prompt)**
|
|
170
170
|
|
|
@@ -230,25 +230,25 @@ Dominds 必须从任务包构造一个**有效差遣牒**用于提示词和 UI
|
|
|
230
230
|
- `contracts|acceptance|grants|runbook|decisions|risks` 不得在 `category="bearinmind"` 之外编写。
|
|
231
231
|
- 没有其他类别会自动注入系统提示(只会显示一个索引)。
|
|
232
232
|
|
|
233
|
-
`previous_content_hash` 是当前章节内容在 Dominds 规范化 Markdown 文件结尾之后得到的 `
|
|
233
|
+
`previous_content_hash` 是当前章节内容在 Dominds 规范化 Markdown 文件结尾之后得到的 `crc32:...` 校验值;它不是额外持久状态。
|
|
234
234
|
|
|
235
|
-
-
|
|
236
|
-
-
|
|
235
|
+
- 顶层章节(`goals`、`constraints`、`progress`)需要调用 `recall_taskdoc({ selector })`;返回结果会包含 `content_hash`。
|
|
236
|
+
- 额外非自动注入章节需要调用 `recall_taskdoc({ category, selector })`;返回结果会包含 `content_hash`。
|
|
237
237
|
- 哈希不匹配时写入必须失败。智能体必须重新读取/回顾当前章节,并且只在充分合并原有内容后重试。
|
|
238
238
|
- 如果拟替换内容会冲掉、删除或实质替换原有内容,智能体必须已获得该替换的直接人类确认,或存在人类认可的明确 SOP/验收标准,并且已按该标准考虑过原有内容。
|
|
239
239
|
|
|
240
|
-
### `recall_taskdoc
|
|
240
|
+
### `recall_taskdoc`(只读;用于差遣牒章节与 content_hash)
|
|
241
241
|
|
|
242
242
|
因为通用文件工具无法读取 `*.tsk/` 下的任何内容,Dominds 提供了一个专门的读取工具:
|
|
243
243
|
|
|
244
244
|
```
|
|
245
|
-
recall_taskdoc({
|
|
245
|
+
recall_taskdoc({ selector, category? })
|
|
246
246
|
```
|
|
247
247
|
|
|
248
248
|
行为:
|
|
249
249
|
|
|
250
250
|
- 读取 `bearinmind/<whitelisted>.md` 或 `<category>/<selector>.md`。
|
|
251
|
-
- 顶层三段(`goals` / `constraints` / `progress
|
|
251
|
+
- 顶层三段(`goals` / `constraints` / `progress`)会自动注入正文,但其 `content_hash` 只通过 `recall_taskdoc` 返回。
|
|
252
252
|
- 返回章节 `content_hash`,供 `change_mind.previous_content_hash` 使用。
|
|
253
253
|
|
|
254
254
|
示例(bearinmind):
|
|
@@ -268,8 +268,11 @@ recall_taskdoc({ category, selector })
|
|
|
268
268
|
示例:
|
|
269
269
|
|
|
270
270
|
```text
|
|
271
|
+
使用函数工具 `recall_taskdoc` 调用:
|
|
272
|
+
{ "selector": "constraints" }
|
|
273
|
+
|
|
271
274
|
使用函数工具 `change_mind` 调用:
|
|
272
|
-
{ "selector": "constraints", "content": "- MUST not browse the web.\n- MUST keep responses under 10 lines unless asked otherwise.\n" }
|
|
275
|
+
{ "selector": "constraints", "content": "- MUST not browse the web.\n- MUST keep responses under 10 lines unless asked otherwise.\n", "previous_content_hash": "crc32:..." }
|
|
273
276
|
```
|
|
274
277
|
|
|
275
278
|
### 行为规则
|
package/dist/minds/minds-i18n.js
CHANGED
|
@@ -55,7 +55,7 @@ function taskdocCanonicalCopy(language) {
|
|
|
55
55
|
'',
|
|
56
56
|
'- 任何 `.tsk/` 目录及其子路径(`**/*.tsk/**`)都是封装状态:禁止使用任何通用文件工具读取/写入/列目录(例如 `read_file` / `write_file` / `list_dir` 等)。',
|
|
57
57
|
'- 更新 Taskdoc 只能使用函数工具 `do_mind` / `mind_more` / `change_mind` / `never_mind`:缺失章节用 `do_mind` 创建;少量新增用 `mind_more` 追加(默认 progress);需要删除陈旧项、重排或压缩时用 `change_mind` 整章替换;确需删除整章文件时用 `never_mind`。',
|
|
58
|
-
'-
|
|
58
|
+
'- 读取章节或取得 `change_mind.previous_content_hash` 需要使用函数工具 `recall_taskdoc({ selector, category? })`;顶层三段省略 `category`,额外章节传入 `category`。',
|
|
59
59
|
'',
|
|
60
60
|
'**Taskdoc 自动注入规则(系统提示)**',
|
|
61
61
|
'',
|
|
@@ -71,7 +71,7 @@ function taskdocCanonicalCopy(language) {
|
|
|
71
71
|
'',
|
|
72
72
|
'- Any `.tsk/` directory and its subpaths (`**/*.tsk/**`) are encapsulated state: general file tools MUST NOT read/write/list them (e.g. `read_file` / `write_file` / `list_dir`).',
|
|
73
73
|
'- Taskdoc updates MUST go through `do_mind` / `mind_more` / `change_mind` / `never_mind`: use `do_mind` to create missing sections, use `mind_more` for small append-only additions (defaults to progress), use `change_mind` for full-section replacement when cleanup, reordering, or compression is needed, and use `never_mind` when a whole section file should be deleted.',
|
|
74
|
-
'- To read
|
|
74
|
+
'- To read a section or get `change_mind.previous_content_hash`, use the function tool `recall_taskdoc({ selector, category? })`; omit `category` for top-level sections and pass it for extra sections.',
|
|
75
75
|
'',
|
|
76
76
|
'**Taskdoc auto-injection rules (system prompt)**',
|
|
77
77
|
'',
|
|
@@ -148,11 +148,11 @@ function getMemoryPromptCopy(ctx) {
|
|
|
148
148
|
const taskdocLogLineZh = ctx.contextHealthPromptMode === 'critical'
|
|
149
149
|
? ctx.isSideDialog
|
|
150
150
|
? '当前是告急处置态:支线对话不要维护差遣牒,也不要整理差遣牒更新提案;把当前对话历史中下一程需要知道的讨论细节、下一步、关键定位、运行/验证信息、临时路径/ID/样例输入和恢复依据写入接续包提醒项。提醒项长度没有技术限制,宁可完整一些;允许多条粗略提醒项求稳,但不要在当前程提前做“新一程清醒复核”。系统真正开启新一程后,第一步再复核整理:删除冗余、纠正偏激/失真思路,再收敛成高质量提醒项。'
|
|
151
|
-
: '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步。当前是告急处置态:先检查当前对话历史里尚未落文档的讨论细节;能作为全队共享状态/决策/约束/目标的,主线优先用 `do_mind`
|
|
151
|
+
: '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步。当前是告急处置态:先检查当前对话历史里尚未落文档的讨论细节;能作为全队共享状态/决策/约束/目标的,主线优先用 `do_mind` 新增章节保存;只有在确实需要改写已有章节、已完成合并并先调用 `recall_taskdoc` 取得当前 `content_hash` 作为 `previous_content_hash` 时,才用 `change_mind`。接续包提醒项只留差遣牒仍未覆盖、但恢复工作容易丢的细节;本程允许先保留多条粗略提醒项求稳,但不要在当前程提前做“新一程清醒复核”。系统真正开启新一程后,第一步再复核整理:删除冗余、纠正偏激/失真思路,再收敛成高质量提醒项。'
|
|
152
152
|
: ctx.contextHealthPromptMode === 'caution'
|
|
153
153
|
? ctx.isSideDialog
|
|
154
154
|
? '当前是吃紧处置态:支线对话不要维护差遣牒,也不要整理差遣牒更新提案;把当前对话历史中下一程需要知道的讨论细节、下一步、关键定位、运行/验证信息、临时路径/ID/样例输入和恢复依据写入接续包提醒项。提醒项长度没有技术限制,宁可完整一些;若一时来不及,可先保留多条粗略提醒项过桥,但不要在当前程提前做“新一程清醒复核”。系统真正开启新一程后,第一步再复核整理:删除冗余、纠正偏激/失真思路,再收敛成高质量提醒项。'
|
|
155
|
-
: '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步。当前是吃紧处置态:先检查当前对话历史里尚未落文档的讨论细节;能作为全队共享状态/决策/约束/目标的,主线优先用 `do_mind`
|
|
155
|
+
: '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步。当前是吃紧处置态:先检查当前对话历史里尚未落文档的讨论细节;能作为全队共享状态/决策/约束/目标的,主线优先用 `do_mind` 新增章节保存;只有在确实需要改写已有章节、已完成合并并先调用 `recall_taskdoc` 取得当前 `content_hash` 作为 `previous_content_hash` 时,才用 `change_mind`。接续包提醒项只留差遣牒仍未覆盖、但恢复工作容易丢的细节;若一时来不及,可先保留多条粗略提醒项过桥,但不要在当前程提前做“新一程清醒复核”。系统真正开启新一程后,第一步再复核整理:删除冗余、纠正偏激/失真思路,再收敛成高质量提醒项。'
|
|
156
156
|
: '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步;提醒项也只留可扫读摘录。接续包提醒项默认应保持结构化、便于快速恢复。';
|
|
157
157
|
const contextHealthLineEn = ctx.contextHealthPromptMode === 'critical'
|
|
158
158
|
? ctx.isSideDialog
|
|
@@ -166,11 +166,11 @@ function getMemoryPromptCopy(ctx) {
|
|
|
166
166
|
const taskdocLogLineEn = ctx.contextHealthPromptMode === 'critical'
|
|
167
167
|
? ctx.isSideDialog
|
|
168
168
|
? 'Current mode is critical remediation: in a Side Dialog, do not maintain Taskdoc and do not draft Taskdoc update proposals. Put discussion details from current dialog history that the next course needs to know, next actions, key pointers, run/verify info, volatile paths/IDs/sample inputs, and resume reasoning into continuation-package reminders. Reminder length has no technical limit, so prefer being complete. Rough multi-reminder bridge notes are acceptable in this course, but do not perform the new-course “clear-headed review” early. Once the system actually starts the new course, the first step is to review/rewrite them: remove redundancy, correct biased or distorted bridge notes, then compress them into high-quality reminders.'
|
|
169
|
-
: 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps. Current mode is critical remediation: first review current-dialog discussion details not yet written into documentation. If they belong to team-shared state, decisions, constraints, or goals, prefer creating a new section with `do_mind`; use `change_mind` only when an existing section truly needs rewriting, you have merged against the current content, and you
|
|
169
|
+
: 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps. Current mode is critical remediation: first review current-dialog discussion details not yet written into documentation. If they belong to team-shared state, decisions, constraints, or goals, prefer creating a new section with `do_mind`; use `change_mind` only when an existing section truly needs rewriting, you have merged against the current content, and you have first called `recall_taskdoc` to get the current `content_hash` as `previous_content_hash`. Continuation-package reminders should keep only details still not covered by Taskdoc but easy to lose during resume. Rough multi-reminder bridge notes are acceptable in this course, but do not perform the new-course “clear-headed review” early. Once the system actually starts the new course, the first step is to review/rewrite them: remove redundancy, correct biased or distorted bridge notes, then compress them into high-quality reminders.'
|
|
170
170
|
: ctx.contextHealthPromptMode === 'caution'
|
|
171
171
|
? ctx.isSideDialog
|
|
172
172
|
? 'Current mode is caution remediation: in a Side Dialog, do not maintain Taskdoc and do not draft Taskdoc update proposals. Put discussion details from current dialog history that the next course needs to know, next actions, key pointers, run/verify info, volatile paths/IDs/sample inputs, and resume reasoning into continuation-package reminders. Reminder length has no technical limit, so prefer being complete. If needed, rough multi-reminder bridge notes are acceptable, but do not perform the new-course “clear-headed review” early. Once the system actually starts the new course, the first step is to review/rewrite them: remove redundancy, correct biased or distorted bridge notes, then compress them into high-quality reminders.'
|
|
173
|
-
: 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps. Current mode is caution remediation: first review current-dialog discussion details not yet written into documentation. If they belong to team-shared state, decisions, constraints, or goals, prefer creating a new section with `do_mind`; use `change_mind` only when an existing section truly needs rewriting, you have merged against the current content, and you
|
|
173
|
+
: 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps. Current mode is caution remediation: first review current-dialog discussion details not yet written into documentation. If they belong to team-shared state, decisions, constraints, or goals, prefer creating a new section with `do_mind`; use `change_mind` only when an existing section truly needs rewriting, you have merged against the current content, and you have first called `recall_taskdoc` to get the current `content_hash` as `previous_content_hash`. Continuation-package reminders should keep only details still not covered by Taskdoc but easy to lose during resume. If needed, rough multi-reminder bridge notes are acceptable, but do not perform the new-course “clear-headed review” early. Once the system actually starts the new course, the first step is to review/rewrite them: remove redundancy, correct biased or distorted bridge notes, then compress them into high-quality reminders.'
|
|
174
174
|
: 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps; reminders should also keep only scannable excerpts. Keep continuation-package reminders structured and fast to resume from by default.';
|
|
175
175
|
if (ctx.language === 'zh') {
|
|
176
176
|
return {
|
|
@@ -181,7 +181,7 @@ function getMemoryPromptCopy(ctx) {
|
|
|
181
181
|
taskdocSemanticsLine: '- 章节语义约定:`progress` 是全队共享、准实时、可扫读的任务公告牌,用来记录当前有效状态、关键决策、下一步与仍成立阻塞;不是流水账,也不是个人工作记录。`goals` / `constraints` 是较稳定的任务契约;每次更新都必须保留仍然有效的他人条目。',
|
|
182
182
|
taskdocSectionReplaceLine: ctx.isSideDialog && ctx.contextHealthPromptMode !== 'normal'
|
|
183
183
|
? '- 当前处于支线对话的上下文健康处置态:本程不要维护差遣牒,也不要整理差遣牒更新提案;把下一程需要恢复的细节写入足够详尽的接续包提醒项。'
|
|
184
|
-
: `- 更新差遣牒时:少量新增条目可用 \`mind_more\` 追加(默认 progress);缺失章节用 \`do_mind\`
|
|
184
|
+
: `- 更新差遣牒时:少量新增条目可用 \`mind_more\` 追加(默认 progress);缺失章节用 \`do_mind\` 创建;需要删除陈旧项、重排结构或压缩时,先对照上下文中注入的当前内容完成合并,再调用 \`recall_taskdoc\` 取得当前 \`content_hash\`,然后用带 \`previous_content_hash\` 的 \`change_mind\` 整章替换;需要删除整章文件时用 \`never_mind\`;禁止覆盖/抹掉他人条目;自己负责维护的条目必须标注责任人(例如 \`- [owner:@${ctx.agentId}] ...\` 或用 \`### @${ctx.agentId}\` 分块)。`,
|
|
185
185
|
progressLine: ctx.isSideDialog && ctx.contextHealthPromptMode !== 'normal'
|
|
186
186
|
? '- 当前处于支线对话的上下文健康处置态:本程不更新 `progress`;只把下一程接续所需信息写入提醒项。'
|
|
187
187
|
: '- 更新 `progress` 时:它必须始终是可供全队扫读的完整当前快照,而不是只追加自己这一轮的零散笔记。',
|
|
@@ -202,7 +202,7 @@ function getMemoryPromptCopy(ctx) {
|
|
|
202
202
|
sideDialogWorkflowLine: ctx.contextHealthPromptMode === 'normal'
|
|
203
203
|
? `工作流:先做事 → 再提炼(\`update_reminder\`;必要时整理差遣牒追加条目/更新提案并诉请 \`@${ctx.taskdocMaintainerId}\` 合并写入)→ 然后 \`clear_mind\` 清空噪音。`
|
|
204
204
|
: '工作流:停止扩张上下文 → 维护足够详尽的接续包提醒项(`add_reminder` 或 `update_reminder`,长度没有技术限制)→ 然后 `clear_mind` 开启新一程。',
|
|
205
|
-
mainDialogWorkflowLine: '工作流:先做事 -> 再提炼(`update_reminder` + `mind_more(progress)
|
|
205
|
+
mainDialogWorkflowLine: '工作流:先做事 -> 再提炼(`update_reminder` + `mind_more(progress)`;需要压缩/删旧时先 `recall_taskdoc` 取得 `content_hash`,再用带 `previous_content_hash` 的 `change_mind`;要删除整章文件时用 `never_mind`)-> 然后 `clear_mind` 清空噪音。',
|
|
206
206
|
contextHealthLine: contextHealthLineZh,
|
|
207
207
|
taskdocLogLine: taskdocLogLineZh,
|
|
208
208
|
};
|
|
@@ -215,7 +215,7 @@ function getMemoryPromptCopy(ctx) {
|
|
|
215
215
|
taskdocSemanticsLine: '- Section semantics: `progress` is the team-shared, quasi-real-time, scannable task bulletin board for current effective state, key decisions, next steps, and still-active blockers; it is not a raw log or personal work record. `goals` / `constraints` are the more stable task contract; every update must preserve still-valid entries from others.',
|
|
216
216
|
taskdocSectionReplaceLine: ctx.isSideDialog && ctx.contextHealthPromptMode !== 'normal'
|
|
217
217
|
? '- Current mode is context-health remediation in a Side Dialog: do not maintain Taskdoc and do not draft Taskdoc update proposals in this course; put resume-critical details into sufficiently detailed continuation-package reminders.'
|
|
218
|
-
: `- When updating Taskdoc: use \`mind_more\` for small append-only additions (defaults to progress); create missing sections with \`do_mind\`; when stale entries must be removed, reordered, or compressed,
|
|
218
|
+
: `- When updating Taskdoc: use \`mind_more\` for small append-only additions (defaults to progress); create missing sections with \`do_mind\`; when stale entries must be removed, reordered, or compressed, first merge against the current injected content, then call \`recall_taskdoc\` to get the current \`content_hash\`, then use \`change_mind\` for a full-section replacement with that value as \`previous_content_hash\`; when a whole section file should be removed, use \`never_mind\`; do not overwrite other contributors; add an explicit owner tag for entries you maintain (e.g., \`- [owner:@${ctx.agentId}] ...\` or a \`### @${ctx.agentId}\` block).`,
|
|
219
219
|
progressLine: ctx.isSideDialog && ctx.contextHealthPromptMode !== 'normal'
|
|
220
220
|
? '- Current mode is context-health remediation in a Side Dialog: do not update `progress` in this course; put resume-critical information into reminders only.'
|
|
221
221
|
: '- When updating `progress`, keep it as a complete, team-scannable current snapshot instead of appending only your own latest notes.',
|
|
@@ -236,7 +236,7 @@ function getMemoryPromptCopy(ctx) {
|
|
|
236
236
|
sideDialogWorkflowLine: ctx.contextHealthPromptMode === 'normal'
|
|
237
237
|
? `Workflow: do work → distill (\`update_reminder\`; when Taskdoc needs updates, draft append entries, a merged replacement, or a section deletion and ask \`@${ctx.taskdocMaintainerId}\`) → then \`clear_mind\` to drop noise.`
|
|
238
238
|
: 'Workflow: stop expanding context → maintain sufficiently detailed continuation-package reminders (`add_reminder` or `update_reminder`, with no technical length limit) → then `clear_mind` to start a new course.',
|
|
239
|
-
mainDialogWorkflowLine: 'Workflow: do work -> distill (`update_reminder` + `mind_more(progress)`; use `
|
|
239
|
+
mainDialogWorkflowLine: 'Workflow: do work -> distill (`update_reminder` + `mind_more(progress)`; when compression/deletion is needed, first use `recall_taskdoc` to get `content_hash`, then use `change_mind` with `previous_content_hash`; use `never_mind` when removing a whole section file) -> then `clear_mind` to drop noise.',
|
|
240
240
|
contextHealthLine: contextHealthLineEn,
|
|
241
241
|
taskdocLogLine: taskdocLogLineEn,
|
|
242
242
|
};
|
|
@@ -407,7 +407,7 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
|
|
|
407
407
|
'',
|
|
408
408
|
'操作:',
|
|
409
409
|
'- 优先新增差遣牒章节保存讨论细节:do_mind({ "category": "<category>", "selector": "<selector>", "content": "..." })',
|
|
410
|
-
'-
|
|
410
|
+
'- 只有在确实需要改写已有章节、且已对照当前差遣牒内容完成合并时,才先调用 recall_taskdoc({"selector":"<selector>"}) 取得 content_hash,再更新:change_mind({"selector":"<selector>","content":"...","previous_content_hash":"crc32:..."})',
|
|
411
411
|
'- 优先新增过桥提醒项:add_reminder({ "content": "..." })',
|
|
412
412
|
'- 只有在确实能就地复用现有提醒项、且不会额外增加当前程认知负担时,才更新:update_reminder({ "reminder_id": "<现有 reminder_id>", "content": "..." })',
|
|
413
413
|
].join('\n');
|
|
@@ -443,7 +443,7 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
|
|
|
443
443
|
'',
|
|
444
444
|
'操作:',
|
|
445
445
|
'- 优先新增差遣牒章节保存讨论细节:do_mind({ "category": "<category>", "selector": "<selector>", "content": "..." })',
|
|
446
|
-
'-
|
|
446
|
+
'- 只有在确实需要改写已有章节、且已对照当前差遣牒内容完成合并时,才先调用 recall_taskdoc({"selector":"<selector>"}) 取得 content_hash,再更新:change_mind({"selector":"<selector>","content":"...","previous_content_hash":"crc32:..."})',
|
|
447
447
|
'- 优先新增过桥提醒项:add_reminder({ "content": "..." })',
|
|
448
448
|
'- 只有在确实能就地复用现有提醒项、且不会额外增加当前程认知负担时,才更新:update_reminder({ "reminder_id": "<现有 reminder_id>", "content": "..." })',
|
|
449
449
|
'- clear_mind({})',
|
|
@@ -484,7 +484,7 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
|
|
|
484
484
|
'',
|
|
485
485
|
'Operations:',
|
|
486
486
|
'- Prefer creating a new Taskdoc section for discussion details: do_mind({ "category": "<category>", "selector": "<selector>", "content": "..." })',
|
|
487
|
-
'- Only update when an existing section truly needs rewriting and you have merged against the current Taskdoc content
|
|
487
|
+
'- Only update when an existing section truly needs rewriting and you have merged against the current Taskdoc content: first call recall_taskdoc({"selector":"<selector>"}) for content_hash, then change_mind({"selector":"<selector>","content":"...","previous_content_hash":"crc32:..."})',
|
|
488
488
|
'- Prefer adding a bridge reminder first: add_reminder({ "content": "..." })',
|
|
489
489
|
'- Only if an existing reminder is clearly the right place, and updating it would not add extra cognitive load in the current course: update_reminder({ "reminder_id": "<existing reminder_id>", "content": "..." })',
|
|
490
490
|
].join('\n');
|
|
@@ -520,7 +520,7 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
|
|
|
520
520
|
'',
|
|
521
521
|
'Operations:',
|
|
522
522
|
'- Prefer creating a new Taskdoc section for discussion details: do_mind({ "category": "<category>", "selector": "<selector>", "content": "..." })',
|
|
523
|
-
'- Only update when an existing section truly needs rewriting and you have merged against the current Taskdoc content
|
|
523
|
+
'- Only update when an existing section truly needs rewriting and you have merged against the current Taskdoc content: first call recall_taskdoc({"selector":"<selector>"}) for content_hash, then change_mind({"selector":"<selector>","content":"...","previous_content_hash":"crc32:..."})',
|
|
524
524
|
'- Prefer adding a bridge reminder first: add_reminder({ "content": "..." })',
|
|
525
525
|
'- Only if an existing reminder is clearly the right place, and updating it would not add extra cognitive load in the current course: update_reminder({ "reminder_id": "<existing reminder_id>", "content": "..." })',
|
|
526
526
|
'- clear_mind({})',
|
package/dist/tools/ctrl.d.ts
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* - change_mind: Main Dialog only; update a `.tsk/` Taskdoc section without starting a new course
|
|
18
18
|
* - mind_more: Main Dialog only; append entries to a `.tsk/` Taskdoc section without starting a new course
|
|
19
19
|
* - never_mind: Main Dialog only; delete a `.tsk/` Taskdoc section file without starting a new course
|
|
20
|
-
* - recall_taskdoc: Read a Taskdoc section from `*.tsk/` by
|
|
20
|
+
* - recall_taskdoc: Read a Taskdoc section from `*.tsk/` by selector and optional category
|
|
21
21
|
*
|
|
22
22
|
* USAGE CONTEXT:
|
|
23
23
|
* Can both be triggered by an agent autonomously, or by human with role='user' msg,
|
package/dist/tools/ctrl.js
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* - change_mind: Main Dialog only; update a `.tsk/` Taskdoc section without starting a new course
|
|
19
19
|
* - mind_more: Main Dialog only; append entries to a `.tsk/` Taskdoc section without starting a new course
|
|
20
20
|
* - never_mind: Main Dialog only; delete a `.tsk/` Taskdoc section file without starting a new course
|
|
21
|
-
* - recall_taskdoc: Read a Taskdoc section from `*.tsk/` by
|
|
21
|
+
* - recall_taskdoc: Read a Taskdoc section from `*.tsk/` by selector and optional category
|
|
22
22
|
*
|
|
23
23
|
* USAGE CONTEXT:
|
|
24
24
|
* Can both be triggered by an agent autonomously, or by human with role='user' msg,
|
|
@@ -372,8 +372,8 @@ function getCtrlMessages(language) {
|
|
|
372
372
|
invalidFormatDoMind: '参数格式不对。用法:do_mind({ selector: string, category?: string, content: string })',
|
|
373
373
|
invalidFormatChangeMind: '参数格式不对。用法:change_mind({ selector: string, category?: string, content: string, previous_content_hash: string })',
|
|
374
374
|
tooManyArgsChangeMind: '参数格式不对。用法:change_mind({ selector: string, category?: string, content: string, previous_content_hash: string })',
|
|
375
|
-
taskDocPreviousContentHashRequired: '错误:change_mind 需要 previous_content_hash
|
|
376
|
-
taskDocPreviousContentHashInvalid: '错误:previous_content_hash 格式无效。它必须是 recall_taskdoc
|
|
375
|
+
taskDocPreviousContentHashRequired: '错误:change_mind 需要 previous_content_hash。请先调用 recall_taskdoc 显式取得当前章节的 content_hash,合并原有内容后再整段替换;没有把握时用 mind_more 追加小条目。',
|
|
376
|
+
taskDocPreviousContentHashInvalid: '错误:previous_content_hash 格式无效。它必须是 recall_taskdoc 返回的 crc32:<8位十六进制> content_hash。',
|
|
377
377
|
taskDocContentHashMismatch: (relativePath, currentContentHash) => `错误:${relativePath} 的内容哈希不匹配,说明该章节已变化或你没有基于当前内容改写。\n` +
|
|
378
378
|
`当前 content_hash:${currentContentHash}\n\n` +
|
|
379
379
|
`请重新读取/回顾当前章节内容,并只在已充分合并原有内容后重试。若新内容会冲掉、删除或实质替换原有内容,必须满足其一:\n` +
|
|
@@ -384,7 +384,7 @@ function getCtrlMessages(language) {
|
|
|
384
384
|
invalidFormatNeverMind: '参数格式不对。用法:never_mind({ selector: string, category?: string })',
|
|
385
385
|
mindMoreItemsRequired: '需要提供要追加的条目(items),且每一项都必须是非空字符串。\n' +
|
|
386
386
|
'示例:mind_more({"items":["- 下一步:复核验证结果(详见 <文档路径>#<章节>)","- 阻塞:等待 API 验收口径确认"]})',
|
|
387
|
-
invalidFormatRecallTaskdoc: '参数格式不对。用法:recall_taskdoc({
|
|
387
|
+
invalidFormatRecallTaskdoc: '参数格式不对。用法:recall_taskdoc({ selector: string, category?: string })',
|
|
388
388
|
taskDocContentRequired: '需要提供差遣牒内容(content)。\n' +
|
|
389
389
|
'示例:\n' +
|
|
390
390
|
'```json\n' +
|
|
@@ -397,15 +397,14 @@ function getCtrlMessages(language) {
|
|
|
397
397
|
pathMustBeWithinWorkspace: '路径必须位于 rtws(运行时工作区)内',
|
|
398
398
|
invalidTaskDocPath: (taskDocPath) => `差遣牒路径 '${taskDocPath}' 无效。应为 *.tsk/ 目录。`,
|
|
399
399
|
selectorRequired: '需要提供选择器(selector)。',
|
|
400
|
-
categoryRequired: '需要提供章节目录(category)。',
|
|
401
400
|
invalidSelector: (selector) => `选择器 '${selector}' 无效。可用:顶层 goals | constraints | progress;bearinmind 下 contracts | acceptance | grants | runbook | decisions | risks;或任意标识符(如 ux.checklist)。`,
|
|
402
401
|
invalidCategory: (category) => `目录名 '${category}' 无效。需匹配 ^[a-zA-Z][a-zA-Z0-9_-]*(\\.[a-zA-Z0-9_-]*)*$。`,
|
|
403
402
|
invalidCategorySelector: (selector) => `选择器 '${selector}' 无效。需匹配 ^[a-zA-Z][a-zA-Z0-9_-]*(\\.[a-zA-Z0-9_-]*)*$。`,
|
|
404
403
|
topLevelSelectorRequiresNoCategory: (category, selector) => `选择器 '${selector}' 是顶层保留分段(goals/constraints/progress),不能与 category='${category}' 一起用。`,
|
|
405
404
|
bearInMindSelectorRequiresBearInMindCategory: (category, selector) => `选择器 '${selector}' 只能在 category='bearinmind' 下用(当前 category='${category}')。`,
|
|
406
|
-
taskDocSectionAlreadyExists: (relativePath) => `无法新增:${relativePath}
|
|
405
|
+
taskDocSectionAlreadyExists: (relativePath) => `无法新增:${relativePath} 已存在。若确有把握要改写已有章节,请先用 recall_taskdoc 取得当前 content_hash,再使用 change_mind({"selector":"<selector>","content":"...","previous_content_hash":"crc32:..."})。`,
|
|
407
406
|
taskDocSectionChangeMissing: (relativePath) => `无法修改:${relativePath} 不存在。若要新增章节,请使用 do_mind({ ... })。`,
|
|
408
|
-
taskDocSectionMissing: (relativePath) => `未找到:${relativePath}。\n\n新增章节请使用 do_mind;已有章节追加小条目用 mind_more
|
|
407
|
+
taskDocSectionMissing: (relativePath) => `未找到:${relativePath}。\n\n新增章节请使用 do_mind;已有章节追加小条目用 mind_more;改写已有章节时先用 recall_taskdoc 取得当前 content_hash,再用 change_mind 带上它:\n- do_mind({"category":"<category>","selector":"<selector>","content":"..."})\n- mind_more({"category":"<category>","selector":"<selector>","items":["..."]})\n- recall_taskdoc({"category":"<category>","selector":"<selector>"})\n- change_mind({"category":"<category>","selector":"<selector>","content":"...","previous_content_hash":"crc32:..."})`,
|
|
409
408
|
taskDocSectionDeleteMissing: (relativePath) => `无法删除:${relativePath} 不存在。请先确认要删除的差遣牒章节。`,
|
|
410
409
|
clearedCoursePrompt: (nextCourse) => (0, driver_messages_1.formatNewCourseStartPrompt)('zh', { nextCourse, source: 'clear_mind' }),
|
|
411
410
|
};
|
|
@@ -422,8 +421,8 @@ function getCtrlMessages(language) {
|
|
|
422
421
|
invalidFormatDoMind: 'Error: Invalid args. Use: do_mind({ selector: string, category?: string, content: string })',
|
|
423
422
|
invalidFormatChangeMind: 'Error: Invalid args. Use: change_mind({ selector: string, category?: string, content: string, previous_content_hash: string })',
|
|
424
423
|
tooManyArgsChangeMind: 'Error: Invalid args. Use: change_mind({ selector: string, category?: string, content: string, previous_content_hash: string })',
|
|
425
|
-
taskDocPreviousContentHashRequired: 'Error: change_mind requires previous_content_hash.
|
|
426
|
-
taskDocPreviousContentHashInvalid: 'Error: invalid previous_content_hash. It must be the
|
|
424
|
+
taskDocPreviousContentHashRequired: 'Error: change_mind requires previous_content_hash. Call recall_taskdoc first to get the current section content_hash, merge the existing content, then replace the full section. If unsure, use mind_more for small append-only updates.',
|
|
425
|
+
taskDocPreviousContentHashInvalid: 'Error: invalid previous_content_hash. It must be the crc32:<8 hex chars> content_hash returned by recall_taskdoc.',
|
|
427
426
|
taskDocContentHashMismatch: (relativePath, currentContentHash) => `Error: content hash mismatch for \`${relativePath}\`; the section changed or your replacement was not based on the current content.\n` +
|
|
428
427
|
`Current content_hash: ${currentContentHash}\n\n` +
|
|
429
428
|
`Re-read/review the current section and retry only after fully merging existing content. If the new content would overwrite, delete, or materially replace existing content, one of these must be true:\n` +
|
|
@@ -434,7 +433,7 @@ function getCtrlMessages(language) {
|
|
|
434
433
|
invalidFormatNeverMind: 'Error: Invalid args. Use: never_mind({ selector: string, category?: string })',
|
|
435
434
|
mindMoreItemsRequired: 'Error: items are required, and every item must be a non-empty string.\n' +
|
|
436
435
|
'Example: mind_more({"items":["- Next: review verification results (details: <doc-path>#<section>)","- Blocker: API acceptance criteria pending"]})',
|
|
437
|
-
invalidFormatRecallTaskdoc: 'Error: Invalid args. Use: recall_taskdoc({
|
|
436
|
+
invalidFormatRecallTaskdoc: 'Error: Invalid args. Use: recall_taskdoc({ selector: string, category?: string })',
|
|
438
437
|
taskDocContentRequired: 'Error: Taskdoc content is required (content).\n' +
|
|
439
438
|
'Copy/paste example:\n' +
|
|
440
439
|
'```json\n' +
|
|
@@ -447,15 +446,14 @@ function getCtrlMessages(language) {
|
|
|
447
446
|
pathMustBeWithinWorkspace: 'Error: Path must be within rtws (runtime workspace)',
|
|
448
447
|
invalidTaskDocPath: (taskDocPath) => `Error: Invalid Taskdoc path '${taskDocPath}'. Expected a \`*.tsk/\` directory.`,
|
|
449
448
|
selectorRequired: 'Error: selector is required.',
|
|
450
|
-
categoryRequired: 'Error: category is required.',
|
|
451
449
|
invalidSelector: (selector) => `Error: Invalid selector '${selector}'. Use: top-level goals|constraints|progress; under bearinmind: contracts|acceptance|grants|runbook|decisions|risks; or any identifier (e.g. \`ux.checklist\`).`,
|
|
452
450
|
invalidCategory: (category) => `Error: Invalid category '${category}'. Must match \`^[a-zA-Z][a-zA-Z0-9_-]*(\\.[a-zA-Z0-9_-]+)*$\`.`,
|
|
453
451
|
invalidCategorySelector: (selector) => `Error: Invalid category selector '${selector}'. Must match \`^[a-zA-Z][a-zA-Z0-9_-]*(\\.[a-zA-Z0-9_-]+)*$\`.`,
|
|
454
452
|
topLevelSelectorRequiresNoCategory: (category, selector) => `Error: Selector '${selector}' is reserved for top-level sections (goals/constraints/progress) and must not be used with category='${category}'.`,
|
|
455
453
|
bearInMindSelectorRequiresBearInMindCategory: (category, selector) => `Error: Selector '${selector}' is only valid under category='bearinmind' (got category='${category}').`,
|
|
456
|
-
taskDocSectionAlreadyExists: (relativePath) => `Cannot add: \`${relativePath}\` already exists. If you are sure you need to rewrite an existing section,
|
|
454
|
+
taskDocSectionAlreadyExists: (relativePath) => `Cannot add: \`${relativePath}\` already exists. If you are sure you need to rewrite an existing section, call \`recall_taskdoc\` for the current content_hash first, then use \`change_mind({"selector":"<selector>","content":"...","previous_content_hash":"crc32:..."})\`.`,
|
|
457
455
|
taskDocSectionChangeMissing: (relativePath) => `Cannot change: \`${relativePath}\` does not exist. To create a new section, use \`do_mind({ ... })\`.`,
|
|
458
|
-
taskDocSectionMissing: (relativePath) => `Not found: \`${relativePath}\`.\n\nUse \`do_mind\` to create a section, \`mind_more\` for small append-only updates to existing sections, and \`change_mind\` with the current content_hash to rewrite existing sections:\n- \`do_mind({\"category\":\"<category>\",\"selector\":\"<selector>\",\"content\":\"...\"})\`\n- \`mind_more({\"category\":\"<category>\",\"selector\":\"<selector>\",\"items\":[\"...\"]})\`\n- \`change_mind({\"category\":\"<category>\",\"selector\":\"<selector>\",\"content\":\"...\",\"previous_content_hash\":\"
|
|
456
|
+
taskDocSectionMissing: (relativePath) => `Not found: \`${relativePath}\`.\n\nUse \`do_mind\` to create a section, \`mind_more\` for small append-only updates to existing sections, and \`recall_taskdoc\` then \`change_mind\` with the current content_hash to rewrite existing sections:\n- \`do_mind({\"category\":\"<category>\",\"selector\":\"<selector>\",\"content\":\"...\"})\`\n- \`mind_more({\"category\":\"<category>\",\"selector\":\"<selector>\",\"items\":[\"...\"]})\`\n- \`recall_taskdoc({\"category\":\"<category>\",\"selector\":\"<selector>\"})\`\n- \`change_mind({\"category\":\"<category>\",\"selector\":\"<selector>\",\"content\":\"...\",\"previous_content_hash\":\"crc32:...\"})\``,
|
|
459
457
|
taskDocSectionDeleteMissing: (relativePath) => `Cannot delete: \`${relativePath}\` does not exist. Check the Taskdoc section target first.`,
|
|
460
458
|
clearedCoursePrompt: (nextCourse) => (0, driver_messages_1.formatNewCourseStartPrompt)('en', { nextCourse, source: 'clear_mind' }),
|
|
461
459
|
};
|
|
@@ -750,7 +748,7 @@ exports.changeMindTool = {
|
|
|
750
748
|
content: { type: 'string', description: 'New section content.' },
|
|
751
749
|
previous_content_hash: {
|
|
752
750
|
type: 'string',
|
|
753
|
-
description: 'Content hash of the current section being replaced.
|
|
751
|
+
description: 'Content hash of the current section being replaced. Call recall_taskdoc first and use the returned content_hash.',
|
|
754
752
|
},
|
|
755
753
|
},
|
|
756
754
|
},
|
|
@@ -784,7 +782,7 @@ exports.changeMindTool = {
|
|
|
784
782
|
const previousContentHash = typeof previousContentHashValue === 'string' ? previousContentHashValue.trim() : '';
|
|
785
783
|
if (!previousContentHash)
|
|
786
784
|
return (0, tool_1.toolFailure)(t.taskDocPreviousContentHashRequired);
|
|
787
|
-
if (!/^
|
|
785
|
+
if (!/^crc32:[0-9a-f]{8}$/u.test(previousContentHash)) {
|
|
788
786
|
return (0, tool_1.toolFailure)(t.taskDocPreviousContentHashInvalid);
|
|
789
787
|
}
|
|
790
788
|
// Taskdoc path is immutable for the dialog lifecycle.
|
|
@@ -1166,18 +1164,24 @@ exports.mindMoreTool = {
|
|
|
1166
1164
|
exports.recallTaskdocTool = {
|
|
1167
1165
|
type: 'func',
|
|
1168
1166
|
name: 'recall_taskdoc',
|
|
1169
|
-
description: 'Read one Taskdoc section
|
|
1167
|
+
description: 'Read one Taskdoc section and return its content_hash.',
|
|
1170
1168
|
descriptionI18n: {
|
|
1171
|
-
en: 'Read one Taskdoc section
|
|
1172
|
-
zh: '
|
|
1169
|
+
en: 'Read one Taskdoc section and return its content_hash.',
|
|
1170
|
+
zh: '读取一段差遣牒章节并返回 content_hash。',
|
|
1173
1171
|
},
|
|
1174
1172
|
parameters: {
|
|
1175
1173
|
type: 'object',
|
|
1176
1174
|
additionalProperties: false,
|
|
1177
|
-
required: ['
|
|
1175
|
+
required: ['selector'],
|
|
1178
1176
|
properties: {
|
|
1179
|
-
category: {
|
|
1180
|
-
|
|
1177
|
+
category: {
|
|
1178
|
+
type: 'string',
|
|
1179
|
+
description: 'Optional category directory within the Taskdoc. Omit for top-level goals|constraints|progress.',
|
|
1180
|
+
},
|
|
1181
|
+
selector: {
|
|
1182
|
+
type: 'string',
|
|
1183
|
+
description: 'Section selector. Top-level: goals|constraints|progress. With category: selector within that category.',
|
|
1184
|
+
},
|
|
1181
1185
|
},
|
|
1182
1186
|
},
|
|
1183
1187
|
argsValidation: 'dominds',
|
|
@@ -1185,9 +1189,10 @@ exports.recallTaskdocTool = {
|
|
|
1185
1189
|
const language = (0, work_language_1.getWorkLanguage)();
|
|
1186
1190
|
const t = getCtrlMessages(language);
|
|
1187
1191
|
const categoryValue = args['category'];
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1192
|
+
if (categoryValue !== undefined && typeof categoryValue !== 'string') {
|
|
1193
|
+
return (0, tool_1.toolFailure)(t.invalidFormatRecallTaskdoc);
|
|
1194
|
+
}
|
|
1195
|
+
const category = typeof categoryValue === 'string' ? categoryValue.trim() : undefined;
|
|
1191
1196
|
const selectorValue = args['selector'];
|
|
1192
1197
|
const selector = typeof selectorValue === 'string' ? selectorValue.trim() : '';
|
|
1193
1198
|
if (selector === '')
|
|
@@ -1228,9 +1233,6 @@ exports.recallTaskdocTool = {
|
|
|
1228
1233
|
}
|
|
1229
1234
|
}
|
|
1230
1235
|
const target = parsed.target;
|
|
1231
|
-
if (target.kind === 'top_level') {
|
|
1232
|
-
return (0, tool_1.toolFailure)(t.invalidFormatRecallTaskdoc);
|
|
1233
|
-
}
|
|
1234
1236
|
const relPath = (0, task_package_1.taskPackageRelativePathForChangeMindTarget)(target);
|
|
1235
1237
|
const sectionPath = path.resolve(fullPath, relPath);
|
|
1236
1238
|
if (!isPathWithinDirectory(sectionPath, fullPath)) {
|
|
@@ -132,7 +132,7 @@ Taskdoc is a **task contract** and the task's **team-shared source of current tr
|
|
|
132
132
|
|
|
133
133
|
- Keep concise: reminders are often 1-3 items; prefer `update_reminder` to compress/merge
|
|
134
134
|
- Separate carriers: information that must synchronize the team's current effective state, key decisions, next steps, or still-active blockers belongs in `progress`, the quasi-real-time task bulletin board; reminders keep local resume details
|
|
135
|
-
- Team-facing: keep `progress` scannable and centered on what is still effective now; do not let it degrade into a personal log, raw chronology, scratchpad, or stale history pile. Use `mind_more` for small additions and `change_mind` with the
|
|
135
|
+
- Team-facing: keep `progress` scannable and centered on what is still effective now; do not let it degrade into a personal log, raw chronology, scratchpad, or stale history pile. Use `mind_more` for small additions; when cleanup/reordering/compression is needed, call `recall_taskdoc` first and then use `change_mind` with the returned `content_hash` as `previous_content_hash`
|
|
136
136
|
- Condense when needed: `mind_more` is not the default bookkeeping move. If one topic already has several phase notes, prefer `change_mind` to merge them into the current summary; put the detailed expansion in formal rtws documentation and keep a document pointer in Taskdoc. If the replacement would overwrite existing content, proceed only with direct human confirmation or after applying a human-approved SOP/acceptance standard that considers the existing content
|
|
137
137
|
- Collapse before clearing: the Main Dialog first records undocumented discussion details the next course needs to know into the appropriate Taskdoc sections, then creates a structured continuation-package reminder; a Side Dialog must not maintain Taskdoc or draft Taskdoc update proposals, and should directly maintain sufficiently detailed continuation-package reminders. If the current course is already under system remediation, rough multi-reminder carry-over is acceptable but must be reconciled first in the new course
|
|
138
138
|
- Avoid raw-material dumps: do not paste long logs or large tool outputs into reminders
|
|
@@ -156,7 +156,7 @@ Taskdoc is a **task contract** and the task's **team-shared source of current tr
|
|
|
156
156
|
## Limitations and Notes
|
|
157
157
|
|
|
158
158
|
1. `dialog` reminders end with the dialog; `personal` reminders stay visible in all later dialogs you lead
|
|
159
|
-
2. Use `do_mind` to create missing Taskdoc sections; use `mind_more` for small Taskdoc additions; use `change_mind` for full-section replacement of existing sections after merging existing content and
|
|
159
|
+
2. Use `do_mind` to create missing Taskdoc sections; use `mind_more` for small Taskdoc additions; use `change_mind` for full-section replacement of existing sections only after merging existing content and calling `recall_taskdoc` for the current `content_hash`; use `never_mind` when a whole section file should be deleted. Do not treat `mind_more` as a chronology tool; when cleanup, stale-entry removal, or same-topic consolidation is needed, use `recall_taskdoc` then `change_mind`
|
|
160
160
|
3. `do_mind` / `mind_more` / `change_mind` / `never_mind` do not start a new course
|
|
161
161
|
4. A continuation-package reminder should keep only details still not covered by Taskdoc but easy to lose during resume; in the Main Dialog, undocumented discussion details from current dialog history that the next course needs to know should be written to the appropriate Taskdoc sections first; in a Side Dialog under caution/critical remediation, maintain sufficiently detailed continuation-package reminders only
|
|
162
162
|
5. Do not turn `personal` reminders into a long-term fact dump; move durable knowledge into `personal_memory`
|
|
@@ -130,11 +130,15 @@ mind_more({
|
|
|
130
130
|
});
|
|
131
131
|
|
|
132
132
|
// Full-section replacement when cleanup, reordering, same-topic consolidation, or chronology compression is needed
|
|
133
|
+
recall_taskdoc({
|
|
134
|
+
selector: 'progress',
|
|
135
|
+
});
|
|
136
|
+
|
|
133
137
|
change_mind({
|
|
134
138
|
selector: 'progress',
|
|
135
139
|
content:
|
|
136
140
|
'## Progress\n\n### Current Effective State\n- The memory-carrier boundary cleanup is complete; next we strengthen the Taskdoc bulletin-board semantics; details: <doc-path>#<section>\n\n### Decisions In Effect\n- `personal_memory` is no longer treated as a short-term junk drawer\n- `team_memory` now carries only long-lived team conventions and invariants\n\n### Next Step\n- Add stronger `progress` bulletin-board guidance in control / team_mgmt manuals\n\n### Still-Active Blockers\n- None',
|
|
137
|
-
previous_content_hash: '
|
|
141
|
+
previous_content_hash: 'crc32:...',
|
|
138
142
|
});
|
|
139
143
|
```
|
|
140
144
|
|
|
@@ -147,11 +151,15 @@ Update task objectives.
|
|
|
147
151
|
### Example
|
|
148
152
|
|
|
149
153
|
```typescript
|
|
154
|
+
recall_taskdoc({
|
|
155
|
+
selector: 'goals',
|
|
156
|
+
});
|
|
157
|
+
|
|
150
158
|
change_mind({
|
|
151
159
|
selector: 'goals',
|
|
152
160
|
content:
|
|
153
161
|
'## Goals\n\n- [ ] Create all toolset manuals\n - [x] ws_mod\n - [x] team_mgmt\n - [x] personal_memory\n - [ ] control (In Progress)\n- [ ] Write tool descriptions',
|
|
154
|
-
previous_content_hash: '
|
|
162
|
+
previous_content_hash: 'crc32:...',
|
|
155
163
|
});
|
|
156
164
|
```
|
|
157
165
|
|
|
@@ -164,11 +172,15 @@ Update task constraints.
|
|
|
164
172
|
### Example
|
|
165
173
|
|
|
166
174
|
```typescript
|
|
175
|
+
recall_taskdoc({
|
|
176
|
+
selector: 'constraints',
|
|
177
|
+
});
|
|
178
|
+
|
|
167
179
|
change_mind({
|
|
168
180
|
selector: 'constraints',
|
|
169
181
|
content:
|
|
170
182
|
'## Constraints\n\n- man function must dynamically filter toolsets based on team.yaml\n- Runtime effective: Changes to team.yaml immediately visible\n- Toolset names use underscore format\n- New constraint: Each toolset needs 5 topics × 2 languages',
|
|
171
|
-
previous_content_hash: '
|
|
183
|
+
previous_content_hash: 'crc32:...',
|
|
172
184
|
});
|
|
173
185
|
```
|
|
174
186
|
|
|
@@ -181,6 +193,11 @@ Read taskdoc chapter content.
|
|
|
181
193
|
### Example
|
|
182
194
|
|
|
183
195
|
```typescript
|
|
196
|
+
// Top-level sections are injected as content, but recall_taskdoc returns their content_hash
|
|
197
|
+
recall_taskdoc({
|
|
198
|
+
selector: 'progress',
|
|
199
|
+
});
|
|
200
|
+
|
|
184
201
|
// Read bearinmind runbook
|
|
185
202
|
recall_taskdoc({
|
|
186
203
|
category: 'bearinmind',
|
|
@@ -204,10 +221,14 @@ Maintain taskdoc integrity and consistency, and keep `progress` as a team-scanna
|
|
|
204
221
|
|
|
205
222
|
```typescript
|
|
206
223
|
// Update progress (keep goals / constraints / progress consistent)
|
|
224
|
+
recall_taskdoc({
|
|
225
|
+
selector: 'progress',
|
|
226
|
+
});
|
|
227
|
+
|
|
207
228
|
change_mind({
|
|
208
229
|
selector: 'progress',
|
|
209
230
|
content:
|
|
210
231
|
'## Progress\n\n### Current Effective State\n- The boundary wording has been propagated into handbook sources and tests; details: <doc-path>#<section>\n\n### Decisions In Effect\n- role assets / personal_memory / team_memory / Taskdoc-progress / reminders now have separated responsibilities\n\n### Next Step\n- Re-verify control manual wording, Taskdoc display text, and boundary tests\n\n### Still-Active Blockers\n- None',
|
|
211
|
-
previous_content_hash: '
|
|
232
|
+
previous_content_hash: 'crc32:...',
|
|
212
233
|
});
|
|
213
234
|
```
|