browser-control-and-automation-cli 0.1.1.dev3__tar.gz

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 (275) hide show
  1. browser_control_and_automation_cli-0.1.1.dev3/.github/pull_request_template.md +34 -0
  2. browser_control_and_automation_cli-0.1.1.dev3/.github/workflows/ci.yml +130 -0
  3. browser_control_and_automation_cli-0.1.1.dev3/.github/workflows/release.yml +36 -0
  4. browser_control_and_automation_cli-0.1.1.dev3/.gitignore +19 -0
  5. browser_control_and_automation_cli-0.1.1.dev3/.pre-commit-config.yaml +18 -0
  6. browser_control_and_automation_cli-0.1.1.dev3/.python-version +1 -0
  7. browser_control_and_automation_cli-0.1.1.dev3/AGENTS.md +309 -0
  8. browser_control_and_automation_cli-0.1.1.dev3/LICENSE +21 -0
  9. browser_control_and_automation_cli-0.1.1.dev3/MANIFEST.in +1 -0
  10. browser_control_and_automation_cli-0.1.1.dev3/PKG-INFO +340 -0
  11. browser_control_and_automation_cli-0.1.1.dev3/README.md +328 -0
  12. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/manifest.json +28 -0
  13. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/offscreen.html +10 -0
  14. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/package.json +3 -0
  15. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/popup.html +118 -0
  16. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/background/artifact_actions.js +213 -0
  17. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/background/dialog_actions.js +29 -0
  18. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/background/input_actions.js +54 -0
  19. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/background/locator_actions.js +77 -0
  20. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/background/observe_actions.js +233 -0
  21. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/background/page_actions.js +72 -0
  22. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/background/trace_actions.js +136 -0
  23. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/background/video_actions.js +193 -0
  24. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/background/workspace.js +136 -0
  25. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/background.js +508 -0
  26. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/debugger.js +796 -0
  27. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/offscreen.js +247 -0
  28. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/page_runtime.js +680 -0
  29. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/popup.css +246 -0
  30. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/popup.js +219 -0
  31. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/popup_view.js +124 -0
  32. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/src/protocol.js +85 -0
  33. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/tests/debugger.test.js +99 -0
  34. browser_control_and_automation_cli-0.1.1.dev3/browser-cli-extension/tests/popup_view.test.js +102 -0
  35. browser_control_and_automation_cli-0.1.1.dev3/docs/examples/task-and-automation.md +82 -0
  36. browser_control_and_automation_cli-0.1.1.dev3/docs/extension-driver-gaps.md +37 -0
  37. browser_control_and_automation_cli-0.1.1.dev3/docs/installed-with-pip.md +19 -0
  38. browser_control_and_automation_cli-0.1.1.dev3/docs/installed-with-uv.md +118 -0
  39. browser_control_and_automation_cli-0.1.1.dev3/docs/smoke-checklist.md +142 -0
  40. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-08-browser-cli-v1-implementation-plan.md +398 -0
  41. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-09-browser-cli-semantic-ref-task-workflow-skill-implementation-plan.md +473 -0
  42. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-09-browser-cli-v2-agent-actions-implementation-plan.md +533 -0
  43. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-10-browser-cli-dual-driver-extension-implementation-plan.md +490 -0
  44. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-10-browser-cli-status-reload-implementation-plan.md +296 -0
  45. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-11-browser-cli-extension-driver-parity-refactor-implementation-plan.md +350 -0
  46. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-11-browser-cli-network-response-body-implementation-plan.md +354 -0
  47. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-12-browser-cli-popup-runtime-polish.md +1193 -0
  48. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-12-browser-cli-workflow-publish-layer-implementation-plan.md +536 -0
  49. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-13-browser-cli-long-run-stability-implementation-plan.md +1113 -0
  50. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-13-browser-cli-pip-user-ux-roadmap-implementation-plan.md +1002 -0
  51. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-13-browser-cli-task-automation-implementation-plan.md +1313 -0
  52. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-14-automation-manifest-roundtrip-implementation-plan.md +1109 -0
  53. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-14-browser-cli-delivery-skills-implementation-plan.md +634 -0
  54. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-14-browser-cli-douyin-automation-packaging-plan.md +188 -0
  55. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-14-browser-cli-extension-attach-race-implementation-plan.md +48 -0
  56. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-14-browser-cli-install-skills-implementation-plan.md +620 -0
  57. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-14-browser-cli-persistent-startup-page-reuse.md +465 -0
  58. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-14-browser-cli-release-readiness-implementation-plan.md +860 -0
  59. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-14-browser-cli-task-runtime-read-unification-implementation-plan.md +686 -0
  60. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-14-browser-cli-uninstall-doc-implementation-plan.md +351 -0
  61. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-14-browser-cli-uv-migration-implementation-plan.md +819 -0
  62. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-14-daemon-parameter-validation-implementation-plan.md +517 -0
  63. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/plans/2026-04-14-pypi-package-rename-implementation-plan.md +245 -0
  64. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-08-browser-cli-design.md +396 -0
  65. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-09-browser-cli-backed-explore-delivery-skill-design.md +394 -0
  66. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-09-browser-cli-explore-task-workflow-design.md +637 -0
  67. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-09-browser-cli-v2-agent-actions-design.md +454 -0
  68. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-09-browser-cli-v3a-semantic-ref-resolution-design.md +428 -0
  69. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-10-browser-cli-dual-driver-extension-architecture-design.md +652 -0
  70. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-10-browser-cli-status-reload-design.md +517 -0
  71. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-11-browser-cli-extension-driver-parity-refactor-design.md +338 -0
  72. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-11-browser-cli-extension-video-cdp-screencast-design.md +288 -0
  73. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-11-browser-cli-network-response-body-design.md +581 -0
  74. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-11-browser-cli-next-roadmap.md +167 -0
  75. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-12-browser-cli-popup-control-surface-runtime-polish-design.md +588 -0
  76. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-12-browser-cli-workflow-publish-layer-design.md +604 -0
  77. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-13-browser-cli-long-run-stability-design.md +635 -0
  78. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-13-browser-cli-pip-user-ux-backlog.md +365 -0
  79. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-13-browser-cli-pip-user-ux-roadmap-design.md +602 -0
  80. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-13-browser-cli-task-automation-design.md +444 -0
  81. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-14-automation-manifest-roundtrip-design.md +395 -0
  82. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-14-browser-cli-delivery-skills-design.md +490 -0
  83. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-14-browser-cli-persistent-startup-page-reuse-design.md +253 -0
  84. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-14-browser-cli-release-readiness-design.md +443 -0
  85. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-14-browser-cli-task-runtime-read-unification-design.md +395 -0
  86. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-14-browser-cli-uninstall-doc-design.md +266 -0
  87. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-14-browser-cli-uv-migration-design.md +436 -0
  88. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-14-daemon-parameter-validation-design.md +287 -0
  89. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-14-install-skills-design.md +368 -0
  90. browser_control_and_automation_cli-0.1.1.dev3/docs/superpowers/specs/2026-04-14-pypi-package-rename-design.md +112 -0
  91. browser_control_and_automation_cli-0.1.1.dev3/docs/uninstall.md +110 -0
  92. browser_control_and_automation_cli-0.1.1.dev3/pyproject.toml +87 -0
  93. browser_control_and_automation_cli-0.1.1.dev3/scripts/__init__.py +1 -0
  94. browser_control_and_automation_cli-0.1.1.dev3/scripts/check.sh +6 -0
  95. browser_control_and_automation_cli-0.1.1.dev3/scripts/generate_packaged_skill_docs.py +46 -0
  96. browser_control_and_automation_cli-0.1.1.dev3/scripts/guard.sh +9 -0
  97. browser_control_and_automation_cli-0.1.1.dev3/scripts/guards/__init__.py +1 -0
  98. browser_control_and_automation_cli-0.1.1.dev3/scripts/guards/architecture.py +132 -0
  99. browser_control_and_automation_cli-0.1.1.dev3/scripts/guards/common.py +137 -0
  100. browser_control_and_automation_cli-0.1.1.dev3/scripts/guards/docs_sync.py +107 -0
  101. browser_control_and_automation_cli-0.1.1.dev3/scripts/guards/product_contracts.py +245 -0
  102. browser_control_and_automation_cli-0.1.1.dev3/scripts/guards/python_compatibility.py +93 -0
  103. browser_control_and_automation_cli-0.1.1.dev3/scripts/guards/run_all.py +32 -0
  104. browser_control_and_automation_cli-0.1.1.dev3/scripts/lint.sh +19 -0
  105. browser_control_and_automation_cli-0.1.1.dev3/scripts/test.sh +10 -0
  106. browser_control_and_automation_cli-0.1.1.dev3/setup.cfg +4 -0
  107. browser_control_and_automation_cli-0.1.1.dev3/skills/browser-cli-converge/SKILL.md +62 -0
  108. browser_control_and_automation_cli-0.1.1.dev3/skills/browser-cli-delivery/SKILL.md +61 -0
  109. browser_control_and_automation_cli-0.1.1.dev3/skills/browser-cli-explore/SKILL.md +77 -0
  110. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/__init__.py +7 -0
  111. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/actions/__init__.py +5 -0
  112. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/actions/cli_specs.py +868 -0
  113. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/agent_scope/__init__.py +14 -0
  114. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/__init__.py +11 -0
  115. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/api/__init__.py +5 -0
  116. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/api/server.py +321 -0
  117. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/hooks.py +42 -0
  118. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/loader.py +134 -0
  119. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/models.py +127 -0
  120. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/persistence/__init__.py +5 -0
  121. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/persistence/store.py +682 -0
  122. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/projections.py +279 -0
  123. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/publisher.py +153 -0
  124. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/scheduler/__init__.py +5 -0
  125. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/scheduler/schedule.py +113 -0
  126. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/service/__init__.py +8 -0
  127. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/service/__main__.py +64 -0
  128. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/service/client.py +232 -0
  129. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/service/runtime.py +388 -0
  130. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/toml.py +35 -0
  131. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/web/__init__.py +5 -0
  132. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/automation/web/assets.py +377 -0
  133. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/browser/__init__.py +1 -0
  134. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/browser/models.py +44 -0
  135. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/browser/network_capture.py +392 -0
  136. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/browser/service.py +1519 -0
  137. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/browser/session.py +158 -0
  138. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/browser/snapshot.py +35 -0
  139. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/browser/stealth.py +450 -0
  140. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/cli/__init__.py +1 -0
  141. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/cli/error_hints.py +26 -0
  142. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/cli/main.py +298 -0
  143. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/commands/__init__.py +1 -0
  144. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/commands/action.py +25 -0
  145. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/commands/automation.py +304 -0
  146. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/commands/doctor.py +336 -0
  147. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/commands/install_skills.py +138 -0
  148. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/commands/paths.py +31 -0
  149. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/commands/read.py +33 -0
  150. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/commands/reload.py +51 -0
  151. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/commands/status.py +444 -0
  152. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/commands/task.py +71 -0
  153. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/constants.py +97 -0
  154. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/daemon/__init__.py +1 -0
  155. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/daemon/__main__.py +34 -0
  156. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/daemon/app.py +941 -0
  157. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/daemon/browser_service.py +998 -0
  158. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/daemon/client.py +280 -0
  159. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/daemon/models.py +63 -0
  160. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/daemon/runtime_presentation.py +167 -0
  161. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/daemon/server.py +103 -0
  162. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/daemon/state.py +15 -0
  163. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/daemon/transport.py +77 -0
  164. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/drivers/__init__.py +6 -0
  165. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/drivers/_extension/__init__.py +1 -0
  166. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/drivers/_extension/artifact_actions.py +154 -0
  167. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/drivers/_extension/dialog_actions.py +35 -0
  168. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/drivers/_extension/input_actions.py +63 -0
  169. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/drivers/_extension/locator_actions.py +100 -0
  170. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/drivers/_extension/observe_actions.py +285 -0
  171. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/drivers/_extension/page_actions.py +210 -0
  172. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/drivers/_extension/state_actions.py +134 -0
  173. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/drivers/base.py +391 -0
  174. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/drivers/extension_driver.py +33 -0
  175. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/drivers/models.py +21 -0
  176. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/drivers/playwright_driver.py +499 -0
  177. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/error_codes.py +27 -0
  178. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/errors.py +146 -0
  179. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/exit_codes.py +9 -0
  180. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/extension/__init__.py +32 -0
  181. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/extension/protocol.py +222 -0
  182. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/extension/session.py +393 -0
  183. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/network.py +147 -0
  184. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/outputs/__init__.py +1 -0
  185. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/outputs/json.py +10 -0
  186. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/outputs/render.py +7 -0
  187. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/packaged_skills/__init__.py +1 -0
  188. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/packaged_skills/browser-cli-converge/SKILL.md +62 -0
  189. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/packaged_skills/browser-cli-delivery/SKILL.md +61 -0
  190. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/packaged_skills/browser-cli-explore/SKILL.md +77 -0
  191. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/profiles/__init__.py +1 -0
  192. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/profiles/discovery.py +185 -0
  193. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/refs/__init__.py +17 -0
  194. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/refs/generator.py +386 -0
  195. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/refs/models.py +127 -0
  196. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/refs/registry.py +51 -0
  197. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/refs/resolver.py +214 -0
  198. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/tabs/__init__.py +5 -0
  199. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/tabs/registry.py +283 -0
  200. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/task_runtime/__init__.py +31 -0
  201. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/task_runtime/client.py +107 -0
  202. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/task_runtime/entrypoint.py +110 -0
  203. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/task_runtime/errors.py +17 -0
  204. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/task_runtime/flow.py +171 -0
  205. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/task_runtime/models.py +97 -0
  206. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/task_runtime/read.py +71 -0
  207. browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/task_runtime/templates.py +58 -0
  208. browser_control_and_automation_cli-0.1.1.dev3/src/browser_control_and_automation_cli.egg-info/PKG-INFO +340 -0
  209. browser_control_and_automation_cli-0.1.1.dev3/src/browser_control_and_automation_cli.egg-info/SOURCES.txt +273 -0
  210. browser_control_and_automation_cli-0.1.1.dev3/src/browser_control_and_automation_cli.egg-info/dependency_links.txt +1 -0
  211. browser_control_and_automation_cli-0.1.1.dev3/src/browser_control_and_automation_cli.egg-info/entry_points.txt +2 -0
  212. browser_control_and_automation_cli-0.1.1.dev3/src/browser_control_and_automation_cli.egg-info/requires.txt +5 -0
  213. browser_control_and_automation_cli-0.1.1.dev3/src/browser_control_and_automation_cli.egg-info/top_level.txt +1 -0
  214. browser_control_and_automation_cli-0.1.1.dev3/tasks/_templates/automation.toml +30 -0
  215. browser_control_and_automation_cli-0.1.1.dev3/tasks/_templates/task.meta.json +39 -0
  216. browser_control_and_automation_cli-0.1.1.dev3/tasks/_templates/task.py +20 -0
  217. browser_control_and_automation_cli-0.1.1.dev3/tasks/douyin_video_download/automation.toml +33 -0
  218. browser_control_and_automation_cli-0.1.1.dev3/tasks/douyin_video_download/task.meta.json +107 -0
  219. browser_control_and_automation_cli-0.1.1.dev3/tasks/douyin_video_download/task.py +314 -0
  220. browser_control_and_automation_cli-0.1.1.dev3/tasks/interactive_reveal_capture/automation.toml +31 -0
  221. browser_control_and_automation_cli-0.1.1.dev3/tasks/interactive_reveal_capture/task.meta.json +82 -0
  222. browser_control_and_automation_cli-0.1.1.dev3/tasks/interactive_reveal_capture/task.py +43 -0
  223. browser_control_and_automation_cli-0.1.1.dev3/tasks/karpathy_nitter_latest_five/task.meta.json +121 -0
  224. browser_control_and_automation_cli-0.1.1.dev3/tasks/karpathy_nitter_latest_five/task.py +186 -0
  225. browser_control_and_automation_cli-0.1.1.dev3/tasks/lazy_scroll_capture/automation.toml +33 -0
  226. browser_control_and_automation_cli-0.1.1.dev3/tasks/lazy_scroll_capture/task.meta.json +76 -0
  227. browser_control_and_automation_cli-0.1.1.dev3/tasks/lazy_scroll_capture/task.py +25 -0
  228. browser_control_and_automation_cli-0.1.1.dev3/tests/__init__.py +1 -0
  229. browser_control_and_automation_cli-0.1.1.dev3/tests/conftest.py +27 -0
  230. browser_control_and_automation_cli-0.1.1.dev3/tests/integration/fixture_server.py +451 -0
  231. browser_control_and_automation_cli-0.1.1.dev3/tests/integration/test_daemon_actions.py +690 -0
  232. browser_control_and_automation_cli-0.1.1.dev3/tests/integration/test_runtime_stability.py +48 -0
  233. browser_control_and_automation_cli-0.1.1.dev3/tests/integration/test_task_cli.py +37 -0
  234. browser_control_and_automation_cli-0.1.1.dev3/tests/integration/test_task_runtime_read.py +176 -0
  235. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_action_catalog.py +84 -0
  236. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_agent_scope.py +49 -0
  237. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_automation_api.py +198 -0
  238. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_automation_commands.py +365 -0
  239. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_automation_projections.py +192 -0
  240. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_automation_publish.py +165 -0
  241. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_automation_service.py +228 -0
  242. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_browser_models.py +36 -0
  243. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_browser_service.py +278 -0
  244. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_browser_stealth.py +71 -0
  245. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_cli.py +175 -0
  246. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_daemon_app_validation.py +162 -0
  247. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_daemon_browser_service.py +596 -0
  248. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_daemon_client.py +117 -0
  249. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_daemon_server.py +54 -0
  250. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_doctor_command.py +111 -0
  251. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_error_hints.py +14 -0
  252. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_extension_driver_actions.py +358 -0
  253. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_extension_transport.py +493 -0
  254. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_guard_scripts.py +74 -0
  255. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_install_skills_command.py +171 -0
  256. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_lifecycle_commands.py +355 -0
  257. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_network.py +68 -0
  258. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_paths_command.py +26 -0
  259. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_profile_discovery.py +171 -0
  260. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_python_compat_guard.py +38 -0
  261. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_python_compatibility.py +36 -0
  262. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_release_artifacts.py +36 -0
  263. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_repo_metadata.py +51 -0
  264. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_repo_skill_docs.py +78 -0
  265. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_repo_text_contracts.py +42 -0
  266. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_repo_workflows.py +33 -0
  267. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_runtime_presentation.py +304 -0
  268. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_semantic_refs.py +31 -0
  269. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_task_commands.py +120 -0
  270. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_task_entrypoint.py +48 -0
  271. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_task_runtime_automation.py +89 -0
  272. browser_control_and_automation_cli-0.1.1.dev3/tests/unit/test_task_runtime_client_read.py +147 -0
  273. browser_control_and_automation_cli-0.1.1.dev3/third_party/bridgic-browser/LICENSE +22 -0
  274. browser_control_and_automation_cli-0.1.1.dev3/third_party/bridgic-browser/PROVENANCE.md +22 -0
  275. browser_control_and_automation_cli-0.1.1.dev3/uv.lock +513 -0
