Skip to content

fix(sketchybar): 修正 Stats 新機部署與 AI 用量失敗隔離 - #159

Open
CollieIsCute wants to merge 2 commits into
masterfrom
fix/sketchybar-stats-provider-isolation
Open

CollieIsCute wants to merge 2 commits into
masterfrom
fix/sketchybar-stats-provider-isolation

Conversation

@CollieIsCute

@CollieIsCute CollieIsCute commented Sep 15, 2026

Copy link
Copy Markdown
Owner

修正

  • Stats 以 macOS defaults 部署 CPU/RAM/感測器/網路速度;首次設定不再卡在精靈,既有程式套用時重開,CI 不啟動 GUI。
  • 使用 SketchyBar 既有定時更新偵測原生項目增減,移除登入後固定等待 3 秒;不新增依賴或常駐程式。
  • Codex/Claude 一次查詢、個別處理失敗,保留正常來源的用量與重置倒數。
  • 依最新確認,CodexBar 各平台共用同一份模板,21 → 10 行:保留既有 enabled(包含停用與未設定),現有 Codex 強制 source=oauth、Claude 強制 source=cli,不新增缺少的 provider。不增加平台分支或腳本;Noctalia 與 AUR 安裝來源不變。

驗證

  • 前一版 a8ef8e8 安裝 CI:macOS、Ubuntu 通過;Arch 與 Windows+WSL 都因 AUR codexbar-cli 0.60.3-1 上游校驗碼錯誤而失敗。AUR 預期 66c6d707…,官方 release digest/.sha256 均為 1a888488…失敗 job。依使用者決定保留 AUR 等上游修正,不換來源、不繞過校驗;2026-09-16 查詢 AUR HEAD 仍為 1c148988
  • 本輪提交 b5255c1 已觸發四平台安裝 CI,結果待確認,尚未全綠。
  • 共用模板以 darwin/linux/windows 模擬資料各驗證 9 組 JSON 案例與冪等性;保留停用、缺少欄位、未知 provider 及額外設定,固定既有來源,不補 provider,全部通過。本機限定 CodexBar 設定連續 chezmoi apply -v 兩次通過。既有部分失敗處理重新驗證通過。
  • 實際關閉 Stats 後約 3 秒移除,重開後約 6 秒四項自動恢復,未手動 reload。
  • 真實 Codex 資料+暫時 Claude 失敗回應(CLI exit 1)仍正常顯示 Codex 用量及倒數;已恢復真實雙來源資料,未修改登入資訊。
  • 保留安裝 CI 的 chezmoi init --apply -v。不新增功能測試腳本;本地 HTML 計畫不提交。
  • 未授權新 Mac 的 TCC 提示、重新登入/外接螢幕仍需實機驗收,CI 不代表 GUI 權限驗收。
可重跑的一次性部分失敗驗證(不加入 repo)
ruby -rjson -ropen3 <<'RUBY'
filter = File.read('home/dot_config/sketchybar/plugins/executable_codexbar.sh')[/jq -er '\n(.*?)\n'/m, 1]
data = [{provider: 'codex', usage: {primary: {usedPercent: 44, windowMinutes: 300}}}, {provider: 'claude', error: {message: 'not logged in'}}]
out, err, status = Open3.capture3('jq', '-er', filter, stdin_data: JSON.generate(data))
abort err unless status.success?
abort out unless out.include?('剩餘 56%') && out.include?('Claude') && out.include?('未登入')
puts 'partial provider failure: passed'
RUBY
可重跑的一次性共用設定驗證(不加入 repo)
ruby -rjson -ropen3 <<'RUBY'
cases = [
  {version: 1, providers: [{id: 'codex', enabled: false, source: 'cli'}, {id: 'claude', enabled: true, source: 'oauth'}]},
  {version: 1, providers: [{id: 'codex'}, {id: 'gemini', enabled: false, source: 'auto'}]},
  {version: 1, providers: []}, {version: 1}, nil
]
sources = {'codex' => 'oauth', 'claude' => 'cli'}
%w[darwin linux windows].each do |os|
  cases.each do |input|
    expected = JSON.parse(JSON.generate(input || {version: 1, providers: []}))
    (expected['providers'] || []).each { |p| p['source'] = sources[p['id']] if sources.key?(p['id']) }
    data = input ? JSON.generate(input) : ''
    2.times do
      out, err, status = Open3.capture3('chezmoi', 'execute-template', '--override-data', JSON.generate(chezmoi: {os: os}), '--with-stdin', '-f', 'home/dot_config/codexbar/modify_private_config.json', stdin_data: data)
      abort err unless status.success?
      abort "policy mismatch: #{os}" unless JSON.parse(out) == expected
      data = out
    end
  end
end
puts 'shared provider policy and idempotence: passed'
RUBY

依據:Stats 原生設定首次設定流程CodexBar 部分失敗輸出CLI 啟用來源設定

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant