dominds 1.28.0 → 1.29.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.
Files changed (51) hide show
  1. package/README.md +1 -0
  2. package/README.zh.md +1 -0
  3. package/dist/dialog-global-registry.d.ts +2 -0
  4. package/dist/dialog-global-registry.js +41 -0
  5. package/dist/dialog.d.ts +1 -0
  6. package/dist/dialog.js +5 -0
  7. package/dist/docs/codex-provider-auth-policy.md +59 -0
  8. package/dist/docs/codex-provider-auth-policy.zh.md +59 -0
  9. package/dist/docs/llm-provider-isolation.md +1 -1
  10. package/dist/docs/llm-provider-isolation.zh.md +1 -1
  11. package/dist/llm/api-quirks.d.ts +1 -0
  12. package/dist/llm/api-quirks.js +2 -1
  13. package/dist/llm/client.d.ts +2 -1
  14. package/dist/llm/defaults.yaml +163 -7
  15. package/dist/llm/gen/codex.d.ts +3 -2
  16. package/dist/llm/gen/codex.js +82 -10
  17. package/dist/llm/gen/google.d.ts +20 -0
  18. package/dist/llm/gen/google.js +735 -0
  19. package/dist/llm/gen/mock.js +8 -0
  20. package/dist/llm/gen/openai-compatible.js +5 -0
  21. package/dist/llm/gen/openai.js +9 -1
  22. package/dist/llm/gen/registry.js +4 -2
  23. package/dist/llm/gen/tool-output-limit.js +1 -0
  24. package/dist/llm/gen/tool-result-image-ingest.d.ts +1 -0
  25. package/dist/llm/gen/tool-result-image-ingest.js +2 -1
  26. package/dist/llm/kernel-driver/drive.js +21 -3
  27. package/dist/main-dialog-goal-reminder.d.ts +20 -0
  28. package/dist/main-dialog-goal-reminder.js +344 -0
  29. package/dist/minds/system-prompt-parts.js +14 -14
  30. package/dist/runtime/driver-messages.js +16 -16
  31. package/dist/server/setup-routes.js +3 -1
  32. package/dist/team.d.ts +12 -3
  33. package/dist/team.js +36 -4
  34. package/dist/tools/builtins.js +2 -0
  35. package/dist/tools/ctrl.d.ts +1 -0
  36. package/dist/tools/ctrl.js +65 -1
  37. package/dist/tools/prompts/control/en/index.md +4 -2
  38. package/dist/tools/prompts/control/en/principles.md +5 -4
  39. package/dist/tools/prompts/control/en/scenarios.md +9 -4
  40. package/dist/tools/prompts/control/en/tools.md +53 -9
  41. package/dist/tools/prompts/control/zh/index.md +4 -2
  42. package/dist/tools/prompts/control/zh/principles.md +5 -4
  43. package/dist/tools/prompts/control/zh/scenarios.md +9 -4
  44. package/dist/tools/prompts/control/zh/tools.md +53 -9
  45. package/dist/tools/team_mgmt-manual.js +10 -8
  46. package/dist/tools/team_mgmt.js +3 -0
  47. package/dist/tools/txt.js +115 -70
  48. package/package.json +5 -4
  49. package/webapp/dist/assets/{main-YWP5PWOM.js → main-YWYVZGBW.js} +119 -60
  50. package/webapp/dist/assets/{main-YWP5PWOM.js.map → main-YWYVZGBW.js.map} +3 -3
  51. package/webapp/dist/index.html +1 -1
