agentmb 0.1.0

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 (91) hide show
  1. package/INSTALL.md +154 -0
  2. package/README.md +228 -0
  3. package/dist/audit/logger.d.ts +25 -0
  4. package/dist/audit/logger.d.ts.map +1 -0
  5. package/dist/audit/logger.js +56 -0
  6. package/dist/audit/logger.js.map +1 -0
  7. package/dist/browser/actions.d.ts +111 -0
  8. package/dist/browser/actions.d.ts.map +1 -0
  9. package/dist/browser/actions.js +291 -0
  10. package/dist/browser/actions.js.map +1 -0
  11. package/dist/browser/manager.d.ts +51 -0
  12. package/dist/browser/manager.d.ts.map +1 -0
  13. package/dist/browser/manager.js +233 -0
  14. package/dist/browser/manager.js.map +1 -0
  15. package/dist/cli/client.d.ts +13 -0
  16. package/dist/cli/client.d.ts.map +1 -0
  17. package/dist/cli/client.js +109 -0
  18. package/dist/cli/client.js.map +1 -0
  19. package/dist/cli/commands/actions.d.ts +3 -0
  20. package/dist/cli/commands/actions.d.ts.map +1 -0
  21. package/dist/cli/commands/actions.js +349 -0
  22. package/dist/cli/commands/actions.js.map +1 -0
  23. package/dist/cli/commands/pages.d.ts +3 -0
  24. package/dist/cli/commands/pages.d.ts.map +1 -0
  25. package/dist/cli/commands/pages.js +107 -0
  26. package/dist/cli/commands/pages.js.map +1 -0
  27. package/dist/cli/commands/route.d.ts +3 -0
  28. package/dist/cli/commands/route.d.ts.map +1 -0
  29. package/dist/cli/commands/route.js +72 -0
  30. package/dist/cli/commands/route.js.map +1 -0
  31. package/dist/cli/commands/session.d.ts +3 -0
  32. package/dist/cli/commands/session.d.ts.map +1 -0
  33. package/dist/cli/commands/session.js +57 -0
  34. package/dist/cli/commands/session.js.map +1 -0
  35. package/dist/cli/commands/start.d.ts +8 -0
  36. package/dist/cli/commands/start.d.ts.map +1 -0
  37. package/dist/cli/commands/start.js +66 -0
  38. package/dist/cli/commands/start.js.map +1 -0
  39. package/dist/cli/commands/status.d.ts +6 -0
  40. package/dist/cli/commands/status.d.ts.map +1 -0
  41. package/dist/cli/commands/status.js +25 -0
  42. package/dist/cli/commands/status.js.map +1 -0
  43. package/dist/cli/commands/stop.d.ts +6 -0
  44. package/dist/cli/commands/stop.d.ts.map +1 -0
  45. package/dist/cli/commands/stop.js +53 -0
  46. package/dist/cli/commands/stop.js.map +1 -0
  47. package/dist/cli/commands/trace.d.ts +3 -0
  48. package/dist/cli/commands/trace.d.ts.map +1 -0
  49. package/dist/cli/commands/trace.js +43 -0
  50. package/dist/cli/commands/trace.js.map +1 -0
  51. package/dist/cli/index.d.ts +3 -0
  52. package/dist/cli/index.d.ts.map +1 -0
  53. package/dist/cli/index.js +44 -0
  54. package/dist/cli/index.js.map +1 -0
  55. package/dist/daemon/config.d.ts +25 -0
  56. package/dist/daemon/config.d.ts.map +1 -0
  57. package/dist/daemon/config.js +35 -0
  58. package/dist/daemon/config.js.map +1 -0
  59. package/dist/daemon/index.d.ts +7 -0
  60. package/dist/daemon/index.d.ts.map +1 -0
  61. package/dist/daemon/index.js +84 -0
  62. package/dist/daemon/index.js.map +1 -0
  63. package/dist/daemon/routes/actions.d.ts +5 -0
  64. package/dist/daemon/routes/actions.d.ts.map +1 -0
  65. package/dist/daemon/routes/actions.js +425 -0
  66. package/dist/daemon/routes/actions.js.map +1 -0
  67. package/dist/daemon/routes/sessions.d.ts +5 -0
  68. package/dist/daemon/routes/sessions.d.ts.map +1 -0
  69. package/dist/daemon/routes/sessions.js +507 -0
  70. package/dist/daemon/routes/sessions.js.map +1 -0
  71. package/dist/daemon/server.d.ts +6 -0
  72. package/dist/daemon/server.d.ts.map +1 -0
  73. package/dist/daemon/server.js +66 -0
  74. package/dist/daemon/server.js.map +1 -0
  75. package/dist/daemon/session.d.ts +52 -0
  76. package/dist/daemon/session.d.ts.map +1 -0
  77. package/dist/daemon/session.js +191 -0
  78. package/dist/daemon/session.js.map +1 -0
  79. package/dist/daemon/types.d.ts +17 -0
  80. package/dist/daemon/types.d.ts.map +1 -0
  81. package/dist/daemon/types.js +3 -0
  82. package/dist/daemon/types.js.map +1 -0
  83. package/dist/policy/engine.d.ts +43 -0
  84. package/dist/policy/engine.d.ts.map +1 -0
  85. package/dist/policy/engine.js +234 -0
  86. package/dist/policy/engine.js.map +1 -0
  87. package/dist/policy/types.d.ts +40 -0
  88. package/dist/policy/types.d.ts.map +1 -0
  89. package/dist/policy/types.js +53 -0
  90. package/dist/policy/types.js.map +1 -0
  91. package/package.json +61 -0
