@openclaw/ai 2026.9.1-beta.1 → 2026.9.1

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 (81) hide show
  1. package/dist/{anthropic-compaction-replay-nhKaCXu6.mjs → anthropic-compaction-replay-OMJZ0uyo.mjs} +37 -34
  2. package/dist/{anthropic-DI4PZKKB.mjs → anthropic-hk7F7ptG.mjs} +28 -25
  3. package/dist/{anthropic-payload-policy-B_0n0enE.d.mts → anthropic-payload-policy-DBT1itQ-.d.mts} +3 -3
  4. package/dist/{api-registry-CTd8NzcD.d.mts → api-registry-Cs6HGNqY.d.mts} +2 -2
  5. package/dist/{azure-openai-responses-D8dI0ekg.mjs → azure-openai-responses-CN4Fy5zV.mjs} +10 -7
  6. package/dist/{number-coercion-H9qHik3g.mjs → base64-CEFBpSkN.mjs} +73 -1
  7. package/dist/{diagnostics-COpOtRwq.mjs → diagnostics-CPeq9F7y.mjs} +5 -1
  8. package/dist/{diagnostics-BaTA9eVl.d.mts → diagnostics-DnPnOui6.d.mts} +5 -1
  9. package/dist/diagnostics-KhXK-QJI.mjs +136 -0
  10. package/dist/diagnostics.d.mts +8 -3
  11. package/dist/diagnostics.mjs +4 -3
  12. package/dist/{env-api-keys-DrgeBuva.mjs → env-api-keys-bktO00EJ.mjs} +2 -15
  13. package/dist/event-stream-DeDhbCc5.d.mts +1 -0
  14. package/dist/{event-stream-LiXePESD.d.mts → event-stream-vK_7r3bj.d.mts} +1 -1
  15. package/dist/event-stream.d.mts +2 -2
  16. package/dist/{google-Od-LLdVK.mjs → google-CC-nrwXg.mjs} +8 -6
  17. package/dist/{google-shared-Bgr9lFPw.mjs → google-shared-CjPY0hZM.mjs} +25 -23
  18. package/dist/{google-vertex-aerRSXc4.mjs → google-vertex-DCr0pyzQ.mjs} +7 -5
  19. package/dist/{host-D51fmkH6.mjs → host-BIaiBURL.mjs} +2 -2
  20. package/dist/{host-DsbPMFU6.d.mts → host-BztR4tQj.d.mts} +3 -3
  21. package/dist/index-AfaxKT8w.d.mts +111 -0
  22. package/dist/index.d.mts +10 -11
  23. package/dist/index.mjs +5 -5
  24. package/dist/internal/anthropic.d.mts +53 -52
  25. package/dist/internal/anthropic.mjs +5 -5
  26. package/dist/internal/openai-responses-payload-policy.d.mts +3 -3
  27. package/dist/internal/openai-responses-payload-policy.mjs +2 -3
  28. package/dist/internal/openai.d.mts +65 -63
  29. package/dist/internal/openai.mjs +9 -9
  30. package/dist/internal/retry-after.d.mts +2 -3
  31. package/dist/internal/runtime.d.mts +43 -43
  32. package/dist/internal/runtime.mjs +10 -8
  33. package/dist/internal/shared.d.mts +25 -25
  34. package/dist/internal/shared.mjs +95 -4
  35. package/dist/{mistral-EiHdymeb.mjs → mistral-B7etBd_H.mjs} +25 -20
  36. package/dist/{openai-chatgpt-responses-DHpF9o1e.mjs → openai-chatgpt-responses-BAJ4gq3i.mjs} +63 -122
  37. package/dist/{openai-completions-EFPiUGfS.mjs → openai-completions-D0QZ0AyB.mjs} +24 -20
  38. package/dist/{openai-completions-compat-BefmHT26.d.mts → openai-completions-compat-4IjSBpr6.d.mts} +5 -5
  39. package/dist/{openai-completions-stream-DUlGwRMz.mjs → openai-completions-stream-DZjwK8vp.mjs} +97 -90
  40. package/dist/{openai-responses-BogP8OjX.mjs → openai-responses-BEUlxfDu.mjs} +12 -8
  41. package/dist/openai-responses-compaction-window-DO7yV7az.mjs +686 -0
  42. package/dist/{openai-responses-contracts-Dvj_UtPy.d.mts → openai-responses-contracts-bPzSN_Ba.d.mts} +14 -5
  43. package/dist/{openai-responses-payload-policy-CNGFT9zr.d.mts → openai-responses-payload-policy-rLRPsSmB.d.mts} +1 -0
  44. package/dist/{openai-responses-prompt-observer-internal-Cd4hJG-S.mjs → openai-responses-prompt-observer-internal-C7x4IK7r.mjs} +4 -18
  45. package/dist/{openai-responses-shared-DJThc6jW.mjs → openai-responses-shared-DiAdpNAM.mjs} +274 -221
  46. package/dist/{openai-tool-schema-ho-hIkQf.mjs → openai-tool-schema-BMiHFH36.mjs} +14 -12
  47. package/dist/{provider-error-DDOs_Bz0.mjs → provider-error-B6EGq6gg.mjs} +14 -85
  48. package/dist/{provider-options-MdMBLzlU.d.mts → provider-options-CxFPtvh7.d.mts} +11 -3
  49. package/dist/{provider-transcript-transform-C01bQ5a3.mjs → provider-transcript-transform-WvJmFUAf.mjs} +1 -1
  50. package/dist/provider-types.d.mts +19 -20
  51. package/dist/providers.d.mts +5 -5
  52. package/dist/providers.mjs +9 -9
  53. package/dist/{reasoning-tag-text-partitioner-5ygO2rZc.mjs → reasoning-tag-text-partitioner-C-4uedDb.mjs} +93 -77
  54. package/dist/rolldown-runtime-BhDjJH2R.mjs +15 -0
  55. package/dist/{sanitize-unicode-DCkltN94.mjs → sanitize-unicode-S6binQG-.mjs} +2 -8
  56. package/dist/{simple-options-CFj7x3J4.mjs → simple-options-0PLDyJ-d.mjs} +42 -6
  57. package/dist/{src-Bu3FiFAG.mjs → src-C8U7lkoa.mjs} +75 -2
  58. package/dist/{stream-first-event-timeout-MK28puvq.mjs → stream-first-event-timeout-DcNjoFQE.mjs} +1 -1
  59. package/dist/{tool-schema-json-projection-qvTEs5Am.mjs → tool-schema-json-projection-BtZiml7r.mjs} +21 -31
  60. package/dist/{transport-stream-shared-rvaCyFYt.d.mts → transport-stream-shared-BrvFTkoO.d.mts} +5 -5
  61. package/dist/{transport-stream-shared-ljShVIZB.mjs → transport-stream-shared-CytPVLIg.mjs} +18 -5
  62. package/dist/{transport-utils-LJ1_rbi-.mjs → transport-utils-CtuS1Upe.mjs} +5 -8
  63. package/dist/transports.d.mts +120 -85
  64. package/dist/transports.mjs +218 -249
  65. package/dist/types-B5EFUmXs.d.mts +1 -0
  66. package/dist/{types-DhLoJbFm.d.mts → types-DbrhszyQ.d.mts} +27 -13
  67. package/dist/types.d.mts +7 -7
  68. package/dist/types.mjs +4 -4
  69. package/dist/{validation-Dk7q7NMN.d.mts → validation-BOwtcl9X.d.mts} +1 -1
  70. package/dist/{validation-B61OhAio.mjs → validation-CJZtym2g.mjs} +7 -5
  71. package/dist/validation.d.mts +1 -1
  72. package/dist/validation.mjs +1 -1
  73. package/package.json +5 -5
  74. package/dist/anthropic-BECQCNdF.d.mts +0 -98
  75. package/dist/event-stream-BKp4fOt_.d.mts +0 -1
  76. package/dist/index-Qbej8io0.d.mts +0 -3
  77. package/dist/openai-responses-contracts-QUY12X0B.mjs +0 -233
  78. package/dist/openai-responses-payload-policy-D8EdimYe.mjs +0 -204
  79. package/dist/provider-options-AvldWZt8.mjs +0 -21
  80. package/dist/tls-certificate-errors-DXSpluKI.mjs +0 -93
  81. package/dist/types-GiAjXatj.d.mts +0 -1
