browser-pilot-cli 0.3.0-rc.5 → 0.3.0

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.
package/README.md CHANGED
@@ -182,7 +182,7 @@ A project can pin Browser Pilot locally and run the same CLI without a global
182
182
  installation:
183
183
 
184
184
  ```bash
185
- npm install --save-exact browser-pilot-cli@0.3.0-rc.5
185
+ npm install --save-exact browser-pilot-cli@0.3.0
186
186
  npx --no-install browser-pilot tabs
187
187
  ```
188
188
 
package/dist/cli.js CHANGED
@@ -6,7 +6,7 @@ import { writeFileSync as writeFileSync2, readFileSync as readFileSync4, existsS
6
6
  import { resolve as resolvePath } from "path";
7
7
 
8
8
  // src/version.ts
9
- var BROWSER_PILOT_VERSION = "0.3.0-rc.5";
9
+ var BROWSER_PILOT_VERSION = "0.3.0";
10
10
 
11
11
  // src/protocol/errors.ts
12
12
  var ERROR_CODES = [
package/dist/daemon.js CHANGED
@@ -7769,9 +7769,9 @@ var MemoryControlledTargetRegistry = class {
7769
7769
  (record) => record.state === "active" && record.principalId === context.principalId && record.workspaceId === context.workspaceId
7770
7770
  ).map(cloneRecord2);
7771
7771
  }
7772
- isManagedCdpTarget(browserInstanceId, cdpTargetId) {
7772
+ isManagedCdpTarget(browserInstanceId, cdpTargetId, browserConnectionGeneration) {
7773
7773
  for (const record of this.records.values()) {
7774
- if (record.state === "active" && record.browserInstanceId === browserInstanceId && record.cdpTargetId === cdpTargetId && record.origin !== "user_tab") return true;
7774
+ if (record.browserInstanceId === browserInstanceId && record.cdpTargetId === cdpTargetId && record.browserConnectionGeneration === browserConnectionGeneration && record.origin !== "user_tab") return true;
7775
7775
  }
7776
7776
  return false;
7777
7777
  }
@@ -10440,7 +10440,8 @@ var BrowserToolService = class {
10440
10440
  profileContexts: this.profileContexts,
10441
10441
  isExcludedTarget: (target) => this.registry.isManagedCdpTarget(
10442
10442
  binding.instance.id,
10443
- target.cdpTargetId
10443
+ target.cdpTargetId,
10444
+ binding.instance.connectionGeneration
10444
10445
  )
10445
10446
  }
10446
10447
  );
@@ -14014,7 +14015,7 @@ var ManagedTargetJanitorClient = class {
14014
14015
  };
14015
14016
 
14016
14017
  // src/version.ts
14017
- var BROWSER_PILOT_VERSION = "0.3.0-rc.5";
14018
+ var BROWSER_PILOT_VERSION = "0.3.0";
14018
14019
 
14019
14020
  // src/daemon.ts
14020
14021
  var CLI_EXECUTABLE_PATH = publicExecutablePath(import.meta.url);
@@ -1,7 +1,7 @@
1
1
  # Browser Pilot v0.3.0 Stabilization Plan
2
2
 
3
3
  Status: **In progress**
4
- Candidate baseline: `v0.3.0-rc.4`; correction target: `v0.3.0-rc.5`, protocol `1.2`
4
+ Candidate baseline: `v0.3.0-rc.6`; release target: `v0.3.0`, protocol `1.2`
5
5
 
6
6
  ## Goal
7
7
 
@@ -29,7 +29,7 @@ products depend on. No Agent-specific behavior enters Browser Pilot.
29
29
  downloads, controlled Page-event ownership, browser-level completion paths,
30
30
  and copy-only Artifacts. Verify unowned downloads are ignored and user source
31
31
  files survive Artifact and Workspace cleanup.
32
- - [x] Pass TypeScript, 276 Node, 109 Playwright, 13 stdio conformance, three
32
+ - [x] Pass TypeScript, 277 Node, 109 Playwright, 13 stdio conformance, three
33
33
  distribution-mode, and 13 host integration checks on the candidate source.
34
34
  - [x] Publish `v0.3.0-rc.3` through trusted publishing and pass all 13 host
35
35
  integration checks against the installed standalone release executable.
@@ -37,9 +37,17 @@ products depend on. No Agent-specific behavior enters Browser Pilot.
37
37
  choices and a single authorization attempt.
38
38
  - [x] Publish `v0.3.0-rc.4` with Broker-backed CLI browser status and verify
39
39
  that passive discovery reports the live authorized connection.
40
- - [ ] Publish `v0.3.0-rc.5` with the real-site soak corrections and rerun the
41
- same public information, form, capture, and managed-cleanup tasks.
42
- - [ ] Soak several real Agent tasks through the installed candidate.
40
+ - [x] Publish `v0.3.0-rc.5` and verify text-targeted scrolling plus annotated
41
+ capture on GitHub. Managed cleanup preserved all user tabs but exposed a
42
+ transient closing-target inventory race.
43
+ - [x] Publish `v0.3.0-rc.6` with generation-scoped managed-target tombstones.
44
+ The installed standalone returned `closed: 1, remaining: 6` immediately after
45
+ managed cleanup and left all six user tabs available, with no managed, busy,
46
+ controlled, or automatically active target.
47
+ - [x] Soak real Agent tasks through the installed candidates across multiple
48
+ Chrome Profiles: public GitHub reading, search, precise scrolling, screenshot
49
+ annotation, PDF export, a disposable form with verified input and submission,
50
+ and managed-only cleanup. User tabs and exported files were preserved.
43
51
  - [ ] Tag `v0.3.0`, publish npm `latest`, and verify upgrade/rollback metadata.
44
52
 
45
53
  ## Stable decision
@@ -51,3 +59,9 @@ an uncontrolled user tab. `v0.3.0-rc.2` must not be promoted. RC.3 preserves
51
59
  Chrome's default download destination and creates an Artifact only after a
52
60
  session-scoped Page event proves ownership and a browser-level completion event
53
61
  provides the final path.
62
+
63
+ RC.4 through RC.6 then closed the remaining real-browser gaps in passive
64
+ connection status, text-targeted scroll verification, restrictive-CSP screenshot
65
+ annotation, and asynchronous managed-target closure. The published RC.6
66
+ standalone now satisfies every pre-stable source, distribution, Host, and live
67
+ Chrome gate above. Stable publication remains a separate explicit release step.
@@ -0,0 +1,24 @@
1
+ # Browser Pilot 0.3.0-rc.6
2
+
3
+ This release candidate fixes the remaining managed-tab cleanup race found by
4
+ running RC.5 against a live multi-Profile Chrome browser.
5
+
6
+ - A managed target that Chrome has accepted for closure remains classified as
7
+ managed for the rest of that browser connection generation. If Chrome still
8
+ reports the physical target briefly before its asynchronous destroyed event,
9
+ Browser Pilot no longer reintroduces it as a transient available user tab.
10
+ - The tombstone is generation-scoped, so browser reconnection cannot exclude a
11
+ target from a later connection even if Chrome were to reuse an identifier.
12
+ - `bp close` and `bp close --all` therefore preserve accurate user-tab
13
+ inventory without implicitly acquiring a closing target.
14
+
15
+ The RC.5 soak otherwise passed its two real-site corrections: text-targeted
16
+ scrolling revealed the requested GitHub text with verified movement, and a
17
+ three-ref annotated GitHub screenshot succeeded under the site's restrictive
18
+ content security policy. All six eligible user tabs remained available and no
19
+ user tab was controlled after managed cleanup.
20
+
21
+ RC.6 keeps protocol 1.2 and the Agent-neutral CLI and stdio contracts unchanged.
22
+ Candidate gates passed with 277 Node tests, 109 isolated Playwright tests,
23
+ TypeScript type checking, all three npm distribution modes, 13 stdio
24
+ conformance checks, and 13 isolated Host integration checks.
@@ -0,0 +1,68 @@
1
+ # Browser Pilot 0.3.0
2
+
3
+ Browser Pilot 0.3.0 promotes the tested protocol 1.2 release candidate without
4
+ runtime changes. It provides Agent-neutral control of the user's real Chromium
5
+ browser through a CLI and a versioned stdio bridge, without a browser
6
+ extension.
7
+
8
+ ## Universal Agent integration
9
+
10
+ - Agents with shell access can install or bundle the official executable and
11
+ use the one-shot `bp` commands.
12
+ - Long-lived Agent products can launch `browser-pilot bridge --stdio` and use
13
+ the same canonical browser tools, lifecycle, events, and Artifacts.
14
+ - One per-user Broker coordinates concurrent CLI and embedded clients through
15
+ isolated Connections, Workspaces, Leases, opaque target IDs, serialized
16
+ per-target commands, idempotency keys, deadlines, and event cursors.
17
+ - Browser Pilot contains no Tenon-, OpenClaw-, Codex-, or model-specific
18
+ behavior. Hosts adapt the public protocol rather than importing private
19
+ source modules.
20
+
21
+ ## Real browser control
22
+
23
+ - Eligible tabs opened by the user are visible and explicitly controllable;
24
+ independently created managed tabs remain separately owned and
25
+ managed-only cleanup never closes or acquires a user tab.
26
+ - One authorized Chrome endpoint can expose several live Profiles. Agents can
27
+ inspect Profile context and route new managed work explicitly without
28
+ changing access to existing tabs.
29
+ - Observations fuse accessibility semantics with DOM state and geometry into
30
+ bounded, page-scoped numbered refs. Navigation, frame, document, target, and
31
+ Lease changes invalidate stale refs deterministically.
32
+ - Dedicated tools cover navigation, reading, targeted search, DOM queries,
33
+ click, verified native input, keyboard operations, scrolling, dropdowns,
34
+ frames, dialogs, uploads, cookies, HTTP authentication, and bounded network
35
+ observation or interception.
36
+ - Screenshots and PDFs are returned as protected Artifacts through stdio and
37
+ can be exported to explicit local paths through the CLI. Annotated
38
+ screenshots render in an isolated world and work on restrictive-CSP sites.
39
+ - Completed controlled downloads are copied into protected Artifacts while the
40
+ user's original Chrome download remains in place.
41
+
42
+ ## Reliability and isolation
43
+
44
+ - Passive browser discovery never requests authorization. Concurrent explicit
45
+ connects share one in-flight connection attempt instead of multiplying
46
+ Chrome prompts.
47
+ - User-tab control is exclusive between unrelated Agent Leases and transfers
48
+ only through explicit release or cleanup.
49
+ - Browser restart advances the connection generation and invalidates old
50
+ Profile, target, session, frame, and Observation identities.
51
+ - Managed target identity remains generation-scoped while Chrome finishes an
52
+ asynchronous close, preventing a closing managed tab from briefly appearing
53
+ as a user tab.
54
+ - Action results include browser evidence and typed mismatch or unknown-outcome
55
+ states so an Agent can inspect before retrying a possibly mutating command.
56
+
57
+ ## Validation
58
+
59
+ The published RC.6 standalone passed real multi-Profile Chrome tasks covering
60
+ public GitHub reading, search, precise text scrolling, restrictive-CSP
61
+ annotation, screenshot and PDF export, verified disposable form input and
62
+ submission, and managed-only cleanup. All six pre-existing user tabs remained
63
+ available and none was acquired during cleanup.
64
+
65
+ The stable source passed TypeScript checking, 277 Node tests, 109 isolated
66
+ Playwright tests, all three npm distribution modes, 13 stdio conformance checks,
67
+ and 13 isolated multi-Host integration checks. The stable version keeps the
68
+ same protocol 1.2 and runtime behavior as `v0.3.0-rc.6`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browser-pilot-cli",
3
- "version": "0.3.0-rc.5",
3
+ "version": "0.3.0",
4
4
  "description": "CLI tool to control your browser via Chrome DevTools Protocol",
5
5
  "repository": "https://github.com/relixiaobo/browser-pilot",
6
6
  "type": "module",
@@ -49,6 +49,8 @@
49
49
  "docs/releases/v0.3.0-rc.3.md",
50
50
  "docs/releases/v0.3.0-rc.4.md",
51
51
  "docs/releases/v0.3.0-rc.5.md",
52
+ "docs/releases/v0.3.0-rc.6.md",
53
+ "docs/releases/v0.3.0.md",
52
54
  "README.md",
53
55
  "LICENSE"
54
56
  ],