Fix 100% one-shot rate for Gemini/Mistral/Kiro/Goose#353
Conversation
SwiftUI MenuBarExtra with litellm-snapshot pricing, Claude/Codex/Copilot parsers, session discovery, auto-refresh timer, and dashboard UI matching the real menubar design.
Private Mac App Store build, not for the public repo.
These providers aggregated all tool calls into a single ParsedProviderCall per session, losing the sequential Edit→Bash→Edit signal that countRetries needs. Added toolSequence field that preserves per-message tool ordering through the pipeline. Also makes insight pills horizontally scrollable.
|
Thanks for jumping on this. I opened #352 from the same #336/#351 thread, so we now have two overlapping approaches. The path in #352 keeps Gemini’s per-assistant-message calls from #340 and groups them back under the user turn for retry classification. The behavior proof there is provider-level: a synthetic Gemini Your
Happy to rebase/adapt #352 or help split this PR, whichever direction you prefer. |
Summary
ParsedProviderCallper session, deduplicating vianew Set(). The retry detector (countRetries) needs to see the sequentialEdit→Bash→Editpattern across multiple calls — with only 1 call, it always returned 0 retries → 100% one-shot rate.toolSequence?: string[][]field that preserves per-assistant-message tool ordering through the full pipeline (ParsedProviderCall→CachedCall→ParsedApiCall). The classifier expandstoolSequencesteps alongside regularassistantCalls, so retry patterns are detected even from aggregated provider calls.Changed files
providers/types.ts,session-cache.ts,types.tsparser.ts(carry-through)classifier.ts(expand toolSequence in countRetries)gemini.ts,mistral-vibe.ts,kiro.ts,goose.tsHeatmapSection.swift(ScrollView pills)classifier.test.ts(+5 new retry tests)Test plan