@openclaw/ai 2026.7.1 → 2026.7.2-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 (47) hide show
  1. package/dist/{anthropic-B5gZQM5X.mjs → anthropic-BIRSg5x9.mjs} +23 -101
  2. package/dist/{api-registry-BXYnCOIR.d.mts → api-registry-Byvoz8Ha.d.mts} +1 -1
  3. package/dist/{azure-openai-responses-DNoSk8Uy.mjs → azure-openai-responses-CHi7Wo4A.mjs} +6 -6
  4. package/dist/{azure-openai-responses-client-compat-a_O_GVQV.mjs → azure-openai-responses-client-compat-C7K7QfUE.mjs} +23 -2
  5. package/dist/{env-api-keys-CtMlqaQ4.mjs → env-api-keys-DnhYpc27.mjs} +4 -3
  6. package/dist/{event-stream-ReMmOTzX.mjs → event-stream-D8n2uFee.mjs} +14 -6
  7. package/dist/{event-stream-0nZeBKl2.d.mts → event-stream-uQspnL8S.d.mts} +1 -1
  8. package/dist/event-stream.d.mts +1 -1
  9. package/dist/event-stream.mjs +1 -1
  10. package/dist/{google-D6sIQ1bL.mjs → google-BmsqsNwR.mjs} +4 -4
  11. package/dist/{google-shared-ZPSl2qTi.mjs → google-shared-Dx2aba47.mjs} +30 -21
  12. package/dist/{google-vertex-rDGwkoZK.mjs → google-vertex-HZ_0rTwS.mjs} +5 -18
  13. package/dist/index.d.mts +4 -4
  14. package/dist/index.mjs +3 -3
  15. package/dist/internal/anthropic.d.mts +1 -1
  16. package/dist/internal/anthropic.mjs +3 -3
  17. package/dist/internal/openai.d.mts +38 -3
  18. package/dist/internal/openai.mjs +7 -7
  19. package/dist/internal/retry-after.d.mts +5 -0
  20. package/dist/internal/retry-after.mjs +101 -0
  21. package/dist/internal/runtime.d.mts +2 -2
  22. package/dist/internal/runtime.mjs +6 -5
  23. package/dist/internal/shared.d.mts +12 -2
  24. package/dist/internal/shared.mjs +2 -2
  25. package/dist/{json-parse-DzNSIQBq.mjs → json-parse-BvXNt1-7.mjs} +4 -6
  26. package/dist/{mistral-CePVNdws.mjs → mistral-DxMPt9q9.mjs} +116 -33
  27. package/dist/{model-utils-DgmOla96.mjs → model-utils-Q1LSRIdo.mjs} +5 -12
  28. package/dist/{openai-chatgpt-responses-DVC4Bk_A.mjs → openai-chatgpt-responses-BuH2NvsR.mjs} +40 -96
  29. package/dist/{openai-completions-B9QLIq2U.mjs → openai-completions-DPR_O2RW.mjs} +28 -28
  30. package/dist/{openai-responses-B6LylGxM.mjs → openai-responses-Cov-Vdc2.mjs} +6 -6
  31. package/dist/{openai-responses-shared-sj2YUPYc.mjs → openai-responses-shared-Befb4D6R.mjs} +240 -51
  32. package/dist/{openai-tool-projection-BknoV11q.mjs → openai-tool-projection-CFqm42J2.mjs} +8 -3
  33. package/dist/providers.d.mts +1 -1
  34. package/dist/providers.mjs +9 -9
  35. package/dist/{reasoning-tag-text-partitioner-axhAdUwg.mjs → reasoning-tag-text-partitioner-BlVe67g6.mjs} +14 -8
  36. package/dist/{src-CZ503MYJ.mjs → src-CXno1H5g.mjs} +1 -1
  37. package/dist/{tool-schema-json-projection-BXtBc_mD.mjs → tool-schema-json-projection-BwNu3nDi.mjs} +22 -2
  38. package/dist/{transform-messages-BhGF_fF4.mjs → transform-messages-BmS70CP5.mjs} +12 -3
  39. package/dist/{types-DRgdPqaZ.d.mts → types-Cx2zJtyz.d.mts} +5 -0
  40. package/dist/types.d.mts +3 -3
  41. package/dist/types.mjs +3 -3
  42. package/dist/{validation-BDMWOr8d.d.mts → validation-Cej7htKc.d.mts} +1 -1
  43. package/dist/{validation-FrchoOlv.mjs → validation-DAa_yFOM.mjs} +2 -7
  44. package/dist/validation.d.mts +1 -1
  45. package/dist/validation.mjs +1 -1
  46. package/npm-shrinkwrap.json +2 -2
  47. package/package.json +1 -1
