import type { CredentialProfile, CredentialProfileStatus, HarnessRunSpec } from "@claudexor/schema"; type EnvMap = Record; export declare const AGY_BIN: () => string; /** Canonical, Claudexor-owned HOME for one named Antigravity binding. */ export declare function canonicalAgyProfileHome(locator: string): string; /** Diagnostic-only path for stale-file precedence fixtures. Credential * readiness and routing never infer auth from this file: the effective * transport is platform/version dependent and only the vendor probe proves it. */ export declare function agyTokenPath(profileHome: string): string; /** * Exact strict-profile env: the profile HOME selects the vendor's whole * config root (`$HOME/.gemini/...`) — agy has no config-dir env var, HOME is * the single lever. `USERPROFILE` mirrors HOME for the win32 resolver, the * auto-updater is pinned off so the closed vendor binary cannot replace * itself mid-run, and the provider scrub drops every API-key route * (`GEMINI_API_KEY` included) so a native subscription run can never silently * turn metered (INV-061). * * Unlike Cursor — whose mutable state is separately relocatable via * `CURSOR_CONFIG_DIR`, so a run keeps state in its LANE home and reads auth * from the profile — agy has exactly one lever. Overriding HOME therefore * moves the vendor's conversations/brain/cache into the profile HOME too, and * the per-lane home is unused for agy runs. Deliberate, not an oversight: a * lane-scoped `.gemini` would be a dead directory the vendor never reads. * What holds today is per-lane RESUME: a lane replays its own vendor * conversation by id (`--conversation`, INV-137). Nothing scopes those * conversations to a lane yet — the vendor's project mechanism * (`--new-project`/`--project`, Л-19) is not wired here — so one profile HOME * accumulates every thread's vendor state, and conversations are NOT scoped per * chat thread. */ export declare function agyProfileRunEnv(profileHome: string, specEnv?: EnvMap): EnvMap; export type AgyResolvedProfileRoute = { home: string; env: EnvMap; } | { refusal: string; }; /** * INV-135 route construction only: validate the named binding and build the * exact scoped environment. Credential evidence belongs exclusively to the * vendor probe; this resolver never treats a fallback token file (or its * absence) as an auth oracle. */ export declare function resolveAgyProfileRoute(profile: Pick, specEnv?: EnvMap): AgyResolvedProfileRoute; /** The HOME an agy child receives: the named binding's own HOME (applied * attempt evidence), since agy has no config-dir variable. */ export declare function agyChildHome(spec: Pick): string | null; export interface AgyProfileProbeDeps { /** Injectable live probe (tests): print-mode `/model` under the profile env. */ runModelProbe: (env: EnvMap, abortSignal?: AbortSignal) => Promise; /** Production adapter seam: prepare the profile before the vendor probe. */ prepareProfileKeychain?: (home: string) => void; } export type AgyModelProbe = { kind: "authenticated"; modelId: string | null; } | { kind: "unauthenticated"; detail: string; } | { kind: "probe_failed"; detail: string; }; /** * Quota-free liveness probe: `agy -p "/model" --output-format json` answers * from the CLI without spending a turn (vendor 1.1.11+ print-mode * slash-commands). SUCCESS proves the named binding authenticates in the * exact env its runs will spawn with (INV-067); an auth error is an honest * logged-out/revoked verdict, and a spawn/parse failure stays `unknown`. */ export declare function defaultAgyModelProbe(env: EnvMap, abortSignal?: AbortSignal): Promise; /** * Doctor projection for one agy profile (INV-135): the SAME route resolution * the run uses, then the quota-free live probe. A valid profile must admit * the route even though agy has no default store at all — the orchestrator * consults THIS probe for pinned routing. */ export declare function probeAgyCredentialProfile(profile: CredentialProfile, deps?: AgyProfileProbeDeps, abortSignal?: AbortSignal): Promise; export {}; //# sourceMappingURL=profile.d.ts.map