dominds 1.18.2 → 1.19.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access-control.js +6 -6
- package/dist/apps/runtime.d.ts +2 -2
- package/dist/apps/runtime.js +28 -28
- package/dist/apps-host/client.d.ts +1 -1
- package/dist/apps-host/host.js +7 -7
- package/dist/apps-host/ipc-types.d.ts +2 -2
- package/dist/apps-host/ipc-types.js +10 -10
- package/dist/cli/read.d.ts +0 -1
- package/dist/cli/read.js +1 -6
- package/dist/dialog-display-state.d.ts +6 -6
- package/dist/dialog-display-state.js +46 -46
- package/dist/dialog-factory.d.ts +12 -12
- package/dist/dialog-factory.js +33 -30
- package/dist/dialog-fork.d.ts +2 -2
- package/dist/dialog-fork.js +140 -115
- package/dist/dialog-global-registry.d.ts +5 -5
- package/dist/dialog-global-registry.js +11 -11
- package/dist/dialog-instance-registry.d.ts +3 -3
- package/dist/dialog-instance-registry.js +52 -41
- package/dist/dialog.d.ts +100 -113
- package/dist/dialog.js +274 -229
- package/dist/docs/agent-priming.md +5 -5
- package/dist/docs/agent-priming.zh.md +5 -5
- package/dist/docs/app-constitution.md +1 -1
- package/dist/docs/app-constitution.zh.md +1 -1
- package/dist/docs/cli-usage.md +1 -1
- package/dist/docs/cli-usage.zh.md +1 -1
- package/dist/docs/design.md +14 -14
- package/dist/docs/design.zh.md +14 -14
- package/dist/docs/dialog-persistence.md +58 -58
- package/dist/docs/dialog-persistence.zh.md +61 -61
- package/dist/docs/dialog-system.md +363 -367
- package/dist/docs/dialog-system.zh.md +355 -357
- package/dist/docs/diligence-push.md +18 -18
- package/dist/docs/diligence-push.zh.md +17 -17
- package/dist/docs/dominds-agent-collaboration.zh.md +3 -3
- package/dist/docs/dominds-terminology.md +46 -47
- package/dist/docs/encapsulated-taskdoc.md +4 -4
- package/dist/docs/encapsulated-taskdoc.zh.md +3 -3
- package/dist/docs/fbr.md +30 -30
- package/dist/docs/fbr.zh.md +15 -15
- package/dist/docs/i18n.md +2 -2
- package/dist/docs/i18n.zh.md +2 -2
- package/dist/docs/mcp-support.md +5 -4
- package/dist/docs/mcp-support.zh.md +3 -2
- package/dist/docs/memory-system.md +4 -4
- package/dist/docs/memory-system.zh.md +1 -1
- package/dist/docs/mottos.md +1 -1
- package/dist/docs/mottos.zh.md +1 -1
- package/dist/docs/q4h.md +3 -3
- package/dist/docs/q4h.zh.md +1 -1
- package/dist/docs/roadmap.md +2 -2
- package/dist/docs/team_mgmt-toolset.md +11 -3
- package/dist/docs/team_mgmt-toolset.zh.md +9 -2
- package/dist/docs/tellask-collab.md +18 -18
- package/dist/docs/tellask-collab.zh.md +8 -8
- package/dist/docs/tellask-revive-context-refactor.zh.md +591 -0
- package/dist/evt-registry.d.ts +1 -2
- package/dist/evt-registry.js +2 -7
- package/dist/llm/gen/mock.js +9 -0
- package/dist/llm/kernel-driver/context.d.ts +1 -2
- package/dist/llm/kernel-driver/context.js +12 -26
- package/dist/llm/kernel-driver/drive.js +99 -75
- package/dist/llm/kernel-driver/engine.d.ts +2 -2
- package/dist/llm/kernel-driver/engine.js +10 -10
- package/dist/llm/kernel-driver/fbr.js +6 -6
- package/dist/llm/kernel-driver/flow.d.ts +1 -1
- package/dist/llm/kernel-driver/flow.js +129 -93
- package/dist/llm/kernel-driver/guardrails.js +4 -4
- package/dist/llm/kernel-driver/index.d.ts +1 -1
- package/dist/llm/kernel-driver/index.js +2 -2
- package/dist/llm/kernel-driver/loop.js +30 -30
- package/dist/llm/kernel-driver/reply-guidance.js +47 -52
- package/dist/llm/kernel-driver/restore.d.ts +3 -3
- package/dist/llm/kernel-driver/restore.js +23 -28
- package/dist/llm/kernel-driver/runtime.d.ts +1 -1
- package/dist/llm/kernel-driver/runtime.js +1 -1
- package/dist/llm/kernel-driver/sideDialog-txn.d.ts +8 -0
- package/dist/llm/kernel-driver/{subdialog-txn.js → sideDialog-txn.js} +13 -13
- package/dist/llm/kernel-driver/{subdialog.d.ts → sideDialog.d.ts} +13 -13
- package/dist/llm/kernel-driver/{subdialog.js → sideDialog.js} +203 -170
- package/dist/llm/kernel-driver/tellask-special.d.ts +7 -3
- package/dist/llm/kernel-driver/tellask-special.js +474 -497
- package/dist/llm/kernel-driver/types.d.ts +25 -9
- package/dist/mcp/config.d.ts +1 -0
- package/dist/mcp/config.js +7 -2
- package/dist/mcp/supervisor.d.ts +2 -0
- package/dist/mcp/supervisor.js +2 -1
- package/dist/minds/builtin/pangu/persona.en.md +4 -4
- package/dist/minds/load.js +6 -6
- package/dist/minds/system-prompt-parts.d.ts +1 -1
- package/dist/minds/system-prompt-parts.js +12 -12
- package/dist/minds/system-prompt.d.ts +1 -1
- package/dist/minds/system-prompt.js +56 -56
- package/dist/persistence-errors.d.ts +1 -1
- package/dist/persistence.d.ts +126 -121
- package/dist/persistence.js +1190 -786
- package/dist/priming.d.ts +3 -3
- package/dist/priming.js +62 -61
- package/dist/recovery/reply-special.js +5 -5
- package/dist/runtime/driver-messages.d.ts +3 -2
- package/dist/runtime/driver-messages.js +68 -57
- package/dist/runtime/inter-dialog-format.d.ts +12 -10
- package/dist/runtime/inter-dialog-format.js +80 -35
- package/dist/runtime/interjection-pause-stop.js +1 -1
- package/dist/runtime/reply-prompt-copy.d.ts +7 -3
- package/dist/runtime/reply-prompt-copy.js +39 -14
- package/dist/server/api-routes.js +87 -83
- package/dist/server/static-server.js +1 -1
- package/dist/server/websocket-handler.js +163 -153
- package/dist/tool-availability.js +1 -1
- package/dist/tools/app-reminders.js +17 -4
- package/dist/tools/ctrl.js +5 -5
- package/dist/tools/os.js +16 -16
- package/dist/tools/pending-tellask-reminder.js +20 -14
- package/dist/tools/prompts/control/en/index.md +1 -1
- package/dist/tools/prompts/control/en/principles.md +8 -8
- package/dist/tools/prompts/control/en/scenarios.md +7 -7
- package/dist/tools/prompts/control/en/tools.md +7 -7
- package/dist/tools/prompts/control/zh/principles.md +4 -4
- package/dist/tools/prompts/control/zh/scenarios.md +5 -5
- package/dist/tools/prompts/control/zh/tools.md +3 -3
- package/dist/tools/prompts/team_memory/en/scenarios.md +1 -1
- package/dist/tools/prompts/team_memory/zh/scenarios.md +1 -1
- package/dist/tools/team_mgmt-manual.js +2 -2
- package/dist/tools/team_mgmt-mcp-manual.js +10 -0
- package/dist/tools/team_mgmt.js +4 -4
- package/dist/utils/taskdoc.js +12 -12
- package/package.json +3 -3
- package/webapp/dist/assets/{_basePickBy-BPJaiZdW.js → _basePickBy-B7M9Q0Fa.js} +3 -3
- package/webapp/dist/assets/_basePickBy-B7M9Q0Fa.js.map +1 -0
- package/webapp/dist/assets/{_baseUniq-BEetT15i.js → _baseUniq-DAeYoL6j.js} +2 -2
- package/webapp/dist/assets/_baseUniq-DAeYoL6j.js.map +1 -0
- package/webapp/dist/assets/{arc-Dm7Zf36f.js → arc-Bh4nDbNR.js} +2 -2
- package/webapp/dist/assets/arc-Bh4nDbNR.js.map +1 -0
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-BpTPtkuo.js → architectureDiagram-2XIMDMQ5-CxqmdsIm.js} +26 -8
- package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-CxqmdsIm.js.map +1 -0
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-C8fLN0iu.js → blockDiagram-WCTKOSBZ-CxIWLtpt.js} +187 -170
- package/webapp/dist/assets/blockDiagram-WCTKOSBZ-CxIWLtpt.js.map +1 -0
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-BpPr62CH.js → c4Diagram-IC4MRINW-1qErOIgG.js} +4 -4
- package/webapp/dist/assets/c4Diagram-IC4MRINW-1qErOIgG.js.map +1 -0
- package/webapp/dist/assets/{channel-EMYoPjW3.js → channel-DkgZHNUe.js} +2 -2
- package/webapp/dist/assets/channel-DkgZHNUe.js.map +1 -0
- package/webapp/dist/assets/{chunk-4BX2VUAB-CefNtjWG.js → chunk-4BX2VUAB-BmdMbU9v.js} +2 -2
- package/webapp/dist/assets/chunk-4BX2VUAB-BmdMbU9v.js.map +1 -0
- package/webapp/dist/assets/{chunk-55IACEB6-C_X7T43V.js → chunk-55IACEB6-D6LDTDBy.js} +2 -2
- package/webapp/dist/assets/chunk-55IACEB6-D6LDTDBy.js.map +1 -0
- package/webapp/dist/assets/{chunk-FMBD7UC4-ORmtkrtS.js → chunk-FMBD7UC4-C-BdCe4C.js} +2 -2
- package/webapp/dist/assets/chunk-FMBD7UC4-C-BdCe4C.js.map +1 -0
- package/webapp/dist/assets/{chunk-TZMSLE5B-Gao4qrq7.js → chunk-JSJVCQXG-WA_BLIm9.js} +14 -6
- package/webapp/dist/assets/chunk-JSJVCQXG-WA_BLIm9.js.map +1 -0
- package/webapp/dist/assets/{chunk-QN33PNHL-LTAOVhWu.js → chunk-KX2RTZJC-CA7sDJO5.js} +2 -2
- package/webapp/dist/assets/chunk-KX2RTZJC-CA7sDJO5.js.map +1 -0
- package/webapp/dist/assets/{chunk-DI55MBZ5-CbvrsI_w.js → chunk-NQ4KR5QH-wlvxalE3.js} +9 -7
- package/webapp/dist/assets/chunk-NQ4KR5QH-wlvxalE3.js.map +1 -0
- package/webapp/dist/assets/{chunk-QZHKN3VN-ZoUM_4u5.js → chunk-QZHKN3VN-Bo1VMcph.js} +2 -2
- package/webapp/dist/assets/chunk-QZHKN3VN-Bo1VMcph.js.map +1 -0
- package/webapp/dist/assets/{chunk-B4BG7PRW-BRe3_2oA.js → chunk-WL4C6EOR-B-Pk44be.js} +171 -121
- package/webapp/dist/assets/chunk-WL4C6EOR-B-Pk44be.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-2ON5EDUG-uha1vIGN.js → classDiagram-VBA2DB6C-BqKuyb49.js} +7 -6
- package/webapp/dist/assets/classDiagram-VBA2DB6C-BqKuyb49.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-uha1vIGN.js → classDiagram-v2-RAHNMMFH-BqKuyb49.js} +7 -6
- package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-BqKuyb49.js.map +1 -0
- package/webapp/dist/assets/{clone-_9Ayb1Gp.js → clone-BX5z8WVZ.js} +2 -2
- package/webapp/dist/assets/clone-BX5z8WVZ.js.map +1 -0
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-C8wDw3NY.js → cose-bilkent-S5V4N54A-B-s11SgN.js} +2 -2
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-B-s11SgN.js.map +1 -0
- package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
- package/webapp/dist/assets/{dagre-6UL2VRFP-BUSeNot0.js → dagre-KLK3FWXG-DmQFV2qK.js} +7 -7
- package/webapp/dist/assets/dagre-KLK3FWXG-DmQFV2qK.js.map +1 -0
- package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
- package/webapp/dist/assets/{diagram-PSM6KHXK-CMZAksVC.js → diagram-E7M64L7V-QRaBfST8.js} +10 -10
- package/webapp/dist/assets/diagram-E7M64L7V-QRaBfST8.js.map +1 -0
- package/webapp/dist/assets/{diagram-QEK2KX5R-BQKoRtwy.js → diagram-IFDJBPK2-lrWn1Obo.js} +9 -8
- package/webapp/dist/assets/diagram-IFDJBPK2-lrWn1Obo.js.map +1 -0
- package/webapp/dist/assets/{diagram-S2PKOQOG-DjMG97kd.js → diagram-P4PSJMXO-sTU7Hh-Y.js} +8 -8
- package/webapp/dist/assets/diagram-P4PSJMXO-sTU7Hh-Y.js.map +1 -0
- package/webapp/dist/assets/{erDiagram-Q2GNP2WA-BujwA137.js → erDiagram-INFDFZHY-Cx6jc9Wq.js} +96 -75
- package/webapp/dist/assets/erDiagram-INFDFZHY-Cx6jc9Wq.js.map +1 -0
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-DgwPjg4y.js → flowDiagram-PKNHOUZH-DfGI49Dz.js} +98 -81
- package/webapp/dist/assets/flowDiagram-PKNHOUZH-DfGI49Dz.js.map +1 -0
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-Db2ykf3E.js → ganttDiagram-A5KZAMGK-nrcHWWaM.js} +28 -3
- package/webapp/dist/assets/ganttDiagram-A5KZAMGK-nrcHWWaM.js.map +1 -0
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-D_gSifkv.js → gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js} +38 -46
- package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-D8ivAqd6.js.map +1 -0
- package/webapp/dist/assets/graph-R5G-y8tB.js +782 -0
- package/webapp/dist/assets/graph-R5G-y8tB.js.map +1 -0
- package/webapp/dist/assets/{index-DLajsIDJ.js → index--fy89xGh.js} +2214 -2023
- package/webapp/dist/assets/index--fy89xGh.js.map +1 -0
- package/webapp/dist/assets/{index-xvYYeHuy.css → index-DZFkLLVz.css} +18 -10
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-BDba5pKs.js → infoDiagram-LFFYTUFH-PIoZHr7s.js} +7 -7
- package/webapp/dist/assets/infoDiagram-LFFYTUFH-PIoZHr7s.js.map +1 -0
- package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-oCM-LYk1.js +966 -0
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-oCM-LYk1.js.map +1 -0
- package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-CmJAbmlm.js → journeyDiagram-4ABVD52K-C2qidjQ5.js} +5 -5
- package/webapp/dist/assets/journeyDiagram-4ABVD52K-C2qidjQ5.js.map +1 -0
- package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-DxQeBTDk.js → kanban-definition-K7BYSVSG-Du0TC8WS.js} +5 -3
- package/webapp/dist/assets/kanban-definition-K7BYSVSG-Du0TC8WS.js.map +1 -0
- package/webapp/dist/assets/{layout-DteV_yE8.js → layout-VmEo1OEB.js} +5 -5
- package/webapp/dist/assets/layout-VmEo1OEB.js.map +1 -0
- package/webapp/dist/assets/{linear-zItbPrND.js → linear-B662YHAc.js} +2 -2
- package/webapp/dist/assets/linear-B662YHAc.js.map +1 -0
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-BJXI7UqO.js → mindmap-definition-YRQLILUH-D7arZj95.js} +7 -5
- package/webapp/dist/assets/mindmap-definition-YRQLILUH-D7arZj95.js.map +1 -0
- package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
- package/webapp/dist/assets/{pieDiagram-ADFJNKIX-BpM-aH2p.js → pieDiagram-SKSYHLDU-DvjPP4PA.js} +8 -8
- package/webapp/dist/assets/pieDiagram-SKSYHLDU-DvjPP4PA.js.map +1 -0
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-NXdIpA15.js → quadrantDiagram-337W2JSQ-B_JUGMj_.js} +3 -3
- package/webapp/dist/assets/quadrantDiagram-337W2JSQ-B_JUGMj_.js.map +1 -0
- package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-D1AICAA0.js → requirementDiagram-Z7DCOOCP-DF0mpvE3.js} +16 -6
- package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-DF0mpvE3.js.map +1 -0
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-WiReDPfo.js → sankeyDiagram-WA2Y5GQK-CoXlxv00.js} +2 -2
- package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CoXlxv00.js.map +1 -0
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-Cw76oP8t.js → sequenceDiagram-2WXFIKYE-DYqT5Pg7.js} +601 -201
- package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-DYqT5Pg7.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-QjCeRczs.js → stateDiagram-RAJIS63D-D9b1mN8-.js} +9 -9
- package/webapp/dist/assets/stateDiagram-RAJIS63D-D9b1mN8-.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-IClqxQ4s.js → stateDiagram-v2-FVOUBMTO-DNzgudL_.js} +5 -5
- package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-DNzgudL_.js.map +1 -0
- package/webapp/dist/assets/{timeline-definition-IT6M3QCI-BfyfTY7m.js → timeline-definition-YZTLITO2-CkyKUY7A.js} +3 -3
- package/webapp/dist/assets/timeline-definition-YZTLITO2-CkyKUY7A.js.map +1 -0
- package/webapp/dist/assets/{treemap-GDKQZRPO-C5MiL6--.js → treemap-KZPCXAKY-CZd09kF-.js} +37 -24
- package/webapp/dist/assets/treemap-KZPCXAKY-CZd09kF-.js.map +1 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-BxVF5Olo.js +2487 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-BxVF5Olo.js.map +1 -0
- package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-ybaJrSry.js → xychartDiagram-JWTSCODW-BRwRloPc.js} +4 -4
- package/webapp/dist/assets/xychartDiagram-JWTSCODW-BRwRloPc.js.map +1 -0
- package/webapp/dist/index.html +2 -2
- package/dist/docs/issues/global-dialog-event-broadcaster-missing.md +0 -128
- package/dist/llm/kernel-driver/subdialog-txn.d.ts +0 -8
- package/webapp/dist/assets/_basePickBy-BPJaiZdW.js.map +0 -1
- package/webapp/dist/assets/_baseUniq-BEetT15i.js.map +0 -1
- package/webapp/dist/assets/arc-Dm7Zf36f.js.map +0 -1
- package/webapp/dist/assets/architectureDiagram-VXUJARFQ-BpTPtkuo.js.map +0 -1
- package/webapp/dist/assets/blockDiagram-VD42YOAC-C8fLN0iu.js.map +0 -1
- package/webapp/dist/assets/c4Diagram-YG6GDRKO-BpPr62CH.js.map +0 -1
- package/webapp/dist/assets/channel-EMYoPjW3.js.map +0 -1
- package/webapp/dist/assets/chunk-4BX2VUAB-CefNtjWG.js.map +0 -1
- package/webapp/dist/assets/chunk-55IACEB6-C_X7T43V.js.map +0 -1
- package/webapp/dist/assets/chunk-B4BG7PRW-BRe3_2oA.js.map +0 -1
- package/webapp/dist/assets/chunk-DI55MBZ5-CbvrsI_w.js.map +0 -1
- package/webapp/dist/assets/chunk-FMBD7UC4-ORmtkrtS.js.map +0 -1
- package/webapp/dist/assets/chunk-QN33PNHL-LTAOVhWu.js.map +0 -1
- package/webapp/dist/assets/chunk-QZHKN3VN-ZoUM_4u5.js.map +0 -1
- package/webapp/dist/assets/chunk-TZMSLE5B-Gao4qrq7.js.map +0 -1
- package/webapp/dist/assets/classDiagram-2ON5EDUG-uha1vIGN.js.map +0 -1
- package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-uha1vIGN.js.map +0 -1
- package/webapp/dist/assets/clone-_9Ayb1Gp.js.map +0 -1
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-C8wDw3NY.js.map +0 -1
- package/webapp/dist/assets/dagre-6UL2VRFP-BUSeNot0.js.map +0 -1
- package/webapp/dist/assets/diagram-PSM6KHXK-CMZAksVC.js.map +0 -1
- package/webapp/dist/assets/diagram-QEK2KX5R-BQKoRtwy.js.map +0 -1
- package/webapp/dist/assets/diagram-S2PKOQOG-DjMG97kd.js.map +0 -1
- package/webapp/dist/assets/erDiagram-Q2GNP2WA-BujwA137.js.map +0 -1
- package/webapp/dist/assets/flowDiagram-NV44I4VS-DgwPjg4y.js.map +0 -1
- package/webapp/dist/assets/ganttDiagram-JELNMOA3-Db2ykf3E.js.map +0 -1
- package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-D_gSifkv.js.map +0 -1
- package/webapp/dist/assets/graph-BHjCU5xP.js +0 -425
- package/webapp/dist/assets/graph-BHjCU5xP.js.map +0 -1
- package/webapp/dist/assets/index-DLajsIDJ.js.map +0 -1
- package/webapp/dist/assets/infoDiagram-HS3SLOUP-BDba5pKs.js.map +0 -1
- package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-CmJAbmlm.js.map +0 -1
- package/webapp/dist/assets/kanban-definition-3W4ZIXB7-DxQeBTDk.js.map +0 -1
- package/webapp/dist/assets/layout-DteV_yE8.js.map +0 -1
- package/webapp/dist/assets/linear-zItbPrND.js.map +0 -1
- package/webapp/dist/assets/mindmap-definition-VGOIOE7T-BJXI7UqO.js.map +0 -1
- package/webapp/dist/assets/pieDiagram-ADFJNKIX-BpM-aH2p.js.map +0 -1
- package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-NXdIpA15.js.map +0 -1
- package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-D1AICAA0.js.map +0 -1
- package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-WiReDPfo.js.map +0 -1
- package/webapp/dist/assets/sequenceDiagram-WL72ISMW-Cw76oP8t.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-FKZM4ZOC-QjCeRczs.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-IClqxQ4s.js.map +0 -1
- package/webapp/dist/assets/timeline-definition-IT6M3QCI-BfyfTY7m.js.map +0 -1
- package/webapp/dist/assets/treemap-GDKQZRPO-C5MiL6--.js.map +0 -1
- package/webapp/dist/assets/xychartDiagram-PRI3JC2R-ybaJrSry.js.map +0 -1
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.REPLY_SUPPRESSION_PREFIX_ZH = exports.REPLY_SUPPRESSION_PREFIX_EN = exports.REPLY_REASSERTION_PREFIX_ZH = exports.REPLY_REASSERTION_PREFIX_EN = exports.ACTIVE_REPLY_TOOL_PREFIX_ZH = exports.ACTIVE_REPLY_TOOL_PREFIX_EN = void 0;
|
|
4
4
|
exports.buildActiveReplyToolNote = buildActiveReplyToolNote;
|
|
5
|
-
exports.
|
|
6
|
-
exports.
|
|
5
|
+
exports.buildActiveReplyObligationContextText = buildActiveReplyObligationContextText;
|
|
6
|
+
exports.buildSideDialogCompletionRule = buildSideDialogCompletionRule;
|
|
7
|
+
exports.buildSideDialogRoleHeaderCopy = buildSideDialogRoleHeaderCopy;
|
|
7
8
|
exports.buildReplyObligationSuppressionGuideText = buildReplyObligationSuppressionGuideText;
|
|
8
9
|
exports.buildReplyObligationReassertionText = buildReplyObligationReassertionText;
|
|
9
10
|
exports.buildReplyToolReminderText = buildReplyToolReminderText;
|
|
@@ -50,26 +51,50 @@ function buildActiveReplyToolNote(args) {
|
|
|
50
51
|
return [
|
|
51
52
|
exports.ACTIVE_REPLY_TOOL_PREFIX_ZH,
|
|
52
53
|
'先专注处理眼前这轮任务,不要被 `reply*` 选择分心。',
|
|
53
|
-
|
|
54
|
+
`若这轮最终需要对诉请者完成交付,精确调用 \`${args.toolName}\`;不要改选其他 \`reply*\`,也不要提前收口。`,
|
|
54
55
|
].join('\n');
|
|
55
56
|
}
|
|
56
57
|
return [
|
|
57
58
|
exports.ACTIVE_REPLY_TOOL_PREFIX_EN,
|
|
58
59
|
'Stay focused on the task in front of you for this turn; do not get distracted by choosing among `reply*` variants.',
|
|
59
|
-
`If this turn truly reaches final delivery back
|
|
60
|
+
`If this turn truly reaches final delivery back to the tellasker, call \`${args.toolName}\` exactly; do not switch to another \`reply*\` variant or close early.`,
|
|
60
61
|
].join('\n');
|
|
61
62
|
}
|
|
62
|
-
function
|
|
63
|
+
function buildActiveReplyObligationContextText(args) {
|
|
64
|
+
if (args.language === 'zh') {
|
|
65
|
+
return [
|
|
66
|
+
'[Dominds 当前跨对话回复义务]',
|
|
67
|
+
'这是运行时状态,不是新的用户请求。',
|
|
68
|
+
`必须回复的目标对话:${args.directive.targetDialogId}`,
|
|
69
|
+
`必须结清的调用:${args.directive.targetCallId}`,
|
|
70
|
+
`最终交付时精确调用:\`${args.directive.expectedReplyCallName}({ replyContent })\``,
|
|
71
|
+
'',
|
|
72
|
+
'原始诉请内容:',
|
|
73
|
+
args.directive.tellaskContent,
|
|
74
|
+
].join('\n');
|
|
75
|
+
}
|
|
76
|
+
return [
|
|
77
|
+
'[Dominds active inter-dialog reply obligation]',
|
|
78
|
+
'This is runtime state, not a new user request.',
|
|
79
|
+
`Target dialog to reply to: ${args.directive.targetDialogId}`,
|
|
80
|
+
`Call to settle: ${args.directive.targetCallId}`,
|
|
81
|
+
`At final delivery, call exactly: \`${args.directive.expectedReplyCallName}({ replyContent })\``,
|
|
82
|
+
'',
|
|
83
|
+
'Original request content:',
|
|
84
|
+
args.directive.tellaskContent,
|
|
85
|
+
].join('\n');
|
|
86
|
+
}
|
|
87
|
+
function buildSideDialogCompletionRule(language) {
|
|
63
88
|
return language === 'zh'
|
|
64
89
|
? '当前支线已完成并能给出最终交付时:先专注把当前任务做对;若运行时点名了精确 reply 函数,就只在最终交付收口时调用那个函数,不要改选其他 `reply*`,也不要再走 `tellaskBack`。'
|
|
65
|
-
: 'If the current
|
|
90
|
+
: 'If the current Side Dialog is complete and can deliver the final result: stay focused on finishing the actual task first; if runtime names an exact reply function, call that function only at final tellasker delivery, do not switch among `reply*` variants, and do not use `tellaskBack` for final delivery.';
|
|
66
91
|
}
|
|
67
|
-
function
|
|
68
|
-
const
|
|
92
|
+
function buildSideDialogRoleHeaderCopy(args) {
|
|
93
|
+
const tellaskerTag = `@${args.tellaskerId}`;
|
|
69
94
|
if (args.expectedReplyTool === undefined) {
|
|
70
95
|
return args.language === 'zh'
|
|
71
|
-
? `${
|
|
72
|
-
: `${
|
|
96
|
+
? `${tellaskerTag} 已通过诉请安排你处理下述诉请内容。只有确实需要向诉请者回问、且现有规程无法直接判责时,才调用 \`tellaskBack\`。`
|
|
97
|
+
: `${tellaskerTag} has assigned you to handle the request content below. Call \`tellaskBack\` only when you truly need to ask the tellasker back and existing SOP cannot directly identify another owner.`;
|
|
73
98
|
}
|
|
74
99
|
const kindLabel = (0, tellask_labels_1.getTellaskKindLabel)({
|
|
75
100
|
language: args.language,
|
|
@@ -77,8 +102,8 @@ function buildSubdialogRoleHeaderCopy(args) {
|
|
|
77
102
|
bracketed: true,
|
|
78
103
|
});
|
|
79
104
|
return args.language === 'zh'
|
|
80
|
-
? `${
|
|
81
|
-
: `${
|
|
105
|
+
? `${tellaskerTag} 已通过${kindLabel}安排你处理下述诉请内容。等你准备好回复内容后,调用 \`${args.expectedReplyTool}\` 完成回复。只有确实需要向诉请者回问、且现有规程无法直接判责时,才调用 \`tellaskBack\`。`
|
|
106
|
+
: `${tellaskerTag} has assigned you, via this ${kindLabel}, to handle the request content below. Once your reply content is ready, call \`${args.expectedReplyTool}\` to deliver it. Call \`tellaskBack\` only when you truly need to ask the tellasker back and existing SOP cannot directly identify another owner.`;
|
|
82
107
|
}
|
|
83
108
|
function buildReplyObligationSuppressionGuideText(language) {
|
|
84
109
|
if (language === 'zh') {
|
|
@@ -121,7 +146,7 @@ function buildReplyToolReminderText(args) {
|
|
|
121
146
|
`你刚才已经写了正文,但还没调用 \`${args.directive.expectedReplyCallName}\`。`,
|
|
122
147
|
'',
|
|
123
148
|
buildReplyToolReminderLine(args),
|
|
124
|
-
'
|
|
149
|
+
'如果你再次直接输出最终消息而仍不调用该工具,运行时会按 direct-reply fallback 投递,并在 UI/传递正文中明确标注。',
|
|
125
150
|
].join('\n')
|
|
126
151
|
: [
|
|
127
152
|
args.prefix,
|
|
@@ -129,7 +154,7 @@ function buildReplyToolReminderText(args) {
|
|
|
129
154
|
`You already wrote the reply body, but you still have not called \`${args.directive.expectedReplyCallName}\`.`,
|
|
130
155
|
'',
|
|
131
156
|
buildReplyToolReminderLine(args),
|
|
132
|
-
'If you still emit a plain final message without the tool, runtime will
|
|
157
|
+
'If you still emit a plain final message without the tool, runtime will deliver it via direct-reply fallback and label that path explicitly in UI and transfer text.',
|
|
133
158
|
].join('\n');
|
|
134
159
|
}
|
|
135
160
|
function isStandaloneRuntimeGuidePromptContent(content) {
|
|
@@ -133,15 +133,15 @@ async function loadDialogMetadataForLookup(dialogId, status, context) {
|
|
|
133
133
|
return null;
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
|
-
async function
|
|
136
|
+
async function loadMainDialogMetadataForLookup(dialogId, status, context) {
|
|
137
137
|
try {
|
|
138
|
-
return await persistence_1.DialogPersistence.
|
|
138
|
+
return await persistence_1.DialogPersistence.loadMainDialogMetadata(dialogId, status);
|
|
139
139
|
}
|
|
140
140
|
catch (error) {
|
|
141
141
|
if (!(0, persistence_errors_1.findDomindsPersistenceFileError)(error)) {
|
|
142
142
|
throw error;
|
|
143
143
|
}
|
|
144
|
-
log.warn(`${context}:
|
|
144
|
+
log.warn(`${context}: main dialog metadata quarantined during lazy lookup`, error, {
|
|
145
145
|
dialogId: dialogId.valueOf(),
|
|
146
146
|
status,
|
|
147
147
|
});
|
|
@@ -165,17 +165,17 @@ async function loadDialogLatestForLookup(dialogId, status, context) {
|
|
|
165
165
|
}
|
|
166
166
|
async function detectWaitingForFreshBootsReasoning(dialogId, status) {
|
|
167
167
|
try {
|
|
168
|
-
// Pending-
|
|
168
|
+
// Pending-sideDialogs is also lazy-loaded per dialog. A malformed queue should quarantine just
|
|
169
169
|
// that dialog and degrade this derived flag to "unknown/false" instead of taking down the
|
|
170
170
|
// surrounding list or hierarchy response.
|
|
171
|
-
const pending = await persistence_1.DialogPersistence.
|
|
171
|
+
const pending = await persistence_1.DialogPersistence.loadPendingSideDialogs(dialogId, status);
|
|
172
172
|
return pending.some((entry) => entry.callName === 'freshBootsReasoning');
|
|
173
173
|
}
|
|
174
174
|
catch (error) {
|
|
175
175
|
if (!(0, persistence_errors_1.findDomindsPersistenceFileError)(error)) {
|
|
176
176
|
throw error;
|
|
177
177
|
}
|
|
178
|
-
log.warn('detectWaitingForFreshBootsReasoning: pending-
|
|
178
|
+
log.warn('detectWaitingForFreshBootsReasoning: pending-sideDialogs quarantined during lookup', error, {
|
|
179
179
|
dialogId: dialogId.valueOf(),
|
|
180
180
|
status,
|
|
181
181
|
});
|
|
@@ -1197,12 +1197,12 @@ async function handleApiRoute(req, res, pathname, context) {
|
|
|
1197
1197
|
const parts = pathname.split('/');
|
|
1198
1198
|
const rawRoot = parts[3];
|
|
1199
1199
|
if (!rawRoot) {
|
|
1200
|
-
respondJson(res, 400, { success: false, error: 'Missing
|
|
1200
|
+
respondJson(res, 400, { success: false, error: 'Missing main dialog id' });
|
|
1201
1201
|
return true;
|
|
1202
1202
|
}
|
|
1203
1203
|
return await handleForkDialog(req, res, context, rawRoot.replace(/%2F/g, '/'));
|
|
1204
1204
|
}
|
|
1205
|
-
// Delete a dialog (
|
|
1205
|
+
// Delete a dialog (main dialogs only for now)
|
|
1206
1206
|
if (pathname.startsWith('/api/dialogs/') &&
|
|
1207
1207
|
!pathname.endsWith('/hierarchy') &&
|
|
1208
1208
|
!pathname.endsWith('/fork') &&
|
|
@@ -1210,7 +1210,7 @@ async function handleApiRoute(req, res, pathname, context) {
|
|
|
1210
1210
|
const parts = pathname.split('/');
|
|
1211
1211
|
const rawRoot = parts[3];
|
|
1212
1212
|
if (!rawRoot) {
|
|
1213
|
-
respondJson(res, 400, { error: 'Missing
|
|
1213
|
+
respondJson(res, 400, { error: 'Missing main dialog id' });
|
|
1214
1214
|
return true;
|
|
1215
1215
|
}
|
|
1216
1216
|
const rawSelf = parts[4];
|
|
@@ -1226,7 +1226,7 @@ async function handleApiRoute(req, res, pathname, context) {
|
|
|
1226
1226
|
}
|
|
1227
1227
|
return await handleDeleteDialog(res, { rootId, selfId, fromStatus: fromStatusRaw }, context);
|
|
1228
1228
|
}
|
|
1229
|
-
// Get full hierarchy for a single
|
|
1229
|
+
// Get full hierarchy for a single main dialog
|
|
1230
1230
|
if (pathname.startsWith('/api/dialogs/') &&
|
|
1231
1231
|
pathname.endsWith('/hierarchy') &&
|
|
1232
1232
|
req.method === 'GET') {
|
|
@@ -1241,7 +1241,7 @@ async function handleApiRoute(req, res, pathname, context) {
|
|
|
1241
1241
|
const status = parsedStatus.kind === 'missing' ? 'running' : parsedStatus.status;
|
|
1242
1242
|
return await handleGetDialogHierarchy(res, rootId, status);
|
|
1243
1243
|
}
|
|
1244
|
-
// Get one
|
|
1244
|
+
// Get one sideDialog node specifically for dialog-list backfill
|
|
1245
1245
|
if (pathname.startsWith('/api/dialogs/') &&
|
|
1246
1246
|
pathname.endsWith('/list-node') &&
|
|
1247
1247
|
req.method === 'GET') {
|
|
@@ -1256,9 +1256,9 @@ async function handleApiRoute(req, res, pathname, context) {
|
|
|
1256
1256
|
respondJson(res, 400, { success: false, error: 'Invalid dialog id path encoding' });
|
|
1257
1257
|
return true;
|
|
1258
1258
|
}
|
|
1259
|
-
const
|
|
1259
|
+
const sideDialogsSeg = parts[4];
|
|
1260
1260
|
const listNodeSeg = parts[6];
|
|
1261
|
-
if (!rootId ||
|
|
1261
|
+
if (!rootId || sideDialogsSeg !== 'sideDialogs' || !selfId || listNodeSeg !== 'list-node') {
|
|
1262
1262
|
respondJson(res, 404, { success: false, error: 'Not Found' });
|
|
1263
1263
|
return true;
|
|
1264
1264
|
}
|
|
@@ -1269,7 +1269,7 @@ async function handleApiRoute(req, res, pathname, context) {
|
|
|
1269
1269
|
return true;
|
|
1270
1270
|
}
|
|
1271
1271
|
const status = parsedStatus.kind === 'missing' ? 'running' : parsedStatus.status;
|
|
1272
|
-
return await
|
|
1272
|
+
return await handleGetDialogListSideDialogNode(res, { rootId, selfId, status });
|
|
1273
1273
|
}
|
|
1274
1274
|
// Serve persisted dialog artifacts (binary)
|
|
1275
1275
|
if (pathname.startsWith('/api/dialogs/') &&
|
|
@@ -1280,7 +1280,7 @@ async function handleApiRoute(req, res, pathname, context) {
|
|
|
1280
1280
|
const rawMaybeSelf = parts[4];
|
|
1281
1281
|
const rawTail = parts[5];
|
|
1282
1282
|
if (!rawRoot) {
|
|
1283
|
-
respondJson(res, 400, { error: 'Missing
|
|
1283
|
+
respondJson(res, 400, { error: 'Missing main dialog id' });
|
|
1284
1284
|
return true;
|
|
1285
1285
|
}
|
|
1286
1286
|
const rootId = rawRoot.replace(/%2F/g, '/');
|
|
@@ -2104,38 +2104,38 @@ async function handleGetTeamConfig(res) {
|
|
|
2104
2104
|
}
|
|
2105
2105
|
}
|
|
2106
2106
|
/**
|
|
2107
|
-
* Get dialog list - returns
|
|
2107
|
+
* Get dialog list - returns main dialogs with sideDialogCount
|
|
2108
2108
|
*/
|
|
2109
2109
|
async function handleGetDialogs(res, status) {
|
|
2110
2110
|
try {
|
|
2111
|
-
const
|
|
2111
|
+
const mainDialogs = [];
|
|
2112
2112
|
const allDialogIds = await persistence_1.DialogPersistence.listAllDialogIds(status);
|
|
2113
|
-
const
|
|
2113
|
+
const sideDialogCountByRootId = new Map();
|
|
2114
2114
|
for (const dialogId of allDialogIds) {
|
|
2115
2115
|
if (dialogId.selfId === dialogId.rootId)
|
|
2116
2116
|
continue;
|
|
2117
|
-
|
|
2117
|
+
sideDialogCountByRootId.set(dialogId.rootId, (sideDialogCountByRootId.get(dialogId.rootId) ?? 0) + 1);
|
|
2118
2118
|
}
|
|
2119
2119
|
const ids = await persistence_1.DialogPersistence.listDialogs(status);
|
|
2120
2120
|
for (const id of ids) {
|
|
2121
2121
|
const dialogId = new dialog_1.DialogID(id);
|
|
2122
|
-
const meta = await
|
|
2122
|
+
const meta = await loadMainDialogMetadataForLookup(dialogId, status, 'handleListDialogs');
|
|
2123
2123
|
if (!meta)
|
|
2124
2124
|
continue;
|
|
2125
2125
|
// listDialogs() only yields candidate IDs. Metadata/latest stay lazy so one malformed dialog
|
|
2126
2126
|
// can quarantine itself here without taking down the whole list response.
|
|
2127
2127
|
const latest = await loadDialogLatestForLookup(dialogId, status, 'handleListDialogs');
|
|
2128
|
-
const rootPath = persistence_1.DialogPersistence.
|
|
2128
|
+
const rootPath = persistence_1.DialogPersistence.getMainDialogPath(dialogId, status);
|
|
2129
2129
|
const rootStillExists = await pathStillExistsForLookup(rootPath);
|
|
2130
2130
|
if (!rootStillExists) {
|
|
2131
2131
|
continue;
|
|
2132
2132
|
}
|
|
2133
2133
|
const waitingForFreshBootsReasoning = await detectWaitingForFreshBootsReasoning(dialogId, status);
|
|
2134
|
-
const
|
|
2134
|
+
const sideDialogCount = sideDialogCountByRootId.get(meta.id) ?? 0;
|
|
2135
2135
|
if (!(await pathStillExistsForLookup(rootPath))) {
|
|
2136
2136
|
continue;
|
|
2137
2137
|
}
|
|
2138
|
-
|
|
2138
|
+
mainDialogs.push({
|
|
2139
2139
|
rootId: meta.id,
|
|
2140
2140
|
agentId: meta.agentId,
|
|
2141
2141
|
taskDocPath: meta.taskDocPath,
|
|
@@ -2145,15 +2145,15 @@ async function handleGetDialogs(res, status) {
|
|
|
2145
2145
|
lastModified: latest?.lastModified || meta.createdAt,
|
|
2146
2146
|
displayState: latest?.displayState,
|
|
2147
2147
|
waitingForFreshBootsReasoning,
|
|
2148
|
-
|
|
2148
|
+
sideDialogCount,
|
|
2149
2149
|
});
|
|
2150
2150
|
}
|
|
2151
|
-
respondJson(res, 200, { success: true, dialogs:
|
|
2151
|
+
respondJson(res, 200, { success: true, dialogs: mainDialogs });
|
|
2152
2152
|
return true;
|
|
2153
2153
|
}
|
|
2154
2154
|
catch (error) {
|
|
2155
|
-
log.error('Error getting
|
|
2156
|
-
respondJson(res, 500, { success: false, error: 'Failed to get
|
|
2155
|
+
log.error('Error getting main dialogs:', error);
|
|
2156
|
+
respondJson(res, 500, { success: false, error: 'Failed to get main dialogs' });
|
|
2157
2157
|
return true;
|
|
2158
2158
|
}
|
|
2159
2159
|
}
|
|
@@ -2176,26 +2176,26 @@ async function handleGetRunControlCounts(res) {
|
|
|
2176
2176
|
}
|
|
2177
2177
|
}
|
|
2178
2178
|
/**
|
|
2179
|
-
* Get full hierarchy (
|
|
2179
|
+
* Get full hierarchy (main dialog + sideDialogs) for a single main dialog
|
|
2180
2180
|
*/
|
|
2181
2181
|
async function handleGetDialogHierarchy(res, rootId, status) {
|
|
2182
2182
|
try {
|
|
2183
|
-
const rootMeta = await
|
|
2183
|
+
const rootMeta = await loadMainDialogMetadataForLookup(new dialog_1.DialogID(rootId), status, 'handleGetDialogHierarchy:root');
|
|
2184
2184
|
if (!rootMeta) {
|
|
2185
2185
|
respondJson(res, 404, {
|
|
2186
2186
|
success: false,
|
|
2187
|
-
error: `
|
|
2187
|
+
error: `Main dialog ${rootId} not found in ${status}`,
|
|
2188
2188
|
});
|
|
2189
2189
|
return true;
|
|
2190
2190
|
}
|
|
2191
|
-
// Load latest.yaml for
|
|
2191
|
+
// Load latest.yaml for main dialog currentCourse and lastModified timestamp
|
|
2192
2192
|
const rootLatest = await loadDialogLatestForLookup(new dialog_1.DialogID(rootId), status, 'handleGetDialogHierarchy:root');
|
|
2193
|
-
const rootPath = persistence_1.DialogPersistence.
|
|
2193
|
+
const rootPath = persistence_1.DialogPersistence.getMainDialogPath(new dialog_1.DialogID(rootId), status);
|
|
2194
2194
|
const rootStillExists = await pathStillExistsForLookup(rootPath);
|
|
2195
2195
|
if (!rootStillExists) {
|
|
2196
2196
|
respondJson(res, 404, {
|
|
2197
2197
|
success: false,
|
|
2198
|
-
error: `
|
|
2198
|
+
error: `Main dialog ${rootId} was quarantined as malformed`,
|
|
2199
2199
|
});
|
|
2200
2200
|
return true;
|
|
2201
2201
|
}
|
|
@@ -2213,36 +2213,38 @@ async function handleGetDialogHierarchy(res, rootId, status) {
|
|
|
2213
2213
|
if (!(await pathStillExistsForLookup(rootPath))) {
|
|
2214
2214
|
respondJson(res, 404, {
|
|
2215
2215
|
success: false,
|
|
2216
|
-
error: `
|
|
2216
|
+
error: `Main dialog ${rootId} was quarantined as malformed`,
|
|
2217
2217
|
});
|
|
2218
2218
|
return true;
|
|
2219
2219
|
}
|
|
2220
|
-
let
|
|
2220
|
+
let sideDialogs = [];
|
|
2221
2221
|
const dialogIds = await persistence_1.DialogPersistence.listAllDialogIds(status);
|
|
2222
2222
|
for (const dialogId of dialogIds) {
|
|
2223
2223
|
if (dialogId.rootId !== rootId || dialogId.selfId === rootId) {
|
|
2224
2224
|
continue;
|
|
2225
2225
|
}
|
|
2226
|
-
const meta = await loadDialogMetadataForLookup(dialogId, status, 'handleGetDialogHierarchy:
|
|
2226
|
+
const meta = await loadDialogMetadataForLookup(dialogId, status, 'handleGetDialogHierarchy:sideDialog');
|
|
2227
2227
|
if (!meta) {
|
|
2228
2228
|
continue;
|
|
2229
2229
|
}
|
|
2230
|
-
const subLatest = await loadDialogLatestForLookup(dialogId, status, 'handleGetDialogHierarchy:
|
|
2230
|
+
const subLatest = await loadDialogLatestForLookup(dialogId, status, 'handleGetDialogHierarchy:sideDialog');
|
|
2231
2231
|
const waitingForFreshBootsReasoning = await detectWaitingForFreshBootsReasoning(dialogId, status);
|
|
2232
|
-
const
|
|
2233
|
-
if (!(await pathStillExistsForLookup(
|
|
2232
|
+
const sideDialogPath = persistence_1.DialogPersistence.getSideDialogPath(dialogId, status);
|
|
2233
|
+
if (!(await pathStillExistsForLookup(sideDialogPath))) {
|
|
2234
2234
|
continue;
|
|
2235
2235
|
}
|
|
2236
|
-
const
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2236
|
+
const assignmentFromAsker = await persistence_1.DialogPersistence.loadSideDialogAssignmentFromAsker(dialogId, status);
|
|
2237
|
+
const derivedAskerDialogId = assignmentFromAsker.askerDialogId.trim();
|
|
2238
|
+
if (!derivedAskerDialogId) {
|
|
2239
|
+
const error = new Error(`sideDialog hierarchy invariant violation: missing assignmentFromAsker.askerDialogId ` +
|
|
2240
|
+
`(rootId=${rootId}, selfId=${dialogId.selfId}, status=${status})`);
|
|
2241
|
+
log.error('sideDialog hierarchy invariant violation: missing assignmentFromAsker.askerDialogId', error, { rootId, selfId: dialogId.selfId, status });
|
|
2242
|
+
throw error;
|
|
2243
|
+
}
|
|
2244
|
+
sideDialogs.push({
|
|
2243
2245
|
selfId: meta.id,
|
|
2244
2246
|
rootId,
|
|
2245
|
-
|
|
2247
|
+
askerDialogId: derivedAskerDialogId,
|
|
2246
2248
|
agentId: meta.agentId,
|
|
2247
2249
|
taskDocPath: meta.taskDocPath,
|
|
2248
2250
|
status,
|
|
@@ -2251,15 +2253,15 @@ async function handleGetDialogHierarchy(res, rootId, status) {
|
|
|
2251
2253
|
lastModified: subLatest?.lastModified || meta.createdAt,
|
|
2252
2254
|
displayState: subLatest?.displayState,
|
|
2253
2255
|
sessionSlug: meta.sessionSlug,
|
|
2254
|
-
|
|
2256
|
+
assignmentFromAsker,
|
|
2255
2257
|
waitingForFreshBootsReasoning,
|
|
2256
2258
|
});
|
|
2257
2259
|
}
|
|
2258
2260
|
respondJson(res, 200, {
|
|
2259
2261
|
success: true,
|
|
2260
2262
|
hierarchy: {
|
|
2261
|
-
root: { ...rootInfo,
|
|
2262
|
-
|
|
2263
|
+
root: { ...rootInfo, sideDialogCount: sideDialogs.length },
|
|
2264
|
+
sideDialogs,
|
|
2263
2265
|
},
|
|
2264
2266
|
});
|
|
2265
2267
|
return true;
|
|
@@ -2271,51 +2273,53 @@ async function handleGetDialogHierarchy(res, rootId, status) {
|
|
|
2271
2273
|
}
|
|
2272
2274
|
}
|
|
2273
2275
|
/**
|
|
2274
|
-
* Get one
|
|
2276
|
+
* Get one sideDialog node for dialog-list backfill without reloading the whole hierarchy.
|
|
2275
2277
|
*/
|
|
2276
|
-
async function
|
|
2278
|
+
async function handleGetDialogListSideDialogNode(res, dialog) {
|
|
2277
2279
|
try {
|
|
2278
2280
|
const status = dialog.status;
|
|
2279
2281
|
if (dialog.selfId === dialog.rootId) {
|
|
2280
2282
|
respondJson(res, 400, {
|
|
2281
2283
|
success: false,
|
|
2282
|
-
error: 'Dialog-list
|
|
2284
|
+
error: 'Dialog-list sideDialog node requires a sideDialog selfId',
|
|
2283
2285
|
});
|
|
2284
2286
|
return true;
|
|
2285
2287
|
}
|
|
2286
2288
|
const dialogId = new dialog_1.DialogID(dialog.selfId, dialog.rootId);
|
|
2287
|
-
const metadata = await loadDialogMetadataForLookup(dialogId, status, '
|
|
2289
|
+
const metadata = await loadDialogMetadataForLookup(dialogId, status, 'handleGetDialogListSideDialogNode');
|
|
2288
2290
|
if (!metadata) {
|
|
2289
2291
|
respondJson(res, 404, { success: false, error: `Dialog not found in ${status}` });
|
|
2290
2292
|
return true;
|
|
2291
2293
|
}
|
|
2292
2294
|
if (metadata.id !== dialog.selfId) {
|
|
2293
|
-
throw new Error(`CRITICAL: dialog-list
|
|
2295
|
+
throw new Error(`CRITICAL: dialog-list sideDialog node metadata id mismatch. expected=${dialog.selfId} actual=${metadata.id} rootId=${dialog.rootId} status=${status}`);
|
|
2294
2296
|
}
|
|
2295
2297
|
if (metadata.id === dialog.rootId) {
|
|
2296
|
-
throw new Error(`CRITICAL: dialog-list
|
|
2298
|
+
throw new Error(`CRITICAL: dialog-list sideDialog node lookup resolved main dialog. rootId=${dialog.rootId} selfId=${dialog.selfId} status=${status}`);
|
|
2297
2299
|
}
|
|
2298
|
-
const latest = await loadDialogLatestForLookup(dialogId, status, '
|
|
2300
|
+
const latest = await loadDialogLatestForLookup(dialogId, status, 'handleGetDialogListSideDialogNode');
|
|
2299
2301
|
const waitingForFreshBootsReasoning = await detectWaitingForFreshBootsReasoning(dialogId, status);
|
|
2300
|
-
const
|
|
2301
|
-
const
|
|
2302
|
-
if (!(await pathStillExistsForLookup(
|
|
2302
|
+
const rootSideDialogCount = await persistence_1.DialogPersistence.countAllSideDialogsUnderRoot(new dialog_1.DialogID(dialog.rootId), status);
|
|
2303
|
+
const sideDialogPath = persistence_1.DialogPersistence.getSideDialogPath(dialogId, status);
|
|
2304
|
+
if (!(await pathStillExistsForLookup(sideDialogPath))) {
|
|
2303
2305
|
respondJson(res, 404, { success: false, error: `Dialog not found in ${status}` });
|
|
2304
2306
|
return true;
|
|
2305
2307
|
}
|
|
2306
|
-
const
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
2308
|
+
const assignmentFromAsker = await persistence_1.DialogPersistence.loadSideDialogAssignmentFromAsker(dialogId, status);
|
|
2309
|
+
const derivedAskerDialogId = assignmentFromAsker.askerDialogId.trim();
|
|
2310
|
+
if (!derivedAskerDialogId) {
|
|
2311
|
+
const error = new Error(`dialog-list sideDialog node invariant violation: missing assignmentFromAsker.askerDialogId ` +
|
|
2312
|
+
`(rootId=${dialog.rootId}, selfId=${dialog.selfId}, status=${status})`);
|
|
2313
|
+
log.error('dialog-list sideDialog node invariant violation: missing assignmentFromAsker.askerDialogId', error, { rootId: dialog.rootId, selfId: dialog.selfId, status });
|
|
2314
|
+
throw error;
|
|
2315
|
+
}
|
|
2312
2316
|
respondJson(res, 200, {
|
|
2313
2317
|
success: true,
|
|
2314
|
-
|
|
2318
|
+
sideDialogNode: {
|
|
2315
2319
|
selfId: metadata.id,
|
|
2316
2320
|
rootId: dialog.rootId,
|
|
2317
|
-
|
|
2318
|
-
|
|
2321
|
+
rootSideDialogCount,
|
|
2322
|
+
askerDialogId: derivedAskerDialogId,
|
|
2319
2323
|
agentId: metadata.agentId,
|
|
2320
2324
|
taskDocPath: metadata.taskDocPath,
|
|
2321
2325
|
status,
|
|
@@ -2324,17 +2328,17 @@ async function handleGetDialogListSubdialogNode(res, dialog) {
|
|
|
2324
2328
|
lastModified: latest?.lastModified ?? metadata.createdAt,
|
|
2325
2329
|
displayState: latest?.displayState,
|
|
2326
2330
|
sessionSlug: metadata.sessionSlug,
|
|
2327
|
-
|
|
2331
|
+
assignmentFromAsker,
|
|
2328
2332
|
waitingForFreshBootsReasoning,
|
|
2329
2333
|
},
|
|
2330
2334
|
});
|
|
2331
2335
|
return true;
|
|
2332
2336
|
}
|
|
2333
2337
|
catch (error) {
|
|
2334
|
-
log.error('Error getting dialog-list
|
|
2338
|
+
log.error('Error getting dialog-list sideDialog node:', error);
|
|
2335
2339
|
respondJson(res, 500, {
|
|
2336
2340
|
success: false,
|
|
2337
|
-
error: 'Failed to get dialog-list
|
|
2341
|
+
error: 'Failed to get dialog-list sideDialog node',
|
|
2338
2342
|
});
|
|
2339
2343
|
return true;
|
|
2340
2344
|
}
|
|
@@ -2368,8 +2372,8 @@ async function handleCreateDialog(req, res, context) {
|
|
|
2368
2372
|
// Create dialog UI based on context
|
|
2369
2373
|
// Always use DiskFileDialogStore for file-based persistence
|
|
2370
2374
|
const dialogUI = new persistence_1.DiskFileDialogStore(dialogId);
|
|
2371
|
-
// Create
|
|
2372
|
-
const dialog = new dialog_1.
|
|
2375
|
+
// Create MainDialog
|
|
2376
|
+
const dialog = new dialog_1.MainDialog(dialogUI, taskDocPath, dialogId, agentId);
|
|
2373
2377
|
dialog.setPersistenceStatus('running');
|
|
2374
2378
|
dialog_global_registry_1.globalDialogRegistry.register(dialog);
|
|
2375
2379
|
const team = await team_1.Team.load();
|
|
@@ -2383,7 +2387,7 @@ async function handleCreateDialog(req, res, context) {
|
|
|
2383
2387
|
agentId: agentId,
|
|
2384
2388
|
taskDocPath: taskDocPath,
|
|
2385
2389
|
createdAt: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
2386
|
-
priming: (0, priming_1.
|
|
2390
|
+
priming: (0, priming_1.buildMainDialogPrimingMetadata)(priming),
|
|
2387
2391
|
};
|
|
2388
2392
|
await persistence_1.DialogPersistence.saveDialogMetadata(new dialog_1.DialogID(dialogId.selfId), metadata);
|
|
2389
2393
|
// Initialize latest.yaml via the mutation API (write-back will flush).
|
|
@@ -2395,7 +2399,7 @@ async function handleCreateDialog(req, res, context) {
|
|
|
2395
2399
|
status: 'active',
|
|
2396
2400
|
messageCount: 0,
|
|
2397
2401
|
functionCallCount: 0,
|
|
2398
|
-
|
|
2402
|
+
sideDialogCount: 0,
|
|
2399
2403
|
displayState: { kind: 'idle_waiting_user' },
|
|
2400
2404
|
disableDiligencePush: defaultDisableDiligencePush,
|
|
2401
2405
|
diligencePushRemainingBudget: dialog.diligencePushRemainingBudget,
|
|
@@ -2474,7 +2478,7 @@ async function handleForkDialog(req, res, context, rootIdRaw) {
|
|
|
2474
2478
|
respondJson(res, 400, payload);
|
|
2475
2479
|
return true;
|
|
2476
2480
|
}
|
|
2477
|
-
const result = await (0, dialog_fork_1.
|
|
2481
|
+
const result = await (0, dialog_fork_1.forkMainDialogTreeAtGeneration)({
|
|
2478
2482
|
sourceRootId: rootId,
|
|
2479
2483
|
sourceStatus: status,
|
|
2480
2484
|
course,
|
|
@@ -2548,11 +2552,11 @@ async function handleMoveDialogs(req, res, context) {
|
|
|
2548
2552
|
respondJson(res, 400, { success: false, error: 'rootId must be a non-empty string' });
|
|
2549
2553
|
return true;
|
|
2550
2554
|
}
|
|
2551
|
-
const meta = await
|
|
2555
|
+
const meta = await loadMainDialogMetadataForLookup(new dialog_1.DialogID(rootId), fromStatus, 'handleMoveDialogs:root');
|
|
2552
2556
|
if (!meta) {
|
|
2553
2557
|
respondJson(res, 404, {
|
|
2554
2558
|
success: false,
|
|
2555
|
-
error: `
|
|
2559
|
+
error: `Main dialog ${rootId} not found in ${fromStatus}`,
|
|
2556
2560
|
});
|
|
2557
2561
|
return true;
|
|
2558
2562
|
}
|
|
@@ -2585,7 +2589,7 @@ async function handleMoveDialogs(req, res, context) {
|
|
|
2585
2589
|
for (const id of ids) {
|
|
2586
2590
|
if (typeof id !== 'string' || id.trim() === '')
|
|
2587
2591
|
continue;
|
|
2588
|
-
const meta = await
|
|
2592
|
+
const meta = await loadMainDialogMetadataForLookup(new dialog_1.DialogID(id), fromStatus, 'handleMoveDialogs:task-scan');
|
|
2589
2593
|
if (!meta)
|
|
2590
2594
|
continue;
|
|
2591
2595
|
if (meta.taskDocPath !== taskDocPath)
|
|
@@ -2675,7 +2679,7 @@ async function handleDeleteDialog(res, dialog, context) {
|
|
|
2675
2679
|
try {
|
|
2676
2680
|
const { rootId, selfId, fromStatus } = dialog;
|
|
2677
2681
|
if (typeof rootId !== 'string' || rootId.trim() === '') {
|
|
2678
|
-
respondJson(res, 400, { error: 'Invalid
|
|
2682
|
+
respondJson(res, 400, { error: 'Invalid main dialog id' });
|
|
2679
2683
|
return true;
|
|
2680
2684
|
}
|
|
2681
2685
|
if (typeof selfId !== 'string' || selfId.trim() === '') {
|
|
@@ -2684,11 +2688,11 @@ async function handleDeleteDialog(res, dialog, context) {
|
|
|
2684
2688
|
}
|
|
2685
2689
|
if (selfId !== rootId) {
|
|
2686
2690
|
respondJson(res, 400, {
|
|
2687
|
-
error: 'Only
|
|
2691
|
+
error: 'Only main dialog deletion is supported (use /api/dialogs/:root)',
|
|
2688
2692
|
});
|
|
2689
2693
|
return true;
|
|
2690
2694
|
}
|
|
2691
|
-
const deleted = await persistence_1.DialogPersistence.
|
|
2695
|
+
const deleted = await persistence_1.DialogPersistence.deleteMainDialog(new dialog_1.DialogID(rootId), fromStatus);
|
|
2692
2696
|
if (!deleted) {
|
|
2693
2697
|
respondJson(res, 404, { error: `Dialog not found in ${fromStatus}` });
|
|
2694
2698
|
return true;
|
|
@@ -39,7 +39,7 @@ Available API endpoints:
|
|
|
39
39
|
• GET /api/team/config - Team configuration
|
|
40
40
|
• GET /api/dialogs - List all dialogs
|
|
41
41
|
• POST /api/dialogs - Create new dialog
|
|
42
|
-
• GET /api/dialogs/:root/
|
|
42
|
+
• GET /api/dialogs/:root/sideDialogs/:self/list-node - Get one dialog-list sideDialog node
|
|
43
43
|
• GET /api/dialogs/:root/hierarchy - Get dialog hierarchy
|
|
44
44
|
• GET /api/task-documents - Taskdoc listing
|
|
45
45
|
|