browser-control-and-automation-cli 0.1.1.dev3__tar.gz → 0.1.3__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.
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/AGENTS.md +3 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/PKG-INFO +1 -1
- browser_control_and_automation_cli-0.1.3/src/browser_cli/__init__.py +21 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/daemon/browser_service.py +46 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/daemon/client.py +4 -1
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/daemon/server.py +2 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_control_and_automation_cli.egg-info/PKG-INFO +1 -1
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_control_and_automation_cli.egg-info/SOURCES.txt +1 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_daemon_browser_service.py +48 -0
- browser_control_and_automation_cli-0.1.3/tests/unit/test_package_version.py +44 -0
- browser_control_and_automation_cli-0.1.1.dev3/src/browser_cli/__init__.py +0 -7
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/.github/pull_request_template.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/.github/workflows/ci.yml +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/.github/workflows/release.yml +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/.gitignore +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/.pre-commit-config.yaml +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/.python-version +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/LICENSE +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/MANIFEST.in +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/README.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/manifest.json +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/offscreen.html +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/package.json +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/popup.html +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/background/artifact_actions.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/background/dialog_actions.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/background/input_actions.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/background/locator_actions.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/background/observe_actions.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/background/page_actions.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/background/trace_actions.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/background/video_actions.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/background/workspace.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/background.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/debugger.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/offscreen.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/page_runtime.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/popup.css +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/popup.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/popup_view.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/src/protocol.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/tests/debugger.test.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/browser-cli-extension/tests/popup_view.test.js +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/examples/task-and-automation.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/extension-driver-gaps.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/installed-with-pip.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/installed-with-uv.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/smoke-checklist.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-08-browser-cli-v1-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-09-browser-cli-semantic-ref-task-workflow-skill-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-09-browser-cli-v2-agent-actions-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-10-browser-cli-dual-driver-extension-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-10-browser-cli-status-reload-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-11-browser-cli-extension-driver-parity-refactor-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-11-browser-cli-network-response-body-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-12-browser-cli-popup-runtime-polish.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-12-browser-cli-workflow-publish-layer-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-13-browser-cli-long-run-stability-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-13-browser-cli-pip-user-ux-roadmap-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-13-browser-cli-task-automation-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-14-automation-manifest-roundtrip-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-14-browser-cli-delivery-skills-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-14-browser-cli-douyin-automation-packaging-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-14-browser-cli-extension-attach-race-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-14-browser-cli-install-skills-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-14-browser-cli-persistent-startup-page-reuse.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-14-browser-cli-release-readiness-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-14-browser-cli-task-runtime-read-unification-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-14-browser-cli-uninstall-doc-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-14-browser-cli-uv-migration-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-14-daemon-parameter-validation-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/plans/2026-04-14-pypi-package-rename-implementation-plan.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-08-browser-cli-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-09-browser-cli-backed-explore-delivery-skill-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-09-browser-cli-explore-task-workflow-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-09-browser-cli-v2-agent-actions-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-09-browser-cli-v3a-semantic-ref-resolution-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-10-browser-cli-dual-driver-extension-architecture-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-10-browser-cli-status-reload-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-11-browser-cli-extension-driver-parity-refactor-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-11-browser-cli-extension-video-cdp-screencast-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-11-browser-cli-network-response-body-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-11-browser-cli-next-roadmap.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-12-browser-cli-popup-control-surface-runtime-polish-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-12-browser-cli-workflow-publish-layer-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-13-browser-cli-long-run-stability-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-13-browser-cli-pip-user-ux-backlog.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-13-browser-cli-pip-user-ux-roadmap-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-13-browser-cli-task-automation-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-14-automation-manifest-roundtrip-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-14-browser-cli-delivery-skills-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-14-browser-cli-persistent-startup-page-reuse-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-14-browser-cli-release-readiness-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-14-browser-cli-task-runtime-read-unification-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-14-browser-cli-uninstall-doc-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-14-browser-cli-uv-migration-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-14-daemon-parameter-validation-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-14-install-skills-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/superpowers/specs/2026-04-14-pypi-package-rename-design.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/docs/uninstall.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/pyproject.toml +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/scripts/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/scripts/check.sh +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/scripts/generate_packaged_skill_docs.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/scripts/guard.sh +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/scripts/guards/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/scripts/guards/architecture.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/scripts/guards/common.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/scripts/guards/docs_sync.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/scripts/guards/product_contracts.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/scripts/guards/python_compatibility.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/scripts/guards/run_all.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/scripts/lint.sh +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/scripts/test.sh +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/setup.cfg +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/skills/browser-cli-converge/SKILL.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/skills/browser-cli-delivery/SKILL.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/skills/browser-cli-explore/SKILL.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/actions/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/actions/cli_specs.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/agent_scope/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/api/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/api/server.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/hooks.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/loader.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/models.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/persistence/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/persistence/store.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/projections.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/publisher.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/scheduler/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/scheduler/schedule.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/service/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/service/__main__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/service/client.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/service/runtime.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/toml.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/web/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/automation/web/assets.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/browser/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/browser/models.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/browser/network_capture.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/browser/service.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/browser/session.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/browser/snapshot.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/browser/stealth.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/cli/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/cli/error_hints.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/cli/main.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/commands/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/commands/action.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/commands/automation.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/commands/doctor.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/commands/install_skills.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/commands/paths.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/commands/read.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/commands/reload.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/commands/status.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/commands/task.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/constants.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/daemon/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/daemon/__main__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/daemon/app.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/daemon/models.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/daemon/runtime_presentation.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/daemon/state.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/daemon/transport.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/drivers/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/drivers/_extension/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/drivers/_extension/artifact_actions.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/drivers/_extension/dialog_actions.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/drivers/_extension/input_actions.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/drivers/_extension/locator_actions.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/drivers/_extension/observe_actions.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/drivers/_extension/page_actions.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/drivers/_extension/state_actions.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/drivers/base.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/drivers/extension_driver.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/drivers/models.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/drivers/playwright_driver.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/error_codes.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/errors.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/exit_codes.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/extension/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/extension/protocol.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/extension/session.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/network.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/outputs/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/outputs/json.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/outputs/render.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/packaged_skills/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/packaged_skills/browser-cli-converge/SKILL.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/packaged_skills/browser-cli-delivery/SKILL.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/packaged_skills/browser-cli-explore/SKILL.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/profiles/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/profiles/discovery.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/refs/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/refs/generator.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/refs/models.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/refs/registry.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/refs/resolver.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/tabs/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/tabs/registry.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/task_runtime/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/task_runtime/client.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/task_runtime/entrypoint.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/task_runtime/errors.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/task_runtime/flow.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/task_runtime/models.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/task_runtime/read.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_cli/task_runtime/templates.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_control_and_automation_cli.egg-info/dependency_links.txt +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_control_and_automation_cli.egg-info/entry_points.txt +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_control_and_automation_cli.egg-info/requires.txt +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/src/browser_control_and_automation_cli.egg-info/top_level.txt +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tasks/_templates/automation.toml +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tasks/_templates/task.meta.json +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tasks/_templates/task.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tasks/douyin_video_download/automation.toml +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tasks/douyin_video_download/task.meta.json +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tasks/douyin_video_download/task.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tasks/interactive_reveal_capture/automation.toml +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tasks/interactive_reveal_capture/task.meta.json +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tasks/interactive_reveal_capture/task.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tasks/karpathy_nitter_latest_five/task.meta.json +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tasks/karpathy_nitter_latest_five/task.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tasks/lazy_scroll_capture/automation.toml +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tasks/lazy_scroll_capture/task.meta.json +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tasks/lazy_scroll_capture/task.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/__init__.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/conftest.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/integration/fixture_server.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/integration/test_daemon_actions.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/integration/test_runtime_stability.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/integration/test_task_cli.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/integration/test_task_runtime_read.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_action_catalog.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_agent_scope.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_automation_api.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_automation_commands.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_automation_projections.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_automation_publish.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_automation_service.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_browser_models.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_browser_service.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_browser_stealth.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_cli.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_daemon_app_validation.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_daemon_client.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_daemon_server.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_doctor_command.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_error_hints.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_extension_driver_actions.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_extension_transport.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_guard_scripts.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_install_skills_command.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_lifecycle_commands.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_network.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_paths_command.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_profile_discovery.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_python_compat_guard.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_python_compatibility.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_release_artifacts.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_repo_metadata.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_repo_skill_docs.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_repo_text_contracts.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_repo_workflows.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_runtime_presentation.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_semantic_refs.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_task_commands.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_task_entrypoint.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_task_runtime_automation.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/tests/unit/test_task_runtime_client_read.py +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/third_party/bridgic-browser/LICENSE +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/third_party/bridgic-browser/PROVENANCE.md +0 -0
- {browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/uv.lock +0 -0
{browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/AGENTS.md
RENAMED
|
@@ -199,6 +199,9 @@ the implementation, and where should a change land first.
|
|
|
199
199
|
`Tab <id> is not debuggable: unknown` during extension-mode `read` or `open-tab`
|
|
200
200
|
-> extension tried to attach Chrome debugger before the new tab reported a debuggable URL
|
|
201
201
|
-> inspect `browser-cli-extension/src/background.js::openTab` and `browser-cli-extension/src/debugger.js::ensureAttached`
|
|
202
|
+
`read` fails in extension mode with `Separator is found, but chunk is longer than limit` or `chunk exceed the limit`
|
|
203
|
+
-> extension-side page extraction hit a large-result chunking limit on the current page
|
|
204
|
+
-> inspect `src/browser_cli/daemon/browser_service.py::read_page`, `src/browser_cli/drivers/_extension/page_actions.py`, and `browser-cli-extension/src/background/page_actions.js`; safe fix is a one-shot read fallback to Playwright rather than changing CLI contracts
|
|
202
205
|
- If the user reports popup/runtime observer drift:
|
|
203
206
|
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
207
|
- If the user reports long-run stability drift across repeated reloads, reconnects, or artifact runs:
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""browser-cli package."""
|
|
2
|
+
|
|
3
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
4
|
+
|
|
5
|
+
__all__ = ["__version__"]
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def _resolve_version() -> str:
|
|
9
|
+
for distribution_name in (
|
|
10
|
+
"browser-control-and-automation-cli",
|
|
11
|
+
"browserctl",
|
|
12
|
+
"browser-cli",
|
|
13
|
+
):
|
|
14
|
+
try:
|
|
15
|
+
return version(distribution_name)
|
|
16
|
+
except PackageNotFoundError:
|
|
17
|
+
continue
|
|
18
|
+
return "0+unknown"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
__version__ = _resolve_version()
|
|
@@ -58,6 +58,12 @@ class BrowserService:
|
|
|
58
58
|
READ_SCROLL_PAUSE_MS = 450
|
|
59
59
|
READ_SCROLL_MAX_ROUNDS = 8
|
|
60
60
|
READ_SCROLL_STABLE_ROUNDS = 2
|
|
61
|
+
_READ_EXTENSION_FALLBACK_PATTERNS = (
|
|
62
|
+
"Separator is found, but chunk is longer than limit",
|
|
63
|
+
"Separator is not found, and chunk exceed the limit",
|
|
64
|
+
"chunk is longer than limit",
|
|
65
|
+
"chunk exceed the limit",
|
|
66
|
+
)
|
|
61
67
|
|
|
62
68
|
def __init__(
|
|
63
69
|
self,
|
|
@@ -333,6 +339,40 @@ class BrowserService:
|
|
|
333
339
|
) -> dict[str, Any]:
|
|
334
340
|
if output_mode not in {"html", "snapshot"}:
|
|
335
341
|
raise InvalidInputError(f"Unsupported read output mode: {output_mode}")
|
|
342
|
+
try:
|
|
343
|
+
return await self._read_page_once(
|
|
344
|
+
url=url,
|
|
345
|
+
output_mode=output_mode,
|
|
346
|
+
scroll_bottom=scroll_bottom,
|
|
347
|
+
)
|
|
348
|
+
except Exception as exc:
|
|
349
|
+
if not self._should_retry_read_on_playwright(exc):
|
|
350
|
+
raise
|
|
351
|
+
logger.warning(
|
|
352
|
+
"Extension read failed with chunking error; retrying with playwright: %s",
|
|
353
|
+
exc,
|
|
354
|
+
)
|
|
355
|
+
await self._activate_driver("playwright", reason="extension-read-fallback")
|
|
356
|
+
payload = await self._read_page_once(
|
|
357
|
+
url=url,
|
|
358
|
+
output_mode=output_mode,
|
|
359
|
+
scroll_bottom=scroll_bottom,
|
|
360
|
+
)
|
|
361
|
+
payload["driver_fallback"] = {
|
|
362
|
+
"from": "extension",
|
|
363
|
+
"to": "playwright",
|
|
364
|
+
"reason": "extension-read-fallback",
|
|
365
|
+
"error": str(exc),
|
|
366
|
+
}
|
|
367
|
+
return payload
|
|
368
|
+
|
|
369
|
+
async def _read_page_once(
|
|
370
|
+
self,
|
|
371
|
+
*,
|
|
372
|
+
url: str,
|
|
373
|
+
output_mode: str,
|
|
374
|
+
scroll_bottom: bool,
|
|
375
|
+
) -> dict[str, Any]:
|
|
336
376
|
page = await self.new_tab(
|
|
337
377
|
url=url, wait_until="load", timeout_seconds=self.READ_NAVIGATION_TIMEOUT_SECONDS
|
|
338
378
|
)
|
|
@@ -372,6 +412,12 @@ class BrowserService:
|
|
|
372
412
|
with contextlib.suppress(Exception):
|
|
373
413
|
await self.close_tab(page_id)
|
|
374
414
|
|
|
415
|
+
def _should_retry_read_on_playwright(self, exc: Exception) -> bool:
|
|
416
|
+
if self._driver_name != "extension":
|
|
417
|
+
return False
|
|
418
|
+
message = str(exc)
|
|
419
|
+
return any(pattern in message for pattern in self._READ_EXTENSION_FALLBACK_PATTERNS)
|
|
420
|
+
|
|
375
421
|
async def close_tab(self, page_id: str) -> dict[str, Any]:
|
|
376
422
|
self._snapshot_registry.clear_page(page_id)
|
|
377
423
|
return await self._active_driver().close_tab(page_id)
|
|
@@ -48,6 +48,7 @@ from .transport import (
|
|
|
48
48
|
STARTUP_TIMEOUT_SECONDS = 15.0
|
|
49
49
|
STARTUP_PROBE_INTERVAL_SECONDS = 0.1
|
|
50
50
|
TERMINATE_GRACE_SECONDS = 3.0
|
|
51
|
+
_STREAM_LIMIT = 32 * 1024 * 1024
|
|
51
52
|
|
|
52
53
|
|
|
53
54
|
def send_command(
|
|
@@ -72,7 +73,9 @@ def send_command(
|
|
|
72
73
|
async def _send_command_async(action: str, args: dict[str, Any]) -> dict[str, Any]:
|
|
73
74
|
app_paths = get_app_paths()
|
|
74
75
|
try:
|
|
75
|
-
reader, writer = await asyncio.open_unix_connection(
|
|
76
|
+
reader, writer = await asyncio.open_unix_connection(
|
|
77
|
+
str(app_paths.socket_path), limit=_STREAM_LIMIT
|
|
78
|
+
)
|
|
76
79
|
except OSError as exc:
|
|
77
80
|
raise DaemonNotAvailableError(str(exc)) from exc
|
|
78
81
|
request_payload = {
|
|
@@ -24,6 +24,7 @@ from .transport import (
|
|
|
24
24
|
)
|
|
25
25
|
|
|
26
26
|
logger = logging.getLogger(__name__)
|
|
27
|
+
_STREAM_LIMIT = 32 * 1024 * 1024
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
class BrowserDaemonServer:
|
|
@@ -50,6 +51,7 @@ class BrowserDaemonServer:
|
|
|
50
51
|
self._server = await asyncio.start_unix_server(
|
|
51
52
|
self._handle_client,
|
|
52
53
|
path=str(app_paths.socket_path),
|
|
54
|
+
limit=_STREAM_LIMIT,
|
|
53
55
|
)
|
|
54
56
|
with contextlib.suppress(OSError):
|
|
55
57
|
os.chmod(app_paths.socket_path, 0o600)
|
|
@@ -254,6 +254,7 @@ tests/unit/test_guard_scripts.py
|
|
|
254
254
|
tests/unit/test_install_skills_command.py
|
|
255
255
|
tests/unit/test_lifecycle_commands.py
|
|
256
256
|
tests/unit/test_network.py
|
|
257
|
+
tests/unit/test_package_version.py
|
|
257
258
|
tests/unit/test_paths_command.py
|
|
258
259
|
tests/unit/test_profile_discovery.py
|
|
259
260
|
tests/unit/test_python_compat_guard.py
|
|
@@ -108,6 +108,21 @@ class _FakeDriverBase:
|
|
|
108
108
|
self.switched_to = page_id
|
|
109
109
|
return await self.get_page_summary(page_id)
|
|
110
110
|
|
|
111
|
+
async def wait(
|
|
112
|
+
self,
|
|
113
|
+
page_id: str,
|
|
114
|
+
*,
|
|
115
|
+
seconds: float | None = None,
|
|
116
|
+
text: str | None = None,
|
|
117
|
+
gone: bool = False,
|
|
118
|
+
exact: bool = False,
|
|
119
|
+
) -> dict:
|
|
120
|
+
_ = seconds
|
|
121
|
+
_ = text
|
|
122
|
+
_ = gone
|
|
123
|
+
_ = exact
|
|
124
|
+
return {"page_id": page_id, "waited": True}
|
|
125
|
+
|
|
111
126
|
|
|
112
127
|
class _FakePlaywrightDriver(_FakeDriverBase):
|
|
113
128
|
def __init__(self, chrome_environment=None, *, headless=None) -> None:
|
|
@@ -519,6 +534,39 @@ def test_browser_service_downgrades_at_safe_point_and_reports_state_reset(
|
|
|
519
534
|
asyncio.run(_scenario())
|
|
520
535
|
|
|
521
536
|
|
|
537
|
+
def test_read_page_falls_back_to_playwright_when_extension_hits_chunk_limit(
|
|
538
|
+
_patched_browser_service: _FakeExtensionHub,
|
|
539
|
+
) -> None:
|
|
540
|
+
async def _scenario() -> None:
|
|
541
|
+
_patched_browser_service.connect()
|
|
542
|
+
service = browser_service_module.BrowserService(TabRegistry())
|
|
543
|
+
await service.ensure_started()
|
|
544
|
+
assert service.active_driver_name == "extension"
|
|
545
|
+
|
|
546
|
+
async def _extension_capture_html(page_id: str) -> dict[str, str]:
|
|
547
|
+
raise RuntimeError("Separator is found, but chunk is longer than limit")
|
|
548
|
+
|
|
549
|
+
async def _playwright_capture_html(page_id: str) -> dict[str, str]:
|
|
550
|
+
return {"page_id": page_id, "html": "<html>ok</html>"}
|
|
551
|
+
|
|
552
|
+
service._extension.capture_html = _extension_capture_html # type: ignore[method-assign] # noqa: SLF001
|
|
553
|
+
service._playwright.capture_html = _playwright_capture_html # type: ignore[method-assign] # noqa: SLF001
|
|
554
|
+
|
|
555
|
+
payload = await service.read_page(url="https://example.com/long-doc", output_mode="html")
|
|
556
|
+
|
|
557
|
+
assert payload["body"] == "<html>ok</html>"
|
|
558
|
+
assert payload["driver_fallback"] == {
|
|
559
|
+
"from": "extension",
|
|
560
|
+
"to": "playwright",
|
|
561
|
+
"reason": "extension-read-fallback",
|
|
562
|
+
"error": "Separator is found, but chunk is longer than limit",
|
|
563
|
+
}
|
|
564
|
+
assert service.active_driver_name == "playwright"
|
|
565
|
+
await service.stop()
|
|
566
|
+
|
|
567
|
+
asyncio.run(_scenario())
|
|
568
|
+
|
|
569
|
+
|
|
522
570
|
def test_browser_service_downgrade_survives_previous_driver_stop_failure(
|
|
523
571
|
_patched_browser_service: _FakeExtensionHub,
|
|
524
572
|
monkeypatch: pytest.MonkeyPatch,
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from importlib.metadata import PackageNotFoundError
|
|
4
|
+
|
|
5
|
+
import browser_cli
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def test_package_version_prefers_current_distribution_name(monkeypatch) -> None:
|
|
9
|
+
calls: list[str] = []
|
|
10
|
+
|
|
11
|
+
def _fake_version(name: str) -> str:
|
|
12
|
+
calls.append(name)
|
|
13
|
+
if name == "browser-control-and-automation-cli":
|
|
14
|
+
return "1.2.3"
|
|
15
|
+
raise PackageNotFoundError(name)
|
|
16
|
+
|
|
17
|
+
monkeypatch.setattr(browser_cli, "version", _fake_version)
|
|
18
|
+
|
|
19
|
+
assert browser_cli._resolve_version() == "1.2.3"
|
|
20
|
+
assert calls == ["browser-control-and-automation-cli"]
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def test_package_version_falls_back_to_legacy_distribution_names(monkeypatch) -> None:
|
|
24
|
+
calls: list[str] = []
|
|
25
|
+
|
|
26
|
+
def _fake_version(name: str) -> str:
|
|
27
|
+
calls.append(name)
|
|
28
|
+
if name == "browserctl":
|
|
29
|
+
return "2.0.0"
|
|
30
|
+
raise PackageNotFoundError(name)
|
|
31
|
+
|
|
32
|
+
monkeypatch.setattr(browser_cli, "version", _fake_version)
|
|
33
|
+
|
|
34
|
+
assert browser_cli._resolve_version() == "2.0.0"
|
|
35
|
+
assert calls == ["browser-control-and-automation-cli", "browserctl"]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def test_package_version_uses_unknown_when_no_distribution_metadata_exists(monkeypatch) -> None:
|
|
39
|
+
def _fake_version(_name: str) -> str:
|
|
40
|
+
raise PackageNotFoundError("missing")
|
|
41
|
+
|
|
42
|
+
monkeypatch.setattr(browser_cli, "version", _fake_version)
|
|
43
|
+
|
|
44
|
+
assert browser_cli._resolve_version() == "0+unknown"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|
{browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{browser_control_and_automation_cli-0.1.1.dev3 → browser_control_and_automation_cli-0.1.3}/setup.cfg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|