@jsonstudio/llms 0.6.3409 → 0.6.3539

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.
Files changed (82) hide show
  1. package/dist/conversion/codecs/anthropic-openai-codec.d.ts +12 -3
  2. package/dist/conversion/codecs/anthropic-openai-codec.js +32 -92
  3. package/dist/conversion/codecs/gemini-openai-codec.d.ts +6 -5
  4. package/dist/conversion/codecs/gemini-openai-codec.js +48 -685
  5. package/dist/conversion/codecs/openai-openai-codec.d.ts +1 -1
  6. package/dist/conversion/codecs/openai-openai-codec.js +34 -100
  7. package/dist/conversion/codecs/responses-openai-codec.d.ts +1 -1
  8. package/dist/conversion/codecs/responses-openai-codec.js +47 -159
  9. package/dist/conversion/compat/actions/anthropic-claude-code-system-prompt.d.ts +2 -6
  10. package/dist/conversion/compat/actions/anthropic-claude-code-system-prompt.js +29 -245
  11. package/dist/conversion/compat/actions/anthropic-claude-code-user-id.d.ts +3 -0
  12. package/dist/conversion/compat/actions/anthropic-claude-code-user-id.js +30 -0
  13. package/dist/conversion/compat/actions/antigravity-thought-signature-prepare.js +21 -232
  14. package/dist/conversion/compat/actions/deepseek-web-request.js +41 -276
  15. package/dist/conversion/compat/actions/deepseek-web-response.js +64 -859
  16. package/dist/conversion/compat/actions/gemini-cli-request.d.ts +1 -1
  17. package/dist/conversion/compat/actions/gemini-cli-request.js +20 -613
  18. package/dist/conversion/compat/actions/gemini-web-search.d.ts +1 -15
  19. package/dist/conversion/compat/actions/gemini-web-search.js +22 -69
  20. package/dist/conversion/compat/actions/glm-tool-extraction.d.ts +3 -2
  21. package/dist/conversion/compat/actions/glm-tool-extraction.js +28 -257
  22. package/dist/conversion/compat/actions/iflow-tool-text-fallback.d.ts +0 -8
  23. package/dist/conversion/compat/actions/iflow-tool-text-fallback.js +24 -206
  24. package/dist/conversion/compat/actions/qwen-transform.d.ts +3 -2
  25. package/dist/conversion/compat/actions/qwen-transform.js +30 -271
  26. package/dist/conversion/compat/actions/tool-text-request-guidance.js +3 -173
  27. package/dist/conversion/compat/actions/universal-shape-filter.d.ts +6 -23
  28. package/dist/conversion/compat/actions/universal-shape-filter.js +4 -383
  29. package/dist/conversion/hub/pipeline/compat/native-adapter-context.js +1 -0
  30. package/dist/conversion/pipeline/codecs/v2/anthropic-openai-pipeline.d.ts +1 -2
  31. package/dist/conversion/pipeline/codecs/v2/anthropic-openai-pipeline.js +50 -104
  32. package/dist/conversion/pipeline/codecs/v2/openai-openai-pipeline.js +12 -10
  33. package/dist/conversion/pipeline/codecs/v2/responses-openai-pipeline.d.ts +0 -2
  34. package/dist/conversion/pipeline/codecs/v2/responses-openai-pipeline.js +46 -67
  35. package/dist/conversion/pipeline/codecs/v2/shared/openai-chat-helpers.js +15 -40
  36. package/dist/conversion/responses/responses-openai-bridge/response-payload.js +47 -348
  37. package/dist/conversion/responses/responses-openai-bridge.js +129 -611
  38. package/dist/conversion/shared/chat-output-normalizer.js +6 -0
  39. package/dist/conversion/shared/chat-request-filters.js +1 -1
  40. package/dist/conversion/shared/output-content-normalizer.js +10 -0
  41. package/dist/conversion/shared/responses-conversation-store.js +22 -135
  42. package/dist/conversion/shared/responses-output-builder.d.ts +0 -2
  43. package/dist/conversion/shared/responses-output-builder.js +28 -318
  44. package/dist/conversion/shared/responses-response-utils.js +35 -86
  45. package/dist/conversion/shared/streaming-text-extractor.d.ts +1 -2
  46. package/dist/conversion/shared/streaming-text-extractor.js +13 -14
  47. package/dist/native/router_hotpath_napi.node +0 -0
  48. package/dist/router/virtual-router/bootstrap/routing-config.js +11 -3
  49. package/dist/router/virtual-router/engine-legacy.d.ts +3 -3
  50. package/dist/router/virtual-router/engine-legacy.js +15 -7
  51. package/dist/router/virtual-router/engine-selection/native-compat-action-semantics.d.ts +16 -0
  52. package/dist/router/virtual-router/engine-selection/native-compat-action-semantics.js +434 -46
  53. package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.d.ts +83 -0
  54. package/dist/router/virtual-router/engine-selection/native-hub-bridge-action-semantics.js +295 -0
  55. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.d.ts +1 -0
  56. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.d.ts +7 -0
  57. package/dist/router/virtual-router/engine-selection/native-hub-pipeline-resp-semantics.js +8 -1
  58. package/dist/router/virtual-router/engine-selection/native-router-hotpath-loader.js +383 -298
  59. package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.d.ts +20 -0
  60. package/dist/router/virtual-router/engine-selection/native-shared-conversion-semantics.js +201 -0
  61. package/dist/router/virtual-router/engine-selection/native-virtual-router-routing-instructions-semantics.d.ts +1 -0
  62. package/dist/router/virtual-router/engine-selection/native-virtual-router-routing-instructions-semantics.js +37 -0
  63. package/dist/router/virtual-router/engine.js +0 -38
  64. package/dist/router/virtual-router/features.js +44 -3
  65. package/dist/router/virtual-router/routing-instructions/parse.d.ts +0 -12
  66. package/dist/router/virtual-router/routing-instructions/parse.js +9 -389
  67. package/dist/router/virtual-router/stop-message-state-sync.d.ts +3 -6
  68. package/dist/router/virtual-router/stop-message-state-sync.js +50 -21
  69. package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +1 -0
  70. package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.js +26 -0
  71. package/dist/sse/sse-to-json/builders/anthropic-response-builder.js +12 -2
  72. package/package.json +1 -1
  73. package/dist/router/virtual-router/engine-legacy/route-finalize.d.ts +0 -9
  74. package/dist/router/virtual-router/engine-legacy/route-finalize.js +0 -84
  75. package/dist/router/virtual-router/engine-legacy/route-selection.d.ts +0 -17
  76. package/dist/router/virtual-router/engine-legacy/route-selection.js +0 -205
  77. package/dist/router/virtual-router/engine-legacy/route-state-allowlist.d.ts +0 -3
  78. package/dist/router/virtual-router/engine-legacy/route-state-allowlist.js +0 -36
  79. package/dist/router/virtual-router/engine-legacy/route-state.d.ts +0 -12
  80. package/dist/router/virtual-router/engine-legacy/route-state.js +0 -386
  81. package/dist/router/virtual-router/engine-legacy/routing.d.ts +0 -8
  82. package/dist/router/virtual-router/engine-legacy/routing.js +0 -8
