@ulpi/browse 2.3.3 → 2.4.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 (279) hide show
  1. package/README.md +8 -2
  2. package/dist/browse.cjs +3445 -1636
  3. package/dist/lib.mjs +29504 -0
  4. package/dist/types/a11y.d.ts +32 -0
  5. package/dist/types/a11y.d.ts.map +1 -0
  6. package/dist/types/app/android/bridge.d.ts +41 -0
  7. package/dist/types/app/android/bridge.d.ts.map +1 -0
  8. package/dist/types/app/android/emulator.d.ts +32 -0
  9. package/dist/types/app/android/emulator.d.ts.map +1 -0
  10. package/dist/types/app/android/manager.d.ts +62 -0
  11. package/dist/types/app/android/manager.d.ts.map +1 -0
  12. package/dist/types/app/android/protocol.d.ts +162 -0
  13. package/dist/types/app/android/protocol.d.ts.map +1 -0
  14. package/dist/types/app/android/sim-service.d.ts +33 -0
  15. package/dist/types/app/android/sim-service.d.ts.map +1 -0
  16. package/dist/types/app/index.d.ts +15 -0
  17. package/dist/types/app/index.d.ts.map +1 -0
  18. package/dist/types/app/ios/bridge.d.ts +53 -0
  19. package/dist/types/app/ios/bridge.d.ts.map +1 -0
  20. package/dist/types/app/ios/controller.d.ts +131 -0
  21. package/dist/types/app/ios/controller.d.ts.map +1 -0
  22. package/dist/types/app/ios/manager.d.ts +96 -0
  23. package/dist/types/app/ios/manager.d.ts.map +1 -0
  24. package/dist/types/app/ios/protocol.d.ts +122 -0
  25. package/dist/types/app/ios/protocol.d.ts.map +1 -0
  26. package/dist/types/app/ios/sim-service.d.ts +37 -0
  27. package/dist/types/app/ios/sim-service.d.ts.map +1 -0
  28. package/dist/types/app/macos/bridge.d.ts +22 -0
  29. package/dist/types/app/macos/bridge.d.ts.map +1 -0
  30. package/dist/types/app/manager.d.ts +50 -0
  31. package/dist/types/app/manager.d.ts.map +1 -0
  32. package/dist/types/app/normalize.d.ts +27 -0
  33. package/dist/types/app/normalize.d.ts.map +1 -0
  34. package/dist/types/app/resolve-app.d.ts +31 -0
  35. package/dist/types/app/resolve-app.d.ts.map +1 -0
  36. package/dist/types/app/types.d.ts +77 -0
  37. package/dist/types/app/types.d.ts.map +1 -0
  38. package/dist/types/automation/action-context.d.ts +110 -0
  39. package/dist/types/automation/action-context.d.ts.map +1 -0
  40. package/dist/types/automation/command.d.ts +138 -0
  41. package/dist/types/automation/command.d.ts.map +1 -0
  42. package/dist/types/automation/events.d.ts +72 -0
  43. package/dist/types/automation/events.d.ts.map +1 -0
  44. package/dist/types/automation/executor.d.ts +39 -0
  45. package/dist/types/automation/executor.d.ts.map +1 -0
  46. package/dist/types/automation/index.d.ts +11 -0
  47. package/dist/types/automation/index.d.ts.map +1 -0
  48. package/dist/types/automation/registry.d.ts +38 -0
  49. package/dist/types/automation/registry.d.ts.map +1 -0
  50. package/dist/types/automation/rules.d.ts +52 -0
  51. package/dist/types/automation/rules.d.ts.map +1 -0
  52. package/dist/types/automation/target.d.ts +76 -0
  53. package/dist/types/automation/target.d.ts.map +1 -0
  54. package/dist/types/browser/consent.d.ts +13 -0
  55. package/dist/types/browser/consent.d.ts.map +1 -0
  56. package/dist/types/browser/cookie-import.d.ts +94 -0
  57. package/dist/types/browser/cookie-import.d.ts.map +1 -0
  58. package/dist/types/browser/detection.d.ts +22 -0
  59. package/dist/types/browser/detection.d.ts.map +1 -0
  60. package/dist/types/browser/emulation.d.ts +30 -0
  61. package/dist/types/browser/emulation.d.ts.map +1 -0
  62. package/dist/types/browser/events.d.ts +19 -0
  63. package/dist/types/browser/events.d.ts.map +1 -0
  64. package/dist/types/browser/index.d.ts +17 -0
  65. package/dist/types/browser/index.d.ts.map +1 -0
  66. package/dist/types/browser/macros.d.ts +9 -0
  67. package/dist/types/browser/macros.d.ts.map +1 -0
  68. package/dist/types/browser/manager.d.ts +272 -0
  69. package/dist/types/browser/manager.d.ts.map +1 -0
  70. package/dist/types/browser/png-compare.d.ts +36 -0
  71. package/dist/types/browser/png-compare.d.ts.map +1 -0
  72. package/dist/types/browser/profiles.d.ts +29 -0
  73. package/dist/types/browser/profiles.d.ts.map +1 -0
  74. package/dist/types/browser/react-devtools.d.ts +75 -0
  75. package/dist/types/browser/react-devtools.d.ts.map +1 -0
  76. package/dist/types/browser/readiness.d.ts +19 -0
  77. package/dist/types/browser/readiness.d.ts.map +1 -0
  78. package/dist/types/browser/refs.d.ts +70 -0
  79. package/dist/types/browser/refs.d.ts.map +1 -0
  80. package/dist/types/browser/serp.d.ts +16 -0
  81. package/dist/types/browser/serp.d.ts.map +1 -0
  82. package/dist/types/browser/snapshot-window.d.ts +31 -0
  83. package/dist/types/browser/snapshot-window.d.ts.map +1 -0
  84. package/dist/types/browser/snapshot.d.ts +41 -0
  85. package/dist/types/browser/snapshot.d.ts.map +1 -0
  86. package/dist/types/browser/tabs.d.ts +67 -0
  87. package/dist/types/browser/tabs.d.ts.map +1 -0
  88. package/dist/types/browser/target.d.ts +106 -0
  89. package/dist/types/browser/target.d.ts.map +1 -0
  90. package/dist/types/browser/youtube.d.ts +26 -0
  91. package/dist/types/browser/youtube.d.ts.map +1 -0
  92. package/dist/types/cli.d.ts +14 -0
  93. package/dist/types/cli.d.ts.map +1 -0
  94. package/dist/types/cloud/auth.d.ts +80 -0
  95. package/dist/types/cloud/auth.d.ts.map +1 -0
  96. package/dist/types/cloud/docker.d.ts +76 -0
  97. package/dist/types/cloud/docker.d.ts.map +1 -0
  98. package/dist/types/cloud/firecracker.d.ts +142 -0
  99. package/dist/types/cloud/firecracker.d.ts.map +1 -0
  100. package/dist/types/cloud/golden-snapshot.d.ts +122 -0
  101. package/dist/types/cloud/golden-snapshot.d.ts.map +1 -0
  102. package/dist/types/cloud/index.d.ts +26 -0
  103. package/dist/types/cloud/index.d.ts.map +1 -0
  104. package/dist/types/cloud/orchestrator-interface.d.ts +63 -0
  105. package/dist/types/cloud/orchestrator-interface.d.ts.map +1 -0
  106. package/dist/types/cloud/orchestrator.d.ts +58 -0
  107. package/dist/types/cloud/orchestrator.d.ts.map +1 -0
  108. package/dist/types/cloud/proxy.d.ts +34 -0
  109. package/dist/types/cloud/proxy.d.ts.map +1 -0
  110. package/dist/types/cloud/reaper.d.ts +49 -0
  111. package/dist/types/cloud/reaper.d.ts.map +1 -0
  112. package/dist/types/cloud/server.d.ts +19 -0
  113. package/dist/types/cloud/server.d.ts.map +1 -0
  114. package/dist/types/cloud/sessions.d.ts +85 -0
  115. package/dist/types/cloud/sessions.d.ts.map +1 -0
  116. package/dist/types/cloud/vm-orchestrator.d.ts +133 -0
  117. package/dist/types/cloud/vm-orchestrator.d.ts.map +1 -0
  118. package/dist/types/cloud/vm-warm-pool.d.ts +104 -0
  119. package/dist/types/cloud/vm-warm-pool.d.ts.map +1 -0
  120. package/dist/types/cloud/warm-pool.d.ts +85 -0
  121. package/dist/types/cloud/warm-pool.d.ts.map +1 -0
  122. package/dist/types/cloud/ws.d.ts +61 -0
  123. package/dist/types/cloud/ws.d.ts.map +1 -0
  124. package/dist/types/commands/meta/auth.d.ts +6 -0
  125. package/dist/types/commands/meta/auth.d.ts.map +1 -0
  126. package/dist/types/commands/meta/flows.d.ts +15 -0
  127. package/dist/types/commands/meta/flows.d.ts.map +1 -0
  128. package/dist/types/commands/meta/index.d.ts +14 -0
  129. package/dist/types/commands/meta/index.d.ts.map +1 -0
  130. package/dist/types/commands/meta/inspection.d.ts +7 -0
  131. package/dist/types/commands/meta/inspection.d.ts.map +1 -0
  132. package/dist/types/commands/meta/profile.d.ts +11 -0
  133. package/dist/types/commands/meta/profile.d.ts.map +1 -0
  134. package/dist/types/commands/meta/recording.d.ts +7 -0
  135. package/dist/types/commands/meta/recording.d.ts.map +1 -0
  136. package/dist/types/commands/meta/screenshots.d.ts +7 -0
  137. package/dist/types/commands/meta/screenshots.d.ts.map +1 -0
  138. package/dist/types/commands/meta/sessions.d.ts +7 -0
  139. package/dist/types/commands/meta/sessions.d.ts.map +1 -0
  140. package/dist/types/commands/meta/sim.d.ts +10 -0
  141. package/dist/types/commands/meta/sim.d.ts.map +1 -0
  142. package/dist/types/commands/meta/system.d.ts +8 -0
  143. package/dist/types/commands/meta/system.d.ts.map +1 -0
  144. package/dist/types/commands/meta/tabs.d.ts +6 -0
  145. package/dist/types/commands/meta/tabs.d.ts.map +1 -0
  146. package/dist/types/commands/meta/youtube.d.ts +7 -0
  147. package/dist/types/commands/meta/youtube.d.ts.map +1 -0
  148. package/dist/types/commands/read.d.ts +16 -0
  149. package/dist/types/commands/read.d.ts.map +1 -0
  150. package/dist/types/commands/write.d.ts +17 -0
  151. package/dist/types/commands/write.d.ts.map +1 -0
  152. package/dist/types/config.d.ts +101 -0
  153. package/dist/types/config.d.ts.map +1 -0
  154. package/dist/types/constants.d.ts +36 -0
  155. package/dist/types/constants.d.ts.map +1 -0
  156. package/dist/types/detection/frameworks.d.ts +27 -0
  157. package/dist/types/detection/frameworks.d.ts.map +1 -0
  158. package/dist/types/detection/index.d.ts +64 -0
  159. package/dist/types/detection/index.d.ts.map +1 -0
  160. package/dist/types/detection/infrastructure.d.ts +82 -0
  161. package/dist/types/detection/infrastructure.d.ts.map +1 -0
  162. package/dist/types/detection/saas.d.ts +39 -0
  163. package/dist/types/detection/saas.d.ts.map +1 -0
  164. package/dist/types/enable.d.ts +10 -0
  165. package/dist/types/enable.d.ts.map +1 -0
  166. package/dist/types/engine/chrome.d.ts +45 -0
  167. package/dist/types/engine/chrome.d.ts.map +1 -0
  168. package/dist/types/engine/index.d.ts +9 -0
  169. package/dist/types/engine/index.d.ts.map +1 -0
  170. package/dist/types/engine/providers.d.ts +36 -0
  171. package/dist/types/engine/providers.d.ts.map +1 -0
  172. package/dist/types/engine/resolver.d.ts +36 -0
  173. package/dist/types/engine/resolver.d.ts.map +1 -0
  174. package/dist/types/expect.d.ts +68 -0
  175. package/dist/types/expect.d.ts.map +1 -0
  176. package/dist/types/export/index.d.ts +8 -0
  177. package/dist/types/export/index.d.ts.map +1 -0
  178. package/dist/types/export/record.d.ts +28 -0
  179. package/dist/types/export/record.d.ts.map +1 -0
  180. package/dist/types/export/replay.d.ts +9 -0
  181. package/dist/types/export/replay.d.ts.map +1 -0
  182. package/dist/types/flow-parser.d.ts +32 -0
  183. package/dist/types/flow-parser.d.ts.map +1 -0
  184. package/dist/types/install-skill.d.ts +8 -0
  185. package/dist/types/install-skill.d.ts.map +1 -0
  186. package/dist/types/lib.d.ts +27 -0
  187. package/dist/types/lib.d.ts.map +1 -0
  188. package/dist/types/mcp/index.d.ts +10 -0
  189. package/dist/types/mcp/index.d.ts.map +1 -0
  190. package/dist/types/mcp/server.d.ts +9 -0
  191. package/dist/types/mcp/server.d.ts.map +1 -0
  192. package/dist/types/mcp/tools/index.d.ts +36 -0
  193. package/dist/types/mcp/tools/index.d.ts.map +1 -0
  194. package/dist/types/network/buffers.d.ts +53 -0
  195. package/dist/types/network/buffers.d.ts.map +1 -0
  196. package/dist/types/network/har.d.ts +10 -0
  197. package/dist/types/network/har.d.ts.map +1 -0
  198. package/dist/types/network/index.d.ts +6 -0
  199. package/dist/types/network/index.d.ts.map +1 -0
  200. package/dist/types/perf-audit/diff.d.ts +43 -0
  201. package/dist/types/perf-audit/diff.d.ts.map +1 -0
  202. package/dist/types/perf-audit/dom-analysis.d.ts +74 -0
  203. package/dist/types/perf-audit/dom-analysis.d.ts.map +1 -0
  204. package/dist/types/perf-audit/formatter.d.ts +34 -0
  205. package/dist/types/perf-audit/formatter.d.ts.map +1 -0
  206. package/dist/types/perf-audit/index.d.ts +128 -0
  207. package/dist/types/perf-audit/index.d.ts.map +1 -0
  208. package/dist/types/perf-audit/persist.d.ts +40 -0
  209. package/dist/types/perf-audit/persist.d.ts.map +1 -0
  210. package/dist/types/perf-audit/recommendations.d.ts +18 -0
  211. package/dist/types/perf-audit/recommendations.d.ts.map +1 -0
  212. package/dist/types/perf-audit/resource-analyzer.d.ts +46 -0
  213. package/dist/types/perf-audit/resource-analyzer.d.ts.map +1 -0
  214. package/dist/types/perf-audit/web-vitals.d.ts +73 -0
  215. package/dist/types/perf-audit/web-vitals.d.ts.map +1 -0
  216. package/dist/types/proxy/index.d.ts +6 -0
  217. package/dist/types/proxy/index.d.ts.map +1 -0
  218. package/dist/types/proxy/pool.d.ts +44 -0
  219. package/dist/types/proxy/pool.d.ts.map +1 -0
  220. package/dist/types/proxy/providers.d.ts +32 -0
  221. package/dist/types/proxy/providers.d.ts.map +1 -0
  222. package/dist/types/sdk/client.d.ts +37 -0
  223. package/dist/types/sdk/client.d.ts.map +1 -0
  224. package/dist/types/sdk/index.d.ts +17 -0
  225. package/dist/types/sdk/index.d.ts.map +1 -0
  226. package/dist/types/sdk/session.d.ts +95 -0
  227. package/dist/types/sdk/session.d.ts.map +1 -0
  228. package/dist/types/sdk/transports/cloud.d.ts +89 -0
  229. package/dist/types/sdk/transports/cloud.d.ts.map +1 -0
  230. package/dist/types/sdk/transports/index.d.ts +3 -0
  231. package/dist/types/sdk/transports/index.d.ts.map +1 -0
  232. package/dist/types/sdk/transports/local.d.ts +56 -0
  233. package/dist/types/sdk/transports/local.d.ts.map +1 -0
  234. package/dist/types/sdk.d.ts +35 -0
  235. package/dist/types/sdk.d.ts.map +1 -0
  236. package/dist/types/security/auth-vault.d.ts +32 -0
  237. package/dist/types/security/auth-vault.d.ts.map +1 -0
  238. package/dist/types/security/domain-filter.d.ts +31 -0
  239. package/dist/types/security/domain-filter.d.ts.map +1 -0
  240. package/dist/types/security/index.d.ts +10 -0
  241. package/dist/types/security/index.d.ts.map +1 -0
  242. package/dist/types/security/policy.d.ts +20 -0
  243. package/dist/types/security/policy.d.ts.map +1 -0
  244. package/dist/types/security/sanitize.d.ts +6 -0
  245. package/dist/types/security/sanitize.d.ts.map +1 -0
  246. package/dist/types/server.d.ts +13 -0
  247. package/dist/types/server.d.ts.map +1 -0
  248. package/dist/types/session/concurrency.d.ts +28 -0
  249. package/dist/types/session/concurrency.d.ts.map +1 -0
  250. package/dist/types/session/encryption.d.ts +8 -0
  251. package/dist/types/session/encryption.d.ts.map +1 -0
  252. package/dist/types/session/index.d.ts +7 -0
  253. package/dist/types/session/index.d.ts.map +1 -0
  254. package/dist/types/session/manager.d.ts +110 -0
  255. package/dist/types/session/manager.d.ts.map +1 -0
  256. package/dist/types/session/persist.d.ts +87 -0
  257. package/dist/types/session/persist.d.ts.map +1 -0
  258. package/dist/types/session/tab-lock.d.ts +26 -0
  259. package/dist/types/session/tab-lock.d.ts.map +1 -0
  260. package/dist/types/session/target-factory.d.ts +88 -0
  261. package/dist/types/session/target-factory.d.ts.map +1 -0
  262. package/dist/types/sim-cli.d.ts +8 -0
  263. package/dist/types/sim-cli.d.ts.map +1 -0
  264. package/dist/types/types.d.ts +45 -0
  265. package/dist/types/types.d.ts.map +1 -0
  266. package/dist/types/visual.d.ts +79 -0
  267. package/dist/types/visual.d.ts.map +1 -0
  268. package/package.json +22 -3
  269. package/skill/browse/SKILL.md +286 -0
  270. package/skill/{references → browse/references}/commands.md +203 -18
  271. package/skill/browse-aeo/SKILL.md +148 -0
  272. package/skill/browse-config/SKILL.md +200 -0
  273. package/skill/browse-geo/SKILL.md +225 -0
  274. package/skill/browse-qa/SKILL.md +143 -0
  275. package/skill/browse-seo/SKILL.md +188 -0
  276. package/skill/browse-stealth/SKILL.md +246 -0
  277. package/skill/SKILL.md +0 -496
  278. /package/skill/{references → browse/references}/guides.md +0 -0
  279. /package/skill/{references → browse/references}/permissions.md +0 -0
