@bitkyc08/opencodex 2.24.1 → 2.25.0-preview.20260818

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 (58) hide show
  1. package/gui/dist/assets/{index-C3FiAveG.js → index-TFd4xi1L.js} +8 -8
  2. package/gui/dist/index.html +1 -1
  3. package/package.json +1 -1
  4. package/src/adapters/anthropic.ts +42 -0
  5. package/src/adapters/client-fingerprint.ts +9 -5
  6. package/src/adapters/cline-pass-deepseek-v4-tool-replay.ts +69 -0
  7. package/src/adapters/command-code.ts +17 -0
  8. package/src/adapters/cursor/cursor-errors.ts +49 -0
  9. package/src/adapters/cursor/live-models.ts +36 -2
  10. package/src/adapters/cursor/live-transport.ts +55 -4
  11. package/src/adapters/cursor/native-exec.ts +9 -0
  12. package/src/adapters/cursor/protobuf-request.ts +160 -9
  13. package/src/adapters/cursor/request-builder.ts +9 -1
  14. package/src/adapters/cursor/tool-definitions.ts +7 -2
  15. package/src/adapters/google-antigravity-wire.ts +1 -1
  16. package/src/adapters/google.ts +30 -12
  17. package/src/adapters/openai-responses-url.ts +5 -3
  18. package/src/adapters/registry.ts +3 -1
  19. package/src/adapters/tool-catalog-nudge.ts +76 -9
  20. package/src/bridge.ts +53 -9
  21. package/src/claude/context-windows.ts +2 -2
  22. package/src/claude/desktop-3p.ts +6 -6
  23. package/src/claude/model-info.ts +2 -2
  24. package/src/cli/claude-desktop.ts +2 -3
  25. package/src/codex/app-server-processes.ts +69 -35
  26. package/src/codex/catalog/metadata.ts +29 -10
  27. package/src/codex/catalog/provider-fetch.ts +21 -11
  28. package/src/codex/catalog.ts +1 -1
  29. package/src/codex/injected-marker.ts +9 -3
  30. package/src/codex/user-identity.ts +88 -6
  31. package/src/config.ts +1 -0
  32. package/src/generated/compatibility-version.json +61 -53
  33. package/src/grok/sync.ts +2 -4
  34. package/src/lab/projection/rebuild.ts +36 -18
  35. package/src/lib/windows-elevation.ts +18 -3
  36. package/src/lib/windows-secret-acl.ts +49 -19
  37. package/src/oauth/google-antigravity.ts +7 -2
  38. package/src/providers/antigravity-models.ts +126 -17
  39. package/src/providers/derive.ts +11 -1
  40. package/src/responses/parser.ts +4 -0
  41. package/src/responses/reasoning-replay-cache.ts +16 -1
  42. package/src/responses/thought-signature-replay.ts +17 -1
  43. package/src/responses/truncated-stop-reason.ts +60 -0
  44. package/src/router.ts +2 -10
  45. package/src/routing/capability.ts +5 -6
  46. package/src/server/index.ts +3 -4
  47. package/src/server/management/agent-settings-routes.ts +5 -5
  48. package/src/server/management/config-routes.ts +2 -2
  49. package/src/server/management/context.ts +2 -0
  50. package/src/server/management/native-integration-routes.ts +3 -3
  51. package/src/server/management/provider-routes.ts +22 -0
  52. package/src/server/management/shared.ts +4 -4
  53. package/src/server/management-api.ts +2 -2
  54. package/src/server/request-log.ts +11 -3
  55. package/src/server/responses/core.ts +4 -1
  56. package/src/server/responses/input-admission.ts +13 -10
  57. package/src/server/system-env.ts +3 -3
  58. package/src/types.ts +13 -1
@@ -39,6 +39,31 @@ const SID_PATTERN = /^S-1-(?:\d+-)+\d+$/i;
39
39
  */
40
40
  const WINDOWS_POWERSHELL_LOOKUP_TIMEOUT_MS = 8_000;
41
41
 
42
+ /**
43
+ * FOLDERID_LocalAppData, and the flag that makes the lookup ignore the caller's
44
+ * environment.
45
+ *
46
+ * The obvious spelling, .NET's
47
+ * `GetFolderPath(SpecialFolder.LocalApplicationData)`, is unusable here: on
48
+ * Windows it resolves through `USERPROFILE`, and when the profile named there has
49
+ * no local AppData directory on disk it returns an EMPTY STRING rather than an
50
+ * error. Any
51
+ * caller that redirected `USERPROFILE` (the test sandbox does, and so does a
52
+ * service account whose profile has not been materialized) therefore refused every
53
+ * coordinator lookup with "returned an empty value", which is the exact
54
+ * environment dependence this module exists to eliminate.
55
+ *
56
+ * `SHGetKnownFolderPath` with a null token and `KF_FLAG_DEFAULT_PATH` reads the
57
+ * known-folder registration for the effective token instead: it returns the real
58
+ * per-user path whether or not the directory exists, and it is unaffected by
59
+ * `USERPROFILE`, `LOCALAPPDATA`, `HOMEDRIVE`, or `HOMEPATH`. A non-null token argument
60
+ * is NOT equivalent: passing (HANDLE)-1 resolves the DEFAULT USER profile
61
+ * (the built-in "Default" profile), which would key coordination to a namespace
62
+ * no real account writes to.
63
+ */
64
+ const WINDOWS_LOCAL_APPDATA_FOLDER_ID = "F1B32785-6FBA-4FCF-9D55-7B8E7F157091";
65
+ const WINDOWS_KF_FLAG_DEFAULT_PATH = "0x00000400";
66
+
42
67
  export class CodexUserIdentityRefusal extends Error {
43
68
  readonly code = "CODEX_USER_IDENTITY_REFUSED";
44
69
 
@@ -93,6 +118,42 @@ export function windowsIdentityPowerShellCommandForTests(expression: string): st
93
118
  return windowsIdentityPowerShellCommand(expression);
94
119
  }
