@yansigit/opencodex 2.31.2 → 2.32.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 (118) hide show
  1. package/bin/ocx.mjs +99 -70
  2. package/gui/dist/assets/index-BG43zwVe.js +102 -0
  3. package/gui/dist/assets/index-CiSI-jrP.css +1 -0
  4. package/gui/dist/index.html +2 -2
  5. package/package.json +1 -1
  6. package/src/adapters/anthropic.ts +6 -8
  7. package/src/adapters/base.ts +2 -0
  8. package/src/adapters/command-code-project-context.ts +377 -0
  9. package/src/adapters/command-code.ts +7 -4
  10. package/src/adapters/cursor/live-models.ts +8 -0
  11. package/src/adapters/cursor/live-transport.ts +21 -0
  12. package/src/adapters/cursor/native-exec-bridge.ts +141 -0
  13. package/src/adapters/cursor/native-exec-desktop.ts +16 -0
  14. package/src/adapters/cursor/tool-definitions.ts +1 -1
  15. package/src/adapters/google-http.ts +12 -2
  16. package/src/adapters/google-wire-compiler.ts +83 -2
  17. package/src/adapters/google.ts +62 -21
  18. package/src/adapters/kiro.ts +0 -3
  19. package/src/adapters/openai-responses.ts +3 -0
  20. package/src/adapters/tool-catalog-nudge.ts +1 -1
  21. package/src/adapters/xai-web-search.ts +7 -2
  22. package/src/bridge.ts +21 -15
  23. package/src/cli/dispatch.ts +50 -2
  24. package/src/cli/doctor.ts +24 -11
  25. package/src/cli/help.ts +4 -3
  26. package/src/cli/index.ts +11 -4
  27. package/src/cli/models.ts +13 -3
  28. package/src/cli/observe.ts +20 -5
  29. package/src/cli/provider.ts +2 -1
  30. package/src/cli/registry.ts +7 -5
  31. package/src/cli/status.ts +2 -1
  32. package/src/cli/system-restart-client.ts +1 -1
  33. package/src/cli/usage-report.ts +134 -0
  34. package/src/codex/app-server-processes.ts +3 -1
  35. package/src/codex/catalog/aggregation.ts +13 -1
  36. package/src/codex/catalog/effort.ts +24 -9
  37. package/src/codex/catalog/model-metadata.ts +566 -0
  38. package/src/codex/catalog/parsing.ts +33 -0
  39. package/src/codex/catalog/provider-fetch.ts +123 -32
  40. package/src/codex/catalog/sync.ts +5 -4
  41. package/src/codex/desktop-app-restart.ts +342 -0
  42. package/src/codex/history-job.ts +32 -3
  43. package/src/codex/history-manifest.ts +112 -0
  44. package/src/codex/history-migration-guardian.ts +5 -5
  45. package/src/codex/history-provider.ts +825 -247
  46. package/src/codex/history-worker.ts +8 -5
  47. package/src/codex/inject.ts +49 -21
  48. package/src/codex/injected-marker.ts +1 -1
  49. package/src/codex/internal/history-writer.ts +4 -3
  50. package/src/codex/native-profile-startup.ts +157 -27
  51. package/src/codex/native-residue.ts +26 -33
  52. package/src/combos/failover.ts +27 -0
  53. package/src/compatibility/index.ts +26 -0
  54. package/src/compatibility/manifest.ts +253 -0
  55. package/src/compatibility/openai-responses.ts +81 -0
  56. package/src/config/atomic-write.ts +219 -0
  57. package/src/config/paths.ts +40 -0
  58. package/src/config/process-state.ts +308 -0
  59. package/src/config/provider-validation.ts +177 -0
  60. package/src/config.ts +77 -812
  61. package/src/generated/compatibility-version.json +162 -94
  62. package/src/images/plan.ts +5 -4
  63. package/src/integrations/ownership-policy.ts +141 -0
  64. package/src/integrations/ownership.ts +10 -0
  65. package/src/integrations/state.ts +44 -5
  66. package/src/integrations/writer.ts +6 -0
  67. package/src/lab/subject/behavior-fingerprint.ts +1 -1
  68. package/src/lib/bounded-body.ts +14 -2
  69. package/src/lib/process-control.ts +2 -1
  70. package/src/lib/state-store-registrations.ts +2 -0
  71. package/src/lib/tool-argument-integers.ts +56 -5
  72. package/src/oauth/health.ts +1 -1
  73. package/src/oauth/index.ts +3 -0
  74. package/src/providers/registry.ts +1 -1
  75. package/src/reasoning-effort.ts +19 -2
  76. package/src/responses/apply-patch-envelope.ts +63 -0
  77. package/src/responses/custom-tool-compat.ts +132 -38
  78. package/src/responses/parser.ts +3 -2
  79. package/src/responses/reasoning-replay-cache.ts +81 -3
  80. package/src/routing/compatibility/behavior.ts +3 -0
  81. package/src/server/auth-cors.ts +9 -7
  82. package/src/server/index.ts +102 -21
  83. package/src/server/local-management-read-client.ts +1 -1
  84. package/src/server/local-provider-reload-client.ts +1 -1
  85. package/src/server/management/agent-settings-routes.ts +1 -1
  86. package/src/server/management/config-routes.ts +4 -1
  87. package/src/server/management/context.ts +1 -1
  88. package/src/server/management/logs-usage-routes.ts +27 -6
  89. package/src/server/management/model-routes.ts +8 -4
  90. package/src/server/management/native-integration-routes.ts +2 -1
  91. package/src/server/management/provider-capability-config.ts +1 -1
  92. package/src/server/management/system-restart.ts +1 -1
  93. package/src/server/port-reclaim.ts +1 -1
  94. package/src/server/proxy-liveness.ts +2 -1
  95. package/src/server/request-log-conversation.ts +30 -0
  96. package/src/server/responses/codex-auth-error.ts +55 -0
  97. package/src/server/responses/combo-stream-preflight.ts +171 -0
  98. package/src/server/responses/compact.ts +6 -21
  99. package/src/server/responses/core.ts +242 -101
  100. package/src/server/responses/fetch-helpers.ts +2 -97
  101. package/src/server/responses-custom-tool-repair.ts +41 -5
  102. package/src/server/responses-undeclared-tool-guard.ts +156 -15
  103. package/src/service.ts +8 -4
  104. package/src/types/provider.ts +7 -0
  105. package/src/types/request.ts +12 -1
  106. package/src/types/tools.ts +87 -11
  107. package/src/types.ts +1 -1
  108. package/src/update/index.ts +5 -4
  109. package/src/update/job.ts +3 -1
  110. package/src/update/transactional-install.mjs +8 -1
  111. package/src/usage/log.ts +16 -8
  112. package/src/usage/summary.ts +201 -8
  113. package/src/vision/describe.ts +18 -13
  114. package/src/web-search/executor.ts +10 -3
  115. package/src/web-search/gemini-executor.ts +35 -13
  116. package/src/web-search/index.ts +85 -1
  117. package/gui/dist/assets/index-BAMgarF9.js +0 -102
  118. package/gui/dist/assets/index-CGoDO3uO.css +0 -1
