@joeytheman/gemini-mcp-tool 1.3.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/README.md +123 -34
  2. package/dist/__tests__/ask-gemini.test.js +99 -37
  3. package/dist/__tests__/ask-gemini.test.js.map +1 -1
  4. package/dist/__tests__/live-pass.test.d.ts +2 -0
  5. package/dist/__tests__/live-pass.test.d.ts.map +1 -0
  6. package/dist/__tests__/live-pass.test.js +725 -0
  7. package/dist/__tests__/live-pass.test.js.map +1 -0
  8. package/dist/__tests__/screen-review.test.d.ts +2 -0
  9. package/dist/__tests__/screen-review.test.d.ts.map +1 -0
  10. package/dist/__tests__/screen-review.test.js +444 -0
  11. package/dist/__tests__/screen-review.test.js.map +1 -0
  12. package/dist/__tests__/server.test.js +17 -12
  13. package/dist/__tests__/server.test.js.map +1 -1
  14. package/dist/__tests__/simple-tools.test.d.ts +2 -0
  15. package/dist/__tests__/simple-tools.test.d.ts.map +1 -0
  16. package/dist/__tests__/simple-tools.test.js +25 -0
  17. package/dist/__tests__/simple-tools.test.js.map +1 -0
  18. package/dist/__tests__/tools.test.js +63 -0
  19. package/dist/__tests__/tools.test.js.map +1 -1
  20. package/dist/__tests__/utils/agyExecutor.test.d.ts +2 -0
  21. package/dist/__tests__/utils/agyExecutor.test.d.ts.map +1 -0
  22. package/dist/__tests__/utils/agyExecutor.test.js +616 -0
  23. package/dist/__tests__/utils/agyExecutor.test.js.map +1 -0
  24. package/dist/__tests__/utils/agyTranscriptRecovery.test.d.ts +2 -0
  25. package/dist/__tests__/utils/agyTranscriptRecovery.test.d.ts.map +1 -0
  26. package/dist/__tests__/utils/agyTranscriptRecovery.test.js +127 -0
  27. package/dist/__tests__/utils/agyTranscriptRecovery.test.js.map +1 -0
  28. package/dist/__tests__/utils/chunkCache.test.js +26 -2
  29. package/dist/__tests__/utils/chunkCache.test.js.map +1 -1
  30. package/dist/__tests__/utils/commandExecutor.test.js +30 -6
  31. package/dist/__tests__/utils/commandExecutor.test.js.map +1 -1
  32. package/dist/__tests__/utils/fileReferences.test.d.ts +2 -0
  33. package/dist/__tests__/utils/fileReferences.test.d.ts.map +1 -0
  34. package/dist/__tests__/utils/fileReferences.test.js +87 -0
  35. package/dist/__tests__/utils/fileReferences.test.js.map +1 -0
  36. package/dist/__tests__/utils/gitStatusGuard.test.d.ts +2 -0
  37. package/dist/__tests__/utils/gitStatusGuard.test.d.ts.map +1 -0
  38. package/dist/__tests__/utils/gitStatusGuard.test.js +106 -0
  39. package/dist/__tests__/utils/gitStatusGuard.test.js.map +1 -0
  40. package/dist/__tests__/utils/responseCache.test.js +31 -11
  41. package/dist/__tests__/utils/responseCache.test.js.map +1 -1
  42. package/dist/__tests__/utils/test-helpers.d.ts +4 -0
  43. package/dist/__tests__/utils/test-helpers.d.ts.map +1 -1
  44. package/dist/__tests__/utils/test-helpers.js +16 -0
  45. package/dist/__tests__/utils/test-helpers.js.map +1 -1
  46. package/dist/constants.d.ts +68 -26
  47. package/dist/constants.d.ts.map +1 -1
  48. package/dist/constants.js +69 -28
  49. package/dist/constants.js.map +1 -1
  50. package/dist/index.js +2 -2
  51. package/dist/index.js.map +1 -1
  52. package/dist/tools/ask-gemini.tool.d.ts +34 -0
  53. package/dist/tools/ask-gemini.tool.d.ts.map +1 -1
  54. package/dist/tools/ask-gemini.tool.js +38 -22
  55. package/dist/tools/ask-gemini.tool.js.map +1 -1
  56. package/dist/tools/brainstorm.tool.d.ts.map +1 -1
  57. package/dist/tools/brainstorm.tool.js +5 -4
  58. package/dist/tools/brainstorm.tool.js.map +1 -1
  59. package/dist/tools/index.d.ts.map +1 -1
  60. package/dist/tools/index.js +3 -1
  61. package/dist/tools/index.js.map +1 -1
  62. package/dist/tools/live-pass.tool.d.ts +183 -0
  63. package/dist/tools/live-pass.tool.d.ts.map +1 -0
  64. package/dist/tools/live-pass.tool.js +548 -0
  65. package/dist/tools/live-pass.tool.js.map +1 -0
  66. package/dist/tools/registry.d.ts +4 -2
  67. package/dist/tools/registry.d.ts.map +1 -1
  68. package/dist/tools/registry.js +12 -9
  69. package/dist/tools/registry.js.map +1 -1
  70. package/dist/tools/screen-review.tool.d.ts +121 -0
  71. package/dist/tools/screen-review.tool.d.ts.map +1 -0
  72. package/dist/tools/screen-review.tool.js +415 -0
  73. package/dist/tools/screen-review.tool.js.map +1 -0
  74. package/dist/tools/simple-tools.d.ts.map +1 -1
  75. package/dist/tools/simple-tools.js +4 -2
  76. package/dist/tools/simple-tools.js.map +1 -1
  77. package/dist/utils/agyExecutor.d.ts +68 -0
  78. package/dist/utils/agyExecutor.d.ts.map +1 -0
  79. package/dist/utils/agyExecutor.js +443 -0
  80. package/dist/utils/agyExecutor.js.map +1 -0
  81. package/dist/utils/agyReport.d.ts +19 -0
  82. package/dist/utils/agyReport.d.ts.map +1 -0
  83. package/dist/utils/agyReport.js +62 -0
  84. package/dist/utils/agyReport.js.map +1 -0
  85. package/dist/utils/agyTranscriptRecovery.d.ts +16 -0
  86. package/dist/utils/agyTranscriptRecovery.d.ts.map +1 -0
  87. package/dist/utils/agyTranscriptRecovery.js +149 -0
  88. package/dist/utils/agyTranscriptRecovery.js.map +1 -0
  89. package/dist/utils/chunkCache.d.ts.map +1 -1
  90. package/dist/utils/chunkCache.js +19 -5
  91. package/dist/utils/chunkCache.js.map +1 -1
  92. package/dist/utils/commandExecutor.d.ts.map +1 -1
  93. package/dist/utils/commandExecutor.js +15 -7
  94. package/dist/utils/commandExecutor.js.map +1 -1
  95. package/dist/utils/fileReferences.d.ts +45 -0
  96. package/dist/utils/fileReferences.d.ts.map +1 -0
  97. package/dist/utils/fileReferences.js +169 -0
  98. package/dist/utils/fileReferences.js.map +1 -0
  99. package/dist/utils/gitStatusGuard.d.ts +35 -0
  100. package/dist/utils/gitStatusGuard.d.ts.map +1 -0
  101. package/dist/utils/gitStatusGuard.js +82 -0
  102. package/dist/utils/gitStatusGuard.js.map +1 -0
  103. package/dist/utils/responseCache.d.ts +3 -3
  104. package/dist/utils/responseCache.d.ts.map +1 -1
  105. package/dist/utils/responseCache.js +11 -6
  106. package/dist/utils/responseCache.js.map +1 -1
  107. package/package.json +10 -9
  108. package/dist/__tests__/utils/geminiExecutor.test.d.ts +0 -2
  109. package/dist/__tests__/utils/geminiExecutor.test.d.ts.map +0 -1
  110. package/dist/__tests__/utils/geminiExecutor.test.js +0 -337
  111. package/dist/__tests__/utils/geminiExecutor.test.js.map +0 -1
  112. package/dist/utils/geminiExecutor.d.ts +0 -17
  113. package/dist/utils/geminiExecutor.d.ts.map +0 -1
  114. package/dist/utils/geminiExecutor.js +0 -238
  115. package/dist/utils/geminiExecutor.js.map +0 -1
