Repository navigation
Closed
Labels
app/aiPackage: ai (pkgs/ or apps/ in this repo)Package: ai (pkgs/ or apps/ in this repo)effort/mMedium: expected under 1 day of workMedium: expected under 1 day of workkind/bugSomething isn't working (prefixed form of the classic bug label)Something isn't working (prefixed form of the classic bug label)meta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)Ordinary priority (the default)queue/parkedQueue task is parked (waiting on CI, time, or an event)Queue task is parked (waiting on CI, time, or an event)status/parkedDeliberately paused with a recorded resume conditionDeliberately paused with a recorded resume conditionwork/assignedAn agent holds this item via the queue (claimed task)An agent holds this item via the queue (claimed task)
Description
Remainder of #1825 — remove the binary dependencies from the antigravity + vibe credential paths
Filed as the routed implementation follow-up of #1825 (re-triage of queue task 10989, 2026-11-08). #1825 stays open as the audit record; this issue owns the implementation.
Status of #1825's slices
- Narrow error-quality slice: DONE — PR fix(ai): antigravity missing-binary errors name the binary and remedies (#1825) #1844 merged (946b49c): missing-binary errors now name
secret-tool/ theagybinary and the remedies. - Architectural remainder: this issue. It was recorded BLOCKED on a design choice among (a)–(d); Drew ruled on 2026-11-06 (audit follow-up: antigravity + vibe credential paths spawn secret-tool; antigravity refresh requires the agy binary #1825 (comment)), ruling the OUTCOME instead of picking a mechanism:
"ensure this will be the last time we have to run a binary Command for a provider"
No provider may depend on running a binary command for auth. Amending the doctrine to sanction these exceptions (option d) is ruled out as a standalone answer. Per-provider mechanics are the fleet's, under that constraint.
Gap on current main (684598b, verified x2 2026-11-08)
packages/ai/src/providers/antigravity-auth.ts:156-164— every credential loadexecFilessecret-tool lookup service gemini username antigravity(15s timeout).packages/ai/src/providers/antigravity-auth.ts:175-270—findAgyBinary()+binaryIntel()extract OAuth client-secret candidates from theagybinary's bytes;refresh()(:316, :414) depends on them, so an expired token cannot refresh where the binary is absent.packages/ai/src/providers/vibe-auth.ts:118-131— tier-4 resolutionexecFilessecret-tool lookup. This is the deployed tier: the fleet config keepsMISTRAL_API_KEYout of the server env (vibe provider: native wire-protocol emulation of the Mistral Vibe binary (no ACP host, no subprocess) #1653).packages/ai/src/quota/providers/antigravity.ts:1,124— importsexecFilefromnode:child_processandexecFilessecret-tool(gracefulnull).
Chosen no-spawn route (specified in triage)
- Keyring reads move in-process at all three sites: read the Secret Service keyring via a D-Bus client binding in-process (session bus,
org.freedesktop.secrets), deleting everychild_process/execFileuse. If a D-Bus client proves infeasible in the Bun runtime, the fallback route is a provisioned credential-file tier read in place (theclaude-code/commandcodepattern — file read only, zero spawns) made the deployed default, with the subprocess keyring tier removed. Either way: no child process is spawned. - Antigravity refresh without the
agybinary: the OAuth client secret is provisioned at sign-in time into the provider's own credential store (credential-file field or envANTIGRAVITY_OAUTH_CLIENT_SECRET);findAgyBinary/binaryIntelbyte extraction is removed from the refresh path. - Deployed-tier behavior preserved: the vibe door still resolves its keyring sign-in key in the fleet configuration where
MISTRAL_API_KEYis absent from the server env.
Acceptance
- Grep for
child_process/Bun.spawn/execaoverpackages/ai/src/{providers,protocols,route}returns zero files. - Credential resolution for both doors works (or fails with the documented naming error) with
secret-toolandagyabsent from PATH, and spawns no child process. - Antigravity refresh succeeds with no
agybinary present, given a provisioned client secret. - Regression tests cover the no-binary path for both doors; existing antigravity-auth / vibe-auth tests keep passing;
packages/aitypecheck clean. - No credential value is logged, copied, or persisted anywhere new (read-in-place discipline).
Acceptance criteria
- No provider credential path in the antigravity or vibe providers executes an external binary command (
secret-tool,agy, or any other) for auth, per Drew's 2026-11-06 ruling on audit follow-up: antigravity + vibe credential paths spawn secret-tool; antigravity refresh requires the agy binary #1825. - Credentials are obtained through an in-process mechanism; missing credentials produce an actionable error naming the remedy (building on PR fix(ai): antigravity missing-binary errors name the binary and remedies (#1825) #1844's error-quality slice).
- Existing provider auth tests pass and new tests cover the no-binary credential path for both providers.
Metadata
Metadata
Assignees
Labels
app/aiPackage: ai (pkgs/ or apps/ in this repo)Package: ai (pkgs/ or apps/ in this repo)effort/mMedium: expected under 1 day of workMedium: expected under 1 day of workkind/bugSomething isn't working (prefixed form of the classic bug label)Something isn't working (prefixed form of the classic bug label)meta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)Ordinary priority (the default)queue/parkedQueue task is parked (waiting on CI, time, or an event)Queue task is parked (waiting on CI, time, or an event)status/parkedDeliberately paused with a recorded resume conditionDeliberately paused with a recorded resume conditionwork/assignedAn agent holds this item via the queue (claimed task)An agent holds this item via the queue (claimed task)
Activity
dezren39 commentedon Nov 8, 2026
🤖 Agent note · queued by triage task 10989 (resume, attempt 2)
repo-task/v1small_fix packet as task 11785 in queuerepo-health-opencode-pilot(deduperepo-health:v1:fix:developing-today-forks/opencode:issue:1964). Packet:hidden_files/10989-fix2-packet-1825.json.b3778ebdda6d1fc04d33717b12384625f849b402— antigravity-auth.ts:156-164 execFiles secret-tool, :175-270 findAgyBinary/binaryIntel GOCSPX extraction (refresh :316/:414); vibe-auth.ts:118-131 tier-4 execFiles secret-tool (deployed tier, vibe provider: native wire-protocol emulation of the Mistral Vibe binary (no ACP host, no subprocess) #1653); quota/providers/antigravity.ts:1,124 execFiles secret-tool. Drew's no-binary ruling: audit follow-up: antigravity + vibe credential paths spawn secret-tool; antigravity refresh requires the agy binary #1825 comment 6686794578.dezren39 commentedon Nov 8, 2026
Intake review
Fleet monitor intake pass (2026-11-07 run).
dezren39 commentedon Nov 8, 2026
agent-note:v1
state: picked-up
queue: repo-health-opencode-pilot
task: 11785 (small_fix, worker repo-worker-opencode, lane 3fe37e8a-c61b-419c-9e97-769ecd264d5d)
by: openchamber-scheduled-lane
at: 2026-11-08T17:43:02Z
Claimed and revalidated against fresh GitHub state: #1964 and parent audit #1825 are OPEN; no hard-stop labels are present; no matching open PR was found. Related PR #1844 is MERGED. I am starting local investigation of the no-spawn credential route; no credentials will be read or logged.