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.
- package/README.md +4 -4
- package/README.zh.md +2 -2
- package/dist/access-control.js +2 -2
- package/dist/cli/webui.d.ts +1 -1
- package/dist/cli/webui.js +29 -9
- package/dist/docs/OEC-philosophy.md +1 -1
- package/dist/docs/cli-usage.md +2 -1
- package/dist/docs/cli-usage.zh.md +6 -3
- package/dist/docs/context-health.md +2 -2
- package/dist/docs/context-health.zh.md +2 -2
- package/dist/docs/design.md +3 -3
- package/dist/docs/design.zh.md +3 -3
- package/dist/docs/dialog-system.md +18 -10
- package/dist/docs/dialog-system.zh.md +18 -10
- package/dist/docs/dominds-terminology.md +4 -4
- package/dist/docs/encapsulated-taskdoc.md +17 -10
- package/dist/docs/encapsulated-taskdoc.zh.md +18 -11
- package/dist/minds/load.js +15 -4
- package/dist/minds/minds-i18n.js +2 -2
- package/dist/minds/system-prompt-parts.js +11 -11
- package/dist/runtime/driver-messages.js +8 -4
- package/dist/server/api-routes.js +65 -0
- package/dist/server/port-selection.d.ts +19 -0
- package/dist/server/port-selection.js +57 -0
- package/dist/server/server-core.d.ts +2 -2
- package/dist/server/server-core.js +21 -7
- package/dist/server/static-server.js +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.js +109 -44
- package/dist/team.d.ts +2 -3
- package/dist/team.js +17 -4
- package/dist/tools/builtins.js +5 -0
- package/dist/tools/ctrl.d.ts +11 -7
- package/dist/tools/ctrl.js +248 -34
- package/dist/tools/prompts/control/en/errors.md +2 -2
- package/dist/tools/prompts/control/en/index.md +1 -1
- package/dist/tools/prompts/control/en/principles.md +14 -12
- package/dist/tools/prompts/control/en/tools.md +40 -6
- package/dist/tools/prompts/control/zh/errors.md +2 -2
- package/dist/tools/prompts/control/zh/index.md +1 -1
- package/dist/tools/prompts/control/zh/principles.md +14 -12
- package/dist/tools/prompts/control/zh/tools.md +40 -6
- package/dist/tools/prompts/personal_memory/en/principles.md +1 -1
- package/dist/tools/prompts/personal_memory/zh/principles.md +1 -1
- package/dist/tools/prompts/team_memory/en/principles.md +1 -1
- package/dist/tools/prompts/team_memory/zh/principles.md +1 -1
- package/dist/tools/registry.d.ts +6 -0
- package/dist/tools/team_mgmt.js +5 -5
- package/dist/utils/task-package.d.ts +24 -1
- package/dist/utils/task-package.js +80 -5
- package/dist/utils/taskdoc-search-worker-client.d.ts +12 -0
- package/dist/utils/taskdoc-search-worker-client.js +320 -0
- package/dist/utils/taskdoc-search-worker.d.ts +1 -0
- package/dist/utils/taskdoc-search-worker.js +42 -0
- package/dist/utils/taskdoc-search.d.ts +28 -7
- package/dist/utils/taskdoc-search.js +62 -15
- package/dist/utils/taskdoc.js +60 -22
- package/package.json +3 -3
- package/webapp/dist/assets/{_basePickBy-B7M9Q0Fa.js → _basePickBy-BrC49DPW.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-B7M9Q0Fa.js.map → _basePickBy-BrC49DPW.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-DAeYoL6j.js → _baseUniq-C_Wcx-_S.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-DAeYoL6j.js.map → _baseUniq-C_Wcx-_S.js.map} +1 -1
- package/webapp/dist/assets/{arc-Bh4nDbNR.js → arc-X5iIdpx0.js} +2 -2
- package/webapp/dist/assets/{arc-Bh4nDbNR.js.map → arc-X5iIdpx0.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CxqmdsIm.js → architectureDiagram-2XIMDMQ5-DFfhMGkT.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CxqmdsIm.js.map → architectureDiagram-2XIMDMQ5-DFfhMGkT.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-CxIWLtpt.js → blockDiagram-WCTKOSBZ-BAt4BaxZ.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-CxIWLtpt.js.map → blockDiagram-WCTKOSBZ-BAt4BaxZ.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-1qErOIgG.js → c4Diagram-IC4MRINW-BYxKH5AA.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-1qErOIgG.js.map → c4Diagram-IC4MRINW-BYxKH5AA.js.map} +1 -1
- package/webapp/dist/assets/{channel-DkgZHNUe.js → channel-CuYhL59H.js} +2 -2
- package/webapp/dist/assets/{channel-DkgZHNUe.js.map → channel-CuYhL59H.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-BmdMbU9v.js → chunk-4BX2VUAB-Ch1PfLiD.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-BmdMbU9v.js.map → chunk-4BX2VUAB-Ch1PfLiD.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-D6LDTDBy.js → chunk-55IACEB6-B3rzakPd.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-D6LDTDBy.js.map → chunk-55IACEB6-B3rzakPd.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-C-BdCe4C.js → chunk-FMBD7UC4-CCZWJRJ5.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-C-BdCe4C.js.map → chunk-FMBD7UC4-CCZWJRJ5.js.map} +1 -1
- package/webapp/dist/assets/{chunk-JSJVCQXG-WA_BLIm9.js → chunk-JSJVCQXG-Dqd_MOPD.js} +2 -2
- package/webapp/dist/assets/{chunk-JSJVCQXG-WA_BLIm9.js.map → chunk-JSJVCQXG-Dqd_MOPD.js.map} +1 -1
- package/webapp/dist/assets/{chunk-KX2RTZJC-CA7sDJO5.js → chunk-KX2RTZJC-DOpPZD_q.js} +2 -2
- package/webapp/dist/assets/{chunk-KX2RTZJC-CA7sDJO5.js.map → chunk-KX2RTZJC-DOpPZD_q.js.map} +1 -1
- package/webapp/dist/assets/{chunk-NQ4KR5QH-wlvxalE3.js → chunk-NQ4KR5QH-CUj2LNV0.js} +4 -4
- package/webapp/dist/assets/{chunk-NQ4KR5QH-wlvxalE3.js.map → chunk-NQ4KR5QH-CUj2LNV0.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-Bo1VMcph.js → chunk-QZHKN3VN-DXeWDyzh.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-Bo1VMcph.js.map → chunk-QZHKN3VN-DXeWDyzh.js.map} +1 -1
- package/webapp/dist/assets/{chunk-WL4C6EOR-B-Pk44be.js → chunk-WL4C6EOR-CqTowzs6.js} +6 -6
- package/webapp/dist/assets/{chunk-WL4C6EOR-B-Pk44be.js.map → chunk-WL4C6EOR-CqTowzs6.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-BqKuyb49.js → classDiagram-VBA2DB6C-CvsxEN3D.js} +7 -7
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-BqKuyb49.js.map → classDiagram-VBA2DB6C-CvsxEN3D.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-BqKuyb49.js → classDiagram-v2-RAHNMMFH-CvsxEN3D.js} +7 -7
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-BqKuyb49.js.map → classDiagram-v2-RAHNMMFH-CvsxEN3D.js.map} +1 -1
- package/webapp/dist/assets/{clone-BX5z8WVZ.js → clone-PGWIYNYc.js} +2 -2
- package/webapp/dist/assets/{clone-BX5z8WVZ.js.map → clone-PGWIYNYc.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-B-s11SgN.js → cose-bilkent-S5V4N54A-Cf8RR_8j.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-B-s11SgN.js.map → cose-bilkent-S5V4N54A-Cf8RR_8j.js.map} +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-DmQFV2qK.js → dagre-KLK3FWXG-C1yQDg-6.js} +7 -7
- package/webapp/dist/assets/{dagre-KLK3FWXG-DmQFV2qK.js.map → dagre-KLK3FWXG-C1yQDg-6.js.map} +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-QRaBfST8.js → diagram-E7M64L7V-CrT4qBJh.js} +8 -8
- package/webapp/dist/assets/{diagram-E7M64L7V-QRaBfST8.js.map → diagram-E7M64L7V-CrT4qBJh.js.map} +1 -1
- package/webapp/dist/assets/{diagram-IFDJBPK2-lrWn1Obo.js → diagram-IFDJBPK2-B8WaCOcr.js} +7 -7
- package/webapp/dist/assets/{diagram-IFDJBPK2-lrWn1Obo.js.map → diagram-IFDJBPK2-B8WaCOcr.js.map} +1 -1
- package/webapp/dist/assets/{diagram-P4PSJMXO-sTU7Hh-Y.js → diagram-P4PSJMXO-BCZeNfu_.js} +7 -7
- package/webapp/dist/assets/{diagram-P4PSJMXO-sTU7Hh-Y.js.map → diagram-P4PSJMXO-BCZeNfu_.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-INFDFZHY-Cx6jc9Wq.js → erDiagram-INFDFZHY-BrYt0-mW.js} +5 -5
- package/webapp/dist/assets/{erDiagram-INFDFZHY-Cx6jc9Wq.js.map → erDiagram-INFDFZHY-BrYt0-mW.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-DfGI49Dz.js → flowDiagram-PKNHOUZH-8lZ5d5y-.js} +7 -7
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-DfGI49Dz.js.map → flowDiagram-PKNHOUZH-8lZ5d5y-.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-nrcHWWaM.js → ganttDiagram-A5KZAMGK-CQ8pOLf-.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-nrcHWWaM.js.map → ganttDiagram-A5KZAMGK-CQ8pOLf-.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js → gitGraphDiagram-K3NZZRJ6-aOTOe0HP.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js.map → gitGraphDiagram-K3NZZRJ6-aOTOe0HP.js.map} +1 -1
- package/webapp/dist/assets/{graph-R5G-y8tB.js → graph-CyMR1egR.js} +3 -3
- package/webapp/dist/assets/{graph-R5G-y8tB.js.map → graph-CyMR1egR.js.map} +1 -1
- package/webapp/dist/assets/{index--fy89xGh.js → index-B9TTmMv-.js} +550 -134
- package/webapp/dist/assets/index-B9TTmMv-.js.map +1 -0
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-PIoZHr7s.js → infoDiagram-LFFYTUFH-CXR9XjRe.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-PIoZHr7s.js.map → infoDiagram-LFFYTUFH-CXR9XjRe.js.map} +1 -1
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-oCM-LYk1.js → ishikawaDiagram-PHBUUO56-zwe-cqRW.js} +2 -2
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-oCM-LYk1.js.map → ishikawaDiagram-PHBUUO56-zwe-cqRW.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-C2qidjQ5.js → journeyDiagram-4ABVD52K-BV-8X5hz.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-C2qidjQ5.js.map → journeyDiagram-4ABVD52K-BV-8X5hz.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Du0TC8WS.js → kanban-definition-K7BYSVSG-E3W-szUv.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Du0TC8WS.js.map → kanban-definition-K7BYSVSG-E3W-szUv.js.map} +1 -1
- package/webapp/dist/assets/{layout-VmEo1OEB.js → layout-DvIjuV8I.js} +5 -5
- package/webapp/dist/assets/{layout-VmEo1OEB.js.map → layout-DvIjuV8I.js.map} +1 -1
- package/webapp/dist/assets/{linear-B662YHAc.js → linear-C-SIS0ki.js} +2 -2
- package/webapp/dist/assets/{linear-B662YHAc.js.map → linear-C-SIS0ki.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-D7arZj95.js → mindmap-definition-YRQLILUH-wigkPJ2B.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-D7arZj95.js.map → mindmap-definition-YRQLILUH-wigkPJ2B.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DvjPP4PA.js → pieDiagram-SKSYHLDU-BKrYJ0LE.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DvjPP4PA.js.map → pieDiagram-SKSYHLDU-BKrYJ0LE.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-B_JUGMj_.js → quadrantDiagram-337W2JSQ-fjwd0gVY.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-B_JUGMj_.js.map → quadrantDiagram-337W2JSQ-fjwd0gVY.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-DF0mpvE3.js → requirementDiagram-Z7DCOOCP-vgTMObSA.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-DF0mpvE3.js.map → requirementDiagram-Z7DCOOCP-vgTMObSA.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-CoXlxv00.js → sankeyDiagram-WA2Y5GQK-B-ZV3LF7.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-CoXlxv00.js.map → sankeyDiagram-WA2Y5GQK-B-ZV3LF7.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DYqT5Pg7.js → sequenceDiagram-2WXFIKYE-DPhZYHhW.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DYqT5Pg7.js.map → sequenceDiagram-2WXFIKYE-DPhZYHhW.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-D9b1mN8-.js → stateDiagram-RAJIS63D-DLsw3SC8.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-D9b1mN8-.js.map → stateDiagram-RAJIS63D-DLsw3SC8.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DNzgudL_.js → stateDiagram-v2-FVOUBMTO-DqXB3dNs.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DNzgudL_.js.map → stateDiagram-v2-FVOUBMTO-DqXB3dNs.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-CkyKUY7A.js → timeline-definition-YZTLITO2-BFSqlDfo.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-CkyKUY7A.js.map → timeline-definition-YZTLITO2-BFSqlDfo.js.map} +1 -1
- package/webapp/dist/assets/{treemap-KZPCXAKY-CZd09kF-.js → treemap-KZPCXAKY-sdfq6mHG.js} +5 -5
- package/webapp/dist/assets/{treemap-KZPCXAKY-CZd09kF-.js.map → treemap-KZPCXAKY-sdfq6mHG.js.map} +1 -1
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BxVF5Olo.js → vennDiagram-LZ73GAT5-D7Cioksz.js} +2 -2
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BxVF5Olo.js.map → vennDiagram-LZ73GAT5-D7Cioksz.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BRwRloPc.js → xychartDiagram-JWTSCODW-No65aXqH.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BRwRloPc.js.map → xychartDiagram-JWTSCODW-No65aXqH.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
- 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.
|
|
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
|
-
###
|
|
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
|
-
###
|
|
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**:
|
|
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
|
|
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**:
|
|
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
|
|
83
|
+
- **do_mind / mind_more / change_mind / never_mind**:创建、追加、替换或删除差遣牒章节
|
|
84
84
|
|
|
85
85
|
> 注:`team_memory` 承接团队长期共识;Taskdoc `progress` 承接任务执行期的准实时全队公告,不应混淆。
|
|
86
86
|
|
package/dist/tools/registry.d.ts
CHANGED
|
@@ -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
|
package/dist/tools/team_mgmt.js
CHANGED
|
@@ -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 !==
|
|
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
|
|
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
|
|
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<
|
|
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
|
-
|
|
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
|
|
284
|
+
function taskPackageRelativePathForChangeMindTarget(target) {
|
|
213
285
|
switch (target.kind) {
|
|
214
286
|
case 'top_level':
|
|
215
|
-
return
|
|
287
|
+
return taskPackageFilenameForSection(target.section);
|
|
216
288
|
case 'bearinmind':
|
|
217
|
-
return path.join(
|
|
289
|
+
return path.join('bearinmind', bearInMindFilenameForSection(target.section));
|
|
218
290
|
case 'category':
|
|
219
|
-
return path.join(
|
|
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 {};
|