chore(#7021): bump pi-xai-vertex from 0.2.0 to 0.2.1 - #7024
Conversation
v0.2.0 aborts Grok-on-Vertex requests when the endpoint sends keepalive frames during high reasoning effort. The OpenAI SDK decoder inside pi fails with an unexpected token error. v0.2.1 filters those frames before the SDK sees them (fullsend-ai/pi-xai-vertex#5, fixed by #6). Update PI_XAI_VERTEX_VERSION and PI_XAI_VERTEX_SHA256 in the sandbox Containerfile. No Go code changes needed: the extension provider id, model id, env contract, and install layout are unchanged between v0.2.0 and v0.2.1. Closes #7021
|
🤖 Finished Review · ✅ Success · Started 7:58 PM UTC · Completed 8:11 PM UTC Commit: Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $2.51 |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
|
Risk Assessment: moderate (2/5) DetailsTwo-line version bump in images/sandbox/Containerfile by a bot with a clear linked issue; the protected-path flag and high file churn lift the score slightly above 1, but the change is mechanical, well-scoped, and trivially rollable. |
ReviewFindingsMedium
|
|
🤖 Finished Retro · ✅ Success · Started 9:38 PM UTC · Completed 9:48 PM UTC Commit: Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $2.76 |
Retro: PR #7024 — bump pi-xai-vertex from 0.2.0 to 0.2.1Verdict: workflow went well; no novel proposals. All identified improvement areas are already tracked by existing open issues. Timeline
Total agent cost: ~$4.50 for a 2-line mechanical version bump. Zero rework iterations. What went well
Evidence for existing issues (no new proposals needed)
|
The vendored Claude-on-Vertex extension no longer carries an Anthropic SDK and its CI covers 0.85.0, which was the last thing holding the pi bump on the Dependency Dashboard (#2682). PI_VERSION 0.84.4 -> 0.85.0. The Node floor assertion beside it still holds: npm metadata gives engines.node ">=22.19.0" for both releases. The 0.84.4 comment is kept but reworded as a FLOOR (the https-proxy-agent named-export bug that breaks google-vertex under HTTPS_PROXY was fixed in 0.84.4, so the rationale still applies below the pin, #8610). piGoogleVertexModels gains gemini-3.8-flash. This table is the bundled google-vertex catalog copied verbatim and is what the Agent tool accepts as a Gemini id, so a missed entry makes us reject a model the running pi serves. 0.85.0's data file adds exactly that one id and changes nothing else. Worth recording how this is checked: diff dist/providers/data/google-vertex.json between the pins, not the generated wrapper -- the wrapper is unchanged and reading it says the catalog is unchanged, which is wrong. The docs re-check column now says so. Closes #7018 by moving the example/default Gemini reference from gemini-3.7-flash to gemini-3.8-flash across config, docs and fixtures. gemini-3.7-flash stays in the catalog table: 0.85.0 removes nothing. Provenance comments are annotated, not rewritten, and only where the cited module was actually re-diffed between 0.84.4 and 0.85.0. Byte-identical: modes/json-event.js, modes/print-mode.js, core/sdk.js, core/package-manager.js, core/auth-storage.js, core/pi-manifest.js, and defaultActiveToolNames; jiti stays 2.7.0. cli/args.js differs only in help text (new PI_SERVER_DIR and PI_SERVER_ID env docs, no new option -- and the pluginformat env denylist already wildcards PI_*). core/tools/bash.js differs by 120 lines but the killProcessTree call sites are identical, so stray_processes.go's claim survives. Because json-event.js is byte-identical the --mode json wire contract did not move, so the parsePiStream fixtures stay valid. pi_run.go's alias comment is flipped rather than deleted: it warned that the table can name an id the pinned pi lacks, with "fable" -> claude-fable-5-1 as the example. 0.85.0's catalog adds that id, so the bump closes the gap the comment described (#6882). Verified locally against an image built from this Containerfile with the xai-vertex 0.2.1 pin from #7024 applied on top, so it matches main after that merge: pi --version -> 0.85.0 pi -ne -e .../anthropic-vertex -e .../xai-vertex --list-models -> 14 anthropic-vertex ids incl. claude-fable-5-1 (new in 0.85.0), plus xai-vertex; no stderr pi -ne --list-models | google-vertex -> 14 gemini ids, and that set is byte-identical to piGoogleVertexModels pi --print --mode json --model anthropic-vertex/claude-sonnet-5 -> exit 0, 14 NDJSON lines, session version 3 that captured stream through parsePiStream -> sessionID captured, no error, exactly one ResultEvent, subtype stop go build, go vet, and ./internal/{config,runtime,harness,sandbox,pluginformat} pass; node --test on fullsend-agent.test.mjs passes 32/32. Assisted-by: Claude (fix), Grok (review), Codex (review) Signed-off-by: Wayne Sun <gsun@redhat.com>
Summary
Bumps the vendored
pi-xai-vertexextension in the sandbox image from v0.2.0 to v0.2.1. v0.2.0 aborts Grok-on-Vertex requests when the endpoint sends keepalive frames (data: : keepalive) during high reasoning effort — the OpenAI SDK decoder inside pi fails on the non-JSON frame. v0.2.1 filters those frames before the SDK sees them (fullsend-ai/pi-xai-vertex#5, fixed by fullsend-ai/pi-xai-vertex#6).Related Issue
Fixes #7021
Changes
PI_XAI_VERTEX_VERSIONfrom0.2.0to0.2.1inimages/sandbox/ContainerfilePI_XAI_VERTEX_SHA256to match the v0.2.1 release tarball (2d910e500c1052f5a8b10d0f9a39149629fd1fff93e5cac71ae963211a71ee30)Testing
sandbox_pi_image_test.govalidates the extension installs at the pinned pathChecklist
!for breaking changes)Closes #7021
Post-script verification
agent/7021-bump-pi-xai-vertex)403540d77c8c32f89ec7e813bf68c7ff016f582e..HEAD)Verification (@waynesun09, 2026-09-04)
SHA:
curl -fsSL https://github.com/fullsend-ai/pi-xai-vertex/archive/refs/tags/v0.2.1.tar.gz | shasum -a 256→2d910e500c1052f5a8b10d0f9a39149629fd1fff93e5cac71ae963211a71ee30, matching the pin. Tagv0.2.1= release commit5216a88con the extension's main; it contains fix commit7d1a651b(fix(#5): filter Vertex AI keepalive frames from SSE streams pi-xai-vertex#6).Tarball diff v0.2.0 → v0.2.1:
src/index.ts(the keepalive filter),src/index.test.ts, README,package.jsonversion, and the two rootversionlines ofpackage-lock.json. Dependencies unchanged (google-auth-library 9.15.1exact), sonpm ci --omit=dev --omit=peer --ignore-scriptsinstalls the identical tree.Bump checklist (per the renovate.json manager note and
pi_bootstrap.go):peerDependenciesfloor@earendil-works/pi-ai >=0.84.0,pi-coding-agent >=0.84.0still coversPI_VERSION=0.84.4;PROVIDER_ID(xai-vertex),MODEL_ID(xai/grok-4.6, matchespiXaiVertexModels), the project env-var list andbuildBaseUrlare byte-identical between the tags, so the runtime's model table and env contract need no change.Local image build with this pin:
podman build -f images/sandbox/Containerfileon this branch succeeds (checksum step passes); inside the image/usr/local/share/pi-extensions/xai-vertex/package.jsonis 0.2.1 andsrc/index.tscarries the filter; pi 0.84.4.go test ./internal/sandbox/passes.Multi-model review (Claude Fable 5.1, Grok 4.6, Codex gpt-5.6-sol): no MEDIUM+ code findings. Lows left as-is: the tarball now also ships the extension repo's
.fullsend/config.yaml, which therm -rfcleanup does not strip (inert, not read by anything);chorevsfixfor the release notes; pi-xai-vertex is patch-automerge-eligible in renovate.json without anautomerge: falserule like pi-anthropic-vertex has, while the SHA must be refreshed by hand — worth a follow-up.End-to-end on this pin (2026-09-04, local):
images/code/Containerfilebuilt on the sandbox image from this branch, thenfullsend run review --runtime pi --model xai-vertex/xai/grok-4.6(fleetreviewharness,pr-reviewroster, target feat(dispatch): let a repository preserve the agent run already in flight #7007 — the run that aborted on the keepalive frame with v0.2.0 earlier today):→ Result: stop, exit 0, schema-valid result (request-changes, 7 findings), 25 turns, 1219 s, 8Agentdispatches (opus ×3, sonnet ×5, allstop), no stream error;metrics.jsontotal $6.67 = grok 3.04 + opus 1.45 + sonnet 2.18.