From 7f56958ad708c171da321cef3cb640de29d2295e Mon Sep 17 00:00:00 2001 From: Jack Arturo Date: Wed, 14 Oct 2026 13:09:42 -0400 Subject: [PATCH 1/4] chore: bump the package to 0.3.0 The git tag and npm package follow 0.2.9. The Chrome extension stays 1.1.0. The release workflow quotes match the formatter. --- .claude-plugin/marketplace.json | 2 +- .github/workflows/release.yml | 4 ++-- CHANGELOG.md | 3 ++- cli/Cargo.lock | 2 +- cli/Cargo.toml | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 7 files changed, 10 insertions(+), 9 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 44ef5d5..491efa7 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -25,6 +25,6 @@ ], "metadata": { "description": "Marketplace for the Browser Hand skill", - "version": "0.2.9" + "version": "0.3.0" } } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3a7dd01..fc7f4c9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,7 +3,7 @@ name: Release on: push: tags: - - 'v*' + - "v*" jobs: release-plan: @@ -130,7 +130,7 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 22 - registry-url: 'https://registry.npmjs.org' + registry-url: "https://registry.npmjs.org" # Trusted publishing requires npm >= 11.5.1; node 22 ships an older npm. - run: npm install -g npm@latest - run: cd daemon && pnpm install && pnpm run bundle && pnpm run bundle:sandbox-client diff --git a/CHANGELOG.md b/CHANGELOG.md index 4fa09b9..3dc2a16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -## [1.1.0] - 2026-10-14 +## [0.3.0] - 2026-10-14 +- Chrome extension manifest is 1.1.0. - Added `--group-title` on `open` and `goto`. Tabs for one task join a Chrome tab group with that title and a color. The same title keeps joining the group. A different title starts a new group. With no title, the group stays named Browser Hand. If a saved group cannot be reused in that tab's window, Browser Hand opens a replacement group instead of failing the command. - Added `steps`, one call for a repeated form (click, fill, type, evaluate, snapshot). The call stops at the first miss, and step snapshots leave formatted secrets out. - Added a scoped snapshot (open dialog plus main by default) and clicks by snapshot ref or by role and accessible name. Covered controls are skipped. `doctor` stays a short health check. `tabs` is the inventory. diff --git a/cli/Cargo.lock b/cli/Cargo.lock index ab07bb8..dc38852 100644 --- a/cli/Cargo.lock +++ b/cli/Cargo.lock @@ -130,7 +130,7 @@ dependencies = [ [[package]] name = "dev-browser" -version = "0.2.9" +version = "0.3.0" dependencies = [ "clap", "dialoguer", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 23f6ad5..a81fe40 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dev-browser" -version = "0.2.9" +version = "0.3.0" edition = "2021" [dependencies] diff --git a/package-lock.json b/package-lock.json index 784e3be..b16449f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "browser-hand", - "version": "0.2.9", + "version": "0.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "browser-hand", - "version": "0.2.9", + "version": "0.3.0", "hasInstallScript": true, "license": "MIT", "workspaces": [ diff --git a/package.json b/package.json index 9a65119..b4bbbd9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "browser-hand", - "version": "0.2.9", + "version": "0.3.0", "description": "Browser Hand \u2014 agents control your real logged-in Chrome via a local extension bridge. Fork of SawyerHood/dev-browser.", "type": "module", "bin": { From e8798ce996f4b9ba67f5cd17f5dd15a5a099abc9 Mon Sep 17 00:00:00 2001 From: Jack Arturo Date: Wed, 14 Oct 2026 13:13:46 -0400 Subject: [PATCH 2/4] Prettier --- .claude-plugin/marketplace.json | 4 +--- package.json | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 491efa7..1b82391 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -18,9 +18,7 @@ "playwright", "automation" ], - "skills": [ - "./skills/browser-hand" - ] + "skills": ["./skills/browser-hand"] } ], "metadata": { diff --git a/package.json b/package.json index b4bbbd9..8a1fa4c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "browser-hand", "version": "0.3.0", - "description": "Browser Hand \u2014 agents control your real logged-in Chrome via a local extension bridge. Fork of SawyerHood/dev-browser.", + "description": "Browser Hand — agents control your real logged-in Chrome via a local extension bridge. Fork of SawyerHood/dev-browser.", "type": "module", "bin": { "browser-hand": "./cli-js/bin/browser-hand.js", From e6c467bafd1d43609d2e31e32ecb5d7e8df430f5 Mon Sep 17 00:00:00 2001 From: Jack Arturo Date: Wed, 14 Oct 2026 13:18:07 -0400 Subject: [PATCH 3/4] fix(release): publish a public manifest from the private repo root npm refuses a private workspace package. The release job now writes dist/package.json without private or workspaces, and the repo root stays private. --- .github/workflows/release.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fc7f4c9..52169e0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -141,7 +141,13 @@ jobs: cp scripts/sync-version.js dist/scripts/ 2>/dev/null || true cp daemon/dist/daemon.bundle.mjs dist/daemon/dist/ cp daemon/dist/sandbox-client.js dist/daemon/dist/ - cp package.json dist/ + node --input-type=module -e ' + import { readFileSync, writeFileSync } from "node:fs"; + const pkg = JSON.parse(readFileSync("package.json", "utf8")); + delete pkg.private; + delete pkg.workspaces; + writeFileSync("dist/package.json", JSON.stringify(pkg, null, 2) + "\n"); + ' cp README.md dist/ cp LICENSE dist/ 2>/dev/null || true # No NODE_AUTH_TOKEN: auth comes from the OIDC trusted publisher config. From 1371270fd07a335cbd2908bee1842d3e8949d171 Mon Sep 17 00:00:00 2001 From: Jack Arturo Date: Wed, 14 Oct 2026 13:28:13 -0400 Subject: [PATCH 4/4] fix(release): cut the GitHub release without publishing to npm A v* tag still opens the GitHub release. npm publish and the binary build wait until the PUBLISH_NPM repository variable is true. --- .github/workflows/release.yml | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 52169e0..a03ff2d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,17 +15,29 @@ jobs: - uses: actions/checkout@v4 - id: check shell: bash + env: + PUBLISH_NPM: ${{ vars.PUBLISH_NPM }} run: | tag="${GITHUB_REF_NAME#v}" pkg="$(node -p "require('./package.json').version")" - if [ "$tag" = "$pkg" ]; then + if [ "$tag" = "$pkg" ] && [ "$PUBLISH_NPM" = "true" ]; then echo "publish_npm=true" >> "$GITHUB_OUTPUT" - echo "Tag v$tag matches package.json. Publishing the headless package." + echo "Tag v$tag matches package.json and PUBLISH_NPM=true. Publishing the headless package." else echo "publish_npm=false" >> "$GITHUB_OUTPUT" - echo "Tag v$tag does not match package.json $pkg. Skipping the headless npm publish and binary build." + echo "Skipping npm publish and the binary build. Set the PUBLISH_NPM repository variable to true when the package is ready." fi + github-release: + name: GitHub Release + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: softprops/action-gh-release@v2 + with: + generate_release_notes: true + build-daemon: name: Build Daemon Bundles needs: release-plan