agent-browser 0.1.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/AGENTS.md +26 -0
  2. package/README.md +68 -11
  3. package/benchmark/benchmark.ts +521 -0
  4. package/benchmark/run.ts +322 -0
  5. package/bin/agent-browser +0 -0
  6. package/cli/Cargo.lock +114 -0
  7. package/cli/Cargo.toml +17 -0
  8. package/cli/src/main.rs +332 -0
  9. package/cli/target/.rustc_info.json +1 -0
  10. package/cli/target/CACHEDIR.TAG +3 -0
  11. package/cli/target/release/.cargo-lock +0 -0
  12. package/cli/target/release/.fingerprint/agent-browser-5894536b887e2ce7/bin-agent-browser +1 -0
  13. package/cli/target/release/.fingerprint/agent-browser-5894536b887e2ce7/bin-agent-browser.json +1 -0
  14. package/cli/target/release/.fingerprint/agent-browser-5894536b887e2ce7/dep-bin-agent-browser +0 -0
  15. package/cli/target/release/.fingerprint/agent-browser-5894536b887e2ce7/invoked.timestamp +1 -0
  16. package/cli/target/release/.fingerprint/agent-browser-5894536b887e2ce7/output-bin-agent-browser +2 -0
  17. package/cli/target/release/.fingerprint/itoa-653b9192107a1caa/dep-lib-itoa +0 -0
  18. package/cli/target/release/.fingerprint/itoa-653b9192107a1caa/invoked.timestamp +1 -0
  19. package/cli/target/release/.fingerprint/itoa-653b9192107a1caa/lib-itoa +1 -0
  20. package/cli/target/release/.fingerprint/itoa-653b9192107a1caa/lib-itoa.json +1 -0
  21. package/cli/target/release/.fingerprint/libc-0303d277881093f4/build-script-build-script-build +1 -0
  22. package/cli/target/release/.fingerprint/libc-0303d277881093f4/build-script-build-script-build.json +1 -0
  23. package/cli/target/release/.fingerprint/libc-0303d277881093f4/dep-build-script-build-script-build +0 -0
  24. package/cli/target/release/.fingerprint/libc-0303d277881093f4/invoked.timestamp +1 -0
  25. package/cli/target/release/.fingerprint/libc-b8c0d8e35a1980d3/run-build-script-build-script-build +1 -0
  26. package/cli/target/release/.fingerprint/libc-b8c0d8e35a1980d3/run-build-script-build-script-build.json +1 -0
  27. package/cli/target/release/.fingerprint/libc-d843359d3dd4757b/dep-lib-libc +0 -0
  28. package/cli/target/release/.fingerprint/libc-d843359d3dd4757b/invoked.timestamp +1 -0
  29. package/cli/target/release/.fingerprint/libc-d843359d3dd4757b/lib-libc +1 -0
  30. package/cli/target/release/.fingerprint/libc-d843359d3dd4757b/lib-libc.json +1 -0
  31. package/cli/target/release/.fingerprint/memchr-dcaf8011940d18dd/dep-lib-memchr +0 -0
  32. package/cli/target/release/.fingerprint/memchr-dcaf8011940d18dd/invoked.timestamp +1 -0
  33. package/cli/target/release/.fingerprint/memchr-dcaf8011940d18dd/lib-memchr +1 -0
  34. package/cli/target/release/.fingerprint/memchr-dcaf8011940d18dd/lib-memchr.json +1 -0
  35. package/cli/target/release/.fingerprint/proc-macro2-291b57751730d5b3/build-script-build-script-build +1 -0
  36. package/cli/target/release/.fingerprint/proc-macro2-291b57751730d5b3/build-script-build-script-build.json +1 -0
  37. package/cli/target/release/.fingerprint/proc-macro2-291b57751730d5b3/dep-build-script-build-script-build +0 -0
  38. package/cli/target/release/.fingerprint/proc-macro2-291b57751730d5b3/invoked.timestamp +1 -0
  39. package/cli/target/release/.fingerprint/proc-macro2-a753b344a6b4aa98/dep-lib-proc_macro2 +0 -0
  40. package/cli/target/release/.fingerprint/proc-macro2-a753b344a6b4aa98/invoked.timestamp +1 -0
  41. package/cli/target/release/.fingerprint/proc-macro2-a753b344a6b4aa98/lib-proc_macro2 +1 -0
  42. package/cli/target/release/.fingerprint/proc-macro2-a753b344a6b4aa98/lib-proc_macro2.json +1 -0
  43. package/cli/target/release/.fingerprint/proc-macro2-fc2999f6676f03db/run-build-script-build-script-build +1 -0
  44. package/cli/target/release/.fingerprint/proc-macro2-fc2999f6676f03db/run-build-script-build-script-build.json +1 -0
  45. package/cli/target/release/.fingerprint/quote-352ae41707d371c9/run-build-script-build-script-build +1 -0
  46. package/cli/target/release/.fingerprint/quote-352ae41707d371c9/run-build-script-build-script-build.json +1 -0
  47. package/cli/target/release/.fingerprint/quote-7d13be3cbe4f9de4/build-script-build-script-build +1 -0
  48. package/cli/target/release/.fingerprint/quote-7d13be3cbe4f9de4/build-script-build-script-build.json +1 -0
  49. package/cli/target/release/.fingerprint/quote-7d13be3cbe4f9de4/dep-build-script-build-script-build +0 -0
  50. package/cli/target/release/.fingerprint/quote-7d13be3cbe4f9de4/invoked.timestamp +1 -0
  51. package/cli/target/release/.fingerprint/quote-833e6725e0f7d298/dep-lib-quote +0 -0
  52. package/cli/target/release/.fingerprint/quote-833e6725e0f7d298/invoked.timestamp +1 -0
  53. package/cli/target/release/.fingerprint/quote-833e6725e0f7d298/lib-quote +1 -0
  54. package/cli/target/release/.fingerprint/quote-833e6725e0f7d298/lib-quote.json +1 -0
  55. package/cli/target/release/.fingerprint/serde-b8c046c16de48f41/run-build-script-build-script-build +1 -0
  56. package/cli/target/release/.fingerprint/serde-b8c046c16de48f41/run-build-script-build-script-build.json +1 -0
  57. package/cli/target/release/.fingerprint/serde-d35d32ab52b82a81/build-script-build-script-build +1 -0
  58. package/cli/target/release/.fingerprint/serde-d35d32ab52b82a81/build-script-build-script-build.json +1 -0
  59. package/cli/target/release/.fingerprint/serde-d35d32ab52b82a81/dep-build-script-build-script-build +0 -0
  60. package/cli/target/release/.fingerprint/serde-d35d32ab52b82a81/invoked.timestamp +1 -0
  61. package/cli/target/release/.fingerprint/serde-d6fb44202dad3efd/dep-lib-serde +0 -0
  62. package/cli/target/release/.fingerprint/serde-d6fb44202dad3efd/invoked.timestamp +1 -0
  63. package/cli/target/release/.fingerprint/serde-d6fb44202dad3efd/lib-serde +1 -0
  64. package/cli/target/release/.fingerprint/serde-d6fb44202dad3efd/lib-serde.json +1 -0
  65. package/cli/target/release/.fingerprint/serde_core-0f7ba2581c8c0423/dep-lib-serde_core +0 -0
  66. package/cli/target/release/.fingerprint/serde_core-0f7ba2581c8c0423/invoked.timestamp +1 -0
  67. package/cli/target/release/.fingerprint/serde_core-0f7ba2581c8c0423/lib-serde_core +1 -0
  68. package/cli/target/release/.fingerprint/serde_core-0f7ba2581c8c0423/lib-serde_core.json +1 -0
  69. package/cli/target/release/.fingerprint/serde_core-74db491143173930/run-build-script-build-script-build +1 -0
  70. package/cli/target/release/.fingerprint/serde_core-74db491143173930/run-build-script-build-script-build.json +1 -0
  71. package/cli/target/release/.fingerprint/serde_core-f043ae3f4b601577/build-script-build-script-build +1 -0
  72. package/cli/target/release/.fingerprint/serde_core-f043ae3f4b601577/build-script-build-script-build.json +1 -0
  73. package/cli/target/release/.fingerprint/serde_core-f043ae3f4b601577/dep-build-script-build-script-build +0 -0
  74. package/cli/target/release/.fingerprint/serde_core-f043ae3f4b601577/invoked.timestamp +1 -0
  75. package/cli/target/release/.fingerprint/serde_derive-a5d13e0e658ceae3/dep-lib-serde_derive +0 -0
  76. package/cli/target/release/.fingerprint/serde_derive-a5d13e0e658ceae3/invoked.timestamp +1 -0
  77. package/cli/target/release/.fingerprint/serde_derive-a5d13e0e658ceae3/lib-serde_derive +1 -0
  78. package/cli/target/release/.fingerprint/serde_derive-a5d13e0e658ceae3/lib-serde_derive.json +1 -0
  79. package/cli/target/release/.fingerprint/serde_json-a8467019a959068f/run-build-script-build-script-build +1 -0
  80. package/cli/target/release/.fingerprint/serde_json-a8467019a959068f/run-build-script-build-script-build.json +1 -0
  81. package/cli/target/release/.fingerprint/serde_json-bfa3f43b57842d41/build-script-build-script-build +1 -0
  82. package/cli/target/release/.fingerprint/serde_json-bfa3f43b57842d41/build-script-build-script-build.json +1 -0
  83. package/cli/target/release/.fingerprint/serde_json-bfa3f43b57842d41/dep-build-script-build-script-build +0 -0
  84. package/cli/target/release/.fingerprint/serde_json-bfa3f43b57842d41/invoked.timestamp +1 -0
  85. package/cli/target/release/.fingerprint/serde_json-f61651a65bf0eb31/dep-lib-serde_json +0 -0
  86. package/cli/target/release/.fingerprint/serde_json-f61651a65bf0eb31/invoked.timestamp +1 -0
  87. package/cli/target/release/.fingerprint/serde_json-f61651a65bf0eb31/lib-serde_json +1 -0
  88. package/cli/target/release/.fingerprint/serde_json-f61651a65bf0eb31/lib-serde_json.json +1 -0
  89. package/cli/target/release/.fingerprint/syn-6f9a22f8c7f909b0/dep-lib-syn +0 -0
  90. package/cli/target/release/.fingerprint/syn-6f9a22f8c7f909b0/invoked.timestamp +1 -0
  91. package/cli/target/release/.fingerprint/syn-6f9a22f8c7f909b0/lib-syn +1 -0
  92. package/cli/target/release/.fingerprint/syn-6f9a22f8c7f909b0/lib-syn.json +1 -0
  93. package/cli/target/release/.fingerprint/unicode-ident-60c57228d30a23d0/dep-lib-unicode_ident +0 -0
  94. package/cli/target/release/.fingerprint/unicode-ident-60c57228d30a23d0/invoked.timestamp +1 -0
  95. package/cli/target/release/.fingerprint/unicode-ident-60c57228d30a23d0/lib-unicode_ident +1 -0
  96. package/cli/target/release/.fingerprint/unicode-ident-60c57228d30a23d0/lib-unicode_ident.json +1 -0
  97. package/cli/target/release/.fingerprint/zmij-60b0e0e9d7c08f71/run-build-script-build-script-build +1 -0
  98. package/cli/target/release/.fingerprint/zmij-60b0e0e9d7c08f71/run-build-script-build-script-build.json +1 -0
  99. package/cli/target/release/.fingerprint/zmij-9501bcbd6d8b933c/dep-lib-zmij +0 -0
  100. package/cli/target/release/.fingerprint/zmij-9501bcbd6d8b933c/invoked.timestamp +1 -0
  101. package/cli/target/release/.fingerprint/zmij-9501bcbd6d8b933c/lib-zmij +1 -0
  102. package/cli/target/release/.fingerprint/zmij-9501bcbd6d8b933c/lib-zmij.json +1 -0
  103. package/cli/target/release/.fingerprint/zmij-aa602f885104061e/build-script-build-script-build +1 -0
  104. package/cli/target/release/.fingerprint/zmij-aa602f885104061e/build-script-build-script-build.json +1 -0
  105. package/cli/target/release/.fingerprint/zmij-aa602f885104061e/dep-build-script-build-script-build +0 -0
  106. package/cli/target/release/.fingerprint/zmij-aa602f885104061e/invoked.timestamp +1 -0
  107. package/cli/target/release/agent-browser +0 -0
  108. package/cli/target/release/agent-browser.d +1 -0
  109. package/cli/target/release/build/libc-0303d277881093f4/build-script-build +0 -0
  110. package/cli/target/release/build/libc-0303d277881093f4/build_script_build-0303d277881093f4 +0 -0
  111. package/cli/target/release/build/libc-0303d277881093f4/build_script_build-0303d277881093f4.d +5 -0
  112. package/cli/target/release/build/libc-b8c0d8e35a1980d3/invoked.timestamp +1 -0
  113. package/cli/target/release/build/libc-b8c0d8e35a1980d3/output +25 -0
  114. package/cli/target/release/build/libc-b8c0d8e35a1980d3/root-output +1 -0
  115. package/cli/target/release/build/libc-b8c0d8e35a1980d3/stderr +0 -0
  116. package/cli/target/release/build/proc-macro2-291b57751730d5b3/build-script-build +0 -0
  117. package/cli/target/release/build/proc-macro2-291b57751730d5b3/build_script_build-291b57751730d5b3 +0 -0
  118. package/cli/target/release/build/proc-macro2-291b57751730d5b3/build_script_build-291b57751730d5b3.d +5 -0
  119. package/cli/target/release/build/proc-macro2-fc2999f6676f03db/invoked.timestamp +1 -0
  120. package/cli/target/release/build/proc-macro2-fc2999f6676f03db/output +23 -0
  121. package/cli/target/release/build/proc-macro2-fc2999f6676f03db/root-output +1 -0
  122. package/cli/target/release/build/proc-macro2-fc2999f6676f03db/stderr +0 -0
  123. package/cli/target/release/build/quote-352ae41707d371c9/invoked.timestamp +1 -0
  124. package/cli/target/release/build/quote-352ae41707d371c9/output +2 -0
  125. package/cli/target/release/build/quote-352ae41707d371c9/root-output +1 -0
  126. package/cli/target/release/build/quote-352ae41707d371c9/stderr +0 -0
  127. package/cli/target/release/build/quote-7d13be3cbe4f9de4/build-script-build +0 -0
  128. package/cli/target/release/build/quote-7d13be3cbe4f9de4/build_script_build-7d13be3cbe4f9de4 +0 -0
  129. package/cli/target/release/build/quote-7d13be3cbe4f9de4/build_script_build-7d13be3cbe4f9de4.d +5 -0
  130. package/cli/target/release/build/serde-b8c046c16de48f41/invoked.timestamp +1 -0
  131. package/cli/target/release/build/serde-b8c046c16de48f41/out/private.rs +6 -0
  132. package/cli/target/release/build/serde-b8c046c16de48f41/output +13 -0
  133. package/cli/target/release/build/serde-b8c046c16de48f41/root-output +1 -0
  134. package/cli/target/release/build/serde-b8c046c16de48f41/stderr +0 -0
  135. package/cli/target/release/build/serde-d35d32ab52b82a81/build-script-build +0 -0
  136. package/cli/target/release/build/serde-d35d32ab52b82a81/build_script_build-d35d32ab52b82a81 +0 -0
  137. package/cli/target/release/build/serde-d35d32ab52b82a81/build_script_build-d35d32ab52b82a81.d +5 -0
  138. package/cli/target/release/build/serde_core-74db491143173930/invoked.timestamp +1 -0
  139. package/cli/target/release/build/serde_core-74db491143173930/out/private.rs +5 -0
  140. package/cli/target/release/build/serde_core-74db491143173930/output +11 -0
  141. package/cli/target/release/build/serde_core-74db491143173930/root-output +1 -0
  142. package/cli/target/release/build/serde_core-74db491143173930/stderr +0 -0
  143. package/cli/target/release/build/serde_core-f043ae3f4b601577/build-script-build +0 -0
  144. package/cli/target/release/build/serde_core-f043ae3f4b601577/build_script_build-f043ae3f4b601577 +0 -0
  145. package/cli/target/release/build/serde_core-f043ae3f4b601577/build_script_build-f043ae3f4b601577.d +5 -0
  146. package/cli/target/release/build/serde_json-a8467019a959068f/invoked.timestamp +1 -0
  147. package/cli/target/release/build/serde_json-a8467019a959068f/output +3 -0
  148. package/cli/target/release/build/serde_json-a8467019a959068f/root-output +1 -0
  149. package/cli/target/release/build/serde_json-a8467019a959068f/stderr +0 -0
  150. package/cli/target/release/build/serde_json-bfa3f43b57842d41/build-script-build +0 -0
  151. package/cli/target/release/build/serde_json-bfa3f43b57842d41/build_script_build-bfa3f43b57842d41 +0 -0
  152. package/cli/target/release/build/serde_json-bfa3f43b57842d41/build_script_build-bfa3f43b57842d41.d +5 -0
  153. package/cli/target/release/build/zmij-60b0e0e9d7c08f71/invoked.timestamp +1 -0
  154. package/cli/target/release/build/zmij-60b0e0e9d7c08f71/output +3 -0
  155. package/cli/target/release/build/zmij-60b0e0e9d7c08f71/root-output +1 -0
  156. package/cli/target/release/build/zmij-60b0e0e9d7c08f71/stderr +0 -0
  157. package/cli/target/release/build/zmij-aa602f885104061e/build-script-build +0 -0
  158. package/cli/target/release/build/zmij-aa602f885104061e/build_script_build-aa602f885104061e +0 -0
  159. package/cli/target/release/build/zmij-aa602f885104061e/build_script_build-aa602f885104061e.d +5 -0
  160. package/cli/target/release/deps/agent_browser-5894536b887e2ce7 +0 -0
  161. package/cli/target/release/deps/agent_browser-5894536b887e2ce7.d +5 -0
  162. package/cli/target/release/deps/itoa-653b9192107a1caa.d +8 -0
  163. package/cli/target/release/deps/libc-d843359d3dd4757b.d +45 -0
  164. package/cli/target/release/deps/libitoa-653b9192107a1caa.rlib +0 -0
  165. package/cli/target/release/deps/libitoa-653b9192107a1caa.rmeta +0 -0
  166. package/cli/target/release/deps/liblibc-d843359d3dd4757b.rlib +0 -0
  167. package/cli/target/release/deps/liblibc-d843359d3dd4757b.rmeta +0 -0
  168. package/cli/target/release/deps/libmemchr-dcaf8011940d18dd.rlib +0 -0
  169. package/cli/target/release/deps/libmemchr-dcaf8011940d18dd.rmeta +0 -0
  170. package/cli/target/release/deps/libproc_macro2-a753b344a6b4aa98.rlib +0 -0
  171. package/cli/target/release/deps/libproc_macro2-a753b344a6b4aa98.rmeta +0 -0
  172. package/cli/target/release/deps/libquote-833e6725e0f7d298.rlib +0 -0
  173. package/cli/target/release/deps/libquote-833e6725e0f7d298.rmeta +0 -0
  174. package/cli/target/release/deps/libserde-d6fb44202dad3efd.rlib +0 -0
  175. package/cli/target/release/deps/libserde-d6fb44202dad3efd.rmeta +0 -0
  176. package/cli/target/release/deps/libserde_core-0f7ba2581c8c0423.rlib +0 -0
  177. package/cli/target/release/deps/libserde_core-0f7ba2581c8c0423.rmeta +0 -0
  178. package/cli/target/release/deps/libserde_derive-a5d13e0e658ceae3.dylib +0 -0
  179. package/cli/target/release/deps/libserde_json-f61651a65bf0eb31.rlib +0 -0
  180. package/cli/target/release/deps/libserde_json-f61651a65bf0eb31.rmeta +0 -0
  181. package/cli/target/release/deps/libsyn-6f9a22f8c7f909b0.rlib +0 -0
  182. package/cli/target/release/deps/libsyn-6f9a22f8c7f909b0.rmeta +0 -0
  183. package/cli/target/release/deps/libunicode_ident-60c57228d30a23d0.rlib +0 -0
  184. package/cli/target/release/deps/libunicode_ident-60c57228d30a23d0.rmeta +0 -0
  185. package/cli/target/release/deps/libzmij-9501bcbd6d8b933c.rlib +0 -0
  186. package/cli/target/release/deps/libzmij-9501bcbd6d8b933c.rmeta +0 -0
  187. package/cli/target/release/deps/memchr-dcaf8011940d18dd.d +30 -0
  188. package/cli/target/release/deps/proc_macro2-a753b344a6b4aa98.d +17 -0
  189. package/cli/target/release/deps/quote-833e6725e0f7d298.d +13 -0
  190. package/cli/target/release/deps/serde-d6fb44202dad3efd.d +14 -0
  191. package/cli/target/release/deps/serde_core-0f7ba2581c8c0423.d +27 -0
  192. package/cli/target/release/deps/serde_derive-a5d13e0e658ceae3.d +34 -0
  193. package/cli/target/release/deps/serde_json-f61651a65bf0eb31.d +22 -0
  194. package/cli/target/release/deps/syn-6f9a22f8c7f909b0.d +49 -0
  195. package/cli/target/release/deps/unicode_ident-60c57228d30a23d0.d +8 -0
  196. package/cli/target/release/deps/zmij-9501bcbd6d8b933c.d +8 -0
  197. package/dist/actions.d.ts.map +1 -1
  198. package/dist/actions.js +46 -35
  199. package/dist/actions.js.map +1 -1
  200. package/dist/browser.d.ts +30 -1
  201. package/dist/browser.d.ts.map +1 -1
  202. package/dist/browser.js +59 -0
  203. package/dist/browser.js.map +1 -1
  204. package/dist/cli-light.d.ts +11 -0
  205. package/dist/cli-light.d.ts.map +1 -0
  206. package/dist/cli-light.js +409 -0
  207. package/dist/cli-light.js.map +1 -0
  208. package/dist/index.js +13 -8
  209. package/dist/index.js.map +1 -1
  210. package/dist/protocol.d.ts.map +1 -1
  211. package/dist/protocol.js +4 -0
  212. package/dist/protocol.js.map +1 -1
  213. package/dist/snapshot.d.ts +63 -0
  214. package/dist/snapshot.d.ts.map +1 -0
  215. package/dist/snapshot.js +298 -0
  216. package/dist/snapshot.js.map +1 -0
  217. package/package.json +6 -4
  218. package/src/actions.ts +50 -36
  219. package/src/browser.ts +70 -0
  220. package/src/cli-light.ts +457 -0
  221. package/src/index.ts +13 -8
  222. package/src/protocol.ts +4 -0
  223. package/src/snapshot.ts +380 -0
  224. package/tsconfig.json +12 -3
