diff --git a/docs-site/src/content/docs/guides/codex-app-models.md b/docs-site/src/content/docs/guides/codex-app-models.md index fdbd04f38..fedb39f47 100644 --- a/docs-site/src/content/docs/guides/codex-app-models.md +++ b/docs-site/src/content/docs/guides/codex-app-models.md @@ -132,7 +132,7 @@ metadata instead of an older-template approximation. | Codex login (explicit Daybreak forward row) | `openai/gpt-daybreak-blue-latest` only when the exact `customModels` row is configured on the canonical `openai` provider. It keeps the Daybreak wire id and uses the pinned Sol capability snapshot (372,000 context; 334,800 automatic compaction). | | OpenAI (API key) | Exactly ten namespaced rows: `gpt-5.5`, `gpt-5.6`, Sol/Terra/Luna, the three `*-pro` virtual ids, and the two Daybreak aliases (1,050,000 context; 922,000 max input for all ten) | | OpenRouter | `openrouter/openai/gpt-5.6-sol`, `openrouter/openai/gpt-5.6-terra`, `openrouter/openai/gpt-5.6-luna` (1,050,000) | -| Cursor | Static fallback includes `cursor/gpt-5.6-sol`, `cursor/gpt-5.6-terra`, and `cursor/gpt-5.6-luna` (1,000,000), plus `cursor/grok-4.5` and `cursor/grok-4.5-fast` (500,000); live account discovery decides which remain visible. | +| Cursor | Static fallback includes `cursor/gpt-5.6-sol`, `cursor/gpt-5.6-terra`, and `cursor/gpt-5.6-luna` (1,000,000), plus regular/Fast rows for Grok 4.5 and 4.6 (500,000); 4.6 adds `xhigh`, and live account discovery decides which rows remain visible. | | xAI | Live discovery is authoritative. The fallback catalog includes `xai/grok-4.6` and defaults to `xai/grok-4.5`; both have 500,000-token windows. Grok 4.6 exposes `low` / `medium` / `high` / `xhigh` (upstream default: `high`), while Grok 4.5 stops at `high`. | The pinned GPT-5.6 entries preserve the exact upstream ladder. Sol and Terra expose `low` through diff --git a/docs-site/src/content/docs/guides/providers.md b/docs-site/src/content/docs/guides/providers.md index 46348e537..d7f924a3f 100644 --- a/docs-site/src/content/docs/guides/providers.md +++ b/docs-site/src/content/docs/guides/providers.md @@ -503,8 +503,11 @@ Cursor is tracked separately as an experimental adapter. `adapter: "cursor"` app and the dashboard Add Provider picker as an experimental local config entry with Cursor's static fallback model catalog metadata. When a Cursor access token is configured, opencodex uses Cursor's live HTTP/2 transport. Its bundled fallback seed includes `gpt-5.6-sol` / `terra` / `luna` (1M context), -`grok-4.5` / `grok-4.5-fast` (500K), and `kimi-k3` (262K); live discovery decides which remain -visible for the account. Cursor serves Kimi K3 only as effort-suffixed wire ids, so +regular/Fast rows for Grok 4.5 and 4.6 (500K), and `kimi-k3` (262K); live discovery decides which +remain visible for the account. Grok 4.6 exposes `low` / `medium` / `high` / `xhigh` in both forms, +while 4.5 stops at `high`. Fast requests send the matching base Grok model with separate `effort` +and `fast=true` `requested_model` parameters; flattened `cursor-grok-{version}-{effort}-fast` ids +are discovery and picker identities only. Cursor serves Kimi K3 only as effort-suffixed wire ids, so `cursor/kimi-k3` exposes a `low` / `high` / `max` ladder and defaults to `max`, matching the model's documented API default. Cursor server-driven native read/write/delete/ls/grep/shell/fetch execution is disabled by default because it bypasses Codex's approval and sandbox path; set diff --git a/docs-site/src/content/docs/ja/guides/codex-app-models.md b/docs-site/src/content/docs/ja/guides/codex-app-models.md index 8a992e027..af9d931ab 100644 --- a/docs-site/src/content/docs/ja/guides/codex-app-models.md +++ b/docs-site/src/content/docs/ja/guides/codex-app-models.md @@ -56,7 +56,7 @@ visibility = "list" | Codex ログイン (account-qualified 行が有効で、有効な selector あり) | 有効な selector とサポート対象 native model の各組み合わせに `/` 行を表示します。各行は対応付けられたアカウントだけを使用し、bare native 行はピッカーで非表示になります。Native metadata と context window は保持されます。 | | OpenAI (API キー) |正確に 8 つの名前空間行: `gpt-5.5`、`gpt-5.6`、Sol/Terra/Luna、および 3 つの `*-pro` 仮想 ID (コンテキスト 1,050,000、8 つすべての最大入力 922,000) | |オープンルーター | `openrouter/openai/gpt-5.6-sol`、`openrouter/openai/gpt-5.6-terra`、`openrouter/openai/gpt-5.6-luna` (1,050,000) | -|カーソル |静的フォールバックには、`cursor/gpt-5.6-sol`、`cursor/gpt-5.6-terra`、および `cursor/gpt-5.6-luna` (1,000,000)、さらに `cursor/grok-4.5` および `cursor/grok-4.5-fast` (500,000) が含まれます。ライブアカウントの検出により、どれが表示されたままになるかが決まります。 | +| Cursor | 静的フォールバックには `cursor/gpt-5.6-sol`、`cursor/gpt-5.6-terra`、`cursor/gpt-5.6-luna` (1,000,000) と、Grok 4.5 / 4.6 の通常・Fast 行 (500,000) が含まれます。4.6 は `xhigh` も公開し、ライブアカウントの検出によって表示される行が決まります。 | |かおるライブディスカバリーには信頼性があります。フォールバック カタログのデフォルトは、500,000 トークン ウィンドウと `low` / `medium` / `high` 推論制御を備えた `xai/grok-4.5` です。 | 固定された GPT-5.6 エントリは、正確な上流ラダーを保存します。 Sol と Terra は `low` から `ultra` を公開します。ルナは`max`で止まります。 Sol のデフォルトは `low`、Terra と Luna のデフォルトは `medium` です。 `ultra` は、最大限の推論とプロアクティブな委任を目的としたクライアント向けの選択肢であり、`max` としてバックエンドに到達します。ピッカーのエントリは、カタログの準備ができていることを意味するだけです。接続されたアカウントまたは API キーには、そのモデルを使用する資格がまだある必要があります。 diff --git a/docs-site/src/content/docs/ja/guides/providers.md b/docs-site/src/content/docs/ja/guides/providers.md index 54db46fdb..1735b2c54 100644 --- a/docs-site/src/content/docs/ja/guides/providers.md +++ b/docs-site/src/content/docs/ja/guides/providers.md @@ -391,8 +391,11 @@ Cursor は別の実験的アダプターとして追跡します。`adapter: "cu Provider ピッカーに実験的 local config 項目として表示され、Cursor の静的フォールバックモデルカタログ メタデータを保存します。Cursor アクセストークンを設定すると opencodex は Cursor ライブ HTTP/2 トランスポートを 使います。バンドル済みフォールバックリストには 1M コンテキストの `gpt-5.6-sol` / `terra` / `luna`、500K コンテキストの -`grok-4.5` / `grok-4.5-fast`、262K コンテキストの `kimi-k3` が含まれ、ライブ探索結果に基づき現在の -アカウントに表示するモデルを決定します。Cursor は Kimi K3 を effort サフィックス付きの wire id +Grok 4.5 / 4.6 の通常・Fast 行、262K コンテキストの `kimi-k3` が含まれ、ライブ探索結果に基づき現在の +アカウントに表示するモデルを決定します。Grok 4.6 は両形式で `low` / `medium` / `high` / `xhigh` を公開し、 +4.5 は `high` までです。Fast リクエストは対応する Grok ベースモデルを、独立した `effort` と `fast=true` の +`requested_model` パラメータとともに送信します。平坦化された `cursor-grok-{version}-{effort}-fast` id は +探索と picker の識別子としてのみ使われます。Cursor は Kimi K3 を effort サフィックス付きの wire id としてのみ提供するため、`cursor/kimi-k3` は `low` / `high` / `max` のラダーを公開し、既定値はモデル ドキュメントの API 既定値と同じ `max` です。Cursor サーバーが直接送るネイティブ read/write/delete/ls/grep/shell/fetch 実行は Codex 承認とサンドボックス経路をバイパスするためデフォルトで無効です。信頼できるローカル実験でのみ diff --git a/docs-site/src/content/docs/ko/guides/codex-app-models.md b/docs-site/src/content/docs/ko/guides/codex-app-models.md index e8476b1b7..deabcbe6a 100644 --- a/docs-site/src/content/docs/ko/guides/codex-app-models.md +++ b/docs-site/src/content/docs/ko/guides/codex-app-models.md @@ -110,7 +110,7 @@ GPT-5.6에만 사용합니다. 오래된 템플릿으로 근사하지 않고 모 | Codex 로그인(명시적 Daybreak forward 행) | canonical `openai` provider에 정확한 `customModels` 항목이 있을 때만 `openai/gpt-daybreak-blue-latest`를 표시합니다. Daybreak wire id를 유지하고 고정된 Sol capability snapshot(컨텍스트 372,000; 자동 압축점 334,800)을 사용합니다. | | OpenAI(API key) | 정확히 열 개의 네임스페이스 행: `gpt-5.5`, `gpt-5.6`, Sol/Terra/Luna, 세 개의 `*-pro` 가상 id, 두 Daybreak 별칭 (모두 컨텍스트 1,050,000; 최대 입력 922,000) | | OpenRouter | `openrouter/openai/gpt-5.6-sol`, `openrouter/openai/gpt-5.6-terra`, `openrouter/openai/gpt-5.6-luna` (1,050,000) | -| Cursor | 정적 폴백에는 `cursor/gpt-5.6-sol`, `cursor/gpt-5.6-terra`, `cursor/gpt-5.6-luna` (1,000,000)와 `cursor/grok-4.5`, `cursor/grok-4.5-fast` (500,000)가 들어갑니다. 실시간 계정 탐색이 어떤 항목을 계속 보일지 정합니다. | +| Cursor | 정적 폴백에는 `cursor/gpt-5.6-sol`, `cursor/gpt-5.6-terra`, `cursor/gpt-5.6-luna` (1,000,000)와 Grok 4.5/4.6의 일반·Fast 항목(500,000)이 들어갑니다. 4.6은 `xhigh`도 노출하며, 실시간 계정 탐색이 어떤 항목을 계속 보일지 정합니다. | | xAI | 실시간 탐색이 기준입니다. 폴백 카탈로그에는 `xai/grok-4.6`이 포함되며 기본값은 `xai/grok-4.5`입니다. 두 모델 모두 컨텍스트 창은 500,000입니다. Grok 4.6은 `low` / `medium` / `high` / `xhigh`(업스트림 기본값: `high`)를 제공하고, Grok 4.5는 `high`까지만 제공합니다. | 고정된 GPT-5.6 항목은 업스트림 ladder를 그대로 보존합니다. Sol과 Terra는 `low`부터 `ultra`까지 노출하고, diff --git a/docs-site/src/content/docs/ko/guides/providers.md b/docs-site/src/content/docs/ko/guides/providers.md index 9be3bdf6f..a6bdf205a 100644 --- a/docs-site/src/content/docs/ko/guides/providers.md +++ b/docs-site/src/content/docs/ko/guides/providers.md @@ -382,8 +382,11 @@ Cursor는 별도의 실험적 어댑터로 추적합니다. `adapter: "cursor"` Provider picker에 실험적 local config 항목으로 표시되며, Cursor의 static fallback model catalog metadata를 저장합니다. Cursor access token이 설정되면 opencodex는 Cursor live HTTP/2 transport를 사용합니다. 번들 폴백 목록에는 1M 컨텍스트의 `gpt-5.6-sol` / `terra` / `luna`, 500K 컨텍스트의 -`grok-4.5` / `grok-4.5-fast`, 262K 컨텍스트의 `kimi-k3`가 들어 있으며, 실시간 탐색 결과에 따라 -현재 계정에 표시할 모델을 결정합니다. Cursor는 Kimi K3를 effort 접미사가 붙은 wire id로만 +Grok 4.5/4.6의 일반·Fast 항목, 262K 컨텍스트의 `kimi-k3`가 들어 있으며, 실시간 탐색 결과에 따라 +현재 계정에 표시할 모델을 결정합니다. Grok 4.6은 두 형식 모두 `low` / `medium` / `high` / `xhigh`를 +노출하고 4.5는 `high`까지만 노출합니다. Fast 요청은 일치하는 Grok 기본 모델과 별도의 `effort`, +`fast=true` `requested_model` 파라미터를 전송합니다. 평탄화된 `cursor-grok-{version}-{effort}-fast` id는 +탐색 및 picker 식별자로만 사용됩니다. Cursor는 Kimi K3를 effort 접미사가 붙은 wire id로만 제공하므로 `cursor/kimi-k3`는 `low` / `high` / `max` 래더를 노출하고 기본값은 모델 문서의 API 기본값과 같은 `max`입니다. Cursor 서버가 직접 보내는 native read/write/delete/ls/grep/shell/fetch 실행은 Codex 승인 및 sandbox 경로를 우회하므로 기본적으로 비활성화되어 있습니다. 신뢰한 로컬 실험에서만 diff --git a/docs-site/src/content/docs/ru/guides/codex-app-models.md b/docs-site/src/content/docs/ru/guides/codex-app-models.md index e7fa59eb0..63856ae5a 100644 --- a/docs-site/src/content/docs/ru/guides/codex-app-models.md +++ b/docs-site/src/content/docs/ru/guides/codex-app-models.md @@ -89,7 +89,7 @@ per-model identity и метаданные вместо приближения | Вход Codex (строки с указанием аккаунта включены и есть подходящие селекторы) | По одной строке `/` для каждой пары подходящего селектора и поддерживаемой нативной модели; каждая строка использует только сопоставленный аккаунт, а bare native-строки скрыты из picker'а. Нативные метаданные и окна контекста сохраняются. | | OpenAI (API key) | Ровно восемь namespaced-строк: `gpt-5.5`, `gpt-5.6`, Sol/Terra/Luna и три виртуальных id `*-pro` (контекст 1,050,000; максимум входа 922,000 у всех восьми) | | OpenRouter | `openrouter/openai/gpt-5.6-sol`, `openrouter/openai/gpt-5.6-terra`, `openrouter/openai/gpt-5.6-luna` (1,050,000) | -| Cursor | Статический fallback включает `cursor/gpt-5.6-sol`, `cursor/gpt-5.6-terra` и `cursor/gpt-5.6-luna` (1,000,000), а также `cursor/grok-4.5` и `cursor/grok-4.5-fast` (500,000); какие из них останутся видимыми, решает live-discovery аккаунта. | +| Cursor | Статический fallback включает `cursor/gpt-5.6-sol`, `cursor/gpt-5.6-terra` и `cursor/gpt-5.6-luna` (1,000,000), а также обычные/Fast-строки Grok 4.5 и 4.6 (500,000). Для 4.6 доступен ещё `xhigh`; какие строки останутся видимыми, решает live-discovery аккаунта. | | xAI | Live-discovery авторитетно. Fallback-каталог включает `xai/grok-4.6`, а моделью по умолчанию остаётся `xai/grok-4.5`; у обеих окно 500,000 токенов. Grok 4.6 поддерживает `low` / `medium` / `high` / `xhigh` (upstream-default: `high`), а Grok 4.5 — только до `high`. | Закреплённые записи GPT-5.6 сохраняют точную upstream-лестницу. Sol и Terra дают диапазон от diff --git a/docs-site/src/content/docs/ru/guides/providers.md b/docs-site/src/content/docs/ru/guides/providers.md index 966d75dcb..c49377126 100644 --- a/docs-site/src/content/docs/ru/guides/providers.md +++ b/docs-site/src/content/docs/ru/guides/providers.md @@ -422,8 +422,12 @@ Cursor отслеживается отдельно как эксперимент `ocx init` и в селекторе Add Provider дашборда как экспериментальная запись локальной конфигурации с метаданными статического резервного каталога моделей Cursor. Когда настроен токен доступа Cursor, opencodex использует живой транспорт HTTP/2 Cursor. Его встроенный резервный список включает -`gpt-5.6-sol` / `terra` / `luna` (контекст 1M), `grok-4.5` / `grok-4.5-fast` (500K) и `kimi-k3` -(262K); живое обнаружение решает, какие из них останутся видимыми для аккаунта. Cursor отдаёт +`gpt-5.6-sol` / `terra` / `luna` (контекст 1M), обычные/Fast-строки Grok 4.5 и 4.6 (500K) и +`kimi-k3` (262K); живое обнаружение решает, какие из них останутся видимыми для аккаунта. Для +Grok 4.6 в обеих формах доступны `low` / `medium` / `high` / `xhigh`, а для 4.5 — только до `high`. +Fast-запросы передают соответствующую базовую модель Grok с отдельными параметрами `effort` и +`fast=true` в `requested_model`; плоские id `cursor-grok-{version}-{effort}-fast` служат только +идентификаторами discovery и picker. Cursor отдаёт Kimi K3 только через wire id с суффиксом усилия, поэтому `cursor/kimi-k3` предоставляет лестницу `low` / `high` / `max` и по умолчанию использует `max` — как и задокументированное значение по умолчанию в API модели. Управляемое сервером Cursor diff --git a/docs-site/src/content/docs/zh-cn/guides/codex-app-models.md b/docs-site/src/content/docs/zh-cn/guides/codex-app-models.md index 61dd5abb5..d27e5c33f 100644 --- a/docs-site/src/content/docs/zh-cn/guides/codex-app-models.md +++ b/docs-site/src/content/docs/zh-cn/guides/codex-app-models.md @@ -69,7 +69,7 @@ visibility = "list" | Codex 登录(账户限定的选择器行已启用且存在有效 selector) | 为每个有效 selector 与受支持原生模型的组合显示 `/` 行。每行只使用映射账户,裸原生行会从选择器中隐藏。原生 metadata 与 context window 会保留。 | | OpenAI(API key) | 恰好八个命名空间行:`gpt-5.5`、`gpt-5.6`、Sol/Terra/Luna,以及三个 `*-pro` 虚拟 id(八个条目均为 1,050,000 context / 922,000 max input) | | OpenRouter | `openrouter/openai/gpt-5.6-sol`、`openrouter/openai/gpt-5.6-terra`、`openrouter/openai/gpt-5.6-luna`(1,050,000) | -| Cursor | 静态回退包含 `cursor/gpt-5.6-sol`、`cursor/gpt-5.6-terra`、`cursor/gpt-5.6-luna`(1,000,000),以及 `cursor/grok-4.5` 和 `cursor/grok-4.5-fast`(500,000);实时账户发现会决定最终哪些条目仍然可见。 | +| Cursor | 静态回退包含 `cursor/gpt-5.6-sol`、`cursor/gpt-5.6-terra`、`cursor/gpt-5.6-luna`(1,000,000),以及 Grok 4.5/4.6 的普通和 Fast 条目(500,000)。4.6 还提供 `xhigh`;实时账户发现会决定最终哪些条目仍然可见。 | | xAI | 实时发现具有权威性。回退目录包含 `xai/grok-4.6`,默认模型仍为 `xai/grok-4.5`;两者的上下文窗口均为 500,000。Grok 4.6 提供 `low` / `medium` / `high` / `xhigh`(上游默认值为 `high`),Grok 4.5 最高为 `high`。 | 固定的 GPT-5.6 条目保留了精确的上游阶梯。Sol 和 Terra 暴露从 `low` 到 `ultra` 的档位;Luna 只到 `max`。Sol 默认是 `low`,Terra 和 Luna 默认是 `medium`。`ultra` 是面向客户端的最大 reasoning 加主动委派选项,在后端会以 `max` 传入。选择器里的一个条目只表示目录已经准备好:关联的账户或 API key 仍然必须有权使用该模型。 diff --git a/docs-site/src/content/docs/zh-cn/guides/providers.md b/docs-site/src/content/docs/zh-cn/guides/providers.md index 2d57170b9..b25e1284d 100644 --- a/docs-site/src/content/docs/zh-cn/guides/providers.md +++ b/docs-site/src/content/docs/zh-cn/guides/providers.md @@ -363,8 +363,11 @@ adapter。若要将没有内置默认值的模型(例如 `gpt-5.4-nano`)接 Cursor 作为单独的实验性 adapter 进行跟踪。`adapter: "cursor"` 会作为实验性本地配置出现在 `ocx init` 和 dashboard Add Provider picker 中,并保存 Cursor 的静态回退模型目录 metadata。配置 Cursor access token 后,opencodex 会使用 Cursor live HTTP/2 transport。内置回退列表包含上下文为 -1M 的 `gpt-5.6-sol` / `terra` / `luna`、上下文为 500K 的 `grok-4.5` / `grok-4.5-fast`,以及上下文为 -262K 的 `kimi-k3`;最终显示哪些模型由账号的实时发现结果决定。Cursor 只以带 effort 后缀的 wire id +1M 的 `gpt-5.6-sol` / `terra` / `luna`、上下文为 500K 的 Grok 4.5/4.6 普通与 Fast 条目,以及上下文为 +262K 的 `kimi-k3`;最终显示哪些模型由账号的实时发现结果决定。Grok 4.6 的两种形式均提供 +`low` / `medium` / `high` / `xhigh`,而 4.5 最高为 `high`。Fast 请求会发送对应的 Grok 基础模型, +并通过独立的 `effort` 与 `fast=true` `requested_model` 参数指定模式;扁平化的 +`cursor-grok-{version}-{effort}-fast` id 仅用于发现和 picker 标识。Cursor 只以带 effort 后缀的 wire id 提供 Kimi K3,因此 `cursor/kimi-k3` 暴露 `low` / `high` / `max` 阶梯,默认值为 `max`,与该模型 文档中的 API 默认值一致。Cursor 服务器直接发起的 native read/write/delete/ls/grep/shell/fetch 执行默认禁用,因为它会绕过 Codex 的 approval 和 diff --git a/docs-site/src/content/docs/zh-tw/guides/codex-app-models.md b/docs-site/src/content/docs/zh-tw/guides/codex-app-models.md index 3630f6401..b336734f4 100644 --- a/docs-site/src/content/docs/zh-tw/guides/codex-app-models.md +++ b/docs-site/src/content/docs/zh-tw/guides/codex-app-models.md @@ -91,7 +91,7 @@ GPT-5.6,以便提供每個模型真實的身份和後設資料,而不是套 | Codex 登入(啟用帳號限定列且有合格選擇器) | 每個合格選擇器與受支援的原生模型各有一列 `/`;每列只使用其對應帳號,且裸原生列會從選擇器中隱藏。原生後設資料與 context 視窗保持不變。 | | OpenAI(API key) | 恰好八個帶名稱空間的列:`gpt-5.5`、`gpt-5.6`、Sol/Terra/Luna 與三個 `*-pro` 虛擬 id(全部八個都是 1,050,000 context;922,000 max input) | | OpenRouter | `openrouter/openai/gpt-5.6-sol`、`openrouter/openai/gpt-5.6-terra`、`openrouter/openai/gpt-5.6-luna`(1,050,000) | -| Cursor | 靜態回退目錄包含 `cursor/gpt-5.6-sol`、`cursor/gpt-5.6-terra`、`cursor/gpt-5.6-luna`(1,000,000),以及 `cursor/grok-4.5`、`cursor/grok-4.5-fast`(500,000);帳號的即時發現結果決定最終顯示哪些模型。 | +| Cursor | 靜態回退目錄包含 `cursor/gpt-5.6-sol`、`cursor/gpt-5.6-terra`、`cursor/gpt-5.6-luna`(1,000,000),以及 Grok 4.5/4.6 的一般與 Fast 項目(500,000)。4.6 還提供 `xhigh`;帳號的即時發現結果決定最終顯示哪些模型。 | | xAI | 以即時發現結果為準。回退目錄包含 `xai/grok-4.6`,預設模型仍為 `xai/grok-4.5`;兩者的 context window 均為 500,000。Grok 4.6 提供 `low` / `medium` / `high` / `xhigh`(上游預設值為 `high`),Grok 4.5 最高為 `high`。 | 固定的 GPT-5.6 條目會保留精確的上游 reasoning 階梯。Sol 和 Terra 從 `low` 到 `ultra`,Luna diff --git a/docs-site/src/content/docs/zh-tw/guides/providers.md b/docs-site/src/content/docs/zh-tw/guides/providers.md index cbbe1d38f..c330b1053 100644 --- a/docs-site/src/content/docs/zh-tw/guides/providers.md +++ b/docs-site/src/content/docs/zh-tw/guides/providers.md @@ -462,8 +462,11 @@ Copilot 的 catalog 混合多種 wire:GPT-5 family(`gpt-5.3-codex`、`gpt-5. Cursor 另以實驗性 adapter 追蹤。`adapter: "cursor"` 會在 `ocx init` 與 dashboard Add Provider picker 出現為實驗性 local config,並帶 Cursor static fallback model catalog metadata。設定 Cursor access token 後,opencodex 使用 Cursor 即時 HTTP/2 transport。bundled fallback seed 包含 1M context 的 -`gpt-5.6-sol`/`terra`/`luna`、500K 的 `grok-4.5`/`grok-4.5-fast`,以及 262K 的 `kimi-k3`;即時探索 -決定哪些模型對帳號保持可見。Cursor 的 Kimi K3 只以帶 effort suffix 的 wire id 提供,因此 +`gpt-5.6-sol`/`terra`/`luna`、500K 的 Grok 4.5/4.6 一般與 Fast 項目,以及 262K 的 `kimi-k3`;即時探索 +決定哪些模型對帳號保持可見。Grok 4.6 的兩種形式都提供 `low`/`medium`/`high`/`xhigh`,4.5 則最高到 +`high`。Fast 請求會傳送對應的 Grok 基礎模型,並使用獨立的 `effort` 與 `fast=true` `requested_model` +參數;扁平化的 `cursor-grok-{version}-{effort}-fast` id 僅作為探索與 picker 識別。Cursor 的 Kimi K3 +只以帶 effort suffix 的 wire id 提供,因此 `cursor/kimi-k3` 暴露 `low`/`high`/`max` ladder,預設為 `max`,符合該模型文件化的 API default。 Cursor server-driven native read/write/delete/ls/grep/shell/fetch execution 預設停用,因為它會繞過 Codex approval 與 sandbox 路徑;只有可信本機實驗才應在 `~/.opencodex/config.json` 的 `providers.cursor` diff --git a/src/adapters/cursor/effort-map.ts b/src/adapters/cursor/effort-map.ts index 1dc70a793..11d9d8a53 100644 --- a/src/adapters/cursor/effort-map.ts +++ b/src/adapters/cursor/effort-map.ts @@ -4,7 +4,7 @@ * Cursor model ids encode the reasoning effort as a suffix (`claude-4.6-opus-high`), and the available * tiers differ per model — `claude-4.6-opus` tops out at `-max`, `claude-opus-4-8` at `-xhigh`, * `claude-4.6-sonnet` only has `-medium`, and most `composer`/`gemini` models take no suffix at all. - * Grok Fast puts its mode marker after the effort (`grok-4.5-high-fast`). A bare id for a model that + * Grok Fast puts its mode marker after the effort (`grok-4.6-xhigh-fast`). A bare id for a model that * requires a suffix is rejected `ERROR_BAD_MODEL_NAME` (devlog 350.105). * * Canonical effort order is always low < medium < high < xhigh < max (max is the top tier, confirmed @@ -35,10 +35,9 @@ const CURSOR_MODEL_EFFORT_TIERS: Record = { // cursor-grok-4.5-{low,medium,high}-fast. The bare Fast id returns not_found. "grok-4.5": ["low", "medium", "high"], "grok-4.5-fast": ["low", "medium", "high"], - // 260813 preemptive: grok-4.6 tiers mirrored from grok-4.5 ahead of Cursor's lineup update, - // so the suffix/wire handling is already correct the day the slugs appear. - "grok-4.6": ["low", "medium", "high"], - "grok-4.6-fast": ["low", "medium", "high"], + // Cursor's 260813 lineup exposes Grok 4.6 Extra High in both regular and Fast forms. + "grok-4.6": ["low", "medium", "high", "xhigh"], + "grok-4.6-fast": ["low", "medium", "high", "xhigh"], "gpt-5.1": ["low", "high"], "gpt-5.1-codex-max": ["low", "medium", "high", "xhigh"], "gpt-5.1-codex-mini": ["low", "high"], diff --git a/src/adapters/cursor/request-builder.ts b/src/adapters/cursor/request-builder.ts index 6c633909c..833808017 100644 --- a/src/adapters/cursor/request-builder.ts +++ b/src/adapters/cursor/request-builder.ts @@ -174,7 +174,7 @@ function catalogLimitNote(kept: readonly OcxTool[], omitted: readonly OcxTool[]) /** * Resolve a `cursor/` selection + Codex reasoning effort to Cursor's requested model shape. * Most models encode effort in a flat id (`claude-4.6-opus-high`). Grok Fast is parameterized - * instead: current Cursor clients send the `grok-4.5` base id plus `effort` and `fast` parameters. + * instead: current Cursor clients send the matching Grok base id plus `effort` and `fast` parameters. * A fully-qualified id (one that is not a known effort base) passes through unchanged. */ function normalizeCursorModelId(modelId: string, reasoning?: string): { diff --git a/structure/04_transports-and-sidecars.md b/structure/04_transports-and-sidecars.md index 48d6b2076..f085e457c 100644 --- a/structure/04_transports-and-sidecars.md +++ b/structure/04_transports-and-sidecars.md @@ -416,11 +416,13 @@ All four route to the `default` Cursor wire model. Explicit variants additionall parameterized-model channel used by current Cursor clients. Router rows are static capabilities and must survive a live `GetUsableModels` response that omits `default`. -`cursor/grok-4.5-fast` is also a stable Codex-facing row, but current Cursor clients do not request -it as a flat model slug. OpenCodex sends `grok-4.5` through `requested_model` with separate `effort` -and `fast=true` parameters, leaving legacy `model_details` unset for that parameterized external -selection. Live discovery still recognizes Cursor's flattened `cursor-grok-4.5-{effort}-fast` -variants, plus the older `grok-4.5-fast-{effort}` ordering, as availability evidence only. +`cursor/grok-4.5-fast` and `cursor/grok-4.6-fast` are stable Codex-facing rows, but current Cursor +clients do not request them as flat model slugs. OpenCodex sends the matching Grok base id through +`requested_model` with separate `effort` and `fast=true` parameters, leaving legacy `model_details` +unset for that parameterized external selection. Grok 4.5 stops at `high`; Grok 4.6 additionally +advertises and sends `xhigh`. Live discovery recognizes Cursor's flattened +`cursor-grok-{version}-{effort}-fast` variants, plus the older +`grok-{version}-fast-{effort}` ordering, as availability evidence only. ## Cursor active-context usage diff --git a/tests/cursor-discovery.test.ts b/tests/cursor-discovery.test.ts index c8343deda..7e9595aca 100644 --- a/tests/cursor-discovery.test.ts +++ b/tests/cursor-discovery.test.ts @@ -44,6 +44,8 @@ describe("Cursor discovery metadata", () => { expect(ids).not.toContain("grok-4.3"); expect(ids).not.toContain("kimi-k2.5"); expect(ids).toContain("gpt-5.5-extra"); + expect(ids).toContain("grok-4.6"); + expect(ids).toContain("grok-4.6-fast"); expect(ids).not.toContain("composer-2"); // `auto` mirrors the jawcode SOT `default` entry (200k), not the generic fallback window. for (const id of CURSOR_ROUTER_MODEL_IDS) { @@ -70,6 +72,9 @@ describe("Cursor discovery metadata", () => { expect(isCursorModelAvailableForAccount("grok-4.5-fast", ["cursor-grok-4.5-fast-medium"])).toBe(true); expect(isCursorModelAvailableForAccount("grok-4.5-fast", ["cursor-grok-4.5-high"])).toBe(false); expect(isCursorModelAvailableForAccount("grok-4.5", ["cursor-grok-4.5-high-fast"])).toBe(false); + expect(isCursorModelAvailableForAccount("grok-4.6", ["cursor-grok-4.6-xhigh"])).toBe(true); + expect(isCursorModelAvailableForAccount("grok-4.6-fast", ["cursor-grok-4.6-xhigh-fast"])).toBe(true); + expect(isCursorModelAvailableForAccount("grok-4.6", ["cursor-grok-4.6-xhigh-fast"])).toBe(false); expect(isCursorModelAvailableForAccount("gpt-5.4", ["cursor-gpt-5.4-high"])).toBe(true); // Prefixed sibling rejection: cursor- prefix must not bypass sibling-model checks. expect(isCursorModelAvailableForAccount("gpt-5.5", ["cursor-gpt-5.5-extra-high"])).toBe(false); @@ -86,6 +91,12 @@ describe("Cursor discovery metadata", () => { ["cursor-grok-4.5-high", "cursor-grok-4.5-high-fast"], ); expect(grok.map(model => model.id)).toEqual(["grok-4.5", "grok-4.5-fast"]); + + const grok46 = filterCursorConfiguredModelsByLiveDiscovery( + [{ id: "grok-4.6" }, { id: "grok-4.6-fast" }], + ["cursor-grok-4.6-xhigh", "cursor-grok-4.6-xhigh-fast"], + ); + expect(grok46.map(model => model.id)).toEqual(["grok-4.6", "grok-4.6-fast"]); }); test("live discovery filter always keeps all router levels when GetUsableModels omits them", () => { @@ -130,6 +141,7 @@ describe("Cursor discovery metadata", () => { expect(inferCursorContextWindow("gemini-3.5-flash")).toBe(1_000_000); expect(inferCursorContextWindow("glm-5.2")).toBe(1_000_000); expect(inferCursorContextWindow("grok-4.3")).toBe(256_000); + expect(inferCursorContextWindow("grok-4.6")).toBe(500_000); expect(inferCursorContextWindow("gpt-5.5")).toBe(272_000); }); @@ -148,6 +160,8 @@ describe("Cursor discovery metadata", () => { { id: "claude-opus-4-8", supportsReasoningEffort: true }, { id: "glm-5.2", supportsReasoningEffort: true }, { id: "grok-4.3", supportsReasoningEffort: true }, + { id: "grok-4.6", supportsReasoningEffort: true }, + { id: "grok-4.6-fast", supportsReasoningEffort: true }, { id: "unknown-reasoning-model", supportsReasoningEffort: true }, { id: "composer-2.5", supportsReasoningEffort: false }, ]); @@ -157,6 +171,8 @@ describe("Cursor discovery metadata", () => { expect(efforts["claude-opus-4-8"]).toEqual(["low", "medium", "high", "xhigh", "max"]); expect(efforts["glm-5.2"]).toEqual(["high", "max"]); expect(efforts["grok-4.3"]).toEqual([]); + expect(efforts["grok-4.6"]).toEqual(["low", "medium", "high", "xhigh"]); + expect(efforts["grok-4.6-fast"]).toEqual(["low", "medium", "high", "xhigh"]); expect(efforts["unknown-reasoning-model"]).toEqual([]); expect(efforts["composer-2.5"]).toEqual([]); }); diff --git a/tests/cursor-effort-suffix.test.ts b/tests/cursor-effort-suffix.test.ts index 2d4c627f0..2154f689b 100644 --- a/tests/cursor-effort-suffix.test.ts +++ b/tests/cursor-effort-suffix.test.ts @@ -12,6 +12,19 @@ const RECORDED_CURSOR_GROK_45_DISCOVERY_IDS = [ "cursor-grok-4.5-high", ] as const; +// Account-visible Cursor CLI lineup recorded on 2026-08-13. Grok 4.6 adds a +// real Extra High tier in both regular and Fast forms; 4.5 still tops out at high. +const RECORDED_CURSOR_GROK_46_DISCOVERY_IDS = [ + "cursor-grok-4.6-low", + "cursor-grok-4.6-medium", + "cursor-grok-4.6-high", + "cursor-grok-4.6-xhigh", + "cursor-grok-4.6-low-fast", + "cursor-grok-4.6-medium-fast", + "cursor-grok-4.6-high-fast", + "cursor-grok-4.6-xhigh-fast", +] as const; + function modelIdFor(modelId: string, reasoning?: string): string { const parsed: OcxParsedRequest = { modelId, @@ -135,6 +148,41 @@ describe("Cursor per-model reasoning-effort suffix", () => { } }); + test("grok-4.6 exposes xhigh and sends Extra High Fast as parameters", () => { + expect(modelIdFor("cursor/grok-4.6", "low")).toBe("cursor-grok-4.6-low"); + expect(modelIdFor("cursor/grok-4.6", "medium")).toBe("cursor-grok-4.6-medium"); + expect(modelIdFor("cursor/grok-4.6", "high")).toBe("cursor-grok-4.6-high"); + expect(modelIdFor("cursor/grok-4.6", "xhigh")).toBe("cursor-grok-4.6-xhigh"); + expect(modelIdFor("cursor/grok-4.6", "max")).toBe("cursor-grok-4.6-xhigh"); + expect(selectionFor("cursor/grok-4.6")).toEqual({ + modelId: "cursor-grok-4.6-xhigh", + parameters: undefined, + }); + expect(selectionFor("cursor/grok-4.6-fast", "xhigh")).toEqual({ + modelId: "grok-4.6", + parameters: [{ id: "effort", value: "xhigh" }, { id: "fast", value: "true" }], + }); + expect(selectionFor("cursor/grok-4.6-fast", "max")).toEqual({ + modelId: "grok-4.6", + parameters: [{ id: "effort", value: "xhigh" }, { id: "fast", value: "true" }], + }); + expect(selectionFor("cursor/grok-4.6-fast")).toEqual({ + modelId: "grok-4.6", + parameters: [{ id: "effort", value: "xhigh" }, { id: "fast", value: "true" }], + }); + expect(cursorModelEffortLadder("grok-4.6")).toEqual(["low", "medium", "high", "xhigh"]); + expect(cursorModelEffortLadder("grok-4.6-fast")).toEqual(["low", "medium", "high", "xhigh"]); + }); + + test("regular grok-4.6 request ids match the recorded discovery fixture", () => { + for (const effort of ["low", "medium", "high", "xhigh"] as const) { + const requestModelId = modelIdFor("cursor/grok-4.6", effort); + expect(requestModelId).toBe(`cursor-grok-4.6-${effort}`); + expect(RECORDED_CURSOR_GROK_46_DISCOVERY_IDS).toContain(requestModelId); + } + expect(RECORDED_CURSOR_GROK_46_DISCOVERY_IDS).toContain("cursor-grok-4.6-xhigh-fast"); + }); + test("kimi-k3 maps to its live effort-suffixed variants", () => { expect(modelIdFor("cursor/kimi-k3", "low")).toBe("kimi-k3-low"); expect(modelIdFor("cursor/kimi-k3", "medium")).toBe("kimi-k3-high");