← Commit history

1.9.186: menu-bar agent + one-line install script + README rewrite (Bridge branding, notarized)

Kyle Bergstedt ·8eae32139a ·3mo ago ·parent 109995f
3 files changed +132−27
README.md+34−16
@@ -1,26 +1,44 @@-# Adom Desktop (macOS)+# Adom Bridge (macOS) -The Adom Desktop companion app for **macOS** (Apple Silicon). This is the macOS port-of [Adom Desktop](/adom/adom-desktop) (the Windows release).+Bridge for **macOS** (Apple Silicon). Bridge is the daemon that connects AI tools+to your Mac: it runs quietly in the menu bar (no Dock icon), starts at login, and+serves AI callers over the Adom relay and the local API. -Installed automatically by [Adom Hydrogen (macOS)](/adom/adom-hydrogen-macos)-during its setup cascade — Hydrogen downloads the dmg advertised in this page's-`version.json` and copies the app into /Applications.+Every build is Developer ID-signed, hardened-runtime, and **notarized by Apple**. -## Manual install+## Install (one line) -Download the latest dmg from this page's releases and drag Adom Desktop into-Applications. The current build (v1.9.156) is Developer ID-signed with hardened-runtime but **not yet notarized** — on first launch, right-click the app and-choose **Open** to pass Gatekeeper. After that it auto-updates silently-(mount → bundle swap → relaunch) from this page's `version.json`.+```sh+curl -fsSL https://wiki.adom.inc/api/v1/pages/adom-bridge-macos/files/install.sh | sh+``` -## What works on macOS (v1.9.156 parity port)+The script downloads the latest dmg from this page, verifies its SHA-256 against+`version.json`, installs the app into /Applications, and launches it. Safe to+re-run: it upgrades in place. Prefer a manual install? Download the dmg from this+page's releases and drag the app into Applications. -Core-app parity with the Windows release: window enumeration + per-window+Bridge is also installed automatically by+[Adom Hydrogen (macOS)](/adom/adom-hydrogen-macos) during its setup cascade;+nothing to do in that case.++## How it behaves++- **Menu-bar agent.** After sign-in, launches go straight to the menu bar: no+  window, no Dock icon. Click the menu-bar icon (or launch the app again) to open+  the window for settings and approvals.+- **First run** opens a sign-in window. Signing in to any Adom app on this Mac+  signs in Bridge too: the session lives in a shared keychain item, and it+  survives uninstall/reinstall.+- **Starts at login** (LaunchAgent, on by default; toggle in Settings).+- **Auto-updates** silently from this page's `version.json` (mount, bundle swap,+  relaunch).++## What works on macOS++Core parity with the Windows release: window enumeration and per-window screenshots (CGWindowList + `screencapture`), full synthetic desktop input-(CGEvent), process list/kill, Adom-branded notifications-(UNUserNotificationCenter), LaunchAgent autostart, and the mac CLI companion at+(CGEvent), process list/kill, native notifications (UNUserNotificationCenter),+LaunchAgent autostart, and the mac CLI companion at `Adom Desktop.app/Contents/Resources/adom-desktop-cli`. Windows-inherent verbs (WSL, registry, RDP/mstsc, Hydrogen build, UIA background input, WGC recording) return a clean "Windows-only" error by design.
install.sh+91−4
@@ -1,4 +1,91 @@-#!/usr/bin/env bash-# This page distributes a macOS .app via its releases (version.json + dmg), not a-# workspace binary. Adom Hydrogen's setup installs the app on the host Mac.-echo "adom-desktop-macos: no workspace payload — the dmg ships via this page's releases."+#!/bin/sh+# Adom Bridge — macOS installer.+#+#   curl -fsSL https://wiki.adom.inc/api/v1/pages/adom-bridge-macos/files/install.sh | sh+#+# Downloads the latest signed + notarized Bridge dmg from the wiki release+# channel, verifies its SHA-256 against the published manifest, installs the+# .app, and launches it. Bridge registers its own launch-at-login agent on+# first run and lives in the menu bar. Safe to re-run: upgrades in place.+#+# No sudo needed on a standard admin account (/Applications is admin-writable);+# falls back to ~/Applications otherwise.++set -eu++MANIFEST_URL="https://wiki.adom.inc/api/v1/pages/adom-bridge-macos/files/version.json"+APP_NAME="Adom Desktop.app"++say()  { printf '%s\n' "$*"; }+fail() { printf 'bridge-install: ERROR: %s\n' "$*" >&2; exit 1; }++[ "$(uname -s)" = "Darwin" ] || fail "this installer is macOS-only"+[ "$(uname -m)" = "arm64" ] || fail "this build is Apple Silicon (arm64) only"++say "Fetching release manifest..."+MANIFEST=$(curl -fsSL -A adom-bridge-install "$MANIFEST_URL") || fail "could not fetch $MANIFEST_URL"++json_field() {+    printf '%s' "$MANIFEST" | sed -n "s/.*\"$1\"[[:space:]]*:[[:space:]]*\"\([^\"]*\)\".*/\1/p" | head -1+}++VERSION=$(json_field version)+URL=$(json_field installer_url)+SHA=$(json_field installer_sha256)+[ -n "$VERSION" ] && [ -n "$URL" ] && [ -n "$SHA" ] || fail "manifest missing version/installer_url/installer_sha256"++say "Latest version: $VERSION"++TMP=$(mktemp -d /tmp/bridge-install.XXXXXX)+trap 'rm -rf "$TMP"' EXIT+DMG="$TMP/bridge.dmg"++say "Downloading $URL"+curl -fSL -A adom-bridge-install -o "$DMG" "$URL" || fail "download failed"++GOT=$(shasum -a 256 "$DMG" | cut -d' ' -f1)+[ "$GOT" = "$SHA" ] || fail "SHA-256 mismatch (expected $SHA, got $GOT) — aborting"+say "SHA-256 verified."++MNT=$(hdiutil attach "$DMG" -nobrowse -readonly | sed -n 's/.*\(\/Volumes\/.*\)$/\1/p' | head -1)+[ -n "$MNT" ] || fail "could not mount dmg"+trap 'hdiutil detach "$MNT" -quiet 2>/dev/null; rm -rf "$TMP"' EXIT++[ -d "$MNT/$APP_NAME" ] || fail "dmg does not contain $APP_NAME"++DEST="/Applications"+if [ ! -w "$DEST" ]; then+    DEST="$HOME/Applications"+    mkdir -p "$DEST"+    say "/Applications not writable — installing to $DEST"+fi++# If Bridge is running, quit it so the bundle swap is clean; it relaunches below.+if pgrep -f "$APP_NAME/Contents/MacOS" >/dev/null 2>&1; then+    say "Quitting the running Bridge for the upgrade..."+    osascript -e 'tell application "Adom Desktop" to quit' >/dev/null 2>&1 || true+    sleep 2+    pkill -f "$APP_NAME/Contents/MacOS" 2>/dev/null || true+    sleep 1+fi++say "Installing to $DEST/$APP_NAME"+rm -rf "$DEST/$APP_NAME"+cp -R "$MNT/$APP_NAME" "$DEST/"++hdiutil detach "$MNT" -quiet 2>/dev/null || true+trap 'rm -rf "$TMP"' EXIT++# Gatekeeper assessment of what we just installed (notarized builds pass).+if ! spctl -a -vv "$DEST/$APP_NAME" >/dev/null 2>&1; then+    say "warning: Gatekeeper did not accept the app (unexpected for a notarized build)"+fi++say "Launching Bridge $VERSION..."+open "$DEST/$APP_NAME"++say ""+say "Done. Bridge $VERSION is installed and running."+say "It lives in the menu bar (no Dock icon) and starts at login."+say "First run opens a sign-in window; once signed in, Bridge runs quietly"+say "from the menu bar (click the menu-bar icon to open it again)."
version.json+7−7
@@ -1,13 +1,13 @@ {   "manifest_version": 1,-  "version": "1.9.185",-  "released_at": "2026-08-10T18:20:00Z",+  "version": "1.9.186",+  "released_at": "2026-08-10T18:35:00Z",   "macos": {-    "installer_url": "https://wiki.adom.inc/download/adom/adom-bridge-macos/1.9.185/Adom.Desktop_1.9.185_macos_aarch64.dmg",-    "installer_filename": "Adom.Desktop_1.9.185_macos_aarch64.dmg",-    "installer_sha256": "8fe9afdc049cbcc9868df7490fadaee33b3c67ea7af4a3e8903e07582f832e7b",-    "installer_size": 12753154,+    "installer_url": "https://wiki.adom.inc/download/adom/adom-bridge-macos/1.9.186/Adom.Bridge_1.9.186_macos_aarch64.dmg",+    "installer_filename": "Adom.Bridge_1.9.186_macos_aarch64.dmg",+    "installer_sha256": "4764f88e8569dca2af1947f6754aac320b0ef83e68279cc1c94a94f386f3d3e8",+    "installer_size": 12750515,     "arch": "aarch64"   },-  "changelog": "macOS 1.9.185: shared Adom session across apps. Bridge now stores the session token in a shared Data-Protection keychain item (with Adom Hydrogen), so one sign-in serves both apps and the session survives uninstall/reinstall. Sign-out deletes the shared item everywhere, including any iCloud-synced copy. The app bundle now carries keychain entitlements plus an embedded Developer ID provisioning profile. Notarized + stapled."+  "changelog": "macOS 1.9.186: Bridge is now a menu-bar agent. Signed-in launches go straight to the menu bar (no window, no Dock icon); click the menu-bar icon or relaunch the app to open the window for settings and approvals. First run still opens the sign-in window. One-line install: curl -fsSL https://wiki.adom.inc/api/v1/pages/adom-bridge-macos/files/install.sh | sh. Notarized + stapled." }