95
120
 
121
+ /**
122
+ * PowerShell expression yielding the effective account's local AppData path.
123
+ *
124
+ * P/Invoke rather than a .NET convenience wrapper, for the reason recorded on
125
+ * WINDOWS_LOCAL_APPDATA_FOLDER_ID: the wrapper follows `USERPROFILE` and answers
126
+ * an empty string for a profile whose directory is absent, which is precisely
127
+ * the environment dependence this module refuses to inherit. The type is added
128
+ * under a unique name per process because `Add-Type` cannot redefine one.
129
+ *
130
+ * The whole sequence is wrapped in one `$(...)` subexpression because the caller
131
+ * substitutes this text into `[string](<expression>)`; several statements
132
+ * spliced in bare would close that cast's parenthesis early and fail to parse.
133
+ */
134
+ function windowsLocalAppDataExpression(): string {
135
+ const signature =
136
+ '[DllImport("shell32.dll", CharSet = CharSet.Unicode)] public static extern int '
137
+ + 'SHGetKnownFolderPath(ref System.Guid id, uint flags, System.IntPtr token, out System.IntPtr path);';
138
+ const statements = [
139
+ `$ocxShell = Add-Type -MemberDefinition '${signature}'`
140
+ + " -Name OcxKnownFolder -Namespace OcxIdentity -PassThru",
141
+ `$ocxFolderId = [System.Guid]'${WINDOWS_LOCAL_APPDATA_FOLDER_ID}'`,
142
+ "$ocxPathPtr = [System.IntPtr]::Zero",
143
+ "$ocxHr = $ocxShell::SHGetKnownFolderPath([ref]$ocxFolderId, "
144
+ + `${WINDOWS_KF_FLAG_DEFAULT_PATH}, [System.IntPtr]::Zero, [ref]$ocxPathPtr)`,
145
+ "if ($ocxHr -ne 0) { throw 'SHGetKnownFolderPath failed' }",
146
+ "try { [System.Runtime.InteropServices.Marshal]::PtrToStringUni($ocxPathPtr) }"
147
+ + " finally { [System.Runtime.InteropServices.Marshal]::FreeCoTaskMem($ocxPathPtr) }",
148
+ ];
149
+ return `$(${statements.join("; ")})`;
150
+ }
151
+
152
+ /** Test-only readback of the environment-independent known-folder expression. */
153
+ export function windowsLocalAppDataExpressionForTests(): string {
154
+ return windowsLocalAppDataExpression();
155
+ }
156
+
96
157
  /** Test-only readback of the spawn options shared by the identity lookups (#1278). */
97
158
  export function windowsIdentityPowerShellSpawnOptionsForTests(): ReturnType<
98
159
  typeof windowsIdentityPowerShellSpawnOptions
@@ -122,7 +183,31 @@ export function decodeWindowsIdentityPowerShellOutputForTests(output: Uint8Array
122
183
  return decodeWindowsIdentityPowerShellOutput(output);
123
184
  }
124
185
 
