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
package/dist/llm/gen/mock.js
CHANGED
|
@@ -379,10 +379,14 @@ responses:
|
|
|
379
379
|
const matched = this.findMatchingResponse(db, content, role, context) ??
|
|
380
380
|
this.buildReplyToolReminderAutoResponse(content, role, context);
|
|
381
381
|
await delayWithAbort(matched?.delayMs ?? 0, abortSignal);
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
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
|
+
}
|
|
386
390
|
if (matched?.streamError) {
|
|
387
391
|
if (matched.emitStreamErrorBeforeThrow && receiver.streamError) {
|
|
388
392
|
await receiver.streamError(matched.streamError);
|
|
@@ -470,6 +474,10 @@ responses:
|
|
|
470
474
|
: `mock_func_${String(i + 1)}_${call.name}`;
|
|
471
475
|
await receiver.funcCall(callId, call.name, this.normalizeFuncCallArgs(call.arguments));
|
|
472
476
|
}
|
|
477
|
+
const invalidFuncCalls = matched?.invalidFuncCalls ?? [];
|
|
478
|
+
for (const call of invalidFuncCalls) {
|
|
479
|
+
await receiver.invalidFuncCall?.(call);
|
|
480
|
+
}
|
|
473
481
|
return { usage, llmGenModel: modelName };
|
|
474
482
|
}
|
|
475
483
|
async genMoreMessages(providerConfig, agent, systemPrompt, _funcTools, _requestContext, context, genseq, abortSignal) {
|
|
@@ -488,12 +496,17 @@ responses:
|
|
|
488
496
|
this.buildReplyToolReminderAutoResponse(content, role, context);
|
|
489
497
|
await delayWithAbort(matched?.delayMs ?? 0, abortSignal);
|
|
490
498
|
const responseText = matched?.response ?? this.makeFallbackResponse(dbPath, content, role, modelName);
|
|
491
|
-
const
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
499
|
+
const thinkingText = matched?.omitDefaultThinking === true
|
|
500
|
+
? (matched.thinkingResponse ?? '')
|
|
501
|
+
: (matched?.thinkingResponse ?? `[${modelName}] ${content.substring(0, 100)}`);
|
|
502
|
+
const thinking = thinkingText === ''
|
|
503
|
+
? undefined
|
|
504
|
+
: {
|
|
505
|
+
type: 'thinking_msg',
|
|
506
|
+
role: 'assistant',
|
|
507
|
+
genseq,
|
|
508
|
+
content: thinkingText,
|
|
509
|
+
};
|
|
497
510
|
const saying = matched?.streamError || responseText !== ''
|
|
498
511
|
? {
|
|
499
512
|
type: 'saying_msg',
|
|
@@ -566,8 +579,28 @@ responses:
|
|
|
566
579
|
arguments: this.normalizeFuncCallArgs(call.arguments),
|
|
567
580
|
};
|
|
568
581
|
}) ?? [];
|
|
582
|
+
const invalidFuncCalls = matched?.invalidFuncCalls ?? [];
|
|
583
|
+
const invalidFuncCallOutputs = invalidFuncCalls.map((call) => ({
|
|
584
|
+
kind: 'invalid_func_call',
|
|
585
|
+
call,
|
|
586
|
+
}));
|
|
587
|
+
const messages = thinking !== undefined
|
|
588
|
+
? saying
|
|
589
|
+
? [thinking, saying, ...funcMsgs]
|
|
590
|
+
: [thinking, ...funcMsgs]
|
|
591
|
+
: saying
|
|
592
|
+
? [saying, ...funcMsgs]
|
|
593
|
+
: [...funcMsgs];
|
|
569
594
|
return {
|
|
570
|
-
messages
|
|
595
|
+
messages,
|
|
596
|
+
...(invalidFuncCallOutputs.length > 0
|
|
597
|
+
? {
|
|
598
|
+
outputs: [
|
|
599
|
+
...messages.map((message) => ({ kind: 'message', message })),
|
|
600
|
+
...invalidFuncCallOutputs,
|
|
601
|
+
],
|
|
602
|
+
}
|
|
603
|
+
: {}),
|
|
571
604
|
usage,
|
|
572
605
|
llmGenModel: modelName,
|
|
573
606
|
};
|
|
@@ -14,7 +14,7 @@ import type { ChatCompletion, ChatCompletionChunk, ChatCompletionMessageParam }
|
|
|
14
14
|
import type { Team } from '../../team';
|
|
15
15
|
import type { FuncTool } from '../../tool';
|
|
16
16
|
import type { ChatMessage, ModelInfo, ProviderConfig } from '../client';
|
|
17
|
-
import { type LlmBatchResult, type LlmFailureDisposition, type LlmGenerator, type LlmRequestContext, type LlmStreamReceiver, type LlmStreamResult } from '../gen';
|
|
17
|
+
import { type LlmBatchOutput, type LlmBatchResult, type LlmFailureDisposition, type LlmGenerator, type LlmRequestContext, type LlmStreamReceiver, type LlmStreamResult } from '../gen';
|
|
18
18
|
type OpenAiCompatibleChatExtraParams = {
|
|
19
19
|
thinking?: boolean | Record<string, unknown>;
|
|
20
20
|
reasoning_effort?: NonNullable<Team.ModelParams['openai-compatible']>['reasoning_effort'];
|
|
@@ -48,6 +48,7 @@ export declare function consumeOpenAiCompatibleChatCompletionStreamForTest(args:
|
|
|
48
48
|
abortSignal?: AbortSignal;
|
|
49
49
|
}): Promise<LlmStreamResult>;
|
|
50
50
|
export declare function chatCompletionToChatMessagesForTest(response: ChatCompletion, genseq: number): ChatMessage[];
|
|
51
|
+
export declare function chatCompletionToBatchOutputsForTest(response: ChatCompletion, genseq: number): LlmBatchOutput[];
|
|
51
52
|
export declare class OpenAiCompatibleGen implements LlmGenerator {
|
|
52
53
|
get apiType(): string;
|
|
53
54
|
classifyFailure(error: unknown): LlmFailureDisposition | undefined;
|
|
@@ -22,6 +22,7 @@ exports.wrapOpenAiCompatibleRejectedRequestErrorForTest = wrapOpenAiCompatibleRe
|
|
|
22
22
|
exports.buildOpenAiCompatibleRequestMessagesWrapper = buildOpenAiCompatibleRequestMessagesWrapper;
|
|
23
23
|
exports.consumeOpenAiCompatibleChatCompletionStreamForTest = consumeOpenAiCompatibleChatCompletionStreamForTest;
|
|
24
24
|
exports.chatCompletionToChatMessagesForTest = chatCompletionToChatMessagesForTest;
|
|
25
|
+
exports.chatCompletionToBatchOutputsForTest = chatCompletionToBatchOutputsForTest;
|
|
25
26
|
const events_1 = require("events");
|
|
26
27
|
const fs_1 = require("fs");
|
|
27
28
|
const promises_1 = __importDefault(require("fs/promises"));
|
|
@@ -48,7 +49,6 @@ const OPENAI_COMPATIBLE_REJECTED_REQUEST_ERROR_CODE = 'OPENAI_COMPATIBLE_REJECTE
|
|
|
48
49
|
const KIMI_CODE_API_QUIRK = 'kimi-code';
|
|
49
50
|
const KIMI_CODE_REASONING_EFFORTS = new Set(['low', 'medium', 'high']);
|
|
50
51
|
const KIMI_CLI_CLOAK_API_QUIRK = 'kimi-cli-cloak';
|
|
51
|
-
const KIMI_CLI_USER_AGENT = 'KimiCLI/1.41.0';
|
|
52
52
|
const DISABLE_ASSISTANT_TOOL_CALL_REASONING_CONTENT_API_QUIRK = 'disable-assistant-tool-call-reasoning-content';
|
|
53
53
|
const JSON_SCHEMA_COMBINATOR_KEYS = new Set([
|
|
54
54
|
'anyOf',
|
|
@@ -578,7 +578,7 @@ function createOpenAiCompatibleClient(args) {
|
|
|
578
578
|
};
|
|
579
579
|
if (isKimiCliCloakProvider(args.providerConfig)) {
|
|
580
580
|
options.defaultHeaders = {
|
|
581
|
-
'User-Agent':
|
|
581
|
+
'User-Agent': `KimiCLI/Dominds/${dominds_running_version_1.DOMINDS_RUNNING_VERSION}`,
|
|
582
582
|
};
|
|
583
583
|
}
|
|
584
584
|
else if (isKimiCodeProvider(args.providerConfig)) {
|
|
@@ -1476,6 +1476,24 @@ function throwOpenAiCompatibleMalformedBatchToolCall(detail) {
|
|
|
1476
1476
|
log.error(message, error);
|
|
1477
1477
|
throw error;
|
|
1478
1478
|
}
|
|
1479
|
+
function buildInvalidStreamedToolFunctionNameCall(state) {
|
|
1480
|
+
return {
|
|
1481
|
+
provider: 'openai-compatible',
|
|
1482
|
+
callId: state.callId,
|
|
1483
|
+
detail: `OPENAI-COMPATIBLE missing streamed tool function name for callId=${state.callId}`,
|
|
1484
|
+
toolCallIndex: state.index,
|
|
1485
|
+
rawArgumentsText: state.argsJson,
|
|
1486
|
+
};
|
|
1487
|
+
}
|
|
1488
|
+
function buildInvalidToolFunctionNameCall(args) {
|
|
1489
|
+
return {
|
|
1490
|
+
provider: 'openai-compatible',
|
|
1491
|
+
callId: args.callId,
|
|
1492
|
+
detail: `OPENAI-COMPATIBLE missing tool function name for callId=${args.callId}`,
|
|
1493
|
+
toolCallIndex: args.toolCallIndex,
|
|
1494
|
+
rawArgumentsText: args.rawArgumentsText,
|
|
1495
|
+
};
|
|
1496
|
+
}
|
|
1479
1497
|
async function maybeEmitFuncCall(state, receiver, genseq) {
|
|
1480
1498
|
if (state.emitted)
|
|
1481
1499
|
return;
|
|
@@ -1483,17 +1501,32 @@ async function maybeEmitFuncCall(state, receiver, genseq) {
|
|
|
1483
1501
|
state.callId = synthesizeCallId(genseq, state.index);
|
|
1484
1502
|
}
|
|
1485
1503
|
if (state.name.trim().length === 0) {
|
|
1486
|
-
|
|
1504
|
+
if (state.argsJson.trim().length === 0) {
|
|
1505
|
+
log.warn('OPENAI-COMPATIBLE ignored empty streamed tool call placeholder', undefined, {
|
|
1506
|
+
callId: state.callId,
|
|
1507
|
+
index: state.index,
|
|
1508
|
+
});
|
|
1509
|
+
state.emitted = true;
|
|
1510
|
+
return;
|
|
1511
|
+
}
|
|
1512
|
+
const invalidCall = buildInvalidStreamedToolFunctionNameCall(state);
|
|
1513
|
+
const detail = invalidCall.detail;
|
|
1487
1514
|
log.error(detail, new Error('openai_compatible_missing_tool_call_name'), {
|
|
1488
1515
|
callId: state.callId,
|
|
1516
|
+
index: state.index,
|
|
1489
1517
|
});
|
|
1490
|
-
if (receiver.
|
|
1491
|
-
|
|
1518
|
+
if (!receiver.invalidFuncCall) {
|
|
1519
|
+
if (receiver.streamError) {
|
|
1520
|
+
await receiver.streamError(detail);
|
|
1521
|
+
}
|
|
1522
|
+
throw buildOpenAiCompatibleStreamError({
|
|
1523
|
+
detail,
|
|
1524
|
+
kind: 'invalid_tool_call',
|
|
1525
|
+
});
|
|
1492
1526
|
}
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
});
|
|
1527
|
+
state.emitted = true;
|
|
1528
|
+
await receiver.invalidFuncCall(invalidCall);
|
|
1529
|
+
return;
|
|
1497
1530
|
}
|
|
1498
1531
|
state.emitted = true;
|
|
1499
1532
|
const args = state.argsJson.trim().length > 0 ? state.argsJson : '{}';
|
|
@@ -1695,25 +1728,27 @@ async function consumeOpenAiCompatibleChatCompletionStreamForTest(args) {
|
|
|
1695
1728
|
abortSignal: args.abortSignal,
|
|
1696
1729
|
});
|
|
1697
1730
|
}
|
|
1698
|
-
function
|
|
1699
|
-
const
|
|
1731
|
+
function chatCompletionToBatchOutputs(response, genseq) {
|
|
1732
|
+
const outputs = [];
|
|
1700
1733
|
const choice = response.choices && response.choices.length > 0 ? response.choices[0] : undefined;
|
|
1701
1734
|
const msg = choice ? choice.message : undefined;
|
|
1702
1735
|
if (!msg)
|
|
1703
|
-
return
|
|
1736
|
+
return outputs;
|
|
1704
1737
|
const reasoningContent = extractReasoningContentField(msg);
|
|
1705
1738
|
if (reasoningContent && reasoningContent.length > 0) {
|
|
1706
|
-
|
|
1739
|
+
const message = {
|
|
1707
1740
|
type: 'thinking_msg',
|
|
1708
1741
|
role: 'assistant',
|
|
1709
1742
|
genseq,
|
|
1710
1743
|
content: reasoningContent,
|
|
1711
1744
|
reasoning: buildReasoningPayloadFromText(reasoningContent),
|
|
1712
|
-
}
|
|
1745
|
+
};
|
|
1746
|
+
outputs.push({ kind: 'message', message });
|
|
1713
1747
|
}
|
|
1714
1748
|
const content = typeof msg.content === 'string' ? msg.content : null;
|
|
1715
1749
|
if (content && content.length > 0) {
|
|
1716
|
-
|
|
1750
|
+
const message = { type: 'saying_msg', role: 'assistant', genseq, content };
|
|
1751
|
+
outputs.push({ kind: 'message', message });
|
|
1717
1752
|
}
|
|
1718
1753
|
const toolCalls = msg.tool_calls;
|
|
1719
1754
|
if (Array.isArray(toolCalls)) {
|
|
@@ -1731,23 +1766,48 @@ function chatCompletionToChatMessages(response, genseq) {
|
|
|
1731
1766
|
const name = typeof call.function?.name === 'string' ? call.function.name : '';
|
|
1732
1767
|
const args = typeof call.function?.arguments === 'string' ? call.function.arguments : '';
|
|
1733
1768
|
if (name.trim().length === 0) {
|
|
1734
|
-
|
|
1769
|
+
const invalidCall = buildInvalidToolFunctionNameCall({
|
|
1770
|
+
callId,
|
|
1771
|
+
toolCallIndex: index,
|
|
1772
|
+
rawArgumentsText: args,
|
|
1773
|
+
});
|
|
1774
|
+
log.error(invalidCall.detail, new Error('openai_compatible_missing_tool_call_name'), {
|
|
1775
|
+
callId,
|
|
1776
|
+
index,
|
|
1777
|
+
});
|
|
1778
|
+
outputs.push({ kind: 'invalid_func_call', call: invalidCall });
|
|
1779
|
+
continue;
|
|
1735
1780
|
}
|
|
1736
|
-
|
|
1781
|
+
const message = {
|
|
1737
1782
|
type: 'func_call_msg',
|
|
1738
1783
|
role: 'assistant',
|
|
1739
1784
|
genseq,
|
|
1740
1785
|
id: callId,
|
|
1741
1786
|
name,
|
|
1742
1787
|
arguments: args,
|
|
1743
|
-
}
|
|
1788
|
+
};
|
|
1789
|
+
outputs.push({ kind: 'message', message });
|
|
1744
1790
|
}
|
|
1745
1791
|
}
|
|
1792
|
+
return outputs;
|
|
1793
|
+
}
|
|
1794
|
+
function batchOutputsToChatMessages(outputs) {
|
|
1795
|
+
return outputs
|
|
1796
|
+
.filter((output) => {
|
|
1797
|
+
return output.kind === 'message';
|
|
1798
|
+
})
|
|
1799
|
+
.map((output) => output.message);
|
|
1800
|
+
}
|
|
1801
|
+
function chatCompletionToChatMessages(response, genseq) {
|
|
1802
|
+
const out = batchOutputsToChatMessages(chatCompletionToBatchOutputs(response, genseq));
|
|
1746
1803
|
return out;
|
|
1747
1804
|
}
|
|
1748
1805
|
function chatCompletionToChatMessagesForTest(response, genseq) {
|
|
1749
1806
|
return chatCompletionToChatMessages(response, genseq);
|
|
1750
1807
|
}
|
|
1808
|
+
function chatCompletionToBatchOutputsForTest(response, genseq) {
|
|
1809
|
+
return chatCompletionToBatchOutputs(response, genseq);
|
|
1810
|
+
}
|
|
1751
1811
|
class OpenAiCompatibleGen {
|
|
1752
1812
|
get apiType() {
|
|
1753
1813
|
return 'openai-compatible';
|
|
@@ -1899,7 +1959,15 @@ class OpenAiCompatibleGen {
|
|
|
1899
1959
|
const response = await client.chat.completions.create(payload, {
|
|
1900
1960
|
...(abortSignal ? { signal: abortSignal } : {}),
|
|
1901
1961
|
});
|
|
1902
|
-
const
|
|
1962
|
+
const batchOutputs = chatCompletionToBatchOutputs(response, genseq);
|
|
1963
|
+
const messagesOut = batchOutputsToChatMessages(batchOutputs);
|
|
1964
|
+
const orderedOutputs = outputs.length > 0
|
|
1965
|
+
? [
|
|
1966
|
+
...outputs,
|
|
1967
|
+
...messagesOut.map((message) => ({ kind: 'message', message })),
|
|
1968
|
+
...batchOutputs.filter((output) => output.kind !== 'message'),
|
|
1969
|
+
]
|
|
1970
|
+
: batchOutputs;
|
|
1903
1971
|
const usage = response.usage
|
|
1904
1972
|
? tryExtractChatUsage(response.usage)
|
|
1905
1973
|
: { kind: 'unavailable' };
|
|
@@ -1908,7 +1976,7 @@ class OpenAiCompatibleGen {
|
|
|
1908
1976
|
: undefined;
|
|
1909
1977
|
return {
|
|
1910
1978
|
messages: messagesOut,
|
|
1911
|
-
...(
|
|
1979
|
+
...(orderedOutputs.length > 0 ? { outputs: orderedOutputs } : {}),
|
|
1912
1980
|
usage,
|
|
1913
1981
|
...(model ? { llmGenModel: model } : {}),
|
|
1914
1982
|
};
|
package/dist/llm/gen.d.ts
CHANGED
|
@@ -20,6 +20,9 @@ export declare class LlmStreamErrorEmittedError extends Error {
|
|
|
20
20
|
export type LlmBatchOutput = {
|
|
21
21
|
kind: 'message';
|
|
22
22
|
message: ChatMessage;
|
|
23
|
+
} | {
|
|
24
|
+
kind: 'invalid_func_call';
|
|
25
|
+
call: LlmInvalidFuncCall;
|
|
23
26
|
} | {
|
|
24
27
|
kind: 'web_search_call';
|
|
25
28
|
call: LlmWebSearchCall;
|
|
@@ -138,6 +141,14 @@ export type OpenAiResponsesCustomToolCall = {
|
|
|
138
141
|
detail?: string;
|
|
139
142
|
};
|
|
140
143
|
export type OpenAiResponsesNativeToolCall = OpenAiResponsesNonCustomNativeToolCall | OpenAiResponsesCustomToolCall;
|
|
144
|
+
export type LlmInvalidFuncCall = Readonly<{
|
|
145
|
+
provider: string;
|
|
146
|
+
callId: string;
|
|
147
|
+
detail: string;
|
|
148
|
+
toolCallIndex?: number;
|
|
149
|
+
rawFunctionName?: string;
|
|
150
|
+
rawArgumentsText?: string;
|
|
151
|
+
}>;
|
|
141
152
|
export interface LlmStreamReceiver {
|
|
142
153
|
thinkingStart: () => Promise<void>;
|
|
143
154
|
thinkingChunk: (chunk: string) => Promise<void>;
|
|
@@ -149,6 +160,7 @@ export interface LlmStreamReceiver {
|
|
|
149
160
|
rawCallId?: string;
|
|
150
161
|
effectiveCallId?: string;
|
|
151
162
|
}) => Promise<void>;
|
|
163
|
+
invalidFuncCall?: (call: LlmInvalidFuncCall) => Promise<void>;
|
|
152
164
|
webSearchCall?: (call: LlmWebSearchCall) => Promise<void>;
|
|
153
165
|
nativeToolCall?: (call: OpenAiResponsesNativeToolCall) => Promise<void>;
|
|
154
166
|
toolResultImageIngest?: (ingest: ToolResultImageIngest) => Promise<void>;
|
|
@@ -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
|
}
|