@dyyz1993/agent-browser 0.24.0 → 0.26.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 (245) hide show
  1. package/bin/agent-browser-darwin-arm64 +0 -0
  2. package/dist/__tests__/e2e/utils/test-helpers.d.ts +2 -2
  3. package/dist/__tests__/e2e/utils/test-helpers.d.ts.map +1 -1
  4. package/dist/__tests__/e2e/utils/test-helpers.js +6 -4
  5. package/dist/__tests__/e2e/utils/test-helpers.js.map +1 -1
  6. package/dist/actions/advanced.d.ts +73 -0
  7. package/dist/actions/advanced.d.ts.map +1 -0
  8. package/dist/actions/advanced.js +390 -0
  9. package/dist/actions/advanced.js.map +1 -0
  10. package/dist/actions/context.d.ts +36 -0
  11. package/dist/actions/context.d.ts.map +1 -0
  12. package/dist/actions/context.js +164 -0
  13. package/dist/actions/context.js.map +1 -0
  14. package/dist/actions/crawl.d.ts +8 -0
  15. package/dist/actions/crawl.d.ts.map +1 -0
  16. package/dist/actions/crawl.js +290 -0
  17. package/dist/actions/crawl.js.map +1 -0
  18. package/dist/actions/elements.d.ts +11 -0
  19. package/dist/actions/elements.d.ts.map +1 -0
  20. package/dist/actions/elements.js +78 -0
  21. package/dist/actions/elements.js.map +1 -0
  22. package/dist/actions/flow.d.ts +4 -0
  23. package/dist/actions/flow.d.ts.map +1 -0
  24. package/dist/actions/flow.js +170 -0
  25. package/dist/actions/flow.js.map +1 -0
  26. package/dist/actions/index.d.ts +7 -0
  27. package/dist/actions/index.d.ts.map +1 -0
  28. package/dist/actions/index.js +323 -0
  29. package/dist/actions/index.js.map +1 -0
  30. package/dist/actions/interact.d.ts +4 -0
  31. package/dist/actions/interact.d.ts.map +1 -0
  32. package/dist/actions/interact.js +162 -0
  33. package/dist/actions/interact.js.map +1 -0
  34. package/dist/actions/interaction.d.ts +31 -0
  35. package/dist/actions/interaction.d.ts.map +1 -0
  36. package/dist/actions/interaction.js +477 -0
  37. package/dist/actions/interaction.js.map +1 -0
  38. package/dist/actions/locators.d.ts +14 -0
  39. package/dist/actions/locators.d.ts.map +1 -0
  40. package/dist/actions/locators.js +310 -0
  41. package/dist/actions/locators.js.map +1 -0
  42. package/dist/actions/map.d.ts +4 -0
  43. package/dist/actions/map.d.ts.map +1 -0
  44. package/dist/actions/map.js +79 -0
  45. package/dist/actions/map.js.map +1 -0
  46. package/dist/actions/meta.d.ts +44 -0
  47. package/dist/actions/meta.d.ts.map +1 -0
  48. package/dist/actions/meta.js +190 -0
  49. package/dist/actions/meta.js.map +1 -0
  50. package/dist/actions/mouse.d.ts +8 -0
  51. package/dist/actions/mouse.d.ts.map +1 -0
  52. package/dist/actions/mouse.js +52 -0
  53. package/dist/actions/mouse.js.map +1 -0
  54. package/dist/actions/recorder.d.ts +20 -0
  55. package/dist/actions/recorder.d.ts.map +1 -0
  56. package/dist/actions/recorder.js +231 -0
  57. package/dist/actions/recorder.js.map +1 -0
  58. package/dist/actions/recording.d.ts +6 -0
  59. package/dist/actions/recording.d.ts.map +1 -0
  60. package/dist/actions/recording.js +22 -0
  61. package/dist/actions/recording.js.map +1 -0
  62. package/dist/actions/scrape.d.ts +10 -0
  63. package/dist/actions/scrape.d.ts.map +1 -0
  64. package/dist/actions/scrape.js +39 -0
  65. package/dist/actions/scrape.js.map +1 -0
  66. package/dist/actions/screencast.d.ts +8 -0
  67. package/dist/actions/screencast.d.ts.map +1 -0
  68. package/dist/actions/screencast.js +56 -0
  69. package/dist/actions/screencast.js.map +1 -0
  70. package/dist/actions/search.d.ts +4 -0
  71. package/dist/actions/search.d.ts.map +1 -0
  72. package/dist/actions/search.js +129 -0
  73. package/dist/actions/search.js.map +1 -0
  74. package/dist/actions/storage.d.ts +14 -0
  75. package/dist/actions/storage.d.ts.map +1 -0
  76. package/dist/actions/storage.js +63 -0
  77. package/dist/actions/storage.js.map +1 -0
  78. package/dist/actions/tabs.d.ts +16 -0
  79. package/dist/actions/tabs.d.ts.map +1 -0
  80. package/dist/actions/tabs.js +47 -0
  81. package/dist/actions/tabs.js.map +1 -0
  82. package/dist/actions/utils.d.ts +15 -0
  83. package/dist/actions/utils.d.ts.map +1 -0
  84. package/dist/actions/utils.js +234 -0
  85. package/dist/actions/utils.js.map +1 -0
  86. package/dist/browser/browser-manager.d.ts +249 -0
  87. package/dist/browser/browser-manager.d.ts.map +1 -0
  88. package/dist/browser/browser-manager.js +1251 -0
  89. package/dist/browser/browser-manager.js.map +1 -0
  90. package/dist/browser/index.d.ts +3 -0
  91. package/dist/browser/index.d.ts.map +1 -0
  92. package/dist/browser/index.js +2 -0
  93. package/dist/browser/index.js.map +1 -0
  94. package/dist/browser/network-tracker.d.ts +39 -0
  95. package/dist/browser/network-tracker.d.ts.map +1 -0
  96. package/dist/browser/network-tracker.js +287 -0
  97. package/dist/browser/network-tracker.js.map +1 -0
  98. package/dist/browser/providers.d.ts +27 -0
  99. package/dist/browser/providers.d.ts.map +1 -0
  100. package/dist/browser/providers.js +293 -0
  101. package/dist/browser/providers.js.map +1 -0
  102. package/dist/browser/recorder-manager.d.ts +69 -0
  103. package/dist/browser/recorder-manager.d.ts.map +1 -0
  104. package/dist/browser/recorder-manager.js +755 -0
  105. package/dist/browser/recorder-manager.js.map +1 -0
  106. package/dist/browser/recording-manager.d.ts +46 -0
  107. package/dist/browser/recording-manager.d.ts.map +1 -0
  108. package/dist/browser/recording-manager.js +156 -0
  109. package/dist/browser/recording-manager.js.map +1 -0
  110. package/dist/browser/screencast-manager.d.ts +49 -0
  111. package/dist/browser/screencast-manager.d.ts.map +1 -0
  112. package/dist/browser/screencast-manager.js +131 -0
  113. package/dist/browser/screencast-manager.js.map +1 -0
  114. package/dist/browser/types.d.ts +101 -0
  115. package/dist/browser/types.d.ts.map +1 -0
  116. package/dist/browser/types.js +2 -0
  117. package/dist/browser/types.js.map +1 -0
  118. package/dist/browser-events.d.ts +25 -0
  119. package/dist/browser-events.d.ts.map +1 -0
  120. package/dist/browser-events.js +15 -0
  121. package/dist/browser-events.js.map +1 -0
  122. package/dist/cli/commands.d.ts.map +1 -1
  123. package/dist/cli/commands.js +145 -1
  124. package/dist/cli/commands.js.map +1 -1
  125. package/dist/cli/connection.d.ts.map +1 -1
  126. package/dist/cli/connection.js +15 -22
  127. package/dist/cli/connection.js.map +1 -1
  128. package/dist/cli/flags.d.ts +1 -0
  129. package/dist/cli/flags.d.ts.map +1 -1
  130. package/dist/cli/flags.js +8 -0
  131. package/dist/cli/flags.js.map +1 -1
  132. package/dist/cli/help.d.ts.map +1 -1
  133. package/dist/cli/help.js +204 -4
  134. package/dist/cli/help.js.map +1 -1
  135. package/dist/cli/output.d.ts.map +1 -1
  136. package/dist/cli/output.js +72 -0
  137. package/dist/cli/output.js.map +1 -1
  138. package/dist/cli.js +149 -14
  139. package/dist/cli.js.map +1 -1
  140. package/dist/daemon.d.ts +1 -1
  141. package/dist/daemon.d.ts.map +1 -1
  142. package/dist/daemon.js +12 -13
  143. package/dist/daemon.js.map +1 -1
  144. package/dist/flow/exporters/playwright.d.ts +23 -1
  145. package/dist/flow/exporters/playwright.d.ts.map +1 -1
  146. package/dist/flow/exporters/playwright.js +333 -85
  147. package/dist/flow/exporters/playwright.js.map +1 -1
  148. package/dist/flow/exporters/python.d.ts +22 -0
  149. package/dist/flow/exporters/python.d.ts.map +1 -1
  150. package/dist/flow/exporters/python.js +325 -74
  151. package/dist/flow/exporters/python.js.map +1 -1
  152. package/dist/flow/exporters/selenium.d.ts.map +1 -1
  153. package/dist/flow/exporters/selenium.js +0 -1
  154. package/dist/flow/exporters/selenium.js.map +1 -1
  155. package/dist/flow/flow-executor.d.ts +1 -1
  156. package/dist/flow/flow-executor.d.ts.map +1 -1
  157. package/dist/flow/flow-executor.js +11 -11
  158. package/dist/flow/flow-executor.js.map +1 -1
  159. package/dist/flow/output.js.map +1 -1
  160. package/dist/flow/plugin-system.d.ts +1 -1
  161. package/dist/flow/plugin-system.d.ts.map +1 -1
  162. package/dist/flow/plugin-system.js +2 -2
  163. package/dist/flow/plugin-system.js.map +1 -1
  164. package/dist/flow/plugins/logging-plugin.js +1 -1
  165. package/dist/flow/plugins/logging-plugin.js.map +1 -1
  166. package/dist/flow/presets/console-capture.js +50 -0
  167. package/dist/flow/presets/fetch-capture.js +107 -0
  168. package/dist/flow/presets/sse-stream.js +85 -0
  169. package/dist/flow/presets/xhr-only.js +44 -0
  170. package/dist/flow/recorder-to-flow.d.ts.map +1 -1
  171. package/dist/flow/recorder-to-flow.js +1 -3
  172. package/dist/flow/recorder-to-flow.js.map +1 -1
  173. package/dist/flow/site-manager.d.ts.map +1 -1
  174. package/dist/flow/site-manager.js +6 -2
  175. package/dist/flow/site-manager.js.map +1 -1
  176. package/dist/human-mouse.d.ts +1 -1
  177. package/dist/human-mouse.d.ts.map +1 -1
  178. package/dist/human-mouse.js +2 -2
  179. package/dist/human-mouse.js.map +1 -1
  180. package/dist/protocol.d.ts.map +1 -1
  181. package/dist/protocol.js +91 -1
  182. package/dist/protocol.js.map +1 -1
  183. package/dist/rc-config.js +4 -4
  184. package/dist/rc-config.js.map +1 -1
  185. package/dist/recorder/inject.js +31 -5
  186. package/dist/snapshot.d.ts.map +1 -1
  187. package/dist/snapshot.js +3 -4
  188. package/dist/snapshot.js.map +1 -1
  189. package/dist/stream-server-standalone.d.ts +1 -1
  190. package/dist/stream-server-standalone.d.ts.map +1 -1
  191. package/dist/stream-server-standalone.js +42 -23
  192. package/dist/stream-server-standalone.js.map +1 -1
  193. package/dist/stream-server.d.ts +1 -1
  194. package/dist/stream-server.d.ts.map +1 -1
  195. package/dist/stream-server.js +26 -21
  196. package/dist/stream-server.js.map +1 -1
  197. package/dist/test-live.js +9 -3
  198. package/dist/test-live.js.map +1 -1
  199. package/dist/types.d.ts +123 -2
  200. package/dist/types.d.ts.map +1 -1
  201. package/dist/types.js.map +1 -1
  202. package/package.json +4 -3
  203. package/scripts/README.md +66 -0
  204. package/scripts/check_goods_container.js +35 -0
  205. package/scripts/check_page_content.js +36 -0
  206. package/scripts/click_applause_rate.js +30 -0
  207. package/scripts/copy-flow-presets.js +25 -0
  208. package/scripts/douyin-flow-test.sh +72 -0
  209. package/scripts/douyin-test.sh +101 -0
  210. package/scripts/explore_jd_page.js +31 -0
  211. package/scripts/extract_all_jd_data.js +80 -0
  212. package/scripts/extract_jd_product_detail.js +62 -0
  213. package/scripts/extract_jd_products_correct_links.js +78 -0
  214. package/scripts/extract_jd_products_final.js +80 -0
  215. package/scripts/extract_jd_reviews.js +48 -0
  216. package/scripts/extract_jd_seafood_final.js +78 -0
  217. package/scripts/extract_multiple_products.js +77 -0
  218. package/scripts/extract_products_no_scroll.js +68 -0
  219. package/scripts/extract_products_simple.js +68 -0
  220. package/scripts/find_applause_rate.js +26 -0
  221. package/scripts/find_jd_links.js +28 -0
  222. package/scripts/find_main_content.js +20 -0
  223. package/scripts/find_product_cards.js +38 -0
  224. package/scripts/find_root_content.js +26 -0
  225. package/scripts/find_unique_products.js +55 -0
  226. package/scripts/get_jd_product_detail.js +16 -0
  227. package/scripts/get_jd_products.js +23 -0
  228. package/scripts/get_jd_seafood_products.js +44 -0
  229. package/scripts/get_product_details_from_images.js +54 -0
  230. package/scripts/verify-form.sh +67 -0
  231. package/scripts/verify-login.sh +65 -0
  232. package/scripts/verify-recording.sh +80 -0
  233. package/scripts/verify-upload.sh +41 -0
  234. package/bin/agent-browser-darwin-x64 +0 -0
  235. package/bin/agent-browser-linux-arm64 +0 -0
  236. package/bin/agent-browser-linux-x64 +0 -0
  237. package/bin/agent-browser-win32-x64.exe +0 -0
  238. package/dist/actions.d.ts +0 -51
  239. package/dist/actions.d.ts.map +0 -1
  240. package/dist/actions.js +0 -2662
  241. package/dist/actions.js.map +0 -1
  242. package/dist/browser.d.ts +0 -651
  243. package/dist/browser.d.ts.map +0 -1
  244. package/dist/browser.js +0 -3088
  245. package/dist/browser.js.map +0 -1
