@monoes/monobrowse 1.0.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 (208) hide show
  1. package/dist/src/browser/action-builder/analyzer.d.ts +11 -0
  2. package/dist/src/browser/action-builder/analyzer.d.ts.map +1 -0
  3. package/dist/src/browser/action-builder/analyzer.js +93 -0
  4. package/dist/src/browser/action-builder/analyzer.js.map +1 -0
  5. package/dist/src/browser/action-builder/types.d.ts +46 -0
  6. package/dist/src/browser/action-builder/types.d.ts.map +1 -0
  7. package/dist/src/browser/action-builder/types.js +2 -0
  8. package/dist/src/browser/action-builder/types.js.map +1 -0
  9. package/dist/src/browser/actions.d.ts +29 -0
  10. package/dist/src/browser/actions.d.ts.map +1 -0
  11. package/dist/src/browser/actions.js +398 -0
  12. package/dist/src/browser/actions.js.map +1 -0
  13. package/dist/src/browser/adapters/gemini.d.ts +3 -0
  14. package/dist/src/browser/adapters/gemini.d.ts.map +1 -0
  15. package/dist/src/browser/adapters/gemini.js +13 -0
  16. package/dist/src/browser/adapters/gemini.js.map +1 -0
  17. package/dist/src/browser/adapters/google.d.ts +3 -0
  18. package/dist/src/browser/adapters/google.d.ts.map +1 -0
  19. package/dist/src/browser/adapters/google.js +17 -0
  20. package/dist/src/browser/adapters/google.js.map +1 -0
  21. package/dist/src/browser/adapters/index.d.ts +15 -0
  22. package/dist/src/browser/adapters/index.d.ts.map +1 -0
  23. package/dist/src/browser/adapters/index.js +18 -0
  24. package/dist/src/browser/adapters/index.js.map +1 -0
  25. package/dist/src/browser/adapters/instagram.d.ts +3 -0
  26. package/dist/src/browser/adapters/instagram.d.ts.map +1 -0
  27. package/dist/src/browser/adapters/instagram.js +14 -0
  28. package/dist/src/browser/adapters/instagram.js.map +1 -0
  29. package/dist/src/browser/adapters/linkedin.d.ts +3 -0
  30. package/dist/src/browser/adapters/linkedin.d.ts.map +1 -0
  31. package/dist/src/browser/adapters/linkedin.js +13 -0
  32. package/dist/src/browser/adapters/linkedin.js.map +1 -0
  33. package/dist/src/browser/adapters/microsoft.d.ts +3 -0
  34. package/dist/src/browser/adapters/microsoft.d.ts.map +1 -0
  35. package/dist/src/browser/adapters/microsoft.js +16 -0
  36. package/dist/src/browser/adapters/microsoft.js.map +1 -0
  37. package/dist/src/browser/adapters/x.d.ts +3 -0
  38. package/dist/src/browser/adapters/x.d.ts.map +1 -0
  39. package/dist/src/browser/adapters/x.js +13 -0
  40. package/dist/src/browser/adapters/x.js.map +1 -0
  41. package/dist/src/browser/batch.d.ts +5 -0
  42. package/dist/src/browser/batch.d.ts.map +1 -0
  43. package/dist/src/browser/batch.js +2 -0
  44. package/dist/src/browser/batch.js.map +1 -0
  45. package/dist/src/browser/browser.d.ts +15 -0
  46. package/dist/src/browser/browser.d.ts.map +1 -0
  47. package/dist/src/browser/browser.js +256 -0
  48. package/dist/src/browser/browser.js.map +1 -0
  49. package/dist/src/browser/cdp.d.ts +18 -0
  50. package/dist/src/browser/cdp.d.ts.map +1 -0
  51. package/dist/src/browser/cdp.js +153 -0
  52. package/dist/src/browser/cdp.js.map +1 -0
  53. package/dist/src/browser/console-log.d.ts +23 -0
  54. package/dist/src/browser/console-log.d.ts.map +1 -0
  55. package/dist/src/browser/console-log.js +104 -0
  56. package/dist/src/browser/console-log.js.map +1 -0
  57. package/dist/src/browser/dashboard/api-types.d.ts +50 -0
  58. package/dist/src/browser/dashboard/api-types.d.ts.map +1 -0
  59. package/dist/src/browser/dashboard/api-types.js +14 -0
  60. package/dist/src/browser/dashboard/api-types.js.map +1 -0
  61. package/dist/src/browser/dashboard/server.d.ts +11 -0
  62. package/dist/src/browser/dashboard/server.d.ts.map +1 -0
  63. package/dist/src/browser/dashboard/server.js +191 -0
  64. package/dist/src/browser/dashboard/server.js.map +1 -0
  65. package/dist/src/browser/dialog.d.ts +12 -0
  66. package/dist/src/browser/dialog.d.ts.map +1 -0
  67. package/dist/src/browser/dialog.js +53 -0
  68. package/dist/src/browser/dialog.js.map +1 -0
  69. package/dist/src/browser/emulation.d.ts +15 -0
  70. package/dist/src/browser/emulation.d.ts.map +1 -0
  71. package/dist/src/browser/emulation.js +62 -0
  72. package/dist/src/browser/emulation.js.map +1 -0
  73. package/dist/src/browser/find.d.ts +22 -0
  74. package/dist/src/browser/find.d.ts.map +1 -0
  75. package/dist/src/browser/find.js +169 -0
  76. package/dist/src/browser/find.js.map +1 -0
  77. package/dist/src/browser/har.d.ts +27 -0
  78. package/dist/src/browser/har.d.ts.map +1 -0
  79. package/dist/src/browser/har.js +161 -0
  80. package/dist/src/browser/har.js.map +1 -0
  81. package/dist/src/browser/index.d.ts +23 -0
  82. package/dist/src/browser/index.d.ts.map +1 -0
  83. package/dist/src/browser/index.js +23 -0
  84. package/dist/src/browser/index.js.map +1 -0
  85. package/dist/src/browser/network.d.ts +32 -0
  86. package/dist/src/browser/network.d.ts.map +1 -0
  87. package/dist/src/browser/network.js +214 -0
  88. package/dist/src/browser/network.js.map +1 -0
  89. package/dist/src/browser/pdf.d.ts +15 -0
  90. package/dist/src/browser/pdf.d.ts.map +1 -0
  91. package/dist/src/browser/pdf.js +27 -0
  92. package/dist/src/browser/pdf.js.map +1 -0
  93. package/dist/src/browser/profiler.d.ts +10 -0
  94. package/dist/src/browser/profiler.d.ts.map +1 -0
  95. package/dist/src/browser/profiler.js +77 -0
  96. package/dist/src/browser/profiler.js.map +1 -0
  97. package/dist/src/browser/record.d.ts +21 -0
  98. package/dist/src/browser/record.d.ts.map +1 -0
  99. package/dist/src/browser/record.js +59 -0
  100. package/dist/src/browser/record.js.map +1 -0
  101. package/dist/src/browser/screenshot.d.ts +15 -0
  102. package/dist/src/browser/screenshot.d.ts.map +1 -0
  103. package/dist/src/browser/screenshot.js +38 -0
  104. package/dist/src/browser/screenshot.js.map +1 -0
  105. package/dist/src/browser/session.d.ts +8 -0
  106. package/dist/src/browser/session.d.ts.map +1 -0
  107. package/dist/src/browser/session.js +91 -0
  108. package/dist/src/browser/session.js.map +1 -0
  109. package/dist/src/browser/snapshot.d.ts +12 -0
  110. package/dist/src/browser/snapshot.d.ts.map +1 -0
  111. package/dist/src/browser/snapshot.js +179 -0
  112. package/dist/src/browser/snapshot.js.map +1 -0
  113. package/dist/src/browser/storage.d.ts +12 -0
  114. package/dist/src/browser/storage.d.ts.map +1 -0
  115. package/dist/src/browser/storage.js +46 -0
  116. package/dist/src/browser/storage.js.map +1 -0
  117. package/dist/src/browser/tabs.d.ts +8 -0
  118. package/dist/src/browser/tabs.d.ts.map +1 -0
  119. package/dist/src/browser/tabs.js +25 -0
  120. package/dist/src/browser/tabs.js.map +1 -0
  121. package/dist/src/browser/trace.d.ts +10 -0
  122. package/dist/src/browser/trace.d.ts.map +1 -0
  123. package/dist/src/browser/trace.js +87 -0
  124. package/dist/src/browser/trace.js.map +1 -0
  125. package/dist/src/browser/types.d.ts +111 -0
  126. package/dist/src/browser/types.d.ts.map +1 -0
  127. package/dist/src/browser/types.js +16 -0
  128. package/dist/src/browser/types.js.map +1 -0
  129. package/dist/src/browser/vitals.d.ts +15 -0
  130. package/dist/src/browser/vitals.d.ts.map +1 -0
  131. package/dist/src/browser/vitals.js +116 -0
  132. package/dist/src/browser/vitals.js.map +1 -0
  133. package/dist/src/browser/wait.d.ts +4 -0
  134. package/dist/src/browser/wait.d.ts.map +1 -0
  135. package/dist/src/browser/wait.js +146 -0
  136. package/dist/src/browser/wait.js.map +1 -0
  137. package/dist/src/browser/workflow/builtin-handlers.d.ts +3 -0
  138. package/dist/src/browser/workflow/builtin-handlers.d.ts.map +1 -0
  139. package/dist/src/browser/workflow/builtin-handlers.js +343 -0
  140. package/dist/src/browser/workflow/builtin-handlers.js.map +1 -0
  141. package/dist/src/browser/workflow/engine.d.ts +10 -0
  142. package/dist/src/browser/workflow/engine.d.ts.map +1 -0
  143. package/dist/src/browser/workflow/engine.js +174 -0
  144. package/dist/src/browser/workflow/engine.js.map +1 -0
  145. package/dist/src/browser/workflow/expression.d.ts +4 -0
  146. package/dist/src/browser/workflow/expression.d.ts.map +1 -0
  147. package/dist/src/browser/workflow/expression.js +89 -0
  148. package/dist/src/browser/workflow/expression.js.map +1 -0
  149. package/dist/src/browser/workflow/index.d.ts +6 -0
  150. package/dist/src/browser/workflow/index.d.ts.map +1 -0
  151. package/dist/src/browser/workflow/index.js +6 -0
  152. package/dist/src/browser/workflow/index.js.map +1 -0
  153. package/dist/src/browser/workflow/store.d.ts +8 -0
  154. package/dist/src/browser/workflow/store.d.ts.map +1 -0
  155. package/dist/src/browser/workflow/store.js +87 -0
  156. package/dist/src/browser/workflow/store.js.map +1 -0
  157. package/dist/src/browser/workflow/types.d.ts +62 -0
  158. package/dist/src/browser/workflow/types.d.ts.map +1 -0
  159. package/dist/src/browser/workflow/types.js +2 -0
  160. package/dist/src/browser/workflow/types.js.map +1 -0
  161. package/dist/src/index.d.ts +7 -0
  162. package/dist/src/index.d.ts.map +1 -0
  163. package/dist/src/index.js +7 -0
  164. package/dist/src/index.js.map +1 -0
  165. package/dist/tsconfig.tsbuildinfo +1 -0
  166. package/package.json +56 -0
  167. package/src/browser/action-builder/analyzer.ts +127 -0
  168. package/src/browser/action-builder/types.ts +17 -0
  169. package/src/browser/actions.ts +518 -0
  170. package/src/browser/adapters/gemini.ts +15 -0
  171. package/src/browser/adapters/google.ts +20 -0
  172. package/src/browser/adapters/index.ts +33 -0
  173. package/src/browser/adapters/instagram.ts +16 -0
  174. package/src/browser/adapters/linkedin.ts +15 -0
  175. package/src/browser/adapters/microsoft.ts +19 -0
  176. package/src/browser/adapters/x.ts +15 -0
  177. package/src/browser/batch.ts +4 -0
  178. package/src/browser/browser.ts +265 -0
  179. package/src/browser/cdp.ts +156 -0
  180. package/src/browser/console-log.ts +120 -0
  181. package/src/browser/dashboard/api-types.ts +71 -0
  182. package/src/browser/dashboard/server.ts +206 -0
  183. package/src/browser/dashboard/ui.html +444 -0
  184. package/src/browser/dialog.ts +63 -0
  185. package/src/browser/emulation.ts +94 -0
  186. package/src/browser/find.ts +225 -0
  187. package/src/browser/har.ts +202 -0
  188. package/src/browser/index.ts +22 -0
  189. package/src/browser/network.ts +244 -0
  190. package/src/browser/pdf.ts +41 -0
  191. package/src/browser/profiler.ts +96 -0
  192. package/src/browser/record.ts +92 -0
  193. package/src/browser/screenshot.ts +67 -0
  194. package/src/browser/session.ts +118 -0
  195. package/src/browser/snapshot.ts +248 -0
  196. package/src/browser/storage.ts +54 -0
  197. package/src/browser/tabs.ts +37 -0
  198. package/src/browser/trace.ts +106 -0
  199. package/src/browser/types.ts +135 -0
  200. package/src/browser/vitals.ts +122 -0
  201. package/src/browser/wait.ts +178 -0
  202. package/src/browser/workflow/builtin-handlers.ts +379 -0
  203. package/src/browser/workflow/engine.ts +202 -0
  204. package/src/browser/workflow/expression.ts +107 -0
  205. package/src/browser/workflow/index.ts +5 -0
  206. package/src/browser/workflow/store.ts +87 -0
  207. package/src/browser/workflow/types.ts +62 -0
  208. package/src/index.ts +6 -0
