@skillful-agents/agent-computer 0.0.3

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 (185) hide show
  1. package/README.md +458 -0
  2. package/bin/ac-core-darwin-arm64 +0 -0
  3. package/bin/ac-core-darwin-x64 +0 -0
  4. package/bin/ac-core-win32-arm64.exe +0 -0
  5. package/bin/ac-core-win32-x64.exe +0 -0
  6. package/dist/bin/ac.d.ts +3 -0
  7. package/dist/bin/ac.d.ts.map +1 -0
  8. package/dist/bin/ac.js +126 -0
  9. package/dist/bin/ac.js.map +1 -0
  10. package/dist/src/bridge.d.ts +69 -0
  11. package/dist/src/bridge.d.ts.map +1 -0
  12. package/dist/src/bridge.js +687 -0
  13. package/dist/src/bridge.js.map +1 -0
  14. package/dist/src/cdp/ax-tree.d.ts +19 -0
  15. package/dist/src/cdp/ax-tree.d.ts.map +1 -0
  16. package/dist/src/cdp/ax-tree.js +159 -0
  17. package/dist/src/cdp/ax-tree.js.map +1 -0
  18. package/dist/src/cdp/bounds.d.ts +25 -0
  19. package/dist/src/cdp/bounds.d.ts.map +1 -0
  20. package/dist/src/cdp/bounds.js +62 -0
  21. package/dist/src/cdp/bounds.js.map +1 -0
  22. package/dist/src/cdp/client.d.ts +115 -0
  23. package/dist/src/cdp/client.d.ts.map +1 -0
  24. package/dist/src/cdp/client.js +269 -0
  25. package/dist/src/cdp/client.js.map +1 -0
  26. package/dist/src/cdp/connection.d.ts +25 -0
  27. package/dist/src/cdp/connection.d.ts.map +1 -0
  28. package/dist/src/cdp/connection.js +249 -0
  29. package/dist/src/cdp/connection.js.map +1 -0
  30. package/dist/src/cdp/diff.d.ts +17 -0
  31. package/dist/src/cdp/diff.d.ts.map +1 -0
  32. package/dist/src/cdp/diff.js +52 -0
  33. package/dist/src/cdp/diff.js.map +1 -0
  34. package/dist/src/cdp/discovery.d.ts +8 -0
  35. package/dist/src/cdp/discovery.d.ts.map +1 -0
  36. package/dist/src/cdp/discovery.js +54 -0
  37. package/dist/src/cdp/discovery.js.map +1 -0
  38. package/dist/src/cdp/index.d.ts +12 -0
  39. package/dist/src/cdp/index.d.ts.map +1 -0
  40. package/dist/src/cdp/index.js +10 -0
  41. package/dist/src/cdp/index.js.map +1 -0
  42. package/dist/src/cdp/interactions.d.ts +47 -0
  43. package/dist/src/cdp/interactions.d.ts.map +1 -0
  44. package/dist/src/cdp/interactions.js +298 -0
  45. package/dist/src/cdp/interactions.js.map +1 -0
  46. package/dist/src/cdp/port-manager.d.ts +3 -0
  47. package/dist/src/cdp/port-manager.d.ts.map +1 -0
  48. package/dist/src/cdp/port-manager.js +33 -0
  49. package/dist/src/cdp/port-manager.js.map +1 -0
  50. package/dist/src/cdp/role-map.d.ts +8 -0
  51. package/dist/src/cdp/role-map.d.ts.map +1 -0
  52. package/dist/src/cdp/role-map.js +99 -0
  53. package/dist/src/cdp/role-map.js.map +1 -0
  54. package/dist/src/cdp/types.d.ts +53 -0
  55. package/dist/src/cdp/types.d.ts.map +1 -0
  56. package/dist/src/cdp/types.js +2 -0
  57. package/dist/src/cdp/types.js.map +1 -0
  58. package/dist/src/cli/commands/apps.d.ts +2 -0
  59. package/dist/src/cli/commands/apps.d.ts.map +1 -0
  60. package/dist/src/cli/commands/apps.js +62 -0
  61. package/dist/src/cli/commands/apps.js.map +1 -0
  62. package/dist/src/cli/commands/batch.d.ts +2 -0
  63. package/dist/src/cli/commands/batch.d.ts.map +1 -0
  64. package/dist/src/cli/commands/batch.js +36 -0
  65. package/dist/src/cli/commands/batch.js.map +1 -0
  66. package/dist/src/cli/commands/click.d.ts +2 -0
  67. package/dist/src/cli/commands/click.d.ts.map +1 -0
  68. package/dist/src/cli/commands/click.js +60 -0
  69. package/dist/src/cli/commands/click.js.map +1 -0
  70. package/dist/src/cli/commands/clipboard.d.ts +2 -0
  71. package/dist/src/cli/commands/clipboard.d.ts.map +1 -0
  72. package/dist/src/cli/commands/clipboard.js +30 -0
  73. package/dist/src/cli/commands/clipboard.js.map +1 -0
  74. package/dist/src/cli/commands/dialog.d.ts +2 -0
  75. package/dist/src/cli/commands/dialog.d.ts.map +1 -0
  76. package/dist/src/cli/commands/dialog.js +44 -0
  77. package/dist/src/cli/commands/dialog.js.map +1 -0
  78. package/dist/src/cli/commands/drag.d.ts +2 -0
  79. package/dist/src/cli/commands/drag.d.ts.map +1 -0
  80. package/dist/src/cli/commands/drag.js +25 -0
  81. package/dist/src/cli/commands/drag.js.map +1 -0
  82. package/dist/src/cli/commands/find.d.ts +2 -0
  83. package/dist/src/cli/commands/find.d.ts.map +1 -0
  84. package/dist/src/cli/commands/find.js +98 -0
  85. package/dist/src/cli/commands/find.js.map +1 -0
  86. package/dist/src/cli/commands/menu.d.ts +2 -0
  87. package/dist/src/cli/commands/menu.d.ts.map +1 -0
  88. package/dist/src/cli/commands/menu.js +35 -0
  89. package/dist/src/cli/commands/menu.js.map +1 -0
  90. package/dist/src/cli/commands/screenshot.d.ts +2 -0
  91. package/dist/src/cli/commands/screenshot.d.ts.map +1 -0
  92. package/dist/src/cli/commands/screenshot.js +26 -0
  93. package/dist/src/cli/commands/screenshot.js.map +1 -0
  94. package/dist/src/cli/commands/scroll.d.ts +2 -0
  95. package/dist/src/cli/commands/scroll.d.ts.map +1 -0
  96. package/dist/src/cli/commands/scroll.js +76 -0
  97. package/dist/src/cli/commands/scroll.js.map +1 -0
  98. package/dist/src/cli/commands/session.d.ts +2 -0
  99. package/dist/src/cli/commands/session.d.ts.map +1 -0
  100. package/dist/src/cli/commands/session.js +26 -0
  101. package/dist/src/cli/commands/session.js.map +1 -0
  102. package/dist/src/cli/commands/snapshot.d.ts +2 -0
  103. package/dist/src/cli/commands/snapshot.d.ts.map +1 -0
  104. package/dist/src/cli/commands/snapshot.js +23 -0
  105. package/dist/src/cli/commands/snapshot.js.map +1 -0
  106. package/dist/src/cli/commands/type.d.ts +2 -0
  107. package/dist/src/cli/commands/type.d.ts.map +1 -0
  108. package/dist/src/cli/commands/type.js +68 -0
  109. package/dist/src/cli/commands/type.js.map +1 -0
  110. package/dist/src/cli/commands/windowmgmt.d.ts +2 -0
  111. package/dist/src/cli/commands/windowmgmt.d.ts.map +1 -0
  112. package/dist/src/cli/commands/windowmgmt.js +61 -0
  113. package/dist/src/cli/commands/windowmgmt.js.map +1 -0
  114. package/dist/src/cli/commands/windows.d.ts +2 -0
  115. package/dist/src/cli/commands/windows.d.ts.map +1 -0
  116. package/dist/src/cli/commands/windows.js +9 -0
  117. package/dist/src/cli/commands/windows.js.map +1 -0
  118. package/dist/src/cli/commands.d.ts +13 -0
  119. package/dist/src/cli/commands.d.ts.map +1 -0
  120. package/dist/src/cli/commands.js +177 -0
  121. package/dist/src/cli/commands.js.map +1 -0
  122. package/dist/src/cli/output.d.ts +4 -0
  123. package/dist/src/cli/output.d.ts.map +1 -0
  124. package/dist/src/cli/output.js +249 -0
  125. package/dist/src/cli/output.js.map +1 -0
  126. package/dist/src/cli/parser.d.ts +19 -0
  127. package/dist/src/cli/parser.d.ts.map +1 -0
  128. package/dist/src/cli/parser.js +125 -0
  129. package/dist/src/cli/parser.js.map +1 -0
  130. package/dist/src/config.d.ts +14 -0
  131. package/dist/src/config.d.ts.map +1 -0
  132. package/dist/src/config.js +73 -0
  133. package/dist/src/config.js.map +1 -0
  134. package/dist/src/daemon.d.ts +21 -0
  135. package/dist/src/daemon.d.ts.map +1 -0
  136. package/dist/src/daemon.js +180 -0
  137. package/dist/src/daemon.js.map +1 -0
  138. package/dist/src/errors.d.ts +39 -0
  139. package/dist/src/errors.d.ts.map +1 -0
  140. package/dist/src/errors.js +103 -0
  141. package/dist/src/errors.js.map +1 -0
  142. package/dist/src/index.d.ts +8 -0
  143. package/dist/src/index.d.ts.map +1 -0
  144. package/dist/src/index.js +8 -0
  145. package/dist/src/index.js.map +1 -0
  146. package/dist/src/platform/index.d.ts +6 -0
  147. package/dist/src/platform/index.d.ts.map +1 -0
  148. package/dist/src/platform/index.js +14 -0
  149. package/dist/src/platform/index.js.map +1 -0
  150. package/dist/src/platform/resolve.d.ts +2 -0
  151. package/dist/src/platform/resolve.d.ts.map +1 -0
  152. package/dist/src/platform/resolve.js +54 -0
  153. package/dist/src/platform/resolve.js.map +1 -0
  154. package/dist/src/refs.d.ts +12 -0
  155. package/dist/src/refs.d.ts.map +1 -0
  156. package/dist/src/refs.js +85 -0
  157. package/dist/src/refs.js.map +1 -0
  158. package/dist/src/sdk.d.ts +258 -0
  159. package/dist/src/sdk.d.ts.map +1 -0
  160. package/dist/src/sdk.js +285 -0
  161. package/dist/src/sdk.js.map +1 -0
  162. package/dist/src/types.d.ts +93 -0
  163. package/dist/src/types.d.ts.map +1 -0
  164. package/dist/src/types.js +9 -0
  165. package/dist/src/types.js.map +1 -0
  166. package/package.json +67 -0
  167. package/schema/examples/click.response.example.json +9 -0
  168. package/schema/examples/error.response.example.json +12 -0
  169. package/schema/examples/ping.response.example.json +7 -0
  170. package/schema/examples/snapshot.response.example.json +50 -0
  171. package/schema/methods/click.request.json +26 -0
  172. package/schema/methods/click.response.json +24 -0
  173. package/schema/methods/error.response.json +19 -0
  174. package/schema/methods/ping.request.json +12 -0
  175. package/schema/methods/ping.response.json +17 -0
  176. package/schema/methods/snapshot.request.json +24 -0
  177. package/schema/methods/snapshot.response.json +23 -0
  178. package/schema/methods/status.request.json +12 -0
  179. package/schema/methods/status.response.json +20 -0
  180. package/schema/types/element.json +26 -0
  181. package/schema/types/normalized-role.json +13 -0
  182. package/schema/types/ref.json +7 -0
  183. package/schema/types/window-info.json +24 -0
  184. package/scripts/build-macos.sh +5 -0
  185. package/scripts/postinstall.js +35 -0
