@peekdev/mcp 0.1.0-alpha.2 → 0.1.0-alpha.21
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 +178 -0
- package/dist/db/open.d.ts +19 -1
- package/dist/db/open.d.ts.map +1 -1
- package/dist/db/open.js +25 -1
- package/dist/db/open.js.map +1 -1
- package/dist/entrypoint.d.ts +8 -0
- package/dist/entrypoint.d.ts.map +1 -0
- package/dist/entrypoint.js +33 -0
- package/dist/entrypoint.js.map +1 -0
- package/dist/mcp/action-schema.d.ts +156 -0
- package/dist/mcp/action-schema.d.ts.map +1 -1
- package/dist/mcp/action-schema.js +69 -0
- package/dist/mcp/action-schema.js.map +1 -1
- package/dist/mcp/event-blobs.d.ts +12 -2
- package/dist/mcp/event-blobs.d.ts.map +1 -1
- package/dist/mcp/event-blobs.js +55 -6
- package/dist/mcp/event-blobs.js.map +1 -1
- package/dist/mcp/event-walker.d.ts +30 -0
- package/dist/mcp/event-walker.d.ts.map +1 -1
- package/dist/mcp/event-walker.js +67 -1
- package/dist/mcp/event-walker.js.map +1 -1
- package/dist/mcp/host-bridge.d.ts +50 -1
- package/dist/mcp/host-bridge.d.ts.map +1 -1
- package/dist/mcp/host-bridge.js +133 -0
- package/dist/mcp/host-bridge.js.map +1 -1
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +11 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/playwright-repro.d.ts.map +1 -1
- package/dist/mcp/playwright-repro.js +58 -9
- package/dist/mcp/playwright-repro.js.map +1 -1
- package/dist/mcp/server.d.ts +3 -2
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +301 -63
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/summary.d.ts +7 -0
- package/dist/mcp/summary.d.ts.map +1 -1
- package/dist/mcp/summary.js +7 -1
- package/dist/mcp/summary.js.map +1 -1
- package/dist/native-host/action-protocol.d.ts +15 -2
- package/dist/native-host/action-protocol.d.ts.map +1 -1
- package/dist/native-host/audit.d.ts +1 -1
- package/dist/native-host/audit.d.ts.map +1 -1
- package/dist/native-host/audit.js +1 -1
- package/dist/native-host/audit.js.map +1 -1
- package/dist/native-host/host-socket.d.ts +137 -0
- package/dist/native-host/host-socket.d.ts.map +1 -0
- package/dist/native-host/host-socket.js +369 -0
- package/dist/native-host/host-socket.js.map +1 -0
- package/dist/native-host/host.d.ts +11 -0
- package/dist/native-host/host.d.ts.map +1 -1
- package/dist/native-host/host.js +54 -0
- package/dist/native-host/host.js.map +1 -1
- package/dist/native-host/ingest.js +4 -4
- package/dist/native-host/ingest.js.map +1 -1
- package/dist/native-host/installer.d.ts +21 -0
- package/dist/native-host/installer.d.ts.map +1 -1
- package/dist/native-host/installer.js +64 -2
- package/dist/native-host/installer.js.map +1 -1
- package/dist/native-host/manifest.d.ts +7 -2
- package/dist/native-host/manifest.d.ts.map +1 -1
- package/dist/native-host/manifest.js +29 -15
- package/dist/native-host/manifest.js.map +1 -1
- package/dist/native-host/socket-path.d.ts +10 -0
- package/dist/native-host/socket-path.d.ts.map +1 -0
- package/dist/native-host/socket-path.js +31 -0
- package/dist/native-host/socket-path.js.map +1 -0
- package/dist/postinstall.d.ts.map +1 -1
- package/dist/postinstall.js +15 -15
- package/dist/postinstall.js.map +1 -1
- package/package.json +34 -4
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
// Native-host-side IPC relay (Task 3.24 IPC layer).
|
|
2
|
+
//
|
|
3
|
+
// The MCP-server process talks to this server over the local socket
|
|
4
|
+
// (`~/.peek/host.sock`) using the {@link LocalSocketHostBridge}. This server
|
|
5
|
+
// runs INSIDE the native-host process — the one that owns the
|
|
6
|
+
// `chrome.runtime.connectNative` port to the service worker. It relays:
|
|
7
|
+
//
|
|
8
|
+
// socket act.request → native-port action.request (host → SW)
|
|
9
|
+
// native-port action.result / action.confirm.shown → socket act.response
|
|
10
|
+
//
|
|
11
|
+
// Correlation has TWO id spaces that must not be conflated:
|
|
12
|
+
// • the socket wire `id` (the LocalSocketHostBridge's RequestRegistry id) —
|
|
13
|
+
// the MCP process correlates `act.response` back to its awaiting tool call.
|
|
14
|
+
// • the native-port `requestId` (UUID) — the SW echoes it on its reply so we
|
|
15
|
+
// find the originating socket connection.
|
|
16
|
+
// We hold a `Map<requestId, { conn, wireId }>` so an `action.result` resolves
|
|
17
|
+
// to the right connection AND echoes the right wire id.
|
|
18
|
+
//
|
|
19
|
+
// Security / robustness: per-connection newline-JSON framing (reused shape from
|
|
20
|
+
// the bridge); a malformed frame is dropped, never crashes the loop; an
|
|
21
|
+
// `action.result` for an unknown requestId is dropped (a stale reply after a
|
|
22
|
+
// timeout must not throw). The policy deltas are loaded per request (the file
|
|
23
|
+
// is tiny) and forwarded so the SW's destructive matcher merges them.
|
|
24
|
+
import { mkdirSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
25
|
+
import * as net from 'node:net';
|
|
26
|
+
import { platform } from 'node:os';
|
|
27
|
+
import { join } from 'node:path';
|
|
28
|
+
import { setTimeout as delay } from 'node:timers/promises';
|
|
29
|
+
import { peekHomeDir } from '../db/open.js';
|
|
30
|
+
import { loadPolicy } from './policy.js';
|
|
31
|
+
import { hostSocketPath } from './socket-path.js';
|
|
32
|
+
/**
|
|
33
|
+
* Item E + I: unlink a Unix-domain-socket file ONLY when it's safe to do so —
|
|
34
|
+
* the path is a socket inode (never a regular file the user owns). This is the
|
|
35
|
+
* pure filesystem guard; the LIVE-vs-stale decision (item I) is made by the
|
|
36
|
+
* caller via {@link probeSocketAlive} BEFORE calling this, because the mere
|
|
37
|
+
* existence of a socket inode does NOT mean it's stale — a live host could be
|
|
38
|
+
* listening on it. Clobbering a live host's socket would silently break it.
|
|
39
|
+
*
|
|
40
|
+
* A missing path is a no-op. Windows named pipes aren't filesystem paths, so
|
|
41
|
+
* this is skipped there. Best-effort: any stat/unlink error is swallowed.
|
|
42
|
+
*/
|
|
43
|
+
export function cleanupStaleSocket(path) {
|
|
44
|
+
if (platform() === 'win32')
|
|
45
|
+
return; // named pipe — not a filesystem inode
|
|
46
|
+
try {
|
|
47
|
+
const st = statSync(path);
|
|
48
|
+
if (!st.isSocket())
|
|
49
|
+
return; // never clobber a regular file / dir
|
|
50
|
+
unlinkSync(path);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// ENOENT (nothing there) or any other stat/unlink error — leave it for the
|
|
54
|
+
// bind to report. Don't throw; cleanup is best-effort.
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Item I: probe whether a LIVE server is listening at `path`. Connects with a
|
|
59
|
+
* short timeout: a successful connect → a live host owns the socket (do NOT
|
|
60
|
+
* unlink it); a refused/ENOENT/timeout → the inode is stale (safe to unlink and
|
|
61
|
+
* retry the bind). Windows named pipes are probed the same way (net.connect
|
|
62
|
+
* accepts the pipe path). Resolves false on any error so a probe failure can't
|
|
63
|
+
* wedge startup.
|
|
64
|
+
*/
|
|
65
|
+
export function probeSocketAlive(path, timeoutMs = 500) {
|
|
66
|
+
return new Promise((resolve) => {
|
|
67
|
+
let settled = false;
|
|
68
|
+
const done = (alive) => {
|
|
69
|
+
if (settled)
|
|
70
|
+
return;
|
|
71
|
+
settled = true;
|
|
72
|
+
try {
|
|
73
|
+
client.destroy();
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// ignore
|
|
77
|
+
}
|
|
78
|
+
resolve(alive);
|
|
79
|
+
};
|
|
80
|
+
const client = net.connect(path);
|
|
81
|
+
client.setTimeout?.(timeoutMs);
|
|
82
|
+
client.on('connect', () => done(true)); // a live server accepted us
|
|
83
|
+
client.on('error', () => done(false)); // ECONNREFUSED / ENOENT → stale
|
|
84
|
+
client.on('timeout', () => done(false));
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* How long to wait before retrying `listen()` after unlinking a stale endpoint.
|
|
89
|
+
*
|
|
90
|
+
* A POSIX socket inode is gone the instant `unlink` returns, so an immediate
|
|
91
|
+
* rebind works (delay 0). A Windows named pipe (`\\.\pipe\…`) has no inode to
|
|
92
|
+
* unlink — it's released by the OS shortly after the prior owner's process
|
|
93
|
+
* exits, which can lag the EADDRINUSE we just observed. A brief beat gives that
|
|
94
|
+
* release time to land so the single retry actually succeeds instead of failing
|
|
95
|
+
* and degrading the action write-path. Pure (depends only on the path shape) so
|
|
96
|
+
* it unit-tests without timers.
|
|
97
|
+
*/
|
|
98
|
+
export function rebindRetryDelayMs(socketPath) {
|
|
99
|
+
return socketPath.startsWith('\\\\.\\pipe\\') ? 150 : 0;
|
|
100
|
+
}
|
|
101
|
+
/** Default cap for a single inbound newline-delimited frame (item J). 1 MiB. */
|
|
102
|
+
const DEFAULT_MAX_LINE_BYTES = 1024 * 1024;
|
|
103
|
+
/**
|
|
104
|
+
* Default screenshot spill-to-disk: write the decoded PNG under
|
|
105
|
+
* `~/.peek/screenshots/<requestId>.png` with 0600 perms (mirrors the ingest.ts
|
|
106
|
+
* blob-write precedent) and return its `{ path, bytes }`. Kept as a standalone
|
|
107
|
+
* export so the {@link HostSocketServer} can inject a fake in tests.
|
|
108
|
+
*/
|
|
109
|
+
export function writeScreenshotFile(requestId, buf) {
|
|
110
|
+
const dir = join(peekHomeDir(), 'screenshots');
|
|
111
|
+
mkdirSync(dir, { recursive: true });
|
|
112
|
+
const path = join(dir, `${requestId}.png`);
|
|
113
|
+
writeFileSync(path, buf, { mode: 0o600 });
|
|
114
|
+
return { path, bytes: buf.length };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Map a terminal {@link ActionResultMessage} to the wire `payload` the bridge
|
|
118
|
+
* expects (a {@link HostActionResponse}). Drops the wire-protocol envelope
|
|
119
|
+
* fields (`type`, `requestId`, `tool`) and keeps the verdict/result data —
|
|
120
|
+
* INCLUDING `confirmToken` when the SW issued one (request_authorization).
|
|
121
|
+
*
|
|
122
|
+
* SCREENSHOT SPILL-TO-DISK: a `screenshot` action's `details.dataUrl` is a
|
|
123
|
+
* base64 PNG that can be megabytes — far too large to round-trip back to the
|
|
124
|
+
* MCP client over the socket as inline JSON. This is the single chokepoint
|
|
125
|
+
* every `action.result` flows through, so we spill it to disk HERE: write the
|
|
126
|
+
* decoded PNG under `~/.peek/screenshots/<requestId>.png` (0600, mirroring the
|
|
127
|
+
* ingest.ts blob-write precedent) and REPLACE `details` with a compact
|
|
128
|
+
* `{ path, bytes, format }` pointer.
|
|
129
|
+
*
|
|
130
|
+
* STRICT GUARD: the fs path (`writeScreenshot`) is invoked ONLY when
|
|
131
|
+
* `details.dataUrl` is present. Every non-screenshot reply passes through
|
|
132
|
+
* byte-for-byte with ZERO fs calls.
|
|
133
|
+
*/
|
|
134
|
+
function toResponsePayload(result, writeScreenshot) {
|
|
135
|
+
const payload = {
|
|
136
|
+
verdict: result.verdict,
|
|
137
|
+
result: result.result,
|
|
138
|
+
approver: result.approver,
|
|
139
|
+
};
|
|
140
|
+
if (result.approvalMs !== undefined)
|
|
141
|
+
payload.approvalMs = result.approvalMs;
|
|
142
|
+
if (result.destructiveTerm !== undefined)
|
|
143
|
+
payload.destructiveTerm = result.destructiveTerm;
|
|
144
|
+
if (result.details !== undefined)
|
|
145
|
+
payload.details = result.details;
|
|
146
|
+
if (result.error !== undefined)
|
|
147
|
+
payload.error = result.error;
|
|
148
|
+
if (result.confirmToken !== undefined)
|
|
149
|
+
payload.confirmToken = result.confirmToken;
|
|
150
|
+
// Spill a screenshot dataUrl to disk (see doc comment). Guarded so any other
|
|
151
|
+
// reply shape — including a `details` object WITHOUT `dataUrl` — is untouched
|
|
152
|
+
// and makes ZERO fs calls (writeScreenshot is never invoked).
|
|
153
|
+
const details = result.details;
|
|
154
|
+
if (details && typeof details.dataUrl === 'string') {
|
|
155
|
+
const b64 = details.dataUrl.replace(/^data:image\/png;base64,/, '');
|
|
156
|
+
const buf = Buffer.from(b64, 'base64');
|
|
157
|
+
try {
|
|
158
|
+
const { path, bytes } = writeScreenshot(result.requestId, buf);
|
|
159
|
+
payload.details = { path, bytes, format: 'png' };
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
// Persisting the screenshot failed (EACCES on ~/.peek, disk full, a
|
|
163
|
+
// Windows lock, …). Do NOT rethrow: this runs synchronously inside the
|
|
164
|
+
// SW-message handler, and a throw here would skip writing the act.response
|
|
165
|
+
// entirely — the MCP tool call would hang until it times out with no
|
|
166
|
+
// useful error. Drop the multi-MB base64 (never inline it) and return a
|
|
167
|
+
// compact error pointer so the caller gets a clean, actionable result.
|
|
168
|
+
payload.details = {
|
|
169
|
+
format: 'png',
|
|
170
|
+
error: `failed to persist screenshot: ${err instanceof Error ? err.message : String(err)}`,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return payload;
|
|
175
|
+
}
|
|
176
|
+
export class HostSocketServer {
|
|
177
|
+
#deps;
|
|
178
|
+
#inFlight = new Map();
|
|
179
|
+
#server;
|
|
180
|
+
/** Whether we've already done the one stale-unlink retry (item I). */
|
|
181
|
+
#retriedAfterUnlink = false;
|
|
182
|
+
constructor(deps) {
|
|
183
|
+
this.#deps = {
|
|
184
|
+
postToSw: deps.postToSw,
|
|
185
|
+
loadPolicy: deps.loadPolicy ?? (() => loadPolicy()),
|
|
186
|
+
generateRequestId: deps.generateRequestId ?? (() => globalThis.crypto.randomUUID()),
|
|
187
|
+
socketPath: deps.socketPath ?? hostSocketPath(),
|
|
188
|
+
maxLineBytes: deps.maxLineBytes ?? DEFAULT_MAX_LINE_BYTES,
|
|
189
|
+
probeSocketAlive: deps.probeSocketAlive ?? ((p) => probeSocketAlive(p)),
|
|
190
|
+
unlinkSocket: deps.unlinkSocket ?? ((p) => cleanupStaleSocket(p)),
|
|
191
|
+
writeScreenshot: deps.writeScreenshot ?? ((id, buf) => writeScreenshotFile(id, buf)),
|
|
192
|
+
...(deps.onListenError ? { onListenError: deps.onListenError } : {}),
|
|
193
|
+
createServer: deps.createServer ??
|
|
194
|
+
((onConnection) => {
|
|
195
|
+
const server = net.createServer((socket) => {
|
|
196
|
+
socket.setEncoding('utf8');
|
|
197
|
+
onConnection(socket);
|
|
198
|
+
});
|
|
199
|
+
let errorHandler;
|
|
200
|
+
server.on('error', (err) => errorHandler?.(err));
|
|
201
|
+
return {
|
|
202
|
+
// Item I: do NOT blindly unlink before binding (that could clobber a
|
|
203
|
+
// LIVE host's socket). Bind directly; if it emits EADDRINUSE the
|
|
204
|
+
// listen() orchestration probes live-vs-stale and only then unlinks.
|
|
205
|
+
listen: () => server.listen(this.#deps.socketPath),
|
|
206
|
+
close: () => server.close(),
|
|
207
|
+
on: (_ev, handler) => {
|
|
208
|
+
errorHandler = handler;
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
}),
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Start listening for MCP-process connections. Item I: bind failures
|
|
216
|
+
* (EADDRINUSE/EACCES) surface ASYNC via the server 'error' event, not a throw,
|
|
217
|
+
* so we attach an error handler and run the stale-vs-live policy:
|
|
218
|
+
* • EADDRINUSE + probe says LIVE → another host owns it: report + stay down.
|
|
219
|
+
* • EADDRINUSE + probe says stale → unlink + retry listen ONCE.
|
|
220
|
+
* • any other bind error (e.g. EACCES) or a second EADDRINUSE → report + down.
|
|
221
|
+
* "Report" calls onListenError so startNativeHost degrades gracefully.
|
|
222
|
+
*/
|
|
223
|
+
listen() {
|
|
224
|
+
if (this.#server)
|
|
225
|
+
return;
|
|
226
|
+
const server = this.#deps.createServer((conn) => this.#onConnection(conn));
|
|
227
|
+
this.#server = server;
|
|
228
|
+
server.on?.('error', (err) => {
|
|
229
|
+
void this.#handleListenError(err);
|
|
230
|
+
});
|
|
231
|
+
server.listen();
|
|
232
|
+
}
|
|
233
|
+
async #handleListenError(err) {
|
|
234
|
+
// Only EADDRINUSE is recoverable via the stale-unlink dance; everything else
|
|
235
|
+
// (EACCES, etc.) is reported as-is.
|
|
236
|
+
if (err.code !== 'EADDRINUSE' || this.#retriedAfterUnlink) {
|
|
237
|
+
this.#reportListenFailure(err);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
const alive = await this.#deps.probeSocketAlive(this.#deps.socketPath).catch(() => false);
|
|
241
|
+
if (alive) {
|
|
242
|
+
// A live host already owns this socket — DO NOT clobber it. Degrade.
|
|
243
|
+
this.#reportListenFailure(err);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
// Stale inode: unlink it and retry the bind exactly once.
|
|
247
|
+
this.#retriedAfterUnlink = true;
|
|
248
|
+
this.#deps.unlinkSocket(this.#deps.socketPath);
|
|
249
|
+
// A short beat so the rebind settles. On POSIX this is ~0 (the inode is gone
|
|
250
|
+
// after unlink); on a Windows named pipe it's a bit longer to let the OS
|
|
251
|
+
// finish releasing the pipe after the prior owner exited (see
|
|
252
|
+
// {@link rebindRetryDelayMs}).
|
|
253
|
+
await delay(rebindRetryDelayMs(this.#deps.socketPath));
|
|
254
|
+
this.#server?.listen();
|
|
255
|
+
}
|
|
256
|
+
#reportListenFailure(err) {
|
|
257
|
+
this.#server = undefined;
|
|
258
|
+
this.#deps.onListenError?.(err);
|
|
259
|
+
}
|
|
260
|
+
/** Stop the server (best-effort). */
|
|
261
|
+
close() {
|
|
262
|
+
this.#server?.close();
|
|
263
|
+
this.#server = undefined;
|
|
264
|
+
this.#inFlight.clear();
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Inbound from the SW over the native port. For a terminal `action.result`,
|
|
268
|
+
* find the originating connection by requestId and write back the mapped
|
|
269
|
+
* `act.response`. `action.confirm.shown` is a non-terminal timing signal —
|
|
270
|
+
* the verdict still arrives in a later `action.result` — so we drop it here.
|
|
271
|
+
*/
|
|
272
|
+
onSwMessage(message) {
|
|
273
|
+
if (message.type !== 'action.result')
|
|
274
|
+
return; // confirm.shown: timing only
|
|
275
|
+
const inFlight = this.#inFlight.get(message.requestId);
|
|
276
|
+
if (!inFlight)
|
|
277
|
+
return; // stale reply after a timeout — drop, don't throw
|
|
278
|
+
this.#inFlight.delete(message.requestId);
|
|
279
|
+
const frame = {
|
|
280
|
+
kind: 'act.response',
|
|
281
|
+
id: inFlight.wireId,
|
|
282
|
+
payload: toResponsePayload(message, this.#deps.writeScreenshot),
|
|
283
|
+
};
|
|
284
|
+
try {
|
|
285
|
+
inFlight.conn.write(`${JSON.stringify(frame)}\n`);
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
// The MCP process closed the socket mid-flight; its tool call will time
|
|
289
|
+
// out. Nothing else to do here.
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
#onConnection(conn) {
|
|
293
|
+
let buf = '';
|
|
294
|
+
let dropped = false;
|
|
295
|
+
conn.on('data', (chunk) => {
|
|
296
|
+
if (dropped)
|
|
297
|
+
return; // connection already torn down for an over-cap line
|
|
298
|
+
buf += String(chunk);
|
|
299
|
+
// Item J: local-DoS guard (mirrors the bridge). If the buffer grows past
|
|
300
|
+
// the cap WITHOUT a frame delimiter, a hostile/malformed peer is trying to
|
|
301
|
+
// make us buffer unbounded — drop the connection + clear the buffer.
|
|
302
|
+
if (buf.length > this.#deps.maxLineBytes && buf.indexOf('\n') < 0) {
|
|
303
|
+
dropped = true;
|
|
304
|
+
buf = '';
|
|
305
|
+
try {
|
|
306
|
+
conn.destroy?.();
|
|
307
|
+
conn.end?.();
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
// best-effort teardown
|
|
311
|
+
}
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
let nl;
|
|
315
|
+
// biome-ignore lint/suspicious/noAssignInExpressions: idiomatic frame-drain loop
|
|
316
|
+
while ((nl = buf.indexOf('\n')) >= 0) {
|
|
317
|
+
const line = buf.slice(0, nl);
|
|
318
|
+
buf = buf.slice(nl + 1);
|
|
319
|
+
if (!line.trim())
|
|
320
|
+
continue;
|
|
321
|
+
if (line.length > this.#deps.maxLineBytes)
|
|
322
|
+
continue; // oversized framed line — drop it
|
|
323
|
+
this.#handleFrame(conn, line);
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
// A connection error / close leaves any of its in-flight entries dangling;
|
|
327
|
+
// they'll never be resolved (the MCP tool call times out). Drop them so the
|
|
328
|
+
// map doesn't grow unbounded.
|
|
329
|
+
const drop = () => {
|
|
330
|
+
for (const [requestId, entry] of this.#inFlight.entries()) {
|
|
331
|
+
if (entry.conn === conn)
|
|
332
|
+
this.#inFlight.delete(requestId);
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
conn.on('error', drop);
|
|
336
|
+
conn.on('close', drop);
|
|
337
|
+
conn.on('end', drop);
|
|
338
|
+
}
|
|
339
|
+
#handleFrame(conn, line) {
|
|
340
|
+
let frame;
|
|
341
|
+
try {
|
|
342
|
+
frame = JSON.parse(line);
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
return; // malformed — drop, keep the loop alive
|
|
346
|
+
}
|
|
347
|
+
if (frame.kind !== 'act.request' || typeof frame.id !== 'string')
|
|
348
|
+
return;
|
|
349
|
+
const payload = frame.payload;
|
|
350
|
+
if (!payload || payload.tool === undefined || payload.action === undefined)
|
|
351
|
+
return;
|
|
352
|
+
const requestId = this.#deps.generateRequestId();
|
|
353
|
+
this.#inFlight.set(requestId, { conn, wireId: frame.id });
|
|
354
|
+
const policy = this.#deps.loadPolicy().destructiveTerms;
|
|
355
|
+
const request = {
|
|
356
|
+
type: 'action.request',
|
|
357
|
+
requestId,
|
|
358
|
+
tool: payload.tool,
|
|
359
|
+
sessionId: payload.sessionId ?? '',
|
|
360
|
+
action: payload.action,
|
|
361
|
+
client: payload.client ?? 'unknown',
|
|
362
|
+
policy: { add: policy.add, remove: policy.remove },
|
|
363
|
+
...(payload.tabId !== undefined ? { tabId: payload.tabId } : {}),
|
|
364
|
+
...(payload.confirmToken !== undefined ? { confirmToken: payload.confirmToken } : {}),
|
|
365
|
+
};
|
|
366
|
+
this.#deps.postToSw(request);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=host-socket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-socket.js","sourceRoot":"","sources":["../../src/native-host/host-socket.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,17 @@ export interface NativeHostOptions {
|
|
|
20
20
|
readonly input?: Readable;
|
|
21
21
|
/** Override the output stream (default: process.stdout). */
|
|
22
22
|
readonly output?: Writable;
|
|
23
|
+
/**
|
|
24
|
+
* Override the IPC socket / named-pipe path the {@link HostSocketServer}
|
|
25
|
+
* listens on (tests + alternate PEEK_HOME). Defaults to ~/.peek/host.sock.
|
|
26
|
+
*/
|
|
27
|
+
readonly socketPath?: string;
|
|
28
|
+
/**
|
|
29
|
+
* When false, skip starting the {@link HostSocketServer}. Defaults to true.
|
|
30
|
+
* Tests that only exercise the ingest/handshake path set this false to avoid
|
|
31
|
+
* binding a real socket.
|
|
32
|
+
*/
|
|
33
|
+
readonly startSocketServer?: boolean;
|
|
23
34
|
}
|
|
24
35
|
/**
|
|
25
36
|
* Start the native messaging host: open the DB (running migrations) and begin
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/native-host/host.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/native-host/host.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQtD,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,mCAAmC;IACnC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACtC;AAaD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CAmIjF"}
|
package/dist/native-host/host.js
CHANGED
|
@@ -9,8 +9,12 @@
|
|
|
9
9
|
// network.append / shadow.report). The act-tool action-protocol dispatch
|
|
10
10
|
// (request/result correlation through the SW) lands alongside the IPC bridge.
|
|
11
11
|
import { openDb, peekHomeDir, schemaVersion } from '../db/open.js';
|
|
12
|
+
import { HostSocketServer } from './host-socket.js';
|
|
12
13
|
import { ingest } from './ingest.js';
|
|
14
|
+
import { hostSocketPath } from './socket-path.js';
|
|
13
15
|
import { readMessages, writeMessage } from './transport.js';
|
|
16
|
+
/** Message types the SW sends back on the action-request correlation channel. */
|
|
17
|
+
const ACTION_REPLY_TYPES = new Set(['action.result', 'action.confirm.shown']);
|
|
14
18
|
/** Message-type strings the ingest handler claims. */
|
|
15
19
|
const INGEST_TYPES = new Set([
|
|
16
20
|
'session.append',
|
|
@@ -35,6 +39,47 @@ export function startNativeHost(options = {}) {
|
|
|
35
39
|
};
|
|
36
40
|
if (options.input !== undefined)
|
|
37
41
|
readOptions.input = options.input;
|
|
42
|
+
// IPC relay to the MCP-server process (Task 3.24). The MCP process's
|
|
43
|
+
// LocalSocketHostBridge connects here; the server relays `act.request` →
|
|
44
|
+
// native-port `action.request` (via `write`, the host → SW direction) and
|
|
45
|
+
// `action.result` (inbound, see handleMessage) → `act.response`.
|
|
46
|
+
let socketServer;
|
|
47
|
+
if (options.startSocketServer !== false) {
|
|
48
|
+
// Resolve the socket path: explicit option wins; else derive from the
|
|
49
|
+
// (possibly test-overridden) peek data dir via hostSocketPath(home). This
|
|
50
|
+
// is the SAME function the MCP-process bridge dials, so both sides agree —
|
|
51
|
+
// including under a custom $PEEK_HOME (item D). On Windows it's the fixed
|
|
52
|
+
// named pipe; a test `home` binds its own socket and never collides.
|
|
53
|
+
const socketPath = options.socketPath ?? hostSocketPath(home);
|
|
54
|
+
socketServer = new HostSocketServer({
|
|
55
|
+
// postToSw writes the action.request out the native port (host → SW).
|
|
56
|
+
postToSw: (message) => {
|
|
57
|
+
void write(message).catch((err) => {
|
|
58
|
+
console.error(`native host: action.request post failed — ${err instanceof Error ? err.message : String(err)}`);
|
|
59
|
+
});
|
|
60
|
+
},
|
|
61
|
+
socketPath,
|
|
62
|
+
// Item I/J: bind failures (EADDRINUSE/EACCES) are emitted ASYNC via the
|
|
63
|
+
// server 'error' event, so a try/catch around listen() can't catch them.
|
|
64
|
+
// The server probes live-vs-stale + retries once on a stale socket; if it
|
|
65
|
+
// still can't bind it calls this. Degrade — the action write-path is down,
|
|
66
|
+
// but ingest/capture still flows — never crash the host.
|
|
67
|
+
onListenError: (err) => {
|
|
68
|
+
console.error(`native host: IPC socket failed to listen — ${err.message}`);
|
|
69
|
+
socketServer = undefined;
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
// listen() is async-internally (the bind-error/probe/retry path); it never
|
|
73
|
+
// throws synchronously, but keep the try/catch for a defensive construct-time
|
|
74
|
+
// failure.
|
|
75
|
+
try {
|
|
76
|
+
socketServer.listen();
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
console.error(`native host: IPC socket listen threw — ${err instanceof Error ? err.message : String(err)}`);
|
|
80
|
+
socketServer = undefined;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
38
83
|
const done = readMessages((message) => {
|
|
39
84
|
// A reply-write failure (e.g. the browser closed the port mid-reply) must
|
|
40
85
|
// not become an unhandled rejection that tears down the host.
|
|
@@ -45,6 +90,7 @@ export function startNativeHost(options = {}) {
|
|
|
45
90
|
return {
|
|
46
91
|
done,
|
|
47
92
|
close() {
|
|
93
|
+
socketServer?.close();
|
|
48
94
|
db.close();
|
|
49
95
|
},
|
|
50
96
|
};
|
|
@@ -60,6 +106,14 @@ export function startNativeHost(options = {}) {
|
|
|
60
106
|
});
|
|
61
107
|
return;
|
|
62
108
|
}
|
|
109
|
+
// Action-request correlation replies from the SW (Task 3.24). Forward to
|
|
110
|
+
// the IPC relay, which writes the mapped `act.response` back to the
|
|
111
|
+
// originating MCP-process socket connection. These are NOT acked over the
|
|
112
|
+
// native port (the MCP process is the one awaiting, over the socket).
|
|
113
|
+
if (type !== undefined && ACTION_REPLY_TYPES.has(type)) {
|
|
114
|
+
socketServer?.onSwMessage(message);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
63
117
|
if (type !== undefined && INGEST_TYPES.has(type)) {
|
|
64
118
|
// ingest() catches its own throws + returns a structured reply. The
|
|
65
119
|
// try/catch here is defense in depth: if a future regression introduces
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/native-host/host.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,wEAAwE;AACxE,8EAA8E;AAC9E,0DAA0D;AAC1D,EAAE;AACF,gFAAgF;AAChF,2EAA2E;AAC3E,sEAAsE;AACtE,yEAAyE;AACzE,8EAA8E;AAG9E,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/native-host/host.ts"],"names":[],"mappings":"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"}
|
|
@@ -120,10 +120,10 @@ function ingestSessionAppend(msg, ctx) {
|
|
|
120
120
|
WHERE id = ?`);
|
|
121
121
|
const tx = ctx.db.transaction(() => {
|
|
122
122
|
upsertSession.run(msg.sessionId, nowIso, nowIso, msg.url ?? null, msg.title ?? null, origin ?? null,
|
|
123
|
-
// events_blob_path
|
|
124
|
-
//
|
|
125
|
-
//
|
|
126
|
-
|
|
123
|
+
// events_blob_path is the per-session directory relative to <PEEK_HOME>/rrweb-events/
|
|
124
|
+
// (the reader's resolveBlobPath base). Just the sessionId — no `rrweb-events/` prefix,
|
|
125
|
+
// or the reader will double it. Chunk rows carry the per-seq filename inside the dir.
|
|
126
|
+
msg.sessionId);
|
|
127
127
|
const ins = insertChunk.run(msg.sessionId, seq, startMs, endMs, msg.events.length, fileBytes, nowIso);
|
|
128
128
|
if (ins.changes > 0) {
|
|
129
129
|
// Only accumulate when we actually inserted (a duplicate seq is a no-op).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../src/native-host/ingest.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../src/native-host/ingest.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,21 @@ export interface InstallResult {
|
|
|
16
16
|
* so tests can capture argv without spawning a real Windows process.
|
|
17
17
|
*/
|
|
18
18
|
export type RegExecFn = (file: string, args: readonly string[]) => void;
|
|
19
|
+
/**
|
|
20
|
+
* Turn the error `execFileSync` throws when `reg.exe` exits non-zero into a
|
|
21
|
+
* message that actually says *why* it failed.
|
|
22
|
+
*
|
|
23
|
+
* Windows-hardening fix: previously the default `execFn` ran `reg.exe` with
|
|
24
|
+
* `stdio: 'ignore'`, so on failure (EACCES on a redirected/locked HKCU hive,
|
|
25
|
+
* the host running under a restricted token, etc.) the child's stderr was
|
|
26
|
+
* discarded and `installManifests` recorded a useless bare "Command failed".
|
|
27
|
+
* Capturing stderr and folding it (plus the exit status) into the thrown
|
|
28
|
+
* Error's message means the per-target `result.error` is now actionable.
|
|
29
|
+
*
|
|
30
|
+
* Accepts the raw caught value (typed `unknown`) so callers don't have to
|
|
31
|
+
* pre-narrow; reads `.stderr` / `.status` off `execFileSync`'s error shape.
|
|
32
|
+
*/
|
|
33
|
+
export declare function formatRegExecError(err: unknown): string;
|
|
19
34
|
/** Injectable side-effect surface (defaults to real fs + registry). */
|
|
20
35
|
export interface InstallSink {
|
|
21
36
|
/** Write a manifest JSON file at an absolute path (creating parent dirs). */
|
|
@@ -35,6 +50,12 @@ export interface InstallSink {
|
|
|
35
50
|
export declare function buildRealSink(deps?: {
|
|
36
51
|
execFn?: RegExecFn;
|
|
37
52
|
platform?: NodeJS.Platform;
|
|
53
|
+
/**
|
|
54
|
+
* Map a thrown `execFn` error → the message to rethrow. Injectable so the
|
|
55
|
+
* stderr-surfacing wrapper is unit-testable; defaults to
|
|
56
|
+
* {@link formatRegExecError}.
|
|
57
|
+
*/
|
|
58
|
+
wrapExecError?: (err: unknown) => string;
|
|
38
59
|
}): InstallSink;
|
|
39
60
|
/**
|
|
40
61
|
* Default real-OS sink (writes to disk + the Windows registry). Constructed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/native-host/installer.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEvE,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,4CAA4C;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/native-host/installer.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEvE,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,4CAA4C;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;AAmBxE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAWvD;AAED,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,6EAA6E;IAC7E,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxD;;;;;OAKG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,IAAI,GAAE;IACJ,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;CACrC,GACL,WAAW,CAkDb;AAED;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,WAA6B,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,EAAE,EACxB,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,GAAE,cAAmB,GAC3B,aAAa,EAAE,CAwCjB"}
|