@bitkyc08/opencodex 2.61.0 → 2.63.0-preview.20260923

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 (80) hide show
  1. package/gui/dist/assets/App-EJxiUFMq.js +50 -0
  2. package/gui/dist/assets/{Tray-CLZh48fM.js → Tray-B03pW-Uf.js} +1 -1
  3. package/gui/dist/assets/index-BmJwNBHL.js +86 -0
  4. package/gui/dist/assets/index-DdDunwDb.css +1 -0
  5. package/gui/dist/assets/{usage-companion-chart-a0N58rRI.js → usage-companion-chart-IftE60UK.js} +1 -1
  6. package/gui/dist/index.html +2 -2
  7. package/package.json +1 -1
  8. package/src/adapters/cursor/catalog.ts +15 -0
  9. package/src/adapters/cursor/effort-map.ts +7 -0
  10. package/src/adapters/cursor/envelope-echo.ts +51 -25
  11. package/src/adapters/cursor/protobuf-request.ts +39 -13
  12. package/src/adapters/cursor.ts +52 -4
  13. package/src/adapters/devin/cloud-direct/chat.ts +50 -16
  14. package/src/adapters/devin/cloud-direct/stated-reset-retry.ts +4 -1
  15. package/src/adapters/devin/live-models.ts +7 -0
  16. package/src/adapters/devin.ts +7 -5
  17. package/src/adapters/kiro/reasoning.ts +5 -0
  18. package/src/adapters/openai-responses/passthrough.ts +4 -4
  19. package/src/adapters/openai-responses/tool-output-recovery.ts +5 -3
  20. package/src/claude/desktop-gateway-state.ts +7 -2
  21. package/src/claude/desktop-policy.ts +105 -1
  22. package/src/cli/config-command.ts +22 -7
  23. package/src/cli/doctor.ts +14 -4
  24. package/src/codex/catalog/effort.ts +35 -4
  25. package/src/codex/catalog/metadata.ts +33 -5
  26. package/src/codex/catalog/native-models.ts +43 -2
  27. package/src/codex/catalog/pinned-models.ts +37 -0
  28. package/src/codex/catalog-auto-refresh.ts +6 -0
  29. package/src/codex/data/roster-pinned-models.json +359 -0
  30. package/src/codex/data/upstream-models.json +365 -271
  31. package/src/codex/inject/provider-table.ts +108 -0
  32. package/src/codex/inject/remove.ts +2 -114
  33. package/src/codex/model-entitlements.ts +14 -10
  34. package/src/codex/subagent-defaults.ts +2 -109
  35. package/src/codex/toml-source-lines.ts +112 -0
  36. package/src/config/live-reconcile.ts +145 -27
  37. package/src/config/load-degrade.ts +3 -4
  38. package/src/config.ts +2 -2
  39. package/src/generated/compatibility-version.json +83 -67
  40. package/src/generated/model-metadata.ts +5 -5
  41. package/src/lab/artifacts/sanitize.ts +60 -19
  42. package/src/lib/app-owned-memory-stores.ts +7 -0
  43. package/src/lib/app-owned-memory.ts +13 -2
  44. package/src/lib/errors.ts +6 -4
  45. package/src/lib/upstream-retry.ts +35 -5
  46. package/src/oauth/devin.ts +43 -37
  47. package/src/providers/codebuddy-models.ts +11 -0
  48. package/src/providers/kiro-models.ts +9 -0
  49. package/src/providers/quota/vendor-probes-oauth.ts +9 -2
  50. package/src/providers/registry/entries-core.ts +19 -8
  51. package/src/providers/registry/entries-extended.ts +4 -1
  52. package/src/providers/registry/model-seeds.ts +22 -2
  53. package/src/responses/bridge-search-replay-cache.ts +20 -10
  54. package/src/responses/plaintext-v2-agent-messages.ts +10 -1
  55. package/src/routing/identity-domains.ts +22 -15
  56. package/src/server/index/websocket-handler.ts +22 -2
  57. package/src/server/management/agent-settings-routes.ts +19 -10
  58. package/src/server/management/context.ts +4 -2
  59. package/src/server/responses/codex-ws-exchange.ts +24 -8
  60. package/src/server/responses/core-codex-account.ts +4 -0
  61. package/src/server/responses/core-combo-failure.ts +16 -9
  62. package/src/server/responses/core-combo.ts +7 -3
  63. package/src/server/responses/core-options.ts +6 -0
  64. package/src/server/responses/native-injection-replay.ts +13 -1
  65. package/src/server/responses/native-injection.ts +66 -7
  66. package/src/server/responses/native-response-control.ts +6 -2
  67. package/src/server/responses/native-steering-replay.ts +60 -0
  68. package/src/server/responses/native-steering.ts +9 -1
  69. package/src/server/responses/passthrough-delivery.ts +3 -4
  70. package/src/server/responses/passthrough-dispatch.ts +7 -0
  71. package/src/server/responses/request-prepare.ts +12 -0
  72. package/src/server/responses/request-transport.ts +5 -2
  73. package/src/server/responses/ws-upstream.ts +1 -1
  74. package/src/server/ws-bridge.ts +17 -1
  75. package/src/types/request.ts +5 -0
  76. package/src/usage/expected-prices.ts +38 -8
  77. package/src/web-search/executor.ts +38 -13
  78. package/gui/dist/assets/App-CH6C5H7x.js +0 -50
  79. package/gui/dist/assets/index-_bpvxJu0.css +0 -1
  80. package/gui/dist/assets/index-wpTOyepx.js +0 -86