@@ -0,0 +1,8 @@
1
+ import type { CDPTarget } from './types.js';
2
+ /** GET http://localhost:{port}/json/list — returns all CDP targets */
3
+ export declare function discoverTargets(port: number): Promise<CDPTarget[]>;
4
+ /** Filter targets for type === 'page' and return first match */
5
+ export declare function findPageTarget(port: number): Promise<CDPTarget>;
6
+ /** Poll until a page target appears, with timeout */
7
+ export declare function waitForCDP(port: number, timeout?: number): Promise<CDPTarget>;
8
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/cdp/discovery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,sEAAsE;AACtE,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAsBxE;AAED,gEAAgE;AAChE,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAOrE;AAED,qDAAqD;AACrD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAclF"}
@@ -0,0 +1,54 @@
1
+ import * as http from 'http';
2
+ /** GET http://localhost:{port}/json/list — returns all CDP targets */
3
+ export async function discoverTargets(port) {
4
+ return new Promise((resolve, reject) => {
5
+ const req = http.get(`http://127.0.0.1:${port}/json/list`, (res) => {
6
+ let data = '';
7
+ res.on('data', (chunk) => { data += chunk.toString(); });
8
+ res.on('end', () => {
9
+ try {
10
+ const targets = JSON.parse(data);
11
+ resolve(targets);
12
+ }
13
+ catch (err) {
14
+ reject(new Error(`Failed to parse CDP targets: ${err}`));
15
+ }
16
+ });
17
+ });
18
+ req.on('error', (err) => {
19
+ reject(new Error(`Failed to discover CDP targets on port ${port}: ${err.message}`));
20
+ });
21
+ req.setTimeout(5000, () => {
22
+ req.destroy();
23
+ reject(new Error(`CDP discovery timed out on port ${port}`));
24
+ });
25
+ });
26
+ }
27
+ /** Filter targets for type === 'page' and return first match */
28
+ export async function findPageTarget(port) {
29
+ const targets = await discoverTargets(port);
30
+ const page = targets.find(t => t.type === 'page');
31
+ if (!page) {
32
+ throw new Error(`No page target found on port ${port}. Found: ${targets.map(t => t.type).join(', ')}`);
33
+ }
34
+ return page;
35
+ }
36
+ /** Poll until a page target appears, with timeout */
37
+ export async function waitForCDP(port, timeout = 10000) {
38
+ const start = Date.now();
39
+ let lastError;
40
+ while (Date.now() - start < timeout) {
41
+ try {
42
+ return await findPageTarget(port);
43
+ }
44
+ catch (err) {
45
+ lastError = err;
46
+ await sleep(200);
47
+ }
48
+ }
49
+ throw new Error(`CDP not available on port ${port} after ${timeout}ms: ${lastError?.message}`);
50
+ }
51
+ function sleep(ms) {
52
+ return new Promise(resolve => setTimeout(resolve, ms));
53
+ }
54
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/cdp/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export { CDPConnection } from './connection.js';
2
+ export { discoverTargets, findPageTarget, waitForCDP } from './discovery.js';
3
+ export { CDPAXTree } from './ax-tree.js';
4
+ export { CDPInteractions } from './interactions.js';
5
+ export { CDPClient } from './client.js';
6
+ export { mapCDPRole, INTERACTIVE_ROLES } from './role-map.js';
7
+ export { getBounds, toScreenCoords, resolveAllBounds } from './bounds.js';
8
+ export { computeChanged, computeDiff } from './diff.js';
9
+ export { findFreePort } from './port-manager.js';
10
+ export type { CDPTarget, CDPAXNode, CDPNodeRef, CDPBoxModel } from './types.js';
11
+ export type { CDPSnapshotOptions, CDPSnapshotResult } from './client.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cdp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAChF,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { CDPConnection } from './connection.js';
2
+ export { discoverTargets, findPageTarget, waitForCDP } from './discovery.js';
3
+ export { CDPAXTree } from './ax-tree.js';
4
+ export { CDPInteractions } from './interactions.js';
5
+ export { CDPClient } from './client.js';
6
+ export { mapCDPRole, INTERACTIVE_ROLES } from './role-map.js';
7
+ export { getBounds, toScreenCoords, resolveAllBounds } from './bounds.js';
8
+ export { computeChanged, computeDiff } from './diff.js';
9
+ export { findFreePort } from './port-manager.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cdp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import type { CDPConnection } from './connection.js';
2
+ export declare class CDPInteractions {
3
+ private connection;
4
+ constructor(connection: CDPConnection);
5
+ /** Click at element center (CSS viewport coords). Options: right, double, modifiers */
6
+ click(backendDOMNodeId: number, cssBounds: [number, number, number, number], options?: {
7
+ right?: boolean;
8
+ double?: boolean;
9
+ count?: number;
10
+ modifiers?: string[];
11
+ }): Promise<void>;
12
+ /** Click at specific CSS viewport coords */
13
+ clickAt(x: number, y: number, options?: {
14
+ right?: boolean;
15
+ double?: boolean;
16
+ count?: number;
17
+ modifiers?: string[];
18
+ }): Promise<void>;
19
+ /** Hover over element (move mouse to center) */
20
+ hover(cssBounds: [number, number, number, number]): Promise<void>;
21
+ /** Focus an element by backendNodeId */
22
+ focus(backendDOMNodeId: number): Promise<void>;
23
+ /** Insert text at current focus (fast, no key events) */
24
+ type(text: string): Promise<void>;
25
+ /** Type with per-character key events and optional delay */
26
+ typeWithDelay(text: string, delay: number): Promise<void>;
27
+ /** Fill: focus element, select all, insert text. Fallback: set .value via Runtime */
28
+ fill(backendDOMNodeId: number, text: string): Promise<void>;
29
+ /** Press a key combination (e.g., "cmd+a", "shift+enter", "ctrl+c") */
30
+ key(combo: string, repeat?: number): Promise<void>;
31
+ /** Scroll using mouseWheel events */
32
+ scroll(direction: 'up' | 'down' | 'left' | 'right', amount?: number, atX?: number, atY?: number): Promise<void>;
33
+ /** Select a value in a <select> element */
34
+ select(backendDOMNodeId: number, value: string): Promise<void>;
35
+ /** Check a checkbox (click if not already checked) */
36
+ check(backendDOMNodeId: number, cssBounds: [number, number, number, number]): Promise<void>;
37
+ /** Uncheck a checkbox (click if currently checked) */
38
+ uncheck(backendDOMNodeId: number, cssBounds: [number, number, number, number]): Promise<void>;
39
+ /** Get .checked state of an element via Runtime */
40
+ private getCheckedState;
41
+ /** Parse key combo string like "cmd+shift+a" */
42
+ private parseCombo;
43
+ private letterKeyInfo;
44
+ private modifierKeyName;
45
+ private computeModifiers;
46
+ }
47
+ //# sourceMappingURL=interactions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../../src/cdp/interactions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA+BrD,qBAAa,eAAe;IACd,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,aAAa;IAE7C,uFAAuF;IACjF,KAAK,CACT,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC3C,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAO,GACxF,OAAO,CAAC,IAAI,CAAC;IAMhB,4CAA4C;IACtC,OAAO,CACX,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAO,GACxF,OAAO,CAAC,IAAI,CAAC;IA+BhB,gDAAgD;IAC1C,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASvE,wCAAwC;IAClC,KAAK,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,yDAAyD;IACnD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,4DAA4D;IACtD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/D,qFAAqF;IAC/E,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE,uEAAuE;IACjE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuDxD,qCAAqC;IAC/B,MAAM,CACV,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAC3C,MAAM,GAAE,MAAU,EAClB,GAAG,CAAC,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;IAsBhB,2CAA2C;IACrC,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBpE,sDAAsD;IAChD,KAAK,CAAC,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjG,sDAAsD;IAChD,OAAO,CAAC,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnG,mDAAmD;YACrC,eAAe;IAc7B,gDAAgD;IAChD,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,gBAAgB;CAQzB"}
@@ -0,0 +1,298 @@
1
+ // Modifier flag values for CDP Input events
2
+ const MODIFIER_FLAGS = {
3
+ alt: 1,
4
+ ctrl: 2,
5
+ meta: 4, // Cmd on Mac
6
+ shift: 8,
7
+ };
8
+ // Key name mapping for special keys
9
+ const KEY_MAP = {
10
+ enter: { key: 'Enter', code: 'Enter', keyCode: 13 },
11
+ return: { key: 'Enter', code: 'Enter', keyCode: 13 },
12
+ tab: { key: 'Tab', code: 'Tab', keyCode: 9 },
13
+ escape: { key: 'Escape', code: 'Escape', keyCode: 27 },
14
+ esc: { key: 'Escape', code: 'Escape', keyCode: 27 },
15
+ backspace: { key: 'Backspace', code: 'Backspace', keyCode: 8 },
16
+ delete: { key: 'Delete', code: 'Delete', keyCode: 46 },
17
+ space: { key: ' ', code: 'Space', keyCode: 32 },
18
+ up: { key: 'ArrowUp', code: 'ArrowUp', keyCode: 38 },
19
+ down: { key: 'ArrowDown', code: 'ArrowDown', keyCode: 40 },
20
+ left: { key: 'ArrowLeft', code: 'ArrowLeft', keyCode: 37 },
21
+ right: { key: 'ArrowRight', code: 'ArrowRight', keyCode: 39 },
22
+ home: { key: 'Home', code: 'Home', keyCode: 36 },
23
+ end: { key: 'End', code: 'End', keyCode: 35 },
24
+ pageup: { key: 'PageUp', code: 'PageUp', keyCode: 33 },
25
+ pagedown: { key: 'PageDown', code: 'PageDown', keyCode: 34 },
26
+ // Letters a-z will be handled dynamically
27
+ };
28
+ export class CDPInteractions {
29
+ connection;
30
+ constructor(connection) {
31
+ this.connection = connection;
32
+ }
33
+ /** Click at element center (CSS viewport coords). Options: right, double, modifiers */
34
+ async click(backendDOMNodeId, cssBounds, options = {}) {
35
+ const x = cssBounds[0] + cssBounds[2] / 2;
36
+ const y = cssBounds[1] + cssBounds[3] / 2;
37
+ await this.clickAt(x, y, options);
38
+ }
39
+ /** Click at specific CSS viewport coords */
40
+ async clickAt(x, y, options = {}) {
41
+ const button = options.right ? 'right' : 'left';
42
+ const clickCount = options.double ? 2 : (options.count ?? 1);
43
+ const modifiers = this.computeModifiers(options.modifiers);
44
+ // Move mouse first
45
+ await this.connection.send('Input.dispatchMouseEvent', {
46
+ type: 'mouseMoved',
47
+ x, y,
48
+ modifiers,
49
+ });
50
+ // For double click, send two full click sequences
51
+ for (let i = 0; i < clickCount; i++) {
52
+ await this.connection.send('Input.dispatchMouseEvent', {
53
+ type: 'mousePressed',
54
+ x, y,
55
+ button,
56
+ clickCount: i + 1,
57
+ modifiers,
58
+ });
59
+ await this.connection.send('Input.dispatchMouseEvent', {
60
+ type: 'mouseReleased',
61
+ x, y,
62
+ button,
63
+ clickCount: i + 1,
64
+ modifiers,
65
+ });
66
+ }
67
+ }
68
+ /** Hover over element (move mouse to center) */
69
+ async hover(cssBounds) {
70
+ const x = cssBounds[0] + cssBounds[2] / 2;
71
+ const y = cssBounds[1] + cssBounds[3] / 2;
72
+ await this.connection.send('Input.dispatchMouseEvent', {
73
+ type: 'mouseMoved',
74
+ x, y,
75
+ });
76
+ }
77
+ /** Focus an element by backendNodeId */
78
+ async focus(backendDOMNodeId) {
79
+ await this.connection.send('DOM.focus', { backendNodeId: backendDOMNodeId });
80
+ }
81
+ /** Insert text at current focus (fast, no key events) */
82
+ async type(text) {
83
+ await this.connection.send('Input.insertText', { text });
84
+ }
85
+ /** Type with per-character key events and optional delay */
86
+ async typeWithDelay(text, delay) {
87
+ for (const char of text) {
88
+ await this.connection.send('Input.dispatchKeyEvent', {
89
+ type: 'keyDown',
90
+ key: char,
91
+ text: char,
92
+ });
93
+ await this.connection.send('Input.dispatchKeyEvent', {
94
+ type: 'keyUp',
95
+ key: char,
96
+ });
97
+ if (delay > 0) {
98
+ await sleep(delay);
99
+ }
100
+ }
101
+ }
102
+ /** Fill: focus element, select all, insert text. Fallback: set .value via Runtime */
103
+ async fill(backendDOMNodeId, text) {
104
+ // Focus the element
105
+ await this.focus(backendDOMNodeId);
106
+ await sleep(50);
107
+ // Select all (Cmd+A on Mac)
108
+ await this.key('cmd+a');
109
+ await sleep(50);
110
+ // Insert text (replaces selection)
111
+ await this.type(text);
112
+ }
113
+ /** Press a key combination (e.g., "cmd+a", "shift+enter", "ctrl+c") */
114
+ async key(combo, repeat) {
115
+ const times = repeat ?? 1;
116
+ const { modifiers, keyInfo } = this.parseCombo(combo);
117
+ for (let i = 0; i < times; i++) {
118
+ // Press modifier keys
119
+ for (const mod of modifiers) {
120
+ await this.connection.send('Input.dispatchKeyEvent', {
121
+ type: 'rawKeyDown',
122
+ key: this.modifierKeyName(mod),
123
+ modifiers: this.computeModifiers(modifiers),
124
+ });
125
+ }
126
+ // Press the main key
127
+ const modifierFlags = this.computeModifiers(modifiers);
128
+ await this.connection.send('Input.dispatchKeyEvent', {
129
+ type: 'rawKeyDown',
130
+ key: keyInfo.key,
131
+ code: keyInfo.code,
132
+ windowsVirtualKeyCode: keyInfo.keyCode,
133
+ modifiers: modifierFlags,
134
+ });
135
+ // If it's a printable character with no modifiers (or just shift), send char event
136
+ if (keyInfo.key.length === 1 && modifiers.every(m => m === 'shift')) {
137
+ await this.connection.send('Input.dispatchKeyEvent', {
138
+ type: 'char',
139
+ key: keyInfo.key,
140
+ text: keyInfo.key,
141
+ modifiers: modifierFlags,
142
+ });
143
+ }
144
+ await this.connection.send('Input.dispatchKeyEvent', {
145
+ type: 'keyUp',
146
+ key: keyInfo.key,
147
+ code: keyInfo.code,
148
+ windowsVirtualKeyCode: keyInfo.keyCode,
149
+ modifiers: modifierFlags,
150
+ });
151
+ // Release modifier keys (reverse order)
152
+ for (const mod of [...modifiers].reverse()) {
153
+ await this.connection.send('Input.dispatchKeyEvent', {
154
+ type: 'keyUp',
155
+ key: this.modifierKeyName(mod),
156
+ modifiers: 0,
157
+ });
158
+ }
159
+ if (i < times - 1)
160
+ await sleep(50);
161
+ }
162
+ }
163
+ /** Scroll using mouseWheel events */
164
+ async scroll(direction, amount = 3, atX, atY) {
165
+ const x = atX ?? 300; // center of typical window
166
+ const y = atY ?? 250;
167
+ const pixelAmount = amount * 100; // Each "amount" unit = 100px
168
+ let deltaX = 0;
169
+ let deltaY = 0;
170
+ switch (direction) {
171
+ case 'up':
172
+ deltaY = -pixelAmount;
173
+ break;
174
+ case 'down':
175
+ deltaY = pixelAmount;
176
+ break;
177
+ case 'left':
178
+ deltaX = -pixelAmount;
179
+ break;
180
+ case 'right':
181
+ deltaX = pixelAmount;
182
+ break;
183
+ }
184
+ await this.connection.send('Input.dispatchMouseEvent', {
185
+ type: 'mouseWheel',
186
+ x, y,
187
+ deltaX,
188
+ deltaY,
189
+ });
190
+ }
191
+ /** Select a value in a <select> element */
192
+ async select(backendDOMNodeId, value) {
193
+ // Resolve to a remote object first
194
+ const { object } = await this.connection.send('DOM.resolveNode', {
195
+ backendNodeId: backendDOMNodeId,
196
+ });
197
+ await this.connection.send('Runtime.callFunctionOn', {
198
+ objectId: object.objectId,
199
+ functionDeclaration: `function(val) {
200
+ for (let i = 0; i < this.options.length; i++) {
201
+ if (this.options[i].value === val || this.options[i].text === val) {
202
+ this.selectedIndex = i;
203
+ this.dispatchEvent(new Event('change', { bubbles: true }));
204
+ return true;
205
+ }
206
+ }
207
+ return false;
208
+ }`,
209
+ arguments: [{ value }],
210
+ });
211
+ }
212
+ /** Check a checkbox (click if not already checked) */
213
+ async check(backendDOMNodeId, cssBounds) {
214
+ const checked = await this.getCheckedState(backendDOMNodeId);
215
+ if (!checked) {
216
+ await this.click(backendDOMNodeId, cssBounds);
217
+ }
218
+ }
219
+ /** Uncheck a checkbox (click if currently checked) */
220
+ async uncheck(backendDOMNodeId, cssBounds) {
221
+ const checked = await this.getCheckedState(backendDOMNodeId);
222
+ if (checked) {
223
+ await this.click(backendDOMNodeId, cssBounds);
224
+ }
225
+ }
226
+ /** Get .checked state of an element via Runtime */
227
+ async getCheckedState(backendDOMNodeId) {
228
+ const { object } = await this.connection.send('DOM.resolveNode', {
229
+ backendNodeId: backendDOMNodeId,
230
+ });
231
+ const result = await this.connection.send('Runtime.callFunctionOn', {
232
+ objectId: object.objectId,
233
+ functionDeclaration: 'function() { return this.checked; }',
234
+ returnByValue: true,
235
+ });
236
+ return result.result.value === true;
237
+ }
238
+ /** Parse key combo string like "cmd+shift+a" */
239
+ parseCombo(combo) {
240
+ const parts = combo.toLowerCase().split('+');
241
+ const modifiers = [];
242
+ let mainKey = '';
243
+ for (const part of parts) {
244
+ const p = part.trim();
245
+ if (p === 'cmd' || p === 'command' || p === 'meta') {
246
+ modifiers.push('meta');
247
+ }
248
+ else if (p === 'ctrl' || p === 'control') {
249
+ modifiers.push('ctrl');
250
+ }
251
+ else if (p === 'alt' || p === 'option' || p === 'opt') {
252
+ modifiers.push('alt');
253
+ }
254
+ else if (p === 'shift') {
255
+ modifiers.push('shift');
256
+ }
257
+ else {
258
+ mainKey = p;
259
+ }
260
+ }
261
+ const keyInfo = KEY_MAP[mainKey] ?? this.letterKeyInfo(mainKey);
262
+ return { modifiers, keyInfo };
263
+ }
264
+ letterKeyInfo(key) {
265
+ if (key.length === 1) {
266
+ const upper = key.toUpperCase();
267
+ return {
268
+ key: key,
269
+ code: `Key${upper}`,
270
+ keyCode: upper.charCodeAt(0),
271
+ };
272
+ }
273
+ // Unknown key - pass through
274
+ return { key, code: key, keyCode: 0 };
275
+ }
276
+ modifierKeyName(mod) {
277
+ switch (mod) {
278
+ case 'meta': return 'Meta';
279
+ case 'ctrl': return 'Control';
280
+ case 'alt': return 'Alt';
281
+ case 'shift': return 'Shift';
282
+ default: return mod;
283
+ }
284
+ }
285
+ computeModifiers(mods) {
286
+ if (!mods)
287
+ return 0;
288
+ let flags = 0;
289
+ for (const mod of mods) {
290
+ flags |= MODIFIER_FLAGS[mod] ?? 0;
291
+ }
292
+ return flags;
293
+ }
294
+ }
295
+ function sleep(ms) {
296
+ return new Promise(resolve => setTimeout(resolve, ms));
297
+ }
298
+ //# sourceMappingURL=interactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../../src/cdp/interactions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Find a free port in the CDP range by probing for one not in use. */
2
+ export declare function findFreePort(): Promise<number>;
3
+ //# sourceMappingURL=port-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port-manager.d.ts","sourceRoot":"","sources":["../../../src/cdp/port-manager.ts"],"names":[],"mappings":"AAKA,uEAAuE;AACvE,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAOpD"}
@@ -0,0 +1,33 @@
1
+ import * as net from 'net';
2
+ const PORT_RANGE_START = 19200;
3
+ const PORT_RANGE_END = 19299;
4
+ /** Find a free port in the CDP range by probing for one not in use. */
5
+ export async function findFreePort() {
6
+ for (let port = PORT_RANGE_START; port <= PORT_RANGE_END; port++) {
7
+ if (await isPortAvailable(port)) {
8
+ return port;
9
+ }
10
+ }
11
+ throw new Error(`No available CDP ports in range ${PORT_RANGE_START}-${PORT_RANGE_END}`);
12
+ }
13
+ /** Check if a port is available by attempting a TCP connection */
14
+ function isPortAvailable(port) {
15
+ return new Promise((resolve) => {
16
+ const socket = new net.Socket();
17
+ socket.setTimeout(500);
18
+ socket.on('connect', () => {
19
+ socket.destroy();
20
+ resolve(false); // Port is in use
21
+ });
22
+ socket.on('timeout', () => {
23
+ socket.destroy();
24
+ resolve(true); // Timeout = nothing listening = available
25
+ });
26
+ socket.on('error', () => {
27
+ socket.destroy();
28
+ resolve(true); // Connection refused = available
29
+ });
30
+ socket.connect(port, '127.0.0.1');
31
+ });
32
+ }
33
+ //# sourceMappingURL=port-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port-manager.js","sourceRoot":"","sources":["../../../src/cdp/port-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAE3B,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,KAAK,IAAI,IAAI,GAAG,gBAAgB,EAAE,IAAI,IAAI,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC;QACjE,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,gBAAgB,IAAI,cAAc,EAAE,CAAC,CAAC;AAC3F,CAAC;AAED,kEAAkE;AAClE,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAEvB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACxB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB;QACnC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACxB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,0CAA0C;QAC3D,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,iCAAiC;QAClD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** Map a CDP ARIA role string to a normalized role. Unknown roles become 'generic'. */
2
+ export declare function mapCDPRole(cdpRole: string): string;
3
+ /**
4
+ * CDP roles considered interactive — used to filter the AX tree in interactive mode.
5
+ * These are CDP/ARIA role strings (keys in CDP_ROLE_MAP), not normalized roles.
6
+ */
7
+ export declare const INTERACTIVE_ROLES: Set<string>;
8
+ //# sourceMappingURL=role-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-map.d.ts","sourceRoot":"","sources":["../../../src/cdp/role-map.ts"],"names":[],"mappings":"AAqFA,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,aAgB5B,CAAC"}
@@ -0,0 +1,99 @@
1
+ // Maps CDP ARIA roles to normalized roles used by the agent-computer Element format.
2
+ const CDP_ROLE_MAP = {
3
+ // Interactive controls
4
+ button: 'button',
5
+ textbox: 'textfield',
6
+ searchbox: 'textfield',
7
+ textfield: 'textfield',
8
+ link: 'link',
9
+ checkbox: 'checkbox',
10
+ radio: 'radio',
11
+ slider: 'slider',
12
+ spinbutton: 'slider',
13
+ combobox: 'dropdown',
14
+ listbox: 'dropdown',
15
+ popupbutton: 'dropdown',
16
+ // Media
17
+ img: 'image',
18
+ image: 'image',
19
+ // Text content
20
+ heading: 'text',
21
+ StaticText: 'text',
22
+ LabelText: 'text',
23
+ paragraph: 'text',
24
+ status: 'text',
25
+ // Tabs
26
+ tab: 'tab',
27
+ tablist: 'tabgroup',
28
+ tabpanel: 'group',
29
+ // Menus
30
+ menuitem: 'menuitem',
31
+ menu: 'group',
32
+ menubar: 'group',
33
+ // Tables
34
+ table: 'table',
35
+ grid: 'table',
36
+ row: 'row',
37
+ cell: 'row',
38
+ gridcell: 'row',
39
+ columnheader: 'row',
40
+ rowheader: 'row',
41
+ // Trees
42
+ tree: 'treeview',
43
+ treeitem: 'menuitem',
44
+ // Misc widgets
45
+ scrollbar: 'scrollarea',
46
+ progressbar: 'progress',
47
+ // Generic / presentational
48
+ generic: 'generic',
49
+ none: 'generic',
50
+ presentation: 'generic',
51
+ separator: 'generic',
52
+ // Document / web areas
53
+ WebArea: 'webarea',
54
+ RootWebArea: 'webarea',
55
+ document: 'webarea',
56
+ // Landmark & structural → group
57
+ navigation: 'group',
58
+ region: 'group',
59
+ main: 'group',
60
+ form: 'group',
61
+ section: 'group',
62
+ article: 'group',
63
+ banner: 'group',
64
+ complementary: 'group',
65
+ contentinfo: 'group',
66
+ list: 'group',
67
+ listitem: 'group',
68
+ group: 'group',
69
+ toolbar: 'group',
70
+ dialog: 'group',
71
+ alertdialog: 'group',
72
+ alert: 'group',
73
+ };
74
+ /** Map a CDP ARIA role string to a normalized role. Unknown roles become 'generic'. */
75
+ export function mapCDPRole(cdpRole) {
76
+ return CDP_ROLE_MAP[cdpRole] ?? 'generic';
77
+ }
78
+ /**
79
+ * CDP roles considered interactive — used to filter the AX tree in interactive mode.
80
+ * These are CDP/ARIA role strings (keys in CDP_ROLE_MAP), not normalized roles.
81
+ */
82
+ export const INTERACTIVE_ROLES = new Set([
83
+ 'button',
84
+ 'textbox',
85
+ 'searchbox',
86
+ 'textfield',
87
+ 'link',
88
+ 'checkbox',
89
+ 'radio',
90
+ 'slider',
91
+ 'spinbutton',
92
+ 'combobox',
93
+ 'listbox',
94
+ 'popupbutton',
95
+ 'tab',
96
+ 'menuitem',
97
+ 'treeitem',
98
+ ]);
99
+ //# sourceMappingURL=role-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-map.js","sourceRoot":"","sources":["../../../src/cdp/role-map.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,MAAM,YAAY,GAA2B;IAC3C,uBAAuB;IACvB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,WAAW;IACpB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,QAAQ;IACpB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,UAAU;IACnB,WAAW,EAAE,UAAU;IAEvB,QAAQ;IACR,GAAG,EAAE,OAAO;IACZ,KAAK,EAAE,OAAO;IAEd,eAAe;IACf,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,MAAM;IAClB,SAAS,EAAE,MAAM;IACjB,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,MAAM;IAEd,OAAO;IACP,GAAG,EAAE,KAAK;IACV,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,OAAO;IAEjB,QAAQ;IACR,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,OAAO;IAEhB,SAAS;IACT,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,OAAO;IACb,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;IACX,QAAQ,EAAE,KAAK;IACf,YAAY,EAAE,KAAK;IACnB,SAAS,EAAE,KAAK;IAEhB,QAAQ;IACR,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,UAAU;IAEpB,eAAe;IACf,SAAS,EAAE,YAAY;IACvB,WAAW,EAAE,UAAU;IAEvB,2BAA2B;IAC3B,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,SAAS;IACvB,SAAS,EAAE,SAAS;IAEpB,uBAAuB;IACvB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,SAAS;IACtB,QAAQ,EAAE,SAAS;IAEnB,gCAAgC;IAChC,UAAU,EAAE,OAAO;IACnB,MAAM,EAAE,OAAO;IACf,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,OAAO;IACf,aAAa,EAAE,OAAO;IACtB,WAAW,EAAE,OAAO;IACpB,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,OAAO;IACf,WAAW,EAAE,OAAO;IACpB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,uFAAuF;AACvF,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IACvC,QAAQ;IACR,SAAS;IACT,WAAW;IACX,WAAW;IACX,MAAM;IACN,UAAU;IACV,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,UAAU;IACV,SAAS;IACT,aAAa;IACb,KAAK;IACL,UAAU;IACV,UAAU;CACX,CAAC,CAAC"}