aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-05-14Show Chrome connection check stateTianren Dong
2026-05-14Remove maintainer notesTianren Dong
2026-05-14Restore terminal Chrome authorizationTianren Dong
2026-05-13pi-chrome 0.15.2: recipe prompts in user-language (no tool names)Tianren Dong
2026-05-13pi-chrome 0.15.1: ASCII architecture diagram + author object formTianren Dong
2026-05-13pi-chrome 0.15.0: README rewrite — top-3 recipes, sharper comparison ↵Tianren Dong
table, section reorder
2026-05-13pi-chrome 0.14.9: trusted-mode primer + auto-sync manifest versionTianren Dong
- Primer teaches agents the trusted:true escape hatch for CSP-locked pages (github.com, banks, many SaaS) where chrome_evaluate/chrome_snapshot throw EvalError due to missing 'unsafe-eval'. Agents now self-escalate instead of giving up and asking the user. - Corrects stale primer claim that chrome_evaluate works without 'unsafe-eval'. - scripts/sync-manifest-version.js wired to npm version + prepublishOnly lifecycle hooks; kills the recurring browser-extension manifest version drift (cf. 0.14.4, 0.14.8).
2026-05-13pi-chrome 0.14.8: bump version + CHANGELOG for standalone repo moveTianren Dong
2026-05-13Migrate to standalone repo: update URLstianrendong
2026-05-13pi-chrome: snapshot pre-migration stateTianren Dong
2026-05-13pi-chrome: remove obsolete REBUILD-NOTES.mdTianren Dong
Internal scratch notes from an earlier rebuild; no external references. docs/, CHANGELOG.md, CONTRIBUTING.md, and README.md cover the same ground for the current shape of the package.
2026-05-13pi-chrome 0.14.2: recover from foreign-extension input overlaysTianren Dong
When a different Chrome extension (password manager, autofill popup, etc.) anchors an overlay to the focused input, Chrome's CDP refuses our Input.dispatchMouseEvent with 'Cannot access a chrome-extension:// URL of different extension'. The CDP target list shows the foreign chrome-extension:// URL as type:'other' attached to the same tab. New behaviour in cdp() wrapper: 1. On that specific error for any Input.* call, snapshot CDP targets to identify the offending extension id and log it (foreign-ext- detected event added to ring buffer). 2. Send Esc via Input.dispatchKeyEvent (key dispatch routes by focus, not coordinates, so it bypasses the overlay) to dismiss the popup. 3. Retry the original Input.* call once. 4. If retry still fails, throw a clear error naming the foreign extension id and listing three concrete workarounds: disable that extension on the page, use Tab-to-focus instead of clicking, or run /chrome quiet off.
2026-05-13pi-chrome 0.14.1: harder attachDebugger retry + trusted.debug diagnosticTianren Dong
attachDebugger now: - Calls chrome.debugger.getTargets() first and force-detaches any stale CDP session this extension already owns on the target tab before attaching. Stale sessions (left over from SW reloads or sibling detach failures) often surface on the next attach as 'Cannot access a chrome-extension:// URL of different extension'. - Retries up to two more times (180ms + 500ms) instead of once. The 500ms back-off lets Chrome's content-script registration drain on fresh navigations. - Records every attach event (attached, stale-target-found, attach- failed, retry-failed) in a 20-entry ring buffer for inspection. New diagnostic action 'trusted.debug' returns extension version, trusted mode, attached tabs, the inspected tab's URL/status, current chrome.debugger.getTargets() output, and the recent attach-event log. Use to investigate when a specific URL refuses to attach.
2026-05-13pi-chrome 0.14.0: bare /chrome opens SettingsList dialog (space=cycle, ↵Tianren Dong
enter=save) Bare /chrome no longer opens a sequential picker. It now opens an inline SettingsList from pi-tui with two rows: Click realism auto / on / off Quiet mode on / off Up/Down navigate, Space or Enter cycles the value of the focused row, Esc closes. Each row's description updates live to match the current value, so users always see what the active setting means. When the Chrome extension hasn't been granted the debugger permission (real-looking clicks unavailable), the Click realism row stays locked on its current value and the description points to the fix. Direct subcommands unchanged: /chrome status / doctor / onboard /chrome clicks [auto|off|on|status] (no-args still cycles) /chrome quiet [on|off|toggle|status] (no-args still toggles)
2026-05-13pi-chrome 0.13.0: flatten /chrome tree, cycle-on-pick for clicks/quiet, ↵Tianren Dong
status header Reorganises the /chrome command surface: /chrome status - one-line snapshot of connection + click mode + quiet mode /chrome doctor - full health check (unchanged) /chrome onboard - install extension (unchanged) /chrome clicks - cycles auto -> on -> off -> auto when called with no args. Explicit args (auto|off|on|status) still work. /chrome quiet - toggles on/off when called with no args. Explicit args (on|off|toggle|status) still work. Removes the nested 'settings' wrapper. /chrome settings background/trusted still functions as a hidden legacy alias but is no longer advertised. Bare /chrome opens a picker with a one-line status header and cycle-target labels: 'clicks: auto -> switch to on' / 'quiet: off -> switch to on'. No second picker; one keypress flips the setting. Argument autocomplete now returns full-path values (e.g. 'clicks auto') so pi-tui's whole-argument replacement applies correctly. Top-level suggestions show clicks / quiet / status / doctor / onboard with descriptions. User-visible names match the descriptive copy: - 'trusted' -> 'clicks' (matches 'real-looking clicks' / 'quiet clicks') - 'background' -> 'quiet' (matches 'quiet mode' / 'watch mode') README + agent prompt primer + internal hint strings updated.
2026-05-13pi-chrome 0.12.1: fix 07/13/21/27/28 anti-automation regressionsTianren Dong
- 07 pointer-properties: pass force: 0.5 on every CDP mousePressed so PointerEvent.pressure reports 0.5 for trusted clicks (was 0, inconsistent with real mouse behaviour). - 13 focus-order: after a CDP-driven click on a focusable target, re-focus with focusVisible: false so :focus-visible matches pointer focus semantics (CDP press leaves :focus-visible=true otherwise). - 21 keyboard-modifiers: chrome.debugger.attach occasionally rejects with 'Cannot access a chrome-extension:// URL of different extension' immediately after navigation. attachDebugger now waits 180ms, verifies the tab URL isn't privileged, and retries once. - 27 scroll-momentum + 28 intersection-visibility: replace gentle ~1.25%/step linear taper with a ramp-up (~15%) + geometric decay (~12% drop/step). Sizes n adaptively so peak event stays ≲22px so small visibility targets get low-ratio IO samples while a clear momentum tail remains for decay-pattern detectors. - trustedDrag mousePressed also gets force: 0.5 (consistency).
2026-05-13pi-chrome 0.12.0: unify slash commands under /chromeTianren Dong
Replaces /chrome-doctor, /chrome-onboard, /chrome-background, /chrome-trusted with a single /chrome command that takes subcommands: /chrome doctor (was /chrome-doctor) /chrome onboard (was /chrome-onboard) /chrome settings background [on|off] (was /chrome-background) /chrome settings trusted [auto|off|on|status] (was /chrome-trusted) Running /chrome with no arguments opens a picker. Argument auto- completion walks the tree (e.g. type '/chrome se<Tab>' to land on 'settings', then '/chrome settings t<Tab>' to land on 'trusted'). All user-visible references (notify messages, doctor output, agent prompt primer, README) updated to the new paths.
2026-05-13pi-chrome 0.11.5: plain-English audit pass for /chrome-doctor, ↵Tianren Dong
/chrome-background, /chrome-onboard, README Replaces remaining jargon in every user-facing string: - /chrome-doctor: 'Local bridge: mode=server, url=...' -> 'This pi session is running the Chrome connection for this machine.' 'EXTENSION VERSION MISMATCH ...' -> 'The Chrome companion extension is on an old version (X); this pi-chrome is Y.' 'chrome_evaluate("1+1") = 2' -> 'pi-chrome can run code in the active Chrome tab.' 'navigator.webdriver=true on current tab — site fingerprinting may flag automation.' -> 'Your Chrome is reporting itself as automated to websites. Some sites use this signal to block sign-ins or bot checks.' - /chrome-background description + notify: drops 'silent/background mode', frames as 'quiet mode' vs 'watch mode'. - /chrome-onboard: walks through the click-by-click steps instead of saying 'Developer mode -> Load unpacked'. - session_start notify: drops 'Chrome profile bridge'; says 'pi-chrome connected' / 'waiting for the Chrome companion to connect'. - README 'Trusted-input mode (CDP)' section rewritten as 'Click modes' with plain prose explaining quiet vs real-looking clicks and when each fails. Tool descriptions (seen by the agent) keep precise terminology.
2026-05-13pi-chrome 0.11.4: drop 'yellow' from banner copy; quote exact banner textTianren Dong
Banner is themed by the user's Chrome (dark mode → dark grey for many users), not always yellow. Use 'banner' alone or quote the actual banner text 'Pi Chrome Connector started debugging this browser'.
2026-05-13pi-chrome 0.11.3: plain-English copy in /chrome-trusted + /chrome-doctorTianren Dong
User-facing strings rewritten in layman's terms — no more 'CDP', 'isTrusted', 'user-activation gates', 'synthetic events', 'debugger API'. /chrome-trusted picker now explains each mode by what users actually experience: yellow banner, which sites work, when to use it. /chrome-doctor reports 'Click mode' instead of 'Trusted-input mode'. Tool descriptions (read by the agent) keep precise terminology.
2026-05-13pi-chrome 0.11.2: cap trustedScroll per-event delta so IO threshold gradient ↵Tianren Dong
lands
2026-05-13pi-chrome 0.11.1: chrome_tap (CDP touch), smoother trustedScroll, cdp ↵Tianren Dong
auto-recover - chrome_tap tool: real browser-trusted touchstart/touchend via Input.dispatchTouchEvent for sites that gate on TouchEvent (mobile- first PWAs, swipe carousels). Always uses CDP; banner appears. - trustedScroll: per-step delta capped at ~80px, n=6..60 steps with a bell-shaped weight curve, 22-52ms sleep between events so IntersectionObserver and rAF samples get gradient updates (fixes intersection-visibility / smooth-scroll tests). - cdp() wrapper auto-detects stale debugger sessions (tab nav, DevTools toggle, manual cancel) and re-attaches+retries once instead of throwing 'Debugger is not attached'. Fixes intermittent failures during automated test sweeps.
2026-05-13pi-chrome 0.11.0: smart-auto trusted mode default + rename to Pi Chrome ↵Tianren Dong
Connector Trusted-input mode default flips from 'off' to 'auto': - Synthetic events still run first for every chrome_* call. - If a click produced no page change AND the target's label looks like a user-activation-gated affordance (play/copy/share/sign-in/etc), or the page just emitted NotAllowedError / 'transient activation required', the call is silently retried via chrome.debugger (CDP). - Typing auto-retries when the input value didn't change at all (editor rejected synthetic input). - Result carries autoRetried=true + autoRetryReason + syntheticAttempt so callers / agents see the upgrade happened. - Yellow debugger banner now appears only for the retry, not every call. Companion extension renamed 'Pi Existing Chrome Profile Bridge' → 'Pi Chrome Connector' (manifest, action title, SW client name, README, slash-command notify strings). One-time chrome://extensions reload needed to pick up the new name; auto-reload mechanism handles the rest. /chrome-doctor explains the active mode and what smart-retry does. /chrome-trusted picker shows 'auto (current)' first; on-mode now warned as 'banner permanently visible'. chrome_click / chrome_type tool descriptions explain auto-retry.
2026-05-13pi-chrome 0.10.2: interactive /chrome-trusted pickerTianren Dong
- No-arg /chrome-trusted now shows ui.select picker with current mode + tradeoff for each option (on/off/auto/status) - First-time on transition asks ui.confirm with banner warning - Permission missing emits a clear ui.notify with fix instructions - Direct args (/chrome-trusted on|off|auto|status) still work
2026-05-13pi-chrome 0.10.1: chrome_key modifiers param for trusted chords (Cmd+V etc)Tianren Dong
2026-05-13pi-chrome 0.10.0: trusted-input mode via chrome.debugger (CDP)Tianren Dong
Add opt-in CDP path so chrome_* tools can dispatch browser-trusted input (isTrusted=true, satisfies user-activation gates: clipboard, fullscreen, file picker, autoplay). Default remains synthetic events; no behavior change unless trusted mode is enabled. Companion extension: - new "debugger" permission in manifest (one-time re-approval prompt in chrome://extensions on update) - attach/detach lifecycle per tab with idle-detach (15s) and listener for onDetach (incl. canceled_by_user) - trustedClick / trustedHover / trustedType / trustedFill / trustedKey / trustedScroll / trustedDrag use Input.dispatchMouseEvent + Input.dispatchKeyEvent through chrome.debugger.sendCommand, reusing humanized timing, in-rect coord variance, pointer continuity, Shift chord for uppercase, per-key cadence - trusted.mode / trusted.status bridge actions Pi side: - /chrome-trusted slash command (on / off / auto / status) - trusted=true param on chrome_click, chrome_type, chrome_fill, chrome_key, chrome_hover, chrome_drag, chrome_scroll - /chrome-doctor probes chrome.debugger availability and reports current trusted mode + attached tabs - README documents trusted-input mode and tradeoffs
2026-05-13pi-chrome: humanize synthetic input + anti-automation test suiteTianren Dong
Bump 0.8.0 → 0.9.1. Companion extension (service_worker.js): - humanise pointer paths: easing Bezier-ish interpolation w/ wobble, 12–42 steps, 4–18 ms gaps; pointer position persisted across calls - click point picked inside element rect, not dead center - pointer events fill movementX/Y, screenX/Y, pressure (0.5 on down), pointerId, width/height, tilt, composed - click sequence: humanMoveTo → pointerdown → focus → 45–140 ms hold → pointerup → mouseup → click - per-character typing: keydown → keypress → beforeinput → value mutate (or execCommand for contenteditable) → input → keyup, with 25–95 ms hold + 35–140 ms inter-key; auto Shift chord for uppercase/symbols - pressKeyInPage emits same cadence + handles printable insert / Backspace - hoverPage: humanised path + 80–220 ms dwell - dragPage: full HTML5 sequence (dragstart/drag/dragenter/dragover/ dragleave/drop/dragend) with shared DataTransfer + pointer continuity - new scrollPage: wheel events with front-loaded momentum-shaped deltas - self-reload on version drift: SW reads x-pi-chrome-version header, reloads when older than pi-chrome Pi side (index.ts): - new chrome_scroll tool - PI_CHROME_VERSION read from package.json (and re-read on every /next so future bumps take effect without pi restart) - /chrome-doctor escalates version mismatch to top-line ✗ error and skips downstream capability probes when stale - /next response carries x-pi-chrome-version header for SW self-heal Test suite (test-suite/): - 28 challenge pages each catching a different synthetic-event tell: isTrusted, webdriver/fingerprint, mouse entropy/timing/coords, pointer pressure/continuity, per-char cadence + framework invariants, user activation, honeypots, focus order, wheel scroll, drag+ DataTransfer, contenteditable+Selection, paste/clipboard, native select, hover dwell, React valueTracker, keyboard modifiers, touch events, stack-trace fingerprint, viewport-edge clicks, mousemove rate, scroll momentum, IntersectionObserver visibility - shared _lib.js exposes window.__verdict + writes localStorage so index.html dashboard aggregates results - notes/bypass-ideas.md documents fixes still needed per challenge
2026-05-12Update pi-packs installer and package namesTianren Dong
2026-05-08Track pi-chrome package sourceTianren Dong