* fix(antigravity): show installed skills in Antigravity Chat
Orca's managed Antigravity server runs with its own GEMINI_HOME so its
sign-in stays separate, which also hid the person's user-wide skills.
Before each launch, link the chat home's config/skills and
antigravity-cli/skills to the ones in ~/.gemini, as the common pattern
does. Empty placeholder folders are replaced, folders with content are
kept, and a failure only logs.
Tracked in #39528.
* fix(antigravity): link a chat home's skills one launch at a time
Two chats starting together could both find the empty placeholder; one
removed it while the other failed, and a harness recreating it left the
chat without skills. Launches now link a chat home one at a time, retry
once when the placeholder reappears, and leave links alone when the
skills folder is unreadable rather than missing.
* test(antigravity): make the dangling skill link fixture portable to Windows
agy-acp-server 1.4.1 keeps the personal sign-in at
<GEMINI_HOME>/antigravity-acp/acp_token.json; nothing it writes ends in
oauth-token, so a signed-in Chat read as signed out and new chats could
move to the host's ~/.gemini account.
Fixes#39395
Co-authored-by: Neil <neil@stably.ai>
* refactor(main): organize runtime implementation owners
* test: retire wall-clock CLI title recovery case
* refactor: route new folder mutation to runtime store owner
* test: import folder mutation store contract from its owner
agy has no Full access session mode, so Full access chats always fell back to
Orca's managed runtime, which kept most people off the host's agy (and off
Intel Macs, where only the host can run it). agy 1.5.2+ `agy acp` accepts
--dangerously-skip-permissions, which approves tool requests but not plans.
Host chats now launch with that flag only in Full access, in agy's default
mode. Switching permission mid-chat already restarts the ACP process and
resumes the session, so the flag follows the chat's mode. The flag never
approves plans, and Orca still leaves agy's requests to the person, so plan
approvals keep surfacing.
The cached readiness check launches with the flag, so a build that rejects it
keeps chats on Orca's runtime without an extra spawn; such a binary is not
checked again until it changes. Because ask and Full access both run agy's
default mode, the reported mode is read per launch, so a Full access chat
does not show as Ask.
Refs #39006, #33188
The managed-runtime install message now names the observed cause after the
existing headline: a timeout, an exit code with a redacted stderr excerpt, or
the version the server answered as. The host agy check that shares the
initialize helper is unchanged.
Takes over #34167 by @Jinwoo-H (away), ported onto main after #39006.
Co-authored-by: Jinwoo-H <73622457+Jinwoo-H@users.noreply.github.com>
A keychain item for agy does not prove agy can sign in silently: agy acp then
answers every session request with "Authentication required", and Orca never
authenticates the host (oauth-personal opens a browser). The host check now
also lists sessions after initialize (which writes no conversation, unlike
session/new), so a signed-out agy keeps new chats on Orca's runtime. Any
answer except an incompatible binary is rechecked after 5 minutes so a lapsed
or restored sign-in is noticed. agy settings that name a modelProvider select
API-key auth, whose key host launches drop, so they keep chats off the host.
Refs #39006
* fix(antigravity): keep Gemini Enterprise chats off the host's agy
A saved Chat account type other than a personal Google account (or a
malformed or still-saving one) now keeps new Antigravity chats on Orca's
managed runtime, whose sign-in honors it. Before, Enterprise users who had
not yet signed in to Orca's Chat were silently pinned to the host agy's
personal account. The check reads the execution host's own saved settings,
and the health snapshot refreshes when the setting changes.
Refs #39006, #38737
* test(antigravity): drop the settings cast
* feat(antigravity): run Chat on the host's agy acp when compatible
New Antigravity chats prefer a compatible host-local `agy acp` (initialize
must answer as "Antigravity ACP Server" >= 1.5.2, protocol 1, loadSession and
session/resume) and fall back to Orca's managed runtime otherwise. The chat's
account home pins its backend, so resume and auth failures never switch it.
Managed chats and their <userData>/antigravity-chat sign-in are unchanged.
Refs #38833, STA-14062
* test(acp): launch an attached host rig with its spec
* fix(antigravity): keep Orca's Chat sign-in, back off a hung agy, and never downgrade permissions
The host's agy takes a new chat only when nobody is signed in to Orca's own
Chat and agy has its own credential. A failed check waits 5 minutes before
retrying (5 s timeout). Full-access chats stay on Orca's runtime, and a host
chat refuses a permission mode agy lacks instead of asking.
* fix(antigravity): check agy's sign-in without a keychain prompt, ignore inherited API keys, allow own mode
agy falls back to an inherited GEMINI_API_KEY, which its models reject, so
host chats drop it. The macOS presence check reads only the keychain item's
attributes. Chats in agents' own permission mode may use the host's agy.
* fix(native-chat): show Orca's install card only for chats on the managed runtime
The status summary marks chats pinned to a host program (hostProgram), so a
chat on the host's agy is no longer blocked when Orca's runtime is missing.
* fix(mobile): show host agy sign-in copy for Antigravity chats
The desktop host now reports antigravitySystemNotSignedIn when a chat on the
host's agy is signed out; give the phone the same copy so its failure table
stays complete.
* Support Gemini Enterprise authentication for Antigravity Chat
* Keep Antigravity account settings current across clients
* Type the mutable account snapshot fixture
* Keep account settings readable during Antigravity sign-in
* Use standard account form controls and localized placeholders
* Refresh Antigravity account settings after host reconnect
* Annotate the account form fixture without a cast
* Keep Antigravity auth settings at the ACP boundary
* Exercise host settings in the Enterprise sign-in regression
* Save visible Antigravity account settings before sign-in
* Remove obsolete account Apply copy and correct renderer test types
* Put Antigravity sign-in choices before the action
* Keep unchanged account fields editable on blur
* Preserve Antigravity sign-in status beside account choices
* Fix sign-in status predicate type narrowing
* Reject unconfirmed Antigravity account settings
* Show a shared Antigravity account failure once
* Type the Antigravity publication candidate
* Pair Antigravity settings failures with meaningful recovery
* Register account failure copy and refresh the schema catalog
* Keep the latest Antigravity save outcome ahead of delayed reads
* Type the retained account normalization fixture directly
* Keep RPC recovery coverage within its project boundary
* Keep Antigravity settings recovery in the Sign in action
* Keep unavailable Antigravity choices out of the recovery form
* Keep Antigravity settings reads stable across renders
* Retain the ACP task fixture deletion option type
* Hide unavailable Antigravity sign-in choices after a load failure
Antigravity Accounts rejected a WSL account location outright. agy inside
WSL keeps its login in its file store (~/.gemini/antigravity-cli/
antigravity-oauth-token; it detects WSL the same way
isAntigravityFileStorageHost does), so save/select/remove now work there:
- A WSL credential backend reads and writes that file through runWslProcess
in the selected distro (default resolved via resolveWslDefaultDistro). It
checks the distro is running before every guest command and never starts a
stopped one. Writes are a compare-and-swap inside the guest (sha256 of the
expected file), go through a private temp file and rename, and pass the
credential on stdin rather than the command line.
- runWslProcess accepts stdin input for argv-delivered commands.
- Each distro gets its own encrypted vault, so accounts never cross distros
or the Windows host.
- Accounts "Refresh usage" is enabled for WSL now that usage reads the
selected runtime (#38985), and rejects a reading tagged with another
runtime's provenance.
Fixes#25847
Linear: STA-9624
* refactor: group structured session modules by owner
* test: retire status history work-count oracle suite
* refactor(main): organize journal storage and projection owners
* Consolidate restart recovery fixture imports
* Consolidate concrete session option model imports
* feat(antigravity): report last-known quota for every saved account
agy has one shared login, so Orca never switches it to read another
account. Each successful usage read is now verified against the native
login before and after the fetch, attributed to the matching saved
account, and kept in the vault per runtime with its original read time.
A login change mid-read discards the reading. Settings, the status bar
usage popover, and orca account list --json show each saved account's
last reading, or unknown when it was never read.
Fixes#31664
STA-11623
* chore(antigravity): add saved-account quota copy and status bar fixture
* fix(antigravity): clear the sign-in hold when agy signs in again to the same account
Comparing logins by Google subject meant a fresh sign-in to the same
account never reported a credential change, so the meter stayed on
"Sign in with agy". A new refresh token now counts as a change; agy's own
token refresh keeps the refresh token and still doesn't.
* test(antigravity): attribute a WSL runtime's reading to that runtime's saved accounts
* fix(antigravity): switch agy accounts through the Linux Secret Service keyring
agy stores its Linux login with go-keyring's Secret Service provider
(service=gemini, username=antigravity, login collection or default alias)
and falls back to its credential file without a session bus, in containers,
SSH and WSL. Add a secret-tool/gdbus adapter that mirrors that collection
choice, refuses locked keyrings with a clear error, and keep the file store
for headless hosts.
Fixes#32818 (STA-11911)
* test(antigravity): avoid casts in Linux keyring adapter test
An ACP agent's TMPDIR sat inside the data folder. On macOS that path made
a socket such as datacloud-mcp-dataAgentKit-antigravityide.sock 131 bytes
long, over the 103-byte limit, so child programs could not bind it.
When a socket under the data-folder root would not fit, use a short
per-user folder in /tmp (mode 0700, owner checked via ensureOwnedPrivateDir,
keyed by a hash of the data root so Orca copies never wipe each other), and
clear the old data root once. Roots that fit, and Windows, keep the current
behavior.
Ported from #33948 onto current main (acp-private-temp now uses
launchPreparationFailure; daemon-socket-endpoint-path moved under
daemon/endpoint/publication; the launch-parity test it touched was removed).
Co-authored-by: Manan Chataut <thefrikidude@thefrikidude.local>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
* fix(ai-vault): list managed Antigravity chats in Agent Session History
Orca's managed Antigravity chat sets GEMINI_HOME under the app's data
directory, so its transcripts land in antigravity-chat/antigravity-acp/brain,
which the history scanner never walked. Scan that root, take each session's
cwd from the server's conversations/<id>.meta so the row shows in its
workspace, and treat rows no chat owns as transcript references, since agy
cannot open the server's conversations.
* fix(ai-vault): scan managed Antigravity chats only for reference-aware clients
Capture Antigravity process ownership before managed hook shells and preserve it through HTTP, startup replay and host relays. Reuse host admission for desktop and mobile, including foreground recovery.
Fixes#37505
Co-authored-by: zhangxaochen <3416677+zhangxaochen@users.noreply.github.com>
* fix(antigravity): avoid built-in skill files in repositories
* fix(antigravity): say which runtime releases write the skill file
* test(antigravity): read the recorded 1.4.1 model and Effort options
* test(antigravity): type the recorded option key
* fix(acp): update Antigravity model and effort metadata
* fix: confirm ACP model families and idle option metadata
* Preserve provider-owned model and effort selection
* test: repair model option host and consumer fixtures
* Use the provider child type for optional delivery ownership
* test: match model option fixtures to their protocol contracts
* fix: isolate resting options from adapter type dependencies
* Preserve Antigravity option fixture types
* Match option fixture control response contract
---------
Co-authored-by: Vyacheslav Scherbinin <gentslava@mail.ru>
* Support Windows native Antigravity account credentials
* Preserve Antigravity prompt arguments and sanitize Windows file failures
* Preserve Windows credential bytes and distinguish native read failures
* Import Buffer type in Windows security declarations
* Expose native credential bytes without a Node type dependency
* Let Windows agy launches keep shell ownership
* fix: declare Windows account messages and cover owner scope
* fix: resolve Windows account authority before snapshot projection
* fix: share Windows credential parsing with saved account reader
* test: type saved account identity lookup mock
* test: isolate native account fixture host detection
* test: reuse filesystem mock for container marker control
* test: preserve native credential contract failure diagnostics
* test: normalize private read expectation and cover Windows boundary
* Support launcher command prefixes for all chat agents
* Preserve launcher path arguments and copy routing checks
* Match Japanese command guidance to the Agent settings label
* test(pi): expect version probe termination barrier
* test(chat): expect current command refusal guidance
* fix(acp): refuse copy arguments before launch preparation
agy 1.4.7 stores no id_token, so Save current account stayed disabled and the account could not be saved. Save now asks Google's userinfo endpoint which account owns the current access token (only on the Save click), then saves it, or updates the saved account with the same Google subject. The credential is re-read after the lookup, and nothing is saved if it changed.
Fixes#33323
After agy silently refreshes its Google token (the new credential has no id_token), Orca still matches the saved Antigravity account by auth method + refresh token instead of refusing the launch with "native Antigravity account changed"; the vault accepts such refreshed snapshots while still rejecting one whose id_token names a different account.
Fixes#31579
Supersedes #33204
Co-authored-by: biojuho <258838639+biojuho@users.noreply.github.com>
Co-authored-by: Manan <100475418+thefrikidude@users.noreply.github.com>
Combine the completed comment cleanup from 319 stacked PRs into one change against `main`, so the full CI suite validates the combined result once. This replaces the previous audit stack; no additional audit work is included.
The change shortens redundant comments across 2,753 source and shell-snapshot files (25,235 net lines removed). Conflicts preserve current-main executable code. Runtime behavior, test assertions, directives, licenses, generated notices, SAFETY rationales, and compatibility markers are preserved. The audit tracker remains local, outside the repository.
Validation:
- Equivalent source/emitted AST and executable tokens across all 2,750 source files, with separate checks for embedded shell, SQL, JavaScript, CSS, and generated fixtures.
- Identical executable lines in the three shell snapshots; protected comments unchanged.
- Changed-code quality gate passed with no new findings.
- 358 tests passed, 2 skipped across 23 focused test files.
- `git diff --check` passed.