@openclaw/ai 2026.10.2 → 2026.10.3

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.
@@ -3,12 +3,12 @@ import { n as clampOpenAIPromptCacheKey, r as resolveOpenAIPromptCacheParams, t
3
3
  import { g as resolveResponsesTerminalStopReason, h as readResponsesReasoningTokens, m as mapResponsesTerminalUsage, p as isResponsesOutputLimitToolCallError } from "../diagnostics-Caj-4RBA.mjs";
4
4
  import { a as encodedModelRequestBodyStream, c as serializeModelRequestBody, l as codeModeToolSurfaceObserver, o as modelRequestBodyState, u as reasoningTagTextPolicy } from "../simple-options-7QuSKriJ.mjs";
5
5
  import { f as projectOpenAITools, m as reconcileOpenAIResponsesToolChoice, p as reconcileOpenAICompletionsToolChoice } from "../openai-transport-params-D7JMUPjf.mjs";
6
- import { i as convertMessages } from "../openai-completions-transport-CuoQfnKV.mjs";
6
+ import { i as convertMessages } from "../openai-completions-transport-D_ZhLzh_.mjs";
7
7
  import { t as mapOpenAIStopReason } from "../openai-stop-reason-8s70vDXj.mjs";
8
8
  import { M as bindResponsesInputMessage, _ as isResponsesTextContentPartType, d as AZURE_RESPONSES_TEXT_CONTENT_PART_TYPE, f as AZURE_RESPONSES_TEXT_DELTA_EVENT_TYPE, g as isAzureResponsesTextDeltaEventType, h as isAzureResponsesTextDeltaEvent, l as createResponsesToolCallTracker, m as OPENAI_RESPONSES_OUTPUT_TEXT_DELTA_EVENT_TYPE, p as OPENAI_RESPONSES_OUTPUT_TEXT_CONTENT_PART_TYPE, u as readResponsesToolCallItemIdentity, v as isResponsesTextDeltaEventType, y as resolveResponsesMessageSnapshotCollapse } from "../openai-responses-shared-CKNmC3vC.mjs";
9
9
  import { i as resolveAzureDeploymentNameFromMap, n as isTraditionalAzureOpenAIHost, r as parseAzureDeploymentNameMap, t as isOpenAICompatibleAzureResponsesBaseUrl } from "../azure-openai-responses-client-compat-D0dvJMbZ.mjs";
10
10
  import { t as hasResponsesWebSearchTool } from "../openai-web-search-tools-Cfu0uLyN.mjs";
11
11
  import { t as responsesRequestLifecycle } from "../openai-responses-request-lifecycle-Fsag-IGZ.mjs";
12
- import { n as streamOpenAICompletions, r as streamSimpleOpenAICompletions } from "../openai-completions-BZfHIaZ7.mjs";
12
+ import { n as streamOpenAICompletions, r as streamSimpleOpenAICompletions } from "../openai-completions-BxQw4S-A.mjs";
13
13
  import { n as streamOpenAIResponses, r as streamSimpleOpenAIResponses } from "../openai-responses-BhAZFsL9.mjs";
14
14
  export { AZURE_RESPONSES_TEXT_CONTENT_PART_TYPE, AZURE_RESPONSES_TEXT_DELTA_EVENT_TYPE, OPENAI_PROMPT_CACHE_KEY_MAX_LENGTH, OPENAI_RESPONSES_OUTPUT_TEXT_CONTENT_PART_TYPE, OPENAI_RESPONSES_OUTPUT_TEXT_DELTA_EVENT_TYPE, bindResponsesInputMessage, clampOpenAIPromptCacheKey, codeModeToolSurfaceObserver, convertMessages, createResponsesToolCallTracker, encodedModelRequestBodyStream, hasResponsesWebSearchTool, isAzureResponsesTextDeltaEvent, isAzureResponsesTextDeltaEventType, isOpenAICompatibleAzureResponsesBaseUrl, isOpenAIGpt54MiniModel, isOpenAIGpt55Model, isOpenAIGpt56Model, isOpenAIGpt6Model, isResponsesOutputLimitToolCallError, isResponsesTextContentPartType, isResponsesTextDeltaEventType, isTraditionalAzureOpenAIHost, mapOpenAIStopReason, mapResponsesTerminalUsage, modelRequestBodyState, normalizeOpenAIReasoningEffort, parseAzureDeploymentNameMap, projectOpenAITools, readResponsesReasoningTokens, readResponsesToolCallItemIdentity, reasoningTagTextPolicy, reconcileOpenAICompletionsToolChoice, reconcileOpenAIResponsesToolChoice, resolveAzureDeploymentNameFromMap, resolveOpenAIModelReasoningEfforts, resolveOpenAIPromptCacheParams, resolveOpenAIReasoningEffortForModel, resolveOpenAIReasoningEffortMapping, resolveOpenAISupportedReasoningEfforts, resolveResponsesMessageSnapshotCollapse, resolveResponsesTerminalStopReason, responsesPromptObserver, responsesRequestLifecycle, responsesServiceTierObserver, serializeModelRequestBody, streamOpenAICompletions, streamOpenAIResponses, streamSimpleOpenAICompletions, streamSimpleOpenAIResponses, supportsOpenAIReasoningEffort, supportsOpenAITemperature };
@@ -294,7 +294,8 @@ const os = loadNodeOs();
294
294
  const REQUEST_COMPRESSION_ZSTD_LEVEL = 3;
295
295
  const CODEX_TOOL_CALL_PROVIDERS = /* @__PURE__ */ new Set(["openai", "opencode"]);
296
296
  const WEBSOCKET_TRANSPORT_ERROR_CODE = "ERR_WEBSOCKET_TRANSPORT";
297
- const RETRYABLE_WEBSOCKET_CLOSE_CODES = /* @__PURE__ */ new Set([
297
+ const RETRYABLE_CLOSE_CODES = /* @__PURE__ */ new Set([
298
+ 1e3,
298
299
  1001,
299
300
  1005,
300
301
  1006,
@@ -832,7 +833,7 @@ function extractWebSocketCloseError(event) {
832
833
  let reasonText = typeof reason === "string" && reason.length > 0 ? ` ${reason}` : "";
833
834
  if (!reasonText && code === WEBSOCKET_MESSAGE_TOO_BIG_CLOSE_CODE) reasonText = " message too big";
834
835
  const message = `WebSocket closed${codeText}${reasonText}`;
835
- const error = typeof code === "number" && RETRYABLE_WEBSOCKET_CLOSE_CODES.has(code) ? createWebSocketTransportError(message) : Object.assign(new Error(message), { code: WEBSOCKET_NON_RETRYABLE_CLOSE_ERROR_CODE });
836
+ const error = typeof code === "number" && RETRYABLE_CLOSE_CODES.has(code) ? createWebSocketTransportError(message) : Object.assign(new Error(message), { code: WEBSOCKET_NON_RETRYABLE_CLOSE_ERROR_CODE });
836
837
  return Object.assign(error, {
837
838
  name: "WebSocketCloseError",
838
839
  closeCode: typeof code === "number" ? code : void 0,
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-BhDjJH2R.mjs";
2
2
  import { k as clampThinkingLevel } from "./host-u3o8XiAp.mjs";
3
3
  import { n as buildBaseOptions } from "./simple-options-7QuSKriJ.mjs";
4
- import { i as convertMessages, n as streamOpenAICompletionsRequest } from "./openai-completions-transport-CuoQfnKV.mjs";
4
+ import { i as convertMessages, n as streamOpenAICompletionsRequest } from "./openai-completions-transport-D_ZhLzh_.mjs";
5
5
  import { t as requireApiKey } from "./required-api-key-D4kn3252.mjs";
6
6
  //#region packages/ai/src/providers/openai-completions.ts
7
7
  var openai_completions_exports = /* @__PURE__ */ __exportAll({
@@ -35,7 +35,13 @@ const DEEPSEEK_DSML_MARKERS = [
35
35
  "|",
36
36
  "|",
37
37
  "||"
38
- ].map((bar) => `${bar}DSML${bar}`);
38
+ ].flatMap((bar) => [`${bar}DSML${bar}`, `${bar}DSML${bar} `]);
39
+ const DEEPSEEK_DSML_TOOL_OPEN_TOKENS = DEEPSEEK_DSML_MARKERS.flatMap((marker) => [
40
+ "calls",
41
+ "tool_calls",
42
+ "tool_call",
43
+ "function_calls"
44
+ ].map((kind) => `<${marker}${kind}>`));
39
45
  const DEEPSEEK_DSML_MARKER_PATTERN = `(${DEEPSEEK_DSML_MARKERS.map((marker) => marker.replaceAll("|", "\\|")).join("|")})`;
40
46
  function findEarliestDsmlToken(text, tokens, fromIndex = 0) {
41
47
  let best = null;
@@ -63,13 +69,7 @@ function longestDsmlTokenPrefixSuffixLength(text, tokens, maxTokenLength) {
63
69
  * Removes provider-emitted DSML tool markup while buffering split tag prefixes
64
70
  * across streamed chunks.
65
71
  */
66
- const DSML_KINDS = [
67
- "tool_use_error",
68
- "tool_calls",
69
- "tool_call",
70
- "function_calls"
71
- ];
72
- const DSML_OPEN_TOKENS = DEEPSEEK_DSML_MARKERS.flatMap((marker) => DSML_KINDS.map((kind) => `<${marker}${kind}>`));
72
+ const DSML_OPEN_TOKENS = [...DEEPSEEK_DSML_TOOL_OPEN_TOKENS, ...DEEPSEEK_DSML_MARKERS.map((marker) => `<${marker}tool_use_error>`)];
73
73
  const MAX_OPEN_TOKEN_LEN = Math.max(...DSML_OPEN_TOKENS.map((token) => token.length));
74
74
  /** Create an incremental text filter that strips DeepSeek DSML tool blocks. */
75
75
  function createDeepSeekTextFilter() {
@@ -1126,12 +1126,6 @@ function buildOpenAICompletionsRequest(model, context, options, policy) {
1126
1126
  }
1127
1127
  //#endregion
1128
1128
  //#region packages/ai/src/transports/openai-completions-dsml.ts
1129
- const DEEPSEEK_DSML_TOOL_KINDS = [
1130
- "tool_calls",
1131
- "tool_call",
1132
- "function_calls"
1133
- ];
1134
- const DEEPSEEK_DSML_TOOL_OPEN_TOKENS = DEEPSEEK_DSML_MARKERS.flatMap((marker) => DEEPSEEK_DSML_TOOL_KINDS.map((kind) => `<${marker}${kind}>`));
1135
1129
  const DEEPSEEK_DSML_INVOKE_OPEN_PREFIXES = DEEPSEEK_DSML_MARKERS.map((marker) => `<${marker}invoke`);
1136
1130
  const DEEPSEEK_DSML_INVOKE_OPEN_TAG = new RegExp(`^<${DEEPSEEK_DSML_MARKER_PATTERN}invoke\\b[^<>]*>$`);
1137
1131
  const DEEPSEEK_DSML_TOOL_MAX_OPEN_TOKEN_LEN = Math.max(...DEEPSEEK_DSML_TOOL_OPEN_TOKENS.map((token) => token.length));
@@ -1489,9 +1483,9 @@ async function processCompletionsStream(responseStream, output, model, stream, o
1489
1483
  const emitReasoning = options?.emitReasoning ?? true;
1490
1484
  const compat = getCompat(model);
1491
1485
  const visibleReasoningDetailTypes = new Set(compat.visibleReasoningDetailTypes);
1492
- const shouldFilterDeepSeekDsmlText = !directMode && compat.thinkingFormat === "deepseek";
1486
+ const shouldFilterDeepSeekDsmlText = compat.thinkingFormat === "deepseek";
1493
1487
  const deepSeekTextFilter = shouldFilterDeepSeekDsmlText ? createDeepSeekTextFilter() : null;
1494
- const deepSeekToolCallRecoverer = shouldFilterDeepSeekDsmlText ? createDsmlRecoverer() : null;
1488
+ const deepSeekToolCallRecoverer = !directMode && shouldFilterDeepSeekDsmlText ? createDsmlRecoverer() : null;
1495
1489
  const gemmaToolCallRecoverer = !directMode && /gemma-?4/i.test(model.id) ? createGemmaToolCallRecoverer() : null;
1496
1490
  const reasoningTagTextPartitioner = createReasoningTagTextPartitioner();
1497
1491
  if (options?.strictReasoningTags) reasoningTagTextPartitioner.markStrict();
@@ -54,7 +54,7 @@ const registerBuiltIns = [
54
54
  stream: module.streamAnthropic,
55
55
  streamSimple: module.streamSimpleAnthropic
56
56
  })),
57
- createLazyRegistration("openai-completions", () => import("./openai-completions-BZfHIaZ7.mjs").then((n) => n.t), (module) => ({
57
+ createLazyRegistration("openai-completions", () => import("./openai-completions-BxQw4S-A.mjs").then((n) => n.t), (module) => ({
58
58
  stream: module.streamOpenAICompletions,
59
59
  streamSimple: module.streamSimpleOpenAICompletions
60
60
  })),
@@ -70,7 +70,7 @@ const registerBuiltIns = [
70
70
  stream: module.streamAzureOpenAIResponses,
71
71
  streamSimple: module.streamSimpleAzureOpenAIResponses
72
72
  })),
73
- createLazyRegistration("openai-chatgpt-responses", () => import("./openai-chatgpt-responses-CHdn8YJ_.mjs"), (module) => ({
73
+ createLazyRegistration("openai-chatgpt-responses", () => import("./openai-chatgpt-responses-Cq3Igfi3.mjs"), (module) => ({
74
74
  stream: module.streamOpenAICodexResponses,
75
75
  streamSimple: module.streamSimpleOpenAICodexResponses
76
76
  })),
@@ -20,7 +20,7 @@ import { t as createDeferredEventBuffer } from "./deferred-event-buffer-DAvyP7qA
20
20
  import { n as isProviderReplayContext, r as providerReplayContextMatches, t as buildProviderReplayContext } from "./provider-replay-context-CO_Eplnc.mjs";
21
21
  import { t as createAssistantOutput } from "./assistant-output-D5762GPH.mjs";
22
22
  import { n as resolveOpencodeSessionHeaders } from "./session-affinity-DA4WHv1h.mjs";
23
- import { a as flattenCompletionMessagesToStringContent, c as hasOpenAICompatibleConversationTurn, d as createDeepSeekTextFilter, l as canonicalizeMaxTokensParam, o as stripCompletionMessagesToRoleContent, r as buildOpenAICompletionsParams, s as applyCompletionsAnthropicCacheControl, t as createOpenAICompletionsTransportStreamFn, u as resolveMaxTokensParam } from "./openai-completions-transport-CuoQfnKV.mjs";
23
+ import { a as flattenCompletionMessagesToStringContent, c as hasOpenAICompatibleConversationTurn, d as createDeepSeekTextFilter, l as canonicalizeMaxTokensParam, o as stripCompletionMessagesToRoleContent, r as buildOpenAICompletionsParams, s as applyCompletionsAnthropicCacheControl, t as createOpenAICompletionsTransportStreamFn, u as resolveMaxTokensParam } from "./openai-completions-transport-D_ZhLzh_.mjs";
24
24
  import { a as googleFlashSupportsMinimalThinking, i as consumeGoogleGenerateContentStream, n as projectGoogleMessages, r as requiresGoogleToolCallId, t as convertGoogleTools } from "./google-messages-l7wgIF5I.mjs";
25
25
  import { r as resolveProviderTransportTurnState, t as filterProviderTurnHeadersForExplicitOpencodeSession } from "./provider-transport-turn-state-BX6TfCyW.mjs";
26
26
  import { i as getFirstStreamEventTimeoutMs, r as getFirstStreamEventTimeoutHandler, t as createFirstStreamEventAbortController } from "./stream-first-event-timeout-D9ZmL_s9.mjs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/ai",
3
- "version": "2026.10.2",
3
+ "version": "2026.10.3",
4
4
  "description": "Reusable model provider adapters and streaming runtime from OpenClaw",
5
5
  "keywords": [
6
6
  "ai",