Files
paseo/plugins/antigravity-provider/test/fixtures
Mohamed Boudra 7b0cace991 Restore Antigravity with Full access and session warnings (#5795)
* Revert "Remove the unreleased Antigravity provider plugin (#5781)"

This reverts commit 9d9d9af993.

* fix(providers): commit plugin notices emitted during session opening

* feat(providers): restore Antigravity with full access and session warnings

* fix(providers): warn once when opening Antigravity sessions

Driver respawn retains the live transcript and unchanged permission posture. Emit the warning only when opening a session, including resume after a daemon restart.
2026-09-30 23:18:05 +01:00
..

agy 1.2.13 stream-json captures

denial-replay.stdout.ndjson replays two turns from one real 1.2.13 process: a denied shell command, then a text-only answer whose result retains the first denial. The replay clock is synthetic; frames retain the native cumulative denial payload.

Captured on Linux x86_64 on 2026-09-29. These are observations from the supplied binary, not guarantees for the Google sign-in route. No product code or capture drivers are included.

Each row names a capture prefix. Its .stdin.ndjson, .stdout.ndjson, .stderr.ndjson, and .capture.ndjson companions keep the streams separate; empty streams are empty files. Every line wraps the exact decoded JSON frame or text line in {t_ms, stream, data}. t_ms is milliseconds since construction immediately before spawn. Capture annotations record launch arguments, configuration, signals, EOF, timeouts, and exit code; they are not CLI output. Line references refer to the indicated file, starting at 1.

Commands below run from <WORKSPACE>. <AGY> expands to <HOME>/.local/opt/agy/1.2.13/agy in the real installation home; the child uses a separate isolated <HOME> for state. All captures remove inherited credential/provider environment variables, set HOME, XDG_CONFIG_HOME=<HOME>/.config, XDG_CACHE_HOME=<HOME>/.cache, XDG_DATA_HOME=<HOME>/.local/share, BROWSER=/bin/true, and loopback-only NO_PROXY/no_proxy. Neither PATH nor shell rc files changed. Resume rows reuse the original isolated HOME.

For rows marked API, the environment also contains GEMINI_API_KEY=<DUMMY_KEY> and GOOGLE_GEMINI_BASE_URL=http://127.0.0.1:<PORT>, and <HOME>/.gemini/antigravity-cli/settings.json contains {"modelProvider":"gemini"}. Env only sets those two variables without the setting; None has neither. The loopback translator reused the prior QA route and forwarded real requests to a paid upstream model. Its credential was read programmatically inside the temporary proxy, with later captures passing it through the proxy environment. It was never passed to agy or recorded. The translator maps all requested Gemini models to one upstream Gemini model: request routing and CLI selection are verified, native model identity/quality is not.

The translator emits text, function calls, thought parts and usage. Its usage mapping does not populate Gemini thinking/cache counts, so observed zero thinking_tokens/cache_read_tokens does not prove native zeros. No dedicated reasoning frames appeared, including the matched high-effort probe.

<HOME>, <WORKSPACE>, <CAPTURE>, <PORT>, <DUMMY_KEY>, and <REDACTED_REFERENCE> are redactions. Unrelated project/model names and help examples are redacted without removing frames. Delta chunk boundaries remain; a path split across deltas can have a different placeholder spelling than the complete result. UUIDs are retained for conversation correlation.

Fixture prefix Exact argv (redacted) Auth Demonstrates agy
agents <AGY> agents API Available agents listing is plain text. 1.2.13
api-key-env-only <AGY> --input-format stream-json --output-format stream-json Env only Dummy key and custom endpoint alone do not select API-key auth. 1.2.13
api-key-settings <AGY> --input-format stream-json --output-format stream-json API modelProvider=gemini yields init; missing event input is rejected. 1.2.13
cwd-without-add-dir <AGY> --input-format stream-json --output-format stream-json --dangerously-skip-permissions API Without add-dir, model-issued pwd returned launch cwd; required tool Cwd is not exposed by this wire frame. 1.2.13
effort-unsupported-family <AGY> --input-format stream-json --output-format stream-json --model '<REDACTED_REFERENCE>' --effort high API Unsupported non-Gemini family rejects effort; model reference redacted. 1.2.13
effort-encoded-match <AGY> --input-format stream-json --output-format stream-json --model gemini-3.8-flash-high --effort high API Matching high effort accepted; arithmetic turn; no thought delta observed. 1.2.13
effort-encoded-mismatch <AGY> --input-format stream-json --output-format stream-json --model gemini-3.8-flash-high --effort low API High-suffixed model conflicts with effort=low; no init. 1.2.13
effort-mismatch <AGY> --input-format stream-json --output-format stream-json --model gemini-3.1-pro-preview --effort low API Unlisted preview ID does not support effort; startup ERROR. 1.2.13
help <AGY> --help None Launch flags and subcommands; help is on stderr. 1.2.13
image-content <AGY> --input-format stream-json --output-format stream-json --disable-slash-commands API Image source block rejected: only text blocks supported. 1.2.13
mcp-add-http <AGY> mcp add phase0 'http://127.0.0.1:<PORT>/mcp' None Writes .gemini/config/mcp_config.json; file content recorded in capture annotations. 1.2.13
mcp-add <AGY> mcp add phase0 --url 'http://127.0.0.1:<PORT>/mcp' None Invalid --url syntax rejected; no configuration written. 1.2.13
mcp-global <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands --dangerously-skip-permissions API Global HTTP server discovered; strict tool call fails because arguments is a string. 1.2.13
mcp-help <AGY> mcp add --help None MCP add syntax, HTTP transport, headers/env; flags precede name. 1.2.13
mcp-list <AGY> mcp list None Model-free empty server list, exit 0. 1.2.13
mcp-project-config <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands --dangerously-skip-permissions API Workspace .gemini/config.json mcpServers not discovered in this probe. 1.2.13
mcp-project-isolated <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --dangerously-skip-permissions API Project MCP discovery; no global MCP config before/after; strict arguments error. 1.2.13
mcp-project <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands --dangerously-skip-permissions API Project .agents/mcp_config.json discovers HTTP server; strict call rejects string arguments; later translator 502 retained. 1.2.13
mcp-second-add-dir <AGY> --input-format stream-json --output-format stream-json --disable-slash-commands --dangerously-skip-permissions --add-dir '<WORKSPACE>' --add-dir '<CAPTURE>/owned' API Discovers project MCP from the owned directory; strict arguments fail. Shell uses owned directory and writes occur in both directories. 1.2.13
mcp-owned-first-add-dir <AGY> --input-format stream-json --output-format stream-json --disable-slash-commands --dangerously-skip-permissions --add-dir '<CAPTURE>/owned' --add-dir '<WORKSPACE>' API Reversing argv does not restore command working directory; owned directory remains the shell default. 1.2.13
mcp-owned-cwd <AGY> --input-format stream-json --output-format stream-json --disable-slash-commands --dangerously-skip-permissions --add-dir '<WORKSPACE>', launched in <CAPTURE>/owned through a symlink API Discovers owned project MCP, but shell and initial read resolve against owned cwd; writes occur in both directories. 1.2.13
mcp-agent-file <AGY> --input-format stream-json --output-format stream-json --disable-slash-commands --dangerously-skip-permissions --add-dir '<WORKSPACE>' --agent '<CAPTURE>/owned/agent.md' API Direct external agent filename falls back to default; no MCP discovery. Shell/read/write use workspace. 1.2.13
mcp-agent-definition <AGY> --input-format stream-json --output-format stream-json --add-dir '<CAPTURE>/owned' --add-dir '<WORKSPACE>' --agent phase2 --dangerously-skip-permissions API Nested Markdown definition with inline mcpServers is not found; default agent, no MCP server. 1.2.13
mcp-agent-discovered <AGY> --input-format stream-json --output-format stream-json --add-dir '<CAPTURE>/owned' --add-dir '<WORKSPACE>' --agent phase2 --dangerously-skip-permissions API Flat Markdown definition plus agents.json manifest is also not found; default agent, no MCP server. 1.2.13
image-file-external <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands API Default mode reads an external image path with view_file and correctly describes its pixels, without an extra add-dir. 1.2.13
model-switch-invalid <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --conversation b966b16a-caf4-448a-bb24-0e34956022b0 --model gemini-3.1-flash-lite-preview API Unlisted model ID rejected before init. 1.2.13
model-switch-network <AGY> --input-format stream-json --output-format stream-json --conversation b966b16a-caf4-448a-bb24-0e34956022b0 --model gemini-3.8-flash-low API Listed model respawn plus actual Gemini request path in capture annotations; COBALT preserved. 1.2.13
model-switch-resume <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --conversation b966b16a-caf4-448a-bb24-0e34956022b0 --model gemini-3.1-flash-high API Another unlisted model ID rejected before init. 1.2.13
model-switch-valid <AGY> --input-format stream-json --output-format stream-json --conversation b966b16a-caf4-448a-bb24-0e34956022b0 --model gemini-3.8-flash-low API Listed low-effort model accepted on same conversation; COBALT preserved. 1.2.13
models-api-key <AGY> models API Authenticated catalog is tab-separated model ID and display label. 1.2.13
models-unauthenticated <AGY> models None Models requires auth; no catalog on stdout. 1.2.13
multi-turn-reasoning <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands API Two text turns with arithmetic; per-generation and cumulative usage. No thought delta observed. 1.2.13
not-signed-in <AGY> --input-format stream-json --output-format stream-json None No credentials: result ERROR, no init, exit 1. 1.2.13
project-skill <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands API Project skill read via view_file; marker reply. No distinct skill event. 1.2.13
question-auto-denial <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' API Requested ask_question becomes unknown DONE step, auto-skipped; no question payload on wire. 1.2.13
resume-after-interrupt <AGY> --input-format stream-json --output-format stream-json --conversation a2c2132f-0f10-400b-a142-74f82230f449 API Same interrupted conversation resumes and accepts another turn. 1.2.13
resume <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands --conversation b966b16a-caf4-448a-bb24-0e34956022b0 API Remembered COBALT after respawn; no old steps replayed. 1.2.13
schema-prompt <AGY> --input-format stream-json --output-format stream-json API Unknown prompt event ignored with stderr warning; no turn. 1.2.13
schema-user-message <AGY> --input-format stream-json --output-format stream-json API Decoding a string message fails before event dispatch. 1.2.13
schema-user <AGY> --input-format stream-json --output-format stream-json API String message rejected; message must be an object. 1.2.13
sigint-mid-text <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands --dangerously-skip-permissions API SIGINT after first text delta: interrupted result and exit 1. 1.2.13
sigint-mid-tool <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --dangerously-skip-permissions API SIGINT while run_command ACTIVE: interrupted result and exit 1. 1.2.13
sigterm <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands --dangerously-skip-permissions API SIGTERM after user_input: interrupted result and exit 1. 1.2.13
slash-disabled <AGY> --input-format stream-json --output-format stream-json --disable-slash-commands API /help sent literally to model; normal turn with built-in skill reads. 1.2.13
slash-enabled <AGY> --input-format stream-json --output-format stream-json API /help rejected in driver mode; result ERROR and exit 2. 1.2.13
stdin-close-mid-turn <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands --dangerously-skip-permissions API EOF after user_input: active turn finishes successfully, exit 0. 1.2.13
stdin-mid-turn <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands --dangerously-skip-permissions API Second prompt after first user_input queues a separate turn; two results. 1.2.13
subagent <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --dangerously-skip-permissions API Define/invoke child; subagent_info contains child ID/log URI/workspaces; child reply reaches parent. 1.2.13
text-block <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' API Array of text content blocks accepted. 1.2.13
text-turn <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' API event=user, message.content string; streaming text and final usage. 1.2.13
tools-accept-edits <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands --mode accept-edits API Read, create, edit allowed; shell auto-denied. Result SUCCESS includes denied_actions. No permission request. 1.2.13
tools-default <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands API Read, create, edit allowed; shell auto-denied. Result SUCCESS includes denied_actions. No permission request. 1.2.13
tools-plan <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands --mode plan API Read, create, edit allowed; shell auto-denied. Result SUCCESS includes denied_actions. No permission request. 1.2.13
tools-sandbox <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands --sandbox API Read, create, edit allowed; shell auto-denied. Result SUCCESS includes denied_actions. No permission request. 1.2.13
tools-skip-permissions <AGY> --input-format stream-json --output-format stream-json --add-dir '<WORKSPACE>' --disable-slash-commands --dangerously-skip-permissions API Read, create, edit and shell succeed; permission_mode=always-proceed. 1.2.13
version <AGY> --version None Installed binary reports 1.2.13. 1.2.13
mcp-http.requests.ndjson node <CAPTURE>/mcp-server.mjs alongside the MCP argv above None Actual HTTP JSON-RPC requests to a strict SDK server; params.arguments is a string. Server implements initialize, tools/list, and echo. 1.2.13 client
state-inspection.ndjson HOME=<HOME> strace -f -e trace=file -o <CAPTURE>/files.trace <AGY> --input-format stream-json --output-format stream-json; python3 <CAPTURE>/finalize.py; firecrawl scrape <OFFICIAL_MANIFEST_URL> --format markdown None Binary checksum, isolated state accesses, read-only SQLite listings, written file contents, and manifest retrieval caveat. Inspection data, not agy stdout. 1.2.13

project-skill used <WORKSPACE>/.agents/skills/phase0-marker/SKILL.md with name phase0-marker, description “Return the Phase 0 marker when requested,” and instructions “Respond with PHASE0_SKILL_MARKER. No tools are needed after reading this skill.”

Each tools capture begins with input.txt containing PHASE0_READ_MARKER, then requests create→replace from PHASE0_WRITE to PHASE0_EDIT, then printf PHASE0_SHELL. state-inspection.ndjson records the resulting files. These successful writes disprove an enforced read-only boundary for default/plan on this credential route. --sandbox alone still denies the shell at permission policy, so OS sandbox enforcement is unverified.

MCP discovery

Phase 0 project setup (mcp-project and mcp-project-isolated) places {"mcpServers":{"phase0":{"serverUrl":"http://127.0.0.1:<PORT>/mcp"}}} in <WORKSPACE>/.agents/mcp_config.json. mcp-project-config instead uses <WORKSPACE>/.gemini/config.json; that file did not expose the server. HTTP calls send string arguments and fail strict validation.

Phase 2 places the same HTTP configuration, named phase2, in a plugin-owned <CAPTURE>/owned/.agents/mcp_config.json. Both add-dir orders discover it, as does launching in the owned directory and adding the real workspace. All three turns execute shell pwd in the owned directory. The file turns read the workspace marker but also write output.txt into the owned directory. These routes fail the requirement that tools resolve against the user's workspace. Reordering arguments did not change the observed shell cwd; the precise directory selection rule is unverified.

The external --agent file, nested agent definition, and flat definition with an agents.json manifest contain inline mcpServers. Native logs record “not found, falling back to default” for each. These experiments do not establish that every agent definition format is unsupported. parity-inspection.ndjson records their definitions and log evidence. Searching the tested binary's strings found no AGY_MCP, MCP_CONFIG, AGY_CONFIG, or ANTIGRAVITY_CONFIG override; no environment discovery route was verified.

No tested MCP route satisfies both discovery and workspace ownership. MCP implementation stopped at this gate: no relay or MCP capability change was added. Images and the daemon e2e continued independently. No global MCP configuration exists in the isolated homes, and no configuration was written into the user repository.

Image file fallback

image-file-external.png contains a red triangle on the left and a blue circle on the lower right, against white. The prompt supplies only its path and asks for visible shapes and colors. image-file-external.stdout.ndjson:4–5 records a successful view_file; the result describes the pixels correctly. The native function response supplies bytes at functionResponse.parts[].inlineData. The temporary translator was corrected to forward these nested parts to the model; forwarding top-level parts alone dropped the image. parity-inspection.ndjson records the image hash and response-part location.

This verifies one default-mode CLI turn reading a file outside the workspace without an extra add-dir. A later isolated-daemon run attached the same image through the provider and returned the same shapes and colors after a successful view_file. The provider advertises prompt.image; MCP remains outside the parity implementation.

Unverified: Google login behaviour; native reasoning/cached-token accounting; filesystem/network isolation under sandbox plus approved commands; exhaustive tool policy; other agent definition formats or environment MCP overrides; child transcript streaming beyond parent metadata; a stable public conversation-list command. No fresh login was created. The fetched official manifest returned 1.2.12 while this binary reports 1.2.13; the checksum identifies the tested binary, but that response does not establish its release provenance.