@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,20 @@
1
+ /**
2
+ * Utility functions for browser operations
3
+ */
4
+ type EvaluateFunction = (...args: never[]) => unknown;
5
+ /**
6
+ * Serialize a function-form page.evaluate call for CDP Runtime.evaluate.
7
+ *
8
+ * Functions execute in the browser page context, so they cannot close over
9
+ * Node-side variables. Pass external values as JSON-serializable args instead.
10
+ */
11
+ export declare function serializeFunctionForEval(fn: EvaluateFunction, args?: readonly unknown[]): string;
12
+ /**
13
+ * Wrap JS code for CDP Runtime.evaluate:
14
+ * - Already an IIFE `(...)()` → send as-is
15
+ * - Arrow/function literal → wrap as IIFE `(code)()`
16
+ * - `new Promise(...)` or raw expression → send as-is (expression)
17
+ */
18
+ export declare function wrapForEval(js: string): string;
19
+ export declare function buildEvaluateExpression(input: string | EvaluateFunction, args?: readonly unknown[]): string;
20
+ export {};
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Utility functions for browser operations
3
+ */
4
+ function describeJsonError(err) {
5
+ return err instanceof Error ? err.message : String(err);
6
+ }
7
+ /**
8
+ * Serialize a function-form page.evaluate call for CDP Runtime.evaluate.
9
+ *
10
+ * Functions execute in the browser page context, so they cannot close over
11
+ * Node-side variables. Pass external values as JSON-serializable args instead.
12
+ */
13
+ export function serializeFunctionForEval(fn, args = []) {
14
+ const source = fn.toString().trim();
15
+ const isFunctionSource = /^(async\s+)?function[\s(]/.test(source)
16
+ || /^(async\s*)?(\([^)]*\)|[A-Za-z_$][\w$]*)\s*=>/.test(source);
17
+ if (!isFunctionSource || source.includes('[native code]')) {
18
+ throw new Error('page.evaluate(fn) requires a serializable arrow/function expression');
19
+ }
20
+ let serializedArgs;
21
+ try {
22
+ serializedArgs = JSON.stringify(args);
23
+ }
24
+ catch (err) {
25
+ throw new Error(`page.evaluate arguments must be JSON-serializable: ${describeJsonError(err)}`);
26
+ }
27
+ if (serializedArgs === undefined) {
28
+ throw new Error('page.evaluate arguments must be JSON-serializable');
29
+ }
30
+ return `(${source})(...${serializedArgs})`;
31
+ }
32
+ /**
33
+ * Wrap JS code for CDP Runtime.evaluate:
34
+ * - Already an IIFE `(...)()` → send as-is
35
+ * - Arrow/function literal → wrap as IIFE `(code)()`
36
+ * - `new Promise(...)` or raw expression → send as-is (expression)
37
+ */
38
+ export function wrapForEval(js) {
39
+ if (typeof js !== 'string')
40
+ return 'undefined';
41
+ const code = js.trim();
42
+ if (!code)
43
+ return 'undefined';
44
+ // Already an IIFE: `(async () => { ... })()` or `(function() {...})()`
45
+ if (/^\([\s\S]*\)\s*\(.*\)\s*$/.test(code))
46
+ return code;
47
+ // Arrow function: `() => ...` or `async () => ...`
48
+ if (/^(async\s+)?(\([^)]*\)|[A-Za-z_]\w*)\s*=>/.test(code))
49
+ return `(${code})()`;
50
+ // Function declaration: `function ...` or `async function ...`
51
+ if (/^(async\s+)?function[\s(]/.test(code))
52
+ return `(${code})()`;
53
+ // Everything else: bare expression, `new Promise(...)`, etc. → evaluate directly
54
+ return code;
55
+ }
56
+ export function buildEvaluateExpression(input, args = []) {
57
+ if (typeof input === 'function') {
58
+ return serializeFunctionForEval(input, args);
59
+ }
60
+ if (args.length > 0) {
61
+ throw new Error('page.evaluate string input does not accept args; use page.evaluate(fn, ...args) instead');
62
+ }
63
+ return wrapForEval(input);
64
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,29 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { buildEvaluateExpression, wrapForEval } from './utils.js';
3
+ describe('browser eval utils', () => {
4
+ it('keeps existing string eval wrapping behavior', () => {
5
+ expect(wrapForEval('21 + 21')).toBe('21 + 21');
6
+ expect(wrapForEval('() => 42')).toBe('(() => 42)()');
7
+ });
8
+ it('serializes function eval arguments as JSON', () => {
9
+ const code = buildEvaluateExpression((selector) => {
10
+ return document.querySelector(selector)?.textContent ?? null;
11
+ }, ['.title']);
12
+ expect(code).toContain('document.querySelector(selector)');
13
+ expect(code).toContain('(...[".title"])');
14
+ });
15
+ it('accepts compact async arrow functions', () => {
16
+ const fn = new Function('return async()=>42')();
17
+ expect(buildEvaluateExpression(fn)).toBe('(async()=>42)(...[])');
18
+ });
19
+ it('rejects string eval with stray args', () => {
20
+ expect(() => buildEvaluateExpression('document.title', ['ignored']))
21
+ .toThrow('use page.evaluate(fn, ...args)');
22
+ });
23
+ it('rejects non-JSON-serializable function args', () => {
24
+ const circular = {};
25
+ circular.self = circular;
26
+ expect(() => buildEvaluateExpression((value) => value, [circular]))
27
+ .toThrow('JSON-serializable');
28
+ });
29
+ });
@@ -0,0 +1,65 @@
1
+ export type FixtureExpect = {
2
+ rowCount?: {
3
+ min?: number;
4
+ max?: number;
5
+ };
6
+ columns?: string[];
7
+ types?: Record<string, string>;
8
+ patterns?: Record<string, string>;
9
+ notEmpty?: string[];
10
+ /**
11
+ * Substrings/regex fragments that MUST NOT appear in the column value.
12
+ *
13
+ * Catches silent content contamination that `notEmpty` alone misses —
14
+ * e.g. a `description` field that accidentally carries "address: ..." /
15
+ * "category: ..." fragments from sibling DOM nodes, or a `title` that
16
+ * bled in a navigation-breadcrumb prefix. Each entry is matched as a
17
+ * plain substring against the stringified column value.
18
+ */
19
+ mustNotContain?: Record<string, string[]>;
20
+ /**
21
+ * Columns whose values must be truthy. Complements `notEmpty` (which
22
+ * only rejects empty-string/null/undefined) by also catching silent
23
+ * `|| 0` / `|| false` fallbacks in numeric/boolean fields. Fires when
24
+ * the value coerces to `false` in JS.
25
+ */
26
+ mustBeTruthy?: string[];
27
+ };
28
+ export type FixtureArgs = Record<string, unknown> | unknown[];
29
+ export type Fixture = {
30
+ args?: FixtureArgs;
31
+ expect?: FixtureExpect;
32
+ };
33
+ export type ValidationFailure = {
34
+ rule: 'rowCount' | 'column' | 'type' | 'pattern' | 'notEmpty' | 'mustNotContain' | 'mustBeTruthy' | 'shapeKeyCount' | 'shapeDepth' | 'shapeNestedId';
35
+ detail: string;
36
+ rowIndex?: number;
37
+ };
38
+ export type Row = Record<string, unknown>;
39
+ export type RowShapeOptions = {
40
+ maxTopLevelKeys?: number;
41
+ maxNestedDepth?: number;
42
+ };
43
+ export declare function fixturePath(site: string, command: string): string;
44
+ export declare function loadFixture(site: string, command: string): Fixture | null;
45
+ export declare function writeFixture(site: string, command: string, fixture: Fixture): string;
46
+ /**
47
+ * Derive a reasonable fixture from sample output. Used by `--write-fixture`
48
+ * to seed a first draft the author can hand-tune.
49
+ *
50
+ * Heuristics:
51
+ * - rowCount.min = 1 if rows non-empty, else 0
52
+ * - columns = keys from the first row
53
+ * - types = typeof of the first row's values, with "number|string" for mixed
54
+ * - no auto patterns / notEmpty — author should add those deliberately
55
+ */
56
+ export declare function deriveFixture(rows: Row[], args?: FixtureArgs): Fixture;
57
+ export declare function validateRows(rows: Row[], fixture: Fixture): ValidationFailure[];
58
+ export declare function validateRowShape(rows: Row[], opts?: RowShapeOptions): ValidationFailure[];
59
+ /**
60
+ * Convert fixture args into argv tokens appended after the command name.
61
+ * - Array form is passed through verbatim (stringified), supporting positional subjects.
62
+ * - Object form is expanded to `--key value` pairs.
63
+ */
64
+ export declare function expandFixtureArgs(args: FixtureArgs | undefined): string[];
65
+ export declare function parseSeedArgs(raw: string | undefined): FixtureArgs | undefined;
@@ -0,0 +1,318 @@
1
+ /**
2
+ * Verify fixture: structural expectations for `webcmd browser verify` output.
3
+ *
4
+ * The adapter-author skill runbook says every published adapter must write a
5
+ * fixture under `~/.webcmd/sites/<site>/verify/<command>.json` so later verify
6
+ * runs can catch shape regressions (missing columns, wrong types, bleeding
7
+ * values) without relying on exact content match — BBS / news / market data is
8
+ * too volatile for value equality.
9
+ *
10
+ * Schema:
11
+ * {
12
+ * // args can be either:
13
+ * // - an object of named flags: { "limit": 3 } → expands to `--limit 3`
14
+ * // - a raw argv array: ["123", "--limit", "3"] → passed verbatim
15
+ * // Use the array form for adapters that take positional subjects (e.g. <tid>, <url>, <query>).
16
+ * "args": { "limit": 3 },
17
+ * "expect": {
18
+ * "rowCount": { "min": 1, "max": 10 }, // inclusive bounds
19
+ * "columns": ["a", "b"], // every row must have these keys
20
+ * "types": { "a": "string", "b": "number|string" },
21
+ * "patterns": { "url": "^https?://" },
22
+ * "notEmpty": ["title", "url"], // trimmed string must be non-empty
23
+ * "mustNotContain": { // catch content-contamination bleed
24
+ * "description": ["address:", "category:"]
25
+ * },
26
+ * "mustBeTruthy": ["count"] // catch silent `|| 0` fallbacks
27
+ * }
28
+ * }
29
+ */
30
+ import * as fs from 'node:fs';
31
+ import * as os from 'node:os';
32
+ import * as path from 'node:path';
33
+ const DEFAULT_MAX_TOP_LEVEL_KEYS = 12;
34
+ const DEFAULT_MAX_NESTED_DEPTH = 1;
35
+ const ID_SHAPED_KEY_PATTERNS = [
36
+ /^id$/i,
37
+ /_id$/i,
38
+ /Id$/,
39
+ /^short_id$/i,
40
+ /^bvid$/i,
41
+ /^aid$/i,
42
+ /^tid$/i,
43
+ /^asin$/i,
44
+ /^sku$/i,
45
+ /^isbn$/i,
46
+ /^doi$/i,
47
+ /^slug$/i,
48
+ /^hn_id$/i,
49
+ /^username$/i,
50
+ /^handle$/i,
51
+ /^uri$/i,
52
+ ];
53
+ export function fixturePath(site, command) {
54
+ return path.join(os.homedir(), '.webcmd', 'sites', site, 'verify', `${command}.json`);
55
+ }
56
+ export function loadFixture(site, command) {
57
+ const p = fixturePath(site, command);
58
+ if (!fs.existsSync(p))
59
+ return null;
60
+ try {
61
+ const raw = fs.readFileSync(p, 'utf-8');
62
+ const parsed = JSON.parse(raw);
63
+ return parsed;
64
+ }
65
+ catch (err) {
66
+ throw new Error(`Failed to parse fixture ${p}: ${err instanceof Error ? err.message : String(err)}`);
67
+ }
68
+ }
69
+ export function writeFixture(site, command, fixture) {
70
+ const p = fixturePath(site, command);
71
+ fs.mkdirSync(path.dirname(p), { recursive: true });
72
+ fs.writeFileSync(p, `${JSON.stringify(fixture, null, 2)}\n`, 'utf-8');
73
+ return p;
74
+ }
75
+ /**
76
+ * Derive a reasonable fixture from sample output. Used by `--write-fixture`
77
+ * to seed a first draft the author can hand-tune.
78
+ *
79
+ * Heuristics:
80
+ * - rowCount.min = 1 if rows non-empty, else 0
81
+ * - columns = keys from the first row
82
+ * - types = typeof of the first row's values, with "number|string" for mixed
83
+ * - no auto patterns / notEmpty — author should add those deliberately
84
+ */
85
+ export function deriveFixture(rows, args) {
86
+ const expect = {};
87
+ if (rows.length === 0) {
88
+ expect.rowCount = { min: 0 };
89
+ return { ...(args ? { args } : {}), expect };
90
+ }
91
+ expect.rowCount = { min: 1 };
92
+ const first = rows[0];
93
+ const columns = Object.keys(first);
94
+ expect.columns = columns;
95
+ const types = {};
96
+ for (const col of columns) {
97
+ const observed = new Set();
98
+ for (const row of rows) {
99
+ const v = row[col];
100
+ observed.add(jsType(v));
101
+ }
102
+ types[col] = [...observed].sort().join('|');
103
+ }
104
+ expect.types = types;
105
+ return { ...(args ? { args } : {}), expect };
106
+ }
107
+ export function validateRows(rows, fixture) {
108
+ const failures = [];
109
+ const expect = fixture.expect;
110
+ if (!expect)
111
+ return failures;
112
+ if (expect.rowCount) {
113
+ const { min, max } = expect.rowCount;
114
+ if (typeof min === 'number' && rows.length < min) {
115
+ failures.push({ rule: 'rowCount', detail: `got ${rows.length} rows, expected at least ${min}` });
116
+ }
117
+ if (typeof max === 'number' && rows.length > max) {
118
+ failures.push({ rule: 'rowCount', detail: `got ${rows.length} rows, expected at most ${max}` });
119
+ }
120
+ }
121
+ const columns = expect.columns ?? [];
122
+ const types = expect.types ?? {};
123
+ const patterns = expect.patterns ?? {};
124
+ const notEmpty = expect.notEmpty ?? [];
125
+ const compiledPatterns = {};
126
+ for (const [col, src] of Object.entries(patterns)) {
127
+ try {
128
+ compiledPatterns[col] = new RegExp(src);
129
+ }
130
+ catch (err) {
131
+ failures.push({ rule: 'pattern', detail: `pattern for "${col}" invalid: ${err instanceof Error ? err.message : String(err)}` });
132
+ }
133
+ }
134
+ rows.forEach((row, i) => {
135
+ for (const col of columns) {
136
+ if (!(col in row)) {
137
+ failures.push({ rule: 'column', detail: `missing column "${col}"`, rowIndex: i });
138
+ }
139
+ }
140
+ for (const [col, declared] of Object.entries(types)) {
141
+ if (!(col in row))
142
+ continue;
143
+ const actual = jsType(row[col]);
144
+ if (!typeMatches(actual, declared)) {
145
+ failures.push({
146
+ rule: 'type',
147
+ detail: `"${col}" is ${actual}, expected ${declared}`,
148
+ rowIndex: i,
149
+ });
150
+ }
151
+ }
152
+ for (const [col, re] of Object.entries(compiledPatterns)) {
153
+ if (!(col in row))
154
+ continue;
155
+ const v = row[col];
156
+ if (v === null || v === undefined)
157
+ continue;
158
+ if (!re.test(String(v))) {
159
+ failures.push({
160
+ rule: 'pattern',
161
+ detail: `"${col}"=${JSON.stringify(String(v).slice(0, 60))} does not match /${re.source}/`,
162
+ rowIndex: i,
163
+ });
164
+ }
165
+ }
166
+ for (const col of notEmpty) {
167
+ const v = row[col];
168
+ if (v === null || v === undefined || String(v).trim() === '') {
169
+ failures.push({ rule: 'notEmpty', detail: `"${col}" is empty`, rowIndex: i });
170
+ }
171
+ }
172
+ for (const [col, needles] of Object.entries(expect.mustNotContain ?? {})) {
173
+ if (!(col in row))
174
+ continue;
175
+ const v = row[col];
176
+ if (v === null || v === undefined)
177
+ continue;
178
+ const haystack = String(v);
179
+ for (const needle of needles) {
180
+ if (haystack.includes(needle)) {
181
+ failures.push({
182
+ rule: 'mustNotContain',
183
+ detail: `"${col}" contains forbidden substring ${JSON.stringify(needle)}`,
184
+ rowIndex: i,
185
+ });
186
+ }
187
+ }
188
+ }
189
+ for (const col of expect.mustBeTruthy ?? []) {
190
+ if (!(col in row))
191
+ continue;
192
+ if (!row[col]) {
193
+ failures.push({
194
+ rule: 'mustBeTruthy',
195
+ detail: `"${col}" is falsy (${JSON.stringify(row[col])}) — likely silent fallback`,
196
+ rowIndex: i,
197
+ });
198
+ }
199
+ }
200
+ });
201
+ return failures;
202
+ }
203
+ export function validateRowShape(rows, opts = {}) {
204
+ const failures = [];
205
+ const maxTopLevelKeys = opts.maxTopLevelKeys ?? DEFAULT_MAX_TOP_LEVEL_KEYS;
206
+ const maxNestedDepth = opts.maxNestedDepth ?? DEFAULT_MAX_NESTED_DEPTH;
207
+ rows.forEach((row, i) => {
208
+ const keys = Object.keys(row);
209
+ if (keys.length > maxTopLevelKeys) {
210
+ failures.push({
211
+ rule: 'shapeKeyCount',
212
+ detail: `row has ${keys.length} top-level keys, expected at most ${maxTopLevelKeys}`,
213
+ rowIndex: i,
214
+ });
215
+ }
216
+ for (const [key, value] of Object.entries(row)) {
217
+ const depth = nestedDepth(value);
218
+ if (depth > maxNestedDepth) {
219
+ failures.push({
220
+ rule: 'shapeDepth',
221
+ detail: `"${key}" nesting depth is ${depth}, expected at most ${maxNestedDepth}`,
222
+ rowIndex: i,
223
+ });
224
+ }
225
+ for (const path of nestedIdPaths(value, key)) {
226
+ failures.push({
227
+ rule: 'shapeNestedId',
228
+ detail: `id-shaped field "${path}" must be a top-level row key`,
229
+ rowIndex: i,
230
+ });
231
+ }
232
+ }
233
+ });
234
+ return failures;
235
+ }
236
+ /**
237
+ * Convert fixture args into argv tokens appended after the command name.
238
+ * - Array form is passed through verbatim (stringified), supporting positional subjects.
239
+ * - Object form is expanded to `--key value` pairs.
240
+ */
241
+ export function expandFixtureArgs(args) {
242
+ if (!args)
243
+ return [];
244
+ if (Array.isArray(args))
245
+ return args.map((v) => String(v));
246
+ const out = [];
247
+ for (const [k, v] of Object.entries(args)) {
248
+ out.push(`--${k}`, String(v));
249
+ }
250
+ return out;
251
+ }
252
+ export function parseSeedArgs(raw) {
253
+ if (raw === undefined)
254
+ return undefined;
255
+ const trimmed = raw.trim();
256
+ if (!trimmed)
257
+ return undefined;
258
+ try {
259
+ const parsed = JSON.parse(trimmed);
260
+ if (Array.isArray(parsed))
261
+ return parsed;
262
+ if (parsed !== null && typeof parsed === 'object')
263
+ return parsed;
264
+ return [parsed];
265
+ }
266
+ catch {
267
+ return [raw];
268
+ }
269
+ }
270
+ function jsType(v) {
271
+ if (v === null)
272
+ return 'null';
273
+ if (Array.isArray(v))
274
+ return 'array';
275
+ return typeof v;
276
+ }
277
+ function nestedDepth(value) {
278
+ if (value === null || value === undefined || typeof value !== 'object')
279
+ return 0;
280
+ if (Array.isArray(value)) {
281
+ if (value.length === 0)
282
+ return 1;
283
+ return 1 + Math.max(...value.map(nestedDepth));
284
+ }
285
+ const values = Object.values(value);
286
+ if (values.length === 0)
287
+ return 1;
288
+ return 1 + Math.max(...values.map(nestedDepth));
289
+ }
290
+ function nestedIdPaths(value, prefix) {
291
+ if (value === null || value === undefined || typeof value !== 'object')
292
+ return [];
293
+ const paths = [];
294
+ if (Array.isArray(value)) {
295
+ value.forEach((item, index) => {
296
+ paths.push(...nestedIdPaths(item, `${prefix}[${index}]`));
297
+ });
298
+ return paths;
299
+ }
300
+ for (const [key, nested] of Object.entries(value)) {
301
+ const childPath = `${prefix}.${key}`;
302
+ if (isIdShapedKey(key))
303
+ paths.push(childPath);
304
+ paths.push(...nestedIdPaths(nested, childPath));
305
+ }
306
+ return paths;
307
+ }
308
+ function isIdShapedKey(key) {
309
+ return ID_SHAPED_KEY_PATTERNS.some((pattern) => pattern.test(key));
310
+ }
311
+ function typeMatches(actual, declared) {
312
+ const allowed = declared.split('|').map((s) => s.trim()).filter(Boolean);
313
+ if (allowed.length === 0)
314
+ return true;
315
+ if (allowed.includes('any'))
316
+ return true;
317
+ return allowed.includes(actual);
318
+ }
@@ -0,0 +1 @@
1
+ export {};