@openclaw/ai 2026.8.1-beta.3 → 2026.8.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.
- package/dist/{anthropic-B8KwTtlb.mjs → anthropic-DTGZ4VMY.mjs} +25 -23
- package/dist/{anthropic-compaction-replay-4Zx7-aCr.mjs → anthropic-compaction-replay-CKCDrZJv.mjs} +34 -35
- package/dist/{anthropic-payload-policy-CSx7MoKH.d.mts → anthropic-payload-policy-BTzmNC14.d.mts} +3 -2
- package/dist/{api-registry-DFxSnFqG.d.mts → api-registry-BbUHEKER.d.mts} +2 -1
- package/dist/{azure-openai-responses-Aa4mVcYG.mjs → azure-openai-responses-BmqaDXM1.mjs} +6 -5
- package/dist/{number-coercion-H9qHik3g.mjs → base64-CEFBpSkN.mjs} +73 -1
- package/dist/diagnostics.d.mts +2 -3
- package/dist/diagnostics.mjs +1 -1
- package/dist/{env-api-keys-DrgeBuva.mjs → env-api-keys-bktO00EJ.mjs} +2 -15
- package/dist/{event-stream-D91-ohD_.d.mts → event-stream-DcvAPSBe.d.mts} +1 -2
- package/dist/event-stream-pXT3FI6X.d.mts +1 -0
- package/dist/event-stream.d.mts +2 -1
- package/dist/{google-yDRnipeq.mjs → google-CqjVZMwo.mjs} +8 -6
- package/dist/{google-shared-M1dl64nz.mjs → google-shared-Bnqni5j3.mjs} +34 -25
- package/dist/{google-vertex-DCJHM_a5.mjs → google-vertex-D_WREEJi.mjs} +8 -6
- package/dist/{host-DF_yxOsA.mjs → host-BIaiBURL.mjs} +4 -8
- package/dist/{host-DJq_FGcz.d.mts → host-DKFUAmCn.d.mts} +3 -3
- package/dist/index-CefaUGSS.d.mts +111 -0
- package/dist/index.d.mts +9 -10
- package/dist/index.mjs +4 -5
- package/dist/internal/anthropic.d.mts +51 -49
- package/dist/internal/anthropic.mjs +5 -5
- package/dist/internal/openai-responses-payload-policy.d.mts +3 -3
- package/dist/internal/openai-responses-payload-policy.mjs +2 -3
- package/dist/internal/openai.d.mts +65 -63
- package/dist/internal/openai.mjs +10 -9
- package/dist/internal/retry-after.d.mts +2 -3
- package/dist/internal/runtime.d.mts +51 -40
- package/dist/internal/runtime.mjs +9 -9
- package/dist/internal/shared.d.mts +25 -25
- package/dist/internal/shared.mjs +3 -3
- package/dist/{json-parse-CDnesDM_.mjs → json-parse-BuAJEbdW.mjs} +18 -2
- package/dist/{mistral-D6hRXI7A.mjs → mistral-C24jVd6f.mjs} +34 -32
- package/dist/{openai-chatgpt-responses-C339VIfT.mjs → openai-chatgpt-responses-Czum0oXz.mjs} +38 -20
- package/dist/openai-completions-BfFwac6f.mjs +404 -0
- package/dist/{openai-completions-compat-B0KTleXp.d.mts → openai-completions-compat-SZhi0Lf4.d.mts} +3 -3
- package/dist/openai-completions-stream-DGOvau4J.mjs +1625 -0
- package/dist/{openai-responses-BXEcr-Tp.mjs → openai-responses-BAryVEJM.mjs} +11 -7
- package/dist/openai-responses-compaction-window-DO7yV7az.mjs +686 -0
- package/dist/{openai-responses-contracts-CD75pQ0m.d.mts → openai-responses-contracts-BthRXano.d.mts} +14 -5
- package/dist/{openai-responses-payload-policy-CNGFT9zr.d.mts → openai-responses-payload-policy-rLRPsSmB.d.mts} +1 -0
- package/dist/{openai-responses-prompt-observer-internal-BG-1AsBI.mjs → openai-responses-prompt-observer-internal--R0kZLOZ.mjs} +3 -2
- package/dist/{openai-responses-shared-Cvt5MgEm.mjs → openai-responses-shared-CxgdGBvm.mjs} +332 -1484
- package/dist/openai-stop-reason-Drnn_6Qj.mjs +28 -0
- package/dist/openai-tool-schema-CSMh5e9O.mjs +1697 -0
- package/dist/{provider-error-C8mBRJDl.mjs → provider-error-BI8kIViN.mjs} +14 -88
- package/dist/{provider-options-Cc5ZQ6Aa.d.mts → provider-options-DJd_9euj.d.mts} +13 -4
- package/dist/{provider-transcript-transform--gtf0ZbR.mjs → provider-transcript-transform-WvJmFUAf.mjs} +1 -1
- package/dist/provider-types.d.mts +18 -17
- package/dist/providers.d.mts +5 -6
- package/dist/providers.mjs +9 -9
- package/dist/{reasoning-tag-text-partitioner-5ygO2rZc.mjs → reasoning-tag-text-partitioner-BsUX44Tq.mjs} +30 -20
- package/dist/rolldown-runtime-BhDjJH2R.mjs +15 -0
- package/dist/{sanitize-unicode-BP7HLLZn.mjs → sanitize-unicode-S6binQG-.mjs} +2 -9
- package/dist/simple-options-rdOPzr7Z.mjs +155 -0
- package/dist/{anthropic-BQXQudmA.mjs → src-C8U7lkoa.mjs} +75 -1
- package/dist/{stream-first-event-timeout-MK28puvq.mjs → stream-first-event-timeout-DcNjoFQE.mjs} +1 -1
- package/dist/{streaming-byte-guard-BrbkbwUu.mjs → streaming-byte-guard-CC-HMn_u.mjs} +5 -6
- package/dist/string-normalization--fwJ4S2q.mjs +16 -0
- package/dist/{tool-schema-json-projection-FEr-jOoZ.mjs → tool-schema-json-projection-BtZiml7r.mjs} +22 -32
- package/dist/transport-stream-shared-BbG7PThh.d.mts +138 -0
- package/dist/{simple-options-oqsXB6U3.mjs → transport-stream-shared-D8nQWCUo.mjs} +10 -118
- package/dist/{transport-utils-Bv0FHkd0.mjs → transport-utils-CtuS1Upe.mjs} +10 -10
- package/dist/transports.d.mts +130 -189
- package/dist/transports.mjs +227 -1249
- package/dist/{types-DTAP49HF.d.mts → types-Beemor2E.d.mts} +58 -24
- package/dist/types-COdhCX0U.d.mts +1 -0
- package/dist/types.d.mts +6 -5
- package/dist/types.mjs +3 -4
- package/dist/utf16-slice-qz3nsy87.mjs +84 -0
- package/dist/{validation-DYNNrU9u.d.mts → validation-CC6s7Smp.d.mts} +1 -2
- package/dist/{validation-B61OhAio.mjs → validation-CJZtym2g.mjs} +7 -5
- package/dist/validation.d.mts +1 -1
- package/dist/validation.mjs +1 -1
- package/package.json +6 -6
- package/dist/anthropic-BECQCNdF.d.mts +0 -98
- package/dist/event-stream-BVVgDSdq.d.mts +0 -1
- package/dist/headers-B_e4-1J0.mjs +0 -9
- package/dist/index-BVVgDSdq.d.mts +0 -1
- package/dist/openai-completions-D88orSJ9.mjs +0 -632
- package/dist/openai-responses-contracts-DvILoqBk.mjs +0 -247
- package/dist/openai-responses-payload-policy-BDo8CQsx.mjs +0 -208
- package/dist/openai-stop-reason-9OONKyAm.mjs +0 -579
- package/dist/openai-tool-projection-CHGLt03m.mjs +0 -426
- package/dist/provider-options-AvldWZt8.mjs +0 -21
- package/dist/record-coerce-DdXsgUd_.mjs +0 -23
- package/dist/src-D2H6yKkH.mjs +0 -2
- package/dist/stream-first-event-timeout-DvDeSucC.d.mts +0 -29
- package/dist/string-coerce-fsri9iCu.mjs +0 -34
- package/dist/types-BVVgDSdq.d.mts +0 -1
- package/dist/utf16-slice-CvGodqok.mjs +0 -29
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import "./validation-CJZtym2g.mjs";
|
|
1
2
|
//#region packages/llm-core/src/model-contracts/anthropic.ts
|
|
2
3
|
function normalizeClaudeModelId(modelId) {
|
|
3
4
|
const normalized = modelId?.trim().toLowerCase() ?? "";
|
|
@@ -113,4 +114,77 @@ function resolveClaudeNativeThinkingLevelMap(ref) {
|
|
|
113
114
|
};
|
|
114
115
|
}
|
|
115
116
|
//#endregion
|
|
116
|
-
|
|
117
|
+
//#region packages/llm-core/src/usage-cost.ts
|
|
118
|
+
const sortedPricingTiers = /* @__PURE__ */ new WeakMap();
|
|
119
|
+
const finiteOrZero = (value) => typeof value === "number" && Number.isFinite(value) ? value : 0;
|
|
120
|
+
function normalizeTieredPricing(raw) {
|
|
121
|
+
if (!raw || raw.length === 0) return;
|
|
122
|
+
const result = [];
|
|
123
|
+
for (const tier of raw) {
|
|
124
|
+
const range = tier.range;
|
|
125
|
+
const start = Array.isArray(range) && typeof range[0] === "number" ? range[0] : NaN;
|
|
126
|
+
if (!Number.isFinite(start)) continue;
|
|
127
|
+
const rawEnd = range.length >= 2 ? range[1] : null;
|
|
128
|
+
const end = typeof rawEnd === "number" && Number.isFinite(rawEnd) && rawEnd > start ? rawEnd : Infinity;
|
|
129
|
+
if (!Number.isFinite(tier.input) || !Number.isFinite(tier.output) || !Number.isFinite(tier.cacheRead) || !Number.isFinite(tier.cacheWrite)) continue;
|
|
130
|
+
result.push({
|
|
131
|
+
input: tier.input,
|
|
132
|
+
output: tier.output,
|
|
133
|
+
cacheRead: tier.cacheRead,
|
|
134
|
+
cacheWrite: tier.cacheWrite,
|
|
135
|
+
range: [start, end]
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return result.length > 0 ? result.toSorted((a, b) => a.range[0] - b.range[0]) : void 0;
|
|
139
|
+
}
|
|
140
|
+
function normalizeModelCostConfig(cost) {
|
|
141
|
+
const normalizedTiers = normalizeTieredPricing(cost.tieredPricing);
|
|
142
|
+
return {
|
|
143
|
+
input: cost.input,
|
|
144
|
+
output: cost.output,
|
|
145
|
+
cacheRead: cost.cacheRead,
|
|
146
|
+
cacheWrite: cost.cacheWrite,
|
|
147
|
+
...normalizedTiers ? { tieredPricing: normalizedTiers } : {}
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function normalizeResolvedPricing(cost) {
|
|
151
|
+
return normalizeModelCostConfig({
|
|
152
|
+
input: finiteOrZero(cost.input),
|
|
153
|
+
output: finiteOrZero(cost.output),
|
|
154
|
+
cacheRead: finiteOrZero(cost.cacheRead),
|
|
155
|
+
cacheWrite: finiteOrZero(cost.cacheWrite),
|
|
156
|
+
...cost.tieredPricing ? { tieredPricing: cost.tieredPricing } : {}
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
function selectPricingRates(cost, promptTokens) {
|
|
160
|
+
const tiers = cost.tieredPricing;
|
|
161
|
+
if (!tiers?.length) return cost;
|
|
162
|
+
let sorted = sortedPricingTiers.get(tiers);
|
|
163
|
+
if (!sorted) {
|
|
164
|
+
sorted = normalizeTieredPricing(tiers) ?? [];
|
|
165
|
+
sortedPricingTiers.set(tiers, sorted);
|
|
166
|
+
}
|
|
167
|
+
if (promptTokens <= 0) return sorted[0] ?? cost;
|
|
168
|
+
return sorted.find((tier) => promptTokens >= tier.range[0] && promptTokens < tier.range[1]) ?? sorted.findLast((tier) => promptTokens >= tier.range[0]) ?? sorted[0] ?? cost;
|
|
169
|
+
}
|
|
170
|
+
/** Price one model call, selecting its tier before billing the separate token buckets. */
|
|
171
|
+
function calculateUsageCost(usage, pricing) {
|
|
172
|
+
const input = finiteOrZero(usage.input);
|
|
173
|
+
const output = finiteOrZero(usage.output);
|
|
174
|
+
const cacheRead = finiteOrZero(usage.cacheRead);
|
|
175
|
+
const cacheWrite = finiteOrZero(usage.cacheWrite);
|
|
176
|
+
const rates = selectPricingRates(pricing, input + cacheRead + cacheWrite);
|
|
177
|
+
const cacheWrite1h = Math.min(cacheWrite, Math.max(0, finiteOrZero(usage.cacheWrite1h)));
|
|
178
|
+
const cacheWrite5m = cacheWrite - cacheWrite1h;
|
|
179
|
+
const cost = {
|
|
180
|
+
input: input * rates.input / 1e6,
|
|
181
|
+
output: output * rates.output / 1e6,
|
|
182
|
+
cacheRead: cacheRead * rates.cacheRead / 1e6,
|
|
183
|
+
cacheWrite: (cacheWrite5m * rates.cacheWrite + cacheWrite1h * rates.input * 2) / 1e6,
|
|
184
|
+
total: 0
|
|
185
|
+
};
|
|
186
|
+
cost.total = cost.input + cost.output + cost.cacheRead + cost.cacheWrite;
|
|
187
|
+
return cost;
|
|
188
|
+
}
|
|
189
|
+
//#endregion
|
|
190
|
+
export { supportsClaudeFastMode as _, CLAUDE_OPUS_5_THINKING_PROFILE as a, requiresClaudeMandatoryAdaptiveThinking as c, resolveClaudeMythos5ModelIdentity as d, resolveClaudeNativeThinkingLevelMap as f, supportsClaudeAdaptiveThinking as g, supportsClaude1MContext as h, CLAUDE_FABLE_5_THINKING_PROFILE as i, resolveClaudeFable5ModelIdentity as l, resolveClaudeSonnet5ModelIdentity as m, normalizeModelCostConfig as n, CLAUDE_SONNET_5_THINKING_PROFILE as o, resolveClaudeOpus5ModelIdentity as p, normalizeResolvedPricing as r, requiresClaudeDefaultSampling as s, calculateUsageCost as t, resolveClaudeModelIdentity as u, supportsClaudeNativeMaxEffort as v, supportsClaudeNativeXhighEffort as y };
|
package/dist/{stream-first-event-timeout-MK28puvq.mjs → stream-first-event-timeout-DcNjoFQE.mjs}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { o as clampTimerTimeoutMs } from "./base64-CEFBpSkN.mjs";
|
|
2
2
|
//#region packages/ai/src/utils/stream-first-event-timeout.ts
|
|
3
3
|
function getFirstStreamEventTimeoutMs(options) {
|
|
4
4
|
return options?.firstEventTimeoutMs;
|
|
@@ -5,6 +5,9 @@ function createSseByteGuard(reader, opts) {
|
|
|
5
5
|
let total = 0;
|
|
6
6
|
let overflowedFlag = false;
|
|
7
7
|
let cancelledFlag = false;
|
|
8
|
+
const cancelReaderBestEffort = (reason) => {
|
|
9
|
+
reader.cancel(reason).catch(() => void 0);
|
|
10
|
+
};
|
|
8
11
|
return {
|
|
9
12
|
read: async () => {
|
|
10
13
|
if (overflowedFlag || cancelledFlag) return {
|
|
@@ -22,9 +25,7 @@ function createSseByteGuard(reader, opts) {
|
|
|
22
25
|
size: next,
|
|
23
26
|
maxBytes: opts.maxBytes
|
|
24
27
|
});
|
|
25
|
-
|
|
26
|
-
await reader.cancel(err);
|
|
27
|
-
} catch {}
|
|
28
|
+
cancelReaderBestEffort(err);
|
|
28
29
|
throw err;
|
|
29
30
|
}
|
|
30
31
|
total = next;
|
|
@@ -33,9 +34,7 @@ function createSseByteGuard(reader, opts) {
|
|
|
33
34
|
cancel: async (reason) => {
|
|
34
35
|
if (overflowedFlag) return;
|
|
35
36
|
cancelledFlag = true;
|
|
36
|
-
|
|
37
|
-
await reader.cancel(reason);
|
|
38
|
-
} catch {}
|
|
37
|
+
cancelReaderBestEffort(reason);
|
|
39
38
|
},
|
|
40
39
|
totalBytes: () => total,
|
|
41
40
|
overflowed: () => overflowedFlag,
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { d as normalizeOptionalString } from "./utf16-slice-qz3nsy87.mjs";
|
|
2
|
+
//#region packages/normalization-core/src/string-normalization.ts
|
|
3
|
+
/** Coerces entries to strings, trims them, and drops empty results. */
|
|
4
|
+
function normalizeStringEntries(list) {
|
|
5
|
+
return (list ?? []).map((entry) => normalizeOptionalString(String(entry)) ?? "").filter(Boolean);
|
|
6
|
+
}
|
|
7
|
+
/** Returns first-seen unique values while preserving insertion order. */
|
|
8
|
+
function uniqueValues(values) {
|
|
9
|
+
return [...new Set(values)];
|
|
10
|
+
}
|
|
11
|
+
/** Returns first-seen unique strings while preserving insertion order. */
|
|
12
|
+
function uniqueStrings(values) {
|
|
13
|
+
return uniqueValues(values);
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { uniqueStrings as n, uniqueValues as r, normalizeStringEntries as t };
|
package/dist/{tool-schema-json-projection-FEr-jOoZ.mjs → tool-schema-json-projection-BtZiml7r.mjs}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { o as isRecord } from "./utf16-slice-qz3nsy87.mjs";
|
|
2
|
+
import { n as getAiTransportHost } from "./host-BIaiBURL.mjs";
|
|
3
3
|
import { types } from "node:util";
|
|
4
4
|
//#region packages/ai/src/transports/host-policy.ts
|
|
5
5
|
function buildGuardedModelFetch(model, timeoutMs, options) {
|
|
@@ -37,18 +37,6 @@ function transformTransportMessages(messages, model, normalizeToolCallId, option
|
|
|
37
37
|
}
|
|
38
38
|
//#endregion
|
|
39
39
|
//#region packages/ai/src/providers/tool-schema-json-projection.ts
|
|
40
|
-
function isJsonValue(value) {
|
|
41
|
-
if (value === null) return true;
|
|
42
|
-
switch (typeof value) {
|
|
43
|
-
case "boolean":
|
|
44
|
-
case "string": return true;
|
|
45
|
-
case "number": return Number.isFinite(value);
|
|
46
|
-
case "object":
|
|
47
|
-
if (Array.isArray(value)) return value.every(isJsonValue);
|
|
48
|
-
return Object.values(value).every(isJsonValue);
|
|
49
|
-
default: return false;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
40
|
function isNonFiniteNumberValue(value) {
|
|
53
41
|
if (typeof value === "number") return !Number.isFinite(value);
|
|
54
42
|
if (value === null || typeof value !== "object" || !types.isNumberObject(value)) return false;
|
|
@@ -61,11 +49,14 @@ function serializeToolInputSchema(value, path) {
|
|
|
61
49
|
let text;
|
|
62
50
|
try {
|
|
63
51
|
text = JSON.stringify(value, function(key, entry) {
|
|
64
|
-
const
|
|
65
|
-
|
|
52
|
+
const invalidNumber = nonFiniteNumber.path === null && isNonFiniteNumberValue(entry);
|
|
53
|
+
if (invalidNumber || entry && typeof entry === "object") {
|
|
54
|
+
const holderPath = paths.get(this);
|
|
55
|
+
const entryPath = isRoot ? path : holderPath === void 0 ? `${path}.${key}` : Array.isArray(this) ? `${holderPath}[${key}]` : `${holderPath}.${key}`;
|
|
56
|
+
if (invalidNumber) nonFiniteNumber.path = entryPath;
|
|
57
|
+
else paths.set(entry, entryPath);
|
|
58
|
+
}
|
|
66
59
|
isRoot = false;
|
|
67
|
-
if (nonFiniteNumber.path === null && isNonFiniteNumberValue(entry)) nonFiniteNumber.path = entryPath;
|
|
68
|
-
else if (entry && typeof entry === "object") paths.set(entry, entryPath);
|
|
69
60
|
return entry;
|
|
70
61
|
});
|
|
71
62
|
} catch {
|
|
@@ -82,13 +73,8 @@ function serializeToolInputSchema(value, path) {
|
|
|
82
73
|
schema: {},
|
|
83
74
|
violations: [`${nonFiniteNumber.path} is not JSON-serializable`]
|
|
84
75
|
};
|
|
85
|
-
const parsed = JSON.parse(text);
|
|
86
|
-
if (!isJsonValue(parsed)) return {
|
|
87
|
-
schema: {},
|
|
88
|
-
violations: [`${path} is not a JSON value`]
|
|
89
|
-
};
|
|
90
76
|
return {
|
|
91
|
-
schema:
|
|
77
|
+
schema: JSON.parse(text),
|
|
92
78
|
violations: []
|
|
93
79
|
};
|
|
94
80
|
}
|
|
@@ -100,17 +86,18 @@ const schemaMapKeywords = /* @__PURE__ */ new Set([
|
|
|
100
86
|
"patternProperties",
|
|
101
87
|
"properties"
|
|
102
88
|
]);
|
|
103
|
-
function
|
|
104
|
-
if (Array.isArray(schema)) return schema.
|
|
105
|
-
if (!isRecord(schema)) return
|
|
106
|
-
const violations = [];
|
|
89
|
+
function inspectJsonSchema(schema, path, violations) {
|
|
90
|
+
if (Array.isArray(schema)) return schema.every((entry, index) => inspectJsonSchema(entry, `${path}[${index}]`, violations));
|
|
91
|
+
if (!isRecord(schema)) return typeof schema !== "number" || Number.isFinite(schema);
|
|
107
92
|
for (const key of ["$dynamicRef", "$dynamicAnchor"]) if (key in schema) violations.push(`${path}.${key}`);
|
|
108
93
|
for (const [key, value] of Object.entries(schema)) {
|
|
94
|
+
if (typeof value === "number" && !Number.isFinite(value)) return false;
|
|
109
95
|
if (!value || typeof value !== "object") continue;
|
|
110
|
-
if (schemaMapKeywords.has(key) && isRecord(value))
|
|
111
|
-
|
|
96
|
+
if (schemaMapKeywords.has(key) && isRecord(value)) {
|
|
97
|
+
for (const [schemaName, childSchema] of Object.entries(value)) if (!inspectJsonSchema(childSchema, `${path}.${key}.${schemaName}`, violations)) return false;
|
|
98
|
+
} else if (!inspectJsonSchema(value, `${path}.${key}`, violations)) return false;
|
|
112
99
|
}
|
|
113
|
-
return
|
|
100
|
+
return true;
|
|
114
101
|
}
|
|
115
102
|
/** Projects one runtime tool input schema to JSON and reports runtime incompatibilities. */
|
|
116
103
|
function projectRuntimeToolInputSchema(schema, path = "parameters") {
|
|
@@ -118,7 +105,10 @@ function projectRuntimeToolInputSchema(schema, path = "parameters") {
|
|
|
118
105
|
const violations = [...projection.violations];
|
|
119
106
|
if (!isRecord(projection.schema)) violations.push(`${path} must be a JSON object schema`);
|
|
120
107
|
else if (projection.schema.type !== void 0 && projection.schema.type !== "object") violations.push(`${path}.type must be "object"`);
|
|
121
|
-
|
|
108
|
+
if (!inspectJsonSchema(projection.schema, path, violations)) return {
|
|
109
|
+
schema: {},
|
|
110
|
+
violations: [`${path} is not a JSON value`]
|
|
111
|
+
};
|
|
122
112
|
return {
|
|
123
113
|
schema: projection.schema,
|
|
124
114
|
violations
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import "./index-CefaUGSS.mjs";
|
|
2
|
+
import { B as ProviderResponse, D as Model, J as StreamOptions, a as AssistantMessage, at as Usage } from "./types-Beemor2E.mjs";
|
|
3
|
+
import { r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-DcvAPSBe.mjs";
|
|
4
|
+
import "./event-stream-pXT3FI6X.mjs";
|
|
5
|
+
import { t as ProviderErrorProjection } from "./provider-error-CzNw4BWX.mjs";
|
|
6
|
+
//#region packages/ai/src/utils/stream-first-event-timeout.d.ts
|
|
7
|
+
type StreamStage = "responses" | "completions";
|
|
8
|
+
type FirstStreamEventTimeoutContext = {
|
|
9
|
+
provider?: string;
|
|
10
|
+
api?: string;
|
|
11
|
+
model?: string;
|
|
12
|
+
timeoutMs: number;
|
|
13
|
+
stage?: StreamStage;
|
|
14
|
+
hint?: string;
|
|
15
|
+
abort?: (reason: Error) => void;
|
|
16
|
+
onTimeout?: (reason: Error) => void;
|
|
17
|
+
};
|
|
18
|
+
type FirstStreamEventInternalOptions = {
|
|
19
|
+
firstEventTimeoutMs?: number;
|
|
20
|
+
abortFirstEventStream?: (reason: Error) => void;
|
|
21
|
+
onFirstEventTimeout?: (reason: Error) => void;
|
|
22
|
+
};
|
|
23
|
+
type FirstStreamEventAbortController = {
|
|
24
|
+
signal: AbortSignal;
|
|
25
|
+
abort: (reason: Error) => void;
|
|
26
|
+
dispose: () => void;
|
|
27
|
+
};
|
|
28
|
+
declare function getFirstStreamEventTimeoutMs(options: unknown): number | undefined;
|
|
29
|
+
declare function getFirstStreamEventTimeoutHandler(options: unknown): ((reason: Error) => void) | undefined;
|
|
30
|
+
declare function createFirstStreamEventTimeoutError(context: FirstStreamEventTimeoutContext): Error;
|
|
31
|
+
declare function createFirstStreamEventAbortController(parentSignal?: AbortSignal): FirstStreamEventAbortController;
|
|
32
|
+
declare function withFirstStreamEventTimeout<T>(stream: AsyncIterable<T>, context: FirstStreamEventTimeoutContext): AsyncIterable<T>;
|
|
33
|
+
//#endregion
|
|
34
|
+
//#region packages/ai/src/transports/transport-stream-shared.d.ts
|
|
35
|
+
type ContextUsage = NonNullable<Usage["contextUsage"]>;
|
|
36
|
+
type TransportUsage = {
|
|
37
|
+
input: number;
|
|
38
|
+
output: number;
|
|
39
|
+
cacheRead: number;
|
|
40
|
+
cacheWrite: number;
|
|
41
|
+
contextUsage?: ContextUsage;
|
|
42
|
+
totalTokens: number;
|
|
43
|
+
cost: {
|
|
44
|
+
input: number;
|
|
45
|
+
output: number;
|
|
46
|
+
cacheRead: number;
|
|
47
|
+
cacheWrite: number;
|
|
48
|
+
total: number;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
type WritableTransportStream = Pick<ReturnType<typeof createAssistantMessageEventStream>, "push" | "end">;
|
|
52
|
+
declare function sanitizeTransportPayloadText(text: string): string;
|
|
53
|
+
declare function sanitizeNonEmptyTransportPayloadText(text: string, fallback?: string): string;
|
|
54
|
+
declare function coerceTransportToolCallArguments(argumentsValue: unknown): Record<string, unknown>;
|
|
55
|
+
/** Admit only complete object-shaped terminal tool arguments; partial parsing is preview-only. */
|
|
56
|
+
declare function parseTerminalToolCallArguments(value: unknown, errorMessage?: string): Record<string, unknown>;
|
|
57
|
+
/** Validate a complete sibling set before mutating any call into executable state. */
|
|
58
|
+
declare function finalizeTerminalToolCallArguments<T extends {
|
|
59
|
+
arguments: Record<string, unknown>;
|
|
60
|
+
}>(calls: readonly T[], readArguments: (call: T) => unknown, errorMessage?: string): void;
|
|
61
|
+
declare function mergeTransportHeaders(...headerSources: Array<Record<string, string> | undefined>): Record<string, string> | undefined;
|
|
62
|
+
declare function mergeTransportMetadata<T extends Record<string, unknown>>(payload: T, metadata?: Record<string, string>): T;
|
|
63
|
+
declare function createEmptyTransportUsage(): TransportUsage;
|
|
64
|
+
declare function createWritableTransportEventStream(): {
|
|
65
|
+
eventStream: AssistantMessageEventStream;
|
|
66
|
+
stream: AssistantMessageEventStream;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Abort error to surface for an aborted `signal`.
|
|
70
|
+
*
|
|
71
|
+
* Rethrows the caller's abort reason only when it carries a `code`, so that code
|
|
72
|
+
* survives into `errorCode` on the persisted assistant message and consumers can
|
|
73
|
+
* recognize an abort's origin without matching error text. A default
|
|
74
|
+
* `abort()` reason is an uncoded DOMException that carries nothing the synthetic
|
|
75
|
+
* error does not, so it keeps the "Request was aborted" text every transport
|
|
76
|
+
* already emits rather than churning it.
|
|
77
|
+
*/
|
|
78
|
+
declare function transportAbortError(signal?: AbortSignal): Error;
|
|
79
|
+
type ProviderAcceptance = {
|
|
80
|
+
kind: "http_response";
|
|
81
|
+
status: number;
|
|
82
|
+
headers: Record<string, string>;
|
|
83
|
+
} | {
|
|
84
|
+
kind: "provider_stream_opened";
|
|
85
|
+
};
|
|
86
|
+
type ProviderAcceptanceObserver = (acceptance: ProviderAcceptance) => void;
|
|
87
|
+
type ProviderAcceptanceOptions = Pick<StreamOptions, "onResponse" | "signal">;
|
|
88
|
+
type ProviderStreamCancel = (reason: Error) => void | Promise<void>;
|
|
89
|
+
/** Attach an OpenClaw-internal provider acceptance observer to one model call. */
|
|
90
|
+
declare function withProviderAcceptanceObserver<T extends object>(options: T, observer: ProviderAcceptanceObserver): T;
|
|
91
|
+
/** Preserve the private provider acceptance observer when a built-in wrapper rebuilds options. */
|
|
92
|
+
declare function copyProviderAcceptanceObserver<T extends object>(source: unknown, target: T): T;
|
|
93
|
+
/** Report observed HTTP metadata; rejected responses use only onResponse. */
|
|
94
|
+
declare function notifyProviderHttpMetadata(params: {
|
|
95
|
+
options?: ProviderAcceptanceOptions;
|
|
96
|
+
response: ProviderResponse;
|
|
97
|
+
model: Model;
|
|
98
|
+
cancelStream: ProviderStreamCancel;
|
|
99
|
+
signal?: AbortSignal;
|
|
100
|
+
}): Promise<void>;
|
|
101
|
+
/** Report a real HTTP response before body consumption. */
|
|
102
|
+
declare function notifyProviderHttpResponse(params: {
|
|
103
|
+
options?: ProviderAcceptanceOptions;
|
|
104
|
+
response: Response;
|
|
105
|
+
model: Model;
|
|
106
|
+
cancelStream?: ProviderStreamCancel;
|
|
107
|
+
signal?: AbortSignal;
|
|
108
|
+
}): Promise<void>;
|
|
109
|
+
/** Report an accepted SDK stream when the SDK does not expose HTTP metadata. */
|
|
110
|
+
declare function notifyProviderStreamOpened(params: {
|
|
111
|
+
options?: Pick<StreamOptions, "signal">;
|
|
112
|
+
cancelStream: ProviderStreamCancel;
|
|
113
|
+
signal?: AbortSignal;
|
|
114
|
+
}): Promise<void>;
|
|
115
|
+
/** Run a provider-response hook before start/body consumption inside the first-event deadline. */
|
|
116
|
+
declare function withProviderResponseHook<T = never>(params: {
|
|
117
|
+
stream?: AsyncIterable<T>;
|
|
118
|
+
signal: AbortSignal;
|
|
119
|
+
abort: (reason: Error) => void;
|
|
120
|
+
hook?: () => void | Promise<void>;
|
|
121
|
+
onReady?: () => void;
|
|
122
|
+
}): AsyncIterable<T>;
|
|
123
|
+
declare function finalizeTransportStream(params: {
|
|
124
|
+
stream: WritableTransportStream;
|
|
125
|
+
output: AssistantMessage;
|
|
126
|
+
signal?: AbortSignal;
|
|
127
|
+
}): void;
|
|
128
|
+
/** @deprecated Use projectProviderError. v2026.7.2-beta.5 compatibility; remove after 2026.10. */
|
|
129
|
+
declare function assignTransportErrorDetails(output: AssistantMessage, error: unknown, signal?: AbortSignal): ProviderErrorProjection;
|
|
130
|
+
declare function failTransportStream(params: {
|
|
131
|
+
stream: WritableTransportStream;
|
|
132
|
+
output: AssistantMessage;
|
|
133
|
+
signal?: AbortSignal;
|
|
134
|
+
error: unknown;
|
|
135
|
+
cleanup?: () => void;
|
|
136
|
+
}): void;
|
|
137
|
+
//#endregion
|
|
138
|
+
export { FirstStreamEventInternalOptions as C, getFirstStreamEventTimeoutHandler as D, createFirstStreamEventTimeoutError as E, getFirstStreamEventTimeoutMs as O, FirstStreamEventAbortController as S, createFirstStreamEventAbortController as T, sanitizeNonEmptyTransportPayloadText as _, copyProviderAcceptanceObserver as a, withProviderAcceptanceObserver as b, failTransportStream as c, mergeTransportHeaders as d, mergeTransportMetadata as f, parseTerminalToolCallArguments as g, notifyProviderStreamOpened as h, coerceTransportToolCallArguments as i, withFirstStreamEventTimeout as k, finalizeTerminalToolCallArguments as l, notifyProviderHttpResponse as m, WritableTransportStream as n, createEmptyTransportUsage as o, notifyProviderHttpMetadata as p, assignTransportErrorDetails as r, createWritableTransportEventStream as s, ProviderAcceptance as t, finalizeTransportStream as u, sanitizeTransportPayloadText as v, FirstStreamEventTimeoutContext as w, withProviderResponseHook as x, transportAbortError as y };
|
|
@@ -1,72 +1,13 @@
|
|
|
1
1
|
import { r as createAssistantMessageEventStream } from "./event-stream-uSMZJ3FA.mjs";
|
|
2
|
-
import { n as
|
|
3
|
-
import { t as sanitizeSurrogates } from "./sanitize-unicode-
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
* ordering.
|
|
12
|
-
*/
|
|
13
|
-
/** Canonicalizes provider tool order without relying on host locale settings. */
|
|
14
|
-
function sortPromptCacheToolsByName(tools) {
|
|
15
|
-
const compareText = (left, right) => {
|
|
16
|
-
const leftText = left ?? "";
|
|
17
|
-
const rightText = right ?? "";
|
|
18
|
-
return leftText < rightText ? -1 : leftText > rightText ? 1 : 0;
|
|
19
|
-
};
|
|
20
|
-
return tools.toSorted((left, right) => compareText(left.wireName ?? left.name, right.wireName ?? right.name) || compareText(left.description, right.description));
|
|
21
|
-
}
|
|
22
|
-
/** Normalize structured prompt text before hashing or snapshot comparison. */
|
|
23
|
-
function normalizeStructuredPromptSection(text) {
|
|
24
|
-
return sanitizeSurrogates(text).replace(/\r\n?/g, "\n").replace(/[ \t]+$/gm, "").trim();
|
|
25
|
-
}
|
|
26
|
-
/** Normalize, de-dupe, and sort capability ids for stable prompt payloads. */
|
|
27
|
-
function normalizePromptCapabilityIds(capabilities) {
|
|
28
|
-
const seen = /* @__PURE__ */ new Set();
|
|
29
|
-
const normalized = [];
|
|
30
|
-
for (const capability of capabilities) {
|
|
31
|
-
const value = normalizeLowercaseStringOrEmpty(normalizeStructuredPromptSection(capability));
|
|
32
|
-
if (!value || seen.has(value)) continue;
|
|
33
|
-
seen.add(value);
|
|
34
|
-
normalized.push(value);
|
|
35
|
-
}
|
|
36
|
-
return normalized.toSorted((left, right) => left.localeCompare(right));
|
|
37
|
-
}
|
|
38
|
-
//#endregion
|
|
39
|
-
//#region packages/ai/src/utils/system-prompt-cache-boundary.ts
|
|
40
|
-
/**
|
|
41
|
-
* System prompt cache-boundary helpers.
|
|
42
|
-
*
|
|
43
|
-
* Keeps stable prompt prefixes separate from dynamic runtime additions for provider prompt caching.
|
|
44
|
-
*/
|
|
45
|
-
const SYSTEM_PROMPT_CACHE_BOUNDARY = "\n<!-- OPENCLAW_CACHE_BOUNDARY -->\n";
|
|
46
|
-
function stripSystemPromptCacheBoundary(text) {
|
|
47
|
-
return text.replaceAll(SYSTEM_PROMPT_CACHE_BOUNDARY, "\n");
|
|
48
|
-
}
|
|
49
|
-
function ensureSystemPromptCacheBoundary(systemPrompt) {
|
|
50
|
-
if (systemPrompt.trim().length === 0) return systemPrompt;
|
|
51
|
-
return systemPrompt.includes("\n<!-- OPENCLAW_CACHE_BOUNDARY -->\n") ? systemPrompt : `${systemPrompt}${SYSTEM_PROMPT_CACHE_BOUNDARY}`;
|
|
52
|
-
}
|
|
53
|
-
function splitSystemPromptCacheBoundary(text) {
|
|
54
|
-
const boundaryIndex = text.indexOf(SYSTEM_PROMPT_CACHE_BOUNDARY);
|
|
55
|
-
if (boundaryIndex === -1) return;
|
|
56
|
-
return {
|
|
57
|
-
stablePrefix: text.slice(0, boundaryIndex).trimEnd(),
|
|
58
|
-
dynamicSuffix: text.slice(boundaryIndex + 34).trimStart()
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
function prependSystemPromptAdditionAfterCacheBoundary(params) {
|
|
62
|
-
const systemPromptAddition = typeof params.systemPromptAddition === "string" ? normalizeStructuredPromptSection(params.systemPromptAddition) : "";
|
|
63
|
-
if (!systemPromptAddition) return params.systemPrompt;
|
|
64
|
-
if (params.systemPrompt.trim().length === 0) return systemPromptAddition;
|
|
65
|
-
const split = splitSystemPromptCacheBoundary(params.systemPrompt);
|
|
66
|
-
if (!split) return `${systemPromptAddition}\n\n${params.systemPrompt}`;
|
|
67
|
-
const dynamicSuffix = split.dynamicSuffix ? normalizeStructuredPromptSection(split.dynamicSuffix) : "";
|
|
68
|
-
if (!dynamicSuffix) return `${split.stablePrefix}${SYSTEM_PROMPT_CACHE_BOUNDARY}${systemPromptAddition}`;
|
|
69
|
-
return `${split.stablePrefix}${SYSTEM_PROMPT_CACHE_BOUNDARY}${systemPromptAddition}\n\n${dynamicSuffix}`;
|
|
2
|
+
import { a as asOptionalRecord, n as asNonArrayRecord, r as asNullableRecord } from "./utf16-slice-qz3nsy87.mjs";
|
|
3
|
+
import { t as sanitizeSurrogates } from "./sanitize-unicode-S6binQG-.mjs";
|
|
4
|
+
import { n as projectProviderError } from "./provider-error-BI8kIViN.mjs";
|
|
5
|
+
//#region packages/ai/src/utils/headers.ts
|
|
6
|
+
/** Converts a Headers object to a plain record for provider request handling. */
|
|
7
|
+
function headersToRecord(headers) {
|
|
8
|
+
const result = {};
|
|
9
|
+
for (const [key, value] of headers.entries()) result[key] = value;
|
|
10
|
+
return result;
|
|
70
11
|
}
|
|
71
12
|
//#endregion
|
|
72
13
|
//#region packages/ai/src/transports/json-unsafe-integers.ts
|
|
@@ -398,53 +339,4 @@ function failTransportStream(params) {
|
|
|
398
339
|
stream.end();
|
|
399
340
|
}
|
|
400
341
|
//#endregion
|
|
401
|
-
|
|
402
|
-
function buildBaseOptions(model, options, apiKey) {
|
|
403
|
-
const firstEventOptions = options;
|
|
404
|
-
return copyProviderAcceptanceObserver(options, {
|
|
405
|
-
temperature: options?.temperature,
|
|
406
|
-
maxTokens: options?.maxTokens,
|
|
407
|
-
stop: options?.stop,
|
|
408
|
-
signal: options?.signal,
|
|
409
|
-
apiKey: apiKey || options?.apiKey,
|
|
410
|
-
transport: options?.transport,
|
|
411
|
-
cacheRetention: options?.cacheRetention,
|
|
412
|
-
sessionId: options?.sessionId,
|
|
413
|
-
promptCacheKey: options?.promptCacheKey,
|
|
414
|
-
headers: options?.headers,
|
|
415
|
-
onPayload: options?.onPayload,
|
|
416
|
-
onResponse: options?.onResponse,
|
|
417
|
-
timeoutMs: options?.timeoutMs,
|
|
418
|
-
firstEventTimeoutMs: firstEventOptions?.firstEventTimeoutMs,
|
|
419
|
-
onFirstEventTimeout: firstEventOptions?.onFirstEventTimeout,
|
|
420
|
-
maxRetries: options?.maxRetries,
|
|
421
|
-
maxRetryDelayMs: options?.maxRetryDelayMs,
|
|
422
|
-
metadata: options?.metadata
|
|
423
|
-
});
|
|
424
|
-
}
|
|
425
|
-
function clampMaxTokensToModel(model, requestedMaxTokens) {
|
|
426
|
-
return requestedMaxTokens === void 0 ? void 0 : Math.max(1, Math.min(requestedMaxTokens, model.maxTokens));
|
|
427
|
-
}
|
|
428
|
-
function clampReasoning(effort) {
|
|
429
|
-
return effort === "xhigh" ? "high" : effort;
|
|
430
|
-
}
|
|
431
|
-
function adjustMaxTokensForThinking(baseMaxTokens, modelMaxTokens, reasoningLevel, customBudgets) {
|
|
432
|
-
const budgets = {
|
|
433
|
-
minimal: 1024,
|
|
434
|
-
low: 2048,
|
|
435
|
-
medium: 8192,
|
|
436
|
-
high: 16384,
|
|
437
|
-
max: 32768,
|
|
438
|
-
...customBudgets
|
|
439
|
-
};
|
|
440
|
-
const minOutputTokens = 1024;
|
|
441
|
-
let thinkingBudget = budgets[clampReasoning(reasoningLevel)];
|
|
442
|
-
const maxTokens = baseMaxTokens === void 0 ? modelMaxTokens : Math.min(baseMaxTokens + thinkingBudget, modelMaxTokens);
|
|
443
|
-
if (maxTokens <= thinkingBudget) thinkingBudget = Math.max(0, maxTokens - minOutputTokens);
|
|
444
|
-
return {
|
|
445
|
-
maxTokens,
|
|
446
|
-
thinkingBudget
|
|
447
|
-
};
|
|
448
|
-
}
|
|
449
|
-
//#endregion
|
|
450
|
-
export { splitSystemPromptCacheBoundary as A, withProviderResponseHook as C, SYSTEM_PROMPT_CACHE_BOUNDARY as D, quoteUnsafeIntegerLiterals as E, normalizePromptCapabilityIds as M, normalizeStructuredPromptSection as N, ensureSystemPromptCacheBoundary as O, sortPromptCacheToolsByName as P, withProviderAcceptanceObserver as S, parseJsonPreservingUnsafeIntegers as T, notifyProviderStreamOpened as _, assignTransportErrorDetails as a, sanitizeTransportPayloadText as b, createEmptyTransportUsage as c, finalizeTerminalToolCallArguments as d, finalizeTransportStream as f, notifyProviderHttpResponse as g, notifyProviderHttpMetadata as h, clampReasoning as i, stripSystemPromptCacheBoundary as j, prependSystemPromptAdditionAfterCacheBoundary as k, createWritableTransportEventStream as l, mergeTransportMetadata as m, buildBaseOptions as n, coerceTransportToolCallArguments as o, mergeTransportHeaders as p, clampMaxTokensToModel as r, copyProviderAcceptanceObserver as s, adjustMaxTokensForThinking as t, failTransportStream as u, parseTerminalToolCallArguments as v, parseJsonObjectPreservingUnsafeIntegers as w, transportAbortError as x, sanitizeNonEmptyTransportPayloadText as y };
|
|
342
|
+
export { headersToRecord as C, quoteUnsafeIntegerLiterals as S, transportAbortError as _, createWritableTransportEventStream as a, parseJsonObjectPreservingUnsafeIntegers as b, finalizeTransportStream as c, notifyProviderHttpMetadata as d, notifyProviderHttpResponse as f, sanitizeTransportPayloadText as g, sanitizeNonEmptyTransportPayloadText as h, createEmptyTransportUsage as i, mergeTransportHeaders as l, parseTerminalToolCallArguments as m, coerceTransportToolCallArguments as n, failTransportStream as o, notifyProviderStreamOpened as p, copyProviderAcceptanceObserver as r, finalizeTerminalToolCallArguments as s, assignTransportErrorDetails as t, mergeTransportMetadata as u, withProviderAcceptanceObserver as v, parseJsonPreservingUnsafeIntegers as x, withProviderResponseHook as y };
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as getAiTransportHost } from "./host-
|
|
3
|
-
import {
|
|
4
|
-
import { a as parseStrictFiniteNumber, n as asFiniteNumberInRange, o as parseStrictNonNegativeInteger } from "./number-coercion-H9qHik3g.mjs";
|
|
1
|
+
import { d as normalizeOptionalString, t as truncateUtf16Safe } from "./utf16-slice-qz3nsy87.mjs";
|
|
2
|
+
import { n as getAiTransportHost } from "./host-BIaiBURL.mjs";
|
|
3
|
+
import { c as parseStrictNonNegativeInteger, i as asFiniteNumberInRange, l as parseStrictPositiveInteger, s as parseStrictFiniteNumber } from "./base64-CEFBpSkN.mjs";
|
|
5
4
|
import { parseRetryAfterHttpDateMs } from "./internal/retry-after.mjs";
|
|
6
5
|
import { createHash } from "node:crypto";
|
|
7
6
|
//#region packages/ai/src/transports/transport-utils.ts
|
|
8
7
|
const MALFORMED_STREAMING_FRAGMENT_ERROR_MESSAGE = "OpenClaw transport error: malformed_streaming_fragment";
|
|
9
8
|
const NON_LATIN_RE = /[\u2E80-\u9FFF\uA000-\uA4FF\uAC00-\uD7AF\uF900-\uFAFF\uFF01-\uFF60\uFFE0-\uFFE6\u{20000}-\u{2FA1F}]/gu;
|
|
10
9
|
const CJK_SURROGATE_HIGH_RE = /[\uD840-\uD87E][\uDC00-\uDFFF]/g;
|
|
10
|
+
function parsePositiveInteger(value) {
|
|
11
|
+
if (typeof value === "number" && Number.isFinite(value) && value > 0) return Math.floor(value);
|
|
12
|
+
return typeof value === "string" ? parseStrictPositiveInteger(value) : void 0;
|
|
13
|
+
}
|
|
11
14
|
function sha256Hex(value) {
|
|
12
15
|
return createHash("sha256").update(value).digest("hex");
|
|
13
16
|
}
|
|
@@ -22,14 +25,11 @@ function redactIdentifier(value, opts) {
|
|
|
22
25
|
function redactSensitiveText(text, _options) {
|
|
23
26
|
return getAiTransportHost().redactToolPayloadText(text);
|
|
24
27
|
}
|
|
25
|
-
function resolveSecretSentinel(value) {
|
|
26
|
-
return getAiTransportHost().resolveSecretSentinel(value);
|
|
27
|
-
}
|
|
28
28
|
function resolveModelHeaderSentinels(model) {
|
|
29
29
|
if (!model.headers) return model;
|
|
30
30
|
let headers;
|
|
31
31
|
for (const [name, value] of Object.entries(model.headers)) {
|
|
32
|
-
const resolved = resolveSecretSentinel(value);
|
|
32
|
+
const resolved = getAiTransportHost().resolveSecretSentinel(value);
|
|
33
33
|
if (resolved !== value) {
|
|
34
34
|
headers ??= { ...model.headers };
|
|
35
35
|
headers[name] = resolved;
|
|
@@ -96,7 +96,7 @@ async function readChunkWithIdleTimeout(reader, timeoutMs, onIdleTimeout) {
|
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
async function readResponseTextSnippet(response, options) {
|
|
99
|
-
const maxBytes = options?.maxBytes ??
|
|
99
|
+
const maxBytes = options?.maxBytes ?? 8192;
|
|
100
100
|
const maxChars = options?.maxChars ?? 200;
|
|
101
101
|
const reader = response.body?.getReader();
|
|
102
102
|
if (!reader) return;
|
|
@@ -135,4 +135,4 @@ async function readResponseTextSnippet(response, options) {
|
|
|
135
135
|
return truncated ? `${collapsed}…` : collapsed;
|
|
136
136
|
}
|
|
137
137
|
//#endregion
|
|
138
|
-
export { isGoogleGemini3FlashModel as a,
|
|
138
|
+
export { isGoogleGemini3FlashModel as a, parseRetryAfterSeconds as c, redactSensitiveText as d, resolveModelHeaderSentinels as f, isCodeModeModelVisibleToolName as i, readResponseTextSnippet as l, supportsModelTools as m, createAbortError as n, isGoogleGemini3ProModel as o, sha256Hex as p, estimateStringChars as r, parsePositiveInteger as s, MALFORMED_STREAMING_FRAGMENT_ERROR_MESSAGE as t, redactIdentifier as u };
|