@estebanforge/pi-ask-antigravity 1.2.5 → 1.2.6
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.
- package/CHANGELOG.md +220 -0
- package/package.json +6 -18
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## [1.2.5] - 2026-09-18
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **`thinking` / `effort` params on AskAntigravity (synonyms).** Port of the pi-antigravity-bridge fix: delegation calls had no direct tier knob (only tier sugar inside `model`, "flash high"), so a caller told "peer review on high thinking" fell through to the configured default with no signal anything was dropped. `thinking` takes pi vocabulary (minimal|low|medium|high|xhigh|max, clamped to agy's low|medium|high; unknown values fall back to low) and `effort` is the same knob under agy's own name. Explicit level beats a tier embedded in `model` and the config default; different values on both errors; fixed-thinking families ignore it because agy rejects `--effort` for them.
|
|
10
|
+
|
|
11
|
+
## [1.2.4] - 2026-08-13
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **Model, thinking tier, and mode shown next to the tool name.** While a
|
|
16
|
+
delegation runs, the TUI now renders
|
|
17
|
+
`AskAntigravity [model=gemini-3.6-flash, thinking=high]` with a prompt
|
|
18
|
+
preview, plus a tidy result row (`✓ AskAntigravity 12.3s`) with an
|
|
19
|
+
expandable body. Built on pi's `renderCall`/`renderResult` hooks; the
|
|
20
|
+
values shown are the resolved config defaults (model alias + tier), not
|
|
21
|
+
just the args the caller passed. `AgyDetails` gained a `thinking` field.
|
|
22
|
+
- **Opt-in full-context delegation (`includeContext`).** New boolean param
|
|
23
|
+
(default `false`, isolated one-shot unchanged). When `true`, the current pi
|
|
24
|
+
conversation is exported as resolved markdown to
|
|
25
|
+
`~/.pi/extensions-data/estebanforge/pi-ask-antigravity/` and the prompt
|
|
26
|
+
tells agy to read it first. The run passes `--add-dir` for that folder so
|
|
27
|
+
the sandbox can read it; the temp file is removed after the run.
|
|
28
|
+
|
|
29
|
+
## [1.2.3] - 2026-08-10
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- **Model parsing now handles agy's real two-column output.** `agy models`
|
|
34
|
+
prints `<slug> <display label>` per line, and `--model` accepts only the
|
|
35
|
+
slug. `parseModelLine` swallowed the whole line and the static
|
|
36
|
+
`sonnet`/`opus`/`gpt-oss` overlay used display labels, so `--model` was
|
|
37
|
+
rejected. It now splits column 1; the overlay uses real slugs
|
|
38
|
+
(`claude-sonnet-4-6`, `claude-opus-4-6-thinking`, `gpt-oss-120b-medium`);
|
|
39
|
+
and `resolveModel` returns a `{model, effort?}` shape that sends
|
|
40
|
+
Gemini-family bases' tier to `--effort` while fixed-thinking families keep
|
|
41
|
+
the exact slug with no `--effort` (agy rejects it for them).
|
|
42
|
+
`parseModelLine`/`mergeCatalog`/`resolveModel` are now exported, with
|
|
43
|
+
two-column parser tests on the verified live `agy models` fixture.
|
|
44
|
+
|
|
45
|
+
## [1.2.1] - 2026-08-06
|
|
46
|
+
|
|
47
|
+
### Changed
|
|
48
|
+
- **Dependencies updated.** Raised the `pi-coding-agent`, `pi-ai`, `pi-tui` dev pins to `^0.84.0`. Audited against the pi v0.84.0 breaking changes (renamed `ModelsRequestTransforms`, null-tolerant `getApiKeyAndHeaders` headers, dropped `message_update` partial fields, v4 session APIs); no code changes were needed and `tsc`/`typecheck` passes against 0.84.0.
|
|
49
|
+
|
|
50
|
+
## [1.2.0] - 2026-07-26
|
|
51
|
+
|
|
52
|
+
### Added
|
|
53
|
+
|
|
54
|
+
- **`permissions` config + `/agy` row + `AGY_SKIP_PERMISSIONS` env.** Controls
|
|
55
|
+
the new flag. Default `auto-approved` (required for non-interactive use); set
|
|
56
|
+
to `prompt` (`/agy` picker, or `AGY_SKIP_PERMISSIONS=0`) to disable - but
|
|
57
|
+
then any `run_command` hangs until you kill the call. Matches the bridge's
|
|
58
|
+
permissions knob.
|
|
59
|
+
|
|
60
|
+
### Changed
|
|
61
|
+
|
|
62
|
+
- **Defers to `pi-antigravity-bridge` when it is installed.** The bridge now
|
|
63
|
+
ships both the streaming antigravity provider AND the `AskAntigravity` tool
|
|
64
|
+
(same shape as `pi-claude-bridge`). To avoid a duplicate-tool clash, this
|
|
65
|
+
extension detects the bridge at load and, if present, registers nothing -
|
|
66
|
+
silently. Detection does not use module resolution (pi isolates each
|
|
67
|
+
package's module root); it checks an in-process `Symbol.for` flag the bridge
|
|
68
|
+
sets AND the bridge's package.json at pi's install paths
|
|
69
|
+
(`@estebanforge/pi-antigravity-bridge/package.json`). Order-independent for
|
|
70
|
+
npm/git installs; for local/source installs relies on the in-process flag
|
|
71
|
+
(install the bridge first so it loads first). Without the bridge, behavior is
|
|
72
|
+
unchanged.
|
|
73
|
+
|
|
74
|
+
### Fixed
|
|
75
|
+
|
|
76
|
+
- **`run_command` no longer hangs the tool.** `--mode accept-edits` auto-approves
|
|
77
|
+
file edits but NOT shell commands, so any task that triggered a `run_command`
|
|
78
|
+
hung forever on an unanswerable `y/n` prompt in non-interactive `-p` mode
|
|
79
|
+
(same root cause the pi-antigravity-bridge provider hit). The tool now passes
|
|
80
|
+
`--dangerously-skip-permissions` by default. Backported from the bridge.
|
|
81
|
+
|
|
82
|
+
## [1.1.0] - 2026-07-25
|
|
83
|
+
|
|
84
|
+
### Fixed
|
|
85
|
+
|
|
86
|
+
- **`CONV_ID_RE` rejected real agy conversation ids, silently breaking the
|
|
87
|
+
"continued conversation" feature.** The regex was
|
|
88
|
+
`/^[A-Za-z0-9]{1,128}$/` (no hyphens in the character class), but agy
|
|
89
|
+
conversation ids are hyphenated UUIDs (e.g.
|
|
90
|
+
`9e6fdc2f-f9f9-4096-95fc-7852528b50cc`, the very example in the source
|
|
91
|
+
comment). Every legitimate id failed validation, so `isContinuation`
|
|
92
|
+
was always `false`, `--conversation <id>` was never passed, and every
|
|
93
|
+
"continued" call quietly started a brand-new agy conversation instead
|
|
94
|
+
of resuming. Now allows hyphens in the body
|
|
95
|
+
(`/^[A-Za-z0-9][A-Za-z0-9-]{0,127}$/`) while preserving the threat
|
|
96
|
+
model: first char must be alphanumeric, so leading-dash flag-injection
|
|
97
|
+
values are still rejected. Present since 1.0.0; found by peer review.
|
|
98
|
+
|
|
99
|
+
### Added
|
|
100
|
+
|
|
101
|
+
- **`mode` parameter** — replaces the previous `skipPermissions` boolean
|
|
102
|
+
with an explicit two-way enum: `plan` (review-only, `--mode plan`) and
|
|
103
|
+
`accept-edits` (agy applies edits, `--mode accept-edits`, default).
|
|
104
|
+
Use `plan` for cross-review and read-only tasks, `accept-edits` for
|
|
105
|
+
implementation.
|
|
106
|
+
- **`digest` parameter** — when true, the prompt is prefixed with
|
|
107
|
+
`(Use compact digests, not full file contents.)` to keep `agy` from
|
|
108
|
+
returning full file payloads. Default: `true` for `plan`,
|
|
109
|
+
`false` for `accept-edits`. Override per call.
|
|
110
|
+
- **Non-Gemini alias overlay** — `sonnet`, `opus`, and `gpt-oss` now
|
|
111
|
+
resolve to the exact agy strings `Claude Sonnet 4.6 (Thinking)`,
|
|
112
|
+
`Claude Opus 4.6 (Thinking)`, and `GPT-OSS 120B (Medium)`. A
|
|
113
|
+
static short-alias map is checked before the family parser, so
|
|
114
|
+
these names resolve even when `agy models` does not surface them
|
|
115
|
+
in the live catalog (older agy builds, plan-gated models). The
|
|
116
|
+
overlay entries are also merged with the live catalog at
|
|
117
|
+
extension load; live entries always win on case-insensitive
|
|
118
|
+
full-string equality, so an updated `agy models` listing takes
|
|
119
|
+
precedence over the hardcoded fallback. Borrowed from
|
|
120
|
+
`@bacnh85/pi-agy`'s static model map.
|
|
121
|
+
- **Effective `mode` and `digest` surfaced in `details`** — every
|
|
122
|
+
tool result now reports the resolved mode and whether the digest
|
|
123
|
+
prefix was applied, so the orchestrating model (and humans reading
|
|
124
|
+
logs) can see what flags were actually passed to `agy`.
|
|
125
|
+
- **Case-insensitive live-catalog lookup for overlay aliases.** When
|
|
126
|
+
`sonnet` / `opus` / `gpt-oss` resolve via the overlay, the lookup
|
|
127
|
+
against the live catalog is now case-insensitive so the
|
|
128
|
+
"live entries win" guarantee holds even if `agy models` lists the
|
|
129
|
+
same model under different casing than the hardcoded overlay.
|
|
130
|
+
Matches `mergeCatalog`'s dedup logic.
|
|
131
|
+
|
|
132
|
+
### Changed
|
|
133
|
+
|
|
134
|
+
- **Breaking: `skipPermissions` parameter is removed.** Use `mode`
|
|
135
|
+
instead. The previous `skipPermissions: true` (which passed
|
|
136
|
+
`--dangerously-skip-permissions`) was a coarse proxy for the new
|
|
137
|
+
`mode: "accept-edits"` and is no longer the right primitive. Use
|
|
138
|
+
`mode: "plan"` for review-only flows. No callers in the wild
|
|
139
|
+
depend on the old boolean (the package shipped 2026-07-07), so
|
|
140
|
+
the break is contained to a single minor bump.
|
|
141
|
+
- **No `sandbox` enum value.** A peer review caught that agy's
|
|
142
|
+
`--sandbox` flag is an orthogonal shell-containment setting,
|
|
143
|
+
not an "edit preview" mode. Users who need shell containment
|
|
144
|
+
should set `AGY_EXTRA_ARGS=--sandbox` in their environment.
|
|
145
|
+
- **Tool description** now documents the `mode` and `digest`
|
|
146
|
+
affordances so the orchestrating model knows about them.
|
|
147
|
+
|
|
148
|
+
## [1.0.1] - 2026-07-23
|
|
149
|
+
|
|
150
|
+
### Fixed
|
|
151
|
+
|
|
152
|
+
- **`gemini-flash-latest` and `gemini-pro-latest` aliases now win over
|
|
153
|
+
versioned entries when no version is pinned.** Previously, asking for
|
|
154
|
+
`flash` resolved to the highest version of the flash family (e.g.
|
|
155
|
+
`Gemini 3.6 Flash (Medium)`), which is a concrete snapshot — not
|
|
156
|
+
Google's "latest release" pointer. The resolver now prefers entries
|
|
157
|
+
with `version: null` (the aliases that `parseModelLine` produces from
|
|
158
|
+
names like `Gemini Flash Latest`) over versioned entries. Falls back
|
|
159
|
+
to the highest version if no alias is present in the catalog, so
|
|
160
|
+
older agy builds without `*-latest` entries keep working.
|
|
161
|
+
- **Leading-dash values passed as `model` are rejected before reaching
|
|
162
|
+
argv.** A value like `--dangerously-skip-permissions` used to land
|
|
163
|
+
verbatim as the `--model` token; the tool now refuses it with a clear
|
|
164
|
+
error message, matching the `CONV_ID_RE` threat model already applied
|
|
165
|
+
to conversation ids.
|
|
166
|
+
|
|
167
|
+
### Changed
|
|
168
|
+
|
|
169
|
+
- `modelParam` is now a plain `Type.String()` instead of a conditional
|
|
170
|
+
`StringEnum` built from the live catalog. The enum was too restrictive
|
|
171
|
+
when discovery succeeded (the common case): any tiered or pinned
|
|
172
|
+
alias like `"flash high"` or `"3.5 flash"` failed AJV validation
|
|
173
|
+
before `resolveModel` ever saw it. Plain `Type.String()` lets the
|
|
174
|
+
resolver handle every documented form and falls back to agy for
|
|
175
|
+
unknown slugs. The now-unused `StringEnum` import is gone.
|
|
176
|
+
|
|
177
|
+
## [1.0.0] - 2026-07-07
|
|
178
|
+
|
|
179
|
+
Initial release.
|
|
180
|
+
|
|
181
|
+
### Added
|
|
182
|
+
|
|
183
|
+
- **`AskAntigravity` tool** — delegates a self-contained sub-task to Google
|
|
184
|
+
Antigravity's `agy` CLI (the CLI for Gemini) via `agy -p`, streams stdout
|
|
185
|
+
as partial output, and returns the final response. The tool answers to
|
|
186
|
+
three names the CLI is known by — **gemini**, **antigravity**, and **agy**
|
|
187
|
+
— surfaced in its description so the model maps any of them to this single
|
|
188
|
+
tool.
|
|
189
|
+
- **Multi-turn conversations with agy** — optional `conversationId` param.
|
|
190
|
+
Omit for a one-shot (agy starts fresh); pass the id returned in a prior
|
|
191
|
+
call's result (`details.conversationId`) to resume that conversation with
|
|
192
|
+
full context. The agent decides per call which mode to use. On fresh runs
|
|
193
|
+
the extension discovers the new conversation id agy creates (snapshot +
|
|
194
|
+
diff of agy's conversations dir, the one technique borrowed from
|
|
195
|
+
[`antigravity-acp`](https://github.com/shubzkothekar/antigravity-acp)'s
|
|
196
|
+
`scan.ts`); on continued runs it passes `--conversation <id>` which agy
|
|
197
|
+
resumes natively. agy holds all state in its own SQLite DB; the extension
|
|
198
|
+
is otherwise stateless.
|
|
199
|
+
- **Friendly model aliases** — `flash`, `pro`, `gemini`, plus tier/version
|
|
200
|
+
qualifiers (`flash high`, `3.1 pro`). Aliases resolve to the exact
|
|
201
|
+
`agy models` string using numeric version comparison, with nearest-tier
|
|
202
|
+
fallback (Pro has no Medium → falls back to High; ties break toward the
|
|
203
|
+
higher tier so "latest and greatest" wins).
|
|
204
|
+
- **`/agy` slash command** — interactive picker (`SettingsList`) for the
|
|
205
|
+
default model and default thinking tier. If the project config shadows the
|
|
206
|
+
global, the change is written there so it actually takes effect; otherwise
|
|
207
|
+
it writes to global. Outside TUI (RPC/headless), prints a read-only status
|
|
208
|
+
snapshot.
|
|
209
|
+
- **Config file** — `~/.pi/agent/ask-antigravity.json` (global) merged over
|
|
210
|
+
`.pi/ask-antigravity.json` (project). Atomic writes (temp + rename).
|
|
211
|
+
- **Defaults** — model `flash`, thinking `medium` (Gemini 3.5 Flash Medium).
|
|
212
|
+
- **Circular-delegation guard** — refuses to spawn agy when the active Pi
|
|
213
|
+
provider is already `antigravity`/`agy`.
|
|
214
|
+
- **Process lifecycle** — spawned `agy` runs in a detached process group so
|
|
215
|
+
its own exec subprocesses are killed on abort/timeout (not orphaned); a
|
|
216
|
+
watchdog enforces the timeout cap directly (not just via agy's
|
|
217
|
+
`--print-timeout`); stdout/stderr decoded at the stream level for UTF-8
|
|
218
|
+
safety across pipe chunks; throttled status updates avoid O(n²) re-renders.
|
|
219
|
+
- **Environment support** — `AGY_BIN`, `AGY_EXTRA_ARGS`,
|
|
220
|
+
`AGY_CONVERSATIONS_DIR`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@estebanforge/pi-ask-antigravity",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.6",
|
|
4
4
|
"description": "Pi tool that delegates a self-contained sub-task to Google Antigravity's agy CLI (the CLI for Gemini). Friendly model aliases (flash/pro/gemini), configurable default model + thinking, and the AskAntigravity delegation tool.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -20,20 +20,18 @@
|
|
|
20
20
|
},
|
|
21
21
|
"repository": {
|
|
22
22
|
"type": "git",
|
|
23
|
-
"url": "git+https://github.com/EstebanForge/pi-
|
|
23
|
+
"url": "git+https://github.com/EstebanForge/pi-extensions.git",
|
|
24
|
+
"directory": "packages/pi-ask-antigravity"
|
|
24
25
|
},
|
|
25
26
|
"publishConfig": {
|
|
26
27
|
"access": "public"
|
|
27
28
|
},
|
|
28
29
|
"type": "module",
|
|
29
|
-
"scripts": {
|
|
30
|
-
"typecheck": "tsc --noEmit",
|
|
31
|
-
"test": "vitest run",
|
|
32
|
-
"prepublishOnly": "npm run typecheck && npm test"
|
|
33
|
-
},
|
|
34
30
|
"files": [
|
|
35
31
|
"extensions",
|
|
36
|
-
"README.md"
|
|
32
|
+
"README.md",
|
|
33
|
+
"CHANGELOG.md",
|
|
34
|
+
"LICENSE"
|
|
37
35
|
],
|
|
38
36
|
"pi": {
|
|
39
37
|
"extensions": [
|
|
@@ -47,15 +45,5 @@
|
|
|
47
45
|
"@earendil-works/pi-coding-agent": {
|
|
48
46
|
"optional": true
|
|
49
47
|
}
|
|
50
|
-
},
|
|
51
|
-
"devDependencies": {
|
|
52
|
-
"@earendil-works/pi-ai": "^0.85.0",
|
|
53
|
-
"@earendil-works/pi-coding-agent": "^0.85.0",
|
|
54
|
-
"@earendil-works/pi-server": "^0.85.0",
|
|
55
|
-
"@earendil-works/pi-tui": "^0.85.0",
|
|
56
|
-
"@types/node": "^22.0.0",
|
|
57
|
-
"typebox": "^1.1.38",
|
|
58
|
-
"typescript": "^5.8.0",
|
|
59
|
-
"vitest": "^4.1.7"
|
|
60
48
|
}
|
|
61
49
|
}
|