@@ -0,0 +1,190 @@
1
+ import { successResponse, errorResponse } from '../protocol.js';
2
+ import { getViewerUrl, getViewerWsUrl, getViewerPort, getMessageBridgeUrl } from '../rc-config.js';
3
+ import { getInstanceId, getSession } from '../daemon.js';
4
+ import { MessageBridge } from '../message-bridge.js';
5
+ import { loadConfig, getEffectiveValue, getExecutablePath } from '../rc-config.js';
6
+ import { getHumanConfigFromEnv } from '../human-mouse.js';
7
+ export async function handleViewer(command, _browser) {
8
+ const instanceId = getInstanceId();
9
+ return successResponse(command.id, {
10
+ url: getViewerUrl(instanceId),
11
+ wsUrl: getViewerWsUrl(instanceId),
12
+ streamPort: getViewerPort(),
13
+ });
14
+ }
15
+ export async function handleAsk(command, _browser) {
16
+ const session = getSession();
17
+ const bridge = new MessageBridge(getMessageBridgeUrl());
18
+ try {
19
+ const answer = await bridge.ask(command.question, session);
20
+ return successResponse(command.id, { answer });
21
+ }
22
+ catch (error) {
23
+ const message = error instanceof Error ? error.message : String(error);
24
+ return errorResponse(command.id, `Failed to ask question: ${message}`);
25
+ }
26
+ }
27
+ export function handleConfig(command) {
28
+ const humanConfig = getHumanConfigFromEnv();
29
+ const rcConfig = loadConfig();
30
+ const config = {
31
+ session: process.env.AGENT_BROWSER_SESSION || 'default',
32
+ executablePath: getExecutablePath() || null,
33
+ extensions: process.env.AGENT_BROWSER_EXTENSIONS || null,
34
+ profile: process.env.AGENT_BROWSER_PROFILE || null,
35
+ state: process.env.AGENT_BROWSER_STATE || null,
36
+ proxy: process.env.AGENT_BROWSER_PROXY || null,
37
+ proxyBypass: process.env.AGENT_BROWSER_PROXY_BYPASS || null,
38
+ args: process.env.AGENT_BROWSER_ARGS || null,
39
+ userAgent: process.env.AGENT_BROWSER_USER_AGENT || null,
40
+ provider: process.env.AGENT_BROWSER_PROVIDER || null,
41
+ allowFileAccess: process.env.AGENT_BROWSER_ALLOW_FILE_ACCESS === '1',
42
+ streamPort: getViewerPort(),
43
+ headed: process.env.AGENT_BROWSER_HEADED === '1',
44
+ human: humanConfig,
45
+ };
46
+ if (command.json) {
47
+ return successResponse(command.id, { config, rc: rcConfig });
48
+ }
49
+ const viewerHost = getEffectiveValue('viewer.host');
50
+ const bridgeUrl = getEffectiveValue('messageBridge.url');
51
+ const msgProxy = getEffectiveValue('messageProxy.url');
52
+ const lines = [
53
+ 'Agent Browser Configuration',
54
+ '===========================',
55
+ '',
56
+ 'Session & Browser:',
57
+ ` executablePath ${config.executablePath || '(not set)'}`,
58
+ ` AGENT_BROWSER_PROVIDER ${config.provider || '(not set)'}`,
59
+ ` AGENT_BROWSER_HEADED ${config.headed ? 'true' : 'false (default)'}`,
60
+ '',
61
+ 'Viewer & Stream:',
62
+ ` viewer.host ${viewerHost || '(not set, using http://localhost)'}`,
63
+ ` viewer.port ${config.streamPort}`,
64
+ '',
65
+ 'Message Bridge (ask command):',
66
+ ` messageBridge.url ${bridgeUrl || '(not set, using default)'}`,
67
+ ` messageProxy.url ${msgProxy || '(not set)'}`,
68
+ '',
69
+ 'Browser Options:',
70
+ ` AGENT_BROWSER_PROFILE ${config.profile || '(not set)'}`,
71
+ ` AGENT_BROWSER_EXTENSIONS ${config.extensions || '(not set)'}`,
72
+ ` AGENT_BROWSER_ARGS ${config.args || '(not set)'}`,
73
+ ` AGENT_BROWSER_USER_AGENT ${config.userAgent || '(not set)'}`,
74
+ ` AGENT_BROWSER_PROXY ${config.proxy || '(not set)'}`,
75
+ ` AGENT_BROWSER_ALLOW_FILE_ACCESS ${config.allowFileAccess ? 'true' : 'false (default)'}`,
76
+ '',
77
+ 'Human Mode (runtime):',
78
+ ` AGENT_BROWSER_HUMAN ${humanConfig.enabled ? humanConfig.pathType + ' \u2713' : '(disabled)'}`,
79
+ '',
80
+ `Persistent config: ~/.agent-browser/config.json`,
81
+ 'Run "agent-browser config set <key> <value>" to persist settings.',
82
+ 'Run "agent-browser config list" to see configurable keys.',
83
+ ];
84
+ return successResponse(command.id, { config, output: lines.join('\n') });
85
+ }
86
+ export async function handleHistory(command, browser) {
87
+ if (command.clear) {
88
+ browser.clearHistory();
89
+ return successResponse(command.id, { cleared: true });
90
+ }
91
+ const history = browser.getHistory(command.filter);
92
+ return successResponse(command.id, { history });
93
+ }
94
+ export async function handleSelectorFor(command, browser) {
95
+ const store = browser.getSnapshotStore();
96
+ const colonIndex = command.target.indexOf(':');
97
+ if (colonIndex === -1) {
98
+ return errorResponse(command.id, `Invalid target format: "${command.target}". Expected "snapshotId:refOrIndex" (e.g., "snap_3:@e1" or "snap_3:1").`);
99
+ }
100
+ const snapshotId = command.target.substring(0, colonIndex);
101
+ const refOrIndex = command.target.substring(colonIndex + 1);
102
+ await browser.ensureSelectorsGenerated(snapshotId);
103
+ const element = store.getElement(snapshotId, refOrIndex);
104
+ if (!element) {
105
+ return errorResponse(command.id, `Element not found: "${refOrIndex}" in snapshot "${snapshotId}". Run 'snapshot' to get fresh snapshot data.`);
106
+ }
107
+ return successResponse(command.id, {
108
+ snapshotId,
109
+ ref: element.ref,
110
+ index: element.index,
111
+ role: element.role,
112
+ name: element.name,
113
+ cssSelector: element.cssSelector,
114
+ xpath: element.xpath,
115
+ });
116
+ }
117
+ export async function handleSelectorsOf(command, browser) {
118
+ const store = browser.getSnapshotStore();
119
+ await browser.ensureSelectorsGenerated(command.target);
120
+ const elements = store.getElements(command.target);
121
+ if (!elements) {
122
+ return errorResponse(command.id, `Snapshot "${command.target}" not found. Run 'snapshot' to create a new snapshot.`);
123
+ }
124
+ return successResponse(command.id, {
125
+ snapshotId: command.target,
126
+ elements: elements.map((el) => ({
127
+ ref: el.ref,
128
+ index: el.index,
129
+ role: el.role,
130
+ name: el.name,
131
+ cssSelector: el.cssSelector,
132
+ xpath: el.xpath,
133
+ })),
134
+ });
135
+ }
136
+ export async function handleValidate(command, browser) {
137
+ const store = browser.getSnapshotStore();
138
+ await browser.ensureSelectorsGenerated(command.target);
139
+ const elements = store.getElements(command.target);
140
+ if (!elements) {
141
+ return errorResponse(command.id, `Snapshot "${command.target}" not found. Run 'snapshot' to create a new snapshot.`);
142
+ }
143
+ const page = browser.getPage();
144
+ const selectors = elements.map((el) => el.cssSelector);
145
+ const matchCounts = await page.evaluate((sels) => {
146
+ return sels.map((sel) => {
147
+ try {
148
+ return document.querySelectorAll(sel).length;
149
+ }
150
+ catch {
151
+ return -1;
152
+ }
153
+ });
154
+ }, selectors);
155
+ const results = elements.map((el, i) => {
156
+ const matchCount = matchCounts[i];
157
+ let status;
158
+ if (matchCount === -1) {
159
+ status = 'invalid_selector';
160
+ }
161
+ else if (matchCount === 0) {
162
+ status = 'not_found';
163
+ }
164
+ else if (matchCount === 1) {
165
+ status = 'valid';
166
+ }
167
+ else {
168
+ status = 'ambiguous';
169
+ }
170
+ return {
171
+ ref: el.ref,
172
+ index: el.index,
173
+ cssSelector: el.cssSelector,
174
+ status,
175
+ matchCount,
176
+ };
177
+ });
178
+ const failedCount = results.filter((r) => r.status === 'not_found' || r.status === 'invalid_selector').length;
179
+ let newSnapshotId;
180
+ if (failedCount > 0) {
181
+ const newSnapshot = await browser.getSnapshot({ interactive: true });
182
+ newSnapshotId = newSnapshot.snapshotId;
183
+ }
184
+ return successResponse(command.id, {
185
+ snapshotId: command.target,
186
+ results,
187
+ newSnapshotId,
188
+ });
189
+ }
190
+ //# sourceMappingURL=meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/actions/meta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { BrowserManager } from '../browser/index.js';
2
+ import type { Response, MouseMoveCommand, MouseDownCommand, MouseUpCommand, WanderCommand, MouseTrajectoryCommand } from '../types.js';
3
+ export declare function handleMouseMove(command: MouseMoveCommand, browser: BrowserManager): Promise<Response>;
4
+ export declare function handleMouseDown(command: MouseDownCommand, browser: BrowserManager): Promise<Response>;
5
+ export declare function handleMouseUp(command: MouseUpCommand, browser: BrowserManager): Promise<Response>;
6
+ export declare function handleWander(command: WanderCommand, browser: BrowserManager): Promise<Response>;
7
+ export declare function handleMouseTrajectory(command: MouseTrajectoryCommand, browser: BrowserManager): Promise<Response>;
8
+ //# sourceMappingURL=mouse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mouse.d.ts","sourceRoot":"","sources":["../../src/actions/mouse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAIrB,wBAAsB,eAAe,CACnC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAInB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAInB;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAInB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAYnB;AASD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAoBnB"}
@@ -0,0 +1,52 @@
1
+ import { successResponse } from '../protocol.js';
2
+ import { humanMoveTo, humanWander } from '../human-mouse.js';
3
+ export async function handleMouseMove(command, browser) {
4
+ const page = browser.getPage();
5
+ await page.mouse.move(command.x, command.y);
6
+ return successResponse(command.id, { moved: true, x: command.x, y: command.y });
7
+ }
8
+ export async function handleMouseDown(command, browser) {
9
+ const page = browser.getPage();
10
+ await page.mouse.down({ button: command.button ?? 'left' });
11
+ return successResponse(command.id, { down: true });
12
+ }
13
+ export async function handleMouseUp(command, browser) {
14
+ const page = browser.getPage();
15
+ await page.mouse.up({ button: command.button ?? 'left' });
16
+ return successResponse(command.id, { up: true });
17
+ }
18
+ export async function handleWander(command, browser) {
19
+ const page = browser.getPage();
20
+ const viewport = page.viewportSize() ?? { width: 1280, height: 800 };
21
+ const config = command.human ?? { enabled: true, pathType: 'bezier' };
22
+ await humanWander(page, config, {
23
+ duration: command.duration ?? 2000,
24
+ area: viewport,
25
+ });
26
+ return successResponse(command.id, { wandered: true, duration: command.duration ?? 2000 });
27
+ }
28
+ function parseTrajectoryData(data) {
29
+ return data.split(';').map((segment) => {
30
+ const parts = segment.split(':').map(Number);
31
+ return { x: parts[0] || 0, y: parts[1] || 0, delay: parts[2] || 0 };
32
+ });
33
+ }
34
+ export async function handleMouseTrajectory(command, browser) {
35
+ const page = browser.getPage();
36
+ const points = parseTrajectoryData(command.data);
37
+ const config = command.human ?? { enabled: true, pathType: 'bezier' };
38
+ for (let i = 0; i < points.length; i++) {
39
+ const { x, y, delay } = points[i];
40
+ if (delay > 0) {
41
+ await page.waitForTimeout(delay);
42
+ }
43
+ if (config.enabled) {
44
+ await humanMoveTo(page, { x, y }, config);
45
+ }
46
+ else {
47
+ await page.mouse.move(x, y);
48
+ }
49
+ }
50
+ return successResponse(command.id, { moved: true, points: points.length });
51
+ }
52
+ //# sourceMappingURL=mouse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mouse.js","sourceRoot":"","sources":["../../src/actions/mouse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { BrowserManager } from '../browser/index.js';
2
+ import type { Response, RecorderStartCommand, RecorderStopCommand, RecorderStatusCommand, RecorderReplayCommand } from '../types.js';
3
+ export declare function handleRecorderStart(command: RecorderStartCommand, browser: BrowserManager): Promise<Response<{
4
+ started: boolean;
5
+ sessionId: string;
6
+ }>>;
7
+ export declare function handleRecorderStop(command: RecorderStopCommand, browser: BrowserManager): Promise<Response<{
8
+ yaml?: string;
9
+ steps: number;
10
+ path?: string;
11
+ tip?: string;
12
+ }>>;
13
+ export declare function handleRecorderStatus(command: RecorderStatusCommand, browser: BrowserManager): Promise<Response<{
14
+ isRecording: boolean;
15
+ steps: number;
16
+ sessionId?: string;
17
+ }>>;
18
+ declare function handleRecorderReplay(command: RecorderReplayCommand, browser: BrowserManager): Promise<Response>;
19
+ export { handleRecorderReplay };
20
+ //# sourceMappingURL=recorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../src/actions/recorder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,QAAQ,EACR,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAIrB,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAG5D;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAuDlF;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAGhF;AAED,iBAAe,oBAAoB,CACjC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAiMnB;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,231 @@
1
+ import { existsSync, writeFileSync, readdirSync, statSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { successResponse, errorResponse } from '../protocol.js';
4
+ import { getAppDir } from '../daemon.js';
5
+ export async function handleRecorderStart(command, browser) {
6
+ const result = await browser.startRecorder(command.url, command.hide);
7
+ return successResponse(command.id, result);
8
+ }
9
+ export async function handleRecorderStop(command, browser) {
10
+ const result = await browser.stopRecorder();
11
+ if (result.wasRecording === false) {
12
+ const recorderDir = path.join(getAppDir(), 'tmp', 'recordings');
13
+ if (existsSync(recorderDir)) {
14
+ const files = readdirSync(recorderDir)
15
+ .filter((f) => f.endsWith('.yaml') || f.endsWith('.yml'))
16
+ .map((f) => ({
17
+ name: f,
18
+ time: statSync(path.join(recorderDir, f)).mtime.getTime(),
19
+ }))
20
+ .sort((a, b) => b.time - a.time);
21
+ if (files.length > 0) {
22
+ const recentPath = path.join(recorderDir, files[0].name);
23
+ return successResponse(command.id, {
24
+ yaml: '',
25
+ steps: 0,
26
+ path: recentPath,
27
+ note: 'No active recording session. Returning most recent recording file.',
28
+ });
29
+ }
30
+ }
31
+ return successResponse(command.id, {
32
+ yaml: '',
33
+ steps: 0,
34
+ note: 'No active recording session. Use "recorder start" to begin recording.',
35
+ });
36
+ }
37
+ let outputPath;
38
+ let isDefaultPath = false;
39
+ if (command.output) {
40
+ outputPath = path.resolve(command.output);
41
+ }
42
+ else {
43
+ const recorderDir = path.join(getAppDir(), 'tmp', 'recordings');
44
+ if (!existsSync(recorderDir)) {
45
+ const { mkdirSync } = await import('node:fs');
46
+ mkdirSync(recorderDir, { recursive: true });
47
+ }
48
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
49
+ outputPath = path.join(recorderDir, `session-${timestamp}.yaml`);
50
+ isDefaultPath = true;
51
+ }
52
+ writeFileSync(outputPath, result.yaml, 'utf-8');
53
+ return successResponse(command.id, {
54
+ yaml: result.yaml,
55
+ steps: result.steps,
56
+ path: outputPath,
57
+ tip: isDefaultPath ? `Full YAML saved to: ${outputPath}` : undefined,
58
+ });
59
+ }
60
+ export async function handleRecorderStatus(command, browser) {
61
+ const result = browser.getRecorderStatus();
62
+ return successResponse(command.id, result);
63
+ }
64
+ async function handleRecorderReplay(command, browser) {
65
+ const fs = await import('node:fs');
66
+ const pathModule = await import('node:path');
67
+ let yamlPath = command.path;
68
+ if (!yamlPath) {
69
+ const recorderDir = pathModule.join(getAppDir(), 'tmp', 'recordings');
70
+ if (!fs.existsSync(recorderDir)) {
71
+ return errorResponse(command.id, 'No recordings found. Please record first.');
72
+ }
73
+ const files = fs
74
+ .readdirSync(recorderDir)
75
+ .filter((f) => f.endsWith('.yaml') || f.endsWith('.yml'))
76
+ .map((f) => ({
77
+ name: f,
78
+ time: fs.statSync(pathModule.join(recorderDir, f)).mtime.getTime(),
79
+ }))
80
+ .sort((a, b) => b.time - a.time);
81
+ if (files.length === 0) {
82
+ return errorResponse(command.id, 'No recordings found. Please record first.');
83
+ }
84
+ yamlPath = pathModule.join(recorderDir, files[0].name);
85
+ }
86
+ if (!fs.existsSync(yamlPath)) {
87
+ return errorResponse(command.id, `Recording file not found: ${yamlPath}`);
88
+ }
89
+ const yamlContent = fs.readFileSync(yamlPath, 'utf-8');
90
+ const cliCommands = [];
91
+ const lines = yamlContent.split('\n');
92
+ let inSteps = false;
93
+ const parsedSteps = {};
94
+ for (const line of lines) {
95
+ if (/^steps:/.test(line.trim())) {
96
+ inSteps = true;
97
+ continue;
98
+ }
99
+ if (inSteps && /^-\s+id:/.test(line.trim())) {
100
+ const idMatch = line.match(/id:\s*(.+)/);
101
+ if (idMatch)
102
+ parsedSteps.currentId = idMatch[1].trim();
103
+ }
104
+ if (inSteps && /^\s+action:\s*(.+)/.test(line)) {
105
+ // End of steps section when we hit a non-step line
106
+ }
107
+ if (inSteps && !/^\s/.test(line) && !/^$/.test(line) && !/^steps:/.test(line.trim())) {
108
+ inSteps = false;
109
+ }
110
+ }
111
+ let inCliSection = false;
112
+ for (const line of lines) {
113
+ if (line.includes('# CLI Commands')) {
114
+ inCliSection = true;
115
+ continue;
116
+ }
117
+ if (inCliSection && (line.startsWith('agent-browser ') || line.startsWith('AGENT_BROWSER_'))) {
118
+ cliCommands.push(line.trim());
119
+ }
120
+ }
121
+ if (cliCommands.length === 0) {
122
+ return errorResponse(command.id, 'No CLI commands found in recording. Please re-record with the new version.');
123
+ }
124
+ const envLines = cliCommands.filter((l) => l.startsWith('AGENT_BROWSER_'));
125
+ const cmdLines = cliCommands.filter((l) => l.startsWith('agent-browser '));
126
+ const originalEnv = {};
127
+ for (const envLine of envLines) {
128
+ const eqIdx = envLine.indexOf('=');
129
+ if (eqIdx > 0) {
130
+ const key = envLine.substring(0, eqIdx);
131
+ if (key === 'AGENT_BROWSER_HUMAN')
132
+ continue;
133
+ let value = envLine.substring(eqIdx + 1);
134
+ const spaceIdx = value.indexOf(' ');
135
+ if (spaceIdx > 0) {
136
+ value = value.substring(0, spaceIdx);
137
+ }
138
+ originalEnv[key] = process.env[key];
139
+ process.env[key] = value;
140
+ }
141
+ }
142
+ function parseCommandLine(line) {
143
+ const parts = [];
144
+ let current = '';
145
+ let inQuotes = false;
146
+ let quoteChar = '';
147
+ for (let i = 0; i < line.length; i++) {
148
+ const char = line[i];
149
+ if ((char === '"' || char === "'") && !inQuotes) {
150
+ inQuotes = true;
151
+ quoteChar = char;
152
+ }
153
+ else if (char === quoteChar && inQuotes) {
154
+ inQuotes = false;
155
+ quoteChar = '';
156
+ }
157
+ else if (char === ' ' && !inQuotes) {
158
+ if (current) {
159
+ parts.push(current);
160
+ current = '';
161
+ }
162
+ }
163
+ else {
164
+ current += char;
165
+ }
166
+ }
167
+ if (current) {
168
+ parts.push(current);
169
+ }
170
+ return parts;
171
+ }
172
+ const currentSession = process.env.AGENT_BROWSER_SESSION || 'default';
173
+ const results = [];
174
+ for (const cmdLine of cmdLines) {
175
+ try {
176
+ let parts = parseCommandLine(cmdLine);
177
+ if (parts.length > 0 && parts[0] === 'agent-browser') {
178
+ parts = parts.slice(1);
179
+ }
180
+ if (parts.length === 0) {
181
+ results.push({ command: cmdLine, success: true });
182
+ continue;
183
+ }
184
+ const { parseCommand } = await import('../cli/commands.js');
185
+ const { parseFlags } = await import('../cli/flags.js');
186
+ const flags = parseFlags([]);
187
+ if (currentSession !== 'default') {
188
+ flags.session = currentSession;
189
+ }
190
+ const parsedCmd = parseCommand(parts, flags);
191
+ const wasRecording = browser.isRecordingSession();
192
+ if (wasRecording) {
193
+ browser.pauseRecording();
194
+ }
195
+ const COMMAND_TIMEOUT_MS = 5000;
196
+ const { executeCommand } = await import('./index.js');
197
+ const result = (await Promise.race([
198
+ executeCommand(parsedCmd, browser),
199
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`Command timed out after ${COMMAND_TIMEOUT_MS}ms`)), COMMAND_TIMEOUT_MS)),
200
+ ]));
201
+ if (wasRecording) {
202
+ browser.resumeRecording();
203
+ }
204
+ results.push({ command: cmdLine, success: result.success });
205
+ }
206
+ catch (e) {
207
+ const errorMessage = e instanceof Error ? e.message : String(e);
208
+ results.push({ command: cmdLine, success: false, error: errorMessage });
209
+ }
210
+ }
211
+ for (const [key, value] of Object.entries(originalEnv)) {
212
+ if (value === undefined) {
213
+ delete process.env[key];
214
+ }
215
+ else {
216
+ process.env[key] = value;
217
+ }
218
+ }
219
+ const successCount = results.filter((r) => r.success).length;
220
+ const failCount = results.filter((r) => !r.success).length;
221
+ return successResponse(command.id, {
222
+ replayed: true,
223
+ file: yamlPath,
224
+ totalCommands: cmdLines.length,
225
+ successCount,
226
+ failCount,
227
+ results: results.slice(0, 20),
228
+ });
229
+ }
230
+ export { handleRecorderReplay };
231
+ //# sourceMappingURL=recorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.js","sourceRoot":"","sources":["../../src/actions/recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,IAAI,MAAM,WAAW,CAAC;AAS7B,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA6B,EAC7B,OAAuB;IAEvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAA4B,EAC5B,OAAuB;IAEvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;IAE5C,IAAI,MAAM,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAChE,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC;iBACnC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;iBACxD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACX,IAAI,EAAE,CAAC;gBACP,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE;aAC1D,CAAC,CAAC;iBACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACzD,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE;oBACjC,IAAI,EAAE,EAAE;oBACR,KAAK,EAAE,CAAC;oBACR,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,oEAAoE;iBAC3E,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE;YACjC,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,uEAAuE;SAC9E,CAAC,CAAC;IACL,CAAC;IAED,IAAI,UAAkB,CAAC;IACvB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9C,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjE,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,SAAS,OAAO,CAAC,CAAC;QACjE,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEhD,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE;QACjC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;KACrE,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA8B,EAC9B,OAAuB;IAEvB,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAC3C,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,OAA8B,EAC9B,OAAuB;IAEvB,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAE7C,IAAI,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QACtE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,2CAA2C,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,KAAK,GAAG,EAAE;aACb,WAAW,CAAC,WAAW,CAAC;aACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACxD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE;SACnE,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,2CAA2C,CAAC,CAAC;QAChF,CAAC;QACD,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,6BAA6B,QAAQ,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,WAAW,GAA2B,EAAE,CAAC;IAE/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAChC,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACzC,IAAI,OAAO;gBAAE,WAAW,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzD,CAAC;QACD,IAAI,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,mDAAmD;QACrD,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACrF,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACpC,YAAY,GAAG,IAAI,CAAC;YACpB,SAAS;QACX,CAAC;QACD,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;YAC7F,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,aAAa,CAClB,OAAO,CAAC,EAAE,EACV,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAE3E,MAAM,WAAW,GAAuC,EAAE,CAAC;IAC3D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACxC,IAAI,GAAG,KAAK,qBAAqB;gBAAE,SAAS;YAC5C,IAAI,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACjB,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACvC,CAAC;YACD,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,SAAS,gBAAgB,CAAC,IAAY;QACpC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,SAAS,GAAG,EAAE,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAErB,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChD,QAAQ,GAAG,IAAI,CAAC;gBAChB,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;iBAAM,IAAI,IAAI,KAAK,SAAS,IAAI,QAAQ,EAAE,CAAC;gBAC1C,QAAQ,GAAG,KAAK,CAAC;gBACjB,SAAS,GAAG,EAAE,CAAC;YACjB,CAAC;iBAAM,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACrC,IAAI,OAAO,EAAE,CAAC;oBACZ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACpB,OAAO,GAAG,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,SAAS,CAAC;IAEtE,MAAM,OAAO,GAAiE,EAAE,CAAC;IAEjF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,IAAI,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAEtC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,eAAe,EAAE,CAAC;gBACrD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClD,SAAS;YACX,CAAC;YAED,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAC5D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAEvD,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBACjC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;YACjC,CAAC;YACD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAE7C,MAAM,YAAY,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAClD,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,CAAC;YAED,MAAM,kBAAkB,GAAG,IAAI,CAAC;YAChC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC;gBAClC,IAAI,OAAO,CAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAClC,UAAU,CACR,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,kBAAkB,IAAI,CAAC,CAAC,EAC1E,kBAAkB,CACnB,CACF;aACF,CAAC,CAAa,CAAC;YAEhB,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,YAAY,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAE3D,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE;QACjC,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,QAAQ;QACd,aAAa,EAAE,QAAQ,CAAC,MAAM;QAC9B,YAAY;QACZ,SAAS;QACT,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;KAC9B,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { BrowserManager } from '../browser/index.js';
2
+ import type { Response, RecordingStartCommand, RecordingStartData, RecordingStopCommand, RecordingStopData, RecordingRestartCommand, RecordingRestartData } from '../types.js';
3
+ export declare function handleRecordingStart(command: RecordingStartCommand, browser: BrowserManager): Promise<Response<RecordingStartData>>;
4
+ export declare function handleRecordingStop(command: RecordingStopCommand, browser: BrowserManager): Promise<Response<RecordingStopData>>;
5
+ export declare function handleRecordingRestart(command: RecordingRestartCommand, browser: BrowserManager): Promise<Response<RecordingRestartData>>;
6
+ //# sourceMappingURL=recording.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recording.d.ts","sourceRoot":"","sources":["../../src/actions/recording.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,QAAQ,EACR,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAGrB,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAMvC;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAGtC;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAQzC"}
@@ -0,0 +1,22 @@
1
+ import { successResponse } from '../protocol.js';
2
+ export async function handleRecordingStart(command, browser) {
3
+ await browser.startRecording(command.path, command.url);
4
+ return successResponse(command.id, {
5
+ started: true,
6
+ path: command.path,
7
+ });
8
+ }
9
+ export async function handleRecordingStop(command, browser) {
10
+ const result = await browser.stopRecording();
11
+ return successResponse(command.id, result);
12
+ }
13
+ export async function handleRecordingRestart(command, browser) {
14
+ const result = await browser.restartRecording(command.path, command.url);
15
+ return successResponse(command.id, {
16
+ started: true,
17
+ path: command.path,
18
+ previousPath: result.previousPath,
19
+ stopped: result.stopped,
20
+ });
21
+ }
22
+ //# sourceMappingURL=recording.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recording.js","sourceRoot":"","sources":["../../src/actions/recording.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA8B,EAC9B,OAAuB;IAEvB,MAAM,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE;QACjC,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA6B,EAC7B,OAAuB;IAEvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;IAC7C,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAgC,EAChC,OAAuB;IAEvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACzE,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE;QACjC,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { BrowserManager } from '../browser/index.js';
2
+ import type { ScrapeCommand, Response } from '../types.js';
3
+ export interface ScrapeResult {
4
+ url: string;
5
+ title: string;
6
+ content: string;
7
+ format: 'text' | 'html' | 'markdown';
8
+ }
9
+ export declare function handleScrape(command: ScrapeCommand, browser: BrowserManager): Promise<Response<ScrapeResult>>;
10
+ //# sourceMappingURL=scrape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrape.d.ts","sourceRoot":"","sources":["../../src/actions/scrape.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI3D,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;CACtC;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAuCjC"}
@@ -0,0 +1,39 @@
1
+ import { successResponse } from '../protocol.js';
2
+ import { extractContentFromPage } from './utils.js';
3
+ export async function handleScrape(command, browser) {
4
+ const page = browser.getPage();
5
+ if (!page) {
6
+ return {
7
+ id: command.id,
8
+ success: false,
9
+ error: 'Browser page not initialized',
10
+ };
11
+ }
12
+ const timeout = (command.timeout ?? 15) * 1000;
13
+ try {
14
+ await page.goto(command.url, {
15
+ timeout,
16
+ waitUntil: 'domcontentloaded',
17
+ });
18
+ await Promise.race([
19
+ page.waitForLoadState('networkidle', { timeout: Math.min(timeout, 5000) }).catch(() => { }),
20
+ page.waitForTimeout(3000),
21
+ ]);
22
+ const format = command.format ?? 'markdown';
23
+ const content = await extractContentFromPage(page, format, command.selector);
24
+ return successResponse(command.id, {
25
+ url: page.url(),
26
+ title: await page.title(),
27
+ content,
28
+ format,
29
+ });
30
+ }
31
+ catch (error) {
32
+ return {
33
+ id: command.id,
34
+ success: false,
35
+ error: error instanceof Error ? error.message : String(error),
36
+ };
37
+ }
38
+ }
39
+ //# sourceMappingURL=scrape.js.map