186
+ /**
187
+ * Per-process memo for the Windows lookups.
188
+ *
189
+ * Both values -- the effective token's SID and its known-folder local AppData --
190
+ * are fixed for the lifetime of a process: neither can change without a new logon
191
+ * token, and the lookups deliberately ignore the environment, so nothing a caller
192
+ * does between two calls can alter the answer. Each call otherwise spawns a fresh
193
+ * PowerShell, roughly 150ms for the SID and 310ms for the folder, and the
194
+ * coordinator asks for both on every config write and lock acquisition. That cost
195
+ * pushed real multi-process injection tests past their budget while proving
196
+ * nothing: the second spawn re-derives what the first already established.
197
+ *
198
+ * Only successful lookups are memoized, so a transient failure cannot pin the
199
+ * process into a permanently refusing state.
200
+ */
201
+ const windowsIdentityValueCache = new Map<string, string>();
202
+
203
+ /** Test-only reset so a suite can force a fresh lookup. */
204
+ export function resetWindowsIdentityValueCacheForTests(): void {
205
+ windowsIdentityValueCache.clear();
206
+ }
207
+
125
208
  function powershellValue(expression: string): string {
209
+ const memoized = windowsIdentityValueCache.get(expression);
210
+ if (memoized !== undefined) return memoized;
126
211
  let command: string[];
127
212
  try {
128
213
  command = windowsIdentityPowerShellCommand(expression);
@@ -145,6 +230,7 @@ function powershellValue(expression: string): string {
145
230
  if (result.exitCode !== 0) refuse("Windows effective-account lookup failed.");
146
231
  const value = decodeWindowsIdentityPowerShellOutput(result.stdout ?? Buffer.alloc(0));
147
232
  if (!value) refuse("Windows effective-account lookup returned an empty value.");
233
+ windowsIdentityValueCache.set(expression, value);
148
234
  return value;
149
235
  }
150
236
 
@@ -265,9 +351,7 @@ export function probeCodexCoordinatorNamespace(identity: UserIdentity): Coordina
265
351
  }
266
352
 
267
353
  if (!SID_PATTERN.test(identity.sid)) refuse("The coordinator identity contains an invalid SID.");
268
- const localAppData = powershellValue(
269
- "[Environment]::GetFolderPath([Environment+SpecialFolder]::LocalApplicationData)",
270
- );
354
+ const localAppData = powershellValue(windowsLocalAppDataExpression());
271
355
  if (!isAbsolute(localAppData)) refuse("Windows LocalAppData resolution returned a relative path.");
272
356
  const root = resolve(localAppData, "OpenCodex", "Runtime", "v1", identity.sid.toUpperCase());
273
357
  let entry;
@@ -297,9 +381,7 @@ export function probeCodexCoordinatorNamespace(identity: UserIdentity): Coordina
297
381
 
298
382
  function resolveWindowsRuntimeRoot(identity: Extract<UserIdentity, { platform: "win32" }>): string {
299
383
  if (!SID_PATTERN.test(identity.sid)) refuse("The coordinator identity contains an invalid SID.");
300
- const localAppData = powershellValue(
301
- "[Environment]::GetFolderPath([Environment+SpecialFolder]::LocalApplicationData)",
302
- );
384
+ const localAppData = powershellValue(windowsLocalAppDataExpression());
303
385
  if (!isAbsolute(localAppData)) refuse("Windows LocalAppData resolution returned a relative path.");
304
386
 
305
387
  // The SID and known-folder values come from the effective token/.NET OS APIs,
package/src/config.ts CHANGED
@@ -741,6 +741,7 @@ const providerConfigSchema = z.object({
741
741
  upstreamHttpVersion: z.enum(UPSTREAM_HTTP_VERSION_VALUES)
742
742
  .nullish()
743
743
  .transform(value => value ?? undefined),
744
+ directGeminiWireRenames: z.boolean().optional(),
744
745
  noStructuredOutputModels: z.array(z.string().min(1))
745
746
  .transform(normalizeNonBlankStringArray)
746
747
  .optional(),
@@ -10,7 +10,7 @@
10
10
  },
11
11
  {
12
12
  "path": "package.json",
13
- "sha256": "550826e575297c9f0bd8f16cea06355c50bb78bacf4b9382c1d077520683177d"
13
+ "sha256": "5518c7d4c2c58ae41036421c3ad06ac7cb84ca2857a881b6616d817299b48b3e"
14
14
  },
15
15
  {
16
16
  "path": "scripts/model-metadata.source.json",
@@ -34,7 +34,7 @@
34
34
  },
35
35
  {
36
36
  "path": "src/adapters/anthropic.ts",
37
- "sha256": "2b565b0a8e84ab143b3a159e9f9cf65d368f2b7e27f41fadb827e28bd76b5a40"
37
+ "sha256": "afd6f5ef9fab45811c67067bdb6731fc8efa3abb7bc2a7bee109445ca9c06467"
38
38
  },
39
39
  {
40
40
  "path": "src/adapters/azure.ts",
@@ -46,11 +46,15 @@
46
46
  },
47
47
  {
48
48
  "path": "src/adapters/client-fingerprint.ts",
49
- "sha256": "6494cb40aefb337db3584489d1544d7ae623445dd3c81e5e34a30c77312f4e69"
49
+ "sha256": "70c6e0bf49d942e352396bd6c2983a1456b6ee96497537f4175674e99627223b"
50
+ },
51
+ {
52
+ "path": "src/adapters/cline-pass-deepseek-v4-tool-replay.ts",
53
+ "sha256": "da664327db4e0bae8ab689230deec415ad3f6d0f18c596dcc5b94c8a8d08a345"
50
54
  },
51
55
  {
52
56
  "path": "src/adapters/command-code.ts",
53
- "sha256": "7430d87c3c34961ab02873584605738c65fbf7aca2f87f2a0dcc800c048a0761"
57
+ "sha256": "9b4a9eb9ab8c37541d0478ee50d28ea94b9dee127f75fbc85004ca264af67aaa"
54
58
  },
55
59
  {
56
60
  "path": "src/adapters/cursor.ts",
@@ -66,7 +70,7 @@
66
70
  },
67
71
  {
68
72
  "path": "src/adapters/cursor/cursor-errors.ts",
69
- "sha256": "456766d2be7d4859707c7ae666000f74d81357bde59a2b283027ee256d395b9e"
73
+ "sha256": "aa27cf53056f48c4ed4ccc2262d5a84c0b96b79a3a77db5be7ca27256dfba9c4"
70
74
  },
71
75
  {
72
76
  "path": "src/adapters/cursor/discovery.ts",
@@ -94,7 +98,7 @@
94
98
  },
95
99
  {
96
100
  "path": "src/adapters/cursor/live-models.ts",
97
- "sha256": "48d7e9bf63f512086ba5ec5324e355776948802dec29f30d9403e23d1b5cc6f9"
101
+ "sha256": "d1ded09df979a490d7b4fb2afb87829561fbc021bdc6f67ad0d122febd9b21e4"
98
102
  },
99
103
  {
100
104
  "path": "src/adapters/cursor/live-smoke-gate.ts",
@@ -102,7 +106,7 @@
102
106
  },
103
107
  {
104
108
  "path": "src/adapters/cursor/live-transport.ts",
105
- "sha256": "247e48058e2d22e282d2d49652cde998c5d13f36197898562510d99746993711"
109
+ "sha256": "c614a08f47c3a71d443484002a978a67afb2169a2eeae540291fcc383ff2a969"
106
110
  },
107
111
  {
108
112
  "path": "src/adapters/cursor/mcp-config.ts",
@@ -146,7 +150,7 @@
146
150
  },
147
151
  {
148
152
  "path": "src/adapters/cursor/native-exec.ts",
149
- "sha256": "0a9599735b9d3fc1d623b6595f9044818c161370dd87ae4d17d2e6bae344f01f"
153
+ "sha256": "3824d4ad75f039019fff8749900cc0b2daff6de0c41bb7a64f76eb5e57dd25a6"
150
154
  },
151
155
  {
152
156
  "path": "src/adapters/cursor/protobuf-events.ts",
@@ -154,11 +158,11 @@
154
158
  },
155
159
  {
156
160
  "path": "src/adapters/cursor/protobuf-request.ts",
157
- "sha256": "0d82660ab54e2bc0b29c7b4524bf1a56a55c14c08ce11ed8dc0da4c69ed805bd"
161
+ "sha256": "28e352e4b0080fc09508bf87cce884ecbecb9d1f414e343a9068145affd223d9"
158
162
  },
159
163
  {
160
164
  "path": "src/adapters/cursor/request-builder.ts",
161
- "sha256": "ec30a9988cf25a8bc51b2bb286ce25033b6a86591e5036d8d24b74e79b824704"
165
+ "sha256": "ecfed9de726cd21126f3a90dac958bd8bba6d9feee5cb48966d3c3cf274b31fd"
162
166
  },
163
167
  {
164
168
  "path": "src/adapters/cursor/thread-continuity.ts",
@@ -166,7 +170,7 @@
166
170
  },
167
171
  {
168
172
  "path": "src/adapters/cursor/tool-definitions.ts",
169
- "sha256": "b0e77a16aeb85466052774491c8a4cf3ba3cc5c25bf5c60315efa5a9959d626e"
173
+ "sha256": "632535cff0fb7f893b76631344129d13e45aa40c8e3e062ab0010c57e24448e9"
170
174
  },
171
175
  {
172
176
  "path": "src/adapters/cursor/transport-retry.ts",
@@ -186,7 +190,7 @@
186
190
  },
187
191
  {
188
192
  "path": "src/adapters/google-antigravity-wire.ts",
189
- "sha256": "1fa3361241026926754656cf8300ce513fefac86020d796cb985018192499797"
193
+ "sha256": "671fc197b9ab46800b64a4d51dec8b80c82e9cf841bb2c244f1087a8de592009"
190
194
  },
191
195
  {
192
196
  "path": "src/adapters/google-errors.ts",
@@ -210,7 +214,7 @@
210
214
  },
211
215
  {
212
216
  "path": "src/adapters/google.ts",
213
- "sha256": "fe8f2df66b0df49927c1e9d261ac122020dd56b3a7bca6f77a3fabf34c8183bd"
217
+ "sha256": "e87a1a968d8cb8e2d20e2ca27a6168f4e97b215ca1c9ef3ac46d907c78e760b5"
214
218
  },
215
219
  {
216
220
  "path": "src/adapters/identity.ts",
@@ -278,7 +282,7 @@
278
282
  },
279
283
  {
280
284
  "path": "src/adapters/openai-responses-url.ts",
281
- "sha256": "b3acd48b0b8fcda9f2ebedb51ebfd619e1c1d1adaeca2f6965db853e6ffdc6e4"
285
+ "sha256": "ff38228d2033b9f73dbb011b1d5eb3ac09795519ae8b57958d7d8f6253b4d5e4"
282
286
  },
283
287
  {
284
288
  "path": "src/adapters/openai-responses.ts",
@@ -286,7 +290,7 @@
286
290
  },
287
291
  {
288
292
  "path": "src/adapters/registry.ts",
289
- "sha256": "9a56ee08197bdd5b6ea12fcb847d2a89b60a600ee2536a010f4836784115d2d8"
293
+ "sha256": "74cef1012f4b481109d1ec5119d49c7634237166f5e73424399feada3d03c963"
290
294
  },
291
295
  {
292
296
  "path": "src/adapters/responses-tool-schema.ts",
@@ -302,7 +306,7 @@
302
306
  },
303
307
  {
304
308
  "path": "src/adapters/tool-catalog-nudge.ts",
305
- "sha256": "d315b8113a492794ee1321fd3c69638e52af47b8060682e331243cba10167cef"
309
+ "sha256": "9750e8b4ce000ac452482141bfe27add3577341cc30d1403c05a509bee11044c"
306
310
  },
307
311
  {
308
312
  "path": "src/adapters/upstream-http-error.ts",
@@ -310,7 +314,7 @@
310
314
  },
311
315
  {
312
316
  "path": "src/bridge.ts",
313
- "sha256": "63ccf86cb645d70b1e735633e082b483e41507a443a851d4b1ea76436a9a1e3d"
317
+ "sha256": "5bbfd25c2778989f47c422e57d550b46a6570f9d599e8eee8b189c86fd0cb70c"
314
318
  },
315
319
  {
316
320
  "path": "src/chat/inbound.ts",
@@ -342,7 +346,7 @@
342
346
  },
343
347
  {
344
348
  "path": "src/claude/context-windows.ts",
345
- "sha256": "41c66bc19175eace1d367f349a3311a691c3445d5b9f3f16fab7cd351939cb9c"
349
+ "sha256": "4c49d8efeec1d1060e9e61201370d4dce268b7826ca3fcff773d1d53c4c548b4"
346
350
  },
347
351
  {
348
352
  "path": "src/claude/desktop-3p-guard.ts",
@@ -354,7 +358,7 @@
354
358
  },
355
359
  {
356
360
  "path": "src/claude/desktop-3p.ts",
357
- "sha256": "10bfcaa2f68521b6b2f93c33e3d622679a25f1e9cdebc28cb0c034f25ea12aa8"
361
+ "sha256": "2218e3b4ba35dab0bf53e6b400468daf6a59e886f06afe96dd083b755e6beed0"
358
362
  },
359
363
  {
360
364
  "path": "src/claude/desktop-health.ts",
@@ -378,7 +382,7 @@
378
382
  },
379
383
  {
380
384
  "path": "src/claude/model-info.ts",
381
- "sha256": "f83181da3d11d47ebdbffcbbfbdfbc860ed2c296f30cdc36d1c7a3bec7061134"
385
+ "sha256": "8b087c12684e3e43100047227f04536321be5d2af3ca6e989693d09836fbf74f"
382
386
  },
383
387
  {
384
388
  "path": "src/claude/outbound.ts",
@@ -430,7 +434,7 @@
430
434
  },
431
435
  {
432
436
  "path": "src/cli/claude-desktop.ts",
433
- "sha256": "5ee287b01b95b4e48e3fd6f444f2642289f849b3e843b87d502a2e125c298fdb"
437
+ "sha256": "edc5fcaf62acdeaafac905bbe84fb5527cbe38d4729d4e94cff29cb7b2b4bf2f"
434
438
  },
435
439
  {
436
440
  "path": "src/cli/claude.ts",
@@ -626,7 +630,7 @@
626
630
  },
627
631
  {
628
632
  "path": "src/codex/app-server-processes.ts",
629
- "sha256": "28c7fb91d8fd5c2332738e512b9d87c53ea09843191c145b0801d912e124fe9e"
633
+ "sha256": "0218c4e432ad02a814d818e04fc5ba8c36864f8fcfd592ef674f9c476e56cb77"
630
634
  },
631
635
  {
632
636
  "path": "src/codex/app-server-restart-service.ts",
@@ -662,7 +666,7 @@
662
666
  },
663
667
  {
664
668
  "path": "src/codex/catalog.ts",
665
- "sha256": "0c76625e56687be734c75c6be80586e298d8cbb3c471707417708ee522afb5b8"
669
+ "sha256": "879afc5613a39b758e6e8f6f63d23cef0918ffb38e6f68dff1bc3f638278bd1a"
666
670
  },
667
671
  {
668
672
  "path": "src/codex/catalog/account-models.ts",
@@ -690,7 +694,7 @@
690
694
  },
691
695
  {
692
696
  "path": "src/codex/catalog/metadata.ts",
693
- "sha256": "66d9f4c603a77d34ab44b11b9b4397cc53c6a1e88a4bfb47cbc2a6b25ef20fbc"
697
+ "sha256": "fc1cce8854a517f6c80ce137a02fb183c6710899f2a1d7536707c00ad56b4de6"
694
698
  },
695
699
  {
696
700
  "path": "src/codex/catalog/native-models.ts",
@@ -702,7 +706,7 @@
702
706
  },
703
707
  {
704
708
  "path": "src/codex/catalog/provider-fetch.ts",
705
- "sha256": "cfd71e3d50149f8f04c4d272bb1dd42f1f26bbf276cabb13bb9f21fa5ebf7dc6"
709
+ "sha256": "d800963913619d3e02db4fb616795cac93c336ac18a18c6e24e873e71a6d2255"
706
710
  },
707
711
  {
708
712
  "path": "src/codex/catalog/sync.ts",
@@ -782,7 +786,7 @@
782
786
  },
783
787
  {
784
788
  "path": "src/codex/injected-marker.ts",
785
- "sha256": "20ea9be70b7dc48fc0be124ca0b4670ddbe75c9683dac96fa1cc3a8792af0f15"
789
+ "sha256": "b59a1864bc2a71dae6d0349386c137ad18ce402981f09f19fb881777fcc1556f"
786
790
  },
787
791
  {
788
792
  "path": "src/codex/integration-record.ts",
@@ -986,7 +990,7 @@
986
990
  },
987
991
  {
988
992
  "path": "src/codex/user-identity.ts",
989
- "sha256": "e2cb675b208f7ad2fdd64c5d05d9c439511f786f3887ea5cb54d87b6fe7fe8a2"
993
+ "sha256": "9641f00a7213ea6cb85cdc38adcbab1615815ca1eda878d5bfc3513e023243c7"
990
994
  },
991
995
  {
992
996
  "path": "src/codex/warmup.ts",
@@ -1022,7 +1026,7 @@
1022
1026
  },
1023
1027
  {
1024
1028
  "path": "src/config.ts",
1025
- "sha256": "3552e7f943e5bcd6af57acfbe0bd2316d9ab4a060e32e6ca01adac97d27960d4"
1029
+ "sha256": "2297577079aed2e89e4603050402629fea2df094978ff24c0db5102ca8da91ae"
1026
1030
  },
1027
1031
  {
1028
1032
  "path": "src/generated/model-metadata.ts",
@@ -1046,7 +1050,7 @@
1046
1050
  },
1047
1051
  {
1048
1052
  "path": "src/grok/sync.ts",
1049
- "sha256": "20b41bbcba0f876a376c69a0a00c953632869fcba7c2dd3b5f0b850b55b987ff"
1053
+ "sha256": "a2afb3599a789276726867b559273d047b7e55a64f088ca81e4af49629e14d74"
1050
1054
  },
1051
1055
  {
1052
1056
  "path": "src/images/artifacts.ts",
@@ -1442,7 +1446,7 @@
1442
1446
  },
1443
1447
  {
1444
1448
  "path": "src/lab/projection/rebuild.ts",
1445
- "sha256": "ad3e71676d7c259b6b5993a87c5af367a7910fc86d228b37bc7cf10481eed21c"
1449
+ "sha256": "9de9cfcd613634b5afa7ba8bbea7fc24327ff1fb103ae2c70c6f5475e70695c3"
1446
1450
  },
1447
1451
  {
1448
1452
  "path": "src/lab/projection/schema.ts",
@@ -1854,11 +1858,11 @@
1854
1858
  },
1855
1859
  {
1856
1860
  "path": "src/lib/windows-elevation.ts",
1857
- "sha256": "0dc9864f87be8eed6c8dff80bec938f73fa2836c9f606f0e81c4c020494a8850"
1861
+ "sha256": "168ec95934c25036ec9056f83f89427a82ee2bcd83d098bd4419fcb27051e4ec"
1858
1862
  },
1859
1863
  {
1860
1864
  "path": "src/lib/windows-secret-acl.ts",
1861
- "sha256": "6cbb7d5a6d9e5a1d73058af79ac02611e5cebc01fc49c7daf39ab8b0f9b41f53"
1865
+ "sha256": "1e3d7e199fa0433ca778ba3ffae2c610bf2d1850ead39c8fa1d1a1b64881bc1c"
1862
1866
  },
1863
1867
  {
1864
1868
  "path": "src/lib/windows-text.ts",
@@ -1926,7 +1930,7 @@
1926
1930
  },
1927
1931
  {
1928
1932
  "path": "src/oauth/google-antigravity.ts",
1929
- "sha256": "a46a2aa7c5aafc51d631e1d02d84f90e2b6fc32c8000c7a84dd1c5a76018635c"
1933
+ "sha256": "ca475ef54f4ed2a36734b560fd29686a33dd11aa45643fe36a9fd3c92c1a6678"
1930
1934
  },
1931
1935
  {
1932
1936
  "path": "src/oauth/health.ts",
@@ -2002,7 +2006,7 @@
2002
2006
  },
2003
2007
  {
2004
2008
  "path": "src/providers/antigravity-models.ts",
2005
- "sha256": "1382f985bf4fdf525fb4425d5040e7244460f441f492b22ddc493226e5b778d1"
2009
+ "sha256": "3b70505caffbf4b42a1574f8824aa3250d3caee5db820f45b45945381dd0298d"
2006
2010
  },
2007
2011
  {
2008
2012
  "path": "src/providers/api-keys.ts",
@@ -2026,7 +2030,7 @@
2026
2030
  },
2027
2031
  {
2028
2032
  "path": "src/providers/derive.ts",
2029
- "sha256": "c099e125978b81ac4415d2ba5fb0dd69c1f974e21301b992811b63dfb3c0b94d"
2033
+ "sha256": "babec953990d4045c3861c102a4ed3e2c4654b03b6d707d179bfeefeefd5e9c8"
2030
2034
  },
2031
2035
  {
2032
2036
  "path": "src/providers/free-directory.ts",
@@ -2142,7 +2146,7 @@
2142
2146
  },
2143
2147
  {
2144
2148
  "path": "src/responses/parser.ts",
2145
- "sha256": "e8fffd98b5bac31773dff5c22c65ef5cf39d535c578ec708700aa6d25e2d9e71"
2149
+ "sha256": "f84fcb37def007781eb71081d3148f4b0f72eca6aebcea7e7a1a67808d014d69"
2146
2150
  },
2147
2151
  {
2148
2152
  "path": "src/responses/provider-opaque-metadata.ts",
@@ -2154,7 +2158,7 @@
2154
2158
  },
2155
2159
  {
2156
2160
  "path": "src/responses/reasoning-replay-cache.ts",
2157
- "sha256": "28fa9e047741251734d3c39a6183e2465cae3c610e31de4f2a1bd4e4333e8e00"
2161
+ "sha256": "c81d1e2173c4c48215468989dafa4ec74a9a01ab1bbbb4556d5d25ccf63739d3"
2158
2162
  },
2159
2163
  {
2160
2164
  "path": "src/responses/schema.ts",
@@ -2170,15 +2174,19 @@
2170
2174
  },
2171
2175
  {
2172
2176
  "path": "src/responses/thought-signature-replay.ts",
2173
- "sha256": "fa1a7c06af55241083f7fb31638e12630c444c72a3d9879ce02ca7bdef2fb705"
2177
+ "sha256": "dc2464036c9d0c78764ac7b2e97e86b77449dd31e9f98cf0c29b5a7d60134976"
2174
2178
  },
2175
2179
  {
2176
2180
  "path": "src/responses/tool-groups.ts",
2177
2181
  "sha256": "b2750b33ec7bb5a7f76f27584bf99372fac4f253dd287849b2f3f9821db574cd"
2178
2182
  },
2183
+ {
2184
+ "path": "src/responses/truncated-stop-reason.ts",
2185
+ "sha256": "44a1876c045a63f9275410fb9169d2c47ce0c1de309e9cc00a0f51c72698a6dd"
2186
+ },
2179
2187
  {
2180
2188
  "path": "src/router.ts",
2181
- "sha256": "f365eb302f068368ce2966a7232b2ddd8ce1fc00ad2751df46feb06009633a07"
2189
+ "sha256": "26a672d4df978dd7c9764d7533ccc54a9bded6daf4a90fa3ebf41e126d106f67"
2182
2190
  },
2183
2191
  {
2184
2192
  "path": "src/routing/analytics.ts",
@@ -2186,7 +2194,7 @@
2186
2194
  },
2187
2195
  {
2188
2196
  "path": "src/routing/capability.ts",
2189
- "sha256": "00606e95e636abd8612bb6825c6cb8c2a62ca1eb396ebebba64501f34cd0e060"
2197
+ "sha256": "e4c7da723d461ac41b18cdf5d80085887a0b0e46917bcb4e012f52fc431475d0"
2190
2198
  },
2191
2199
  {
2192
2200
  "path": "src/routing/compatibility/assemble.ts",
@@ -2330,7 +2338,7 @@
2330
2338
  },
2331
2339
  {
2332
2340
  "path": "src/server/index.ts",
2333
- "sha256": "d3d1d19add61e536b9c1ede4676c5ef67a79ccc3e3e55302592d9f4228635d59"
2341
+ "sha256": "1ceb408f13a9700fcdd78e112fe56c35956a0e1c3207f14477ca7f18358fa3b7"
2334
2342
  },
2335
2343
  {
2336
2344
  "path": "src/server/lifecycle.ts",
@@ -2350,7 +2358,7 @@
2350
2358
  },
2351
2359
  {
2352
2360
  "path": "src/server/management-api.ts",
2353
- "sha256": "6a5238bfda08e77c550185fc54e54214da3fe6b10d4264c13f263f3c67a76939"
2361
+ "sha256": "b3e94bff1762950449552b416de10cbed72f12362dfa3c7c1f9bf043177ae1fc"
2354
2362
  },
2355
2363
  {
2356
2364
  "path": "src/server/management-auth.ts",
@@ -2358,7 +2366,7 @@
2358
2366
  },
2359
2367
  {
2360
2368
  "path": "src/server/management/agent-settings-routes.ts",
2361
- "sha256": "cf34cb29cc6e80b22b47bab31f5d6fc19e44e5604ba847ed0fbfdc500dd38136"
2369
+ "sha256": "97487f7dadf5abae969085b6058f430fce0d309e8882eaeeedae078ccc6cafc9"
2362
2370
  },
2363
2371
  {
2364
2372
  "path": "src/server/management/api-access.ts",
@@ -2378,11 +2386,11 @@
2378
2386
  },
2379
2387
  {
2380
2388
  "path": "src/server/management/config-routes.ts",
2381
- "sha256": "90a3722a21edff368f0605300f2e4e2addcc3353ca5d2372d6df99e9ebe03fbd"
2389
+ "sha256": "3a56198dbd3884707cd385a9c6b62a3c910741a0d7c576d9b30de3d7a8f86ddf"
2382
2390
  },
2383
2391
  {
2384
2392
  "path": "src/server/management/context.ts",
2385
- "sha256": "ee5a6bbd25f568425e75677d0ab11e16b4996096512599c37b785d18e6dfcb18"
2393
+ "sha256": "1b5d01755283307260fb942f35bc23b2d22bb6108e00b3c4d75a56ec13780dff"
2386
2394
  },
2387
2395
  {
2388
2396
  "path": "src/server/management/integration-routes.ts",
@@ -2410,7 +2418,7 @@
2410
2418
  },
2411
2419
  {
2412
2420
  "path": "src/server/management/native-integration-routes.ts",
2413
- "sha256": "12ebeccbcffb49b3132d799bf7faa1534da4d7f5cf6c32a15c4b75b7e6eda7c7"
2421
+ "sha256": "6c01497f98bc583ec2d76fe90e99f61076287c7a69f9dee67477ba60853e38e7"
2414
2422
  },
2415
2423
  {
2416
2424
  "path": "src/server/management/oauth-account-routes.ts",
@@ -2422,7 +2430,7 @@
2422
2430
  },
2423
2431
  {
2424
2432
  "path": "src/server/management/provider-routes.ts",
2425
- "sha256": "5671232af392b8ba84ecc516c99d33b3cd294bfbd3fd9c5df04cf99b32d04049"
2433
+ "sha256": "1a2217a7cdaee6945ef90221f7b9344fc6d3a04e7750092b6c716bb2acbcef47"
2426
2434
  },
2427
2435
  {
2428
2436
  "path": "src/server/management/request-history-routes.ts",
@@ -2438,7 +2446,7 @@
2438
2446
  },
2439
2447
  {
2440
2448
  "path": "src/server/management/shared.ts",
2441
- "sha256": "111efaa480b344e3d0a0bff639c9946b4a5691c6ed02727dd929deffc532a938"
2449
+ "sha256": "2ec68a5b6d334898762c729b07eb3b98a350a4cf52d3f4debe25eb359162e863"
2442
2450
  },
2443
2451
  {
2444
2452
  "path": "src/server/management/sidebar-routes.ts",
@@ -2510,7 +2518,7 @@
2510
2518
  },
2511
2519
  {
2512
2520
  "path": "src/server/request-log.ts",
2513
- "sha256": "e7111d92152cdedf0e771d719bddee0150124d14bcac13610662dcbed3b75869"
2521
+ "sha256": "17c4594009bbacdd95465933ab48b0a5a31e85d80e16de86a1fd1638b2c46510"
2514
2522
  },
2515
2523
  {
2516
2524
  "path": "src/server/responses-custom-tool-repair.ts",
@@ -2566,7 +2574,7 @@
2566
2574
  },
2567
2575
  {
2568
2576
  "path": "src/server/responses/core.ts",
2569
- "sha256": "15210453413f7f152083a987226695faa7a373a36f97486353272df0143f60cc"
2577
+ "sha256": "1a2fd4ea5e0b1f9b2208cd0365986a465039f262bfd43f9dca56dc43780e6e8a"
2570
2578
  },
2571
2579
  {
2572
2580
  "path": "src/server/responses/empty-completion-guard.ts",
@@ -2582,7 +2590,7 @@
2582
2590
  },
2583
2591
  {
2584
2592
  "path": "src/server/responses/input-admission.ts",
2585
- "sha256": "b9536eb8dc3532c35ef65bd0a1f910e1e20db74e0ac6b581de529f4e60fd4120"
2593
+ "sha256": "cb04a5dea34d8e997c842626bad39d02baf1c64e6bcf614227bf3d49a2270131"
2586
2594
  },
2587
2595
  {
2588
2596
  "path": "src/server/responses/pacing-overload.ts",
@@ -2630,7 +2638,7 @@
2630
2638
  },
2631
2639
  {
2632
2640
  "path": "src/server/system-env.ts",
2633
- "sha256": "4a501266f1b914fa83f0646f3679d38b0fdda8399bb01cc0451054d03b93dfe1"
2641
+ "sha256": "b068365c21dbc6c92de920f9ebb3c771b9f82ecff0dfa315618923d748a93025"
2634
2642
  },
2635
2643
  {
2636
2644
  "path": "src/server/windows-tcp-drop.ts",
@@ -2726,7 +2734,7 @@
2726
2734
  },
2727
2735
  {
2728
2736
  "path": "src/types.ts",
2729
- "sha256": "a2b31962f7d7f54f60b1cb9ed1066eeb5b0fb267cd0d3e4053eea6501b53046e"
2737
+ "sha256": "d740769ad835349fbc1d92d1c4186be92d2dca5d9902d0f9bc3eac251644655e"
2730
2738
  },
2731
2739
  {
2732
2740
  "path": "src/update/badge.ts",
package/src/grok/sync.ts CHANGED
@@ -6,9 +6,7 @@
6
6
  *
7
7
  * Deps are injectable (mirrors src/codex/sync.ts) so tests can run without a live proxy.
8
8
  */
9
- import { visibleNativeSlugs, filterCatalogVisibleModels, nativeOpenAiContextWindow, type CatalogModel } from "../codex/catalog";
10
- import { providerContextCap } from "../providers/context-cap";
11
- import { OPENAI_CODEX_PROVIDER_ID } from "../providers/openai-tiers";
9
+ import { visibleNativeSlugs, filterCatalogVisibleModels, nativeContextLimits, nativeOpenAiContextWindow, type CatalogModel } from "../codex/catalog";
12
10
  import type { OcxConfig } from "../types";
13
11
  import { injectGrokConfig, type GrokInjectModel, type GrokInjectResult } from "./inject";
14
12
 
@@ -42,7 +40,7 @@ export async function syncGrokConfig(
42
40
  // default (200k) and understates models like gpt-5.6-sol, which is 372k. This is the same
43
41
  // accessor the dashboard's native rows use, so the two cannot disagree.
44
42
  ...visibleNativeSlugs(config).map(id => {
45
- const contextWindow = nativeOpenAiContextWindow(id, providerContextCap(config, OPENAI_CODEX_PROVIDER_ID));
43
+ const contextWindow = nativeOpenAiContextWindow(id, nativeContextLimits(config));
46
44
  return { id, ...(contextWindow !== undefined ? { contextWindow } : {}) };
47
45
  }),
48
46
  ...routed.map(m => ({