← Commit history

Publish 0.3.17

John Lauer ·7a784001ee ·4mo ago ·parent a3df295
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]"+  }+}\ No newline at end of file
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…)