dominds 1.25.0 → 1.25.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 +4 -3
- package/README.zh.md +4 -3
- package/dist/dialog-display-state.d.ts +3 -3
- package/dist/dialog-display-state.js +12 -8
- package/dist/dialog.d.ts +3 -3
- package/dist/dialog.js +42 -20
- package/dist/docs/design.md +4 -0
- package/dist/docs/design.zh.md +4 -0
- package/dist/docs/dlg-drive-algo.zh.md +5 -0
- package/dist/docs/roadmap.md +2 -0
- package/dist/docs/roadmap.zh.md +2 -0
- package/dist/llm/gen/mock.d.ts +2 -2
- package/dist/llm/gen/mock.js +2 -2
- package/dist/llm/kernel-driver/drive.js +41 -14
- package/dist/llm/kernel-driver/engine.d.ts +1 -1
- package/dist/llm/kernel-driver/idle-reminder-wake.js +1 -1
- package/dist/llm/kernel-driver/sideDialog.d.ts +1 -1
- package/dist/llm/kernel-driver/sideDialog.js +7 -3
- package/dist/llm/kernel-driver/tellask-special.js +1 -6
- package/dist/llm/kernel-driver/types.d.ts +1 -1
- package/dist/minds/system-prompt-parts.js +4 -4
- package/dist/persistence.d.ts +1 -7
- package/dist/persistence.js +186 -149
- package/dist/priming.js +116 -35
- package/dist/runtime/driver-messages.d.ts +1 -1
- package/dist/runtime/driver-messages.js +37 -19
- package/dist/server/api-routes.js +18 -0
- package/dist/server/server-core.d.ts +1 -0
- package/dist/server/server-core.js +11 -0
- package/dist/server/websocket-handler.js +2 -1
- package/dist/shared-reminders.d.ts +11 -3
- package/dist/shared-reminders.js +62 -34
- package/dist/team.js +4 -1
- package/dist/tool.d.ts +1 -1
- package/dist/tool.js +1 -1
- package/dist/tools/app-reminders.js +8 -2
- package/dist/tools/builtins.js +30 -0
- package/dist/tools/ctrl.js +34 -109
- package/dist/tools/fs.d.ts +2 -0
- package/dist/tools/fs.js +281 -2
- package/dist/tools/os.d.ts +11 -0
- package/dist/tools/os.js +26 -15
- package/dist/tools/picture.d.ts +1 -0
- package/dist/tools/picture.js +64 -1
- package/dist/tools/prompts/codex_inspect_and_patch_tools/en/tools.md +5 -0
- package/dist/tools/prompts/codex_inspect_and_patch_tools/zh/tools.md +5 -0
- package/dist/tools/prompts/control/en/errors.md +5 -19
- package/dist/tools/prompts/control/en/index.md +5 -4
- package/dist/tools/prompts/control/en/principles.md +23 -19
- package/dist/tools/prompts/control/en/scenarios.md +17 -11
- package/dist/tools/prompts/control/en/tools.md +4 -6
- package/dist/tools/prompts/control/zh/errors.md +5 -19
- package/dist/tools/prompts/control/zh/index.md +5 -4
- package/dist/tools/prompts/control/zh/principles.md +22 -19
- package/dist/tools/prompts/control/zh/scenarios.md +17 -11
- package/dist/tools/prompts/control/zh/tools.md +4 -6
- package/dist/tools/prompts/fs_read/en/errors.md +6 -0
- package/dist/tools/prompts/fs_read/en/index.md +17 -0
- package/dist/tools/prompts/fs_read/en/principles.md +5 -0
- package/dist/tools/prompts/fs_read/en/scenarios.md +3 -0
- package/dist/tools/prompts/fs_read/en/tools.md +11 -0
- package/dist/tools/prompts/fs_read/zh/errors.md +6 -0
- package/dist/tools/prompts/fs_read/zh/index.md +17 -0
- package/dist/tools/prompts/fs_read/zh/principles.md +5 -0
- package/dist/tools/prompts/fs_read/zh/scenarios.md +3 -0
- package/dist/tools/prompts/fs_read/zh/tools.md +11 -0
- package/dist/tools/prompts/os/en/index.md +1 -1
- package/dist/tools/prompts/os/en/principles.md +1 -1
- package/dist/tools/prompts/os/en/scenarios.md +21 -0
- package/dist/tools/prompts/os/en/tools.md +6 -0
- package/dist/tools/prompts/os/zh/index.md +1 -1
- package/dist/tools/prompts/os/zh/principles.md +1 -1
- package/dist/tools/prompts/os/zh/scenarios.md +21 -0
- package/dist/tools/prompts/os/zh/tools.md +6 -0
- package/dist/tools/prompts/personal_memory/en/index.md +1 -1
- package/dist/tools/prompts/personal_memory/en/principles.md +2 -2
- package/dist/tools/prompts/personal_memory/zh/index.md +1 -1
- package/dist/tools/prompts/personal_memory/zh/principles.md +2 -2
- package/dist/tools/registry.d.ts +6 -0
- package/dist/tools/ripgrep.d.ts +5 -0
- package/dist/tools/ripgrep.js +482 -1
- package/dist/tools/team_mgmt.js +8 -8
- package/dist/tools/txt.d.ts +34 -0
- package/dist/tools/txt.js +221 -1
- package/package.json +3 -3
- package/webapp/dist/assets/{_basePickBy-ZLV93S3E.js → _basePickBy-CbWZ8qnS.js} +3 -3
- package/webapp/dist/assets/_basePickBy-CbWZ8qnS.js.map +1 -0
- package/webapp/dist/assets/{_baseUniq-D0wSOJ06.js → _baseUniq-IY-Vfzx1.js} +2 -2
- package/webapp/dist/assets/_baseUniq-IY-Vfzx1.js.map +1 -0
- package/webapp/dist/assets/{arc-BHclbMTS.js → arc--U2Vks6y.js} +2 -2
- package/webapp/dist/assets/arc--U2Vks6y.js.map +1 -0
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-CK99gE_D.js → architectureDiagram-VXUJARFQ-DpryGqjy.js} +8 -26
- package/webapp/dist/assets/architectureDiagram-VXUJARFQ-DpryGqjy.js.map +1 -0
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-fE5MBTEU.js → blockDiagram-VD42YOAC-TTufCfiE.js} +170 -187
- package/webapp/dist/assets/blockDiagram-VD42YOAC-TTufCfiE.js.map +1 -0
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-BSLyPyoU.js → c4Diagram-YG6GDRKO-B4RPsw5H.js} +4 -4
- package/webapp/dist/assets/c4Diagram-YG6GDRKO-B4RPsw5H.js.map +1 -0
- package/webapp/dist/assets/{channel-DSvMpp-a.js → channel-DAtGYJHZ.js} +2 -2
- package/webapp/dist/assets/channel-DAtGYJHZ.js.map +1 -0
- package/webapp/dist/assets/{chunk-4BX2VUAB-OXEX170k.js → chunk-4BX2VUAB-JtO__vAF.js} +2 -2
- package/webapp/dist/assets/chunk-4BX2VUAB-JtO__vAF.js.map +1 -0
- package/webapp/dist/assets/{chunk-55IACEB6-BFQ_spQD.js → chunk-55IACEB6-JMRC8yG1.js} +2 -2
- package/webapp/dist/assets/chunk-55IACEB6-JMRC8yG1.js.map +1 -0
- package/webapp/dist/assets/{chunk-WL4C6EOR-PtH-blkK.js → chunk-B4BG7PRW-BDIpf8Iz.js} +121 -171
- package/webapp/dist/assets/chunk-B4BG7PRW-BDIpf8Iz.js.map +1 -0
- package/webapp/dist/assets/{chunk-NQ4KR5QH-B_ZhWMXR.js → chunk-DI55MBZ5-j9B4rifK.js} +7 -9
- package/webapp/dist/assets/chunk-DI55MBZ5-j9B4rifK.js.map +1 -0
- package/webapp/dist/assets/{chunk-FMBD7UC4-CbQ2BBPs.js → chunk-FMBD7UC4-DFXKLjHC.js} +2 -2
- package/webapp/dist/assets/chunk-FMBD7UC4-DFXKLjHC.js.map +1 -0
- package/webapp/dist/assets/{chunk-KX2RTZJC-BMd-daMY.js → chunk-QN33PNHL-BKzkeJ-b.js} +2 -2
- package/webapp/dist/assets/chunk-QN33PNHL-BKzkeJ-b.js.map +1 -0
- package/webapp/dist/assets/{chunk-QZHKN3VN-Cbf92xIw.js → chunk-QZHKN3VN-DiZd3UNl.js} +2 -2
- package/webapp/dist/assets/chunk-QZHKN3VN-DiZd3UNl.js.map +1 -0
- package/webapp/dist/assets/{chunk-JSJVCQXG-C4P1mjCL.js → chunk-TZMSLE5B-BaE4C244.js} +6 -14
- package/webapp/dist/assets/chunk-TZMSLE5B-BaE4C244.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-Dc3ncaD0.js → classDiagram-2ON5EDUG-CNF8ZohD.js} +6 -7
- package/webapp/dist/assets/classDiagram-2ON5EDUG-CNF8ZohD.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-Dc3ncaD0.js → classDiagram-v2-WZHVMYZB-CNF8ZohD.js} +6 -7
- package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-CNF8ZohD.js.map +1 -0
- package/webapp/dist/assets/{clone-E9Ad85BC.js → clone-Nq0Ko0Gv.js} +2 -2
- package/webapp/dist/assets/clone-Nq0Ko0Gv.js.map +1 -0
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-B-nj0o74.js → cose-bilkent-S5V4N54A-uHPLSeKv.js} +2 -2
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-uHPLSeKv.js.map +1 -0
- package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-CyJYNIbm.js → dagre-6UL2VRFP-C1awWpU3.js} +7 -7
- package/webapp/dist/assets/dagre-6UL2VRFP-C1awWpU3.js.map +1 -0
- package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-C8eweQ7b.js → diagram-PSM6KHXK-Bf69p76M.js} +10 -10
- package/webapp/dist/assets/diagram-PSM6KHXK-Bf69p76M.js.map +1 -0
- package/webapp/dist/assets/{diagram-IFDJBPK2-DMdygRl0.js → diagram-QEK2KX5R-Bvlbx8Jp.js} +8 -9
- package/webapp/dist/assets/diagram-QEK2KX5R-Bvlbx8Jp.js.map +1 -0
- package/webapp/dist/assets/{diagram-P4PSJMXO-BQDZHb0a.js → diagram-S2PKOQOG-CGjGalBu.js} +8 -8
- package/webapp/dist/assets/diagram-S2PKOQOG-CGjGalBu.js.map +1 -0
- package/webapp/dist/assets/{erDiagram-INFDFZHY-C1HaXN6E.js → erDiagram-Q2GNP2WA-Ds3qhwkG.js} +75 -96
- package/webapp/dist/assets/erDiagram-Q2GNP2WA-Ds3qhwkG.js.map +1 -0
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-24nNqQyo.js → flowDiagram-NV44I4VS-B1wDG_l5.js} +81 -98
- package/webapp/dist/assets/flowDiagram-NV44I4VS-B1wDG_l5.js.map +1 -0
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-BWPOFaLV.js → ganttDiagram-JELNMOA3-BwuYt2bO.js} +3 -28
- package/webapp/dist/assets/ganttDiagram-JELNMOA3-BwuYt2bO.js.map +1 -0
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-D7_L-p_Y.js → gitGraphDiagram-V2S2FVAM-B2Tw773z.js} +46 -38
- package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-B2Tw773z.js.map +1 -0
- package/webapp/dist/assets/graph-CS_H7jBi.js +425 -0
- package/webapp/dist/assets/graph-CS_H7jBi.js.map +1 -0
- package/webapp/dist/assets/{index-CDCDAfqP.js → index-arD81Nnh.js} +1086 -1044
- package/webapp/dist/assets/{index-CDCDAfqP.js.map → index-arD81Nnh.js.map} +1 -1
- package/webapp/dist/assets/{index-BQoNJEGT.css → index-yycTJNYb.css} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-CvaBM5j6.js → infoDiagram-HS3SLOUP-C9_JKYhm.js} +7 -7
- package/webapp/dist/assets/infoDiagram-HS3SLOUP-C9_JKYhm.js.map +1 -0
- package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-TQR6_teO.js → journeyDiagram-XKPGCS4Q-BhZggYOL.js} +5 -5
- package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-BhZggYOL.js.map +1 -0
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-B-BOuC-U.js → kanban-definition-3W4ZIXB7-B-R2Xm4Y.js} +3 -5
- package/webapp/dist/assets/kanban-definition-3W4ZIXB7-B-R2Xm4Y.js.map +1 -0
- package/webapp/dist/assets/{layout-B8yqIqbx.js → layout-BzMatxDa.js} +5 -5
- package/webapp/dist/assets/layout-BzMatxDa.js.map +1 -0
- package/webapp/dist/assets/{linear-CoLfiZKK.js → linear-BuuJkw_U.js} +2 -2
- package/webapp/dist/assets/linear-BuuJkw_U.js.map +1 -0
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-P70BMIHI.js → mindmap-definition-VGOIOE7T-BR7oDKBR.js} +5 -7
- package/webapp/dist/assets/mindmap-definition-VGOIOE7T-BR7oDKBR.js.map +1 -0
- package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DsS_4dTB.js → pieDiagram-ADFJNKIX--QWeT2vZ.js} +8 -8
- package/webapp/dist/assets/pieDiagram-ADFJNKIX--QWeT2vZ.js.map +1 -0
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-DoM9PEq-.js → quadrantDiagram-AYHSOK5B-BpqtmN3r.js} +3 -3
- package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-BpqtmN3r.js.map +1 -0
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-Bn3lYMMI.js → requirementDiagram-UZGBJVZJ-CIXjIi4F.js} +6 -16
- package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-CIXjIi4F.js.map +1 -0
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-97kCegRT.js → sankeyDiagram-TZEHDZUN-DJIt7SRz.js} +2 -2
- package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-DJIt7SRz.js.map +1 -0
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DXqjQjf6.js → sequenceDiagram-WL72ISMW-BpDK1ROT.js} +201 -601
- package/webapp/dist/assets/sequenceDiagram-WL72ISMW-BpDK1ROT.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-DQcTPKWP.js → stateDiagram-FKZM4ZOC-BoKGfmHf.js} +9 -9
- package/webapp/dist/assets/stateDiagram-FKZM4ZOC-BoKGfmHf.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DHmxRVJn.js → stateDiagram-v2-4FDKWEC3--haXC2JK.js} +5 -5
- package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3--haXC2JK.js.map +1 -0
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-BlovQQ4B.js → timeline-definition-IT6M3QCI-BmSg3Hjf.js} +3 -3
- package/webapp/dist/assets/timeline-definition-IT6M3QCI-BmSg3Hjf.js.map +1 -0
- package/webapp/dist/assets/{treemap-KZPCXAKY-CGu93c9S.js → treemap-GDKQZRPO-D9OuyDVA.js} +24 -37
- package/webapp/dist/assets/treemap-GDKQZRPO-D9OuyDVA.js.map +1 -0
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BKa1DxVq.js → xychartDiagram-PRI3JC2R-CVqSvO_S.js} +4 -4
- package/webapp/dist/assets/xychartDiagram-PRI3JC2R-CVqSvO_S.js.map +1 -0
- package/webapp/dist/index.html +2 -2
- package/webapp/dist/assets/_basePickBy-ZLV93S3E.js.map +0 -1
- package/webapp/dist/assets/_baseUniq-D0wSOJ06.js.map +0 -1
- package/webapp/dist/assets/arc-BHclbMTS.js.map +0 -1
- package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-CK99gE_D.js.map +0 -1
- package/webapp/dist/assets/blockDiagram-WCTKOSBZ-fE5MBTEU.js.map +0 -1
- package/webapp/dist/assets/c4Diagram-IC4MRINW-BSLyPyoU.js.map +0 -1
- package/webapp/dist/assets/channel-DSvMpp-a.js.map +0 -1
- package/webapp/dist/assets/chunk-4BX2VUAB-OXEX170k.js.map +0 -1
- package/webapp/dist/assets/chunk-55IACEB6-BFQ_spQD.js.map +0 -1
- package/webapp/dist/assets/chunk-FMBD7UC4-CbQ2BBPs.js.map +0 -1
- package/webapp/dist/assets/chunk-JSJVCQXG-C4P1mjCL.js.map +0 -1
- package/webapp/dist/assets/chunk-KX2RTZJC-BMd-daMY.js.map +0 -1
- package/webapp/dist/assets/chunk-NQ4KR5QH-B_ZhWMXR.js.map +0 -1
- package/webapp/dist/assets/chunk-QZHKN3VN-Cbf92xIw.js.map +0 -1
- package/webapp/dist/assets/chunk-WL4C6EOR-PtH-blkK.js.map +0 -1
- package/webapp/dist/assets/classDiagram-VBA2DB6C-Dc3ncaD0.js.map +0 -1
- package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-Dc3ncaD0.js.map +0 -1
- package/webapp/dist/assets/clone-E9Ad85BC.js.map +0 -1
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-B-nj0o74.js.map +0 -1
- package/webapp/dist/assets/dagre-KLK3FWXG-CyJYNIbm.js.map +0 -1
- package/webapp/dist/assets/diagram-E7M64L7V-C8eweQ7b.js.map +0 -1
- package/webapp/dist/assets/diagram-IFDJBPK2-DMdygRl0.js.map +0 -1
- package/webapp/dist/assets/diagram-P4PSJMXO-BQDZHb0a.js.map +0 -1
- package/webapp/dist/assets/erDiagram-INFDFZHY-C1HaXN6E.js.map +0 -1
- package/webapp/dist/assets/flowDiagram-PKNHOUZH-24nNqQyo.js.map +0 -1
- package/webapp/dist/assets/ganttDiagram-A5KZAMGK-BWPOFaLV.js.map +0 -1
- package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-D7_L-p_Y.js.map +0 -1
- package/webapp/dist/assets/graph-OHu4dL2n.js +0 -782
- package/webapp/dist/assets/graph-OHu4dL2n.js.map +0 -1
- package/webapp/dist/assets/infoDiagram-LFFYTUFH-CvaBM5j6.js.map +0 -1
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-DB1l2Uue.js +0 -966
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-DB1l2Uue.js.map +0 -1
- package/webapp/dist/assets/journeyDiagram-4ABVD52K-TQR6_teO.js.map +0 -1
- package/webapp/dist/assets/kanban-definition-K7BYSVSG-B-BOuC-U.js.map +0 -1
- package/webapp/dist/assets/layout-B8yqIqbx.js.map +0 -1
- package/webapp/dist/assets/linear-CoLfiZKK.js.map +0 -1
- package/webapp/dist/assets/mindmap-definition-YRQLILUH-P70BMIHI.js.map +0 -1
- package/webapp/dist/assets/pieDiagram-SKSYHLDU-DsS_4dTB.js.map +0 -1
- package/webapp/dist/assets/quadrantDiagram-337W2JSQ-DoM9PEq-.js.map +0 -1
- package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-Bn3lYMMI.js.map +0 -1
- package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-97kCegRT.js.map +0 -1
- package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-DXqjQjf6.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-RAJIS63D-DQcTPKWP.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-DHmxRVJn.js.map +0 -1
- package/webapp/dist/assets/timeline-definition-YZTLITO2-BlovQQ4B.js.map +0 -1
- package/webapp/dist/assets/treemap-KZPCXAKY-CGu93c9S.js.map +0 -1
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-Do1jprrz.js +0 -2487
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-Do1jprrz.js.map +0 -1
- package/webapp/dist/assets/xychartDiagram-JWTSCODW-BKa1DxVq.js.map +0 -1
package/dist/priming.js
CHANGED
|
@@ -20,15 +20,25 @@ const time_1 = require("@longrun-ai/kernel/utils/time");
|
|
|
20
20
|
const promises_1 = __importDefault(require("fs/promises"));
|
|
21
21
|
const path_1 = __importDefault(require("path"));
|
|
22
22
|
const yaml_1 = __importDefault(require("yaml"));
|
|
23
|
+
const zlib_1 = require("zlib");
|
|
23
24
|
const frontmatter_1 = require("./markdown/frontmatter");
|
|
24
25
|
const persistence_1 = require("./persistence");
|
|
26
|
+
const shared_reminders_1 = require("./shared-reminders");
|
|
25
27
|
const tool_1 = require("./tool");
|
|
26
28
|
const registry_1 = require("./tools/registry");
|
|
27
|
-
const PRIMING_ROOT_DIR = path_1.default.resolve(process.cwd(), '.minds', 'priming');
|
|
28
|
-
const PRIMING_INDIVIDUAL_DIR = path_1.default.resolve(PRIMING_ROOT_DIR, 'individual');
|
|
29
|
-
const PRIMING_TEAM_SHARED_DIR = path_1.default.resolve(PRIMING_ROOT_DIR, 'team_shared');
|
|
30
|
-
const RECENT_PRIMING_DIR = path_1.default.resolve(process.cwd(), '.dialogs', 'recent-priming');
|
|
31
29
|
const RECENT_PRIMING_MAX = 20;
|
|
30
|
+
function getPrimingRootDir() {
|
|
31
|
+
return path_1.default.resolve(process.cwd(), '.minds', 'priming');
|
|
32
|
+
}
|
|
33
|
+
function getPrimingIndividualDir() {
|
|
34
|
+
return path_1.default.resolve(getPrimingRootDir(), 'individual');
|
|
35
|
+
}
|
|
36
|
+
function getPrimingTeamSharedDir() {
|
|
37
|
+
return path_1.default.resolve(getPrimingRootDir(), 'team_shared');
|
|
38
|
+
}
|
|
39
|
+
function getRecentPrimingDir() {
|
|
40
|
+
return path_1.default.resolve(process.cwd(), '.dialogs', 'recent-priming');
|
|
41
|
+
}
|
|
32
42
|
function isRecord(value) {
|
|
33
43
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
34
44
|
}
|
|
@@ -104,8 +114,9 @@ function normalizeScriptRef(raw) {
|
|
|
104
114
|
return null;
|
|
105
115
|
}
|
|
106
116
|
function scriptRefToAbsolutePath(scriptRef) {
|
|
107
|
-
const
|
|
108
|
-
|
|
117
|
+
const primingRootDir = getPrimingRootDir();
|
|
118
|
+
const absPath = path_1.default.resolve(primingRootDir, `${scriptRef}.md`);
|
|
119
|
+
if (!ensureInside(primingRootDir, absPath)) {
|
|
109
120
|
throw new Error(`Priming script path escapes priming root: ${scriptRef}`);
|
|
110
121
|
}
|
|
111
122
|
return absPath;
|
|
@@ -178,9 +189,10 @@ function parseReminderSnapshots(frontmatter) {
|
|
|
178
189
|
const scope = item['scope'];
|
|
179
190
|
if (scope !== undefined &&
|
|
180
191
|
scope !== 'dialog' &&
|
|
181
|
-
scope !== '
|
|
182
|
-
scope !== '
|
|
183
|
-
|
|
192
|
+
scope !== 'task' &&
|
|
193
|
+
scope !== 'agent' &&
|
|
194
|
+
scope !== 'runtime') {
|
|
195
|
+
throw new Error(`${context}.scope must be "dialog", "task", "agent", or "runtime" when provided`);
|
|
184
196
|
}
|
|
185
197
|
const createdAt = item['createdAt'];
|
|
186
198
|
if (createdAt !== undefined && typeof createdAt !== 'string') {
|
|
@@ -197,7 +209,9 @@ function parseReminderSnapshots(frontmatter) {
|
|
|
197
209
|
ownerName: typeof ownerName === 'string' ? ownerName.trim() : undefined,
|
|
198
210
|
meta,
|
|
199
211
|
echoback,
|
|
200
|
-
scope: scope === 'dialog' || scope === '
|
|
212
|
+
scope: scope === 'dialog' || scope === 'task' || scope === 'agent' || scope === 'runtime'
|
|
213
|
+
? scope
|
|
214
|
+
: undefined,
|
|
201
215
|
renderMode: renderMode === 'plain' || renderMode === 'markdown' ? renderMode : undefined,
|
|
202
216
|
createdAt: typeof createdAt === 'string' ? createdAt : undefined,
|
|
203
217
|
priority,
|
|
@@ -218,7 +232,11 @@ function reminderToSnapshot(reminder) {
|
|
|
218
232
|
priority: reminder.priority,
|
|
219
233
|
};
|
|
220
234
|
}
|
|
221
|
-
function
|
|
235
|
+
function generatePrimingReminderId(scriptRef, index) {
|
|
236
|
+
const checksum = (0, zlib_1.crc32)(`${scriptRef}\n${String(index)}`) >>> 0;
|
|
237
|
+
return `priming-${checksum.toString(16).padStart(8, '0')}`;
|
|
238
|
+
}
|
|
239
|
+
function materializeReminderSnapshot(snapshot, context, defaultScope, fallbackId) {
|
|
222
240
|
const owner = snapshot.ownerName === undefined
|
|
223
241
|
? undefined
|
|
224
242
|
: (() => {
|
|
@@ -229,12 +247,12 @@ function materializeReminderSnapshot(snapshot, context) {
|
|
|
229
247
|
return resolved;
|
|
230
248
|
})();
|
|
231
249
|
return (0, tool_1.materializeReminder)({
|
|
232
|
-
id: snapshot.id,
|
|
250
|
+
id: snapshot.id ?? fallbackId,
|
|
233
251
|
content: snapshot.content,
|
|
234
252
|
owner,
|
|
235
253
|
meta: snapshot.meta,
|
|
236
254
|
echoback: snapshot.echoback,
|
|
237
|
-
scope: snapshot.scope,
|
|
255
|
+
scope: snapshot.scope ?? defaultScope,
|
|
238
256
|
renderMode: snapshot.renderMode ?? 'markdown',
|
|
239
257
|
createdAt: snapshot.createdAt,
|
|
240
258
|
priority: snapshot.priority,
|
|
@@ -1537,9 +1555,6 @@ function parseRecordsFromBody(body) {
|
|
|
1537
1555
|
}
|
|
1538
1556
|
records.push(normalizedRecord);
|
|
1539
1557
|
}
|
|
1540
|
-
if (records.length === 0) {
|
|
1541
|
-
throw new Error("Priming script must contain at least one '### record <type>' block");
|
|
1542
|
-
}
|
|
1543
1558
|
return records;
|
|
1544
1559
|
}
|
|
1545
1560
|
function parsePrimingScript(raw) {
|
|
@@ -1580,7 +1595,7 @@ async function listMarkdownFilesRecursively(dirPath) {
|
|
|
1580
1595
|
return files;
|
|
1581
1596
|
}
|
|
1582
1597
|
async function validateAllPrimingScriptsInRtws() {
|
|
1583
|
-
const absFiles = await listMarkdownFilesRecursively(
|
|
1598
|
+
const absFiles = await listMarkdownFilesRecursively(getPrimingRootDir());
|
|
1584
1599
|
const sorted = [...absFiles].sort((a, b) => a.localeCompare(b));
|
|
1585
1600
|
const issues = [];
|
|
1586
1601
|
for (const absPath of sorted) {
|
|
@@ -1609,7 +1624,7 @@ async function validateAllPrimingScriptsInRtws() {
|
|
|
1609
1624
|
};
|
|
1610
1625
|
}
|
|
1611
1626
|
function parseSummaryFromAbsolutePath(absPath) {
|
|
1612
|
-
const rel = path_1.default.relative(
|
|
1627
|
+
const rel = path_1.default.relative(getPrimingRootDir(), absPath).replace(/\\/g, '/');
|
|
1613
1628
|
const relNoExt = rel.toLowerCase().endsWith('.md') ? rel.slice(0, -'.md'.length) : rel;
|
|
1614
1629
|
const parts = relNoExt.split('/');
|
|
1615
1630
|
if (parts[0] === 'individual') {
|
|
@@ -1677,8 +1692,9 @@ function normalizeRecentUsageAgentId(agentIdRaw) {
|
|
|
1677
1692
|
}
|
|
1678
1693
|
function resolveRecentUsageFilePath(agentIdRaw) {
|
|
1679
1694
|
const agentId = normalizeRecentUsageAgentId(agentIdRaw);
|
|
1680
|
-
const
|
|
1681
|
-
|
|
1695
|
+
const recentPrimingDir = getRecentPrimingDir();
|
|
1696
|
+
const absPath = path_1.default.resolve(recentPrimingDir, `${agentId}.json`);
|
|
1697
|
+
if (!ensureInside(recentPrimingDir, absPath)) {
|
|
1682
1698
|
throw new Error(`Recent-priming path escapes expected directory: ${absPath}`);
|
|
1683
1699
|
}
|
|
1684
1700
|
return absPath;
|
|
@@ -1725,7 +1741,7 @@ async function loadRecentUsage(agentIdRaw) {
|
|
|
1725
1741
|
}
|
|
1726
1742
|
async function saveRecentUsage(agentIdRaw, file) {
|
|
1727
1743
|
const filePath = resolveRecentUsageFilePath(agentIdRaw);
|
|
1728
|
-
await promises_1.default.mkdir(
|
|
1744
|
+
await promises_1.default.mkdir(getRecentPrimingDir(), { recursive: true });
|
|
1729
1745
|
await promises_1.default.writeFile(filePath, JSON.stringify(file, null, 2), 'utf-8');
|
|
1730
1746
|
}
|
|
1731
1747
|
async function recordRecentPrimingUsage(agentIdRaw, scriptRefs) {
|
|
@@ -1828,9 +1844,9 @@ async function searchApplicablePrimingScripts(args) {
|
|
|
1828
1844
|
const limit = typeof args.limit === 'number' && Number.isFinite(args.limit) && args.limit > 0
|
|
1829
1845
|
? Math.floor(args.limit)
|
|
1830
1846
|
: 50;
|
|
1831
|
-
const individualDir = path_1.default.resolve(
|
|
1847
|
+
const individualDir = path_1.default.resolve(getPrimingIndividualDir(), agentId);
|
|
1832
1848
|
const individualFiles = await listMarkdownFilesRecursively(individualDir);
|
|
1833
|
-
const teamSharedFiles = await listMarkdownFilesRecursively(
|
|
1849
|
+
const teamSharedFiles = await listMarkdownFilesRecursively(getPrimingTeamSharedDir());
|
|
1834
1850
|
const matched = [];
|
|
1835
1851
|
const warnings = [];
|
|
1836
1852
|
for (const absPath of [...individualFiles, ...teamSharedFiles]) {
|
|
@@ -1870,7 +1886,7 @@ async function loadPrimingScriptByRef(scriptRefRaw, agentIdRaw) {
|
|
|
1870
1886
|
throw new Error(`Invalid priming script ref: ${scriptRefRaw}`);
|
|
1871
1887
|
}
|
|
1872
1888
|
const absPath = scriptRefToAbsolutePath(scriptRef);
|
|
1873
|
-
if (!ensureInside(
|
|
1889
|
+
if (!ensureInside(getPrimingRootDir(), absPath)) {
|
|
1874
1890
|
throw new Error(`Priming script path escapes priming root: ${scriptRef}`);
|
|
1875
1891
|
}
|
|
1876
1892
|
const loaded = await loadScriptFromAbsolutePath(absPath);
|
|
@@ -1879,7 +1895,7 @@ async function loadPrimingScriptByRef(scriptRefRaw, agentIdRaw) {
|
|
|
1879
1895
|
}
|
|
1880
1896
|
return {
|
|
1881
1897
|
summary: loaded.summary,
|
|
1882
|
-
reminders: (loaded.parsed.reminders ?? []).map((item, index) => materializeReminderSnapshot(item, `priming script '${scriptRef}' frontmatter.reminders[${String(index)}]
|
|
1898
|
+
reminders: (loaded.parsed.reminders ?? []).map((item, index) => materializeReminderSnapshot(item, `priming script '${scriptRef}' frontmatter.reminders[${String(index)}]`, 'task', generatePrimingReminderId(scriptRef, index))),
|
|
1883
1899
|
records: loaded.parsed.records,
|
|
1884
1900
|
};
|
|
1885
1901
|
}
|
|
@@ -2152,11 +2168,79 @@ function primingRecordToChatMessage(record) {
|
|
|
2152
2168
|
}
|
|
2153
2169
|
}
|
|
2154
2170
|
}
|
|
2171
|
+
function assertUniquePrimingReminderIds(reminders) {
|
|
2172
|
+
const seen = new Set();
|
|
2173
|
+
for (const reminder of reminders) {
|
|
2174
|
+
if (seen.has(reminder.id)) {
|
|
2175
|
+
throw new Error(`Duplicate reminder id in priming scripts: ${reminder.id}`);
|
|
2176
|
+
}
|
|
2177
|
+
seen.add(reminder.id);
|
|
2178
|
+
}
|
|
2179
|
+
}
|
|
2180
|
+
async function upsertPrimingSharedReminders(target, incoming) {
|
|
2181
|
+
if (incoming.length === 0)
|
|
2182
|
+
return;
|
|
2183
|
+
await (0, shared_reminders_1.mutateSharedReminders)(target, (reminders) => {
|
|
2184
|
+
const byId = new Map();
|
|
2185
|
+
reminders.forEach((reminder, index) => byId.set(reminder.id, index));
|
|
2186
|
+
for (const reminder of incoming) {
|
|
2187
|
+
const existingIndex = byId.get(reminder.id);
|
|
2188
|
+
if (existingIndex === undefined) {
|
|
2189
|
+
byId.set(reminder.id, reminders.length);
|
|
2190
|
+
reminders.push(reminder);
|
|
2191
|
+
}
|
|
2192
|
+
else {
|
|
2193
|
+
reminders[existingIndex] = reminder;
|
|
2194
|
+
}
|
|
2195
|
+
}
|
|
2196
|
+
});
|
|
2197
|
+
}
|
|
2198
|
+
async function applyPrimingRemindersToDialog(args) {
|
|
2199
|
+
if (args.reminders.length === 0)
|
|
2200
|
+
return;
|
|
2201
|
+
assertUniquePrimingReminderIds(args.reminders);
|
|
2202
|
+
const dialogReminders = [];
|
|
2203
|
+
const taskReminders = [];
|
|
2204
|
+
const agentReminders = [];
|
|
2205
|
+
for (const reminder of args.reminders) {
|
|
2206
|
+
const scope = reminder.scope ?? 'task';
|
|
2207
|
+
switch (scope) {
|
|
2208
|
+
case 'dialog':
|
|
2209
|
+
dialogReminders.push(reminder);
|
|
2210
|
+
break;
|
|
2211
|
+
case 'task':
|
|
2212
|
+
taskReminders.push(reminder);
|
|
2213
|
+
break;
|
|
2214
|
+
case 'agent':
|
|
2215
|
+
case 'runtime':
|
|
2216
|
+
agentReminders.push(reminder);
|
|
2217
|
+
break;
|
|
2218
|
+
}
|
|
2219
|
+
}
|
|
2220
|
+
if (dialogReminders.length > 0) {
|
|
2221
|
+
args.dialog.reminders.splice(0, args.dialog.reminders.length, ...dialogReminders);
|
|
2222
|
+
await persistence_1.DialogPersistence._saveReminderState(args.dialog.id, [...args.dialog.reminders], args.status);
|
|
2223
|
+
await persistence_1.DialogPersistence.appendRemindersReconciledRecord(args.dialog.id, args.dialog.reminders, {
|
|
2224
|
+
kind: 'root_anchor',
|
|
2225
|
+
rootAnchor: (0, storage_1.toRootGenerationAnchor)({ rootCourse: 1, rootGenseq: 0 }),
|
|
2226
|
+
}, args.status);
|
|
2227
|
+
}
|
|
2228
|
+
await upsertPrimingSharedReminders({ kind: 'task', agentId: args.agentId, taskDocPath: args.dialog.taskDocPath }, taskReminders);
|
|
2229
|
+
await upsertPrimingSharedReminders({ kind: 'agent', agentId: args.agentId }, agentReminders);
|
|
2230
|
+
args.dialog.touchReminders();
|
|
2231
|
+
}
|
|
2155
2232
|
async function applyPrimingScriptsToDialog(args) {
|
|
2156
2233
|
const agentId = args.agentId.trim();
|
|
2157
2234
|
if (agentId === '') {
|
|
2158
2235
|
throw new Error('agentId is required');
|
|
2159
2236
|
}
|
|
2237
|
+
const dialogAgentId = args.dialog.agentId.trim();
|
|
2238
|
+
if (dialogAgentId === '') {
|
|
2239
|
+
throw new Error(`Dialog agentId missing for ${args.dialog.id.valueOf()}`);
|
|
2240
|
+
}
|
|
2241
|
+
if (dialogAgentId !== agentId) {
|
|
2242
|
+
throw new Error(`applyPrimingScriptsToDialog agentId mismatch: dialog=${dialogAgentId} request=${agentId}`);
|
|
2243
|
+
}
|
|
2160
2244
|
const normalizedRefs = [];
|
|
2161
2245
|
const seen = new Set();
|
|
2162
2246
|
for (const raw of args.priming.scriptRefs) {
|
|
@@ -2182,16 +2266,13 @@ async function applyPrimingScriptsToDialog(args) {
|
|
|
2182
2266
|
allReminders.push(...loaded.reminders);
|
|
2183
2267
|
allRecords.push(...remapped.records);
|
|
2184
2268
|
}
|
|
2185
|
-
if (allRecords.length === 0) {
|
|
2186
|
-
return { appliedScriptRefs: normalizedRefs, appendedMessageCount: 0 };
|
|
2187
|
-
}
|
|
2188
2269
|
if (allReminders.length > 0) {
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
}
|
|
2270
|
+
await applyPrimingRemindersToDialog({
|
|
2271
|
+
dialog: args.dialog,
|
|
2272
|
+
agentId,
|
|
2273
|
+
status: args.status,
|
|
2274
|
+
reminders: allReminders,
|
|
2275
|
+
});
|
|
2195
2276
|
}
|
|
2196
2277
|
for (const record of allRecords) {
|
|
2197
2278
|
const withSourceTag = addPrimingSourceTag(record);
|
|
@@ -2584,7 +2665,7 @@ async function saveDialogCourseAsIndividualPrimingScript(args) {
|
|
|
2584
2665
|
const scriptRef = `individual/${ownerAgentId}/${normalizedSlug}`;
|
|
2585
2666
|
const absPath = scriptRefToAbsolutePath(scriptRef);
|
|
2586
2667
|
const parentDir = path_1.default.dirname(absPath);
|
|
2587
|
-
if (!ensureInside(
|
|
2668
|
+
if (!ensureInside(getPrimingIndividualDir(), parentDir)) {
|
|
2588
2669
|
throw new Error(`Priming script directory escapes individual scope: ${parentDir}`);
|
|
2589
2670
|
}
|
|
2590
2671
|
const now = (0, time_1.formatUnifiedTimestamp)(new Date());
|
|
@@ -16,7 +16,7 @@ export type ReminderContextFollowingDialogState = 'user_message' | 'runtime_noti
|
|
|
16
16
|
export declare function formatReminderContextFooter(language: LanguageCode, followingState: ReminderContextFollowingDialogState): string;
|
|
17
17
|
export declare function formatReminderItemGuide(language: LanguageCode, reminderId: string, content: string, options?: {
|
|
18
18
|
meta?: unknown;
|
|
19
|
-
scope?: 'dialog' | '
|
|
19
|
+
scope?: 'dialog' | 'task' | 'agent' | 'runtime';
|
|
20
20
|
}): string;
|
|
21
21
|
export declare function formatQ4HDiligencePushBudgetExhausted(language: LanguageCode, args: {
|
|
22
22
|
maxInjectCount: number;
|
|
@@ -127,7 +127,7 @@ function formatNewCourseStartPrompt(language, args) {
|
|
|
127
127
|
: `系统因上下文已告急(critical)而自动开启了第 ${args.nextCourse} 程对话。`;
|
|
128
128
|
return (`${noticePrefix} ${prefix} ` +
|
|
129
129
|
'这是一条运行时换程指令,不是新的用户诉求;不要把这条提示当成新的待办,也不要只回复“收到/好的/我会先整理提醒项”。' +
|
|
130
|
-
'
|
|
130
|
+
'现在已经进入新一程:上下文已经不再吃紧,告急状况已改观。第一步先复核并在必要时整理接续包提醒项,以清醒头脑删除冗余、纠正偏激或失真的过桥思路、压缩成高质量提醒项;若提醒项已经足够清晰,就不要为了整理而整理。' +
|
|
131
131
|
'完成这一步后,直接继续推进原任务本身;除非任务自然需要对用户交付结果,否则不要为这条提示单独回复。');
|
|
132
132
|
}
|
|
133
133
|
const prefix = args.source === 'clear_mind'
|
|
@@ -171,14 +171,14 @@ function formatReminderContextGuide(language) {
|
|
|
171
171
|
`${formatSystemNoticePrefix(language)} 提醒项上下文块开始`,
|
|
172
172
|
'以下是当前可见提醒项的运行时上下文投影。由于当前 LLM Provider 通常不支持 role=environment,Dominds 默认把系统运行时提醒包装投影为 role=user;个别提醒项可由其 owner 按自身契约选择 role。无论最终 role 如何,它们都不是用户的新诉求/指令,也不是聊天正文。',
|
|
173
173
|
'在 WebUI 中,用户通过独立的 Reminder 小组件/面板项看到这些提醒,并能把它们和聊天正文区分开。',
|
|
174
|
-
'
|
|
174
|
+
'请把提醒项作为手头工作/状态参考;只有实际改变你的判断、计划或风险的信息,才需要提炼进后续有实质内容的对外回复。不要为了提醒项单独回复“收到/已了解/静默吸收”。',
|
|
175
175
|
].join('\n');
|
|
176
176
|
}
|
|
177
177
|
return [
|
|
178
178
|
`${formatSystemNoticePrefix(language)} Reminder context block begins`,
|
|
179
179
|
'The following visible reminders are runtime-added context projections. Because current LLM providers usually do not support role=environment, Dominds projects default system-runtime reminder wrappers as role=user; individual reminder owners may choose the role required by their own contract. Regardless of their final role, these reminders are not new user requests/instructions, and not chat transcript text.',
|
|
180
180
|
'In the WebUI, the user sees these reminders through a separate Reminder widget/panel item and can distinguish them from the chat transcript.',
|
|
181
|
-
'Use reminders as
|
|
181
|
+
'Use reminders as current-work/state references; only carry information into a later substantive outward reply when it materially changes your current judgment, plan, or risk. Do not send a standalone "acknowledged/noted/silently absorbed" reply for reminder items.',
|
|
182
182
|
].join('\n');
|
|
183
183
|
}
|
|
184
184
|
function formatReminderItemProjectionNote(language) {
|
|
@@ -195,7 +195,9 @@ function formatReminderContextFooter(language, followingState) {
|
|
|
195
195
|
if (followingState === 'runtime_notice') {
|
|
196
196
|
return `${base}本轮提醒项块之后会接着出现一条运行时提示;它不是用户的新诉求/指令,请按其中的运行时要求继续推进。`;
|
|
197
197
|
}
|
|
198
|
-
return `${base}
|
|
198
|
+
return (`${base}本轮没有新的用户消息或运行时提示;这是工具调用后的自动续推。` +
|
|
199
|
+
'请基于已有任务状态判断下一步:若已有明确、相关且有价值的动作,就继续执行;若当前确实只能等待外部结果或用户输入,不要为了避免“等待”而寻找无关小事。' +
|
|
200
|
+
'不要把“没有新消息”理解为空系统提示。');
|
|
199
201
|
}
|
|
200
202
|
const base = `${formatSystemNoticePrefix(language)} Reminder context block ends. The reminder items between ` +
|
|
201
203
|
'"Reminder context block begins" and "Reminder context block ends" are system reminders, ' +
|
|
@@ -208,7 +210,9 @@ function formatReminderContextFooter(language, followingState) {
|
|
|
208
210
|
if (followingState === 'runtime_notice') {
|
|
209
211
|
return `${base}A runtime notice follows this reminder block in this round; it is not a new user request/instruction, so follow that runtime guidance and continue the work.`;
|
|
210
212
|
}
|
|
211
|
-
return `${base}There is no new user message or runtime notice in this round; this is an automatic continuation after a tool call.
|
|
213
|
+
return (`${base}There is no new user message or runtime notice in this round; this is an automatic continuation after a tool call. ` +
|
|
214
|
+
'Judge the next step from the existing task state: if there is a clear, relevant, valuable action, continue with it; if the work genuinely can only wait for an external result or user input, do not invent unrelated work just to avoid "waiting". ' +
|
|
215
|
+
'Do not interpret the absence of a new message as an empty system notice.');
|
|
212
216
|
}
|
|
213
217
|
function formatReminderItemGuide(language, reminderId, content, options) {
|
|
214
218
|
function isRecord(value) {
|
|
@@ -303,16 +307,23 @@ function formatReminderItemGuide(language, reminderId, content, options) {
|
|
|
303
307
|
content,
|
|
304
308
|
].join('\n');
|
|
305
309
|
}
|
|
310
|
+
const scopeLabel = scope === 'task' ? '(任务范围)' : scope === 'agent' ? '(智能体范围)' : '';
|
|
311
|
+
const scopeGuide = scope === 'task'
|
|
312
|
+
? `${projectionNote}你设置了任务范围提醒项,让运行时系统在当前差遣牒任务内、所有由你主理的对话里提醒你。请把它当作当前任务的手头工作提示,不要自动当成系统下发的下一步动作。`
|
|
313
|
+
: scope === 'agent'
|
|
314
|
+
? `${projectionNote}你设置了智能体范围提醒项,让运行时系统在所有由你主理的对话里提醒你。它只适合紧急、短期、全局刺眼提醒;不要用来记录普通任务状态,也不要自动当成系统下发的下一步动作。`
|
|
315
|
+
: `${projectionNote}你设置了提醒项,让运行时系统提醒你。请把它当作用来保留当前对话里容易丢的手头工作信息的提示,不要自动当成系统下发的下一步动作。`;
|
|
316
|
+
const scopeMaintenance = scope === 'task'
|
|
317
|
+
? '你应保持简洁、及时更新;不再需要时就删除。若它只对当前对话有效,应改写成 dialog 范围提醒;若需要全队同步当前任务状态,应写入差遣牒 progress,而不是扩大提醒范围。'
|
|
318
|
+
: scope === 'agent'
|
|
319
|
+
? '你应主动保持极少量、短期、强相关;不再需要时必须删除。普通任务进展不要放在 agent 范围,当前任务内跨对话可见请改用 task 范围。'
|
|
320
|
+
: '你应保持简洁、及时更新;不再需要时就删除。若后续准备换程,也可以把它整理成接续包。';
|
|
306
321
|
return [
|
|
307
|
-
`${systemPrefix} 提醒项 [${reminderId}]${
|
|
322
|
+
`${systemPrefix} 提醒项 [${reminderId}]${scopeLabel}`,
|
|
308
323
|
'',
|
|
309
|
-
|
|
310
|
-
? `${projectionNote}你设置了个人范围提醒项,让运行时系统在所有由你主理的后续对话里提醒你。请把它当作你的工作集提示,不要自动当成系统下发的下一步动作。`
|
|
311
|
-
: `${projectionNote}你设置了提醒项,让运行时系统提醒你。请把它当作用来保留当前对话里容易丢的工作信息的工作集提示,不要自动当成系统下发的下一步动作。`,
|
|
324
|
+
scopeGuide,
|
|
312
325
|
'',
|
|
313
|
-
|
|
314
|
-
? '你应保持简洁、及时更新;不再需要时就删除。若它只对当前对话有效,应改写成 dialog 范围提醒而不是长期堆在个人范围里。'
|
|
315
|
-
: '你应保持简洁、及时更新;不再需要时就删除。若后续准备换程,也可以把它整理成接续包。',
|
|
326
|
+
scopeMaintenance,
|
|
316
327
|
'',
|
|
317
328
|
`如果你要更新这条提醒项,可执行:update_reminder({ "reminder_id": "${reminderId}", "content": "..." })`,
|
|
318
329
|
deleteInstruction,
|
|
@@ -362,15 +373,22 @@ ${deleteInstruction}
|
|
|
362
373
|
---
|
|
363
374
|
${content}`;
|
|
364
375
|
}
|
|
365
|
-
|
|
376
|
+
const scopeLabel = scope === 'task' ? ' (TASK SCOPE)' : scope === 'agent' ? ' (AGENT SCOPE)' : '';
|
|
377
|
+
const scopeGuide = scope === 'task'
|
|
378
|
+
? `${enProjectionPrefix}You set a task-scope reminder so the runtime system can remind you in every dialog you lead for the current Taskdoc. Treat it as a current-work reference for this task, not as an automatically assigned next action.`
|
|
379
|
+
: scope === 'agent'
|
|
380
|
+
? `${enProjectionPrefix}You set an agent-scope reminder so the runtime system can remind you in every dialog you lead. This is only for urgent, short-lived, globally visible cues; do not use it for ordinary task state, and do not treat it as an automatically assigned next action.`
|
|
381
|
+
: `${enProjectionPrefix}You set a reminder so the runtime system can remind you. Treat it as a current-work reference for easy-to-lose details in the current dialog, not as an automatically assigned next action.`;
|
|
382
|
+
const scopeMaintenance = scope === 'task'
|
|
383
|
+
? 'Keep it concise, refresh it when needed, and delete it when obsolete. If it is only useful for the current dialog, rewrite it into dialog scope; if the team must synchronize current task state, update Taskdoc progress instead of broadening reminder scope.'
|
|
384
|
+
: scope === 'agent'
|
|
385
|
+
? 'Keep this scope rare, short-lived, and strongly relevant; delete it as soon as it is no longer needed. Ordinary task progress does not belong in agent scope; use task scope for current-task cross-dialog visibility.'
|
|
386
|
+
: 'Keep it concise, refresh it when needed, and delete it when obsolete. If you are preparing a new course, you can also rewrite it into a continuation package.';
|
|
387
|
+
return `${systemPrefix} REMINDER [${reminderId}]${scopeLabel}
|
|
366
388
|
|
|
367
|
-
${
|
|
368
|
-
? `${enProjectionPrefix}You set a personal-scope reminder so the runtime system can remind you in every later dialog you lead. Treat it as your workset reference, not as an automatically assigned next action.`
|
|
369
|
-
: `${enProjectionPrefix}You set a reminder so the runtime system can remind you. Treat it as your workset reference for easy-to-lose work details in the current dialog, not as an automatically assigned next action.`}
|
|
389
|
+
${scopeGuide}
|
|
370
390
|
|
|
371
|
-
${
|
|
372
|
-
? 'Keep it concise, refresh it when needed, and delete it when obsolete. If it is only useful for the current dialog, rewrite it into dialog scope instead of letting personal scope accumulate noise.'
|
|
373
|
-
: 'Keep it concise, refresh it when needed, and delete it when obsolete. If you are preparing a new course, you can also rewrite it into a continuation package.'}
|
|
391
|
+
${scopeMaintenance}
|
|
374
392
|
|
|
375
393
|
Update path: update_reminder({ "reminder_id": "${reminderId}", "content": "..." })
|
|
376
394
|
${deleteInstruction}
|
|
@@ -66,6 +66,7 @@ const id_1 = require("../utils/id");
|
|
|
66
66
|
const taskdoc_search_1 = require("../utils/taskdoc-search");
|
|
67
67
|
const taskdoc_search_worker_client_1 = require("../utils/taskdoc-search-worker-client");
|
|
68
68
|
const create_dialog_contract_1 = require("./create-dialog-contract");
|
|
69
|
+
const dominds_runtime_status_1 = require("./dominds-runtime-status");
|
|
69
70
|
const dominds_self_update_1 = require("./dominds-self-update");
|
|
70
71
|
const mime_types_1 = require("./mime-types");
|
|
71
72
|
const setup_routes_1 = require("./setup-routes");
|
|
@@ -1059,6 +1060,9 @@ async function handleApiRoute(req, res, pathname, context) {
|
|
|
1059
1060
|
if (pathname === '/api/live-reload' && req.method === 'GET') {
|
|
1060
1061
|
return await handleLiveReload(res, context);
|
|
1061
1062
|
}
|
|
1063
|
+
if (pathname === '/api/info' && req.method === 'GET') {
|
|
1064
|
+
return await handleGetRuntimeInfo(res, context);
|
|
1065
|
+
}
|
|
1062
1066
|
if (pathname === '/api/dominds/self-update' && req.method === 'POST') {
|
|
1063
1067
|
const body = await readRequestBody(req);
|
|
1064
1068
|
let parsed;
|
|
@@ -2079,6 +2083,20 @@ async function handleLiveReload(res, context) {
|
|
|
2079
2083
|
return true;
|
|
2080
2084
|
}
|
|
2081
2085
|
}
|
|
2086
|
+
/**
|
|
2087
|
+
* Runtime info endpoint
|
|
2088
|
+
*/
|
|
2089
|
+
async function handleGetRuntimeInfo(res, context) {
|
|
2090
|
+
try {
|
|
2091
|
+
respondJson(res, 200, await (0, dominds_runtime_status_1.getDomindsRuntimeStatus)(context.mode));
|
|
2092
|
+
return true;
|
|
2093
|
+
}
|
|
2094
|
+
catch (error) {
|
|
2095
|
+
log.error('Runtime info failed:', error);
|
|
2096
|
+
respondJson(res, 500, { success: false, error: 'Failed to get runtime info' });
|
|
2097
|
+
return true;
|
|
2098
|
+
}
|
|
2099
|
+
}
|
|
2082
2100
|
/**
|
|
2083
2101
|
* Team configuration endpoint
|
|
2084
2102
|
* Returns full team configuration with member defaults, default responder,
|
|
@@ -138,6 +138,8 @@ class HttpServerCore {
|
|
|
138
138
|
if (await (0, api_routes_1.handleApiRoute)(req, res, pathname, apiContext)) {
|
|
139
139
|
return;
|
|
140
140
|
}
|
|
141
|
+
this.sendApiNotFound(res);
|
|
142
|
+
return;
|
|
141
143
|
}
|
|
142
144
|
// Handle static files
|
|
143
145
|
const staticHandled = await (0, static_server_1.serveStatic)(pathname, res, {
|
|
@@ -181,6 +183,15 @@ class HttpServerCore {
|
|
|
181
183
|
});
|
|
182
184
|
res.end(JSON.stringify({ error: 'unauthorized' }));
|
|
183
185
|
}
|
|
186
|
+
sendApiNotFound(res) {
|
|
187
|
+
if (res.headersSent)
|
|
188
|
+
return;
|
|
189
|
+
res.writeHead(404, {
|
|
190
|
+
'Content-Type': 'application/json',
|
|
191
|
+
'Cache-Control': 'no-store',
|
|
192
|
+
});
|
|
193
|
+
res.end(JSON.stringify({ success: false, error: 'Not Found' }));
|
|
194
|
+
}
|
|
184
195
|
/**
|
|
185
196
|
* Start the server on the configured port.
|
|
186
197
|
*/
|
|
@@ -598,7 +598,8 @@ async function handleDeclareSideDialogDead(ws, packet) {
|
|
|
598
598
|
return;
|
|
599
599
|
const askerDialogIdObj = new dialog_1.DialogID(askerDialogId, dialogIdObj.rootId);
|
|
600
600
|
const activeCalleeDispatches = await persistence_1.DialogPersistence.loadActiveCalleeDispatches(askerDialogIdObj, requestedStatus);
|
|
601
|
-
const activeCalleeDispatch = activeCalleeDispatches.find((dispatch) => dispatch.calleeDialogId === dialogIdObj.selfId
|
|
601
|
+
const activeCalleeDispatch = activeCalleeDispatches.find((dispatch) => dispatch.calleeDialogId === dialogIdObj.selfId &&
|
|
602
|
+
dispatch.callId === assignmentFromAsker.callId);
|
|
602
603
|
if (!activeCalleeDispatch) {
|
|
603
604
|
// Asker is not waiting on this sideDialog anymore; do not schedule a continuation drive.
|
|
604
605
|
return;
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { type Reminder } from './tool';
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
export type SharedReminderTarget = Readonly<{
|
|
3
|
+
kind: 'agent';
|
|
4
|
+
agentId: string;
|
|
5
|
+
}> | Readonly<{
|
|
6
|
+
kind: 'task';
|
|
7
|
+
agentId: string;
|
|
8
|
+
taskDocPath: string;
|
|
9
|
+
}>;
|
|
10
|
+
export declare function loadSharedReminders(target: SharedReminderTarget): Promise<Reminder[]>;
|
|
11
|
+
export declare function replaceSharedReminders(target: SharedReminderTarget, reminders: readonly Reminder[]): Promise<void>;
|
|
12
|
+
export declare function mutateSharedReminders<T>(target: SharedReminderTarget, mutate: (reminders: Reminder[]) => Promise<T> | T): Promise<T>;
|