@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
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CANONICAL_EFFORT_SUFFIXES,
|
|
3
3
|
cursorModelEffortLadder,
|
|
4
|
+
cursorModelHasEffortTiers,
|
|
4
5
|
cursorWireModelIdWithEffort,
|
|
6
|
+
CURSOR_THINKING_MODEL_IDS,
|
|
5
7
|
} from "./effort-map";
|
|
8
|
+
import { parseCursorVariantId } from "./catalog";
|
|
6
9
|
|
|
7
10
|
export interface CursorModelInfo {
|
|
8
11
|
id: string;
|
|
@@ -26,10 +29,10 @@ export function inferCursorContextWindow(modelId: string): number {
|
|
|
26
29
|
const id = modelId.trim().toLowerCase();
|
|
27
30
|
if (id.includes("1m")) return CONTEXT_1M;
|
|
28
31
|
if (id.startsWith("gemini-")) return CONTEXT_1M;
|
|
29
|
-
if (id === "glm-5.2") return CONTEXT_1M;
|
|
32
|
+
if (id === "glm-5.3" || id === "glm-5.2") return CONTEXT_1M;
|
|
30
33
|
if (id.startsWith("gpt-5.6-")) return CONTEXT_1M;
|
|
31
34
|
if (id.startsWith("gpt-5") || id === "gpt-5-codex") return CONTEXT_272K;
|
|
32
|
-
if (id.startsWith("grok-4.5")) return 500_000;
|
|
35
|
+
if (id.startsWith("grok-4.5") || id.startsWith("grok-4.6")) return 500_000;
|
|
33
36
|
if (id.startsWith("grok-")) return CONTEXT_256K;
|
|
34
37
|
if (id.includes("claude")) return CONTEXT_200K;
|
|
35
38
|
return CURSOR_DEFAULT_CONTEXT_WINDOW;
|
|
@@ -74,9 +77,16 @@ function stripCursorWirePrefix(id: string): string {
|
|
|
74
77
|
* ordinary `{base}-{effort}` form, or Cursor's current `{base-without-fast}-{effort}-fast` form.
|
|
75
78
|
*/
|
|
76
79
|
export function isCursorModelAvailableForAccount(modelId: string, liveIds: readonly string[]): boolean {
|
|
80
|
+
// Umbrella matching (devlog 260828_cursor_umbrella_catalog): a live suffix
|
|
81
|
+
// id counts toward its BASE — any variant dimension (thinking/fast/effort)
|
|
82
|
+
// proves the account can reach the umbrella. Unknown ids fall back to the
|
|
83
|
+
// legacy exact/suffix comparison so non-cataloged rows keep matching.
|
|
84
|
+
const parsedTarget = parseCursorVariantId(modelId);
|
|
77
85
|
return liveIds.some(raw => {
|
|
78
86
|
const id = stripCursorWirePrefix(raw);
|
|
79
87
|
if (id === modelId) return true;
|
|
88
|
+
const parsedLive = parseCursorVariantId(id);
|
|
89
|
+
if (parsedLive.known && parsedTarget.known && parsedLive.baseId === parsedTarget.baseId) return true;
|
|
80
90
|
for (const effort of CANONICAL_EFFORT_SUFFIXES) {
|
|
81
91
|
if (
|
|
82
92
|
id === `${modelId}-${effort}` ||
|
|
@@ -103,6 +113,28 @@ export const CURSOR_ROUTER_MODEL_IDS = [
|
|
|
103
113
|
...CURSOR_ROUTING_LEVELS.map(level => `${CURSOR_AUTO_MODEL_ID}-${level}`),
|
|
104
114
|
] as const;
|
|
105
115
|
|
|
116
|
+
/**
|
|
117
|
+
* Cursor models that cannot see images natively. OpenCodex routes them through the vision
|
|
118
|
+
* sidecar (the catalog still advertises image so Codex can attach). Evidence:
|
|
119
|
+
* - Composer family: Cursor staff — text-only; "Model does not support images"
|
|
120
|
+
* - Auto / router modes: Cursor docs omit Images for Auto Cost; staff — pick Claude/GPT for images
|
|
121
|
+
* - glm-5.2: Cursor docs omit Images; Z.ai GLM-5.2 is text-only (vision is GLM-5V)
|
|
122
|
+
* - glm-5.3: same family; seeded as text-only ahead of Cursor's lineup update
|
|
123
|
+
*
|
|
124
|
+
* Composer ids are enumerated explicitly — prefix wildcard matching is deliberately out of
|
|
125
|
+
* scope here; a live-discovered new Composer slug stays native-path until curated. Everyone
|
|
126
|
+
* else in the static seed (Claude, Gemini, GPT, Kimi, Grok) takes SelectedImage. Other
|
|
127
|
+
* live-discovered ids stay unclassified (native path) until curated.
|
|
128
|
+
*/
|
|
129
|
+
export const CURSOR_NO_VISION_MODELS = [
|
|
130
|
+
...CURSOR_ROUTER_MODEL_IDS,
|
|
131
|
+
"composer-1",
|
|
132
|
+
"composer-2.5",
|
|
133
|
+
"composer-2.5-fast",
|
|
134
|
+
"glm-5.2",
|
|
135
|
+
"glm-5.3",
|
|
136
|
+
] as const;
|
|
137
|
+
|
|
106
138
|
/** Wire id Cursor Connect expects for the auto-router (GetUsableModels returns `default`, not `auto`). */
|
|
107
139
|
export const CURSOR_AUTO_WIRE_MODEL_ID = "default";
|
|
108
140
|
|
|
@@ -130,6 +162,25 @@ export function cursorCodexToWireModelId(modelId: string): string {
|
|
|
130
162
|
return cursorWireModelSelection(modelId).modelId;
|
|
131
163
|
}
|
|
132
164
|
|
|
165
|
+
/**
|
|
166
|
+
* Synthetic ultra/big-context picker marker (devlog 260826 070). A `cursor/<base>-1m` row is a
|
|
167
|
+
* picker-only variant: the wire request keeps `<base>` (plus effort suffix) and turns on Cursor
|
|
168
|
+
* Max Mode instead. Only ids listed here are treated as synthetic — a real upstream wire id that
|
|
169
|
+
* happens to end in `-1m` never collides because it will not be in this set.
|
|
170
|
+
*/
|
|
171
|
+
export const CURSOR_ULTRA_1M_MODEL_IDS: ReadonlySet<string> = new Set([
|
|
172
|
+
"kimi-k3-1m",
|
|
173
|
+
]);
|
|
174
|
+
|
|
175
|
+
const CURSOR_ULTRA_1M_SUFFIX = "-1m";
|
|
176
|
+
|
|
177
|
+
/** Resolve a synthetic ultra marker id to its wire base, or undefined for ordinary ids. */
|
|
178
|
+
export function cursorUltraBaseModelId(modelId: string): string | undefined {
|
|
179
|
+
const normalized = modelId.startsWith("cursor/") ? modelId.slice("cursor/".length) : modelId;
|
|
180
|
+
if (!CURSOR_ULTRA_1M_MODEL_IDS.has(normalized)) return undefined;
|
|
181
|
+
return normalized.slice(0, -CURSOR_ULTRA_1M_SUFFIX.length);
|
|
182
|
+
}
|
|
183
|
+
|
|
133
184
|
/**
|
|
134
185
|
* Cursor-native wire models keep server-side conversation state reliably.
|
|
135
186
|
* External models (gpt/claude/gemini/grok families and similar) are more brittle on resumeAction.
|
|
@@ -146,6 +197,24 @@ export function isCursorExternalWireModel(modelId: string): boolean {
|
|
|
146
197
|
return !isCursorNativeWireModel(modelId);
|
|
147
198
|
}
|
|
148
199
|
|
|
200
|
+
/**
|
|
201
|
+
* Native composer models whose tool-result continuation must still be sent as a
|
|
202
|
+
* userMessageAction with the plain "Continue:" text instead of a bare resumeAction.
|
|
203
|
+
*
|
|
204
|
+
* Observed on live Cursor Connect traffic (2026-08-20): `composer-2.5` (the
|
|
205
|
+
* standard, non-fast build) resumes a tool-result turn with server-side native
|
|
206
|
+
* tool calls (read/grep/exec) instead of answering, or completes with zero text
|
|
207
|
+
* (empty `content` + `stop`). `composer-2.5-fast` answers correctly on the same
|
|
208
|
+
* resumeAction path, so only the affected id is listed here. Sending the same
|
|
209
|
+
* continuation as an explicit user message (external path) makes the model
|
|
210
|
+
* answer reliably.
|
|
211
|
+
*/
|
|
212
|
+
export function cursorNeedsExternalToolContinuation(modelId: string): boolean {
|
|
213
|
+
if (isCursorExternalWireModel(modelId)) return true;
|
|
214
|
+
const wire = cursorCodexToWireModelId(modelId).trim().toLowerCase();
|
|
215
|
+
return wire === "composer-2.5";
|
|
216
|
+
}
|
|
217
|
+
|
|
149
218
|
function stripCursorEffortSuffix(wireModelId: string): string {
|
|
150
219
|
const suffixes = [...CANONICAL_EFFORT_SUFFIXES].sort((a, b) => b.length - a.length);
|
|
151
220
|
for (const suffix of suffixes) {
|
|
@@ -155,6 +224,13 @@ function stripCursorEffortSuffix(wireModelId: string): string {
|
|
|
155
224
|
return wireModelId;
|
|
156
225
|
}
|
|
157
226
|
|
|
227
|
+
/** Compare Cursor wire models without effort suffix or the grok cursor- request prefix. */
|
|
228
|
+
export function cursorCheckpointModelAffinityId(modelId: string): string {
|
|
229
|
+
const wire = cursorCodexToWireModelId(modelId).trim().toLowerCase();
|
|
230
|
+
const withoutPrefix = wire.startsWith("cursor-") ? wire.slice("cursor-".length) : wire;
|
|
231
|
+
return stripCursorEffortSuffix(withoutPrefix);
|
|
232
|
+
}
|
|
233
|
+
|
|
158
234
|
export function isCursorRouterModelId(modelId: string): boolean {
|
|
159
235
|
return (CURSOR_ROUTER_MODEL_IDS as readonly string[]).includes(modelId);
|
|
160
236
|
}
|
|
@@ -165,10 +241,25 @@ export function filterCursorConfiguredModelsByLiveDiscovery<T extends { id: stri
|
|
|
165
241
|
liveIds: readonly string[],
|
|
166
242
|
): T[] {
|
|
167
243
|
return configured.filter(model =>
|
|
168
|
-
|
|
244
|
+
!CURSOR_KNOWN_UNCALLABLE_MODEL_IDS.has(model.id)
|
|
245
|
+
&& (
|
|
246
|
+
isCursorRouterModelId(model.id)
|
|
247
|
+
// Synthetic ultra rows ride their base model's account availability.
|
|
248
|
+
|| isCursorModelAvailableForAccount(cursorUltraBaseModelId(model.id) ?? model.id, liveIds)
|
|
249
|
+
),
|
|
169
250
|
);
|
|
170
251
|
}
|
|
171
252
|
|
|
253
|
+
/**
|
|
254
|
+
* Models GetUsableModels advertises but whose every Run returns not_found (catalog honesty,
|
|
255
|
+
* devlog 260826_cursor_responses_gap 060). The claude-opus-5 REGULAR wire family is the known
|
|
256
|
+
* case (probes 2026-08-26: 100% not_found while -fast/-thinking succeed) — under the umbrella
|
|
257
|
+
* catalog (devlog 260828) that quarantine moved to the RESOLVER level: the capability marks the
|
|
258
|
+
* regular VARIANT quarantined, the bare slug routes the healthy thinking variant, and the base
|
|
259
|
+
* row stays in the seed. This row-level set stays for future whole-base quarantines.
|
|
260
|
+
*/
|
|
261
|
+
export const CURSOR_KNOWN_UNCALLABLE_MODEL_IDS: ReadonlySet<string> = new Set([]);
|
|
262
|
+
|
|
172
263
|
export const CURSOR_STATIC_MODELS: readonly CursorModelInfo[] = normalizeCursorModels([
|
|
173
264
|
// Context windows and the model lineup mirror Cursor's public models/pricing docs plus the jawcode
|
|
174
265
|
// SOT (../jawcode/packages/ai/src/models.json, `cursor` provider), which mirrors the real
|
|
@@ -180,20 +271,26 @@ export const CURSOR_STATIC_MODELS: readonly CursorModelInfo[] = normalizeCursorM
|
|
|
180
271
|
// gemini/grok/kimi-k2.7/gpt-5-mini are reasoning models in the SOT but are sent bare (no tier picker).
|
|
181
272
|
...CURSOR_ROUTER_MODEL_IDS.map(id => ({ id, contextWindow: CONTEXT_200K, supportsReasoningEffort: false })),
|
|
182
273
|
|
|
183
|
-
|
|
274
|
+
// Umbrella seed (devlog 260828_cursor_umbrella_catalog): one row per BASE
|
|
275
|
+
// model. Thinking merges into the base (the resolver routes the thinking
|
|
276
|
+
// variant); fast / thinking-fast / -1m stay routable as aliases but add no
|
|
277
|
+
// rows. Windows follow CURSOR_CAPABILITIES where the base is cataloged.
|
|
278
|
+
{ id: "claude-sonnet-5", contextWindow: CONTEXT_1M, supportsReasoningEffort: true },
|
|
184
279
|
{ id: "claude-4-sonnet", contextWindow: CONTEXT_200K },
|
|
185
280
|
{ id: "claude-4-sonnet-1m", contextWindow: CONTEXT_1M },
|
|
186
281
|
{ id: "claude-4.5-haiku", contextWindow: CONTEXT_200K },
|
|
187
282
|
{ id: "claude-4.5-sonnet", contextWindow: CONTEXT_200K },
|
|
188
283
|
{ id: "claude-4.5-opus", contextWindow: CONTEXT_200K, supportsReasoningEffort: true },
|
|
189
|
-
{ id: "claude-4.6-opus", contextWindow:
|
|
190
|
-
{ id: "claude-4.6-sonnet", contextWindow:
|
|
191
|
-
{ id: "claude-opus-4-7", contextWindow:
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
284
|
+
{ id: "claude-4.6-opus", contextWindow: CONTEXT_1M, supportsReasoningEffort: true },
|
|
285
|
+
{ id: "claude-4.6-sonnet", contextWindow: CONTEXT_1M, supportsReasoningEffort: true },
|
|
286
|
+
{ id: "claude-opus-4-7", contextWindow: CONTEXT_1M, supportsReasoningEffort: true },
|
|
287
|
+
{ id: "claude-opus-4-8", contextWindow: CONTEXT_1M, supportsReasoningEffort: true },
|
|
288
|
+
// claude-opus-5: regular variant is quarantined (not_found on every Run) but
|
|
289
|
+
// the umbrella row routes the THINKING variant, which is live — so the base
|
|
290
|
+
// row returns to the seed under the umbrella (resolver never sends the
|
|
291
|
+
// quarantined regular wire id for the bare slug).
|
|
292
|
+
{ id: "claude-opus-5", contextWindow: CONTEXT_1M, supportsReasoningEffort: true },
|
|
293
|
+
{ id: "claude-fable-5", contextWindow: CONTEXT_1M, supportsReasoningEffort: true },
|
|
197
294
|
|
|
198
295
|
{ id: "composer-1", contextWindow: CONTEXT_200K },
|
|
199
296
|
{ id: "composer-2.5", contextWindow: CONTEXT_200K },
|
|
@@ -205,6 +302,10 @@ export const CURSOR_STATIC_MODELS: readonly CursorModelInfo[] = normalizeCursorM
|
|
|
205
302
|
{ id: "gemini-3-pro-image-preview", contextWindow: CONTEXT_200K },
|
|
206
303
|
{ id: "gemini-3.1-pro", contextWindow: CONTEXT_GEMINI },
|
|
207
304
|
{ id: "gemini-3.5-flash", contextWindow: CONTEXT_200K },
|
|
305
|
+
// 260825 live GetUsableModels: both ship only as effort-suffixed ids, so each exposes a tier
|
|
306
|
+
// picker. 3.6 is the only Cursor model with a `minimal` rung.
|
|
307
|
+
{ id: "gemini-3.6-flash", contextWindow: CONTEXT_GEMINI, supportsReasoningEffort: true },
|
|
308
|
+
{ id: "gemini-3.7-flash", contextWindow: CONTEXT_GEMINI, supportsReasoningEffort: true },
|
|
208
309
|
|
|
209
310
|
{ id: "gpt-5-codex", contextWindow: CONTEXT_272K },
|
|
210
311
|
{ id: "gpt-5-fast", contextWindow: CONTEXT_272K },
|
|
@@ -233,13 +334,20 @@ export const CURSOR_STATIC_MODELS: readonly CursorModelInfo[] = normalizeCursorM
|
|
|
233
334
|
// Conflict resolution (260709): keep the refreshed 1M context + kimi-k2.7-code from de12fc8,
|
|
234
335
|
// take PR #73's supportsReasoningEffort for glm-5.2 (its effort-map tiers landed with the PR).
|
|
235
336
|
{ id: "glm-5.2", contextWindow: CONTEXT_1M, supportsReasoningEffort: true },
|
|
337
|
+
// 260814 preemptive: glm-5.3 seeded ahead of Cursor's lineup update (mirrors glm-5.2).
|
|
338
|
+
{ id: "glm-5.3", contextWindow: CONTEXT_1M, supportsReasoningEffort: true },
|
|
236
339
|
{ id: "kimi-k2.7-code", contextWindow: CONTEXT_262K },
|
|
237
340
|
// kimi-k3: cursor.com/docs/models/kimi-k3; account-verified via GetUsableModels (2026-07-28) —
|
|
238
341
|
// ships only as effort-suffixed kimi-k3-{low,high,max}, so the tier picker is exposed.
|
|
239
|
-
|
|
342
|
+
// kimi-k3 folds the old synthetic kimi-k3-1m row into the umbrella: the base
|
|
343
|
+
// is maxModeVerified (user-verified 1M on the Ultra plan, devlog 260826/025),
|
|
344
|
+
// so the ultra effort rung arms Max Mode on the wire and the separate picker
|
|
345
|
+
// row is gone. cursor/kimi-k3-1m stays routable as an alias.
|
|
346
|
+
{ id: "kimi-k3", contextWindow: CONTEXT_1M, supportsReasoningEffort: true },
|
|
240
347
|
|
|
241
348
|
{ id: "grok-4.5", contextWindow: 500_000, supportsReasoningEffort: true },
|
|
242
|
-
|
|
349
|
+
// 260813 preemptive: grok-4.6 seeded ahead of Cursor's lineup update (mirrors grok-4.5).
|
|
350
|
+
{ id: "grok-4.6", contextWindow: 500_000, supportsReasoningEffort: true },
|
|
243
351
|
]);
|
|
244
352
|
|
|
245
353
|
export function cursorModelIds(models: readonly CursorModelInfo[] = CURSOR_STATIC_MODELS): string[] {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Cursor model ids encode the reasoning effort as a suffix (`claude-4.6-opus-high`), and the available
|
|
5
5
|
* tiers differ per model — `claude-4.6-opus` tops out at `-max`, `claude-opus-4-8` at `-xhigh`,
|
|
6
6
|
* `claude-4.6-sonnet` only has `-medium`, and most `composer`/`gemini` models take no suffix at all.
|
|
7
|
-
* Grok Fast puts its mode marker after the effort (`grok-4.
|
|
7
|
+
* Grok Fast puts its mode marker after the effort (`grok-4.6-xhigh-fast`). A bare id for a model that
|
|
8
8
|
* requires a suffix is rejected `ERROR_BAD_MODEL_NAME` (devlog 350.105).
|
|
9
9
|
*
|
|
10
10
|
* Canonical effort order is always low < medium < high < xhigh < max (max is the top tier, confirmed
|
|
@@ -24,17 +24,50 @@ const CURSOR_MODEL_EFFORT_TIERS: Record<string, readonly string[]> = {
|
|
|
24
24
|
// against Anthropic's effort ladder docs and Cursor's live model lineup.
|
|
25
25
|
"claude-fable-5": ["low", "medium", "high", "xhigh", "max"],
|
|
26
26
|
"claude-opus-4-7": ["low", "medium", "high", "xhigh", "max"],
|
|
27
|
+
// Opus Fast tiers from the 260822 GetUsableModels dump (devlog .../300): the wire
|
|
28
|
+
// exposes {base-without-fast}-{effort}-fast only; suffix derivation at the bottom of
|
|
29
|
+
// this file produces those ids. opus-5-fast has no xhigh/max (non-thinking) yet.
|
|
30
|
+
"claude-opus-4-7-fast": ["low", "medium", "high", "xhigh", "max"],
|
|
27
31
|
"claude-opus-4-8": ["low", "medium", "high", "xhigh", "max"],
|
|
32
|
+
"claude-opus-4-8-fast": ["low", "medium", "high", "xhigh", "max"],
|
|
28
33
|
"claude-opus-5": ["low", "medium", "high", "xhigh", "max"],
|
|
34
|
+
"claude-opus-5-fast": ["low", "medium", "high"],
|
|
29
35
|
"claude-sonnet-5": ["low", "medium", "high", "xhigh", "max"],
|
|
30
36
|
"glm-5.2": ["high", "max"],
|
|
37
|
+
// 260825 live GetUsableModels. gemini-3.6-flash is the only Cursor model exposing `minimal`;
|
|
38
|
+
// listing it here is also what admits the suffix into CANONICAL_EFFORT_SUFFIXES below.
|
|
39
|
+
"gemini-3.6-flash": ["minimal", "low", "medium", "high"],
|
|
40
|
+
"gemini-3.7-flash": ["low", "medium", "high"],
|
|
41
|
+
// Explicit-thinking variants (260825 live roster). Tiers are the rungs the wire actually
|
|
42
|
+
// lists for each family, which is not always the same set the non-thinking id carries:
|
|
43
|
+
// 4.6-opus thinks only at high/max, 4.5-opus only at high, 4.6-sonnet only at medium.
|
|
44
|
+
"claude-opus-5-thinking": ["low", "medium", "high", "xhigh", "max"],
|
|
45
|
+
"claude-opus-5-thinking-fast": ["low", "medium", "high", "xhigh", "max"],
|
|
46
|
+
"claude-opus-4-8-thinking": ["low", "medium", "high", "xhigh", "max"],
|
|
47
|
+
"claude-opus-4-8-thinking-fast": ["low", "medium", "high", "xhigh", "max"],
|
|
48
|
+
"claude-opus-4-7-thinking": ["low", "medium", "high", "xhigh", "max"],
|
|
49
|
+
"claude-opus-4-7-thinking-fast": ["low", "medium", "high", "xhigh", "max"],
|
|
50
|
+
"claude-sonnet-5-thinking": ["low", "medium", "high", "xhigh", "max"],
|
|
51
|
+
"claude-fable-5-thinking": ["low", "medium", "high", "xhigh", "max"],
|
|
52
|
+
"claude-4.6-opus-thinking": ["high", "max"],
|
|
53
|
+
"claude-4.5-opus-thinking": ["high"],
|
|
54
|
+
"claude-4.6-sonnet-thinking": ["medium"],
|
|
55
|
+
// 260814 preemptive: glm-5.3 seeded ahead of Cursor's lineup update. Unlike 5.2, Z.AI folds
|
|
56
|
+
// 5.3 efforts into low/high/max (docs.z.ai/devpack/latest-model), so `low` is a real tier.
|
|
57
|
+
"glm-5.3": ["low", "high", "max"],
|
|
31
58
|
// GetUsableModels (2026-07-28) lists kimi-k3 only as effort-suffixed kimi-k3-{low,high,max};
|
|
32
59
|
// the bare id returns not_found. Tiers mirror the native Kimi provider's K3 ladder.
|
|
33
60
|
"kimi-k3": ["low", "high", "max"],
|
|
61
|
+
// Synthetic ultra picker variant (devlog 260826 070): same tier ladder as kimi-k3; the -1m
|
|
62
|
+
// marker is stripped before wire-id composition, so these tiers never form a wire suffix.
|
|
63
|
+
"kimi-k3-1m": ["low", "high", "max"],
|
|
34
64
|
// Cursor renamed the Grok 4.5 slugs to cursor-grok-4.5-{low,medium,high} and
|
|
35
65
|
// cursor-grok-4.5-{low,medium,high}-fast. The bare Fast id returns not_found.
|
|
36
66
|
"grok-4.5": ["low", "medium", "high"],
|
|
37
67
|
"grok-4.5-fast": ["low", "medium", "high"],
|
|
68
|
+
// Cursor's 260813 lineup exposes Grok 4.6 Extra High in both regular and Fast forms.
|
|
69
|
+
"grok-4.6": ["low", "medium", "high", "xhigh"],
|
|
70
|
+
"grok-4.6-fast": ["low", "medium", "high", "xhigh"],
|
|
38
71
|
"gpt-5.1": ["low", "high"],
|
|
39
72
|
"gpt-5.1-codex-max": ["low", "medium", "high", "xhigh"],
|
|
40
73
|
"gpt-5.1-codex-mini": ["low", "high"],
|
|
@@ -59,6 +92,46 @@ export const CANONICAL_EFFORT_SUFFIXES: ReadonlySet<string> = new Set([
|
|
|
59
92
|
|
|
60
93
|
const CANONICAL_CODEX_EFFORT_ORDER = ["low", "medium", "high", "xhigh", "max"] as const;
|
|
61
94
|
|
|
95
|
+
/**
|
|
96
|
+
* Cursor's explicit-thinking variants, exposed as first-class Codex model ids the same way the
|
|
97
|
+
* `-fast` families were.
|
|
98
|
+
*
|
|
99
|
+
* `source` is the id whose wire name the variant is built from; `order` is where Cursor puts the
|
|
100
|
+
* thinking marker relative to the effort rung. All three shapes exist in the live roster
|
|
101
|
+
* (GetUsableModels, 260825), and using the wrong one is rejected with ERROR_BAD_MODEL_NAME:
|
|
102
|
+
*
|
|
103
|
+
* thinking-then-effort claude-opus-5-thinking-high, claude-opus-5-thinking-high-fast
|
|
104
|
+
* effort-then-thinking claude-4.6-opus-high-thinking
|
|
105
|
+
* bare claude-4.5-sonnet-thinking (the model has no effort rung)
|
|
106
|
+
*/
|
|
107
|
+
const CURSOR_THINKING_FAMILIES: Readonly<Record<string, { source: string; order: "thinking-then-effort" | "effort-then-thinking" | "bare" }>> = {
|
|
108
|
+
"claude-opus-5-thinking": { source: "claude-opus-5", order: "thinking-then-effort" },
|
|
109
|
+
"claude-opus-5-thinking-fast": { source: "claude-opus-5-fast", order: "thinking-then-effort" },
|
|
110
|
+
"claude-opus-4-8-thinking": { source: "claude-opus-4-8", order: "thinking-then-effort" },
|
|
111
|
+
"claude-opus-4-8-thinking-fast": { source: "claude-opus-4-8-fast", order: "thinking-then-effort" },
|
|
112
|
+
"claude-opus-4-7-thinking": { source: "claude-opus-4-7", order: "thinking-then-effort" },
|
|
113
|
+
"claude-opus-4-7-thinking-fast": { source: "claude-opus-4-7-fast", order: "thinking-then-effort" },
|
|
114
|
+
"claude-sonnet-5-thinking": { source: "claude-sonnet-5", order: "thinking-then-effort" },
|
|
115
|
+
"claude-fable-5-thinking": { source: "claude-fable-5", order: "thinking-then-effort" },
|
|
116
|
+
"claude-4.6-opus-thinking": { source: "claude-4.6-opus", order: "effort-then-thinking" },
|
|
117
|
+
"claude-4.5-opus-thinking": { source: "claude-4.5-opus", order: "effort-then-thinking" },
|
|
118
|
+
"claude-4.6-sonnet-thinking": { source: "claude-4.6-sonnet", order: "effort-then-thinking" },
|
|
119
|
+
"claude-4.5-sonnet-thinking": { source: "claude-4.5-sonnet", order: "bare" },
|
|
120
|
+
"claude-4-sonnet-thinking": { source: "claude-4-sonnet", order: "bare" },
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/** Codex-facing ids for Cursor's explicit-thinking variants. */
|
|
124
|
+
export const CURSOR_THINKING_MODEL_IDS = Object.keys(CURSOR_THINKING_FAMILIES);
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Picker order, which is the canonical ladder plus the declared sentinels that rank below `low`.
|
|
128
|
+
*
|
|
129
|
+
* `cursorModelEffortLadder` filters against this, so a tier absent from it is silently dropped
|
|
130
|
+
* from the Codex picker even though `cursorEffortSuffix` would happily send it. That is what
|
|
131
|
+
* hid `gemini-3.6-flash-minimal`, the one Cursor model with a `minimal` rung.
|
|
132
|
+
*/
|
|
133
|
+
const CURSOR_PICKER_EFFORT_ORDER = ["minimal", ...CANONICAL_CODEX_EFFORT_ORDER] as const;
|
|
134
|
+
|
|
62
135
|
function normalizeRequestedEffort(reasoning: string | undefined): string | undefined {
|
|
63
136
|
const normalized = reasoning?.toLowerCase();
|
|
64
137
|
return normalized === "ultra" ? "max" : normalized;
|
|
@@ -107,7 +180,7 @@ export function cursorModelEffortLadder(baseModelId: string): string[] | undefin
|
|
|
107
180
|
const tiers = CURSOR_MODEL_EFFORT_TIERS[baseModelId];
|
|
108
181
|
if (!tiers || tiers.length === 0) return undefined;
|
|
109
182
|
const tierSet = new Set(tiers);
|
|
110
|
-
return
|
|
183
|
+
return CURSOR_PICKER_EFFORT_ORDER.filter(effort => tierSet.has(effort));
|
|
111
184
|
}
|
|
112
185
|
|
|
113
186
|
/** Base models known to carry a reasoning-effort suffix (everything else is sent bare). */
|
|
@@ -116,12 +189,41 @@ export function cursorModelHasEffortTiers(baseModelId: string): boolean {
|
|
|
116
189
|
}
|
|
117
190
|
|
|
118
191
|
/**
|
|
119
|
-
* Compose
|
|
120
|
-
*
|
|
192
|
+
* Compose Cursor's flattened model id from a Codex-facing base id and effort tier. Discovery uses
|
|
193
|
+
* this for the ids returned by GetUsableModels. Parameterized Grok Fast requests bypass the flat id
|
|
194
|
+
* and send the base model plus requested_model parameters instead.
|
|
121
195
|
*/
|
|
122
196
|
export function cursorWireModelIdWithEffort(baseModelId: string, effortSuffix: string): string {
|
|
197
|
+
const thinking = CURSOR_THINKING_FAMILIES[baseModelId];
|
|
198
|
+
if (thinking) {
|
|
199
|
+
const { source, order } = thinking;
|
|
200
|
+
// Cursor writes the thinking marker on either side of the effort depending on family
|
|
201
|
+
// (measured against GetUsableModels, 260825):
|
|
202
|
+
// thinking-then-effort claude-opus-5-thinking-high, ...-thinking-high-fast
|
|
203
|
+
// effort-then-thinking claude-4.6-opus-high-thinking
|
|
204
|
+
// bare claude-4.5-sonnet-thinking (no effort rung at all)
|
|
205
|
+
// Sending the wrong order returns ERROR_BAD_MODEL_NAME, so this is not cosmetic.
|
|
206
|
+
if (order === "bare") return `${source}-thinking`;
|
|
207
|
+
if (order === "effort-then-thinking") return `${source}-${effortSuffix}-thinking`;
|
|
208
|
+
if (source.endsWith("-fast")) {
|
|
209
|
+
const stem = source.slice(0, -"-fast".length);
|
|
210
|
+
return `${stem}-thinking-${effortSuffix}-fast`;
|
|
211
|
+
}
|
|
212
|
+
return `${source}-thinking-${effortSuffix}`;
|
|
213
|
+
}
|
|
123
214
|
if (baseModelId.endsWith("-fast")) {
|
|
124
215
|
return `${baseModelId.slice(0, -"-fast".length)}-${effortSuffix}-fast`;
|
|
125
216
|
}
|
|
126
217
|
return `${baseModelId}-${effortSuffix}`;
|
|
127
218
|
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Compose the exact flattened id sent by AgentService/Run. Discovery normalizes Cursor's optional
|
|
222
|
+
* `cursor-` prefix only for catalog matching, but regular Grok 4.5 requests require that prefix on
|
|
223
|
+
* the wire. Keep this separate from {@link cursorWireModelIdWithEffort} so discovery can continue
|
|
224
|
+
* comparing canonical, prefix-free ids. Grok Fast uses requested_model parameters instead.
|
|
225
|
+
*/
|
|
226
|
+
export function cursorRequestWireModelIdWithEffort(baseModelId: string, effortSuffix: string): string {
|
|
227
|
+
const flattened = cursorWireModelIdWithEffort(baseModelId, effortSuffix);
|
|
228
|
+
return baseModelId === "grok-4.5" || baseModelId === "grok-4.6" ? `cursor-${flattened}` : flattened;
|
|
229
|
+
}
|