@@ -1,4 +1,4 @@
1
- import type { OcxConfig, OcxParsedRequest, OcxProviderConfig } from "../types";
1
+ import type { OcxConfig, OcxContentPart, OcxParsedRequest, OcxProviderConfig } from "../types";
2
2
  import { modelInList, toolChoiceToolPredicate } from "../types";
3
3
  import { isModelTextOnly } from "../vision";
4
4
  import type { SidecarSettings } from "./executor";
@@ -166,6 +166,86 @@ export function resolveSidecarBackend(
166
166
  return "openai";
167
167
  }
168
168
 
169
+ export interface CcaInTurnGrounding {
170
+ search: boolean;
171
+ urlContext: boolean;
172
+ }
173
+
174
+ const HTTP_URL_RE = /https?:\/\/[^\s<>"')\]]+/i;
175
+ const EXPLICIT_SIDECAR_BACKENDS = new Set<WebSearchBackendId>(["openai", "anthropic", "xai", "exa"]);
176
+
177
+ function isGemini3ModelId(modelId: string): boolean {
178
+ return /gemini-3/i.test(modelId);
179
+ }
180
+
181
+ /** Whether a planned media bridge will actually inject tools on this turn. */
182
+ export function mediaBridgeWillRun(
183
+ hasMediaPlan: boolean,
184
+ hasWebSearchPlan: boolean,
185
+ adapterRunsTurn: boolean,
186
+ isStreaming = true,
187
+ ): boolean {
188
+ return hasMediaPlan && isStreaming && (!hasWebSearchPlan || adapterRunsTurn);
189
+ }
190
+
191
+ function messageTextContainsHttpUrl(content: string | OcxContentPart[]): boolean {
192
+ if (typeof content === "string") return HTTP_URL_RE.test(content);
193
+ for (const part of content) {
194
+ if (part.type === "image") {
195
+ const url = part.imageUrl;
196
+ if (url && !url.startsWith("data:") && /^https?:/i.test(url)) return true;
197
+ continue;
198
+ }
199
+ if (part.type === "text" && HTTP_URL_RE.test(part.text ?? "")) return true;
200
+ }
201
+ return false;
202
+ }
203
+
204
+ /** True when request text carries http(s) URLs that become remote-url placeholders upstream. */
205
+ export function requestNeedsCcaUrlContext(parsed: OcxParsedRequest): boolean {
206
+ for (const msg of parsed.context.messages) {
207
+ if (msg.role === "user" || msg.role === "developer") {
208
+ if (messageTextContainsHttpUrl(msg.content)) return true;
209
+ continue;
210
+ }
211
+ if (msg.role === "toolResult" && typeof msg.content === "string" && HTTP_URL_RE.test(msg.content)) return true;
212
+ if (msg.role === "assistant") {
213
+ for (const part of msg.content) {
214
+ if (part.type === "text" && HTTP_URL_RE.test(part.text ?? "")) return true;
215
+ }
216
+ }
217
+ }
218
+ return false;
219
+ }
220
+
221
+ /**
222
+ * Antigravity Gemini in-turn google_search / url_context on the main routed fetch. Returns undefined
223
+ * when the request should use the web-search sidecar (Claude-on-CCA, explicit sidecar backend, or
224
+ * Gemini &lt;3 with Codex function tools, including media bridge tools that will be injected later).
225
+ */
226
+ export function resolveCcaInTurnGrounding(
227
+ config: OcxConfig,
228
+ parsed: OcxParsedRequest,
229
+ isPassthrough: boolean,
230
+ provider: OcxProviderConfig,
231
+ modelId: string,
232
+ hasMediaBridge = false,
233
+ ): CcaInTurnGrounding | undefined {
234
+ if (!parsed._webSearch || isPassthrough) return undefined;
235
+ if (provider.googleMode !== "cloud-code-assist") return undefined;
236
+ if (/claude/i.test(modelId)) return undefined;
237
+ if (!toolChoiceToolPredicate(parsed.options.toolChoice)(buildWebSearchTool())) return undefined;
238
+ const cfg = config.webSearchSidecar ?? {};
239
+ if (cfg.enabled === false) return undefined;
240
+ if (cfg.backend !== undefined && EXPLICIT_SIDECAR_BACKENDS.has(cfg.backend)) return undefined;
241
+ const hasCodexTools = (parsed.context.tools?.length ?? 0) > 0 || hasMediaBridge;
242
+ if (hasCodexTools && !isGemini3ModelId(modelId)) return undefined;
243
+ return {
244
+ search: true,
245
+ urlContext: requestNeedsCcaUrlContext(parsed),
246
+ };
247
+ }
248
+
169
249
  export interface SidecarPlan {
170
250
  /** Which executor runs the search. Anthropic does not require a forward provider. */
171
251
  backend: WebSearchBackendId;
@@ -215,7 +295,11 @@ export function planWebSearch(
215
295
  provider: OcxProviderConfig,
216
296
  modelId: string,
217
297
  openAiSidecar?: ResolvedOpenAiForwardSidecar,
298
+ // Core passes the potential media plan here so sidecar precedence can be resolved
299
+ // before deciding whether the media bridge actually runs.
300
+ hasMediaBridge = false,
218
301
  ): SidecarPlan | undefined {
302
+ if (resolveCcaInTurnGrounding(config, parsed, isPassthrough, provider, modelId, hasMediaBridge)) return undefined;
219
303
  if (!parsed._webSearch || isPassthrough) return undefined;
220
304
  if (!toolChoiceToolPredicate(parsed.options.toolChoice)(buildWebSearchTool())) return undefined;
221
305
  const cfg = config.webSearchSidecar ?? {};