codex-multi-auth 2.10.0 → 2.12.0

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 (43) hide show
  1. package/.codex-plugin/plugin.json +1 -1
  2. package/README.md +1 -1
  3. package/config/README.md +3 -1
  4. package/config/codex-legacy.json +300 -0
  5. package/config/codex-modern.json +96 -0
  6. package/dist/lib/capability-policy.d.ts.map +1 -1
  7. package/dist/lib/capability-policy.js +18 -2
  8. package/dist/lib/config.d.ts.map +1 -1
  9. package/dist/lib/config.js +5 -2
  10. package/dist/lib/constants.d.ts +9 -0
  11. package/dist/lib/constants.d.ts.map +1 -1
  12. package/dist/lib/constants.js +29 -0
  13. package/dist/lib/context-budget/model-context-windows.d.ts +1 -1
  14. package/dist/lib/context-budget/model-context-windows.d.ts.map +1 -1
  15. package/dist/lib/context-budget/model-context-windows.js +12 -0
  16. package/dist/lib/entitlement-cache.d.ts.map +1 -1
  17. package/dist/lib/entitlement-cache.js +2 -1
  18. package/dist/lib/model-capability-matrix.d.ts.map +1 -1
  19. package/dist/lib/model-capability-matrix.js +9 -1
  20. package/dist/lib/policy/runtime-policy.d.ts +9 -1
  21. package/dist/lib/policy/runtime-policy.d.ts.map +1 -1
  22. package/dist/lib/policy/runtime-policy.js +1 -0
  23. package/dist/lib/request/error-classification.d.ts.map +1 -1
  24. package/dist/lib/request/error-classification.js +45 -4
  25. package/dist/lib/request/helpers/model-map.d.ts.map +1 -1
  26. package/dist/lib/request/helpers/model-map.js +181 -0
  27. package/dist/lib/usage/ledger.d.ts +1 -1
  28. package/dist/lib/usage/ledger.d.ts.map +1 -1
  29. package/dist/lib/usage/ledger.js +9 -0
  30. package/dist/lib/usage/pricing.d.ts +17 -2
  31. package/dist/lib/usage/pricing.d.ts.map +1 -1
  32. package/dist/lib/usage/pricing.js +72 -1
  33. package/dist/lib/usage/redaction.d.ts +1 -1
  34. package/dist/lib/usage/redaction.d.ts.map +1 -1
  35. package/dist/lib/usage/redaction.js +13 -0
  36. package/dist/lib/usage/types.d.ts +33 -0
  37. package/dist/lib/usage/types.d.ts.map +1 -1
  38. package/dist/lib/usage/types.js +28 -1
  39. package/dist/lib/usage/usage-extraction.d.ts +2 -1
  40. package/dist/lib/usage/usage-extraction.d.ts.map +1 -1
  41. package/dist/lib/usage/usage-extraction.js +44 -4
  42. package/package.json +1 -1
  43. package/scripts/codex.js +153 -2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-multi-auth",
3
- "version": "2.10.0",
3
+ "version": "2.12.0",
4
4
  "description": "Install and operate codex-multi-auth for the official @openai/codex CLI with multi-account OAuth rotation, switching, health checks, and recovery tools.",
