dominds 1.23.2 → 1.23.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.js +112 -9
- package/dist/dialog.js +4 -0
- package/dist/docs/dialog-system.md +6 -2
- package/dist/docs/dialog-system.zh.md +5 -1
- package/dist/docs/diligence-push.md +27 -6
- package/dist/docs/diligence-push.zh.md +13 -6
- package/dist/docs/llm-provider-isolation.md +1 -1
- package/dist/docs/llm-provider-isolation.zh.md +1 -1
- package/dist/docs/tellask-revive-context-refactor.zh.md +13 -1
- package/dist/docs/volcengine-coding-plan-openai-compatible.zh.md +3 -2
- package/dist/llm/api-quirks.d.ts +1 -0
- package/dist/llm/api-quirks.js +35 -1
- package/dist/llm/defaults.yaml +6 -0
- package/dist/llm/gen/anthropic.js +6 -2
- package/dist/llm/gen/mock.js +44 -11
- package/dist/llm/gen/openai-compatible.d.ts +2 -1
- package/dist/llm/gen/openai-compatible.js +88 -20
- package/dist/llm/gen.d.ts +12 -0
- package/dist/llm/kernel-driver/context-health.d.ts +3 -4
- package/dist/llm/kernel-driver/context-health.js +5 -2
- package/dist/llm/kernel-driver/context.d.ts +4 -8
- package/dist/llm/kernel-driver/context.js +5 -25
- package/dist/llm/kernel-driver/drive.js +263 -59
- package/dist/llm/kernel-driver/engine.d.ts +1 -1
- package/dist/llm/kernel-driver/engine.js +5 -3
- package/dist/llm/kernel-driver/flow.js +162 -45
- package/dist/llm/kernel-driver/runtime.d.ts +12 -11
- package/dist/llm/kernel-driver/runtime.js +106 -18
- package/dist/llm/kernel-driver/sideDialog.d.ts +3 -0
- package/dist/llm/kernel-driver/sideDialog.js +4 -1
- package/dist/llm/kernel-driver/tellask-special.d.ts +1 -0
- package/dist/llm/kernel-driver/tellask-special.js +30 -30
- package/dist/llm/kernel-driver/types.d.ts +7 -3
- package/dist/log.js +35 -2
- package/dist/persistence.js +12 -1
- package/dist/recovery/reply-special.js +1 -1
- package/dist/runtime/driver-messages.d.ts +14 -1
- package/dist/runtime/driver-messages.js +116 -6
- package/dist/runtime/inter-dialog-format.d.ts +1 -0
- package/dist/runtime/inter-dialog-format.js +7 -3
- package/dist/server/websocket-handler.js +0 -1
- package/dist/tools/team_mgmt-manual.js +2 -2
- package/package.json +2 -2
- package/webapp/dist/assets/{_basePickBy-C3SVVywm.js → _basePickBy-DMD1UhXs.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-C3SVVywm.js.map → _basePickBy-DMD1UhXs.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-egNq6cCa.js → _baseUniq-CsE8Qvwt.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-egNq6cCa.js.map → _baseUniq-CsE8Qvwt.js.map} +1 -1
- package/webapp/dist/assets/{arc-CASAlRvm.js → arc-0h8sV6e1.js} +2 -2
- package/webapp/dist/assets/{arc-CASAlRvm.js.map → arc-0h8sV6e1.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-B6n5FQmS.js → architectureDiagram-2XIMDMQ5-BbMESECO.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-B6n5FQmS.js.map → architectureDiagram-2XIMDMQ5-BbMESECO.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-D2UGGjic.js → blockDiagram-WCTKOSBZ-DwkN-9a4.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-D2UGGjic.js.map → blockDiagram-WCTKOSBZ-DwkN-9a4.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-BOY_bQFP.js → c4Diagram-IC4MRINW-CGYONEh1.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-BOY_bQFP.js.map → c4Diagram-IC4MRINW-CGYONEh1.js.map} +1 -1
- package/webapp/dist/assets/{channel-CZ_X09H1.js → channel-DbSJhm5-.js} +2 -2
- package/webapp/dist/assets/{channel-CZ_X09H1.js.map → channel-DbSJhm5-.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-BIwyAzZQ.js → chunk-4BX2VUAB-D1inRfgf.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-BIwyAzZQ.js.map → chunk-4BX2VUAB-D1inRfgf.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-zSjTFoCX.js → chunk-55IACEB6-DL1IDg_h.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-zSjTFoCX.js.map → chunk-55IACEB6-DL1IDg_h.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-CTpuRfdB.js → chunk-FMBD7UC4-CugIlRDV.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-CTpuRfdB.js.map → chunk-FMBD7UC4-CugIlRDV.js.map} +1 -1
- package/webapp/dist/assets/{chunk-JSJVCQXG-CJ3DM4in.js → chunk-JSJVCQXG-DKHSdeu1.js} +2 -2
- package/webapp/dist/assets/{chunk-JSJVCQXG-CJ3DM4in.js.map → chunk-JSJVCQXG-DKHSdeu1.js.map} +1 -1
- package/webapp/dist/assets/{chunk-KX2RTZJC-B97EakhO.js → chunk-KX2RTZJC-DCU9tkq6.js} +2 -2
- package/webapp/dist/assets/{chunk-KX2RTZJC-B97EakhO.js.map → chunk-KX2RTZJC-DCU9tkq6.js.map} +1 -1
- package/webapp/dist/assets/{chunk-NQ4KR5QH-5o1o5x0z.js → chunk-NQ4KR5QH-DN3O2s2M.js} +4 -4
- package/webapp/dist/assets/{chunk-NQ4KR5QH-5o1o5x0z.js.map → chunk-NQ4KR5QH-DN3O2s2M.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-D33FSIEb.js → chunk-QZHKN3VN-e3ztIJg0.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-D33FSIEb.js.map → chunk-QZHKN3VN-e3ztIJg0.js.map} +1 -1
- package/webapp/dist/assets/{chunk-WL4C6EOR-C2InqFin.js → chunk-WL4C6EOR-Dv907NPM.js} +6 -6
- package/webapp/dist/assets/{chunk-WL4C6EOR-C2InqFin.js.map → chunk-WL4C6EOR-Dv907NPM.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-BfLZmK48.js → classDiagram-VBA2DB6C-DOTXtxYZ.js} +7 -7
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-BfLZmK48.js.map → classDiagram-VBA2DB6C-DOTXtxYZ.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-BfLZmK48.js → classDiagram-v2-RAHNMMFH-DOTXtxYZ.js} +7 -7
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-BfLZmK48.js.map → classDiagram-v2-RAHNMMFH-DOTXtxYZ.js.map} +1 -1
- package/webapp/dist/assets/{clone-BSCHnHfl.js → clone-6lYQMWpu.js} +2 -2
- package/webapp/dist/assets/{clone-BSCHnHfl.js.map → clone-6lYQMWpu.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-CeQ1jAJJ.js → cose-bilkent-S5V4N54A-DoJeDXV0.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-CeQ1jAJJ.js.map → cose-bilkent-S5V4N54A-DoJeDXV0.js.map} +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-WUuNYzcK.js → dagre-KLK3FWXG-F_n_vhV9.js} +7 -7
- package/webapp/dist/assets/{dagre-KLK3FWXG-WUuNYzcK.js.map → dagre-KLK3FWXG-F_n_vhV9.js.map} +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-jOVCIExP.js → diagram-E7M64L7V-Crwhgyjv.js} +8 -8
- package/webapp/dist/assets/{diagram-E7M64L7V-jOVCIExP.js.map → diagram-E7M64L7V-Crwhgyjv.js.map} +1 -1
- package/webapp/dist/assets/{diagram-IFDJBPK2-cCeQqotA.js → diagram-IFDJBPK2-CIt1nnn5.js} +7 -7
- package/webapp/dist/assets/{diagram-IFDJBPK2-cCeQqotA.js.map → diagram-IFDJBPK2-CIt1nnn5.js.map} +1 -1
- package/webapp/dist/assets/{diagram-P4PSJMXO-DjAYFRLv.js → diagram-P4PSJMXO-qowipEfV.js} +7 -7
- package/webapp/dist/assets/{diagram-P4PSJMXO-DjAYFRLv.js.map → diagram-P4PSJMXO-qowipEfV.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-INFDFZHY-Dl_6U5fV.js → erDiagram-INFDFZHY-DV2BcYNa.js} +5 -5
- package/webapp/dist/assets/{erDiagram-INFDFZHY-Dl_6U5fV.js.map → erDiagram-INFDFZHY-DV2BcYNa.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-D80nrZ3S.js → flowDiagram-PKNHOUZH-CAbWV161.js} +7 -7
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-D80nrZ3S.js.map → flowDiagram-PKNHOUZH-CAbWV161.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-T3WdMrgj.js → ganttDiagram-A5KZAMGK-CfdR7FRr.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-T3WdMrgj.js.map → ganttDiagram-A5KZAMGK-CfdR7FRr.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-ifV-jkKL.js → gitGraphDiagram-K3NZZRJ6-DuJFTELz.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-ifV-jkKL.js.map → gitGraphDiagram-K3NZZRJ6-DuJFTELz.js.map} +1 -1
- package/webapp/dist/assets/{graph-D5jmnb35.js → graph-cjRyzujT.js} +3 -3
- package/webapp/dist/assets/{graph-D5jmnb35.js.map → graph-cjRyzujT.js.map} +1 -1
- package/webapp/dist/assets/{index-CGbZlct2.js → index-DgfF56L4.js} +36 -36
- package/webapp/dist/assets/{index-CGbZlct2.js.map → index-DgfF56L4.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-C340CY5x.js → infoDiagram-LFFYTUFH-3wx-7AdD.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-C340CY5x.js.map → infoDiagram-LFFYTUFH-3wx-7AdD.js.map} +1 -1
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-Bu4RsELK.js → ishikawaDiagram-PHBUUO56-g6CMb1Qc.js} +2 -2
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-Bu4RsELK.js.map → ishikawaDiagram-PHBUUO56-g6CMb1Qc.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-Dvv3ypKA.js → journeyDiagram-4ABVD52K-DdCcmOBO.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-Dvv3ypKA.js.map → journeyDiagram-4ABVD52K-DdCcmOBO.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-D_rsetjW.js → kanban-definition-K7BYSVSG-BFw2emGl.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-D_rsetjW.js.map → kanban-definition-K7BYSVSG-BFw2emGl.js.map} +1 -1
- package/webapp/dist/assets/{layout-CLmOfwnS.js → layout-Clazq06r.js} +5 -5
- package/webapp/dist/assets/{layout-CLmOfwnS.js.map → layout-Clazq06r.js.map} +1 -1
- package/webapp/dist/assets/{linear-DFAmViqi.js → linear-jdsBGgvD.js} +2 -2
- package/webapp/dist/assets/{linear-DFAmViqi.js.map → linear-jdsBGgvD.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-Ce3_czeS.js → mindmap-definition-YRQLILUH-DLSZrW6l.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-Ce3_czeS.js.map → mindmap-definition-YRQLILUH-DLSZrW6l.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-U6_un5Sc.js → pieDiagram-SKSYHLDU-Uj-Zpci6.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-U6_un5Sc.js.map → pieDiagram-SKSYHLDU-Uj-Zpci6.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-DmVJQItS.js → quadrantDiagram-337W2JSQ-DO7Sl1nV.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-DmVJQItS.js.map → quadrantDiagram-337W2JSQ-DO7Sl1nV.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-BkNhSY-g.js → requirementDiagram-Z7DCOOCP-WrurrDKQ.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-BkNhSY-g.js.map → requirementDiagram-Z7DCOOCP-WrurrDKQ.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-E3UEy5SX.js → sankeyDiagram-WA2Y5GQK-gcxbxuZB.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-E3UEy5SX.js.map → sankeyDiagram-WA2Y5GQK-gcxbxuZB.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-k0w9WKAO.js → sequenceDiagram-2WXFIKYE-B98U2Npa.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-k0w9WKAO.js.map → sequenceDiagram-2WXFIKYE-B98U2Npa.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-DRgdJrlx.js → stateDiagram-RAJIS63D-BUgfHMbd.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-DRgdJrlx.js.map → stateDiagram-RAJIS63D-BUgfHMbd.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-edtkX9x6.js → stateDiagram-v2-FVOUBMTO-C8gH0rSW.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-edtkX9x6.js.map → stateDiagram-v2-FVOUBMTO-C8gH0rSW.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-D0zyXyNL.js → timeline-definition-YZTLITO2-DnVikX3B.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-D0zyXyNL.js.map → timeline-definition-YZTLITO2-DnVikX3B.js.map} +1 -1
- package/webapp/dist/assets/{treemap-KZPCXAKY-CglsYqbQ.js → treemap-KZPCXAKY-BjhjT1IM.js} +5 -5
- package/webapp/dist/assets/{treemap-KZPCXAKY-CglsYqbQ.js.map → treemap-KZPCXAKY-BjhjT1IM.js.map} +1 -1
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-DsUizzvt.js → vennDiagram-LZ73GAT5-CXjPMxrl.js} +2 -2
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-DsUizzvt.js.map → vennDiagram-LZ73GAT5-CXjPMxrl.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-DvYQ4zKY.js → xychartDiagram-JWTSCODW-ByKmk3Cb.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-DvYQ4zKY.js.map → xychartDiagram-JWTSCODW-ByKmk3Cb.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
|
@@ -165,7 +165,56 @@ function normalizeQ4HAnswerCallId(raw) {
|
|
|
165
165
|
function isUserOriginPrompt(prompt) {
|
|
166
166
|
if (!prompt)
|
|
167
167
|
return false;
|
|
168
|
-
return prompt.origin === 'user';
|
|
168
|
+
return prompt.origin === 'user' && normalizeQ4HAnswerCallId(prompt.q4hAnswerCallId) === undefined;
|
|
169
|
+
}
|
|
170
|
+
function resolveReminderContextFollowingDialogState(prompt, currentTurnDialogMsgsForContext) {
|
|
171
|
+
if (prompt === undefined || currentTurnDialogMsgsForContext.length === 0)
|
|
172
|
+
return 'none';
|
|
173
|
+
return prompt.origin === 'user' ? 'user_message' : 'runtime_notice';
|
|
174
|
+
}
|
|
175
|
+
function splitDialogMsgsForReminderInsertion(args) {
|
|
176
|
+
const msgId = args.currentPrompt?.msgId;
|
|
177
|
+
if (typeof msgId !== 'string' || msgId.trim() === '') {
|
|
178
|
+
return {
|
|
179
|
+
historicalDialogMsgsForContext: [...args.msgs],
|
|
180
|
+
currentTurnDialogMsgsForContext: [],
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
const currentTurnStart = args.msgs.findIndex((msg) => msg.type === 'prompting_msg' && msg.msgId === msgId);
|
|
184
|
+
if (currentTurnStart < 0) {
|
|
185
|
+
return {
|
|
186
|
+
historicalDialogMsgsForContext: [...args.msgs],
|
|
187
|
+
currentTurnDialogMsgsForContext: [],
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
historicalDialogMsgsForContext: args.msgs.slice(0, currentTurnStart),
|
|
192
|
+
currentTurnDialogMsgsForContext: args.msgs.slice(currentTurnStart),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
function getUserOriginPromptMsgId(prompt) {
|
|
196
|
+
if (!prompt)
|
|
197
|
+
return undefined;
|
|
198
|
+
return prompt.origin === 'user' && normalizeQ4HAnswerCallId(prompt.q4hAnswerCallId) === undefined
|
|
199
|
+
? prompt.msgId
|
|
200
|
+
: undefined;
|
|
201
|
+
}
|
|
202
|
+
async function persistAndEmitRuntimeGuide(dlg, content) {
|
|
203
|
+
await dlg.addChatMessages({
|
|
204
|
+
type: 'transient_guide_msg',
|
|
205
|
+
role: 'assistant',
|
|
206
|
+
content,
|
|
207
|
+
});
|
|
208
|
+
await persistAndPostRuntimeGuide(dlg, content);
|
|
209
|
+
}
|
|
210
|
+
async function persistAndPostRuntimeGuide(dlg, content) {
|
|
211
|
+
await persistence_1.DialogPersistence.persistRuntimeGuide(dlg, content, dlg.activeGenSeq);
|
|
212
|
+
(0, evt_registry_1.postDialogEvent)(dlg, {
|
|
213
|
+
type: 'runtime_guide_evt',
|
|
214
|
+
course: dlg.currentCourse,
|
|
215
|
+
genseq: dlg.activeGenSeq,
|
|
216
|
+
content,
|
|
217
|
+
});
|
|
169
218
|
}
|
|
170
219
|
function resolveToolUseRequirement(dlg, policy) {
|
|
171
220
|
// FBR middle rounds are deliberately isolated from callable tools. Final closure is the opposite:
|
|
@@ -255,6 +304,9 @@ function hasMeaningfulBatchOutput(batch) {
|
|
|
255
304
|
if (output.kind === 'user_image_ingest') {
|
|
256
305
|
continue;
|
|
257
306
|
}
|
|
307
|
+
if (output.kind === 'invalid_func_call') {
|
|
308
|
+
return true;
|
|
309
|
+
}
|
|
258
310
|
if (output.kind !== 'message') {
|
|
259
311
|
return true;
|
|
260
312
|
}
|
|
@@ -804,26 +856,28 @@ async function projectTellaskFuncResultsForContext(args) {
|
|
|
804
856
|
messages: projected,
|
|
805
857
|
};
|
|
806
858
|
}
|
|
859
|
+
async function buildActiveReplyObligationContext(dlg) {
|
|
860
|
+
const activeReplyObligation = await persistence_1.DialogPersistence.loadActiveTellaskReplyObligation(dlg.id, dlg.status);
|
|
861
|
+
if (activeReplyObligation === undefined)
|
|
862
|
+
return [];
|
|
863
|
+
return [
|
|
864
|
+
{
|
|
865
|
+
type: 'environment_msg',
|
|
866
|
+
role: 'user',
|
|
867
|
+
content: (0, reply_prompt_copy_1.buildActiveReplyObligationContextText)({
|
|
868
|
+
language: (0, work_language_1.getWorkLanguage)(),
|
|
869
|
+
directive: activeReplyObligation,
|
|
870
|
+
}),
|
|
871
|
+
},
|
|
872
|
+
];
|
|
873
|
+
}
|
|
807
874
|
async function buildDialogMsgsForContext(dlg) {
|
|
808
875
|
const rawDialogMsgsForContext = dlg.msgs.filter((m) => !!m);
|
|
809
876
|
const projected = await projectTellaskFuncResultsForContext({
|
|
810
877
|
dialog: dlg,
|
|
811
878
|
dialogMsgsForContext: rawDialogMsgsForContext,
|
|
812
879
|
});
|
|
813
|
-
const
|
|
814
|
-
const activeReplyObligationContext = activeReplyObligation === undefined
|
|
815
|
-
? []
|
|
816
|
-
: [
|
|
817
|
-
{
|
|
818
|
-
type: 'environment_msg',
|
|
819
|
-
role: 'user',
|
|
820
|
-
content: (0, reply_prompt_copy_1.buildActiveReplyObligationContextText)({
|
|
821
|
-
language: (0, work_language_1.getWorkLanguage)(),
|
|
822
|
-
directive: activeReplyObligation,
|
|
823
|
-
}),
|
|
824
|
-
},
|
|
825
|
-
];
|
|
826
|
-
const businessFiltered = [...activeReplyObligationContext, ...projected.messages].filter((msg) => {
|
|
880
|
+
const businessFiltered = projected.messages.filter((msg) => {
|
|
827
881
|
return msg.type !== 'tellask_result_msg' || msg.content.trim() !== '';
|
|
828
882
|
});
|
|
829
883
|
const sanitized = (0, tool_call_context_1.sanitizeToolContextForProvider)(businessFiltered);
|
|
@@ -862,6 +916,75 @@ async function emitAssistantSaying(dlg, content) {
|
|
|
862
916
|
await dlg.sayingChunk(content);
|
|
863
917
|
await dlg.sayingFinish();
|
|
864
918
|
}
|
|
919
|
+
function formatInvalidFuncCallRuntimeGuide(language, call) {
|
|
920
|
+
const rawName = call.rawFunctionName !== undefined && call.rawFunctionName.trim() !== ''
|
|
921
|
+
? call.rawFunctionName.trim()
|
|
922
|
+
: '<missing>';
|
|
923
|
+
const rawArguments = call.rawArgumentsText !== undefined && call.rawArgumentsText.trim() !== ''
|
|
924
|
+
? call.rawArgumentsText
|
|
925
|
+
: '<empty>';
|
|
926
|
+
const indexLine = call.toolCallIndex === undefined ? undefined : `- toolCallIndex: ${String(call.toolCallIndex)}`;
|
|
927
|
+
if (language === 'en') {
|
|
928
|
+
return [
|
|
929
|
+
'[Runtime notice] The previous model output contained an invalid tool-call payload that could not be represented as a normal provider tool call in the next generation context.',
|
|
930
|
+
'',
|
|
931
|
+
`- provider: ${call.provider}`,
|
|
932
|
+
`- callId: ${call.callId}`,
|
|
933
|
+
`- problem: ${call.detail}`,
|
|
934
|
+
`- rawFunctionName: ${rawName}`,
|
|
935
|
+
`- rawArgumentsText:`,
|
|
936
|
+
'```json',
|
|
937
|
+
rawArguments,
|
|
938
|
+
'```',
|
|
939
|
+
...(indexLine === undefined ? [] : [indexLine]),
|
|
940
|
+
'',
|
|
941
|
+
'Treat that payload as failed. Do not assume the tool ran. Continue from the current task, and if a tool call is still needed, emit a new valid tool call with a non-empty function name and valid arguments.',
|
|
942
|
+
]
|
|
943
|
+
.filter((line) => line.length > 0)
|
|
944
|
+
.join('\n');
|
|
945
|
+
}
|
|
946
|
+
return [
|
|
947
|
+
'[运行时提示] 上一轮模型输出包含一个无效工具调用载荷,无法按正常 provider tool call 形态进入下一轮生成上下文。',
|
|
948
|
+
'',
|
|
949
|
+
`- provider: ${call.provider}`,
|
|
950
|
+
`- callId: ${call.callId}`,
|
|
951
|
+
`- 问题: ${call.detail}`,
|
|
952
|
+
`- rawFunctionName: ${rawName}`,
|
|
953
|
+
`- rawArgumentsText:`,
|
|
954
|
+
'```json',
|
|
955
|
+
rawArguments,
|
|
956
|
+
'```',
|
|
957
|
+
...(indexLine === undefined ? [] : [indexLine]),
|
|
958
|
+
'',
|
|
959
|
+
'请把该载荷视为调用失败,不要假设工具已经执行。继续当前任务;如果仍需要调用工具,请重新发起一个函数名非空、参数有效的新工具调用。',
|
|
960
|
+
]
|
|
961
|
+
.filter((line) => line.length > 0)
|
|
962
|
+
.join('\n');
|
|
963
|
+
}
|
|
964
|
+
async function persistInvalidFuncCallRuntimeGuide(args) {
|
|
965
|
+
const { dlg, call } = args;
|
|
966
|
+
const sourceText = args.source === 'streamed' ? 'streamed' : 'batch';
|
|
967
|
+
log_1.log.error(`kernel-driver received invalid ${sourceText} function call payload`, new Error(`kernel_driver_invalid_${sourceText}_function_call_payload`), {
|
|
968
|
+
rootId: dlg.id.rootId,
|
|
969
|
+
selfId: dlg.id.selfId,
|
|
970
|
+
course: dlg.activeGenCourseOrUndefined ?? dlg.currentCourse,
|
|
971
|
+
genseq: dlg.activeGenSeq,
|
|
972
|
+
callId: call.callId,
|
|
973
|
+
provider: call.provider,
|
|
974
|
+
detail: call.detail,
|
|
975
|
+
toolCallIndex: call.toolCallIndex,
|
|
976
|
+
});
|
|
977
|
+
if (args.emitStreamError) {
|
|
978
|
+
await dlg.streamError(call.detail);
|
|
979
|
+
}
|
|
980
|
+
const content = formatInvalidFuncCallRuntimeGuide((0, work_language_1.getWorkLanguage)(), call);
|
|
981
|
+
args.newMsgs.push({
|
|
982
|
+
type: 'transient_guide_msg',
|
|
983
|
+
role: 'assistant',
|
|
984
|
+
content,
|
|
985
|
+
});
|
|
986
|
+
await persistAndPostRuntimeGuide(dlg, content);
|
|
987
|
+
}
|
|
865
988
|
function resolveFuncToolFollowupMode(tool) {
|
|
866
989
|
return tool?.followupMode ?? 'immediate';
|
|
867
990
|
}
|
|
@@ -1252,38 +1375,39 @@ async function preserveDiligenceBudgetAcrossQ4H(dlg) {
|
|
|
1252
1375
|
}
|
|
1253
1376
|
async function maybeContinueWithDiligencePrompt(args) {
|
|
1254
1377
|
const { dlg, team, suppressDiligencePushForDrive, allowPendingSideDialogs, ignoreBudgetExhaustion, } = args;
|
|
1255
|
-
if (!(dlg instanceof dialog_1.MainDialog)) {
|
|
1256
|
-
return { kind: 'break' };
|
|
1257
|
-
}
|
|
1258
1378
|
const suspension = await dlg.getSuspensionStatus({
|
|
1259
1379
|
allowPendingSideDialogs: allowPendingSideDialogs === true,
|
|
1260
1380
|
});
|
|
1261
1381
|
if (!suspension.canDrive) {
|
|
1262
|
-
if (suspension.q4h) {
|
|
1382
|
+
if (suspension.q4h && dlg instanceof dialog_1.MainDialog) {
|
|
1263
1383
|
await preserveDiligenceBudgetAcrossQ4H(dlg);
|
|
1264
1384
|
}
|
|
1265
1385
|
return { kind: 'break' };
|
|
1266
1386
|
}
|
|
1267
1387
|
const prepared = await (0, runtime_1.maybePrepareDiligenceAutoContinuePrompt)({
|
|
1268
1388
|
dlg,
|
|
1269
|
-
isMainDialog: true,
|
|
1270
1389
|
remainingBudget: dlg.diligencePushRemainingBudget,
|
|
1271
1390
|
diligencePushMax: resolveMemberDiligencePushMax(team, dlg.agentId),
|
|
1272
1391
|
suppressDiligencePush: suppressDiligencePushForDrive,
|
|
1273
1392
|
ignoreBudgetExhaustion,
|
|
1274
1393
|
});
|
|
1275
|
-
dlg
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1394
|
+
if (dlg instanceof dialog_1.MainDialog) {
|
|
1395
|
+
dlg.diligencePushRemainingBudget = prepared.nextRemainingBudget;
|
|
1396
|
+
void persistence_1.DialogPersistence.mutateDialogLatest(dlg.id, () => ({
|
|
1397
|
+
kind: 'patch',
|
|
1398
|
+
patch: { diligencePushRemainingBudget: dlg.diligencePushRemainingBudget },
|
|
1399
|
+
}));
|
|
1400
|
+
}
|
|
1401
|
+
if (dlg instanceof dialog_1.MainDialog && prepared.kind !== 'disabled') {
|
|
1281
1402
|
emitDiligenceBudgetEvent(dlg, {
|
|
1282
1403
|
maxInjectCount: prepared.maxInjectCount,
|
|
1283
1404
|
nextRemainingBudget: prepared.nextRemainingBudget,
|
|
1284
1405
|
});
|
|
1285
1406
|
}
|
|
1286
1407
|
if (prepared.kind === 'budget_exhausted') {
|
|
1408
|
+
if (!(dlg instanceof dialog_1.MainDialog)) {
|
|
1409
|
+
throw new Error(`kernel-driver Diligence Push invariant violation: non-main dialog returned budget_exhausted (${dlg.id.valueOf()})`);
|
|
1410
|
+
}
|
|
1287
1411
|
await (0, runtime_1.suspendForKeepGoingBudgetExhausted)({
|
|
1288
1412
|
dlg,
|
|
1289
1413
|
maxInjectCount: prepared.maxInjectCount,
|
|
@@ -1333,9 +1457,6 @@ async function maybeContinueWithHealthPromptBeforeDiligence(args) {
|
|
|
1333
1457
|
cautionRemediationCadenceGenerations,
|
|
1334
1458
|
criticalCountdownRemaining,
|
|
1335
1459
|
});
|
|
1336
|
-
if (healthDecision.kind === 'suspend') {
|
|
1337
|
-
return { kind: 'health_suspend' };
|
|
1338
|
-
}
|
|
1339
1460
|
if (healthDecision.kind !== 'continue') {
|
|
1340
1461
|
return { kind: 'no_health_prompt' };
|
|
1341
1462
|
}
|
|
@@ -1389,13 +1510,22 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1389
1510
|
const suppressDiligencePushForDrive = driveOptions?.suppressDiligencePush === true && dlg.disableDiligencePush;
|
|
1390
1511
|
const abortSignal = (0, dialog_display_state_1.getActiveRunSignal)(dlg.id) ?? (0, dialog_display_state_1.createActiveRun)(dlg.id);
|
|
1391
1512
|
let finalDisplayState;
|
|
1513
|
+
let criticalUserInterjectionRuntimeGuide = driveOptions?.criticalUserInterjectionRuntimeGuide;
|
|
1392
1514
|
let lastAssistantSayingContent = null;
|
|
1393
1515
|
let lastAssistantSayingGenseq = null;
|
|
1516
|
+
let lastAssistantThinkingContent = null;
|
|
1517
|
+
let lastAssistantThinkingGenseq = null;
|
|
1394
1518
|
let lastFunctionCallGenseq = null;
|
|
1395
1519
|
let lastAssistantReplyTarget;
|
|
1396
1520
|
let fbrConclusion;
|
|
1397
1521
|
let pubRemindersVer = dlg.remindersVer;
|
|
1398
1522
|
let pendingPrompt = humanPrompt;
|
|
1523
|
+
let resolvingImmediateToolResultForUserPrompt = false;
|
|
1524
|
+
let resolvingImmediateToolResultUserPromptMsgId;
|
|
1525
|
+
let criticalRemediationAppliedUserPromptMsgId = driveOptions?.criticalUserInterjectionRuntimeGuide !== undefined &&
|
|
1526
|
+
humanPrompt?.origin === 'user'
|
|
1527
|
+
? humanPrompt.msgId
|
|
1528
|
+
: undefined;
|
|
1399
1529
|
let retryStoppedRecoveryPrompt;
|
|
1400
1530
|
let skipTaskdocForThisDrive = humanPrompt?.skipTaskdoc === true;
|
|
1401
1531
|
let genIterNo = 0;
|
|
@@ -1507,7 +1637,17 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1507
1637
|
: canonicalFuncTools;
|
|
1508
1638
|
const projected = (0, tools_projection_1.projectFuncToolsForProvider)(providerCfg.apiType, effectiveFuncTools);
|
|
1509
1639
|
const funcTools = projected.tools;
|
|
1640
|
+
const currentPendingPrompt = pendingPrompt;
|
|
1641
|
+
let currentGenerationBelongsToUserPrompt = isUserOriginPrompt(currentPendingPrompt);
|
|
1642
|
+
let currentGenerationBelongsToUserToolChain = false;
|
|
1643
|
+
let currentUserPromptMsgId = getUserOriginPromptMsgId(currentPendingPrompt);
|
|
1510
1644
|
if (genIterNo > 1) {
|
|
1645
|
+
currentGenerationBelongsToUserToolChain = resolvingImmediateToolResultForUserPrompt;
|
|
1646
|
+
if (currentUserPromptMsgId === undefined) {
|
|
1647
|
+
currentUserPromptMsgId = resolvingImmediateToolResultUserPromptMsgId;
|
|
1648
|
+
}
|
|
1649
|
+
resolvingImmediateToolResultForUserPrompt = false;
|
|
1650
|
+
resolvingImmediateToolResultUserPromptMsgId = undefined;
|
|
1511
1651
|
const snapshot = dlg.getLastContextHealth();
|
|
1512
1652
|
const hasQueuedUpNext = dlg.hasUpNext() || pendingPrompt !== undefined;
|
|
1513
1653
|
const modelInfoForRemediation = resolveModelInfo(providerCfg, model);
|
|
@@ -1516,21 +1656,14 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1516
1656
|
const healthDecision = (0, context_health_1.decideKernelDriverContextHealth)({
|
|
1517
1657
|
dialogKey: dlg.id.key(),
|
|
1518
1658
|
snapshot,
|
|
1519
|
-
hadUserPromptThisGen:
|
|
1659
|
+
hadUserPromptThisGen: currentGenerationBelongsToUserPrompt,
|
|
1660
|
+
hadUserPromptInImmediateToolChain: currentGenerationBelongsToUserToolChain,
|
|
1661
|
+
userPromptCriticalRemediationAlreadyApplied: criticalRemediationAppliedUserPromptMsgId !== undefined &&
|
|
1662
|
+
criticalRemediationAppliedUserPromptMsgId === currentUserPromptMsgId,
|
|
1520
1663
|
canInjectPromptThisGen: !hasQueuedUpNext,
|
|
1521
1664
|
cautionRemediationCadenceGenerations,
|
|
1522
1665
|
criticalCountdownRemaining,
|
|
1523
1666
|
});
|
|
1524
|
-
if (healthDecision.kind === 'suspend') {
|
|
1525
|
-
log_1.log.debug('kernel-driver suspend iterative generation due to critical context while waiting for human prompt', undefined, {
|
|
1526
|
-
dialogId: dlg.id.valueOf(),
|
|
1527
|
-
rootId: dlg.id.rootId,
|
|
1528
|
-
selfId: dlg.id.selfId,
|
|
1529
|
-
genIterNo,
|
|
1530
|
-
pendingPromptOrigin: pendingPrompt?.origin ?? null,
|
|
1531
|
-
});
|
|
1532
|
-
break;
|
|
1533
|
-
}
|
|
1534
1667
|
if (healthDecision.kind === 'continue') {
|
|
1535
1668
|
if (healthDecision.reason === 'critical_force_new_course') {
|
|
1536
1669
|
const language = (0, work_language_1.getWorkLanguage)();
|
|
@@ -1548,6 +1681,16 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1548
1681
|
pendingPrompt = nextPrompt;
|
|
1549
1682
|
skipTaskdocForThisDrive = false;
|
|
1550
1683
|
}
|
|
1684
|
+
else if (healthDecision.reason === 'critical_user_prompt_remediation') {
|
|
1685
|
+
const language = (0, work_language_1.getWorkLanguage)();
|
|
1686
|
+
const dialogScope = dlg instanceof dialog_1.SideDialog ? 'sideDialog' : 'mainDialog';
|
|
1687
|
+
criticalUserInterjectionRuntimeGuide =
|
|
1688
|
+
(0, driver_messages_1.formatAgentFacingCriticalUserInterjectionRemediationGuide)(language, {
|
|
1689
|
+
dialogScope,
|
|
1690
|
+
promptsRemainingAfterThis: (0, context_health_1.consumeCriticalCountdown)(dlg.id.key()),
|
|
1691
|
+
});
|
|
1692
|
+
criticalRemediationAppliedUserPromptMsgId = currentUserPromptMsgId;
|
|
1693
|
+
}
|
|
1551
1694
|
else if (!hasQueuedUpNext) {
|
|
1552
1695
|
const language = (0, work_language_1.getWorkLanguage)();
|
|
1553
1696
|
const dialogScope = dlg instanceof dialog_1.SideDialog ? 'sideDialog' : 'mainDialog';
|
|
@@ -1586,6 +1729,10 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1586
1729
|
pendingPrompt = undefined;
|
|
1587
1730
|
await dlg.notifyGeneratingStart(currentPrompt?.msgId);
|
|
1588
1731
|
try {
|
|
1732
|
+
if (criticalUserInterjectionRuntimeGuide !== undefined) {
|
|
1733
|
+
await persistAndEmitRuntimeGuide(dlg, criticalUserInterjectionRuntimeGuide);
|
|
1734
|
+
criticalUserInterjectionRuntimeGuide = undefined;
|
|
1735
|
+
}
|
|
1589
1736
|
if (currentPrompt) {
|
|
1590
1737
|
const origin = currentPrompt.origin;
|
|
1591
1738
|
if (origin === 'diligence_push' &&
|
|
@@ -1665,14 +1812,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1665
1812
|
const renderPromptAsRuntimeGuideBubble = origin === 'runtime' &&
|
|
1666
1813
|
(0, reply_prompt_copy_1.isStandaloneRuntimeGuidePromptContent)(replyGuidance.promptContent);
|
|
1667
1814
|
if (currentRuntimeGuideMsg) {
|
|
1668
|
-
await dlg.
|
|
1669
|
-
await persistence_1.DialogPersistence.persistRuntimeGuide(dlg, currentRuntimeGuideMsg.content, dlg.activeGenSeq);
|
|
1670
|
-
(0, evt_registry_1.postDialogEvent)(dlg, {
|
|
1671
|
-
type: 'runtime_guide_evt',
|
|
1672
|
-
course: dlg.currentCourse,
|
|
1673
|
-
genseq: dlg.activeGenSeq,
|
|
1674
|
-
content: currentRuntimeGuideMsg.content,
|
|
1675
|
-
});
|
|
1815
|
+
await persistAndEmitRuntimeGuide(dlg, currentRuntimeGuideMsg.content);
|
|
1676
1816
|
currentRuntimeGuideMsg = undefined;
|
|
1677
1817
|
}
|
|
1678
1818
|
if (isQ4HAnswerPrompt) {
|
|
@@ -1796,13 +1936,18 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1796
1936
|
: undefined;
|
|
1797
1937
|
const renderedReminders = await renderRemindersForContext(dlg);
|
|
1798
1938
|
const dialogMsgsForContext = await buildDialogMsgsForContext(dlg);
|
|
1939
|
+
const activeReplyObligationContext = await buildActiveReplyObligationContext(dlg);
|
|
1940
|
+
const splitDialogMsgs = splitDialogMsgsForReminderInsertion({
|
|
1941
|
+
msgs: dialogMsgsForContext,
|
|
1942
|
+
currentPrompt,
|
|
1943
|
+
});
|
|
1799
1944
|
const reminderContextBlock = renderedReminders.length > 0
|
|
1800
1945
|
? [
|
|
1801
1946
|
...renderedReminders,
|
|
1802
1947
|
{
|
|
1803
1948
|
type: 'environment_msg',
|
|
1804
1949
|
role: 'user',
|
|
1805
|
-
content: (0, driver_messages_1.formatReminderContextFooter)((0, work_language_1.getWorkLanguage)()),
|
|
1950
|
+
content: (0, driver_messages_1.formatReminderContextFooter)((0, work_language_1.getWorkLanguage)(), resolveReminderContextFollowingDialogState(currentPrompt, splitDialogMsgs.currentTurnDialogMsgsForContext)),
|
|
1806
1951
|
},
|
|
1807
1952
|
]
|
|
1808
1953
|
: renderedReminders;
|
|
@@ -1812,17 +1957,20 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1812
1957
|
memories: minds.memories,
|
|
1813
1958
|
taskDocMsg,
|
|
1814
1959
|
coursePrefixMsgs: dlg.getCoursePrefixMsgs(),
|
|
1815
|
-
|
|
1960
|
+
historicalDialogMsgsForContext: splitDialogMsgs.historicalDialogMsgsForContext,
|
|
1961
|
+
currentTurnDialogMsgsForContext: splitDialogMsgs.currentTurnDialogMsgsForContext,
|
|
1816
1962
|
},
|
|
1817
|
-
|
|
1818
|
-
|
|
1963
|
+
tail: {
|
|
1964
|
+
renderedReminders: reminderContextBlock,
|
|
1965
|
+
activeReplyObligationContext,
|
|
1966
|
+
runtimeGuideMsgs: currentRuntimeGuideMsg ? [currentRuntimeGuideMsg] : [],
|
|
1819
1967
|
},
|
|
1820
|
-
tail: { renderedReminders: reminderContextBlock },
|
|
1821
1968
|
});
|
|
1822
1969
|
const newMsgs = [];
|
|
1823
1970
|
const streamedFuncCalls = [];
|
|
1824
1971
|
let sawWebSearchSideChannelOutput = false;
|
|
1825
1972
|
let sawNativeToolSideChannelOutput = false;
|
|
1973
|
+
let invalidFuncCallCount = 0;
|
|
1826
1974
|
const streamOrBatch = async () => {
|
|
1827
1975
|
let batchAttemptCourse;
|
|
1828
1976
|
let batchAttemptCheckpointOffset;
|
|
@@ -1839,6 +1987,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1839
1987
|
});
|
|
1840
1988
|
sawWebSearchSideChannelOutput = false;
|
|
1841
1989
|
sawNativeToolSideChannelOutput = false;
|
|
1990
|
+
invalidFuncCallCount = 0;
|
|
1842
1991
|
streamedFuncCalls.length = 0;
|
|
1843
1992
|
newMsgs.length = 0;
|
|
1844
1993
|
};
|
|
@@ -1906,6 +2055,8 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1906
2055
|
let streamAttemptCheckpointOffset;
|
|
1907
2056
|
let streamAttemptSayingContent;
|
|
1908
2057
|
let streamAttemptSayingGenseq;
|
|
2058
|
+
let streamAttemptThinkingContent;
|
|
2059
|
+
let streamAttemptThinkingGenseq;
|
|
1909
2060
|
let streamActive = { kind: 'idle' };
|
|
1910
2061
|
const rollbackStreamAttempt = async () => {
|
|
1911
2062
|
if (streamAttemptCourse === undefined ||
|
|
@@ -1925,9 +2076,12 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1925
2076
|
currentSayingContent = '';
|
|
1926
2077
|
streamAttemptSayingContent = undefined;
|
|
1927
2078
|
streamAttemptSayingGenseq = undefined;
|
|
2079
|
+
streamAttemptThinkingContent = undefined;
|
|
2080
|
+
streamAttemptThinkingGenseq = undefined;
|
|
1928
2081
|
sawWebSearchSideChannelOutput = false;
|
|
1929
2082
|
sawNativeToolSideChannelOutput = false;
|
|
1930
2083
|
streamedFuncCalls.length = 0;
|
|
2084
|
+
invalidFuncCallCount = 0;
|
|
1931
2085
|
newMsgs.length = 0;
|
|
1932
2086
|
};
|
|
1933
2087
|
const receiver = {
|
|
@@ -1975,13 +2129,16 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1975
2129
|
currentThinkingReasoning = reasoning;
|
|
1976
2130
|
await dlg.thinkingFinish(reasoning);
|
|
1977
2131
|
if (currentThinkingContent.length > 0 || currentThinkingReasoning !== undefined) {
|
|
1978
|
-
|
|
2132
|
+
const thinkingMessage = {
|
|
1979
2133
|
type: 'thinking_msg',
|
|
1980
2134
|
role: 'assistant',
|
|
1981
2135
|
genseq: dlg.activeGenSeq,
|
|
1982
2136
|
content: currentThinkingContent,
|
|
1983
2137
|
reasoning: currentThinkingReasoning,
|
|
1984
|
-
}
|
|
2138
|
+
};
|
|
2139
|
+
newMsgs.push(thinkingMessage);
|
|
2140
|
+
streamAttemptThinkingContent = currentThinkingContent;
|
|
2141
|
+
streamAttemptThinkingGenseq = thinkingMessage.genseq;
|
|
1985
2142
|
}
|
|
1986
2143
|
currentThinkingContent = '';
|
|
1987
2144
|
currentThinkingReasoning = undefined;
|
|
@@ -2048,6 +2205,17 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2048
2205
|
arguments: argsStr,
|
|
2049
2206
|
});
|
|
2050
2207
|
},
|
|
2208
|
+
invalidFuncCall: async (call) => {
|
|
2209
|
+
throwIfAborted(abortSignal, dlg);
|
|
2210
|
+
invalidFuncCallCount += 1;
|
|
2211
|
+
await persistInvalidFuncCallRuntimeGuide({
|
|
2212
|
+
dlg,
|
|
2213
|
+
call,
|
|
2214
|
+
source: 'streamed',
|
|
2215
|
+
newMsgs,
|
|
2216
|
+
emitStreamError: true,
|
|
2217
|
+
});
|
|
2218
|
+
},
|
|
2051
2219
|
webSearchCall: async (call) => {
|
|
2052
2220
|
throwIfAborted(abortSignal, dlg);
|
|
2053
2221
|
sawWebSearchSideChannelOutput = true;
|
|
@@ -2093,9 +2261,12 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2093
2261
|
currentSayingContent = '';
|
|
2094
2262
|
streamAttemptSayingContent = undefined;
|
|
2095
2263
|
streamAttemptSayingGenseq = undefined;
|
|
2264
|
+
streamAttemptThinkingContent = undefined;
|
|
2265
|
+
streamAttemptThinkingGenseq = undefined;
|
|
2096
2266
|
sawWebSearchSideChannelOutput = false;
|
|
2097
2267
|
sawNativeToolSideChannelOutput = false;
|
|
2098
2268
|
streamedFuncCalls.length = 0;
|
|
2269
|
+
invalidFuncCallCount = 0;
|
|
2099
2270
|
newMsgs.length = 0;
|
|
2100
2271
|
const promptCacheKey = prepareLlmRequestContextKey();
|
|
2101
2272
|
const streamResult = await llmGen.genToReceiver(providerCfg, agent, systemPrompt, funcTools, {
|
|
@@ -2111,6 +2282,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2111
2282
|
const hasFunctionCall = streamedFuncCalls.length > 0;
|
|
2112
2283
|
if (!hasFinishedMessageContent &&
|
|
2113
2284
|
!hasFunctionCall &&
|
|
2285
|
+
invalidFuncCallCount === 0 &&
|
|
2114
2286
|
!sawWebSearchSideChannelOutput &&
|
|
2115
2287
|
!sawNativeToolSideChannelOutput) {
|
|
2116
2288
|
throw {
|
|
@@ -2128,6 +2300,14 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2128
2300
|
streamAttemptSayingGenseq === undefined ? null : streamAttemptSayingGenseq;
|
|
2129
2301
|
lastAssistantReplyTarget = currentReplyTarget;
|
|
2130
2302
|
}
|
|
2303
|
+
if (streamAttemptThinkingContent !== undefined) {
|
|
2304
|
+
lastAssistantThinkingContent = streamAttemptThinkingContent;
|
|
2305
|
+
lastAssistantThinkingGenseq =
|
|
2306
|
+
streamAttemptThinkingGenseq === undefined ? null : streamAttemptThinkingGenseq;
|
|
2307
|
+
if (streamAttemptSayingContent === undefined) {
|
|
2308
|
+
lastAssistantReplyTarget = currentReplyTarget;
|
|
2309
|
+
}
|
|
2310
|
+
}
|
|
2131
2311
|
return { usage: res.usage, llmGenModel: res.llmGenModel };
|
|
2132
2312
|
};
|
|
2133
2313
|
const llmOutput = await streamOrBatch();
|
|
@@ -2152,6 +2332,9 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2152
2332
|
if (msg.type === 'thinking_msg' || msg.type === 'saying_msg') {
|
|
2153
2333
|
newMsgs.push(msg);
|
|
2154
2334
|
if (msg.type === 'thinking_msg') {
|
|
2335
|
+
lastAssistantThinkingContent = msg.content;
|
|
2336
|
+
lastAssistantThinkingGenseq = msg.genseq;
|
|
2337
|
+
lastAssistantReplyTarget = currentReplyTarget;
|
|
2155
2338
|
await (0, events_1.emitThinkingEvents)(dlg, msg.content, msg.reasoning);
|
|
2156
2339
|
}
|
|
2157
2340
|
else {
|
|
@@ -2167,6 +2350,17 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2167
2350
|
}
|
|
2168
2351
|
break;
|
|
2169
2352
|
}
|
|
2353
|
+
case 'invalid_func_call': {
|
|
2354
|
+
invalidFuncCallCount += 1;
|
|
2355
|
+
await persistInvalidFuncCallRuntimeGuide({
|
|
2356
|
+
dlg,
|
|
2357
|
+
call: output.call,
|
|
2358
|
+
source: 'batch',
|
|
2359
|
+
newMsgs,
|
|
2360
|
+
emitStreamError: true,
|
|
2361
|
+
});
|
|
2362
|
+
break;
|
|
2363
|
+
}
|
|
2170
2364
|
case 'web_search_call': {
|
|
2171
2365
|
sawWebSearchSideChannelOutput = true;
|
|
2172
2366
|
await dlg.webSearchCall(projectLlmWebSearchCall(output.call));
|
|
@@ -2225,6 +2419,8 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2225
2419
|
return {
|
|
2226
2420
|
lastAssistantSayingContent,
|
|
2227
2421
|
lastAssistantSayingGenseq,
|
|
2422
|
+
lastAssistantThinkingContent,
|
|
2423
|
+
lastAssistantThinkingGenseq,
|
|
2228
2424
|
lastFunctionCallGenseq,
|
|
2229
2425
|
lastAssistantReplyTarget,
|
|
2230
2426
|
};
|
|
@@ -2374,7 +2570,9 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2374
2570
|
// warrant same-drive LLM reaction right away. Provider-native side-channel UI events are
|
|
2375
2571
|
// meaningful output, but they are not transcript/context inputs and therefore must not
|
|
2376
2572
|
// trigger another immediate generation round by themselves.
|
|
2377
|
-
const shouldStartImmediatePostToolGeneration = routed.hasImmediateFollowupToolCalls ||
|
|
2573
|
+
const shouldStartImmediatePostToolGeneration = routed.hasImmediateFollowupToolCalls ||
|
|
2574
|
+
routed.tellaskToolOutputs.length > 0 ||
|
|
2575
|
+
invalidFuncCallCount > 0;
|
|
2378
2576
|
if (!shouldStartImmediatePostToolGeneration) {
|
|
2379
2577
|
const healthFirst = await maybeContinueWithHealthPromptBeforeDiligence({
|
|
2380
2578
|
dlg,
|
|
@@ -2388,9 +2586,6 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2388
2586
|
}
|
|
2389
2587
|
continue;
|
|
2390
2588
|
}
|
|
2391
|
-
if (healthFirst.kind === 'health_suspend') {
|
|
2392
|
-
break;
|
|
2393
|
-
}
|
|
2394
2589
|
const next = await maybeContinueWithDiligencePrompt({
|
|
2395
2590
|
dlg,
|
|
2396
2591
|
team,
|
|
@@ -2403,6 +2598,13 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2403
2598
|
break;
|
|
2404
2599
|
}
|
|
2405
2600
|
if (shouldStartImmediatePostToolGeneration) {
|
|
2601
|
+
resolvingImmediateToolResultForUserPrompt =
|
|
2602
|
+
currentGenerationBelongsToUserPrompt ||
|
|
2603
|
+
currentGenerationBelongsToUserToolChain ||
|
|
2604
|
+
isUserOriginPrompt(currentPrompt);
|
|
2605
|
+
resolvingImmediateToolResultUserPromptMsgId = resolvingImmediateToolResultForUserPrompt
|
|
2606
|
+
? currentUserPromptMsgId
|
|
2607
|
+
: undefined;
|
|
2406
2608
|
continue;
|
|
2407
2609
|
}
|
|
2408
2610
|
}
|
|
@@ -2543,6 +2745,8 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2543
2745
|
return {
|
|
2544
2746
|
lastAssistantSayingContent,
|
|
2545
2747
|
lastAssistantSayingGenseq,
|
|
2748
|
+
lastAssistantThinkingContent,
|
|
2749
|
+
lastAssistantThinkingGenseq,
|
|
2546
2750
|
lastFunctionCallGenseq,
|
|
2547
2751
|
lastAssistantReplyTarget,
|
|
2548
2752
|
fbrConclusion,
|
|
@@ -7,4 +7,4 @@ export declare function driveDialogStreamCore(dlg: Dialog, callbacks: KernelDriv
|
|
|
7
7
|
export declare function supplyResponseToSideDialogBridge(parentDialog: Dialog, sideDialogId: DialogID, responseText: string, callType: 'A' | 'B' | 'C', callId?: string, status?: 'completed' | 'failed', calleeResponseRef?: {
|
|
8
8
|
course: number;
|
|
9
9
|
genseq: number;
|
|
10
|
-
}): Promise<void>;
|
|
10
|
+
}, directFallbackSource?: 'saying' | 'thinking_only'): Promise<void>;
|
|
@@ -25,7 +25,7 @@ async function driveDialogStream(...driveArgs) {
|
|
|
25
25
|
void dispatchDrive(dialog, options);
|
|
26
26
|
},
|
|
27
27
|
driveDialog: async (dialog, options) => {
|
|
28
|
-
await dispatchDrive(dialog, options);
|
|
28
|
+
return await dispatchDrive(dialog, options);
|
|
29
29
|
},
|
|
30
30
|
});
|
|
31
31
|
}
|
|
@@ -34,7 +34,7 @@ async function emitSayingEventsBridge(...args) {
|
|
|
34
34
|
return await (0, events_1.emitSayingEvents)(dlg, content);
|
|
35
35
|
}
|
|
36
36
|
async function supplyResponseToAskerDialog(...args) {
|
|
37
|
-
const [parentDialog, sideDialogId, responseText, callType, callId, status, calleeResponseRef] = args;
|
|
37
|
+
const [parentDialog, sideDialogId, responseText, callType, callId, status, calleeResponseRef, directFallbackSource,] = args;
|
|
38
38
|
return await (0, sideDialog_1.supplyResponseToAskerDialog)({
|
|
39
39
|
parentDialog,
|
|
40
40
|
sideDialogId,
|
|
@@ -43,6 +43,7 @@ async function supplyResponseToAskerDialog(...args) {
|
|
|
43
43
|
callId,
|
|
44
44
|
status,
|
|
45
45
|
calleeResponseRef,
|
|
46
|
+
directFallbackSource,
|
|
46
47
|
scheduleDrive: (dialog, options) => {
|
|
47
48
|
void dispatchDrive(dialog, options);
|
|
48
49
|
},
|
|
@@ -51,7 +52,7 @@ async function supplyResponseToAskerDialog(...args) {
|
|
|
51
52
|
async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions) {
|
|
52
53
|
return await (0, drive_1.driveDialogStreamCore)(dlg, callbacks, humanPrompt, driveOptions);
|
|
53
54
|
}
|
|
54
|
-
async function supplyResponseToSideDialogBridge(parentDialog, sideDialogId, responseText, callType, callId, status, calleeResponseRef) {
|
|
55
|
+
async function supplyResponseToSideDialogBridge(parentDialog, sideDialogId, responseText, callType, callId, status, calleeResponseRef, directFallbackSource) {
|
|
55
56
|
await (0, sideDialog_1.supplyResponseToAskerDialog)({
|
|
56
57
|
parentDialog,
|
|
57
58
|
sideDialogId,
|
|
@@ -60,6 +61,7 @@ async function supplyResponseToSideDialogBridge(parentDialog, sideDialogId, resp
|
|
|
60
61
|
callId,
|
|
61
62
|
status,
|
|
62
63
|
calleeResponseRef,
|
|
64
|
+
directFallbackSource,
|
|
63
65
|
scheduleDrive: (dialog, options) => {
|
|
64
66
|
void dispatchDrive(dialog, options);
|
|
65
67
|
},
|