@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.
- package/bin/ocx.mjs +99 -70
- package/gui/dist/assets/index-BG43zwVe.js +102 -0
- package/gui/dist/assets/index-CiSI-jrP.css +1 -0
- package/gui/dist/index.html +2 -2
- package/package.json +1 -1
- package/src/adapters/anthropic.ts +6 -8
- package/src/adapters/base.ts +2 -0
- package/src/adapters/command-code-project-context.ts +377 -0
- package/src/adapters/command-code.ts +7 -4
- package/src/adapters/cursor/live-models.ts +8 -0
- package/src/adapters/cursor/live-transport.ts +21 -0
- package/src/adapters/cursor/native-exec-bridge.ts +141 -0
- package/src/adapters/cursor/native-exec-desktop.ts +16 -0
- package/src/adapters/cursor/tool-definitions.ts +1 -1
- package/src/adapters/google-http.ts +12 -2
- package/src/adapters/google-wire-compiler.ts +83 -2
- package/src/adapters/google.ts +62 -21
- package/src/adapters/kiro.ts +0 -3
- package/src/adapters/openai-responses.ts +3 -0
- package/src/adapters/tool-catalog-nudge.ts +1 -1
- package/src/adapters/xai-web-search.ts +7 -2
- package/src/bridge.ts +21 -15
- package/src/cli/dispatch.ts +50 -2
- package/src/cli/doctor.ts +24 -11
- package/src/cli/help.ts +4 -3
- package/src/cli/index.ts +11 -4
- package/src/cli/models.ts +13 -3
- package/src/cli/observe.ts +20 -5
- package/src/cli/provider.ts +2 -1
- package/src/cli/registry.ts +7 -5
- package/src/cli/status.ts +2 -1
- package/src/cli/system-restart-client.ts +1 -1
- package/src/cli/usage-report.ts +134 -0
- package/src/codex/app-server-processes.ts +3 -1
- package/src/codex/catalog/aggregation.ts +13 -1
- package/src/codex/catalog/effort.ts +24 -9
- package/src/codex/catalog/model-metadata.ts +566 -0
- package/src/codex/catalog/parsing.ts +33 -0
- package/src/codex/catalog/provider-fetch.ts +123 -32
- package/src/codex/catalog/sync.ts +5 -4
- package/src/codex/desktop-app-restart.ts +342 -0
- package/src/codex/history-job.ts +32 -3
- package/src/codex/history-manifest.ts +112 -0
- package/src/codex/history-migration-guardian.ts +5 -5
- package/src/codex/history-provider.ts +825 -247
- package/src/codex/history-worker.ts +8 -5
- package/src/codex/inject.ts +49 -21
- package/src/codex/injected-marker.ts +1 -1
- package/src/codex/internal/history-writer.ts +4 -3
- package/src/codex/native-profile-startup.ts +157 -27
- package/src/codex/native-residue.ts +26 -33
- package/src/combos/failover.ts +27 -0
- package/src/compatibility/index.ts +26 -0
- package/src/compatibility/manifest.ts +253 -0
- package/src/compatibility/openai-responses.ts +81 -0
- package/src/config/atomic-write.ts +219 -0
- package/src/config/paths.ts +40 -0
- package/src/config/process-state.ts +308 -0
- package/src/config/provider-validation.ts +177 -0
- package/src/config.ts +77 -812
- package/src/generated/compatibility-version.json +162 -94
- package/src/images/plan.ts +5 -4
- package/src/integrations/ownership-policy.ts +141 -0
- package/src/integrations/ownership.ts +10 -0
- package/src/integrations/state.ts +44 -5
- package/src/integrations/writer.ts +6 -0
- package/src/lab/subject/behavior-fingerprint.ts +1 -1
- package/src/lib/bounded-body.ts +14 -2
- package/src/lib/process-control.ts +2 -1
- package/src/lib/state-store-registrations.ts +2 -0
- package/src/lib/tool-argument-integers.ts +56 -5
- package/src/oauth/health.ts +1 -1
- package/src/oauth/index.ts +3 -0
- package/src/providers/registry.ts +1 -1
- package/src/reasoning-effort.ts +19 -2
- package/src/responses/apply-patch-envelope.ts +63 -0
- package/src/responses/custom-tool-compat.ts +132 -38
- package/src/responses/parser.ts +3 -2
- package/src/responses/reasoning-replay-cache.ts +81 -3
- package/src/routing/compatibility/behavior.ts +3 -0
- package/src/server/auth-cors.ts +9 -7
- package/src/server/index.ts +102 -21
- package/src/server/local-management-read-client.ts +1 -1
- package/src/server/local-provider-reload-client.ts +1 -1
- package/src/server/management/agent-settings-routes.ts +1 -1
- package/src/server/management/config-routes.ts +4 -1
- package/src/server/management/context.ts +1 -1
- package/src/server/management/logs-usage-routes.ts +27 -6
- package/src/server/management/model-routes.ts +8 -4
- package/src/server/management/native-integration-routes.ts +2 -1
- package/src/server/management/provider-capability-config.ts +1 -1
- package/src/server/management/system-restart.ts +1 -1
- package/src/server/port-reclaim.ts +1 -1
- package/src/server/proxy-liveness.ts +2 -1
- package/src/server/request-log-conversation.ts +30 -0
- package/src/server/responses/codex-auth-error.ts +55 -0
- package/src/server/responses/combo-stream-preflight.ts +171 -0
- package/src/server/responses/compact.ts +6 -21
- package/src/server/responses/core.ts +242 -101
- package/src/server/responses/fetch-helpers.ts +2 -97
- package/src/server/responses-custom-tool-repair.ts +41 -5
- package/src/server/responses-undeclared-tool-guard.ts +156 -15
- package/src/service.ts +8 -4
- package/src/types/provider.ts +7 -0
- package/src/types/request.ts +12 -1
- package/src/types/tools.ts +87 -11
- package/src/types.ts +1 -1
- package/src/update/index.ts +5 -4
- package/src/update/job.ts +3 -1
- package/src/update/transactional-install.mjs +8 -1
- package/src/usage/log.ts +16 -8
- package/src/usage/summary.ts +201 -8
- package/src/vision/describe.ts +18 -13
- package/src/web-search/executor.ts +10 -3
- package/src/web-search/gemini-executor.ts +35 -13
- package/src/web-search/index.ts +85 -1
- package/gui/dist/assets/index-BAMgarF9.js +0 -102
- package/gui/dist/assets/index-CGoDO3uO.css +0 -1
package/src/web-search/index.ts
CHANGED
|
@@ -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 <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 ?? {};
|