dominds 1.18.2 → 1.19.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/dist/access-control.js +6 -6
- package/dist/apps/runtime.d.ts +2 -2
- package/dist/apps/runtime.js +28 -28
- package/dist/apps-host/client.d.ts +1 -1
- package/dist/apps-host/host.js +7 -7
- package/dist/apps-host/ipc-types.d.ts +2 -2
- package/dist/apps-host/ipc-types.js +10 -10
- package/dist/cli/read.d.ts +0 -1
- package/dist/cli/read.js +1 -6
- package/dist/dialog-display-state.d.ts +6 -6
- package/dist/dialog-display-state.js +46 -46
- package/dist/dialog-factory.d.ts +12 -12
- package/dist/dialog-factory.js +33 -30
- package/dist/dialog-fork.d.ts +2 -2
- package/dist/dialog-fork.js +140 -115
- package/dist/dialog-global-registry.d.ts +5 -5
- package/dist/dialog-global-registry.js +11 -11
- package/dist/dialog-instance-registry.d.ts +3 -3
- package/dist/dialog-instance-registry.js +52 -41
- package/dist/dialog.d.ts +100 -113
- package/dist/dialog.js +274 -229
- package/dist/docs/agent-priming.md +5 -5
- package/dist/docs/agent-priming.zh.md +5 -5
- package/dist/docs/app-constitution.md +1 -1
- package/dist/docs/app-constitution.zh.md +1 -1
- package/dist/docs/cli-usage.md +1 -1
- package/dist/docs/cli-usage.zh.md +1 -1
- package/dist/docs/design.md +14 -14
- package/dist/docs/design.zh.md +14 -14
- package/dist/docs/dialog-persistence.md +58 -58
- package/dist/docs/dialog-persistence.zh.md +61 -61
- package/dist/docs/dialog-system.md +363 -367
- package/dist/docs/dialog-system.zh.md +355 -357
- package/dist/docs/diligence-push.md +18 -18
- package/dist/docs/diligence-push.zh.md +17 -17
- package/dist/docs/dominds-agent-collaboration.zh.md +3 -3
- package/dist/docs/dominds-terminology.md +46 -47
- package/dist/docs/encapsulated-taskdoc.md +4 -4
- package/dist/docs/encapsulated-taskdoc.zh.md +3 -3
- package/dist/docs/fbr.md +30 -30
- package/dist/docs/fbr.zh.md +15 -15
- package/dist/docs/i18n.md +2 -2
- package/dist/docs/i18n.zh.md +2 -2
- package/dist/docs/mcp-support.md +5 -4
- package/dist/docs/mcp-support.zh.md +3 -2
- package/dist/docs/memory-system.md +4 -4
- package/dist/docs/memory-system.zh.md +1 -1
- package/dist/docs/mottos.md +1 -1
- package/dist/docs/mottos.zh.md +1 -1
- package/dist/docs/q4h.md +3 -3
- package/dist/docs/q4h.zh.md +1 -1
- package/dist/docs/roadmap.md +2 -2
- package/dist/docs/team_mgmt-toolset.md +11 -3
- package/dist/docs/team_mgmt-toolset.zh.md +9 -2
- package/dist/docs/tellask-collab.md +18 -18
- package/dist/docs/tellask-collab.zh.md +8 -8
- package/dist/docs/tellask-revive-context-refactor.zh.md +591 -0
- package/dist/evt-registry.d.ts +1 -2
- package/dist/evt-registry.js +2 -7
- package/dist/llm/gen/mock.js +9 -0
- package/dist/llm/kernel-driver/context.d.ts +1 -2
- package/dist/llm/kernel-driver/context.js +12 -26
- package/dist/llm/kernel-driver/drive.js +99 -75
- package/dist/llm/kernel-driver/engine.d.ts +2 -2
- package/dist/llm/kernel-driver/engine.js +10 -10
- package/dist/llm/kernel-driver/fbr.js +6 -6
- package/dist/llm/kernel-driver/flow.d.ts +1 -1
- package/dist/llm/kernel-driver/flow.js +129 -93
- package/dist/llm/kernel-driver/guardrails.js +4 -4
- package/dist/llm/kernel-driver/index.d.ts +1 -1
- package/dist/llm/kernel-driver/index.js +2 -2
- package/dist/llm/kernel-driver/loop.js +30 -30
- package/dist/llm/kernel-driver/reply-guidance.js +47 -52
- package/dist/llm/kernel-driver/restore.d.ts +3 -3
- package/dist/llm/kernel-driver/restore.js +23 -28
- package/dist/llm/kernel-driver/runtime.d.ts +1 -1
- package/dist/llm/kernel-driver/runtime.js +1 -1
- package/dist/llm/kernel-driver/sideDialog-txn.d.ts +8 -0
- package/dist/llm/kernel-driver/{subdialog-txn.js → sideDialog-txn.js} +13 -13
- package/dist/llm/kernel-driver/{subdialog.d.ts → sideDialog.d.ts} +13 -13
- package/dist/llm/kernel-driver/{subdialog.js → sideDialog.js} +203 -170
- package/dist/llm/kernel-driver/tellask-special.d.ts +7 -3
- package/dist/llm/kernel-driver/tellask-special.js +474 -497
- package/dist/llm/kernel-driver/types.d.ts +25 -9
- package/dist/mcp/config.d.ts +1 -0
- package/dist/mcp/config.js +7 -2
- package/dist/mcp/supervisor.d.ts +2 -0
- package/dist/mcp/supervisor.js +2 -1
- package/dist/minds/builtin/pangu/persona.en.md +4 -4
- package/dist/minds/load.js +6 -6
- package/dist/minds/system-prompt-parts.d.ts +1 -1
- package/dist/minds/system-prompt-parts.js +12 -12
- package/dist/minds/system-prompt.d.ts +1 -1
- package/dist/minds/system-prompt.js +56 -56
- package/dist/persistence-errors.d.ts +1 -1
- package/dist/persistence.d.ts +126 -121
- package/dist/persistence.js +1190 -786
- package/dist/priming.d.ts +3 -3
- package/dist/priming.js +62 -61
- package/dist/recovery/reply-special.js +5 -5
- package/dist/runtime/driver-messages.d.ts +3 -2
- package/dist/runtime/driver-messages.js +68 -57
- package/dist/runtime/inter-dialog-format.d.ts +12 -10
- package/dist/runtime/inter-dialog-format.js +80 -35
- package/dist/runtime/interjection-pause-stop.js +1 -1
- package/dist/runtime/reply-prompt-copy.d.ts +7 -3
- package/dist/runtime/reply-prompt-copy.js +39 -14
- package/dist/server/api-routes.js +87 -83
- package/dist/server/static-server.js +1 -1
- package/dist/server/websocket-handler.js +163 -153
- package/dist/tool-availability.js +1 -1
- package/dist/tools/app-reminders.js +17 -4
- package/dist/tools/ctrl.js +5 -5
- package/dist/tools/os.js +16 -16
- package/dist/tools/pending-tellask-reminder.js +20 -14
- package/dist/tools/prompts/control/en/index.md +1 -1
- package/dist/tools/prompts/control/en/principles.md +8 -8
- package/dist/tools/prompts/control/en/scenarios.md +7 -7
- package/dist/tools/prompts/control/en/tools.md +7 -7
- package/dist/tools/prompts/control/zh/principles.md +4 -4
- package/dist/tools/prompts/control/zh/scenarios.md +5 -5
- package/dist/tools/prompts/control/zh/tools.md +3 -3
- package/dist/tools/prompts/team_memory/en/scenarios.md +1 -1
- package/dist/tools/prompts/team_memory/zh/scenarios.md +1 -1
- package/dist/tools/team_mgmt-manual.js +2 -2
- package/dist/tools/team_mgmt-mcp-manual.js +10 -0
- package/dist/tools/team_mgmt.js +4 -4
- package/dist/utils/taskdoc.js +12 -12
- package/package.json +3 -3
- package/webapp/dist/assets/{_basePickBy-BPJaiZdW.js → _basePickBy-B7M9Q0Fa.js} +3 -3
- package/webapp/dist/assets/_basePickBy-B7M9Q0Fa.js.map +1 -0
- package/webapp/dist/assets/{_baseUniq-BEetT15i.js → _baseUniq-DAeYoL6j.js} +2 -2
- package/webapp/dist/assets/_baseUniq-DAeYoL6j.js.map +1 -0
- package/webapp/dist/assets/{arc-Dm7Zf36f.js → arc-Bh4nDbNR.js} +2 -2
- package/webapp/dist/assets/arc-Bh4nDbNR.js.map +1 -0
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-BpTPtkuo.js → architectureDiagram-2XIMDMQ5-CxqmdsIm.js} +26 -8
- package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-CxqmdsIm.js.map +1 -0
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-C8fLN0iu.js → blockDiagram-WCTKOSBZ-CxIWLtpt.js} +187 -170
- package/webapp/dist/assets/blockDiagram-WCTKOSBZ-CxIWLtpt.js.map +1 -0
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-BpPr62CH.js → c4Diagram-IC4MRINW-1qErOIgG.js} +4 -4
- package/webapp/dist/assets/c4Diagram-IC4MRINW-1qErOIgG.js.map +1 -0
- package/webapp/dist/assets/{channel-EMYoPjW3.js → channel-DkgZHNUe.js} +2 -2
- package/webapp/dist/assets/channel-DkgZHNUe.js.map +1 -0
- package/webapp/dist/assets/{chunk-4BX2VUAB-CefNtjWG.js → chunk-4BX2VUAB-BmdMbU9v.js} +2 -2
- package/webapp/dist/assets/chunk-4BX2VUAB-BmdMbU9v.js.map +1 -0
- package/webapp/dist/assets/{chunk-55IACEB6-C_X7T43V.js → chunk-55IACEB6-D6LDTDBy.js} +2 -2
- package/webapp/dist/assets/chunk-55IACEB6-D6LDTDBy.js.map +1 -0
- package/webapp/dist/assets/{chunk-FMBD7UC4-ORmtkrtS.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-Gao4qrq7.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-LTAOVhWu.js → chunk-KX2RTZJC-CA7sDJO5.js} +2 -2
- package/webapp/dist/assets/chunk-KX2RTZJC-CA7sDJO5.js.map +1 -0
- package/webapp/dist/assets/{chunk-DI55MBZ5-CbvrsI_w.js → chunk-NQ4KR5QH-wlvxalE3.js} +9 -7
- package/webapp/dist/assets/chunk-NQ4KR5QH-wlvxalE3.js.map +1 -0
- package/webapp/dist/assets/{chunk-QZHKN3VN-ZoUM_4u5.js → chunk-QZHKN3VN-Bo1VMcph.js} +2 -2
- package/webapp/dist/assets/chunk-QZHKN3VN-Bo1VMcph.js.map +1 -0
- package/webapp/dist/assets/{chunk-B4BG7PRW-BRe3_2oA.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-uha1vIGN.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-uha1vIGN.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-_9Ayb1Gp.js → clone-BX5z8WVZ.js} +2 -2
- package/webapp/dist/assets/clone-BX5z8WVZ.js.map +1 -0
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-C8wDw3NY.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-BUSeNot0.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-CMZAksVC.js → diagram-E7M64L7V-QRaBfST8.js} +10 -10
- package/webapp/dist/assets/diagram-E7M64L7V-QRaBfST8.js.map +1 -0
- package/webapp/dist/assets/{diagram-QEK2KX5R-BQKoRtwy.js → diagram-IFDJBPK2-lrWn1Obo.js} +9 -8
- package/webapp/dist/assets/diagram-IFDJBPK2-lrWn1Obo.js.map +1 -0
- package/webapp/dist/assets/{diagram-S2PKOQOG-DjMG97kd.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-BujwA137.js → erDiagram-INFDFZHY-Cx6jc9Wq.js} +96 -75
- package/webapp/dist/assets/erDiagram-INFDFZHY-Cx6jc9Wq.js.map +1 -0
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-DgwPjg4y.js → flowDiagram-PKNHOUZH-DfGI49Dz.js} +98 -81
- package/webapp/dist/assets/flowDiagram-PKNHOUZH-DfGI49Dz.js.map +1 -0
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-Db2ykf3E.js → ganttDiagram-A5KZAMGK-nrcHWWaM.js} +28 -3
- package/webapp/dist/assets/ganttDiagram-A5KZAMGK-nrcHWWaM.js.map +1 -0
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-D_gSifkv.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-DLajsIDJ.js → index--fy89xGh.js} +2214 -2023
- package/webapp/dist/assets/index--fy89xGh.js.map +1 -0
- package/webapp/dist/assets/{index-xvYYeHuy.css → index-DZFkLLVz.css} +18 -10
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-BDba5pKs.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-CmJAbmlm.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-DxQeBTDk.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-DteV_yE8.js → layout-VmEo1OEB.js} +5 -5
- package/webapp/dist/assets/layout-VmEo1OEB.js.map +1 -0
- package/webapp/dist/assets/{linear-zItbPrND.js → linear-B662YHAc.js} +2 -2
- package/webapp/dist/assets/linear-B662YHAc.js.map +1 -0
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-BJXI7UqO.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-BpM-aH2p.js → pieDiagram-SKSYHLDU-DvjPP4PA.js} +8 -8
- package/webapp/dist/assets/pieDiagram-SKSYHLDU-DvjPP4PA.js.map +1 -0
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-NXdIpA15.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-D1AICAA0.js → requirementDiagram-Z7DCOOCP-DF0mpvE3.js} +16 -6
- package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-DF0mpvE3.js.map +1 -0
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-WiReDPfo.js → sankeyDiagram-WA2Y5GQK-CoXlxv00.js} +2 -2
- package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CoXlxv00.js.map +1 -0
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-Cw76oP8t.js → sequenceDiagram-2WXFIKYE-DYqT5Pg7.js} +601 -201
- package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-DYqT5Pg7.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-QjCeRczs.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-IClqxQ4s.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-BfyfTY7m.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-C5MiL6--.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-ybaJrSry.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/dist/docs/issues/global-dialog-event-broadcaster-missing.md +0 -128
- package/dist/llm/kernel-driver/subdialog-txn.d.ts +0 -8
- package/webapp/dist/assets/_basePickBy-BPJaiZdW.js.map +0 -1
- package/webapp/dist/assets/_baseUniq-BEetT15i.js.map +0 -1
- package/webapp/dist/assets/arc-Dm7Zf36f.js.map +0 -1
- package/webapp/dist/assets/architectureDiagram-VXUJARFQ-BpTPtkuo.js.map +0 -1
- package/webapp/dist/assets/blockDiagram-VD42YOAC-C8fLN0iu.js.map +0 -1
- package/webapp/dist/assets/c4Diagram-YG6GDRKO-BpPr62CH.js.map +0 -1
- package/webapp/dist/assets/channel-EMYoPjW3.js.map +0 -1
- package/webapp/dist/assets/chunk-4BX2VUAB-CefNtjWG.js.map +0 -1
- package/webapp/dist/assets/chunk-55IACEB6-C_X7T43V.js.map +0 -1
- package/webapp/dist/assets/chunk-B4BG7PRW-BRe3_2oA.js.map +0 -1
- package/webapp/dist/assets/chunk-DI55MBZ5-CbvrsI_w.js.map +0 -1
- package/webapp/dist/assets/chunk-FMBD7UC4-ORmtkrtS.js.map +0 -1
- package/webapp/dist/assets/chunk-QN33PNHL-LTAOVhWu.js.map +0 -1
- package/webapp/dist/assets/chunk-QZHKN3VN-ZoUM_4u5.js.map +0 -1
- package/webapp/dist/assets/chunk-TZMSLE5B-Gao4qrq7.js.map +0 -1
- package/webapp/dist/assets/classDiagram-2ON5EDUG-uha1vIGN.js.map +0 -1
- package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-uha1vIGN.js.map +0 -1
- package/webapp/dist/assets/clone-_9Ayb1Gp.js.map +0 -1
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-C8wDw3NY.js.map +0 -1
- package/webapp/dist/assets/dagre-6UL2VRFP-BUSeNot0.js.map +0 -1
- package/webapp/dist/assets/diagram-PSM6KHXK-CMZAksVC.js.map +0 -1
- package/webapp/dist/assets/diagram-QEK2KX5R-BQKoRtwy.js.map +0 -1
- package/webapp/dist/assets/diagram-S2PKOQOG-DjMG97kd.js.map +0 -1
- package/webapp/dist/assets/erDiagram-Q2GNP2WA-BujwA137.js.map +0 -1
- package/webapp/dist/assets/flowDiagram-NV44I4VS-DgwPjg4y.js.map +0 -1
- package/webapp/dist/assets/ganttDiagram-JELNMOA3-Db2ykf3E.js.map +0 -1
- package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-D_gSifkv.js.map +0 -1
- package/webapp/dist/assets/graph-BHjCU5xP.js +0 -425
- package/webapp/dist/assets/graph-BHjCU5xP.js.map +0 -1
- package/webapp/dist/assets/index-DLajsIDJ.js.map +0 -1
- package/webapp/dist/assets/infoDiagram-HS3SLOUP-BDba5pKs.js.map +0 -1
- package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-CmJAbmlm.js.map +0 -1
- package/webapp/dist/assets/kanban-definition-3W4ZIXB7-DxQeBTDk.js.map +0 -1
- package/webapp/dist/assets/layout-DteV_yE8.js.map +0 -1
- package/webapp/dist/assets/linear-zItbPrND.js.map +0 -1
- package/webapp/dist/assets/mindmap-definition-VGOIOE7T-BJXI7UqO.js.map +0 -1
- package/webapp/dist/assets/pieDiagram-ADFJNKIX-BpM-aH2p.js.map +0 -1
- package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-NXdIpA15.js.map +0 -1
- package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-D1AICAA0.js.map +0 -1
- package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-WiReDPfo.js.map +0 -1
- package/webapp/dist/assets/sequenceDiagram-WL72ISMW-Cw76oP8t.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-FKZM4ZOC-QjCeRczs.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-IClqxQ4s.js.map +0 -1
- package/webapp/dist/assets/timeline-definition-IT6M3QCI-BfyfTY7m.js.map +0 -1
- package/webapp/dist/assets/treemap-GDKQZRPO-C5MiL6--.js.map +0 -1
- package/webapp/dist/assets/xychartDiagram-PRI3JC2R-ybaJrSry.js.map +0 -1
package/dist/dialog-fork.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.forkMainDialogTreeAtGeneration = forkMainDialogTreeAtGeneration;
|
|
7
7
|
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
9
|
const storage_1 = require("@longrun-ai/kernel/types/storage");
|
|
@@ -49,8 +49,8 @@ function cloneQuestions(questions) {
|
|
|
49
49
|
callSiteRef: { ...question.callSiteRef },
|
|
50
50
|
}));
|
|
51
51
|
}
|
|
52
|
-
function
|
|
53
|
-
return
|
|
52
|
+
function clonePendingSideDialogs(pendingSideDialogs) {
|
|
53
|
+
return pendingSideDialogs.map((entry) => ({
|
|
54
54
|
...entry,
|
|
55
55
|
mentionList: entry.mentionList ? [...entry.mentionList] : undefined,
|
|
56
56
|
}));
|
|
@@ -58,7 +58,7 @@ function clonePendingSubdialogs(pendingSubdialogs) {
|
|
|
58
58
|
function cloneRegistryEntries(entries) {
|
|
59
59
|
return entries.map((entry) => ({ ...entry }));
|
|
60
60
|
}
|
|
61
|
-
function
|
|
61
|
+
function cloneSideDialogResponses(responses) {
|
|
62
62
|
return responses.map((response) => ({
|
|
63
63
|
...response,
|
|
64
64
|
mentionList: response.mentionList ? [...response.mentionList] : undefined,
|
|
@@ -67,31 +67,53 @@ function cloneSubdialogResponses(responses) {
|
|
|
67
67
|
function rewriteForkTreeDialogSelfId(sourceDialogSelfId, sourceRootId, targetRootId) {
|
|
68
68
|
return sourceDialogSelfId === sourceRootId ? targetRootId : sourceDialogSelfId;
|
|
69
69
|
}
|
|
70
|
-
function
|
|
70
|
+
function rewriteAssignmentFromAskerForFork(assignmentFromAsker, sourceRootId, targetRootId) {
|
|
71
71
|
return {
|
|
72
|
-
...
|
|
73
|
-
|
|
74
|
-
mentionList:
|
|
75
|
-
collectiveTargets:
|
|
76
|
-
? [...
|
|
72
|
+
...assignmentFromAsker,
|
|
73
|
+
askerDialogId: rewriteForkTreeDialogSelfId(assignmentFromAsker.askerDialogId, sourceRootId, targetRootId),
|
|
74
|
+
mentionList: assignmentFromAsker.mentionList ? [...assignmentFromAsker.mentionList] : undefined,
|
|
75
|
+
collectiveTargets: assignmentFromAsker.collectiveTargets
|
|
76
|
+
? [...assignmentFromAsker.collectiveTargets]
|
|
77
77
|
: undefined,
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
|
-
function
|
|
80
|
+
function rewriteSideDialogMetadataForFork(metadata) {
|
|
81
81
|
return {
|
|
82
82
|
...metadata,
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function rewriteTellaskReplyDirectiveForFork(directive, sourceRootId, targetRootId) {
|
|
86
|
+
return {
|
|
87
|
+
...directive,
|
|
88
|
+
targetDialogId: rewriteForkTreeDialogSelfId(directive.targetDialogId, sourceRootId, targetRootId),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function rewriteSideDialogAskerStackStateForFork(state, sourceRootId, targetRootId) {
|
|
92
|
+
return {
|
|
93
|
+
askerStack: state.askerStack.map((frame) => ({
|
|
94
|
+
kind: 'asker_dialog_stack_frame',
|
|
95
|
+
askerDialogId: rewriteForkTreeDialogSelfId(frame.askerDialogId, sourceRootId, targetRootId),
|
|
96
|
+
...(frame.assignmentFromAsker === undefined
|
|
97
|
+
? {}
|
|
98
|
+
: {
|
|
99
|
+
assignmentFromAsker: rewriteAssignmentFromAskerForFork(frame.assignmentFromAsker, sourceRootId, targetRootId),
|
|
100
|
+
}),
|
|
101
|
+
...(frame.tellaskReplyObligation === undefined
|
|
102
|
+
? {}
|
|
103
|
+
: {
|
|
104
|
+
tellaskReplyObligation: rewriteTellaskReplyDirectiveForFork(frame.tellaskReplyObligation, sourceRootId, targetRootId),
|
|
105
|
+
}),
|
|
106
|
+
})),
|
|
85
107
|
};
|
|
86
108
|
}
|
|
87
109
|
function isForkStateRecord(record) {
|
|
88
110
|
switch (record.type) {
|
|
89
|
-
case '
|
|
111
|
+
case 'sideDialog_created_record':
|
|
90
112
|
case 'reminders_reconciled_record':
|
|
91
113
|
case 'questions4human_reconciled_record':
|
|
92
|
-
case '
|
|
93
|
-
case '
|
|
94
|
-
case '
|
|
114
|
+
case 'pending_sideDialogs_reconciled_record':
|
|
115
|
+
case 'sideDialog_registry_reconciled_record':
|
|
116
|
+
case 'sideDialog_responses_reconciled_record':
|
|
95
117
|
return record;
|
|
96
118
|
default:
|
|
97
119
|
return null;
|
|
@@ -116,17 +138,17 @@ function isPersistedMessageRecord(record) {
|
|
|
116
138
|
case 'native_tool_call_record':
|
|
117
139
|
case 'tool_result_image_ingest_record':
|
|
118
140
|
case 'user_image_ingest_record':
|
|
119
|
-
case '
|
|
141
|
+
case 'sideDialog_request_record':
|
|
120
142
|
case 'tellask_reply_resolution_record':
|
|
121
143
|
case 'tellask_call_anchor_record':
|
|
122
144
|
case 'gen_start_record':
|
|
123
145
|
case 'gen_finish_record':
|
|
124
|
-
case '
|
|
146
|
+
case 'sideDialog_created_record':
|
|
125
147
|
case 'reminders_reconciled_record':
|
|
126
148
|
case 'questions4human_reconciled_record':
|
|
127
|
-
case '
|
|
128
|
-
case '
|
|
129
|
-
case '
|
|
149
|
+
case 'pending_sideDialogs_reconciled_record':
|
|
150
|
+
case 'sideDialog_registry_reconciled_record':
|
|
151
|
+
case 'sideDialog_responses_reconciled_record':
|
|
130
152
|
return false;
|
|
131
153
|
default: {
|
|
132
154
|
const _exhaustive = record;
|
|
@@ -188,7 +210,7 @@ function rewriteRecordForFork(record, newRootId) {
|
|
|
188
210
|
// not part of baseline state reconciliation and must not make forking fail.
|
|
189
211
|
case 'web_search_call_record':
|
|
190
212
|
case 'native_tool_call_record':
|
|
191
|
-
case '
|
|
213
|
+
case 'sideDialog_request_record':
|
|
192
214
|
case 'tellask_reply_resolution_record':
|
|
193
215
|
case 'tellask_call_anchor_record':
|
|
194
216
|
case 'gen_start_record':
|
|
@@ -215,12 +237,12 @@ function rewriteRecordForFork(record, newRootId) {
|
|
|
215
237
|
rootId: newRootId,
|
|
216
238
|
},
|
|
217
239
|
};
|
|
218
|
-
case '
|
|
240
|
+
case 'sideDialog_created_record':
|
|
219
241
|
case 'reminders_reconciled_record':
|
|
220
242
|
case 'questions4human_reconciled_record':
|
|
221
|
-
case '
|
|
222
|
-
case '
|
|
223
|
-
case '
|
|
243
|
+
case 'pending_sideDialogs_reconciled_record':
|
|
244
|
+
case 'sideDialog_registry_reconciled_record':
|
|
245
|
+
case 'sideDialog_responses_reconciled_record':
|
|
224
246
|
throw new Error(`Fork transcript copy must not include state record ${record.type}`);
|
|
225
247
|
default: {
|
|
226
248
|
const _exhaustive = record;
|
|
@@ -251,15 +273,15 @@ function computeRootForkDisplayState(args) {
|
|
|
251
273
|
return { kind: 'idle_waiting_user' };
|
|
252
274
|
}
|
|
253
275
|
const hasQ4H = args.questions.length > 0;
|
|
254
|
-
const
|
|
255
|
-
if (hasQ4H &&
|
|
256
|
-
return { kind: 'blocked', reason: { kind: '
|
|
276
|
+
const hasSideDialogs = args.pendingSideDialogs.length > 0;
|
|
277
|
+
if (hasQ4H && hasSideDialogs) {
|
|
278
|
+
return { kind: 'blocked', reason: { kind: 'needs_human_input_and_sideDialogs' } };
|
|
257
279
|
}
|
|
258
280
|
if (hasQ4H) {
|
|
259
281
|
return { kind: 'blocked', reason: { kind: 'needs_human_input' } };
|
|
260
282
|
}
|
|
261
|
-
if (
|
|
262
|
-
return { kind: 'blocked', reason: { kind: '
|
|
283
|
+
if (hasSideDialogs) {
|
|
284
|
+
return { kind: 'blocked', reason: { kind: 'waiting_for_sideDialogs' } };
|
|
263
285
|
}
|
|
264
286
|
return { kind: 'stopped', reason: { kind: 'fork_continue_ready' }, continueEnabled: true };
|
|
265
287
|
}
|
|
@@ -323,16 +345,16 @@ async function collectForkSnapshot(dialogId, status, cutoffAnchor) {
|
|
|
323
345
|
case 'questions4human_reconciled_record':
|
|
324
346
|
latestQuestions = cloneQuestions(stateRecord.questions);
|
|
325
347
|
break;
|
|
326
|
-
case '
|
|
327
|
-
latestPending =
|
|
348
|
+
case 'pending_sideDialogs_reconciled_record':
|
|
349
|
+
latestPending = clonePendingSideDialogs(stateRecord.pendingSideDialogs);
|
|
328
350
|
break;
|
|
329
|
-
case '
|
|
351
|
+
case 'sideDialog_registry_reconciled_record':
|
|
330
352
|
latestRegistry = cloneRegistryEntries(stateRecord.entries);
|
|
331
353
|
break;
|
|
332
|
-
case '
|
|
333
|
-
latestResponses =
|
|
354
|
+
case 'sideDialog_responses_reconciled_record':
|
|
355
|
+
latestResponses = cloneSideDialogResponses(stateRecord.responses);
|
|
334
356
|
break;
|
|
335
|
-
case '
|
|
357
|
+
case 'sideDialog_created_record':
|
|
336
358
|
break;
|
|
337
359
|
default: {
|
|
338
360
|
const _exhaustive = stateRecord;
|
|
@@ -344,12 +366,12 @@ async function collectForkSnapshot(dialogId, status, cutoffAnchor) {
|
|
|
344
366
|
return {
|
|
345
367
|
reminders: latestReminders !== null ? latestReminders.map((item) => cloneReminderSnapshot(item)) : [],
|
|
346
368
|
questions: latestQuestions ?? [],
|
|
347
|
-
|
|
369
|
+
pendingSideDialogs: latestPending ?? [],
|
|
348
370
|
registryEntries: latestRegistry ?? [],
|
|
349
|
-
|
|
371
|
+
sideDialogResponses: latestResponses ?? [],
|
|
350
372
|
};
|
|
351
373
|
}
|
|
352
|
-
async function
|
|
374
|
+
async function collectIncludedSideDialogs(args) {
|
|
353
375
|
const queue = [new dialog_1.DialogID(args.sourceRootId)];
|
|
354
376
|
const scannedDialogSelfIds = new Set();
|
|
355
377
|
const included = new Map();
|
|
@@ -364,21 +386,23 @@ async function collectIncludedSubdialogs(args) {
|
|
|
364
386
|
for (const course of courseNumbers) {
|
|
365
387
|
const events = await persistence_1.DialogPersistence.readCourseEvents(ownerDialogId, course, args.sourceStatus);
|
|
366
388
|
for (const event of events) {
|
|
367
|
-
if (event.type !== '
|
|
389
|
+
if (event.type !== 'sideDialog_created_record')
|
|
368
390
|
continue;
|
|
369
391
|
if (!anchorAtOrBefore(event, args.cutoffAnchor))
|
|
370
392
|
continue;
|
|
371
|
-
if (included.has(event.
|
|
393
|
+
if (included.has(event.sideDialogId))
|
|
372
394
|
continue;
|
|
373
|
-
const sourceId = new dialog_1.DialogID(event.
|
|
395
|
+
const sourceId = new dialog_1.DialogID(event.sideDialogId, args.sourceRootId);
|
|
374
396
|
const metadata = await persistence_1.DialogPersistence.loadDialogMetadata(sourceId, args.sourceStatus);
|
|
375
|
-
if (!metadata
|
|
376
|
-
throw new Error(`Missing included
|
|
397
|
+
if (!metadata) {
|
|
398
|
+
throw new Error(`Missing included sideDialog metadata for ${sourceId.valueOf()}`);
|
|
377
399
|
}
|
|
378
|
-
|
|
400
|
+
const assignmentFromAsker = await persistence_1.DialogPersistence.loadSideDialogAssignmentFromAsker(sourceId, args.sourceStatus);
|
|
401
|
+
included.set(event.sideDialogId, {
|
|
379
402
|
sourceId,
|
|
380
|
-
targetId: new dialog_1.DialogID(event.
|
|
403
|
+
targetId: new dialog_1.DialogID(event.sideDialogId, args.targetRootId),
|
|
381
404
|
metadata,
|
|
405
|
+
assignmentFromAsker,
|
|
382
406
|
});
|
|
383
407
|
queue.push(sourceId);
|
|
384
408
|
}
|
|
@@ -389,7 +413,7 @@ async function collectIncludedSubdialogs(args) {
|
|
|
389
413
|
for (const selfId of orderedSelfIds) {
|
|
390
414
|
const item = included.get(selfId);
|
|
391
415
|
if (!item) {
|
|
392
|
-
throw new Error(`Missing ordered included
|
|
416
|
+
throw new Error(`Missing ordered included sideDialog for ${selfId}`);
|
|
393
417
|
}
|
|
394
418
|
orderedIncluded.push(item);
|
|
395
419
|
}
|
|
@@ -400,18 +424,18 @@ async function buildDialogForkPlan(args) {
|
|
|
400
424
|
const retainedCourses = [];
|
|
401
425
|
for (const course of courseNumbers) {
|
|
402
426
|
const events = await persistence_1.DialogPersistence.readCourseEvents(args.sourceId, course, args.sourceStatus);
|
|
403
|
-
const
|
|
427
|
+
const isMainDialog = args.sourceId.selfId === args.sourceId.rootId;
|
|
404
428
|
const retained = events.filter((event, index) => {
|
|
405
429
|
if (isForkStateRecord(event)) {
|
|
406
430
|
return false;
|
|
407
431
|
}
|
|
408
|
-
if (args.truncateRootCourse && course === args.truncateRootCourse.course &&
|
|
432
|
+
if (args.truncateRootCourse && course === args.truncateRootCourse.course && isMainDialog) {
|
|
409
433
|
return index < args.truncateRootCourse.keepCount;
|
|
410
434
|
}
|
|
411
|
-
if (!
|
|
435
|
+
if (!isMainDialog) {
|
|
412
436
|
const recordAnchor = getRecordRootAnchor(event);
|
|
413
437
|
if (recordAnchor === null) {
|
|
414
|
-
throw new Error(`fork dialog requires root anchor on
|
|
438
|
+
throw new Error(`fork dialog requires root anchor on sideDialog transcript record: dialog=${args.sourceId.valueOf()} course=${String(course)} type=${event.type}`);
|
|
415
439
|
}
|
|
416
440
|
return anchorAtOrBefore(recordAnchor, args.cutoffAnchor);
|
|
417
441
|
}
|
|
@@ -431,15 +455,15 @@ async function buildDialogForkPlan(args) {
|
|
|
431
455
|
currentCourse: retainedCurrentCourse,
|
|
432
456
|
reminders: snapshot.reminders,
|
|
433
457
|
questions: snapshot.questions,
|
|
434
|
-
|
|
458
|
+
pendingSideDialogs: snapshot.pendingSideDialogs,
|
|
435
459
|
registryEntries: snapshot.registryEntries,
|
|
436
|
-
|
|
460
|
+
sideDialogResponses: snapshot.sideDialogResponses,
|
|
437
461
|
childCount: args.childCount,
|
|
438
462
|
};
|
|
439
463
|
}
|
|
440
|
-
async function appendForkBaselineState(plan,
|
|
464
|
+
async function appendForkBaselineState(plan, baselineSideDialogCreatedRecords) {
|
|
441
465
|
const baselineTs = (0, time_1.formatUnifiedTimestamp)(new Date());
|
|
442
|
-
for (const record of
|
|
466
|
+
for (const record of baselineSideDialogCreatedRecords) {
|
|
443
467
|
await persistence_1.DialogPersistence.appendEvent(plan.targetId, 1, record, 'running');
|
|
444
468
|
}
|
|
445
469
|
const remindersRecord = {
|
|
@@ -465,21 +489,21 @@ async function appendForkBaselineState(plan, baselineSubdialogCreatedRecords) {
|
|
|
465
489
|
};
|
|
466
490
|
const pendingRecord = {
|
|
467
491
|
ts: baselineTs,
|
|
468
|
-
type: '
|
|
492
|
+
type: 'pending_sideDialogs_reconciled_record',
|
|
469
493
|
...FORK_BASELINE_ANCHOR,
|
|
470
|
-
|
|
494
|
+
pendingSideDialogs: clonePendingSideDialogs(plan.pendingSideDialogs),
|
|
471
495
|
};
|
|
472
496
|
const registryRecord = {
|
|
473
497
|
ts: baselineTs,
|
|
474
|
-
type: '
|
|
498
|
+
type: 'sideDialog_registry_reconciled_record',
|
|
475
499
|
...FORK_BASELINE_ANCHOR,
|
|
476
500
|
entries: cloneRegistryEntries(plan.registryEntries),
|
|
477
501
|
};
|
|
478
502
|
const responsesRecord = {
|
|
479
503
|
ts: baselineTs,
|
|
480
|
-
type: '
|
|
504
|
+
type: 'sideDialog_responses_reconciled_record',
|
|
481
505
|
...FORK_BASELINE_ANCHOR,
|
|
482
|
-
responses:
|
|
506
|
+
responses: cloneSideDialogResponses(plan.sideDialogResponses),
|
|
483
507
|
};
|
|
484
508
|
await persistence_1.DialogPersistence.appendEvent(plan.targetId, 1, remindersRecord, 'running');
|
|
485
509
|
await persistence_1.DialogPersistence.appendEvent(plan.targetId, 1, q4hRecord, 'running');
|
|
@@ -490,27 +514,30 @@ async function appendForkBaselineState(plan, baselineSubdialogCreatedRecords) {
|
|
|
490
514
|
async function persistForkPlan(args) {
|
|
491
515
|
const { plan } = args;
|
|
492
516
|
if (plan.targetId.selfId === plan.targetId.rootId) {
|
|
493
|
-
|
|
494
|
-
plan.metadata.sessionSlug !== undefined ||
|
|
495
|
-
plan.metadata.assignmentFromSup !== undefined) {
|
|
496
|
-
throw new Error(`fork root plan received subdialog metadata: ${plan.targetId.valueOf()}`);
|
|
497
|
-
}
|
|
517
|
+
const priming = 'priming' in plan.metadata ? plan.metadata.priming : undefined;
|
|
498
518
|
const rewrittenMetadata = {
|
|
499
519
|
id: plan.targetId.selfId,
|
|
500
520
|
agentId: plan.metadata.agentId,
|
|
501
521
|
taskDocPath: plan.metadata.taskDocPath,
|
|
502
522
|
createdAt: args.now,
|
|
503
|
-
...(
|
|
523
|
+
...(priming ? { priming } : {}),
|
|
504
524
|
};
|
|
505
|
-
await persistence_1.DialogPersistence.
|
|
525
|
+
await persistence_1.DialogPersistence.saveMainDialogMetadata(plan.targetId, rewrittenMetadata, 'running');
|
|
506
526
|
}
|
|
507
527
|
else {
|
|
508
|
-
|
|
509
|
-
|
|
528
|
+
const rewrittenMetadata = rewriteSideDialogMetadataForFork(plan.metadata);
|
|
529
|
+
const sourceAskerStackState = await persistence_1.DialogPersistence.loadSideDialogAskerStackState(plan.sourceId, args.sourceStatus);
|
|
530
|
+
if (!sourceAskerStackState) {
|
|
531
|
+
throw new Error(`fork sideDialog plan missing asker stack: ${plan.sourceId.valueOf()}`);
|
|
510
532
|
}
|
|
511
|
-
const
|
|
512
|
-
await persistence_1.DialogPersistence.
|
|
513
|
-
await persistence_1.DialogPersistence.
|
|
533
|
+
const rewrittenAskerStackState = rewriteSideDialogAskerStackStateForFork(sourceAskerStackState, plan.sourceId.rootId, plan.targetId.rootId);
|
|
534
|
+
await persistence_1.DialogPersistence.ensureSideDialogDirectory(plan.targetId, 'running');
|
|
535
|
+
await persistence_1.DialogPersistence.saveSideDialogAskerStackState(plan.targetId, rewrittenAskerStackState, 'running');
|
|
536
|
+
await persistence_1.DialogPersistence.saveSideDialogMetadata(plan.targetId, rewrittenMetadata, 'running');
|
|
537
|
+
}
|
|
538
|
+
const sourceAskerStack = await persistence_1.DialogPersistence.loadDialogAskerStack(plan.sourceId, args.sourceStatus);
|
|
539
|
+
if (sourceAskerStack.askerStack.length > 0) {
|
|
540
|
+
await persistence_1.DialogPersistence.saveDialogAskerStack(plan.targetId, rewriteSideDialogAskerStackStateForFork(sourceAskerStack, plan.sourceId.rootId, plan.targetId.rootId), 'running');
|
|
514
541
|
}
|
|
515
542
|
for (const course of plan.retainedCourses) {
|
|
516
543
|
for (const event of course.events) {
|
|
@@ -520,21 +547,21 @@ async function persistForkPlan(args) {
|
|
|
520
547
|
await appendForkBaselineState(plan, args.baselineRecordsByParentSelfId.get(plan.targetId.selfId) ?? []);
|
|
521
548
|
await persistence_1.DialogPersistence._saveReminderState(plan.targetId, [...plan.reminders], 'running');
|
|
522
549
|
await persistence_1.DialogPersistence._saveQuestions4HumanState(plan.targetId, [...plan.questions], 'running');
|
|
523
|
-
await persistence_1.DialogPersistence.
|
|
524
|
-
await persistence_1.DialogPersistence.
|
|
550
|
+
await persistence_1.DialogPersistence.savePendingSideDialogs(plan.targetId, [...plan.pendingSideDialogs], undefined, 'running');
|
|
551
|
+
await persistence_1.DialogPersistence.saveSideDialogRegistry(plan.targetId, plan.registryEntries.map((entry) => ({
|
|
525
552
|
key: entry.key,
|
|
526
|
-
|
|
553
|
+
sideDialogId: new dialog_1.DialogID(entry.sideDialogId, plan.targetId.rootId),
|
|
527
554
|
agentId: entry.agentId,
|
|
528
555
|
sessionSlug: entry.sessionSlug,
|
|
529
556
|
})), 'running');
|
|
530
|
-
await persistence_1.DialogPersistence.
|
|
557
|
+
await persistence_1.DialogPersistence.saveSideDialogResponses(plan.targetId, [...plan.sideDialogResponses], undefined, 'running');
|
|
531
558
|
await copyArtifactsIfPresent(plan.sourceId, plan.targetId, args.sourceStatus);
|
|
532
559
|
const currentCourseEvents = plan.retainedCourses.find((item) => item.course === plan.currentCourse)?.events ?? [];
|
|
533
560
|
const displayState = plan.targetId.selfId === plan.targetId.rootId
|
|
534
561
|
? computeRootForkDisplayState({
|
|
535
562
|
action: args.action,
|
|
536
563
|
questions: plan.questions,
|
|
537
|
-
|
|
564
|
+
pendingSideDialogs: plan.pendingSideDialogs,
|
|
538
565
|
})
|
|
539
566
|
: { kind: 'idle_waiting_user' };
|
|
540
567
|
await persistence_1.DialogPersistence.mutateDialogLatest(plan.targetId, () => ({
|
|
@@ -545,7 +572,7 @@ async function persistForkPlan(args) {
|
|
|
545
572
|
status: 'active',
|
|
546
573
|
messageCount: countMessages(currentCourseEvents),
|
|
547
574
|
functionCallCount: countFunctionCalls(currentCourseEvents),
|
|
548
|
-
|
|
575
|
+
sideDialogCount: plan.childCount,
|
|
549
576
|
generating: false,
|
|
550
577
|
needsDrive: false,
|
|
551
578
|
displayState,
|
|
@@ -556,7 +583,7 @@ async function persistForkPlan(args) {
|
|
|
556
583
|
},
|
|
557
584
|
}));
|
|
558
585
|
}
|
|
559
|
-
async function
|
|
586
|
+
async function forkMainDialogTreeAtGeneration(args) {
|
|
560
587
|
const sourceRootId = args.sourceRootId.trim();
|
|
561
588
|
if (sourceRootId === '') {
|
|
562
589
|
throw new Error('sourceRootId is required');
|
|
@@ -567,17 +594,14 @@ async function forkRootDialogTreeAtGeneration(args) {
|
|
|
567
594
|
if (!Number.isFinite(args.genseq) || args.genseq <= 0) {
|
|
568
595
|
throw new Error('genseq must be a positive integer');
|
|
569
596
|
}
|
|
570
|
-
const
|
|
571
|
-
const sourceMetadata = await persistence_1.DialogPersistence.loadDialogMetadata(
|
|
597
|
+
const sourceMainDialogId = new dialog_1.DialogID(sourceRootId);
|
|
598
|
+
const sourceMetadata = await persistence_1.DialogPersistence.loadDialogMetadata(sourceMainDialogId, args.sourceStatus);
|
|
572
599
|
if (!sourceMetadata) {
|
|
573
|
-
throw new Error(`
|
|
574
|
-
}
|
|
575
|
-
if (sourceMetadata.supdialogId !== undefined) {
|
|
576
|
-
throw new Error(`fork dialog only supports root dialogs: ${sourceRootId}`);
|
|
600
|
+
throw new Error(`Main dialog not found: ${sourceRootId} (${args.sourceStatus})`);
|
|
577
601
|
}
|
|
578
602
|
const targetCourse = Math.floor(args.course);
|
|
579
603
|
const targetGenseq = Math.floor(args.genseq);
|
|
580
|
-
const rootEvents = await persistence_1.DialogPersistence.readCourseEvents(
|
|
604
|
+
const rootEvents = await persistence_1.DialogPersistence.readCourseEvents(sourceMainDialogId, targetCourse, args.sourceStatus);
|
|
581
605
|
const targetStartIndex = rootEvents.findIndex((event) => 'genseq' in event && typeof event.genseq === 'number' && event.genseq === targetGenseq);
|
|
582
606
|
if (targetStartIndex < 0) {
|
|
583
607
|
throw new Error(`Target genseq ${String(targetGenseq)} not found in dialog ${sourceRootId} course ${String(targetCourse)}`);
|
|
@@ -591,21 +615,22 @@ async function forkRootDialogTreeAtGeneration(args) {
|
|
|
591
615
|
rootGenseq: targetGenseq - 1,
|
|
592
616
|
});
|
|
593
617
|
const draftUserText = normalizeDraftUserText(rootEvents, targetGenseq);
|
|
594
|
-
const latest = await persistence_1.DialogPersistence.loadDialogLatest(
|
|
618
|
+
const latest = await persistence_1.DialogPersistence.loadDialogLatest(sourceMainDialogId, args.sourceStatus);
|
|
595
619
|
const targetRootId = (0, id_1.generateDialogID)();
|
|
596
620
|
const now = (0, time_1.formatUnifiedTimestamp)(new Date());
|
|
597
|
-
const
|
|
621
|
+
const includedSideDialogs = await collectIncludedSideDialogs({
|
|
598
622
|
sourceRootId,
|
|
599
623
|
sourceStatus: args.sourceStatus,
|
|
600
624
|
cutoffAnchor,
|
|
601
625
|
targetRootId,
|
|
602
626
|
});
|
|
603
627
|
const childCountByParentSelfId = new Map();
|
|
604
|
-
for (const
|
|
605
|
-
|
|
628
|
+
for (const sideDialog of includedSideDialogs) {
|
|
629
|
+
const askerDialogId = sideDialog.assignmentFromAsker.askerDialogId;
|
|
630
|
+
childCountByParentSelfId.set(askerDialogId, (childCountByParentSelfId.get(askerDialogId) ?? 0) + 1);
|
|
606
631
|
}
|
|
607
632
|
const rootPlan = await buildDialogForkPlan({
|
|
608
|
-
sourceId:
|
|
633
|
+
sourceId: sourceMainDialogId,
|
|
609
634
|
targetId: new dialog_1.DialogID(targetRootId),
|
|
610
635
|
sourceStatus: args.sourceStatus,
|
|
611
636
|
sourceMetadata,
|
|
@@ -615,48 +640,48 @@ async function forkRootDialogTreeAtGeneration(args) {
|
|
|
615
640
|
});
|
|
616
641
|
const action = draftUserText !== null
|
|
617
642
|
? { kind: 'draft_user_text', userText: draftUserText }
|
|
618
|
-
: rootPlan.questions.length > 0 || rootPlan.
|
|
643
|
+
: rootPlan.questions.length > 0 || rootPlan.pendingSideDialogs.length > 0
|
|
619
644
|
? {
|
|
620
645
|
kind: 'restore_pending',
|
|
621
646
|
pendingQ4H: rootPlan.questions.length > 0,
|
|
622
|
-
|
|
647
|
+
pendingSideDialogs: rootPlan.pendingSideDialogs.length > 0,
|
|
623
648
|
}
|
|
624
649
|
: { kind: 'auto_continue' };
|
|
625
|
-
const
|
|
626
|
-
for (const
|
|
627
|
-
|
|
628
|
-
sourceId:
|
|
629
|
-
targetId:
|
|
650
|
+
const sideDialogPlans = [];
|
|
651
|
+
for (const sideDialog of includedSideDialogs) {
|
|
652
|
+
sideDialogPlans.push(await buildDialogForkPlan({
|
|
653
|
+
sourceId: sideDialog.sourceId,
|
|
654
|
+
targetId: sideDialog.targetId,
|
|
630
655
|
sourceStatus: args.sourceStatus,
|
|
631
|
-
sourceMetadata:
|
|
656
|
+
sourceMetadata: sideDialog.metadata,
|
|
632
657
|
cutoffAnchor,
|
|
633
|
-
childCount: childCountByParentSelfId.get(
|
|
658
|
+
childCount: childCountByParentSelfId.get(sideDialog.sourceId.selfId) ?? 0,
|
|
634
659
|
}));
|
|
635
660
|
}
|
|
636
661
|
const baselineRecordsByParentSelfId = new Map();
|
|
637
|
-
for (const
|
|
638
|
-
const
|
|
662
|
+
for (const sideDialog of includedSideDialogs) {
|
|
663
|
+
const rewrittenAskerDialogId = rewriteForkTreeDialogSelfId(sideDialog.assignmentFromAsker.askerDialogId, sourceRootId, targetRootId);
|
|
639
664
|
const rewrittenRecord = {
|
|
640
665
|
ts: now,
|
|
641
|
-
type: '
|
|
666
|
+
type: 'sideDialog_created_record',
|
|
642
667
|
...FORK_BASELINE_ANCHOR,
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
agentId:
|
|
646
|
-
taskDocPath:
|
|
647
|
-
createdAt:
|
|
648
|
-
sessionSlug:
|
|
649
|
-
|
|
668
|
+
sideDialogId: sideDialog.targetId.selfId,
|
|
669
|
+
askerDialogId: rewrittenAskerDialogId,
|
|
670
|
+
agentId: sideDialog.metadata.agentId,
|
|
671
|
+
taskDocPath: sideDialog.metadata.taskDocPath,
|
|
672
|
+
createdAt: sideDialog.metadata.createdAt,
|
|
673
|
+
sessionSlug: sideDialog.metadata.sessionSlug,
|
|
674
|
+
assignmentFromAsker: rewriteAssignmentFromAskerForFork(sideDialog.assignmentFromAsker, sourceRootId, targetRootId),
|
|
650
675
|
};
|
|
651
|
-
const existing = baselineRecordsByParentSelfId.get(
|
|
676
|
+
const existing = baselineRecordsByParentSelfId.get(rewrittenAskerDialogId);
|
|
652
677
|
if (existing) {
|
|
653
678
|
existing.push(rewrittenRecord);
|
|
654
679
|
}
|
|
655
680
|
else {
|
|
656
|
-
baselineRecordsByParentSelfId.set(
|
|
681
|
+
baselineRecordsByParentSelfId.set(rewrittenAskerDialogId, [rewrittenRecord]);
|
|
657
682
|
}
|
|
658
683
|
}
|
|
659
|
-
const allPlans = [rootPlan, ...
|
|
684
|
+
const allPlans = [rootPlan, ...sideDialogPlans];
|
|
660
685
|
for (const plan of allPlans) {
|
|
661
686
|
await persistForkPlan({
|
|
662
687
|
plan,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MainDialog } from './dialog';
|
|
2
2
|
export type DriveTriggerEvent = Readonly<{
|
|
3
3
|
type: 'drive_trigger_evt';
|
|
4
4
|
action: 'mark_needs_drive' | 'mark_not_needing_drive' | 'active_run_cleared';
|
|
@@ -21,8 +21,8 @@ declare class GlobalDialogRegistry {
|
|
|
21
21
|
private readonly driveTriggerPubChan;
|
|
22
22
|
private driveTriggerSubChan;
|
|
23
23
|
static getInstance(): GlobalDialogRegistry;
|
|
24
|
-
get(rootId: string):
|
|
25
|
-
register(
|
|
24
|
+
get(rootId: string): MainDialog | undefined;
|
|
25
|
+
register(mainDialog: MainDialog): void;
|
|
26
26
|
unregister(rootId: string): void;
|
|
27
27
|
private publishDriveTrigger;
|
|
28
28
|
waitForDriveTrigger(): Promise<DriveTriggerEvent>;
|
|
@@ -32,9 +32,9 @@ declare class GlobalDialogRegistry {
|
|
|
32
32
|
noteActiveRunBlockedQueuedDrive(rootId: string): void;
|
|
33
33
|
hasPendingActiveRunClearedWake(rootId: string): boolean;
|
|
34
34
|
isMarkedNeedingDrive(rootId: string): boolean;
|
|
35
|
-
getDialogsNeedingDrive():
|
|
35
|
+
getDialogsNeedingDrive(): MainDialog[];
|
|
36
36
|
getLastDriveTrigger(rootId: string): DriveTriggerEvent | undefined;
|
|
37
|
-
getAll():
|
|
37
|
+
getAll(): MainDialog[];
|
|
38
38
|
get size(): number;
|
|
39
39
|
}
|
|
40
40
|
export declare const globalDialogRegistry: GlobalDialogRegistry;
|
|
@@ -17,28 +17,28 @@ class GlobalDialogRegistry {
|
|
|
17
17
|
return GlobalDialogRegistry.instance;
|
|
18
18
|
}
|
|
19
19
|
get(rootId) {
|
|
20
|
-
return this.entries.get(rootId)?.
|
|
20
|
+
return this.entries.get(rootId)?.mainDialog;
|
|
21
21
|
}
|
|
22
|
-
register(
|
|
22
|
+
register(mainDialog) {
|
|
23
23
|
// This registry is keyed by the *tree root id*.
|
|
24
|
-
// Only the canonical
|
|
25
|
-
if (
|
|
24
|
+
// Only the canonical main dialog (selfId === rootId) should be stored here.
|
|
25
|
+
if (mainDialog.id.selfId !== mainDialog.id.rootId) {
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
|
-
const existing = this.entries.get(
|
|
28
|
+
const existing = this.entries.get(mainDialog.id.rootId);
|
|
29
29
|
if (existing) {
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
32
|
-
this.entries.set(
|
|
33
|
-
|
|
32
|
+
this.entries.set(mainDialog.id.rootId, {
|
|
33
|
+
mainDialog,
|
|
34
34
|
needsDrive: false,
|
|
35
35
|
activeRunClearedWakePending: false,
|
|
36
36
|
});
|
|
37
37
|
void (async () => {
|
|
38
38
|
try {
|
|
39
|
-
const needsDrive = await persistence_1.DialogPersistence.getNeedsDrive(
|
|
39
|
+
const needsDrive = await persistence_1.DialogPersistence.getNeedsDrive(mainDialog.id);
|
|
40
40
|
if (needsDrive) {
|
|
41
|
-
this.markNeedsDrive(
|
|
41
|
+
this.markNeedsDrive(mainDialog.id.rootId, {
|
|
42
42
|
source: 'dialog_registry_hydration',
|
|
43
43
|
reason: 'persisted_needs_drive_true',
|
|
44
44
|
});
|
|
@@ -158,13 +158,13 @@ class GlobalDialogRegistry {
|
|
|
158
158
|
getDialogsNeedingDrive() {
|
|
159
159
|
return Array.from(this.entries.values())
|
|
160
160
|
.filter((entry) => entry.needsDrive)
|
|
161
|
-
.map((entry) => entry.
|
|
161
|
+
.map((entry) => entry.mainDialog);
|
|
162
162
|
}
|
|
163
163
|
getLastDriveTrigger(rootId) {
|
|
164
164
|
return this.lastDriveTriggerByRootId.get(rootId);
|
|
165
165
|
}
|
|
166
166
|
getAll() {
|
|
167
|
-
return Array.from(this.entries.values()).map((entry) => entry.
|
|
167
|
+
return Array.from(this.entries.values()).map((entry) => entry.mainDialog);
|
|
168
168
|
}
|
|
169
169
|
get size() {
|
|
170
170
|
return this.entries.size;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Dialog, DialogID,
|
|
1
|
+
import { Dialog, DialogID, MainDialog } from './dialog';
|
|
2
2
|
export type DialogPersistenceStatus = 'running' | 'completed' | 'archived';
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function ensureDialogLoaded(
|
|
3
|
+
export declare function getOrRestoreMainDialog(rootId: string, status: DialogPersistenceStatus): Promise<MainDialog | undefined>;
|
|
4
|
+
export declare function ensureDialogLoaded(mainDialog: MainDialog, targetId: DialogID, status: DialogPersistenceStatus, visitedSelfIds?: Set<string>): Promise<Dialog | undefined>;
|