dominds 1.20.2 → 1.20.4

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 (154) hide show
  1. package/README.md +4 -4
  2. package/README.zh.md +2 -2
  3. package/dist/access-control.js +2 -2
  4. package/dist/cli/webui.d.ts +1 -1
  5. package/dist/cli/webui.js +29 -9
  6. package/dist/docs/OEC-philosophy.md +1 -1
  7. package/dist/docs/cli-usage.md +2 -1
  8. package/dist/docs/cli-usage.zh.md +6 -3
  9. package/dist/docs/context-health.md +2 -2
  10. package/dist/docs/context-health.zh.md +2 -2
  11. package/dist/docs/design.md +3 -3
  12. package/dist/docs/design.zh.md +3 -3
  13. package/dist/docs/dialog-system.md +18 -10
  14. package/dist/docs/dialog-system.zh.md +18 -10
  15. package/dist/docs/dominds-terminology.md +4 -4
  16. package/dist/docs/encapsulated-taskdoc.md +17 -10
  17. package/dist/docs/encapsulated-taskdoc.zh.md +18 -11
  18. package/dist/minds/load.js +15 -4
  19. package/dist/minds/minds-i18n.js +2 -2
  20. package/dist/minds/system-prompt-parts.js +11 -11
  21. package/dist/runtime/driver-messages.js +8 -4
  22. package/dist/server/api-routes.js +65 -0
  23. package/dist/server/port-selection.d.ts +19 -0
  24. package/dist/server/port-selection.js +57 -0
  25. package/dist/server/server-core.d.ts +2 -2
  26. package/dist/server/server-core.js +21 -7
  27. package/dist/server/static-server.js +1 -0
  28. package/dist/server.d.ts +3 -0
  29. package/dist/server.js +109 -44
  30. package/dist/team.d.ts +2 -3
  31. package/dist/team.js +17 -4
  32. package/dist/tools/builtins.js +5 -0
  33. package/dist/tools/ctrl.d.ts +11 -7
  34. package/dist/tools/ctrl.js +248 -34
  35. package/dist/tools/prompts/control/en/errors.md +2 -2
  36. package/dist/tools/prompts/control/en/index.md +1 -1
  37. package/dist/tools/prompts/control/en/principles.md +14 -12
  38. package/dist/tools/prompts/control/en/tools.md +40 -6
  39. package/dist/tools/prompts/control/zh/errors.md +2 -2
  40. package/dist/tools/prompts/control/zh/index.md +1 -1
  41. package/dist/tools/prompts/control/zh/principles.md +14 -12
  42. package/dist/tools/prompts/control/zh/tools.md +40 -6
  43. package/dist/tools/prompts/personal_memory/en/principles.md +1 -1
  44. package/dist/tools/prompts/personal_memory/zh/principles.md +1 -1
  45. package/dist/tools/prompts/team_memory/en/principles.md +1 -1
  46. package/dist/tools/prompts/team_memory/zh/principles.md +1 -1
  47. package/dist/tools/registry.d.ts +6 -0
  48. package/dist/tools/team_mgmt.js +5 -5
  49. package/dist/utils/task-package.d.ts +24 -1
  50. package/dist/utils/task-package.js +80 -5
  51. package/dist/utils/taskdoc-search-worker-client.d.ts +12 -0
  52. package/dist/utils/taskdoc-search-worker-client.js +320 -0
  53. package/dist/utils/taskdoc-search-worker.d.ts +1 -0
  54. package/dist/utils/taskdoc-search-worker.js +42 -0
  55. package/dist/utils/taskdoc-search.d.ts +28 -7
  56. package/dist/utils/taskdoc-search.js +62 -15
  57. package/dist/utils/taskdoc.js +60 -22
  58. package/package.json +3 -3
  59. package/webapp/dist/assets/{_basePickBy-B7M9Q0Fa.js → _basePickBy-BrC49DPW.js} +3 -3
  60. package/webapp/dist/assets/{_basePickBy-B7M9Q0Fa.js.map → _basePickBy-BrC49DPW.js.map} +1 -1
  61. package/webapp/dist/assets/{_baseUniq-DAeYoL6j.js → _baseUniq-C_Wcx-_S.js} +2 -2
  62. package/webapp/dist/assets/{_baseUniq-DAeYoL6j.js.map → _baseUniq-C_Wcx-_S.js.map} +1 -1
  63. package/webapp/dist/assets/{arc-Bh4nDbNR.js → arc-X5iIdpx0.js} +2 -2
  64. package/webapp/dist/assets/{arc-Bh4nDbNR.js.map → arc-X5iIdpx0.js.map} +1 -1
  65. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CxqmdsIm.js → architectureDiagram-2XIMDMQ5-DFfhMGkT.js} +7 -7
  66. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CxqmdsIm.js.map → architectureDiagram-2XIMDMQ5-DFfhMGkT.js.map} +1 -1
  67. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-CxIWLtpt.js → blockDiagram-WCTKOSBZ-BAt4BaxZ.js} +7 -7
  68. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-CxIWLtpt.js.map → blockDiagram-WCTKOSBZ-BAt4BaxZ.js.map} +1 -1
  69. package/webapp/dist/assets/{c4Diagram-IC4MRINW-1qErOIgG.js → c4Diagram-IC4MRINW-BYxKH5AA.js} +3 -3
  70. package/webapp/dist/assets/{c4Diagram-IC4MRINW-1qErOIgG.js.map → c4Diagram-IC4MRINW-BYxKH5AA.js.map} +1 -1
  71. package/webapp/dist/assets/{channel-DkgZHNUe.js → channel-CuYhL59H.js} +2 -2
  72. package/webapp/dist/assets/{channel-DkgZHNUe.js.map → channel-CuYhL59H.js.map} +1 -1
  73. package/webapp/dist/assets/{chunk-4BX2VUAB-BmdMbU9v.js → chunk-4BX2VUAB-Ch1PfLiD.js} +2 -2
  74. package/webapp/dist/assets/{chunk-4BX2VUAB-BmdMbU9v.js.map → chunk-4BX2VUAB-Ch1PfLiD.js.map} +1 -1
  75. package/webapp/dist/assets/{chunk-55IACEB6-D6LDTDBy.js → chunk-55IACEB6-B3rzakPd.js} +2 -2
  76. package/webapp/dist/assets/{chunk-55IACEB6-D6LDTDBy.js.map → chunk-55IACEB6-B3rzakPd.js.map} +1 -1
  77. package/webapp/dist/assets/{chunk-FMBD7UC4-C-BdCe4C.js → chunk-FMBD7UC4-CCZWJRJ5.js} +2 -2
  78. package/webapp/dist/assets/{chunk-FMBD7UC4-C-BdCe4C.js.map → chunk-FMBD7UC4-CCZWJRJ5.js.map} +1 -1
  79. package/webapp/dist/assets/{chunk-JSJVCQXG-WA_BLIm9.js → chunk-JSJVCQXG-Dqd_MOPD.js} +2 -2
  80. package/webapp/dist/assets/{chunk-JSJVCQXG-WA_BLIm9.js.map → chunk-JSJVCQXG-Dqd_MOPD.js.map} +1 -1
  81. package/webapp/dist/assets/{chunk-KX2RTZJC-CA7sDJO5.js → chunk-KX2RTZJC-DOpPZD_q.js} +2 -2
  82. package/webapp/dist/assets/{chunk-KX2RTZJC-CA7sDJO5.js.map → chunk-KX2RTZJC-DOpPZD_q.js.map} +1 -1
  83. package/webapp/dist/assets/{chunk-NQ4KR5QH-wlvxalE3.js → chunk-NQ4KR5QH-CUj2LNV0.js} +4 -4
  84. package/webapp/dist/assets/{chunk-NQ4KR5QH-wlvxalE3.js.map → chunk-NQ4KR5QH-CUj2LNV0.js.map} +1 -1
  85. package/webapp/dist/assets/{chunk-QZHKN3VN-Bo1VMcph.js → chunk-QZHKN3VN-DXeWDyzh.js} +2 -2
  86. package/webapp/dist/assets/{chunk-QZHKN3VN-Bo1VMcph.js.map → chunk-QZHKN3VN-DXeWDyzh.js.map} +1 -1
  87. package/webapp/dist/assets/{chunk-WL4C6EOR-B-Pk44be.js → chunk-WL4C6EOR-CqTowzs6.js} +6 -6
  88. package/webapp/dist/assets/{chunk-WL4C6EOR-B-Pk44be.js.map → chunk-WL4C6EOR-CqTowzs6.js.map} +1 -1
  89. package/webapp/dist/assets/{classDiagram-VBA2DB6C-BqKuyb49.js → classDiagram-VBA2DB6C-CvsxEN3D.js} +7 -7
  90. package/webapp/dist/assets/{classDiagram-VBA2DB6C-BqKuyb49.js.map → classDiagram-VBA2DB6C-CvsxEN3D.js.map} +1 -1
  91. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-BqKuyb49.js → classDiagram-v2-RAHNMMFH-CvsxEN3D.js} +7 -7
  92. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-BqKuyb49.js.map → classDiagram-v2-RAHNMMFH-CvsxEN3D.js.map} +1 -1
  93. package/webapp/dist/assets/{clone-BX5z8WVZ.js → clone-PGWIYNYc.js} +2 -2
  94. package/webapp/dist/assets/{clone-BX5z8WVZ.js.map → clone-PGWIYNYc.js.map} +1 -1
  95. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-B-s11SgN.js → cose-bilkent-S5V4N54A-Cf8RR_8j.js} +2 -2
  96. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-B-s11SgN.js.map → cose-bilkent-S5V4N54A-Cf8RR_8j.js.map} +1 -1
  97. package/webapp/dist/assets/{dagre-KLK3FWXG-DmQFV2qK.js → dagre-KLK3FWXG-C1yQDg-6.js} +7 -7
  98. package/webapp/dist/assets/{dagre-KLK3FWXG-DmQFV2qK.js.map → dagre-KLK3FWXG-C1yQDg-6.js.map} +1 -1
  99. package/webapp/dist/assets/{diagram-E7M64L7V-QRaBfST8.js → diagram-E7M64L7V-CrT4qBJh.js} +8 -8
  100. package/webapp/dist/assets/{diagram-E7M64L7V-QRaBfST8.js.map → diagram-E7M64L7V-CrT4qBJh.js.map} +1 -1
  101. package/webapp/dist/assets/{diagram-IFDJBPK2-lrWn1Obo.js → diagram-IFDJBPK2-B8WaCOcr.js} +7 -7
  102. package/webapp/dist/assets/{diagram-IFDJBPK2-lrWn1Obo.js.map → diagram-IFDJBPK2-B8WaCOcr.js.map} +1 -1
  103. package/webapp/dist/assets/{diagram-P4PSJMXO-sTU7Hh-Y.js → diagram-P4PSJMXO-BCZeNfu_.js} +7 -7
  104. package/webapp/dist/assets/{diagram-P4PSJMXO-sTU7Hh-Y.js.map → diagram-P4PSJMXO-BCZeNfu_.js.map} +1 -1
  105. package/webapp/dist/assets/{erDiagram-INFDFZHY-Cx6jc9Wq.js → erDiagram-INFDFZHY-BrYt0-mW.js} +5 -5
  106. package/webapp/dist/assets/{erDiagram-INFDFZHY-Cx6jc9Wq.js.map → erDiagram-INFDFZHY-BrYt0-mW.js.map} +1 -1
  107. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-DfGI49Dz.js → flowDiagram-PKNHOUZH-8lZ5d5y-.js} +7 -7
  108. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-DfGI49Dz.js.map → flowDiagram-PKNHOUZH-8lZ5d5y-.js.map} +1 -1
  109. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-nrcHWWaM.js → ganttDiagram-A5KZAMGK-CQ8pOLf-.js} +3 -3
  110. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-nrcHWWaM.js.map → ganttDiagram-A5KZAMGK-CQ8pOLf-.js.map} +1 -1
  111. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js → gitGraphDiagram-K3NZZRJ6-aOTOe0HP.js} +8 -8
  112. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js.map → gitGraphDiagram-K3NZZRJ6-aOTOe0HP.js.map} +1 -1
  113. package/webapp/dist/assets/{graph-R5G-y8tB.js → graph-CyMR1egR.js} +3 -3
  114. package/webapp/dist/assets/{graph-R5G-y8tB.js.map → graph-CyMR1egR.js.map} +1 -1
  115. package/webapp/dist/assets/{index--fy89xGh.js → index-B9TTmMv-.js} +550 -134
  116. package/webapp/dist/assets/index-B9TTmMv-.js.map +1 -0
  117. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-PIoZHr7s.js → infoDiagram-LFFYTUFH-CXR9XjRe.js} +6 -6
  118. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-PIoZHr7s.js.map → infoDiagram-LFFYTUFH-CXR9XjRe.js.map} +1 -1
  119. package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-oCM-LYk1.js → ishikawaDiagram-PHBUUO56-zwe-cqRW.js} +2 -2
  120. package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-oCM-LYk1.js.map → ishikawaDiagram-PHBUUO56-zwe-cqRW.js.map} +1 -1
  121. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-C2qidjQ5.js → journeyDiagram-4ABVD52K-BV-8X5hz.js} +5 -5
  122. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-C2qidjQ5.js.map → journeyDiagram-4ABVD52K-BV-8X5hz.js.map} +1 -1
  123. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Du0TC8WS.js → kanban-definition-K7BYSVSG-E3W-szUv.js} +3 -3
  124. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Du0TC8WS.js.map → kanban-definition-K7BYSVSG-E3W-szUv.js.map} +1 -1
  125. package/webapp/dist/assets/{layout-VmEo1OEB.js → layout-DvIjuV8I.js} +5 -5
  126. package/webapp/dist/assets/{layout-VmEo1OEB.js.map → layout-DvIjuV8I.js.map} +1 -1
  127. package/webapp/dist/assets/{linear-B662YHAc.js → linear-C-SIS0ki.js} +2 -2
  128. package/webapp/dist/assets/{linear-B662YHAc.js.map → linear-C-SIS0ki.js.map} +1 -1
  129. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-D7arZj95.js → mindmap-definition-YRQLILUH-wigkPJ2B.js} +4 -4
  130. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-D7arZj95.js.map → mindmap-definition-YRQLILUH-wigkPJ2B.js.map} +1 -1
  131. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DvjPP4PA.js → pieDiagram-SKSYHLDU-BKrYJ0LE.js} +8 -8
  132. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DvjPP4PA.js.map → pieDiagram-SKSYHLDU-BKrYJ0LE.js.map} +1 -1
  133. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-B_JUGMj_.js → quadrantDiagram-337W2JSQ-fjwd0gVY.js} +3 -3
  134. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-B_JUGMj_.js.map → quadrantDiagram-337W2JSQ-fjwd0gVY.js.map} +1 -1
  135. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-DF0mpvE3.js → requirementDiagram-Z7DCOOCP-vgTMObSA.js} +4 -4
  136. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-DF0mpvE3.js.map → requirementDiagram-Z7DCOOCP-vgTMObSA.js.map} +1 -1
  137. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-CoXlxv00.js → sankeyDiagram-WA2Y5GQK-B-ZV3LF7.js} +2 -2
  138. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-CoXlxv00.js.map → sankeyDiagram-WA2Y5GQK-B-ZV3LF7.js.map} +1 -1
  139. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DYqT5Pg7.js → sequenceDiagram-2WXFIKYE-DPhZYHhW.js} +4 -4
  140. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DYqT5Pg7.js.map → sequenceDiagram-2WXFIKYE-DPhZYHhW.js.map} +1 -1
  141. package/webapp/dist/assets/{stateDiagram-RAJIS63D-D9b1mN8-.js → stateDiagram-RAJIS63D-DLsw3SC8.js} +9 -9
  142. package/webapp/dist/assets/{stateDiagram-RAJIS63D-D9b1mN8-.js.map → stateDiagram-RAJIS63D-DLsw3SC8.js.map} +1 -1
  143. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DNzgudL_.js → stateDiagram-v2-FVOUBMTO-DqXB3dNs.js} +5 -5
  144. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DNzgudL_.js.map → stateDiagram-v2-FVOUBMTO-DqXB3dNs.js.map} +1 -1
  145. package/webapp/dist/assets/{timeline-definition-YZTLITO2-CkyKUY7A.js → timeline-definition-YZTLITO2-BFSqlDfo.js} +3 -3
  146. package/webapp/dist/assets/{timeline-definition-YZTLITO2-CkyKUY7A.js.map → timeline-definition-YZTLITO2-BFSqlDfo.js.map} +1 -1
  147. package/webapp/dist/assets/{treemap-KZPCXAKY-CZd09kF-.js → treemap-KZPCXAKY-sdfq6mHG.js} +5 -5
  148. package/webapp/dist/assets/{treemap-KZPCXAKY-CZd09kF-.js.map → treemap-KZPCXAKY-sdfq6mHG.js.map} +1 -1
  149. package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BxVF5Olo.js → vennDiagram-LZ73GAT5-D7Cioksz.js} +2 -2
  150. package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BxVF5Olo.js.map → vennDiagram-LZ73GAT5-D7Cioksz.js.map} +1 -1
  151. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BRwRloPc.js → xychartDiagram-JWTSCODW-No65aXqH.js} +3 -3
  152. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BRwRloPc.js.map → xychartDiagram-JWTSCODW-No65aXqH.js.map} +1 -1
  153. package/webapp/dist/index.html +1 -1
  154. package/webapp/dist/assets/index--fy89xGh.js.map +0 -1
