feat: 使用量/コストの推定表示(transcript 集計・#19)#38
Merged
Merged
Conversation
#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
Closed
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
背景
#19「コストダッシュボード(推定明示)」。stream-json が使えない構成のため usage/cost 信号が弱い。
Stophook で得られる transcript(JSONL) から best-effort に集計し、UI で「推定」と明示する。コストで機能は gate しない。変更点
エンジン(純粋ロジック)
TranscriptUsage.parse(jsonl:): transcript のtype=="assistant"行のmessage.usage(input_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 方式のときだけ取得できる)。検証
swift test: 53 passed(TranscriptUsageTests7 件 = 合算 / 不正・非 assistant 行の無視 / 空 / opus・cache のコスト推定 / 未知モデル / ファミリ判定)。xcodegen generate→xcodebuild … build成功(新規ファイルUsagePopover.swiftを追加したため再生成)。スコープ / 設計メモ
message.usage.*とmessage.model)を確認して実装。