Add persistent bounded zara-browser service #504

Open
nsaspy wants to merge 6 commits from rage/9-browser into main
Owner

Implements #9.

TDD sequence is explicit: 0cb0c6eacb9cfb08ec25ebe4fdc4c968b693b6e6 defines the RED persistent-browser contract before implementation.

Adds a backend-neutral, process-persistent browser session with structured tab/navigation/extraction/action operations. The public surface never exposes arbitrary JavaScript, eval, shell execution, cookies, or credential dumps. HTTP(S) URLs reject userinfo; selectors, typed values, extracted text, screenshots, tab counts, and download destinations are bounded. Typing explicitly reports submitted=false; the plugin never silently submits a form. Browser actions return backend-observed evidence.

No production browser driver is fabricated: without an attached backend the service reports browser-backend-not-configured. Deterministic domain tests remain stdlib-only; the runtime adapter is imported only by Zara discovery/compatibility so unit tests do not acquire hidden LangChain/Zara dependencies. Zara Core remains authoritative for normal tool authorization/approval policy.

The generated registry compatibility gate and Nix package/runtime-layout checks cover the new entry automatically.

Candidate head: bb3d28f7212cffb2e42a6ff181159533344ae30c. Merge only after exact-head CI, compatibility, registry, Nix checks, package build, and review/thread state are green.

Implements #9. TDD sequence is explicit: `0cb0c6eacb9cfb08ec25ebe4fdc4c968b693b6e6` defines the RED persistent-browser contract before implementation. Adds a backend-neutral, process-persistent browser session with structured tab/navigation/extraction/action operations. The public surface never exposes arbitrary JavaScript, eval, shell execution, cookies, or credential dumps. HTTP(S) URLs reject userinfo; selectors, typed values, extracted text, screenshots, tab counts, and download destinations are bounded. Typing explicitly reports `submitted=false`; the plugin never silently submits a form. Browser actions return backend-observed evidence. No production browser driver is fabricated: without an attached backend the service reports `browser-backend-not-configured`. Deterministic domain tests remain stdlib-only; the runtime adapter is imported only by Zara discovery/compatibility so unit tests do not acquire hidden LangChain/Zara dependencies. Zara Core remains authoritative for normal tool authorization/approval policy. The generated registry compatibility gate and Nix package/runtime-layout checks cover the new entry automatically. Candidate head: `bb3d28f7212cffb2e42a6ff181159533344ae30c`. Merge only after exact-head CI, compatibility, registry, Nix checks, package build, and review/thread state are green.
Some checks failed
CI / test (pull_request) Failing after 19s
This pull request has changes conflicting with the target branch.
  • plugins.json
  • plugins/zara-browser/README.md
  • plugins/zara-browser/lib/zara_browser/browser.py
  • plugins/zara-browser/lib/zara_browser/plugin.py
  • plugins/zara-browser/test/test_browser.py
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin rage/9-browser:rage/9-browser
git switch rage/9-browser

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff rage/9-browser
git switch rage/9-browser
git rebase main
git switch main
git merge --ff-only rage/9-browser
git switch rage/9-browser
git rebase main
git switch main
git merge --no-ff rage/9-browser
git switch main
git merge --squash rage/9-browser
git switch main
git merge --ff-only rage/9-browser
git switch main
git merge rage/9-browser
git push origin main
Sign in to join this conversation.
No description provided.