@peekdev/mcp 0.1.0-alpha.2 → 0.1.0-alpha.20

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.
Files changed (72) hide show
  1. package/README.md +163 -0
  2. package/dist/db/open.d.ts +19 -1
  3. package/dist/db/open.d.ts.map +1 -1
  4. package/dist/db/open.js +25 -1
  5. package/dist/db/open.js.map +1 -1
  6. package/dist/entrypoint.d.ts +8 -0
  7. package/dist/entrypoint.d.ts.map +1 -0
  8. package/dist/entrypoint.js +33 -0
  9. package/dist/entrypoint.js.map +1 -0
  10. package/dist/mcp/action-schema.d.ts +156 -0
  11. package/dist/mcp/action-schema.d.ts.map +1 -1
  12. package/dist/mcp/action-schema.js +69 -0
  13. package/dist/mcp/action-schema.js.map +1 -1
  14. package/dist/mcp/event-blobs.d.ts +12 -2
  15. package/dist/mcp/event-blobs.d.ts.map +1 -1
  16. package/dist/mcp/event-blobs.js +55 -6
  17. package/dist/mcp/event-blobs.js.map +1 -1
  18. package/dist/mcp/event-walker.d.ts +30 -0
  19. package/dist/mcp/event-walker.d.ts.map +1 -1
  20. package/dist/mcp/event-walker.js +67 -1
  21. package/dist/mcp/event-walker.js.map +1 -1
  22. package/dist/mcp/host-bridge.d.ts +50 -1
  23. package/dist/mcp/host-bridge.d.ts.map +1 -1
  24. package/dist/mcp/host-bridge.js +133 -0
  25. package/dist/mcp/host-bridge.js.map +1 -1
  26. package/dist/mcp/index.d.ts +6 -0
  27. package/dist/mcp/index.d.ts.map +1 -1
  28. package/dist/mcp/index.js +11 -1
  29. package/dist/mcp/index.js.map +1 -1
  30. package/dist/mcp/playwright-repro.d.ts.map +1 -1
  31. package/dist/mcp/playwright-repro.js +58 -9
  32. package/dist/mcp/playwright-repro.js.map +1 -1
  33. package/dist/mcp/server.d.ts +1 -1
  34. package/dist/mcp/server.d.ts.map +1 -1
  35. package/dist/mcp/server.js +292 -58
  36. package/dist/mcp/server.js.map +1 -1
  37. package/dist/mcp/summary.d.ts +7 -0
  38. package/dist/mcp/summary.d.ts.map +1 -1
  39. package/dist/mcp/summary.js +7 -1
  40. package/dist/mcp/summary.js.map +1 -1
  41. package/dist/native-host/action-protocol.d.ts +15 -2
  42. package/dist/native-host/action-protocol.d.ts.map +1 -1
  43. package/dist/native-host/audit.d.ts +1 -1
  44. package/dist/native-host/audit.d.ts.map +1 -1
  45. package/dist/native-host/audit.js +1 -1
  46. package/dist/native-host/audit.js.map +1 -1
  47. package/dist/native-host/host-socket.d.ts +125 -0
  48. package/dist/native-host/host-socket.d.ts.map +1 -0
  49. package/dist/native-host/host-socket.js +338 -0
  50. package/dist/native-host/host-socket.js.map +1 -0
  51. package/dist/native-host/host.d.ts +11 -0
  52. package/dist/native-host/host.d.ts.map +1 -1
  53. package/dist/native-host/host.js +54 -0
  54. package/dist/native-host/host.js.map +1 -1
  55. package/dist/native-host/ingest.js +4 -4
  56. package/dist/native-host/ingest.js.map +1 -1
  57. package/dist/native-host/installer.d.ts +21 -0
  58. package/dist/native-host/installer.d.ts.map +1 -1
  59. package/dist/native-host/installer.js +64 -2
  60. package/dist/native-host/installer.js.map +1 -1
  61. package/dist/native-host/manifest.d.ts +7 -2
  62. package/dist/native-host/manifest.d.ts.map +1 -1
  63. package/dist/native-host/manifest.js +29 -15
  64. package/dist/native-host/manifest.js.map +1 -1
  65. package/dist/native-host/socket-path.d.ts +10 -0
  66. package/dist/native-host/socket-path.d.ts.map +1 -0
  67. package/dist/native-host/socket-path.js +31 -0
  68. package/dist/native-host/socket-path.js.map +1 -0
  69. package/dist/postinstall.d.ts.map +1 -1
  70. package/dist/postinstall.js +15 -15
  71. package/dist/postinstall.js.map +1 -1
  72. package/package.json +34 -4
@@ -5,7 +5,7 @@
5
5
  // (get_user_action_before_error, get_dom_snapshot, query_dom_history,
6
6
  // generate_playwright_repro) read the blob through here and walk the decoded
7
7
  // stream — the console/network tools read the structured SQL tables directly.
8
- import { existsSync, readFileSync } from 'node:fs';
8
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
9
9
  import { isAbsolute, join } from 'node:path';
10
10
  import { decompress } from '@cubenest/rrweb-core';
11
11
  import { peekHomeDir } from '../db/open.js';
