From 3068d2d911c0523c30c3e8b546483fa93d8510ce Mon Sep 17 00:00:00 2001 From: junhsss Date: Fri, 30 Oct 2026 12:38:00 +0900 Subject: [PATCH 1/2] feat(browser): replace agent-browser with the session commands API --- Cargo.lock | 1282 +------- Cargo.toml | 5 - README.md | 37 +- deny.toml | 7 - docs/README.md | 9 +- docs/browser-compat.md | 58 - docs/cli-reference.md | 709 ++--- docs/references/README.md | 5 +- docs/references/agent-troubleshooting.md | 18 +- docs/references/steel-browser-commands.md | 334 +-- docs/references/steel-browser.md | 81 +- docs/references/steel-cli.md | 14 +- .../upstream/agent-browser-commands.source.md | 263 -- docs/upstream-sync.md | 81 - src/api/client.rs | 17 + src/api/commands.rs | 561 ++++ src/api/mod.rs | 1 + src/browser/daemon/client.rs | 63 - src/browser/daemon/mod.rs | 4 - src/browser/daemon/process.rs | 315 -- src/browser/daemon/protocol.rs | 623 ---- src/browser/daemon/server.rs | 877 ------ src/browser/engine.rs | 1167 -------- src/browser/lifecycle.rs | 5 +- src/browser/mod.rs | 6 +- src/browser/passthrough.rs | 2 - src/browser/routing.rs | 2 - src/browser/runtime.rs | 2 - src/browser/state.rs | 264 ++ src/commands/browser/action.rs | 2574 ++++++++++------- src/commands/browser/batch.rs | 213 +- src/commands/browser/captcha.rs | 22 +- src/commands/browser/live.rs | 43 +- src/commands/browser/mod.rs | 85 +- src/commands/browser/sessions.rs | 111 +- src/commands/browser/start.rs | 139 +- src/commands/browser/stop.rs | 70 +- src/commands/describe.rs | 15 +- src/commands/doctor.rs | 52 +- src/commands/mod.rs | 83 +- src/commands/sessions.rs | 39 +- tests/action_coverage.rs | 756 ----- tests/browser_commands.rs | 445 +++ tests/browser_flag_parity.rs | 460 --- tests/cli_blackbox.rs | 18 +- tests/cli_compat.rs | 4 +- tests/lifecycle_contract.rs | 262 +- tests/native_api_coverage.rs | 410 --- tests/output_parity.rs | 537 ---- 49 files changed, 3681 insertions(+), 9469 deletions(-) delete mode 100644 docs/browser-compat.md delete mode 100644 docs/references/upstream/agent-browser-commands.source.md delete mode 100644 docs/upstream-sync.md create mode 100644 src/api/commands.rs delete mode 100644 src/browser/daemon/client.rs delete mode 100644 src/browser/daemon/mod.rs delete mode 100644 src/browser/daemon/process.rs delete mode 100644 src/browser/daemon/protocol.rs delete mode 100644 src/browser/daemon/server.rs delete mode 100644 src/browser/engine.rs delete mode 100644 src/browser/passthrough.rs delete mode 100644 src/browser/routing.rs delete mode 100644 src/browser/runtime.rs create mode 100644 src/browser/state.rs delete mode 100644 tests/action_coverage.rs create mode 100644 tests/browser_commands.rs delete mode 100644 tests/browser_flag_parity.rs delete mode 100644 tests/native_api_coverage.rs delete mode 100644 tests/output_parity.rs diff --git a/Cargo.lock b/Cargo.lock index 9049f15..b2c819c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -43,39 +43,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "agent-browser" -version = "0.25.0" -source = "git+https://github.com/steel-dev/agent-browser?branch=as-lib#eb8e722560432a2ad0229604d3db82c16cda1253" -dependencies = [ - "aes-gcm", - "async-trait", - "base64", - "chrono", - "dirs 5.0.1", - "futures-util", - "getrandom 0.2.17", - "hex", - "hmac", - "image", - "libc", - "reqwest", - "rust-embed", - "serde", - "serde_json", - "sha2", - "similar", - "socket2", - "time", - "tokio", - "tokio-tungstenite 0.24.0", - "url", - "urlencoding", - "uuid", - "windows-sys 0.52.0", - "zip", -] - [[package]] name = "aho-corasick" version = "1.1.4" @@ -85,33 +52,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "aligned" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685" -dependencies = [ - "as-slice", -] - -[[package]] -name = "aligned-vec" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" -dependencies = [ - "equator", -] - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - [[package]] name = "anstream" version = "1.0.0" @@ -168,38 +108,6 @@ version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" -[[package]] -name = "arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" - -[[package]] -name = "arg_enum_proc_macro" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - -[[package]] -name = "as-slice" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "assert-json-diff" version = "2.0.2" @@ -210,114 +118,24 @@ dependencies = [ "serde_json", ] -[[package]] -name = "async-trait" -version = "0.1.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" -[[package]] -name = "autocfg" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - -[[package]] -name = "av-scenechange" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394" -dependencies = [ - "aligned", - "anyhow", - "arg_enum_proc_macro", - "arrayvec", - "log", - "num-rational", - "num-traits", - "pastey", - "rayon", - "thiserror 2.0.18", - "v_frame", - "y4m", -] - -[[package]] -name = "av1-grain" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8" -dependencies = [ - "anyhow", - "arrayvec", - "log", - "nom", - "num-rational", - "v_frame", -] - -[[package]] -name = "avif-serialize" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375082f007bd67184fb9c0374614b29f9aaa604ec301635f72338bb65386a53d" -dependencies = [ - "arrayvec", -] - [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - -[[package]] -name = "bit_field" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" - [[package]] name = "bitflags" version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" -[[package]] -name = "bitstream-io" -version = "4.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eff00be299a18769011411c9def0d827e8f2d7bf0c3dbf53633147a8867fd1f" -dependencies = [ - "no_std_io2", -] - [[package]] name = "block-buffer" version = "0.10.4" @@ -336,36 +154,12 @@ dependencies = [ "generic-array", ] -[[package]] -name = "built" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" - [[package]] name = "bumpalo" version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" -[[package]] -name = "bytemuck" -version = "1.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "byteorder-lite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" - [[package]] name = "bytes" version = "1.11.1" @@ -388,8 +182,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" dependencies = [ "find-msvc-tools", - "jobserver", - "libc", "shlex", ] @@ -405,19 +197,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" -[[package]] -name = "chrono" -version = "0.4.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" -dependencies = [ - "iana-time-zone", - "js-sys", - "num-traits", - "wasm-bindgen", - "windows-link", -] - [[package]] name = "cipher" version = "0.4.4" @@ -477,12 +256,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - [[package]] name = "colorchoice" version = "1.0.4" @@ -501,12 +274,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - [[package]] name = "cpufeatures" version = "0.2.17" @@ -525,37 +292,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - [[package]] name = "crypto-common" version = "0.1.7" @@ -600,15 +336,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" -[[package]] -name = "deranged" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" -dependencies = [ - "powerfmt", -] - [[package]] name = "dialoguer" version = "0.12.0" @@ -632,34 +359,13 @@ dependencies = [ "subtle", ] -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys 0.4.1", -] - [[package]] name = "dirs" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" dependencies = [ - "dirs-sys 0.5.0", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users 0.4.6", - "windows-sys 0.48.0", + "dirs-sys", ] [[package]] @@ -670,7 +376,7 @@ checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", - "redox_users 0.5.2", + "redox_users", "windows-sys 0.60.2", ] @@ -685,38 +391,12 @@ dependencies = [ "syn", ] -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - [[package]] name = "encode_unicode" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" -[[package]] -name = "equator" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" -dependencies = [ - "equator-macro", -] - -[[package]] -name = "equator-macro" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -733,21 +413,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "exr" -version = "1.74.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be" -dependencies = [ - "bit_field", - "half", - "lebe", - "miniz_oxide", - "rayon-core", - "smallvec", - "zune-inflate", -] - [[package]] name = "fallible-iterator" version = "0.3.0" @@ -766,35 +431,6 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" -[[package]] -name = "fax" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" -dependencies = [ - "fax_derive", -] - -[[package]] -name = "fax_derive" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "fdeflate" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" -dependencies = [ - "simd-adler32", -] - [[package]] name = "find-msvc-tools" version = "0.1.9" @@ -807,7 +443,6 @@ version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ - "crc32fast", "miniz_oxide", "zlib-rs", ] @@ -987,16 +622,6 @@ dependencies = [ "polyval", ] -[[package]] -name = "gif" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e" -dependencies = [ - "color_quant", - "weezl", -] - [[package]] name = "h2" version = "0.4.19" @@ -1016,17 +641,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "half" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" -dependencies = [ - "cfg-if", - "crunchy", - "zerocopy", -] - [[package]] name = "hashbrown" version = "0.15.5" @@ -1066,12 +680,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - [[package]] name = "hmac" version = "0.12.1" @@ -1189,30 +797,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "iana-time-zone" -version = "0.1.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - [[package]] name = "icu_collections" version = "2.1.1" @@ -1321,46 +905,6 @@ dependencies = [ "icu_properties", ] -[[package]] -name = "image" -version = "0.25.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" -dependencies = [ - "bytemuck", - "byteorder-lite", - "color_quant", - "exr", - "gif", - "image-webp", - "moxcms", - "num-traits", - "png", - "qoi", - "ravif", - "rayon", - "rgb", - "tiff", - "zune-core", - "zune-jpeg", -] - -[[package]] -name = "image-webp" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" -dependencies = [ - "byteorder-lite", - "quick-error 2.0.1", -] - -[[package]] -name = "imgref" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" - [[package]] name = "indexmap" version = "2.13.0" @@ -1383,17 +927,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "interpolate_name" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "ipnet" version = "2.12.0" @@ -1435,15 +968,6 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.17" @@ -1491,16 +1015,6 @@ dependencies = [ "jiff-tzdb", ] -[[package]] -name = "jobserver" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" -dependencies = [ - "getrandom 0.3.4", - "libc", -] - [[package]] name = "js-sys" version = "0.3.91" @@ -1523,28 +1037,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" -[[package]] -name = "lebe" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" - [[package]] name = "libc" version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" -[[package]] -name = "libfuzzer-sys" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" -dependencies = [ - "arbitrary", - "cc", -] - [[package]] name = "libredox" version = "0.1.14" @@ -1592,31 +1090,12 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" -[[package]] -name = "loop9" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" -dependencies = [ - "imgref", -] - [[package]] name = "lru-slab" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" -[[package]] -name = "maybe-rayon" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" -dependencies = [ - "cfg-if", - "rayon", -] - [[package]] name = "memchr" version = "2.8.0" @@ -1660,102 +1139,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "moxcms" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" -dependencies = [ - "num-traits", - "pxfm", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - -[[package]] -name = "no_std_io2" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418abd1b6d34fbf6cae440dc874771b0525a604428704c76e48b29a5e67b8003" -dependencies = [ - "memchr", -] - -[[package]] -name = "nom" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" -dependencies = [ - "memchr", -] - -[[package]] -name = "noop_proc_macro" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-conv" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" - -[[package]] -name = "num-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - [[package]] name = "num_cpus" version = "1.17.0" @@ -1824,18 +1207,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "pastey" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" - [[package]] name = "pathdiff" version = "0.2.3" @@ -1876,19 +1247,6 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" -[[package]] -name = "png" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" -dependencies = [ - "bitflags", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - [[package]] name = "polyval" version = "0.6.2" @@ -1925,12 +1283,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - [[package]] name = "ppv-lite86" version = "0.2.21" @@ -1959,82 +1311,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "profiling" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" -dependencies = [ - "profiling-procmacros", -] - -[[package]] -name = "profiling-procmacros" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "proptest" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" -dependencies = [ - "bit-set", - "bit-vec", - "bitflags", - "num-traits", - "rand 0.9.2", - "rand_chacha 0.9.0", - "rand_xorshift", - "regex-syntax", - "rusty-fork", - "tempfile", - "unarray", -] - -[[package]] -name = "proptest-derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c57924a81864dddafba92e1bf92f9bf82f97096c44489548a60e888e1547549b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pxfm" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a041e753da8b807c9255f28de81879c78c876392ff2469cde94799b2896b9d" - -[[package]] -name = "qoi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - [[package]] name = "quinn" version = "0.11.9" @@ -2049,7 +1325,7 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror 2.0.18", + "thiserror", "tokio", "tracing", "web-time", @@ -2064,13 +1340,13 @@ dependencies = [ "bytes", "getrandom 0.3.4", "lru-slab", - "rand 0.9.2", + "rand", "ring", "rustc-hash", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.18", + "thiserror", "tinyvec", "tracing", "web-time", @@ -2111,37 +1387,16 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - [[package]] name = "rand" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ - "rand_chacha 0.9.0", + "rand_chacha", "rand_core 0.9.5", ] -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - [[package]] name = "rand_chacha" version = "0.9.0" @@ -2170,85 +1425,6 @@ dependencies = [ "getrandom 0.3.4", ] -[[package]] -name = "rand_xorshift" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" -dependencies = [ - "rand_core 0.9.5", -] - -[[package]] -name = "rav1e" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b" -dependencies = [ - "aligned-vec", - "arbitrary", - "arg_enum_proc_macro", - "arrayvec", - "av-scenechange", - "av1-grain", - "bitstream-io", - "built", - "cfg-if", - "interpolate_name", - "itertools", - "libc", - "libfuzzer-sys", - "log", - "maybe-rayon", - "new_debug_unreachable", - "noop_proc_macro", - "num-derive", - "num-traits", - "paste", - "profiling", - "rand 0.9.2", - "rand_chacha 0.9.0", - "simd_helpers", - "thiserror 2.0.18", - "v_frame", - "wasm-bindgen", -] - -[[package]] -name = "ravif" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e52310197d971b0f5be7fe6b57530dcd27beb35c1b013f29d66c1ad73fbbcc45" -dependencies = [ - "avif-serialize", - "imgref", - "loop9", - "quick-error 2.0.1", - "rav1e", - "rayon", - "rgb", -] - -[[package]] -name = "rayon" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - [[package]] name = "redox_syscall" version = "0.5.18" @@ -2258,17 +1434,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom 0.2.17", - "libredox", - "thiserror 1.0.69", -] - [[package]] name = "redox_users" version = "0.5.2" @@ -2277,7 +1442,7 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.17", "libredox", - "thiserror 2.0.18", + "thiserror", ] [[package]] @@ -2339,23 +1504,15 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-rustls", - "tokio-util", "tower", "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", - "wasm-streams", "web-sys", - "webpki-roots 1.0.6", -] - -[[package]] -name = "rgb" -version = "0.8.53" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4" + "webpki-roots 1.0.6", +] [[package]] name = "ring" @@ -2378,7 +1535,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8a1f2315036ef6b1fbacd1972e8ee7688030b0a2121edfc2a6550febd41574d" dependencies = [ "hashbrown 0.16.1", - "thiserror 2.0.18", + "thiserror", ] [[package]] @@ -2396,40 +1553,6 @@ dependencies = [ "sqlite-wasm-rs", ] -[[package]] -name = "rust-embed" -version = "8.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04113cb9355a377d83f06ef1f0a45b8ab8cd7d8b1288160717d66df5c7988d27" -dependencies = [ - "rust-embed-impl", - "rust-embed-utils", - "walkdir", -] - -[[package]] -name = "rust-embed-impl" -version = "8.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0902e4c7c8e997159ab384e6d0fc91c221375f6894346ae107f47dd0f3ccaa" -dependencies = [ - "proc-macro2", - "quote", - "rust-embed-utils", - "syn", - "walkdir", -] - -[[package]] -name = "rust-embed-utils" -version = "8.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bcdef0be6fe7f6fa333b1073c949729274b05f123a0ad7efcb8efd878e5c3b1" -dependencies = [ - "sha2", - "walkdir", -] - [[package]] name = "rustc-hash" version = "2.1.1" @@ -2490,33 +1613,12 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" -[[package]] -name = "rusty-fork" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" -dependencies = [ - "fnv", - "quick-error 1.2.3", - "tempfile", - "wait-timeout", -] - [[package]] name = "ryu" version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "scopeguard" version = "1.2.0" @@ -2647,21 +1749,6 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" -[[package]] -name = "simd_helpers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" -dependencies = [ - "quote", -] - -[[package]] -name = "similar" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" - [[package]] name = "slab" version = "0.4.12" @@ -2708,24 +1795,20 @@ version = "0.5.0-preview.6" dependencies = [ "aes", "aes-gcm", - "agent-browser", "anyhow", "base64", "cbc", "clap", "clap_complete", "dialoguer", - "dirs 6.0.0", + "dirs", "futures-util", "getrandom 0.4.2", "hmac", "jiff", - "libc", "open", "parking_lot", "pbkdf2", - "proptest", - "proptest-derive", "reqwest", "rusqlite", "serde", @@ -2734,9 +1817,9 @@ dependencies = [ "sha1", "sha2", "tempfile", - "thiserror 2.0.18", + "thiserror", "tokio", - "tokio-tungstenite 0.29.0", + "tokio-tungstenite", "url", "urlencoding", "wiremock", @@ -2799,33 +1882,13 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - [[package]] name = "thiserror" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.18", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn", + "thiserror-impl", ] [[package]] @@ -2839,51 +1902,6 @@ dependencies = [ "syn", ] -[[package]] -name = "tiff" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b63feaf3343d35b6ca4d50483f94843803b0f51634937cc2ec519fc32232bc52" -dependencies = [ - "fax", - "flate2", - "half", - "quick-error 2.0.1", - "weezl", - "zune-jpeg", -] - -[[package]] -name = "time" -version = "0.3.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde_core", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" - -[[package]] -name = "time-macros" -version = "0.2.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" -dependencies = [ - "num-conv", - "time-core", -] - [[package]] name = "tinystr" version = "0.8.2" @@ -2947,22 +1965,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-tungstenite" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" -dependencies = [ - "futures-util", - "log", - "rustls", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tungstenite 0.24.0", - "webpki-roots 0.26.11", -] - [[package]] name = "tokio-tungstenite" version = "0.29.0" @@ -2975,7 +1977,7 @@ dependencies = [ "rustls-pki-types", "tokio", "tokio-rustls", - "tungstenite 0.29.0", + "tungstenite", "webpki-roots 0.26.11", ] @@ -3062,26 +2064,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "tungstenite" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http", - "httparse", - "log", - "rand 0.8.5", - "rustls", - "rustls-pki-types", - "sha1", - "thiserror 1.0.69", - "utf-8", -] - [[package]] name = "tungstenite" version = "0.29.0" @@ -3093,11 +2075,11 @@ dependencies = [ "http", "httparse", "log", - "rand 0.9.2", + "rand", "rustls", "rustls-pki-types", "sha1", - "thiserror 2.0.18", + "thiserror", ] [[package]] @@ -3112,12 +2094,6 @@ version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" -[[package]] -name = "unarray" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" - [[package]] name = "unicase" version = "2.9.0" @@ -3182,12 +2158,6 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -3200,28 +2170,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "uuid" -version = "1.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" -dependencies = [ - "getrandom 0.4.2", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "v_frame" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2" -dependencies = [ - "aligned-vec", - "num-traits", - "wasm-bindgen", -] - [[package]] name = "vcpkg" version = "0.2.15" @@ -3234,25 +2182,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "wait-timeout" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" -dependencies = [ - "libc", -] - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - [[package]] name = "want" version = "0.3.1" @@ -3367,19 +2296,6 @@ dependencies = [ "wasmparser", ] -[[package]] -name = "wasm-streams" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "wasmparser" version = "0.244.0" @@ -3430,89 +2346,12 @@ dependencies = [ "rustls-pki-types", ] -[[package]] -name = "weezl" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" - -[[package]] -name = "winapi-util" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" -dependencies = [ - "windows-sys 0.48.0", -] - -[[package]] -name = "windows-core" -version = "0.62.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link", - "windows-result", - "windows-strings", -] - -[[package]] -name = "windows-implement" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "windows-interface" -version = "0.59.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-result" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-strings" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -3540,21 +2379,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -3588,12 +2412,6 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -3606,12 +2424,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -3624,12 +2436,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -3654,12 +2460,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -3672,12 +2472,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -3690,12 +2484,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -3708,12 +2496,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -3843,12 +2625,6 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" -[[package]] -name = "y4m" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448" - [[package]] name = "yoke" version = "0.8.1" @@ -3989,27 +2765,3 @@ dependencies = [ "log", "simd-adler32", ] - -[[package]] -name = "zune-core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" - -[[package]] -name = "zune-inflate" -version = "0.2.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "zune-jpeg" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec5f41c76397b7da451efd19915684f727d7e1d516384ca6bd0ec43ec94de23c" -dependencies = [ - "zune-core", -] diff --git a/Cargo.toml b/Cargo.toml index 9bd0288..91a5358 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,12 +38,9 @@ sha1 = "0.10" sha2 = "0.10" hmac = "0.12" -# Browser engine -browser-engine = { git = "https://github.com/steel-dev/agent-browser", branch = "as-lib", package = "agent-browser" } aes-gcm = "0.10" getrandom = "0.4" -libc = "0.2" tempfile = "3" jiff = "0.2" parking_lot = "0.12" @@ -54,8 +51,6 @@ futures-util = "0.3.32" [dev-dependencies] wiremock = "0.6" -proptest = "1" -proptest-derive = "0.8" [lints.rust] unsafe_code = "deny" diff --git a/README.md b/README.md index ac203a0..6a7d24d 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ Supported shells: `bash`, `zsh`, `fish`, `powershell`, `elvish`. | ------------------- | ------------------------------------------------------------------------------------ | | Onboarding | `init`, `forge` | | Browser lifecycle | `browser start`, `browser stop`, `browser sessions`, `browser live` | -| Browser passthrough | `steel browser ` | +| Browser actions | `browser open`, `browser snapshot`, `browser click`, `browser fill`, `browser batch`, … | | Browser profiles | `profile import`, `profile sync`, `profile list`, `profile delete` | | API tools | `scrape`, `screenshot`, `pdf` | | Local runtime | `dev install`, `dev start`, `dev stop` | @@ -86,25 +86,26 @@ Supported shells: `bash`, `zsh`, `fish`, `powershell`, `elvish`. Full flags and schemas: [CLI reference](docs/cli-reference.md). -## Agent-Browser Integration +## How `steel browser` Works -`steel browser` is directly backed by the vendored [`agent-browser`](https://github.com/steel-dev/agent-browser) runtime. Steel-owned lifecycle commands: +Each `steel browser` action is one request to the session's commands API. The browser engine runs inside the Steel session next to Chrome, so the CLI keeps no process running between commands. -- `steel browser start` -- `steel browser stop` -- `steel browser sessions` -- `steel browser live` - -All other `steel browser ` calls inherit upstream runtime behavior and route through Steel. Migration from upstream `agent-browser` is typically command-prefix only: +```bash +steel browser open https://example.com +steel browser snapshot -i +steel browser click e5 --diff +steel browser batch "fill e3 Seoul" "click e7" "snapshot -i" +``` -- before: `agent-browser ...` -- after: `steel browser ...` +- The `default` session starts on first use. Use `--session ` for more, or `--session ` to drive a session created elsewhere. +- Sessions are released after 10 minutes without commands (`steel browser start --inactivity-timeout `). +- A retried command never runs twice. Run the same command again after a lost response to get the stored result. -See the [compatibility matrix](docs/browser-compat.md), [Steel browser reference](docs/references/steel-browser.md), and [synced command catalog](docs/references/steel-browser-commands.md) for details. +See the [Steel browser reference](docs/references/steel-browser.md) and the [command catalog](docs/references/steel-browser-commands.md) for details. ## Endpoint Resolution -For browser lifecycle, browser passthrough bootstrap, and top-level API tools (`scrape`, `screenshot`, `pdf`), endpoint selection is deterministic. +For browser sessions, browser actions, and top-level API tools (`scrape`, `screenshot`, `pdf`), endpoint selection is deterministic. Self-hosted precedence (highest to lowest): @@ -119,10 +120,6 @@ Cloud precedence: 1. `STEEL_API_URL` 2. `https://api.steel.dev/v1` -Attach-flag override rule: - -- If `--cdp` or `--auto-connect` is provided, Steel bootstrap injection is skipped and passthrough args are forwarded unchanged. - ## Output and Runtime Notes - `steel scrape` defaults to markdown-first output for token efficiency; use `--raw` for the full JSON payload. @@ -136,23 +133,19 @@ Primary docs: - [Docs index](docs/README.md) - [Generated CLI reference](docs/cli-reference.md) -- [Browser compatibility](docs/browser-compat.md) -- [Upstream sync guide](docs/upstream-sync.md) Reference docs: - [References index](docs/references/README.md) - [Steel CLI reference (high-level)](docs/references/steel-cli.md) - [Steel browser reference (modes + contracts)](docs/references/steel-browser.md) -- [Steel browser commands (synced + transformed)](docs/references/steel-browser-commands.md) +- [Steel browser commands](docs/references/steel-browser-commands.md) - [Agent troubleshooting playbook](docs/references/agent-troubleshooting.md) -- [Pinned upstream source snapshot](docs/references/upstream/agent-browser-commands.source.md) Agent skills: - [Steel Skills catalog](https://github.com/steel-dev/skills) - [Steel Agent Skills docs](https://docs.steel.dev/overview/agent-skills) -- [agent-browser migration guide](https://github.com/steel-dev/skills/blob/main/steel-browser/references/migration-agent-browser.md) --- diff --git a/deny.toml b/deny.toml index 60d6aa9..0c722df 100644 --- a/deny.toml +++ b/deny.toml @@ -6,12 +6,6 @@ targets = [ "aarch64-unknown-linux-gnu", ] -[advisories] -# Transitive deps from agent-browser; we can't upgrade them directly. -ignore = [ - "RUSTSEC-2024-0436", # paste unmaintained -] - [licenses] allow = [ "MIT", @@ -37,4 +31,3 @@ allow-wildcard-paths = true [sources] unknown-registry = "deny" unknown-git = "deny" -allow-git = ["https://github.com/steel-dev/agent-browser"] diff --git a/docs/README.md b/docs/README.md index 3fd3617..37dbaa0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -5,17 +5,14 @@ This folder contains both generated command docs and hand-maintained migration/r ## Docs Map - `cli-reference.md`: auto-generated CLI command reference. -- `browser-compat.md`: Steel Browser compatibility contract and caveats. -- `migration-agent-browser.md`: migration guide from `agent-browser` to `steel browser`. -- `upstream-sync.md`: maintainer guide for vendored runtime updates. -- `references/`: stable quick-reference docs and synced upstream command catalogs. +- `references/`: stable quick-reference docs. - Profile commands and persistence are documented in `references/steel-browser.md` and `references/steel-cli.md`. ## References Subfolder - `references/steel-cli.md`: high-level CLI behavior and command-group reference. -- `references/steel-browser.md`: browser modes, lifecycle contracts, passthrough behavior. -- `references/steel-browser-commands.md`: synced/transformed upstream command catalog for `steel browser`. +- `references/steel-browser.md`: browser modes, lifecycle contracts, and how commands run. +- `references/steel-browser-commands.md`: `steel browser` command catalog. ## Regenerating Generated Docs diff --git a/docs/browser-compat.md b/docs/browser-compat.md deleted file mode 100644 index f2d17fe..0000000 --- a/docs/browser-compat.md +++ /dev/null @@ -1,58 +0,0 @@ -# Steel Browser Compatibility - -This document tracks compatibility between `steel browser` and upstream `agent-browser` command behavior. - -## Compatibility Summary - -- Steel-owned commands: `start`, `stop`, `sessions`, `live` -- Inherited commands: all non-lifecycle `steel browser ` routes to vendored upstream runtime -- Default mode: Steel cloud session bootstrap -- Self-hosted mode: `--local` or `--api-url ` - -## Behavior Matrix - -| Area | Status | Notes | -|------|--------|-------| -| Passthrough command execution | Compatible | stdout/stderr + exit codes are forwarded from runtime process | -| Inherited command names and flags | Compatible | delegated to vendored runtime | -| Help for inherited commands | Compatible | delegated help output | -| Cloud session bootstrap | Steel extension | automatic session create/attach before passthrough actions | -| `start/stop/sessions/live` | Steel extension | native lifecycle UX on top of Steel session API | -| Explicit endpoint targeting (`--api-url`) | Steel extension | implies self-hosted mode | -| Local runtime lifecycle (`dev install/start/stop`) | Steel extension | explicit install/start/stop boundaries | -| Explicit attach flags (`--cdp`, `--auto-connect`) | Compatible | bypass Steel bootstrap injection | - -## Inherited Command Families - -Inherited command groups remain upstream-driven: - -- Navigation (`open`, `back`, `forward`, `reload`, `close`) -- Interaction (`click`, `fill`, `type`, `press`, `hover`, `select`, `check`) -- Retrieval (`get text`, `get url`, `get title`, and related getters) -- Snapshot and screenshot (`snapshot`, `screenshot`, `diff`) -- Wait/debug/network/storage/device commands supported by upstream runtime - -For exhaustive command and flag coverage, use upstream command references: - -- https://github.com/vercel-labs/agent-browser/blob/b59dc4c82c0583b60849d110f27982fac85f1a07/cli/README.md -- https://github.com/vercel-labs/agent-browser/blob/b59dc4c82c0583b60849d110f27982fac85f1a07/skills/agent-browser/references/commands.md - -## Known Steel-Specific Differences - -1. Browser command path bypasses Steel auto-update checks. -2. Localhost self-hosted errors provide actionable `dev install` / `dev start` guidance. -3. Session state is persisted in `~/.config/steel/browser-session-state.json` for Steel lifecycle operations. - -## Deferred Mappings (Tracked Post-V1) - -The following areas are intentionally deferred and tracked as compatibility follow-ups: - -- profile mapping semantics (`--profile` behavior vs Steel session persistence) -- upload endpoint materialization and policy -- download endpoint materialization and policy - -## Validation Targets - -- `npm run test:unit` -- `npm run test:integration` -- `npm run browser:cloud:smoke` (credentialed env) diff --git a/docs/cli-reference.md b/docs/cli-reference.md index 04b1d4d..18992bc 100644 --- a/docs/cli-reference.md +++ b/docs/cli-reference.md @@ -25,6 +25,8 @@ Steel CLI - browser automation for AI agents. This file is generated from `steel - [steel browser fill](#steel-browser-fill) - [steel browser type](#steel-browser-type) - [steel browser press](#steel-browser-press) +- [steel browser keydown](#steel-browser-keydown) +- [steel browser keyup](#steel-browser-keyup) - [steel browser hover](#steel-browser-hover) - [steel browser focus](#steel-browser-focus) - [steel browser check](#steel-browser-check) @@ -33,23 +35,25 @@ Steel CLI - browser automation for AI agents. This file is generated from `steel - [steel browser clear](#steel-browser-clear) - [steel browser selectall](#steel-browser-selectall) - [steel browser scroll](#steel-browser-scroll) -- [steel browser scrollintoview](#steel-browser-scrollintoview) -- [steel browser setvalue](#steel-browser-setvalue) +- [steel browser drag](#steel-browser-drag) +- [steel browser upload](#steel-browser-upload) +- [steel browser mouse](#steel-browser-mouse) - [steel browser snapshot](#steel-browser-snapshot) - [steel browser screenshot](#steel-browser-screenshot) +- [steel browser pdf](#steel-browser-pdf) - [steel browser eval](#steel-browser-eval) - [steel browser find](#steel-browser-find) - [steel browser content](#steel-browser-content) - [steel browser get](#steel-browser-get) - [steel browser get text](#steel-browser-get-text) - [steel browser get html](#steel-browser-get-html) +- [steel browser get markdown](#steel-browser-get-markdown) - [steel browser get value](#steel-browser-get-value) - [steel browser get attr](#steel-browser-get-attr) - [steel browser get url](#steel-browser-get-url) - [steel browser get title](#steel-browser-get-title) - [steel browser get count](#steel-browser-get-count) - [steel browser get box](#steel-browser-get-box) -- [steel browser get styles](#steel-browser-get-styles) - [steel browser is](#steel-browser-is) - [steel browser is visible](#steel-browser-is-visible) - [steel browser is enabled](#steel-browser-is-enabled) @@ -60,29 +64,9 @@ Steel CLI - browser automation for AI agents. This file is generated from `steel - [steel browser tab new](#steel-browser-tab-new) - [steel browser tab switch](#steel-browser-tab-switch) - [steel browser tab close](#steel-browser-tab-close) -- [steel browser cookies](#steel-browser-cookies) -- [steel browser cookies set](#steel-browser-cookies-set) -- [steel browser cookies clear](#steel-browser-cookies-clear) -- [steel browser storage](#steel-browser-storage) -- [steel browser storage local](#steel-browser-storage-local) -- [steel browser storage local set](#steel-browser-storage-local-set) -- [steel browser storage local clear](#steel-browser-storage-local-clear) -- [steel browser storage session](#steel-browser-storage-session) -- [steel browser storage session set](#steel-browser-storage-session-set) -- [steel browser storage session clear](#steel-browser-storage-session-clear) -- [steel browser drag](#steel-browser-drag) -- [steel browser upload](#steel-browser-upload) -- [steel browser highlight](#steel-browser-highlight) -- [steel browser set](#steel-browser-set) -- [steel browser set viewport](#steel-browser-set-viewport) -- [steel browser set geo](#steel-browser-set-geo) -- [steel browser set offline](#steel-browser-set-offline) -- [steel browser set headers](#steel-browser-set-headers) -- [steel browser set useragent](#steel-browser-set-useragent) -- [steel browser bringtofront](#steel-browser-bringtofront) -- [steel browser diff](#steel-browser-diff) -- [steel browser diff snapshot](#steel-browser-diff-snapshot) -- [steel browser diff screenshot](#steel-browser-diff-screenshot) +- [steel browser dialog](#steel-browser-dialog) +- [steel browser status](#steel-browser-status) +- [steel browser cancel](#steel-browser-cancel) - [steel browser close](#steel-browser-close) - [steel sessions](#steel-sessions) - [steel sessions list](#steel-sessions-list) @@ -200,53 +184,52 @@ steel browser ### Subcommands -- `start`: Create or attach to a browser session +- `start`: Create a browser session - `stop`: Stop a browser session - `sessions`: List active browser sessions - `live`: Open the live session viewer - `captcha`: CAPTCHA management -- `batch`: Run multiple browser commands in a single invocation +- `batch`: Run several browser commands in one request - `navigate`: Navigate to a URL - `back`: Navigate back in history - `forward`: Navigate forward in history - `reload`: Reload the current page - `click`: Click an element - `dblclick`: Double-click an element -- `fill`: Fill an input field (clears existing value first) -- `type`: Type text into an element (appends to existing value) -- `press`: Press a keyboard key +- `fill`: Fill an input field (replaces the current value) +- `type`: Type text into an element key by key (appends to the current value) +- `press`: Press a key or chord (Enter, Escape, Tab, Control+a) +- `keydown`: Hold a key down until keyup +- `keyup`: Release a key held with keydown - `hover`: Hover over an element - `focus`: Focus an element -- `check`: Check a checkbox or radio button -- `uncheck`: Uncheck a checkbox -- `select`: Select option(s) from a dropdown +- `check`: Check a checkbox, radio button, or switch +- `uncheck`: Uncheck a checkbox or switch +- `select`: Select option(s) in a element ### Usage @@ -560,8 +567,8 @@ steel browser select ### Parameters -- `selector` (string, required): Select element selector or ref -- `values` (string[], optional): Option value(s) to select +- `selector` (string, required): Select element ref or CSS selector +- `values` (string[], optional): Option value(s) or label(s) to select ## steel browser clear @@ -575,7 +582,7 @@ steel browser clear ### Parameters -- `selector` (string, required): Element selector or ref (e.g. @e1) +- `selector` (string, required): Element ref (e.g. e5) or CSS selector ## steel browser selectall @@ -589,7 +596,7 @@ steel browser selectall ### Parameters -- `selector` (string, required): Element selector or ref (e.g. @e1) +- `selector` (string, required): Element ref (e.g. e5) or CSS selector ## steel browser scroll @@ -603,42 +610,63 @@ steel browser scroll ### Parameters -- `direction` (string, optional): Direction: up, down, left, right +- `direction` (enum, optional): Direction: up, down, left, right (default: down) - `amount` (string, optional): Scroll amount in pixels (default: 300) -- `-s, --selector` (string, optional): Element selector to scroll +- `-s, --selector` (string, optional): Element to scroll instead of the page + +## steel browser drag + +Drag an element onto another + +### Usage + +```bash +steel browser drag +``` -## steel browser scrollintoview +### Parameters + +- `source` (string, required): Element to drag (ref or CSS selector) +- `target` (string, required): Element to drop on (ref or CSS selector) -Scroll an element into view +## steel browser upload + +Upload files to a file input ### Usage ```bash -steel browser scrollintoview +steel browser upload ``` ### Parameters -- `selector` (string, required): Element selector or ref (e.g. @e1) +- `selector` (string, required): File input ref or CSS selector +- `files` (string[], optional): Local files to upload, or names of files already in the session -## steel browser setvalue +## steel browser mouse -Set the value of an input element (without triggering events) +Mouse input at a point, for canvases and maps ### Usage ```bash -steel browser setvalue +steel browser mouse ``` ### Parameters -- `selector` (string, required): Element selector or ref -- `value` (string[], optional): Value to set +- `action` (enum, required): move, down, up, click, or wheel +- `x` (string, optional): X in CSS pixels of the visible page +- `y` (string, optional): Y in CSS pixels of the visible page +- `--button` (enum, optional): Mouse button: left, right, middle +- `--clicks` (string, optional): Click count for click (1 to 3) +- `--dx` (string, optional): Horizontal wheel delta +- `--dy` (string, optional): Vertical wheel delta ## steel browser snapshot -Take an accessibility tree snapshot +Take an accessibility tree snapshot with element refs ### Usage @@ -649,10 +677,8 @@ steel browser snapshot ### Parameters - `-i, --interactive` (boolean, optional): Show only interactive elements -- `-s, --selector` (string, optional): Restrict snapshot to a subtree -- `-c, --compact` (boolean, optional): Use compact output format +- `-c, --compact` (boolean, optional): Keep only lines with refs or values, and their ancestors - `-d, --max-depth` (string, optional): Maximum nesting depth -- `-u, --urls` (boolean, optional): Include URLs in the snapshot ## steel browser screenshot @@ -668,14 +694,29 @@ steel browser screenshot - `-f, --full-page` (boolean, optional): Capture the full scrollable page - `-o, --output` (string, optional): Output file path -- `--selector` (string, optional): Restrict screenshot to an element -- `--format` (string, optional): Image format: png, jpeg, webp +- `--selector` (string, optional): Capture one element (ref or CSS selector) +- `--format` (enum, optional): Image format: png, jpeg, webp (default: from the output extension) - `--quality` (string, optional): JPEG/WebP quality (0-100) -- `--annotate` (boolean, optional): Annotate interactive elements on the screenshot + +## steel browser pdf + +Save the page as a PDF (headless sessions only) + +### Usage + +```bash +steel browser pdf +``` + +### Parameters + +- `-o, --output` (string, optional): Output file path +- `--landscape` (boolean, optional): Use landscape orientation +- `--print-background` (boolean, optional): Print background graphics ## steel browser eval -Evaluate JavaScript in the page +Run JavaScript in the page and print its value ### Usage @@ -685,11 +726,11 @@ steel browser eval ### Parameters -- `script` (string, required): JavaScript expression to evaluate +- `script` (string, required): JavaScript expression or function body; its value is printed ## steel browser find -Find all elements matching a selector +Find elements and print their refs ### Usage @@ -699,11 +740,14 @@ steel browser find ### Parameters -- `selector` (string, required): Element selector or ref (e.g. @e1) +- `value` (string, required): What to look for (a CSS selector unless --by says otherwise) +- `--by` (enum, optional): Locator kind +- `--name` (string, optional): Accessible name, with --by role +- `--exact` (boolean, optional): Match the text exactly instead of as a case-insensitive substring ## steel browser content -Get the page HTML content +Get the page HTML ### Usage @@ -713,7 +757,7 @@ steel browser content ## steel browser get -Get information about elements or page +Get information about elements or the page ### Usage @@ -723,19 +767,19 @@ steel browser get ### Subcommands -- `text`: Get element text content -- `html`: Get element inner HTML -- `value`: Get input/textarea value -- `attr`: Get element attribute value -- `url`: Get current page URL -- `title`: Get current page title +- `text`: Get the visible text of an element +- `html`: Get the inner HTML of an element +- `markdown`: Get the main content of an element or the page as Markdown +- `value`: Get an input or textarea value +- `attr`: Get an element attribute +- `url`: Get the page URL +- `title`: Get the page title - `count`: Count matching elements -- `box`: Get element bounding box -- `styles`: Get element CSS styles +- `box`: Get an element's bounding box ## steel browser get text -Get element text content +Get the visible text of an element ### Usage @@ -745,11 +789,11 @@ steel browser get text ### Parameters -- `selector` (string, required): Element selector or ref (e.g. @e1) +- `selector` (string, required): Element ref (e.g. e5) or CSS selector ## steel browser get html -Get element inner HTML +Get the inner HTML of an element ### Usage @@ -759,11 +803,25 @@ steel browser get html ### Parameters -- `selector` (string, required): Element selector or ref (e.g. @e1) +- `selector` (string, required): Element ref (e.g. e5) or CSS selector + +## steel browser get markdown + +Get the main content of an element or the page as Markdown + +### Usage + +```bash +steel browser get markdown +``` + +### Parameters + +- `selector` (string, optional): Element ref (e.g. e5) or CSS selector; the whole page if omitted ## steel browser get value -Get input/textarea value +Get an input or textarea value ### Usage @@ -773,11 +831,11 @@ steel browser get value ### Parameters -- `selector` (string, required): Element selector or ref (e.g. @e1) +- `selector` (string, required): Element ref (e.g. e5) or CSS selector ## steel browser get attr -Get element attribute value +Get an element attribute ### Usage @@ -787,12 +845,12 @@ steel browser get attr ### Parameters -- `selector` (string, required): Element selector or ref +- `selector` (string, required): Element ref or CSS selector - `attribute` (string, required): Attribute name ## steel browser get url -Get current page URL +Get the page URL ### Usage @@ -802,7 +860,7 @@ steel browser get url ## steel browser get title -Get current page title +Get the page title ### Usage @@ -822,11 +880,11 @@ steel browser get count ### Parameters -- `selector` (string, required): Element selector or ref (e.g. @e1) +- `selector` (string, required): Element ref (e.g. e5) or CSS selector ## steel browser get box -Get element bounding box +Get an element's bounding box ### Usage @@ -836,22 +894,7 @@ steel browser get box ### Parameters -- `selector` (string, required): Element selector or ref (e.g. @e1) - -## steel browser get styles - -Get element CSS styles - -### Usage - -```bash -steel browser get styles -``` - -### Parameters - -- `selector` (string, required): Element selector or ref -- `--property` (string[], optional): CSS property names to query (returns all computed styles if omitted) +- `selector` (string, required): Element ref (e.g. e5) or CSS selector ## steel browser is @@ -865,13 +908,13 @@ steel browser is ### Subcommands -- `visible`: Check if element is visible -- `enabled`: Check if element is enabled -- `checked`: Check if element is checked +- `visible`: Check if an element is visible +- `enabled`: Check if an element is enabled +- `checked`: Check if an element is checked ## steel browser is visible -Check if element is visible +Check if an element is visible ### Usage @@ -881,11 +924,11 @@ steel browser is visible ### Parameters -- `selector` (string, required): Element selector or ref (e.g. @e1) +- `selector` (string, required): Element ref (e.g. e5) or CSS selector ## steel browser is enabled -Check if element is enabled +Check if an element is enabled ### Usage @@ -895,11 +938,11 @@ steel browser is enabled ### Parameters -- `selector` (string, required): Element selector or ref (e.g. @e1) +- `selector` (string, required): Element ref (e.g. e5) or CSS selector ## steel browser is checked -Check if element is checked +Check if an element is checked ### Usage @@ -909,11 +952,11 @@ steel browser is checked ### Parameters -- `selector` (string, required): Element selector or ref (e.g. @e1) +- `selector` (string, required): Element ref (e.g. e5) or CSS selector ## steel browser wait -Wait for a condition (text, selector, URL, function, or timeout) +Wait for an element, text, URL, load state, download, or a fixed time ### Usage @@ -923,17 +966,19 @@ steel browser wait ### Parameters -- `--timeout` (string, optional): Timeout in milliseconds -- `-t, --text` (string, optional): Wait for text to appear on page -- `--selector` (string, optional): Wait for a CSS selector -- `--state` (string, optional): Selector state: visible, hidden, attached, detached -- `-u, --url` (string, optional): Wait for URL to contain this string -- `-f, --function` (string, optional): Wait for a JS function to return truthy -- `-l, --load-state` (string, optional): Wait for load state: load, domcontentloaded, networkidle +- `ms` (string, optional): Fixed time to wait in milliseconds (at most 30000) +- `--timeout` (string, optional): Timeout in milliseconds (at most 50000) +- `-t, --text` (string, optional): Wait for text to appear on the page +- `--selector` (string, optional): Wait for an element (ref or CSS selector) +- `--state` (enum, optional): Element state: visible, hidden, attached, detached +- `-u, --url` (string, optional): Wait for the URL to contain this string (`*` matches anything) +- `-l, --load-state` (enum, optional): Wait for a load state: load, domcontentloaded, networkidle +- `--download` (boolean, optional): Wait for a download to finish and save it +- `-o, --output` (string, optional): Where to save the download (default: its file name in the current directory) ## steel browser tab -Manage tabs +List, open, switch, or close tabs ### Usage @@ -944,9 +989,9 @@ steel browser tab ### Subcommands - `list`: List open tabs -- `new`: Open a new tab -- `switch`: Switch to a tab by index -- `close`: Close a tab (active tab if no index given) +- `new`: Open a new tab and switch to it +- `switch`: Switch to a tab +- `close`: Close a tab (the current tab if omitted) ## steel browser tab list @@ -960,7 +1005,7 @@ steel browser tab list ## steel browser tab new -Open a new tab +Open a new tab and switch to it ### Usage @@ -974,7 +1019,7 @@ steel browser tab new ## steel browser tab switch -Switch to a tab by index +Switch to a tab ### Usage @@ -984,11 +1029,11 @@ steel browser tab switch ### Parameters -- `index` (string, required): Tab index to switch to +- `tab` (string, required): Tab id from `tab list`, such as t2 ## steel browser tab close -Close a tab (active tab if no index given) +Close a tab (the current tab if omitted) ### Usage @@ -998,347 +1043,51 @@ steel browser tab close ### Parameters -- `index` (string, optional): Tab index to close (closes active tab if omitted) - -## steel browser cookies - -Manage browser cookies - -### Usage - -```bash -steel browser cookies -``` - -### Subcommands - -- `set`: Set a cookie -- `clear`: Clear all cookies - -## steel browser cookies set - -Set a cookie - -### Usage - -```bash -steel browser cookies set -``` - -### Parameters - -- `name` (string, required): Cookie name -- `value` (string, required): Cookie value -- `--domain` (string, optional): Cookie domain -- `--path` (string, optional): Cookie path -- `--secure` (boolean, optional): Secure flag -- `--http-only` (boolean, optional): HttpOnly flag - -## steel browser cookies clear - -Clear all cookies - -### Usage - -```bash -steel browser cookies clear -``` - -## steel browser storage - -Manage browser storage (localStorage/sessionStorage) - -### Usage - -```bash -steel browser storage -``` - -### Subcommands - -- `local`: Manage localStorage -- `session`: Manage sessionStorage - -## steel browser storage local - -Manage localStorage - -### Usage - -```bash -steel browser storage local -``` - -### Subcommands - -- `set`: Set a storage value -- `clear`: Clear all values - -## steel browser storage local set - -Set a storage value - -### Usage - -```bash -steel browser storage local set -``` - -### Parameters - -- `key` (string, required): Key to set -- `value` (string, required): Value to set - -## steel browser storage local clear - -Clear all values - -### Usage - -```bash -steel browser storage local clear -``` - -## steel browser storage session - -Manage sessionStorage - -### Usage - -```bash -steel browser storage session -``` - -### Subcommands - -- `set`: Set a storage value -- `clear`: Clear all values - -## steel browser storage session set - -Set a storage value - -### Usage - -```bash -steel browser storage session set -``` - -### Parameters - -- `key` (string, required): Key to set -- `value` (string, required): Value to set - -## steel browser storage session clear - -Clear all values - -### Usage - -```bash -steel browser storage session clear -``` - -## steel browser drag - -Drag and drop from one element to another - -### Usage - -```bash -steel browser drag -``` - -### Parameters - -- `source` (string, required): Source element selector or ref -- `target` (string, required): Target element selector or ref - -## steel browser upload - -Upload files to a file input element - -### Usage - -```bash -steel browser upload -``` - -### Parameters - -- `selector` (string, required): File input element selector or ref -- `files` (string[], optional): File paths to upload - -## steel browser highlight - -Visually highlight an element - -### Usage - -```bash -steel browser highlight -``` - -### Parameters - -- `selector` (string, required): Element selector or ref (e.g. @e1) - -## steel browser set - -Configure browser settings (viewport, geolocation, etc.) - -### Usage - -```bash -steel browser set -``` - -### Subcommands - -- `viewport`: Set viewport size -- `geo`: Set geolocation -- `offline`: Toggle offline mode -- `headers`: Set extra HTTP headers (JSON string) -- `useragent`: Set browser user agent string - -## steel browser set viewport - -Set viewport size - -### Usage - -```bash -steel browser set viewport -``` - -### Parameters - -- `width` (string, required): Viewport width in pixels -- `height` (string, required): Viewport height in pixels -- `--scale` (string, optional): Device scale factor -- `--mobile` (boolean, optional): Emulate mobile device - -## steel browser set geo - -Set geolocation - -### Usage - -```bash -steel browser set geo -``` - -Aliases: `geolocation` - -### Parameters - -- `latitude` (string, required): Latitude -- `longitude` (string, required): Longitude -- `--accuracy` (string, optional): Accuracy in meters - -## steel browser set offline - -Toggle offline mode - -### Usage - -```bash -steel browser set offline -``` - -### Parameters - -- `state` (string, required): "on" to enable offline mode, "off" to disable +- `tab` (string, optional): Tab id from `tab list`, such as t2 -## steel browser set headers +## steel browser dialog -Set extra HTTP headers (JSON string) +Accept or dismiss an open dialog ### Usage ```bash -steel browser set headers +steel browser dialog ``` ### Parameters -- `json` (string, required): JSON string of headers (e.g. '{"X-Key":"value"}') +- `action` (enum, required): accept or dismiss +- `id` (string, optional): Dialog id such as d-2 (default: the last dialog the CLI saw) +- `--text` (string, optional): Answer for a prompt dialog -## steel browser set useragent +## steel browser status -Set browser user agent string +Wait for a command that is still running ### Usage ```bash -steel browser set useragent +steel browser status ``` -Aliases: `ua` - ### Parameters -- `user_agent` (string[], optional): User agent string - -## steel browser bringtofront - -Bring the browser window to the foreground - -### Usage - -```bash -steel browser bringtofront -``` - -## steel browser diff - -Compare snapshots or screenshots - -### Usage - -```bash -steel browser diff -``` - -### Subcommands - -- `snapshot`: Compare current snapshot against a baseline -- `screenshot`: Compare current screenshot against a baseline image - -## steel browser diff snapshot - -Compare current snapshot against a baseline - -### Usage - -```bash -steel browser diff snapshot -``` - -### Parameters - -- `-b, --baseline` (string, optional): Baseline snapshot text or file path -- `-s, --selector` (string, optional): Restrict snapshot to a subtree -- `-c, --compact` (boolean, optional): Use compact output format -- `-d, --max-depth` (string, optional): Maximum nesting depth +- `execution` (string, required): Execution id such as x-7 -## steel browser diff screenshot +## steel browser cancel -Compare current screenshot against a baseline image +Stop a command that is still running ### Usage ```bash -steel browser diff screenshot +steel browser cancel ``` ### Parameters -- `-b, --baseline` (string, required): Baseline image file path (required) -- `-t, --threshold` (string, optional): Color difference threshold (0.0–1.0) -- `-o, --output` (string, optional): Save diff image to this path -- `-s, --selector` (string, optional): Restrict screenshot to an element -- `--full-page` (boolean, optional): Capture the full scrollable page +- `execution` (string, required): Execution id such as x-7 ## steel browser close @@ -1405,7 +1154,7 @@ steel sessions get ### Parameters - `session_id` (string, optional): Cloud session ID -- `--session` (string, optional): Resolve session ID from a local daemon session name +- `--session` (string, optional): Resolve session ID from a local browser session name ### API Operations @@ -1426,7 +1175,7 @@ steel sessions release - `session_id` (string, optional): Cloud session ID - `-a, --all` (boolean, optional): Release all active cloud sessions -- `--session` (string, optional): Resolve session ID from a local daemon session name +- `--session` (string, optional): Resolve session ID from a local browser session name ### API Operations @@ -1448,7 +1197,7 @@ steel sessions logs ### Parameters - `session_id` (string, optional): Cloud session ID -- `--session` (string, optional): Resolve session ID from a local daemon session name +- `--session` (string, optional): Resolve session ID from a local browser session name - `-f, --follow` (boolean, optional): Stream live frames over WebSocket after printing historical data - `--namespace` (string, optional): Filter by namespace - `--start-time` (string, optional): ISO timestamp lower bound @@ -1477,7 +1226,7 @@ steel sessions agent-logs ### Parameters - `session_id` (string, optional): Cloud session ID -- `--session` (string, optional): Resolve session ID from a local daemon session name +- `--session` (string, optional): Resolve session ID from a local browser session name - `-f, --follow` (boolean, optional): Stream live frames over WebSocket after printing historical data - `--namespace` (string, optional): Filter by namespace - `--start-time` (string, optional): ISO timestamp lower bound @@ -1505,7 +1254,7 @@ steel sessions traces ### Parameters - `session_id` (string, optional): Cloud session ID -- `--session` (string, optional): Resolve session ID from a local daemon session name +- `--session` (string, optional): Resolve session ID from a local browser session name - `-f, --follow` (boolean, optional): Stream live trace frames over WebSocket after printing historical data - `--namespace` (string, optional): Filter by namespace - `--start-time` (string, optional): ISO timestamp lower bound diff --git a/docs/references/README.md b/docs/references/README.md index af074ff..4784d46 100644 --- a/docs/references/README.md +++ b/docs/references/README.md @@ -9,11 +9,8 @@ Use these docs for migration guidance, compatibility assumptions, and architectu - [Steel CLI Reference (High-Level)](./steel-cli.md) - [Steel Browser Reference (Commands + Modes)](./steel-browser.md) - [Agent Troubleshooting Playbook](./agent-troubleshooting.md) -- [Steel Browser Commands (Synced + Transformed)](./steel-browser-commands.md) +- [Steel Browser Commands](./steel-browser-commands.md) ## Related Docs - [Auto-generated CLI Reference](../cli-reference.md) -- [Browser Compatibility](../browser-compat.md) -- [agent-browser Migration Guide](../migration-agent-browser.md) -- [Upstream Sync Guide](../upstream-sync.md) diff --git a/docs/references/agent-troubleshooting.md b/docs/references/agent-troubleshooting.md index 5dd4708..bcebc8b 100644 --- a/docs/references/agent-troubleshooting.md +++ b/docs/references/agent-troubleshooting.md @@ -31,8 +31,14 @@ From `steel browser start` output: - `connect_url`: display-safe URL; sensitive query values are redacted. Do not assume `connect_url` contains usable raw credentials. -Likewise, `steel browser sessions` returns display-safe `connectUrl` fields. -It emits compact metadata by default; add `--raw` for full session payloads. + +From action output (`--json`, or any piped output): + +- `success`: whether the command did what it was asked. +- `error_code`: the engine error code on failure, such as `stale_ref`. +- `data.page`: the tab, URL, and title the command used. +- `data.results`: one entry per command, with fields such as `snapshot` or `value`. +- `data.notices`: dialogs, new tabs, downloads, and replays to act on. ## Building a Full CDP URL Safely @@ -77,6 +83,14 @@ steel browser start --local --session "$SESSION_NAME" - `Session "" is not running...`: the session expired or the name is misspelled. Check `steel browser sessions`, then run `steel browser start --session `. +- `session_ended`: the session was released, often by the 10-minute inactivity + timeout. Start a new one and open the page again. +- `stale_ref`: take a new snapshot and use the new refs. +- `tab_required`: several tabs are open. Run `steel browser tab list`, then + `steel browser tab switch `. +- `dialog_pending`: answer with `steel browser dialog accept` or `dismiss`. +- `delivery_failed`: the API could not reach the browser. Run the same command + again; it will not run twice. - Stale state: `steel browser stop --all`, then start a new named session. diff --git a/docs/references/steel-browser-commands.md b/docs/references/steel-browser-commands.md index 3561f4a..2b6982d 100644 --- a/docs/references/steel-browser-commands.md +++ b/docs/references/steel-browser-commands.md @@ -1,276 +1,160 @@ -# Steel Browser Commands (Synced + Transformed) +# Steel Browser Commands -> Generated file. Do not edit manually. -> Source: https://raw.githubusercontent.com/vercel-labs/agent-browser/b59dc4c82c0583b60849d110f27982fac85f1a07/skills/agent-browser/references/commands.md -> Pinned commit: `b59dc4c82c0583b60849d110f27982fac85f1a07` -> Generated at: 2026-02-26T00:37:52.138Z +Every `steel browser` action sends one request to the session's commands API (`POST /v1/sessions/{id}/commands`). The browser engine runs next to Chrome inside the session, so the CLI keeps no process running between commands. -## Notes - -- Upstream `agent-browser` command-prefix usage is transformed to `steel browser` for migration-friendly examples. -- Runtime-specific env vars and config names (for example `AGENT_BROWSER_*`) are preserved as upstream runtime details. -- Steel-native lifecycle commands (`steel browser start|stop|sessions|live`) are documented in `./steel-browser.md`. - -# Command Reference (Steel Browser Adaptation) - -Complete reference for all steel browser commands. For quick start and common patterns, see SKILL.md. - -## Navigation - -```bash -steel browser open # Navigate to URL (aliases: goto, navigate) - # Supports: https://, http://, file://, about:, data:// - # Auto-prepends https:// if no protocol given -steel browser back # Go back -steel browser forward # Go forward -steel browser reload # Reload page -steel browser close # Close browser (aliases: quit, exit) -steel browser connect 9222 # Connect to browser via CDP port -``` - -## Snapshot (page analysis) - -```bash -steel browser snapshot # Full accessibility tree -steel browser snapshot -i # Interactive elements only (recommended) -steel browser snapshot -c # Compact output -steel browser snapshot -d 3 # Limit depth to 3 -steel browser snapshot -s "#main" # Scope to CSS selector -``` - -## Interactions (use @refs from snapshot) - -```bash -steel browser click @e1 # Click -steel browser click @e1 --new-tab # Click and open in new tab -steel browser dblclick @e1 # Double-click -steel browser focus @e1 # Focus element -steel browser fill @e2 "text" # Clear and type -steel browser type @e2 "text" # Type without clearing -steel browser press Enter # Press key (alias: key) -steel browser press Control+a # Key combination -steel browser keydown Shift # Hold key down -steel browser keyup Shift # Release key -steel browser hover @e1 # Hover -steel browser check @e1 # Check checkbox -steel browser uncheck @e1 # Uncheck checkbox -steel browser select @e1 "value" # Select dropdown option -steel browser select @e1 "a" "b" # Select multiple options -steel browser scroll down 500 # Scroll page (default: down 300px) -steel browser scrollintoview @e1 # Scroll element into view (alias: scrollinto) -steel browser drag @e1 @e2 # Drag and drop -steel browser upload @e1 file.pdf # Upload files -``` - -## Get Information +## Sessions ```bash -steel browser get text @e1 # Get element text -steel browser get html @e1 # Get innerHTML -steel browser get value @e1 # Get input value -steel browser get attr @e1 href # Get attribute -steel browser get title # Get page title -steel browser get url # Get current URL -steel browser get count ".item" # Count matching elements -steel browser get box @e1 # Get bounding box -steel browser get styles @e1 # Get computed styles (font, color, bg, etc.) +steel browser start [--session ] # create a session (default name: default) +steel browser sessions # list local sessions that are still live +steel browser live # print the live viewer URL +steel browser stop [--session ] # release the session (-a for all) +steel browser close # same as stop (aliases: quit, exit) ``` -## Check State +- Actions without `--session` use the `default` session. It starts on first use. +- `--session ` targets a named session. A session ID also works, so you can drive a session that the SDK, the MCP server, or the dashboard created. +- New sessions are released after 10 minutes without commands. Change this with `steel browser start --inactivity-timeout `. `0` turns it off. +- The CLI keeps each session in `~/.config/steel/browser-sessions/.json`: the session ID, the last operation id, the current tab, the event cursor, and the last snapshot. -```bash -steel browser is visible @e1 # Check if visible -steel browser is enabled @e1 # Check if enabled -steel browser is checked @e1 # Check if checked -``` - -## Screenshots and PDF +## Navigation ```bash -steel browser screenshot # Save to temporary directory -steel browser screenshot path.png # Save to specific path -steel browser screenshot --full # Full page -steel browser pdf output.pdf # Save as PDF +steel browser open # aliases: navigate, goto. Adds https:// when the scheme is missing +steel browser open --wait-until networkidle +steel browser back +steel browser forward +steel browser reload ``` -## Video Recording - -```bash -steel browser record start ./demo.webm # Start recording -steel browser click @e1 # Perform actions -steel browser record stop # Stop and save video -steel browser record restart ./take2.webm # Stop current + start new -``` +`open` waits up to 15 seconds for the page to load. -## Wait +## Snapshot and refs ```bash -steel browser wait @e1 # Wait for element -steel browser wait 2000 # Wait milliseconds -steel browser wait --text "Success" # Wait for text (or -t) -steel browser wait --url "**/dashboard" # Wait for URL pattern (or -u) -steel browser wait --load networkidle # Wait for network idle (or -l) -steel browser wait --fn "window.ready" # Wait for JS condition (or -f) +steel browser snapshot # full accessibility tree +steel browser snapshot -i # interactive elements only (recommended) +steel browser snapshot -c # lines with refs or values, and their ancestors +steel browser snapshot -d 3 # limit depth ``` -## Mouse Control +Snapshot lines carry refs such as `[ref=e5]`. Pass a ref (`e5`, `@e5`) or a CSS selector wherever a command takes ``. -```bash -steel browser mouse move 100 200 # Move mouse -steel browser mouse down left # Press button -steel browser mouse up left # Release button -steel browser mouse wheel 100 # Scroll wheel -``` +- A ref names one element. It fails with `stale_ref` when the element left the page or now shows different content. Take a new snapshot then. +- A ref knows its tab, so commands on refs work on any tab. -## Semantic Locators (alternative to refs) +## Interaction ```bash -steel browser find role button click --name "Submit" -steel browser find text "Sign In" click -steel browser find text "Sign In" click --exact # Exact match only -steel browser find label "Email" fill "user@test.com" -steel browser find placeholder "Search" type "query" -steel browser find alt "Logo" click -steel browser find title "Close" click -steel browser find testid "submit-btn" click -steel browser find first ".item" click -steel browser find last ".item" click -steel browser find nth 2 "a" hover +steel browser click # --count 2 for a double-click +steel browser dblclick +steel browser fill # replace the value +steel browser type # type key by key; --clear, --delay +steel browser press # Enter, Tab, Escape, Control+a (alias: key) +steel browser keydown # hold a key; keyup releases it +steel browser keyup +steel browser hover +steel browser focus +steel browser check +steel browser uncheck +steel browser select +steel browser clear +steel browser selectall +steel browser scroll [up|down|left|right] [px] # -s scrolls an element +steel browser drag +steel browser upload # local files are uploaded to the session first +steel browser mouse click # move, down, up, click, wheel; --button, --clicks, --dx, --dy ``` -## Browser Settings +Add `--diff` to any command to print what it changed on the page, compared with your last snapshot. -```bash -steel browser set viewport 1920 1080 # Set viewport size -steel browser set device "iPhone 14" # Emulate device -steel browser set geo 37.7749 -122.4194 # Set geolocation (alias: geolocation) -steel browser set offline on # Toggle offline mode -steel browser set headers '{"X-Key":"v"}' # Extra HTTP headers -steel browser set credentials user pass # HTTP basic auth (alias: auth) -steel browser set media dark # Emulate color scheme -steel browser set media light reduced-motion # Light mode + reduced motion -``` - -## Cookies and Storage +## Reading the page ```bash -steel browser cookies # Get all cookies -steel browser cookies set name value # Set cookie -steel browser cookies clear # Clear cookies -steel browser storage local # Get all localStorage -steel browser storage local key # Get specific key -steel browser storage local set k v # Set value -steel browser storage local clear # Clear all +steel browser get text # visible text of an element +steel browser get html # inner HTML of an element +steel browser get markdown [sel] # main content of an element or the page as Markdown +steel browser get value +steel browser get attr +steel browser get url +steel browser get title +steel browser get count +steel browser get box +steel browser is visible|enabled|checked +steel browser find # CSS by default; --by role|text|label|placeholder|alt|title|testid, --name, --exact +steel browser content # page HTML +steel browser eval