dominds 1.16.2 → 1.16.4
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.d.ts +3 -1
- package/dist/dialog-display-state.js +8 -1
- package/dist/dialog-fork.js +9 -0
- package/dist/dialog-global-registry.d.ts +5 -1
- package/dist/dialog-global-registry.js +45 -1
- package/dist/dialog.d.ts +3 -0
- package/dist/dialog.js +4 -0
- package/dist/llm/gen/anthropic.d.ts +3 -3
- package/dist/llm/gen/anthropic.js +115 -21
- package/dist/llm/gen/codex.js +78 -13
- package/dist/llm/gen/failure-classifier.js +10 -0
- package/dist/llm/gen/openai-compatible.d.ts +6 -3
- package/dist/llm/gen/openai-compatible.js +132 -16
- package/dist/llm/gen/openai.d.ts +2 -2
- package/dist/llm/gen/openai.js +95 -15
- package/dist/llm/gen/tool-result-image-ingest.d.ts +39 -0
- package/dist/llm/gen/tool-result-image-ingest.js +158 -0
- package/dist/llm/gen.d.ts +17 -1
- package/dist/llm/kernel-driver/drive.js +15 -0
- package/dist/llm/kernel-driver/flow.js +230 -177
- package/dist/llm/kernel-driver/loop.js +5 -0
- package/dist/persistence.d.ts +2 -0
- package/dist/persistence.js +107 -0
- package/dist/priming.js +76 -0
- package/package.json +3 -3
- package/webapp/dist/assets/{_basePickBy-BJWCmtUm.js → _basePickBy-BKLfvXfr.js} +3 -3
- package/webapp/dist/assets/_basePickBy-BKLfvXfr.js.map +1 -0
- package/webapp/dist/assets/{_baseUniq-D6k_lGfs.js → _baseUniq-DeO2MBcA.js} +2 -2
- package/webapp/dist/assets/_baseUniq-DeO2MBcA.js.map +1 -0
- package/webapp/dist/assets/{arc-DYDaESgj.js → arc-Bez5-ouI.js} +2 -2
- package/webapp/dist/assets/arc-Bez5-ouI.js.map +1 -0
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-DZMT7dqc.js → architectureDiagram-2XIMDMQ5-BiDh8CGJ.js} +26 -8
- package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-BiDh8CGJ.js.map +1 -0
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-CABpgVAa.js → blockDiagram-WCTKOSBZ-fSZbZ3PY.js} +187 -170
- package/webapp/dist/assets/blockDiagram-WCTKOSBZ-fSZbZ3PY.js.map +1 -0
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-COLZS8Ul.js → c4Diagram-IC4MRINW-C-WxkPD_.js} +4 -4
- package/webapp/dist/assets/c4Diagram-IC4MRINW-C-WxkPD_.js.map +1 -0
- package/webapp/dist/assets/{channel-CYFm9Cri.js → channel-CbXK2-c_.js} +2 -2
- package/webapp/dist/assets/channel-CbXK2-c_.js.map +1 -0
- package/webapp/dist/assets/{chunk-4BX2VUAB-CX_-XbaN.js → chunk-4BX2VUAB-D6CgMaUm.js} +2 -2
- package/webapp/dist/assets/chunk-4BX2VUAB-D6CgMaUm.js.map +1 -0
- package/webapp/dist/assets/{chunk-55IACEB6-ByD-NdBC.js → chunk-55IACEB6-CafQjmEn.js} +2 -2
- package/webapp/dist/assets/chunk-55IACEB6-CafQjmEn.js.map +1 -0
- package/webapp/dist/assets/{chunk-FMBD7UC4-DYGviJnf.js → chunk-FMBD7UC4-CZRe1oW9.js} +2 -2
- package/webapp/dist/assets/chunk-FMBD7UC4-CZRe1oW9.js.map +1 -0
- package/webapp/dist/assets/{chunk-TZMSLE5B-_HISzxl3.js → chunk-JSJVCQXG-C3KJDde2.js} +14 -6
- package/webapp/dist/assets/chunk-JSJVCQXG-C3KJDde2.js.map +1 -0
- package/webapp/dist/assets/{chunk-QN33PNHL-B8DWRL9f.js → chunk-KX2RTZJC-1gHfMJyM.js} +2 -2
- package/webapp/dist/assets/chunk-KX2RTZJC-1gHfMJyM.js.map +1 -0
- package/webapp/dist/assets/{chunk-DI55MBZ5-DV7sdJmQ.js → chunk-NQ4KR5QH-CEZ0VIio.js} +9 -7
- package/webapp/dist/assets/chunk-NQ4KR5QH-CEZ0VIio.js.map +1 -0
- package/webapp/dist/assets/{chunk-QZHKN3VN-B1aYIzMR.js → chunk-QZHKN3VN-BE5nbumW.js} +2 -2
- package/webapp/dist/assets/chunk-QZHKN3VN-BE5nbumW.js.map +1 -0
- package/webapp/dist/assets/{chunk-B4BG7PRW-BANemsDD.js → chunk-WL4C6EOR-CY1FogYe.js} +171 -121
- package/webapp/dist/assets/chunk-WL4C6EOR-CY1FogYe.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-2ON5EDUG-CpyYj1Rc.js → classDiagram-VBA2DB6C-DIAo1m4U.js} +7 -6
- package/webapp/dist/assets/classDiagram-VBA2DB6C-DIAo1m4U.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-CpyYj1Rc.js → classDiagram-v2-RAHNMMFH-DIAo1m4U.js} +7 -6
- package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-DIAo1m4U.js.map +1 -0
- package/webapp/dist/assets/{clone-B_9AxWIU.js → clone-BzZfwhKW.js} +2 -2
- package/webapp/dist/assets/clone-BzZfwhKW.js.map +1 -0
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-17ECLfPR.js → cose-bilkent-S5V4N54A-DIRdD9UY.js} +2 -2
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-DIRdD9UY.js.map +1 -0
- package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
- package/webapp/dist/assets/{dagre-6UL2VRFP-DhRqcF1o.js → dagre-KLK3FWXG-BCEgv7zL.js} +7 -7
- package/webapp/dist/assets/dagre-KLK3FWXG-BCEgv7zL.js.map +1 -0
- package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
- package/webapp/dist/assets/{diagram-PSM6KHXK-lpDT6Wwb.js → diagram-E7M64L7V-CwNdHUlg.js} +10 -10
- package/webapp/dist/assets/diagram-E7M64L7V-CwNdHUlg.js.map +1 -0
- package/webapp/dist/assets/{diagram-QEK2KX5R-ohxbPpDH.js → diagram-IFDJBPK2-DBtRFFBv.js} +9 -8
- package/webapp/dist/assets/diagram-IFDJBPK2-DBtRFFBv.js.map +1 -0
- package/webapp/dist/assets/{diagram-S2PKOQOG-DAFFGfch.js → diagram-P4PSJMXO-BJRf8VnU.js} +8 -8
- package/webapp/dist/assets/diagram-P4PSJMXO-BJRf8VnU.js.map +1 -0
- package/webapp/dist/assets/{erDiagram-Q2GNP2WA-BH-7rI43.js → erDiagram-INFDFZHY-BoZdWdP2.js} +96 -75
- package/webapp/dist/assets/erDiagram-INFDFZHY-BoZdWdP2.js.map +1 -0
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-CdEjFbz4.js → flowDiagram-PKNHOUZH-Dptcw76l.js} +98 -81
- package/webapp/dist/assets/flowDiagram-PKNHOUZH-Dptcw76l.js.map +1 -0
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-Cju2t-lK.js → ganttDiagram-A5KZAMGK-qM3zsgxI.js} +28 -3
- package/webapp/dist/assets/ganttDiagram-A5KZAMGK-qM3zsgxI.js.map +1 -0
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-CUJ5oxCg.js → gitGraphDiagram-K3NZZRJ6-125S1YW0.js} +38 -46
- package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-125S1YW0.js.map +1 -0
- package/webapp/dist/assets/graph-PACfG8qk.js +782 -0
- package/webapp/dist/assets/graph-PACfG8qk.js.map +1 -0
- package/webapp/dist/assets/{index-BLnM-uON.js → index-D8Klc1n-.js} +1114 -1048
- package/webapp/dist/assets/{index-BLnM-uON.js.map → index-D8Klc1n-.js.map} +1 -1
- package/webapp/dist/assets/{index-xvYYeHuy.css → index-YaxF76or.css} +1 -1
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-Df8p0okQ.js → infoDiagram-LFFYTUFH-B9vrFy_9.js} +7 -7
- package/webapp/dist/assets/infoDiagram-LFFYTUFH-B9vrFy_9.js.map +1 -0
- package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-CzcXR0Tc.js +966 -0
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-CzcXR0Tc.js.map +1 -0
- package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-BXMl8H-d.js → journeyDiagram-4ABVD52K-BzoWs6ft.js} +5 -5
- package/webapp/dist/assets/journeyDiagram-4ABVD52K-BzoWs6ft.js.map +1 -0
- package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-Cc5RwCEh.js → kanban-definition-K7BYSVSG-TJm1UiSH.js} +5 -3
- package/webapp/dist/assets/kanban-definition-K7BYSVSG-TJm1UiSH.js.map +1 -0
- package/webapp/dist/assets/{layout-BB2SvQcE.js → layout-D-kg27bk.js} +5 -5
- package/webapp/dist/assets/layout-D-kg27bk.js.map +1 -0
- package/webapp/dist/assets/{linear-Cj50lA0a.js → linear-l0qAHpRW.js} +2 -2
- package/webapp/dist/assets/linear-l0qAHpRW.js.map +1 -0
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-BLBklJVX.js → mindmap-definition-YRQLILUH-D4282T7u.js} +7 -5
- package/webapp/dist/assets/mindmap-definition-YRQLILUH-D4282T7u.js.map +1 -0
- package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
- package/webapp/dist/assets/{pieDiagram-ADFJNKIX-BQrOgSc-.js → pieDiagram-SKSYHLDU-BKJYIUkU.js} +8 -8
- package/webapp/dist/assets/pieDiagram-SKSYHLDU-BKJYIUkU.js.map +1 -0
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-C62TxtsO.js → quadrantDiagram-337W2JSQ-yjekONzR.js} +3 -3
- package/webapp/dist/assets/quadrantDiagram-337W2JSQ-yjekONzR.js.map +1 -0
- package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-Is6Q3osM.js → requirementDiagram-Z7DCOOCP-DMH1wutn.js} +16 -6
- package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-DMH1wutn.js.map +1 -0
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-CCAW8Dr2.js → sankeyDiagram-WA2Y5GQK-Cs4ACtdq.js} +2 -2
- package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-Cs4ACtdq.js.map +1 -0
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-DpODpbl6.js → sequenceDiagram-2WXFIKYE-4sriOpV9.js} +601 -201
- package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-4sriOpV9.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-B8LHaf5T.js → stateDiagram-RAJIS63D-BUMObt6W.js} +9 -9
- package/webapp/dist/assets/stateDiagram-RAJIS63D-BUMObt6W.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-4FzTkpgz.js → stateDiagram-v2-FVOUBMTO-DazzpfnH.js} +5 -5
- package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-DazzpfnH.js.map +1 -0
- package/webapp/dist/assets/{timeline-definition-IT6M3QCI-Ckxc4qZe.js → timeline-definition-YZTLITO2-CdChFPnp.js} +3 -3
- package/webapp/dist/assets/timeline-definition-YZTLITO2-CdChFPnp.js.map +1 -0
- package/webapp/dist/assets/{treemap-GDKQZRPO-QQa4vKMv.js → treemap-KZPCXAKY-DW9mBchB.js} +37 -24
- package/webapp/dist/assets/treemap-KZPCXAKY-DW9mBchB.js.map +1 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-Bu9N_8Cu.js +2487 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-Bu9N_8Cu.js.map +1 -0
- package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-Ba2uJcs6.js → xychartDiagram-JWTSCODW-BI_N4JiZ.js} +4 -4
- package/webapp/dist/assets/xychartDiagram-JWTSCODW-BI_N4JiZ.js.map +1 -0
- package/webapp/dist/index.html +2 -2
- package/webapp/dist/assets/_basePickBy-BJWCmtUm.js.map +0 -1
- package/webapp/dist/assets/_baseUniq-D6k_lGfs.js.map +0 -1
- package/webapp/dist/assets/arc-DYDaESgj.js.map +0 -1
- package/webapp/dist/assets/architectureDiagram-VXUJARFQ-DZMT7dqc.js.map +0 -1
- package/webapp/dist/assets/blockDiagram-VD42YOAC-CABpgVAa.js.map +0 -1
- package/webapp/dist/assets/c4Diagram-YG6GDRKO-COLZS8Ul.js.map +0 -1
- package/webapp/dist/assets/channel-CYFm9Cri.js.map +0 -1
- package/webapp/dist/assets/chunk-4BX2VUAB-CX_-XbaN.js.map +0 -1
- package/webapp/dist/assets/chunk-55IACEB6-ByD-NdBC.js.map +0 -1
- package/webapp/dist/assets/chunk-B4BG7PRW-BANemsDD.js.map +0 -1
- package/webapp/dist/assets/chunk-DI55MBZ5-DV7sdJmQ.js.map +0 -1
- package/webapp/dist/assets/chunk-FMBD7UC4-DYGviJnf.js.map +0 -1
- package/webapp/dist/assets/chunk-QN33PNHL-B8DWRL9f.js.map +0 -1
- package/webapp/dist/assets/chunk-QZHKN3VN-B1aYIzMR.js.map +0 -1
- package/webapp/dist/assets/chunk-TZMSLE5B-_HISzxl3.js.map +0 -1
- package/webapp/dist/assets/classDiagram-2ON5EDUG-CpyYj1Rc.js.map +0 -1
- package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-CpyYj1Rc.js.map +0 -1
- package/webapp/dist/assets/clone-B_9AxWIU.js.map +0 -1
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-17ECLfPR.js.map +0 -1
- package/webapp/dist/assets/dagre-6UL2VRFP-DhRqcF1o.js.map +0 -1
- package/webapp/dist/assets/diagram-PSM6KHXK-lpDT6Wwb.js.map +0 -1
- package/webapp/dist/assets/diagram-QEK2KX5R-ohxbPpDH.js.map +0 -1
- package/webapp/dist/assets/diagram-S2PKOQOG-DAFFGfch.js.map +0 -1
- package/webapp/dist/assets/erDiagram-Q2GNP2WA-BH-7rI43.js.map +0 -1
- package/webapp/dist/assets/flowDiagram-NV44I4VS-CdEjFbz4.js.map +0 -1
- package/webapp/dist/assets/ganttDiagram-JELNMOA3-Cju2t-lK.js.map +0 -1
- package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-CUJ5oxCg.js.map +0 -1
- package/webapp/dist/assets/graph-mhcc7ldf.js +0 -425
- package/webapp/dist/assets/graph-mhcc7ldf.js.map +0 -1
- package/webapp/dist/assets/infoDiagram-HS3SLOUP-Df8p0okQ.js.map +0 -1
- package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-BXMl8H-d.js.map +0 -1
- package/webapp/dist/assets/kanban-definition-3W4ZIXB7-Cc5RwCEh.js.map +0 -1
- package/webapp/dist/assets/layout-BB2SvQcE.js.map +0 -1
- package/webapp/dist/assets/linear-Cj50lA0a.js.map +0 -1
- package/webapp/dist/assets/mindmap-definition-VGOIOE7T-BLBklJVX.js.map +0 -1
- package/webapp/dist/assets/pieDiagram-ADFJNKIX-BQrOgSc-.js.map +0 -1
- package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-C62TxtsO.js.map +0 -1
- package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-Is6Q3osM.js.map +0 -1
- package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-CCAW8Dr2.js.map +0 -1
- package/webapp/dist/assets/sequenceDiagram-WL72ISMW-DpODpbl6.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-FKZM4ZOC-B8LHaf5T.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-4FzTkpgz.js.map +0 -1
- package/webapp/dist/assets/timeline-definition-IT6M3QCI-Ckxc4qZe.js.map +0 -1
- package/webapp/dist/assets/treemap-GDKQZRPO-QQa4vKMv.js.map +0 -1
- package/webapp/dist/assets/xychartDiagram-PRI3JC2R-Ba2uJcs6.js.map +0 -1
package/dist/llm/gen.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { LlmUsageStats } from '@longrun-ai/kernel/types/context-health';
|
|
2
2
|
import type { DialogDisplayTextI18n } from '@longrun-ai/kernel/types/display-state';
|
|
3
|
-
import type { ReasoningPayload } from '@longrun-ai/kernel/types/storage';
|
|
3
|
+
import type { ReasoningPayload, ToolResultImageArtifact, ToolResultImageDisposition } from '@longrun-ai/kernel/types/storage';
|
|
4
4
|
import { Team } from '../team';
|
|
5
5
|
import { FuncTool } from '../tool';
|
|
6
6
|
import { ChatMessage, ProviderConfig } from './client';
|
|
@@ -26,6 +26,9 @@ export type LlmBatchOutput = {
|
|
|
26
26
|
} | {
|
|
27
27
|
kind: 'native_tool_call';
|
|
28
28
|
call: OpenAiResponsesNativeToolCall;
|
|
29
|
+
} | {
|
|
30
|
+
kind: 'tool_result_image_ingest';
|
|
31
|
+
ingest: ToolResultImageIngest;
|
|
29
32
|
};
|
|
30
33
|
export interface LlmBatchResult {
|
|
31
34
|
messages: ChatMessage[];
|
|
@@ -46,8 +49,20 @@ export type LlmFailureClassifier = (error: unknown) => LlmFailureDisposition | u
|
|
|
46
49
|
export interface LlmRequestContext {
|
|
47
50
|
dialogSelfId: string;
|
|
48
51
|
dialogRootId: string;
|
|
52
|
+
providerKey?: string;
|
|
53
|
+
modelKey?: string;
|
|
49
54
|
promptCacheKey?: string;
|
|
50
55
|
}
|
|
56
|
+
export type ToolResultImageIngest = {
|
|
57
|
+
toolCallId: string;
|
|
58
|
+
toolName: string;
|
|
59
|
+
artifact: ToolResultImageArtifact;
|
|
60
|
+
provider: string;
|
|
61
|
+
model: string;
|
|
62
|
+
disposition: ToolResultImageDisposition;
|
|
63
|
+
message: string;
|
|
64
|
+
detail?: string;
|
|
65
|
+
};
|
|
51
66
|
export type CodexLlmWebSearchAction = {
|
|
52
67
|
type: 'search';
|
|
53
68
|
query?: string;
|
|
@@ -120,6 +135,7 @@ export interface LlmStreamReceiver {
|
|
|
120
135
|
funcCall: (callId: string, name: string, args: string) => Promise<void>;
|
|
121
136
|
webSearchCall?: (call: LlmWebSearchCall) => Promise<void>;
|
|
122
137
|
nativeToolCall?: (call: OpenAiResponsesNativeToolCall) => Promise<void>;
|
|
138
|
+
toolResultImageIngest?: (ingest: ToolResultImageIngest) => Promise<void>;
|
|
123
139
|
streamError?: (detail: string) => Promise<void>;
|
|
124
140
|
}
|
|
125
141
|
export interface LlmGenerator {
|
|
@@ -235,6 +235,9 @@ function resolveKernelDriverRetryPolicy(providerCfg) {
|
|
|
235
235
|
function hasMeaningfulBatchOutput(batch) {
|
|
236
236
|
if (Array.isArray(batch.outputs) && batch.outputs.length > 0) {
|
|
237
237
|
for (const output of batch.outputs) {
|
|
238
|
+
if (output.kind === 'tool_result_image_ingest') {
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
238
241
|
if (output.kind !== 'message') {
|
|
239
242
|
return true;
|
|
240
243
|
}
|
|
@@ -1602,6 +1605,8 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1602
1605
|
const batchResult = await llmGen.genMoreMessages(providerCfg, agent, systemPrompt, funcTools, {
|
|
1603
1606
|
dialogSelfId: dlg.id.selfId,
|
|
1604
1607
|
dialogRootId: dlg.id.rootId,
|
|
1608
|
+
providerKey: provider,
|
|
1609
|
+
modelKey: model,
|
|
1605
1610
|
promptCacheKey: `${dlg.id.selfId}:c${String(dlg.currentCourse)}`,
|
|
1606
1611
|
}, ctxMsgs, dlg.activeGenSeq, abortSignal);
|
|
1607
1612
|
if (!hasMeaningfulBatchOutput(batchResult)) {
|
|
@@ -1776,6 +1781,10 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1776
1781
|
sawNativeToolSideChannelOutput = true;
|
|
1777
1782
|
await dlg.nativeToolCall(call);
|
|
1778
1783
|
},
|
|
1784
|
+
toolResultImageIngest: async (ingest) => {
|
|
1785
|
+
throwIfAborted(abortSignal, dlg);
|
|
1786
|
+
await dlg.toolResultImageIngest(ingest);
|
|
1787
|
+
},
|
|
1779
1788
|
};
|
|
1780
1789
|
const res = await (0, runtime_1.runLlmRequestWithRetry)({
|
|
1781
1790
|
dlg,
|
|
@@ -1810,6 +1819,8 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1810
1819
|
const streamResult = await llmGen.genToReceiver(providerCfg, agent, systemPrompt, funcTools, {
|
|
1811
1820
|
dialogSelfId: dlg.id.selfId,
|
|
1812
1821
|
dialogRootId: dlg.id.rootId,
|
|
1822
|
+
providerKey: provider,
|
|
1823
|
+
modelKey: model,
|
|
1813
1824
|
promptCacheKey: `${dlg.id.selfId}:c${String(dlg.currentCourse)}`,
|
|
1814
1825
|
}, ctxMsgs, receiver, dlg.activeGenSeq, abortSignal);
|
|
1815
1826
|
const hasThinkingContent = currentThinkingContent.trim() !== '';
|
|
@@ -1884,6 +1895,10 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1884
1895
|
await dlg.nativeToolCall(output.call);
|
|
1885
1896
|
break;
|
|
1886
1897
|
}
|
|
1898
|
+
case 'tool_result_image_ingest': {
|
|
1899
|
+
await dlg.toolResultImageIngest(output.ingest);
|
|
1900
|
+
break;
|
|
1901
|
+
}
|
|
1887
1902
|
default: {
|
|
1888
1903
|
const _exhaustive = output;
|
|
1889
1904
|
throw new Error(`Unhandled batch output kind: ${String(_exhaustive)}`);
|
|
@@ -74,6 +74,38 @@ async function loadPendingDiagnosticsSnapshot(args) {
|
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
+
async function clearConsumedDeferredRootQueueIfIdle(dialog) {
|
|
78
|
+
if (dialog.id.selfId !== dialog.id.rootId) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (!dialog_global_registry_1.globalDialogRegistry.get(dialog.id.rootId)) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const suspension = await dialog.getSuspensionStatus();
|
|
85
|
+
if (dialog.hasUpNext() || !suspension.canDrive) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const persistedNeedsDrive = await persistence_1.DialogPersistence.getNeedsDrive(dialog.id);
|
|
89
|
+
const registryNeedsDrive = dialog_global_registry_1.globalDialogRegistry.isMarkedNeedingDrive(dialog.id.rootId);
|
|
90
|
+
if (!registryNeedsDrive && !persistedNeedsDrive) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
await persistence_1.DialogPersistence.setNeedsDrive(dialog.id, false, dialog.status);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
log_1.log.error('kernel-driver failed to persist consumed deferred root queue cleanup', error, {
|
|
98
|
+
dialogId: dialog.id.valueOf(),
|
|
99
|
+
rootId: dialog.id.rootId,
|
|
100
|
+
selfId: dialog.id.selfId,
|
|
101
|
+
});
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
dialog_global_registry_1.globalDialogRegistry.markNotNeedingDrive(dialog.id.rootId, {
|
|
105
|
+
source: 'kernel_driver_flow_tail',
|
|
106
|
+
reason: 'root_idle_after_consuming_deferred_queue',
|
|
107
|
+
});
|
|
108
|
+
}
|
|
77
109
|
function hasNoPromptSubdialogResumeEntitlement(dialog, driveOptions) {
|
|
78
110
|
const entitlement = driveOptions?.noPromptSubdialogResumeEntitlement;
|
|
79
111
|
if (!entitlement) {
|
|
@@ -490,203 +522,224 @@ async function executeDriveRound(args) {
|
|
|
490
522
|
if (!interruptedBySignal) {
|
|
491
523
|
followUp = dialog.takeUpNext();
|
|
492
524
|
}
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
await (0, subdialog_1.supplySubdialogResponseToAssignedCallerIfPendingV2)({
|
|
506
|
-
subdialog: dialog,
|
|
507
|
-
responseText: driveResult.fbrConclusion.responseText,
|
|
508
|
-
responseGenseq: driveResult.fbrConclusion.responseGenseq,
|
|
509
|
-
scheduleDrive: args.scheduleDrive,
|
|
510
|
-
});
|
|
511
|
-
}
|
|
512
|
-
else if (driveResult.lastAssistantSayingContent !== null) {
|
|
513
|
-
const hasInProgressFunctionCall = typeof driveResult.lastFunctionCallGenseq === 'number' &&
|
|
514
|
-
Number.isFinite(driveResult.lastFunctionCallGenseq) &&
|
|
515
|
-
driveResult.lastFunctionCallGenseq > 0 &&
|
|
516
|
-
(typeof driveResult.lastAssistantSayingGenseq !== 'number' ||
|
|
517
|
-
!Number.isFinite(driveResult.lastAssistantSayingGenseq) ||
|
|
518
|
-
driveResult.lastAssistantSayingGenseq <= driveResult.lastFunctionCallGenseq);
|
|
519
|
-
if (hasInProgressFunctionCall) {
|
|
520
|
-
// Any function call means execution is still in-progress. Only supply when the callee
|
|
521
|
-
// has produced a newer assistant saying after the latest function call.
|
|
522
|
-
log_1.log.debug('kernel-driver skip subdialog response supply because latest saying is not after function calls', undefined, {
|
|
523
|
-
rootId: dialog.id.rootId,
|
|
524
|
-
selfId: dialog.id.selfId,
|
|
525
|
-
lastAssistantSayingGenseq: driveResult.lastAssistantSayingGenseq,
|
|
526
|
-
lastFunctionCallGenseq: driveResult.lastFunctionCallGenseq,
|
|
527
|
-
});
|
|
528
|
-
}
|
|
529
|
-
else {
|
|
530
|
-
const hasFollowUp = followUp !== undefined;
|
|
531
|
-
const suspension = await dialog.getSuspensionStatus();
|
|
532
|
-
if (!suspension.canDrive || hasFollowUp) {
|
|
533
|
-
log_1.log.debug('kernel-driver skip subdialog response supply while callee is not finalized', undefined, {
|
|
534
|
-
rootId: dialog.id.rootId,
|
|
535
|
-
selfId: dialog.id.selfId,
|
|
536
|
-
waitingQ4H: suspension.q4h,
|
|
537
|
-
waitingSubdialogs: suspension.subdialogs,
|
|
538
|
-
hasFollowUp,
|
|
525
|
+
let tailError;
|
|
526
|
+
try {
|
|
527
|
+
if (dialog instanceof dialog_1.SubDialog &&
|
|
528
|
+
driveResult &&
|
|
529
|
+
!interruptedBySignal &&
|
|
530
|
+
(driveResult.fbrConclusion !== undefined || driveResult.lastAssistantSayingContent !== null)) {
|
|
531
|
+
if (driveResult.fbrConclusion) {
|
|
532
|
+
await (0, subdialog_1.supplySubdialogResponseToAssignedCallerIfPendingV2)({
|
|
533
|
+
subdialog: dialog,
|
|
534
|
+
responseText: driveResult.fbrConclusion.responseText,
|
|
535
|
+
responseGenseq: driveResult.fbrConclusion.responseGenseq,
|
|
536
|
+
scheduleDrive: args.scheduleDrive,
|
|
539
537
|
});
|
|
540
538
|
}
|
|
541
|
-
if (
|
|
542
|
-
|
|
543
|
-
|
|
539
|
+
else if (driveResult.lastAssistantSayingContent !== null) {
|
|
540
|
+
const hasInProgressFunctionCall = typeof driveResult.lastFunctionCallGenseq === 'number' &&
|
|
541
|
+
Number.isFinite(driveResult.lastFunctionCallGenseq) &&
|
|
542
|
+
driveResult.lastFunctionCallGenseq > 0 &&
|
|
543
|
+
(typeof driveResult.lastAssistantSayingGenseq !== 'number' ||
|
|
544
|
+
!Number.isFinite(driveResult.lastAssistantSayingGenseq) ||
|
|
545
|
+
driveResult.lastAssistantSayingGenseq <= driveResult.lastFunctionCallGenseq);
|
|
546
|
+
if (hasInProgressFunctionCall) {
|
|
547
|
+
// Any function call means execution is still in-progress. Only supply when the callee
|
|
548
|
+
// has produced a newer assistant saying after the latest function call.
|
|
549
|
+
log_1.log.debug('kernel-driver skip subdialog response supply because latest saying is not after function calls', undefined, {
|
|
544
550
|
rootId: dialog.id.rootId,
|
|
545
551
|
selfId: dialog.id.selfId,
|
|
552
|
+
lastAssistantSayingGenseq: driveResult.lastAssistantSayingGenseq,
|
|
553
|
+
lastFunctionCallGenseq: driveResult.lastFunctionCallGenseq,
|
|
546
554
|
});
|
|
547
555
|
}
|
|
548
556
|
else {
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
supplied = await (0, subdialog_1.supplySubdialogResponseToSpecificCallerIfPendingV2)({
|
|
559
|
-
subdialog: dialog,
|
|
560
|
-
responseText: driveResult.lastAssistantSayingContent,
|
|
561
|
-
responseGenseq,
|
|
562
|
-
target: subdialogReplyTarget,
|
|
563
|
-
deliveryMode: 'direct_fallback',
|
|
564
|
-
replyResolution: {
|
|
565
|
-
callId: directFallbackCallId,
|
|
566
|
-
replyCallName: activeTellaskReplyDirective.expectedReplyCallName,
|
|
567
|
-
},
|
|
568
|
-
scheduleDrive: args.scheduleDrive,
|
|
557
|
+
const hasFollowUp = followUp !== undefined;
|
|
558
|
+
const suspension = await dialog.getSuspensionStatus();
|
|
559
|
+
if (!suspension.canDrive || hasFollowUp) {
|
|
560
|
+
log_1.log.debug('kernel-driver skip subdialog response supply while callee is not finalized', undefined, {
|
|
561
|
+
rootId: dialog.id.rootId,
|
|
562
|
+
selfId: dialog.id.selfId,
|
|
563
|
+
waitingQ4H: suspension.q4h,
|
|
564
|
+
waitingSubdialogs: suspension.subdialogs,
|
|
565
|
+
hasFollowUp,
|
|
569
566
|
});
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
replyResolution: {
|
|
577
|
-
callId: directFallbackCallId,
|
|
578
|
-
replyCallName: activeTellaskReplyDirective.expectedReplyCallName,
|
|
579
|
-
},
|
|
580
|
-
scheduleDrive: args.scheduleDrive,
|
|
567
|
+
}
|
|
568
|
+
if (suspension.canDrive && !hasFollowUp) {
|
|
569
|
+
if (!activeTellaskReplyDirective) {
|
|
570
|
+
log_1.log.debug('kernel-driver skip implicit subdialog reply because no active tellask reply directive is bound to this drive', undefined, {
|
|
571
|
+
rootId: dialog.id.rootId,
|
|
572
|
+
selfId: dialog.id.selfId,
|
|
581
573
|
});
|
|
582
574
|
}
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
575
|
+
else {
|
|
576
|
+
if (typeof driveResult.lastAssistantSayingGenseq !== 'number' ||
|
|
577
|
+
!Number.isFinite(driveResult.lastAssistantSayingGenseq) ||
|
|
578
|
+
driveResult.lastAssistantSayingGenseq <= 0) {
|
|
579
|
+
throw new Error(`Subdialog response supply invariant violation: missing lastAssistantSayingGenseq for dialog=${dialog.id.valueOf()}`);
|
|
580
|
+
}
|
|
581
|
+
const responseGenseq = Math.floor(driveResult.lastAssistantSayingGenseq);
|
|
582
|
+
const directFallbackCallId = `direct-fallback-${(0, id_1.generateShortId)()}`;
|
|
583
|
+
let supplied = false;
|
|
584
|
+
if (subdialogReplyTarget) {
|
|
585
|
+
supplied = await (0, subdialog_1.supplySubdialogResponseToSpecificCallerIfPendingV2)({
|
|
586
|
+
subdialog: dialog,
|
|
587
|
+
responseText: driveResult.lastAssistantSayingContent,
|
|
588
|
+
responseGenseq,
|
|
589
|
+
target: subdialogReplyTarget,
|
|
590
|
+
deliveryMode: 'direct_fallback',
|
|
591
|
+
replyResolution: {
|
|
592
|
+
callId: directFallbackCallId,
|
|
593
|
+
replyCallName: activeTellaskReplyDirective.expectedReplyCallName,
|
|
594
|
+
},
|
|
595
|
+
scheduleDrive: args.scheduleDrive,
|
|
596
|
+
});
|
|
597
|
+
if (!supplied) {
|
|
598
|
+
supplied = await (0, subdialog_1.supplySubdialogResponseToAssignedCallerIfPendingV2)({
|
|
599
|
+
subdialog: dialog,
|
|
600
|
+
responseText: driveResult.lastAssistantSayingContent,
|
|
601
|
+
responseGenseq,
|
|
602
|
+
deliveryMode: 'direct_fallback',
|
|
603
|
+
replyResolution: {
|
|
604
|
+
callId: directFallbackCallId,
|
|
605
|
+
replyCallName: activeTellaskReplyDirective.expectedReplyCallName,
|
|
606
|
+
},
|
|
607
|
+
scheduleDrive: args.scheduleDrive,
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
else {
|
|
612
|
+
supplied = await (0, subdialog_1.supplySubdialogResponseToAssignedCallerIfPendingV2)({
|
|
613
|
+
subdialog: dialog,
|
|
614
|
+
responseText: driveResult.lastAssistantSayingContent,
|
|
615
|
+
responseGenseq,
|
|
616
|
+
deliveryMode: 'direct_fallback',
|
|
617
|
+
replyResolution: {
|
|
618
|
+
callId: directFallbackCallId,
|
|
619
|
+
replyCallName: activeTellaskReplyDirective.expectedReplyCallName,
|
|
620
|
+
},
|
|
621
|
+
scheduleDrive: args.scheduleDrive,
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
if (!supplied && subdialogReplyTarget) {
|
|
625
|
+
const diagnostics = await loadPendingDiagnosticsSnapshot({
|
|
626
|
+
rootId: dialog.id.rootId,
|
|
627
|
+
ownerDialogId: subdialogReplyTarget.ownerDialogId,
|
|
628
|
+
expectedSubdialogId: dialog.id.selfId,
|
|
629
|
+
status: dialog.status,
|
|
630
|
+
});
|
|
631
|
+
log_1.log.debug('kernel-driver failed to supply subdialog response to specific caller', undefined, {
|
|
632
|
+
calleeId: dialog.id.valueOf(),
|
|
633
|
+
targetOwner: subdialogReplyTarget.ownerDialogId,
|
|
634
|
+
targetOwnerDialogId: subdialogReplyTarget.ownerDialogId,
|
|
635
|
+
targetCallType: subdialogReplyTarget.callType,
|
|
636
|
+
targetCallId: subdialogReplyTarget.callId,
|
|
637
|
+
diagnostics,
|
|
638
|
+
});
|
|
639
|
+
}
|
|
640
|
+
}
|
|
612
641
|
}
|
|
613
642
|
}
|
|
614
643
|
}
|
|
615
644
|
}
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
!
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
645
|
+
if (!(dialog instanceof dialog_1.SubDialog) &&
|
|
646
|
+
driveResult &&
|
|
647
|
+
!interruptedBySignal &&
|
|
648
|
+
driveResult.lastAssistantSayingContent !== null &&
|
|
649
|
+
activeTellaskReplyDirective?.expectedReplyCallName === 'replyTellaskBack' &&
|
|
650
|
+
followUp === undefined) {
|
|
651
|
+
const hasInProgressFunctionCall = typeof driveResult.lastFunctionCallGenseq === 'number' &&
|
|
652
|
+
Number.isFinite(driveResult.lastFunctionCallGenseq) &&
|
|
653
|
+
driveResult.lastFunctionCallGenseq > 0 &&
|
|
654
|
+
(typeof driveResult.lastAssistantSayingGenseq !== 'number' ||
|
|
655
|
+
!Number.isFinite(driveResult.lastAssistantSayingGenseq) ||
|
|
656
|
+
driveResult.lastAssistantSayingGenseq <= driveResult.lastFunctionCallGenseq);
|
|
657
|
+
if (!hasInProgressFunctionCall) {
|
|
658
|
+
if (!activePromptWasReplyToolReminder) {
|
|
659
|
+
const language = (0, work_language_1.getWorkLanguage)();
|
|
660
|
+
followUp = {
|
|
661
|
+
prompt: await buildReplyToolReminderPrompt({
|
|
662
|
+
dlg: dialog,
|
|
663
|
+
directive: activeTellaskReplyDirective,
|
|
664
|
+
language,
|
|
665
|
+
}),
|
|
666
|
+
msgId: (0, id_1.generateShortId)(),
|
|
667
|
+
grammar: 'markdown',
|
|
668
|
+
origin: 'runtime',
|
|
669
|
+
userLanguageCode: language,
|
|
670
|
+
tellaskReplyDirective: activeTellaskReplyDirective,
|
|
671
|
+
};
|
|
672
|
+
log_1.log.debug('kernel-driver queued replyTellaskBack reminder prompt after plain reply', undefined, {
|
|
673
|
+
dialogId: dialog.id.valueOf(),
|
|
674
|
+
targetCallId: activeTellaskReplyDirective.targetCallId,
|
|
675
|
+
});
|
|
676
|
+
}
|
|
677
|
+
else {
|
|
678
|
+
await (0, tellask_special_1.deliverTellaskBackReplyFromDirective)({
|
|
679
|
+
dlg: dialog,
|
|
680
|
+
directive: activeTellaskReplyDirective,
|
|
681
|
+
replyContent: driveResult.lastAssistantSayingContent,
|
|
682
|
+
callbacks: {
|
|
683
|
+
scheduleDrive: args.scheduleDrive,
|
|
684
|
+
driveDialog: args.driveDialog,
|
|
685
|
+
},
|
|
686
|
+
deliveryMode: 'direct_fallback',
|
|
687
|
+
});
|
|
688
|
+
await dialog.appendTellaskReplyResolution({
|
|
689
|
+
callId: `direct-fallback-${(0, id_1.generateShortId)()}`,
|
|
690
|
+
replyCallName: 'replyTellaskBack',
|
|
691
|
+
targetCallId: activeTellaskReplyDirective.targetCallId,
|
|
692
|
+
});
|
|
693
|
+
}
|
|
694
|
+
}
|
|
649
695
|
}
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
696
|
+
if (followUp) {
|
|
697
|
+
args.scheduleDrive(dialog, {
|
|
698
|
+
waitInQue: true,
|
|
699
|
+
driveOptions: {
|
|
700
|
+
source: 'kernel_driver_follow_up',
|
|
701
|
+
reason: 'follow_up_prompt',
|
|
702
|
+
},
|
|
703
|
+
humanPrompt: {
|
|
704
|
+
content: followUp.prompt,
|
|
705
|
+
msgId: followUp.msgId,
|
|
706
|
+
grammar: followUp.grammar ?? 'markdown',
|
|
707
|
+
origin: followUp.origin,
|
|
708
|
+
userLanguageCode: followUp.userLanguageCode === 'zh' || followUp.userLanguageCode === 'en'
|
|
709
|
+
? followUp.userLanguageCode
|
|
710
|
+
: undefined,
|
|
711
|
+
q4hAnswerCallId: followUp.q4hAnswerCallId,
|
|
712
|
+
tellaskReplyDirective: followUp.tellaskReplyDirective,
|
|
713
|
+
skipTaskdoc: followUp.skipTaskdoc,
|
|
714
|
+
subdialogReplyTarget: followUp.subdialogReplyTarget,
|
|
715
|
+
runControl: followUp.runControl,
|
|
658
716
|
},
|
|
659
|
-
deliveryMode: 'direct_fallback',
|
|
660
717
|
});
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
catch (error) {
|
|
721
|
+
tailError = error;
|
|
722
|
+
}
|
|
723
|
+
if (tailError === undefined) {
|
|
724
|
+
try {
|
|
725
|
+
await clearConsumedDeferredRootQueueIfIdle(dialog);
|
|
726
|
+
}
|
|
727
|
+
catch (error) {
|
|
728
|
+
log_1.log.error('kernel-driver failed to reconcile consumed deferred root queue after tail', error, {
|
|
729
|
+
dialogId: dialog.id.valueOf(),
|
|
730
|
+
rootId: dialog.id.rootId,
|
|
731
|
+
selfId: dialog.id.selfId,
|
|
665
732
|
});
|
|
666
733
|
}
|
|
667
734
|
}
|
|
735
|
+
if (tailError !== undefined) {
|
|
736
|
+
throw tailError;
|
|
737
|
+
}
|
|
668
738
|
}
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
reason: 'follow_up_prompt',
|
|
675
|
-
},
|
|
676
|
-
humanPrompt: {
|
|
677
|
-
content: followUp.prompt,
|
|
678
|
-
msgId: followUp.msgId,
|
|
679
|
-
grammar: followUp.grammar ?? 'markdown',
|
|
680
|
-
origin: followUp.origin,
|
|
681
|
-
userLanguageCode: followUp.userLanguageCode === 'zh' || followUp.userLanguageCode === 'en'
|
|
682
|
-
? followUp.userLanguageCode
|
|
683
|
-
: undefined,
|
|
684
|
-
q4hAnswerCallId: followUp.q4hAnswerCallId,
|
|
685
|
-
tellaskReplyDirective: followUp.tellaskReplyDirective,
|
|
686
|
-
skipTaskdoc: followUp.skipTaskdoc,
|
|
687
|
-
subdialogReplyTarget: followUp.subdialogReplyTarget,
|
|
688
|
-
runControl: followUp.runControl,
|
|
689
|
-
},
|
|
690
|
-
});
|
|
739
|
+
finally {
|
|
740
|
+
if (activeRunPrimed && ownsActiveRun) {
|
|
741
|
+
(0, dialog_display_state_1.clearActiveRun)(dialog.id);
|
|
742
|
+
}
|
|
743
|
+
release();
|
|
691
744
|
}
|
|
692
745
|
}
|
|
@@ -36,6 +36,11 @@ async function driveQueuedDialogsOnce() {
|
|
|
36
36
|
continue;
|
|
37
37
|
}
|
|
38
38
|
if ((0, dialog_display_state_1.hasActiveRun)(rootDialog.id)) {
|
|
39
|
+
log_1.log.debug('Backend driver deferred queued root drive because dialog already has an active run', undefined, {
|
|
40
|
+
dialogId: rootDialog.id.valueOf(),
|
|
41
|
+
rootId: rootDialog.id.rootId,
|
|
42
|
+
});
|
|
43
|
+
dialog_global_registry_1.globalDialogRegistry.noteActiveRunBlockedQueuedDrive(rootDialog.id.rootId);
|
|
39
44
|
continue;
|
|
40
45
|
}
|
|
41
46
|
if (!(await rootDialog.canDrive())) {
|
package/dist/persistence.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ import { WebSocket } from 'ws';
|
|
|
13
13
|
import type { PendingSubdialog } from './dialog';
|
|
14
14
|
import { Dialog, DialogID, DialogStore, RootDialog, SubDialog } from './dialog';
|
|
15
15
|
import { ChatMessage, FuncResultMsg, TellaskCarryoverMsg, TellaskResultMsg } from './llm/client';
|
|
16
|
+
import type { ToolResultImageIngest } from './llm/gen';
|
|
16
17
|
import { Reminder } from './tool';
|
|
17
18
|
export declare function setDialogsQuarantinedBroadcaster(fn: ((msg: DialogsQuarantinedMessage) => void) | null): void;
|
|
18
19
|
export declare function setPrepareDialogQuarantineHook(fn: ((args: {
|
|
@@ -114,6 +115,7 @@ export declare class DiskFileDialogStore extends DialogStore {
|
|
|
114
115
|
action?: WebSearchCallAction;
|
|
115
116
|
}): Promise<void>;
|
|
116
117
|
nativeToolCall(dialog: Dialog, payload: NativeToolCallPayload): Promise<void>;
|
|
118
|
+
toolResultImageIngest(dialog: Dialog, payload: ToolResultImageIngest): Promise<void>;
|
|
117
119
|
/**
|
|
118
120
|
* Emit stream error for current generation lifecycle (uses active genseq when present)
|
|
119
121
|
*/
|