@agentrhq/webcmd 0.1.1 → 0.1.2

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 (415) hide show
  1. package/README.md +317 -24
  2. package/dist/src/adapter-shadow.d.ts +11 -0
  3. package/dist/src/adapter-shadow.js +72 -0
  4. package/dist/src/adapter-shadow.test.d.ts +1 -0
  5. package/dist/src/adapter-shadow.test.js +49 -0
  6. package/dist/src/adapter-source.d.ts +11 -0
  7. package/dist/src/adapter-source.js +24 -0
  8. package/dist/src/adapter-source.test.d.ts +1 -0
  9. package/dist/src/adapter-source.test.js +29 -0
  10. package/dist/src/brand.d.ts +9 -0
  11. package/dist/src/brand.js +9 -0
  12. package/dist/src/brand.test.d.ts +1 -0
  13. package/dist/src/brand.test.js +15 -0
  14. package/dist/src/browser/analyze.d.ts +118 -0
  15. package/dist/src/browser/analyze.js +405 -0
  16. package/dist/src/browser/analyze.test.d.ts +1 -0
  17. package/dist/src/browser/analyze.test.js +209 -0
  18. package/dist/src/browser/article-extract.d.ts +57 -0
  19. package/dist/src/browser/article-extract.e2e.test.d.ts +1 -0
  20. package/dist/src/browser/article-extract.e2e.test.js +105 -0
  21. package/dist/src/browser/article-extract.js +169 -0
  22. package/dist/src/browser/article-extract.test.d.ts +1 -0
  23. package/dist/src/browser/article-extract.test.js +94 -0
  24. package/dist/src/browser/ax-snapshot.d.ts +37 -0
  25. package/dist/src/browser/ax-snapshot.js +217 -0
  26. package/dist/src/browser/ax-snapshot.test.d.ts +1 -0
  27. package/dist/src/browser/ax-snapshot.test.js +91 -0
  28. package/dist/src/browser/base-page.d.ts +151 -0
  29. package/dist/src/browser/base-page.js +1060 -0
  30. package/dist/src/browser/base-page.test.d.ts +1 -0
  31. package/dist/src/browser/base-page.test.js +803 -0
  32. package/dist/src/browser/bridge-readiness.d.ts +14 -0
  33. package/dist/src/browser/bridge-readiness.js +24 -0
  34. package/dist/src/browser/bridge-readiness.test.d.ts +1 -0
  35. package/dist/src/browser/bridge-readiness.test.js +58 -0
  36. package/dist/src/browser/bridge.d.ts +26 -0
  37. package/dist/src/browser/bridge.js +58 -0
  38. package/dist/src/browser/cdp-click-fixture.test.d.ts +1 -0
  39. package/dist/src/browser/cdp-click-fixture.test.js +87 -0
  40. package/dist/src/browser/cdp.d.ts +46 -0
  41. package/dist/src/browser/cdp.js +536 -0
  42. package/dist/src/browser/cdp.test.d.ts +1 -0
  43. package/dist/src/browser/cdp.test.js +79 -0
  44. package/dist/src/browser/compound.d.ts +59 -0
  45. package/dist/src/browser/compound.js +112 -0
  46. package/dist/src/browser/compound.test.d.ts +1 -0
  47. package/dist/src/browser/compound.test.js +175 -0
  48. package/dist/src/browser/config.d.ts +2 -0
  49. package/dist/src/browser/config.js +14 -0
  50. package/dist/src/browser/daemon-client.d.ts +32 -0
  51. package/dist/src/browser/daemon-client.js +135 -0
  52. package/dist/src/browser/daemon-client.test.d.ts +1 -0
  53. package/dist/src/browser/daemon-client.test.js +326 -0
  54. package/dist/src/browser/daemon-lifecycle.d.ts +37 -0
  55. package/dist/src/browser/daemon-lifecycle.js +147 -0
  56. package/dist/src/browser/daemon-transport.d.ts +54 -0
  57. package/dist/src/browser/daemon-transport.js +68 -0
  58. package/dist/src/browser/daemon-version.d.ts +4 -0
  59. package/dist/src/browser/daemon-version.js +12 -0
  60. package/dist/src/browser/dom-helpers.d.ts +41 -0
  61. package/dist/src/browser/dom-helpers.js +239 -0
  62. package/dist/src/browser/dom-helpers.test.d.ts +1 -0
  63. package/dist/src/browser/dom-helpers.test.js +106 -0
  64. package/dist/src/browser/dom-snapshot.d.ts +93 -0
  65. package/dist/src/browser/dom-snapshot.js +894 -0
  66. package/dist/src/browser/dom-snapshot.test.d.ts +11 -0
  67. package/dist/src/browser/dom-snapshot.test.js +313 -0
  68. package/dist/src/browser/errors.d.ts +38 -0
  69. package/dist/src/browser/errors.js +79 -0
  70. package/dist/src/browser/errors.test.d.ts +1 -0
  71. package/dist/src/browser/errors.test.js +60 -0
  72. package/dist/src/browser/extract.d.ts +69 -0
  73. package/dist/src/browser/extract.js +132 -0
  74. package/dist/src/browser/extract.test.d.ts +1 -0
  75. package/dist/src/browser/extract.test.js +129 -0
  76. package/dist/src/browser/find.d.ts +84 -0
  77. package/dist/src/browser/find.js +398 -0
  78. package/dist/src/browser/find.test.d.ts +1 -0
  79. package/dist/src/browser/find.test.js +180 -0
  80. package/dist/src/browser/html-tree.d.ts +75 -0
  81. package/dist/src/browser/html-tree.js +112 -0
  82. package/dist/src/browser/html-tree.test.d.ts +1 -0
  83. package/dist/src/browser/html-tree.test.js +181 -0
  84. package/dist/src/browser/index.d.ts +14 -0
  85. package/dist/src/browser/index.js +12 -0
  86. package/dist/src/browser/network-cache.d.ts +49 -0
  87. package/dist/src/browser/network-cache.js +78 -0
  88. package/dist/src/browser/network-cache.test.d.ts +1 -0
  89. package/dist/src/browser/network-cache.test.js +75 -0
  90. package/dist/src/browser/network-interceptor.d.ts +11 -0
  91. package/dist/src/browser/network-interceptor.js +11 -0
  92. package/dist/src/browser/network-key.d.ts +22 -0
  93. package/dist/src/browser/network-key.js +66 -0
  94. package/dist/src/browser/network-key.test.d.ts +1 -0
  95. package/dist/src/browser/network-key.test.js +49 -0
  96. package/dist/src/browser/page.d.ts +83 -0
  97. package/dist/src/browser/page.js +453 -0
  98. package/dist/src/browser/page.test.d.ts +1 -0
  99. package/dist/src/browser/page.test.js +406 -0
  100. package/dist/src/browser/profile.d.ts +14 -0
  101. package/dist/src/browser/profile.js +86 -0
  102. package/dist/src/browser/protocol.d.ts +63 -0
  103. package/dist/src/browser/protocol.js +1 -0
  104. package/dist/src/browser/runtime/local-cloak/actions.d.ts +3 -0
  105. package/dist/src/browser/runtime/local-cloak/actions.js +240 -0
  106. package/dist/src/browser/runtime/local-cloak/downloads.d.ts +3 -0
  107. package/dist/src/browser/runtime/local-cloak/downloads.js +28 -0
  108. package/dist/src/browser/runtime/local-cloak/network.d.ts +28 -0
  109. package/dist/src/browser/runtime/local-cloak/network.js +120 -0
  110. package/dist/src/browser/runtime/local-cloak/network.test.d.ts +1 -0
  111. package/dist/src/browser/runtime/local-cloak/network.test.js +124 -0
  112. package/dist/src/browser/runtime/local-cloak/profiles.d.ts +6 -0
  113. package/dist/src/browser/runtime/local-cloak/profiles.js +17 -0
  114. package/dist/src/browser/runtime/local-cloak/profiles.test.d.ts +1 -0
  115. package/dist/src/browser/runtime/local-cloak/profiles.test.js +19 -0
  116. package/dist/src/browser/runtime/local-cloak/provider.d.ts +15 -0
  117. package/dist/src/browser/runtime/local-cloak/provider.js +27 -0
  118. package/dist/src/browser/runtime/local-cloak/provider.test.d.ts +1 -0
  119. package/dist/src/browser/runtime/local-cloak/provider.test.js +244 -0
  120. package/dist/src/browser/runtime/local-cloak/session-manager.d.ts +77 -0
  121. package/dist/src/browser/runtime/local-cloak/session-manager.js +280 -0
  122. package/dist/src/browser/runtime/local-cloak/session-manager.test.d.ts +1 -0
  123. package/dist/src/browser/runtime/local-cloak/session-manager.test.js +92 -0
  124. package/dist/src/browser/runtime/provider.d.ts +9 -0
  125. package/dist/src/browser/runtime/provider.js +1 -0
  126. package/dist/src/browser/runtime/provider.test.d.ts +2 -0
  127. package/dist/src/browser/runtime/provider.test.js +49 -0
  128. package/dist/src/browser/shape-filter.d.ts +52 -0
  129. package/dist/src/browser/shape-filter.js +101 -0
  130. package/dist/src/browser/shape-filter.test.d.ts +1 -0
  131. package/dist/src/browser/shape-filter.test.js +101 -0
  132. package/dist/src/browser/shape.d.ts +23 -0
  133. package/dist/src/browser/shape.js +95 -0
  134. package/dist/src/browser/shape.test.d.ts +1 -0
  135. package/dist/src/browser/shape.test.js +82 -0
  136. package/dist/src/browser/stealth.d.ts +11 -0
  137. package/dist/src/browser/stealth.js +359 -0
  138. package/dist/src/browser/stealth.test.d.ts +1 -0
  139. package/dist/src/browser/stealth.test.js +134 -0
  140. package/dist/src/browser/tabs.d.ts +13 -0
  141. package/dist/src/browser/tabs.js +70 -0
  142. package/dist/src/browser/target-errors.d.ts +39 -0
  143. package/dist/src/browser/target-errors.js +45 -0
  144. package/dist/src/browser/target-errors.test.d.ts +1 -0
  145. package/dist/src/browser/target-errors.test.js +94 -0
  146. package/dist/src/browser/target-resolver.d.ts +158 -0
  147. package/dist/src/browser/target-resolver.js +570 -0
  148. package/dist/src/browser/target-resolver.test.d.ts +1 -0
  149. package/dist/src/browser/target-resolver.test.js +118 -0
  150. package/dist/src/browser/utils.d.ts +20 -0
  151. package/dist/src/browser/utils.js +64 -0
  152. package/dist/src/browser/utils.test.d.ts +1 -0
  153. package/dist/src/browser/utils.test.js +29 -0
  154. package/dist/src/browser/verify-fixture.d.ts +65 -0
  155. package/dist/src/browser/verify-fixture.js +318 -0
  156. package/dist/src/browser/verify-fixture.test.d.ts +1 -0
  157. package/dist/src/browser/verify-fixture.test.js +219 -0
  158. package/dist/src/browser/visual-refs.d.ts +11 -0
  159. package/dist/src/browser/visual-refs.js +108 -0
  160. package/dist/src/browser.test.d.ts +1 -0
  161. package/dist/src/browser.test.js +297 -0
  162. package/dist/src/build-manifest.d.ts +103 -0
  163. package/dist/src/build-manifest.js +363 -0
  164. package/dist/src/build-manifest.test.d.ts +1 -0
  165. package/dist/src/build-manifest.test.js +341 -0
  166. package/dist/src/capabilityRouting.d.ts +19 -0
  167. package/dist/src/capabilityRouting.js +56 -0
  168. package/dist/src/capabilityRouting.test.d.ts +1 -0
  169. package/dist/src/capabilityRouting.test.js +63 -0
  170. package/dist/src/cli-argv-preprocess.d.ts +63 -0
  171. package/dist/src/cli-argv-preprocess.js +303 -0
  172. package/dist/src/cli-argv-preprocess.test.d.ts +1 -0
  173. package/dist/src/cli-argv-preprocess.test.js +304 -0
  174. package/dist/src/cli.d.ts +79 -0
  175. package/dist/src/cli.js +3350 -0
  176. package/dist/src/cli.test.d.ts +1 -0
  177. package/dist/src/cli.test.js +3041 -0
  178. package/dist/src/commanderAdapter.d.ts +21 -0
  179. package/dist/src/commanderAdapter.js +208 -0
  180. package/dist/src/commanderAdapter.test.d.ts +1 -0
  181. package/dist/src/commanderAdapter.test.js +352 -0
  182. package/dist/src/commands/auth.d.ts +40 -0
  183. package/dist/src/commands/auth.js +434 -0
  184. package/dist/src/commands/auth.test.d.ts +1 -0
  185. package/dist/src/commands/auth.test.js +252 -0
  186. package/dist/src/commands/daemon.d.ts +9 -0
  187. package/dist/src/commands/daemon.js +91 -0
  188. package/dist/src/commands/daemon.test.d.ts +1 -0
  189. package/dist/src/commands/daemon.test.js +293 -0
  190. package/dist/src/completion-fast.d.ts +22 -0
  191. package/dist/src/completion-fast.js +88 -0
  192. package/dist/src/completion-shared.d.ts +13 -0
  193. package/dist/src/completion-shared.js +61 -0
  194. package/dist/src/completion.d.ts +21 -0
  195. package/dist/src/completion.js +68 -0
  196. package/dist/src/completion.test.d.ts +1 -0
  197. package/dist/src/completion.test.js +24 -0
  198. package/dist/src/constants.d.ts +18 -0
  199. package/dist/src/constants.js +41 -0
  200. package/dist/src/convention-audit.d.ts +50 -0
  201. package/dist/src/convention-audit.js +553 -0
  202. package/dist/src/convention-audit.test.d.ts +1 -0
  203. package/dist/src/convention-audit.test.js +255 -0
  204. package/dist/src/daemon/server.d.ts +13 -0
  205. package/dist/src/daemon/server.js +185 -0
  206. package/dist/src/daemon/server.test.d.ts +1 -0
  207. package/dist/src/daemon/server.test.js +132 -0
  208. package/dist/src/daemon-utils.d.ts +18 -0
  209. package/dist/src/daemon-utils.js +37 -0
  210. package/dist/src/daemon.d.ts +1 -0
  211. package/dist/src/daemon.js +27 -0
  212. package/dist/src/daemon.test.d.ts +1 -0
  213. package/dist/src/daemon.test.js +60 -0
  214. package/dist/src/discovery.d.ts +46 -0
  215. package/dist/src/discovery.js +341 -0
  216. package/dist/src/doctor.d.ts +39 -0
  217. package/dist/src/doctor.js +168 -0
  218. package/dist/src/doctor.test.d.ts +1 -0
  219. package/dist/src/doctor.test.js +302 -0
  220. package/dist/src/download/article-download.d.ts +72 -0
  221. package/dist/src/download/article-download.js +305 -0
  222. package/dist/src/download/article-download.test.d.ts +1 -0
  223. package/dist/src/download/article-download.test.js +235 -0
  224. package/dist/src/download/index.d.ts +71 -0
  225. package/dist/src/download/index.js +363 -0
  226. package/dist/src/download/index.test.d.ts +1 -0
  227. package/dist/src/download/index.test.js +174 -0
  228. package/dist/src/download/media-download.d.ts +49 -0
  229. package/dist/src/download/media-download.js +127 -0
  230. package/dist/src/download/media-download.test.d.ts +1 -0
  231. package/dist/src/download/media-download.test.js +112 -0
  232. package/dist/src/download/progress.d.ts +36 -0
  233. package/dist/src/download/progress.js +120 -0
  234. package/dist/src/download/progress.test.d.ts +1 -0
  235. package/dist/src/download/progress.test.js +36 -0
  236. package/dist/src/electron-apps.d.ts +31 -0
  237. package/dist/src/electron-apps.js +91 -0
  238. package/dist/src/electron-apps.test.d.ts +1 -0
  239. package/dist/src/electron-apps.test.js +76 -0
  240. package/dist/src/engine.test.d.ts +1 -0
  241. package/dist/src/engine.test.js +312 -0
  242. package/dist/src/errors.d.ts +114 -0
  243. package/dist/src/errors.js +174 -0
  244. package/dist/src/errors.test.d.ts +1 -0
  245. package/dist/src/errors.test.js +109 -0
  246. package/dist/src/execution.d.ts +24 -0
  247. package/dist/src/execution.js +509 -0
  248. package/dist/src/execution.test.d.ts +1 -0
  249. package/dist/src/execution.test.js +645 -0
  250. package/dist/src/external.d.ts +49 -0
  251. package/dist/src/external.js +211 -0
  252. package/dist/src/external.test.d.ts +1 -0
  253. package/dist/src/external.test.js +110 -0
  254. package/dist/src/help.d.ts +88 -0
  255. package/dist/src/help.js +556 -0
  256. package/dist/src/help.test.d.ts +1 -0
  257. package/dist/src/help.test.js +58 -0
  258. package/dist/src/hooks.d.ts +46 -0
  259. package/dist/src/hooks.js +58 -0
  260. package/dist/src/hooks.test.d.ts +4 -0
  261. package/dist/src/hooks.test.js +92 -0
  262. package/dist/src/interceptor.d.ts +44 -0
  263. package/dist/src/interceptor.js +183 -0
  264. package/dist/src/interceptor.test.d.ts +4 -0
  265. package/dist/src/interceptor.test.js +81 -0
  266. package/dist/src/launcher.d.ts +41 -0
  267. package/dist/src/launcher.js +226 -0
  268. package/dist/src/launcher.test.d.ts +1 -0
  269. package/dist/src/launcher.test.js +153 -0
  270. package/dist/src/logger.d.ts +26 -0
  271. package/dist/src/logger.js +49 -0
  272. package/dist/src/main.d.ts +5 -0
  273. package/dist/src/main.js +177 -0
  274. package/dist/src/manifest-types.d.ts +43 -0
  275. package/dist/src/manifest-types.js +9 -0
  276. package/dist/src/node-network.d.ts +10 -0
  277. package/dist/src/node-network.js +174 -0
  278. package/dist/src/node-network.test.d.ts +1 -0
  279. package/dist/src/node-network.test.js +55 -0
  280. package/dist/src/observation/artifact.d.ts +16 -0
  281. package/dist/src/observation/artifact.js +260 -0
  282. package/dist/src/observation/artifact.test.d.ts +1 -0
  283. package/dist/src/observation/artifact.test.js +121 -0
  284. package/dist/src/observation/events.d.ts +89 -0
  285. package/dist/src/observation/events.js +1 -0
  286. package/dist/src/observation/index.d.ts +7 -0
  287. package/dist/src/observation/index.js +7 -0
  288. package/dist/src/observation/manager.d.ts +9 -0
  289. package/dist/src/observation/manager.js +27 -0
  290. package/dist/src/observation/manager.test.d.ts +1 -0
  291. package/dist/src/observation/manager.test.js +13 -0
  292. package/dist/src/observation/redaction.d.ts +11 -0
  293. package/dist/src/observation/redaction.js +81 -0
  294. package/dist/src/observation/redaction.test.d.ts +1 -0
  295. package/dist/src/observation/redaction.test.js +32 -0
  296. package/dist/src/observation/retention.d.ts +32 -0
  297. package/dist/src/observation/retention.js +160 -0
  298. package/dist/src/observation/retention.test.d.ts +1 -0
  299. package/dist/src/observation/retention.test.js +118 -0
  300. package/dist/src/observation/ring-buffer.d.ts +22 -0
  301. package/dist/src/observation/ring-buffer.js +45 -0
  302. package/dist/src/observation/ring-buffer.test.d.ts +1 -0
  303. package/dist/src/observation/ring-buffer.test.js +22 -0
  304. package/dist/src/observation/session.d.ts +25 -0
  305. package/dist/src/observation/session.js +50 -0
  306. package/dist/src/output.d.ts +14 -0
  307. package/dist/src/output.js +152 -0
  308. package/dist/src/output.test.d.ts +1 -0
  309. package/dist/src/output.test.js +53 -0
  310. package/dist/src/package-exports.test.d.ts +1 -0
  311. package/dist/src/package-exports.test.js +112 -0
  312. package/dist/src/package-paths.d.ts +8 -0
  313. package/dist/src/package-paths.js +41 -0
  314. package/dist/src/pipeline/executor.d.ts +11 -0
  315. package/dist/src/pipeline/executor.js +93 -0
  316. package/dist/src/pipeline/executor.test.d.ts +4 -0
  317. package/dist/src/pipeline/executor.test.js +182 -0
  318. package/dist/src/pipeline/index.d.ts +5 -0
  319. package/dist/src/pipeline/index.js +5 -0
  320. package/dist/src/pipeline/registry.d.ts +28 -0
  321. package/dist/src/pipeline/registry.js +55 -0
  322. package/dist/src/pipeline/steps/browser.d.ts +13 -0
  323. package/dist/src/pipeline/steps/browser.js +86 -0
  324. package/dist/src/pipeline/steps/download.d.ts +18 -0
  325. package/dist/src/pipeline/steps/download.js +252 -0
  326. package/dist/src/pipeline/steps/download.test.d.ts +1 -0
  327. package/dist/src/pipeline/steps/download.test.js +102 -0
  328. package/dist/src/pipeline/steps/fetch.d.ts +5 -0
  329. package/dist/src/pipeline/steps/fetch.js +122 -0
  330. package/dist/src/pipeline/steps/fetch.test.d.ts +1 -0
  331. package/dist/src/pipeline/steps/fetch.test.js +117 -0
  332. package/dist/src/pipeline/steps/intercept.d.ts +5 -0
  333. package/dist/src/pipeline/steps/intercept.js +50 -0
  334. package/dist/src/pipeline/steps/tap.d.ts +12 -0
  335. package/dist/src/pipeline/steps/tap.js +93 -0
  336. package/dist/src/pipeline/steps/transform.d.ts +9 -0
  337. package/dist/src/pipeline/steps/transform.js +70 -0
  338. package/dist/src/pipeline/template.d.ts +17 -0
  339. package/dist/src/pipeline/template.js +344 -0
  340. package/dist/src/pipeline/template.test.d.ts +4 -0
  341. package/dist/src/pipeline/template.test.js +197 -0
  342. package/dist/src/pipeline/transform.test.d.ts +4 -0
  343. package/dist/src/pipeline/transform.test.js +133 -0
  344. package/dist/src/plugin-manifest.d.ts +70 -0
  345. package/dist/src/plugin-manifest.js +160 -0
  346. package/dist/src/plugin-manifest.test.d.ts +4 -0
  347. package/dist/src/plugin-manifest.test.js +179 -0
  348. package/dist/src/plugin-scaffold.d.ts +28 -0
  349. package/dist/src/plugin-scaffold.js +143 -0
  350. package/dist/src/plugin-scaffold.test.d.ts +4 -0
  351. package/dist/src/plugin-scaffold.test.js +83 -0
  352. package/dist/src/plugin.d.ts +146 -0
  353. package/dist/src/plugin.js +1303 -0
  354. package/dist/src/plugin.test.d.ts +4 -0
  355. package/dist/src/plugin.test.js +1363 -0
  356. package/dist/src/registry-api.d.ts +13 -0
  357. package/dist/src/registry-api.js +10 -0
  358. package/dist/src/registry.d.ts +123 -0
  359. package/dist/src/registry.js +125 -0
  360. package/dist/src/registry.test.d.ts +4 -0
  361. package/dist/src/registry.test.js +209 -0
  362. package/dist/src/runtime-copy.test.d.ts +1 -0
  363. package/dist/src/runtime-copy.test.js +29 -0
  364. package/dist/src/runtime-detect.d.ts +31 -0
  365. package/dist/src/runtime-detect.js +47 -0
  366. package/dist/src/runtime-detect.test.d.ts +1 -0
  367. package/dist/src/runtime-detect.test.js +39 -0
  368. package/dist/src/runtime-identity.test.d.ts +1 -0
  369. package/dist/src/runtime-identity.test.js +18 -0
  370. package/dist/src/runtime.d.ts +47 -0
  371. package/dist/src/runtime.js +54 -0
  372. package/dist/src/scripts/framework.d.ts +7 -0
  373. package/dist/src/scripts/framework.js +25 -0
  374. package/dist/src/scripts/interact.d.ts +4 -0
  375. package/dist/src/scripts/interact.js +20 -0
  376. package/dist/src/scripts/store.d.ts +13 -0
  377. package/dist/src/scripts/store.js +48 -0
  378. package/dist/src/serialization.d.ts +42 -0
  379. package/dist/src/serialization.js +103 -0
  380. package/dist/src/serialization.test.d.ts +1 -0
  381. package/dist/src/serialization.test.js +78 -0
  382. package/dist/src/skills.d.ts +14 -0
  383. package/dist/src/skills.js +127 -0
  384. package/dist/src/skills.test.d.ts +1 -0
  385. package/dist/src/skills.test.js +71 -0
  386. package/dist/src/snapshotFormatter.d.ts +11 -0
  387. package/dist/src/snapshotFormatter.js +338 -0
  388. package/dist/src/snapshotFormatter.test.d.ts +7 -0
  389. package/dist/src/snapshotFormatter.test.js +521 -0
  390. package/dist/src/tui.d.ts +28 -0
  391. package/dist/src/tui.js +179 -0
  392. package/dist/src/tui.test.d.ts +1 -0
  393. package/dist/src/tui.test.js +19 -0
  394. package/dist/src/types.d.ts +236 -0
  395. package/dist/src/types.js +7 -0
  396. package/dist/src/update-check.d.ts +66 -0
  397. package/dist/src/update-check.js +206 -0
  398. package/dist/src/update-check.test.d.ts +1 -0
  399. package/dist/src/update-check.test.js +117 -0
  400. package/dist/src/utils.d.ts +57 -0
  401. package/dist/src/utils.js +152 -0
  402. package/dist/src/utils.test.d.ts +1 -0
  403. package/dist/src/utils.test.js +155 -0
  404. package/dist/src/validate.d.ts +21 -0
  405. package/dist/src/validate.js +130 -0
  406. package/dist/src/validate.test.d.ts +9 -0
  407. package/dist/src/validate.test.js +90 -0
  408. package/dist/src/verify.d.ts +26 -0
  409. package/dist/src/verify.js +67 -0
  410. package/dist/src/version.d.ts +4 -0
  411. package/dist/src/version.js +22 -0
  412. package/dist/src/weixin-download.test.d.ts +1 -0
  413. package/dist/src/weixin-download.test.js +45 -0
  414. package/package.json +4 -3
  415. package/scripts/check-package-bin.mjs +95 -0
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Plugin lifecycle hooks: allows plugins to tap into webcmd's execution lifecycle.
3
+ *
4
+ * Hooks use globalThis (like the command registry) to guarantee a single shared
5
+ * instance across all module copies — critical when TS plugins are loaded via
6
+ * npm link / peerDependency symlinks.
7
+ *
8
+ * Available hooks:
9
+ * onStartup — fired once after all commands & plugins are discovered
10
+ * onBeforeExecute — fired before every command execution
11
+ * onAfterExecute — fired after every command execution (receives result)
12
+ */
13
+ import { log } from './logger.js';
14
+ const _hooks = globalThis.__webcmd_hooks__ ??= new Map();
15
+ // ── Registration API (used by plugins) ─────────────────────────────────────
16
+ function addHook(name, fn) {
17
+ const list = _hooks.get(name) ?? [];
18
+ if (list.includes(fn))
19
+ return;
20
+ list.push(fn);
21
+ _hooks.set(name, list);
22
+ }
23
+ /** Register a hook that fires once after all plugins are discovered. */
24
+ export function onStartup(fn) {
25
+ addHook('onStartup', fn);
26
+ }
27
+ /** Register a hook that fires before every command execution. */
28
+ export function onBeforeExecute(fn) {
29
+ addHook('onBeforeExecute', fn);
30
+ }
31
+ /** Register a hook that fires after every command execution with the result. */
32
+ export function onAfterExecute(fn) {
33
+ addHook('onAfterExecute', fn);
34
+ }
35
+ // ── Emit API (used internally by webcmd core) ─────────────────────────────
36
+ /**
37
+ * Trigger all registered handlers for a hook.
38
+ * Each handler is wrapped in try/catch — a failing hook never blocks command execution.
39
+ */
40
+ export async function emitHook(name, ctx, result) {
41
+ const handlers = _hooks.get(name);
42
+ if (!handlers || handlers.length === 0)
43
+ return;
44
+ for (const fn of handlers) {
45
+ try {
46
+ await fn(ctx, result);
47
+ }
48
+ catch (err) {
49
+ log.warn(`Hook ${name} handler failed: ${err instanceof Error ? err.message : String(err)}`);
50
+ }
51
+ }
52
+ }
53
+ /**
54
+ * Remove all registered hooks. Intended for testing only.
55
+ */
56
+ export function clearAllHooks() {
57
+ _hooks.clear();
58
+ }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Tests for the plugin lifecycle hooks system.
3
+ */
4
+ export {};
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Tests for the plugin lifecycle hooks system.
3
+ */
4
+ import { describe, it, expect, beforeEach } from 'vitest';
5
+ import { onStartup, onBeforeExecute, onAfterExecute, emitHook, clearAllHooks, } from './hooks.js';
6
+ beforeEach(() => {
7
+ clearAllHooks();
8
+ });
9
+ describe('hook registration and emission', () => {
10
+ it('onBeforeExecute hook is called with context', async () => {
11
+ const calls = [];
12
+ onBeforeExecute((ctx) => { calls.push({ ...ctx }); });
13
+ await emitHook('onBeforeExecute', { command: 'test/cmd', args: { limit: 5 }, startedAt: 100 });
14
+ expect(calls).toHaveLength(1);
15
+ expect(calls[0].command).toBe('test/cmd');
16
+ expect(calls[0].args).toEqual({ limit: 5 });
17
+ expect(calls[0].startedAt).toBe(100);
18
+ });
19
+ it('onAfterExecute hook receives result', async () => {
20
+ const results = [];
21
+ onAfterExecute((_ctx, result) => { results.push(result); });
22
+ const mockResult = [{ title: 'item1' }, { title: 'item2' }];
23
+ await emitHook('onAfterExecute', { command: 'test/cmd', args: {} }, mockResult);
24
+ expect(results).toHaveLength(1);
25
+ expect(results[0]).toEqual(mockResult);
26
+ });
27
+ it('onStartup hook fires', async () => {
28
+ let fired = false;
29
+ onStartup(() => { fired = true; });
30
+ await emitHook('onStartup', { command: '__startup__', args: {} });
31
+ expect(fired).toBe(true);
32
+ });
33
+ it('multiple hooks on the same event fire in order', async () => {
34
+ const order = [];
35
+ onBeforeExecute(() => { order.push(1); });
36
+ onBeforeExecute(() => { order.push(2); });
37
+ onBeforeExecute(() => { order.push(3); });
38
+ await emitHook('onBeforeExecute', { command: 'test/cmd', args: {} });
39
+ expect(order).toEqual([1, 2, 3]);
40
+ });
41
+ it('async hooks are awaited', async () => {
42
+ const order = [];
43
+ onBeforeExecute(async () => {
44
+ await new Promise((r) => setTimeout(r, 10));
45
+ order.push('async-done');
46
+ });
47
+ onBeforeExecute(() => { order.push('sync'); });
48
+ await emitHook('onBeforeExecute', { command: 'test/cmd', args: {} });
49
+ expect(order).toEqual(['async-done', 'sync']);
50
+ });
51
+ });
52
+ describe('hook error isolation', () => {
53
+ it('failing hook does not prevent other hooks from running', async () => {
54
+ const calls = [];
55
+ onBeforeExecute(() => { calls.push('first'); });
56
+ onBeforeExecute(() => { throw new Error('boom'); });
57
+ onBeforeExecute(() => { calls.push('third'); });
58
+ await emitHook('onBeforeExecute', { command: 'test/cmd', args: {} });
59
+ // First and third should still run despite the second throwing
60
+ expect(calls).toEqual(['first', 'third']);
61
+ });
62
+ it('async hook rejection does not prevent other hooks', async () => {
63
+ const calls = [];
64
+ onAfterExecute(() => { calls.push('before-reject'); });
65
+ onAfterExecute(async () => { throw new Error('async boom'); });
66
+ onAfterExecute(() => { calls.push('after-reject'); });
67
+ await emitHook('onAfterExecute', { command: 'test/cmd', args: {} }, null);
68
+ expect(calls).toEqual(['before-reject', 'after-reject']);
69
+ });
70
+ });
71
+ describe('no-op when no hooks registered', () => {
72
+ it('emitHook with no registered hooks does nothing', async () => {
73
+ // Should not throw
74
+ await emitHook('onBeforeExecute', { command: 'test/cmd', args: {} });
75
+ await emitHook('onAfterExecute', { command: 'test/cmd', args: {} }, []);
76
+ await emitHook('onStartup', { command: '__startup__', args: {} });
77
+ });
78
+ });
79
+ describe('clearAllHooks', () => {
80
+ it('removes all hooks', async () => {
81
+ let called = false;
82
+ onStartup(() => { called = true; });
83
+ clearAllHooks();
84
+ await emitHook('onStartup', { command: '__startup__', args: {} });
85
+ expect(called).toBe(false);
86
+ });
87
+ });
88
+ describe('globalThis singleton', () => {
89
+ it('uses globalThis.__webcmd_hooks__ for shared state', () => {
90
+ expect(globalThis.__webcmd_hooks__).toBeInstanceOf(Map);
91
+ });
92
+ });
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Shared XHR/Fetch interceptor JavaScript generators.
3
+ *
4
+ * Provides a single source of truth for monkey-patching browser
5
+ * fetch() and XMLHttpRequest to capture API responses matching
6
+ * a URL pattern. Used by:
7
+ * - Page.installInterceptor() (browser.ts)
8
+ * - stepIntercept (pipeline/steps/intercept.ts)
9
+ * - stepTap (pipeline/steps/tap.ts)
10
+ */
11
+ /**
12
+ * Generate JavaScript source that installs a fetch/XHR interceptor.
13
+ * Captured responses are pushed to `window.__webcmd_intercepted`.
14
+ *
15
+ * @param patternExpr - JS expression resolving to a URL substring to match (e.g. a JSON.stringify'd string)
16
+ * @param opts.arrayName - Global array name for captured data (default: '__webcmd_intercepted')
17
+ * @param opts.patchGuard - Global boolean name to prevent double-patching (default: '__webcmd_interceptor_patched')
18
+ */
19
+ export declare function generateInterceptorJs(patternExpr: string, opts?: {
20
+ arrayName?: string;
21
+ patchGuard?: string;
22
+ }): string;
23
+ /**
24
+ * Generate JavaScript source to read and clear intercepted data.
25
+ */
26
+ export declare function generateReadInterceptedJs(arrayName?: string): string;
27
+ /**
28
+ * Generate a self-contained tap interceptor for store-action bridge.
29
+ * Unlike the global interceptor, this one:
30
+ * - Installs temporarily, restores originals in finally block
31
+ * - Resolves a promise on first capture (for immediate await)
32
+ * - Returns captured data directly
33
+ *
34
+ * Reuses the shared DISGUISE_FN for consistent toString() disguising.
35
+ */
36
+ export declare function generateTapInterceptorJs(patternExpr: string): {
37
+ setupVar: string;
38
+ capturedVar: string;
39
+ promiseVar: string;
40
+ resolveVar: string;
41
+ fetchPatch: string;
42
+ xhrPatch: string;
43
+ restorePatch: string;
44
+ };
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Shared XHR/Fetch interceptor JavaScript generators.
3
+ *
4
+ * Provides a single source of truth for monkey-patching browser
5
+ * fetch() and XMLHttpRequest to capture API responses matching
6
+ * a URL pattern. Used by:
7
+ * - Page.installInterceptor() (browser.ts)
8
+ * - stepIntercept (pipeline/steps/intercept.ts)
9
+ * - stepTap (pipeline/steps/tap.ts)
10
+ */
11
+ /**
12
+ * Helper: define a non-enumerable property on window.
13
+ * Avoids detection via Object.keys(window) or for..in loops.
14
+ */
15
+ const DEFINE_HIDDEN = `
16
+ function __defHidden(obj, key, val) {
17
+ try {
18
+ Object.defineProperty(obj, key, { value: val, writable: true, enumerable: false, configurable: true });
19
+ } catch { obj[key] = val; }
20
+ }`;
21
+ /**
22
+ * Helper: disguise a patched function so toString() returns native code signature.
23
+ */
24
+ const DISGUISE_FN = `
25
+ function __disguise(fn, name) {
26
+ const nativeStr = 'function ' + name + '() { [native code] }';
27
+ // Override toString on the instance AND patch Function.prototype.toString
28
+ // to handle Function.prototype.toString.call(fn) bypasses.
29
+ const _origToString = Function.prototype.toString;
30
+ const _patchedFns = window.__dFns || (function() {
31
+ const m = new Map();
32
+ Object.defineProperty(window, '__dFns', { value: m, enumerable: false, configurable: true });
33
+ // Patch Function.prototype.toString once to consult the map
34
+ Object.defineProperty(Function.prototype, 'toString', {
35
+ value: function() {
36
+ const override = m.get(this);
37
+ return override !== undefined ? override : _origToString.call(this);
38
+ },
39
+ writable: true, configurable: true
40
+ });
41
+ return m;
42
+ })();
43
+ _patchedFns.set(fn, nativeStr);
44
+ try { Object.defineProperty(fn, 'name', { value: name, configurable: true }); } catch {}
45
+ return fn;
46
+ }`;
47
+ /**
48
+ * Generate JavaScript source that installs a fetch/XHR interceptor.
49
+ * Captured responses are pushed to `window.__webcmd_intercepted`.
50
+ *
51
+ * @param patternExpr - JS expression resolving to a URL substring to match (e.g. a JSON.stringify'd string)
52
+ * @param opts.arrayName - Global array name for captured data (default: '__webcmd_intercepted')
53
+ * @param opts.patchGuard - Global boolean name to prevent double-patching (default: '__webcmd_interceptor_patched')
54
+ */
55
+ export function generateInterceptorJs(patternExpr, opts = {}) {
56
+ const arr = opts.arrayName ?? '__webcmd_intercepted';
57
+ const guard = opts.patchGuard ?? '__webcmd_interceptor_patched';
58
+ // Store the current pattern in a separate global so it can be updated
59
+ // without re-patching fetch/XHR (the patchGuard only prevents double-patching).
60
+ const patternVar = `${guard}_pattern`;
61
+ return `
62
+ () => {
63
+ ${DEFINE_HIDDEN}
64
+ ${DISGUISE_FN}
65
+
66
+ if (!window.${arr}) __defHidden(window, '${arr}', []);
67
+ if (!window.${arr}_errors) __defHidden(window, '${arr}_errors', []);
68
+ __defHidden(window, '${patternVar}', ${patternExpr});
69
+ const __checkMatch = (url) => window.${patternVar} && url.includes(window.${patternVar});
70
+
71
+ if (!window.${guard}) {
72
+ // ── Patch fetch ──
73
+ const __origFetch = window.fetch;
74
+ window.fetch = __disguise(async function(...args) {
75
+ const reqUrl = typeof args[0] === 'string' ? args[0]
76
+ : (args[0] && args[0].url) || '';
77
+ const response = await __origFetch.apply(this, args);
78
+ if (__checkMatch(reqUrl)) {
79
+ try {
80
+ const clone = response.clone();
81
+ const json = await clone.json();
82
+ window.${arr}.push(json);
83
+ } catch(e) { window.${arr}_errors.push({ url: reqUrl, error: String(e) }); }
84
+ }
85
+ return response;
86
+ }, 'fetch');
87
+
88
+ // ── Patch XMLHttpRequest ──
89
+ const __XHR = XMLHttpRequest.prototype;
90
+ const __origOpen = __XHR.open;
91
+ const __origSend = __XHR.send;
92
+ __XHR.open = __disguise(function(method, url) {
93
+ Object.defineProperty(this, '__iurl', { value: String(url), writable: true, enumerable: false, configurable: true });
94
+ return __origOpen.apply(this, arguments);
95
+ }, 'open');
96
+ __XHR.send = __disguise(function() {
97
+ if (__checkMatch(this.__iurl)) {
98
+ this.addEventListener('load', function() {
99
+ try {
100
+ window.${arr}.push(JSON.parse(this.responseText));
101
+ } catch(e) { window.${arr}_errors.push({ url: this.__iurl, error: String(e) }); }
102
+ });
103
+ }
104
+ return __origSend.apply(this, arguments);
105
+ }, 'send');
106
+
107
+ __defHidden(window, '${guard}', true);
108
+ }
109
+ }
110
+ `;
111
+ }
112
+ /**
113
+ * Generate JavaScript source to read and clear intercepted data.
114
+ */
115
+ export function generateReadInterceptedJs(arrayName = '__webcmd_intercepted') {
116
+ return `
117
+ () => {
118
+ const data = window.${arrayName} || [];
119
+ window.${arrayName} = [];
120
+ return data;
121
+ }
122
+ `;
123
+ }
124
+ /**
125
+ * Generate a self-contained tap interceptor for store-action bridge.
126
+ * Unlike the global interceptor, this one:
127
+ * - Installs temporarily, restores originals in finally block
128
+ * - Resolves a promise on first capture (for immediate await)
129
+ * - Returns captured data directly
130
+ *
131
+ * Reuses the shared DISGUISE_FN for consistent toString() disguising.
132
+ */
133
+ export function generateTapInterceptorJs(patternExpr) {
134
+ return {
135
+ setupVar: `
136
+ let captured = null;
137
+ let captureResolve;
138
+ const capturePromise = new Promise(r => { captureResolve = r; });
139
+ const capturePattern = ${patternExpr};
140
+ ${DISGUISE_FN}
141
+ `,
142
+ capturedVar: 'captured',
143
+ promiseVar: 'capturePromise',
144
+ resolveVar: 'captureResolve',
145
+ fetchPatch: `
146
+ const origFetch = window.fetch;
147
+ window.fetch = __disguise(async function(...fetchArgs) {
148
+ const resp = await origFetch.apply(this, fetchArgs);
149
+ try {
150
+ const url = typeof fetchArgs[0] === 'string' ? fetchArgs[0]
151
+ : fetchArgs[0] instanceof Request ? fetchArgs[0].url : String(fetchArgs[0]);
152
+ if (capturePattern && url.includes(capturePattern) && !captured) {
153
+ try { captured = await resp.clone().json(); captureResolve(); } catch {}
154
+ }
155
+ } catch {}
156
+ return resp;
157
+ }, 'fetch');
158
+ `,
159
+ xhrPatch: `
160
+ const origXhrOpen = XMLHttpRequest.prototype.open;
161
+ const origXhrSend = XMLHttpRequest.prototype.send;
162
+ XMLHttpRequest.prototype.open = __disguise(function(method, url) {
163
+ Object.defineProperty(this, '__iurl', { value: String(url), writable: true, enumerable: false, configurable: true });
164
+ return origXhrOpen.apply(this, arguments);
165
+ }, 'open');
166
+ XMLHttpRequest.prototype.send = __disguise(function(body) {
167
+ if (capturePattern && this.__iurl?.includes(capturePattern)) {
168
+ this.addEventListener('load', function() {
169
+ if (!captured) {
170
+ try { captured = JSON.parse(this.responseText); captureResolve(); } catch {}
171
+ }
172
+ });
173
+ }
174
+ return origXhrSend.apply(this, arguments);
175
+ }, 'send');
176
+ `,
177
+ restorePatch: `
178
+ window.fetch = origFetch;
179
+ XMLHttpRequest.prototype.open = origXhrOpen;
180
+ XMLHttpRequest.prototype.send = origXhrSend;
181
+ `,
182
+ };
183
+ }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Tests for interceptor.ts: JavaScript code generators for XHR/Fetch interception.
3
+ */
4
+ export {};
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Tests for interceptor.ts: JavaScript code generators for XHR/Fetch interception.
3
+ */
4
+ import { describe, it, expect } from 'vitest';
5
+ import { generateInterceptorJs, generateReadInterceptedJs, generateTapInterceptorJs } from './interceptor.js';
6
+ describe('generateInterceptorJs', () => {
7
+ it('generates valid JavaScript function source', () => {
8
+ const js = generateInterceptorJs('"api/search"');
9
+ expect(js).toContain('window.fetch');
10
+ expect(js).toContain('XMLHttpRequest');
11
+ expect(js).toContain('"api/search"');
12
+ // Should be a function expression wrapping
13
+ expect(js.trim()).toMatch(/^\(\)\s*=>/);
14
+ });
15
+ it('uses default array name and patch guard', () => {
16
+ const js = generateInterceptorJs('"test"');
17
+ expect(js).toContain('__webcmd_intercepted');
18
+ expect(js).toContain('__webcmd_interceptor_patched');
19
+ });
20
+ it('uses custom array name and patch guard', () => {
21
+ const js = generateInterceptorJs('"test"', {
22
+ arrayName: '__my_data',
23
+ patchGuard: '__my_guard',
24
+ });
25
+ expect(js).toContain('__my_data');
26
+ expect(js).toContain('__my_guard');
27
+ expect(js).not.toContain('__webcmd_intercepted');
28
+ });
29
+ it('includes fetch clone and json parsing', () => {
30
+ const js = generateInterceptorJs('"api"');
31
+ expect(js).toContain('response.clone()');
32
+ expect(js).toContain('clone.json()');
33
+ });
34
+ it('includes XHR open and send patching', () => {
35
+ const js = generateInterceptorJs('"api"');
36
+ expect(js).toContain('XMLHttpRequest.prototype');
37
+ expect(js).toContain('__origOpen');
38
+ expect(js).toContain('__origSend');
39
+ });
40
+ });
41
+ describe('generateReadInterceptedJs', () => {
42
+ it('generates valid JavaScript to read and clear data', () => {
43
+ const js = generateReadInterceptedJs();
44
+ expect(js).toContain('__webcmd_intercepted');
45
+ // Should clear the array after reading
46
+ expect(js).toContain('= []');
47
+ });
48
+ it('uses custom array name', () => {
49
+ const js = generateReadInterceptedJs('__custom_arr');
50
+ expect(js).toContain('__custom_arr');
51
+ expect(js).not.toContain('__webcmd_intercepted');
52
+ });
53
+ });
54
+ describe('generateTapInterceptorJs', () => {
55
+ it('returns all required fields', () => {
56
+ const tap = generateTapInterceptorJs('"api/data"');
57
+ expect(tap.setupVar).toBeDefined();
58
+ expect(tap.capturedVar).toBe('captured');
59
+ expect(tap.promiseVar).toBe('capturePromise');
60
+ expect(tap.resolveVar).toBe('captureResolve');
61
+ expect(tap.fetchPatch).toBeDefined();
62
+ expect(tap.xhrPatch).toBeDefined();
63
+ expect(tap.restorePatch).toBeDefined();
64
+ });
65
+ it('contains the capture pattern in setup', () => {
66
+ const tap = generateTapInterceptorJs('"my-pattern"');
67
+ expect(tap.setupVar).toContain('"my-pattern"');
68
+ });
69
+ it('restores original fetch and XHR in restorePatch', () => {
70
+ const tap = generateTapInterceptorJs('"test"');
71
+ expect(tap.restorePatch).toContain('origFetch');
72
+ expect(tap.restorePatch).toContain('origXhrOpen');
73
+ expect(tap.restorePatch).toContain('origXhrSend');
74
+ });
75
+ it('uses first-match capture (only first response)', () => {
76
+ const tap = generateTapInterceptorJs('"test"');
77
+ // Both fetch and xhr patches should check !captured before storing
78
+ expect(tap.fetchPatch).toContain('!captured');
79
+ expect(tap.xhrPatch).toContain('!captured');
80
+ });
81
+ });
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Electron app launcher — auto-detect, confirm, launch, and connect.
3
+ *
4
+ * Flow:
5
+ * 1. Probe CDP port → already running with debug? connect directly
6
+ * 2. Detect process → running without CDP? prompt to restart
7
+ * 3. Discover app path → not installed? error
8
+ * 4. Launch with --remote-debugging-port
9
+ * 5. Poll /json until ready
10
+ */
11
+ import type { ElectronAppEntry } from './electron-apps.js';
12
+ /**
13
+ * Probe whether a CDP endpoint is listening on the given port.
14
+ * Returns true if http://127.0.0.1:{port}/json responds successfully.
15
+ */
16
+ export declare function probeCDP(port: number, timeoutMs?: number): Promise<boolean>;
17
+ /**
18
+ * Check if a process with the given name is running.
19
+ * Uses pgrep on macOS/Linux.
20
+ */
21
+ export declare function detectProcess(processName: string): boolean;
22
+ /**
23
+ * Kill a process by name. Sends SIGTERM first, then SIGKILL after grace period.
24
+ */
25
+ export declare function killProcess(processName: string): Promise<void>;
26
+ /**
27
+ * Discover the app installation path on macOS.
28
+ * Uses osascript to resolve the app name to a POSIX path.
29
+ * Returns null if the app is not installed.
30
+ */
31
+ export declare function discoverAppPath(displayName: string): string | null;
32
+ export declare function resolveExecutableCandidates(appPath: string, app: ElectronAppEntry): string[];
33
+ export declare function launchDetachedApp(executable: string, args: string[], label: string): Promise<void>;
34
+ export declare function launchElectronApp(appPath: string, app: ElectronAppEntry, args: string[], label: string): Promise<void>;
35
+ export declare function electronLaunchArgs(port: number, extraArgs?: string[]): string[];
36
+ /**
37
+ * Main entry point: resolve an Electron app to a CDP endpoint URL.
38
+ *
39
+ * Returns the endpoint URL: http://127.0.0.1:{port}
40
+ */
41
+ export declare function resolveElectronEndpoint(site: string): Promise<string>;