diff --git a/ee/maintained-apps/outputs/aws-cli/windows.json b/ee/maintained-apps/outputs/aws-cli/windows.json
index 676d68e26b..973d89d2dc 100644
--- a/ee/maintained-apps/outputs/aws-cli/windows.json
+++ b/ee/maintained-apps/outputs/aws-cli/windows.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "2.35.10",
+ "version": "2.35.11",
"queries": {
"exists": "SELECT 1 FROM programs WHERE name LIKE 'AWS Command Line Interface v2 %' AND publisher = 'Amazon Web Services';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'AWS Command Line Interface v2 %' AND publisher = 'Amazon Web Services' AND version_compare(version, '2.35.10') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'AWS Command Line Interface v2 %' AND publisher = 'Amazon Web Services' AND version_compare(version, '2.35.11') < 0);"
},
- "installer_url": "https://awscli.amazonaws.com/AWSCLIV2-2.35.10.msi",
+ "installer_url": "https://awscli.amazonaws.com/AWSCLIV2-2.35.11.msi",
"install_script_ref": "8959087b",
"uninstall_script_ref": "58bcd016",
- "sha256": "fc78ac60c93842c93a9dad5415c2b60684a0ce8e01eb2022a3644cb7de6f4669",
+ "sha256": "370c5b644637f921a0fb1df2001d40e126b73d4b6ffbe4c0ff3e6081accd697a",
"default_categories": [
"Developer tools"
],
diff --git a/ee/maintained-apps/outputs/aws-vpn-client/darwin.json b/ee/maintained-apps/outputs/aws-vpn-client/darwin.json
index f2a94a0d1e..9e0dcf4c06 100644
--- a/ee/maintained-apps/outputs/aws-vpn-client/darwin.json
+++ b/ee/maintained-apps/outputs/aws-vpn-client/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "5.3.5",
+ "version": "5.4.0",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.amazonaws.acvc.osx';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.amazonaws.acvc.osx' AND version_compare(bundle_short_version, '5.3.5') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.amazonaws.acvc.osx' AND version_compare(bundle_short_version, '5.4.0') < 0);"
},
- "installer_url": "https://d20adtppz83p9s.cloudfront.net/OSX_ARM64/5.3.5/AWS_VPN_Client_ARM64.pkg",
+ "installer_url": "https://d20adtppz83p9s.cloudfront.net/OSX_ARM64/5.4.0/AWS_VPN_Client_ARM64.pkg",
"install_script_ref": "53e8589e",
"uninstall_script_ref": "f0c0a1aa",
- "sha256": "048c9011b7cea43720cb92d7c2fe064c8d853b391ee499408736cba5d9111652",
+ "sha256": "b9b6c384fd265fc5d2b94467c5dcd80c47c1a1265623f157ec8b99b833ad82a9",
"default_categories": [
"Productivity"
]
diff --git a/ee/maintained-apps/outputs/aws-vpn-client/windows.json b/ee/maintained-apps/outputs/aws-vpn-client/windows.json
index 602b74ee01..0382af2643 100644
--- a/ee/maintained-apps/outputs/aws-vpn-client/windows.json
+++ b/ee/maintained-apps/outputs/aws-vpn-client/windows.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "5.3.7",
+ "version": "5.4.0",
"queries": {
"exists": "SELECT 1 FROM programs WHERE name = 'AWS VPN Client' AND publisher = 'Amazon';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'AWS VPN Client' AND publisher = 'Amazon' AND version_compare(version, '5.3.7') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'AWS VPN Client' AND publisher = 'Amazon' AND version_compare(version, '5.4.0') < 0);"
},
- "installer_url": "https://d20adtppz83p9s.cloudfront.net/WPF/5.3.7/AWS_VPN_Client.msi",
+ "installer_url": "https://d20adtppz83p9s.cloudfront.net/WPF/5.4.0/AWS_VPN_Client.msi",
"install_script_ref": "8959087b",
"uninstall_script_ref": "ff441c4a",
- "sha256": "64ee088e60b3eab83fbae6b1d1db56da1156e8094ce0b1d3fdf6e3e2c285b731",
+ "sha256": "a373d0494f153b700701451cdac70a371b6456d0e05aa1fe6c14ef87d63b5c6d",
"default_categories": [
"Productivity"
],
diff --git a/ee/maintained-apps/outputs/bettertouchtool/darwin.json b/ee/maintained-apps/outputs/bettertouchtool/darwin.json
index 7c4df0ae9a..45abd67b9b 100644
--- a/ee/maintained-apps/outputs/bettertouchtool/darwin.json
+++ b/ee/maintained-apps/outputs/bettertouchtool/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "6.594",
+ "version": "6.596",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.hegenberg.BetterTouchTool';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.hegenberg.BetterTouchTool' AND version_compare(bundle_short_version, '6.594') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.hegenberg.BetterTouchTool' AND version_compare(bundle_short_version, '6.596') < 0);"
},
- "installer_url": "https://folivora.ai/releases/btt6.594-2026061903.zip",
+ "installer_url": "https://folivora.ai/releases/btt6.596-2026062301.zip",
"install_script_ref": "920c563d",
"uninstall_script_ref": "b0dc7152",
- "sha256": "eadc3748756a2369664f7068033efed5063e396f28848987c1cc4c650c8101bc",
+ "sha256": "466113bce9cfa38d441a04de6bdcf26c325f8237415a8110ce5ef504f88d287d",
"default_categories": [
"Productivity"
]
diff --git a/ee/maintained-apps/outputs/codex-app/darwin.json b/ee/maintained-apps/outputs/codex-app/darwin.json
index 24ee637bae..918df74d3c 100644
--- a/ee/maintained-apps/outputs/codex-app/darwin.json
+++ b/ee/maintained-apps/outputs/codex-app/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "26.616.51431",
+ "version": "26.616.71553",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.openai.codex';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.openai.codex' AND version_compare(bundle_short_version, '26.616.51431') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.openai.codex' AND version_compare(bundle_short_version, '26.616.71553') < 0);"
},
- "installer_url": "https://persistent.oaistatic.com/codex-app-prod/Codex-darwin-arm64-26.616.51431.zip",
+ "installer_url": "https://persistent.oaistatic.com/codex-app-prod/Codex-darwin-arm64-26.616.71553.zip",
"install_script_ref": "5e3efa57",
"uninstall_script_ref": "a2b5ee81",
- "sha256": "766454cc6d98cb7c82cbd2169198abba8939b57f50b8f0188b4c639de1d61f91",
+ "sha256": "a2b2eee5d8b18f3da9cd8c4065dc9000ec938e055d52f7b2e9dc5be5e80f6570",
"default_categories": [
"Developer tools"
]
diff --git a/ee/maintained-apps/outputs/coteditor/darwin.json b/ee/maintained-apps/outputs/coteditor/darwin.json
index 9f4e9e8b56..abf8b1df99 100644
--- a/ee/maintained-apps/outputs/coteditor/darwin.json
+++ b/ee/maintained-apps/outputs/coteditor/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "7.0.4",
+ "version": "7.0.5",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.coteditor.CotEditor';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.coteditor.CotEditor' AND version_compare(bundle_short_version, '7.0.4') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.coteditor.CotEditor' AND version_compare(bundle_short_version, '7.0.5') < 0);"
},
- "installer_url": "https://github.com/coteditor/CotEditor/releases/download/7.0.4/CotEditor_7.0.4.dmg",
+ "installer_url": "https://github.com/coteditor/CotEditor/releases/download/7.0.5/CotEditor_7.0.5.dmg",
"install_script_ref": "555e683c",
"uninstall_script_ref": "b4411f31",
- "sha256": "333939c23e217ec2f8e7ca778c1061df099d6bd0267c9157ced8032901a09c26",
+ "sha256": "14d6ae6d8df994359141a5bc25e32734f369ab7a4bda61d92d15e2ea4c8f1145",
"default_categories": [
"Developer tools"
]
diff --git a/ee/maintained-apps/outputs/cursor/windows.json b/ee/maintained-apps/outputs/cursor/windows.json
index 8bc437a716..8705461efd 100644
--- a/ee/maintained-apps/outputs/cursor/windows.json
+++ b/ee/maintained-apps/outputs/cursor/windows.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "3.8.11",
+ "version": "3.8.22",
"queries": {
"exists": "SELECT 1 FROM programs WHERE name = 'Cursor' AND publisher = 'Anysphere';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Cursor' AND publisher = 'Anysphere' AND version_compare(version, '3.8.11') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Cursor' AND publisher = 'Anysphere' AND version_compare(version, '3.8.22') < 0);"
},
- "installer_url": "https://downloads.cursor.com/production/e56ad3440df06d22ca7501e65fd518e905486ef7/win32/x64/system-setup/CursorSetup-x64-3.8.11.exe",
+ "installer_url": "https://downloads.cursor.com/production/46fb7aafe279d7c72346febe68c2e004b7d1de6e/win32/x64/system-setup/CursorSetup-x64-3.8.22.exe",
"install_script_ref": "03589b5e",
"uninstall_script_ref": "6c8096c5",
- "sha256": "78a9faee09a8354bff8b16ba02bc8a43bfdb12474263943a8b202455d9606a9d",
+ "sha256": "fbca707793e3398d084112064b86b478165cfe1d3677ce795c19b7f8ee5a7b78",
"default_categories": [
"Developer tools"
]
diff --git a/ee/maintained-apps/outputs/deezer/darwin.json b/ee/maintained-apps/outputs/deezer/darwin.json
index 2703fe288b..c54a874e59 100644
--- a/ee/maintained-apps/outputs/deezer/darwin.json
+++ b/ee/maintained-apps/outputs/deezer/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "7.1.250",
+ "version": "7.1.260",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.deezer.deezer-desktop';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.deezer.deezer-desktop' AND version_compare(bundle_short_version, '7.1.250') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.deezer.deezer-desktop' AND version_compare(bundle_short_version, '7.1.260') < 0);"
},
- "installer_url": "https://www.deezer.com/desktop/download/artifact-darwin-x64-7.1.250",
+ "installer_url": "https://www.deezer.com/desktop/download/artifact-darwin-x64-7.1.260",
"install_script_ref": "17993903",
"uninstall_script_ref": "7a7ca836",
- "sha256": "3cc0c917a86e2b3663b25949fc5a16485b5e7ac5aa3adfd180a7eae84ddd584c",
+ "sha256": "92932eac27d3874e2d7f0aacb31039d1fade14c80c1ef0570345fb5357b8a409",
"default_categories": [
"Productivity"
]
diff --git a/ee/maintained-apps/outputs/enpass/darwin.json b/ee/maintained-apps/outputs/enpass/darwin.json
index 190b8a4f7b..b87c8ddd6f 100644
--- a/ee/maintained-apps/outputs/enpass/darwin.json
+++ b/ee/maintained-apps/outputs/enpass/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "6.12.2.2561",
+ "version": "6.12.3.2597",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'in.sinew.Enpass-Desktop';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'in.sinew.Enpass-Desktop' AND version_compare(bundle_short_version, '6.12.2.2561') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'in.sinew.Enpass-Desktop' AND version_compare(bundle_short_version, '6.12.3.2597') < 0);"
},
- "installer_url": "https://dl.enpass.io/stable/mac/package/6.12.2.2561/Enpass.pkg",
+ "installer_url": "https://dl.enpass.io/stable/mac/package/6.12.3.2597/Enpass.pkg",
"install_script_ref": "fc5573f6",
"uninstall_script_ref": "30b298ce",
- "sha256": "3e36c258f4b9e5d8939d9e10abce4f735e309cb627eb88cac164dd28e80db0c8",
+ "sha256": "c17b6665ba84cb66d0d0547de8eeb3047ab937602d021262dcebe4fa5f507b63",
"default_categories": [
"Security"
]
diff --git a/ee/maintained-apps/outputs/grammarly-desktop/darwin.json b/ee/maintained-apps/outputs/grammarly-desktop/darwin.json
index 03fe1c7294..7f0cdb4600 100644
--- a/ee/maintained-apps/outputs/grammarly-desktop/darwin.json
+++ b/ee/maintained-apps/outputs/grammarly-desktop/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "1.170.1",
+ "version": "1.171.1",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.grammarly.ProjectLlama';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.grammarly.ProjectLlama' AND version_compare(bundle_short_version, '1.170.1') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.grammarly.ProjectLlama' AND version_compare(bundle_short_version, '1.171.1') < 0);"
},
- "installer_url": "https://download-mac.grammarly.com/versions/1.170.1.0/Grammarly.dmg",
+ "installer_url": "https://download-mac.grammarly.com/versions/1.171.1.0/Grammarly.dmg",
"install_script_ref": "20d5bd8f",
"uninstall_script_ref": "e14b2d61",
- "sha256": "2948a5f5d3b1e32039101854b8108509494c9cd3140772ddc3f3a4d04f277c47",
+ "sha256": "bfde9806a58438f9aed91f04c84ba9e966dc7a35a9df8ed1ee1752e1ed46dd59",
"default_categories": [
"Productivity"
]
diff --git a/ee/maintained-apps/outputs/linear/windows.json b/ee/maintained-apps/outputs/linear/windows.json
index 191bd8ceb2..6aff53282e 100644
--- a/ee/maintained-apps/outputs/linear/windows.json
+++ b/ee/maintained-apps/outputs/linear/windows.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "1.28.13",
+ "version": "1.31.0",
"queries": {
"exists": "SELECT 1 FROM programs WHERE name LIKE 'Linear %' AND publisher = 'Linear Orbit, Inc.';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Linear %' AND publisher = 'Linear Orbit, Inc.' AND version_compare(version, '1.28.13') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Linear %' AND publisher = 'Linear Orbit, Inc.' AND version_compare(version, '1.31.0') < 0);"
},
- "installer_url": "https://download.todesktop.com/200315glz2793v6/Linear%20Setup%201.28.13%20-%20Build%20260318pho1bttxr-x64.exe",
+ "installer_url": "https://releases.linear.app/Linear%20Setup%201.31.0.exe",
"install_script_ref": "166c7345",
"uninstall_script_ref": "b1906016",
- "sha256": "6279df1ceab3d4c66ff9185b8a3bb121137d52e0abae80db5a0b9708d0eb2352",
+ "sha256": "928310526e6e6c67417f4e3a615773b456a8c39f10c0ae3da581aacecefdc0c0",
"default_categories": [
"Productivity"
]
diff --git a/ee/maintained-apps/outputs/mattermost/darwin.json b/ee/maintained-apps/outputs/mattermost/darwin.json
index a53e2ec8b4..976d16fa87 100644
--- a/ee/maintained-apps/outputs/mattermost/darwin.json
+++ b/ee/maintained-apps/outputs/mattermost/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "6.2.1",
+ "version": "6.2.2",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'Mattermost.Desktop';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'Mattermost.Desktop' AND version_compare(bundle_short_version, '6.2.1') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'Mattermost.Desktop' AND version_compare(bundle_short_version, '6.2.2') < 0);"
},
- "installer_url": "https://releases.mattermost.com/desktop/6.2.1/mattermost-desktop-6.2.1-mac-arm64.zip",
+ "installer_url": "https://releases.mattermost.com/desktop/6.2.2/mattermost-desktop-6.2.2-mac-arm64.zip",
"install_script_ref": "b8367a3b",
"uninstall_script_ref": "fe5755b3",
- "sha256": "112cc02840a1360889dc45f07c39dca6dd2368b81b9553289bea236368ef152e",
+ "sha256": "6c8aa5e66a1ee5e8f9887c390f707683056a274d4742b71ce1ca08f9fe8cf259",
"default_categories": [
"Communication"
]
diff --git a/ee/maintained-apps/outputs/microsoft-365-copilot/darwin.json b/ee/maintained-apps/outputs/microsoft-365-copilot/darwin.json
index 50664f69ba..ee7aeaa3f9 100644
--- a/ee/maintained-apps/outputs/microsoft-365-copilot/darwin.json
+++ b/ee/maintained-apps/outputs/microsoft-365-copilot/darwin.json
@@ -1,22 +1,22 @@
{
"versions": [
{
- "version": "1.2606.0801",
+ "version": "1.2606.1501",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.m365copilot';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.m365copilot' AND version_compare(bundle_short_version, '1.2606.0801') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.m365copilot' AND version_compare(bundle_short_version, '1.2606.1501') < 0);"
},
- "installer_url": "https://res.public.onecdn.static.microsoft/mro1cdnstorage/C1297A47-86C4-4C1F-97FA-950631F94777/MacAutoupdate/Microsoft_365_Copilot_universal_1.2606.0801_Installer.pkg",
- "install_script_ref": "24e252f8",
+ "installer_url": "https://res.public.onecdn.static.microsoft/mro1cdnstorage/C1297A47-86C4-4C1F-97FA-950631F94777/MacAutoupdate/Microsoft_365_Copilot_universal_1.2606.1501_Installer.pkg",
+ "install_script_ref": "67424985",
"uninstall_script_ref": "ff8e1cf4",
- "sha256": "334b47a40de9e2adddc225399a0335464a00a4f2059c2578e6e0ff2fb424733d",
+ "sha256": "19148ebe9846d3cc5871d808fe2568c3abab7901da24feb453be00b472e2f6ac",
"default_categories": [
"Productivity"
]
}
],
"refs": {
- "24e252f8": "#!/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# install pkg files\nquit_and_track_application 'com.microsoft.m365copilot'\n\nCHOICE_XML=$(mktemp /tmp/choice_xml_XXX)\n\ncat << EOF > \"$CHOICE_XML\"\n\n\n\n\n \n attributeSetting\n 0\n choiceAttribute\n selected\n choiceIdentifier\n com.microsoft.autoupdate\n \n\n\n\nEOF\n\nsudo installer -pkg \"$TMPDIR\"/Microsoft_365_Copilot_universal_1.2606.0801_Installer.pkg -target / -applyChoiceChangesXML \"$CHOICE_XML\"\n\nrelaunch_application 'com.microsoft.m365copilot'\n",
+ "67424985": "#!/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# install pkg files\nquit_and_track_application 'com.microsoft.m365copilot'\n\nCHOICE_XML=$(mktemp /tmp/choice_xml_XXX)\n\ncat << EOF > \"$CHOICE_XML\"\n\n\n\n\n \n attributeSetting\n 0\n choiceAttribute\n selected\n choiceIdentifier\n com.microsoft.autoupdate\n \n\n\n\nEOF\n\nsudo installer -pkg \"$TMPDIR\"/Microsoft_365_Copilot_universal_1.2606.1501_Installer.pkg -target / -applyChoiceChangesXML \"$CHOICE_XML\"\n\nrelaunch_application 'com.microsoft.m365copilot'\n",
"ff8e1cf4": "#!/bin/bash\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\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\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\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.microsoft.autoupdate2'\nremove_pkg_files 'com.microsoft.m365copilot'\nforget_pkg 'com.microsoft.m365copilot'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.microsoft.m365copilot'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.microsoft.m365copilot'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.microsoft.m365copilot.plist'\n"
}
}
diff --git a/ee/maintained-apps/outputs/notion/darwin.json b/ee/maintained-apps/outputs/notion/darwin.json
index 30650ab0bd..3e5ee98b10 100644
--- a/ee/maintained-apps/outputs/notion/darwin.json
+++ b/ee/maintained-apps/outputs/notion/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "7.22.0",
+ "version": "7.23.0",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'notion.id';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'notion.id' AND version_compare(bundle_short_version, '7.22.0') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'notion.id' AND version_compare(bundle_short_version, '7.23.0') < 0);"
},
- "installer_url": "https://desktop-release.notion-static.com/Notion-7.22.0-arm64.dmg",
+ "installer_url": "https://desktop-release.notion-static.com/Notion-7.23.0-arm64.dmg",
"install_script_ref": "20b617ec",
"uninstall_script_ref": "5400135a",
- "sha256": "cc10093c96fce64ea29b5a82228ca0fb1577d4b438f9fdfbe55f816600fac2dd",
+ "sha256": "1f0774259b0d43336ddb061c24a77740e7b724cbdfca15b3513f5c97e7e83715",
"default_categories": [
"Productivity"
]
diff --git a/ee/maintained-apps/outputs/notion/windows.json b/ee/maintained-apps/outputs/notion/windows.json
index f3204d4c72..0984a43a71 100644
--- a/ee/maintained-apps/outputs/notion/windows.json
+++ b/ee/maintained-apps/outputs/notion/windows.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "7.22.0",
+ "version": "7.23.0",
"queries": {
"exists": "SELECT 1 FROM programs WHERE name LIKE 'Notion %' AND publisher = 'Notion Labs, Inc';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Notion %' AND publisher = 'Notion Labs, Inc' AND version_compare(version, '7.22.0') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Notion %' AND publisher = 'Notion Labs, Inc' AND version_compare(version, '7.23.0') < 0);"
},
- "installer_url": "https://desktop-release.notion-static.com/Notion%20Setup%207.22.0.exe",
+ "installer_url": "https://desktop-release.notion-static.com/Notion%20Setup%207.23.0.exe",
"install_script_ref": "0803ad8c",
"uninstall_script_ref": "a8fdd9b7",
- "sha256": "66dea2c94c8fc5a3dca41a5c85925db8965a77b274ec38ea3734bb10ea9e8559",
+ "sha256": "70f5b9379a668f24106cd41cebebf0dfc9a3a55bb226bb3ca1984d59c2fbefef",
"default_categories": [
"Productivity"
]
diff --git a/ee/maintained-apps/outputs/onedrive/darwin.json b/ee/maintained-apps/outputs/onedrive/darwin.json
index 146f58d165..0b7bfeb839 100644
--- a/ee/maintained-apps/outputs/onedrive/darwin.json
+++ b/ee/maintained-apps/outputs/onedrive/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "26.088.0510.0004",
+ "version": "26.098.0524.0004",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.OneDrive';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.OneDrive' AND version_compare(bundle_short_version, '26.088.0510.0004') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.OneDrive' AND version_compare(bundle_short_version, '26.098.0524.0004') < 0);"
},
- "installer_url": "https://oneclient.sfx.ms/Mac/Installers/26.088.0510.0004/universal/OneDrive.pkg",
+ "installer_url": "https://oneclient.sfx.ms/Mac/Installers/26.098.0524.0004/universal/OneDrive.pkg",
"install_script_ref": "1e78de1c",
"uninstall_script_ref": "e2151a4d",
- "sha256": "64bb51367175efcb6fea6d7fb8ed6bbf10d7117b0c1a40130f56ce157beff6a8",
+ "sha256": "85dfbe556b09a8e287186bed4a61d05a8a04350a0f669d99a3ed3e0396ae85ef",
"default_categories": [
"Productivity"
]
diff --git a/ee/maintained-apps/outputs/parallels/darwin.json b/ee/maintained-apps/outputs/parallels/darwin.json
index 8e166269c3..ecd49875a6 100644
--- a/ee/maintained-apps/outputs/parallels/darwin.json
+++ b/ee/maintained-apps/outputs/parallels/darwin.json
@@ -8,7 +8,7 @@
},
"installer_url": "https://download.parallels.com/desktop/v26/26.4.0-57513/ParallelsDesktop-26.4.0-57513.dmg",
"install_script_ref": "108147d0",
- "uninstall_script_ref": "340de022",
+ "uninstall_script_ref": "94c626c6",
"sha256": "424ba5fa1661d09ee0f3e0fe4fb44b99faed2b68bdd3ec25b2b7e6e6d35a62e8",
"default_categories": [
"Productivity"
@@ -17,6 +17,6 @@
],
"refs": {
"108147d0": "#!/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.parallels.desktop.console'\nif [ -d \"$APPDIR/Parallels Desktop.app\" ]; then\n\tsudo mv \"$APPDIR/Parallels Desktop.app\" \"$TMPDIR/Parallels Desktop.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Parallels Desktop.app\" \"$APPDIR\"\nrelaunch_application 'com.parallels.desktop.console'\n",
- "340de022": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nsend_signal() {\n local signal=\"$1\"\n local bundle_id=\"$2\"\n local logged_in_user=\"$3\"\n local logged_in_uid pids\n\n if [ -z \"$signal\" ] || [ -z \"$bundle_id\" ] || [ -z \"$logged_in_user\" ]; then\n echo \"Usage: uninstall_signal \"\n return 1\n fi\n\n logged_in_uid=$(id -u \"$logged_in_user\")\n if [ -z \"$logged_in_uid\" ]; then\n echo \"Could not find UID for user '$logged_in_user'.\"\n return 1\n fi\n\n echo \"Signalling '$signal' to application ID '$bundle_id' for user '$logged_in_user'\"\n\n pids=$(/bin/launchctl asuser \"$logged_in_uid\" sudo -iu \"$logged_in_user\" /bin/launchctl list | awk -v bundle_id=\"$bundle_id\" '\n $3 ~ bundle_id { print $1 }')\n\n if [ -z \"$pids\" ]; then\n echo \"No processes found for bundle ID '$bundle_id'.\"\n return 0\n fi\n\n echo \"Unix PIDs are $pids for processes with bundle identifier $bundle_id\"\n for pid in $pids; do\n if kill -s \"$signal\" \"$pid\" 2>/dev/null; then\n echo \"Successfully signaled PID $pid with signal $signal.\"\n else\n echo \"Failed to kill PID $pid with signal $signal. Check permissions.\"\n fi\n done\n\n sleep 3\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\nsend_signal 'TERM' 'com.parallels.desktop.console' \"$LOGGED_IN_USER\"\n(cd /Users/$LOGGED_IN_USER && '/usr/bin/pkill' '-TERM' 'prl_client_app') || true\nsudo rm -rf '/Library/Preferences/Parallels'\nsudo rm -rf '/usr/local/bin/prl_convert'\nsudo rm -rf '/usr/local/bin/prl_disk_tool'\nsudo rm -rf '/usr/local/bin/prl_perf_ctl'\nsudo rm -rf '/usr/local/bin/prlcopy'\nsudo rm -rf '/usr/local/bin/prlcore2dmp'\nsudo rm -rf '/usr/local/bin/prlctl'\nsudo rm -rf '/usr/local/bin/prlexec'\nsudo rm -rf '/usr/local/bin/prlsrvctl'\nsudo rm -rf \"$APPDIR/Parallels Desktop.app\"\nsudo rmdir '/Users/Shared/Parallels'\nsudo rmdir '~/Library/Caches/Parallels Software'\nsudo rmdir '~/Library/Parallels'\nsudo rmdir '~/Parallels'\ntrash $LOGGED_IN_USER '~/.parallels_settings'\ntrash $LOGGED_IN_USER '~/Applications (Parallels)'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/*.com.parallels.Desktop'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.parallels.desktop*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.parallels.desktop.console.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.helpd/Generated/com.parallels.desktop.console.help*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.parallels.desktop.console'\ntrash $LOGGED_IN_USER '~/Library/Caches/Parallels Software/Parallels Desktop'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.parallels.desktop*'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/*.com.parallels.Desktop'\ntrash $LOGGED_IN_USER '~/Library/Logs/parallels.log'\ntrash $LOGGED_IN_USER '~/Library/Parallels/Applications Menus'\ntrash $LOGGED_IN_USER '~/Library/Parallels/Downloads'\ntrash $LOGGED_IN_USER '~/Library/Parallels/Parallels Desktop'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.parallels.desktop.console.LSSharedFileList.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.parallels.desktop.console.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.parallels.Parallels Desktop Events.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.parallels.Parallels Desktop Statistics.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.parallels.Parallels Desktop.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.parallels.Parallels.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.parallels.PDInfo.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/Parallels'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.parallels.desktop.console.savedState'\n"
+ "94c626c6": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nsend_signal() {\n local signal=\"$1\"\n local bundle_id=\"$2\"\n local logged_in_user=\"$3\"\n local logged_in_uid pids\n\n if [ -z \"$signal\" ] || [ -z \"$bundle_id\" ] || [ -z \"$logged_in_user\" ]; then\n echo \"Usage: uninstall_signal \"\n return 1\n fi\n\n logged_in_uid=$(id -u \"$logged_in_user\")\n if [ -z \"$logged_in_uid\" ]; then\n echo \"Could not find UID for user '$logged_in_user'.\"\n return 1\n fi\n\n echo \"Signalling '$signal' to application ID '$bundle_id' for user '$logged_in_user'\"\n\n pids=$(/bin/launchctl asuser \"$logged_in_uid\" sudo -iu \"$logged_in_user\" /bin/launchctl list | awk -v bundle_id=\"$bundle_id\" '\n $3 ~ bundle_id { print $1 }')\n\n if [ -z \"$pids\" ]; then\n echo \"No processes found for bundle ID '$bundle_id'.\"\n return 0\n fi\n\n echo \"Unix PIDs are $pids for processes with bundle identifier $bundle_id\"\n for pid in $pids; do\n if kill -s \"$signal\" \"$pid\" 2>/dev/null; then\n echo \"Successfully signaled PID $pid with signal $signal.\"\n else\n echo \"Failed to kill PID $pid with signal $signal. Check permissions.\"\n fi\n done\n\n sleep 3\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\nsend_signal 'TERM' 'com.parallels.desktop.console' \"$LOGGED_IN_USER\"\n(cd /Users/$LOGGED_IN_USER && '/usr/bin/pkill' '-TERM' 'prl_client_app') || true\nsudo rm -rf '/usr/local/bin/prl_convert'\nsudo rm -rf '/usr/local/bin/prl_disk_tool'\nsudo rm -rf '/usr/local/bin/prl_perf_ctl'\nsudo rm -rf '/usr/local/bin/prlcopy'\nsudo rm -rf '/usr/local/bin/prlcore2dmp'\nsudo rm -rf '/usr/local/bin/prlctl'\nsudo rm -rf '/usr/local/bin/prlexec'\nsudo rm -rf '/usr/local/bin/prlsrvctl'\nsudo rm -rf \"$APPDIR/Parallels Desktop.app\"\nsudo rm -rf '/Library/Preferences/Parallels'\nsudo rmdir '/Users/Shared/Parallels'\nsudo rmdir '~/Library/Caches/Parallels Software'\nsudo rmdir '~/Library/Parallels'\nsudo rmdir '~/Parallels'\ntrash $LOGGED_IN_USER '~/.parallels_settings'\ntrash $LOGGED_IN_USER '~/Applications (Parallels)'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/*.com.parallels.Desktop'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.parallels.desktop*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.parallels.desktop.console.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.helpd/Generated/com.parallels.desktop.console.help*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.parallels.desktop.console'\ntrash $LOGGED_IN_USER '~/Library/Caches/Parallels Software/Parallels Desktop'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.parallels.desktop*'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/*.com.parallels.Desktop'\ntrash $LOGGED_IN_USER '~/Library/Logs/parallels.log'\ntrash $LOGGED_IN_USER '~/Library/Parallels/Applications Menus'\ntrash $LOGGED_IN_USER '~/Library/Parallels/Downloads'\ntrash $LOGGED_IN_USER '~/Library/Parallels/Parallels Desktop'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.parallels.desktop.console.LSSharedFileList.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.parallels.desktop.console.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.parallels.Parallels Desktop Events.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.parallels.Parallels Desktop Statistics.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.parallels.Parallels Desktop.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.parallels.Parallels.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.parallels.PDInfo.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/Parallels'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.parallels.desktop.console.savedState'\n"
}
}
diff --git a/ee/maintained-apps/outputs/postman/darwin.json b/ee/maintained-apps/outputs/postman/darwin.json
index dfcba7d56a..da5599c8d7 100644
--- a/ee/maintained-apps/outputs/postman/darwin.json
+++ b/ee/maintained-apps/outputs/postman/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "12.15.6",
+ "version": "12.16.1",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.postmanlabs.mac';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.postmanlabs.mac' AND version_compare(bundle_short_version, '12.15.6') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.postmanlabs.mac' AND version_compare(bundle_short_version, '12.16.1') < 0);"
},
- "installer_url": "https://dl.pstmn.io/download/version/12.15.6/osx_arm64",
+ "installer_url": "https://dl.pstmn.io/download/version/12.16.1/osx_arm64",
"install_script_ref": "96d73870",
"uninstall_script_ref": "966b2fa5",
- "sha256": "49cb1a404e144350dc3832094fe00040be4c7ca9aa12f27b9bda4df49e4b5f8e",
+ "sha256": "9cf36bf88bec44cd458fe9759bb8c3972e288b8d42a1353c784b43c1fbb61f54",
"default_categories": [
"Developer tools"
]
diff --git a/ee/maintained-apps/outputs/postman/windows.json b/ee/maintained-apps/outputs/postman/windows.json
index ee28ef837d..cd7590df76 100644
--- a/ee/maintained-apps/outputs/postman/windows.json
+++ b/ee/maintained-apps/outputs/postman/windows.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "12.16.0",
+ "version": "12.16.1",
"queries": {
"exists": "SELECT 1 FROM programs WHERE name LIKE 'Postman x64 %' AND publisher = 'Postman';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Postman x64 %' AND publisher = 'Postman' AND version_compare(version, '12.16.0') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Postman x64 %' AND publisher = 'Postman' AND version_compare(version, '12.16.1') < 0);"
},
- "installer_url": "https://dl.pstmn.io/download/version/12.16.0/windows_64",
+ "installer_url": "https://dl.pstmn.io/download/version/12.16.1/windows_64",
"install_script_ref": "8594f0bc",
"uninstall_script_ref": "fd59d029",
- "sha256": "71e793769fb8fef0bdd3cc6805981cf9250ec462f5e2a250aa515dd02d26c4aa",
+ "sha256": "80a195edab6fae57b890162115c22923eb7e524ab28a858d823b3cf1298db253",
"default_categories": [
"Developer tools"
]
diff --git a/ee/maintained-apps/outputs/requestly/darwin.json b/ee/maintained-apps/outputs/requestly/darwin.json
index 5192ecbd7f..f6ec346b8c 100644
--- a/ee/maintained-apps/outputs/requestly/darwin.json
+++ b/ee/maintained-apps/outputs/requestly/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "26.6.8",
+ "version": "26.6.22",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'io.requestly.beta';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'io.requestly.beta' AND version_compare(bundle_short_version, '26.6.8') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'io.requestly.beta' AND version_compare(bundle_short_version, '26.6.22') < 0);"
},
- "installer_url": "https://github.com/requestly/requestly-desktop-app/releases/download/v26.6.8/Requestly-26.6.8-arm64.dmg",
+ "installer_url": "https://github.com/requestly/requestly-desktop-app/releases/download/v26.6.22/Requestly-26.6.22-arm64.dmg",
"install_script_ref": "73f86cf3",
"uninstall_script_ref": "66a21db5",
- "sha256": "097a483f32f19a2f471a3bc3a81b0e05076c9a85f9c727daf056e5521d84d935",
+ "sha256": "07f6db3612f8bd321243b4a91fb60cb1759c90b0ec047f050e31026e10ec35d9",
"default_categories": [
"Productivity"
]
diff --git a/ee/maintained-apps/outputs/sketch/darwin.json b/ee/maintained-apps/outputs/sketch/darwin.json
index ffceb877ce..f117ee4791 100644
--- a/ee/maintained-apps/outputs/sketch/darwin.json
+++ b/ee/maintained-apps/outputs/sketch/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "2026.1.2",
+ "version": "2026.2",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.bohemiancoding.sketch3';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.bohemiancoding.sketch3' AND version_compare(bundle_short_version, '2026.1.2') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.bohemiancoding.sketch3' AND version_compare(bundle_short_version, '2026.2') < 0);"
},
- "installer_url": "https://download.sketch.com/sketch-2026.1.2-228390.zip",
+ "installer_url": "https://download.sketch.com/sketch-2026.2-231037.zip",
"install_script_ref": "af1163b0",
"uninstall_script_ref": "bcf4e59f",
- "sha256": "4a3cf7d19d634d0bacb98a24981a9acdf7a02ccfce67b2cd33149ae20aa66eaa",
+ "sha256": "7ab2e209d78f210034cd7f2a31200f79288630a33ac46da41e39e414f84495ba",
"default_categories": [
"Productivity"
]
diff --git a/ee/maintained-apps/outputs/super-productivity/darwin.json b/ee/maintained-apps/outputs/super-productivity/darwin.json
index 8a2a7a9d42..9ab6ed3cb2 100644
--- a/ee/maintained-apps/outputs/super-productivity/darwin.json
+++ b/ee/maintained-apps/outputs/super-productivity/darwin.json
@@ -6,7 +6,7 @@
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.super-productivity.app';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.super-productivity.app' AND version_compare(bundle_short_version, '18.12.0') < 0);"
},
- "installer_url": "https://github.com/johannesjo/super-productivity/releases/download/v18.12.0/superProductivity-arm64.dmg",
+ "installer_url": "https://github.com/super-productivity/super-productivity/releases/download/v18.12.0/superProductivity-arm64.dmg",
"install_script_ref": "149e0795",
"uninstall_script_ref": "98941c96",
"sha256": "1d15de1322b6efc2833bd7496186f5d9ce3dcdb58a09c9e4d33e71f5131c3ccc",
diff --git a/ee/maintained-apps/outputs/tower/darwin.json b/ee/maintained-apps/outputs/tower/darwin.json
index 5ccfdd2934..097bd770f5 100644
--- a/ee/maintained-apps/outputs/tower/darwin.json
+++ b/ee/maintained-apps/outputs/tower/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "16.0.1",
+ "version": "16.0.2",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.fournova.Tower';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.fournova.Tower' AND version_compare(bundle_short_version, '16.0.1') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.fournova.Tower' AND version_compare(bundle_short_version, '16.0.2') < 0);"
},
- "installer_url": "https://www.git-tower.com/apps/tower3-mac/538-b2e67206/Tower-16.0.1-538.zip",
+ "installer_url": "https://www.git-tower.com/apps/tower3-mac/539-a4c4eb60/Tower-16.0.2-539.zip",
"install_script_ref": "59069b9f",
"uninstall_script_ref": "8937b747",
- "sha256": "b1f9178d2719ec67da6f2dbc6e9b6c37601c521ecdecdcd6eb5f1efac3eb7128",
+ "sha256": "fdb184f69ecc59eb2ad8564b89850e00cccae6c8ab792394e4e6e81984cceb17",
"default_categories": [
"Developer tools"
]
diff --git a/ee/maintained-apps/outputs/ua-connect/darwin.json b/ee/maintained-apps/outputs/ua-connect/darwin.json
index e2703d6a9c..7dc4e3a704 100644
--- a/ee/maintained-apps/outputs/ua-connect/darwin.json
+++ b/ee/maintained-apps/outputs/ua-connect/darwin.json
@@ -1,15 +1,15 @@
{
"versions": [
{
- "version": "1.9.4",
+ "version": "1.9.5",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.uaudio.ua-connect';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.uaudio.ua-connect' AND version_compare(bundle_short_version, '1.9.4') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.uaudio.ua-connect' AND version_compare(bundle_short_version, '1.9.5') < 0);"
},
- "installer_url": "https://builds.uaudio.com/apps/UA_Connect/UA_Connect_1_9_4_3715_Mac.dmg",
+ "installer_url": "https://builds.uaudio.com/apps/UA_Connect/UA_Connect_1_9_5_3731_Mac.dmg",
"install_script_ref": "3d09e295",
"uninstall_script_ref": "0e6f3643",
- "sha256": "a3b393f4821955e5cbfd6a4a366eb9a7e7a57a67ffab39fc756a6fb8d4a49421",
+ "sha256": "e6c3c40aa7d54cf988eeaace53e842c42cd616e61292eff653416073ed188ed2",
"default_categories": [
"Productivity"
]
diff --git a/ee/maintained-apps/outputs/whatsapp/darwin.json b/ee/maintained-apps/outputs/whatsapp/darwin.json
index 29a5820aa0..48506b066b 100644
--- a/ee/maintained-apps/outputs/whatsapp/darwin.json
+++ b/ee/maintained-apps/outputs/whatsapp/darwin.json
@@ -1,10 +1,10 @@
{
"versions": [
{
- "version": "26.25.12",
+ "version": "26.25.15",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'net.whatsapp.WhatsApp';",
- "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'net.whatsapp.WhatsApp' AND version_compare(bundle_short_version, '26.25.12') < 0);"
+ "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'net.whatsapp.WhatsApp' AND version_compare(bundle_short_version, '26.25.15') < 0);"
},
"installer_url": "https://web.whatsapp.com/desktop/mac_native/release/?configuration=Release&src=whatsapp_downloads_page",
"install_script_ref": "157dabb3",