Adom Bridge
Public Made by Adomby adom
Adom Bridge unleashes your AI onto your full PC: full power, full safety. The AI breaks out of the container it runs in and onto your real machine, managing and running your entire laptop as you: launch apps, move files, drive any window, control KiCad, Fusion 360 or your real signed-in browser. Works with any AI, cloud or local (Claude Desktop, Claude Code, Codex), no Hydrogen required. Bridge and its bridges are an operating system for AI, with managed Node and Python runtimes, and a human-onl
clear_app_toasts() cross-sweeps both permission systems' toasts (shell grant clears a live web-control consent toast)
clear_app_toasts() cross-sweeps BOTH permission systems' toasts
Found while proof-testing the two approval surfaces on 2.0.48 (AdomLapper).
notifications::clear_app_toasts() calls History.Clear(APP_ID) — it removes EVERY ab toast (all share the inc.adom.bridge AUMID + group adom). It is called on a shell-auto-approve GRANT (so the pile of pending shell-approval toasts vanishes the instant the user grants — correct intent, v1.9.80/1.9.102). But it also clears a LIVE web-control consent toast that is still waiting on the human, because both toast families share the AUMID+group.
Repro: (1) a web page triggers a web-control consent (its toast is on screen, waiting), (2) meanwhile the user (or a local caller) grants shell auto-approve, (3) clear_app_toasts fires and the web-control consent toast disappears while its in-window dialog + its 120s POST are still pending. The user loses the toast surface for a decision they never made.
It is the same failure the other direction too: resolve_web_approval also calls clear_app_toasts() to sweep the (single) web consent toast, which would clear any live SHELL approval toasts.
Severity: low-to-moderate. The in-window dialog survives (the reliable surface), so no decision is lost, but the toast — which is the surface a hidden/embedded ab relies on — vanishes for the OTHER system's pending prompt.
Proposed fix: scope the sweep by TAG, not by AUMID. Shell approval toasts already tag by approval_toast_tag(id) / the shared shell-approval tag; the web consent toast has its own tag. dismiss_toast_by_tag already exists and escapes safely. So:
- On a shell grant, sweep only the shell-approval-tagged toasts (drain
state.pending_approvals-> dismiss each by its tag, plus the genericshell-approvaltag). - On a web decision, sweep only that origin's web consent tag.
- Keep a full
History.Clearonly for an explicit "clear all ab toasts" action, if one is even needed.
This keeps each permission system's toast lifecycle independent.