繁體中文

新功能

報表與終端機看得出每段對話在忙什麼

同一個專案連開三段 Claude Code 對話,回頭看用量時,過去只能見到三列一模一樣的紀錄。現在 HTML 報表(網頁格式的報表)在貢獻熱圖下新增「你做了什麼」區塊,終端機的近期工作階段(session,一次開啟到結束的工作紀錄)清單也多了標題欄,能看出每段對話談過什麼。這些標題原本已由 Claude Code 寫進對話紀錄,usage 也讀到了,只有畫面沒顯示。分享報表前,標題會沿用既有的專案名稱遮罩;沒標題的工作階段維持空白,不會拿專案名冒充標題。像整理相簿時,原本三張都只寫「旅行」,現在終於有「登山」「吃飯」「回程」可辨。

問題修復

額度檢查會照要求等待,重設前一分鐘不再寫 0m

Antigravity 的額度(可使用量上限)被伺服器要求晚點再查時,usage 現在會照指定時間等待。以前收到 429(請求太多)後,程式把狀態碼和 Retry-After(可再次嘗試前的等待時間)一起丟掉,快取(暫存查詢結果)一到期又每五分鐘重試。現在額度探測和 token(登入驗證用的令牌)更新都會另行處理 HTTPError(HTTP 回應錯誤),能讀秒數或 HTTP 日期格式的等待時間;缺值或無法解析時才等 60 秒,過大的值最多等一小時。倒數少於一分鐘不再寫「0m」,五種語言都改為「即將重設」,也不會污染「將在……耗盡」的另一種提示。像診所叫號,護士交代十分鐘後再來,就不會每五分鐘又跑去敲門;門快開時則會明講「快輪到了」。

English

FEATURE

Reports and terminal lists now reveal what each conversation was about

Three Claude Code conversations from the same project used to look identical when you checked usage later. The HTML report now adds a "What you worked on" section beneath the contribution heatmap, while the terminal's recent-session list gains a title column, so you can tell what each conversation covered. Claude Code had already named conversations and written those titles into transcripts; usage had carried them into report data, but the renderer left them hidden. Titles use the existing project-name masking before a report is shared. Untitled sessions remain blank instead of borrowing the project name and pretending it is a title. It is like sorting photos once labelled only "trip" and seeing "hike," "meal," and "ride home."

BUGFIX

Quota checks wait as requested, and the last minute no longer says 0m

When the server tells usage to check an Antigravity quota later, it now waits for the time requested. Previously, a 429 response meant both the status code and Retry-After header were discarded, so an expired cache triggered another attempt every five minutes. The quota probe and token refresh now handle HTTPError (an HTTP response error) separately and can read a wait time written in seconds or as an HTTP date; a missing or unparseable value falls back to 60 seconds, and an oversized value is capped at one hour. The final minute before reset no longer says "0m" in the same way as an already expired quota. All five languages now say "Reset imminent," and that wording stays out of the separate "will run out in" warning. It is like a clinic telling you to return in ten minutes instead of knocking again every five, then clearly saying your turn is next.

原始 CHANGELOG

Original changelog報表與終端機看得出每段對話在忙什麼
**The report and the terminal's session list now show what each conversation was about.** Claude Code names every conversation and writes that name into its transcript. `usage` had been parsing those names all along and carrying them into the report payload, where the renderer ignored them — the snapshot fixture still read `"Ignore in current renderer"`. The HTML report gained a "What you worked on" section under the contribution heatmap, and the TUI's recent-session table gained a column, so three rows from the same project are no longer indistinguishable. Titles carry `data-mask`, so the existing project-name masking covers them before a report is shared. Sessions without a title stay blank rather than falling back to the project name, which would read as a title that isn't one.
Original changelog額度檢查會照要求等待,重設前一分鐘不再寫 0m
**A rate-limited Antigravity quota probe now waits as long as the server asked, instead of retrying every five minutes.** That probe is the only external API call in the project. It and the token refresh both folded `HTTPError` into the same `except` clause as connection failures, so a 429 reached the caller as a bare `None` — the status code and the `Retry-After` header were discarded together, and the next cache expiry sent another request at a server that had already said to wait. Each now catches `HTTPError` separately, reads `Retry-After` in either the seconds or the HTTP-date form, and holds off until it elapses. A missing or unparseable header falls back to sixty seconds, and the delay is capped at an hour so an oversized value cannot strand the card.
**The last minute before a quota resets no longer reads "0m".** Under sixty seconds the countdown's minute arithmetic rounds to zero, and the already-expired case printed the same string, so one line meant both "forty seconds left" and "the window has already turned". The card now reads "Reset imminent", in all five languages. The fix sits at the call site rather than in the shared duration formatter, which also renders the "will run out in" half of the burn warning — changing it there would have produced "will run out in reset imminent".