@bitkyc08/opencodex 2.59.0 → 2.60.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 (194) hide show
  1. package/gui/dist/assets/index-BTuCbqQd.css +1 -0
  2. package/gui/dist/assets/index-DoBVdPHP.js +134 -0
  3. package/gui/dist/index.html +2 -2
  4. package/package.json +4 -1
  5. package/src/adapters/anthropic-image-codec.ts +16 -2
  6. package/src/adapters/anthropic-image-normalize.ts +49 -2
  7. package/src/adapters/anthropic.ts +4 -1
  8. package/src/adapters/base.ts +23 -0
  9. package/src/adapters/coding-agent/turn.ts +22 -2
  10. package/src/adapters/command-code.ts +50 -3
  11. package/src/adapters/cursor/checkpoint-store.ts +3 -0
  12. package/src/adapters/cursor/discovery.ts +11 -8
  13. package/src/adapters/cursor/live-transport.ts +26 -9
  14. package/src/adapters/cursor/request-builder.ts +7 -1
  15. package/src/adapters/cursor/transport.ts +19 -0
  16. package/src/adapters/cursor.ts +3 -1
  17. package/src/adapters/devin/cloud-direct/chat.ts +3 -1
  18. package/src/adapters/devin/cloud-direct/stated-reset-retry.ts +42 -5
  19. package/src/adapters/devin.ts +50 -13
  20. package/src/adapters/google-antigravity-replay.ts +1 -1
  21. package/src/adapters/google-antigravity-wire.ts +29 -5
  22. package/src/adapters/google-http.ts +49 -10
  23. package/src/adapters/google-tool-schema.ts +595 -31
  24. package/src/adapters/google-wire-compiler.ts +93 -10
  25. package/src/adapters/google-wire-shape.ts +461 -0
  26. package/src/adapters/google.ts +37 -6
  27. package/src/adapters/openai-chat-images.ts +3 -1
  28. package/src/adapters/openai-chat.ts +5 -1
  29. package/src/adapters/openai-responses/image-gen.ts +8 -6
  30. package/src/adapters/openai-responses/passthrough.ts +15 -3
  31. package/src/adapters/openai-responses/reasoning.ts +7 -0
  32. package/src/adapters/opencode-go-additional-tools.ts +12 -2
  33. package/src/bridge/sse.ts +3 -151
  34. package/src/cli/account-extended.ts +4 -4
  35. package/src/cli/dispatch.ts +3 -3
  36. package/src/cli/doctor.ts +28 -9
  37. package/src/cli/hub.ts +3 -2
  38. package/src/cli/index.ts +7 -2
  39. package/src/cli/opencode.ts +2 -2
  40. package/src/cli/provider.ts +13 -1
  41. package/src/client/machine-api.ts +2 -2
  42. package/src/client/machine-listener.ts +2 -2
  43. package/src/client/runtime.ts +26 -2
  44. package/src/codex/account-store.ts +65 -0
  45. package/src/codex/auth-api/account-list.ts +19 -11
  46. package/src/codex/auth-api/pool-quota-probe.ts +30 -7
  47. package/src/codex/catalog/gather-capture.ts +21 -2
  48. package/src/codex/catalog/model-hints.ts +29 -28
  49. package/src/codex/catalog/parsing.ts +7 -0
  50. package/src/codex/catalog/provider-models.ts +19 -2
  51. package/src/codex/catalog/retained-sync.ts +22 -26
  52. package/src/codex/catalog/routed-gather.ts +19 -0
  53. package/src/codex/context-compat.ts +5 -2
  54. package/src/codex/desired-state.ts +4 -1
  55. package/src/codex/history-job.ts +6 -6
  56. package/src/codex/history-provider.ts +20 -166
  57. package/src/codex/history-rollout-read.ts +174 -0
  58. package/src/codex/internal/catalog-writer.ts +33 -1
  59. package/src/codex/model-cache.ts +47 -0
  60. package/src/codex/model-entitlements.ts +29 -10
  61. package/src/codex/observed-model-denials.ts +101 -8
  62. package/src/codex/prompt-text-probe.ts +9 -6
  63. package/src/codex/routing.ts +7 -1
  64. package/src/codex/shim.ts +1 -1
  65. package/src/codex/subagent-model-fallback.ts +22 -4
  66. package/src/combos/failover.ts +3 -0
  67. package/src/config/admitted-identity.ts +222 -0
  68. package/src/config/diagnostics.ts +22 -1
  69. package/src/config/feature-flags.ts +5 -0
  70. package/src/config/load-degrade.ts +18 -0
  71. package/src/config/proxy-env.ts +8 -2
  72. package/src/config/schema/compaction-triggers.ts +11 -0
  73. package/src/config/schema/config-schema.ts +4 -0
  74. package/src/config/schema/leaf-validators.ts +12 -0
  75. package/src/config.ts +2 -2
  76. package/src/generated/compatibility-version.json +249 -169
  77. package/src/grok/reset-coupons.ts +38 -19
  78. package/src/images/loop.ts +6 -1
  79. package/src/integrations/aside-profile-context.ts +37 -3
  80. package/src/integrations/aside-profile-journal.ts +68 -3
  81. package/src/integrations/aside-profiles.ts +128 -3
  82. package/src/integrations/mutation-plan.ts +815 -0
  83. package/src/integrations/writer.ts +85 -99
  84. package/src/lab/live/transport.ts +4 -0
  85. package/src/lab/live/types.ts +5 -0
  86. package/src/lab/subject/behavior-fingerprint.ts +1 -1
  87. package/src/lib/admin-secrets.ts +9 -1
  88. package/src/lib/debug-log-buffer.ts +6 -1
  89. package/src/lib/debug.ts +23 -0
  90. package/src/lib/errors.ts +79 -0
  91. package/src/lib/http-response-semantics.ts +57 -0
  92. package/src/lib/lab-live-pinned-sender.ts +26 -12
  93. package/src/lib/pinned-http.ts +142 -2
  94. package/src/lib/plain-data.ts +103 -0
  95. package/src/lib/process-control.ts +13 -5
  96. package/src/lib/provider-outbound.ts +50 -2
  97. package/src/lib/socks5-fetch.ts +136 -26
  98. package/src/lib/spend-ledger-owner.ts +364 -0
  99. package/src/lib/spend-reservation-ledger.ts +218 -27
  100. package/src/lib/windows-system-proxy.ts +16 -11
  101. package/src/oauth/callback-server.ts +4 -3
  102. package/src/oauth/generic-account-failover.ts +1 -0
  103. package/src/oauth/health.ts +12 -1
  104. package/src/oauth/index.ts +3 -107
  105. package/src/oauth/login-flow-state.ts +127 -0
  106. package/src/providers/derive.ts +34 -17
  107. package/src/providers/devin-cli-authmode-migration.ts +14 -10
  108. package/src/providers/key-failover.ts +66 -18
  109. package/src/providers/model-rename-migration.ts +55 -1
  110. package/src/providers/model-rename-startup.ts +7 -5
  111. package/src/providers/openai-virtual-models.ts +42 -2
  112. package/src/providers/quota/antigravity.ts +22 -2
  113. package/src/providers/quota/vendor-probes-key.ts +1 -1
  114. package/src/providers/registry/entries-core.ts +39 -17
  115. package/src/providers/registry/entries-extended.ts +35 -1
  116. package/src/providers/registry/model-ids.ts +168 -0
  117. package/src/providers/registry/model-seeds.ts +9 -0
  118. package/src/providers/registry/types.ts +2 -0
  119. package/src/providers/resolved-model-policy-merge.ts +167 -0
  120. package/src/providers/resolved-model-policy.ts +406 -0
  121. package/src/providers/stale-vision-classification-migration.ts +137 -0
  122. package/src/responses/apply-patch-envelope.ts +0 -12
  123. package/src/responses/freeform-wrapper-scan.ts +279 -0
  124. package/src/responses/legacy-dotted-tool-name-repair.ts +134 -0
  125. package/src/responses/progressive-freeform-input.ts +130 -0
  126. package/src/responses/reasoning-envelope.ts +30 -0
  127. package/src/responses/state.ts +5 -12
  128. package/src/responses/tool-name-aliases.ts +15 -1
  129. package/src/router.ts +91 -115
  130. package/src/routing/compatibility/behavior.ts +9 -0
  131. package/src/routing/compatibility/subject.ts +16 -1
  132. package/src/server/adapter-resolve.ts +9 -0
  133. package/src/server/auth-cors.ts +3 -0
  134. package/src/server/chat-completions.ts +5 -2
  135. package/src/server/claude-messages.ts +6 -3
  136. package/src/server/effort-row.ts +11 -3
  137. package/src/server/grok-responses-control-frame.ts +160 -1
  138. package/src/server/index/serve-options.ts +86 -29
  139. package/src/server/index/spend-ledger-lifecycle.ts +66 -0
  140. package/src/server/index/websocket-handler.ts +6 -1
  141. package/src/server/index.ts +16 -13
  142. package/src/server/management/aside-profile-routes.ts +266 -7
  143. package/src/server/management/config-routes.ts +18 -2
  144. package/src/server/management/context.ts +3 -0
  145. package/src/server/management/integration-routes.ts +287 -5
  146. package/src/server/management/metrics-routes.ts +20 -0
  147. package/src/server/management/model-rows.ts +224 -12
  148. package/src/server/management/route-registry.ts +14 -0
  149. package/src/server/management/shared.ts +10 -3
  150. package/src/server/management/system-restart.ts +7 -2
  151. package/src/server/management/system-routes.ts +2 -0
  152. package/src/server/management/usage-aggregate-cache.ts +4 -0
  153. package/src/server/management-api.ts +2 -0
  154. package/src/server/management-auth.ts +15 -1
  155. package/src/server/readiness.ts +29 -10
  156. package/src/server/relay-eager.ts +24 -2
  157. package/src/server/relay.ts +119 -10
  158. package/src/server/request-log.ts +55 -2
  159. package/src/server/request-metrics.ts +236 -0
  160. package/src/server/responses/adapter-continuation.ts +3 -3
  161. package/src/server/responses/adapter-dispatch.ts +11 -6
  162. package/src/server/responses/compact.ts +32 -10
  163. package/src/server/responses/compaction-routing.ts +111 -0
  164. package/src/server/responses/core-codex-account.ts +8 -3
  165. package/src/server/responses/core-combo.ts +7 -7
  166. package/src/server/responses/core-normalize.ts +6 -12
  167. package/src/server/responses/core-opaque-recovery.ts +1 -0
  168. package/src/server/responses/core-options.ts +4 -0
  169. package/src/server/responses/encrypted-payload.ts +20 -2
  170. package/src/server/responses/passthrough-delivery.ts +31 -14
  171. package/src/server/responses/passthrough-dispatch.ts +36 -9
  172. package/src/server/responses/policy-fallback.ts +5 -13
  173. package/src/server/responses/request-prepare.ts +67 -17
  174. package/src/server/responses/request-send-budget.ts +5 -1
  175. package/src/server/responses/request-sidecar-auth.ts +1 -1
  176. package/src/server/responses/request-transport.ts +2 -2
  177. package/src/server/responses/run-turn-execution.ts +25 -3
  178. package/src/server/responses/sidecar-execution.ts +17 -2
  179. package/src/server/responses/ws-upstream.ts +14 -27
  180. package/src/server/responses-custom-tool-repair.ts +27 -54
  181. package/src/server/responses-undeclared-tool-guard.ts +31 -1
  182. package/src/server/sse-payload-rewrite.ts +1 -1
  183. package/src/tray/windows-tray.ps1 +155 -3
  184. package/src/types/config.ts +11 -3
  185. package/src/types/provider.ts +18 -0
  186. package/src/types/request.ts +2 -0
  187. package/src/types/tools.ts +14 -0
  188. package/src/types.ts +1 -0
  189. package/src/vision/eligibility.ts +88 -9
  190. package/src/vision/plan.ts +34 -10
  191. package/src/web-search/executor.ts +41 -2
  192. package/src/web-search/loop.ts +6 -1
  193. package/gui/dist/assets/index-C5IebErG.js +0 -136
  194. package/gui/dist/assets/index-OESInAjC.css +0 -1
