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/apps/runtime.js
CHANGED
|
@@ -55,7 +55,7 @@ async function ensureMainDialogLoaded(rootId) {
|
|
|
55
55
|
const existing = dialog_global_registry_1.globalDialogRegistry.get(rootId);
|
|
56
56
|
if (existing) {
|
|
57
57
|
await existing.loadSideDialogRegistry();
|
|
58
|
-
await existing.
|
|
58
|
+
await existing.loadActiveCalleeDispatchesFromPersistence();
|
|
59
59
|
return existing;
|
|
60
60
|
}
|
|
61
61
|
return await (0, dialog_instance_registry_1.getOrRestoreMainDialog)(rootId, 'running');
|
|
@@ -118,7 +118,7 @@ async function resolveTargetDialog(sourceDlg, target) {
|
|
|
118
118
|
throw new Error(`dialog reminder target root not found (${describeTarget(target)})`);
|
|
119
119
|
}
|
|
120
120
|
await targetRoot.loadSideDialogRegistry();
|
|
121
|
-
await targetRoot.
|
|
121
|
+
await targetRoot.loadActiveCalleeDispatchesFromPersistence();
|
|
122
122
|
if (target.sessionSlug) {
|
|
123
123
|
const sideDialog = targetRoot.lookupSideDialog(target.agentId, target.sessionSlug);
|
|
124
124
|
if (!sideDialog) {
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Design constraints:
|
|
8
8
|
* - `displayState` is a UI/diagnostic projection, not a business source of truth.
|
|
9
9
|
* - Primary control flow must rely on underlying facts (active runs, stop requests,
|
|
10
|
-
* pending Q4H,
|
|
10
|
+
* pending Q4H, active callee dispatches, queued prompts, persisted status, explicit
|
|
11
11
|
* interruption/death markers).
|
|
12
12
|
* - The projection is persisted to latest.yaml (`DialogLatestFile.displayState`) so it survives
|
|
13
13
|
* restarts and multi-tab views can converge quickly.
|
|
@@ -51,8 +51,7 @@ export declare function broadcastDisplayStateMarker(dialogId: DialogID, marker:
|
|
|
51
51
|
reason?: DialogInterruptionReason;
|
|
52
52
|
}): void;
|
|
53
53
|
export declare function computeIdleDisplayState(dlg: Dialog): Promise<DialogDisplayState>;
|
|
54
|
-
export declare function refreshRunControlProjectionFromPersistenceFacts(dialogId: DialogID, trigger: 'resume_dialog' | 'resume_all' | 'run_control_snapshot' | '
|
|
55
|
-
export declare function isRecoverableGeneratingLatest(latest: DialogLatestFile | null): boolean;
|
|
54
|
+
export declare function refreshRunControlProjectionFromPersistenceFacts(dialogId: DialogID, trigger: 'resume_dialog' | 'resume_all' | 'run_control_snapshot' | 'active_callee_dispatches_changed' | 'q4h_changed'): Promise<DialogLatestFile | null>;
|
|
56
55
|
export declare function reconcileDisplayStatesAfterRestart(): Promise<void>;
|
|
57
56
|
export declare function requestInterruptDialog(dialogId: DialogID, reason: StopRequestedReason): Promise<{
|
|
58
57
|
applied: boolean;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Design constraints:
|
|
9
9
|
* - `displayState` is a UI/diagnostic projection, not a business source of truth.
|
|
10
10
|
* - Primary control flow must rely on underlying facts (active runs, stop requests,
|
|
11
|
-
* pending Q4H,
|
|
11
|
+
* pending Q4H, active callee dispatches, queued prompts, persisted status, explicit
|
|
12
12
|
* interruption/death markers).
|
|
13
13
|
* - The projection is persisted to latest.yaml (`DialogLatestFile.displayState`) so it survives
|
|
14
14
|
* restarts and multi-tab views can converge quickly.
|
|
@@ -40,14 +40,15 @@ exports.setDialogDisplayState = setDialogDisplayState;
|
|
|
40
40
|
exports.broadcastDisplayStateMarker = broadcastDisplayStateMarker;
|
|
41
41
|
exports.computeIdleDisplayState = computeIdleDisplayState;
|
|
42
42
|
exports.refreshRunControlProjectionFromPersistenceFacts = refreshRunControlProjectionFromPersistenceFacts;
|
|
43
|
-
exports.isRecoverableGeneratingLatest = isRecoverableGeneratingLatest;
|
|
44
43
|
exports.reconcileDisplayStatesAfterRestart = reconcileDisplayStatesAfterRestart;
|
|
45
44
|
exports.requestInterruptDialog = requestInterruptDialog;
|
|
46
45
|
exports.requestEmergencyStopAll = requestEmergencyStopAll;
|
|
47
46
|
const time_1 = require("@longrun-ai/kernel/utils/time");
|
|
48
47
|
const dialog_1 = require("./dialog");
|
|
48
|
+
const dialog_generation_run_1 = require("./dialog-generation-run");
|
|
49
49
|
const dialog_global_registry_1 = require("./dialog-global-registry");
|
|
50
50
|
const dialog_interruption_1 = require("./dialog-interruption");
|
|
51
|
+
const dialog_latest_state_1 = require("./dialog-latest-state");
|
|
51
52
|
const evt_registry_1 = require("./evt-registry");
|
|
52
53
|
const log_1 = require("./log");
|
|
53
54
|
const persistence_1 = require("./persistence");
|
|
@@ -90,58 +91,23 @@ function isDialogLatestResumable(latest) {
|
|
|
90
91
|
function isSameDisplayState(left, right) {
|
|
91
92
|
return JSON.stringify(left) === JSON.stringify(right);
|
|
92
93
|
}
|
|
93
|
-
function isSideDialogResponseAnchor(record) {
|
|
94
|
-
return record?.type === 'tellask_anchor_record' && record.anchorRole === 'response';
|
|
95
|
-
}
|
|
96
94
|
function isNonIdleDisplayProjection(state) {
|
|
97
95
|
return state !== undefined && state.kind !== 'idle_waiting_user';
|
|
98
96
|
}
|
|
99
|
-
function
|
|
100
|
-
return
|
|
101
|
-
kind: 'stopped',
|
|
102
|
-
reason: { kind: 'pending_reply_obligation' },
|
|
103
|
-
continueEnabled: true,
|
|
104
|
-
};
|
|
97
|
+
function hasPendingNextStepTriggers(latest) {
|
|
98
|
+
return (latest?.nextStep.triggers.length ?? 0) > 0;
|
|
105
99
|
}
|
|
106
|
-
function
|
|
107
|
-
if (
|
|
108
|
-
return { kind: 'blocked', reason: { kind: 'needs_human_input_and_sideDialogs' } };
|
|
109
|
-
}
|
|
110
|
-
if (args.hasQ4H) {
|
|
100
|
+
function q4hSuspensionDisplayState(hasQ4H) {
|
|
101
|
+
if (hasQ4H) {
|
|
111
102
|
return { kind: 'blocked', reason: { kind: 'needs_human_input' } };
|
|
112
103
|
}
|
|
113
|
-
if (args.hasSideDialogs) {
|
|
114
|
-
return { kind: 'blocked', reason: { kind: 'waiting_for_sideDialogs' } };
|
|
115
|
-
}
|
|
116
104
|
return undefined;
|
|
117
105
|
}
|
|
118
|
-
async function hasSideDialogFinalResponseAnchor(dialogId, latest) {
|
|
119
|
-
if (dialogId.selfId === dialogId.rootId) {
|
|
120
|
-
return undefined;
|
|
121
|
-
}
|
|
122
|
-
const rawCourse = latest.currentCourse;
|
|
123
|
-
const currentCourse = Number.isFinite(rawCourse) && rawCourse > 0 ? Math.floor(rawCourse) : 1;
|
|
124
|
-
const courseEvents = await persistence_1.DialogPersistence.loadCourseEvents(dialogId, currentCourse, 'running');
|
|
125
|
-
for (let index = courseEvents.length - 1; index >= 0; index -= 1) {
|
|
126
|
-
const event = courseEvents[index];
|
|
127
|
-
if (event.type === 'tellask_anchor_record') {
|
|
128
|
-
return isSideDialogResponseAnchor(event) ? { callId: event.callId } : undefined;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
return undefined;
|
|
132
|
-
}
|
|
133
|
-
async function hasActiveSideDialogReplyObligation(dialogId) {
|
|
134
|
-
if (dialogId.selfId === dialogId.rootId) {
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
const activeObligation = await persistence_1.DialogPersistence.loadActiveTellaskReplyObligation(dialogId, 'running');
|
|
138
|
-
return activeObligation !== undefined;
|
|
139
|
-
}
|
|
140
106
|
async function resolveSideDialogFinalResponseClosure(args) {
|
|
141
107
|
if (!args.latest) {
|
|
142
108
|
return { kind: 'no_final_response' };
|
|
143
109
|
}
|
|
144
|
-
const finalResponseAnchor =
|
|
110
|
+
const finalResponseAnchor = args.latest.sideDialogFinalResponse;
|
|
145
111
|
if (!finalResponseAnchor) {
|
|
146
112
|
return { kind: 'no_final_response' };
|
|
147
113
|
}
|
|
@@ -165,37 +131,6 @@ async function resolveSideDialogFinalResponseClosure(args) {
|
|
|
165
131
|
activeReplyObligation,
|
|
166
132
|
};
|
|
167
133
|
}
|
|
168
|
-
async function coerceIdleDisplayStateForActiveSideDialogReplyObligation(dialogId, displayState) {
|
|
169
|
-
if (displayState.kind !== 'idle_waiting_user') {
|
|
170
|
-
return displayState;
|
|
171
|
-
}
|
|
172
|
-
if (!(await hasActiveSideDialogReplyObligation(dialogId))) {
|
|
173
|
-
return displayState;
|
|
174
|
-
}
|
|
175
|
-
const latest = await persistence_1.DialogPersistence.loadDialogLatest(dialogId, 'running');
|
|
176
|
-
const finalResponseClosure = await resolveSideDialogFinalResponseClosure({ dialogId, latest });
|
|
177
|
-
if (finalResponseClosure.kind === 'closed_with_matching_reply_obligation') {
|
|
178
|
-
await persistence_1.DialogPersistence.setActiveTellaskReplyObligation(dialogId, undefined, 'running');
|
|
179
|
-
return displayState;
|
|
180
|
-
}
|
|
181
|
-
if (finalResponseClosure.kind === 'closed_without_active_reply_obligation') {
|
|
182
|
-
return displayState;
|
|
183
|
-
}
|
|
184
|
-
const q4h = await persistence_1.DialogPersistence.loadQuestions4HumanState(dialogId, 'running');
|
|
185
|
-
const pendingSideDialogs = await persistence_1.DialogPersistence.loadPendingSideDialogs(dialogId, 'running');
|
|
186
|
-
const blocked = blockerDisplayState({
|
|
187
|
-
hasQ4H: q4h.length > 0,
|
|
188
|
-
hasSideDialogs: pendingSideDialogs.length > 0,
|
|
189
|
-
});
|
|
190
|
-
const healedDisplayState = blocked ?? pendingReplyObligationDisplayState();
|
|
191
|
-
log.warn('Prevented sideDialog with active reply obligation from entering idle display state', new Error('sideDialog idle display-state invariant violation'), {
|
|
192
|
-
dialogId: dialogId.valueOf(),
|
|
193
|
-
rootId: dialogId.rootId,
|
|
194
|
-
selfId: dialogId.selfId,
|
|
195
|
-
healedDisplayState,
|
|
196
|
-
});
|
|
197
|
-
return healedDisplayState;
|
|
198
|
-
}
|
|
199
134
|
function classifyRunControlBucket(state) {
|
|
200
135
|
if (!state)
|
|
201
136
|
return 'none';
|
|
@@ -246,17 +181,15 @@ async function getRunControlCountsSnapshot() {
|
|
|
246
181
|
else if (latest?.executionMarker?.kind === 'interrupted' &&
|
|
247
182
|
isStoppedReasonResumable(latest.executionMarker.reason)) {
|
|
248
183
|
// Keep run-control counts aligned with actual Continue affordance:
|
|
249
|
-
// - ordinary interrupted dialogs count as resumable only when no
|
|
250
|
-
// - interjection-paused dialogs still count as resumable even if
|
|
184
|
+
// - ordinary interrupted dialogs count as resumable only when no Q4H suspension remains
|
|
185
|
+
// - interjection-paused dialogs still count as resumable even if Q4H remains,
|
|
251
186
|
// because the intended UX is that Continue exits the temporary paused projection
|
|
252
187
|
// and re-evaluates the original task from fresh facts
|
|
253
188
|
if ((0, interjection_pause_stop_1.isUserInterjectionPauseStopReason)(latest.executionMarker.reason)) {
|
|
254
189
|
resumable++;
|
|
255
190
|
}
|
|
256
191
|
else {
|
|
257
|
-
|
|
258
|
-
const pendingSideDialogs = await persistence_1.DialogPersistence.loadPendingSideDialogs(dialogId, 'running');
|
|
259
|
-
if (q4h.length === 0 && pendingSideDialogs.length === 0) {
|
|
192
|
+
if (latest.userWait?.kind !== 'awaiting_user_answer') {
|
|
260
193
|
resumable++;
|
|
261
194
|
}
|
|
262
195
|
}
|
|
@@ -430,7 +363,6 @@ async function clearDialogInterruptedExecutionMarker(dialogId) {
|
|
|
430
363
|
await setDialogExecutionMarker(dialogId, undefined);
|
|
431
364
|
}
|
|
432
365
|
async function setDialogDisplayState(dialogId, displayState) {
|
|
433
|
-
displayState = await coerceIdleDisplayStateForActiveSideDialogReplyObligation(dialogId, displayState);
|
|
434
366
|
if (displayState.kind === 'dead' && dialogId.selfId === dialogId.rootId) {
|
|
435
367
|
log.warn('Rejecting dead displayState for main dialog (main dialogs must not be dead)', undefined, {
|
|
436
368
|
dialogId: dialogId.valueOf(),
|
|
@@ -535,18 +467,16 @@ async function computeIdleDisplayState(dlg) {
|
|
|
535
467
|
continueEnabled: isStoppedReasonResumable(latest.executionMarker.reason),
|
|
536
468
|
};
|
|
537
469
|
}
|
|
538
|
-
if (latest?.
|
|
470
|
+
if (latest?.pendingRuntimePrompt) {
|
|
539
471
|
return {
|
|
540
472
|
kind: 'stopped',
|
|
541
|
-
reason: { kind: '
|
|
473
|
+
reason: { kind: 'pending_runtime_prompt' },
|
|
542
474
|
continueEnabled: true,
|
|
543
475
|
};
|
|
544
476
|
}
|
|
545
|
-
const
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
if (blocked) {
|
|
549
|
-
return blocked;
|
|
477
|
+
const q4hSuspension = q4hSuspensionDisplayState(latest?.userWait?.kind === 'awaiting_user_answer');
|
|
478
|
+
if (q4hSuspension) {
|
|
479
|
+
return q4hSuspension;
|
|
550
480
|
}
|
|
551
481
|
const finalResponseClosure = await resolveSideDialogFinalResponseClosure({
|
|
552
482
|
dialogId: dlg.id,
|
|
@@ -556,9 +486,6 @@ async function computeIdleDisplayState(dlg) {
|
|
|
556
486
|
finalResponseClosure.kind === 'closed_with_matching_reply_obligation') {
|
|
557
487
|
return { kind: 'idle_waiting_user' };
|
|
558
488
|
}
|
|
559
|
-
if (await hasActiveSideDialogReplyObligation(dlg.id)) {
|
|
560
|
-
return pendingReplyObligationDisplayState();
|
|
561
|
-
}
|
|
562
489
|
return { kind: 'idle_waiting_user' };
|
|
563
490
|
}
|
|
564
491
|
async function computeIdleDisplayStateFromPersistence(dialogId) {
|
|
@@ -581,34 +508,27 @@ async function computeIdleDisplayStateFromPersistence(dialogId) {
|
|
|
581
508
|
continueEnabled: isStoppedReasonResumable(latest.executionMarker.reason),
|
|
582
509
|
};
|
|
583
510
|
}
|
|
584
|
-
if (latest?.
|
|
511
|
+
if (latest?.pendingRuntimePrompt) {
|
|
585
512
|
return {
|
|
586
513
|
kind: 'stopped',
|
|
587
|
-
reason: { kind: '
|
|
514
|
+
reason: { kind: 'pending_runtime_prompt' },
|
|
588
515
|
continueEnabled: true,
|
|
589
516
|
};
|
|
590
517
|
}
|
|
591
|
-
const
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
const hasSideDialogs = pendingSideDialogs.length > 0;
|
|
595
|
-
const blocked = blockerDisplayState({ hasQ4H, hasSideDialogs });
|
|
596
|
-
if (blocked) {
|
|
597
|
-
return blocked;
|
|
518
|
+
const q4hSuspension = q4hSuspensionDisplayState(latest?.userWait?.kind === 'awaiting_user_answer');
|
|
519
|
+
if (q4hSuspension) {
|
|
520
|
+
return q4hSuspension;
|
|
598
521
|
}
|
|
599
522
|
const finalResponseClosure = await resolveSideDialogFinalResponseClosure({ dialogId, latest });
|
|
600
523
|
if (finalResponseClosure.kind === 'closed_without_active_reply_obligation' ||
|
|
601
524
|
finalResponseClosure.kind === 'closed_with_matching_reply_obligation') {
|
|
602
525
|
return { kind: 'idle_waiting_user' };
|
|
603
526
|
}
|
|
604
|
-
if (await hasActiveSideDialogReplyObligation(dialogId)) {
|
|
605
|
-
return pendingReplyObligationDisplayState();
|
|
606
|
-
}
|
|
607
527
|
return { kind: 'idle_waiting_user' };
|
|
608
528
|
}
|
|
609
529
|
async function healStaleSideDialogRunControlAfterFinalResponse(args) {
|
|
610
530
|
if (args.dialogId.selfId === args.dialogId.rootId ||
|
|
611
|
-
(args.latest
|
|
531
|
+
(!hasPendingNextStepTriggers(args.latest) &&
|
|
612
532
|
args.latest.generating !== true &&
|
|
613
533
|
args.latest.executionMarker?.kind !== 'interrupted' &&
|
|
614
534
|
!isNonIdleDisplayProjection(args.latest.displayState))) {
|
|
@@ -617,7 +537,7 @@ async function healStaleSideDialogRunControlAfterFinalResponse(args) {
|
|
|
617
537
|
if (args.latest.executionMarker?.kind === 'dead') {
|
|
618
538
|
return args.latest;
|
|
619
539
|
}
|
|
620
|
-
if (args.latest.
|
|
540
|
+
if (args.latest.pendingRuntimePrompt) {
|
|
621
541
|
return args.latest;
|
|
622
542
|
}
|
|
623
543
|
const finalResponseClosure = await resolveSideDialogFinalResponseClosure({
|
|
@@ -645,7 +565,7 @@ async function healStaleSideDialogRunControlAfterFinalResponse(args) {
|
|
|
645
565
|
responseCallId: finalResponseClosure.callId,
|
|
646
566
|
clearedReplyObligation,
|
|
647
567
|
previousGenerating: args.latest.generating ?? null,
|
|
648
|
-
|
|
568
|
+
previousNextStepTriggerCount: args.latest.nextStep.triggers.length,
|
|
649
569
|
previousDisplayState: args.latest.displayState ?? null,
|
|
650
570
|
previousExecutionMarker: args.latest.executionMarker ?? null,
|
|
651
571
|
});
|
|
@@ -653,7 +573,7 @@ async function healStaleSideDialogRunControlAfterFinalResponse(args) {
|
|
|
653
573
|
kind: 'patch',
|
|
654
574
|
patch: {
|
|
655
575
|
generating: false,
|
|
656
|
-
|
|
576
|
+
nextStep: (0, dialog_latest_state_1.createEmptyDialogNextStepState)(),
|
|
657
577
|
displayState: { kind: 'idle_waiting_user' },
|
|
658
578
|
executionMarker: undefined,
|
|
659
579
|
},
|
|
@@ -690,16 +610,15 @@ async function refreshRunControlProjectionFromPersistenceFacts(dialogId, trigger
|
|
|
690
610
|
(0, interjection_pause_stop_1.isUserInterjectionPauseStopReason)(latest.executionMarker.reason)) {
|
|
691
611
|
// WARNING:
|
|
692
612
|
// This is the one place where the projection intentionally preserves the paused-interjection
|
|
693
|
-
// stopped state ahead of the current
|
|
613
|
+
// stopped state ahead of the current suspension facts. That is not a bug: after a user
|
|
694
614
|
// interjection we want the UI to keep showing "original task paused; click Continue" even if
|
|
695
|
-
// the underlying dialog is still waiting on Q4H
|
|
615
|
+
// the underlying dialog is still waiting on Q4H.
|
|
696
616
|
//
|
|
697
|
-
// The true source-of-truth decision about what Continue should do next lives in
|
|
698
|
-
//
|
|
699
|
-
//
|
|
700
|
-
// - keeps driving immediately.
|
|
617
|
+
// The true source-of-truth decision about what Continue should do next lives in `flow.ts`'s
|
|
618
|
+
// resume path, which performs a fresh fact scan at resume time and then either restores the
|
|
619
|
+
// Q4H suspension projection or keeps driving immediately.
|
|
701
620
|
//
|
|
702
|
-
// Do not "heal" this branch away by prioritizing
|
|
621
|
+
// Do not "heal" this branch away by prioritizing suspension facts here; that would collapse the
|
|
703
622
|
// temporary interjection UX and make repeated interjection turns revert too early.
|
|
704
623
|
return {
|
|
705
624
|
kind: 'stopped',
|
|
@@ -707,29 +626,22 @@ async function refreshRunControlProjectionFromPersistenceFacts(dialogId, trigger
|
|
|
707
626
|
continueEnabled: isStoppedReasonResumable(latest.executionMarker.reason),
|
|
708
627
|
};
|
|
709
628
|
}
|
|
710
|
-
if (latest.
|
|
629
|
+
if (latest.pendingRuntimePrompt) {
|
|
711
630
|
return {
|
|
712
631
|
kind: 'stopped',
|
|
713
|
-
reason: { kind: '
|
|
632
|
+
reason: { kind: 'pending_runtime_prompt' },
|
|
714
633
|
continueEnabled: true,
|
|
715
634
|
};
|
|
716
635
|
}
|
|
717
|
-
const
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
const hasSideDialogs = pendingSideDialogs.length > 0;
|
|
721
|
-
const blocked = blockerDisplayState({ hasQ4H, hasSideDialogs });
|
|
722
|
-
if (blocked) {
|
|
723
|
-
return blocked;
|
|
636
|
+
const q4hSuspension = q4hSuspensionDisplayState(latest.userWait?.kind === 'awaiting_user_answer');
|
|
637
|
+
if (q4hSuspension) {
|
|
638
|
+
return q4hSuspension;
|
|
724
639
|
}
|
|
725
640
|
const finalResponseClosure = await resolveSideDialogFinalResponseClosure({ dialogId, latest });
|
|
726
641
|
if (finalResponseClosure.kind === 'closed_without_active_reply_obligation' ||
|
|
727
642
|
finalResponseClosure.kind === 'closed_with_matching_reply_obligation') {
|
|
728
643
|
return { kind: 'idle_waiting_user' };
|
|
729
644
|
}
|
|
730
|
-
if (await hasActiveSideDialogReplyObligation(dialogId)) {
|
|
731
|
-
return pendingReplyObligationDisplayState();
|
|
732
|
-
}
|
|
733
645
|
if (latest.executionMarker?.kind === 'interrupted' &&
|
|
734
646
|
latest.executionMarker.reason.kind !== 'pending_reply_obligation') {
|
|
735
647
|
return {
|
|
@@ -775,21 +687,6 @@ async function computeIdleDisplayStateForReconciliation(dialogId) {
|
|
|
775
687
|
return null;
|
|
776
688
|
}
|
|
777
689
|
}
|
|
778
|
-
function isRecoverableGeneratingLatest(latest) {
|
|
779
|
-
if (latest?.generating !== true) {
|
|
780
|
-
return false;
|
|
781
|
-
}
|
|
782
|
-
const marker = latest.executionMarker;
|
|
783
|
-
if (!marker) {
|
|
784
|
-
return true;
|
|
785
|
-
}
|
|
786
|
-
if (marker.kind === 'dead') {
|
|
787
|
-
return false;
|
|
788
|
-
}
|
|
789
|
-
return (marker.kind !== 'interrupted' ||
|
|
790
|
-
marker.reason.kind === 'pending_course_start' ||
|
|
791
|
-
marker.reason.kind === 'pending_reply_obligation');
|
|
792
|
-
}
|
|
793
690
|
async function reconcileDisplayStatesAfterRestart() {
|
|
794
691
|
const dialogIds = await persistence_1.DialogPersistence.listAllDialogIds('running');
|
|
795
692
|
for (const dialogId of dialogIds) {
|
|
@@ -832,9 +729,13 @@ async function reconcileDisplayStatesAfterRestart() {
|
|
|
832
729
|
}
|
|
833
730
|
continue;
|
|
834
731
|
}
|
|
732
|
+
if (latest.generating === true && latest.generationRunState === undefined) {
|
|
733
|
+
await persistence_1.DialogPersistence.quarantineMalformedRuntimeState(dialogId, 'running', 'restart_reconciliation_missing_generation_run_state', `Restart reconciliation refused to recover generating dialog without generationRunState (rootId=${dialogId.rootId}, selfId=${dialogId.selfId})`);
|
|
734
|
+
continue;
|
|
735
|
+
}
|
|
835
736
|
if (dialogId.selfId !== dialogId.rootId &&
|
|
836
737
|
(latest.generating === true ||
|
|
837
|
-
latest
|
|
738
|
+
hasPendingNextStepTriggers(latest) ||
|
|
838
739
|
latest.executionMarker?.kind === 'interrupted' ||
|
|
839
740
|
isNonIdleDisplayProjection(latest.displayState))) {
|
|
840
741
|
const healedStaleSideDialogRunControl = await healStaleSideDialogRunControlAfterFinalResponse({
|
|
@@ -846,19 +747,26 @@ async function reconcileDisplayStatesAfterRestart() {
|
|
|
846
747
|
continue;
|
|
847
748
|
}
|
|
848
749
|
latest = healedStaleSideDialogRunControl;
|
|
849
|
-
if (latest.generating !== true && latest
|
|
750
|
+
if (latest.generating !== true && !hasPendingNextStepTriggers(latest)) {
|
|
850
751
|
continue;
|
|
851
752
|
}
|
|
852
753
|
}
|
|
853
|
-
|
|
754
|
+
const recoverableGenerationRunState = (0, dialog_generation_run_1.getRecoverableGenerationRunState)(latest);
|
|
755
|
+
if (recoverableGenerationRunState !== undefined) {
|
|
854
756
|
try {
|
|
757
|
+
await persistence_1.DialogPersistence.upsertNextStepTrigger(dialogId, {
|
|
758
|
+
triggerId: `open-generation-recovery:${dialogId.selfId}:${recoverableGenerationRunState.course}:${recoverableGenerationRunState.genseq}`,
|
|
759
|
+
kind: 'open_generation_recovery',
|
|
760
|
+
course: recoverableGenerationRunState.course,
|
|
761
|
+
genseq: recoverableGenerationRunState.genseq,
|
|
762
|
+
createdAt: recoverableGenerationRunState.openedAt,
|
|
763
|
+
}, 'running');
|
|
855
764
|
await persistence_1.DialogPersistence.mutateDialogLatest(dialogId, () => ({
|
|
856
765
|
kind: 'patch',
|
|
857
766
|
patch: {
|
|
858
|
-
needsDrive: true,
|
|
859
767
|
displayState: { kind: 'proceeding' },
|
|
860
768
|
executionMarker: existingMarker?.kind === 'interrupted' &&
|
|
861
|
-
(existingMarker.reason.kind === '
|
|
769
|
+
(existingMarker.reason.kind === 'pending_runtime_prompt' ||
|
|
862
770
|
existingMarker.reason.kind === 'pending_reply_obligation')
|
|
863
771
|
? undefined
|
|
864
772
|
: existingMarker,
|
|
@@ -872,7 +780,7 @@ async function reconcileDisplayStatesAfterRestart() {
|
|
|
872
780
|
}
|
|
873
781
|
continue;
|
|
874
782
|
}
|
|
875
|
-
if (latest.generating === true || latest
|
|
783
|
+
if (latest.generating === true || hasPendingNextStepTriggers(latest)) {
|
|
876
784
|
const nextIdle = await computeIdleDisplayStateForReconciliation(dialogId);
|
|
877
785
|
if (!nextIdle) {
|
|
878
786
|
continue;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DialogLatestFile } from '@longrun-ai/kernel/types/storage';
|
|
2
|
+
export type DialogLatestSnapshot = DialogLatestFile | null;
|
|
3
|
+
export declare function hasRecoverableGenerationBeyondFinalResponse(latest: DialogLatestFile): boolean;
|
|
4
|
+
export declare function hasDurableDriveWork(latest: DialogLatestSnapshot): boolean;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasRecoverableGenerationBeyondFinalResponse = hasRecoverableGenerationBeyondFinalResponse;
|
|
4
|
+
exports.hasDurableDriveWork = hasDurableDriveWork;
|
|
5
|
+
const dialog_generation_run_1 = require("./dialog-generation-run");
|
|
6
|
+
function hasResultArrivalTrigger(latest) {
|
|
7
|
+
return latest.nextStep.triggers.some((trigger) => trigger.kind === 'result_arrival');
|
|
8
|
+
}
|
|
9
|
+
function hasRecoverableGenerationBeyondFinalResponse(latest) {
|
|
10
|
+
if ((0, dialog_generation_run_1.getRecoverableGenerationRunState)(latest) === undefined) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const finalResponse = latest.sideDialogFinalResponse;
|
|
14
|
+
if (finalResponse === undefined) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
return (latest.pendingRuntimePrompt !== undefined ||
|
|
18
|
+
(latest.latestAssignmentAnchor !== undefined &&
|
|
19
|
+
latest.latestAssignmentAnchor.callId !== finalResponse.callId));
|
|
20
|
+
}
|
|
21
|
+
function hasDurableDriveWork(latest) {
|
|
22
|
+
if (!latest) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const replyDelivery = latest.replyDelivery;
|
|
26
|
+
if (replyDelivery &&
|
|
27
|
+
(replyDelivery.status === 'pending' || replyDelivery.toolResultStatus === 'pending')) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
if (latest.pendingRuntimePrompt !== undefined) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
if (hasRecoverableGenerationBeyondFinalResponse(latest)) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
if (latest.sideDialogFinalResponse !== undefined) {
|
|
37
|
+
return hasResultArrivalTrigger(latest);
|
|
38
|
+
}
|
|
39
|
+
return latest.nextStep.triggers.length > 0;
|
|
40
|
+
}
|