@@ -0,0 +1,34 @@
1
+ ## Description
2
+
3
+ <!-- Briefly describe your changes and link to any related issues. -->
4
+
5
+ Related issue:
6
+
7
+ ## Type of Change
8
+
9
+ - [ ] 🐛 Bug fix
10
+ - [ ] ✨ New feature
11
+ - [ ] 📝 Documentation
12
+ - [ ] ♻️ Refactor
13
+ - [ ] 🔧 CI / build / tooling
14
+ - [ ] 🧪 Test coverage
15
+
16
+ ## Checklist
17
+
18
+ - [ ] I ran the relevant checks (`ruff`, `mypy`, `pytest`, architecture guard)
19
+ - [ ] I updated tests or docs if needed
20
+ - [ ] My changes follow the architectural boundaries (see `AGENTS.md`)
21
+
22
+ ## Architectural Boundaries
23
+
24
+ If your change crosses module boundaries, confirm it aligns with `AGENTS.md`:
25
+
26
+ - [ ] `browser_cli.actions` owns daemon-backed CLI action metadata
27
+ - [ ] `browser_cli.daemon` owns the long-lived daemon and command dispatch
28
+ - [ ] `browser_cli.drivers` owns the explicit backend contract
29
+ - [ ] `browser_cli.browser` owns low-level Playwright primitives
30
+ - [ ] `browser_cli.refs` owns semantic ref models and generation
31
+
32
+ ## Screenshots / Output
33
+
34
+ <!-- If applicable, paste CLI output or test results here. -->
@@ -0,0 +1,130 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ workflow_dispatch:
9
+
10
+ concurrency:
11
+ group: ci-${{ github.ref }}
12
+ cancel-in-progress: true
13
+
14
+ env:
15
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
16
+
17
+ jobs:
18
+ guard:
19
+ name: Guard Checks
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+
24
+ - name: Set up uv
25
+ uses: astral-sh/setup-uv@v7
26
+ with:
27
+ python-version-file: .python-version
28
+ enable-cache: true
29
+
30
+ - name: Sync dependencies
31
+ run: uv sync --locked --dev
32
+
33
+ - name: Run guards
34
+ run: ./scripts/guard.sh
35
+
36
+ unit-test:
37
+ name: Unit Tests
38
+ runs-on: ubuntu-latest
39
+ strategy:
40
+ fail-fast: false
41
+ matrix:
42
+ python-version: ['3.10', '3.11', '3.12']
43
+ steps:
44
+ - uses: actions/checkout@v4
45
+
46
+ - name: Set up uv and Python ${{ matrix.python-version }}
47
+ uses: astral-sh/setup-uv@v7
48
+ with:
49
+ python-version: ${{ matrix.python-version }}
50
+ enable-cache: true
51
+
52
+ - name: Sync dependencies
53
+ run: uv sync --locked --dev
54
+
55
+ - name: Run unit tests
56
+ run: uv run pytest tests/unit -v --tb=short
57
+
58
+ lint:
59
+ name: Lint (Ruff)
60
+ runs-on: ubuntu-latest
61
+ steps:
62
+ - uses: actions/checkout@v4
63
+
64
+ - name: Set up uv
65
+ uses: astral-sh/setup-uv@v7
66
+ with:
67
+ python-version-file: .python-version
68
+ enable-cache: true
69
+
70
+ - name: Sync dependencies
71
+ run: uv sync --locked --dev
72
+
73
+ - name: Run Python compatibility guard
74
+ run: uv run python scripts/guards/python_compatibility.py
75
+
76
+ - name: Run Ruff linter
77
+ run: uv run ruff check src tests scripts
78
+
79
+ - name: Run Ruff formatter check
80
+ run: uv run ruff format --check src tests scripts
81
+
82
+ integration-test:
83
+ name: Integration Tests
84
+ runs-on: ubuntu-latest
85
+ steps:
86
+ - uses: actions/checkout@v4
87
+
88
+ - name: Set up uv
89
+ uses: astral-sh/setup-uv@v7
90
+ with:
91
+ python-version-file: .python-version
92
+ enable-cache: true
93
+
94
+ - name: Sync dependencies
95
+ run: uv sync --locked --dev
96
+
97
+ - name: Install Playwright
98
+ run: uv run playwright install --with-deps chromium
99
+
100
+ - name: Run integration tests
101
+ run: uv run pytest tests/integration -v --tb=short -m "not smoke"
102
+ timeout-minutes: 15
103
+
104
+ packaging-smoke:
105
+ name: Packaging Smoke
106
+ runs-on: ubuntu-latest
107
+ steps:
108
+ - uses: actions/checkout@v4
109
+
110
+ - name: Set up uv
111
+ uses: astral-sh/setup-uv@v7
112
+ with:
113
+ python-version-file: .python-version
114
+ enable-cache: true
115
+
116
+ - name: Sync dependencies
117
+ run: uv sync --locked --dev
118
+
119
+ - name: Build wheel
120
+ run: uv build --wheel --no-sources
121
+
122
+ - name: Verify wheel-packaged skills
123
+ run: uv run pytest tests/unit/test_release_artifacts.py -v
124
+
125
+ - name: Smoke install-skills from built wheel
126
+ run: |
127
+ python -m venv .pkg-smoke-venv
128
+ .pkg-smoke-venv/bin/pip install dist/*.whl
129
+ target_dir="$(mktemp -d)"
130
+ .pkg-smoke-venv/bin/browser-cli install-skills --dry-run --target "$target_dir"
@@ -0,0 +1,36 @@
1
+ name: Release to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [created]
6
+
7
+ jobs:
8
+ deploy:
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ id-token: write
12
+
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ with:
16
+ fetch-depth: 0
17
+
18
+ - name: Set up uv
19
+ uses: astral-sh/setup-uv@v7
20
+ with:
21
+ python-version-file: .python-version
22
+ enable-cache: true
23
+
24
+ - name: Build package
25
+ run: uv build --no-sources --clear
26
+
27
+ - name: Verify wheel-packaged skills
28
+ run: |
29
+ uv run pytest tests/unit/test_release_artifacts.py -v
30
+ python -m venv .pkg-smoke-venv
31
+ .pkg-smoke-venv/bin/pip install dist/*.whl
32
+ target_dir="$(mktemp -d)"
33
+ .pkg-smoke-venv/bin/browser-cli install-skills --dry-run --target "$target_dir"
34
+
35
+ - name: Publish to PyPI
36
+ run: uv publish
@@ -0,0 +1,19 @@
1
+ .pytest_cache/
2
+ .ruff_cache/
3
+ .venv/
4
+ __pycache__/
5
+ *.pyc
6
+ *.pyo
7
+ *.pyd
8
+ .coverage
9
+ coverage.xml
10
+ dist/
11
+ build/
12
+ *.egg-info/
13
+ .DS_Store
14
+ playwright-report/
15
+ test-results/
16
+ tasks/**/artifacts/
17
+
18
+ trash/
19
+ .codex
@@ -0,0 +1,18 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.4.0
4
+ hooks:
5
+ - id: ruff
6
+ args: [--fix]
7
+ files: ^(src|tests|scripts)/
8
+ - id: ruff-format
9
+ files: ^(src|tests|scripts)/
10
+
11
+ - repo: local
12
+ hooks:
13
+ - id: guard-checks
14
+ name: Guard checks
15
+ entry: ./scripts/guard.sh
16
+ language: system
17
+ pass_filenames: false
18
+ always_run: true
@@ -0,0 +1,309 @@
1
+ # AGENTS.md
2
+
3
+ ## Project Mission
4
+
5
+ Browser CLI is a `CLI-first`, `Agent-first` browser tool for AI agents. The
6
+ repository has three durable surfaces:
7
+
8
+ - `browser-cli read` for one-shot rendered HTML or snapshot capture
9
+ - daemon-backed browser actions for persistent interactive control
10
+ - `task.py + task.meta.json + automation.toml` for reusable packaged automation
11
+ - Automation Publish Layer is a persistent local automation service with a Web
12
+ UI primary control surface.
13
+
14
+ The job of this file is to help an agent answer: what is the contract, where is
15
+ the implementation, and where should a change land first.
16
+
17
+ ## System Snapshot
18
+
19
+ - Primary interface is CLI.
20
+ - Primary implementation language is Python.
21
+ - Repository development is uv-only.
22
+ - Repository dependency resolution is pinned through `uv.lock`.
23
+ - Repository local Python selection is pinned through `.python-version`.
24
+ - Published package name is `browser-control-and-automation-cli`; the installed CLI command remains `browser-cli`.
25
+ - Published distributions must not include PEP 440 local version identifiers; `setuptools-scm` local suffixes are stripped so PyPI accepts non-tagged builds.
26
+ - `read` stays intentionally small: one URL positional plus `--snapshot` and `--scroll-bottom`.
27
+ - Managed profile mode is the default browser backend.
28
+ - Managed profile mode uses Browser CLI's dedicated Chrome data root at `~/.browser-cli/default-profile`.
29
+ - Extension mode is the preferred real-Chrome backend when the Browser CLI extension is connected and healthy.
30
+ - `browser-cli status` is the first-line lifecycle diagnosis command.
31
+ - `browser-cli reload` is the runtime reset command; page reload remains public as `browser-cli page-reload`.
32
+ - `runtime-status` includes a daemon-owned `presentation` snapshot; `browser-cli status` and the extension popup must render that shared state rather than inventing their own classifier.
33
+ - `v1` targets stable Google Chrome first and should not silently swap browser families.
34
+ - `v2` uses one daemon-managed browser instance.
35
+ - `v2` command output is JSON-first.
36
+ - `v2` uses `X_AGENT_ID` to isolate tab visibility and active-tab state.
37
+ - `v2` must not expose session concepts or global `--page` targeting flags.
38
+ - Semantic refs should follow bridgic-style reconstruction rather than DOM marker lookup.
39
+ - Daemon-side semantic refs remain the only ref system; drivers must not fork product semantics.
40
+ - Dual-driver support must preserve one CLI/daemon JSON contract across both `playwright_driver` and `extension_driver`.
41
+ - Driver parity is enforced through an explicit driver contract. Do not reintroduce dynamic backend passthrough through `__getattr__` or similar implicit escape hatches.
42
+ - Driver rebinding may happen automatically only at safe idle points, and it must be reported as `state_reset` rather than treated as perfectly continuous state.
43
+ - Reusable browser logic belongs in `task.py` through `browser_cli.task_runtime`.
44
+ - `task.meta.json` stores structured knowledge, not transcripts.
45
+ - `automation.toml` packages and configures a task snapshot; it must not duplicate task logic.
46
+ - `browser-cli task` is the first-class local authoring UX.
47
+ - `browser-cli automation publish` creates immutable snapshots under the Browser CLI home and auto-imports them into the automation service.
48
+ - Published automation snapshot truth lives under `~/.browser-cli/automations/<automation-id>/versions/<version>/automation.toml`; current service state is a separate live view.
49
+ - If source `automation.toml` exists, `browser-cli automation publish` must preserve its supported fields in the published snapshot; generated defaults are allowed only when the source manifest is absent and must be reported explicitly.
50
+ - Do not introduce a public `browser-cli explore` surface or a second browser runtime. Exploration remains an agent activity layered on top of Browser CLI.
51
+ - The extension popup is a human-facing runtime observer and light recovery surface. Agent feedback still flows through command responses and `runtime-status`.
52
+
53
+ ## Rapid Code Map
54
+
55
+ - CLI shape, command names, help text, and top-level parser wiring:
56
+ `src/browser_cli/cli/main.py`
57
+ - Install and runtime diagnostics:
58
+ `src/browser_cli/commands/doctor.py`
59
+ - Packaged skill installation and `--target` handling:
60
+ `src/browser_cli/commands/install_skills.py`
61
+ - Runtime path discovery:
62
+ `src/browser_cli/commands/paths.py`
63
+ - Daemon-backed command catalog, arguments, aliases, and request builders:
64
+ `src/browser_cli/actions/cli_specs.py`
65
+ - Generic action command execution:
66
+ `src/browser_cli/commands/action.py`
67
+ - One-shot read contract and URL normalization:
68
+ `src/browser_cli/commands/read.py`
69
+ - One-shot read runtime contract, shared Python orchestration, and daemon bootstrap path:
70
+ `src/browser_cli/task_runtime/client.py`, `src/browser_cli/task_runtime/read.py`
71
+ - `browser_cli.task_runtime` owns the public Python read contract and routes one-shot read through the daemon-managed browser lifecycle.
72
+ - Runtime diagnosis and user-facing lifecycle guidance:
73
+ `src/browser_cli/commands/status.py`
74
+ - Shared daemon runtime presentation classifier:
75
+ `src/browser_cli/daemon/runtime_presentation.py`
76
+ - Runtime reset flow:
77
+ `src/browser_cli/commands/reload.py`
78
+ - Task CLI entrypoints:
79
+ `src/browser_cli/commands/task.py`
80
+ - Task templates and built-in example metadata:
81
+ `src/browser_cli/task_runtime/templates.py`
82
+ - Automation publish and service CLI entrypoints:
83
+ `src/browser_cli/commands/automation.py`
84
+ - Automation manifest loading, publishing, persistence, scheduler, API, service runtime, and Web UI:
85
+ `src/browser_cli/automation/*`
86
+
87
+ - Daemon socket startup, shutdown, compatibility checks, and request transport:
88
+ `src/browser_cli/daemon/client.py`, `src/browser_cli/daemon/transport.py`
89
+ - Daemon action dispatch and per-command handlers:
90
+ `src/browser_cli/daemon/app.py`
91
+ - Shared daemon state:
92
+ `src/browser_cli/daemon/state.py`
93
+ - Browser lifecycle, driver selection, safe-point rebinding, read-page flow, and ref-aware command routing:
94
+ `src/browser_cli/daemon/browser_service.py`
95
+
96
+ - Driver contract:
97
+ `src/browser_cli/drivers/base.py`
98
+ - Playwright adapter layer:
99
+ `src/browser_cli/drivers/playwright_driver.py`
100
+ - Extension adapter layer:
101
+ `src/browser_cli/drivers/extension_driver.py`
102
+ - Extension-driver action mixins:
103
+ `src/browser_cli/drivers/_extension/*.py`
104
+
105
+ - Low-level Playwright browser primitives, page state, screenshots, PDF, eval, input, storage, tracing, and video:
106
+ `src/browser_cli/browser/service.py`, `src/browser_cli/browser/session.py`
107
+ - Snapshot capture helpers:
108
+ `src/browser_cli/browser/snapshot.py`
109
+ - Network capture models/buffering:
110
+ `src/browser_cli/network.py`, `src/browser_cli/browser/network_capture.py`
111
+ - Stealth and browser launch behavior:
112
+ `src/browser_cli/browser/stealth.py`
113
+
114
+ - Semantic ref generation:
115
+ `src/browser_cli/refs/generator.py`
116
+ - Semantic ref reconstruction into Playwright locators:
117
+ `src/browser_cli/refs/resolver.py`
118
+ - Latest snapshot storage per page:
119
+ `src/browser_cli/refs/registry.py`
120
+ - Ref models shared across daemon and drivers:
121
+ `src/browser_cli/refs/models.py`
122
+
123
+ - Agent-scoped tab ownership, active-tab tracking, and busy-state conflict logic:
124
+ `src/browser_cli/tabs/registry.py`
125
+ - `X_AGENT_ID` resolution:
126
+ `src/browser_cli/agent_scope/__init__.py`
127
+
128
+ - Managed Chrome discovery, profile directory resolution, and lock detection:
129
+ `src/browser_cli/profiles/discovery.py`
130
+ - Runtime home, socket paths, automation paths, and extension socket config:
131
+ `src/browser_cli/constants.py`
132
+
133
+ - Extension session lifecycle, handshake, heartbeat, and artifact chunk assembly:
134
+ `src/browser_cli/extension/session.py`
135
+ - Extension protocol models and required capabilities:
136
+ `src/browser_cli/extension/protocol.py`
137
+ - Browser extension entrypoints:
138
+ `browser-cli-extension/src/background.js`, `browser-cli-extension/src/protocol.js`, `browser-cli-extension/src/page_runtime.js`
139
+ - Extension popup runtime observer UI and pure view model:
140
+ `browser-cli-extension/popup.html`, `browser-cli-extension/src/popup.js`, `browser-cli-extension/src/popup_view.js`
141
+
142
+ - Task runtime client used by `task.py`:
143
+ `src/browser_cli/task_runtime/client.py`
144
+ - High-level Flow helpers used by tasks:
145
+ `src/browser_cli/task_runtime/flow.py`
146
+ - Task entrypoint loading and validation:
147
+ `src/browser_cli/task_runtime/entrypoint.py`
148
+ - Task metadata schemas and validation:
149
+ `src/browser_cli/task_runtime/models.py`
150
+
151
+ - User-facing output rendering:
152
+ `src/browser_cli/outputs/render.py`, `src/browser_cli/outputs/json.py`
153
+ - Packaged Browser CLI skill assets shipped with the installed wheel:
154
+ `src/browser_cli/packaged_skills/*`
155
+ - Error taxonomy and exit codes:
156
+ `src/browser_cli/errors.py`, `src/browser_cli/error_codes.py`, `src/browser_cli/exit_codes.py`
157
+
158
+ - Guard scripts that enforce product contracts and package boundaries:
159
+ `scripts/guards/*.py`
160
+ - Example tasks and packaged automations:
161
+ `tasks/*`
162
+ - Browser-CLI-specific agent delivery guidance:
163
+ `skills/browser-cli-delivery/SKILL.md`
164
+ - Tests for behavior and contracts:
165
+ `tests/unit/*`, `tests/integration/*`
166
+
167
+ ## Common Navigation Paths
168
+
169
+ - If the user wants a new daemon-backed CLI command:
170
+ update `src/browser_cli/actions/cli_specs.py`, then add the daemon handler in `src/browser_cli/daemon/app.py`, then implement the browser behavior in `src/browser_cli/daemon/browser_service.py` and the relevant driver(s).
171
+ - If the user wants to change `read` behavior:
172
+ inspect `src/browser_cli/commands/read.py`, `src/browser_cli/task_runtime/client.py`, and `src/browser_cli/task_runtime/read.py` first, then `src/browser_cli/daemon/browser_service.py::read_page`.
173
+ - If the user reports daemon startup, stale socket, or reload issues:
174
+ inspect `src/browser_cli/daemon/client.py`, `src/browser_cli/daemon/transport.py`, `src/browser_cli/commands/status.py`, and `src/browser_cli/commands/reload.py`.
175
+ If startup fails while waiting for an extension session, inspect `src/browser_cli/daemon/browser_service.py::ensure_started`; extension handshake wait is a best-effort preference signal and must fall back to Playwright instead of aborting daemon startup.
176
+ - If the user wants a first-run environment check or path discovery for installed users:
177
+ inspect `src/browser_cli/commands/doctor.py`, `src/browser_cli/commands/paths.py`, `src/browser_cli/constants.py`, and `src/browser_cli/profiles/discovery.py`.
178
+ - If the user reports a driver mismatch or extension/Playwright inconsistency:
179
+ start at `src/browser_cli/drivers/base.py`, then compare `playwright_driver.py`, `extension_driver.py`, and `daemon/browser_service.py`.
180
+ - If the user reports broken refs, stale snapshots, or element targeting failures:
181
+ start at `src/browser_cli/refs/registry.py`, `src/browser_cli/refs/generator.py`, `src/browser_cli/refs/resolver.py`, and the snapshot-related methods in `src/browser_cli/daemon/browser_service.py`.
182
+ - If the user reports busy-tab or tab-visibility conflicts:
183
+ start at `src/browser_cli/tabs/registry.py` and the tab-related handlers in `src/browser_cli/daemon/app.py`.
184
+ - If the user wants task or automation behavior changed:
185
+ inspect `src/browser_cli/task_runtime/*` and `src/browser_cli/automation/*`, then validate against example tasks under `tasks/`.
186
+ - If the user wants task examples or template output changed:
187
+ inspect `src/browser_cli/task_runtime/templates.py`, `src/browser_cli/commands/task.py`, and `tests/unit/test_task_commands.py`.
188
+ - If the user reports recurring runs, automation history, local Web UI, or automation-service state issues:
189
+ start at `src/browser_cli/automation/service/*`, `src/browser_cli/automation/persistence/*`, `src/browser_cli/automation/scheduler/*`, and `src/browser_cli/automation/api/*`.
190
+ - If the user reports confusion about what publish created or which version is active:
191
+ inspect `src/browser_cli/commands/automation.py`, `src/browser_cli/automation/publisher.py`, `src/browser_cli/automation/api/server.py`, and the snapshot directories under `~/.browser-cli/automations/<automation-id>/versions/`.
192
+ - If the user reports publish/config drift between a version and current service state:
193
+ inspect the snapshot manifest under `~/.browser-cli/automations/<automation-id>/versions/<version>/automation.toml` first, then compare it with `browser_cli.commands.automation` live inspect payload assembly and `browser_cli.automation.api.server` persisted automation serialization.
194
+ - If the user reports that `browser-cli read` stopped explaining fallback profile use:
195
+ inspect `src/browser_cli/daemon/browser_service.py::read_page`, `src/browser_cli/task_runtime/read.py`, and `src/browser_cli/commands/read.py`; fallback metadata is only guaranteed on the read path.
196
+ - If the user mentions extension capability gaps, artifacts, or real Chrome behavior:
197
+ inspect both `src/browser_cli/extension/*` and `browser-cli-extension/src/*`; many bugs live in protocol drift between Python and extension JS.
198
+ Symptom -> root cause -> where to inspect:
199
+ `Tab <id> is not debuggable: unknown` during extension-mode `read` or `open-tab`
200
+ -> extension tried to attach Chrome debugger before the new tab reported a debuggable URL
201
+ -> inspect `browser-cli-extension/src/background.js::openTab` and `browser-cli-extension/src/debugger.js::ensureAttached`
202
+ - If the user reports popup/runtime observer drift:
203
+ start at `src/browser_cli/daemon/runtime_presentation.py`, then `src/browser_cli/extension/session.py`, then `browser-cli-extension/src/background.js`, `browser-cli-extension/src/popup_view.js`, and `browser-cli-extension/src/popup.js`.
204
+ - If the user reports long-run stability drift across repeated reloads, reconnects, or artifact runs:
205
+ start at `src/browser_cli/daemon/browser_service.py`, `src/browser_cli/daemon/runtime_presentation.py`, `src/browser_cli/commands/status.py`, and `src/browser_cli/extension/session.py`.
206
+ Symptom -> root cause -> where to inspect:
207
+ `status`, popup, and command `meta` disagree after repeated reconnect or reload
208
+ -> runtime truth path drift
209
+ -> inspect `browser_service.runtime_status`, `build_runtime_presentation`, `commands/status.py`, and popup-facing extension status endpoints.
210
+ Repeated artifact failures poison later requests
211
+ -> extension artifact buffers or disconnect cleanup are not bounded
212
+ -> inspect `src/browser_cli/extension/session.py` and `tests/unit/test_extension_transport.py`.
213
+ - If a change touches architecture or public product contracts:
214
+ inspect `scripts/guards/architecture.py`, `scripts/guards/product_contracts.py`, and `scripts/guards/docs_sync.py` before making the change final.
215
+
216
+ ## Architectural Boundaries
217
+
218
+ - `browser_cli.actions` owns daemon-backed CLI action metadata.
219
+ - `browser_cli.agent_scope` owns `X_AGENT_ID` resolution and defaults.
220
+ - `browser_cli.automation` owns automation manifest loading, publishing, persistent automation-service state, scheduler logic, local API/Web UI, hooks, and automation execution.
221
+ - `browser_cli.browser` owns low-level Playwright browser primitives, launch behavior, snapshot input capture, storage, trace/video plumbing, and network capture helpers.
222
+ - `browser_cli.cli` parses top-level commands and owns help text and exit code behavior.
223
+ - `browser_cli.commands` owns user-facing command handlers for `read`, `task`, `automation`, `status`, `reload`, and the generic action runner.
224
+ - `browser_cli.daemon` owns the long-lived daemon, socket transport, request/response protocol, browser lifecycle, runtime status, and command dispatch.
225
+ - `browser_cli.drivers` owns the explicit backend contract plus `playwright_driver` and `extension_driver`. Drivers consume daemon-built locator specs, not raw refs.
226
+ - `browser_cli.extension` owns the extension transport, handshake, heartbeat, required-capability checks, and artifact assembly from WebSocket chunks.
227
+ - `browser_cli.outputs` owns final rendering for content-first and JSON-first surfaces.
228
+ - `browser_cli.packaged_skills` owns the Browser CLI skill assets that are shipped in installed distributions and consumed by `browser-cli install-skills`.
229
+ - `browser_cli.profiles` owns Chrome executable discovery, managed profile directories, profile naming, and lock detection.
230
+ - `browser_cli.refs` owns semantic ref models, snapshot generation, latest-snapshot registry state, and locator reconstruction.
231
+ - `browser_cli.tabs` owns agent-visible tab state, active-tab tracking, and busy-state conflict rules.
232
+ - `browser_cli.task_runtime` owns the public Python runtime used by `task.py`, including one-shot read orchestration and flow helpers.
233
+
234
+ Keep these boundaries intact. Do not push browser internals into CLI handlers,
235
+ do not move semantic-ref logic into drivers, and do not bypass the daemon for
236
+ public interactive commands.
237
+
238
+ ## Implementation Conventions
239
+
240
+ - Top-level parser registration lives in `src/browser_cli/cli/main.py`. `read`, `doctor`, `paths`, `task`, `automation`, `status`, and lifecycle `reload` are hand-wired there; the rest come from `get_action_specs()`.
241
+ - `browser-cli install-skills` installs the packaged Browser CLI skills into `~/.agents/skills` by default and `--target` overrides the destination root.
242
+ - Public daemon-backed actions should be added through `ActionSpec`, not by manually bolting ad hoc parsers into `main.py`.
243
+ - The lifecycle command `browser-cli reload` and the page action `browser-cli page-reload` are intentionally different surfaces. Do not collapse them.
244
+ - Public daemon commands return JSON payloads. Preserve `ok/data/meta` shape and machine-readable error codes.
245
+ - `runtime-status` is the agent/runtime truth surface; popup code may read and render it, but must not redefine runtime state semantics.
246
+ - Tab targeting is agent-scoped. Do not add public `--page`, `--page-id`, session IDs, or similar cross-agent escape hatches.
247
+ - Drivers must accept daemon-built `LocatorSpec`, not raw `ref` strings.
248
+ - Drivers must expose snapshot input, not final snapshot rendering. Final semantic snapshot generation stays daemon-owned.
249
+ - Extension and Playwright backends must stay behaviorally aligned on the same public contract even if their internal mechanics differ.
250
+ - Popup daemon status reads and workspace rebuild requests flow through the extension listener HTTP surface in `src/browser_cli/extension/session.py`; keep popup UI logic out of that state interpretation path.
251
+ - The extension listener is implemented on the WebSocket listener stack, which only accepts body-less `GET` HTTP requests before upgrade. If popup control endpoints need to mutate runtime state, keep them narrow and route them through dedicated `GET` paths instead of adding a parallel HTTP server.
252
+ - Prefer `browser-cli status` before manual daemon cleanup. Prefer `browser-cli reload` over ad hoc process killing when runtime state is bad.
253
+ - `task.py` contains reusable automation logic. `automation.toml` packages and configures that logic; it should not become a second implementation surface.
254
+ - Runtime automation state belongs to the automation service persistence layer, not `automation.toml`. `automation.toml` remains an import/export and reviewable packaging artifact.
255
+ - Published automations are immutable snapshots. Versioning should append a new snapshot rather than mutating an older one.
256
+ - `browser-cli automation inspect --version <n>` must render snapshot config and live config separately; do not collapse them into one synthesized automation view.
257
+ - `runtime.timeout_seconds` is enforced only by the automation service and applies to the total wall-clock budget for one automation run; timeout failures must not auto-retry.
258
+ - When adapting third-party logic from `third_party/bridgic-browser`, keep provenance clear and the adapted code understandable. Do not add a runtime dependency on the external package just to shortcut implementation.
259
+
260
+ ## Testing And Validation
261
+
262
+ - Unit tests live under `tests/unit/`; integration coverage lives under `tests/integration/`.
263
+ - Contract-sensitive areas include CLI parser shape, action catalog parity, daemon lifecycle, semantic refs, driver parity, automation validation, and `X_AGENT_ID` tab isolation.
264
+ - The repository target is Python 3.10+. Keep runtime code and tests on Python 3.10-compatible syntax and stdlib APIs; local 3.12-only constructs can pass ad hoc checks and still fail CI collection, lint, or guards.
265
+ - `scripts/guards/python_compatibility.py` owns the static Python 3.10 compatibility check; keep new syntax and stdlib-API regression rules there so local 3.12 development fails before CI does.
266
+ - Tests and task fixtures must resolve repo assets relative to the checked-out repository, not a developer-specific absolute workspace path; CI runners will fail on hard-coded local paths first.
267
+ - `scripts/lint.sh` owns repository lint execution.
268
+ - `scripts/test.sh` owns repository test execution.
269
+ - `scripts/guard.sh` owns architecture, product-contract, and doc-sync guards.
270
+ - `scripts/check.sh` runs lint, tests, and guard in the expected order.
271
+ - The guard implementations live under `scripts/guards/`.
272
+ - Repo-local test runs should refresh the editable package with `uv sync --dev --reinstall-package browser-control-and-automation-cli` before `pytest`; otherwise daemon compatibility checks can drift after local commits because `setuptools-scm` version metadata lags behind the current checkout.
273
+ - Release builds should use `uv build --no-sources --clear` so stale `dist/` artifacts are not accidentally published alongside the current package.
274
+ - After each code change, run lint and guard as part of the full validation flow.
275
+ - After each code change, run lint, tests, and guard.
276
+ - After dependency metadata changes, run `uv sync --dev` before lint, tests, and guard.
277
+ - After each code change, run `scripts/lint.sh`, `scripts/test.sh`, and `scripts/guard.sh`, or run `scripts/check.sh`.
278
+ - When architecture, package boundaries, or frozen product decisions change, update `AGENTS.md` and the corresponding guard rules in the same change.
279
+ - When a new top-level `browser_cli` package, public CLI surface, or major runtime contract is introduced, update both this file and the guard expectations before considering the change complete.
280
+
281
+ ## Updating This File
282
+
283
+ `AGENTS.md` is part of the implementation surface. Update it when a task
284
+ changes how an agent should navigate, reason about, or safely modify the repo.
285
+
286
+ Always update this file when:
287
+
288
+ - the public CLI surface changes
289
+ - a package boundary or ownership rule changes
290
+ - daemon/driver/ref/tab/automation contracts change
291
+ - a new recurring debugging path becomes obvious
292
+ - a previously documented rule becomes stale
293
+
294
+ Do not dump changelog noise here. Keep only durable, reusable knowledge that
295
+ should help the next agent move faster.
296
+
297
+ ## Failure-Driven Knowledge Capture
298
+
299
+ Agents should learn from failures and write back only the parts that will
300
+ matter again.
301
+
302
+ - If a task uncovers a recurring failure mode, add the lesson next to the owning subsystem above instead of writing a generic journal entry.
303
+ - Record stable knowledge, not transient machine state. Good additions include invariants, protocol mismatches, common root causes, and the safest inspection path.
304
+ - Use the smallest durable form possible:
305
+ `symptom -> root cause -> where to inspect -> safe fix`
306
+ - Prefer code-anchored statements over anecdotes. A future agent should be able to jump from the note to the owning file immediately.
307
+ - If the failure was caused by stale documentation, replace the stale rule instead of appending a contradictory note.
308
+ - If the lesson is only useful for the current branch, log, or local environment, do not add it here.
309
+ - When a bug fix changes behavior, add the reusable takeaway in the same change so the next task benefits immediately.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 browser-cli contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ recursive-include skills *