@@ -101,6 +101,24 @@ export function warnDegradedStreamMode(rawParsed: unknown, validated: OcxConfig)
101
101
  }
102
102
  }
103
103
 
104
+ export function warnDegradedCompactionRouting(rawParsed: unknown, validated: OcxConfig): void {
105
+ if (!rawParsed || typeof rawParsed !== "object") return;
106
+ const raw = (rawParsed as Record<string, unknown>).compactionRouting;
107
+ if (raw !== undefined && validated.compactionRouting === undefined) {
108
+ console.warn("⚠️ config.json compactionRouting is invalid (expected { model, reasoningEffort?, triggers? } with a nonblank model, a declared effort, and triggers drawn without repetition from \"manual\" and \"auto\") — compaction keeps the conversation model");
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Top-level opt-in blocks whose hand-edited form degrades to "off" instead of failing the whole
114
+ * schema. Grouped behind one entry point because `src/config.ts` sits at its file-size cap, and
115
+ * the ratchet only ever moves down: a per-block call there costs a line the file does not have.
116
+ */
117
+ export function warnDegradedTopLevelOptIns(rawParsed: unknown, validated: OcxConfig): void {
118
+ warnDegradedStreamMode(rawParsed, validated);
119
+ warnDegradedCompactionRouting(rawParsed, validated);
120
+ }
121
+
104
122
  /**
105
123
  * Load-time degradation for `retryOn429` (loadConfig only): one hand-edited invalid optional
106
124
  * field (e.g. `attempts: 0` or a string) must not trip the whole provider schema and hide every
@@ -143,8 +143,14 @@ export function applyProxyEnvWith(
143
143
  } else {
144
144
  const found = readWindowsSystemProxy(auto.reader, auto.platform);
145
145
  if (found.kind === "proxy") {
146
- console.log(`[opencodex] proxy "auto": using Windows system proxy ${describeProxyForLog(found.url)}`);
147
- proxy = found.url;
146
+ const origins = [
147
+ found.httpUrl && `HTTP ${describeProxyForLog(found.httpUrl)}`,
148
+ found.httpsUrl && `HTTPS ${describeProxyForLog(found.httpsUrl)}`,
149
+ ].filter(Boolean).join(", ");
150
+ console.log(`[opencodex] proxy "auto": using Windows system proxy ${origins}`);
151
+ if (found.httpUrl) process.env.HTTP_PROXY = found.httpUrl;
152
+ if (found.httpsUrl) process.env.HTTPS_PROXY = found.httpsUrl;
153
+ proxy = undefined;
148
154
  } else {
149
155
  const reason = found.kind === "unsupported"
150
156
  ? "only Windows system proxy discovery is supported; using direct egress on this OS"
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The `compaction.trigger` values Codex labels a compaction turn with (`CompactionTrigger`
3
+ * in codex-rs: a manual `/compact` versus automatic compaction). `compactionRouting.triggers`
4
+ * selects which of them an override applies to.
5
+ *
6
+ * This is its own leaf module and imports nothing on purpose. The request path reads it from
7
+ * `src/server/responses/compaction-routing.ts`; importing `leaf-validators.ts` there instead
8
+ * closes a cycle with `config-schema.ts` that survives typecheck and then fails at run time
9
+ * with "Cannot access 'runtimeRoleSchema' before initialization".
10
+ */
11
+ export const COMPACTION_TRIGGERS = ["manual", "auto"] as const;
@@ -21,6 +21,7 @@ import {
21
21
  CODEX_ACCOUNT_NAMESPACE_ACCOUNT_ID_COLLISION_ERROR,
22
22
  codexAccountNamespacesSchema,
23
23
  modelPinnedEffortsSchema,
24
+ compactionRoutingSchema,
24
25
  modelPreferHostedToolsConfigError,
25
26
  providerModelCostsConfigError,
26
27
  providerRelativeSendPathConfigError,
@@ -73,6 +74,8 @@ export const configSchema = z.object({
73
74
  // A malformed privacy block must never be read as "unmask": .catch(undefined) drops it and
74
75
  // emailMaskingEnabled then falls back to masked, which is also what an absent block means.
75
76
  privacy: z.object({ maskEmails: z.boolean().optional() }).strict().optional().catch(undefined),
77
+ // Malformed hand edits disable this opt-in exporter. Live writes reject them in diagnostics.ts.
78
+ metricsExport: z.object({ enabled: z.boolean().optional() }).strict().optional().catch(undefined),
76
79
  // A malformed present client block must remain diagnosable from raw config and
77
80
  // fail closed through src/client/state.ts; unrelated provider state still loads.
78
81
  client: clientConnectionSchema.optional().catch(undefined),
@@ -125,6 +128,7 @@ export const configSchema = z.object({
125
128
  ]).optional().catch(undefined),
126
129
  providers: z.record(z.string(), providerConfigSchema),
127
130
  modelPinnedEfforts: modelPinnedEffortsSchema.optional(),
131
+ compactionRouting: compactionRoutingSchema.optional().catch(undefined),
128
132
  defaultProvider: z.string().min(1).default("openai"),
129
133
  defaultModelAliases: z.boolean().optional(),
130
134
  // Malformed hand edits disable this opt-in projection without rejecting providers.
@@ -38,12 +38,21 @@ import {
38
38
  isHostedToolUnsupportedForModel,
39
39
  } from "../../responses/hosted-tool-policy";
40
40
  import { getConfigDir } from "../paths";
41
+ import { COMPACTION_TRIGGERS } from "./compaction-triggers";
41
42
 
42
43
  /** One definition of "usable secret", shared by the schema and the warnings. */
43
44
  export function isUsableApiKeySecret(value: unknown): value is string {
44
45
  return typeof value === "string" && value.length > 0 && value === value.trim();
45
46
  }
46
47
 
48
+ export const compactionRoutingSchema = z.object({
49
+ model: z.string().trim().min(1),
50
+ reasoningEffort: z.string().refine(value => pinnedReasoningEffortConfigError(value) === null).optional(),
51
+ triggers: z.array(z.enum(COMPACTION_TRIGGERS)).nonempty()
52
+ .refine(values => new Set(values).size === values.length, "triggers must not repeat a value")
53
+ .optional(),
54
+ }).strict();
55
+
47
56
  /**
48
57
  * Bounds for the opt-in same-target 429 wait-and-retry policy. Single source of truth
49
58
  * shared by the config schema, the load-time sanitizer, and the management write
@@ -254,6 +263,8 @@ export const providerConfigSchema = z.object({
254
263
  modelSupportsServiceTier: z.record(z.string().min(1), z.boolean()).optional(),
255
264
  modelSuppressSyntheticMax: z.record(z.string().min(1), z.boolean()).optional(),
256
265
  preserveResponsesReasoningContent: z.boolean().optional(),
266
+ dropResponsesReasoningItems: z.boolean().optional(),
267
+ modelReasoningEffortsAuthoritative: z.boolean().optional(),
257
268
  decodesNativeCompactionBlobs: z.boolean().optional(),
258
269
  allowEncryptedV2AgentTasks: z.boolean().optional(),
259
270
  allowPrivateNetwork: z.boolean().optional(),
@@ -268,6 +279,7 @@ export const providerConfigSchema = z.object({
268
279
  // canonical ChatGPT backend WS selection is independent of this flag.
269
280
  upstreamWebsocket: z.boolean().optional(),
270
281
  directGeminiWireRenames: z.boolean().optional(),
282
+ googleToolSchemaPolicy: z.enum(["compatible", "reject-lossy"]).optional(),
271
283
  noStructuredOutputModels: z.array(z.string().min(1))
272
284
  .transform(normalizeNonBlankStringArray)
273
285
  .optional(),
package/src/config.ts CHANGED
@@ -170,7 +170,7 @@ import {
170
170
  sanitizeModelCostsForLoad,
171
171
  sanitizeCapabilityDeclarationsForLoad,
172
172
  warnInheritedFastWireConflicts,
173
- warnDegradedStreamMode,
173
+ warnDegradedTopLevelOptIns,
174
174
  warnDegradedHostname,
175
175
  warnDegradedListeners,
176
176
  warnDegradedApiKeys,
@@ -227,7 +227,7 @@ export function loadConfig(): OcxConfig {
227
227
  if (result.success) {
228
228
  const config = normalizeApiKeyIds(result.data as OcxConfig);
229
229
  warnInheritedFastWireConflicts(configPath, config);
230
- warnDegradedStreamMode(parsed, config);
230
+ warnDegradedTopLevelOptIns(parsed, config);
231
231
  warnDegradedHostname(parsed, config);
232
232
  warnDegradedListeners(parsed, config);
233
233
  warnDegradedApiKeys(parsed, config);