@openclaw/ai 2026.8.1-beta.1 → 2026.8.1-beta.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.
Files changed (86) hide show
  1. package/dist/{anthropic-CE-7SkF6.mjs → anthropic-B6dLpq5L.mjs} +37 -22
  2. package/dist/{src-QkygScBs.mjs → anthropic-JsNA5KCu.mjs} +0 -1
  3. package/dist/{anthropic-usage-Ma4iX6uG.mjs → anthropic-compaction-replay-8lJNKXOE.mjs} +225 -102
  4. package/dist/anthropic-payload-policy-CiEuQS72.d.mts +49 -0
  5. package/dist/{api-registry-EpJoVwM1.d.mts → api-registry-k3zTz0cV.d.mts} +1 -1
  6. package/dist/{azure-openai-responses-Cc_kasye.mjs → azure-openai-responses-mxIOtUnn.mjs} +23 -29
  7. package/dist/diagnostics.d.mts +24 -1
  8. package/dist/diagnostics.mjs +2 -1
  9. package/dist/{event-stream-DRmDMRHH.d.mts → event-stream-BP6AWT8j.d.mts} +3 -1
  10. package/dist/{event-stream-CEV9t6da.mjs → event-stream-uSMZJ3FA.mjs} +16 -3
  11. package/dist/event-stream.d.mts +1 -1
  12. package/dist/event-stream.mjs +1 -1
  13. package/dist/{google-CGQu21aw.mjs → google-C7h2QzDX.mjs} +4 -4
  14. package/dist/{google-shared-Cq2UKx1l.mjs → google-shared-B0Qr9OR7.mjs} +9 -18
  15. package/dist/google-thinking-level-C-V3tecN.mjs +9 -0
  16. package/dist/{google-vertex-CusxWzvE.mjs → google-vertex-Bhc3TjDl.mjs} +5 -4
  17. package/dist/{llm-request-activity-BjtkplhG.mjs → headers-DdOQtGuU.mjs} +9 -1
  18. package/dist/{host-Bl7Kgddo.mjs → host-DTqNc7ad.mjs} +227 -168
  19. package/dist/{host-Dn4_SZI2.d.mts → host-vWgMMhiJ.d.mts} +9 -4
  20. package/dist/index.d.mts +6 -6
  21. package/dist/index.mjs +7 -5
  22. package/dist/internal/anthropic.d.mts +13 -5
  23. package/dist/internal/anthropic.mjs +5 -5
  24. package/dist/internal/openai-responses-payload-policy.d.mts +3 -0
  25. package/dist/internal/openai-responses-payload-policy.mjs +3 -0
  26. package/dist/internal/openai.d.mts +6 -6
  27. package/dist/internal/openai.mjs +8 -7
  28. package/dist/internal/runtime.d.mts +17 -5
  29. package/dist/internal/runtime.mjs +85 -73
  30. package/dist/internal/shared.d.mts +1 -6
  31. package/dist/internal/shared.mjs +3 -4
  32. package/dist/{json-parse-BvXNt1-7.mjs → json-parse-CDnesDM_.mjs} +4 -6
  33. package/dist/{mistral-Dx6VzNjf.mjs → mistral-CEWoQI_g.mjs} +26 -45
  34. package/dist/{number-coercion-1Miyb5MO.mjs → number-coercion-H9qHik3g.mjs} +7 -2
  35. package/dist/openai-chatgpt-jwt-KWcgd0d_.mjs +19 -0
  36. package/dist/{openai-chatgpt-responses-SC9m0FSf.mjs → openai-chatgpt-responses-CrPmqERt.mjs} +225 -144
  37. package/dist/{openai-completions-BaIpl93j.mjs → openai-completions-BPnt4Sml.mjs} +28 -43
  38. package/dist/openai-completions-compat-Dt3dcawL.d.mts +43 -0
  39. package/dist/{openai-responses-Bdx3V_Yu.mjs → openai-responses-DhIKtOup.mjs} +17 -24
  40. package/dist/openai-responses-contracts-CyfIkQi5.mjs +253 -0
  41. package/dist/openai-responses-contracts-XpZJxrRG.d.mts +68 -0
  42. package/dist/openai-responses-payload-policy-BDxV-W0c.mjs +206 -0
  43. package/dist/openai-responses-payload-policy-BSs371VM.d.mts +40 -0
  44. package/dist/{openai-responses-prompt-observer-internal-DDZPxRfr.mjs → openai-responses-prompt-observer-internal-DgNTYnRY.mjs} +3 -3
  45. package/dist/{openai-responses-stream-internal-Bl8YyVtF.mjs → openai-responses-shared-DXIt3iY5.mjs} +1211 -908
  46. package/dist/{openai-reasoning-compat-DKebnIBL.mjs → openai-stop-reason-BkFkqqK0.mjs} +198 -172
  47. package/dist/{openai-transport-shared-Cipt7egQ.mjs → openai-tool-projection-CY04OcvQ.mjs} +151 -128
  48. package/dist/provider-error-BUwEnjXq.mjs +429 -0
  49. package/dist/provider-error-CzNw4BWX.d.mts +12 -0
  50. package/dist/{provider-options-C5kYML7i.d.mts → provider-options-B96RdNpH.d.mts} +9 -3
  51. package/dist/provider-transcript-transform-ePx-Bbfr.mjs +155 -0
  52. package/dist/provider-types.d.mts +31 -0
  53. package/dist/provider-types.mjs +8 -0
  54. package/dist/providers.d.mts +1 -1
  55. package/dist/providers.mjs +17 -19
  56. package/dist/{reasoning-tag-text-partitioner-CGDyLWUR.mjs → reasoning-tag-text-partitioner-rnPwX2pg.mjs} +14 -8
  57. package/dist/record-coerce-DdXsgUd_.mjs +23 -0
  58. package/dist/{model-utils-Dau5dlgm.mjs → sanitize-unicode-BYqrYtC_.mjs} +28 -2
  59. package/dist/session-resources-CkR4WWy1.mjs +21 -0
  60. package/dist/simple-options-D58D5Kvw.mjs +117 -0
  61. package/dist/src-D2H6yKkH.mjs +2 -0
  62. package/dist/{stream-first-event-timeout-BIBomOGq.mjs → stream-first-event-timeout-MK28puvq.mjs} +2 -2
  63. package/dist/string-coerce-fsri9iCu.mjs +34 -0
  64. package/dist/{tool-schema-json-projection-B1b-XCn5.mjs → tool-schema-json-projection-q5d7QX5c.mjs} +5 -7
  65. package/dist/transport-utils-DJqkxbhC.mjs +138 -0
  66. package/dist/transports.d.mts +135 -178
  67. package/dist/transports.mjs +1732 -1294
  68. package/dist/types-BDdaOVi2.mjs +6 -0
  69. package/dist/{types-CH7ReIcU.d.mts → types-BHNrPS1l.d.mts} +19 -1
  70. package/dist/types.d.mts +4 -4
  71. package/dist/types.mjs +6 -4
  72. package/dist/utf16-slice-CvGodqok.mjs +29 -0
  73. package/dist/{validation-DAa_yFOM.mjs → validation-B61OhAio.mjs} +6 -6
  74. package/dist/{validation-CcPcuEbR.d.mts → validation-DT9SrFn3.d.mts} +1 -1
  75. package/dist/validation.d.mts +1 -1
  76. package/dist/validation.mjs +1 -1
  77. package/package.json +15 -1
  78. package/dist/headers-B_e4-1J0.mjs +0 -9
  79. package/dist/openai-chatgpt-jwt-DhAAzLkj.mjs +0 -39
  80. package/dist/openai-responses-contracts-BBKBfAqR.d.mts +0 -116
  81. package/dist/openai-responses-shared-CCyMvg7M.mjs +0 -403
  82. package/dist/provider-error-DI0Ts28U.mjs +0 -47
  83. package/dist/sanitize-unicode-DT5o51ur.mjs +0 -26
  84. package/dist/tool-result-text-Dvkp2Dus.mjs +0 -274
  85. package/dist/transform-messages-DfjpNXNQ.mjs +0 -2
  86. package/dist/transport-stream-shared-CPNv7A3r.mjs +0 -297
