@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.
- package/gui/dist/assets/index-BTuCbqQd.css +1 -0
- package/gui/dist/assets/index-DoBVdPHP.js +134 -0
- package/gui/dist/index.html +2 -2
- package/package.json +4 -1
- package/src/adapters/anthropic-image-codec.ts +16 -2
- package/src/adapters/anthropic-image-normalize.ts +49 -2
- package/src/adapters/anthropic.ts +4 -1
- package/src/adapters/base.ts +23 -0
- package/src/adapters/coding-agent/turn.ts +22 -2
- package/src/adapters/command-code.ts +50 -3
- package/src/adapters/cursor/checkpoint-store.ts +3 -0
- package/src/adapters/cursor/discovery.ts +11 -8
- package/src/adapters/cursor/live-transport.ts +26 -9
- package/src/adapters/cursor/request-builder.ts +7 -1
- package/src/adapters/cursor/transport.ts +19 -0
- package/src/adapters/cursor.ts +3 -1
- package/src/adapters/devin/cloud-direct/chat.ts +3 -1
- package/src/adapters/devin/cloud-direct/stated-reset-retry.ts +42 -5
- package/src/adapters/devin.ts +50 -13
- package/src/adapters/google-antigravity-replay.ts +1 -1
- package/src/adapters/google-antigravity-wire.ts +29 -5
- package/src/adapters/google-http.ts +49 -10
- package/src/adapters/google-tool-schema.ts +595 -31
- package/src/adapters/google-wire-compiler.ts +93 -10
- package/src/adapters/google-wire-shape.ts +461 -0
- package/src/adapters/google.ts +37 -6
- package/src/adapters/openai-chat-images.ts +3 -1
- package/src/adapters/openai-chat.ts +5 -1
- package/src/adapters/openai-responses/image-gen.ts +8 -6
- package/src/adapters/openai-responses/passthrough.ts +15 -3
- package/src/adapters/openai-responses/reasoning.ts +7 -0
- package/src/adapters/opencode-go-additional-tools.ts +12 -2
- package/src/bridge/sse.ts +3 -151
- package/src/cli/account-extended.ts +4 -4
- package/src/cli/dispatch.ts +3 -3
- package/src/cli/doctor.ts +28 -9
- package/src/cli/hub.ts +3 -2
- package/src/cli/index.ts +7 -2
- package/src/cli/opencode.ts +2 -2
- package/src/cli/provider.ts +13 -1
- package/src/client/machine-api.ts +2 -2
- package/src/client/machine-listener.ts +2 -2
- package/src/client/runtime.ts +26 -2
- package/src/codex/account-store.ts +65 -0
- package/src/codex/auth-api/account-list.ts +19 -11
- package/src/codex/auth-api/pool-quota-probe.ts +30 -7
- package/src/codex/catalog/gather-capture.ts +21 -2
- package/src/codex/catalog/model-hints.ts +29 -28
- package/src/codex/catalog/parsing.ts +7 -0
- package/src/codex/catalog/provider-models.ts +19 -2
- package/src/codex/catalog/retained-sync.ts +22 -26
- package/src/codex/catalog/routed-gather.ts +19 -0
- package/src/codex/context-compat.ts +5 -2
- package/src/codex/desired-state.ts +4 -1
- package/src/codex/history-job.ts +6 -6
- package/src/codex/history-provider.ts +20 -166
- package/src/codex/history-rollout-read.ts +174 -0
- package/src/codex/internal/catalog-writer.ts +33 -1
- package/src/codex/model-cache.ts +47 -0
- package/src/codex/model-entitlements.ts +29 -10
- package/src/codex/observed-model-denials.ts +101 -8
- package/src/codex/prompt-text-probe.ts +9 -6
- package/src/codex/routing.ts +7 -1
- package/src/codex/shim.ts +1 -1
- package/src/codex/subagent-model-fallback.ts +22 -4
- package/src/combos/failover.ts +3 -0
- package/src/config/admitted-identity.ts +222 -0
- package/src/config/diagnostics.ts +22 -1
- package/src/config/feature-flags.ts +5 -0
- package/src/config/load-degrade.ts +18 -0
- package/src/config/proxy-env.ts +8 -2
- package/src/config/schema/compaction-triggers.ts +11 -0
- package/src/config/schema/config-schema.ts +4 -0
- package/src/config/schema/leaf-validators.ts +12 -0
- package/src/config.ts +2 -2
- package/src/generated/compatibility-version.json +249 -169
- package/src/grok/reset-coupons.ts +38 -19
- package/src/images/loop.ts +6 -1
- package/src/integrations/aside-profile-context.ts +37 -3
- package/src/integrations/aside-profile-journal.ts +68 -3
- package/src/integrations/aside-profiles.ts +128 -3
- package/src/integrations/mutation-plan.ts +815 -0
- package/src/integrations/writer.ts +85 -99
- package/src/lab/live/transport.ts +4 -0
- package/src/lab/live/types.ts +5 -0
- package/src/lab/subject/behavior-fingerprint.ts +1 -1
- package/src/lib/admin-secrets.ts +9 -1
- package/src/lib/debug-log-buffer.ts +6 -1
- package/src/lib/debug.ts +23 -0
- package/src/lib/errors.ts +79 -0
- package/src/lib/http-response-semantics.ts +57 -0
- package/src/lib/lab-live-pinned-sender.ts +26 -12
- package/src/lib/pinned-http.ts +142 -2
- package/src/lib/plain-data.ts +103 -0
- package/src/lib/process-control.ts +13 -5
- package/src/lib/provider-outbound.ts +50 -2
- package/src/lib/socks5-fetch.ts +136 -26
- package/src/lib/spend-ledger-owner.ts +364 -0
- package/src/lib/spend-reservation-ledger.ts +218 -27
- package/src/lib/windows-system-proxy.ts +16 -11
- package/src/oauth/callback-server.ts +4 -3
- package/src/oauth/generic-account-failover.ts +1 -0
- package/src/oauth/health.ts +12 -1
- package/src/oauth/index.ts +3 -107
- package/src/oauth/login-flow-state.ts +127 -0
- package/src/providers/derive.ts +34 -17
- package/src/providers/devin-cli-authmode-migration.ts +14 -10
- package/src/providers/key-failover.ts +66 -18
- package/src/providers/model-rename-migration.ts +55 -1
- package/src/providers/model-rename-startup.ts +7 -5
- package/src/providers/openai-virtual-models.ts +42 -2
- package/src/providers/quota/antigravity.ts +22 -2
- package/src/providers/quota/vendor-probes-key.ts +1 -1
- package/src/providers/registry/entries-core.ts +39 -17
- package/src/providers/registry/entries-extended.ts +35 -1
- package/src/providers/registry/model-ids.ts +168 -0
- package/src/providers/registry/model-seeds.ts +9 -0
- package/src/providers/registry/types.ts +2 -0
- package/src/providers/resolved-model-policy-merge.ts +167 -0
- package/src/providers/resolved-model-policy.ts +406 -0
- package/src/providers/stale-vision-classification-migration.ts +137 -0
- package/src/responses/apply-patch-envelope.ts +0 -12
- package/src/responses/freeform-wrapper-scan.ts +279 -0
- package/src/responses/legacy-dotted-tool-name-repair.ts +134 -0
- package/src/responses/progressive-freeform-input.ts +130 -0
- package/src/responses/reasoning-envelope.ts +30 -0
- package/src/responses/state.ts +5 -12
- package/src/responses/tool-name-aliases.ts +15 -1
- package/src/router.ts +91 -115
- package/src/routing/compatibility/behavior.ts +9 -0
- package/src/routing/compatibility/subject.ts +16 -1
- package/src/server/adapter-resolve.ts +9 -0
- package/src/server/auth-cors.ts +3 -0
- package/src/server/chat-completions.ts +5 -2
- package/src/server/claude-messages.ts +6 -3
- package/src/server/effort-row.ts +11 -3
- package/src/server/grok-responses-control-frame.ts +160 -1
- package/src/server/index/serve-options.ts +86 -29
- package/src/server/index/spend-ledger-lifecycle.ts +66 -0
- package/src/server/index/websocket-handler.ts +6 -1
- package/src/server/index.ts +16 -13
- package/src/server/management/aside-profile-routes.ts +266 -7
- package/src/server/management/config-routes.ts +18 -2
- package/src/server/management/context.ts +3 -0
- package/src/server/management/integration-routes.ts +287 -5
- package/src/server/management/metrics-routes.ts +20 -0
- package/src/server/management/model-rows.ts +224 -12
- package/src/server/management/route-registry.ts +14 -0
- package/src/server/management/shared.ts +10 -3
- package/src/server/management/system-restart.ts +7 -2
- package/src/server/management/system-routes.ts +2 -0
- package/src/server/management/usage-aggregate-cache.ts +4 -0
- package/src/server/management-api.ts +2 -0
- package/src/server/management-auth.ts +15 -1
- package/src/server/readiness.ts +29 -10
- package/src/server/relay-eager.ts +24 -2
- package/src/server/relay.ts +119 -10
- package/src/server/request-log.ts +55 -2
- package/src/server/request-metrics.ts +236 -0
- package/src/server/responses/adapter-continuation.ts +3 -3
- package/src/server/responses/adapter-dispatch.ts +11 -6
- package/src/server/responses/compact.ts +32 -10
- package/src/server/responses/compaction-routing.ts +111 -0
- package/src/server/responses/core-codex-account.ts +8 -3
- package/src/server/responses/core-combo.ts +7 -7
- package/src/server/responses/core-normalize.ts +6 -12
- package/src/server/responses/core-opaque-recovery.ts +1 -0
- package/src/server/responses/core-options.ts +4 -0
- package/src/server/responses/encrypted-payload.ts +20 -2
- package/src/server/responses/passthrough-delivery.ts +31 -14
- package/src/server/responses/passthrough-dispatch.ts +36 -9
- package/src/server/responses/policy-fallback.ts +5 -13
- package/src/server/responses/request-prepare.ts +67 -17
- package/src/server/responses/request-send-budget.ts +5 -1
- package/src/server/responses/request-sidecar-auth.ts +1 -1
- package/src/server/responses/request-transport.ts +2 -2
- package/src/server/responses/run-turn-execution.ts +25 -3
- package/src/server/responses/sidecar-execution.ts +17 -2
- package/src/server/responses/ws-upstream.ts +14 -27
- package/src/server/responses-custom-tool-repair.ts +27 -54
- package/src/server/responses-undeclared-tool-guard.ts +31 -1
- package/src/server/sse-payload-rewrite.ts +1 -1
- package/src/tray/windows-tray.ps1 +155 -3
- package/src/types/config.ts +11 -3
- package/src/types/provider.ts +18 -0
- package/src/types/request.ts +2 -0
- package/src/types/tools.ts +14 -0
- package/src/types.ts +1 -0
- package/src/vision/eligibility.ts +88 -9
- package/src/vision/plan.ts +34 -10
- package/src/web-search/executor.ts +41 -2
- package/src/web-search/loop.ts +6 -1
- package/gui/dist/assets/index-C5IebErG.js +0 -136
- 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
|
package/src/config/proxy-env.ts
CHANGED
|
@@ -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
|
-
|
|
147
|
-
|
|
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
|
-
|
|
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
|
-
|
|
230
|
+
warnDegradedTopLevelOptIns(parsed, config);
|
|
231
231
|
warnDegradedHostname(parsed, config);
|
|
232
232
|
warnDegradedListeners(parsed, config);
|
|
233
233
|
warnDegradedApiKeys(parsed, config);
|