@@ -0,0 +1,409 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Lightweight CLI client for agent-browser
4
+ *
5
+ * This file contains ONLY the client logic (no Playwright imports).
6
+ * It can be compiled with Bun for fast startup times.
7
+ *
8
+ * The actual browser automation runs in a separate daemon process.
9
+ */
10
+ import * as net from 'net';
11
+ import * as fs from 'fs';
12
+ import * as os from 'os';
13
+ import * as path from 'path';
14
+ import { spawn } from 'child_process';
15
+ // ============================================================================
16
+ // Configuration
17
+ // ============================================================================
18
+ const SESSION = process.env.AGENT_BROWSER_SESSION || 'default';
19
+ const SOCKET_PATH = path.join(os.tmpdir(), `agent-browser-${SESSION}.sock`);
20
+ const PID_FILE = path.join(os.tmpdir(), `agent-browser-${SESSION}.pid`);
21
+ // ============================================================================
22
+ // Daemon Management
23
+ // ============================================================================
24
+ function isDaemonRunning() {
25
+ if (!fs.existsSync(PID_FILE))
26
+ return false;
27
+ try {
28
+ const pid = parseInt(fs.readFileSync(PID_FILE, 'utf8').trim(), 10);
29
+ process.kill(pid, 0);
30
+ return true;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ async function ensureDaemon() {
37
+ if (isDaemonRunning() && fs.existsSync(SOCKET_PATH)) {
38
+ return;
39
+ }
40
+ // Find the daemon script - look relative to this script
41
+ const scriptDir = path.dirname(process.argv[1]);
42
+ let daemonPath = path.join(scriptDir, 'daemon.js');
43
+ // Fallback paths
44
+ if (!fs.existsSync(daemonPath)) {
45
+ daemonPath = path.join(scriptDir, '../dist/daemon.js');
46
+ }
47
+ if (!fs.existsSync(daemonPath)) {
48
+ daemonPath = path.join(process.cwd(), 'dist/daemon.js');
49
+ }
50
+ if (!fs.existsSync(daemonPath)) {
51
+ throw new Error(`Daemon not found. Looked in: ${daemonPath}`);
52
+ }
53
+ const child = spawn('node', [daemonPath], {
54
+ detached: true,
55
+ stdio: 'ignore',
56
+ env: { ...process.env, AGENT_BROWSER_DAEMON: '1', AGENT_BROWSER_SESSION: SESSION },
57
+ });
58
+ child.unref();
59
+ // Wait for socket
60
+ for (let i = 0; i < 50; i++) {
61
+ if (fs.existsSync(SOCKET_PATH))
62
+ return;
63
+ await new Promise(r => setTimeout(r, 100));
64
+ }
65
+ throw new Error('Failed to start daemon');
66
+ }
67
+ async function sendCommand(cmd) {
68
+ return new Promise((resolve, reject) => {
69
+ let buffer = '';
70
+ let resolved = false;
71
+ const socket = net.createConnection(SOCKET_PATH);
72
+ const cleanup = () => {
73
+ socket.removeAllListeners();
74
+ socket.destroy();
75
+ };
76
+ socket.on('connect', () => {
77
+ socket.write(JSON.stringify(cmd) + '\n');
78
+ });
79
+ socket.on('data', (data) => {
80
+ buffer += data.toString();
81
+ const idx = buffer.indexOf('\n');
82
+ if (idx !== -1 && !resolved) {
83
+ resolved = true;
84
+ try {
85
+ const response = JSON.parse(buffer.substring(0, idx));
86
+ cleanup();
87
+ resolve(response);
88
+ }
89
+ catch {
90
+ cleanup();
91
+ reject(new Error('Invalid JSON response'));
92
+ }
93
+ }
94
+ });
95
+ socket.on('error', (err) => {
96
+ if (!resolved) {
97
+ resolved = true;
98
+ cleanup();
99
+ reject(err);
100
+ }
101
+ });
102
+ socket.on('close', () => {
103
+ if (!resolved && buffer.trim()) {
104
+ resolved = true;
105
+ try {
106
+ resolve(JSON.parse(buffer.trim()));
107
+ }
108
+ catch {
109
+ reject(new Error('Connection closed'));
110
+ }
111
+ }
112
+ });
113
+ setTimeout(() => {
114
+ if (!resolved) {
115
+ resolved = true;
116
+ cleanup();
117
+ reject(new Error('Timeout'));
118
+ }
119
+ }, 30000);
120
+ });
121
+ }
122
+ // ============================================================================
123
+ // Command Parsing
124
+ // ============================================================================
125
+ function parseCommand(parts) {
126
+ if (parts.length === 0)
127
+ return null;
128
+ const command = parts[0];
129
+ const rest = parts.slice(1);
130
+ const id = Math.random().toString(36).slice(2, 10);
131
+ switch (command) {
132
+ case 'open':
133
+ case 'goto':
134
+ case 'navigate':
135
+ return { id, action: 'navigate', url: rest[0]?.startsWith('http') ? rest[0] : `https://${rest[0]}` };
136
+ case 'click':
137
+ return { id, action: 'click', selector: rest[0] };
138
+ case 'fill':
139
+ return { id, action: 'fill', selector: rest[0], value: rest.slice(1).join(' ') };
140
+ case 'type':
141
+ return { id, action: 'type', selector: rest[0], text: rest.slice(1).join(' ') };
142
+ case 'hover':
143
+ return { id, action: 'hover', selector: rest[0] };
144
+ case 'snapshot': {
145
+ const opts = { id, action: 'snapshot' };
146
+ // Parse snapshot options from rest args
147
+ for (let i = 0; i < rest.length; i++) {
148
+ const arg = rest[i];
149
+ if (arg === '-i' || arg === '--interactive') {
150
+ opts.interactive = true;
151
+ }
152
+ else if (arg === '-c' || arg === '--compact') {
153
+ opts.compact = true;
154
+ }
155
+ else if (arg === '--depth' || arg === '-d') {
156
+ opts.maxDepth = parseInt(rest[++i], 10);
157
+ }
158
+ else if (arg === '--selector' || arg === '-s') {
159
+ opts.selector = rest[++i];
160
+ }
161
+ }
162
+ return opts;
163
+ }
164
+ case 'screenshot':
165
+ return { id, action: 'screenshot', path: rest[0] };
166
+ case 'close':
167
+ case 'quit':
168
+ return { id, action: 'close' };
169
+ case 'get':
170
+ if (rest[0] === 'text')
171
+ return { id, action: 'gettext', selector: rest[1] };
172
+ if (rest[0] === 'url')
173
+ return { id, action: 'url' };
174
+ if (rest[0] === 'title')
175
+ return { id, action: 'title' };
176
+ return null;
177
+ case 'press':
178
+ return { id, action: 'press', key: rest[0] };
179
+ case 'wait':
180
+ if (/^\d+$/.test(rest[0])) {
181
+ return { id, action: 'wait', timeout: parseInt(rest[0], 10) };
182
+ }
183
+ return { id, action: 'wait', selector: rest[0] };
184
+ case 'back':
185
+ return { id, action: 'back' };
186
+ case 'forward':
187
+ return { id, action: 'forward' };
188
+ case 'reload':
189
+ return { id, action: 'reload' };
190
+ case 'eval':
191
+ return { id, action: 'evaluate', script: rest.join(' ') };
192
+ default:
193
+ return null;
194
+ }
195
+ }
196
+ function parseBatchCommands(args) {
197
+ const commands = [];
198
+ // Each argument after 'batch' is a command string
199
+ for (const arg of args) {
200
+ // Split the command string into parts
201
+ const parts = arg.match(/(?:[^\s"]+|"[^"]*")+/g) || [];
202
+ const cleanParts = parts.map(p => p.replace(/^"|"$/g, ''));
203
+ const cmd = parseCommand(cleanParts);
204
+ if (cmd) {
205
+ commands.push(cmd);
206
+ }
207
+ }
208
+ return commands;
209
+ }
210
+ // ============================================================================
211
+ // Output Formatting
212
+ // ============================================================================
213
+ function formatResponse(response) {
214
+ if (!response.success) {
215
+ return `\x1b[31m✗ Error:\x1b[0m ${response.error}`;
216
+ }
217
+ const data = response.data;
218
+ if (data?.url && data?.title) {
219
+ return `\x1b[32m✓\x1b[0m \x1b[1m${data.title}\x1b[0m\n\x1b[2m ${data.url}\x1b[0m`;
220
+ }
221
+ else if (data?.snapshot) {
222
+ return String(data.snapshot);
223
+ }
224
+ else if (data?.text !== undefined) {
225
+ return String(data.text);
226
+ }
227
+ else if (data?.url) {
228
+ return String(data.url);
229
+ }
230
+ else if (data?.title) {
231
+ return String(data.title);
232
+ }
233
+ else if (data?.result !== undefined) {
234
+ return typeof data.result === 'object' ? JSON.stringify(data.result, null, 2) : String(data.result);
235
+ }
236
+ else if (data?.closed) {
237
+ return '\x1b[32m✓\x1b[0m Browser closed';
238
+ }
239
+ else {
240
+ return '\x1b[32m✓\x1b[0m Done';
241
+ }
242
+ }
243
+ function printResponse(response, json) {
244
+ if (json) {
245
+ console.log(JSON.stringify(response));
246
+ }
247
+ else {
248
+ console.log(formatResponse(response));
249
+ }
250
+ }
251
+ // ============================================================================
252
+ // Main
253
+ // ============================================================================
254
+ const HELP = `
255
+ agent-browser - fast browser automation CLI
256
+
257
+ Usage:
258
+ agent-browser <command> [args] [--json]
259
+ agent-browser batch <cmd1> <cmd2> ... [--json]
260
+
261
+ Commands:
262
+ open <url> Navigate to URL
263
+ click <sel> Click element (use @ref from snapshot)
264
+ fill <sel> <text> Fill input
265
+ type <sel> <text> Type text
266
+ hover <sel> Hover element
267
+ snapshot [options] Get accessibility tree with refs
268
+ screenshot [path] Take screenshot
269
+ get text <sel> Get text content
270
+ get url Get current URL
271
+ get title Get page title
272
+ press <key> Press keyboard key
273
+ wait <ms|sel> Wait for time or element
274
+ eval <js> Evaluate JavaScript
275
+ close Close browser
276
+
277
+ Snapshot Options:
278
+ -i, --interactive Only show interactive elements (buttons, links, inputs)
279
+ -c, --compact Remove empty structural elements
280
+ -d, --depth <n> Limit tree depth (e.g., --depth 3)
281
+ -s, --selector <sel> Scope snapshot to CSS selector
282
+
283
+ Batch Mode:
284
+ batch <cmd1> <cmd2> ... Execute multiple commands in sequence
285
+ Each command is a quoted string
286
+
287
+ Options:
288
+ --json Output JSON (for AI agents)
289
+
290
+ Examples:
291
+ agent-browser open example.com
292
+ agent-browser snapshot
293
+ agent-browser click @e2
294
+ agent-browser fill @e3 "hello"
295
+
296
+ # Batch mode - execute multiple commands efficiently
297
+ agent-browser batch "open example.com" "snapshot" "click a"
298
+ agent-browser batch "open google.com" "snapshot" "get title" --json
299
+ `;
300
+ async function runBatch(commands, json) {
301
+ const results = [];
302
+ let hasError = false;
303
+ for (const cmd of commands) {
304
+ try {
305
+ const response = await sendCommand(cmd);
306
+ results.push(response);
307
+ if (!json) {
308
+ // Print each result as we go for non-JSON mode
309
+ console.log(`\x1b[36m[${cmd.action}]\x1b[0m`);
310
+ console.log(formatResponse(response));
311
+ console.log();
312
+ }
313
+ if (!response.success) {
314
+ hasError = true;
315
+ break; // Stop on first error
316
+ }
317
+ }
318
+ catch (err) {
319
+ const message = err instanceof Error ? err.message : String(err);
320
+ const errorResponse = {
321
+ id: String(cmd.id),
322
+ success: false,
323
+ error: message,
324
+ };
325
+ results.push(errorResponse);
326
+ hasError = true;
327
+ if (!json) {
328
+ console.log(`\x1b[36m[${cmd.action}]\x1b[0m`);
329
+ console.log(`\x1b[31m✗ Error:\x1b[0m ${message}`);
330
+ }
331
+ break;
332
+ }
333
+ }
334
+ if (json) {
335
+ console.log(JSON.stringify({
336
+ success: !hasError,
337
+ results,
338
+ completed: results.length,
339
+ total: commands.length,
340
+ }));
341
+ }
342
+ else {
343
+ console.log(`\x1b[2m─────────────────────────────────────\x1b[0m`);
344
+ console.log(`Completed ${results.length}/${commands.length} commands`);
345
+ }
346
+ process.exit(hasError ? 1 : 0);
347
+ }
348
+ async function main() {
349
+ const args = process.argv.slice(2);
350
+ const json = args.includes('--json');
351
+ const cleanArgs = args.filter(a => !a.startsWith('--'));
352
+ if (cleanArgs.length === 0 || args.includes('--help') || args.includes('-h')) {
353
+ console.log(HELP);
354
+ process.exit(0);
355
+ }
356
+ // Check for batch mode
357
+ if (cleanArgs[0] === 'batch') {
358
+ const batchArgs = cleanArgs.slice(1);
359
+ if (batchArgs.length === 0) {
360
+ console.error('\x1b[31mBatch mode requires at least one command\x1b[0m');
361
+ console.log('\nExample: agent-browser batch "open example.com" "snapshot"');
362
+ process.exit(1);
363
+ }
364
+ const commands = parseBatchCommands(batchArgs);
365
+ if (commands.length === 0) {
366
+ console.error('\x1b[31mNo valid commands found\x1b[0m');
367
+ process.exit(1);
368
+ }
369
+ try {
370
+ await ensureDaemon();
371
+ await runBatch(commands, json);
372
+ }
373
+ catch (err) {
374
+ const message = err instanceof Error ? err.message : String(err);
375
+ if (json) {
376
+ console.log(JSON.stringify({ success: false, error: message }));
377
+ }
378
+ else {
379
+ console.error('\x1b[31m✗ Error:\x1b[0m', message);
380
+ }
381
+ process.exit(1);
382
+ }
383
+ return;
384
+ }
385
+ // Single command mode
386
+ const cmd = parseCommand(cleanArgs);
387
+ if (!cmd) {
388
+ console.error('\x1b[31mUnknown command:\x1b[0m', cleanArgs[0]);
389
+ process.exit(1);
390
+ }
391
+ try {
392
+ await ensureDaemon();
393
+ const response = await sendCommand(cmd);
394
+ printResponse(response, json);
395
+ process.exit(response.success ? 0 : 1);
396
+ }
397
+ catch (err) {
398
+ const message = err instanceof Error ? err.message : String(err);
399
+ if (json) {
400
+ console.log(JSON.stringify({ success: false, error: message }));
401
+ }
402
+ else {
403
+ console.error('\x1b[31m✗ Error:\x1b[0m', message);
404
+ }
405
+ process.exit(1);
406
+ }
407
+ }
408
+ main();
409
+ //# sourceMappingURL=cli-light.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-light.js","sourceRoot":"","sources":["../src/cli-light.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -214,7 +214,7 @@ ${c('yellow', 'Usage:')} agent-browser <command> [options]
214
214
 
215
215
  ${c('yellow', 'Core Commands:')}
216
216
  ${c('cyan', 'open')} <url> Navigate to URL
217
- ${c('cyan', 'click')} <sel> Click element
217
+ ${c('cyan', 'click')} <sel> Click element (or @ref)
218
218
  ${c('cyan', 'type')} <sel> <text> Type into element
219
219
  ${c('cyan', 'fill')} <sel> <text> Clear and fill
220
220
  ${c('cyan', 'press')} <key> Press key (Enter, Tab, Control+a)
@@ -223,10 +223,16 @@ ${c('yellow', 'Core Commands:')}
223
223
  ${c('cyan', 'scroll')} <dir> [px] Scroll (up/down/left/right)
224
224
  ${c('cyan', 'wait')} <sel|ms> Wait for element or time
225
225
  ${c('cyan', 'screenshot')} [path] Take screenshot
226
- ${c('cyan', 'snapshot')} Accessibility tree (for AI)
226
+ ${c('cyan', 'snapshot')} Accessibility tree with refs (for AI)
227
227
  ${c('cyan', 'eval')} <js> Run JavaScript
228
228
  ${c('cyan', 'close')} Close browser
229
229
 
230
+ ${c('yellow', 'Selectors:')} CSS, XPath, text=, or ${c('green', '@ref')} from snapshot
231
+ ${c('dim', 'CSS:')} "#id", ".class", "button"
232
+ ${c('dim', 'XPath:')} "xpath=//button"
233
+ ${c('dim', 'Text:')} "text=Submit"
234
+ ${c('dim', 'Ref:')} ${c('green', '@e1')}, ${c('green', '@e2')} (from snapshot output)
235
+
230
236
  ${c('yellow', 'Get Info:')} agent-browser get <what> [selector]
231
237
  text, html, value, attr, title, url, count, box
232
238
 
@@ -270,13 +276,12 @@ ${c('yellow', 'Options:')}
270
276
 
271
277
  ${c('yellow', 'Examples:')}
272
278
  agent-browser open example.com
273
- agent-browser click "#submit"
274
- agent-browser fill "#email" "test@example.com"
275
- agent-browser get text "h1"
276
- agent-browser is visible ".modal"
279
+ agent-browser snapshot # Get tree with refs
280
+ agent-browser click @e2 # Click by ref from snapshot
281
+ agent-browser fill @e3 "test@example.com" # Fill by ref
282
+ agent-browser click "#submit" # CSS selector still works
283
+ agent-browser get text @e1 # Get text by ref
277
284
  agent-browser find role button click --name Submit
278
- agent-browser wait 2000
279
- agent-browser wait --load networkidle
280
285
  `);
281
286
  }
282
287
  // ============================================================================