@openclaw/ai 2026.8.1-beta.2 → 2026.8.1-beta.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.
- package/dist/{anthropic-B6dLpq5L.mjs → anthropic-B8KwTtlb.mjs} +37 -27
- package/dist/{anthropic-SrGtwsJu.d.mts → anthropic-BECQCNdF.d.mts} +0 -2
- package/dist/{anthropic-JsNA5KCu.mjs → anthropic-BQXQudmA.mjs} +0 -1
- package/dist/{anthropic-compaction-replay-8lJNKXOE.mjs → anthropic-compaction-replay-4Zx7-aCr.mjs} +14 -15
- package/dist/{anthropic-payload-policy-CiEuQS72.d.mts → anthropic-payload-policy-CSx7MoKH.d.mts} +2 -1
- package/dist/{api-registry-k3zTz0cV.d.mts → api-registry-DFxSnFqG.d.mts} +1 -1
- package/dist/{azure-openai-responses-mxIOtUnn.mjs → azure-openai-responses-Aa4mVcYG.mjs} +3 -3
- package/dist/diagnostics.mjs +1 -1
- package/dist/event-stream-BVVgDSdq.d.mts +1 -0
- package/dist/{event-stream-BP6AWT8j.d.mts → event-stream-D91-ohD_.d.mts} +1 -1
- package/dist/event-stream.d.mts +1 -1
- package/dist/{google-shared-B0Qr9OR7.mjs → google-shared-M1dl64nz.mjs} +12 -5
- package/dist/{google-vertex-Bhc3TjDl.mjs → google-vertex-DCJHM_a5.mjs} +3 -3
- package/dist/{google-C7h2QzDX.mjs → google-yDRnipeq.mjs} +3 -3
- package/dist/headers-B_e4-1J0.mjs +9 -0
- package/dist/{host-DTqNc7ad.mjs → host-DF_yxOsA.mjs} +40 -29
- package/dist/{host-vWgMMhiJ.d.mts → host-DJq_FGcz.d.mts} +6 -6
- package/dist/index.d.mts +7 -7
- package/dist/index.mjs +2 -2
- package/dist/internal/anthropic.d.mts +11 -5
- package/dist/internal/anthropic.mjs +4 -4
- package/dist/internal/openai-responses-payload-policy.d.mts +2 -2
- package/dist/internal/openai-responses-payload-policy.mjs +2 -2
- package/dist/internal/openai.d.mts +5 -5
- package/dist/internal/openai.mjs +9 -8
- package/dist/internal/runtime.d.mts +4 -2
- package/dist/internal/runtime.mjs +4 -3
- package/dist/internal/shared.d.mts +17 -3
- package/dist/internal/shared.mjs +4 -4
- package/dist/{headers-DdOQtGuU.mjs → llm-request-activity-BjtkplhG.mjs} +1 -9
- package/dist/{mistral-CEWoQI_g.mjs → mistral-D6hRXI7A.mjs} +47 -33
- package/dist/{openai-chatgpt-responses-CrPmqERt.mjs → openai-chatgpt-responses-C339VIfT.mjs} +23 -15
- package/dist/{openai-completions-BPnt4Sml.mjs → openai-completions-D88orSJ9.mjs} +71 -35
- package/dist/{openai-completions-compat-Dt3dcawL.d.mts → openai-completions-compat-B0KTleXp.d.mts} +2 -2
- package/dist/{openai-responses-DhIKtOup.mjs → openai-responses-BXEcr-Tp.mjs} +4 -4
- package/dist/{openai-responses-contracts-XpZJxrRG.d.mts → openai-responses-contracts-CD75pQ0m.d.mts} +2 -2
- package/dist/{openai-responses-contracts-CyfIkQi5.mjs → openai-responses-contracts-DvILoqBk.mjs} +3 -9
- package/dist/{openai-responses-payload-policy-BDxV-W0c.mjs → openai-responses-payload-policy-BDo8CQsx.mjs} +4 -2
- package/dist/{openai-responses-payload-policy-BSs371VM.d.mts → openai-responses-payload-policy-CNGFT9zr.d.mts} +1 -0
- package/dist/{openai-responses-prompt-observer-internal-DgNTYnRY.mjs → openai-responses-prompt-observer-internal-BG-1AsBI.mjs} +2 -3
- package/dist/{openai-responses-shared-DXIt3iY5.mjs → openai-responses-shared-Cvt5MgEm.mjs} +81 -136
- package/dist/{openai-stop-reason-BkFkqqK0.mjs → openai-stop-reason-9OONKyAm.mjs} +47 -31
- package/dist/{openai-tool-projection-CY04OcvQ.mjs → openai-tool-projection-CHGLt03m.mjs} +94 -6
- package/dist/{provider-error-BUwEnjXq.mjs → provider-error-C8mBRJDl.mjs} +19 -24
- package/dist/provider-options-AvldWZt8.mjs +21 -0
- package/dist/{provider-options-B96RdNpH.d.mts → provider-options-Cc5ZQ6Aa.d.mts} +12 -2
- package/dist/provider-transcript-transform--gtf0ZbR.mjs +32 -0
- package/dist/provider-types.d.mts +5 -5
- package/dist/providers.d.mts +1 -1
- package/dist/providers.mjs +9 -9
- package/dist/{reasoning-tag-text-partitioner-rnPwX2pg.mjs → reasoning-tag-text-partitioner-5ygO2rZc.mjs} +3 -0
- package/dist/{sanitize-unicode-BYqrYtC_.mjs → sanitize-unicode-BP7HLLZn.mjs} +1 -1
- package/dist/simple-options-oqsXB6U3.mjs +450 -0
- package/dist/{tool-schema-json-projection-q5d7QX5c.mjs → tool-schema-json-projection-FEr-jOoZ.mjs} +16 -7
- package/dist/{transport-utils-DJqkxbhC.mjs → transport-utils-Bv0FHkd0.mjs} +1 -1
- package/dist/transports.d.mts +77 -44
- package/dist/transports.mjs +207 -167
- package/dist/{types-BHNrPS1l.d.mts → types-DTAP49HF.d.mts} +17 -2
- package/dist/types.d.mts +5 -5
- package/dist/types.mjs +1 -1
- package/dist/{validation-DT9SrFn3.d.mts → validation-DYNNrU9u.d.mts} +1 -1
- package/dist/validation.d.mts +1 -1
- package/package.json +1 -1
- package/dist/provider-transcript-transform-ePx-Bbfr.mjs +0 -155
- package/dist/simple-options-D58D5Kvw.mjs +0 -117
|
@@ -276,9 +276,24 @@ interface UserMessage {
|
|
|
276
276
|
runtimeContextCarrier?: boolean;
|
|
277
277
|
}
|
|
278
278
|
/** Assistant turn, including provider identity and final stop state. */
|
|
279
|
+
type AssistantDeliveryTtsFacts = {
|
|
280
|
+
tagged: true;
|
|
281
|
+
text?: string;
|
|
282
|
+
directives?: Array<{
|
|
283
|
+
provider?: string;
|
|
284
|
+
values: Record<string, string>;
|
|
285
|
+
}>;
|
|
286
|
+
};
|
|
279
287
|
interface AssistantMessage {
|
|
280
288
|
role: "assistant";
|
|
281
289
|
content: (TextContent | ThinkingContent | ToolCall)[];
|
|
290
|
+
openclawDelivery?: {
|
|
291
|
+
audioAsVoice?: true;
|
|
292
|
+
replyToCurrent?: true;
|
|
293
|
+
replyToId?: string; /** Provider text phase is unresolved until the assistant turn reaches terminal state. */
|
|
294
|
+
textPhaseRequiresTerminal?: true; /** Parsed once at the assistant write boundary; delivery resolves policy from these facts. */
|
|
295
|
+
tts?: AssistantDeliveryTtsFacts;
|
|
296
|
+
};
|
|
282
297
|
api: Api;
|
|
283
298
|
provider: Provider;
|
|
284
299
|
model: string;
|
|
@@ -590,7 +605,7 @@ interface Model<TApi extends Api = Api> {
|
|
|
590
605
|
cacheRead: number;
|
|
591
606
|
cacheWrite: number;
|
|
592
607
|
};
|
|
593
|
-
contextWindow
|
|
608
|
+
contextWindow?: number;
|
|
594
609
|
/**
|
|
595
610
|
* Optional effective runtime cap used for compaction/session budgeting.
|
|
596
611
|
* Keeps provider/native contextWindow metadata intact while allowing a
|
|
@@ -625,4 +640,4 @@ type StreamFn = (model: Model, context: Context, options?: SimpleStreamOptions)
|
|
|
625
640
|
type CompleteSimpleFn = (model: Model, context: Pick<Context, "systemPrompt" | "messages">, options?: SimpleStreamOptions) => Promise<AssistantMessage>;
|
|
626
641
|
type ValidateToolArgumentsFn = (tool: Tool, toolCall: ToolCall) => unknown;
|
|
627
642
|
//#endregion
|
|
628
|
-
export {
|
|
643
|
+
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 };
|
package/dist/types.d.mts
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 "./anthropic-
|
|
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
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
|
|
4
|
-
import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-
|
|
5
|
-
import { n as validateToolCall, t as validateToolArguments } from "./validation-
|
|
6
|
-
export { AnthropicMessagesCompat, Api, 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 };
|
|
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-DTAP49HF.mjs";
|
|
4
|
+
import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-D91-ohD_.mjs";
|
|
5
|
+
import { n as validateToolCall, t as validateToolArguments } from "./validation-DYNNrU9u.mjs";
|
|
6
|
+
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 };
|
package/dist/types.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
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-
|
|
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-BQXQudmA.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
3
|
import { i as formatThrownValue, n as createAssistantMessageDiagnostic, r as extractDiagnosticError, t as appendAssistantMessageDiagnostic } from "./diagnostics-COpOtRwq.mjs";
|
|
4
4
|
import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-uSMZJ3FA.mjs";
|
package/dist/validation.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as validateToolCall, t as validateToolArguments } from "./validation-
|
|
1
|
+
import { n as validateToolCall, t as validateToolArguments } from "./validation-DYNNrU9u.mjs";
|
|
2
2
|
export { validateToolArguments, validateToolCall };
|
package/package.json
CHANGED
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { r as createAssistantMessageEventStream } from "./event-stream-uSMZJ3FA.mjs";
|
|
2
|
-
import { t as sanitizeSurrogates } from "./sanitize-unicode-BYqrYtC_.mjs";
|
|
3
|
-
import { i as transformMessages } from "./host-DTqNc7ad.mjs";
|
|
4
|
-
import { i as asOptionalRecord, t as asNonArrayRecord } from "./record-coerce-DdXsgUd_.mjs";
|
|
5
|
-
import { n as projectProviderError } from "./provider-error-BUwEnjXq.mjs";
|
|
6
|
-
//#region packages/ai/src/transports/transport-stream-shared.ts
|
|
7
|
-
const EMPTY_TOOL_RESULT_TEXT = "(no output)";
|
|
8
|
-
function sanitizeTransportPayloadText(text) {
|
|
9
|
-
if (typeof text !== "string") return "";
|
|
10
|
-
return sanitizeSurrogates(text);
|
|
11
|
-
}
|
|
12
|
-
function sanitizeNonEmptyTransportPayloadText(text, fallback = EMPTY_TOOL_RESULT_TEXT) {
|
|
13
|
-
const sanitized = sanitizeTransportPayloadText(text);
|
|
14
|
-
return sanitized.trim().length > 0 ? sanitized : fallback;
|
|
15
|
-
}
|
|
16
|
-
function coerceTransportToolCallArguments(argumentsValue) {
|
|
17
|
-
const argumentsRecord = asOptionalRecord(argumentsValue);
|
|
18
|
-
if (argumentsRecord) return argumentsRecord;
|
|
19
|
-
if (typeof argumentsValue === "string") try {
|
|
20
|
-
return asNonArrayRecord(JSON.parse(argumentsValue));
|
|
21
|
-
} catch {}
|
|
22
|
-
return {};
|
|
23
|
-
}
|
|
24
|
-
function mergeTransportHeaders(...headerSources) {
|
|
25
|
-
const merged = {};
|
|
26
|
-
for (const headers of headerSources) if (headers) Object.assign(merged, headers);
|
|
27
|
-
return Object.keys(merged).length > 0 ? merged : void 0;
|
|
28
|
-
}
|
|
29
|
-
function mergeTransportMetadata(payload, metadata) {
|
|
30
|
-
if (!metadata || Object.keys(metadata).length === 0) return payload;
|
|
31
|
-
const existingMetadata = asOptionalRecord(payload.metadata);
|
|
32
|
-
return {
|
|
33
|
-
...payload,
|
|
34
|
-
metadata: {
|
|
35
|
-
...existingMetadata,
|
|
36
|
-
...metadata
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
function createEmptyTransportUsage() {
|
|
41
|
-
return {
|
|
42
|
-
input: 0,
|
|
43
|
-
output: 0,
|
|
44
|
-
cacheRead: 0,
|
|
45
|
-
cacheWrite: 0,
|
|
46
|
-
totalTokens: 0,
|
|
47
|
-
cost: {
|
|
48
|
-
input: 0,
|
|
49
|
-
output: 0,
|
|
50
|
-
cacheRead: 0,
|
|
51
|
-
cacheWrite: 0,
|
|
52
|
-
total: 0
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
function createWritableTransportEventStream() {
|
|
57
|
-
const eventStream = createAssistantMessageEventStream();
|
|
58
|
-
return {
|
|
59
|
-
eventStream,
|
|
60
|
-
stream: eventStream
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Abort error to surface for an aborted `signal`.
|
|
65
|
-
*
|
|
66
|
-
* Rethrows the caller's abort reason only when it carries a `code`, so that code
|
|
67
|
-
* survives into `errorCode` on the persisted assistant message and consumers can
|
|
68
|
-
* recognize an abort's origin without matching error text. A default
|
|
69
|
-
* `abort()` reason is an uncoded DOMException that carries nothing the synthetic
|
|
70
|
-
* error does not, so it keeps the "Request was aborted" text every transport
|
|
71
|
-
* already emits rather than churning it.
|
|
72
|
-
*/
|
|
73
|
-
function transportAbortError(signal) {
|
|
74
|
-
const reason = signal?.reason;
|
|
75
|
-
return reason instanceof Error && typeof reason.code === "string" ? reason : /* @__PURE__ */ new Error("Request was aborted");
|
|
76
|
-
}
|
|
77
|
-
/** Run a provider-response hook before start/body consumption inside the first-event deadline. */
|
|
78
|
-
function withProviderResponseHook(params) {
|
|
79
|
-
return { async *[Symbol.asyncIterator]() {
|
|
80
|
-
let onAbort;
|
|
81
|
-
try {
|
|
82
|
-
if (params.signal.aborted) throw transportAbortError(params.signal);
|
|
83
|
-
if (params.hook) await Promise.race([Promise.resolve().then(params.hook), new Promise((_resolve, reject) => {
|
|
84
|
-
onAbort = () => reject(transportAbortError(params.signal));
|
|
85
|
-
params.signal.addEventListener("abort", onAbort, { once: true });
|
|
86
|
-
})]);
|
|
87
|
-
} catch (error) {
|
|
88
|
-
params.abort(error instanceof Error ? error : new Error(String(error)));
|
|
89
|
-
throw error;
|
|
90
|
-
} finally {
|
|
91
|
-
if (onAbort) params.signal.removeEventListener("abort", onAbort);
|
|
92
|
-
}
|
|
93
|
-
if (params.signal.aborted) throw transportAbortError(params.signal);
|
|
94
|
-
params.onReady?.();
|
|
95
|
-
if (params.stream) yield* params.stream;
|
|
96
|
-
} };
|
|
97
|
-
}
|
|
98
|
-
function finalizeTransportStream(params) {
|
|
99
|
-
const { stream, output, signal } = params;
|
|
100
|
-
if (signal?.aborted) throw transportAbortError(signal);
|
|
101
|
-
if (output.stopReason === "aborted" || output.stopReason === "error") throw new Error(output.errorMessage ?? "An unknown error occurred");
|
|
102
|
-
stream.push({
|
|
103
|
-
type: "done",
|
|
104
|
-
reason: output.stopReason,
|
|
105
|
-
message: output
|
|
106
|
-
});
|
|
107
|
-
stream.end();
|
|
108
|
-
}
|
|
109
|
-
/** @deprecated Use projectProviderError. v2026.7.2-beta.5 compatibility; remove after 2026.10. */
|
|
110
|
-
function assignTransportErrorDetails(output, error, signal) {
|
|
111
|
-
Object.assign(output, projectProviderError(error, signal));
|
|
112
|
-
}
|
|
113
|
-
function failTransportStream(params) {
|
|
114
|
-
const { stream, output, signal, error, cleanup } = params;
|
|
115
|
-
cleanup?.();
|
|
116
|
-
assignTransportErrorDetails(output, error, signal);
|
|
117
|
-
stream.push({
|
|
118
|
-
type: "error",
|
|
119
|
-
reason: output.stopReason,
|
|
120
|
-
error: output
|
|
121
|
-
});
|
|
122
|
-
stream.end();
|
|
123
|
-
}
|
|
124
|
-
//#endregion
|
|
125
|
-
//#region packages/ai/src/provider-transcript-transform.ts
|
|
126
|
-
const IMAGE_OMISSION = "(image omitted: model does not support images)";
|
|
127
|
-
const VIDEO_OMISSION = "(video omitted: provider does not support video input)";
|
|
128
|
-
function projectUserMediaForTransport(content, supportsImages, supportsVideo) {
|
|
129
|
-
const result = [];
|
|
130
|
-
for (const block of content) {
|
|
131
|
-
if (block.type === "text" || block.type === "image" && supportsImages || block.type === "video" && supportsVideo) {
|
|
132
|
-
result.push(block);
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
const text = block.type === "video" ? VIDEO_OMISSION : IMAGE_OMISSION;
|
|
136
|
-
const previous = result.at(-1);
|
|
137
|
-
if (block.data.trim() && !(previous?.type === "text" && previous.text === text)) result.push({
|
|
138
|
-
type: "text",
|
|
139
|
-
text
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
return result;
|
|
143
|
-
}
|
|
144
|
-
function transformProviderMessages(messages, model, normalizeToolCallId) {
|
|
145
|
-
const target = {
|
|
146
|
-
...model,
|
|
147
|
-
input: model.input.filter((type) => type !== "video")
|
|
148
|
-
};
|
|
149
|
-
return transformMessages(messages.map((message) => {
|
|
150
|
-
if (message.role !== "user" || !Array.isArray(message.content)) return message;
|
|
151
|
-
return Object.assign({}, message, { content: projectUserMediaForTransport(message.content, model.input.includes("image"), model.api === "openai-completions" && model.input.includes("video")) });
|
|
152
|
-
}), target, normalizeToolCallId);
|
|
153
|
-
}
|
|
154
|
-
//#endregion
|
|
155
|
-
export { createWritableTransportEventStream as a, mergeTransportHeaders as c, sanitizeTransportPayloadText as d, transportAbortError as f, createEmptyTransportUsage as i, mergeTransportMetadata as l, assignTransportErrorDetails as n, failTransportStream as o, withProviderResponseHook as p, coerceTransportToolCallArguments as r, finalizeTransportStream as s, transformProviderMessages as t, sanitizeNonEmptyTransportPayloadText as u };
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { n as normalizeLowercaseStringOrEmpty } from "./string-coerce-fsri9iCu.mjs";
|
|
2
|
-
import { t as sanitizeSurrogates } from "./sanitize-unicode-BYqrYtC_.mjs";
|
|
3
|
-
//#region packages/ai/src/utils/prompt-cache-stability.ts
|
|
4
|
-
/**
|
|
5
|
-
* Prompt-cache normalization helpers. They keep generated prompt sections
|
|
6
|
-
* deterministic across platform newlines, trailing whitespace, and input
|
|
7
|
-
* ordering.
|
|
8
|
-
*/
|
|
9
|
-
/** Canonicalizes provider tool order without relying on host locale settings. */
|
|
10
|
-
function sortPromptCacheToolsByName(tools) {
|
|
11
|
-
const compareText = (left, right) => {
|
|
12
|
-
const leftText = left ?? "";
|
|
13
|
-
const rightText = right ?? "";
|
|
14
|
-
return leftText < rightText ? -1 : leftText > rightText ? 1 : 0;
|
|
15
|
-
};
|
|
16
|
-
return tools.toSorted((left, right) => compareText(left.wireName ?? left.name, right.wireName ?? right.name) || compareText(left.description, right.description));
|
|
17
|
-
}
|
|
18
|
-
/** Normalize structured prompt text before hashing or snapshot comparison. */
|
|
19
|
-
function normalizeStructuredPromptSection(text) {
|
|
20
|
-
return sanitizeSurrogates(text).replace(/\r\n?/g, "\n").replace(/[ \t]+$/gm, "").trim();
|
|
21
|
-
}
|
|
22
|
-
/** Normalize, de-dupe, and sort capability ids for stable prompt payloads. */
|
|
23
|
-
function normalizePromptCapabilityIds(capabilities) {
|
|
24
|
-
const seen = /* @__PURE__ */ new Set();
|
|
25
|
-
const normalized = [];
|
|
26
|
-
for (const capability of capabilities) {
|
|
27
|
-
const value = normalizeLowercaseStringOrEmpty(normalizeStructuredPromptSection(capability));
|
|
28
|
-
if (!value || seen.has(value)) continue;
|
|
29
|
-
seen.add(value);
|
|
30
|
-
normalized.push(value);
|
|
31
|
-
}
|
|
32
|
-
return normalized.toSorted((left, right) => left.localeCompare(right));
|
|
33
|
-
}
|
|
34
|
-
//#endregion
|
|
35
|
-
//#region packages/ai/src/utils/system-prompt-cache-boundary.ts
|
|
36
|
-
/**
|
|
37
|
-
* System prompt cache-boundary helpers.
|
|
38
|
-
*
|
|
39
|
-
* Keeps stable prompt prefixes separate from dynamic runtime additions for provider prompt caching.
|
|
40
|
-
*/
|
|
41
|
-
const SYSTEM_PROMPT_CACHE_BOUNDARY = "\n<!-- OPENCLAW_CACHE_BOUNDARY -->\n";
|
|
42
|
-
function stripSystemPromptCacheBoundary(text) {
|
|
43
|
-
return text.replaceAll(SYSTEM_PROMPT_CACHE_BOUNDARY, "\n");
|
|
44
|
-
}
|
|
45
|
-
function ensureSystemPromptCacheBoundary(systemPrompt) {
|
|
46
|
-
if (systemPrompt.trim().length === 0) return systemPrompt;
|
|
47
|
-
return systemPrompt.includes("\n<!-- OPENCLAW_CACHE_BOUNDARY -->\n") ? systemPrompt : `${systemPrompt}${SYSTEM_PROMPT_CACHE_BOUNDARY}`;
|
|
48
|
-
}
|
|
49
|
-
function splitSystemPromptCacheBoundary(text) {
|
|
50
|
-
const boundaryIndex = text.indexOf(SYSTEM_PROMPT_CACHE_BOUNDARY);
|
|
51
|
-
if (boundaryIndex === -1) return;
|
|
52
|
-
return {
|
|
53
|
-
stablePrefix: text.slice(0, boundaryIndex).trimEnd(),
|
|
54
|
-
dynamicSuffix: text.slice(boundaryIndex + 34).trimStart()
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
function prependSystemPromptAdditionAfterCacheBoundary(params) {
|
|
58
|
-
const systemPromptAddition = typeof params.systemPromptAddition === "string" ? normalizeStructuredPromptSection(params.systemPromptAddition) : "";
|
|
59
|
-
if (!systemPromptAddition) return params.systemPrompt;
|
|
60
|
-
if (params.systemPrompt.trim().length === 0) return systemPromptAddition;
|
|
61
|
-
const split = splitSystemPromptCacheBoundary(params.systemPrompt);
|
|
62
|
-
if (!split) return `${systemPromptAddition}\n\n${params.systemPrompt}`;
|
|
63
|
-
const dynamicSuffix = split.dynamicSuffix ? normalizeStructuredPromptSection(split.dynamicSuffix) : "";
|
|
64
|
-
if (!dynamicSuffix) return `${split.stablePrefix}${SYSTEM_PROMPT_CACHE_BOUNDARY}${systemPromptAddition}`;
|
|
65
|
-
return `${split.stablePrefix}${SYSTEM_PROMPT_CACHE_BOUNDARY}${systemPromptAddition}\n\n${dynamicSuffix}`;
|
|
66
|
-
}
|
|
67
|
-
//#endregion
|
|
68
|
-
//#region packages/ai/src/providers/simple-options.ts
|
|
69
|
-
function buildBaseOptions(model, options, apiKey) {
|
|
70
|
-
const firstEventOptions = options;
|
|
71
|
-
return {
|
|
72
|
-
temperature: options?.temperature,
|
|
73
|
-
maxTokens: options?.maxTokens,
|
|
74
|
-
stop: options?.stop,
|
|
75
|
-
signal: options?.signal,
|
|
76
|
-
apiKey: apiKey || options?.apiKey,
|
|
77
|
-
transport: options?.transport,
|
|
78
|
-
cacheRetention: options?.cacheRetention,
|
|
79
|
-
sessionId: options?.sessionId,
|
|
80
|
-
promptCacheKey: options?.promptCacheKey,
|
|
81
|
-
headers: options?.headers,
|
|
82
|
-
onPayload: options?.onPayload,
|
|
83
|
-
onResponse: options?.onResponse,
|
|
84
|
-
timeoutMs: options?.timeoutMs,
|
|
85
|
-
firstEventTimeoutMs: firstEventOptions?.firstEventTimeoutMs,
|
|
86
|
-
onFirstEventTimeout: firstEventOptions?.onFirstEventTimeout,
|
|
87
|
-
maxRetries: options?.maxRetries,
|
|
88
|
-
maxRetryDelayMs: options?.maxRetryDelayMs,
|
|
89
|
-
metadata: options?.metadata
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
function clampMaxTokensToModel(model, requestedMaxTokens) {
|
|
93
|
-
return requestedMaxTokens === void 0 ? void 0 : Math.max(1, Math.min(requestedMaxTokens, model.maxTokens));
|
|
94
|
-
}
|
|
95
|
-
function clampReasoning(effort) {
|
|
96
|
-
return effort === "xhigh" ? "high" : effort;
|
|
97
|
-
}
|
|
98
|
-
function adjustMaxTokensForThinking(baseMaxTokens, modelMaxTokens, reasoningLevel, customBudgets) {
|
|
99
|
-
const budgets = {
|
|
100
|
-
minimal: 1024,
|
|
101
|
-
low: 2048,
|
|
102
|
-
medium: 8192,
|
|
103
|
-
high: 16384,
|
|
104
|
-
max: 32768,
|
|
105
|
-
...customBudgets
|
|
106
|
-
};
|
|
107
|
-
const minOutputTokens = 1024;
|
|
108
|
-
let thinkingBudget = budgets[clampReasoning(reasoningLevel)];
|
|
109
|
-
const maxTokens = baseMaxTokens === void 0 ? modelMaxTokens : Math.min(baseMaxTokens + thinkingBudget, modelMaxTokens);
|
|
110
|
-
if (maxTokens <= thinkingBudget) thinkingBudget = Math.max(0, maxTokens - minOutputTokens);
|
|
111
|
-
return {
|
|
112
|
-
maxTokens,
|
|
113
|
-
thinkingBudget
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
//#endregion
|
|
117
|
-
export { SYSTEM_PROMPT_CACHE_BOUNDARY as a, splitSystemPromptCacheBoundary as c, normalizeStructuredPromptSection as d, sortPromptCacheToolsByName as f, clampReasoning as i, stripSystemPromptCacheBoundary as l, buildBaseOptions as n, ensureSystemPromptCacheBoundary as o, clampMaxTokensToModel as r, prependSystemPromptAdditionAfterCacheBoundary as s, adjustMaxTokensForThinking as t, normalizePromptCapabilityIds as u };
|