Skip to content

feat(antigravity): dynamically resolve ACP quota test identity and update docs to 1.4.5 - #29

Merged
e-kotov merged 3 commits into
mainfrom
fix/dynamic-antigravity-quota-test
Nov 2, 2026
Merged

e-kotov merged 3 commits into
mainfrom
fix/dynamic-antigravity-quota-test

Conversation

@e-kotov

@e-kotov e-kotov commented Nov 2, 2026

Copy link
Copy Markdown
Owner

Summary

  • Dynamic ACP Identity in Quota Tests: Updated apps/server/src/provider/forkAntigravityQuota.test.ts to dynamically resolve the expected fallback version from resolveAntigravityReleaseAsset("darwin", "arm64")?.version rather than hardcoding static version strings like 1.4.1 or 1.4.5. This prevents future upstream ACP runtime upgrades from artificially breaking sync checks.
  • Runtime Error Guidance: Updated forkAntigravityRuntime.ts error message to guide users to install 1.4.5 if an affected 1.4.2-1.4.4 version is encountered.
  • Documentation: Updated docs/user/fork-install.md references from 1.4.1 to 1.4.5, reflecting upstream PR feat(antigravity): runtime 1.4.5 with real turn failures and subagent work pingdotgg/t3code#28629's resolution of the run-workflow stray file issue.

@greptile-apps

greptile-apps Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 2/5

[High impact] The PR changes shared thread, provider, analytics, and desktop workflows across the app.

Do not merge until credentialed media reads are restricted and differently filtered usage scans merge without losing records.

Findings

  1. P1 Security Renderer can read private responses ▶
  2. P1 Shared usage loses models ▶
  3. P2 Hidden mobile thread stays open ▶

Summary

The actual changes extend well beyond the PR description:

  • People can tag threads and hide matching threads from their views.
  • People can inspect the child work behind Antigravity subagent batches.
  • Provider analytics now reports completed runs as well as individual turns.
  • Usage reports can include or exclude selected models.
  • Antigravity sessions use updated runtime support and setup guidance.
  • Conversation timelines show when the model or its effort changes.
  • Desktop startup and window workflows respond to recovery and activation events.
  • Desktop media previews can use a bounded IPC read path.
  • Provider and app workflows gain updated quota, tool, environment, pricing, and folder-drop behavior.

Before merging, restrict credentialed media reads and fix merging of differently filtered usage scans. Mobile also needs a route check to hide an open conversation consistently with web.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  R["Renderer supplies URL"] --> B["desktopBridge.readMedia"]
  B --> G["Check window ID and HTTP(S)"]
  G --> F["Main process fetches with cookies"]
  F --> D["Return response bytes to renderer"]
Loading

Reviews (1) · Last reviewed commit: "feat(antigravity): dynamically resolve A..." · Reviewed by Greptile

const session = window.value.webContents.session;
return yield* Effect.tryPromise(async () => {
// Like an <img>, send the session's cookies.
const response = await session.fetch(url, { credentials: "include" });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 security Renderer can read private responses

readMedia accepts any HTTP(S) URL from the main renderer, sends the desktop session's cookies, and returns the response body—even for non-media content. If renderer code is compromised, it can read authenticated resources that browser CORS would otherwise protect. Checking the window ID does not restrict the destination.

Omit credentials for unrelated origins and restrict credentialed reads to approved destinations, including redirects.

How this was verified: The bridge accepts a caller-supplied URL, fetches it with credentials: "include", and returns its bytes without checking the destination origin.

Comment on lines +181 to +186
// A scan under another model filter counts different records, so its cells are not missing ones.
if (
owner?.source.status !== "ok" ||
Date.parse(environment.summary.readAt) <= Date.parse(owner.environment.summary.readAt)
Date.parse(environment.summary.readAt) <= Date.parse(owner.environment.summary.readAt) ||
JSON.stringify(environment.summary.modelFilter) !==
JSON.stringify(owner.environment.summary.modelFilter)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Shared usage loses models

Different model filters are checked only when adding partial scans, but claimSources still chooses one owner for an entire shared source. If two environments share a transcript directory and one includes model A while the other includes model B, the newer successful scan wins and the other model's usage disappears. Token and cost totals then depend on which server refreshed last.

Reconcile differently filtered scans without dropping their non-overlapping records, and add a case with two successful scans.

export const environmentThreadShells = createEnvironmentThreadShellAtoms({
catalogValueAtom: environmentCatalog.catalogValueAtom,
snapshotAtom: threadEnvironment.snapshotAtom,
hiddenThreadTagsAtom: serverEnvironment.hiddenThreadTagsAtom,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Hidden mobile thread stays open

The mobile tag filter hides list rows but leaves an already-open conversation visible. useResolvedThreadSelection still reads the unfiltered point shell, and ThreadRouteScreen renders it without checking hidden keys. Enabling hideTaggedThreads from another client therefore leaves the full conversation on the mobile screen, unlike the new web route guard.

Add the same visibility check to the mobile route while keeping point reads complete for drafts and outboxes.

@e-kotov
e-kotov merged commit 65ac894 into main Nov 2, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant