Implement ProviderAdapter for the Gemini CLI behind the existing interface (#16). Resolves, for Gemini, the §15 open item deferred until a second provider was wanted: per-provider event mapping, usage extraction, and blocker detection.
Spec §3.1 (adapter interface), §3.2 (Gemini row — headless -p, --output-format json, large context, read-only Plan Mode), §3.3 (build order + MVP note).
Acceptance criteria
Depends on: #16, #9, #4
Implement
ProviderAdapterfor the Gemini CLI behind the existing interface (#16). Resolves, for Gemini, the §15 open item deferred until a second provider was wanted: per-provider event mapping, usage extraction, and blocker detection.Spec §3.1 (adapter interface), §3.2 (Gemini row — headless
-p,--output-format json, large context, read-only Plan Mode), §3.3 (build order + MVP note).Acceptance criteria
run_session(...)invokes the Gemini CLI headless with-pand--output-format json(§3.2).NormalisedEvent(reasoning / tool-call / tool-result / output) so the UI streams live progress identically to Claude (§3.1).UsageReport(§3.1).outcome: completed | blocked | error(§3.3 note).artifactsderived from git, not provider self-report (§3.1).ProviderAdapter(§3.3).modelstring passed in; no model mapping inside the adapter (§3.1).Depends on: #16, #9, #4