← Commit history
readme.htmldeleted−200@@ -1,200 +0,0 @@-<!doctype html>-<!--- Rich sandboxed README for adom-browser-extension.- Served at /readme/john/app/adom-browser-extension inside a SANDBOXED iframe- (CSP: sandbox allow-scripts allow-downloads — opaque origin, no cookies/parent- access). Renders ABOVE the required README.md. Assets are referenced by- ABSOLUTE /blob URLs because the opaque origin can't resolve relative paths.- Auto-resizes by posting {type:"readme-height",height} to the parent (see app.js).-<html lang="en">-<head>-<meta charset="utf-8">-<meta name="viewport" content="width=device-width, initial-scale=1">-<title>Adom Browser Extension — showcase</title>-<link rel="preconnect" href="https://api.fontshare.com">-<link href="https://api.fontshare.com/v2/css?f[]=familjen-grotesk@700,600&f[]=satoshi@400,500,700&display=swap" rel="stylesheet">-<style>- :root{- --bg:#0a0e14; --panel:#0d1117; --panel2:#11161f; --border:#222b38;- --text:#e6edf3; --muted:#9aa6b5; --teal:#00b8b1; --teal-bright:#00e6dc;- --blue:#39b8ff; --purple:#8c6bf7; --green:#34d17e; --yellow:#ffcf4d;- }- *{box-sizing:border-box}- html,body{margin:0;padding:0;background:var(--bg);color:var(--text);- font-family:'Satoshi',system-ui,Segoe UI,Arial,sans-serif;line-height:1.5;- -webkit-font-smoothing:antialiased}- .wrap{max-width:1020px;margin:0 auto;padding:30px 22px 14px}- h1,h2,h3{font-family:'Familjen Grotesk',system-ui,Arial,sans-serif;letter-spacing:-.02em;line-height:1.08}- a{color:var(--teal-bright);text-decoration:none}- .lede{font-size:clamp(26px,4vw,42px);font-weight:700;margin:0 0 12px;- background:linear-gradient(100deg,#00e6dc,#39b8ff 58%,#8c6bf7);- -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}- .sub{color:var(--muted);font-size:16px;max-width:740px;margin:0 0 26px}- .sub b{color:var(--text);font-weight:700}-- .rail{display:flex;align-items:center;gap:10px;margin:44px 0 16px}- .rail h2{font-size:25px;margin:0}- .rail .ln{flex:1;height:1px;background:linear-gradient(90deg,var(--border),transparent)}- .pill{display:inline-block;font-family:'Familjen Grotesk',sans-serif;font-size:11px;font-weight:600;- letter-spacing:.06em;text-transform:uppercase;color:var(--teal-bright);- border:1px solid rgba(0,184,177,.35);background:rgba(0,184,177,.07);border-radius:999px;padding:3px 11px}-- /* use-case cards — full-width Chrome-framed shot + value paragraph */- .ucs{display:flex;flex-direction:column;gap:22px}- .uc{border:1px solid var(--border);border-radius:14px;overflow:hidden;background:var(--panel);- box-shadow:0 18px 50px rgba(0,0,0,.45)}- .uc .shot{display:block;width:100%;height:auto;background:#eceef1;border-bottom:1px solid var(--border)}- .uc .body{padding:18px 22px 20px}- .uc .tag{font-family:'Familjen Grotesk',sans-serif;font-size:11px;font-weight:600;letter-spacing:.06em;- text-transform:uppercase;color:var(--blue);margin:0 0 7px}- .uc h3{font-size:20px;margin:0 0 8px}- .uc p{margin:0;color:var(--muted);font-size:15px}- .uc p b{color:var(--text);font-weight:700}-- /* permission table */- .perm{width:100%;border-collapse:collapse;border:1px solid var(--border);border-radius:12px;overflow:hidden;font-size:14px}- .perm th{background:var(--panel2);color:var(--text);text-align:left;font-family:'Familjen Grotesk',sans-serif;- font-weight:600;font-size:13px;padding:11px 14px;border-bottom:1px solid var(--border)}- .perm td{padding:11px 14px;border-bottom:1px solid var(--border);color:var(--muted);vertical-align:top}- .perm tr:last-child td{border-bottom:none}- .perm code{color:var(--teal-bright);font-family:'Satoshi',ui-monospace,monospace;font-size:13px;white-space:nowrap}- .perm td b{color:var(--text)}- .note{color:var(--muted);font-size:13.5px;margin:14px 2px 0}- .note b{color:var(--text)}-- .chk{display:flex;gap:10px;align-items:flex-start;font-size:14.5px;margin:11px 0;color:var(--text);max-width:820px}- .chk .b{color:var(--green);font-weight:800;flex:0 0 auto}- .chk span b{color:var(--text)}- .chk .m{color:var(--muted)}- .foot{color:var(--muted);font-size:13px;margin:34px 2px 4px;text-align:center}- .foot b{color:var(--text)} .foot code{color:var(--teal)}-</style>-</head>-<body>-<div class="wrap">-- <span class="pill">Chrome & Edge Extension</span>- <div class="lede" style="margin-top:14px">Your AI's hands in your real browser.</div>- <p class="sub">Adom is an <b>AI electronics-prototyping development environment</b>. This extension lets your- AI assistant <b>build, drive, and test web software</b> — web oscilloscopes, EDA & CAD tools, and apps- that drive real circuit boards — right inside the <b>Chrome or Edge you're already signed into</b>. It is the- <b>same category of capability as the Claude browser extension</b>: the AI agent's hands inside your own- browser, acting only on the commands you give it.</p>-- <!-- USE CASES -->- <div class="rail"><h2>What it does for you</h2><span class="ln"></span><span class="pill">in real Chrome</span></div>- <p class="sub" style="margin-bottom:20px">Three real apps from the Adom ecosystem — each shown running- <b>in a Chrome window the extension drives</b> (note the <b>"Adom driving"</b> badge in the toolbar), and- how it helps you get the work done.</p>-- <div class="ucs">-- <div class="uc">- <img class="shot" src="https://wiki.adom.inc/blob/app/adom-browser-extension/screenshots/usecase-oscilloscope.png" alt="A web-based oscilloscope running in a Chrome window driven by the Adom extension">- <div class="body">- <p class="tag">Web-based oscilloscope</p>- <h3>Verify an instrument UI without clicking through every iteration</h3>- <p>You're bringing up a browser-based scope and need to confirm the trigger and timebase behave against- real signals. Instead of clicking through it by hand each pass, your AI assistant drives the live app in- your own Chrome — sets the timebase, drags the trigger to <b>CH1-rising</b>, reads the measurements back,- and screenshots the result. You stay in flow while it verifies the instrument and flags a regression the- moment one appears.</p>- </div>- </div>-- <div class="uc">- <img class="shot" src="https://wiki.adom.inc/blob/app/adom-browser-extension/screenshots/usecase-eda.png" alt="A browser EDA/CAD tool — CAN-bus schematic with 3D / PCB / Schematic tabs — running in a Chrome window driven by the Adom extension">- <div class="body">- <p class="tag">Web-based EDA & CAD</p>- <h3>Try a design change and see it routed — hands-free</h3>- <p>Mid-design, you want to try a change and see it routed. Your AI opens the EDA tool in the browser- you're already signed into, <b>fills the schematic, re-runs the autorouter, and inspects the nets</b> —- turning "try this and tell me what breaks" into something it just does, in the same session where your- part libraries and logins already live.</p>- </div>- </div>-- <div class="uc">- <img class="shot" src="https://wiki.adom.inc/blob/app/adom-browser-extension/screenshots/usecase-board.png" alt="A 3D PCB rendered in a browser CAD viewer running in a Chrome window driven by the Adom extension">- <div class="body">- <p class="tag">Apps that drive real circuit boards</p>- <h3>Hardware-in-the-loop, in your actual browser session</h3>- <p>When a board-control app talks to real hardware, the AI needs your <b>actual</b> browser — your device- session, your USB permissions, your dashboard login. The extension gives it exactly that: it drives the- live page, flashes and operates the board, and reports back — so hardware-in-the-loop testing runs- hands-free instead of you babysitting every flash.</p>- </div>- </div>-- </div>-- <!-- PERMISSIONS -->- <div class="rail"><h2>Every permission, justified</h2><span class="ln"></span><span class="pill">why we ask</span></div>- <p class="sub">A development environment has to operate the browser the way a developer does. Each permission- maps to a concrete action the user asks for — to deliver the features above, never to collect data.</p>- <table class="perm">- <tr><th>Permission</th><th>What the user-requested feature needs it for</th></tr>- <tr><td><code>debugger</code></td><td>Drive, inspect, screenshot, and <b>debug the live page</b> via the DevTools protocol — exactly what building and testing a web app requires. Attached only while a command runs, detached when idle.</td></tr>- <tr><td><code>host: <all_urls></code></td><td>A dev environment must work on <b>whatever app you're building or testing</b> — there is no fixed allow-list for "the whole web." Exercised only per command, never to crawl.</td></tr>- <tr><td><code>cookies</code></td><td>Use your <b>existing signed-in dev tools and services</b> without forcing a re-login. Used to perform your task, never collected.</td></tr>- <tr><td><code>nativeMessaging</code></td><td>The core transport — connects the extension to <b>your local Adom Desktop</b> so your AI session can send commands and receive results.</td></tr>- <tr><td><code>tabs</code> · <code>scripting</code> · <code>webNavigation</code></td><td>Open/switch/reload the tabs you operate, read the DOM and fill fields, and run each command at the right moment (e.g. "navigate, then screenshot").</td></tr>- <tr><td><code>downloads</code></td><td>Save files you ask to download — exports, CAD/3D assets, datasheets — into your own profile.</td></tr>- <tr><td><code>tabCapture</code> · <code>desktopCapture</code></td><td>Record a walkthrough of <b>your own page</b> when you explicitly ask for one.</td></tr>- <tr><td><code>storage</code> · <code>alarms</code></td><td>Remember your session-to-window map and keep the connection alive — minimal local state only.</td></tr>- </table>- <p class="note"><b>No remotely-hosted code.</b> All logic ships in the package; it evaluates JavaScript only on- the page you point it at, via the debugger/scripting APIs — never by loading external scripts.</p>-- <!-- CONTROL / TRANSPARENCY -->- <div class="rail"><h2>You're always in control</h2><span class="ln"></span><span class="pill">transparent</span></div>- <div class="chk"><span class="b">✓</span><span><b>It acts only on your command.</b> Every action is initiated by you, or by your Adom AI session working on your behalf — nothing happens on its own.</span></div>- <div class="chk"><span class="b">✓</span><span><b>It's visible when it's driving.</b> Chrome's <span class="m">"started debugging this browser"</span> bar appears whenever a debugger-using command runs; the extension lazy-attaches and idle-detaches after a few seconds, so the bar is only up while it's actually working.</span></div>- <div class="chk"><span class="b">✓</span><span><b>Idle by default.</b> It does nothing unless your Adom Desktop and an Adom session are connected — and you can remove it at any time to end all access.</span></div>-- <!-- PRIVACY -->- <div class="rail"><h2>Privacy</h2><span class="ln"></span><span class="pill">your data, your tasks</span></div>- <p class="sub">The extension runs inside your own browser and acts on the commands you give it. The pages and- screenshots it reads go to <b>your own Adom session</b> to carry out the task you asked for, and it works- through your existing signed-in sessions so your tools just work. <b>Adom's business is selling- electronics-prototyping and development tools — not data</b>; your browsing and the contents of your work stay- yours, and aren't used for advertising. Full policy:- <a href="https://wiki.adom.inc/john/adom-browser-extension/files/PRIVACY.md">Privacy Policy (Markdown)</a> ·- <a href="https://wiki.adom.inc/john/adom-browser-extension/files/privacy.html">HTML version</a>.</p>-- <!-- HOW IT WORKS -->- <div class="rail"><h2>How it works</h2><span class="ln"></span><span class="pill">architecture</span></div>- <p class="sub">The extension connects through a Chrome <b>native-messaging host on your own computer</b> to your- local <b>Adom Desktop</b> app; commands flow to the extension and results flow back to your active Adom session.- The host↔bridge link is a <b>loopback (127.0.0.1) connection pinned to this extension's exact identity</b>, so- no random page or other extension can drive it. Cloud containers, Hydrogen Desktop, and the Adom CLI reach it- through the same <code>relay → adom-desktop → bridge</code> path they already use. Full technical docs, the- verb surface, and the sub-skills are in the README below.</p>-- <p class="foot">Try it: <b>"open my web scope and set a 1µs trigger on CH1"</b> · - <code>adompkg install adom-browser-extension</code> · full docs in the README below.</p>--</div>--<script>- // Auto-resize: tell the parent our content height so the sandboxed iframe fits- // without scrollbars. Parent (static/app.js) listens for {type:"readme-height",height}- // and clamps to [120,4000]. Identity is checked by source there, so origin="null" is fine.- (function(){- "use strict";- var last=0;- function post(){- var h=Math.ceil(document.documentElement.scrollHeight);- if(h && Math.abs(h-last)>2){ last=h; try{ parent.postMessage({type:"readme-height",height:h},"*"); }catch(e){} }- }- window.addEventListener("load",post);- window.addEventListener("resize",post);- document.querySelectorAll("img").forEach(function(im){ im.addEventListener("load",post); im.addEventListener("error",post); });- if(window.ResizeObserver){ new ResizeObserver(post).observe(document.body); }- var n=0,iv=setInterval(function(){ post(); if(++n>12) clearInterval(iv); },250);- post();- })();-</script>-</body>-</html>