@bitkyc08/opencodex 2.59.0 → 2.61.0-preview.20260922
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 +64 -0
- package/README.md +28 -1
- package/bin/ocx.mjs +382 -209
- package/gui/dist/assets/App-E64Rzjap.js +50 -0
- package/gui/dist/assets/Tray-_nfzD8k4.js +1 -0
- package/gui/dist/assets/index-DpdfZWMK.js +86 -0
- package/gui/dist/assets/index-_bpvxJu0.css +1 -0
- package/gui/dist/assets/usage-companion-chart-DtoK7T6h.js +1 -0
- package/gui/dist/favicon.png +0 -0
- package/gui/dist/index.html +2 -2
- package/gui/dist/provider-icons/stepfun-color.svg +1 -0
- package/package.json +8 -1
- package/src/adapters/anthropic-image-codec.ts +16 -2
- package/src/adapters/anthropic-image-normalize.ts +49 -2
- package/src/adapters/anthropic.ts +20 -1
- package/src/adapters/base.ts +23 -0
- package/src/adapters/coding-agent/protocol.ts +36 -6
- package/src/adapters/coding-agent/turn.ts +32 -4
- package/src/adapters/command-code.ts +52 -4
- package/src/adapters/cursor/catalog.ts +51 -7
- package/src/adapters/cursor/checkpoint-store.ts +3 -0
- package/src/adapters/cursor/discovery.ts +11 -8
- package/src/adapters/cursor/live-transport.ts +26 -9
- package/src/adapters/cursor/protobuf-request.ts +6 -3
- package/src/adapters/cursor/request-builder.ts +20 -4
- package/src/adapters/cursor/transport.ts +19 -0
- package/src/adapters/cursor.ts +14 -3
- package/src/adapters/declaration-carrier.ts +45 -0
- package/src/adapters/devin/cloud-direct/chat.ts +3 -1
- package/src/adapters/devin/cloud-direct/stated-reset-retry.ts +42 -5
- package/src/adapters/devin.ts +125 -36
- package/src/adapters/google-antigravity-replay.ts +1 -1
- package/src/adapters/google-antigravity-wire.ts +34 -7
- package/src/adapters/google-errors.ts +7 -1
- package/src/adapters/google-http.ts +49 -10
- package/src/adapters/google-tool-schema.ts +595 -31
- package/src/adapters/google-wire-compiler.ts +93 -10
- package/src/adapters/google-wire-shape.ts +461 -0
- package/src/adapters/google.ts +66 -11
- package/src/adapters/image.ts +4 -1
- package/src/adapters/input-media-guard.ts +21 -9
- package/src/adapters/kiro/usage.ts +3 -2
- package/src/adapters/kiro-tool-fallback.ts +1 -1
- package/src/adapters/ollama-native.ts +6 -0
- package/src/adapters/openai-chat/developer-role.ts +61 -0
- package/src/adapters/openai-chat/messages.ts +46 -27
- package/src/adapters/openai-chat/parallel-tool-calls.ts +32 -0
- package/src/adapters/openai-chat/passthrough.ts +33 -9
- package/src/adapters/openai-chat/reasoning-wire.ts +89 -0
- package/src/adapters/openai-chat-images.ts +3 -1
- package/src/adapters/openai-chat.ts +23 -58
- package/src/adapters/openai-responses/image-gen.ts +8 -6
- package/src/adapters/openai-responses/passthrough.ts +17 -3
- package/src/adapters/openai-responses/reasoning.ts +7 -0
- package/src/adapters/opencode-go-additional-tools.ts +12 -2
- package/src/adapters/registry.ts +3 -2
- package/src/adapters/run-turn-queue.ts +178 -29
- package/src/adapters/xai-web-search.ts +16 -1
- package/src/bridge/errors.ts +8 -2
- package/src/bridge/response-json.ts +9 -1
- package/src/bridge/sse.ts +13 -151
- package/src/chat/inbound.ts +141 -5
- package/src/claude/desktop-3p.ts +7 -1
- package/src/claude/desktop-first-party.ts +183 -0
- package/src/claude/desktop-gateway-state.ts +41 -0
- package/src/claude/inbound-content-options.ts +6 -0
- package/src/claude/inbound.ts +32 -6
- package/src/claude/intercept/connect-proxy.ts +179 -0
- package/src/claude/intercept/listener.ts +122 -0
- package/src/claude/intercept/local-ca.ts +298 -0
- package/src/claude/intercept/runtime.ts +98 -0
- package/src/claude/intercept/settings.ts +189 -0
- package/src/cli/access.ts +87 -0
- package/src/cli/account-auth.ts +19 -0
- package/src/cli/account-extended.ts +4 -4
- package/src/cli/capabilities.ts +31 -0
- package/src/cli/claude-desktop.ts +206 -16
- package/src/cli/codex-shim-autorestore.ts +3 -0
- package/src/cli/companion.ts +56 -0
- package/src/cli/dispatch.ts +46 -7
- package/src/cli/doctor.ts +28 -9
- package/src/cli/ensure-desired-integrations.ts +43 -5
- package/src/cli/help.ts +7 -9
- package/src/cli/hub.ts +3 -2
- package/src/cli/index.ts +203 -59
- package/src/cli/init.ts +8 -0
- package/src/cli/integrations.ts +7 -1
- package/src/cli/opencode.ts +2 -2
- package/src/cli/provider.ts +13 -1
- package/src/cli/registry.ts +41 -2
- package/src/cli/resolve.ts +230 -0
- package/src/cli/root.ts +24 -1
- package/src/cli/start-ownership-publication.ts +56 -0
- package/src/cli/status-probes.ts +2 -18
- package/src/cli/status.ts +62 -0
- package/src/cli/stop-report.ts +143 -0
- package/src/cli/uninstall-plan.ts +9 -0
- package/src/client/machine-api.ts +2 -2
- package/src/client/machine-listener.ts +4 -7
- package/src/client/runtime.ts +26 -2
- package/src/clients/aside-profiles.ts +4 -0
- package/src/clients/config-export/zcode-store.ts +157 -0
- package/src/clients/config-export.ts +36 -0
- package/src/codex/account-store.ts +65 -0
- package/src/codex/app-server-processes.ts +72 -40
- package/src/codex/auth-api/account-list.ts +19 -11
- package/src/codex/auth-api/login-flow.ts +6 -1
- package/src/codex/auth-api/pool-quota-probe.ts +30 -7
- package/src/codex/autostart-health.ts +28 -0
- package/src/codex/catalog/build-entries.ts +2 -2
- package/src/codex/catalog/effort.ts +3 -3
- package/src/codex/catalog/gather-capture.ts +21 -2
- package/src/codex/catalog/model-hints.ts +29 -28
- package/src/codex/catalog/parsing.ts +7 -0
- package/src/codex/catalog/provider-models.ts +43 -17
- package/src/codex/catalog/retained-sync.ts +24 -28
- package/src/codex/catalog/routed-gather.ts +19 -0
- package/src/codex/context-compat.ts +5 -2
- package/src/codex/convergence.ts +2 -2
- package/src/codex/desired-state.ts +4 -1
- package/src/codex/history-job.ts +6 -6
- package/src/codex/history-provider.ts +31 -166
- package/src/codex/history-rollout-read.ts +174 -0
- package/src/codex/inject/config-toml.ts +41 -6
- package/src/codex/inject/paginated-openai-compat.ts +90 -0
- package/src/codex/inject.ts +18 -15
- package/src/codex/injected-marker.ts +18 -0
- package/src/codex/internal/catalog-writer.ts +33 -1
- package/src/codex/main-account.ts +6 -0
- package/src/codex/model-cache.ts +99 -6
- package/src/codex/model-entitlement-admission.ts +59 -0
- package/src/codex/model-entitlements.ts +116 -54
- package/src/codex/native-main-admission.ts +83 -0
- package/src/codex/observed-model-denials.ts +101 -8
- package/src/codex/prompt-text-probe.ts +9 -6
- package/src/codex/routing/health-store.ts +39 -0
- package/src/codex/routing/selection.ts +37 -1
- package/src/codex/routing.ts +12 -42
- package/src/codex/shim-templates.ts +29 -3
- package/src/codex/shim.ts +1 -1
- package/src/codex/subagent-model-fallback.ts +22 -4
- package/src/combos/failover.ts +3 -0
- package/src/companion/settings.ts +132 -0
- package/src/config/admitted-identity.ts +222 -0
- package/src/config/atomic-write.ts +117 -5
- package/src/config/diagnostics.ts +22 -1
- package/src/config/feature-flags.ts +5 -0
- package/src/config/load-degrade.ts +52 -7
- package/src/config/process-state.ts +1 -1
- package/src/config/proxy-env.ts +8 -2
- package/src/config/schema/compaction-triggers.ts +11 -0
- package/src/config/schema/config-schema.ts +31 -1
- package/src/config/schema/leaf-validators.ts +59 -0
- package/src/config.ts +3 -3
- package/src/generated/compatibility-version.json +604 -280
- package/src/grok/reset-coupons.ts +38 -19
- package/src/images/loop.ts +6 -1
- package/src/integrations/aside-profile-context.ts +37 -3
- package/src/integrations/aside-profile-journal.ts +68 -3
- package/src/integrations/aside-profiles.ts +128 -3
- package/src/integrations/config-io.ts +44 -10
- package/src/integrations/merge.ts +120 -13
- package/src/integrations/mutation-plan.ts +921 -0
- package/src/integrations/registry.ts +38 -0
- package/src/integrations/state.ts +78 -45
- package/src/integrations/target.ts +208 -0
- package/src/integrations/writer.ts +134 -110
- package/src/lab/conformance/fixture-provider.ts +5 -0
- package/src/lab/live/transport.ts +4 -0
- package/src/lab/live/types.ts +5 -0
- package/src/lab/subject/behavior-fingerprint.ts +1 -1
- package/src/lib/admin-secrets.ts +9 -1
- package/src/lib/browser-launch-notice.ts +59 -0
- package/src/lib/bun-runtime.ts +6 -2
- package/src/lib/debug-log-buffer.ts +6 -1
- package/src/lib/debug.ts +63 -0
- package/src/lib/errors.ts +79 -0
- package/src/lib/http-response-semantics.ts +57 -0
- package/src/lib/lab-live-pinned-sender.ts +26 -12
- package/src/lib/open-url.ts +51 -7
- package/src/lib/package-tree-integrity.ts +2 -1
- package/src/lib/package-version.ts +8 -0
- package/src/lib/pinned-http.ts +142 -2
- package/src/lib/plain-data.ts +103 -0
- package/src/lib/process-control.ts +13 -5
- package/src/lib/provider-egress.ts +310 -0
- package/src/lib/provider-outbound.ts +109 -16
- package/src/lib/proxy-env.ts +82 -7
- package/src/lib/request-execution-budget.ts +72 -0
- package/src/lib/request-failure-attribution.ts +183 -0
- package/src/lib/request-failure-model.ts +236 -0
- package/src/lib/request-resend-gate.ts +138 -0
- package/src/lib/socks5-fetch.ts +136 -26
- package/src/lib/spend-ledger-owner.ts +364 -0
- package/src/lib/spend-reservation-ledger.ts +218 -27
- package/src/lib/standalone.ts +16 -0
- package/src/lib/upstream-retry.ts +167 -16
- package/src/lib/windows-system-proxy.ts +16 -11
- package/src/lib/winsw.ts +2 -2
- package/src/oauth/callback-server.ts +4 -3
- package/src/oauth/generic-account-failover.ts +1 -0
- package/src/oauth/health.ts +12 -1
- package/src/oauth/index.ts +27 -108
- package/src/oauth/login-cli.ts +80 -29
- package/src/oauth/login-flow-state.ts +127 -0
- package/src/providers/api-key-resolve.ts +133 -0
- package/src/providers/api-key-selection.ts +5 -1
- package/src/providers/derive.ts +34 -17
- package/src/providers/devin-cli-authmode-migration.ts +14 -10
- package/src/providers/key-failover.ts +97 -19
- package/src/providers/key-store.ts +34 -110
- package/src/providers/model-rename-fields.ts +147 -0
- package/src/providers/model-rename-migration.ts +179 -38
- package/src/providers/model-rename-startup.ts +7 -5
- package/src/providers/openai-virtual-models.ts +42 -2
- package/src/providers/quota/antigravity.ts +22 -2
- package/src/providers/quota/vendor-probes-key.ts +38 -23
- package/src/providers/reasoning-metadata.ts +43 -18
- package/src/providers/registry/entries-core.ts +47 -20
- package/src/providers/registry/entries-extended.ts +63 -4
- package/src/providers/registry/model-ids.ts +168 -0
- package/src/providers/registry/model-seeds.ts +56 -10
- package/src/providers/registry/types.ts +2 -0
- package/src/providers/resolved-model-policy-merge.ts +167 -0
- package/src/providers/resolved-model-policy.ts +406 -0
- package/src/providers/stale-vision-classification-migration.ts +137 -0
- package/src/providers/xai-transport.ts +12 -1
- package/src/reasoning-effort.ts +8 -0
- package/src/responses/apply-patch-envelope.ts +0 -12
- package/src/responses/freeform-wrapper-scan.ts +279 -0
- package/src/responses/function-call-compat.ts +38 -1
- package/src/responses/inline-document.ts +65 -0
- package/src/responses/input-media.ts +42 -8
- package/src/responses/legacy-dotted-tool-name-repair.ts +134 -0
- package/src/responses/muse-tool-name-alias.ts +19 -0
- package/src/responses/parser-content.ts +8 -2
- package/src/responses/parser-tools.ts +3 -0
- package/src/responses/parser.ts +3 -1
- package/src/responses/progressive-freeform-input.ts +130 -0
- package/src/responses/reasoning-envelope.ts +30 -0
- package/src/responses/schema.ts +3 -0
- package/src/responses/state.ts +5 -12
- package/src/responses/tool-name-aliases.ts +15 -1
- package/src/router.ts +108 -117
- package/src/routing/compatibility/behavior.ts +9 -0
- package/src/routing/compatibility/subject.ts +16 -1
- package/src/server/adapter-resolve.ts +9 -0
- package/src/server/admission-model-scope.ts +219 -0
- package/src/server/audio-live.ts +9 -3
- package/src/server/audio-upstream.ts +18 -0
- package/src/server/auth-cors.ts +29 -0
- package/src/server/chat-completions.ts +60 -4
- package/src/server/chat-native.ts +19 -4
- package/src/server/claude-messages.ts +61 -20
- package/src/server/effort-row.ts +11 -3
- package/src/server/grok-responses-control-frame.ts +160 -1
- package/src/server/grok-responses-snapshot-repair.ts +113 -11
- package/src/server/gui-freshness.ts +103 -0
- package/src/server/gui-static.ts +7 -9
- package/src/server/images.ts +59 -6
- package/src/server/index/claude-intercept-lifecycle.ts +49 -0
- package/src/server/index/serve-options.ts +142 -39
- package/src/server/index/spend-ledger-lifecycle.ts +92 -0
- package/src/server/index/startup-warnings.ts +24 -0
- package/src/server/index/websocket-handler.ts +6 -1
- package/src/server/index.ts +34 -38
- package/src/server/lifecycle.ts +4 -4
- package/src/server/live-call-bindings.ts +6 -0
- package/src/server/live.ts +88 -3
- package/src/server/management/agent-settings-routes.ts +121 -36
- package/src/server/management/aside-profile-routes.ts +266 -7
- package/src/server/management/companion-routes.ts +77 -0
- package/src/server/management/config-routes.ts +18 -2
- package/src/server/management/context.ts +3 -0
- package/src/server/management/integration-routes.ts +287 -5
- package/src/server/management/logs-usage-routes.ts +19 -0
- package/src/server/management/metrics-routes.ts +20 -0
- package/src/server/management/model-rows.ts +224 -12
- package/src/server/management/native-integration-routes.ts +103 -6
- package/src/server/management/oauth-account-routes.ts +45 -7
- package/src/server/management/route-registry.ts +20 -0
- package/src/server/management/shared.ts +28 -4
- package/src/server/management/system-restart.ts +7 -2
- package/src/server/management/system-routes.ts +2 -0
- package/src/server/management/usage-aggregate-cache.ts +4 -0
- package/src/server/management/usage-timeline-routes.ts +44 -0
- package/src/server/management-api.ts +10 -9
- package/src/server/management-auth.ts +15 -1
- package/src/server/proxy-liveness.ts +75 -0
- package/src/server/readiness.ts +29 -10
- package/src/server/relay-eager.ts +24 -2
- package/src/server/relay.ts +138 -12
- package/src/server/request-log-failure-attribution.ts +99 -0
- package/src/server/request-log.ts +169 -2
- package/src/server/request-metrics.ts +298 -0
- package/src/server/responses/adapter-continuation.ts +3 -3
- package/src/server/responses/adapter-dispatch.ts +11 -6
- package/src/server/responses/codex-ws-wire.ts +34 -8
- package/src/server/responses/combo-stream-preflight.ts +168 -6
- package/src/server/responses/compact.ts +43 -10
- package/src/server/responses/compaction-routing.ts +111 -0
- package/src/server/responses/core-codex-account.ts +8 -3
- package/src/server/responses/core-combo.ts +7 -7
- package/src/server/responses/core-normalize.ts +6 -12
- package/src/server/responses/core-opaque-recovery.ts +91 -0
- package/src/server/responses/core-options.ts +4 -0
- package/src/server/responses/encrypted-payload.ts +20 -2
- package/src/server/responses/fetch-helpers.ts +124 -8
- package/src/server/responses/input-admission.ts +10 -0
- package/src/server/responses/passthrough-delivery.ts +45 -15
- package/src/server/responses/passthrough-dispatch.ts +215 -44
- package/src/server/responses/passthrough-error.ts +27 -8
- package/src/server/responses/policy-fallback.ts +5 -13
- package/src/server/responses/request-prepare.ts +109 -18
- package/src/server/responses/request-send-budget.ts +17 -1
- package/src/server/responses/request-sidecar-auth.ts +1 -1
- package/src/server/responses/request-transport.ts +26 -6
- package/src/server/responses/reset-replay.ts +108 -0
- package/src/server/responses/run-turn-execution.ts +25 -3
- package/src/server/responses/sidecar-execution.ts +17 -2
- package/src/server/responses/ws-upstream.ts +14 -27
- package/src/server/responses-custom-tool-repair.ts +27 -54
- package/src/server/responses-request-tool-scope.ts +214 -0
- package/src/server/responses-undeclared-tool-guard.ts +35 -2
- package/src/server/search.ts +25 -1
- package/src/server/sse-payload-rewrite.ts +1 -1
- package/src/server/usage-ledger-retention.ts +73 -0
- package/src/service/cli.ts +48 -2
- package/src/service/health.ts +3 -2
- package/src/service/install-state-contract.d.mts +27 -0
- package/src/service/install-state-contract.mjs +34 -0
- package/src/service/launchd.ts +1 -1
- package/src/service/orchestration.ts +2 -4
- package/src/service/ownership-compatibility.ts +164 -0
- package/src/service/ownership-mutation-lease.d.mts +32 -0
- package/src/service/ownership-mutation-lease.mjs +211 -0
- package/src/service/repair.ts +45 -1
- package/src/service/state-lock.ts +269 -0
- package/src/service/state-record.d.mts +36 -0
- package/src/service/state-record.mjs +138 -0
- package/src/service/state.ts +582 -68
- package/src/service/windows-taskxml.ts +11 -10
- package/src/service.ts +7 -3
- package/src/tray/windows-tray.ps1 +156 -4
- package/src/types/config.ts +48 -3
- package/src/types/provider.ts +91 -0
- package/src/types/request.ts +30 -2
- package/src/types/tools.ts +33 -0
- package/src/types.ts +4 -0
- package/src/update/index.ts +207 -63
- package/src/update/job.ts +9 -5
- package/src/update/ownership-transaction.ts +47 -0
- package/src/update/restart-ownership.ts +54 -0
- package/src/update/runtime-ownership.d.mts +40 -0
- package/src/update/runtime-ownership.mjs +122 -0
- package/src/usage/attempt-delivery.ts +198 -0
- package/src/usage/cache-diagnostic.ts +305 -0
- package/src/usage/failure-fingerprint.ts +118 -0
- package/src/usage/failure-projection-cache.ts +174 -0
- package/src/usage/failure-projection.ts +174 -0
- package/src/usage/ledger-retention.ts +165 -0
- package/src/usage/log.ts +126 -79
- package/src/usage/request-outcome.ts +150 -0
- package/src/usage/retention-contract.ts +28 -0
- package/src/usage/summary.ts +2 -2
- package/src/usage/telemetry-contract.ts +237 -0
- package/src/usage/timeline.ts +236 -0
- package/src/vision/eligibility.ts +88 -9
- package/src/vision/plan.ts +34 -10
- package/src/web-search/alpha-search.ts +21 -1
- package/src/web-search/executor.ts +41 -2
- package/src/web-search/loop.ts +6 -1
- package/gui/dist/assets/index-C5IebErG.js +0 -136
- package/gui/dist/assets/index-OESInAjC.css +0 -1
|
@@ -177,6 +177,15 @@ export const META_MUSE_REASONING_EFFORTS = ["minimal", "low", "medium", "high",
|
|
|
177
177
|
export const META_MUSE_REASONING_EFFORT_MAP: Record<string, string> = Object.fromEntries(
|
|
178
178
|
META_MUSE_REASONING_EFFORTS.map(effort => [effort, effort]),
|
|
179
179
|
);
|
|
180
|
+
/*
|
|
181
|
+
* Muse Code credentials have a separate capability contract. Meta's authenticated
|
|
182
|
+
* /muse-code/models roster advertises max for both 1.3 models, and the Responses API
|
|
183
|
+
* accepts it when the request identifies the Muse client surface.
|
|
184
|
+
*/
|
|
185
|
+
export const META_MUSE_CODE_REASONING_EFFORTS = [...META_MUSE_REASONING_EFFORTS, "max"];
|
|
186
|
+
export const META_MUSE_CODE_REASONING_EFFORT_MAP: Record<string, string> = Object.fromEntries(
|
|
187
|
+
META_MUSE_CODE_REASONING_EFFORTS.map(effort => [effort, effort]),
|
|
188
|
+
);
|
|
180
189
|
/** Both Muse Spark 1.3 tiers publish a 1,048,576-token window (dev.meta.ai/docs/models). */
|
|
181
190
|
export const META_MUSE_CONTEXT_WINDOW = 1_048_576;
|
|
182
191
|
export const META_MUSE_MODELS = ["muse-spark-1.3", "muse-spark-1.3-contributor"];
|
|
@@ -633,11 +642,26 @@ export const ALIBABA_TOKEN_PLAN_PRESERVE_REASONING = [
|
|
|
633
642
|
export const KIMI_K3_STANDARD_CONTEXT_WINDOW = 262_144;
|
|
634
643
|
export const KIMI_K3_1M_CONTEXT_WINDOW = 1_048_576;
|
|
635
644
|
export const KIMI_CODING_K3_MODELS = ["k3", "k3[1m]"];
|
|
645
|
+
// 260921 Kimi K2.8: `kimi-for-coding` is the stable subscription alias Moonshot re-points
|
|
646
|
+
// at each coding release. Live GET /coding/v1/models lists only kimi-for-coding[-highspeed],
|
|
647
|
+
// k3, k3-256k — the k2.x ids are retired from the subscription endpoint. Since K2.8 Preview
|
|
648
|
+
// the alias serves an adjustable low/high/max thinking ladder (same wire map as k3) and a
|
|
649
|
+
// 1M context ceiling. Verified live 260921: 350K-token request accepted; upstream rejects
|
|
650
|
+
// with "model token limit: 1048576" beyond that.
|
|
651
|
+
// Evidence: https://www.kimi.com/code/docs/en/kimi-code/models.html
|
|
652
|
+
export const KIMI_CODING_K28_MODELS = ["kimi-for-coding"];
|
|
653
|
+
export const KIMI_CODING_LIVE_MODELS = [...KIMI_CODING_K3_MODELS, ...KIMI_CODING_K28_MODELS];
|
|
654
|
+
export const KIMI_CODING_ADJUSTABLE_THINKING_MODELS = [...KIMI_CODING_LIVE_MODELS];
|
|
636
655
|
export const KIMI_LEGACY_API_MODELS = ["kimi-k2.7-code", "kimi-k2.7-code-highspeed", "kimi-k2.6", "kimi-k2.5"];
|
|
637
656
|
export const KIMI_API_MODELS = ["kimi-k3", ...KIMI_LEGACY_API_MODELS];
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
657
|
+
// Every kimi coding preset record - picker, context windows, locked-parameter lists -
|
|
658
|
+
// derives from the live ids only. seeding a retired id in a metadata list would re-arm
|
|
659
|
+
// the model-rename migration on every boot (#5066): the list holds the retired id but
|
|
660
|
+
// not the live alias, so the residue guard cannot skip it. The retired ids survive only
|
|
661
|
+
// in KIMI_LEGACY_API_MODELS (moonshot platform API records); model-rename-migration
|
|
662
|
+
// repairs saved rows still naming them.
|
|
663
|
+
export const KIMI_THINKING_MODELS = KIMI_CODING_LIVE_MODELS;
|
|
664
|
+
export const KIMI_CODING_NO_REASONING_MODELS = KIMI_CODING_LIVE_MODELS.filter(id => !KIMI_CODING_ADJUSTABLE_THINKING_MODELS.includes(id));
|
|
641
665
|
export const KIMI_API_NO_REASONING_MODELS = KIMI_API_MODELS.filter(id => id !== "kimi-k3");
|
|
642
666
|
export const KIMI_CODING_K3_REASONING_EFFORTS = ["low", "high", "max"];
|
|
643
667
|
export const KIMI_CODING_K3_REASONING_EFFORT_MAP: Record<string, string> = {
|
|
@@ -649,19 +673,19 @@ export const KIMI_CODING_K3_REASONING_EFFORT_MAP: Record<string, string> = {
|
|
|
649
673
|
max: "max",
|
|
650
674
|
};
|
|
651
675
|
export const KIMI_CODING_REASONING_EFFORTS = Object.fromEntries(
|
|
652
|
-
|
|
676
|
+
KIMI_CODING_LIVE_MODELS.map(id => [id, KIMI_CODING_ADJUSTABLE_THINKING_MODELS.includes(id) ? KIMI_CODING_K3_REASONING_EFFORTS : []]),
|
|
653
677
|
);
|
|
654
678
|
export const KIMI_CODING_DEFAULT_REASONING_EFFORTS = Object.fromEntries(
|
|
655
|
-
|
|
679
|
+
KIMI_CODING_ADJUSTABLE_THINKING_MODELS.map(id => [id, "max"]),
|
|
656
680
|
);
|
|
657
681
|
export const KIMI_CODING_REASONING_EFFORT_MAPS = Object.fromEntries(
|
|
658
|
-
|
|
682
|
+
KIMI_CODING_ADJUSTABLE_THINKING_MODELS.map(id => [id, KIMI_CODING_K3_REASONING_EFFORT_MAP]),
|
|
659
683
|
);
|
|
660
684
|
export const KIMI_API_REASONING_EFFORTS = Object.fromEntries(
|
|
661
685
|
KIMI_API_MODELS.map(id => [id, id === "kimi-k3" ? ["max"] : []]),
|
|
662
686
|
);
|
|
663
|
-
export const KIMI_LOCKED_PARAMETER_MODELS =
|
|
664
|
-
export const KIMI_AUTO_TOOL_CHOICE_ONLY_MODELS = ["kimi-
|
|
687
|
+
export const KIMI_LOCKED_PARAMETER_MODELS = KIMI_CODING_LIVE_MODELS;
|
|
688
|
+
export const KIMI_AUTO_TOOL_CHOICE_ONLY_MODELS = ["kimi-for-coding"];
|
|
665
689
|
export const KIMI_API_MODEL_CONTEXT_WINDOWS: Record<string, number> = Object.fromEntries(
|
|
666
690
|
KIMI_API_MODELS.map(id => [id, id === "kimi-k3" ? KIMI_K3_1M_CONTEXT_WINDOW : 262_144]),
|
|
667
691
|
);
|
|
@@ -749,10 +773,10 @@ export const NVIDIA_NIM_NO_VISION_MODELS = [
|
|
|
749
773
|
"poolside/laguna-xs-2.1", "z-ai/glm-5.3", "z-ai/glm-5.2",
|
|
750
774
|
];
|
|
751
775
|
export const KIMI_CODING_MODEL_CONTEXT_WINDOWS: Record<string, number> = Object.fromEntries(
|
|
752
|
-
|
|
776
|
+
KIMI_CODING_LIVE_MODELS.map(id => [id, (id === "k3[1m]" || KIMI_CODING_K28_MODELS.includes(id)) ? KIMI_K3_1M_CONTEXT_WINDOW : KIMI_K3_STANDARD_CONTEXT_WINDOW]),
|
|
753
777
|
);
|
|
754
778
|
export const KIMI_CODING_MODEL_INPUT_MODALITIES = Object.fromEntries(
|
|
755
|
-
|
|
779
|
+
KIMI_CODING_ADJUSTABLE_THINKING_MODELS.map(id => [id, ["text", "image"]]),
|
|
756
780
|
);
|
|
757
781
|
export const NEURALWATT_REASONING_HISTORY_MODELS = [
|
|
758
782
|
"glm-5.3", "glm-5.3-short", "glm-5.3-flash",
|
|
@@ -1017,3 +1041,25 @@ export const OPPER_TEXT_ONLY_MODELS = ["deepseek-v4-pro", "kimi-k3"];
|
|
|
1017
1041
|
export const OPPER_MODEL_INPUT_MODALITIES: Record<string, string[]> = Object.fromEntries(
|
|
1018
1042
|
OPPER_MODELS.map(id => [id, OPPER_TEXT_ONLY_MODELS.includes(id) ? ["text"] : ["text", "image"]]),
|
|
1019
1043
|
);
|
|
1044
|
+
|
|
1045
|
+
export const STEPFUN_MODELS = [
|
|
1046
|
+
"step-5-preview",
|
|
1047
|
+
"step-3.5-flash",
|
|
1048
|
+
"step-3.7-flash",
|
|
1049
|
+
];
|
|
1050
|
+
|
|
1051
|
+
export const STEPFUN_MODEL_CONTEXT_WINDOWS: Record<string, number> = {
|
|
1052
|
+
"step-5-preview": 1_000_000,
|
|
1053
|
+
"step-3.5-flash": 256_000,
|
|
1054
|
+
"step-3.7-flash": 256_000,
|
|
1055
|
+
};
|
|
1056
|
+
|
|
1057
|
+
export const STEPFUN_MODEL_INPUT_MODALITIES: Record<string, string[]> = {
|
|
1058
|
+
"step-5-preview": ["text", "image"],
|
|
1059
|
+
"step-3.5-flash": ["text"],
|
|
1060
|
+
"step-3.7-flash": ["text", "image"],
|
|
1061
|
+
};
|
|
1062
|
+
|
|
1063
|
+
export const STEPFUN_NO_VISION_MODELS = ["step-3.5-flash"];
|
|
1064
|
+
|
|
1065
|
+
export const STEPFUN_REASONING_EFFORTS = ["low", "medium", "high"];
|
|
@@ -264,6 +264,8 @@ export interface ProviderRegistryEntry {
|
|
|
264
264
|
modelServiceTierCapabilityBaseUrlGuard?: (baseUrl: string) => boolean;
|
|
265
265
|
/** Registry default for plaintext reasoning replay; see `OcxProviderConfig.preserveResponsesReasoningContent`. Registry-only like `supportsServiceTier`. */
|
|
266
266
|
preserveResponsesReasoningContent?: boolean;
|
|
267
|
+
/** Registry default for dropping replayed reasoning items for Responses upstreams that reject them. */
|
|
268
|
+
dropResponsesReasoningItems?: boolean;
|
|
267
269
|
/** Registry defaults for per-model Codex reasoning propagation; explicit user keys win during enrichment. */
|
|
268
270
|
modelSupportsReasoningSummaries?: Record<string, boolean>;
|
|
269
271
|
/** Registry defaults for per-model Codex Responses verbosity support. */
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import type { OcxProviderConfig } from "../types";
|
|
2
|
+
import { MODEL_ADAPTER_OVERRIDE_ALLOWED } from "../types";
|
|
3
|
+
import type { InboundWire, ModelWireDefault, ProviderRegistryEntry } from "./registry/types";
|
|
4
|
+
|
|
5
|
+
export type StaticPolicySource =
|
|
6
|
+
| "operator" | "operator-capability" | "captured-auth"
|
|
7
|
+
| "registry" | "hard-pin" | "provider-default" | "unknown";
|
|
8
|
+
|
|
9
|
+
export function detachedClone<T>(value: T): T {
|
|
10
|
+
if (Array.isArray(value)) return value.map(item => detachedClone(item)) as T;
|
|
11
|
+
if (value && typeof value === "object") {
|
|
12
|
+
return Object.fromEntries(Object.entries(value as Record<string, unknown>)
|
|
13
|
+
.map(([key, nested]) => [key, detachedClone(nested)])) as T;
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function recursivelyFreeze<T>(value: T): T {
|
|
19
|
+
if (!value || typeof value !== "object" || Object.isFrozen(value)) return value;
|
|
20
|
+
for (const nested of Object.values(value as Record<string, unknown>)) recursivelyFreeze(nested);
|
|
21
|
+
return Object.freeze(value);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function scalar<T>(operator: T | undefined, registry: T | undefined): [T | undefined, StaticPolicySource] {
|
|
25
|
+
if (operator !== undefined) return [detachedClone(operator), "operator"];
|
|
26
|
+
if (registry !== undefined) return [detachedClone(registry), "registry"];
|
|
27
|
+
return [undefined, "unknown"];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function mapFill<T>(
|
|
31
|
+
registry: Readonly<Record<string, T>> | undefined,
|
|
32
|
+
operator: Readonly<Record<string, T>> | undefined,
|
|
33
|
+
): [Record<string, T> | undefined, StaticPolicySource] {
|
|
34
|
+
if (!registry && !operator) return [undefined, "unknown"];
|
|
35
|
+
return [detachedClone({ ...(registry ?? {}), ...(operator ?? {}) }), operator ? "operator" : "registry"];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function nestedMapFill(
|
|
39
|
+
registry: Readonly<Record<string, Record<string, string>>> | undefined,
|
|
40
|
+
operator: Readonly<Record<string, Record<string, string>>> | undefined,
|
|
41
|
+
): [Record<string, Record<string, string>> | undefined, StaticPolicySource] {
|
|
42
|
+
if (!registry && !operator) return [undefined, "unknown"];
|
|
43
|
+
const merged: Record<string, Record<string, string>> = {};
|
|
44
|
+
for (const [key, value] of Object.entries(registry ?? {})) merged[key] = { ...value };
|
|
45
|
+
for (const [key, value] of Object.entries(operator ?? {})) {
|
|
46
|
+
merged[key] = { ...(merged[key] ?? {}), ...value };
|
|
47
|
+
}
|
|
48
|
+
return [merged, operator ? "operator" : "registry"];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function positiveCapMap(
|
|
52
|
+
registry: Readonly<Record<string, number>> | undefined,
|
|
53
|
+
operator: Readonly<Record<string, number>> | undefined,
|
|
54
|
+
): [Record<string, number> | undefined, StaticPolicySource] {
|
|
55
|
+
if (!registry && !operator) return [undefined, "unknown"];
|
|
56
|
+
const merged = { ...(registry ?? {}) };
|
|
57
|
+
for (const [key, value] of Object.entries(operator ?? {})) {
|
|
58
|
+
merged[key] = typeof merged[key] === "number" ? Math.min(merged[key]!, value) : value;
|
|
59
|
+
}
|
|
60
|
+
return [merged, operator ? "operator" : "registry"];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function stableUnion(
|
|
64
|
+
registry: readonly string[] | undefined,
|
|
65
|
+
operator: readonly string[] | undefined,
|
|
66
|
+
): [string[] | undefined, StaticPolicySource] {
|
|
67
|
+
if (!registry && !operator) return [undefined, "unknown"];
|
|
68
|
+
return [[...new Set([...(registry ?? []), ...(operator ?? [])])], operator ? "operator" : "registry"];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function staticHeaders(
|
|
72
|
+
registry: Readonly<Record<string, string>> | undefined,
|
|
73
|
+
operator: Readonly<Record<string, string>> | undefined,
|
|
74
|
+
): [Record<string, string> | undefined, StaticPolicySource] {
|
|
75
|
+
if (!registry && !operator) return [undefined, "unknown"];
|
|
76
|
+
if (!registry) return [{ ...(operator ?? {}) }, "operator"];
|
|
77
|
+
if (!operator) return [{ ...registry }, "registry"];
|
|
78
|
+
const claimed = new Set(Object.keys(operator).map(name => name.toLowerCase()));
|
|
79
|
+
const merged: Record<string, string> = { ...operator };
|
|
80
|
+
for (const [name, value] of Object.entries(registry)) {
|
|
81
|
+
if (!claimed.has(name.toLowerCase())) merged[name] = value;
|
|
82
|
+
}
|
|
83
|
+
return [merged, "operator"];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function resolvedBaseUrl(
|
|
87
|
+
entry: Readonly<ProviderRegistryEntry> | undefined,
|
|
88
|
+
provider: Readonly<OcxProviderConfig>,
|
|
89
|
+
): [string, StaticPolicySource] {
|
|
90
|
+
if (!entry) return [provider.baseUrl, "operator"];
|
|
91
|
+
const configured = typeof provider.baseUrl === "string" ? provider.baseUrl.trim() : "";
|
|
92
|
+
const configuredIsResolved = configured.length > 0 && !/\{[^}]*\}/.test(configured);
|
|
93
|
+
if (entry.allowBaseUrlOverride && !configuredIsResolved) {
|
|
94
|
+
throw new Error(`Invalid baseUrl for provider "${entry.id}": expected a nonblank URL without unresolved placeholders`);
|
|
95
|
+
}
|
|
96
|
+
return (/\{[^}]*\}/.test(entry.baseUrl) || entry.allowBaseUrlOverride) && configuredIsResolved
|
|
97
|
+
? [configured, "operator"]
|
|
98
|
+
: [entry.baseUrl, "registry"];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function sameStringArray(left: readonly string[] | undefined, right: readonly string[]): boolean {
|
|
102
|
+
return left?.length === right.length && left.every((value, index) => value === right[index]);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** Legacy config-map lookup: exact id, colon family, then case-folded exact id. */
|
|
106
|
+
export function legacyModelValue<T>(record: Readonly<Record<string, T>> | undefined, modelId: string): T | undefined {
|
|
107
|
+
if (!record) return undefined;
|
|
108
|
+
if (Object.hasOwn(record, modelId)) return record[modelId];
|
|
109
|
+
const colon = modelId.indexOf(":");
|
|
110
|
+
if (colon > 0 && Object.hasOwn(record, modelId.slice(0, colon))) return record[modelId.slice(0, colon)];
|
|
111
|
+
const folded = modelId.toLowerCase();
|
|
112
|
+
return Object.entries(record).find(([key]) => key.toLowerCase() === folded)?.[1];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Provenance from the same merged-key walk as legacyModelValue. */
|
|
116
|
+
export function legacyModelSource<T>(
|
|
117
|
+
operator: Readonly<Record<string, T>> | undefined,
|
|
118
|
+
registry: Readonly<Record<string, T>> | undefined,
|
|
119
|
+
modelId: string,
|
|
120
|
+
): StaticPolicySource {
|
|
121
|
+
const merged = { ...(registry ?? {}), ...(operator ?? {}) };
|
|
122
|
+
let winningKey: string | undefined;
|
|
123
|
+
if (Object.hasOwn(merged, modelId)) winningKey = modelId;
|
|
124
|
+
const colon = modelId.indexOf(":");
|
|
125
|
+
if (winningKey === undefined && colon > 0 && Object.hasOwn(merged, modelId.slice(0, colon))) {
|
|
126
|
+
winningKey = modelId.slice(0, colon);
|
|
127
|
+
}
|
|
128
|
+
if (winningKey === undefined) {
|
|
129
|
+
const folded = modelId.toLowerCase();
|
|
130
|
+
winningKey = Object.keys(merged).find(key => key.toLowerCase() === folded);
|
|
131
|
+
}
|
|
132
|
+
if (winningKey === undefined) return "unknown";
|
|
133
|
+
return Object.hasOwn(operator ?? {}, winningKey) ? "operator" : "registry";
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export function anthropicFamilyContextWindow(
|
|
137
|
+
record: Readonly<Record<string, number>> | undefined,
|
|
138
|
+
id: string,
|
|
139
|
+
): number | undefined {
|
|
140
|
+
if (!record || !id.toLowerCase().startsWith("claude-")) return undefined;
|
|
141
|
+
let candidate = id;
|
|
142
|
+
while (true) {
|
|
143
|
+
const cut = candidate.lastIndexOf("-");
|
|
144
|
+
if (cut <= 0 || !/^\d+$/.test(candidate.slice(cut + 1))) return undefined;
|
|
145
|
+
candidate = candidate.slice(0, cut);
|
|
146
|
+
const value = record[candidate]
|
|
147
|
+
?? Object.entries(record).find(([key]) => key.toLowerCase() === candidate.toLowerCase())?.[1];
|
|
148
|
+
if (typeof value === "number" && value > 0) return value;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export function wireDefault(
|
|
153
|
+
declared: ModelWireDefault | undefined,
|
|
154
|
+
provider: Readonly<OcxProviderConfig>,
|
|
155
|
+
entry: Readonly<ProviderRegistryEntry> | undefined,
|
|
156
|
+
inbound: InboundWire,
|
|
157
|
+
effectiveAuthMode: OcxProviderConfig["authMode"] | undefined,
|
|
158
|
+
): string | undefined {
|
|
159
|
+
if (declared === undefined || !MODEL_ADAPTER_OVERRIDE_ALLOWED.has(provider.adapter)) return undefined;
|
|
160
|
+
if (typeof declared !== "string") {
|
|
161
|
+
if (!declared.inbound.includes(inbound)) return undefined;
|
|
162
|
+
const authMode = effectiveAuthMode ?? provider.authMode ?? entry?.authKind;
|
|
163
|
+
if (declared.authModes && authMode && !declared.authModes.includes(authMode)) return undefined;
|
|
164
|
+
}
|
|
165
|
+
const wire = typeof declared === "string" ? declared : declared.wire;
|
|
166
|
+
return MODEL_ADAPTER_OVERRIDE_ALLOWED.has(wire) ? wire : undefined;
|
|
167
|
+
}
|