refactor(api): namespaced SDK + dedicated transport layer
Testing / remote-protocol-compat (0.9.3) (push) Successful in 42s
Testing / remote-protocol-compat (0.9.5) (push) Successful in 44s
Package Extension / package-extension (push) Successful in 43s
Build & Publish Package / publish (push) Successful in 43s
Testing / test (push) Successful in 45s
Testing / remote-protocol-compat (0.9.3) (push) Successful in 42s
Testing / remote-protocol-compat (0.9.5) (push) Successful in 44s
Package Extension / package-extension (push) Successful in 43s
Build & Publish Package / publish (push) Successful in 43s
Testing / test (push) Successful in 45s
Restructure the Python API and internals around composable namespaces and a standalone transport/endpoint layer. Bump to 0.12.0. Python API: - Replace flat methods (b.tabs_list(), b.group_list()) with namespaces: b.nav, b.tabs, b.groups, b.windows, b.dom, b.extract, b.page, b.storage, b.cookies, b.session, b.perf, b.extension. - Shrink browser_cli/__init__.py to a thin composition root; move all behaviour into browser_cli/sdk/ (one module per namespace + factories, base, routing). Internals: - Add browser_cli/transport.py and remote_transport.py to isolate IPC from command logic; client.py now delegates instead of owning transport. - Add browser_cli/endpoints.py for endpoint resolution and browser_cli/errors.py for shared error types. - Extract markdown rendering into browser_cli/markdown.py (out of extract). - Add USER_AGENT to version_manager. Tooling & tests: - Add justfile with common dev tasks. - Update CLI commands and demo to the namespaced API. - Rework tests for the new layout; add test_transport.py and test_refactor_boundaries.py to lock in module boundaries. BREAKING CHANGE: flat API methods are removed in favour of namespaces (e.g. b.tabs_list() -> b.tabs.list(), b.group_list() -> b.groups.list()).
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
# browser-cli — task runner
|
||||
# Run `just` or `just --list` to see all recipes.
|
||||
|
||||
# Default browser profile for `install` / quick checks
|
||||
browser := "brave"
|
||||
|
||||
# Show available recipes
|
||||
default:
|
||||
@just --list
|
||||
|
||||
# ── Setup ──────────────────────────────────────────────────────────────
|
||||
|
||||
# Install Python deps + Node deps for the extension build
|
||||
setup:
|
||||
uv sync
|
||||
npm ci
|
||||
|
||||
# Register the native messaging host for a browser (default: {{browser}})
|
||||
install browser=browser:
|
||||
uv run browser-cli install {{browser}}
|
||||
|
||||
# ── Python ─────────────────────────────────────────────────────────────
|
||||
|
||||
# Run the full Python test suite
|
||||
test:
|
||||
uv run pytest -q
|
||||
|
||||
# Run tests verbosely
|
||||
testv:
|
||||
uv run pytest -v
|
||||
|
||||
# Run a single test file or node id, e.g. `just test-one tests/test_api.py`
|
||||
test-one target:
|
||||
uv run pytest -v {{target}}
|
||||
|
||||
# Run tests with a coverage report
|
||||
cov:
|
||||
uv run pytest --cov=browser_cli --cov-report=term-missing
|
||||
|
||||
# ── Extension (TypeScript / MV3) ───────────────────────────────────────
|
||||
|
||||
# Build the extension bundle (extension/background.js)
|
||||
build:
|
||||
npm run build:extension
|
||||
|
||||
# Run the JS (node:test) extension tests
|
||||
test-ext:
|
||||
npm run test:extension
|
||||
|
||||
# Full extension gate: tsc + build + node --check + JS tests
|
||||
check:
|
||||
npm run check:extension
|
||||
|
||||
# ── Everything ─────────────────────────────────────────────────────────
|
||||
|
||||
# Run the complete gate: extension check + Python tests
|
||||
ci: check test
|
||||
|
||||
# ── Release ────────────────────────────────────────────────────────────
|
||||
|
||||
# Show the current version
|
||||
version:
|
||||
@grep -m1 '^version' pyproject.toml | cut -d'"' -f2
|
||||
|
||||
# Bump version in pyproject.toml AND extension/manifest.json, e.g. `just bump 0.10.5`
|
||||
bump new:
|
||||
sed -i 's/^version = ".*"/version = "{{new}}"/' pyproject.toml
|
||||
sed -i 's/"version": ".*"/"version": "{{new}}"/' extension/manifest.json
|
||||
@echo "bumped to {{new}} — remember to update uv.lock (uv lock) and rebuild the extension"
|
||||
|
||||
# Verify both version files agree
|
||||
version-check:
|
||||
@py=$(grep -m1 '^version' pyproject.toml | cut -d'"' -f2); \
|
||||
ext=$(grep -m1 '"version"' extension/manifest.json | cut -d'"' -f4); \
|
||||
if [ "$py" = "$ext" ]; then echo "ok: $py"; else echo "MISMATCH pyproject=$py manifest=$ext"; exit 1; fi
|
||||
|
||||
# ── Demos ──────────────────────────────────────────────────────────────
|
||||
|
||||
# Run the Python SDK demo
|
||||
demo:
|
||||
uv run python examples/demo.py
|
||||
Reference in New Issue
Block a user