dominds 1.25.6 → 1.25.7
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/dialog-display-state.js +99 -29
- package/dist/dialog-fork.js +53 -20
- package/dist/llm/kernel-driver/drive.js +253 -4
- package/dist/llm/kernel-driver/flow.js +13 -15
- package/dist/llm/kernel-driver/sideDialog.js +13 -0
- package/dist/persistence.js +18 -17
- package/dist/server/dominds-self-update.js +312 -22
- package/dist/server/websocket-handler.js +41 -4
- package/dist/tools/os.d.ts +1 -0
- package/dist/tools/os.js +19 -1
- package/package.json +3 -3
- package/webapp/dist/assets/{_basePickBy-fZ31r-iF.js → _basePickBy-Y5Q2L95x.js} +3 -3
- package/webapp/dist/assets/_basePickBy-Y5Q2L95x.js.map +1 -0
- package/webapp/dist/assets/{_baseUniq-CI1keLoL.js → _baseUniq-Cj3ro8Ri.js} +2 -2
- package/webapp/dist/assets/_baseUniq-Cj3ro8Ri.js.map +1 -0
- package/webapp/dist/assets/{arc-1NeUqzoV.js → arc-Bz9VfJlg.js} +2 -2
- package/webapp/dist/assets/arc-Bz9VfJlg.js.map +1 -0
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-C7SdzYIh.js → architectureDiagram-VXUJARFQ-Ce6_zDEY.js} +8 -26
- package/webapp/dist/assets/architectureDiagram-VXUJARFQ-Ce6_zDEY.js.map +1 -0
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-Cmpu3kIy.js → blockDiagram-VD42YOAC-DIEKjBVU.js} +170 -187
- package/webapp/dist/assets/blockDiagram-VD42YOAC-DIEKjBVU.js.map +1 -0
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-ChGTHIor.js → c4Diagram-YG6GDRKO-CQpAPdOt.js} +4 -4
- package/webapp/dist/assets/c4Diagram-YG6GDRKO-CQpAPdOt.js.map +1 -0
- package/webapp/dist/assets/{channel-ndS-XTQQ.js → channel-C_7bziVU.js} +2 -2
- package/webapp/dist/assets/channel-C_7bziVU.js.map +1 -0
- package/webapp/dist/assets/{chunk-4BX2VUAB-Cw5FtBd_.js → chunk-4BX2VUAB-CI07YP8x.js} +2 -2
- package/webapp/dist/assets/chunk-4BX2VUAB-CI07YP8x.js.map +1 -0
- package/webapp/dist/assets/{chunk-55IACEB6-D3G71JdA.js → chunk-55IACEB6-CH-ZnQdW.js} +2 -2
- package/webapp/dist/assets/chunk-55IACEB6-CH-ZnQdW.js.map +1 -0
- package/webapp/dist/assets/{chunk-WL4C6EOR-CIwdSg5q.js → chunk-B4BG7PRW-B8XZmRWD.js} +121 -171
- package/webapp/dist/assets/chunk-B4BG7PRW-B8XZmRWD.js.map +1 -0
- package/webapp/dist/assets/{chunk-NQ4KR5QH-CGEMYTch.js → chunk-DI55MBZ5-BTJEMG8W.js} +7 -9
- package/webapp/dist/assets/chunk-DI55MBZ5-BTJEMG8W.js.map +1 -0
- package/webapp/dist/assets/{chunk-FMBD7UC4-BcugPyy7.js → chunk-FMBD7UC4-u7Ho3qNZ.js} +2 -2
- package/webapp/dist/assets/chunk-FMBD7UC4-u7Ho3qNZ.js.map +1 -0
- package/webapp/dist/assets/{chunk-KX2RTZJC-BQ42xd4s.js → chunk-QN33PNHL-C-7kvetv.js} +2 -2
- package/webapp/dist/assets/chunk-QN33PNHL-C-7kvetv.js.map +1 -0
- package/webapp/dist/assets/{chunk-QZHKN3VN-CxNTVm5w.js → chunk-QZHKN3VN-Cutz7csQ.js} +2 -2
- package/webapp/dist/assets/chunk-QZHKN3VN-Cutz7csQ.js.map +1 -0
- package/webapp/dist/assets/{chunk-JSJVCQXG-DvuxYuNq.js → chunk-TZMSLE5B-b_LZteUW.js} +6 -14
- package/webapp/dist/assets/chunk-TZMSLE5B-b_LZteUW.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-Dl05PJAP.js → classDiagram-2ON5EDUG-CCGe8-bu.js} +6 -7
- package/webapp/dist/assets/classDiagram-2ON5EDUG-CCGe8-bu.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-Dl05PJAP.js → classDiagram-v2-WZHVMYZB-CCGe8-bu.js} +6 -7
- package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-CCGe8-bu.js.map +1 -0
- package/webapp/dist/assets/{clone-KCj1-QMr.js → clone-CEpSMVek.js} +2 -2
- package/webapp/dist/assets/clone-CEpSMVek.js.map +1 -0
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BttciCz5.js → cose-bilkent-S5V4N54A-JEt2Ncxk.js} +2 -2
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-JEt2Ncxk.js.map +1 -0
- package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-Dm5yE9k2.js → dagre-6UL2VRFP-dy6U1rpE.js} +7 -7
- package/webapp/dist/assets/dagre-6UL2VRFP-dy6U1rpE.js.map +1 -0
- package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-C80ZsiBG.js → diagram-PSM6KHXK-u1RaCst_.js} +10 -10
- package/webapp/dist/assets/diagram-PSM6KHXK-u1RaCst_.js.map +1 -0
- package/webapp/dist/assets/{diagram-IFDJBPK2-CqKidH4n.js → diagram-QEK2KX5R-Bm297BXQ.js} +8 -9
- package/webapp/dist/assets/diagram-QEK2KX5R-Bm297BXQ.js.map +1 -0
- package/webapp/dist/assets/{diagram-P4PSJMXO-EHVjfzUV.js → diagram-S2PKOQOG-B9Z57WnU.js} +8 -8
- package/webapp/dist/assets/diagram-S2PKOQOG-B9Z57WnU.js.map +1 -0
- package/webapp/dist/assets/{erDiagram-INFDFZHY-7MrtsOIt.js → erDiagram-Q2GNP2WA-CyXAp9Ik.js} +75 -96
- package/webapp/dist/assets/erDiagram-Q2GNP2WA-CyXAp9Ik.js.map +1 -0
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-D6hXqCy7.js → flowDiagram-NV44I4VS-ONR9JQsN.js} +81 -98
- package/webapp/dist/assets/flowDiagram-NV44I4VS-ONR9JQsN.js.map +1 -0
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-DLO0XCDk.js → ganttDiagram-JELNMOA3-Coi5jLKz.js} +3 -28
- package/webapp/dist/assets/ganttDiagram-JELNMOA3-Coi5jLKz.js.map +1 -0
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-BmVD_nQP.js → gitGraphDiagram-V2S2FVAM-BoLPKg9P.js} +46 -38
- package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-BoLPKg9P.js.map +1 -0
- package/webapp/dist/assets/graph-DLwD58eC.js +425 -0
- package/webapp/dist/assets/graph-DLwD58eC.js.map +1 -0
- package/webapp/dist/assets/{index-BXjq-k48.js → index-HwgQoWbn.js} +1118 -1041
- package/webapp/dist/assets/{index-BXjq-k48.js.map → index-HwgQoWbn.js.map} +1 -1
- package/webapp/dist/assets/{index-BQoNJEGT.css → index-yycTJNYb.css} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-D2fqM9Fn.js → infoDiagram-HS3SLOUP-BpEpEjG2.js} +7 -7
- package/webapp/dist/assets/infoDiagram-HS3SLOUP-BpEpEjG2.js.map +1 -0
- package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-DmbA52J-.js → journeyDiagram-XKPGCS4Q-C2HNBnMQ.js} +5 -5
- package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-C2HNBnMQ.js.map +1 -0
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-DRUw-P-d.js → kanban-definition-3W4ZIXB7-DcELha9W.js} +3 -5
- package/webapp/dist/assets/kanban-definition-3W4ZIXB7-DcELha9W.js.map +1 -0
- package/webapp/dist/assets/{layout-BUoHHXzn.js → layout-Cyg7MRlM.js} +5 -5
- package/webapp/dist/assets/layout-Cyg7MRlM.js.map +1 -0
- package/webapp/dist/assets/{linear-xVSAq8rI.js → linear-pOIWL8hY.js} +2 -2
- package/webapp/dist/assets/linear-pOIWL8hY.js.map +1 -0
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-BcajbGmW.js → mindmap-definition-VGOIOE7T-BTyvfLY3.js} +5 -7
- package/webapp/dist/assets/mindmap-definition-VGOIOE7T-BTyvfLY3.js.map +1 -0
- package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-Bu8kmCW6.js → pieDiagram-ADFJNKIX-D1CwcmEb.js} +8 -8
- package/webapp/dist/assets/pieDiagram-ADFJNKIX-D1CwcmEb.js.map +1 -0
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-DIBSNUGa.js → quadrantDiagram-AYHSOK5B-DdlItwqV.js} +3 -3
- package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-DdlItwqV.js.map +1 -0
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-CkrDkbBt.js → requirementDiagram-UZGBJVZJ-B6AntBtK.js} +6 -16
- package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-B6AntBtK.js.map +1 -0
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-BZ-1R8pc.js → sankeyDiagram-TZEHDZUN-Cb1skLgE.js} +2 -2
- package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-Cb1skLgE.js.map +1 -0
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DYoNARdO.js → sequenceDiagram-WL72ISMW-BXtnapRV.js} +201 -601
- package/webapp/dist/assets/sequenceDiagram-WL72ISMW-BXtnapRV.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-D9v19nvh.js → stateDiagram-FKZM4ZOC-BEJSYJxc.js} +9 -9
- package/webapp/dist/assets/stateDiagram-FKZM4ZOC-BEJSYJxc.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-BYw5ZwtH.js → stateDiagram-v2-4FDKWEC3-YlQ0hGcy.js} +5 -5
- package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-YlQ0hGcy.js.map +1 -0
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-BT10dRIJ.js → timeline-definition-IT6M3QCI-BHzyY6Ip.js} +3 -3
- package/webapp/dist/assets/timeline-definition-IT6M3QCI-BHzyY6Ip.js.map +1 -0
- package/webapp/dist/assets/{treemap-KZPCXAKY-yPoPC5hc.js → treemap-GDKQZRPO-BMYh8Nea.js} +24 -37
- package/webapp/dist/assets/treemap-GDKQZRPO-BMYh8Nea.js.map +1 -0
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BWLUzo9S.js → xychartDiagram-PRI3JC2R-C5vczZ0B.js} +4 -4
- package/webapp/dist/assets/xychartDiagram-PRI3JC2R-C5vczZ0B.js.map +1 -0
- package/webapp/dist/index.html +2 -2
- package/webapp/dist/assets/_basePickBy-fZ31r-iF.js.map +0 -1
- package/webapp/dist/assets/_baseUniq-CI1keLoL.js.map +0 -1
- package/webapp/dist/assets/arc-1NeUqzoV.js.map +0 -1
- package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-C7SdzYIh.js.map +0 -1
- package/webapp/dist/assets/blockDiagram-WCTKOSBZ-Cmpu3kIy.js.map +0 -1
- package/webapp/dist/assets/c4Diagram-IC4MRINW-ChGTHIor.js.map +0 -1
- package/webapp/dist/assets/channel-ndS-XTQQ.js.map +0 -1
- package/webapp/dist/assets/chunk-4BX2VUAB-Cw5FtBd_.js.map +0 -1
- package/webapp/dist/assets/chunk-55IACEB6-D3G71JdA.js.map +0 -1
- package/webapp/dist/assets/chunk-FMBD7UC4-BcugPyy7.js.map +0 -1
- package/webapp/dist/assets/chunk-JSJVCQXG-DvuxYuNq.js.map +0 -1
- package/webapp/dist/assets/chunk-KX2RTZJC-BQ42xd4s.js.map +0 -1
- package/webapp/dist/assets/chunk-NQ4KR5QH-CGEMYTch.js.map +0 -1
- package/webapp/dist/assets/chunk-QZHKN3VN-CxNTVm5w.js.map +0 -1
- package/webapp/dist/assets/chunk-WL4C6EOR-CIwdSg5q.js.map +0 -1
- package/webapp/dist/assets/classDiagram-VBA2DB6C-Dl05PJAP.js.map +0 -1
- package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-Dl05PJAP.js.map +0 -1
- package/webapp/dist/assets/clone-KCj1-QMr.js.map +0 -1
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-BttciCz5.js.map +0 -1
- package/webapp/dist/assets/dagre-KLK3FWXG-Dm5yE9k2.js.map +0 -1
- package/webapp/dist/assets/diagram-E7M64L7V-C80ZsiBG.js.map +0 -1
- package/webapp/dist/assets/diagram-IFDJBPK2-CqKidH4n.js.map +0 -1
- package/webapp/dist/assets/diagram-P4PSJMXO-EHVjfzUV.js.map +0 -1
- package/webapp/dist/assets/erDiagram-INFDFZHY-7MrtsOIt.js.map +0 -1
- package/webapp/dist/assets/flowDiagram-PKNHOUZH-D6hXqCy7.js.map +0 -1
- package/webapp/dist/assets/ganttDiagram-A5KZAMGK-DLO0XCDk.js.map +0 -1
- package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-BmVD_nQP.js.map +0 -1
- package/webapp/dist/assets/graph-DQTj8O0Q.js +0 -782
- package/webapp/dist/assets/graph-DQTj8O0Q.js.map +0 -1
- package/webapp/dist/assets/infoDiagram-LFFYTUFH-D2fqM9Fn.js.map +0 -1
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-kp7lB6-f.js +0 -966
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-kp7lB6-f.js.map +0 -1
- package/webapp/dist/assets/journeyDiagram-4ABVD52K-DmbA52J-.js.map +0 -1
- package/webapp/dist/assets/kanban-definition-K7BYSVSG-DRUw-P-d.js.map +0 -1
- package/webapp/dist/assets/layout-BUoHHXzn.js.map +0 -1
- package/webapp/dist/assets/linear-xVSAq8rI.js.map +0 -1
- package/webapp/dist/assets/mindmap-definition-YRQLILUH-BcajbGmW.js.map +0 -1
- package/webapp/dist/assets/pieDiagram-SKSYHLDU-Bu8kmCW6.js.map +0 -1
- package/webapp/dist/assets/quadrantDiagram-337W2JSQ-DIBSNUGa.js.map +0 -1
- package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-CkrDkbBt.js.map +0 -1
- package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-BZ-1R8pc.js.map +0 -1
- package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-DYoNARdO.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-RAJIS63D-D9v19nvh.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-BYw5ZwtH.js.map +0 -1
- package/webapp/dist/assets/timeline-definition-YZTLITO2-BT10dRIJ.js.map +0 -1
- package/webapp/dist/assets/treemap-KZPCXAKY-yPoPC5hc.js.map +0 -1
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-tryg3OaY.js +0 -2487
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-tryg3OaY.js.map +0 -1
- package/webapp/dist/assets/xychartDiagram-JWTSCODW-BWLUzo9S.js.map +0 -1
|
@@ -103,6 +103,16 @@ function q4hSuspensionDisplayState(hasQ4H) {
|
|
|
103
103
|
}
|
|
104
104
|
return undefined;
|
|
105
105
|
}
|
|
106
|
+
function pendingReplyObligationDisplayState(activeReplyObligation) {
|
|
107
|
+
if (activeReplyObligation === undefined) {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
kind: 'stopped',
|
|
112
|
+
reason: { kind: 'pending_reply_obligation' },
|
|
113
|
+
continueEnabled: true,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
106
116
|
async function resolveSideDialogFinalResponseClosure(args) {
|
|
107
117
|
if (!args.latest) {
|
|
108
118
|
return { kind: 'no_final_response' };
|
|
@@ -111,26 +121,50 @@ async function resolveSideDialogFinalResponseClosure(args) {
|
|
|
111
121
|
if (!finalResponseAnchor) {
|
|
112
122
|
return { kind: 'no_final_response' };
|
|
113
123
|
}
|
|
124
|
+
const finalResponseCallId = finalResponseAnchor.callId.trim();
|
|
114
125
|
const activeReplyObligation = await persistence_1.DialogPersistence.loadActiveTellaskReplyObligation(args.dialogId, 'running');
|
|
115
126
|
if (activeReplyObligation === undefined) {
|
|
116
127
|
return {
|
|
117
128
|
kind: 'closed_without_active_reply_obligation',
|
|
118
|
-
callId:
|
|
129
|
+
callId: finalResponseCallId,
|
|
119
130
|
};
|
|
120
131
|
}
|
|
121
|
-
if (activeReplyObligation.targetCallId ===
|
|
132
|
+
if (activeReplyObligation.targetCallId.trim() === finalResponseCallId) {
|
|
122
133
|
return {
|
|
123
134
|
kind: 'closed_with_matching_reply_obligation',
|
|
124
|
-
callId:
|
|
135
|
+
callId: finalResponseCallId,
|
|
125
136
|
activeReplyObligation,
|
|
126
137
|
};
|
|
127
138
|
}
|
|
128
139
|
return {
|
|
129
140
|
kind: 'blocked_by_different_reply_obligation',
|
|
130
|
-
callId:
|
|
141
|
+
callId: finalResponseCallId,
|
|
131
142
|
activeReplyObligation,
|
|
132
143
|
};
|
|
133
144
|
}
|
|
145
|
+
async function clearMatchingFinalResponseReplyObligation(dialogId, closure) {
|
|
146
|
+
if (closure.kind !== 'closed_with_matching_reply_obligation') {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
await persistence_1.DialogPersistence.setActiveTellaskReplyObligation(dialogId, undefined, 'running');
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
async function settleFinalResponseClosureForIdleProjection(dialogId, closure) {
|
|
153
|
+
switch (closure.kind) {
|
|
154
|
+
case 'no_final_response':
|
|
155
|
+
case 'blocked_by_different_reply_obligation':
|
|
156
|
+
return false;
|
|
157
|
+
case 'closed_without_active_reply_obligation':
|
|
158
|
+
return true;
|
|
159
|
+
case 'closed_with_matching_reply_obligation':
|
|
160
|
+
await clearMatchingFinalResponseReplyObligation(dialogId, closure);
|
|
161
|
+
return true;
|
|
162
|
+
default: {
|
|
163
|
+
const _exhaustive = closure;
|
|
164
|
+
throw new Error(`Unhandled final response closure kind: ${String(_exhaustive)}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
134
168
|
function classifyRunControlBucket(state) {
|
|
135
169
|
if (!state)
|
|
136
170
|
return 'none';
|
|
@@ -372,6 +406,7 @@ async function setDialogDisplayState(dialogId, displayState, status = 'running')
|
|
|
372
406
|
});
|
|
373
407
|
return;
|
|
374
408
|
}
|
|
409
|
+
let nextDisplayState = displayState;
|
|
375
410
|
let previousDisplayState;
|
|
376
411
|
let previousExecutionMarker;
|
|
377
412
|
// "dead" is irreversible. Once a dialog is marked dead, do not allow overwriting it with
|
|
@@ -397,24 +432,53 @@ async function setDialogDisplayState(dialogId, displayState, status = 'running')
|
|
|
397
432
|
}
|
|
398
433
|
return;
|
|
399
434
|
}
|
|
435
|
+
if (status === 'running' && displayState.kind === 'idle_waiting_user') {
|
|
436
|
+
const finalResponseClosure = await resolveSideDialogFinalResponseClosure({
|
|
437
|
+
dialogId,
|
|
438
|
+
latest,
|
|
439
|
+
});
|
|
440
|
+
const finalResponseClosedForIdle = await settleFinalResponseClosureForIdleProjection(dialogId, finalResponseClosure);
|
|
441
|
+
if (!finalResponseClosedForIdle) {
|
|
442
|
+
const activeReplyObligation = await persistence_1.DialogPersistence.loadActiveTellaskReplyObligation(dialogId, status);
|
|
443
|
+
const pendingReplyObligation = pendingReplyObligationDisplayState(activeReplyObligation);
|
|
444
|
+
if (pendingReplyObligation) {
|
|
445
|
+
nextDisplayState = pendingReplyObligation;
|
|
446
|
+
log.warn('Redirecting idle displayState to pending reply obligation projection', undefined, {
|
|
447
|
+
dialogId: dialogId.valueOf(),
|
|
448
|
+
rootId: dialogId.rootId,
|
|
449
|
+
selfId: dialogId.selfId,
|
|
450
|
+
status,
|
|
451
|
+
targetCallId: activeReplyObligation?.targetCallId ?? null,
|
|
452
|
+
targetDialogId: activeReplyObligation?.targetDialogId.valueOf() ?? null,
|
|
453
|
+
previousDisplayState: latest?.displayState ?? null,
|
|
454
|
+
previousExecutionMarker: latest?.executionMarker ?? null,
|
|
455
|
+
sideDialogFinalResponseCallId: latest?.sideDialogFinalResponse?.callId ?? null,
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
}
|
|
400
460
|
}
|
|
401
461
|
catch (err) {
|
|
402
462
|
log.warn('Failed to check existing displayState before setDialogDisplayState', err, {
|
|
403
463
|
dialogId: dialogId.valueOf(),
|
|
404
464
|
status,
|
|
465
|
+
intendedDisplayState: displayState,
|
|
405
466
|
});
|
|
467
|
+
if (status === 'running' && displayState.kind === 'idle_waiting_user') {
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
406
470
|
}
|
|
407
|
-
const nextExecutionMarker =
|
|
408
|
-
? { kind: 'interrupted', reason:
|
|
409
|
-
:
|
|
410
|
-
? { kind: 'dead', reason:
|
|
471
|
+
const nextExecutionMarker = nextDisplayState.kind === 'stopped'
|
|
472
|
+
? { kind: 'interrupted', reason: nextDisplayState.reason }
|
|
473
|
+
: nextDisplayState.kind === 'dead'
|
|
474
|
+
? { kind: 'dead', reason: nextDisplayState.reason }
|
|
411
475
|
: previousExecutionMarker?.kind === 'interrupted'
|
|
412
476
|
? undefined
|
|
413
477
|
: previousExecutionMarker;
|
|
414
478
|
try {
|
|
415
479
|
await persistence_1.DialogPersistence.mutateDialogLatest(dialogId, () => ({
|
|
416
480
|
kind: 'patch',
|
|
417
|
-
patch: { displayState, executionMarker: nextExecutionMarker },
|
|
481
|
+
patch: { displayState: nextDisplayState, executionMarker: nextExecutionMarker },
|
|
418
482
|
}), status);
|
|
419
483
|
}
|
|
420
484
|
catch (err) {
|
|
@@ -424,11 +488,12 @@ async function setDialogDisplayState(dialogId, displayState, status = 'running')
|
|
|
424
488
|
selfId: dialogId.selfId,
|
|
425
489
|
status,
|
|
426
490
|
intendedDisplayState: displayState,
|
|
491
|
+
persistedDisplayState: nextDisplayState,
|
|
427
492
|
});
|
|
428
493
|
}
|
|
429
494
|
const typed = evt_registry_1.dialogEventRegistry.createTypedEvent(dialogId, {
|
|
430
495
|
type: 'dlg_display_state_evt',
|
|
431
|
-
displayState,
|
|
496
|
+
displayState: nextDisplayState,
|
|
432
497
|
});
|
|
433
498
|
if (broadcastToClients) {
|
|
434
499
|
broadcastToClients(typed);
|
|
@@ -487,10 +552,14 @@ async function computeIdleDisplayState(dlg) {
|
|
|
487
552
|
dialogId: dlg.id,
|
|
488
553
|
latest,
|
|
489
554
|
});
|
|
490
|
-
if (
|
|
491
|
-
finalResponseClosure.kind === 'closed_with_matching_reply_obligation') {
|
|
555
|
+
if (await settleFinalResponseClosureForIdleProjection(dlg.id, finalResponseClosure)) {
|
|
492
556
|
return { kind: 'idle_waiting_user' };
|
|
493
557
|
}
|
|
558
|
+
const activeReplyObligation = await persistence_1.DialogPersistence.loadActiveTellaskReplyObligation(dlg.id, dlg.status);
|
|
559
|
+
const pendingReplyObligation = pendingReplyObligationDisplayState(activeReplyObligation);
|
|
560
|
+
if (pendingReplyObligation) {
|
|
561
|
+
return pendingReplyObligation;
|
|
562
|
+
}
|
|
494
563
|
return { kind: 'idle_waiting_user' };
|
|
495
564
|
}
|
|
496
565
|
async function computeIdleDisplayStateFromPersistence(dialogId) {
|
|
@@ -525,10 +594,14 @@ async function computeIdleDisplayStateFromPersistence(dialogId) {
|
|
|
525
594
|
return q4hSuspension;
|
|
526
595
|
}
|
|
527
596
|
const finalResponseClosure = await resolveSideDialogFinalResponseClosure({ dialogId, latest });
|
|
528
|
-
if (
|
|
529
|
-
finalResponseClosure.kind === 'closed_with_matching_reply_obligation') {
|
|
597
|
+
if (await settleFinalResponseClosureForIdleProjection(dialogId, finalResponseClosure)) {
|
|
530
598
|
return { kind: 'idle_waiting_user' };
|
|
531
599
|
}
|
|
600
|
+
const activeReplyObligation = await persistence_1.DialogPersistence.loadActiveTellaskReplyObligation(dialogId, 'running');
|
|
601
|
+
const pendingReplyObligation = pendingReplyObligationDisplayState(activeReplyObligation);
|
|
602
|
+
if (pendingReplyObligation) {
|
|
603
|
+
return pendingReplyObligation;
|
|
604
|
+
}
|
|
532
605
|
return { kind: 'idle_waiting_user' };
|
|
533
606
|
}
|
|
534
607
|
async function healStaleSideDialogRunControlAfterFinalResponse(args) {
|
|
@@ -549,19 +622,12 @@ async function healStaleSideDialogRunControlAfterFinalResponse(args) {
|
|
|
549
622
|
dialogId: args.dialogId,
|
|
550
623
|
latest: args.latest,
|
|
551
624
|
});
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
case 'closed_with_matching_reply_obligation':
|
|
559
|
-
await persistence_1.DialogPersistence.setActiveTellaskReplyObligation(args.dialogId, undefined, 'running');
|
|
560
|
-
break;
|
|
561
|
-
default: {
|
|
562
|
-
const _exhaustive = finalResponseClosure;
|
|
563
|
-
throw new Error(`Unhandled final response closure kind: ${String(_exhaustive)}`);
|
|
564
|
-
}
|
|
625
|
+
if (finalResponseClosure.kind !== 'closed_without_active_reply_obligation' &&
|
|
626
|
+
finalResponseClosure.kind !== 'closed_with_matching_reply_obligation') {
|
|
627
|
+
return args.latest;
|
|
628
|
+
}
|
|
629
|
+
if (!(await settleFinalResponseClosureForIdleProjection(args.dialogId, finalResponseClosure))) {
|
|
630
|
+
return args.latest;
|
|
565
631
|
}
|
|
566
632
|
const clearedReplyObligation = finalResponseClosure.kind === 'closed_with_matching_reply_obligation';
|
|
567
633
|
log.warn('Healing stale sideDialog run-control flags after final response anchor', undefined, {
|
|
@@ -643,10 +709,14 @@ async function refreshRunControlProjectionFromPersistenceFacts(dialogId, trigger
|
|
|
643
709
|
return q4hSuspension;
|
|
644
710
|
}
|
|
645
711
|
const finalResponseClosure = await resolveSideDialogFinalResponseClosure({ dialogId, latest });
|
|
646
|
-
if (
|
|
647
|
-
finalResponseClosure.kind === 'closed_with_matching_reply_obligation') {
|
|
712
|
+
if (await settleFinalResponseClosureForIdleProjection(dialogId, finalResponseClosure)) {
|
|
648
713
|
return { kind: 'idle_waiting_user' };
|
|
649
714
|
}
|
|
715
|
+
const activeReplyObligation = await persistence_1.DialogPersistence.loadActiveTellaskReplyObligation(dialogId, 'running');
|
|
716
|
+
const pendingReplyObligation = pendingReplyObligationDisplayState(activeReplyObligation);
|
|
717
|
+
if (pendingReplyObligation) {
|
|
718
|
+
return pendingReplyObligation;
|
|
719
|
+
}
|
|
650
720
|
if (latest.executionMarker?.kind === 'interrupted' &&
|
|
651
721
|
latest.executionMarker.reason.kind !== 'pending_reply_obligation') {
|
|
652
722
|
return {
|
package/dist/dialog-fork.js
CHANGED
|
@@ -272,6 +272,14 @@ function countFunctionCalls(events) {
|
|
|
272
272
|
return count;
|
|
273
273
|
}
|
|
274
274
|
function computeRootForkDisplayState(args) {
|
|
275
|
+
const topFrame = args.askerStack?.askerStack[args.askerStack.askerStack.length - 1];
|
|
276
|
+
if (topFrame?.tellaskReplyObligation !== undefined) {
|
|
277
|
+
return {
|
|
278
|
+
kind: 'stopped',
|
|
279
|
+
reason: { kind: 'pending_reply_obligation' },
|
|
280
|
+
continueEnabled: true,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
275
283
|
if (args.action.kind === 'draft_user_text') {
|
|
276
284
|
return { kind: 'idle_waiting_user' };
|
|
277
285
|
}
|
|
@@ -281,6 +289,17 @@ function computeRootForkDisplayState(args) {
|
|
|
281
289
|
}
|
|
282
290
|
return { kind: 'stopped', reason: { kind: 'fork_continue_ready' }, continueEnabled: true };
|
|
283
291
|
}
|
|
292
|
+
function computeSideDialogForkDisplayState(askerStack) {
|
|
293
|
+
const topFrame = askerStack?.askerStack[askerStack.askerStack.length - 1];
|
|
294
|
+
if (topFrame?.tellaskReplyObligation !== undefined) {
|
|
295
|
+
return {
|
|
296
|
+
kind: 'stopped',
|
|
297
|
+
reason: { kind: 'pending_reply_obligation' },
|
|
298
|
+
continueEnabled: true,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
return { kind: 'idle_waiting_user' };
|
|
302
|
+
}
|
|
284
303
|
async function copyArtifactsIfPresent(sourceId, targetId, sourceStatus) {
|
|
285
304
|
const sourceDir = node_path_1.default.join(persistence_1.DialogPersistence.getDialogEventsPath(sourceId, sourceStatus), 'artifacts');
|
|
286
305
|
const targetDir = node_path_1.default.join(persistence_1.DialogPersistence.getDialogEventsPath(targetId, 'running'), 'artifacts');
|
|
@@ -535,32 +554,14 @@ async function persistForkPlan(args) {
|
|
|
535
554
|
if (sourceAskerStack.askerStack.length > 0) {
|
|
536
555
|
await persistence_1.DialogPersistence.saveDialogAskerStack(plan.targetId, rewriteSideDialogAskerStackStateForFork(sourceAskerStack, plan.sourceId.rootId, plan.targetId.rootId), 'running');
|
|
537
556
|
}
|
|
538
|
-
for (const course of plan.retainedCourses) {
|
|
539
|
-
for (const event of course.events) {
|
|
540
|
-
await persistence_1.DialogPersistence.appendEvent(plan.targetId, course.course, rewriteRecordForFork(event, plan.targetId.rootId), 'running');
|
|
541
|
-
}
|
|
542
|
-
}
|
|
543
|
-
await appendForkBaselineState(plan, args.baselineRecordsByParentSelfId.get(plan.targetId.selfId) ?? []);
|
|
544
|
-
await persistence_1.DialogPersistence._saveReminderState(plan.targetId, [...plan.reminders], 'running');
|
|
545
|
-
await persistence_1.DialogPersistence._saveQuestions4HumanState(plan.targetId, [...plan.questions], 'running');
|
|
546
|
-
for (const record of plan.activeCalleeDispatches) {
|
|
547
|
-
await persistence_1.DialogPersistence.appendActiveCalleeDispatch(plan.targetId, record, undefined, 'running');
|
|
548
|
-
}
|
|
549
|
-
await persistence_1.DialogPersistence.saveSideDialogRegistry(plan.targetId, plan.registryEntries.map((entry) => ({
|
|
550
|
-
key: entry.key,
|
|
551
|
-
sideDialogId: new dialog_1.DialogID(entry.sideDialogId, plan.targetId.rootId),
|
|
552
|
-
agentId: entry.agentId,
|
|
553
|
-
sessionSlug: entry.sessionSlug,
|
|
554
|
-
})), 'running');
|
|
555
|
-
await persistence_1.DialogPersistence.saveSideDialogResponses(plan.targetId, [...plan.sideDialogResponses], undefined, 'running');
|
|
556
|
-
await copyArtifactsIfPresent(plan.sourceId, plan.targetId, args.sourceStatus);
|
|
557
557
|
const currentCourseEvents = plan.retainedCourses.find((item) => item.course === plan.currentCourse)?.events ?? [];
|
|
558
558
|
const displayState = plan.targetId.selfId === plan.targetId.rootId
|
|
559
559
|
? computeRootForkDisplayState({
|
|
560
560
|
action: args.action,
|
|
561
561
|
questions: plan.questions,
|
|
562
|
+
askerStack: sourceAskerStack,
|
|
562
563
|
})
|
|
563
|
-
:
|
|
564
|
+
: computeSideDialogForkDisplayState(sourceAskerStack);
|
|
564
565
|
await persistence_1.DialogPersistence.mutateDialogLatest(plan.targetId, () => ({
|
|
565
566
|
kind: 'replace',
|
|
566
567
|
next: {
|
|
@@ -581,6 +582,38 @@ async function persistForkPlan(args) {
|
|
|
581
582
|
: undefined,
|
|
582
583
|
},
|
|
583
584
|
}));
|
|
585
|
+
for (const course of plan.retainedCourses) {
|
|
586
|
+
for (const event of course.events) {
|
|
587
|
+
await persistence_1.DialogPersistence.appendEvent(plan.targetId, course.course, rewriteRecordForFork(event, plan.targetId.rootId), 'running');
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
await appendForkBaselineState(plan, args.baselineRecordsByParentSelfId.get(plan.targetId.selfId) ?? []);
|
|
591
|
+
await persistence_1.DialogPersistence._saveReminderState(plan.targetId, [...plan.reminders], 'running');
|
|
592
|
+
await persistence_1.DialogPersistence._saveQuestions4HumanState(plan.targetId, [...plan.questions], 'running');
|
|
593
|
+
for (const record of plan.activeCalleeDispatches) {
|
|
594
|
+
await persistence_1.DialogPersistence.appendActiveCalleeDispatch(plan.targetId, record, undefined, 'running');
|
|
595
|
+
}
|
|
596
|
+
await persistence_1.DialogPersistence.saveSideDialogRegistry(plan.targetId, plan.registryEntries.map((entry) => ({
|
|
597
|
+
key: entry.key,
|
|
598
|
+
sideDialogId: new dialog_1.DialogID(entry.sideDialogId, plan.targetId.rootId),
|
|
599
|
+
agentId: entry.agentId,
|
|
600
|
+
sessionSlug: entry.sessionSlug,
|
|
601
|
+
})), 'running');
|
|
602
|
+
await persistence_1.DialogPersistence.saveSideDialogResponses(plan.targetId, [...plan.sideDialogResponses], undefined, 'running');
|
|
603
|
+
await copyArtifactsIfPresent(plan.sourceId, plan.targetId, args.sourceStatus);
|
|
604
|
+
await persistence_1.DialogPersistence.mutateDialogLatest(plan.targetId, (previous) => ({
|
|
605
|
+
kind: 'patch',
|
|
606
|
+
patch: {
|
|
607
|
+
currentCourse: plan.currentCourse,
|
|
608
|
+
messageCount: countMessages(currentCourseEvents),
|
|
609
|
+
functionCallCount: countFunctionCalls(currentCourseEvents),
|
|
610
|
+
sideDialogCount: plan.childCount,
|
|
611
|
+
displayState,
|
|
612
|
+
executionMarker: displayState.kind === 'stopped'
|
|
613
|
+
? { kind: 'interrupted', reason: displayState.reason }
|
|
614
|
+
: previous.executionMarker,
|
|
615
|
+
},
|
|
616
|
+
}));
|
|
584
617
|
}
|
|
585
618
|
async function forkMainDialogTreeAtGeneration(args) {
|
|
586
619
|
const sourceRootId = args.sourceRootId.trim();
|