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
package/dist/tools/os.js
CHANGED
|
@@ -311,9 +311,18 @@ function buildShellCmdReminderMeta(previousMeta, daemon, options) {
|
|
|
311
311
|
if (previousMeta.originDialogId !== undefined) {
|
|
312
312
|
nextMeta['originDialogId'] = previousMeta.originDialogId;
|
|
313
313
|
}
|
|
314
|
+
if (previousMeta.originRootId !== undefined) {
|
|
315
|
+
nextMeta['originRootId'] = previousMeta.originRootId;
|
|
316
|
+
}
|
|
314
317
|
if (daemon.processGroupId !== undefined) {
|
|
315
318
|
nextMeta['processGroupId'] = daemon.processGroupId;
|
|
316
319
|
}
|
|
320
|
+
if (previousMeta.exitWakeEventId !== undefined) {
|
|
321
|
+
nextMeta['exitWakeEventId'] = previousMeta.exitWakeEventId;
|
|
322
|
+
}
|
|
323
|
+
if (previousMeta.exitWakeNotifiedAt !== undefined) {
|
|
324
|
+
nextMeta['exitWakeNotifiedAt'] = previousMeta.exitWakeNotifiedAt;
|
|
325
|
+
}
|
|
317
326
|
if (options?.completed) {
|
|
318
327
|
nextMeta['completed'] = true;
|
|
319
328
|
}
|
|
@@ -400,6 +409,141 @@ function stripDaemonLifecyclePhaseSummary(content) {
|
|
|
400
409
|
}
|
|
401
410
|
return normalized.slice(separatorIndex + 2);
|
|
402
411
|
}
|
|
412
|
+
function buildShellCmdExitWakeEventId(meta) {
|
|
413
|
+
return `shellCmd:daemonExited:${String(meta.pid)}:${meta.startTime}`;
|
|
414
|
+
}
|
|
415
|
+
function buildShellCmdExitWakeMeta(meta, eventId, notifiedAt) {
|
|
416
|
+
return {
|
|
417
|
+
...meta,
|
|
418
|
+
exitWakeEventId: eventId,
|
|
419
|
+
exitWakeNotifiedAt: notifiedAt,
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
function assertShellCmdExitWakeNotPreviouslyDelivered(meta, eventId) {
|
|
423
|
+
if (meta.exitWakeEventId !== undefined && meta.exitWakeEventId !== eventId) {
|
|
424
|
+
throw new Error(`shell_cmd daemon wake invariant violation: conflicting exit wake event id for pid ${String(meta.pid)}`);
|
|
425
|
+
}
|
|
426
|
+
if (meta.exitWakeNotifiedAt !== undefined) {
|
|
427
|
+
throw new Error(`shell_cmd daemon wake invariant violation: exit wake event already delivered for pid ${String(meta.pid)}`);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
function assertShellCmdExitWakeDeliveryFieldsConsistent(meta, eventId) {
|
|
431
|
+
if (meta.exitWakeNotifiedAt !== undefined && meta.exitWakeEventId === undefined) {
|
|
432
|
+
throw new Error(`shell_cmd daemon wake invariant violation: exit wake notified timestamp without event id for pid ${String(meta.pid)}`);
|
|
433
|
+
}
|
|
434
|
+
if (meta.exitWakeEventId !== undefined && meta.exitWakeEventId !== eventId) {
|
|
435
|
+
throw new Error(`shell_cmd daemon wake invariant violation: delivered event id mismatch for pid ${String(meta.pid)}`);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
function formatShellCmdDaemonExitWakeContent(args) {
|
|
439
|
+
const prefix = (0, driver_messages_1.formatSystemNoticePrefix)(args.language);
|
|
440
|
+
const status = args.exitCode !== undefined || args.exitSignal !== undefined
|
|
441
|
+
? `code ${String(args.exitCode ?? 'null')}, signal ${String(args.exitSignal ?? 'null')}`
|
|
442
|
+
: args.language === 'zh'
|
|
443
|
+
? '未知(runner 已不可用)'
|
|
444
|
+
: 'unknown (runner unavailable)';
|
|
445
|
+
return args.language === 'zh'
|
|
446
|
+
? `${prefix}
|
|
447
|
+
后台进程已退出。这是 runtime 环境事件,不是新的用户指令。
|
|
448
|
+
|
|
449
|
+
- PID: ${String(args.pid)}
|
|
450
|
+
- 命令: ${args.command}
|
|
451
|
+
- 退出状态: ${status}
|
|
452
|
+
|
|
453
|
+
请根据当前任务上下文判断是否需要查看最终 stdout/stderr 或向用户汇报结果;不要只回复“收到”。`
|
|
454
|
+
: `${prefix}
|
|
455
|
+
A background process has exited. This is a runtime environment event, not a new user instruction.
|
|
456
|
+
|
|
457
|
+
- PID: ${String(args.pid)}
|
|
458
|
+
- Command: ${args.command}
|
|
459
|
+
- Exit status: ${status}
|
|
460
|
+
|
|
461
|
+
Decide from the current task context whether you need to inspect final stdout/stderr or report the result to the user; do not reply with a standalone acknowledgement.`;
|
|
462
|
+
}
|
|
463
|
+
function abortableDelay(ms, signal) {
|
|
464
|
+
return new Promise((resolve) => {
|
|
465
|
+
if (signal.aborted) {
|
|
466
|
+
resolve();
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
let timeout;
|
|
470
|
+
let settled = false;
|
|
471
|
+
const finish = () => {
|
|
472
|
+
if (settled)
|
|
473
|
+
return;
|
|
474
|
+
settled = true;
|
|
475
|
+
clearTimeout(timeout);
|
|
476
|
+
signal.removeEventListener('abort', onAbort);
|
|
477
|
+
resolve();
|
|
478
|
+
};
|
|
479
|
+
const onAbort = () => {
|
|
480
|
+
finish();
|
|
481
|
+
};
|
|
482
|
+
timeout = setTimeout(finish, ms);
|
|
483
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
async function waitForShellCmdReminderWakeEvent(reminder, signal) {
|
|
487
|
+
const eventId = buildShellCmdExitWakeEventId(reminder.meta);
|
|
488
|
+
assertShellCmdExitWakeDeliveryFieldsConsistent(reminder.meta, eventId);
|
|
489
|
+
if (reminder.meta.completed === true) {
|
|
490
|
+
return null;
|
|
491
|
+
}
|
|
492
|
+
if (reminder.meta.exitWakeNotifiedAt !== undefined) {
|
|
493
|
+
return null;
|
|
494
|
+
}
|
|
495
|
+
while (!signal.aborted) {
|
|
496
|
+
const resolved = await resolveDaemonFromMeta(reminder.meta);
|
|
497
|
+
const notifiedAt = (0, time_1.formatUnifiedTimestamp)(new Date());
|
|
498
|
+
const language = (0, work_language_1.getWorkLanguage)();
|
|
499
|
+
if (resolved.kind === 'gone') {
|
|
500
|
+
const isTrackedDaemon = reminder.meta.runnerEndpoint !== undefined || reminder.meta.runnerPid !== undefined;
|
|
501
|
+
if (!isTrackedDaemon)
|
|
502
|
+
return null;
|
|
503
|
+
assertShellCmdExitWakeNotPreviouslyDelivered(reminder.meta, eventId);
|
|
504
|
+
const updatedMeta = buildShellCmdExitWakeMeta(buildShellCmdFinalizedMeta(reminder.meta, notifiedAt), eventId, notifiedAt);
|
|
505
|
+
const updatedContent = formatExitedDaemonReminderContent(reminder.meta.initialCommandLine, reminder.meta.pid, language, stripDaemonLifecyclePhaseSummary(reminder.content));
|
|
506
|
+
return {
|
|
507
|
+
eventId,
|
|
508
|
+
reminderId: reminder.id,
|
|
509
|
+
content: formatShellCmdDaemonExitWakeContent({
|
|
510
|
+
command: reminder.meta.initialCommandLine,
|
|
511
|
+
pid: reminder.meta.pid,
|
|
512
|
+
language,
|
|
513
|
+
}),
|
|
514
|
+
updatedContent,
|
|
515
|
+
updatedMeta,
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
if (resolved.kind === 'error') {
|
|
519
|
+
throw new Error(resolved.errorText);
|
|
520
|
+
}
|
|
521
|
+
const daemon = resolved.daemon;
|
|
522
|
+
if (!daemon.isRunning) {
|
|
523
|
+
assertShellCmdExitWakeNotPreviouslyDelivered(reminder.meta, eventId);
|
|
524
|
+
const updatedContent = formatExitedDaemonReminderContent(daemon.command, reminder.meta.pid, language, formatRunnerBackedDaemonStatusDetails(daemon, language));
|
|
525
|
+
const completedMeta = buildShellCmdReminderMeta(reminder.meta, daemon, {
|
|
526
|
+
completed: true,
|
|
527
|
+
lastUpdated: notifiedAt,
|
|
528
|
+
});
|
|
529
|
+
return {
|
|
530
|
+
eventId,
|
|
531
|
+
reminderId: reminder.id,
|
|
532
|
+
content: formatShellCmdDaemonExitWakeContent({
|
|
533
|
+
command: daemon.command,
|
|
534
|
+
pid: reminder.meta.pid,
|
|
535
|
+
exitCode: daemon.exitCode,
|
|
536
|
+
exitSignal: daemon.exitSignal,
|
|
537
|
+
language,
|
|
538
|
+
}),
|
|
539
|
+
updatedContent,
|
|
540
|
+
updatedMeta: buildShellCmdExitWakeMeta(completedMeta, eventId, notifiedAt),
|
|
541
|
+
};
|
|
542
|
+
}
|
|
543
|
+
await abortableDelay(1000, signal);
|
|
544
|
+
}
|
|
545
|
+
return null;
|
|
546
|
+
}
|
|
403
547
|
function getOsToolMessages(language) {
|
|
404
548
|
if (language === 'zh') {
|
|
405
549
|
return {
|
|
@@ -1162,6 +1306,59 @@ exports.shellCmdReminderOwner = {
|
|
|
1162
1306
|
}),
|
|
1163
1307
|
};
|
|
1164
1308
|
},
|
|
1309
|
+
async waitForReminderWakeEvent(_dlg, reminders, signal) {
|
|
1310
|
+
const candidates = reminders.filter(isShellCmdReminder);
|
|
1311
|
+
if (candidates.length === 0)
|
|
1312
|
+
return null;
|
|
1313
|
+
const controller = new AbortController();
|
|
1314
|
+
const onAbort = () => {
|
|
1315
|
+
controller.abort();
|
|
1316
|
+
};
|
|
1317
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
1318
|
+
if (signal.aborted) {
|
|
1319
|
+
controller.abort();
|
|
1320
|
+
}
|
|
1321
|
+
const pending = candidates.map((reminder) => waitForShellCmdReminderWakeEvent(reminder, controller.signal));
|
|
1322
|
+
return await new Promise((resolve, reject) => {
|
|
1323
|
+
let settled = false;
|
|
1324
|
+
let remaining = pending.length;
|
|
1325
|
+
const cleanup = () => {
|
|
1326
|
+
signal.removeEventListener('abort', onAbort);
|
|
1327
|
+
controller.abort();
|
|
1328
|
+
};
|
|
1329
|
+
const finish = (event) => {
|
|
1330
|
+
if (settled)
|
|
1331
|
+
return;
|
|
1332
|
+
settled = true;
|
|
1333
|
+
cleanup();
|
|
1334
|
+
resolve(event);
|
|
1335
|
+
};
|
|
1336
|
+
const settleEmpty = () => {
|
|
1337
|
+
if (settled)
|
|
1338
|
+
return;
|
|
1339
|
+
remaining -= 1;
|
|
1340
|
+
if (remaining === 0)
|
|
1341
|
+
finish(null);
|
|
1342
|
+
};
|
|
1343
|
+
for (const promise of pending) {
|
|
1344
|
+
void promise
|
|
1345
|
+
.then((event) => {
|
|
1346
|
+
if (event !== null) {
|
|
1347
|
+
finish(event);
|
|
1348
|
+
return;
|
|
1349
|
+
}
|
|
1350
|
+
settleEmpty();
|
|
1351
|
+
})
|
|
1352
|
+
.catch((error) => {
|
|
1353
|
+
if (settled)
|
|
1354
|
+
return;
|
|
1355
|
+
settled = true;
|
|
1356
|
+
cleanup();
|
|
1357
|
+
reject(error instanceof Error ? error : new Error(String(error)));
|
|
1358
|
+
});
|
|
1359
|
+
}
|
|
1360
|
+
});
|
|
1361
|
+
},
|
|
1165
1362
|
async renderReminder(dlg, reminder) {
|
|
1166
1363
|
const language = (0, work_language_1.getWorkLanguage)();
|
|
1167
1364
|
const prefix = (0, driver_messages_1.formatSystemNoticePrefix)(language);
|
|
@@ -1309,6 +1506,7 @@ exports.shellCmdTool = {
|
|
|
1309
1506
|
shell: initialMessage.shell,
|
|
1310
1507
|
startTime: initialMessage.startTime,
|
|
1311
1508
|
originDialogId: dlg.id.selfId,
|
|
1509
|
+
originRootId: dlg.id.rootId,
|
|
1312
1510
|
};
|
|
1313
1511
|
if (initialMessage.processGroupId !== undefined) {
|
|
1314
1512
|
reminderSeedMeta.processGroupId = initialMessage.processGroupId;
|
|
@@ -93,9 +93,9 @@ A: `dialog` reminders are only for the current dialog's working set. `personal`
|
|
|
93
93
|
|
|
94
94
|
A: Use `personal` only for responsibility-related reminders that you should keep seeing in all later dialogs you lead. Everything else should default to `dialog`.
|
|
95
95
|
|
|
96
|
-
### Q:
|
|
96
|
+
### Q: Do mind_more / change_mind reset dialog rounds?
|
|
97
97
|
|
|
98
|
-
A: No. `change_mind` only
|
|
98
|
+
A: No. `mind_more` / `change_mind` only update Taskdoc content; they do not reset dialog rounds.
|
|
99
99
|
|
|
100
100
|
### Q: Are taskdoc updates immediately visible to all teammates?
|
|
101
101
|
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
control is Dominds' **dialog control toolset** for managing dialog state, reminders, taskdocs, and inter-dialog reply closure semantics:
|
|
28
28
|
|
|
29
29
|
- **Reminder management**: Two reminder scopes. Default to dialog-local working set; use `personal` only for responsibility-linked notes that you should keep seeing in all later dialogs you lead
|
|
30
|
-
- **Taskdoc operations**:
|
|
30
|
+
- **Taskdoc operations**: Append to or replace task contract sections (goals/constraints/progress); within Taskdoc, `progress` is the team-shared, quasi-real-time, scannable task bulletin board
|
|
31
31
|
- **Context maintenance**: Reduce cognitive load without losing key resume state
|
|
32
32
|
- **Reply routing**: Separate `tellaskBack`, `replyTellask*`, and plain text by responsibility in Side Dialog / ask-back flows
|
|
33
33
|
|
|
@@ -40,7 +40,7 @@ Default to `dialog`. Use `personal` only when you should keep seeing that note i
|
|
|
40
40
|
- `personal` reminders stay visible in all later dialogs you lead
|
|
41
41
|
- Can be added, modified, or deleted at any time
|
|
42
42
|
- Should stay compact, scannable, and directly actionable by default
|
|
43
|
-
- Before `clear_mind`,
|
|
43
|
+
- Before `clear_mind`, the Main Dialog first records undocumented discussion details the next course needs to know into Taskdoc, then creates a structured continuation-package reminder; a Side Dialog directly maintains sufficiently detailed continuation-package reminders. If the current course is already under system remediation, Side Dialog reminder length has no technical limit and rough multi-reminder carry-over is acceptable
|
|
44
44
|
|
|
45
45
|
**Difference from memory:**
|
|
46
46
|
| Feature | dialog reminder | personal reminder | personal memory |
|
|
@@ -73,20 +73,23 @@ Taskdoc is a **task contract** and the task's **team-shared source of current tr
|
|
|
73
73
|
|
|
74
74
|
**Update Rules:**
|
|
75
75
|
|
|
76
|
-
-
|
|
76
|
+
- `mind_more` appends small entries; `change_mind` replaces a full section
|
|
77
77
|
- Does not reset dialog rounds
|
|
78
78
|
- Changes visible to all teammates
|
|
79
79
|
- When writing `progress`, assume teammates will skim it to synchronize on the current task truth rather than read your private process log
|
|
80
|
+
- Do not keep blindly calling `mind_more` until `progress` becomes a chronology; when the bulletin board starts accumulating duplicates, stale entries, or noisy history, use `change_mind` to condense it around facts that are still effective now
|
|
81
|
+
- Detailed investigations, long logs, full plans, acceptance records, and expanded rationale belong in formal rtws documentation; Taskdoc should keep only the key point, current conclusion, next step, and a location pointer such as path/section/command
|
|
80
82
|
|
|
81
83
|
## Tool Overview
|
|
82
84
|
|
|
83
|
-
| Tool | Function
|
|
84
|
-
| --------------- |
|
|
85
|
-
| add_reminder | Add reminder
|
|
86
|
-
| delete_reminder | Delete reminder
|
|
87
|
-
| update_reminder | Update reminder content
|
|
88
|
-
|
|
|
89
|
-
|
|
|
85
|
+
| Tool | Function |
|
|
86
|
+
| --------------- | ---------------------------------------------------- |
|
|
87
|
+
| add_reminder | Add reminder |
|
|
88
|
+
| delete_reminder | Delete reminder |
|
|
89
|
+
| update_reminder | Update reminder content |
|
|
90
|
+
| mind_more | Append entries to Taskdoc (defaults to progress) |
|
|
91
|
+
| change_mind | Replace Taskdoc section (goals/constraints/progress) |
|
|
92
|
+
| recall_taskdoc | Read taskdoc chapter |
|
|
90
93
|
|
|
91
94
|
## Inter-dialog Reply Routing
|
|
92
95
|
|
|
@@ -127,9 +130,11 @@ Taskdoc is a **task contract** and the task's **team-shared source of current tr
|
|
|
127
130
|
|
|
128
131
|
- Keep concise: reminders are often 1-3 items; prefer `update_reminder` to compress/merge
|
|
129
132
|
- Separate carriers: information that must synchronize the team's current effective state, key decisions, next steps, or still-active blockers belongs in `progress`, the quasi-real-time task bulletin board; reminders keep local resume details
|
|
130
|
-
- Team-facing: keep `progress` scannable and centered on what is still effective now; do not let it degrade into a personal log, raw chronology, scratchpad, or stale history pile
|
|
131
|
-
-
|
|
133
|
+
- Team-facing: keep `progress` scannable and centered on what is still effective now; do not let it degrade into a personal log, raw chronology, scratchpad, or stale history pile. Use `mind_more` for small additions and `change_mind` when cleanup/reordering/compression is needed
|
|
134
|
+
- Condense when needed: `mind_more` is not the default bookkeeping move. If one topic already has several phase notes, prefer `change_mind` to merge them into the current summary; put the detailed expansion in formal rtws documentation and keep a document pointer in Taskdoc
|
|
135
|
+
- Collapse before clearing: the Main Dialog first records undocumented discussion details the next course needs to know into the appropriate Taskdoc sections, then creates a structured continuation-package reminder; a Side Dialog must not maintain Taskdoc or draft Taskdoc update proposals, and should directly maintain sufficiently detailed continuation-package reminders. If the current course is already under system remediation, rough multi-reminder carry-over is acceptable but must be reconciled first in the new course
|
|
132
136
|
- Avoid raw-material dumps: do not paste long logs or large tool outputs into reminders
|
|
137
|
+
- Documentation layering: Taskdoc says “what the team should sync on / do next now”; formal rtws documentation carries “why, how, detailed evidence, and the full process”. When Taskdoc references formal rtws documentation, use a stable path/section name/relevant command instead of copying the full content
|
|
133
138
|
|
|
134
139
|
### 4. What Belongs in `progress`
|
|
135
140
|
|
|
@@ -138,16 +143,18 @@ Taskdoc is a **task contract** and the task's **team-shared source of current tr
|
|
|
138
143
|
- blockers that are confirmed and still active
|
|
139
144
|
- the next step the team should currently align on
|
|
140
145
|
- completed stage closures and remaining gaps
|
|
146
|
+
- a short summary of content already written to formal rtws documentation, plus a pointer to that document
|
|
141
147
|
- Poor fits for `progress`:
|
|
142
148
|
- “I just read file X”
|
|
143
149
|
- “I might try a small idea next”
|
|
144
150
|
- scratch notes only useful to the current speaker
|
|
145
151
|
- historical traces whose current validity is unclear
|
|
152
|
+
- detailed expansions, long logs, full plans, or acceptance-record text that belongs in formal rtws documentation
|
|
146
153
|
|
|
147
154
|
## Limitations and Notes
|
|
148
155
|
|
|
149
156
|
1. `dialog` reminders end with the dialog; `personal` reminders stay visible in all later dialogs you lead
|
|
150
|
-
2. Taskdoc
|
|
151
|
-
3. `change_mind`
|
|
152
|
-
4. A continuation-package reminder should keep only details not
|
|
157
|
+
2. Use `mind_more` for small Taskdoc additions; use `change_mind` for full-section replacement and merge existing content first. Do not treat `mind_more` as a chronology tool; when cleanup, stale-entry removal, or same-topic consolidation is needed, use `change_mind`
|
|
158
|
+
3. `mind_more` / `change_mind` do not reset dialog rounds
|
|
159
|
+
4. A continuation-package reminder should keep only details still not covered by Taskdoc but easy to lose during resume; in the Main Dialog, undocumented discussion details from current dialog history that the next course needs to know should be written to the appropriate Taskdoc sections first; in a Side Dialog under caution/critical remediation, maintain sufficiently detailed continuation-package reminders only
|
|
153
160
|
5. Do not turn `personal` reminders into a long-term fact dump; move durable knowledge into `personal_memory`
|
|
@@ -117,15 +117,23 @@ replyTellaskBack({
|
|
|
117
117
|
|
|
118
118
|
### Scenario Description
|
|
119
119
|
|
|
120
|
-
Announce the current effective state, key decisions, next step, and still-active blockers to the whole team rather than writing a private chronology.
|
|
120
|
+
Announce the current effective state, key decisions, next step, and still-active blockers to the whole team rather than writing a private chronology. If details have been organized into formal rtws documentation, `progress` should keep only the summary and document pointer.
|
|
121
121
|
|
|
122
122
|
### Example
|
|
123
123
|
|
|
124
124
|
```typescript
|
|
125
|
+
// Small additions that are still effective now
|
|
126
|
+
mind_more({
|
|
127
|
+
items: [
|
|
128
|
+
'- Next: verify control / team_mgmt manuals and tests are aligned (details: <doc-path>#<section>)',
|
|
129
|
+
],
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
// Full-section replacement when cleanup, reordering, same-topic consolidation, or chronology compression is needed
|
|
125
133
|
change_mind({
|
|
126
134
|
selector: 'progress',
|
|
127
135
|
content:
|
|
128
|
-
'## Progress\n\n### Current Effective State\n- The memory-carrier boundary cleanup is complete; next we strengthen the Taskdoc bulletin-board semantics
|
|
136
|
+
'## Progress\n\n### Current Effective State\n- The memory-carrier boundary cleanup is complete; next we strengthen the Taskdoc bulletin-board semantics; details: <doc-path>#<section>\n\n### Decisions In Effect\n- `personal_memory` is no longer treated as a short-term junk drawer\n- `team_memory` now carries only long-lived team conventions and invariants\n\n### Next Step\n- Add stronger `progress` bulletin-board guidance in control / team_mgmt manuals\n\n### Still-Active Blockers\n- None',
|
|
129
137
|
});
|
|
130
138
|
```
|
|
131
139
|
|
|
@@ -187,7 +195,7 @@ recall_taskdoc({
|
|
|
187
195
|
|
|
188
196
|
### Scenario Description
|
|
189
197
|
|
|
190
|
-
Maintain taskdoc integrity and consistency, and keep `progress` as a team-scannable current-truth snapshot.
|
|
198
|
+
Maintain taskdoc integrity and consistency, and keep `progress` as a team-scannable current-truth snapshot; put detailed expansion in formal rtws documentation and keep only the summary plus location pointer in Taskdoc.
|
|
191
199
|
|
|
192
200
|
### Example
|
|
193
201
|
|
|
@@ -196,6 +204,6 @@ Maintain taskdoc integrity and consistency, and keep `progress` as a team-scanna
|
|
|
196
204
|
change_mind({
|
|
197
205
|
selector: 'progress',
|
|
198
206
|
content:
|
|
199
|
-
'## Progress\n\n### Current Effective State\n- The boundary wording has been propagated into handbook sources and tests
|
|
207
|
+
'## Progress\n\n### Current Effective State\n- The boundary wording has been propagated into handbook sources and tests; details: <doc-path>#<section>\n\n### Decisions In Effect\n- role assets / personal_memory / team_memory / Taskdoc-progress / reminders now have separated responsibilities\n\n### Next Step\n- Re-verify control manual wording, Taskdoc display text, and boundary tests\n\n### Still-Active Blockers\n- None',
|
|
200
208
|
});
|
|
201
209
|
```
|
|
@@ -45,7 +45,7 @@ Add reminder.
|
|
|
45
45
|
Use when:
|
|
46
46
|
|
|
47
47
|
- Adding a new temporary working-set item
|
|
48
|
-
-
|
|
48
|
+
- Before `clear_mind`, the Main Dialog first records undocumented discussion details the next course needs to know into Taskdoc, then creates continuation-package notes; a Side Dialog directly maintains sufficiently detailed continuation-package reminders. When the current course is already under caution/critical remediation, Side Dialog reminder length has no technical limit and rough bridge notes are acceptable
|
|
49
49
|
|
|
50
50
|
**Parameters:**
|
|
51
51
|
|
|
@@ -160,7 +160,37 @@ updated_at: <update timestamp>
|
|
|
160
160
|
- Changes visible to all teammates
|
|
161
161
|
- Constraint rule: `constraints` must include only task-specific hard requirements; do not repeat global rules. If a duplicate is found, delete it and inform the user
|
|
162
162
|
|
|
163
|
-
### 6.
|
|
163
|
+
### 6. mind_more
|
|
164
|
+
|
|
165
|
+
Append entries to a Taskdoc section; defaults to `progress`, reducing full-section replacement pressure.
|
|
166
|
+
|
|
167
|
+
**Parameters:**
|
|
168
|
+
|
|
169
|
+
- `items` (required): Entries to append; each item must be a non-empty string
|
|
170
|
+
- `sep` (optional): Separator between existing content and new content, and between entries. Defaults to `\n`
|
|
171
|
+
- `selector` (optional): Chapter selector. Defaults to `progress`; use `goals` / `constraints` / `progress`
|
|
172
|
+
- `category` (optional): Extra section directory; with `selector`, targets `<category>/<selector>.md`
|
|
173
|
+
|
|
174
|
+
**Example:**
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
mind_more({
|
|
178
|
+
items: [
|
|
179
|
+
'- Next: review verification results (details: <doc-path>#<section>)',
|
|
180
|
+
'- Blocker: API acceptance criteria pending',
|
|
181
|
+
],
|
|
182
|
+
});
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Characteristics:**
|
|
186
|
+
|
|
187
|
+
- Append-only: it does not deduplicate, rewrite, or compress old content
|
|
188
|
+
- Good for adding one or two still-effective states, decisions, next steps, or blockers to `progress`
|
|
189
|
+
- Not for appending every investigation step, long log, full plan, or acceptance record as a chronology; those details belong in formal rtws documentation, while Taskdoc keeps the summary and document pointer
|
|
190
|
+
- If stale entries must be removed, reordered, or compressed, use `change_mind` for a full-section replacement
|
|
191
|
+
- When one topic already has several phase notes, prefer `change_mind` to merge them into a concise current announcement instead of continuing to call `mind_more`
|
|
192
|
+
|
|
193
|
+
### 7. recall_taskdoc
|
|
164
194
|
|
|
165
195
|
Read taskdoc chapter.
|
|
166
196
|
|
|
@@ -230,11 +260,21 @@ update_reminder({
|
|
|
230
260
|
|
|
231
261
|
### Update Taskdoc Progress
|
|
232
262
|
|
|
263
|
+
```typescript
|
|
264
|
+
mind_more({
|
|
265
|
+
items: [
|
|
266
|
+
'- Next: strengthen the bulletin-board semantics of Taskdoc `progress` (details: <doc-path>#<section>)',
|
|
267
|
+
],
|
|
268
|
+
});
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### Replace Taskdoc Progress
|
|
272
|
+
|
|
233
273
|
```typescript
|
|
234
274
|
change_mind({
|
|
235
275
|
selector: 'progress',
|
|
236
276
|
content:
|
|
237
|
-
'## Progress\n\n### Current Effective State\n- The handbook boundary split is now agreed: role assets / personal long-lived experience / Taskdoc-progress / reminders
|
|
277
|
+
'## Progress\n\n### Current Effective State\n- The handbook boundary split is now agreed: role assets / personal long-lived experience / Taskdoc-progress / reminders; details: <doc-path>#<section>\n\n### Decisions In Effect\n- `persona / knowhow / pitfalls` no longer absorb daily member experience\n- `personal_memory` is reserved for one member\\'s reusable long-lived experience\n\n### Next Step\n- Strengthen the bulletin-board semantics of Taskdoc `progress`\n\n### Still-Active Blockers\n- None',
|
|
238
278
|
});
|
|
239
279
|
```
|
|
240
280
|
|
|
@@ -274,6 +314,6 @@ message: <error message>
|
|
|
274
314
|
|
|
275
315
|
- Normal reminders should stay concise, fresh, and directly actionable; often 1-3 items total
|
|
276
316
|
- For a continuation package, use structured notes by default: next step, key pointers, run/verify, easy-to-lose volatile details
|
|
277
|
-
- If the current course is already under caution/critical remediation
|
|
278
|
-
- Keep only details not
|
|
317
|
+
- If the current course is already under caution/critical remediation: the Main Dialog first records undocumented discussion details the next course needs to know into the appropriate Taskdoc sections, then keeps necessary continuation-package reminders; a Side Dialog must not maintain Taskdoc or draft Taskdoc update proposals, and should directly maintain sufficiently detailed continuation-package reminders with no technical length limit. Rough multi-reminder bridge notes are acceptable and should be reconciled as the first step only after the system actually starts the new course
|
|
318
|
+
- Keep only details still not covered by Taskdoc; do not repeat team-shared status. If the team needs “where we are now / which decisions are in effect / what is next / which blockers still hold”, write it back to Taskdoc `progress`
|
|
279
319
|
- Do not paste long logs, large tool outputs, or raw material into reminders
|
|
@@ -93,9 +93,9 @@ A: `dialog` 提醒只用于当前对话的工作集。`personal` 提醒会在所
|
|
|
93
93
|
|
|
94
94
|
A: 只有当这条提醒与你的持续职责相关,且在所有由你主理的后续对话里也应该继续被看到时,才用 `personal`。其它情况默认都用 `dialog`。
|
|
95
95
|
|
|
96
|
-
### Q: change_mind 会重置对话轮次吗?
|
|
96
|
+
### Q: mind_more / change_mind 会重置对话轮次吗?
|
|
97
97
|
|
|
98
|
-
A: 不会。`change_mind` 仅更新差遣牒内容,不重置对话轮次。
|
|
98
|
+
A: 不会。`mind_more` / `change_mind` 仅更新差遣牒内容,不重置对话轮次。
|
|
99
99
|
|
|
100
100
|
### Q: 差遣牒更新后立即对所有队友可见吗?
|
|
101
101
|
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
control 是 Dominds 的**对话控制工具集**,用于管理对话状态、提醒、差遣牒,以及跨对话回复收口语义:
|
|
28
28
|
|
|
29
29
|
- **提醒管理**:提醒分 `dialog` / `personal` 两个 scope;默认保持对话内工作集,只有职责相关且在所有由你主理的后续对话里也应继续看到的提醒才用 `personal`
|
|
30
|
-
-
|
|
30
|
+
- **差遣牒操作**:追加或替换任务契约章节(goals/constraints/progress);其中 `progress` 是全队共享、准实时、可扫读的任务公告牌
|
|
31
31
|
- **上下文维护**:在不丢关键恢复线索的前提下降低认知负载
|
|
32
32
|
- **回复路由**:在支线/回问语境下,区分 `tellaskBack`、`replyTellask*` 与普通文本的职责边界
|
|
33
33
|
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
- `personal` 提醒会在所有由你主理的后续对话里继续可见
|
|
41
41
|
- 可随时添加、修改、删除
|
|
42
42
|
- 默认应保持少量、可扫读、可直接指导下一步
|
|
43
|
-
- 准备 `clear_mind`
|
|
43
|
+
- 准备 `clear_mind` 时,主线对话先把应由下一程知会的未落文档讨论细节补进差遣牒,再压缩成结构化接续包提醒项;支线对话直接维护足够详尽的接续包提醒项。若当前程已被系统置于吃紧/告急处置态,支线提醒项长度没有技术限制,也可先保留多条粗略提醒项过桥
|
|
44
44
|
|
|
45
45
|
**与 memory 的区别:**
|
|
46
46
|
| 特性 | dialog reminder | personal reminder | personal memory |
|
|
@@ -73,20 +73,23 @@
|
|
|
73
73
|
|
|
74
74
|
**更新规则:**
|
|
75
75
|
|
|
76
|
-
-
|
|
76
|
+
- `mind_more` 用于少量追加条目;`change_mind` 用于整章替换
|
|
77
77
|
- 不重置对话轮次
|
|
78
78
|
- 变更对所有队友可见
|
|
79
79
|
- 写入 `progress` 时,应默认假设全队成员会用它快速同步“当前任务真相”,而不是阅读你的个人过程记录
|
|
80
|
+
- 不要无脑连续使用 `mind_more` 把 `progress` 写成流水账;当公告牌开始堆积、重复或含过期信息时,用 `change_mind` 按当前仍有效的事实压缩整理
|
|
81
|
+
- 细节展开、调查过程、长日志、方案全文和验收记录应落进 rtws 正式文档;差遣牒只保留要点、当前结论、下一步,以及指向正式文档的路径/章节/命令等定位 pointer
|
|
80
82
|
|
|
81
83
|
## 工具概览
|
|
82
84
|
|
|
83
|
-
| 工具 | 功能
|
|
84
|
-
| --------------- |
|
|
85
|
-
| add_reminder | 添加提醒
|
|
86
|
-
| delete_reminder | 删除提醒
|
|
87
|
-
| update_reminder | 更新提醒内容
|
|
88
|
-
|
|
|
89
|
-
|
|
|
85
|
+
| 工具 | 功能 |
|
|
86
|
+
| --------------- | -------------------------------------------- |
|
|
87
|
+
| add_reminder | 添加提醒 |
|
|
88
|
+
| delete_reminder | 删除提醒 |
|
|
89
|
+
| update_reminder | 更新提醒内容 |
|
|
90
|
+
| mind_more | 向差遣牒追加条目(默认 progress) |
|
|
91
|
+
| change_mind | 整章替换差遣牒(goals/constraints/progress) |
|
|
92
|
+
| recall_taskdoc | 读取差遣牒章节 |
|
|
90
93
|
|
|
91
94
|
## 跨对话回复路由
|
|
92
95
|
|
|
@@ -127,9 +130,11 @@
|
|
|
127
130
|
|
|
128
131
|
- 保持简洁:默认提醒项常见 1–3 条,优先 `update_reminder` 压缩/合并
|
|
129
132
|
- 区分载体:需要向全队同步的当前有效状态、关键决策、下一步与仍成立阻塞,写入 `progress` 这一准实时任务公告牌;提醒项只留个人/当前对话恢复所需细节
|
|
130
|
-
- 面向全队:`progress`
|
|
131
|
-
-
|
|
133
|
+
- 面向全队:`progress` 应保持可扫读、以“当前仍有效”为准,不要退化成个人日志、流水账、临时便签或历史残影堆积;少量新增用 `mind_more`,需要清旧/重排/压缩时用 `change_mind`
|
|
134
|
+
- 按需整理:`mind_more` 不是默认记账动作。若同一主题已有多条阶段性记录,优先用 `change_mind` 合并成当前摘要;把细节放进 rtws 正式文档,并在差遣牒里保留文档定位 pointer
|
|
135
|
+
- 换程前收束:主线对话先把尚未落实到文档、且下一程需要知会的讨论细节写入差遣牒合适章节,再整理结构化接续包提醒项;支线对话不要维护差遣牒,也不要整理差遣牒更新提案,直接维护足够详尽的接续包提醒项。若系统已把当前程切到吃紧/告急处置态,则先保留多条粗略提醒项过桥也可以;当前程只做落文档/保信息 + `clear_mind`(支线只做保信息 + `clear_mind`),系统真正开启新一程后第一步再收敛
|
|
132
136
|
- 拒绝原料堆积:不要把长日志/大段 tool output 直接塞进提醒项
|
|
137
|
+
- 文档分层:差遣牒写“现在应如何同步/推进”,正式文档写“为什么、怎么做、详细证据和完整过程”。差遣牒需要引用正式文档时,写稳定路径/章节名/相关命令,而不是复制整段内容
|
|
133
138
|
|
|
134
139
|
### 4. `progress` 内容取舍
|
|
135
140
|
|
|
@@ -138,16 +143,18 @@
|
|
|
138
143
|
- 当前已确认、仍成立的 blocker
|
|
139
144
|
- 当前全队应共识的下一步
|
|
140
145
|
- 当前阶段性闭环与尚未闭环的 gap
|
|
146
|
+
- 已落正式文档的关键内容摘要,以及定位该文档的 pointer
|
|
141
147
|
- 不适合写进 `progress`:
|
|
142
148
|
- “我刚刚看了什么文件”
|
|
143
149
|
- “我准备先试一个小想法”
|
|
144
150
|
- 只对当前说话者自己有用的临时便签
|
|
145
151
|
- 无法判断是否仍然有效的历史痕迹
|
|
152
|
+
- 可在 rtws 正式文档中承载的细节展开、长日志、完整方案或验收记录全文
|
|
146
153
|
|
|
147
154
|
## 限制与注意事项
|
|
148
155
|
|
|
149
156
|
1. `dialog` 提醒会随对话结束而结束;`personal` 提醒会在所有由你主理的后续对话里继续可见
|
|
150
|
-
2.
|
|
151
|
-
3. `change_mind` 不重置对话轮次
|
|
152
|
-
4.
|
|
157
|
+
2. 差遣牒少量新增可用 `mind_more` 追加;整段替换用 `change_mind`,请确保合并已有内容。不要把 `mind_more` 当流水账工具;需要整理、去旧、合并同主题记录时直接 `change_mind`
|
|
158
|
+
3. `mind_more` / `change_mind` 不重置对话轮次
|
|
159
|
+
4. 接续包提醒项只保留差遣牒仍未覆盖、但恢复工作容易丢的细节;主线对话应先把当前对话历史中应由下一程知会的未落文档讨论细节写入差遣牒合适章节;支线对话在吃紧/告急时只维护足够详尽的接续包提醒项
|
|
153
160
|
5. 不要把 `personal` 提醒堆成长期事实仓库;耐久知识应迁到 `personal_memory`
|
|
@@ -116,15 +116,21 @@ replyTellaskBack({
|
|
|
116
116
|
|
|
117
117
|
### 场景描述
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
把当前有效状态、关键决策、下一步与仍成立阻塞公告给全队,而不是写个人流水账。若细节已整理到 rtws 正式文档,`progress` 只写摘要和文档定位 pointer。
|
|
120
120
|
|
|
121
121
|
### 示例
|
|
122
122
|
|
|
123
123
|
```typescript
|
|
124
|
+
// 少量新增当前仍有效的公告条目
|
|
125
|
+
mind_more({
|
|
126
|
+
items: ['- 下一步:复核 control / team_mgmt 手册与测试是否对齐(详见 <文档路径>#<章节>)'],
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// 需要清理旧项、重排、同主题合并或压缩流水账时,整章替换
|
|
124
130
|
change_mind({
|
|
125
131
|
selector: 'progress',
|
|
126
132
|
content:
|
|
127
|
-
'## Progress\n\n### 当前有效状态\n- 已完成三类记忆载体边界收口,准备补 Taskdoc
|
|
133
|
+
'## Progress\n\n### 当前有效状态\n- 已完成三类记忆载体边界收口,准备补 Taskdoc 公告牌属性;细节见 <文档路径>#<章节>\n\n### 已生效决策\n- `personal_memory` 不再作为短期杂物柜\n- `team_memory` 只承接团队长期共识与不变量\n\n### 下一步\n- 在 control / team_mgmt 手册中补强 `progress` 的公告牌语义\n\n### 仍成立阻塞\n- 无',
|
|
128
134
|
});
|
|
129
135
|
```
|
|
130
136
|
|
|
@@ -186,7 +192,7 @@ recall_taskdoc({
|
|
|
186
192
|
|
|
187
193
|
### 场景描述
|
|
188
194
|
|
|
189
|
-
维护差遣牒的完整性和一致性,并确保 `progress`
|
|
195
|
+
维护差遣牒的完整性和一致性,并确保 `progress` 始终是可供全队扫读的当前真相快照;细节展开放入 rtws 正式文档,差遣牒只保留摘要和定位 pointer。
|
|
190
196
|
|
|
191
197
|
### 示例
|
|
192
198
|
|
|
@@ -195,6 +201,6 @@ recall_taskdoc({
|
|
|
195
201
|
change_mind({
|
|
196
202
|
selector: 'progress',
|
|
197
203
|
content:
|
|
198
|
-
'## Progress\n\n### 当前有效状态\n-
|
|
204
|
+
'## Progress\n\n### 当前有效状态\n- 边界口径已统一到手册源头与测试;细节见 <文档路径>#<章节>\n\n### 已生效决策\n- 角色级资产 / personal_memory / team_memory / Taskdoc-progress / reminders 的职责已经切开\n\n### 下一步\n- 复验 control 手册、Taskdoc 展示文案与边界测试\n\n### 仍成立阻塞\n- 无',
|
|
199
205
|
});
|
|
200
206
|
```
|