@@ -1,39 +1,9 @@
1
- import { a as requiresClaudeMandatoryAdaptiveThinking, c as resolveClaudeMythos5ModelIdentity, d as resolveClaudeSonnet5ModelIdentity, g as supportsClaudeNativeXhighEffort, h as supportsClaudeNativeMaxEffort, i as requiresClaudeDefaultSampling, l as resolveClaudeNativeThinkingLevelMap, o as resolveClaudeFable5ModelIdentity, u as resolveClaudeOpus5ModelIdentity } from "./src-QkygScBs.mjs";
2
- import { r as clampThinkingLevel } from "./model-utils-Dau5dlgm.mjs";
3
- //#region packages/normalization-core/src/record-coerce.ts
4
- /** Type guard for non-array object records at browser-safe boundaries. */
5
- function isRecord(value) {
6
- return value !== null && typeof value === "object" && !Array.isArray(value);
7
- }
8
- //#endregion
9
- //#region packages/normalization-core/src/string-coerce.ts
10
- /** Reads a value only when it is already a string, preserving whitespace. */
11
- function readStringValue(value) {
12
- return typeof value === "string" ? value : void 0;
13
- }
14
- /** Trims string input and returns null for non-strings or empty strings. */
15
- function normalizeNullableString(value) {
16
- if (typeof value !== "string") return null;
17
- const trimmed = value.trim();
18
- return trimmed ? trimmed : null;
19
- }
20
- /** Trims string input and returns undefined for non-strings or empty strings. */
21
- function normalizeOptionalString(value) {
22
- return normalizeNullableString(value) ?? void 0;
23
- }
24
- /** Lowercases a normalized optional string. */
25
- function normalizeOptionalLowercaseString(value) {
26
- return normalizeOptionalString(value)?.toLowerCase();
27
- }
28
- /** Lowercases a normalized string or returns an empty string when absent. */
29
- function normalizeLowercaseStringOrEmpty(value) {
30
- return normalizeOptionalLowercaseString(value) ?? "";
31
- }
32
- /** Type guard for strings that remain non-empty after trimming. */
33
- function hasNonEmptyString(value) {
34
- return normalizeOptionalString(value) !== void 0;
35
- }
36
- //#endregion
1
+ import { a as requiresClaudeMandatoryAdaptiveThinking, c as resolveClaudeMythos5ModelIdentity, d as resolveClaudeSonnet5ModelIdentity, g as supportsClaudeNativeXhighEffort, h as supportsClaudeNativeMaxEffort, i as requiresClaudeDefaultSampling, l as resolveClaudeNativeThinkingLevelMap, o as resolveClaudeFable5ModelIdentity, u as resolveClaudeOpus5ModelIdentity } from "./anthropic-JsNA5KCu.mjs";
2
+ import "./src-D2H6yKkH.mjs";
3
+ import { n as normalizeLowercaseStringOrEmpty } from "./string-coerce-fsri9iCu.mjs";
4
+ import { i as clampThinkingLevel, t as sanitizeSurrogates } from "./sanitize-unicode-BYqrYtC_.mjs";
5
+ import { a as isRecord } from "./record-coerce-DdXsgUd_.mjs";
6
+ import { t as truncateUtf16Safe } from "./utf16-slice-CvGodqok.mjs";
37
7
  //#region packages/ai/src/providers/anthropic-model-contract.ts
38
8
  const ANTHROPIC_CLAUDE_CODE_VERSION = "2.1.75";
39
9
  const ANTHROPIC_CLAUDE_CODE_BILLING_SYSTEM_BLOCK = `x-anthropic-billing-header: cc_version=${ANTHROPIC_CLAUDE_CODE_VERSION}; cc_entrypoint=sdk-cli;`;
