@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 +31 -14
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +6 -14
- package/dist/index.js.map +1 -1
- package/dist/lib/entrypoint.d.ts +10 -0
- package/dist/lib/entrypoint.d.ts.map +1 -0
- package/dist/lib/entrypoint.js +37 -0
- package/dist/lib/entrypoint.js.map +1 -0
- package/dist/lib/fs-atomic.d.ts +17 -1
- package/dist/lib/fs-atomic.d.ts.map +1 -1
- package/dist/lib/fs-atomic.js +45 -2
- package/dist/lib/fs-atomic.js.map +1 -1
- package/dist/lib/native-host-wrapper.d.ts.map +1 -1
- package/dist/lib/native-host-wrapper.js +5 -2
- package/dist/lib/native-host-wrapper.js.map +1 -1
- package/dist/skills/peek-skill.md +38 -20
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
[](https://www.npmjs.com/package/@peekdev/cli)
|
|
9
9
|
[](https://github.com/Cubenest/rrweb-stack/blob/main/LICENSE)
|
|
10
10
|
[](https://github.com/Cubenest/rrweb-stack/actions/workflows/ci.yml)
|
|
11
|
+
[](https://scorecard.dev/viewer/?uri=github.com/Cubenest/rrweb-stack)
|
|
12
|
+
[](https://www.npmjs.com/package/@peekdev/cli)
|
|
13
|
+

|
|
11
14
|
|
|
12
15
|

|
|
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.
|
|
29
|
-
2. Detects your AI coding-agent client (Claude Code, Cursor, Cline, Windsurf,
|
|
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
|
|
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
|
|
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 |
|
|
82
|
-
|
|
|
83
|
-
|
|
|
84
|
-
|
|
|
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
|
-
|
|
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 [
|
|
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
|
|
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":"
|
|
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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -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
|
-
|
|
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":"AAAA,sEAAsE;AACtE,+EAA+E;AAC/E,6EAA6E;AAC7E,wEAAwE;AACxE,0EAA0E;AAC1E,+EAA+E;AAC/E,2EAA2E;AAE3E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAGL,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAEL,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,SAAS,GAAiC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAE7E,sFAAsF;AACtF,MAAM,gBAAiB,SAAQ,KAAK;IAClC;QACE,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,oBAAoB,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,gBAAgB,EAAE,CAAC;IAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAOD,2EAA2E;AAC3E,SAAS,iBAAiB,CAAC,MAAsB;IAC/C,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,gBAAgB;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACvE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9F,CAAC;IACD,IAAI,CAAC;QACH,mBAAmB,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9F,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAAe,EAAE,GAAW;IAC1D,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAEjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,OAAO,CAAC,MAAM,GAAG,CAAC;QAChB,CAAC,CAAC,iCAAiC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAC7E,CAAC,CAAC,qEAAqE,CAC1E,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,yEAAyE,EACzE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnB,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,oEAAoE;QACpE,gEAAgE;QAChE,OAAO,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,UAAU;QAClC,QAAQ,EAAE,CAAC,CAAC,UAAU;QACtB,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU;KAC7D,CAAC,CAAC,CACJ,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACpE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;YACpB,IAAI,CAAC;gBACH,OAAO,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,UAAU,IAAI,CAC7E,CAAC;QACJ,CAAC;aAAM,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACrB,mEAAmE;YACnE,+CAA+C;YAC/C,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC;iBAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;iBACxB,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;gBACE,OAAO,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,UAAU,2CAA2C;gBACpF,mCAAmC;gBACnC,GAAG,OAAO,IAAI;aACf,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,UAAU,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,kBAAkB,CAAC,OAAe,EAAE,aAA+B;IAC1E,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC;IACvE,MAAM,kBAAkB,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,YAAY,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACzC,wEAAwE;QACxE,kDAAkD;QAClD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE;QACnC,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC;QACxC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC/C,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;KAC/C,CAAC,CAAC;IAEH,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YACxE,MAAM;QACR,KAAK,SAAS;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YAC5E,MAAM;QACR,KAAK,WAAW;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YAClF,MAAM;QACR,KAAK,gBAAgB;YACnB,uEAAuE;YACvE,yEAAyE;YACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2CAA2C,MAAM,CAAC,MAAM,wCAAwC,CACjG,CAAC;YACF,MAAM;QACR,KAAK,OAAO;YACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;YACpF,MAAM;IACV,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,oBAAoB,CAAC,OAAiC;IAC7D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAChC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;QACvE,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,QAA2B,EAAE,OAAe;IAC5E,MAAM,OAAO,GAAG,MAAM,OAAO,CAC3B,yGAAyG,EACzG,IAAI,CACL,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uHAAuH,CACxH,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,YAAiD,CAAC;IACtD,IAAI,CAAC;QACH,YAAY,GAAG,gBAAgB,EAAE,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,yCAAyC,CAC3H,CAAC;QACF,OAAO;IACT,CAAC;IAED,oEAAoE;IACpE,uEAAuE;IACvE,4EAA4E;IAC5E,yEAAyE;IACzE,qDAAqD;IACrD,wEAAwE;IACxE,EAAE;IACF,yEAAyE;IACzE,wEAAwE;IACxE,0EAA0E;IAC1E,yEAAyE;IACzE,yEAAyE;IACzE,sDAAsD;IACtD,EAAE;IACF,sEAAsE;IACtE,sEAAsE;IACtE,kEAAkE;IAClE,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,YAAY,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;IACrE,IAAI,QAA4B,CAAC;IACjC,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,MAAM,OAAO,CACzB,0CAA0C,aAAa,kBAAkB,EACzE,IAAI,CACL,CAAC;QACF,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,GAAG,aAAa,CAAC;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;YACE,EAAE;YACF,yFAAyF;YACzF,+EAA+E;YAC/E,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,QAAQ,GAAG,MAAM,UAAU,CAAC,gBAAgB,EAAE;YAC5C,QAAQ,EAAE,yBAAyB;YACnC,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,0FAA0F,CAC3F,CAAC;QACJ,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,YAAY,GAAG,EAAE,GAAG,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,qCAAqC,EACrC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrB,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC,CAAC,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,WAAW;KACtC,CAAC,CAAC,CACJ,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IAED,yEAAyE;IACzE,uEAAuE;IACvE,0EAA0E;IAC1E,kEAAkE;IAClE,yEAAyE;IACzE,uEAAuE;IACvE,qEAAqE;IACrE,0EAA0E;IAC1E,6DAA6D;IAC7D,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5C,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,QAAQ,CAAC,EAAE;QACnF,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,OAAO,IAAI,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5E,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC;QAC7D,IAAI,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;;YAC1E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;QACE,EAAE;QACF,aAAa;QACb,kFAAkF;QAClF,sEAAsE;QACtE,gEAAgE;QAChE,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAc;IAC1C,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC3B,IAAI,EAAE,IAAI;QACV,OAAO,EAAE;YACP,kBAAkB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YACvC,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YACnC,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAClC;QACD,gBAAgB,EAAE,KAAK;KACxB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;IAE3F,IAAI,aAAa,GAAqB,EAAE,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QAC5B,aAAa,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1B,kBAAkB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAChC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAA6B,CAAC,EAAE,CAAC;YACtD,MAAM,kBAAkB,CAAC,QAA6B,EAAE,OAAO,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mDAAmD,QAAQ,gBAAgB,CAC5E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
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`)
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
|
|
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,
|
|
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"}
|
package/dist/lib/fs-atomic.d.ts
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/lib/fs-atomic.js
CHANGED
|
@@ -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
|
-
|
|
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,
|
|
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,
|
|
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 {
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
+
(`~/.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
|
|
41
|
+
## The 14 tools
|
|
42
42
|
|
|
43
|
-
**Read tools (8) —
|
|
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
|
-
**
|
|
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.
|
|
61
|
-
| `execute_action` | Performs a click / type / navigate in the user's live browser. Gated by the per-origin
|
|
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
|
|
148
|
-
|
|
149
|
-
side panel
|
|
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
|
-
|
|
152
|
-
-
|
|
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
|
|
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.
|
|
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.
|
|
39
|
+
"@peekdev/mcp": "0.1.0-alpha.21"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/better-sqlite3": "^7.6.13",
|