Skip to content

FMA - Antigravity IDE - #47011

Merged
allenhouchins merged 5 commits into
mainfrom
fma-antigravity-fma
Jun 8, 2026
Merged

FMA - Antigravity IDE#47011
allenhouchins merged 5 commits into
mainfrom
fma-antigravity-fma

Conversation

@harrisonravazzolo

@harrisonravazzolo harrisonravazzolo commented Jun 7, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

  • New Features
    • Added support for Google Antigravity IDE on macOS and Windows with install/uninstall flows.
    • App metadata and version detection added so the app is discoverable and manageable in the software interface.
    • Added a visual icon and name mappings for the application.

@codecov

codecov Bot commented Jun 7, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 67.03%. Comparing base (36aa370) to head (a3e1886).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
...s/SoftwarePage/components/icons/AntigravityIde.tsx 50.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #47011      +/-   ##
==========================================
- Coverage   67.03%   67.03%   -0.01%     
==========================================
  Files        2883     2884       +1     
  Lines      225149   225151       +2     
  Branches    11637    11637              
==========================================
+ Hits       150939   150940       +1     
- Misses      60539    60540       +1     
  Partials    13671    13671              
Flag Coverage Δ
frontend 56.96% <50.00%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@harrisonravazzolo
harrisonravazzolo marked this pull request as ready for review June 7, 2026 02:45
@harrisonravazzolo
harrisonravazzolo requested a review from a team as a code owner June 7, 2026 02:45

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.

Tip: disable this comment in your organization's Code Review settings.

@coderabbitai

coderabbitai Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 5ee58d54-ea12-4b24-b780-2981fb3efa55

📥 Commits

Reviewing files that changed from the base of the PR and between 50bacae and a3e1886.

📒 Files selected for processing (2)
  • ee/maintained-apps/outputs/apps.json
  • frontend/pages/SoftwarePage/components/icons/index.ts

Walkthrough

Adds Google Antigravity IDE across Fleet: Homebrew and Winget input manifests; Windows PowerShell install/uninstall scripts with registry discovery, process termination, uninstall-string parsing, silent-flag normalization, and exit-code handling; macOS Darwin output with embedded DMG install and uninstall scripts; updates apps registry with darwin/windows entries; and adds a React SVG icon component plus mappings in the frontend software icon resolver.

