@ticktockbent/charlotte 0.4.1 → 0.5.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/CHANGELOG.md +50 -0
- package/README.md +101 -27
- package/dist/browser/cdp-session.d.ts +9 -1
- package/dist/browser/cdp-session.d.ts.map +1 -1
- package/dist/browser/cdp-session.js +32 -10
- package/dist/browser/cdp-session.js.map +1 -1
- package/dist/browser/page-manager.d.ts.map +1 -1
- package/dist/browser/page-manager.js +2 -1
- package/dist/browser/page-manager.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +14 -8
- package/dist/cli.js.map +1 -1
- package/dist/dev/auditor.d.ts.map +1 -1
- package/dist/dev/auditor.js +15 -36
- package/dist/dev/auditor.js.map +1 -1
- package/dist/dev/dev-mode-state.d.ts.map +1 -1
- package/dist/dev/dev-mode-state.js.map +1 -1
- package/dist/dev/static-server.d.ts.map +1 -1
- package/dist/dev/static-server.js +6 -2
- package/dist/dev/static-server.js.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/renderer/accessibility-extractor.d.ts +3 -1
- package/dist/renderer/accessibility-extractor.d.ts.map +1 -1
- package/dist/renderer/accessibility-extractor.js +6 -6
- package/dist/renderer/accessibility-extractor.js.map +1 -1
- package/dist/renderer/dom-path.d.ts.map +1 -1
- package/dist/renderer/dom-path.js.map +1 -1
- package/dist/renderer/element-id-generator.d.ts +4 -1
- package/dist/renderer/element-id-generator.d.ts.map +1 -1
- package/dist/renderer/element-id-generator.js +12 -1
- package/dist/renderer/element-id-generator.js.map +1 -1
- package/dist/renderer/frame-discovery.d.ts +23 -0
- package/dist/renderer/frame-discovery.d.ts.map +1 -0
- package/dist/renderer/frame-discovery.js +102 -0
- package/dist/renderer/frame-discovery.js.map +1 -0
- package/dist/renderer/interactive-extractor.d.ts +8 -1
- package/dist/renderer/interactive-extractor.d.ts.map +1 -1
- package/dist/renderer/interactive-extractor.js +36 -9
- package/dist/renderer/interactive-extractor.js.map +1 -1
- package/dist/renderer/layout-extractor.d.ts +4 -1
- package/dist/renderer/layout-extractor.d.ts.map +1 -1
- package/dist/renderer/layout-extractor.js +15 -2
- package/dist/renderer/layout-extractor.js.map +1 -1
- package/dist/renderer/renderer-pipeline.d.ts +26 -1
- package/dist/renderer/renderer-pipeline.d.ts.map +1 -1
- package/dist/renderer/renderer-pipeline.js +174 -18
- package/dist/renderer/renderer-pipeline.js.map +1 -1
- package/dist/renderer/structural-tree-extractor.d.ts +7 -0
- package/dist/renderer/structural-tree-extractor.d.ts.map +1 -0
- package/dist/renderer/structural-tree-extractor.js +245 -0
- package/dist/renderer/structural-tree-extractor.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -4
- package/dist/server.js.map +1 -1
- package/dist/state/artifact-store.d.ts.map +1 -1
- package/dist/state/artifact-store.js +1 -2
- package/dist/state/artifact-store.js.map +1 -1
- package/dist/state/differ.d.ts.map +1 -1
- package/dist/state/differ.js.map +1 -1
- package/dist/tools/dev-mode.d.ts.map +1 -1
- package/dist/tools/dev-mode.js +4 -16
- package/dist/tools/dev-mode.js.map +1 -1
- package/dist/tools/dialog.d.ts.map +1 -1
- package/dist/tools/dialog.js +2 -4
- package/dist/tools/dialog.js.map +1 -1
- package/dist/tools/evaluate.d.ts.map +1 -1
- package/dist/tools/evaluate.js +1 -4
- package/dist/tools/evaluate.js.map +1 -1
- package/dist/tools/interaction.d.ts +17 -0
- package/dist/tools/interaction.d.ts.map +1 -1
- package/dist/tools/interaction.js +127 -69
- package/dist/tools/interaction.js.map +1 -1
- package/dist/tools/meta-tool.d.ts.map +1 -1
- package/dist/tools/meta-tool.js.map +1 -1
- package/dist/tools/monitoring.d.ts.map +1 -1
- package/dist/tools/monitoring.js +35 -19
- package/dist/tools/monitoring.js.map +1 -1
- package/dist/tools/navigation.d.ts.map +1 -1
- package/dist/tools/navigation.js +20 -16
- package/dist/tools/navigation.js.map +1 -1
- package/dist/tools/observation.d.ts.map +1 -1
- package/dist/tools/observation.js +50 -13
- package/dist/tools/observation.js.map +1 -1
- package/dist/tools/session.d.ts.map +1 -1
- package/dist/tools/session.js +38 -27
- package/dist/tools/session.js.map +1 -1
- package/dist/tools/tool-groups.d.ts +1 -1
- package/dist/tools/tool-groups.d.ts.map +1 -1
- package/dist/tools/tool-groups.js +9 -22
- package/dist/tools/tool-groups.js.map +1 -1
- package/dist/tools/tool-helpers.d.ts +50 -5
- package/dist/tools/tool-helpers.d.ts.map +1 -1
- package/dist/tools/tool-helpers.js +102 -2
- package/dist/tools/tool-helpers.js.map +1 -1
- package/dist/types/config.d.ts +6 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -1
- package/dist/types/page-representation.d.ts +14 -0
- package/dist/types/page-representation.d.ts.map +1 -1
- package/dist/utils/wait.js +1 -1
- package/dist/utils/wait.js.map +1 -1
- package/package.json +24 -8
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,56 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to Charlotte will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
## [0.5.0] - 2026-03-09
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **Iframe content extraction** — Child frames are now discovered and their content (interactive elements, content summaries, full text) is merged into the parent page representation. Configurable depth limit (default 3). Iframe interactive elements are included in the `interactive` array and `interactive_summary`. Closes #23.
|
|
12
|
+
- **Structural tree view** — `charlotte:observe` now accepts a `view` parameter with `"tree"` and `"tree-labeled"` modes that render the page as a hierarchical tree with indentation, replacing the flat JSON representation. Tree-labeled mode annotates interactive elements with their IDs for direct use.
|
|
13
|
+
- **File output for large responses** — `charlotte:observe` and `charlotte:screenshot` accept an `output_file` parameter to write results to disk instead of returning inline, reducing token consumption for large pages. Relative paths resolve against `output_dir` (configurable via `charlotte:configure` or `--output-dir` CLI flag). Closes GAP-13, #16.
|
|
14
|
+
- **Screenshot artifact management** — `charlotte:screenshots` (list), `charlotte:screenshot_get` (retrieve), `charlotte:screenshot_delete` (remove) tools for managing persistent screenshot files. `charlotte:screenshot` gains a `save` parameter for persistence.
|
|
15
|
+
- **Code quality tooling** — ESLint, Prettier, and coverage configuration added to the project.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- **`wait_for` JS evaluation** — Replaced `new Function("return " + expr)` with CDP `Runtime.evaluate`, fixing multi-statement JS conditions that silently returned `undefined` due to ASI. Now consistent with `charlotte:evaluate`. Fixes #73.
|
|
20
|
+
- **Browser reconnection race** — `getBrowser()` now calls `ensureConnected()` to auto-recover instead of throwing immediately. `ensureConnected()` verifies browser health after awaiting concurrent launches. Fixes #83.
|
|
21
|
+
- **Renderer pipeline resilience** — Malformed AX properties no longer crash accessibility extraction (#86). Content extraction skips failed nodes instead of aborting (#79). Recursive frame traversal catches errors per-frame (#74). Batch layout extraction uses `Promise.allSettled()` for partial failure tolerance (#77).
|
|
22
|
+
- **Event listener cleanup** — `closeTab()` now explicitly removes all page event listeners before `page.close()` to prevent memory leaks across tab cycles. Fixes #89.
|
|
23
|
+
- **Dialog handler error handling** — Dialog event handler wrapped in try/catch to prevent unhandled promise rejections when dialog is already dismissed. Fixes #75.
|
|
24
|
+
- **Dev mode shutdown resilience** — `DevModeState.stopAll()` catches errors per substep so a file watcher or static server failure doesn't prevent browser cleanup. Fixes #80.
|
|
25
|
+
- **Form field matching null guard** — `resolveId()` null return no longer produces false-positive form field matches. Fixes #76.
|
|
26
|
+
- **Landmark ID collision** — Main-frame landmarks now pass explicit `"main"` frameId for consistent hash input, preventing rare cross-frame ID collisions. Fixes #82.
|
|
27
|
+
- **CLI argument parsing** — `--output-dir=`, `--profile=`, and `--tools=` flags now use `substring(indexOf("=") + 1)` instead of `split("=")[1]`, preserving paths containing `=`. Fixes #70.
|
|
28
|
+
- **Zod bounds validation** — Added `.min()`/`.max()` constraints to `quality` (1-100), viewport `width`/`height` (>=1), and key `delay` (>=0). Fixes #81.
|
|
29
|
+
- **Test cleanup** — File output integration test no longer leaks artifact store temp directory. Fixes #71.
|
|
30
|
+
- **File output security** — Path traversal prevention, mkdir-before-validation fix, and CLI `output-dir` initialization hardened. Fixes security issues from #16 review.
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- README rewritten with problem-first opening, expanded MCP client setup configs (Cursor, Windsurf, VS Code, Cline, Amp), and updated tool counts.
|
|
35
|
+
- npm package description and keywords updated for discoverability.
|
|
36
|
+
- Site meta descriptions updated to lead with token-efficiency comparison.
|
|
37
|
+
|
|
38
|
+
## [0.4.2] - 2026-03-06
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- **`charlotte:upload`** — Set files on `<input type="file">` elements via CDP `DOM.setFileInputFiles`. Validates file existence and element type before upload. Closes GAP-02 from the Playwright MCP gap analysis.
|
|
43
|
+
- **File input detection** — File inputs (`<input type="file">`) are now correctly identified as `file_input` type in page representations. Previously they appeared as `button` because Chromium's accessibility tree represents them with a button role. A post-extraction reclassification step checks the underlying DOM node.
|
|
44
|
+
- **`charlotte:key` enhancement** — Added `keys` (sequence of key presses), `element_id` (focus a specific element before sending keys), and `delay` (milliseconds between sequence presses) parameters. Enables keyboard-driven interaction with non-input elements like game UIs, terminals, and code editors. Closes #49, #51.
|
|
45
|
+
|
|
46
|
+
### Fixed
|
|
47
|
+
|
|
48
|
+
- **Boolean parameter validation error** — `charlotte:console` and `charlotte:requests` `clear` parameter (and `charlotte:type` `clear_first`/`press_enter`) rejected string-coerced booleans (`"true"`/`"false"`) sent by some MCP clients. All boolean parameters now accept both native booleans and their string representations. Fixes #50.
|
|
49
|
+
- **`click_at` skipped hover on framework-managed links** — `click_at` now moves the mouse to target coordinates and pauses 50ms before clicking, matching real user behavior. Previously, framework links (e.g., Next.js `<Link>`) that depend on hover-triggered prefetch would skip client-side navigation. Fixes #48.
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
|
|
53
|
+
- Dialog integration tests hardened with MCP end-to-end testing via `InMemoryTransport`, sequential dialog coverage, and dialog-aware action racing tests. Test count 17 → 25. Closes #30, #33, #34.
|
|
54
|
+
|
|
5
55
|
## [0.4.1] - 2026-03-05
|
|
6
56
|
|
|
7
57
|
### Added
|
package/README.md
CHANGED
|
@@ -2,17 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
**The Web, Readable.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Your AI agent spends 60,000 tokens just to look at a web page. Charlotte does it in 336.
|
|
6
|
+
|
|
7
|
+
Charlotte is an MCP server that gives AI agents structured, token-efficient access to the web.
|
|
8
|
+
Instead of dumping the full accessibility tree on every call, Charlotte returns only what
|
|
9
|
+
the agent needs: a compact page summary on arrival, targeted queries for specific elements,
|
|
10
|
+
and full detail only when explicitly requested. The result is 25-182x less data per page
|
|
11
|
+
compared to [Playwright MCP](https://github.com/anthropics/playwright-mcp), saving thousands of dollars across production workloads.
|
|
6
12
|
|
|
7
13
|
## Why Charlotte?
|
|
8
14
|
|
|
9
15
|
Most browser MCP servers dump the entire accessibility tree on every call — a flat text blob that can exceed a million characters on content-heavy pages. Agents pay for all of it whether they need it or not.
|
|
10
16
|
|
|
11
|
-
Charlotte
|
|
17
|
+
Charlotte decomposes each page into a typed, structured representation — landmarks, headings, interactive elements, forms, content summaries — and lets agents control how much they receive with three detail levels. When an agent navigates to a new page, it gets a compact orientation (336 characters for Hacker News) instead of the full element dump (61,000+ characters). When it needs specifics, it asks for them.
|
|
12
18
|
|
|
13
19
|
### Benchmarks
|
|
14
20
|
|
|
15
|
-
Charlotte v0.
|
|
21
|
+
Charlotte v0.5.0 vs Playwright MCP, measured by characters returned per tool call on real websites:
|
|
16
22
|
|
|
17
23
|
**Navigation** (first contact with a page):
|
|
18
24
|
|
|
@@ -29,11 +35,11 @@ Charlotte's `navigate` returns minimal detail by default — landmarks, headings
|
|
|
29
35
|
|
|
30
36
|
| Profile | Tools | Def. tokens/call | Savings vs full |
|
|
31
37
|
|:---|---:|---:|---:|
|
|
32
|
-
| full |
|
|
38
|
+
| full | 42 | ~7,400 | — |
|
|
33
39
|
| browse (default) | 23 | ~3,900 | **~47%** |
|
|
34
40
|
| core | 7 | 1,677 | **~77%** |
|
|
35
41
|
|
|
36
|
-
Tool definitions are sent on every API round-trip. With the default `browse` profile, Charlotte carries ~47% less definition overhead than loading all
|
|
42
|
+
Tool definitions are sent on every API round-trip. With the default `browse` profile, Charlotte carries ~47% less definition overhead than loading all tools. Over a 20-call browsing session, that's **~38% fewer total tokens**. See the [profile benchmark report](docs/charlotte-profile-benchmark-report.md) for full results.
|
|
37
43
|
|
|
38
44
|
**The workflow difference:** Playwright agents receive 61K+ characters every time they look at Hacker News, whether they're reading headlines or looking for a login button. Charlotte agents get 336 characters on arrival, call `find({ type: "link", text: "login" })` to get exactly what they need, and never pay for the rest.
|
|
39
45
|
|
|
@@ -63,9 +69,9 @@ Agents receive landmarks, headings, interactive elements with typed metadata, bo
|
|
|
63
69
|
|
|
64
70
|
**Navigation** — `navigate`, `back`, `forward`, `reload`
|
|
65
71
|
|
|
66
|
-
**Observation** — `observe` (3 detail levels), `find` (spatial + semantic search, CSS selector mode), `screenshot`, `diff` (structural comparison against snapshots)
|
|
72
|
+
**Observation** — `observe` (3 detail levels, structural tree view), `find` (spatial + semantic search, CSS selector mode), `screenshot` (with persistent artifact management), `screenshots`, `screenshot_get`, `screenshot_delete`, `diff` (structural comparison against snapshots)
|
|
67
73
|
|
|
68
|
-
**Interaction** — `click`, `click_at` (coordinate-based), `type`, `select`, `toggle`, `submit`, `scroll`, `hover`, `drag`, `key
|
|
74
|
+
**Interaction** — `click`, `click_at` (coordinate-based), `type`, `select`, `toggle`, `submit`, `scroll`, `hover`, `drag`, `key` (single/sequence with element targeting), `wait_for` (async condition polling), `upload` (file input), `dialog` (accept/dismiss JS dialogs)
|
|
69
75
|
|
|
70
76
|
**Monitoring** — `console` (all severity levels, filtering, timestamps), `requests` (full HTTP history, method/status/resource type filtering)
|
|
71
77
|
|
|
@@ -77,15 +83,15 @@ Agents receive landmarks, headings, interactive elements with typed metadata, bo
|
|
|
77
83
|
|
|
78
84
|
## Tool Profiles
|
|
79
85
|
|
|
80
|
-
Charlotte ships 41 tools, but most workflows only need a subset. Startup profiles control which tools load into the agent's context, reducing definition overhead by up to 77%.
|
|
86
|
+
Charlotte ships 42 tools (41 registered + the `charlotte:tools` meta-tool), but most workflows only need a subset. Startup profiles control which tools load into the agent's context, reducing definition overhead by up to 77%.
|
|
81
87
|
|
|
82
88
|
```bash
|
|
83
89
|
charlotte --profile browse # 23 tools (default) — navigate, observe, interact, tabs
|
|
84
90
|
charlotte --profile core # 7 tools — navigate, observe, find, click, type, submit
|
|
85
|
-
charlotte --profile full #
|
|
86
|
-
charlotte --profile interact #
|
|
87
|
-
charlotte --profile develop #
|
|
88
|
-
charlotte --profile audit #
|
|
91
|
+
charlotte --profile full # 42 tools — everything
|
|
92
|
+
charlotte --profile interact # 30 tools — full interaction + dialog + evaluate
|
|
93
|
+
charlotte --profile develop # 33 tools — interact + dev_serve, dev_inject, dev_audit
|
|
94
|
+
charlotte --profile audit # 14 tools — navigation + observation + dev_audit + viewport
|
|
89
95
|
```
|
|
90
96
|
|
|
91
97
|
Agents can activate more tools mid-session without restarting:
|
|
@@ -150,7 +156,9 @@ npm start
|
|
|
150
156
|
|
|
151
157
|
### MCP Client Configuration
|
|
152
158
|
|
|
153
|
-
|
|
159
|
+
#### Claude Code
|
|
160
|
+
|
|
161
|
+
Create `.mcp.json` in your project root:
|
|
154
162
|
|
|
155
163
|
```json
|
|
156
164
|
{
|
|
@@ -165,7 +173,85 @@ Add Charlotte to your MCP client configuration. For Claude Code, create `.mcp.js
|
|
|
165
173
|
}
|
|
166
174
|
```
|
|
167
175
|
|
|
168
|
-
|
|
176
|
+
#### Claude Desktop
|
|
177
|
+
|
|
178
|
+
Add to `claude_desktop_config.json`:
|
|
179
|
+
|
|
180
|
+
```json
|
|
181
|
+
{
|
|
182
|
+
"mcpServers": {
|
|
183
|
+
"charlotte": {
|
|
184
|
+
"command": "npx",
|
|
185
|
+
"args": ["@ticktockbent/charlotte"]
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
#### Cursor
|
|
192
|
+
|
|
193
|
+
Add to `.cursor/mcp.json`:
|
|
194
|
+
|
|
195
|
+
```json
|
|
196
|
+
{
|
|
197
|
+
"mcpServers": {
|
|
198
|
+
"charlotte": {
|
|
199
|
+
"command": "npx",
|
|
200
|
+
"args": ["@ticktockbent/charlotte"]
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
#### Windsurf
|
|
207
|
+
|
|
208
|
+
Add to `~/.codeium/windsurf/mcp_config.json`:
|
|
209
|
+
|
|
210
|
+
```json
|
|
211
|
+
{
|
|
212
|
+
"mcpServers": {
|
|
213
|
+
"charlotte": {
|
|
214
|
+
"command": "npx",
|
|
215
|
+
"args": ["@ticktockbent/charlotte"]
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
#### VS Code (Copilot)
|
|
222
|
+
|
|
223
|
+
Add to `.vscode/mcp.json`:
|
|
224
|
+
|
|
225
|
+
```json
|
|
226
|
+
{
|
|
227
|
+
"servers": {
|
|
228
|
+
"charlotte": {
|
|
229
|
+
"type": "stdio",
|
|
230
|
+
"command": "npx",
|
|
231
|
+
"args": ["@ticktockbent/charlotte"]
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
#### Cline
|
|
238
|
+
|
|
239
|
+
Add to Cline MCP settings (via the Cline sidebar > MCP Servers > Configure):
|
|
240
|
+
|
|
241
|
+
```json
|
|
242
|
+
{
|
|
243
|
+
"mcpServers": {
|
|
244
|
+
"charlotte": {
|
|
245
|
+
"command": "npx",
|
|
246
|
+
"args": ["@ticktockbent/charlotte"]
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
#### Amp
|
|
253
|
+
|
|
254
|
+
Add to `~/.amp/settings.json`:
|
|
169
255
|
|
|
170
256
|
```json
|
|
171
257
|
{
|
|
@@ -347,7 +433,7 @@ All tools go through `renderActivePage()` which handles snapshots, reload events
|
|
|
347
433
|
|
|
348
434
|
## Sandbox
|
|
349
435
|
|
|
350
|
-
Charlotte includes a test website in `tests/sandbox/` that exercises all
|
|
436
|
+
Charlotte includes a test website in `tests/sandbox/` that exercises all tools without touching the public internet. Serve it locally with:
|
|
351
437
|
|
|
352
438
|
```
|
|
353
439
|
dev_serve({ path: "tests/sandbox" })
|
|
@@ -359,18 +445,12 @@ Four pages cover navigation, forms, interactive elements, delayed content, scrol
|
|
|
359
445
|
|
|
360
446
|
**Tool naming convention** — Charlotte uses `:` as a namespace separator in tool names (e.g., `charlotte:navigate`, `charlotte:observe`). MCP SDK v1.26.0+ logs validation warnings for this character, as the emerging [SEP standard](https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) restricts tool names to `[A-Za-z0-9_.-]`. This does not affect functionality — all tools work correctly — but produces stderr warnings on server startup. Will be addressed in a future release to comply with the SEP standard.
|
|
361
447
|
|
|
362
|
-
**Iframe content not captured** — Charlotte reads the main frame's accessibility tree only. Content inside iframes (same-origin or cross-origin) is not included in the page representation. See the Roadmap for planned iframe support.
|
|
363
|
-
|
|
364
448
|
**Shadow DOM** — Open shadow DOM works transparently. Chromium's accessibility tree pierces open shadow boundaries, so web components (e.g., GitHub's `<relative-time>`, `<tool-tip>`) render their content into Charlotte's representation without special handling. Closed shadow roots are opaque to the accessibility tree and will not be captured.
|
|
365
449
|
|
|
366
|
-
**No file upload support** — Charlotte identifies `file_input` elements in the page representation but provides no tool to set file paths on them. Workflows that require file uploads cannot be completed.
|
|
367
|
-
|
|
368
450
|
## Roadmap
|
|
369
451
|
|
|
370
452
|
### Interaction Gaps
|
|
371
453
|
|
|
372
|
-
**File Upload** — Add a `charlotte:upload` tool to set file paths on `file_input` elements via Puppeteer's `elementHandle.uploadFile()`. Charlotte already identifies file inputs but cannot act on them.
|
|
373
|
-
|
|
374
454
|
**Batch Form Fill** — Add a `charlotte:fill_form` tool that accepts an array of `{element_id, value}` pairs and fills an entire form in a single tool call, reducing N sequential `type`/`select`/`toggle` calls to one.
|
|
375
455
|
|
|
376
456
|
**Slow Typing** — Add a `slowly` or `character_delay` parameter to `charlotte:type` for character-by-character input. Required for sites with key-by-key event handlers (autocomplete, search-as-you-type, input validation).
|
|
@@ -383,20 +463,14 @@ Four pages cover navigation, forms, interactive elements, delayed content, scrol
|
|
|
383
463
|
|
|
384
464
|
**Configuration File** — Support a `--config` CLI argument to load settings from a JSON file, simplifying repeatable setups and CI/CD integration.
|
|
385
465
|
|
|
386
|
-
**File Output** — Add an optional `filename` parameter to `screenshot`, `observe`, and future monitoring tools so large responses can be written to disk instead of returned inline, reducing token consumption.
|
|
387
|
-
|
|
388
466
|
**Full Device Emulation** — Extend `charlotte:viewport` to accept named devices (e.g., "iPhone 15") and configure user agent, touch support, and device pixel ratio via CDP, not just viewport dimensions.
|
|
389
467
|
|
|
390
468
|
### Feature Roadmap
|
|
391
469
|
|
|
392
|
-
**Screenshot Artifacts** — Save screenshots as persistent file artifacts rather than only returning inline data, enabling agents to reference and manage captured images across sessions.
|
|
393
|
-
|
|
394
470
|
**Video Recording** — Record interactions as video, capturing the full sequence of agent-driven navigation and manipulation for debugging, documentation, and review.
|
|
395
471
|
|
|
396
472
|
**ARM64 Docker Images** — Add `linux/arm64` platform support to the Docker publish workflow for native performance on Apple Silicon Macs and ARM servers.
|
|
397
473
|
|
|
398
|
-
**Iframe Content Extraction** — Traverse child frames via CDP to include iframe content in the page representation. Currently, Charlotte only reads the main frame's accessibility tree; same-origin and cross-origin iframe content is invisible.
|
|
399
|
-
|
|
400
474
|
See [docs/playwright-mcp-gap-analysis.md](docs/playwright-mcp-gap-analysis.md) for the full gap analysis against Playwright MCP, including lower-priority items (vision tools, testing/verification, tracing, transport, security) and areas where Charlotte has advantages.
|
|
401
475
|
|
|
402
476
|
## Full Specification
|
|
@@ -1,7 +1,15 @@
|
|
|
1
|
-
import type { Page, CDPSession } from "puppeteer";
|
|
1
|
+
import type { Page, CDPSession, Frame } from "puppeteer";
|
|
2
2
|
export declare class CDPSessionManager {
|
|
3
3
|
private sessions;
|
|
4
|
+
private frameSessions;
|
|
4
5
|
getSession(page: Page): Promise<CDPSession>;
|
|
6
|
+
/**
|
|
7
|
+
* Get or create a CDP session for a child frame.
|
|
8
|
+
* Uses the frame's own client for out-of-process (cross-origin) frames.
|
|
9
|
+
*/
|
|
10
|
+
getFrameSession(frame: Frame): Promise<CDPSession>;
|
|
11
|
+
/** Extract the CDP frame ID from a Puppeteer Frame. */
|
|
12
|
+
getFrameId(frame: Frame): string;
|
|
5
13
|
private enableDomains;
|
|
6
14
|
}
|
|
7
15
|
//# sourceMappingURL=cdp-session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdp-session.d.ts","sourceRoot":"","sources":["../../src/browser/cdp-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cdp-session.d.ts","sourceRoot":"","sources":["../../src/browser/cdp-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAQzD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,aAAa,CAAiC;IAEhD,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;IAajD;;;OAGG;IACG,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;IAiBxD,uDAAuD;IACvD,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;YAMlB,aAAa;CAc5B"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import { logger } from "../utils/logger.js";
|
|
2
|
-
const REQUIRED_DOMAINS = [
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
"CSS",
|
|
6
|
-
"Page",
|
|
7
|
-
"Network",
|
|
8
|
-
];
|
|
2
|
+
const REQUIRED_DOMAINS = ["Accessibility", "DOM", "CSS", "Page", "Network"];
|
|
3
|
+
/** Domains needed for iframe frame sessions (subset — no Page/Network). */
|
|
4
|
+
const FRAME_DOMAINS = ["Accessibility", "DOM", "CSS"];
|
|
9
5
|
export class CDPSessionManager {
|
|
10
6
|
sessions = new WeakMap();
|
|
7
|
+
frameSessions = new Map();
|
|
11
8
|
async getSession(page) {
|
|
12
9
|
const existing = this.sessions.get(page);
|
|
13
10
|
if (existing) {
|
|
@@ -15,12 +12,37 @@ export class CDPSessionManager {
|
|
|
15
12
|
}
|
|
16
13
|
logger.debug("Creating new CDP session");
|
|
17
14
|
const session = await page.createCDPSession();
|
|
18
|
-
await this.enableDomains(session);
|
|
15
|
+
await this.enableDomains(session, REQUIRED_DOMAINS);
|
|
19
16
|
this.sessions.set(page, session);
|
|
20
17
|
return session;
|
|
21
18
|
}
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Get or create a CDP session for a child frame.
|
|
21
|
+
* Uses the frame's own client for out-of-process (cross-origin) frames.
|
|
22
|
+
*/
|
|
23
|
+
async getFrameSession(frame) {
|
|
24
|
+
const frameId = this.getFrameId(frame);
|
|
25
|
+
const existing = this.frameSessions.get(frameId);
|
|
26
|
+
if (existing) {
|
|
27
|
+
return existing;
|
|
28
|
+
}
|
|
29
|
+
logger.debug("Creating CDP session for frame", { frameId, url: frame.url() });
|
|
30
|
+
// CdpFrame exposes .client which is the CDP session for that frame's target.
|
|
31
|
+
// This is a Puppeteer internal (tested with puppeteer 24.x). If Puppeteer
|
|
32
|
+
// changes the internal API, this will need updating.
|
|
33
|
+
const session = frame.client;
|
|
34
|
+
await this.enableDomains(session, FRAME_DOMAINS);
|
|
35
|
+
this.frameSessions.set(frameId, session);
|
|
36
|
+
return session;
|
|
37
|
+
}
|
|
38
|
+
/** Extract the CDP frame ID from a Puppeteer Frame. */
|
|
39
|
+
getFrameId(frame) {
|
|
40
|
+
// Puppeteer Frame exposes _id as the CDP frame ID.
|
|
41
|
+
// This is a Puppeteer internal (tested with puppeteer 24.x).
|
|
42
|
+
return frame._id;
|
|
43
|
+
}
|
|
44
|
+
async enableDomains(session, domains) {
|
|
45
|
+
for (const domain of domains) {
|
|
24
46
|
try {
|
|
25
47
|
await session.send(`${domain}.enable`);
|
|
26
48
|
logger.debug(`Enabled CDP domain: ${domain}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdp-session.js","sourceRoot":"","sources":["../../src/browser/cdp-session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,gBAAgB,GAAG
|
|
1
|
+
{"version":3,"file":"cdp-session.js","sourceRoot":"","sources":["../../src/browser/cdp-session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,gBAAgB,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AAErF,2EAA2E;AAC3E,MAAM,aAAa,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAE/D,MAAM,OAAO,iBAAiB;IACpB,QAAQ,GAA8B,IAAI,OAAO,EAAE,CAAC;IACpD,aAAa,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEtD,KAAK,CAAC,UAAU,CAAC,IAAU;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9C,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CAAC,KAAY;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9E,6EAA6E;QAC7E,0EAA0E;QAC1E,qDAAqD;QACrD,MAAM,OAAO,GAAI,KAAa,CAAC,MAAoB,CAAC;QACpD,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACjD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,uDAAuD;IACvD,UAAU,CAAC,KAAY;QACrB,mDAAmD;QACnD,6DAA6D;QAC7D,OAAQ,KAAa,CAAC,GAAa,CAAC;IACtC,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,OAAmB,EACnB,OAA0B;QAE1B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,SAAgB,CAAC,CAAC;gBAC9C,MAAM,CAAC,KAAK,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,8CAA8C;gBAC9C,MAAM,CAAC,KAAK,CAAC,gCAAgC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-manager.d.ts","sourceRoot":"","sources":["../../src/browser/page-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAoBD,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,CAAC,EAAE,eAAe;IAK9B,OAAO,CAAC,cAAc,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"page-manager.d.ts","sourceRoot":"","sources":["../../src/browser/page-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAoBD,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,CAAC,EAAE,eAAe;IAK9B,OAAO,CAAC,cAAc,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0FtE,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBtC,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAapC,aAAa,IAAI,IAAI;IAmBrB,cAAc,IAAI,MAAM;IAOxB,+EAA+E;IAC/E,gBAAgB,IAAI,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAS1D,uFAAuF;IACvF,gBAAgB,IAAI,KAAK,CAAC;QACxB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IASF,iEAAiE;IACjE,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE;IAUpD,wDAAwD;IACxD,kBAAkB,IAAI,cAAc,EAAE;IAOtC,oBAAoB,IAAI,IAAI;IAQ5B,oBAAoB,IAAI,IAAI;IAQ5B,WAAW,IAAI,IAAI;IASnB,oBAAoB,IAAI,aAAa,GAAG,IAAI;IAM5C,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAMjC,kBAAkB,IAAI,IAAI;IAS1B,QAAQ,IAAI,OAAO;CAGpB"}
|
|
@@ -57,7 +57,8 @@ export class PageManager {
|
|
|
57
57
|
const autoDismiss = this.config.dialogAutoDismiss;
|
|
58
58
|
logger.info("Dialog appeared", { tabId, type: dialogType, message: dialog.message() });
|
|
59
59
|
// Auto-dismiss logic
|
|
60
|
-
if (autoDismiss === "accept_all" ||
|
|
60
|
+
if (autoDismiss === "accept_all" ||
|
|
61
|
+
(autoDismiss === "accept_alerts" && dialogType === "alert")) {
|
|
61
62
|
await dialog.accept();
|
|
62
63
|
return;
|
|
63
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-manager.js","sourceRoot":"","sources":["../../src/browser/page-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAwB5C,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAWlC,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAEzB,SAAS,aAAa;IACpB,OAAO,OAAO,gBAAgB,EAAE,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,OAAO,WAAW;IACd,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IACvC,WAAW,GAAkB,IAAI,CAAC;IAClC,MAAM,CAAkB;IAEhC,YAAY,MAAwB;QAClC,0EAA0E;QAC1E,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,mBAAmB,EAAE,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,cAA8B,EAAE,GAAY;QACxD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;QAE9B,MAAM,WAAW,GAAgB;YAC/B,EAAE,EAAE,KAAK;YACT,IAAI;YACJ,eAAe,EAAE,EAAE;YACnB,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,IAAI;SACxB,CAAC;QAEF,+BAA+B;QAC/B,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YACzB,IAAI,WAAW,CAAC,eAAe,CAAC,MAAM,IAAI,oBAAoB,EAAE,CAAC;gBAC/D,WAAW,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YACtC,CAAC;YACD,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC/B,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE;gBACjB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;gBAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,gCAAgC;QAChC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;YAC/B,IAAI,WAAW,CAAC,eAAe,CAAC,MAAM,IAAI,oBAAoB,EAAE,CAAC;gBAC/D,WAAW,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YACtC,CAAC;YACD,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC/B,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE;gBACnB,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;gBACnC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;gBACzB,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE;gBACjC,YAAY,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE;gBAC/C,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,mEAAmE;QACnE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACjC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAA2B,CAAC;YAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAElD,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAEvF,qBAAqB;YACrB,
|
|
1
|
+
{"version":3,"file":"page-manager.js","sourceRoot":"","sources":["../../src/browser/page-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAezE,wBAAgB,YAAY,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG;IACpE,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CA+BA"}
|
package/dist/cli.js
CHANGED
|
@@ -5,25 +5,31 @@
|
|
|
5
5
|
* the main() side effect.
|
|
6
6
|
*/
|
|
7
7
|
import { logger } from "./utils/logger.js";
|
|
8
|
-
const VALID_PROFILES = [
|
|
9
|
-
"core", "browse", "interact", "develop", "audit", "full",
|
|
10
|
-
];
|
|
8
|
+
const VALID_PROFILES = ["core", "browse", "interact", "develop", "audit", "full"];
|
|
11
9
|
const VALID_GROUPS = [
|
|
12
|
-
"navigation",
|
|
13
|
-
"
|
|
10
|
+
"navigation",
|
|
11
|
+
"observation",
|
|
12
|
+
"interaction",
|
|
13
|
+
"session",
|
|
14
|
+
"dev_mode",
|
|
15
|
+
"dialog",
|
|
16
|
+
"evaluate",
|
|
17
|
+
"monitoring",
|
|
14
18
|
];
|
|
15
19
|
export function parseCliArgs(argv = process.argv.slice(2)) {
|
|
16
20
|
const profileArg = argv.find((a) => a.startsWith("--profile="));
|
|
17
21
|
const toolsArg = argv.find((a) => a.startsWith("--tools="));
|
|
22
|
+
const outputDirArg = argv.find((a) => a.startsWith("--output-dir="));
|
|
18
23
|
if (profileArg && toolsArg) {
|
|
19
24
|
logger.warn("Both --profile and --tools provided; --profile takes precedence");
|
|
20
25
|
}
|
|
26
|
+
const outputDir = outputDirArg ? outputDirArg.split("=")[1] : undefined;
|
|
21
27
|
if (profileArg) {
|
|
22
28
|
const profile = profileArg.split("=")[1];
|
|
23
29
|
if (!VALID_PROFILES.includes(profile)) {
|
|
24
30
|
throw new Error(`Invalid profile: ${profile}. Valid profiles: ${VALID_PROFILES.join(", ")}`);
|
|
25
31
|
}
|
|
26
|
-
return { profile };
|
|
32
|
+
return { profile, outputDir };
|
|
27
33
|
}
|
|
28
34
|
if (toolsArg) {
|
|
29
35
|
const groups = toolsArg.split("=")[1].split(",");
|
|
@@ -32,9 +38,9 @@ export function parseCliArgs(argv = process.argv.slice(2)) {
|
|
|
32
38
|
throw new Error(`Invalid tool group: ${group}. Valid groups: ${VALID_GROUPS.join(", ")}`);
|
|
33
39
|
}
|
|
34
40
|
}
|
|
35
|
-
return { toolGroups: groups };
|
|
41
|
+
return { toolGroups: groups, outputDir };
|
|
36
42
|
}
|
|
37
43
|
// Default: no profile or groups specified — createServer defaults to browse
|
|
38
|
-
return {};
|
|
44
|
+
return { outputDir };
|
|
39
45
|
}
|
|
40
46
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,MAAM,cAAc,GAAkB
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,MAAM,cAAc,GAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAEjG,MAAM,YAAY,GAAoB;IACpC,YAAY;IACZ,aAAa;IACb,aAAa;IACb,SAAS;IACT,UAAU;IACV,QAAQ;IACR,UAAU;IACV,YAAY;CACb,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAKjE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;IAErE,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAExE,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAgB,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,qBAAqB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;QACpE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,mBAAmB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC3C,CAAC;IAED,4EAA4E;IAC5E,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auditor.d.ts","sourceRoot":"","sources":["../../src/dev/auditor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGlD,MAAM,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"auditor.d.ts","sourceRoot":"","sources":["../../src/dev/auditor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGlD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,aAAa,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,CAAC;AAElF,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,aAAa,EAAE,CAAC;IACpC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAKzE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACvC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACtC,MAAM,CAMR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAMlF;AAmBD,qBAAa,OAAO;IACZ,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;YA2BlF,gBAAgB;YAmBhB,kBAAkB;YA4FlB,gBAAgB;YA0EhB,QAAQ;YAuGR,aAAa;YAqFb,UAAU;CAwEzB"}
|