@@ -30,15 +30,30 @@ export function rrwebEventsDir() {
30
30
  * Resolve a `sessions.events_blob_path` value to an absolute path. The column
31
31
  * stores a path relative to {@link rrwebEventsDir}; an absolute value (older
32
32
  * rows / tests) is honored as-is.
33
+ *
34
+ * Pre-alpha.10 rows store the path as `rrweb-events/<sessionId>` (a duplicated
35
+ * prefix relative to {@link peekHomeDir} instead of {@link rrwebEventsDir}).
36
+ * Strip that one specific leading segment so the legacy and current layouts
37
+ * resolve to the same on-disk directory.
33
38
  */
34
39
  export function resolveBlobPath(blobPath, baseDir = rrwebEventsDir()) {
35
- return isAbsolute(blobPath) ? blobPath : join(baseDir, blobPath);
40
+ if (isAbsolute(blobPath))
41
+ return blobPath;
42
+ const trimmed = blobPath.startsWith('rrweb-events/') || blobPath.startsWith('rrweb-events\\')
43
+ ? blobPath.slice('rrweb-events/'.length)
44
+ : blobPath;
45
+ return join(baseDir, trimmed);
36
46
  }
37
47
  /**
38
48
  * Read + gunzip + JSON-parse a session's event blob into the rrweb event array.
39
49
  * Returns an empty array when the session has no blob path recorded or the
40
- * blob file is missing (e.g. an active session before its first flush, or a
41
- * blob pruned by retention) — callers degrade to "no events" rather than throw.
50
+ * blob file/dir is missing (e.g. an active session before its first flush, or
51
+ * a blob pruned by retention) — callers degrade to "no events" rather than throw.
52
+ *
53
+ * The native host writes one gzipped chunk per `session.append` batch at
54
+ * `<events-dir>/<sessionId>/<seq>.json.gz`, and stores `<events-dir>/<sessionId>`
55
+ * (a directory) in `sessions.events_blob_path`. Older rows / tests may instead
56
+ * point at a single `.gz` file — both layouts are honored here.
42
57
  *
43
58
  * @param blobPath the `sessions.events_blob_path` value (relative or absolute)
44
59
  * @param baseDir override the ~/.peek/rrweb-events base (tests)
@@ -51,7 +66,18 @@ export function loadSessionEvents(blobPath, baseDir = rrwebEventsDir()) {
51
66
  if (!existsSync(abs)) {
52
67
  return [];
53
68
  }
54
- const bytes = readFileSync(abs);
69
+ const stats = statSync(abs);
70
+ if (stats.isDirectory()) {
71
+ return loadChunkedDir(abs, blobPath);
72
+ }
73
+ return decodeOne(abs, blobPath);
74
+ }
75
+ /**
76
+ * Decode a single gzipped chunk file into its event array. Shared by both the
77
+ * legacy single-file blob layout and the per-chunk reads from {@link loadChunkedDir}.
78
+ */
79
+ function decodeOne(absPath, displayPath) {
80
+ const bytes = readFileSync(absPath);
55
81
  try {
56
82
  // readFileSync returns a Node Buffer; decompress wants a Uint8Array view.
57
83
  // decompress throws (fflate gzip error / non-array payload) on a corrupt or
@@ -59,7 +85,30 @@ export function loadSessionEvents(blobPath, baseDir = rrwebEventsDir()) {
59
85
  return decompress(new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength));
60
86
  }
61
87
  catch (err) {
62
- throw new SessionEventsError(`Failed to decode the event blob at '${blobPath}' (corrupt or truncated recording).`, { cause: err });
88
+ throw new SessionEventsError(`Failed to decode the event blob at '${displayPath}' (corrupt or truncated recording).`, { cause: err });
89
+ }
90
+ }
91
+ /**
92
+ * Walk `<dir>/<seq>.json.gz` chunk files in numeric seq order, decode each, and
93
+ * concatenate their event arrays. An empty directory (no chunks flushed yet) is
94
+ * a normal empty result, not an error.
95
+ */
96
+ function loadChunkedDir(absDir, displayPath) {
97
+ const entries = readdirSync(absDir);
98
+ const seqs = [];
99
+ for (const name of entries) {
100
+ const match = name.match(/^(\d+)\.json\.gz$/);
101
+ if (match?.[1] === undefined)
102
+ continue;
103
+ seqs.push({ seq: Number(match[1]), file: name });
104
+ }
105
+ seqs.sort((a, b) => a.seq - b.seq);
106
+ const events = [];
107
+ for (const { file } of seqs) {
108
+ const chunk = decodeOne(join(absDir, file), `${displayPath}/${file}`);
109
+ for (const e of chunk)
110
+ events.push(e);
63
111
  }
112
+ return events;
64
113
  }
65
114
  //# sourceMappingURL=event-blobs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-blobs.js","sourceRoot":"","sources":["../../src/mcp/event-blobs.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,+EAA+E;AAC/E,2EAA2E;AAC3E,yDAAyD;AACzD,sEAAsE;AACtE,6EAA6E;AAC7E,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAsB,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,uEAAuE;AACvE,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,UAAkB,cAAc,EAAE;IAClF,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAmC,EACnC,UAAkB,cAAc,EAAE;IAElC,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzE,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,0EAA0E;QAC1E,4EAA4E;QAC5E,oEAAoE;QACpE,OAAO,UAAU,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACtF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,kBAAkB,CAC1B,uCAAuC,QAAQ,qCAAqC,EACpF,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"event-blobs.js","sourceRoot":"","sources":["../../src/mcp/event-blobs.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,12 @@ export interface UserAction {
9
9
  readonly selector?: string;
10
10
  /** For input actions: the (already-masked-by-capture) value typed. */
11
11
  readonly value?: string;
12
+ /** For input actions: the lowercase HTML tag name of the target element (e.g. 'select', 'input', 'textarea'). */
13
+ readonly elementTag?: string;
14
+ /** For input elements: the lowercased `type` attribute (e.g. 'checkbox', 'radio', 'hidden', 'text') when present. */
15
+ readonly inputType?: string;
16
+ /** For input elements: the checked state at the time of the input event (checkbox/radio). */
17
+ readonly checked?: boolean;
12
18
  /** For navigations: the destination URL (Meta event href). */
13
19
  readonly url?: string;
14
20
  /** A short human description, e.g. `click button.submit`. */
@@ -25,6 +31,30 @@ export interface UserAction {
25
31
  * — they're noise for repro/explanation and blow the token budget.
26
32
  */
27
33
  export declare function extractUserActions(events: eventWithTime[]): UserAction[];
34
+ /**
35
+ * Max gap (ms) between two same-selector clicks for them to be treated as one
36
+ * (a pointer double-fire / double-click). Clicks spaced wider are intentional
37
+ * repeats and kept.
38
+ */
39
+ export declare const COALESCE_CLICK_WINDOW_MS = 700;
40
+ /**
41
+ * Collapse recording artifacts into the actions a human would describe, in a
42
+ * single left-to-right pass comparing each action to the previously-KEPT one:
43
+ *
44
+ * • navigate dedup — drop a navigate whose url matches the immediately
45
+ * preceding kept navigate (the duplicate goto rrweb often emits). A
46
+ * re-navigation separated by other actions is a real one and kept.
47
+ * • click dedup — drop a click whose selector matches the immediately
48
+ * preceding kept click within {@link COALESCE_CLICK_WINDOW_MS} (double-fire
49
+ * / double-click). Same-selector clicks spaced wider, or with another
50
+ * action between, are kept.
51
+ * • input coalesce — replace the preceding kept input on the same selector
52
+ * with the current one, collapsing a typing burst to its final value/checked
53
+ * state.
54
+ *
55
+ * Returns a new array; inputs are not mutated and order is preserved.
56
+ */
57
+ export declare function coalesceActions(actions: UserAction[]): UserAction[];
28
58
  /** The user actions strictly before `errorTs`, most-recent-last, capped to `window`. */
29
59
  export declare function userActionsBeforeError(events: eventWithTime[], errorTs: number, window?: number): UserAction[];
30
60
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"event-walker.d.ts","sourceRoot":"","sources":["../../src/mcp/event-walker.ts"],"names":[],"mappings":"AAoBA,OAAO,EAOL,KAAK,aAAa,EAKlB,KAAK,oBAAoB,EAE1B,MAAM,kBAAkB,CAAC;AAS1B,gFAAgF;AAChF,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;IAC9C,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAuBD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,EAAE,CAgExE;AAkBD,wFAAwF;AACxF,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,EAAE,EACvB,OAAO,EAAE,MAAM,EACf,MAAM,SAAK,GACV,UAAU,EAAE,CAGd;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,WAAW;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,qEAAqE;IACrE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,aAAa,EAAE,EACvB,EAAE,EAAE,MAAM,EACV,QAAQ,CAAC,EAAE,MAAM,GAChB,WAAW,GAAG,SAAS,CAkDzB;AAkGD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,SAAI,GAAG,MAAM,CAoC3E;AAiCD,+DAA+D;AAC/D,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACxD,iDAAiD;IACjD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,CAAC,EAAE,kBAAkB,GAAG,WAAW,CAAC;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EAAE,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,sBAA2B,GACnC,SAAS,EAAE,CAmDb"}
1
+ {"version":3,"file":"event-walker.d.ts","sourceRoot":"","sources":["../../src/mcp/event-walker.ts"],"names":[],"mappings":"AAoBA,OAAO,EAOL,KAAK,aAAa,EAKlB,KAAK,oBAAoB,EAE1B,MAAM,kBAAkB,CAAC;AAS1B,gFAAgF;AAChF,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;IAC9C,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,iHAAiH;IACjH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,qHAAqH;IACrH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,8DAA8D;IAC9D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAuBD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,EAAE,CA6ExE;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAuCnE;AAkBD,wFAAwF;AACxF,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,EAAE,EACvB,OAAO,EAAE,MAAM,EACf,MAAM,SAAK,GACV,UAAU,EAAE,CAGd;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,WAAW;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,qEAAqE;IACrE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,aAAa,EAAE,EACvB,EAAE,EAAE,MAAM,EACV,QAAQ,CAAC,EAAE,MAAM,GAChB,WAAW,GAAG,SAAS,CAkDzB;AAkGD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,SAAI,GAAG,MAAM,CAoC3E;AAiCD,+DAA+D;AAC/D,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACxD,iDAAiD;IACjD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,CAAC,EAAE,kBAAkB,GAAG,WAAW,CAAC;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EAAE,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,sBAA2B,GACnC,SAAS,EAAE,CAmDb"}
@@ -81,18 +81,84 @@ export function extractUserActions(events) {
81
81
  const selector = resolveSelector(input.id);
82
82
  // rrweb already masks values per the recorder config; we surface as-is.
83
83
  const value = typeof input.text === 'string' ? input.text : '';
84
+ const nodeEntry = index?.get(input.id);
85
+ const isElement = nodeEntry?.node?.type === NodeType.Element;
86
+ const elementTag = isElement
87
+ ? nodeEntry.node.tagName.toLowerCase()
88
+ : undefined;
89
+ const rawType = isElement
90
+ ? nodeEntry.node.attributes?.type
91
+ : undefined;
92
+ const inputType = typeof rawType === 'string' ? rawType.toLowerCase() : undefined;
93
+ const checked = typeof input.isChecked === 'boolean' ? input.isChecked : undefined;
84
94
  actions.push({
85
95
  type: 'input',
86
96
  ts: e.timestamp,
87
97
  ...(selector !== undefined ? { selector } : {}),
88
98
  value,
99
+ ...(elementTag !== undefined ? { elementTag } : {}),
100
+ ...(inputType !== undefined ? { inputType } : {}),
101
+ ...(checked !== undefined ? { checked } : {}),
89
102
  summary: selector !== undefined
90
103
  ? `input ${selector} = ${truncate(value, 40)}`
91
104
  : `input node#${input.id} = ${truncate(value, 40)}`,
92
105
  });
93
106
  }
94
107
  }
