@thinkrun/mcp 0.3.5

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 (50) hide show
  1. package/README.md +356 -0
  2. package/dist/bin/thinkrun-mcp.d.ts +3 -0
  3. package/dist/bin/thinkrun-mcp.d.ts.map +1 -0
  4. package/dist/bin/thinkrun-mcp.js +305 -0
  5. package/dist/bin/thinkrun-mcp.js.map +1 -0
  6. package/dist/src/client.d.ts +422 -0
  7. package/dist/src/client.d.ts.map +1 -0
  8. package/dist/src/client.js +2 -0
  9. package/dist/src/client.js.map +1 -0
  10. package/dist/src/cloud-client.d.ts +69 -0
  11. package/dist/src/cloud-client.d.ts.map +1 -0
  12. package/dist/src/cloud-client.js +291 -0
  13. package/dist/src/cloud-client.js.map +1 -0
  14. package/dist/src/extension-proxy-client.d.ts +139 -0
  15. package/dist/src/extension-proxy-client.d.ts.map +1 -0
  16. package/dist/src/extension-proxy-client.js +451 -0
  17. package/dist/src/extension-proxy-client.js.map +1 -0
  18. package/dist/src/index.d.ts +11 -0
  19. package/dist/src/index.d.ts.map +1 -0
  20. package/dist/src/index.js +6 -0
  21. package/dist/src/index.js.map +1 -0
  22. package/dist/src/local-client.d.ts +120 -0
  23. package/dist/src/local-client.d.ts.map +1 -0
  24. package/dist/src/local-client.js +947 -0
  25. package/dist/src/local-client.js.map +1 -0
  26. package/dist/src/local-locks.d.ts +26 -0
  27. package/dist/src/local-locks.d.ts.map +1 -0
  28. package/dist/src/local-locks.js +315 -0
  29. package/dist/src/local-locks.js.map +1 -0
  30. package/dist/src/package-version.d.ts +2 -0
  31. package/dist/src/package-version.d.ts.map +1 -0
  32. package/dist/src/package-version.js +13 -0
  33. package/dist/src/package-version.js.map +1 -0
  34. package/dist/src/page-cache-http.d.ts +15 -0
  35. package/dist/src/page-cache-http.d.ts.map +1 -0
  36. package/dist/src/page-cache-http.js +44 -0
  37. package/dist/src/page-cache-http.js.map +1 -0
  38. package/dist/src/server.d.ts +135 -0
  39. package/dist/src/server.d.ts.map +1 -0
  40. package/dist/src/server.js +1454 -0
  41. package/dist/src/server.js.map +1 -0
  42. package/dist/src/test-utils/lock-fixtures.d.ts +18 -0
  43. package/dist/src/test-utils/lock-fixtures.d.ts.map +1 -0
  44. package/dist/src/test-utils/lock-fixtures.js +33 -0
  45. package/dist/src/test-utils/lock-fixtures.js.map +1 -0
  46. package/dist/src/unwrap-evaluate-payload.d.ts +8 -0
  47. package/dist/src/unwrap-evaluate-payload.d.ts.map +1 -0
  48. package/dist/src/unwrap-evaluate-payload.js +19 -0
  49. package/dist/src/unwrap-evaluate-payload.js.map +1 -0
  50. package/package.json +65 -0
