@dyyz1993/agent-browser 0.25.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 (217) hide show
  1. package/dist/__tests__/e2e/utils/test-helpers.d.ts +2 -2
  2. package/dist/__tests__/e2e/utils/test-helpers.d.ts.map +1 -1
  3. package/dist/__tests__/e2e/utils/test-helpers.js +6 -4
  4. package/dist/__tests__/e2e/utils/test-helpers.js.map +1 -1
  5. package/dist/actions/advanced.d.ts +73 -0
  6. package/dist/actions/advanced.d.ts.map +1 -0
  7. package/dist/actions/advanced.js +390 -0
  8. package/dist/actions/advanced.js.map +1 -0
  9. package/dist/actions/context.d.ts +36 -0
  10. package/dist/actions/context.d.ts.map +1 -0
  11. package/dist/actions/context.js +164 -0
  12. package/dist/actions/context.js.map +1 -0
  13. package/dist/actions/crawl.d.ts +8 -0
  14. package/dist/actions/crawl.d.ts.map +1 -0
  15. package/dist/actions/crawl.js +290 -0
  16. package/dist/actions/crawl.js.map +1 -0
  17. package/dist/actions/elements.d.ts +11 -0
  18. package/dist/actions/elements.d.ts.map +1 -0
  19. package/dist/actions/elements.js +78 -0
  20. package/dist/actions/elements.js.map +1 -0
  21. package/dist/actions/flow.d.ts +4 -0
  22. package/dist/actions/flow.d.ts.map +1 -0
  23. package/dist/actions/flow.js +170 -0
  24. package/dist/actions/flow.js.map +1 -0
  25. package/dist/actions/index.d.ts +7 -0
  26. package/dist/actions/index.d.ts.map +1 -0
  27. package/dist/actions/index.js +323 -0
  28. package/dist/actions/index.js.map +1 -0
  29. package/dist/actions/interact.d.ts +4 -0
  30. package/dist/actions/interact.d.ts.map +1 -0
  31. package/dist/actions/interact.js +162 -0
  32. package/dist/actions/interact.js.map +1 -0
  33. package/dist/actions/interaction.d.ts +31 -0
  34. package/dist/actions/interaction.d.ts.map +1 -0
  35. package/dist/actions/interaction.js +477 -0
  36. package/dist/actions/interaction.js.map +1 -0
  37. package/dist/actions/locators.d.ts +14 -0
  38. package/dist/actions/locators.d.ts.map +1 -0
  39. package/dist/actions/locators.js +310 -0
  40. package/dist/actions/locators.js.map +1 -0
  41. package/dist/actions/map.d.ts +4 -0
  42. package/dist/actions/map.d.ts.map +1 -0
  43. package/dist/actions/map.js +79 -0
  44. package/dist/actions/map.js.map +1 -0
  45. package/dist/actions/meta.d.ts +44 -0
  46. package/dist/actions/meta.d.ts.map +1 -0
  47. package/dist/actions/meta.js +190 -0
  48. package/dist/actions/meta.js.map +1 -0
  49. package/dist/actions/mouse.d.ts +8 -0
  50. package/dist/actions/mouse.d.ts.map +1 -0
  51. package/dist/actions/mouse.js +52 -0
  52. package/dist/actions/mouse.js.map +1 -0
  53. package/dist/actions/recorder.d.ts +20 -0
  54. package/dist/actions/recorder.d.ts.map +1 -0
  55. package/dist/actions/recorder.js +231 -0
  56. package/dist/actions/recorder.js.map +1 -0
  57. package/dist/actions/recording.d.ts +6 -0
  58. package/dist/actions/recording.d.ts.map +1 -0
  59. package/dist/actions/recording.js +22 -0
  60. package/dist/actions/recording.js.map +1 -0
  61. package/dist/actions/scrape.d.ts +10 -0
  62. package/dist/actions/scrape.d.ts.map +1 -0
  63. package/dist/actions/scrape.js +39 -0
  64. package/dist/actions/scrape.js.map +1 -0
  65. package/dist/actions/screencast.d.ts +8 -0
  66. package/dist/actions/screencast.d.ts.map +1 -0
  67. package/dist/actions/screencast.js +56 -0
  68. package/dist/actions/screencast.js.map +1 -0
  69. package/dist/actions/search.d.ts +4 -0
  70. package/dist/actions/search.d.ts.map +1 -0
  71. package/dist/actions/search.js +129 -0
  72. package/dist/actions/search.js.map +1 -0
  73. package/dist/actions/storage.d.ts +14 -0
  74. package/dist/actions/storage.d.ts.map +1 -0
  75. package/dist/actions/storage.js +63 -0
  76. package/dist/actions/storage.js.map +1 -0
  77. package/dist/actions/tabs.d.ts +16 -0
  78. package/dist/actions/tabs.d.ts.map +1 -0
  79. package/dist/actions/tabs.js +47 -0
  80. package/dist/actions/tabs.js.map +1 -0
  81. package/dist/actions/utils.d.ts +15 -0
  82. package/dist/actions/utils.d.ts.map +1 -0
  83. package/dist/actions/utils.js +234 -0
  84. package/dist/actions/utils.js.map +1 -0
  85. package/dist/browser/browser-manager.d.ts +249 -0
  86. package/dist/browser/browser-manager.d.ts.map +1 -0
  87. package/dist/browser/browser-manager.js +1251 -0
  88. package/dist/browser/browser-manager.js.map +1 -0
  89. package/dist/browser/index.d.ts +3 -0
  90. package/dist/browser/index.d.ts.map +1 -0
  91. package/dist/browser/index.js +2 -0
  92. package/dist/browser/index.js.map +1 -0
  93. package/dist/browser/network-tracker.d.ts +39 -0
  94. package/dist/browser/network-tracker.d.ts.map +1 -0
  95. package/dist/browser/network-tracker.js +287 -0
  96. package/dist/browser/network-tracker.js.map +1 -0
  97. package/dist/browser/providers.d.ts +27 -0
  98. package/dist/browser/providers.d.ts.map +1 -0
  99. package/dist/browser/providers.js +293 -0
  100. package/dist/browser/providers.js.map +1 -0
  101. package/dist/browser/recorder-manager.d.ts +69 -0
  102. package/dist/browser/recorder-manager.d.ts.map +1 -0
  103. package/dist/browser/recorder-manager.js +755 -0
  104. package/dist/browser/recorder-manager.js.map +1 -0
  105. package/dist/browser/recording-manager.d.ts +46 -0
  106. package/dist/browser/recording-manager.d.ts.map +1 -0
  107. package/dist/browser/recording-manager.js +156 -0
  108. package/dist/browser/recording-manager.js.map +1 -0
  109. package/dist/browser/screencast-manager.d.ts +49 -0
  110. package/dist/browser/screencast-manager.d.ts.map +1 -0
  111. package/dist/browser/screencast-manager.js +131 -0
  112. package/dist/browser/screencast-manager.js.map +1 -0
  113. package/dist/browser/types.d.ts +101 -0
  114. package/dist/browser/types.d.ts.map +1 -0
  115. package/dist/browser/types.js +2 -0
  116. package/dist/browser/types.js.map +1 -0
  117. package/dist/browser-events.d.ts +25 -0
  118. package/dist/browser-events.d.ts.map +1 -0
  119. package/dist/browser-events.js +15 -0
  120. package/dist/browser-events.js.map +1 -0
  121. package/dist/cli/commands.d.ts.map +1 -1
  122. package/dist/cli/commands.js +140 -1
  123. package/dist/cli/commands.js.map +1 -1
  124. package/dist/cli/connection.d.ts.map +1 -1
  125. package/dist/cli/connection.js +15 -22
  126. package/dist/cli/connection.js.map +1 -1
  127. package/dist/cli/help.d.ts.map +1 -1
  128. package/dist/cli/help.js +153 -3
  129. package/dist/cli/help.js.map +1 -1
  130. package/dist/cli/output.d.ts.map +1 -1
  131. package/dist/cli/output.js +72 -0
  132. package/dist/cli/output.js.map +1 -1
  133. package/dist/cli.js +3 -4
  134. package/dist/cli.js.map +1 -1
  135. package/dist/daemon.d.ts +1 -1
  136. package/dist/daemon.d.ts.map +1 -1
  137. package/dist/daemon.js +12 -13
  138. package/dist/daemon.js.map +1 -1
  139. package/dist/flow/exporters/playwright.d.ts +23 -1
  140. package/dist/flow/exporters/playwright.d.ts.map +1 -1
  141. package/dist/flow/exporters/playwright.js +333 -85
  142. package/dist/flow/exporters/playwright.js.map +1 -1
  143. package/dist/flow/exporters/python.d.ts +22 -0
  144. package/dist/flow/exporters/python.d.ts.map +1 -1
  145. package/dist/flow/exporters/python.js +325 -74
  146. package/dist/flow/exporters/python.js.map +1 -1
  147. package/dist/flow/exporters/selenium.d.ts.map +1 -1
  148. package/dist/flow/exporters/selenium.js +0 -1
  149. package/dist/flow/exporters/selenium.js.map +1 -1
  150. package/dist/flow/flow-executor.d.ts +1 -1
  151. package/dist/flow/flow-executor.d.ts.map +1 -1
  152. package/dist/flow/flow-executor.js +11 -11
  153. package/dist/flow/flow-executor.js.map +1 -1
  154. package/dist/flow/output.js.map +1 -1
  155. package/dist/flow/plugin-system.d.ts +1 -1
  156. package/dist/flow/plugin-system.d.ts.map +1 -1
  157. package/dist/flow/plugin-system.js +2 -2
  158. package/dist/flow/plugin-system.js.map +1 -1
  159. package/dist/flow/plugins/logging-plugin.js +1 -1
  160. package/dist/flow/plugins/logging-plugin.js.map +1 -1
  161. package/dist/flow/presets/console-capture.js +33 -14
  162. package/dist/flow/presets/fetch-capture.js +52 -23
  163. package/dist/flow/presets/sse-stream.js +35 -17
  164. package/dist/flow/presets/xhr-only.js +22 -12
  165. package/dist/flow/recorder-to-flow.d.ts.map +1 -1
  166. package/dist/flow/recorder-to-flow.js +1 -3
  167. package/dist/flow/recorder-to-flow.js.map +1 -1
  168. package/dist/flow/site-manager.d.ts.map +1 -1
  169. package/dist/flow/site-manager.js +6 -2
  170. package/dist/flow/site-manager.js.map +1 -1
  171. package/dist/human-mouse.d.ts +1 -1
  172. package/dist/human-mouse.d.ts.map +1 -1
  173. package/dist/human-mouse.js +2 -2
  174. package/dist/human-mouse.js.map +1 -1
  175. package/dist/protocol.d.ts.map +1 -1
  176. package/dist/protocol.js +90 -0
  177. package/dist/protocol.js.map +1 -1
  178. package/dist/rc-config.js +4 -4
  179. package/dist/rc-config.js.map +1 -1
  180. package/dist/recorder/inject.js +31 -5
  181. package/dist/snapshot.d.ts.map +1 -1
  182. package/dist/snapshot.js +3 -4
  183. package/dist/snapshot.js.map +1 -1
  184. package/dist/stream-server-standalone.d.ts +1 -1
  185. package/dist/stream-server-standalone.d.ts.map +1 -1
  186. package/dist/stream-server-standalone.js +42 -23
  187. package/dist/stream-server-standalone.js.map +1 -1
  188. package/dist/stream-server.d.ts +1 -1
  189. package/dist/stream-server.d.ts.map +1 -1
  190. package/dist/stream-server.js +26 -21
  191. package/dist/stream-server.js.map +1 -1
  192. package/dist/test-live.js +9 -3
  193. package/dist/test-live.js.map +1 -1
  194. package/dist/types.d.ts +122 -1
  195. package/dist/types.d.ts.map +1 -1
  196. package/dist/types.js.map +1 -1
  197. package/package.json +4 -3
  198. package/scripts/README.md +66 -0
  199. package/scripts/copy-flow-presets.js +25 -0
  200. package/scripts/douyin-flow-test.sh +72 -0
  201. package/scripts/douyin-test.sh +101 -0
  202. package/dist/actions.d.ts +0 -51
  203. package/dist/actions.d.ts.map +0 -1
  204. package/dist/actions.js +0 -2662
  205. package/dist/actions.js.map +0 -1
  206. package/dist/browser.d.ts +0 -651
  207. package/dist/browser.d.ts.map +0 -1
  208. package/dist/browser.js +0 -3088
  209. package/dist/browser.js.map +0 -1
  210. package/dist/ios-actions.d.ts +0 -11
  211. package/dist/ios-actions.d.ts.map +0 -1
  212. package/dist/ios-actions.js +0 -228
  213. package/dist/ios-actions.js.map +0 -1
  214. package/dist/ios-manager.d.ts +0 -266
  215. package/dist/ios-manager.d.ts.map +0 -1
  216. package/dist/ios-manager.js +0 -1076
  217. package/dist/ios-manager.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrape.js","sourceRoot":"","sources":["../../src/actions/scrape.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAkB,sBAAsB,EAAE,MAAM,YAAY,CAAC;AASpE,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAsB,EACtB,OAAuB;IAEvB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,8BAA8B;SACtC,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAC3B,OAAO;YACP,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,IAAI,CAAC;YACjB,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;YAC1F,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;SAC1B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7E,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE;YACjC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;YACf,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE;YACzB,OAAO;YACP,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { BrowserManager } from '../browser/index.js';
