dominds 1.13.2 → 1.15.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/bootstrap/global-dialog-event-broadcaster.d.ts +18 -0
- package/dist/bootstrap/global-dialog-event-broadcaster.js +81 -0
- package/dist/dialog-fork.js +13 -12
- package/dist/dialog.d.ts +61 -50
- package/dist/dialog.js +284 -78
- package/dist/docs/dialog-system.md +12 -0
- package/dist/docs/dialog-system.zh.md +12 -0
- package/dist/docs/dominds-terminology.md +17 -0
- package/dist/docs/issues/global-dialog-event-broadcaster-missing.md +128 -0
- package/dist/docs/llm-provider-isolation.md +35 -0
- package/dist/docs/llm-provider-isolation.zh.md +35 -0
- package/dist/llm/client.d.ts +2 -1
- package/dist/llm/defaults.yaml +118 -4
- package/dist/llm/gen/anthropic.js +2 -4
- package/dist/llm/gen/codex.d.ts +11 -0
- package/dist/llm/gen/codex.js +41 -31
- package/dist/llm/gen/failure-classifier.js +17 -0
- package/dist/llm/gen/mock.js +45 -21
- package/dist/llm/gen/openai-compatible.d.ts +2 -0
- package/dist/llm/gen/openai-compatible.js +43 -38
- package/dist/llm/gen/openai.d.ts +3 -1
- package/dist/llm/gen/openai.js +888 -71
- package/dist/llm/gen/tool-call-context.d.ts +7 -2
- package/dist/llm/gen/tool-call-context.js +55 -13
- package/dist/llm/gen.d.ts +60 -3
- package/dist/llm/kernel-driver/context.js +1 -1
- package/dist/llm/kernel-driver/drive.js +374 -348
- package/dist/llm/kernel-driver/flow.js +3 -3
- package/dist/llm/kernel-driver/guardrails.d.ts +1 -1
- package/dist/llm/kernel-driver/guardrails.js +4 -4
- package/dist/llm/kernel-driver/runtime.js +11 -29
- package/dist/llm/kernel-driver/subdialog.js +56 -5
- package/dist/llm/kernel-driver/tellask-special.d.ts +38 -12
- package/dist/llm/kernel-driver/tellask-special.js +489 -180
- package/dist/llm/kernel-driver/types.d.ts +1 -1
- package/dist/persistence.d.ts +30 -62
- package/dist/persistence.js +978 -986
- package/dist/priming.js +398 -365
- package/dist/recovery/reply-special.js +3 -3
- package/dist/runtime/inter-dialog-format.d.ts +1 -1
- package/dist/runtime/inter-dialog-format.js +1 -1
- package/dist/runtime/reply-prompt-copy.js +4 -4
- package/dist/server/setup-routes.js +26 -5
- package/dist/server/snippets-routes.d.ts +1 -0
- package/dist/server/snippets-routes.js +20 -9
- package/dist/server/websocket-handler.js +58 -25
- package/dist/shared/utils/fbr.js +12 -8
- package/dist/shared/utils/inter-dialog-format.js +6 -4
- package/dist/team.d.ts +24 -13
- package/dist/team.js +123 -32
- package/dist/tool.d.ts +26 -0
- package/dist/tool.js +97 -0
- package/dist/tools/team_mgmt.js +18 -0
- package/package.json +2 -2
- package/webapp/dist/assets/{_basePickBy-CBOtd63g.js → _basePickBy-DsirmCgI.js} +3 -3
- package/webapp/dist/assets/_basePickBy-DsirmCgI.js.map +1 -0
- package/webapp/dist/assets/{_baseUniq-mfoKz4Wm.js → _baseUniq-tR6G8loB.js} +2 -2
- package/webapp/dist/assets/_baseUniq-tR6G8loB.js.map +1 -0
- package/webapp/dist/assets/{arc-Dq0WZLyu.js → arc-CzxpASkZ.js} +2 -2
- package/webapp/dist/assets/arc-CzxpASkZ.js.map +1 -0
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-CNmygmp3.js → architectureDiagram-2XIMDMQ5-BSH7H5oI.js} +26 -8
- package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-BSH7H5oI.js.map +1 -0
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-DvE0lybt.js → blockDiagram-WCTKOSBZ-DpLIr7yO.js} +187 -170
- package/webapp/dist/assets/blockDiagram-WCTKOSBZ-DpLIr7yO.js.map +1 -0
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-CR7zJ2_u.js → c4Diagram-IC4MRINW-WuYKgWfY.js} +4 -4
- package/webapp/dist/assets/c4Diagram-IC4MRINW-WuYKgWfY.js.map +1 -0
- package/webapp/dist/assets/{channel-DrTrnYx4.js → channel-B-v9dqLN.js} +2 -2
- package/webapp/dist/assets/channel-B-v9dqLN.js.map +1 -0
- package/webapp/dist/assets/{chunk-4BX2VUAB-CVuJEIeN.js → chunk-4BX2VUAB-MtFUfKZy.js} +2 -2
- package/webapp/dist/assets/chunk-4BX2VUAB-MtFUfKZy.js.map +1 -0
- package/webapp/dist/assets/{chunk-55IACEB6-BxUoXApB.js → chunk-55IACEB6-rY9AJdzj.js} +2 -2
- package/webapp/dist/assets/chunk-55IACEB6-rY9AJdzj.js.map +1 -0
- package/webapp/dist/assets/{chunk-FMBD7UC4-TX-LVAaV.js → chunk-FMBD7UC4-B-RtOs7e.js} +2 -2
- package/webapp/dist/assets/chunk-FMBD7UC4-B-RtOs7e.js.map +1 -0
- package/webapp/dist/assets/{chunk-TZMSLE5B-Cw689yRl.js → chunk-JSJVCQXG-Da1d3uS4.js} +14 -6
- package/webapp/dist/assets/chunk-JSJVCQXG-Da1d3uS4.js.map +1 -0
- package/webapp/dist/assets/{chunk-QN33PNHL-D1uiKlOO.js → chunk-KX2RTZJC-DH9UrpuG.js} +2 -2
- package/webapp/dist/assets/chunk-KX2RTZJC-DH9UrpuG.js.map +1 -0
- package/webapp/dist/assets/{chunk-DI55MBZ5-SAhxUTqQ.js → chunk-NQ4KR5QH-CK365lrr.js} +9 -7
- package/webapp/dist/assets/chunk-NQ4KR5QH-CK365lrr.js.map +1 -0
- package/webapp/dist/assets/{chunk-QZHKN3VN-BxuV0Oba.js → chunk-QZHKN3VN-BCaWPGDm.js} +2 -2
- package/webapp/dist/assets/chunk-QZHKN3VN-BCaWPGDm.js.map +1 -0
- package/webapp/dist/assets/{chunk-B4BG7PRW-DpMa3-9L.js → chunk-WL4C6EOR-DDCnEwft.js} +171 -121
- package/webapp/dist/assets/chunk-WL4C6EOR-DDCnEwft.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-2ON5EDUG-BTTGianr.js → classDiagram-VBA2DB6C-CvMBU4WA.js} +7 -6
- package/webapp/dist/assets/classDiagram-VBA2DB6C-CvMBU4WA.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-BTTGianr.js → classDiagram-v2-RAHNMMFH-CvMBU4WA.js} +7 -6
- package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-CvMBU4WA.js.map +1 -0
- package/webapp/dist/assets/{clone-Dk8cAI3I.js → clone-r98jR0MC.js} +2 -2
- package/webapp/dist/assets/clone-r98jR0MC.js.map +1 -0
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BjJnzB2N.js → cose-bilkent-S5V4N54A-t6J60Ogk.js} +2 -2
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-t6J60Ogk.js.map +1 -0
- package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
- package/webapp/dist/assets/{dagre-6UL2VRFP-VF-xGhAf.js → dagre-KLK3FWXG-BlqmY2DV.js} +7 -7
- package/webapp/dist/assets/dagre-KLK3FWXG-BlqmY2DV.js.map +1 -0
- package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
- package/webapp/dist/assets/{diagram-PSM6KHXK-Ba5U0oRY.js → diagram-E7M64L7V-FwCHeIUD.js} +10 -10
- package/webapp/dist/assets/diagram-E7M64L7V-FwCHeIUD.js.map +1 -0
- package/webapp/dist/assets/{diagram-QEK2KX5R-DoYCnEw_.js → diagram-IFDJBPK2-NhtmkuZG.js} +9 -8
- package/webapp/dist/assets/diagram-IFDJBPK2-NhtmkuZG.js.map +1 -0
- package/webapp/dist/assets/{diagram-S2PKOQOG-CkK4SRyE.js → diagram-P4PSJMXO-B9FcmokX.js} +8 -8
- package/webapp/dist/assets/diagram-P4PSJMXO-B9FcmokX.js.map +1 -0
- package/webapp/dist/assets/{erDiagram-Q2GNP2WA-DkI5eYww.js → erDiagram-INFDFZHY-DHKmWvtB.js} +96 -75
- package/webapp/dist/assets/erDiagram-INFDFZHY-DHKmWvtB.js.map +1 -0
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-wOdPUQ7Y.js → flowDiagram-PKNHOUZH-C7Zi8I7T.js} +98 -81
- package/webapp/dist/assets/flowDiagram-PKNHOUZH-C7Zi8I7T.js.map +1 -0
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-BtRWgkUH.js → ganttDiagram-A5KZAMGK-Cv2T8tz_.js} +28 -3
- package/webapp/dist/assets/ganttDiagram-A5KZAMGK-Cv2T8tz_.js.map +1 -0
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-Bsz7u1vi.js → gitGraphDiagram-K3NZZRJ6-DztaipJU.js} +38 -46
- package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-DztaipJU.js.map +1 -0
- package/webapp/dist/assets/graph-C5yf62Vs.js +782 -0
- package/webapp/dist/assets/graph-C5yf62Vs.js.map +1 -0
- package/webapp/dist/assets/{index-xvYYeHuy.css → index-YaxF76or.css} +1 -1
- package/webapp/dist/assets/{index-rYmIohM_.js → index-hve5MWPs.js} +1603 -1415
- package/webapp/dist/assets/index-hve5MWPs.js.map +1 -0
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-BMaxCvH5.js → infoDiagram-LFFYTUFH-VgsbBPZP.js} +7 -7
- package/webapp/dist/assets/infoDiagram-LFFYTUFH-VgsbBPZP.js.map +1 -0
- package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-C7j3YWdw.js +966 -0
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-C7j3YWdw.js.map +1 -0
- package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-ejyerzmG.js → journeyDiagram-4ABVD52K-OO8sev-Y.js} +5 -5
- package/webapp/dist/assets/journeyDiagram-4ABVD52K-OO8sev-Y.js.map +1 -0
- package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-CYj35TEs.js → kanban-definition-K7BYSVSG-DiYCC1Ig.js} +5 -3
- package/webapp/dist/assets/kanban-definition-K7BYSVSG-DiYCC1Ig.js.map +1 -0
- package/webapp/dist/assets/{layout-7Ql4zmuL.js → layout-DdZSgGdu.js} +5 -5
- package/webapp/dist/assets/layout-DdZSgGdu.js.map +1 -0
- package/webapp/dist/assets/{linear-CVmgVPuZ.js → linear-7-aHtaFi.js} +2 -2
- package/webapp/dist/assets/linear-7-aHtaFi.js.map +1 -0
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-DOpxjGVo.js → mindmap-definition-YRQLILUH-IG3I-RdD.js} +7 -5
- package/webapp/dist/assets/mindmap-definition-YRQLILUH-IG3I-RdD.js.map +1 -0
- package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
- package/webapp/dist/assets/{pieDiagram-ADFJNKIX-CLQjpmAG.js → pieDiagram-SKSYHLDU-z68KJT5r.js} +8 -8
- package/webapp/dist/assets/pieDiagram-SKSYHLDU-z68KJT5r.js.map +1 -0
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-ClD_bz7z.js → quadrantDiagram-337W2JSQ-DaENWdO6.js} +3 -3
- package/webapp/dist/assets/quadrantDiagram-337W2JSQ-DaENWdO6.js.map +1 -0
- package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-DOpb-TWH.js → requirementDiagram-Z7DCOOCP-ROTFv4sa.js} +16 -6
- package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-ROTFv4sa.js.map +1 -0
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-D8Hsj3yx.js → sankeyDiagram-WA2Y5GQK-CK7qtpzw.js} +2 -2
- package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CK7qtpzw.js.map +1 -0
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-CFMNjBER.js → sequenceDiagram-2WXFIKYE-R5lDySeI.js} +601 -201
- package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-R5lDySeI.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-BQeDlw0P.js → stateDiagram-RAJIS63D-sr7msF5U.js} +9 -9
- package/webapp/dist/assets/stateDiagram-RAJIS63D-sr7msF5U.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-DscX61Rs.js → stateDiagram-v2-FVOUBMTO-X663liwS.js} +5 -5
- package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-X663liwS.js.map +1 -0
- package/webapp/dist/assets/{timeline-definition-IT6M3QCI-BcXPSTiw.js → timeline-definition-YZTLITO2-Bw0TdG26.js} +3 -3
- package/webapp/dist/assets/timeline-definition-YZTLITO2-Bw0TdG26.js.map +1 -0
- package/webapp/dist/assets/{treemap-GDKQZRPO-BBr4UV0Z.js → treemap-KZPCXAKY-D_sjKwI7.js} +37 -24
- package/webapp/dist/assets/treemap-KZPCXAKY-D_sjKwI7.js.map +1 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-DhlHIHid.js +2487 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-DhlHIHid.js.map +1 -0
- package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-CS5RAtQE.js → xychartDiagram-JWTSCODW-C65ESjTc.js} +4 -4
- package/webapp/dist/assets/xychartDiagram-JWTSCODW-C65ESjTc.js.map +1 -0
- package/webapp/dist/index.html +2 -2
- package/webapp/dist/assets/_basePickBy-CBOtd63g.js.map +0 -1
- package/webapp/dist/assets/_baseUniq-mfoKz4Wm.js.map +0 -1
- package/webapp/dist/assets/arc-Dq0WZLyu.js.map +0 -1
- package/webapp/dist/assets/architectureDiagram-VXUJARFQ-CNmygmp3.js.map +0 -1
- package/webapp/dist/assets/blockDiagram-VD42YOAC-DvE0lybt.js.map +0 -1
- package/webapp/dist/assets/c4Diagram-YG6GDRKO-CR7zJ2_u.js.map +0 -1
- package/webapp/dist/assets/channel-DrTrnYx4.js.map +0 -1
- package/webapp/dist/assets/chunk-4BX2VUAB-CVuJEIeN.js.map +0 -1
- package/webapp/dist/assets/chunk-55IACEB6-BxUoXApB.js.map +0 -1
- package/webapp/dist/assets/chunk-B4BG7PRW-DpMa3-9L.js.map +0 -1
- package/webapp/dist/assets/chunk-DI55MBZ5-SAhxUTqQ.js.map +0 -1
- package/webapp/dist/assets/chunk-FMBD7UC4-TX-LVAaV.js.map +0 -1
- package/webapp/dist/assets/chunk-QN33PNHL-D1uiKlOO.js.map +0 -1
- package/webapp/dist/assets/chunk-QZHKN3VN-BxuV0Oba.js.map +0 -1
- package/webapp/dist/assets/chunk-TZMSLE5B-Cw689yRl.js.map +0 -1
- package/webapp/dist/assets/classDiagram-2ON5EDUG-BTTGianr.js.map +0 -1
- package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-BTTGianr.js.map +0 -1
- package/webapp/dist/assets/clone-Dk8cAI3I.js.map +0 -1
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-BjJnzB2N.js.map +0 -1
- package/webapp/dist/assets/dagre-6UL2VRFP-VF-xGhAf.js.map +0 -1
- package/webapp/dist/assets/diagram-PSM6KHXK-Ba5U0oRY.js.map +0 -1
- package/webapp/dist/assets/diagram-QEK2KX5R-DoYCnEw_.js.map +0 -1
- package/webapp/dist/assets/diagram-S2PKOQOG-CkK4SRyE.js.map +0 -1
- package/webapp/dist/assets/erDiagram-Q2GNP2WA-DkI5eYww.js.map +0 -1
- package/webapp/dist/assets/flowDiagram-NV44I4VS-wOdPUQ7Y.js.map +0 -1
- package/webapp/dist/assets/ganttDiagram-JELNMOA3-BtRWgkUH.js.map +0 -1
- package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-Bsz7u1vi.js.map +0 -1
- package/webapp/dist/assets/graph-DAMkuTbn.js +0 -425
- package/webapp/dist/assets/graph-DAMkuTbn.js.map +0 -1
- package/webapp/dist/assets/index-rYmIohM_.js.map +0 -1
- package/webapp/dist/assets/infoDiagram-HS3SLOUP-BMaxCvH5.js.map +0 -1
- package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-ejyerzmG.js.map +0 -1
- package/webapp/dist/assets/kanban-definition-3W4ZIXB7-CYj35TEs.js.map +0 -1
- package/webapp/dist/assets/layout-7Ql4zmuL.js.map +0 -1
- package/webapp/dist/assets/linear-CVmgVPuZ.js.map +0 -1
- package/webapp/dist/assets/mindmap-definition-VGOIOE7T-DOpxjGVo.js.map +0 -1
- package/webapp/dist/assets/pieDiagram-ADFJNKIX-CLQjpmAG.js.map +0 -1
- package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-ClD_bz7z.js.map +0 -1
- package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-DOpb-TWH.js.map +0 -1
- package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-D8Hsj3yx.js.map +0 -1
- package/webapp/dist/assets/sequenceDiagram-WL72ISMW-CFMNjBER.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-FKZM4ZOC-BQeDlw0P.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-DscX61Rs.js.map +0 -1
- package/webapp/dist/assets/timeline-definition-IT6M3QCI-BcXPSTiw.js.map +0 -1
- package/webapp/dist/assets/treemap-GDKQZRPO-BBr4UV0Z.js.map +0 -1
- package/webapp/dist/assets/xychartDiagram-PRI3JC2R-CS5RAtQE.js.map +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { TypedDialogEvent } from '@longrun-ai/kernel/types/dialog';
|
|
2
|
+
export type GlobalDialogEventRecorder = Readonly<{
|
|
3
|
+
label: string;
|
|
4
|
+
snapshot: () => readonly TypedDialogEvent[];
|
|
5
|
+
clear: () => void;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function installGlobalDialogEventBroadcaster(args: {
|
|
8
|
+
label: string;
|
|
9
|
+
publish: (evt: TypedDialogEvent) => void;
|
|
10
|
+
}): void;
|
|
11
|
+
export declare function installRecordingGlobalDialogEventBroadcaster(args?: {
|
|
12
|
+
label?: string;
|
|
13
|
+
publish?: (evt: TypedDialogEvent) => void;
|
|
14
|
+
}): GlobalDialogEventRecorder;
|
|
15
|
+
export declare function clearInstalledGlobalDialogEventBroadcaster(): void;
|
|
16
|
+
export declare function assertGlobalDialogEventBroadcasterInstalled(where: string): void;
|
|
17
|
+
export declare function getRecordingGlobalDialogEventRecorder(): GlobalDialogEventRecorder | null;
|
|
18
|
+
export declare function requireRecordingGlobalDialogEventRecorder(where: string): GlobalDialogEventRecorder;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.installGlobalDialogEventBroadcaster = installGlobalDialogEventBroadcaster;
|
|
4
|
+
exports.installRecordingGlobalDialogEventBroadcaster = installRecordingGlobalDialogEventBroadcaster;
|
|
5
|
+
exports.clearInstalledGlobalDialogEventBroadcaster = clearInstalledGlobalDialogEventBroadcaster;
|
|
6
|
+
exports.assertGlobalDialogEventBroadcasterInstalled = assertGlobalDialogEventBroadcasterInstalled;
|
|
7
|
+
exports.getRecordingGlobalDialogEventRecorder = getRecordingGlobalDialogEventRecorder;
|
|
8
|
+
exports.requireRecordingGlobalDialogEventRecorder = requireRecordingGlobalDialogEventRecorder;
|
|
9
|
+
const evt_registry_1 = require("../evt-registry");
|
|
10
|
+
const log_1 = require("../log");
|
|
11
|
+
const log = (0, log_1.createLogger)('global-dialog-event-broadcaster');
|
|
12
|
+
let installedBroadcasterState = { kind: 'uninitialized' };
|
|
13
|
+
function buildRecorder(label, events) {
|
|
14
|
+
return {
|
|
15
|
+
label,
|
|
16
|
+
snapshot: () => [...events],
|
|
17
|
+
clear: () => {
|
|
18
|
+
events.length = 0;
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function installGlobalDialogEventBroadcaster(args) {
|
|
23
|
+
installedBroadcasterState = {
|
|
24
|
+
kind: 'custom',
|
|
25
|
+
label: args.label,
|
|
26
|
+
publish: args.publish,
|
|
27
|
+
};
|
|
28
|
+
(0, evt_registry_1.setGlobalDialogEventBroadcaster)(args.publish);
|
|
29
|
+
log.debug('Installed global dialog event broadcaster', undefined, {
|
|
30
|
+
label: args.label,
|
|
31
|
+
kind: 'custom',
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function installRecordingGlobalDialogEventBroadcaster(args) {
|
|
35
|
+
const label = args?.label?.trim() || 'recording-broadcaster';
|
|
36
|
+
const events = [];
|
|
37
|
+
const publish = (evt) => {
|
|
38
|
+
events.push(evt);
|
|
39
|
+
args?.publish?.(evt);
|
|
40
|
+
};
|
|
41
|
+
installedBroadcasterState = {
|
|
42
|
+
kind: 'recording',
|
|
43
|
+
label,
|
|
44
|
+
events,
|
|
45
|
+
publish: args?.publish,
|
|
46
|
+
};
|
|
47
|
+
(0, evt_registry_1.setGlobalDialogEventBroadcaster)(publish);
|
|
48
|
+
log.debug('Installed recording global dialog event broadcaster', undefined, {
|
|
49
|
+
label,
|
|
50
|
+
kind: 'recording',
|
|
51
|
+
});
|
|
52
|
+
return buildRecorder(label, events);
|
|
53
|
+
}
|
|
54
|
+
function clearInstalledGlobalDialogEventBroadcaster() {
|
|
55
|
+
const previousKind = installedBroadcasterState.kind;
|
|
56
|
+
installedBroadcasterState = { kind: 'uninitialized' };
|
|
57
|
+
(0, evt_registry_1.setGlobalDialogEventBroadcaster)(null);
|
|
58
|
+
log.debug('Cleared global dialog event broadcaster', undefined, {
|
|
59
|
+
previousKind,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function assertGlobalDialogEventBroadcasterInstalled(where) {
|
|
63
|
+
if (installedBroadcasterState.kind !== 'uninitialized') {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
throw new Error(`Global dialog event broadcaster runtime missing: ${where} must install the broadcaster during runtime bootstrap before dialog logic runs`);
|
|
67
|
+
}
|
|
68
|
+
function getRecordingGlobalDialogEventRecorder() {
|
|
69
|
+
if (installedBroadcasterState.kind !== 'recording') {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
return buildRecorder(installedBroadcasterState.label, installedBroadcasterState.events);
|
|
73
|
+
}
|
|
74
|
+
function requireRecordingGlobalDialogEventRecorder(where) {
|
|
75
|
+
const recorder = getRecordingGlobalDialogEventRecorder();
|
|
76
|
+
if (recorder) {
|
|
77
|
+
return recorder;
|
|
78
|
+
}
|
|
79
|
+
const currentKind = installedBroadcasterState.kind;
|
|
80
|
+
throw new Error(`Global dialog event recorder missing: ${where} requires a recording broadcaster, but runtime installed '${currentKind}'`);
|
|
81
|
+
}
|
package/dist/dialog-fork.js
CHANGED
|
@@ -45,7 +45,6 @@ function cloneReminderSnapshot(snapshot) {
|
|
|
45
45
|
function cloneQuestions(questions) {
|
|
46
46
|
return questions.map((question) => ({
|
|
47
47
|
...question,
|
|
48
|
-
remainingCallIds: question.remainingCallIds ? [...question.remainingCallIds] : undefined,
|
|
49
48
|
callSiteRef: { ...question.callSiteRef },
|
|
50
49
|
}));
|
|
51
50
|
}
|
|
@@ -105,16 +104,17 @@ function isPersistedMessageRecord(record) {
|
|
|
105
104
|
case 'runtime_guide_record':
|
|
106
105
|
case 'human_text_record':
|
|
107
106
|
case 'func_call_record':
|
|
108
|
-
case '
|
|
107
|
+
case 'tellask_call_record':
|
|
109
108
|
case 'func_result_record':
|
|
110
|
-
case '
|
|
111
|
-
case '
|
|
112
|
-
case 'tellask_carryover_result_record':
|
|
109
|
+
case 'tellask_result_record':
|
|
110
|
+
case 'tellask_carryover_record':
|
|
113
111
|
return true;
|
|
112
|
+
// UI-only timeline records belong to the retained transcript for replay/forking, but they do
|
|
113
|
+
// not contribute to message-count / context reconstruction semantics.
|
|
114
114
|
case 'web_search_call_record':
|
|
115
|
+
case 'native_tool_call_record':
|
|
115
116
|
case 'quest_for_sup_record':
|
|
116
117
|
case 'tellask_reply_resolution_record':
|
|
117
|
-
case 'tellask_call_carryover_record':
|
|
118
118
|
case 'tellask_call_anchor_record':
|
|
119
119
|
case 'gen_start_record':
|
|
120
120
|
case 'gen_finish_record':
|
|
@@ -180,16 +180,17 @@ function rewriteRecordForFork(record, newRootId) {
|
|
|
180
180
|
case 'ui_only_markdown_record':
|
|
181
181
|
case 'runtime_guide_record':
|
|
182
182
|
case 'func_call_record':
|
|
183
|
-
case '
|
|
183
|
+
case 'tellask_call_record':
|
|
184
|
+
// UI-only transcript records are safe to copy verbatim into the forked transcript. They are
|
|
185
|
+
// not part of baseline state reconciliation and must not make forking fail.
|
|
184
186
|
case 'web_search_call_record':
|
|
187
|
+
case 'native_tool_call_record':
|
|
185
188
|
case 'human_text_record':
|
|
186
189
|
case 'quest_for_sup_record':
|
|
187
|
-
case '
|
|
190
|
+
case 'tellask_result_record':
|
|
188
191
|
case 'tellask_reply_resolution_record':
|
|
189
|
-
case 'tellask_call_carryover_record':
|
|
190
192
|
case 'tellask_call_anchor_record':
|
|
191
|
-
case '
|
|
192
|
-
case 'tellask_carryover_result_record':
|
|
193
|
+
case 'tellask_carryover_record':
|
|
193
194
|
case 'gen_start_record':
|
|
194
195
|
case 'gen_finish_record':
|
|
195
196
|
return record;
|
|
@@ -223,7 +224,7 @@ function countMessages(events) {
|
|
|
223
224
|
function countFunctionCalls(events) {
|
|
224
225
|
let count = 0;
|
|
225
226
|
for (const event of events) {
|
|
226
|
-
if (event.type === 'func_call_record' || event.type === '
|
|
227
|
+
if (event.type === 'func_call_record' || event.type === 'tellask_call_record') {
|
|
227
228
|
count += 1;
|
|
228
229
|
}
|
|
229
230
|
}
|
package/dist/dialog.d.ts
CHANGED
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
* - `SubDialog` - Subdialog with root dialog reference and dynamic supdialog resolution
|
|
14
14
|
*/
|
|
15
15
|
import type { ContextHealthSnapshot } from '@longrun-ai/kernel/types/context-health';
|
|
16
|
-
import type { DialogEvent, ReminderContent, WebSearchCallAction } from '@longrun-ai/kernel/types/dialog';
|
|
16
|
+
import type { DialogEvent, NativeToolCallPayload, ReminderContent, WebSearchCallAction, WebSearchCallSource } from '@longrun-ai/kernel/types/dialog';
|
|
17
17
|
import type { DialogPrompt, DialogRunControlSpec, DialogSubdialogReplyTarget, DriveIntent } from '@longrun-ai/kernel/types/drive-intent';
|
|
18
18
|
import type { LanguageCode } from '@longrun-ai/kernel/types/language';
|
|
19
|
-
import type { CalleeCourseNumber, CalleeGenerationSeqNumber, CallingCourseNumber, DialogMetadataFile, HumanQuestion, ProviderData, ReasoningPayload,
|
|
20
|
-
import { ChatMessage, FuncResultMsg } from './llm/client';
|
|
19
|
+
import type { CalleeCourseNumber, CalleeGenerationSeqNumber, CallingCourseNumber, DialogMetadataFile, HumanQuestion, ProviderData, ReasoningPayload, TellaskCallRecordName, TellaskReplyDirective } from '@longrun-ai/kernel/types/storage';
|
|
20
|
+
import { ChatMessage, FuncResultMsg, TellaskCarryoverMsg, TellaskResultMsg } from './llm/client';
|
|
21
21
|
import type { JsonValue } from './tool';
|
|
22
22
|
import { Reminder, ReminderOptions, ReminderOwner } from './tool';
|
|
23
23
|
type NewCourseHookResult = {
|
|
@@ -34,7 +34,7 @@ type UpNextPromptState = {
|
|
|
34
34
|
grammar?: 'markdown';
|
|
35
35
|
userLanguageCode?: LanguageCode;
|
|
36
36
|
origin: 'user' | 'diligence_push' | 'runtime';
|
|
37
|
-
|
|
37
|
+
q4hAnswerCallId?: string;
|
|
38
38
|
tellaskReplyDirective?: TellaskReplyDirective;
|
|
39
39
|
skipTaskdoc?: boolean;
|
|
40
40
|
subdialogReplyTarget?: DialogSubdialogReplyTarget;
|
|
@@ -322,7 +322,7 @@ export declare abstract class Dialog {
|
|
|
322
322
|
private buildUpNextPromptState;
|
|
323
323
|
private replaceQueuedPromptState;
|
|
324
324
|
private setNewCourseStartPrompt;
|
|
325
|
-
private
|
|
325
|
+
private mergePromptQ4HAnswerCallId;
|
|
326
326
|
private enqueueQueuedPromptState;
|
|
327
327
|
private peekLatestUpNext;
|
|
328
328
|
queueUserPromptAtGenerationBoundary(options: {
|
|
@@ -330,21 +330,21 @@ export declare abstract class Dialog {
|
|
|
330
330
|
msgId: string;
|
|
331
331
|
grammar: 'markdown';
|
|
332
332
|
userLanguageCode?: LanguageCode;
|
|
333
|
-
|
|
333
|
+
q4hAnswerCallId?: string;
|
|
334
334
|
}): UpNextPromptState;
|
|
335
335
|
queueDeferredQ4HAnswerPrompt(options: {
|
|
336
336
|
prompt: string;
|
|
337
337
|
msgId: string;
|
|
338
338
|
grammar: 'markdown';
|
|
339
339
|
userLanguageCode?: LanguageCode;
|
|
340
|
-
|
|
340
|
+
q4hAnswerCallId?: string;
|
|
341
341
|
}): UpNextPromptState;
|
|
342
342
|
queueRegisteredAssignmentUpdatePrompt(options: {
|
|
343
343
|
prompt: string;
|
|
344
344
|
msgId: string;
|
|
345
345
|
grammar: 'markdown';
|
|
346
346
|
userLanguageCode?: LanguageCode;
|
|
347
|
-
|
|
347
|
+
q4hAnswerCallId?: string;
|
|
348
348
|
tellaskReplyDirective?: TellaskReplyDirective;
|
|
349
349
|
skipTaskdoc?: boolean;
|
|
350
350
|
subdialogReplyTarget?: DialogSubdialogReplyTarget;
|
|
@@ -371,6 +371,20 @@ export declare abstract class Dialog {
|
|
|
371
371
|
skipEnqueueIntent?: boolean;
|
|
372
372
|
}): Promise<void>;
|
|
373
373
|
receiveFuncResult(result: FuncResultMsg): Promise<void>;
|
|
374
|
+
receiveTellaskResult(result: TellaskResultMsg): Promise<void>;
|
|
375
|
+
receiveTellaskCarryover(result: TellaskCarryoverMsg): Promise<void>;
|
|
376
|
+
receiveTellaskCallResult(responderId: string, callName: 'tellaskBack' | 'tellask' | 'tellaskSessionless' | 'askHuman' | 'freshBootsReasoning', mentionList: string[] | undefined, tellaskContent: string, result: string, status: 'completed' | 'failed', callId: string): Promise<void>;
|
|
377
|
+
receiveTellaskResponse(responderId: string, callName: 'tellaskBack' | 'tellask' | 'tellaskSessionless' | 'askHuman' | 'freshBootsReasoning', mentionList: string[] | undefined, tellaskContent: string, status: 'completed' | 'failed', subdialogId: DialogID | undefined, options: {
|
|
378
|
+
response: string;
|
|
379
|
+
agentId: string;
|
|
380
|
+
callId: string;
|
|
381
|
+
originMemberId: string;
|
|
382
|
+
originCourse?: CallingCourseNumber;
|
|
383
|
+
carryoverContent?: string;
|
|
384
|
+
sessionSlug?: string;
|
|
385
|
+
calleeCourse?: CalleeCourseNumber;
|
|
386
|
+
calleeGenseq?: CalleeGenerationSeqNumber;
|
|
387
|
+
}): Promise<TellaskResultMsg | TellaskCarryoverMsg>;
|
|
374
388
|
notifyGeneratingStart(msgId?: string): Promise<void>;
|
|
375
389
|
notifyGeneratingFinish(contextHealth?: ContextHealthSnapshot, llmGenModel?: string): Promise<void>;
|
|
376
390
|
streamError(error: string): Promise<void>;
|
|
@@ -385,11 +399,13 @@ export declare abstract class Dialog {
|
|
|
385
399
|
sayingFinish(): Promise<void>;
|
|
386
400
|
funcCallRequested(funcId: string, funcName: string, argumentsStr: string): Promise<void>;
|
|
387
401
|
webSearchCall(payload: {
|
|
402
|
+
source?: WebSearchCallSource;
|
|
388
403
|
phase: 'added' | 'done';
|
|
389
404
|
itemId: string;
|
|
390
405
|
status?: string;
|
|
391
406
|
action?: WebSearchCallAction;
|
|
392
407
|
}): Promise<void>;
|
|
408
|
+
nativeToolCall(payload: NativeToolCallPayload): Promise<void>;
|
|
393
409
|
callingStart(payload: {
|
|
394
410
|
callName: 'tellaskBack' | 'tellask' | 'tellaskSessionless' | 'askHuman' | 'freshBootsReasoning';
|
|
395
411
|
callId: string;
|
|
@@ -397,26 +413,13 @@ export declare abstract class Dialog {
|
|
|
397
413
|
sessionSlug?: string;
|
|
398
414
|
tellaskContent: string;
|
|
399
415
|
}): Promise<void>;
|
|
400
|
-
/**
|
|
401
|
-
* Receive call result with callId for inline correlation
|
|
402
|
-
*/
|
|
403
|
-
receiveTellaskCallResult(responderId: string, callName: 'tellaskBack' | 'tellask' | 'tellaskSessionless' | 'askHuman' | 'freshBootsReasoning', mentionList: string[] | undefined, tellaskContent: string, result: string, status: 'completed' | 'failed', callId: string): Promise<void>;
|
|
404
|
-
/**
|
|
405
|
-
* Receive tellask response (separate bubble for tellask sideline replies)
|
|
406
|
-
*/
|
|
407
|
-
receiveTellaskResponse(responderId: string, callName: 'tellaskBack' | 'tellask' | 'tellaskSessionless' | 'freshBootsReasoning', mentionList: string[] | undefined, tellaskContent: string, status: 'completed' | 'failed', subdialogId: DialogID | undefined, options: {
|
|
408
|
-
response: string;
|
|
409
|
-
agentId: string;
|
|
410
|
-
callId: string;
|
|
411
|
-
originMemberId: string;
|
|
412
|
-
originCourse?: CallingCourseNumber;
|
|
413
|
-
carryoverContent?: string;
|
|
414
|
-
sessionSlug?: string;
|
|
415
|
-
calleeCourse?: CalleeCourseNumber;
|
|
416
|
-
calleeGenseq?: CalleeGenerationSeqNumber;
|
|
417
|
-
}): Promise<void>;
|
|
418
416
|
updateQuestions4Human(questions: HumanQuestion[]): Promise<void>;
|
|
419
|
-
persistUserMessage(content: string, msgId: string, grammar: 'markdown', origin: 'user' | 'diligence_push' | 'runtime' | undefined, userLanguageCode?: LanguageCode,
|
|
417
|
+
persistUserMessage(content: string, msgId: string, grammar: 'markdown', origin: 'user' | 'diligence_push' | 'runtime' | undefined, userLanguageCode?: LanguageCode, q4hAnswerCallId?: string, tellaskReplyDirective?: TellaskReplyDirective): Promise<void>;
|
|
418
|
+
receiveHumanReply(args: {
|
|
419
|
+
content: string;
|
|
420
|
+
userLanguageCode?: LanguageCode;
|
|
421
|
+
q4hAnswerCallId: string;
|
|
422
|
+
}): Promise<void>;
|
|
420
423
|
appendTellaskReplyResolution(payload: {
|
|
421
424
|
callId: string;
|
|
422
425
|
replyCallName: 'replyTellask' | 'replyTellaskSessionless' | 'replyTellaskBack';
|
|
@@ -424,8 +427,19 @@ export declare abstract class Dialog {
|
|
|
424
427
|
}): Promise<void>;
|
|
425
428
|
persistAgentMessage(content: string, genseq: number, type: 'thinking_msg' | 'saying_msg', provider_data?: ProviderData, reasoning?: ReasoningPayload): Promise<void>;
|
|
426
429
|
persistUiOnlyMarkdown(content: string, genseq: number): Promise<void>;
|
|
427
|
-
persistFunctionCall(id: string, name: string,
|
|
428
|
-
|
|
430
|
+
persistFunctionCall(id: string, name: string, rawArgumentsText: string, genseq: number): Promise<void>;
|
|
431
|
+
persistTellaskCall(id: string, name: TellaskCallRecordName, rawArgumentsText: string, genseq: number, options?: {
|
|
432
|
+
deliveryMode?: 'tellask_call_start' | 'func_call_requested';
|
|
433
|
+
}): Promise<void>;
|
|
434
|
+
persistFunctionCallResultPair(id: string, name: string, rawArgumentsText: string, genseq: number, result: FuncResultMsg): Promise<void>;
|
|
435
|
+
persistTellaskCallResultPair(args: {
|
|
436
|
+
id: string;
|
|
437
|
+
name: TellaskCallRecordName;
|
|
438
|
+
rawArgumentsText: string;
|
|
439
|
+
genseq: number;
|
|
440
|
+
result: TellaskResultMsg | FuncResultMsg;
|
|
441
|
+
deliveryMode: 'tellask_call_start' | 'func_call_requested';
|
|
442
|
+
}): Promise<void>;
|
|
429
443
|
/**
|
|
430
444
|
* Post subdialog completion response to this dialog.
|
|
431
445
|
* Phase 14: No wait - emit immediately with virtual gen markers for Type C subdialogs
|
|
@@ -574,24 +588,8 @@ export declare abstract class DialogStore {
|
|
|
574
588
|
sayingChunk(_dialog: Dialog, _chunk: string): void;
|
|
575
589
|
sayingFinish(_dialog: Dialog): void;
|
|
576
590
|
receiveFuncResult(_dialog: Dialog, _funcResult: FuncResultMsg): Promise<void>;
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
*/
|
|
580
|
-
receiveTellaskCallResult(_dialog: Dialog, _responderId: string, _callName: 'tellaskBack' | 'tellask' | 'tellaskSessionless' | 'askHuman' | 'freshBootsReasoning', _mentionList: string[] | undefined, _tellaskContent: string, _result: string, _status: 'completed' | 'failed', _callId: string): Promise<void>;
|
|
581
|
-
/**
|
|
582
|
-
* Receive tellask response (separate bubble for tellask sideline replies)
|
|
583
|
-
*/
|
|
584
|
-
receiveTellaskResponse(_dialog: Dialog, _responderId: string, _callName: 'tellaskBack' | 'tellask' | 'tellaskSessionless' | 'freshBootsReasoning', _mentionList: string[] | undefined, _tellaskContent: string, _status: 'completed' | 'failed', _subdialogId: DialogID | undefined, _options: {
|
|
585
|
-
response: string;
|
|
586
|
-
agentId: string;
|
|
587
|
-
callId: string;
|
|
588
|
-
originMemberId: string;
|
|
589
|
-
originCourse?: CallingCourseNumber;
|
|
590
|
-
carryoverContent?: string;
|
|
591
|
-
sessionSlug?: string;
|
|
592
|
-
calleeCourse?: CalleeCourseNumber;
|
|
593
|
-
calleeGenseq?: CalleeGenerationSeqNumber;
|
|
594
|
-
}): Promise<void>;
|
|
591
|
+
receiveTellaskResult(_dialog: Dialog, _funcResult: TellaskResultMsg): Promise<void>;
|
|
592
|
+
receiveTellaskCarryover(_dialog: Dialog, _result: TellaskCarryoverMsg): Promise<void>;
|
|
595
593
|
updateQuestions4Human(_dialog: Dialog, _questions: HumanQuestion[]): Promise<void>;
|
|
596
594
|
/**
|
|
597
595
|
* Load Questions for Human state from storage
|
|
@@ -619,11 +617,13 @@ export declare abstract class DialogStore {
|
|
|
619
617
|
}): Promise<void>;
|
|
620
618
|
funcCallRequested(_dialog: Dialog, _funcId: string, _funcName: string, _argumentsStr: string): Promise<void>;
|
|
621
619
|
webSearchCall(_dialog: Dialog, _payload: {
|
|
620
|
+
source?: WebSearchCallSource;
|
|
622
621
|
phase: 'added' | 'done';
|
|
623
622
|
itemId: string;
|
|
624
623
|
status?: string;
|
|
625
624
|
action?: WebSearchCallAction;
|
|
626
625
|
}): Promise<void>;
|
|
626
|
+
nativeToolCall(_dialog: Dialog, _payload: NativeToolCallPayload): Promise<void>;
|
|
627
627
|
/**
|
|
628
628
|
* Load current course number from persisted metadata
|
|
629
629
|
* This method should be implemented by subclasses to read from storage
|
|
@@ -641,7 +641,7 @@ export declare abstract class DialogStore {
|
|
|
641
641
|
/**
|
|
642
642
|
* Persist a user message to storage
|
|
643
643
|
*/
|
|
644
|
-
persistUserMessage(_dialog: Dialog, _content: string, _msgId: string, _grammar: 'markdown', _origin: 'user' | 'diligence_push' | 'runtime' | undefined, _userLanguageCode?: LanguageCode,
|
|
644
|
+
persistUserMessage(_dialog: Dialog, _content: string, _msgId: string, _grammar: 'markdown', _origin: 'user' | 'diligence_push' | 'runtime' | undefined, _userLanguageCode?: LanguageCode, _q4hAnswerCallId?: string, _tellaskReplyDirective?: TellaskReplyDirective): Promise<void>;
|
|
645
645
|
appendTellaskReplyResolution(_dialog: Dialog, _payload: {
|
|
646
646
|
callId: string;
|
|
647
647
|
replyCallName: 'replyTellask' | 'replyTellaskSessionless' | 'replyTellaskBack';
|
|
@@ -659,8 +659,19 @@ export declare abstract class DialogStore {
|
|
|
659
659
|
/**
|
|
660
660
|
* Persist a function call to storage
|
|
661
661
|
*/
|
|
662
|
-
persistFunctionCall(_dialog: Dialog, _id: string, _name: string,
|
|
663
|
-
|
|
662
|
+
persistFunctionCall(_dialog: Dialog, _id: string, _name: string, _rawArgumentsText: string, _genseq: number): Promise<void>;
|
|
663
|
+
persistTellaskCall(_dialog: Dialog, _id: string, _name: TellaskCallRecordName, _rawArgumentsText: string, _genseq: number, _options?: {
|
|
664
|
+
deliveryMode?: 'tellask_call_start' | 'func_call_requested';
|
|
665
|
+
}): Promise<void>;
|
|
666
|
+
persistFunctionCallResultPair(_dialog: Dialog, _id: string, _name: string, _rawArgumentsText: string, _genseq: number, _result: FuncResultMsg): Promise<void>;
|
|
667
|
+
persistTellaskCallResultPair(_dialog: Dialog, _args: {
|
|
668
|
+
id: string;
|
|
669
|
+
name: TellaskCallRecordName;
|
|
670
|
+
rawArgumentsText: string;
|
|
671
|
+
genseq: number;
|
|
672
|
+
result: TellaskResultMsg | FuncResultMsg;
|
|
673
|
+
deliveryMode: 'tellask_call_start' | 'func_call_requested';
|
|
674
|
+
}): Promise<void>;
|
|
664
675
|
/**
|
|
665
676
|
* Start a new course in storage
|
|
666
677
|
*/
|