Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,7 @@ Pi は複数のモデルを一つのセッションログに流すことがあ
- **サービス別タブ** — Claude Code・Codex・Gemini CLI・Antigravity・OpenCode・Hermes Agent・Cursor・Grok CLI・Copilot CLI・Kiro CLI・Pi Agent・omp・Aside のうち2つ以上が検出されると、小さなタブでサービス別の詳細を切替(今日の合計は合算のまま)。
- **公式の上限** — Claude・Codex・Antigravity の5時間/週間使用率とリセットのカウントダウンを、今日の数字のすぐ下に。
- **追加スキャンフォルダ** — 既定のパスの外にあるログのために、プロバイダーごとにスキャンルートを追加(設定 → 詳細)。
- **複数の Claude アカウント** — 設定フォルダ(`CLAUDE_CONFIG_DIR`)ごとにログインした Claude Code アカウントには公式上限の下にそれぞれのタブが付き、ゲージ・ふしぎなアメ・通知・今日/今月のトークンを個別に表示します。`~/.claude-*` フォルダとエクスポートされた `CLAUDE_CONFIG_DIR` は自動で見つけ、それ以外の場所は設定 → 詳細で追加します。メニューバーの上限 %・コンパニオンの様子・予測は最後に使ったアカウントに従います(設定 → 一般 → 追跡する Claude アカウント)。
- **消費予測** — 現在の5時間ウィンドウが100%に達する時刻を予測。
- **アプリ内アップデート** — ワンクリックの更新確認、設定に現在のバージョンを表示。

Expand Down Expand Up @@ -268,21 +269,24 @@ swift test # ユニットテスト