2
+ import type { Response, ScreencastStartCommand, ScreencastStartData, ScreencastStopCommand, ScreencastStopData, InputMouseCommand, InputKeyboardCommand, InputTouchCommand, InputEventData } from '../types.js';
3
+ export declare function handleScreencastStart(command: ScreencastStartCommand, browser: BrowserManager): Promise<Response<ScreencastStartData>>;
4
+ export declare function handleScreencastStop(command: ScreencastStopCommand, browser: BrowserManager): Promise<Response<ScreencastStopData>>;
5
+ export declare function handleInputMouse(command: InputMouseCommand, browser: BrowserManager): Promise<Response<InputEventData>>;
6
+ export declare function handleInputKeyboard(command: InputKeyboardCommand, browser: BrowserManager): Promise<Response<InputEventData>>;
7
+ export declare function handleInputTouch(command: InputTouchCommand, browser: BrowserManager): Promise<Response<InputEventData>>;
8
+ //# sourceMappingURL=screencast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screencast.d.ts","sourceRoot":"","sources":["../../src/actions/screencast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,QAAQ,EACR,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACf,MAAM,aAAa,CAAC;AAIrB,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAmBxC;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAGvC;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAYnC;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CASnC;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAOnC"}
@@ -0,0 +1,56 @@
1
+ import { successResponse } from '../protocol.js';
2
+ import { getScreencastFrameCallback } from '../browser-events.js';
3
+ export async function handleScreencastStart(command, browser) {
4
+ const screencastFrameCallback = getScreencastFrameCallback();
5
+ if (!screencastFrameCallback) {
6
+ throw new Error('Screencast frame callback not set. Start the streaming server first.');
7
+ }
8
+ await browser.startScreencast(screencastFrameCallback, {
9
+ format: command.format,
10
+ quality: command.quality,
11
+ maxWidth: command.maxWidth,
12
+ maxHeight: command.maxHeight,
13
+ everyNthFrame: command.everyNthFrame,
14
+ });
15
+ return successResponse(command.id, {
16
+ started: true,
17
+ format: command.format ?? 'jpeg',
18
+ quality: command.quality ?? 80,
19
+ });
20
+ }
21
+ export async function handleScreencastStop(command, browser) {
22
+ await browser.stopScreencast();
23
+ return successResponse(command.id, { stopped: true });
24
+ }
25
+ export async function handleInputMouse(command, browser) {
26
+ await browser.injectMouseEvent({
27
+ type: command.type,
28
+ x: command.x,
29
+ y: command.y,
30
+ button: command.button,
31
+ clickCount: command.clickCount,
32
+ deltaX: command.deltaX,
33
+ deltaY: command.deltaY,
34
+ modifiers: command.modifiers,
35
+ });
36
+ return successResponse(command.id, { injected: true });
37
+ }
38
+ export async function handleInputKeyboard(command, browser) {
39
+ await browser.injectKeyboardEvent({
40
+ type: command.type,
41
+ key: command.key,
42
+ code: command.code,
43
+ text: command.text,
44
+ modifiers: command.modifiers,
45
+ });
46
+ return successResponse(command.id, { injected: true });
47
+ }
48
+ export async function handleInputTouch(command, browser) {
49
+ await browser.injectTouchEvent({
50
+ type: command.type,
51
+ touchPoints: command.touchPoints,
52
+ modifiers: command.modifiers,
53
+ });
54
+ return successResponse(command.id, { injected: true });
55
+ }
56
+ //# sourceMappingURL=screencast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screencast.js","sourceRoot":"","sources":["../../src/actions/screencast.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAA+B,EAC/B,OAAuB;IAEvB,MAAM,uBAAuB,GAAG,0BAA0B,EAAE,CAAC;IAC7D,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,OAAO,CAAC,eAAe,CAAC,uBAAuB,EAAE;QACrD,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE;QACjC,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA8B,EAC9B,OAAuB;IAEvB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;IAC/B,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA0B,EAC1B,OAAuB;IAEvB,MAAM,OAAO,CAAC,gBAAgB,CAAC;QAC7B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IACH,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA6B,EAC7B,OAAuB;IAEvB,MAAM,OAAO,CAAC,mBAAmB,CAAC;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IACH,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA0B,EAC1B,OAAuB;IAEvB,MAAM,OAAO,CAAC,gBAAgB,CAAC;QAC7B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IACH,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { BrowserManager } from '../browser/index.js';
2
+ import type { SearchCommand, Response, SearchResponse } from '../types.js';
3
+ export declare function handleSearch(command: SearchCommand, browser: BrowserManager): Promise<Response<SearchResponse>>;
4
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/actions/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAgB,MAAM,aAAa,CAAC;AA0FzF,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAwDnC"}
@@ -0,0 +1,129 @@
1
+ import { successResponse } from '../protocol.js';
2
+ const ENGINE_URLS = {
3
+ google: 'https://www.google.com/search',
4
+ bing: 'https://www.bing.com/search',
5
+ duckduckgo: 'https://duckduckgo.com/',
6
+ };
7
+ const SELECTORS = {
8
+ google: {
9
+ result: 'div.g, div[data-hveid]',
10
+ title: 'h3',
11
+ link: 'a[href]',
12
+ snippet: 'div[data-sncf-ied="cf"] span, div.VwiC3b, div.st',
13
+ },
14
+ bing: {
15
+ result: 'li.b_algo',
16
+ title: 'h2',
17
+ link: 'a[href]',
18
+ snippet: 'p, div.b_caption p',
19
+ },
20
+ duckduckgo: {
21
+ result: 'li[data-layout="organic"], div.result',
22
+ title: 'h2, a.result__a',
23
+ link: 'a[href]',
24
+ snippet: 'a.result__snippet, p.result__snippet',
25
+ },
26
+ };
27
+ async function parseGoogleResults(page, limit) {
28
+ const results = [];
29
+ const elements = await page.locator(SELECTORS.google.result).all();
30
+ for (const el of elements.slice(0, limit)) {
31
+ try {
32
+ const title = await el.locator(SELECTORS.google.title).textContent();
33
+ const linkEl = el.locator(SELECTORS.google.link).first();
34
+ const url = await linkEl.getAttribute('href');
35
+ const snippet = await el.locator(SELECTORS.google.snippet).textContent();
36
+ if (title && url && url.startsWith('http')) {
37
+ results.push({ title: title.trim(), url, snippet: snippet?.trim() });
38
+ }
39
+ }
40
+ catch { }
41
+ }
42
+ return results;
43
+ }
44
+ async function parseBingResults(page, limit) {
45
+ const results = [];
46
+ const elements = await page.locator(SELECTORS.bing.result).all();
47
+ for (const el of elements.slice(0, limit)) {
48
+ try {
49
+ const title = await el.locator(SELECTORS.bing.title).textContent();
50
+ const linkEl = el.locator(SELECTORS.bing.link).first();
51
+ const url = await linkEl.getAttribute('href');
52
+ const snippet = await el.locator(SELECTORS.bing.snippet).textContent();
53
+ if (title && url) {
54
+ results.push({ title: title.trim(), url, snippet: snippet?.trim() });
55
+ }
56
+ }
57
+ catch { }
58
+ }
59
+ return results;
60
+ }
61
+ async function parseDuckDuckGoResults(page, limit) {
62
+ const results = [];
63
+ const elements = await page.locator(SELECTORS.duckduckgo.result).all();
64
+ for (const el of elements.slice(0, limit)) {
65
+ try {
66
+ const title = await el.locator(SELECTORS.duckduckgo.title).textContent();
67
+ const linkEl = el.locator(SELECTORS.duckduckgo.link).first();
68
+ const url = await linkEl.getAttribute('href');
69
+ const snippet = await el.locator(SELECTORS.duckduckgo.snippet).textContent();
70
+ if (title && url && url.startsWith('http')) {
71
+ results.push({ title: title.trim(), url, snippet: snippet?.trim() });
72
+ }
73
+ }
74
+ catch { }
75
+ }
76
+ return results;
77
+ }
78
+ export async function handleSearch(command, browser) {
79
+ if (!browser.isLaunched()) {
80
+ await browser.launch({
81
+ id: 'auto',
82
+ action: 'launch',
83
+ headless: command.headless ?? true,
84
+ });
85
+ }
86
+ const page = browser.getPage();
87
+ const engine = command.engine ?? 'google';
88
+ const limit = command.limit ?? 10;
89
+ const timeout = (command.timeout ?? 15) * 1000;
90
+ try {
91
+ const searchUrl = `${ENGINE_URLS[engine]}?q=${encodeURIComponent(command.query)}`;
92
+ await page.goto(searchUrl, {
93
+ timeout,
94
+ waitUntil: 'domcontentloaded',
95
+ });
96
+ await Promise.race([
97
+ page.waitForLoadState('networkidle', { timeout: Math.min(timeout, 5000) }).catch(() => { }),
98
+ page.waitForTimeout(3000),
99
+ ]);
100
+ let results;
101
+ switch (engine) {
102
+ case 'google':
103
+ results = await parseGoogleResults(page, limit);
104
+ break;
105
+ case 'bing':
106
+ results = await parseBingResults(page, limit);
107
+ break;
108
+ case 'duckduckgo':
109
+ results = await parseDuckDuckGoResults(page, limit);
110
+ break;
111
+ default:
112
+ results = [];
113
+ }
114
+ return successResponse(command.id, {
115
+ query: command.query,
116
+ engine,
117
+ results,
118
+ total: results.length,
119
+ });
120
+ }
121
+ catch (error) {
122
+ return {
123
+ id: command.id,
124
+ success: false,
125
+ error: error instanceof Error ? error.message : String(error),
126
+ };
127
+ }
128
+ }
129
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/actions/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { BrowserManager } from '../browser/index.js';
2
+ import type { Command, Response, CookiesSetCommand, StorageGetCommand, StorageSetCommand, StorageClearCommand } from '../types.js';
3
+ export declare function handleCookiesGet(command: Command & {
4
+ action: 'cookies_get';
5
+ urls?: string[];
6
+ }, browser: BrowserManager): Promise<Response>;
7
+ export declare function handleCookiesSet(command: CookiesSetCommand, browser: BrowserManager): Promise<Response>;
8
+ export declare function handleCookiesClear(command: Command & {
9
+ action: 'cookies_clear';
10
+ }, browser: BrowserManager): Promise<Response>;
11
+ export declare function handleStorageGet(command: StorageGetCommand, browser: BrowserManager): Promise<Response>;
12
+ export declare function handleStorageSet(command: StorageSetCommand, browser: BrowserManager): Promise<Response>;
13
+ export declare function handleStorageClear(command: StorageClearCommand, browser: BrowserManager): Promise<Response>;
14
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/actions/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAGrB,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,OAAO,GAAG;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EAC7D,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAKnB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAYnB;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,GAAG;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,EAC9C,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAKnB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAuBnB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAQnB;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAMnB"}
@@ -0,0 +1,63 @@
1
+ import { successResponse } from '../protocol.js';
2
+ export async function handleCookiesGet(command, browser) {
3
+ const page = browser.getPage();
4
+ const context = page.context();
5
+ const cookies = await context.cookies(command.urls);
6
+ return successResponse(command.id, { cookies });
7
+ }
8
+ export async function handleCookiesSet(command, browser) {
9
+ const page = browser.getPage();
10
+ const context = page.context();
11
+ const pageUrl = page.url();
12
+ const cookies = command.cookies.map((cookie) => {
13
+ if (!cookie.url && !cookie.domain && !cookie.path) {
14
+ return { ...cookie, url: pageUrl };
15
+ }
16
+ return cookie;
17
+ });
18
+ await context.addCookies(cookies);
19
+ return successResponse(command.id, { set: true });
20
+ }
21
+ export async function handleCookiesClear(command, browser) {
22
+ const page = browser.getPage();
23
+ const context = page.context();
24
+ await context.clearCookies();
25
+ return successResponse(command.id, { cleared: true });
26
+ }
27
+ export async function handleStorageGet(command, browser) {
28
+ const frame = browser.getFrame();
29
+ const storageType = command.type === 'local' ? 'localStorage' : 'sessionStorage';
30
+ if (command.key) {
31
+ const value = await frame.evaluate(`
32
+ ${storageType}.getItem(${JSON.stringify(command.key)})
33
+ `);
34
+ return successResponse(command.id, { key: command.key, value });
35
+ }
36
+ else {
37
+ const data = await frame.evaluate(`
38
+ (() => {
39
+ const storage = ${storageType};
40
+ const result = {};
41
+ for (let i = 0; i < storage.length; i++) {
42
+ const key = storage.key(i);
43
+ if (key) result[key] = storage.getItem(key);
44
+ }
45
+ return result;
46
+ })()
47
+ `);
48
+ return successResponse(command.id, { data });
49
+ }
50
+ }
51
+ export async function handleStorageSet(command, browser) {
52
+ const frame = browser.getFrame();
53
+ const storageType = command.type === 'local' ? 'localStorage' : 'sessionStorage';
54
+ await frame.evaluate(`${storageType}.setItem(${JSON.stringify(command.key)}, ${JSON.stringify(command.value)})`);
55
+ return successResponse(command.id, { set: true });
56
+ }
57
+ export async function handleStorageClear(command, browser) {
58
+ const frame = browser.getFrame();
59
+ const storageType = command.type === 'local' ? 'localStorage' : 'sessionStorage';
60
+ await frame.evaluate(`${storageType}.clear()`);
61
+ return successResponse(command.id, { cleared: true });
62
+ }
63
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/actions/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { BrowserManager } from '../browser/index.js';
2
+ import type { Command, Response, TabNewCommand, TabNewData, TabListData, TabSwitchCommand, TabSwitchData, TabCloseCommand, TabCloseData, WindowNewCommand } from '../types.js';
3
+ export declare function handleClose(command: Command & {
4
+ action: 'close';
5
+ }, browser: BrowserManager): Promise<Response>;
6
+ export declare function handleTabNew(command: TabNewCommand, browser: BrowserManager): Promise<Response<TabNewData>>;
7
+ export declare function handleTabList(command: Command & {
8
+ action: 'tab_list';
9
+ }, browser: BrowserManager): Promise<Response<TabListData>>;
10
+ export declare function handleFrames(command: Command & {
11
+ action: 'frames';
12
+ }, browser: BrowserManager): Promise<Response>;
13
+ export declare function handleTabSwitch(command: TabSwitchCommand, browser: BrowserManager): Promise<Response<TabSwitchData>>;
14
+ export declare function handleTabClose(command: TabCloseCommand, browser: BrowserManager): Promise<Response<TabCloseData>>;
15
+ export declare function handleWindowNew(command: WindowNewCommand, browser: BrowserManager): Promise<Response<TabNewData>>;
16
+ //# sourceMappingURL=tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/actions/tabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EACR,aAAa,EACb,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAGrB,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,GAAG;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,EACtC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAGnB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAS/B;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,GAAG;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,EACzC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAMhC;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,OAAO,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,EACvC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CASnB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAOlC;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAGjC;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAG/B"}
@@ -0,0 +1,47 @@
1
+ import { successResponse } from '../protocol.js';
2
+ export async function handleClose(command, browser) {
3
+ await browser.close();
4
+ return successResponse(command.id, { closed: true });
5
+ }
6
+ export async function handleTabNew(command, browser) {
7
+ const result = await browser.newTab();
8
+ if (command.url) {
9
+ const page = browser.getPage();
10
+ await page.goto(command.url, { waitUntil: 'domcontentloaded' });
11
+ }
12
+ return successResponse(command.id, result);
13
+ }
14
+ export async function handleTabList(command, browser) {
15
+ const tabs = await browser.listTabs();
16
+ return successResponse(command.id, {
17
+ tabs,
18
+ active: browser.getActiveIndex(),
19
+ });
20
+ }
21
+ export async function handleFrames(command, browser) {
22
+ const frames = browser.listFrames();
23
+ if (frames.length === 0) {
24
+ return successResponse(command.id, {
25
+ frames: [],
26
+ tip: 'No iframes found on this page.',
27
+ });
28
+ }
29
+ return successResponse(command.id, { frames });
30
+ }
31
+ export async function handleTabSwitch(command, browser) {
32
+ const result = await browser.switchTo(command.index);
33
+ const page = browser.getPage();
34
+ return successResponse(command.id, {
35
+ ...result,
36
+ title: await page.title(),
37
+ });
38
+ }
39
+ export async function handleTabClose(command, browser) {
40
+ const result = await browser.closeTab(command.index);
41
+ return successResponse(command.id, result);
42
+ }
43
+ export async function handleWindowNew(command, browser) {
44
+ const result = await browser.newWindow(command.viewport);
45
+ return successResponse(command.id, result);
46
+ }
47
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/actions/tabs.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAsC,EACtC,OAAuB;IAEvB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAsB,EACtB,OAAuB;IAEvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;IAEtC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAyC,EACzC,OAAuB;IAEvB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;IACtC,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE;QACjC,IAAI;QACJ,MAAM,EAAE,OAAO,CAAC,cAAc,EAAE;KACjC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAuC,EACvC,OAAuB;IAEvB,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE;YACjC,MAAM,EAAE,EAAE;YACV,GAAG,EAAE,gCAAgC;SACtC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAyB,EACzB,OAAuB;IAEvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/B,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE;QACjC,GAAG,MAAM;QACT,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAwB,EACxB,OAAuB;IAEvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAyB,EACzB,OAAuB;IAEvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzD,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Page, Locator } from 'playwright-core';
2
+ export interface SnapshotData {
3
+ snapshot: string;
4
+ refs?: Record<string, {
5
+ role: string;
6
+ name?: string;
7
+ }>;
8
+ }
9
+ export declare const EXCLUDE_SELECTORS: string[];
10
+ export declare const FORCE_INCLUDE_SELECTORS: string[];
11
+ export declare function extractContentFromPage(page: Page, format: 'text' | 'html' | 'markdown', selector?: string): Promise<string>;
12
+ export declare function assertElementExists(locator: Locator, selector: string, isRef: boolean): Promise<void>;
13
+ export declare function toAIFriendlyError(error: unknown, selector: string): Error;
14
+ export declare function htmlToMarkdown(html: string): string;
15
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/actions/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAED,eAAO,MAAM,iBAAiB,UAgD7B,CAAC;AAEF,eAAO,MAAM,uBAAuB,UAenC,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,EACpC,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CA0EjB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,CAkEzE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAsDnD"}