Implement ProviderAdapter for the Codex CLI behind the existing interface (#16). Resolves, for Codex, 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 (Codex row — non-interactive CLI, --output-format json, token efficiency), §3.3 (build order + MVP note).
Acceptance criteria
Depends on: #16, #9, #4
Implement
ProviderAdapterfor the Codex CLI behind the existing interface (#16). Resolves, for Codex, 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 (Codex row — non-interactive CLI,
--output-format json, token efficiency), §3.3 (build order + MVP note).Acceptance criteria
run_session(...)invokes the Codex CLI non-interactively with--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