| ソース | 用途 | 備考 |
|---|---|---|
| `~/.claude/projects/**/*.jsonl` | Claude Code daily/blocks/weekly/monthly | 直接読み取り;メッセージ id で重複排除;増分キャッシュ |
| `~/.claude/projects/**/*.jsonl`、`<設定フォルダ>/projects/**/*.jsonl` | Claude Code daily/blocks/weekly/monthly | 直接読み取り;メッセージ id で重複排除;増分キャッシュ |
| `~/.claude.json`、`~/.claude-*/.claude.json` | Claude アカウント:ログイン中の設定フォルダとアカウント名 | `oauthAccount` ブロックのみ使用;エクスポートされた `CLAUDE_CONFIG_DIR` と設定 → 詳細のフォルダも対象 |
| `~/.claude/history.jsonl`、`<設定フォルダ>/history.jsonl` | アカウントごとの Claude トークン;最後に使ったアカウント | セッション id とプロンプト時刻のみ読み取り、プロンプト本文は読みません;追加された行だけを読み取り |
| `~/.gemini/tmp/**/chats/*.json(l)` | Gemini CLI daily/monthly | セッションレコード(メッセージ別 `tokens`);週間 = daily 合算 |
| `~/.gemini/antigravity/conversations/*.db`<br>`~/.gemini/antigravity-cli/conversations/*.db`<br>`~/.gemini/antigravity-ide/conversations/*.db` | Antigravity daily/blocks/weekly/monthly | SQLite 読み取り専用;Cascade protobuf blob の呼び出し単位の使用量;Antigravity 2.0/Core, CLI, IDE をサポート;Gemini には合算しない独立プロバイダ;サブスクのためコストは推定しない |
| `~/.codex/sessions/**/*.jsonl` | Codex daily/monthly | `token_count` イベント;週間 = daily 合算 |
| `~/.local/share/opencode/opencode.db` | OpenCode daily/blocks/weekly/monthly | SQLite 読み取り専用;レガシー `storage/message` JSON にも対応 |
| `~/.hermes/state.db` | Hermes Agent daily/blocks/weekly/monthly | SQLite 読み取り専用;セッショントークン合計と保存済みコスト |
| `~/Library/Application Support/Cursor/User/globalStorage/state.vscdb` | Cursor daily/blocks/weekly/monthly | SQLite 読み取り専用のフォールバック(`cursorDiskKV` バブルエントリの `tokenCount`);サインイン時は `cursor.com` ダッシュボード API が主ソース(プライバシー参照) |
| `cursor.com`(ダッシュボード API) | Cursor daily/blocks/weekly/monthly | 非公式 JSON endpoint(`get-filtered-usage-events`);セッションは `state.vscdb` の `cursorAuth/accessToken` または `CURSOR_SESSION_TOKEN`;プロバイダー更新のたびに再取得;ネットワーク失敗時はアカウント単位に分離された最大6時間以内のディスクキャッシュで代替;`CURSOR_USAGE_API=0` で無効化 |
| `api2.cursor.sh`(ダッシュボード上限 API) | Cursor 公式の月間 included usage | Connect RPC `GetCurrentPeriodUsage`;`state.vscdb` または `CURSOR_SESSION_TOKEN` の Bearer JWT;usage events と同じ無効化スイッチ |
| `~/.grok/sessions/**/updates.jsonl` | Grok CLI daily/blocks/weekly/monthly | `turn_completed` レコード(ターン単位の `usage`、サーバー報告のコスト);`$GROK_HOME` を設定していればそのパス;サブエージェントのセッションは親ターンに合算済みのため除外 |
| `~/.copilot/session-store.db` | Copilot CLI daily/blocks/weekly/monthly | SQLite 読み取り専用;`assistant_usage_events` の1行が API 呼び出し1回;`$COPILOT_HOME` を設定していればそのパス;`input_tokens` にキャッシュ分が含まれるため cache read/write を差し引いて集計;premium request 課金のためコストは推定しない |
| `~/Library/Application Support/kiro-cli/data.sqlite3`<br>`~/.kiro/sessions/cli/*.jsonl`<br>`~/.kiro/sessions/<ws>/<session>/messages.jsonl` | Kiro CLI daily/blocks/weekly/monthly | 2.20 以前の SQLite と 2.20+ / `--v3` の JSONL。どちらも実トークン数を記録しないため、input は毎ターン再送される累積会話テキストをバイト÷4 で**推定**。`usage_summary` のクレジットは USD に換算しない。`/clear`・圧縮で消えた SQLite 会話の集計済みトークンはアプリ再起動まで数え続ける。`$KIRO_CLI_HOME` と `$KIRO_HOME` に対応 |
| `~/.pi/agent/sessions/**/*.jsonl` | Pi Agent daily/blocks/weekly/monthly | 全プロジェクトの保存済み usage を直接集計;`$PI_CODING_AGENT_DIR`・`$PI_CODING_AGENT_SESSION_DIR` override 対応;output には reasoning がすでに含まれるため二重計上しない;fork のコピーは entry ID で重複排除;記録されたコストを使用 |
| `~/.omp/agent/sessions/**/*.jsonl` | omp (oh-my-pi) daily/blocks/weekly/monthly | pi 形式セッション JSONL;すべての assistant `usage` イベントを合算(巻き戻した分岐も請求済みトークン)し、サブエージェントのセッションファイルも親に折り込まれないため合算対象;`$OMP_CODING_AGENT_DIR` を尊重;イベントごとの `cost` が記録されていればそのまま信頼;`bridge/` 以下の変換コピーは原本側で集計済みのため除外 |
| `~/.aside/u/*/state.db` | Aside daily/blocks/weekly/monthly | SQLite のターン合計を読み取り専用で集計;削除済みターンはスキャンキャッシュのリセットまで集計を保持;記録されたコストのみ使用 |
| Keychain / `~/.claude/.credentials.json` → `api.anthropic.com` | Claude 公式 5h/週間 % | 非公式 endpoint;Keychain は**更新ボタンを押した時のみ**読み取り — 自動更新では読みません |
| Keychain(`Claude Code-credentials`、ほかの設定フォルダごとに `Claude Code-credentials-<hash>`)/ `<設定フォルダ>/.credentials.json` → `api.anthropic.com` | アカウントごとの Claude 公式 5h/週間 % | 非公式 endpoint;Keychain は**更新ボタンを押した時のみ**読み取り — 自動更新では読みません |
| `codex app-server` | Codex 公式 5h/週間 % | ローカル子プロセス;アカウント snapshot のみ、モデル turn なし |
| [PokéAPI](https://pokeapi.co/) — `pokeapi.co`, `graphql.pokeapi.co` | ポケモンの種・能力値・特性・技・進化 | ランタイム取得;ローカルキャッシュ、バンドルしない |
| `raw.githubusercontent.com/PokeAPI/sprites` | ポケモン・アイテムのスプライト | ランタイム取得;Application Support にキャッシュ、バンドルしない |
Expand All @@ -293,9 +297,9 @@ swift test # ユニットテスト

## プライバシー & 権限

- **オンデバイス優先。** トークン使用量はローカルの Claude Code・Codex・Gemini CLI・Antigravity・OpenCode・Hermes Agent・Cursor・Grok CLI・Copilot CLI・Kiro CLI・Pi Agent・omp・Aside データから直接読み取ります。使用量のアップロードも、モデルの推論実行も行いません。
- **外部リクエスト。** 本アプリは完全オフラインではありません。12のホストに接続します — `pokeapi.co`・`graphql.pokeapi.co`(種・進化)、`raw.githubusercontent.com`(スプライト)、`api.anthropic.com`(Claude 公式の上限)、`claude.ai`(設定で claude.ai セッションキーを保存した場合の Claude 公式の上限 — そのキーのみ、プロンプトやプロジェクトのパスは送りません)、`cursor.com`(ローカルで Cursor にサインインしている場合の Cursor 使用量サマリー — セッション資格情報のみ、プロンプトやプロジェクトのパスは送りません)、`cloudcode-pa.googleapis.com`・`daily-cloudcode-pa.googleapis.com`(Antigravity 公式の上限)と `oauth2.googleapis.com`(トークン更新)、`status.claude.com`・`status.openai.com`(障害バナー — 設定でオフ可)、`api.github.com`(アップデート確認)。**いずれのリクエストにも使用量ログ・プロンプト・プロジェクトのパスは含まれません** — 送られるのはリクエストそのものだけです(Cursor は Web ダッシュボードと同様に、自分の使用量の行を取得するためセッション Cookie を送信します)。
- **Keychain(任意)。** Claude OAuth 資格情報は**更新ボタンを押した時のみ**読み取ります(設定、またはポップオーバーの上限行)。自動更新では Keychain に触れないためパスワードのプロンプトは表示されず、`~/.claude/.credentials.json` があれば毎回読み直すので、`/login` でアカウントを切り替えても更新ボタンなしで追従します。トークンはメモリ上にのみ保持し、**アプリ自身の Keychain 項目は作成しません。** 資格情報ファイルが無い場合、上限はキャッシュされたトークンが期限切れになるか更新するまで以前の値のままです。設定でオフにすると上限セクションが非表示になります。
- **オンデバイス優先。** トークン使用量はローカルの Claude Code・Codex・Gemini CLI・Antigravity・OpenCode・Hermes Agent・Cursor・Grok CLI・Copilot CLI・Kiro CLI・Pi Agent・omp・Aside データから直接読み取ります。使用量のアップロードも、モデルの推論実行も行いません。アカウントごとに Claude の使用量を分けるため、各設定フォルダの `history.jsonl` からはセッション id とプロンプト時刻だけを読み取ります。プロンプト本文は読まず、Mac の外にも送りません。
- **外部リクエスト。** 本アプリは完全オフラインではありません。13のホストに接続します — `pokeapi.co`・`graphql.pokeapi.co`(種・進化)、`raw.githubusercontent.com`(スプライト)、`api.anthropic.com`(Claude 公式の上限)、`claude.ai`(設定で claude.ai セッションキーを保存した場合の Claude 公式の上限 — そのキーのみ、プロンプトやプロジェクトのパスは送りません)、`cursor.com`(ローカルで Cursor にサインインしている場合の Cursor 使用量サマリー — セッション資格情報のみ、プロンプトやプロジェクトのパスは送りません)、`api2.cursor.sh`(Cursor 公式の月間 included usage — Bearer JWT のみ、IDE ログインと同じ資格情報)、`cloudcode-pa.googleapis.com`・`daily-cloudcode-pa.googleapis.com`(Antigravity 公式の上限)と `oauth2.googleapis.com`(トークン更新)、`status.claude.com`・`status.openai.com`(障害バナー — 設定でオフ可)、`api.github.com`(アップデート確認)。**いずれのリクエストにも使用量ログ・プロンプト・プロジェクトのパスは含まれません** — 送られるのはリクエストそのものだけです(Cursor は Web ダッシュボードと同様に、自分の使用量の行を取得するためセッション Cookie を送信します)。
- **Keychain(任意)。** Claude OAuth 資格情報は**更新ボタンを押した時のみ**読み取ります(設定、またはポップオーバーの上限行)。自動更新では Keychain に触れないためパスワードのプロンプトは表示されず、`~/.claude/.credentials.json` があれば毎回読み直すので、`/login` でアカウントを切り替えても更新ボタンなしで追従します。トークンはメモリ上にのみ保持し、**アプリ自身の Keychain 項目は作成しません。** 資格情報ファイルが無い場合、上限はキャッシュされたトークンが期限切れになるか更新するまで以前の値のままです。設定でオフにすると上限セクションが非表示になります。Claude アカウントが複数ある場合、更新時にほかの設定フォルダの項目もフォルダごとに1回読み取り、プロンプトを拒否すると残りは尋ねません。
- **ポケモンのデータとアセット** はランタイムに PokéAPI から取得し、`~/Library/Application Support/PokeTokenBar/` にのみキャッシュされます。生成された個体値(IV・性別・特性・覚えている技など)は値が変わらないよう、ローカルのパートナーセーブに保存されます。アプリのバイナリおよびリリース成果物にポケモンのアセットは含まれません。

## コントリビューター
Expand Down
Loading