@peekdev/cli 0.1.0-alpha.25 → 0.1.0-alpha.27

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
@@ -8,6 +8,9 @@
8
8
  [![downloads](https://img.shields.io/npm/dw/@peekdev/cli.svg)](https://www.npmjs.com/package/@peekdev/cli)
9
9
  [![license](https://img.shields.io/npm/l/@peekdev/cli.svg)](https://github.com/Cubenest/rrweb-stack/blob/main/LICENSE)
10
10
  [![CI](https://github.com/Cubenest/rrweb-stack/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/Cubenest/rrweb-stack/actions/workflows/ci.yml)
11
+ [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/Cubenest/rrweb-stack/badge)](https://scorecard.dev/viewer/?uri=github.com/Cubenest/rrweb-stack)
12
+ [![node](https://img.shields.io/node/v/@peekdev/cli.svg)](https://www.npmjs.com/package/@peekdev/cli)
13
+ ![status: alpha](https://img.shields.io/badge/status-alpha-orange.svg)
11
14
 
12
15
  ![peek sessions list and drill-down — three real sessions, console + network errors, markdown-formatted output for AI paste](https://raw.githubusercontent.com/Cubenest/rrweb-stack/main/assets/peek-hero.gif)
13
16
 
@@ -25,11 +28,11 @@ peek init
25
28
 
26
29
  `peek init` is an interactive wizard. It:
27
30
 
28
- 1. Installs the native messaging host for the **Peek** Chrome extension (writes `~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.peekdev.peek.json` on macOS, equivalent on Linux + Windows).
29
- 2. Detects your AI coding-agent client (Claude Code, Cursor, Cline, Windsurf, Continue, Zed) and adds the `peek-mcp` server to its MCP configuration.
31
+ 1. Installs the native messaging host for the **Peek** Chrome extension (writes `~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.cubenest.peek.json` on macOS, equivalent on Linux + Windows).
32
+ 2. Detects your AI coding-agent client (Claude Code, Cursor, Cline, Windsurf, VS Code) and adds the `peek-mcp` server to its MCP configuration.
30
33
  3. Prints a one-line "install the extension" link.
31
34
 
32
- Then you install the [Peek Chrome extension](https://chromewebstore.google.com/) (CWS submission pending), open the side panel on the site you want to capture, and click **Enable on this site**. Your AI agent can now query the recording.
35
+ Then you install the **Peek Chrome extension** (CWS listing pending — Phase 5; for now it loads unpacked, see [`@peekdev/extension`](https://github.com/Cubenest/rrweb-stack/tree/main/packages/peek-extension)), open the side panel on the site you want to capture, and click **Enable on this site**. Your AI agent can now query the recording.
33
36
 
34
37
  ## What this is NOT
35
38
 
@@ -61,7 +64,7 @@ After `peek init`, the `peek-mcp` server is available to your AI client as an MC
61
64
  - "find network requests with status >= 400 from the last 5 minutes of recording on `example.com`"
62
65
  - "generate a Playwright reproduction script from session `abc123`"
63
66
 
64
- The MCP server exposes 10 tools — listing, session summaries, console/network drill-down, user-action history, DOM reconstruction and history, Playwright-repro generation, and (with explicit per-action authorization) actions like clicks/inputs/navigation. See [`@peekdev/mcp`](https://github.com/Cubenest/rrweb-stack/tree/main/packages/peek-mcp) for the tool reference.
67
+ The MCP server exposes 14 tools — listing, session summaries, console/network drill-down, user-action history, DOM reconstruction and history, Playwright-repro generation, non-destructive element highlighting, and (with explicit per-origin permission) actions like clicks/inputs/navigation plus a pause-and-hand-back-to-the-user input handoff. See [`@peekdev/mcp`](https://github.com/Cubenest/rrweb-stack/tree/main/packages/peek-mcp) for the tool reference.
65
68
 
66
69
  ## Privacy
67
70
 
@@ -77,14 +80,26 @@ Full data-handling policy: [`docs/peek/PRIVACY_POLICY.md`](https://github.com/Cu
77
80
 
78
81
  | Client | Detection |
79
82
  |---|---|
80
- | Claude Code (CLI) | `~/.claude/` |
81
- | Cursor | `~/Library/Application Support/Cursor/User/` (macOS) |
82
- | Cline (VS Code) | VS Code workspace settings |
83
- | Continue (VS Code) | `~/.continue/` |
84
- | Windsurf | `~/.codeium/windsurf/` |
85
- | Zed | `~/.config/zed/` |
83
+ | Claude Code (CLI) | `~/.claude.json` |
84
+ | Cursor | `~/.cursor/mcp.json` |
85
+ | VS Code | `.vscode/mcp.json` (project-scoped) |
86
+ | Windsurf | `~/.codeium/windsurf/mcp_config.json` |
87
+ | Cline (VS Code) | manual config (lives in VS Code's per-OS globalStorage) |
86
88
 
87
- If your client isn't auto-detected, `peek init` prints the JSON config you can paste manually. The MCP server speaks the standard stdio protocol (spec 2025-11-25 + 2025-03-26 back-compat).
89
+ > **Windows path note.** The `~` in these paths is your home directory (e.g. `C:\Users\<username>`). The CLI resolves it automatically via Node's `os.homedir()` + `path.join`, so the same config locations work on Windows, macOS, and Linux.
90
+
91
+ If your client isn't auto-detected (for example Continue or Zed, which `peek init` does not detect), paste the manual MCP JSON config shown below into that client's MCP settings. `peek init` also prints this block when it can't find a known client. The MCP server speaks the standard stdio protocol (spec 2025-11-25 + 2025-03-26 back-compat).
92
+
93
+ ```json
94
+ {
95
+ "mcpServers": {
96
+ "peek": {
97
+ "command": "npx",
98
+ "args": ["-y", "@peekdev/mcp@latest"]
99
+ }
100
+ }
101
+ }
102
+ ```
88
103
 
89
104
  ### Claude Code skill
90
105
 
@@ -107,9 +122,9 @@ The skill is idempotent on re-run (no-op when the on-disk content matches the bu
107
122
  }
108
123
  ```
109
124
 
110
- Commit it or add it to `.gitignore` — Cursor reads either. Cursor's docs document the global file as "tools available everywhere" and the project file as "project-specific tools" (see [docs.cursor.com/context/mcp](https://cursor.com/docs/context/mcp) for current merge semantics).
125
+ Commit it or add it to `.gitignore` — Cursor reads either. Cursor's docs document the global file as "tools available everywhere" and the project file as "project-specific tools" (see [cursor.com/docs/context/mcp](https://cursor.com/docs/context/mcp) for current merge semantics).
111
126
 
112
- This is the same block `peek init` writes to the global file, so the two configs are interchangeable. You still need the [Peek Chrome extension](https://chromewebstore.google.com/) installed and the native messaging host registered — run `peek init --skip-clients` if you want the host installed without touching any MCP config.
127
+ This is the same block `peek init` writes to the global file, so the two configs are interchangeable. You still need the **Peek Chrome extension** installed (CWS listing pending — Phase 5; loads unpacked for now, see [`@peekdev/extension`](https://github.com/Cubenest/rrweb-stack/tree/main/packages/peek-extension)) and the native messaging host registered — run `peek init --skip-clients` if you want the host installed without touching any MCP config.
113
128
 
114
129
  ## Versioning & compatibility
115
130
 
@@ -117,8 +132,10 @@ Semantic Versioning. Currently `0.1.0-alpha.x` — pre-release; the CLI surface
117
132
 
118
133
  `@peekdev/cli` depends on `@peekdev/mcp` as a workspace peer. Both are versioned and published together via Changesets + OIDC Trusted Publishing.
119
134
 
135
+ Full release history: [CHANGELOG.md](https://github.com/Cubenest/rrweb-stack/blob/main/packages/peek-cli/CHANGELOG.md).
136
+
120
137
  ## License
121
138
 
122
- Apache 2.0. The bundled rrweb engine remains MIT-licensed; see `NOTICE`.
139
+ Apache 2.0. The bundled rrweb engine remains MIT-licensed; see [`NOTICE`](https://github.com/Cubenest/rrweb-stack/blob/main/packages/peek-cli/NOTICE).
123
140
 
124
141
  Contributions are accepted under the [Developer Certificate of Origin (DCO)](https://developercertificate.org/) — sign your commits with `git commit -s`. See [CONTRIBUTING.md](https://github.com/Cubenest/rrweb-stack/blob/main/CONTRIBUTING.md) + [SECURITY.md](https://github.com/Cubenest/rrweb-stack/blob/main/SECURITY.md).
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAsWA,+DAA+D;AAC/D,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAsC7D"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAwWA,+DAA+D;AAC/D,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAsC7D"}
@@ -216,7 +216,9 @@ async function registerNativeHost(platform, homeDir) {
216
216
  // P-13 (2026-05-28 QA walk): on re-runs, read the existing manifest's
217
217
  // `allowed_origins` and offer to reuse any previously-captured dev ID
218
218
  // instead of re-prompting from scratch. Confirms B.4 idempotency.
219
- const allTargets = resolveInstallTargets(platform, homeDir);
219
+ // Inject the real %LOCALAPPDATA% (Windows) so a redirected AppData\Local
220
+ // (OneDrive KFM / enterprise folder redirection) resolves correctly.
221
+ const allTargets = resolveInstallTargets(platform, homeDir, process.env.LOCALAPPDATA);
220
222
  const existingDevId = extractDevId(readExistingManifest(allTargets));
221
223
  let captured;
222
224
  if (existingDevId) {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -9,11 +9,11 @@
9
9
  // Arg parsing uses the built-in node:util parseArgs at each command boundary
10
10
  // (no CLI framework dependency); this top-level dispatcher just routes on the
11
11
  // first positional so each subcommand owns its own option schema.
12
- import { realpathSync } from 'node:fs';
13
12
  import { runAudit } from './commands/audit.js';
14
13
  import { runInit } from './commands/init.js';
15
14
  import { runSessions } from './commands/sessions.js';
16
15
  import { runStatus } from './commands/status.js';
16
+ import { isDirectInvocation } from './lib/entrypoint.js';
17
17
  import { CLI_VERSION } from './version.js';
18
18
  const HELP = `peek ${CLI_VERSION} — browser-session companion CLI
19
19
 
@@ -67,19 +67,11 @@ async function main() {
67
67
  process.exitCode = code;
68
68
  }
69
69
  // Run only when invoked directly as the `peek` bin (npx / shell), not when this
70
- // module is imported (tests, or another package consuming `run`). Guarded the
71
- // same way as @peekdev/mcp's entry so an ESM `import` has no side effects.
72
- const invokedDirectly = process.argv[1] !== undefined &&
73
- (import.meta.url === `file://${process.argv[1]}` ||
74
- (() => {
75
- try {
76
- return import.meta.url === `file://${realpathSync(process.argv[1])}`;
77
- }
78
- catch {
79
- return false;
80
- }
81
- })());
82
- if (invokedDirectly) {
70
+ // module is imported (tests, or another package consuming `run`), so an ESM
71
+ // `import` has no side effects. Uses pathToFileURL (see lib/entrypoint.ts) so
72
+ // the guard matches on Windows backslash paths — a plain `file://` + argv
73
+ // concat was always false there, making every `peek` command a silent no-op.
74
+ if (isDirectInvocation(import.meta.url, process.argv[1])) {
83
75
  main().catch((err) => {
84
76
  process.stderr.write(`peek: fatal — ${err instanceof Error ? (err.stack ?? err.message) : String(err)}\n`);
85
77
  process.exitCode = 1;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,8EAA8E;AAC9E,oEAAoE;AACpE,gBAAgB;AAChB,4CAA4C;AAC5C,cAAc;AACd,mBAAmB;AACnB,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,kEAAkE;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,IAAI,GAAG,QAAQ,WAAW;;;;;;;;;;;;;;;;;CAiB/B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAuB;IAC/C,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEhC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,SAAS,EAAE,CAAC;QACrB,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,OAAO;YACV,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,IAAI,CAAC,CAAC;YACzC,OAAO,CAAC,CAAC;QACX,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,wEAAwE;YACxE,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,OAAO,OAAO,CAAC,CAAC;YAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC1B,CAAC;AAED,gFAAgF;AAChF,8EAA8E;AAC9E,2EAA2E;AAC3E,MAAM,eAAe,GACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;IAC7B,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QAC9C,CAAC,GAAG,EAAE;YACJ,IAAI,CAAC;gBACH,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,EAAE,CAAC,CAAC;AACV,IAAI,eAAe,EAAE,CAAC;IACpB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CACrF,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,8EAA8E;AAC9E,oEAAoE;AACpE,gBAAgB;AAChB,4CAA4C;AAC5C,cAAc;AACd,mBAAmB;AACnB,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,kEAAkE;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,IAAI,GAAG,QAAQ,WAAW;;;;;;;;;;;;;;;;;CAiB/B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAuB;IAC/C,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEhC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,SAAS,EAAE,CAAC;QACrB,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,OAAO;YACV,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,IAAI,CAAC,CAAC;YACzC,OAAO,CAAC,CAAC;QACX,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,wEAAwE;YACxE,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,OAAO,OAAO,CAAC,CAAC;YAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC1B,CAAC;AAED,gFAAgF;AAChF,4EAA4E;AAC5E,8EAA8E;AAC9E,0EAA0E;AAC1E,6EAA6E;AAC7E,IAAI,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CACrF,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * True when `metaUrl` (an `import.meta.url`) refers to the same file as
3
+ * `argv1` (`process.argv[1]`) — i.e. this module was run directly. Compares via
4
+ * {@link pathToFileURL} so backslash (Windows) and space/unicode paths resolve
5
+ * to a matching `file:` url. Tries the raw argv path first, then its
6
+ * realpath-resolved form (npm bin shims / symlinks). `realpath` is injectable
7
+ * for tests; a realpath failure resolves to `false` rather than throwing.
8
+ */
9
+ export declare function isDirectInvocation(metaUrl: string, argv1: string | undefined, realpath?: (p: string) => string): boolean;
10
+ //# sourceMappingURL=entrypoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entrypoint.d.ts","sourceRoot":"","sources":["../../src/lib/entrypoint.ts"],"names":[],"mappings":"AAkBA;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAqB,GAC7C,OAAO,CAQT"}
@@ -0,0 +1,37 @@
1
+ // Decide whether this module is the process entry point (`node thisfile`, or an
2
+ // npm-generated bin shim) versus merely imported (tests, or another package
3
+ // consuming an export). Bin entries guard their `main()` side effect on this so
4
+ // an ESM `import` has no side effects.
5
+ //
6
+ // WHY pathToFileURL (P-Windows): the original guard compared `import.meta.url`
7
+ // against the string-concatenated `` `file://${process.argv[1]}` ``. On Windows
8
+ // `process.argv[1]` is a backslash path (`C:\…\index.js`), so that concat
9
+ // produced the INVALID url `file://C:\…\index.js`, which never equals
10
+ // `import.meta.url`'s RFC-8089 form (`file:///C:/…/index.js`). The guard was
11
+ // always false → `peek init` (and every command) was a silent no-op on Windows.
12
+ // The same concat also failed for paths with spaces/unicode on POSIX because it
13
+ // skipped percent-encoding. `pathToFileURL` produces the correct, encoded
14
+ // `file:` url on every platform, so the comparison matches.
15
+ import { realpathSync } from 'node:fs';
16
+ import { pathToFileURL } from 'node:url';
17
+ /**
18
+ * True when `metaUrl` (an `import.meta.url`) refers to the same file as
19
+ * `argv1` (`process.argv[1]`) — i.e. this module was run directly. Compares via
20
+ * {@link pathToFileURL} so backslash (Windows) and space/unicode paths resolve
21
+ * to a matching `file:` url. Tries the raw argv path first, then its
22
+ * realpath-resolved form (npm bin shims / symlinks). `realpath` is injectable
23
+ * for tests; a realpath failure resolves to `false` rather than throwing.
24
+ */
25
+ export function isDirectInvocation(metaUrl, argv1, realpath = realpathSync) {
26
+ if (argv1 === undefined)
27
+ return false;
28
+ if (metaUrl === pathToFileURL(argv1).href)
29
+ return true;
30
+ try {
31
+ return metaUrl === pathToFileURL(realpath(argv1)).href;
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ //# sourceMappingURL=entrypoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entrypoint.js","sourceRoot":"","sources":["../../src/lib/entrypoint.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,4EAA4E;AAC5E,gFAAgF;AAChF,uCAAuC;AACvC,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,0EAA0E;AAC1E,sEAAsE;AACtE,6EAA6E;AAC7E,gFAAgF;AAChF,gFAAgF;AAChF,0EAA0E;AAC1E,4DAA4D;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,KAAyB,EACzB,WAAkC,YAAY;IAE9C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,OAAO,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,CAAC;QACH,OAAO,OAAO,KAAK,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,3 +1,14 @@
1
+ /** Injectable seams (defaults are the real fs + a sync sleep). For tests. */
2
+ export interface AtomicWriteDeps {
3
+ /** Rename implementation (default `fs.renameSync`). */
4
+ readonly rename?: (from: string, to: string) => void;
5
+ /** Synchronous backoff between retries (default {@link syncSleep}). */
6
+ readonly sleep?: (ms: number) => void;
7
+ /** Platform (default `process.platform`); retries happen ONLY on `win32`. */
8
+ readonly platform?: NodeJS.Platform;
9
+ /** Max rename attempts before giving up on a transient Windows lock (default 4). */
10
+ readonly maxRetries?: number;
11
+ }
1
12
  /**
2
13
  * Write `content` to `path` atomically: write a temp file in the SAME directory
3
14
  * then `renameSync` over the target (rename is atomic on a single filesystem).
@@ -5,6 +16,11 @@
5
16
  * crash / full disk / OOM could leave as an empty or partial file — and
6
17
  * `~/.claude.json` is read on every Claude Code startup. Parent dirs are
7
18
  * created; on failure the temp file is best-effort removed.
19
+ *
20
+ * On Windows the final rename can transiently fail with EBUSY/EPERM/EACCES when
21
+ * the target or temp is briefly locked (editor open, antivirus scan); those are
22
+ * retried with a short backoff before giving up. On POSIX a single failed
23
+ * rename throws immediately (no spurious lock errors there).
8
24
  */
9
- export declare function atomicWriteFileSync(path: string, content: string): void;
25
+ export declare function atomicWriteFileSync(path: string, content: string, deps?: AtomicWriteDeps): void;
10
26
  //# sourceMappingURL=fs-atomic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs-atomic.d.ts","sourceRoot":"","sources":["../../src/lib/fs-atomic.ts"],"names":[],"mappings":"AAQA;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAcvE"}
1
+ {"version":3,"file":"fs-atomic.d.ts","sourceRoot":"","sources":["../../src/lib/fs-atomic.ts"],"names":[],"mappings":"AAuBA,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IACpC,oFAAoF;IACpF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,eAAoB,GACzB,IAAI,CAmBN"}
@@ -4,6 +4,19 @@
4
4
  import { randomBytes } from 'node:crypto';
5
5
  import { mkdirSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
6
6
  import { dirname } from 'node:path';
7
+ /**
8
+ * Error codes that, on Windows, mean the rename target (or the freshly-written
9
+ * temp) is TRANSIENTLY locked — an editor with the config open, or antivirus
10
+ * scanning the new temp file — so `MoveFileEx` fails but a retry moments later
11
+ * usually succeeds. POSIX `rename(2)` replaces atomically even while the target
12
+ * is open and never hits these, so we only retry on win32. ENOSPC/ENOENT and
13
+ * friends are NOT in here — those aren't locks and must fail fast.
14
+ */
15
+ const WINDOWS_TRANSIENT_RENAME_CODES = new Set(['EBUSY', 'EPERM', 'EACCES']);
16
+ /** Synchronous sleep (atomicWriteFileSync is sync, so we can't await). */
17
+ function syncSleep(ms) {
18
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
19
+ }
7
20
  /**
8
21
  * Write `content` to `path` atomically: write a temp file in the SAME directory
9
22
  * then `renameSync` over the target (rename is atomic on a single filesystem).
@@ -11,13 +24,22 @@ import { dirname } from 'node:path';
11
24
  * crash / full disk / OOM could leave as an empty or partial file — and
12
25
  * `~/.claude.json` is read on every Claude Code startup. Parent dirs are
13
26
  * created; on failure the temp file is best-effort removed.
27
+ *
28
+ * On Windows the final rename can transiently fail with EBUSY/EPERM/EACCES when
29
+ * the target or temp is briefly locked (editor open, antivirus scan); those are
30
+ * retried with a short backoff before giving up. On POSIX a single failed
31
+ * rename throws immediately (no spurious lock errors there).
14
32
  */
15
- export function atomicWriteFileSync(path, content) {
33
+ export function atomicWriteFileSync(path, content, deps = {}) {
34
+ const rename = deps.rename ?? renameSync;
35
+ const sleep = deps.sleep ?? syncSleep;
36
+ const platform = deps.platform ?? process.platform;
37
+ const maxRetries = deps.maxRetries ?? 4;
16
38
  mkdirSync(dirname(path), { recursive: true });
17
39
  const tmp = `${path}.peek-tmp-${randomBytes(4).toString('hex')}`;
18
40
  try {
19
41
  writeFileSync(tmp, content, 'utf8');
20
- renameSync(tmp, path);
42
+ renameWithWindowsRetry(rename, tmp, path, platform, maxRetries, sleep);
21
43
  }
22
44
  catch (err) {
23
45
  try {
@@ -29,4 +51,25 @@ export function atomicWriteFileSync(path, content) {
29
51
  throw err;
30
52
  }
31
53
  }
54
+ /** Rename, retrying transient Windows lock errors with backoff. POSIX: one shot. */
55
+ function renameWithWindowsRetry(rename, from, to, platform, maxRetries, sleep) {
56
+ for (let attempt = 1;; attempt += 1) {
57
+ try {
58
+ rename(from, to);
59
+ return;
60
+ }
61
+ catch (err) {
62
+ const code = err?.code;
63
+ const retryable = platform === 'win32' &&
64
+ attempt < maxRetries &&
65
+ code !== undefined &&
66
+ WINDOWS_TRANSIENT_RENAME_CODES.has(code);
67
+ if (!retryable)
68
+ throw err;
69
+ // Brief, growing backoff (25ms → 50ms → 100ms…) so the lock holder (AV,
70
+ // editor) has a moment to release before the next MoveFileEx attempt.
71
+ sleep(25 * 2 ** (attempt - 1));
72
+ }
73
+ }
74
+ }
32
75
  //# sourceMappingURL=fs-atomic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs-atomic.js","sourceRoot":"","sources":["../../src/lib/fs-atomic.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,yEAAyE;AACzE,8CAA8C;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,OAAe;IAC/D,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,GAAG,IAAI,aAAa,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IACjE,IAAI,CAAC;QACH,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC;YACH,UAAU,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;QACvE,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"fs-atomic.js","sourceRoot":"","sources":["../../src/lib/fs-atomic.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,yEAAyE;AACzE,8CAA8C;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE7E,0EAA0E;AAC1E,SAAS,SAAS,CAAC,EAAU;IAC3B,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC;AAcD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,OAAe,EACf,OAAwB,EAAE;IAE1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;IAExC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,GAAG,IAAI,aAAa,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IACjE,IAAI,CAAC;QACH,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpC,sBAAsB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC;YACH,UAAU,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;QACvE,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,SAAS,sBAAsB,CAC7B,MAA0C,EAC1C,IAAY,EACZ,EAAU,EACV,QAAyB,EACzB,UAAkB,EAClB,KAA2B;IAE3B,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAI,GAAyC,EAAE,IAAI,CAAC;YAC9D,MAAM,SAAS,GACb,QAAQ,KAAK,OAAO;gBACpB,OAAO,GAAG,UAAU;gBACpB,IAAI,KAAK,SAAS;gBAClB,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,SAAS;gBAAE,MAAM,GAAG,CAAC;YAC1B,wEAAwE;YACxE,sEAAsE;YACtE,KAAK,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"native-host-wrapper.d.ts","sourceRoot":"","sources":["../../src/lib/native-host-wrapper.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAGpF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,iBAAiB,GAC1B,MAAM,CAKR"}
1
+ {"version":3,"file":"native-host-wrapper.d.ts","sourceRoot":"","sources":["../../src/lib/native-host-wrapper.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAMpF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,iBAAiB,GAC1B,MAAM,CAKR"}
@@ -12,7 +12,7 @@
12
12
  //
13
13
  // Pure helpers — `writeNativeHostWrapper` (in commands/init.ts) does the
14
14
  // filesystem write. Tests pin the path layout + content shape per platform.
15
- import { join } from 'node:path';
15
+ import { posix, win32 } from 'node:path';
16
16
  /**
17
17
  * Where the generated wrapper lives. On POSIX it ends in `.sh`; on Windows
18
18
  * `.cmd` so the shell that Chrome's CreateProcess invocation finds knows what
@@ -21,7 +21,10 @@ import { join } from 'node:path';
21
21
  */
22
22
  export function wrapperPath(peekHomeDir, platform) {
23
23
  const filename = platform === 'win32' ? 'peek-mcp-host.cmd' : 'peek-mcp-host.sh';
24
- return join(peekHomeDir, filename);
24
+ // Join with the TARGET platform's separator (win32 for .cmd, posix for .sh)
25
+ // so the path reads correctly regardless of the host running the unit tests
26
+ // — mirrors resolveInstallTargets. In production platform === the host.
27
+ return (platform === 'win32' ? win32 : posix).join(peekHomeDir, filename);
25
28
  }
26
29
  /**
27
30
  * Body of the wrapper script. Pure — accepts the node binary and the host
@@ -1 +1 @@
1
- {"version":3,"file":"native-host-wrapper.js","sourceRoot":"","sources":["../../src/lib/native-host-wrapper.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,+EAA+E;AAC/E,wEAAwE;AACxE,8EAA8E;AAC9E,sEAAsE;AACtE,yEAAyE;AACzE,+EAA+E;AAC/E,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,iEAAiE;AACjE,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAE5E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,QAA2B;IAC1E,MAAM,QAAQ,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACjF,OAAO,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAgB,EAChB,UAAkB,EAClB,QAA2B;IAE3B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,iBAAiB,QAAQ,MAAM,UAAU,UAAU,CAAC;IAC7D,CAAC;IACD,OAAO,oBAAoB,QAAQ,MAAM,UAAU,UAAU,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"native-host-wrapper.js","sourceRoot":"","sources":["../../src/lib/native-host-wrapper.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,+EAA+E;AAC/E,wEAAwE;AACxE,8EAA8E;AAC9E,sEAAsE;AACtE,yEAAyE;AACzE,+EAA+E;AAC/E,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,iEAAiE;AACjE,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAE5E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAGzC;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,QAA2B;IAC1E,MAAM,QAAQ,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACjF,4EAA4E;IAC5E,4EAA4E;IAC5E,wEAAwE;IACxE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAgB,EAChB,UAAkB,EAClB,QAA2B;IAE3B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,iBAAiB,QAAQ,MAAM,UAAU,UAAU,CAAC;IAC7D,CAAC;IACD,OAAO,oBAAoB,QAAQ,MAAM,UAAU,UAAU,CAAC;AAChE,CAAC"}
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: peek
3
- description: Use when the user mentions a recent browser session, an error they just reproduced, "what was the user doing before X", DOM state at some past moment, or wants to turn a manual repro into a Playwright test. Peek exposes 10 MCP tools backed by a local SQLite store of rrweb-captured browser sessions.
3
+ description: Use when the user mentions a recent browser session, an error they just reproduced, "what was the user doing before X", DOM state at some past moment, or wants to turn a manual repro into a Playwright test. Peek exposes 14 MCP tools backed by a local SQLite store of rrweb-captured browser sessions.
4
4
  ---
5
5
 
6
6
  # peek — local browser-session inspection
7
7
 
8
8
  Peek is an OSS browser companion for AI coding agents. A Chrome MV3
9
9
  extension records masked rrweb sessions to a local SQLite store
10
- (`~/.peek/sessions.db`); a stdio MCP server exposes 10 tools that let you
10
+ (`~/.peek/sessions.db`); a stdio MCP server exposes 14 tools that let you
11
11
  inspect those sessions and (with consent) drive the live browser.
12
12
 
13
13
  Peek runs entirely on the user's machine. No telemetry, no cloud, no
@@ -38,9 +38,9 @@ Don't reach for peek when:
38
38
  not a live debugger
39
39
  - The question is about static code, not runtime behavior
40
40
 
41
- ## The 10 tools
41
+ ## The 14 tools
42
42
 
43
- **Read tools (8) — work at permission Level 2+ for the origin:**
43
+ **Read tools (8) — usable at permission Level 1 (Read-only) and above:**
44
44
 
45
45
  | Tool | When |
46
46
  |---|---|
@@ -53,12 +53,26 @@ Don't reach for peek when:
53
53
  | `query_dom_history` | Given a CSS selector + sessionId, returns every snapshot where that element changed. Good for "when did this element appear/disappear/change text". |
54
54
  | `generate_playwright_repro` | Turns a session (or a slice of one) into a runnable Playwright test stub. Selectors are best-effort from rrweb metadata; surface to the user for review before assuming they'll work. |
55
55
 
56
- **Write tools (2) — escalating consent required:**
56
+ **Act tools (2) — Level 3+; every call is audit-logged to `~/.peek/audit.log`:**
57
57
 
58
58
  | Tool | When |
59
59
  |---|---|
60
- | `request_authorization` | Ask the user to authorize a specific action against a specific origin. Always call this BEFORE `execute_action` if the action is destructive (form submission, navigation away from the current page, anything that mutates state). |
61
- | `execute_action` | Performs a click / type / navigate in the user's live browser. Gated by the per-origin permission level Level 3 covers safe reads, Level 4 covers actions with destructive-action consent, Level 5 is full automation. |
60
+ | `request_authorization` | Ask the user to authorize a specific action against a specific origin via the side-panel banner. On Allow it returns a one-shot `confirmToken` to pass to `execute_action`. Call this BEFORE `execute_action` at Level 3, or to pre-authorize. |
61
+ | `execute_action` | Performs a click / type / navigate in the user's live browser. Gated by the per-origin level: **Level 3** prompts a confirm banner per action (unless a `confirmToken` is passed); **Level 4** auto-allows non-destructive actions; below Level 3 it's denied. The destructive-action blocklist (delete/send/pay/…) always prompts, even at Level 4. |
62
+
63
+ **Suggest tools (2) — Level 2+; non-mutating:**
64
+
65
+ | Tool | When |
66
+ |---|---|
67
+ | `suggest_element` | Draw a non-destructive highlight overlay on a CSS selector (optional label) to point something out. Never clicks, types, or navigates. |
68
+ | `clear_highlight` | Remove the highlight overlay drawn by `suggest_element`. |
69
+
70
+ **Control tools (2) — Level 4 with the control shield up:**
71
+
72
+ | Tool | When |
73
+ |---|---|
74
+ | `set_intent` | Set the agent's status-banner text on the control shield (e.g. "Applying to Senior Frontend · step 2/4") so the user can follow what you're doing. |
75
+ | `request_user_input` | Pause the agent and hand the keyboard back to the user for one editable field (or a free-text prompt) — a CAPTCHA, an OTP, a final review — then resume. |
62
76
 
63
77
  ## Workflow
64
78
 
@@ -144,19 +158,23 @@ User: "Click the Save button on the page I have open."
144
158
 
145
159
  ## Permission model
146
160
 
147
- Peek uses a five-level per-origin model. The state lives in
148
- `~/.peek/permissions.json`; the user manages it via the extension's
149
- side panel and `peek audit` (CLI).
161
+ Peek uses a five-level per-origin model (ADR-0010). The level lives in the
162
+ extension (`chrome.storage.sync`, key `peek:permissionLevels`); the user
163
+ manages it via the side panel's trust dial. A freshly-enabled origin defaults
164
+ to **Level 1 (Read-only)**.
165
+
166
+ - **Level 0 — Off** — tool surface disabled for the origin (recording suppressed)
167
+ - **Level 1 — Read-only** (default) — all 8 read tools; no action execution
168
+ - **Level 2 — Suggest-only** — read + non-mutating highlight overlay
169
+ (`suggest_element` / `clear_highlight`); no DOM mutation
170
+ - **Level 3 — Act-with-confirm** — read + `execute_action` (click/type/navigate),
171
+ each prompting Allow once / Always for this site / Deny
172
+ - **Level 4 — YOLO this session** — read + non-destructive actions auto-allowed
173
+ with no prompt; auto-expires on tab close or after 60 min; also unlocks
174
+ `set_intent` / `request_user_input` while the control shield is up
150
175
 
151
- - **Level 0** no access (default for new origins)
152
- - **Level 1** — list-only (sessionId + origin + timestamps; no event content)
153
- - **Level 2** — read full session content (all 8 read tools usable)
154
- - **Level 3** — read + safe actions (clicks, typing in inputs; no
155
- navigation away, no form submission)
156
- - **Level 4** — read + actions including destructive (with per-action
157
- `request_authorization` consent)
158
- - **Level 5** — automation (Level 4 actions without per-action consent;
159
- rare, opt-in only)
176
+ There is no Level 5. The destructive-action blocklist (delete/send/pay/…) is a
177
+ cross-level override that **always** prompts including at Level 4 not a level.
160
178
 
161
179
  If a tool returns `{ error: 'permission_denied', origin, currentLevel,
162
180
  requiredLevel }`, tell the user how to escalate (via the side panel)
@@ -166,7 +184,7 @@ and stop. Don't retry, don't suggest workarounds.
166
184
 
167
185
  - Never invent sessions. If `list_recent_sessions` returns empty, say so
168
186
  and suggest the user record a session via the extension.
169
- - Never invent tool names. The 10 above are the entire surface.
187
+ - Never invent tool names. The 14 above are the entire surface.
170
188
  - Selector results from `generate_playwright_repro` are derived from
171
189
  rrweb event metadata. Surface them for review; don't claim a generated
172
190
  test is production-ready without the user confirming.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peekdev/cli",
3
- "version": "0.1.0-alpha.25",
3
+ "version": "0.1.0-alpha.27",
4
4
  "description": "peek command-line tool. A thin read-mostly client of the native host's ~/.peek/sessions.db: status, sessions list/show/export/delete, the `peek init` MCP-client wizard, and `peek audit log`.",
5
5
  "keywords": [
6
6
  "peek",
@@ -36,7 +36,7 @@
36
36
  ],
37
37
  "dependencies": {
38
38
  "better-sqlite3": "^12.10.0",
39
- "@peekdev/mcp": "0.1.0-alpha.19"
39
+ "@peekdev/mcp": "0.1.0-alpha.21"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/better-sqlite3": "^7.6.13",