@@ -0,0 +1,153 @@
1
+ import { WebSocket } from 'ws';
2
+ export class CdpClient {
3
+ ws = null;
4
+ pendingCommands = new Map();
5
+ eventListeners = new Map();
6
+ nextId = 1;
7
+ connected = false;
8
+ async connect(wsUrl) {
9
+ return new Promise((resolve, reject) => {
10
+ this.ws = new WebSocket(wsUrl);
11
+ this.ws.on('open', () => {
12
+ this.connected = true;
13
+ resolve();
14
+ });
15
+ this.ws.on('error', (err) => {
16
+ if (!this.connected) {
17
+ reject(err);
18
+ }
19
+ else {
20
+ // Post-connect: flush all pending commands — 'close' may not fire on all platforms
21
+ this.connected = false;
22
+ for (const { reject: r } of this.pendingCommands.values())
23
+ r(err);
24
+ this.pendingCommands.clear();
25
+ }
26
+ });
27
+ this.ws.on('close', () => {
28
+ this.connected = false;
29
+ for (const { reject: r } of this.pendingCommands.values()) {
30
+ r(new Error('CDP connection closed'));
31
+ }
32
+ this.pendingCommands.clear();
33
+ });
34
+ this.ws.on('message', (data) => {
35
+ try {
36
+ const msg = JSON.parse(data.toString());
37
+ if (msg.id !== undefined && this.pendingCommands.has(msg.id)) {
38
+ const handler = this.pendingCommands.get(msg.id);
39
+ this.pendingCommands.delete(msg.id);
40
+ if (msg.error) {
41
+ handler.reject(new Error(`CDP error ${msg.error.code}: ${msg.error.message}`));
42
+ }
43
+ else {
44
+ handler.resolve(msg);
45
+ }
46
+ }
47
+ else if (msg.method) {
48
+ const listeners = this.eventListeners.get(msg.method);
49
+ if (listeners) {
50
+ for (const fn of listeners) {
51
+ try {
52
+ fn(msg.params ?? {}, msg.sessionId);
53
+ }
54
+ catch { /* isolate per-listener errors */ }
55
+ }
56
+ }
57
+ }
58
+ }
59
+ catch {
60
+ // ignore malformed messages
61
+ }
62
+ });
63
+ });
64
+ }
65
+ send(method, params, sessionId) {
66
+ return new Promise((resolve, reject) => {
67
+ if (!this.ws || !this.connected) {
68
+ reject(new Error('CDP not connected'));
69
+ return;
70
+ }
71
+ // Cap in-flight commands to prevent unbounded Map growth
72
+ if (this.pendingCommands.size >= 1000) {
73
+ reject(new Error('CDP command queue full (>1000 in-flight commands)'));
74
+ return;
75
+ }
76
+ const id = this.nextId++;
77
+ const cmd = { id, method, params };
78
+ if (sessionId)
79
+ cmd.sessionId = sessionId;
80
+ this.pendingCommands.set(id, {
81
+ resolve: (r) => resolve((r.result ?? {})),
82
+ reject,
83
+ });
84
+ this.ws.send(JSON.stringify(cmd), (err) => {
85
+ if (err) {
86
+ this.pendingCommands.delete(id);
87
+ reject(err);
88
+ }
89
+ });
90
+ });
91
+ }
92
+ on(event, fn) {
93
+ if (!this.eventListeners.has(event)) {
94
+ this.eventListeners.set(event, new Set());
95
+ }
96
+ const listeners = this.eventListeners.get(event);
97
+ // Cap listeners per event to prevent unbounded Set growth
98
+ if (listeners.size >= 100) {
99
+ throw new Error(`CDP event listener limit reached for event: ${event}`);
100
+ }
101
+ listeners.add(fn);
102
+ return () => this.eventListeners.get(event)?.delete(fn);
103
+ }
104
+ once(event, sessionId) {
105
+ const [promise] = this.onceWithOff(event, sessionId);
106
+ return promise;
107
+ }
108
+ onceWithOff(event, sessionId) {
109
+ let off = () => { };
110
+ const promise = new Promise((resolve) => {
111
+ off = this.on(event, (params, sid) => {
112
+ if (sessionId !== undefined && sid !== sessionId)
113
+ return;
114
+ off();
115
+ resolve(params);
116
+ });
117
+ });
118
+ return [promise, () => off()];
119
+ }
120
+ close() {
121
+ this.connected = false;
122
+ for (const { reject: r } of this.pendingCommands.values())
123
+ r(new Error('CDP connection closed'));
124
+ this.pendingCommands.clear();
125
+ this.ws?.close();
126
+ this.ws = null;
127
+ this.eventListeners.clear();
128
+ }
129
+ isConnected() {
130
+ return this.connected;
131
+ }
132
+ }
133
+ const CDP_RESPONSE_SIZE_LIMIT = 10 * 1024 * 1024; // 10 MB
134
+ async function readCdpJson(res) {
135
+ const text = await res.text();
136
+ if (text.length > CDP_RESPONSE_SIZE_LIMIT) {
137
+ throw new Error(`CDP response too large: ${text.length} bytes`);
138
+ }
139
+ return JSON.parse(text);
140
+ }
141
+ export async function fetchTargets(port) {
142
+ const res = await fetch(`http://127.0.0.1:${port}/json/list`);
143
+ if (!res.ok)
144
+ throw new Error(`Failed to fetch targets: ${res.statusText}`);
145
+ return readCdpJson(res);
146
+ }
147
+ export async function fetchNewTarget(port, url) {
148
+ const res = await fetch(`http://127.0.0.1:${port}/json/new?${url}`);
149
+ if (!res.ok)
150
+ throw new Error(`Failed to create target: ${res.statusText}`);
151
+ return readCdpJson(res);
152
+ }
153
+ //# sourceMappingURL=cdp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp.js","sourceRoot":"","sources":["../../../src/browser/cdp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { CdpClient } from './cdp.js';
2
+ export interface ConsoleMessage {
3
+ type: 'log' | 'error' | 'warn' | 'info' | 'debug' | 'verbose';
4
+ text: string;
5
+ timestamp: number;
6
+ url?: string;
7
+ lineNumber?: number;
8
+ }
9
+ export interface PageError {
10
+ text: string;
11
+ url?: string;
12
+ lineNumber?: number;
13
+ columnNumber?: number;
14
+ timestamp: number;
15
+ }
16
+ export declare function setupConsoleCapture(client: CdpClient, sessionId: string): void;
17
+ export declare function enableConsoleCapture(client: CdpClient, sessionId: string): Promise<void>;
18
+ export declare function getConsoleMessages(sessionId?: string): ConsoleMessage[];
19
+ export declare function clearConsoleMessages(sessionId?: string): void;
20
+ export declare function getPageErrors(sessionId?: string): PageError[];
21
+ export declare function clearPageErrors(sessionId?: string): void;
22
+ export declare function teardownConsoleCapture(sessionId: string): void;
23
+ //# sourceMappingURL=console-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-log.d.ts","sourceRoot":"","sources":["../../../src/browser/console-log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAgBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAsD9E;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9F;AAED,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,CAIvE;AAED,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAG7D;AAED,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAG7D;AAED,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAGxD;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAK9D"}
@@ -0,0 +1,104 @@
1
+ const _consoleMessages = new Map();
2
+ const _pageErrors = new Map();
3
+ const _consoleListeners = new Map();
4
+ function messagesFor(sessionId) {
5
+ if (!_consoleMessages.has(sessionId))
6
+ _consoleMessages.set(sessionId, []);
7
+ return _consoleMessages.get(sessionId);
8
+ }
9
+ function errorsFor(sessionId) {
10
+ if (!_pageErrors.has(sessionId))
11
+ _pageErrors.set(sessionId, []);
12
+ return _pageErrors.get(sessionId);
13
+ }
14
+ export function setupConsoleCapture(client, sessionId) {
15
+ // Remove stale listeners from any prior connection on this sessionId
16
+ const prevOffs = _consoleListeners.get(sessionId);
17
+ if (prevOffs) {
18
+ for (const off of prevOffs)
19
+ off();
20
+ _consoleListeners.delete(sessionId);
21
+ }
22
+ _consoleMessages.set(sessionId, []);
23
+ _pageErrors.set(sessionId, []);
24
+ const off1 = client.on('Runtime.consoleAPICalled', (params, sid) => {
25
+ if (sid !== sessionId)
26
+ return;
27
+ const args = params.args ?? [];
28
+ const text = args.map((a) => a.description ?? String(a.value ?? '')).join(' ');
29
+ const rawType = params.type === 'warning' ? 'warn' : params.type;
30
+ messagesFor(sessionId).push({
31
+ type: rawType ?? 'log',
32
+ text,
33
+ timestamp: Date.now(),
34
+ });
35
+ });
36
+ const off2 = client.on('Log.entryAdded', (params, sid) => {
37
+ if (sid !== sessionId)
38
+ return;
39
+ const entry = params.entry;
40
+ // CDP uses 'warning' but ConsoleMessage type uses 'warn'
41
+ const rawLevel = entry.level === 'warning' ? 'warn' : entry.level;
42
+ messagesFor(sessionId).push({
43
+ type: rawLevel ?? 'log',
44
+ text: entry.text ?? '',
45
+ timestamp: Date.now(),
46
+ url: entry.url,
47
+ lineNumber: entry.lineNumber,
48
+ });
49
+ });
50
+ const off3 = client.on('Runtime.exceptionThrown', (params, sid) => {
51
+ if (sid !== sessionId)
52
+ return;
53
+ const detail = params.exceptionDetails;
54
+ const message = detail.exception?.description ?? detail.text ?? 'Unknown error';
55
+ errorsFor(sessionId).push({
56
+ text: message,
57
+ url: detail.url,
58
+ lineNumber: detail.lineNumber,
59
+ columnNumber: detail.columnNumber,
60
+ timestamp: Date.now(),
61
+ });
62
+ });
63
+ _consoleListeners.set(sessionId, [off1, off2, off3]);
64
+ }
65
+ export async function enableConsoleCapture(client, sessionId) {
66
+ await client.send('Runtime.enable', {}, sessionId);
67
+ await client.send('Log.enable', {}, sessionId);
68
+ }
69
+ export function getConsoleMessages(sessionId) {
70
+ if (sessionId)
71
+ return [...(messagesFor(sessionId))];
72
+ // Fallback: return all messages across all sessions (legacy callers)
73
+ return [..._consoleMessages.values()].flat();
74
+ }
75
+ export function clearConsoleMessages(sessionId) {
76
+ if (sessionId) {
77
+ _consoleMessages.set(sessionId, []);
78
+ return;
79
+ }
80
+ _consoleMessages.clear();
81
+ }
82
+ export function getPageErrors(sessionId) {
83
+ if (sessionId)
84
+ return [...(errorsFor(sessionId))];
85
+ return [..._pageErrors.values()].flat();
86
+ }
87
+ export function clearPageErrors(sessionId) {
88
+ if (sessionId) {
89
+ _pageErrors.set(sessionId, []);
90
+ return;
91
+ }
92
+ _pageErrors.clear();
93
+ }
94
+ export function teardownConsoleCapture(sessionId) {
95
+ const offs = _consoleListeners.get(sessionId);
96
+ if (offs) {
97
+ for (const off of offs)
98
+ off();
99
+ _consoleListeners.delete(sessionId);
100
+ }
101
+ _consoleMessages.delete(sessionId);
102
+ _pageErrors.delete(sessionId);
103
+ }
104
+ //# sourceMappingURL=console-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-log.js","sourceRoot":"","sources":["../../../src/browser/console-log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Typed API response schemas for the monobrowse dashboard.
3
+ *
4
+ * These interfaces are the canonical contract between server.ts and
5
+ * dashboard clients (ui.html + any external consumers). Changing a
6
+ * field name here will surface breakage at compile time rather than
7
+ * at runtime — preventing the field-name regression class documented
8
+ * in the sprint review (e.g. `msg` vs `message`, `tokensIn` vs
9
+ * `tokens_in`).
10
+ *
11
+ * @module @monomind/cli/browser/dashboard/api-types
12
+ */
13
+ export interface OrgStatusResponse {
14
+ name: string;
15
+ status: 'ready' | 'running' | 'stopped';
16
+ currentRun?: RunRecord;
17
+ }
18
+ export interface RunRecord {
19
+ /** Stable run identifier (UUID or monotonic ID). */
20
+ id: string;
21
+ workflowId: string;
22
+ startedAt: number;
23
+ itemsProcessed: number;
24
+ status: string;
25
+ }
26
+ export interface SessionListResponse {
27
+ sessions: SessionEntry[];
28
+ total: number;
29
+ }
30
+ export interface SessionEntry {
31
+ sessionId: string;
32
+ name: string;
33
+ createdAt: string;
34
+ }
35
+ export interface BudgetResponse {
36
+ /** Input tokens consumed in this session/run. */
37
+ tokensIn: number;
38
+ /** Output tokens generated in this session/run. */
39
+ tokensOut: number;
40
+ /** Total monetary cost in `currency` units. */
41
+ totalCost: number;
42
+ currency: 'USD';
43
+ }
44
+ export interface ApiError {
45
+ /** Human-readable error message. */
46
+ error: string;
47
+ /** Optional machine-readable error code for programmatic handling. */
48
+ code?: string;
49
+ }
50
+ //# sourceMappingURL=api-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-types.d.ts","sourceRoot":"","sources":["../../../../src/browser/dashboard/api-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IACxC,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;CACjB;AAMD,MAAM,WAAW,QAAQ;IACvB,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Typed API response schemas for the monobrowse dashboard.
3
+ *
4
+ * These interfaces are the canonical contract between server.ts and
5
+ * dashboard clients (ui.html + any external consumers). Changing a
6
+ * field name here will surface breakage at compile time rather than
7
+ * at runtime — preventing the field-name regression class documented
8
+ * in the sprint review (e.g. `msg` vs `message`, `tokensIn` vs
9
+ * `tokens_in`).
10
+ *
11
+ * @module @monomind/cli/browser/dashboard/api-types
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=api-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-types.js","sourceRoot":"","sources":["../../../../src/browser/dashboard/api-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,11 @@
1
+ import type { StepEvent, RunRecord } from '../workflow/types.js';
2
+ export interface DashboardServer {
3
+ broadcast(event: StepEvent): void;
4
+ addRunRecord(record: RunRecord): void;
5
+ isStopRequested(runId: string): boolean;
6
+ close(): void;
7
+ port: number;
8
+ }
9
+ export declare function startDashboard(port?: number): DashboardServer;
10
+ export declare function getDashboard(): DashboardServer | null;
11
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/browser/dashboard/server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAiBjE,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACtC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAID,wBAAgB,cAAc,CAAC,IAAI,SAAe,GAAG,eAAe,CAuKnE;AAED,wBAAgB,YAAY,IAAI,eAAe,GAAG,IAAI,CAErD"}
@@ -0,0 +1,191 @@
1
+ import { createServer } from 'node:http';
2
+ import { readFileSync, existsSync } from 'node:fs';
3
+ import { readFile } from 'node:fs/promises';
4
+ import { join, dirname } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { homedir } from 'node:os';
7
+ import { createRequire } from 'node:module';
8
+ const RUNS_FILE = join(homedir(), '.monomind', 'browse-runs.json');
9
+ async function loadPersistedRuns() {
10
+ if (!existsSync(RUNS_FILE))
11
+ return [];
12
+ try {
13
+ return JSON.parse(await readFile(RUNS_FILE, 'utf-8'));
14
+ }
15
+ catch {
16
+ return [];
17
+ }
18
+ }
19
+ const _require = createRequire(import.meta.url);
20
+ const __dirname = dirname(fileURLToPath(import.meta.url));
21
+ const DEFAULT_PORT = parseInt(process.env['MONOBROWSE_DASHBOARD_PORT'] ?? '4242', 10);
22
+ const MAX_RUN_HISTORY = 50;
23
+ let instance = null;
24
+ export function startDashboard(port = DEFAULT_PORT) {
25
+ if (instance)
26
+ return instance;
27
+ const runHistory = [];
28
+ const stopRequests = new Set();
29
+ /** Map from client (WebSocket or SSE response) to the subscribed project dir,
30
+ * or null if the client subscribed without a ?dir= filter (receives all events). */
31
+ const clientDirs = new Map();
32
+ // Try to load ws, fall back to SSE
33
+ let WebSocketServer = null;
34
+ try {
35
+ const wsModule = _require('ws');
36
+ WebSocketServer = wsModule.WebSocketServer ?? wsModule.Server;
37
+ }
38
+ catch {
39
+ // ws not available — fall back to SSE
40
+ }
41
+ // ui.html must be copied to dist/ alongside server.js during build
42
+ let uiHtml;
43
+ try {
44
+ uiHtml = readFileSync(join(__dirname, 'ui.html'), 'utf-8');
45
+ }
46
+ catch {
47
+ uiHtml = `<!DOCTYPE html><html><head><title>monobrowse dashboard</title></head><body style="background:#0f0f1a;color:#ccc;font-family:system-ui;padding:20px"><h1>monobrowse dashboard</h1><p>Dashboard UI not found. Run the build to include ui.html.</p><script>let _retryDelay=1000;function connectSSE(){const es=new EventSource('/events');es.onmessage=e=>{console.log(JSON.parse(e.data));_retryDelay=1000;};es.onerror=()=>{es.close();setTimeout(connectSSE,Math.min(_retryDelay*=2,30000));};};connectSSE();</script></body></html>`;
48
+ }
49
+ const server = createServer((req, res) => {
50
+ const url = req.url ?? '/';
51
+ if (url === '/' && req.method === 'GET') {
52
+ res.writeHead(200, { 'Content-Type': 'text/html' });
53
+ res.end(uiHtml);
54
+ return;
55
+ }
56
+ if (url === '/runs' && req.method === 'GET') {
57
+ // Merge in-memory runs with persisted runs so the UI shows history even across restarts
58
+ loadPersistedRuns().then(persisted => {
59
+ const seen = new Set(runHistory.map(r => r.id));
60
+ const merged = [...runHistory, ...persisted.filter(r => !seen.has(r.id))]
61
+ .sort((a, b) => b.startedAt - a.startedAt)
62
+ .slice(0, MAX_RUN_HISTORY);
63
+ res.writeHead(200, { 'Content-Type': 'application/json' });
64
+ res.end(JSON.stringify(merged));
65
+ }).catch(() => {
66
+ res.writeHead(200, { 'Content-Type': 'application/json' });
67
+ res.end(JSON.stringify(runHistory));
68
+ });
69
+ return;
70
+ }
71
+ if (url.startsWith('/stop/') && req.method === 'POST') {
72
+ const runId = url.slice(6);
73
+ stopRequests.add(runId);
74
+ res.writeHead(200, { 'Content-Type': 'application/json' });
75
+ res.end(JSON.stringify({ ok: true, runId }));
76
+ return;
77
+ }
78
+ // Parse the URL to correctly handle query parameters such as ?dir=
79
+ const parsed = new URL(url, 'http://localhost');
80
+ if (parsed.pathname === '/events' && (req.method === 'GET' || req.method === 'HEAD') && !WebSocketServer) {
81
+ // SSE endpoint (fallback when ws not available).
82
+ // No CORS header — the dashboard is served from 127.0.0.1:4242 and no cross-origin
83
+ // access is needed. A wildcard ACAO would let any web page subscribe to workflow events.
84
+ const subscribedDir = parsed.searchParams.get('dir') ?? null;
85
+ res.writeHead(200, {
86
+ 'Content-Type': 'text/event-stream',
87
+ 'Cache-Control': 'no-cache',
88
+ 'Connection': 'keep-alive',
89
+ });
90
+ res.write(`data: ${JSON.stringify({ type: 'connected' })}\n\n`);
91
+ clientDirs.set(res, subscribedDir);
92
+ // 30-second keep-alive heartbeat prevents proxy idle-timeout drops.
93
+ const heartbeat = setInterval(() => {
94
+ try {
95
+ res.write(': keep-alive\n\n');
96
+ }
97
+ catch {
98
+ clearInterval(heartbeat);
99
+ }
100
+ }, 30_000);
101
+ req.on('close', () => {
102
+ clearInterval(heartbeat);
103
+ clientDirs.delete(res);
104
+ });
105
+ return;
106
+ }
107
+ res.writeHead(404);
108
+ res.end('Not found');
109
+ });
110
+ if (WebSocketServer) {
111
+ const wss = new WebSocketServer({ server });
112
+ wss.on('connection', async (ws, req) => {
113
+ // Extract optional project-dir filter from the WebSocket upgrade URL
114
+ const upgradeUrl = req?.url ?? '/ws';
115
+ const upgradeParsed = new URL(upgradeUrl, 'http://localhost');
116
+ const subscribedDir = upgradeParsed.searchParams.get('dir') ?? null;
117
+ clientDirs.set(ws, subscribedDir);
118
+ // Merge in-memory and persisted runs so history survives server restarts
119
+ const persisted = await loadPersistedRuns().catch(() => []);
120
+ const seen = new Set(runHistory.map(r => r.id));
121
+ const merged = [...runHistory, ...persisted.filter(r => !seen.has(r.id))]
122
+ .sort((a, b) => b.startedAt - a.startedAt)
123
+ .slice(0, MAX_RUN_HISTORY);
124
+ ws.send(JSON.stringify({ type: 'history', runs: merged }));
125
+ ws.on('close', () => clientDirs.delete(ws));
126
+ });
127
+ }
128
+ server.on('error', (err) => {
129
+ if (err.code === 'EADDRINUSE') {
130
+ console.log(`Dashboard port ${port} in use — workflow will run without live dashboard.`);
131
+ }
132
+ else {
133
+ console.error(`Dashboard server error: ${err.message}`);
134
+ }
135
+ // Replace with a no-op instance so the engine doesn't crash
136
+ instance = {
137
+ broadcast: () => { },
138
+ addRunRecord: () => { },
139
+ isStopRequested: () => false,
140
+ close: () => { },
141
+ port,
142
+ };
143
+ });
144
+ server.listen(port, '127.0.0.1');
145
+ function broadcast(event) {
146
+ const msg = JSON.stringify(event);
147
+ for (const [client, subscribedDir] of clientDirs) {
148
+ // Server-side project filtering: if the client subscribed with ?dir=<path>, only
149
+ // deliver events whose projectDir matches. Clients without a dir filter (subscribedDir
150
+ // === null) receive all events, preserving backward-compatibility with ui.html.
151
+ if (subscribedDir !== null && event.projectDir !== undefined && subscribedDir !== event.projectDir) {
152
+ continue;
153
+ }
154
+ try {
155
+ if (typeof client.send === 'function') {
156
+ client.send(msg); // WebSocket
157
+ }
158
+ else {
159
+ client.write(`data: ${msg}\n\n`); // SSE
160
+ }
161
+ }
162
+ catch {
163
+ clientDirs.delete(client);
164
+ }
165
+ }
166
+ }
167
+ function addRunRecord(record) {
168
+ const idx = runHistory.findIndex(r => r.id === record.id);
169
+ if (idx >= 0) {
170
+ runHistory[idx] = record;
171
+ }
172
+ else {
173
+ runHistory.unshift(record);
174
+ if (runHistory.length > MAX_RUN_HISTORY)
175
+ runHistory.pop();
176
+ }
177
+ }
178
+ function isStopRequested(runId) {
179
+ return stopRequests.has(runId);
180
+ }
181
+ function close() {
182
+ server.close();
183
+ instance = null;
184
+ }
185
+ instance = { broadcast, addRunRecord, isStopRequested, close, port };
186
+ return instance;
187
+ }
188
+ export function getDashboard() {
189
+ return instance;
190
+ }
191
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/browser/dashboard/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { CdpClient } from './cdp.js';
2
+ export interface DialogInfo {
3
+ type: 'alert' | 'confirm' | 'prompt' | 'beforeunload';
4
+ message: string;
5
+ defaultPrompt?: string;
6
+ }
7
+ export declare function setupDialogAutoHandling(client: CdpClient, sessionId: string, autoAccept?: boolean): void;
8
+ export declare function teardownDialogHandling(sessionId: string): void;
9
+ export declare function acceptDialog(client: CdpClient, sessionId: string, text?: string): Promise<void>;
10
+ export declare function dismissDialog(client: CdpClient, sessionId: string): Promise<void>;
11
+ export declare function getDialogStatus(sessionId: string): DialogInfo | null;
12
+ //# sourceMappingURL=dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../../src/browser/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,CAAC;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,IAAI,CA4BrG;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAI9D;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMrG;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvF;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAEpE"}