@@ -136,13 +136,32 @@ status: ok|error
136
136
  - 若你刚刚已经 `add_reminder` / `update_reminder` 完同一份接续信息,优先直接 `clear_mind({})`
137
137
  - 若不确定是否重复,少量重复可以接受;不要为了“绝不重复”而冒信息丢失风险
138
138
 
139
- ### 5. change_mind
139
+ ### 5. do_mind
140
+
141
+ 创建新的差遣牒章节。若目标章节已存在,会失败。
142
+
143
+ **参数:**
144
+
145
+ - `selector`(必需):章节选择器(goals/constraints/progress)
146
+ - `category`(可选):额外章节目录;与 `selector` 组合定位 `<category>/<selector>.md`
147
+ - `content`(必需):新章节内容
148
+
149
+ **特点:**
150
+
151
+ - 只创建,不覆盖已有内容
152
+ - 适合创建缺失的常驻章节,或新增额外章节来保留细节,同时不触碰已有差遣牒正文
153
+ - 若目标已存在且只需少量补充,用 `mind_more`;若需要整章改写/合并,用 `change_mind`
154
+ - 不开启新 course
155
+ - 变更对所有队友可见
156
+
157
+ ### 6. change_mind
140
158
 
141
159
  更新差遣牒章节。
142
160
 
