dominds 1.23.10 → 1.24.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/apps/runtime.js +2 -2
- package/dist/dialog-display-state.d.ts +2 -3
- package/dist/dialog-display-state.js +53 -145
- package/dist/dialog-drive-work.d.ts +4 -0
- package/dist/dialog-drive-work.js +40 -0
- package/dist/dialog-fork.d.ts +0 -1
- package/dist/dialog-fork.js +28 -32
- package/dist/dialog-generation-run.d.ts +4 -0
- package/dist/dialog-generation-run.js +24 -0
- package/dist/dialog-global-registry.d.ts +7 -8
- package/dist/dialog-global-registry.js +39 -33
- package/dist/dialog-instance-registry.js +12 -12
- package/dist/dialog-interruption.js +2 -2
- package/dist/dialog-latest-state.d.ts +4 -0
- package/dist/dialog-latest-state.js +14 -0
- package/dist/dialog.d.ts +31 -30
- package/dist/dialog.js +146 -56
- package/dist/docs/agent-priming.md +1 -1
- package/dist/docs/agent-priming.zh.md +1 -1
- package/dist/docs/app-constitution.md +1 -1
- package/dist/docs/app-constitution.zh.md +1 -1
- package/dist/docs/dialog-persistence.md +2 -2
- package/dist/docs/dialog-persistence.zh.md +2 -2
- package/dist/docs/dialog-system.md +72 -75
- package/dist/docs/dialog-system.zh.md +79 -82
- package/dist/docs/diligence-push.md +30 -40
- package/dist/docs/diligence-push.zh.md +15 -20
- package/dist/docs/dominds-agent-collaboration.zh.md +12 -10
- package/dist/docs/dominds-terminology.md +5 -2
- package/dist/docs/idle-reminder-wake.md +1 -1
- package/dist/docs/idle-reminder-wake.zh.md +1 -1
- package/dist/docs/issues/tellask-background-continuation-live-bugs-2026-05-17.zh.md +101 -0
- package/dist/docs/mcp-prompts-resources.md +13 -6
- package/dist/docs/mcp-support.md +18 -9
- package/dist/docs/mcp-support.zh.md +13 -8
- package/dist/docs/memory-system.md +51 -1
- package/dist/docs/memory-system.zh.md +51 -1
- package/dist/docs/team_mgmt-toolset.md +27 -10
- package/dist/docs/team_mgmt-toolset.zh.md +20 -9
- package/dist/docs/tellask-background-continuation-refactor.zh.md +1017 -0
- package/dist/docs/tellask-collab.md +4 -4
- package/dist/docs/tellask-collab.zh.md +4 -4
- package/dist/evt-registry.js +1 -0
- package/dist/llm/defaults.yaml +12 -9
- package/dist/llm/kernel-driver/drive.js +315 -67
- package/dist/llm/kernel-driver/engine.d.ts +1 -1
- package/dist/llm/kernel-driver/engine.js +4 -4
- package/dist/llm/kernel-driver/flow.js +203 -131
- package/dist/llm/kernel-driver/idle-reminder-wake.js +2 -4
- package/dist/llm/kernel-driver/loop.d.ts +4 -1
- package/dist/llm/kernel-driver/loop.js +268 -62
- package/dist/llm/kernel-driver/reply-guidance.js +29 -50
- package/dist/llm/kernel-driver/runtime.d.ts +10 -0
- package/dist/llm/kernel-driver/runtime.js +29 -84
- package/dist/llm/kernel-driver/sideDialog-txn.js +3 -0
- package/dist/llm/kernel-driver/sideDialog.d.ts +4 -13
- package/dist/llm/kernel-driver/sideDialog.js +165 -161
- package/dist/llm/kernel-driver/tellask-special.d.ts +5 -2
- package/dist/llm/kernel-driver/tellask-special.js +166 -184
- package/dist/llm/kernel-driver/types.d.ts +12 -8
- package/dist/mcp/config.d.ts +13 -5
- package/dist/mcp/config.js +37 -24
- package/dist/mcp/resources.d.ts +14 -3
- package/dist/mcp/resources.js +9 -6
- package/dist/mcp/supervisor.js +6 -1
- package/dist/mcp/tool-names.d.ts +2 -2
- package/dist/mcp/tool-names.js +4 -7
- package/dist/minds/system-prompt-parts.js +3 -0
- package/dist/persistence-errors.d.ts +1 -1
- package/dist/persistence.d.ts +81 -51
- package/dist/persistence.js +1747 -427
- package/dist/priming.d.ts +1 -1
- package/dist/priming.js +2 -2
- package/dist/recovery/proceeding-drive.js +46 -11
- package/dist/recovery/reply-special.js +42 -35
- package/dist/runtime/background-callee-summary.d.ts +2 -0
- package/dist/runtime/background-callee-summary.js +14 -0
- package/dist/runtime/driver-messages.d.ts +0 -8
- package/dist/runtime/driver-messages.js +0 -59
- package/dist/server/api-routes.js +40 -27
- package/dist/server/websocket-handler.js +39 -78
- package/dist/server.js +2 -2
- package/dist/shared-reminders.js +14 -3
- package/dist/skills/load.d.ts +7 -0
- package/dist/tools/cmd-runner.js +2 -0
- package/dist/tools/ctrl.js +6 -6
- package/dist/tools/os.js +2 -0
- package/dist/tools/pending-tellask-reminder.js +9 -9
- package/dist/tools/prompts/control/en/index.md +2 -0
- package/dist/tools/prompts/control/en/principles.md +1 -0
- package/dist/tools/prompts/control/en/tools.md +3 -0
- package/dist/tools/prompts/control/zh/index.md +2 -0
- package/dist/tools/prompts/control/zh/principles.md +1 -0
- package/dist/tools/prompts/control/zh/tools.md +3 -0
- package/dist/tools/prompts/personal_memory/en/principles.md +4 -1
- package/dist/tools/prompts/personal_memory/zh/principles.md +4 -1
- package/dist/tools/prompts/skills/en/index.md +1 -1
- package/dist/tools/prompts/skills/en/principles.md +5 -1
- package/dist/tools/prompts/skills/zh/index.md +1 -1
- package/dist/tools/prompts/skills/zh/principles.md +5 -1
- package/dist/tools/prompts/team_memory/en/principles.md +3 -0
- package/dist/tools/prompts/team_memory/en/scenarios.md +1 -1
- package/dist/tools/prompts/team_memory/zh/principles.md +3 -0
- package/dist/tools/prompts/team_memory/zh/scenarios.md +1 -1
- package/dist/tools/shell-capture-env.d.ts +1 -0
- package/dist/tools/shell-capture-env.js +44 -0
- package/dist/tools/skills.js +2 -0
- package/dist/tools/team_mgmt-mcp-manual.js +8 -8
- package/dist/tools/team_mgmt.js +34 -12
- package/dist/utils/task-package.js +9 -1
- package/package.json +3 -3
- package/webapp/dist/assets/{_basePickBy-CBh9Agsi.js → _basePickBy-DBvh4H3k.js} +3 -3
- package/webapp/dist/assets/_basePickBy-DBvh4H3k.js.map +1 -0
- package/webapp/dist/assets/{_baseUniq-D2UXV506.js → _baseUniq-CQmc9B-o.js} +2 -2
- package/webapp/dist/assets/_baseUniq-CQmc9B-o.js.map +1 -0
- package/webapp/dist/assets/{arc-CmeRUuzC.js → arc-DfLiOX_4.js} +2 -2
- package/webapp/dist/assets/arc-DfLiOX_4.js.map +1 -0
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-D5hfsb4A.js → architectureDiagram-2XIMDMQ5-CaTVJ5ev.js} +26 -8
- package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-CaTVJ5ev.js.map +1 -0
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-BVswEa9D.js → blockDiagram-WCTKOSBZ-DlmAtUca.js} +187 -170
- package/webapp/dist/assets/blockDiagram-WCTKOSBZ-DlmAtUca.js.map +1 -0
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-Bgm6yzGX.js → c4Diagram-IC4MRINW-CNHKD5Sl.js} +4 -4
- package/webapp/dist/assets/c4Diagram-IC4MRINW-CNHKD5Sl.js.map +1 -0
- package/webapp/dist/assets/{channel-CDo0v82C.js → channel-BTWhZYd5.js} +2 -2
- package/webapp/dist/assets/channel-BTWhZYd5.js.map +1 -0
- package/webapp/dist/assets/{chunk-4BX2VUAB-DMqSdYxu.js → chunk-4BX2VUAB-CV1n0Uhy.js} +2 -2
- package/webapp/dist/assets/chunk-4BX2VUAB-CV1n0Uhy.js.map +1 -0
- package/webapp/dist/assets/{chunk-55IACEB6-CudmE3Fx.js → chunk-55IACEB6-C5r77i_p.js} +2 -2
- package/webapp/dist/assets/chunk-55IACEB6-C5r77i_p.js.map +1 -0
- package/webapp/dist/assets/{chunk-FMBD7UC4-BSVSuNxy.js → chunk-FMBD7UC4-DJ1yHxrH.js} +2 -2
- package/webapp/dist/assets/chunk-FMBD7UC4-DJ1yHxrH.js.map +1 -0
- package/webapp/dist/assets/{chunk-TZMSLE5B-aW2uEdtS.js → chunk-JSJVCQXG-Ahg9hCCm.js} +14 -6
- package/webapp/dist/assets/chunk-JSJVCQXG-Ahg9hCCm.js.map +1 -0
- package/webapp/dist/assets/{chunk-QN33PNHL-Cbf-pIxI.js → chunk-KX2RTZJC-qBrewKt0.js} +2 -2
- package/webapp/dist/assets/chunk-KX2RTZJC-qBrewKt0.js.map +1 -0
- package/webapp/dist/assets/{chunk-DI55MBZ5-CZCetJxI.js → chunk-NQ4KR5QH-1lEdM6Wi.js} +9 -7
- package/webapp/dist/assets/chunk-NQ4KR5QH-1lEdM6Wi.js.map +1 -0
- package/webapp/dist/assets/{chunk-QZHKN3VN-DYyIY8_q.js → chunk-QZHKN3VN-ChVR749G.js} +2 -2
- package/webapp/dist/assets/chunk-QZHKN3VN-ChVR749G.js.map +1 -0
- package/webapp/dist/assets/{chunk-B4BG7PRW-d5dfiagO.js → chunk-WL4C6EOR-BAUXgk0K.js} +171 -121
- package/webapp/dist/assets/chunk-WL4C6EOR-BAUXgk0K.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-2ON5EDUG-C4-5PgVL.js → classDiagram-VBA2DB6C-DlqyhKve.js} +7 -6
- package/webapp/dist/assets/classDiagram-VBA2DB6C-DlqyhKve.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-C4-5PgVL.js → classDiagram-v2-RAHNMMFH-DlqyhKve.js} +7 -6
- package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-DlqyhKve.js.map +1 -0
- package/webapp/dist/assets/{clone-DivPByZ0.js → clone-BFiIqUsc.js} +2 -2
- package/webapp/dist/assets/clone-BFiIqUsc.js.map +1 -0
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-CwBAjMT3.js → cose-bilkent-S5V4N54A-JYvhtd6J.js} +2 -2
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-JYvhtd6J.js.map +1 -0
- package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
- package/webapp/dist/assets/{dagre-6UL2VRFP-tC56AIio.js → dagre-KLK3FWXG-CCGcQh6w.js} +7 -7
- package/webapp/dist/assets/dagre-KLK3FWXG-CCGcQh6w.js.map +1 -0
- package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
- package/webapp/dist/assets/{diagram-PSM6KHXK-dEF_O6uj.js → diagram-E7M64L7V-BXC4AxAd.js} +10 -10
- package/webapp/dist/assets/diagram-E7M64L7V-BXC4AxAd.js.map +1 -0
- package/webapp/dist/assets/{diagram-QEK2KX5R-BC3CyB81.js → diagram-IFDJBPK2-B--Sb3XT.js} +9 -8
- package/webapp/dist/assets/diagram-IFDJBPK2-B--Sb3XT.js.map +1 -0
- package/webapp/dist/assets/{diagram-S2PKOQOG-BV-YMbA_.js → diagram-P4PSJMXO-CVqgtrh3.js} +8 -8
- package/webapp/dist/assets/diagram-P4PSJMXO-CVqgtrh3.js.map +1 -0
- package/webapp/dist/assets/{erDiagram-Q2GNP2WA-DIgdtwce.js → erDiagram-INFDFZHY-BniHaRTt.js} +96 -75
- package/webapp/dist/assets/erDiagram-INFDFZHY-BniHaRTt.js.map +1 -0
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-C7Mawlld.js → flowDiagram-PKNHOUZH-wLKFBWTR.js} +98 -81
- package/webapp/dist/assets/flowDiagram-PKNHOUZH-wLKFBWTR.js.map +1 -0
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-DgaYLOeL.js → ganttDiagram-A5KZAMGK-DrptcitZ.js} +28 -3
- package/webapp/dist/assets/ganttDiagram-A5KZAMGK-DrptcitZ.js.map +1 -0
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-Dwv1ZLFB.js → gitGraphDiagram-K3NZZRJ6-C6l5aP44.js} +38 -46
- package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-C6l5aP44.js.map +1 -0
- package/webapp/dist/assets/graph-DXuQGYQN.js +782 -0
- package/webapp/dist/assets/graph-DXuQGYQN.js.map +1 -0
- package/webapp/dist/assets/{index-BGdI3lWA.css → index-BQoNJEGT.css} +19 -27
- package/webapp/dist/assets/{index-BsSFGqVX.js → index-DuQ1OCMG.js} +1435 -1348
- package/webapp/dist/assets/{index-BsSFGqVX.js.map → index-DuQ1OCMG.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-PDKRqD6y.js → infoDiagram-LFFYTUFH-BbleCSjW.js} +7 -7
- package/webapp/dist/assets/infoDiagram-LFFYTUFH-BbleCSjW.js.map +1 -0
- package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-DmV-LZuk.js +966 -0
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-DmV-LZuk.js.map +1 -0
- package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-DDD6YlTa.js → journeyDiagram-4ABVD52K-D3sQFfac.js} +5 -5
- package/webapp/dist/assets/journeyDiagram-4ABVD52K-D3sQFfac.js.map +1 -0
- package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-CK-CJzXm.js → kanban-definition-K7BYSVSG-BEeBlBtM.js} +5 -3
- package/webapp/dist/assets/kanban-definition-K7BYSVSG-BEeBlBtM.js.map +1 -0
- package/webapp/dist/assets/{layout-DRs2ltCp.js → layout-g7jjgV-W.js} +5 -5
- package/webapp/dist/assets/layout-g7jjgV-W.js.map +1 -0
- package/webapp/dist/assets/{linear-CiMu0dYF.js → linear-D_X91Yek.js} +2 -2
- package/webapp/dist/assets/linear-D_X91Yek.js.map +1 -0
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-C8yEoHXx.js → mindmap-definition-YRQLILUH-NkMAIgRY.js} +7 -5
- package/webapp/dist/assets/mindmap-definition-YRQLILUH-NkMAIgRY.js.map +1 -0
- package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
- package/webapp/dist/assets/{pieDiagram-ADFJNKIX-BhtVILXQ.js → pieDiagram-SKSYHLDU-Z6E4GEPC.js} +8 -8
- package/webapp/dist/assets/pieDiagram-SKSYHLDU-Z6E4GEPC.js.map +1 -0
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-B7Xuuv_G.js → quadrantDiagram-337W2JSQ-BH8hfOuU.js} +3 -3
- package/webapp/dist/assets/quadrantDiagram-337W2JSQ-BH8hfOuU.js.map +1 -0
- package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-DY6Q4U6l.js → requirementDiagram-Z7DCOOCP-DRJkvoQI.js} +16 -6
- package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-DRJkvoQI.js.map +1 -0
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-DZPox4PX.js → sankeyDiagram-WA2Y5GQK-D2VwjtJo.js} +2 -2
- package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-D2VwjtJo.js.map +1 -0
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-Bg6GPP0w.js → sequenceDiagram-2WXFIKYE-Cq-gEPOw.js} +601 -201
- package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-Cq-gEPOw.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-CcskYNpn.js → stateDiagram-RAJIS63D-CFM8Jqke.js} +9 -9
- package/webapp/dist/assets/stateDiagram-RAJIS63D-CFM8Jqke.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-Dja5UwuW.js → stateDiagram-v2-FVOUBMTO-Dip5iGX_.js} +5 -5
- package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-Dip5iGX_.js.map +1 -0
- package/webapp/dist/assets/{timeline-definition-IT6M3QCI-CA-Wvxg8.js → timeline-definition-YZTLITO2-OI9JzMjX.js} +3 -3
- package/webapp/dist/assets/timeline-definition-YZTLITO2-OI9JzMjX.js.map +1 -0
- package/webapp/dist/assets/{treemap-GDKQZRPO-CF_Fur4n.js → treemap-KZPCXAKY-CtNF416A.js} +37 -24
- package/webapp/dist/assets/treemap-KZPCXAKY-CtNF416A.js.map +1 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-CjaPj4FZ.js +2487 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-CjaPj4FZ.js.map +1 -0
- package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-CYc3vOkZ.js → xychartDiagram-JWTSCODW-21mBt9iu.js} +4 -4
- package/webapp/dist/assets/xychartDiagram-JWTSCODW-21mBt9iu.js.map +1 -0
- package/webapp/dist/index.html +2 -2
- package/dist/docs/tellask-revive-context-refactor.zh.md +0 -604
- package/webapp/dist/assets/_basePickBy-CBh9Agsi.js.map +0 -1
- package/webapp/dist/assets/_baseUniq-D2UXV506.js.map +0 -1
- package/webapp/dist/assets/arc-CmeRUuzC.js.map +0 -1
- package/webapp/dist/assets/architectureDiagram-VXUJARFQ-D5hfsb4A.js.map +0 -1
- package/webapp/dist/assets/blockDiagram-VD42YOAC-BVswEa9D.js.map +0 -1
- package/webapp/dist/assets/c4Diagram-YG6GDRKO-Bgm6yzGX.js.map +0 -1
- package/webapp/dist/assets/channel-CDo0v82C.js.map +0 -1
- package/webapp/dist/assets/chunk-4BX2VUAB-DMqSdYxu.js.map +0 -1
- package/webapp/dist/assets/chunk-55IACEB6-CudmE3Fx.js.map +0 -1
- package/webapp/dist/assets/chunk-B4BG7PRW-d5dfiagO.js.map +0 -1
- package/webapp/dist/assets/chunk-DI55MBZ5-CZCetJxI.js.map +0 -1
- package/webapp/dist/assets/chunk-FMBD7UC4-BSVSuNxy.js.map +0 -1
- package/webapp/dist/assets/chunk-QN33PNHL-Cbf-pIxI.js.map +0 -1
- package/webapp/dist/assets/chunk-QZHKN3VN-DYyIY8_q.js.map +0 -1
- package/webapp/dist/assets/chunk-TZMSLE5B-aW2uEdtS.js.map +0 -1
- package/webapp/dist/assets/classDiagram-2ON5EDUG-C4-5PgVL.js.map +0 -1
- package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-C4-5PgVL.js.map +0 -1
- package/webapp/dist/assets/clone-DivPByZ0.js.map +0 -1
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-CwBAjMT3.js.map +0 -1
- package/webapp/dist/assets/dagre-6UL2VRFP-tC56AIio.js.map +0 -1
- package/webapp/dist/assets/diagram-PSM6KHXK-dEF_O6uj.js.map +0 -1
- package/webapp/dist/assets/diagram-QEK2KX5R-BC3CyB81.js.map +0 -1
- package/webapp/dist/assets/diagram-S2PKOQOG-BV-YMbA_.js.map +0 -1
- package/webapp/dist/assets/erDiagram-Q2GNP2WA-DIgdtwce.js.map +0 -1
- package/webapp/dist/assets/flowDiagram-NV44I4VS-C7Mawlld.js.map +0 -1
- package/webapp/dist/assets/ganttDiagram-JELNMOA3-DgaYLOeL.js.map +0 -1
- package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-Dwv1ZLFB.js.map +0 -1
- package/webapp/dist/assets/graph-saC_350a.js +0 -425
- package/webapp/dist/assets/graph-saC_350a.js.map +0 -1
- package/webapp/dist/assets/infoDiagram-HS3SLOUP-PDKRqD6y.js.map +0 -1
- package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-DDD6YlTa.js.map +0 -1
- package/webapp/dist/assets/kanban-definition-3W4ZIXB7-CK-CJzXm.js.map +0 -1
- package/webapp/dist/assets/layout-DRs2ltCp.js.map +0 -1
- package/webapp/dist/assets/linear-CiMu0dYF.js.map +0 -1
- package/webapp/dist/assets/mindmap-definition-VGOIOE7T-C8yEoHXx.js.map +0 -1
- package/webapp/dist/assets/pieDiagram-ADFJNKIX-BhtVILXQ.js.map +0 -1
- package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-B7Xuuv_G.js.map +0 -1
- package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-DY6Q4U6l.js.map +0 -1
- package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-DZPox4PX.js.map +0 -1
- package/webapp/dist/assets/sequenceDiagram-WL72ISMW-Bg6GPP0w.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-FKZM4ZOC-CcskYNpn.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-Dja5UwuW.js.map +0 -1
- package/webapp/dist/assets/timeline-definition-IT6M3QCI-CA-Wvxg8.js.map +0 -1
- package/webapp/dist/assets/treemap-GDKQZRPO-CF_Fur4n.js.map +0 -1
- package/webapp/dist/assets/xychartDiagram-PRI3JC2R-CYc3vOkZ.js.map +0 -1
package/dist/dialog-fork.js
CHANGED
|
@@ -9,6 +9,7 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
9
9
|
const storage_1 = require("@longrun-ai/kernel/types/storage");
|
|
10
10
|
const time_1 = require("@longrun-ai/kernel/utils/time");
|
|
11
11
|
const dialog_1 = require("./dialog");
|
|
12
|
+
const dialog_latest_state_1 = require("./dialog-latest-state");
|
|
12
13
|
const persistence_1 = require("./persistence");
|
|
13
14
|
const tool_1 = require("./tool");
|
|
14
15
|
const id_1 = require("./utils/id");
|
|
@@ -49,8 +50,8 @@ function cloneQuestions(questions) {
|
|
|
49
50
|
callSiteRef: { ...question.callSiteRef },
|
|
50
51
|
}));
|
|
51
52
|
}
|
|
52
|
-
function
|
|
53
|
-
return
|
|
53
|
+
function cloneActiveCalleeDispatches(activeCalleeDispatches) {
|
|
54
|
+
return activeCalleeDispatches.map((entry) => ({
|
|
54
55
|
...entry,
|
|
55
56
|
mentionList: entry.mentionList ? [...entry.mentionList] : undefined,
|
|
56
57
|
}));
|
|
@@ -111,7 +112,7 @@ function isForkStateRecord(record) {
|
|
|
111
112
|
case 'sideDialog_created_record':
|
|
112
113
|
case 'reminders_reconciled_record':
|
|
113
114
|
case 'questions4human_reconciled_record':
|
|
114
|
-
case '
|
|
115
|
+
case 'active_callees_reconciled_record':
|
|
115
116
|
case 'sideDialog_registry_reconciled_record':
|
|
116
117
|
case 'sideDialog_responses_reconciled_record':
|
|
117
118
|
return record;
|
|
@@ -147,7 +148,7 @@ function isPersistedMessageRecord(record) {
|
|
|
147
148
|
case 'sideDialog_created_record':
|
|
148
149
|
case 'reminders_reconciled_record':
|
|
149
150
|
case 'questions4human_reconciled_record':
|
|
150
|
-
case '
|
|
151
|
+
case 'active_callees_reconciled_record':
|
|
151
152
|
case 'sideDialog_registry_reconciled_record':
|
|
152
153
|
case 'sideDialog_responses_reconciled_record':
|
|
153
154
|
return false;
|
|
@@ -242,7 +243,7 @@ function rewriteRecordForFork(record, newRootId) {
|
|
|
242
243
|
case 'sideDialog_created_record':
|
|
243
244
|
case 'reminders_reconciled_record':
|
|
244
245
|
case 'questions4human_reconciled_record':
|
|
245
|
-
case '
|
|
246
|
+
case 'active_callees_reconciled_record':
|
|
246
247
|
case 'sideDialog_registry_reconciled_record':
|
|
247
248
|
case 'sideDialog_responses_reconciled_record':
|
|
248
249
|
throw new Error(`Fork transcript copy must not include state record ${record.type}`);
|
|
@@ -275,16 +276,9 @@ function computeRootForkDisplayState(args) {
|
|
|
275
276
|
return { kind: 'idle_waiting_user' };
|
|
276
277
|
}
|
|
277
278
|
const hasQ4H = args.questions.length > 0;
|
|
278
|
-
const hasSideDialogs = args.pendingSideDialogs.length > 0;
|
|
279
|
-
if (hasQ4H && hasSideDialogs) {
|
|
280
|
-
return { kind: 'blocked', reason: { kind: 'needs_human_input_and_sideDialogs' } };
|
|
281
|
-
}
|
|
282
279
|
if (hasQ4H) {
|
|
283
280
|
return { kind: 'blocked', reason: { kind: 'needs_human_input' } };
|
|
284
281
|
}
|
|
285
|
-
if (hasSideDialogs) {
|
|
286
|
-
return { kind: 'blocked', reason: { kind: 'waiting_for_sideDialogs' } };
|
|
287
|
-
}
|
|
288
282
|
return { kind: 'stopped', reason: { kind: 'fork_continue_ready' }, continueEnabled: true };
|
|
289
283
|
}
|
|
290
284
|
async function copyArtifactsIfPresent(sourceId, targetId, sourceStatus) {
|
|
@@ -329,7 +323,7 @@ async function collectForkSnapshot(dialogId, status, cutoffAnchor) {
|
|
|
329
323
|
const courseNumbers = await listDialogCourseNumbers(dialogId, status);
|
|
330
324
|
let latestReminders = null;
|
|
331
325
|
let latestQuestions = null;
|
|
332
|
-
let
|
|
326
|
+
let latestActiveCalleeDispatches = null;
|
|
333
327
|
let latestRegistry = null;
|
|
334
328
|
let latestResponses = null;
|
|
335
329
|
for (const course of courseNumbers) {
|
|
@@ -347,8 +341,8 @@ async function collectForkSnapshot(dialogId, status, cutoffAnchor) {
|
|
|
347
341
|
case 'questions4human_reconciled_record':
|
|
348
342
|
latestQuestions = cloneQuestions(stateRecord.questions);
|
|
349
343
|
break;
|
|
350
|
-
case '
|
|
351
|
-
|
|
344
|
+
case 'active_callees_reconciled_record':
|
|
345
|
+
latestActiveCalleeDispatches = cloneActiveCalleeDispatches(stateRecord.activeCalleeDispatches);
|
|
352
346
|
break;
|
|
353
347
|
case 'sideDialog_registry_reconciled_record':
|
|
354
348
|
latestRegistry = cloneRegistryEntries(stateRecord.entries);
|
|
@@ -368,7 +362,7 @@ async function collectForkSnapshot(dialogId, status, cutoffAnchor) {
|
|
|
368
362
|
return {
|
|
369
363
|
reminders: latestReminders !== null ? latestReminders.map((item) => cloneReminderSnapshot(item)) : [],
|
|
370
364
|
questions: latestQuestions ?? [],
|
|
371
|
-
|
|
365
|
+
activeCalleeDispatches: latestActiveCalleeDispatches ?? [],
|
|
372
366
|
registryEntries: latestRegistry ?? [],
|
|
373
367
|
sideDialogResponses: latestResponses ?? [],
|
|
374
368
|
};
|
|
@@ -378,15 +372,15 @@ async function collectIncludedSideDialogs(args) {
|
|
|
378
372
|
const scannedDialogSelfIds = new Set();
|
|
379
373
|
const included = new Map();
|
|
380
374
|
while (queue.length > 0) {
|
|
381
|
-
const
|
|
382
|
-
if (!
|
|
375
|
+
const sourceDialogId = queue.shift();
|
|
376
|
+
if (!sourceDialogId)
|
|
383
377
|
break;
|
|
384
|
-
if (scannedDialogSelfIds.has(
|
|
378
|
+
if (scannedDialogSelfIds.has(sourceDialogId.selfId))
|
|
385
379
|
continue;
|
|
386
|
-
scannedDialogSelfIds.add(
|
|
387
|
-
const courseNumbers = await listDialogCourseNumbers(
|
|
380
|
+
scannedDialogSelfIds.add(sourceDialogId.selfId);
|
|
381
|
+
const courseNumbers = await listDialogCourseNumbers(sourceDialogId, args.sourceStatus);
|
|
388
382
|
for (const course of courseNumbers) {
|
|
389
|
-
const events = await persistence_1.DialogPersistence.readCourseEvents(
|
|
383
|
+
const events = await persistence_1.DialogPersistence.readCourseEvents(sourceDialogId, course, args.sourceStatus);
|
|
390
384
|
for (const event of events) {
|
|
391
385
|
if (event.type !== 'sideDialog_created_record')
|
|
392
386
|
continue;
|
|
@@ -457,7 +451,7 @@ async function buildDialogForkPlan(args) {
|
|
|
457
451
|
currentCourse: retainedCurrentCourse,
|
|
458
452
|
reminders: snapshot.reminders,
|
|
459
453
|
questions: snapshot.questions,
|
|
460
|
-
|
|
454
|
+
activeCalleeDispatches: snapshot.activeCalleeDispatches,
|
|
461
455
|
registryEntries: snapshot.registryEntries,
|
|
462
456
|
sideDialogResponses: snapshot.sideDialogResponses,
|
|
463
457
|
childCount: args.childCount,
|
|
@@ -489,11 +483,11 @@ async function appendForkBaselineState(plan, baselineSideDialogCreatedRecords) {
|
|
|
489
483
|
...FORK_BASELINE_ANCHOR,
|
|
490
484
|
questions: cloneQuestions(plan.questions),
|
|
491
485
|
};
|
|
492
|
-
const
|
|
486
|
+
const activeCalleesRecord = {
|
|
493
487
|
ts: baselineTs,
|
|
494
|
-
type: '
|
|
488
|
+
type: 'active_callees_reconciled_record',
|
|
495
489
|
...FORK_BASELINE_ANCHOR,
|
|
496
|
-
|
|
490
|
+
activeCalleeDispatches: cloneActiveCalleeDispatches(plan.activeCalleeDispatches),
|
|
497
491
|
};
|
|
498
492
|
const registryRecord = {
|
|
499
493
|
ts: baselineTs,
|
|
@@ -509,7 +503,7 @@ async function appendForkBaselineState(plan, baselineSideDialogCreatedRecords) {
|
|
|
509
503
|
};
|
|
510
504
|
await persistence_1.DialogPersistence.appendEvent(plan.targetId, 1, remindersRecord, 'running');
|
|
511
505
|
await persistence_1.DialogPersistence.appendEvent(plan.targetId, 1, q4hRecord, 'running');
|
|
512
|
-
await persistence_1.DialogPersistence.appendEvent(plan.targetId, 1,
|
|
506
|
+
await persistence_1.DialogPersistence.appendEvent(plan.targetId, 1, activeCalleesRecord, 'running');
|
|
513
507
|
await persistence_1.DialogPersistence.appendEvent(plan.targetId, 1, registryRecord, 'running');
|
|
514
508
|
await persistence_1.DialogPersistence.appendEvent(plan.targetId, 1, responsesRecord, 'running');
|
|
515
509
|
}
|
|
@@ -549,7 +543,9 @@ async function persistForkPlan(args) {
|
|
|
549
543
|
await appendForkBaselineState(plan, args.baselineRecordsByParentSelfId.get(plan.targetId.selfId) ?? []);
|
|
550
544
|
await persistence_1.DialogPersistence._saveReminderState(plan.targetId, [...plan.reminders], 'running');
|
|
551
545
|
await persistence_1.DialogPersistence._saveQuestions4HumanState(plan.targetId, [...plan.questions], 'running');
|
|
552
|
-
|
|
546
|
+
for (const record of plan.activeCalleeDispatches) {
|
|
547
|
+
await persistence_1.DialogPersistence.appendActiveCalleeDispatch(plan.targetId, record, undefined, 'running');
|
|
548
|
+
}
|
|
553
549
|
await persistence_1.DialogPersistence.saveSideDialogRegistry(plan.targetId, plan.registryEntries.map((entry) => ({
|
|
554
550
|
key: entry.key,
|
|
555
551
|
sideDialogId: new dialog_1.DialogID(entry.sideDialogId, plan.targetId.rootId),
|
|
@@ -563,7 +559,6 @@ async function persistForkPlan(args) {
|
|
|
563
559
|
? computeRootForkDisplayState({
|
|
564
560
|
action: args.action,
|
|
565
561
|
questions: plan.questions,
|
|
566
|
-
pendingSideDialogs: plan.pendingSideDialogs,
|
|
567
562
|
})
|
|
568
563
|
: { kind: 'idle_waiting_user' };
|
|
569
564
|
await persistence_1.DialogPersistence.mutateDialogLatest(plan.targetId, () => ({
|
|
@@ -576,7 +571,9 @@ async function persistForkPlan(args) {
|
|
|
576
571
|
functionCallCount: countFunctionCalls(currentCourseEvents),
|
|
577
572
|
sideDialogCount: plan.childCount,
|
|
578
573
|
generating: false,
|
|
579
|
-
|
|
574
|
+
nextStep: (0, dialog_latest_state_1.createEmptyDialogNextStepState)(),
|
|
575
|
+
tellaskCalls: (0, dialog_latest_state_1.createEmptyDialogTellaskCallState)(),
|
|
576
|
+
tellaskResults: (0, dialog_latest_state_1.createEmptyDialogTellaskResultState)(),
|
|
580
577
|
displayState,
|
|
581
578
|
disableDiligencePush: plan.targetId.selfId === plan.targetId.rootId ? args.latestDisableDiligencePush : false,
|
|
582
579
|
diligencePushRemainingBudget: plan.targetId.selfId === plan.targetId.rootId
|
|
@@ -642,11 +639,10 @@ async function forkMainDialogTreeAtGeneration(args) {
|
|
|
642
639
|
});
|
|
643
640
|
const action = draftUserText !== null
|
|
644
641
|
? { kind: 'draft_user_text', userText: draftUserText }
|
|
645
|
-
: rootPlan.questions.length > 0
|
|
642
|
+
: rootPlan.questions.length > 0
|
|
646
643
|
? {
|
|
647
644
|
kind: 'restore_pending',
|
|
648
645
|
pendingQ4H: rootPlan.questions.length > 0,
|
|
649
|
-
pendingSideDialogs: rootPlan.pendingSideDialogs.length > 0,
|
|
650
646
|
}
|
|
651
647
|
: { kind: 'auto_continue' };
|
|
652
648
|
const sideDialogPlans = [];
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DialogGenerationRunState, DialogLatestFile } from '@longrun-ai/kernel/types/storage';
|
|
2
|
+
export declare function getRecoverableGenerationRunState(latest: DialogLatestFile | null | undefined): Extract<DialogGenerationRunState, {
|
|
3
|
+
kind: 'open';
|
|
4
|
+
}> | undefined;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getRecoverableGenerationRunState = getRecoverableGenerationRunState;
|
|
4
|
+
function getRecoverableGenerationRunState(latest) {
|
|
5
|
+
if (!latest) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
if (latest.generationRunState?.kind !== 'open') {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
const marker = latest.executionMarker;
|
|
12
|
+
if (!marker) {
|
|
13
|
+
return latest.generationRunState;
|
|
14
|
+
}
|
|
15
|
+
if (marker.kind === 'dead') {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
if (marker.kind !== 'interrupted' ||
|
|
19
|
+
marker.reason.kind === 'pending_runtime_prompt' ||
|
|
20
|
+
marker.reason.kind === 'pending_reply_obligation') {
|
|
21
|
+
return latest.generationRunState;
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type MainDialog } from './dialog';
|
|
2
2
|
export type DriveTriggerEvent = Readonly<{
|
|
3
3
|
type: 'drive_trigger_evt';
|
|
4
|
-
action: '
|
|
4
|
+
action: 'wake_drive' | 'clear_drive_wake' | 'active_run_cleared';
|
|
5
5
|
rootId: string;
|
|
6
6
|
entryFound: boolean;
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
previousWakeQueued: boolean | null;
|
|
8
|
+
nextWakeQueued: boolean;
|
|
9
9
|
source: string;
|
|
10
10
|
reason: string;
|
|
11
11
|
emittedAtMs: number;
|
|
@@ -26,13 +26,12 @@ declare class GlobalDialogRegistry {
|
|
|
26
26
|
unregister(rootId: string): void;
|
|
27
27
|
private publishDriveTrigger;
|
|
28
28
|
waitForDriveTrigger(): Promise<DriveTriggerEvent>;
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
wakeDrive(rootId: string, meta?: DriveTriggerMeta): void;
|
|
30
|
+
clearDriveWake(rootId: string, meta?: DriveTriggerMeta): void;
|
|
31
31
|
notifyActiveRunCleared(rootId: string, meta?: DriveTriggerMeta): void;
|
|
32
32
|
noteActiveRunBlockedQueuedDrive(rootId: string): void;
|
|
33
33
|
hasPendingActiveRunClearedWake(rootId: string): boolean;
|
|
34
|
-
|
|
35
|
-
getDialogsNeedingDrive(): MainDialog[];
|
|
34
|
+
isDriveWakeQueued(rootId: string): boolean;
|
|
36
35
|
getLastDriveTrigger(rootId: string): DriveTriggerEvent | undefined;
|
|
37
36
|
getAll(): MainDialog[];
|
|
38
37
|
get size(): number;
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.globalDialogRegistry = void 0;
|
|
4
4
|
const evt_1 = require("@longrun-ai/kernel/evt");
|
|
5
|
+
const dialog_1 = require("./dialog");
|
|
6
|
+
const log_1 = require("./log");
|
|
5
7
|
const persistence_1 = require("./persistence");
|
|
8
|
+
const log = (0, log_1.createLogger)('dialog-global-registry');
|
|
6
9
|
class GlobalDialogRegistry {
|
|
7
10
|
constructor() {
|
|
8
11
|
this.entries = new Map();
|
|
@@ -31,26 +34,34 @@ class GlobalDialogRegistry {
|
|
|
31
34
|
}
|
|
32
35
|
this.entries.set(mainDialog.id.rootId, {
|
|
33
36
|
mainDialog,
|
|
34
|
-
|
|
37
|
+
wakeQueued: false,
|
|
35
38
|
activeRunClearedWakePending: false,
|
|
36
39
|
});
|
|
37
40
|
void (async () => {
|
|
38
41
|
try {
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
const hasPendingNextStepTriggers = await persistence_1.DialogPersistence.hasPendingNextStepTriggers(mainDialog.id);
|
|
43
|
+
const watchedDialogIds = await persistence_1.DialogPersistence.loadDriveWatchedDialogIds(mainDialog.id);
|
|
44
|
+
if (hasPendingNextStepTriggers || watchedDialogIds.length > 0) {
|
|
45
|
+
this.wakeDrive(mainDialog.id.rootId, {
|
|
42
46
|
source: 'dialog_registry_hydration',
|
|
43
|
-
reason:
|
|
47
|
+
reason: hasPendingNextStepTriggers
|
|
48
|
+
? 'persisted_next_step_triggers'
|
|
49
|
+
: 'persisted_drive_watch',
|
|
44
50
|
});
|
|
45
51
|
}
|
|
46
52
|
}
|
|
47
|
-
catch {
|
|
48
|
-
|
|
53
|
+
catch (error) {
|
|
54
|
+
log.warn('Failed to hydrate persisted drive wake for registered main dialog', error, {
|
|
55
|
+
rootId: mainDialog.id.rootId,
|
|
56
|
+
selfId: mainDialog.id.selfId,
|
|
57
|
+
});
|
|
49
58
|
}
|
|
50
59
|
})();
|
|
51
60
|
}
|
|
52
61
|
unregister(rootId) {
|
|
53
62
|
this.entries.delete(rootId);
|
|
63
|
+
this.lastDriveTriggerByRootId.delete(rootId);
|
|
64
|
+
(0, dialog_1.scheduleGlobalDialogMutexCleanupForRoot)(rootId);
|
|
54
65
|
}
|
|
55
66
|
publishDriveTrigger(args) {
|
|
56
67
|
const trigger = {
|
|
@@ -58,8 +69,8 @@ class GlobalDialogRegistry {
|
|
|
58
69
|
action: args.action,
|
|
59
70
|
rootId: args.rootId,
|
|
60
71
|
entryFound: args.entryFound,
|
|
61
|
-
|
|
62
|
-
|
|
72
|
+
previousWakeQueued: args.previousWakeQueued,
|
|
73
|
+
nextWakeQueued: args.nextWakeQueued,
|
|
63
74
|
source: args.meta.source,
|
|
64
75
|
reason: args.meta.reason,
|
|
65
76
|
emittedAtMs: Date.now(),
|
|
@@ -77,44 +88,44 @@ class GlobalDialogRegistry {
|
|
|
77
88
|
this.driveTriggerSubChan = (0, evt_1.createSubChan)(this.driveTriggerPubChan);
|
|
78
89
|
}
|
|
79
90
|
}
|
|
80
|
-
|
|
91
|
+
wakeDrive(rootId, meta) {
|
|
81
92
|
const triggerMeta = meta ?? {
|
|
82
93
|
source: 'unknown',
|
|
83
94
|
reason: 'unspecified',
|
|
84
95
|
};
|
|
85
96
|
const entry = this.entries.get(rootId);
|
|
86
|
-
const
|
|
97
|
+
const previousWakeQueued = entry ? entry.wakeQueued : null;
|
|
87
98
|
if (entry) {
|
|
88
|
-
entry.
|
|
99
|
+
entry.wakeQueued = true;
|
|
89
100
|
// A fresh queueing trigger supersedes any earlier "wake me once active run clears" debt.
|
|
90
101
|
entry.activeRunClearedWakePending = false;
|
|
91
102
|
}
|
|
92
103
|
this.publishDriveTrigger({
|
|
93
|
-
action: '
|
|
104
|
+
action: 'wake_drive',
|
|
94
105
|
rootId,
|
|
95
106
|
entryFound: entry !== undefined,
|
|
96
|
-
|
|
97
|
-
|
|
107
|
+
previousWakeQueued,
|
|
108
|
+
nextWakeQueued: true,
|
|
98
109
|
meta: triggerMeta,
|
|
99
110
|
});
|
|
100
111
|
}
|
|
101
|
-
|
|
112
|
+
clearDriveWake(rootId, meta) {
|
|
102
113
|
const triggerMeta = meta ?? {
|
|
103
114
|
source: 'unknown',
|
|
104
115
|
reason: 'unspecified',
|
|
105
116
|
};
|
|
106
117
|
const entry = this.entries.get(rootId);
|
|
107
|
-
const
|
|
118
|
+
const previousWakeQueued = entry ? entry.wakeQueued : null;
|
|
108
119
|
if (entry) {
|
|
109
|
-
entry.
|
|
120
|
+
entry.wakeQueued = false;
|
|
110
121
|
entry.activeRunClearedWakePending = false;
|
|
111
122
|
}
|
|
112
123
|
this.publishDriveTrigger({
|
|
113
|
-
action: '
|
|
124
|
+
action: 'clear_drive_wake',
|
|
114
125
|
rootId,
|
|
115
126
|
entryFound: entry !== undefined,
|
|
116
|
-
|
|
117
|
-
|
|
127
|
+
previousWakeQueued,
|
|
128
|
+
nextWakeQueued: false,
|
|
118
129
|
meta: triggerMeta,
|
|
119
130
|
});
|
|
120
131
|
}
|
|
@@ -127,24 +138,24 @@ class GlobalDialogRegistry {
|
|
|
127
138
|
if (!entry) {
|
|
128
139
|
return;
|
|
129
140
|
}
|
|
130
|
-
if (!entry.activeRunClearedWakePending || !entry.
|
|
141
|
+
if (!entry.activeRunClearedWakePending || !entry.wakeQueued) {
|
|
131
142
|
entry.activeRunClearedWakePending = false;
|
|
132
143
|
return;
|
|
133
144
|
}
|
|
134
|
-
const
|
|
145
|
+
const currentWakeQueued = entry ? entry.wakeQueued : null;
|
|
135
146
|
entry.activeRunClearedWakePending = false;
|
|
136
147
|
this.publishDriveTrigger({
|
|
137
148
|
action: 'active_run_cleared',
|
|
138
149
|
rootId,
|
|
139
150
|
entryFound: true,
|
|
140
|
-
|
|
141
|
-
|
|
151
|
+
previousWakeQueued: currentWakeQueued,
|
|
152
|
+
nextWakeQueued: entry.wakeQueued,
|
|
142
153
|
meta: triggerMeta,
|
|
143
154
|
});
|
|
144
155
|
}
|
|
145
156
|
noteActiveRunBlockedQueuedDrive(rootId) {
|
|
146
157
|
const entry = this.entries.get(rootId);
|
|
147
|
-
if (!entry || !entry.
|
|
158
|
+
if (!entry || !entry.wakeQueued) {
|
|
148
159
|
return;
|
|
149
160
|
}
|
|
150
161
|
entry.activeRunClearedWakePending = true;
|
|
@@ -152,13 +163,8 @@ class GlobalDialogRegistry {
|
|
|
152
163
|
hasPendingActiveRunClearedWake(rootId) {
|
|
153
164
|
return this.entries.get(rootId)?.activeRunClearedWakePending === true;
|
|
154
165
|
}
|
|
155
|
-
|
|
156
|
-
return this.entries.get(rootId)?.
|
|
157
|
-
}
|
|
158
|
-
getDialogsNeedingDrive() {
|
|
159
|
-
return Array.from(this.entries.values())
|
|
160
|
-
.filter((entry) => entry.needsDrive)
|
|
161
|
-
.map((entry) => entry.mainDialog);
|
|
166
|
+
isDriveWakeQueued(rootId) {
|
|
167
|
+
return this.entries.get(rootId)?.wakeQueued === true;
|
|
162
168
|
}
|
|
163
169
|
getLastDriveTrigger(rootId) {
|
|
164
170
|
return this.lastDriveTriggerByRootId.get(rootId);
|
|
@@ -24,28 +24,28 @@ function clampNonNegativeFiniteInt(value, fallback) {
|
|
|
24
24
|
return fallback;
|
|
25
25
|
return Math.max(0, Math.floor(value));
|
|
26
26
|
}
|
|
27
|
-
async function
|
|
28
|
-
const pending = args.latest?.
|
|
27
|
+
async function resolvePendingRuntimePromptForRestore(args) {
|
|
28
|
+
const pending = args.latest?.pendingRuntimePrompt;
|
|
29
29
|
if (!pending) {
|
|
30
|
-
return {
|
|
30
|
+
return { pendingRuntimePrompt: undefined };
|
|
31
31
|
}
|
|
32
32
|
const alreadyPersisted = args.messages.some((message) => {
|
|
33
33
|
return message.type === 'prompting_msg' && message.msgId === pending.msgId;
|
|
34
34
|
});
|
|
35
35
|
if (alreadyPersisted) {
|
|
36
36
|
if (args.status === 'running') {
|
|
37
|
-
await persistence_1.DialogPersistence.
|
|
37
|
+
await persistence_1.DialogPersistence.clearPendingRuntimePrompt(args.dialogId, pending.msgId, args.status);
|
|
38
38
|
}
|
|
39
|
-
return {
|
|
39
|
+
return { pendingRuntimePrompt: undefined };
|
|
40
40
|
}
|
|
41
|
-
return {
|
|
41
|
+
return { pendingRuntimePrompt: pending };
|
|
42
42
|
}
|
|
43
43
|
async function getOrRestoreMainDialog(rootId, status) {
|
|
44
44
|
const existing = dialog_global_registry_1.globalDialogRegistry.get(rootId);
|
|
45
45
|
if (existing) {
|
|
46
46
|
existing.setPersistenceStatus(status);
|
|
47
47
|
await existing.loadSideDialogRegistry();
|
|
48
|
-
await existing.
|
|
48
|
+
await existing.loadActiveCalleeDispatchesFromPersistence();
|
|
49
49
|
return existing;
|
|
50
50
|
}
|
|
51
51
|
const mainDialogId = new dialog_1.DialogID(rootId);
|
|
@@ -54,7 +54,7 @@ async function getOrRestoreMainDialog(rootId, status) {
|
|
|
54
54
|
return undefined;
|
|
55
55
|
const rootMetadata = rootState.metadata;
|
|
56
56
|
const latest = await persistence_1.DialogPersistence.loadDialogLatest(mainDialogId, status);
|
|
57
|
-
const {
|
|
57
|
+
const { pendingRuntimePrompt } = await resolvePendingRuntimePromptForRestore({
|
|
58
58
|
dialogId: mainDialogId,
|
|
59
59
|
status,
|
|
60
60
|
messages: rootState.messages,
|
|
@@ -75,7 +75,7 @@ async function getOrRestoreMainDialog(rootId, status) {
|
|
|
75
75
|
reminders: rootState.reminders,
|
|
76
76
|
currentCourse: rootState.currentCourse,
|
|
77
77
|
contextHealth: rootState.contextHealth,
|
|
78
|
-
|
|
78
|
+
pendingRuntimePrompt,
|
|
79
79
|
});
|
|
80
80
|
const persistedDisableDiligencePush = latest && typeof latest.disableDiligencePush === 'boolean'
|
|
81
81
|
? latest.disableDiligencePush
|
|
@@ -93,7 +93,7 @@ async function getOrRestoreMainDialog(rootId, status) {
|
|
|
93
93
|
// Keep the in-memory main dialog fully hydrated regardless of persistence status
|
|
94
94
|
// (running/completed/archived) so sideDialog lookup is stable across UI navigation.
|
|
95
95
|
await mainDialog.loadSideDialogRegistry();
|
|
96
|
-
await mainDialog.
|
|
96
|
+
await mainDialog.loadActiveCalleeDispatchesFromPersistence();
|
|
97
97
|
return mainDialog;
|
|
98
98
|
}
|
|
99
99
|
async function ensureDialogLoaded(mainDialog, targetId, status, visitedSelfIds = new Set()) {
|
|
@@ -124,7 +124,7 @@ async function ensureDialogLoaded(mainDialog, targetId, status, visitedSelfIds =
|
|
|
124
124
|
if (!state)
|
|
125
125
|
return undefined;
|
|
126
126
|
const latest = await persistence_1.DialogPersistence.loadDialogLatest(targetId, status);
|
|
127
|
-
const {
|
|
127
|
+
const { pendingRuntimePrompt } = await resolvePendingRuntimePromptForRestore({
|
|
128
128
|
dialogId: targetId,
|
|
129
129
|
status,
|
|
130
130
|
messages: state.messages,
|
|
@@ -151,7 +151,7 @@ async function ensureDialogLoaded(mainDialog, targetId, status, visitedSelfIds =
|
|
|
151
151
|
reminders: state.reminders,
|
|
152
152
|
currentCourse: state.currentCourse,
|
|
153
153
|
contextHealth: state.contextHealth,
|
|
154
|
-
|
|
154
|
+
pendingRuntimePrompt,
|
|
155
155
|
});
|
|
156
156
|
sideDialog.disableDiligencePush =
|
|
157
157
|
latest && typeof latest.disableDiligencePush === 'boolean'
|
|
@@ -23,7 +23,7 @@ function isInterruptionReasonManualResumeEligible(reason) {
|
|
|
23
23
|
case 'user_stop':
|
|
24
24
|
case 'emergency_stop':
|
|
25
25
|
case 'server_restart':
|
|
26
|
-
case '
|
|
26
|
+
case 'pending_runtime_prompt':
|
|
27
27
|
case 'pending_reply_obligation':
|
|
28
28
|
case 'fork_continue_ready':
|
|
29
29
|
case 'system_stop':
|
|
@@ -37,7 +37,7 @@ function isInterruptionReasonManualResumeEligible(reason) {
|
|
|
37
37
|
}
|
|
38
38
|
function doesInterruptionReasonRequireExplicitResume(reason) {
|
|
39
39
|
switch (reason.kind) {
|
|
40
|
-
case '
|
|
40
|
+
case 'pending_runtime_prompt':
|
|
41
41
|
case 'pending_reply_obligation':
|
|
42
42
|
return false;
|
|
43
43
|
case 'user_stop':
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DialogNextStepTriggerState, DialogTellaskCallState, DialogTellaskResultState } from '@longrun-ai/kernel/types/storage';
|
|
2
|
+
export declare function createEmptyDialogNextStepState(): DialogNextStepTriggerState;
|
|
3
|
+
export declare function createEmptyDialogTellaskCallState(): DialogTellaskCallState;
|
|
4
|
+
export declare function createEmptyDialogTellaskResultState(): DialogTellaskResultState;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createEmptyDialogNextStepState = createEmptyDialogNextStepState;
|
|
4
|
+
exports.createEmptyDialogTellaskCallState = createEmptyDialogTellaskCallState;
|
|
5
|
+
exports.createEmptyDialogTellaskResultState = createEmptyDialogTellaskResultState;
|
|
6
|
+
function createEmptyDialogNextStepState() {
|
|
7
|
+
return { nextSeq: 1, triggers: [] };
|
|
8
|
+
}
|
|
9
|
+
function createEmptyDialogTellaskCallState() {
|
|
10
|
+
return { calls: [] };
|
|
11
|
+
}
|
|
12
|
+
function createEmptyDialogTellaskResultState() {
|
|
13
|
+
return { results: [] };
|
|
14
|
+
}
|