app
Adom Browser Extension
Public Made by Adomby adom
Your AI's hands in your real, signed-in browser. The Adom Browser Extension (abe) works with both Chrome and Edge: build, drive, and test web apps, and log past vendor walls, in the browser you already use - cookies, SSO, saved logins and captcha trust intact. The nbrowser_* bridge (pup's counterpart) runs in your actual logged-in profile.
nbrowser_set_file_input: CDP file uploads without the OS picker (accepted, spec refined)
Feature request from the adom-google thread, ACCEPTED with refinements. Ships as extension 0.1.3 + bridge bump.
Core (as requested - correct design)
- nbrowser_set_file_input {sessionId, selector|text, filePaths:[laptop abs paths]}
- Resolve via the click smart-finder; if the match is a Browse button/label, walk to the associated input[type=file] (for=, closest form, adjacent input).
- CDP: objectId -> DOM.requestNode -> backendNodeId -> DOM.setFileInputFiles. Works on HIDDEN inputs (most real upload UIs hide them) - no visibility check.
- Then dispatch input + change (bubbles:true, composed:true) via Runtime.callFunctionOn so React/Angular listeners fire (setFileInputFiles alone does not reliably notify frameworks).
- Bridge stats every path BEFORE forwarding (file_missing lists the bad ones); no_files on empty; input_not_found from the finder.
- Guards: mutating class (no_target/not_owned like click/type) + verbs-policy entry so check-guard-coverage stays green. Rich _hint + pitfalls + describe entry. ext manifest bump -> nbrowser_status.version reflects it; land with dev_reload.
Refinements (cases the base design misses)
- CHOOSER-INTERCEPT MODE for transient inputs: some UIs create the input only inside the Browse click handler - nothing exists to select beforehand. Add {armForNextChooser:true, filePaths}: enable Page.setInterceptFileChooserDialog, caller clicks Browse, on Page.fileChooserOpened satisfy it with the staged files (backendNodeId from the event), disarm (auto-disarm 30s). Playwright's model; covers both worlds.
- CLOUD-DIRECT SMALL FILES: accept files:[{name, contentBase64}] as an alternative - the BRIDGE (it lives on the laptop) writes them to %TEMP%/adom-nbrowser-uploads// and substitutes paths. One call from a cloud agent, no send_files round-trip. Janitor sweeps the dir (>24h), per the bounded-artifacts rule.
- HONEST LIMITATION in the hint: sites using the File System Access API (showOpenFilePicker) cannot be satisfied over CDP at all (real gesture + native handles). Hint must say so + point at the site's drag-drop path as manual fallback, so no agent burns a session fighting it.
- RETURN SHAPE: {ok, inputFound, files:[names], via:'direct'|'chooser-intercept', dispatchedEvents:['input','change']}; cross-origin-iframe input -> frame_mismatch with a frame-targeting hint.
Why not the OS picker
The premise is right: the Win32 dialog cannot be reliably driven with the debugger attached, UIA against it is flaky, and it FOREGROUNDS - violating background-by-default. CDP injection is silent, background, exact.