Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,3 +100,31 @@ jobs:
- name: Run integration tests
run: uv run pytest tests/integration -v --tb=short -m "not smoke"
timeout-minutes: 15

packaging-smoke:
name: Packaging Smoke
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up uv
uses: astral-sh/setup-uv@v7
with:
python-version-file: .python-version
enable-cache: true

- name: Sync dependencies
run: uv sync --locked --dev

- name: Build wheel
run: uv build --wheel --no-sources

- name: Verify wheel-packaged skills
run: uv run pytest tests/unit/test_release_artifacts.py -v

- name: Smoke install-skills from built wheel
run: |
python -m venv .pkg-smoke-venv
.pkg-smoke-venv/bin/pip install dist/*.whl
target_dir="$(mktemp -d)"
.pkg-smoke-venv/bin/browser-cli install-skills --dry-run --target "$target_dir"
8 changes: 8 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,13 @@ jobs:
- name: Build package
run: uv build --no-sources

- name: Verify wheel-packaged skills
run: |
uv run pytest tests/unit/test_release_artifacts.py -v
python -m venv .pkg-smoke-venv
.pkg-smoke-venv/bin/pip install dist/*.whl
target_dir="$(mktemp -d)"
.pkg-smoke-venv/bin/browser-cli install-skills --dry-run --target "$target_dir"

- name: Publish to PyPI
run: uv publish
8 changes: 7 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ the implementation, and where should a change land first.
`src/browser_cli/cli/main.py`
- Install and runtime diagnostics:
`src/browser_cli/commands/doctor.py`
- Packaged skill installation and `--target` handling:
`src/browser_cli/commands/install_skills.py`
- Runtime path discovery:
`src/browser_cli/commands/paths.py`
- Daemon-backed command catalog, arguments, aliases, and request builders:
Expand Down Expand Up @@ -146,6 +148,8 @@ the implementation, and where should a change land first.

- User-facing output rendering:
`src/browser_cli/outputs/render.py`, `src/browser_cli/outputs/json.py`
- Packaged Browser CLI skill assets shipped with the installed wheel:
`src/browser_cli/packaged_skills/*`
- Error taxonomy and exit codes:
`src/browser_cli/errors.py`, `src/browser_cli/error_codes.py`, `src/browser_cli/exit_codes.py`

Expand All @@ -154,7 +158,7 @@ the implementation, and where should a change land first.
- Example tasks and packaged automations:
`tasks/*`
- Browser-CLI-specific agent delivery guidance:
`skills/browser-cli-explore-delivery/SKILL.md`
`skills/browser-cli-delivery/SKILL.md`
- Tests for behavior and contracts:
`tests/unit/*`, `tests/integration/*`

Expand Down Expand Up @@ -219,6 +223,7 @@ the implementation, and where should a change land first.
- `browser_cli.drivers` owns the explicit backend contract plus `playwright_driver` and `extension_driver`. Drivers consume daemon-built locator specs, not raw refs.
- `browser_cli.extension` owns the extension transport, handshake, heartbeat, required-capability checks, and artifact assembly from WebSocket chunks.
- `browser_cli.outputs` owns final rendering for content-first and JSON-first surfaces.
- `browser_cli.packaged_skills` owns the Browser CLI skill assets that are shipped in installed distributions and consumed by `browser-cli install-skills`.
- `browser_cli.profiles` owns Chrome executable discovery, managed profile directories, profile naming, and lock detection.
- `browser_cli.refs` owns semantic ref models, snapshot generation, latest-snapshot registry state, and locator reconstruction.
- `browser_cli.tabs` owns agent-visible tab state, active-tab tracking, and busy-state conflict rules.
Expand All @@ -231,6 +236,7 @@ public interactive commands.
## Implementation Conventions

- 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()`.
- `browser-cli install-skills` installs the packaged Browser CLI skills into `~/.agents/skills` by default and `--target` overrides the destination root.
- Public daemon-backed actions should be added through `ActionSpec`, not by manually bolting ad hoc parsers into `main.py`.
- The lifecycle command `browser-cli reload` and the page action `browser-cli page-reload` are intentionally different surfaces. Do not collapse them.
- Public daemon commands return JSON payloads. Preserve `ok/data/meta` shape and machine-readable error codes.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,9 @@ docs/
superpowers/specs/
superpowers/plans/
skills/
browser-cli-explore-delivery/
browser-cli-delivery/
browser-cli-explore/
browser-cli-converge/
Comment thread
coderabbitai[bot] marked this conversation as resolved.
```

The exact file split may evolve during implementation, but the old page-runtime
Expand Down Expand Up @@ -315,7 +317,7 @@ network patch should not survive the final migration.
- `/Users/hongv/workspace/m-projects/browser-cli/docs/smoke-checklist.md`
- task examples
- Browser CLI docs that mention network observation
2. Update the explore-delivery skill references to prefer:
2. Update the delivery/explore/converge skill references to prefer:
- `network-wait` for response-dependent tasks
- `network-start/network/network-stop` for broader collection
3. Remove obsolete wording that says Browser CLI only captures network requests.
Expand Down Expand Up @@ -350,4 +352,3 @@ Before calling the work complete, verify:
- large bodies do not cause uncontrolled memory growth
- extension and Playwright backends pass the same public expectations
- no old request-only `network` semantics remain in code or docs

Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,12 @@
- Reframe the product around task and automation.
- `AGENTS.md`
- Update durable navigation guidance, code map entries, and debugging paths.
- `skills/browser-cli-explore-delivery/SKILL.md`
- Require canonical task templates and `browser-cli task validate`.
- `skills/browser-cli-explore-delivery/references/preflight-and-runtime.md`
- Update task execution/publish guidance.
- `skills/browser-cli-delivery/SKILL.md`
- Define orchestration, validation rollback, and optional automation gating.
- `skills/browser-cli-explore/SKILL.md`
- Capture task execution and exploration guidance.
- `skills/browser-cli-converge/SKILL.md`
- Capture task-code convergence and validation guidance.
- `scripts/guards/product_contracts.py`
- Freeze the new top-level `task` and `automation` surfaces.
- `scripts/guards/architecture.py`
Expand Down Expand Up @@ -1125,8 +1127,9 @@ git commit -m "refactor: remove legacy workflow surface"
**Files:**
- Modify: `README.md`
- Modify: `AGENTS.md`
- Modify: `skills/browser-cli-explore-delivery/SKILL.md`
- Modify: `skills/browser-cli-explore-delivery/references/preflight-and-runtime.md`
- Create: `skills/browser-cli-delivery/SKILL.md`
- Create: `skills/browser-cli-explore/SKILL.md`
- Create: `skills/browser-cli-converge/SKILL.md`
- Modify: `docs/smoke-checklist.md`
- Create: `docs/examples/task-and-automation.md`
- Delete: `docs/examples/task-and-workflow.md`
Expand Down Expand Up @@ -1237,7 +1240,7 @@ Expected: PASS
- [ ] **Step 7: Commit**

```bash
git add README.md AGENTS.md skills/browser-cli-explore-delivery/SKILL.md skills/browser-cli-explore-delivery/references/preflight-and-runtime.md docs/smoke-checklist.md docs/examples/task-and-automation.md scripts/guards/product_contracts.py scripts/guards/architecture.py scripts/guards/docs_sync.py
git add README.md AGENTS.md skills/browser-cli-delivery/SKILL.md skills/browser-cli-explore/SKILL.md skills/browser-cli-converge/SKILL.md docs/smoke-checklist.md docs/examples/task-and-automation.md scripts/guards/product_contracts.py scripts/guards/architecture.py scripts/guards/docs_sync.py
git rm docs/examples/task-and-workflow.md
git commit -m "docs: update task and automation guidance"
```
Expand Down
Loading
Loading