Skip to content

feat(cursor): ultra mode toggle (kimi-k3-1m) with Max Mode wire flag - #2654

Closed
lidge-jun wants to merge 1 commit into
codex/cursor-gap-4from
codex/cursor-gap-5
Closed

feat(cursor): ultra mode toggle (kimi-k3-1m) with Max Mode wire flag#2654
lidge-jun wants to merge 1 commit into
codex/cursor-gap-4from
codex/cursor-gap-5

Conversation

@lidge-jun

Copy link
Copy Markdown
Owner

Summary

  • Adds a Codex-style ultra toggle for Cursor big-context models: a synthetic cursor/kimi-k3-1m picker row (context_window 1,000,000 — user-verified live on the Cursor Ultra plan) whose requests resolve to the original wire id (kimi-k3-<effort>) with Cursor Max Mode raised on BOTH RequestedModel.maxMode and ModelDetails.maxMode (missing either can invalid_argument upstream, per two independent protocol implementations). The -1m marker never reaches the wire; collision with real -1m wire ids is impossible because only ids in CURSOR_ULTRA_1M_MODEL_IDS are treated as synthetic.
  • Account filtering admits the synthetic row through its base model's availability, and fetchCursorUsableModels now preserves ModelDetails.maxMode=true ids (maxModeModels) as the auto-detection foundation for extending the ultra set from live discovery.
  • Effort tiers mirror kimi-k3 ([low, high, max]) so the tier picker works identically on the 1m variant.

Stacked on #2653. Design: 070_ultra_mode.md + 025_ultra_k3_research.md (claim ledger).

Verification

  • bun test tests/cursor-ultra-mode.test.ts — 8 pass (catalog row, marker resolution, wire flags both fields, non-ultra unchanged, filter-through-base, set/static parity).
  • Full cursor catalog/builder suite (8 files) — 230 pass 0 fail.
  • bun x tsc --noEmit — clean.

Known boundary: Max Mode entitlement is plan-gated upstream (devlog 260822 210_maxmode); a non-entitled account gets Cursor's own runtime rejection, which we surface honestly.

Checklist

  • Focused tests green
  • Typecheck clean
  • Wire id never carries the synthetic marker
  • Devlog updated (070, 025)

@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner August 26, 2026 03:42
@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

🗂️ Base branches to auto review (2)
  • ^dev$
  • ^preview$

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 2273f801-ea01-4050-998c-9afaa2f6cb53

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 940d8290e7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +348 to +351
// kimi-k3-1m: synthetic ultra/Max-Mode picker variant (CURSOR_ULTRA_1M_MODEL_IDS) — wire sends
// kimi-k3-<effort> with maxMode=true; 1M context user-verified live on the Ultra plan
// (devlog 260826_cursor_responses_gap/025). inferCursorContextWindow maps "1m" ids to 1M.
{ id: "kimi-k3-1m", contextWindow: CONTEXT_1M, supportsReasoningEffort: true },

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Document the new Cursor Max Mode model

Adding cursor/kimi-k3-1m changes the user-visible model catalog and introduces Max Mode behavior, but docs-site/src/content/docs/guides/providers.md:585-592 still describes only the 262K cursor/kimi-k3 row and its effort ladder; the translated provider guides likewise omit the new selection. Update the English guide and translations so users can distinguish the synthetic 1M row, its plan-gated behavior, and its wire mapping.

AGENTS.md reference: src/AGENTS.md:L28-L28

Useful? React with 👍 / 👎.

@lidge-jun

Copy link
Copy Markdown
Owner Author

리뷰 · 우선순위 57 / 80

설명

이 풀 리퀘스트는 Cursor 큰 맥락 모델을 고를 때, 코드엑스처럼 ultra 스위치를 쓰기 위한 가짜 행 cursor/kimi-k3-1m을 넣습니다. 지금 dev의 src/adapters/cursor/discovery.ts 308-310줄에는 kimi-k3만 있고 컨텍스트는 262,144입니다. 212-218줄의 filterCursorConfiguredModelsByLiveDiscovery는 라우터 모델이거나 계정 라이브 목록에 있으면 통과시킵니다. src/adapters/cursor/protobuf-request.ts 971-977줄의 RequestedModel.maxMode는 지금 항상 false입니다. 1M 창을 켜려면 Cursor Max Mode를 와이어에 올려야 하는데, 그 길이 없습니다.

고침은 선택기 행과 와이어를 나눕니다. CURSOR_ULTRA_1M_MODEL_IDS에 kimi-k3-1m만 넣고, cursorUltraBaseModelId가 cursor/ 접두사를 뗀 뒤 집합에 있을 때만 -1m을 잘라 kimi-k3를 돌려줍니다. 요청 빌더는 그 베이스에 노력 접미사를 붙이고 maxMode를 true로 둡니다. 프로토콜은 RequestedModel.maxMode와 ModelDetails.maxMode를 같이 올립니다. 하나만 올리면 invalid_argument가 난다는 설명이 있습니다. 노력 단계는 kimi-k3와 같은 low, high, max입니다. 계정 필터는 베이스 모델이 라이브이면 가짜 행도 통과시킵니다.

집합이 좁은 것은 맞습니다. claude-4-sonnet-1m 같은 진짜 1m 와이어 id는 집합에 없어서 가짜로 취급되지 않습니다. 테스트도 그 점을 고정합니다. 다만 inferCursorContextWindow는 이미 27-29줄에서 id에 1m이 들어 있으면 1,000,000을 줍니다. 정적 행이 같은 값을 다시 적어도 해롭지는 않습니다. 라이브 발견의 maxModeModels는 자동 확장의 기초라고만 적혀 있고, 이 PR에서는 저장만 합니다. 실제로 집합을 넓히지는 않습니다.

이 PR은 지금 dev 위가 아닙니다. 베이스는 codex/cursor-gap-4, 곧 #2653입니다. #2650부터 #2653이 먼저 들어가야 합니다. Max Mode 자체는 플랜으로 막혀 있습니다. Ultra가 아닌 계정은 Cursor가 거절하고, 이 코드는 그 거절을 그대로 보여 줍니다. 선택기에 1m 행이 보이면 플랜이 없는 사람은 고를 수 있고 실패를 보게 됩니다.

src/adapters/cursor/discovery.ts:308 - 지금 정적 씨드에 kimi-k3-1m이 없어 1M 선택기가 없습니다.
src/adapters/cursor/protobuf-request.ts:974 - RequestedModel.maxMode가 항상 false라 Max Mode를 올릴 수 없습니다.
경로/심볼 - 베이스가 #2653이라 현재 dev(7181ebd)에는 혼자 합칠 수 없습니다.
경로/심볼 - Ultra가 아닌 계정에도 1m 행이 보이면, 고른 뒤 Cursor 거절을 사용자가 직접 맞게 됩니다.
src/adapters/cursor/live-models.ts - maxModeModels를 모아도 이 PR에서는 집합을 넓히지 않아, 자동 확장 기초만 남습니다.

메인테이너의 판단이 필요한 지점

너의 추천

#2650부터 #2653이 먼저 들어간 뒤에 이 PR을 합치세요. 지금 dev에 직접 합치지 마세요. 합치기 전에는 플랜이 없는 계정에서 1m 행이 어떻게 보이는지 한 번 확인하세요. 미리보기 배포는 계획에 없습니다.

이 댓글은 grok-bot이 작성했습니다

@lidge-jun
lidge-jun deleted the branch codex/cursor-gap-4 August 26, 2026 06:08
@lidge-jun lidge-jun closed this Aug 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant