dominds 1.13.2 → 1.15.2
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/bootstrap/global-dialog-event-broadcaster.d.ts +18 -0
- package/dist/bootstrap/global-dialog-event-broadcaster.js +81 -0
- package/dist/dialog-fork.js +13 -12
- package/dist/dialog.d.ts +61 -50
- package/dist/dialog.js +284 -78
- package/dist/docs/dialog-system.md +12 -0
- package/dist/docs/dialog-system.zh.md +12 -0
- package/dist/docs/dominds-terminology.md +17 -0
- package/dist/docs/issues/global-dialog-event-broadcaster-missing.md +128 -0
- package/dist/docs/llm-provider-isolation.md +35 -0
- package/dist/docs/llm-provider-isolation.zh.md +35 -0
- package/dist/llm/client.d.ts +2 -1
- package/dist/llm/defaults.yaml +118 -4
- package/dist/llm/gen/anthropic.js +2 -4
- package/dist/llm/gen/codex.d.ts +11 -0
- package/dist/llm/gen/codex.js +41 -31
- package/dist/llm/gen/failure-classifier.js +17 -0
- package/dist/llm/gen/mock.js +45 -21
- package/dist/llm/gen/openai-compatible.d.ts +2 -0
- package/dist/llm/gen/openai-compatible.js +43 -38
- package/dist/llm/gen/openai.d.ts +3 -1
- package/dist/llm/gen/openai.js +888 -71
- package/dist/llm/gen/tool-call-context.d.ts +7 -2
- package/dist/llm/gen/tool-call-context.js +55 -13
- package/dist/llm/gen.d.ts +60 -3
- package/dist/llm/kernel-driver/context.js +1 -1
- package/dist/llm/kernel-driver/drive.js +374 -348
- package/dist/llm/kernel-driver/flow.js +3 -3
- package/dist/llm/kernel-driver/guardrails.d.ts +1 -1
- package/dist/llm/kernel-driver/guardrails.js +4 -4
- package/dist/llm/kernel-driver/runtime.js +11 -29
- package/dist/llm/kernel-driver/subdialog.js +56 -5
- package/dist/llm/kernel-driver/tellask-special.d.ts +38 -12
- package/dist/llm/kernel-driver/tellask-special.js +489 -180
- package/dist/llm/kernel-driver/types.d.ts +1 -1
- package/dist/persistence.d.ts +30 -62
- package/dist/persistence.js +978 -986
- package/dist/priming.js +398 -365
- package/dist/recovery/reply-special.js +3 -3
- package/dist/runtime/inter-dialog-format.d.ts +1 -1
- package/dist/runtime/inter-dialog-format.js +1 -1
- package/dist/runtime/reply-prompt-copy.js +4 -4
- package/dist/server/setup-routes.js +26 -5
- package/dist/server/snippets-routes.d.ts +1 -0
- package/dist/server/snippets-routes.js +20 -9
- package/dist/server/websocket-handler.js +58 -25
- package/dist/shared/utils/fbr.js +12 -8
- package/dist/shared/utils/inter-dialog-format.js +6 -4
- package/dist/team.d.ts +24 -13
- package/dist/team.js +123 -32
- package/dist/tool.d.ts +26 -0
- package/dist/tool.js +97 -0
- package/dist/tools/team_mgmt.js +18 -0
- package/package.json +2 -2
- package/webapp/dist/assets/{_basePickBy-CBOtd63g.js → _basePickBy-DsirmCgI.js} +3 -3
- package/webapp/dist/assets/_basePickBy-DsirmCgI.js.map +1 -0
- package/webapp/dist/assets/{_baseUniq-mfoKz4Wm.js → _baseUniq-tR6G8loB.js} +2 -2
- package/webapp/dist/assets/_baseUniq-tR6G8loB.js.map +1 -0
- package/webapp/dist/assets/{arc-Dq0WZLyu.js → arc-CzxpASkZ.js} +2 -2
- package/webapp/dist/assets/arc-CzxpASkZ.js.map +1 -0
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-CNmygmp3.js → architectureDiagram-2XIMDMQ5-BSH7H5oI.js} +26 -8
- package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-BSH7H5oI.js.map +1 -0
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-DvE0lybt.js → blockDiagram-WCTKOSBZ-DpLIr7yO.js} +187 -170
- package/webapp/dist/assets/blockDiagram-WCTKOSBZ-DpLIr7yO.js.map +1 -0
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-CR7zJ2_u.js → c4Diagram-IC4MRINW-WuYKgWfY.js} +4 -4
- package/webapp/dist/assets/c4Diagram-IC4MRINW-WuYKgWfY.js.map +1 -0
- package/webapp/dist/assets/{channel-DrTrnYx4.js → channel-B-v9dqLN.js} +2 -2
- package/webapp/dist/assets/channel-B-v9dqLN.js.map +1 -0
- package/webapp/dist/assets/{chunk-4BX2VUAB-CVuJEIeN.js → chunk-4BX2VUAB-MtFUfKZy.js} +2 -2
- package/webapp/dist/assets/chunk-4BX2VUAB-MtFUfKZy.js.map +1 -0
- package/webapp/dist/assets/{chunk-55IACEB6-BxUoXApB.js → chunk-55IACEB6-rY9AJdzj.js} +2 -2
- package/webapp/dist/assets/chunk-55IACEB6-rY9AJdzj.js.map +1 -0
- package/webapp/dist/assets/{chunk-FMBD7UC4-TX-LVAaV.js → chunk-FMBD7UC4-B-RtOs7e.js} +2 -2
- package/webapp/dist/assets/chunk-FMBD7UC4-B-RtOs7e.js.map +1 -0
- package/webapp/dist/assets/{chunk-TZMSLE5B-Cw689yRl.js → chunk-JSJVCQXG-Da1d3uS4.js} +14 -6
- package/webapp/dist/assets/chunk-JSJVCQXG-Da1d3uS4.js.map +1 -0
- package/webapp/dist/assets/{chunk-QN33PNHL-D1uiKlOO.js → chunk-KX2RTZJC-DH9UrpuG.js} +2 -2
- package/webapp/dist/assets/chunk-KX2RTZJC-DH9UrpuG.js.map +1 -0
- package/webapp/dist/assets/{chunk-DI55MBZ5-SAhxUTqQ.js → chunk-NQ4KR5QH-CK365lrr.js} +9 -7
- package/webapp/dist/assets/chunk-NQ4KR5QH-CK365lrr.js.map +1 -0
- package/webapp/dist/assets/{chunk-QZHKN3VN-BxuV0Oba.js → chunk-QZHKN3VN-BCaWPGDm.js} +2 -2
- package/webapp/dist/assets/chunk-QZHKN3VN-BCaWPGDm.js.map +1 -0
- package/webapp/dist/assets/{chunk-B4BG7PRW-DpMa3-9L.js → chunk-WL4C6EOR-DDCnEwft.js} +171 -121
- package/webapp/dist/assets/chunk-WL4C6EOR-DDCnEwft.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-2ON5EDUG-BTTGianr.js → classDiagram-VBA2DB6C-CvMBU4WA.js} +7 -6
- package/webapp/dist/assets/classDiagram-VBA2DB6C-CvMBU4WA.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-BTTGianr.js → classDiagram-v2-RAHNMMFH-CvMBU4WA.js} +7 -6
- package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-CvMBU4WA.js.map +1 -0
- package/webapp/dist/assets/{clone-Dk8cAI3I.js → clone-r98jR0MC.js} +2 -2
- package/webapp/dist/assets/clone-r98jR0MC.js.map +1 -0
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BjJnzB2N.js → cose-bilkent-S5V4N54A-t6J60Ogk.js} +2 -2
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-t6J60Ogk.js.map +1 -0
- package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
- package/webapp/dist/assets/{dagre-6UL2VRFP-VF-xGhAf.js → dagre-KLK3FWXG-BlqmY2DV.js} +7 -7
- package/webapp/dist/assets/dagre-KLK3FWXG-BlqmY2DV.js.map +1 -0
- package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
- package/webapp/dist/assets/{diagram-PSM6KHXK-Ba5U0oRY.js → diagram-E7M64L7V-FwCHeIUD.js} +10 -10
- package/webapp/dist/assets/diagram-E7M64L7V-FwCHeIUD.js.map +1 -0
- package/webapp/dist/assets/{diagram-QEK2KX5R-DoYCnEw_.js → diagram-IFDJBPK2-NhtmkuZG.js} +9 -8
- package/webapp/dist/assets/diagram-IFDJBPK2-NhtmkuZG.js.map +1 -0
- package/webapp/dist/assets/{diagram-S2PKOQOG-CkK4SRyE.js → diagram-P4PSJMXO-B9FcmokX.js} +8 -8
- package/webapp/dist/assets/diagram-P4PSJMXO-B9FcmokX.js.map +1 -0
- package/webapp/dist/assets/{erDiagram-Q2GNP2WA-DkI5eYww.js → erDiagram-INFDFZHY-DHKmWvtB.js} +96 -75
- package/webapp/dist/assets/erDiagram-INFDFZHY-DHKmWvtB.js.map +1 -0
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-wOdPUQ7Y.js → flowDiagram-PKNHOUZH-C7Zi8I7T.js} +98 -81
- package/webapp/dist/assets/flowDiagram-PKNHOUZH-C7Zi8I7T.js.map +1 -0
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-BtRWgkUH.js → ganttDiagram-A5KZAMGK-Cv2T8tz_.js} +28 -3
- package/webapp/dist/assets/ganttDiagram-A5KZAMGK-Cv2T8tz_.js.map +1 -0
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-Bsz7u1vi.js → gitGraphDiagram-K3NZZRJ6-DztaipJU.js} +38 -46
- package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-DztaipJU.js.map +1 -0
- package/webapp/dist/assets/graph-C5yf62Vs.js +782 -0
- package/webapp/dist/assets/graph-C5yf62Vs.js.map +1 -0
- package/webapp/dist/assets/{index-xvYYeHuy.css → index-YaxF76or.css} +1 -1
- package/webapp/dist/assets/{index-rYmIohM_.js → index-hve5MWPs.js} +1603 -1415
- package/webapp/dist/assets/index-hve5MWPs.js.map +1 -0
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-BMaxCvH5.js → infoDiagram-LFFYTUFH-VgsbBPZP.js} +7 -7
- package/webapp/dist/assets/infoDiagram-LFFYTUFH-VgsbBPZP.js.map +1 -0
- package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-C7j3YWdw.js +966 -0
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-C7j3YWdw.js.map +1 -0
- package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-ejyerzmG.js → journeyDiagram-4ABVD52K-OO8sev-Y.js} +5 -5
- package/webapp/dist/assets/journeyDiagram-4ABVD52K-OO8sev-Y.js.map +1 -0
- package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-CYj35TEs.js → kanban-definition-K7BYSVSG-DiYCC1Ig.js} +5 -3
- package/webapp/dist/assets/kanban-definition-K7BYSVSG-DiYCC1Ig.js.map +1 -0
- package/webapp/dist/assets/{layout-7Ql4zmuL.js → layout-DdZSgGdu.js} +5 -5
- package/webapp/dist/assets/layout-DdZSgGdu.js.map +1 -0
- package/webapp/dist/assets/{linear-CVmgVPuZ.js → linear-7-aHtaFi.js} +2 -2
- package/webapp/dist/assets/linear-7-aHtaFi.js.map +1 -0
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-DOpxjGVo.js → mindmap-definition-YRQLILUH-IG3I-RdD.js} +7 -5
- package/webapp/dist/assets/mindmap-definition-YRQLILUH-IG3I-RdD.js.map +1 -0
- package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
- package/webapp/dist/assets/{pieDiagram-ADFJNKIX-CLQjpmAG.js → pieDiagram-SKSYHLDU-z68KJT5r.js} +8 -8
- package/webapp/dist/assets/pieDiagram-SKSYHLDU-z68KJT5r.js.map +1 -0
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-ClD_bz7z.js → quadrantDiagram-337W2JSQ-DaENWdO6.js} +3 -3
- package/webapp/dist/assets/quadrantDiagram-337W2JSQ-DaENWdO6.js.map +1 -0
- package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-DOpb-TWH.js → requirementDiagram-Z7DCOOCP-ROTFv4sa.js} +16 -6
- package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-ROTFv4sa.js.map +1 -0
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-D8Hsj3yx.js → sankeyDiagram-WA2Y5GQK-CK7qtpzw.js} +2 -2
- package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CK7qtpzw.js.map +1 -0
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-CFMNjBER.js → sequenceDiagram-2WXFIKYE-R5lDySeI.js} +601 -201
- package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-R5lDySeI.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-BQeDlw0P.js → stateDiagram-RAJIS63D-sr7msF5U.js} +9 -9
- package/webapp/dist/assets/stateDiagram-RAJIS63D-sr7msF5U.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-DscX61Rs.js → stateDiagram-v2-FVOUBMTO-X663liwS.js} +5 -5
- package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-X663liwS.js.map +1 -0
- package/webapp/dist/assets/{timeline-definition-IT6M3QCI-BcXPSTiw.js → timeline-definition-YZTLITO2-Bw0TdG26.js} +3 -3
- package/webapp/dist/assets/timeline-definition-YZTLITO2-Bw0TdG26.js.map +1 -0
- package/webapp/dist/assets/{treemap-GDKQZRPO-BBr4UV0Z.js → treemap-KZPCXAKY-D_sjKwI7.js} +37 -24
- package/webapp/dist/assets/treemap-KZPCXAKY-D_sjKwI7.js.map +1 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-DhlHIHid.js +2487 -0
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-DhlHIHid.js.map +1 -0
- package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-CS5RAtQE.js → xychartDiagram-JWTSCODW-C65ESjTc.js} +4 -4
- package/webapp/dist/assets/xychartDiagram-JWTSCODW-C65ESjTc.js.map +1 -0
- package/webapp/dist/index.html +2 -2
- package/webapp/dist/assets/_basePickBy-CBOtd63g.js.map +0 -1
- package/webapp/dist/assets/_baseUniq-mfoKz4Wm.js.map +0 -1
- package/webapp/dist/assets/arc-Dq0WZLyu.js.map +0 -1
- package/webapp/dist/assets/architectureDiagram-VXUJARFQ-CNmygmp3.js.map +0 -1
- package/webapp/dist/assets/blockDiagram-VD42YOAC-DvE0lybt.js.map +0 -1
- package/webapp/dist/assets/c4Diagram-YG6GDRKO-CR7zJ2_u.js.map +0 -1
- package/webapp/dist/assets/channel-DrTrnYx4.js.map +0 -1
- package/webapp/dist/assets/chunk-4BX2VUAB-CVuJEIeN.js.map +0 -1
- package/webapp/dist/assets/chunk-55IACEB6-BxUoXApB.js.map +0 -1
- package/webapp/dist/assets/chunk-B4BG7PRW-DpMa3-9L.js.map +0 -1
- package/webapp/dist/assets/chunk-DI55MBZ5-SAhxUTqQ.js.map +0 -1
- package/webapp/dist/assets/chunk-FMBD7UC4-TX-LVAaV.js.map +0 -1
- package/webapp/dist/assets/chunk-QN33PNHL-D1uiKlOO.js.map +0 -1
- package/webapp/dist/assets/chunk-QZHKN3VN-BxuV0Oba.js.map +0 -1
- package/webapp/dist/assets/chunk-TZMSLE5B-Cw689yRl.js.map +0 -1
- package/webapp/dist/assets/classDiagram-2ON5EDUG-BTTGianr.js.map +0 -1
- package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-BTTGianr.js.map +0 -1
- package/webapp/dist/assets/clone-Dk8cAI3I.js.map +0 -1
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-BjJnzB2N.js.map +0 -1
- package/webapp/dist/assets/dagre-6UL2VRFP-VF-xGhAf.js.map +0 -1
- package/webapp/dist/assets/diagram-PSM6KHXK-Ba5U0oRY.js.map +0 -1
- package/webapp/dist/assets/diagram-QEK2KX5R-DoYCnEw_.js.map +0 -1
- package/webapp/dist/assets/diagram-S2PKOQOG-CkK4SRyE.js.map +0 -1
- package/webapp/dist/assets/erDiagram-Q2GNP2WA-DkI5eYww.js.map +0 -1
- package/webapp/dist/assets/flowDiagram-NV44I4VS-wOdPUQ7Y.js.map +0 -1
- package/webapp/dist/assets/ganttDiagram-JELNMOA3-BtRWgkUH.js.map +0 -1
- package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-Bsz7u1vi.js.map +0 -1
- package/webapp/dist/assets/graph-DAMkuTbn.js +0 -425
- package/webapp/dist/assets/graph-DAMkuTbn.js.map +0 -1
- package/webapp/dist/assets/index-rYmIohM_.js.map +0 -1
- package/webapp/dist/assets/infoDiagram-HS3SLOUP-BMaxCvH5.js.map +0 -1
- package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-ejyerzmG.js.map +0 -1
- package/webapp/dist/assets/kanban-definition-3W4ZIXB7-CYj35TEs.js.map +0 -1
- package/webapp/dist/assets/layout-7Ql4zmuL.js.map +0 -1
- package/webapp/dist/assets/linear-CVmgVPuZ.js.map +0 -1
- package/webapp/dist/assets/mindmap-definition-VGOIOE7T-DOpxjGVo.js.map +0 -1
- package/webapp/dist/assets/pieDiagram-ADFJNKIX-CLQjpmAG.js.map +0 -1
- package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-ClD_bz7z.js.map +0 -1
- package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-DOpb-TWH.js.map +0 -1
- package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-D8Hsj3yx.js.map +0 -1
- package/webapp/dist/assets/sequenceDiagram-WL72ISMW-CFMNjBER.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-FKZM4ZOC-BQeDlw0P.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-DscX61Rs.js.map +0 -1
- package/webapp/dist/assets/timeline-definition-IT6M3QCI-BcXPSTiw.js.map +0 -1
- package/webapp/dist/assets/treemap-GDKQZRPO-BBr4UV0Z.js.map +0 -1
- package/webapp/dist/assets/xychartDiagram-PRI3JC2R-CS5RAtQE.js.map +0 -1
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { ChatMessage, FuncCallMsg } from '../client';
|
|
2
|
+
type ToolCallMsg = FuncCallMsg;
|
|
2
3
|
export declare function normalizeToolCallPairs(context: readonly ChatMessage[]): ChatMessage[];
|
|
3
4
|
export declare function hasAdjacentMatchingToolResult(context: readonly ChatMessage[], index: number): boolean;
|
|
4
5
|
export declare function hasAdjacentMatchingToolCall(context: readonly ChatMessage[], index: number): boolean;
|
|
5
|
-
export declare function formatUnresolvedToolCallText(call:
|
|
6
|
-
type ToolCallAdjacencyViolation = Readonly<{
|
|
6
|
+
export declare function formatUnresolvedToolCallText(call: ToolCallMsg): string;
|
|
7
|
+
export type ToolCallAdjacencyViolation = Readonly<{
|
|
7
8
|
kind: 'unresolved_call';
|
|
8
9
|
index: number;
|
|
9
10
|
callId: string;
|
|
@@ -15,5 +16,9 @@ type ToolCallAdjacencyViolation = Readonly<{
|
|
|
15
16
|
toolName: string;
|
|
16
17
|
}>;
|
|
17
18
|
export declare function findFirstToolCallAdjacencyViolation(context: readonly ChatMessage[]): ToolCallAdjacencyViolation | null;
|
|
19
|
+
export declare function sanitizeToolContextForProvider(context: readonly ChatMessage[]): Readonly<{
|
|
20
|
+
messages: ChatMessage[];
|
|
21
|
+
droppedViolations: ToolCallAdjacencyViolation[];
|
|
22
|
+
}>;
|
|
18
23
|
export declare function formatToolCallAdjacencyViolation(violation: ToolCallAdjacencyViolation, location: string): string;
|
|
19
24
|
export {};
|
|
@@ -5,7 +5,14 @@ exports.hasAdjacentMatchingToolResult = hasAdjacentMatchingToolResult;
|
|
|
5
5
|
exports.hasAdjacentMatchingToolCall = hasAdjacentMatchingToolCall;
|
|
6
6
|
exports.formatUnresolvedToolCallText = formatUnresolvedToolCallText;
|
|
7
7
|
exports.findFirstToolCallAdjacencyViolation = findFirstToolCallAdjacencyViolation;
|
|
8
|
+
exports.sanitizeToolContextForProvider = sanitizeToolContextForProvider;
|
|
8
9
|
exports.formatToolCallAdjacencyViolation = formatToolCallAdjacencyViolation;
|
|
10
|
+
function isToolCallMsg(msg) {
|
|
11
|
+
return msg?.type === 'func_call_msg';
|
|
12
|
+
}
|
|
13
|
+
function isToolResultMsg(msg) {
|
|
14
|
+
return msg?.type === 'func_result_msg';
|
|
15
|
+
}
|
|
9
16
|
function normalizeToolCallPairs(context) {
|
|
10
17
|
// Providers differ in how strictly they validate tool call/result ordering. Dominds can
|
|
11
18
|
// temporarily produce a block of calls followed by a block of results when tools run in
|
|
@@ -14,18 +21,18 @@ function normalizeToolCallPairs(context) {
|
|
|
14
21
|
let i = 0;
|
|
15
22
|
while (i < context.length) {
|
|
16
23
|
const msg = context[i];
|
|
17
|
-
if (msg
|
|
24
|
+
if (!isToolCallMsg(msg)) {
|
|
18
25
|
out.push(msg);
|
|
19
26
|
i += 1;
|
|
20
27
|
continue;
|
|
21
28
|
}
|
|
22
29
|
const calls = [];
|
|
23
|
-
while (i < context.length && context[i]
|
|
30
|
+
while (i < context.length && isToolCallMsg(context[i])) {
|
|
24
31
|
calls.push(context[i]);
|
|
25
32
|
i += 1;
|
|
26
33
|
}
|
|
27
34
|
const results = [];
|
|
28
|
-
while (i < context.length && context[i]
|
|
35
|
+
while (i < context.length && isToolResultMsg(context[i])) {
|
|
29
36
|
results.push(context[i]);
|
|
30
37
|
i += 1;
|
|
31
38
|
}
|
|
@@ -66,14 +73,12 @@ function normalizeToolCallPairs(context) {
|
|
|
66
73
|
function hasAdjacentMatchingToolResult(context, index) {
|
|
67
74
|
const current = context[index];
|
|
68
75
|
const next = context[index + 1];
|
|
69
|
-
return (current
|
|
76
|
+
return isToolCallMsg(current) && isToolResultMsg(next) && current.id === next.id;
|
|
70
77
|
}
|
|
71
78
|
function hasAdjacentMatchingToolCall(context, index) {
|
|
72
79
|
const previous = context[index - 1];
|
|
73
80
|
const current = context[index];
|
|
74
|
-
return (previous
|
|
75
|
-
current?.type === 'func_result_msg' &&
|
|
76
|
-
previous.id === current.id);
|
|
81
|
+
return isToolCallMsg(previous) && isToolResultMsg(current) && previous.id === current.id;
|
|
77
82
|
}
|
|
78
83
|
function formatUnresolvedToolCallText(call) {
|
|
79
84
|
const argumentsText = call.arguments.trim();
|
|
@@ -85,7 +90,7 @@ function formatUnresolvedToolCallText(call) {
|
|
|
85
90
|
function findFirstToolCallAdjacencyViolation(context) {
|
|
86
91
|
for (let index = 0; index < context.length; index += 1) {
|
|
87
92
|
const msg = context[index];
|
|
88
|
-
if (msg
|
|
93
|
+
if (isToolCallMsg(msg) && !hasAdjacentMatchingToolResult(context, index)) {
|
|
89
94
|
return {
|
|
90
95
|
kind: 'unresolved_call',
|
|
91
96
|
index,
|
|
@@ -93,7 +98,7 @@ function findFirstToolCallAdjacencyViolation(context) {
|
|
|
93
98
|
toolName: msg.name,
|
|
94
99
|
};
|
|
95
100
|
}
|
|
96
|
-
if (msg
|
|
101
|
+
if (isToolResultMsg(msg) && !hasAdjacentMatchingToolCall(context, index)) {
|
|
97
102
|
return {
|
|
98
103
|
kind: 'orphaned_result',
|
|
99
104
|
index,
|
|
@@ -104,15 +109,52 @@ function findFirstToolCallAdjacencyViolation(context) {
|
|
|
104
109
|
}
|
|
105
110
|
return null;
|
|
106
111
|
}
|
|
112
|
+
function sanitizeToolContextForProvider(context) {
|
|
113
|
+
const normalized = normalizeToolCallPairs(context);
|
|
114
|
+
const sanitized = [];
|
|
115
|
+
const droppedViolations = [];
|
|
116
|
+
for (let index = 0; index < normalized.length; index += 1) {
|
|
117
|
+
const msg = normalized[index];
|
|
118
|
+
if (isToolCallMsg(msg)) {
|
|
119
|
+
const next = normalized[index + 1];
|
|
120
|
+
if (isToolResultMsg(next) && next.id === msg.id) {
|
|
121
|
+
sanitized.push(msg, next);
|
|
122
|
+
index += 1;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
droppedViolations.push({
|
|
126
|
+
kind: 'unresolved_call',
|
|
127
|
+
index,
|
|
128
|
+
callId: msg.id,
|
|
129
|
+
toolName: msg.name,
|
|
130
|
+
});
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (isToolResultMsg(msg)) {
|
|
134
|
+
droppedViolations.push({
|
|
135
|
+
kind: 'orphaned_result',
|
|
136
|
+
index,
|
|
137
|
+
callId: msg.id,
|
|
138
|
+
toolName: msg.name,
|
|
139
|
+
});
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
sanitized.push(msg);
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
messages: sanitized,
|
|
146
|
+
droppedViolations,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
107
149
|
function formatToolCallAdjacencyViolation(violation, location) {
|
|
108
150
|
switch (violation.kind) {
|
|
109
151
|
case 'unresolved_call':
|
|
110
|
-
return (`${location}: unresolved persisted
|
|
152
|
+
return (`${location}: unresolved persisted tool call message detected ` +
|
|
111
153
|
`(callId=${violation.callId}, tool=${violation.toolName}, index=${violation.index}). ` +
|
|
112
|
-
'This means a tool call was persisted without a matching
|
|
154
|
+
'This means a tool call was persisted without a matching tool result message.');
|
|
113
155
|
case 'orphaned_result':
|
|
114
|
-
return (`${location}: orphaned persisted
|
|
156
|
+
return (`${location}: orphaned persisted tool result message detected ` +
|
|
115
157
|
`(callId=${violation.callId}, tool=${violation.toolName}, index=${violation.index}). ` +
|
|
116
|
-
'This means a tool result was restored without the immediately preceding
|
|
158
|
+
'This means a tool result was restored without the immediately preceding tool call message.');
|
|
117
159
|
}
|
|
118
160
|
}
|
package/dist/llm/gen.d.ts
CHANGED
|
@@ -7,8 +7,19 @@ export interface LlmStreamResult {
|
|
|
7
7
|
usage: LlmUsageStats;
|
|
8
8
|
llmGenModel?: string;
|
|
9
9
|
}
|
|
10
|
+
export type LlmBatchOutput = {
|
|
11
|
+
kind: 'message';
|
|
12
|
+
message: ChatMessage;
|
|
13
|
+
} | {
|
|
14
|
+
kind: 'web_search_call';
|
|
15
|
+
call: LlmWebSearchCall;
|
|
16
|
+
} | {
|
|
17
|
+
kind: 'native_tool_call';
|
|
18
|
+
call: OpenAiResponsesNativeToolCall;
|
|
19
|
+
};
|
|
10
20
|
export interface LlmBatchResult {
|
|
11
21
|
messages: ChatMessage[];
|
|
22
|
+
outputs?: LlmBatchOutput[];
|
|
12
23
|
usage: LlmUsageStats;
|
|
13
24
|
llmGenModel?: string;
|
|
14
25
|
}
|
|
@@ -26,9 +37,21 @@ export interface LlmRequestContext {
|
|
|
26
37
|
dialogRootId: string;
|
|
27
38
|
promptCacheKey?: string;
|
|
28
39
|
}
|
|
29
|
-
export type
|
|
40
|
+
export type CodexLlmWebSearchAction = {
|
|
41
|
+
type: 'search';
|
|
42
|
+
query?: string;
|
|
43
|
+
} | {
|
|
44
|
+
type: 'open_page';
|
|
45
|
+
url?: string;
|
|
46
|
+
} | {
|
|
47
|
+
type: 'find_in_page';
|
|
48
|
+
url?: string;
|
|
49
|
+
pattern?: string;
|
|
50
|
+
};
|
|
51
|
+
export type OpenAiResponsesLlmWebSearchAction = {
|
|
30
52
|
type: 'search';
|
|
31
53
|
query?: string;
|
|
54
|
+
queries?: string[];
|
|
32
55
|
} | {
|
|
33
56
|
type: 'open_page';
|
|
34
57
|
url?: string;
|
|
@@ -37,12 +60,45 @@ export type LlmWebSearchAction = {
|
|
|
37
60
|
url?: string;
|
|
38
61
|
pattern?: string;
|
|
39
62
|
};
|
|
40
|
-
export type
|
|
63
|
+
export type CodexLlmWebSearchCall = {
|
|
64
|
+
source: 'codex';
|
|
65
|
+
phase: 'added' | 'done';
|
|
66
|
+
itemId: string;
|
|
67
|
+
status?: string;
|
|
68
|
+
action?: CodexLlmWebSearchAction;
|
|
69
|
+
};
|
|
70
|
+
export type OpenAiResponsesLlmWebSearchCall = {
|
|
71
|
+
source: 'openai_responses';
|
|
72
|
+
phase: 'added' | 'done';
|
|
73
|
+
itemId: string;
|
|
74
|
+
status?: string;
|
|
75
|
+
action?: OpenAiResponsesLlmWebSearchAction;
|
|
76
|
+
};
|
|
77
|
+
export type LlmWebSearchCall = CodexLlmWebSearchCall | OpenAiResponsesLlmWebSearchCall;
|
|
78
|
+
export type OpenAiResponsesNativeToolItemType = 'file_search_call' | 'code_interpreter_call' | 'image_generation_call' | 'mcp_call' | 'mcp_list_tools' | 'mcp_approval_request' | 'custom_tool_call';
|
|
79
|
+
export type OpenAiResponsesNonCustomNativeToolItemType = Exclude<OpenAiResponsesNativeToolItemType, 'custom_tool_call'>;
|
|
80
|
+
export type OpenAiResponsesNonCustomNativeToolCall = {
|
|
81
|
+
source: 'openai_responses';
|
|
82
|
+
itemType: OpenAiResponsesNonCustomNativeToolItemType;
|
|
41
83
|
phase: 'added' | 'done';
|
|
42
84
|
itemId: string;
|
|
43
85
|
status?: string;
|
|
44
|
-
|
|
86
|
+
title?: string;
|
|
87
|
+
summary?: string;
|
|
88
|
+
detail?: string;
|
|
89
|
+
};
|
|
90
|
+
export type OpenAiResponsesCustomToolCall = {
|
|
91
|
+
source: 'openai_responses';
|
|
92
|
+
itemType: 'custom_tool_call';
|
|
93
|
+
phase: 'added' | 'done';
|
|
94
|
+
callId: string;
|
|
95
|
+
itemId?: string;
|
|
96
|
+
status?: string;
|
|
97
|
+
title?: string;
|
|
98
|
+
summary?: string;
|
|
99
|
+
detail?: string;
|
|
45
100
|
};
|
|
101
|
+
export type OpenAiResponsesNativeToolCall = OpenAiResponsesNonCustomNativeToolCall | OpenAiResponsesCustomToolCall;
|
|
46
102
|
export interface LlmStreamReceiver {
|
|
47
103
|
thinkingStart: () => Promise<void>;
|
|
48
104
|
thinkingChunk: (chunk: string) => Promise<void>;
|
|
@@ -52,6 +108,7 @@ export interface LlmStreamReceiver {
|
|
|
52
108
|
sayingFinish: () => Promise<void>;
|
|
53
109
|
funcCall: (callId: string, name: string, args: string) => Promise<void>;
|
|
54
110
|
webSearchCall?: (call: LlmWebSearchCall) => Promise<void>;
|
|
111
|
+
nativeToolCall?: (call: OpenAiResponsesNativeToolCall) => Promise<void>;
|
|
55
112
|
streamError?: (detail: string) => Promise<void>;
|
|
56
113
|
}
|
|
57
114
|
export interface LlmGenerator {
|
|
@@ -30,7 +30,7 @@ function hasUserPromptLikeAnchor(source) {
|
|
|
30
30
|
continue;
|
|
31
31
|
if ((msg.type === 'prompting_msg' ||
|
|
32
32
|
msg.type === 'environment_msg' ||
|
|
33
|
-
msg.type === '
|
|
33
|
+
msg.type === 'tellask_carryover_msg') &&
|
|
34
34
|
msg.role === 'user') {
|
|
35
35
|
return true;
|
|
36
36
|
}
|