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
|
@@ -0,0 +1,591 @@
|
|
|
1
|
+
# Tellask 回复续驱与上下文重构草案
|
|
2
|
+
|
|
3
|
+
> 状态:Draft / 讨论记录
|
|
4
|
+
> 日期:2026-04-21
|
|
5
|
+
> 语义基准:中文为准;英文文档待方案稳定后再补。
|
|
6
|
+
|
|
7
|
+
## 1. 背景
|
|
8
|
+
|
|
9
|
+
当前 `tellask*` / `replyTellask*` 机制已经能完成跨对话诉请、支线回贴、pending sideDialog 恢复等主流程,但在“多诉请并发 + 延迟回复 + course 切换”的场景里,现有模型暴露出两个核心问题:
|
|
10
|
+
|
|
11
|
+
1. **revive 粒度过粗**:owner dialog 只要仍有任意 pending sideDialog,就整体不继续;这会让不同生成轮次发出的诉请互相阻塞。
|
|
12
|
+
2. **原位补真实结果割裂现实时间线**:延迟回复到达后,系统把真实结果补回原 tool call 位置,导致 LLM 上下文看起来像“当时已经看到回复”。这和真实运行时序相反,也会让后续判断变得难以解释。
|
|
13
|
+
|
|
14
|
+
本重构的目标不是做局部补丁,而是重新梳理三条必须同时成立的语义:
|
|
15
|
+
|
|
16
|
+
- provider tool-call adjacency 必须稳定;
|
|
17
|
+
- LLM 只能基于当时实际可见的回复继续判断;
|
|
18
|
+
- UI 展示、持久化、恢复、carryover 语义必须一致。
|
|
19
|
+
|
|
20
|
+
### 1.1 数据兼容前提
|
|
21
|
+
|
|
22
|
+
本重构不背历史数据包袱:旧 `.dialogs/` 可清空 / 丢弃,不要求历史对话 persistence 继续可读。
|
|
23
|
+
|
|
24
|
+
因此实现不做旧 pending record 迁移、不做兼容投影、不做 silent fallback。新的存储 contract 可以直接提升为 invariant;读到缺字段或 malformed persistence 时应 loud fail / quarantine,而不是运行时猜测归组。
|
|
25
|
+
|
|
26
|
+
上下文窗口规则也保持简单:
|
|
27
|
+
|
|
28
|
+
- 最新 course 全量进入 LLM context;
|
|
29
|
+
- 历史 course 永不进入 LLM context;
|
|
30
|
+
- Dominds 不做同 course 内 context window 裁剪。
|
|
31
|
+
|
|
32
|
+
因此不存在“同 course 内 pointer 目标被裁剪后需要可见性修复”的语义分支。carryover 只处理跨 course:当原 call 所在 course 已不是 latest course,latest course 必须注入自包含回贴事实。
|
|
33
|
+
|
|
34
|
+
## 2. 现有术语与文案基线
|
|
35
|
+
|
|
36
|
+
不要新增“异步回复”之类独立技术标签。跨对话正文和 UI 气泡文案应继续对齐当前 runtime marker 与 tellask 系函数名。
|
|
37
|
+
|
|
38
|
+
现有标签基线:
|
|
39
|
+
|
|
40
|
+
- `tellaskBack` / `replyTellaskBack`
|
|
41
|
+
- 中文标签:`【回问诉请】`
|
|
42
|
+
- 英文标签:`【TellaskBack】`
|
|
43
|
+
- `tellask` / `replyTellask`
|
|
44
|
+
- 中文语义名:`长线诉请`
|
|
45
|
+
- 英文语义名:`Tellask Session`
|
|
46
|
+
- `tellaskSessionless` / `replyTellaskSessionless`
|
|
47
|
+
- 中文语义名:`一次性诉请`
|
|
48
|
+
- 英文语义名:`Fresh Tellask`
|
|
49
|
+
- 常规支线完成回贴
|
|
50
|
+
- 中文 runtime marker:`【最终完成】`
|
|
51
|
+
- 英文 runtime marker:`【Completed】`
|
|
52
|
+
- `freshBootsReasoning`
|
|
53
|
+
- 中文标签:`扪心自问(FBR)`
|
|
54
|
+
- FBR 回贴 marker:`【FBR-直接回复】` / `【FBR-仅推理】`
|
|
55
|
+
|
|
56
|
+
设计约束:
|
|
57
|
+
|
|
58
|
+
- 标签必须来自 `tellask*` / `replyTellask*` 的真实函数语义或现有 runtime marker。
|
|
59
|
+
- role=user 的系统注入消息应沿用现有风格:明确说明“这不是新的用户请求 / 不是当前程新发起的函数调用 / 是运行时维护的跨对话事实”。
|
|
60
|
+
- UI tellask 回复气泡和 LLM 上下文正文应尽量使用同一 canonical transfer payload,避免 UI 一套、模型一套。
|
|
61
|
+
|
|
62
|
+
## 3. 已达成的设计判断
|
|
63
|
+
|
|
64
|
+
### 3.1 wait-group 作用域
|
|
65
|
+
|
|
66
|
+
同一个 owner dialog 内,`callSiteCourse + callSiteGenseq` 足以作为 wait-group key。
|
|
67
|
+
|
|
68
|
+
原因:
|
|
69
|
+
|
|
70
|
+
- pending sideDialogs 的读取与变更本身就是 owner-dialog scoped;
|
|
71
|
+
- `genseq` 需要配合 `course` 使用,单独 `genseq` 不足以跨 course 唯一;
|
|
72
|
+
- `ownerDialogId` 不需要进入业务 key,但必须出现在日志、drive entitlement、错误信息和诊断结构里。
|
|
73
|
+
|
|
74
|
+
概念模型:
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
type TellaskWaitGroupKey = {
|
|
78
|
+
callSiteCourse: number;
|
|
79
|
+
callSiteGenseq: number;
|
|
80
|
+
};
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
诊断模型可以扩展为:
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
type TellaskWaitGroupRef = TellaskWaitGroupKey & {
|
|
87
|
+
ownerDialogId: string;
|
|
88
|
+
};
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 3.2 revive 规则
|
|
92
|
+
|
|
93
|
+
同一 `callSiteCourse + callSiteGenseq` 发出的 tellask 诉请组成一个 wait-group。
|
|
94
|
+
|
|
95
|
+
规则:
|
|
96
|
+
|
|
97
|
+
1. 同组 pending 全部完成后,owner dialog 才因该组回复而 revive。
|
|
98
|
+
2. 不同 wait-group 之间不互相等待。
|
|
99
|
+
3. 一个较晚或较早 genseq 的 sideDialog 回复到达时,只检查它自己的 wait-group;如果该组已齐,就可以触发 owner 继续。
|
|
100
|
+
4. Q4H 仍然是独立硬阻塞;存在 pending Q4H 时不得自动 revive。
|
|
101
|
+
5. revive 前必须 fresh read persistence,不能只信内存里的 pending 状态。
|
|
102
|
+
|
|
103
|
+
### 3.3 LLM 可理解指针
|
|
104
|
+
|
|
105
|
+
LLM 不能理解 `course X / genseq Y` 这种内部坐标,也无法据此定位历史上下文。因此,任何给 LLM 的 pointer 都必须是文本上可追踪的锚点。
|
|
106
|
+
|
|
107
|
+
内部坐标只用于:
|
|
108
|
+
|
|
109
|
+
- wait-group 分组;
|
|
110
|
+
- deep link;
|
|
111
|
+
- UI 定位;
|
|
112
|
+
- 排序;
|
|
113
|
+
- crash recovery;
|
|
114
|
+
- 结构化日志与诊断。
|
|
115
|
+
|
|
116
|
+
LLM 可见文本必须使用:
|
|
117
|
+
|
|
118
|
+
- `callId`;
|
|
119
|
+
- tellask 函数名;
|
|
120
|
+
- 现有语义标签;
|
|
121
|
+
- 原诉请摘要;
|
|
122
|
+
- 当前 latest course 中实际存在的回贴块。
|
|
123
|
+
|
|
124
|
+
### 3.4 原 call 位置不再补真实回复
|
|
125
|
+
|
|
126
|
+
原 call 位置不应补入真实回复正文。真实回复必须按实际到达时间进入 owner dialog 当前时间线。
|
|
127
|
+
|
|
128
|
+
原 call 位置只负责 provider adjacency 与 forward pointer:
|
|
129
|
+
|
|
130
|
+
- pending 未完成时:提供“该诉请仍在等待回贴”的 tool-result-shaped 占位文案;
|
|
131
|
+
- 回复已到达时:提供“本次 `tellask*` 回贴已在后续上下文以同一 `callId` 标记出现”的 pointer 文案;
|
|
132
|
+
- pointer 不应携带完整回复正文;
|
|
133
|
+
- pointer 不能只指向 UI deep link,必须指向 LLM 当前 latest course 中真实存在或由跨 course carryover 注入的回贴块。
|
|
134
|
+
|
|
135
|
+
### 3.5 真实回复按到达顺序追加
|
|
136
|
+
|
|
137
|
+
sideDialog 回复到达 owner dialog 时,应追加一块“回贴事实”到 owner dialog 当前时间线,而不是改写历史 call site。
|
|
138
|
+
|
|
139
|
+
这块事实正文应与现有 UI tellask 回复气泡尽量对齐,例如延续当前模式:
|
|
140
|
+
|
|
141
|
+
- `@<tellaskee> 已回复:`
|
|
142
|
+
- 引用回复正文;
|
|
143
|
+
- `针对原始诉请: @target ...`
|
|
144
|
+
- 引用原诉请正文;
|
|
145
|
+
- 必要时带 `【最终完成】` / `【回问诉请】` / `【FBR-...】` marker。
|
|
146
|
+
|
|
147
|
+
避免使用“异步回复”作为标题。建议标题或首行来自真实函数语义,例如:
|
|
148
|
+
|
|
149
|
+
- `【最终完成】`
|
|
150
|
+
- `【回问诉请】`
|
|
151
|
+
- `【FBR-仅推理】`
|
|
152
|
+
- `tellask(...) 回贴`
|
|
153
|
+
- `tellaskSessionless(...) 回贴`
|
|
154
|
+
- `tellaskBack(...) 回贴`
|
|
155
|
+
|
|
156
|
+
具体最终文案应从 `inter-dialog-format.ts` 的现有 formatter 扩展,不应另起一套。
|
|
157
|
+
|
|
158
|
+
### 3.6 carryover 必须自包含
|
|
159
|
+
|
|
160
|
+
只有最后一个 course 会进入 LLM 上下文。历史 course 完全不可见。
|
|
161
|
+
|
|
162
|
+
因此,如果原 call 所在 course 已不是当前 latest course,当前 latest course 必须写入自包含 carryover 回贴事实,包含:
|
|
163
|
+
|
|
164
|
+
- 对应的 `callId`;
|
|
165
|
+
- tellask 函数名与语义标签;
|
|
166
|
+
- 原诉请正文或足够完整的原诉请摘要;
|
|
167
|
+
- 回复者;
|
|
168
|
+
- 回复正文;
|
|
169
|
+
- 状态;
|
|
170
|
+
- session 信息(如有)。
|
|
171
|
+
|
|
172
|
+
不能只写:
|
|
173
|
+
|
|
174
|
+
> 具体见 course X / genseq Y。
|
|
175
|
+
|
|
176
|
+
这种文本只对系统和 UI 有意义,对 LLM 无法操作。
|
|
177
|
+
|
|
178
|
+
## 4. 建议的新语义模型
|
|
179
|
+
|
|
180
|
+
### 4.1 三类 LLM 可见文本
|
|
181
|
+
|
|
182
|
+
#### 4.1.1 Call-site pending result
|
|
183
|
+
|
|
184
|
+
位置:原 tool call 附近。
|
|
185
|
+
|
|
186
|
+
用途:
|
|
187
|
+
|
|
188
|
+
- 满足 provider tool-call adjacency;
|
|
189
|
+
- 告诉模型该诉请已经发出,但此刻还没回贴;
|
|
190
|
+
- 不制造“回复已知”的假象。
|
|
191
|
+
|
|
192
|
+
中文文案方向:
|
|
193
|
+
|
|
194
|
+
```text
|
|
195
|
+
[Dominds 诉请状态]
|
|
196
|
+
|
|
197
|
+
`tellaskSessionless` 诉请已发出,当前仍在等待回贴。
|
|
198
|
+
|
|
199
|
+
- callId: <callId>
|
|
200
|
+
- 对象: @<target>
|
|
201
|
+
|
|
202
|
+
这不是回贴内容。若后续收到回贴,运行时会在后续上下文中用同一 callId 补入对应回贴事实。
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
英文文案方向待后续稳定后补。
|
|
206
|
+
|
|
207
|
+
#### 4.1.2 Call-site forward pointer result
|
|
208
|
+
|
|
209
|
+
位置:原 tool call 附近。
|
|
210
|
+
|
|
211
|
+
用途:
|
|
212
|
+
|
|
213
|
+
- 满足 provider tool-call adjacency;
|
|
214
|
+
- 在 latest course 上下文重建时,让模型知道真实回贴在后文;
|
|
215
|
+
- 仍然不把真实回复补回过去。
|
|
216
|
+
|
|
217
|
+
中文文案方向:
|
|
218
|
+
|
|
219
|
+
```text
|
|
220
|
+
[Dominds 诉请状态]
|
|
221
|
+
|
|
222
|
+
`tellaskSessionless` 诉请的回贴已在后续上下文中补入。
|
|
223
|
+
|
|
224
|
+
- callId: <callId>
|
|
225
|
+
- 后续回贴标签: `tellaskSessionless` 回贴 / `【最终完成】`
|
|
226
|
+
|
|
227
|
+
请以后续同一 callId 的回贴事实为准;不要把本工具结果当作回贴正文。
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
注意:
|
|
231
|
+
|
|
232
|
+
- pointer 的目标必须是文本锚点,不是只有系统坐标。
|
|
233
|
+
- 当后续回贴事实不在当前 latest course 时,必须通过跨 course carryover fact 重新注入可读内容。
|
|
234
|
+
|
|
235
|
+
#### 4.1.3 Arrival / carryover fact
|
|
236
|
+
|
|
237
|
+
位置:回复实际到达 owner dialog 的时间线位置;跨 course 时在当前 latest course 注入。
|
|
238
|
+
|
|
239
|
+
用途:
|
|
240
|
+
|
|
241
|
+
- 这是 LLM 真正可用的业务事实;
|
|
242
|
+
- UI tellask 回复气泡和模型上下文应尽量复用同一内容;
|
|
243
|
+
- 它按实际到达顺序出现。
|
|
244
|
+
|
|
245
|
+
中文文案方向应扩展当前 formatter 风格:
|
|
246
|
+
|
|
247
|
+
```text
|
|
248
|
+
【最终完成】
|
|
249
|
+
|
|
250
|
+
@<tellaskee> 已回复:
|
|
251
|
+
|
|
252
|
+
> <responseBody>
|
|
253
|
+
|
|
254
|
+
针对原始诉请: @<target> • <sessionSlug?>
|
|
255
|
+
|
|
256
|
+
> <tellaskContent>
|
|
257
|
+
|
|
258
|
+
[Dominds 诉请状态]
|
|
259
|
+
- 函数: `tellaskSessionless`
|
|
260
|
+
- callId: <callId>
|
|
261
|
+
- 说明: 这是前序诉请的回贴事实,不是新的用户请求,也不是当前程新发起的函数调用。
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
`[Dominds 诉请状态]` 作为 arrival / carryover fact 的轻量尾注。业务语义先行,状态尾注只负责提供 LLM 可追踪锚点与 provenance。`callId` 必须显式出现在正文里,不能只保留在结构化 record / UI 元数据中。
|
|
265
|
+
|
|
266
|
+
## 5. 数据与事件设计倾向
|
|
267
|
+
|
|
268
|
+
### 5.1 PendingSideDialogStateRecord
|
|
269
|
+
|
|
270
|
+
`callSiteCourse` 与 `callSiteGenseq` 应从 optional 提升为必填 invariant。
|
|
271
|
+
|
|
272
|
+
理由:
|
|
273
|
+
|
|
274
|
+
- wait-group 语义依赖它们;
|
|
275
|
+
- 缺失时无法安全判断是否同组齐活;
|
|
276
|
+
- 静默归入 unknown group 会制造提前 revive 或永不 revive;
|
|
277
|
+
- 本重构不兼容旧 `.dialogs/` 数据,因此无需迁移 optional 字段。
|
|
278
|
+
|
|
279
|
+
实现要求:
|
|
280
|
+
|
|
281
|
+
- 创建 pending record 时 `callSiteCourse` / `callSiteGenseq` 不允许为 `undefined`;
|
|
282
|
+
- 如果当前没有 active course / active genseq 却要创建 pending sideDialog,直接抛 invariant error;
|
|
283
|
+
- validator 要求二者必填且为正整数;
|
|
284
|
+
- 读到缺字段或 malformed persistence 时 loud fail / quarantine,不做 runtime fallback。
|
|
285
|
+
|
|
286
|
+
### 5.2 Reply arrival record
|
|
287
|
+
|
|
288
|
+
建议引入显式 record 来表达“回复按实际到达时间进入 owner dialog 历史”。
|
|
289
|
+
|
|
290
|
+
概念字段:
|
|
291
|
+
|
|
292
|
+
```ts
|
|
293
|
+
type TellaskReplyArrivalRecord = {
|
|
294
|
+
type: 'tellask_reply_arrival_record';
|
|
295
|
+
callId: string;
|
|
296
|
+
callName: 'tellask' | 'tellaskSessionless' | 'tellaskBack' | 'freshBootsReasoning';
|
|
297
|
+
status: 'completed' | 'failed';
|
|
298
|
+
callSiteCourse: number;
|
|
299
|
+
callSiteGenseq: number;
|
|
300
|
+
ownerArrivalCourse: number;
|
|
301
|
+
ownerArrivalGenseq: number;
|
|
302
|
+
tellaskeeId: string;
|
|
303
|
+
tellaskeeAgentId?: string;
|
|
304
|
+
tellaskeeDialogId?: string;
|
|
305
|
+
tellaskeeCourse?: number;
|
|
306
|
+
tellaskeeGenseq?: number;
|
|
307
|
+
mentionList?: string[];
|
|
308
|
+
sessionSlug?: string;
|
|
309
|
+
tellaskContent: string;
|
|
310
|
+
responseBody: string;
|
|
311
|
+
};
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
说明:
|
|
315
|
+
|
|
316
|
+
- `ownerArrivalGenseq` 描述 owner dialog 何时实际看见这条回贴;
|
|
317
|
+
- `tellaskeeGenseq` 描述 sideDialog 在哪里产出回复;
|
|
318
|
+
- 两者不能混用。
|
|
319
|
+
|
|
320
|
+
### 5.3 Tool-result projection
|
|
321
|
+
|
|
322
|
+
现有 “把真实 tellask_result 补回原 call 位置” 的 provider context 投影需要重构为:
|
|
323
|
+
|
|
324
|
+
1. 原 call 附近始终投影 pending / pointer result;
|
|
325
|
+
2. 真实回复作为 arrival / carryover fact 正常进入上下文;
|
|
326
|
+
3. 如果 arrival fact 不在当前 latest course,必须注入自包含 carryover fact;
|
|
327
|
+
4. 不允许通过历史坐标要求 LLM 自行找回不可见内容。
|
|
328
|
+
|
|
329
|
+
## 6. Revive gate 设计
|
|
330
|
+
|
|
331
|
+
### 6.1 Response supply 阶段
|
|
332
|
+
|
|
333
|
+
收到某个 sideDialog 回复时:
|
|
334
|
+
|
|
335
|
+
1. 加 owner scoped sideDialog txn lock。
|
|
336
|
+
2. 读取 pending sideDialogs。
|
|
337
|
+
3. 找到并移除当前 `sideDialogId` 对应 pending record。
|
|
338
|
+
4. 从该 record 读取 `callSiteCourse + callSiteGenseq`。
|
|
339
|
+
5. 保存新的 pending 状态。
|
|
340
|
+
6. 追加 arrival / carryover fact。
|
|
341
|
+
7. fresh 检查:
|
|
342
|
+
- 是否仍有 Q4H;
|
|
343
|
+
- 是否仍有同 `callSiteCourse + callSiteGenseq` 的 pending。
|
|
344
|
+
8. 若 Q4H 为空且同组 pending 清空,则 schedule revive。
|
|
345
|
+
|
|
346
|
+
### 6.2 Drive entitlement
|
|
347
|
+
|
|
348
|
+
schedule revive 时必须携带 wait-group entitlement:
|
|
349
|
+
|
|
350
|
+
```ts
|
|
351
|
+
type ResolvedTellaskWaitGroupEntitlement = {
|
|
352
|
+
ownerDialogId: string;
|
|
353
|
+
callSiteCourse: number;
|
|
354
|
+
callSiteGenseq: number;
|
|
355
|
+
resolvedCallIds: string[];
|
|
356
|
+
triggerCallId: string;
|
|
357
|
+
};
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
preflight 不应使用简单的 `allowPendingSideDialogs: true`。
|
|
361
|
+
|
|
362
|
+
它应该表达:
|
|
363
|
+
|
|
364
|
+
- 允许其它 wait-group 的 pending 继续存在;
|
|
365
|
+
- 不允许本 entitlement 指向的 wait-group 仍有 pending;
|
|
366
|
+
- Q4H 仍然不允许旁路。
|
|
367
|
+
|
|
368
|
+
### 6.3 Display state
|
|
369
|
+
|
|
370
|
+
auto-revive 能因为某个 wait-group 齐活而继续 drive,并不等于 owner dialog 已经没有 pending sideDialogs。
|
|
371
|
+
|
|
372
|
+
因此:
|
|
373
|
+
|
|
374
|
+
- drive 中途可以继续;
|
|
375
|
+
- 如果 LLM 停下而其它 wait-group 仍 pending,display state 应回到 `waiting_for_sideDialogs`;
|
|
376
|
+
- pending tellask reminder 仍应保留其它未完成 group;
|
|
377
|
+
- UI 不应把“这组已齐活”误显示成“所有支线已完成”。
|
|
378
|
+
|
|
379
|
+
## 7. Race 与一致性风险
|
|
380
|
+
|
|
381
|
+
### 7.1 同一轮多 tellask 的登记完成边界
|
|
382
|
+
|
|
383
|
+
当前执行多个 tellask call 时是顺序处理。若第一个 sideDialog 极快返回,而同一 genseq 的兄弟 pending 尚未全部登记,就可能误判该组已齐。
|
|
384
|
+
|
|
385
|
+
定案:拆成两阶段,先登记全部 pending,再启动任何 sideDialog drive。
|
|
386
|
+
|
|
387
|
+
规则:
|
|
388
|
+
|
|
389
|
+
1. 当前 assistant round 的所有 special calls 先 parse 完。
|
|
390
|
+
2. 对所有确认会产生 pending sideDialog 的 tellask / FBR call,先一次性登记 pending records。
|
|
391
|
+
3. pending records 全部落盘成功后,再启动 / 调度 sideDialog drive。
|
|
392
|
+
4. 如果登记阶段失败,整轮 loud fail,不能进入半登记半启动状态。
|
|
393
|
+
5. 回复到达时只看 `callSiteCourse + callSiteGenseq` 这一组是否清空。
|
|
394
|
+
|
|
395
|
+
不引入 wait-group sealed marker。sealed marker 只是为了兼容“边登记边启动”的中间态;两阶段登记直接消灭这个中间态,概念更少。
|
|
396
|
+
|
|
397
|
+
注意:不是所有 special call 都会 pending,例如参数错误、目标不存在、FBR disabled、Q4H。两阶段只覆盖“确认会创建 pending sideDialog”的 tellask / FBR 类调用。Q4H 仍是独立硬阻塞。
|
|
398
|
+
|
|
399
|
+
### 7.2 Type B registered Side Dialog update 与 replace pending
|
|
400
|
+
|
|
401
|
+
长线诉请同一 `agentId!sessionSlug` 被新 asker / 新 call 更新时,不能再把“注册支线被更新”粗暴理解为“替换槽位”。reply obligation 是栈,Type B registered Side Dialog update 分两类:
|
|
402
|
+
|
|
403
|
+
1. **普通新诉请 / 新 asker / 新 call**:把新 asker frame push 到栈顶。新诉请优先处理;回复后 pop,恢复更早的 asker frame。
|
|
404
|
+
2. **replace pending 特殊操作**:明确定位被替换的旧 pending / old frame,把旧 asker obligation 从栈中抽调,再把新 obligation push 到栈顶。
|
|
405
|
+
|
|
406
|
+
replace pending 不是 silent overwrite,也不是 failed-result fallback。它是显式栈操作:
|
|
407
|
+
|
|
408
|
+
- 定位旧 frame 的匹配键必须稳定,倾向使用 `askerDialogId + targetCallId` / `ownerDialogId + callId`,具体以 pending record 与 reply directive 对齐后的字段为准;
|
|
409
|
+
- 如果 replace 找不到旧 frame,必须 loud fail,不允许降级成普通 push;
|
|
410
|
+
- 因为持久文件采用 append/truncate-only JSONL,replace 的落盘算法是:
|
|
411
|
+
1. 读取 stack frames 与每行 byte offset;
|
|
412
|
+
2. 找到 old frame;
|
|
413
|
+
3. truncate 到 old frame 之前;
|
|
414
|
+
4. 将 old frame 之后仍有效的 frames 按原顺序重新 append;
|
|
415
|
+
5. append 新 frame 到栈顶;
|
|
416
|
+
6. pending records 与 asker stack 必须在同一业务事务边界内更新,失败 loud fail。
|
|
417
|
+
|
|
418
|
+
这样既保留“抽掉旧义务”的业务语义,也让持久层维持 append/truncate-only,不做 YAML 数组整体覆盖。
|
|
419
|
+
|
|
420
|
+
### 7.3 Reply tool 与 direct fallback
|
|
421
|
+
|
|
422
|
+
`replyTellask*` 是精确回贴路径;direct fallback 是过渡兼容路径。
|
|
423
|
+
|
|
424
|
+
重构后:
|
|
425
|
+
|
|
426
|
+
- arrival fact 应记录 delivery mode;
|
|
427
|
+
- direct fallback 文案仍需显式标注;
|
|
428
|
+
- 但 wait-group 与上下文时序不应因 delivery mode 不同而分叉。
|
|
429
|
+
|
|
430
|
+
### 7.4 Context window 规则
|
|
431
|
+
|
|
432
|
+
Dominds 不做同 course 内 context window 裁剪。上下文规则是:
|
|
433
|
+
|
|
434
|
+
- 最新 course 全量进入 LLM context;
|
|
435
|
+
- 历史 course 永不进入 LLM context。
|
|
436
|
+
|
|
437
|
+
因此 pointer 只会遇到两种情况:
|
|
438
|
+
|
|
439
|
+
- 原 call 与 arrival fact 都在 latest course:pointer 指向后续同 `callId` 的 arrival fact;
|
|
440
|
+
- 原 call 所在 course 已不是 latest course:latest course 注入自包含 carryover fact,pointer 指向该 carryover fact。
|
|
441
|
+
|
|
442
|
+
不定义“同 course 可见性修复”文案或 record。
|
|
443
|
+
|
|
444
|
+
### 7.5 `asker-stack.jsonl` 与 reply obligation stack
|
|
445
|
+
|
|
446
|
+
`tellaskReplyDirective` 不应作为 JSONL 对话历史里的“上一条 runtime prompt 附带信息”来恢复。它描述的是当前 dialog 仍未结清的回复义务,生命周期属于运行时对话状态,而且必须跨 course 存活。
|
|
447
|
+
|
|
448
|
+
定案:
|
|
449
|
+
|
|
450
|
+
- main / side dialog 统一使用 `asker-stack.jsonl`,不再拆分旧 `supdialog.yaml` 与旧 `reply-obligations.yaml`。
|
|
451
|
+
- `asker-stack.jsonl` 是单文件 JSONL stack:一行一个 `AskerDialogStackFrame`,落盘操作只允许 append / truncate。
|
|
452
|
+
- 不使用 YAML 数组字段表达 stack;字段数组会让“栈”退化成可整体覆盖的状态槽。
|
|
453
|
+
- 不采用 multi-doc YAML。JSONL 更适合 append/truncate、byte offset truncate、行级 quarantine 诊断,也更贴合 TS 结构化类型。
|
|
454
|
+
|
|
455
|
+
内容保持 mean & lean:
|
|
456
|
+
|
|
457
|
+
```jsonl
|
|
458
|
+
{"kind":"asker_dialog_stack_frame","askerDialogId":"<asking-dialog-id>","assignmentFromAsker":{"callName":"tellask","mentionList":["@agent"],"tellaskContent":"...","originMemberId":"...","askerDialogId":"<same-as-frame-askerDialogId>","callId":"...","collectiveTargets":["..."]},"tellaskReplyObligation":{"expectedReplyCallName":"replyTellask","targetDialogId":"<asking-dialog-id>","targetCallId":"...","tellaskContent":"..."}}
|
|
459
|
+
{"kind":"asker_dialog_stack_frame","askerDialogId":"<ask-back-asker-dialog-id>","tellaskReplyObligation":{"expectedReplyCallName":"replyTellaskBack","targetDialogId":"<ask-back-asker-dialog-id>","targetCallId":"...","tellaskContent":"..."}}
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
规则:
|
|
463
|
+
|
|
464
|
+
- `AskerDialogStackFrame.askerDialogId` 是当前 reply obligation 要回复的 asker dialog。
|
|
465
|
+
- `assignmentFromAsker` 只存在于 assignment frame;`replyTellaskBack` frame 可以只有 asker 与 reply obligation。
|
|
466
|
+
- `askerStack` 是运行时内存表示;持久化文件是 `asker-stack.jsonl`,不是 `{ askerStack: [...] }`。
|
|
467
|
+
- 栈顶 frame 决定当前 effective asker dialog;side dialog 的 `askerDialog` 必须按栈顶动态解析。
|
|
468
|
+
- 当前 assignment 取“从栈顶向下最近的 assignment frame”,这样 `replyTellaskBack` 临时 frame 不会破坏原 assignment 恢复。
|
|
469
|
+
- Type B registered Side Dialog 普通 update push 新 frame 到栈顶;新诉请先处理,回复后 pop,恢复更早的 asker frame。
|
|
470
|
+
- replace pending 走 7.2 的抽调旧 frame + append 新 frame,不走普通 push。
|
|
471
|
+
- `tellaskBack` 也是同一种 push:被回问的 tellasker dialog 把 `replyTellaskBack` obligation 压到自己的 asker stack 栈顶,回复后 pop。
|
|
472
|
+
- 成功 `replyTellask*` 或 direct fallback 结清栈顶 `targetCallId` 后 pop 栈;不再靠“清空单槽字段”表示已结清。
|
|
473
|
+
- LLM context 不再靠扫描历史 JSONL prompt 恢复 reply directive;最新 course 组装上下文时从回复栈顶读取 active obligation,并以 role=user 的运行时环境信息注入。
|
|
474
|
+
|
|
475
|
+
### 7.6 术语升级:root/sub/sup -> main/side/asker
|
|
476
|
+
|
|
477
|
+
本重构同步升级实现者语境术语,让实现者语境与使用者语境更一致,减少“上下级”误读。参考 `docs/dominds-terminology.md`:
|
|
478
|
+
|
|
479
|
+
- 旧 `RootDialog` -> `MainDialog`
|
|
480
|
+
- 旧 `SubDialog` / `Subdialog` -> `SideDialog`
|
|
481
|
+
- 旧 `rootDialog` 局部变量、方法名、类型名 -> `mainDialog`
|
|
482
|
+
- 旧 `subdialog` 局部变量、方法名、类型名、测试名 -> `sideDialog`
|
|
483
|
+
- 旧 `supdialog` / `supdialogId` -> `askerDialog` / `askerDialogId`
|
|
484
|
+
- 旧 `assignmentFromSup` -> `assignmentFromAsker`
|
|
485
|
+
- 旧 `supInfo` -> `askerStack`
|
|
486
|
+
- 旧 `SubdialogSupdialogStackFrame` -> `AskerDialogStackFrame`
|
|
487
|
+
- 旧 `quest_for_sup_record` -> `sideDialog_request_record`
|
|
488
|
+
- 旧 `supdialog.yaml` / `reply-obligations.yaml` -> `asker-stack.jsonl`
|
|
489
|
+
|
|
490
|
+
边界:
|
|
491
|
+
|
|
492
|
+
- `DialogID.rootId` 仍是结构性 storage anchor,可后续单独评估是否改成 `mainId`。本轮优先改 dialog 类名、reply obligation 语义名、运行时字段名、测试名与文档术语。
|
|
493
|
+
- wire/storage 事件名若仍带旧 `subdialog_*`,本轮应一并评估并尽量升级;如果某个外部协议字段暂不改,必须在最后汇报为明确遗留,而不是默默保留。
|
|
494
|
+
- 用户可见文案继续使用“主线对话 / 支线对话、诉请者 / 被诉请者”;不暴露 `askerDialog` 这类实现字段名。
|
|
495
|
+
|
|
496
|
+
### 7.7 术语升级补充:tellasker/tellaskee、asker、responder、caller 分层
|
|
497
|
+
|
|
498
|
+
上一轮扫尾中过度使用了通用 `requester / responder`,会稀释 Dominds Tellask 的专有语义,也会和 `Dialog Responder / 对话主理人` 发生碰撞。本重构后续统一采用以下分层:
|
|
499
|
+
|
|
500
|
+
1. **Tellask 语义层 / 面向模型与用户的协作说明**:
|
|
501
|
+
- EN: `tellasker` / `tellaskee`
|
|
502
|
+
- ZH: `诉请者` / `被诉请者`
|
|
503
|
+
- 含义:一次 Tellask 中发起诉请的一侧与承接诉请的一侧。
|
|
504
|
+
- 替换原则:tellask 关系里的 `requester / responder` 应升级为 `tellasker / tellaskee`;中文继续用 `诉请者 / 被诉请者`,不写成“诉请者对话 / 被诉请者对话”作为标准术语。
|
|
505
|
+
|
|
506
|
+
2. **Dialog execution role / 对话执行角色**:
|
|
507
|
+
- EN: `Dialog Responder`
|
|
508
|
+
- ZH: `对话主理人`
|
|
509
|
+
- 含义:负责推进某个 dialog 的 agent / role。
|
|
510
|
+
- 边界:这里的 `responder` 保留且是标准词;不得把它和 Tellask 的 `tellaskee` 合并。
|
|
511
|
+
|
|
512
|
+
3. **实现层关系字段 / 持久化与路由语义**:
|
|
513
|
+
- EN: `asker`
|
|
514
|
+
- ZH: 实现层可解释为“诉请方关系”,但代码优先使用英文。
|
|
515
|
+
- 标准项:`askerDialog`、`assignmentFromAsker`、`askerStack`、`AskerDialogStackFrame`。
|
|
516
|
+
- 替换原则:tellask / sideDialog 关系里的旧 `caller` 应升级为 `asker`;本轮已将 `callerDialogId` -> `askerDialogId`、`CallerCourseNumber` -> `AskerCourseNumber` 成组迁移。旧 `callee*` / `responder*` contract 字段应升级为 `tellaskee*`,但必须作为 wire/storage 成组迁移。
|
|
517
|
+
|
|
518
|
+
4. **通用代码调用方 / 非 Tellask 语义**:
|
|
519
|
+
- EN: `caller`
|
|
520
|
+
- 含义:函数调用者、tool caller、log caller location、普通 API 调用方。
|
|
521
|
+
- 边界:这类 `caller` 不参与 tellask 术语升级,不应机械改成 `asker`。
|
|
522
|
+
|
|
523
|
+
5. **Call-site anchor / 调用点锚点**:
|
|
524
|
+
- EN: `callSiteCourse` / `callSiteGenseq`、`CallSiteCourseNo` / `CallSiteGenseqNo`
|
|
525
|
+
- ZH: 表示某次 tool / askHuman / tellask 调用实际发生的 course / genseq,是 call-site provenance,不是“旧 caller 角色”。
|
|
526
|
+
- 边界:不升级成 `AskingCourseNumber`,避免和 `askerDialog` / tellasker 角色混淆;本轮标准名是 `CallSiteCourseNo` / `CallSiteGenseqNo`。
|
|
527
|
+
|
|
528
|
+
执行顺序:
|
|
529
|
+
|
|
530
|
+
- 先更新 `dominds-terminology.md`,把 `tellasker/tellaskee` 与 `Dialog Responder` 的边界定为标准术语;
|
|
531
|
+
- 再扫 docs / prompt / UI 文案:Tellask 关系用 `tellasker/tellaskee`,Dialog 主理角色保留 `Dialog Responder`;
|
|
532
|
+
- 实现层已把 Tellask relationship contract 里的 `caller` 成组改成 `asker`,保留普通编程调用方的 `caller`。
|
|
533
|
+
- `callerDialogId` / `callerCourse` 已作为 wire/storage 字段成组迁移为 `askerDialogId` / `askerCourse`;后续若还有其它 `caller*` contract 字段,也必须按同样方式成组处理并补测试。
|
|
534
|
+
|
|
535
|
+
## 8. 初步实施切分
|
|
536
|
+
|
|
537
|
+
### Phase 1:文档与术语收敛
|
|
538
|
+
|
|
539
|
+
- 明确 wait-group、arrival fact、pointer result、carryover fact 的语义。
|
|
540
|
+
- 确认最终中文文案。
|
|
541
|
+
- 固化 `asker-stack.jsonl`、`AskerDialogStackFrame`、replace pending 栈操作、`MainDialog` / `SideDialog` 术语升级细目。
|
|
542
|
+
- 再补英文文档与 formatter 文案。
|
|
543
|
+
|
|
544
|
+
### Phase 2:存储与 contract
|
|
545
|
+
|
|
546
|
+
- `PendingSideDialogStateRecord` 强化 `callSiteCourse/callSiteGenseq`。
|
|
547
|
+
- 新增统一 `asker-stack.jsonl`,root 与 side dialog 都用同一 stack 文件。
|
|
548
|
+
- `asker-stack.jsonl` 只允许 append/truncate;replace pending 通过 truncate + replay retained frames + append new frame 表达。
|
|
549
|
+
- 删除旧 `supdialog.yaml` / `reply-obligations.yaml` 分叉模型。
|
|
550
|
+
- 新增 reply arrival record / event。
|
|
551
|
+
- 新增 call-site pending / pointer formatter。
|
|
552
|
+
- priming、fork、replay、恢复路径按新 contract 同步;不兼容旧 `.dialogs/`。
|
|
553
|
+
|
|
554
|
+
### Phase 3:context projection
|
|
555
|
+
|
|
556
|
+
- 替换原位补真实 result 的逻辑。
|
|
557
|
+
- 原 call 位置投影 pending / pointer result。
|
|
558
|
+
- arrival / carryover fact 进入模型上下文。
|
|
559
|
+
|
|
560
|
+
### Phase 4:revive gate
|
|
561
|
+
|
|
562
|
+
- 同一 function round 的 pending sideDialogs 先两阶段登记,再启动 sideDialog drive。
|
|
563
|
+
- 引入 wait-group scoped revive entitlement。
|
|
564
|
+
- 修改 preflight suspension 判断。
|
|
565
|
+
- 确保 display state 与 reminder 不被误清。
|
|
566
|
+
|
|
567
|
+
### Phase 5:UI 与回归
|
|
568
|
+
|
|
569
|
+
- UI tellask 回复气泡对齐 canonical payload。
|
|
570
|
+
- 增加回归:
|
|
571
|
+
- 同 genseq 多 tellask 等齐才 revive;
|
|
572
|
+
- 不同 genseq 回复各自 revive;
|
|
573
|
+
- 跨 course carryover 自包含;
|
|
574
|
+
- `asker-stack.jsonl` 中 reply obligation stack 跨 course 存活并在结清后 pop;
|
|
575
|
+
- replace pending 从 stack 中抽调旧 frame,再把新 obligation 压栈顶;
|
|
576
|
+
- 原 call site 只出现 pointer,不出现真实回复正文;
|
|
577
|
+
- Type B registered update 压栈、先回复新诉请、再恢复旧诉请;
|
|
578
|
+
- 重启恢复后 pending 与 arrival fact 一致。
|
|
579
|
+
|
|
580
|
+
## 9. 已定案问题
|
|
581
|
+
|
|
582
|
+
本轮已定案:
|
|
583
|
+
|
|
584
|
+
1. Call-site pending / pointer result 的中文标签统一使用 `[Dominds 诉请状态]`。
|
|
585
|
+
2. Arrival / carryover fact 正文必须显式列 `callId`;它是 LLM 可追踪锚点,不只是结构化元数据。
|
|
586
|
+
3. Dominds 不做同 course context window 裁剪;最新 course 全量进 LLM context,历史 course 永不进 context。因此不定义“同 course 上下文补入 / 可见性修复”文案。
|
|
587
|
+
4. 多 tellask / FBR pending 登记与启动拆成两阶段:先登记全部 pending records,全部落盘成功后再启动 sideDialog drive。不引入 sealed marker。
|
|
588
|
+
5. 旧 pending record 缺少 `callSiteCourse` / `callSiteGenseq` 不迁移、不隔离兼容、不 fallback。旧 `.dialogs/` 可丢弃;新 validator 直接要求必填,缺失即 loud fail / quarantine。
|
|
589
|
+
6. reply obligation 是栈,不是槽。root 与 side dialog 统一使用 `asker-stack.jsonl` 持久化 `AskerDialogStackFrame`,文件只允许 append/truncate。LLM context 从栈顶注入当前义务,而不是扫描历史 JSONL 对话。
|
|
590
|
+
7. replace pending 是特殊栈操作:抽调旧 frame,再把新 obligation 压到栈顶;找不到旧 frame 必须 loud fail,不能静默 fallback 成普通 push。
|
|
591
|
+
8. 实现术语升级为 `MainDialog` / `SideDialog` / `askerDialog` / `assignmentFromAsker` / `askerStack`。旧 `supdialog` 术语退出实现代码与文档;用户可见文案继续使用“主线对话 / 支线对话、诉请者 / 被诉请者”。
|
package/dist/evt-registry.d.ts
CHANGED
|
@@ -55,11 +55,10 @@ declare class DialogEventRegistryImpl implements DialogEventRegistry {
|
|
|
55
55
|
}
|
|
56
56
|
export declare const dialogEventRegistry: DialogEventRegistryImpl;
|
|
57
57
|
export declare function setGlobalDialogEventBroadcaster(fn: ((evt: TypedDialogEvent) => void) | null): void;
|
|
58
|
-
export declare function setQ4HBroadcaster(fn: ((evt: TypedDialogEvent) => void) | null): void;
|
|
59
58
|
export declare function postDialogEvent(dlg: Dialog, event: DialogEvent): void;
|
|
60
59
|
/**
|
|
61
60
|
* Post an event to a specific dialog's PubChan by ID.
|
|
62
|
-
* Useful for posting
|
|
61
|
+
* Useful for posting sideDialog events when only the sideDialog ID is available.
|
|
63
62
|
*/
|
|
64
63
|
export declare function postDialogEventById(dialogId: DialogID, event: DialogEvent): void;
|
|
65
64
|
export declare function createEvent<T extends DialogEvent['type']>(type: T): Extract<DialogEvent, {
|
package/dist/evt-registry.js
CHANGED
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.dialogEventRegistry = void 0;
|
|
10
10
|
exports.setGlobalDialogEventBroadcaster = setGlobalDialogEventBroadcaster;
|
|
11
|
-
exports.setQ4HBroadcaster = setQ4HBroadcaster;
|
|
12
11
|
exports.postDialogEvent = postDialogEvent;
|
|
13
12
|
exports.postDialogEventById = postDialogEventById;
|
|
14
13
|
exports.createEvent = createEvent;
|
|
@@ -51,7 +50,7 @@ class DialogEventRegistryImpl {
|
|
|
51
50
|
switch (evt.type) {
|
|
52
51
|
case 'new_q4h_asked':
|
|
53
52
|
case 'q4h_answered':
|
|
54
|
-
case '
|
|
53
|
+
case 'sideDialog_created_evt':
|
|
55
54
|
case 'dlg_touched_evt':
|
|
56
55
|
break;
|
|
57
56
|
default:
|
|
@@ -146,17 +145,13 @@ exports.dialogEventRegistry = new DialogEventRegistryImpl();
|
|
|
146
145
|
function setGlobalDialogEventBroadcaster(fn) {
|
|
147
146
|
exports.dialogEventRegistry.setGlobalDialogEventBroadcaster(fn);
|
|
148
147
|
}
|
|
149
|
-
// Backward-compatible alias used by existing tests/callers.
|
|
150
|
-
function setQ4HBroadcaster(fn) {
|
|
151
|
-
setGlobalDialogEventBroadcaster(fn);
|
|
152
|
-
}
|
|
153
148
|
// Export helper function to import in other modules
|
|
154
149
|
function postDialogEvent(dlg, event) {
|
|
155
150
|
exports.dialogEventRegistry.postEvent(dlg, event);
|
|
156
151
|
}
|
|
157
152
|
/**
|
|
158
153
|
* Post an event to a specific dialog's PubChan by ID.
|
|
159
|
-
* Useful for posting
|
|
154
|
+
* Useful for posting sideDialog events when only the sideDialog ID is available.
|
|
160
155
|
*/
|
|
161
156
|
function postDialogEventById(dialogId, event) {
|
|
162
157
|
exports.dialogEventRegistry.postEventById(dialogId, event);
|
package/dist/llm/gen/mock.js
CHANGED
|
@@ -315,6 +315,15 @@ class MockGen {
|
|
|
315
315
|
if (trimmed !== '') {
|
|
316
316
|
variants.add(trimmed.toLowerCase());
|
|
317
317
|
}
|
|
318
|
+
const tellaskStatusIndexZh = trimmed.lastIndexOf('\n[Dominds 诉请状态]\n');
|
|
319
|
+
const tellaskStatusIndexEn = trimmed.lastIndexOf('\n[Dominds tellask status]\n');
|
|
320
|
+
const tellaskStatusIndex = Math.max(tellaskStatusIndexZh, tellaskStatusIndexEn);
|
|
321
|
+
if (tellaskStatusIndex >= 0) {
|
|
322
|
+
const strippedTellaskStatus = trimmed.slice(0, tellaskStatusIndex).trim();
|
|
323
|
+
if (strippedTellaskStatus !== '') {
|
|
324
|
+
variants.add(strippedTellaskStatus.toLowerCase());
|
|
325
|
+
}
|
|
326
|
+
}
|
|
318
327
|
const hasRuntimeWrapper = RUNTIME_PROMPT_WRAPPER_PREFIXES.some((prefix) => trimmed.startsWith(prefix));
|
|
319
328
|
if (!hasRuntimeWrapper) {
|
|
320
329
|
return [...variants];
|
|
@@ -7,7 +7,7 @@ export type DriveBaseContextParts = Readonly<{
|
|
|
7
7
|
dialogMsgsForContext: readonly ChatMessage[];
|
|
8
8
|
}>;
|
|
9
9
|
export type DriveEphemeralContextParts = Readonly<{
|
|
10
|
-
|
|
10
|
+
sideDialogResponseContextMsgs?: readonly ChatMessage[];
|
|
11
11
|
runtimeGuideMsgs?: readonly ChatMessage[];
|
|
12
12
|
}>;
|
|
13
13
|
export type DriveTailContextParts = Readonly<{
|
|
@@ -15,7 +15,6 @@ export type DriveTailContextParts = Readonly<{
|
|
|
15
15
|
}>;
|
|
16
16
|
export declare function buildDriveBaseContextMessages(parts: DriveBaseContextParts): ChatMessage[];
|
|
17
17
|
export declare function appendDriveEphemeralContext(base: readonly ChatMessage[], parts: DriveEphemeralContextParts): ChatMessage[];
|
|
18
|
-
export declare function appendDriveTailContext(source: readonly ChatMessage[], parts: DriveTailContextParts): ChatMessage[];
|
|
19
18
|
export declare function assembleDriveContextMessages(args: {
|
|
20
19
|
base: DriveBaseContextParts;
|
|
21
20
|
ephemeral: DriveEphemeralContextParts;
|