Possibly related PRs

  • fleetdm/fleet#46738: Touches the same frontend icon registry by adding entries to SOFTWARE_NAME_TO_ICON_MAP.
  • fleetdm/fleet#47018: Adds a new React SVG icon component and updates SOFTWARE_NAME_TO_ICON_MAP, similar UI integration work.
  • fleetdm/fleet#46734: Follows the same pattern of adding a new app with darwin install/uninstall scripts and wiring an icon component into the icon mapping.
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Description check ⚠️ Warning The pull request has no description provided by the author, which fails to meet the repository's template requirements for documenting changes, testing, and validation. Add a comprehensive pull request description following the provided template, including related issue number, checklist confirmations, testing details, and any relevant validation steps.
Title check ❓ Inconclusive The title 'FMA - Antigravity IDE' is partially related to the changeset, which adds support for Google Antigravity IDE across multiple platforms, but is vague and uses the abbreviation 'FMA' without clear meaning. Clarify the title by removing the 'FMA -' prefix or explaining what it means, and use a more descriptive phrase like 'Add Google Antigravity IDE support for macOS and Windows'.
✅ Passed checks (3 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fma-antigravity-fma

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@ee/maintained-apps/inputs/homebrew/antigravity-ide.json`:
- Line 7: The default_categories value uses the wrong casing ("Developer
tools"); update the manifest key default_categories to use the exact enum string
"Developer Tools" so it matches the documented allowed value and prevents
invalid/uncategorized metadata; locate the default_categories entry in the
antigravity-ide manifest and replace "Developer tools" with "Developer Tools".

In `@ee/maintained-apps/inputs/winget/scripts/antigravity_ide_uninstall.ps1`:
- Around line 1-2: The uninstall selector in antigravity_ide_uninstall.ps1 uses
broad patterns ($softwareNameLike = "Antigravity*" and $publisherLike =
"*Google*") which can match the wrong product; change these to the exact
DisplayName and Publisher values used in the generated manifest (use the same
identifier string that Fleet's outputs/antigravity-ide/windows.json uses), and
update any exists/patched checks to derive from that same identifier so both the
uninstall lookup and detection queries are identical; after updating
$softwareNameLike and $publisherLike in the script and aligning any related
detection variables, regenerate
ee/maintained-apps/outputs/antigravity-ide/windows.json to reflect the stricter
selector.

In `@ee/maintained-apps/outputs/antigravity-ide/darwin.json`:
- Around line 19-20: The symlink for the CLI is created and removed as a
relative path ("agy-ide") which is nondeterministic; update the installer ln
invocation (the line that currently calls ln -h -f -s -- "$APPDIR/Antigravity
IDE.app/Contents/Resources/app/bin/antigravity-ide" "agy-ide") to create an
absolute symlink (e.g. /usr/local/bin/agy-ide) and update the uninstaller
removal (the sudo rm -rf 'agy-ide' call) to remove that same absolute path,
ensuring both install (ln) and uninstall (rm) reference the identical absolute
target path.

In `@frontend/pages/SoftwarePage/components/icons/index.ts`:
- Line 339: The icon mapping is missing a "google antigravity ide" key so prefix
matching won't match names like "Google Antigravity IDE"; update the mapping
object that contains the "antigravity ide": AntigravityIde entry by adding a
second key "google antigravity ide": AntigravityIde (keep the same
AntigravityIde symbol) so loose/prefix matching will pick the custom icon for
names starting with "google antigravity ide".
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 5f750d0f-a766-4ae3-a1fe-5bc44fc66cb7

📥 Commits

Reviewing files that changed from the base of the PR and between 6fb22c0 and 50bacae.

⛔ Files ignored due to path filters (1)
  • website/assets/images/app-icon-antigravity-ide-60x60@2x.png is excluded by !**/*.png
📒 Files selected for processing (9)
  • ee/maintained-apps/inputs/homebrew/antigravity-ide.json
  • ee/maintained-apps/inputs/winget/antigravity-ide.json
  • ee/maintained-apps/inputs/winget/scripts/antigravity_ide_install.ps1
  • ee/maintained-apps/inputs/winget/scripts/antigravity_ide_uninstall.ps1
  • ee/maintained-apps/outputs/antigravity-ide/darwin.json
  • ee/maintained-apps/outputs/antigravity-ide/windows.json
  • ee/maintained-apps/outputs/apps.json
  • frontend/pages/SoftwarePage/components/icons/AntigravityIde.tsx
  • frontend/pages/SoftwarePage/components/icons/index.ts

Comment thread ee/maintained-apps/inputs/homebrew/antigravity-ide.json
Comment on lines +1 to +2
$softwareNameLike = "Antigravity*"
$publisherLike = "*Google*"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Match the same product that Fleet detects.

This selector is broader than the Windows manifest query: the output manifest only treats Antigravity IDE ... from Google as the managed app, but this script grabs the first Google uninstall entry whose DisplayName matches Antigravity*. On hosts with multiple Google Antigravity entries, uninstall can target the wrong product and leave detection out of sync.

🔧 Proposed fix
-$softwareNameLike = "Antigravity*"
+$softwareNameLike = "Antigravity IDE*"

If you want the strictest contract, derive both the uninstall lookup and the exists / patched queries from the same identifier, then regenerate ee/maintained-apps/outputs/antigravity-ide/windows.json.

Also applies to: 20-25

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ee/maintained-apps/inputs/winget/scripts/antigravity_ide_uninstall.ps1`
around lines 1 - 2, The uninstall selector in antigravity_ide_uninstall.ps1 uses
broad patterns ($softwareNameLike = "Antigravity*" and $publisherLike =
"*Google*") which can match the wrong product; change these to the exact
DisplayName and Publisher values used in the generated manifest (use the same
identifier string that Fleet's outputs/antigravity-ide/windows.json uses), and
update any exists/patched checks to derive from that same identifier so both the
uninstall lookup and detection queries are identical; after updating
$softwareNameLike and $publisherLike in the script and aligning any related
detection variables, regenerate
ee/maintained-apps/outputs/antigravity-ide/windows.json to reflect the stricter
selector.

Comment on lines +19 to +20
"c9689968": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'com.google.antigravity-ide'\nsudo rm -rf \"$APPDIR/Antigravity IDE.app\"\nsudo rm -rf 'agy-ide'\ntrash $LOGGED_IN_USER '~/.antigravity-ide-server/'\ntrash $LOGGED_IN_USER '~/.antigravity-ide/'\ntrash $LOGGED_IN_USER '~/.gemini/antigravity-ide/'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Antigravity IDE'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.google.antigravity-ide.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.google.antigravity-ide'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.google.antigravity-ide.ShipIt'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.google.antigravity-ide'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.google.antigravity-ide.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.google.antigravity-ide.savedState'\n",
"d4aa2ac0": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.google.antigravity-ide'\nif [ -d \"$APPDIR/Antigravity IDE.app\" ]; then\n\tsudo mv \"$APPDIR/Antigravity IDE.app\" \"$TMPDIR/Antigravity IDE.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Antigravity IDE.app\" \"$APPDIR\"\nrelaunch_application 'com.google.antigravity-ide'\nmkdir -p .\n/bin/ln -h -f -s -- \"$APPDIR/Antigravity IDE.app/Contents/Resources/app/bin/antigravity-ide\" \"agy-ide\"\n"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Use an absolute symlink path shared by install and uninstall scripts.

Line 20 creates agy-ide relative to the current working directory, and Line 19 removes the same relative path. This makes CLI placement non-deterministic and can delete the wrong file depending on runtime cwd.

Suggested fix
# in both install and uninstall scripts
+SYMLINK_PATH="/usr/local/bin/agy-ide"

# install
-mkdir -p .
-/bin/ln -h -f -s -- "$APPDIR/Antigravity IDE.app/Contents/Resources/app/bin/antigravity-ide" "agy-ide"
+sudo mkdir -p "$(dirname "$SYMLINK_PATH")"
+/bin/ln -h -f -s -- "$APPDIR/Antigravity IDE.app/Contents/Resources/app/bin/antigravity-ide" "$SYMLINK_PATH"

# uninstall
-sudo rm -rf 'agy-ide'
+sudo rm -f "$SYMLINK_PATH"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ee/maintained-apps/outputs/antigravity-ide/darwin.json` around lines 19 - 20,
The symlink for the CLI is created and removed as a relative path ("agy-ide")
which is nondeterministic; update the installer ln invocation (the line that
currently calls ln -h -f -s -- "$APPDIR/Antigravity
IDE.app/Contents/Resources/app/bin/antigravity-ide" "agy-ide") to create an
absolute symlink (e.g. /usr/local/bin/agy-ide) and update the uninstaller
removal (the sudo rm -rf 'agy-ide' call) to remove that same absolute path,
ensuring both install (ln) and uninstall (rm) reference the identical absolute
target path.

Comment thread frontend/pages/SoftwarePage/components/icons/index.ts
@allenhouchins

Copy link
Copy Markdown
Member

@harrisonravazzolo converting to draft. There are a few findings that need to be addressed.

@allenhouchins
allenhouchins marked this pull request as draft June 7, 2026 12:38
fleet-release
fleet-release previously approved these changes Jun 8, 2026
# Conflicts:
#	ee/maintained-apps/outputs/apps.json
#	frontend/pages/SoftwarePage/components/icons/index.ts
@allenhouchins
allenhouchins marked this pull request as ready for review June 8, 2026 01:46
Copilot AI review requested due to automatic review settings June 8, 2026 01:46
@allenhouchins
allenhouchins merged commit d27c61f into main Jun 8, 2026
29 of 30 checks passed
@allenhouchins
allenhouchins deleted the fma-antigravity-fma branch June 8, 2026 01:46

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR adds a new Fleet-maintained app (FMA) entry for Google Antigravity IDE across macOS (Homebrew) and Windows (winget), and makes the app show up with a dedicated icon in the Software UI.

Changes:

  • Added a new Software page icon component and mapped it to “Antigravity IDE” software-name variants.
  • Added new maintained-app input manifests (Homebrew + winget) and corresponding install/uninstall scripts.
  • Added generated maintained-app output manifests and appended the app entries to apps.json.

Reviewed changes

Copilot reviewed 9 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
frontend/pages/SoftwarePage/components/icons/index.ts Registers the new Antigravity IDE icon and maps software-name strings to it.
frontend/pages/SoftwarePage/components/icons/AntigravityIde.tsx Adds the new 32x32 icon asset as an SVG wrapper.
ee/maintained-apps/outputs/apps.json Adds Antigravity IDE entries to the published maintained-app catalog (darwin + windows).
ee/maintained-apps/outputs/antigravity-ide/windows.json Adds generated Windows manifest including detection queries + install/uninstall refs.
ee/maintained-apps/outputs/antigravity-ide/darwin.json Adds generated macOS manifest including detection queries + install/uninstall refs.
ee/maintained-apps/inputs/winget/scripts/antigravity_ide_uninstall.ps1 New Windows uninstall script (registry-based).
ee/maintained-apps/inputs/winget/scripts/antigravity_ide_install.ps1 New Windows install script (silent Inno install).
ee/maintained-apps/inputs/winget/antigravity-ide.json New winget input manifest wiring scripts + identifiers.
ee/maintained-apps/inputs/homebrew/antigravity-ide.json New Homebrew input manifest wiring token + identifiers.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +1 to +2
$softwareNameLike = "Antigravity*"
$publisherLike = "*Google*"
Comment on lines +19 to +20
"65cab11a": "$softwareNameLike = \"Antigravity*\"\n$publisherLike = \"*Google*\"\n\n$paths = @(\n 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall',\n 'HKLM:\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall',\n 'HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall'\n)\n\n$ExpectedExitCodes = @(0, 3010, 1641)\n$exitCode = 0\n\ntry {\n\n[array]$uninstallKeys = Get-ChildItem `\n -Path $paths `\n -ErrorAction SilentlyContinue |\n ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue }\n\n$selected = $null\nforeach ($key in $uninstallKeys) {\n if ($key.DisplayName -and $key.DisplayName -like $softwareNameLike -and $key.Publisher -like $publisherLike) {\n $selected = $key\n break\n }\n}\n\nif (-not $selected -or (-not $selected.UninstallString -and -not $selected.QuietUninstallString)) {\n Write-Host \"Uninstall entry not found for $softwareNameLike\"\n Exit 0\n}\n\n# Stop Antigravity and any helpers running out of the install dir so the\n# uninstaller doesn't fail on locked files.\nStop-Process -Name \"Antigravity\" -Force -ErrorAction SilentlyContinue\nif ($selected.InstallLocation -and (Test-Path -LiteralPath $selected.InstallLocation)) {\n $loc = $selected.InstallLocation.TrimEnd('\\')\n Get-Process | Where-Object { $_.Path -and $_.Path -like \"$loc\\*\" } |\n ForEach-Object { Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue }\n}\nStart-Sleep -Seconds 2\n\n# Prefer QuietUninstallString -- Inno populates it with /VERYSILENT\n# /SUPPRESSMSGBOXES already, so we just add /NORESTART if missing.\n$uninstallCommand = if ($selected.QuietUninstallString) {\n $selected.QuietUninstallString\n} else {\n $selected.UninstallString\n}\n\n# Parse the uninstaller exe path. Inno usually quotes it.\n$exePath = \"\"\n$existingArgs = \"\"\nif ($uninstallCommand -match '^\\s*\"([^\"]+)\"\\s*(.*)$') {\n $exePath = $matches[1]\n $existingArgs = $matches[2].Trim()\n} elseif ($uninstallCommand -match '(?i)^\\s*(.+?\\.exe)\\s*(.*)$') {\n $exePath = $matches[1]\n $existingArgs = $matches[2].Trim()\n} else {\n Throw \"Could not parse uninstall string: $uninstallCommand\"\n}\n\n$argumentList = @()\nif ($existingArgs) { $argumentList += ($existingArgs -split '\\s+') }\nforeach ($s in @(\"/VERYSILENT\", \"/SUPPRESSMSGBOXES\", \"/NORESTART\")) {\n if ($argumentList -notcontains $s) { $argumentList += $s }\n}\n\nWrite-Host \"Selected entry DisplayName: $($selected.DisplayName)\"\nWrite-Host \"Uninstall command: $exePath\"\nWrite-Host \"Uninstall args: $($argumentList -join ' ')\"\n\n$processOptions = @{\n FilePath = $exePath\n ArgumentList = $argumentList\n PassThru = $true\n Wait = $true\n}\n\n$process = Start-Process @processOptions\n$exitCode = $process.ExitCode\nWrite-Host \"Uninstall exit code: $exitCode\"\n\nif ($ExpectedExitCodes -contains $exitCode) { Exit 0 }\nExit $exitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n",
"8b15c4d0": "$exeFilePath = \"${env:INSTALLER_PATH}\"\n\n$ExpectedExitCodes = @(0, 3010)\n\ntry {\n\n# Antigravity uses an Inno Setup-based installer (user scope).\n# /MERGETASKS=!runcode deselects the \"launch after install\" task.\n$processOptions = @{\n FilePath = \"$exeFilePath\"\n ArgumentList = \"/SP- /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /CLOSEAPPLICATIONS /MERGETASKS=!runcode\"\n PassThru = $true\n Wait = $true\n}\n\n# Start process and track exit code\n$process = Start-Process @processOptions\n$exitCode = $process.ExitCode\n\nWrite-Host \"Install exit code: $exitCode\"\n\n# Stop the app if the installer auto-launched it despite !runcode\nStop-Process -Name \"Antigravity\" -Force -ErrorAction SilentlyContinue\n\nif ($ExpectedExitCodes -contains $exitCode) { Exit 0 }\nExit $exitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n"
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.

4 participants