@openclaw/ai 2026.9.4 → 2026.9.6

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 (101) hide show
  1. package/README.md +1 -1
  2. package/dist/{anthropic-C4Qu4H0Z.mjs → anthropic-DZQ_7gD1.mjs} +37 -38
  3. package/dist/{anthropic-payload-policy-BZ8umAbk.d.mts → anthropic-payload-policy-DyfwikYJ.d.mts} +4 -4
  4. package/dist/{anthropic-stream-reducer-CILWF7JD.mjs → anthropic-stream-reducer-D6ZI1wwj.mjs} +70 -50
  5. package/dist/{api-registry-ByUwIR0e.d.mts → api-registry-C2T3lTV7.d.mts} +2 -2
  6. package/dist/{assistant-output-tLt4H-iQ.mjs → assistant-output-DM1JBNs1.mjs} +1 -1
  7. package/dist/{azure-openai-responses-BAlqlKKc.mjs → azure-openai-responses-DS86GYzq.mjs} +6 -9
  8. package/dist/{base64-D-su8YVo.mjs → base64-CPmadnUf.mjs} +12 -12
  9. package/dist/credential-redaction-BKv49aiv.d.mts +24 -0
  10. package/dist/{diagnostics-QuErwCIl.mjs → diagnostics-CH8j2wIG.mjs} +139 -7
  11. package/dist/{diagnostics-CPeq9F7y.mjs → diagnostics-DzrF1h4J.mjs} +18 -1
  12. package/dist/diagnostics.d.mts +11 -24
  13. package/dist/diagnostics.mjs +4 -4
  14. package/dist/event-stream-C0nsgbj2.d.mts +1 -0
  15. package/dist/{event-stream-Bt5Y4Pav.d.mts → event-stream-CjnIZZst.d.mts} +1 -1
  16. package/dist/event-stream.d.mts +2 -2
  17. package/dist/expect-lbe3Hgrh.mjs +8 -0
  18. package/dist/{google-DPBAOaOW.mjs → google-BZJFjhuC.mjs} +6 -9
  19. package/dist/{google-messages-6JkpHrhJ.mjs → google-messages-DB7GKkDk.mjs} +3 -3
  20. package/dist/{google-shared-BvBeW9aq.mjs → google-shared-Bok4I6zB.mjs} +13 -13
  21. package/dist/{google-vertex-k-TMCAYD.mjs → google-vertex-3eVNR2qW.mjs} +5 -8
  22. package/dist/{host-4atIX-2V.d.mts → host-DH-Z-LDb.d.mts} +5 -3
  23. package/dist/{host-policy-Zcg_cNz8.mjs → host-policy-DZO3oPPk.mjs} +1 -1
  24. package/dist/{host-B8YfDGd4.mjs → host-yTvBrYM2.mjs} +63 -31
  25. package/dist/{index-DdD3qerf.d.mts → index-C25RT6bP.d.mts} +37 -14
  26. package/dist/index.d.mts +7 -8
  27. package/dist/index.mjs +5 -6
  28. package/dist/internal/anthropic.d.mts +13 -10
  29. package/dist/internal/anthropic.mjs +5 -5
  30. package/dist/internal/openai-completions-compat.d.mts +2 -0
  31. package/dist/internal/openai-completions-compat.mjs +2 -0
  32. package/dist/internal/openai-responses-payload-policy.d.mts +2 -2
  33. package/dist/internal/openai-responses-payload-policy.mjs +2 -2
  34. package/dist/internal/openai.d.mts +24 -53
  35. package/dist/internal/openai.mjs +12 -9
  36. package/dist/internal/runtime.d.mts +6 -8
  37. package/dist/internal/runtime.mjs +6 -10
  38. package/dist/internal/shared.d.mts +7 -5
  39. package/dist/internal/shared.mjs +4 -3
  40. package/dist/internal/tool-schema.d.mts +4 -4
  41. package/dist/internal/tool-schema.mjs +2 -2
  42. package/dist/{mistral-CxUZ1jUb.mjs → mistral-C_13dVBn.mjs} +9 -13
  43. package/dist/{model-transport-url-DKocrEsb.d.mts → model-transport-url-C5f59L3Y.d.mts} +1 -1
  44. package/dist/{openai-chatgpt-responses-CgO6kZfo.mjs → openai-chatgpt-responses-sTxPl4zM.mjs} +150 -83
  45. package/dist/{openai-completions-yJuk7eis.mjs → openai-completions-BO6D_hrB.mjs} +11 -12
  46. package/dist/{openai-prompt-cache-Bds-n_9Q.mjs → openai-completions-compat-CUollwl6.mjs} +5 -50
  47. package/dist/{openai-completions-compat-eHgh5UPE.d.mts → openai-completions-compat-DfJG1wSO.d.mts} +4 -4
  48. package/dist/{openai-completions-stream-Da2vvl-S.mjs → openai-completions-stream-BpuJ0ZOA.mjs} +117 -106
  49. package/dist/{openai-prompt-cache-B4eYo2-I.d.mts → openai-prompt-cache-C4RHdN4n.d.mts} +2 -2
  50. package/dist/openai-prompt-cache-CjV_2IRI.mjs +46 -0
  51. package/dist/{openai-provider-client-S2gCrM2Z.mjs → openai-provider-client-BP8J1aeg.mjs} +2 -2
  52. package/dist/openai-reasoning-effort-ash8dPrd.mjs +243 -0
  53. package/dist/{openai-responses-DaYwH05E.mjs → openai-responses-BJ_IEoMU.mjs} +8 -12
  54. package/dist/{openai-responses-compaction-window-CIhBAkkq.mjs → openai-responses-compaction-window-BiNCT0bS.mjs} +20 -62
  55. package/dist/{openai-responses-contracts-BjBAqAg_.d.mts → openai-responses-contracts-B1ENJFpI.d.mts} +9 -5
  56. package/dist/openai-responses-contracts-DWrfMODE.mjs +81 -0
  57. package/dist/{openai-responses-payload-policy-rLRPsSmB.d.mts → openai-responses-payload-policy-C7GsA1y0.d.mts} +5 -3
  58. package/dist/openai-responses-prompt-observer-internal-DPHWgbBH.mjs +198 -0
  59. package/dist/openai-responses-request-lifecycle-DFuyO1pQ.mjs +36 -0
  60. package/dist/{openai-responses-shared-B8RdBPCv.mjs → openai-responses-shared-DvSqtJ6_.mjs} +859 -581
  61. package/dist/openai-responses-terminal-usage-BNFbvY9f.d.mts +47 -0
  62. package/dist/{openai-tool-schema-CzjyYXun.mjs → openai-tool-schema-D4BMcj2D.mjs} +262 -162
  63. package/dist/{openai-transport-params-9aPuV5YY.mjs → openai-transport-params-DZKOTSfH.mjs} +157 -47
  64. package/dist/{positive-integer-41zhOdcV.mjs → positive-integer-BiUxrd71.mjs} +1 -1
  65. package/dist/{provider-error-BA-v_tKd.mjs → provider-error-CRhW7lkJ.mjs} +139 -44
  66. package/dist/{provider-error-CzNw4BWX.d.mts → provider-error-xumb1V3F.d.mts} +3 -1
  67. package/dist/{provider-options-Ceqv1OKk.d.mts → provider-options-DZYq53lj.d.mts} +12 -7
  68. package/dist/{provider-replay-context-CJ_YvcEW.mjs → provider-replay-context-DPr3w20a.mjs} +1 -1
  69. package/dist/{provider-transcript-transform-V5YzU9zh.mjs → provider-transcript-transform-BTocjCRs.mjs} +1 -1
  70. package/dist/{provider-transport-turn-state-D5EXOFL2.mjs → provider-transport-turn-state-lrXEFkYr.mjs} +1 -1
  71. package/dist/{provider-types-CVjKjsuq.d.mts → provider-types-w1rEqrGP.d.mts} +3 -3
  72. package/dist/provider-types.d.mts +6 -7
  73. package/dist/providers.d.mts +2 -2
  74. package/dist/providers.mjs +10 -10
  75. package/dist/{reasoning-tag-text-partitioner-BcR5pztD.mjs → reasoning-tag-text-partitioner-Di38crhI.mjs} +167 -40
  76. package/dist/{simple-options-BQbb4yQL.mjs → simple-options-np1XPuhm.mjs} +5 -3
  77. package/dist/{usage-cost-BNWbbXav.mjs → src-DwGYYyZp.mjs} +18 -11
  78. package/dist/{stream-first-event-timeout-2hfrquuz.mjs → stream-first-event-timeout-BeptfRL6.mjs} +1 -1
  79. package/dist/{string-normalization-CmLIasuf.mjs → string-normalization-J9ZiLfGO.mjs} +13 -1
  80. package/dist/tool-schema-json-projection-CD9c_fK8.mjs +134 -0
  81. package/dist/{transport-stream-shared-zHll9BxO.mjs → transport-stream-shared-B5RioB_Q.mjs} +16 -24
  82. package/dist/{transport-stream-shared-DNvmoWnv.d.mts → transport-stream-shared-B7Z9oCYg.d.mts} +5 -5
  83. package/dist/{transport-utils-zrYjICLZ.mjs → transport-utils-03Qi0CN2.mjs} +3 -3
  84. package/dist/transports.d.mts +27 -13
  85. package/dist/transports.mjs +168 -462
  86. package/dist/types-DTvddOfm.d.mts +1 -0
  87. package/dist/{types-Ntv5z2g2.d.mts → types-qZFbaDbK.d.mts} +49 -3
  88. package/dist/types.d.mts +6 -7
  89. package/dist/types.mjs +4 -5
  90. package/dist/{validation-B0t_G2H6.d.mts → validation-DhQhmt6t.d.mts} +1 -1
  91. package/dist/{validation-BDzVDnTs.mjs → validation-Dw7cb6BV.mjs} +1 -0
  92. package/dist/validation.d.mts +1 -1
  93. package/dist/validation.mjs +1 -1
  94. package/package.json +11 -6
  95. package/dist/diagnostics-DnPnOui6.d.mts +0 -29
  96. package/dist/event-stream-C3WGFsum.d.mts +0 -1
  97. package/dist/openai-responses-contracts-DDOHA62Y.mjs +0 -245
  98. package/dist/openai-responses-prompt-observer-internal-f8J7wpsk.mjs +0 -32
  99. package/dist/src-DDmEryvj.mjs +0 -2
  100. package/dist/tool-schema-json-projection-ClptDdAO.mjs +0 -82
  101. package/dist/types-DlfwzH3T.d.mts +0 -1