@@ -28,6 +28,83 @@ export interface NativeBridgeHistoryOutput {
28
28
  latestUserInstruction?: string;
29
29
  originalSystemMessages: string[];
30
30
  }
31
+ export interface NativeNormalizeBridgeHistorySeedOutput {
32
+ input: unknown[];
33
+ combinedSystemInstruction?: string;
34
+ latestUserInstruction?: string;
35
+ originalSystemMessages: string[];
36
+ }
37
+ export interface NativeResolveResponsesBridgeToolsInput {
38
+ originalTools?: Array<Record<string, unknown>>;
39
+ chatTools?: Array<Record<string, unknown>>;
40
+ hasServerSideWebSearch?: boolean;
41
+ passthroughKeys?: string[];
42
+ request?: Record<string, unknown>;
43
+ }
44
+ export interface NativeResolveResponsesBridgeToolsOutput {
45
+ mergedTools?: Array<Record<string, unknown>>;
46
+ request?: Record<string, unknown>;
47
+ }
48
+ export interface NativeResolveResponsesRequestBridgeDecisionsInput {
49
+ context?: Record<string, unknown>;
50
+ requestMetadata?: Record<string, unknown>;
51
+ envelopeMetadata?: Record<string, unknown>;
52
+ bridgeMetadata?: Record<string, unknown>;
53
+ extraBridgeHistory?: Record<string, unknown>;
54
+ }
55
+ export interface NativeResolveResponsesRequestBridgeDecisionsOutput {
56
+ forceWebSearch: boolean;
57
+ toolCallIdStyle?: 'fc' | 'preserve';
58
+ historySeed?: NativeBridgeHistoryOutput;
59
+ }
60
+ export interface NativeFilterBridgeInputForUpstreamInput {
61
+ input: unknown[];
62
+ allowToolCallId?: boolean;
63
+ }
64
+ export interface NativeFilterBridgeInputForUpstreamOutput {
65
+ input: Array<Record<string, unknown>>;
66
+ }
67
+ export interface NativePrepareResponsesRequestEnvelopeInput {
68
+ request: Record<string, unknown>;
69
+ contextSystemInstruction?: unknown;
70
+ extraSystemInstruction?: unknown;
71
+ metadataSystemInstruction?: unknown;
72
+ combinedSystemInstruction?: unknown;
73
+ reasoningInstructionSegments?: unknown;
74
+ contextParameters?: unknown;
75
+ chatParameters?: unknown;
76
+ metadataParameters?: unknown;
77
+ contextStream?: unknown;
78
+ metadataStream?: unknown;
79
+ chatStream?: unknown;
80
+ chatParametersStream?: unknown;
81
+ contextInclude?: unknown;
82
+ metadataInclude?: unknown;
83
+ contextStore?: unknown;
84
+ metadataStore?: unknown;
85
+ stripHostFields?: boolean;
86
+ contextToolChoice?: unknown;
87
+ metadataToolChoice?: unknown;
88
+ contextParallelToolCalls?: unknown;
89
+ metadataParallelToolCalls?: unknown;
90
+ contextResponseFormat?: unknown;
91
+ metadataResponseFormat?: unknown;
92
+ contextServiceTier?: unknown;
93
+ metadataServiceTier?: unknown;
94
+ contextTruncation?: unknown;
95
+ metadataTruncation?: unknown;
96
+ contextMetadata?: unknown;
97
+ metadataMetadata?: unknown;
98
+ }
99
+ export interface NativePrepareResponsesRequestEnvelopeOutput {
100
+ request: Record<string, unknown>;
101
+ }
102
+ export interface NativeAppendLocalImageBlockOnLatestUserInputInput {
103
+ messages: unknown[];
104
+ }
105
+ export interface NativeAppendLocalImageBlockOnLatestUserInputOutput {
106
+ messages: Array<Record<string, unknown>>;
107
+ }
31
108
  export interface NativeApplyBridgeNormalizeHistoryInput {
32
109
  messages: unknown[];
33
110
  tools?: Array<Record<string, unknown>>;
@@ -173,6 +250,12 @@ export interface NativeHarvestToolsOutput {
173
250
  export declare function normalizeBridgeToolCallIdsWithNative(input: NativeBridgeToolCallIdsInput): NativeBridgeToolCallIdsOutput;
174
251
  export declare function applyBridgeNormalizeToolIdentifiersWithNative(input: NativeApplyBridgeNormalizeToolIdentifiersInput): NativeBridgeToolCallIdsOutput;
175
252
  export declare function buildBridgeHistoryWithNative(input: NativeBridgeHistoryInput): NativeBridgeHistoryOutput;
253
+ export declare function normalizeBridgeHistorySeedWithNative(seed: Record<string, unknown>): NativeNormalizeBridgeHistorySeedOutput;
254
+ export declare function resolveResponsesBridgeToolsWithNative(input: NativeResolveResponsesBridgeToolsInput): NativeResolveResponsesBridgeToolsOutput;
255
+ export declare function resolveResponsesRequestBridgeDecisionsWithNative(input: NativeResolveResponsesRequestBridgeDecisionsInput): NativeResolveResponsesRequestBridgeDecisionsOutput;
256
+ export declare function filterBridgeInputForUpstreamWithNative(input: NativeFilterBridgeInputForUpstreamInput): NativeFilterBridgeInputForUpstreamOutput;
257
+ export declare function prepareResponsesRequestEnvelopeWithNative(input: NativePrepareResponsesRequestEnvelopeInput): NativePrepareResponsesRequestEnvelopeOutput;
258
+ export declare function appendLocalImageBlockOnLatestUserInputWithNative(input: NativeAppendLocalImageBlockOnLatestUserInputInput): NativeAppendLocalImageBlockOnLatestUserInputOutput;
176
259
  export declare function applyBridgeNormalizeHistoryWithNative(input: NativeApplyBridgeNormalizeHistoryInput): NativeApplyBridgeNormalizeHistoryOutput;
177
260
  export declare function applyBridgeCaptureToolResultsWithNative(input: NativeApplyBridgeCaptureToolResultsInput): NativeApplyBridgeCaptureToolResultsOutput;
178
261
  export declare function applyBridgeEnsureToolPlaceholdersWithNative(input: NativeApplyBridgeEnsureToolPlaceholdersInput): NativeApplyBridgeEnsureToolPlaceholdersOutput;
@@ -82,6 +82,91 @@ function parseBridgeHistoryOutput(raw) {
82
82
  return null;
83
83
  }
84
84
  }
85
+ function parseNormalizeBridgeHistorySeedOutput(raw) {
86
+ return parseBridgeHistoryOutput(raw);
87
+ }
88
+ function parseResolveResponsesBridgeToolsOutput(raw) {
89
+ try {
90
+ const parsed = JSON.parse(raw);
91
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
92
+ return null;
93
+ }
94
+ const row = parsed;
95
+ const output = {};
96
+ if (Array.isArray(row.mergedTools)) {
97
+ output.mergedTools = row.mergedTools.filter((entry) => Boolean(entry) && typeof entry === 'object' && !Array.isArray(entry));
98
+ }
99
+ if (row.request && typeof row.request === 'object' && !Array.isArray(row.request)) {
100
+ output.request = row.request;
101
+ }
102
+ return output;
103
+ }
104
+ catch {
105
+ return null;
106
+ }
107
+ }
108
+ function parseResolveResponsesRequestBridgeDecisionsOutput(raw) {
109
+ try {
110
+ const parsed = JSON.parse(raw);
111
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
112
+ return null;
113
+ }
114
+ const row = parsed;
115
+ if (typeof row.forceWebSearch !== 'boolean') {
116
+ return null;
117
+ }
118
+ const output = {
119
+ forceWebSearch: row.forceWebSearch
120
+ };
121
+ if (row.toolCallIdStyle === 'fc' || row.toolCallIdStyle === 'preserve') {
122
+ output.toolCallIdStyle = row.toolCallIdStyle;
123
+ }
124
+ if (row.historySeed && typeof row.historySeed === 'object' && !Array.isArray(row.historySeed)) {
125
+ const serialized = JSON.stringify(row.historySeed);
126
+ const parsedHistory = parseBridgeHistoryOutput(serialized);
127
+ if (!parsedHistory) {
128
+ return null;
129
+ }
130
+ output.historySeed = parsedHistory;
131
+ }
132
+ return output;
133
+ }
134
+ catch {
135
+ return null;
136
+ }
137
+ }
138
+ function parseFilterBridgeInputForUpstreamOutput(raw) {
139
+ try {
140
+ const parsed = JSON.parse(raw);
141
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
142
+ return null;
143
+ }
144
+ const row = parsed;
145
+ if (!Array.isArray(row.input)) {
146
+ return null;
147
+ }
148
+ const input = row.input.filter((entry) => Boolean(entry) && typeof entry === 'object' && !Array.isArray(entry));
149
+ return { input };
150
+ }
151
+ catch {
152
+ return null;
153
+ }
154
+ }
155
+ function parsePrepareResponsesRequestEnvelopeOutput(raw) {
156
+ const parsed = parseRecord(raw);
157
+ if (!parsed || !parsed.request || typeof parsed.request !== 'object' || Array.isArray(parsed.request)) {
158
+ return null;
159
+ }
160
+ return { request: parsed.request };
161
+ }
162
+ function parseAppendLocalImageBlockOnLatestUserInputOutput(raw) {
163
+ const parsed = parseRecord(raw);
164
+ if (!parsed || !Array.isArray(parsed.messages)) {
165
+ return null;
166
+ }
167
+ const messages = parsed.messages.filter((entry) => Boolean(entry) && typeof entry === 'object' && !Array.isArray(entry));
168
+ return { messages };
169
+ }
85
170
  function parseBridgeInputToChatOutput(raw) {
86
171
  const parsed = parseRecord(raw);
87
172
  if (!parsed || !Array.isArray(parsed.messages)) {
@@ -443,6 +528,216 @@ export function buildBridgeHistoryWithNative(input) {
443
528
  return fail(reason);
444
529
  }
445
530
  }
531
+ export function normalizeBridgeHistorySeedWithNative(seed) {
532
+ const capability = 'normalizeBridgeHistorySeedJson';
533
+ const fail = (reason) => failNativeRequired(capability, reason);
534
+ if (isNativeDisabledByEnv()) {
535
+ return fail('native disabled');
536
+ }
537
+ const fn = readNativeFunction(capability);
538
+ if (!fn) {
539
+ return fail();
540
+ }
541
+ const payloadJson = safeStringify(seed);
542
+ if (!payloadJson) {
543
+ return fail('json stringify failed');
544
+ }
545
+ try {
546
+ const raw = fn(payloadJson);
547
+ if (typeof raw !== 'string' || !raw) {
548
+ return fail('empty result');
549
+ }
550
+ const parsed = parseNormalizeBridgeHistorySeedOutput(raw);
551
+ return parsed ?? fail('invalid payload');
552
+ }
553
+ catch (error) {
554
+ const reason = error instanceof Error ? error.message : String(error ?? 'unknown');
555
+ return fail(reason);
556
+ }
557
+ }
558
+ export function resolveResponsesBridgeToolsWithNative(input) {
559
+ const capability = 'resolveResponsesBridgeToolsJson';
560
+ const fail = (reason) => failNativeRequired(capability, reason);
561
+ if (isNativeDisabledByEnv()) {
562
+ return fail('native disabled');
563
+ }
564
+ const fn = readNativeFunction(capability);
565
+ if (!fn) {
566
+ return fail();
567
+ }
568
+ const payloadJson = safeStringify({
569
+ originalTools: input.originalTools,
570
+ chatTools: input.chatTools,
571
+ hasServerSideWebSearch: input.hasServerSideWebSearch,
572
+ passthroughKeys: input.passthroughKeys,
573
+ request: input.request
574
+ });
575
+ if (!payloadJson) {
576
+ return fail('json stringify failed');
577
+ }
578
+ try {
579
+ const raw = fn(payloadJson);
580
+ if (typeof raw !== 'string' || !raw) {
581
+ return fail('empty result');
582
+ }
583
+ const parsed = parseResolveResponsesBridgeToolsOutput(raw);
584
+ return parsed ?? fail('invalid payload');
585
+ }
586
+ catch (error) {
587
+ const reason = error instanceof Error ? error.message : String(error ?? 'unknown');
588
+ return fail(reason);
589
+ }
590
+ }
591
+ export function resolveResponsesRequestBridgeDecisionsWithNative(input) {
592
+ const capability = 'resolveResponsesRequestBridgeDecisionsJson';
593
+ const fail = (reason) => failNativeRequired(capability, reason);
594
+ if (isNativeDisabledByEnv()) {
595
+ return fail('native disabled');
596
+ }
597
+ const fn = readNativeFunction(capability);
598
+ if (!fn) {
599
+ return fail();
600
+ }
601
+ const payloadJson = safeStringify({
602
+ context: input.context,
603
+ requestMetadata: input.requestMetadata,
604
+ envelopeMetadata: input.envelopeMetadata,
605
+ bridgeMetadata: input.bridgeMetadata,
606
+ extraBridgeHistory: input.extraBridgeHistory
607
+ });
608
+ if (!payloadJson) {
609
+ return fail('json stringify failed');
610
+ }
611
+ try {
612
+ const raw = fn(payloadJson);
613
+ if (typeof raw !== 'string' || !raw) {
614
+ return fail('empty result');
615
+ }
616
+ const parsed = parseResolveResponsesRequestBridgeDecisionsOutput(raw);
617
+ return parsed ?? fail('invalid payload');
618
+ }
619
+ catch (error) {
620
+ const reason = error instanceof Error ? error.message : String(error ?? 'unknown');
621
+ return fail(reason);
622
+ }
623
+ }
624
+ export function filterBridgeInputForUpstreamWithNative(input) {
625
+ const capability = 'filterBridgeInputForUpstreamJson';
626
+ const fail = (reason) => failNativeRequired(capability, reason);
627
+ if (isNativeDisabledByEnv()) {
628
+ return fail('native disabled');
629
+ }
630
+ const fn = readNativeFunction(capability);
631
+ if (!fn) {
632
+ return fail();
633
+ }
634
+ const payloadJson = safeStringify({
635
+ input: input.input,
636
+ allowToolCallId: input.allowToolCallId
637
+ });
638
+ if (!payloadJson) {
639
+ return fail('json stringify failed');
640
+ }
641
+ try {
642
+ const raw = fn(payloadJson);
643
+ if (typeof raw !== 'string' || !raw) {
644
+ return fail('empty result');
645
+ }
646
+ const parsed = parseFilterBridgeInputForUpstreamOutput(raw);
647
+ return parsed ?? fail('invalid payload');
648
+ }
649
+ catch (error) {
650
+ const reason = error instanceof Error ? error.message : String(error ?? 'unknown');
651
+ return fail(reason);
652
+ }
653
+ }
654
+ export function prepareResponsesRequestEnvelopeWithNative(input) {
655
+ const capability = 'prepareResponsesRequestEnvelopeJson';
656
+ const fail = (reason) => failNativeRequired(capability, reason);
657
+ if (isNativeDisabledByEnv()) {
658
+ return fail('native disabled');
659
+ }
660
+ const fn = readNativeFunction(capability);
661
+ if (!fn) {
662
+ return fail();
663
+ }
664
+ const payloadJson = safeStringify({
665
+ request: input.request,
666
+ contextSystemInstruction: input.contextSystemInstruction,
667
+ extraSystemInstruction: input.extraSystemInstruction,
668
+ metadataSystemInstruction: input.metadataSystemInstruction,
669
+ combinedSystemInstruction: input.combinedSystemInstruction,
670
+ reasoningInstructionSegments: input.reasoningInstructionSegments,
671
+ contextParameters: input.contextParameters,
672
+ chatParameters: input.chatParameters,
673
+ metadataParameters: input.metadataParameters,
674
+ contextStream: input.contextStream,
675
+ metadataStream: input.metadataStream,
676
+ chatStream: input.chatStream,
677
+ chatParametersStream: input.chatParametersStream,
678
+ contextInclude: input.contextInclude,
679
+ metadataInclude: input.metadataInclude,
680
+ contextStore: input.contextStore,
681
+ metadataStore: input.metadataStore,
682
+ stripHostFields: input.stripHostFields,
683
+ contextToolChoice: input.contextToolChoice,
684
+ metadataToolChoice: input.metadataToolChoice,
685
+ contextParallelToolCalls: input.contextParallelToolCalls,
686
+ metadataParallelToolCalls: input.metadataParallelToolCalls,
687
+ contextResponseFormat: input.contextResponseFormat,
688
+ metadataResponseFormat: input.metadataResponseFormat,
689
+ contextServiceTier: input.contextServiceTier,
690
+ metadataServiceTier: input.metadataServiceTier,
691
+ contextTruncation: input.contextTruncation,
692
+ metadataTruncation: input.metadataTruncation,
693
+ contextMetadata: input.contextMetadata,
694
+ metadataMetadata: input.metadataMetadata
695
+ });
696
+ if (!payloadJson) {
697
+ return fail('json stringify failed');
698
+ }
699
+ try {
700
+ const raw = fn(payloadJson);
701
+ if (typeof raw !== 'string' || !raw) {
702
+ return fail('empty result');
703
+ }
704
+ const parsed = parsePrepareResponsesRequestEnvelopeOutput(raw);
705
+ return parsed ?? fail('invalid payload');
706
+ }
707
+ catch (error) {
708
+ const reason = error instanceof Error ? error.message : String(error ?? 'unknown');
709
+ return fail(reason);
710
+ }
711
+ }
712
+ export function appendLocalImageBlockOnLatestUserInputWithNative(input) {
713
+ const capability = 'appendLocalImageBlockOnLatestUserInputJson';
714
+ const fail = (reason) => failNativeRequired(capability, reason);
715
+ if (isNativeDisabledByEnv()) {
716
+ return fail('native disabled');
717
+ }
718
+ const fn = readNativeFunction(capability);
719
+ if (!fn) {
720
+ return fail();
721
+ }
722
+ const payloadJson = safeStringify({
723
+ messages: input.messages
724
+ });
725
+ if (!payloadJson) {
726
+ return fail('json stringify failed');
727
+ }
728
+ try {
729
+ const raw = fn(payloadJson);
730
+ if (typeof raw !== 'string' || !raw) {
731
+ return fail('empty result');
732
+ }
733
+ const parsed = parseAppendLocalImageBlockOnLatestUserInputOutput(raw);
734
+ return parsed ?? fail('invalid payload');
735
+ }
736
+ catch (error) {
737
+ const reason = error instanceof Error ? error.message : String(error ?? 'unknown');
738
+ return fail(reason);
739
+ }
740
+ }
446
741
  export function applyBridgeNormalizeHistoryWithNative(input) {
447
742
  const capability = 'applyBridgeNormalizeHistoryJson';
448
743
  const fail = (reason) => failNativeRequired(capability, reason);
@@ -52,6 +52,7 @@ export interface NativeReqOutboundCompatAdapterContextInput {
52
52
  routeId?: string;
53
53
  capturedChatRequest?: JsonObject;
54
54
  deepseek?: Record<string, unknown>;
55
+ claudeCode?: Record<string, unknown>;
55
56
  estimatedInputTokens?: number;
56
57
  modelId?: string;
57
58
  clientModelId?: string;
@@ -16,6 +16,13 @@ export declare function normalizeResponsesUsageWithNative(usageRaw: unknown): un
16
16
  export declare function buildResponsesPayloadFromChatWithNative(payload: unknown, context?: {
17
17
  requestId?: string;
18
18
  toolsRaw?: unknown[];
19
+ metadata?: Record<string, unknown>;
20
+ parallelToolCalls?: unknown;
21
+ toolChoice?: unknown;
22
+ include?: unknown;
23
+ store?: unknown;
24
+ stripHostManagedFields?: boolean;
25
+ sourceForRetention?: Record<string, unknown>;
19
26
  }): Record<string, unknown>;
20
27
  export declare function looksLikeJsonStreamPrefixWithNative(firstChunkText: string): boolean;
21
28
  export declare function parseJsonObjectCandidateWithNative(rawText: string, maxBytes: number): Record<string, unknown> | null;
@@ -529,7 +529,14 @@ export function buildResponsesPayloadFromChatWithNative(payload, context = {}) {
529
529
  const payloadJson = safeStringify(payload);
530
530
  const contextJson = safeStringify({
531
531
  requestId: context.requestId,
532
- toolsRaw: Array.isArray(context.toolsRaw) ? context.toolsRaw : []
532
+ toolsRaw: Array.isArray(context.toolsRaw) ? context.toolsRaw : [],
533
+ metadata: context.metadata,
534
+ parallelToolCalls: context.parallelToolCalls,
535
+ toolChoice: context.toolChoice,
536
+ include: context.include,
537
+ store: context.store,
538
+ stripHostManagedFields: context.stripHostManagedFields,
539
+ sourceForRetention: context.sourceForRetention
533
540
  });
534
541
  if (!payloadJson || !contextJson) {
535
542
  return fail('json stringify failed');