feat(provider): gemini-cli adapter — third AgentProvider, pinned on 0.42.0 (#126) #129
No reviewers
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Cloonar/coding-lab!129
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "afk/126"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Third
AgentProvider: Gemini CLI, at the codex bar (ADR-0036 DoD), every fragile coupling pinned against gemini-cli 0.42.0 on the lab host. Spike evidence is in #126's Amendment 1 (posted before adapter code, live + bundle provenance); ADR-0041 pins the decisions;internal/compat/gemini/compat.mdpins the couplings.Commits
feat(provider): LiveSignals.Setup gains an env return (the issue's open implementation point) — gemini arms per-run telemetry wholly through spawn env; claude-code unchanged (nil env), settings-file arming byte-identical.feat(provider):internal/provider/geminimirrors codex file-for-file — yolo/skip-trust/session-id spawn, UUIDv5 lab-minted session identity (collision = exit 42, live-pinned), eager-birth session-JSONL transcript with last-writer-wins-by-id fold +$rewindTo, telemetry-outfile liveness (user_prompt/conversation_finished— the latter fires exactly under lab's yolo-interactive posture, #62 hard evidence), oauth-code login (URL scrape + code paste, completion = creds-file birth), pin-guarded user-settings merge (context.fileNamelist,selectedType-if-absent, Clearcut kill; never touchessessionRetention), native.gemini/skillsdiscovery, single-Escape interrupt with the double-Esc//rewind and Ctrl-C/quit bans. Registered in the conformance table, neutrality exemptions, andcmd/lab/main.go.feat(deploy):agentPackages.gemini = pkgs.gemini-cli(ADR-0033), flake module-check assertions extended.docs(adr): ADR-0041.docs(compat): the compat record — 11 provenance-tagged sections + live re-verification; hermetic probe tests plus fourLAB_COMPAT_LIVE=1no-auth recipes, all green against the real 0.42.0 binary (version, help surface, eager birth + exit-42 collision, NO_BROWSER URL print).Verification
providertest.Conformancegreen for claude-code, codex, gemini (incl. seeding-exclude-coverage, seeding-incogni, dual-engine scrub-markers).go build ./..., fullgo test ./...(exceptinternal/tmuxxintegration tests, which fail identically at pristinemainin this sandbox — environmental; CI has the real tmux/prlimit rig),golangci-lint 2.12.20 issues, web vitest 593/593,nix build .#checks.x86_64-linux.nixos-modulegreen,labctl secret scanclean.Creds-gated residuals (documented, not blocking)
~/.gemini/oauth_creds.jsonwas not seeded during this run (decision 3 expected a maintainer copy; push notification sent). Everything needing an authenticated turn is bundle-pinned and enumerated in Amendment 1's residual list + compat.md §Live re-verification: live turn-fold fixtures +conversation_finished-in-outfile confirmation,/memory showprobe, a completed login round-trip, the/modelfree-tier sweep (catalog is bundle-pinned until then), and incogni attribution ground truth from a real run. Once creds land, the upgrade path is: run the live sweep, post Amendment 2, refresh compat provenance.Also recorded: pinned nixpkgs deploys gemini-cli 0.47.0 while these couplings pin 0.42.0 (the host binary) — compat.md's re-verification section owns that gap.
Closes #126
🤖 Generated with Claude Code
https://claude.ai/code/session_019EwjhpDCaYvxkwRC2f5HGz
gemini-cli 0.42.0 has no --telemetry* CLI flags — telemetry (the gemini adapter's live-signal channel) is configured via env vars alone. Generalize the LiveSignals lifecycle capability so Setup can arm through the spawn environment as well as (or instead of) a settings file: - provider seam: Setup gains a fourth return, env []string ("K=V" entries lab adds to the runner's extraEnv, riding tmux -e); settingsPath "" now means "no file to write", not an error - claudecode: returns nil env (arms wholly through the --settings file; payload byte-identical) - instance: armDialogHooks renamed armLiveSignals; env-only arming skips the settings write but still threads args+env; env appended to the launch-local extraEnv before runner.Start - providertest.Fake: SetHookEnvOnly scripts the env-only shape; two new launch tests pin env-only arming (env reaches extraEnv, no settings file, no --settings flag) and the unchanged claude-style shape Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019EwjhpDCaYvxkwRC2f5HGzView command line instructions
Manual merge helper
Use this merge commit message when completing the merge manually.
Checkout
From your project repository, check out a new branch and test the changes.