Files
autofirmer-expanded/extension
Brandon LiandClaude Opus 5 3ac9fe060f Raise the browser the extension reported, and add a diagnostics script
focus.py raised the first browser in its list that happened to be running. On a
machine with both Chrome and Edge installed that is a coin flip, and losing it is
silent: coordinates measured from a tab in one browser, the click delivered into
a window of the other. It presents as selectors failing for no reason. A VPS with
both installed hit exactly this.

The extension now reports which browser is hosting it, and that travels with the
measurement, so the clicker raises the browser the coordinates actually came
from. Asking for a browser that is not running now fails honestly instead of
quietly raising a different one, and the verification step rejects the wrong
browser coming forward. Chromium, Opera and Vivaldi are recognised alongside
Chrome, Edge and Brave, on both platforms.

diagnose.py answers the question a remote desktop makes hard: whether the mouse
is really moving or the viewer simply is not drawing it. It moves the cursor and
reads the position back from the OS, so the answer does not depend on anything
being rendered, and it reports DPI mode, screen size, whether this is an RDP
session, and whether the browser can be raised at all. Nothing is clicked.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-30 14:13:18 -05:00
..

AutoFirmer Capture (Chromium extension)

Polls the dashboard for an on/off flag and, while it's on, scrapes the target tab's HTML and posts it back to the dashboard.

Install (unpacked)

  1. Start the dashboard (npm run dev) so http://localhost:3000 is up.
  2. Open chrome://extensions, enable Developer mode (top right).
  3. Load unpacked → select this extension/ folder.
  4. Click the extension icon to open the popup and set:
    • Dashboard URL — default http://localhost:3000. Use the VPS IP if the dashboard runs elsewhere.
    • Poll interval — seconds between status checks (default 3).
    • Target URL pattern — a Chrome match pattern like https://*.tradovate.com/*. Leave blank to capture whichever tab is active.
    • Element selector — optional CSS selector; matching elements get their on-screen position measured alongside the HTML.

The badge shows ON (green) while capturing, ! (red) if the dashboard is unreachable, and nothing when the switch is off.

Flow

AutoBuyer page  --PATCH /api/autobuyer/status-->  SQLite settings
extension       --GET   /api/autobuyer/status-->  { enabled }
extension       --POST  /api/autobuyer/capture->  html + viewport + element rects
AutoBuyer page  --GET   /api/autobuyer/capture->  renders the HTML

Scope

host_permissions is deliberately narrow — https://*.tradeify.co/* plus localhost for the dashboard. The extension is technically incapable of reading any other site, so an accidental capture of your bank or mail tab can't happen. The default Target URL pattern matches, so it only ever captures the broker tab regardless of which tab is focused.

To automate a different broker, add its pattern to host_permissions in manifest.json, update the popup's target pattern, and reload the extension. Avoid going back to <all_urls> — that re-enables scraping whatever tab is active.

Notes

  • The extension never captures the dashboard's own pages — otherwise it would just mirror its own output back.
  • chrome://, about: and Web Store pages cannot be scripted by any extension; they're skipped.
  • MV3 service workers are torn down when idle. Each poll makes an extension API call, which keeps the worker alive; a 30-second alarm revives it if Chrome kills it anyway. So worst-case cadence is 30s, normal cadence is the poll interval.