{"content":"SDK 0.3 feature integration: per-session token/cost display, DeepSeek-first (completes original #8).\n\nBranch: feat/sdk-0.3-feature-integration. Commit 4214e69.\n\nResearch findings: DeepSeek API returns usage {prompt_tokens, completion_tokens, prompt_cache_hit_tokens, prompt_cache_miss_tokens} but no dollar cost. IDBots' proxy dropped all usage in streaming (no stream_options.include_usage → SDK saw 0/0). SDK usage_EXPERIMENTAL is Anthropic-priced, unusable for proxy providers.\n\nProxy passthrough (the core fix): anthropicToOpenAI sets stream_options.include_usage on streaming requests; OpenAIStreamChunk.usage gains DeepSeek top-level cache fields; emitMessageDelta maps prompt_cache_hit→cache_read_input and prompt_cache_miss→cache_creation_input tokens so the SDK result event carries real per-turn tokens; non-stream path gets the same mapping. Session attribution is natural (result event belongs to the running session).\n\nRunner: accumulateResultUsage captures payload.usage from each result event into ActiveSession.usageStats; getSessionUsageStats exposes it. cowork:session:get attaches usageStats; renderer refreshes current session on stream complete so the chip updates each turn.\n\nUI: UsageStatsChip in session header — compact chip (token total + est. cost) with hover breakdown: input/output/cache hit/cache miss + cost. DeepSeek cost estimated at standard V4 rates (pro 0.003625/0.435/0.87; flash 0.0028/0.14/0.28 per 1M cache-hit/miss/output), labeled estimate; Anthropic direct uses SDK total_cost_usd. No data → no chip. zh+en. tsc clean.\n\nAll 10 original follow-ups are now complete (plus permissions/effort/PreToolUse extras).","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}