@@ -92,6 +62,7 @@ function mapAnthropicStopReason(reason) {
92
62
  switch (reason) {
93
63
  case "end_turn":
94
64
  case "pause_turn":
65
+ case "compaction":
95
66
  case "stop_sequence": return "stop";
96
67
  case "max_tokens": return "length";
97
68
  case "tool_use": return "toolUse";
@@ -150,160 +121,248 @@ function resolveModelBoundThinkingReplayMode(params) {
150
121
  return sourceApi === targetApi && sourceIdentity === targetIdentity ? "preserve" : "drop";
151
122
  }
152
123
  //#endregion
124
+ //#region packages/ai/src/providers/tool-result-text.ts
125
+ const PROVIDER_TOOL_RESULT_MAX_CHARS = 8e3;
126
+ const IMAGE_TOOL_RESULT_TYPES = /* @__PURE__ */ new Set([
127
+ "image",
128
+ "image_url",
129
+ "input_image"
130
+ ]);
131
+ const AUDIO_TOOL_RESULT_TYPES = /* @__PURE__ */ new Set([
132
+ "audio",
133
+ "input_audio",
134
+ "output_audio"
135
+ ]);
136
+ const MEDIA_ONLY_TOOL_RESULT_TYPES = /* @__PURE__ */ new Set([...IMAGE_TOOL_RESULT_TYPES, ...AUDIO_TOOL_RESULT_TYPES]);
137
+ const INLINE_DATA_URI_PATTERN = /(^|[^A-Za-z0-9_])data:([a-z][a-z0-9.+-]*\/[a-z0-9.+-]+(?:;[a-z0-9.+-]+=[^,;"'\s]+|;base64)*,[^\s"'<>)]+)/gi;
138
+ const MIME_KEY_CANDIDATES = [
139
+ "mimeType",
140
+ "mime_type",
141
+ "mediaType",
142
+ "media_type",
143
+ "contentType",
144
+ "content_type"
145
+ ];
146
+ const TEXTUAL_MIME_PATTERN = /^(?:text\/|application\/(?:json|ld\+json|x-ndjson|xml|javascript|x-www-form-urlencoded)|[^/]+\/[^+]+\+(?:json|xml)$)/i;
147
+ const OPAQUE_OR_BINARY_FIELD_RE = /^(?:blob|buffer|bytes|encrypted_content|encrypted_stdout)$/i;
148
+ function readMimeType(value) {
149
+ if (!isRecord(value)) return;
150
+ for (const key of MIME_KEY_CANDIDATES) {
151
+ const mimeType = value[key];
152
+ if (typeof mimeType === "string" && mimeType.trim().length > 0) return mimeType;
153
+ }
154
+ }
155
+ function isBinaryMimeType(mimeType) {
156
+ const normalized = mimeType.split(";", 1)[0]?.trim().toLowerCase();
157
+ return normalized ? !TEXTUAL_MIME_PATTERN.test(normalized) : false;
158
+ }
159
+ function describeOmittedValue(value, label) {
160
+ const length = typeof value === "string" ? value.length : JSON.stringify(value)?.length;
161
+ return length ? `[${label} omitted: ${length} chars]` : `[${label} omitted]`;
162
+ }
163
+ function redactInlineDataUris(value) {
164
+ return value.replace(INLINE_DATA_URI_PATTERN, (_match, prefix, uri) => `${prefix}[inline data URI: ${uri.length} chars]`);
165
+ }
166
+ function redactStructuredTextValue(value) {
167
+ const host = getAiTransportHost();
168
+ const redacted = host.redactToolPayloadText(value);
169
+ const trimmed = redacted.trim();
170
+ if (!trimmed.startsWith("{") && !trimmed.startsWith("[")) return redacted;
171
+ try {
172
+ const redactedWrapper = host.redactSecrets({ structuredTextValue: JSON.parse(redacted) });
173
+ return JSON.stringify(redactedWrapper.structuredTextValue);
174
+ } catch {
175
+ return redacted;
176
+ }
177
+ }
178
+ function stringifyStructuredBlock(block) {
179
+ const seen = /* @__PURE__ */ new WeakSet();
180
+ try {
181
+ const redactedBlock = getAiTransportHost().redactSecrets({ structuredToolResult: block }).structuredToolResult;
182
+ const serialized = JSON.stringify(redactedBlock, function structuredToolResultReplacer(key, value) {
183
+ if (OPAQUE_OR_BINARY_FIELD_RE.test(key)) return `[omitted ${key}]`;
184
+ if (key === "data") {
185
+ const mimeType = readMimeType(this);
186
+ if (mimeType && isBinaryMimeType(mimeType)) return describeOmittedValue(value, "binary data");
187
+ }
188
+ if (typeof value === "bigint") return value.toString();
189
+ if (typeof value === "string") return redactInlineDataUris(redactStructuredTextValue(value));
190
+ if (typeof value === "function" || typeof value === "symbol" || value === void 0) return;
191
+ if (!value || typeof value !== "object") return value;
192
+ if (seen.has(value)) return "[Circular]";
193
+ seen.add(value);
194
+ return value;
195
+ });
196
+ if (!serialized || serialized === "{}") return;
197
+ return serialized;
198
+ } catch {
199
+ return;
200
+ }
201
+ }
202
+ function truncateProviderToolText(text) {
203
+ if (text.length <= PROVIDER_TOOL_RESULT_MAX_CHARS) return text;
204
+ return `${truncateUtf16Safe(text, PROVIDER_TOOL_RESULT_MAX_CHARS)}\n…(truncated)…`;
205
+ }
206
+ /** Media metadata alone is not an attachment; provider emitters need inline bytes. */
207
+ function hasMediaPayload(block) {
208
+ return isRecord(block) && typeof block.data === "string" && block.data.trim().length > 0;
209
+ }
210
+ /** Image metadata alone is not an attachment; provider emitters need inline bytes. */
211
+ function isImageWithMediaPayload(block) {
212
+ return isRecord(block) && block.type === "image" && hasMediaPayload(block);
213
+ }
214
+ function describeToolResultMediaPlaceholder(blocks) {
215
+ let hasImage = false;
216
+ let hasAudio = false;
217
+ for (const block of blocks) {
218
+ if (!hasMediaPayload(block)) continue;
219
+ const record = block;
220
+ const type = typeof record.type === "string" ? record.type : void 0;
221
+ const mimeType = readMimeType(record);
222
+ if (type && IMAGE_TOOL_RESULT_TYPES.has(type) || mimeType?.toLowerCase().startsWith("image/")) hasImage = true;
223
+ if (type && AUDIO_TOOL_RESULT_TYPES.has(type) || mimeType?.toLowerCase().startsWith("audio/")) hasAudio = true;
224
+ }
225
+ if (hasImage && hasAudio) return "(see attached media)";
226
+ if (hasAudio) return "(see attached audio)";
227
+ if (hasImage) return "(see attached image)";
228
+ }
229
+ function extractToolResultBlockText(block) {
230
+ if (!block || typeof block !== "object") return;
231
+ const record = block;
232
+ if (typeof record.type === "string" && MEDIA_ONLY_TOOL_RESULT_TYPES.has(record.type)) return;
233
+ if (record.type === "text") {
234
+ const text = typeof record.text === "string" ? record.text : "";
235
+ return text ? sanitizeSurrogates(text) : void 0;
236
+ }
237
+ const structured = stringifyStructuredBlock(record);
238
+ return structured ? sanitizeSurrogates(truncateProviderToolText(structured)) : void 0;
239
+ }
240
+ function extractToolResultText(blocks) {
241
+ const explicitTexts = [];
242
+ const structuredTexts = [];
243
+ for (const block of blocks) {
244
+ const text = extractToolResultBlockText(block);
245
+ if (!text) continue;
246
+ if (block.type === "text") explicitTexts.push(text);
247
+ else structuredTexts.push(text);
248
+ }
249
+ if (explicitTexts.length > 0) return sanitizeSurrogates(explicitTexts.join("\n"));
250
+ return sanitizeSurrogates(truncateProviderToolText(structuredTexts.join("\n")));
251
+ }
252
+ //#endregion
153
253
  //#region packages/ai/src/transcript-transform.ts
154
254
  const NON_VISION_USER_IMAGE_PLACEHOLDER = "(image omitted: model does not support images)";
155
255
  const NON_VISION_TOOL_IMAGE_PLACEHOLDER = "(tool image omitted: model does not support images)";
156
- function isImageWithMediaPayload(block) {
157
- return isRecord(block) && block.type === "image" && typeof block.data === "string" && block.data.trim().length > 0;
158
- }
159
256
  function replaceImagesWithPlaceholder(content, placeholder) {
160
257
  const result = [];
161
- let previousWasPlaceholder = false;
162
258
  for (const block of content) {
163
- if (block.type === "image") {
164
- if (!isImageWithMediaPayload(block)) continue;
165
- if (!previousWasPlaceholder) result.push({
166
- type: "text",
167
- text: placeholder
168
- });
169
- previousWasPlaceholder = true;
259
+ if (block.type !== "image") {
260
+ result.push(block);
170
261
  continue;
171
262
  }
172
- result.push(block);
173
- previousWasPlaceholder = block.text === placeholder;
263
+ const previous = result.at(-1);
264
+ const repeated = previous?.type === "text" && previous.text === placeholder;
265
+ if (isImageWithMediaPayload(block) && !repeated) result.push({
266
+ type: "text",
267
+ text: placeholder
268
+ });
174
269
  }
175
270
  return result;
176
271
  }
177
272
  function downgradeUnsupportedImages(messages, model) {
178
273
  if (model.input.includes("image")) return messages;
179
- return messages.map((msg) => {
180
- if (msg.role === "user" && Array.isArray(msg.content)) return {
181
- ...msg,
182
- content: replaceImagesWithPlaceholder(msg.content, NON_VISION_USER_IMAGE_PLACEHOLDER)
274
+ return messages.map((message) => {
275
+ if (message.role === "assistant" || typeof message.content === "string") return message;
276
+ const placeholder = message.role === "user" ? NON_VISION_USER_IMAGE_PLACEHOLDER : NON_VISION_TOOL_IMAGE_PLACEHOLDER;
277
+ return {
278
+ ...message,
279
+ content: replaceImagesWithPlaceholder(message.content, placeholder)
183
280
  };
184
- if (msg.role === "toolResult") return {
185
- ...msg,
186
- content: replaceImagesWithPlaceholder(msg.content, NON_VISION_TOOL_IMAGE_PLACEHOLDER)
187
- };
188
- return msg;
189
281
  });
190
282
  }
191
- /**
192
- * Normalize tool call ID for cross-provider compatibility.
193
- * OpenAI Responses API generates IDs that are 450+ chars with special characters like `|`.
194
- * Anthropic APIs require IDs matching ^[a-zA-Z0-9_-]+$ (max 64 chars).
195
- */
196
- function transformMessages(messages, model, normalizeToolCallId) {
197
- const toolCallIdMap = /* @__PURE__ */ new Map();
198
- const transformed = downgradeUnsupportedImages(messages.map((msg) => msg.content == null ? {
199
- ...msg,
200
- content: []
201
- } : msg), model).map((msg) => {
202
- if (msg.role === "user") return msg;
203
- if (msg.role === "toolResult") {
204
- const normalizedId = toolCallIdMap.get(msg.toolCallId);
205
- if (normalizedId && normalizedId !== msg.toolCallId) return Object.assign({}, msg, { toolCallId: normalizedId });
206
- return msg;
283
+ function transformAssistant(message, model, toolCallIdMap, normalizeToolCallId) {
284
+ const replayMode = resolveModelBoundThinkingReplayMode({
285
+ source: {
286
+ provider: message.provider,
287
+ api: message.api,
288
+ modelId: message.model,
289
+ responseModelId: message.responseModel
290
+ },
291
+ target: {
292
+ provider: model.provider,
293
+ api: model.api,
294
+ modelId: model.id,
295
+ modelParams: model.params
207
296
  }
208
- if (msg.role === "assistant") {
209
- const assistantMsg = msg;
210
- const modelBoundThinkingReplayMode = resolveModelBoundThinkingReplayMode({
211
- source: {
212
- provider: assistantMsg.provider,
213
- api: assistantMsg.api,
214
- modelId: assistantMsg.model,
215
- responseModelId: assistantMsg.responseModel
216
- },
217
- target: {
218
- provider: model.provider,
219
- api: model.api,
220
- modelId: model.id,
221
- modelParams: model.params
222
- }
223
- });
224
- const isSameModel = modelBoundThinkingReplayMode === "preserve" || assistantMsg.provider === model.provider && assistantMsg.api === model.api && assistantMsg.model === model.id;
225
- const transformedContent = (typeof assistantMsg.content === "string" ? [{
297
+ });
298
+ const sameModel = replayMode === "preserve" || message.provider === model.provider && message.api === model.api && message.model === model.id;
299
+ const content = (typeof message.content === "string" ? [{
300
+ type: "text",
301
+ text: message.content
302
+ }] : message.content).flatMap((block) => {
303
+ if (block.type === "thinking") {
304
+ if (replayMode === "drop") return [];
305
+ if (block.redacted) return sameModel ? block : [];
306
+ if (sameModel && block.thinkingSignature) return block;
307
+ if (!block.thinking?.trim()) return [];
308
+ return sameModel ? block : {
226
309
  type: "text",
227
- text: assistantMsg.content
228
- }] : assistantMsg.content).flatMap((block) => {
229
- if (block.type === "thinking") {
230
- if (modelBoundThinkingReplayMode === "drop") return [];
231
- if (block.redacted) return isSameModel ? block : [];
232
- if (isSameModel && block.thinkingSignature) return block;
233
- if (!block.thinking || block.thinking.trim() === "") return [];
234
- if (isSameModel) return block;
235
- return {
236
- type: "text",
237
- text: block.thinking
238
- };
239
- }
240
- if (block.type === "text") {
241
- if (isSameModel) return block;
242
- return {
243
- type: "text",
244
- text: block.text
245
- };
246
- }
247
- if (block.type === "toolCall") {
248
- const toolCall = block;
249
- let normalizedToolCall = toolCall;
250
- if (!isSameModel && toolCall.thoughtSignature) {
251
- normalizedToolCall = Object.assign({}, toolCall);
252
- delete normalizedToolCall.thoughtSignature;
253
- }
254
- if (!isSameModel && normalizeToolCallId) {
255
- const normalizedId = normalizeToolCallId(toolCall.id, model, assistantMsg);
256
- if (normalizedId !== toolCall.id) {
257
- toolCallIdMap.set(toolCall.id, normalizedId);
258
- normalizedToolCall = Object.assign({}, normalizedToolCall, { id: normalizedId });
259
- }
260
- }
261
- return normalizedToolCall;
262
- }
263
- return block;
264
- });
265
- return Object.assign({}, assistantMsg, { content: transformedContent });
310
+ text: block.thinking
311
+ };
266
312
  }
267
- return msg;
313
+ if (block.type === "text") return sameModel ? block : {
314
+ type: "text",
315
+ text: block.text
316
+ };
317
+ const { thoughtSignature: _, ...unsigned } = block;
318
+ const trimmedId = block.id.trim();
319
+ if (sameModel) return trimmedId === block.id ? block : Object.assign({}, block, { id: trimmedId });
320
+ const id = normalizeToolCallId?.(trimmedId, model, message) ?? trimmedId;
321
+ if (id !== trimmedId) toolCallIdMap.set(trimmedId, id);
322
+ return id === block.id ? unsigned : Object.assign({}, unsigned, { id });
323
+ });
324
+ return {
325
+ ...message,
326
+ content
327
+ };
328
+ }
329
+ function transformMessages(messages, model, normalizeToolCallId) {
330
+ const toolCallIdMap = /* @__PURE__ */ new Map();
331
+ const transformed = downgradeUnsupportedImages(messages.map((message) => message.content == null ? Object.assign({}, message, { content: [] }) : message), model).map((message) => {
332
+ if (message.role === "assistant") return transformAssistant(message, model, toolCallIdMap, normalizeToolCallId);
333
+ if (message.role !== "toolResult") return message;
334
+ const trimmedId = message.toolCallId.trim();
335
+ const toolCallId = toolCallIdMap.get(trimmedId) ?? trimmedId;
336
+ return toolCallId === message.toolCallId ? message : Object.assign({}, message, { toolCallId });
268
337
  });
269
338
  const result = [];
270
339
  let pendingToolCalls = [];
271
340
  let existingToolResultIds = /* @__PURE__ */ new Set();
272
- const insertSyntheticToolResults = () => {
273
- if (pendingToolCalls.length > 0) {
274
- for (const tc of pendingToolCalls) if (!existingToolResultIds.has(tc.id)) result.push({
275
- role: "toolResult",
276
- toolCallId: tc.id,
277
- toolName: tc.name,
278
- content: [{
279
- type: "text",
280
- text: "No result provided"
281
- }],
282
- isError: true,
283
- timestamp: Date.now()
284
- });
285
- pendingToolCalls = [];
286
- existingToolResultIds = /* @__PURE__ */ new Set();
287
- }
341
+ const flushToolCalls = () => {
342
+ for (const call of pendingToolCalls) if (!existingToolResultIds.has(call.id)) result.push({
343
+ role: "toolResult",
344
+ toolCallId: call.id,
345
+ toolName: call.name,
346
+ content: [{
347
+ type: "text",
348
+ text: "No result provided"
349
+ }],
350
+ isError: true,
351
+ timestamp: Date.now()
352
+ });
353
+ pendingToolCalls = [];
354
+ existingToolResultIds = /* @__PURE__ */ new Set();
288
355
  };
289
- for (const msg of transformed) if (msg.role === "assistant") {
290
- insertSyntheticToolResults();
291
- const assistantMsg = msg;
292
- if (assistantMsg.stopReason === "error" || assistantMsg.stopReason === "aborted") continue;
293
- const toolCalls = assistantMsg.content.filter((b) => b.type === "toolCall");
294
- if (toolCalls.length > 0) {
295
- pendingToolCalls = toolCalls;
296
- existingToolResultIds = /* @__PURE__ */ new Set();
297
- }
298
- result.push(msg);
299
- } else if (msg.role === "toolResult") {
300
- existingToolResultIds.add(msg.toolCallId);
301
- result.push(msg);
302
- } else if (msg.role === "user") {
303
- insertSyntheticToolResults();
304
- result.push(msg);
305
- } else result.push(msg);
306
- insertSyntheticToolResults();
356
+ for (const message of transformed) {
357
+ if (message.role === "assistant") {
358
+ flushToolCalls();
359
+ if (message.stopReason === "error" || message.stopReason === "aborted") continue;
360
+ pendingToolCalls = message.content.filter((block) => block.type === "toolCall");
361
+ } else if (message.role === "toolResult") existingToolResultIds.add(message.toolCallId);
362
+ else flushToolCalls();
363
+ result.push(message);
364
+ }
365
+ flushToolCalls();
307
366
  return result;
308
367
  }
309
368
  //#endregion
@@ -358,7 +417,6 @@ const inertAiTransportHost = {
358
417
  inheritManagedTransport: (_source, target) => target,
359
418
  transformTransportMessages: (messages, model, normalizeToolCallId) => transformMessages(messages, model, normalizeToolCallId),
360
419
  registerCustomApi: queueCustomApiRegistration,
361
- prepareGoogleSimpleCompletionModel: (_registry, model) => model,
362
420
  logDebug: () => {},
363
421
  logInfo: () => {},
364
422
  logWarn: () => {}
@@ -395,6 +453,7 @@ function resolveAiTransportHeaderSentinels(headers) {
395
453
  const host = getAiTransportHost();
396
454
  let resolvedHeaders;
397
455
  for (const [name, value] of Object.entries(headers)) {
456
+ if (value === null) continue;
398
457
  const resolved = host.resolveSecretSentinel(value);
399
458
  if (resolved !== value) {
400
459
  resolvedHeaders ??= { ...headers };
@@ -404,4 +463,4 @@ function resolveAiTransportHeaderSentinels(headers) {
404
463
  return resolvedHeaders ?? headers;
405
464
  }
406
465
  //#endregion
407
- export { normalizeLowercaseStringOrEmpty as _, ANTHROPIC_CLAUDE_CODE_BILLING_SYSTEM_BLOCK as a, isRecord as b, defaultsClaudeAdaptiveThinking as c, requiresClaudeAdaptiveThinking as d, resolveAnthropicThinkingEffort as f, hasNonEmptyString as g, usesClaudeStreamingRefusalContract as h, transformMessages as i, mapAnthropicStopReason as l, usesClaudeFable5MessagesContract as m, getAiTransportHost as n, ANTHROPIC_CLAUDE_CODE_VERSION as o, resolveModelBoundThinkingReplayMode as p, resolveAiTransportHeaderSentinels as r, applyClaudeRequestContract as s, configureAiTransportHost as t, prepareClaudeNoPrefillRequestContext as u, normalizeOptionalString as v, readStringValue as y };
466
+ export { resolveAnthropicThinkingEffort as _, describeToolResultMediaPlaceholder as a, usesClaudeStreamingRefusalContract as b, hasMediaPayload as c, ANTHROPIC_CLAUDE_CODE_VERSION as d, applyClaudeRequestContract as f, requiresClaudeAdaptiveThinking as g, prepareClaudeNoPrefillRequestContext as h, transformMessages as i, isImageWithMediaPayload as l, mapAnthropicStopReason as m, getAiTransportHost as n, extractToolResultBlockText as o, defaultsClaudeAdaptiveThinking as p, resolveAiTransportHeaderSentinels as r, extractToolResultText as s, configureAiTransportHost as t, ANTHROPIC_CLAUDE_CODE_BILLING_SYSTEM_BLOCK as u, resolveModelBoundThinkingReplayMode as v, usesClaudeFable5MessagesContract as y };
@@ -1,5 +1,5 @@
1
- import { E as Model, L as StreamFn, n as Api, u as Context } from "./types-CH7ReIcU.mjs";
2
- import { n as ApiRegistry } from "./api-registry-EpJoVwM1.mjs";
1
+ import { B as StreamFn, E as Model, n as Api, u as Context } from "./types-BHNrPS1l.mjs";
2
+ import { n as ApiRegistry } from "./api-registry-k3zTz0cV.mjs";
3
3
 
4
4
  //#region packages/ai/src/host.d.ts
5
5
  /** Provider capability facts needed by the package-owned transports. */
@@ -29,6 +29,8 @@ interface AiProviderStreamHookContext {
29
29
  provider: string;
30
30
  modelId: string;
31
31
  model: Model;
32
+ /** Wire-format API before simple completion projects an internal transport alias. */
33
+ sourceApi?: Api;
32
34
  }
33
35
  /** Narrow plugin-runtime port used by package-owned transports. */
34
36
  interface AiTransportPluginHost {
@@ -59,6 +61,10 @@ interface AiTransportPluginHost {
59
61
  }): {
60
62
  headers?: Record<string, string>;
61
63
  metadata?: Record<string, string>;
64
+ websocket?: {
65
+ headers?: Record<string, string>;
66
+ degradeCooldownMs?: number;
67
+ };
62
68
  } | undefined;
63
69
  wrapSimpleCompletionStream(this: void, params: {
64
70
  provider: string;
@@ -77,6 +83,7 @@ type AiTransformTransportMessages = (messages: Context["messages"], model: Model
77
83
  }) => string, options?: {
78
84
  normalizeSameModelToolCallIds?: boolean;
79
85
  preserveCrossModelToolCallThoughtSignature?: boolean;
86
+ preserveUnframedToolResults?: boolean;
80
87
  }) => Context["messages"];
81
88
  /** Strict-tool policy inputs for OpenAI-compatible routes. */
82
89
  interface OpenAIStrictToolSettingOptions {
@@ -145,8 +152,6 @@ interface AiTransportHost {
145
152
  transformTransportMessages: AiTransformTransportMessages;
146
153
  /** Registers a custom transport API with the host's stream error bridge. */
147
154
  registerCustomApi(registry: ApiRegistry, api: Api, streamFn: StreamFn): boolean;
148
- /** Prepares the provider-owned Google simple-completion alias when needed. */
149
- prepareGoogleSimpleCompletionModel(registry: ApiRegistry, model: Model): Model;
150
155
  /**
151
156
  * Emits one transport diagnostic; build runs only when the host logs it and
152
157
  * may return null to suppress the entry (e.g. de-duplication).
package/dist/index.d.mts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { a as requiresClaudeMandatoryAdaptiveThinking, c as resolveClaudeMythos5ModelIdentity, d as resolveClaudeSonnet5ModelIdentity, f as supportsClaude1MContext, g as supportsClaudeNativeXhighEffort, h as supportsClaudeNativeMaxEffort, i as requiresClaudeDefaultSampling, l as resolveClaudeNativeThinkingLevelMap, m as supportsClaudeFastMode, n as CLAUDE_OPUS_5_THINKING_PROFILE, o as resolveClaudeFable5ModelIdentity, p as supportsClaudeAdaptiveThinking, r as CLAUDE_SONNET_5_THINKING_PROFILE, s as resolveClaudeModelIdentity, t as CLAUDE_FABLE_5_THINKING_PROFILE, u as resolveClaudeOpus5ModelIdentity } from "./anthropic-SrGtwsJu.mjs";
2
2
  import { a as extractDiagnosticError, i as createAssistantMessageDiagnostic, n as DiagnosticErrorInfo, o as formatThrownValue, r as appendAssistantMessageDiagnostic, t as AssistantMessageDiagnostic } from "./diagnostics-BaTA9eVl.mjs";
3
- import { $ as VercelGatewayRouting, A as OpenRouterRouting, B as TextContent, C as KnownImagesProvider, D as ModelThinkingLevel, E as Model, F as SimpleStreamOptions, G as ThinkingLevelMap, H as ThinkingBudgets, I as StopReason, J as ToolResultMessage, K as Tool, L as StreamFn, M as ProviderImagesOptions, N as ProviderResponse, O as OpenAICompletionsCompat, P as ProviderStreamOptions, Q as ValidateToolArgumentsFn, R as StreamFunction, S as KnownImagesApi, T as Message, U as ThinkingContent, V as TextSignatureV1, W as ThinkingLevel, X as Usage, Y as Transport, Z as UserMessage, _ as ImagesOptions, a as AssistantMessageEvent, b as ImagesStopReason, c as CacheRetention, d as ImageContent, f as ImagesApi, g as ImagesModel, h as ImagesInputContent, i as AssistantMessage, j as Provider, k as OpenAIResponsesCompat, l as CompleteSimpleFn, m as ImagesFunction, n as Api, o as AssistantMessageEventStreamContract, p as ImagesContext, q as ToolCall, r as AssistantImages, s as AssistantMessageEventStreamLike, t as AnthropicMessagesCompat, u as Context, v as ImagesOutputContent, w as MaybePromise, x as KnownApi, y as ImagesProvider, z as StreamOptions } from "./types-CH7ReIcU.mjs";
4
- import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-DRmDMRHH.mjs";
5
- import { n as validateToolCall, t as validateToolArguments } from "./validation-CcPcuEbR.mjs";
6
- import { a as RegisteredApiProvider, i as ApiStreamSimpleFunction, n as ApiRegistry, o as createApiRegistry, r as ApiStreamFunction, t as ApiProvider } from "./api-registry-EpJoVwM1.mjs";
7
- import { a as AiProviderRequestPolicyInput, c as AiTransportHost, d as configureAiTransportHost, f as getAiTransportHost, i as AiProviderRequestCapabilities, l as AiTransportPluginHost, n as AiInlineImageBlock, o as AiProviderStreamHookContext, p as resolveAiTransportHeaderSentinels, r as AiInlineTextBlock, s as AiTransformTransportMessages, t as AiInlineContentBlock, u as OpenAIStrictToolSettingOptions } from "./host-Dn4_SZI2.mjs";
3
+ import { $ as Usage, A as OpenRouterRouting, B as StreamFn, C as KnownImagesProvider, D as ModelThinkingLevel, E as Model, F as ProviderReplayState, G as ThinkingBudgets, H as StreamOptions, I as ProviderResponse, J as ThinkingLevelMap, K as ThinkingContent, L as ProviderStreamOptions, M as PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, N as Provider, O as OpenAICompletionsCompat, P as ProviderImagesOptions, Q as Transport, R as SimpleStreamOptions, S as KnownImagesApi, T as Message, U as TextContent, V as StreamFunction, W as TextSignatureV1, X as ToolCall, Y as Tool, Z as ToolResultMessage, _ as ImagesOptions, a as AssistantMessageEvent, b as ImagesStopReason, c as CacheRetention, d as ImageContent, et as UserMessage, f as ImagesApi, g as ImagesModel, h as ImagesInputContent, i as AssistantMessage, j as PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE, k as OpenAIResponsesCompat, l as CompleteSimpleFn, m as ImagesFunction, n as Api, nt as VercelGatewayRouting, o as AssistantMessageEventStreamContract, p as ImagesContext, q as ThinkingLevel, r as AssistantImages, s as AssistantMessageEventStreamLike, t as AnthropicMessagesCompat, tt as ValidateToolArgumentsFn, u as Context, v as ImagesOutputContent, w as MaybePromise, x as KnownApi, y as ImagesProvider, z as StopReason } from "./types-BHNrPS1l.mjs";
4
+ import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-BP6AWT8j.mjs";
5
+ import { n as validateToolCall, t as validateToolArguments } from "./validation-DT9SrFn3.mjs";
6
+ import { a as RegisteredApiProvider, i as ApiStreamSimpleFunction, n as ApiRegistry, o as createApiRegistry, r as ApiStreamFunction, t as ApiProvider } from "./api-registry-k3zTz0cV.mjs";
7
+ import { a as AiProviderRequestPolicyInput, c as AiTransportHost, d as configureAiTransportHost, f as getAiTransportHost, i as AiProviderRequestCapabilities, l as AiTransportPluginHost, n as AiInlineImageBlock, o as AiProviderStreamHookContext, p as resolveAiTransportHeaderSentinels, r as AiInlineTextBlock, s as AiTransformTransportMessages, t as AiInlineContentBlock, u as OpenAIStrictToolSettingOptions } from "./host-vWgMMhiJ.mjs";
8
8
 
9
9
  //#region packages/ai/src/stream.d.ts
10
10
  /** Creates an isolated LLM runtime backed by the supplied provider registry. */
@@ -23,4 +23,4 @@ declare function createLlmRuntime(registry?: ApiRegistry): {
23
23
  };
24
24
  type LlmRuntime = ReturnType<typeof createLlmRuntime>;
25
25
  //#endregion
26
- export { AiInlineContentBlock, AiInlineImageBlock, AiInlineTextBlock, AiProviderRequestCapabilities, AiProviderRequestPolicyInput, AiProviderStreamHookContext, AiTransformTransportMessages, AiTransportHost, AiTransportPluginHost, AnthropicMessagesCompat, Api, ApiProvider, ApiRegistry, ApiStreamFunction, ApiStreamSimpleFunction, AssistantImages, AssistantMessage, AssistantMessageDiagnostic, AssistantMessageEvent, AssistantMessageEventStream, AssistantMessageEventStreamContract, AssistantMessageEventStreamLike, CLAUDE_FABLE_5_THINKING_PROFILE, CLAUDE_OPUS_5_THINKING_PROFILE, CLAUDE_SONNET_5_THINKING_PROFILE, CacheRetention, CompleteSimpleFn, Context, DiagnosticErrorInfo, EventStream, ImageContent, ImagesApi, ImagesContext, ImagesFunction, ImagesInputContent, ImagesModel, ImagesOptions, ImagesOutputContent, ImagesProvider, ImagesStopReason, KnownApi, KnownImagesApi, KnownImagesProvider, LlmRuntime, MaybePromise, Message, Model, ModelThinkingLevel, OpenAICompletionsCompat, OpenAIResponsesCompat, OpenAIStrictToolSettingOptions, OpenRouterRouting, Provider, ProviderImagesOptions, ProviderResponse, ProviderStreamOptions, RegisteredApiProvider, SimpleStreamOptions, StopReason, StreamFn, StreamFunction, StreamOptions, TextContent, TextSignatureV1, ThinkingBudgets, ThinkingContent, ThinkingLevel, ThinkingLevelMap, Tool, ToolCall, ToolResultMessage, Transport, Usage, UserMessage, ValidateToolArgumentsFn, VercelGatewayRouting, appendAssistantMessageDiagnostic, configureAiTransportHost, createApiRegistry, createAssistantMessageDiagnostic, createAssistantMessageEventStream, createLlmRuntime, extractDiagnosticError, formatThrownValue, getAiTransportHost, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveAiTransportHeaderSentinels, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, supportsClaude1MContext, supportsClaudeAdaptiveThinking, supportsClaudeFastMode, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, validateToolArguments, validateToolCall };
26
+ export { AiInlineContentBlock, AiInlineImageBlock, AiInlineTextBlock, AiProviderRequestCapabilities, AiProviderRequestPolicyInput, AiProviderStreamHookContext, AiTransformTransportMessages, AiTransportHost, AiTransportPluginHost, AnthropicMessagesCompat, Api, ApiProvider, ApiRegistry, ApiStreamFunction, ApiStreamSimpleFunction, AssistantImages, AssistantMessage, AssistantMessageDiagnostic, AssistantMessageEvent, AssistantMessageEventStream, AssistantMessageEventStreamContract, AssistantMessageEventStreamLike, CLAUDE_FABLE_5_THINKING_PROFILE, CLAUDE_OPUS_5_THINKING_PROFILE, CLAUDE_SONNET_5_THINKING_PROFILE, CacheRetention, CompleteSimpleFn, Context, DiagnosticErrorInfo, EventStream, ImageContent, ImagesApi, ImagesContext, ImagesFunction, ImagesInputContent, ImagesModel, ImagesOptions, ImagesOutputContent, ImagesProvider, ImagesStopReason, KnownApi, KnownImagesApi, KnownImagesProvider, LlmRuntime, MaybePromise, Message, Model, ModelThinkingLevel, OpenAICompletionsCompat, OpenAIResponsesCompat, OpenAIStrictToolSettingOptions, OpenRouterRouting, PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE, PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, Provider, ProviderImagesOptions, ProviderReplayState, ProviderResponse, ProviderStreamOptions, RegisteredApiProvider, SimpleStreamOptions, StopReason, StreamFn, StreamFunction, StreamOptions, TextContent, TextSignatureV1, ThinkingBudgets, ThinkingContent, ThinkingLevel, ThinkingLevelMap, Tool, ToolCall, ToolResultMessage, Transport, Usage, UserMessage, ValidateToolArgumentsFn, VercelGatewayRouting, appendAssistantMessageDiagnostic, configureAiTransportHost, createApiRegistry, createAssistantMessageDiagnostic, createAssistantMessageEventStream, createLlmRuntime, extractDiagnosticError, formatThrownValue, getAiTransportHost, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveAiTransportHeaderSentinels, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, supportsClaude1MContext, supportsClaudeAdaptiveThinking, supportsClaudeFastMode, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, validateToolArguments, validateToolCall };
package/dist/index.mjs CHANGED
@@ -1,7 +1,9 @@
1
- import { a as requiresClaudeMandatoryAdaptiveThinking, c as resolveClaudeMythos5ModelIdentity, d as resolveClaudeSonnet5ModelIdentity, f as supportsClaude1MContext, g as supportsClaudeNativeXhighEffort, h as supportsClaudeNativeMaxEffort, i as requiresClaudeDefaultSampling, l as resolveClaudeNativeThinkingLevelMap, m as supportsClaudeFastMode, n as CLAUDE_OPUS_5_THINKING_PROFILE, o as resolveClaudeFable5ModelIdentity, p as supportsClaudeAdaptiveThinking, r as CLAUDE_SONNET_5_THINKING_PROFILE, s as resolveClaudeModelIdentity, t as CLAUDE_FABLE_5_THINKING_PROFILE, u as resolveClaudeOpus5ModelIdentity } from "./src-QkygScBs.mjs";
1
+ import { a as requiresClaudeMandatoryAdaptiveThinking, c as resolveClaudeMythos5ModelIdentity, d as resolveClaudeSonnet5ModelIdentity, f as supportsClaude1MContext, g as supportsClaudeNativeXhighEffort, h as supportsClaudeNativeMaxEffort, i as requiresClaudeDefaultSampling, l as resolveClaudeNativeThinkingLevelMap, m as supportsClaudeFastMode, n as CLAUDE_OPUS_5_THINKING_PROFILE, o as resolveClaudeFable5ModelIdentity, p as supportsClaudeAdaptiveThinking, r as CLAUDE_SONNET_5_THINKING_PROFILE, s as resolveClaudeModelIdentity, t as CLAUDE_FABLE_5_THINKING_PROFILE, u as resolveClaudeOpus5ModelIdentity } from "./anthropic-JsNA5KCu.mjs";
2
+ import { n as PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, t as PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE } from "./types-BDdaOVi2.mjs";
2
3
  import { i as formatThrownValue, n as createAssistantMessageDiagnostic, r as extractDiagnosticError, t as appendAssistantMessageDiagnostic } from "./diagnostics-COpOtRwq.mjs";
3
- import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-CEV9t6da.mjs";
4
- import { n as validateToolCall, t as validateToolArguments } from "./validation-DAa_yFOM.mjs";
4
+ import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-uSMZJ3FA.mjs";
5
+ import { n as validateToolCall, t as validateToolArguments } from "./validation-B61OhAio.mjs";
6
+ import "./src-D2H6yKkH.mjs";
5
7
  import { n as createApiRegistry, t as createLlmRuntime } from "./stream-CREqxHgU.mjs";
6
- import { n as getAiTransportHost, r as resolveAiTransportHeaderSentinels, t as configureAiTransportHost } from "./host-Bl7Kgddo.mjs";
7
- export { AssistantMessageEventStream, CLAUDE_FABLE_5_THINKING_PROFILE, CLAUDE_OPUS_5_THINKING_PROFILE, CLAUDE_SONNET_5_THINKING_PROFILE, EventStream, appendAssistantMessageDiagnostic, configureAiTransportHost, createApiRegistry, createAssistantMessageDiagnostic, createAssistantMessageEventStream, createLlmRuntime, extractDiagnosticError, formatThrownValue, getAiTransportHost, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveAiTransportHeaderSentinels, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, supportsClaude1MContext, supportsClaudeAdaptiveThinking, supportsClaudeFastMode, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, validateToolArguments, validateToolCall };
8
+ import { n as getAiTransportHost, r as resolveAiTransportHeaderSentinels, t as configureAiTransportHost } from "./host-DTqNc7ad.mjs";
9
+ export { AssistantMessageEventStream, CLAUDE_FABLE_5_THINKING_PROFILE, CLAUDE_OPUS_5_THINKING_PROFILE, CLAUDE_SONNET_5_THINKING_PROFILE, EventStream, PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE, PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, appendAssistantMessageDiagnostic, configureAiTransportHost, createApiRegistry, createAssistantMessageDiagnostic, createAssistantMessageEventStream, createLlmRuntime, extractDiagnosticError, formatThrownValue, getAiTransportHost, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveAiTransportHeaderSentinels, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, supportsClaude1MContext, supportsClaudeAdaptiveThinking, supportsClaudeFastMode, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, validateToolArguments, validateToolCall };
@@ -1,11 +1,19 @@
1
1
  import { a as requiresClaudeMandatoryAdaptiveThinking, c as resolveClaudeMythos5ModelIdentity, d as resolveClaudeSonnet5ModelIdentity, g as supportsClaudeNativeXhighEffort, h as supportsClaudeNativeMaxEffort, i as requiresClaudeDefaultSampling, l as resolveClaudeNativeThinkingLevelMap, o as resolveClaudeFable5ModelIdentity, p as supportsClaudeAdaptiveThinking, s as resolveClaudeModelIdentity, u as resolveClaudeOpus5ModelIdentity } from "../anthropic-SrGtwsJu.mjs";
2
2
  import { t as AssistantMessageDiagnostic } from "../diagnostics-BaTA9eVl.mjs";
3
- import { E as Model, F as SimpleStreamOptions, I as StopReason, R as StreamFunction, X as Usage, u as Context } from "../types-CH7ReIcU.mjs";
4
- import { n as AnthropicOptions, r as AnthropicThinkingDisplay, t as AnthropicEffort } from "../provider-options-C5kYML7i.mjs";
3
+ import { $ as Usage, E as Model, R as SimpleStreamOptions, V as StreamFunction, u as Context, z as StopReason } from "../types-BHNrPS1l.mjs";
4
+ import { n as AnthropicOptions, r as AnthropicThinkingDisplay, t as AnthropicEffort } from "../provider-options-B96RdNpH.mjs";
5
+ import { o as resolveAnthropicServerCompactionPlan } from "../anthropic-payload-policy-CiEuQS72.mjs";
6
+
5
7
  //#region packages/ai/src/providers/anthropic.d.ts
6
- declare const streamAnthropic: StreamFunction<"anthropic-messages", AnthropicOptions>;
8
+ type AnthropicCompactionOptions = AnthropicOptions & {
9
+ anthropicServerCompaction?: boolean;
10
+ authProfileId?: string;
11
+ };
12
+ declare const streamAnthropic: StreamFunction<"anthropic-messages", AnthropicCompactionOptions>;
7
13
  type AnthropicSimpleStreamOptions = SimpleStreamOptions & {
8
- toolChoice?: AnthropicOptions["toolChoice"];
14
+ anthropicServerCompaction?: boolean;
15
+ authProfileId?: string;
16
+ toolChoice?: AnthropicCompactionOptions["toolChoice"];
9
17
  };
10
18
  declare const streamSimpleAnthropic: StreamFunction<"anthropic-messages", AnthropicSimpleStreamOptions>;
11
19
  //#endregion
@@ -207,4 +215,4 @@ declare function applyAnthropicMessageStartUsage(target: Usage, payload: Anthrop
207
215
  /** Keep cumulative billing separate from the final server-side iteration context. */
208
216
  declare function applyAnthropicMessageDeltaUsage(target: Usage, payload: AnthropicUsagePayload | undefined, messageStartPromptUsage: AnthropicPromptUsageSnapshot | undefined): void;
209
217
  //#endregion
210
- export { ANTHROPIC_CLAUDE_CODE_BILLING_SYSTEM_BLOCK, ANTHROPIC_CLAUDE_CODE_VERSION, ANTHROPIC_OMITTED_REASONING_TEXT, ANTHROPIC_SERVER_SIDE_FALLBACKS, ANTHROPIC_SERVER_SIDE_FALLBACK_BETA, AnthropicCacheWriteUsage, type AnthropicEffort, AnthropicFallbackBoundary, AnthropicIterationUsageResult, AnthropicIterationUsageSnapshot, type AnthropicOptions, AnthropicProjectedToolChoice, AnthropicPromptUsageSnapshot, type AnthropicThinkingDisplay, AnthropicToolProjection, CLAUDE_OPUS_FALLBACK_MODEL_COST, applyAnthropicFallbackBoundary, applyAnthropicMessageDeltaUsage, applyAnthropicMessageStartUsage, applyAnthropicRefusal, applyClaudeRequestContract, defaultsClaudeAdaptiveThinking, findActiveAnthropicToolTurnAssistantIndex, mapAnthropicStopReason, normalizeAnthropicToolCallId, normalizeAnthropicToolChoice, omitFoundryBearerCredentialHeaders, prepareClaudeNoPrefillRequestContext, projectAnthropicTools, readAnthropicCacheWriteUsage, readAnthropicFallbackBoundary, readAnthropicPromptUsageSnapshot, readAnthropicUsageTokenCount, readLastAnthropicIterationUsage, reconcileAnthropicToolChoice, requiresClaudeAdaptiveThinking, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveAnthropicFallbackServingModelCost, resolveAnthropicThinkingEffort, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, resolveModelBoundThinkingReplayMode, resolveOriginalAnthropicToolName, streamAnthropic, streamSimpleAnthropic, supportsClaudeAdaptiveThinking, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, toClaudeCodeToolName, usesClaudeFable5MessagesContract, usesClaudeStreamingRefusalContract, usesFoundryBearerAuth };
218
+ export { ANTHROPIC_CLAUDE_CODE_BILLING_SYSTEM_BLOCK, ANTHROPIC_CLAUDE_CODE_VERSION, ANTHROPIC_OMITTED_REASONING_TEXT, ANTHROPIC_SERVER_SIDE_FALLBACKS, ANTHROPIC_SERVER_SIDE_FALLBACK_BETA, AnthropicCacheWriteUsage, type AnthropicEffort, AnthropicFallbackBoundary, AnthropicIterationUsageResult, AnthropicIterationUsageSnapshot, type AnthropicOptions, AnthropicProjectedToolChoice, AnthropicPromptUsageSnapshot, type AnthropicThinkingDisplay, AnthropicToolProjection, CLAUDE_OPUS_FALLBACK_MODEL_COST, applyAnthropicFallbackBoundary, applyAnthropicMessageDeltaUsage, applyAnthropicMessageStartUsage, applyAnthropicRefusal, applyClaudeRequestContract, defaultsClaudeAdaptiveThinking, findActiveAnthropicToolTurnAssistantIndex, mapAnthropicStopReason, normalizeAnthropicToolCallId, normalizeAnthropicToolChoice, omitFoundryBearerCredentialHeaders, prepareClaudeNoPrefillRequestContext, projectAnthropicTools, readAnthropicCacheWriteUsage, readAnthropicFallbackBoundary, readAnthropicPromptUsageSnapshot, readAnthropicUsageTokenCount, readLastAnthropicIterationUsage, reconcileAnthropicToolChoice, requiresClaudeAdaptiveThinking, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveAnthropicFallbackServingModelCost, resolveAnthropicServerCompactionPlan, resolveAnthropicThinkingEffort, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, resolveModelBoundThinkingReplayMode, resolveOriginalAnthropicToolName, streamAnthropic, streamSimpleAnthropic, supportsClaudeAdaptiveThinking, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, toClaudeCodeToolName, usesClaudeFable5MessagesContract, usesClaudeStreamingRefusalContract, usesFoundryBearerAuth };
@@ -1,5 +1,5 @@
1
- import { a as requiresClaudeMandatoryAdaptiveThinking, c as resolveClaudeMythos5ModelIdentity, d as resolveClaudeSonnet5ModelIdentity, g as supportsClaudeNativeXhighEffort, h as supportsClaudeNativeMaxEffort, i as requiresClaudeDefaultSampling, l as resolveClaudeNativeThinkingLevelMap, o as resolveClaudeFable5ModelIdentity, p as supportsClaudeAdaptiveThinking, s as resolveClaudeModelIdentity, u as resolveClaudeOpus5ModelIdentity } from "../src-QkygScBs.mjs";
2
- import { a as ANTHROPIC_CLAUDE_CODE_BILLING_SYSTEM_BLOCK, c as defaultsClaudeAdaptiveThinking, d as requiresClaudeAdaptiveThinking, f as resolveAnthropicThinkingEffort, h as usesClaudeStreamingRefusalContract, l as mapAnthropicStopReason, m as usesClaudeFable5MessagesContract, o as ANTHROPIC_CLAUDE_CODE_VERSION, p as resolveModelBoundThinkingReplayMode, s as applyClaudeRequestContract, u as prepareClaudeNoPrefillRequestContext } from "../host-Bl7Kgddo.mjs";
3
- import { C as usesFoundryBearerAuth, S as omitFoundryBearerCredentialHeaders, _ as CLAUDE_OPUS_FALLBACK_MODEL_COST, a as readAnthropicUsageTokenCount, b as resolveAnthropicFallbackServingModelCost, c as normalizeAnthropicToolChoice, d as resolveOriginalAnthropicToolName, f as toClaudeCodeToolName, g as ANTHROPIC_SERVER_SIDE_FALLBACK_BETA, h as ANTHROPIC_SERVER_SIDE_FALLBACKS, i as readAnthropicPromptUsageSnapshot, l as projectAnthropicTools, m as findActiveAnthropicToolTurnAssistantIndex, n as applyAnthropicMessageStartUsage, o as readLastAnthropicIterationUsage, p as ANTHROPIC_OMITTED_REASONING_TEXT, r as readAnthropicCacheWriteUsage, s as normalizeAnthropicToolCallId, t as applyAnthropicMessageDeltaUsage, u as reconcileAnthropicToolChoice, v as applyAnthropicFallbackBoundary, x as applyAnthropicRefusal, y as readAnthropicFallbackBoundary } from "../anthropic-usage-Ma4iX6uG.mjs";
4
- import { n as streamAnthropic, r as streamSimpleAnthropic } from "../anthropic-CE-7SkF6.mjs";
5
- export { ANTHROPIC_CLAUDE_CODE_BILLING_SYSTEM_BLOCK, ANTHROPIC_CLAUDE_CODE_VERSION, ANTHROPIC_OMITTED_REASONING_TEXT, ANTHROPIC_SERVER_SIDE_FALLBACKS, ANTHROPIC_SERVER_SIDE_FALLBACK_BETA, CLAUDE_OPUS_FALLBACK_MODEL_COST, applyAnthropicFallbackBoundary, applyAnthropicMessageDeltaUsage, applyAnthropicMessageStartUsage, applyAnthropicRefusal, applyClaudeRequestContract, defaultsClaudeAdaptiveThinking, findActiveAnthropicToolTurnAssistantIndex, mapAnthropicStopReason, normalizeAnthropicToolCallId, normalizeAnthropicToolChoice, omitFoundryBearerCredentialHeaders, prepareClaudeNoPrefillRequestContext, projectAnthropicTools, readAnthropicCacheWriteUsage, readAnthropicFallbackBoundary, readAnthropicPromptUsageSnapshot, readAnthropicUsageTokenCount, readLastAnthropicIterationUsage, reconcileAnthropicToolChoice, requiresClaudeAdaptiveThinking, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveAnthropicFallbackServingModelCost, resolveAnthropicThinkingEffort, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, resolveModelBoundThinkingReplayMode, resolveOriginalAnthropicToolName, streamAnthropic, streamSimpleAnthropic, supportsClaudeAdaptiveThinking, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, toClaudeCodeToolName, usesClaudeFable5MessagesContract, usesClaudeStreamingRefusalContract, usesFoundryBearerAuth };
1
+ import { a as requiresClaudeMandatoryAdaptiveThinking, c as resolveClaudeMythos5ModelIdentity, d as resolveClaudeSonnet5ModelIdentity, g as supportsClaudeNativeXhighEffort, h as supportsClaudeNativeMaxEffort, i as requiresClaudeDefaultSampling, l as resolveClaudeNativeThinkingLevelMap, o as resolveClaudeFable5ModelIdentity, p as supportsClaudeAdaptiveThinking, s as resolveClaudeModelIdentity, u as resolveClaudeOpus5ModelIdentity } from "../anthropic-JsNA5KCu.mjs";
2
+ import { _ as resolveAnthropicThinkingEffort, b as usesClaudeStreamingRefusalContract, d as ANTHROPIC_CLAUDE_CODE_VERSION, f as applyClaudeRequestContract, g as requiresClaudeAdaptiveThinking, h as prepareClaudeNoPrefillRequestContext, m as mapAnthropicStopReason, p as defaultsClaudeAdaptiveThinking, u as ANTHROPIC_CLAUDE_CODE_BILLING_SYSTEM_BLOCK, v as resolveModelBoundThinkingReplayMode, y as usesClaudeFable5MessagesContract } from "../host-DTqNc7ad.mjs";
3
+ import { C as readAnthropicFallbackBoundary, D as usesFoundryBearerAuth, E as omitFoundryBearerCredentialHeaders, I as resolveAnthropicServerCompactionPlan, S as applyAnthropicFallbackBoundary, T as applyAnthropicRefusal, _ as ANTHROPIC_OMITTED_REASONING_TEXT, a as applyAnthropicMessageDeltaUsage, b as ANTHROPIC_SERVER_SIDE_FALLBACK_BETA, c as readAnthropicPromptUsageSnapshot, d as normalizeAnthropicToolCallId, f as normalizeAnthropicToolChoice, g as toClaudeCodeToolName, h as resolveOriginalAnthropicToolName, l as readAnthropicUsageTokenCount, m as reconcileAnthropicToolChoice, o as applyAnthropicMessageStartUsage, p as projectAnthropicTools, s as readAnthropicCacheWriteUsage, u as readLastAnthropicIterationUsage, v as findActiveAnthropicToolTurnAssistantIndex, w as resolveAnthropicFallbackServingModelCost, x as CLAUDE_OPUS_FALLBACK_MODEL_COST, y as ANTHROPIC_SERVER_SIDE_FALLBACKS } from "../anthropic-compaction-replay-8lJNKXOE.mjs";
4
+ import { n as streamAnthropic, r as streamSimpleAnthropic } from "../anthropic-B6dLpq5L.mjs";
5
+ export { ANTHROPIC_CLAUDE_CODE_BILLING_SYSTEM_BLOCK, ANTHROPIC_CLAUDE_CODE_VERSION, ANTHROPIC_OMITTED_REASONING_TEXT, ANTHROPIC_SERVER_SIDE_FALLBACKS, ANTHROPIC_SERVER_SIDE_FALLBACK_BETA, CLAUDE_OPUS_FALLBACK_MODEL_COST, applyAnthropicFallbackBoundary, applyAnthropicMessageDeltaUsage, applyAnthropicMessageStartUsage, applyAnthropicRefusal, applyClaudeRequestContract, defaultsClaudeAdaptiveThinking, findActiveAnthropicToolTurnAssistantIndex, mapAnthropicStopReason, normalizeAnthropicToolCallId, normalizeAnthropicToolChoice, omitFoundryBearerCredentialHeaders, prepareClaudeNoPrefillRequestContext, projectAnthropicTools, readAnthropicCacheWriteUsage, readAnthropicFallbackBoundary, readAnthropicPromptUsageSnapshot, readAnthropicUsageTokenCount, readLastAnthropicIterationUsage, reconcileAnthropicToolChoice, requiresClaudeAdaptiveThinking, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveAnthropicFallbackServingModelCost, resolveAnthropicServerCompactionPlan, resolveAnthropicThinkingEffort, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, resolveModelBoundThinkingReplayMode, resolveOriginalAnthropicToolName, streamAnthropic, streamSimpleAnthropic, supportsClaudeAdaptiveThinking, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, toClaudeCodeToolName, usesClaudeFable5MessagesContract, usesClaudeStreamingRefusalContract, usesFoundryBearerAuth };
@@ -0,0 +1,3 @@
1
+ import { t as OPENAI_RESPONSES_APIS } from "../openai-responses-contracts-XpZJxrRG.mjs";
2
+ import { i as resolveOpenAIResponsesServerCompactionPlan } from "../openai-responses-payload-policy-BSs371VM.mjs";
3
+ export { OPENAI_RESPONSES_APIS, resolveOpenAIResponsesServerCompactionPlan };
@@ -0,0 +1,3 @@
1
+ import { i as OPENAI_RESPONSES_APIS } from "../openai-responses-contracts-CyfIkQi5.mjs";
2
+ import { i as resolveOpenAIResponsesServerCompactionPlan } from "../openai-responses-payload-policy-BDxV-W0c.mjs";
3
+ export { OPENAI_RESPONSES_APIS, resolveOpenAIResponsesServerCompactionPlan };