@@ -0,0 +1 @@
1
+ import "./index-AfaxKT8w.mjs";
@@ -1,4 +1,4 @@
1
- import { t as AssistantMessageDiagnostic } from "./diagnostics-BaTA9eVl.mjs";
1
+ import { t as AssistantMessageDiagnostic } from "./diagnostics-DnPnOui6.mjs";
2
2
  import { TSchema } from "typebox";
3
3
  //#region packages/llm-core/src/types.d.ts
4
4
  /** Provider API families with first-class request/stream adapters in OpenClaw. */
@@ -104,11 +104,6 @@ interface StreamOptions {
104
104
  * For example, OpenAI and Anthropic SDK clients default to 10 minutes.
105
105
  */
106
106
  timeoutMs?: number;
107
- /**
108
- * Maximum retry attempts for providers/SDKs that support client-side retries.
109
- * For example, OpenAI and Anthropic SDK clients default to 2.
110
- */
111
- maxRetries?: number;
112
107
  /**
113
108
  * Maximum delay in milliseconds to wait for a retry when the server requests a long wait.
114
109
  * If the server's requested delay exceeds this value, the request fails immediately
@@ -255,6 +250,24 @@ interface Usage {
255
250
  totalOrigin?: "provider-billed";
256
251
  };
257
252
  }
253
+ /** Per-million-token rates for separately billed token buckets. */
254
+ type ModelCostRates = Pick<Usage["cost"], "input" | "output" | "cacheRead" | "cacheWrite">;
255
+ /** One whole-request tier on the cache-inclusive prompt-token axis. */
256
+ type PricingTier = ModelCostRates & {
257
+ /** Half-open prompt-token interval `[start, end)`. */
258
+ range: [number, number];
259
+ };
260
+ type RawPricingTier = ModelCostRates & {
261
+ /** `[start]` is an open-ended upper tier. */
262
+ range: [number, number] | [number];
263
+ };
264
+ /** Normalized pricing used by token accounting and usage summaries. */
265
+ type ModelCostConfig = ModelCostRates & {
266
+ tieredPricing?: PricingTier[];
267
+ };
268
+ type RawModelCostConfig = ModelCostRates & {
269
+ tieredPricing?: RawPricingTier[];
270
+ };
258
271
  /** Normalized assistant stop reasons across text providers. */
259
272
  type StopReason = "stop" | "length" | "toolUse" | "error" | "aborted";
260
273
  /** Stable error codes for provider outcomes that cannot be replayed safely. */
@@ -289,6 +302,8 @@ interface AssistantMessage {
289
302
  content: (TextContent | ThinkingContent | ToolCall)[];
290
303
  openclawDelivery?: {
291
304
  audioAsVoice?: true;
305
+ /** Exact media directives consumed by the managed-media transcript rewrite owner. */
306
+ mediaUrls?: string[];
292
307
  replyToCurrent?: true;
293
308
  replyToId?: string;
294
309
  /** Provider text phase is unresolved until the assistant turn reaches terminal state. */
@@ -449,6 +464,8 @@ interface OpenAICompletionsCompat {
449
464
  supportsDeveloperRole?: boolean;
450
465
  /** Whether the provider supports `reasoning_effort`. Default: auto-detected from URL. */
451
466
  supportsReasoningEffort?: boolean;
467
+ /** Per-level reasoning effort overrides, e.g. map "off" to "low" for models that cannot disable thinking. */
468
+ reasoningEffortMap?: Record<string, string>;
452
469
  /** Whether the provider supports `stream_options: { include_usage: true }` for token usage in streaming responses. Default: true. */
453
470
  supportsUsageInStreaming?: boolean;
454
471
  /** Which field to use for max tokens. Default: auto-detected from URL. */
@@ -492,6 +509,8 @@ interface OpenAIResponsesCompat {
492
509
  sendSessionIdHeader?: boolean;
493
510
  /** Whether the provider supports `prompt_cache_retention: "24h"`. Default: true. */
494
511
  supportsLongCacheRetention?: boolean;
512
+ /** Whether the provider honors top-level `instructions`. Defaults to true only for verified native routes (OpenAI, xAI); every other route defaults to false and embeds the system prompt in `input` unless set true here after verifying against that endpoint. */
513
+ supportsInstructions?: boolean;
495
514
  }
496
515
  /** Compatibility settings for Anthropic Messages-compatible APIs. */
497
516
  interface AnthropicMessagesCompat {
@@ -616,12 +635,7 @@ interface Model<TApi extends Api = Api> {
616
635
  */
617
636
  thinkingLevelMap?: ThinkingLevelMap;
618
637
  input: ("text" | "image")[];
619
- cost: {
620
- input: number;
621
- output: number;
622
- cacheRead: number;
623
- cacheWrite: number;
624
- };
638
+ cost: RawModelCostConfig;
625
639
  contextWindow?: number;
626
640
  /**
627
641
  * Optional effective runtime cap used for compaction/session budgeting.
@@ -657,4 +671,4 @@ type StreamFn = (model: Model, context: Context, options?: SimpleStreamOptions)
657
671
  type CompleteSimpleFn = (model: Model, context: Pick<Context, "systemPrompt" | "messages">, options?: SimpleStreamOptions) => Promise<AssistantMessage>;
658
672
  type ValidateToolArgumentsFn = (tool: Tool, toolCall: ToolCall) => unknown;
659
673
  //#endregion
660
- export { Transport as $, OpenAIResponsesCompat as A, StopReason as B, KnownImagesApi as C, Model as D, Message as E, ProviderImagesOptions as F, TextSignatureV1 as G, StreamFunction as H, ProviderReplayState as I, ThinkingLevel as J, ThinkingBudgets as K, ProviderResponse as L, PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE as M, PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE as N, ModelThinkingLevel as O, Provider as P, ToolResultMessage as Q, ProviderStreamOptions as R, KnownApi as S, MaybePromise as T, StreamOptions as U, StreamFn as V, TextContent as W, Tool as X, ThinkingLevelMap as Y, ToolCall as Z, ImagesModel as _, AssistantMessage as a, ImagesProvider as b, AssistantMessageEventStreamLike as c, Context as d, Usage as et, ImageContent as f, ImagesInputContent as g, ImagesFunction as h, AssistantImages as i, OpenRouterRouting as j, OpenAICompletionsCompat as k, CacheRetention as l, ImagesContext as m, Api as n, ValidateToolArgumentsFn as nt, AssistantMessageEvent as o, ImagesApi as p, ThinkingContent as q, AssistantDeliveryTtsFacts as r, VercelGatewayRouting as rt, AssistantMessageEventStreamContract as s, AnthropicMessagesCompat as t, UserMessage as tt, CompleteSimpleFn as u, ImagesOptions as v, KnownImagesProvider as w, ImagesStopReason as x, ImagesOutputContent as y, SimpleStreamOptions as z };
674
+ export { ThinkingLevel as $, ModelThinkingLevel as A, ProviderResponse as B, KnownImagesApi as C, Model as D, Message as E, PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE as F, StopReason as G, RawModelCostConfig as H, PricingTier as I, StreamOptions as J, StreamFn as K, Provider as L, OpenAIResponsesCompat as M, OpenRouterRouting as N, ModelCostConfig as O, PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE as P, ThinkingContent as Q, ProviderImagesOptions as R, KnownApi as S, MaybePromise as T, RawPricingTier as U, ProviderStreamOptions as V, SimpleStreamOptions as W, TextSignatureV1 as X, TextContent as Y, ThinkingBudgets as Z, ImagesModel as _, AssistantMessage as a, Usage as at, ImagesProvider as b, AssistantMessageEventStreamLike as c, VercelGatewayRouting as ct, Context as d, ThinkingLevelMap as et, ImageContent as f, ImagesInputContent as g, ImagesFunction as h, AssistantImages as i, Transport as it, OpenAICompletionsCompat as j, ModelCostRates as k, CacheRetention as l, ImagesContext as m, Api as n, ToolCall as nt, AssistantMessageEvent as o, UserMessage as ot, ImagesApi as p, StreamFunction as q, AssistantDeliveryTtsFacts as r, ToolResultMessage as rt, AssistantMessageEventStreamContract as s, ValidateToolArgumentsFn as st, AnthropicMessagesCompat as t, Tool as tt, CompleteSimpleFn as u, ImagesOptions as v, KnownImagesProvider as w, ImagesStopReason as x, ImagesOutputContent as y, ProviderReplayState as z };
package/dist/types.d.mts CHANGED
@@ -1,7 +1,7 @@
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-BECQCNdF.mjs";
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 Transport, A as OpenAIResponsesCompat, B as StopReason, C as KnownImagesApi, D as Model, E as Message, F as ProviderImagesOptions, G as TextSignatureV1, H as StreamFunction, I as ProviderReplayState, J as ThinkingLevel, K as ThinkingBudgets, L as ProviderResponse, M as PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE, N as PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, O as ModelThinkingLevel, P as Provider, Q as ToolResultMessage, R as ProviderStreamOptions, S as KnownApi, T as MaybePromise, U as StreamOptions, V as StreamFn, W as TextContent, X as Tool, Y as ThinkingLevelMap, Z as ToolCall, _ as ImagesModel, a as AssistantMessage, b as ImagesProvider, c as AssistantMessageEventStreamLike, d as Context, et as Usage, f as ImageContent, g as ImagesInputContent, h as ImagesFunction, i as AssistantImages, j as OpenRouterRouting, k as OpenAICompletionsCompat, l as CacheRetention, m as ImagesContext, n as Api, nt as ValidateToolArgumentsFn, o as AssistantMessageEvent, p as ImagesApi, q as ThinkingContent, r as AssistantDeliveryTtsFacts, rt as VercelGatewayRouting, s as AssistantMessageEventStreamContract, t as AnthropicMessagesCompat, tt as UserMessage, u as CompleteSimpleFn, v as ImagesOptions, w as KnownImagesProvider, x as ImagesStopReason, y as ImagesOutputContent, z as SimpleStreamOptions } from "./types-DhLoJbFm.mjs";
4
- import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-LiXePESD.mjs";
5
- import { n as validateToolCall, t as validateToolArguments } from "./validation-Dk7q7NMN.mjs";
6
- import "./types-GiAjXatj.mjs";
7
- export { AnthropicMessagesCompat, Api, AssistantDeliveryTtsFacts, 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, MaybePromise, Message, Model, ModelThinkingLevel, OpenAICompletionsCompat, OpenAIResponsesCompat, OpenRouterRouting, PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE, PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, Provider, ProviderImagesOptions, ProviderReplayState, ProviderResponse, ProviderStreamOptions, SimpleStreamOptions, StopReason, StreamFn, StreamFunction, StreamOptions, TextContent, TextSignatureV1, ThinkingBudgets, ThinkingContent, ThinkingLevel, ThinkingLevelMap, Tool, ToolCall, ToolResultMessage, Transport, Usage, UserMessage, ValidateToolArgumentsFn, VercelGatewayRouting, appendAssistantMessageDiagnostic, createAssistantMessageDiagnostic, createAssistantMessageEventStream, extractDiagnosticError, formatThrownValue, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, supportsClaude1MContext, supportsClaudeAdaptiveThinking, supportsClaudeFastMode, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, validateToolArguments, validateToolCall };
1
+ import { _ as supportsClaudeAdaptiveThinking, a as CLAUDE_FABLE_5_THINKING_PROFILE, b as supportsClaudeNativeXhighEffort, c as requiresClaudeDefaultSampling, d as resolveClaudeModelIdentity, f as resolveClaudeMythos5ModelIdentity, g as supportsClaude1MContext, h as resolveClaudeSonnet5ModelIdentity, i as normalizeResolvedPricing, l as requiresClaudeMandatoryAdaptiveThinking, m as resolveClaudeOpus5ModelIdentity, n as calculateUsageCost, o as CLAUDE_OPUS_5_THINKING_PROFILE, p as resolveClaudeNativeThinkingLevelMap, r as normalizeModelCostConfig, s as CLAUDE_SONNET_5_THINKING_PROFILE, u as resolveClaudeFable5ModelIdentity, v as supportsClaudeFastMode, y as supportsClaudeNativeMaxEffort } from "./index-AfaxKT8w.mjs";
2
+ import { a as extractDiagnosticError, i as createAssistantMessageDiagnostic, n as DiagnosticErrorInfo, o as formatThrownValue, r as appendAssistantMessageDiagnostic, s as isProviderRefusalAssistantError, t as AssistantMessageDiagnostic } from "./diagnostics-DnPnOui6.mjs";
3
+ import { $ as ThinkingLevel, A as ModelThinkingLevel, B as ProviderResponse, C as KnownImagesApi, D as Model, E as Message, F as PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, G as StopReason, H as RawModelCostConfig, I as PricingTier, J as StreamOptions, K as StreamFn, L as Provider, M as OpenAIResponsesCompat, N as OpenRouterRouting, O as ModelCostConfig, P as PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE, Q as ThinkingContent, R as ProviderImagesOptions, S as KnownApi, T as MaybePromise, U as RawPricingTier, V as ProviderStreamOptions, W as SimpleStreamOptions, X as TextSignatureV1, Y as TextContent, Z as ThinkingBudgets, _ as ImagesModel, a as AssistantMessage, at as Usage, b as ImagesProvider, c as AssistantMessageEventStreamLike, ct as VercelGatewayRouting, d as Context, et as ThinkingLevelMap, f as ImageContent, g as ImagesInputContent, h as ImagesFunction, i as AssistantImages, it as Transport, j as OpenAICompletionsCompat, k as ModelCostRates, l as CacheRetention, m as ImagesContext, n as Api, nt as ToolCall, o as AssistantMessageEvent, ot as UserMessage, p as ImagesApi, q as StreamFunction, r as AssistantDeliveryTtsFacts, rt as ToolResultMessage, s as AssistantMessageEventStreamContract, st as ValidateToolArgumentsFn, t as AnthropicMessagesCompat, tt as Tool, u as CompleteSimpleFn, v as ImagesOptions, w as KnownImagesProvider, x as ImagesStopReason, y as ImagesOutputContent, z as ProviderReplayState } from "./types-DbrhszyQ.mjs";
4
+ import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-vK_7r3bj.mjs";
5
+ import { n as validateToolCall, t as validateToolArguments } from "./validation-BOwtcl9X.mjs";
6
+ import "./types-B5EFUmXs.mjs";
7
+ export { AnthropicMessagesCompat, Api, AssistantDeliveryTtsFacts, 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, MaybePromise, Message, Model, ModelCostConfig, ModelCostRates, ModelThinkingLevel, OpenAICompletionsCompat, OpenAIResponsesCompat, OpenRouterRouting, PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE, PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, PricingTier, Provider, ProviderImagesOptions, ProviderReplayState, ProviderResponse, ProviderStreamOptions, RawModelCostConfig, RawPricingTier, SimpleStreamOptions, StopReason, StreamFn, StreamFunction, StreamOptions, TextContent, TextSignatureV1, ThinkingBudgets, ThinkingContent, ThinkingLevel, ThinkingLevelMap, Tool, ToolCall, ToolResultMessage, Transport, Usage, UserMessage, ValidateToolArgumentsFn, VercelGatewayRouting, appendAssistantMessageDiagnostic, calculateUsageCost, createAssistantMessageDiagnostic, createAssistantMessageEventStream, extractDiagnosticError, formatThrownValue, isProviderRefusalAssistantError, normalizeModelCostConfig, normalizeResolvedPricing, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, supportsClaude1MContext, supportsClaudeAdaptiveThinking, supportsClaudeFastMode, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, validateToolArguments, validateToolCall };
package/dist/types.mjs CHANGED
@@ -1,6 +1,6 @@
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-Bu3FiFAG.mjs";
1
+ import { _ as supportsClaudeFastMode, a as CLAUDE_OPUS_5_THINKING_PROFILE, c as requiresClaudeMandatoryAdaptiveThinking, d as resolveClaudeMythos5ModelIdentity, f as resolveClaudeNativeThinkingLevelMap, g as supportsClaudeAdaptiveThinking, h as supportsClaude1MContext, i as CLAUDE_FABLE_5_THINKING_PROFILE, l as resolveClaudeFable5ModelIdentity, m as resolveClaudeSonnet5ModelIdentity, n as normalizeModelCostConfig, o as CLAUDE_SONNET_5_THINKING_PROFILE, p as resolveClaudeOpus5ModelIdentity, r as normalizeResolvedPricing, s as requiresClaudeDefaultSampling, t as calculateUsageCost, u as resolveClaudeModelIdentity, v as supportsClaudeNativeMaxEffort, y as supportsClaudeNativeXhighEffort } from "./src-C8U7lkoa.mjs";
2
2
  import { n as PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, t as PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE } from "./types-BDdaOVi2.mjs";
3
- import { i as formatThrownValue, n as createAssistantMessageDiagnostic, r as extractDiagnosticError, t as appendAssistantMessageDiagnostic } from "./diagnostics-COpOtRwq.mjs";
3
+ import { a as isProviderRefusalAssistantError, i as formatThrownValue, n as createAssistantMessageDiagnostic, r as extractDiagnosticError, t as appendAssistantMessageDiagnostic } from "./diagnostics-CPeq9F7y.mjs";
4
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
- 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, createAssistantMessageDiagnostic, createAssistantMessageEventStream, extractDiagnosticError, formatThrownValue, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, supportsClaude1MContext, supportsClaudeAdaptiveThinking, supportsClaudeFastMode, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, validateToolArguments, validateToolCall };
5
+ import { n as validateToolCall, t as validateToolArguments } from "./validation-CJZtym2g.mjs";
6
+ 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, calculateUsageCost, createAssistantMessageDiagnostic, createAssistantMessageEventStream, extractDiagnosticError, formatThrownValue, isProviderRefusalAssistantError, normalizeModelCostConfig, normalizeResolvedPricing, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, supportsClaude1MContext, supportsClaudeAdaptiveThinking, supportsClaudeFastMode, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, validateToolArguments, validateToolCall };
@@ -1,4 +1,4 @@
1
- import { X as Tool, Z as ToolCall } from "./types-DhLoJbFm.mjs";
1
+ import { nt as ToolCall, tt as Tool } from "./types-DbrhszyQ.mjs";
2
2
  //#region packages/llm-core/src/validation.d.ts
3
3
  /** Finds the target tool and validates/coerces a model-emitted tool call. */
4
4
  declare function validateToolCall(tools: Tool[], toolCall: ToolCall): unknown;
@@ -2,7 +2,7 @@ import { Compile } from "typebox/compile";
2
2
  //#region packages/llm-core/src/validation.ts
3
3
  const validatorCache = /* @__PURE__ */ new WeakMap();
4
4
  /** Maximum string length accepted for schema-gated JSON coercion. */
5
- const MAX_JSON_COERCE_LENGTH = 64 * 1024;
5
+ const MAX_JSON_COERCE_LENGTH = 65536;
6
6
  function isObjectBackedRecord(value) {
7
7
  return typeof value === "object" && value !== null;
8
8
  }
@@ -181,10 +181,12 @@ function validateToolArguments(tool, toolCall) {
181
181
  validator.Convert(args);
182
182
  if (isJsonSchemaObject(tool.parameters)) {
183
183
  const coerced = coerceWithJsonSchema(args, tool.parameters);
184
- if (coerced !== args) if (isObjectBackedRecord(args) && isObjectBackedRecord(coerced)) {
185
- for (const key of Object.keys(args)) delete args[key];
186
- Object.assign(args, coerced);
187
- } else return validator.Check(coerced) ? coerced : args;
184
+ if (coerced !== args) {
185
+ if (isObjectBackedRecord(args) && isObjectBackedRecord(coerced)) {
186
+ for (const key of Object.keys(args)) delete args[key];
187
+ Object.assign(args, coerced);
188
+ } else return validator.Check(coerced) ? coerced : args;
189
+ }
188
190
  }
189
191
  if (validator.Check(args)) return args;
190
192
  const errors = validator.Errors(args).map((error) => ` - ${formatValidationPath(error)}: ${error.message}`).join("\n") || "Unknown validation error";
@@ -1,2 +1,2 @@
1
- import { n as validateToolCall, t as validateToolArguments } from "./validation-Dk7q7NMN.mjs";
1
+ import { n as validateToolCall, t as validateToolArguments } from "./validation-BOwtcl9X.mjs";
2
2
  export { validateToolArguments, validateToolCall };
@@ -1,2 +1,2 @@
1
- import { n as validateToolCall, t as validateToolArguments } from "./validation-B61OhAio.mjs";
1
+ import { n as validateToolCall, t as validateToolArguments } from "./validation-CJZtym2g.mjs";
2
2
  export { validateToolArguments, validateToolCall };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/ai",
3
- "version": "2026.9.1-beta.1",
3
+ "version": "2026.9.1",
4
4
  "description": "Reusable model provider adapters and streaming runtime from OpenClaw",
5
5
  "keywords": [
6
6
  "ai",
@@ -103,12 +103,12 @@
103
103
  }
104
104
  },
105
105
  "dependencies": {
106
- "@anthropic-ai/sdk": "0.118.0",
107
- "@google/genai": "2.17.1",
108
- "@mistralai/mistralai": "2.5.0",
106
+ "@anthropic-ai/sdk": "0.120.0",
107
+ "@google/genai": "2.18.0",
108
+ "@mistralai/mistralai": "2.6.4",
109
109
  "openai": "7.5.0",
110
110
  "partial-json": "0.1.7",
111
- "typebox": "1.3.16"
111
+ "typebox": "1.3.17"
112
112
  },
113
113
  "devDependencies": {
114
114
  "@openclaw/model-catalog-core": "0.0.0-private",
@@ -1,98 +0,0 @@
1
- //#region packages/llm-core/src/model-contracts/anthropic.d.ts
2
- type ClaudeModelRef = {
3
- id?: string;
4
- params?: Record<string, unknown>;
5
- };
6
- type ClaudeEffortModelRef = ClaudeModelRef & {
7
- thinkingLevelMap?: Record<string, string | null | undefined>;
8
- };
9
- declare const CLAUDE_FABLE_5_THINKING_PROFILE: {
10
- readonly levels: readonly [{
11
- readonly id: "minimal";
12
- }, {
13
- readonly id: "low";
14
- }, {
15
- readonly id: "medium";
16
- }, {
17
- readonly id: "high";
18
- }, {
19
- readonly id: "xhigh";
20
- }, {
21
- readonly id: "adaptive";
22
- }, {
23
- readonly id: "max";
24
- }];
25
- readonly defaultLevel: "high";
26
- readonly preserveWhenCatalogReasoningFalse: true;
27
- };
28
- declare const CLAUDE_SONNET_5_THINKING_PROFILE: {
29
- readonly levels: readonly [{
30
- readonly id: "off";
31
- }, {
32
- readonly id: "minimal";
33
- }, {
34
- readonly id: "low";
35
- }, {
36
- readonly id: "medium";
37
- }, {
38
- readonly id: "high";
39
- }, {
40
- readonly id: "xhigh";
41
- }, {
42
- readonly id: "adaptive";
43
- }, {
44
- readonly id: "max";
45
- }];
46
- readonly defaultLevel: "high";
47
- };
48
- declare const CLAUDE_OPUS_5_THINKING_PROFILE: {
49
- readonly levels: readonly [{
50
- readonly id: "off";
51
- }, {
52
- readonly id: "minimal";
53
- }, {
54
- readonly id: "low";
55
- }, {
56
- readonly id: "medium";
57
- }, {
58
- readonly id: "high";
59
- }, {
60
- readonly id: "xhigh";
61
- }, {
62
- readonly id: "adaptive";
63
- }, {
64
- readonly id: "max";
65
- }];
66
- readonly defaultLevel: "high";
67
- };
68
- /** Resolve the canonical normalized Claude model id for one runtime model ref. */
69
- declare function resolveClaudeModelIdentity(ref: ClaudeModelRef): string;
70
- /** Resolve Claude Fable 5 through direct ids, cloud ids, or deployment metadata. */
71
- declare function resolveClaudeFable5ModelIdentity(ref: ClaudeModelRef): string | undefined;
72
- /** Resolve Claude Mythos 5 through direct ids, cloud ids, or deployment metadata. */
73
- declare function resolveClaudeMythos5ModelIdentity(ref: ClaudeModelRef): string | undefined;
74
- /** Return whether a Claude model requires adaptive thinking instead of manual budgets. */
75
- declare function requiresClaudeMandatoryAdaptiveThinking(ref: ClaudeModelRef): boolean;
76
- /** Resolve Claude Sonnet 5 through direct ids, cloud ids, or deployment metadata. */
77
- declare function resolveClaudeSonnet5ModelIdentity(ref: ClaudeModelRef): string | undefined;
78
- /** Resolve Claude Opus 5 through aliases, direct ids, cloud ids, or deployment metadata. */
79
- declare function resolveClaudeOpus5ModelIdentity(ref: ClaudeModelRef): string | undefined;
80
- /** Return whether a Claude model supports adaptive thinking. */
81
- declare function supportsClaudeAdaptiveThinking(ref: ClaudeModelRef): boolean;
82
- /** Return whether a Claude model has a native 1M-token context window. */
83
- declare function supportsClaude1MContext(ref: ClaudeModelRef): boolean;
84
- /** Return whether a Claude model supports Anthropic's native fast mode. */
85
- declare function supportsClaudeFastMode(ref: ClaudeModelRef): boolean;
86
- /** Return whether a Claude model supports native max effort. */
87
- declare function supportsClaudeNativeMaxEffort(ref: ClaudeModelRef): boolean;
88
- /** Return whether a Claude model supports native xhigh effort. */
89
- declare function supportsClaudeNativeXhighEffort(ref: ClaudeModelRef): boolean;
90
- /** Return whether a Claude model rejects caller-selected sampling parameters. */
91
- declare function requiresClaudeDefaultSampling(ref: ClaudeModelRef): boolean;
92
- /**
93
- * Fill native Claude effort mappings only when the provider did not publish a
94
- * narrower route-specific contract.
95
- */
96
- declare function resolveClaudeNativeThinkingLevelMap(ref: ClaudeEffortModelRef): Record<string, string | null | undefined> | undefined;
97
- //#endregion
98
- export { requiresClaudeMandatoryAdaptiveThinking as a, resolveClaudeMythos5ModelIdentity as c, resolveClaudeSonnet5ModelIdentity as d, supportsClaude1MContext as f, supportsClaudeNativeXhighEffort as g, supportsClaudeNativeMaxEffort as h, requiresClaudeDefaultSampling as i, resolveClaudeNativeThinkingLevelMap as l, supportsClaudeFastMode as m, CLAUDE_OPUS_5_THINKING_PROFILE as n, resolveClaudeFable5ModelIdentity as o, supportsClaudeAdaptiveThinking as p, CLAUDE_SONNET_5_THINKING_PROFILE as r, resolveClaudeModelIdentity as s, CLAUDE_FABLE_5_THINKING_PROFILE as t, resolveClaudeOpus5ModelIdentity as u };
@@ -1 +0,0 @@
1
- import "./event-stream-LiXePESD.mjs";
@@ -1,3 +0,0 @@
1
- import "./types-DhLoJbFm.mjs";
2
- import "./event-stream-LiXePESD.mjs";
3
- import "./validation-Dk7q7NMN.mjs";
@@ -1,233 +0,0 @@
1
- import "./src-Bu3FiFAG.mjs";
2
- import { n as PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE } from "./types-BDdaOVi2.mjs";
3
- import { c as normalizeLowercaseStringOrEmpty, o as isRecord } from "./utf16-slice-qz3nsy87.mjs";
4
- import { n as uniqueStrings, t as normalizeStringEntries } from "./string-normalization--fwJ4S2q.mjs";
5
- //#region packages/ai/src/providers/openai-reasoning-effort.ts
6
- /**
7
- * OpenAI-compatible reasoning-effort normalization. Different GPT families
8
- * expose different accepted effort enums, so callers map requested values here
9
- * before constructing provider payloads.
10
- */
11
- const GPT_5_REASONING_EFFORTS = [
12
- "minimal",
13
- "low",
14
- "medium",
15
- "high"
16
- ];
17
- const GPT_51_REASONING_EFFORTS = [
18
- "none",
19
- "low",
20
- "medium",
21
- "high"
22
- ];
23
- const GPT_52_REASONING_EFFORTS = [
24
- "none",
25
- "low",
26
- "medium",
27
- "high",
28
- "xhigh"
29
- ];
30
- const GPT_56_REASONING_EFFORTS = [
31
- "none",
32
- "low",
33
- "medium",
34
- "high",
35
- "xhigh",
36
- "max"
37
- ];
38
- const GPT_CODEX_REASONING_EFFORTS = [
39
- "low",
40
- "medium",
41
- "high",
42
- "xhigh"
43
- ];
44
- const GPT_PRO_REASONING_EFFORTS = [
45
- "medium",
46
- "high",
47
- "xhigh"
48
- ];
49
- const GPT_5_PRO_REASONING_EFFORTS = ["high"];
50
- const GPT_51_CODEX_MAX_REASONING_EFFORTS = [
51
- "none",
52
- "medium",
53
- "high",
54
- "xhigh"
55
- ];
56
- const GPT_51_CODEX_MINI_REASONING_EFFORTS = ["medium"];
57
- const GENERIC_REASONING_EFFORTS = [
58
- "low",
59
- "medium",
60
- "high"
61
- ];
62
- const CANONICAL_REASONING_EFFORTS = /* @__PURE__ */ new Set([
63
- "none",
64
- "minimal",
65
- "low",
66
- "medium",
67
- "high",
68
- "xhigh",
69
- "max",
70
- "off"
71
- ]);
72
- function normalizeModelId(id) {
73
- return normalizeLowercaseStringOrEmpty(id ?? "").replace(/-\d{4}-\d{2}-\d{2}$/u, "");
74
- }
75
- /** Return whether a model is the GPT-5.4 mini family. */
76
- function isOpenAIGpt54MiniModel(model) {
77
- const id = normalizeModelId(typeof model.id === "string" ? model.id : void 0);
78
- return /^gpt-5\.4-mini(?:-|$)/u.test(id);
79
- }
80
- /** Return whether a model is the GPT-5.5 family. */
81
- function isOpenAIGpt55Model(model) {
82
- const id = normalizeModelId(typeof model.id === "string" ? model.id : void 0);
83
- const name = normalizeModelId(typeof model.name === "string" ? model.name : void 0);
84
- return /^gpt-5\.5(?:-|$)/u.test(id) || /^gpt-5\.5(?:\s|\(|-|$)/u.test(name);
85
- }
86
- /** Return whether a model is the GPT-5.6 family. */
87
- function isOpenAIGpt56Model(model) {
88
- const id = normalizeModelId(typeof model.id === "string" ? model.id : void 0);
89
- const name = normalizeModelId(typeof model.name === "string" ? model.name : void 0);
90
- return /^gpt-5\.6(?:-|$)/u.test(id) || /^gpt-5\.6(?:\s|\(|-|$)/u.test(name);
91
- }
92
- /** Normalize user-facing reasoning effort names to API effort names. */
93
- function normalizeOpenAIReasoningEffort(effort) {
94
- const trimmed = effort.trim();
95
- const folded = trimmed.toLowerCase();
96
- return CANONICAL_REASONING_EFFORTS.has(folded) ? folded : trimmed;
97
- }
98
- function readCompatReasoningEfforts(compat) {
99
- if (!compat || typeof compat !== "object") return;
100
- if (compat.supportsReasoningEffort === false) return [];
101
- const raw = compat.supportedReasoningEfforts;
102
- if (!Array.isArray(raw)) return;
103
- const supported = uniqueStrings(normalizeStringEntries(raw.filter((value) => typeof value === "string")));
104
- return supported.length > 0 ? supported : void 0;
105
- }
106
- function isDisabledReasoningEffort(effort) {
107
- return effort === "none" || effort === "off";
108
- }
109
- /** Resolve the reasoning efforts accepted by a specific OpenAI-compatible model. */
110
- function resolveOpenAISupportedReasoningEfforts(model) {
111
- const compatEfforts = readCompatReasoningEfforts(model.compat);
112
- if (compatEfforts) return compatEfforts;
113
- const id = normalizeModelId(typeof model.id === "string" ? model.id : void 0);
114
- if (/^gpt-5\.6(?:-|$)/u.test(id)) return GPT_56_REASONING_EFFORTS;
115
- if (id === "gpt-5.1-codex-mini") return GPT_51_CODEX_MINI_REASONING_EFFORTS;
116
- if (id === "gpt-5.1-codex-max") return GPT_51_CODEX_MAX_REASONING_EFFORTS;
117
- if (/^gpt-5(?:\.\d+)?-codex(?:-|$)/u.test(id)) return GPT_CODEX_REASONING_EFFORTS;
118
- if (id === "gpt-5-pro") return GPT_5_PRO_REASONING_EFFORTS;
119
- if (/^gpt-5\.[2-9](?:\.\d+)?-pro(?:-|$)/u.test(id)) return GPT_PRO_REASONING_EFFORTS;
120
- if (/^gpt-5\.[2-9](?:\.\d+)?(?:-|$)/u.test(id)) return GPT_52_REASONING_EFFORTS;
121
- if (/^gpt-5\.1(?:-|$)/u.test(id)) return GPT_51_REASONING_EFFORTS;
122
- if (/^gpt-5(?:-|$)/u.test(id)) return GPT_5_REASONING_EFFORTS;
123
- return GENERIC_REASONING_EFFORTS;
124
- }
125
- /**
126
- * Return whether a model accepts the temperature parameter. The GPT-5.6
127
- * family rejects it with a 400; catalog compat can override per model.
128
- */
129
- function supportsOpenAITemperature(model) {
130
- const compat = model.compat;
131
- if (compat && typeof compat === "object") {
132
- const declared = compat.supportsTemperature;
133
- if (typeof declared === "boolean") return declared;
134
- }
135
- const id = normalizeModelId(typeof model.id === "string" ? model.id : void 0);
136
- return !/^gpt-5\.6(?:-|$)/u.test(id);
137
- }
138
- /** Return whether a model accepts a requested reasoning effort. */
139
- function supportsOpenAIReasoningEffort(model, effort) {
140
- return resolveOpenAISupportedReasoningEfforts(model).includes(normalizeOpenAIReasoningEffort(effort));
141
- }
142
- /** Resolve a requested reasoning effort to the closest value supported by the model. */
143
- function resolveOpenAIReasoningEffortForModel(params) {
144
- const requested = normalizeOpenAIReasoningEffort(params.effort);
145
- const mapped = params.fallbackMap?.[requested] ?? (params.fallbackMap && CANONICAL_REASONING_EFFORTS.has(requested) ? Object.entries(params.fallbackMap).find(([effort]) => normalizeOpenAIReasoningEffort(effort) === requested)?.[1] : void 0);
146
- const normalized = mapped === void 0 ? requested : mapped.trim();
147
- const supported = resolveOpenAISupportedReasoningEfforts(params.model);
148
- if (supported.includes(normalized)) return normalized;
149
- if (requested === "off" && supported.includes("none")) return "none";
150
- if (isDisabledReasoningEffort(requested) || isDisabledReasoningEffort(normalized)) return;
151
- if (requested === "minimal" && supported.includes("low")) return "low";
152
- if ((requested === "minimal" || requested === "low") && supported.includes("medium")) return "medium";
153
- if (requested === "xhigh" && supported.includes("high")) return "high";
154
- if (requested === "max" && supported.includes("xhigh")) return "xhigh";
155
- return supported.find((effort) => !isDisabledReasoningEffort(normalizeOpenAIReasoningEffort(effort)));
156
- }
157
- //#endregion
158
- //#region packages/ai/src/transports/openai-responses-contracts.ts
159
- const DEFAULT_AZURE_OPENAI_API_VERSION = "preview";
160
- const OPENAI_CODEX_RESPONSES_DEFAULT_INSTRUCTIONS = "Follow the user request.";
161
- const AZURE_RESPONSES_FIRST_EVENT_TIMEOUT_MS = 3e4;
162
- const RESPONSE_FAILED_NO_DETAILS_MESSAGE = "Unknown error (no error details in response)";
163
- const OPENAI_RESPONSES_REASONING_REPLAY_META_KEY = "__openclaw_replay";
164
- const OPENAI_RESPONSES_REASONING_REPLAY_BLOCK_META_KEY = "openclawReasoningReplay";
165
- const OPENAI_RESPONSES_COMPACTION_REPLAY_TYPE = "openai-responses-compaction";
166
- const OPENAI_RESPONSES_RETAINED_COMPACTION_REPLAY_TYPE = "openai-responses-retained-compaction";
167
- const OPENAI_RESPONSES_APIS = /* @__PURE__ */ new Set([
168
- "openai-responses",
169
- "azure-openai-responses",
170
- "openai-chatgpt-responses",
171
- "openclaw-openai-responses-transport",
172
- "openclaw-openai-chatgpt-responses-transport",
173
- "openclaw-azure-openai-responses-transport"
174
- ]);
175
- var OpenAIResponsesWebSocketPreDispatchError = class extends Error {
176
- constructor(cause) {
177
- super("OpenAI Responses WebSocket failed before request dispatch", { cause });
178
- this.name = "OpenAIResponsesWebSocketPreDispatchError";
179
- }
180
- };
181
- var OpenAIResponsesWebSocketPostDispatchError = class extends Error {
182
- constructor(cause) {
183
- super("OpenAI Responses WebSocket failed after request dispatch; outcome is unknown", { cause });
184
- this.code = PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE;
185
- this.name = "OpenAIResponsesWebSocketPostDispatchError";
186
- }
187
- };
188
- var OpenAIResponsesWebSocketServerError = class extends Error {
189
- constructor(code, status, param, message, cause) {
190
- super(message, { cause });
191
- this.code = code;
192
- this.status = status;
193
- this.param = param;
194
- this.name = "OpenAIResponsesWebSocketServerError";
195
- }
196
- };
197
- var OpenAIResponsesWebSocketSafeRetryError = class extends OpenAIResponsesWebSocketServerError {};
198
- function readWebSocketServerError(value) {
199
- if (!isRecord(value) || value.type !== "error") return;
200
- const details = isRecord(value.error) ? value.error : value;
201
- if (typeof details.code !== "string" || typeof details.message !== "string") return;
202
- const rawStatus = value.status ?? value.status_code;
203
- return {
204
- code: details.code,
205
- message: details.message,
206
- param: typeof details.param === "string" ? details.param : null,
207
- status: typeof rawStatus === "number" ? rawStatus : void 0
208
- };
209
- }
210
- function parseOpenAIResponsesWebSocketServerError(cause) {
211
- if (!isRecord(cause)) return;
212
- let details = readWebSocketServerError(cause.error) ?? readWebSocketServerError(cause);
213
- if (!details && typeof cause.message === "string") try {
214
- details = readWebSocketServerError(JSON.parse(cause.message));
215
- } catch {}
216
- if (!details) return;
217
- return new (details.code === "previous_response_not_found" || details.code === "websocket_connection_limit_reached" || details.code === "invalid_encrypted_content" || details.code === "thinking_signature_invalid" ? OpenAIResponsesWebSocketSafeRetryError : OpenAIResponsesWebSocketServerError)(details.code, details.status, details.param, details.message, cause);
218
- }
219
- const PROMPT_OBSERVER = Symbol("openaiResponsesPromptObserver");
220
- const responsesPromptObserver = {
221
- set(options, observer) {
222
- Reflect.set(options, PROMPT_OBSERVER, observer);
223
- },
224
- get(options) {
225
- return Reflect.get(options, PROMPT_OBSERVER);
226
- },
227
- copy(source, target) {
228
- const observer = source && responsesPromptObserver.get(source);
229
- if (observer) responsesPromptObserver.set(target, observer);
230
- }
231
- };
232
- //#endregion
233
- export { supportsOpenAITemperature as S, isOpenAIGpt56Model as _, OPENAI_RESPONSES_COMPACTION_REPLAY_TYPE as a, resolveOpenAISupportedReasoningEfforts as b, OPENAI_RESPONSES_RETAINED_COMPACTION_REPLAY_TYPE as c, OpenAIResponsesWebSocketSafeRetryError as d, RESPONSE_FAILED_NO_DETAILS_MESSAGE as f, isOpenAIGpt55Model as g, isOpenAIGpt54MiniModel as h, OPENAI_RESPONSES_APIS as i, OpenAIResponsesWebSocketPostDispatchError as l, responsesPromptObserver as m, DEFAULT_AZURE_OPENAI_API_VERSION as n, OPENAI_RESPONSES_REASONING_REPLAY_BLOCK_META_KEY as o, parseOpenAIResponsesWebSocketServerError as p, OPENAI_CODEX_RESPONSES_DEFAULT_INSTRUCTIONS as r, OPENAI_RESPONSES_REASONING_REPLAY_META_KEY as s, AZURE_RESPONSES_FIRST_EVENT_TIMEOUT_MS as t, OpenAIResponsesWebSocketPreDispatchError as u, normalizeOpenAIReasoningEffort as v, supportsOpenAIReasoningEffort as x, resolveOpenAIReasoningEffortForModel as y };