@@ -0,0 +1,37 @@
1
+ import upstreamModelsSnapshot from "../data/upstream-models.json";
2
+ import rosterPinnedModels from "../data/roster-pinned-models.json";
3
+
4
+ /**
5
+ * Every native row this build pins, in one list: the codex-rs bundled snapshot first, then the
6
+ * rows captured from a live authenticated `/models` roster that the snapshot does not carry.
7
+ *
8
+ * Two files rather than one on purpose. `upstream-models.json` is re-pinned wholesale from the
9
+ * codex-rs bundled catalog, and a hand-merged row inside it would be erased (or conflict) on the
10
+ * next refresh. `roster-pinned-models.json` holds rows upstream serves but codex-rs has not
11
+ * bundled yet — `gpt-6-sol` and `gpt-6-luna`, captured from
12
+ * `chatgpt.com/backend-api/codex/models?client_version=0.155.0` on 2026-09-23, the day after
13
+ * https://openai.com/index/introducing-gpt-6-sol-and-luna/.
14
+ *
15
+ * The snapshot always wins: a roster row is appended only when its slug is absent from the
16
+ * snapshot. Once a codex-rs refresh bundles Sol or Luna, that row takes over automatically and
17
+ * the roster copy goes inert instead of shadowing newer upstream metadata. The roster file can
18
+ * then be emptied at leisure; nothing breaks while it still holds the stale copy.
19
+ */
20
+ type PinnedRow = Record<string, unknown> & { slug?: unknown };
21
+
22
+ function rowsOf(source: unknown): PinnedRow[] {
23
+ const models = (source as { models?: unknown }).models;
24
+ return Array.isArray(models) ? models as PinnedRow[] : [];
25
+ }
26
+
27
+ const PINNED_NATIVE_MODEL_ROWS: ReadonlyArray<PinnedRow> = (() => {
28
+ const snapshot = rowsOf(upstreamModelsSnapshot);
29
+ const snapshotSlugs = new Set(snapshot.flatMap(row => typeof row.slug === "string" ? [row.slug] : []));
30
+ const roster = rowsOf(rosterPinnedModels)
31
+ .filter(row => typeof row.slug === "string" && !snapshotSlugs.has(row.slug));
32
+ return Object.freeze([...snapshot, ...roster]);
33
+ })();
34
+
35
+ export function pinnedNativeModelRows(): ReadonlyArray<PinnedRow> {
36
+ return PINNED_NATIVE_MODEL_ROWS;
37
+ }
@@ -65,11 +65,17 @@ async function tick(): Promise<void> {
65
65
  const entryGeneration = generation;
66
66
  try {
67
67
  const {
68
+ armDetachedConfigBaseline,
68
69
  loadConfig,
69
70
  isCatalogAutoRefreshEnabled,
70
71
  resolveCatalogAutoRefreshIntervalMs,
71
72
  } = await import("../config");
72
73
  const config = loadConfig();
74
+ // Convergence can persist model-discovery fields after awaiting provider /models.
75
+ // Arm this independently loaded snapshot as detached so the save rebases every
76
+ // field — listener binding and disk-only keys included — against what is on disk
77
+ // by then, and concurrent hand edits survive the tick.
78
+ armDetachedConfigBaseline(config);
73
79
  if (!isCatalogAutoRefreshEnabled(config)) return;
74
80
  const configured = resolveCatalogAutoRefreshIntervalMs(config);
75
81
  // 0 is dormant: the section stays configured but this tick must not converge,