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.d.ts
CHANGED
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import type { ContextHealthSnapshot } from '@longrun-ai/kernel/types/context-health';
|
|
16
16
|
import type { DialogEvent, NativeToolCallPayload, ReminderContent, WebSearchCallAction, WebSearchCallSource } from '@longrun-ai/kernel/types/dialog';
|
|
17
|
-
import type { DialogQueuedDeferredQ4HAnswerState, DialogQueuedPromptState, DialogQueuedUserGenerationBoundaryState, DialogRunControlSpec, DialogRuntimePrompt,
|
|
17
|
+
import type { DialogCalleeReplyTarget, DialogQueuedDeferredQ4HAnswerState, DialogQueuedPromptState, DialogQueuedUserGenerationBoundaryState, DialogRunControlSpec, DialogRuntimePrompt, DialogUserPrompt, DriveIntent } from '@longrun-ai/kernel/types/drive-intent';
|
|
18
18
|
import type { LanguageCode } from '@longrun-ai/kernel/types/language';
|
|
19
|
-
import type { CalleeCourseNumber, CalleeGenerationSeqNumber, CallSiteCourseNo, CallSiteGenseqNo, DialogAskerStackState, DialogMetadataFile, HumanQuestion, ProviderData, ReasoningPayload, TellaskCallRecordName, TellaskReplyDirective } from '@longrun-ai/kernel/types/storage';
|
|
19
|
+
import type { ActiveCalleesFile, CalleeCourseNumber, CalleeGenerationSeqNumber, CallSiteCourseNo, CallSiteGenseqNo, DialogAskerStackState, DialogLatestFile, DialogMetadataFile, HumanQuestion, ProviderData, ReasoningPayload, TellaskCallRecordName, TellaskReplyDirective } from '@longrun-ai/kernel/types/storage';
|
|
20
20
|
import { ChatMessage, FuncResultMsg, TellaskCarryoverMsg, TellaskResultMsg } from './llm/client';
|
|
21
21
|
import type { ToolResultImageIngest, UserImageIngest } from './llm/gen';
|
|
22
22
|
import type { JsonValue } from './tool';
|
|
@@ -38,9 +38,6 @@ type NewCourseHook = (args: {
|
|
|
38
38
|
prompt: DialogRuntimePrompt;
|
|
39
39
|
runControl?: DialogRunControlSpec;
|
|
40
40
|
}) => Promise<NewCourseHookResult>;
|
|
41
|
-
export type DialogSuspensionStatusOptions = Readonly<{
|
|
42
|
-
allowPendingSideDialogs?: boolean;
|
|
43
|
-
}>;
|
|
44
41
|
export declare class DialogID {
|
|
45
42
|
readonly selfId: string;
|
|
46
43
|
readonly rootId: string;
|
|
@@ -61,11 +58,11 @@ export declare class DialogID {
|
|
|
61
58
|
hashCode(): string;
|
|
62
59
|
}
|
|
63
60
|
/**
|
|
64
|
-
* Phase 6:
|
|
65
|
-
* Tracks a sideDialog that
|
|
61
|
+
* Phase 6: Active callee dispatch record.
|
|
62
|
+
* Tracks a sideDialog that has been dispatched but not yet completed.
|
|
66
63
|
*/
|
|
67
|
-
export interface
|
|
68
|
-
|
|
64
|
+
export interface ActiveCalleeDispatch {
|
|
65
|
+
calleeDialogId: DialogID;
|
|
69
66
|
createdAt: string;
|
|
70
67
|
mentionList?: string[];
|
|
71
68
|
tellaskContent: string;
|
|
@@ -86,6 +83,7 @@ export interface SideDialogResponse {
|
|
|
86
83
|
completedAt: string;
|
|
87
84
|
callType: 'A' | 'B' | 'C';
|
|
88
85
|
}
|
|
86
|
+
export declare function scheduleGlobalDialogMutexCleanupForRoot(rootId: string): void;
|
|
89
87
|
/**
|
|
90
88
|
* Common dialog initialization parameters (shared between MainDialog and SideDialog)
|
|
91
89
|
*/
|
|
@@ -99,7 +97,7 @@ export interface DialogInitParams {
|
|
|
99
97
|
createdAt?: string;
|
|
100
98
|
updatedAt?: string;
|
|
101
99
|
contextHealth?: ContextHealthSnapshot;
|
|
102
|
-
|
|
100
|
+
pendingRuntimePrompt?: DialogRuntimePrompt;
|
|
103
101
|
};
|
|
104
102
|
}
|
|
105
103
|
export type VisibleReminderTarget = Readonly<{
|
|
@@ -161,7 +159,7 @@ export declare abstract class Dialog {
|
|
|
161
159
|
protected _courseRuntimeNoticeMsgs: ChatMessage[];
|
|
162
160
|
protected _generationStarted: boolean;
|
|
163
161
|
protected _generationStartedGenseq: number;
|
|
164
|
-
protected
|
|
162
|
+
protected _activeCalleeDialogIds: DialogID[];
|
|
165
163
|
protected _suspensionState: 'active' | 'suspended' | 'resumed';
|
|
166
164
|
diligencePushRemainingBudget: number;
|
|
167
165
|
disableDiligencePush: boolean;
|
|
@@ -217,35 +215,36 @@ export declare abstract class Dialog {
|
|
|
217
215
|
isLocked(): boolean;
|
|
218
216
|
/**
|
|
219
217
|
* Check if dialog has pending Q4H questions.
|
|
220
|
-
*
|
|
218
|
+
* Reads the dialog latest user-wait state; q4h.yaml remains the detailed question payload store.
|
|
221
219
|
*/
|
|
222
220
|
hasPendingQ4H(): Promise<boolean>;
|
|
223
221
|
/**
|
|
224
|
-
* Check if dialog has
|
|
222
|
+
* Check if dialog has active callee dispatches.
|
|
225
223
|
*/
|
|
226
|
-
|
|
224
|
+
hasActiveCalleeDispatches(): Promise<boolean>;
|
|
227
225
|
/**
|
|
228
|
-
* Check if dialog can be driven
|
|
226
|
+
* Check if dialog can be driven.
|
|
227
|
+
*
|
|
228
|
+
* Active callee dispatches are background callee work: they are observable, but they must not
|
|
229
|
+
* block the caller dialog from continuing when some other concrete drive source exists.
|
|
229
230
|
*/
|
|
230
|
-
canDrive(
|
|
231
|
+
canDrive(): Promise<boolean>;
|
|
231
232
|
/**
|
|
232
233
|
* Get suspension status for logging/debugging.
|
|
233
234
|
*/
|
|
234
|
-
getSuspensionStatus(
|
|
235
|
+
getSuspensionStatus(): Promise<{
|
|
235
236
|
q4h: boolean;
|
|
236
|
-
|
|
237
|
-
blockingSideDialogs: boolean;
|
|
237
|
+
backgroundCalleeDialogs: boolean;
|
|
238
238
|
canDrive: boolean;
|
|
239
239
|
}>;
|
|
240
|
-
get
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
240
|
+
get activeCalleeDialogIds(): ReadonlyArray<DialogID>;
|
|
241
|
+
addActiveCalleeDialogs(ids: DialogID[]): void;
|
|
242
|
+
removeActiveCalleeDispatch(id: DialogID): void;
|
|
243
|
+
clearActiveCalleeDialogs(): void;
|
|
244
244
|
/**
|
|
245
|
-
* Load
|
|
246
|
-
* Used during crash recovery to restore suspension state.
|
|
245
|
+
* Load active callee dispatches from persistence into memory.
|
|
247
246
|
*/
|
|
248
|
-
|
|
247
|
+
loadActiveCalleeDispatchesFromPersistence(): Promise<void>;
|
|
249
248
|
/**
|
|
250
249
|
* Abstract method for creating sideDialogs.
|
|
251
250
|
* Implemented by MainDialog to create SideDialog instances.
|
|
@@ -325,7 +324,7 @@ export declare abstract class Dialog {
|
|
|
325
324
|
get createdAt(): string;
|
|
326
325
|
get updatedAt(): string;
|
|
327
326
|
private replaceQueuedPromptState;
|
|
328
|
-
private
|
|
327
|
+
private setPendingRuntimePrompt;
|
|
329
328
|
private mergePromptQ4HAnswerCallId;
|
|
330
329
|
private enqueueQueuedPromptState;
|
|
331
330
|
private peekLatestUpNext;
|
|
@@ -352,7 +351,7 @@ export declare abstract class Dialog {
|
|
|
352
351
|
userLanguageCode?: LanguageCode;
|
|
353
352
|
tellaskReplyDirective: TellaskReplyDirective;
|
|
354
353
|
skipTaskdoc?: boolean;
|
|
355
|
-
|
|
354
|
+
calleeDialogReplyTarget: DialogCalleeReplyTarget;
|
|
356
355
|
}): DialogQueuedPromptState;
|
|
357
356
|
private persistPendingRuntimePrompt;
|
|
358
357
|
private runtimePromptCommon;
|
|
@@ -371,7 +370,7 @@ export declare abstract class Dialog {
|
|
|
371
370
|
userLanguageCode?: LanguageCode;
|
|
372
371
|
tellaskReplyDirective: TellaskReplyDirective;
|
|
373
372
|
skipTaskdoc?: boolean;
|
|
374
|
-
|
|
373
|
+
calleeDialogReplyTarget: DialogCalleeReplyTarget;
|
|
375
374
|
}): Promise<DialogQueuedPromptState>;
|
|
376
375
|
hasUpNext(): boolean;
|
|
377
376
|
peekUpNext(): DialogQueuedPromptState | undefined;
|
|
@@ -623,9 +622,11 @@ export declare abstract class DialogStore {
|
|
|
623
622
|
* Load Questions for Human state from storage
|
|
624
623
|
*/
|
|
625
624
|
loadQuestions4Human(_dialogId: DialogID, _status: 'running' | 'completed' | 'archived'): Promise<HumanQuestion[]>;
|
|
625
|
+
loadDialogLatest(_dialogId: DialogID, _status: 'running' | 'completed' | 'archived'): Promise<DialogLatestFile | null>;
|
|
626
626
|
loadDialogMetadata(_dialogId: DialogID, _status: 'running' | 'completed' | 'archived'): Promise<DialogMetadataFile | null>;
|
|
627
627
|
loadSideDialogAssignmentFromAsker(_dialogId: DialogID, _status: 'running' | 'completed' | 'archived'): Promise<AssignmentFromAsker | null>;
|
|
628
|
-
|
|
628
|
+
loadActiveCalleeDispatches(_dialogId: DialogID, _status: 'running' | 'completed' | 'archived'): Promise<ActiveCalleeDispatch[]>;
|
|
629
|
+
loadActiveCallees(_dialogId: DialogID, _status: 'running' | 'completed' | 'archived'): Promise<ActiveCalleesFile>;
|
|
629
630
|
saveSideDialogRegistry(_dialog: MainDialog, _mainDialogId: DialogID, _entries: Array<{
|
|
630
631
|
key: string;
|
|
631
632
|
sideDialogId: DialogID;
|
package/dist/dialog.js
CHANGED
|
@@ -1,6 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.DialogStore = exports.MainDialog = exports.SideDialog = exports.Dialog = exports.DialogID = exports.InvalidReminderIndexError = void 0;
|
|
37
|
+
exports.scheduleGlobalDialogMutexCleanupForRoot = scheduleGlobalDialogMutexCleanupForRoot;
|
|
4
38
|
exports.buildSideDialogAskerStack = buildSideDialogAskerStack;
|
|
5
39
|
const id_1 = require("@longrun-ai/kernel/utils/id");
|
|
6
40
|
const time_1 = require("@longrun-ai/kernel/utils/time");
|
|
@@ -14,6 +48,10 @@ const work_language_1 = require("./runtime/work-language");
|
|
|
14
48
|
const shared_reminders_1 = require("./shared-reminders");
|
|
15
49
|
const tool_1 = require("./tool");
|
|
16
50
|
const id_2 = require("./utils/id");
|
|
51
|
+
async function wakeRootDialogDrive(rootId, meta) {
|
|
52
|
+
const { globalDialogRegistry } = await Promise.resolve().then(() => __importStar(require('./dialog-global-registry')));
|
|
53
|
+
globalDialogRegistry.wakeDrive(rootId, meta);
|
|
54
|
+
}
|
|
17
55
|
class InvalidReminderIndexError extends Error {
|
|
18
56
|
constructor(index, total) {
|
|
19
57
|
super(`Reminder target index ${index} is stale; current reminder count is ${total}`);
|
|
@@ -65,6 +103,7 @@ class DialogID {
|
|
|
65
103
|
}
|
|
66
104
|
exports.DialogID = DialogID;
|
|
67
105
|
const globalDialogMutexes = new Map();
|
|
106
|
+
const pendingGlobalDialogMutexCleanupRootIds = new Set();
|
|
68
107
|
function getGlobalDialogMutex(dialogId) {
|
|
69
108
|
const key = dialogId.key();
|
|
70
109
|
const existing = globalDialogMutexes.get(key);
|
|
@@ -74,6 +113,36 @@ function getGlobalDialogMutex(dialogId) {
|
|
|
74
113
|
globalDialogMutexes.set(key, created);
|
|
75
114
|
return created;
|
|
76
115
|
}
|
|
116
|
+
function clearIdleGlobalDialogMutexesForRoot(rootId) {
|
|
117
|
+
const sideDialogPrefix = `${rootId}#`;
|
|
118
|
+
let hasRemainingMutex = false;
|
|
119
|
+
for (const [key, mutex] of globalDialogMutexes.entries()) {
|
|
120
|
+
if (key !== rootId && !key.startsWith(sideDialogPrefix)) {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (!mutex.isLocked()) {
|
|
124
|
+
globalDialogMutexes.delete(key);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
hasRemainingMutex = true;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return hasRemainingMutex;
|
|
131
|
+
}
|
|
132
|
+
function scheduleGlobalDialogMutexCleanupForRoot(rootId) {
|
|
133
|
+
pendingGlobalDialogMutexCleanupRootIds.add(rootId);
|
|
134
|
+
if (!clearIdleGlobalDialogMutexesForRoot(rootId)) {
|
|
135
|
+
pendingGlobalDialogMutexCleanupRootIds.delete(rootId);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function cleanupPendingGlobalDialogMutexesForRoot(rootId) {
|
|
139
|
+
if (!pendingGlobalDialogMutexCleanupRootIds.has(rootId)) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (!clearIdleGlobalDialogMutexesForRoot(rootId)) {
|
|
143
|
+
pendingGlobalDialogMutexCleanupRootIds.delete(rootId);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
77
146
|
function compareVisibleReminderTargetOrder(a, b) {
|
|
78
147
|
return (0, tool_1.compareReminderDisplayOrder)(a.reminder, b.reminder);
|
|
79
148
|
}
|
|
@@ -122,8 +191,8 @@ function buildSideDialogAssignmentPromptMeta(sideDialog) {
|
|
|
122
191
|
targetCallId: assignment.callId,
|
|
123
192
|
tellaskContent: assignment.tellaskContent,
|
|
124
193
|
},
|
|
125
|
-
|
|
126
|
-
|
|
194
|
+
calleeDialogReplyTarget: {
|
|
195
|
+
callerDialogId: assignment.askerDialogId,
|
|
127
196
|
callType: 'B',
|
|
128
197
|
callId: assignment.callId,
|
|
129
198
|
callSiteCourse: assignment.callSiteCourse,
|
|
@@ -139,8 +208,8 @@ function buildSideDialogAssignmentPromptMeta(sideDialog) {
|
|
|
139
208
|
targetCallId: assignment.callId,
|
|
140
209
|
tellaskContent: assignment.tellaskContent,
|
|
141
210
|
},
|
|
142
|
-
|
|
143
|
-
|
|
211
|
+
calleeDialogReplyTarget: {
|
|
212
|
+
callerDialogId: assignment.askerDialogId,
|
|
144
213
|
callType: 'C',
|
|
145
214
|
callId: assignment.callId,
|
|
146
215
|
callSiteCourse: assignment.callSiteCourse,
|
|
@@ -175,7 +244,7 @@ class Dialog {
|
|
|
175
244
|
// Used to ensure proper ordering when multiple generations occur
|
|
176
245
|
this._generationStartedGenseq = 0;
|
|
177
246
|
// Pending sideDialog IDs (for auto-revive tracking)
|
|
178
|
-
this.
|
|
247
|
+
this._activeCalleeDialogIds = [];
|
|
179
248
|
// Phase 11: Suspension state for Type A sideDialog mechanism
|
|
180
249
|
// Tracks whether this dialog is in normal state, suspended, or resuming from suspension
|
|
181
250
|
this._suspensionState = 'active';
|
|
@@ -214,8 +283,8 @@ class Dialog {
|
|
|
214
283
|
this._lastUserLanguageCode = (0, work_language_1.getWorkLanguage)();
|
|
215
284
|
this._lastContextHealth = initialState?.contextHealth;
|
|
216
285
|
this._lastContextHealthGenseq = undefined;
|
|
217
|
-
if (initialState?.
|
|
218
|
-
this.
|
|
286
|
+
if (initialState?.pendingRuntimePrompt) {
|
|
287
|
+
this.setPendingRuntimePrompt(initialState.pendingRuntimePrompt);
|
|
219
288
|
}
|
|
220
289
|
this.resetCourseLanguageNotice();
|
|
221
290
|
}
|
|
@@ -303,7 +372,11 @@ class Dialog {
|
|
|
303
372
|
* FIFO queue ensures fairness when multiple callers wait.
|
|
304
373
|
*/
|
|
305
374
|
async acquire() {
|
|
306
|
-
|
|
375
|
+
const release = await this._mutex.acquire();
|
|
376
|
+
return () => {
|
|
377
|
+
release();
|
|
378
|
+
cleanupPendingGlobalDialogMutexesForRoot(this.id.rootId);
|
|
379
|
+
};
|
|
307
380
|
}
|
|
308
381
|
/**
|
|
309
382
|
* Run an async function while holding the dialog mutex.
|
|
@@ -326,31 +399,30 @@ class Dialog {
|
|
|
326
399
|
}
|
|
327
400
|
/**
|
|
328
401
|
* Check if dialog has pending Q4H questions.
|
|
329
|
-
*
|
|
402
|
+
* Reads the dialog latest user-wait state; q4h.yaml remains the detailed question payload store.
|
|
330
403
|
*/
|
|
331
404
|
async hasPendingQ4H() {
|
|
332
405
|
try {
|
|
333
|
-
const
|
|
334
|
-
return
|
|
406
|
+
const latest = await this.dlgStore.loadDialogLatest(this.id, this.status);
|
|
407
|
+
return latest?.userWait?.kind === 'awaiting_user_answer';
|
|
335
408
|
}
|
|
336
409
|
catch (err) {
|
|
337
|
-
log_1.log.
|
|
410
|
+
log_1.log.error('Failed to load Q4H state for pending check', err, {
|
|
338
411
|
dialogId: this.id.selfId,
|
|
339
|
-
error: err,
|
|
340
412
|
});
|
|
341
|
-
|
|
413
|
+
throw err;
|
|
342
414
|
}
|
|
343
415
|
}
|
|
344
416
|
/**
|
|
345
|
-
* Check if dialog has
|
|
417
|
+
* Check if dialog has active callee dispatches.
|
|
346
418
|
*/
|
|
347
|
-
async
|
|
419
|
+
async hasActiveCalleeDispatches() {
|
|
348
420
|
try {
|
|
349
|
-
const
|
|
350
|
-
return
|
|
421
|
+
const activeCallees = await this.dlgStore.loadActiveCallees(this.id, this.status);
|
|
422
|
+
return activeCallees.batches.some((batch) => batch.callees.some((callee) => callee.status === 'pending'));
|
|
351
423
|
}
|
|
352
424
|
catch (err) {
|
|
353
|
-
log_1.log.warn('Failed to load
|
|
425
|
+
log_1.log.warn('Failed to load active callees for dispatch check', undefined, {
|
|
354
426
|
dialogId: this.id.selfId,
|
|
355
427
|
error: err,
|
|
356
428
|
});
|
|
@@ -358,50 +430,50 @@ class Dialog {
|
|
|
358
430
|
}
|
|
359
431
|
}
|
|
360
432
|
/**
|
|
361
|
-
* Check if dialog can be driven
|
|
433
|
+
* Check if dialog can be driven.
|
|
434
|
+
*
|
|
435
|
+
* Active callee dispatches are background callee work: they are observable, but they must not
|
|
436
|
+
* block the caller dialog from continuing when some other concrete drive source exists.
|
|
362
437
|
*/
|
|
363
|
-
async canDrive(
|
|
364
|
-
const suspension = await this.getSuspensionStatus(
|
|
438
|
+
async canDrive() {
|
|
439
|
+
const suspension = await this.getSuspensionStatus();
|
|
365
440
|
return suspension.canDrive;
|
|
366
441
|
}
|
|
367
442
|
/**
|
|
368
443
|
* Get suspension status for logging/debugging.
|
|
369
444
|
*/
|
|
370
|
-
async getSuspensionStatus(
|
|
445
|
+
async getSuspensionStatus() {
|
|
371
446
|
const hasQ4H = await this.hasPendingQ4H();
|
|
372
|
-
const
|
|
373
|
-
const blockingSideDialogs = hasSideDialogs && options?.allowPendingSideDialogs !== true;
|
|
447
|
+
const hasBackgroundCalleeDialogs = await this.hasActiveCalleeDispatches();
|
|
374
448
|
return {
|
|
375
449
|
q4h: hasQ4H,
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
canDrive: !hasQ4H && !blockingSideDialogs,
|
|
450
|
+
backgroundCalleeDialogs: hasBackgroundCalleeDialogs,
|
|
451
|
+
canDrive: !hasQ4H,
|
|
379
452
|
};
|
|
380
453
|
}
|
|
381
|
-
get
|
|
382
|
-
return this.
|
|
454
|
+
get activeCalleeDialogIds() {
|
|
455
|
+
return this._activeCalleeDialogIds;
|
|
383
456
|
}
|
|
384
|
-
|
|
385
|
-
this.
|
|
457
|
+
addActiveCalleeDialogs(ids) {
|
|
458
|
+
this._activeCalleeDialogIds.push(...ids);
|
|
386
459
|
}
|
|
387
|
-
|
|
388
|
-
this.
|
|
460
|
+
removeActiveCalleeDispatch(id) {
|
|
461
|
+
this._activeCalleeDialogIds = this._activeCalleeDialogIds.filter((activeCallee) => activeCallee.selfId !== id.selfId);
|
|
389
462
|
}
|
|
390
|
-
|
|
391
|
-
this.
|
|
463
|
+
clearActiveCalleeDialogs() {
|
|
464
|
+
this._activeCalleeDialogIds = [];
|
|
392
465
|
}
|
|
393
466
|
/**
|
|
394
|
-
* Load
|
|
395
|
-
* Used during crash recovery to restore suspension state.
|
|
467
|
+
* Load active callee dispatches from persistence into memory.
|
|
396
468
|
*/
|
|
397
|
-
async
|
|
469
|
+
async loadActiveCalleeDispatchesFromPersistence() {
|
|
398
470
|
try {
|
|
399
|
-
const
|
|
400
|
-
this.
|
|
401
|
-
this.
|
|
471
|
+
const activeCalleeDispatches = await this.dlgStore.loadActiveCalleeDispatches(this.id, this.status);
|
|
472
|
+
this.clearActiveCalleeDialogs();
|
|
473
|
+
this.addActiveCalleeDialogs(activeCalleeDispatches.map((record) => record.calleeDialogId));
|
|
402
474
|
}
|
|
403
475
|
catch (err) {
|
|
404
|
-
log_1.log.warn('Failed to load
|
|
476
|
+
log_1.log.warn('Failed to load active callee dispatches from persistence', undefined, {
|
|
405
477
|
dialogId: this.id.selfId,
|
|
406
478
|
error: err,
|
|
407
479
|
});
|
|
@@ -723,7 +795,7 @@ class Dialog {
|
|
|
723
795
|
? {}
|
|
724
796
|
: { skipTaskdoc: nextPrompt.skipTaskdoc }),
|
|
725
797
|
tellaskReplyDirective: nextPrompt.tellaskReplyDirective,
|
|
726
|
-
|
|
798
|
+
calleeDialogReplyTarget: nextPrompt.calleeDialogReplyTarget,
|
|
727
799
|
};
|
|
728
800
|
return prompt;
|
|
729
801
|
}
|
|
@@ -760,7 +832,7 @@ class Dialog {
|
|
|
760
832
|
}
|
|
761
833
|
throw new Error(`UpNext prompt replacement invariant violation: missing drive intent dialog=${this.id.valueOf()} existingMsgId=${existingMsgId}`);
|
|
762
834
|
}
|
|
763
|
-
|
|
835
|
+
setPendingRuntimePrompt(prompt) {
|
|
764
836
|
const prepared = typeof prompt === 'string'
|
|
765
837
|
? {
|
|
766
838
|
content: prompt,
|
|
@@ -782,12 +854,12 @@ class Dialog {
|
|
|
782
854
|
origin: 'runtime',
|
|
783
855
|
...(prepared.skipTaskdoc === undefined ? {} : { skipTaskdoc: prepared.skipTaskdoc }),
|
|
784
856
|
};
|
|
785
|
-
const normalized = prepared.
|
|
857
|
+
const normalized = prepared.calleeDialogReplyTarget !== undefined
|
|
786
858
|
? (() => {
|
|
787
859
|
const prompt = {
|
|
788
860
|
...runtimeCommon,
|
|
789
861
|
tellaskReplyDirective: prepared.tellaskReplyDirective,
|
|
790
|
-
|
|
862
|
+
calleeDialogReplyTarget: prepared.calleeDialogReplyTarget,
|
|
791
863
|
};
|
|
792
864
|
return prompt;
|
|
793
865
|
})()
|
|
@@ -804,7 +876,7 @@ class Dialog {
|
|
|
804
876
|
return prompt;
|
|
805
877
|
})();
|
|
806
878
|
this._upNextQueue = [
|
|
807
|
-
normalized.
|
|
879
|
+
normalized.calleeDialogReplyTarget !== undefined
|
|
808
880
|
? {
|
|
809
881
|
kind: 'new_course_runtime_sideDialog',
|
|
810
882
|
prompt: normalized.content,
|
|
@@ -814,7 +886,7 @@ class Dialog {
|
|
|
814
886
|
origin: 'runtime',
|
|
815
887
|
tellaskReplyDirective: normalized.tellaskReplyDirective,
|
|
816
888
|
skipTaskdoc: normalized.skipTaskdoc,
|
|
817
|
-
|
|
889
|
+
calleeDialogReplyTarget: normalized.calleeDialogReplyTarget,
|
|
818
890
|
}
|
|
819
891
|
: normalized.tellaskReplyDirective !== undefined
|
|
820
892
|
? {
|
|
@@ -885,7 +957,7 @@ class Dialog {
|
|
|
885
957
|
origin: 'runtime',
|
|
886
958
|
...(state.skipTaskdoc === undefined ? {} : { skipTaskdoc: state.skipTaskdoc }),
|
|
887
959
|
tellaskReplyDirective: state.tellaskReplyDirective,
|
|
888
|
-
|
|
960
|
+
calleeDialogReplyTarget: state.calleeDialogReplyTarget,
|
|
889
961
|
};
|
|
890
962
|
return prompt;
|
|
891
963
|
}
|
|
@@ -997,7 +1069,7 @@ class Dialog {
|
|
|
997
1069
|
origin: 'runtime',
|
|
998
1070
|
tellaskReplyDirective: options.tellaskReplyDirective,
|
|
999
1071
|
skipTaskdoc: options.skipTaskdoc,
|
|
1000
|
-
|
|
1072
|
+
calleeDialogReplyTarget: options.calleeDialogReplyTarget,
|
|
1001
1073
|
runControl: undefined,
|
|
1002
1074
|
};
|
|
1003
1075
|
this.enqueueQueuedPromptState(created);
|
|
@@ -1011,7 +1083,7 @@ class Dialog {
|
|
|
1011
1083
|
userLanguageCode: options.userLanguageCode ?? existing.userLanguageCode ?? this._lastUserLanguageCode,
|
|
1012
1084
|
tellaskReplyDirective: options.tellaskReplyDirective,
|
|
1013
1085
|
skipTaskdoc: options.skipTaskdoc ?? existing.skipTaskdoc,
|
|
1014
|
-
|
|
1086
|
+
calleeDialogReplyTarget: options.calleeDialogReplyTarget,
|
|
1015
1087
|
runControl: undefined,
|
|
1016
1088
|
};
|
|
1017
1089
|
this.replaceQueuedPromptState(existing.msgId, merged);
|
|
@@ -1020,6 +1092,12 @@ class Dialog {
|
|
|
1020
1092
|
}
|
|
1021
1093
|
async persistPendingRuntimePrompt(prompt) {
|
|
1022
1094
|
await this.dlgStore.persistPendingRuntimePrompt(this, prompt);
|
|
1095
|
+
if (this.id.selfId === this.id.rootId) {
|
|
1096
|
+
await wakeRootDialogDrive(this.id.rootId, {
|
|
1097
|
+
source: 'dialog_runtime_prompt',
|
|
1098
|
+
reason: `queued_runtime_prompt:${prompt.msgId}`,
|
|
1099
|
+
});
|
|
1100
|
+
}
|
|
1023
1101
|
}
|
|
1024
1102
|
runtimePromptCommon(options) {
|
|
1025
1103
|
const trimmed = options.prompt.trim();
|
|
@@ -1062,7 +1140,7 @@ class Dialog {
|
|
|
1062
1140
|
kind: 'new_course_runtime_sideDialog',
|
|
1063
1141
|
tellaskReplyDirective: options.tellaskReplyDirective,
|
|
1064
1142
|
skipTaskdoc: options.skipTaskdoc,
|
|
1065
|
-
|
|
1143
|
+
calleeDialogReplyTarget: options.calleeDialogReplyTarget,
|
|
1066
1144
|
};
|
|
1067
1145
|
this.enqueueQueuedPromptState(created);
|
|
1068
1146
|
await this.persistPendingRuntimePrompt({
|
|
@@ -1073,7 +1151,7 @@ class Dialog {
|
|
|
1073
1151
|
origin: 'runtime',
|
|
1074
1152
|
tellaskReplyDirective: created.tellaskReplyDirective,
|
|
1075
1153
|
skipTaskdoc: created.skipTaskdoc,
|
|
1076
|
-
|
|
1154
|
+
calleeDialogReplyTarget: created.calleeDialogReplyTarget,
|
|
1077
1155
|
});
|
|
1078
1156
|
return created;
|
|
1079
1157
|
}
|
|
@@ -1165,13 +1243,19 @@ class Dialog {
|
|
|
1165
1243
|
if (this.dlgStore) {
|
|
1166
1244
|
await this.dlgStore.startNewCourse(this, nextPrompt);
|
|
1167
1245
|
}
|
|
1246
|
+
if (this.id.selfId === this.id.rootId) {
|
|
1247
|
+
await wakeRootDialogDrive(this.id.rootId, {
|
|
1248
|
+
source: 'dialog_start_new_course',
|
|
1249
|
+
reason: `queued_runtime_prompt:${nextPrompt.msgId}`,
|
|
1250
|
+
});
|
|
1251
|
+
}
|
|
1168
1252
|
const storeCourse = this.dlgStore
|
|
1169
1253
|
? await this.dlgStore.loadCurrentCourse(this.id)
|
|
1170
1254
|
: this._currentCourse + 1;
|
|
1171
1255
|
this._currentCourse = storeCourse;
|
|
1172
1256
|
this._updatedAt = (0, time_1.formatUnifiedTimestamp)(new Date());
|
|
1173
1257
|
this.resetCourseLanguageNotice();
|
|
1174
|
-
const normalized = this.
|
|
1258
|
+
const normalized = this.setPendingRuntimePrompt(nextPrompt);
|
|
1175
1259
|
if (options?.skipEnqueueIntent !== true) {
|
|
1176
1260
|
this._driveIntents.length = 0;
|
|
1177
1261
|
this._driveIntents.push({
|
|
@@ -1900,15 +1984,21 @@ class DialogStore {
|
|
|
1900
1984
|
async loadQuestions4Human(_dialogId, _status) {
|
|
1901
1985
|
return [];
|
|
1902
1986
|
}
|
|
1987
|
+
async loadDialogLatest(_dialogId, _status) {
|
|
1988
|
+
return null;
|
|
1989
|
+
}
|
|
1903
1990
|
async loadDialogMetadata(_dialogId, _status) {
|
|
1904
1991
|
return null;
|
|
1905
1992
|
}
|
|
1906
1993
|
async loadSideDialogAssignmentFromAsker(_dialogId, _status) {
|
|
1907
1994
|
return null;
|
|
1908
1995
|
}
|
|
1909
|
-
async
|
|
1996
|
+
async loadActiveCalleeDispatches(_dialogId, _status) {
|
|
1910
1997
|
return [];
|
|
1911
1998
|
}
|
|
1999
|
+
async loadActiveCallees(_dialogId, _status) {
|
|
2000
|
+
return { batches: [] };
|
|
2001
|
+
}
|
|
1912
2002
|
async saveSideDialogRegistry(_dialog, _mainDialogId, _entries, _status) { }
|
|
1913
2003
|
async loadSideDialogRegistry(_mainDialog, _status) { }
|
|
1914
2004
|
/**
|
|
@@ -20,7 +20,7 @@ reminder snapshot.
|
|
|
20
20
|
- transcript / tool / tellask history records
|
|
21
21
|
- current reminder snapshot
|
|
22
22
|
- Explicitly dropped:
|
|
23
|
-
-
|
|
23
|
+
- active callee dispatches
|
|
24
24
|
- questions4human
|
|
25
25
|
- sideDialog registry / sideDialog responses
|
|
26
26
|
- other runtime-only waiting / blocking / orchestration state
|
|
@@ -380,7 +380,7 @@ So `Web Dev App` should make the `playwright-interactive` relationship explicit
|
|
|
380
380
|
It must be explicit that **an app is not the same thing as a skill**, and that both are now first-class mechanisms in the current implementation:
|
|
381
381
|
|
|
382
382
|
- An **app** is a Dominds install/resolve/composition unit. It has an `id`, a manifest (`.minds/app.yaml`), team-facing assets (`.minds/team.yaml`, persona/knowhow/pitfalls), env docs (`.minds/env.md`), and participates in rtws-level lock/configuration/resolution.
|
|
383
|
-
- A **skill** is a pure-Markdown capability asset inside the rtws. It is currently loaded from `.minds/skills/team_shared/**` and `.minds/skills/individual/**`, selects `SKILL.cn.md` / `SKILL.en.md` / `SKILL.md` by work language preference,
|
|
383
|
+
- A **skill** is a pure-Markdown capability asset inside the rtws. It is currently loaded from `.minds/skills/team_shared/**` and `.minds/skills/individual/**`, selects `SKILL.cn.md` / `SKILL.en.md` / `SKILL.md` by work language preference, injects a skill index into the agent system prompt, and exposes the body on demand through `read_skill`. It is best suited for soft guidance, checklists, decision heuristics, and team-specific methods, not for distributable product capability that depends on a stable tool contract.
|
|
384
384
|
- Skill frontmatter currently supports `name`, `description`, `allowed-tools`, `user-invocable`, and `disable-model-invocation`; the last three are currently compatibility/migration metadata only. They do not automatically grant tool permissions and do not replace team/toolset runtime policy.
|
|
385
385
|
- A **toolset manual / app-bundled manual** is a better place for guidance that is shipped together with tools: it is skill-like in tone, but distributed together with dedicated tools, toolsets, and app identity. That is a better fit for something like `web-dev`.
|
|
386
386
|
- `playwright-interactive/` should not be classified as that pure-Markdown rtws skill category. More precisely, it represents a guidance layer on top of built-in browser execution capability. In Dominds, the cleaner move is to package dedicated tools, toolset manual, recommended teammate definitions, and runtime state together as an app such as `@longrun-ai/web-dev`.
|
|
@@ -374,7 +374,7 @@ Install JSON 是 app 与 Kernel/CLI 之间的**安装/运行握手载荷**。它
|
|
|
374
374
|
这里必须明确 **app 与 skill 不是同一层概念**,而且两者在现有实现中都已经是正式机制:
|
|
375
375
|
|
|
376
376
|
- **App** 是 Dominds 的安装/解析/组合单元:它有自己的 `id`、manifest(`.minds/app.yaml`)、团队资产(`.minds/team.yaml`、persona/knowhow/pitfalls)、环境说明(`.minds/env.md`),并可被 `dominds install` 纳入某个 rtws。
|
|
377
|
-
- **Skill** 是 rtws 内的纯 Markdown 技能资产:当前从 `.minds/skills/team_shared/**` 与 `.minds/skills/individual/**` 读取,按工作语言优先选择 `SKILL.cn.md` / `SKILL.en.md` / `SKILL.md
|
|
377
|
+
- **Skill** 是 rtws 内的纯 Markdown 技能资产:当前从 `.minds/skills/team_shared/**` 与 `.minds/skills/individual/**` 读取,按工作语言优先选择 `SKILL.cn.md` / `SKILL.en.md` / `SKILL.md`,并把 skill 索引注入智能体系统提示词,正文按需通过 `read_skill` 读取。它更适合承载软性的操作指导、检查清单、判断口诀与团队特定方法学,而不是承载需要稳定工具契约的可分发产品能力。
|
|
378
378
|
- Skill frontmatter 当前支持 `name`、`description`、`allowed-tools`、`user-invocable`、`disable-model-invocation`;其中后 3 项目前主要用于兼容/迁移语义,不会自动授予工具权限,也不会替代团队 / 工具集调度规则。
|
|
379
379
|
- **工具集操作手册 / 随 App 附带的操作手册** 更适合表达“和工具一起分发的操作指导”:它的性质接近 skill,但会与专属工具、工具集和 App 身份一起打包,更适合像 `web-dev` 这种需要整体分发与安装解析的能力。
|
|
380
380
|
- `playwright-interactive/` 不应被归类为上述“纯 Markdown rtws skill”;更准确地说,它体现的是“内置浏览器能力之上的指导层”。在 Dominds 中,更正交的做法是像 `@longrun-ai/web-dev` 这样,把专属工具、工具集操作手册、推荐智能体队友定义与运行态缓存一起封装成 app。
|
|
@@ -321,7 +321,7 @@ To support main dialog fork, persistence now records which root-generation viewp
|
|
|
321
321
|
- marks when a sideDialog already exists on the root timeline, so fork can decide whether to include it
|
|
322
322
|
- `reminders_reconciled_record`
|
|
323
323
|
- `questions4human_reconciled_record`
|
|
324
|
-
- `
|
|
324
|
+
- `active_callees_reconciled_record`
|
|
325
325
|
- `sideDialog_registry_reconciled_record`
|
|
326
326
|
- `sideDialog_responses_reconciled_record`
|
|
327
327
|
|
|
@@ -329,7 +329,7 @@ To support main dialog fork, persistence now records which root-generation viewp
|
|
|
329
329
|
|
|
330
330
|
- These reconciliation records are state snapshots, not LLM transcript content; message reconstruction must skip them
|
|
331
331
|
- Any sideDialog transcript record that participates in root-fork cutoff trimming must carry `rootCourse/rootGenseq`
|
|
332
|
-
- When writing a forked main dialog, persistence appends a baseline reconciliation set into `course-1` so reminders / Q4H /
|
|
332
|
+
- When writing a forked main dialog, persistence appends a baseline reconciliation set into `course-1` so reminders / Q4H / active callee dispatches / registry / responses are restored to the pre-cutoff state
|
|
333
333
|
|
|
334
334
|
---
|
|
335
335
|
|
|
@@ -318,7 +318,7 @@ status: 'active' # 当前对话状态
|
|
|
318
318
|
- 记录某个支线对话何时在 root 时间线上已“存在”,供 fork 时判断是否应纳入新树
|
|
319
319
|
- `reminders_reconciled_record`
|
|
320
320
|
- `questions4human_reconciled_record`
|
|
321
|
-
- `
|
|
321
|
+
- `active_callees_reconciled_record`
|
|
322
322
|
- `sideDialog_registry_reconciled_record`
|
|
323
323
|
- `sideDialog_responses_reconciled_record`
|
|
324
324
|
|
|
@@ -326,7 +326,7 @@ status: 'active' # 当前对话状态
|
|
|
326
326
|
|
|
327
327
|
- 这些对账记录是状态快照,不属于 LLM transcript 内容;重建消息上下文时应跳过
|
|
328
328
|
- 支线对话 transcript 中凡是需要参与 root fork 边界裁剪的记录,都必须带 `rootCourse/rootGenseq`
|
|
329
|
-
- fork 写入新主线对话时,会在 `course-1` 追加一组 baseline 对账记录,用来把 reminders / Q4H /
|
|
329
|
+
- fork 写入新主线对话时,会在 `course-1` 追加一组 baseline 对账记录,用来把 reminders / Q4H / active callee dispatch / registry / responses 恢复到切点前状态
|
|
330
330
|
|
|
331
331
|
---
|
|
332
332
|
|