@bitkyc08/opencodex 2.84.0 → 2.87.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/README.md +0 -4
- package/bin/ocx.mjs +61 -3
- package/gui/dist/assets/App-ZfYbLHkB.js +58 -0
- package/gui/dist/assets/App-wT3mXqFz.css +1 -0
- package/gui/dist/assets/{Tray-C9TGtwad.js → Tray-DCd-A1az.js} +1 -1
- package/gui/dist/assets/index-CfYDMj34.js +94 -0
- package/gui/dist/assets/index-DPeB9HpV.css +1 -0
- package/gui/dist/assets/quota-summary-ChvmKGOk.js +1 -0
- package/gui/dist/index.html +2 -2
- package/package.json +1 -2
- package/src/adapters/anthropic/beta-allowlist.ts +91 -11
- package/src/adapters/anthropic/beta-body-pairs.ts +93 -0
- package/src/adapters/anthropic/client-identity.ts +1 -1
- package/src/adapters/anthropic/passthrough.ts +16 -3
- package/src/adapters/anthropic-progress.ts +84 -0
- package/src/adapters/anthropic.ts +108 -21
- package/src/adapters/azure.ts +19 -1
- package/src/adapters/base.ts +2 -0
- package/src/adapters/claude-cli/adapter.ts +111 -23
- package/src/adapters/claude-cli/profiles.ts +2 -1
- package/src/adapters/claude-cli/stable-replay.ts +108 -0
- package/src/adapters/claude-cli/usage-admission.ts +230 -0
- package/src/adapters/client-fingerprint.ts +24 -0
- package/src/adapters/coding-agent/protocol.ts +1 -1
- package/src/adapters/coding-agent/turn.ts +40 -11
- package/src/adapters/cursor/arg-codec.ts +17 -5
- package/src/adapters/cursor/catalog.ts +8 -0
- package/src/adapters/cursor/effort-map.ts +3 -0
- package/src/adapters/cursor/freeform-args.ts +75 -0
- package/src/adapters/cursor/protobuf-events.ts +36 -23
- package/src/adapters/dsh-account.ts +97 -0
- package/src/adapters/google-antigravity-wire.ts +22 -1
- package/src/adapters/google.ts +37 -10
- package/src/adapters/openai-chat/messages.ts +4 -3
- package/src/adapters/openai-chat/passthrough.ts +8 -2
- package/src/adapters/openai-chat/reasoning-replay.ts +52 -0
- package/src/adapters/openai-chat/response-events.ts +59 -1
- package/src/adapters/openai-chat.ts +8 -5
- package/src/adapters/openai-responses/compaction-search-history.ts +14 -7
- package/src/adapters/openai-responses/passthrough.ts +57 -125
- package/src/adapters/openai-responses/request-strips.ts +25 -3
- package/src/adapters/openai-responses/transport.ts +81 -0
- package/src/adapters/qoder/adapter.ts +44 -3
- package/src/adapters/registry.ts +5 -0
- package/src/adapters/zed.ts +26 -1
- package/src/advisor/activity.ts +55 -0
- package/src/advisor/budget.ts +62 -0
- package/src/advisor/consult.ts +223 -0
- package/src/advisor/context.ts +238 -0
- package/src/advisor/disclosure.ts +20 -0
- package/src/advisor/evidence-tool.ts +21 -0
- package/src/advisor/evidence.ts +117 -0
- package/src/advisor/runtime.ts +353 -0
- package/src/advisor/settings.ts +144 -0
- package/src/advisor/state.ts +369 -0
- package/src/advisor/synthetic-tool.ts +33 -0
- package/src/bridge/errors.ts +24 -1
- package/src/bridge/internal.ts +3 -1
- package/src/bridge/response-json.ts +18 -3
- package/src/bridge/sse.ts +58 -8
- package/src/bridge/terminal-refusal.ts +59 -0
- package/src/chat/inbound.ts +30 -6
- package/src/chat/outbound.ts +5 -0
- package/src/claude/desktop-3p-library.ts +72 -7
- package/src/claude/desktop-3p.ts +75 -19
- package/src/claude/desktop-first-party.ts +1 -1
- package/src/claude/desktop-picker-platform.ts +4 -0
- package/src/claude/desktop-picker-profile.ts +11 -4
- package/src/claude/desktop-picker.ts +15 -8
- package/src/claude/desktop-profile.ts +10 -1
- package/src/claude/desktop-remote-store-io.ts +5 -3
- package/src/claude/desktop-system-proxy.ts +50 -4
- package/src/claude/inbound-content-options.ts +11 -0
- package/src/claude/inbound.ts +154 -50
- package/src/claude/intercept/local-ca.ts +8 -1
- package/src/claude/intercept/picker-ca-startup.ts +2 -1
- package/src/claude/intercept/picker-runtime.ts +6 -5
- package/src/claude/intercept/picker-trust-windows.ts +338 -0
- package/src/claude/intercept/picker-trust.ts +19 -0
- package/src/claude/intercept/port-policy.ts +30 -0
- package/src/claude/intercept/runtime.ts +97 -94
- package/src/claude/model-default-settings.ts +154 -0
- package/src/claude/model-info.ts +7 -7
- package/src/claude/outbound.ts +51 -19
- package/src/cli/account-api.ts +1 -0
- package/src/cli/account-policy-dto.ts +6 -0
- package/src/cli/account-policy.ts +34 -5
- package/src/cli/account-preservation.ts +44 -0
- package/src/cli/account.ts +8 -2
- package/src/cli/advisor.ts +165 -0
- package/src/cli/auxiliary-listener-preflight.ts +37 -0
- package/src/cli/capabilities-accounts.ts +20 -1
- package/src/cli/capabilities-agents-routing.ts +23 -2
- package/src/cli/capabilities-base.ts +39 -11
- package/src/cli/capabilities-observe-system.ts +63 -3
- package/src/cli/capabilities-provider-models.ts +11 -0
- package/src/cli/chatgpt-command.ts +35 -14
- package/src/cli/claude.ts +46 -6
- package/src/cli/codex-cli-update.ts +151 -41
- package/src/cli/codex-provider.ts +44 -0
- package/src/cli/combo-input.ts +10 -1
- package/src/cli/combo-result.ts +1 -1
- package/src/cli/combo.ts +2 -1
- package/src/cli/cross-home-owner.ts +17 -14
- package/src/cli/dispatch.ts +30 -5
- package/src/cli/doctor.ts +15 -1
- package/src/cli/ensure-desktop-cold-start.ts +382 -0
- package/src/cli/export-command.ts +1 -1
- package/src/cli/help.ts +4 -2
- package/src/cli/index.ts +14 -5
- package/src/cli/integration-plan-dto.ts +3 -0
- package/src/cli/log-history.ts +172 -0
- package/src/cli/models-runtime-subcommands.ts +1 -0
- package/src/cli/models-runtime.ts +72 -8
- package/src/cli/observe-stream.ts +2 -0
- package/src/cli/observe.ts +16 -4
- package/src/cli/provider.ts +27 -5
- package/src/cli/registry.ts +41 -9
- package/src/cli/restart-scope.ts +3 -1
- package/src/cli/runtime-api.ts +5 -3
- package/src/cli/system-command.ts +40 -8
- package/src/cli/uninstall-client-state.ts +32 -0
- package/src/cli/usage-compare.ts +309 -0
- package/src/cli/usage-model-search.ts +4 -4
- package/src/cli/usage-report.ts +2 -2
- package/src/cli/v2.ts +1 -1
- package/src/client/machine-listener.ts +1 -3
- package/src/client/runtime.ts +1 -0
- package/src/clients/client-path.ts +51 -0
- package/src/clients/config-export/contracts.ts +3 -1
- package/src/clients/config-export/model-metadata.ts +3 -2
- package/src/clients/config-export/qoder.ts +93 -0
- package/src/clients/config-export.ts +35 -48
- package/src/clients/gentle-shell-path.ts +87 -0
- package/src/codex/account-auto-switch.ts +2 -0
- package/src/codex/account-identity.ts +29 -0
- package/src/codex/account-label.ts +1 -1
- package/src/codex/account-lifecycle.ts +21 -5
- package/src/codex/account-preservation.ts +28 -0
- package/src/codex/account-use-remaining.ts +23 -0
- package/src/codex/app-server-processes.ts +97 -7
- package/src/codex/app-server-restart-service.ts +55 -4
- package/src/codex/auth-api/account-list.ts +4 -0
- package/src/codex/auth-api/account-pause-group.ts +6 -50
- package/src/codex/auth-api/account-preservation.ts +57 -0
- package/src/codex/auth-api/pool-mode-gate.ts +5 -2
- package/src/codex/auth-api/routes.ts +8 -0
- package/src/codex/auth-api/use-remaining-route.ts +36 -0
- package/src/codex/auth-api.ts +0 -1
- package/src/codex/auth-context.ts +81 -7
- package/src/codex/autostart-health.ts +4 -0
- package/src/codex/catalog/auto-review.ts +20 -3
- package/src/codex/catalog/build-entries.ts +19 -2
- package/src/codex/catalog/combo-member.ts +14 -5
- package/src/codex/catalog/configured-tiers.ts +50 -0
- package/src/codex/catalog/effort.ts +4 -1
- package/src/codex/catalog/gather-capture.ts +2 -0
- package/src/codex/catalog/metadata.ts +11 -9
- package/src/codex/catalog/model-hints.ts +42 -19
- package/src/codex/catalog/model-visibility.ts +3 -1
- package/src/codex/catalog/native-ultrafast.ts +106 -0
- package/src/codex/catalog/parsing.ts +35 -86
- package/src/codex/catalog/provider-models.ts +40 -34
- package/src/codex/catalog/retained-sync.ts +2 -0
- package/src/codex/catalog/routed-gather.ts +33 -16
- package/src/codex/catalog/vendor-context.ts +82 -0
- package/src/codex/cli-install-provenance.ts +105 -17
- package/src/codex/cli-update-plan.ts +545 -0
- package/src/codex/config-write-lock.ts +63 -4
- package/src/codex/convergence.ts +2 -0
- package/src/codex/desktop-app/picker-freshness.ts +96 -0
- package/src/codex/desktop-app/types.ts +2 -0
- package/src/codex/desktop-app/windows.ts +29 -16
- package/src/codex/desktop-app-restart.ts +25 -2
- package/src/codex/desktop-compatibility/certificate-service.ts +99 -0
- package/src/codex/desktop-compatibility/certificate-store.ts +193 -0
- package/src/codex/desktop-compatibility/connection-store.ts +87 -0
- package/src/codex/desktop-compatibility/installed-build.ts +73 -0
- package/src/codex/desktop-compatibility/json-body.ts +29 -0
- package/src/codex/desktop-compatibility/native-identity.ts +62 -0
- package/src/codex/desktop-compatibility/relay-listener.ts +93 -0
- package/src/codex/desktop-compatibility/routing-binding.ts +10 -0
- package/src/codex/desktop-compatibility/routing-preflight.ts +69 -0
- package/src/codex/desktop-compatibility/runtime-ownership.ts +28 -0
- package/src/codex/desktop-compatibility/runtime.ts +182 -0
- package/src/codex/desktop-compatibility/service.ts +30 -0
- package/src/codex/desktop-compatibility/startup-settings.ts +50 -0
- package/src/codex/desktop-compatibility/usage-activation.ts +86 -0
- package/src/codex/desktop-compatibility/usage-controlled-fetch.ts +59 -0
- package/src/codex/desktop-compatibility/usage-controller.ts +107 -0
- package/src/codex/desktop-compatibility/usage-policy.ts +59 -0
- package/src/codex/desktop-compatibility/usage-refresh.ts +33 -0
- package/src/codex/desktop-compatibility/usage-sse-controller.ts +86 -0
- package/src/codex/desktop-compatibility/windows-activation-source.ts +44 -0
- package/src/codex/desktop-compatibility/windows-certificate-trust.ts +81 -0
- package/src/codex/desktop-compatibility/windows-key-protection.ts +165 -0
- package/src/codex/desktop-compatibility/windows-package-command.ts +86 -0
- package/src/codex/desktop-compatibility/windows-package-launch.ts +28 -0
- package/src/codex/features.ts +85 -45
- package/src/codex/history-provider.ts +1 -1
- package/src/codex/inject/config-write-section.ts +4 -1
- package/src/codex/inject/history-failure.ts +27 -0
- package/src/codex/inject/remove.ts +18 -6
- package/src/codex/inject/restore.ts +24 -2
- package/src/codex/inject/routing-classify.ts +4 -3
- package/src/codex/inject.ts +18 -27
- package/src/codex/journal.ts +16 -1
- package/src/codex/main-account-hard-lock.ts +30 -1
- package/src/codex/main-account.ts +99 -15
- package/src/codex/native-main-refresh-mode.ts +217 -0
- package/src/codex/native-profile-startup.ts +1 -1
- package/src/codex/ocx-compaction-history.ts +12 -10
- package/src/codex/paths.ts +86 -1
- package/src/codex/provider-routing.ts +174 -0
- package/src/codex/refresh.ts +2 -2
- package/src/codex/routing/health-store.ts +2 -2
- package/src/codex/routing/pool-recovery.ts +79 -0
- package/src/codex/routing/selection.ts +4 -3
- package/src/codex/routing/thread-affinity.ts +1 -1
- package/src/codex/shim-diagnostics.ts +6 -0
- package/src/codex/shim-overlay.ts +7 -2
- package/src/codex/signed-in-identity.ts +43 -0
- package/src/codex/subagent-model-fallback.ts +1 -1
- package/src/codex/sync.ts +6 -1
- package/src/codex/user-identity.ts +16 -5
- package/src/codex/windows-local-appdata.ts +84 -0
- package/src/combos/failover.ts +6 -1
- package/src/combos/index.ts +1 -0
- package/src/combos/resolve.ts +46 -10
- package/src/combos/types.ts +15 -0
- package/src/config/diagnostics.ts +35 -7
- package/src/config/live-reconcile.ts +51 -2
- package/src/config/load-degrade.ts +23 -1
- package/src/config/opencode-wire-upgrade.ts +54 -0
- package/src/config/opencode-zen-upgrade.ts +52 -0
- package/src/config/owner-registry.ts +22 -17
- package/src/config/paths.ts +10 -3
- package/src/config/provider-validation.ts +45 -2
- package/src/config/schema/config-schema.ts +39 -0
- package/src/config/schema/desktop-compatibility.ts +9 -0
- package/src/config/schema/leaf-validators.ts +39 -9
- package/src/config/schema/main-account-hard-lock-fallback.ts +26 -0
- package/src/config/schema/native-reasoning-retention.ts +26 -0
- package/src/config.ts +2 -0
- package/src/generated/compatibility-version.json +962 -350
- package/src/generated/model-metadata.ts +1 -1
- package/src/grok/sync.ts +1 -1
- package/src/images/loop.ts +46 -8
- package/src/integrations/catalog-refresh.ts +1 -1
- package/src/integrations/config-io.ts +20 -2
- package/src/integrations/journal.ts +15 -1
- package/src/integrations/mutation-plan.ts +2 -0
- package/src/integrations/registry.ts +15 -0
- package/src/integrations/store.ts +3 -0
- package/src/integrations/writer.ts +10 -1
- package/src/lib/advisor-activation.ts +16 -0
- package/src/lib/background-work.ts +65 -0
- package/src/lib/bounded-file-read.ts +58 -0
- package/src/lib/bun-path-runtime.d.mts +10 -1
- package/src/lib/bun-path-runtime.mjs +62 -3
- package/src/lib/codex-restart-contract.ts +15 -0
- package/src/lib/desktop-proxy-route.ts +30 -0
- package/src/lib/desktop-upstream-tunnel.ts +72 -0
- package/src/lib/empty-tool-catalog.ts +62 -0
- package/src/lib/errors.ts +26 -3
- package/src/lib/gcp-adc.ts +96 -9
- package/src/lib/gcp-credential-input.ts +12 -0
- package/src/lib/lab-live-route-production.ts +5 -0
- package/src/lib/local-internal-call-capability.ts +55 -0
- package/src/lib/opaque-proxy-tunnel.ts +217 -0
- package/src/lib/package-tree-integrity.ts +2 -2
- package/src/lib/redact.ts +2 -2
- package/src/lib/socks5-fetch.ts +48 -71
- package/src/lib/socks5-handshake.ts +112 -0
- package/src/lib/translator-budget.ts +7 -1
- package/src/oauth/account-quota-rank.ts +69 -2
- package/src/oauth/anthropic-account-refusal.ts +20 -2
- package/src/oauth/anthropic-oauth-definitions.ts +3 -1
- package/src/oauth/anthropic-routing.ts +1 -21
- package/src/oauth/anthropic.ts +38 -7
- package/src/oauth/callback-server.ts +27 -1
- package/src/oauth/chatgpt-device.ts +1 -1
- package/src/oauth/chatgpt-shared.ts +83 -0
- package/src/oauth/chatgpt.ts +8 -72
- package/src/oauth/dsh.ts +203 -0
- package/src/oauth/generic-account-failover.ts +62 -12
- package/src/oauth/generic-session-affinity.ts +125 -0
- package/src/oauth/index.ts +188 -111
- package/src/oauth/kiro-device-login.ts +2 -1
- package/src/oauth/kiro.ts +7 -1
- package/src/oauth/local-token-detect.ts +21 -1
- package/src/oauth/login-cli-errors.ts +44 -0
- package/src/oauth/login-cli.ts +69 -7
- package/src/oauth/login-flow-state.ts +371 -23
- package/src/oauth/meta-muse-errors.ts +41 -0
- package/src/oauth/meta-muse-keychain.ts +52 -0
- package/src/oauth/meta-muse.ts +51 -84
- package/src/oauth/model-discovery-auth.ts +3 -0
- package/src/oauth/pool-settings-capability.ts +4 -2
- package/src/oauth/refresh-flight-retirement.ts +48 -0
- package/src/oauth/session-affinity-key.ts +23 -0
- package/src/oauth/store-anthropic-instance.ts +9 -2
- package/src/oauth/store.ts +12 -5
- package/src/protocols/codecs/chat-ir.ts +467 -0
- package/src/protocols/codecs/chat.ts +10 -1
- package/src/protocols/codecs/messages-ir.ts +500 -0
- package/src/protocols/encoders/adapter-events.ts +5 -4
- package/src/protocols/encoders/messages.ts +9 -6
- package/src/protocols/features.ts +10 -2
- package/src/protocols/path.ts +11 -1
- package/src/protocols/plan-snapshot.ts +39 -16
- package/src/protocols/plan.ts +9 -1
- package/src/protocols/provider-summary.ts +2 -1
- package/src/protocols/settings.ts +8 -0
- package/src/providers/antigravity-account-roster.ts +102 -0
- package/src/providers/antigravity-models.ts +85 -7
- package/src/providers/api-key-cooldowns.ts +49 -0
- package/src/providers/api-key-resolve.ts +11 -6
- package/src/providers/api-key-response-ownership.ts +57 -0
- package/src/providers/api-key-selection.ts +31 -6
- package/src/providers/api-keys.ts +214 -3
- package/src/providers/claude-cli-usage.ts +96 -0
- package/src/providers/dsh-account-destination.ts +31 -0
- package/src/providers/dsh-account-models.ts +41 -0
- package/src/providers/gcp-credential-cleanup.ts +59 -0
- package/src/providers/key-failover.ts +54 -50
- package/src/providers/key-store.ts +7 -2
- package/src/providers/model-rename-fields.ts +5 -0
- package/src/providers/model-rename-migration.ts +7 -5
- package/src/providers/openai-tiers-destination.ts +11 -2
- package/src/providers/openai-tiers.ts +5 -12
- package/src/providers/opencode-go-transport.ts +3 -1
- package/src/providers/quota/account-cache.ts +6 -5
- package/src/providers/quota/account-row.ts +34 -0
- package/src/providers/quota/antigravity.ts +28 -7
- package/src/providers/quota/dsh-account.ts +70 -0
- package/src/providers/quota/vendor-probes-oauth.ts +1 -93
- package/src/providers/quota-types.ts +2 -0
- package/src/providers/quota.ts +14 -20
- package/src/providers/registry/entries-core.ts +44 -14
- package/src/providers/registry/entries-extended.ts +19 -0
- package/src/providers/registry/types.ts +1 -1
- package/src/providers/request-pacing.ts +77 -19
- package/src/providers/routed-config.ts +339 -0
- package/src/providers/service-tier.ts +2 -1
- package/src/quota/window-mapping.ts +5 -2
- package/src/responses/anthropic-progress.ts +34 -0
- package/src/responses/assistant-replay.ts +35 -0
- package/src/responses/compaction-history-framing.ts +65 -0
- package/src/responses/compaction.ts +6 -1
- package/src/responses/incomplete-reason.ts +31 -0
- package/src/responses/parser.ts +78 -22
- package/src/responses/reasoning-envelope.ts +4 -0
- package/src/responses/reasoning-replay-cache.ts +24 -2
- package/src/responses/reasoning-retention.ts +173 -0
- package/src/responses/retained-compaction.ts +46 -0
- package/src/responses/schema.ts +23 -0
- package/src/responses/state.ts +32 -29
- package/src/router.ts +8 -321
- package/src/routing/health.ts +37 -22
- package/src/routing/history/build-file.ts +92 -0
- package/src/routing/history/indexer.ts +254 -221
- package/src/routing/history/ingest.ts +242 -0
- package/src/routing/history/rebuild-job.ts +111 -0
- package/src/routing/history/rebuild-protocol.ts +15 -0
- package/src/routing/history/rebuild-worker.ts +34 -0
- package/src/routing/profile.ts +1 -1
- package/src/server/admission-model-scope.ts +21 -1
- package/src/server/antigravity-direct-eligibility.ts +208 -0
- package/src/server/auth-cors.ts +15 -0
- package/src/server/chat-completions.ts +82 -10
- package/src/server/chat-native-reasoning.ts +123 -0
- package/src/server/chat-native-sse.ts +110 -7
- package/src/server/chat-native.ts +76 -17
- package/src/server/claude-messages.ts +164 -433
- package/src/server/effort-policy.ts +1 -1
- package/src/server/images.ts +15 -2
- package/src/server/index/desktop-compatibility-startup.ts +56 -0
- package/src/server/index/model-alias-id.ts +36 -0
- package/src/server/index/optional-listeners.ts +2 -0
- package/src/server/index/serve-options.ts +11 -3
- package/src/server/index/startup-warnings.ts +11 -0
- package/src/server/index/websocket-handler.ts +9 -0
- package/src/server/index.ts +14 -11
- package/src/server/inference/advisor-diagnostics.ts +31 -0
- package/src/server/inference/client-encoder-delivery.ts +6 -5
- package/src/server/login-shell-path.ts +146 -0
- package/src/server/management/advisor-routes.ts +202 -0
- package/src/server/management/agent-settings-routes.ts +22 -4
- package/src/server/management/claude-desktop-picker-routes.ts +1 -1
- package/src/server/management/combo-routes.ts +176 -50
- package/src/server/management/companion-routes.ts +4 -0
- package/src/server/management/config-routes.ts +77 -6
- package/src/server/management/context.ts +4 -0
- package/src/server/management/cursor-integration-routes.ts +1 -1
- package/src/server/management/desktop-compatibility-routes.ts +46 -0
- package/src/server/management/desktop-compatibility-runtime-routes.ts +46 -0
- package/src/server/management/desktop-compatibility-settings-routes.ts +27 -0
- package/src/server/management/model-routes.ts +13 -8
- package/src/server/management/model-rows.ts +14 -0
- package/src/server/management/native-integration-routes.ts +2 -7
- package/src/server/management/native-reasoning-retention-routes.ts +41 -0
- package/src/server/management/oauth-account-routes.ts +87 -14
- package/src/server/management/protocol-settings-patch.ts +1 -0
- package/src/server/management/provider-gcp-credential-routes.ts +29 -0
- package/src/server/management/provider-key-pacing-routes.ts +31 -0
- package/src/server/management/provider-overwrite-carry.ts +7 -0
- package/src/server/management/provider-routes.ts +25 -30
- package/src/server/management/route-registry.ts +21 -1
- package/src/server/management/sibling-guard.ts +1 -0
- package/src/server/management-api.ts +9 -1
- package/src/server/messages-antigravity-direct.ts +195 -0
- package/src/server/messages-native-tool-guard.ts +185 -0
- package/src/server/messages-native.ts +106 -22
- package/src/server/messages-shared.ts +431 -0
- package/src/server/relay.ts +1 -1
- package/src/server/request-log-terminal-status.ts +1 -1
- package/src/server/request-log.ts +13 -1
- package/src/server/responses/account-change-state.ts +8 -2
- package/src/server/responses/adapter-continuation.ts +48 -19
- package/src/server/responses/adapter-delivery.ts +43 -8
- package/src/server/responses/adapter-dispatch.ts +48 -4
- package/src/server/responses/advisor-plan-slot.ts +27 -0
- package/src/server/responses/advisor-retention.ts +117 -0
- package/src/server/responses/advisor-slot.ts +368 -0
- package/src/server/responses/code-mode-collab-surface.ts +116 -8
- package/src/server/responses/codex-ws-wire.ts +15 -8
- package/src/server/responses/compact.ts +303 -125
- package/src/server/responses/compaction-recovery.ts +18 -10
- package/src/server/responses/compaction-retention.ts +61 -0
- package/src/server/responses/context-overflow.ts +11 -6
- package/src/server/responses/core-auth.ts +6 -0
- package/src/server/responses/core-codex-account.ts +11 -1
- package/src/server/responses/core-combo-failure.ts +12 -1
- package/src/server/responses/core-combo.ts +141 -36
- package/src/server/responses/core-errors.ts +3 -3
- package/src/server/responses/core-lifetime.ts +7 -2
- package/src/server/responses/core-normalize.ts +11 -0
- package/src/server/responses/core-opaque-recovery.ts +35 -0
- package/src/server/responses/core-options.ts +51 -0
- package/src/server/responses/core-pipeline.ts +141 -0
- package/src/server/responses/core-replay.ts +25 -6
- package/src/server/responses/core.ts +3 -116
- package/src/server/responses/fetch-helpers.ts +73 -19
- package/src/server/responses/main-hard-lock-routing.ts +109 -0
- package/src/server/responses/native-response-control.ts +4 -2
- package/src/server/responses/passthrough-delivery.ts +19 -11
- package/src/server/responses/passthrough-dispatch.ts +29 -16
- package/src/server/responses/request-prepare.ts +144 -17
- package/src/server/responses/request-sidecar-auth.ts +2 -2
- package/src/server/responses/request-transport.ts +120 -27
- package/src/server/responses/response-effects.ts +1 -0
- package/src/server/responses/run-turn-execution.ts +166 -38
- package/src/server/responses/sidecar-execution.ts +98 -5
- package/src/server/responses/terminal-guard.ts +4 -17
- package/src/server/responses-undeclared-tool-guard.ts +30 -9
- package/src/server/startup-action-control.ts +16 -2
- package/src/server/startup-health-cache.ts +1 -0
- package/src/service/auth-preflight.ts +71 -0
- package/src/service/cli.ts +4 -2
- package/src/service/definition.ts +97 -0
- package/src/service/desktop-startup.ts +14 -0
- package/src/service/guards.ts +1 -61
- package/src/service/health-sentinel-linux.ts +112 -0
- package/src/service/health-sentinel-main.ts +99 -61
- package/src/service/health-sentinel-probe.ts +24 -7
- package/src/service/health.ts +5 -89
- package/src/service/launchd.ts +27 -7
- package/src/service/logging.ts +135 -0
- package/src/service/repair.ts +2 -1
- package/src/service/state.ts +7 -8
- package/src/service/systemd.ts +1 -1
- package/src/service/windows-guarded-manager.ts +2 -1
- package/src/service/windows-ops.ts +1 -1
- package/src/service/windows-scheduler.ts +2 -7
- package/src/service/windows-taskxml.ts +2 -2
- package/src/service/windows-wscript.ts +14 -0
- package/src/service.ts +4 -2
- package/src/sidecar/auth.ts +2 -0
- package/src/tray/windows-tray.ps1 +43 -24
- package/src/types/config.ts +124 -6
- package/src/types/opencode-go.ts +61 -0
- package/src/types/opencode-zen.ts +29 -0
- package/src/types/provider.ts +39 -6
- package/src/types/request.ts +38 -2
- package/src/types/tools.ts +2 -0
- package/src/types/wire.ts +29 -37
- package/src/types.ts +1 -0
- package/src/update/async-check.ts +1 -1
- package/src/update/badge.ts +2 -2
- package/src/update/index.ts +88 -15
- package/src/update/job-supervised-restart.ts +107 -0
- package/src/update/job.ts +32 -32
- package/src/update/notify.ts +1 -1
- package/src/update/npm-invocation.mjs +12 -2
- package/src/update/refresh-scheduler.ts +2 -2
- package/src/update/supervised-recovery.d.mts +27 -0
- package/src/update/supervised-recovery.mjs +157 -0
- package/src/usage/cache-diagnostic.ts +2 -0
- package/src/usage/cost.ts +48 -12
- package/src/usage/expected-prices.ts +15 -0
- package/src/usage/ledger-retention.ts +2 -1
- package/src/usage/ledger-scanner.ts +6 -5
- package/src/usage/log.ts +17 -8
- package/src/usage/summary.ts +22 -9
- package/src/usage/user-cost-overlays.ts +14 -19
- package/src/usage/user-cost-validation.ts +38 -0
- package/src/vision/eligibility.ts +13 -0
- package/src/web-search/gemini-executor.ts +2 -2
- package/src/web-search/loop.ts +55 -5
- package/src/web-search/progress-stream.ts +4 -1
- package/src/web-search/run-turn-loop.ts +9 -1
- package/assets/sponsors/packycode.png +0 -0
- package/gui/dist/assets/App-CSJvmjNs.css +0 -1
- package/gui/dist/assets/App-CZtqiGcw.js +0 -56
- package/gui/dist/assets/index-BB6uK6tU.css +0 -1
- package/gui/dist/assets/index-CTm4l-HQ.js +0 -94
- package/gui/dist/assets/quota-summary-BbEeRfPY.js +0 -1
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
import type { VendorContextInference } from "./vendor-context";
|
|
1
2
|
import { isCodexControlPlaneModel } from "../control-plane-models";
|
|
2
3
|
import { execFileSync } from "node:child_process";
|
|
3
4
|
import { createHash } from "node:crypto";
|
|
4
|
-
import { copyFileSync, existsSync, mkdirSync, readFileSync
|
|
5
|
+
import { copyFileSync, existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
5
6
|
import { delimiter, dirname, join, resolve } from "node:path";
|
|
6
|
-
import { atomicWriteFile,
|
|
7
|
-
import {
|
|
7
|
+
import { atomicWriteFile, getConfigDir, loadConfig, ultraFastTierEnabled, websocketsEnabled } from "../../config";
|
|
8
|
+
import {
|
|
9
|
+
activeCodexConfigPath,
|
|
10
|
+
activeCodexModelsCachePath,
|
|
11
|
+
isDefaultCatalogPath,
|
|
12
|
+
readCodexCatalogPath,
|
|
13
|
+
readRootTomlString,
|
|
14
|
+
} from "../paths";
|
|
8
15
|
import { clearModelCache, DEFAULT_MODEL_CACHE_TTL_MS, getFreshCached, getStaleCached, isModelsFetchCoolingDown, markModelsFetchFailure, setCached } from "../model-cache";
|
|
9
16
|
import { buildModelsRequest, resolveModelsAuthToken } from "../../oauth";
|
|
10
17
|
import type { OcxConfig, OcxProviderConfig } from "../../types";
|
|
@@ -32,7 +39,7 @@ import { redactSecretString } from "../../lib/redact";
|
|
|
32
39
|
import upstreamModelsSnapshot from "../data/upstream-models.json";
|
|
33
40
|
|
|
34
41
|
|
|
35
|
-
import { NATIVE_OPENAI_CONTEXT_OVERRIDES, SUPPORTED_NATIVE_OPENAI_SLUGS, UPSTREAM_NATIVE_ENTRIES, hasNativeOpenAiCapabilityMetadata, nativeMultiAgentVersion, nativeOpenAiAutoCompactTokenLimit, nativeOpenAiContextWindow, nativeOpenAiMaxInputTokens, type NativeContextLimitsInput } from "./metadata";
|
|
42
|
+
import { NATIVE_OPENAI_CONTEXT_OVERRIDES, SUPPORTED_NATIVE_OPENAI_SLUGS, UPSTREAM_NATIVE_ENTRIES, hasNativeOpenAiCapabilityMetadata, nativeMultiAgentVersion, nativeOpenAiAutoCompactTokenLimit, nativeOpenAiConfiguredContextLimit, nativeOpenAiContextWindow, nativeOpenAiMaxInputTokens, type NativeContextLimitsInput } from "./metadata";
|
|
36
43
|
import { clampAutoCompactTokenLimit } from "../../providers/auto-compact-budget";
|
|
37
44
|
import { trustedAccountBoundNativeCatalogSlug } from "./account-models";
|
|
38
45
|
import { CODEX_NATIVE_ALIAS_CATALOG_KIND } from "./kinds";
|
|
@@ -49,46 +56,22 @@ export function catalogBackupPathFor(catalogPath: string): string {
|
|
|
49
56
|
return join(getConfigDir(), `catalog-backup-${id}.json`);
|
|
50
57
|
}
|
|
51
58
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export function activeCodexConfigPath(): string {
|
|
70
|
-
const home = activeCodexHome();
|
|
71
|
-
return home ? join(home, "config.toml") : CODEX_CONFIG_PATH;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export function activeDefaultCatalogPath(): string {
|
|
75
|
-
const home = activeCodexHome();
|
|
76
|
-
return home ? join(home, "opencodex-catalog.json") : DEFAULT_CATALOG_PATH;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export function activeCodexModelsCachePath(): string {
|
|
80
|
-
const home = activeCodexHome();
|
|
81
|
-
return home ? join(home, "models_cache.json") : CODEX_MODELS_CACHE_PATH;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export function resolveActiveCodexConfigPath(path: string): string {
|
|
85
|
-
const home = activeCodexHome();
|
|
86
|
-
return home ? resolve(home, path) : resolveCodexConfigPath(path);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export function isDefaultCatalogPath(path: string): boolean {
|
|
90
|
-
return samePath(path, activeDefaultCatalogPath());
|
|
91
|
-
}
|
|
59
|
+
/**
|
|
60
|
+
* Active-home path resolution now lives in `../paths`, next to the constants it
|
|
61
|
+
* falls back to. It is re-exported here so existing importers keep working; new
|
|
62
|
+
* code that only needs a path should import from `../paths` directly.
|
|
63
|
+
*/
|
|
64
|
+
export {
|
|
65
|
+
samePath,
|
|
66
|
+
activeCodexHome,
|
|
67
|
+
activeCodexConfigPath,
|
|
68
|
+
activeDefaultCatalogPath,
|
|
69
|
+
activeCodexModelsCachePath,
|
|
70
|
+
resolveActiveCodexConfigPath,
|
|
71
|
+
isDefaultCatalogPath,
|
|
72
|
+
readCodexCatalogPath,
|
|
73
|
+
readCodexCatalogPathForHome,
|
|
74
|
+
} from "../paths";
|
|
92
75
|
|
|
93
76
|
/** Stable nonsemantic ownership marker for rows projected from config.customModels. */
|
|
94
77
|
export const CODEX_CUSTOM_MODEL_CATALOG_KIND = "custom-model-v1";
|
|
@@ -120,6 +103,8 @@ export interface CatalogModel {
|
|
|
120
103
|
suppressSyntheticMax?: boolean;
|
|
121
104
|
defaultReasoningEffort?: string;
|
|
122
105
|
contextWindow?: number;
|
|
106
|
+
/** Bundled fallback only; never a serving-provider capability assertion. */
|
|
107
|
+
contextWindowInference?: VendorContextInference;
|
|
123
108
|
maxInputTokens?: number;
|
|
124
109
|
/** Model-scoped output-token ceiling; omitted when no authoritative value is known. */
|
|
125
110
|
maxOutputTokens?: number;
|
|
@@ -139,6 +124,8 @@ export interface CatalogModel {
|
|
|
139
124
|
supportsVerbosity?: boolean;
|
|
140
125
|
/** Whether this exact routed model has a verified OpenAI-compatible service tier. */
|
|
141
126
|
supportsServiceTier?: boolean;
|
|
127
|
+
/** Captured eligible service-tier wire explicitly maps ultrafast to ultrafast. */
|
|
128
|
+
supportsUltraFastTier?: boolean;
|
|
142
129
|
/** Optional provider-specific copy for the advertised Fast tier. */
|
|
143
130
|
fastTierDescription?: string;
|
|
144
131
|
supportsReasoningSummaries?: boolean;
|
|
@@ -249,40 +236,6 @@ export function shouldExposeRoutedModel(model: CatalogModel): boolean {
|
|
|
249
236
|
return !isMediaGenerationModelId(model.id);
|
|
250
237
|
}
|
|
251
238
|
|
|
252
|
-
export function readCodexCatalogPath(): string {
|
|
253
|
-
const home = activeCodexHome();
|
|
254
|
-
if (home) return readCodexCatalogPathForHome(home);
|
|
255
|
-
try {
|
|
256
|
-
const configPath = activeCodexConfigPath();
|
|
257
|
-
if (existsSync(configPath)) {
|
|
258
|
-
const toml = readFileSync(configPath, "utf-8");
|
|
259
|
-
const path = readRootTomlString(toml, "model_catalog_json");
|
|
260
|
-
if (path) return resolveActiveCodexConfigPath(path);
|
|
261
|
-
}
|
|
262
|
-
} catch { /* ignore */ }
|
|
263
|
-
return activeDefaultCatalogPath();
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/**
|
|
267
|
-
* Resolve the configured catalog without consulting ambient CODEX_HOME again.
|
|
268
|
-
*
|
|
269
|
-
* `configText` is for a caller that has already read that same `config.toml` under
|
|
270
|
-
* its own constraints - the prompt-text probe reads it bounded, on the request
|
|
271
|
-
* thread - so resolving the catalog does not cost a second, unbounded read of the
|
|
272
|
-
* file the caller is holding. Omitting it keeps the original behaviour.
|
|
273
|
-
*/
|
|
274
|
-
export function readCodexCatalogPathForHome(codexHome: string, configText?: string): string {
|
|
275
|
-
try {
|
|
276
|
-
const configPath = join(codexHome, "config.toml");
|
|
277
|
-
if (configText !== undefined || existsSync(configPath)) {
|
|
278
|
-
const toml = configText ?? readFileSync(configPath, "utf-8");
|
|
279
|
-
const path = readRootTomlString(toml, "model_catalog_json");
|
|
280
|
-
if (path) return resolve(codexHome, path);
|
|
281
|
-
}
|
|
282
|
-
} catch { /* ignore */ }
|
|
283
|
-
return join(codexHome, "opencodex-catalog.json");
|
|
284
|
-
}
|
|
285
|
-
|
|
286
239
|
/**
|
|
287
240
|
* Read the configured auto-review model from the root of Codex's config.toml (issue #1225).
|
|
288
241
|
* Stamped onto catalog entries as `auto_review_model_override` during sync so the auto-review
|
|
@@ -501,7 +454,7 @@ export function isNativeOpenAiEntry(entry: RawEntry): boolean {
|
|
|
501
454
|
* Narrow any already-resolved native window by the user levers.
|
|
502
455
|
*
|
|
503
456
|
* Used for the fields the accessors do not own (`max_context_window`, and preserved rows
|
|
504
|
-
* that carry no static override)
|
|
457
|
+
* that carry no static override). The advertised maximum may exceed the default window.
|
|
505
458
|
*/
|
|
506
459
|
function narrowNativeMaxContextWindow(
|
|
507
460
|
slug: string,
|
|
@@ -509,12 +462,7 @@ function narrowNativeMaxContextWindow(
|
|
|
509
462
|
limits?: NativeContextLimitsInput,
|
|
510
463
|
): number | undefined {
|
|
511
464
|
if (typeof value !== "number" || value <= 0) return value;
|
|
512
|
-
|
|
513
|
-
const authoritative = nativeOpenAiContextWindow(slug);
|
|
514
|
-
// The accessor pair tells us how far the levers moved this slug; apply the same delta to a
|
|
515
|
-
// field the accessor does not model, without ever raising it.
|
|
516
|
-
if (resolved === undefined || authoritative === undefined) return value;
|
|
517
|
-
return Math.min(value, Math.max(resolved, 1));
|
|
465
|
+
return applyProviderContextCap(value, nativeOpenAiConfiguredContextLimit(slug, limits));
|
|
518
466
|
}
|
|
519
467
|
|
|
520
468
|
export function applyNativeOpenAiContextOverride(entry: RawEntry, limits?: NativeContextLimitsInput): void {
|
|
@@ -631,7 +579,8 @@ export function ensureStrictCatalogFields(
|
|
|
631
579
|
if (
|
|
632
580
|
typeof entry.max_context_window !== "number"
|
|
633
581
|
|| entry.max_context_window <= 0
|
|
634
|
-
|| ((options.isRouted === true || !isNativeOpenAiEntry(entry)
|
|
582
|
+
|| ((options.isRouted === true || (!isNativeOpenAiEntry(entry)
|
|
583
|
+
&& trustedAccountBoundNativeCatalogSlug(entry) === undefined)) && entry.max_context_window > contextWindow)
|
|
635
584
|
) {
|
|
636
585
|
entry.max_context_window = contextWindow;
|
|
637
586
|
}
|
|
@@ -53,6 +53,7 @@ import {
|
|
|
53
53
|
import type { FastPolicyAuthority } from "../../providers/fastwire";
|
|
54
54
|
import { effectiveGoogleMode, getProviderRegistryEntry, providerMatchesRegistryTransport, registryEntryForProviderDestination } from "../../providers/registry";
|
|
55
55
|
import { parseAntigravityAvailableModels, registerAntigravityDiscoveredWireModels } from "../../providers/antigravity-models";
|
|
56
|
+
import { recordAntigravityAccountRoster } from "../../providers/antigravity-account-roster";
|
|
56
57
|
import { applyProviderContextCap, providerContextCap, resolveUnknownRoutedContextWindow } from "../../providers/context-cap";
|
|
57
58
|
import { clampAutoCompactTokenLimit } from "../../providers/auto-compact-budget";
|
|
58
59
|
import { effectiveModelAliases } from "../../providers/default-aliases";
|
|
@@ -116,7 +117,7 @@ import type {
|
|
|
116
117
|
CatalogTrustedOpenAiApiPolicySnapshot,
|
|
117
118
|
} from "../convergence-types";
|
|
118
119
|
import type { CapturedProviderGather, CatalogGatherProviderAuthOutcome, CatalogGatherProviderModelOutcome, ModelsAuthResolution, ModelsAuthResolver } from "./gather-capture";
|
|
119
|
-
import { QUIET_AUTHORITATIVE_CATALOG_PROVIDERS, applyConfigHintsToCachedModels, applyProviderConfigHints, boundedOwnedBy, catalogHintsFromModelsApiItem, catalogHintsFromProviderConfig } from "./model-hints";
|
|
120
|
+
import { QUIET_AUTHORITATIVE_CATALOG_PROVIDERS, applyConfigHintsToCachedModels, applyProviderConfigHints, boundedOwnedBy, catalogHintsFromModelsApiItem, catalogHintsFromProviderConfig, withVisionSidecarInput } from "./model-hints";
|
|
120
121
|
import { mergeConfiguredModelsIntoLiveCatalog, shouldExposeProviderModel, warnDroppedConfiguredIdsOnce } from "./model-visibility";
|
|
121
122
|
import { captureModelsRequest, captureProviderGather, materializeCapturedHeaders } from "./gather-capture";
|
|
122
123
|
|
|
@@ -167,7 +168,7 @@ export function observedModelsAuthResolver(
|
|
|
167
168
|
},
|
|
168
169
|
};
|
|
169
170
|
}
|
|
170
|
-
/** Project
|
|
171
|
+
/** Project provider evidence without synthetic sidecar image input, which belongs to each gather. */
|
|
171
172
|
export async function fetchProviderModelsWithAuth(
|
|
172
173
|
captured: CapturedProviderGather,
|
|
173
174
|
ttlMs: number,
|
|
@@ -210,7 +211,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
210
211
|
const configured: CatalogModel[] = configuredIds.map(id => ({
|
|
211
212
|
id,
|
|
212
213
|
provider: name,
|
|
213
|
-
...catalogHintsFromProviderConfig(name, prov, id, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir),
|
|
214
|
+
...catalogHintsFromProviderConfig(name, prov, id, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false),
|
|
214
215
|
}));
|
|
215
216
|
const withConfiguredRetention = (
|
|
216
217
|
models: CatalogModel[],
|
|
@@ -227,6 +228,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
227
228
|
retainComboTargets: options?.retainComboTargets,
|
|
228
229
|
metadataModelIdCaseFold,
|
|
229
230
|
metadataConfigDir,
|
|
231
|
+
includeVisionSidecar: false,
|
|
230
232
|
});
|
|
231
233
|
if (
|
|
232
234
|
options?.warnDrops === true
|
|
@@ -259,7 +261,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
259
261
|
}
|
|
260
262
|
return observed(ids.map(id => {
|
|
261
263
|
const hints = catalogHintsFromProviderConfig(name, prov, id, contextCap,
|
|
262
|
-
metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir);
|
|
264
|
+
metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false);
|
|
263
265
|
const observedWindow = kiroObservedContextWindow(id);
|
|
264
266
|
return { id, provider: name, ...hints,
|
|
265
267
|
...(observedWindow !== undefined
|
|
@@ -295,7 +297,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
295
297
|
model => applyProviderConfigHints(name, prov, {
|
|
296
298
|
id: model.id, provider: name,
|
|
297
299
|
...catalogHintsFromModelsApiItem(name, model as ProviderModelsApiItem),
|
|
298
|
-
}, contextCap, metadataModelIdCaseFold, captured.effectiveAlias));
|
|
300
|
+
}, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, undefined, false));
|
|
299
301
|
if (!isCurrentCacheGeneration()) return observed(configured, "degraded");
|
|
300
302
|
markProviderDiscoveryOk(name, picker.length);
|
|
301
303
|
// Retain callable manual/combo selectors, but do not advertise named selection
|
|
@@ -325,7 +327,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
325
327
|
: [{
|
|
326
328
|
id: prov.defaultModel,
|
|
327
329
|
provider: name,
|
|
328
|
-
...catalogHintsFromProviderConfig(name, prov, prov.defaultModel, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir),
|
|
330
|
+
...catalogHintsFromProviderConfig(name, prov, prov.defaultModel, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false),
|
|
329
331
|
}];
|
|
330
332
|
const vertexDefaultSeed = seedVertexDefault ? configured[0] : undefined;
|
|
331
333
|
const withVertexDefaultSeed = (models: CatalogModel[]): CatalogModel[] => (
|
|
@@ -347,13 +349,13 @@ export async function fetchProviderModelsWithAuth(
|
|
|
347
349
|
const fresh = getFreshCached(name, ttlMs, Date.now(), authorityIdentity);
|
|
348
350
|
if (fresh) {
|
|
349
351
|
return observed(withConfiguredRetention(
|
|
350
|
-
applyConfigHintsToCachedModels(name, prov, fresh, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir),
|
|
352
|
+
applyConfigHintsToCachedModels(name, prov, fresh, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false),
|
|
351
353
|
), "authoritative");
|
|
352
354
|
}
|
|
353
355
|
const scopedStale = getStaleCached(name, authorityIdentity);
|
|
354
356
|
if (isModelsFetchCoolingDown(name, undefined, undefined, authorityIdentity) && scopedStale) {
|
|
355
357
|
return observed(withConfiguredRetention(
|
|
356
|
-
applyConfigHintsToCachedModels(name, prov, scopedStale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir),
|
|
358
|
+
applyConfigHintsToCachedModels(name, prov, scopedStale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false),
|
|
357
359
|
), "degraded");
|
|
358
360
|
}
|
|
359
361
|
const live = await fetchCodeBuddyModels(profile, apiKey);
|
|
@@ -361,7 +363,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
361
363
|
const discovered = live.models.map(id => ({
|
|
362
364
|
id,
|
|
363
365
|
provider: name,
|
|
364
|
-
...catalogHintsFromProviderConfig(name, prov, id, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir),
|
|
366
|
+
...catalogHintsFromProviderConfig(name, prov, id, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false),
|
|
365
367
|
}));
|
|
366
368
|
const forCache = withConfiguredRetention(discovered, { retainComboTargets: false });
|
|
367
369
|
if (!setCached(name, forCache, Date.now(), cacheGeneration, authorityIdentity)) {
|
|
@@ -377,7 +379,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
377
379
|
}
|
|
378
380
|
const stale = getStaleCached(name, authorityIdentity);
|
|
379
381
|
return observed(withConfiguredRetention(
|
|
380
|
-
stale ? applyConfigHintsToCachedModels(name, prov, stale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir) : configured,
|
|
382
|
+
stale ? applyConfigHintsToCachedModels(name, prov, stale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false) : configured,
|
|
381
383
|
), "degraded");
|
|
382
384
|
}
|
|
383
385
|
if (name === "zed" && prov.adapter === "zed") {
|
|
@@ -390,14 +392,14 @@ export async function fetchProviderModelsWithAuth(
|
|
|
390
392
|
const cached = getFreshCached(name, ttlMs, Date.now(), authorityIdentity);
|
|
391
393
|
if (cached) {
|
|
392
394
|
return observed(
|
|
393
|
-
withConfiguredRetention(applyConfigHintsToCachedModels(name, prov, cached, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir)),
|
|
395
|
+
withConfiguredRetention(applyConfigHintsToCachedModels(name, prov, cached, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false)),
|
|
394
396
|
"authoritative",
|
|
395
397
|
);
|
|
396
398
|
}
|
|
397
399
|
const stale = getStaleCached(name, authorityIdentity);
|
|
398
400
|
if (isModelsFetchCoolingDown(name, undefined, undefined, authorityIdentity) && stale) {
|
|
399
401
|
return observed(
|
|
400
|
-
withConfiguredRetention(applyConfigHintsToCachedModels(name, prov, stale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir)),
|
|
402
|
+
withConfiguredRetention(applyConfigHintsToCachedModels(name, prov, stale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false)),
|
|
401
403
|
"degraded",
|
|
402
404
|
);
|
|
403
405
|
}
|
|
@@ -417,7 +419,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
417
419
|
...(model.maxOutputTokens ? { maxOutputTokens: model.maxOutputTokens } : {}),
|
|
418
420
|
...(model.supportsImages ? { inputModalities: ["text", "image"] } : {}),
|
|
419
421
|
...(reasoningEfforts?.length ? { reasoningEfforts } : {}),
|
|
420
|
-
...catalogHintsFromProviderConfig(name, prov, model.id, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir),
|
|
422
|
+
...catalogHintsFromProviderConfig(name, prov, model.id, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false),
|
|
421
423
|
} as CatalogModel;
|
|
422
424
|
});
|
|
423
425
|
const forCache = withConfiguredRetention(discovered, { retainComboTargets: false });
|
|
@@ -432,7 +434,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
432
434
|
markProviderDiscoveryFailed(name, { reason: "provider" });
|
|
433
435
|
}
|
|
434
436
|
return observed(
|
|
435
|
-
withConfiguredRetention(stale ? applyConfigHintsToCachedModels(name, prov, stale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir) : configured),
|
|
437
|
+
withConfiguredRetention(stale ? applyConfigHintsToCachedModels(name, prov, stale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false) : configured),
|
|
436
438
|
"degraded",
|
|
437
439
|
);
|
|
438
440
|
}
|
|
@@ -448,13 +450,13 @@ export async function fetchProviderModelsWithAuth(
|
|
|
448
450
|
const fresh = getFreshCached(name, ttlMs, Date.now(), authorityIdentity);
|
|
449
451
|
if (fresh) {
|
|
450
452
|
return observed(withConfiguredRetention(
|
|
451
|
-
applyConfigHintsToCachedModels(name, prov, fresh, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir),
|
|
453
|
+
applyConfigHintsToCachedModels(name, prov, fresh, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false),
|
|
452
454
|
), "authoritative");
|
|
453
455
|
}
|
|
454
456
|
const scopedStale = getStaleCached(name, authorityIdentity);
|
|
455
457
|
if (isModelsFetchCoolingDown(name) && scopedStale) {
|
|
456
458
|
return observed(withConfiguredRetention(
|
|
457
|
-
applyConfigHintsToCachedModels(name, prov, scopedStale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir),
|
|
459
|
+
applyConfigHintsToCachedModels(name, prov, scopedStale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false),
|
|
458
460
|
), "degraded");
|
|
459
461
|
}
|
|
460
462
|
const live = await fetchQoderModels(profile, apiKey);
|
|
@@ -462,7 +464,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
462
464
|
const discovered = live.models.map(id => ({
|
|
463
465
|
id,
|
|
464
466
|
provider: name,
|
|
465
|
-
...catalogHintsFromProviderConfig(name, prov, id, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir),
|
|
467
|
+
...catalogHintsFromProviderConfig(name, prov, id, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false),
|
|
466
468
|
}));
|
|
467
469
|
const forCache = withConfiguredRetention(discovered, { retainComboTargets: false });
|
|
468
470
|
if (!setCached(name, forCache, Date.now(), cacheGeneration, authorityIdentity)) {
|
|
@@ -478,7 +480,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
478
480
|
}
|
|
479
481
|
const stale = getStaleCached(name, authorityIdentity);
|
|
480
482
|
return observed(withConfiguredRetention(
|
|
481
|
-
stale ? applyConfigHintsToCachedModels(name, prov, stale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir) : configured,
|
|
483
|
+
stale ? applyConfigHintsToCachedModels(name, prov, stale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false) : configured,
|
|
482
484
|
), "degraded");
|
|
483
485
|
}
|
|
484
486
|
if (prov.adapter === "devin") {
|
|
@@ -493,7 +495,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
493
495
|
const cachedDevin = getFreshCached(name, ttlMs, Date.now(), authorityIdentity);
|
|
494
496
|
if (cachedDevin) {
|
|
495
497
|
return observed(
|
|
496
|
-
withConfiguredRetention(applyConfigHintsToCachedModels(name, prov, cachedDevin, undefined, undefined, undefined, metadataConfigDir)),
|
|
498
|
+
withConfiguredRetention(applyConfigHintsToCachedModels(name, prov, cachedDevin, undefined, undefined, undefined, metadataConfigDir, false)),
|
|
497
499
|
"authoritative",
|
|
498
500
|
);
|
|
499
501
|
}
|
|
@@ -501,7 +503,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
501
503
|
const cooling = getStaleCached(name, authorityIdentity);
|
|
502
504
|
return observed(
|
|
503
505
|
withConfiguredRetention(
|
|
504
|
-
cooling ? applyConfigHintsToCachedModels(name, prov, cooling, undefined, undefined, undefined, metadataConfigDir) : configured,
|
|
506
|
+
cooling ? applyConfigHintsToCachedModels(name, prov, cooling, undefined, undefined, undefined, metadataConfigDir, false) : configured,
|
|
505
507
|
),
|
|
506
508
|
"degraded",
|
|
507
509
|
);
|
|
@@ -539,11 +541,11 @@ export async function fetchProviderModelsWithAuth(
|
|
|
539
541
|
...(liveResult.defaultEfforts[id] ? { defaultReasoningEffort: liveResult.defaultEfforts[id] } : {}),
|
|
540
542
|
// The account catalog's per-base supportsImages vote collapses to one
|
|
541
543
|
// modalities value. It spreads before the hints so exact
|
|
542
|
-
// modelCapabilities declarations
|
|
543
|
-
// record
|
|
544
|
-
// value survives only when
|
|
544
|
+
// modelCapabilities declarations and the legacy modelInputModalities
|
|
545
|
+
// record keep winning. Sidecar advertisement is added after discovery;
|
|
546
|
+
// the live value survives only when no explicit declaration applies.
|
|
545
547
|
...(liveResult.inputModalities[id]?.length ? { inputModalities: liveResult.inputModalities[id] } : {}),
|
|
546
|
-
...catalogHintsFromProviderConfig(name, prov, id, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir),
|
|
548
|
+
...catalogHintsFromProviderConfig(name, prov, id, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false),
|
|
547
549
|
} as CatalogModel;
|
|
548
550
|
});
|
|
549
551
|
const forCache = withConfiguredRetention(result, { retainComboTargets: false });
|
|
@@ -559,7 +561,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
559
561
|
}
|
|
560
562
|
const stale = getStaleCached(name, authorityIdentity);
|
|
561
563
|
return observed(
|
|
562
|
-
withConfiguredRetention(stale ? applyConfigHintsToCachedModels(name, prov, stale, undefined, undefined, undefined, metadataConfigDir) : configured),
|
|
564
|
+
withConfiguredRetention(stale ? applyConfigHintsToCachedModels(name, prov, stale, undefined, undefined, undefined, metadataConfigDir, false) : configured),
|
|
563
565
|
"degraded",
|
|
564
566
|
);
|
|
565
567
|
}
|
|
@@ -576,7 +578,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
576
578
|
const cachedCursor = getFreshCached(name, ttlMs, Date.now(), authorityIdentity);
|
|
577
579
|
if (cachedCursor) {
|
|
578
580
|
return observed(
|
|
579
|
-
withConfiguredRetention(applyConfigHintsToCachedModels(name, prov, cachedCursor, undefined, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir)),
|
|
581
|
+
withConfiguredRetention(applyConfigHintsToCachedModels(name, prov, cachedCursor, undefined, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false)),
|
|
580
582
|
"authoritative",
|
|
581
583
|
);
|
|
582
584
|
}
|
|
@@ -584,7 +586,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
584
586
|
const cooling = getStaleCached(name, authorityIdentity);
|
|
585
587
|
return observed(
|
|
586
588
|
withConfiguredRetention(
|
|
587
|
-
cooling ? applyConfigHintsToCachedModels(name, prov, cooling, undefined, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir) : configured,
|
|
589
|
+
cooling ? applyConfigHintsToCachedModels(name, prov, cooling, undefined, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false) : configured,
|
|
588
590
|
),
|
|
589
591
|
"degraded",
|
|
590
592
|
);
|
|
@@ -630,7 +632,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
630
632
|
const staleCursor = getStaleCached(name, authorityIdentity);
|
|
631
633
|
return observed(
|
|
632
634
|
withConfiguredRetention(
|
|
633
|
-
staleCursor ? applyConfigHintsToCachedModels(name, prov, staleCursor, undefined, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir) : configured,
|
|
635
|
+
staleCursor ? applyConfigHintsToCachedModels(name, prov, staleCursor, undefined, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false) : configured,
|
|
634
636
|
),
|
|
635
637
|
"degraded",
|
|
636
638
|
);
|
|
@@ -648,7 +650,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
648
650
|
if (fresh) {
|
|
649
651
|
return observed(
|
|
650
652
|
withConfiguredRetention(
|
|
651
|
-
withVertexDefaultSeed(applyConfigHintsToCachedModels(name, prov, fresh, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir)),
|
|
653
|
+
withVertexDefaultSeed(applyConfigHintsToCachedModels(name, prov, fresh, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false)),
|
|
652
654
|
),
|
|
653
655
|
"authoritative",
|
|
654
656
|
); // dedups Codex's frequent /v1/models polling within the TTL
|
|
@@ -660,7 +662,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
660
662
|
return observed(
|
|
661
663
|
withConfiguredRetention(
|
|
662
664
|
stale
|
|
663
|
-
? withVertexDefaultSeed(applyConfigHintsToCachedModels(name, prov, stale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir))
|
|
665
|
+
? withVertexDefaultSeed(applyConfigHintsToCachedModels(name, prov, stale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false))
|
|
664
666
|
: failedDiscoveryConfigured,
|
|
665
667
|
),
|
|
666
668
|
"degraded",
|
|
@@ -705,7 +707,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
705
707
|
return {
|
|
706
708
|
models: withConfiguredRetention(
|
|
707
709
|
stale
|
|
708
|
-
? withVertexDefaultSeed(applyConfigHintsToCachedModels(name, prov, stale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir))
|
|
710
|
+
? withVertexDefaultSeed(applyConfigHintsToCachedModels(name, prov, stale, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false))
|
|
709
711
|
: failedDiscoveryConfigured,
|
|
710
712
|
),
|
|
711
713
|
fallback: stale ? "stale" : "configured",
|
|
@@ -796,7 +798,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
796
798
|
...(model.contextWindow ? { contextWindow: model.contextWindow } : {}),
|
|
797
799
|
...(model.inputModalities ? { inputModalities: model.inputModalities } : {}),
|
|
798
800
|
}));
|
|
799
|
-
const live = applyConfigHintsToCachedModels(name, prov, upstream, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir);
|
|
801
|
+
const live = applyConfigHintsToCachedModels(name, prov, upstream, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false);
|
|
800
802
|
const forCache = azureMetadata ? upstream : withConfiguredRetention(live, { retainComboTargets: false });
|
|
801
803
|
if (!isCurrentCacheGeneration()) {
|
|
802
804
|
return observed(withConfiguredRetention(configured), "degraded");
|
|
@@ -807,6 +809,9 @@ export async function fetchProviderModelsWithAuth(
|
|
|
807
809
|
provider: name,
|
|
808
810
|
cacheGeneration,
|
|
809
811
|
});
|
|
812
|
+
// Entitlement is per account (Claude 4.6 vs 5.5, Argon): remember what THIS account
|
|
813
|
+
// lists so account selection can prefer one that serves the requested model.
|
|
814
|
+
if (auth.oauthAccountId) recordAntigravityAccountRoster(name, auth.oauthAccountId, antigravity);
|
|
810
815
|
if (!setCached(name, forCache, Date.now(), cacheGeneration)) {
|
|
811
816
|
return observed(withConfiguredRetention(configured), "degraded");
|
|
812
817
|
}
|
|
@@ -874,7 +879,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
874
879
|
};
|
|
875
880
|
})
|
|
876
881
|
.filter(m => shouldExposeProviderModel(name, m.id));
|
|
877
|
-
const live = applyConfigHintsToCachedModels(name, prov, upstream, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir);
|
|
882
|
+
const live = applyConfigHintsToCachedModels(name, prov, upstream, contextCap, metadataModelIdCaseFold, captured.effectiveAlias, metadataConfigDir, false);
|
|
878
883
|
// Capture the count BEFORE the alias/configured augmentation below pushes extra rows into
|
|
879
884
|
// `live`; otherwise configured entries would be reported as discovered ones.
|
|
880
885
|
const liveModelCount = live.length;
|
|
@@ -921,6 +926,7 @@ export async function fetchProviderModelsWithAuth(
|
|
|
921
926
|
}
|
|
922
927
|
}
|
|
923
928
|
|
|
929
|
+
/** Preserve the provider-only API's default-enabled projection without widening cached evidence. */
|
|
924
930
|
export async function fetchProviderModels(
|
|
925
931
|
name: string,
|
|
926
932
|
prov: OcxProviderConfig,
|
|
@@ -933,5 +939,5 @@ export async function fetchProviderModels(
|
|
|
933
939
|
ttlMs,
|
|
934
940
|
contextCap,
|
|
935
941
|
refreshingModelsAuthResolver,
|
|
936
|
-
)).models;
|
|
942
|
+
)).models.map(model => withVisionSidecarInput(model, captured.provider));
|
|
937
943
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { projectAntigravitySelectedModels } from "../../providers/antigravity-effort-families";
|
|
2
|
+
import { configuredUltraFastSlugs } from "./configured-tiers";
|
|
2
3
|
import { existsSync, readFileSync } from "node:fs";
|
|
3
4
|
import { join } from "node:path";
|
|
4
5
|
import { initializeConfigOwnership } from "../../lib/config-ownership";
|
|
@@ -509,6 +510,7 @@ function writeRetainedCatalogSync({
|
|
|
509
510
|
: [];
|
|
510
511
|
catalog.models = mergeCatalogEntriesFromObservedState({
|
|
511
512
|
ultraFastTier: ultraFastTierEnabled(config),
|
|
513
|
+
configuredUltraFastSlugs: configuredUltraFastSlugs(orderedGoModels),
|
|
512
514
|
modelPickerOrder,
|
|
513
515
|
accountSelectors,
|
|
514
516
|
catalogModels: catalogModelsForMerge,
|