dominds 1.23.1 → 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/cli/webui.js +8 -1
- package/dist/dialog-display-state.d.ts +1 -0
- package/dist/dialog-display-state.js +147 -12
- 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 +7 -0
- package/dist/llm/gen/mock.js +29 -17
- 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 +173 -58
- package/dist/llm/kernel-driver/loop.js +3 -1
- package/dist/llm/kernel-driver/reply-guidance.js +3 -7
- 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 +8 -3
- package/dist/persistence.js +1 -0
- package/dist/recovery/proceeding-drive.d.ts +1 -0
- package/dist/recovery/proceeding-drive.js +89 -0
- 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/runtime/reply-prompt-copy.d.ts +5 -1
- package/dist/runtime/reply-prompt-copy.js +13 -3
- package/dist/server/websocket-handler.js +0 -1
- package/dist/server.d.ts +1 -0
- package/dist/server.js +68 -14
- package/dist/tools/cmd-runner.js +76 -17
- package/dist/tools/team_mgmt-manual.js +2 -2
- package/package.json +1 -1
- 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
package/dist/llm/defaults.yaml
CHANGED
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
# `500 auth_unavailable: no auth available` infrastructure failures.
|
|
15
15
|
# `apiQuirks: same-context-empty-response` detects repeated empty responses in the same
|
|
16
16
|
# dialog generation context and stops same-context retry loops with a deadlock-break prompt.
|
|
17
|
+
# `apiQuirks: volcengine-invalid-parameter-aggressive-retry` classifies Volcano Ark Coding Plan
|
|
18
|
+
# transient `400 InvalidParameter` failures as aggressive retry when the shape matches that
|
|
19
|
+
# provider's replay-successful instability.
|
|
17
20
|
# - tool_result_max_chars: optional transport-level cap for a single tool-result text payload
|
|
18
21
|
# before Dominds projects it into the provider request. Use this when a provider/gateway enforces
|
|
19
22
|
# a stricter per-item string limit than Dominds' built-in defaults.
|
|
@@ -484,6 +487,7 @@ providers:
|
|
|
484
487
|
models:
|
|
485
488
|
kimi-for-coding:
|
|
486
489
|
name: Kimi For Coding
|
|
490
|
+
optimal_max_tokens: 180000
|
|
487
491
|
supports_thinking: true
|
|
488
492
|
default_thinking: true
|
|
489
493
|
supports_tool_choice: false
|
|
@@ -497,6 +501,7 @@ providers:
|
|
|
497
501
|
apiType: openai-compatible
|
|
498
502
|
apiQuirks:
|
|
499
503
|
- same-context-empty-response
|
|
504
|
+
- volcengine-invalid-parameter-aggressive-retry
|
|
500
505
|
baseUrl: https://ark.cn-beijing.volces.com/api/coding/v3
|
|
501
506
|
apiKeyEnvVar: ARK_API_KEY
|
|
502
507
|
tech_spec_url: https://www.volcengine.com/docs/82379/1928261
|
|
@@ -603,6 +608,7 @@ providers:
|
|
|
603
608
|
context_window: '128K'
|
|
604
609
|
kimi-k2.6:
|
|
605
610
|
name: Kimi-K2.6
|
|
611
|
+
optimal_max_tokens: 180000
|
|
606
612
|
supports_thinking: true
|
|
607
613
|
default_thinking: true
|
|
608
614
|
supports_tool_choice: false
|
|
@@ -613,6 +619,7 @@ providers:
|
|
|
613
619
|
context_window: '200K'
|
|
614
620
|
kimi-k2.5:
|
|
615
621
|
name: Kimi-K2.5
|
|
622
|
+
optimal_max_tokens: 180000
|
|
616
623
|
supports_thinking: true
|
|
617
624
|
default_thinking: false
|
|
618
625
|
supports_tool_choice: false
|
package/dist/llm/gen/mock.js
CHANGED
|
@@ -66,13 +66,11 @@ const log_1 = require("../../log");
|
|
|
66
66
|
const reply_prompt_copy_1 = require("../../runtime/reply-prompt-copy");
|
|
67
67
|
const gen_1 = require("../gen");
|
|
68
68
|
const stop_reason_i18n_1 = require("../stop-reason-i18n");
|
|
69
|
-
const REPLY_TOOL_REMINDER_PREFIXES = [
|
|
70
|
-
'[Dominds replyTellask required]',
|
|
71
|
-
'[Dominds 必须调用回复工具]',
|
|
72
|
-
];
|
|
73
69
|
const RUNTIME_PROMPT_WRAPPER_PREFIXES = [
|
|
74
70
|
reply_prompt_copy_1.ACTIVE_REPLY_TOOL_PREFIX_EN,
|
|
75
71
|
reply_prompt_copy_1.ACTIVE_REPLY_TOOL_PREFIX_ZH,
|
|
72
|
+
reply_prompt_copy_1.NO_ACTIVE_REPLY_PREFIX_EN,
|
|
73
|
+
reply_prompt_copy_1.NO_ACTIVE_REPLY_PREFIX_ZH,
|
|
76
74
|
reply_prompt_copy_1.REPLY_REASSERTION_PREFIX_EN,
|
|
77
75
|
reply_prompt_copy_1.REPLY_REASSERTION_PREFIX_ZH,
|
|
78
76
|
reply_prompt_copy_1.REPLY_SUPPRESSION_PREFIX_EN,
|
|
@@ -277,8 +275,7 @@ class MockGen {
|
|
|
277
275
|
return null;
|
|
278
276
|
}
|
|
279
277
|
buildReplyToolReminderAutoResponse(input, role, context) {
|
|
280
|
-
if (role !== 'user' ||
|
|
281
|
-
!REPLY_TOOL_REMINDER_PREFIXES.some((prefix) => input.startsWith(prefix))) {
|
|
278
|
+
if (role !== 'user' || !(0, reply_prompt_copy_1.isReplyToolReminderPromptContent)(input)) {
|
|
282
279
|
return null;
|
|
283
280
|
}
|
|
284
281
|
const toolMatch = input.match(/`(replyTellask(?:Sessionless|Back)?)`/);
|
|
@@ -382,10 +379,14 @@ responses:
|
|
|
382
379
|
const matched = this.findMatchingResponse(db, content, role, context) ??
|
|
383
380
|
this.buildReplyToolReminderAutoResponse(content, role, context);
|
|
384
381
|
await delayWithAbort(matched?.delayMs ?? 0, abortSignal);
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
382
|
+
const thinkingText = matched?.omitDefaultThinking === true
|
|
383
|
+
? (matched.thinkingResponse ?? '')
|
|
384
|
+
: (matched?.thinkingResponse ?? `[${modelName}] ${content.substring(0, 50) || '(empty)'}`);
|
|
385
|
+
if (thinkingText !== '') {
|
|
386
|
+
await receiver.thinkingStart();
|
|
387
|
+
await receiver.thinkingChunk(thinkingText);
|
|
388
|
+
await receiver.thinkingFinish();
|
|
389
|
+
}
|
|
389
390
|
if (matched?.streamError) {
|
|
390
391
|
if (matched.emitStreamErrorBeforeThrow && receiver.streamError) {
|
|
391
392
|
await receiver.streamError(matched.streamError);
|
|
@@ -491,12 +492,17 @@ responses:
|
|
|
491
492
|
this.buildReplyToolReminderAutoResponse(content, role, context);
|
|
492
493
|
await delayWithAbort(matched?.delayMs ?? 0, abortSignal);
|
|
493
494
|
const responseText = matched?.response ?? this.makeFallbackResponse(dbPath, content, role, modelName);
|
|
494
|
-
const
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
495
|
+
const thinkingText = matched?.omitDefaultThinking === true
|
|
496
|
+
? (matched.thinkingResponse ?? '')
|
|
497
|
+
: (matched?.thinkingResponse ?? `[${modelName}] ${content.substring(0, 100)}`);
|
|
498
|
+
const thinking = thinkingText === ''
|
|
499
|
+
? undefined
|
|
500
|
+
: {
|
|
501
|
+
type: 'thinking_msg',
|
|
502
|
+
role: 'assistant',
|
|
503
|
+
genseq,
|
|
504
|
+
content: thinkingText,
|
|
505
|
+
};
|
|
500
506
|
const saying = matched?.streamError || responseText !== ''
|
|
501
507
|
? {
|
|
502
508
|
type: 'saying_msg',
|
|
@@ -570,7 +576,13 @@ responses:
|
|
|
570
576
|
};
|
|
571
577
|
}) ?? [];
|
|
572
578
|
return {
|
|
573
|
-
messages:
|
|
579
|
+
messages: thinking !== undefined
|
|
580
|
+
? saying
|
|
581
|
+
? [thinking, saying, ...funcMsgs]
|
|
582
|
+
: [thinking, ...funcMsgs]
|
|
583
|
+
: saying
|
|
584
|
+
? [saying, ...funcMsgs]
|
|
585
|
+
: [...funcMsgs],
|
|
574
586
|
usage,
|
|
575
587
|
llmGenModel: modelName,
|
|
576
588
|
};
|
|
@@ -48,7 +48,6 @@ const OPENAI_COMPATIBLE_REJECTED_REQUEST_ERROR_CODE = 'OPENAI_COMPATIBLE_REJECTE
|
|
|
48
48
|
const KIMI_CODE_API_QUIRK = 'kimi-code';
|
|
49
49
|
const KIMI_CODE_REASONING_EFFORTS = new Set(['low', 'medium', 'high']);
|
|
50
50
|
const KIMI_CLI_CLOAK_API_QUIRK = 'kimi-cli-cloak';
|
|
51
|
-
const KIMI_CLI_USER_AGENT = 'KimiCLI/1.41.0';
|
|
52
51
|
const DISABLE_ASSISTANT_TOOL_CALL_REASONING_CONTENT_API_QUIRK = 'disable-assistant-tool-call-reasoning-content';
|
|
53
52
|
const JSON_SCHEMA_COMBINATOR_KEYS = new Set([
|
|
54
53
|
'anyOf',
|
|
@@ -578,7 +577,7 @@ function createOpenAiCompatibleClient(args) {
|
|
|
578
577
|
};
|
|
579
578
|
if (isKimiCliCloakProvider(args.providerConfig)) {
|
|
580
579
|
options.defaultHeaders = {
|
|
581
|
-
'User-Agent':
|
|
580
|
+
'User-Agent': `KimiCLI/Dominds/${dominds_running_version_1.DOMINDS_RUNNING_VERSION}`,
|
|
582
581
|
};
|
|
583
582
|
}
|
|
584
583
|
else if (isKimiCodeProvider(args.providerConfig)) {
|
|
@@ -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,
|