@@ -0,0 +1,243 @@
1
+ import { n as normalizeLowercaseStringOrEmpty } from "./string-coerce-fsri9iCu.mjs";
2
+ import { i as asOptionalRecord } from "./record-coerce-DwRYMj3t.mjs";
3
+ import { n as normalizeUniqueTrimmedStringList } from "./string-normalization-J9ZiLfGO.mjs";
4
+ //#region packages/llm-core/src/model-data.ts
5
+ const MODEL_DATA_APIS = [
6
+ "openai-completions",
7
+ "openai-responses",
8
+ "openai-chatgpt-responses",
9
+ "anthropic-messages",
10
+ "google-generative-ai",
11
+ "google-vertex",
12
+ "github-copilot",
13
+ "bedrock-converse-stream",
14
+ "ollama",
15
+ "pi-messages",
16
+ "azure-openai-responses"
17
+ ];
18
+ const MODEL_DATA_THINKING_FORMATS = [
19
+ "openai",
20
+ "openrouter",
21
+ "deepseek",
22
+ "together",
23
+ "qwen",
24
+ "qwen-chat-template",
25
+ "zai"
26
+ ];
27
+ const MODEL_DATA_THINKING_LEVELS = [
28
+ "off",
29
+ "minimal",
30
+ "low",
31
+ "medium",
32
+ "high",
33
+ "xhigh",
34
+ "max"
35
+ ];
36
+ [...MODEL_DATA_APIS];
37
+ [...MODEL_DATA_THINKING_FORMATS];
38
+ /** Model-level thinking settings carried by provider catalog metadata. */
39
+ const MODEL_CATALOG_THINKING_LEVELS = [...MODEL_DATA_THINKING_LEVELS];
40
+ const OPENAI_THINKING_APIS = /* @__PURE__ */ new Set([
41
+ "openai-completions",
42
+ "openai-responses",
43
+ "openai-chatgpt-responses",
44
+ "azure-openai-responses"
45
+ ]);
46
+ /** Managed API aliases retain the source adapter's reasoning contract. */
47
+ function resolveOpenAIThinkingApi(api) {
48
+ if (typeof api !== "string") return;
49
+ const sourceApi = api.replace(/^openclaw-(.+)-transport$/u, "$1");
50
+ return OPENAI_THINKING_APIS.has(sourceApi) ? sourceApi : void 0;
51
+ }
52
+ /** Map keys describe logical choices; provider-native values retain their spelling. */
53
+ function listMappedModelThinkingLevels(model) {
54
+ const compat = asOptionalRecord(model.compat);
55
+ const efforts = compat?.supportedReasoningEfforts;
56
+ const api = resolveOpenAIThinkingApi(model.api);
57
+ const format = compat?.thinkingFormat;
58
+ if (!api || api === "openai-completions" && (format === "qwen" || format === "qwen-chat-template" || format === "zai") || compat?.supportsReasoningEffort === false || Array.isArray(efforts) && efforts.length === 0) return [];
59
+ const mapping = asOptionalRecord(compat?.reasoningEffortMap);
60
+ const mapped = new Set(Object.entries(mapping ?? {}).flatMap(([level, effort]) => typeof effort === "string" && effort.trim() ? [level.trim().toLowerCase()] : []));
61
+ return MODEL_CATALOG_THINKING_LEVELS.filter((level) => mapped.has(level));
62
+ }
63
+ //#endregion
64
+ //#region packages/ai/src/providers/openai-reasoning-effort.ts
65
+ /**
66
+ * OpenAI-compatible reasoning-effort normalization. Different GPT families
67
+ * expose different accepted effort enums, so callers map requested values here
68
+ * before constructing provider payloads.
69
+ */
70
+ const ENABLED_REASONING_EFFORTS = [
71
+ "minimal",
72
+ "low",
73
+ "medium",
74
+ "high",
75
+ "xhigh",
76
+ "max"
77
+ ];
78
+ const GPT_5_REASONING_EFFORTS = [
79
+ "minimal",
80
+ "low",
81
+ "medium",
82
+ "high"
83
+ ];
84
+ const GPT_51_REASONING_EFFORTS = [
85
+ "none",
86
+ "low",
87
+ "medium",
88
+ "high"
89
+ ];
90
+ const GPT_52_REASONING_EFFORTS = [
91
+ "none",
92
+ "low",
93
+ "medium",
94
+ "high",
95
+ "xhigh"
96
+ ];
97
+ const GPT_56_REASONING_EFFORTS = [
98
+ "none",
99
+ "low",
100
+ "medium",
101
+ "high",
102
+ "xhigh",
103
+ "max"
104
+ ];
105
+ const GPT_6_ASTRA_REASONING_EFFORTS = [
106
+ "low",
107
+ "medium",
108
+ "high",
109
+ "xhigh",
110
+ "max"
111
+ ];
112
+ const GPT_CODEX_REASONING_EFFORTS = [
113
+ "low",
114
+ "medium",
115
+ "high",
116
+ "xhigh"
117
+ ];
118
+ const GPT_PRO_REASONING_EFFORTS = [
119
+ "medium",
120
+ "high",
121
+ "xhigh"
122
+ ];
123
+ const GPT_5_PRO_REASONING_EFFORTS = ["high"];
124
+ const GPT_51_CODEX_MAX_REASONING_EFFORTS = [
125
+ "none",
126
+ "medium",
127
+ "high",
128
+ "xhigh"
129
+ ];
130
+ const GPT_51_CODEX_MINI_REASONING_EFFORTS = ["medium"];
131
+ const GENERIC_REASONING_EFFORTS = [
132
+ "low",
133
+ "medium",
134
+ "high"
135
+ ];
136
+ const CANONICAL_REASONING_EFFORTS = /* @__PURE__ */ new Set([
137
+ "none",
138
+ ...ENABLED_REASONING_EFFORTS,
139
+ "off"
140
+ ]);
141
+ function normalizeModelId(id) {
142
+ return normalizeLowercaseStringOrEmpty(id ?? "").replace(/-\d{4}-\d{2}-\d{2}$/u, "");
143
+ }
144
+ /** Return whether a model is the GPT-5.4 mini family. */
145
+ function isOpenAIGpt54MiniModel(model) {
146
+ const id = normalizeModelId(typeof model.id === "string" ? model.id : void 0);
147
+ return /^gpt-5\.4-mini(?:-|$)/u.test(id);
148
+ }
149
+ /** Return whether a model is the GPT-5.5 family. */
150
+ function isOpenAIGpt55Model(model) {
151
+ const id = normalizeModelId(typeof model.id === "string" ? model.id : void 0);
152
+ const name = normalizeModelId(typeof model.name === "string" ? model.name : void 0);
153
+ return /^gpt-5\.5(?:-|$)/u.test(id) || /^gpt-5\.5(?:\s|\(|-|$)/u.test(name);
154
+ }
155
+ /** Return whether a model is the GPT-5.6 family. */
156
+ function isOpenAIGpt56Model(model) {
157
+ const id = normalizeModelId(typeof model.id === "string" ? model.id : void 0);
158
+ const name = normalizeModelId(typeof model.name === "string" ? model.name : void 0);
159
+ return /^gpt-5\.6(?:-|$)/u.test(id) || /^gpt-5\.6(?:\s|\(|-|$)/u.test(name);
160
+ }
161
+ /** Return whether a model has a known GPT-6 reasoning and sampling contract. */
162
+ function isOpenAIGpt6Model(model) {
163
+ const id = normalizeModelId(typeof model.id === "string" ? model.id : void 0);
164
+ return id === "gpt-6-astra" || id === "gpt-6-sol" || id === "gpt-6-luna";
165
+ }
166
+ /** Normalize user-facing reasoning effort names to API effort names. */
167
+ function normalizeOpenAIReasoningEffort(effort) {
168
+ const trimmed = effort.trim();
169
+ const folded = trimmed.toLowerCase();
170
+ return CANONICAL_REASONING_EFFORTS.has(folded) ? folded : trimmed;
171
+ }
172
+ function readCompatReasoningEfforts(compat) {
173
+ if (!compat || typeof compat !== "object") return;
174
+ if (compat.supportsReasoningEffort === false) return [];
175
+ const raw = compat.supportedReasoningEfforts;
176
+ if (!Array.isArray(raw)) return;
177
+ return normalizeUniqueTrimmedStringList(raw);
178
+ }
179
+ function isDisabledReasoningEffort(effort) {
180
+ return effort === "none" || effort === "off";
181
+ }
182
+ /** Resolve the reasoning efforts accepted by a specific OpenAI-compatible model. */
183
+ function resolveOpenAISupportedReasoningEfforts(model) {
184
+ return resolveOpenAIModelReasoningEfforts(model) ?? GENERIC_REASONING_EFFORTS;
185
+ }
186
+ /** Read a declared or known model contract, leaving unknown compatible models unspecified. */
187
+ function resolveOpenAIModelReasoningEfforts(model) {
188
+ const compatEfforts = readCompatReasoningEfforts(model.compat);
189
+ if (compatEfforts) return compatEfforts;
190
+ const id = normalizeModelId(typeof model.id === "string" ? model.id : void 0);
191
+ const api = resolveOpenAIThinkingApi(model.api);
192
+ const supportsMax = api !== "openai-completions";
193
+ if (isOpenAIGpt6Model(model) && api !== "azure-openai-responses") {
194
+ if (id === "gpt-6-astra") return supportsMax ? GPT_6_ASTRA_REASONING_EFFORTS : GPT_CODEX_REASONING_EFFORTS;
195
+ return supportsMax ? GPT_56_REASONING_EFFORTS : GPT_52_REASONING_EFFORTS;
196
+ }
197
+ if (/^gpt-5\.6(?:-|$)/u.test(id)) return supportsMax ? GPT_56_REASONING_EFFORTS : GPT_52_REASONING_EFFORTS;
198
+ if (id === "gpt-5.1-codex-mini") return GPT_51_CODEX_MINI_REASONING_EFFORTS;
199
+ if (id === "gpt-5.1-codex-max") return GPT_51_CODEX_MAX_REASONING_EFFORTS;
200
+ if (/^gpt-5(?:\.\d+)?-codex(?:-|$)/u.test(id)) return GPT_CODEX_REASONING_EFFORTS;
201
+ if (id === "gpt-5-pro") return GPT_5_PRO_REASONING_EFFORTS;
202
+ if (/^gpt-5\.[2-9](?:\.\d+)?-pro(?:-|$)/u.test(id)) return GPT_PRO_REASONING_EFFORTS;
203
+ if (/^gpt-5\.[2-9](?:\.\d+)?(?:-|$)/u.test(id)) return GPT_52_REASONING_EFFORTS;
204
+ if (/^gpt-5\.1(?:-|$)/u.test(id)) return GPT_51_REASONING_EFFORTS;
205
+ if (/^gpt-5(?:-|$)/u.test(id)) return GPT_5_REASONING_EFFORTS;
206
+ }
207
+ /**
208
+ * Return whether a model accepts temperature. GPT-5.6 and known GPT-6 models
209
+ * reject it with a 400; catalog compat can override per model.
210
+ */
211
+ function supportsOpenAITemperature(model) {
212
+ const compat = model.compat;
213
+ if (compat && typeof compat === "object") {
214
+ const declared = compat.supportsTemperature;
215
+ if (typeof declared === "boolean") return declared;
216
+ }
217
+ const id = normalizeModelId(typeof model.id === "string" ? model.id : void 0);
218
+ return (!isOpenAIGpt6Model(model) || resolveOpenAIThinkingApi(model.api) === "azure-openai-responses") && !/^gpt-5\.6(?:-|$)/u.test(id);
219
+ }
220
+ /** Return whether a model accepts a requested reasoning effort. */
221
+ function supportsOpenAIReasoningEffort(model, effort) {
222
+ return resolveOpenAISupportedReasoningEfforts(model).includes(normalizeOpenAIReasoningEffort(effort));
223
+ }
224
+ /** Read provider mappings without folding provider-native labels. */
225
+ function resolveOpenAIReasoningEffortMapping(effort, mapping) {
226
+ const requested = normalizeOpenAIReasoningEffort(effort);
227
+ return mapping?.[requested] ?? (mapping && CANONICAL_REASONING_EFFORTS.has(requested) ? Object.entries(mapping).find(([key]) => normalizeOpenAIReasoningEffort(key) === requested)?.[1] : void 0);
228
+ }
229
+ /** Resolve a requested reasoning effort to the closest value supported by the model. */
230
+ function resolveOpenAIReasoningEffortForModel(params) {
231
+ const requested = normalizeOpenAIReasoningEffort(params.effort);
232
+ const mapped = resolveOpenAIReasoningEffortMapping(requested, params.fallbackMap);
233
+ const normalized = mapped === void 0 ? requested : mapped.trim();
234
+ const supported = resolveOpenAISupportedReasoningEfforts(params.model);
235
+ if (supported.includes(normalized)) return normalized;
236
+ if (requested === "off" && supported.includes("none")) return "none";
237
+ if (isDisabledReasoningEffort(requested) || isDisabledReasoningEffort(normalized)) return;
238
+ const requestedRank = ENABLED_REASONING_EFFORTS.findIndex((effort) => effort === normalized);
239
+ const ranked = ENABLED_REASONING_EFFORTS.filter((effort) => supported.includes(effort));
240
+ return (requestedRank < 0 ? void 0 : ranked.findLast((effort) => ENABLED_REASONING_EFFORTS.indexOf(effort) <= requestedRank) ?? ranked[0]) ?? supported.find((effort) => !isDisabledReasoningEffort(normalizeOpenAIReasoningEffort(effort)));
241
+ }
242
+ //#endregion
243
+ export { normalizeOpenAIReasoningEffort as a, resolveOpenAIReasoningEffortMapping as c, supportsOpenAITemperature as d, MODEL_CATALOG_THINKING_LEVELS as f, isOpenAIGpt6Model as i, resolveOpenAISupportedReasoningEfforts as l, resolveOpenAIThinkingApi as m, isOpenAIGpt55Model as n, resolveOpenAIModelReasoningEfforts as o, listMappedModelThinkingLevels as p, isOpenAIGpt56Model as r, resolveOpenAIReasoningEffortForModel as s, isOpenAIGpt54MiniModel as t, supportsOpenAIReasoningEffort as u };
@@ -1,14 +1,15 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-BhDjJH2R.mjs";
2
2
  import { t as AssistantMessageEventStream } from "./event-stream-D8PARQfL.mjs";
3
- import { n as clampOpenAIPromptCacheKey, r as resolveOpenAIPromptCacheParams, s as resolveOpenAICompletionsCompat } from "./openai-prompt-cache-Bds-n_9Q.mjs";
3
+ import { n as clampOpenAIPromptCacheKey, r as resolveOpenAIPromptCacheParams } from "./openai-prompt-cache-CjV_2IRI.mjs";
4
+ import { i as resolveOpenAICompletionsCompat } from "./openai-completions-compat-CUollwl6.mjs";
4
5
  import { t as resolveCacheRetention } from "./cache-retention-0x979a5V.mjs";
5
- import { n as buildBaseOptions } from "./simple-options-BQbb4yQL.mjs";
6
+ import { n as buildBaseOptions } from "./simple-options-np1XPuhm.mjs";
7
+ import { g as resolveOpenAISimpleReasoningEffort } from "./openai-transport-params-DZKOTSfH.mjs";
6
8
  import { n as getEnvApiKey } from "./env-api-keys-bktO00EJ.mjs";
7
- import { C as supportsOpenAITemperature } from "./openai-responses-contracts-DDOHA62Y.mjs";
8
- import { n as resolveProviderSimpleCompletionHeaders } from "./provider-transport-turn-state-D5EXOFL2.mjs";
9
- import { a as resolveResponsesReasoningEffort, i as createResponsesAssistantOutput, n as applyResponsesServiceTierPricing, r as convertResponsesMessages, s as runResponsesStreamLifecycle, t as applyCommonResponsesParams } from "./openai-responses-shared-B8RdBPCv.mjs";
9
+ import { n as resolveProviderSimpleCompletionHeaders } from "./provider-transport-turn-state-lrXEFkYr.mjs";
10
+ import { a as runResponsesStreamLifecycle, i as createResponsesAssistantOutput, n as applyResponsesServiceTierPricing, r as convertResponsesMessages, t as applyCommonResponsesParams } from "./openai-responses-shared-DvSqtJ6_.mjs";
10
11
  import { n as hasCopilotVisionInput, t as buildCopilotDynamicHeaders } from "./github-copilot-headers-B37TB3rB.mjs";
11
- import { t as createOpenAIProviderClient } from "./openai-provider-client-S2gCrM2Z.mjs";
12
+ import { t as createOpenAIProviderClient } from "./openai-provider-client-BP8J1aeg.mjs";
12
13
  //#region packages/ai/src/providers/openai-responses.ts
13
14
  var openai_responses_exports = /* @__PURE__ */ __exportAll({
14
15
  streamOpenAIResponses: () => streamOpenAIResponses,
@@ -21,9 +22,6 @@ function getCompat(model) {
21
22
  sendSessionIdHeader: model.compat?.sendSessionIdHeader ?? true
22
23
  };
23
24
  }
24
- /**
25
- * Generate function for OpenAI Responses API
26
- */
27
25
  const streamOpenAIResponses = (model, context, options) => {
28
26
  const stream = new AssistantMessageEventStream();
29
27
  const output = createResponsesAssistantOutput(model);
@@ -53,7 +51,7 @@ const streamSimpleOpenAIResponses = (model, context, options) => {
53
51
  return streamOpenAIResponses(model, context, {
54
52
  ...base,
55
53
  authProfileId: replayOptions?.authProfileId,
56
- reasoningEffort: resolveResponsesReasoningEffort(model, options?.reasoning),
54
+ reasoningEffort: resolveOpenAISimpleReasoningEffort(model, options?.reasoning),
57
55
  replayResponsesItemIds: replayOptions?.replayResponsesItemIds
58
56
  });
59
57
  };
@@ -92,8 +90,6 @@ function buildParams(model, context, options, replayMode = "checkpoint") {
92
90
  ...resolveOpenAIPromptCacheParams(model, cacheRetention, compat),
93
91
  store: false
94
92
  };
95
- if (options?.maxTokens) params.max_output_tokens = options?.maxTokens;
96
- if (options?.temperature !== void 0 && supportsOpenAITemperature(model)) params.temperature = options?.temperature;
97
93
  if (options?.serviceTier !== void 0) params.service_tier = options.serviceTier;
98
94
  applyCommonResponsesParams(params, model, context, options, { setDefaultReasoningOff: model.provider !== "github-copilot" });
99
95
  return params;
@@ -1,8 +1,9 @@
1
1
  import { i as normalizeOptionalLowercaseString, n as normalizeLowercaseStringOrEmpty, s as readStringValue } from "./string-coerce-fsri9iCu.mjs";
2
2
  import { o as isRecord } from "./record-coerce-DwRYMj3t.mjs";
3
- import { t as canonicalizeBase64 } from "./base64-D-su8YVo.mjs";
4
- import { t as parsePositiveInteger } from "./positive-integer-41zhOdcV.mjs";
5
- import { S as supportsOpenAIReasoningEffort, i as OPENAI_RESPONSES_APIS } from "./openai-responses-contracts-DDOHA62Y.mjs";
3
+ import { u as supportsOpenAIReasoningEffort } from "./openai-reasoning-effort-ash8dPrd.mjs";
4
+ import { t as canonicalizeBase64 } from "./base64-CPmadnUf.mjs";
5
+ import { t as parsePositiveInteger } from "./positive-integer-BiUxrd71.mjs";
6
+ import { i as OPENAI_RESPONSES_APIS } from "./openai-responses-contracts-DWrfMODE.mjs";
6
7
  import { t as createSseByteGuard } from "./streaming-byte-guard-CC-HMn_u.mjs";
7
8
  //#region packages/model-catalog-core/src/provider-id.ts
8
9
  function normalizeProviderId(provider) {
@@ -20,33 +21,6 @@ const OPENAI_RESPONSES_PROVIDERS = /* @__PURE__ */ new Set([
20
21
  "azure-openai",
21
22
  "azure-openai-responses"
22
23
  ]);
23
- const LOCAL_ENDPOINT_HOSTS = /* @__PURE__ */ new Set([
24
- "localhost",
25
- "127.0.0.1",
26
- "::1",
27
- "[::1]"
28
- ]);
29
- const MODELSTUDIO_NATIVE_BASE_URLS = /* @__PURE__ */ new Set([
30
- "https://coding-intl.dashscope.aliyuncs.com/v1",
31
- "https://coding.dashscope.aliyuncs.com/v1",
32
- "https://dashscope.aliyuncs.com/compatible-mode/v1",
33
- "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
34
- ]);
35
- const MOONSHOT_NATIVE_BASE_URLS = /* @__PURE__ */ new Set(["https://api.moonshot.ai/v1", "https://api.moonshot.cn/v1"]);
36
- function normalizeComparableBaseUrl(value) {
37
- const trimmed = readStringValue(value)?.trim();
38
- if (!trimmed) return;
39
- const parsedValue = /^[a-z0-9.[\]-]+(?::\d+)?(?:[/?#].*)?$/i.test(trimmed) ? `https://${trimmed}` : trimmed;
40
- try {
41
- const url = new URL(parsedValue);
42
- if (url.protocol !== "http:" && url.protocol !== "https:") return;
43
- url.hash = "";
44
- url.search = "";
45
- return url.toString().replace(/\/+$/, "").toLowerCase();
46
- } catch {
47
- return;
48
- }
49
- }
50
24
  function resolveUrlHostname(value) {
51
25
  const trimmed = readStringValue(value)?.trim();
52
26
  if (!trimmed) return;
@@ -60,45 +34,22 @@ function resolveUrlHostname(value) {
60
34
  }
61
35
  }
62
36
  }
63
- function hostMatchesSuffix(host, suffix) {
64
- return suffix.startsWith(".") || suffix.startsWith("-") ? host.endsWith(suffix) : host === suffix || host.endsWith(`.${suffix}`);
65
- }
66
- function isLocalEndpointHost(host) {
67
- return LOCAL_ENDPOINT_HOSTS.has(host) || host.endsWith(".localhost") || host.endsWith(".local") || host.endsWith(".internal");
68
- }
69
- function resolveBundledOpenAIResponsesEndpointClass(baseUrl) {
37
+ function resolveOpenAIResponsesEndpointClass(baseUrl) {
70
38
  const trimmed = readStringValue(baseUrl)?.trim();
71
39
  if (!trimmed) return "default";
72
40
  const host = resolveUrlHostname(trimmed);
73
- if (!host) return "invalid";
74
- const comparableBaseUrl = normalizeComparableBaseUrl(trimmed);
41
+ if (!host) return "custom";
75
42
  switch (host) {
76
- case "api.anthropic.com": return "anthropic-public";
77
- case "api.cerebras.ai": return "cerebras-native";
78
- case "llm.chutes.ai": return "chutes-native";
79
- case "api.deepseek.com": return "deepseek-native";
80
- case "api.groq.com": return "groq-native";
81
- case "api.mistral.ai": return "mistral-public";
82
43
  case "api.openai.com": return "openai-public";
83
44
  case "chatgpt.com": return "openai";
84
- case "generativelanguage.googleapis.com": return "google-generative-ai";
85
- case "aiplatform.googleapis.com": return "google-vertex";
86
45
  case "api.x.ai": return "xai-native";
87
- case "api.z.ai": return "zai-native";
88
46
  }
89
- if (hostMatchesSuffix(host, ".githubcopilot.com")) return "github-copilot-native";
90
47
  if ([
91
48
  ".openai.azure.com",
92
49
  ".cognitiveservices.azure.com",
93
50
  ".services.ai.azure.com",
94
51
  ".api.cognitive.microsoft.com"
95
- ].some((suffix) => hostMatchesSuffix(host, suffix))) return "azure-openai";
96
- if (hostMatchesSuffix(host, "openrouter.ai")) return "openrouter";
97
- if (hostMatchesSuffix(host, "opencode.ai")) return "opencode-native";
98
- if (hostMatchesSuffix(host, "-aiplatform.googleapis.com")) return "google-vertex";
99
- if (comparableBaseUrl && MOONSHOT_NATIVE_BASE_URLS.has(comparableBaseUrl)) return "moonshot-native";
100
- if (comparableBaseUrl && MODELSTUDIO_NATIVE_BASE_URLS.has(comparableBaseUrl)) return "modelstudio-native";
101
- if (isLocalEndpointHost(host)) return "local";
52
+ ].some((suffix) => host.endsWith(suffix))) return "azure-openai";
102
53
  return "custom";
103
54
  }
104
55
  function isOpenAIResponsesApi(api) {
@@ -113,7 +64,7 @@ function resolveOpenAIResponsesPayloadCapabilities(model) {
113
64
  const provider = normalizeOptionalLowercaseString(model.provider);
114
65
  const api = normalizeOptionalLowercaseString(model.api);
115
66
  const isOpenAIProvider = provider === "openai";
116
- const endpointClass = resolveBundledOpenAIResponsesEndpointClass(model.baseUrl);
67
+ const endpointClass = resolveOpenAIResponsesEndpointClass(model.baseUrl);
117
68
  const isResponsesApi = isOpenAIResponsesApi(api);
118
69
  const usesConfiguredBaseUrl = endpointClass !== "default";
119
70
  const usesKnownNativeOpenAIEndpoint = endpointClass === "openai-public" || endpointClass === "openai" || endpointClass === "azure-openai";
@@ -123,9 +74,11 @@ function resolveOpenAIResponsesPayloadCapabilities(model) {
123
74
  const promptCacheKeySupport = readCompatPayloadBoolean(model.compat, "supportsPromptCacheKey");
124
75
  const shouldStripResponsesPromptCache = promptCacheKeySupport === true ? false : promptCacheKeySupport === false ? isResponsesApi : isResponsesApi && usesExplicitProxyLikeEndpoint;
125
76
  const supportsResponsesStoreField = readCompatPayloadBoolean(model.compat, "supportsStore") !== false && isResponsesApi;
77
+ const explicitContinuationOptIn = (api === "openai-responses" || api === "openclaw-openai-responses-transport") && supportsResponsesStoreField && provider !== "azure-openai" && provider !== "azure-openai-responses" && readCompatPayloadBoolean(model.compat, "supportsResponsesContinuation") === true;
126
78
  return {
127
79
  allowsOpenAIServiceTier: provider === "openai" && (api === "openai-responses" || api === "openclaw-openai-responses-transport") && endpointClass === "openai-public" || isOpenAIProvider && (api === "openai-chatgpt-responses" || api === "openclaw-openai-chatgpt-responses-transport" || api === "openai-responses" || api === "openclaw-openai-responses-transport") && endpointClass === "openai",
128
80
  allowsResponsesStore: supportsResponsesStoreField && api !== "openai-chatgpt-responses" && api !== "openclaw-openai-chatgpt-responses-transport" && provider !== void 0 && OPENAI_RESPONSES_PROVIDERS.has(provider) && usesKnownNativeOpenAIEndpoint,
81
+ explicitContinuationOptIn,
129
82
  shouldStripResponsesPromptCache,
130
83
  supportsResponsesStoreField,
131
84
  usesKnownNativeOpenAIRoute,
@@ -150,11 +103,14 @@ function resolveOpenAIResponsesServerCompactionPlan(model, extraParams) {
150
103
  threshold: enabled ? parsePositiveInteger(extraParams?.responsesCompactThreshold) ?? resolveOpenAIResponsesCompactThreshold(model) : void 0
151
104
  };
152
105
  }
153
- /** Resolve the manual Responses compact-endpoint gate for one route. */
154
- function resolveOpenAIResponsesCompactEndpointPlan(model, extraParams) {
106
+ /** Resolve the Responses compact-endpoint gate for one route and compaction purpose. */
107
+ function resolveOpenAIResponsesCompactEndpointPlan(model, extraParams, purpose = "manual") {
155
108
  const configured = extraParams?.responsesCompactEndpoint;
156
109
  const provider = typeof model.provider === "string" ? normalizeProviderId(model.provider) : "";
157
- return { enabled: isOpenAIResponsesApi(normalizeOptionalLowercaseString(model.api)) && (configured === true || configured !== false && (provider === "xai" || provider === "x-ai") && resolveBundledOpenAIResponsesEndpointClass(model.baseUrl) === "xai-native") };
110
+ const api = normalizeOptionalLowercaseString(model.api);
111
+ const endpointClass = resolveOpenAIResponsesEndpointClass(model.baseUrl);
112
+ const enabledByDefault = (provider === "xai" || provider === "x-ai") && endpointClass === "xai-native" || purpose === "budget" && provider === "openai" && api === "openai-responses" && endpointClass === "openai-public";
113
+ return { enabled: isOpenAIResponsesApi(api) && configured !== false && (configured === true || enabledByDefault) };
158
114
  }
159
115
  function stripDisabledOpenAIReasoningPayload(payloadObj) {
160
116
  const reasoning = payloadObj.reasoning;
@@ -174,15 +130,17 @@ function stripInputItemStatuses(input) {
174
130
  function resolveOpenAIResponsesPayloadPolicy(model, options = {}) {
175
131
  const capabilities = resolveOpenAIResponsesPayloadCapabilities(model);
176
132
  const storeMode = options.storeMode ?? "provider-policy";
177
- const explicitStore = storeMode === "preserve" ? void 0 : storeMode === "disable" ? capabilities.supportsResponsesStoreField ? false : void 0 : capabilities.allowsResponsesStore ? true : void 0;
133
+ const explicitStore = storeMode === "preserve" ? void 0 : storeMode === "disable" || storeMode === "transport-default" && !capabilities.explicitContinuationOptIn ? capabilities.supportsResponsesStoreField ? false : void 0 : capabilities.allowsResponsesStore || capabilities.explicitContinuationOptIn ? true : void 0;
178
134
  const isResponsesApi = isOpenAIResponsesApi(normalizeOptionalLowercaseString(model.api));
179
- const shouldStripDisabledReasoningPayload = isResponsesApi && (!capabilities.usesKnownNativeOpenAIRoute || !supportsOpenAIReasoningEffort(model, "none"));
135
+ const shouldStripDisabledReasoningPayload = isResponsesApi && !supportsOpenAIReasoningEffort(capabilities.usesKnownNativeOpenAIRoute ? model : { compat: model.compat }, "none");
180
136
  const shouldStripInputStatus = isResponsesApi && !capabilities.usesKnownNativeOpenAIRoute;
181
137
  const serverCompactionPlan = resolveOpenAIResponsesServerCompactionPlan(model, options.extraParams);
182
138
  const usesInstructionsField = readCompatPayloadBoolean(model.compat, "supportsInstructions") ?? capabilities.usesVerifiedInstructionsEndpoint;
183
139
  return {
184
140
  allowsServiceTier: capabilities.allowsOpenAIServiceTier,
185
141
  compactThreshold: serverCompactionPlan.threshold,
142
+ defaultManagedReasoningEffort: capabilities.usesKnownNativeOpenAIRoute && !shouldStripDisabledReasoningPayload && model.provider !== "github-copilot" ? "none" : void 0,
143
+ explicitContinuationOptIn: capabilities.explicitContinuationOptIn,
186
144
  explicitStore,
187
145
  shouldStripDisabledReasoningPayload,
188
146
  shouldStripInputStatus,
@@ -1,7 +1,11 @@
1
- import "./index-DdD3qerf.mjs";
2
- import { O as Model, n as Api } from "./types-Ntv5z2g2.mjs";
3
- import { a as BaseOpenAIStreamOptions, f as OpenAIReasoningEffort } from "./provider-options-Ceqv1OKk.mjs";
1
+ import "./index-C25RT6bP.mjs";
2
+ import { O as Model, j as ModelThinkingLevel, n as Api } from "./types-qZFbaDbK.mjs";
3
+ import { a as BaseOpenAIStreamOptions, f as OpenAIReasoningEffort } from "./provider-options-DZYq53lj.mjs";
4
+ import "./types-DTvddOfm.mjs";
4
5
  import { ResponseCompactionItem, ResponseCreateParamsStreaming, ResponseInputItem } from "openai/resources/responses/responses.js";
6
+ //#region packages/ai/src/providers/openai-request-reasoning.d.ts
7
+ type OpenAIRequestReasoningEffort = ModelThinkingLevel | "none";
8
+ //#endregion
5
9
  //#region packages/ai/src/transports/openai-responses-compaction-window.d.ts
6
10
  type OpenAIResponsesCompactionOutput = Array<ResponseInputItem.Message | ReplayableResponseCompactionItem>;
7
11
  /** Read the saved canonical window only when it still matches its opaque checkpoint. */
@@ -27,7 +31,7 @@ type OpenAIResponsesReasoningReplayMetadata = {
27
31
  authProfileHash?: string;
28
32
  };
29
33
  type OpenAIResponsesOptions = BaseOpenAIStreamOptions & {
30
- reasoning?: OpenAIReasoningEffort;
34
+ reasoning?: OpenAIRequestReasoningEffort;
31
35
  reasoningEffort?: OpenAIReasoningEffort;
32
36
  reasoningSummary?: "auto" | "detailed" | "concise" | null;
33
37
  replayResponsesItemIds?: boolean;
@@ -49,4 +53,4 @@ declare const responsesPromptObserver: {
49
53
  copy(source: object | undefined, target: object): void;
50
54
  };
51
55
  //#endregion
52
- export { ResponsesPromptObservation as a, readOpenAIResponsesCompactionWindow as c, ReplayableResponseCompactionItem as i, OpenAIResponsesOptions as n, responsesPromptObserver as o, OpenAIResponsesReasoningReplayMetadata as r, OpenAIResponsesCompactionOutput as s, OPENAI_RESPONSES_APIS as t };
56
+ export { ResponsesPromptObservation as a, readOpenAIResponsesCompactionWindow as c, ReplayableResponseCompactionItem as i, OpenAIRequestReasoningEffort as l, OpenAIResponsesOptions as n, responsesPromptObserver as o, OpenAIResponsesReasoningReplayMetadata as r, OpenAIResponsesCompactionOutput as s, OPENAI_RESPONSES_APIS as t };
@@ -0,0 +1,81 @@
1
+ import { r as PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE } from "./types-LFWwv0cF.mjs";
2
+ import { o as isRecord } from "./record-coerce-DwRYMj3t.mjs";
3
+ //#region packages/ai/src/transports/openai-responses-contracts.ts
4
+ const DEFAULT_AZURE_OPENAI_API_VERSION = "preview";
5
+ const OPENAI_CODEX_RESPONSES_DEFAULT_INSTRUCTIONS = "Follow the user request.";
6
+ const AZURE_RESPONSES_FIRST_EVENT_TIMEOUT_MS = 3e4;
7
+ const RESPONSE_FAILED_NO_DETAILS_MESSAGE = "Unknown error (no error details in response)";
8
+ const OPENAI_RESPONSES_REASONING_REPLAY_META_KEY = "__openclaw_replay";
9
+ const OPENAI_RESPONSES_REASONING_REPLAY_BLOCK_META_KEY = "openclawReasoningReplay";
10
+ const OPENAI_RESPONSES_COMPACTION_REPLAY_TYPE = "openai-responses-compaction";
11
+ const OPENAI_RESPONSES_RETAINED_COMPACTION_REPLAY_TYPE = "openai-responses-retained-compaction";
12
+ const OPENAI_RESPONSES_APIS = /* @__PURE__ */ new Set([
13
+ "openai-responses",
14
+ "azure-openai-responses",
15
+ "openai-chatgpt-responses",
16
+ "openclaw-openai-responses-transport",
17
+ "openclaw-openai-chatgpt-responses-transport",
18
+ "openclaw-azure-openai-responses-transport"
19
+ ]);
20
+ var OpenAIResponsesWebSocketPreDispatchError = class extends Error {
21
+ constructor(cause) {
22
+ super("OpenAI Responses WebSocket failed before request dispatch", { cause });
23
+ this.name = "OpenAIResponsesWebSocketPreDispatchError";
24
+ }
25
+ };
26
+ var OpenAIResponsesWebSocketPostDispatchError = class extends Error {
27
+ constructor(cause) {
28
+ super("OpenAI Responses WebSocket failed after request dispatch; outcome is unknown", { cause });
29
+ this.code = PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE;
30
+ this.name = "OpenAIResponsesWebSocketPostDispatchError";
31
+ }
32
+ };
33
+ var OpenAIResponsesWebSocketServerError = class extends Error {
34
+ constructor(code, status, param, message, cause) {
35
+ super(message, { cause });
36
+ this.code = code;
37
+ this.status = status;
38
+ this.param = param;
39
+ this.name = "OpenAIResponsesWebSocketServerError";
40
+ }
41
+ };
42
+ var OpenAIResponsesWebSocketSafeRetryError = class extends OpenAIResponsesWebSocketServerError {};
43
+ function readWebSocketServerError(value) {
44
+ if (!isRecord(value) || value.type !== "error") return;
45
+ const details = isRecord(value.error) ? value.error : value;
46
+ if (typeof details.code !== "string" || typeof details.message !== "string") return;
47
+ const rawStatus = value.status ?? value.status_code;
48
+ return {
49
+ code: details.code,
50
+ message: details.message,
51
+ param: typeof details.param === "string" ? details.param : null,
52
+ status: typeof rawStatus === "number" ? rawStatus : void 0
53
+ };
54
+ }
55
+ function isPreviousResponseRejection(error) {
56
+ return error.code === "previous_response_not_found" || error.code === "unsupported_parameter" && error.param === "previous_response_id";
57
+ }
58
+ function parseOpenAIResponsesWebSocketServerError(cause) {
59
+ if (!isRecord(cause)) return;
60
+ let details = readWebSocketServerError(cause.error) ?? readWebSocketServerError(cause);
61
+ if (!details && typeof cause.message === "string") try {
62
+ details = readWebSocketServerError(JSON.parse(cause.message));
63
+ } catch {}
64
+ if (!details) return;
65
+ return new (isPreviousResponseRejection(details) || details.code === "websocket_connection_limit_reached" || details.code === "invalid_encrypted_content" || details.code === "thinking_signature_invalid" ? OpenAIResponsesWebSocketSafeRetryError : OpenAIResponsesWebSocketServerError)(details.code, details.status, details.param, details.message, cause);
66
+ }
67
+ const PROMPT_OBSERVER = Symbol("openaiResponsesPromptObserver");
68
+ const responsesPromptObserver = {
69
+ set(options, observer) {
70
+ Reflect.set(options, PROMPT_OBSERVER, observer);
71
+ },
72
+ get(options) {
73
+ return Reflect.get(options, PROMPT_OBSERVER);
74
+ },
75
+ copy(source, target) {
76
+ const observer = source && responsesPromptObserver.get(source);
77
+ if (observer) responsesPromptObserver.set(target, observer);
78
+ }
79
+ };
80
+ //#endregion
81
+ export { OPENAI_RESPONSES_COMPACTION_REPLAY_TYPE as a, OPENAI_RESPONSES_RETAINED_COMPACTION_REPLAY_TYPE as c, OpenAIResponsesWebSocketSafeRetryError as d, RESPONSE_FAILED_NO_DETAILS_MESSAGE as f, responsesPromptObserver as h, OPENAI_RESPONSES_APIS as i, OpenAIResponsesWebSocketPostDispatchError as l, parseOpenAIResponsesWebSocketServerError as m, DEFAULT_AZURE_OPENAI_API_VERSION as n, OPENAI_RESPONSES_REASONING_REPLAY_BLOCK_META_KEY as o, isPreviousResponseRejection as p, OPENAI_CODEX_RESPONSES_DEFAULT_INSTRUCTIONS as r, OPENAI_RESPONSES_REASONING_REPLAY_META_KEY as s, AZURE_RESPONSES_FIRST_EVENT_TIMEOUT_MS as t, OpenAIResponsesWebSocketPreDispatchError as u };
@@ -10,13 +10,15 @@ type OpenAIResponsesPayloadModel = {
10
10
  };
11
11
  type OpenAIResponsesPayloadPolicyOptions = {
12
12
  extraParams?: Record<string, unknown>;
13
- storeMode?: "provider-policy" | "disable" | "preserve";
13
+ storeMode?: "provider-policy" | "transport-default" | "disable" | "preserve";
14
14
  enablePromptCacheStripping?: boolean;
15
15
  enableServerCompaction?: boolean;
16
16
  };
17
17
  type OpenAIResponsesPayloadPolicy = {
18
18
  allowsServiceTier: boolean;
19
19
  compactThreshold: number | undefined;
20
+ defaultManagedReasoningEffort: "none" | undefined;
21
+ explicitContinuationOptIn: boolean;
20
22
  explicitStore: boolean | undefined;
21
23
  shouldStripDisabledReasoningPayload: boolean;
22
24
  shouldStripInputStatus: boolean;
@@ -30,8 +32,8 @@ declare function resolveOpenAIResponsesServerCompactionPlan(model: OpenAIRespons
30
32
  enabled: boolean;
31
33
  threshold: number | undefined;
32
34
  };
33
- /** Resolve the manual Responses compact-endpoint gate for one route. */
34
- declare function resolveOpenAIResponsesCompactEndpointPlan(model: OpenAIResponsesPayloadModel, extraParams?: Record<string, unknown>): {
35
+ /** Resolve the Responses compact-endpoint gate for one route and compaction purpose. */
36
+ declare function resolveOpenAIResponsesCompactEndpointPlan(model: OpenAIResponsesPayloadModel, extraParams?: Record<string, unknown>, purpose?: "manual" | "budget"): {
35
37
  enabled: boolean;
36
38
  };
37
39
  /** Resolve payload mutation policy for one OpenAI Responses-style model endpoint. */