@@ -0,0 +1,138 @@
1
+ /**
2
+ * CommandSpec — the single source of truth for command identity and metadata.
3
+ *
4
+ * Every command in the system is described by a CommandSpec. The registry
5
+ * derives category sets, CLI help, MCP tool definitions, and future plugin
6
+ * registration from these specs. No hand-maintained duplicated sets.
7
+ */
8
+ import type { CommandCategory } from './events';
9
+ /** MCP tool schema for commands exposed via Model Context Protocol */
10
+ export interface McpToolSpec {
11
+ /** Tool description shown to LLMs */
12
+ description: string;
13
+ /** JSON Schema for tool input parameters */
14
+ inputSchema: {
15
+ type: 'object';
16
+ properties: Record<string, unknown>;
17
+ required?: string[];
18
+ };
19
+ /**
20
+ * Decode MCP tool params into CLI args array.
21
+ * If omitted, the default decoder collects string param values positionally.
22
+ */
23
+ argDecode?: (params: Record<string, unknown>) => string[];
24
+ /**
25
+ * Override the command name routed to by the MCP dispatcher.
26
+ * Used by virtual tools (e.g. 'perf-audit-save' routes to 'perf-audit').
27
+ * If omitted, the MCP tool name (after prefix/underscore conversion) is used.
28
+ */
29
+ commandName?: string;
30
+ }
31
+ export interface CommandSpec {
32
+ /** Command name (e.g. 'goto', 'click', 'snapshot') */
33
+ name: string;
34
+ /** Routing category */
35
+ category: CommandCategory;
36
+ /** Short description for CLI help */
37
+ description: string;
38
+ /** Argument format for CLI help (e.g. '<url>', '<sel> <val>') */
39
+ usage?: string;
40
+ /** Skip action context enrichment on this write command */
41
+ skipContext?: boolean;
42
+ /** Skip recording this command in record sessions */
43
+ skipRecording?: boolean;
44
+ /** Safe to auto-retry after server restart (read-only / idempotent) */
45
+ safeToRetry?: boolean;
46
+ /** Returns page-derived content (for --content-boundaries wrapping) */
47
+ pageContent?: boolean;
48
+ /**
49
+ * Which automation target types this command supports.
50
+ * - 'browser': only available for browser sessions
51
+ * - 'app': only available for app (native) sessions
52
+ * - 'any': available for all target types (default)
53
+ */
54
+ targetSupport?: 'browser' | 'app' | 'any';
55
+ /** MCP tool metadata. Omit for commands not exposed via MCP. */
56
+ mcp?: McpToolSpec;
57
+ }
58
+ /** Context passed to command execute functions by the executor */
59
+ export interface CommandContext {
60
+ /** Command arguments from the caller */
61
+ args: string[];
62
+ /** The session's automation target */
63
+ target: import('../automation/target').AutomationTarget;
64
+ /** Per-session buffers (console, network) */
65
+ buffers: import('../network/buffers').SessionBuffers;
66
+ /** Domain filter for the session (may be null) */
67
+ domainFilter?: import('../security/domain-filter').DomainFilter | null;
68
+ /** Session reference for commands that need session-level state */
69
+ session?: import('../session/manager').Session;
70
+ /** Shutdown callback for server-control commands */
71
+ shutdown?: () => Promise<void> | void;
72
+ /** Session manager reference for multi-session commands */
73
+ sessionManager?: import('../session/manager').SessionManager;
74
+ /** Transport lifecycle hooks, threaded for sub-command dispatch (flow/chain) */
75
+ lifecycle?: import('./events').CommandLifecycle;
76
+ }
77
+ /**
78
+ * CommandDefinition — executable command registration.
79
+ *
80
+ * This is the durable shape for built-in commands now and plugin commands later.
81
+ * It combines metadata (CommandSpec) with execution logic and optional MCP
82
+ * arg-decoding so the registry owns both discovery and dispatch.
83
+ */
84
+ export interface CommandDefinition {
85
+ /** Command metadata (category, description, usage, behavioral flags, MCP schema) */
86
+ spec: CommandSpec;
87
+ /** Execute the command. Returns the result string. */
88
+ execute: (ctx: CommandContext) => Promise<string>;
89
+ /**
90
+ * Optional MCP arg-decoding: transforms MCP tool params into CLI args.
91
+ * If omitted, the default decoder is used (simple positional mapping).
92
+ */
93
+ mcpArgDecode?: (params: Record<string, unknown>) => string[];
94
+ }
95
+ /**
96
+ * Typed command registry — single authoritative source for command metadata.
97
+ *
98
+ * Server routing, MCP tool definitions, CLI help, and future plugin
99
+ * registration all derive from this registry instead of maintaining
100
+ * separate hand-edited sets.
101
+ */
102
+ export declare class CommandRegistry {
103
+ private specs;
104
+ private definitions;
105
+ /** Register a metadata-only command spec. */
106
+ register(spec: CommandSpec): void;
107
+ /** Register multiple metadata-only command specs. */
108
+ registerAll(specs: CommandSpec[]): void;
109
+ /** Register an executable command definition (spec + execute + optional MCP arg-decode). */
110
+ define(def: CommandDefinition): void;
111
+ /** Register multiple executable command definitions. */
112
+ defineAll(defs: CommandDefinition[]): void;
113
+ /** Look up a command spec by name. */
114
+ get(name: string): CommandSpec | undefined;
115
+ /** Look up a command definition by name. Returns undefined if spec-only (not yet migrated). */
116
+ getDefinition(name: string): CommandDefinition | undefined;
117
+ /** Check if a command is registered. */
118
+ has(name: string): boolean;
119
+ /** Check if a command has a full definition (not just metadata). */
120
+ hasDefined(name: string): boolean;
121
+ /** Get the category of a command. */
122
+ getCategory(name: string): CommandCategory | undefined;
123
+ /** Get all specs in a category. */
124
+ byCategory(category: CommandCategory): CommandSpec[];
125
+ /** Get command names in a category as a Set (backward-compatible). */
126
+ categorySet(category: CommandCategory): Set<string>;
127
+ /** Get all registered specs. */
128
+ all(): CommandSpec[];
129
+ /** Get all registered command definitions. */
130
+ allDefinitions(): CommandDefinition[];
131
+ /** Get all registered command names. */
132
+ names(): string[];
133
+ /** Number of registered commands. */
134
+ get size(): number;
135
+ /** Number of commands with full definitions. */
136
+ get definedCount(): number;
137
+ }
138
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/automation/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Command lifecycle hook contracts.
3
+ *
4
+ * Used by the executor pipeline (TASK-003) to centralize cross-cutting
5
+ * concerns: context capture, recording, error shaping.
6
+ *
7
+ * Design constraints:
8
+ * - No imports from server, session, transport, or Playwright.
9
+ * - Hooks are pure contracts — implementations live in the executor.
10
+ * - BeforeCommandHook can abort execution (e.g. policy denial).
11
+ * - AfterCommandHook can enrich the result (e.g. action context).
12
+ * - CommandErrorHook can transform error messages (e.g. AI-friendly rewriting).
13
+ */
14
+ /** Command category for routing and lifecycle decisions */
15
+ export type CommandCategory = 'read' | 'write' | 'meta';
16
+ /** Immutable event payload shared by all lifecycle hooks */
17
+ export interface CommandEvent {
18
+ /** Command name (e.g. 'goto', 'click', 'snapshot') */
19
+ readonly command: string;
20
+ /** Command arguments */
21
+ readonly args: readonly string[];
22
+ /** Resolved command category */
23
+ readonly category: CommandCategory;
24
+ }
25
+ /** Payload for after-command hooks — includes execution result and timing */
26
+ export interface AfterCommandEvent extends CommandEvent {
27
+ /** Raw command result before enrichment */
28
+ readonly result: string;
29
+ /** Wall-clock execution duration in milliseconds */
30
+ readonly durationMs: number;
31
+ /** The resolved command spec (for checking skipRecording, pageContent, etc.) */
32
+ readonly spec?: import('./command').CommandSpec;
33
+ }
34
+ /** Payload for error hooks — includes the thrown error */
35
+ export interface CommandErrorEvent extends CommandEvent {
36
+ /** The error thrown during command execution */
37
+ readonly error: Error;
38
+ }
39
+ /**
40
+ * Invoked before command execution.
41
+ * Return void to proceed, or return an abort signal to short-circuit
42
+ * execution with a predetermined result (e.g. policy denial message).
43
+ */
44
+ export type BeforeCommandHook = (event: CommandEvent) => Promise<void | {
45
+ abort: true;
46
+ result: string;
47
+ }>;
48
+ /**
49
+ * Invoked after successful command execution.
50
+ * Receives the result and returns an optionally enriched version
51
+ * (e.g. with action context appended).
52
+ */
53
+ export type AfterCommandHook = (event: AfterCommandEvent) => Promise<string>;
54
+ /**
55
+ * Invoked when command execution throws.
56
+ * Returns a transformed error message (e.g. AI-friendly rewriting).
57
+ */
58
+ export type CommandErrorHook = (event: CommandErrorEvent) => Promise<string>;
59
+ /**
60
+ * Lifecycle hook collection for the executor pipeline.
61
+ *
62
+ * All arrays are optional. When present, hooks execute in order:
63
+ * - before: first abort wins, remaining hooks are skipped
64
+ * - after: each receives the previous hook's output (pipeline)
65
+ * - onError: each receives the previous hook's output (pipeline)
66
+ */
67
+ export interface CommandLifecycle {
68
+ before?: BeforeCommandHook[];
69
+ after?: AfterCommandHook[];
70
+ onError?: CommandErrorHook[];
71
+ }
72
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/automation/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAIxD,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wBAAwB;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;CACpC;AAED,6EAA6E;AAC7E,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,WAAW,EAAE,WAAW,CAAC;CACjD;AAED,0DAA0D;AAC1D,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AAID;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,KAAK,EAAE,YAAY,KAChB,OAAO,CAAC,IAAI,GAAG;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAC7B,KAAK,EAAE,iBAAiB,KACrB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAC7B,KAAK,EAAE,iBAAiB,KACrB,OAAO,CAAC,MAAM,CAAC,CAAC;AAIrB;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC9B"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Command executor pipeline — single execution path for all commands.
3
+ *
4
+ * Centralizes:
5
+ * - Command lookup via registry (definition or spec)
6
+ * - Lifecycle hooks (before/after/onError)
7
+ * - Action context enrichment for write commands
8
+ * - Recording hooks
9
+ * - Error shaping
10
+ *
11
+ * Used by both HTTP server and MCP server.
12
+ * Future flow/retry/watch execution (v2.1) and plugins (v2.2) will also use this.
13
+ */
14
+ import type { CommandSpec, CommandContext } from './command';
15
+ import type { CommandLifecycle } from './events';
16
+ /** Options passed to executeCommand by the transport layer */
17
+ export interface ExecuteOptions {
18
+ /** Lifecycle hooks to apply (transport-specific) */
19
+ lifecycle?: CommandLifecycle;
20
+ /** Execution context for definition-backed commands */
21
+ context?: CommandContext;
22
+ }
23
+ /** Result of command execution */
24
+ export interface ExecuteResult {
25
+ /** Final command output (after lifecycle enrichment) */
26
+ output: string;
27
+ /** The resolved command spec */
28
+ spec: CommandSpec;
29
+ /** Execution duration in milliseconds */
30
+ durationMs: number;
31
+ }
32
+ /**
33
+ * Execute a command through the shared pipeline.
34
+ *
35
+ * Looks up the command's registered CommandDefinition and calls its execute().
36
+ * If no definition exists, throws.
37
+ */
38
+ export declare function executeCommand(command: string, args: string[], opts?: ExecuteOptions): Promise<ExecuteResult>;
39
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/automation/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAsD,MAAM,UAAU,CAAC;AAGrG,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,uDAAuD;IACvD,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,IAAI,EAAE,WAAW,CAAC;IAClB,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,aAAa,CAAC,CAwFxB"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Automation domain — target-neutral execution contracts.
3
+ *
4
+ * Public API for the automation layer. Consumers import from here
5
+ * rather than reaching into individual files.
6
+ */
7
+ export { type AutomationTarget, type TargetCapabilities, UnsupportedCapabilityError, requireCapability, hasCapability, } from './target';
8
+ export { type CommandCategory, type CommandEvent, type AfterCommandEvent, type CommandErrorEvent, type BeforeCommandHook, type AfterCommandHook, type CommandErrorHook, type CommandLifecycle, } from './events';
9
+ export { type CommandSpec, type McpToolSpec, type CommandDefinition, type CommandContext, CommandRegistry, } from './command';
10
+ export { executeCommand, type ExecuteOptions, type ExecuteResult, } from './executor';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/automation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,0BAA0B,EAC1B,iBAAiB,EACjB,aAAa,GACd,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,eAAe,GAChB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Command registry — single source of truth for all browse commands.
3
+ *
4
+ * Replaces hand-maintained READ/WRITE/META sets with typed CommandSpec
5
+ * registrations. Server routing, MCP exposure, CLI help, and future
6
+ * plugin registration all derive from this registry.
7
+ */
8
+ import { CommandRegistry } from './command';
9
+ export declare const registry: CommandRegistry;
10
+ export declare const READ_COMMANDS: Set<string>;
11
+ export declare const WRITE_COMMANDS: Set<string>;
12
+ export declare const META_COMMANDS: Set<string>;
13
+ /** Commands safe to auto-retry after server restart */
14
+ export declare const SAFE_TO_RETRY: Set<string>;
15
+ /** Commands excluded from recording */
16
+ export declare const RECORDING_SKIP: Set<string>;
17
+ /** Commands returning page content (for --content-boundaries) */
18
+ export declare const PAGE_CONTENT_COMMANDS: Set<string>;
19
+ /**
20
+ * Rewrite Playwright error messages into actionable hints for AI agents.
21
+ * Raw errors like "locator.click: Timeout 5000ms exceeded" are unhelpful.
22
+ */
23
+ export declare function rewriteError(msg: string): string;
24
+ /**
25
+ * Generate CLI help text derived from the command registry.
26
+ * Commands are grouped by category (read, write, meta).
27
+ * This is the single source of truth for the --help output.
28
+ */
29
+ export declare function generateHelp(): string;
30
+ /**
31
+ * Lazily register all command definitions.
32
+ * Called once on first executeCommand() invocation.
33
+ * Uses dynamic imports to avoid circular dependency issues at module load time.
34
+ */
35
+ export declare function ensureDefinitionsRegistered(): Promise<void>;
36
+ export type { CommandSpec, CommandRegistry, CommandDefinition } from './command';
37
+ export type { CommandCategory } from './events';
38
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/automation/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAoB,MAAM,WAAW,CAAC;AAK9D,eAAO,MAAM,QAAQ,iBAAwB,CAAC;AA07B9C,eAAO,MAAM,aAAa,aAA+B,CAAC;AAC1D,eAAO,MAAM,cAAc,aAAgC,CAAC;AAC5D,eAAO,MAAM,aAAa,aAA+B,CAAC;AAE1D,uDAAuD;AACvD,eAAO,MAAM,aAAa,aAEzB,CAAC;AAEF,uCAAuC;AACvC,eAAO,MAAM,cAAc,aAE1B,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,aAEjC,CAAC;AAIF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAmChD;AAWD;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAsErC;AAQD;;;;GAIG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAWjE;AAGD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACjF,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Custom audit rules — project-local declarative audit extensions.
3
+ *
4
+ * Loads .browse/rules/*.json and applies them alongside built-in audit checks.
5
+ * Rules are declarative JSON, not executable code — no eval/plugin hooks.
6
+ *
7
+ * Supported rule kinds:
8
+ * - metric-threshold: for perf-audit (e.g., "LCP must be under 2000ms")
9
+ * - selector-count: for a11y-audit (e.g., "no more than 0 images without alt")
10
+ */
11
+ export interface CustomRule {
12
+ /** Rule version (currently 1) */
13
+ version: 1;
14
+ /** Human-readable rule name */
15
+ name: string;
16
+ /** Which audit this rule extends */
17
+ target: 'perf-audit' | 'a11y-audit';
18
+ /** Rule kind */
19
+ kind: 'metric-threshold' | 'selector-count';
20
+ /** For metric-threshold: metric key (e.g., 'lcp') */
21
+ metric?: string;
22
+ /** For metric-threshold: maximum allowed value */
23
+ threshold?: number;
24
+ /** For selector-count: CSS selector to count */
25
+ selector?: string;
26
+ /** For selector-count: maximum allowed count (0 = must not exist) */
27
+ maxCount?: number;
28
+ /** Severity when the rule fails */
29
+ severity?: 'critical' | 'warning';
30
+ }
31
+ export interface RuleResult {
32
+ rule: CustomRule;
33
+ passed: boolean;
34
+ actual: string;
35
+ source: string;
36
+ }
37
+ /**
38
+ * Load custom rules from .browse/rules/*.json
39
+ */
40
+ export declare function loadCustomRules(localDir: string): {
41
+ rules: CustomRule[];
42
+ warnings: string[];
43
+ };
44
+ /**
45
+ * Evaluate metric-threshold rules against perf-audit metrics.
46
+ */
47
+ export declare function evaluateMetricRules(rules: CustomRule[], metrics: Record<string, number | null>): RuleResult[];
48
+ /**
49
+ * Evaluate selector-count rules against page state.
50
+ */
51
+ export declare function evaluateSelectorRules(rules: CustomRule[], page: any): Promise<RuleResult[]>;
52
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/automation/rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,WAAW,UAAU;IACzB,iCAAiC;IACjC,OAAO,EAAE,CAAC,CAAC;IACX,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,MAAM,EAAE,YAAY,GAAG,YAAY,CAAC;IACpC,gBAAgB;IAChB,IAAI,EAAE,kBAAkB,GAAG,gBAAgB,CAAC;IAC5C,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAoC7F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GACrC,UAAU,EAAE,CAWd;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,UAAU,EAAE,EACnB,IAAI,EAAE,GAAG,GACR,OAAO,CAAC,UAAU,EAAE,CAAC,CAYvB"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Automation target contracts — target-neutral automation abstractions.
3
+ *
4
+ * BrowserManager is the first implementation (TASK-004).
5
+ * Future targets: AppManager (v2.0), FlowTarget (v2.1), plugins (v2.2).
6
+ *
7
+ * Design constraints:
8
+ * - No imports from browser-manager, session-manager, or Playwright types.
9
+ * - Keep the core contract minimal — an AppManager for native mobile
10
+ * must be able to implement AutomationTarget without faking browser APIs.
11
+ * - Domain-specific behavior lives behind capability interfaces that
12
+ * implementations opt into and consumers narrow to at runtime.
13
+ */
14
+ /** Runtime capability query — each flag maps to a capability interface. */
15
+ export interface TargetCapabilities {
16
+ /** Navigate to URLs or deep links */
17
+ navigation: boolean;
18
+ /** Multiple tabs or windows */
19
+ tabs: boolean;
20
+ /** @ref selector resolution from accessibility snapshots */
21
+ refs: boolean;
22
+ /** Screenshot and PDF capture */
23
+ screenshots: boolean;
24
+ /** In-context JavaScript evaluation */
25
+ javascript: boolean;
26
+ /** Device profile emulation (viewport, UA, touch) */
27
+ deviceEmulation: boolean;
28
+ /** Sub-frame or sub-container targeting */
29
+ frames: boolean;
30
+ }
31
+ /**
32
+ * Thrown when a command requires a capability that the current
33
+ * automation target does not support.
34
+ *
35
+ * Command handlers throw this instead of type-casting or branching
36
+ * on concrete manager types. The executor pipeline catches it and
37
+ * returns a clear error to the caller.
38
+ */
39
+ export declare class UnsupportedCapabilityError extends Error {
40
+ readonly capability: keyof TargetCapabilities;
41
+ readonly targetType: string;
42
+ constructor(capability: keyof TargetCapabilities, targetType: string);
43
+ }
44
+ /**
45
+ * AutomationTarget — the minimal target-neutral automation contract.
46
+ *
47
+ * Every automation backend implements this surface. It covers identity,
48
+ * capability discovery, location, health, and cleanup — nothing more.
49
+ *
50
+ * Browser-specific APIs (page, context, locators) are accessed through
51
+ * capability interfaces that BrowserManager also implements. Consumers
52
+ * check getCapabilities() and narrow via requireCapability() before
53
+ * calling capability-specific methods.
54
+ */
55
+ export interface AutomationTarget {
56
+ /** Identifies the target kind (e.g. 'browser', 'app') */
57
+ readonly targetType: string;
58
+ /** Runtime capability query */
59
+ getCapabilities(): TargetCapabilities;
60
+ /** Current location — URL for browser, screen for app, step for flow */
61
+ getCurrentLocation(): string;
62
+ /** Whether the target is connected and operational */
63
+ isReady(): boolean;
64
+ /** Release all resources */
65
+ close(): Promise<void>;
66
+ }
67
+ /**
68
+ * Assert that a target supports a capability.
69
+ * Throws UnsupportedCapabilityError if it does not.
70
+ */
71
+ export declare function requireCapability(target: AutomationTarget, capability: keyof TargetCapabilities): void;
72
+ /**
73
+ * Check whether a target supports a capability (no throw).
74
+ */
75
+ export declare function hasCapability(target: AutomationTarget, capability: keyof TargetCapabilities): boolean;
76
+ //# sourceMappingURL=target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../../../src/automation/target.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,+BAA+B;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,4DAA4D;IAC5D,IAAI,EAAE,OAAO,CAAC;IACd,iCAAiC;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,uCAAuC;IACvC,UAAU,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,eAAe,EAAE,OAAO,CAAC;IACzB,2CAA2C;IAC3C,MAAM,EAAE,OAAO,CAAC;CACjB;AAID;;;;;;;GAOG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,kBAAkB,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,UAAU,EAAE,MAAM,kBAAkB,EAAE,UAAU,EAAE,MAAM;CASrE;AAID;;;;;;;;;;GAUG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,+BAA+B;IAC/B,eAAe,IAAI,kBAAkB,CAAC;IAEtC,wEAAwE;IACxE,kBAAkB,IAAI,MAAM,CAAC;IAE7B,sDAAsD;IACtD,OAAO,IAAI,OAAO,CAAC;IAEnB,4BAA4B;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,kBAAkB,GACnC,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,kBAAkB,GACnC,OAAO,CAET"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Consent dialog auto-dismiss -- clicks away cookie banners, GDPR overlays, etc.
3
+ * Runtime-agnostic. Best-effort: never throws, never blocks navigation.
4
+ * Gated by BROWSE_CONSENT_DISMISS env var (default '1' = enabled).
5
+ */
6
+ import type { Page } from 'playwright';
7
+ /**
8
+ * Try to dismiss a consent dialog on the page. Best-effort, never throws.
9
+ * Tries each selector with a 150ms visibility timeout. Clicks the first visible one and returns.
10
+ * Only dismisses one dialog per call (avoid cascading clicks).
11
+ */
12
+ export declare function dismissConsentDialog(page: Page): Promise<boolean>;
13
+ //# sourceMappingURL=consent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../../src/browser/consent.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AA+BvC;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAevE"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Chromium browser cookie import — read and decrypt cookies from real browsers.
3
+ *
4
+ * Supports macOS Chromium-based browsers: Chrome, Arc, Brave, Edge.
5
+ * Pure logic module — no Playwright dependency, no HTTP concerns.
6
+ *
7
+ * Decryption pipeline (Chromium macOS "v10" format):
8
+ *
9
+ * 1. Keychain: `security find-generic-password -s "<svc>" -w`
10
+ * → base64 password string
11
+ *
12
+ * 2. Key derivation:
13
+ * PBKDF2(password, salt="saltysalt", iter=1003, len=16, sha1)
14
+ * → 16-byte AES key
15
+ *
16
+ * 3. For each cookie with encrypted_value starting with "v10":
17
+ * - Ciphertext = encrypted_value[3:]
18
+ * - IV = 16 bytes of 0x20 (space character)
19
+ * - Plaintext = AES-128-CBC-decrypt(key, iv, ciphertext)
20
+ * - Remove PKCS7 padding
21
+ * - Skip first 32 bytes (HMAC-SHA256 authentication tag)
22
+ * - Remaining bytes = cookie value (UTF-8)
23
+ *
24
+ * 4. If encrypted_value is empty but `value` field is set,
25
+ * use value directly (unencrypted cookie)
26
+ *
27
+ * 5. Chromium epoch: microseconds since 1601-01-01
28
+ * Unix seconds = (epoch - 11644473600000000) / 1000000
29
+ *
30
+ * 6. sameSite: 0→"None", 1→"Lax", 2→"Strict", else→"Lax"
31
+ */
32
+ export interface BrowserInfo {
33
+ name: string;
34
+ dataDir: string;
35
+ keychainService: string;
36
+ aliases: string[];
37
+ }
38
+ export interface DomainEntry {
39
+ domain: string;
40
+ count: number;
41
+ }
42
+ export interface ImportResult {
43
+ cookies: PlaywrightCookie[];
44
+ count: number;
45
+ failed: number;
46
+ domainCounts: Record<string, number>;
47
+ }
48
+ export interface PlaywrightCookie {
49
+ name: string;
50
+ value: string;
51
+ domain: string;
52
+ path: string;
53
+ expires: number;
54
+ secure: boolean;
55
+ httpOnly: boolean;
56
+ sameSite: 'Strict' | 'Lax' | 'None';
57
+ }
58
+ export declare class CookieImportError extends Error {
59
+ code: string;
60
+ action?: "retry" | undefined;
61
+ constructor(message: string, code: string, action?: "retry" | undefined);
62
+ }
63
+ /**
64
+ * Parse a Netscape-format cookie file (.txt) into Playwright cookie objects.
65
+ *
66
+ * Format: domain\tincludeSubdomains\tpath\tsecure\texpires\tname\tvalue
67
+ * Lines starting with # are comments, except #HttpOnly_ prefix marks httpOnly cookies.
68
+ * This is the standard format exported by browser extensions like "cookies.txt".
69
+ */
70
+ export declare function parseNetscapeCookieFile(content: string): Array<{
71
+ name: string;
72
+ value: string;
73
+ domain: string;
74
+ path: string;
75
+ expires: number;
76
+ httpOnly: boolean;
77
+ secure: boolean;
78
+ }>;
79
+ /**
80
+ * Find which Chromium browsers are installed (have a cookie DB on disk).
81
+ */
82
+ export declare function findInstalledBrowsers(): BrowserInfo[];
83
+ /**
84
+ * List unique cookie domains + counts from a browser's DB. No decryption needed.
85
+ */
86
+ export declare function listDomains(browserName: string, profile?: string): {
87
+ domains: DomainEntry[];
88
+ browser: string;
89
+ };
90
+ /**
91
+ * Decrypt and return Playwright-compatible cookies for specified domains.
92
+ */
93
+ export declare function importCookies(browserName: string, domains: string[], profile?: string): Promise<ImportResult>;
94
+ //# sourceMappingURL=cookie-import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie-import.d.ts","sourceRoot":"","sources":["../../../src/browser/cookie-import.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAWH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CACrC;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAGjC,IAAI,EAAE,MAAM;IACZ,MAAM,CAAC,EAAE,OAAO;gBAFvB,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,OAAO,YAAA;CAK1B;AAoBD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAuCD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,EAAE,CAMrD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,SAAY,GAAG;IAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAiBjH;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,SAAY,GAClB,OAAO,CAAC,YAAY,CAAC,CAuCvB"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Google block detection — detect when Google shows captcha/block page.
3
+ * Runtime-agnostic. Used by goto handler and snapshot to warn agents.
4
+ */
5
+ import type { Page } from 'playwright';
6
+ /**
7
+ * Check if a URL is a Google Search page.
8
+ * Narrow match: only www.google.* or google.* with /search path.
9
+ * Does NOT match mail.google.com, docs.google.com, etc.
10
+ */
11
+ export declare function isGoogleSearchUrl(url: string): boolean;
12
+ /**
13
+ * Check if the current page is a Google block/captcha page.
14
+ * Only runs DOM checks on actual Google Search or Sorry pages.
15
+ * Best-effort, never throws.
16
+ */
17
+ export declare function isGoogleBlocked(page: Page): Promise<boolean>;
18
+ /**
19
+ * Format a user-friendly error message for a Google block.
20
+ */
21
+ export declare function formatGoogleBlockError(url: string): string;
22
+ //# sourceMappingURL=detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detection.d.ts","sourceRoot":"","sources":["../../../src/browser/detection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAWtD;AAgBD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAelE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI1D"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Device emulation data and standalone resolution functions.
3
+ *
4
+ * The BrowserManager methods that perform context recreation (emulateDevice,
5
+ * recreateContext, applyUserAgent) remain in manager.ts because they depend on
6
+ * many private BrowserManager fields (context, browser, pages, tabSnapshots,
7
+ * refMap, activeFramePerTab, userRoutes, domainFilter, etc.).
8
+ *
9
+ * TODO: When BrowserManager is further decomposed, move emulateDevice /
10
+ * recreateContext / setViewport here as well.
11
+ */
12
+ export interface DeviceDescriptor {
13
+ viewport: {
14
+ width: number;
15
+ height: number;
16
+ };
17
+ userAgent: string;
18
+ deviceScaleFactor: number;
19
+ isMobile: boolean;
20
+ hasTouch: boolean;
21
+ }
22
+ /** Shorthand aliases for common devices → Playwright device names */
23
+ export declare const DEVICE_ALIASES: Record<string, string>;
24
+ /** Custom device descriptors for devices not yet in Playwright's built-in list */
25
+ export declare const CUSTOM_DEVICES: Record<string, DeviceDescriptor>;
26
+ /** Resolve a device name (alias or Playwright name or custom) to a descriptor, or null */
27
+ export declare function resolveDevice(name: string): DeviceDescriptor | null;
28
+ /** List all available device names */
29
+ export declare function listDevices(): string[];
30
+ //# sourceMappingURL=emulation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emulation.d.ts","sourceRoot":"","sources":["../../../src/browser/emulation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,qEAAqE;AACrE,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAuBjD,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA2C3D,CAAC;AAEF,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAwBnE;AAED,sCAAsC;AACtC,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAMtC"}