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
|
@@ -62,11 +62,11 @@ askerDialog 可以在执行期间接收来自当前需向它回复的支线对
|
|
|
62
62
|
|
|
63
63
|
### 支线对话索引 (subdlg.yaml)
|
|
64
64
|
|
|
65
|
-
**subdlg.yaml**
|
|
65
|
+
**subdlg.yaml** 文件索引诉请者名下仍未回贴的后台被诉请者对话。与 `q4h.yaml` 类似,它是一个索引文件,不是真理之源:
|
|
66
66
|
|
|
67
|
-
-
|
|
67
|
+
- 索引跟踪哪些支线对话 ID 仍欠 caller 回贴
|
|
68
68
|
- 实际的支线对话状态从磁盘 (done/ 目录) 验证
|
|
69
|
-
-
|
|
69
|
+
- 用于后端协程的崩溃恢复、可观测状态和结果到达处理
|
|
70
70
|
|
|
71
71
|
### 支线对话注册表
|
|
72
72
|
|
|
@@ -112,13 +112,13 @@ askerDialog 可以在执行期间接收来自当前需向它回复的支线对
|
|
|
112
112
|
后端协程使用以下模式驱动对话:
|
|
113
113
|
|
|
114
114
|
1. 扫描全局注册表以识别需要驱动的主线对话
|
|
115
|
-
2.
|
|
115
|
+
2. 对于每个候选者,检查具体驱动来源(Q4H 已回答、queued prompt、结果到达、open generation 恢复等)
|
|
116
116
|
3. 在驱动之前获取对话的互斥锁
|
|
117
|
-
4.
|
|
117
|
+
4. 执行生成循环直到自然 idle、进入 Q4H 或完成
|
|
118
118
|
5. 释放互斥锁
|
|
119
119
|
6. 将所有状态变更持久化到存储
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
驱动循环持续进行,直到对话自然 idle、进入 Q4H 或完成。active callee dispatch 是后台被诉请者事实,不会单独挂起 caller;但只有 pending active callee dispatch、没有其它具体驱动来源时,caller 应自然 idle,不靠鞭策语维持主线空转。当用户回答 Q4H 或 callee 结果到达时,后端记录该具体事实,并仅从该事实驱动受影响对话。
|
|
122
122
|
|
|
123
123
|
### 前端集成
|
|
124
124
|
|
|
@@ -149,7 +149,7 @@ askerDialog 可以在执行期间接收来自当前需向它回复的支线对
|
|
|
149
149
|
|
|
150
150
|
- 每次消息生成后
|
|
151
151
|
- 挂起时(Q4H 提出,支线对话创建)
|
|
152
|
-
- 恢复时(Q4H
|
|
152
|
+
- 恢复时(Q4H 已回答,callee 结果到达)
|
|
153
153
|
- 完成时
|
|
154
154
|
|
|
155
155
|
这确保了崩溃恢复,并使后端能够从任何持久化状态恢复,而不依赖于前端状态。
|
|
@@ -174,23 +174,23 @@ askerDialog 可以在执行期间接收来自当前需向它回复的支线对
|
|
|
174
174
|
点击 `Continue` 后,后端必须重新从 persistence 真源判定当前对话属于哪一种情况,而不能只根据表面的 `displayState` 做静态推断:
|
|
175
175
|
|
|
176
176
|
- **情况 1:当前对话没有回复义务**
|
|
177
|
-
|
|
178
|
-
- **情况 2
|
|
179
|
-
|
|
177
|
+
这时若也没有 Q4H 等用户等待事实,就应直接继续 drive;若已回到普通待用户输入态,则 `resume_dialog` 不应再被视为可继续。
|
|
178
|
+
- **情况 2:当前对话仍有回复义务,但正在等待用户输入**
|
|
179
|
+
典型例子是 pending Q4H。此时 `Continue` 应退出插话 paused projection,并恢复成真实的 `blocked`。
|
|
180
180
|
- **情况 3:当前对话仍有回复义务,但已不再 suspend,具备继续推进条件**
|
|
181
|
-
例如
|
|
181
|
+
例如 Q4H/用户等待事实已消失,或存在允许继续的 queued prompt。此时 `Continue` 不应先落一个中间 `blocked/idle` 占位态,而应直接继续 drive。
|
|
182
182
|
|
|
183
183
|
**因此有两个实现约束**:
|
|
184
184
|
|
|
185
185
|
- `refreshRunControlProjectionFromPersistenceFacts()` 在用户尚未点击 `Continue` 前,必须保留这层“插话已处理;原任务已暂停”的 `stopped` 投影;否则 UI 会过早塌回普通 `blocked`,破坏多轮插话体验。反过来,如果当前其实没有待恢复原任务,则根本不应建立这层 paused projection。
|
|
186
186
|
- 真正决定 `Continue` 结果的逻辑,必须在恢复驱动路径中重新读取 fresh persistence facts;不能把“可点 Continue”误解为“必然立即 proceeding”。
|
|
187
187
|
- 若 `Continue` 后真源仍是 `blocked`,回复责任重申文案应当立即作为 runtime guide 同时进入 `dlg.msgs` 与持久化课程历史,并同步发前端气泡;这样后面真正恢复 drive 时只需正常读取上下文,不应再额外补发一条重复的 runtime prompt。
|
|
188
|
-
- run-control 工具栏中的 `resumable` 计数,应与“是否允许手动 Continue 尝试”保持一致。因此,处于 interjection-paused `stopped`
|
|
188
|
+
- run-control 工具栏中的 `resumable` 计数,应与“是否允许手动 Continue 尝试”保持一致。因此,处于 interjection-paused `stopped` 的对话即便底层仍有用户等待事实,也应计入 `resumable`;因为 `Continue` 的业务语义正是“退出这层临时 paused projection,并从真源重判下一步”。
|
|
189
189
|
|
|
190
190
|
**心智模型提醒**:
|
|
191
191
|
|
|
192
192
|
- 不能只看 `displayState.kind === 'stopped'` 就理解这条链路。
|
|
193
|
-
-
|
|
193
|
+
- 不能只看用户等待事实就理解为什么 UI 仍显示 `stopped`。
|
|
194
194
|
- 也不能只看 `resume_dialog` eligibility 就推断恢复后一定马上运行。
|
|
195
195
|
- 更不能把所有 `origin === 'user'` 的输入都笼统视作“用户插话”;`q4hAnswerCallId` 非空的 prompt 是 askHuman answer continuation,必须按另一条语义链处理。
|
|
196
196
|
|
|
@@ -224,7 +224,7 @@ flowchart TD
|
|
|
224
224
|
|
|
225
225
|
**行为**:
|
|
226
226
|
|
|
227
|
-
1.
|
|
227
|
+
1. 当前 callee 记录回问诉请并等待诉请者答复
|
|
228
228
|
2. 驱动程序切换到驱动**诉请者**(TYPE A 中为直接 askerDialog;使用 `sideDialog.askerDialog` 引用)
|
|
229
229
|
3. 诉请者的响应流回支线对话
|
|
230
230
|
4. 支线对话**恢复**,诉请者的响应在上下文中
|
|
@@ -239,9 +239,9 @@ flowchart TD
|
|
|
239
239
|
**支线交付规则(规范)**:
|
|
240
240
|
|
|
241
241
|
- 只有当所有目标完成时,支线对话才可直接正常回复诉请者。
|
|
242
|
-
- 支线对话没有独立的活性维持状态。支线继续推进,是因为正常业务状态仍未完成:工具结果需要处理、Q4H
|
|
242
|
+
- 支线对话没有独立的活性维持状态。支线继续推进,是因为正常业务状态仍未完成:工具结果需要处理、Q4H 待答、下游 callee 待回贴,或已有显式 runtime/user prompt 排队。不要新增只为维持活跃而存在的旁路。
|
|
243
243
|
- 回复义务的尾部处理是一条很小的状态机:运行时到达未挂起的尾部后,只检查本次 drive 产出的最新非空 assistant generation 候选;同一 generation 同时存在 saying/thinking 时优先取公开 saying。若支线仍欠 `replyTellask*`,并且已经产出候选内容但没有调用精确 reply 工具,运行时只排队一次 reply-tool reminder;如果模型在 reminder 后仍只产出 thinking/saying,运行时会有意通过 direct-reply fallback 投递该内容,并显式标注 fallback。
|
|
244
|
-
- 运行时不得通过回扫历史消息文本来推断这个尾部状态。历史上下文属于模型和 UI;调度状态必须由当前 drive result、active reply obligation、pending
|
|
244
|
+
- 运行时不得通过回扫历史消息文本来推断这个尾部状态。历史上下文属于模型和 UI;调度状态必须由当前 drive result、active reply obligation、pending Q4H 索引或 queued prompt 等显式状态携带。
|
|
245
245
|
- 若目标尚未完成,不要默认直接 `tellaskBack`;应先按团队规程 / SOP / 职责卡判断能否明确负责人,若能明确且属于执行性处理,直接 `tellask` / `tellaskSessionless` 对应负责人。
|
|
246
246
|
- 只有当必须由诉请者补充需求、澄清目标、做业务裁决、确认验收口径、提供缺失输入,或现有规程无法明确判责时,才使用 `tellaskBack({ tellaskContent: "..." })` 回问诉请者再继续。
|
|
247
247
|
- **FBR 例外**:FBR 支线对话禁止一切 tellask(包括 `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`),只能列出缺口与阻塞原因并直接回复。
|
|
@@ -275,10 +275,10 @@ flowchart TD
|
|
|
275
275
|
LLM 发出:tellaskSessionless({ targetAgentId: "orchestrator", tellaskContent: "..." }) 我应该如何处理数据库迁移?
|
|
276
276
|
|
|
277
277
|
结果:
|
|
278
|
-
- sub-001
|
|
278
|
+
- sub-001 记录回问诉请并等待诉请者答复
|
|
279
279
|
- 驱动程序使用问题驱动 orchestrator
|
|
280
280
|
- orchestrator 用指导响应
|
|
281
|
-
- sub-001
|
|
281
|
+
- sub-001 带着 orchestrator 的响应继续
|
|
282
282
|
```
|
|
283
283
|
|
|
284
284
|
### TYPE B:已注册支线对话诉请(长线诉请)
|
|
@@ -300,9 +300,9 @@ LLM 发出:tellaskSessionless({ targetAgentId: "orchestrator", tellaskContent:
|
|
|
300
300
|
1. 检查注册表中是否存在键为 `agentId!sessionSlug` 的现有支线对话
|
|
301
301
|
2. **如果存在**:恢复已注册的支线对话
|
|
302
302
|
3. **如果不存在**:创建新的支线对话并使用键 `agentId!sessionSlug` 注册它
|
|
303
|
-
4.
|
|
304
|
-
5.
|
|
305
|
-
6.
|
|
303
|
+
4. 诉请者记录后台被诉请者事实;不会仅因 active callee dispatch 被阻塞
|
|
304
|
+
5. 支线对话的响应流回诉请者,形成结果到达事实
|
|
305
|
+
6. 诉请者可因结果到达、queued prompt、用户输入、无 pending active callee 时的 Diligence Push 或其它显式驱动源继续
|
|
306
306
|
|
|
307
307
|
**当前诉请者跟踪(对复用很重要):**
|
|
308
308
|
|
|
@@ -339,20 +339,18 @@ LLM 发出:tellask({ targetAgentId: "researcher", sessionSlug: "market-analysi
|
|
|
339
339
|
- 注册表查找:不存在 "researcher!market-analysis"
|
|
340
340
|
- 创建新的支线对话 "researcher!market-analysis"
|
|
341
341
|
- 在主线的注册表中注册它
|
|
342
|
-
- orchestrator
|
|
342
|
+
- orchestrator 记录后台被诉请者事实
|
|
343
343
|
- 驱动 researcher 支线对话
|
|
344
|
-
-
|
|
345
|
-
- orchestrator 恢复
|
|
344
|
+
- 响应作为结果到达事实流回 orchestrator
|
|
346
345
|
|
|
347
346
|
LLM 再次发出:tellask({ targetAgentId: "researcher", sessionSlug: "market-analysis", tellaskContent: "..." })
|
|
348
347
|
|
|
349
348
|
结果(第二次调用):
|
|
350
349
|
- 注册表查找:"researcher!market-analysis" 存在
|
|
351
350
|
- 恢复现有的支线对话
|
|
352
|
-
- orchestrator
|
|
351
|
+
- orchestrator 记录后台被诉请者事实
|
|
353
352
|
- 从离开的地方继续驱动现有的 researcher 支线对话
|
|
354
|
-
-
|
|
355
|
-
- orchestrator 恢复
|
|
353
|
+
- 响应作为结果到达事实流回 orchestrator
|
|
356
354
|
```
|
|
357
355
|
|
|
358
356
|
### TYPE C:瞬态支线对话诉请(一次性诉请)
|
|
@@ -367,13 +365,13 @@ LLM 再次发出:tellask({ targetAgentId: "researcher", sessionSlug: "market-a
|
|
|
367
365
|
|
|
368
366
|
**行为**:
|
|
369
367
|
|
|
370
|
-
1.
|
|
368
|
+
1. 当前对话记录后台被诉请者事实;不会仅因 active callee dispatch 被阻塞
|
|
371
369
|
2. 使用指定的 agentId 创建**新的支线对话**
|
|
372
370
|
3. 驱动新的支线对话:
|
|
373
371
|
- 一般 TYPE C 支线对话是“完整能力”的(可回问诉请者、队友诉请、按配置使用工具)。
|
|
374
372
|
- `freshBootsReasoning({ tellaskContent: "..." })` 属于 FBR 特例:无工具、禁止任何诉请(见 `fbr.zh.md`)。
|
|
375
|
-
4.
|
|
376
|
-
5.
|
|
373
|
+
4. 支线对话的响应作为结果到达事实流回诉请者
|
|
374
|
+
5. 诉请者可因结果到达、queued prompt、用户输入、无 pending active callee 时的 Diligence Push 或其它显式驱动源继续
|
|
377
375
|
|
|
378
376
|
**关键特征**:
|
|
379
377
|
|
|
@@ -394,19 +392,18 @@ LLM 再次发出:tellask({ targetAgentId: "researcher", sessionSlug: "market-a
|
|
|
394
392
|
LLM 发出:@code-reviewer 请审查这个 PR
|
|
395
393
|
|
|
396
394
|
结果:
|
|
397
|
-
- orchestrator
|
|
395
|
+
- orchestrator 记录后台被诉请者事实
|
|
398
396
|
- 使用 agentId "code-reviewer" 创建新的支线对话
|
|
399
397
|
- 驱动 code-reviewer 支线对话(它可以进行自己的诉请、工具等)
|
|
400
|
-
- code-reviewer
|
|
401
|
-
- orchestrator 恢复,审查结果在上下文中
|
|
398
|
+
- code-reviewer 完成,审查结果作为结果到达事实流回 orchestrator
|
|
402
399
|
|
|
403
400
|
LLM 再次发出:@code-reviewer 审查这个其他 PR
|
|
404
401
|
|
|
405
402
|
结果:
|
|
406
|
-
- orchestrator
|
|
403
|
+
- orchestrator 记录后台被诉请者事实
|
|
407
404
|
- 创建另一个新的支线对话(与之前的不同!)
|
|
408
405
|
- 驱动新的 code-reviewer 支线对话
|
|
409
|
-
- orchestrator
|
|
406
|
+
- 新的审查结果作为结果到达事实流回 orchestrator
|
|
410
407
|
```
|
|
411
408
|
|
|
412
409
|
### 对比总结
|
|
@@ -418,7 +415,7 @@ LLM 再次发出:@code-reviewer 审查这个其他 PR
|
|
|
418
415
|
| **注册表查找** | 否(使用 `sideDialog.askerDialog`) | 是(`agentId!sessionSlug`) | 否(永不注册) |
|
|
419
416
|
| **恢复** | 否(诉请者不是支线对话) | 是(查找找到现有的) | 否(总是新的) |
|
|
420
417
|
| **注册** | 不适用 | 创建并注册 | 永不注册 |
|
|
421
|
-
| **诉请者行为** |
|
|
418
|
+
| **诉请者行为** | callee 等待诉请者回问回复 | 诉请者记录后台被诉请者事实 | 诉请者记录后台被诉请者事实 |
|
|
422
419
|
| **支线对话能力** | 完整(回问诉请者、队友、工具) | 完整(回问诉请者、队友、工具) | 完整(回问诉请者、队友、工具) |
|
|
423
420
|
| **用例** | 从诉请者澄清 | 恢复持久支线任务 | 一次性独立任务 |
|
|
424
421
|
|
|
@@ -453,15 +450,15 @@ flowchart TD
|
|
|
453
450
|
|
|
454
451
|
4. **UI 将 Q4H 呈现为队友诉请**:UI 类似于其他队友诉请处理 Q4H,具有导航链接到对话中的诉请站点。用户使用与常规消息相同的输入文本区域内联回答。
|
|
455
452
|
|
|
456
|
-
5.
|
|
453
|
+
5. **callee 响应供应**:callee 通过持久化将响应写入*当前诉请者*的上下文(不是回调)。对于 TYPE B,每次诉请都会用最新的诉请者 + tellaskInfo 更新支线对话的 `assignmentFromAsker`,因此响应被路由到最近的诉请者(主线或支线对话)。这支持分离操作、复用和崩溃恢复。
|
|
457
454
|
|
|
458
|
-
TYPE B 长线诉请更新的确认边界必须谨慎区分:pending 状态与 `asker-stack.jsonl`
|
|
455
|
+
TYPE B 长线诉请更新的确认边界必须谨慎区分:pending 状态与 `asker-stack.jsonl` 更新,只表示运行时已接受/登记新要求;只有 callee driver 实际消费 `registered_assignment_update` up-next、写入可见更新气泡和 assignment anchor 后,才表示目标 callee 已收到并开始处理更新。`registered_assignment_update` up-next 是运行态调度状态,不是持久化 redo log;不要为了“更新气泡”即时可重放而新增严格持久队列。后端进程重启后的业务自愈依赖 loud facts 与足够上下文(pending reminder、asker stack 最新 assignment、旧 call 是否缺少终态、目标 callee 是否缺少 assignment anchor),让 LLM 自主决定重发、修正或继续观察后台事实,而不是追求技术层面绝不丢内存队列。
|
|
459
456
|
|
|
460
457
|
6. **支线对话注册表**:已注册的支线对话(TYPE B 长线诉请)在主线对话作用域的注册表中跟踪。注册表在 `clear_mind` 操作中持续存在,并在主线加载时重建。
|
|
461
458
|
|
|
462
459
|
7. **状态保留契约**:
|
|
463
460
|
- `clear_mind`:清除消息,清除 Q4H 索引,保留提醒,保留注册表
|
|
464
|
-
-
|
|
461
|
+
- callee 完成:向当前诉请者写入响应,从待处理列表中删除(注册表不变)
|
|
465
462
|
- 支线对话宣布卡死:将 runState 标记为 dead,并移除对应 TYPE B 注册表条目;同一 slug 可作为全新支线重新发起
|
|
466
463
|
- Q4H 回答:从索引中清除已回答的问题,继续对话
|
|
467
464
|
|
|
@@ -648,7 +645,7 @@ sequenceDiagram
|
|
|
648
645
|
participant Driver as driveDialogStream
|
|
649
646
|
|
|
650
647
|
Asker->>Side: 创建支线对话(TYPE B 或 C)
|
|
651
|
-
Note over Asker:
|
|
648
|
+
Note over Asker: 诉请者记录后台被诉请者事实
|
|
652
649
|
|
|
653
650
|
Side->>WS: 发出 askHuman({ tellaskContent: "..." }) 问题
|
|
654
651
|
WS-->>UI: questions_count_update
|
|
@@ -657,7 +654,7 @@ sequenceDiagram
|
|
|
657
654
|
UI->>WS: drive_dialog_by_user_answer(dialog=sideDialogId, questionId, content)
|
|
658
655
|
WS->>Driver: driveDialogStream(sideDialog, human answer)
|
|
659
656
|
Driver-->>Side: 支线对话恢复
|
|
660
|
-
Side-->>Asker:
|
|
657
|
+
Side-->>Asker: 供应结果到达事实(清除该 pending callee)
|
|
661
658
|
```
|
|
662
659
|
|
|
663
660
|
### Q4H 与思维清晰操作
|
|
@@ -701,7 +698,7 @@ flowchart TD
|
|
|
701
698
|
- `.dialogs/run/<root-id>/sideDialogs/<sub-id>/q4h.yaml`
|
|
702
699
|
- `.dialogs/run/<root-id>/registry.yaml`(仅主线;TYPE B 注册表)
|
|
703
700
|
|
|
704
|
-
###
|
|
701
|
+
### callee 响应供应机制
|
|
705
702
|
|
|
706
703
|
**核心原则**:支线对话通过持久化向**当前诉请者**的上下文供应响应,而不是通过回调(TYPE A 时诉请者为直接 askerDialog)。
|
|
707
704
|
|
|
@@ -715,37 +712,36 @@ sequenceDiagram
|
|
|
715
712
|
Asker->>Driver: 创建支线对话(添加到待处理列表)
|
|
716
713
|
Driver->>Side: 驱动支线对话(分离执行)
|
|
717
714
|
Side-->>Store: 持久化最终响应
|
|
718
|
-
Driver-->>Asker:
|
|
719
|
-
opt
|
|
720
|
-
Driver-->>Asker: 设置 needsDrive=true
|
|
715
|
+
Driver-->>Asker: 供应结果到达事实 + 清除 pending callee
|
|
716
|
+
opt 结果到达形成显式驱动源
|
|
717
|
+
Driver-->>Asker: 设置 needsDrive=true
|
|
721
718
|
end
|
|
722
719
|
```
|
|
723
720
|
|
|
724
|
-
### 支线对话 Q4H
|
|
721
|
+
### 支线对话 Q4H 和诉请者结果到达
|
|
725
722
|
|
|
726
|
-
|
|
723
|
+
当 callee 提出 Q4H 并等待人工输入时,caller 的 result-arrival 处理必须尊重“还没有 callee 结果”这个事实:
|
|
727
724
|
|
|
728
725
|
```typescript
|
|
729
|
-
//
|
|
730
|
-
async function
|
|
731
|
-
const pending = await
|
|
726
|
+
// caller 检查 callee 完成状态
|
|
727
|
+
async function checkCalleeResultArrival(caller: Dialog): Promise<void> {
|
|
728
|
+
const pending = await loadActiveCalleeDispatches(caller.id);
|
|
732
729
|
|
|
733
730
|
for (const p of pending) {
|
|
734
|
-
//
|
|
731
|
+
// 检查 callee 是否有未解决的 Q4H
|
|
735
732
|
const sideDialogQ4H = await DialogPersistence.loadQuestions4HumanState(p.sideDialogId);
|
|
736
733
|
|
|
737
734
|
if (sideDialogQ4H.length > 0) {
|
|
738
|
-
//
|
|
739
|
-
|
|
740
|
-
log.debug(`支线对话 ${p.sideDialogId} 有 ${sideDialogQ4H.length} 个 Q4H,跳过自动重启`);
|
|
735
|
+
// callee 正在等待人工输入;此时还不存在结果到达事实
|
|
736
|
+
log.debug(`callee ${p.sideDialogId} 有 ${sideDialogQ4H.length} 个 Q4H,跳过结果到达处理`);
|
|
741
737
|
continue;
|
|
742
738
|
}
|
|
743
739
|
|
|
744
|
-
//
|
|
740
|
+
// callee 没有 Q4H,检查是否完成
|
|
745
741
|
const isDone = await isSideDialogCompleted(p.sideDialogId);
|
|
746
742
|
if (isDone) {
|
|
747
|
-
//
|
|
748
|
-
await incorporateSideDialogResponse(
|
|
743
|
+
// 合并响应,并从这个具体事实触发后续调度
|
|
744
|
+
await incorporateSideDialogResponse(caller, p.sideDialogId);
|
|
749
745
|
}
|
|
750
746
|
}
|
|
751
747
|
}
|
|
@@ -896,7 +892,7 @@ flowchart TD
|
|
|
896
892
|
Key --> Lookup{注册表命中?}
|
|
897
893
|
Lookup -- 是 --> Resume[恢复 + 驱动现有支线对话]
|
|
898
894
|
Lookup -- 否 --> Create[创建 + 注册 + 驱动新的支线对话]
|
|
899
|
-
Resume --> Supply[
|
|
895
|
+
Resume --> Supply[向诉请者供应结果到达事实]
|
|
900
896
|
Create --> Supply
|
|
901
897
|
```
|
|
902
898
|
|
|
@@ -1060,8 +1056,8 @@ interface RegistryMethods {
|
|
|
1060
1056
|
**fork 后动作**(由后端返回给 UI):
|
|
1061
1057
|
|
|
1062
1058
|
- `draft_user_text`:若目标 generation 是一条用户输入,则把该文本回填到新对话输入框中,等待用户决定是否发送
|
|
1063
|
-
- `restore_pending`:若切点之前存在待处理 Q4H
|
|
1064
|
-
- `auto_continue
|
|
1059
|
+
- `restore_pending`:若切点之前存在待处理 Q4H,则恢复该用户等待状态;active callee dispatches 复制为后台被诉请者事实,不投影为阻塞态
|
|
1060
|
+
- `auto_continue`:若切点之前没有待处理 Q4H 等用户等待事实,则新主线以 `interrupted(system_stop: fork_dialog_continue)` 初始化,UI 随后立即发送 `resume_dialog`
|
|
1065
1061
|
|
|
1066
1062
|
**一致性要求**:
|
|
1067
1063
|
|
|
@@ -1219,7 +1215,7 @@ Dominds 的运行时**不**持久化单一的类似枚举的 "awaiting …" 状
|
|
|
1219
1215
|
|
|
1220
1216
|
- 持久化状态(API/索引):`running | completed | archived`
|
|
1221
1217
|
- 持久化 `latest.yaml`:`status`、`needsDrive`、`generating`
|
|
1222
|
-
- 派生的门控:`hasPendingQ4H()
|
|
1218
|
+
- 派生的门控:`hasPendingQ4H()`;active callee dispatches 是后台被诉请者事实,不是驱动门控
|
|
1223
1219
|
|
|
1224
1220
|
**持久化状态生命周期**:
|
|
1225
1221
|
|
|
@@ -1235,9 +1231,10 @@ stateDiagram-v2
|
|
|
1235
1231
|
|
|
1236
1232
|
```mermaid
|
|
1237
1233
|
flowchart TD
|
|
1238
|
-
A[status=running] --> B{可以驱动?\\n(没有待处理的 Q4H
|
|
1239
|
-
B -- 否 --> S[已暂停\\n(等待 Q4H
|
|
1240
|
-
S -->|Q4H
|
|
1234
|
+
A[status=running] --> B{可以驱动?\\n(没有待处理的 Q4H)}
|
|
1235
|
+
B -- 否 --> S[已暂停\\n(等待 Q4H)]
|
|
1236
|
+
S -->|Q4H 回答| C{需要驱动?}
|
|
1237
|
+
R[结果到达] --> C
|
|
1241
1238
|
B -- 是 --> C{需要驱动?}
|
|
1242
1239
|
C -- 否 --> I[空闲\\n(等待触发器)]
|
|
1243
1240
|
C -- 是 --> D[驱动循环\\n(流式传输时 generating=true)]
|
|
@@ -1261,7 +1258,7 @@ sequenceDiagram
|
|
|
1261
1258
|
Side->>Driver: 发出 `tellaskBack({ tellaskContent: "..." })` + 问题
|
|
1262
1259
|
Driver->>Asker: 驱动诉请者以回答
|
|
1263
1260
|
Asker-->>Driver: 响应文本
|
|
1264
|
-
Driver-->>Side:
|
|
1261
|
+
Driver-->>Side: 驱动 callee,诉请者响应在上下文中
|
|
1265
1262
|
```
|
|
1266
1263
|
|
|
1267
1264
|
#### TYPE B:已注册支线对话诉请(长线诉请)(`tellask({ targetAgentId: "agentId", sessionSlug: "tellaskSession", tellaskContent: "..." })`)
|
|
@@ -1287,17 +1284,17 @@ sequenceDiagram
|
|
|
1287
1284
|
Driver->>Side: 创建 + 注册 + 驱动
|
|
1288
1285
|
end
|
|
1289
1286
|
Side-->>Driver: 最终响应
|
|
1290
|
-
Driver-->>Tellasker:
|
|
1291
|
-
opt
|
|
1292
|
-
Driver-->>Tellasker: 设置 needsDrive=true
|
|
1287
|
+
Driver-->>Tellasker: 供应结果到达事实 + 清除 pending callee
|
|
1288
|
+
opt 结果到达形成显式驱动源
|
|
1289
|
+
Driver-->>Tellasker: 设置 needsDrive=true(结果到达处理)
|
|
1293
1290
|
end
|
|
1294
1291
|
```
|
|
1295
1292
|
|
|
1296
1293
|
call-site 呼应不变量:每个 `tellask` 发起点的 `callId`,后续都必须在诉请者对话历史里留下同
|
|
1297
|
-
`callId`
|
|
1298
|
-
call;不能静默删除或覆盖 pending
|
|
1299
|
-
|
|
1300
|
-
|
|
1294
|
+
`callId` 的呼应点。正常 callee 回复、跨程 carryover、已注册会话被更新后的替代通知都可以结束这次
|
|
1295
|
+
call;不能静默删除或覆盖 pending 轮次。已注册会话被更新时,替代通知的文案不能在目标 callee 实际消费
|
|
1296
|
+
更新前宣称“更新已送达/目标 callee 正在按新要求处理”;在此之前只能表达“旧轮已被新要求登记替换,目标
|
|
1297
|
+
callee 尚未在安全边界消费更新”。
|
|
1301
1298
|
|
|
1302
1299
|
WebUI 外链不变量:生成 `/dl/*` URL 时必须在业务现场显式写出目标语义,避免复用泛化 deep-link
|
|
1303
1300
|
helper。`/dl/callsite` 只表示诉请者对话里的发起气泡:`selfId/course` 是诉请者对话坐标,`callId`
|
|
@@ -1318,7 +1315,7 @@ sequenceDiagram
|
|
|
1318
1315
|
Driver->>Side: 创建(不注册)
|
|
1319
1316
|
Driver->>Side: 驱动
|
|
1320
1317
|
Side-->>Driver: 最终响应
|
|
1321
|
-
Driver-->>Tellasker:
|
|
1318
|
+
Driver-->>Tellasker: 供应结果到达事实(无注册表更新)
|
|
1322
1319
|
```
|
|
1323
1320
|
|
|
1324
1321
|
### Q4H 生命周期状态
|
|
@@ -1348,7 +1345,7 @@ sequenceDiagram
|
|
|
1348
1345
|
participant Driver as driveDialogStream
|
|
1349
1346
|
|
|
1350
1347
|
Asker->>Side: 创建支线对话(TYPE B 或 C)
|
|
1351
|
-
Note over Asker,Side:
|
|
1348
|
+
Note over Asker,Side: 诉请者记录后台被诉请者事实
|
|
1352
1349
|
Side->>WS: 发出 askHuman({ tellaskContent: "..." }) 问题(Q4H)
|
|
1353
1350
|
WS-->>UI: questions_count_update(全局)
|
|
1354
1351
|
|
|
@@ -1358,10 +1355,10 @@ sequenceDiagram
|
|
|
1358
1355
|
WS->>Side: 清除 q4h.yaml 条目
|
|
1359
1356
|
WS->>Driver: driveDialogStream(sideDialog, user answer)
|
|
1360
1357
|
Driver-->>Side: 支线对话恢复并继续
|
|
1361
|
-
Side-->>Asker:
|
|
1358
|
+
Side-->>Asker: callee 响应供应给诉请者(结果到达事实;清除该 pending callee)
|
|
1362
1359
|
|
|
1363
|
-
opt
|
|
1364
|
-
Asker-->>Asker: 设置 needsDrive=true
|
|
1360
|
+
opt 诉请者有 result-arrival 驱动事实
|
|
1361
|
+
Asker-->>Asker: 设置 needsDrive=true(结果到达处理)
|
|
1365
1362
|
end
|
|
1366
1363
|
```
|
|
1367
1364
|
|
|
@@ -1417,7 +1414,7 @@ sequenceDiagram
|
|
|
1417
1414
|
Asker->>Side: createSideDialog()
|
|
1418
1415
|
Side->>Store: recordQuestionForHuman()
|
|
1419
1416
|
Side-->>UI: questions_count_update(支线对话)
|
|
1420
|
-
Asker-->>Asker:
|
|
1417
|
+
Asker-->>Asker: 记录后台被诉请者事实;只有 Q4H 是用户等待阻塞点
|
|
1421
1418
|
|
|
1422
1419
|
User->>UI: 选择支线对话 Q4H
|
|
1423
1420
|
User->>Asker: drive_dialog_by_user_answer(targetSideDialogId)
|
|
@@ -1426,7 +1423,7 @@ sequenceDiagram
|
|
|
1426
1423
|
Side->>Store: clearQuestions4HumanState()
|
|
1427
1424
|
Side-->>Side: driveDialogStream(answer)
|
|
1428
1425
|
Side->>Store: write response.yaml
|
|
1429
|
-
Side-->>Asker: supply
|
|
1426
|
+
Side-->>Asker: supply result-arrival fact
|
|
1430
1427
|
```
|
|
1431
1428
|
|
|
1432
1429
|
### 3. 已注册支线对话诉请(TYPE B / 长线诉请)
|
|
@@ -1440,14 +1437,14 @@ sequenceDiagram
|
|
|
1440
1437
|
Main->>Store: lookup registry key "researcher!market"
|
|
1441
1438
|
alt not found
|
|
1442
1439
|
Main->>Store: create sideDialog + save registry.yaml
|
|
1443
|
-
Main->>Side: drive
|
|
1440
|
+
Main->>Side: drive(后台被诉请者工作)
|
|
1444
1441
|
else found
|
|
1445
1442
|
Main->>Store: load sideDialog + update lastAccessed
|
|
1446
|
-
Main->>Side: drive
|
|
1443
|
+
Main->>Side: drive(后台被诉请者工作)
|
|
1447
1444
|
end
|
|
1448
1445
|
|
|
1449
1446
|
Side->>Store: write response.yaml
|
|
1450
|
-
Side-->>Main: supply
|
|
1447
|
+
Side-->>Main: supply result-arrival fact
|
|
1451
1448
|
```
|
|
1452
1449
|
|
|
1453
1450
|
### 4. 清晰度操作保留注册表
|
|
@@ -8,17 +8,16 @@ Dominds main dialogs are intended for long-run operation. A main dialog "stoppin
|
|
|
8
8
|
is often not what operators want: they want the agent to keep pushing forward until it either:
|
|
9
9
|
|
|
10
10
|
- legitimately suspends for a human decision (Q4H), or
|
|
11
|
-
-
|
|
11
|
+
- has no local work to do while retaining background callee facts (pending tellask/backfill).
|
|
12
12
|
|
|
13
13
|
This document specifies two related runtime controls:
|
|
14
14
|
|
|
15
|
-
- **Auto-continue injection**: for **main dialogs only**, whenever the driver would otherwise stop
|
|
16
|
-
runtime auto-sends a short diligence prompt
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
tool confirmed by runtime.
|
|
15
|
+
- **Auto-continue injection**: for **main dialogs only**, whenever the driver would otherwise stop
|
|
16
|
+
and there is no Q4H or pending active callee dispatch, runtime auto-sends a short diligence prompt
|
|
17
|
+
(rendered as a normal user bubble) and continues generation. Pending tellask is a background
|
|
18
|
+
callee fact, not a blocking state; but when no other concrete drive source exists, it means the
|
|
19
|
+
main dialog has reached an idleable background-wait boundary and must not be kept spinning by a
|
|
20
|
+
Diligence Push prompt.
|
|
22
21
|
- **Required tool-use control**: for ordinary main and side dialog rounds, the Diligence Push
|
|
23
22
|
checkbox controls whether the provider request must end through a Dominds tool call. When checked,
|
|
24
23
|
the model is expected to call a tool such as `askHuman`, `tellask*`, `replyTellask*`, or another
|
|
@@ -28,7 +27,7 @@ This document specifies two related runtime controls:
|
|
|
28
27
|
|
|
29
28
|
## Goals
|
|
30
29
|
|
|
31
|
-
- Prevent main dialogs from stopping except for
|
|
30
|
+
- Prevent main dialogs from stopping except for Q4H or a natural boundary with no local work.
|
|
32
31
|
- Keep behavior predictable and bounded (no infinite loops).
|
|
33
32
|
- Make the Diligence Push text configurable per rtws (runtime workspace) and language.
|
|
34
33
|
- Provide a clear, user-controlled "disable" mechanism.
|
|
@@ -36,9 +35,9 @@ This document specifies two related runtime controls:
|
|
|
36
35
|
## Non-goals
|
|
37
36
|
|
|
38
37
|
- Auto-completing / auto-marking a dialog as done.
|
|
39
|
-
- Auto-injecting
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
- Auto-injecting Diligence Push prompts into Side Dialogs. Side Dialogs remain scoped and should
|
|
39
|
+
either continue from ordinary business facts or report back to their tellasker; direct-reply
|
|
40
|
+
fallback and caller-side judgment handle unintended plain-text stops.
|
|
42
41
|
|
|
43
42
|
## Definitions
|
|
44
43
|
|
|
@@ -62,30 +61,22 @@ This is the "controlled convergence" path. The diligence-push mechanism should *
|
|
|
62
61
|
|
|
63
62
|
### Trigger conditions (must all hold)
|
|
64
63
|
|
|
65
|
-
- Dialog is the **Main Dialog
|
|
66
|
-
|
|
67
|
-
-
|
|
68
|
-
|
|
69
|
-
- no pending Side Dialogs (waiting for backfill).
|
|
64
|
+
- Dialog is the **Main Dialog**.
|
|
65
|
+
- Dialog has no wait fact that should legitimately stop auto-continuation:
|
|
66
|
+
- no pending Q4H.
|
|
67
|
+
- no pending active callee dispatch.
|
|
70
68
|
- The driver would otherwise stop the generation loop (i.e., no tool/function outputs require another iteration).
|
|
71
69
|
|
|
72
|
-
###
|
|
70
|
+
### Provider deadlock recovery
|
|
73
71
|
|
|
74
72
|
Some provider/API quirk handlers may request a one-time Diligence Push recovery after Dominds stops
|
|
75
73
|
same-context retries for a known deadlock pattern. This is not the ordinary "dialog is about to go
|
|
76
|
-
idle" path
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
Side Dialogs active. Normal Side Dialog continuation must come from ordinary business state: tool
|
|
83
|
-
results, Q4H, downstream Side Dialog blockers, or queued runtime/user prompts. If no active reply
|
|
84
|
-
obligation exists, runtime does not inject a push and leaves the retry-stopped state for a human to
|
|
85
|
-
handle. The Side Dialog recovery template does not read rtws diligence files; it uses a built-in
|
|
86
|
-
bilingual template containing the current time, the current Tellask goal, and the single
|
|
87
|
-
runtime-confirmed `replyTellask*` tool (for example `replyTellaskSessionless({ replyContent })`).
|
|
88
|
-
The LLM must not guess the reply variant. Q4H remains a hard blocker.
|
|
74
|
+
idle" path, but it still follows the same background-wait boundary. Diligence recovery injection is
|
|
75
|
+
main-dialog-only, and a pending active callee dispatch vetoes the one-time Diligence Push injection.
|
|
76
|
+
Active callee dispatch is a background callee fact, not a caller blocking state: the caller may keep
|
|
77
|
+
working from other concrete facts, but active callee dispatch alone is not a reason to keep driving
|
|
78
|
+
the mainline. Side Dialog retry-stopped recovery does not inject a Diligence prompt; ordinary
|
|
79
|
+
business facts, direct-reply fallback, or the caller's next judgment decide how work proceeds.
|
|
89
80
|
|
|
90
81
|
### Action
|
|
91
82
|
|
|
@@ -176,14 +167,13 @@ Rules:
|
|
|
176
167
|
Implemented in the kernel driver loop (`dominds/main/llm/kernel-driver/drive.ts`) as a small
|
|
177
168
|
post-iteration check:
|
|
178
169
|
|
|
179
|
-
1. If the dialog is
|
|
180
|
-
|
|
181
|
-
|
|
170
|
+
1. If the dialog is waiting for Q4H or still has a pending active callee dispatch, stop. Active
|
|
171
|
+
callee dispatch is a background callee fact, not a caller blocking state; but without another
|
|
172
|
+
concrete drive source it is a natural idle boundary and must not trigger Diligence injection.
|
|
182
173
|
2. If there is any tool feedback, continue normally.
|
|
183
174
|
3. Otherwise, attempt diligence-push auto-continue:
|
|
184
175
|
- Main Dialog: resolve the rtws diligence file or built-in fallback text.
|
|
185
|
-
- Side Dialog:
|
|
186
|
-
not inject.
|
|
176
|
+
- Side Dialog: do not inject Diligence Push.
|
|
187
177
|
- If disabled → stop normally.
|
|
188
178
|
- If budget exhausted → emit an informational UI notice and stop further automatic Diligence
|
|
189
179
|
Pushes for the current budget.
|
|
@@ -217,11 +207,11 @@ Regression tests should cover:
|
|
|
217
207
|
|
|
218
208
|
- Main dialog: tool-only output → diligence injection → continued response
|
|
219
209
|
- Main dialog: empty assistant output → diligence injection → continued response
|
|
210
|
+
- Main dialog: only pending tellask / active callee dispatch → no Diligence injection; retain the
|
|
211
|
+
background state and naturally idle
|
|
220
212
|
- SideDialog: ordinary idle path has no diligence injection
|
|
221
|
-
- SideDialog: provider quirk recovery
|
|
222
|
-
|
|
223
|
-
- SideDialog: provider quirk recovery + no active reply obligation → no injection; leave the
|
|
224
|
-
stopped/give-up state for human handling
|
|
213
|
+
- SideDialog: provider quirk recovery has no Diligence injection; direct-reply fallback or caller
|
|
214
|
+
judgment handles the next business move
|
|
225
215
|
- rtws config:
|
|
226
216
|
- `.minds/diligence.md` is honored when lang-specific file is absent
|
|
227
217
|
- empty diligence file disables diligence-push
|