package/README.md CHANGED
@@ -15,7 +15,7 @@
15
15
 
16
16
  > **Fork Notice:** This project is a fork of [jamubc/gemini-mcp-tool](https://github.com/jamubc/gemini-mcp-tool), originally created by [jamubc](https://github.com/jamubc). We are grateful to the original author for their foundational work.
17
17
 
18
- This is a simple Model Context Protocol (MCP) server that allows AI assistants to interact with the [Gemini CLI](https://github.com/google-gemini/gemini-cli). It enables the AI to leverage the power of Gemini's massive token window for large analysis, especially with large files and codebases using the `@` syntax for direction.
18
+ This is a simple Model Context Protocol (MCP) server that lets AI assistants ask Gemini through Google's Antigravity CLI (`agy`). The primary use case is giving Codex, Claude Code, and other MCP clients a second opinion from Gemini on plans, implementations, code reviews, architecture tradeoffs, and large files using the `@` syntax.
19
19
 
20
20
  - Ask gemini natural questions, through claude or Brainstorm new ideas in a party of 3!
21
21
 
@@ -23,28 +23,66 @@ This is a simple Model Context Protocol (MCP) server that allows AI assistants t
23
23
  <img width="380" height="200" src="https://glama.ai/mcp/servers/@joeytheman/gemini-mcp-tool/badge" alt="Gemini Tool MCP server" />
24
24
  </a>
25
25
 
26
- ## TLDR: [![Claude](https://img.shields.io/badge/Claude-D97757?logo=claude&logoColor=fff)](#) + [![Google Gemini](https://img.shields.io/badge/Google%20Gemini-886FBF?logo=googlegemini&logoColor=fff)](#)
26
+ ## TLDR: [![Claude](https://img.shields.io/badge/Claude-D97757?logo=claude&logoColor=fff)](#) + [![Google Gemini](https://img.shields.io/badge/Google%20Gemini-886FBF?logo=googlegemini&logoColor=fff)](#) + [![Antigravity (agy)](https://img.shields.io/badge/Antigravity%20%28agy%29-4285F4?logo=google&logoColor=fff)](#)
27
27
 
28
28
 
29
- **Goal**: Use Gemini's powerful analysis capabilities directly in Claude Code to save tokens and analyze large files.
29
+ **Goal**: Use Gemini's analysis capabilities directly from Codex or Claude Code for reviews, critiques, and large-file questions.
30
+
31
+ ## What's New in 2.2
32
+
33
+ - **Gemini 4 Argon support** — `ask-gemini` and `brainstorm` now default to **Gemini 4 Argon (High)**. Argon Low and Medium are available as explicit overrides when listed by `agy models`. `live-pass` and `screen-review` continue to default to **Gemini 3.8 Flash (Medium)**.
34
+
35
+ ## What's New in 2.1
36
+
37
+ - **`live-pass`** — hand a live UI verification to Gemini. It drives its own Playwright (web) or Maestro (iOS simulator) MCP server, captures each requested screen/state/viewport into an artifact directory inside the worktree under test, opens every PNG itself, and returns a PASS/FAIL/BLOCKED verdict with a sentence per frame. The caller never opens an image. The verdict is derived in code from the requested targets, so a frame Gemini forgot, a stale PNG, or an uncovered target fails the pass even when Gemini says PASS.
38
+ - **`screen-review`** — a second pair of eyes on frames someone else captured (`mode: "review"`), or an action inventory of a route file before anything is built (`mode: "plan"`). Also text only.
39
+ - **JSON envelopes for `ask-gemini`** — `outputFormat: "json"` returns agy's envelope: the conversation ID line, the response (or `structured_output` when you pass a `jsonSchema`), and a token-usage line. `conversationId` resumes an exact conversation and **errors** if agy silently started a different one.
40
+
41
+ ## What's New in 2.0.2
42
+
43
+ - **Gemini 3.8 Flash support** — the default model is now **Gemini 3.8 Flash (High)** for strong coding and complex-analysis performance. Pass `model: "Gemini 3.8 Flash (Low)"` or `model: "Gemini 3.8 Flash (Medium)"` when latency matters more than the High reasoning budget. Gemini 3.1 Pro (Low/High) remains available as an explicit alternative when exposed by `agy models`.
44
+
45
+ ## What's New in 2.0
46
+
47
+ Version 2.0 moves the Gemini backend from the retired Gemini CLI/API path to Google's **Antigravity CLI (`agy`)** and brings the MCP-facing `ask-gemini` workflow along with several capabilities:
48
+
49
+ - **Antigravity backend** — Gemini is reached through `agy --print`.
50
+ - **Opt-in response caching** — LRU cache (30-minute TTL, 10 MB max) for repeated queries, enabled with `AGY_CACHE_ENABLED=true`.
51
+ - **Conversation resume** — continue the latest `agy` conversation or resume a specific one via the `resume` option (`--continue` / `--conversation <id>`).
52
+ - **Extra workspace directories** — add directories to the Antigravity workspace with `includeDirectories` (maps to repeated `--add-dir`).
53
+ - **Configurable print timeout** — bound long-running calls with `printTimeout` (for example `5m` or `90s`; maps to `--print-timeout`).
54
+ - **Working directory control** — run `agy` from a chosen directory (or a drive root on Windows) via `workingDirectory`, supported by both `ask-gemini` and `brainstorm`.
55
+ - **Structured change mode** — `OLD/NEW` edit suggestions Claude can apply directly, with automatic chunking and a `fetch-chunk` tool for large edit sets.
56
+
57
+ **Removed:** there is no longer a Pro→Flash quota fallback, and legacy Gemini CLI flags (`outputFormat`, `extensions`, `debug`, `promptInteractive`, and `approvalMode` other than `yolo`) now return explicit unsupported-option errors.
30
58
 
31
59
  ## Prerequisites
32
60
 
33
61
  Before using this tool, ensure you have:
34
62
 
35
63
  1. **[Node.js](https://nodejs.org/)** (v18.0.0 or higher)
36
- 2. **[Google Gemini CLI](https://github.com/google-gemini/gemini-cli)** installed and configured
64
+ 2. **Antigravity CLI (`agy`)** installed and configured
65
+
66
+ Verify `agy` before adding the MCP server:
67
+
68
+ ```bash
69
+ agy --version
70
+ agy install
71
+ agy models
72
+ ```
73
+
74
+ The `ask-gemini` and `brainstorm` default requires `Gemini 4 Argon (High)` to appear in `agy models` (verified with agy 1.3.4). Google currently lists Argon access in Antigravity for **Google AI Ultra and Enterprise** accounts; see [model availability](https://antigravity.google/docs/models/). If Argon is missing, update Antigravity CLI and check your account's access. You can explicitly select an available Flash tier, such as `model: "Gemini 3.8 Flash (High)"`. The MCP server does not automatically fall back. `live-pass` and `screen-review` continue to require `Gemini 3.8 Flash (Medium)` for their default requests.
37
75
 
38
76
 
39
77
  ### One-Line Setup
40
78
 
41
79
  ```bash
42
- claude mcp add gemini-cli -- npx -y @joeytheman/gemini-mcp-tool
80
+ claude mcp add gemini-feedback -- npx -y @joeytheman/gemini-mcp-tool
43
81
  ```
44
82
 
45
83
  ### Verify Installation
46
84
 
47
- Type `/mcp` inside Claude Code to verify the gemini-cli MCP is active.
85
+ Type `/mcp` inside Claude Code to verify the gemini-feedback MCP is active.
48
86
 
49
87
  ---
50
88
 
@@ -54,7 +92,7 @@ If you already have it configured in Claude Desktop:
54
92
 
55
93
  1. Add to your Claude Desktop config:
56
94
  ```json
57
- "gemini-cli": {
95
+ "gemini-feedback": {
58
96
  "command": "npx",
59
97
  "args": ["-y", "@joeytheman/gemini-mcp-tool"]
60
98
  }
@@ -76,7 +114,7 @@ Add this configuration to your Claude Desktop config file:
76
114
  ```json
77
115
  {
78
116
  "mcpServers": {
79
- "gemini-cli": {
117
+ "gemini-feedback": {
80
118
  "command": "npx",
81
119
  "args": ["-y", "@joeytheman/gemini-mcp-tool"]
82
120
  }
@@ -91,7 +129,7 @@ If you installed globally, use this configuration instead:
91
129
  ```json
92
130
  {
93
131
  "mcpServers": {
94
- "gemini-cli": {
132
+ "gemini-feedback": {
95
133
  "command": "gemini-mcp"
96
134
  }
97
135
  }
@@ -100,16 +138,16 @@ If you installed globally, use this configuration instead:
100
138
 
101
139
  ### Optional: Enable Response Caching
102
140
 
103
- To enable the LRU response cache for near-instant repeated queries, add the `GEMINI_CACHE_ENABLED` environment variable:
141
+ To enable the LRU response cache for near-instant repeated queries, add the `AGY_CACHE_ENABLED` environment variable:
104
142
 
105
143
  ```json
106
144
  {
107
145
  "mcpServers": {
108
- "gemini-cli": {
146
+ "gemini-feedback": {
109
147
  "command": "npx",
110
148
  "args": ["-y", "@joeytheman/gemini-mcp-tool"],
111
149
  "env": {
112
- "GEMINI_CACHE_ENABLED": "true"
150
+ "AGY_CACHE_ENABLED": "true"
113
151
  }
114
152
  }
115
153
  }
@@ -127,10 +165,27 @@ Caching is disabled by default. When enabled, responses are cached with a 30-min
127
165
 
128
166
  After updating the configuration, restart your terminal session.
129
167
 
168
+ ## Live UI passes (setup)
169
+
170
+ `live-pass` needs Gemini to have its own MCP servers registered with Antigravity CLI. Register them once:
171
+
172
+ ```bash
173
+ agy mcp add playwright -- npx -y @playwright/mcp@latest --browser chromium --headless --isolated \
174
+ --allow-unrestricted-file-access # artifact dirs live inside each worktree, so no fixed --output-dir
175
+ agy mcp add maestro /path/to/maestro mcp
176
+ agy mcp list # playwright + maestro
177
+ ```
178
+
179
+ `--allow-unrestricted-file-access` is what lets Playwright write PNGs into a worktree-local artifact directory. The tool compensates: `artifactDir` must be inside `workingDirectory`, every frame is checked on disk (fresh, non-empty, inside the artifact dir), and the working tree is diffed before and after the run.
180
+
181
+ Add `.live-pass/` to the repository's `.gitignore` so frames never land in a commit; deleting the worktree then removes them. Add `.playwright-mcp/` too — the Playwright MCP server creates that directory in whatever it runs from, which the working-tree guard will otherwise report as a WARNING on every pass.
182
+
183
+ A full pass can run for many minutes inside one MCP call. The server sends keepalive progress notifications every 25 seconds when the client passes a `progressToken`; raise your client's `MCP_TIMEOUT` if a pass outlives it, and consider calling `live-pass` from a small relay sub-agent so the orchestrating session stays free.
184
+
130
185
  ## Example Workflow
131
186
 
132
187
  - **Natural language**: "use gemini to explain index.html", "understand the massive project using gemini", "ask gemini to search for latest news"
133
- - **Claude Code**: Type `/gemini-cli` and commands will populate in Claude Code's interface.
188
+ - **Claude Code**: Use `/ask-gemini` directly, or ask naturally for Gemini feedback.
134
189
 
135
190
  ## Usage Examples
136
191
 
@@ -146,9 +201,9 @@ After updating the configuration, restart your terminal session.
146
201
  - `use gemini to explain div centering`
147
202
  - `ask gemini about best practices for React development related to @file_im_confused_about`
148
203
 
149
- ### Using Gemini CLI's Sandbox Mode (-s)
204
+ ### Using Antigravity Sandbox Mode
150
205
 
151
- The sandbox mode allows you to safely test code changes, run scripts, or execute potentially risky operations in an isolated environment.
206
+ The sandbox mode maps to `agy --sandbox`, which runs with terminal restrictions enabled.
152
207
 
153
208
  - `use gemini sandbox to create and run a Python script that processes data`
154
209
  - `ask gemini to safely test @script.py and explain what it does`
@@ -159,29 +214,54 @@ The sandbox mode allows you to safely test code changes, run scripts, or execute
159
214
 
160
215
  These tools are designed to be used by the AI assistant.
161
216
 
162
- - **`ask-gemini`**: Execute Gemini CLI with full feature support including advanced flags, caching, and change mode.
163
- - **`prompt`** (required): The analysis request. Use the `@` syntax to include file or directory references (e.g., `@src/main.js explain this code`) or ask general questions (e.g., `Please use a web search to find the latest news stories`).
164
- - **`model`** (optional): The Gemini model to use. Defaults to `gemini-3-pro-preview`. Use `gemini-3-flash-preview` for faster responses.
165
- - **`sandbox`** (optional): Set to `true` to run in sandbox mode for safe code execution.
217
+ - **`ask-gemini`**: Ask Gemini through Antigravity CLI (`agy`) for plan review, implementation critique, code review, architecture feedback, debugging, and tradeoff analysis.
218
+ - **`prompt`** (required): The analysis request. Use the `@` syntax to include file or directory references (e.g., `@src/main.js review this implementation`) or ask general questions.
219
+ - **`model`** (optional): The Antigravity model to use. Defaults to `Gemini 4 Argon (High)`. Other verified options include `Gemini 4 Argon (Low)`, `Gemini 4 Argon (Medium)`, and `Gemini 3.8 Flash (Low/Medium/High)` (use the exact tier name, such as `Gemini 3.8 Flash (High)`). Availability depends on your CLI version and account; check `agy models`. Some accounts also expose `Gemini 3.1 Pro (Low)` and `Gemini 3.1 Pro (High)`.
220
+ - **`sandbox`** (optional): Set to `true` to pass `--sandbox`.
166
221
  - **`changeMode`** (optional): Enable structured change mode for edit suggestions that Claude can apply directly.
167
- - **`yolo`** (optional): Auto-accept all actions (YOLO mode). Use with caution.
168
- - **`approvalMode`** (optional): Fine-grained approval control: `default`, `auto_edit`, or `yolo`.
169
- - **`outputFormat`** (optional): Control output format: `text`, `json`, or `stream-json`.
170
- - **`includeDirectories`** (optional): Additional directories to include in workspace.
171
- - **`debug`** (optional): Enable verbose logging for troubleshooting.
172
- - **`promptInteractive`** (optional): Execute prompt and continue in interactive mode.
173
- - **`extensions`** (optional): Filter specific file extensions.
174
- - **`resume`** (optional): Resume previous session (use `latest` or session number).
175
- - **`workingDirectory`** (optional): Working directory to run Gemini from. Use drive root (e.g., 'C:/' or 'D:/') on Windows to access files across drives.
222
+ - **`yolo`** (optional): Pass `--dangerously-skip-permissions`. Use with caution.
223
+ - **`includeDirectories`** (optional): Additional directories to include in the Antigravity workspace; maps to repeated `--add-dir`.
224
+ - **`printTimeout`** (optional): Pass `--print-timeout` (for example, `5m` or `90s`).
225
+ - **`resume`** (optional): `true`, `latest`, or `continue` maps to `--continue`; any other string maps to `--conversation <id>`.
226
+ - **`conversationId`** (optional): Resume this exact conversation (`--conversation <id>`); wins over `resume`. In `outputFormat: "json"` the call fails with `CONVERSATION_NOT_RESUMED` when agy silently starts a different conversation — a stale ID only warns on stderr and would otherwise return an unrelated answer. IDs come from the `[GEMINI_CONVERSATION_ID=...]` line of a previous json call; text mode has no ID to report.
227
+ - **`outputFormat`** (optional): `"text"` (default) or `"json"`. `"json"` returns agy's envelope rendered as the conversation line, the answer, and a usage line. `"stream-json"` is unsupported.
228
+ - **`jsonSchema`** (optional): Inline JSON Schema passed to `--json-schema`, constraining the answer to `structured_output`. Requires `outputFormat: "json"`.
229
+ - **`effort`** (optional): `low`, `medium`, or `high`, passed to `--effort`. Tiered Gemini names already encode effort in the name, and agy rejects `--effort` for them — the rejection is surfaced verbatim.
230
+ - **`workingDirectory`** (optional): Working directory to run `agy` from. Use drive root (e.g., 'C:/' or 'D:/') on Windows to access files across drives.
231
+ - **Unsupported legacy options**: `extensions`, `debug`, `promptInteractive`, `outputFormat: "stream-json"`, and `approvalMode` except `approvalMode: "yolo"`.
232
+
233
+ - **`live-pass`**: Delegate a live UI verification to Gemini. It drives its own Playwright or Maestro MCP server, captures the requested frames, looks at them, and returns text.
234
+ - **`targets`** (required): One `{screen, state, viewport, expected}` per frame the pass must produce. `expected` is what that state must show — for an intentional error/empty/offline state, name the reason text and the recovery affordance. The effective verdict is derived from this list: **any target that produced no frame fails the pass**, whether Gemini skipped it with a reason or never reported it at all. A skip explains missing evidence; it does not excuse it. Each target's screenshot filename is derived in code from its `screen`/`state`/`viewport`, so two targets can never be answered by one image — a reused file is reported as `DUPLICATE` and fails the pass.
235
+ - **`brief`** (required): Base URL or app id, the served-branch marker, the seed case, navigation hints.
236
+ - **`workingDirectory`** (required): Absolute path to the worktree under test. Used as agy's cwd and workspace root.
237
+ - **`driver`** (required): `playwright` or `maestro`.
238
+ - **`artifactDir`** (optional): Absolute path, strictly inside `workingDirectory`. Defaults to `<workingDirectory>/.live-pass/<timestamp>`, so deleting the worktree cleans up the frames. Add `.live-pass/` to the repo's `.gitignore`.
239
+ - **`publishCommand`** (optional): Shell command run **in code** after validation, with `{files}` replaced by the shell-quoted paths of the frames that validated OK; its stdout is returned as PR markdown. Never run on a BLOCKED pass.
240
+ - **`conversationId`** (optional): Resume the previous pass so Gemini reports deltas (`resolved`, `regressions`, `changes`) instead of a bare snapshot. The browser or simulator still starts fresh — resume only changes what Gemini remembers. Start fresh when the brief changed materially, after a BLOCKED pass, or after about three rounds (each resumed round roughly doubles input tokens).
241
+ - **`yolo`** (optional, default **true**): Without `--dangerously-skip-permissions`, headless agy denies the MCP tool calls and the pass is BLOCKED. The tool snapshots the working tree before and after — status lines *and* content hashes of every dirty file, since a file Gemini rewrites in a PR worktree was already modified before the run — and reports any change as a WARNING, including when the agy call itself fails.
242
+ - **`model`** (optional, default `Gemini 3.8 Flash (Medium)`), **`printTimeout`** (optional, default `15m`).
243
+
244
+ - **`screen-review`**: Have Gemini judge captured screens, or inventory a route before it is built.
245
+ - **`mode`** (required): `review` judges PNGs after a live pass; `plan` inventories a route file and returns no verdict.
246
+ - **`instructions`** (required): The caller's reviewer prompt, passed through verbatim so rule citations stay exact.
247
+ - **`workingDirectory`** (required): The checkout the instructions cite; used as agy's cwd so repository-relative rule paths resolve.
248
+ - **`images`** (review mode, required): Absolute PNG/JPEG paths that must exist. **`routeFile`** (plan mode, required): absolute path inside `workingDirectory`. Neither may contain whitespace — agy resolves an `@reference` up to the first space, so a spaced path would hang until `printTimeout`; the tool rejects it up front instead.
249
+ - **`context`** (optional): Composition contract, issue text, anything else the reviewer prompt cites.
250
+ - **`changedRoutes`** (optional, review mode): Repo-relative files the diff touched (from `git diff --name-only`). Gemini maps each image to the route file it shows, and a changed screen (under an `app/` directory) that no image shows makes the review REQUEST_CHANGES — partial screenshot coverage is as unreviewed as none. A changed file under `components/` only warns. The report prints a route → image coverage table.
251
+ - **`conversationId`** (optional): Round 2 keeps round 1's visual analysis.
252
+ - **`model`** (optional, default `Gemini 3.8 Flash (Medium)`), **`printTimeout`** (optional, default `10m`).
253
+ - **`yolo`** (optional, default **false**): a review only reads. Set it to `true` when the instructions ask Gemini to read repository files that are not among the images — it reaches for a shell to do that, headless agy denies the shell, and the call fails naming the denied action.
176
254
 
177
255
  - **`brainstorm`**: Generate creative ideas with structured methodologies and domain context.
178
256
  - **`prompt`** (required): Brainstorming challenge or question to explore.
179
- - **`model`** (optional): The Gemini model to use.
257
+ - **`model`** (optional): The Antigravity model to use. Defaults to `Gemini 4 Argon (High)`. Pass an exact model listed by `agy models` to override it.
180
258
  - **`methodology`** (optional): Framework to use: `divergent`, `convergent`, `scamper`, `design-thinking`, `lateral`, or `auto` (default).
181
259
  - **`domain`** (optional): Domain context (e.g., 'software', 'business', 'creative', 'research').
182
260
  - **`constraints`** (optional): Known limitations or requirements.
261
+ - **`existingContext`** (optional): Background information, previous attempts, or current state to build upon.
183
262
  - **`ideaCount`** (optional): Number of ideas to generate (default: 12).
184
263
  - **`includeAnalysis`** (optional): Include feasibility and impact analysis (default: true).
264
+ - **`workingDirectory`** (optional): Working directory to run `agy` from.
185
265
 
186
266
  - **`fetch-chunk`**: Retrieve cached chunks from large changeMode responses.
187
267
  - **`cacheKey`** (required): Cache key from initial changeMode response.
@@ -190,26 +270,35 @@ These tools are designed to be used by the AI assistant.
190
270
  - **`ping`**: Echo test message to verify server connection.
191
271
  - **`prompt`** (optional): Message to echo back.
192
272
 
193
- - **`Help`**: Display Gemini CLI help information.
273
+ - **`Help`**: Display Antigravity CLI (`agy`) help information.
194
274
 
195
275
  ### Slash Commands (for the User)
196
276
 
197
277
  You can use these commands directly in Claude Code's interface (compatibility with other clients has not been tested).
198
278
 
199
- - **/ask-gemini**: Execute Gemini CLI with advanced features and caching.
279
+ - **/ask-gemini**: Ask Gemini through Antigravity CLI with caching and change mode.
200
280
  - **Example**: `/ask-gemini prompt:@src/ summarize this directory`
201
281
  - **With sandbox**: `/ask-gemini prompt:@script.py test this safely sandbox:true`
202
282
  - **With change mode**: `/ask-gemini prompt:Refactor this code changeMode:true`
203
- - **Supports all flags**: yolo, approvalMode, outputFormat, debug, etc.
283
+ - **Supported backend flags**: model, sandbox, yolo, includeDirectories, printTimeout, resume, workingDirectory.
204
284
 
205
285
  - **/brainstorm**: Generate structured ideas with creative methodologies.
206
286
  - **Example**: `/brainstorm prompt:How can we improve user onboarding? methodology:design-thinking domain:software`
207
287
  - **Quick use**: `/brainstorm prompt:Ideas for a mobile app feature`
288
+ - **Supported flags**: model, methodology, domain, constraints, existingContext, ideaCount, includeAnalysis, workingDirectory.
289
+
290
+ - **/live-pass**: Walk a running app with Gemini and get a text verdict with per-frame observations.
291
+ - **Example**: `/live-pass driver:playwright workingDirectory:/path/to/worktree brief:"Base URL http://localhost:8081; marker: footer BRANCH: my-branch" targets:[{"screen":"home","state":"default","viewport":"390x844","expected":"order list with one seeded order"}]`
292
+ - **Supported flags**: targets, brief, workingDirectory, driver, artifactDir, model, printTimeout, yolo, publishCommand, conversationId.
293
+
294
+ - **/screen-review**: Judge captured frames, or inventory a route file before building it.
295
+ - **Example**: `/screen-review mode:review workingDirectory:/path/to/worktree images:["/path/to/.live-pass/run/home-default-390x844.png"] instructions:"<reviewer prompt>"`
296
+ - **Plan mode**: `/screen-review mode:plan workingDirectory:/path/to/worktree routeFile:/path/to/app/orders.tsx instructions:"<action inventory rules>"`
208
297
 
209
298
  - **/fetch-chunk**: Retrieve next chunk of a large changeMode response.
210
299
  - **Example**: `/fetch-chunk cacheKey:abc123 chunkIndex:2`
211
300
 
212
- - **/Help**: Display Gemini CLI help information.
301
+ - **/Help**: Display Antigravity CLI help information.
213
302
  - **Example**: `/Help`
214
303
 
215
304
  - **/ping**: Test the MCP server connection.
@@ -219,7 +308,7 @@ You can use these commands directly in Claude Code's interface (compatibility wi
219
308
 
220
309
  This MCP server includes several performance optimizations:
221
310
 
222
- - **LRU Response Cache** (opt-in): Near-instant responses for repeated queries with 30-minute TTL and 10MB max size. Enable via `GEMINI_CACHE_ENABLED=true` env var.
311
+ - **LRU Response Cache** (opt-in): Near-instant responses for repeated queries with 30-minute TTL and 10MB max size. Enable via `AGY_CACHE_ENABLED=true` env var.
223
312
  - **Efficient Command Execution**: O(n) array buffer performance for large outputs
224
313
  - **Smart Chunking**: Large changeMode responses are automatically chunked for better handling
225
314
  - **Progress Notifications**: Real-time progress updates during long-running operations
@@ -1,47 +1,58 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { z } from 'zod';
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ const mockExecuteAgyCLI = vi.fn();
3
+ const mockExecuteAgyJson = vi.fn();
4
+ vi.mock('../utils/agyExecutor.js', async (importOriginal) => {
5
+ const actual = await importOriginal();
6
+ return {
7
+ ...actual,
8
+ executeAgyCLI: (...args) => mockExecuteAgyCLI(...args),
9
+ executeAgyJson: (...args) => mockExecuteAgyJson(...args),
10
+ };
11
+ });
12
+ import { askGeminiArgsSchema, askGeminiTool } from '../tools/ask-gemini.tool.js';
3
13
  describe('ask-gemini Tool', () => {
4
14
  describe('Argument Schema Validation', () => {
5
- const askGeminiArgsSchema = z.object({
6
- prompt: z.string().min(1),
7
- model: z.string().optional(),
8
- sandbox: z.boolean().default(false),
9
- changeMode: z.boolean().default(false),
10
- chunkIndex: z.union([z.number(), z.string()]).optional(),
11
- chunkCacheKey: z.string().optional(),
12
- yolo: z.boolean().default(false),
13
- approvalMode: z.enum(['default', 'auto_edit', 'yolo']).optional(),
14
- outputFormat: z.enum(['text', 'json', 'stream-json']).optional(),
15
- includeDirectories: z.union([z.string(), z.array(z.string())]).optional(),
16
- debug: z.boolean().default(false),
17
- promptInteractive: z.string().optional(),
18
- extensions: z.union([z.string(), z.array(z.string())]).optional(),
19
- resume: z.string().optional(),
20
- });
21
15
  it('should accept valid minimal arguments', () => {
22
16
  const result = askGeminiArgsSchema.parse({ prompt: 'test prompt' });
23
17
  expect(result.prompt).toBe('test prompt');
24
18
  expect(result.sandbox).toBe(false);
25
19
  expect(result.changeMode).toBe(false);
26
20
  });
27
- it('should accept all optional flags', () => {
21
+ it('should accept supported agy optional flags', () => {
28
22
  const result = askGeminiArgsSchema.parse({
29
23
  prompt: 'test prompt',
30
- model: 'gemini-3-flash-preview',
24
+ model: 'Gemini 3.8 Flash (Medium)',
31
25
  sandbox: true,
32
26
  changeMode: true,
33
27
  yolo: true,
34
- approvalMode: 'auto_edit',
35
- outputFormat: 'json',
36
- debug: true,
28
+ includeDirectories: ['src', 'tests'],
29
+ printTimeout: '10m',
30
+ resume: true,
31
+ workingDirectory: '/tmp/project',
37
32
  });
38
- expect(result.model).toBe('gemini-3-flash-preview');
33
+ expect(result.model).toBe('Gemini 3.8 Flash (Medium)');
39
34
  expect(result.sandbox).toBe(true);
40
35
  expect(result.changeMode).toBe(true);
41
36
  expect(result.yolo).toBe(true);
37
+ expect(result.includeDirectories).toEqual(['src', 'tests']);
38
+ expect(result.printTimeout).toBe('10m');
39
+ expect(result.resume).toBe(true);
40
+ expect(result.workingDirectory).toBe('/tmp/project');
41
+ });
42
+ it('should accept legacy fields so implementation can return explicit unsupported errors', () => {
43
+ const result = askGeminiArgsSchema.parse({
44
+ prompt: 'test prompt',
45
+ approvalMode: 'auto_edit',
46
+ outputFormat: 'json',
47
+ debug: true,
48
+ extensions: ['ts', 'js'],
49
+ promptInteractive: 'continue after this',
50
+ });
42
51
  expect(result.approvalMode).toBe('auto_edit');
43
52
  expect(result.outputFormat).toBe('json');
44
53
  expect(result.debug).toBe(true);
54
+ expect(result.extensions).toEqual(['ts', 'js']);
55
+ expect(result.promptInteractive).toBe('continue after this');
45
56
  });
46
57
  it('should reject missing prompt', () => {
47
58
  expect(() => askGeminiArgsSchema.parse({})).toThrow();
@@ -89,6 +100,22 @@ describe('ask-gemini Tool', () => {
89
100
  });
90
101
  expect(result.extensions).toEqual(['ts', 'js']);
91
102
  });
103
+ it('should accept the json envelope arguments', () => {
104
+ const result = askGeminiArgsSchema.parse({
105
+ prompt: 'test',
106
+ outputFormat: 'json',
107
+ jsonSchema: '{"type":"object"}',
108
+ effort: 'medium',
109
+ conversationId: 'conv-abc',
110
+ });
111
+ expect(result.outputFormat).toBe('json');
112
+ expect(result.jsonSchema).toBe('{"type":"object"}');
113
+ expect(result.effort).toBe('medium');
114
+ expect(result.conversationId).toBe('conv-abc');
115
+ });
116
+ it('should reject an effort level agy does not accept', () => {
117
+ expect(() => askGeminiArgsSchema.parse({ prompt: 'test', effort: 'extreme' })).toThrow();
118
+ });
92
119
  it('should accept resume parameter', () => {
93
120
  const result = askGeminiArgsSchema.parse({
94
121
  prompt: 'test',
@@ -96,6 +123,13 @@ describe('ask-gemini Tool', () => {
96
123
  });
97
124
  expect(result.resume).toBe('latest');
98
125
  });
126
+ it('should accept boolean resume parameter', () => {
127
+ const result = askGeminiArgsSchema.parse({
128
+ prompt: 'test',
129
+ resume: true,
130
+ });
131
+ expect(result.resume).toBe(true);
132
+ });
99
133
  it('should accept chunkIndex as number', () => {
100
134
  const result = askGeminiArgsSchema.parse({
101
135
  prompt: 'test',
@@ -112,12 +146,6 @@ describe('ask-gemini Tool', () => {
112
146
  });
113
147
  });
114
148
  describe('Flag Combinations', () => {
115
- const askGeminiArgsSchema = z.object({
116
- prompt: z.string().min(1),
117
- sandbox: z.boolean().default(false),
118
- yolo: z.boolean().default(false),
119
- approvalMode: z.enum(['default', 'auto_edit', 'yolo']).optional(),
120
- });
121
149
  it('should allow sandbox with yolo', () => {
122
150
  const result = askGeminiArgsSchema.parse({
123
151
  prompt: 'test',
@@ -127,7 +155,7 @@ describe('ask-gemini Tool', () => {
127
155
  expect(result.sandbox).toBe(true);
128
156
  expect(result.yolo).toBe(true);
129
157
  });
130
- it('should allow approvalMode to override yolo', () => {
158
+ it('should allow legacy approvalMode through schema for executor validation', () => {
131
159
  const result = askGeminiArgsSchema.parse({
132
160
  prompt: 'test',
133
161
  yolo: true,
@@ -135,20 +163,54 @@ describe('ask-gemini Tool', () => {
135
163
  });
136
164
  expect(result.yolo).toBe(true);
137
165
  expect(result.approvalMode).toBe('auto_edit');
138
- // Note: In actual implementation, approvalMode should take precedence
139
166
  });
140
167
  });
141
- describe('Error Messages', () => {
142
- const askGeminiArgsSchema = z.object({
143
- prompt: z.string().min(1),
168
+ describe('json output', () => {
169
+ beforeEach(() => {
170
+ vi.clearAllMocks();
171
+ mockExecuteAgyJson.mockResolvedValue({
172
+ conversation_id: 'conv-abc',
173
+ status: 'SUCCESS',
174
+ response: 'plain answer',
175
+ structured_output: { ok: true },
176
+ num_turns: 1,
177
+ duration_seconds: 3,
178
+ usage: { input_tokens: 10, output_tokens: 2, total_tokens: 12 },
179
+ });
180
+ });
181
+ it('starts with the conversation line and renders structured output under a schema', async () => {
182
+ const result = await askGeminiTool.execute({
183
+ prompt: 'Return ok true',
184
+ outputFormat: 'json',
185
+ jsonSchema: '{"type":"object"}',
186
+ conversationId: 'conv-abc',
187
+ });
188
+ expect(result.startsWith('[GEMINI_CONVERSATION_ID=conv-abc]')).toBe(true);
189
+ expect(result).toContain('"ok": true');
190
+ expect(result).toContain('Usage:');
191
+ expect(mockExecuteAgyJson).toHaveBeenCalledWith('Return ok true', expect.objectContaining({ conversationId: 'conv-abc', jsonSchema: '{"type":"object"}' }), undefined);
192
+ expect(mockExecuteAgyCLI).not.toHaveBeenCalled();
193
+ });
194
+ it('renders the plain response when no schema was passed', async () => {
195
+ const result = await askGeminiTool.execute({ prompt: 'hi', outputFormat: 'json' });
196
+ expect(result).toContain('plain answer');
197
+ expect(result).not.toContain('"ok"');
198
+ });
199
+ it('uses the text path for the default output format', async () => {
200
+ mockExecuteAgyCLI.mockResolvedValue('text answer');
201
+ const result = await askGeminiTool.execute({ prompt: 'hi' });
202
+ expect(result).toContain('text answer');
203
+ expect(mockExecuteAgyJson).not.toHaveBeenCalled();
144
204
  });
205
+ });
206
+ describe('Error Messages', () => {
145
207
  it('should provide clear error for missing prompt', () => {
146
208
  try {
147
209
  askGeminiArgsSchema.parse({});
148
210
  }
149
211
  catch (error) {
150
212
  expect(error.issues[0].path).toContain('prompt');
151
- expect(error.issues[0].message).toMatch(/required/i);
213
+ expect(error.issues[0].message).toMatch(/required|expected string/i);
152
214
  }
153
215
  });
154
216
  it('should provide clear error for empty prompt', () => {
@@ -157,7 +219,7 @@ describe('ask-gemini Tool', () => {
157
219
  }
158
220
  catch (error) {
159
221
  expect(error.issues[0].path).toContain('prompt');
160
- expect(error.issues[0].message).toMatch(/at least 1/i);
222
+ expect(error.issues[0].message).toMatch(/at least 1|>=1/i);
161
223
  }
162
224
  });
163
225
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ask-gemini.test.js","sourceRoot":"","sources":["../../src/__tests__/ask-gemini.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ask-gemini.test.js","sourceRoot":"","sources":["../../src/__tests__/ask-gemini.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=live-pass.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-pass.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/live-pass.test.ts"],"names":[],"mappings":""}