aboutsummaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2026-05-02feat(domains): migrate scroll with W3C deltaY semantics and dialog guardamankumarsingh77
2026-05-02feat(domains): migrate type, press_key, dispatch_key with safeJs and ↵amankumarsingh77
matched-count validation
2026-05-02feat(domains): migrate browser_click to defineBrowserTool — vertical sliceamankumarsingh77
Implements Task 9: adds src/domains/click.ts with the new architecture, updates registry.ts to register clickTool, removes the legacy browser_click block from tools.ts, and wires BrowserClient alongside BrowserDaemon in index.ts so both systems coexist during migration. Also fixes AnyBrowserToolDefinition variance: uses never-arg renderCall in the erased type and a boundary cast in registerBrowserTool so concrete tool definitions (with specific Static<S> args) are assignable to the registry array without widening.
2026-05-02feat: add defineBrowserTool helper, truncation, schemas/common, empty registryamankumarsingh77
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-02fix(cdp): serialize event consumer; persist dialog until taken; validate ↵amankumarsingh77
page info shape
2026-05-02feat: add CDP session and BrowserClient factoryamankumarsingh77
2026-05-02fix(cdp): validate inbound CDP messages with a runtime type guardamankumarsingh77
2026-05-02feat(cdp): add factory-based transport with Result and event AsyncIterableamankumarsingh77
2026-05-02fix(cdp): clear socket timer on probe success; surface non-ENOENT readFile ↵amankumarsingh77
errors
2026-05-02feat(cdp): port DevToolsActivePort discovery to Resultamankumarsingh77
2026-05-02feat(cdp): add types and error model for new transport layeramankumarsingh77
2026-05-02docs(util): clarify safeJs trust boundary and unsupported value typesamankumarsingh77
2026-05-02feat(util): add pure keycodes and safeJs template helperamankumarsingh77
2026-05-02fix(util): preserve AbortSignal.reason; validate namespace in temp pathsamankumarsingh77
2026-05-02feat(util): add result, time, and paths primitives for v0.3 rewriteamankumarsingh77
2026-05-02feat: v0.2.1 — feature parity with browser-use/browser-harnessamankumarsingh77
Adds the missing tools called out in docs/browser-harness-comparison.md: upload_file, dispatch_key, download (configure dir), viewport_resize, drag_and_drop, print_to_pdf, get_network_log, plus the iframe-target helper. Updates promptGuidelines and the system prompt's tools table. Tracked in todo.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02perf: v0.2.0 — event-based waitForLoad, fast ensureAlive, JPEG ↵amankumarsingh77
screenshots, page info caching 5 performance optimizations (14-36% faster end-to-end, output quality unchanged): - fast ensureAlive(): WS state check instead of CDP roundtrip (96% faster per-call) - event-based waitForLoad(): CDP load events instead of 300ms polling (99.5% faster for loaded tabs) - JPEG screenshot support: 29-49% smaller files, faster CDP transfer - page info caching: 1s TTL eliminates redundant evaluateJS calls - parallel domain enables: Promise.all instead of sequential await in switchTab() Benchmark: 3622ms vs 4243ms baseline on 3-tab navigation + screenshot task.
2026-04-30Replace dynamic tool registration with browser_run_scriptamankumarsingh77
Remove register_tool/remove_tool/list_dynamic_tools and the entire dynamic-tools.ts module. Replace with a single browser_run_script tool that executes temporary scripts from disk with daemon access. Scripts are now written to disk before execution, making them auditable and re-runnable. Same bindings (daemon, require, params, etc.) as before via the same AsyncFunction mechanism.
2026-04-30fix: stop Chrome remote-debugging consent popup stormamankumarsingh77
Previously a single consent-pending socket could spawn up to 5 stacked 'Allow remote debugging?' dialogs. Three causes: - onopen reset _reconnectAttempts, but Chrome accepts the WS upgrade before the user clicks Allow, so a held socket looked healthy. - ensureAlive's health probe used the full 15s CDP timeout; while the user was reading the dialog the probe would time out, trigger a stop()+start(), and a fresh popup would stack on top. - onclose auto-reconnected unconditionally even when consent had never been granted on that connection. Now a connection is only considered healthy once the first CDP roundtrip completes (attachFirstPage). ensureAlive does a 2s short probe before tearing down the socket. onclose bails out of auto- reconnect when consent was never observed, so a denied dialog surfaces a clean error instead of looping.
2026-04-29Replace socket daemon with direct CDP WebSocket connectionamankumarsingh77
Drops the Unix socket subprocess in favor of talking CDP directly over WebSocket from the extension. Removes the protocol's send/health helpers, simplifies setup to just verifying Chrome's remote debugging port, and tightens types in dynamic-tools. Bumps Node engine to >=22 and adds the ws dependency.
2026-04-29Initial release: pi-browser-harnessamankumarsingh77
Browser control extension for pi — 20 browser_* tools for navigating, clicking, typing, screenshotting, and extracting data from real Chrome via CDP. Includes self-extending harness (register_tool/remove_tool), guided /browser-setup, session persistence, and custom TUI renderers.