@@ -0,0 +1,291 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ActionDiagnosticsError = void 0;
7
+ exports.navigate = navigate;
8
+ exports.click = click;
9
+ exports.fill = fill;
10
+ exports.evaluate = evaluate;
11
+ exports.extract = extract;
12
+ exports.screenshot = screenshot;
13
+ exports.typeText = typeText;
14
+ exports.press = press;
15
+ exports.selectOption = selectOption;
16
+ exports.hover = hover;
17
+ exports.waitForSelector = waitForSelector;
18
+ exports.waitForUrl = waitForUrl;
19
+ exports.waitForResponse = waitForResponse;
20
+ exports.uploadFile = uploadFile;
21
+ exports.downloadFile = downloadFile;
22
+ const crypto_1 = __importDefault(require("crypto"));
23
+ const fs_1 = __importDefault(require("fs"));
24
+ class ActionDiagnosticsError extends Error {
25
+ diagnostics;
26
+ constructor(diagnostics) {
27
+ super(diagnostics.error);
28
+ this.name = 'ActionDiagnosticsError';
29
+ this.diagnostics = diagnostics;
30
+ }
31
+ }
32
+ exports.ActionDiagnosticsError = ActionDiagnosticsError;
33
+ async function collectDiagnostics(page, t0, err) {
34
+ const e = err instanceof Error ? err : new Error(String(err));
35
+ const elapsedMs = Date.now() - t0;
36
+ const url = page.url();
37
+ let title = '';
38
+ let readyState = '';
39
+ try {
40
+ title = await page.title();
41
+ }
42
+ catch { /* ignore */ }
43
+ try {
44
+ readyState = await page.evaluate('document.readyState');
45
+ }
46
+ catch { /* ignore */ }
47
+ return { error: e.message, url, title, readyState, elapsedMs, stack: e.stack };
48
+ }
49
+ function actionId() {
50
+ return 'act_' + crypto_1.default.randomBytes(6).toString('hex');
51
+ }
52
+ async function navigate(page, url, waitUntil = 'load', logger, sessionId, purpose, operator) {
53
+ const id = actionId();
54
+ const t0 = Date.now();
55
+ await page.goto(url, { waitUntil });
56
+ const duration_ms = Date.now() - t0;
57
+ const title = await page.title();
58
+ const result = { status: 'ok', url, title, duration_ms };
59
+ logger?.write({ session_id: sessionId, action_id: id, type: 'action', action: 'navigate', url, params: { wait_until: waitUntil }, result, purpose, operator });
60
+ return result;
61
+ }
62
+ async function click(page, selector, timeoutMs = 5000, logger, sessionId, purpose, operator) {
63
+ const id = actionId();
64
+ const t0 = Date.now();
65
+ await page.click(selector, { timeout: timeoutMs });
66
+ const duration_ms = Date.now() - t0;
67
+ const result = { status: 'ok', selector, duration_ms };
68
+ logger?.write({ session_id: sessionId, action_id: id, type: 'action', action: 'click', url: page.url(), selector, params: { timeout_ms: timeoutMs }, result, purpose, operator });
69
+ return result;
70
+ }
71
+ async function fill(page, selector, value, logger, sessionId, purpose, operator) {
72
+ const id = actionId();
73
+ const t0 = Date.now();
74
+ await page.fill(selector, value);
75
+ const duration_ms = Date.now() - t0;
76
+ const result = { status: 'ok', selector, duration_ms };
77
+ // value is intentionally omitted from audit to avoid leaking secrets
78
+ logger?.write({ session_id: sessionId, action_id: id, type: 'action', action: 'fill', url: page.url(), selector, params: { value: '[REDACTED]' }, result, purpose, operator });
79
+ return result;
80
+ }
81
+ async function evaluate(page, expression, logger, sessionId, purpose, operator) {
82
+ const id = actionId();
83
+ const t0 = Date.now();
84
+ try {
85
+ const evalResult = await page.evaluate(expression);
86
+ const duration_ms = Date.now() - t0;
87
+ const result = { status: 'ok', result: evalResult, duration_ms };
88
+ logger?.write({ session_id: sessionId, action_id: id, type: 'action', action: 'eval', url: page.url(), params: { expression }, result: { status: 'ok', duration_ms }, purpose, operator });
89
+ return result;
90
+ }
91
+ catch (err) {
92
+ throw new ActionDiagnosticsError(await collectDiagnostics(page, t0, err));
93
+ }
94
+ }
95
+ async function extract(page, selector, attribute, logger, sessionId, purpose, operator) {
96
+ const id = actionId();
97
+ const t0 = Date.now();
98
+ try {
99
+ // Use $$eval to safely extract text/attribute without arbitrary JS
100
+ const items = await page.$$eval(selector,
101
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
102
+ (els, attr) => els.map((el) => {
103
+ const text = el.innerText ?? el.textContent ?? '';
104
+ const result = { text: text.trim() };
105
+ if (attr)
106
+ result[attr] = el.getAttribute(attr);
107
+ return result;
108
+ }), attribute ?? null);
109
+ const duration_ms = Date.now() - t0;
110
+ const result = { status: 'ok', selector, items, count: items.length, duration_ms };
111
+ logger?.write({
112
+ session_id: sessionId,
113
+ action_id: id,
114
+ type: 'action',
115
+ action: 'extract',
116
+ url: page.url(),
117
+ selector,
118
+ params: { attribute: attribute ?? null },
119
+ result: { status: 'ok', count: items.length, duration_ms },
120
+ purpose,
121
+ operator,
122
+ });
123
+ return result;
124
+ }
125
+ catch (err) {
126
+ throw new ActionDiagnosticsError(await collectDiagnostics(page, t0, err));
127
+ }
128
+ }
129
+ async function screenshot(page, format = 'png', fullPage = false, logger, sessionId, purpose, operator) {
130
+ const id = actionId();
131
+ const t0 = Date.now();
132
+ try {
133
+ const buffer = await page.screenshot({ type: format, fullPage });
134
+ const duration_ms = Date.now() - t0;
135
+ const data = buffer.toString('base64');
136
+ const result = { status: 'ok', data, format, duration_ms };
137
+ logger?.write({ session_id: sessionId, action_id: id, type: 'action', action: 'screenshot', url: page.url(), params: { format, full_page: fullPage }, result: { status: 'ok', size_bytes: buffer.length, duration_ms }, purpose, operator });
138
+ return result;
139
+ }
140
+ catch (err) {
141
+ throw new ActionDiagnosticsError(await collectDiagnostics(page, t0, err));
142
+ }
143
+ }
144
+ // ---------------------------------------------------------------------------
145
+ // R05 actions
146
+ // ---------------------------------------------------------------------------
147
+ async function typeText(page, selector, text, delayMs = 0, logger, sessionId, purpose, operator) {
148
+ const id = actionId();
149
+ const t0 = Date.now();
150
+ try {
151
+ await page.locator(selector).pressSequentially(text, { delay: delayMs });
152
+ const duration_ms = Date.now() - t0;
153
+ const result = { status: 'ok', selector, duration_ms };
154
+ logger?.write({ session_id: sessionId, action_id: id, type: 'action', action: 'type', url: page.url(), selector, params: { delay_ms: delayMs }, result, purpose, operator });
155
+ return result;
156
+ }
157
+ catch (err) {
158
+ throw new ActionDiagnosticsError(await collectDiagnostics(page, t0, err));
159
+ }
160
+ }
161
+ async function press(page, selector, key, logger, sessionId, purpose, operator) {
162
+ const id = actionId();
163
+ const t0 = Date.now();
164
+ try {
165
+ await page.press(selector, key);
166
+ const duration_ms = Date.now() - t0;
167
+ const result = { status: 'ok', selector, key, duration_ms };
168
+ logger?.write({ session_id: sessionId, action_id: id, type: 'action', action: 'press', url: page.url(), selector, params: { key }, result, purpose, operator });
169
+ return result;
170
+ }
171
+ catch (err) {
172
+ throw new ActionDiagnosticsError(await collectDiagnostics(page, t0, err));
173
+ }
174
+ }
175
+ async function selectOption(page, selector, values, logger, sessionId, purpose, operator) {
176
+ const id = actionId();
177
+ const t0 = Date.now();
178
+ try {
179
+ const selected = await page.selectOption(selector, values);
180
+ const duration_ms = Date.now() - t0;
181
+ const result = { status: 'ok', selector, selected, duration_ms };
182
+ logger?.write({ session_id: sessionId, action_id: id, type: 'action', action: 'select', url: page.url(), selector, params: { values }, result, purpose, operator });
183
+ return result;
184
+ }
185
+ catch (err) {
186
+ throw new ActionDiagnosticsError(await collectDiagnostics(page, t0, err));
187
+ }
188
+ }
189
+ async function hover(page, selector, logger, sessionId, purpose, operator) {
190
+ const id = actionId();
191
+ const t0 = Date.now();
192
+ try {
193
+ await page.hover(selector);
194
+ const duration_ms = Date.now() - t0;
195
+ const result = { status: 'ok', selector, duration_ms };
196
+ logger?.write({ session_id: sessionId, action_id: id, type: 'action', action: 'hover', url: page.url(), selector, params: {}, result, purpose, operator });
197
+ return result;
198
+ }
199
+ catch (err) {
200
+ throw new ActionDiagnosticsError(await collectDiagnostics(page, t0, err));
201
+ }
202
+ }
203
+ async function waitForSelector(page, selector, state = 'visible', timeoutMs = 5000, logger, sessionId, purpose, operator) {
204
+ const id = actionId();
205
+ const t0 = Date.now();
206
+ try {
207
+ await page.waitForSelector(selector, { state, timeout: timeoutMs });
208
+ const duration_ms = Date.now() - t0;
209
+ const result = { status: 'ok', selector, state, duration_ms };
210
+ logger?.write({ session_id: sessionId, action_id: id, type: 'action', action: 'wait_for_selector', url: page.url(), selector, params: { state, timeout_ms: timeoutMs }, result, purpose, operator });
211
+ return result;
212
+ }
213
+ catch (err) {
214
+ throw new ActionDiagnosticsError(await collectDiagnostics(page, t0, err));
215
+ }
216
+ }
217
+ async function waitForUrl(page, urlPattern, timeoutMs = 5000, logger, sessionId, purpose, operator) {
218
+ const id = actionId();
219
+ const t0 = Date.now();
220
+ try {
221
+ await page.waitForURL(urlPattern, { timeout: timeoutMs });
222
+ const duration_ms = Date.now() - t0;
223
+ const url = page.url();
224
+ const result = { status: 'ok', url, duration_ms };
225
+ logger?.write({ session_id: sessionId, action_id: id, type: 'action', action: 'wait_for_url', url, params: { pattern: urlPattern, timeout_ms: timeoutMs }, result, purpose, operator });
226
+ return result;
227
+ }
228
+ catch (err) {
229
+ throw new ActionDiagnosticsError(await collectDiagnostics(page, t0, err));
230
+ }
231
+ }
232
+ async function waitForResponse(page, urlPattern, timeoutMs = 10000, trigger, logger, sessionId, purpose, operator) {
233
+ const id = actionId();
234
+ const t0 = Date.now();
235
+ try {
236
+ const responsePromise = page.waitForResponse((r) => r.url().includes(urlPattern), { timeout: timeoutMs });
237
+ if (trigger?.type === 'navigate') {
238
+ await page.goto(trigger.url, { waitUntil: trigger.waitUntil ?? 'commit' });
239
+ }
240
+ const response = await responsePromise;
241
+ const duration_ms = Date.now() - t0;
242
+ const result = { status: 'ok', url: response.url(), status_code: response.status(), duration_ms };
243
+ logger?.write({ session_id: sessionId, action_id: id, type: 'action', action: 'wait_for_response', url: page.url(), params: { url_pattern: urlPattern }, result, purpose, operator });
244
+ return result;
245
+ }
246
+ catch (err) {
247
+ throw new ActionDiagnosticsError(await collectDiagnostics(page, t0, err));
248
+ }
249
+ }
250
+ async function uploadFile(page, selector, fileContent, filename, mimeType = 'application/octet-stream', logger, sessionId, purpose, operator) {
251
+ const id = actionId();
252
+ const t0 = Date.now();
253
+ try {
254
+ const buffer = Buffer.from(fileContent, 'base64');
255
+ await page.setInputFiles(selector, { name: filename, mimeType, buffer });
256
+ const duration_ms = Date.now() - t0;
257
+ const result = { status: 'ok', selector, filename, size_bytes: buffer.length, duration_ms };
258
+ logger?.write({ session_id: sessionId, action_id: id, type: 'action', action: 'upload', url: page.url(), selector, params: { filename, mime_type: mimeType, size_bytes: buffer.length }, result, purpose, operator });
259
+ return result;
260
+ }
261
+ catch (err) {
262
+ throw new ActionDiagnosticsError(await collectDiagnostics(page, t0, err));
263
+ }
264
+ }
265
+ async function downloadFile(page, selector, timeoutMs = 30000, maxBytes = 50 * 1024 * 1024, logger, sessionId, purpose, operator) {
266
+ const id = actionId();
267
+ const t0 = Date.now();
268
+ try {
269
+ const [download] = await Promise.all([
270
+ page.waitForEvent('download', { timeout: timeoutMs }),
271
+ page.click(selector),
272
+ ]);
273
+ const downloadPath = await download.path();
274
+ if (!downloadPath)
275
+ throw new Error('Download failed: no path returned');
276
+ const stat = fs_1.default.statSync(downloadPath);
277
+ if (stat.size > maxBytes) {
278
+ throw new Error(`Download too large: ${stat.size} bytes exceeds limit of ${maxBytes} bytes`);
279
+ }
280
+ const buffer = fs_1.default.readFileSync(downloadPath);
281
+ const filename = download.suggestedFilename();
282
+ const duration_ms = Date.now() - t0;
283
+ const result = { status: 'ok', filename, data: buffer.toString('base64'), size_bytes: buffer.length, duration_ms };
284
+ logger?.write({ session_id: sessionId, action_id: id, type: 'action', action: 'download', url: page.url(), selector, params: { timeout_ms: timeoutMs }, result: { status: 'ok', filename, size_bytes: buffer.length, duration_ms }, purpose, operator });
285
+ return result;
286
+ }
287
+ catch (err) {
288
+ throw new ActionDiagnosticsError(await collectDiagnostics(page, t0, err));
289
+ }
290
+ }
291
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/browser/actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { SessionRegistry } from '../daemon/session';
2
+ import { DaemonConfig } from '../daemon/config';
3
+ export interface PageInfo {
4
+ page_id: string;
5
+ url: string;
6
+ active: boolean;
7
+ }
8
+ export interface RouteMockConfig {
9
+ status?: number;
10
+ headers?: Record<string, string>;
11
+ body?: string;
12
+ content_type?: string;
13
+ }
14
+ export declare class BrowserManager {
15
+ private registry;
16
+ private config;
17
+ private contexts;
18
+ /** Per-session multi-page tracking */
19
+ private sessionPages;
20
+ /** Per-session network route mocks */
21
+ private sessionRoutes;
22
+ /** Per-session acceptDownloads setting (default: false) */
23
+ private sessionAcceptDownloads;
24
+ constructor(registry: SessionRegistry, config: DaemonConfig);
25
+ private newPageId;
26
+ launchSession(sessionId: string, opts: {
27
+ profile?: string;
28
+ headless?: boolean;
29
+ acceptDownloads?: boolean;
30
+ }): Promise<void>;
31
+ createPage(sessionId: string): Promise<{
32
+ page_id: string;
33
+ url: string;
34
+ }>;
35
+ listPages(sessionId: string): PageInfo[];
36
+ switchPage(sessionId: string, pageId: string): void;
37
+ closePage(sessionId: string, pageId: string): Promise<void>;
38
+ getActivePageId(sessionId: string): string | undefined;
39
+ getCdpWsUrl(sessionId: string): string | null;
40
+ addRoute(sessionId: string, pattern: string, mock: RouteMockConfig): Promise<void>;
41
+ removeRoute(sessionId: string, pattern: string): Promise<void>;
42
+ listRoutes(sessionId: string): Array<{
43
+ pattern: string;
44
+ mock: RouteMockConfig;
45
+ }>;
46
+ private cleanupRoutes;
47
+ switchMode(sessionId: string, headed: boolean): Promise<void>;
48
+ getAcceptDownloads(sessionId: string): boolean;
49
+ closeSession(sessionId: string): Promise<void>;
50
+ }
51
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/browser/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAe,MAAM,kBAAkB,CAAA;AAE5D,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,OAAO,CAAA;CAChB;AAWD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAQD,qBAAa,cAAc;IAUvB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IAVhB,OAAO,CAAC,QAAQ,CAA6D;IAC7E,sCAAsC;IACtC,OAAO,CAAC,YAAY,CAAsC;IAC1D,sCAAsC;IACtC,OAAO,CAAC,aAAa,CAA6C;IAClE,2DAA2D;IAC3D,OAAO,CAAC,sBAAsB,CAA6B;gBAGjD,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,YAAY;IAG9B,OAAO,CAAC,SAAS;IAIX,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GACxE,OAAO,CAAC,IAAI,CAAC;IAqCV,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAU9E,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,EAAE;IAUxC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAW7C,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBjE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQtD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAYvC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBlF,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,eAAe,CAAA;KAAE,CAAC;YAMlE,aAAa;IAcrB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BnE,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIxC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAWrD"}
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BrowserManager = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const playwright_core_1 = require("playwright-core");
10
+ const config_1 = require("../daemon/config");
11
+ class BrowserManager {
12
+ registry;
13
+ config;
14
+ contexts = new Map();
15
+ /** Per-session multi-page tracking */
16
+ sessionPages = new Map();
17
+ /** Per-session network route mocks */
18
+ sessionRoutes = new Map();
19
+ /** Per-session acceptDownloads setting (default: false) */
20
+ sessionAcceptDownloads = new Map();
21
+ constructor(registry, config) {
22
+ this.registry = registry;
23
+ this.config = config;
24
+ }
25
+ newPageId() {
26
+ return 'page_' + crypto_1.default.randomBytes(4).toString('hex');
27
+ }
28
+ async launchSession(sessionId, opts) {
29
+ const profile = opts.profile ?? 'default';
30
+ const headless = opts.headless ?? true;
31
+ const acceptDownloads = opts.acceptDownloads ?? false;
32
+ // Persist so switchMode can restore the same setting on relaunch
33
+ this.sessionAcceptDownloads.set(sessionId, acceptDownloads);
34
+ const userDataDir = path_1.default.join((0, config_1.profilesDir)(this.config), profile);
35
+ const context = await playwright_core_1.chromium.launchPersistentContext(userDataDir, {
36
+ headless,
37
+ acceptDownloads,
38
+ args: [
39
+ '--no-sandbox',
40
+ '--disable-setuid-sandbox',
41
+ '--disable-dev-shm-usage',
42
+ '--disable-accelerated-2d-canvas',
43
+ '--no-first-run',
44
+ '--no-zygote',
45
+ ],
46
+ viewport: { width: 1280, height: 720 },
47
+ });
48
+ const page = context.pages()[0] ?? (await context.newPage());
49
+ const pageId = this.newPageId();
50
+ this.contexts.set(sessionId, { context, page });
51
+ this.sessionPages.set(sessionId, {
52
+ pages: new Map([[pageId, page]]),
53
+ activePageId: pageId,
54
+ });
55
+ this.sessionRoutes.set(sessionId, new Map());
56
+ this.registry.attach(sessionId, context, page);
57
+ }
58
+ // ---------------------------------------------------------------------------
59
+ // Multi-page management (T03)
60
+ // ---------------------------------------------------------------------------
61
+ async createPage(sessionId) {
62
+ const entry = this.contexts.get(sessionId);
63
+ if (!entry)
64
+ throw new Error(`Session ${sessionId} not found`);
65
+ const page = await entry.context.newPage();
66
+ const pageId = this.newPageId();
67
+ const state = this.sessionPages.get(sessionId);
68
+ state.pages.set(pageId, page);
69
+ return { page_id: pageId, url: page.url() };
70
+ }
71
+ listPages(sessionId) {
72
+ const state = this.sessionPages.get(sessionId);
73
+ if (!state)
74
+ return [];
75
+ return Array.from(state.pages.entries()).map(([page_id, page]) => ({
76
+ page_id,
77
+ url: page.url(),
78
+ active: page_id === state.activePageId,
79
+ }));
80
+ }
81
+ switchPage(sessionId, pageId) {
82
+ const state = this.sessionPages.get(sessionId);
83
+ if (!state)
84
+ throw new Error(`Session ${sessionId} not found`);
85
+ if (!state.pages.has(pageId))
86
+ throw new Error(`Page ${pageId} not found in session ${sessionId}`);
87
+ state.activePageId = pageId;
88
+ const page = state.pages.get(pageId);
89
+ const entry = this.contexts.get(sessionId);
90
+ this.contexts.set(sessionId, { ...entry, page });
91
+ this.registry.attach(sessionId, entry.context, page);
92
+ }
93
+ async closePage(sessionId, pageId) {
94
+ const state = this.sessionPages.get(sessionId);
95
+ if (!state)
96
+ return;
97
+ const page = state.pages.get(pageId);
98
+ if (!page)
99
+ return;
100
+ // r05-c05 P2: prevent closing the last remaining page
101
+ if (state.pages.size <= 1) {
102
+ const err = new Error('Cannot close the last remaining page in a session');
103
+ err.code = 'LAST_PAGE';
104
+ throw err;
105
+ }
106
+ await page.close();
107
+ state.pages.delete(pageId);
108
+ // If closed the active page, switch to first remaining
109
+ if (state.activePageId === pageId) {
110
+ const remaining = Array.from(state.pages.keys());
111
+ if (remaining.length > 0) {
112
+ this.switchPage(sessionId, remaining[0]);
113
+ }
114
+ }
115
+ }
116
+ getActivePageId(sessionId) {
117
+ return this.sessionPages.get(sessionId)?.activePageId;
118
+ }
119
+ // ---------------------------------------------------------------------------
120
+ // CDP WebSocket URL (T06)
121
+ // ---------------------------------------------------------------------------
122
+ getCdpWsUrl(sessionId) {
123
+ const entry = this.contexts.get(sessionId);
124
+ if (!entry)
125
+ return null;
126
+ // playwright-core Browser exposes wsEndpoint() at runtime but not in types
127
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
128
+ return entry.context.browser()?.wsEndpoint?.() ?? null;
129
+ }
130
+ // ---------------------------------------------------------------------------
131
+ // Network route mock management (T07)
132
+ // ---------------------------------------------------------------------------
133
+ async addRoute(sessionId, pattern, mock) {
134
+ const entry = this.contexts.get(sessionId);
135
+ if (!entry)
136
+ throw new Error(`Session ${sessionId} not found`);
137
+ // Remove existing handler for this pattern if any
138
+ await this.removeRoute(sessionId, pattern);
139
+ const routeState = this.sessionRoutes.get(sessionId) ?? new Map();
140
+ this.sessionRoutes.set(sessionId, routeState);
141
+ const handler = async (route) => {
142
+ await route.fulfill({
143
+ status: mock.status ?? 200,
144
+ contentType: mock.content_type,
145
+ headers: mock.headers,
146
+ body: mock.body,
147
+ });
148
+ };
149
+ await entry.context.route(pattern, handler);
150
+ routeState.set(pattern, { pattern, mock, handler });
151
+ }
152
+ async removeRoute(sessionId, pattern) {
153
+ const entry = this.contexts.get(sessionId);
154
+ const routeState = this.sessionRoutes.get(sessionId);
155
+ if (!entry || !routeState)
156
+ return;
157
+ const existing = routeState.get(pattern);
158
+ if (existing) {
159
+ try {
160
+ await entry.context.unroute(pattern, existing.handler);
161
+ }
162
+ catch { /* ignore */ }
163
+ routeState.delete(pattern);
164
+ }
165
+ }
166
+ listRoutes(sessionId) {
167
+ const routeState = this.sessionRoutes.get(sessionId);
168
+ if (!routeState)
169
+ return [];
170
+ return Array.from(routeState.values()).map(({ pattern, mock }) => ({ pattern, mock }));
171
+ }
172
+ async cleanupRoutes(sessionId) {
173
+ const entry = this.contexts.get(sessionId);
174
+ const routeState = this.sessionRoutes.get(sessionId);
175
+ if (!entry || !routeState)
176
+ return;
177
+ for (const [pattern, routeEntry] of routeState.entries()) {
178
+ try {
179
+ await entry.context.unroute(pattern, routeEntry.handler);
180
+ }
181
+ catch { /* context may be closing */ }
182
+ }
183
+ routeState.clear();
184
+ }
185
+ // ---------------------------------------------------------------------------
186
+ // Mode switch (headless ↔ headed)
187
+ // ---------------------------------------------------------------------------
188
+ async switchMode(sessionId, headed) {
189
+ const existing = this.contexts.get(sessionId);
190
+ if (!existing)
191
+ throw new Error(`Session ${sessionId} not found`);
192
+ const s = this.registry.get(sessionId);
193
+ // Preserve current URL so we can restore it after relaunch (avoids about:blank)
194
+ const currentUrl = existing.page.url();
195
+ const urlToRestore = currentUrl && currentUrl !== 'about:blank' ? currentUrl : null;
196
+ // Preserve acceptDownloads setting across mode switch
197
+ const acceptDownloads = this.sessionAcceptDownloads.get(sessionId) ?? false;
198
+ await this.cleanupRoutes(sessionId);
199
+ this.sessionRoutes.delete(sessionId);
200
+ await existing.context.close();
201
+ this.contexts.delete(sessionId);
202
+ this.sessionPages.delete(sessionId);
203
+ await this.launchSession(sessionId, { profile: s.profile, headless: !headed, acceptDownloads });
204
+ // Persist updated headless flag (launchSession/attach spreads old value)
205
+ this.registry.updateHeadless(sessionId, !headed);
206
+ // Restore the page to its previous URL after relaunch
207
+ if (urlToRestore) {
208
+ const relaunched = this.contexts.get(sessionId);
209
+ if (relaunched) {
210
+ try {
211
+ await relaunched.page.goto(urlToRestore, { waitUntil: 'load' });
212
+ }
213
+ catch { /* ignore */ }
214
+ }
215
+ }
216
+ }
217
+ getAcceptDownloads(sessionId) {
218
+ return this.sessionAcceptDownloads.get(sessionId) ?? false;
219
+ }
220
+ async closeSession(sessionId) {
221
+ const entry = this.contexts.get(sessionId);
222
+ if (entry) {
223
+ await this.cleanupRoutes(sessionId);
224
+ this.sessionRoutes.delete(sessionId);
225
+ this.sessionAcceptDownloads.delete(sessionId);
226
+ await entry.context.close();
227
+ this.contexts.delete(sessionId);
228
+ this.sessionPages.delete(sessionId);
229
+ }
230
+ }
231
+ }
232
+ exports.BrowserManager = BrowserManager;
233
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/browser/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare function cliPort(): number;
2
+ export declare function cliApiBase(): string;
3
+ export declare function apiPost(path: string, body: object): Promise<any>;
4
+ export declare function apiGet(path: string): Promise<any>;
5
+ export declare function apiDelete(path: string): Promise<{
6
+ statusCode: number;
7
+ }>;
8
+ /** DELETE with a JSON body (e.g. for route removal that requires a pattern). */
9
+ export declare function apiDeleteWithBody(path: string, body: object): Promise<{
10
+ statusCode: number;
11
+ data: any;
12
+ }>;
13
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cli/client.ts"],"names":[],"mappings":"AAMA,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAiBD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAmBhE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAiBjD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAavE;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAAC,CAoBxG"}