Skip to content

feat: 使用量/コストの推定表示(transcript 集計・#19)#38

Merged
sasagar merged 1 commit into
devfrom
feature/cost-dashboard
Jul 2, 2026
Merged

feat: 使用量/コストの推定表示(transcript 集計・#19)#38
sasagar merged 1 commit into
devfrom
feature/cost-dashboard

Conversation

@sasagar

@sasagar sasagar commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

背景

#19「コストダッシュボード(推定明示)」。stream-json が使えない構成のため usage/cost 信号が弱い。Stop hook で得られる transcript(JSONL) から best-effort に集計し、UI で「推定」と明示する。コストで機能は gate しない

変更点

エンジン(純粋ロジック)

  • TranscriptUsage.parse(jsonl:): transcript の type=="assistant" 行の message.usageinput_tokens / output_tokens / cache_creation_input_tokens / cache_read_input_tokens)を合算し、message.model を採用。
  • AgentUsage(合計・estimatedCostUSD)/ModelPricing(opus / sonnet / haiku の概算単価・MTok あたり USD)。未知モデルはコスト nil(トークンのみ)。

アプリ

  • AgentSessionModel が応答完了/終了(Stop / SessionEnd)時に、transcript をバックグラウンドで読んで usage を更新(hooks 方式のときだけ取得できる)。
  • セッションバーに使用量ボタン+ポップオーバーを追加。モデル・トークン内訳・合計・推定コストを表示し、「transcript から算出した概算・実課金と一致しない場合あり」を明示。

検証

  • swift test: 53 passedTranscriptUsageTests 7 件 = 合算 / 不正・非 assistant 行の無視 / 空 / opus・cache のコスト推定 / 未知モデル / ファミリ判定)。
  • app: xcodegen generatexcodebuild … build 成功(新規ファイル UsagePopover.swift を追加したため再生成)。

スコープ / 設計メモ

  • 実データの transcript で usage 形(message.usage.*message.model)を確認して実装。
  • 単価は目安(変動しうる)。UI に「推定」を明示し、コストで機能を無効化しない方針を守る。
  • 全セッション横断の集計ダッシュボードは今回は範囲外(per-session の推定を提供)。必要なら別途。

#19。stream-json 不在のため transcript(JSONL) から usage を集計し、推定として表示する。
コストで機能は gate しない。

- LaboLaboEngine に TranscriptUsage(assistant 行の usage 合算)/AgentUsage/
  ModelPricing(opus/sonnet/haiku の概算単価)を追加。純粋関数でテスト可能。
- AgentSessionModel が応答完了/終了(Stop/SessionEnd)時に transcript を
  バックグラウンドで読み usage を更新(hooks 方式のときのみ得られる)。
- セッションバーに使用量ボタン+ポップオーバーを追加。モデル・トークン内訳・推定
  コストを表示し「推定・実課金と一致しない場合あり」を明示。
- テスト: TranscriptUsage 7 件(合算・不正行無視・空・コスト推定・ファミリ判定)。
  swift test 53 passed / app build 成功。

Closes #19
@sasagar sasagar marked this pull request as ready for review July 2, 2026 10:58
@sasagar sasagar merged commit ee3eba0 into dev Jul 2, 2026
1 check passed
@sasagar sasagar deleted the feature/cost-dashboard branch July 2, 2026 10:58
sasagar added a commit that referenced this pull request Jul 2, 2026
#19。stream-json 不在のため transcript(JSONL) から usage を集計し、推定として表示する。
コストで機能は gate しない。

- LaboLaboEngine に TranscriptUsage(assistant 行の usage 合算)/AgentUsage/
  ModelPricing(opus/sonnet/haiku の概算単価)を追加。純粋関数でテスト可能。
- AgentSessionModel が応答完了/終了(Stop/SessionEnd)時に transcript を
  バックグラウンドで読み usage を更新(hooks 方式のときのみ得られる)。
- セッションバーに使用量ボタン+ポップオーバーを追加。モデル・トークン内訳・推定
  コストを表示し「推定・実課金と一致しない場合あり」を明示。
- テスト: TranscriptUsage 7 件(合算・不正行無視・空・コスト推定・ファミリ判定)。
  swift test 53 passed / app build 成功。

Closes #19
sasagar added a commit that referenced this pull request Jul 2, 2026
#19。stream-json 不在のため transcript(JSONL) から usage を集計し、推定として表示する。
コストで機能は gate しない。

- LaboLaboEngine に TranscriptUsage(assistant 行の usage 合算)/AgentUsage/
  ModelPricing(opus/sonnet/haiku の概算単価)を追加。純粋関数でテスト可能。
- AgentSessionModel が応答完了/終了(Stop/SessionEnd)時に transcript を
  バックグラウンドで読み usage を更新(hooks 方式のときのみ得られる)。
- セッションバーに使用量ボタン+ポップオーバーを追加。モデル・トークン内訳・推定
  コストを表示し「推定・実課金と一致しない場合あり」を明示。
- テスト: TranscriptUsage 7 件(合算・不正行無視・空・コスト推定・ファミリ判定)。
  swift test 53 passed / app build 成功。

Closes #19
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