Skip to content

狀態列 context 分母卡在 200k:1M session 的 window 沒有任何可讀訊號(#95 的 settings.json 路徑為空) #113

Description

@kiki830621

Problem

Original text:
「還有一個issue 是 [截圖] 這邊不知道為什麼會以為是200k,剛開始應賅就要先蒐集詢問一次吧」
— Source: user, live session 2026-08-03(附截圖,見下方「Screenshot」)

狀態列的 context 計量顯示 97k/200k,但同一個 session 的 Claude Code header 寫的是
Opus 5 (1M context)。context max 被當成 200k,實際上是 1M。使用者的提案:session 一開始就先主動取一次真正的 context window,而不是靠推論

Screenshot(無法上傳原檔,逐字描述)

截圖是 Logos 內的 Claude Code session:header 顯示
Claude Code v2.1… / Opus 5 (1M conte… / ~/Developer/logo…
最底下的狀態列顯示訊號圖示 + 綠色進度條 + 97k/200k + 沙漏 5h 6…
(此 issue 由 CLI session 建立,貼上的圖片沒有可讀的本機路徑可上傳到 attachments release;如需原圖請重新提供檔案。)

Type

bug

Expected

Context 計量的分母等於該 session 真正的 context window。此例應為 97k/1M

Actual

分母固定落在 200k,直到用量真的超過 200k 才會自我修正。

觀察(不是 diagnosis) —— 現有三個訊號在這個 session 全部失效:

  • ClaudeUsageReader.baseWindow(forModel:)Sources/Logos/Services/ClaudeUsageReader.swift:46-49
    所有 family 回傳 200_000(註解寫「opus / sonnet / haiku / fable all ship a 200k
    base window today; the 1M is a beta on top」)。
  • 訊號 (2):selectedModel(inConfigDir:)<configDir>/settings.jsonmodel 欄位找
    [1m] 後綴。實測此帳號的 settings.json 根本沒有 model key
    (keys 只有 enabledPlugins / extraKnownMarketplaces /
    skipDangerousModePermissionPrompt / theme)→ 回傳 nil
  • 訊號 (3):observedTokens > base 的 fallback 要等實際用量破 200k 才會跳成 1M ——
    在那之前分母一路是錯的,而且「剩餘」被嚴重低估。
  • transcript 裡最新一筆 assistant 的 message.modelclaude-opus-5不帶 [1m]);
    transcript 也沒有任何 context-window 欄位。
  • 掃過 <configDir>/.claude.json:唯一帶 [1m] 的字串是
    additionalModelOptionsCache[0].value = claude-fable-5[1m](那是選單快取,不是本 session 的選擇);
    clientDataCacheSlots/*/modelclaude-opus-5,同樣不帶後綴。

也就是說:目前 Logos 讀得到的檔案裡,沒有任何一處記錄了「這個 session 是 1M」#95
[1m]-from-settings.json 機制對「使用者沒把 model 寫進 settings.json」的帳號是空的。

Impact

Context 計量是決定「還能不能繼續、要不要換帳號 / 開新 session」的主要依據。分母錯 5 倍
會讓人在還有 90% 空間時就以為快滿了;反過來,若之後有 family 真的低於預設值,同一條
fail-open 邏輯也會過度樂觀。這條計量錯了,狀態列就從資訊變成雜訊。

Open questions(留給 diagnose)

  • 使用者提的「剛開始先蒐集詢問一次」具體要問誰?可能的來源:
    (a) claude CLI 有沒有可查詢的 session/model metadata(例如某個 --print / status 之類的
    一次性查詢);(b) 是否有官方 API 可依 model id 取得 context window;
    (c) 在 spawn 時由 Logos 主動指定 model(含 [1m]),這樣選擇就在 Logos 手上、不必反推。
  • 若確實無法取得權威值,退路是把 per-family base window 建成可設定表(baseWindow 目前
    hardcode 單一常數),並讓使用者在設定裡覆寫。
  • 一次性 probe 要放在哪一層?WindowUsageModel 每次刷新都重算(:176-182),probe 的結果
    要 cache 在 session 層級,不能每秒問一次。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions