app
Pup - Puppeteer Bridge
Public Made by Adomby adom
pup is the AI's own browser: a real, full Chrome on the user's desktop that the AI fully controls (a sandbox, not the user's signed-in browser). Rides Bridge; pup_* verbs open windows and tabs, navigate, screenshot, and eval JS.
Set hero: hero-v9.png
John Lauer
·
8ced76e
·
2d ago
Add hero-v9.png: the new human-approved Pup billboard from hero-studio
John Lauer
·
70c940f
·
2d ago
Whitelist hero-v9.png so the new Pup billboard can live in the page repo
John Lauer
·
6a7ed90
·
2d ago
v1.9.350: fix missing taskbar favicon overlay on the shared adom-you profile. The ownership guard (hwndBelongsToPup) refused every badge because the shared Chrome process pid was absent from the tracked pid set; now a pup window's unique ai-thread title tag confirms ownership and learns the owner pid onto the browser entry so sibling windows self-heal, while Edge and non-pup buttons stay protected.
John Lauer
·
b4d343e
·
2d ago
Overlay badge refinement (John): drop the teal border (it wasted space and shrank the favicon). The favicon now sits on a full-bleed dark card the tone of the Windows taskbar (#202124), inset only 2px so it stays as large as possible (44/48) with a thin visible dark margin. Transparent favicons still get a clean backdrop; no border eating pixels.
John Lauer
·
1884978
·
3d ago
Taskbar icons (John): remove the notch from the base tile — it is a FULL solid icon again — and move the 'background' onto the OVERLAY badge where it belongs. The overlay favicon now sits on a solid dark, teal-edged rounded card (composited behind it at 48px), so transparent site favicons no longer look bad painted onto the tile; every badge reads as one clean unit. PUP_ICON_GEN i6->i7 so Windows recreates the buttons with the un-notched tile.
John Lauer
·
1b24407
·
3d ago
rename: adom hydrogen + hydrogen-* naming
Kyle Bergstedt
·
5d9e081
·
3d ago
rename: adom hydrogen + hydrogen-* naming
Kyle Bergstedt
·
1310bd6
·
3d ago
rename: adom hydrogen + hydrogen-* naming
Kyle Bergstedt
·
8e8f09f
·
3d ago
rename: adom hydrogen + hydrogen-* naming
Kyle Bergstedt
·
7fa70f7
·
3d ago
rename: adom hydrogen + hydrogen-* naming
Kyle Bergstedt
·
d2aa40b
·
3d ago
rename: adom hydrogen + hydrogen-* naming
Kyle Bergstedt
·
9f4e445
·
3d ago
Add pup-cdp-discipline + pup-differential-diagnosis maintainer dev-skills (CDP event-flood handling rules + prove-it-against-nb technique)
John Lauer
·
13d77fe
·
3d ago
Fix bridge instability on heavy pages (John: a heavy page should never crash the bridge; CDP mishandling). neutralizeDebugger kept Debugger.enable on for every tab's whole life, which streams a Debugger.scriptParsed event for every script the page parses — thousands on a heavy Babylon.js bundle — flooding the bridge's single event loop and de-opting V8; under concurrent heavy-page opens the loop starved and AD couldn't reach the bridge (error sending request). Now it disables Debugger right after clearing any inherited pause and detaches the session: freeze immunity kept (a page debugger; is a no-op with no client holding the domain), flood + de-opt + per-tab session leak gone.
John Lauer
·
02225bc
·
3d ago
Steer all pup windows to the shared adom-you profile (John): a thread passing its own named profile (nameplates, np-verify, nsf-draft) fragmented the doppelganger identity — separate login jar, no shared adom-you logins, no adom-you frame color. Now, outside genuine throwaway isolation (isolated:true / webSecurity:false / wikiView:public), any custom profile name is overridden to adom-you and the override is surfaced as _profileSteered in the response. A named {profile} no longer creates a separate durable jar; use isolated:true for a private throwaway.
John Lauer
·
d97837a
·
3d ago
Pup window frame color changed from bright teal (20,184,184) to the Adom near-black ground #0d1117 (13,17,23) per John: the teal was 'a bit ugly', wanted something closer to black but on-brand that still color-codes pup/adom-you windows as distinct from the user's real Chrome profiles. Applied via --install-autogenerated-theme on the adom-you (DEFAULT_PROFILE) launch.
John Lauer
·
fe869a2
·
3d ago
Fix owner-chip toggle timeout: applyOwnerChipSetting awaited page.evaluate on every tab with no bound, so one slow/wedged page (a heavy 3D-viewer tab) hung the whole sweep and browser_set_identity/ownerChip toggles timed out. Each per-page evaluate is now raced against a 1.5s timeout, and browser_set_identity fires the repaint non-blocking, so toggling the chip on/off never hangs on a busy window.
John Lauer
·
f17b3c9
·
3d ago
Show the user's Adom identity in the floating owner chip: since Chrome's own profile chip cannot take a custom local image (Google sign-in only), the owner chip now leads with the user's Adom avatar + name. New verb browser_set_identity {avatarB64,name,enabled,clear} stores the identity in pup-settings and repaints live windows. Owner-chip injection (attachTab) and the live-apply path both render the round avatar; falls back to the hexagon glyph when no identity is set.
John Lauer
·
770fbf9
·
3d ago
Fix multi-monitor park overflow: a freshly opened pup window is launched off-screen then parked by reading screen.availWidth/Height, which reflects whichever monitor the window momentarily sits on. On a multi-monitor setup that could size the window for a LARGER monitor while it lands on the smaller primary, overflowing off the bottom-right so page content past the fold was unreachable until the slow 120s placement sweep re-parked it. placeOnScreen now settles then re-reads the destination monitor's work area and re-clamps immediately if it differs, so a window is never left bigger than the screen it is actually on.
John Lauer
·
2ed43c1
·
3d ago
Fix debugger-pause freeze: every pup tab now skips ALL debugger pauses (Debugger.setSkipAllPauses+resume) so a page's 'debugger;' statement or a stray breakpoint can never freeze the window and its 3D viewer (John's wiki viewer locked up behind a 'Debugger paused in another tab' banner). Fix overlay-paint spam: dedup desktop_taskbar — only paint when the composed icon+tooltip+target actually changed since the last paint, instead of re-sending identical overlays every few seconds and flooding AD's activity log. Enforcer now treats a genuinely no-favicon page's generic glyph as final after 3 upgrade attempts (retried on navigation) rather than re-composing it every 10s forever.
John Lauer
·
234bfff
·
4d ago
adom-you visual identity: name the shared profile 'Adom' and tint every adom-you window frame+toolbar Adom-teal via --install-autogenerated-theme (always-visible, no sign-in, no nag). Removed the gaia-picture avatar spoof, which rendered a generic gray chip AND a permanent 'Action required' nag on local profiles.
John Lauer
·
16f4036
·
4d ago
No more generic-globe flash: applyAppOverlay caches the last REAL favicon per session (keyed by URL) and reuses it instead of downgrading to the generic globe when a same-page repaint can't re-fetch the favicon (the post-re-stamp case). Gated on unchanged URL so a real navigation to a truly faviconless page still falls through to the generic glyph. Runtime-only, no icon-gen bump / no re-stamp.
John Lauer
·
1a0575c
·
4d ago
Generic-overlay recovery cooldown 90s->10s: after an icon-gen re-stamp recreates buttons, overlays fall to the generic globe momentarily; the enforcer now re-fetches the real favicon within ~10s instead of leaving every window on the ugly generic globe for 90s+. No icon-gen bump (no re-stamp).
John Lauer
·
fb372cb
·
4d ago
Remove the baked Adom-mark from the notch (John: it sabotages the clean-background purpose and bleeds through the transparent overlay favicon). The notch is now a clean EMPTY transparent cutout so the taskbar shows through behind the overlay; overlay presence is guaranteed by the 4s enforcer + event triggers, so no fallback mark is needed. Bumped icon gen i5->i6 to regenerate mark-free tiles + re-stamp.
John Lauer
·
0981743
·
4d ago
Force ai-thread name as the session owner (John: 'sick of seeing sessionid, force ai-thread now'). browser_open_window now resolves the owner from the calling ai-thread (X-Adom-Caller-Thread header / args.caller.aiThread / args.aiThread); the sessionId is NEVER an identity fallback anymore (removed the auto-<sessionId> stopgap). An open with neither an ai-thread nor an explicit owner is REFUSED with caller_identity_required + the --ai-thread remedy. owner=ai-thread, and ownerSource now correctly reports caller-identity. SKILL.md updated: ai-thread is the owner, owner: arg is a legacy alias, sessionId is just the window key.
John Lauer
·
76a1896
·
4d ago
Batch-fix 8 open wiki issues. #434: shared-Chrome kill now checks live sessions+in-flight verbs on the profile (not the drift-prone refCount) so it can't kill Chrome out from under a live session. #437: wait-for-focus caption backs off (max 3 shows then silent), gated on fgCaption + honors fgCaptionMs (no more permanent nag). #435: add --disable-session-crashed-bubble/--hide-crash-restore-bubble so a crashed shared Chrome never restores dead-session tabs into the wrong window. #425: findTabForTarget resolves iframe/OOPIF-originated target=_blank popups by opener-frame URL (unique match) so they adopt as tabs. #338: sessions are never unowned (synthesize a stable auto-<sessionId> owner) closing the no-caller-identity ownership hole. #293: raceCrash trims the last 20s hang when an in-flight screenshot/eval races a renderer crash (detection+fast-fail already existed). #350: adCommand caller shorthand + sessionCaller forwards reason (chokepoint already forwards X-Adom-Caller-* + Delegate:pup). #280: self-install now sets PUPPETEER_SKIP_DOWNLOAD so it never hangs on the failing CfT fetch (self-heal already existed).
John Lauer
·
e70ad65
·
4d ago
Fix wiki #468 (Drew: pup 100% unusable, 'never bound its port'). ROOT CAUSE: the heavy native requires (puppeteer, keytar via credential_vault, sharp, and chrome.js which itself requires puppeteer) ran synchronously at module load, blocking the event loop ~8s before the HTTP port could bind — long after AD's recover_not_listening reaps a not-yet-bound bridge (~2-3.6s). FIX: defer all four out of the sync module-load path into ensureHeavyInit(), which runs in the listen callback AFTER the port binds (recover_not_listening is a TCP listen check, so the post-bind load is safe) plus lazily on the first non-/health request. /health needs no heavy module (chrome.readiness guarded). Port now binds in <1s.
John Lauer
·
f07bd87
·
5d ago
Notch margin symmetry (John: 2px cutout on the left of the overlay but only 1px below - unprofessional). The inner (bottom-left) corner radius curved the notch inward where the favicon's bottom-left sits, eating the bottom margin while the straight left edge kept its full margin. Dropped the inner-corner radius to near-sharp (rx 11% -> 2%) so both the left and bottom cutouts are uniform straight edges = even margin around the overlay. Bumped PUP_ICON_GEN i4->i5 so live buttons re-stamp with the new geometry.
John Lauer
·
3581702
·
5d ago
Fix: the 'Switch to logged-in view' jump-list task did nothing. browser_wiki_set_view short-circuited with unchanged:true (only bringToFront) whenever pup BELIEVED the window was already in the requested view — but the task promises a harmless reload and pup's view belief is unreliable (default-authed may not have actually signed in; cookies expire). Now a real USER click (caller aiThread user-taskbar-menu) ALWAYS re-asserts the view via the mint/navigate path (a genuine reload that guarantees signed-in), instead of skipping. Programmatic same-view calls still short-circuit.
John Lauer
·
7b5287a
·
5d ago
No redundant Adom mark on the overlay when AUMID is ON (John: the teal category tile is already the 'Adom controlled' indicator). The favicon overlay now carries the Adom mark ONLY when aumidIcons is off (plain Chrome base needs the branding); when AUMID is on the overlay is the clean site favicon alone. Cache key now includes AUMID state so the badge recomposes on toggle.
John Lauer
·
4cc722d
·
5d ago
Fix: notch never appeared on the LIVE taskbar button. The icon FILES changed (added the notch) but PUP_ICON_GEN was not bumped, so the AUMID appId stayed the same and Windows kept the un-notched button it baked at creation (it never re-reads an icon for an unchanged appId; only a new appId forces a fresh button). Bumped i3->i4 so every window re-stamps with the notched tile. Also: notchedIconPath now serves the cached notched icon as soon as it exists on disk (not only after this run's build), so a respawn re-stamps notched immediately instead of flashing the un-notched tile.
John Lauer
·
20cd8ff
·
5d ago
Overlay GUARANTEE hardening + graceful notch (John: bare window = broken-looking empty notch; overlays must always be present). ROOT CAUSE of missing overlays: applyAppOverlay REFUSES to paint when it can't confirm the window's hwnd (the Edge-protection guard), and your AD rebuilds constantly respawn+re-adopt windows, forcing hwnd re-resolution and transient bareness. Fixes: (1) baked a small Adom-mark fallback into the notch so a bare window shows a tidy branded corner, not a hole; (2) enforcer sweeps every 4s (was 10s) with a 4s bare cooldown (was 20s) so a bare window heals in seconds; (3) enforcer no longer SKIPS the overlay paint when a base-tile re-stamp is pending (they're independent now).
John Lauer
·
d74f50a
·
5d ago
Notch shape fix (John: overlay favicons are SQUARE, not circles). The notch was a rounded-rect with a 30%-of-side radius, which rounds all four corners into a circular blob. Overlays are square (favicon fills 48x48 + Adom mark corner), so the notch is now a SQUARE: the mask rect extends past the top and right edges so those corners fall off-canvas and only the inner corner is rounded, giving a clean square opening flush to the tile edges. Cache path bumped (-sq) to regenerate.
John Lauer
·
82b6d0d
·
5d ago
Notched category tiles (John's idea): punch a transparent rounded notch into the UPPER-RIGHT of each pup category .ico so the favicon overlay AD paints there sits on the clean taskbar background instead of the busy teal art. Generated at bridge runtime (sharp, desktop-only) into a cache dir via a minimal PNG-frame ICO encoder (format validated); baked into the static tile so there's NO per-window/per-favicon churn, only a one-time re-stamp. pupIconPath serves the notched copy once built. Notch geometry (50% upper-right) tuned live.
John Lauer
·
4359d4b
·
6d ago
Taskbar favicon overlay fix (John: icons still wrong). ROOT CAUSE: the badge compositor decided ICO-vs-image by the favicon URL ending in .ico, but analyzeIconBytes had already re-encoded it to PNG, so icoLargestPng ran on PNG bytes, returned null, and dropped the favicon -> bare Adom mark (hit Google Docs and any .ico-suffixed favicon). Now sniffs the real magic bytes. SECOND bug: the generic-glyph fallback set src but never populated iconPng (which is the only thing the composite draws), so undecodable favicons also went mark-only; now it renders the glyph into iconPng and marks src.href generic so the LED shows amber, not a lying green.
John Lauer
·
80077ee
·
6d ago
Credential import goes LIVE against AD 1.9.220's desktop_decrypt_browser_credentials. Vault (credential_vault.js) now identity-tagged: keep BOTH on a (host,username) conflict from different source accounts, newest-wins within an identity, getCredentialForUrl picks by preferred identity then most-recently-used; passwords in keytar under per-entry composite accounts, index never holds a password (offline-tested). Dashboard Import button calls the decrypt helper LOCALLY (bridge->AD direct API, never relay), handles consent_declined/elevation_declined/relay_forbidden/helper_missing, merges rows, drops plaintext, returns counts only.
John Lauer
·
e68eb14
·
6d ago
Overlay drift fix: the favicon taskbar badge now recomputes on the NAVIGATION EVENT (framenavigated), not just on explicit mutating verbs. Any nav pup didn't initiate — JS redirect, meta refresh, form submit, SPA route change, OAuth bounce, in-tab link click, browser_login submit — previously left a STALE badge; now every navigation from any source re-triggers the recalc (debounced, honors overlayBadges pref, active/visible tab).
John Lauer
·
5d20955
·
6d ago
Dashboard Settings: 'Import logins from Chrome/Edge' picker (adom-you seed). Reads browser_import_scan, lists every discovered profile with source-account identity tags + saved-login count + ABE lock, checkbox each (default all). Import button reports honest-pending until the AD-core elevated decrypt helper (adom/adom-desktop #51) lands.
John Lauer
·
7cf9de0
·
6d ago
browser_import_scan: read-only discovery verb for the comprehensive credential import — enumerates every Chromium profile (Chrome/Edge/Brave) with source-account identity tag, saved-password count, and ABE status; foundation for the Settings import picker. Actual decryption is AD-core (adom/adom-desktop #51).
John Lauer
·
b54adcb
·
6d ago
Lock the comprehensive all-profiles credential-import spec: import from EVERY Chromium profile across Chrome+Edge+Brave via ONE admin/SYSTEM helper (one ABE key per browser, one Login Data per profile), merge into an identity-tagged adom-you vault keeping both on conflict, passwords+bookmarks+autofill, first-run + all-profile settings picker; SYSTEM decrypt helper is AD-core
John Lauer
·
ec3148e
·
7d ago
Make GROUPED mode actually group by category (John: 'i like that you just group to each category icon'): with icon-style category, windows of the same category share one AUMID (Adom.Pup.<cat>) so you get up to 5 category buttons each wearing its category icon; standard style still collapses to one Adom Pup button. Previously grouped lumped every window under one button regardless. Updated the setting copy
John Lauer
·
7c11c5e
·
7d ago
Fix jump lists not clearing when toggled OFF (John: 'i turned off jump lists but still see them'): turning jumpLists off now commits an EMPTY task list to every window (removing the menu tasks); toggling jumpLists on or the sub-prefs forces a re-commit so changes show live. Wired jumpLists/jlViewTasks/jlCloseAll to refreshAllJumplists()
John Lauer
·
efb8844
·
7d ago
Correct the jump-list setting copy: remove the stale 'Windows 11 bug keeps tasks off the menu' claim (tasks appear now); note it requires AUMID on and the honest first-click-blip / right-click-again quirk
John Lauer
·
f2daff4
·
7d ago
Replace the fake jump-list settings screenshots with REAL ones: captured the actual Windows jump-list flyout (double right-click for the blip) showing the live tasks, and cropped it into jumplist.png (full menu), jlviewtasks.png (the two Switch-to-view rows), jlcloseall.png (the Close ALL task). The AUMID/grouping/icon-style screenshots are untouched
John Lauer
·
5471f74
·
7d ago
Add pup-jumplist dev skill documenting the first-right-click blip John has reported ~10 times: a CommitList rebuilding the shown flyout, the 2nd-click workaround, and the fix (dedup on task-set, kill redundant re-commits)
John Lauer
·
0a7a2a4
·
7d ago
Reduce the jump-list first-right-click blip: stop forcing a redundant CommitList ~1.6s after every stamp (jump lists live on the AUMID and were already committed at stamp time; the re-commit only gave the shell another chance to dismiss a just-opened flyout). Dedup-respecting now. Residual ~200-300ms blip is a shell/AD race (documented in dev-skills/pup-jumplist)
John Lauer
·
05ccc24
·
7d ago
Dashboard shows wiki login state per wiki window (John: 'why doesn't the dashboard say if i'm logged in to the wiki'): each pup window on an Adom wiki URL now gets a 'wiki: signed in' (green) or 'wiki: public' (warn) badge, from the _wikiAuthed state pup already tracks
John Lauer
·
0a403b5
·
7d ago
Add permanent dev skills for the recurring issues John keeps repeating: pup-window-targeting (target windows by hwnd never title; the wiggle is dead), pup-icon-consistency (why the dashboard keeps mismatching the taskbar and the rules), and the presence-gated screen-takeover protocol (notify if he is at the laptop, work non-stop if away, never a consent gate)
John Lauer
·
b252e47
·
7d ago
Wiki pages open LOGGED IN by default (John's request): for an Adom wiki URL with no wikiView, default to authed (auto-signs from the desktop token, no prompt); pass noAutoLogin:true (or wikiView:public) for the anonymous/public view. Hint tells the AI it was logged in by default and how to opt out
John Lauer
·
d0d37ee
·
7d ago
Fix jump lists never committing: the registration guard required the appId in _registeredPupAumids, which is only filled by desktop_register_app_identity (a silent no-op on this AD build), so updateWikiJumplist returned before every commit and then dedup-skipped forever. Register best-effort, never block the commit; the window stamp already binds the AUMID and the commit works with hwnd
John Lauer
·
8a7f8db
·
7d ago