← Commit history
Publish 0.3.17
3 files changed
+107−7
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-browser-extension",- "version": "0.3.16",+ "version": "0.3.17", "type": "app", "title": "Adom Native Browser Extension (Chrome + Edge)", "description": "Drive your real, logged-in Chrome/Edge from the Adom ecosystem: the nbrowser_* native-browser bridge (counterpart to pup). Multi-profile driving, a read-only credential-library query over the browser's own saved logins (Chrome + Edge), and hands-free vendor login automation, so chip CAD / datasheets download past every login wall in your real signed-in session.",
page.json+68−6@@ -9,11 +9,11 @@ "chrome", "edge", "nbrowser",- "ai-agent",- "developer-tools",- "vibe-coding",+ "pup", "native-messaging",- "adom-desktop"+ "adom-desktop",+ "credentials",+ "chip-fetcher" ], "status": "live", "discovery_triggers": [@@ -57,5 +57,67 @@ }, "visibility": "public", "brief": "Your AI's hands in your real, signed-in Chrome & Edge: build, drive, and test web apps, and log past vendor walls, in the browser you already use. The nbrowser_* native-browser bridge (pup's counterpart) - runs in your actual logged-in profile, so cookies/SSO/saved-logins/captcha all work.",- "discovery_pitch": "The native-browser extension drives the user's REAL signed-in Chrome/Edge via nbrowser_* verbs: use it for LOGGING IN, filling forms, and downloading behind auth with their OWN saved passwords - pup cannot (it is a fresh Chrome-for-Testing with no logins). Next moves: run 'adom-desktop bridge_list' to check it is installed; if not, OFFER to install it (see the installing-the-extension skill) - never make the user do it. If this container lacks the skills, 'adom-wiki pkg install adom/adom-browser-extension'. Check readiness with 'adom-desktop nbrowser_readiness' (state:needs-extension means offer the install)."-}+ "discovery_pitch": "The native-browser extension drives the user's REAL signed-in Chrome/Edge via nbrowser_* verbs: use it for LOGGING IN, filling forms, and downloading behind auth with their OWN saved passwords - pup cannot (it is a fresh Chrome-for-Testing with no logins). Next moves: run 'adom-desktop bridge_list' to check it is installed; if not, OFFER to install it (see the installing-the-extension skill) - never make the user do it. If this container lacks the skills, 'adom-wiki pkg install adom/adom-browser-extension'. Check readiness with 'adom-desktop nbrowser_readiness' (state:needs-extension means offer the install).",+ "version": "0.3.17",+ "type": "app",+ "description": "Drive your real, logged-in Chrome/Edge from the Adom ecosystem: the nbrowser_* native-browser bridge (counterpart to pup). Multi-profile driving, a read-only credential-library query over the browser's own saved logins (Chrome + Edge), and hands-free vendor login automation, so chip CAD / datasheets download past every login wall in your real signed-in session.",+ "install": {+ "binary_name": "adom-browser-extension"+ },+ "files": [+ "install.sh",+ "uninstall.sh",+ "package.json",+ "page.json",+ "README.md",+ "docs/INSTALL-FLOW.md",+ "skills/adom-browser-extension/SKILL.md",+ "skills/publishing-the-bridge/SKILL.md",+ "skills/developing-the-bridge/SKILL.md",+ "skills/cross-platform-dev/SKILL.md",+ "skills/driving-the-extension/SKILL.md",+ "skills/native-browser-safety/SKILL.md",+ "skills/installing-the-extension/SKILL.md",+ "skills/uninstalling-the-extension/SKILL.md",+ "skills/native-browser-recording/SKILL.md",+ "skills/driving-the-extension-demo/SKILL.md",+ "skills/driving-the-desktop/SKILL.md",+ "demo/adom-native-browser-demo.mp4",+ "host/native-host.js",+ "bridge/server.js",+ "skills/driving-sites/SKILL.md",+ "skills/driving-gusto/SKILL.md",+ "skills/reading-google-messages/SKILL.md",+ "screenshots/hero-v5.png",+ "PRIVACY.md",+ "privacy.html",+ "screenshots/usecase-oscilloscope.png",+ "screenshots/usecase-chipfetcher.png",+ "screenshots/usecase-symbol.png",+ "screenshots/usecase-eda.png",+ "screenshots/usecase-board.png",+ "screenshots/usecase-chipsmith.png",+ "screenshots/hero.png",+ "docs/UNINSTALL-FLOW.md",+ "screenshots/extensions-adom-card.png",+ "screenshots/install-folder-picker.png",+ "screenshots/uninstall-confirm-bubble.png",+ "screenshots/hero-v7.png"+ ],+ "scripts": {+ "install": "./install.sh",+ "uninstall": "./uninstall.sh"+ },+ "dependencies": {+ "adom/adom-desktop": "^1.9.47"+ },+ "confirmed_user_skills": [+ "developing-the-bridge",+ "publishing-the-bridge"+ ],+ "org": "adom",+ "author": {+ "name": "John Lauer",+ "email": "[email protected]"+ }+}
skills/driving-the-extension/SKILL.md+38@@ -94,6 +94,44 @@ read/navigate, prefer native verbs and the bar never shows. `{browser, profile, host, username}` rows across **Chrome AND Edge**, all profiles - i.e. which vendors the user can auto-login to. Never passwords (the browser autofills those). The extension can't read this (sandbox); the bridge reads each browser's `Login Data` SQLite natively.+- **reliable automation:** `wait_for`, `keepalive`, robust `click` (returns `changed`), `set_date`,+ `download_wait`, `totp`/`register_totp` (2FA), `add_extension_origin` - see **Reliable automation** below.++## Reliable automation (waits, click-verify, 2FA, downloads, dates)+The primitives that make an unattended multi-vendor pull (Gusto/QuickBooks/Carta) actually hold up.+Prefer these over fixed sleeps + coordinate guessing.++- **Deterministic waits, not sleeps.** After a click/nav, `nbrowser_wait_for {sessionId, selector |+ urlIncludes | textIncludes, timeoutMs?}` blocks until the thing you're waiting for exists, then+ returns `{matched, by, url, waitedMs}`. `matched:false, timedOut:true` = it never appeared -+ screenshot to see why. Never race a fixed `nbrowser_wait {ms}` against a page load.+- **Click, then verify it landed.** `nbrowser_click` now scrolls the target into view and returns+ **`changed`** (did the URL/DOM actually change) + `urlBefore`/`urlAfter`. `changed:false` means the+ click dispatched but nothing happened (disabled/covered element, missed target) - re-resolve the+ selector or retry; don't assume a click worked.+- **Stay signed in.** `nbrowser_keepalive {sessionId, intervalSec?}` replays a benign mousemove/focus on+ an interval (default 4 min) to beat vendor idle sign-outs (Gusto/Intuit ~10-15 min). Set it at the+ START of a long automation; it auto-stops when the window closes; `{stop:true}` to cancel. (Client+ activity only - a vendor that expires the SERVER session regardless may still need periodic real actions.)+- **2FA / TOTP - the unattended-automation unblock.** One-time: `nbrowser_register_totp {host, seed}`+ with the vendor's base32 "manual entry / setup key" (shown by the 2FA QR). It's stored `0600` on the+ laptop and **NEVER returned**. Then, when a 2FA prompt appears, focus the code field (or pass+ `selector`) and `nbrowser_totp {host, submit?}` - the **bridge** computes the RFC-6238 code and the+ extension **types it**; the agent never sees the seed or the code. `errorCode:"no_totp_seed"` = register+ it first. Codes rotate every 30 s, so call it right when you need it.+- **Downloads by event, not by polling.** After you trigger an export, `nbrowser_download_wait+ {sessionId, timeoutMs?, sinceMs?}` returns the landed `files[]` via chrome.downloads events (no+ timestamp-guessing the Downloads folder). Pass `saveToSubfolder:"<name>"` to route subsequent+ downloads into a subfolder of Downloads.+- **Segmented date fields.** Finance apps use react-aria spinbutton date fields (month/day/year).+ `nbrowser_set_date {selector, date:"YYYY-MM-DD", order?}` focuses the field and types each digit as a+ real keydown so the segments advance. US MDY by default; pass `order:"DMY"` for day-first. Check+ `fieldValue` in the response.+- **Edge different-ID lockout.** If the extension is loaded in Edge but never shows in+ `nbrowser_profiles`, its loaded-unpacked ID may differ from the one in the native-host manifest's+ `allowed_origins`. Copy the ID off `edge://extensions` and `nbrowser_add_extension_origin {id}`, then+ **reload the extension** so the browser re-reads it. (Our manifest pins a `key`, so IDs should match -+ use this only if Edge diverged.) ## Logging into vendors (the key to fetching electronics data) Every EE vendor (DigiKey, Mouser, SnapMagic, UltraLibrarian, ComponentSearchEngine, TI, NXP, Arrow…)