5
5
  "interface": {
6
6
  "composerIcon": "./assets/codex-multi-auth-icon.svg"
package/README.md CHANGED
@@ -406,7 +406,7 @@ codex-multi-auth doctor --json
406
406
 
407
407
  ## Release Notes
408
408
 
409
- - Current stable: [docs/releases/v2.10.0.md](docs/releases/v2.10.0.md) — install via `npm i -g codex-multi-auth`
409
+ - Current stable: [docs/releases/v2.12.0.md](docs/releases/v2.12.0.md) — install via `npm i -g codex-multi-auth`
410
410
  - Previous stable: [docs/releases/v2.8.3.md](docs/releases/v2.8.3.md)
411
411
  - Previous stable: [docs/releases/v2.8.2.md](docs/releases/v2.8.2.md)
412
412
  - Previous stable: [docs/releases/v2.7.1.md](docs/releases/v2.7.1.md)
package/config/README.md CHANGED
@@ -17,7 +17,9 @@ These files are optional model/provider templates for host/plugin configurations
17
17
 
18
18
  ## Defaults Included
19
19
 
20
- - Current documented OpenAI/Codex model families (`gpt-5.6-sol`/`terra`/`luna`, `gpt-5.5`, `gpt-5.4`, and `gpt-5.3-codex`)
20
+ - Current documented OpenAI/Codex model families: GPT-6 Astra (`gpt-6-astra`, `gpt-6-astra-aeon`), then `gpt-5.6-sol`/`terra`/`luna`, `gpt-5.5`, `gpt-5.4`, and `gpt-5.3-codex`
21
+ - The Astra entries carry `limit.context: 272000`, OpenAI's stable Codex context value at launch. The GPT-5.6 entries still carry the pre-cut `372000` and were left alone here; change them only alongside a deliberate review, since the value feeds a picker rather than the context budget guard (which refuses to estimate either family)
22
+ - The Daybreak cyber models resolve at the code level but are deliberately absent from these templates, matching their hidden visibility in the upstream Codex picker
21
23
  - `store: false`
22
24
  - `include: ["reasoning.encrypted_content"]`
23
25
  - Sensible fallback behavior for unsupported model entitlements
@@ -15,6 +15,306 @@
15
15
  "store": false
16
16
  },
