dominds 1.7.0 → 1.7.2
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/README.md +1 -1
- package/README.zh.md +1 -1
- package/dist/dialog.js +8 -8
- package/dist/docs/OEC-philosophy.md +11 -11
- package/dist/docs/OEC-philosophy.zh.md +1 -1
- package/dist/docs/context-health.md +35 -14
- package/dist/docs/context-health.zh.md +28 -7
- package/dist/docs/design.zh.md +8 -8
- package/dist/docs/dialog-persistence.zh.md +4 -4
- package/dist/docs/dialog-system.md +19 -14
- package/dist/docs/dialog-system.zh.md +102 -97
- package/dist/docs/encapsulated-taskdoc.md +5 -17
- package/dist/docs/encapsulated-taskdoc.zh.md +11 -11
- package/dist/docs/fbr.zh.md +1 -1
- package/dist/docs/mcp-support.zh.md +1 -1
- package/dist/docs/memory-system.zh.md +4 -4
- package/dist/docs/mottos.zh.md +7 -7
- package/dist/docs/roadmap.zh.md +1 -1
- package/dist/docs/team_mgmt-toolset.zh.md +1 -1
- package/dist/docs/tellask-collab.md +9 -4
- package/dist/docs/tellask-collab.zh.md +21 -15
- package/dist/llm/kernel-driver/drive.js +8 -6
- package/dist/llm/kernel-driver/flow.js +4 -3
- package/dist/llm/kernel-driver/subdialog.js +1 -1
- package/dist/minds/load.js +12 -0
- package/dist/minds/system-prompt-parts.js +31 -9
- package/dist/minds/system-prompt.js +63 -31
- package/dist/persistence.js +11 -11
- package/dist/priming.js +4 -4
- package/dist/shared/i18n/driver-messages.js +25 -10
- package/dist/shared/utils/inter-dialog-format.js +27 -7
- package/dist/static/assets/{_basePickBy-B5JpcIlf.js → _basePickBy-DOCpneO0.js} +3 -3
- package/dist/static/assets/{_basePickBy-B5JpcIlf.js.map → _basePickBy-DOCpneO0.js.map} +1 -1
- package/dist/static/assets/{_baseUniq-B6ENA5xp.js → _baseUniq-DBZLqTK1.js} +2 -2
- package/dist/static/assets/{_baseUniq-B6ENA5xp.js.map → _baseUniq-DBZLqTK1.js.map} +1 -1
- package/dist/static/assets/{arc-CztgHQ6S.js → arc-Dw9YkyBZ.js} +2 -2
- package/dist/static/assets/{arc-CztgHQ6S.js.map → arc-Dw9YkyBZ.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-CdI-KLc0.js → architectureDiagram-VXUJARFQ-DiXBIlTy.js} +7 -7
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-CdI-KLc0.js.map → architectureDiagram-VXUJARFQ-DiXBIlTy.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-BALBf4XM.js → blockDiagram-VD42YOAC-CBTqG3TT.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-BALBf4XM.js.map → blockDiagram-VD42YOAC-CBTqG3TT.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-a1k6yPrP.js → c4Diagram-YG6GDRKO-CKltdqcg.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-a1k6yPrP.js.map → c4Diagram-YG6GDRKO-CKltdqcg.js.map} +1 -1
- package/dist/static/assets/{channel-CWNdqJ-I.js → channel-CsfA5ddv.js} +2 -2
- package/dist/static/assets/{channel-CWNdqJ-I.js.map → channel-CsfA5ddv.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-BQeTUB5q.js → chunk-4BX2VUAB-BCdL9ibi.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-BQeTUB5q.js.map → chunk-4BX2VUAB-BCdL9ibi.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-DDefFY4X.js → chunk-55IACEB6-CcKnxlqS.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-DDefFY4X.js.map → chunk-55IACEB6-CcKnxlqS.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW-B3r4W-g_.js → chunk-B4BG7PRW-BnypOYYo.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW-B3r4W-g_.js.map → chunk-B4BG7PRW-BnypOYYo.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-BDKIjQbt.js → chunk-DI55MBZ5-BGYHpvhR.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-BDKIjQbt.js.map → chunk-DI55MBZ5-BGYHpvhR.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-BRjO7LO2.js → chunk-FMBD7UC4-Crf0Br1R.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-BRjO7LO2.js.map → chunk-FMBD7UC4-Crf0Br1R.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-DtUbDqMq.js → chunk-QN33PNHL-Cg1EQYdQ.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-DtUbDqMq.js.map → chunk-QN33PNHL-Cg1EQYdQ.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-HvxW4tgI.js → chunk-QZHKN3VN-DRH7UNkC.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-HvxW4tgI.js.map → chunk-QZHKN3VN-DRH7UNkC.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-8kvbFL8c.js → chunk-TZMSLE5B-CaZqBdnu.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-8kvbFL8c.js.map → chunk-TZMSLE5B-CaZqBdnu.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-BT0K1-Ue.js → classDiagram-2ON5EDUG-DSsG0iFI.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-BT0K1-Ue.js.map → classDiagram-2ON5EDUG-DSsG0iFI.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-BT0K1-Ue.js → classDiagram-v2-WZHVMYZB-DSsG0iFI.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-BT0K1-Ue.js.map → classDiagram-v2-WZHVMYZB-DSsG0iFI.js.map} +1 -1
- package/dist/static/assets/{clone-C8ji-9VG.js → clone-xhbAL4G8.js} +2 -2
- package/dist/static/assets/{clone-C8ji-9VG.js.map → clone-xhbAL4G8.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-DgZIHStr.js → cose-bilkent-S5V4N54A-B7Rtmhjt.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-DgZIHStr.js.map → cose-bilkent-S5V4N54A-B7Rtmhjt.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-CoLMSS7V.js → dagre-6UL2VRFP-BkqhLTnX.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-CoLMSS7V.js.map → dagre-6UL2VRFP-BkqhLTnX.js.map} +1 -1
- package/dist/static/assets/{diagram-PSM6KHXK-BbaRu7Ko.js → diagram-PSM6KHXK-CZKtGq3a.js} +8 -8
- package/dist/static/assets/{diagram-PSM6KHXK-BbaRu7Ko.js.map → diagram-PSM6KHXK-CZKtGq3a.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-w2QJoEvf.js → diagram-QEK2KX5R-CnMVuAHl.js} +7 -7
- package/dist/static/assets/{diagram-QEK2KX5R-w2QJoEvf.js.map → diagram-QEK2KX5R-CnMVuAHl.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-CZ3V7aTH.js → diagram-S2PKOQOG-CeSf7JXc.js} +7 -7
- package/dist/static/assets/{diagram-S2PKOQOG-CZ3V7aTH.js.map → diagram-S2PKOQOG-CeSf7JXc.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-B_D5zZGW.js → erDiagram-Q2GNP2WA-CSt8_Jg8.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-B_D5zZGW.js.map → erDiagram-Q2GNP2WA-CSt8_Jg8.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-CdleeZSt.js → flowDiagram-NV44I4VS-D5Ml-CXN.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-CdleeZSt.js.map → flowDiagram-NV44I4VS-D5Ml-CXN.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-D4I0mcXy.js → ganttDiagram-JELNMOA3-CyMWbWsa.js} +3 -3
- package/dist/static/assets/{ganttDiagram-JELNMOA3-D4I0mcXy.js.map → ganttDiagram-JELNMOA3-CyMWbWsa.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-2TDy5WsI.js → gitGraphDiagram-V2S2FVAM-vl516Is8.js} +8 -8
- package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-2TDy5WsI.js.map → gitGraphDiagram-V2S2FVAM-vl516Is8.js.map} +1 -1
- package/dist/static/assets/{graph-6qmT9kvE.js → graph-BGZ_sL_x.js} +3 -3
- package/dist/static/assets/{graph-6qmT9kvE.js.map → graph-BGZ_sL_x.js.map} +1 -1
- package/dist/static/assets/{index-DZjf7VGN.js → index-C-RsyM0K.js} +33 -33
- package/dist/static/assets/{index-DZjf7VGN.js.map → index-C-RsyM0K.js.map} +1 -1
- package/dist/static/assets/{infoDiagram-HS3SLOUP-Cdngu1wO.js → infoDiagram-HS3SLOUP-6wx0LbHY.js} +6 -6
- package/dist/static/assets/{infoDiagram-HS3SLOUP-Cdngu1wO.js.map → infoDiagram-HS3SLOUP-6wx0LbHY.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-C8JGH9qX.js → journeyDiagram-XKPGCS4Q-YPjC-r77.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-C8JGH9qX.js.map → journeyDiagram-XKPGCS4Q-YPjC-r77.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-CgcdAoUr.js → kanban-definition-3W4ZIXB7-DlG-ZWTO.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-CgcdAoUr.js.map → kanban-definition-3W4ZIXB7-DlG-ZWTO.js.map} +1 -1
- package/dist/static/assets/{layout--9zDsdfQ.js → layout-BZJKhYY3.js} +5 -5
- package/dist/static/assets/{layout--9zDsdfQ.js.map → layout-BZJKhYY3.js.map} +1 -1
- package/dist/static/assets/{linear-f6M3OqrG.js → linear-Bau37zh5.js} +2 -2
- package/dist/static/assets/{linear-f6M3OqrG.js.map → linear-Bau37zh5.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-O6D8o0NA.js → mindmap-definition-VGOIOE7T-n2WXgX4b.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-O6D8o0NA.js.map → mindmap-definition-VGOIOE7T-n2WXgX4b.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-B73iJXia.js → pieDiagram-ADFJNKIX-DgW7FkI4.js} +8 -8
- package/dist/static/assets/{pieDiagram-ADFJNKIX-B73iJXia.js.map → pieDiagram-ADFJNKIX-DgW7FkI4.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-1MkdhL3o.js → quadrantDiagram-AYHSOK5B-BtsDjIpC.js} +3 -3
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-1MkdhL3o.js.map → quadrantDiagram-AYHSOK5B-BtsDjIpC.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-BANDg6Jt.js → requirementDiagram-UZGBJVZJ-DPzuPEge.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-BANDg6Jt.js.map → requirementDiagram-UZGBJVZJ-DPzuPEge.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-XEoMNqRv.js → sankeyDiagram-TZEHDZUN-BJS1ETtL.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-XEoMNqRv.js.map → sankeyDiagram-TZEHDZUN-BJS1ETtL.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-Brw-9CPI.js → sequenceDiagram-WL72ISMW-DXEpa4ly.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-Brw-9CPI.js.map → sequenceDiagram-WL72ISMW-DXEpa4ly.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-CVzsrvr2.js → stateDiagram-FKZM4ZOC-CGU6VJY5.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-CVzsrvr2.js.map → stateDiagram-FKZM4ZOC-CGU6VJY5.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-B9j-EAhS.js → stateDiagram-v2-4FDKWEC3-Dx_GvlFA.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-B9j-EAhS.js.map → stateDiagram-v2-4FDKWEC3-Dx_GvlFA.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-S3mM3ltV.js → timeline-definition-IT6M3QCI-DcWLmdgJ.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-S3mM3ltV.js.map → timeline-definition-IT6M3QCI-DcWLmdgJ.js.map} +1 -1
- package/dist/static/assets/{treemap-GDKQZRPO-Cf1b3Cgv.js → treemap-GDKQZRPO-BhUwKF9C.js} +5 -5
- package/dist/static/assets/{treemap-GDKQZRPO-Cf1b3Cgv.js.map → treemap-GDKQZRPO-BhUwKF9C.js.map} +1 -1
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-CYvqfglb.js → xychartDiagram-PRI3JC2R-Cr4t0oCq.js} +3 -3
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-CYvqfglb.js.map → xychartDiagram-PRI3JC2R-Cr4t0oCq.js.map} +1 -1
- package/dist/static/index.html +1 -1
- package/dist/tools/ctrl.js +5 -4
- package/dist/tools/prompts/control/en/principles.md +2 -2
- package/dist/tools/prompts/control/en/tools.md +2 -2
- package/dist/tools/prompts/control/zh/index.md +2 -2
- package/dist/tools/prompts/control/zh/principles.md +4 -4
- package/dist/tools/prompts/control/zh/tools.md +4 -4
- package/package.json +1 -1
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 封装式差遣牒(`*.tsk/` 任务包)(设计)
|
|
2
2
|
|
|
3
3
|
英文版:[English](./encapsulated-taskdoc.md)
|
|
4
4
|
|
|
5
|
-
本文档为 Dominds
|
|
5
|
+
本文档为 Dominds 对话指定了一个**结构化的、封装的差遣牒格式**。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
不是单一的可变“差遣牒” markdown 文件;每个对话树的差遣牒落到磁盘上是一份**任务包目录**,具有稳定的模式和严格的访问策略。
|
|
8
8
|
|
|
9
9
|
## 目标
|
|
10
10
|
|
|
11
11
|
- **清晰性**:将"我们想要什么"(目标)与"我们必须遵守什么"(约束)以及"我们在哪里"(进度)分开。
|
|
12
|
-
-
|
|
12
|
+
- **实时协调**:把差遣牒作为跨主线/跨智能体的**任务实时协调公告板**(频繁更新 `progress.md`;把硬约束写入 `constraints.md`;不要把关键决策只留在对话里)。
|
|
13
13
|
- **持久性**:使任务状态在长期工作和多程对话重置之间保持持久。
|
|
14
14
|
- **可审计性**:使任务变更明确且可归因于单一、有意的操作。
|
|
15
15
|
- **安全性**:防止绕过预期用户体验和控制点的意外或工具驱动的读/写。
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
## 术语
|
|
25
25
|
|
|
26
26
|
- **对话树**:根对话加上在其下产生的任何子对话/队友。
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
27
|
+
- **差遣牒**:一份任务契约(目标/约束/进度),同时也是跨主线/跨智能体的任务实时协调公告板。
|
|
28
|
+
- **任务包**:以 `.tsk/` 后缀结尾的目录,将差遣牒存储为多个文件。
|
|
29
|
+
- **有效差遣牒**:呈现给智能体的逻辑差遣牒内容,从任务包派生而来。
|
|
30
30
|
- **封装**:将 `.tsk/` 视为受保护的内部状态,而不是普通 rtws(运行时工作区)文件。
|
|
31
31
|
|
|
32
32
|
## 任务包结构
|
|
@@ -144,15 +144,15 @@ Dominds 必须从任务包构造一个**有效差遣牒**用于提示词和 UI
|
|
|
144
144
|
|
|
145
145
|
#### 规范副本(zh;语义基线)
|
|
146
146
|
|
|
147
|
-
|
|
147
|
+
**差遣牒封装与访问限制**
|
|
148
148
|
|
|
149
149
|
- 任何 `.tsk/` 目录及其子路径(`**/*.tsk/**`)都是封装状态:禁止使用任何通用文件工具读取/写入/列目录(例如 `read_file` / `write_file` / `list_dir` 等)。
|
|
150
|
-
-
|
|
150
|
+
- 更新差遣牒只能使用函数工具 `change_mind`(按章节整段替换;顶层用 `selector`,额外章节用 `category + selector`)。
|
|
151
151
|
- 读取"不会自动注入上下文"的额外章节,只能使用函数工具 `recall_taskdoc({ category, selector })`。
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
**差遣牒自动注入规则(系统提示)**
|
|
154
154
|
|
|
155
|
-
-
|
|
155
|
+
- 系统提示会把“有效差遣牒”自动注入到模型上下文中。
|
|
156
156
|
- 一定会注入顶层三段:`goals.md`、`constraints.md`、`progress.md`(按此顺序)。
|
|
157
157
|
- 可选注入 `bearinmind/`(仅固定白名单,最多 6 个文件):`contracts.md`、`acceptance.md`、`grants.md`、`runbook.md`、`decisions.md`、`risks.md`。
|
|
158
158
|
- 若存在 `bearinmind/` 注入块,它会以 `## Bear In Mind` 出现在 `## Constraints` 与 `## Progress` 之间,并按以上固定顺序拼接。
|
package/dist/docs/fbr.zh.md
CHANGED
|
@@ -46,7 +46,7 @@ FBR 的价值来自“把推理拉回文本”:让被诉请者只围绕诉请
|
|
|
46
46
|
|
|
47
47
|
### 3.2 作用域
|
|
48
48
|
|
|
49
|
-
本文档只定义 **FBR 机制**,并说明其通过 `freshBootsReasoning({ tellaskContent: "...", effort?: N })` 触发的行为契约。一般的队友诉请(`tellaskSessionless({ targetAgentId: "<teammate>", tellaskContent: "..." })`)仍按 [`dialog-system.zh.md`](./dialog-system.zh.md)
|
|
49
|
+
本文档只定义 **FBR 机制**,并说明其通过 `freshBootsReasoning({ tellaskContent: "...", effort?: N })` 触发的行为契约。一般的队友诉请(`tellaskSessionless({ targetAgentId: "<teammate>", tellaskContent: "..." })`)仍按 [`dialog-system.zh.md`](./dialog-system.zh.md) 的诉请分类与能力模型执行。
|
|
50
50
|
|
|
51
51
|
如果你需要“同人设但可用工具”的支线对话,请使用一般队友诉请路径,并显式指定队友身份。
|
|
52
52
|
|
|
@@ -140,7 +140,7 @@ Dominds 已经通过提供者支持结构化的"函数调用",包括参数验
|
|
|
140
140
|
- MCP 工具自动作为函数工具出现在模型面前。
|
|
141
141
|
- 结果记录为 `func_result_msg`,匹配现有的持久化和 UI 逻辑。
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
诉请是一个单独的**队友调用语法**(不是工具类型),不适合 MCP 的结构化模式驱动工具。
|
|
144
144
|
|
|
145
145
|
### Stdio 传输注意事项(MCP 服务器端)
|
|
146
146
|
|
|
@@ -10,7 +10,7 @@ TL;DR:
|
|
|
10
10
|
- **让关键产物可存活**(清理头脑后仍能继续推进)。
|
|
11
11
|
- **实时公开宣告、公开交流(并可追溯)工作进展,达成及时强制协调**:差遣牒 / 团队记忆 / 环境提示,才是跨智能体、多主线并行推进时真正的效率来源。
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
关键约定:**差遣牒是任务实时协调公告板**。关键决策/当前状态/下一步必须写回 `progress`;硬约束必须写回 `constraints`;不要只留在对话或提醒项里。
|
|
14
14
|
|
|
15
15
|
相关术语:[dominds-terminology.md](./dominds-terminology.md)
|
|
16
16
|
|
|
@@ -20,7 +20,7 @@ TL;DR:
|
|
|
20
20
|
- [权限与分工(社会化分工的要义)](#权限与分工社会化分工的要义)
|
|
21
21
|
- [分层与分类(时间维度)](#分层与分类时间维度)
|
|
22
22
|
- [A) 长期记忆:把“分工与治理”固定下来](#a-长期记忆把分工与治理固定下来)
|
|
23
|
-
- [B)
|
|
23
|
+
- [B) 中期(任务)记忆:差遣牒是单一真源](#b-中期任务记忆差遣牒是单一真源)
|
|
24
24
|
- [C) 短期记忆:对话历史是工作缓冲,提醒项是工作集](#c-短期记忆对话历史是工作缓冲提醒项是工作集)
|
|
25
25
|
- [日常工作流(职场健康)](#日常工作流职场健康)
|
|
26
26
|
|
|
@@ -38,7 +38,7 @@ TL;DR:
|
|
|
38
38
|
- **集体记忆(团队/任务共享)**:
|
|
39
39
|
- rtws 级“环境提示”(`.minds/env*.md`):用于写清楚“这个工作区的基本事实/运行约束/注意事项”
|
|
40
40
|
- 团队记忆(`team_memory`)
|
|
41
|
-
-
|
|
41
|
+
- 差遣牒:同一个差遣牒正常预期会被多个主线对话(不同主理人)共同推进,因此它应被视为“集体记忆”的单一真源
|
|
42
42
|
|
|
43
43
|
### 权限与分工(社会化分工的要义)
|
|
44
44
|
|
|
@@ -113,7 +113,7 @@ TL;DR:
|
|
|
113
113
|
- 个人记忆会自动隔离到 `.minds/memory/individual/<member-id>/...`,因此 `path` 不应包含你的成员 id(不要写 `<member-id>/...`)。
|
|
114
114
|
- 若你当前没有任何个人记忆条目,直接 `add_personal_memory` 即可:目录会由系统自动创建。
|
|
115
115
|
|
|
116
|
-
### B)
|
|
116
|
+
### B) 中期(任务)记忆:差遣牒是单一真源
|
|
117
117
|
|
|
118
118
|
差遣牒的关键词是:**任务契约**、**团队共享**、**可持续推进**。它回答三个问题:我们要达成什么、不能做什么、目前进展到哪。
|
|
119
119
|
|
package/dist/docs/mottos.zh.md
CHANGED
|
@@ -104,14 +104,14 @@
|
|
|
104
104
|
|
|
105
105
|
**2. 以任务为中心的专注架构**
|
|
106
106
|
|
|
107
|
-
-
|
|
107
|
+
- **中央差遣牒**:任务实时协调的公告板;目标、约束和进度的单一真实来源
|
|
108
108
|
- **动态上下文窗口**:时间限制的上下文保留
|
|
109
109
|
- **基于优先级的信息过滤**:自动排名上下文相关性
|
|
110
110
|
|
|
111
|
-
|
|
111
|
+
**实现策略:差遣牒**
|
|
112
112
|
|
|
113
113
|
```
|
|
114
|
-
|
|
114
|
+
差遣牒结构:
|
|
115
115
|
├── 主要目标
|
|
116
116
|
│ ├── 清晰的目标陈述
|
|
117
117
|
│ ├── 成功标准
|
|
@@ -218,7 +218,7 @@
|
|
|
218
218
|
```
|
|
219
219
|
触发:需要复杂的技术决策
|
|
220
220
|
新鲜会话:
|
|
221
|
-
-
|
|
221
|
+
- 加载差遣牒 + 技术要求
|
|
222
222
|
- 专注:"分析可行性并推荐方法"
|
|
223
223
|
- 输出:带有推理的清晰技术建议
|
|
224
224
|
```
|
|
@@ -228,7 +228,7 @@
|
|
|
228
228
|
```
|
|
229
229
|
触发:需要新想法或解决方案
|
|
230
230
|
新鲜会话:
|
|
231
|
-
-
|
|
231
|
+
- 仅加载差遣牒 + 问题陈述
|
|
232
232
|
- 专注:"在不受约束偏见影响的情况下产生创新方法"
|
|
233
233
|
- 输出:带有理由的创意解决方案列表
|
|
234
234
|
```
|
|
@@ -238,7 +238,7 @@
|
|
|
238
238
|
```
|
|
239
239
|
触发:需要验证当前方法
|
|
240
240
|
新鲜会话:
|
|
241
|
-
-
|
|
241
|
+
- 加载差遣牒 + 当前解决方案尝试
|
|
242
242
|
- 专注:"识别薄弱环节和改进机会"
|
|
243
243
|
- 输出:批判性分析和建议
|
|
244
244
|
```
|
|
@@ -280,7 +280,7 @@
|
|
|
280
280
|
**新鲜度级别:**
|
|
281
281
|
|
|
282
282
|
1. **级别 0**:当前智能体状态
|
|
283
|
-
2. **级别 1**:干净智能体 +
|
|
283
|
+
2. **级别 1**:干净智能体 + 差遣牒(标准初心)
|
|
284
284
|
3. **级别 2**:完全重置的智能体,只有问题陈述
|
|
285
285
|
4. **级别 3**:具有不同训练重点的新智能体实例
|
|
286
286
|
|
package/dist/docs/roadmap.zh.md
CHANGED
|
@@ -26,7 +26,7 @@ Dominds 的长期方向是把“智能体分工协作”沉淀为一个可复用
|
|
|
26
26
|
|
|
27
27
|
核心定位:验证“稳定有效的工作模式”,把关键机制跑通、跑稳、可调试。
|
|
28
28
|
|
|
29
|
-
- 建立可复用的工作范式:主线对话推进 + 支线对话并行推进 +
|
|
29
|
+
- 建立可复用的工作范式:主线对话推进 + 支线对话并行推进 + 回传聚合(诉请 / FBR 等)。
|
|
30
30
|
- 打磨最小可用的运行时闭环:对话持久化、工具调用、流式输出与转录、基础可观测性与故障定位。
|
|
31
31
|
- 以小步快跑方式迭代:允许内部结构快速变化,但持续沉淀“什么是稳定有效”的方法论与约束边界。
|
|
32
32
|
|
|
@@ -412,7 +412,7 @@ members:
|
|
|
412
412
|
- 平台说明:Windows 运行时不会注册 `codex_style_tools`;在 Windows 主机上的 `.minds/team.yaml` 中不要授予该工具集
|
|
413
413
|
- 保持 `.minds/team.yaml` 的所有权严格;只有团队管理者应该能够编辑它
|
|
414
414
|
- 避免在 `team.yaml` 中重复内置约束:
|
|
415
|
-
- `*.tsk
|
|
415
|
+
- `*.tsk/**`(封装的差遣牒任务包)对所有通用文件工具被硬性拒绝
|
|
416
416
|
- `.minds/**` 对通用文件工具被硬性拒绝;只有专用的 `team_mgmt` 工具集可以访问它
|
|
417
417
|
- 只有当你需要额外的显式性时才将这些放入 `no_*`;无论如何都会强制执行
|
|
418
418
|
|
|
@@ -98,9 +98,14 @@ That is a workflow break. The model should send the Tellask directly.
|
|
|
98
98
|
|
|
99
99
|
- Runtime builds a canonical inter-dialog transfer payload; this payload is delivered to target-agent context, and UI must display the same payload verbatim.
|
|
100
100
|
- First-line markers are runtime-injected into that payload by semantics; agents must not hand-write them:
|
|
101
|
-
-
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
- English work language:
|
|
102
|
+
- Ask-back reply: `【TellaskBack】`
|
|
103
|
+
- Regular completed sideline reply: `【Completed】`
|
|
104
|
+
- FBR reply: `【FBR-Direct Reply】` or `【FBR-Reasoning Only】`
|
|
105
|
+
- Chinese work language:
|
|
106
|
+
- Ask-back reply: `【TellaskBack】`
|
|
107
|
+
- Regular completed sideline reply: `【Completed】`
|
|
108
|
+
- FBR reply: `【FBR-Direct Reply】` or `【FBR-Reasoning Only】`
|
|
104
109
|
- If the requester defines a “reply format” in tellask body, it must explicitly say “no hand-written markers; Dominds auto-injects markers”; do not require responder-side hand-written markers.
|
|
105
110
|
- Source-dialog model raw is naturally preserved in source-dialog persistence; inter-dialog transfer must not rewrite or overwrite that source raw.
|
|
106
111
|
- Template-wrapped transfer is allowed: model output from one dialog can be embedded into a runtime template and sent as another dialog body.
|
|
@@ -108,7 +113,7 @@ That is a workflow break. The model should send the Tellask directly.
|
|
|
108
113
|
**Sideline delivery rule**:
|
|
109
114
|
|
|
110
115
|
- If a sideline dialog has completed all goals and can deliver the final result, it MUST reply directly with the response body; do not use `tellaskBack` to send final delivery.
|
|
111
|
-
- Runtime treats that direct reply as the completion delivery to the tellasker dialog and injects
|
|
116
|
+
- Runtime treats that direct reply as the completion delivery to the tellasker dialog and injects the work-language marker automatically (`【Completed】` in English work language, and the localized Chinese completion marker in Chinese work language).
|
|
112
117
|
- If any goal is incomplete, the dialog is blocked, or critical context is missing, it MUST issue `tellaskBack({ tellaskContent: "..." })` before proceeding; do not post plain-text intermediate status updates while unfinished.
|
|
113
118
|
- **FBR exception**: FBR forbids all tellasks (including `tellaskBack` / `askHuman`); list missing context + reasoning and return.
|
|
114
119
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 诉请协作最佳实践(草案)
|
|
2
2
|
|
|
3
3
|
英文版:[English](./tellask-collab.md)
|
|
4
4
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
## 1. 为什么写这份文档
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
诉请已经是 Dominds 的核心协作机制,但“能用”不等于“用顺”。当前最常见的卡点不是语法错误,而是**协作节奏误判**:
|
|
11
11
|
|
|
12
12
|
- 诉请者收到阶段性回贴后,误以为被诉请者还在后台继续执行最初诉请。
|
|
13
13
|
- 诉请者口头描述“下一步该谁做什么”,却没有真的发出下一轮诉请。
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
本文目标:
|
|
18
18
|
|
|
19
|
-
-
|
|
19
|
+
- 讲清当前已经实现的诉请运行时语义(避免心智模型漂移)。
|
|
20
20
|
- 给出可直接执行的协作最佳实践。
|
|
21
21
|
- 针对上述停滞问题,给出“快速且根本”的改进方向,优先考虑 priming + 系统提示。
|
|
22
22
|
|
|
@@ -27,19 +27,19 @@
|
|
|
27
27
|
以下内容是**当前代码与文档已实现**的行为约束(见 `dialog-system.zh.md`、`fbr.zh.md`、`diligence-push.zh.md`)。
|
|
28
28
|
`agent-priming.zh.md` 说明当前启动脚本 priming 方案与维护方式。
|
|
29
29
|
|
|
30
|
-
### 2.1
|
|
30
|
+
### 2.1 诉请三形态
|
|
31
31
|
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
32
|
+
- 回问诉请:`tellaskBack({ tellaskContent: "..." })`,用于向诉请者回问澄清。
|
|
33
|
+
- 长线诉请:`tellask({ targetAgentId: "<teammate>", sessionSlug: "<slug>", tellaskContent: "..." })`,可恢复上下文的多轮协作。
|
|
34
|
+
- 一次性诉请:`tellaskSessionless({ targetAgentId: "<teammate>", tellaskContent: "..." })`,一次性、不可恢复。
|
|
35
35
|
|
|
36
|
-
### 2.2
|
|
36
|
+
### 2.2 长线诉请的真实语义
|
|
37
37
|
|
|
38
38
|
- `sessionSlug` 的作用是“会话寻址 + 历史复用”。
|
|
39
39
|
- 它**不是**“后台持续执行开关”。
|
|
40
40
|
- 同一个 `<slug>` 下,每一次新任务推进,仍然需要新的 `tellask* function call` 诉请触发。
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
一句话:长线诉请是“可续接的对话容器”,不是“会自动前进的后台执行者”。
|
|
43
43
|
|
|
44
44
|
### 2.3 每次诉请调用的生命周期
|
|
45
45
|
|
|
@@ -94,10 +94,15 @@
|
|
|
94
94
|
**传递与标记(强制)**:
|
|
95
95
|
|
|
96
96
|
- 运行时会生成“跨对话传递正文”作为标准载荷;该正文会进入目标智能体上下文,且 UI 必须与其保持一致。
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
|
|
100
|
-
|
|
97
|
+
- 首行标记由运行时按工作语言和语义自动注入该传递正文,智能体不应手写:
|
|
98
|
+
- 中文工作语言:
|
|
99
|
+
- 回问诉请回贴:`【回问诉请】`
|
|
100
|
+
- 常规支线完成回贴:`【最终完成】`
|
|
101
|
+
- FBR 回贴:`【FBR-直接回复】` 或 `【FBR-仅推理】`
|
|
102
|
+
- 英文工作语言:
|
|
103
|
+
- 回问诉请回贴:`【TellaskBack】`
|
|
104
|
+
- 常规支线完成回贴:`【Completed】`
|
|
105
|
+
- FBR 回贴:`【FBR-Direct Reply】` 或 `【FBR-Reasoning Only】`
|
|
101
106
|
- 若诉请方在正文中定义“回贴格式”,必须写明“禁止手写标记,由 Dominds 自动注入”;不得要求被诉请者手写任何标记。
|
|
102
107
|
- 源对话模型原始输出(raw)天然保留在源对话持久记录中;跨对话传递不得改写或覆盖该源 raw。
|
|
103
108
|
- 允许将“某对话的模型原文”拼接进运行时模板后,作为传递到另一对话的正文(模板化传递是规范路径)。
|
|
@@ -105,12 +110,13 @@
|
|
|
105
110
|
**支线交付规则**:
|
|
106
111
|
|
|
107
112
|
- 只有当所有目标完成时,支线对话才可直接回贴诉请者对话。
|
|
113
|
+
- 该直接回贴会被运行时按工作语言自动加上完成标记(英文工作语言为 `【Completed】`,中文工作语言为 `【最终完成】`)。
|
|
108
114
|
- 若任何目标未完成或关键信息缺失,必须先用 `tellaskBack({ tellaskContent: "..." })` 回问诉请者对话再继续;不得发送普通文本中间汇报。
|
|
109
115
|
- **FBR 例外**:FBR 禁止任何诉请(包括 `tellaskBack` / `askHuman`);只列缺口 + 推理与摘要并直接回贴。
|
|
110
116
|
|
|
111
117
|
说明:不需要额外的 “Status: …” 行;首行标记即为阶段提醒。
|
|
112
118
|
|
|
113
|
-
### 4.1
|
|
119
|
+
### 4.1 协作阶段协议(队友诉请版)
|
|
114
120
|
|
|
115
121
|
对**队友诉请(非 `freshBootsReasoning({ tellaskContent: "..." })`)**,统一执行四段协议:
|
|
116
122
|
|
|
@@ -269,7 +275,7 @@ tellask({
|
|
|
269
275
|
2. 我现在说“等待”时,是否真有 pending tellask 对应?
|
|
270
276
|
3. 回贴到达后,我是否做了“判定 + 下一轮诉请/本地动作”?
|
|
271
277
|
4. 我是否把“让队友做”落成了真实 `tellask* function call`,而不是口头转派给 askHuman()?
|
|
272
|
-
5.
|
|
278
|
+
5. 关键决策是否已写回差遣牒(仅根对话)而不是只留在聊天里?
|
|
273
279
|
|
|
274
280
|
---
|
|
275
281
|
|
|
@@ -883,9 +883,10 @@ async function maybeContinueWithHealthPromptBeforeDiligence(args) {
|
|
|
883
883
|
}
|
|
884
884
|
if (healthDecision.reason === 'critical_force_new_course') {
|
|
885
885
|
const language = (0, runtime_language_1.getWorkLanguage)();
|
|
886
|
-
const newCoursePrompt = language
|
|
887
|
-
|
|
888
|
-
: '
|
|
886
|
+
const newCoursePrompt = (0, driver_messages_1.formatNewCourseStartPrompt)(language, {
|
|
887
|
+
nextCourse: dlg.currentCourse + 1,
|
|
888
|
+
source: 'critical_auto_clear',
|
|
889
|
+
});
|
|
889
890
|
await dlg.startNewCourse(newCoursePrompt);
|
|
890
891
|
dlg.setLastContextHealth({ kind: 'unavailable', reason: 'usage_unavailable' });
|
|
891
892
|
(0, context_health_1.resetContextHealthRoundState)(dlg.id.key());
|
|
@@ -1023,9 +1024,10 @@ async function driveDialogStreamCore(dlg, humanPrompt, driveOptions, callbacks)
|
|
|
1023
1024
|
if (healthDecision.kind === 'continue') {
|
|
1024
1025
|
if (healthDecision.reason === 'critical_force_new_course') {
|
|
1025
1026
|
const language = (0, runtime_language_1.getWorkLanguage)();
|
|
1026
|
-
const newCoursePrompt = language
|
|
1027
|
-
|
|
1028
|
-
: '
|
|
1027
|
+
const newCoursePrompt = (0, driver_messages_1.formatNewCourseStartPrompt)(language, {
|
|
1028
|
+
nextCourse: dlg.currentCourse + 1,
|
|
1029
|
+
source: 'critical_auto_clear',
|
|
1030
|
+
});
|
|
1029
1031
|
await dlg.startNewCourse(newCoursePrompt);
|
|
1030
1032
|
dlg.setLastContextHealth({ kind: 'unavailable', reason: 'usage_unavailable' });
|
|
1031
1033
|
(0, context_health_1.resetContextHealthRoundState)(dlg.id.key());
|
|
@@ -341,9 +341,10 @@ async function executeDriveRound(args) {
|
|
|
341
341
|
if (healthDecision.kind === 'continue') {
|
|
342
342
|
if (healthDecision.reason === 'critical_force_new_course') {
|
|
343
343
|
const language = (0, runtime_language_1.getWorkLanguage)();
|
|
344
|
-
const newCoursePrompt = language
|
|
345
|
-
|
|
346
|
-
: '
|
|
344
|
+
const newCoursePrompt = (0, driver_messages_1.formatNewCourseStartPrompt)(language, {
|
|
345
|
+
nextCourse: dialog.currentCourse + 1,
|
|
346
|
+
source: 'critical_auto_clear',
|
|
347
|
+
});
|
|
347
348
|
await dialog.startNewCourse(newCoursePrompt);
|
|
348
349
|
dialog.setLastContextHealth({ kind: 'unavailable', reason: 'usage_unavailable' });
|
|
349
350
|
(0, context_health_1.resetContextHealthRoundState)(dialog.id.key());
|
|
@@ -310,7 +310,7 @@ async function supplyResponseToSupdialog(args) {
|
|
|
310
310
|
status: parentDialog.status,
|
|
311
311
|
});
|
|
312
312
|
if (!assignmentRef) {
|
|
313
|
-
log_1.log.error('Missing assignment anchor for
|
|
313
|
+
log_1.log.error('Missing assignment anchor for tellask response anchor', undefined, {
|
|
314
314
|
parentId: parentDialog.id.selfId,
|
|
315
315
|
subdialogId: subdialogId.selfId,
|
|
316
316
|
callId: resolvedCallId,
|
package/dist/minds/load.js
CHANGED
|
@@ -235,6 +235,16 @@ async function loadAgentMinds(agentId, dialog, options) {
|
|
|
235
235
|
const agentHasPersonalMemoryTools = funcTools.some((t) => isPersonalMemoryToolName(t.name));
|
|
236
236
|
const isSubdialog = dialog !== undefined && dialog.supdialog !== undefined;
|
|
237
237
|
const taskdocMaintainerId = dialog && dialog instanceof dialog_1.SubDialog ? dialog.rootDialog.agentId : agent.id;
|
|
238
|
+
const contextHealthSnapshot = dialog?.getLastContextHealth();
|
|
239
|
+
const contextHealthPromptMode = contextHealthSnapshot &&
|
|
240
|
+
contextHealthSnapshot.kind === 'available' &&
|
|
241
|
+
contextHealthSnapshot.level === 'critical'
|
|
242
|
+
? 'critical'
|
|
243
|
+
: contextHealthSnapshot &&
|
|
244
|
+
contextHealthSnapshot.kind === 'available' &&
|
|
245
|
+
contextHealthSnapshot.level === 'caution'
|
|
246
|
+
? 'caution'
|
|
247
|
+
: 'normal';
|
|
238
248
|
const promptdocContext = {
|
|
239
249
|
language: workingLanguage,
|
|
240
250
|
agentId: agent.id,
|
|
@@ -246,6 +256,7 @@ async function loadAgentMinds(agentId, dialog, options) {
|
|
|
246
256
|
agentHasShellTools,
|
|
247
257
|
agentHasReadonlyShell,
|
|
248
258
|
shellSpecialistMemberIds,
|
|
259
|
+
contextHealthPromptMode,
|
|
249
260
|
};
|
|
250
261
|
const policyText = [
|
|
251
262
|
(0, system_prompt_parts_1.buildShellPolicyPrompt)(promptdocContext),
|
|
@@ -260,6 +271,7 @@ async function loadAgentMinds(agentId, dialog, options) {
|
|
|
260
271
|
const systemPrompt = (0, system_prompt_1.buildSystemPrompt)({
|
|
261
272
|
language: workingLanguage,
|
|
262
273
|
dialogScope: isSubdialog ? 'sideline' : 'mainline',
|
|
274
|
+
contextHealthPromptMode,
|
|
263
275
|
agent,
|
|
264
276
|
persona,
|
|
265
277
|
knowledge,
|
|
@@ -4,6 +4,7 @@ exports.buildNoToolsNotice = buildNoToolsNotice;
|
|
|
4
4
|
exports.buildShellPolicyPrompt = buildShellPolicyPrompt;
|
|
5
5
|
exports.buildMemorySystemPrompt = buildMemorySystemPrompt;
|
|
6
6
|
exports.buildIntrinsicToolUsageText = buildIntrinsicToolUsageText;
|
|
7
|
+
const inter_dialog_format_1 = require("../shared/utils/inter-dialog-format");
|
|
7
8
|
const minds_i18n_1 = require("./minds-i18n");
|
|
8
9
|
function buildNoToolsNotice(language) {
|
|
9
10
|
return language === 'zh'
|
|
@@ -134,28 +135,49 @@ function buildShellPolicyPrompt(ctx) {
|
|
|
134
135
|
return `${copy.title}\n\n${bodyLines.join('\n')}`.trim();
|
|
135
136
|
}
|
|
136
137
|
function getMemoryPromptCopy(ctx) {
|
|
138
|
+
const runtimeMarkers = (0, inter_dialog_format_1.getRuntimeTransferMarkers)(ctx.language);
|
|
139
|
+
const contextHealthLineZh = ctx.contextHealthPromptMode === 'critical'
|
|
140
|
+
? '当前上下文处于系统告急处置态:立即停止继续大实现/大阅读。本程只做保信息、提醒项提炼与 `clear_mind`。'
|
|
141
|
+
: ctx.contextHealthPromptMode === 'caution'
|
|
142
|
+
? '当前上下文处于系统吃紧处置态:不要继续扩张上下文。本程优先提炼提醒项并尽快 `clear_mind`,不要继续大实现/大阅读。'
|
|
143
|
+
: '当前没有生效中的上下文健康处置指令,按正常工作流推进。';
|
|
144
|
+
const taskdocLogLineZh = ctx.contextHealthPromptMode === 'critical'
|
|
145
|
+
? '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步;提醒项也只留可扫读摘录。当前是告急处置态:本程允许先保留多条粗略提醒项求稳,但不要在当前程提前做“新一程清醒复核”。系统真正开启新一程后,第一步再复核整理:删除冗余、纠正偏激/失真思路,再收敛成高质量提醒项。'
|
|
146
|
+
: ctx.contextHealthPromptMode === 'caution'
|
|
147
|
+
? '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步;提醒项也只留可扫读摘录。当前是吃紧处置态:本程优先压缩/提炼提醒项并尽快 `clear_mind`;若一时来不及,可先保留多条粗略提醒项过桥,但不要在当前程提前做“新一程清醒复核”。系统真正开启新一程后,第一步再复核整理:删除冗余、纠正偏激/失真思路,再收敛成高质量提醒项。'
|
|
148
|
+
: '不要把长日志/大段 tool output 直接塞进差遣牒;差遣牒只写结论+下一步;提醒项也只留可扫读摘录。接续包提醒项默认应保持结构化、便于快速恢复。';
|
|
149
|
+
const contextHealthLineEn = ctx.contextHealthPromptMode === 'critical'
|
|
150
|
+
? 'Current context is under system critical remediation: stop large implementations/reads immediately. In this course, do only preserve-info work, reminder distillation, and `clear_mind`.'
|
|
151
|
+
: ctx.contextHealthPromptMode === 'caution'
|
|
152
|
+
? 'Current context is under system caution remediation: do not keep expanding context. In this course, prioritize reminder distillation and `clear_mind`; do not continue large implementations/reads.'
|
|
153
|
+
: 'There is no active context-health remediation instruction in effect right now; proceed with the normal workflow.';
|
|
154
|
+
const taskdocLogLineEn = ctx.contextHealthPromptMode === 'critical'
|
|
155
|
+
? 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps; reminders should also keep only scannable excerpts. Current mode is critical remediation: in this course, 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.'
|
|
156
|
+
: ctx.contextHealthPromptMode === 'caution'
|
|
157
|
+
? 'Do not paste long logs/tool outputs into Taskdoc; Taskdoc should record decisions + next steps; reminders should also keep only scannable excerpts. Current mode is caution remediation: in this course, prioritize compressing/distilling reminders and clearing soon; 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.'
|
|
158
|
+
: '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.';
|
|
137
159
|
if (ctx.language === 'zh') {
|
|
138
160
|
return {
|
|
139
161
|
title: '### 记忆系统(重要)',
|
|
140
162
|
temporaryInfoLine: '你的聊天记录与工具输出是临时信息:会快速累积、很快过时,并增加你的认知负担。在同一轮对话中,除了 `clear_mind` 以外你无法真正丢弃这些历史。',
|
|
141
163
|
clearMindLine: '`clear_mind` 会开启新一程对话(保留差遣牒、提醒项与记忆层),从而卸掉这部分认知负载并继续推进。因此你必须先把关键信息提炼到高价值载体:',
|
|
142
|
-
taskdocContractLine: '-
|
|
164
|
+
taskdocContractLine: '- 差遣牒(`*.tsk/`):全队共享的任务契约(goals/constraints/progress);保持足够短,每轮都应可通读。',
|
|
143
165
|
taskdocSectionReplaceLine: `- 更新差遣牒的任意分段时:每次调用会替换该分段全文;你必须先对照“上下文中注入的当前内容”做合并/压缩;禁止覆盖/抹掉他人条目;自己负责维护的条目必须标注责任人(例如 \`- [owner:@${ctx.agentId}] ...\` 或用 \`### @${ctx.agentId}\` 分块)。`,
|
|
144
166
|
progressLine: '- 其中 `progress` 是全队共享公告牌:用于“阶段性进度快照”(关键决策/当前状态/下一步),不是流水账。',
|
|
145
167
|
injectedTaskdocLine: '- 重要:差遣牒内容会被系统以内联形式注入到上下文中(本轮生成视角下即为最新;注入内容不包括全局约束)。需要回顾时请直接基于上下文里的差遣牒内容回顾与决策,不要试图用通用文件工具读取 `*.tsk/` 下的文件(会被拒绝)。',
|
|
146
168
|
constraintsLine: '- 约定:`constraints` 只写任务特有的硬要求,不得写入系统提示/工具文档里已明确且由系统强制执行的通用规则(例如 `*.tsk/` 封装禁止通用文件工具)。一经发现重复,必须删除并告知用户。',
|
|
147
|
-
remindersLine: '- 提醒项(即编号提醒,工作集):当前对话的高频工作记录/关键细节(偏私有,不作为全队公告);默认保持少量(常见 1–3 条),优先 `update_reminder` 压缩/合并,不再需要就 `delete_reminder`。准备 `clear_mind`
|
|
169
|
+
remindersLine: '- 提醒项(即编号提醒,工作集):当前对话的高频工作记录/关键细节(偏私有,不作为全队公告);默认保持少量(常见 1–3 条),优先 `update_reminder` 压缩/合并,不再需要就 `delete_reminder`。准备 `clear_mind` 开启新一程对话时,默认整理成“结构化接续包提醒项”;其中只保留差遣牒未覆盖、但恢复工作容易丢的细节(如第一步、关键定位、运行/验证信息、临时 ids/路径)。若系统已把当前程切到吃紧/告急处置态,则允许先保留多条粗略提醒项把信息带过桥;当前程只做保信息 + clear_mind;只有系统实际开启新一程后,第一步才是以清醒头脑复核并整理这些接续包/粗略提醒项:删除冗余、纠正偏激或失真的过桥思路、压缩成高质量提醒项。',
|
|
148
170
|
teamMemoryLine: '- 团队记忆:稳定的团队约定/工程规约(跨任务共享)。',
|
|
149
171
|
personalMemoryLine: '- 个人记忆:稳定的个人习惯/偏好与职责域知识;记忆会在每次生成时自动注入上下文,应保持少量且准确(关键文档/代码的精确路径 + 最小必要事实)。不要记录具体任务状态。',
|
|
150
172
|
subdialogDutyLine: `你当前处于支线对话:此处不允许 \`change_mind\`。当你判断需要更新差遣牒(尤其是 progress 公告牌)时,请在合适时机直接诉请差遣牒维护人 \`@${ctx.taskdocMaintainerId}\` 执行更新,并给出你已合并好的“新全文/替换稿”(用于替换对应章节全文)。不要声称已更新,除非看到回执。`,
|
|
151
173
|
mainlineDutyLine: '你当前处于主线对话:你负责综合维护全队共享差遣牒(尤其是 progress 公告牌)。当队友/支线对话提出更新建议时,及时合并、压缩并保持清晰。',
|
|
152
|
-
teammateTellaskRoundDoneLine:
|
|
174
|
+
teammateTellaskRoundDoneLine: `队友诉请重要语义:当你在上游上下文中收到带${runtimeMarkers.finalCompleted}标记的回贴,表示该轮诉请已经结束;对方不会继续执行同一轮诉请。此时如果目标未达成,“等待”是错误的:必须显式发起新一轮 tellask 才能继续推进。`,
|
|
153
175
|
teamMemoryHintLine: '提示:你具备团队记忆工具(`add_team_memory` / `replace_team_memory` / `drop_team_memory` / `clear_team_memory`),可在必要时维护团队记忆(谨慎、少量、只写稳定约定)。',
|
|
154
176
|
personalMemoryHintLine: `提示:你具备个人记忆工具(\`add_personal_memory\` / \`replace_personal_memory\` / \`drop_personal_memory\` / \`clear_personal_memory\`)。个人记忆仅对当前智能体可见,且系统会自动按成员隔离到 \`.minds/memory/individual/<member-id>/...\`;因此 \`path\` 不应包含你的成员 id(不要写 \`${ctx.agentId}/...\`)。首次创建时直接用 \`add_personal_memory\` 即可,目录会由系统自动创建。记忆会在每次生成时自动注入上下文:保持少量、保持准确、按“未来会一起更新的内容”合并;写稳定事实(关键路径 + 最小必要约定),不要写任务进度/当天状态;一旦你修改了相关文件或发现记忆过期/冲突,立刻用 \`replace_personal_memory\` 更新。`,
|
|
155
177
|
subdialogWorkflowLine: `工作流:先做事 → 再提炼(\`update_reminder\`;必要时整理差遣牒更新提案并诉请 \`@${ctx.taskdocMaintainerId}\` 合并写入)→ 然后 \`clear_mind\` 清空噪音。`,
|
|
156
178
|
mainlineWorkflowLine: '工作流:先做事 → 再提炼(`update_reminder` + `change_mind(progress)`)→ 然后 `clear_mind` 清空噪音。',
|
|
157
|
-
contextHealthLine:
|
|
158
|
-
taskdocLogLine:
|
|
179
|
+
contextHealthLine: contextHealthLineZh,
|
|
180
|
+
taskdocLogLine: taskdocLogLineZh,
|
|
159
181
|
};
|
|
160
182
|
}
|
|
161
183
|
return {
|
|
@@ -167,18 +189,18 @@ function getMemoryPromptCopy(ctx) {
|
|
|
167
189
|
progressLine: '- Taskdoc `progress` is the team’s shared bulletin board: distilled milestone snapshots (key decisions/current status/next steps), not raw logs.',
|
|
168
190
|
injectedTaskdocLine: '- Important: the Taskdoc content is injected inline into the context (the latest as of this generation; injected content excludes global constraints). Review the injected Taskdoc instead of trying to read files under `*.tsk/` via general file tools (they will be rejected).',
|
|
169
191
|
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.',
|
|
170
|
-
remindersLine: '- Reminders (i.e. numbered reminders, working set): 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,
|
|
192
|
+
remindersLine: '- Reminders (i.e. numbered reminders, working set): 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, default to a structured continuation-package reminder that keeps only details not already covered by Taskdoc but easy to lose during resume (first step, key pointers, run/verify info, volatile ids/paths). If the system has already put the current course into caution/critical remediation, rough multi-reminder bridge notes are acceptable; in the current course, only preserve volatile information and clear_mind. Only after the system actually starts the new course does the mandatory first step become 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.',
|
|
171
193
|
teamMemoryLine: '- Team memory: stable shared conventions (cross-task).',
|
|
172
194
|
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.',
|
|
173
195
|
subdialogDutyLine: `You are currently in a subdialog: \`change_mind\` is not allowed here. When Taskdoc should be updated (especially the shared progress bulletin board), tellask the Taskdoc maintainer \`@${ctx.taskdocMaintainerId}\` with a fully merged replacement draft (full-section replacement). Do not claim it is updated until you see a receipt.`,
|
|
174
196
|
mainlineDutyLine: 'You are currently in the main dialog: you are responsible for keeping the team-shared Taskdoc coherent and up to date (especially the progress bulletin board). Merge proposals from teammates/subdialogs promptly and keep it concise.',
|
|
175
|
-
teammateTellaskRoundDoneLine:
|
|
197
|
+
teammateTellaskRoundDoneLine: `Teammate Tellask semantics: when you receive an upstream reply with the ${runtimeMarkers.finalCompleted} marker, that Tellask round is finished; the responder will not keep executing the same call in the background. If the objective is not met, “waiting” is wrong: you must explicitly start a new Tellask round to continue.`,
|
|
176
198
|
teamMemoryHintLine: 'Hint: you have team-memory tools (`add_team_memory` / `replace_team_memory` / `drop_team_memory` / `clear_team_memory`) and may maintain team memory when it is truly stable and worth sharing.',
|
|
177
199
|
personalMemoryHintLine: `Hint: you have personal-memory tools (\`add_personal_memory\` / \`replace_personal_memory\` / \`drop_personal_memory\` / \`clear_personal_memory\`). Personal memory is private to the current agent and is automatically isolated under \`.minds/memory/individual/<member-id>/...\`; therefore \`path\` MUST NOT include your member id (do not write \`${ctx.agentId}/...\`). For first-time setup, just call \`add_personal_memory\`—the directory will be created automatically. Memory is automatically injected into context on each generation: keep it small, keep it accurate, and group facts that are updated together. Store stable facts (exact key paths + minimal contracts), not daily state/progress. If you changed those files or detect staleness/conflicts, immediately \`replace_personal_memory\` to keep it accurate.`,
|
|
178
200
|
subdialogWorkflowLine: `Workflow: do work → distill (\`update_reminder\`; when Taskdoc needs updates, draft a merged replacement and ask \`@${ctx.taskdocMaintainerId}\`) → then \`clear_mind\` to drop noise.`,
|
|
179
201
|
mainlineWorkflowLine: 'Workflow: do work → distill (`update_reminder` + `change_mind(progress)`) → then `clear_mind` to drop noise.',
|
|
180
|
-
contextHealthLine:
|
|
181
|
-
taskdocLogLine:
|
|
202
|
+
contextHealthLine: contextHealthLineEn,
|
|
203
|
+
taskdocLogLine: taskdocLogLineEn,
|
|
182
204
|
};
|
|
183
205
|
}
|
|
184
206
|
function buildMemorySystemPrompt(ctx) {
|