dominds 1.19.3 → 1.20.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 -0
- package/dist/access-control.js +2 -2
- package/dist/dialog.d.ts +6 -1
- package/dist/dialog.js +13 -4
- package/dist/docs/context-health.md +39 -13
- package/dist/docs/context-health.zh.md +14 -7
- package/dist/docs/idle-reminder-wake.md +227 -0
- package/dist/docs/idle-reminder-wake.zh.md +227 -0
- package/dist/llm/client.d.ts +2 -0
- package/dist/llm/client.js +32 -2
- package/dist/llm/defaults.yaml +51 -10
- package/dist/llm/gen/codex.js +15 -0
- package/dist/llm/gen/failure-classifier.js +22 -1
- package/dist/llm/kernel-driver/drive.js +6 -0
- package/dist/llm/kernel-driver/flow.js +9 -0
- package/dist/llm/kernel-driver/idle-reminder-wake.d.ts +4 -0
- package/dist/llm/kernel-driver/idle-reminder-wake.js +351 -0
- package/dist/llm/kernel-driver/types.d.ts +1 -1
- package/dist/minds/load.js +2 -1
- package/dist/minds/minds-i18n.js +2 -2
- package/dist/minds/system-prompt-parts.js +56 -20
- package/dist/minds/system-prompt.js +10 -10
- package/dist/persistence.js +1 -1
- package/dist/runtime/driver-messages.d.ts +3 -0
- package/dist/runtime/driver-messages.js +91 -8
- package/dist/server/setup-routes.js +5 -5
- package/dist/tool.d.ts +8 -0
- package/dist/tools/builtins.js +4 -2
- package/dist/tools/ctrl.d.ts +2 -0
- package/dist/tools/ctrl.js +255 -68
- package/dist/tools/os.js +198 -0
- 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 +21 -14
- package/dist/tools/prompts/control/en/scenarios.md +12 -4
- package/dist/tools/prompts/control/en/tools.md +45 -5
- 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 +21 -14
- package/dist/tools/prompts/control/zh/scenarios.md +10 -4
- package/dist/tools/prompts/control/zh/tools.md +40 -5
- 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/team_mgmt.js +5 -8
- package/dist/utils/task-package.d.ts +7 -0
- package/dist/utils/task-package.js +65 -28
- package/dist/utils/taskdoc.js +21 -17
- package/package.json +4 -4
- package/webapp/dist/assets/{_basePickBy-Dnh413xT.js → _basePickBy-B7M9Q0Fa.js} +3 -3
- package/webapp/dist/assets/_basePickBy-B7M9Q0Fa.js.map +1 -0
- package/webapp/dist/assets/{_baseUniq-DWzYqpN_.js → _baseUniq-DAeYoL6j.js} +2 -2
- package/webapp/dist/assets/_baseUniq-DAeYoL6j.js.map +1 -0
- package/webapp/dist/assets/{arc-vfBkNCOx.js → arc-Bh4nDbNR.js} +2 -2
- package/webapp/dist/assets/arc-Bh4nDbNR.js.map +1 -0
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-DiUEBXOa.js → architectureDiagram-2XIMDMQ5-CxqmdsIm.js} +26 -8
- package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-CxqmdsIm.js.map +1 -0
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-BqK1KM2m.js → blockDiagram-WCTKOSBZ-CxIWLtpt.js} +187 -170
- package/webapp/dist/assets/blockDiagram-WCTKOSBZ-CxIWLtpt.js.map +1 -0
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-ClHNu1Uo.js → c4Diagram-IC4MRINW-1qErOIgG.js} +4 -4
- package/webapp/dist/assets/c4Diagram-IC4MRINW-1qErOIgG.js.map +1 -0
- package/webapp/dist/assets/{channel-BbWLVc8W.js → channel-DkgZHNUe.js} +2 -2
- package/webapp/dist/assets/channel-DkgZHNUe.js.map +1 -0
- package/webapp/dist/assets/{chunk-4BX2VUAB-CItdSmZH.js → chunk-4BX2VUAB-BmdMbU9v.js} +2 -2
- package/webapp/dist/assets/chunk-4BX2VUAB-BmdMbU9v.js.map +1 -0
- package/webapp/dist/assets/{chunk-55IACEB6-DSCX9WCf.js → chunk-55IACEB6-D6LDTDBy.js} +2 -2
- package/webapp/dist/assets/chunk-55IACEB6-D6LDTDBy.js.map +1 -0
- package/webapp/dist/assets/{chunk-FMBD7UC4-BJ1vT2se.js → chunk-FMBD7UC4-C-BdCe4C.js} +2 -2
- package/webapp/dist/assets/chunk-FMBD7UC4-C-BdCe4C.js.map +1 -0
- package/webapp/dist/assets/{chunk-TZMSLE5B-D2g6Tj7Z.js → chunk-JSJVCQXG-WA_BLIm9.js} +14 -6
- package/webapp/dist/assets/chunk-JSJVCQXG-WA_BLIm9.js.map +1 -0
- package/webapp/dist/assets/{chunk-QN33PNHL-CGyezTSD.js → chunk-KX2RTZJC-CA7sDJO5.js} +2 -2
- package/webapp/dist/assets/chunk-KX2RTZJC-CA7sDJO5.js.map +1 -0
- package/webapp/dist/assets/{chunk-DI55MBZ5-CRMf6XZu.js → chunk-NQ4KR5QH-wlvxalE3.js} +9 -7
- package/webapp/dist/assets/chunk-NQ4KR5QH-wlvxalE3.js.map +1 -0
- package/webapp/dist/assets/{chunk-QZHKN3VN-9xs15j8C.js → chunk-QZHKN3VN-Bo1VMcph.js} +2 -2
- package/webapp/dist/assets/chunk-QZHKN3VN-Bo1VMcph.js.map +1 -0
- package/webapp/dist/assets/{chunk-B4BG7PRW-5CRXFeD9.js → chunk-WL4C6EOR-B-Pk44be.js} +171 -121
- package/webapp/dist/assets/chunk-WL4C6EOR-B-Pk44be.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-2ON5EDUG-BQFGGJNm.js → classDiagram-VBA2DB6C-BqKuyb49.js} +7 -6
- package/webapp/dist/assets/classDiagram-VBA2DB6C-BqKuyb49.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-BQFGGJNm.js → classDiagram-v2-RAHNMMFH-BqKuyb49.js} +7 -6
- package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-BqKuyb49.js.map +1 -0
- package/webapp/dist/assets/{clone-DOfPd4cz.js → clone-BX5z8WVZ.js} +2 -2
- package/webapp/dist/assets/clone-BX5z8WVZ.js.map +1 -0
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BYN-vqm8.js → cose-bilkent-S5V4N54A-B-s11SgN.js} +2 -2
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-B-s11SgN.js.map +1 -0
- package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
- package/webapp/dist/assets/{dagre-6UL2VRFP-ClEaFABE.js → dagre-KLK3FWXG-DmQFV2qK.js} +7 -7
- package/webapp/dist/assets/dagre-KLK3FWXG-DmQFV2qK.js.map +1 -0
- package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
- package/webapp/dist/assets/{diagram-PSM6KHXK-CM4hLE_0.js → diagram-E7M64L7V-QRaBfST8.js} +10 -10
- package/webapp/dist/assets/diagram-E7M64L7V-QRaBfST8.js.map +1 -0
- package/webapp/dist/assets/{diagram-QEK2KX5R-BZjGFX-2.js → diagram-IFDJBPK2-lrWn1Obo.js} +9 -8
- package/webapp/dist/assets/diagram-IFDJBPK2-lrWn1Obo.js.map +1 -0
- package/webapp/dist/assets/{diagram-S2PKOQOG-Bvw01OOG.js → diagram-P4PSJMXO-sTU7Hh-Y.js} +8 -8
- package/webapp/dist/assets/diagram-P4PSJMXO-sTU7Hh-Y.js.map +1 -0
- package/webapp/dist/assets/{erDiagram-Q2GNP2WA-ctHu5zQL.js → erDiagram-INFDFZHY-Cx6jc9Wq.js} +96 -75
- package/webapp/dist/assets/erDiagram-INFDFZHY-Cx6jc9Wq.js.map +1 -0
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-m7ofIhri.js → flowDiagram-PKNHOUZH-DfGI49Dz.js} +98 -81
- package/webapp/dist/assets/flowDiagram-PKNHOUZH-DfGI49Dz.js.map +1 -0
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-D9wS5Veb.js → ganttDiagram-A5KZAMGK-nrcHWWaM.js} +28 -3
- package/webapp/dist/assets/ganttDiagram-A5KZAMGK-nrcHWWaM.js.map +1 -0
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-B86qqJx7.js → gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js} +38 -46
- package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js.map +1 -0
- package/webapp/dist/assets/graph-R5G-y8tB.js +782 -0
- package/webapp/dist/assets/graph-R5G-y8tB.js.map +1 -0
- package/webapp/dist/assets/{index-tinPEZoH.js → index--fy89xGh.js} +1034 -1059
- package/webapp/dist/assets/{index-tinPEZoH.js.map → index--fy89xGh.js.map} +1 -1
- package/webapp/dist/assets/{index-BGdI3lWA.css → index-DZFkLLVz.css} +1 -1
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-DwRPUctP.js → infoDiagram-LFFYTUFH-PIoZHr7s.js} +7 -7
- package/webapp/dist/assets/infoDiagram-LFFYTUFH-PIoZHr7s.js.map +1 -0
- package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-oCM-LYk1.js +966 -0
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-oCM-LYk1.js.map +1 -0
- package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-B91ZO-ec.js → journeyDiagram-4ABVD52K-C2qidjQ5.js} +5 -5
- package/webapp/dist/assets/journeyDiagram-4ABVD52K-C2qidjQ5.js.map +1 -0
- package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-CoogrZ07.js → kanban-definition-K7BYSVSG-Du0TC8WS.js} +5 -3
- package/webapp/dist/assets/kanban-definition-K7BYSVSG-Du0TC8WS.js.map +1 -0
- package/webapp/dist/assets/{layout-BrzQmqFJ.js → layout-VmEo1OEB.js} +5 -5
- package/webapp/dist/assets/layout-VmEo1OEB.js.map +1 -0
- package/webapp/dist/assets/{linear-C6H7K9Zy.js → linear-B662YHAc.js} +2 -2
- package/webapp/dist/assets/linear-B662YHAc.js.map +1 -0
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-UDHZQkNZ.js → mindmap-definition-YRQLILUH-D7arZj95.js} +7 -5
- package/webapp/dist/assets/mindmap-definition-YRQLILUH-D7arZj95.js.map +1 -0
- package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
- package/webapp/dist/assets/{pieDiagram-ADFJNKIX-M81uyQ1J.js → pieDiagram-SKSYHLDU-DvjPP4PA.js} +8 -8
- package/webapp/dist/assets/pieDiagram-SKSYHLDU-DvjPP4PA.js.map +1 -0
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-ClzIh9Gb.js → quadrantDiagram-337W2JSQ-B_JUGMj_.js} +3 -3
- package/webapp/dist/assets/quadrantDiagram-337W2JSQ-B_JUGMj_.js.map +1 -0
- package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-DLK3A-pn.js → requirementDiagram-Z7DCOOCP-DF0mpvE3.js} +16 -6
- package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-DF0mpvE3.js.map +1 -0
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-CYqju8I1.js → sankeyDiagram-WA2Y5GQK-CoXlxv00.js} +2 -2
- package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CoXlxv00.js.map +1 -0
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-2guv6eOd.js → sequenceDiagram-2WXFIKYE-DYqT5Pg7.js} +601 -201
- package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-DYqT5Pg7.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-iujqSp0X.js → stateDiagram-RAJIS63D-D9b1mN8-.js} +9 -9
- package/webapp/dist/assets/stateDiagram-RAJIS63D-D9b1mN8-.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-BxzY81ky.js → stateDiagram-v2-FVOUBMTO-DNzgudL_.js} +5 -5
- package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-DNzgudL_.js.map +1 -0
- package/webapp/dist/assets/{timeline-definition-IT6M3QCI-DjCFSC8d.js → timeline-definition-YZTLITO2-CkyKUY7A.js} +3 -3
- package/webapp/dist/assets/timeline-definition-YZTLITO2-CkyKUY7A.js.map +1 -0
- package/webapp/dist/assets/{treemap-GDKQZRPO-iaBzDWCP.js → treemap-KZPCXAKY-CZd09kF-.js} +37 -24
- package/webapp/dist/assets/treemap-KZPCXAKY-CZd09kF-.js.map +1 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-BxVF5Olo.js +2487 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-BxVF5Olo.js.map +1 -0
- package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-R6Jl1c89.js → xychartDiagram-JWTSCODW-BRwRloPc.js} +4 -4
- package/webapp/dist/assets/xychartDiagram-JWTSCODW-BRwRloPc.js.map +1 -0
- package/webapp/dist/index.html +2 -2
- package/webapp/dist/assets/_basePickBy-Dnh413xT.js.map +0 -1
- package/webapp/dist/assets/_baseUniq-DWzYqpN_.js.map +0 -1
- package/webapp/dist/assets/arc-vfBkNCOx.js.map +0 -1
- package/webapp/dist/assets/architectureDiagram-VXUJARFQ-DiUEBXOa.js.map +0 -1
- package/webapp/dist/assets/blockDiagram-VD42YOAC-BqK1KM2m.js.map +0 -1
- package/webapp/dist/assets/c4Diagram-YG6GDRKO-ClHNu1Uo.js.map +0 -1
- package/webapp/dist/assets/channel-BbWLVc8W.js.map +0 -1
- package/webapp/dist/assets/chunk-4BX2VUAB-CItdSmZH.js.map +0 -1
- package/webapp/dist/assets/chunk-55IACEB6-DSCX9WCf.js.map +0 -1
- package/webapp/dist/assets/chunk-B4BG7PRW-5CRXFeD9.js.map +0 -1
- package/webapp/dist/assets/chunk-DI55MBZ5-CRMf6XZu.js.map +0 -1
- package/webapp/dist/assets/chunk-FMBD7UC4-BJ1vT2se.js.map +0 -1
- package/webapp/dist/assets/chunk-QN33PNHL-CGyezTSD.js.map +0 -1
- package/webapp/dist/assets/chunk-QZHKN3VN-9xs15j8C.js.map +0 -1
- package/webapp/dist/assets/chunk-TZMSLE5B-D2g6Tj7Z.js.map +0 -1
- package/webapp/dist/assets/classDiagram-2ON5EDUG-BQFGGJNm.js.map +0 -1
- package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-BQFGGJNm.js.map +0 -1
- package/webapp/dist/assets/clone-DOfPd4cz.js.map +0 -1
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-BYN-vqm8.js.map +0 -1
- package/webapp/dist/assets/dagre-6UL2VRFP-ClEaFABE.js.map +0 -1
- package/webapp/dist/assets/diagram-PSM6KHXK-CM4hLE_0.js.map +0 -1
- package/webapp/dist/assets/diagram-QEK2KX5R-BZjGFX-2.js.map +0 -1
- package/webapp/dist/assets/diagram-S2PKOQOG-Bvw01OOG.js.map +0 -1
- package/webapp/dist/assets/erDiagram-Q2GNP2WA-ctHu5zQL.js.map +0 -1
- package/webapp/dist/assets/flowDiagram-NV44I4VS-m7ofIhri.js.map +0 -1
- package/webapp/dist/assets/ganttDiagram-JELNMOA3-D9wS5Veb.js.map +0 -1
- package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-B86qqJx7.js.map +0 -1
- package/webapp/dist/assets/graph-u844GGQC.js +0 -425
- package/webapp/dist/assets/graph-u844GGQC.js.map +0 -1
- package/webapp/dist/assets/infoDiagram-HS3SLOUP-DwRPUctP.js.map +0 -1
- package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-B91ZO-ec.js.map +0 -1
- package/webapp/dist/assets/kanban-definition-3W4ZIXB7-CoogrZ07.js.map +0 -1
- package/webapp/dist/assets/layout-BrzQmqFJ.js.map +0 -1
- package/webapp/dist/assets/linear-C6H7K9Zy.js.map +0 -1
- package/webapp/dist/assets/mindmap-definition-VGOIOE7T-UDHZQkNZ.js.map +0 -1
- package/webapp/dist/assets/pieDiagram-ADFJNKIX-M81uyQ1J.js.map +0 -1
- package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-ClzIh9Gb.js.map +0 -1
- package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-DLK3A-pn.js.map +0 -1
- package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-CYqju8I1.js.map +0 -1
- package/webapp/dist/assets/sequenceDiagram-WL72ISMW-2guv6eOd.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-FKZM4ZOC-iujqSp0X.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-BxzY81ky.js.map +0 -1
- package/webapp/dist/assets/timeline-definition-IT6M3QCI-DjCFSC8d.js.map +0 -1
- package/webapp/dist/assets/treemap-GDKQZRPO-iaBzDWCP.js.map +0 -1
- package/webapp/dist/assets/xychartDiagram-PRI3JC2R-R6Jl1c89.js.map +0 -1
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
**适用:**
|
|
46
46
|
|
|
47
47
|
- 添加新的临时工作集条目
|
|
48
|
-
- 若准备 `clear_mind
|
|
48
|
+
- 若准备 `clear_mind`,主线对话先把应由下一程知会的未落文档讨论细节补进差遣牒,再新建接续包提醒项;支线对话直接维护足够详尽的接续包提醒项。若当前程已被系统置于吃紧/告急处置态,支线提醒项长度没有技术限制,先记粗略过桥信息也可以
|
|
49
49
|
|
|
50
50
|
**参数:**
|
|
51
51
|
|
|
@@ -160,7 +160,34 @@ updated_at: <更新时间戳>
|
|
|
160
160
|
- 变更对所有队友可见
|
|
161
161
|
- 约束规则:`constraints` 只写任务特有硬要求,不得重复系统提示/工具文档中的全局规则;一经发现重复,必须删除并告知用户
|
|
162
162
|
|
|
163
|
-
### 6.
|
|
163
|
+
### 6. mind_more
|
|
164
|
+
|
|
165
|
+
向差遣牒章节追加条目;默认追加到 `progress`,用于降低整章替换压力。
|
|
166
|
+
|
|
167
|
+
**参数:**
|
|
168
|
+
|
|
169
|
+
- `items`(必需):要追加的条目数组,每项必须是非空字符串
|
|
170
|
+
- `sep`(可选):条目之间以及原内容与新增内容之间的分隔符,默认 `\n`
|
|
171
|
+
- `selector`(可选):章节选择器,默认 `progress`;可用 `goals` / `constraints` / `progress`
|
|
172
|
+
- `category`(可选):额外章节目录;与 `selector` 组合定位 `<category>/<selector>.md`
|
|
173
|
+
|
|
174
|
+
**示例:**
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
mind_more({
|
|
178
|
+
items: ['- 下一步:复核验证结果(详见 <文档路径>#<章节>)', '- 阻塞:等待 API 验收口径确认'],
|
|
179
|
+
});
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**特点:**
|
|
183
|
+
|
|
184
|
+
- 只追加,不会自动去重、改写或压缩旧内容
|
|
185
|
+
- 适合给 `progress` 补一两条当前仍有效的状态、决策、下一步或阻塞
|
|
186
|
+
- 不适合把每一步调查过程、长日志、完整方案或验收记录当流水账追加进去;这些细节应写入 rtws 正式文档,差遣牒只写摘要和文档定位 pointer
|
|
187
|
+
- 若需要删除陈旧项、重排结构或压缩公告牌,仍使用 `change_mind` 做整章替换
|
|
188
|
+
- 当同一主题已经有多条阶段记录时,优先 `change_mind` 合并成当前仍有效的简明公告,而不是继续 `mind_more`
|
|
189
|
+
|
|
190
|
+
### 7. recall_taskdoc
|
|
164
191
|
|
|
165
192
|
读取差遣牒章节。
|
|
166
193
|
|
|
@@ -228,11 +255,19 @@ update_reminder({
|
|
|
228
255
|
|
|
229
256
|
### 更新差遣牒进度
|
|
230
257
|
|
|
258
|
+
```typescript
|
|
259
|
+
mind_more({
|
|
260
|
+
items: ['- 下一步:补齐 Taskdoc `progress` 的公告牌属性说明(详见 <文档路径>#<章节>)'],
|
|
261
|
+
});
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### 整章替换差遣牒进度
|
|
265
|
+
|
|
231
266
|
```typescript
|
|
232
267
|
change_mind({
|
|
233
268
|
selector: 'progress',
|
|
234
269
|
content:
|
|
235
|
-
'## Progress\n\n### 当前有效状态\n- 手册边界方案已确定:角色级资产 / 个人长期经验 / Taskdoc-progress / reminders
|
|
270
|
+
'## Progress\n\n### 当前有效状态\n- 手册边界方案已确定:角色级资产 / 个人长期经验 / Taskdoc-progress / reminders 分流;细节见 <文档路径>#<章节>\n\n### 已生效决策\n- `persona / knowhow / pitfalls` 不承接成员日常经验\n- `personal_memory` 只承接成员自己的长期可复用经验\n\n### 下一步\n- 补齐 Taskdoc `progress` 的公告牌属性说明\n\n### 仍成立阻塞\n- 无',
|
|
236
271
|
});
|
|
237
272
|
```
|
|
238
273
|
|
|
@@ -272,6 +307,6 @@ message: <错误消息>
|
|
|
272
307
|
|
|
273
308
|
- 默认提醒项应保持短、新、能直接指导下一步,常见 1–3 条
|
|
274
309
|
- 若用于接续包,默认优先结构化内容:下一步行动、关键定位、运行/验证、容易丢的临时细节
|
|
275
|
-
-
|
|
276
|
-
-
|
|
310
|
+
- 若已吃紧/告急:主线对话先把尚未落实到文档、且下一程需要知会的讨论细节写入差遣牒合适章节,再保留必要的接续包提醒项;支线对话不要维护差遣牒,也不要整理差遣牒更新提案,直接维护足够详尽的接续包提醒项,长度没有技术限制;多条粗略提醒项也可以,系统真正开启新一程后第一步再收敛整理
|
|
311
|
+
- 接续包只保留差遣牒仍未覆盖的细节;不要重复团队共享状态。要向全队同步“现在到哪了 / 哪些决策已生效 / 下一步是什么 / 哪些阻塞仍成立”,请写回 Taskdoc `progress`
|
|
277
312
|
- 不要把长日志、大段 tool output、原始材料直接塞进提醒项
|
|
@@ -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
|
-
- **change_mind**:
|
|
93
|
+
- **mind_more / change_mind**: Append to or replace Taskdoc (goals/constraints/progress)
|
|
94
94
|
|
|
95
95
|
## Limitations and Notes
|
|
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
|
-
- **change_mind**:
|
|
83
|
+
- **mind_more / change_mind**: Append to or replace Taskdoc (goals/constraints/progress)
|
|
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
|
-
- **change_mind
|
|
83
|
+
- **mind_more / change_mind**:追加或替换差遣牒(goals/constraints/progress)
|
|
84
84
|
|
|
85
85
|
> 注:`team_memory` 承接团队长期共识;Taskdoc `progress` 承接任务执行期的准实时全队公告,不应混淆。
|
|
86
86
|
|
package/dist/tools/team_mgmt.js
CHANGED
|
@@ -647,8 +647,7 @@ function listModelIds(models, maxModels) {
|
|
|
647
647
|
return (0, output_limit_1.truncateInlineText)(`${head.join(', ')}${ids.length > head.length ? ', ...' : ''}`, TEAM_MGMT_MODELS_TEXT_CHAR_LIMIT);
|
|
648
648
|
}
|
|
649
649
|
async function loadBuiltinLlmProviders() {
|
|
650
|
-
const
|
|
651
|
-
const raw = await promises_1.default.readFile(defaultsPath, 'utf-8');
|
|
650
|
+
const raw = await (0, client_1.readBuiltinDefaultsYamlRaw)();
|
|
652
651
|
const parsed = yaml_1.default.parse(raw);
|
|
653
652
|
if (typeof parsed !== 'object' || parsed === null) {
|
|
654
653
|
throw new Error('Invalid defaults.yaml');
|
|
@@ -2910,8 +2909,7 @@ function isWindowsRuntimeHost() {
|
|
|
2910
2909
|
return process.platform === 'win32';
|
|
2911
2910
|
}
|
|
2912
2911
|
async function loadBuiltinLlmDefaultsText() {
|
|
2913
|
-
const
|
|
2914
|
-
const raw = await promises_1.default.readFile(defaultsPath, 'utf-8');
|
|
2912
|
+
const raw = await (0, client_1.readBuiltinDefaultsYamlRaw)();
|
|
2915
2913
|
const parsed = yaml_1.default.parse(raw);
|
|
2916
2914
|
if (typeof parsed !== 'object' || parsed === null) {
|
|
2917
2915
|
return 'Invalid defaults.yaml';
|
|
@@ -2936,8 +2934,7 @@ async function loadBuiltinLlmDefaultsText() {
|
|
|
2936
2934
|
return lines.join('\n');
|
|
2937
2935
|
}
|
|
2938
2936
|
async function loadBuiltinLlmModelParamOptionsText() {
|
|
2939
|
-
const
|
|
2940
|
-
const raw = await promises_1.default.readFile(defaultsPath, 'utf-8');
|
|
2937
|
+
const raw = await (0, client_1.readBuiltinDefaultsYamlRaw)();
|
|
2941
2938
|
const parsed = yaml_1.default.parse(raw);
|
|
2942
2939
|
if (typeof parsed !== 'object' || parsed === null) {
|
|
2943
2940
|
return 'Invalid defaults.yaml';
|
|
@@ -3224,7 +3221,7 @@ function renderPermissionsManual(language) {
|
|
|
3224
3221
|
'模式支持 `*` 和 `**`,按“目录范围”语义匹配(按目录/路径前缀范围来理解)。',
|
|
3225
3222
|
'示例:`dominds/**` 会匹配 `dominds/README.md`、`dominds/main/server.ts`、`dominds/webapp/src/...` 等路径。',
|
|
3226
3223
|
'示例:`.minds/**` 会匹配 `.minds/team.yaml`、`.minds/team/<id>/persona.zh.md` 等;常用于限制普通成员访问 minds 资产。',
|
|
3227
|
-
'`*.tsk/` 是封装差遣牒:只能用函数工具 `change_mind` 维护。任何通用文件工具都无法访问该目录树(硬编码无条件拒绝)。',
|
|
3224
|
+
'`*.tsk/` 是封装差遣牒:只能用函数工具 `mind_more` / `change_mind` 维护。任何通用文件工具都无法访问该目录树(硬编码无条件拒绝)。',
|
|
3228
3225
|
'`.minds/**` 是 rtws(运行时工作区)的“团队配置/记忆/资产”目录:任何通用文件工具都无法访问(硬编码无条件拒绝)。只有专用的 `.minds/` 工具集(例如 `team_mgmt`)可访问它。',
|
|
3229
3226
|
'在当前内建模型中,`.minds/team/**`、`.minds/team.yaml`、`.minds/skills/**`、`.minds/priming/**` 等团队资产目录,只有持有 `team_mgmt` 的成员才应修改。',
|
|
3230
3227
|
'`.minds/team/<id>/*` 的“角色归属对象”只表示它描述哪个角色,不构成任何额外写权限。未持有 `team_mgmt` 的成员,即使只是想更新“自己的” persona/knowhow/pitfalls,也应通过回贴建议内容,由具备权限的团队管理者代写。',
|
|
@@ -3252,7 +3249,7 @@ function renderPermissionsManual(language) {
|
|
|
3252
3249
|
'Patterns support `*` and `**` with directory-scope semantics (think directory/path-range matching).',
|
|
3253
3250
|
'Example: `dominds/**` matches `dominds/README.md`, `dominds/main/server.ts`, `dominds/webapp/src/...`, etc.',
|
|
3254
3251
|
'Example: `.minds/**` matches `.minds/team.yaml` and `.minds/team/<id>/persona.*.md`; commonly used to restrict normal members from minds assets.',
|
|
3255
|
-
'`*.tsk/` is an encapsulated Taskdoc: it must be maintained via
|
|
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.',
|
|
3256
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.',
|
|
3257
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`.',
|
|
3258
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.',
|
|
@@ -122,6 +122,13 @@ export declare function updateTaskPackageByChangeMindTarget(params: {
|
|
|
122
122
|
content: string;
|
|
123
123
|
updatedBy?: string;
|
|
124
124
|
}): Promise<void>;
|
|
125
|
+
export declare function appendTaskPackageByChangeMindTarget(params: {
|
|
126
|
+
taskPackageDirFullPath: string;
|
|
127
|
+
target: TaskPackageChangeMindTarget;
|
|
128
|
+
content: string;
|
|
129
|
+
sep: string;
|
|
130
|
+
updatedBy?: string;
|
|
131
|
+
}): Promise<void>;
|
|
125
132
|
export declare function ensureTaskPackage(taskPackageDirFullPath: string, _updatedBy?: string): Promise<void>;
|
|
126
133
|
export declare function readTaskPackageSections(taskPackageDirFullPath: string): Promise<TaskPackageSectionsState>;
|
|
127
134
|
export declare function formatEffectiveTaskDocFromSections(language: LanguageCode, sections: TaskPackageSectionsState, bearInMind?: TaskPackageBearInMindState): string;
|
|
@@ -53,6 +53,7 @@ exports.parseTaskPackageChangeMindTarget = parseTaskPackageChangeMindTarget;
|
|
|
53
53
|
exports.taskPackageFilenameForSection = taskPackageFilenameForSection;
|
|
54
54
|
exports.bearInMindFilenameForSection = bearInMindFilenameForSection;
|
|
55
55
|
exports.updateTaskPackageByChangeMindTarget = updateTaskPackageByChangeMindTarget;
|
|
56
|
+
exports.appendTaskPackageByChangeMindTarget = appendTaskPackageByChangeMindTarget;
|
|
56
57
|
exports.ensureTaskPackage = ensureTaskPackage;
|
|
57
58
|
exports.readTaskPackageSections = readTaskPackageSections;
|
|
58
59
|
exports.formatEffectiveTaskDocFromSections = formatEffectiveTaskDocFromSections;
|
|
@@ -186,36 +187,67 @@ function bearInMindFilenameForSection(section) {
|
|
|
186
187
|
async function updateTaskPackageByChangeMindTarget(params) {
|
|
187
188
|
const { taskPackageDirFullPath, target, content, updatedBy } = params;
|
|
188
189
|
await ensureTaskPackage(taskPackageDirFullPath, updatedBy);
|
|
190
|
+
const filePath = taskPackageFilePathForChangeMindTarget(taskPackageDirFullPath, target);
|
|
191
|
+
await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
|
|
192
|
+
await writeMarkdownFileWithCanonicalEnding(filePath, content);
|
|
193
|
+
}
|
|
194
|
+
async function appendTaskPackageByChangeMindTarget(params) {
|
|
195
|
+
const { taskPackageDirFullPath, target, content, sep, updatedBy } = params;
|
|
196
|
+
await ensureTaskPackage(taskPackageDirFullPath, updatedBy);
|
|
197
|
+
const filePath = taskPackageFilePathForChangeMindTarget(taskPackageDirFullPath, target);
|
|
198
|
+
await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
|
|
199
|
+
const current = await readTextFileIfPresent(filePath);
|
|
200
|
+
const next = current === null || current.trim() === '' ? content : joinForAppend(current, content, sep);
|
|
201
|
+
await writeMarkdownFileWithCanonicalEnding(filePath, next);
|
|
202
|
+
}
|
|
203
|
+
async function writeMarkdownFileWithCanonicalEnding(filePath, content) {
|
|
204
|
+
await fs.promises.writeFile(filePath, withCanonicalMarkdownFileEnding(content), 'utf8');
|
|
205
|
+
}
|
|
206
|
+
function withCanonicalMarkdownFileEnding(content) {
|
|
207
|
+
const stripped = stripTrailingMarkdownFileNewlines(content);
|
|
208
|
+
if (stripped === '')
|
|
209
|
+
return '';
|
|
210
|
+
return `${stripped}\n`;
|
|
211
|
+
}
|
|
212
|
+
function taskPackageFilePathForChangeMindTarget(taskPackageDirFullPath, target) {
|
|
189
213
|
switch (target.kind) {
|
|
190
|
-
case 'top_level':
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
});
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
case 'bearinmind': {
|
|
200
|
-
const dir = path.join(taskPackageDirFullPath, 'bearinmind');
|
|
201
|
-
await fs.promises.mkdir(dir, { recursive: true });
|
|
202
|
-
const filePath = path.join(dir, bearInMindFilenameForSection(target.section));
|
|
203
|
-
await fs.promises.writeFile(filePath, content, 'utf8');
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
case 'category': {
|
|
207
|
-
const dir = path.join(taskPackageDirFullPath, target.category);
|
|
208
|
-
await fs.promises.mkdir(dir, { recursive: true });
|
|
209
|
-
const filePath = path.join(dir, `${target.selector}.md`);
|
|
210
|
-
await fs.promises.writeFile(filePath, content, 'utf8');
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
214
|
+
case 'top_level':
|
|
215
|
+
return path.join(taskPackageDirFullPath, taskPackageFilenameForSection(target.section));
|
|
216
|
+
case 'bearinmind':
|
|
217
|
+
return path.join(taskPackageDirFullPath, 'bearinmind', bearInMindFilenameForSection(target.section));
|
|
218
|
+
case 'category':
|
|
219
|
+
return path.join(taskPackageDirFullPath, target.category, `${target.selector}.md`);
|
|
213
220
|
default: {
|
|
214
221
|
const _exhaustive = target;
|
|
215
222
|
return _exhaustive;
|
|
216
223
|
}
|
|
217
224
|
}
|
|
218
225
|
}
|
|
226
|
+
async function readTextFileIfPresent(filePath) {
|
|
227
|
+
try {
|
|
228
|
+
return await fs.promises.readFile(filePath, 'utf8');
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
if (typeof err === 'object' &&
|
|
232
|
+
err !== null &&
|
|
233
|
+
'code' in err &&
|
|
234
|
+
err.code === 'ENOENT') {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
throw err;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
function joinForAppend(current, content, sep) {
|
|
241
|
+
if (current.endsWith(sep))
|
|
242
|
+
return `${current}${content}`;
|
|
243
|
+
for (let prefixLength = sep.length - 1; prefixLength > 0; prefixLength -= 1) {
|
|
244
|
+
const prefix = sep.slice(0, prefixLength);
|
|
245
|
+
if (current.endsWith(prefix)) {
|
|
246
|
+
return `${current}${sep.slice(prefixLength)}${content}`;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return `${current}${sep}${content}`;
|
|
250
|
+
}
|
|
219
251
|
async function fileExists(fullPath) {
|
|
220
252
|
try {
|
|
221
253
|
await fs.promises.stat(fullPath);
|
|
@@ -248,18 +280,23 @@ async function readTaskPackageSections(taskPackageDirFullPath) {
|
|
|
248
280
|
return { goals, constraints, progress };
|
|
249
281
|
}
|
|
250
282
|
function formatSectionBodyI18n(state) {
|
|
251
|
-
// Injection must be deterministic and treat section bodies as opaque markdown
|
|
283
|
+
// Injection must be deterministic and treat section bodies as opaque markdown,
|
|
284
|
+
// except for file-final newlines that only encode on-disk formatting.
|
|
252
285
|
// If a required file is missing, inject an empty body (status should be shown elsewhere).
|
|
253
286
|
if (state.kind === 'present')
|
|
254
|
-
return state.content;
|
|
287
|
+
return stripTrailingMarkdownFileNewlines(state.content);
|
|
255
288
|
return '';
|
|
256
289
|
}
|
|
257
290
|
function formatBearInMindBody(state) {
|
|
258
291
|
if (state.kind !== 'present')
|
|
259
292
|
return null;
|
|
260
|
-
|
|
293
|
+
const content = stripTrailingMarkdownFileNewlines(state.content);
|
|
294
|
+
if (content.trim() === '')
|
|
261
295
|
return null;
|
|
262
|
-
return
|
|
296
|
+
return content;
|
|
297
|
+
}
|
|
298
|
+
function stripTrailingMarkdownFileNewlines(content) {
|
|
299
|
+
return content.replace(/(?:\r\n?|\n)+$/u, '');
|
|
263
300
|
}
|
|
264
301
|
function formatEffectiveTaskDocFromSections(language, sections, bearInMind) {
|
|
265
302
|
// Deterministic framing only; section bodies are treated as opaque markdown.
|
|
@@ -447,7 +484,7 @@ async function updateTaskPackageSection(params) {
|
|
|
447
484
|
const { taskPackageDirFullPath, section, content, updatedBy } = params;
|
|
448
485
|
await ensureTaskPackage(taskPackageDirFullPath, updatedBy);
|
|
449
486
|
const filePath = path.join(taskPackageDirFullPath, taskPackageFilenameForSection(section));
|
|
450
|
-
await
|
|
487
|
+
await writeMarkdownFileWithCanonicalEnding(filePath, content);
|
|
451
488
|
}
|
|
452
489
|
async function readTaskPackageExtraSectionsIndex(taskPackageDirFullPath) {
|
|
453
490
|
const maxEntries = 64;
|
package/dist/utils/taskdoc.js
CHANGED
|
@@ -44,6 +44,10 @@ const path = __importStar(require("path"));
|
|
|
44
44
|
const dialog_1 = require("../dialog");
|
|
45
45
|
const work_language_1 = require("../runtime/work-language");
|
|
46
46
|
const task_package_1 = require("./task-package");
|
|
47
|
+
function isPathWithinDirectory(childPath, parentDir) {
|
|
48
|
+
const relative = path.relative(parentDir, childPath);
|
|
49
|
+
return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
|
|
50
|
+
}
|
|
47
51
|
/**
|
|
48
52
|
* Format Taskdoc content for display in the LLM context.
|
|
49
53
|
* Taskdocs are encapsulated `*.tsk/` directories.
|
|
@@ -67,7 +71,7 @@ async function formatTaskDocContent(dlg) {
|
|
|
67
71
|
const workspaceRoot = path.resolve(process.cwd());
|
|
68
72
|
const fullPath = path.resolve(workspaceRoot, taskDocPath);
|
|
69
73
|
// Security check - ensure path is within rtws (runtime workspace)
|
|
70
|
-
if (!fullPath
|
|
74
|
+
if (!isPathWithinDirectory(fullPath, workspaceRoot)) {
|
|
71
75
|
const head = language === 'zh' ? `**差遣牒:** \`${taskDocPath}\`` : `**Taskdoc:** \`${taskDocPath}\``;
|
|
72
76
|
const err = language === 'zh'
|
|
73
77
|
? '❌ **错误:** 路径必须位于 rtws(运行时工作区)内'
|
|
@@ -195,7 +199,7 @@ If you provided a regular file path (e.g. a \`.md\`), that is unexpected. Please
|
|
|
195
199
|
const entries = [];
|
|
196
200
|
for (const cat of extra.categories) {
|
|
197
201
|
for (const selector of cat.selectors) {
|
|
198
|
-
entries.push(`- \`${cat.category}/${selector}.md\`(读:\`recall_taskdoc({\"category\":\"${cat.category}\",\"selector\":\"${selector}\"})
|
|
202
|
+
entries.push(`- \`${cat.category}/${selector}.md\`(读:\`recall_taskdoc({\"category\":\"${cat.category}\",\"selector\":\"${selector}\"})\`;追加:\`mind_more({\"category\":\"${cat.category}\",\"selector\":\"${selector}\",\"items\":[\"...\"]})\`;替换:\`change_mind({\"category\":\"${cat.category}\",\"selector\":\"${selector}\",\"content\":\"...\"})\`)`);
|
|
199
203
|
}
|
|
200
204
|
}
|
|
201
205
|
const header = `**额外章节索引(不会自动注入;需要时用 \`recall_taskdoc\` 显式读取):**`;
|
|
@@ -215,7 +219,7 @@ If you provided a regular file path (e.g. a \`.md\`), that is unexpected. Please
|
|
|
215
219
|
const entries = [];
|
|
216
220
|
for (const cat of extra.categories) {
|
|
217
221
|
for (const selector of cat.selectors) {
|
|
218
|
-
entries.push(`- \`${cat.category}/${selector}.md\` (read: \`recall_taskdoc({\"category\":\"${cat.category}\",\"selector\":\"${selector}\"})\`;
|
|
222
|
+
entries.push(`- \`${cat.category}/${selector}.md\` (read: \`recall_taskdoc({\"category\":\"${cat.category}\",\"selector\":\"${selector}\"})\`; append: \`mind_more({\"category\":\"${cat.category}\",\"selector\":\"${selector}\",\"items\":[\"...\"]})\`; replace: \`change_mind({\"category\":\"${cat.category}\",\"selector\":\"${selector}\",\"content\":\"...\"})\`)`);
|
|
219
223
|
}
|
|
220
224
|
}
|
|
221
225
|
const header = `**Extra sections index (NOT auto-injected; use \`recall_taskdoc\` when needed):**`;
|
|
@@ -236,14 +240,14 @@ If you provided a regular file path (e.g. a \`.md\`), that is unexpected. Please
|
|
|
236
240
|
.join(', ')}`
|
|
237
241
|
: '';
|
|
238
242
|
const maintenanceLine = isSideDialog
|
|
239
|
-
? `- 支线对话中不允许 \`change_mind\`:需要更新时请诉请差遣牒维护人 @${taskdocMaintainerId}
|
|
240
|
-
: `-
|
|
243
|
+
? `- 支线对话中不允许 \`mind_more\` / \`change_mind\`:需要更新时请诉请差遣牒维护人 @${taskdocMaintainerId} 执行更新,并提供要追加的条目或已合并好的“分段全文替换稿”(禁止覆盖/抹掉他人条目)。`
|
|
244
|
+
: `- 维护方式:少量新增条目优先用 \`mind_more({\"items\":[\"...\"]})\` 追加到 \`progress\`(也可指定 selector/category);需要删除陈旧项、重排或压缩时,用 \`change_mind\` 指定分段做整章替换。`;
|
|
241
245
|
return [
|
|
242
246
|
`**差遣牒结构(封装差遣牒 \`*.tsk/\`):**`,
|
|
243
247
|
`- 我们的差遣牒是一个 \`*.tsk/\` 目录:顶层 3 个分段(\`goals\` / \`constraints\` / \`progress\`)一定会自动注入;\`bearinmind/\`(固定白名单)可选自动注入;其他章节不会自动注入,仅以“目录索引”形式提示并需用 \`recall_taskdoc\` 显式读取。`,
|
|
244
248
|
`- 全队共享:三个分段对所有队友与支线对话可见。更新时禁止覆盖/抹掉他人条目;建议为自己维护的条目标注责任人(如 \`- [owner:@<id>] ...\`)。`,
|
|
245
249
|
`- 章节语义约定:\`goals\` / \`constraints\` 是任务契约;\`progress\` 是全队共享、准实时、可扫读的任务公告牌,用于当前有效状态、关键决策、下一步与仍成立阻塞,不是“我当前在做什么”的个人笔记。`,
|
|
246
|
-
`- 差遣牒维护人(负责执行 \`change_mind\`):@${taskdocMaintainerId}`,
|
|
250
|
+
`- 差遣牒维护人(负责执行 \`mind_more\` / \`change_mind\`):@${taskdocMaintainerId}`,
|
|
247
251
|
`- 重要:差遣牒内容已被系统以内联形式注入到上下文中(本程生成视角下即为最新)。请直接基于上下文里的差遣牒回顾与决策,不要试图用通用文件工具读取 \`*.tsk/\` 下的文件(会被拒绝)。`,
|
|
248
252
|
maintenanceLine,
|
|
249
253
|
``,
|
|
@@ -264,8 +268,8 @@ If you provided a regular file path (e.g. a \`.md\`), that is unexpected. Please
|
|
|
264
268
|
].join('\n');
|
|
265
269
|
}
|
|
266
270
|
const maintenanceLine = isSideDialog
|
|
267
|
-
? `- Side Dialogs cannot call \`change_mind\`: ask the Taskdoc maintainer @${taskdocMaintainerId} to apply updates, and provide a fully merged full-section replacement draft (do not overwrite/delete other contributors).`
|
|
268
|
-
: `- Maintenance:
|
|
271
|
+
? `- Side Dialogs cannot call \`mind_more\` / \`change_mind\`: ask the Taskdoc maintainer @${taskdocMaintainerId} to apply updates, and provide entries to append or a fully merged full-section replacement draft (do not overwrite/delete other contributors).`
|
|
272
|
+
: `- Maintenance: for small additions, prefer \`mind_more({\"items\":[\"...\"]})\` to append to \`progress\` (selector/category may be specified); when stale entries must be removed, reordered, or compressed, use \`change_mind\` for a full-section replacement.`;
|
|
269
273
|
const bearEn = bearInMindStatus === 'absent'
|
|
270
274
|
? 'absent'
|
|
271
275
|
: bearInMindStatus === 'invalid'
|
|
@@ -281,7 +285,7 @@ If you provided a regular file path (e.g. a \`.md\`), that is unexpected. Please
|
|
|
281
285
|
`- Our Taskdoc is a \`*.tsk/\` directory: it always auto-injects the 3 top-level sections (\`goals\` / \`constraints\` / \`progress\`); it may auto-inject \`bearinmind/\` (fixed whitelist); any other sections are NOT auto-injected and must be read via \`recall_taskdoc\` (only an index is shown).`,
|
|
282
286
|
`- Team-shared: all 3 sections are visible to teammates and sideDialogs. Do not overwrite/delete other contributors; add an owner marker for entries you maintain (e.g. \`- [owner:@<id>] ...\`).`,
|
|
283
287
|
`- Section semantics: \`goals\` / \`constraints\` are the task contract; \`progress\` is the team-shared, quasi-real-time, scannable task bulletin board for current effective state, key decisions, next steps, and still-active blockers, not a personal “what I'm doing now” notebook.`,
|
|
284
|
-
`- Taskdoc maintainer (runs \`change_mind\`): @${taskdocMaintainerId}`,
|
|
288
|
+
`- Taskdoc maintainer (runs \`mind_more\` / \`change_mind\`): @${taskdocMaintainerId}`,
|
|
285
289
|
`- Important: Taskdoc content is injected inline into the context (the latest as of this generation). Review the injected Taskdoc; do not try to read files under \`*.tsk/\` via general file tools (they will be rejected).`,
|
|
286
290
|
maintenanceLine,
|
|
287
291
|
``,
|
|
@@ -307,8 +311,8 @@ If you provided a regular file path (e.g. a \`.md\`), that is unexpected. Please
|
|
|
307
311
|
if (bytes > maxSize) {
|
|
308
312
|
if (language === 'zh') {
|
|
309
313
|
const howToUpdate = isSideDialog
|
|
310
|
-
? `⚠️ **注意:** 差遣牒是封装的。不要用文件工具去读/写/列目录 \`*.tsk/\` 下的任何路径。\n支线对话中不允许 \`change_mind\`:请诉请差遣牒维护人 @${taskdocMaintainerId}
|
|
311
|
-
: `⚠️ **注意:** 差遣牒是封装的。不要用文件工具去读/写/列目录 \`*.tsk/\` 下的任何路径。\n请在当前对话中用函数工具 \`change_mind\`
|
|
314
|
+
? `⚠️ **注意:** 差遣牒是封装的。不要用文件工具去读/写/列目录 \`*.tsk/\` 下的任何路径。\n支线对话中不允许 \`mind_more\` / \`change_mind\`:请诉请差遣牒维护人 @${taskdocMaintainerId} 执行更新,并提供要追加的条目或合并好的“分段全文替换稿”(禁止覆盖/抹掉他人条目)。`
|
|
315
|
+
: `⚠️ **注意:** 差遣牒是封装的。不要用文件工具去读/写/列目录 \`*.tsk/\` 下的任何路径。\n请在当前对话中用函数工具 \`mind_more\` 追加少量条目,或用 \`change_mind\` 做整章替换;禁止覆盖/抹掉他人条目。`;
|
|
312
316
|
return {
|
|
313
317
|
type: 'environment_msg',
|
|
314
318
|
role: 'user',
|
|
@@ -322,8 +326,8 @@ ${howToUpdate}`,
|
|
|
322
326
|
};
|
|
323
327
|
}
|
|
324
328
|
const howToUpdate = isSideDialog
|
|
325
|
-
? `⚠️ **Note:** Taskdocs are encapsulated. Do not use file tools to read/write/list anything under \`*.tsk/\`.\nSide Dialogs cannot call \`change_mind\`; ask the Taskdoc maintainer @${taskdocMaintainerId} with a
|
|
326
|
-
: `⚠️ **Note:** Taskdocs are encapsulated. Do not use file tools to read/write/list anything under \`*.tsk/\`.\nIn this dialog, use
|
|
329
|
+
? `⚠️ **Note:** Taskdocs are encapsulated. Do not use file tools to read/write/list anything under \`*.tsk/\`.\nSide Dialogs cannot call \`mind_more\` / \`change_mind\`; ask the Taskdoc maintainer @${taskdocMaintainerId} with entries to append or a merged full-section replacement draft (do not overwrite/delete other contributors).`
|
|
330
|
+
: `⚠️ **Note:** Taskdocs are encapsulated. Do not use file tools to read/write/list anything under \`*.tsk/\`.\nIn this dialog, use \`mind_more\` for small append-only updates, or \`change_mind\` for full-section replacements; do not overwrite/delete other contributors.`;
|
|
327
331
|
return {
|
|
328
332
|
type: 'environment_msg',
|
|
329
333
|
role: 'user',
|
|
@@ -338,8 +342,8 @@ ${howToUpdate}`,
|
|
|
338
342
|
}
|
|
339
343
|
if (language === 'zh') {
|
|
340
344
|
const footerLine = isSideDialog
|
|
341
|
-
? `*支线对话中不允许 \`change_mind\`:请诉请差遣牒维护人 @${taskdocMaintainerId}
|
|
342
|
-
:
|
|
345
|
+
? `*支线对话中不允许 \`mind_more\` / \`change_mind\`:请诉请差遣牒维护人 @${taskdocMaintainerId} 执行更新,并提供要追加的条目或合并好的“分段全文替换稿”(禁止覆盖/抹掉他人条目)。*`
|
|
346
|
+
: `*在当前对话中用 \`mind_more\` 追加少量条目,或用 \`change_mind\` 替换整段;更新时禁止覆盖他人条目。*`;
|
|
343
347
|
return {
|
|
344
348
|
type: 'environment_msg',
|
|
345
349
|
role: 'user',
|
|
@@ -361,8 +365,8 @@ ${footerLine}
|
|
|
361
365
|
};
|
|
362
366
|
}
|
|
363
367
|
const footerLine = isSideDialog
|
|
364
|
-
? `*Side Dialogs cannot call \`change_mind\`; ask the Taskdoc maintainer @${taskdocMaintainerId} with a
|
|
365
|
-
: `*In this dialog, use
|
|
368
|
+
? `*Side Dialogs cannot call \`mind_more\` / \`change_mind\`; ask the Taskdoc maintainer @${taskdocMaintainerId} with entries to append or a merged full-section replacement draft (do not overwrite/delete other contributors).*`
|
|
369
|
+
: `*In this dialog, use \`mind_more\` for small append-only updates, or \`change_mind\` for full-section replacements; do not overwrite other contributors.*`;
|
|
366
370
|
return {
|
|
367
371
|
type: 'environment_msg',
|
|
368
372
|
role: 'user',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dominds",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.20.2",
|
|
4
4
|
"description": "Dominds CLI and aggregation shell for the LongRun AI kernel/runtime packages.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"publishConfig": {
|
|
@@ -52,9 +52,9 @@
|
|
|
52
52
|
"ws": "^8.19.0",
|
|
53
53
|
"yaml": "^2.8.2",
|
|
54
54
|
"zod": "^4.3.6",
|
|
55
|
-
"@longrun-ai/kernel": "1.11.
|
|
56
|
-
"@longrun-ai/shell": "1.11.
|
|
57
|
-
"@longrun-ai/codex-auth": "0.
|
|
55
|
+
"@longrun-ai/kernel": "1.11.3",
|
|
56
|
+
"@longrun-ai/shell": "1.11.3",
|
|
57
|
+
"@longrun-ai/codex-auth": "0.13.0"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@types/node": "^25.3.5",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { e as isSymbol, c as baseFlatten, g as baseIteratee, k as keys, h as baseFindIndex, j as baseEach, l as arrayMap, m as hasPath, n as castPath, t as toKey, o as baseGet } from "./_baseUniq-
|
|
2
|
-
import {
|
|
1
|
+
import { e as isSymbol, c as baseFlatten, g as baseIteratee, k as keys, h as baseFindIndex, j as baseEach, l as arrayMap, m as hasPath, n as castPath, t as toKey, o as baseGet } from "./_baseUniq-DAeYoL6j.js";
|
|
2
|
+
import { aU as isObject, aC as baseRest, aV as isIterateeCall, aW as keysIn, aX as eq, aY as isArrayLike, aZ as isArray, a_ as identity, a$ as isIndex, b0 as assignValue } from "./index--fy89xGh.js";
|
|
3
3
|
var reWhitespace = /\s/;
|
|
4
4
|
function trimmedEndIndex(string) {
|
|
5
5
|
var index = string.length;
|
|
@@ -193,4 +193,4 @@ export {
|
|
|
193
193
|
map as m,
|
|
194
194
|
toFinite as t
|
|
195
195
|
};
|
|
196
|
-
//# sourceMappingURL=_basePickBy-
|
|
196
|
+
//# sourceMappingURL=_basePickBy-B7M9Q0Fa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_basePickBy-B7M9Q0Fa.js","sources":["../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_trimmedEndIndex.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseTrim.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toNumber.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toFinite.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toInteger.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/flatten.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/defaults.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/last.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_createFind.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/findIndex.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/find.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseMap.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/map.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseHas.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/has.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseLt.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseExtremum.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/min.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseSet.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_basePickBy.js"],"sourcesContent":["/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import baseRest from './_baseRest.js';\nimport eq from './eq.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keysIn from './keysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nexport default defaults;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import baseIteratee from './_baseIteratee.js';\nimport isArrayLike from './isArrayLike.js';\nimport keys from './keys.js';\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nexport default createFind;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nexport default findIndex;\n","import createFind from './_createFind.js';\nimport findIndex from './findIndex.js';\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nexport default find;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nexport default baseMap;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nexport default baseHas;\n","import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nexport default has;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nexport default baseLt;\n","import isSymbol from './isSymbol.js';\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nexport default baseExtremum;\n","import baseExtremum from './_baseExtremum.js';\nimport baseLt from './_baseLt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n}\n\nexport default min;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nexport default baseSet;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nexport default basePickBy;\n"],"names":["objectProto","hasOwnProperty","collection"],"mappings":";;AACA,IAAI,eAAe;AAUnB,SAAS,gBAAgB,QAAQ;AAC/B,MAAI,QAAQ,OAAO;AAEnB,SAAO,WAAW,aAAa,KAAK,OAAO,OAAO,KAAK,CAAC,GAAG;AAAA,EAAC;AAC5D,SAAO;AACT;ACbA,IAAI,cAAc;AASlB,SAAS,SAAS,QAAQ;AACxB,SAAO,SACH,OAAO,MAAM,GAAG,gBAAgB,MAAM,IAAI,CAAC,EAAE,QAAQ,aAAa,EAAE,IACpE;AACN;ACXA,IAAI,MAAM,IAAI;AAGd,IAAI,aAAa;AAGjB,IAAI,aAAa;AAGjB,IAAI,YAAY;AAGhB,IAAI,eAAe;AAyBnB,SAAS,SAAS,OAAO;AACvB,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO;AAAA,EACT;AACA,MAAI,SAAS,KAAK,GAAG;AACnB,WAAO;AAAA,EACT;AACA,MAAI,SAAS,KAAK,GAAG;AACnB,QAAI,QAAQ,OAAO,MAAM,WAAW,aAAa,MAAM,QAAO,IAAK;AACnE,YAAQ,SAAS,KAAK,IAAK,QAAQ,KAAM;AAAA,EAC3C;AACA,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,UAAU,IAAI,QAAQ,CAAC;AAAA,EAChC;AACA,UAAQ,SAAS,KAAK;AACtB,MAAI,WAAW,WAAW,KAAK,KAAK;AACpC,SAAQ,YAAY,UAAU,KAAK,KAAK,IACpC,aAAa,MAAM,MAAM,CAAC,GAAG,WAAW,IAAI,CAAC,IAC5C,WAAW,KAAK,KAAK,IAAI,MAAM,CAAC;AACvC;AC1DA,IAAI,WAAW,IAAI,GACf,cAAc;AAyBlB,SAAS,SAAS,OAAO;AACvB,MAAI,CAAC,OAAO;AACV,WAAO,UAAU,IAAI,QAAQ;AAAA,EAC/B;AACA,UAAQ,SAAS,KAAK;AACtB,MAAI,UAAU,YAAY,UAAU,CAAC,UAAU;AAC7C,QAAI,OAAQ,QAAQ,IAAI,KAAK;AAC7B,WAAO,OAAO;AAAA,EAChB;AACA,SAAO,UAAU,QAAQ,QAAQ;AACnC;ACXA,SAAS,UAAU,OAAO;AACxB,MAAI,SAAS,SAAS,KAAK,GACvB,YAAY,SAAS;AAEzB,SAAO,WAAW,SAAU,YAAY,SAAS,YAAY,SAAU;AACzE;ACjBA,SAAS,QAAQ,OAAO;AACtB,MAAI,SAAS,SAAS,OAAO,IAAI,MAAM;AACvC,SAAO,SAAS,YAAY,KAAQ,IAAI,CAAA;AAC1C;ACbA,IAAIA,gBAAc,OAAO;AAGzB,IAAIC,mBAAiBD,cAAY;AAuB9B,IAAC,WAAW,SAAS,SAAS,QAAQ,SAAS;AAChD,WAAS,OAAO,MAAM;AAEtB,MAAI,QAAQ;AACZ,MAAI,SAAS,QAAQ;AACrB,MAAI,QAAQ,SAAS,IAAI,QAAQ,CAAC,IAAI;AAEtC,MAAI,SAAS,eAAe,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,KAAK,GAAG;AAC1D,aAAS;AAAA,EACX;AAEA,SAAO,EAAE,QAAQ,QAAQ;AACvB,QAAI,SAAS,QAAQ,KAAK;AAC1B,QAAI,QAAQ,OAAO,MAAM;AACzB,QAAI,aAAa;AACjB,QAAI,cAAc,MAAM;AAExB,WAAO,EAAE,aAAa,aAAa;AACjC,UAAI,MAAM,MAAM,UAAU;AAC1B,UAAI,QAAQ,OAAO,GAAG;AAEtB,UAAI,UAAU,UACT,GAAG,OAAOA,cAAY,GAAG,CAAC,KAAK,CAACC,iBAAe,KAAK,QAAQ,GAAG,GAAI;AACtE,eAAO,GAAG,IAAI,OAAO,GAAG;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT,CAAC;AC/CD,SAAS,KAAK,OAAO;AACnB,MAAI,SAAS,SAAS,OAAO,IAAI,MAAM;AACvC,SAAO,SAAS,MAAM,SAAS,CAAC,IAAI;AACtC;ACNA,SAAS,WAAW,eAAe;AACjC,SAAO,SAAS,YAAY,WAAW,WAAW;AAChD,QAAI,WAAW,OAAO,UAAU;AAChC,QAAI,CAAC,YAAY,UAAU,GAAG;AAC5B,UAAI,WAAW,aAAa,SAAY;AACxC,mBAAa,KAAK,UAAU;AAC5B,kBAAY,SAAS,KAAK;AAAE,eAAO,SAAS,SAAS,GAAG,GAAG,KAAK,QAAQ;AAAA,MAAG;AAAA,IAC7E;AACA,QAAI,QAAQ,cAAc,YAAY,WAAW,SAAS;AAC1D,WAAO,QAAQ,KAAK,SAAS,WAAW,WAAW,KAAK,IAAI,KAAK,IAAI;AAAA,EACvE;AACF;ACjBA,IAAI,YAAY,KAAK;AAqCrB,SAAS,UAAU,OAAO,WAAW,WAAW;AAC9C,MAAI,SAAS,SAAS,OAAO,IAAI,MAAM;AACvC,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AACA,MAAI,QAAQ,aAAa,OAAO,IAAI,UAAU,SAAS;AACvD,MAAI,QAAQ,GAAG;AACb,YAAQ,UAAU,SAAS,OAAO,CAAC;AAAA,EACrC;AACA,SAAO,cAAc,OAAO,aAAa,SAAY,GAAG,KAAK;AAC/D;ACbG,IAAC,OAAO,WAAW,SAAS;AC5B/B,SAAS,QAAQ,YAAY,UAAU;AACrC,MAAI,QAAQ,IACR,SAAS,YAAY,UAAU,IAAI,MAAM,WAAW,MAAM,IAAI,CAAA;AAElE,WAAS,YAAY,SAAS,OAAO,KAAKC,aAAY;AACpD,WAAO,EAAE,KAAK,IAAI,SAAS,OAAO,KAAKA,WAAU;AAAA,EACnD,CAAC;AACD,SAAO;AACT;AC4BA,SAAS,IAAI,YAAY,UAAU;AACjC,MAAI,OAAO,QAAQ,UAAU,IAAI,WAAW;AAC5C,SAAO,KAAK,YAAY,aAAa,QAAW,CAAC;AACnD;ACjDA,IAAI,cAAc,OAAO;AAGzB,IAAI,iBAAiB,YAAY;AAUjC,SAAS,QAAQ,QAAQ,KAAK;AAC5B,SAAO,UAAU,QAAQ,eAAe,KAAK,QAAQ,GAAG;AAC1D;ACcA,SAAS,IAAI,QAAQ,MAAM;AACzB,SAAO,UAAU,QAAQ,QAAQ,QAAQ,MAAM,OAAO;AACxD;ACvBA,SAAS,OAAO,OAAO,OAAO;AAC5B,SAAO,QAAQ;AACjB;ACCA,SAAS,aAAa,OAAO,UAAU,YAAY;AACjD,MAAI,QAAQ,IACR,SAAS,MAAM;AAEnB,SAAO,EAAE,QAAQ,QAAQ;AACvB,QAAI,QAAQ,MAAM,KAAK,GACnB,UAAU,SAAS,KAAK;AAE5B,QAAI,WAAW,SAAS,aAAa,SAC5B,YAAY,WAAW,CAAC,SAAS,OAAO,IACzC,WAAW,SAAS,QAAQ,IAC7B;AACL,UAAI,WAAW,SACX,SAAS;AAAA,IACf;AAAA,EACF;AACA,SAAO;AACT;ACPA,SAAS,IAAI,OAAO;AAClB,SAAQ,SAAS,MAAM,SACnB,aAAa,OAAO,UAAU,MAAM,IACpC;AACN;ACVA,SAAS,QAAQ,QAAQ,MAAM,OAAO,YAAY;AAChD,MAAI,CAAC,SAAS,MAAM,GAAG;AACrB,WAAO;AAAA,EACT;AACA,SAAO,SAAS,MAAM,MAAM;AAE5B,MAAI,QAAQ,IACR,SAAS,KAAK,QACd,YAAY,SAAS,GACrB,SAAS;AAEb,SAAO,UAAU,QAAQ,EAAE,QAAQ,QAAQ;AACzC,QAAI,MAAM,MAAM,KAAK,KAAK,CAAC,GACvB,WAAW;AAEf,QAAI,QAAQ,eAAe,QAAQ,iBAAiB,QAAQ,aAAa;AACvE,aAAO;AAAA,IACT;AAEA,QAAI,SAAS,WAAW;AACtB,UAAI,WAAW,OAAO,GAAG;AACzB,iBAA4D;AAC5D,UAAI,aAAa,QAAW;AAC1B,mBAAW,SAAS,QAAQ,IACxB,WACC,QAAQ,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAA,IAAK;MACvC;AAAA,IACF;AACA,gBAAY,QAAQ,KAAK,QAAQ;AACjC,aAAS,OAAO,GAAG;AAAA,EACrB;AACA,SAAO;AACT;ACnCA,SAAS,WAAW,QAAQ,OAAO,WAAW;AAC5C,MAAI,QAAQ,IACR,SAAS,MAAM,QACf,SAAS,CAAA;AAEb,SAAO,EAAE,QAAQ,QAAQ;AACvB,QAAI,OAAO,MAAM,KAAK,GAClB,QAAQ,QAAQ,QAAQ,IAAI;AAEhC,QAAI,UAAU,OAAO,IAAI,GAAG;AAC1B,cAAQ,QAAQ,SAAS,MAAM,MAAM,GAAG,KAAK;AAAA,IAC/C;AAAA,EACF;AACA,SAAO;AACT;","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { bh as isObjectLike, bi as baseGetTag, aZ as isArray, bj as Symbol$1, aY as isArrayLike, bk as arrayLikeKeys, bl as baseKeys, bm as memoize, bn as isArguments, bo as copyObject, aW as keysIn, bp as getPrototype, bq as cloneArrayBuffer, br as cloneTypedArray, bs as getTag, bf as baseUnary, bt as nodeUtil, aU as isObject, bu as copyArray, bv as isBuffer, bw as cloneBuffer, bx as initCloneObject, by as Stack, b0 as assignValue, bz as MapCache, aX as eq, bA as Uint8Array, bB as isTypedArray, bC as isLength, a$ as isIndex, a_ as identity, bd as baseFor, bD as Set } from "./index--fy89xGh.js";
|
|
2
2
|
var symbolTag$3 = "[object Symbol]";
|
|
3
3
|
function isSymbol(value) {
|
|
4
4
|
return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$3;
|
|
@@ -833,4 +833,4 @@ export {
|
|
|
833
833
|
baseIndexOf as y,
|
|
834
834
|
getAllKeysIn as z
|
|
835
835
|
};
|
|
836
|
-
//# sourceMappingURL=_baseUniq-
|
|
836
|
+
//# sourceMappingURL=_baseUniq-DAeYoL6j.js.map
|