@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
|
@@ -8,7 +8,7 @@ import { captureOAuthAccountSelection, credentialGeneration, getAccountCredentia
|
|
|
8
8
|
import { hydrateKiroAccountState, persistKiroAccountState } from "../kiro-account-state-disk";
|
|
9
9
|
import { kiroProbeCurrent, kiroProbeIdentity } from "./kiro-account-probe";
|
|
10
10
|
import { fetchMuseKeyQuotaSnapshot } from "../muse-key-quota";
|
|
11
|
-
import {
|
|
11
|
+
import { readAnthropicUsageQuota } from "../claude-cli-usage";
|
|
12
12
|
import { XAI_GROK_CLIENT_VERSION, XAI_GROK_COMPATIBILITY } from "../xai-transport";
|
|
13
13
|
import {
|
|
14
14
|
commitKiroAccountUsageState,
|
|
@@ -23,7 +23,6 @@ import { providerCodexAccountMode } from "../registry";
|
|
|
23
23
|
import {
|
|
24
24
|
accountReportCurrent,
|
|
25
25
|
TERMINAL_QUOTA_FAILURE,
|
|
26
|
-
hasQuotaRows,
|
|
27
26
|
providerLabel,
|
|
28
27
|
providerQuotaFromCodexQuota,
|
|
29
28
|
publicCapacityAggregation,
|
|
@@ -228,99 +227,8 @@ export async function fetchXaiQuota(provider: string, context: { accessToken: st
|
|
|
228
227
|
}
|
|
229
228
|
}
|
|
230
229
|
|
|
231
|
-
function parseClaudeBucket(value: unknown): { percent?: number; resetAt?: number } | null {
|
|
232
|
-
const rec = asRecord(value);
|
|
233
|
-
if (!rec) return null;
|
|
234
|
-
const percent = normalizePercent(rec.utilization);
|
|
235
|
-
const resetAt = normalizeResetAt(rec.resets_at);
|
|
236
|
-
if (percent === undefined && resetAt === undefined) return null;
|
|
237
|
-
return { percent, resetAt };
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
const TERMINAL_CONTROL_CHARACTERS = /[\u0000-\u001f\u007f-\u009f]/gu;
|
|
241
|
-
|
|
242
|
-
function parseClaudeLimit(value: unknown): ProviderQuotaWindow | null {
|
|
243
|
-
const rec = asRecord(value);
|
|
244
|
-
if (!rec) return null;
|
|
245
|
-
const percent = normalizePercent(rec.percent);
|
|
246
|
-
if (percent === undefined) return null;
|
|
247
|
-
const scope = asRecord(rec.scope);
|
|
248
|
-
const model = asRecord(scope?.model);
|
|
249
|
-
const rawLabel = String(model?.display_name ?? "")
|
|
250
|
-
.replace(TERMINAL_CONTROL_CHARACTERS, "")
|
|
251
|
-
.trim();
|
|
252
|
-
if (!rawLabel) return null;
|
|
253
|
-
const lowerLabel = rawLabel.toLowerCase();
|
|
254
|
-
const label = lowerLabel.includes("fable") ? "Fable"
|
|
255
|
-
: lowerLabel.includes("opus") ? "Opus"
|
|
256
|
-
: lowerLabel.includes("sonnet") ? "Sonnet"
|
|
257
|
-
: null;
|
|
258
|
-
// An unrecognized display_name is never published as a quota label: stripping
|
|
259
|
-
// control characters still leaves attacker-chosen residue on the quota line.
|
|
260
|
-
if (label === null) return null;
|
|
261
|
-
const resetAt = normalizeResetAt(rec.resets_at);
|
|
262
|
-
// Model scope is proven structurally here, not guessed from text: the caller admits only
|
|
263
|
-
// `kind: "weekly_scoped"`, and a limit without a recognized `scope.model.display_name` has
|
|
264
|
-
// already returned null above. Routing keys on `scope`, never on `label`.
|
|
265
|
-
return { label, scope: "model", percent, ...(resetAt !== undefined ? { resetAt } : {}) };
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
/** Claude's OAuth usage endpoint, probed with ONE account's own bearer token. */
|
|
269
230
|
const anthropicUsageInflight = new Map<string, Promise<ProviderQuota | null>>();
|
|
270
231
|
|
|
271
|
-
async function readAnthropicUsageQuota(accessToken: string): Promise<ProviderQuota | null> {
|
|
272
|
-
const response = await fetch("https://api.anthropic.com/api/oauth/usage", {
|
|
273
|
-
headers: {
|
|
274
|
-
Accept: "application/json, text/plain, */*",
|
|
275
|
-
"Content-Type": "application/json",
|
|
276
|
-
"User-Agent": CLAUDE_CLI_USER_AGENT,
|
|
277
|
-
"anthropic-beta": "claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05",
|
|
278
|
-
Authorization: `Bearer ${accessToken}`,
|
|
279
|
-
},
|
|
280
|
-
signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
|
|
281
|
-
});
|
|
282
|
-
if (!response.ok) return null;
|
|
283
|
-
const body = asRecord(await readQuotaJson(response));
|
|
284
|
-
if (!body) return null;
|
|
285
|
-
const fiveHour = parseClaudeBucket(body.five_hour);
|
|
286
|
-
const sevenDay = parseClaudeBucket(body.seven_day);
|
|
287
|
-
const fable = parseClaudeBucket(body.seven_day_fable);
|
|
288
|
-
const opus = parseClaudeBucket(body.seven_day_opus);
|
|
289
|
-
const sonnet = parseClaudeBucket(body.seven_day_sonnet);
|
|
290
|
-
const customWindows: ProviderQuotaWindow[] = [];
|
|
291
|
-
if (fable?.percent !== undefined) customWindows.push({ label: "Fable", scope: "model", percent: fable.percent, ...(fable.resetAt !== undefined ? { resetAt: fable.resetAt } : {}) });
|
|
292
|
-
if (opus?.percent !== undefined) customWindows.push({ label: "Opus", scope: "model", percent: opus.percent, ...(opus.resetAt !== undefined ? { resetAt: opus.resetAt } : {}) });
|
|
293
|
-
if (sonnet?.percent !== undefined) customWindows.push({ label: "Sonnet", scope: "model", percent: sonnet.percent, ...(sonnet.resetAt !== undefined ? { resetAt: sonnet.resetAt } : {}) });
|
|
294
|
-
const knownLabels = new Set(customWindows.map(window => window.label.toLowerCase()));
|
|
295
|
-
const limits = Array.isArray(body.limits) ? body.limits : [];
|
|
296
|
-
for (const rawLimit of limits) {
|
|
297
|
-
const limitRecord = asRecord(rawLimit);
|
|
298
|
-
// `session` and `weekly_all` mirror the canonical five-hour and weekly
|
|
299
|
-
// buckets above; only model-scoped weekly limits add a third window.
|
|
300
|
-
if (String(limitRecord?.kind ?? "").trim().toLowerCase() !== "weekly_scoped") continue;
|
|
301
|
-
const limit = parseClaudeLimit(rawLimit);
|
|
302
|
-
if (!limit || knownLabels.has(limit.label.toLowerCase())) continue;
|
|
303
|
-
knownLabels.add(limit.label.toLowerCase());
|
|
304
|
-
customWindows.push(limit);
|
|
305
|
-
}
|
|
306
|
-
const quota: ProviderQuota = {
|
|
307
|
-
// Claude's 5-hour window is a first-class rate limit, same as the Codex login 5h/weekly
|
|
308
|
-
// rows: report it in the canonical fields so the dashboard renders it with the standard
|
|
309
|
-
// "5-hour limit" label and ordering instead of as a generic extra window.
|
|
310
|
-
...(fiveHour?.percent !== undefined ? { fiveHourPercent: fiveHour.percent } : {}),
|
|
311
|
-
...(fiveHour?.resetAt !== undefined ? { fiveHourResetAt: fiveHour.resetAt } : {}),
|
|
312
|
-
...(sevenDay?.percent !== undefined ? { weeklyPercent: sevenDay.percent } : {}),
|
|
313
|
-
...(sevenDay?.resetAt !== undefined ? { weeklyResetAt: sevenDay.resetAt } : {}),
|
|
314
|
-
...(customWindows.length > 0 ? { customWindows } : {}),
|
|
315
|
-
updatedAt: Date.now(),
|
|
316
|
-
};
|
|
317
|
-
// Empty / schema-changed payloads must not cache as "success with no bars".
|
|
318
|
-
return hasQuotaRows(quota) ? markAnthropicFamilyEnumeration(quota, Array.isArray(body.limits) && body.limits.every(raw => {
|
|
319
|
-
const kind = asRecord(raw)?.kind;
|
|
320
|
-
return kind === "session" || kind === "weekly_all" || kind === "weekly_scoped" && parseClaudeLimit(raw) !== null;
|
|
321
|
-
})) : null;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
232
|
/**
|
|
325
233
|
* Anthropic per-credential usage.
|
|
326
234
|
*
|
|
@@ -19,6 +19,8 @@ export interface ProviderQuotaWindow {
|
|
|
19
19
|
label: string;
|
|
20
20
|
percent: number;
|
|
21
21
|
resetAt?: number;
|
|
22
|
+
/** Exact CCA wire model measured by this window; display evidence only, not eligibility. */
|
|
23
|
+
modelId?: string;
|
|
22
24
|
/**
|
|
23
25
|
* Set only when the PRODUCER proved this window covers one model family, structurally rather
|
|
24
26
|
* than by reading its label: an Anthropic `seven_day_<family>` body key, or a limit with
|
package/src/providers/quota.ts
CHANGED
|
@@ -53,7 +53,6 @@ import {
|
|
|
53
53
|
hydrateAccountQuotaCache,
|
|
54
54
|
mayCommitAccountQuotaKey,
|
|
55
55
|
mayCommitProviderQuotaKey,
|
|
56
|
-
normalizeAnthropicQuota,
|
|
57
56
|
supportsPerAccountQuota,
|
|
58
57
|
type AccountQuotaCacheEntry,
|
|
59
58
|
type ProviderAccountQuota,
|
|
@@ -367,6 +366,7 @@ async function readExplicitAccountQuota(provider: string, accountId: string, con
|
|
|
367
366
|
case "kimi": result = await fetchKimiQuota(provider, config, accessToken); break;
|
|
368
367
|
case "command-code": result = await fetchCommandCodeQuota(provider, config, accessToken); break;
|
|
369
368
|
case "devin": result = await (await import("./quota/devin")).fetchDevinQuota(provider, accessToken, credential.apiBaseUrl, config.baseUrl); break;
|
|
369
|
+
case "dsh-account": result = await (await import("./quota/dsh-account")).fetchDshAccountQuota(provider, accessToken, { accountId, credential }); break;
|
|
370
370
|
default: return null;
|
|
371
371
|
}
|
|
372
372
|
return { result, identity, isCurrent };
|
|
@@ -424,7 +424,8 @@ async function fetchAccountQuota(
|
|
|
424
424
|
providerConfig?: OcxProviderConfig,
|
|
425
425
|
liveConfig?: OcxConfig,
|
|
426
426
|
): Promise<AccountQuotaCacheEntry> {
|
|
427
|
-
|
|
427
|
+
const skipped = accountQuotaProbeSkip(provider, accountId);
|
|
428
|
+
if (skipped) return skipped;
|
|
428
429
|
if (isAnthropicInstanceId(provider)) return fetchAnthropicAccountQuota(provider, accountId, forceRefresh, liveConfig);
|
|
429
430
|
if (explicitAccountReader(provider)) return fetchExplicitAccountQuota(provider, accountId, forceRefresh, providerConfig);
|
|
430
431
|
if (provider === "kiro") hydrateAccountQuotaCache();
|
|
@@ -432,7 +433,8 @@ async function fetchAccountQuota(
|
|
|
432
433
|
const writerGeneration = captureConfigGeneration();
|
|
433
434
|
const kiroIdentity = provider === "kiro" ? kiroProbeIdentity(accountId) : undefined;
|
|
434
435
|
const cachedCandidate = accountQuotaCache.get(key);
|
|
435
|
-
const cached = provider !== "kiro" || cachedCandidate?.identity === kiroIdentity
|
|
436
|
+
const cached = (provider !== "kiro" || cachedCandidate?.identity === kiroIdentity)
|
|
437
|
+
&& cachedCandidate?.isCurrent?.() !== false ? cachedCandidate : undefined;
|
|
436
438
|
if (!forceRefresh && cached && Date.now() - cached.ts < ACCOUNT_QUOTA_TTL_MS) {
|
|
437
439
|
if (provider === "google-antigravity" && cached.quotaFailure && cached.quotaFailureIsCurrent?.() !== true) return { ...cached, quotaFailure: undefined };
|
|
438
440
|
return cached;
|
|
@@ -454,6 +456,7 @@ async function fetchAccountQuota(
|
|
|
454
456
|
try { return epoch === explicitAccountEpoch && diagnosticIdentity !== undefined && diagnosticIdentity === antigravityQuotaDiagnosticIdentity(accountId); }
|
|
455
457
|
catch { return false; }
|
|
456
458
|
};
|
|
459
|
+
const antigravityIsCurrent = () => quotaFailureIsCurrent();
|
|
457
460
|
const diagnosticFields = () => quotaFailure && quotaFailureIsCurrent() ? { quotaFailure, quotaFailureIsCurrent } : {};
|
|
458
461
|
const unavailable = (): AccountQuotaCacheEntry => {
|
|
459
462
|
const entry: AccountQuotaCacheEntry = {
|
|
@@ -461,9 +464,11 @@ async function fetchAccountQuota(
|
|
|
461
464
|
quota: cached?.quota ?? null,
|
|
462
465
|
unavailable: true,
|
|
463
466
|
...(provider === "kiro" ? { identity: kiroIdentity } : {}),
|
|
467
|
+
...(provider === "google-antigravity" ? { isCurrent: antigravityIsCurrent } : {}),
|
|
464
468
|
...diagnosticFields(),
|
|
465
469
|
};
|
|
466
|
-
if (
|
|
470
|
+
if (entry.isCurrent?.() !== false && mayCommitAccountQuotaKey(key, writerGeneration)
|
|
471
|
+
&& (provider !== "kiro" || kiroProbeCurrent(accountId, kiroIdentity))) {
|
|
467
472
|
accountQuotaCache.set(key, entry);
|
|
468
473
|
if (provider === "kiro") persistKiroAccountState();
|
|
469
474
|
sweepExpiredOnWrite(entry.ts);
|
|
@@ -493,12 +498,15 @@ async function fetchAccountQuota(
|
|
|
493
498
|
return { ts: Date.now(), quota: null, unavailable: true };
|
|
494
499
|
}
|
|
495
500
|
}
|
|
501
|
+
if (provider === "google-antigravity" && !antigravityIsCurrent()) return { ts: Date.now(), quota: null, unavailable: true };
|
|
496
502
|
if (!quota) return unavailable();
|
|
497
503
|
const entry: AccountQuotaCacheEntry = {
|
|
498
504
|
ts: Date.now(), quota,
|
|
499
505
|
...(provider === "kiro" ? { identity: kiroIdentity } : {}),
|
|
506
|
+
...(provider === "google-antigravity" ? { isCurrent: antigravityIsCurrent } : {}),
|
|
500
507
|
};
|
|
501
508
|
if (mayCommitAccountQuotaKey(key, writerGeneration)
|
|
509
|
+
&& entry.isCurrent?.() !== false
|
|
502
510
|
&& (provider !== "kiro" || kiroProbeCurrent(accountId, kiroIdentity))) {
|
|
503
511
|
accountQuotaCache.set(key, entry);
|
|
504
512
|
if (provider === "kiro") { commitKiroAccountUsageState(key, kiroSnapshot, kiroIdentity); persistKiroAccountState(); }
|
|
@@ -530,21 +538,7 @@ export async function fetchProviderAccountQuotas(
|
|
|
530
538
|
if (!set) return [];
|
|
531
539
|
return mapQuotaRoster(set.accounts, async account => {
|
|
532
540
|
const entry = await fetchAccountQuota(provider, account.id, forceRefresh, providerConfig, liveConfig);
|
|
533
|
-
const
|
|
534
|
-
|
|
535
|
-
quota: isAnthropicInstanceId(provider) ? normalizeAnthropicQuota(entry.quota, Date.now()) : entry.quota,
|
|
536
|
-
...(entry.unavailable ? { unavailable: true as const } : {}),
|
|
537
|
-
...(entry.unavailable && entry.quotaFailure && entry.quotaFailureIsCurrent?.() === true ? { quotaFailure: entry.quotaFailure } : {}),
|
|
538
|
-
};
|
|
539
|
-
if (entry.quotaFailureIsCurrent) Object.defineProperty(result, "quotaFailureIsCurrent", { value: entry.quotaFailureIsCurrent });
|
|
540
|
-
if (isAnthropicInstanceId(provider) && entry.isCurrent) Object.defineProperty(result, "isCurrent", { value: entry.isCurrent });
|
|
541
|
-
if (!explicitAccountReader(provider)) return result;
|
|
542
|
-
const identity = entry.identity;
|
|
543
|
-
Object.defineProperty(result, "isCurrent", { value: () => {
|
|
544
|
-
if (entry.isCurrent) return entry.isCurrent();
|
|
545
|
-
const credential = getAccountCredential(provider, account.id);
|
|
546
|
-
return !!credential && (!identity || explicitQuotaIdentity(provider, account.id, providerConfig) === identity);
|
|
547
|
-
} });
|
|
548
|
-
return result;
|
|
541
|
+
const { projectAccountQuotaRow } = await import("./quota/account-row");
|
|
542
|
+
return projectAccountQuotaRow(provider, account.id, entry, providerConfig);
|
|
549
543
|
});
|
|
550
544
|
}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
|
+
import { OPENCODE_GO_BASE_URL, OPENCODE_GO_RESPONSES_DEFAULTS } from "../../types/opencode-go";
|
|
1
2
|
import { KIRO_MODELS, KIRO_MODEL_CONTEXT_WINDOWS, KIRO_MODEL_REASONING_EFFORTS } from "../kiro-models";
|
|
3
|
+
import {
|
|
4
|
+
DSH_ACCOUNT_MODELS,
|
|
5
|
+
DSH_ACCOUNT_DEFAULT_MODEL,
|
|
6
|
+
DSH_ACCOUNT_MODEL_CONTEXT_WINDOWS,
|
|
7
|
+
DSH_ACCOUNT_MODEL_INPUT_MODALITIES,
|
|
8
|
+
DSH_ACCOUNT_MODEL_MAX_OUTPUT_TOKENS,
|
|
9
|
+
DSH_ACCOUNT_MODEL_REASONING_EFFORTS,
|
|
10
|
+
DSH_ACCOUNT_MODEL_DISPLAY_NAMES,
|
|
11
|
+
} from "../dsh-account-models";
|
|
2
12
|
import { DEVIN_MODEL_CONTEXT_WINDOWS, DEVIN_MODEL_EFFORTS, DEVIN_DEFAULT_EFFORTS } from "../../adapters/devin/live-models";
|
|
3
13
|
import { ANTIGRAVITY_MODELS, ANTIGRAVITY_MODEL_CONTEXT_WINDOWS, ANTIGRAVITY_MODEL_EFFORTS, ANTIGRAVITY_MODEL_INPUT_MODALITIES } from "../antigravity-models";
|
|
4
14
|
import {
|
|
@@ -506,6 +516,27 @@ export const PROVIDER_REGISTRY_CORE: readonly ProviderRegistryEntry[] = [
|
|
|
506
516
|
// The proprietary generate wire has no verified per-request serialization flag.
|
|
507
517
|
parallelToolCalls: false,
|
|
508
518
|
},
|
|
519
|
+
{
|
|
520
|
+
id: "dsh-account",
|
|
521
|
+
label: "DeepSeek Account (DSH)",
|
|
522
|
+
adapter: "dsh-account",
|
|
523
|
+
baseUrl: "https://api.deepseek.com/anthropic",
|
|
524
|
+
authKind: "oauth",
|
|
525
|
+
oauthId: "dsh-account",
|
|
526
|
+
featured: false,
|
|
527
|
+
dashboardPreset: true,
|
|
528
|
+
note: "Import-first: reuses your installed and signed-in DeepSeek Harness Desktop account. Add account imports the grant from ~/.dsh/.credentials.yaml and verifies it with the DeepSeek platform.",
|
|
529
|
+
dashboardUrl: "https://platform.deepseek.com",
|
|
530
|
+
// Static catalog: the account token never authorizes model discovery (src/oauth/model-discovery-auth.ts).
|
|
531
|
+
liveModels: false,
|
|
532
|
+
defaultModel: DSH_ACCOUNT_DEFAULT_MODEL,
|
|
533
|
+
models: [...DSH_ACCOUNT_MODELS],
|
|
534
|
+
modelContextWindows: DSH_ACCOUNT_MODEL_CONTEXT_WINDOWS,
|
|
535
|
+
modelInputModalities: DSH_ACCOUNT_MODEL_INPUT_MODALITIES,
|
|
536
|
+
modelMaxOutputTokens: DSH_ACCOUNT_MODEL_MAX_OUTPUT_TOKENS,
|
|
537
|
+
modelReasoningEfforts: DSH_ACCOUNT_MODEL_REASONING_EFFORTS,
|
|
538
|
+
modelDisplayNames: DSH_ACCOUNT_MODEL_DISPLAY_NAMES,
|
|
539
|
+
},
|
|
509
540
|
{
|
|
510
541
|
id: "orcarouter-oauth",
|
|
511
542
|
label: "OrcaRouter - Auth",
|
|
@@ -824,7 +855,8 @@ export const PROVIDER_REGISTRY_CORE: readonly ProviderRegistryEntry[] = [
|
|
|
824
855
|
escapeBuiltinToolNames: true,
|
|
825
856
|
},
|
|
826
857
|
{
|
|
827
|
-
id: "opencode-go", label: "opencode go", adapter: "openai-chat", baseUrl:
|
|
858
|
+
id: "opencode-go", label: "opencode go", adapter: "openai-chat", baseUrl: OPENCODE_GO_BASE_URL,
|
|
859
|
+
destinationAliases: [{ adapter: "openai-chat", baseUrl: "https://opencode.ai/inference/go/v1" }],
|
|
828
860
|
authKind: "key", featured: true, dashboardUrl: "https://opencode.ai/auth", defaultModel: "kimi-k2.7-code",
|
|
829
861
|
jawcodeBundle: "opencode-go", note: "GLM, DeepSeek, Kimi, Qwen, MiMo…",
|
|
830
862
|
// Zen Go can close a Chat stream after a fully assembled function call without sending
|
|
@@ -846,13 +878,7 @@ export const PROVIDER_REGISTRY_CORE: readonly ProviderRegistryEntry[] = [
|
|
|
846
878
|
- 다른 대안 대신 이 방식을 선택한 이유: OpenCode Go documents sibling models on Chat or Anthropic endpoints, and an exact registry default preserves both those routes and explicit opt-out precedence.
|
|
847
879
|
- 장점, 단점 및 영향: Each listed model reaches `/responses` from every inbound surface without changing siblings; a future upstream endpoint change requires an evidence-backed registry update.
|
|
848
880
|
*/
|
|
849
|
-
modelWireDefaults:
|
|
850
|
-
"gpt-5.6-luna": "openai-responses",
|
|
851
|
-
"grok-4.6": "openai-responses",
|
|
852
|
-
"grok-4.7": "openai-responses",
|
|
853
|
-
"muse-spark-1.3-contributor": "openai-responses",
|
|
854
|
-
"muse-spark-1.2-contributor": "openai-responses",
|
|
855
|
-
},
|
|
881
|
+
modelWireDefaults: OPENCODE_GO_RESPONSES_DEFAULTS,
|
|
856
882
|
modelContextWindows: {
|
|
857
883
|
"kimi-k3": KIMI_K3_STANDARD_CONTEXT_WINDOW,
|
|
858
884
|
// Zen Go discovers only the gateway id, so carry DeepSeek's official 1M V4.1
|
|
@@ -909,6 +935,9 @@ export const PROVIDER_REGISTRY_CORE: readonly ProviderRegistryEntry[] = [
|
|
|
909
935
|
},
|
|
910
936
|
modelReasoningEfforts: {
|
|
911
937
|
"gpt-5.6-luna": OPENAI_API_GPT56_REASONING_EFFORTS,
|
|
938
|
+
// Gemini's native thinkingLevel ladder; higher Codex efforts clamp to high.
|
|
939
|
+
// https://ai.google.dev/gemini-api/docs/models/gemini-4-argon
|
|
940
|
+
"gemini-4-argon-contributor": ["low", "medium", "high"],
|
|
912
941
|
"grok-4.6": ["low", "medium", "high", "xhigh"],
|
|
913
942
|
"grok-4.7": ["low", "medium", "high", "xhigh"],
|
|
914
943
|
"glm-5.3": ZAI_GLM_53_REASONING_EFFORTS,
|
|
@@ -1140,10 +1169,8 @@ export const PROVIDER_REGISTRY_CORE: readonly ProviderRegistryEntry[] = [
|
|
|
1140
1169
|
// https://cf.api.fan/v1 — GET /v1/models answers 401 without a key, so the host is live and
|
|
1141
1170
|
// discovery narrows to what the key's token group allows. Model ids are bare OpenAI-style
|
|
1142
1171
|
// ids (the Codex token group lists gpt-5.5 / gpt-5.1-codex).
|
|
1143
|
-
// Standard sponsor under SPONSORS.md; the dashboardUrl carries their affiliate code.
|
|
1144
1172
|
id: "packycode", label: "PackyCode", adapter: "openai-chat", baseUrl: "https://cf.api.fan/v1",
|
|
1145
|
-
authKind: "key", dashboardUrl: "https://www.packyapi.com
|
|
1146
|
-
sponsor: { tier: "standard", url: "https://www.packyapi.com/register?aff=k5KT" },
|
|
1173
|
+
authKind: "key", dashboardUrl: "https://www.packyapi.com",
|
|
1147
1174
|
defaultModel: "gpt-5.5",
|
|
1148
1175
|
models: ["gpt-5.5", "gpt-5.1-codex"],
|
|
1149
1176
|
liveModels: true,
|
|
@@ -1170,13 +1197,16 @@ export const PROVIDER_REGISTRY_CORE: readonly ProviderRegistryEntry[] = [
|
|
|
1170
1197
|
// devlog/_plan/260710_provider_hardening/001_research_frontier.md.
|
|
1171
1198
|
{
|
|
1172
1199
|
id: "google", label: "Google Gemini", adapter: "google", baseUrl: "https://generativelanguage.googleapis.com", authKind: "key", featured: true,
|
|
1173
|
-
dashboardUrl: "https://aistudio.google.com/apikey", defaultModel: "gemini-3.5-flash", models: ["gemini-3.8-flash", "gemini-3.6-flash", "gemini-3.5-flash", "gemini-3.5-flash-lite", "gemini-3.1-pro-preview", "gemini-3.7-flash"],
|
|
1174
|
-
modelContextWindows: { "gemini-3.8-flash": 1_048_576, "gemini-3.6-flash": 1_048_576, "gemini-3.5-flash": 1_000_000, "gemini-3.5-flash-lite": 1_048_576, "gemini-3.7-flash": 1_048_576 },
|
|
1175
|
-
modelInputModalities: { "gemini-3.8-flash": ["text", "image"], "gemini-3.6-flash": ["text", "image"], "gemini-3.5-flash-lite": ["text", "image"], "gemini-3.7-flash": ["text", "image"] },
|
|
1200
|
+
dashboardUrl: "https://aistudio.google.com/apikey", defaultModel: "gemini-3.5-flash", models: ["gemini-4-argon", "gemini-3.8-flash", "gemini-3.6-flash", "gemini-3.5-flash", "gemini-3.5-flash-lite", "gemini-3.1-pro-preview", "gemini-3.7-flash"],
|
|
1201
|
+
modelContextWindows: { "gemini-4-argon": 1_048_576, "gemini-3.8-flash": 1_048_576, "gemini-3.6-flash": 1_048_576, "gemini-3.5-flash": 1_000_000, "gemini-3.5-flash-lite": 1_048_576, "gemini-3.7-flash": 1_048_576 },
|
|
1202
|
+
modelInputModalities: { "gemini-4-argon": ["text", "image"], "gemini-3.8-flash": ["text", "image"], "gemini-3.6-flash": ["text", "image"], "gemini-3.5-flash-lite": ["text", "image"], "gemini-3.7-flash": ["text", "image"] },
|
|
1176
1203
|
modelReasoningEfforts: {
|
|
1177
1204
|
// 3.7 and 3.8 omit `minimal`: Google documents it as a validation error on both model
|
|
1178
1205
|
// pages, so advertising it hands the user a rung the API rejects. 3.5/3.6 keep theirs —
|
|
1179
1206
|
// their pages still list it, and this unit has no evidence to change them.
|
|
1207
|
+
// Gemini 4 Argon (GA 2026-10-13): low/medium(default)/high; `minimal` and thinking_budget
|
|
1208
|
+
// return HTTP 400 per ai.google.dev/gemini-api/docs/models/gemini-4-argon.
|
|
1209
|
+
"gemini-4-argon": ["low", "medium", "high"],
|
|
1180
1210
|
"gemini-3.8-flash": ["low", "medium", "high"],
|
|
1181
1211
|
"gemini-3.7-flash": ["low", "medium", "high"],
|
|
1182
1212
|
"gemini-3.6-flash": ["minimal", "low", "medium", "high"],
|
|
@@ -1247,6 +1247,25 @@ export const PROVIDER_REGISTRY_EXTENDED: readonly ProviderRegistryEntry[] = [
|
|
|
1247
1247
|
},
|
|
1248
1248
|
note: "OpenAI-compatible API gateway. Create a workspace API key at tokenlab.sh. Live discovery lists tool-capable chat models available to your key and delivery policy.",
|
|
1249
1249
|
},
|
|
1250
|
+
{
|
|
1251
|
+
// Modelflare: OpenAI-compatible relay at https://modelflare.dev/v1 (an Anthropic Messages
|
|
1252
|
+
// surface also answers at https://modelflare.dev/v1/messages). Live-checked 2026-10-13 through
|
|
1253
|
+
// the proxy: chat, streaming and tool calls succeed on Chat for all four seeded models, and a
|
|
1254
|
+
// real `codex exec` turn completed on glm-5.3-flash. GET /v1/models lists ~77 rows mixing chat,
|
|
1255
|
+
// image and video models, and includes deepseek-v4.1-flash, which answers 503 on every call,
|
|
1256
|
+
// so the preset seeds the verified chat models statically instead of trusting live discovery.
|
|
1257
|
+
// The conventional env reference derived from the id is ${MODELFLARE_API_KEY}.
|
|
1258
|
+
id: "modelflare",
|
|
1259
|
+
label: "Modelflare",
|
|
1260
|
+
adapter: "openai-chat",
|
|
1261
|
+
baseUrl: "https://modelflare.dev/v1",
|
|
1262
|
+
authKind: "key",
|
|
1263
|
+
dashboardUrl: "https://modelflare.dev",
|
|
1264
|
+
preserveCustomDestination: true,
|
|
1265
|
+
defaultModel: "glm-5.3-flash",
|
|
1266
|
+
models: ["glm-5.3-flash", "claude-sonnet-5-5", "gpt-6.1-sol", "deepseek-v4-flash"],
|
|
1267
|
+
note: "OpenAI-compatible relay for Claude, GPT, GLM and DeepSeek chat models. The seeded models were verified with chat, streaming and tool calls; deepseek-v4.1-flash is listed upstream but currently answers 503 and is left out. An ordinary key only reaches its own routing group's models; a Smart key reaches all seeded models. Image and video models are not served through this Chat preset. Upstream latency varies widely (a few seconds to about 30 s) with occasional transient 503s.",
|
|
1268
|
+
},
|
|
1250
1269
|
{
|
|
1251
1270
|
id: "opencode-free",
|
|
1252
1271
|
label: "OpenCode Free",
|
|
@@ -213,7 +213,7 @@ export interface ProviderRegistryEntry {
|
|
|
213
213
|
*/
|
|
214
214
|
chatCompletionsPath?: string;
|
|
215
215
|
/**
|
|
216
|
-
*
|
|
216
|
+
* Canonical or historical endpoints, kept so a saved custom provider that still points
|
|
217
217
|
* at one keeps receiving this row's metadata through `registryEntryForProviderDestination`.
|
|
218
218
|
* Destination matching is by adapter plus normalized base URL, so moving a row's wire or
|
|
219
219
|
* prefix would otherwise orphan every config a user wrote against the old address.
|