95
- return actions;
108
+ return coalesceActions(actions);
109
+ }
110
+ /**
111
+ * Max gap (ms) between two same-selector clicks for them to be treated as one
112
+ * (a pointer double-fire / double-click). Clicks spaced wider are intentional
113
+ * repeats and kept.
114
+ */
115
+ export const COALESCE_CLICK_WINDOW_MS = 700;
116
+ /**
117
+ * Collapse recording artifacts into the actions a human would describe, in a
118
+ * single left-to-right pass comparing each action to the previously-KEPT one:
119
+ *
120
+ * • navigate dedup — drop a navigate whose url matches the immediately
121
+ * preceding kept navigate (the duplicate goto rrweb often emits). A
122
+ * re-navigation separated by other actions is a real one and kept.
123
+ * • click dedup — drop a click whose selector matches the immediately
124
+ * preceding kept click within {@link COALESCE_CLICK_WINDOW_MS} (double-fire
125
+ * / double-click). Same-selector clicks spaced wider, or with another
126
+ * action between, are kept.
127
+ * • input coalesce — replace the preceding kept input on the same selector
128
+ * with the current one, collapsing a typing burst to its final value/checked
129
+ * state.
130
+ *
131
+ * Returns a new array; inputs are not mutated and order is preserved.
132
+ */
133
+ export function coalesceActions(actions) {
134
+ const kept = [];
135
+ for (const action of actions) {
136
+ const prev = kept[kept.length - 1];
137
+ if (prev) {
138
+ if (action.type === 'navigate' &&
139
+ prev.type === 'navigate' &&
140
+ action.url !== undefined &&
141
+ action.url === prev.url) {
142
+ continue;
143
+ }
144
+ if (action.type === 'click' &&
145
+ prev.type === 'click' &&
146
+ action.selector !== undefined &&
147
+ action.selector === prev.selector &&
148
+ action.ts - prev.ts <= COALESCE_CLICK_WINDOW_MS) {
149
+ continue;
150
+ }
151
+ if (action.type === 'input' &&
152
+ prev.type === 'input' &&
153
+ action.selector !== undefined &&
154
+ action.selector === prev.selector) {
155
+ kept[kept.length - 1] = action;
156
+ continue;
157
+ }
158
+ }
159
+ kept.push(action);
160
+ }
161
+ return kept;
96
162
  }
