@iislee/opencodex 2.11.0 → 2.35.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/AGENTS_INSTALL.md +109 -0
- package/README.md +117 -22
- package/bin/ocx.mjs +245 -88
- package/bin/package-main.mjs +1 -1
- package/gui/dist/assets/index-Be1sDpWw.css +1 -0
- package/gui/dist/assets/index-D4OKgUV4.js +114 -0
- package/gui/dist/index.html +2 -2
- package/gui/dist/provider-icons/alibaba-color.svg +1 -1
- package/gui/dist/provider-icons/antigravity-color.svg +1 -1
- package/gui/dist/provider-icons/claude-color.svg +1 -1
- package/gui/dist/provider-icons/cline-color.svg +16 -0
- package/gui/dist/provider-icons/cloudflare-ai-gateway-color.svg +1 -1
- package/gui/dist/provider-icons/commandcode-color.svg +1 -0
- package/gui/dist/provider-icons/copilot-color.svg +1 -1
- package/gui/dist/provider-icons/cursor-color.svg +1 -1
- package/gui/dist/provider-icons/deepseek-color.svg +1 -1
- package/gui/dist/provider-icons/firepass-color.svg +1 -1
- package/gui/dist/provider-icons/fireworks-color.svg +1 -1
- package/gui/dist/provider-icons/gemini-color.svg +1 -1
- package/gui/dist/provider-icons/github-copilot-color.svg +1 -1
- package/gui/dist/provider-icons/gitlab-duo-color.svg +1 -1
- package/gui/dist/provider-icons/grok.svg +1 -1
- package/gui/dist/provider-icons/groq-color.svg +1 -1
- package/gui/dist/provider-icons/huggingface-color.svg +1 -1
- package/gui/dist/provider-icons/kimi-color.svg +1 -1
- package/gui/dist/provider-icons/kiro-color.svg +2 -2
- package/gui/dist/provider-icons/lm-studio-color.svg +1 -1
- package/gui/dist/provider-icons/mistral-color.svg +1 -1
- package/gui/dist/provider-icons/moonshot-color.svg +1 -1
- package/gui/dist/provider-icons/nvidia-color.svg +1 -1
- package/gui/dist/provider-icons/ollama-color.svg +1 -1
- package/gui/dist/provider-icons/openai.svg +1 -1
- package/gui/dist/provider-icons/opencode.svg +2 -1
- package/gui/dist/provider-icons/openrouter-color.svg +1 -1
- package/gui/dist/provider-icons/pi.svg +2 -2
- package/gui/dist/provider-icons/qianfan-color.svg +1 -1
- package/gui/dist/provider-icons/qwen-portal-color.svg +1 -1
- package/gui/dist/provider-icons/vercel-ai-gateway-color.svg +1 -1
- package/gui/dist/provider-icons/vllm-color.svg +1 -1
- package/gui/dist/provider-icons/xiaomi-color.svg +1 -1
- package/package.json +21 -10
- package/src/adapters/anthropic-output-schema.ts +137 -0
- package/src/adapters/anthropic.ts +475 -62
- package/src/adapters/base.ts +82 -7
- package/src/adapters/client-fingerprint.ts +18 -12
- package/src/adapters/cline-pass-deepseek-v4-tool-replay.ts +69 -0
- package/src/adapters/command-code.ts +637 -0
- package/src/adapters/cursor/call-id.ts +44 -0
- package/src/adapters/cursor/catalog.ts +541 -0
- package/src/adapters/cursor/checkpoint-store.ts +308 -0
- package/src/adapters/cursor/cursor-errors.ts +144 -6
- package/src/adapters/cursor/discovery.ts +122 -14
- package/src/adapters/cursor/effort-map.ts +106 -4
- package/src/adapters/cursor/envelope-echo.ts +290 -0
- package/src/adapters/cursor/framing.ts +39 -0
- package/src/adapters/cursor/h2-pool.ts +123 -0
- package/src/adapters/cursor/http1-bidi.ts +361 -0
- package/src/adapters/cursor/images.ts +704 -0
- package/src/adapters/cursor/live-models.ts +180 -59
- package/src/adapters/cursor/live-transport.ts +623 -170
- package/src/adapters/cursor/message-mapper.ts +4 -1
- package/src/adapters/cursor/native-exec-common.ts +23 -2
- package/src/adapters/cursor/native-exec-desktop.ts +23 -0
- package/src/adapters/cursor/native-exec-fs.ts +10 -7
- package/src/adapters/cursor/native-exec-network.ts +1 -1
- package/src/adapters/cursor/native-exec-shell.ts +5 -3
- package/src/adapters/cursor/native-exec.ts +121 -14
- package/src/adapters/cursor/protobuf-events.ts +829 -11
- package/src/adapters/cursor/protobuf-request.ts +447 -75
- package/src/adapters/cursor/request-builder.ts +271 -35
- package/src/adapters/cursor/tool-definitions.ts +252 -12
- package/src/adapters/cursor/tool-result-normalize.ts +115 -0
- package/src/adapters/cursor/transport.ts +22 -0
- package/src/adapters/cursor/types.ts +48 -1
- package/src/adapters/cursor.ts +336 -39
- package/src/adapters/exec-tool-result-normalize.ts +99 -0
- package/src/adapters/google-antigravity-replay.ts +713 -41
- package/src/adapters/google-antigravity-wire.ts +48 -10
- package/src/adapters/google-errors.ts +44 -12
- package/src/adapters/google-http.ts +38 -10
- package/src/adapters/google-tool-schema.ts +80 -15
- package/src/adapters/google-truncation.ts +11 -0
- package/src/adapters/google.ts +742 -86
- package/src/adapters/identity.ts +39 -6
- package/src/adapters/image.ts +1 -1
- package/src/adapters/kiro-constants.ts +27 -0
- package/src/adapters/kiro-errors.ts +11 -0
- package/src/adapters/kiro-events.ts +19 -1
- package/src/adapters/kiro-thinking.ts +18 -2
- package/src/adapters/kiro-tools.ts +65 -17
- package/src/adapters/kiro.ts +270 -73
- package/src/adapters/mimo-free.ts +17 -0
- package/src/adapters/openai-chat-url.ts +11 -0
- package/src/adapters/openai-chat.ts +1377 -344
- package/src/adapters/openai-responses-url.ts +16 -0
- package/src/adapters/openai-responses.ts +1164 -64
- package/src/adapters/registry.ts +175 -0
- package/src/adapters/responses-tool-schema.ts +67 -0
- package/src/adapters/run-turn-queue.ts +36 -1
- package/src/adapters/tool-call-id.ts +119 -0
- package/src/adapters/tool-catalog-nudge.ts +105 -21
- package/src/adapters/xai-tool-schema.ts +436 -0
- package/src/adapters/xai-web-search.ts +186 -0
- package/src/bridge.ts +512 -92
- package/src/chat/inbound.ts +57 -20
- package/src/chat/outbound.ts +97 -33
- package/src/claude/agents-inject.ts +40 -10
- package/src/claude/context-windows.ts +37 -14
- package/src/claude/desktop-3p.ts +243 -9
- package/src/claude/gateway-cache.ts +41 -4
- package/src/claude/inbound.ts +72 -3
- package/src/claude/model-info.ts +38 -15
- package/src/claude/outbound.ts +88 -21
- package/src/cli/access.ts +46 -3
- package/src/cli/account-api.ts +150 -19
- package/src/cli/account-auth.ts +33 -6
- package/src/cli/account-catalog-refresh.ts +14 -0
- package/src/cli/account-extended.ts +648 -28
- package/src/cli/account-main.ts +317 -0
- package/src/cli/account.ts +97 -19
- package/src/cli/agent.ts +53 -2
- package/src/cli/alias.ts +66 -0
- package/src/cli/capabilities-command.ts +94 -0
- package/src/cli/capabilities.ts +496 -0
- package/src/cli/claude-agent-startup-sync.ts +73 -0
- package/src/cli/claude-desktop.ts +60 -15
- package/src/cli/claude.ts +129 -35
- package/src/cli/codex-log-guard-doctor.ts +103 -0
- package/src/cli/codex-shim-autorestore.ts +2 -0
- package/src/cli/codex-shim-readiness.ts +76 -0
- package/src/cli/combo.ts +8 -0
- package/src/cli/config-command.ts +74 -10
- package/src/cli/dispatch.ts +821 -0
- package/src/cli/doctor.ts +440 -56
- package/src/cli/ensure-desired-integrations.ts +152 -0
- package/src/cli/export-command.ts +46 -20
- package/src/cli/help.ts +34 -274
- package/src/cli/index.ts +417 -528
- package/src/cli/init.ts +5 -17
- package/src/cli/inspect.ts +230 -0
- package/src/cli/integrations.ts +120 -2
- package/src/cli/lab.ts +607 -0
- package/src/cli/launcher-context.ts +77 -0
- package/src/cli/minimax.ts +497 -0
- package/src/cli/models-runtime.ts +130 -2
- package/src/cli/models.ts +118 -16
- package/src/cli/observe.ts +123 -11
- package/src/cli/opencode.ts +4 -2
- package/src/cli/provider-runtime.ts +34 -3
- package/src/cli/provider.ts +25 -3
- package/src/cli/ready.ts +301 -0
- package/src/cli/registry.ts +476 -0
- package/src/cli/root.ts +86 -0
- package/src/cli/route-policy.ts +92 -0
- package/src/cli/runtime-api.ts +57 -10
- package/src/cli/star-prompt.ts +71 -15
- package/src/cli/status.ts +51 -4
- package/src/cli/storage.ts +234 -0
- package/src/cli/system-command.ts +16 -0
- package/src/cli/system-restart-client.ts +146 -0
- package/src/cli/tray-proxy.ts +153 -6
- package/src/cli/usage-report.ts +184 -0
- package/src/cli/v2.ts +137 -18
- package/src/cli/version-skew.ts +46 -0
- package/src/cli.ts +1 -1
- package/src/clients/config-export.ts +1442 -23
- package/src/clients/effective-status.ts +30 -2
- package/src/clients/probes/cline.ts +81 -0
- package/src/codex/account-label.ts +35 -1
- package/src/codex/account-lifecycle.ts +130 -13
- package/src/codex/account-namespaces.ts +49 -3
- package/src/codex/account-pause.ts +2 -1
- package/src/codex/account-priority.ts +84 -0
- package/src/codex/account-store.ts +29 -2
- package/src/codex/account-usability.ts +25 -2
- package/src/codex/admission.ts +256 -0
- package/src/codex/affinity-debug.ts +162 -0
- package/src/codex/app-server-processes.ts +570 -107
- package/src/codex/app-server-restart-service.ts +232 -0
- package/src/codex/auth-api.ts +893 -246
- package/src/codex/auth-collision.ts +5 -3
- package/src/codex/auth-context.ts +348 -32
- package/src/codex/autostart-health.ts +24 -1
- package/src/codex/catalog/account-models.ts +67 -0
- package/src/codex/catalog/aggregation.ts +86 -10
- package/src/codex/catalog/bundled.ts +331 -33
- package/src/codex/catalog/effort.ts +138 -32
- package/src/codex/catalog/filesystem-evidence.ts +302 -0
- package/src/codex/catalog/kinds.ts +2 -0
- package/src/codex/catalog/metadata.ts +555 -45
- package/src/codex/catalog/native-models.ts +75 -0
- package/src/codex/catalog/parsing.ts +269 -30
- package/src/codex/catalog/provider-fetch.ts +1626 -144
- package/src/codex/catalog/sync.ts +1576 -187
- package/src/codex/catalog-admission.ts +199 -0
- package/src/codex/catalog-refresh-status.ts +105 -0
- package/src/codex/catalog-write-serialization.ts +242 -0
- package/src/codex/catalog.ts +6 -3
- package/src/codex/codex-write-lock.ts +386 -0
- package/src/codex/convergence-types.ts +614 -0
- package/src/codex/convergence.ts +676 -0
- package/src/codex/coordinator-doctor.ts +332 -0
- package/src/codex/custom-model-catalog-migration.ts +176 -0
- package/src/codex/desired-state.ts +230 -0
- package/src/codex/desktop-app-restart.ts +355 -0
- package/src/codex/features.ts +636 -39
- package/src/codex/generation.ts +202 -0
- package/src/codex/history-job.ts +436 -0
- package/src/codex/history-lock.ts +242 -0
- package/src/codex/history-manifest.ts +112 -0
- package/src/codex/history-migration-guardian.ts +30 -24
- package/src/codex/history-provider.ts +1016 -235
- package/src/codex/history-transition.ts +105 -0
- package/src/codex/history-worker.ts +223 -0
- package/src/codex/inject-coordination.ts +373 -0
- package/src/codex/inject.ts +1114 -152
- package/src/codex/injected-marker.ts +37 -3
- package/src/codex/integration-record.ts +266 -0
- package/src/codex/internal/catalog-writer.ts +203 -0
- package/src/codex/internal/history-writer.ts +81 -0
- package/src/codex/journal.ts +66 -4
- package/src/codex/log-guard/inspect.ts +524 -0
- package/src/codex/log-guard/lock.ts +150 -0
- package/src/codex/log-guard/maintenance.ts +403 -0
- package/src/codex/log-guard/path-safety.ts +88 -0
- package/src/codex/log-guard/policy.ts +44 -0
- package/src/codex/log-guard/processes.ts +205 -0
- package/src/codex/log-guard/protection.ts +489 -0
- package/src/codex/log-guard/sqlite-errors.ts +9 -0
- package/src/codex/main-account-cache.ts +24 -0
- package/src/codex/main-account.ts +29 -1
- package/src/codex/management-convergence.ts +167 -0
- package/src/codex/model-cache.ts +56 -10
- package/src/codex/model-entitlements.ts +360 -0
- package/src/codex/native-main-admission.ts +47 -0
- package/src/codex/native-main-auth-temp.ts +187 -0
- package/src/codex/native-main-claim.ts +178 -0
- package/src/codex/native-main-lock-file.ts +162 -0
- package/src/codex/native-main-owner.ts +329 -0
- package/src/codex/native-profile-api.ts +247 -0
- package/src/codex/native-profile-manager.ts +1531 -0
- package/src/codex/native-profile-processes.ts +121 -0
- package/src/codex/native-profile-recovery.ts +99 -0
- package/src/codex/native-profile-stage-store.ts +387 -0
- package/src/codex/native-profile-startup.ts +622 -0
- package/src/codex/native-profile-store.ts +855 -0
- package/src/codex/native-profile-types.ts +120 -0
- package/src/codex/native-residue.ts +675 -0
- package/src/codex/paths.ts +80 -1
- package/src/codex/plan-from-token.ts +140 -0
- package/src/codex/plan.ts +40 -0
- package/src/codex/plugins-doctor.ts +1 -1
- package/src/codex/pool-rotation.ts +74 -4
- package/src/codex/project-config-warnings.ts +20 -6
- package/src/codex/prompt-journal.ts +352 -0
- package/src/codex/prompt-layers.ts +1313 -0
- package/src/codex/prompt-lock.ts +143 -0
- package/src/codex/prompt-text-probe.ts +238 -0
- package/src/codex/quota-rejection.ts +298 -0
- package/src/codex/quota.ts +264 -21
- package/src/codex/refresh.ts +11 -2
- package/src/codex/reset-credit-recovery.ts +1044 -0
- package/src/codex/routing.ts +514 -94
- package/src/codex/runtime.ts +159 -38
- package/src/codex/shim.ts +1065 -31
- package/src/codex/subagent-model-fallback.ts +437 -43
- package/src/codex/sync.ts +191 -2
- package/src/codex/transition-state.ts +720 -0
- package/src/codex/upstream-host-health.ts +368 -0
- package/src/codex/user-identity.ts +557 -0
- package/src/codex/warmup.ts +187 -81
- package/src/codex/write-coordination.ts +114 -0
- package/src/combos/failover.ts +47 -0
- package/src/combos/index.ts +4 -0
- package/src/combos/request.ts +32 -0
- package/src/combos/types.ts +91 -9
- package/src/compatibility/index.ts +26 -0
- package/src/compatibility/manifest.ts +253 -0
- package/src/compatibility/openai-responses.ts +121 -0
- package/src/config/atomic-write.ts +219 -0
- package/src/config/paths.ts +40 -0
- package/src/config/process-state.ts +309 -0
- package/src/config/provider-name.ts +24 -0
- package/src/config/provider-validation.ts +177 -0
- package/src/config/rebase-provenance.ts +68 -0
- package/src/config.ts +1713 -709
- package/src/generated/compatibility-version.json +3324 -0
- package/src/generated/{jawcode-model-metadata.ts → model-metadata.ts} +19 -17
- package/src/grok/inject.ts +16 -5
- package/src/grok/inspect.ts +45 -0
- package/src/grok/sync.ts +2 -2
- package/src/images/loop.ts +157 -33
- package/src/images/plan.ts +24 -13
- package/src/integrations/config-io.ts +269 -0
- package/src/integrations/journal.ts +315 -0
- package/src/integrations/merge.ts +135 -0
- package/src/integrations/mutation-flight.ts +71 -0
- package/src/integrations/native/ownership-preflight.ts +202 -0
- package/src/integrations/omp-yaml-source.ts +358 -0
- package/src/integrations/owned-refresh.ts +74 -0
- package/src/integrations/ownership-policy.ts +160 -0
- package/src/integrations/ownership.ts +155 -0
- package/src/integrations/registry.ts +166 -0
- package/src/integrations/serialize.ts +314 -0
- package/src/integrations/state.ts +433 -0
- package/src/integrations/store.ts +103 -0
- package/src/integrations/writer-lock.ts +98 -0
- package/src/integrations/writer.ts +715 -0
- package/src/lab/artifacts/sanitize.ts +586 -0
- package/src/lab/artifacts/secure-fs.ts +475 -0
- package/src/lab/artifacts/store.ts +310 -0
- package/src/lab/automation/budgets.ts +78 -0
- package/src/lab/automation/config-persistence.ts +256 -0
- package/src/lab/automation/constants.ts +39 -0
- package/src/lab/automation/cooldown.ts +103 -0
- package/src/lab/automation/dispatch.ts +211 -0
- package/src/lab/automation/index.ts +13 -0
- package/src/lab/automation/orchestrator.ts +499 -0
- package/src/lab/automation/persistence.ts +512 -0
- package/src/lab/automation/planner.ts +371 -0
- package/src/lab/automation/policy.ts +136 -0
- package/src/lab/automation/queue.ts +191 -0
- package/src/lab/automation/recovery.ts +24 -0
- package/src/lab/automation/route-context.ts +21 -0
- package/src/lab/automation/run-key.ts +44 -0
- package/src/lab/automation/runs-query.ts +34 -0
- package/src/lab/automation/types.ts +160 -0
- package/src/lab/conformance/assertion.ts +325 -0
- package/src/lab/conformance/digest.ts +22 -0
- package/src/lab/conformance/executor.ts +741 -0
- package/src/lab/conformance/fixture-provider.ts +27 -0
- package/src/lab/conformance/fixtures/live-v1-cases.json +175 -0
- package/src/lab/conformance/fixtures/protocol-v1-cases.json +461 -0
- package/src/lab/conformance/harness-budget.ts +47 -0
- package/src/lab/conformance/index.ts +5 -0
- package/src/lab/conformance/jcs.ts +64 -0
- package/src/lab/conformance/json-pointer.ts +39 -0
- package/src/lab/conformance/manifest.ts +180 -0
- package/src/lab/conformance/mcp-stub.ts +179 -0
- package/src/lab/conformance/negative-controls.ts +164 -0
- package/src/lab/conformance/observation.ts +355 -0
- package/src/lab/conformance/runner.ts +68 -0
- package/src/lab/conformance/sse-normalize.ts +59 -0
- package/src/lab/conformance/suite-manifest.ts +78 -0
- package/src/lab/conformance/types.ts +214 -0
- package/src/lab/constants.ts +126 -0
- package/src/lab/digest.ts +64 -0
- package/src/lab/events/errors.ts +9 -0
- package/src/lab/events/limits.ts +117 -0
- package/src/lab/events/types.ts +229 -0
- package/src/lab/events/validate.ts +781 -0
- package/src/lab/fabric/constants.ts +40 -0
- package/src/lab/fabric/executor.ts +492 -0
- package/src/lab/fabric/index.ts +80 -0
- package/src/lab/fabric/manifest.ts +222 -0
- package/src/lab/fabric/observe.ts +489 -0
- package/src/lab/fabric/patch.ts +79 -0
- package/src/lab/fabric/producer-child.ts +139 -0
- package/src/lab/fabric/producer-isolate.ts +276 -0
- package/src/lab/fabric/producer-protocol.ts +61 -0
- package/src/lab/fabric/scratch.ts +439 -0
- package/src/lab/fabric/subject.ts +106 -0
- package/src/lab/fabric/types.ts +134 -0
- package/src/lab/fabric/verifier.ts +98 -0
- package/src/lab/index.ts +54 -0
- package/src/lab/ledger/artifact-refs.ts +127 -0
- package/src/lab/ledger/invalidation.ts +136 -0
- package/src/lab/ledger/purge.ts +310 -0
- package/src/lab/ledger/store.ts +532 -0
- package/src/lab/live/credential-lease.ts +53 -0
- package/src/lab/live/destination.ts +155 -0
- package/src/lab/live/executor.ts +336 -0
- package/src/lab/live/inert-tools.ts +56 -0
- package/src/lab/live/manifest.ts +85 -0
- package/src/lab/live/mcp-loopback.ts +57 -0
- package/src/lab/live/runner.ts +19 -0
- package/src/lab/live/sandbox.ts +61 -0
- package/src/lab/live/suite-manifest.ts +41 -0
- package/src/lab/live/transport.ts +118 -0
- package/src/lab/live/types.ts +197 -0
- package/src/lab/observe/from-conformance.ts +301 -0
- package/src/lab/observe/from-live.ts +117 -0
- package/src/lab/paths.ts +153 -0
- package/src/lab/projection/rebuild.ts +495 -0
- package/src/lab/projection/schema.ts +135 -0
- package/src/lab/projection/verdicts.ts +474 -0
- package/src/lab/projection/verification.ts +412 -0
- package/src/lab/public/bundle.ts +217 -0
- package/src/lab/public/community-authority.ts +175 -0
- package/src/lab/public/community-files.ts +29 -0
- package/src/lab/public/community.ts +479 -0
- package/src/lab/public/file-safety.ts +155 -0
- package/src/lab/public/ids.ts +26 -0
- package/src/lab/public/index.ts +16 -0
- package/src/lab/public/mutation-lock.ts +424 -0
- package/src/lab/public/operator.ts +353 -0
- package/src/lab/public/origin-purge.ts +79 -0
- package/src/lab/public/origin.ts +203 -0
- package/src/lab/public/privacy.ts +143 -0
- package/src/lab/public/private-file.ts +261 -0
- package/src/lab/public/project.ts +124 -0
- package/src/lab/public/purge-test-fault.ts +21 -0
- package/src/lab/public/purge.ts +223 -0
- package/src/lab/public/registry.ts +44 -0
- package/src/lab/public/revocation.ts +252 -0
- package/src/lab/public/signature.ts +243 -0
- package/src/lab/public/storage.ts +105 -0
- package/src/lab/public/strict-json.ts +206 -0
- package/src/lab/public/time.ts +26 -0
- package/src/lab/public/types.ts +172 -0
- package/src/lab/public/validate.ts +391 -0
- package/src/lab/query/catalog.ts +101 -0
- package/src/lab/query/connection.ts +107 -0
- package/src/lab/query/constants.ts +4 -0
- package/src/lab/query/cursor.ts +132 -0
- package/src/lab/query/dto-map.ts +277 -0
- package/src/lab/query/errors.ts +22 -0
- package/src/lab/query/freshness.ts +53 -0
- package/src/lab/query/index.ts +45 -0
- package/src/lab/query/latest-observation.ts +59 -0
- package/src/lab/query/passive-production.ts +159 -0
- package/src/lab/query/queries.ts +444 -0
- package/src/lab/query/types.ts +266 -0
- package/src/lab/subject/behavior-fingerprint.ts +77 -0
- package/src/lab/subject/installation-salt.ts +112 -0
- package/src/lab/subject/protocol-subject.ts +80 -0
- package/src/lab/subject/route-subject.ts +74 -0
- package/src/lib/admin-secrets.ts +24 -0
- package/src/lib/app-owned-memory-stores.ts +22 -0
- package/src/lib/bounded-body.ts +167 -11
- package/src/lib/bun-runtime.ts +125 -12
- package/src/lib/bun-stream-caps.ts +13 -9
- package/src/lib/codex-restart-contract.ts +120 -0
- package/src/lib/config-ownership.ts +26 -2
- package/src/lib/destination-policy.ts +65 -1
- package/src/lib/errors.ts +80 -5
- package/src/lib/fabric-task-execution-authority.ts +7 -0
- package/src/lib/fabric-task-host.ts +29 -0
- package/src/lib/lab-activation.ts +223 -0
- package/src/lib/lab-live-execution-authority.ts +13 -0
- package/src/lib/lab-live-host.ts +30 -0
- package/src/lib/lab-live-pinned-sender.ts +56 -0
- package/src/lib/lab-live-route-production.ts +130 -0
- package/src/lib/lab-passive-linker-registration.ts +26 -0
- package/src/lib/local-management-attestation.ts +51 -0
- package/src/lib/local-management-capability.ts +100 -0
- package/src/lib/local-provider-reload-contract.ts +100 -0
- package/src/lib/optional-shutdown-hooks.ts +57 -0
- package/src/lib/package-tree-integrity.ts +101 -0
- package/src/lib/pinned-http.ts +145 -26
- package/src/lib/process-control.ts +6 -2
- package/src/lib/provider-outbound.ts +49 -9
- package/src/lib/redact.ts +419 -3
- package/src/lib/self-launch-argv.ts +15 -0
- package/src/lib/server-resource-ownership.ts +71 -0
- package/src/lib/service-secrets.ts +15 -0
- package/src/lib/shadow-call.ts +35 -4
- package/src/lib/sse-decoder.ts +41 -0
- package/src/lib/state-store-registrations.ts +10 -2
- package/src/lib/system-restart-contract.ts +73 -0
- package/src/lib/token-estimate.ts +19 -2
- package/src/lib/tool-argument-integers.ts +253 -0
- package/src/lib/translator-budget.ts +44 -0
- package/src/lib/upstream-http-version.ts +57 -0
- package/src/lib/upstream-reachability.ts +95 -0
- package/src/lib/upstream-retry.ts +156 -3
- package/src/lib/windows-atomic-replace.ts +155 -0
- package/src/lib/windows-elevation.ts +70 -2
- package/src/lib/windows-secret-acl.ts +409 -69
- package/src/lib/windows-service-wrappers.ts +72 -0
- package/src/lib/windows-text.ts +106 -0
- package/src/lib/windows-user-principal.ts +341 -0
- package/src/lib/winsw.ts +33 -5
- package/src/oauth/account-import/google-antigravity-adapter.ts +74 -0
- package/src/oauth/account-import/index.ts +15 -0
- package/src/oauth/account-import/parser.ts +83 -0
- package/src/oauth/account-import/registry.ts +18 -0
- package/src/oauth/account-import/service.ts +75 -0
- package/src/oauth/account-import/types.ts +91 -0
- package/src/oauth/anthropic.ts +12 -1
- package/src/oauth/callback-server.ts +30 -4
- package/src/oauth/chatgpt.ts +12 -1
- package/src/oauth/cline.ts +203 -0
- package/src/oauth/command-code.ts +239 -0
- package/src/oauth/cursor.ts +46 -5
- package/src/oauth/generic-account-failover.ts +231 -0
- package/src/oauth/google-antigravity.ts +35 -3
- package/src/oauth/health.ts +20 -12
- package/src/oauth/index.ts +462 -71
- package/src/oauth/key-providers.ts +25 -0
- package/src/oauth/kimi.ts +25 -3
- package/src/oauth/kiro.ts +95 -6
- package/src/oauth/local-token-detect.ts +13 -2
- package/src/oauth/log.ts +3 -1
- package/src/oauth/login-cli.ts +88 -28
- package/src/oauth/nous.ts +798 -0
- package/src/oauth/open-browser-choice.ts +26 -0
- package/src/oauth/store.ts +133 -26
- package/src/oauth/token-guardian.ts +9 -3
- package/src/oauth/types.ts +15 -0
- package/src/pi/models.ts +2 -2
- package/src/providers/alibaba-region-migration.ts +1 -1
- package/src/providers/antigravity-models.ts +521 -31
- package/src/providers/auto-compact-budget.ts +65 -0
- package/src/providers/base-url-choices.ts +10 -0
- package/src/providers/codex-capacity.ts +292 -0
- package/src/providers/command-code-efforts.ts +176 -0
- package/src/providers/context-cap.ts +26 -8
- package/src/providers/cursor-pool.ts +72 -0
- package/src/providers/default-aliases.ts +65 -0
- package/src/providers/derive.ts +281 -6
- package/src/providers/fastwire.ts +507 -0
- package/src/providers/free-directory.ts +10 -7
- package/src/providers/google-vertex-location.ts +14 -0
- package/src/providers/key-failover.ts +71 -3
- package/src/providers/label.ts +35 -2
- package/src/providers/model-discovery-limits.ts +16 -0
- package/src/providers/model-discovery.ts +115 -22
- package/src/providers/model-presets.ts +119 -0
- package/src/providers/model-rename-migration.ts +255 -0
- package/src/providers/model-rename-startup.ts +28 -0
- package/src/providers/new-model-policy.ts +146 -0
- package/src/providers/openai-sidecar.ts +72 -4
- package/src/providers/openai-tier-startup.ts +31 -2
- package/src/providers/openai-tiers.ts +119 -4
- package/src/providers/openai-virtual-models.ts +1 -0
- package/src/providers/opencode-zen-rate-limit.ts +102 -0
- package/src/providers/provider-id-rewrite.ts +30 -0
- package/src/providers/quota.ts +1379 -40
- package/src/providers/registry.ts +1545 -112
- package/src/providers/request-pacing.ts +310 -0
- package/src/providers/service-tier.ts +277 -0
- package/src/providers/slug-codec.ts +94 -6
- package/src/providers/static-model-discovery.ts +86 -0
- package/src/providers/xai-responses-opt-in.ts +15 -0
- package/src/providers/xai-transport.ts +32 -4
- package/src/reasoning-effort.ts +68 -3
- package/src/responses/apply-patch-envelope.ts +63 -0
- package/src/responses/code-mode-helper-compat.ts +50 -0
- package/src/responses/compaction.ts +26 -1
- package/src/responses/custom-tool-compat.ts +384 -0
- package/src/responses/hosted-tool-policy.ts +9 -0
- package/src/responses/namespace-tool-compat.ts +435 -0
- package/src/responses/parser.ts +225 -38
- package/src/responses/provider-continuation.ts +98 -0
- package/src/responses/provider-opaque-metadata.ts +73 -0
- package/src/responses/reasoning-envelope.ts +9 -1
- package/src/responses/reasoning-replay-cache.ts +504 -0
- package/src/responses/schema.ts +12 -2
- package/src/responses/spill-store.ts +75 -10
- package/src/responses/state.ts +659 -31
- package/src/responses/thought-signature-replay.ts +364 -0
- package/src/responses/tool-search-compat.ts +301 -0
- package/src/responses/truncated-stop-reason.ts +60 -0
- package/src/responses/turn-termination.ts +107 -0
- package/src/router.ts +405 -31
- package/src/routing/analytics.ts +379 -0
- package/src/routing/capability.ts +244 -0
- package/src/routing/compatibility/assemble.ts +73 -0
- package/src/routing/compatibility/behavior.ts +278 -0
- package/src/routing/compatibility/catalog.ts +99 -0
- package/src/routing/compatibility/endpoint.ts +52 -0
- package/src/routing/compatibility/lab-evidence-provider.ts +130 -0
- package/src/routing/compatibility/policy.ts +181 -0
- package/src/routing/compatibility/provider-slot.ts +56 -0
- package/src/routing/compatibility/reader.ts +110 -0
- package/src/routing/compatibility/subject.ts +191 -0
- package/src/routing/compatibility/types.ts +64 -0
- package/src/routing/compatibility/version.ts +104 -0
- package/src/routing/cost.ts +77 -0
- package/src/routing/evaluator.ts +495 -0
- package/src/routing/health.ts +412 -0
- package/src/routing/history/cursor.ts +43 -0
- package/src/routing/history/indexer.ts +605 -0
- package/src/routing/history/schema.ts +72 -0
- package/src/routing/profile-namespace.ts +15 -0
- package/src/routing/profile.ts +547 -0
- package/src/routing/quota.ts +155 -0
- package/src/routing/request-evidence.ts +45 -0
- package/src/routing/trace.ts +776 -0
- package/src/server/adapter-resolve.ts +2 -29
- package/src/server/auth-cors.ts +289 -48
- package/src/server/background-lifecycle.ts +182 -0
- package/src/server/chat-completions.ts +154 -72
- package/src/server/chat-native-sse.ts +331 -0
- package/src/server/chat-native.ts +445 -0
- package/src/server/claude-messages.ts +160 -44
- package/src/server/direct-local-http.ts +347 -0
- package/src/server/effort-policy.ts +18 -0
- package/src/server/github-copilot-responses-repair.ts +338 -0
- package/src/server/gui-static.ts +39 -10
- package/src/server/images.ts +94 -12
- package/src/server/index.ts +1021 -190
- package/src/server/lifecycle.ts +336 -14
- package/src/server/live.ts +136 -17
- package/src/server/local-management-read-client.ts +90 -0
- package/src/server/local-provider-reload-client.ts +137 -0
- package/src/server/management/agent-settings-routes.ts +433 -116
- package/src/server/management/api-key-usage.ts +31 -5
- package/src/server/management/body.ts +6 -0
- package/src/server/management/codex-prompt-routes.ts +570 -0
- package/src/server/management/combo-routes.ts +64 -25
- package/src/server/management/config-routes.ts +511 -51
- package/src/server/management/context.ts +89 -2
- package/src/server/management/integration-routes.ts +498 -0
- package/src/server/management/lab-automation-routes.ts +206 -0
- package/src/server/management/lab-routes.ts +563 -0
- package/src/server/management/logs-usage-routes.ts +127 -52
- package/src/server/management/model-routes.ts +461 -133
- package/src/server/management/model-rows.ts +167 -0
- package/src/server/management/native-integration-routes.ts +770 -0
- package/src/server/management/oauth-account-routes.ts +90 -8
- package/src/server/management/provider-capability-config.ts +48 -0
- package/src/server/management/provider-routes.ts +836 -159
- package/src/server/management/request-history-routes.ts +191 -0
- package/src/server/management/route-registry.ts +332 -0
- package/src/server/management/routing-analytics-routes.ts +74 -0
- package/src/server/management/routing-profile-routes.ts +380 -0
- package/src/server/management/shared.ts +27 -11
- package/src/server/management/sidebar-routes.ts +47 -31
- package/src/server/management/storage-log-guard-routes.ts +186 -0
- package/src/server/management/sync-response.ts +69 -0
- package/src/server/management/system-restart.ts +289 -33
- package/src/server/management/system-routes.ts +77 -0
- package/src/server/management/usage-summary-cache.ts +9 -1
- package/src/server/management/vision-sidecar-options.ts +167 -0
- package/src/server/management/web-search-sidecar-options.ts +120 -0
- package/src/server/management-api.ts +126 -23
- package/src/server/management-auth.ts +220 -5
- package/src/server/passive-route-linker.ts +66 -0
- package/src/server/port-reclaim.ts +1 -1
- package/src/server/ports.ts +41 -1
- package/src/server/proxy-liveness.ts +161 -10
- package/src/server/readiness.ts +99 -0
- package/src/server/relay-eager.ts +221 -54
- package/src/server/relay.ts +479 -87
- package/src/server/request-decompress.ts +113 -6
- package/src/server/request-log-conversation.ts +51 -0
- package/src/server/request-log.ts +298 -31
- package/src/server/responses/agent-task-recovery-cache.ts +143 -0
- package/src/server/responses/agent-task-recovery.ts +465 -0
- package/src/server/responses/codex-auth-error.ts +55 -0
- package/src/server/responses/collaboration.ts +239 -36
- package/src/server/responses/combo-stream-preflight.ts +178 -0
- package/src/server/responses/compact.ts +444 -72
- package/src/server/responses/core.ts +3579 -436
- package/src/server/responses/empty-completion-guard.ts +333 -0
- package/src/server/responses/encrypted-payload.ts +62 -39
- package/src/server/responses/fetch-helpers.ts +89 -99
- package/src/server/responses/input-admission.ts +187 -0
- package/src/server/responses/pacing-overload.ts +13 -0
- package/src/server/responses/passthrough-error.ts +33 -9
- package/src/server/responses/policy-fallback.ts +178 -0
- package/src/server/responses/responses-field-backfill.ts +343 -0
- package/src/server/responses/terminal-guard.ts +26 -5
- package/src/server/responses/upstream-error.ts +5 -0
- package/src/server/responses/ws-upstream.ts +381 -0
- package/src/server/responses-custom-tool-repair.ts +363 -0
- package/src/server/responses-item-id-repair.ts +54 -6
- package/src/server/responses-json-events.ts +90 -0
- package/src/server/responses-model-rewrite.ts +29 -0
- package/src/server/responses-reasoning-summary-rewrite.ts +178 -0
- package/src/server/responses-snapshot-repair.ts +621 -0
- package/src/server/responses-terminal-repair.ts +363 -0
- package/src/server/responses-tool-search-repair.ts +267 -0
- package/src/server/responses-undeclared-tool-guard.ts +376 -0
- package/src/server/responses.ts +18 -2
- package/src/server/search.ts +78 -13
- package/src/server/sse-frame-buffer.ts +319 -0
- package/src/server/sse-payload-rewrite.ts +110 -22
- package/src/server/startup-action-control.ts +8 -1
- package/src/server/startup-health-cache.ts +19 -1
- package/src/server/system-env.ts +80 -9
- package/src/server/ws-bridge.ts +53 -40
- package/src/service-manager-probe.ts +892 -0
- package/src/service.ts +1153 -94
- package/src/sidecar/auth.ts +92 -0
- package/src/sidecar/candidates.ts +83 -0
- package/src/storage/cleanup.ts +2 -2
- package/src/storage/policy-job.ts +14 -4
- package/src/storage/policy.ts +88 -23
- package/src/storage/scanner.ts +1 -1
- package/src/storage/worker-lifecycle.ts +14 -14
- package/src/tray/windows-tray.ps1 +83 -9
- package/src/tray/windows.ts +43 -16
- package/src/types/accounts.ts +37 -0
- package/src/types/config.ts +911 -0
- package/src/types/provider.ts +614 -0
- package/src/types/request.ts +397 -0
- package/src/types/tools.ts +236 -0
- package/src/types/wire.ts +80 -0
- package/src/types.ts +107 -1237
- package/src/update/index.ts +37 -23
- package/src/update/job.ts +445 -68
- package/src/update/notify.ts +12 -6
- package/src/update/npm-cache-preflight.d.mts +47 -0
- package/src/update/npm-cache-preflight.mjs +201 -0
- package/src/update/transactional-install.d.mts +22 -0
- package/src/update/transactional-install.mjs +266 -0
- package/src/usage/cost.ts +0 -0
- package/src/usage/expected-prices.ts +287 -16
- package/src/usage/log.ts +666 -50
- package/src/usage/summary.ts +388 -17
- package/src/usage/user-cost-overlay-reconciler.ts +313 -0
- package/src/usage/user-cost-overlays.ts +314 -0
- package/src/vision/anthropic-describe.ts +10 -6
- package/src/vision/backends.ts +97 -0
- package/src/vision/describe.ts +27 -16
- package/src/vision/eligibility.ts +250 -0
- package/src/vision/index.ts +238 -24
- package/src/vision/reasoning.ts +55 -0
- package/src/vision/routed-describe.ts +175 -0
- package/src/vision/timeout-bounds.ts +9 -0
- package/src/web-search/anthropic-executor.ts +13 -7
- package/src/web-search/backends.ts +108 -0
- package/src/web-search/exa-executor.ts +119 -0
- package/src/web-search/executor.ts +21 -6
- package/src/web-search/gemini-executor.ts +141 -0
- package/src/web-search/index.ts +150 -15
- package/src/web-search/loop.ts +284 -54
- package/src/web-search/parse.ts +125 -30
- package/src/web-search/sources.ts +60 -0
- package/src/web-search/xai-executor.ts +219 -0
- package/gui/dist/assets/index-DTpMHS4F.js +0 -67
- package/gui/dist/assets/index-ZNVDE3C7.css +0 -1
- package/gui/dist/provider-icons/antigravity.svg +0 -1
- package/gui/dist/provider-icons/claude.svg +0 -1
- package/gui/dist/provider-icons/copilot.svg +0 -1
- package/gui/dist/provider-icons/cursor.svg +0 -2
- package/gui/dist/provider-icons/gemini.svg +0 -1
- package/gui/dist/provider-icons/grok-color.svg +0 -1
- package/gui/dist/provider-icons/kiro.svg +0 -14
- package/src/cli/internal-dispatch.ts +0 -20
|
@@ -0,0 +1,614 @@
|
|
|
1
|
+
import type { UpstreamHttpVersion, ReasoningSummaryDelivery, CodexAccountMode } from "./wire";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Per-provider proactive-refresh policy. The guardian only ever touches a provider whose EFFECTIVE
|
|
5
|
+
* policy is "proactive"; "lazy-only" keeps today's on-demand refresh, "disabled" forbids the
|
|
6
|
+
* guardian entirely (used for providers whose ToS actively enforces against non-official-client
|
|
7
|
+
* token traffic, e.g. Anthropic subscription OAuth). See devlog 260703_oauth-multi-account-refresh-and-tos.
|
|
8
|
+
*/
|
|
9
|
+
export type RefreshPolicy = "proactive" | "lazy-only" | "disabled";
|
|
10
|
+
|
|
11
|
+
export interface OpenRouterProviderRouting {
|
|
12
|
+
/** OpenRouter provider slugs to try first, in priority order. */
|
|
13
|
+
order?: string[];
|
|
14
|
+
/** Restrict routing to these OpenRouter provider slugs. */
|
|
15
|
+
only?: string[];
|
|
16
|
+
/** Whether OpenRouter may use providers outside `order`. Defaults to OpenRouter's policy. */
|
|
17
|
+
allowFallbacks?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface ResponsesItemIdRepairConfig {
|
|
21
|
+
/** Exact `message` item ids that the proxy should rewrite to request-local canonical ids. */
|
|
22
|
+
message?: string[];
|
|
23
|
+
/** Exact `reasoning` item ids that the proxy should rewrite to request-local canonical ids. */
|
|
24
|
+
reasoning?: string[];
|
|
25
|
+
/** Backfill missing `output_item.done` / terminal snapshot ids from the matching output_index. */
|
|
26
|
+
repairMissingTerminalIds?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Treat existing message/reasoning ids without the canonical `msg_`/`rs_` prefix (e.g. bare
|
|
29
|
+
* UUIDs from DeepSeek's Responses route) as invalid and mint canonical replacements (#938).
|
|
30
|
+
* function_call ids and call_id pairing are never rewritten.
|
|
31
|
+
*/
|
|
32
|
+
repairInvalidIds?: boolean;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Same-target 429 wait-and-retry policy (`providers.<name>.retryOn429`). When present and not
|
|
37
|
+
* explicitly disabled, the proxy waits and replays the identical request on the same key before
|
|
38
|
+
* any key failover. All fields optional; the runtime applies defaults (attempts=3,
|
|
39
|
+
* intervalMs=5000, maxIntervalMs=60000, respectRetryAfter=true, enabled=true).
|
|
40
|
+
*/
|
|
41
|
+
export interface RateLimitRetryPolicy {
|
|
42
|
+
/** Master switch. The presence of the object also enables the policy (default true). */
|
|
43
|
+
enabled?: boolean;
|
|
44
|
+
/** Extra replay attempts after the first 429 (1..20, default 3). */
|
|
45
|
+
attempts?: number;
|
|
46
|
+
/** Fixed wait between attempts when the upstream sends no usable Retry-After (default 5000). */
|
|
47
|
+
intervalMs?: number;
|
|
48
|
+
/** Cap for any single wait, including an upstream Retry-After (default 60000). */
|
|
49
|
+
maxIntervalMs?: number;
|
|
50
|
+
/** Prefer the upstream Retry-After header when present and parseable (default true). */
|
|
51
|
+
respectRetryAfter?: boolean;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* User-configured display price for one model (USD per 1M tokens).
|
|
56
|
+
* Mirrors the `Cost4` shape used by the usage cost estimator; structurally
|
|
57
|
+
* compatible so config rows can be lifted directly into price overlays.
|
|
58
|
+
*/
|
|
59
|
+
export interface ProviderCostOverlay {
|
|
60
|
+
input: number;
|
|
61
|
+
output: number;
|
|
62
|
+
cacheRead: number;
|
|
63
|
+
cacheWrite: number;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface RequestPacingRule {
|
|
67
|
+
/** Evenly spread request starts to this many requests per minute. */
|
|
68
|
+
requestsPerMinute?: number;
|
|
69
|
+
/** Minimum delay between request starts. The slower configured value wins. */
|
|
70
|
+
minIntervalMs?: number;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface ProviderRequestPacingConfig extends RequestPacingRule {
|
|
74
|
+
/** False preserves legacy behavior with no client-side waiting. */
|
|
75
|
+
enabled: boolean;
|
|
76
|
+
/** Exact upstream model-id overrides; other models inherit the provider rule. */
|
|
77
|
+
models?: Record<string, RequestPacingRule>;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface FastWire {
|
|
81
|
+
kind: "service-tier" | "anthropic-speed";
|
|
82
|
+
/** Canonical tier name to upstream wire spelling. */
|
|
83
|
+
canonicalToWire: Readonly<Record<string, string>>;
|
|
84
|
+
/** Policy for non-canonical caller-provided tier values. */
|
|
85
|
+
foreignCallerTiers: "verbatim" | "drop";
|
|
86
|
+
/** Anthropic speed headers/betas reserved for the later wire implementation. */
|
|
87
|
+
betas?: readonly string[];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Durable per-attempt service-tier fact produced at the adapter serialization boundary. */
|
|
91
|
+
export interface AttemptTierOutcome {
|
|
92
|
+
canonical?: "priority";
|
|
93
|
+
wireKind?: FastWire["kind"] | null;
|
|
94
|
+
wireValue?: string | null;
|
|
95
|
+
fastOutcome: "not-requested" | "applied" | "downgraded" | "unknown";
|
|
96
|
+
fastDowngradeReason?: "route-unsupported" | "wire-unavailable" | "response-declined";
|
|
97
|
+
callerTierDropped?: boolean;
|
|
98
|
+
callerFastSuppressedByConfig?: boolean;
|
|
99
|
+
confirmation: "confirmed" | "assumed" | "downgraded" | "unknown";
|
|
100
|
+
responseServiceTier?: string;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Request-local observation inputs captured before the final tier action mutates the parsed view.
|
|
105
|
+
* This is not persisted; the final adapter turns it into AttemptTierOutcome after serialization.
|
|
106
|
+
*/
|
|
107
|
+
export interface TierObservationContext {
|
|
108
|
+
capability: boolean | undefined;
|
|
109
|
+
eligibility:
|
|
110
|
+
| "eligible"
|
|
111
|
+
| "capability-unsupported"
|
|
112
|
+
| "unclassified"
|
|
113
|
+
| "wire-unavailable"
|
|
114
|
+
| "pin-unavailable";
|
|
115
|
+
fastWire: FastWire | null;
|
|
116
|
+
demandDecision: "force-fast" | "force-default" | "inherit";
|
|
117
|
+
callerTier?: string;
|
|
118
|
+
/**
|
|
119
|
+
* Whether the destination's echoed `service_tier` is authoritative about Fast scheduling.
|
|
120
|
+
*
|
|
121
|
+
* The ChatGPT-internal Codex backend returns `service_tier: "default"` on turns that were in
|
|
122
|
+
* fact scheduled as priority, so treating its echo as a downgrade produced a false
|
|
123
|
+
* `response-declined` on every Fast request (#2558). Absent means "assume authoritative",
|
|
124
|
+
* preserving the behaviour for the public API where the echo does mean what it says.
|
|
125
|
+
*/
|
|
126
|
+
responseTierAuthoritative?: boolean;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export type TierDecision =
|
|
130
|
+
| { readonly kind: "forward-caller" }
|
|
131
|
+
| { readonly kind: "drop" }
|
|
132
|
+
| { readonly kind: "set"; readonly value: string };
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* One configured provider entry. `authMode` (default `"key"`) decides whether same-target 429
|
|
136
|
+
* retries are allowed; OAuth/forward credentials and local runtimes are never replayed.
|
|
137
|
+
*/
|
|
138
|
+
export interface OcxProviderConfig {
|
|
139
|
+
/** Optional short provider namespace used only at request/catalog presentation time. */
|
|
140
|
+
alias?: string;
|
|
141
|
+
/** Native model id -> short, slash-free request alias. */
|
|
142
|
+
modelAliases?: Record<string, string>;
|
|
143
|
+
/** Override the global built-in model-alias switch for this provider. */
|
|
144
|
+
defaultAliases?: boolean;
|
|
145
|
+
adapter: string;
|
|
146
|
+
/**
|
|
147
|
+
* Codex tool calling mode for routed models.
|
|
148
|
+
* "code_mode_only" (default) sets entry.tool_mode = "code_mode_only" (unified exec helper tool).
|
|
149
|
+
* "shell" leaves tool_mode unset so Codex declares top-level shell tools (exec_command).
|
|
150
|
+
*/
|
|
151
|
+
codexToolMode?: "code_mode_only" | "shell";
|
|
152
|
+
/** Optional outbound request-start pacing shared by this provider and its model overrides. */
|
|
153
|
+
requestPacing?: ProviderRequestPacingConfig;
|
|
154
|
+
/** Cursor MCP compatibility bounds; positive integers when configured. */
|
|
155
|
+
mcpMaxTools?: number;
|
|
156
|
+
mcpMaxSchemaBytes?: number;
|
|
157
|
+
mcpMaxResultBytes?: number;
|
|
158
|
+
/**
|
|
159
|
+
* Per-model wire override, keyed by the upstream native model id (after namespace
|
|
160
|
+
* and combo resolution). A single gateway can front models that speak different
|
|
161
|
+
* wires — Grok needs the Responses API for hosted web_search while a sibling model
|
|
162
|
+
* is fine on chat completions (#404).
|
|
163
|
+
*
|
|
164
|
+
* Only OpenAI-shaped wires may be selected; see MODEL_ADAPTER_OVERRIDE_ALLOWED.
|
|
165
|
+
* Absent or empty means the provider-wide `adapter` applies to everything, exactly
|
|
166
|
+
* as before.
|
|
167
|
+
*/
|
|
168
|
+
modelAdapters?: Record<string, string>;
|
|
169
|
+
/**
|
|
170
|
+
* Fast-wire declaration. `null` explicitly disables adapter-derived defaults;
|
|
171
|
+
* absence derives from the final model adapter.
|
|
172
|
+
*/
|
|
173
|
+
fastWire?: FastWire | null;
|
|
174
|
+
baseUrl: string;
|
|
175
|
+
/**
|
|
176
|
+
* Optional relative resource path for key-auth openai-responses requests. Must start with `/`
|
|
177
|
+
* and must not include a URL scheme, query string, or fragment. When omitted, the adapter keeps
|
|
178
|
+
* the legacy `/v1/responses` construction.
|
|
179
|
+
*/
|
|
180
|
+
responsesPath?: string;
|
|
181
|
+
/**
|
|
182
|
+
* Command Code protocol version sent as `x-command-code-version` on /alpha/generate requests.
|
|
183
|
+
* The internal endpoint's schema drifts with the CLI version; operators can pin a known-good
|
|
184
|
+
* version here instead of waiting for a code change. Absent uses the adapter's current default.
|
|
185
|
+
*/
|
|
186
|
+
commandCodeVersion?: string;
|
|
187
|
+
/**
|
|
188
|
+
* Responses upstream that stores nothing server-side (DeepSeek documents "the API
|
|
189
|
+
* is stateless"). Stateful request parameters are dropped, `store` is pinned false,
|
|
190
|
+
* and orphaned tool results left by a replay miss are repaired rather than
|
|
191
|
+
* forwarded to an upstream that cannot resolve their pair.
|
|
192
|
+
*/
|
|
193
|
+
statelessResponses?: boolean;
|
|
194
|
+
/**
|
|
195
|
+
* Responses upstream whose parser requires an unambiguous call batch and its matched
|
|
196
|
+
* result batch to remain contiguous. Hook-injected context that splits the batch is
|
|
197
|
+
* preserved after it, and parallel calls stay together with the reasoning turn that produced them.
|
|
198
|
+
*/
|
|
199
|
+
requiresAdjacentResponsesToolResults?: boolean;
|
|
200
|
+
/**
|
|
201
|
+
* Provider fallback for canonical Fast capability over an OpenAI `service_tier` wire.
|
|
202
|
+
* This pure tri-state feeds catalog publication, routing eligibility, compatibility
|
|
203
|
+
* fingerprints, and proxy-owned canonical Fast injection on both Responses and Chat routes.
|
|
204
|
+
* Tri-state: `true` lets fast mode inject/remove the canonical field; `false` strips it and
|
|
205
|
+
* never injects, because an upstream documented as not supporting the parameter
|
|
206
|
+
* must not receive it; absent (`undefined`) leaves the provider unclassified — fast mode never
|
|
207
|
+
* injects or translates, and caller values pass only under the final wire's forwarding permission.
|
|
208
|
+
* On Chat, that CallerTierForward permission is `chatServiceTier`; Responses retains passthrough.
|
|
209
|
+
* An explicit config value always wins over the registry default.
|
|
210
|
+
*/
|
|
211
|
+
supportsServiceTier?: boolean;
|
|
212
|
+
/** Exact upstream model ids that override the provider-level service-tier capability. */
|
|
213
|
+
modelSupportsServiceTier?: Record<string, boolean>;
|
|
214
|
+
/**
|
|
215
|
+
* Responses upstream whose native contract accepts plaintext reasoning replay
|
|
216
|
+
* (DeepSeek documents reasoning items with plaintext content). When set, the
|
|
217
|
+
* passthrough serializer keeps `reasoning_text` content on replayed reasoning
|
|
218
|
+
* items instead of blanking it the way the ChatGPT backend requires; proxy-minted
|
|
219
|
+
* `ocxr1` envelopes are still stripped because no upstream can decrypt them.
|
|
220
|
+
*/
|
|
221
|
+
preserveResponsesReasoningContent?: boolean;
|
|
222
|
+
/**
|
|
223
|
+
* Explicit opt-in for a relay that genuinely fronts OpenAI and can decode native
|
|
224
|
+
* compaction blobs. Absent or false degrades foreign blobs to an opaque note.
|
|
225
|
+
*/
|
|
226
|
+
decodesNativeCompactionBlobs?: boolean;
|
|
227
|
+
/**
|
|
228
|
+
* Explicit opt-in for non-registry private-network destinations such as localhost, RFC1918,
|
|
229
|
+
* link-local, or unique-local upstreams. Metadata endpoints remain blocked.
|
|
230
|
+
*/
|
|
231
|
+
allowPrivateNetwork?: boolean;
|
|
232
|
+
/**
|
|
233
|
+
* Pin the HTTP version used for upstream provider requests. Bun's fetch negotiates
|
|
234
|
+
* HTTP/2 via TLS ALPN by default; some Cloudflare-fronted SSE endpoints hang on
|
|
235
|
+
* HTTP/2 streaming responses (issue #1668). "http1.1" / "h1" forces HTTP/1.1,
|
|
236
|
+
* "http2" / "h2" forces HTTP/2. Absent or "auto" keeps Bun's default negotiation
|
|
237
|
+
* (current behavior unchanged). Only meaningful for https: base URLs.
|
|
238
|
+
*/
|
|
239
|
+
upstreamHttpVersion?: UpstreamHttpVersion;
|
|
240
|
+
/**
|
|
241
|
+
* Google only. When `false`, the AI Studio (direct) path sends Gemini Flash ids
|
|
242
|
+
* unchanged to the wire instead of applying the `-tiered` suffix (`gemini-3.7-flash`
|
|
243
|
+
* -> `gemini-3.7-flash-tiered`). Set this to `false` when the configured upstream still
|
|
244
|
+
* serves the bare ids. Absent (default) keeps the rename.
|
|
245
|
+
*/
|
|
246
|
+
directGeminiWireRenames?: boolean;
|
|
247
|
+
/** Keep provider settings on disk but exclude it from routing and model/catalog listings. */
|
|
248
|
+
disabled?: boolean;
|
|
249
|
+
/**
|
|
250
|
+
* Codex account-selection mode. Valid ONLY on the canonical built-in `openai` forward provider.
|
|
251
|
+
* "pool" (default) rotates main + added Codex accounts through the affinity/quota/cooldown/
|
|
252
|
+
* failover engine; "direct" pins the caller's main Codex login and never touches pool state.
|
|
253
|
+
*/
|
|
254
|
+
codexAccountMode?: CodexAccountMode;
|
|
255
|
+
apiKey?: string;
|
|
256
|
+
/**
|
|
257
|
+
* Key-auth header style for Anthropic-compatible providers.
|
|
258
|
+
* Defaults to the native Anthropic `x-api-key`; gateways may require
|
|
259
|
+
* `Authorization: Bearer <key>` instead.
|
|
260
|
+
*/
|
|
261
|
+
apiKeyTransport?: "x-api-key" | "bearer";
|
|
262
|
+
/**
|
|
263
|
+
* Multi-key pool (API-key twin of OAuth multiauth). `apiKey` always mirrors the ACTIVE
|
|
264
|
+
* entry so routing stays single-key; managed via /api/providers/keys. A legacy bare
|
|
265
|
+
* `apiKey` seeds a one-entry pool on first management touch.
|
|
266
|
+
*/
|
|
267
|
+
apiKeyPool?: Array<{ id: string; key: string; label?: string; addedAt?: number }>;
|
|
268
|
+
defaultModel?: string;
|
|
269
|
+
models?: string[];
|
|
270
|
+
/**
|
|
271
|
+
* Fetch the provider's live `/models` endpoint. Defaults to true.
|
|
272
|
+
* Set false when `models` is an intentional allowlist or a provider's live catalog is too large
|
|
273
|
+
* or too flaky for startup/catalog sync.
|
|
274
|
+
*/
|
|
275
|
+
liveModels?: boolean;
|
|
276
|
+
/**
|
|
277
|
+
* Per-provider catalog allowlist. When non-empty, ONLY these model ids are emitted to Codex's
|
|
278
|
+
* catalog and `/v1/models` — live discovery still runs, this just narrows what ships (so a proxy
|
|
279
|
+
* exposing thousands of models, or an aggregator like OpenRouter, doesn't bloat the catalog).
|
|
280
|
+
* Empty/undefined = expose all. The admin `/api/models` list is unaffected (it always shows the
|
|
281
|
+
* full set so the user can pick). See devlog issue_052_provider-model-allowlist.
|
|
282
|
+
*/
|
|
283
|
+
selectedModels?: string[];
|
|
284
|
+
/** Override for newly discovered models. Absent/"inherit" uses the install policy. */
|
|
285
|
+
newModelPolicy?: "on" | "off" | "inherit";
|
|
286
|
+
/**
|
|
287
|
+
* Model-preset marker for `selectedModels` (#2465). Absent means "all", exactly today's
|
|
288
|
+
* semantics — an existing provider is never narrowed by an upgrade.
|
|
289
|
+
*
|
|
290
|
+
* The preset is a SEED, not a lock: `selectedModels` holds concrete ids materialized from
|
|
291
|
+
* the shipped rules, so every existing consumer and older binaries keep working against a
|
|
292
|
+
* plain allowlist. Divergence is detected at the WRITE path rather than by diffing — any user
|
|
293
|
+
* edit while the mode is "preset" flips it to "custom", after which the proxy never
|
|
294
|
+
* re-materializes. That collapses upgrade reconciliation to a version compare.
|
|
295
|
+
*
|
|
296
|
+
* Deliberately distinct from `deriveProviderPresets`, which curates WHICH PROVIDERS to offer.
|
|
297
|
+
* This curates which MODELS a provider exposes; the code says "model preset" throughout.
|
|
298
|
+
*/
|
|
299
|
+
modelPreset?: {
|
|
300
|
+
mode: "preset" | "all" | "custom";
|
|
301
|
+
/** MODEL_PRESETS version materialized into `selectedModels`. */
|
|
302
|
+
appliedVersion?: number;
|
|
303
|
+
appliedAt?: string;
|
|
304
|
+
/**
|
|
305
|
+
* Set when materialization matched nothing and the provider fell back to "all". A preset
|
|
306
|
+
* must never write an empty allowlist, because empty means ALL and would silently
|
|
307
|
+
* un-curate; the fallback marker lets the next convergence retry.
|
|
308
|
+
*/
|
|
309
|
+
fallback?: "preset-empty";
|
|
310
|
+
};
|
|
311
|
+
/** Provider-wide fallback when context metadata is absent; otherwise caps the reported window. */
|
|
312
|
+
contextWindow?: number;
|
|
313
|
+
/** Per-model fallback when context metadata is absent; otherwise caps the reported window. */
|
|
314
|
+
modelContextWindows?: Record<string, number>;
|
|
315
|
+
/** Model-specific Codex catalog input modalities, e.g. ["text"] or ["text", "image"]. */
|
|
316
|
+
modelInputModalities?: Record<string, string[]>;
|
|
317
|
+
/** Model-specific max input token limits. Values cap auto_compact_token_limit. */
|
|
318
|
+
modelMaxInputTokens?: Record<string, number>;
|
|
319
|
+
/**
|
|
320
|
+
* Per-model soft compaction budgets. Values may only lower the effective
|
|
321
|
+
* context/max-input envelope; they never raise hard admission limits.
|
|
322
|
+
*/
|
|
323
|
+
modelAutoCompactTokenLimits?: Record<string, number>;
|
|
324
|
+
/**
|
|
325
|
+
* Provider-wide fallback for chat-completions `max_tokens` when the caller omits
|
|
326
|
+
* Responses `max_output_tokens`. Adapters still let an explicit request win.
|
|
327
|
+
*/
|
|
328
|
+
defaultMaxOutputTokens?: number;
|
|
329
|
+
/** Model-specific fallback output token budgets. Exact/model-pattern entries beat the provider default. */
|
|
330
|
+
modelMaxOutputTokens?: Record<string, number>;
|
|
331
|
+
/**
|
|
332
|
+
* Per-model display prices (USD per 1M tokens) keyed by exact model id —
|
|
333
|
+
* opencode-style per-model pricing in ocx's flat `modelXxx` convention:
|
|
334
|
+
* `{ "deepseek-v4-flash": { "input": 0.14, "output": 0.28, "cacheRead": 0.0028, "cacheWrite": 0 } }`.
|
|
335
|
+
* User-configured prices win over the built-in jawcode/expected catalogs in
|
|
336
|
+
* the Logs `~$` estimate. Display-time estimation only; never billing. An
|
|
337
|
+
* all-zero entry means "not billable here" and falls through to the catalogs.
|
|
338
|
+
*/
|
|
339
|
+
modelCosts?: Record<string, ProviderCostOverlay>;
|
|
340
|
+
headers?: Record<string, string>;
|
|
341
|
+
/** Default provider-routing preferences for models sent through the canonical OpenRouter API. */
|
|
342
|
+
openRouterRouting?: OpenRouterProviderRouting;
|
|
343
|
+
/** Exact model-id overrides for `openRouterRouting`. Each matching entry replaces the default. */
|
|
344
|
+
modelOpenRouterRouting?: Record<string, OpenRouterProviderRouting>;
|
|
345
|
+
/**
|
|
346
|
+
* "key" (default): authenticate upstream with `apiKey`.
|
|
347
|
+
* "forward": relay the caller's incoming auth headers verbatim (OAuth passthrough; gpt only).
|
|
348
|
+
* "oauth": resolve a stored OAuth access token (auto-refreshed) and use it as the Bearer key.
|
|
349
|
+
* Only the openai-responses adapter implements "forward"; openai-chat uses its own key/token.
|
|
350
|
+
* "local": local runtime (Ollama etc.) — no remote key required. Valid only for
|
|
351
|
+
* providers whose registry entry declares authKind "local" (management API enforces).
|
|
352
|
+
*/
|
|
353
|
+
authMode?: "key" | "forward" | "oauth" | "local";
|
|
354
|
+
/**
|
|
355
|
+
* Per-provider override for generic OAuth multi-account 429 failover (#2568).
|
|
356
|
+
*
|
|
357
|
+
* Rotation is presence-driven by default — 2+ logged-in accounts activate it — so this exists
|
|
358
|
+
* for the operator who accepts rotation on one provider and refuses it on another. An explicit
|
|
359
|
+
* boolean here beats the global `oauthAccountFailover` and beats presence.
|
|
360
|
+
*/
|
|
361
|
+
oauthAccountFailover?: {
|
|
362
|
+
enabled?: boolean;
|
|
363
|
+
};
|
|
364
|
+
/** Allow an explicitly key/oauth provider to run without a credential (for keyless local proxies). */
|
|
365
|
+
keyOptional?: boolean;
|
|
366
|
+
/**
|
|
367
|
+
* Free-tier pricing flag for UI/catalog (Free badge, Free filter). Not the same as
|
|
368
|
+
* `keyOptional` — free tiers may still require an API key (e.g. NVIDIA NIM free credits).
|
|
369
|
+
*/
|
|
370
|
+
freeTier?: boolean;
|
|
371
|
+
/** Optional human note shown in the providers UI (not used for routing). */
|
|
372
|
+
note?: string;
|
|
373
|
+
/** Strip one trailing bracketed suffix from model ids before sending them upstream. */
|
|
374
|
+
modelSuffixBracketStrip?: boolean;
|
|
375
|
+
/**
|
|
376
|
+
* Override the guardian's proactive-refresh policy for this provider. When unset, the provider's
|
|
377
|
+
* built-in risk-tiered default applies (see OAUTH_PROVIDERS in src/oauth/index.ts). Set "proactive"
|
|
378
|
+
* to opt this provider into background refresh; "disabled"/"lazy-only" to forbid/limit it.
|
|
379
|
+
*/
|
|
380
|
+
refreshPolicy?: RefreshPolicy;
|
|
381
|
+
/**
|
|
382
|
+
* Provider-wide Codex-visible reasoning tiers for routed models. Use only Codex-supported labels
|
|
383
|
+
* here (`low`, `medium`, `high`, `xhigh`, `max`); translate provider aliases with
|
|
384
|
+
* `reasoningEffortMap` / `modelReasoningEffortMap` below.
|
|
385
|
+
*/
|
|
386
|
+
reasoningEfforts?: string[];
|
|
387
|
+
/** Model-specific Codex-visible reasoning tiers. An empty array means “do not expose effort”. */
|
|
388
|
+
modelReasoningEfforts?: Record<string, string[]>;
|
|
389
|
+
/** Model-specific default Codex reasoning tier; must also be present in the visible tier list. */
|
|
390
|
+
modelDefaultReasoningEfforts?: Record<string, string>;
|
|
391
|
+
/**
|
|
392
|
+
* Model-specific Codex reasoning-summary capability. Set false when an OpenAI-compatible
|
|
393
|
+
* Responses backend rejects Codex summary-delivery fields for that model.
|
|
394
|
+
*/
|
|
395
|
+
modelSupportsReasoningSummaries?: Record<string, boolean>;
|
|
396
|
+
/**
|
|
397
|
+
* Model-specific Codex Responses verbosity capability. Set false when the upstream ignores
|
|
398
|
+
* `text.verbosity`; the catalog hides the no-op picker and the Responses adapter strips stale
|
|
399
|
+
* or caller-supplied values while preserving other `text` fields.
|
|
400
|
+
*/
|
|
401
|
+
modelSupportsVerbosity?: Record<string, boolean>;
|
|
402
|
+
/**
|
|
403
|
+
* Provider-wide Codex Responses verbosity capability, applied to models the per-model map
|
|
404
|
+
* does not enumerate (a live-discovered id, for example). Materialized from the registry at
|
|
405
|
+
* seed/enrich time so the catalog hint pass never has to read PROVIDER_REGISTRY.
|
|
406
|
+
*/
|
|
407
|
+
supportsVerbosity?: boolean;
|
|
408
|
+
/**
|
|
409
|
+
* Per-model wire value for Responses `stream_options.reasoning_summary_delivery`.
|
|
410
|
+
* Presence also advertises reasoning-summary support for that routed model.
|
|
411
|
+
*/
|
|
412
|
+
modelReasoningSummaryDelivery?: Record<string, ReasoningSummaryDelivery>;
|
|
413
|
+
/**
|
|
414
|
+
* Exact-model hosted tools that win collisions with Codex client tool declarations.
|
|
415
|
+
* Use for non-forward Responses gateways that reserve a hosted tool namespace server-side.
|
|
416
|
+
*/
|
|
417
|
+
modelPreferHostedTools?: Record<string, string[]>;
|
|
418
|
+
/**
|
|
419
|
+
* Whether the Responses upstream accepts OpenAI's extended hosted web_search fields.
|
|
420
|
+
* Set false only for a provider whose native contract rejects them; absence preserves
|
|
421
|
+
* passthrough compatibility for OpenAI and unclassified gateways.
|
|
422
|
+
*/
|
|
423
|
+
supportsOpenAiWebSearchToolFields?: boolean;
|
|
424
|
+
/**
|
|
425
|
+
* Whether the Responses upstream accepts native custom tools and custom_tool_call items.
|
|
426
|
+
* Set false only for a provider whose native contract rejects them; absence preserves
|
|
427
|
+
* apply_patch passthrough compatibility for OpenAI and unclassified gateways.
|
|
428
|
+
*/
|
|
429
|
+
supportsResponsesCustomTools?: boolean;
|
|
430
|
+
/**
|
|
431
|
+
* Provider-local repair for Responses gateways whose lifecycle snapshots omit canonical
|
|
432
|
+
* fields or closing events (#893). Disabled by default and applied only to client-facing
|
|
433
|
+
* SSE/JSON; raw inspection state remains authoritative.
|
|
434
|
+
*/
|
|
435
|
+
responsesSnapshotRepair?: boolean;
|
|
436
|
+
/** Provider-wide mapping from Codex effort labels to upstream `reasoning_effort` values. */
|
|
437
|
+
reasoningEffortMap?: Record<string, string>;
|
|
438
|
+
/** Model-specific mapping from Codex effort labels to upstream `reasoning_effort` values. */
|
|
439
|
+
modelReasoningEffortMap?: Record<string, Record<string, string>>;
|
|
440
|
+
/** OpenAI-compatible gateway reasoning wire shape. Default sends `reasoning_effort`. */
|
|
441
|
+
reasoningWireFormat?: "gateway-object";
|
|
442
|
+
/**
|
|
443
|
+
* Model ids that do NOT support a reasoning/thinking parameter. The openai-chat adapter drops
|
|
444
|
+
* reasoning_effort for these even when Codex selects a reasoning level (e.g. xAI grok-build-0.1).
|
|
445
|
+
*/
|
|
446
|
+
noReasoningModels?: string[];
|
|
447
|
+
/** Model ids that reject caller-specified temperature. */
|
|
448
|
+
noTemperatureModels?: string[];
|
|
449
|
+
/** Model ids that reject caller-specified top_p. */
|
|
450
|
+
noTopPModels?: string[];
|
|
451
|
+
/** Model ids that reject caller-specified presence/frequency penalty values. */
|
|
452
|
+
noPenaltyModels?: string[];
|
|
453
|
+
/**
|
|
454
|
+
* Model ids whose Chat Completions endpoint rejects `response_format`.
|
|
455
|
+
* Structured-output translation remains enabled by default; this is a narrow
|
|
456
|
+
* per-model compatibility escape hatch for mixed-capability gateways.
|
|
457
|
+
*/
|
|
458
|
+
noStructuredOutputModels?: string[];
|
|
459
|
+
/**
|
|
460
|
+
* Allow multiple tool calls per completion. DEFAULT-ON for openai-chat providers (the
|
|
461
|
+
* buffered stream parser assembles interleaved/fragmented multi-call turns safely);
|
|
462
|
+
* set `false` to force `parallel_tool_calls:false` upstream and drop the catalog's
|
|
463
|
+
* `supports_parallel_tool_calls` bit for that provider. Non-chat adapters advertise
|
|
464
|
+
* only on explicit `true`. See devlog/_plan/260709_parallel_tool_calls.
|
|
465
|
+
*/
|
|
466
|
+
parallelToolCalls?: boolean;
|
|
467
|
+
/**
|
|
468
|
+
* Opt-in: when `parallelToolCalls` is `false`, actually send `parallel_tool_calls: false`
|
|
469
|
+
* on the `/chat/completions` wire for this provider. By default an opted-out provider only
|
|
470
|
+
* OMITS the field (strict OpenAI-compatible hosts reject unknown knobs), and the NVIDIA NIM
|
|
471
|
+
* baseUrl is the sole built-in exception that pins the wire bit. Some self-hosted gateways
|
|
472
|
+
* (Kimi/GLM-family, vLLM, etc.) do honor `parallel_tool_calls` and keep emitting concurrent
|
|
473
|
+
* tool calls unless it is present; enable this to pin the bit without hardcoding their URL.
|
|
474
|
+
* No effect unless `parallelToolCalls === false`; ignored by non-`openai-chat` adapters.
|
|
475
|
+
*/
|
|
476
|
+
pinParallelToolCallsFalse?: boolean;
|
|
477
|
+
/**
|
|
478
|
+
* Opt-in: extend the no-tool-call terminal continuation guard to this provider's
|
|
479
|
+
* `openai-chat` routed turns. The guard (originally Anthropic-only, see
|
|
480
|
+
* devlog/_fin/260706_previous-response-id-400) issues one bounded internal re-ask when a
|
|
481
|
+
* model announces work but ends the turn without emitting a tool call. Self-hosted
|
|
482
|
+
* OpenAI-compatible gateways (GLM/Kimi-family, etc.) hit the same premature-completion
|
|
483
|
+
* pattern, but the heuristic that decides a "suspicious no-tool stop" was tuned on
|
|
484
|
+
* Anthropic turns, so it stays OFF by default for the many registry providers that share
|
|
485
|
+
* the `openai-chat` adapter. Enable only for a provider whose models are known to stop
|
|
486
|
+
* mid-work; non-`openai-chat` adapters ignore this flag.
|
|
487
|
+
*/
|
|
488
|
+
terminalContinuationGuard?: boolean;
|
|
489
|
+
/**
|
|
490
|
+
* Opt-in for OpenAI-compatible chat gateways that may close after emitting a complete
|
|
491
|
+
* tool-call delta without `finish_reason` or `[DONE]`. The adapter accepts that EOF only
|
|
492
|
+
* when every pending call has a non-empty name and complete JSON-object arguments;
|
|
493
|
+
* incomplete JSON, missing arguments, and empty streams remain truncation errors.
|
|
494
|
+
*/
|
|
495
|
+
openaiChatEofTolerance?: boolean;
|
|
496
|
+
/**
|
|
497
|
+
* Opt-in: forward `prompt_cache_key` to the upstream `/chat/completions` body.
|
|
498
|
+
* OpenAI-specific extension; strict backends (Groq, Cerebras, etc.) reject unknown
|
|
499
|
+
* fields. Default off; only enable for providers that document this parameter.
|
|
500
|
+
*/
|
|
501
|
+
promptCacheKey?: boolean;
|
|
502
|
+
/**
|
|
503
|
+
* Opt-in: forward caller `service_tier` values to the upstream `/chat/completions` body.
|
|
504
|
+
* On a classified route it governs foreign values (for example `flex`), not proxy-owned
|
|
505
|
+
* canonical Fast after capability validation. On an unclassified route it governs every caller
|
|
506
|
+
* value, including canonical spellings, because no Fast capability has been validated.
|
|
507
|
+
* OpenAI-specific extension with the same hazard as `promptCacheKey` — strict backends
|
|
508
|
+
* reject unknown fields, and 66 registry providers share the `openai-chat` adapter, so a
|
|
509
|
+
* caller-supplied `service_tier` would otherwise turn working requests into upstream 400s.
|
|
510
|
+
* Exact-model `true` enables canonical Fast capability but does not grant foreign-tier
|
|
511
|
+
* forwarding; provider-level `supportsServiceTier: false` remains a global denial. Default off;
|
|
512
|
+
* only enable for providers that document this parameter on the chat wire.
|
|
513
|
+
*/
|
|
514
|
+
chatServiceTier?: boolean;
|
|
515
|
+
/**
|
|
516
|
+
* Provider-local passthrough SSE repair for broken openai-responses gateways that reuse exact
|
|
517
|
+
* placeholder message/reasoning ids or omit the terminal id after a stable added event.
|
|
518
|
+
* Disabled by default; function_call ids and call_id pairing are never rewritten.
|
|
519
|
+
*/
|
|
520
|
+
responsesItemIdRepair?: ResponsesItemIdRepairConfig;
|
|
521
|
+
/** Model ids whose tool_choice only accepts `auto` or `none`; forced/named choices are downgraded. */
|
|
522
|
+
autoToolChoiceOnlyModels?: string[];
|
|
523
|
+
/** Model ids that expect prior assistant `reasoning_content` to be preserved in chat history. */
|
|
524
|
+
preserveReasoningContentModels?: string[];
|
|
525
|
+
/**
|
|
526
|
+
* Model ids whose upstream hard-rejects a tool_call continuation missing
|
|
527
|
+
* `reasoning_content` (DeepSeek thinking mode: HTTP 400). When the replay
|
|
528
|
+
* cache misses, the adapter injects a minimal placeholder for these models.
|
|
529
|
+
* Defaults to `preserveReasoningContentModels` when unset; set `[]` to opt
|
|
530
|
+
* out explicitly (e.g. MiniMax, where low effort disables thinking).
|
|
531
|
+
*/
|
|
532
|
+
requiresReasoningPlaceholderModels?: string[];
|
|
533
|
+
/**
|
|
534
|
+
* Opt-in same-target 429 retry policy. Codex itself never retries 429 (it retries 5xx only,
|
|
535
|
+
* openai/codex#30471), and single-key pools have no failover, so the proxy waits and replays
|
|
536
|
+
* the identical request on the same key before any failover. Pre-stream only: a 429 arrives
|
|
537
|
+
* before any response bytes are relayed, so the replay is lossless.
|
|
538
|
+
*/
|
|
539
|
+
retryOn429?: RateLimitRetryPolicy;
|
|
540
|
+
/**
|
|
541
|
+
* Model ids whose OpenAI-compatible chat endpoint accepts `reasoning_split: true` and returns
|
|
542
|
+
* thinking separately in `reasoning_content` / `reasoning_details` instead of visible content.
|
|
543
|
+
*/
|
|
544
|
+
reasoningSplitModels?: string[];
|
|
545
|
+
/**
|
|
546
|
+
* Model ids whose reasoning is a vendor `thinking: {type}` toggle on the
|
|
547
|
+
* chat-completions wire (MiMo v2.x, GLM 5/5.1 style), NOT an OpenAI `reasoning_effort` ladder.
|
|
548
|
+
* The openai-chat adapter translates the mapped effort into the thinking toggle for these.
|
|
549
|
+
*/
|
|
550
|
+
thinkingToggleModels?: string[];
|
|
551
|
+
/**
|
|
552
|
+
* Model ids whose reasoning is a `thinking_budget` integer on the chat-completions wire
|
|
553
|
+
* (Qwen3.x style), NOT an OpenAI `reasoning_effort` ladder. The openai-chat adapter maps the
|
|
554
|
+
* Codex effort to a budget fraction.
|
|
555
|
+
*/
|
|
556
|
+
thinkingBudgetModels?: string[];
|
|
557
|
+
/** Anthropic-compatible gateways that need custom tool names escaped on the wire. */
|
|
558
|
+
escapeBuiltinToolNames?: boolean;
|
|
559
|
+
/**
|
|
560
|
+
* Anthropic-compatible gateways (e.g. AgentRouter) that may close the stream before
|
|
561
|
+
* `message_stop`. With this enabled the adapter completes an otherwise-clean EOF only when
|
|
562
|
+
* visible text was received or an open tool call has complete JSON-object arguments; all
|
|
563
|
+
* other EOFs remain truncation errors. Absent = strict default behavior.
|
|
564
|
+
*/
|
|
565
|
+
anthropicEofTolerance?: boolean;
|
|
566
|
+
/**
|
|
567
|
+
* Model ids that do NOT accept image inputs. The proxy gives them "eyes" via the vision sidecar:
|
|
568
|
+
* attached images are described by a gpt vision model and replaced with text before the call.
|
|
569
|
+
*/
|
|
570
|
+
noVisionModels?: string[];
|
|
571
|
+
/**
|
|
572
|
+
* Google adapter mode. "ai-studio" (default) = Generative Language API + x-goog-api-key.
|
|
573
|
+
* "vertex" = Vertex AI project/location endpoints with GCP ADC (or x-goog-api-key).
|
|
574
|
+
* "cloud-code-assist" = Google Antigravity (Cloud Code Assist) OAuth + CCA envelope.
|
|
575
|
+
*/
|
|
576
|
+
googleMode?: "ai-studio" | "vertex" | "cloud-code-assist";
|
|
577
|
+
/** Vertex AI GCP project id (or GOOGLE_CLOUD_PROJECT / GCLOUD_PROJECT env). */
|
|
578
|
+
project?: string;
|
|
579
|
+
/** Vertex AI location, e.g. "us-central1" or "global" (or GOOGLE_CLOUD_LOCATION env). */
|
|
580
|
+
location?: string;
|
|
581
|
+
/**
|
|
582
|
+
* Cursor adapter only: MCP servers opencodex starts/connects and exposes to the Cursor agent
|
|
583
|
+
* as callable tools. Each entry is spawned (stdio `command`) or connected (`url`) lazily per
|
|
584
|
+
* stream; their tools are advertised to the Cursor server and executed against the live server.
|
|
585
|
+
*/
|
|
586
|
+
mcpServers?: Record<string, import("../adapters/cursor/mcp-config").CursorMcpServerConfig>;
|
|
587
|
+
/**
|
|
588
|
+
* Cursor adapter only: opt-in external executor for computer-use / record-screen. opencodex is
|
|
589
|
+
* headless and cannot control a screen itself; provide commands here only when running on a host
|
|
590
|
+
* that can. With no executor, these tools honestly report "not supported".
|
|
591
|
+
*/
|
|
592
|
+
desktopExecutor?: import("../adapters/cursor/native-exec-desktop").DesktopExecutorConfig;
|
|
593
|
+
/**
|
|
594
|
+
* Cursor adapter only: unsafe opt-in escape hatch for Cursor server-driven built-in local
|
|
595
|
+
* read/write/delete/ls/grep/shell/fetch execution. Prefer `nativeLocalExec: "on"` for new
|
|
596
|
+
* configs; this legacy boolean remains a server-local explicit opt-in for existing operators.
|
|
597
|
+
* Defaults to false so remote Cursor messages cannot bypass Codex approval/sandbox semantics.
|
|
598
|
+
* Explicit MCP and desktop executors remain controlled by their own opt-in config.
|
|
599
|
+
*/
|
|
600
|
+
unsafeAllowNativeLocalExec?: boolean;
|
|
601
|
+
/**
|
|
602
|
+
* Cursor adapter only: native local exec policy mode (exec-policy.ts).
|
|
603
|
+
* "off" (default) rejects server-driven local exec; "on" always allows it for this
|
|
604
|
+
* provider and should be used only for a trusted local experiment on a host where every
|
|
605
|
+
* data-plane caller is trusted. "codex-sandbox" is accepted for backwards compatibility
|
|
606
|
+
* but is fail-closed like "off": Responses instructions/system/developer text is
|
|
607
|
+
* caller-controlled prose, and opencodex has no trustworthy per-request attestation that it
|
|
608
|
+
* reflects a real Codex sandbox state. The default loopback bind admits ANY local process
|
|
609
|
+
* without auth (including other local users on multi-user machines), and
|
|
610
|
+
* isAllowedRequestOrigin blocks non-loopback browser origins by default but not
|
|
611
|
+
* loopback-origin or origin-less callers.
|
|
612
|
+
*/
|
|
613
|
+
nativeLocalExec?: "off" | "codex-sandbox" | "on";
|
|
614
|
+
}
|