@@ -0,0 +1,451 @@
1
+ import { ApiError } from './cloud-client.js';
2
+ import { fetchPageCacheJson, PageCacheRequestError } from './page-cache-http.js';
3
+ /** WebSocket readyState constants. */
4
+ const WS_OPEN = 1;
5
+ // ─── Client ─────────────────────────────────────────────────────────────────
6
+ export class ExtensionProxyClient {
7
+ ws = null;
8
+ pending = new Map();
9
+ commandTimeoutMs;
10
+ pingIntervalMs;
11
+ pongTimeoutMs;
12
+ onDisconnect;
13
+ serviceBaseUrl;
14
+ serviceApiKey;
15
+ pingTimer = null;
16
+ pongTimer = null;
17
+ constructor(config = {}) {
18
+ this.commandTimeoutMs = config.commandTimeoutMs ?? 30000;
19
+ this.pingIntervalMs = config.pingIntervalMs ?? 15000;
20
+ this.pongTimeoutMs = config.pongTimeoutMs ?? 5000;
21
+ this.onDisconnect = config.onDisconnect;
22
+ this.serviceBaseUrl = config.serviceBaseUrl?.replace(/\/$/, '');
23
+ this.serviceApiKey = config.serviceApiKey;
24
+ }
25
+ // ─── WebSocket Lifecycle ────────────────────────────────────────────────
26
+ /**
27
+ * Attach a WebSocket connection from the extension.
28
+ * Call this when the extension connects to the WS relay endpoint.
29
+ */
30
+ attachWebSocket(ws) {
31
+ this.ws = ws;
32
+ this.startPing();
33
+ }
34
+ /**
35
+ * Detach the WebSocket and reject all pending commands.
36
+ * Call this on WS close/error.
37
+ */
38
+ detachWebSocket(reason) {
39
+ this.stopPing();
40
+ this.ws = null;
41
+ this.rejectAllPending(reason || 'WebSocket disconnected');
42
+ }
43
+ /** Whether a WebSocket is attached and open. */
44
+ get isConnected() {
45
+ return this.ws !== null && this.ws.readyState === WS_OPEN;
46
+ }
47
+ /**
48
+ * Handle an incoming message from the extension.
49
+ * Call this from the WS message handler.
50
+ */
51
+ handleMessage(raw) {
52
+ let parsed;
53
+ try {
54
+ parsed = JSON.parse(raw);
55
+ }
56
+ catch {
57
+ return; // Ignore malformed messages
58
+ }
59
+ // Handle pong
60
+ if (parsed.type === 'pong') {
61
+ this.handlePong();
62
+ return;
63
+ }
64
+ // Handle command response
65
+ if (parsed.id) {
66
+ this.handleResponse(parsed);
67
+ }
68
+ }
69
+ // ─── Session Lifecycle ──────────────────────────────────────────────────
70
+ async createSession(_options) {
71
+ // In extension mode, the "session" is the current tab managed by the extension.
72
+ // The CLI doesn't need to create a session — the extension already has the tab.
73
+ // Return a synthetic session result.
74
+ const result = await this.sendCommand('create_session');
75
+ return {
76
+ sessionId: `ext-proxy-${result.tabId}`,
77
+ status: 'active',
78
+ url: result.url,
79
+ title: result.title,
80
+ };
81
+ }
82
+ async getSession(sessionId) {
83
+ const result = await this.sendCommand('get_session');
84
+ return {
85
+ sessionId,
86
+ status: 'active',
87
+ url: result.url,
88
+ title: result.title,
89
+ };
90
+ }
91
+ async deleteSession(_sessionId) {
92
+ // Don't close the user's tab — just acknowledge
93
+ return { success: true };
94
+ }
95
+ async listSessions() {
96
+ const result = await this.sendCommand('list_tabs');
97
+ return (result.tabs || []).map(tab => ({
98
+ sessionId: `ext-proxy-${tab.tabId}`,
99
+ status: 'active',
100
+ url: tab.url,
101
+ title: tab.title,
102
+ }));
103
+ }
104
+ async attachToTab(tabId) {
105
+ const result = await this.sendCommand('attach_to_tab', { tabId });
106
+ return {
107
+ sessionId: `ext-proxy-${result.tabId}`,
108
+ status: 'active',
109
+ tabId: result.tabId,
110
+ url: result.url,
111
+ title: result.title,
112
+ };
113
+ }
114
+ async switchToTab(tabId) {
115
+ return this.sendCommand('switch_tab', { tabId });
116
+ }
117
+ async releaseSession(_sessionId) {
118
+ return {
119
+ success: false,
120
+ error: 'Session release is not supported in extension proxy mode',
121
+ code: 'UNSUPPORTED_IN_EXTENSION_PROXY',
122
+ hint: 'Use local MCP mode to manage native-host lock ownership.',
123
+ };
124
+ }
125
+ async openNewWindow(url = 'about:blank') {
126
+ const result = await this.sendCommand('new_window', { url });
127
+ return {
128
+ sessionId: `ext-proxy-${result.tabId}`,
129
+ status: 'active',
130
+ tabId: result.tabId,
131
+ windowId: result.windowId,
132
+ url: result.url,
133
+ title: result.title,
134
+ };
135
+ }
136
+ async listArtifacts(_sessionId) {
137
+ return { success: false, error: 'Artifacts listing is only available in cloud mode' };
138
+ }
139
+ // ─── Navigation ─────────────────────────────────────────────────────────
140
+ async navigate(_sessionId, params) {
141
+ return this.sendCommand('navigate', params);
142
+ }
143
+ async wait(_sessionId, params) {
144
+ return this.sendCommand('wait', params);
145
+ }
146
+ // ─── Interaction ────────────────────────────────────────────────────────
147
+ async click(_sessionId, params) {
148
+ return this.sendCommand('click', params);
149
+ }
150
+ async type(_sessionId, params) {
151
+ return this.sendCommand('type', params);
152
+ }
153
+ async fill(_sessionId, params) {
154
+ return this.sendCommand('fill', params);
155
+ }
156
+ async press(_sessionId, params) {
157
+ return this.sendCommand('press', params);
158
+ }
159
+ async scroll(_sessionId, params) {
160
+ return this.sendCommand('scroll', params);
161
+ }
162
+ async hover(_sessionId, params) {
163
+ return this.sendCommand('hover', params);
164
+ }
165
+ async select(_sessionId, params) {
166
+ return this.sendCommand('select', params);
167
+ }
168
+ // ─── Observation ────────────────────────────────────────────────────────
169
+ async snapshot(_sessionId) {
170
+ return this.sendCommand('snapshot');
171
+ }
172
+ async screenshot(_sessionId, params) {
173
+ return this.sendCommand('screenshot', params || {});
174
+ }
175
+ async extract(_sessionId, params) {
176
+ return this.sendCommand('extract', params);
177
+ }
178
+ async evaluate(_sessionId, params) {
179
+ return this.sendCommand('evaluate', params);
180
+ }
181
+ // ─── Navigation History ─────────────────────────────────────────────────
182
+ async goBack(_sessionId) {
183
+ return this.sendCommand('go_back');
184
+ }
185
+ async goForward(_sessionId) {
186
+ return this.sendCommand('go_forward');
187
+ }
188
+ // ─── Tab Management ─────────────────────────────────────────────────────
189
+ async listTabs(_sessionId) {
190
+ return this.sendCommand('list_tabs');
191
+ }
192
+ async newTab(_sessionId, url) {
193
+ return this.sendCommand('new_tab', url ? { url } : undefined);
194
+ }
195
+ async closeTab(_sessionId, tabId) {
196
+ return this.sendCommand('close_tab', tabId !== undefined ? { tabId } : undefined);
197
+ }
198
+ // ─── Wait for Text ──────────────────────────────────────────────────────
199
+ async waitForText(_sessionId, params) {
200
+ return this.sendCommand('wait_for_text', params);
201
+ }
202
+ // ─── Dialog Handling ────────────────────────────────────────────────────
203
+ async getDialog(_sessionId) {
204
+ return this.sendCommand('get_dialog');
205
+ }
206
+ async handleDialog(_sessionId, params) {
207
+ return this.sendCommand('handle_dialog', params);
208
+ }
209
+ // ─── Monitoring ─────────────────────────────────────────────────────────
210
+ async getConsoleMessages(_sessionId) {
211
+ return this.sendCommand('console_messages');
212
+ }
213
+ async getNetworkRequests(_sessionId) {
214
+ return this.sendCommand('network_requests');
215
+ }
216
+ async clearLogs(_sessionId) {
217
+ return this.sendCommand('clear_logs');
218
+ }
219
+ // ─── Task Planning (not available in extension mode) ────────────────────
220
+ async createTask(_params) {
221
+ return { success: false, error: 'Task planning is not available in extension mode' };
222
+ }
223
+ async executeTask(_planId) {
224
+ return { success: false, error: 'Task execution is not available in extension mode' };
225
+ }
226
+ async getTaskStatus(_planId) {
227
+ return { success: false, error: 'Task status is not available in extension mode' };
228
+ }
229
+ async runLocalAction(_params) {
230
+ return {
231
+ success: false,
232
+ error: 'local_action_run is not supported in extension proxy mode',
233
+ code: 'UNSUPPORTED_IN_EXTENSION_PROXY',
234
+ hint: 'Use local MCP mode to run native-host local actions.',
235
+ };
236
+ }
237
+ async getLocalActionStatus(_actionId) {
238
+ return {
239
+ success: false,
240
+ error: 'local_action_status is not supported in extension proxy mode',
241
+ code: 'UNSUPPORTED_IN_EXTENSION_PROXY',
242
+ hint: 'Use local MCP mode to query native-host local actions.',
243
+ };
244
+ }
245
+ async cancelLocalAction(_actionId) {
246
+ return {
247
+ success: false,
248
+ error: 'local_action_cancel is not supported in extension proxy mode',
249
+ code: 'UNSUPPORTED_IN_EXTENSION_PROXY',
250
+ hint: 'Use local MCP mode to cancel native-host local actions.',
251
+ };
252
+ }
253
+ async getLocalDiagnostics(_options) {
254
+ return {
255
+ success: false,
256
+ code: 'LOCAL_ONLY_TOOL',
257
+ error: 'Local diagnostics are not available in extension proxy mode',
258
+ hint: 'Use local MCP mode to inspect native-host continuity and bridge recovery state.',
259
+ };
260
+ }
261
+ async resetLocalConnection() {
262
+ return {
263
+ success: false,
264
+ code: 'LOCAL_ONLY_TOOL',
265
+ error: 'Local connection reset is not available in extension proxy mode',
266
+ hint: 'Use local MCP mode to access the native-host circuit-breaker reset path.',
267
+ };
268
+ }
269
+ // --- Stateless page cache (HTTP → mech-browser-service when configured) ---
270
+ resolvePageCacheAuth() {
271
+ const baseUrl = (this.serviceBaseUrl || process.env.THINKRUN_BASE_URL || '').replace(/\/$/, '');
272
+ const apiKey = this.serviceApiKey || process.env.THINKRUN_API_KEY || '';
273
+ if (!baseUrl || !apiKey)
274
+ return null;
275
+ return { baseUrl, apiKey };
276
+ }
277
+ async pageCacheHtml(params) {
278
+ const auth = this.resolvePageCacheAuth();
279
+ if (!auth) {
280
+ return {
281
+ success: false,
282
+ error: 'Page cache is not configured for extension proxy mode. Set THINKRUN_BASE_URL and THINKRUN_API_KEY.',
283
+ };
284
+ }
285
+ try {
286
+ return await fetchPageCacheJson(auth.baseUrl, auth.apiKey, '/api/cache/html', params);
287
+ }
288
+ catch (e) {
289
+ if (e instanceof PageCacheRequestError) {
290
+ throw new ApiError(e.message, e.status, e.code, e.hint);
291
+ }
292
+ throw e;
293
+ }
294
+ }
295
+ async pageCacheText(params) {
296
+ const auth = this.resolvePageCacheAuth();
297
+ if (!auth) {
298
+ return {
299
+ success: false,
300
+ error: 'Page cache is not configured for extension proxy mode. Set THINKRUN_BASE_URL and THINKRUN_API_KEY.',
301
+ };
302
+ }
303
+ try {
304
+ return await fetchPageCacheJson(auth.baseUrl, auth.apiKey, '/api/cache/text', params);
305
+ }
306
+ catch (e) {
307
+ if (e instanceof PageCacheRequestError) {
308
+ throw new ApiError(e.message, e.status, e.code, e.hint);
309
+ }
310
+ throw e;
311
+ }
312
+ }
313
+ async pageCacheScreenshot(params) {
314
+ const auth = this.resolvePageCacheAuth();
315
+ if (!auth) {
316
+ return {
317
+ success: false,
318
+ error: 'Page cache is not configured for extension proxy mode. Set THINKRUN_BASE_URL and THINKRUN_API_KEY.',
319
+ };
320
+ }
321
+ try {
322
+ return await fetchPageCacheJson(auth.baseUrl, auth.apiKey, '/api/cache/screenshot', params);
323
+ }
324
+ catch (e) {
325
+ if (e instanceof PageCacheRequestError) {
326
+ throw new ApiError(e.message, e.status, e.code, e.hint);
327
+ }
328
+ throw e;
329
+ }
330
+ }
331
+ // ─── Command Transport ──────────────────────────────────────────────────
332
+ /**
333
+ * Send a command to the extension and wait for the response.
334
+ *
335
+ * Serializes the command as JSON: `{ id, command, params }`.
336
+ * Returns a promise that resolves when the extension responds with
337
+ * a matching `{ id, success, data }` message.
338
+ *
339
+ * Rejects after `commandTimeoutMs` if no response is received.
340
+ */
341
+ sendCommand(command, params) {
342
+ if (!this.ws || this.ws.readyState !== WS_OPEN) {
343
+ return Promise.reject(new ExtensionProxyError('Extension not connected', 'EXTENSION_NOT_CONNECTED', true));
344
+ }
345
+ const id = generateId();
346
+ return new Promise((resolve, reject) => {
347
+ const timeout = setTimeout(() => {
348
+ this.pending.delete(id);
349
+ reject(new ExtensionProxyError(`Command timeout (${this.commandTimeoutMs}ms): ${command}`, 'COMMAND_TIMEOUT', true));
350
+ }, this.commandTimeoutMs);
351
+ this.pending.set(id, { resolve, reject, timeout });
352
+ try {
353
+ this.ws.send(JSON.stringify({ id, command, params }));
354
+ }
355
+ catch (err) {
356
+ clearTimeout(timeout);
357
+ this.pending.delete(id);
358
+ reject(new ExtensionProxyError(`Failed to send command: ${err instanceof Error ? err.message : String(err)}`, 'SEND_FAILED', true));
359
+ }
360
+ });
361
+ }
362
+ /**
363
+ * Handle a response from the extension — resolve or reject the
364
+ * matching pending promise.
365
+ */
366
+ handleResponse(response) {
367
+ const pending = this.pending.get(response.id);
368
+ if (!pending)
369
+ return; // Stale or unknown response
370
+ clearTimeout(pending.timeout);
371
+ this.pending.delete(response.id);
372
+ if (response.success) {
373
+ pending.resolve(response.data ?? { success: true });
374
+ }
375
+ else {
376
+ pending.reject(new ExtensionProxyError(response.error || 'Command failed', response.code || 'COMMAND_FAILED', false));
377
+ }
378
+ }
379
+ // ─── Ping/Pong Keepalive ────────────────────────────────────────────────
380
+ startPing() {
381
+ this.stopPing();
382
+ this.pingTimer = setInterval(() => {
383
+ if (!this.ws || this.ws.readyState !== WS_OPEN)
384
+ return;
385
+ try {
386
+ this.ws.send(JSON.stringify({ type: 'ping', timestamp: Date.now() }));
387
+ }
388
+ catch {
389
+ // Send failed — connection likely dead
390
+ return;
391
+ }
392
+ // Start pong timeout
393
+ if (this.pongTimer)
394
+ clearTimeout(this.pongTimer);
395
+ this.pongTimer = setTimeout(() => {
396
+ // Extension didn't respond — consider connection dead
397
+ if (this.ws) {
398
+ this.ws.close(1001, 'Pong timeout');
399
+ }
400
+ this.detachWebSocket('Pong timeout');
401
+ this.onDisconnect?.('Pong timeout');
402
+ }, this.pongTimeoutMs);
403
+ }, this.pingIntervalMs);
404
+ }
405
+ stopPing() {
406
+ if (this.pingTimer) {
407
+ clearInterval(this.pingTimer);
408
+ this.pingTimer = null;
409
+ }
410
+ if (this.pongTimer) {
411
+ clearTimeout(this.pongTimer);
412
+ this.pongTimer = null;
413
+ }
414
+ }
415
+ handlePong() {
416
+ if (this.pongTimer) {
417
+ clearTimeout(this.pongTimer);
418
+ this.pongTimer = null;
419
+ }
420
+ }
421
+ // ─── Helpers ────────────────────────────────────────────────────────────
422
+ rejectAllPending(reason) {
423
+ for (const [id, pending] of this.pending) {
424
+ clearTimeout(pending.timeout);
425
+ pending.reject(new ExtensionProxyError(reason, 'DISCONNECTED', true));
426
+ }
427
+ this.pending.clear();
428
+ }
429
+ }
430
+ // ─── Error ──────────────────────────────────────────────────────────────────
431
+ export class ExtensionProxyError extends Error {
432
+ code;
433
+ retryable;
434
+ constructor(message, code, retryable) {
435
+ super(message);
436
+ this.code = code;
437
+ this.retryable = retryable;
438
+ this.name = 'ExtensionProxyError';
439
+ }
440
+ }
441
+ // ─── Utilities ──────────────────────────────────────────────────────────────
442
+ /** Generate a short unique ID for command correlation. */
443
+ function generateId() {
444
+ // crypto.randomUUID() is available in Node 19+ and all modern browsers.
445
+ // Fall back to a timestamp + random suffix for older runtimes.
446
+ if (typeof globalThis.crypto?.randomUUID === 'function') {
447
+ return globalThis.crypto.randomUUID();
448
+ }
449
+ return `${Date.now()}-${Math.random().toString(36).substring(2, 10)}`;
450
+ }
451
+ //# sourceMappingURL=extension-proxy-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-proxy-client.js","sourceRoot":"","sources":["../../src/extension-proxy-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { createServer, applyLifecycleDefaultSession } from './server.js';
2
+ export type { CreateServerOptions, DefaultSessionRef, ClientRef, SetModeHandler, SetModeResult, LocalSessionLifecycleOperation, ApplyLifecycleDefaultSessionArgs, } from './server.js';
3
+ export { CloudClient } from './cloud-client.js';
4
+ export { LocalClient, BridgeError, LocalEndpointNotFoundError, DEFAULT_PORT, DEFAULT_NATIVE_HOST_PORT, DEFAULT_BRIDGE_PORT, } from './local-client.js';
5
+ export type { LocalClientConfig } from './local-client.js';
6
+ export { ExtensionProxyClient, ExtensionProxyError, } from './extension-proxy-client.js';
7
+ export type { ExtensionProxyClientConfig, ProxyWebSocket, } from './extension-proxy-client.js';
8
+ export type { ThinkRunClient, LocalSessionResult, PageCacheRequestBody, PageCacheOptions, PageCacheHtmlResult, PageCacheTextResult, PageCacheScreenshotResult, } from './client.js';
9
+ export { fetchPageCacheJson, PageCacheRequestError } from './page-cache-http.js';
10
+ export type { PageCachePath } from './page-cache-http.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,aAAa,EACb,8BAA8B,EAC9B,gCAAgC,GACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,WAAW,EACX,WAAW,EACX,0BAA0B,EAC1B,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,0BAA0B,EAC1B,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACjF,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { createServer, applyLifecycleDefaultSession } from './server.js';
2
+ export { CloudClient } from './cloud-client.js';
3
+ export { LocalClient, BridgeError, LocalEndpointNotFoundError, DEFAULT_PORT, DEFAULT_NATIVE_HOST_PORT, DEFAULT_BRIDGE_PORT, } from './local-client.js';
4
+ export { ExtensionProxyClient, ExtensionProxyError, } from './extension-proxy-client.js';
5
+ export { fetchPageCacheJson, PageCacheRequestError } from './page-cache-http.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAUzE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,WAAW,EACX,WAAW,EACX,0BAA0B,EAC1B,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AAcrC,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,120 @@
1
+ import type { ThinkRunClient, CreateSessionOptions, LocalSessionResult, SessionResult, NavigateParams, WaitParams, ClickParams, TypeParams, FillParams, PressParams, ScrollParams, HoverParams, SelectParams, ScreenshotParams, ExtractParams, EvaluateParams, CreateTaskParams, LocalActionRunParams, WaitForTextParams, HandleDialogParams, DialogResult, ActionResult, SnapshotResult, ScreenshotResult, ExtractResult, EvaluateResult, TabInfo, TabListResult, ConsoleResult, NetworkResult, TaskResult, LocalActionResult, LocalActionStatusResult, LocalActionCancelResult, LocalDiagnosticsResult, LocalResetConnectionResult, ArtifactsResult, PageCacheRequestBody, PageCacheHtmlResult, PageCacheTextResult, PageCacheScreenshotResult } from './client.js';
2
+ /** Default port for the native messaging host. */
3
+ export declare const DEFAULT_PORT = 3012;
4
+ /** @deprecated Use DEFAULT_PORT instead. */
5
+ export declare const DEFAULT_NATIVE_HOST_PORT = 3012;
6
+ /** @deprecated Bridge server has been removed. */
7
+ export declare const DEFAULT_BRIDGE_PORT = 3012;
8
+ export interface LocalClientConfig {
9
+ /**
10
+ * Port to connect to. Defaults to 3012 (native host).
11
+ * Also accepts the legacy `bridgePort` name for backwards compatibility.
12
+ */
13
+ port?: number;
14
+ /** @deprecated Use `port` instead. */
15
+ bridgePort?: number;
16
+ /**
17
+ * Timeout in milliseconds for health check during auto-detection.
18
+ * Defaults to 1000 (1 second) — balances fast startup against false negatives
19
+ * when the native host is running but slow to respond.
20
+ */
21
+ healthCheckTimeoutMs?: number;
22
+ /**
23
+ * Base URL of mech-browser-service for `/api/cache/*` (native host does not expose these routes).
24
+ * Defaults to `THINKRUN_BASE_URL` when set.
25
+ */
26
+ serviceBaseUrl?: string;
27
+ /**
28
+ * API key for `serviceBaseUrl` page-cache calls. Defaults to `THINKRUN_API_KEY`.
29
+ */
30
+ serviceApiKey?: string;
31
+ }
32
+ export declare class LocalClient implements ThinkRunClient {
33
+ private baseUrl;
34
+ private tabId;
35
+ /** Agent session ID from the extension's session registry. */
36
+ private agentSessionId;
37
+ private windowId;
38
+ /** mech-browser-service base URL for `/api/cache/*` only (native host does not serve these routes). */
39
+ private readonly serviceBaseUrl?;
40
+ private readonly serviceApiKey?;
41
+ constructor(config: LocalClientConfig & {
42
+ _resolvedBaseUrl?: string;
43
+ });
44
+ /**
45
+ * Create a LocalClient after verifying the native host is reachable.
46
+ *
47
+ * @throws {LocalEndpointNotFoundError} when the native host is not reachable.
48
+ */
49
+ static create(config?: LocalClientConfig): Promise<LocalClient>;
50
+ private request;
51
+ private requestWithoutSessionHeaders;
52
+ private getBridgeHealth;
53
+ private buildSessionResult;
54
+ private unregisterCurrentAgentSession;
55
+ private registerTabSession;
56
+ createSession(_options?: CreateSessionOptions): Promise<SessionResult>;
57
+ getSession(sessionId: string): Promise<SessionResult>;
58
+ deleteSession(sessionId: string): Promise<{
59
+ success: boolean;
60
+ }>;
61
+ listSessions(): Promise<SessionResult[]>;
62
+ attachToTab(tabId: number): Promise<LocalSessionResult>;
63
+ switchToTab(tabId: number): Promise<ActionResult>;
64
+ openNewWindow(url?: string): Promise<LocalSessionResult>;
65
+ releaseSession(sessionId?: string): Promise<ActionResult>;
66
+ listArtifacts(_sessionId: string): Promise<ArtifactsResult>;
67
+ navigate(sessionId: string, params: NavigateParams): Promise<ActionResult>;
68
+ wait(sessionId: string, params: WaitParams): Promise<ActionResult>;
69
+ click(sessionId: string, params: ClickParams): Promise<ActionResult>;
70
+ type(sessionId: string, params: TypeParams): Promise<ActionResult>;
71
+ fill(sessionId: string, params: FillParams): Promise<ActionResult>;
72
+ press(sessionId: string, params: PressParams): Promise<ActionResult>;
73
+ scroll(sessionId: string, params: ScrollParams): Promise<ActionResult>;
74
+ hover(sessionId: string, params: HoverParams): Promise<ActionResult>;
75
+ select(sessionId: string, params: SelectParams): Promise<ActionResult>;
76
+ snapshot(sessionId: string): Promise<SnapshotResult>;
77
+ screenshot(sessionId: string, params?: ScreenshotParams): Promise<ScreenshotResult>;
78
+ extract(sessionId: string, params: ExtractParams): Promise<ExtractResult>;
79
+ evaluate(sessionId: string, params: EvaluateParams): Promise<EvaluateResult>;
80
+ waitForText(sessionId: string, params: WaitForTextParams): Promise<ActionResult>;
81
+ getDialog(sessionId: string): Promise<DialogResult>;
82
+ handleDialog(sessionId: string, params: HandleDialogParams): Promise<ActionResult>;
83
+ goBack(sessionId: string): Promise<ActionResult>;
84
+ goForward(sessionId: string): Promise<ActionResult>;
85
+ listTabs(_sessionId: string): Promise<TabListResult>;
86
+ newTab(_sessionId: string, url?: string): Promise<TabInfo>;
87
+ closeTab(sessionId: string, tabId?: number): Promise<ActionResult>;
88
+ getConsoleMessages(sessionId: string): Promise<ConsoleResult>;
89
+ getNetworkRequests(sessionId: string): Promise<NetworkResult>;
90
+ clearLogs(sessionId: string): Promise<ActionResult>;
91
+ createTask(_params: CreateTaskParams): Promise<TaskResult>;
92
+ executeTask(_planId: string): Promise<TaskResult>;
93
+ getTaskStatus(_planId: string): Promise<TaskResult>;
94
+ runLocalAction(params: LocalActionRunParams): Promise<LocalActionResult>;
95
+ getLocalActionStatus(actionId: string): Promise<LocalActionStatusResult>;
96
+ cancelLocalAction(actionId: string): Promise<LocalActionCancelResult>;
97
+ getLocalDiagnostics(options?: {
98
+ bridgeTimeoutMs?: number;
99
+ }): Promise<LocalDiagnosticsResult>;
100
+ resetLocalConnection(): Promise<LocalResetConnectionResult>;
101
+ private resolvePageCacheAuth;
102
+ private pageCacheUnavailableError;
103
+ private pageCacheRetryable;
104
+ pageCacheHtml(params: PageCacheRequestBody): Promise<PageCacheHtmlResult>;
105
+ pageCacheText(params: PageCacheRequestBody): Promise<PageCacheTextResult>;
106
+ pageCacheScreenshot(params: PageCacheRequestBody): Promise<PageCacheScreenshotResult>;
107
+ private extractTabId;
108
+ private ensureTab;
109
+ private requireBoundLocalActionTabId;
110
+ }
111
+ export declare class BridgeError extends Error {
112
+ status: number;
113
+ code?: string | undefined;
114
+ retryable?: boolean | undefined;
115
+ constructor(message: string, status: number, code?: string | undefined, retryable?: boolean | undefined);
116
+ }
117
+ export declare class LocalEndpointNotFoundError extends Error {
118
+ constructor(port: number);
119
+ }
120
+ //# sourceMappingURL=local-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-client.d.ts","sourceRoot":"","sources":["../../src/local-client.ts"],"names":[],"mappings":"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"}