143
161
  **参数:**
144
162
 
145
163
  - `selector`(必需):章节选择器(goals/constraints/progress)
164
+ - `category`(可选):额外章节目录;与 `selector` 组合定位 `<category>/<selector>.md`
146
165
  - `content`(必需):新内容(整段替换)
147
166
 
148
167
  **返回:**
@@ -155,12 +174,12 @@ updated_at: <更新时间戳>
155
174
 
156
175
  **特点:**
157
176
 
158
- - 每次调用替换整个章节
159
- - 不重置对话轮次
177
+ - 每次调用替换已有的整个章节;不会创建缺失章节
178
+ - 不开启新 course
160
179
  - 变更对所有队友可见
161
180
  - 约束规则:`constraints` 只写任务特有硬要求,不得重复系统提示/工具文档中的全局规则;一经发现重复,必须删除并告知用户
162
181
 
163
- ### 6. mind_more
182
+ ### 7. mind_more
164
183
 
165
184
  向差遣牒章节追加条目;默认追加到 `progress`,用于降低整章替换压力。
166
185
 
@@ -184,10 +203,25 @@ mind_more({
184
203
  - 只追加,不会自动去重、改写或压缩旧内容
185
204
  - 适合给 `progress` 补一两条当前仍有效的状态、决策、下一步或阻塞
186
205
  - 不适合把每一步调查过程、长日志、完整方案或验收记录当流水账追加进去;这些细节应写入 rtws 正式文档,差遣牒只写摘要和文档定位 pointer
187
- - 若需要删除陈旧项、重排结构或压缩公告牌,仍使用 `change_mind` 做整章替换
206
+ - 若需要删除陈旧项、重排结构或压缩公告牌,仍使用 `change_mind` 做整章替换;若要删除整个章节文件,使用 `never_mind`
188
207
  - 当同一主题已经有多条阶段记录时,优先 `change_mind` 合并成当前仍有效的简明公告,而不是继续 `mind_more`
189
208
 
190
- ### 7. recall_taskdoc
209
+ ### 8. never_mind
210
+
211
+ 删除差遣牒章节文件。
212
+
213
+ **参数:**
214
+
215
+ - `selector`(必需):章节选择器;顶层章节可用 `goals` / `constraints` / `progress`
216
+ - `category`(可选):额外章节目录;与 `selector` 组合定位 `<category>/<selector>.md`
217
+
218
+ **特点:**
219
+
220
+ - 只删除整章文件,不做内容编辑
221
+ - 仅用于章节整体不再成立;如果只是删除几条陈旧项或压缩结构,优先用 `change_mind` 写回整理后的全文
222
+ - 不开启新 course
223
+
224
+ ### 9. recall_taskdoc
191
225
 
192
226
  读取差遣牒章节。
193
227
 
@@ -90,7 +90,7 @@ The `personal_memory` toolset uses a **path key-value storage** model:
90
90
 
91
91
  - **team_memory**: Team shared memory, visible to all members
92
92
  - **reminder**: Temporary reminder, session-level
93
- - **mind_more / change_mind**: Append to or replace Taskdoc (goals/constraints/progress)
93
+ - **do_mind / mind_more / change_mind / never_mind**: Create, append to, replace, or delete Taskdoc sections
94
94
 
95
95
  ## Limitations and Notes
96
96
 
@@ -90,7 +90,7 @@ personal_memory 工具集采用**路径键值存储**模型:
90
90
 
91
91
  - **team_memory**:团队共享记忆,所有成员可见
92
92
  - **reminder**:临时提醒,会话级别
93
- - **mind_more / change_mind**:追加或替换差遣牒(goals/constraints/progress)
93
+ - **do_mind / mind_more / change_mind / never_mind**:创建、追加、替换或删除差遣牒章节
94
94
 
95
95
  ## 限制与注意事项
96
96
 
@@ -80,7 +80,7 @@ The team_memory toolset uses a **path key-value storage** model, similar to pers
80
80
 
81
81
  - **personal_memory**: Personal memory, only current agent visible
82
82
  - **reminder**: Temporary reminder, session-level
83
- - **mind_more / change_mind**: Append to or replace Taskdoc (goals/constraints/progress)
83
+ - **do_mind / mind_more / change_mind / never_mind**: Create, append to, replace, or delete Taskdoc sections
84
84
 
85
85
  > Note: `team_memory` carries long-lived team consensus; Taskdoc `progress` carries quasi-real-time team-wide task announcements during execution. Do not mix them.
86
86
 
@@ -80,7 +80,7 @@ team_memory 工具集采用**路径键值存储**模型,与 personal_memory
80
80
 
81
81
  - **personal_memory**:个人记忆,仅当前智能体可见
82
82
  - **reminder**:临时提醒,会话级别
83
- - **mind_more / change_mind**:追加或替换差遣牒(goals/constraints/progress)
83
+ - **do_mind / mind_more / change_mind / never_mind**:创建、追加、替换或删除差遣牒章节
84
84
 
85
85
  > 注:`team_memory` 承接团队长期共识;Taskdoc `progress` 承接任务执行期的准实时全队公告,不应混淆。
86
86
 
@@ -11,6 +11,12 @@ export declare const toolsRegistry: Map<string, Tool>;
11
11
  export declare const toolsetsRegistry: Map<string, Tool[]>;
12
12
  export type ToolsetMeta = {
13
13
  source?: ToolsetSource;
14
+ /**
15
+ * Whether `.minds/team.yaml` may assign this toolset to members. Defaults to
16
+ * true. Set false for intrinsic runtime toolsets that must be injected by the
17
+ * system according to dialog scope rather than granted by team config.
18
+ */
19
+ assignable?: boolean;
14
20
  descriptionI18n?: I18nText;
15
21
  /**
16
22
  * Toolset-level prompt injected into the agent system prompt when the member
@@ -3221,7 +3221,7 @@ function renderPermissionsManual(language) {
3221
3221
  '模式支持 `*` 和 `**`,按“目录范围”语义匹配(按目录/路径前缀范围来理解)。',
3222
3222
  '示例:`dominds/**` 会匹配 `dominds/README.md`、`dominds/main/server.ts`、`dominds/webapp/src/...` 等路径。',
3223
3223
  '示例:`.minds/**` 会匹配 `.minds/team.yaml`、`.minds/team/<id>/persona.zh.md` 等;常用于限制普通成员访问 minds 资产。',
3224
- '`*.tsk/` 是封装差遣牒:只能用函数工具 `mind_more` / `change_mind` 维护。任何通用文件工具都无法访问该目录树(硬编码无条件拒绝)。',
3224
+ '`*.tsk/` 是封装差遣牒:只能用函数工具 `do_mind` / `mind_more` / `change_mind` / `never_mind` 维护。任何通用文件工具都无法访问该目录树(硬编码无条件拒绝)。',
3225
3225
  '`.minds/**` 是 rtws(运行时工作区)的“团队配置/记忆/资产”目录:任何通用文件工具都无法访问(硬编码无条件拒绝)。只有专用的 `.minds/` 工具集(例如 `team_mgmt`)可访问它。',
3226
3226
  '在当前内建模型中,`.minds/team/**`、`.minds/team.yaml`、`.minds/skills/**`、`.minds/priming/**` 等团队资产目录,只有持有 `team_mgmt` 的成员才应修改。',
3227
3227
  '`.minds/team/<id>/*` 的“角色归属对象”只表示它描述哪个角色,不构成任何额外写权限。未持有 `team_mgmt` 的成员,即使只是想更新“自己的” persona/knowhow/pitfalls,也应通过回贴建议内容,由具备权限的团队管理者代写。',
@@ -3249,7 +3249,7 @@ function renderPermissionsManual(language) {
3249
3249
  'Patterns support `*` and `**` with directory-scope semantics (think directory/path-range matching).',
3250
3250
  'Example: `dominds/**` matches `dominds/README.md`, `dominds/main/server.ts`, `dominds/webapp/src/...`, etc.',
3251
3251
  'Example: `.minds/**` matches `.minds/team.yaml` and `.minds/team/<id>/persona.*.md`; commonly used to restrict normal members from minds assets.',
3252
- '`*.tsk/` is an encapsulated Taskdoc: it must be maintained via `mind_more` / `change_mind` only. It is hard-denied for all general file tools.',
3252
+ '`*.tsk/` is an encapsulated Taskdoc: it must be maintained via `do_mind` / `mind_more` / `change_mind` / `never_mind` only. It is hard-denied for all general file tools.',
3253
3253
  '`.minds/**` stores rtws (runtime workspace) team config/memory/assets: it is hard-denied for all general file tools. Only dedicated `.minds/`-scoped toolsets (e.g. `team_mgmt`) may access it.',
3254
3254
  'In the current built-in model, team asset paths such as `.minds/team/**`, `.minds/team.yaml`, `.minds/skills/**`, and `.minds/priming/**` should only be modified by members who hold `team_mgmt`.',
3255
3255
  'The “owner role” of `.minds/team/<id>/*` only tells you which role the asset describes; it does not grant extra write permission. Without `team_mgmt`, a member should not rewrite even “their own” persona/knowhow/pitfalls directly, and should instead hand back suggested content for an authorized team manager to apply.',
@@ -3767,11 +3767,11 @@ function renderToolsetCapabilitySummary(language, ids, toolsetsById) {
3767
3767
  async function renderToolsets(language) {
3768
3768
  const windowsHost = isWindowsRuntimeHost();
3769
3769
  const toolsetsById = (0, registry_2.listToolsets)();
3770
- const ids = Object.keys(toolsetsById).filter((id) => id !== 'control');
3770
+ const ids = Object.keys(toolsetsById).filter((id) => (0, registry_2.getToolsetMeta)(id)?.assignable !== false);
3771
3771
  const header = language === 'zh' ? fmtHeader('已注册 toolsets') : fmtHeader('Registered toolsets');
3772
3772
  const intro = language === 'zh'
3773
3773
  ? fmtList([
3774
- '`control`:对话控制类工具属于“内建必备能力”,运行时会自动包含给所有成员;因此不需要(也不建议)在 `members.<id>.toolsets` 里显式列出,本页也默认不展示它。',
3774
+ '`control`:对话控制类工具属于内建运行时能力,会按对话范围自动注入;不能在 `members.<id>.toolsets` 里显式列出,本页也默认不展示它。',
3775
3775
  '`diag`:诊断类工具集不应默认授予任何成员;仅当用户明确要求“诊断/排查/验证解析/流式分段”等能力时才添加。',
3776
3776
  '多数情况下推荐用 `members.<id>.toolsets` 做粗粒度授权;`members.<id>.tools` 更适合做少量补充/收敛。',
3777
3777
  windowsHost
@@ -3785,7 +3785,7 @@ async function renderToolsets(language) {
3785
3785
  '常见三种模式(示例写在 `.minds/team.yaml` 的 `members.<id>.toolsets` 下):',
3786
3786
  ])
3787
3787
  : fmtList([
3788
- '`control`: dialog-control tools are intrinsic and automatically included for all members at runtime; you do not need (and should not) list it under `members.<id>.toolsets`. It is omitted from the list below.',
3788
+ '`control`: dialog-control tools are intrinsic runtime capabilities injected according to dialog scope; it cannot be listed under `members.<id>.toolsets`. It is omitted from the list below.',
3789
3789
  '`diag`: diagnostics tools should not be granted by default; only add it when the user explicitly asks for diagnostics/troubleshooting/streaming-parse verification.',
3790
3790
  'Typically use `members.<id>.toolsets` for coarse-grained access; use `members.<id>.tools` for a small number of additions/limits.',
3791
3791
  windowsHost
@@ -121,7 +121,21 @@ export declare function updateTaskPackageByChangeMindTarget(params: {
121
121
  target: TaskPackageChangeMindTarget;
122
122
  content: string;
123
123
  updatedBy?: string;
124
- }): Promise<void>;
124
+ }): Promise<{
125
+ kind: 'updated';
126
+ } | {
127
+ kind: 'missing';
128
+ }>;
129
+ export declare function createTaskPackageByChangeMindTarget(params: {
130
+ taskPackageDirFullPath: string;
131
+ target: TaskPackageChangeMindTarget;
132
+ content: string;
133
+ updatedBy?: string;
134
+ }): Promise<{
135
+ kind: 'created';
136
+ } | {
137
+ kind: 'exists';
138
+ }>;
125
139
  export declare function appendTaskPackageByChangeMindTarget(params: {
126
140
  taskPackageDirFullPath: string;
127
141
  target: TaskPackageChangeMindTarget;
@@ -129,6 +143,15 @@ export declare function appendTaskPackageByChangeMindTarget(params: {
129
143
  sep: string;
130
144
  updatedBy?: string;
131
145
  }): Promise<void>;
146
+ export declare function deleteTaskPackageByChangeMindTarget(params: {
147
+ taskPackageDirFullPath: string;
148
+ target: TaskPackageChangeMindTarget;
149
+ }): Promise<{
150
+ kind: 'deleted';
151
+ } | {
152
+ kind: 'missing';
153
+ }>;
154
+ export declare function taskPackageRelativePathForChangeMindTarget(target: TaskPackageChangeMindTarget): string;
132
155
  export declare function ensureTaskPackage(taskPackageDirFullPath: string, _updatedBy?: string): Promise<void>;
133
156
  export declare function readTaskPackageSections(taskPackageDirFullPath: string): Promise<TaskPackageSectionsState>;
134
157
  export declare function formatEffectiveTaskDocFromSections(language: LanguageCode, sections: TaskPackageSectionsState, bearInMind?: TaskPackageBearInMindState): string;
@@ -53,7 +53,10 @@ exports.parseTaskPackageChangeMindTarget = parseTaskPackageChangeMindTarget;
53
53
  exports.taskPackageFilenameForSection = taskPackageFilenameForSection;
54
54
  exports.bearInMindFilenameForSection = bearInMindFilenameForSection;
55
55
  exports.updateTaskPackageByChangeMindTarget = updateTaskPackageByChangeMindTarget;
56
+ exports.createTaskPackageByChangeMindTarget = createTaskPackageByChangeMindTarget;
56
57
  exports.appendTaskPackageByChangeMindTarget = appendTaskPackageByChangeMindTarget;
58
+ exports.deleteTaskPackageByChangeMindTarget = deleteTaskPackageByChangeMindTarget;
59
+ exports.taskPackageRelativePathForChangeMindTarget = taskPackageRelativePathForChangeMindTarget;
57
60
  exports.ensureTaskPackage = ensureTaskPackage;
58
61
  exports.readTaskPackageSections = readTaskPackageSections;
59
62
  exports.formatEffectiveTaskDocFromSections = formatEffectiveTaskDocFromSections;
@@ -185,11 +188,44 @@ function bearInMindFilenameForSection(section) {
185
188
  return bearInMindSectionToFilename[section];
186
189
  }
187
190
  async function updateTaskPackageByChangeMindTarget(params) {
191
+ const { taskPackageDirFullPath, target, content } = params;
192
+ const filePath = taskPackageFilePathForChangeMindTarget(taskPackageDirFullPath, target);
193
+ try {
194
+ const st = await fs.promises.stat(filePath);
195
+ if (!st.isFile()) {
196
+ throw new Error(`Taskdoc section target is not a file: ${filePath}`);
197
+ }
198
+ await writeExistingMarkdownFileWithCanonicalEnding(filePath, content);
199
+ return { kind: 'updated' };
200
+ }
201
+ catch (err) {
202
+ if (typeof err === 'object' &&
203
+ err !== null &&
204
+ 'code' in err &&
205
+ err.code === 'ENOENT') {
206
+ return { kind: 'missing' };
207
+ }
208
+ throw err;
209
+ }
210
+ }
211
+ async function createTaskPackageByChangeMindTarget(params) {
188
212
  const { taskPackageDirFullPath, target, content, updatedBy } = params;
189
213
  await ensureTaskPackage(taskPackageDirFullPath, updatedBy);
190
214
  const filePath = taskPackageFilePathForChangeMindTarget(taskPackageDirFullPath, target);
191
215
  await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
192
- await writeMarkdownFileWithCanonicalEnding(filePath, content);
216
+ try {
217
+ await writeNewMarkdownFileWithCanonicalEnding(filePath, content);
218
+ return { kind: 'created' };
219
+ }
220
+ catch (err) {
221
+ if (typeof err === 'object' &&
222
+ err !== null &&
223
+ 'code' in err &&
224
+ err.code === 'EEXIST') {
225
+ return { kind: 'exists' };
226
+ }
227
+ throw err;
228
+ }
193
229
  }
194
230
  async function appendTaskPackageByChangeMindTarget(params) {
195
231
  const { taskPackageDirFullPath, target, content, sep, updatedBy } = params;
@@ -200,29 +236,68 @@ async function appendTaskPackageByChangeMindTarget(params) {
200
236
  const next = current === null || current.trim() === '' ? content : joinForAppend(current, content, sep);
201
237
  await writeMarkdownFileWithCanonicalEnding(filePath, next);
202
238
  }
239
+ async function deleteTaskPackageByChangeMindTarget(params) {
240
+ const filePath = taskPackageFilePathForChangeMindTarget(params.taskPackageDirFullPath, params.target);
241
+ try {
242
+ const st = await fs.promises.stat(filePath);
243
+ if (!st.isFile()) {
244
+ throw new Error(`Taskdoc section target is not a file: ${filePath}`);
245
+ }
246
+ await fs.promises.unlink(filePath);
247
+ return { kind: 'deleted' };
248
+ }
249
+ catch (err) {
250
+ if (typeof err === 'object' &&
251
+ err !== null &&
252
+ 'code' in err &&
253
+ err.code === 'ENOENT') {
254
+ return { kind: 'missing' };
255
+ }
256
+ throw err;
257
+ }
258
+ }
203
259
  async function writeMarkdownFileWithCanonicalEnding(filePath, content) {
204
260
  await fs.promises.writeFile(filePath, withCanonicalMarkdownFileEnding(content), 'utf8');
205
261
  }
262
+ async function writeExistingMarkdownFileWithCanonicalEnding(filePath, content) {
263
+ const handle = await fs.promises.open(filePath, 'r+');
264
+ try {
265
+ await handle.truncate(0);
266
+ await handle.writeFile(withCanonicalMarkdownFileEnding(content), 'utf8');
267
+ }
268
+ finally {
269
+ await handle.close();
270
+ }
271
+ }
272
+ async function writeNewMarkdownFileWithCanonicalEnding(filePath, content) {
273
+ await fs.promises.writeFile(filePath, withCanonicalMarkdownFileEnding(content), {
274
+ encoding: 'utf8',
275
+ flag: 'wx',
276
+ });
277
+ }
206
278
  function withCanonicalMarkdownFileEnding(content) {
207
279
  const stripped = stripTrailingMarkdownFileNewlines(content);
208
280
  if (stripped === '')
209
281
  return '';
210
282
  return `${stripped}\n`;
211
283
  }
212
- function taskPackageFilePathForChangeMindTarget(taskPackageDirFullPath, target) {
284
+ function taskPackageRelativePathForChangeMindTarget(target) {
213
285
  switch (target.kind) {
214
286
  case 'top_level':
215
- return path.join(taskPackageDirFullPath, taskPackageFilenameForSection(target.section));
287
+ return taskPackageFilenameForSection(target.section);
216
288
  case 'bearinmind':
217
- return path.join(taskPackageDirFullPath, 'bearinmind', bearInMindFilenameForSection(target.section));
289
+ return path.join('bearinmind', bearInMindFilenameForSection(target.section));
218
290
  case 'category':
219
- return path.join(taskPackageDirFullPath, target.category, `${target.selector}.md`);
291
+ return path.join(target.category, `${target.selector}.md`);
220
292
  default: {
221
293
  const _exhaustive = target;
222
294
  return _exhaustive;
223
295
  }
224
296
  }
225
297
  }
298
+ function taskPackageFilePathForChangeMindTarget(taskPackageDirFullPath, target) {
299
+ return path.join(taskPackageDirFullPath, taskPackageRelativePathForChangeMindTarget(target));
300
+ }
226
301
  async function readTextFileIfPresent(filePath) {
227
302
  try {
228
303
  return await fs.promises.readFile(filePath, 'utf8');
@@ -0,0 +1,12 @@
1
+ import type { SearchTaskDocumentSuggestionsResult } from './taskdoc-search';
2
+ export type TaskdocSuggestionWorkerPayload = {
3
+ rootDir?: string;
4
+ query: string;
5
+ limit?: number;
6
+ };
7
+ type TaskdocSuggestionWorkerOptions = {
8
+ signal?: AbortSignal;
9
+ };
10
+ export declare function buildTaskDocumentSuggestionRequestKey(payload: TaskdocSuggestionWorkerPayload): string;
11
+ export declare function searchTaskDocumentSuggestionsInWorker(payload: TaskdocSuggestionWorkerPayload, options?: TaskdocSuggestionWorkerOptions): Promise<SearchTaskDocumentSuggestionsResult>;
12
+ export {};