17
17
  "models": {
18
+ "gpt-6-astra-low": {
19
+ "name": "GPT 6 Astra Low (OAuth)",
20
+ "limit": {
21
+ "context": 272000,
22
+ "output": 128000
23
+ },
24
+ "modalities": {
25
+ "input": [
26
+ "text",
27
+ "image"
28
+ ],
29
+ "output": [
30
+ "text"
31
+ ]
32
+ },
33
+ "options": {
34
+ "reasoningEffort": "low",
35
+ "reasoningSummary": "auto",
36
+ "textVerbosity": "medium",
37
+ "include": [
38
+ "reasoning.encrypted_content"
39
+ ],
40
+ "store": false
41
+ }
42
+ },
43
+ "gpt-6-astra-medium": {
44
+ "name": "GPT 6 Astra Medium (OAuth)",
45
+ "limit": {
46
+ "context": 272000,
47
+ "output": 128000
48
+ },
49
+ "modalities": {
50
+ "input": [
51
+ "text",
52
+ "image"
53
+ ],
54
+ "output": [
55
+ "text"
56
+ ]
57
+ },
58
+ "options": {
59
+ "reasoningEffort": "medium",
60
+ "reasoningSummary": "auto",
61
+ "textVerbosity": "medium",
62
+ "include": [
63
+ "reasoning.encrypted_content"
64
+ ],
65
+ "store": false
66
+ }
67
+ },
68
+ "gpt-6-astra-high": {
69
+ "name": "GPT 6 Astra High (OAuth)",
70
+ "limit": {
71
+ "context": 272000,
72
+ "output": 128000
73
+ },
74
+ "modalities": {
75
+ "input": [
76
+ "text",
77
+ "image"
78
+ ],
79
+ "output": [
80
+ "text"
81
+ ]
82
+ },
83
+ "options": {
84
+ "reasoningEffort": "high",
85
+ "reasoningSummary": "detailed",
86
+ "textVerbosity": "medium",
87
+ "include": [
88
+ "reasoning.encrypted_content"
89
+ ],
90
+ "store": false
91
+ }
92
+ },
93
+ "gpt-6-astra-xhigh": {
94
+ "name": "GPT 6 Astra Extra High (OAuth)",
95
+ "limit": {
96
+ "context": 272000,
97
+ "output": 128000
98
+ },
99
+ "modalities": {
100
+ "input": [
101
+ "text",
102
+ "image"
103
+ ],
104
+ "output": [
105
+ "text"
106
+ ]
107
+ },
108
+ "options": {
109
+ "reasoningEffort": "xhigh",
110
+ "reasoningSummary": "detailed",
111
+ "textVerbosity": "medium",
112
+ "include": [
113
+ "reasoning.encrypted_content"
114
+ ],
115
+ "store": false
116
+ }
117
+ },
118
+ "gpt-6-astra-max": {
119
+ "name": "GPT 6 Astra Max (OAuth)",
120
+ "limit": {
121
+ "context": 272000,
122
+ "output": 128000
123
+ },
124
+ "modalities": {
125
+ "input": [
126
+ "text",
127
+ "image"
128
+ ],
129
+ "output": [
130
+ "text"
131
+ ]
132
+ },
133
+ "options": {
134
+ "reasoningEffort": "max",
135
+ "reasoningSummary": "detailed",
136
+ "textVerbosity": "medium",
137
+ "include": [
138
+ "reasoning.encrypted_content"
139
+ ],
140
+ "store": false
141
+ }
142
+ },
143
+ "gpt-6-astra-ultra": {
144
+ "name": "GPT 6 Astra Ultra (OAuth)",
145
+ "limit": {
146
+ "context": 272000,
147
+ "output": 128000
148
+ },
149
+ "modalities": {
150
+ "input": [
151
+ "text",
152
+ "image"
153
+ ],
154
+ "output": [
155
+ "text"
156
+ ]
157
+ },
158
+ "options": {
159
+ "reasoningEffort": "ultra",
160
+ "reasoningSummary": "detailed",
161
+ "textVerbosity": "medium",
162
+ "include": [
163
+ "reasoning.encrypted_content"
164
+ ],
165
+ "store": false
166
+ }
167
+ },
168
+ "gpt-6-astra-aeon-low": {
169
+ "name": "GPT 6 Astra Aeon Low (OAuth)",
170
+ "limit": {
171
+ "context": 272000,
172
+ "output": 128000
173
+ },
174
+ "modalities": {
175
+ "input": [
176
+ "text",
177
+ "image"
178
+ ],
179
+ "output": [
180
+ "text"
181
+ ]
182
+ },
183
+ "options": {
184
+ "reasoningEffort": "low",
185
+ "reasoningSummary": "auto",
186
+ "textVerbosity": "medium",
187
+ "include": [
188
+ "reasoning.encrypted_content"
189
+ ],
190
+ "store": false
191
+ }
192
+ },
193
+ "gpt-6-astra-aeon-medium": {
194
+ "name": "GPT 6 Astra Aeon Medium (OAuth)",
195
+ "limit": {
196
+ "context": 272000,
197
+ "output": 128000
198
+ },
199
+ "modalities": {
200
+ "input": [
201
+ "text",
202
+ "image"
203
+ ],
204
+ "output": [
205
+ "text"
206
+ ]
207
+ },
208
+ "options": {
209
+ "reasoningEffort": "medium",
210
+ "reasoningSummary": "auto",
211
+ "textVerbosity": "medium",
212
+ "include": [
213
+ "reasoning.encrypted_content"
214
+ ],
215
+ "store": false
216
+ }
217
+ },
218
+ "gpt-6-astra-aeon-high": {
219
+ "name": "GPT 6 Astra Aeon High (OAuth)",
220
+ "limit": {
221
+ "context": 272000,
222
+ "output": 128000
223
+ },
224
+ "modalities": {
225
+ "input": [
226
+ "text",
227
+ "image"
228
+ ],
229
+ "output": [
230
+ "text"
231
+ ]
232
+ },
233
+ "options": {
234
+ "reasoningEffort": "high",
235
+ "reasoningSummary": "detailed",
236
+ "textVerbosity": "medium",
237
+ "include": [
238
+ "reasoning.encrypted_content"
239
+ ],
240
+ "store": false
241
+ }
242
+ },
243
+ "gpt-6-astra-aeon-xhigh": {
244
+ "name": "GPT 6 Astra Aeon Extra High (OAuth)",
245
+ "limit": {
246
+ "context": 272000,
247
+ "output": 128000
248
+ },
249
+ "modalities": {
250
+ "input": [
251
+ "text",
252
+ "image"
253
+ ],
254
+ "output": [
255
+ "text"
256
+ ]
257
+ },
258
+ "options": {
259
+ "reasoningEffort": "xhigh",
260
+ "reasoningSummary": "detailed",
261
+ "textVerbosity": "medium",
262
+ "include": [
263
+ "reasoning.encrypted_content"
264
+ ],
265
+ "store": false
266
+ }
267
+ },
268
+ "gpt-6-astra-aeon-max": {
269
+ "name": "GPT 6 Astra Aeon Max (OAuth)",
270
+ "limit": {
271
+ "context": 272000,
272
+ "output": 128000
273
+ },
274
+ "modalities": {
275
+ "input": [
276
+ "text",
277
+ "image"
278
+ ],
279
+ "output": [
280
+ "text"
281
+ ]
282
+ },
283
+ "options": {
284
+ "reasoningEffort": "max",
285
+ "reasoningSummary": "detailed",
286
+ "textVerbosity": "medium",
287
+ "include": [
288
+ "reasoning.encrypted_content"
289
+ ],
290
+ "store": false
291
+ }
292
+ },
293
+ "gpt-6-astra-aeon-ultra": {
294
+ "name": "GPT 6 Astra Aeon Ultra (OAuth)",
295
+ "limit": {
296
+ "context": 272000,
297
+ "output": 128000
298
+ },
299
+ "modalities": {
300
+ "input": [
301
+ "text",
302
+ "image"
303
+ ],
304
+ "output": [
305
+ "text"
306
+ ]
307
+ },
308
+ "options": {
309
+ "reasoningEffort": "ultra",
310
+ "reasoningSummary": "detailed",
311
+ "textVerbosity": "medium",
312
+ "include": [
313
+ "reasoning.encrypted_content"
314
+ ],
315
+ "store": false
316
+ }
317
+ },
18
318
  "gpt-5.6-sol-low": {
19
319
  "name": "GPT 5.6 Sol Low (OAuth)",
20
320
  "limit": {
@@ -15,6 +15,102 @@
15
15
  "store": false
16
16
  },
17
17
  "models": {
18
+ "gpt-6-astra": {
19
+ "name": "GPT 6 Astra (OAuth)",
20
+ "limit": {
21
+ "context": 272000,
22
+ "output": 128000
23
+ },
24
+ "modalities": {
25
+ "input": [
26
+ "text",
27
+ "image"
28
+ ],
29
+ "output": [
30
+ "text"
31
+ ]
32
+ },
33
+ "variants": {
34
+ "low": {
35
+ "reasoningEffort": "low",
36
+ "reasoningSummary": "auto",
37
+ "textVerbosity": "medium"
38
+ },
39
+ "medium": {
40
+ "reasoningEffort": "medium",
41
+ "reasoningSummary": "auto",
42
+ "textVerbosity": "medium"
43
+ },
44
+ "high": {
45
+ "reasoningEffort": "high",
46
+ "reasoningSummary": "detailed",
47
+ "textVerbosity": "medium"
48
+ },
49
+ "xhigh": {
50
+ "reasoningEffort": "xhigh",
51
+ "reasoningSummary": "detailed",
52
+ "textVerbosity": "medium"
53
+ },
54
+ "max": {
55
+ "reasoningEffort": "max",
56
+ "reasoningSummary": "detailed",
57
+ "textVerbosity": "medium"
58
+ },
59
+ "ultra": {
60
+ "reasoningEffort": "ultra",
61
+ "reasoningSummary": "detailed",
62
+ "textVerbosity": "medium"
63
+ }
64
+ }
65
+ },
66
+ "gpt-6-astra-aeon": {
67
+ "name": "GPT 6 Astra Aeon (OAuth)",
68
+ "limit": {
69
+ "context": 272000,
70
+ "output": 128000
71
+ },
72
+ "modalities": {
73
+ "input": [
74
+ "text",
75
+ "image"
76
+ ],
77
+ "output": [
78
+ "text"
79
+ ]
80
+ },
81
+ "variants": {
82
+ "low": {
83
+ "reasoningEffort": "low",
84
+ "reasoningSummary": "auto",
85
+ "textVerbosity": "medium"
86
+ },
87
+ "medium": {
88
+ "reasoningEffort": "medium",
89
+ "reasoningSummary": "auto",
90
+ "textVerbosity": "medium"
91
+ },
92
+ "high": {
93
+ "reasoningEffort": "high",
94
+ "reasoningSummary": "detailed",
95
+ "textVerbosity": "medium"
96
+ },
97
+ "xhigh": {
98
+ "reasoningEffort": "xhigh",
99
+ "reasoningSummary": "detailed",
100
+ "textVerbosity": "medium"
101
+ },
102
+ "max": {
103
+ "reasoningEffort": "max",
104
+ "reasoningSummary": "detailed",
105
+ "textVerbosity": "medium"
106
+ },
107
+ "ultra": {
108
+ "reasoningEffort": "ultra",
109
+ "reasoningSummary": "detailed",
110
+ "textVerbosity": "medium"
111
+ }
112
+ }
113
+ },
18
114
  "gpt-5.6-sol": {
19
115
  "name": "GPT 5.6 Sol (OAuth)",
20
116
  "limit": {
@@ -1 +1 @@
1
- {"version":3,"file":"capability-policy.d.ts","sourceRoot":"","sources":["../../lib/capability-policy.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,wBAAwB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAyDD,qBAAa,qBAAqB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAE9D,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,IAAI;IAkBxE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,IAAI;IAgBxE,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,IAAI;IAgB5E,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM;IAiBrE,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI;IAc/E,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAYxC,OAAO,CAAC,aAAa;CASrB"}
1
+ {"version":3,"file":"capability-policy.d.ts","sourceRoot":"","sources":["../../lib/capability-policy.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,wBAAwB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAyED,qBAAa,qBAAqB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAE9D,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,IAAI;IAkBxE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,IAAI;IAgBxE,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,IAAI;IAgB5E,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM;IAiBrE,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI;IAc/E,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAYxC,OAAO,CAAC,aAAa;CASrB"}
@@ -1,4 +1,5 @@
1
1
  import { getNormalizedModel, resolveNormalizedModel, } from "./request/helpers/model-map.js";
2
+ import { stripModelEffortSuffix } from "./constants.js";
2
3
  const MAX_ENTRIES = 2048;
3
4
  const PASSIVE_RECOVERY_PER_MIN = 0.5;
4
5
  /**
@@ -22,7 +23,22 @@ function normalizeModel(model) {
22
23
  ? (trimmedInput.split("/").pop() ?? trimmedInput)
23
24
  : trimmedInput;
24
25
  const exactMatch = getNormalizedModel(withoutProvider);
25
- const shouldUseFallbackCatalog = /gpt[-_\s]?5|codex/i.test(withoutProvider);
26
+ // The catalog fallback is gated so an unrelated model id is not dragged onto
27
+ // a GPT-5 default. GPT-6 Astra and the Daybreak cyber models have to be named
28
+ // here as well: without them an id the alias table does not carry, such as
29
+ // `gpt-6-astra-pro`, keeps its raw string as the policy key while routing
30
+ // resolves it to `gpt-6-astra`, so the policy store tracks a key no request
31
+ // ever uses.
32
+ //
33
+ // The separator class matches `tokenizeModelId`, which splits on any RUN of
34
+ // non-alphanumerics. A hand-picked `[-_\s]` was narrower than the resolver it
35
+ // guards, so `gpt.6-turbo` kept its raw key here while
36
+ // `resolveNormalizedModel` routed it to `gpt-6-astra`; `*` rather than `?`
37
+ // because the tokenizer collapses repeats, so `gpt..6-turbo` and `gpt---5`
38
+ // resolve too. It must not widen to every hyphenated id: an unknown one
39
+ // would inherit the DEFAULT_MODEL key, which is why `gpt-4o`,
40
+ // `gpt-4.5-preview` and `gpt.4-turbo` still fail this test.
41
+ const shouldUseFallbackCatalog = /gpt[^a-z0-9]*[56]|codex|astra|daybreak/i.test(withoutProvider);
26
42
  const mapped = exactMatch ??
27
43
  (shouldUseFallbackCatalog
28
44
  ? resolveNormalizedModel(withoutProvider)
@@ -30,7 +46,7 @@ function normalizeModel(model) {
30
46
  const trimmed = mapped.trim().toLowerCase();
31
47
  if (!trimmed)
32
48
  return null;
33
- return trimmed.replace(/-(none|minimal|low|medium|high|xhigh)$/i, "");
49
+ return stripModelEffortSuffix(trimmed);
34
50
  }
35
51
  /**
36
52
  * Compose a storage key from an account key and a normalized model identifier.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { existsSync, promises as fs, readFileSync } from "node:fs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { dirname, join } from "node:path";
4
4
  import { parseBooleanEnv } from "./env-parsing.js";
5
+ import { stripModelEffortSuffix } from "./constants.js";
5
6
  import { withRetry, withRetrySync } from "./fs-retry.js";
6
7
  import { logWarn } from "./logger.js";
7
8
  import { StorageError } from "./errors.js";
@@ -949,9 +950,11 @@ export function getUnsupportedCodexFallbackChain(pluginConfig) {
949
950
  const stripped = trimmed.includes("/")
950
951
  ? (trimmed.split("/").pop() ?? trimmed)
951
952
  : trimmed;
952
- return stripped.replace(/-(none|minimal|low|medium|high|xhigh)$/i, "");
953
+ return stripModelEffortSuffix(stripped);
953
954
  };
954
- const normalized = {};
955
+ // Null-prototype: the keys come from user config, so a `__proto__` entry on a
956
+ // plain object would reassign this object's prototype rather than add a row.
957
+ const normalized = Object.create(null);
955
958
  for (const [key, value] of Object.entries(chain)) {
956
959
  if (typeof key !== "string" || !Array.isArray(value))
957
960
  continue;
@@ -104,4 +104,13 @@ export declare const REASONING_EFFORTS: readonly ["none", "minimal", "low", "med
104
104
  export type ModelReasoningEffort = (typeof REASONING_EFFORTS)[number];
105
105
  /** Effort levels the Responses API actually accepts. */
106
106
  export type WireReasoningEffort = Exclude<ModelReasoningEffort, "ultra">;
107
+ /**
108
+ * Strip a trailing reasoning-effort suffix from a model id.
109
+ *
110
+ * Callers use this to collapse `gpt-5.6-sol-max` and `gpt-6-astra-ultra` onto
111
+ * the model they actually route to, so cache keys, policy keys and fallback
112
+ * chain lookups all agree on one id per model. Ids exempted above are returned
113
+ * untouched.
114
+ */
115
+ export declare function stripModelEffortSuffix(modelId: string): string;
107
116
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../lib/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,uDAAuD;AACvD,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAE9C,uCAAuC;AACvC,eAAO,MAAM,cAAc,oCAAoC,CAAC;AAEhE,gEAAgE;AAChE,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAE7C,yEAAyE;AACzE,eAAO,MAAM,WAAW,WAAW,CAAC;AAEpC;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAA0B,CAAC;AAE/D,wBAAwB;AACxB,eAAO,MAAM,WAAW;;;;;;;;;;CAUd,CAAC;AAEX,8BAA8B;AAC9B,eAAO,MAAM,cAAc;;;;;;CAMjB,CAAC;AAEX,oCAAoC;AACpC,eAAO,MAAM,oBAAoB;;;CAGvB,CAAC;AAEX,wBAAwB;AACxB,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAEX,4CAA4C;AAC5C,eAAO,MAAM,cAAc,EAAG,6BAAsC,CAAC;AAErE,qBAAqB;AACrB,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX,qCAAqC;AACrC,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX,gDAAgD;AAChD,eAAO,MAAM,gBAAgB;;;;CAInB,CAAC;AAEX,iCAAiC;AACjC,eAAO,MAAM,WAAW;;;;;;CAQd,CAAC;AAEX,kCAAkC;AAClC,eAAO,MAAM,cAAc;IAC1B,8DAA8D;;IAE9D,sEAAsE;;IAEtE,uEAAuE;;CAE9D,CAAC;AAEX;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,gFASpB,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,wDAAwD;AACxD,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../lib/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,uDAAuD;AACvD,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAE9C,uCAAuC;AACvC,eAAO,MAAM,cAAc,oCAAoC,CAAC;AAEhE,gEAAgE;AAChE,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAE7C,yEAAyE;AACzE,eAAO,MAAM,WAAW,WAAW,CAAC;AAEpC;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAA0B,CAAC;AAE/D,wBAAwB;AACxB,eAAO,MAAM,WAAW;;;;;;;;;;CAUd,CAAC;AAEX,8BAA8B;AAC9B,eAAO,MAAM,cAAc;;;;;;CAMjB,CAAC;AAEX,oCAAoC;AACpC,eAAO,MAAM,oBAAoB;;;CAGvB,CAAC;AAEX,wBAAwB;AACxB,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAEX,4CAA4C;AAC5C,eAAO,MAAM,cAAc,EAAG,6BAAsC,CAAC;AAErE,qBAAqB;AACrB,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX,qCAAqC;AACrC,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX,gDAAgD;AAChD,eAAO,MAAM,gBAAgB;;;;CAInB,CAAC;AAEX,iCAAiC;AACjC,eAAO,MAAM,WAAW;;;;;;CAQd,CAAC;AAEX,kCAAkC;AAClC,eAAO,MAAM,cAAc;IAC1B,8DAA8D;;IAE9D,sEAAsE;;IAEtE,uEAAuE;;CAE9D,CAAC;AAEX;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,gFASpB,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,wDAAwD;AACxD,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;AAuBzE;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG9D"}
@@ -104,3 +104,32 @@ export const REASONING_EFFORTS = [
104
104
  "max",
105
105
  "ultra",
106
106
  ];
107
+ /**
108
+ * Model ids whose final segment is an effort word but is part of the NAME.
109
+ *
110
+ * `codex-max` and `gpt-5.1-codex-max` are models. Stripping their trailing
111
+ * `-max` as if it were an effort suffix renames them to `codex` and
112
+ * `gpt-5.1-codex`, which silently retargets the unsupported-model fallback
113
+ * chain and splits their cache keys. This is the reason the strippers below
114
+ * omitted `max` and `ultra` for so long; naming the exception is what lets them
115
+ * be added.
116
+ */
117
+ const EFFORT_SUFFIX_EXEMPT_PATTERN = /codex-max$/i;
118
+ /**
119
+ * Trailing `-<effort>` on a model id, derived from REASONING_EFFORTS so a new
120
+ * tier cannot be added to the union and missed here.
121
+ */
122
+ const EFFORT_SUFFIX_PATTERN = new RegExp(`-(${REASONING_EFFORTS.join("|")})$`, "i");
123
+ /**
124
+ * Strip a trailing reasoning-effort suffix from a model id.
125
+ *
126
+ * Callers use this to collapse `gpt-5.6-sol-max` and `gpt-6-astra-ultra` onto
127
+ * the model they actually route to, so cache keys, policy keys and fallback
128
+ * chain lookups all agree on one id per model. Ids exempted above are returned
129
+ * untouched.
130
+ */
131
+ export function stripModelEffortSuffix(modelId) {
132
+ if (EFFORT_SUFFIX_EXEMPT_PATTERN.test(modelId))
133
+ return modelId;
134
+ return modelId.replace(EFFORT_SUFFIX_PATTERN, "");
135
+ }
@@ -6,7 +6,7 @@
6
6
  * behavior (see the v2.5.0 release notes) closely enough to launch that no
7
7
  * estimate here has been reviewed for it yet.
8
8
  */
9
- export declare const UNESTIMATED_ROUTABLE_MODELS: readonly ["gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna"];
9
+ export declare const UNESTIMATED_ROUTABLE_MODELS: readonly ["gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna", "gpt-6-astra", "gpt-6-astra-aeon", "gpt-daybreak-blue-latest", "gpt-daybreak-red-latest"];
10
10
  export interface EffectiveContextWindow {
11
11
  tokens: number;
12
12
  source: "override" | "estimate";
@@ -1 +1 @@
1
- {"version":3,"file":"model-context-windows.d.ts","sourceRoot":"","sources":["../../../lib/context-budget/model-context-windows.ts"],"names":[],"mappings":"AAyCA;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,2DAI9B,CAAC;AAgCX,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC3C,sBAAsB,GAAG,IAAI,CA0B/B;AAED,wBAAgB,gCAAgC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzE"}
1
+ {"version":3,"file":"model-context-windows.d.ts","sourceRoot":"","sources":["../../../lib/context-budget/model-context-windows.ts"],"names":[],"mappings":"AAyCA;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,qJAgB9B,CAAC;AAgCX,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC3C,sBAAsB,GAAG,IAAI,CA0B/B;AAED,wBAAgB,gCAAgC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzE"}
@@ -48,6 +48,18 @@ export const UNESTIMATED_ROUTABLE_MODELS = [
48
48
  "gpt-5.6-sol",
49
49
  "gpt-5.6-terra",
50
50
  "gpt-5.6-luna",
51
+ // GPT-6 Astra published two different numbers on day one: 1.05M for the API
52
+ // surface and 272K as the Codex context. This wrapper talks to the Codex
53
+ // backend, and the same split is what the v2.5.0 notes warn about — so no
54
+ // estimate is entered here. `gpt-daybreak-red-latest` is the one model whose
55
+ // upstream catalog entry pins `context_window` and `max_context_window` to
56
+ // the same 372000, but that is the Codex picker's number rather than a
57
+ // measured ceiling for this transport, so it stays unestimated too. Set
58
+ // `contextBudgetGuardModelWindowOverrides` once you know your real ceiling.
59
+ "gpt-6-astra",
60
+ "gpt-6-astra-aeon",
61
+ "gpt-daybreak-blue-latest",
62
+ "gpt-daybreak-red-latest",
51
63
  ];
52
64
  function normalizeModelName(model) {
53
65
  const trimmed = model?.trim().toLowerCase();
@@ -1 +1 @@
1
- {"version":3,"file":"entitlement-cache.d.ts","sourceRoot":"","sources":["../../lib/entitlement-cache.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,mBAAmB,GAAG,kBAAkB,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;CAC7C;AAKD,MAAM,WAAW,qBAAqB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AA0BD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,CAU/E;AAED,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoD;IAEpF,WAAW,CACV,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAClC,KAAK,SAAuB,EAC5B,GAAG,SAAa,GACd,IAAI;IAqBP,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAc/C,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAA;KAAE;IAmBzI,KAAK,CAAC,GAAG,SAAa,GAAG,MAAM;IAmB/B,QAAQ,CAAC,GAAG,SAAa,GAAG,wBAAwB;CAUpD"}
1
+ {"version":3,"file":"entitlement-cache.d.ts","sourceRoot":"","sources":["../../lib/entitlement-cache.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,mBAAmB,GAAG,kBAAkB,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;CAC7C;AAKD,MAAM,WAAW,qBAAqB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AA0BD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,CAU/E;AAED,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoD;IAEpF,WAAW,CACV,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAClC,KAAK,SAAuB,EAC5B,GAAG,SAAa,GACd,IAAI;IAqBP,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAc/C,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAA;KAAE;IAmBzI,KAAK,CAAC,GAAG,SAAa,GAAG,MAAM;IAmB/B,QAAQ,CAAC,GAAG,SAAa,GAAG,wBAAwB;CAUpD"}
@@ -1,4 +1,5 @@
1
1
  import { createLogger } from "./logger.js";
2
+ import { stripModelEffortSuffix } from "./constants.js";
2
3
  const log = createLogger("entitlement-cache");
3
4
  const DEFAULT_BLOCK_TTL_MS = 30 * 60_000;
4
5
  const MAX_ACCOUNT_BUCKETS = 512;
@@ -18,7 +19,7 @@ function normalizeModel(model) {
18
19
  if (!trimmed)
19
20
  return null;
20
21
  const stripped = trimmed.includes("/") ? (trimmed.split("/").pop() ?? trimmed) : trimmed;
21
- return stripped.replace(/-(none|minimal|low|medium|high|xhigh)$/i, "");
22
+ return stripModelEffortSuffix(stripped);
22
23
  }
23
24
  function normalizeEntitlementEmail(email) {
24
25
  if (!email)
@@ -1 +1 @@
1
- {"version":3,"file":"model-capability-matrix.d.ts","sourceRoot":"","sources":["../../lib/model-capability-matrix.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAGN,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAEN,KAAK,wBAAwB,EAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACX,wBAAwB,EACxB,qBAAqB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxE,MAAM,WAAW,0BAA0B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAChC,sBAAsB,EAAE,oBAAoB,CAAC;IAC7C,yBAAyB,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC3D,YAAY,EAAE,iBAAiB,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,0BAA0B,EAAE,CAAC;CACtC;AAsBD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IACjD,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAC/C,gBAAgB,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAChD,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;CACb,GAAG,qBAAqB,CAiFxB"}
1
+ {"version":3,"file":"model-capability-matrix.d.ts","sourceRoot":"","sources":["../../lib/model-capability-matrix.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAGN,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAEN,KAAK,wBAAwB,EAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACX,wBAAwB,EACxB,qBAAqB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxE,MAAM,WAAW,0BAA0B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAChC,sBAAsB,EAAE,oBAAoB,CAAC;IAC7C,yBAAyB,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC3D,YAAY,EAAE,iBAAiB,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,0BAA0B,EAAE,CAAC;CACtC;AAsBD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IACjD,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAC/C,gBAAgB,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAChD,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;CACb,GAAG,qBAAqB,CAyFxB"}