97
163
  /** Fold a mutation's added nodes into the live index (best-effort, recursive). */
98
164
  function foldAddsIntoIndex(index, adds) {
@@ -1 +1 @@
1
- {"version":3,"file":"event-walker.js","sourceRoot":"","sources":["../../src/mcp/event-walker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-walker.js","sourceRoot":"","sources":["../../src/mcp/event-walker.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@ export interface HostActionResponse {
26
26
  /** verdict + result from the SW (see action-protocol.ts ActionResultMessage). */
27
27
  readonly verdict: 'allow' | 'deny';
28
28
  readonly result: 'ok' | 'denied' | 'error';
29
- readonly approver: 'user' | 'allow-list-match' | 'level-4-auto';
29
+ readonly approver: 'user' | 'allow-list-match' | 'level-4-auto' | 'level-2-suggest';
30
30
  readonly approvalMs?: number;
31
31
  readonly destructiveTerm?: string;
32
32
  readonly details?: unknown;
@@ -77,4 +77,53 @@ export declare class RegistryBackedHostBridge implements HostBridge {
77
77
  /** Test helper: reject the first pending request. */
78
78
  rejectNext(reason: unknown): boolean;
79
79
  }
80
+ /** The minimal duplex surface the bridge needs — injectable for tests. */
81
+ interface SocketLike {
82
+ write(data: string): void;
83
+ on(ev: string, h: (...a: unknown[]) => void): void;
84
+ end(): void;
85
+ /** Optional: decode inbound bytes as UTF-8 (real net.Socket has it). */
86
+ setEncoding?(encoding: string): void;
87
+ /**
88
+ * Optional: forcibly close the underlying socket (item G). Real net.Socket
89
+ * has it. `#reset` calls this so the orphaned socket doesn't stay open.
90
+ */
91
+ destroy?(): void;
92
+ /**
93
+ * Optional: detach the data/error/close listeners (item G) so a dropped
94
+ * socket doesn't leak its handlers. Real net.Socket (EventEmitter) has it.
95
+ */
96
+ removeAllListeners?(): void;
97
+ }
98
+ export interface LocalSocketHostBridgeDeps {
99
+ /** Override the socket / named-pipe path (tests + alternate PEEK_HOME). */
100
+ socketPath?: string;
101
+ /** Injectable connection factory; defaults to `net.connect(path)`. */
102
+ connect?: (path: string) => SocketLike;
103
+ /** Injectable correlation registry (tests). */
104
+ registry?: RequestRegistry;
105
+ /** Max bytes for a single inbound line before the connection is dropped. */
106
+ maxLineBytes?: number;
107
+ }
108
+ /**
109
+ * The production bridge: a newline-delimited-JSON client over the local
110
+ * `~/.peek/host.sock` (Unix domain socket) / `\\.\pipe\peek-host` (Windows).
111
+ *
112
+ * Wire frame (both directions): one JSON object per line, `\n`-terminated.
113
+ * client → host: { kind: 'act.request', id, payload: HostActionRequest }
114
+ * host → client: { kind: 'act.response', id, payload: HostActionResponse }
115
+ *
116
+ * Correlation reuses {@link RequestRegistry} (id ↔ pending promise) exactly like
117
+ * {@link RegistryBackedHostBridge}; only the transport differs. The connection
118
+ * is opened lazily on the first request and reused. A connect throw, a socket
119
+ * `error`, or a timeout all resolve to a structured `deny`/`error` response —
120
+ * fail-closed — so the MCP tool handler never sees a raw throw and the audit
121
+ * log still records the attempt.
122
+ */
123
+ export declare class LocalSocketHostBridge implements HostBridge {
124
+ #private;
125
+ constructor(deps?: LocalSocketHostBridgeDeps);
126
+ request(req: HostActionRequest): Promise<HostActionResponse>;
127
+ }
128
+ export {};
80
129
  //# sourceMappingURL=host-bridge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"host-bridge.d.ts","sourceRoot":"","sources":["../../src/mcp/host-bridge.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC/F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAKjD,mDAAmD;AACnD,MAAM,WAAW,iBAAiB;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,uBAAuB,CAAC;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,cAAc,CAAC;IAChE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC9D;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAkB,YAAW,UAAU;;gBAEtC,MAAM,SAAqD;IAGjE,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAQpE;AAED;;;;;GAKG;AACH,qBAAa,wBAAyB,YAAW,UAAU;;IAEzD,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,iBAAiB,CAAA;KAAE,CAAC,CAAM;gBAEzD,QAAQ,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,mBAAmB;IAI5D,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQlE,sDAAsD;IACtD,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAMjD,qDAAqD;IACrD,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;CAKrC"}
1
+ {"version":3,"file":"host-bridge.d.ts","sourceRoot":"","sources":["../../src/mcp/host-bridge.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,9 @@
27
27
  //
28
28
  // When the IPC layer lands (3d-4 or 3e) we add a concrete
29
29
  // `LocalSocketHostBridge` here; nothing else changes.
30
+ import * as net from 'node:net';
30
31
  import { RequestRegistry } from '../native-host/request-registry.js';
32
+ import { hostSocketPath } from '../native-host/socket-path.js';
31
33
  // 5 minutes — longer than any plausible Level-3 banner-decision window.
32
34
  const DEFAULT_BRIDGE_TIMEOUT_MS = 5 * 60_000;
33
35
  /**
@@ -85,4 +87,135 @@ export class RegistryBackedHostBridge {
85
87
  return this.#registry.reject(entry.id, reason);
86
88
  }
87
89
  }
90
+ /**
91
+ * Cap for a single newline-delimited frame on the bridge's read side. A
92
+ * well-behaved native host never sends a frame near this; the cap is a
93
+ * local-DoS guard so a malformed / hostile peer can't make the bridge buffer
94
+ * unbounded. 1 MiB mirrors the native-messaging host→ext frame cap.
95
+ */
96
+ const DEFAULT_MAX_LINE_BYTES = 1024 * 1024;
97
+ /**
98
+ * The production bridge: a newline-delimited-JSON client over the local
99
+ * `~/.peek/host.sock` (Unix domain socket) / `\\.\pipe\peek-host` (Windows).
100
+ *
101
+ * Wire frame (both directions): one JSON object per line, `\n`-terminated.
102
+ * client → host: { kind: 'act.request', id, payload: HostActionRequest }
103
+ * host → client: { kind: 'act.response', id, payload: HostActionResponse }
104
+ *
105
+ * Correlation reuses {@link RequestRegistry} (id ↔ pending promise) exactly like
106
+ * {@link RegistryBackedHostBridge}; only the transport differs. The connection
107
+ * is opened lazily on the first request and reused. A connect throw, a socket
108
+ * `error`, or a timeout all resolve to a structured `deny`/`error` response —
109
+ * fail-closed — so the MCP tool handler never sees a raw throw and the audit
110
+ * log still records the attempt.
111
+ */
112
+ export class LocalSocketHostBridge {
113
+ #registry;
114
+ #path;
115
+ #connect;
116
+ #maxLineBytes;
117
+ #sock;
118
+ #buf = '';
119
+ constructor(deps = {}) {
120
+ this.#registry = deps.registry ?? new RequestRegistry();
121
+ this.#path = deps.socketPath ?? hostSocketPath();
122
+ this.#connect = deps.connect ?? ((p) => net.connect(p));
123
+ this.#maxLineBytes = deps.maxLineBytes ?? DEFAULT_MAX_LINE_BYTES;
124
+ }
125
+ /**
126
+ * Drop the cached socket + clear the read buffer (reconnect on next request).
127
+ *
128
+ * Item G: DESTROY the live socket + remove its listeners BEFORE nulling the
129
+ * reference — otherwise the orphaned socket stays open with its
130
+ * data/error/close listeners attached (a socket + listener leak on every
131
+ * reconnect, and a late event from the dead socket could still mutate state).
132
+ * Item H: fail every in-flight request with a structured error so a closed /
133
+ * errored transport rejects awaiting tool calls PROMPTLY rather than leaving
134
+ * them hanging until the 5-minute registry timeout.
135
+ */
136
+ #reset(reason) {
137
+ const sock = this.#sock;
138
+ this.#sock = undefined;
139
+ this.#buf = '';
140
+ if (sock) {
141
+ try {
142
+ sock.removeAllListeners?.();
143
+ sock.destroy?.();
144
+ }
145
+ catch {
146
+ // A destroy/removeListeners throw must not mask the reset.
147
+ }
148
+ }
149
+ // Item H: reject all pending requests now (fail-closed) instead of waiting
150
+ // out the per-request timeout.
151
+ this.#registry.rejectAll(new Error(reason ?? 'peek: host socket connection closed'));
152
+ }
153
+ /** Open (once) + wire the framing reader. Throws if the connect throws. */
154
+ #ensure() {
155
+ if (this.#sock)
156
+ return this.#sock;
157
+ const s = this.#connect(this.#path);
158
+ // Item F: decode inbound bytes as UTF-8 (matches the server side) so a
159
+ // multibyte char split across two reads can't corrupt a frame. Real
160
+ // net.Socket has setEncoding; injected fakes may not.
161
+ s.setEncoding?.('utf8');
162
+ s.on('data', (chunk) => {
163
+ this.#buf += String(chunk);
164
+ // Item F: local-DoS guard. If the buffer grows past the cap WITHOUT a
165
+ // frame delimiter, a hostile/malformed peer is trying to make us buffer
166
+ // unbounded — drop the connection + clear the buffer (in-flight requests
167
+ // time out via the registry → fail-closed).
168
+ if (this.#buf.length > this.#maxLineBytes && this.#buf.indexOf('\n') < 0) {
169
+ this.#reset('peek: host socket frame exceeded the line cap');
170
+ return;
171
+ }
172
+ let nl;
173
+ // biome-ignore lint/suspicious/noAssignInExpressions: idiomatic frame-drain loop
174
+ while ((nl = this.#buf.indexOf('\n')) >= 0) {
175
+ const line = this.#buf.slice(0, nl);
176
+ this.#buf = this.#buf.slice(nl + 1);
177
+ if (!line.trim())
178
+ continue;
179
+ if (line.length > this.#maxLineBytes)
180
+ continue; // oversized frame — drop it
181
+ try {
182
+ const m = JSON.parse(line);
183
+ if (m.kind === 'act.response' && typeof m.id === 'string') {
184
+ this.#registry.resolve(m.id, m.payload);
185
+ }
186
+ }
187
+ catch {
188
+ // Drop a malformed frame; a single bad line must not wedge the bridge.
189
+ }
190
+ }
191
+ });
192
+ s.on('error', (err) => {
193
+ // Item H: drop the cached socket so the next request reconnects AND fail
194
+ // every in-flight request now (via #reset → registry.rejectAll), instead
195
+ // of letting them hang until the 5-minute per-request timeout.
196
+ this.#reset(`peek: host socket error — ${err instanceof Error ? err.message : 'connection error'}`);
197
+ });
198
+ s.on('close', () => {
199
+ this.#reset('peek: host socket closed');
200
+ });
201
+ this.#sock = s;
202
+ return s;
203
+ }
204
+ async request(req) {
205
+ try {
206
+ const sock = this.#ensure();
207
+ const { id, response } = this.#registry.create(req.timeoutMs ?? DEFAULT_BRIDGE_TIMEOUT_MS);
208
+ sock.write(`${JSON.stringify({ kind: 'act.request', id, payload: req })}\n`);
209
+ return await response;
210
+ }
211
+ catch (err) {
212
+ return {
213
+ verdict: 'deny',
214
+ result: 'error',
215
+ approver: 'user',
216
+ error: err instanceof Error ? err.message : String(err),
217
+ };
218
+ }
219
+ }
220
+ }
88
221
  //# sourceMappingURL=host-bridge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"host-bridge.js","sourceRoot":"","sources":["../../src/mcp/host-bridge.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,qDAAqD;AACrD,EAAE;AACF,oEAAoE;AACpE,2EAA2E;AAC3E,yEAAyE;AACzE,+DAA+D;AAC/D,yEAAyE;AACzE,2DAA2D;AAC3D,4EAA4E;AAC5E,4EAA4E;AAC5E,yEAAyE;AACzE,0EAA0E;AAC1E,8CAA8C;AAC9C,EAAE;AACF,yBAAyB;AACzB,uEAAuE;AACvE,gEAAgE;AAChE,6EAA6E;AAC7E,yEAAyE;AACzE,0EAA0E;AAC1E,iBAAiB;AACjB,yEAAyE;AACzE,wEAAwE;AACxE,gCAAgC;AAChC,EAAE;AACF,4DAA4D;AAC5D,wDAAwD;AAExD,OAAO,EAAE,eAAe,EAA4B,MAAM,oCAAoC,CAAC;AAG/F,wEAAwE;AACxE,MAAM,yBAAyB,GAAG,CAAC,GAAG,MAAM,CAAC;AAiD7C;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAiB;IACnB,OAAO,CAAS;IACzB,YAAY,MAAM,GAAG,kDAAkD;QACrE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,IAAuB;QACnC,OAAO;YACL,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,IAAI,CAAC,OAAO;SACpB,CAAC;IACJ,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,wBAAwB;IAC1B,SAAS,CAAkB;IACpC,6EAA6E;IACpE,OAAO,GAAkD,EAAE,CAAC;IAErE,YAAY,QAA0B,EAAE,IAA0B;QAChE,IAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAsB;QAClC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC5C,GAAG,CAAC,SAAS,IAAI,yBAAyB,CAC3C,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,sDAAsD;IACtD,WAAW,CAAC,OAA2B;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,qDAAqD;IACrD,UAAU,CAAC,MAAe;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;CACF"}
1
+ {"version":3,"file":"host-bridge.js","sourceRoot":"","sources":["../../src/mcp/host-bridge.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,qDAAqD;AACrD,EAAE;AACF,oEAAoE;AACpE,2EAA2E;AAC3E,yEAAyE;AACzE,+DAA+D;AAC/D,yEAAyE;AACzE,2DAA2D;AAC3D,4EAA4E;AAC5E,4EAA4E;AAC5E,yEAAyE;AACzE,0EAA0E;AAC1E,8CAA8C;AAC9C,EAAE;AACF,yBAAyB;AACzB,uEAAuE;AACvE,gEAAgE;AAChE,6EAA6E;AAC7E,yEAAyE;AACzE,0EAA0E;AAC1E,iBAAiB;AACjB,yEAAyE;AACzE,wEAAwE;AACxE,gCAAgC;AAChC,EAAE;AACF,4DAA4D;AAC5D,wDAAwD;AAExD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,eAAe,EAA4B,MAAM,oCAAoC,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,wEAAwE;AACxE,MAAM,yBAAyB,GAAG,CAAC,GAAG,MAAM,CAAC;AAiD7C;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAiB;IACnB,OAAO,CAAS;IACzB,YAAY,MAAM,GAAG,kDAAkD;QACrE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,IAAuB;QACnC,OAAO;YACL,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,IAAI,CAAC,OAAO;SACpB,CAAC;IACJ,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,wBAAwB;IAC1B,SAAS,CAAkB;IACpC,6EAA6E;IACpE,OAAO,GAAkD,EAAE,CAAC;IAErE,YAAY,QAA0B,EAAE,IAA0B;QAChE,IAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAsB;QAClC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC5C,GAAG,CAAC,SAAS,IAAI,yBAAyB,CAC3C,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,sDAAsD;IACtD,WAAW,CAAC,OAA2B;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,qDAAqD;IACrD,UAAU,CAAC,MAAe;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;CACF;AAqBD;;;;;GAKG;AACH,MAAM,sBAAsB,GAAG,IAAI,GAAG,IAAI,CAAC;AAa3C;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,qBAAqB;IACvB,SAAS,CAAkB;IAC3B,KAAK,CAAS;IACd,QAAQ,CAA+B;IACvC,aAAa,CAAS;IAC/B,KAAK,CAAyB;IAC9B,IAAI,GAAG,EAAE,CAAC;IAEV,YAAY,OAAkC,EAAE;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,eAAe,EAAE,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,cAAc,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAA0B,CAAC,CAAC;QACjF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,IAAI,sBAAsB,CAAC;IACnE,CAAC;IAED;;;;;;;;;;OAUG;IACH,MAAM,CAAC,MAAe;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC;gBACH,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,2DAA2D;YAC7D,CAAC;QACH,CAAC;QACD,2EAA2E;QAC3E,+BAA+B;QAC/B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,qCAAqC,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,2EAA2E;IAC3E,OAAO;QACL,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,uEAAuE;QACvE,oEAAoE;QACpE,sDAAsD;QACtD,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAc,EAAE,EAAE;YAC9B,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,sEAAsE;YACtE,wEAAwE;YACxE,yEAAyE;YACzE,4CAA4C;YAC5C,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzE,IAAI,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YACD,IAAI,EAAU,CAAC;YACf,iFAAiF;YACjF,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,SAAS;gBAC3B,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa;oBAAE,SAAS,CAAC,4BAA4B;gBAC5E,IAAI,CAAC;oBACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsD,CAAC;oBAChF,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;wBAC1D,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,uEAAuE;gBACzE,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAY,EAAE,EAAE;YAC7B,yEAAyE;YACzE,yEAAyE;YACzE,+DAA+D;YAC/D,IAAI,CAAC,MAAM,CACT,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,EAAE,CACvF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,OAAO,CAAC,CAAC;IACX,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAsB;QAClC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC5C,GAAG,CAAC,SAAS,IAAI,yBAAyB,CAC3C,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC7E,OAAO,MAAM,QAAQ,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,MAAM;gBACf,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -2,6 +2,12 @@ import { type CreatePeekMcpServerOptions } from './server.js';
2
2
  /**
3
3
  * Start the peek MCP stdio server and resolve when the transport closes (the
4
4
  * client disconnected — stdin EOF). The DB handle is released on close.
5
+ *
6
+ * In MCP mode we wire the {@link LocalSocketHostBridge} so act-tool calls reach
7
+ * the co-running native host over ~/.peek/host.sock (replacing the
8
+ * MissingHostBridge default that returns "bridge not wired"). The bridge
9
+ * fail-closes when the socket is unavailable — every act-tool call still goes
10
+ * through the audit log. A caller-supplied `hostBridge` (tests) wins.
5
11
  */
6
12
  export declare function runMcpServer(options?: CreatePeekMcpServerOptions): Promise<void>;
7
13
  export { createPeekMcpServer, PEEK_MCP_TOOLS, SERVER_NAME, type CreatePeekMcpServerOptions, type PeekMcpServer, } from './server.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,0BAA0B,EAAuB,MAAM,aAAa,CAAC;AAEnF;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,0BAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB1F;AAED,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,KAAK,0BAA0B,EAC/B,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,0BAA0B,EAAuB,MAAM,aAAa,CAAC;AAEnF;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,0BAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB1F;AAED,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,KAAK,0BAA0B,EAC/B,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC"}
package/dist/mcp/index.js CHANGED
@@ -3,13 +3,23 @@
3
3
  // exposes in v1. Invoked from src/index.ts when `peek-mcp` runs without
4
4
  // --native-host and without a chrome-extension:// origin arg.
5
5
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
6
+ import { LocalSocketHostBridge } from './host-bridge.js';
6
7
  import { createPeekMcpServer } from './server.js';
7
8
  /**
8
9
  * Start the peek MCP stdio server and resolve when the transport closes (the
9
10
  * client disconnected — stdin EOF). The DB handle is released on close.
11
+ *
12
+ * In MCP mode we wire the {@link LocalSocketHostBridge} so act-tool calls reach
13
+ * the co-running native host over ~/.peek/host.sock (replacing the
14
+ * MissingHostBridge default that returns "bridge not wired"). The bridge
15
+ * fail-closes when the socket is unavailable — every act-tool call still goes
16
+ * through the audit log. A caller-supplied `hostBridge` (tests) wins.
10
17
  */
11
18
  export async function runMcpServer(options = {}) {
12
- const peek = createPeekMcpServer(options);
19
+ const peek = createPeekMcpServer({
20
+ hostBridge: new LocalSocketHostBridge(),
21
+ ...options,
22
+ });
13
23
  const transport = new StdioServerTransport();
14
24
  // Resolve when the client disconnects (stdin EOF). McpServer.connect
15
25
  // (Protocol.connect) PRESERVES and chains a pre-existing transport.onclose:
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,0EAA0E;AAC1E,wEAAwE;AACxE,8DAA8D;AAE9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAmC,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEnF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAsC,EAAE;IACzE,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,qEAAqE;IACrE,4EAA4E;IAC5E,yEAAyE;IACzE,4EAA4E;IAC5E,8EAA8E;IAC9E,iCAAiC;IACjC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC3C,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAErC,8EAA8E;IAC9E,uEAAuE;IACvE,MAAM,MAAM,CAAC;AACf,CAAC;AAED,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,WAAW,GAGZ,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,0EAA0E;AAC1E,wEAAwE;AACxE,8DAA8D;AAE9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAmC,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEnF;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAsC,EAAE;IACzE,MAAM,IAAI,GAAG,mBAAmB,CAAC;QAC/B,UAAU,EAAE,IAAI,qBAAqB,EAAE;QACvC,GAAG,OAAO;KACX,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,qEAAqE;IACrE,4EAA4E;IAC5E,yEAAyE;IACzE,4EAA4E;IAC5E,8EAA8E;IAC9E,iCAAiC;IACjC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC3C,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAErC,8EAA8E;IAC9E,uEAAuE;IACvE,MAAM,MAAM,CAAC;AACf,CAAC;AAED,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,WAAW,GAGZ,MAAM,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"playwright-repro.d.ts","sourceRoot":"","sources":["../../src/mcp/playwright-repro.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAgCD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,EAAE,EACvB,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAqCR"}
1
+ {"version":3,"file":"playwright-repro.d.ts","sourceRoot":"","sources":["../../src/mcp/playwright-repro.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAgED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,EAAE,EACvB,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAgDR"}