@@ -1,10 +1,11 @@
1
+ import { types } from "node:util";
1
2
  //#region packages/ai/src/providers/tool-schema-json-projection.ts
2
3
  function isJsonValue(value) {
3
4
  if (value === null) return true;
4
5
  switch (typeof value) {
5
6
  case "boolean":
6
- case "number":
7
7
  case "string": return true;
8
+ case "number": return Number.isFinite(value);
8
9
  case "object":
9
10
  if (Array.isArray(value)) return value.every(isJsonValue);
10
11
  return Object.values(value).every(isJsonValue);
@@ -14,10 +15,25 @@ function isJsonValue(value) {
14
15
  function isJsonObject(value) {
15
16
  return value !== null && typeof value === "object" && !Array.isArray(value);
16
17
  }
18
+ function isNonFiniteNumberValue(value) {
19
+ if (typeof value === "number") return !Number.isFinite(value);
20
+ if (value === null || typeof value !== "object" || !types.isNumberObject(value)) return false;
21
+ return !Number.isFinite(Number.prototype.valueOf.call(value));
22
+ }
17
23
  function serializeToolInputSchema(value, path) {
24
+ const nonFiniteNumber = { path: null };
25
+ const paths = /* @__PURE__ */ new WeakMap();
26
+ let isRoot = true;
18
27
  let text;
19
28
  try {
20
- text = JSON.stringify(value);
29
+ text = JSON.stringify(value, function(key, entry) {
30
+ const holderPath = paths.get(this);
31
+ const entryPath = isRoot ? path : holderPath === void 0 ? `${path}.${key}` : Array.isArray(this) ? `${holderPath}[${key}]` : `${holderPath}.${key}`;
32
+ isRoot = false;
33
+ if (nonFiniteNumber.path === null && isNonFiniteNumberValue(entry)) nonFiniteNumber.path = entryPath;
34
+ else if (entry && typeof entry === "object") paths.set(entry, entryPath);
35
+ return entry;
36
+ });
21
37
  } catch {
22
38
  return {
23
39
  schema: {},
@@ -28,6 +44,10 @@ function serializeToolInputSchema(value, path) {
28
44
  schema: {},
29
45
  violations: [`${path} is not JSON-serializable`]
30
46
  };
47
+ if (nonFiniteNumber.path !== null) return {
48
+ schema: {},
49
+ violations: [`${nonFiniteNumber.path} is not JSON-serializable`]
50
+ };
31
51
  const parsed = JSON.parse(text);
32
52
  if (!isJsonValue(parsed)) return {
33
53
  schema: {},
@@ -1,4 +1,4 @@
1
- import { a as resolveClaudeFable5ModelIdentity, i as requiresClaudeMandatoryAdaptiveThinking, l as resolveClaudeSonnet5ModelIdentity, r as requiresClaudeDefaultSampling, s as resolveClaudeMythos5ModelIdentity } from "./src-CZ503MYJ.mjs";
1
+ import { a as resolveClaudeFable5ModelIdentity, i as requiresClaudeMandatoryAdaptiveThinking, l as resolveClaudeSonnet5ModelIdentity, r as requiresClaudeDefaultSampling, s as resolveClaudeMythos5ModelIdentity } from "./src-CXno1H5g.mjs";
2
2
  import { n as getAiTransportHost } from "./host-4t713IeR.mjs";
3
3
  import { t as sanitizeSurrogates } from "./sanitize-unicode-DT5o51ur.mjs";
4
4
  //#region packages/normalization-core/src/string-coerce.ts
@@ -315,11 +315,19 @@ function truncateProviderToolText(text) {
315
315
  if (text.length <= PROVIDER_TOOL_RESULT_MAX_CHARS) return text;
316
316
  return `${truncateUtf16Safe(text, PROVIDER_TOOL_RESULT_MAX_CHARS)}\n…(truncated)…`;
317
317
  }
318
+ /** Media metadata alone is not an attachment; provider emitters need inline bytes. */
319
+ function hasMediaPayload(block) {
320
+ return isRecord(block) && typeof block.data === "string" && block.data.trim().length > 0;
321
+ }
322
+ /** Image metadata alone is not an attachment; provider emitters need inline bytes. */
323
+ function isImageWithMediaPayload(block) {
324
+ return isRecord(block) && block.type === "image" && hasMediaPayload(block);
325
+ }
318
326
  function describeToolResultMediaPlaceholder(blocks) {
319
327
  let hasImage = false;
320
328
  let hasAudio = false;
321
329
  for (const block of blocks) {
322
- if (!block || typeof block !== "object") continue;
330
+ if (!hasMediaPayload(block)) continue;
323
331
  const record = block;
324
332
  const type = typeof record.type === "string" ? record.type : void 0;
325
333
  const mimeType = readMimeType(record);
@@ -362,6 +370,7 @@ function replaceImagesWithPlaceholder(content, placeholder) {
362
370
  let previousWasPlaceholder = false;
363
371
  for (const block of content) {
364
372
  if (block.type === "image") {
373
+ if (!isImageWithMediaPayload(block)) continue;
365
374
  if (!previousWasPlaceholder) result.push({
366
375
  type: "text",
367
376
  text: placeholder
@@ -504,4 +513,4 @@ function transformMessages(messages, model, normalizeToolCallId) {
504
513
  return result;
505
514
  }
506
515
  //#endregion
507
- export { normalizeLowercaseStringOrEmpty as C, normalizeStructuredPromptSection as S, ensureSystemPromptCacheBoundary as _, adjustMaxTokensForThinking as a, stripSystemPromptCacheBoundary as b, isRecord as c, prepareClaudeSonnet5RequestContext as d, requiresClaudeAdaptiveThinking as f, SYSTEM_PROMPT_CACHE_BOUNDARY as g, usesClaudeStreamingRefusalContract as h, extractToolResultText as i, applyClaudeRequestContract as l, usesClaudeFable5MessagesContract as m, describeToolResultMediaPlaceholder as n, buildBaseOptions as o, resolveModelBoundThinkingReplayMode as p, extractToolResultBlockText as r, clampReasoning as s, transformMessages as t, defaultsClaudeAdaptiveThinking as u, prependSystemPromptAdditionAfterCacheBoundary as v, normalizeOptionalString as w, normalizePromptCapabilityIds as x, splitSystemPromptCacheBoundary as y };
516
+ export { stripSystemPromptCacheBoundary as C, normalizeOptionalString as D, normalizeLowercaseStringOrEmpty as E, splitSystemPromptCacheBoundary as S, normalizeStructuredPromptSection as T, usesClaudeFable5MessagesContract as _, hasMediaPayload as a, ensureSystemPromptCacheBoundary as b, adjustMaxTokensForThinking as c, isRecord as d, applyClaudeRequestContract as f, resolveModelBoundThinkingReplayMode as g, requiresClaudeAdaptiveThinking as h, extractToolResultText as i, buildBaseOptions as l, prepareClaudeSonnet5RequestContext as m, describeToolResultMediaPlaceholder as n, isImageWithMediaPayload as o, defaultsClaudeAdaptiveThinking as p, extractToolResultBlockText as r, truncateUtf16Safe as s, transformMessages as t, clampReasoning as u, usesClaudeStreamingRefusalContract as v, normalizePromptCapabilityIds as w, prependSystemPromptAdditionAfterCacheBoundary as x, SYSTEM_PROMPT_CACHE_BOUNDARY as y };
@@ -69,6 +69,11 @@ interface StreamOptions {
69
69
  * session-aware features. Ignored by providers that don't support it.
70
70
  */
71
71
  sessionId?: string;
72
+ /**
73
+ * Opaque per-model-call identifier for provider transport correlation.
74
+ * Providers that do not expose request correlation ignore it.
75
+ */
76
+ requestId?: string;
72
77
  /**
73
78
  * Optional provider prompt-cache affinity key, distinct from transcript/session identity.
74
79
  * Providers that do not support separate cache affinity ignore it.
package/dist/types.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { a as resolveClaudeFable5ModelIdentity, c as resolveClaudeNativeThinkingLevelMap, d as supportsClaudeNativeMaxEffort, f as supportsClaudeNativeXhighEffort, i as requiresClaudeMandatoryAdaptiveThinking, l as resolveClaudeSonnet5ModelIdentity, n as CLAUDE_SONNET_5_THINKING_PROFILE, o as resolveClaudeModelIdentity, r as requiresClaudeDefaultSampling, s as resolveClaudeMythos5ModelIdentity, t as CLAUDE_FABLE_5_THINKING_PROFILE, u as supportsClaudeAdaptiveThinking } from "./index-BoTnz8cv.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-DRgdPqaZ.mjs";
4
- import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-0nZeBKl2.mjs";
5
- import { n as validateToolCall, t as validateToolArguments } from "./validation-BDMWOr8d.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-Cx2zJtyz.mjs";
4
+ import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-uQspnL8S.mjs";
5
+ import { n as validateToolCall, t as validateToolArguments } from "./validation-Cej7htKc.mjs";
6
6
  export { AnthropicMessagesCompat, Api, AssistantImages, AssistantMessage, AssistantMessageDiagnostic, AssistantMessageEvent, AssistantMessageEventStream, AssistantMessageEventStreamContract, AssistantMessageEventStreamLike, CLAUDE_FABLE_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, ProviderImagesOptions, 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, resolveClaudeSonnet5ModelIdentity, supportsClaudeAdaptiveThinking, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, validateToolArguments, validateToolCall };
package/dist/types.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { a as resolveClaudeFable5ModelIdentity, c as resolveClaudeNativeThinkingLevelMap, d as supportsClaudeNativeMaxEffort, f as supportsClaudeNativeXhighEffort, i as requiresClaudeMandatoryAdaptiveThinking, l as resolveClaudeSonnet5ModelIdentity, n as CLAUDE_SONNET_5_THINKING_PROFILE, o as resolveClaudeModelIdentity, r as requiresClaudeDefaultSampling, s as resolveClaudeMythos5ModelIdentity, t as CLAUDE_FABLE_5_THINKING_PROFILE, u as supportsClaudeAdaptiveThinking } from "./src-CZ503MYJ.mjs";
1
+ import { a as resolveClaudeFable5ModelIdentity, c as resolveClaudeNativeThinkingLevelMap, d as supportsClaudeNativeMaxEffort, f as supportsClaudeNativeXhighEffort, i as requiresClaudeMandatoryAdaptiveThinking, l as resolveClaudeSonnet5ModelIdentity, n as CLAUDE_SONNET_5_THINKING_PROFILE, o as resolveClaudeModelIdentity, r as requiresClaudeDefaultSampling, s as resolveClaudeMythos5ModelIdentity, t as CLAUDE_FABLE_5_THINKING_PROFILE, u as supportsClaudeAdaptiveThinking } from "./src-CXno1H5g.mjs";
2
2
  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-ReMmOTzX.mjs";
4
- import { n as validateToolCall, t as validateToolArguments } from "./validation-FrchoOlv.mjs";
3
+ import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-D8n2uFee.mjs";
4
+ import { n as validateToolCall, t as validateToolArguments } from "./validation-DAa_yFOM.mjs";
5
5
  export { AssistantMessageEventStream, CLAUDE_FABLE_5_THINKING_PROFILE, CLAUDE_SONNET_5_THINKING_PROFILE, EventStream, appendAssistantMessageDiagnostic, createAssistantMessageDiagnostic, createAssistantMessageEventStream, extractDiagnosticError, formatThrownValue, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeSonnet5ModelIdentity, supportsClaudeAdaptiveThinking, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, validateToolArguments, validateToolCall };
@@ -1,4 +1,4 @@
1
- import { K as Tool, q as ToolCall } from "./types-DRgdPqaZ.mjs";
1
+ import { K as Tool, q as ToolCall } from "./types-Cx2zJtyz.mjs";
2
2
 
3
3
  //#region packages/llm-core/src/validation.d.ts
4
4
  /** Finds the target tool and validates/coerces a model-emitted tool call. */
@@ -1,8 +1,6 @@
1
1
  import { Compile } from "typebox/compile";
2
- import { Value } from "typebox/value";
3
2
  //#region packages/llm-core/src/validation.ts
4
3
  const validatorCache = /* @__PURE__ */ new WeakMap();
5
- const TYPEBOX_KIND = Symbol.for("TypeBox.Kind");
6
4
  /** Maximum string length accepted for schema-gated JSON coercion. */
7
5
  const MAX_JSON_COERCE_LENGTH = 64 * 1024;
8
6
  function isRecord(value) {
@@ -11,9 +9,6 @@ function isRecord(value) {
11
9
  function isJsonSchemaObject(value) {
12
10
  return isRecord(value);
13
11
  }
14
- function hasTypeBoxMetadata(schema) {
15
- return isRecord(schema) && Object.getOwnPropertySymbols(schema).includes(TYPEBOX_KIND);
16
- }
17
12
  function getSchemaTypes(schema) {
18
13
  if (typeof schema.type === "string") return [schema.type];
19
14
  if (Array.isArray(schema.type)) return schema.type.filter((type) => typeof type === "string");
@@ -182,9 +177,9 @@ function validateToolCall(tools, toolCall) {
182
177
  /** Validates tool arguments against TypeBox or plain JSON-schema parameters. */
183
178
  function validateToolArguments(tool, toolCall) {
184
179
  const args = structuredClone(toolCall.arguments);
185
- Value.Convert(tool.parameters, args);
186
180
  const validator = getValidator(tool.parameters);
187
- if (!hasTypeBoxMetadata(tool.parameters) && isJsonSchemaObject(tool.parameters)) {
181
+ validator.Convert(args);
182
+ if (isJsonSchemaObject(tool.parameters)) {
188
183
  const coerced = coerceWithJsonSchema(args, tool.parameters);
189
184
  if (coerced !== args) if (isRecord(args) && isRecord(coerced)) {
190
185
  for (const key of Object.keys(args)) delete args[key];
@@ -1,2 +1,2 @@
1
- import { n as validateToolCall, t as validateToolArguments } from "./validation-BDMWOr8d.mjs";
1
+ import { n as validateToolCall, t as validateToolArguments } from "./validation-Cej7htKc.mjs";
2
2
  export { validateToolArguments, validateToolCall };
@@ -1,2 +1,2 @@
1
- import { n as validateToolCall, t as validateToolArguments } from "./validation-FrchoOlv.mjs";
1
+ import { n as validateToolCall, t as validateToolArguments } from "./validation-DAa_yFOM.mjs";
2
2
  export { validateToolArguments, validateToolCall };
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@openclaw/ai",
3
- "version": "2026.7.1",
3
+ "version": "2026.7.2-beta.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@openclaw/ai",
9
- "version": "2026.7.1",
9
+ "version": "2026.7.2-beta.2",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@anthropic-ai/sdk": "0.109.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/ai",
3
- "version": "2026.7.1",
3
+ "version": "2026.7.2-beta.2",
4
4
  "description": "Reusable model provider adapters and streaming runtime from OpenClaw",
5
5
  "keywords": [
6
6
  "ai",