Review and unify model provider interfaces
Review implementation of model provider interfaces:
- Claude, Codex, Antigravity, Pi, ACP,
Identify opportunity to unify, move more code from specific to common, make it more industry standard, more reliable. Do web research to potentially adopt a better architecture.
Implement top ideas.
Subtasks
- [business_analysis] Review and unify model provider interfaces PRD settled: all 6 providers + ACP agents; build an Antigravity ACP shim (no TUI scraping) plus the top 3–5 ranked unification ideas, file the rest; ACP stays the wire; proof is a dev run per provider lane. Memory: none applied.
- [architecture] Review and unify model provider interfaces Antigravity → ACP via Google's pinned agy_acp_server (child A, after child 3); I1–I5 unify writes, credential reads, ACP dialect, session walk and hooks (children 1–5); V proves each lane live on dev. F1–F7 filed. Memory: proposed 1 env.
- [plan] Review and unify model provider interfaces Split by mechanism into 8 children in 2 phases: I1–I5, AC6 follow-up filing, and Antigravity ACP (depends on I3) in Unification, then a live dev check of every lane. F1–F7 are filed, not built. Acceptance is tightened per child (see report). Memory: none applied.
- Single-home staged session-user writes (I1) I1: Antigravity hooks and Codex fallback now use replace_file_as_session_user / write_rendered_hooks; AST fence on os.replace/rename with reasoned allowlist; owner/mode tested; quick gate green; PR #6562 queued. Residual account-uid script copies → draft 8820. Memory: none applied.
- Single-home non-blocking credential reads (I2) Built credential_file_present in agents/base.py; all 6 credential readers call it (5→1 copies), FIFO no longer hangs creds_state, AST+FIFO fence added. Quick gate green, review lane pass; PR #6566 queued for the lane's full gate. Follow-up draft 8826. Memory: none applied.
- Vendor-neutral ACP host via AcpDialect (I3) Built AcpDialect on the catalogue row (dialect_for). The ACP host is now vendor-neutral: vendor names in acp/ went from 31 to 4 pinned lines. Agent-text break added, native_session_id renamed, ACP census fence added. PR #6568 merged by the lane's full gate; its deploy was superseded by a later push. Follow-up: draft #8828. Memory: none applied.
- One bounded session walk everywhere (I4) I4: Gemini _chat_files and Codex _rollout_candidates now use base.SessionTreeWalk (new admit/newest_first options); walks 3→1, net −30 production LOC (~−150 expected); AST fence added. Quick gate and changed-area tests green; PR #6563 queued. Memory: none applied.
- Single-home hook rendering via base (I5) Hook rendering single-homed in base: Gemini/Antigravity use chain_hook_groups; Windows fix is base.host_hook_commands (copies 3→1, 2→1; agents LOC net +23, not −80). Pre-change golden byte-identical, AST fence proven. Quick gate green; PR #6561 queued to lane. Memory: none applied.
- Run Antigravity on ACP via agy_acp_server Antigravity API-key runs now on ACP via pinned agy_acp_server 1.4.1 (installer, catalogue, acp_launch, dialect system_prompt_meta, replay fixture); OAuth stays legacy (headless sign-in infeasible, draft #8841); steer/prefix #8842. PR #6573 merged, Jaah Deploy green. Memory: proposed 1 gotcha, 1 recipe.
- Verify every provider lane live on dev Lane check live on dev: no regression traced to epic 8783. Claude API key, Gemini key, DeepSeek, Pi and Antigravity oauth (legacy) settled. ACP transcript/usage gaps predate the epic (#8858, #8859). 6 lanes untested (no dev account, #8856). Echo SDK and Gemini oauth fail on dev and main too (#8860, #8857). Memory: proposed 1 recipe.
- [finish] Review and unify model provider interfaces All 8 children done; PRs #6561/6562/6563/6566/6568/6573 merged and deployed on dev (Jaah Deploy ad0f8f1ee green). Gap: Antigravity API-key ACP lane never run live on dev → follow-up #8862. F1–F7 and lane drafts sit outside the epic as top-level drafts. Memory: used mem-23382.
- Verify Antigravity API-key ACP lane live Antigravity API-key ACP live check on dev not run. Blocked: no Gemini key was reusable (gem2 is write-only) and the operator chose to skip supplying one. The ACP switch was confirmed deployed and ON. Codex check deferred to #8856. No code. Memory: used mem-23382.
Artifacts
Activity
- Created
- Runner started
- Ready
- Ready
- Ready
- Runner started
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Runner resumed
- Awaiting response
- Awaiting response
- Awaiting response
- Runner resumed
- Runner ended (done)
- Runner started
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Runner resumed
- Runner ended (done)
- Runner started
- Draft
- Draft
- Draft
- Draft
- Draft
- Draft
- Draft
- Draft
- Ready
- Ready
- Ready
- Ready
- Ready
- Ready
- Ready
- Ready
- Runner ended (done)
- Runner started
- Runner started
- Runner started
- Runner started
- Runner started
- Runner ended (done)
- Runner ended (done)
- Runner ended (done)
- Runner ended (done)
- Runner ended (done)
- Runner started
- Runner ended (done)
- Runner started
- Runner ended (done)
- Runner started
- Ready
- Runner ended (done)
- Runner started
- Awaiting response
- Awaiting response
- Runner resumed
- Runner ended (done)
- Runner ended (done)