Update Fleet-maintained apps - #49505
Conversation
Generated automatically with cmd/maintained-apps.
Script Diff Resultsee/maintained-apps/outputs/4k-youtube-to-mp3/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/adlock/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/apidog/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/camo-studio/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/carbon-copy-cloner/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/chatgpt/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/claude/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/cog-app/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/cursor/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/cursor/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/dayflow/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/extradock/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/free-download-manager/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/google-chrome/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/granola/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/granola/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/groove-omnidialer/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/jetbrains-toolbox/darwin.json=== Install Script (no changes) ===
=== Uninstall // 276d8363 -> 118b704f ===
--- /tmp/old.qkaETm 2026-07-17 18:58:10.879095862 +0000
+++ /tmp/new.BwErtm 2026-07-17 18:58:10.879095862 +0000
@@ -5,6 +5,46 @@
LOGGED_IN_USER=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print $3 }')
# functions
+quit_application() {
+ local bundle_id="$1"
+ local timeout_duration=10
+
+ # check if the application is running
+ local app_running
+ app_running=$(osascript -e "application id \"$bundle_id\" is running" 2>/dev/null)
+ if [[ "$app_running" != "true" ]]; then
+ return
+ fi
+
+ local console_user
+ console_user=$(stat -f "%Su" /dev/console)
+ if [[ -z "$console_user" || "$console_user" == "root" || "$console_user" == "loginwindow" ]]; then
+ echo "Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'."
+ return
+ fi
+
+ echo "Quitting application '$bundle_id'..."
+
+ # try to quit the application within the timeout period
+ local quit_success=false
+ SECONDS=0
+ while (( SECONDS < timeout_duration )); do
+ if osascript -e "tell application id \"$bundle_id\" to quit" >/dev/null 2>&1; then
+ if ! pgrep -f "$bundle_id" >/dev/null 2>&1; then
+ echo "Application '$bundle_id' quit successfully."
+ quit_success=true
+ break
+ fi
+ fi
+ sleep 1
+ done
+
+ if [[ "$quit_success" = false ]]; then
+ echo "Application '$bundle_id' did not quit."
+ fi
+}
+
+
remove_launchctl_service() {
local service="$1"
local booleans=("true" "false")
@@ -162,6 +202,7 @@
}
remove_launchctl_service 'com.jetbrains.toolbox'
+quit_application 'com.jetbrains.toolbox'
send_signal 'TERM' 'com.jetbrains.toolbox' "$LOGGED_IN_USER"
sudo rm -rf "$APPDIR/JetBrains Toolbox.app"
sudo rmdir '~/Library/Application Support/JetBrains'ee/maintained-apps/outputs/kiro/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/kiro/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/macwhisper/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/nordvpn/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/postman/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/postman/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/prisma-browser/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/reqable/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/reqable/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/spokenly/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/stretchly/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/stretchly/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/whatsapp/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/workflowy/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/zen/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) === |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
WalkthroughUpdated maintained-app JSON manifests for multiple macOS and Windows applications with new versions, patch-detection thresholds, installer URLs, and SHA-256 checksums. JetBrains Toolbox now uses a new uninstall script reference that conditionally quits the application before cleanup. Stretchly’s Windows uninstall script now stops the process, removes registry, PATH, shortcut, and installation remnants, and verifies final removal. Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
Stretchly 1.22.0 added an EnVar PATH-cleanup step to its NSIS uninstaller (runs before any removal work) and the uninstaller now exits 0xc0000005. Verify removal via the registry instead of trusting the exit code, fall back to manual removal (registry key, shortcuts, install dir), and scrub the new Stretchly\bin PATH entry ourselves.
Script Diff Resultsee/maintained-apps/outputs/4k-youtube-to-mp3/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/adlock/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/apidog/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/camo-studio/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/carbon-copy-cloner/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/chatgpt/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/claude/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/cog-app/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/cursor/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/cursor/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/dayflow/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/extradock/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/free-download-manager/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/google-chrome/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/granola/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/granola/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/groove-omnidialer/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/jetbrains-toolbox/darwin.json=== Install Script (no changes) ===
=== Uninstall // 276d8363 -> 118b704f ===
--- /tmp/old.MG7DdY 2026-07-17 19:56:02.667938308 +0000
+++ /tmp/new.vjs9D8 2026-07-17 19:56:02.667938308 +0000
@@ -5,6 +5,46 @@
LOGGED_IN_USER=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print $3 }')
# functions
+quit_application() {
+ local bundle_id="$1"
+ local timeout_duration=10
+
+ # check if the application is running
+ local app_running
+ app_running=$(osascript -e "application id \"$bundle_id\" is running" 2>/dev/null)
+ if [[ "$app_running" != "true" ]]; then
+ return
+ fi
+
+ local console_user
+ console_user=$(stat -f "%Su" /dev/console)
+ if [[ -z "$console_user" || "$console_user" == "root" || "$console_user" == "loginwindow" ]]; then
+ echo "Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'."
+ return
+ fi
+
+ echo "Quitting application '$bundle_id'..."
+
+ # try to quit the application within the timeout period
+ local quit_success=false
+ SECONDS=0
+ while (( SECONDS < timeout_duration )); do
+ if osascript -e "tell application id \"$bundle_id\" to quit" >/dev/null 2>&1; then
+ if ! pgrep -f "$bundle_id" >/dev/null 2>&1; then
+ echo "Application '$bundle_id' quit successfully."
+ quit_success=true
+ break
+ fi
+ fi
+ sleep 1
+ done
+
+ if [[ "$quit_success" = false ]]; then
+ echo "Application '$bundle_id' did not quit."
+ fi
+}
+
+
remove_launchctl_service() {
local service="$1"
local booleans=("true" "false")
@@ -162,6 +202,7 @@
}
remove_launchctl_service 'com.jetbrains.toolbox'
+quit_application 'com.jetbrains.toolbox'
send_signal 'TERM' 'com.jetbrains.toolbox' "$LOGGED_IN_USER"
sudo rm -rf "$APPDIR/JetBrains Toolbox.app"
sudo rmdir '~/Library/Application Support/JetBrains'ee/maintained-apps/outputs/kiro/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/kiro/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/macwhisper/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/nordvpn/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/postman/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/postman/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/prisma-browser/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/reqable/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/reqable/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/spokenly/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/stretchly/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/stretchly/windows.json=== Install Script (no changes) ===
=== Uninstall // 4d8fe7a0 -> 399bc8f1 ===
--- /tmp/old.wN77sA 2026-07-17 19:56:03.095941213 +0000
+++ /tmp/new.K4Pqtr 2026-07-17 19:56:03.096941219 +0000
@@ -1,4 +1,8 @@
# Locate the uninstall entry in the registry and run it silently.
+# Stretchly 1.22.0's NSIS uninstaller runs a custom PATH-cleanup step (EnVar
+# plugin) before any removal work and can crash with 0xc0000005, leaving the
+# app fully installed. Don't trust its exit code: verify the registry entry is
+# gone and fall back to removing the app manually.
$displayNameLike = "Stretchly*"
$publisher = "Jan Hovancik"
@@ -9,14 +13,45 @@
'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall'
)
-$uninstall = $null
-foreach ($p in $paths) {
- $items = Get-ItemProperty "$p\*" -ErrorAction SilentlyContinue | Where-Object {
- $_.DisplayName -like $displayNameLike -and ($publisher -eq "" -or $_.Publisher -like "*$publisher*")
+function Find-UninstallEntry {
+ foreach ($p in $paths) {
+ $items = Get-ItemProperty "$p\*" -ErrorAction SilentlyContinue | Where-Object {
+ $_.DisplayName -like $displayNameLike -and ($publisher -eq "" -or $_.Publisher -like "*$publisher*")
+ }
+ if ($items) { return $items | Select-Object -First 1 }
+ }
+ return $null
+}
+
+function Remove-StretchlyFromPath {
+ # The vendor uninstaller's EnVar step removes "<install dir>\bin" from PATH;
+ # do it ourselves since that step is what crashes. Use the raw registry API
+ # to preserve unexpanded REG_EXPAND_SZ entries like %SystemRoot%.
+ $envKeys = @(
+ @{ Hive = [Microsoft.Win32.Registry]::CurrentUser; SubKey = 'Environment' },
+ @{ Hive = [Microsoft.Win32.Registry]::LocalMachine; SubKey = 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment' }
+ )
+ foreach ($envKey in $envKeys) {
+ try {
+ $key = $envKey.Hive.OpenSubKey($envKey.SubKey, $true)
+ if (-not $key) { continue }
+ $current = $key.GetValue('Path', $null, [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)
+ if ($current) {
+ $kind = $key.GetValueKind('Path')
+ $updated = ($current -split ';' | Where-Object { $_ -and $_ -notlike '*\Stretchly\bin' }) -join ';'
+ if ($updated -ne $current) {
+ $key.SetValue('Path', $updated, $kind)
+ Write-Host "Removed Stretchly from PATH in $($envKey.SubKey)"
+ }
+ }
+ $key.Close()
+ } catch {
+ Write-Host "PATH cleanup skipped for $($envKey.SubKey): $_"
+ }
}
- if ($items) { $uninstall = $items | Select-Object -First 1; break }
}
+$uninstall = Find-UninstallEntry
if (-not $uninstall -or -not $uninstall.UninstallString) {
Write-Host "Uninstall entry not found"
Exit 0
@@ -40,6 +75,8 @@
$installDir = Split-Path $uninstallExe -Parent
}
+ Stop-Process -Name "stretchly" -Force -ErrorAction SilentlyContinue
+
$uninstallArgs = @("/S", "_?=$installDir")
Write-Host "Uninstall command: $uninstallExe"
@@ -57,11 +94,40 @@
$exitCode = $process.ExitCode
Write-Host "Uninstall exit code: $exitCode"
+ if ($exitCode -ne 0) {
+ $remaining = Find-UninstallEntry
+ if ($remaining) {
+ # The vendor uninstaller crashed before removing anything; finish
+ # the job manually.
+ Write-Host "Uninstaller failed and app is still registered; removing manually"
+ Remove-Item -Path $remaining.PSPath -Recurse -Force -ErrorAction SilentlyContinue
+ $shortcuts = @(
+ "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Stretchly.lnk",
+ "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Stretchly.lnk",
+ "$env:USERPROFILE\Desktop\Stretchly.lnk",
+ "$env:PUBLIC\Desktop\Stretchly.lnk"
+ )
+ foreach ($shortcut in $shortcuts) {
+ Remove-Item $shortcut -Force -ErrorAction SilentlyContinue
+ }
+ } else {
+ Write-Host "App is no longer registered despite exit code $exitCode; treating as success"
+ }
+ }
+
+ Remove-StretchlyFromPath
+
if ($installDir -and (Test-Path $installDir)) {
Remove-Item $installDir -Recurse -Force -ErrorAction SilentlyContinue
}
- Exit $exitCode
+ if (Find-UninstallEntry) {
+ Write-Host "Stretchly is still present after removal attempts"
+ Exit 1
+ }
+
+ Write-Host "Stretchly is no longer present"
+ Exit 0
} catch {
Write-Host "Error running uninstaller: $_"
Exit 1ee/maintained-apps/outputs/whatsapp/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/workflowy/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/zen/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) === |
Automated ingestion of latest Fleet-maintained app data.
Summary by CodeRabbit
New Features
Bug Fixes