@noxsoft/anima 2.0.2 → 2.0.4

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 (829) hide show
  1. package/README.md +1260 -28
  2. package/dist/accounts-Bth3PpPD.js +260 -0
  3. package/dist/accounts-D8CPKNkN.js +259 -0
  4. package/dist/acp-cli-ByK6lS6c.js +1081 -0
  5. package/dist/acp-cli-CaQCjIw4.js +1084 -0
  6. package/dist/agent-BgIkqd3F.js +725 -0
  7. package/dist/agent-N5BDcge4.js +725 -0
  8. package/dist/agent-events-COH7NDW2.js +182 -0
  9. package/dist/agent-scope-CPphqq-U.js +452 -0
  10. package/dist/agent-scope-DZgptr9J.js +452 -0
  11. package/dist/agent-scope-cj2QCT6R.js +112 -0
  12. package/dist/agents-NEudYMdg.js +774 -0
  13. package/dist/agents.config-Bujs-NIy.js +182 -0
  14. package/dist/agents.config-jp7OLssr.js +182 -0
  15. package/dist/argv-BMZMiW7v.js +73 -0
  16. package/dist/audit-C-UJhfdv.js +2401 -0
  17. package/dist/audit-CeCO7SK5.js +2401 -0
  18. package/dist/auth-BNZsOHGF.js +648 -0
  19. package/dist/auth-DMPZWzEa.js +639 -0
  20. package/dist/auth-choice-5VnaGMD-.js +2681 -0
  21. package/dist/auth-choice-DA2k4vs8.js +2681 -0
  22. package/dist/auth-health-B7FqA26_.js +149 -0
  23. package/dist/auth-health-VO_MPqVX.js +149 -0
  24. package/dist/auth-profiles-BDrNYX_n.js +1564 -0
  25. package/dist/auth-profiles-CxSHydjn.js +2689 -0
  26. package/dist/banner-BtDZPRzi.js +294 -0
  27. package/dist/browser-cli-8yQMpxb8.js +1679 -0
  28. package/dist/browser-cli-Czg3JtDH.js +1676 -0
  29. package/dist/build-info.json +3 -3
  30. package/dist/bundled/boot-md/handler.js +16 -16
  31. package/dist/bundled/bootstrap-extra-files/handler.js +4 -4
  32. package/dist/bundled/command-logger/handler.js +1 -1
  33. package/dist/bundled/session-memory/handler.js +5 -5
  34. package/dist/call-BIzCaKZb.js +282 -0
  35. package/dist/call-BYDpTVCZ.js +282 -0
  36. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  37. package/dist/catalog-CqKiUgu6.js +185 -0
  38. package/dist/catalog-DMfEg-oK.js +185 -0
  39. package/dist/channel-options-BrtCtyrT.js +32 -0
  40. package/dist/channel-options-CO21Gl8p.js +33 -0
  41. package/dist/channel-selection-Bbm1lq3P.js +51 -0
  42. package/dist/channel-selection-CqcX7Ocw.js +51 -0
  43. package/dist/channel-web-DrsT6OAE.js +2162 -0
  44. package/dist/channels-cli-Juyh1S6n.js +1304 -0
  45. package/dist/channels-cli-zNvi1m5c.js +1306 -0
  46. package/dist/channels-status-issues-CqzqshW4.js +18 -0
  47. package/dist/channels-status-issues-DdJdO866.js +18 -0
  48. package/dist/chrome-C4dOMO8z.js +1601 -0
  49. package/dist/chrome-DdcDzAtH.js +1629 -0
  50. package/dist/chrome-U3DRzjJD.js +1601 -0
  51. package/dist/chunk-D2nLsrEW.js +348 -0
  52. package/dist/clack-prompter-BI3RDW5w.js +92 -0
  53. package/dist/clack-prompter-Dwr1m_IZ.js +92 -0
  54. package/dist/cli/daemon-cli.js +1 -1
  55. package/dist/cli-C3cpDaz8.js +99 -0
  56. package/dist/cli-CjWUGdGC.js +101 -0
  57. package/dist/cli-session-BVjY_XrW.js +5463 -0
  58. package/dist/cli-session-gtuYN2Iq.js +5408 -0
  59. package/dist/client-Dswwze5_.js +1692 -0
  60. package/dist/client-LRKFjo4A.js +1692 -0
  61. package/dist/clipboard-BZKS9O1u.js +31 -0
  62. package/dist/clipboard-DES8b1AM.js +31 -0
  63. package/dist/command-format-CP1YTNCl.js +52 -0
  64. package/dist/command-format-CVL4K5cj.js +52 -0
  65. package/dist/command-format-G6N2zghg.js +38 -0
  66. package/dist/command-registry-BBvNvysr.js +248 -0
  67. package/dist/commands-AZ3n8Y2c.js +726 -0
  68. package/dist/commands-BMnD_QRY.js +726 -0
  69. package/dist/commands-registry-cFqZ6Ib4.js +766 -0
  70. package/dist/commands-registry-q13H7ng5.js +766 -0
  71. package/dist/common-CX5458fH.js +287 -0
  72. package/dist/common-DJbnT8ws.js +287 -0
  73. package/dist/completion-cli-BADRBcIl.js +432 -0
  74. package/dist/completion-cli-DMQgiObF.js +431 -0
  75. package/dist/config-CU-Axg8P.js +5704 -0
  76. package/dist/config-DaqbUdkI.js +5705 -0
  77. package/dist/config-cli-BPlbwiuA.js +244 -0
  78. package/dist/config-cli-DXgZJkPU.js +247 -0
  79. package/dist/config-guard-Ba49JNds.js +76 -0
  80. package/dist/config-guard-Cu0qMKZJ.js +93 -0
  81. package/dist/config-kVVm5EYV.js +6523 -0
  82. package/dist/config-sync-CzLnLTXt.js +91 -0
  83. package/dist/config-sync-DuydxPWx.js +91 -0
  84. package/dist/configure-CHgacLyi.js +960 -0
  85. package/dist/configure-DfHXDa1L.js +959 -0
  86. package/dist/context-DzgXOckU.js +60 -0
  87. package/dist/control-service-8_wKHwBa.js +72 -0
  88. package/dist/control-service-BtL1Jto_.js +72 -0
  89. package/dist/cron-cli-BCzSR2c0.js +448 -0
  90. package/dist/cron-cli-CCWNkykU.js +451 -0
  91. package/dist/daemon-cli-Bjkbu9Vy.js +565 -0
  92. package/dist/daemon-cli-CmlHcC1J.js +566 -0
  93. package/dist/daemon-cli.js +16 -16
  94. package/dist/daemon-runtime-C0tz7VAC.js +460 -0
  95. package/dist/daemon-runtime-rUTqCVwJ.js +460 -0
  96. package/dist/deliver-BBggsviM.js +1097 -0
  97. package/dist/deliver-CePITOl8.js +1162 -0
  98. package/dist/deliver-DFnVaetP.js +1097 -0
  99. package/dist/delivery-queue-BJQK3oh5.js +220 -0
  100. package/dist/deps-CeEKhrp7.js +42 -0
  101. package/dist/devices-cli-DQrDMrZH.js +198 -0
  102. package/dist/devices-cli-Oe-A1Dv0.js +195 -0
  103. package/dist/diagnostics-DxMFrBLO.js +35 -0
  104. package/dist/diagnostics-m79ZlMmZ.js +35 -0
  105. package/dist/directory-cli-BL6h8cGF.js +246 -0
  106. package/dist/directory-cli-Cjgmi_sj.js +243 -0
  107. package/dist/dispatcher-DAFbQM-c.js +100 -0
  108. package/dist/dispatcher-DNd40gUn.js +100 -0
  109. package/dist/dist-CqDI82ei.js +929 -0
  110. package/dist/dist-DnHRxR5U.js +929 -0
  111. package/dist/dns-cli-CFtV3BXK.js +200 -0
  112. package/dist/dns-cli-NyIHvQ5S.js +197 -0
  113. package/dist/dock-BdXLb5oY.js +753 -0
  114. package/dist/dock-jYICmNcI.js +753 -0
  115. package/dist/docs-cli-CrOaIK_H.js +161 -0
  116. package/dist/docs-cli-D_cmJDSr.js +159 -0
  117. package/dist/doctor-BpGxKrBl.js +1815 -0
  118. package/dist/doctor-D12wNQPU.js +1813 -0
  119. package/dist/doctor-completion-DeOfofek.js +92 -0
  120. package/dist/doctor-completion-DwjqdEcK.js +92 -0
  121. package/dist/doctor-config-flow-BI3mpkbd.js +1232 -0
  122. package/dist/doctor-config-flow-wMHheFkC.js +1232 -0
  123. package/dist/engine-BCtL-AMw.js +563 -0
  124. package/dist/engine-Bk_UT413.js +563 -0
  125. package/dist/entry.js +5 -5
  126. package/dist/env-v6411I8h.js +32 -0
  127. package/dist/exec-B7sUS164.js +1167 -0
  128. package/dist/exec-approvals-CroGJRUg.js +1221 -0
  129. package/dist/exec-approvals-cli-BTxF_RsH.js +371 -0
  130. package/dist/exec-approvals-cli-n1gyGwH2.js +368 -0
  131. package/dist/exec-mhSykkaa.js +255 -0
  132. package/dist/extensionAPI.js +3 -3
  133. package/dist/frontmatter-BmHq0vRD.js +204 -0
  134. package/dist/gateway-cli-DDBadlrS.js +19971 -0
  135. package/dist/gateway-cli-IZNkOMBe.js +19972 -0
  136. package/dist/gateway-rpc-Dtx8HN-n.js +28 -0
  137. package/dist/gateway-rpc-L2PVSqGj.js +28 -0
  138. package/dist/github-copilot-auth-DKyqDaGU.js +1418 -0
  139. package/dist/github-copilot-auth-DXpOMSd3.js +1418 -0
  140. package/dist/gmail-setup-utils-BKNczIJ9.js +428 -0
  141. package/dist/gmail-setup-utils-co0ppccC.js +428 -0
  142. package/dist/health-Bm8ZTvC3.js +1253 -0
  143. package/dist/health-DUf1gt4E.js +1258 -0
  144. package/dist/health-format-BksT6F68.js +208 -0
  145. package/dist/health-format-uzh1xYLD.js +208 -0
  146. package/dist/heartbeat-visibility-1TJb1Zao.js +98 -0
  147. package/dist/heartbeat-visibility-CwodtdcX.js +98 -0
  148. package/dist/help-format-C6cv_aZp.js +17 -0
  149. package/dist/helpers-N-uSFKOn.js +10 -0
  150. package/dist/hooks-cli-1POsXqOl.js +993 -0
  151. package/dist/hooks-cli-BGjILbze.js +991 -0
  152. package/dist/hooks-status-DE07n5RC.js +356 -0
  153. package/dist/hooks-status-Du-d1jde.js +356 -0
  154. package/dist/image-ops-B_AYV3tp.js +541 -0
  155. package/dist/image-ops-Bp0C6Mvr.js +541 -0
  156. package/dist/index.js +82 -82
  157. package/dist/init-9A0s7bWG.js +122 -0
  158. package/dist/init-DoyCHJDC.js +122 -0
  159. package/dist/installs-D1C9wHAq.js +383 -0
  160. package/dist/installs-Dh4dHayM.js +383 -0
  161. package/dist/ipv4-DCItfaJo.js +1964 -0
  162. package/dist/ipv4-DSOUVx0i.js +1964 -0
  163. package/dist/lanes-BvSnHq2h.js +232 -0
  164. package/dist/lifecycle-core-BY4WIf9g.js +388 -0
  165. package/dist/lifecycle-core-TQKyXO-6.js +387 -0
  166. package/dist/links-CNu_8RZl.js +15 -0
  167. package/dist/links-D2tt2ouh.js +15 -0
  168. package/dist/llm-slug-generator.js +4 -4
  169. package/dist/logging-BIeRw0WR.js +15 -0
  170. package/dist/logging-C7lb3Vjc.js +15 -0
  171. package/dist/login-DXWKewA2.js +59 -0
  172. package/dist/login-Fhh4uWmf.js +61 -0
  173. package/dist/login-pPs3UO38.js +61 -0
  174. package/dist/login-qr-CevLD8cV.js +326 -0
  175. package/dist/login-qr-GF2JMIy-.js +323 -0
  176. package/dist/login-qr-ZYYKD6Yt.js +321 -0
  177. package/dist/logs-cli-CzXbX8HZ.js +242 -0
  178. package/dist/logs-cli-D9ngH9PF.js +245 -0
  179. package/dist/manager-BD5rA3w0.js +3244 -0
  180. package/dist/manager-BDPgBQSH.js +3246 -0
  181. package/dist/manager-DRWMWM--.js +3244 -0
  182. package/dist/manifest-registry-DbvPaBXY.js +748 -0
  183. package/dist/manifest-registry-kHX_MFa1.js +748 -0
  184. package/dist/markdown-tables-CqwihY2m.js +347 -0
  185. package/dist/markdown-tables-DJV7eAJZ.js +348 -0
  186. package/dist/media-lUqN-0O9.js +1342 -0
  187. package/dist/memory-cli-BLXSpgnN.js +868 -0
  188. package/dist/memory-cli-BcGVkkRJ.js +869 -0
  189. package/dist/message-channel-D_jIO87f.js +110 -0
  190. package/dist/migrate-BpVOar4L.js +157 -0
  191. package/dist/migrate-CkgGDkWy.js +157 -0
  192. package/dist/model-selection-Cqt6aJ0G.js +2691 -0
  193. package/dist/models-CExsNQPH.js +2510 -0
  194. package/dist/models-cli-Ba3Jmwev.js +2739 -0
  195. package/dist/models-cli-iDAlsbL2.js +258 -0
  196. package/dist/net-0A_zcaQD.js +218 -0
  197. package/dist/node-cli-ATmwCXIk.js +1319 -0
  198. package/dist/node-cli-DYFR_V25.js +1322 -0
  199. package/dist/node-service-CN4LqR1A.js +67 -0
  200. package/dist/node-service-CWt3MdSC.js +67 -0
  201. package/dist/nodes-cli-BeVmhTz3.js +1197 -0
  202. package/dist/nodes-cli-QeJIfa18.js +1200 -0
  203. package/dist/nodes-screen-DHyWAlla.js +234 -0
  204. package/dist/nodes-screen-qs3jRBPk.js +234 -0
  205. package/dist/note-CSlg2BnB.js +73 -0
  206. package/dist/note-Ctvglhp1.js +73 -0
  207. package/dist/npm-registry-spec-DQd4M22q.js +351 -0
  208. package/dist/npm-registry-spec-PxisIMts.js +351 -0
  209. package/dist/onboard-DeruD10m.js +1166 -0
  210. package/dist/onboard-SAcu5N6N.js +1165 -0
  211. package/dist/onboard-channels-C4iSfFXR.js +672 -0
  212. package/dist/onboard-channels-oVTVgoyg.js +672 -0
  213. package/dist/onboard-helpers-B8roRwLP.js +365 -0
  214. package/dist/onboard-helpers-Dgh26hgP.js +365 -0
  215. package/dist/onboarding-Bi-ac8we.js +911 -0
  216. package/dist/onboarding-C2gjB2u8.js +910 -0
  217. package/dist/orchestrator-DlbAYMQP.js +357 -0
  218. package/dist/orchestrator-DlwVRVDA.js +357 -0
  219. package/dist/outbound-CkKgc6iR.js +2062 -0
  220. package/dist/outbound-Vfm5yDh3.js +214 -0
  221. package/dist/outbound-bs_VK51X.js +214 -0
  222. package/dist/outbound-send-deps-DDjiMfEL.js +55 -0
  223. package/dist/pairing-cli-CJYeuEik.js +118 -0
  224. package/dist/pairing-cli-mqopHI8s.js +121 -0
  225. package/dist/pairing-store-BsXzUDPv.js +388 -0
  226. package/dist/pairing-store-DoNj00-X.js +388 -0
  227. package/dist/path-env-C_xpiG8l.js +89 -0
  228. package/dist/path-env-DSSMHu5A.js +89 -0
  229. package/dist/paths-B1vRVCad.js +126 -0
  230. package/dist/paths-BMuHNFxg.js +238 -0
  231. package/dist/paths-BXQQzXGQ.js +129 -0
  232. package/dist/paths-Buw_geoe.js +54 -0
  233. package/dist/paths-DA9WYabg.js +222 -0
  234. package/dist/paths-DfQGx0_k.js +129 -0
  235. package/dist/pi-auth-json-DOPW3e4X.js +78 -0
  236. package/dist/pi-auth-json-MruLmI_X.js +82 -0
  237. package/dist/pi-auth-json-lae_wwwo.js +80 -0
  238. package/dist/pi-model-discovery-7q0GxMrp.js +3 -0
  239. package/dist/pi-tools.policy-Csmla32P.js +200 -0
  240. package/dist/pi-tools.policy-xYdDLEv9.js +200 -0
  241. package/dist/plugin-auto-enable-CViVVWgg.js +282 -0
  242. package/dist/plugin-auto-enable-CjZ238UI.js +282 -0
  243. package/dist/plugin-registry-B4Aw2hzq.js +32 -0
  244. package/dist/plugin-registry-DW81arxW.js +32 -0
  245. package/dist/plugin-sdk/cli/cli-name.d.ts +1 -1
  246. package/dist/plugin-sdk/config/paths.d.ts +2 -2
  247. package/dist/plugin-sdk/index.js +7 -7
  248. package/dist/plugins-DhcGAPDB.js +38 -0
  249. package/dist/plugins-DtghNRtM.js +168 -0
  250. package/dist/plugins-cli-4vWTmOAb.js +736 -0
  251. package/dist/plugins-cli-CdTMbP0X.js +734 -0
  252. package/dist/polls-D6eCdatA.js +1343 -0
  253. package/dist/ports-BtZx-JKD.js +96 -0
  254. package/dist/ports-C8bKN8s0.js +96 -0
  255. package/dist/ports-DHiKnPRX.js +344 -0
  256. package/dist/ports-vd93M_Pt.js +317 -0
  257. package/dist/program-CX3aUVeb.js +176 -0
  258. package/dist/program-context-BPos0ivo.js +496 -0
  259. package/dist/progress-oiAjiiNi.js +133 -0
  260. package/dist/prompt-style-Cm4wOtKm.js +9 -0
  261. package/dist/pw-ai-4QbK5YFe.js +1865 -0
  262. package/dist/pw-ai-BWz3Cxt7.js +1868 -0
  263. package/dist/pw-ai-C83HBue2.js +1867 -0
  264. package/dist/qmd-manager-BcMeZiGD.js +938 -0
  265. package/dist/qmd-manager-CPypGJ0P.js +935 -0
  266. package/dist/qmd-manager-CRrSkfia.js +937 -0
  267. package/dist/register.agent-DDY8KJhn.js +265 -0
  268. package/dist/register.agent-DKawm-9d.js +1003 -0
  269. package/dist/register.anima-CEWUo29k.js +193 -0
  270. package/dist/register.anima-DBWz2rk_.js +193 -0
  271. package/dist/register.configure-BX67qV8k.js +103 -0
  272. package/dist/register.configure-CWsySuiq.js +101 -0
  273. package/dist/register.maintenance-0k-ZNhDg.js +543 -0
  274. package/dist/register.maintenance-BIwx1fzX.js +543 -0
  275. package/dist/register.message-CXPsoakA.js +657 -0
  276. package/dist/register.message-DA3jvfgI.js +660 -0
  277. package/dist/register.onboard-C4HG7Hqv.js +170 -0
  278. package/dist/register.onboard-GOpdif-j.js +170 -0
  279. package/dist/register.setup-B17vZT7C.js +175 -0
  280. package/dist/register.setup-GJyUDCqh.js +175 -0
  281. package/dist/register.status-health-sessions-D5876dGx.js +313 -0
  282. package/dist/register.status-health-sessions-lOewVIZR.js +142 -0
  283. package/dist/register.subclis-Dwnujj5C.js +255 -0
  284. package/dist/reply-CR5T_oQJ.js +32212 -0
  285. package/dist/reply-prefix-BcrS4Umd.js +100 -0
  286. package/dist/reply-prefix-Btb5o2NH.js +100 -0
  287. package/dist/reply-r089HuRA.js +32212 -0
  288. package/dist/routes-B4czFzIb.js +1820 -0
  289. package/dist/routes-ucJWAk5O.js +1820 -0
  290. package/dist/rpc-BnKxnQ0v.js +70 -0
  291. package/dist/rpc-DgE-xnyx.js +70 -0
  292. package/dist/run-main-B74kv84C.js +371 -0
  293. package/dist/runtime-guard-CKFdts2L.js +60 -0
  294. package/dist/sandbox-CJTS3er6.js +858 -0
  295. package/dist/sandbox-DBSiVHt_.js +859 -0
  296. package/dist/sandbox-cli-CrkjyU5M.js +461 -0
  297. package/dist/sandbox-cli-D1r5y6Sz.js +458 -0
  298. package/dist/security-cli-BZUdnkhn.js +462 -0
  299. package/dist/security-cli-DS09ebvA.js +465 -0
  300. package/dist/server-context-C0xZbYhg.js +824 -0
  301. package/dist/server-context-DVh2z7om.js +824 -0
  302. package/dist/server-node-events-bu9lpkMH.js +233 -0
  303. package/dist/server-node-events-i1Rrww31.js +231 -0
  304. package/dist/service-CJJwLEor.js +642 -0
  305. package/dist/service-DxLxBhaU.js +642 -0
  306. package/dist/service-audit-DB4Y3Ekp.js +488 -0
  307. package/dist/service-audit-M8y4TXVb.js +488 -0
  308. package/dist/session-CGxOLFs2.js +179 -0
  309. package/dist/session-DTTbdKb0.js +181 -0
  310. package/dist/session-cost-usage-FcdJl9c3.js +600 -0
  311. package/dist/session-cost-usage-qdfsGU2a.js +600 -0
  312. package/dist/session-yOhWcsD2.js +181 -0
  313. package/dist/sessions-B-Cu7JZq.js +1296 -0
  314. package/dist/sessions-BgLN4KFr.js +180 -0
  315. package/dist/sessions-CnRjwdVr.js +1296 -0
  316. package/dist/sessions-wRKla1Qh.js +2038 -0
  317. package/dist/shared-DS3UaJSP.js +66 -0
  318. package/dist/shared-DxNHzky3.js +77 -0
  319. package/dist/shared-Qpt4hUDi.js +66 -0
  320. package/dist/shared-kzrojZ1B.js +77 -0
  321. package/dist/skill-scanner-DLJji5Ye.js +263 -0
  322. package/dist/skills-BWFIEp4j.js +807 -0
  323. package/dist/skills-DV4zKdCx.js +808 -0
  324. package/dist/skills-cli-BY53ILm2.js +289 -0
  325. package/dist/skills-cli-CO3gxl8A.js +286 -0
  326. package/dist/skills-status-DX5pcqY3.js +166 -0
  327. package/dist/skills-status-zhcKzGkp.js +166 -0
  328. package/dist/sqlite-B6MojU1I.js +321 -0
  329. package/dist/sqlite-CuprTGR7.js +453 -0
  330. package/dist/sqlite-dzD-jMjs.js +368 -0
  331. package/dist/start-Cu3aLoSf.js +297 -0
  332. package/dist/start-Dz7tMAl8.js +296 -0
  333. package/dist/status-CaSxhxfV.js +2132 -0
  334. package/dist/status-D2C0JCX3.js +2137 -0
  335. package/dist/status-DlFMsQzh.js +27 -0
  336. package/dist/status-G0CITnKR.js +27 -0
  337. package/dist/status.update-CHjhVxJY.js +79 -0
  338. package/dist/status.update-DVFelehi.js +79 -0
  339. package/dist/subagent-registry-3Xb4el-8.js +14 -0
  340. package/dist/subagent-registry-CdSjz14I.js +2760 -0
  341. package/dist/subagent-registry-DNDhbHWi.js +2759 -0
  342. package/dist/subsystem-DfKstnEK.js +860 -0
  343. package/dist/system-cli-B5mt0FWa.js +82 -0
  344. package/dist/system-cli-Dg3UQ3Zz.js +79 -0
  345. package/dist/systemd-B43AvOGx.js +452 -0
  346. package/dist/systemd-RpPE0XGg.js +452 -0
  347. package/dist/systemd-hints-DMJT-Bbc.js +36 -0
  348. package/dist/systemd-hints-vRInKcz9.js +36 -0
  349. package/dist/systemd-linger-Dzyxqsod.js +75 -0
  350. package/dist/systemd-linger-EujbmI5A.js +75 -0
  351. package/dist/table-DhXHfRX2.js +279 -0
  352. package/dist/table-bWCLW-3P.js +279 -0
  353. package/dist/timeout-Ddn-5kAO.js +232 -0
  354. package/dist/tokens-3psI_Qk2.js +14 -0
  355. package/dist/tokens-BaM53PEx.js +14 -0
  356. package/dist/trash-Bmxs1Rnm.js +23 -0
  357. package/dist/trash-C39a6hKA.js +23 -0
  358. package/dist/tui-BHgBWhHE.js +3894 -0
  359. package/dist/tui-cli-B9Sq5-cC.js +50 -0
  360. package/dist/tui-cli-Dw7v4JoJ.js +47 -0
  361. package/dist/tui-mUwDwqvd.js +3894 -0
  362. package/dist/update-DF0GHG0j.js +317 -0
  363. package/dist/update-DoZLVjva.js +317 -0
  364. package/dist/update-check-Bt1dVPVN.js +400 -0
  365. package/dist/update-check-D5qAKes7.js +400 -0
  366. package/dist/update-cli-BNu2Oi7H.js +1105 -0
  367. package/dist/update-cli-D36AmALA.js +1105 -0
  368. package/dist/update-runner-CNQQaTwA.js +894 -0
  369. package/dist/update-runner-CvxZmbu-.js +894 -0
  370. package/dist/usage-BGCwNnjk.js +4516 -0
  371. package/dist/utils-DZ8pnOD5.js +243 -0
  372. package/dist/web-B5QG839O.js +46842 -0
  373. package/dist/web-Cmnvk9v0.js +2203 -0
  374. package/dist/web-Cv2KnTnL.js +63 -0
  375. package/dist/webhooks-cli-B6y89Pj_.js +319 -0
  376. package/dist/webhooks-cli-BDzHON4w.js +316 -0
  377. package/dist/whatsapp-actions-C_5MwVxM.js +45 -0
  378. package/dist/whatsapp-actions-hgYA12To.js +53 -0
  379. package/dist/whatsapp-actions-zTiVOoOV.js +49 -0
  380. package/dist/widearea-dns-BeIdnISJ.js +127 -0
  381. package/dist/widearea-dns-CF1gxpJ-.js +127 -0
  382. package/dist/workspace-DLna1IxR.js +649 -0
  383. package/dist/ws-log-Q4wO1Ztb.js +267 -0
  384. package/dist/ws-log-xF0kxDzp.js +267 -0
  385. package/package.json +1 -2
  386. package/dist/accounts-Cc5E4IDO.js +0 -260
  387. package/dist/accounts-CcVrwKqv.js +0 -259
  388. package/dist/acp-cli-DvphOKuh.js +0 -1081
  389. package/dist/acp-cli-p28pQ65a.js +0 -1084
  390. package/dist/agent-Cj7uDJaZ.js +0 -725
  391. package/dist/agent-Cuj9-2sT.js +0 -725
  392. package/dist/agent-events-BEBQsyE5.js +0 -182
  393. package/dist/agent-scope-BVf4aSwY.js +0 -112
  394. package/dist/agent-scope-OZi7lb8S.js +0 -452
  395. package/dist/agent-scope-V1bi9OYL.js +0 -452
  396. package/dist/agents-BUWqn_Ui.js +0 -774
  397. package/dist/agents.config-Dvo2ULxs.js +0 -182
  398. package/dist/agents.config-d6H0_3oj.js +0 -182
  399. package/dist/argv-DqUHKf0o.js +0 -73
  400. package/dist/audit-C6okOOSh.js +0 -2401
  401. package/dist/audit-VWjIdwC7.js +0 -2401
  402. package/dist/auth-91o2YM96.js +0 -648
  403. package/dist/auth-choice-CAmACV13.js +0 -2681
  404. package/dist/auth-choice-p3SeHPj2.js +0 -2681
  405. package/dist/auth-health-B_jXrWe6.js +0 -149
  406. package/dist/auth-health-DCicUKYR.js +0 -149
  407. package/dist/auth-lZ26wsbN.js +0 -639
  408. package/dist/auth-profiles-CCDD56dU.js +0 -1564
  409. package/dist/auth-profiles-DxI8L7bs.js +0 -2689
  410. package/dist/banner-Cohn04J6.js +0 -294
  411. package/dist/browser-cli-DANzjztE.js +0 -1676
  412. package/dist/browser-cli-WjsVH741.js +0 -1679
  413. package/dist/call-BAHvlu2G.js +0 -282
  414. package/dist/call-Ct7EGP_L.js +0 -282
  415. package/dist/catalog-BAayBt1L.js +0 -185
  416. package/dist/catalog-BNsf97BM.js +0 -185
  417. package/dist/channel-options-Dx9nPlX8.js +0 -33
  418. package/dist/channel-options-ZdvXrTGs.js +0 -32
  419. package/dist/channel-selection-CujyiWGM.js +0 -51
  420. package/dist/channel-selection-DfGpCyh2.js +0 -51
  421. package/dist/channel-web-CC0hkgkR.js +0 -2162
  422. package/dist/channels-cli-D7lNBpIb.js +0 -1304
  423. package/dist/channels-cli-DUPG8WDv.js +0 -1306
  424. package/dist/channels-status-issues-DBc1pU_R.js +0 -18
  425. package/dist/channels-status-issues-DjO9MHIG.js +0 -18
  426. package/dist/chrome-Bi6iZ5sG.js +0 -1601
  427. package/dist/chrome-DNSv7Cpy.js +0 -1629
  428. package/dist/chrome-DScZx4Lk.js +0 -1601
  429. package/dist/chunk-mxPVo000.js +0 -348
  430. package/dist/clack-prompter-B0kl7shw.js +0 -92
  431. package/dist/clack-prompter-B1YxZdRy.js +0 -92
  432. package/dist/cli-CfHUkOD0.js +0 -101
  433. package/dist/cli-ClMrIh6l.js +0 -99
  434. package/dist/cli-session-BkPTd9Pk.js +0 -5463
  435. package/dist/cli-session-Dd8DKb5a.js +0 -5408
  436. package/dist/client-C1avc0vD.js +0 -1692
  437. package/dist/client-CC94YZrT.js +0 -1692
  438. package/dist/clipboard-B2fBy8tG.js +0 -31
  439. package/dist/clipboard-BbGnZskJ.js +0 -31
  440. package/dist/command-format-Clp46jkj.js +0 -38
  441. package/dist/command-format-DELazozB.js +0 -52
  442. package/dist/command-format-SkzzRqR1.js +0 -52
  443. package/dist/command-registry-DZ4hkmA0.js +0 -248
  444. package/dist/commands-DtYZJSPn.js +0 -568
  445. package/dist/commands-Dujk1JmY.js +0 -568
  446. package/dist/commands-registry-Bd0xbvwG.js +0 -766
  447. package/dist/commands-registry-DYfRSVF3.js +0 -766
  448. package/dist/common-D6bu0zHC.js +0 -287
  449. package/dist/common-zW9Y2P1B.js +0 -287
  450. package/dist/completion-cli-tSe7Pmqm.js +0 -431
  451. package/dist/completion-cli-vn4IScs5.js +0 -432
  452. package/dist/config-C8rUDJXY.js +0 -5704
  453. package/dist/config-CLZ_XGVw.js +0 -6523
  454. package/dist/config-SY8M0kM_.js +0 -5705
  455. package/dist/config-cli-1V7D2Wsw.js +0 -247
  456. package/dist/config-cli-CjWEC81L.js +0 -244
  457. package/dist/config-guard-BW2gpKj_.js +0 -93
  458. package/dist/config-guard-BvxuzHpo.js +0 -76
  459. package/dist/config-sync-CoIIbEOe.js +0 -91
  460. package/dist/config-sync-DvAttep0.js +0 -91
  461. package/dist/configure-Bf0oupCE.js +0 -959
  462. package/dist/configure-DRM-7zFf.js +0 -960
  463. package/dist/context-D5iEFzv9.js +0 -60
  464. package/dist/control-service-C8m8F9pr.js +0 -72
  465. package/dist/control-service-DKotCWCg.js +0 -72
  466. package/dist/cron-cli-DB_FLYHD.js +0 -448
  467. package/dist/cron-cli-bxm5lrrO.js +0 -451
  468. package/dist/daemon-cli-1LsOnICv.js +0 -566
  469. package/dist/daemon-cli-CC2NrJ7a.js +0 -565
  470. package/dist/daemon-runtime-BXZhtBL9.js +0 -460
  471. package/dist/daemon-runtime-DW4USC7r.js +0 -460
  472. package/dist/deliver-B4HuPwJA.js +0 -1162
  473. package/dist/deliver-LiY5oL52.js +0 -1097
  474. package/dist/deliver-xrmk7xjh.js +0 -1097
  475. package/dist/delivery-queue-TnQykYsg.js +0 -220
  476. package/dist/deps-CMMOiOsF.js +0 -42
  477. package/dist/devices-cli-Be5he2SA.js +0 -195
  478. package/dist/devices-cli-z6ecoFe9.js +0 -198
  479. package/dist/diagnostics-Dj75aEHN.js +0 -35
  480. package/dist/diagnostics-DlIw6fqD.js +0 -35
  481. package/dist/directory-cli-CEy-0nxj.js +0 -243
  482. package/dist/directory-cli-DpzKcigr.js +0 -246
  483. package/dist/dispatcher-10Shiuz3.js +0 -100
  484. package/dist/dispatcher-3Jae6AiW.js +0 -100
  485. package/dist/dns-cli-Bat1pkc-.js +0 -200
  486. package/dist/dns-cli-NohNyEo0.js +0 -197
  487. package/dist/dock-DbxBBv30.js +0 -753
  488. package/dist/dock-cPBY4qGl.js +0 -753
  489. package/dist/docs-cli-BWp6p-Tq.js +0 -161
  490. package/dist/docs-cli-x22FnZfL.js +0 -159
  491. package/dist/doctor-BrT5m_on.js +0 -1815
  492. package/dist/doctor-Pp2HVnjM.js +0 -1813
  493. package/dist/doctor-completion-DNTimX9o.js +0 -92
  494. package/dist/doctor-completion-ylN9QAJ6.js +0 -92
  495. package/dist/doctor-config-flow-D1w3700T.js +0 -1232
  496. package/dist/doctor-config-flow-Dq50iE1R.js +0 -1232
  497. package/dist/engine-B9avUJL5.js +0 -563
  498. package/dist/engine-BiUQ25D4.js +0 -563
  499. package/dist/env-0lJfCPsw.js +0 -32
  500. package/dist/exec-BenD3A5l.js +0 -1167
  501. package/dist/exec-Bv3pyjeM.js +0 -255
  502. package/dist/exec-approvals-CdLmKX2R.js +0 -1221
  503. package/dist/exec-approvals-cli-DXfV6G8H.js +0 -368
  504. package/dist/exec-approvals-cli-J2cZs10o.js +0 -371
  505. package/dist/frontmatter-YijVi0FQ.js +0 -204
  506. package/dist/gateway-cli-DOAbA0pc.js +0 -19972
  507. package/dist/gateway-cli-QpWtBhQy.js +0 -19971
  508. package/dist/gateway-rpc-DJKBil9s.js +0 -28
  509. package/dist/gateway-rpc-DVterpLP.js +0 -28
  510. package/dist/github-copilot-auth-4IUFp669.js +0 -1418
  511. package/dist/github-copilot-auth-C9E0IROs.js +0 -1418
  512. package/dist/gmail-setup-utils-BPo_LkKI.js +0 -428
  513. package/dist/gmail-setup-utils-D3Yqgor7.js +0 -428
  514. package/dist/health-BeZnqp6m.js +0 -1258
  515. package/dist/health-Cn2OoVWZ.js +0 -1253
  516. package/dist/health-format-CdP99j3Y.js +0 -208
  517. package/dist/health-format-JEChH08S.js +0 -208
  518. package/dist/heartbeat-visibility-BL3WAchI.js +0 -98
  519. package/dist/heartbeat-visibility-CQ9QimI7.js +0 -98
  520. package/dist/help-format-Dl4bsrLI.js +0 -17
  521. package/dist/helpers-ZKNRexvX.js +0 -10
  522. package/dist/hooks-cli-D99hXt7K.js +0 -991
  523. package/dist/hooks-cli-DMB8RiEO.js +0 -993
  524. package/dist/hooks-status-B-e96dZj.js +0 -356
  525. package/dist/hooks-status-C_9sE0ox.js +0 -356
  526. package/dist/image-ops-Dlt3T7th.js +0 -541
  527. package/dist/image-ops-omlvdfah.js +0 -541
  528. package/dist/init-Bm04RagW.js +0 -122
  529. package/dist/init-CaJBf4p1.js +0 -122
  530. package/dist/installs-C2iMRBVz.js +0 -383
  531. package/dist/installs-D-cPGdCw.js +0 -383
  532. package/dist/ipv4-Bf7NS3QU.js +0 -1964
  533. package/dist/ipv4-wWNs8IH_.js +0 -1964
  534. package/dist/lanes-CNxj3tit.js +0 -232
  535. package/dist/lifecycle-core-B_7XRcvF.js +0 -388
  536. package/dist/lifecycle-core-By83PVAK.js +0 -387
  537. package/dist/links-BfjHVTB_.js +0 -15
  538. package/dist/links-DPGe0OHw.js +0 -15
  539. package/dist/logging-DB6BQmhi.js +0 -15
  540. package/dist/logging-mcb66J0p.js +0 -15
  541. package/dist/login-BDCg6D0N.js +0 -61
  542. package/dist/login-BDfnbjnZ.js +0 -59
  543. package/dist/login-BqH1itcg.js +0 -61
  544. package/dist/login-qr-CyOw3R4r.js +0 -321
  545. package/dist/login-qr-D8ECtb72.js +0 -323
  546. package/dist/login-qr-RnR7e4Bw.js +0 -326
  547. package/dist/logs-cli--j89L74J.js +0 -245
  548. package/dist/logs-cli-DpEMg_Gq.js +0 -242
  549. package/dist/manager-B4OyvcxT.js +0 -3244
  550. package/dist/manager-Cqc1CeH7.js +0 -3246
  551. package/dist/manager-DUyQPFvj.js +0 -3244
  552. package/dist/manifest-registry-CW1zCyRF.js +0 -748
  553. package/dist/manifest-registry-D4lM2RdV.js +0 -748
  554. package/dist/markdown-tables-BT1X6jqH.js +0 -347
  555. package/dist/markdown-tables-DHgOK2vI.js +0 -348
  556. package/dist/media-THyainiE.js +0 -1342
  557. package/dist/memory-cli-BKocCWXM.js +0 -868
  558. package/dist/memory-cli-Jmma-xI_.js +0 -869
  559. package/dist/message-channel-dSTVVCyX.js +0 -110
  560. package/dist/migrate-BR6iAIjO.js +0 -157
  561. package/dist/migrate-D0EcMs0f.js +0 -157
  562. package/dist/model-selection-YcSr9CgC.js +0 -2691
  563. package/dist/models-1vUQBVfw.js +0 -2510
  564. package/dist/models-cli-BK3BwUhL.js +0 -2739
  565. package/dist/models-cli-DECrM8oA.js +0 -258
  566. package/dist/net-B5lXhYLV.js +0 -218
  567. package/dist/node-cli-cLHUNpPD.js +0 -1319
  568. package/dist/node-cli-fO7Y132S.js +0 -1322
  569. package/dist/node-service-BFxHJsno.js +0 -67
  570. package/dist/node-service-DUnan4uK.js +0 -67
  571. package/dist/nodes-cli-BCq35E6N.js +0 -1200
  572. package/dist/nodes-cli-vD7MwAKP.js +0 -1197
  573. package/dist/nodes-screen-1YiLkqr5.js +0 -234
  574. package/dist/nodes-screen-DZeD8hE5.js +0 -234
  575. package/dist/note-Bi8Wb8DV.js +0 -73
  576. package/dist/note-uiuPxhyX.js +0 -73
  577. package/dist/npm-registry-spec-B-XIShkB.js +0 -351
  578. package/dist/npm-registry-spec-za3itb5Y.js +0 -351
  579. package/dist/onboard-Ds6w_sWo.js +0 -1165
  580. package/dist/onboard-SAVx3bp4.js +0 -1166
  581. package/dist/onboard-channels-Cg_EkBa4.js +0 -672
  582. package/dist/onboard-channels-D7NbA55V.js +0 -672
  583. package/dist/onboard-helpers-DO_hgZb9.js +0 -365
  584. package/dist/onboard-helpers-_XgJgeqh.js +0 -365
  585. package/dist/onboarding-3hLmDd0r.js +0 -911
  586. package/dist/onboarding-B4LKLsbU.js +0 -910
  587. package/dist/orchestrator-BKzmyBWy.js +0 -357
  588. package/dist/orchestrator-BN3QCz2s.js +0 -357
  589. package/dist/outbound-BgA9hNlP.js +0 -2062
  590. package/dist/outbound-CjdvVhUI.js +0 -214
  591. package/dist/outbound-DOGe6qb2.js +0 -214
  592. package/dist/outbound-send-deps-Du5aBpd7.js +0 -55
  593. package/dist/pairing-cli-2vnyg_Nd.js +0 -118
  594. package/dist/pairing-cli-BH1KQtNV.js +0 -121
  595. package/dist/pairing-store-DJz_9Gv0.js +0 -388
  596. package/dist/pairing-store-DmOzxcuk.js +0 -388
  597. package/dist/path-env-Bu6k0jDQ.js +0 -89
  598. package/dist/path-env-C0zQSjw8.js +0 -89
  599. package/dist/paths-BTc4nk-6.js +0 -126
  600. package/dist/paths-BgUi2Z2G.js +0 -54
  601. package/dist/paths-C6VCWKo3.js +0 -238
  602. package/dist/paths-CCxa0o9c.js +0 -222
  603. package/dist/paths-CxRf2rBG.js +0 -129
  604. package/dist/paths-hcX1Gqg5.js +0 -129
  605. package/dist/pi-auth-json-B68R7q7_.js +0 -82
  606. package/dist/pi-auth-json-CR0jXAgq.js +0 -78
  607. package/dist/pi-auth-json-ZYzi3nxs.js +0 -80
  608. package/dist/pi-model-discovery-Cxs4pvC2.js +0 -3
  609. package/dist/pi-tools.policy-D81U5xy0.js +0 -200
  610. package/dist/pi-tools.policy-DSHkkb5b.js +0 -200
  611. package/dist/plugin-auto-enable-CxF4bpDN.js +0 -282
  612. package/dist/plugin-auto-enable-jNaAeyEh.js +0 -282
  613. package/dist/plugin-registry-C7XWotZG.js +0 -32
  614. package/dist/plugin-registry-DcUCbGax.js +0 -32
  615. package/dist/plugins-B362e77G.js +0 -168
  616. package/dist/plugins-CmSUIUNi.js +0 -38
  617. package/dist/plugins-cli-BsCEnoQ7.js +0 -734
  618. package/dist/plugins-cli-QSIsMUG7.js +0 -736
  619. package/dist/polls-CItfB1H8.js +0 -1343
  620. package/dist/ports-BVLMN1Sr.js +0 -96
  621. package/dist/ports-CqLSlU6Z.js +0 -317
  622. package/dist/ports-D94CwCrv.js +0 -344
  623. package/dist/ports-D_NHthOz.js +0 -96
  624. package/dist/program-DkJHjI0R.js +0 -176
  625. package/dist/program-context-DnyGM2SC.js +0 -496
  626. package/dist/progress-Bek_GyWS.js +0 -133
  627. package/dist/prompt-style-lu0clOOE.js +0 -9
  628. package/dist/pw-ai-BLVMuSLv.js +0 -1867
  629. package/dist/pw-ai-DZJWEF_f.js +0 -1865
  630. package/dist/pw-ai-dzf-ptcn.js +0 -1868
  631. package/dist/qmd-manager-Cur_Ekn0.js +0 -937
  632. package/dist/qmd-manager-DNAUuwjK.js +0 -938
  633. package/dist/qmd-manager-DepEoASu.js +0 -935
  634. package/dist/register.agent-CSWvzOkR.js +0 -265
  635. package/dist/register.agent-UeH2NXmH.js +0 -1003
  636. package/dist/register.anima-DOdee0dh.js +0 -193
  637. package/dist/register.anima-HHDWsz6r.js +0 -193
  638. package/dist/register.configure-CSJFxdz9.js +0 -103
  639. package/dist/register.configure-D84Fvcz4.js +0 -101
  640. package/dist/register.maintenance-B3pvNbZb.js +0 -543
  641. package/dist/register.maintenance-BKVOwkw6.js +0 -543
  642. package/dist/register.message-BAO6CPl2.js +0 -657
  643. package/dist/register.message-OXoOKE_6.js +0 -660
  644. package/dist/register.onboard-BK_ixVmD.js +0 -170
  645. package/dist/register.onboard-cfCaPx6j.js +0 -170
  646. package/dist/register.setup-BGfDnzph.js +0 -175
  647. package/dist/register.setup-Y-Q74M-0.js +0 -175
  648. package/dist/register.status-health-sessions-CT14eitH.js +0 -142
  649. package/dist/register.status-health-sessions-TfZMzAUn.js +0 -313
  650. package/dist/register.subclis-BZwdlNHC.js +0 -255
  651. package/dist/reply-mlsExaZm.js +0 -32212
  652. package/dist/reply-prefix-B0CfR4bM.js +0 -100
  653. package/dist/reply-prefix-w4a39ybC.js +0 -100
  654. package/dist/reply-qalRISe_.js +0 -32212
  655. package/dist/routes-CENsHJyg.js +0 -1820
  656. package/dist/routes-DO0HqW2e.js +0 -1820
  657. package/dist/rpc-C0pjNhBi.js +0 -70
  658. package/dist/rpc-DZ44PIXE.js +0 -70
  659. package/dist/run-main-BMpKw8Mp.js +0 -371
  660. package/dist/runtime-guard-BSUFiAQV.js +0 -60
  661. package/dist/sandbox-BIGfMYEI.js +0 -858
  662. package/dist/sandbox-DxP3IpUP.js +0 -859
  663. package/dist/sandbox-cli-DtLGH8sL.js +0 -461
  664. package/dist/sandbox-cli-_Tg7lfJ_.js +0 -458
  665. package/dist/security-cli-BRwgbedo.js +0 -462
  666. package/dist/security-cli-D3bSuyZt.js +0 -465
  667. package/dist/server-context-49XFFxFg.js +0 -824
  668. package/dist/server-context-LrlgrZzS.js +0 -824
  669. package/dist/server-node-events-Dm52i7NW.js +0 -231
  670. package/dist/server-node-events-QX523UyF.js +0 -233
  671. package/dist/service-BNVpYcQe.js +0 -642
  672. package/dist/service-D56aMXUB.js +0 -642
  673. package/dist/service-audit-D0X_XAB2.js +0 -488
  674. package/dist/service-audit-qmf6XMmP.js +0 -488
  675. package/dist/session-CrQQLLhx.js +0 -179
  676. package/dist/session-LocsOOWJ.js +0 -181
  677. package/dist/session-Vlce2BAT.js +0 -181
  678. package/dist/session-cost-usage-BwiTZuKl.js +0 -600
  679. package/dist/session-cost-usage-DT9YNXTJ.js +0 -600
  680. package/dist/sessions-BfV53TbG.js +0 -1296
  681. package/dist/sessions-BimpX_km.js +0 -180
  682. package/dist/sessions-DcXpzig0.js +0 -1296
  683. package/dist/sessions-Wd18dukK.js +0 -2038
  684. package/dist/shared-Bsr69u_7.js +0 -77
  685. package/dist/shared-Cgly1vPb.js +0 -66
  686. package/dist/shared-JOo05hST.js +0 -66
  687. package/dist/shared-f7dvQsi7.js +0 -77
  688. package/dist/skill-scanner-CkaVLABv.js +0 -263
  689. package/dist/skills-B-G7UHOa.js +0 -808
  690. package/dist/skills-B5LQx4lT.js +0 -807
  691. package/dist/skills-cli-DUGe2ZWW.js +0 -286
  692. package/dist/skills-cli-DtOk0bvK.js +0 -289
  693. package/dist/skills-status-Clq9ZnYu.js +0 -166
  694. package/dist/skills-status-JQluhU-P.js +0 -166
  695. package/dist/sqlite-BukcjdJa.js +0 -321
  696. package/dist/sqlite-CGcOZZ0C.js +0 -368
  697. package/dist/sqlite-Ck6f9KWc.js +0 -453
  698. package/dist/start--xmSFepB.js +0 -372
  699. package/dist/start-BdlZbqrr.js +0 -371
  700. package/dist/status-BgoeFm6g.js +0 -2137
  701. package/dist/status-BjjDrUq7.js +0 -27
  702. package/dist/status-Ct0DgOZ-.js +0 -2132
  703. package/dist/status-RA_uNmK0.js +0 -27
  704. package/dist/status.update-BjOH3GlS.js +0 -79
  705. package/dist/status.update-DLU1qBf0.js +0 -79
  706. package/dist/subagent-registry-9RLdKxES.js +0 -2760
  707. package/dist/subagent-registry-Byuex3zp.js +0 -2759
  708. package/dist/subagent-registry-DOBunBYS.js +0 -14
  709. package/dist/subsystem-Dowf8fSU.js +0 -860
  710. package/dist/system-cli-C5oBpzni.js +0 -79
  711. package/dist/system-cli-DXNKD_Id.js +0 -82
  712. package/dist/systemd-BSrHDyeU.js +0 -452
  713. package/dist/systemd-By5xdSB4.js +0 -452
  714. package/dist/systemd-hints-BtjL_5Rh.js +0 -36
  715. package/dist/systemd-hints-sJmr6cjb.js +0 -36
  716. package/dist/systemd-linger-CTmV2Gci.js +0 -75
  717. package/dist/systemd-linger-CmyqQkeC.js +0 -75
  718. package/dist/table-BL0lJzsm.js +0 -279
  719. package/dist/table-DoiRPsn0.js +0 -279
  720. package/dist/timeout-CswI_K-U.js +0 -232
  721. package/dist/tokens-C-X7wDKj.js +0 -14
  722. package/dist/tokens-DkvqA72p.js +0 -14
  723. package/dist/trash-BJLK1vMn.js +0 -23
  724. package/dist/trash-_x5UZ94k.js +0 -23
  725. package/dist/tui-BHjxDFZC.js +0 -3894
  726. package/dist/tui-CgOocwN8.js +0 -3894
  727. package/dist/tui-cli-5ANH8dE5.js +0 -47
  728. package/dist/tui-cli-BQ4P-JW_.js +0 -50
  729. package/dist/update-LFgxHHPd.js +0 -317
  730. package/dist/update-TxptCqk7.js +0 -317
  731. package/dist/update-check-CWc7YXmc.js +0 -400
  732. package/dist/update-check-IhlWaui6.js +0 -400
  733. package/dist/update-cli-PtXU62w7.js +0 -1105
  734. package/dist/update-cli-Va0EtETG.js +0 -1105
  735. package/dist/update-runner-BLeKFkiB.js +0 -894
  736. package/dist/update-runner-Iuzpc-_y.js +0 -894
  737. package/dist/usage-ApGvBLVg.js +0 -4516
  738. package/dist/utils-Bsw__U-F.js +0 -243
  739. package/dist/web-B6_Ky60G.js +0 -63
  740. package/dist/web-EZLQEWXY.js +0 -46842
  741. package/dist/web-pec8YJUX.js +0 -2203
  742. package/dist/webhooks-cli-BYQKTHTp.js +0 -319
  743. package/dist/webhooks-cli-C2_xtsUQ.js +0 -316
  744. package/dist/whatsapp-actions-C72VCq8f.js +0 -49
  745. package/dist/whatsapp-actions-Ck9Uv0Nw.js +0 -45
  746. package/dist/whatsapp-actions-D0reTj2k.js +0 -53
  747. package/dist/widearea-dns-B6ocX23x.js +0 -127
  748. package/dist/widearea-dns-NsEUNYwz.js +0 -127
  749. package/dist/workspace-Dcfoy5JJ.js +0 -649
  750. package/dist/ws-log-N8R5MvGE.js +0 -267
  751. package/dist/ws-log-gwFxPxj5.js +0 -267
  752. /package/dist/{auto-update-CUeF99gI.js → auto-update-CpF0fycd.js} +0 -0
  753. /package/dist/{auto-update-cgkp9ZTJ.js → auto-update-DNWdO7uF.js} +0 -0
  754. /package/dist/{brew-CVZkr0GU.js → brew-nqf_MiE4.js} +0 -0
  755. /package/dist/{budget-DxYQSekw.js → budget-CPedI-qW.js} +0 -0
  756. /package/dist/{budget-BWBp8Res.js → budget-CRpvqDRX.js} +0 -0
  757. /package/dist/{cli-utils-DtAxdCte.js → cli-utils-C1YHVD4o.js} +0 -0
  758. /package/dist/{command-options-CSbuuqHr.js → command-options-BbponVnw.js} +0 -0
  759. /package/dist/{command-options-Cp1tf96a.js → command-options-s0gnvXnS.js} +0 -0
  760. /package/dist/{constants-O8yBqCBv.js → constants-Dhb6zSIV.js} +0 -0
  761. /package/dist/{dangerous-tools-5ObDWy1N.js → dangerous-tools-DGTtJ_JR.js} +0 -0
  762. /package/dist/{dangerous-tools-Jwr7jqNw.js → dangerous-tools-DxrfTOfT.js} +0 -0
  763. /package/dist/{delivery-queue-B6IHz4Ry.js → delivery-queue-Bxm0nzw7.js} +0 -0
  764. /package/dist/{display-BDOsXu8F.js → display-Jy3UdGzA.js} +0 -0
  765. /package/dist/{errors-CHow2wtt.js → errors-CKaCqKga.js} +0 -0
  766. /package/dist/{exec-BizYYQgP.js → exec-DDmuVVNq.js} +0 -0
  767. /package/dist/{format-Mq6iU0_5.js → format-ByEjgyTF.js} +0 -0
  768. /package/dist/{format-duration-DhWzz_5b.js → format-duration-Aaj5tjJd.js} +0 -0
  769. /package/dist/{format-relative-C6kUHuOj.js → format-relative-79_Y1n2Y.js} +0 -0
  770. /package/dist/{help-format-DUBI91Ti.js → help-format-BMKzarov.js} +0 -0
  771. /package/dist/{helpers-eJFa4K6r.js → helpers-DpEB9Mh0.js} +0 -0
  772. /package/dist/{helpers-DLgbkcEn.js → helpers-FMld9sBT.js} +0 -0
  773. /package/dist/{input-provenance-DJBdpeKk.js → input-provenance-Cy_KnBlP.js} +0 -0
  774. /package/dist/{is-main-Dt9DTcH1.js → is-main-yjaVwMtJ.js} +0 -0
  775. /package/dist/{loader-l2OBdJ8x.js → loader-Br7Vr0zn.js} +0 -0
  776. /package/dist/{loader-BoYxRfcW.js → loader-CkmOrXcC.js} +0 -0
  777. /package/dist/{logging-BdnOSVPD.js → logging-CY-Q5cwf.js} +0 -0
  778. /package/dist/{message-channel-w4F2b2F6.js → message-channel-dua8OOGJ.js} +0 -0
  779. /package/dist/{mime-B1ZoR53M.js → mime-CBg4KybI.js} +0 -0
  780. /package/dist/{model-param-b-DPwyNGn8.js → model-param-b-DW9f0NN8.js} +0 -0
  781. /package/dist/{node-match-8XZnaid6.js → node-match-BV8bTBd4.js} +0 -0
  782. /package/dist/{normalize-GDK8JTNW.js → normalize-_lmlBOW9.js} +0 -0
  783. /package/dist/{openclaw-root-C85WMnVV.js → openclaw-root-JPvmPTf7.js} +0 -0
  784. /package/dist/{outbound-send-deps-ANnAhImn.js → outbound-send-deps-BfUvuWGa.js} +0 -0
  785. /package/dist/{parse-6-2MDhdT.js → parse-CZRwKocn.js} +0 -0
  786. /package/dist/{parse-log-line-Bqh1SSzC.js → parse-log-line-CvrZEK6A.js} +0 -0
  787. /package/dist/{parse-log-line-DUZCjXbl.js → parse-log-line-mLdat0AH.js} +0 -0
  788. /package/dist/{parse-port-BKB9Exlg.js → parse-port-BSOOdo7I.js} +0 -0
  789. /package/dist/{parse-port-DrfvwwiL.js → parse-port-Y0NK62x1.js} +0 -0
  790. /package/dist/{parse-timeout-Di_tcEmi.js → parse-timeout-DVPQ3n9j.js} +0 -0
  791. /package/dist/{paths-DcVEkYX5.js → paths-DHjlJ6cn.js} +0 -0
  792. /package/dist/{pi-model-discovery-DsRqYJLy.js → pi-model-discovery-DzEIEgHL.js} +0 -0
  793. /package/dist/{plugins-CDJw924T.js → plugins-D6PBOdkn.js} +0 -0
  794. /package/dist/{program-context-Bvn8046-.js → program-context-Q1hkT73c.js} +0 -0
  795. /package/dist/{progress-CbZ2D53A.js → progress-C9Ha1NJh.js} +0 -0
  796. /package/dist/{prompt-style-DKy6qQxR.js → prompt-style-DQi8j03a.js} +0 -0
  797. /package/dist/{prompts-BI__va99.js → prompts-BEHxUC3w.js} +0 -0
  798. /package/dist/{prompts-_dDWkCAz.js → prompts-CSOhuiqe.js} +0 -0
  799. /package/dist/{queue-D_u34pbL.js → queue-BJGo7kAB.js} +0 -0
  800. /package/dist/{queue-PG591iID.js → queue-DYgUbdoq.js} +0 -0
  801. /package/dist/{redact-ClVwO7Nn.js → redact-CyKvdFrg.js} +0 -0
  802. /package/dist/{registry-Bs_DJK9E.js → registry-C5MAYD4V.js} +0 -0
  803. /package/dist/{registry-D_zlP1U-.js → registry-CRrXXVs0.js} +0 -0
  804. /package/dist/{requirements-BzZxj2Wu.js → requirements-CGkxTCu4.js} +0 -0
  805. /package/dist/{requirements-DIW1svgA.js → requirements-CIDaOcbO.js} +0 -0
  806. /package/dist/{runtime-guard-DeOXA_86.js → runtime-guard-nL3Lp8T-.js} +0 -0
  807. /package/dist/{secret-equal-Dghy3xsA.js → secret-equal-DJpmLXlG.js} +0 -0
  808. /package/dist/{send-BhAfdGII.js → send-CTcxgDDU.js} +0 -0
  809. /package/dist/{send-ga9udK1_.js → send-DPezUR3-.js} +0 -0
  810. /package/dist/{send-C2t9xpXI.js → send-DZQTaG7-.js} +0 -0
  811. /package/dist/{send-DigO-i9j.js → send-VDff2gra.js} +0 -0
  812. /package/dist/{send-Dz2BDHll.js → send-bgQNV8d1.js} +0 -0
  813. /package/dist/{session-key-BGiG_JcT.js → session-key-CQT-NR6w.js} +0 -0
  814. /package/dist/{shell-argv-CAq1mLa2.js → shell-argv-n9IueeJQ.js} +0 -0
  815. /package/dist/{skill-scanner-Coo4QoCd.js → skill-scanner-o6NgVMD9.js} +0 -0
  816. /package/dist/{status-CMnlcBVc.js → status-C53kTIXF.js} +0 -0
  817. /package/dist/{status-tDZPwewW.js → status-CZDDA_Sy.js} +0 -0
  818. /package/dist/{system-run-command-X9lDJIy0.js → system-run-command-BCjUffN9.js} +0 -0
  819. /package/dist/{system-run-command-DGk7dwQP.js → system-run-command-CqAqKL9K.js} +0 -0
  820. /package/dist/{tailnet-CuiNECdL.js → tailnet-Ciwjv243.js} +0 -0
  821. /package/dist/{templates-CeYJjVzw.js → templates-37RKpACb.js} +0 -0
  822. /package/dist/{templates-I3Z0xplD.js → templates-DPalk30o.js} +0 -0
  823. /package/dist/{thinking-BXEswx1X.js → thinking-2hxwmvTl.js} +0 -0
  824. /package/dist/{transcript-events-C1hdue6u.js → transcript-events-Bp7fGnwv.js} +0 -0
  825. /package/dist/{transcript-tools-DuyYOkUq.js → transcript-tools-D4Lbxlka.js} +0 -0
  826. /package/dist/{usage-format-BAirWUSO.js → usage-format-6Uar63S0.js} +0 -0
  827. /package/dist/{utils-C9sj30YY.js → utils-DT8uXjFS.js} +0 -0
  828. /package/dist/{wsl-CqyuRvtM.js → wsl-CrPvx2kZ.js} +0 -0
  829. /package/dist/{wsl-ymJYvc9Q.js → wsl-UvJ5dHah.js} +0 -0
