dominds 1.23.2 → 1.23.3
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 +4 -0
- package/dist/llm/gen/mock.js +26 -11
- package/dist/llm/gen/openai-compatible.js +1 -2
- 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 +158 -58
- 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/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
|
@@ -3,10 +3,7 @@ export type KernelDriverContextHealthDecision = Readonly<{
|
|
|
3
3
|
kind: 'proceed';
|
|
4
4
|
}> | Readonly<{
|
|
5
5
|
kind: 'continue';
|
|
6
|
-
reason: 'caution_soft_remediation' | 'critical_countdown_remediation' | 'critical_force_new_course';
|
|
7
|
-
}> | Readonly<{
|
|
8
|
-
kind: 'suspend';
|
|
9
|
-
reason: 'critical_wait_human';
|
|
6
|
+
reason: 'caution_soft_remediation' | 'critical_countdown_remediation' | 'critical_user_prompt_remediation' | 'critical_force_new_course';
|
|
10
7
|
}>;
|
|
11
8
|
export declare const KERNEL_DRIVER_DEFAULT_CRITICAL_COUNTDOWN_GENERATIONS = 5;
|
|
12
9
|
export declare const KERNEL_DRIVER_DEFAULT_CAUTION_REMEDIATION_CADENCE_GENERATIONS = 10;
|
|
@@ -18,6 +15,8 @@ export declare function decideKernelDriverContextHealth(args: {
|
|
|
18
15
|
dialogKey: string;
|
|
19
16
|
snapshot?: ContextHealthSnapshot;
|
|
20
17
|
hadUserPromptThisGen: boolean;
|
|
18
|
+
hadUserPromptInImmediateToolChain?: boolean;
|
|
19
|
+
userPromptCriticalRemediationAlreadyApplied?: boolean;
|
|
21
20
|
canInjectPromptThisGen: boolean;
|
|
22
21
|
cautionRemediationCadenceGenerations: number;
|
|
23
22
|
criticalCountdownRemaining: number;
|
|
@@ -111,8 +111,11 @@ function decideKernelDriverContextHealth(args) {
|
|
|
111
111
|
if (args.criticalCountdownRemaining <= 0) {
|
|
112
112
|
return { kind: 'continue', reason: 'critical_force_new_course' };
|
|
113
113
|
}
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
if (args.userPromptCriticalRemediationAlreadyApplied === true) {
|
|
115
|
+
return { kind: 'proceed' };
|
|
116
|
+
}
|
|
117
|
+
return args.hadUserPromptThisGen || args.hadUserPromptInImmediateToolChain === true
|
|
118
|
+
? { kind: 'continue', reason: 'critical_user_prompt_remediation' }
|
|
116
119
|
: { kind: 'continue', reason: 'critical_countdown_remediation' };
|
|
117
120
|
}
|
|
118
121
|
const _exhaustive = snapshot.level;
|
|
@@ -4,19 +4,15 @@ export type DriveBaseContextParts = Readonly<{
|
|
|
4
4
|
memories: readonly ChatMessage[];
|
|
5
5
|
taskDocMsg?: ChatMessage;
|
|
6
6
|
coursePrefixMsgs: readonly ChatMessage[];
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export type DriveEphemeralContextParts = Readonly<{
|
|
10
|
-
sideDialogResponseContextMsgs?: readonly ChatMessage[];
|
|
11
|
-
runtimeGuideMsgs?: readonly ChatMessage[];
|
|
7
|
+
historicalDialogMsgsForContext: readonly ChatMessage[];
|
|
8
|
+
currentTurnDialogMsgsForContext: readonly ChatMessage[];
|
|
12
9
|
}>;
|
|
13
10
|
export type DriveTailContextParts = Readonly<{
|
|
14
11
|
renderedReminders: readonly ChatMessage[];
|
|
12
|
+
activeReplyObligationContext: readonly ChatMessage[];
|
|
13
|
+
runtimeGuideMsgs: readonly ChatMessage[];
|
|
15
14
|
}>;
|
|
16
|
-
export declare function buildDriveBaseContextMessages(parts: DriveBaseContextParts): ChatMessage[];
|
|
17
|
-
export declare function appendDriveEphemeralContext(base: readonly ChatMessage[], parts: DriveEphemeralContextParts): ChatMessage[];
|
|
18
15
|
export declare function assembleDriveContextMessages(args: {
|
|
19
16
|
base: DriveBaseContextParts;
|
|
20
|
-
ephemeral: DriveEphemeralContextParts;
|
|
21
17
|
tail: DriveTailContextParts;
|
|
22
18
|
}): ChatMessage[];
|
|
@@ -1,36 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.buildDriveBaseContextMessages = buildDriveBaseContextMessages;
|
|
4
|
-
exports.appendDriveEphemeralContext = appendDriveEphemeralContext;
|
|
5
3
|
exports.assembleDriveContextMessages = assembleDriveContextMessages;
|
|
6
|
-
function buildDriveBaseContextMessages(parts) {
|
|
7
|
-
return [
|
|
8
|
-
...parts.prependedContextMessages,
|
|
9
|
-
...parts.memories,
|
|
10
|
-
...(parts.taskDocMsg ? [parts.taskDocMsg] : []),
|
|
11
|
-
...parts.coursePrefixMsgs,
|
|
12
|
-
...parts.dialogMsgsForContext,
|
|
13
|
-
];
|
|
14
|
-
}
|
|
15
|
-
function appendDriveEphemeralContext(base, parts) {
|
|
16
|
-
const next = [...base];
|
|
17
|
-
if (Array.isArray(parts.sideDialogResponseContextMsgs) &&
|
|
18
|
-
parts.sideDialogResponseContextMsgs.length > 0) {
|
|
19
|
-
next.push(...parts.sideDialogResponseContextMsgs);
|
|
20
|
-
}
|
|
21
|
-
if (Array.isArray(parts.runtimeGuideMsgs) && parts.runtimeGuideMsgs.length > 0) {
|
|
22
|
-
next.push(...parts.runtimeGuideMsgs);
|
|
23
|
-
}
|
|
24
|
-
return next;
|
|
25
|
-
}
|
|
26
4
|
function assembleDriveContextMessages(args) {
|
|
27
|
-
|
|
5
|
+
return [
|
|
28
6
|
...args.base.prependedContextMessages,
|
|
29
7
|
...args.base.memories,
|
|
30
8
|
...(args.base.taskDocMsg ? [args.base.taskDocMsg] : []),
|
|
31
9
|
...args.base.coursePrefixMsgs,
|
|
10
|
+
...args.base.historicalDialogMsgsForContext,
|
|
32
11
|
...args.tail.renderedReminders,
|
|
33
|
-
...args.
|
|
12
|
+
...args.tail.activeReplyObligationContext,
|
|
13
|
+
...args.tail.runtimeGuideMsgs,
|
|
14
|
+
...args.base.currentTurnDialogMsgsForContext,
|
|
34
15
|
];
|
|
35
|
-
return appendDriveEphemeralContext(baseMsgs, args.ephemeral);
|
|
36
16
|
}
|
|
@@ -165,7 +165,53 @@ 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 persistence_1.DialogPersistence.persistRuntimeGuide(dlg, content, dlg.activeGenSeq);
|
|
209
|
+
(0, evt_registry_1.postDialogEvent)(dlg, {
|
|
210
|
+
type: 'runtime_guide_evt',
|
|
211
|
+
course: dlg.currentCourse,
|
|
212
|
+
genseq: dlg.activeGenSeq,
|
|
213
|
+
content,
|
|
214
|
+
});
|
|
169
215
|
}
|
|
170
216
|
function resolveToolUseRequirement(dlg, policy) {
|
|
171
217
|
// FBR middle rounds are deliberately isolated from callable tools. Final closure is the opposite:
|
|
@@ -804,26 +850,28 @@ async function projectTellaskFuncResultsForContext(args) {
|
|
|
804
850
|
messages: projected,
|
|
805
851
|
};
|
|
806
852
|
}
|
|
853
|
+
async function buildActiveReplyObligationContext(dlg) {
|
|
854
|
+
const activeReplyObligation = await persistence_1.DialogPersistence.loadActiveTellaskReplyObligation(dlg.id, dlg.status);
|
|
855
|
+
if (activeReplyObligation === undefined)
|
|
856
|
+
return [];
|
|
857
|
+
return [
|
|
858
|
+
{
|
|
859
|
+
type: 'environment_msg',
|
|
860
|
+
role: 'user',
|
|
861
|
+
content: (0, reply_prompt_copy_1.buildActiveReplyObligationContextText)({
|
|
862
|
+
language: (0, work_language_1.getWorkLanguage)(),
|
|
863
|
+
directive: activeReplyObligation,
|
|
864
|
+
}),
|
|
865
|
+
},
|
|
866
|
+
];
|
|
867
|
+
}
|
|
807
868
|
async function buildDialogMsgsForContext(dlg) {
|
|
808
869
|
const rawDialogMsgsForContext = dlg.msgs.filter((m) => !!m);
|
|
809
870
|
const projected = await projectTellaskFuncResultsForContext({
|
|
810
871
|
dialog: dlg,
|
|
811
872
|
dialogMsgsForContext: rawDialogMsgsForContext,
|
|
812
873
|
});
|
|
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) => {
|
|
874
|
+
const businessFiltered = projected.messages.filter((msg) => {
|
|
827
875
|
return msg.type !== 'tellask_result_msg' || msg.content.trim() !== '';
|
|
828
876
|
});
|
|
829
877
|
const sanitized = (0, tool_call_context_1.sanitizeToolContextForProvider)(businessFiltered);
|
|
@@ -1252,38 +1300,39 @@ async function preserveDiligenceBudgetAcrossQ4H(dlg) {
|
|
|
1252
1300
|
}
|
|
1253
1301
|
async function maybeContinueWithDiligencePrompt(args) {
|
|
1254
1302
|
const { dlg, team, suppressDiligencePushForDrive, allowPendingSideDialogs, ignoreBudgetExhaustion, } = args;
|
|
1255
|
-
if (!(dlg instanceof dialog_1.MainDialog)) {
|
|
1256
|
-
return { kind: 'break' };
|
|
1257
|
-
}
|
|
1258
1303
|
const suspension = await dlg.getSuspensionStatus({
|
|
1259
1304
|
allowPendingSideDialogs: allowPendingSideDialogs === true,
|
|
1260
1305
|
});
|
|
1261
1306
|
if (!suspension.canDrive) {
|
|
1262
|
-
if (suspension.q4h) {
|
|
1307
|
+
if (suspension.q4h && dlg instanceof dialog_1.MainDialog) {
|
|
1263
1308
|
await preserveDiligenceBudgetAcrossQ4H(dlg);
|
|
1264
1309
|
}
|
|
1265
1310
|
return { kind: 'break' };
|
|
1266
1311
|
}
|
|
1267
1312
|
const prepared = await (0, runtime_1.maybePrepareDiligenceAutoContinuePrompt)({
|
|
1268
1313
|
dlg,
|
|
1269
|
-
isMainDialog: true,
|
|
1270
1314
|
remainingBudget: dlg.diligencePushRemainingBudget,
|
|
1271
1315
|
diligencePushMax: resolveMemberDiligencePushMax(team, dlg.agentId),
|
|
1272
1316
|
suppressDiligencePush: suppressDiligencePushForDrive,
|
|
1273
1317
|
ignoreBudgetExhaustion,
|
|
1274
1318
|
});
|
|
1275
|
-
dlg
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1319
|
+
if (dlg instanceof dialog_1.MainDialog) {
|
|
1320
|
+
dlg.diligencePushRemainingBudget = prepared.nextRemainingBudget;
|
|
1321
|
+
void persistence_1.DialogPersistence.mutateDialogLatest(dlg.id, () => ({
|
|
1322
|
+
kind: 'patch',
|
|
1323
|
+
patch: { diligencePushRemainingBudget: dlg.diligencePushRemainingBudget },
|
|
1324
|
+
}));
|
|
1325
|
+
}
|
|
1326
|
+
if (dlg instanceof dialog_1.MainDialog && prepared.kind !== 'disabled') {
|
|
1281
1327
|
emitDiligenceBudgetEvent(dlg, {
|
|
1282
1328
|
maxInjectCount: prepared.maxInjectCount,
|
|
1283
1329
|
nextRemainingBudget: prepared.nextRemainingBudget,
|
|
1284
1330
|
});
|
|
1285
1331
|
}
|
|
1286
1332
|
if (prepared.kind === 'budget_exhausted') {
|
|
1333
|
+
if (!(dlg instanceof dialog_1.MainDialog)) {
|
|
1334
|
+
throw new Error(`kernel-driver Diligence Push invariant violation: non-main dialog returned budget_exhausted (${dlg.id.valueOf()})`);
|
|
1335
|
+
}
|
|
1287
1336
|
await (0, runtime_1.suspendForKeepGoingBudgetExhausted)({
|
|
1288
1337
|
dlg,
|
|
1289
1338
|
maxInjectCount: prepared.maxInjectCount,
|
|
@@ -1333,9 +1382,6 @@ async function maybeContinueWithHealthPromptBeforeDiligence(args) {
|
|
|
1333
1382
|
cautionRemediationCadenceGenerations,
|
|
1334
1383
|
criticalCountdownRemaining,
|
|
1335
1384
|
});
|
|
1336
|
-
if (healthDecision.kind === 'suspend') {
|
|
1337
|
-
return { kind: 'health_suspend' };
|
|
1338
|
-
}
|
|
1339
1385
|
if (healthDecision.kind !== 'continue') {
|
|
1340
1386
|
return { kind: 'no_health_prompt' };
|
|
1341
1387
|
}
|
|
@@ -1389,13 +1435,22 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1389
1435
|
const suppressDiligencePushForDrive = driveOptions?.suppressDiligencePush === true && dlg.disableDiligencePush;
|
|
1390
1436
|
const abortSignal = (0, dialog_display_state_1.getActiveRunSignal)(dlg.id) ?? (0, dialog_display_state_1.createActiveRun)(dlg.id);
|
|
1391
1437
|
let finalDisplayState;
|
|
1438
|
+
let criticalUserInterjectionRuntimeGuide = driveOptions?.criticalUserInterjectionRuntimeGuide;
|
|
1392
1439
|
let lastAssistantSayingContent = null;
|
|
1393
1440
|
let lastAssistantSayingGenseq = null;
|
|
1441
|
+
let lastAssistantThinkingContent = null;
|
|
1442
|
+
let lastAssistantThinkingGenseq = null;
|
|
1394
1443
|
let lastFunctionCallGenseq = null;
|
|
1395
1444
|
let lastAssistantReplyTarget;
|
|
1396
1445
|
let fbrConclusion;
|
|
1397
1446
|
let pubRemindersVer = dlg.remindersVer;
|
|
1398
1447
|
let pendingPrompt = humanPrompt;
|
|
1448
|
+
let resolvingImmediateToolResultForUserPrompt = false;
|
|
1449
|
+
let resolvingImmediateToolResultUserPromptMsgId;
|
|
1450
|
+
let criticalRemediationAppliedUserPromptMsgId = driveOptions?.criticalUserInterjectionRuntimeGuide !== undefined &&
|
|
1451
|
+
humanPrompt?.origin === 'user'
|
|
1452
|
+
? humanPrompt.msgId
|
|
1453
|
+
: undefined;
|
|
1399
1454
|
let retryStoppedRecoveryPrompt;
|
|
1400
1455
|
let skipTaskdocForThisDrive = humanPrompt?.skipTaskdoc === true;
|
|
1401
1456
|
let genIterNo = 0;
|
|
@@ -1507,7 +1562,17 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1507
1562
|
: canonicalFuncTools;
|
|
1508
1563
|
const projected = (0, tools_projection_1.projectFuncToolsForProvider)(providerCfg.apiType, effectiveFuncTools);
|
|
1509
1564
|
const funcTools = projected.tools;
|
|
1565
|
+
const currentPendingPrompt = pendingPrompt;
|
|
1566
|
+
let currentGenerationBelongsToUserPrompt = isUserOriginPrompt(currentPendingPrompt);
|
|
1567
|
+
let currentGenerationBelongsToUserToolChain = false;
|
|
1568
|
+
let currentUserPromptMsgId = getUserOriginPromptMsgId(currentPendingPrompt);
|
|
1510
1569
|
if (genIterNo > 1) {
|
|
1570
|
+
currentGenerationBelongsToUserToolChain = resolvingImmediateToolResultForUserPrompt;
|
|
1571
|
+
if (currentUserPromptMsgId === undefined) {
|
|
1572
|
+
currentUserPromptMsgId = resolvingImmediateToolResultUserPromptMsgId;
|
|
1573
|
+
}
|
|
1574
|
+
resolvingImmediateToolResultForUserPrompt = false;
|
|
1575
|
+
resolvingImmediateToolResultUserPromptMsgId = undefined;
|
|
1511
1576
|
const snapshot = dlg.getLastContextHealth();
|
|
1512
1577
|
const hasQueuedUpNext = dlg.hasUpNext() || pendingPrompt !== undefined;
|
|
1513
1578
|
const modelInfoForRemediation = resolveModelInfo(providerCfg, model);
|
|
@@ -1516,21 +1581,14 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1516
1581
|
const healthDecision = (0, context_health_1.decideKernelDriverContextHealth)({
|
|
1517
1582
|
dialogKey: dlg.id.key(),
|
|
1518
1583
|
snapshot,
|
|
1519
|
-
hadUserPromptThisGen:
|
|
1584
|
+
hadUserPromptThisGen: currentGenerationBelongsToUserPrompt,
|
|
1585
|
+
hadUserPromptInImmediateToolChain: currentGenerationBelongsToUserToolChain,
|
|
1586
|
+
userPromptCriticalRemediationAlreadyApplied: criticalRemediationAppliedUserPromptMsgId !== undefined &&
|
|
1587
|
+
criticalRemediationAppliedUserPromptMsgId === currentUserPromptMsgId,
|
|
1520
1588
|
canInjectPromptThisGen: !hasQueuedUpNext,
|
|
1521
1589
|
cautionRemediationCadenceGenerations,
|
|
1522
1590
|
criticalCountdownRemaining,
|
|
1523
1591
|
});
|
|
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
1592
|
if (healthDecision.kind === 'continue') {
|
|
1535
1593
|
if (healthDecision.reason === 'critical_force_new_course') {
|
|
1536
1594
|
const language = (0, work_language_1.getWorkLanguage)();
|
|
@@ -1548,6 +1606,16 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1548
1606
|
pendingPrompt = nextPrompt;
|
|
1549
1607
|
skipTaskdocForThisDrive = false;
|
|
1550
1608
|
}
|
|
1609
|
+
else if (healthDecision.reason === 'critical_user_prompt_remediation') {
|
|
1610
|
+
const language = (0, work_language_1.getWorkLanguage)();
|
|
1611
|
+
const dialogScope = dlg instanceof dialog_1.SideDialog ? 'sideDialog' : 'mainDialog';
|
|
1612
|
+
criticalUserInterjectionRuntimeGuide =
|
|
1613
|
+
(0, driver_messages_1.formatAgentFacingCriticalUserInterjectionRemediationGuide)(language, {
|
|
1614
|
+
dialogScope,
|
|
1615
|
+
promptsRemainingAfterThis: (0, context_health_1.consumeCriticalCountdown)(dlg.id.key()),
|
|
1616
|
+
});
|
|
1617
|
+
criticalRemediationAppliedUserPromptMsgId = currentUserPromptMsgId;
|
|
1618
|
+
}
|
|
1551
1619
|
else if (!hasQueuedUpNext) {
|
|
1552
1620
|
const language = (0, work_language_1.getWorkLanguage)();
|
|
1553
1621
|
const dialogScope = dlg instanceof dialog_1.SideDialog ? 'sideDialog' : 'mainDialog';
|
|
@@ -1586,6 +1654,10 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1586
1654
|
pendingPrompt = undefined;
|
|
1587
1655
|
await dlg.notifyGeneratingStart(currentPrompt?.msgId);
|
|
1588
1656
|
try {
|
|
1657
|
+
if (criticalUserInterjectionRuntimeGuide !== undefined) {
|
|
1658
|
+
await persistAndEmitRuntimeGuide(dlg, criticalUserInterjectionRuntimeGuide);
|
|
1659
|
+
criticalUserInterjectionRuntimeGuide = undefined;
|
|
1660
|
+
}
|
|
1589
1661
|
if (currentPrompt) {
|
|
1590
1662
|
const origin = currentPrompt.origin;
|
|
1591
1663
|
if (origin === 'diligence_push' &&
|
|
@@ -1665,14 +1737,7 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1665
1737
|
const renderPromptAsRuntimeGuideBubble = origin === 'runtime' &&
|
|
1666
1738
|
(0, reply_prompt_copy_1.isStandaloneRuntimeGuidePromptContent)(replyGuidance.promptContent);
|
|
1667
1739
|
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
|
-
});
|
|
1740
|
+
await persistAndEmitRuntimeGuide(dlg, currentRuntimeGuideMsg.content);
|
|
1676
1741
|
currentRuntimeGuideMsg = undefined;
|
|
1677
1742
|
}
|
|
1678
1743
|
if (isQ4HAnswerPrompt) {
|
|
@@ -1796,13 +1861,18 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1796
1861
|
: undefined;
|
|
1797
1862
|
const renderedReminders = await renderRemindersForContext(dlg);
|
|
1798
1863
|
const dialogMsgsForContext = await buildDialogMsgsForContext(dlg);
|
|
1864
|
+
const activeReplyObligationContext = await buildActiveReplyObligationContext(dlg);
|
|
1865
|
+
const splitDialogMsgs = splitDialogMsgsForReminderInsertion({
|
|
1866
|
+
msgs: dialogMsgsForContext,
|
|
1867
|
+
currentPrompt,
|
|
1868
|
+
});
|
|
1799
1869
|
const reminderContextBlock = renderedReminders.length > 0
|
|
1800
1870
|
? [
|
|
1801
1871
|
...renderedReminders,
|
|
1802
1872
|
{
|
|
1803
1873
|
type: 'environment_msg',
|
|
1804
1874
|
role: 'user',
|
|
1805
|
-
content: (0, driver_messages_1.formatReminderContextFooter)((0, work_language_1.getWorkLanguage)()),
|
|
1875
|
+
content: (0, driver_messages_1.formatReminderContextFooter)((0, work_language_1.getWorkLanguage)(), resolveReminderContextFollowingDialogState(currentPrompt, splitDialogMsgs.currentTurnDialogMsgsForContext)),
|
|
1806
1876
|
},
|
|
1807
1877
|
]
|
|
1808
1878
|
: renderedReminders;
|
|
@@ -1812,12 +1882,14 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1812
1882
|
memories: minds.memories,
|
|
1813
1883
|
taskDocMsg,
|
|
1814
1884
|
coursePrefixMsgs: dlg.getCoursePrefixMsgs(),
|
|
1815
|
-
|
|
1885
|
+
historicalDialogMsgsForContext: splitDialogMsgs.historicalDialogMsgsForContext,
|
|
1886
|
+
currentTurnDialogMsgsForContext: splitDialogMsgs.currentTurnDialogMsgsForContext,
|
|
1816
1887
|
},
|
|
1817
|
-
|
|
1818
|
-
|
|
1888
|
+
tail: {
|
|
1889
|
+
renderedReminders: reminderContextBlock,
|
|
1890
|
+
activeReplyObligationContext,
|
|
1891
|
+
runtimeGuideMsgs: currentRuntimeGuideMsg ? [currentRuntimeGuideMsg] : [],
|
|
1819
1892
|
},
|
|
1820
|
-
tail: { renderedReminders: reminderContextBlock },
|
|
1821
1893
|
});
|
|
1822
1894
|
const newMsgs = [];
|
|
1823
1895
|
const streamedFuncCalls = [];
|
|
@@ -1906,6 +1978,8 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1906
1978
|
let streamAttemptCheckpointOffset;
|
|
1907
1979
|
let streamAttemptSayingContent;
|
|
1908
1980
|
let streamAttemptSayingGenseq;
|
|
1981
|
+
let streamAttemptThinkingContent;
|
|
1982
|
+
let streamAttemptThinkingGenseq;
|
|
1909
1983
|
let streamActive = { kind: 'idle' };
|
|
1910
1984
|
const rollbackStreamAttempt = async () => {
|
|
1911
1985
|
if (streamAttemptCourse === undefined ||
|
|
@@ -1925,6 +1999,8 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1925
1999
|
currentSayingContent = '';
|
|
1926
2000
|
streamAttemptSayingContent = undefined;
|
|
1927
2001
|
streamAttemptSayingGenseq = undefined;
|
|
2002
|
+
streamAttemptThinkingContent = undefined;
|
|
2003
|
+
streamAttemptThinkingGenseq = undefined;
|
|
1928
2004
|
sawWebSearchSideChannelOutput = false;
|
|
1929
2005
|
sawNativeToolSideChannelOutput = false;
|
|
1930
2006
|
streamedFuncCalls.length = 0;
|
|
@@ -1975,13 +2051,16 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
1975
2051
|
currentThinkingReasoning = reasoning;
|
|
1976
2052
|
await dlg.thinkingFinish(reasoning);
|
|
1977
2053
|
if (currentThinkingContent.length > 0 || currentThinkingReasoning !== undefined) {
|
|
1978
|
-
|
|
2054
|
+
const thinkingMessage = {
|
|
1979
2055
|
type: 'thinking_msg',
|
|
1980
2056
|
role: 'assistant',
|
|
1981
2057
|
genseq: dlg.activeGenSeq,
|
|
1982
2058
|
content: currentThinkingContent,
|
|
1983
2059
|
reasoning: currentThinkingReasoning,
|
|
1984
|
-
}
|
|
2060
|
+
};
|
|
2061
|
+
newMsgs.push(thinkingMessage);
|
|
2062
|
+
streamAttemptThinkingContent = currentThinkingContent;
|
|
2063
|
+
streamAttemptThinkingGenseq = thinkingMessage.genseq;
|
|
1985
2064
|
}
|
|
1986
2065
|
currentThinkingContent = '';
|
|
1987
2066
|
currentThinkingReasoning = undefined;
|
|
@@ -2093,6 +2172,8 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2093
2172
|
currentSayingContent = '';
|
|
2094
2173
|
streamAttemptSayingContent = undefined;
|
|
2095
2174
|
streamAttemptSayingGenseq = undefined;
|
|
2175
|
+
streamAttemptThinkingContent = undefined;
|
|
2176
|
+
streamAttemptThinkingGenseq = undefined;
|
|
2096
2177
|
sawWebSearchSideChannelOutput = false;
|
|
2097
2178
|
sawNativeToolSideChannelOutput = false;
|
|
2098
2179
|
streamedFuncCalls.length = 0;
|
|
@@ -2128,6 +2209,14 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2128
2209
|
streamAttemptSayingGenseq === undefined ? null : streamAttemptSayingGenseq;
|
|
2129
2210
|
lastAssistantReplyTarget = currentReplyTarget;
|
|
2130
2211
|
}
|
|
2212
|
+
if (streamAttemptThinkingContent !== undefined) {
|
|
2213
|
+
lastAssistantThinkingContent = streamAttemptThinkingContent;
|
|
2214
|
+
lastAssistantThinkingGenseq =
|
|
2215
|
+
streamAttemptThinkingGenseq === undefined ? null : streamAttemptThinkingGenseq;
|
|
2216
|
+
if (streamAttemptSayingContent === undefined) {
|
|
2217
|
+
lastAssistantReplyTarget = currentReplyTarget;
|
|
2218
|
+
}
|
|
2219
|
+
}
|
|
2131
2220
|
return { usage: res.usage, llmGenModel: res.llmGenModel };
|
|
2132
2221
|
};
|
|
2133
2222
|
const llmOutput = await streamOrBatch();
|
|
@@ -2152,6 +2241,9 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2152
2241
|
if (msg.type === 'thinking_msg' || msg.type === 'saying_msg') {
|
|
2153
2242
|
newMsgs.push(msg);
|
|
2154
2243
|
if (msg.type === 'thinking_msg') {
|
|
2244
|
+
lastAssistantThinkingContent = msg.content;
|
|
2245
|
+
lastAssistantThinkingGenseq = msg.genseq;
|
|
2246
|
+
lastAssistantReplyTarget = currentReplyTarget;
|
|
2155
2247
|
await (0, events_1.emitThinkingEvents)(dlg, msg.content, msg.reasoning);
|
|
2156
2248
|
}
|
|
2157
2249
|
else {
|
|
@@ -2225,6 +2317,8 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2225
2317
|
return {
|
|
2226
2318
|
lastAssistantSayingContent,
|
|
2227
2319
|
lastAssistantSayingGenseq,
|
|
2320
|
+
lastAssistantThinkingContent,
|
|
2321
|
+
lastAssistantThinkingGenseq,
|
|
2228
2322
|
lastFunctionCallGenseq,
|
|
2229
2323
|
lastAssistantReplyTarget,
|
|
2230
2324
|
};
|
|
@@ -2388,9 +2482,6 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2388
2482
|
}
|
|
2389
2483
|
continue;
|
|
2390
2484
|
}
|
|
2391
|
-
if (healthFirst.kind === 'health_suspend') {
|
|
2392
|
-
break;
|
|
2393
|
-
}
|
|
2394
2485
|
const next = await maybeContinueWithDiligencePrompt({
|
|
2395
2486
|
dlg,
|
|
2396
2487
|
team,
|
|
@@ -2403,6 +2494,13 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2403
2494
|
break;
|
|
2404
2495
|
}
|
|
2405
2496
|
if (shouldStartImmediatePostToolGeneration) {
|
|
2497
|
+
resolvingImmediateToolResultForUserPrompt =
|
|
2498
|
+
currentGenerationBelongsToUserPrompt ||
|
|
2499
|
+
currentGenerationBelongsToUserToolChain ||
|
|
2500
|
+
isUserOriginPrompt(currentPrompt);
|
|
2501
|
+
resolvingImmediateToolResultUserPromptMsgId = resolvingImmediateToolResultForUserPrompt
|
|
2502
|
+
? currentUserPromptMsgId
|
|
2503
|
+
: undefined;
|
|
2406
2504
|
continue;
|
|
2407
2505
|
}
|
|
2408
2506
|
}
|
|
@@ -2543,6 +2641,8 @@ async function driveDialogStreamCore(dlg, callbacks, humanPrompt, driveOptions)
|
|
|
2543
2641
|
return {
|
|
2544
2642
|
lastAssistantSayingContent,
|
|
2545
2643
|
lastAssistantSayingGenseq,
|
|
2644
|
+
lastAssistantThinkingContent,
|
|
2645
|
+
lastAssistantThinkingGenseq,
|
|
2546
2646
|
lastFunctionCallGenseq,
|
|
2547
2647
|
lastAssistantReplyTarget,
|
|
2548
2648
|
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
|
},
|