@everydaydevopsio/pilot 0.6.2 → 0.7.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/AGENTS.md +11 -0
- package/CHANGELOG.md +45 -0
- package/README.md +105 -11
- package/dist/browser/browser-manager.d.ts +7 -1
- package/dist/browser/browser-manager.d.ts.map +1 -1
- package/dist/browser/browser-manager.js +196 -40
- package/dist/browser/browser-manager.js.map +1 -1
- package/dist/browser/chrome-launcher.d.ts +13 -2
- package/dist/browser/chrome-launcher.d.ts.map +1 -1
- package/dist/browser/chrome-launcher.js +33 -4
- package/dist/browser/chrome-launcher.js.map +1 -1
- package/dist/browser/driver/capabilities.d.ts +22 -0
- package/dist/browser/driver/capabilities.d.ts.map +1 -0
- package/dist/browser/driver/capabilities.js +70 -0
- package/dist/browser/driver/capabilities.js.map +1 -0
- package/dist/browser/driver/cdp-driver.d.ts +77 -0
- package/dist/browser/driver/cdp-driver.d.ts.map +1 -0
- package/dist/browser/driver/cdp-driver.js +190 -0
- package/dist/browser/driver/cdp-driver.js.map +1 -0
- package/dist/browser/driver/factory.d.ts +10 -0
- package/dist/browser/driver/factory.d.ts.map +1 -0
- package/dist/browser/driver/factory.js +23 -0
- package/dist/browser/driver/factory.js.map +1 -0
- package/dist/browser/driver/index.d.ts +6 -0
- package/dist/browser/driver/index.d.ts.map +1 -0
- package/dist/browser/driver/index.js +5 -0
- package/dist/browser/driver/index.js.map +1 -0
- package/dist/browser/driver/types.d.ts +106 -0
- package/dist/browser/driver/types.d.ts.map +1 -0
- package/dist/browser/driver/types.js +25 -0
- package/dist/browser/driver/types.js.map +1 -0
- package/dist/browser/sessions.d.ts +49 -0
- package/dist/browser/sessions.d.ts.map +1 -0
- package/dist/browser/sessions.js +249 -0
- package/dist/browser/sessions.js.map +1 -0
- package/dist/browser/types.d.ts +13 -0
- package/dist/browser/types.d.ts.map +1 -1
- package/dist/cli/skill-template.d.ts +1 -1
- package/dist/cli/skill-template.d.ts.map +1 -1
- package/dist/cli/skill-template.js +1 -1
- package/dist/cli/skill-template.js.map +1 -1
- package/dist/commands/connect.d.ts +2 -2
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +2 -2
- package/dist/commands/connect.js.map +1 -1
- package/dist/mcp/server.d.ts +9 -15
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +32 -74
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/browser.d.ts +2 -3
- package/dist/mcp/tools/browser.d.ts.map +1 -1
- package/dist/mcp/tools/browser.js +85 -70
- package/dist/mcp/tools/browser.js.map +1 -1
- package/dist/mcp/tools/connect.d.ts +2 -3
- package/dist/mcp/tools/connect.d.ts.map +1 -1
- package/dist/mcp/tools/connect.js +9 -9
- package/dist/mcp/tools/connect.js.map +1 -1
- package/dist/mcp/tools/driver-context.d.ts +14 -0
- package/dist/mcp/tools/driver-context.d.ts.map +1 -0
- package/dist/mcp/tools/driver-context.js +43 -0
- package/dist/mcp/tools/driver-context.js.map +1 -0
- package/dist/mcp/tools/files.d.ts.map +1 -1
- package/dist/mcp/tools/files.js +5 -15
- package/dist/mcp/tools/files.js.map +1 -1
- package/dist/mcp/tools/interaction.d.ts.map +1 -1
- package/dist/mcp/tools/interaction.js +7 -26
- package/dist/mcp/tools/interaction.js.map +1 -1
- package/dist/mcp/tools/names.d.ts +1 -1
- package/dist/mcp/tools/names.d.ts.map +1 -1
- package/dist/mcp/tools/names.js +2 -0
- package/dist/mcp/tools/names.js.map +1 -1
- package/dist/mcp/tools/network.d.ts.map +1 -1
- package/dist/mcp/tools/network.js +3 -11
- package/dist/mcp/tools/network.js.map +1 -1
- package/dist/mcp/tools/performance.d.ts.map +1 -1
- package/dist/mcp/tools/performance.js +2 -12
- package/dist/mcp/tools/performance.js.map +1 -1
- package/dist/mcp/tools/snapshot.d.ts.map +1 -1
- package/dist/mcp/tools/snapshot.js +3 -14
- package/dist/mcp/tools/snapshot.js.map +1 -1
- package/dist/mcp/tools/styles.d.ts.map +1 -1
- package/dist/mcp/tools/styles.js +2 -11
- package/dist/mcp/tools/styles.js.map +1 -1
- package/package.json +1 -1
- package/skills/pilot/SKILL.md +9 -0
- package/src/browser/browser-manager.ts +248 -41
- package/src/browser/chrome-launcher.ts +40 -4
- package/src/browser/driver/capabilities.ts +88 -0
- package/src/browser/driver/cdp-driver.ts +260 -0
- package/src/browser/driver/factory.ts +33 -0
- package/src/browser/driver/index.ts +22 -0
- package/src/browser/driver/types.ts +156 -0
- package/src/browser/sessions.ts +299 -0
- package/src/browser/types.ts +14 -0
- package/src/cli/skill-template.ts +1 -1
- package/src/commands/connect.ts +3 -3
- package/src/mcp/server.ts +48 -91
- package/src/mcp/tools/browser.ts +105 -87
- package/src/mcp/tools/connect.ts +10 -11
- package/src/mcp/tools/driver-context.ts +56 -0
- package/src/mcp/tools/files.ts +5 -16
- package/src/mcp/tools/interaction.ts +7 -27
- package/src/mcp/tools/names.ts +2 -0
- package/src/mcp/tools/network.ts +2 -12
- package/src/mcp/tools/performance.ts +2 -13
- package/src/mcp/tools/snapshot.ts +3 -15
- package/src/mcp/tools/styles.ts +2 -12
package/AGENTS.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Repository agent instructions
|
|
2
2
|
|
|
3
|
+
## Local setup
|
|
4
|
+
|
|
5
|
+
- Run `make setup` before building, testing, or committing in a fresh clone or a new local shell environment. It installs the pinned Node and pnpm versions, project dependencies, and the `pre-commit` and `pre-push` Git hooks.
|
|
6
|
+
- Re-run `make setup` if `.nvmrc`, the `packageManager` field in `package.json`, or `.pre-commit-config.yaml` changes, or if `.git/hooks/pre-commit` or `.git/hooks/pre-push` is missing.
|
|
7
|
+
- Do not bypass the hooks with `--no-verify`; fix the reported lint, format, build, or test failure instead.
|
|
8
|
+
|
|
3
9
|
## Local Pilot MCP configuration
|
|
4
10
|
|
|
5
11
|
- Keep `.codex/config.toml` and `.mcp.json` configured to run the compiled local Pilot server with `node dist/mcp/index.js`. Do not replace the local command with the published npm package in this repository.
|
|
@@ -7,3 +13,8 @@
|
|
|
7
13
|
- When adding, renaming, or removing a Pilot MCP tool, update the Codex tool allowlist and verify the Claude `.mcp.json` local-server configuration in the same change.
|
|
8
14
|
- Build Pilot with `pnpm run build` before testing either MCP configuration so `dist/mcp/index.js` reflects the current source.
|
|
9
15
|
- Preserve environment entries needed by the local development session, such as the Linux `DISPLAY` value. Do not assume one display number works on every machine or remote session.
|
|
16
|
+
|
|
17
|
+
## Releases
|
|
18
|
+
|
|
19
|
+
- Always release by running the `publish.yml` workflow with a `release_type` of `patch`, `minor`, or `major`, for example `gh workflow run publish.yml -f release_type=patch`. The workflow computes the version, updates `package.json` and `CHANGELOG.md`, creates and pushes the tag, publishes to npm, and creates the GitHub release.
|
|
20
|
+
- Do not create or push release tags directly, and do not bump the version in `package.json` or edit the release entries in `CHANGELOG.md` by hand.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,14 +1,59 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.7.0] - 2026-11-04
|
|
4
|
+
|
|
5
|
+
### Highlights
|
|
6
|
+
|
|
7
|
+
- Browser MCP tools now run through a shared `BrowserDriver`, with capability checks to gate tool access based on driver support. (#63)
|
|
8
|
+
|
|
9
|
+
### Fixes
|
|
10
|
+
|
|
11
|
+
- No standalone bug fixes are included in this release.
|
|
12
|
+
|
|
13
|
+
### Changes
|
|
14
|
+
|
|
15
|
+
- Updated agent guidance to require releases through the `publish.yml` workflow. (#57)
|
|
16
|
+
|
|
17
|
+
**Full changelog:** [0.6.3...0.7.0](../../compare/0.6.3...0.7.0)
|
|
18
|
+
|
|
19
|
+
## [0.6.3] - 2026-11-03
|
|
20
|
+
|
|
21
|
+
This release adds browser session management tools and improves Chrome startup, recovery, and shutdown reliability.
|
|
22
|
+
|
|
23
|
+
### Highlights
|
|
24
|
+
|
|
25
|
+
- **New MCP tools:** `browser_status` and `browser_stop_all` let you inspect browser session status and stop all browser sessions. Both tools are included in the tool allowlist. (#56)
|
|
26
|
+
- **More resilient startup:** Chrome startup now fails promptly if the process exits, while a longer default timeout gives slower launches more time to complete. (#53)
|
|
27
|
+
|
|
28
|
+
### Fixes
|
|
29
|
+
|
|
30
|
+
- **Safer session shutdown:** Verify the Chrome executable and recheck process identity before each signal. A browser is reported as stopped only after its exit is confirmed, and lock cleanup failures are surfaced. (#56)
|
|
31
|
+
- **Better startup recovery:** Clean up failed launches, clear launch state when Chrome cannot be spawned, and provide clearer explanations of profile conflicts. (#53, #55)
|
|
32
|
+
|
|
33
|
+
### Changes
|
|
34
|
+
|
|
35
|
+
- Strengthened tests for launch-timeout cleanup on slow machines and removal of dangling `SingletonLock` symlinks. (#55, #56)
|
|
36
|
+
- Updated `make setup` to install pre-commit hooks and corrected changelog formatting to pass CI checks. (#51, #52)
|
|
37
|
+
- Updated runtime dependencies:
|
|
38
|
+
- `@modelcontextprotocol/sdk`: 1.30.1 → 1.32.2
|
|
39
|
+
- `pino`: 10.3.1 → 10.4.0
|
|
40
|
+
- `zod`: 4.6.5 → 4.6.7
|
|
41
|
+
- Refreshed development tooling, including `ts-jest`, `globals`, and `pino-pretty`.
|
|
42
|
+
|
|
43
|
+
**Full changelog:** [0.6.2…0.6.3](../../compare/0.6.2...0.6.3)
|
|
44
|
+
|
|
3
45
|
## [0.6.2] - 2026-10-01
|
|
4
46
|
|
|
5
47
|
### Highlights
|
|
48
|
+
|
|
6
49
|
- Added release-note generation with **Castoff**. (#38; addresses #37)
|
|
7
50
|
|
|
8
51
|
### Fixes
|
|
52
|
+
|
|
9
53
|
- No standalone bug fixes were recorded in this release.
|
|
10
54
|
|
|
11
55
|
### Changes
|
|
56
|
+
|
|
12
57
|
- **Runtime dependencies:** Updated `@modelcontextprotocol/sdk` from 1.30.0 to 1.30.1 and `zod` from 4.4.3 to 4.6.5. (#36, #21, #31)
|
|
13
58
|
- **Testing:** Updated Jest from 30.4.2 to 30.5.1, alongside additional testing dependency updates. (#19, #27, #35)
|
|
14
59
|
- **Development tooling:** Updated `tsx` from 4.23.12 to 4.23.15 and `globals` from 17.11.0 to 17.12.0, alongside a grouped update to three development dependencies. (#22, #33, #28, #34)
|
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ Use pilot to open a URL, interact with it using semantic element refs, inspect n
|
|
|
16
16
|
- **Node.js**: Use the version in `.nvmrc`. Supported: Node 22 (LTS) or 24 (Active LTS).
|
|
17
17
|
- [nvm](https://github.com/nvm-sh/nvm) (Node Version Manager)
|
|
18
18
|
- [pnpm](https://pnpm.io) package manager (managed via Corepack)
|
|
19
|
-
- [pre-commit](https://pre-commit.com) for Git hooks (
|
|
19
|
+
- [pre-commit](https://pre-commit.com) for Git hooks (installed by `make setup`)
|
|
20
20
|
|
|
21
21
|
### Install nvm
|
|
22
22
|
|
|
@@ -28,6 +28,16 @@ After installation, restart your shell (or `source` your shell profile) so the `
|
|
|
28
28
|
|
|
29
29
|
### Install dependencies
|
|
30
30
|
|
|
31
|
+
The fastest path is `make setup`, which installs nvm and pre-commit with
|
|
32
|
+
Homebrew, activates the pinned Node and pnpm versions, installs dependencies,
|
|
33
|
+
builds, and installs the `pre-commit` and `pre-push` Git hooks:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
make setup
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
To do the same steps manually:
|
|
40
|
+
|
|
31
41
|
```bash
|
|
32
42
|
nvm install # installs the version from .nvmrc (Node 24)
|
|
33
43
|
nvm use
|
|
@@ -38,9 +48,8 @@ corepack prepare --activate
|
|
|
38
48
|
|
|
39
49
|
pnpm install
|
|
40
50
|
|
|
41
|
-
#
|
|
42
|
-
pre-commit install
|
|
43
|
-
pre-commit install --hook-type pre-push
|
|
51
|
+
# Install Git hooks
|
|
52
|
+
pre-commit install --hook-type pre-commit --hook-type pre-push
|
|
44
53
|
```
|
|
45
54
|
|
|
46
55
|
Corepack ships with Node.js and uses the `packageManager` field in `package.json` to pin the pnpm version, so every contributor and CI run uses the same one.
|
|
@@ -105,6 +114,71 @@ directory is read-only, point profiles at a writable location, for example:
|
|
|
105
114
|
export XDG_DATA_HOME=/tmp/pilot-data
|
|
106
115
|
```
|
|
107
116
|
|
|
117
|
+
### When `browser_start` fails
|
|
118
|
+
|
|
119
|
+
`browser_start` waits up to `startupTimeoutMs` (default 90000) for Chrome
|
|
120
|
+
DevTools to answer. A healthy start usually takes a few seconds. If Chrome exits
|
|
121
|
+
or cannot be spawned, the call fails right away with Chrome's exit status and
|
|
122
|
+
stderr, without waiting for the timeout.
|
|
123
|
+
|
|
124
|
+
Every startup error ends with three lines:
|
|
125
|
+
|
|
126
|
+
- `Launch:` shows the Chrome executable, the profile and its directory,
|
|
127
|
+
headless or visible mode, the DevTools port, and (for visible mode on Linux)
|
|
128
|
+
the display.
|
|
129
|
+
- `Cleanup:` reports whether Pilot stopped the Chrome it launched. After a
|
|
130
|
+
failed start, Pilot stops its own Chrome and releases the profile lock, so a
|
|
131
|
+
retry with the same profile does not report that the profile is in use. If
|
|
132
|
+
Chrome did not exit, the error gives its pid so you can stop it.
|
|
133
|
+
- `Next:` suggests the most likely fix.
|
|
134
|
+
|
|
135
|
+
Recovery steps for a new desktop or server:
|
|
136
|
+
|
|
137
|
+
1. Run `pilot check` (Linux) to confirm Chrome, the display, the profile
|
|
138
|
+
directory, and loopback binding.
|
|
139
|
+
2. If startup **timed out**, Chrome is probably just slow, for example on a
|
|
140
|
+
first run with a new profile or with software rendering under Xvfb/VNC.
|
|
141
|
+
Retry with a larger `startupTimeoutMs`, such as `180000`.
|
|
142
|
+
3. If Chrome **exited** in visible mode, the display is usually missing or
|
|
143
|
+
unreachable (see above). Retry with `headless: true` to confirm.
|
|
144
|
+
4. If the profile is **already in use**, the error names the Chrome pid that
|
|
145
|
+
holds the profile lock and the host it runs on. Pilot does not track that
|
|
146
|
+
browser, so `browser_stop` reports that no browser is running and will not
|
|
147
|
+
stop it. Call `browser_status` to see every Pilot profile and which process
|
|
148
|
+
holds it. To stop it, close that Chrome, call `browser_stop_all`, or call
|
|
149
|
+
`browser_start` with a different `profileName`. Pilot removes a lock automatically only when the
|
|
150
|
+
owning process on this host is gone. It never deletes a lock held by a live
|
|
151
|
+
browser. For a lock created on another host, delete
|
|
152
|
+
`<profile dir>/SingletonLock` only after confirming that no browser on that
|
|
153
|
+
host still uses the profile.
|
|
154
|
+
|
|
155
|
+
### Browsers from other Pilot sessions
|
|
156
|
+
|
|
157
|
+
Each Pilot MCP session tracks only the browser it started. Two tools work
|
|
158
|
+
across sessions:
|
|
159
|
+
|
|
160
|
+
- `browser_status` is read-only. It reports the browser this session tracks,
|
|
161
|
+
the Pilot data directory (`$XDG_DATA_HOME/pilot`, or `~/.local/share/pilot`),
|
|
162
|
+
and each profile's lock state:
|
|
163
|
+
- `unlocked`: the profile is free.
|
|
164
|
+
- `locked`: a live process on this host holds the lock. The `pilotChrome`
|
|
165
|
+
field shows whether that process is Chrome using this profile.
|
|
166
|
+
- `stale`: the process that held the lock is gone.
|
|
167
|
+
- `locked_other_host`: the lock was created on another host.
|
|
168
|
+
- `locked_unknown`: Pilot cannot read the lock's owner.
|
|
169
|
+
- `browser_stop_all` stops this session's browser, then every Chrome on this
|
|
170
|
+
host that holds a Pilot profile lock. Before each signal, it checks that the
|
|
171
|
+
process is a Chrome or Chromium executable and that its command line has the
|
|
172
|
+
exact argument `--user-data-dir=<that profile's directory>`. A reused pid or
|
|
173
|
+
an unrelated process is never stopped. A browser is reported as stopped only
|
|
174
|
+
after it has exited, and a lock that cannot be removed is reported as failed.
|
|
175
|
+
It also removes stale locks. Locks from other hosts and locks with no readable owner
|
|
176
|
+
are reported and left in place. It can close browsers that other agents are
|
|
177
|
+
using, so confirm with the user first.
|
|
178
|
+
|
|
179
|
+
Process verification uses `ps`, so `browser_stop_all` skips every locked
|
|
180
|
+
profile on Windows.
|
|
181
|
+
|
|
108
182
|
### With Docker
|
|
109
183
|
|
|
110
184
|
To use the MCP server from a Docker container, pass `-i` so stdin stays open for stdio communication:
|
|
@@ -242,11 +316,13 @@ Or add to `.mcp.json` in your project:
|
|
|
242
316
|
|
|
243
317
|
**Browser Lifecycle:**
|
|
244
318
|
|
|
245
|
-
| Tool
|
|
246
|
-
|
|
|
247
|
-
| `browser_start`
|
|
248
|
-
| `browser_stop`
|
|
249
|
-
| `
|
|
319
|
+
| Tool | Description |
|
|
320
|
+
| ------------------ | --------------------------------------------------- |
|
|
321
|
+
| `browser_start` | Launch Chrome |
|
|
322
|
+
| `browser_stop` | Stop Chrome (or disconnect from external Chrome) |
|
|
323
|
+
| `browser_status` | List this session's browser and Pilot profile locks |
|
|
324
|
+
| `browser_stop_all` | Stop every Pilot-managed Chrome on this host |
|
|
325
|
+
| `browser_connect` | Connect to an existing Chrome with remote debugging |
|
|
250
326
|
|
|
251
327
|
**Snapshot & Find:**
|
|
252
328
|
|
|
@@ -393,6 +469,22 @@ pnpm run test:e2e:mcp
|
|
|
393
469
|
pnpm run test:e2e:mcp:docker
|
|
394
470
|
```
|
|
395
471
|
|
|
472
|
+
## Browser Support
|
|
473
|
+
|
|
474
|
+
Pilot drives Chrome today. MCP tools call a browser-agnostic `BrowserDriver`
|
|
475
|
+
(`src/browser/driver/`); `CdpDriver` implements it for Chrome over the Chrome
|
|
476
|
+
DevTools Protocol. Each driver declares capabilities, and a tool whose
|
|
477
|
+
capabilities the active browser lacks fails with
|
|
478
|
+
`<tool> is not supported by <browser>`. `browser_status` reports the driven
|
|
479
|
+
browser as `session.browser`.
|
|
480
|
+
|
|
481
|
+
Planned drivers: Firefox on macOS
|
|
482
|
+
([#58](https://github.com/everydaydevopsio/pilot/issues/58)), Firefox on Linux
|
|
483
|
+
and Windows ([#59](https://github.com/everydaydevopsio/pilot/issues/59)), Safari
|
|
484
|
+
on macOS ([#60](https://github.com/everydaydevopsio/pilot/issues/60)), and
|
|
485
|
+
WebKit via Playwright
|
|
486
|
+
([#61](https://github.com/everydaydevopsio/pilot/issues/61)).
|
|
487
|
+
|
|
396
488
|
## Project Structure
|
|
397
489
|
|
|
398
490
|
```
|
|
@@ -402,7 +494,9 @@ src/
|
|
|
402
494
|
│ ├── browser-manager.ts # BrowserManager orchestrator
|
|
403
495
|
│ ├── chrome-launcher.ts # Chrome process management
|
|
404
496
|
│ ├── connection.ts # CDP connection + reconnect
|
|
497
|
+
│ ├── driver/ # BrowserDriver interface, CdpDriver, capability gating
|
|
405
498
|
│ ├── events.ts # CDP event listeners
|
|
499
|
+
│ ├── sessions.ts # Profile lock status and stop-all
|
|
406
500
|
│ ├── tabs.ts # Tab management
|
|
407
501
|
│ ├── types.ts # Shared types
|
|
408
502
|
│ ├── inspect/ # Snapshot, styles, element refs
|
|
@@ -411,8 +505,8 @@ src/
|
|
|
411
505
|
│ ├── performance/ # Tracing + analysis
|
|
412
506
|
│ └── security/ # Origin allow/block lists
|
|
413
507
|
├── cli/ # CLI commands (init, Linux preflight)
|
|
414
|
-
├── commands/ #
|
|
415
|
-
├── mcp/ # MCP server + tool registrations
|
|
508
|
+
├── commands/ # CDP command implementations used by CdpDriver
|
|
509
|
+
├── mcp/ # MCP server + tool registrations (call BrowserDriver only)
|
|
416
510
|
└── util/ # Config, logger
|
|
417
511
|
```
|
|
418
512
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Client } from 'chrome-remote-interface';
|
|
2
2
|
import type { Config } from '../util/config.js';
|
|
3
3
|
import type { ViewportConfig } from '../viewport.js';
|
|
4
|
-
import type { BrowserEventCallback, BrowserState, LaunchOptions, TabInfo } from './types.js';
|
|
4
|
+
import type { BrowserEventCallback, BrowserState, LaunchOptions, SessionInfo, TabInfo } from './types.js';
|
|
5
5
|
export declare class BrowserManager {
|
|
6
6
|
private readonly config;
|
|
7
7
|
private client;
|
|
@@ -30,6 +30,7 @@ export declare class BrowserManager {
|
|
|
30
30
|
isConnected(): boolean;
|
|
31
31
|
isLaunched(): boolean;
|
|
32
32
|
isExternalChrome(): boolean;
|
|
33
|
+
getSessionInfo(): SessionInfo;
|
|
33
34
|
getViewportConfig(): ViewportConfig | null;
|
|
34
35
|
setViewportConfig(config: ViewportConfig): void;
|
|
35
36
|
static findChromeExecutable(override?: string): string;
|
|
@@ -40,6 +41,11 @@ export declare class BrowserManager {
|
|
|
40
41
|
headless: boolean;
|
|
41
42
|
viewport: string;
|
|
42
43
|
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Stop a Chrome process whose launch failed so it does not keep holding
|
|
46
|
+
* the profile lock while this manager forgets about it.
|
|
47
|
+
*/
|
|
48
|
+
private abortLaunch;
|
|
43
49
|
connect(): Promise<void>;
|
|
44
50
|
connectExisting(opts: {
|
|
45
51
|
host?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-manager.d.ts","sourceRoot":"","sources":["../../src/browser/browser-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-manager.d.ts","sourceRoot":"","sources":["../../src/browser/browser-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAMtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EACV,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,OAAO,EACR,MAAM,YAAY,CAAC;AA2BpB,qBAAa,cAAc;IAoBb,OAAO,CAAC,QAAQ,CAAC,MAAM;IAnBnC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,sBAAsB,CAAqB;IACnD,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,oBAAoB,CAAyB;IACrD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,YAAY,CAAuB;gBAEd,MAAM,EAAE,MAAM;IAI3C,gBAAgB,CAAC,EAAE,EAAE,oBAAoB,GAAG,IAAI;IAIhD,OAAO,CAAC,IAAI;IAIZ,QAAQ,IAAI,YAAY;IASxB,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,WAAW,IAAI,OAAO;IAItB,UAAU,IAAI,OAAO;IAIrB,gBAAgB,IAAI,OAAO;IAI3B,cAAc,IAAI,WAAW;IAwB7B,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAI1C,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAI/C,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;WAIzC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5C,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,qBAAqB;IA6BvB,MAAM,CACV,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAyInD;;;OAGG;YACW,WAAW;IAiBnB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCxB,eAAe,CAAC,IAAI,EAAE;QAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAyDhC,OAAO,CAAC,gBAAgB;IAWxB,kBAAkB,CAAC,SAAS,SAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB9C,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAI9B,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BhD,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,kBAAkB;IAOpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAoC/B"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { mkdirSync } from 'fs';
|
|
2
|
+
import { hostname } from 'os';
|
|
3
|
+
import { basename, join } from 'path';
|
|
2
4
|
import { getLogger } from '../util/logger.js';
|
|
3
5
|
import { resolveViewport } from '../viewport.js';
|
|
4
|
-
import { findChromeExecutable, findFreePort, isProfileLocked, launchChrome, resolveUserDataDir, waitForChromeReady, cleanupLockFiles } from './chrome-launcher.js';
|
|
6
|
+
import { findChromeExecutable, findFreePort, isProfileLocked, launchChrome, resolveUserDataDir, waitForChromeReady, cleanupLockFiles, profileLockOwner, DEFAULT_STARTUP_TIMEOUT_MS } from './chrome-launcher.js';
|
|
5
7
|
import { assertLinuxBrowserPrerequisites } from './preflight.js';
|
|
6
8
|
import { connectToChrome, enableDomains, getConnectionInfo } from './connection.js';
|
|
7
9
|
import { attachEventListeners } from './events.js';
|
|
@@ -56,6 +58,29 @@ export class BrowserManager {
|
|
|
56
58
|
isExternalChrome() {
|
|
57
59
|
return this.external;
|
|
58
60
|
}
|
|
61
|
+
getSessionInfo() {
|
|
62
|
+
if (this.external) {
|
|
63
|
+
return {
|
|
64
|
+
mode: 'external',
|
|
65
|
+
connected: this.client !== null,
|
|
66
|
+
host: this.externalHost ?? undefined,
|
|
67
|
+
cdpPort: this.externalPort ?? undefined
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (this.chromeProcess) {
|
|
71
|
+
return {
|
|
72
|
+
mode: 'launched',
|
|
73
|
+
connected: this.client !== null,
|
|
74
|
+
pid: this.chromeProcess.pid,
|
|
75
|
+
cdpPort: this.launchedCdpPort ?? undefined,
|
|
76
|
+
userDataDir: this.launchedUserDataDir ?? undefined,
|
|
77
|
+
profile: this.launchedUserDataDir
|
|
78
|
+
? basename(this.launchedUserDataDir)
|
|
79
|
+
: undefined
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return { mode: 'none', connected: false };
|
|
83
|
+
}
|
|
59
84
|
getViewportConfig() {
|
|
60
85
|
return this.viewportConfig;
|
|
61
86
|
}
|
|
@@ -110,7 +135,7 @@ export class BrowserManager {
|
|
|
110
135
|
const profileName = opts.profileName ?? this.config.profileName;
|
|
111
136
|
const userDataDir = resolveUserDataDir(profileName);
|
|
112
137
|
if (isProfileLocked(userDataDir)) {
|
|
113
|
-
throw new Error(
|
|
138
|
+
throw new Error(describeProfileConflict(profileName, userDataDir));
|
|
114
139
|
}
|
|
115
140
|
const viewportPreset = opts.viewport ?? this.config.viewport;
|
|
116
141
|
this.viewportConfig = resolveViewport({
|
|
@@ -140,31 +165,89 @@ export class BrowserManager {
|
|
|
140
165
|
this.launchedCdpPort = port;
|
|
141
166
|
this.launchedUserDataDir = userDataDir;
|
|
142
167
|
const stderrChunks = [];
|
|
143
|
-
this.chromeProcess
|
|
168
|
+
const proc = this.chromeProcess;
|
|
169
|
+
let spawnError = null;
|
|
170
|
+
let exitStatus = null;
|
|
171
|
+
proc.stderr?.on('data', (data) => {
|
|
144
172
|
stderrChunks.push(data.toString());
|
|
145
173
|
});
|
|
146
|
-
|
|
174
|
+
proc.on('error', (err) => {
|
|
175
|
+
spawnError = err;
|
|
176
|
+
getLogger().warn({ err, chromePath }, 'Chrome process failed to start');
|
|
177
|
+
// A failed spawn does not necessarily emit 'exit'.
|
|
178
|
+
if (this.chromeProcess === proc && proc.pid === undefined) {
|
|
179
|
+
this.chromeProcess = null;
|
|
180
|
+
this.launchedCdpPort = null;
|
|
181
|
+
this.launchedUserDataDir = null;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
proc.on('exit', (code, signal) => {
|
|
147
185
|
const logger = getLogger();
|
|
148
186
|
const stderr = stderrChunks.join('').trim();
|
|
149
|
-
const stderrFiltered = stderr
|
|
150
|
-
|
|
151
|
-
.filter((l) => !l.includes('dbus/bus.cc'))
|
|
152
|
-
.join('\n')
|
|
153
|
-
.trim();
|
|
187
|
+
const stderrFiltered = filterChromeStderr(stderr);
|
|
188
|
+
exitStatus = signal ? `signal ${signal}` : `exit code ${code}`;
|
|
154
189
|
logger.warn({
|
|
155
190
|
code,
|
|
156
191
|
signal,
|
|
157
192
|
...(stderrFiltered && { stderr: stderrFiltered.slice(0, 1000) }),
|
|
158
193
|
...(stderr && !stderrFiltered && { stderrRaw: stderr.slice(0, 500) })
|
|
159
194
|
}, 'Chrome process exited');
|
|
160
|
-
this.chromeProcess
|
|
161
|
-
|
|
162
|
-
|
|
195
|
+
if (this.chromeProcess === proc) {
|
|
196
|
+
this.chromeProcess = null;
|
|
197
|
+
this.launchedCdpPort = null;
|
|
198
|
+
this.cleanupUserDataDir(proc.pid);
|
|
199
|
+
}
|
|
163
200
|
});
|
|
164
|
-
|
|
201
|
+
const startupTimeoutMs = opts.startupTimeoutMs ?? DEFAULT_STARTUP_TIMEOUT_MS;
|
|
202
|
+
const earlyFailure = () => {
|
|
203
|
+
if (spawnError) {
|
|
204
|
+
return new Error(`Chrome failed to start (${chromePath}): ${spawnError.message}`, { cause: spawnError });
|
|
205
|
+
}
|
|
206
|
+
if (exitStatus) {
|
|
207
|
+
const stderr = filterChromeStderr(stderrChunks.join('').trim());
|
|
208
|
+
return new Error(`Chrome exited (${exitStatus}) before DevTools became ready on port ${port}.` +
|
|
209
|
+
(stderr ? ` Chrome stderr: ${stderr.slice(-1000)}` : ''));
|
|
210
|
+
}
|
|
211
|
+
return null;
|
|
212
|
+
};
|
|
213
|
+
try {
|
|
214
|
+
await waitForChromeReady(port, startupTimeoutMs, earlyFailure);
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
const timedOut = earlyFailure() === null;
|
|
218
|
+
const cleanup = await this.abortLaunch(proc, userDataDir);
|
|
219
|
+
throw new Error(describeLaunchFailure({
|
|
220
|
+
reason: err.message,
|
|
221
|
+
timedOut,
|
|
222
|
+
startupTimeoutMs,
|
|
223
|
+
chromePath,
|
|
224
|
+
profileName,
|
|
225
|
+
userDataDir,
|
|
226
|
+
headless,
|
|
227
|
+
port,
|
|
228
|
+
cleanup
|
|
229
|
+
}), { cause: err });
|
|
230
|
+
}
|
|
165
231
|
await this.connect();
|
|
166
232
|
return { headless, viewport: viewportPreset };
|
|
167
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Stop a Chrome process whose launch failed so it does not keep holding
|
|
236
|
+
* the profile lock while this manager forgets about it.
|
|
237
|
+
*/
|
|
238
|
+
async abortLaunch(proc, userDataDir) {
|
|
239
|
+
if (this.chromeProcess === proc) {
|
|
240
|
+
this.chromeProcess = null;
|
|
241
|
+
this.launchedCdpPort = null;
|
|
242
|
+
}
|
|
243
|
+
this.launchedUserDataDir = null;
|
|
244
|
+
const pid = proc.pid;
|
|
245
|
+
const stopped = await stopChromeProcess(proc);
|
|
246
|
+
if (stopped && pid !== undefined) {
|
|
247
|
+
cleanupLockFiles(userDataDir, pid);
|
|
248
|
+
}
|
|
249
|
+
return { pid, stopped };
|
|
250
|
+
}
|
|
168
251
|
async connect() {
|
|
169
252
|
if (this.destroyed)
|
|
170
253
|
return;
|
|
@@ -292,9 +375,9 @@ export class BrowserManager {
|
|
|
292
375
|
}, this.retryMs);
|
|
293
376
|
this.retryTimer.unref();
|
|
294
377
|
}
|
|
295
|
-
cleanupUserDataDir() {
|
|
296
|
-
if (this.launchedUserDataDir) {
|
|
297
|
-
cleanupLockFiles(this.launchedUserDataDir);
|
|
378
|
+
cleanupUserDataDir(ownerPid) {
|
|
379
|
+
if (this.launchedUserDataDir && ownerPid !== undefined) {
|
|
380
|
+
cleanupLockFiles(this.launchedUserDataDir, ownerPid);
|
|
298
381
|
}
|
|
299
382
|
this.launchedUserDataDir = null;
|
|
300
383
|
}
|
|
@@ -323,33 +406,106 @@ export class BrowserManager {
|
|
|
323
406
|
const proc = this.chromeProcess;
|
|
324
407
|
this.chromeProcess = null;
|
|
325
408
|
this.launchedCdpPort = null;
|
|
326
|
-
|
|
327
|
-
proc.
|
|
409
|
+
if (await stopChromeProcess(proc)) {
|
|
410
|
+
this.cleanupUserDataDir(proc.pid);
|
|
328
411
|
}
|
|
329
|
-
|
|
330
|
-
|
|
412
|
+
else {
|
|
413
|
+
getLogger().warn({ pid: proc.pid }, 'Chrome did not exit after SIGKILL; leaving its profile lock in place');
|
|
414
|
+
this.launchedUserDataDir = null;
|
|
331
415
|
}
|
|
332
|
-
await new Promise((resolve) => {
|
|
333
|
-
if (proc.exitCode !== null) {
|
|
334
|
-
resolve();
|
|
335
|
-
return;
|
|
336
|
-
}
|
|
337
|
-
const timer = setTimeout(() => {
|
|
338
|
-
try {
|
|
339
|
-
proc.kill('SIGKILL');
|
|
340
|
-
}
|
|
341
|
-
catch {
|
|
342
|
-
// process may have already exited
|
|
343
|
-
}
|
|
344
|
-
resolve();
|
|
345
|
-
}, 5000);
|
|
346
|
-
proc.once('exit', () => {
|
|
347
|
-
clearTimeout(timer);
|
|
348
|
-
resolve();
|
|
349
|
-
});
|
|
350
|
-
});
|
|
351
|
-
this.cleanupUserDataDir();
|
|
352
416
|
}
|
|
353
417
|
}
|
|
354
418
|
}
|
|
419
|
+
function filterChromeStderr(stderr) {
|
|
420
|
+
return stderr
|
|
421
|
+
.split('\n')
|
|
422
|
+
.filter((l) => !l.includes('dbus/bus.cc'))
|
|
423
|
+
.join('\n')
|
|
424
|
+
.trim();
|
|
425
|
+
}
|
|
426
|
+
/** Terminate a Chrome process, escalating to SIGKILL. Resolves true once it has exited. */
|
|
427
|
+
async function stopChromeProcess(proc) {
|
|
428
|
+
const hasExited = () => proc.exitCode !== null || proc.signalCode !== null;
|
|
429
|
+
if (proc.pid === undefined || hasExited())
|
|
430
|
+
return true;
|
|
431
|
+
const waitForExit = (ms) => new Promise((resolve) => {
|
|
432
|
+
if (hasExited()) {
|
|
433
|
+
resolve(true);
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
const timer = setTimeout(() => {
|
|
437
|
+
proc.off('exit', onExit);
|
|
438
|
+
resolve(hasExited());
|
|
439
|
+
}, ms);
|
|
440
|
+
const onExit = () => {
|
|
441
|
+
clearTimeout(timer);
|
|
442
|
+
resolve(true);
|
|
443
|
+
};
|
|
444
|
+
proc.once('exit', onExit);
|
|
445
|
+
});
|
|
446
|
+
try {
|
|
447
|
+
proc.kill();
|
|
448
|
+
}
|
|
449
|
+
catch {
|
|
450
|
+
// process may have already exited
|
|
451
|
+
}
|
|
452
|
+
if (await waitForExit(5000))
|
|
453
|
+
return true;
|
|
454
|
+
try {
|
|
455
|
+
proc.kill('SIGKILL');
|
|
456
|
+
}
|
|
457
|
+
catch {
|
|
458
|
+
// process may have already exited
|
|
459
|
+
}
|
|
460
|
+
return waitForExit(2000);
|
|
461
|
+
}
|
|
462
|
+
function describeProfileConflict(profileName, userDataDir) {
|
|
463
|
+
const lockPath = join(userDataDir, 'SingletonLock');
|
|
464
|
+
const owner = profileLockOwner(userDataDir);
|
|
465
|
+
const message = [
|
|
466
|
+
`Profile "${profileName}" is already in use by another browser instance.`
|
|
467
|
+
];
|
|
468
|
+
if (owner && owner.lockHost === hostname()) {
|
|
469
|
+
message.push(`Chrome pid ${owner.pid} on this host holds ${lockPath}. This Pilot session is not tracking that browser, so browser_stop will not stop it.`, `Close that Chrome window or stop pid ${owner.pid}, or call browser_start with a different profileName.`);
|
|
470
|
+
}
|
|
471
|
+
else if (owner) {
|
|
472
|
+
message.push(`The lock ${lockPath} was created by pid ${owner.pid} on host "${owner.lockHost}", not this host ("${hostname()}"), so Pilot cannot tell whether that browser is still running.`, `Call browser_start with a different profileName. If no browser on "${owner.lockHost}" uses this profile any more, delete the lock file and retry.`);
|
|
473
|
+
}
|
|
474
|
+
else {
|
|
475
|
+
message.push(`Pilot could not identify the owner of the lock in ${userDataDir}.`, `Call browser_start with a different profileName. If no Chrome is using that directory, delete its SingletonLock and lockfile and retry.`);
|
|
476
|
+
}
|
|
477
|
+
return message.join(' ');
|
|
478
|
+
}
|
|
479
|
+
function describeLaunchFailure(details) {
|
|
480
|
+
const { cleanup } = details;
|
|
481
|
+
const display = process.env.DISPLAY || process.env.WAYLAND_DISPLAY || '(not set)';
|
|
482
|
+
const launch = [
|
|
483
|
+
`chrome=${details.chromePath}`,
|
|
484
|
+
`profile="${details.profileName}" (${details.userDataDir})`,
|
|
485
|
+
`mode=${details.headless ? 'headless' : 'visible'}`,
|
|
486
|
+
`devtools port=${details.port}`,
|
|
487
|
+
...(process.platform === 'linux' && !details.headless
|
|
488
|
+
? [`display=${display}`]
|
|
489
|
+
: [])
|
|
490
|
+
].join(', ');
|
|
491
|
+
let cleanupText;
|
|
492
|
+
if (cleanup.pid === undefined) {
|
|
493
|
+
cleanupText = 'No Chrome process was left running.';
|
|
494
|
+
}
|
|
495
|
+
else if (cleanup.stopped) {
|
|
496
|
+
cleanupText = `Pilot stopped the Chrome process it launched (pid ${cleanup.pid}); profile "${details.profileName}" is free to reuse.`;
|
|
497
|
+
}
|
|
498
|
+
else {
|
|
499
|
+
cleanupText = `Chrome (pid ${cleanup.pid}) did not stop and may still hold profile "${details.profileName}". Stop it (kill -9 ${cleanup.pid}) or call browser_start with a different profileName.`;
|
|
500
|
+
}
|
|
501
|
+
const nextSteps = details.timedOut
|
|
502
|
+
? `Chrome can be slow on a first run or with software rendering; retry with a larger startupTimeoutMs (this attempt used ${details.startupTimeoutMs}ms). Run \`pilot check\` to diagnose the environment.`
|
|
503
|
+
: `Run \`pilot check\` to diagnose the environment${details.headless ? '' : ', or retry with headless: true if no graphical display is available'}.`;
|
|
504
|
+
return [
|
|
505
|
+
details.reason,
|
|
506
|
+
`Launch: ${launch}.`,
|
|
507
|
+
`Cleanup: ${cleanupText}`,
|
|
508
|
+
`Next: ${nextSteps}`
|
|
509
|
+
].join('\n');
|
|
510
|
+
}
|
|
355
511
|
//# sourceMappingURL=browser-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-manager.js","sourceRoot":"","sources":["../../src/browser/browser-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser-manager.js","sourceRoot":"","sources":["../../src/browser/browser-manager.ts"],"names":[],"mappings":"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"}
|