@@ -1,1867 +0,0 @@
1
- import { et as resolvePreferredAnimaTmpDir } from "./entry.js";
2
- import { t as formatCliCommand } from "./command-format-Clp46jkj.js";
3
- import "./utils-C9sj30YY.js";
4
- import "./exec-BizYYQgP.js";
5
- import { d as normalizeCdpWsUrl, g as withCdpSocket, h as getHeadersWithAuth, m as fetchJson, p as appendCdpPath, t as getChromeWebSocketUrl, u as formatAriaSnapshot } from "./chrome-Bi6iZ5sG.js";
6
- import { n as formatErrorMessage } from "./errors-CHow2wtt.js";
7
- import "./ports-CqLSlU6Z.js";
8
- import path from "node:path";
9
- import fs from "node:fs/promises";
10
- import crypto from "node:crypto";
11
- import { chromium, devices } from "playwright-core";
12
-
13
- //#region src/browser/pw-ai-state.ts
14
- let pwAiLoaded = false;
15
- function markPwAiLoaded() {
16
- pwAiLoaded = true;
17
- }
18
-
19
- //#endregion
20
- //#region src/browser/pw-session.ts
21
- const pageStates = /* @__PURE__ */ new WeakMap();
22
- const contextStates = /* @__PURE__ */ new WeakMap();
23
- const observedContexts = /* @__PURE__ */ new WeakSet();
24
- const observedPages = /* @__PURE__ */ new WeakSet();
25
- const roleRefsByTarget = /* @__PURE__ */ new Map();
26
- const MAX_ROLE_REFS_CACHE = 50;
27
- const MAX_CONSOLE_MESSAGES = 500;
28
- const MAX_PAGE_ERRORS = 200;
29
- const MAX_NETWORK_REQUESTS = 500;
30
- let cached = null;
31
- let connecting = null;
32
- function normalizeCdpUrl(raw) {
33
- return raw.replace(/\/$/, "");
34
- }
35
- function roleRefsKey(cdpUrl, targetId) {
36
- return `${normalizeCdpUrl(cdpUrl)}::${targetId}`;
37
- }
38
- function rememberRoleRefsForTarget(opts) {
39
- const targetId = opts.targetId.trim();
40
- if (!targetId) return;
41
- roleRefsByTarget.set(roleRefsKey(opts.cdpUrl, targetId), {
42
- refs: opts.refs,
43
- ...opts.frameSelector ? { frameSelector: opts.frameSelector } : {},
44
- ...opts.mode ? { mode: opts.mode } : {}
45
- });
46
- while (roleRefsByTarget.size > MAX_ROLE_REFS_CACHE) {
47
- const first = roleRefsByTarget.keys().next();
48
- if (first.done) break;
49
- roleRefsByTarget.delete(first.value);
50
- }
51
- }
52
- function storeRoleRefsForTarget(opts) {
53
- const state = ensurePageState(opts.page);
54
- state.roleRefs = opts.refs;
55
- state.roleRefsFrameSelector = opts.frameSelector;
56
- state.roleRefsMode = opts.mode;
57
- if (!opts.targetId?.trim()) return;
58
- rememberRoleRefsForTarget({
59
- cdpUrl: opts.cdpUrl,
60
- targetId: opts.targetId,
61
- refs: opts.refs,
62
- frameSelector: opts.frameSelector,
63
- mode: opts.mode
64
- });
65
- }
66
- function restoreRoleRefsForTarget(opts) {
67
- const targetId = opts.targetId?.trim() || "";
68
- if (!targetId) return;
69
- const cached = roleRefsByTarget.get(roleRefsKey(opts.cdpUrl, targetId));
70
- if (!cached) return;
71
- const state = ensurePageState(opts.page);
72
- if (state.roleRefs) return;
73
- state.roleRefs = cached.refs;
74
- state.roleRefsFrameSelector = cached.frameSelector;
75
- state.roleRefsMode = cached.mode;
76
- }
77
- function ensurePageState(page) {
78
- const existing = pageStates.get(page);
79
- if (existing) return existing;
80
- const state = {
81
- console: [],
82
- errors: [],
83
- requests: [],
84
- requestIds: /* @__PURE__ */ new WeakMap(),
85
- nextRequestId: 0,
86
- armIdUpload: 0,
87
- armIdDialog: 0,
88
- armIdDownload: 0
89
- };
90
- pageStates.set(page, state);
91
- if (!observedPages.has(page)) {
92
- observedPages.add(page);
93
- page.on("console", (msg) => {
94
- const entry = {
95
- type: msg.type(),
96
- text: msg.text(),
97
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
98
- location: msg.location()
99
- };
100
- state.console.push(entry);
101
- if (state.console.length > MAX_CONSOLE_MESSAGES) state.console.shift();
102
- });
103
- page.on("pageerror", (err) => {
104
- state.errors.push({
105
- message: err?.message ? String(err.message) : String(err),
106
- name: err?.name ? String(err.name) : void 0,
107
- stack: err?.stack ? String(err.stack) : void 0,
108
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
109
- });
110
- if (state.errors.length > MAX_PAGE_ERRORS) state.errors.shift();
111
- });
112
- page.on("request", (req) => {
113
- state.nextRequestId += 1;
114
- const id = `r${state.nextRequestId}`;
115
- state.requestIds.set(req, id);
116
- state.requests.push({
117
- id,
118
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
119
- method: req.method(),
120
- url: req.url(),
121
- resourceType: req.resourceType()
122
- });
123
- if (state.requests.length > MAX_NETWORK_REQUESTS) state.requests.shift();
124
- });
125
- page.on("response", (resp) => {
126
- const req = resp.request();
127
- const id = state.requestIds.get(req);
128
- if (!id) return;
129
- let rec;
130
- for (let i = state.requests.length - 1; i >= 0; i -= 1) {
131
- const candidate = state.requests[i];
132
- if (candidate && candidate.id === id) {
133
- rec = candidate;
134
- break;
135
- }
136
- }
137
- if (!rec) return;
138
- rec.status = resp.status();
139
- rec.ok = resp.ok();
140
- });
141
- page.on("requestfailed", (req) => {
142
- const id = state.requestIds.get(req);
143
- if (!id) return;
144
- let rec;
145
- for (let i = state.requests.length - 1; i >= 0; i -= 1) {
146
- const candidate = state.requests[i];
147
- if (candidate && candidate.id === id) {
148
- rec = candidate;
149
- break;
150
- }
151
- }
152
- if (!rec) return;
153
- rec.failureText = req.failure()?.errorText;
154
- rec.ok = false;
155
- });
156
- page.on("close", () => {
157
- pageStates.delete(page);
158
- observedPages.delete(page);
159
- });
160
- }
161
- return state;
162
- }
163
- function observeContext(context) {
164
- if (observedContexts.has(context)) return;
165
- observedContexts.add(context);
166
- ensureContextState(context);
167
- for (const page of context.pages()) ensurePageState(page);
168
- context.on("page", (page) => ensurePageState(page));
169
- }
170
- function ensureContextState(context) {
171
- const existing = contextStates.get(context);
172
- if (existing) return existing;
173
- const state = { traceActive: false };
174
- contextStates.set(context, state);
175
- return state;
176
- }
177
- function observeBrowser(browser) {
178
- for (const context of browser.contexts()) observeContext(context);
179
- }
180
- async function connectBrowser(cdpUrl) {
181
- const normalized = normalizeCdpUrl(cdpUrl);
182
- if (cached?.cdpUrl === normalized) return cached;
183
- if (connecting) return await connecting;
184
- const connectWithRetry = async () => {
185
- let lastErr;
186
- for (let attempt = 0; attempt < 3; attempt += 1) try {
187
- const timeout = 5e3 + attempt * 2e3;
188
- const endpoint = await getChromeWebSocketUrl(normalized, timeout).catch(() => null) ?? normalized;
189
- const headers = getHeadersWithAuth(endpoint);
190
- const browser = await chromium.connectOverCDP(endpoint, {
191
- timeout,
192
- headers
193
- });
194
- const onDisconnected = () => {
195
- if (cached?.browser === browser) cached = null;
196
- };
197
- const connected = {
198
- browser,
199
- cdpUrl: normalized,
200
- onDisconnected
201
- };
202
- cached = connected;
203
- browser.on("disconnected", onDisconnected);
204
- observeBrowser(browser);
205
- return connected;
206
- } catch (err) {
207
- lastErr = err;
208
- const delay = 250 + attempt * 250;
209
- await new Promise((r) => setTimeout(r, delay));
210
- }
211
- if (lastErr instanceof Error) throw lastErr;
212
- const message = lastErr ? formatErrorMessage(lastErr) : "CDP connect failed";
213
- throw new Error(message);
214
- };
215
- connecting = connectWithRetry().finally(() => {
216
- connecting = null;
217
- });
218
- return await connecting;
219
- }
220
- async function getAllPages(browser) {
221
- return browser.contexts().flatMap((c) => c.pages());
222
- }
223
- async function pageTargetId(page) {
224
- const session = await page.context().newCDPSession(page);
225
- try {
226
- const info = await session.send("Target.getTargetInfo");
227
- return String(info?.targetInfo?.targetId ?? "").trim() || null;
228
- } finally {
229
- await session.detach().catch(() => {});
230
- }
231
- }
232
- async function findPageByTargetId(browser, targetId, cdpUrl) {
233
- const pages = await getAllPages(browser);
234
- let resolvedViaCdp = false;
235
- for (const page of pages) {
236
- let tid = null;
237
- try {
238
- tid = await pageTargetId(page);
239
- resolvedViaCdp = true;
240
- } catch {
241
- tid = null;
242
- }
243
- if (tid && tid === targetId) return page;
244
- }
245
- if (!resolvedViaCdp && pages.length === 1) return pages[0];
246
- if (cdpUrl) try {
247
- const listUrl = `${cdpUrl.replace(/\/+$/, "").replace(/^ws:/, "http:").replace(/\/cdp$/, "")}/json/list`;
248
- const response = await fetch(listUrl, { headers: getHeadersWithAuth(listUrl) });
249
- if (response.ok) {
250
- const targets = await response.json();
251
- const target = targets.find((t) => t.id === targetId);
252
- if (target) {
253
- const urlMatch = pages.filter((p) => p.url() === target.url);
254
- if (urlMatch.length === 1) return urlMatch[0];
255
- if (urlMatch.length > 1) {
256
- const sameUrlTargets = targets.filter((t) => t.url === target.url);
257
- if (sameUrlTargets.length === urlMatch.length) {
258
- const idx = sameUrlTargets.findIndex((t) => t.id === targetId);
259
- if (idx >= 0 && idx < urlMatch.length) return urlMatch[idx];
260
- }
261
- }
262
- }
263
- }
264
- } catch {}
265
- return null;
266
- }
267
- async function getPageForTargetId(opts) {
268
- const { browser } = await connectBrowser(opts.cdpUrl);
269
- const pages = await getAllPages(browser);
270
- if (!pages.length) throw new Error("No pages available in the connected browser.");
271
- const first = pages[0];
272
- if (!opts.targetId) return first;
273
- const found = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);
274
- if (!found) {
275
- if (pages.length === 1) return first;
276
- throw new Error("tab not found");
277
- }
278
- return found;
279
- }
280
- function refLocator(page, ref) {
281
- const normalized = ref.startsWith("@") ? ref.slice(1) : ref.startsWith("ref=") ? ref.slice(4) : ref;
282
- if (/^e\d+$/.test(normalized)) {
283
- const state = pageStates.get(page);
284
- if (state?.roleRefsMode === "aria") return (state.roleRefsFrameSelector ? page.frameLocator(state.roleRefsFrameSelector) : page).locator(`aria-ref=${normalized}`);
285
- const info = state?.roleRefs?.[normalized];
286
- if (!info) throw new Error(`Unknown ref "${normalized}". Run a new snapshot and use a ref from that snapshot.`);
287
- const locAny = state?.roleRefsFrameSelector ? page.frameLocator(state.roleRefsFrameSelector) : page;
288
- const locator = info.name ? locAny.getByRole(info.role, {
289
- name: info.name,
290
- exact: true
291
- }) : locAny.getByRole(info.role);
292
- return info.nth !== void 0 ? locator.nth(info.nth) : locator;
293
- }
294
- return page.locator(`aria-ref=${normalized}`);
295
- }
296
- async function closePlaywrightBrowserConnection() {
297
- const cur = cached;
298
- cached = null;
299
- connecting = null;
300
- if (!cur) return;
301
- if (cur.onDisconnected && typeof cur.browser.off === "function") cur.browser.off("disconnected", cur.onDisconnected);
302
- await cur.browser.close().catch(() => {});
303
- }
304
- function normalizeCdpHttpBaseForJsonEndpoints(cdpUrl) {
305
- try {
306
- const url = new URL(cdpUrl);
307
- if (url.protocol === "ws:") url.protocol = "http:";
308
- else if (url.protocol === "wss:") url.protocol = "https:";
309
- url.pathname = url.pathname.replace(/\/devtools\/browser\/.*$/, "");
310
- url.pathname = url.pathname.replace(/\/cdp$/, "");
311
- return url.toString().replace(/\/$/, "");
312
- } catch {
313
- return cdpUrl.replace(/^ws:/, "http:").replace(/^wss:/, "https:").replace(/\/devtools\/browser\/.*$/, "").replace(/\/cdp$/, "").replace(/\/$/, "");
314
- }
315
- }
316
- function cdpSocketNeedsAttach(wsUrl) {
317
- try {
318
- const pathname = new URL(wsUrl).pathname;
319
- return pathname === "/cdp" || pathname.endsWith("/cdp") || pathname.includes("/devtools/browser/");
320
- } catch {
321
- return false;
322
- }
323
- }
324
- async function tryTerminateExecutionViaCdp(opts) {
325
- const cdpHttpBase = normalizeCdpHttpBaseForJsonEndpoints(opts.cdpUrl);
326
- const pages = await fetchJson(appendCdpPath(cdpHttpBase, "/json/list"), 2e3).catch(() => null);
327
- if (!pages || pages.length === 0) return;
328
- const target = pages.find((p) => String(p.id ?? "").trim() === opts.targetId);
329
- const wsUrlRaw = String(target?.webSocketDebuggerUrl ?? "").trim();
330
- if (!wsUrlRaw) return;
331
- const wsUrl = normalizeCdpWsUrl(wsUrlRaw, cdpHttpBase);
332
- const needsAttach = cdpSocketNeedsAttach(wsUrl);
333
- const runWithTimeout = async (work, ms) => {
334
- let timer;
335
- const timeoutPromise = new Promise((_, reject) => {
336
- timer = setTimeout(() => reject(/* @__PURE__ */ new Error("CDP command timed out")), ms);
337
- });
338
- try {
339
- return await Promise.race([work, timeoutPromise]);
340
- } finally {
341
- if (timer) clearTimeout(timer);
342
- }
343
- };
344
- await withCdpSocket(wsUrl, async (send) => {
345
- let sessionId;
346
- try {
347
- if (needsAttach) {
348
- const attached = await runWithTimeout(send("Target.attachToTarget", {
349
- targetId: opts.targetId,
350
- flatten: true
351
- }), 1500);
352
- if (typeof attached?.sessionId === "string" && attached.sessionId.trim()) sessionId = attached.sessionId;
353
- }
354
- await runWithTimeout(send("Runtime.terminateExecution", void 0, sessionId), 1500);
355
- if (sessionId) send("Target.detachFromTarget", { sessionId }).catch(() => {});
356
- } catch {}
357
- }, { handshakeTimeoutMs: 2e3 }).catch(() => {});
358
- }
359
- /**
360
- * Best-effort cancellation for stuck page operations.
361
- *
362
- * Playwright serializes CDP commands per page; a long-running or stuck operation (notably evaluate)
363
- * can block all subsequent commands. We cannot safely "cancel" an individual command, and we do
364
- * not want to close the actual Chromium tab. Instead, we disconnect Playwright's CDP connection
365
- * so in-flight commands fail fast and the next request reconnects transparently.
366
- *
367
- * IMPORTANT: We CANNOT call Connection.close() because Playwright shares a single Connection
368
- * across all objects (BrowserType, Browser, etc.). Closing it corrupts the entire Playwright
369
- * instance, preventing reconnection.
370
- *
371
- * Instead we:
372
- * 1. Null out `cached` so the next call triggers a fresh connectOverCDP
373
- * 2. Fire-and-forget browser.close() — it may hang but won't block us
374
- * 3. The next connectBrowser() creates a completely new CDP WebSocket connection
375
- *
376
- * The old browser.close() eventually resolves when the in-browser evaluate timeout fires,
377
- * or the old connection gets GC'd. Either way, it doesn't affect the fresh connection.
378
- */
379
- async function forceDisconnectPlaywrightForTarget(opts) {
380
- const normalized = normalizeCdpUrl(opts.cdpUrl);
381
- if (cached?.cdpUrl !== normalized) return;
382
- const cur = cached;
383
- cached = null;
384
- connecting = null;
385
- if (cur) {
386
- if (cur.onDisconnected && typeof cur.browser.off === "function") cur.browser.off("disconnected", cur.onDisconnected);
387
- const targetId = opts.targetId?.trim() || "";
388
- if (targetId) await tryTerminateExecutionViaCdp({
389
- cdpUrl: normalized,
390
- targetId
391
- }).catch(() => {});
392
- cur.browser.close().catch(() => {});
393
- }
394
- }
395
- /**
396
- * List all pages/tabs from the persistent Playwright connection.
397
- * Used for remote profiles where HTTP-based /json/list is ephemeral.
398
- */
399
- async function listPagesViaPlaywright(opts) {
400
- const { browser } = await connectBrowser(opts.cdpUrl);
401
- const pages = await getAllPages(browser);
402
- const results = [];
403
- for (const page of pages) {
404
- const tid = await pageTargetId(page).catch(() => null);
405
- if (tid) results.push({
406
- targetId: tid,
407
- title: await page.title().catch(() => ""),
408
- url: page.url(),
409
- type: "page"
410
- });
411
- }
412
- return results;
413
- }
414
- /**
415
- * Create a new page/tab using the persistent Playwright connection.
416
- * Used for remote profiles where HTTP-based /json/new is ephemeral.
417
- * Returns the new page's targetId and metadata.
418
- */
419
- async function createPageViaPlaywright(opts) {
420
- const { browser } = await connectBrowser(opts.cdpUrl);
421
- const context = browser.contexts()[0] ?? await browser.newContext();
422
- ensureContextState(context);
423
- const page = await context.newPage();
424
- ensurePageState(page);
425
- const targetUrl = opts.url.trim() || "about:blank";
426
- if (targetUrl !== "about:blank") await page.goto(targetUrl, { timeout: 3e4 }).catch(() => {});
427
- const tid = await pageTargetId(page).catch(() => null);
428
- if (!tid) throw new Error("Failed to get targetId for new page");
429
- return {
430
- targetId: tid,
431
- title: await page.title().catch(() => ""),
432
- url: page.url(),
433
- type: "page"
434
- };
435
- }
436
- /**
437
- * Close a page/tab by targetId using the persistent Playwright connection.
438
- * Used for remote profiles where HTTP-based /json/close is ephemeral.
439
- */
440
- async function closePageByTargetIdViaPlaywright(opts) {
441
- const { browser } = await connectBrowser(opts.cdpUrl);
442
- const page = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);
443
- if (!page) throw new Error("tab not found");
444
- await page.close();
445
- }
446
- /**
447
- * Focus a page/tab by targetId using the persistent Playwright connection.
448
- * Used for remote profiles where HTTP-based /json/activate can be ephemeral.
449
- */
450
- async function focusPageByTargetIdViaPlaywright(opts) {
451
- const { browser } = await connectBrowser(opts.cdpUrl);
452
- const page = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);
453
- if (!page) throw new Error("tab not found");
454
- try {
455
- await page.bringToFront();
456
- } catch (err) {
457
- const session = await page.context().newCDPSession(page);
458
- try {
459
- await session.send("Page.bringToFront");
460
- return;
461
- } catch {
462
- throw err;
463
- } finally {
464
- await session.detach().catch(() => {});
465
- }
466
- }
467
- }
468
-
469
- //#endregion
470
- //#region src/browser/pw-tools-core.activity.ts
471
- async function getPageErrorsViaPlaywright(opts) {
472
- const state = ensurePageState(await getPageForTargetId(opts));
473
- const errors = [...state.errors];
474
- if (opts.clear) state.errors = [];
475
- return { errors };
476
- }
477
- async function getNetworkRequestsViaPlaywright(opts) {
478
- const state = ensurePageState(await getPageForTargetId(opts));
479
- const raw = [...state.requests];
480
- const filter = typeof opts.filter === "string" ? opts.filter.trim() : "";
481
- const requests = filter ? raw.filter((r) => r.url.includes(filter)) : raw;
482
- if (opts.clear) {
483
- state.requests = [];
484
- state.requestIds = /* @__PURE__ */ new WeakMap();
485
- }
486
- return { requests };
487
- }
488
- function consolePriority(level) {
489
- switch (level) {
490
- case "error": return 3;
491
- case "warning": return 2;
492
- case "info":
493
- case "log": return 1;
494
- case "debug": return 0;
495
- default: return 1;
496
- }
497
- }
498
- async function getConsoleMessagesViaPlaywright(opts) {
499
- const state = ensurePageState(await getPageForTargetId(opts));
500
- if (!opts.level) return [...state.console];
501
- const min = consolePriority(opts.level);
502
- return state.console.filter((msg) => consolePriority(msg.type) >= min);
503
- }
504
-
505
- //#endregion
506
- //#region src/browser/pw-role-snapshot.ts
507
- const INTERACTIVE_ROLES = new Set([
508
- "button",
509
- "link",
510
- "textbox",
511
- "checkbox",
512
- "radio",
513
- "combobox",
514
- "listbox",
515
- "menuitem",
516
- "menuitemcheckbox",
517
- "menuitemradio",
518
- "option",
519
- "searchbox",
520
- "slider",
521
- "spinbutton",
522
- "switch",
523
- "tab",
524
- "treeitem"
525
- ]);
526
- const CONTENT_ROLES = new Set([
527
- "heading",
528
- "cell",
529
- "gridcell",
530
- "columnheader",
531
- "rowheader",
532
- "listitem",
533
- "article",
534
- "region",
535
- "main",
536
- "navigation"
537
- ]);
538
- const STRUCTURAL_ROLES = new Set([
539
- "generic",
540
- "group",
541
- "list",
542
- "table",
543
- "row",
544
- "rowgroup",
545
- "grid",
546
- "treegrid",
547
- "menu",
548
- "menubar",
549
- "toolbar",
550
- "tablist",
551
- "tree",
552
- "directory",
553
- "document",
554
- "application",
555
- "presentation",
556
- "none"
557
- ]);
558
- function getRoleSnapshotStats(snapshot, refs) {
559
- const interactive = Object.values(refs).filter((r) => INTERACTIVE_ROLES.has(r.role)).length;
560
- return {
561
- lines: snapshot.split("\n").length,
562
- chars: snapshot.length,
563
- refs: Object.keys(refs).length,
564
- interactive
565
- };
566
- }
567
- function getIndentLevel(line) {
568
- const match = line.match(/^(\s*)/);
569
- return match ? Math.floor(match[1].length / 2) : 0;
570
- }
571
- function matchInteractiveSnapshotLine(line, options) {
572
- const depth = getIndentLevel(line);
573
- if (options.maxDepth !== void 0 && depth > options.maxDepth) return null;
574
- const match = line.match(/^(\s*-\s*)(\w+)(?:\s+"([^"]*)")?(.*)$/);
575
- if (!match) return null;
576
- const [, , roleRaw, name, suffix] = match;
577
- if (roleRaw.startsWith("/")) return null;
578
- return {
579
- roleRaw,
580
- role: roleRaw.toLowerCase(),
581
- ...name ? { name } : {},
582
- suffix
583
- };
584
- }
585
- function createRoleNameTracker() {
586
- const counts = /* @__PURE__ */ new Map();
587
- const refsByKey = /* @__PURE__ */ new Map();
588
- return {
589
- counts,
590
- refsByKey,
591
- getKey(role, name) {
592
- return `${role}:${name ?? ""}`;
593
- },
594
- getNextIndex(role, name) {
595
- const key = this.getKey(role, name);
596
- const current = counts.get(key) ?? 0;
597
- counts.set(key, current + 1);
598
- return current;
599
- },
600
- trackRef(role, name, ref) {
601
- const key = this.getKey(role, name);
602
- const list = refsByKey.get(key) ?? [];
603
- list.push(ref);
604
- refsByKey.set(key, list);
605
- },
606
- getDuplicateKeys() {
607
- const out = /* @__PURE__ */ new Set();
608
- for (const [key, refs] of refsByKey) if (refs.length > 1) out.add(key);
609
- return out;
610
- }
611
- };
612
- }
613
- function removeNthFromNonDuplicates(refs, tracker) {
614
- const duplicates = tracker.getDuplicateKeys();
615
- for (const [ref, data] of Object.entries(refs)) {
616
- const key = tracker.getKey(data.role, data.name);
617
- if (!duplicates.has(key)) delete refs[ref]?.nth;
618
- }
619
- }
620
- function compactTree(tree) {
621
- const lines = tree.split("\n");
622
- const result = [];
623
- for (let i = 0; i < lines.length; i += 1) {
624
- const line = lines[i];
625
- if (line.includes("[ref=")) {
626
- result.push(line);
627
- continue;
628
- }
629
- if (line.includes(":") && !line.trimEnd().endsWith(":")) {
630
- result.push(line);
631
- continue;
632
- }
633
- const currentIndent = getIndentLevel(line);
634
- let hasRelevantChildren = false;
635
- for (let j = i + 1; j < lines.length; j += 1) {
636
- if (getIndentLevel(lines[j]) <= currentIndent) break;
637
- if (lines[j]?.includes("[ref=")) {
638
- hasRelevantChildren = true;
639
- break;
640
- }
641
- }
642
- if (hasRelevantChildren) result.push(line);
643
- }
644
- return result.join("\n");
645
- }
646
- function processLine(line, refs, options, tracker, nextRef) {
647
- const depth = getIndentLevel(line);
648
- if (options.maxDepth !== void 0 && depth > options.maxDepth) return null;
649
- const match = line.match(/^(\s*-\s*)(\w+)(?:\s+"([^"]*)")?(.*)$/);
650
- if (!match) return options.interactive ? null : line;
651
- const [, prefix, roleRaw, name, suffix] = match;
652
- if (roleRaw.startsWith("/")) return options.interactive ? null : line;
653
- const role = roleRaw.toLowerCase();
654
- const isInteractive = INTERACTIVE_ROLES.has(role);
655
- const isContent = CONTENT_ROLES.has(role);
656
- const isStructural = STRUCTURAL_ROLES.has(role);
657
- if (options.interactive && !isInteractive) return null;
658
- if (options.compact && isStructural && !name) return null;
659
- if (!(isInteractive || isContent && name)) return line;
660
- const ref = nextRef();
661
- const nth = tracker.getNextIndex(role, name);
662
- tracker.trackRef(role, name, ref);
663
- refs[ref] = {
664
- role,
665
- name,
666
- nth
667
- };
668
- let enhanced = `${prefix}${roleRaw}`;
669
- if (name) enhanced += ` "${name}"`;
670
- enhanced += ` [ref=${ref}]`;
671
- if (nth > 0) enhanced += ` [nth=${nth}]`;
672
- if (suffix) enhanced += suffix;
673
- return enhanced;
674
- }
675
- function parseRoleRef(raw) {
676
- const trimmed = raw.trim();
677
- if (!trimmed) return null;
678
- const normalized = trimmed.startsWith("@") ? trimmed.slice(1) : trimmed.startsWith("ref=") ? trimmed.slice(4) : trimmed;
679
- return /^e\d+$/.test(normalized) ? normalized : null;
680
- }
681
- function buildRoleSnapshotFromAriaSnapshot(ariaSnapshot, options = {}) {
682
- const lines = ariaSnapshot.split("\n");
683
- const refs = {};
684
- const tracker = createRoleNameTracker();
685
- let counter = 0;
686
- const nextRef = () => {
687
- counter += 1;
688
- return `e${counter}`;
689
- };
690
- if (options.interactive) {
691
- const result = [];
692
- for (const line of lines) {
693
- const parsed = matchInteractiveSnapshotLine(line, options);
694
- if (!parsed) continue;
695
- const { roleRaw, role, name, suffix } = parsed;
696
- if (!INTERACTIVE_ROLES.has(role)) continue;
697
- const ref = nextRef();
698
- const nth = tracker.getNextIndex(role, name);
699
- tracker.trackRef(role, name, ref);
700
- refs[ref] = {
701
- role,
702
- name,
703
- nth
704
- };
705
- let enhanced = `- ${roleRaw}`;
706
- if (name) enhanced += ` "${name}"`;
707
- enhanced += ` [ref=${ref}]`;
708
- if (nth > 0) enhanced += ` [nth=${nth}]`;
709
- if (suffix.includes("[")) enhanced += suffix;
710
- result.push(enhanced);
711
- }
712
- removeNthFromNonDuplicates(refs, tracker);
713
- return {
714
- snapshot: result.join("\n") || "(no interactive elements)",
715
- refs
716
- };
717
- }
718
- const result = [];
719
- for (const line of lines) {
720
- const processed = processLine(line, refs, options, tracker, nextRef);
721
- if (processed !== null) result.push(processed);
722
- }
723
- removeNthFromNonDuplicates(refs, tracker);
724
- const tree = result.join("\n") || "(empty)";
725
- return {
726
- snapshot: options.compact ? compactTree(tree) : tree,
727
- refs
728
- };
729
- }
730
- function parseAiSnapshotRef(suffix) {
731
- const match = suffix.match(/\[ref=(e\d+)\]/i);
732
- return match ? match[1] : null;
733
- }
734
- /**
735
- * Build a role snapshot from Playwright's AI snapshot output while preserving Playwright's own
736
- * aria-ref ids (e.g. ref=e13). This makes the refs self-resolving across calls.
737
- */
738
- function buildRoleSnapshotFromAiSnapshot(aiSnapshot, options = {}) {
739
- const lines = String(aiSnapshot ?? "").split("\n");
740
- const refs = {};
741
- if (options.interactive) {
742
- const out = [];
743
- for (const line of lines) {
744
- const parsed = matchInteractiveSnapshotLine(line, options);
745
- if (!parsed) continue;
746
- const { roleRaw, role, name, suffix } = parsed;
747
- if (!INTERACTIVE_ROLES.has(role)) continue;
748
- const ref = parseAiSnapshotRef(suffix);
749
- if (!ref) continue;
750
- refs[ref] = {
751
- role,
752
- ...name ? { name } : {}
753
- };
754
- out.push(`- ${roleRaw}${name ? ` "${name}"` : ""}${suffix}`);
755
- }
756
- return {
757
- snapshot: out.join("\n") || "(no interactive elements)",
758
- refs
759
- };
760
- }
761
- const out = [];
762
- for (const line of lines) {
763
- const depth = getIndentLevel(line);
764
- if (options.maxDepth !== void 0 && depth > options.maxDepth) continue;
765
- const match = line.match(/^(\s*-\s*)(\w+)(?:\s+"([^"]*)")?(.*)$/);
766
- if (!match) {
767
- out.push(line);
768
- continue;
769
- }
770
- const [, , roleRaw, name, suffix] = match;
771
- if (roleRaw.startsWith("/")) {
772
- out.push(line);
773
- continue;
774
- }
775
- const role = roleRaw.toLowerCase();
776
- const isStructural = STRUCTURAL_ROLES.has(role);
777
- if (options.compact && isStructural && !name) continue;
778
- const ref = parseAiSnapshotRef(suffix);
779
- if (ref) refs[ref] = {
780
- role,
781
- ...name ? { name } : {}
782
- };
783
- out.push(line);
784
- }
785
- const tree = out.join("\n") || "(empty)";
786
- return {
787
- snapshot: options.compact ? compactTree(tree) : tree,
788
- refs
789
- };
790
- }
791
-
792
- //#endregion
793
- //#region src/browser/pw-tools-core.shared.ts
794
- let nextUploadArmId = 0;
795
- let nextDialogArmId = 0;
796
- let nextDownloadArmId = 0;
797
- function bumpUploadArmId() {
798
- nextUploadArmId += 1;
799
- return nextUploadArmId;
800
- }
801
- function bumpDialogArmId() {
802
- nextDialogArmId += 1;
803
- return nextDialogArmId;
804
- }
805
- function bumpDownloadArmId() {
806
- nextDownloadArmId += 1;
807
- return nextDownloadArmId;
808
- }
809
- function requireRef(value) {
810
- const raw = typeof value === "string" ? value.trim() : "";
811
- const ref = (raw ? parseRoleRef(raw) : null) ?? (raw.startsWith("@") ? raw.slice(1) : raw);
812
- if (!ref) throw new Error("ref is required");
813
- return ref;
814
- }
815
- function normalizeTimeoutMs(timeoutMs, fallback) {
816
- return Math.max(500, Math.min(12e4, timeoutMs ?? fallback));
817
- }
818
- function toAIFriendlyError(error, selector) {
819
- const message = error instanceof Error ? error.message : String(error);
820
- if (message.includes("strict mode violation")) {
821
- const countMatch = message.match(/resolved to (\d+) elements/);
822
- const count = countMatch ? countMatch[1] : "multiple";
823
- return /* @__PURE__ */ new Error(`Selector "${selector}" matched ${count} elements. Run a new snapshot to get updated refs, or use a different ref.`);
824
- }
825
- if ((message.includes("Timeout") || message.includes("waiting for")) && (message.includes("to be visible") || message.includes("not visible"))) return /* @__PURE__ */ new Error(`Element "${selector}" not found or not visible. Run a new snapshot to see current page elements.`);
826
- if (message.includes("intercepts pointer events") || message.includes("not visible") || message.includes("not receive pointer events")) return /* @__PURE__ */ new Error(`Element "${selector}" is not interactable (hidden or covered). Try scrolling it into view, closing overlays, or re-snapshotting.`);
827
- return error instanceof Error ? error : new Error(message);
828
- }
829
-
830
- //#endregion
831
- //#region src/browser/pw-tools-core.downloads.ts
832
- function sanitizeDownloadFileName(fileName) {
833
- const trimmed = String(fileName ?? "").trim();
834
- if (!trimmed) return "download.bin";
835
- let base = path.posix.basename(trimmed);
836
- base = path.win32.basename(base);
837
- let cleaned = "";
838
- for (let i = 0; i < base.length; i++) {
839
- const code = base.charCodeAt(i);
840
- if (code < 32 || code === 127) continue;
841
- cleaned += base[i];
842
- }
843
- base = cleaned.trim();
844
- if (!base || base === "." || base === "..") return "download.bin";
845
- if (base.length > 200) base = base.slice(0, 200);
846
- return base;
847
- }
848
- function buildTempDownloadPath(fileName) {
849
- const id = crypto.randomUUID();
850
- const safeName = sanitizeDownloadFileName(fileName);
851
- return path.join(resolvePreferredAnimaTmpDir(), "downloads", `${id}-${safeName}`);
852
- }
853
- function createPageDownloadWaiter(page, timeoutMs) {
854
- let done = false;
855
- let timer;
856
- let handler;
857
- const cleanup = () => {
858
- if (timer) clearTimeout(timer);
859
- timer = void 0;
860
- if (handler) {
861
- page.off("download", handler);
862
- handler = void 0;
863
- }
864
- };
865
- return {
866
- promise: new Promise((resolve, reject) => {
867
- handler = (download) => {
868
- if (done) return;
869
- done = true;
870
- cleanup();
871
- resolve(download);
872
- };
873
- page.on("download", handler);
874
- timer = setTimeout(() => {
875
- if (done) return;
876
- done = true;
877
- cleanup();
878
- reject(/* @__PURE__ */ new Error("Timeout waiting for download"));
879
- }, timeoutMs);
880
- }),
881
- cancel: () => {
882
- if (done) return;
883
- done = true;
884
- cleanup();
885
- }
886
- };
887
- }
888
- async function armFileUploadViaPlaywright(opts) {
889
- const page = await getPageForTargetId(opts);
890
- const state = ensurePageState(page);
891
- const timeout = Math.max(500, Math.min(12e4, opts.timeoutMs ?? 12e4));
892
- state.armIdUpload = bumpUploadArmId();
893
- const armId = state.armIdUpload;
894
- page.waitForEvent("filechooser", { timeout }).then(async (fileChooser) => {
895
- if (state.armIdUpload !== armId) return;
896
- if (!opts.paths?.length) {
897
- try {
898
- await page.keyboard.press("Escape");
899
- } catch {}
900
- return;
901
- }
902
- await fileChooser.setFiles(opts.paths);
903
- try {
904
- const input = typeof fileChooser.element === "function" ? await Promise.resolve(fileChooser.element()) : null;
905
- if (input) await input.evaluate((el) => {
906
- el.dispatchEvent(new Event("input", { bubbles: true }));
907
- el.dispatchEvent(new Event("change", { bubbles: true }));
908
- });
909
- } catch {}
910
- }).catch(() => {});
911
- }
912
- async function armDialogViaPlaywright(opts) {
913
- const page = await getPageForTargetId(opts);
914
- const state = ensurePageState(page);
915
- const timeout = normalizeTimeoutMs(opts.timeoutMs, 12e4);
916
- state.armIdDialog = bumpDialogArmId();
917
- const armId = state.armIdDialog;
918
- page.waitForEvent("dialog", { timeout }).then(async (dialog) => {
919
- if (state.armIdDialog !== armId) return;
920
- if (opts.accept) await dialog.accept(opts.promptText);
921
- else await dialog.dismiss();
922
- }).catch(() => {});
923
- }
924
- async function waitForDownloadViaPlaywright(opts) {
925
- const page = await getPageForTargetId(opts);
926
- const state = ensurePageState(page);
927
- const timeout = normalizeTimeoutMs(opts.timeoutMs, 12e4);
928
- state.armIdDownload = bumpDownloadArmId();
929
- const armId = state.armIdDownload;
930
- const waiter = createPageDownloadWaiter(page, timeout);
931
- try {
932
- const download = await waiter.promise;
933
- if (state.armIdDownload !== armId) throw new Error("Download was superseded by another waiter");
934
- const suggested = download.suggestedFilename?.() || "download.bin";
935
- const outPath = opts.path?.trim() || buildTempDownloadPath(suggested);
936
- await fs.mkdir(path.dirname(outPath), { recursive: true });
937
- await download.saveAs?.(outPath);
938
- return {
939
- url: download.url?.() || "",
940
- suggestedFilename: suggested,
941
- path: path.resolve(outPath)
942
- };
943
- } catch (err) {
944
- waiter.cancel();
945
- throw err;
946
- }
947
- }
948
- async function downloadViaPlaywright(opts) {
949
- const page = await getPageForTargetId(opts);
950
- const state = ensurePageState(page);
951
- restoreRoleRefsForTarget({
952
- cdpUrl: opts.cdpUrl,
953
- targetId: opts.targetId,
954
- page
955
- });
956
- const timeout = normalizeTimeoutMs(opts.timeoutMs, 12e4);
957
- const ref = requireRef(opts.ref);
958
- const outPath = String(opts.path ?? "").trim();
959
- if (!outPath) throw new Error("path is required");
960
- state.armIdDownload = bumpDownloadArmId();
961
- const armId = state.armIdDownload;
962
- const waiter = createPageDownloadWaiter(page, timeout);
963
- try {
964
- const locator = refLocator(page, ref);
965
- try {
966
- await locator.click({ timeout });
967
- } catch (err) {
968
- throw toAIFriendlyError(err, ref);
969
- }
970
- const download = await waiter.promise;
971
- if (state.armIdDownload !== armId) throw new Error("Download was superseded by another waiter");
972
- const suggested = download.suggestedFilename?.() || "download.bin";
973
- await fs.mkdir(path.dirname(outPath), { recursive: true });
974
- await download.saveAs?.(outPath);
975
- return {
976
- url: download.url?.() || "",
977
- suggestedFilename: suggested,
978
- path: path.resolve(outPath)
979
- };
980
- } catch (err) {
981
- waiter.cancel();
982
- throw err;
983
- }
984
- }
985
-
986
- //#endregion
987
- //#region src/browser/pw-tools-core.interactions.ts
988
- async function highlightViaPlaywright(opts) {
989
- const page = await getPageForTargetId(opts);
990
- ensurePageState(page);
991
- restoreRoleRefsForTarget({
992
- cdpUrl: opts.cdpUrl,
993
- targetId: opts.targetId,
994
- page
995
- });
996
- const ref = requireRef(opts.ref);
997
- try {
998
- await refLocator(page, ref).highlight();
999
- } catch (err) {
1000
- throw toAIFriendlyError(err, ref);
1001
- }
1002
- }
1003
- async function clickViaPlaywright(opts) {
1004
- const page = await getPageForTargetId({
1005
- cdpUrl: opts.cdpUrl,
1006
- targetId: opts.targetId
1007
- });
1008
- ensurePageState(page);
1009
- restoreRoleRefsForTarget({
1010
- cdpUrl: opts.cdpUrl,
1011
- targetId: opts.targetId,
1012
- page
1013
- });
1014
- const ref = requireRef(opts.ref);
1015
- const locator = refLocator(page, ref);
1016
- const timeout = Math.max(500, Math.min(6e4, Math.floor(opts.timeoutMs ?? 8e3)));
1017
- try {
1018
- if (opts.doubleClick) await locator.dblclick({
1019
- timeout,
1020
- button: opts.button,
1021
- modifiers: opts.modifiers
1022
- });
1023
- else await locator.click({
1024
- timeout,
1025
- button: opts.button,
1026
- modifiers: opts.modifiers
1027
- });
1028
- } catch (err) {
1029
- throw toAIFriendlyError(err, ref);
1030
- }
1031
- }
1032
- async function hoverViaPlaywright(opts) {
1033
- const ref = requireRef(opts.ref);
1034
- const page = await getPageForTargetId(opts);
1035
- ensurePageState(page);
1036
- restoreRoleRefsForTarget({
1037
- cdpUrl: opts.cdpUrl,
1038
- targetId: opts.targetId,
1039
- page
1040
- });
1041
- try {
1042
- await refLocator(page, ref).hover({ timeout: Math.max(500, Math.min(6e4, opts.timeoutMs ?? 8e3)) });
1043
- } catch (err) {
1044
- throw toAIFriendlyError(err, ref);
1045
- }
1046
- }
1047
- async function dragViaPlaywright(opts) {
1048
- const startRef = requireRef(opts.startRef);
1049
- const endRef = requireRef(opts.endRef);
1050
- if (!startRef || !endRef) throw new Error("startRef and endRef are required");
1051
- const page = await getPageForTargetId(opts);
1052
- ensurePageState(page);
1053
- restoreRoleRefsForTarget({
1054
- cdpUrl: opts.cdpUrl,
1055
- targetId: opts.targetId,
1056
- page
1057
- });
1058
- try {
1059
- await refLocator(page, startRef).dragTo(refLocator(page, endRef), { timeout: Math.max(500, Math.min(6e4, opts.timeoutMs ?? 8e3)) });
1060
- } catch (err) {
1061
- throw toAIFriendlyError(err, `${startRef} -> ${endRef}`);
1062
- }
1063
- }
1064
- async function selectOptionViaPlaywright(opts) {
1065
- const ref = requireRef(opts.ref);
1066
- if (!opts.values?.length) throw new Error("values are required");
1067
- const page = await getPageForTargetId(opts);
1068
- ensurePageState(page);
1069
- restoreRoleRefsForTarget({
1070
- cdpUrl: opts.cdpUrl,
1071
- targetId: opts.targetId,
1072
- page
1073
- });
1074
- try {
1075
- await refLocator(page, ref).selectOption(opts.values, { timeout: Math.max(500, Math.min(6e4, opts.timeoutMs ?? 8e3)) });
1076
- } catch (err) {
1077
- throw toAIFriendlyError(err, ref);
1078
- }
1079
- }
1080
- async function pressKeyViaPlaywright(opts) {
1081
- const key = String(opts.key ?? "").trim();
1082
- if (!key) throw new Error("key is required");
1083
- const page = await getPageForTargetId(opts);
1084
- ensurePageState(page);
1085
- await page.keyboard.press(key, { delay: Math.max(0, Math.floor(opts.delayMs ?? 0)) });
1086
- }
1087
- async function typeViaPlaywright(opts) {
1088
- const text = String(opts.text ?? "");
1089
- const page = await getPageForTargetId(opts);
1090
- ensurePageState(page);
1091
- restoreRoleRefsForTarget({
1092
- cdpUrl: opts.cdpUrl,
1093
- targetId: opts.targetId,
1094
- page
1095
- });
1096
- const ref = requireRef(opts.ref);
1097
- const locator = refLocator(page, ref);
1098
- const timeout = Math.max(500, Math.min(6e4, opts.timeoutMs ?? 8e3));
1099
- try {
1100
- if (opts.slowly) {
1101
- await locator.click({ timeout });
1102
- await locator.type(text, {
1103
- timeout,
1104
- delay: 75
1105
- });
1106
- } else await locator.fill(text, { timeout });
1107
- if (opts.submit) await locator.press("Enter", { timeout });
1108
- } catch (err) {
1109
- throw toAIFriendlyError(err, ref);
1110
- }
1111
- }
1112
- async function fillFormViaPlaywright(opts) {
1113
- const page = await getPageForTargetId(opts);
1114
- ensurePageState(page);
1115
- restoreRoleRefsForTarget({
1116
- cdpUrl: opts.cdpUrl,
1117
- targetId: opts.targetId,
1118
- page
1119
- });
1120
- const timeout = Math.max(500, Math.min(6e4, opts.timeoutMs ?? 8e3));
1121
- for (const field of opts.fields) {
1122
- const ref = field.ref.trim();
1123
- const type = field.type.trim();
1124
- const rawValue = field.value;
1125
- const value = typeof rawValue === "string" ? rawValue : typeof rawValue === "number" || typeof rawValue === "boolean" ? String(rawValue) : "";
1126
- if (!ref || !type) continue;
1127
- const locator = refLocator(page, ref);
1128
- if (type === "checkbox" || type === "radio") {
1129
- const checked = rawValue === true || rawValue === 1 || rawValue === "1" || rawValue === "true";
1130
- try {
1131
- await locator.setChecked(checked, { timeout });
1132
- } catch (err) {
1133
- throw toAIFriendlyError(err, ref);
1134
- }
1135
- continue;
1136
- }
1137
- try {
1138
- await locator.fill(value, { timeout });
1139
- } catch (err) {
1140
- throw toAIFriendlyError(err, ref);
1141
- }
1142
- }
1143
- }
1144
- async function evaluateViaPlaywright(opts) {
1145
- const fnText = String(opts.fn ?? "").trim();
1146
- if (!fnText) throw new Error("function is required");
1147
- const page = await getPageForTargetId(opts);
1148
- ensurePageState(page);
1149
- restoreRoleRefsForTarget({
1150
- cdpUrl: opts.cdpUrl,
1151
- targetId: opts.targetId,
1152
- page
1153
- });
1154
- const outerTimeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1155
- let evaluateTimeout = Math.max(1e3, Math.min(12e4, outerTimeout - 500));
1156
- evaluateTimeout = Math.min(evaluateTimeout, outerTimeout);
1157
- const signal = opts.signal;
1158
- let abortListener;
1159
- let abortReject;
1160
- let abortPromise;
1161
- if (signal) {
1162
- abortPromise = new Promise((_, reject) => {
1163
- abortReject = reject;
1164
- });
1165
- abortPromise.catch(() => {});
1166
- }
1167
- if (signal) {
1168
- const disconnect = () => {
1169
- forceDisconnectPlaywrightForTarget({
1170
- cdpUrl: opts.cdpUrl,
1171
- targetId: opts.targetId,
1172
- reason: "evaluate aborted"
1173
- }).catch(() => {});
1174
- };
1175
- if (signal.aborted) {
1176
- disconnect();
1177
- throw signal.reason ?? /* @__PURE__ */ new Error("aborted");
1178
- }
1179
- abortListener = () => {
1180
- disconnect();
1181
- abortReject?.(signal.reason ?? /* @__PURE__ */ new Error("aborted"));
1182
- };
1183
- signal.addEventListener("abort", abortListener, { once: true });
1184
- if (signal.aborted) {
1185
- abortListener();
1186
- throw signal.reason ?? /* @__PURE__ */ new Error("aborted");
1187
- }
1188
- }
1189
- try {
1190
- if (opts.ref) {
1191
- const locator = refLocator(page, opts.ref);
1192
- const elementEvaluator = new Function("el", "args", `
1193
- "use strict";
1194
- var fnBody = args.fnBody, timeoutMs = args.timeoutMs;
1195
- try {
1196
- var candidate = eval("(" + fnBody + ")");
1197
- var result = typeof candidate === "function" ? candidate(el) : candidate;
1198
- if (result && typeof result.then === "function") {
1199
- return Promise.race([
1200
- result,
1201
- new Promise(function(_, reject) {
1202
- setTimeout(function() { reject(new Error("evaluate timed out after " + timeoutMs + "ms")); }, timeoutMs);
1203
- })
1204
- ]);
1205
- }
1206
- return result;
1207
- } catch (err) {
1208
- throw new Error("Invalid evaluate function: " + (err && err.message ? err.message : String(err)));
1209
- }
1210
- `);
1211
- const evalPromise = locator.evaluate(elementEvaluator, {
1212
- fnBody: fnText,
1213
- timeoutMs: evaluateTimeout
1214
- });
1215
- if (!abortPromise) return await evalPromise;
1216
- try {
1217
- return await Promise.race([evalPromise, abortPromise]);
1218
- } catch (err) {
1219
- evalPromise.catch(() => {});
1220
- throw err;
1221
- }
1222
- }
1223
- const browserEvaluator = new Function("args", `
1224
- "use strict";
1225
- var fnBody = args.fnBody, timeoutMs = args.timeoutMs;
1226
- try {
1227
- var candidate = eval("(" + fnBody + ")");
1228
- var result = typeof candidate === "function" ? candidate() : candidate;
1229
- if (result && typeof result.then === "function") {
1230
- return Promise.race([
1231
- result,
1232
- new Promise(function(_, reject) {
1233
- setTimeout(function() { reject(new Error("evaluate timed out after " + timeoutMs + "ms")); }, timeoutMs);
1234
- })
1235
- ]);
1236
- }
1237
- return result;
1238
- } catch (err) {
1239
- throw new Error("Invalid evaluate function: " + (err && err.message ? err.message : String(err)));
1240
- }
1241
- `);
1242
- const evalPromise = page.evaluate(browserEvaluator, {
1243
- fnBody: fnText,
1244
- timeoutMs: evaluateTimeout
1245
- });
1246
- if (!abortPromise) return await evalPromise;
1247
- try {
1248
- return await Promise.race([evalPromise, abortPromise]);
1249
- } catch (err) {
1250
- evalPromise.catch(() => {});
1251
- throw err;
1252
- }
1253
- } finally {
1254
- if (signal && abortListener) signal.removeEventListener("abort", abortListener);
1255
- }
1256
- }
1257
- async function scrollIntoViewViaPlaywright(opts) {
1258
- const page = await getPageForTargetId(opts);
1259
- ensurePageState(page);
1260
- restoreRoleRefsForTarget({
1261
- cdpUrl: opts.cdpUrl,
1262
- targetId: opts.targetId,
1263
- page
1264
- });
1265
- const timeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1266
- const ref = requireRef(opts.ref);
1267
- const locator = refLocator(page, ref);
1268
- try {
1269
- await locator.scrollIntoViewIfNeeded({ timeout });
1270
- } catch (err) {
1271
- throw toAIFriendlyError(err, ref);
1272
- }
1273
- }
1274
- async function waitForViaPlaywright(opts) {
1275
- const page = await getPageForTargetId(opts);
1276
- ensurePageState(page);
1277
- const timeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1278
- if (typeof opts.timeMs === "number" && Number.isFinite(opts.timeMs)) await page.waitForTimeout(Math.max(0, opts.timeMs));
1279
- if (opts.text) await page.getByText(opts.text).first().waitFor({
1280
- state: "visible",
1281
- timeout
1282
- });
1283
- if (opts.textGone) await page.getByText(opts.textGone).first().waitFor({
1284
- state: "hidden",
1285
- timeout
1286
- });
1287
- if (opts.selector) {
1288
- const selector = String(opts.selector).trim();
1289
- if (selector) await page.locator(selector).first().waitFor({
1290
- state: "visible",
1291
- timeout
1292
- });
1293
- }
1294
- if (opts.url) {
1295
- const url = String(opts.url).trim();
1296
- if (url) await page.waitForURL(url, { timeout });
1297
- }
1298
- if (opts.loadState) await page.waitForLoadState(opts.loadState, { timeout });
1299
- if (opts.fn) {
1300
- const fn = String(opts.fn).trim();
1301
- if (fn) await page.waitForFunction(fn, { timeout });
1302
- }
1303
- }
1304
- async function takeScreenshotViaPlaywright(opts) {
1305
- const page = await getPageForTargetId(opts);
1306
- ensurePageState(page);
1307
- restoreRoleRefsForTarget({
1308
- cdpUrl: opts.cdpUrl,
1309
- targetId: opts.targetId,
1310
- page
1311
- });
1312
- const type = opts.type ?? "png";
1313
- if (opts.ref) {
1314
- if (opts.fullPage) throw new Error("fullPage is not supported for element screenshots");
1315
- return { buffer: await refLocator(page, opts.ref).screenshot({ type }) };
1316
- }
1317
- if (opts.element) {
1318
- if (opts.fullPage) throw new Error("fullPage is not supported for element screenshots");
1319
- return { buffer: await page.locator(opts.element).first().screenshot({ type }) };
1320
- }
1321
- return { buffer: await page.screenshot({
1322
- type,
1323
- fullPage: Boolean(opts.fullPage)
1324
- }) };
1325
- }
1326
- async function screenshotWithLabelsViaPlaywright(opts) {
1327
- const page = await getPageForTargetId(opts);
1328
- ensurePageState(page);
1329
- restoreRoleRefsForTarget({
1330
- cdpUrl: opts.cdpUrl,
1331
- targetId: opts.targetId,
1332
- page
1333
- });
1334
- const type = opts.type ?? "png";
1335
- const maxLabels = typeof opts.maxLabels === "number" && Number.isFinite(opts.maxLabels) ? Math.max(1, Math.floor(opts.maxLabels)) : 150;
1336
- const viewport = await page.evaluate(() => ({
1337
- scrollX: window.scrollX || 0,
1338
- scrollY: window.scrollY || 0,
1339
- width: window.innerWidth || 0,
1340
- height: window.innerHeight || 0
1341
- }));
1342
- const refs = Object.keys(opts.refs ?? {});
1343
- const boxes = [];
1344
- let skipped = 0;
1345
- for (const ref of refs) {
1346
- if (boxes.length >= maxLabels) {
1347
- skipped += 1;
1348
- continue;
1349
- }
1350
- try {
1351
- const box = await refLocator(page, ref).boundingBox();
1352
- if (!box) {
1353
- skipped += 1;
1354
- continue;
1355
- }
1356
- const x0 = box.x;
1357
- const y0 = box.y;
1358
- const x1 = box.x + box.width;
1359
- const y1 = box.y + box.height;
1360
- const vx0 = viewport.scrollX;
1361
- const vy0 = viewport.scrollY;
1362
- const vx1 = viewport.scrollX + viewport.width;
1363
- const vy1 = viewport.scrollY + viewport.height;
1364
- if (x1 < vx0 || x0 > vx1 || y1 < vy0 || y0 > vy1) {
1365
- skipped += 1;
1366
- continue;
1367
- }
1368
- boxes.push({
1369
- ref,
1370
- x: x0 - viewport.scrollX,
1371
- y: y0 - viewport.scrollY,
1372
- w: Math.max(1, box.width),
1373
- h: Math.max(1, box.height)
1374
- });
1375
- } catch {
1376
- skipped += 1;
1377
- }
1378
- }
1379
- try {
1380
- if (boxes.length > 0) await page.evaluate((labels) => {
1381
- document.querySelectorAll("[data-anima-labels]").forEach((el) => el.remove());
1382
- const root = document.createElement("div");
1383
- root.setAttribute("data-anima-labels", "1");
1384
- root.style.position = "fixed";
1385
- root.style.left = "0";
1386
- root.style.top = "0";
1387
- root.style.zIndex = "2147483647";
1388
- root.style.pointerEvents = "none";
1389
- root.style.fontFamily = "\"SF Mono\",\"SFMono-Regular\",Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace";
1390
- const clamp = (value, min, max) => Math.min(max, Math.max(min, value));
1391
- for (const label of labels) {
1392
- const box = document.createElement("div");
1393
- box.setAttribute("data-anima-labels", "1");
1394
- box.style.position = "absolute";
1395
- box.style.left = `${label.x}px`;
1396
- box.style.top = `${label.y}px`;
1397
- box.style.width = `${label.w}px`;
1398
- box.style.height = `${label.h}px`;
1399
- box.style.border = "2px solid #ffb020";
1400
- box.style.boxSizing = "border-box";
1401
- const tag = document.createElement("div");
1402
- tag.setAttribute("data-anima-labels", "1");
1403
- tag.textContent = label.ref;
1404
- tag.style.position = "absolute";
1405
- tag.style.left = `${label.x}px`;
1406
- tag.style.top = `${clamp(label.y - 18, 0, 2e4)}px`;
1407
- tag.style.background = "#ffb020";
1408
- tag.style.color = "#1a1a1a";
1409
- tag.style.fontSize = "12px";
1410
- tag.style.lineHeight = "14px";
1411
- tag.style.padding = "1px 4px";
1412
- tag.style.borderRadius = "3px";
1413
- tag.style.boxShadow = "0 1px 2px rgba(0,0,0,0.35)";
1414
- tag.style.whiteSpace = "nowrap";
1415
- root.appendChild(box);
1416
- root.appendChild(tag);
1417
- }
1418
- document.documentElement.appendChild(root);
1419
- }, boxes);
1420
- return {
1421
- buffer: await page.screenshot({ type }),
1422
- labels: boxes.length,
1423
- skipped
1424
- };
1425
- } finally {
1426
- await page.evaluate(() => {
1427
- document.querySelectorAll("[data-anima-labels]").forEach((el) => el.remove());
1428
- }).catch(() => {});
1429
- }
1430
- }
1431
- async function setInputFilesViaPlaywright(opts) {
1432
- const page = await getPageForTargetId(opts);
1433
- ensurePageState(page);
1434
- restoreRoleRefsForTarget({
1435
- cdpUrl: opts.cdpUrl,
1436
- targetId: opts.targetId,
1437
- page
1438
- });
1439
- if (!opts.paths.length) throw new Error("paths are required");
1440
- const inputRef = typeof opts.inputRef === "string" ? opts.inputRef.trim() : "";
1441
- const element = typeof opts.element === "string" ? opts.element.trim() : "";
1442
- if (inputRef && element) throw new Error("inputRef and element are mutually exclusive");
1443
- if (!inputRef && !element) throw new Error("inputRef or element is required");
1444
- const locator = inputRef ? refLocator(page, inputRef) : page.locator(element).first();
1445
- try {
1446
- await locator.setInputFiles(opts.paths);
1447
- } catch (err) {
1448
- throw toAIFriendlyError(err, inputRef || element);
1449
- }
1450
- try {
1451
- const handle = await locator.elementHandle();
1452
- if (handle) await handle.evaluate((el) => {
1453
- el.dispatchEvent(new Event("input", { bubbles: true }));
1454
- el.dispatchEvent(new Event("change", { bubbles: true }));
1455
- });
1456
- } catch {}
1457
- }
1458
-
1459
- //#endregion
1460
- //#region src/browser/pw-tools-core.responses.ts
1461
- function matchUrlPattern(pattern, url) {
1462
- const p = pattern.trim();
1463
- if (!p) return false;
1464
- if (p === url) return true;
1465
- if (p.includes("*")) {
1466
- const escaped = p.replace(/[|\\{}()[\]^$+?.]/g, "\\$&");
1467
- return new RegExp(`^${escaped.replace(/\*\*/g, ".*").replace(/\*/g, ".*")}$`).test(url);
1468
- }
1469
- return url.includes(p);
1470
- }
1471
- async function responseBodyViaPlaywright(opts) {
1472
- const pattern = String(opts.url ?? "").trim();
1473
- if (!pattern) throw new Error("url is required");
1474
- const maxChars = typeof opts.maxChars === "number" && Number.isFinite(opts.maxChars) ? Math.max(1, Math.min(5e6, Math.floor(opts.maxChars))) : 2e5;
1475
- const timeout = normalizeTimeoutMs(opts.timeoutMs, 2e4);
1476
- const page = await getPageForTargetId(opts);
1477
- ensurePageState(page);
1478
- const resp = await new Promise((resolve, reject) => {
1479
- let done = false;
1480
- let timer;
1481
- let handler;
1482
- const cleanup = () => {
1483
- if (timer) clearTimeout(timer);
1484
- timer = void 0;
1485
- if (handler) page.off("response", handler);
1486
- };
1487
- handler = (resp) => {
1488
- if (done) return;
1489
- if (!matchUrlPattern(pattern, resp.url?.() || "")) return;
1490
- done = true;
1491
- cleanup();
1492
- resolve(resp);
1493
- };
1494
- page.on("response", handler);
1495
- timer = setTimeout(() => {
1496
- if (done) return;
1497
- done = true;
1498
- cleanup();
1499
- reject(/* @__PURE__ */ new Error(`Response not found for url pattern "${pattern}". Run '${formatCliCommand("anima browser requests")}' to inspect recent network activity.`));
1500
- }, timeout);
1501
- });
1502
- const url = resp.url?.() || "";
1503
- const status = resp.status?.();
1504
- const headers = resp.headers?.();
1505
- let bodyText = "";
1506
- try {
1507
- if (typeof resp.text === "function") bodyText = await resp.text();
1508
- else if (typeof resp.body === "function") {
1509
- const buf = await resp.body();
1510
- bodyText = new TextDecoder("utf-8").decode(buf);
1511
- }
1512
- } catch (err) {
1513
- throw new Error(`Failed to read response body for "${url}": ${String(err)}`, { cause: err });
1514
- }
1515
- return {
1516
- url,
1517
- status,
1518
- headers,
1519
- body: bodyText.length > maxChars ? bodyText.slice(0, maxChars) : bodyText,
1520
- truncated: bodyText.length > maxChars ? true : void 0
1521
- };
1522
- }
1523
-
1524
- //#endregion
1525
- //#region src/browser/pw-tools-core.snapshot.ts
1526
- async function snapshotAriaViaPlaywright(opts) {
1527
- const limit = Math.max(1, Math.min(2e3, Math.floor(opts.limit ?? 500)));
1528
- const page = await getPageForTargetId({
1529
- cdpUrl: opts.cdpUrl,
1530
- targetId: opts.targetId
1531
- });
1532
- ensurePageState(page);
1533
- const session = await page.context().newCDPSession(page);
1534
- try {
1535
- await session.send("Accessibility.enable").catch(() => {});
1536
- const res = await session.send("Accessibility.getFullAXTree");
1537
- return { nodes: formatAriaSnapshot(Array.isArray(res?.nodes) ? res.nodes : [], limit) };
1538
- } finally {
1539
- await session.detach().catch(() => {});
1540
- }
1541
- }
1542
- async function snapshotAiViaPlaywright(opts) {
1543
- const page = await getPageForTargetId({
1544
- cdpUrl: opts.cdpUrl,
1545
- targetId: opts.targetId
1546
- });
1547
- ensurePageState(page);
1548
- const maybe = page;
1549
- if (!maybe._snapshotForAI) throw new Error("Playwright _snapshotForAI is not available. Upgrade playwright-core.");
1550
- const result = await maybe._snapshotForAI({
1551
- timeout: Math.max(500, Math.min(6e4, Math.floor(opts.timeoutMs ?? 5e3))),
1552
- track: "response"
1553
- });
1554
- let snapshot = String(result?.full ?? "");
1555
- const maxChars = opts.maxChars;
1556
- const limit = typeof maxChars === "number" && Number.isFinite(maxChars) && maxChars > 0 ? Math.floor(maxChars) : void 0;
1557
- let truncated = false;
1558
- if (limit && snapshot.length > limit) {
1559
- snapshot = `${snapshot.slice(0, limit)}\n\n[...TRUNCATED - page too large]`;
1560
- truncated = true;
1561
- }
1562
- const built = buildRoleSnapshotFromAiSnapshot(snapshot);
1563
- storeRoleRefsForTarget({
1564
- page,
1565
- cdpUrl: opts.cdpUrl,
1566
- targetId: opts.targetId,
1567
- refs: built.refs,
1568
- mode: "aria"
1569
- });
1570
- return truncated ? {
1571
- snapshot,
1572
- truncated,
1573
- refs: built.refs
1574
- } : {
1575
- snapshot,
1576
- refs: built.refs
1577
- };
1578
- }
1579
- async function snapshotRoleViaPlaywright(opts) {
1580
- const page = await getPageForTargetId({
1581
- cdpUrl: opts.cdpUrl,
1582
- targetId: opts.targetId
1583
- });
1584
- ensurePageState(page);
1585
- if (opts.refsMode === "aria") {
1586
- if (opts.selector?.trim() || opts.frameSelector?.trim()) throw new Error("refs=aria does not support selector/frame snapshots yet.");
1587
- const maybe = page;
1588
- if (!maybe._snapshotForAI) throw new Error("refs=aria requires Playwright _snapshotForAI support.");
1589
- const result = await maybe._snapshotForAI({
1590
- timeout: 5e3,
1591
- track: "response"
1592
- });
1593
- const built = buildRoleSnapshotFromAiSnapshot(String(result?.full ?? ""), opts.options);
1594
- storeRoleRefsForTarget({
1595
- page,
1596
- cdpUrl: opts.cdpUrl,
1597
- targetId: opts.targetId,
1598
- refs: built.refs,
1599
- mode: "aria"
1600
- });
1601
- return {
1602
- snapshot: built.snapshot,
1603
- refs: built.refs,
1604
- stats: getRoleSnapshotStats(built.snapshot, built.refs)
1605
- };
1606
- }
1607
- const frameSelector = opts.frameSelector?.trim() || "";
1608
- const selector = opts.selector?.trim() || "";
1609
- const ariaSnapshot = await (frameSelector ? selector ? page.frameLocator(frameSelector).locator(selector) : page.frameLocator(frameSelector).locator(":root") : selector ? page.locator(selector) : page.locator(":root")).ariaSnapshot();
1610
- const built = buildRoleSnapshotFromAriaSnapshot(String(ariaSnapshot ?? ""), opts.options);
1611
- storeRoleRefsForTarget({
1612
- page,
1613
- cdpUrl: opts.cdpUrl,
1614
- targetId: opts.targetId,
1615
- refs: built.refs,
1616
- frameSelector: frameSelector || void 0,
1617
- mode: "role"
1618
- });
1619
- return {
1620
- snapshot: built.snapshot,
1621
- refs: built.refs,
1622
- stats: getRoleSnapshotStats(built.snapshot, built.refs)
1623
- };
1624
- }
1625
- async function navigateViaPlaywright(opts) {
1626
- const url = String(opts.url ?? "").trim();
1627
- if (!url) throw new Error("url is required");
1628
- const page = await getPageForTargetId(opts);
1629
- ensurePageState(page);
1630
- await page.goto(url, { timeout: Math.max(1e3, Math.min(12e4, opts.timeoutMs ?? 2e4)) });
1631
- return { url: page.url() };
1632
- }
1633
- async function resizeViewportViaPlaywright(opts) {
1634
- const page = await getPageForTargetId(opts);
1635
- ensurePageState(page);
1636
- await page.setViewportSize({
1637
- width: Math.max(1, Math.floor(opts.width)),
1638
- height: Math.max(1, Math.floor(opts.height))
1639
- });
1640
- }
1641
- async function closePageViaPlaywright(opts) {
1642
- const page = await getPageForTargetId(opts);
1643
- ensurePageState(page);
1644
- await page.close();
1645
- }
1646
- async function pdfViaPlaywright(opts) {
1647
- const page = await getPageForTargetId(opts);
1648
- ensurePageState(page);
1649
- return { buffer: await page.pdf({ printBackground: true }) };
1650
- }
1651
-
1652
- //#endregion
1653
- //#region src/browser/pw-tools-core.state.ts
1654
- async function withCdpSession(page, fn) {
1655
- const session = await page.context().newCDPSession(page);
1656
- try {
1657
- return await fn(session);
1658
- } finally {
1659
- await session.detach().catch(() => {});
1660
- }
1661
- }
1662
- async function setOfflineViaPlaywright(opts) {
1663
- const page = await getPageForTargetId(opts);
1664
- ensurePageState(page);
1665
- await page.context().setOffline(Boolean(opts.offline));
1666
- }
1667
- async function setExtraHTTPHeadersViaPlaywright(opts) {
1668
- const page = await getPageForTargetId(opts);
1669
- ensurePageState(page);
1670
- await page.context().setExtraHTTPHeaders(opts.headers);
1671
- }
1672
- async function setHttpCredentialsViaPlaywright(opts) {
1673
- const page = await getPageForTargetId(opts);
1674
- ensurePageState(page);
1675
- if (opts.clear) {
1676
- await page.context().setHTTPCredentials(null);
1677
- return;
1678
- }
1679
- const username = String(opts.username ?? "");
1680
- const password = String(opts.password ?? "");
1681
- if (!username) throw new Error("username is required (or set clear=true)");
1682
- await page.context().setHTTPCredentials({
1683
- username,
1684
- password
1685
- });
1686
- }
1687
- async function setGeolocationViaPlaywright(opts) {
1688
- const page = await getPageForTargetId(opts);
1689
- ensurePageState(page);
1690
- const context = page.context();
1691
- if (opts.clear) {
1692
- await context.setGeolocation(null);
1693
- await context.clearPermissions().catch(() => {});
1694
- return;
1695
- }
1696
- if (typeof opts.latitude !== "number" || typeof opts.longitude !== "number") throw new Error("latitude and longitude are required (or set clear=true)");
1697
- await context.setGeolocation({
1698
- latitude: opts.latitude,
1699
- longitude: opts.longitude,
1700
- accuracy: typeof opts.accuracy === "number" ? opts.accuracy : void 0
1701
- });
1702
- const origin = opts.origin?.trim() || (() => {
1703
- try {
1704
- return new URL(page.url()).origin;
1705
- } catch {
1706
- return "";
1707
- }
1708
- })();
1709
- if (origin) await context.grantPermissions(["geolocation"], { origin }).catch(() => {});
1710
- }
1711
- async function emulateMediaViaPlaywright(opts) {
1712
- const page = await getPageForTargetId(opts);
1713
- ensurePageState(page);
1714
- await page.emulateMedia({ colorScheme: opts.colorScheme });
1715
- }
1716
- async function setLocaleViaPlaywright(opts) {
1717
- const page = await getPageForTargetId(opts);
1718
- ensurePageState(page);
1719
- const locale = String(opts.locale ?? "").trim();
1720
- if (!locale) throw new Error("locale is required");
1721
- await withCdpSession(page, async (session) => {
1722
- try {
1723
- await session.send("Emulation.setLocaleOverride", { locale });
1724
- } catch (err) {
1725
- if (String(err).includes("Another locale override is already in effect")) return;
1726
- throw err;
1727
- }
1728
- });
1729
- }
1730
- async function setTimezoneViaPlaywright(opts) {
1731
- const page = await getPageForTargetId(opts);
1732
- ensurePageState(page);
1733
- const timezoneId = String(opts.timezoneId ?? "").trim();
1734
- if (!timezoneId) throw new Error("timezoneId is required");
1735
- await withCdpSession(page, async (session) => {
1736
- try {
1737
- await session.send("Emulation.setTimezoneOverride", { timezoneId });
1738
- } catch (err) {
1739
- const msg = String(err);
1740
- if (msg.includes("Timezone override is already in effect")) return;
1741
- if (msg.includes("Invalid timezone")) throw new Error(`Invalid timezone ID: ${timezoneId}`, { cause: err });
1742
- throw err;
1743
- }
1744
- });
1745
- }
1746
- async function setDeviceViaPlaywright(opts) {
1747
- const page = await getPageForTargetId(opts);
1748
- ensurePageState(page);
1749
- const name = String(opts.name ?? "").trim();
1750
- if (!name) throw new Error("device name is required");
1751
- const descriptor = devices[name];
1752
- if (!descriptor) throw new Error(`Unknown device "${name}".`);
1753
- if (descriptor.viewport) await page.setViewportSize({
1754
- width: descriptor.viewport.width,
1755
- height: descriptor.viewport.height
1756
- });
1757
- await withCdpSession(page, async (session) => {
1758
- if (descriptor.userAgent || descriptor.locale) await session.send("Emulation.setUserAgentOverride", {
1759
- userAgent: descriptor.userAgent ?? "",
1760
- acceptLanguage: descriptor.locale ?? void 0
1761
- });
1762
- if (descriptor.viewport) await session.send("Emulation.setDeviceMetricsOverride", {
1763
- mobile: Boolean(descriptor.isMobile),
1764
- width: descriptor.viewport.width,
1765
- height: descriptor.viewport.height,
1766
- deviceScaleFactor: descriptor.deviceScaleFactor ?? 1,
1767
- screenWidth: descriptor.viewport.width,
1768
- screenHeight: descriptor.viewport.height
1769
- });
1770
- if (descriptor.hasTouch) await session.send("Emulation.setTouchEmulationEnabled", { enabled: true });
1771
- });
1772
- }
1773
-
1774
- //#endregion
1775
- //#region src/browser/pw-tools-core.storage.ts
1776
- async function cookiesGetViaPlaywright(opts) {
1777
- const page = await getPageForTargetId(opts);
1778
- ensurePageState(page);
1779
- return { cookies: await page.context().cookies() };
1780
- }
1781
- async function cookiesSetViaPlaywright(opts) {
1782
- const page = await getPageForTargetId(opts);
1783
- ensurePageState(page);
1784
- const cookie = opts.cookie;
1785
- if (!cookie.name || cookie.value === void 0) throw new Error("cookie name and value are required");
1786
- const hasUrl = typeof cookie.url === "string" && cookie.url.trim();
1787
- const hasDomainPath = typeof cookie.domain === "string" && cookie.domain.trim() && typeof cookie.path === "string" && cookie.path.trim();
1788
- if (!hasUrl && !hasDomainPath) throw new Error("cookie requires url, or domain+path");
1789
- await page.context().addCookies([cookie]);
1790
- }
1791
- async function cookiesClearViaPlaywright(opts) {
1792
- const page = await getPageForTargetId(opts);
1793
- ensurePageState(page);
1794
- await page.context().clearCookies();
1795
- }
1796
- async function storageGetViaPlaywright(opts) {
1797
- const page = await getPageForTargetId(opts);
1798
- ensurePageState(page);
1799
- const kind = opts.kind;
1800
- const key = typeof opts.key === "string" ? opts.key : void 0;
1801
- return { values: await page.evaluate(({ kind: kind2, key: key2 }) => {
1802
- const store = kind2 === "session" ? window.sessionStorage : window.localStorage;
1803
- if (key2) {
1804
- const value = store.getItem(key2);
1805
- return value === null ? {} : { [key2]: value };
1806
- }
1807
- const out = {};
1808
- for (let i = 0; i < store.length; i += 1) {
1809
- const k = store.key(i);
1810
- if (!k) continue;
1811
- const v = store.getItem(k);
1812
- if (v !== null) out[k] = v;
1813
- }
1814
- return out;
1815
- }, {
1816
- kind,
1817
- key
1818
- }) ?? {} };
1819
- }
1820
- async function storageSetViaPlaywright(opts) {
1821
- const page = await getPageForTargetId(opts);
1822
- ensurePageState(page);
1823
- const key = String(opts.key ?? "");
1824
- if (!key) throw new Error("key is required");
1825
- await page.evaluate(({ kind, key: k, value }) => {
1826
- (kind === "session" ? window.sessionStorage : window.localStorage).setItem(k, value);
1827
- }, {
1828
- kind: opts.kind,
1829
- key,
1830
- value: String(opts.value ?? "")
1831
- });
1832
- }
1833
- async function storageClearViaPlaywright(opts) {
1834
- const page = await getPageForTargetId(opts);
1835
- ensurePageState(page);
1836
- await page.evaluate(({ kind }) => {
1837
- (kind === "session" ? window.sessionStorage : window.localStorage).clear();
1838
- }, { kind: opts.kind });
1839
- }
1840
-
1841
- //#endregion
1842
- //#region src/browser/pw-tools-core.trace.ts
1843
- async function traceStartViaPlaywright(opts) {
1844
- const context = (await getPageForTargetId(opts)).context();
1845
- const ctxState = ensureContextState(context);
1846
- if (ctxState.traceActive) throw new Error("Trace already running. Stop the current trace before starting a new one.");
1847
- await context.tracing.start({
1848
- screenshots: opts.screenshots ?? true,
1849
- snapshots: opts.snapshots ?? true,
1850
- sources: opts.sources ?? false
1851
- });
1852
- ctxState.traceActive = true;
1853
- }
1854
- async function traceStopViaPlaywright(opts) {
1855
- const context = (await getPageForTargetId(opts)).context();
1856
- const ctxState = ensureContextState(context);
1857
- if (!ctxState.traceActive) throw new Error("No active trace. Start a trace before stopping it.");
1858
- await context.tracing.stop({ path: opts.path });
1859
- ctxState.traceActive = false;
1860
- }
1861
-
1862
- //#endregion
1863
- //#region src/browser/pw-ai.ts
1864
- markPwAiLoaded();
1865
-
1866
- //#endregion
1867
- export { armDialogViaPlaywright, armFileUploadViaPlaywright, clickViaPlaywright, closePageByTargetIdViaPlaywright, closePageViaPlaywright, closePlaywrightBrowserConnection, cookiesClearViaPlaywright, cookiesGetViaPlaywright, cookiesSetViaPlaywright, createPageViaPlaywright, downloadViaPlaywright, dragViaPlaywright, emulateMediaViaPlaywright, ensurePageState, evaluateViaPlaywright, fillFormViaPlaywright, focusPageByTargetIdViaPlaywright, forceDisconnectPlaywrightForTarget, getConsoleMessagesViaPlaywright, getNetworkRequestsViaPlaywright, getPageErrorsViaPlaywright, getPageForTargetId, highlightViaPlaywright, hoverViaPlaywright, listPagesViaPlaywright, navigateViaPlaywright, pdfViaPlaywright, pressKeyViaPlaywright, refLocator, resizeViewportViaPlaywright, responseBodyViaPlaywright, screenshotWithLabelsViaPlaywright, scrollIntoViewViaPlaywright, selectOptionViaPlaywright, setDeviceViaPlaywright, setExtraHTTPHeadersViaPlaywright, setGeolocationViaPlaywright, setHttpCredentialsViaPlaywright, setInputFilesViaPlaywright, setLocaleViaPlaywright, setOfflineViaPlaywright, setTimezoneViaPlaywright, snapshotAiViaPlaywright, snapshotAriaViaPlaywright, snapshotRoleViaPlaywright, storageClearViaPlaywright, storageGetViaPlaywright, storageSetViaPlaywright, takeScreenshotViaPlaywright, traceStartViaPlaywright, traceStopViaPlaywright, typeViaPlaywright, waitForDownloadViaPlaywright, waitForViaPlaywright };