@@ -139,39 +139,39 @@ function getMemoryPromptCopy(ctx) {
139
139
  const contextHealthLineZh = ctx.contextHealthPromptMode === 'critical'
140
140
  ? ctx.isSideDialog
141
141
  ? 'Dominds 已提醒上下文告急:立即停止继续大实现/大阅读。你当前处于支线对话;本程不维护差遣牒,也不整理差遣牒更新提案,只维护足够详尽的当前对话范围(scope=dialog)接续包提醒项并写明本路任务目标,然后 `clear_mind`。提醒项没有固定长度限制。'
142
- : 'Dominds 已提醒上下文告急:立即停止继续大实现/大阅读。本程只做保信息:先用当前对话范围(scope=dialog)接续包提醒项写明本路任务目标,再把确需共享给同一差遣牒其它对话的讨论事实落到差遣牒合适章节,最后提炼恢复本路对话容易丢的接续包提醒项并 `clear_mind`。'
142
+ : 'Dominds 已提醒上下文告急:立即停止继续大实现/大阅读。本程只做保信息:先按固定“本路主线目标”提醒处理目标;它要求先问人类就立即问,并用 `set_dialog_goal` 记录答案。再把确需共享给同一差遣牒其它对话的讨论事实落到差遣牒合适章节,最后提炼恢复本路对话容易丢的接续包提醒项并 `clear_mind`。'
143
143
  : ctx.contextHealthPromptMode === 'caution'
144
144
  ? ctx.isSideDialog
145
145
  ? 'Dominds 已提醒上下文吃紧:不要继续扩张上下文。你当前处于支线对话;本程不维护差遣牒,也不整理差遣牒更新提案,优先维护足够详尽的当前对话范围(scope=dialog)接续包提醒项并写明本路任务目标,然后尽快 `clear_mind`。提醒项没有固定长度限制。'
146
- : 'Dominds 已提醒上下文吃紧:不要继续扩张上下文。本程优先用当前对话范围(scope=dialog)接续包提醒项写明本路任务目标,再把确需共享给同一差遣牒其它对话的讨论事实落到差遣牒合适章节,最后提炼恢复本路对话容易丢的提醒项并尽快 `clear_mind`,不要继续大实现/大阅读。'
146
+ : 'Dominds 已提醒上下文吃紧:不要继续扩张上下文。本程先按固定“本路主线目标”提醒处理目标;它要求先问人类就立即问,并用 `set_dialog_goal` 记录答案。再把确需共享给同一差遣牒其它对话的讨论事实落到差遣牒合适章节,最后提炼恢复本路对话容易丢的提醒项并尽快 `clear_mind`,不要继续大实现/大阅读。'
147
147
  : '当前没有生效中的上下文保全提示,按正常工作流推进。';
148
148
  const taskdocLogLineZh = ctx.contextHealthPromptMode === 'critical'
149
149
  ? ctx.isSideDialog
150
150
  ? 'Dominds 已提醒上下文告急:支线对话不要维护差遣牒,也不要整理差遣牒更新提案;把当前这一路支线对话的任务目标、讨论细节、下一步、关键定位、运行/验证信息、临时路径/ID/样例输入和恢复依据写入当前对话范围(scope=dialog)接续包提醒项。提醒项没有固定长度限制,宁可完整一些;允许多条粗略提醒项求稳,但不要在当前程提前做“新一程清醒复核”。Dominds 真正开启新一程后,第一步按 scope=dialog 提醒项里的本路任务目标继续,再复核整理:删除冗余、纠正偏激/失真思路,收敛成高质量提醒项。'
151
- : '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步。Dominds 已提醒上下文告急:先确保当前对话范围(scope=dialog)接续包提醒项写明本路任务目标;再检查当前对话历史里尚未落文档的讨论细节,只有确需同一差遣牒其它对话/队友共享的状态/决策/约束/目标,主线才优先用 `do_mind` 新增章节保存;只有在确实需要改写已有章节、已完成合并并先调用 `recall_taskdoc` 取得当前 `content_hash` 作为 `previous_content_hash` 时,才用 `change_mind`。接续包提醒项只留差遣牒仍未覆盖、但恢复本路对话容易丢的细节;本程允许先保留多条粗略提醒项求稳,但不要在当前程提前做“新一程清醒复核”。Dominds 真正开启新一程后,第一步按 scope=dialog 提醒项里的本路任务目标继续,再复核整理:删除冗余、纠正偏激/失真思路,收敛成高质量提醒项。'
151
+ : '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步。Dominds 已提醒上下文告急:先完整读取固定“本路主线目标”提醒;它要求先问人类就立即问,并用 `set_dialog_goal` 记录答案;它写“依差遣牒推进”但同时提示已有并行对话,也先问人类;只有没有并行确认提示时才按差遣牒继续;已有具体目标就按目标继续。再检查当前对话历史里尚未落文档的讨论细节,只有确需同一差遣牒其它对话/队友共享的状态/决策/约束/目标,主线才优先用 `do_mind` 新增章节保存;只有在确实需要改写已有章节、已完成合并并先调用 `recall_taskdoc` 取得当前 `content_hash` 作为 `previous_content_hash` 时,才用 `change_mind`。接续包提醒项只留差遣牒仍未覆盖、但恢复本路对话容易丢的细节;本程允许先保留多条粗略提醒项求稳,但不要在当前程提前做“新一程清醒复核”。Dominds 真正开启新一程后,第一步按固定“本路主线目标”提醒继续,再复核整理:删除冗余、纠正偏激/失真思路,收敛成高质量提醒项。'
152
152
  : ctx.contextHealthPromptMode === 'caution'
153
153
  ? ctx.isSideDialog
154
154
  ? 'Dominds 已提醒上下文吃紧:支线对话不要维护差遣牒,也不要整理差遣牒更新提案;把当前这一路支线对话的任务目标、讨论细节、下一步、关键定位、运行/验证信息、临时路径/ID/样例输入和恢复依据写入当前对话范围(scope=dialog)接续包提醒项。提醒项没有固定长度限制,宁可完整一些;若一时来不及,可先保留多条粗略提醒项过桥,但不要在当前程提前做“新一程清醒复核”。Dominds 真正开启新一程后,第一步按 scope=dialog 提醒项里的本路任务目标继续,再复核整理:删除冗余、纠正偏激/失真思路,收敛成高质量提醒项。'
155
- : '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步。Dominds 已提醒上下文吃紧:先确保当前对话范围(scope=dialog)接续包提醒项写明本路任务目标;再检查当前对话历史里尚未落文档的讨论细节,只有确需同一差遣牒其它对话/队友共享的状态/决策/约束/目标,主线才优先用 `do_mind` 新增章节保存;只有在确实需要改写已有章节、已完成合并并先调用 `recall_taskdoc` 取得当前 `content_hash` 作为 `previous_content_hash` 时,才用 `change_mind`。接续包提醒项只留差遣牒仍未覆盖、但恢复本路对话容易丢的细节;若一时来不及,可先保留多条粗略提醒项过桥,但不要在当前程提前做“新一程清醒复核”。Dominds 真正开启新一程后,第一步按 scope=dialog 提醒项里的本路任务目标继续,再复核整理:删除冗余、纠正偏激/失真思路,收敛成高质量提醒项。'
156
- : '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步;提醒项也只留可扫读摘录。准备 `clear_mind` 的接续包提醒项必须是当前对话范围(scope=dialog),写明本路任务目标,并保持结构化、便于快速恢复。';
155
+ : '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步。Dominds 已提醒上下文吃紧:先完整读取固定“本路主线目标”提醒;它要求先问人类就立即问,并用 `set_dialog_goal` 记录答案;它写“依差遣牒推进”但同时提示已有并行对话,也先问人类;只有没有并行确认提示时才按差遣牒继续;已有具体目标就按目标继续。再检查当前对话历史里尚未落文档的讨论细节,只有确需同一差遣牒其它对话/队友共享的状态/决策/约束/目标,主线才优先用 `do_mind` 新增章节保存;只有在确实需要改写已有章节、已完成合并并先调用 `recall_taskdoc` 取得当前 `content_hash` 作为 `previous_content_hash` 时,才用 `change_mind`。接续包提醒项只留差遣牒仍未覆盖、但恢复本路对话容易丢的细节;若一时来不及,可先保留多条粗略提醒项过桥,但不要在当前程提前做“新一程清醒复核”。Dominds 真正开启新一程后,第一步按固定“本路主线目标”提醒继续,再复核整理:删除冗余、纠正偏激/失真思路,收敛成高质量提醒项。'
156
+ : '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步;提醒项也只留可扫读摘录。主线目标看固定“本路主线目标”提醒,并用 `set_dialog_goal` 修改;准备 `clear_mind` 的普通接续包提醒项只写下一步、关键定位、运行/验证方式和容易丢的临时细节,并保持结构化、便于快速恢复。';
157
157
  const contextHealthLineEn = ctx.contextHealthPromptMode === 'critical'
158
158
  ? ctx.isSideDialog
159
159
  ? 'Dominds has warned that context is critical: stop large implementations/reads immediately. You are in a Side Dialog; in this course, do not maintain Taskdoc and do not draft Taskdoc update proposals. Only maintain sufficiently detailed current-dialog scoped (scope=dialog) continuation-package reminders, state this dialog task goal, then `clear_mind`. Reminders have no fixed length limit.'
160
- : 'Dominds has warned that context is critical: stop large implementations/reads immediately. In this course, only preserve information: first state this dialog task goal in a current-dialog scoped (scope=dialog) continuation-package reminder, then record only discussion facts that other dialogs/teammates sharing the same Taskdoc truly need to know, then distill details easy to lose when resuming this dialog into continuation-package reminders and `clear_mind`.'
160
+ : 'Dominds has warned that context is critical: stop large implementations/reads immediately. In this course, only preserve information: first follow the fixed Main Dialog goal reminder; if it says to ask the human, ask and record the answer with `set_dialog_goal`. Then record only discussion facts that other dialogs/teammates sharing the same Taskdoc truly need to know, then distill details easy to lose when resuming this dialog into continuation-package reminders and `clear_mind`.'
161
161
  : ctx.contextHealthPromptMode === 'caution'
162
162
  ? ctx.isSideDialog
163
163
  ? 'Dominds has warned that context is tight: do not keep expanding context. You are in a Side Dialog; in this course, do not maintain Taskdoc and do not draft Taskdoc update proposals. Prioritize sufficiently detailed current-dialog scoped (scope=dialog) continuation-package reminders, state this dialog task goal, then `clear_mind`. Reminders have no fixed length limit.'
164
- : 'Dominds has warned that context is tight: do not keep expanding context. In this course, first state this dialog task goal in a current-dialog scoped (scope=dialog) continuation-package reminder, then record only discussion facts that other dialogs/teammates sharing the same Taskdoc truly need to know, then distill details easy to lose when resuming this dialog into reminders and `clear_mind`; do not continue large implementations/reads.'
164
+ : 'Dominds has warned that context is tight: do not keep expanding context. In this course, first follow the fixed Main Dialog goal reminder; if it says to ask the human, ask and record the answer with `set_dialog_goal`. Then record only discussion facts that other dialogs/teammates sharing the same Taskdoc truly need to know, then distill details easy to lose when resuming this dialog into reminders and `clear_mind`; do not continue large implementations/reads.'
165
165
  : 'There is no active context-preservation notice in effect right now; proceed with the normal workflow.';
166
166
  const taskdocLogLineEn = ctx.contextHealthPromptMode === 'critical'
167
167
  ? ctx.isSideDialog
168
168
  ? 'Dominds has warned that context is critical: in a Side Dialog, do not maintain Taskdoc and do not draft Taskdoc update proposals. Put this specific Side Dialog task goal, discussion details, next actions, key pointers, run/verify info, volatile paths/IDs/sample inputs, and resume reasoning into current-dialog scoped (scope=dialog) continuation-package reminders. Reminders have no fixed length 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 Dominds actually starts the new course, first continue from the task goal in scope=dialog reminders, then review/rewrite them: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.'
169
- : 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps. Dominds has warned that context is critical: first make sure a current-dialog scoped (scope=dialog) continuation-package reminder states this dialog task goal. Then review current-dialog discussion details not yet written into documentation; only if they truly need to be shared with other dialogs/teammates on the same Taskdoc, 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 when resuming this dialog. Rough multi-reminder bridge notes are acceptable in this course, but do not perform the new-course “clear-headed review” early. Once Dominds actually starts the new course, first continue from the task goal in scope=dialog reminders, then review/rewrite them: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.'
169
+ : 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps. Dominds has warned that context is critical: first read the full fixed Main Dialog goal reminder. If it says to ask the human, ask and record the answer with `set_dialog_goal`; if it says "proceed from the Taskdoc" but also says there is a parallel dialog, ask the human first; only proceed from the Taskdoc when there is no parallel-dialog note; if it already has a concrete goal, follow that goal. Then review current-dialog discussion details not yet written into documentation; only if they truly need to be shared with other dialogs/teammates on the same Taskdoc, 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 when resuming this dialog. Rough multi-reminder bridge notes are acceptable in this course, but do not perform the new-course “clear-headed review” early. Once Dominds actually starts the new course, first continue from the fixed Main Dialog goal reminder, then review/rewrite bridge reminders: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.'
170
170
  : ctx.contextHealthPromptMode === 'caution'
171
171
  ? ctx.isSideDialog
172
172
  ? 'Dominds has warned that context is tight: in a Side Dialog, do not maintain Taskdoc and do not draft Taskdoc update proposals. Put this specific Side Dialog task goal, discussion details, next actions, key pointers, run/verify info, volatile paths/IDs/sample inputs, and resume reasoning into current-dialog scoped (scope=dialog) continuation-package reminders. Reminders have no fixed length 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 Dominds actually starts the new course, first continue from the task goal in scope=dialog reminders, then review/rewrite them: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.'
173
- : 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps. Dominds has warned that context is tight: first make sure a current-dialog scoped (scope=dialog) continuation-package reminder states this dialog task goal. Then review current-dialog discussion details not yet written into documentation; only if they truly need to be shared with other dialogs/teammates on the same Taskdoc, 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 when resuming this dialog. If needed, rough multi-reminder bridge notes are acceptable, but do not perform the new-course “clear-headed review” early. Once Dominds actually starts the new course, first continue from the task goal in scope=dialog reminders, then review/rewrite them: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.'
174
- : 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps; reminders should also keep only scannable excerpts. Continuation-package reminders before `clear_mind` must be current-dialog scoped (scope=dialog), state this dialog task goal, and stay structured for fast resume.';
173
+ : 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps. Dominds has warned that context is tight: first read the full fixed Main Dialog goal reminder. If it says to ask the human, ask and record the answer with `set_dialog_goal`; if it says "proceed from the Taskdoc" but also says there is a parallel dialog, ask the human first; only proceed from the Taskdoc when there is no parallel-dialog note; if it already has a concrete goal, follow that goal. Then review current-dialog discussion details not yet written into documentation; only if they truly need to be shared with other dialogs/teammates on the same Taskdoc, 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 when resuming this dialog. If needed, rough multi-reminder bridge notes are acceptable, but do not perform the new-course “clear-headed review” early. Once Dominds actually starts the new course, first continue from the fixed Main Dialog goal reminder, then review/rewrite bridge reminders: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.'
174
+ : 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps; reminders should also keep only scannable excerpts. Main Dialog goals come from the fixed goal reminder and are changed with `set_dialog_goal`; ordinary continuation-package reminders before `clear_mind` keep next steps, key pointers, run/verify notes, and volatile details for fast resume.';
175
175
  if (ctx.language === 'zh') {
176
176
  return {
177
177
  title: '### 记忆系统(重要)',
@@ -189,7 +189,7 @@ function getMemoryPromptCopy(ctx) {
189
189
  constraintsLine: '- 约定:`constraints` 只写任务特有的硬要求,不得写入系统提示/工具文档里已明确且由系统强制执行的通用规则(例如 `*.tsk/` 封装禁止通用文件工具)。一经发现重复,必须删除并告知用户。',
190
190
  remindersLine: ctx.isSideDialog
191
191
  ? '- 提醒项(以 `reminder_id` 标识,手头工作):当前对话的高频工作记录/关键细节(偏私有,不作为全队公告);默认保持少量(常见 1–3 条),优先 `update_reminder` 压缩/合并,不再需要就 `delete_reminder`。准备 `clear_mind` 开启新一程对话时,整理当前对话范围(scope=dialog)的“结构化接续包提醒项”,必须写明本路任务目标,并保留恢复工作容易丢的细节(如第一步、关键定位、运行/验证信息、临时 ids/路径)。若 Dominds 已提醒当前程吃紧/告急,支线对话不要维护差遣牒,也不要整理差遣牒更新提案;只维护足够详尽的 scope=dialog 接续包提醒项,提醒项没有固定长度限制,允许先保留多条粗略提醒项把信息带过桥;当前程只做保信息 + clear_mind;只有 Dominds 实际开启新一程后,第一步才是按 scope=dialog 提醒项里的本路任务目标继续,再复核整理这些接续包/粗略提醒项:删除冗余、纠正偏激或失真的过桥思路、压缩成高质量提醒项。'
192
- : '- 提醒项(以 `reminder_id` 标识,手头工作):当前对话的高频工作记录/关键细节(偏私有,不作为全队公告);默认保持少量(常见 1–3 条),优先 `update_reminder` 压缩/合并,不再需要就 `delete_reminder`。准备 `clear_mind` 开启新一程对话时,先用当前对话范围(scope=dialog)结构化接续包提醒项写明本路任务目标,再把尚未落实到文档、且下一程需要同一差遣牒其它对话/队友知会的讨论细节落到差遣牒合适章节;提醒项只保留差遣牒仍未覆盖、但恢复本路对话容易丢的细节(如第一步、关键定位、运行/验证信息、临时 ids/路径)。若 Dominds 已提醒当前程吃紧/告急,则允许先保留多条粗略 scope=dialog 提醒项把信息带过桥;当前程只做落文档、保信息 + clear_mind;只有 Dominds 实际开启新一程后,第一步才是按 scope=dialog 提醒项里的本路任务目标继续,再复核整理这些接续包/粗略提醒项:删除冗余、纠正偏激或失真的过桥思路、压缩成高质量提醒项。',
192
+ : '- 提醒项(以 `reminder_id` 标识,手头工作):当前对话的高频工作记录/关键细节(偏私有,不作为全队公告);默认保持少量(常见 1–3 条),优先 `update_reminder` 压缩/合并,不再需要就 `delete_reminder`。主线目标看固定“本路主线目标”提醒,并用 `set_dialog_goal` 修改;普通 `dialog` 接续包只保留差遣牒仍未覆盖、但恢复本路对话容易丢的细节(如第一步、关键定位、运行/验证信息、临时 ids/路径)。准备 `clear_mind` 开启新一程对话时,先按固定主线目标提醒处理目标,再把尚未落实到文档、且下一程需要同一差遣牒其它对话/队友知会的讨论细节落到差遣牒合适章节。若 Dominds 已提醒当前程吃紧/告急,则允许先保留多条粗略 scope=dialog 提醒项把信息带过桥;当前程只做落文档、保信息 + clear_mind;只有 Dominds 实际开启新一程后,第一步才是按固定“本路主线目标”提醒继续,再复核整理这些接续包/粗略提醒项:删除冗余、纠正偏激或失真的过桥思路、压缩成高质量提醒项。',
193
193
  teamMemoryLine: '- 团队记忆:稳定的团队约定/工程规约(跨任务共享)。',
194
194
  personalMemoryLine: '- 个人记忆:稳定的个人习惯/偏好与职责域知识;记忆会在每次生成时自动注入上下文,应保持少量且准确(关键文档/代码的精确路径 + 最小必要事实)。不要记录具体任务状态。',
195
195
  skillsLine: '- Skills:可复用操作指引/检查清单/触发条件与边界。工作区关联强的事实、路径、局部契约进 memory/env;独立于工作区内容的“怎么做”进 skill。skill 不授予工具权限;需要脚本/MCP/外部能力时应配套 app/toolset/权限配置。',
@@ -203,7 +203,7 @@ function getMemoryPromptCopy(ctx) {
203
203
  sideDialogWorkflowLine: ctx.contextHealthPromptMode === 'normal'
204
204
  ? `工作流:先做事 → 再提炼(\`update_reminder\`;必要时整理差遣牒追加条目/更新提案并诉请 \`@${ctx.taskdocMaintainerId}\` 合并写入)→ 然后 \`clear_mind\` 清空噪音。`
205
205
  : '工作流:停止扩张上下文 → 维护足够详尽的当前对话范围(scope=dialog)接续包提醒项(`add_reminder` 或 `update_reminder`,必须写明本路任务目标,没有固定长度限制)→ 然后 `clear_mind` 开启新一程。',
206
- mainDialogWorkflowLine: '工作流:先做事 -> 再提炼(`update_reminder` + `mind_more(progress)`;需要压缩/删旧时先 `recall_taskdoc` 取得 `content_hash`,再用带 `previous_content_hash` 的 `change_mind`;要删除整章文件时用 `never_mind`)-> 然后 `clear_mind` 清空噪音。',
206
+ mainDialogWorkflowLine: '工作流:先按固定“本路主线目标”提醒推进(需要时用 `set_dialog_goal` 记录人类确认的目标)-> 再提炼(`update_reminder` + `mind_more(progress)`;需要压缩/删旧时先 `recall_taskdoc` 取得 `content_hash`,再用带 `previous_content_hash` 的 `change_mind`;要删除整章文件时用 `never_mind`)-> 然后 `clear_mind` 清空噪音。',
207
207
  ...(ctx.isSideDialog
208
208
  ? {}
209
209
  : {
@@ -229,7 +229,7 @@ function getMemoryPromptCopy(ctx) {
229
229
  constraintsLine: '- Convention: Taskdoc `constraints` must contain task-specific requirements only; do not include global, system-enforced rules already stated in system prompt/tool docs (e.g. `.tsk/` encapsulation bans general file tools). If duplication is found, you MUST remove it and notify the user.',
230
230
  remindersLine: ctx.isSideDialog
231
231
  ? '- Reminders (addressed by `reminder_id`, current work): your high-frequency per-dialog worklog + critical details (not a team bulletin board); keep it small by default (often 1–3 items), prefer `update_reminder` to compress/merge, and delete when obsolete. When preparing `clear_mind` to start a new course, create a current-dialog scoped (scope=dialog) structured continuation-package reminder, state this dialog task goal, and preserve details easy to lose during resume (first step, key pointers, run/verify info, volatile ids/paths). If Dominds has warned that the current course is tight/critical, you are in a Side Dialog: do not maintain Taskdoc and do not draft Taskdoc update proposals; only maintain sufficiently detailed scope=dialog continuation-package reminders. Reminders have no fixed length limit, rough multi-reminder bridge notes are acceptable, and in the current course you should only preserve volatile information and clear_mind. Only after Dominds actually starts the new course does the mandatory first step become continuing this dialog from the task goal in scope=dialog reminders, then reviewing and rewriting those continuation/rough reminders with a clear head: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.'
232
- : '- Reminders (addressed by `reminder_id`, current work): your high-frequency per-dialog worklog + critical details (not a team bulletin board); keep it small by default (often 1–3 items), prefer `update_reminder` to compress/merge, and delete when obsolete. When preparing `clear_mind` to start a new course, first state this dialog task goal in a current-dialog scoped (scope=dialog) structured continuation-package reminder, then record undocumented discussion details that other dialogs/teammates sharing the same Taskdoc truly need to know into the appropriate Taskdoc sections. Reminders should keep only details still not covered by Taskdoc but easy to lose when resuming this dialog (first step, key pointers, run/verify info, volatile ids/paths). If Dominds has warned that the current course is tight/critical, rough multi-reminder scope=dialog bridge notes are acceptable; in the current course, only document missing details, preserve volatile information, and clear_mind. Only after Dominds actually starts the new course does the mandatory first step become continuing this dialog from the task goal in scope=dialog reminders, then reviewing and rewriting those continuation/rough reminders with a clear head: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.',
232
+ : '- Reminders (addressed by `reminder_id`, current work): your high-frequency per-dialog worklog + critical details (not a team bulletin board); keep it small by default (often 1–3 items), prefer `update_reminder` to compress/merge, and delete when obsolete. Main Dialog goals come from the fixed goal reminder and are changed with `set_dialog_goal`; ordinary `dialog` continuation packages keep only details still not covered by Taskdoc but easy to lose when resuming this dialog (first step, key pointers, run/verify info, volatile ids/paths). When preparing `clear_mind` to start a new course, first follow the fixed goal reminder, then record undocumented discussion details that other dialogs/teammates sharing the same Taskdoc truly need to know into the appropriate Taskdoc sections. If Dominds has warned that the current course is tight/critical, rough multi-reminder scope=dialog bridge notes are acceptable; in the current course, only document missing details, preserve volatile information, and clear_mind. Only after Dominds actually starts the new course does the mandatory first step become continuing this dialog from the fixed Main Dialog goal reminder, then reviewing and rewriting those continuation/rough reminders with a clear head: remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders.',
233
233
  teamMemoryLine: '- Team memory: stable shared conventions (cross-task).',
234
234
  personalMemoryLine: '- Personal memory: stable personal habits/preferences and responsibility-scope knowledge. Memory is automatically injected into context on each generation: keep it small and accurate (exact key doc/code paths + minimal key facts); do not store per-task state.',
235
235
  skillsLine: '- Skills: reusable operating guidance, checklists, triggers, and boundaries. Workspace-coupled facts, paths, and local contracts belong in memory/env; workspace-independent “how to do it” procedures belong in skills. Skills do not grant tool permissions; pair scripts/MCP/external capabilities with apps/toolsets/permission configuration.',
@@ -243,7 +243,7 @@ function getMemoryPromptCopy(ctx) {
243
243
  sideDialogWorkflowLine: ctx.contextHealthPromptMode === 'normal'
244
244
  ? `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.`
245
245
  : 'Workflow: stop expanding context → maintain sufficiently detailed current-dialog scoped (scope=dialog) continuation-package reminders (`add_reminder` or `update_reminder`, must state this dialog task goal, with no fixed length limit) → then `clear_mind` to start a new course.',
246
- 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.',
246
+ mainDialogWorkflowLine: 'Workflow: follow the fixed Main Dialog goal reminder first (use `set_dialog_goal` when a human-confirmed goal must be recorded) -> 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.',
247
247
  ...(ctx.isSideDialog
248
248
  ? {}
249
249
  : {
@@ -135,18 +135,18 @@ function formatNewCourseStartPrompt(language, args) {
135
135
  : `Dominds 因上下文已告急而自动开启了第 ${args.nextCourse} 程对话。`;
136
136
  return (`${noticePrefix} ${prefix} ` +
137
137
  '这是 Dominds 的换程提示,不是新的用户诉求;不要把这条提示当成新的待办,也不要只回复“收到/好的/我会先整理提醒项”。' +
138
- '现在已经进入新一程:如果见到上一程的上下文吃紧/告急状况记录,此时既已消除。第一步先读取当前对话范围(scope=dialog)的接续包提醒项,尤其是其中写明的当前对话任务目标,并按这个目标恢复当前这一路主线对话/支线对话,不要仅凭同一差遣牒里的其它主线或支线内容改道。' +
138
+ '现在已经进入新一程:如果见到上一程的上下文吃紧/告急状况记录,此时既已消除。第一步先看固定“本路主线目标”提醒(若当前是主线),或读取当前对话范围(scope=dialog)的支线接续包提醒项(若当前是支线),按其中写明的目标恢复当前这一路对话,不要仅凭同一差遣牒里的其它主线或支线内容改道。' +
139
139
  '随后复核并在必要时整理接续包提醒项,以清醒头脑删除冗余、纠正偏激或失真的过桥思路、压缩成高质量提醒项;若提醒项已经足够清晰,就不要为了整理而整理。' +
140
- '完成这一步后,直接按照当前对话范围提醒项里的任务目标继续推进;除非任务自然需要对用户交付结果,否则不要为这条提示单独回复。');
140
+ '完成这一步后,直接按照固定主线目标提醒或支线接续包提醒项里的目标继续推进;除非任务自然需要对用户交付结果,否则不要为这条提示单独回复。');
141
141
  }
142
142
  const prefix = args.source === 'clear_mind'
143
143
  ? `This is dialog course #${args.nextCourse}. You just cleared your mind.`
144
144
  : `Dominds auto-started dialog course #${args.nextCourse} because context was critical.`;
145
145
  return (`${noticePrefix} ${prefix} ` +
146
146
  'This is a Dominds course-transition notice, not a new user request; do not treat it as a new to-do, and do not reply with a standalone "acknowledged/ok/I will reorganize the reminders first". ' +
147
- 'You are now in a new course: if you see records that the previous course was context-tight or context-critical, that condition is now resolved. First read the current-dialog scoped (scope=dialog) continuation-package reminders, especially the current dialog task goal written there, and resume this specific Main Dialog or Side Dialog from that goal instead of drifting into other Main/Side Dialog work that shares the same Taskdoc. ' +
147
+ 'You are now in a new course: if you see records that the previous course was context-tight or context-critical, that condition is now resolved. First read the fixed Main Dialog goal reminder when this is a Main Dialog, or the current-dialog scoped (scope=dialog) Side Dialog continuation-package reminders when this is a Side Dialog, and resume this specific dialog from that goal instead of drifting into other Main/Side Dialog work that shares the same Taskdoc. ' +
148
148
  'Then review and, if needed, rewrite any continuation-package reminders with a clear head, remove redundancy, correct biased or distorted bridge notes, and compress them into high-quality reminders; if the reminders are already clear enough, do not churn on them. ' +
149
- 'After that, continue directly from the task goal in the current-dialog scoped reminders; unless the task naturally calls for a user-facing delivery, do not send a standalone reply just for this notice.');
149
+ 'After that, continue directly from the fixed Main Dialog goal reminder or the Side Dialog continuation-package goal; unless the task naturally calls for a user-facing delivery, do not send a standalone reply just for this notice.');
150
150
  }
151
151
  function formatDiligenceAutoContinuePrompt(language, diligenceText) {
152
152
  const noticePrefix = formatSystemNoticePrefix(language);
@@ -817,12 +817,12 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
817
817
  '',
818
818
  '影响:对话历史中的工具调用/结果信息很多已经过时,成为你的思考负担。',
819
819
  '',
820
- '行动:你当前处于主线对话。先新增或更新当前对话范围(scope=dialog)接续包提醒项,并把当前这一路主线对话的任务目标写清楚。然后只把确实需要同一差遣牒下其它对话/队友知会的讨论事实落到差遣牒合适章节;再把差遣牒仍未覆盖、但恢复本路对话会丢的信息记进 scope=dialog 新提醒项过桥(任务目标 + 下一步行动 + 关键定位信息 + 运行/验证信息 + 容易丢的临时细节);允许先带着一定冗余,也允许先写成多条粗略提醒项,不必在当前程强行压成单条。',
820
+ '行动:你当前处于主线对话。先完整读取固定“本路主线目标”提醒:它要求先问人类就立即问,并用 set_dialog_goal 记录答案;它写“依差遣牒推进”但同时提示已有并行对话,也先问人类;只有没有并行确认提示时才按差遣牒继续;已有具体目标就按目标继续。然后只把确实需要同一差遣牒下其它对话/队友知会的讨论事实落到差遣牒合适章节;再把差遣牒仍未覆盖、但恢复本路对话会丢的信息记进 scope=dialog 新提醒项过桥(下一步行动 + 关键定位信息 + 运行/验证信息 + 容易丢的临时细节);允许先带着一定冗余,也允许先写成多条粗略提醒项,不必在当前程强行压成单条。',
821
821
  '',
822
- 'Dominds 已提醒当前上下文吃紧:不要继续扩张上下文,也不要提前进入“按接续包做清醒复核”的模式;那是 Dominds 真正开启新一程后的第一步。当前程的目标是先用 scope=dialog 提醒项保住本路对话目标,再把需要共享的事实补进差遣牒,最后把差遣牒仍未覆盖、但恢复本路对话会丢的信息带过桥;真正清理冗余、合并提醒项,放到新一程再做。然后主动 clear_mind,开启新一程对话继续工作。',
822
+ 'Dominds 已提醒当前上下文吃紧:不要继续扩张上下文,也不要提前进入“按接续包做清醒复核”的模式;那是 Dominds 真正开启新一程后的第一步。当前程的目标是先按固定“本路主线目标”提醒处理目标,再把需要共享的事实补进差遣牒,最后把差遣牒仍未覆盖、但恢复本路对话会丢的信息带过桥;真正清理冗余、合并提醒项,放到新一程再做。然后主动 clear_mind,开启新一程对话继续工作。',
823
823
  '',
824
824
  '操作:',
825
- '- 必须确保当前对话范围提醒项写明本路任务目标:add_reminder({ "content": "...", "scope": "dialog" }) 或 update_reminder({ "reminder_id": "<现有 reminder_id>", "content": "..." })',
825
+ '- 若固定“本路主线目标”提醒要求先问人类:问清后调用 set_dialog_goal({ "mode": "goal", "goal": "..." })',
826
826
  '- 优先新增差遣牒章节保存讨论细节:do_mind({ "category": "<category>", "selector": "<selector>", "content": "..." })',
827
827
  '- 只有在确实需要改写已有章节、且已对照当前差遣牒内容完成合并时,才先调用 recall_taskdoc({"selector":"<selector>"}) 取得 content_hash,再更新:change_mind({"selector":"<selector>","content":"...","previous_content_hash":"crc32:..."})',
828
828
  '- 优先新增当前对话 scope=dialog 过桥提醒项:add_reminder({ "content": "...", "scope": "dialog" })',
@@ -858,17 +858,17 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
858
858
  '',
859
859
  `Dominds 最多再提醒你 ${args.promptsRemainingAfterThis} 次,之后将自动清理头脑开启新一程对话。`,
860
860
  '',
861
- '行动:你当前处于主线对话。尽快保住易丢信息,然后 clear_mind。Dominds 已提醒当前上下文告急:先新增或更新当前对话范围(scope=dialog)接续包提醒项,并把当前这一路主线对话的任务目标写清楚。然后只把确实需要同一差遣牒下其它对话/队友知会的讨论事实落到差遣牒合适章节;再把差遣牒仍未覆盖、但恢复本路对话会丢的信息新增 scope=dialog 提醒项带过桥;允许先保留多条粗略提醒项,甚至带一定冗余也可以,不必在当前程强行整理干净。',
861
+ '行动:你当前处于主线对话。尽快保住易丢信息,然后 clear_mind。Dominds 已提醒当前上下文告急:先完整读取固定“本路主线目标”提醒;它要求先问人类就立即问,并用 set_dialog_goal 记录答案;它写“依差遣牒推进”但同时提示已有并行对话,也先问人类;只有没有并行确认提示时才按差遣牒继续;已有具体目标就按目标继续。然后只把确实需要同一差遣牒下其它对话/队友知会的讨论事实落到差遣牒合适章节;再把差遣牒仍未覆盖、但恢复本路对话会丢的信息新增 scope=dialog 提醒项带过桥;允许先保留多条粗略提醒项,甚至带一定冗余也可以,不必在当前程强行整理干净。',
862
862
  '',
863
863
  '操作:',
864
- '- 必须确保当前对话范围提醒项写明本路任务目标:add_reminder({ "content": "...", "scope": "dialog" }) 或 update_reminder({ "reminder_id": "<现有 reminder_id>", "content": "..." })',
864
+ '- 若固定“本路主线目标”提醒要求先问人类:问清后调用 set_dialog_goal({ "mode": "goal", "goal": "..." })',
865
865
  '- 优先新增差遣牒章节保存讨论细节:do_mind({ "category": "<category>", "selector": "<selector>", "content": "..." })',
866
866
  '- 只有在确实需要改写已有章节、且已对照当前差遣牒内容完成合并时,才先调用 recall_taskdoc({"selector":"<selector>"}) 取得 content_hash,再更新:change_mind({"selector":"<selector>","content":"...","previous_content_hash":"crc32:..."})',
867
867
  '- 优先新增当前对话 scope=dialog 过桥提醒项:add_reminder({ "content": "...", "scope": "dialog" })',
868
868
  '- 只有在确实能就地复用现有提醒项、且不会额外增加当前程认知负担时,才更新:update_reminder({ "reminder_id": "<现有 reminder_id>", "content": "..." })',
869
869
  '- clear_mind({})',
870
870
  '',
871
- '接续包要点:当前对话任务目标 + 下一步行动 + 关键定位信息 + 运行验证方式 + 容易丢的临时细节;不要重复差遣牒已有内容,本程刚落入差遣牒的讨论细节只需提示下一程先查差遣牒。Dominds 已提醒当前上下文告急:不要提前做“新一程清醒复核”;Dominds 真正开启新一程后,第一步才是按当前对话范围提醒项里的任务目标继续本路对话,并重新审视整理:删除冗余、纠正偏激/失真思路、合并并压缩成高质量提醒项。',
871
+ '接续包要点:下一步行动 + 关键定位信息 + 运行验证方式 + 容易丢的临时细节;不要重复固定“本路主线目标”提醒和差遣牒已有内容,本程刚落入差遣牒的讨论细节只需提示下一程先查差遣牒。Dominds 已提醒当前上下文告急:不要提前做“新一程清醒复核”;Dominds 真正开启新一程后,第一步才是按固定“本路主线目标”提醒继续本路对话,并重新审视整理:删除冗余、纠正偏激/失真思路、合并并压缩成高质量提醒项。',
872
872
  ].join('\n');
873
873
  }
874
874
  if (args.kind === 'caution' && args.mode === 'soft') {
@@ -900,12 +900,12 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
900
900
  '',
901
901
  'Impact: stale call/results in dialog history are creating cognitive noise.',
902
902
  '',
903
- 'Action: you are in the Main Dialog. First add or update a current-dialog scoped (scope=dialog) continuation-package reminder and state this specific Main Dialog task goal clearly. Then record only discussion facts that other dialogs/teammates sharing the same Taskdoc truly need to know into the appropriate Taskdoc sections. After that, write information still not covered by Taskdoc but easy to lose for resuming this dialog into scope=dialog bridge reminders (task goal + next step + key pointers + run/verify info + easy-to-lose volatile details). Some redundancy is acceptable, and rough multi-reminder carry-over is acceptable too; do not force everything into one clean reminder in the current course.',
903
+ 'Action: you are in the Main Dialog. First read the full fixed Main Dialog goal reminder. If it says to ask the human first, ask immediately and record the answer with set_dialog_goal; if it says "proceed from the Taskdoc" but also says there is a parallel dialog, ask the human first; only proceed from the Taskdoc when there is no parallel-dialog note; if it already has a concrete goal, follow that goal. Then record only discussion facts that other dialogs/teammates sharing the same Taskdoc truly need to know into the appropriate Taskdoc sections. After that, write information still not covered by Taskdoc but easy to lose for resuming this dialog into scope=dialog bridge reminders (next step + key pointers + run/verify info + easy-to-lose volatile details). Some redundancy is acceptable, and rough multi-reminder carry-over is acceptable too; do not force everything into one clean reminder in the current course.',
904
904
  '',
905
- 'Dominds has already warned that context is tight for the current course, so do not keep expanding context and do not switch early into “clear-headed continuation-package review” mode; that is the first step only after Dominds actually starts the new course. In the current course, the goal is to first preserve this dialog goal in a scope=dialog reminder, then fill Taskdoc only with facts that need to be shared, and finally carry forward details still not covered by Taskdoc but needed to resume this dialog; reminder cleanup and dedup belong to the new course. Then proactively clear_mind to start a new dialog course.',
905
+ 'Dominds has already warned that context is tight for the current course, so do not keep expanding context and do not switch early into “clear-headed continuation-package review” mode; that is the first step only after Dominds actually starts the new course. In the current course, the goal is to follow the fixed Main Dialog goal reminder, then fill Taskdoc only with facts that need to be shared, and finally carry forward details still not covered by Taskdoc but needed to resume this dialog; reminder cleanup and dedup belong to the new course. Then proactively clear_mind to start a new dialog course.',
906
906
  '',
907
907
  'Operations:',
908
- '- Ensure a current-dialog scoped reminder states this dialog task goal: add_reminder({ "content": "...", "scope": "dialog" }) or update_reminder({ "reminder_id": "<existing reminder_id>", "content": "..." })',
908
+ '- If the fixed Main Dialog goal reminder says to ask the human first: ask, then call set_dialog_goal({ "mode": "goal", "goal": "..." })',
909
909
  '- Prefer creating a new Taskdoc section for discussion details: do_mind({ "category": "<category>", "selector": "<selector>", "content": "..." })',
910
910
  '- 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:..."})',
911
911
  '- Prefer adding a current-dialog scope=dialog bridge reminder first: add_reminder({ "content": "...", "scope": "dialog" })',
@@ -941,17 +941,17 @@ function formatAgentFacingContextHealthV3RemediationGuide(language, args) {
941
941
  '',
942
942
  `Dominds will remind you ${args.promptsRemainingAfterThis} more time(s), then automatically clear mind.`,
943
943
  '',
944
- 'Action: you are in the Main Dialog. Preserve easy-to-lose information, then clear_mind. Because Dominds has warned that context is critical, first add or update a current-dialog scoped (scope=dialog) continuation-package reminder and state this specific Main Dialog task goal clearly. Then record only discussion facts that other dialogs/teammates sharing the same Taskdoc truly need to know into the appropriate Taskdoc sections. After that, add scope=dialog bridge reminders for information still not covered by Taskdoc but easy to lose when resuming this dialog. Multiple rough reminders, including some redundancy, are acceptable as a bridge; do not spend the current course forcing them into a clean final package.',
944
+ 'Action: you are in the Main Dialog. Preserve easy-to-lose information, then clear_mind. Because Dominds has warned that context is critical, first read the full fixed Main Dialog goal reminder. If it says to ask the human first, ask immediately and record the answer with set_dialog_goal; if it says "proceed from the Taskdoc" but also says there is a parallel dialog, ask the human first; only proceed from the Taskdoc when there is no parallel-dialog note; if it already has a concrete goal, follow that goal. Then record only discussion facts that other dialogs/teammates sharing the same Taskdoc truly need to know into the appropriate Taskdoc sections. After that, add scope=dialog bridge reminders for information still not covered by Taskdoc but easy to lose when resuming this dialog. Multiple rough reminders, including some redundancy, are acceptable as a bridge; do not spend the current course forcing them into a clean final package.',
945
945
  '',
946
946
  'Operations:',
947
- '- Ensure a current-dialog scoped reminder states this dialog task goal: add_reminder({ "content": "...", "scope": "dialog" }) or update_reminder({ "reminder_id": "<existing reminder_id>", "content": "..." })',
947
+ '- If the fixed Main Dialog goal reminder says to ask the human first: ask, then call set_dialog_goal({ "mode": "goal", "goal": "..." })',
948
948
  '- Prefer creating a new Taskdoc section for discussion details: do_mind({ "category": "<category>", "selector": "<selector>", "content": "..." })',
949
949
  '- 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:..."})',
950
950
  '- Prefer adding a current-dialog scope=dialog bridge reminder first: add_reminder({ "content": "...", "scope": "dialog" })',
951
951
  '- 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": "..." })',
952
952
  '- clear_mind({})',
953
953
  '',
954
- 'Continuation package: current dialog task goal + next step + key pointers + run/verify info + easy-to-lose volatile details. Do not duplicate Taskdoc content; for discussion details just written into Taskdoc in this course, only remind the next course to review Taskdoc first. Because Dominds has warned that context is critical in the current course, do not start the new-course cleanup early; once Dominds actually starts the new course, the first step is to continue this dialog from the task goal in current-dialog scoped reminders and reconcile rough bridge reminders by removing redundancy, correcting biased or distorted bridge notes, and merging/compressing them into high-quality reminders.',
954
+ 'Continuation package: next step + key pointers + run/verify info + easy-to-lose volatile details. Do not duplicate the fixed Main Dialog goal reminder or Taskdoc content; for discussion details just written into Taskdoc in this course, only remind the next course to review Taskdoc first. Because Dominds has warned that context is critical in the current course, do not start the new-course cleanup early; once Dominds actually starts the new course, the first step is to continue this dialog from the fixed Main Dialog goal reminder and reconcile rough bridge reminders by removing redundancy, correcting biased or distorted bridge notes, and merging/compressing them into high-quality reminders.',
955
955
  ].join('\n');
956
956
  }
957
957
  function formatAgentFacingCriticalUserInterjectionRemediationGuide(language, args) {
@@ -357,6 +357,7 @@ function extractProminentModelParams(modelParamOptions) {
357
357
  addSection('openai-compatible', modelParamOptions['openai-compatible']);
358
358
  addSection('anthropic', modelParamOptions.anthropic);
359
359
  addSection('anthropic-compatible', modelParamOptions['anthropic-compatible']);
360
+ addSection('google', modelParamOptions.google);
360
361
  for (const [namespace, section] of sections) {
361
362
  for (const [key, optUnknown] of Object.entries(section)) {
362
363
  if (!optUnknown || typeof optUnknown !== 'object')
@@ -687,7 +688,8 @@ function parseOptionalTeamModelParams(value) {
687
688
  namespace !== 'openai' &&
688
689
  namespace !== 'openai-compatible' &&
689
690
  namespace !== 'anthropic' &&
690
- namespace !== 'anthropic-compatible')
691
+ namespace !== 'anthropic-compatible' &&
692
+ namespace !== 'google')
691
693
  return null;
692
694
  if (!isRecord(nsUnknown))
693
695
  return null;
package/dist/team.d.ts CHANGED
@@ -30,7 +30,7 @@ export declare namespace Team {
30
30
  temperature?: number;
31
31
  service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority';
32
32
  top_p?: number;
33
- reasoning_effort?: 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';
33
+ reasoning_effort?: 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | 'ultra';
34
34
  reasoning_summary?: 'auto' | 'concise' | 'detailed' | 'none';
35
35
  verbosity?: 'low' | 'medium' | 'high';
36
36
  parallel_tool_calls?: boolean;
@@ -41,7 +41,7 @@ export declare namespace Team {
41
41
  temperature?: number;
42
42
  service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority';
43
43
  top_p?: number;
44
- reasoning_effort?: 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';
44
+ reasoning_effort?: 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max';
45
45
  reasoning_summary?: 'auto' | 'concise' | 'detailed' | 'none';
46
46
  verbosity?: 'low' | 'medium' | 'high';
47
47
  parallel_tool_calls?: boolean;
@@ -91,6 +91,13 @@ export declare namespace Team {
91
91
  type AnthropicCompatibleModelParams = Omit<AnthropicModelParams, 'thinking'> & {
92
92
  thinking?: boolean;
93
93
  };
94
+ export type GoogleModelParams = {
95
+ thinking?: boolean;
96
+ thinking_budget?: number;
97
+ temperature?: number;
98
+ top_p?: number;
99
+ google_search_tool?: boolean;
100
+ };
94
101
  export interface ModelParams {
95
102
  json_response?: boolean;
96
103
  codex?: CodexModelParams;
@@ -98,6 +105,7 @@ export declare namespace Team {
98
105
  'openai-compatible'?: OpenAiCompatibleModelParams;
99
106
  anthropic?: AnthropicModelParams;
100
107
  'anthropic-compatible'?: AnthropicCompatibleModelParams;
108
+ google?: GoogleModelParams;
101
109
  }
102
110
  /**
103
111
  * Team.Member
@@ -204,7 +212,8 @@ export declare namespace Team {
204
212
  export function load(): Promise<Team>;
205
213
  export const TEAM_YAML_ROOT_KEYS: readonly ["member_defaults", "default_responder", "shell_specialists", "members"];
206
214
  export const TEAM_YAML_MEMBER_KEYS: readonly ["name", "from", "use", "import", "provider", "model", "gofor", "nogo", "toolsets", "tools", "model_params", "fbr-effort", "fbr_effort", "fbr_model_params", "diligence-push-max", "diligence_push_max", "read_dirs", "write_dirs", "no_read_dirs", "no_write_dirs", "read_file_ext_names", "write_file_ext_names", "no_read_file_ext_names", "no_write_file_ext_names", "icon", "streaming", "hidden"];
207
- export const TEAM_YAML_MODEL_PARAMS_ROOT_KEYS: readonly ["json_response", "codex", "openai", "openai-compatible", "anthropic", "anthropic-compatible"];
215
+ export const TEAM_YAML_MODEL_PARAMS_ROOT_KEYS: readonly ["json_response", "codex", "openai", "openai-compatible", "anthropic", "anthropic-compatible", "google"];
216
+ export const TEAM_YAML_MODEL_PARAMS_GOOGLE_KEYS: readonly ["thinking", "thinking_budget", "temperature", "top_p", "google_search_tool"];
208
217
  export const TEAM_YAML_MODEL_PARAMS_OPENAI_KEYS: readonly ["temperature", "service_tier", "top_p", "reasoning_effort", "reasoning_summary", "verbosity", "parallel_tool_calls", "safety_identifier", "text_format", "text_format_json_schema_name", "text_format_json_schema", "text_format_json_schema_strict", "web_search_tool", "web_search_context_size", "web_search_allowed_domains", "web_search_include_sources"];
209
218
  export const TEAM_YAML_MODEL_PARAMS_OPENAI_COMPATIBLE_KEYS: readonly ["temperature", "service_tier", "top_p", "parallel_tool_calls", "safety_identifier", "text_format", "text_format_json_schema_name", "text_format_json_schema", "text_format_json_schema_strict", "reasoning_effort", "reasoning_split", "thinking"];
210
219
  export const TEAM_YAML_MODEL_PARAMS_CODEX_KEYS: readonly ["temperature", "service_tier", "top_p", "reasoning_effort", "reasoning_summary", "verbosity", "parallel_tool_calls", "web_search", "json_response"];
package/dist/team.js CHANGED
@@ -1306,6 +1306,14 @@ exports.Team = Team;
1306
1306
  'openai-compatible',
1307
1307
  'anthropic',
1308
1308
  'anthropic-compatible',
1309
+ 'google',
1310
+ ];
1311
+ Team.TEAM_YAML_MODEL_PARAMS_GOOGLE_KEYS = [
1312
+ 'thinking',
1313
+ 'thinking_budget',
1314
+ 'temperature',
1315
+ 'top_p',
1316
+ 'google_search_tool',
1309
1317
  ];
1310
1318
  Team.TEAM_YAML_MODEL_PARAMS_OPENAI_KEYS = [
1311
1319
  'temperature',
@@ -1463,6 +1471,13 @@ exports.Team = Team;
1463
1471
  pushIssue(`${idPrefix}/${issuePrefix}/anthropic-compatible/unknown_fields`, `Invalid .minds/team.yaml: ${modelParamsAt}.anthropic-compatible contains unknown fields.`, buildUnknownFieldErrorText(`${modelParamsAt}.anthropic-compatible`, unknownAtAnthropicCompatible, {}));
1464
1472
  }
1465
1473
  }
1474
+ const rawGoogle = rawModelParams.google;
1475
+ if (rawGoogle !== undefined && isRecordValue(rawGoogle)) {
1476
+ const unknownAtGoogle = listUnknownKeys(rawGoogle, Team.TEAM_YAML_MODEL_PARAMS_GOOGLE_KEYS);
1477
+ if (unknownAtGoogle.length > 0) {
1478
+ pushIssue(`${idPrefix}/${issuePrefix}/google/unknown_fields`, `Invalid .minds/team.yaml: ${modelParamsAt}.google contains unknown fields.`, buildUnknownFieldErrorText(`${modelParamsAt}.google`, unknownAtGoogle, {}));
1479
+ }
1480
+ }
1466
1481
  };
1467
1482
  validateOptionalModelParamsField('model_params', 'model_params');
1468
1483
  validateOptionalModelParamsField('fbr_model_params', 'fbr_model_params');
@@ -2255,8 +2270,10 @@ exports.Team = Team;
2255
2270
  reasoningEffort !== 'low' &&
2256
2271
  reasoningEffort !== 'medium' &&
2257
2272
  reasoningEffort !== 'high' &&
2258
- reasoningEffort !== 'xhigh') {
2259
- throw new Error(`Invalid ${at2}.reasoning_effort: expected none|minimal|low|medium|high|xhigh (got ${describeValueType(reasoningEffort)})`);
2273
+ reasoningEffort !== 'xhigh' &&
2274
+ reasoningEffort !== 'max' &&
2275
+ reasoningEffort !== 'ultra') {
2276
+ throw new Error(`Invalid ${at2}.reasoning_effort: expected none|minimal|low|medium|high|xhigh|max|ultra (got ${describeValueType(reasoningEffort)})`);
2260
2277
  }
2261
2278
  const reasoningSummary = params.reasoning_summary;
2262
2279
  if (reasoningSummary !== undefined &&
@@ -2308,8 +2325,9 @@ exports.Team = Team;
2308
2325
  reasoningEffort !== 'low' &&
2309
2326
  reasoningEffort !== 'medium' &&
2310
2327
  reasoningEffort !== 'high' &&
2311
- reasoningEffort !== 'xhigh') {
2312
- throw new Error(`Invalid ${at2}.reasoning_effort: expected none|minimal|low|medium|high|xhigh (got ${describeValueType(reasoningEffort)})`);
2328
+ reasoningEffort !== 'xhigh' &&
2329
+ reasoningEffort !== 'max') {
2330
+ throw new Error(`Invalid ${at2}.reasoning_effort: expected none|minimal|low|medium|high|xhigh|max (got ${describeValueType(reasoningEffort)})`);
2313
2331
  }
2314
2332
  const reasoningSummary = params.reasoning_summary;
2315
2333
  if (reasoningSummary !== undefined &&
@@ -2453,6 +2471,7 @@ exports.Team = Team;
2453
2471
  const anthropicCompatible = obj['anthropic-compatible'] === undefined
2454
2472
  ? undefined
2455
2473
  : asRecord(obj['anthropic-compatible'], `${at}.anthropic-compatible`);
2474
+ const google = obj.google === undefined ? undefined : asRecord(obj.google, `${at}.google`);
2456
2475
  if (codex)
2457
2476
  validateCodexParams(codex, `${at}.codex`);
2458
2477
  if (openai)
@@ -2480,6 +2499,13 @@ exports.Team = Team;
2480
2499
  asOptionalBoolean(anthropicCompatible.thinking, `${at}.anthropic-compatible.thinking`);
2481
2500
  asOptionalBoolean(anthropicCompatible.json_response, `${at}.anthropic-compatible.json_response`);
2482
2501
  }
2502
+ if (google) {
2503
+ asOptionalBoolean(google.thinking, `${at}.google.thinking`);
2504
+ asOptionalNumber(google.thinking_budget, `${at}.google.thinking_budget`);
2505
+ asOptionalNumber(google.temperature, `${at}.google.temperature`);
2506
+ asOptionalNumber(google.top_p, `${at}.google.top_p`);
2507
+ asOptionalBoolean(google.google_search_tool, `${at}.google.google_search_tool`);
2508
+ }
2483
2509
  asOptionalBoolean(obj.json_response, `${at}.json_response`);
2484
2510
  const out = {};
2485
2511
  if (obj.json_response !== undefined)
@@ -2513,6 +2539,12 @@ exports.Team = Team;
2513
2539
  knownAnthropicCompatible;
2514
2540
  }
2515
2541
  }
2542
+ if (google) {
2543
+ const knownGoogle = pickKnownModelParams(google, Team.TEAM_YAML_MODEL_PARAMS_GOOGLE_KEYS);
2544
+ if (Object.keys(knownGoogle).length > 0) {
2545
+ out.google = knownGoogle;
2546
+ }
2547
+ }
2516
2548
  return Object.keys(out).length > 0 ? out : undefined;
2517
2549
  }
2518
2550
  })(Team || (exports.Team = Team = {}));
@@ -128,6 +128,7 @@ function manualSpecFor(toolsetId) {
128
128
  (0, registry_1.registerTool)(ctrl_1.deleteReminderTool);
129
129
  (0, registry_1.registerTool)(ctrl_1.updateReminderTool);
130
130
  (0, registry_1.registerTool)(ctrl_1.migrateReminderTool);
131
+ (0, registry_1.registerTool)(ctrl_1.setDialogGoalTool);
131
132
  (0, registry_1.registerTool)(ctrl_1.clearMindTool);
132
133
  (0, registry_1.registerTool)(ctrl_1.doMindTool);
133
134
  (0, registry_1.registerTool)(ctrl_1.changeMindTool);
@@ -201,6 +202,7 @@ for (const tool of team_mgmt_1.teamMgmtTools) {
201
202
  ctrl_1.deleteReminderTool,
202
203
  ctrl_1.updateReminderTool,
203
204
  ctrl_1.migrateReminderTool,
205
+ ctrl_1.setDialogGoalTool,
204
206
  ctrl_1.clearMindTool,
205
207
  ctrl_1.doMindTool,
206
208
  ctrl_1.changeMindTool,
@@ -34,6 +34,7 @@ export declare const deleteReminderTool: FuncTool;
34
34
  export declare const addReminderTool: FuncTool;
35
35
  export declare const updateReminderTool: FuncTool;
36
36
  export declare const migrateReminderTool: FuncTool;
37
+ export declare const setDialogGoalTool: FuncTool;
37
38
  export declare const clearMindTool: FuncTool;
38
39
  export declare const changeMindTool: FuncTool;
39
40
  export declare const doMindTool: FuncTool;
@@ -64,10 +64,11 @@ var __importStar = (this && this.__importStar) || (function () {
64
64
  };
65
65
  })();
66
66
  Object.defineProperty(exports, "__esModule", { value: true });
67
- exports.recallTaskdocTool = exports.mindMoreTool = exports.neverMindTool = exports.doMindTool = exports.changeMindTool = exports.clearMindTool = exports.migrateReminderTool = exports.updateReminderTool = exports.addReminderTool = exports.deleteReminderTool = void 0;
67
+ exports.recallTaskdocTool = exports.mindMoreTool = exports.neverMindTool = exports.doMindTool = exports.changeMindTool = exports.clearMindTool = exports.setDialogGoalTool = exports.migrateReminderTool = exports.updateReminderTool = exports.addReminderTool = exports.deleteReminderTool = void 0;
68
68
  const fs = __importStar(require("fs"));
69
69
  const path = __importStar(require("path"));
70
70
  const dialog_1 = require("../dialog");
71
+ const main_dialog_goal_reminder_1 = require("../main-dialog-goal-reminder");
71
72
  const rtws_1 = require("../rtws");
72
73
  const driver_messages_1 = require("../runtime/driver-messages");
73
74
  const shared_reminder_update_impact_1 = require("../runtime/shared-reminder-update-impact");
@@ -409,6 +410,12 @@ function getCtrlMessages(language) {
409
410
  reminderContentEmpty: '提醒内容不能为空',
410
411
  invalidFormatUpdate: '参数格式不对。用法:update_reminder({ reminder_id: string, content: string })',
411
412
  invalidFormatMigrate: '参数格式不对。用法:migrate_reminder({ reminder_id: string, scope: "dialog" })',
413
+ invalidFormatSetDialogGoal: '参数格式不对。用法:set_dialog_goal({ mode: "goal", goal: string }) 或 set_dialog_goal({ mode: "follow_taskdoc" })',
414
+ setDialogGoalMainOnly: '错误:set_dialog_goal 只用于主线对话;支线对话按收到的诉请目标推进。',
415
+ setDialogGoalGoalRequired: '错误:mode="goal" 时必须提供非空 goal。',
416
+ setDialogGoalFollowTaskdocRejected: '错误:Dominds 已确认这个智能体现在有其它并行对话,不能只按“依差遣牒推进”继续。已保留“依差遣牒推进”,并在本路主线目标提醒中补充:立即问人类这一路主线接下来具体推进什么。',
417
+ setDialogGoalSetToGoal: '已记录本路主线目标。',
418
+ setDialogGoalSetToFollowTaskdoc: '已记录本路主线目标:依差遣牒推进。',
412
419
  reminderAlreadyDialogScope: (reminderId) => `reminder_id=${reminderId} 已经是当前对话范围提醒项,不需要迁移。`,
413
420
  reminderMigrateManagedBlocked: (managerTool) => `错误:该提醒项由工具 ${managerTool} 管理,不能用 migrate_reminder 迁移;请使用 ${managerTool} 更新。`,
414
421
  invalidFormatDoMind: '参数格式不对。用法:do_mind({ selector: string, category?: string, content: string })',
@@ -459,6 +466,12 @@ function getCtrlMessages(language) {
459
466
  reminderContentEmpty: 'Error: Reminder content cannot be empty',
460
467
  invalidFormatUpdate: 'Error: Invalid args. Use: update_reminder({ reminder_id: string, content: string })',
461
468
  invalidFormatMigrate: 'Error: Invalid args. Use: migrate_reminder({ reminder_id: string, scope: "dialog" })',
469
+ invalidFormatSetDialogGoal: 'Error: Invalid args. Use: set_dialog_goal({ mode: "goal", goal: string }) or set_dialog_goal({ mode: "follow_taskdoc" }).',
470
+ setDialogGoalMainOnly: 'Error: set_dialog_goal is only for Main Dialogs; Side Dialogs should follow the request they received.',
471
+ setDialogGoalGoalRequired: 'Error: mode="goal" requires a non-empty goal.',
472
+ setDialogGoalFollowTaskdocRejected: 'Error: Dominds has confirmed this agent now has another parallel dialog, so this one cannot proceed from the Taskdoc alone. The reminder keeps "proceed from the Taskdoc" and now adds: ask the human what this Main Dialog should work on next.',
473
+ setDialogGoalSetToGoal: 'Recorded the goal for this Main Dialog.',
474
+ setDialogGoalSetToFollowTaskdoc: 'Recorded the goal for this Main Dialog: proceed from the Taskdoc.',
462
475
  reminderAlreadyDialogScope: (reminderId) => `reminder_id=${reminderId} is already dialog-scope in the current dialog; no migration is needed.`,
463
476
  reminderMigrateManagedBlocked: (managerTool) => `Error: This reminder is managed by tool ${managerTool}. Do not migrate it via migrate_reminder; use ${managerTool} instead.`,
464
477
  invalidFormatDoMind: 'Error: Invalid args. Use: do_mind({ selector: string, category?: string, content: string })',
@@ -784,6 +797,57 @@ exports.migrateReminderTool = {
784
797
  return appendSharedReminderMigrationImpactToToolResult(baseOutput, language, dispatch);
785
798
  },
786
799
  };
800
+ exports.setDialogGoalTool = {
801
+ type: 'func',
802
+ name: 'set_dialog_goal',
803
+ description: 'Record what this Main Dialog should work on next. Use mode="goal" for a concrete goal; use mode="follow_taskdoc" only when Dominds allows this dialog to simply proceed from the Taskdoc.',
804
+ descriptionI18n: {
805
+ en: 'Record what this Main Dialog should work on next. Use mode="goal" for a concrete goal; use mode="follow_taskdoc" only when Dominds allows this dialog to simply proceed from the Taskdoc.',
806
+ zh: '记录这一路主线接下来具体推进什么。mode="goal" 用于写清目标;只有 Dominds 允许时,才用 mode="follow_taskdoc" 表示依差遣牒推进。',
807
+ },
808
+ parameters: {
809
+ type: 'object',
810
+ additionalProperties: false,
811
+ required: ['mode'],
812
+ properties: {
813
+ mode: {
814
+ type: 'string',
815
+ enum: ['goal', 'follow_taskdoc'],
816
+ description: 'goal = record a concrete goal; follow_taskdoc = proceed from the Taskdoc when Dominds allows it.',
817
+ },
818
+ goal: {
819
+ type: 'string',
820
+ description: 'Required when mode="goal"; ignored when mode="follow_taskdoc".',
821
+ },
822
+ },
823
+ },
824
+ argsValidation: 'dominds',
825
+ async call(dlg, _caller, args) {
826
+ const language = (0, work_language_1.getWorkLanguage)();
827
+ const t = getCtrlMessages(language);
828
+ if (dlg.id.selfId !== dlg.id.rootId) {
829
+ return (0, tool_1.toolFailure)(t.setDialogGoalMainOnly);
830
+ }
831
+ const modeValue = args['mode'];
832
+ if (modeValue !== 'goal' && modeValue !== 'follow_taskdoc') {
833
+ return (0, tool_1.toolFailure)(t.invalidFormatSetDialogGoal);
834
+ }
835
+ if (modeValue === 'follow_taskdoc') {
836
+ const result = await (0, main_dialog_goal_reminder_1.setMainDialogGoalReminder)(dlg, { mode: 'follow_taskdoc' });
837
+ if (result.kind === 'rejected_parallel_dialogs') {
838
+ return (0, tool_1.toolFailure)(t.setDialogGoalFollowTaskdocRejected);
839
+ }
840
+ return (0, tool_1.toolSuccess)(t.setDialogGoalSetToFollowTaskdoc);
841
+ }
842
+ const goalValue = args['goal'];
843
+ const goal = typeof goalValue === 'string' ? goalValue.trim() : '';
844
+ if (goal === '') {
845
+ return (0, tool_1.toolFailure)(t.setDialogGoalGoalRequired);
846
+ }
847
+ await (0, main_dialog_goal_reminder_1.setMainDialogGoalReminder)(dlg, { mode: 'goal', goal });
848
+ return (0, tool_1.toolSuccess)(t.setDialogGoalSetToGoal);
849
+ },
850
+ };
787
851
  exports.clearMindTool = {
788
852
  type: 'func',
789
853
  name: 'clear_mind',
@@ -26,7 +26,7 @@
26
26
 
27
27
  control is Dominds' **dialog control toolset** for managing dialog state, reminders, taskdocs, and inter-dialog reply closure semantics:
28
28
 
29
- - **Reminder management**: Three reminder scopes: `dialog` / `task` / `agent`. Default to `task` for ordinary current work under the same Taskdoc; use `dialog` for truly dialog-local notes, and continuation packages before `clear_mind` must explicitly use `scope=dialog` and state this dialog task goal; use `agent` only for urgent, short-lived, globally visible cues
29
+ - **Reminder management**: Main Dialogs always show a fixed "Goal for this Main Dialog" reminder. If it says to ask the human first, ask immediately and record the answer with `set_dialog_goal`. Ordinary reminders have three scopes: `dialog` / `task` / `agent`. Default to `task` for ordinary current work under the same Taskdoc; use `dialog` for truly dialog-local continuation details; use `agent` only for urgent, short-lived, globally visible cues
30
30
  - **Taskdoc operations**: Append to, replace, or delete task contract sections (goals/constraints/progress); within Taskdoc, `progress` is the team-shared, quasi-real-time, scannable task bulletin board
31
31
  - **Context maintenance**: Reduce cognitive load without losing key resume state
32
32
  - **Reply routing**: Separate asking the tellasker back, sending the final reply, and ordinary plain text in Side Dialog / ask-back flows
@@ -58,11 +58,13 @@ Reminders are temporary current-work information for:
58
58
  - Recording blocking issues
59
59
  - Holding current-dialog scoped continuation-package bridge notes before `clear_mind`
60
60
 
61
+ Main Dialogs always carry a Dominds-managed "Goal for this Main Dialog" reminder. Read the whole reminder. If it says to ask the human first, ask what this Main Dialog should work on next, then record the answer with `set_dialog_goal`. If it says "proceed from the Taskdoc" and has no parallel-dialog note, continue from the Taskdoc; if the same reminder says Dominds has confirmed a parallel dialog, ask the human first.
62
+
61
63
  Reminders are not for manually copying environment state automatically maintained by Dominds, such as background process status, in-flight background asks/collaboration, or browser/session attachment state. Dominds-managed reminders, panels, and tool outputs are the authoritative place for that state; manual notes go stale easily and create cognitive noise.
62
64
 
63
65
  Scope rule:
64
66
 
65
- - `dialog`: current-dialog current work; continuation packages before `clear_mind` must explicitly use this scope and state this dialog task goal
67
+ - `dialog`: current-dialog current work and continuation details. Main Dialog goals come from the fixed goal reminder; Side Dialog continuation packages must state this Side Dialog's task goal
66
68
  - `task`: current work under the current Taskdoc, and the default scope
67
69
  - `agent`: urgent, short-lived, globally visible cues you should keep seeing across later dialogs you lead
68
70