remoteclaw 0.1.0-next.da482d8 → 0.1.0-next.db8a792

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 (1020) hide show
  1. package/dist/accounts-BZ2kR_Ij.js +47 -0
  2. package/dist/accounts-Bi4rFQG5.js +272 -0
  3. package/dist/accounts-Bpk-loA6.js +47 -0
  4. package/dist/accounts-D1CBpsaa.js +32 -0
  5. package/dist/accounts-DAdUdbPk.js +36 -0
  6. package/dist/accounts-WYyfAiie.js +270 -0
  7. package/dist/accounts-zQKMwnvt.js +36 -0
  8. package/dist/ack-reactions-B1l-vKPr.js +621 -0
  9. package/dist/ack-reactions-BnG0DLMu.js +621 -0
  10. package/dist/acp-cli-Btx71t69.js +1319 -0
  11. package/dist/acp-cli-DVQMjl0p.js +1324 -0
  12. package/dist/active-listener-BfN4RKlA.js +37 -0
  13. package/dist/active-listener-Bq7ckjOV.js +37 -0
  14. package/dist/agent-D2IwuL6g.js +688 -0
  15. package/dist/agent-WaE2mXI1.js +687 -0
  16. package/dist/agent-helpers-BcaiJFiG.js +400 -0
  17. package/dist/agent-scope-DVvX_nkQ.js +116 -0
  18. package/dist/agents-BwnT7jca.js +760 -0
  19. package/dist/agents.config-Dorm30BQ.js +116 -0
  20. package/dist/audio-B1lTyRqS.js +43 -0
  21. package/dist/audio-e0dFnrn8.js +43 -0
  22. package/dist/audit-DZvqycbG.js +3150 -0
  23. package/dist/audit-Mit73dYD.js +3150 -0
  24. package/dist/auth-C-XX0Tdt.js +314 -0
  25. package/dist/auth-D8--b01l.js +315 -0
  26. package/dist/auth-DJ7XEBDO.js +448 -0
  27. package/dist/auth-otyjXf9l.js +448 -0
  28. package/dist/banner-DSE-i7gH.js +294 -0
  29. package/dist/binaries-BSjilwX-.js +13 -0
  30. package/dist/bindings-DFTxQj8x.js +69 -0
  31. package/dist/bonjour-discovery-BnxTMHRd.js +378 -0
  32. package/dist/bonjour-discovery-CVJYHT3g.js +378 -0
  33. package/dist/boot/handler.js +28 -44
  34. package/dist/browser-cli-BR2pZWTC.js +1694 -0
  35. package/dist/browser-cli-I0kfR7FV.js +1690 -0
  36. package/dist/build-info.json +3 -3
  37. package/dist/call-Ck7ysmEl.js +517 -0
  38. package/dist/call-MN6mCJEB.js +518 -0
  39. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  40. package/dist/catalog-Bt9EM4sK.js +185 -0
  41. package/dist/catalog-BtUvWKd9.js +185 -0
  42. package/dist/channel-account-context-BLQq9NKz.js +133 -0
  43. package/dist/channel-account-context-CaCzVa76.js +133 -0
  44. package/dist/channel-activity-BatlvP_U.js +292 -0
  45. package/dist/channel-activity-DHVMMb2x.js +94 -0
  46. package/dist/channel-activity-DtRx3b0W.js +94 -0
  47. package/dist/channel-options-C6kT3nXB.js +32 -0
  48. package/dist/channel-options-CbgR_vsp.js +33 -0
  49. package/dist/channel-selection-CzbrpDPd.js +51 -0
  50. package/dist/channel-selection-Xv5UFxOx.js +51 -0
  51. package/dist/channel-web-DfDokU69.js +2134 -0
  52. package/dist/channel-web-DtvksSuY.js +2132 -0
  53. package/dist/channels-cli-BmdCVX6O.js +1435 -0
  54. package/dist/channels-cli-CrAZpaiN.js +1439 -0
  55. package/dist/channels-status-issues-B77y-TLr.js +18 -0
  56. package/dist/channels-status-issues-COECL8nx.js +18 -0
  57. package/dist/chrome-Cr5wmMk8.js +1733 -0
  58. package/dist/chrome-YBrnJN-g.js +1732 -0
  59. package/dist/chunk-CrfQ_O--.js +341 -0
  60. package/dist/chunk-DFBUmlXU.js +341 -0
  61. package/dist/clack-prompter-CFNKgQXx.js +122 -0
  62. package/dist/clack-prompter-DDlR2e34.js +121 -0
  63. package/dist/cli/daemon-cli.js +1 -1
  64. package/dist/cli-BbOinSy6.js +130 -0
  65. package/dist/cli-DuvHXQ5h.js +134 -0
  66. package/dist/client-BZeatr3g.js +2316 -0
  67. package/dist/client-Bc9JFAwL.js +2316 -0
  68. package/dist/clipboard-Com-8GBg.js +31 -0
  69. package/dist/clipboard-J_9AABIu.js +31 -0
  70. package/dist/command-format-CMAQa4dB.js +32 -0
  71. package/dist/command-format-KkslAzwV.js +18 -0
  72. package/dist/command-logger/handler.js +1 -1
  73. package/dist/command-registry-BJnVtHo0.js +215 -0
  74. package/dist/commands-ijxtne0J.js +41 -0
  75. package/dist/commands-kZtQfqDl.js +41 -0
  76. package/dist/commands-registry-BrBtH2_B.js +891 -0
  77. package/dist/commands-registry-xZoSouba.js +892 -0
  78. package/dist/common-6D7nhDP-.js +156 -0
  79. package/dist/common-B4cjsvqP.js +156 -0
  80. package/dist/completion-cli-CpUq9QC3.js +452 -0
  81. package/dist/completion-cli-De4umD_N.js +452 -0
  82. package/dist/config-C_WcTz_O.js +4231 -0
  83. package/dist/config-DfcqHTH-.js +4229 -0
  84. package/dist/config-cli-C7rq2n_m.js +243 -0
  85. package/dist/config-cli-VToCKln2.js +247 -0
  86. package/dist/config-guard-BlAcGEao.js +75 -0
  87. package/dist/config-guard-C-h_KIeI.js +99 -0
  88. package/dist/config-validation-C0YXR2dY.js +18 -0
  89. package/dist/config-validation-DDYBTmxT.js +18 -0
  90. package/dist/configure-Bkre1zEB.js +891 -0
  91. package/dist/configure-ifuEamRQ.js +889 -0
  92. package/dist/control-auth-DK6cIBzl.js +397 -0
  93. package/dist/control-auth-DQ8bfDMk.js +397 -0
  94. package/dist/control-ui-assets-DLEWfed6.js +186 -0
  95. package/dist/control-ui-assets-DVhkAyhv.js +186 -0
  96. package/dist/conversation-label-HuHoShPF.js +36 -0
  97. package/dist/conversation-label-L0QTtKji.js +36 -0
  98. package/dist/cron-cli-DnxnTi83.js +498 -0
  99. package/dist/cron-cli-yqcBkqZT.js +494 -0
  100. package/dist/daemon-cli-CmQYq8uO.js +735 -0
  101. package/dist/daemon-cli-_OIRoswC.js +737 -0
  102. package/dist/daemon-cli.js +34 -69
  103. package/dist/daemon-install-BEgffqDj.js +56 -0
  104. package/dist/daemon-install-DAorzotp.js +60 -0
  105. package/dist/daemon-install-helpers-B82uvJjJ.js +504 -0
  106. package/dist/daemon-install-helpers-BhL2Gh4l.js +504 -0
  107. package/dist/deliver-CCvDBk5c.js +481 -0
  108. package/dist/deliver-CqKw0wFi.js +481 -0
  109. package/dist/delivery-queue-CK7VnUJf.js +244 -0
  110. package/dist/delivery-queue-DMeQchpT.js +244 -0
  111. package/dist/devices-cli-C6UAfRV_.js +323 -0
  112. package/dist/devices-cli-Le-isdZB.js +319 -0
  113. package/dist/diagnostics-BhFwk6F3.js +35 -0
  114. package/dist/diagnostics-BtaQtaVR.js +35 -0
  115. package/dist/directory-cli-BqMfX5og.js +220 -0
  116. package/dist/directory-cli-DD72TTD4.js +224 -0
  117. package/dist/dispatcher-BLC2WYZv.js +173 -0
  118. package/dist/dispatcher-Cm2FAG_D.js +174 -0
  119. package/dist/dm-policy-shared-DOzpxMHC.js +22 -0
  120. package/dist/dm-policy-shared-DZY0f1bR.js +22 -0
  121. package/dist/dns-cli-BgsNg-bn.js +203 -0
  122. package/dist/dns-cli-CdMU5yuG.js +199 -0
  123. package/dist/dock-ByrYnLiz.js +929 -0
  124. package/dist/dock-CpNmmysM.js +928 -0
  125. package/dist/doctor-completion-BPeaRbmd.js +92 -0
  126. package/dist/doctor-completion-CfOyGJd3.js +92 -0
  127. package/dist/doctor-config-flow-DMyTycn7.js +1935 -0
  128. package/dist/doctor-config-flow-DoMu-pTm.js +1934 -0
  129. package/dist/enable-D5KetMo7.js +59 -0
  130. package/dist/entry.js +61 -1
  131. package/dist/env-BJ36dSrx.js +60 -0
  132. package/dist/errors-BfONuT95.js +35 -0
  133. package/dist/errors-_DSePI1C.js +35 -0
  134. package/dist/exec-DkFE7lqU.js +164 -0
  135. package/dist/exec-mY96dhIg.js +164 -0
  136. package/dist/extensionAPI.js +112 -76
  137. package/dist/fetch-B3EQXbTa.js +67 -0
  138. package/dist/fetch-BPeSHPvr.js +281 -0
  139. package/dist/fetch-BQ7HvRwe.js +67 -0
  140. package/dist/fetch-CbGTzJ8L.js +281 -0
  141. package/dist/fetch-CfIaWynF.js +67 -0
  142. package/dist/file-lock-BHfqppLm.js +107 -0
  143. package/dist/file-lock-CCBpdPM_.js +107 -0
  144. package/dist/fs-safe-BcEpbVjc.js +88 -0
  145. package/dist/fs-safe-S3Zvbabd.js +98 -0
  146. package/dist/gateway-cli-BXipRcsU.js +24602 -0
  147. package/dist/gateway-cli-Bv2K3rXx.js +24606 -0
  148. package/dist/gateway-rpc-BHnd7P1q.js +28 -0
  149. package/dist/gateway-rpc-COEQDswS.js +28 -0
  150. package/dist/gmail-setup-utils-BpdKFe3P.js +423 -0
  151. package/dist/gmail-setup-utils-CqbWr0Kq.js +422 -0
  152. package/dist/health-1ero5j64.js +1414 -0
  153. package/dist/health-ioP2au7j.js +1417 -0
  154. package/dist/heartbeat-visibility-C88L-_f2.js +125 -0
  155. package/dist/heartbeat-visibility-Dk_Q02qX.js +125 -0
  156. package/dist/hook-runner-global-BztoD8lu.js +527 -0
  157. package/dist/hooks-cli-B8D9DzRR.js +1226 -0
  158. package/dist/hooks-cli-rZ3GOXag.js +1222 -0
  159. package/dist/image-ops-Cx1ym2Hi.js +354 -0
  160. package/dist/image-ops-DWytvdh_.js +354 -0
  161. package/dist/import-CTUBsy7D.js +604 -0
  162. package/dist/import-cBp4f62k.js +606 -0
  163. package/dist/inbound-context-COwswi8z.js +68 -0
  164. package/dist/inbound-context-ChcNR30g.js +68 -0
  165. package/dist/index.js +127 -102
  166. package/dist/inspect-BsS3_z-x.js +286 -0
  167. package/dist/inspect-drfsUSIW.js +286 -0
  168. package/dist/installs-BFmmM5Zd.js +325 -0
  169. package/dist/installs-DA7SG0Tx.js +325 -0
  170. package/dist/ipv4-BZGSwnH4.js +46 -0
  171. package/dist/ipv4-DsOgHE0B.js +46 -0
  172. package/dist/ir-R3Pk8Cv8.js +972 -0
  173. package/dist/lifecycle-core-BZMeOT7u.js +474 -0
  174. package/dist/lifecycle-core-C6-_Gts0.js +476 -0
  175. package/dist/loader-CJ2UHqV7.js +22414 -0
  176. package/dist/loader-dEFvmwXu.js +22411 -0
  177. package/dist/logger-9I2fg5mr.js +49 -0
  178. package/dist/login-D9uJTyEv.js +62 -0
  179. package/dist/login-DTh702_w.js +61 -0
  180. package/dist/login-qr-BKsmW6XI.js +325 -0
  181. package/dist/login-qr-SOXdIR58.js +329 -0
  182. package/dist/logs-cli-BshJBHZQ.js +236 -0
  183. package/dist/logs-cli-Ckh-BBTT.js +240 -0
  184. package/dist/markdown-tables-Cfz7zDXI.js +29 -0
  185. package/dist/markdown-tables-DeFSK6aY.js +29 -0
  186. package/dist/media-BD2cZGXT.js +971 -0
  187. package/dist/media-CjvpnJmQ.js +10388 -0
  188. package/dist/message-action-names-CZHrHMRE.js +2520 -0
  189. package/dist/message-action-names-CiZ-0Smk.js +2520 -0
  190. package/dist/message-channel-EMCYRaxk.js +91 -0
  191. package/dist/mime-1E7nn9IU.js +146 -0
  192. package/dist/mime-mSgQeDnC.js +146 -0
  193. package/dist/net-Cg8AQeke.js +225 -0
  194. package/dist/net-DMh1m8AZ.js +225 -0
  195. package/dist/node-cli-BJ5CCbqx.js +1462 -0
  196. package/dist/node-cli-wYYhAs8x.js +1458 -0
  197. package/dist/node-service-CkwVlcey.js +67 -0
  198. package/dist/node-service-DTVW9YJh.js +67 -0
  199. package/dist/nodes-cli-CMFYLD1o.js +1346 -0
  200. package/dist/nodes-cli-DC2zUx3f.js +1350 -0
  201. package/dist/nodes-screen-6pXv1lYa.js +250 -0
  202. package/dist/nodes-screen-CTIZKksn.js +250 -0
  203. package/dist/note-CMELkPJN.js +92 -0
  204. package/dist/npm-registry-spec-BiJI7Rkr.js +786 -0
  205. package/dist/npm-registry-spec-Dza35Ig4.js +786 -0
  206. package/dist/npm-resolution-CUQGDty4.js +86 -0
  207. package/dist/npm-resolution-CwbZK9AI.js +86 -0
  208. package/dist/onboard-8Qd9lU8x.js +649 -0
  209. package/dist/onboard-Q3cY65m8.js +647 -0
  210. package/dist/onboard-auth-BUzYDEqf.js +211 -0
  211. package/dist/onboard-auth-DcVXyd-Z.js +207 -0
  212. package/dist/onboard-channels-BFHuA-AU.js +2548 -0
  213. package/dist/onboard-channels-DVrPP_ie.js +2547 -0
  214. package/dist/onboard-helpers-B-bBSsyR.js +363 -0
  215. package/dist/onboard-helpers-YsCa-sAt.js +364 -0
  216. package/dist/onboard-remote-BWFcuEOD.js +127 -0
  217. package/dist/onboard-remote-C0THuDTK.js +127 -0
  218. package/dist/onboarding-B31lnOPp.js +586 -0
  219. package/dist/onboarding-DmN_qC8e.js +588 -0
  220. package/dist/onboarding.finalize-DGD0PA-D.js +402 -0
  221. package/dist/onboarding.finalize-DNIb3meE.js +404 -0
  222. package/dist/onboarding.gateway-config-BaeIuA62.js +195 -0
  223. package/dist/onboarding.gateway-config-DMV2Odzr.js +201 -0
  224. package/dist/outbound-BdxBHDax.js +220 -0
  225. package/dist/outbound-D-Y9rMgB.js +221 -0
  226. package/dist/outbound-attachment-CvZ04r5k.js +18 -0
  227. package/dist/outbound-attachment-DYa1asB5.js +18 -0
  228. package/dist/outbound-attachment-DgUpk7Uh.js +18 -0
  229. package/dist/pairing-cli-BxTv78V7.js +125 -0
  230. package/dist/pairing-cli-CxUCzNUc.js +129 -0
  231. package/dist/pairing-labels-DVO6NJr0.js +9 -0
  232. package/dist/pairing-labels-D_pD8Cag.js +9 -0
  233. package/dist/pairing-store-Bu9pVlkO.js +459 -0
  234. package/dist/pairing-store-CWaGbAGi.js +460 -0
  235. package/dist/path-env-RsuO6yO-.js +89 -0
  236. package/dist/path-env-_my-d_iR.js +89 -0
  237. package/dist/path-safety-CfiVyVz7.js +14 -0
  238. package/dist/path-safety-D-wLK4pV.js +14 -0
  239. package/dist/plugin-auto-enable-CW01H36W.js +301 -0
  240. package/dist/plugin-auto-enable-CeHhBLCU.js +302 -0
  241. package/dist/plugin-registry-CWL37HnB.js +33 -0
  242. package/dist/plugin-registry-ELliiumZ.js +33 -0
  243. package/dist/plugin-sdk/auth/provider-auth.d.ts +0 -6
  244. package/dist/plugin-sdk/auto-reply/reply/agent-runner-utils.d.ts +9 -29
  245. package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +0 -2
  246. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/shared.d.ts +1 -1
  247. package/dist/plugin-sdk/auto-reply/reply/queue/types.d.ts +0 -2
  248. package/dist/plugin-sdk/auto-reply/status.d.ts +0 -4
  249. package/dist/plugin-sdk/auto-reply/templating.d.ts +0 -4
  250. package/dist/plugin-sdk/config/sessions/types.d.ts +0 -2
  251. package/dist/plugin-sdk/config/types.tools.d.ts +1 -59
  252. package/dist/plugin-sdk/config/types.tts.d.ts +2 -1
  253. package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +0 -177
  254. package/dist/plugin-sdk/config/zod-schema.core.d.ts +2 -230
  255. package/dist/plugin-sdk/config/zod-schema.d.ts +3 -192
  256. package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +3 -15
  257. package/dist/plugin-sdk/config/zod-schema.providers.d.ts +2 -10
  258. package/dist/plugin-sdk/config/zod-schema.session.d.ts +1 -5
  259. package/dist/plugin-sdk/gateway/protocol/index.d.ts +5 -5
  260. package/dist/plugin-sdk/index.js +72 -142
  261. package/dist/plugin-sdk/middleware/cli-runtime-base.d.ts +6 -0
  262. package/dist/plugin-sdk/middleware/runtimes/claude.d.ts +6 -0
  263. package/dist/plugin-sdk/middleware/runtimes/codex.d.ts +2 -2
  264. package/dist/plugin-sdk/plugin-sdk/index.d.ts +2 -0
  265. package/dist/plugin-sdk/plugins/manifest-registry.d.ts +2 -0
  266. package/dist/plugin-sdk/plugins/manifest.d.ts +2 -0
  267. package/dist/plugin-sdk/plugins/registry.d.ts +18 -0
  268. package/dist/plugin-sdk/plugins/types.d.ts +4 -0
  269. package/dist/plugin-sdk/stt/preflight.d.ts +2 -4
  270. package/dist/plugin-sdk/stt/providers/index.d.ts +1 -1
  271. package/dist/plugin-sdk/stt/providers/shared.d.ts +20 -1
  272. package/dist/plugin-sdk/tts/providers/edge.d.ts +2 -0
  273. package/dist/plugin-sdk/tts/providers/elevenlabs.d.ts +2 -0
  274. package/dist/plugin-sdk/tts/providers/index.d.ts +4 -0
  275. package/dist/plugin-sdk/tts/providers/openai.d.ts +2 -0
  276. package/dist/plugin-sdk/tts/tts.d.ts +13 -5
  277. package/dist/plugin-sdk/tts/types.d.ts +21 -0
  278. package/dist/plugins-DExsdlTp.js +455 -0
  279. package/dist/plugins-DdMgSc_b.js +453 -0
  280. package/dist/plugins-cli-DqBWiT_G.js +806 -0
  281. package/dist/plugins-cli-KQEzhU6P.js +802 -0
  282. package/dist/ports-CL0pXAXO.js +96 -0
  283. package/dist/ports-CRI-HSZx.js +370 -0
  284. package/dist/ports-DiQFcKUB.js +316 -0
  285. package/dist/ports-HRurfPIr.js +96 -0
  286. package/dist/preflight-6QRqxWh7.js +667 -0
  287. package/dist/preflight-DDZjr5KD.js +667 -0
  288. package/dist/program-DmhbOJj3.js +249 -0
  289. package/dist/program-context-PPMzZ6Gu.js +474 -0
  290. package/dist/prompt-select-styled-CmSWunD8.js +1669 -0
  291. package/dist/prompt-select-styled-PfxT9zl9.js +1672 -0
  292. package/dist/provider-auth-CfdnLqh3.js +187 -0
  293. package/dist/provider-auth-gpHOMUBP.js +187 -0
  294. package/dist/provider-dispatcher-D4eY8LZW.js +659 -0
  295. package/dist/provider-dispatcher-D5Q7M15D.js +660 -0
  296. package/dist/push-apns-BNwVMXX9.js +713 -0
  297. package/dist/push-apns-BszVkcZK.js +711 -0
  298. package/dist/pw-ai-Bdb3zrBM.js +1911 -0
  299. package/dist/pw-ai-BvcvEdGs.js +1908 -0
  300. package/dist/qr-cli-BBgk2ci1.js +349 -0
  301. package/dist/qr-cli-BLzVrhia.js +353 -0
  302. package/dist/redact-snapshot-CyBDcb_a.js +1966 -0
  303. package/dist/redact-snapshot-D9oPMqA-.js +1966 -0
  304. package/dist/register.agent-CAhKX3Ft.js +1019 -0
  305. package/dist/register.agent-RKHXtLLm.js +291 -0
  306. package/dist/register.configure-CW6XRGxV.js +129 -0
  307. package/dist/register.configure-dvrKc0j7.js +134 -0
  308. package/dist/register.import-CRLOolHv.js +31 -0
  309. package/dist/register.import-dhDEj7Om.js +29 -0
  310. package/dist/register.maintenance-EAhr1tJ9.js +500 -0
  311. package/dist/register.maintenance-lWz4v90u.js +502 -0
  312. package/dist/register.message-DyWkwUIU.js +690 -0
  313. package/dist/register.message-bl2Khz6c.js +686 -0
  314. package/dist/register.onboard-BAozmeei.js +97 -0
  315. package/dist/register.onboard-Da9hWQR1.js +93 -0
  316. package/dist/register.setup-DVrQWLoF.js +117 -0
  317. package/dist/register.setup-DbiLuuqg.js +113 -0
  318. package/dist/register.status-health-sessions-CA8ApUkH.js +668 -0
  319. package/dist/register.status-health-sessions-lGszs-NJ.js +428 -0
  320. package/dist/register.subclis-C-lqMygb.js +267 -0
  321. package/dist/replies-BTC1z8j0.js +136 -0
  322. package/dist/replies-BhlnuFp0.js +136 -0
  323. package/dist/reply-DZMooMoq.js +12880 -0
  324. package/dist/reply-directives-C0-hYyAt.js +182 -0
  325. package/dist/reply-directives-C_CGXLBJ.js +182 -0
  326. package/dist/reply-payloads-BospFSPI.js +527 -0
  327. package/dist/reply-prefix-DDgh77yy.js +37 -0
  328. package/dist/reply-prefix-DwKZPZyG.js +37 -0
  329. package/dist/reply-yGEQ0UW4.js +12877 -0
  330. package/dist/resolve-route-B73QhBIl.js +249 -0
  331. package/dist/resolve-route-DckdRbW8.js +249 -0
  332. package/dist/response-prefix-template-x5RBQnEy.js +134 -0
  333. package/dist/retry-CDrH81GP.js +77 -0
  334. package/dist/run-main-D869n5qf.js +307 -0
  335. package/dist/secure-random-CxzxAnMS.js +44 -0
  336. package/dist/security-cli-CfqosyUf.js +487 -0
  337. package/dist/security-cli-DMZun6gO.js +482 -0
  338. package/dist/send-3wvngctD.js +547 -0
  339. package/dist/send-AY7Fs5ky.js +374 -0
  340. package/dist/send-BSWD4Kr_.js +2245 -0
  341. package/dist/send-BT4HhTLm.js +349 -0
  342. package/dist/send-BvuxToC8.js +2245 -0
  343. package/dist/send-CaUxFvu0.js +492 -0
  344. package/dist/send-CiBRE4OY.js +1178 -0
  345. package/dist/send-Cidd4lQn.js +11 -0
  346. package/dist/send-Cq_Db9wG.js +1779 -0
  347. package/dist/send-DBFcxDPm.js +1776 -0
  348. package/dist/send-DUha0nIz.js +492 -0
  349. package/dist/send-DgYBI05s.js +332 -0
  350. package/dist/send-Dnf5bISH.js +426 -0
  351. package/dist/send-NcQk6UH1.js +547 -0
  352. package/dist/send-Og0-IMee.js +29 -0
  353. package/dist/send-oCN80Pl2.js +349 -0
  354. package/dist/server-DoGGLeP3.js +202 -0
  355. package/dist/server-V7G9FG2A.js +206 -0
  356. package/dist/server-lifecycle-CSWpSlvn.js +2437 -0
  357. package/dist/server-lifecycle-Cal8hBP1.js +2437 -0
  358. package/dist/server-node-events-DSee6jSG.js +394 -0
  359. package/dist/server-node-events-DbQWkU3M.js +390 -0
  360. package/dist/service-Duw0xMJX.js +670 -0
  361. package/dist/service-SRcnA1Am.js +670 -0
  362. package/dist/session-BLcfWX5_.js +170 -0
  363. package/dist/session-CQwkaAs-.js +170 -0
  364. package/dist/session-cost-usage-C-UcrvL4.js +627 -0
  365. package/dist/session-cost-usage-Dg3dzS0E.js +627 -0
  366. package/dist/session-dirs-D6mFEF90.js +318 -0
  367. package/dist/session-dirs-DVsG6e7L.js +318 -0
  368. package/dist/session-utils-C6522g3D.js +622 -0
  369. package/dist/session-utils-Dq2BJyVy.js +622 -0
  370. package/dist/sessions-CNkj4Eq8.js +247 -0
  371. package/dist/sessions-DDIoP7Rl.js +2569 -0
  372. package/dist/shell-env-D8nXPDbP.js +163 -0
  373. package/dist/ssrf-7I3FUHpm.js +183 -0
  374. package/dist/ssrf-DZi4qw5c.js +183 -0
  375. package/dist/status-CrAe8ZYt.js +1983 -0
  376. package/dist/status-DetRJxvZ.js +1979 -0
  377. package/dist/status.update-DquSK3p7.js +449 -0
  378. package/dist/status.update-iABAY3iW.js +449 -0
  379. package/dist/store-Bnm6zwaq.js +2571 -0
  380. package/dist/store-CVkGKjWm.js +64 -0
  381. package/dist/store-D_gpBpAW.js +64 -0
  382. package/dist/store-mxh63FBa.js +53 -0
  383. package/dist/subagent-registry-DNAz7Heu.js +4856 -0
  384. package/dist/subagent-registry-Dhz6HC4Z.js +4854 -0
  385. package/dist/subsystem-DGSHVL8I.js +1081 -0
  386. package/dist/subsystem-m7RSGQoR.js +1196 -0
  387. package/dist/system-cli-ByVDF6p8.js +77 -0
  388. package/dist/system-cli-CERb89Bl.js +73 -0
  389. package/dist/systemd-CSUtfsJx.js +547 -0
  390. package/dist/systemd-hints-BCxkQemJ.js +278 -0
  391. package/dist/systemd-hints-ef7m-7ZH.js +278 -0
  392. package/dist/systemd-linger-CWLgT0Wr.js +75 -0
  393. package/dist/systemd-linger-DT0E7YET.js +75 -0
  394. package/dist/systemd-tS61V4ao.js +547 -0
  395. package/dist/tables-DED01JNI.js +55 -0
  396. package/dist/tables-K3rOiGaJ.js +55 -0
  397. package/dist/tables-NcsXz3r_.js +55 -0
  398. package/dist/tailnet-CEudzG0i.js +40 -0
  399. package/dist/tailnet-D66Y5zC7.js +40 -0
  400. package/dist/tailscale-DjSRjPA-.js +230 -0
  401. package/dist/tailscale-DngZHD9L.js +230 -0
  402. package/dist/targets-BOpYPsGM.js +2545 -0
  403. package/dist/targets-BVsxzQh1.js +220 -0
  404. package/dist/targets-C99szk_e.js +114 -0
  405. package/dist/targets-CA4zx5G4.js +650 -0
  406. package/dist/targets-CTNm3bJ8.js +2544 -0
  407. package/dist/targets-DpmQjetK.js +53 -0
  408. package/dist/targets-Q-YGeAqu.js +650 -0
  409. package/dist/targets-rdWlC6Y-.js +53 -0
  410. package/dist/tool-display-Br6mwaJc.js +785 -0
  411. package/dist/tool-display-CLBf5cRa.js +785 -0
  412. package/dist/tool-images-DB4f57XK.js +263 -0
  413. package/dist/tool-images-kloBqxqK.js +263 -0
  414. package/dist/trash-B32LfX0l.js +125 -0
  415. package/dist/trash-SlUJxKO7.js +125 -0
  416. package/dist/tui-CHOtFK6k.js +3282 -0
  417. package/dist/tui-D4yiSpop.js +3282 -0
  418. package/dist/tui-cli-CzrjmAMZ.js +66 -0
  419. package/dist/tui-cli-Dpbs2QW_.js +62 -0
  420. package/dist/update-B5nYVxpc.js +349 -0
  421. package/dist/update-Bs3HhSnE.js +349 -0
  422. package/dist/update-cli-D_yz9Kyz.js +1147 -0
  423. package/dist/update-cli-DdfwNAsA.js +1149 -0
  424. package/dist/usage-BVyabt5E.js +5421 -0
  425. package/dist/voice-credentials-CI4VgB6u.js +46 -0
  426. package/dist/voice-credentials-l_d_gZiG.js +46 -0
  427. package/dist/web-B5xSAAH2.js +74 -0
  428. package/dist/web-Cc4tDVO9.js +3067 -0
  429. package/dist/web-Cdp9_IUk.js +79 -0
  430. package/dist/webhooks-cli-BDPcBkZL.js +330 -0
  431. package/dist/webhooks-cli-sRfsNesg.js +334 -0
  432. package/dist/whatsapp-actions-BGZXdWiP.js +125 -0
  433. package/dist/whatsapp-actions-HdmZu8oU.js +130 -0
  434. package/dist/workspace-D5LAl41l.js +449 -0
  435. package/dist/workspace-DRYGbrDM.js +447 -0
  436. package/dist/zod-schema-C8gEV0uz.js +2739 -0
  437. package/dist/zod-schema-CCUbW_Si.js +2739 -0
  438. package/package.json +1 -1
  439. package/dist/accounts-Aqbb2_Fn.js +0 -270
  440. package/dist/accounts-Bo2bX8jP.js +0 -272
  441. package/dist/accounts-D3fAPVzU.js +0 -36
  442. package/dist/accounts-DUEDngp6.js +0 -32
  443. package/dist/accounts-DZmv4bXS.js +0 -47
  444. package/dist/accounts-DmB4SVPK.js +0 -47
  445. package/dist/accounts-DtkyfvwR.js +0 -36
  446. package/dist/ack-reactions-Bvfy17SM.js +0 -446
  447. package/dist/ack-reactions-DYU8uhcz.js +0 -446
  448. package/dist/acp-cli-DVXhDMc6.js +0 -1324
  449. package/dist/acp-cli-QBL4_qcW.js +0 -1319
  450. package/dist/active-listener-CwxZ24bZ.js +0 -37
  451. package/dist/active-listener-v2sItamh.js +0 -37
  452. package/dist/agent-BisC5WZ6.js +0 -704
  453. package/dist/agent-Bqdrc0AK.js +0 -703
  454. package/dist/agent-helpers-BSGqeJr-.js +0 -400
  455. package/dist/agent-scope-_ND_-bJy.js +0 -116
  456. package/dist/agents-khSbraAA.js +0 -760
  457. package/dist/agents.config-D8gLHPWo.js +0 -116
  458. package/dist/audio-BIvUsncf.js +0 -43
  459. package/dist/audio-CQ8TfmVN.js +0 -43
  460. package/dist/audit-C0x7Cm6K.js +0 -3150
  461. package/dist/audit-CAY-uzWP.js +0 -3150
  462. package/dist/auth-DGqCLaQq.js +0 -448
  463. package/dist/auth-DLTRySEi.js +0 -314
  464. package/dist/auth-Drf91ntw.js +0 -315
  465. package/dist/auth-ku2khJyQ.js +0 -448
  466. package/dist/banner-txHC40UW.js +0 -294
  467. package/dist/binaries-BTvHIrCr.js +0 -13
  468. package/dist/bindings-DsWJQVKh.js +0 -69
  469. package/dist/bonjour-discovery-BElR62fH.js +0 -378
  470. package/dist/bonjour-discovery-C8XyVsjb.js +0 -378
  471. package/dist/browser-cli-DxJew43l.js +0 -1694
  472. package/dist/browser-cli-p0nakrjO.js +0 -1690
  473. package/dist/call-BrTmlOx3.js +0 -518
  474. package/dist/call-ChdUdwb4.js +0 -517
  475. package/dist/catalog-DTlcfTT9.js +0 -185
  476. package/dist/catalog-PixZqhZK.js +0 -185
  477. package/dist/channel-account-context-BO245Tcn.js +0 -133
  478. package/dist/channel-account-context-BgK0hm-I.js +0 -133
  479. package/dist/channel-activity-B0qlUR5e.js +0 -292
  480. package/dist/channel-activity-C-L6rDrQ.js +0 -94
  481. package/dist/channel-activity-DdgLBZ7M.js +0 -94
  482. package/dist/channel-options-CjlvAHSH.js +0 -32
  483. package/dist/channel-options-DpjP7qQf.js +0 -33
  484. package/dist/channel-selection-DW21dXB1.js +0 -51
  485. package/dist/channel-selection-wK_6S2Ku.js +0 -51
  486. package/dist/channel-web-COTkzJBt.js +0 -2136
  487. package/dist/channel-web-DUz5bn9h.js +0 -2134
  488. package/dist/channels-cli-D8RS8g2Q.js +0 -1438
  489. package/dist/channels-cli-X_8rENR6.js +0 -1434
  490. package/dist/channels-status-issues-B6I2l7Sm.js +0 -18
  491. package/dist/channels-status-issues-DhDH2fWp.js +0 -18
  492. package/dist/chrome-Dqtq7zCc.js +0 -1733
  493. package/dist/chrome-XeSY99Z_.js +0 -1732
  494. package/dist/chunk-CWD_zrz_.js +0 -341
  495. package/dist/chunk-LUabyS9k.js +0 -341
  496. package/dist/clack-prompter-fAgbvPW4.js +0 -122
  497. package/dist/clack-prompter-kf9qTN5p.js +0 -121
  498. package/dist/cli-BjPLpuZR.js +0 -133
  499. package/dist/cli-fFyOTtkD.js +0 -129
  500. package/dist/client-B9u3JdT_.js +0 -2316
  501. package/dist/client-DEEOhx0w.js +0 -2316
  502. package/dist/clipboard-B2nstLx7.js +0 -31
  503. package/dist/clipboard-C8QI9fes.js +0 -31
  504. package/dist/command-format-D0vKipG9.js +0 -32
  505. package/dist/command-format-LFmgWzKJ.js +0 -18
  506. package/dist/command-registry-BsPaMI53.js +0 -215
  507. package/dist/commands-BAYwlS3d.js +0 -41
  508. package/dist/commands-D842kCjj.js +0 -41
  509. package/dist/commands-registry-Cg2GTT2J.js +0 -892
  510. package/dist/commands-registry-Yz-uV5oG.js +0 -891
  511. package/dist/common-B67cBSew.js +0 -156
  512. package/dist/common-DEoiTqOr.js +0 -156
  513. package/dist/completion-cli-BO5mIPLa.js +0 -452
  514. package/dist/completion-cli-z9a6MVgr.js +0 -452
  515. package/dist/config-CAa0rZSx.js +0 -4225
  516. package/dist/config-W0w-gi2j.js +0 -4223
  517. package/dist/config-cli-DdRue35G.js +0 -243
  518. package/dist/config-cli-uOwxu5AC.js +0 -247
  519. package/dist/config-guard-BI85dxHR.js +0 -99
  520. package/dist/config-guard-DQqnigKh.js +0 -75
  521. package/dist/config-validation-D-h4LHyA.js +0 -18
  522. package/dist/config-validation-Df_kroIQ.js +0 -18
  523. package/dist/configure-B7ChPbXv.js +0 -891
  524. package/dist/configure-QspkIXME.js +0 -889
  525. package/dist/control-auth-BrBr2xb8.js +0 -397
  526. package/dist/control-auth-CehjYKnL.js +0 -397
  527. package/dist/control-ui-assets-D8F383Mo.js +0 -186
  528. package/dist/control-ui-assets-DYKtRIm0.js +0 -186
  529. package/dist/conversation-label-Bn5j3lUT.js +0 -36
  530. package/dist/conversation-label-CDH4rKMG.js +0 -36
  531. package/dist/cron-cli-DVzDHzAX.js +0 -494
  532. package/dist/cron-cli-gkH2qKM4.js +0 -498
  533. package/dist/daemon-cli-BTdNO1vH.js +0 -737
  534. package/dist/daemon-cli-DNNqI2LD.js +0 -735
  535. package/dist/daemon-install-CaEHG92p.js +0 -56
  536. package/dist/daemon-install-DbpDSDfW.js +0 -60
  537. package/dist/daemon-install-helpers-DjE_WnlY.js +0 -504
  538. package/dist/daemon-install-helpers-DocTUxqQ.js +0 -504
  539. package/dist/deliver-CDcL8ok6.js +0 -481
  540. package/dist/deliver-CS8JsevV.js +0 -481
  541. package/dist/delivery-queue-CTaYZQ_8.js +0 -244
  542. package/dist/delivery-queue-DMZ7mH8P.js +0 -244
  543. package/dist/devices-cli-BBJ4His-.js +0 -319
  544. package/dist/devices-cli-DHSJSFW1.js +0 -323
  545. package/dist/diagnostics-BSvCaLNs.js +0 -35
  546. package/dist/diagnostics-mWFAsFeo.js +0 -35
  547. package/dist/directory-cli-C-oHD_XE.js +0 -224
  548. package/dist/directory-cli-Cw99VGvr.js +0 -220
  549. package/dist/dispatcher-C8d1NNLZ.js +0 -174
  550. package/dist/dispatcher-DY6Ga60j.js +0 -173
  551. package/dist/dm-policy-shared-CRQ-Wr5g.js +0 -22
  552. package/dist/dm-policy-shared-CXXf2ltd.js +0 -22
  553. package/dist/dns-cli-BOqx9qo1.js +0 -199
  554. package/dist/dns-cli-WfqSC3JU.js +0 -203
  555. package/dist/dock-Big-J2VN.js +0 -929
  556. package/dist/dock-Cj4PKiUh.js +0 -928
  557. package/dist/doctor-completion-hYqcZ7IE.js +0 -92
  558. package/dist/doctor-completion-nxQQ5bEw.js +0 -92
  559. package/dist/doctor-config-flow-BUuADMDa.js +0 -1935
  560. package/dist/doctor-config-flow-yOUpQC2B.js +0 -1934
  561. package/dist/enable-DC9V0nTO.js +0 -59
  562. package/dist/env-B3zr72vQ.js +0 -60
  563. package/dist/errors-CdmXrBic.js +0 -35
  564. package/dist/errors-Cr_NbOb4.js +0 -35
  565. package/dist/exec-D_s-zAtY.js +0 -164
  566. package/dist/exec-Zz6eJ6YU.js +0 -164
  567. package/dist/fetch-BIZkXB5i.js +0 -67
  568. package/dist/fetch-DRVdxxEj.js +0 -67
  569. package/dist/fetch-DTR2MlOk.js +0 -67
  570. package/dist/file-lock-6NXMPZTT.js +0 -107
  571. package/dist/file-lock-C_KRlR7M.js +0 -107
  572. package/dist/fs-safe-DZHpH7TI.js +0 -98
  573. package/dist/fs-safe-vm3JMUkq.js +0 -88
  574. package/dist/gateway-cli-DEW-Ukmc.js +0 -24351
  575. package/dist/gateway-cli-DQYcZCOV.js +0 -24347
  576. package/dist/gateway-rpc-BCFkQPa2.js +0 -28
  577. package/dist/gateway-rpc-DOgYbsOG.js +0 -28
  578. package/dist/gmail-setup-utils-DMeA1UM1.js +0 -423
  579. package/dist/gmail-setup-utils-FHWSAur3.js +0 -422
  580. package/dist/health-BrLNGkZV.js +0 -1414
  581. package/dist/health-C8p9mnfl.js +0 -1417
  582. package/dist/heartbeat-visibility-CJVdaMZF.js +0 -125
  583. package/dist/heartbeat-visibility-DwK1UL0t.js +0 -125
  584. package/dist/hook-runner-global-C0DFQmQw.js +0 -527
  585. package/dist/hooks-cli-DEKi-tbA.js +0 -1221
  586. package/dist/hooks-cli-FndXPMD3.js +0 -1225
  587. package/dist/image-ops-B9ofmzSq.js +0 -354
  588. package/dist/image-ops-CMuvRsMY.js +0 -354
  589. package/dist/import-BH13F5mT.js +0 -606
  590. package/dist/import-D8HVcDqO.js +0 -604
  591. package/dist/inbound-context-BLy-G2Eq.js +0 -68
  592. package/dist/inbound-context-CmmmT8IP.js +0 -68
  593. package/dist/inbound-path-policy-BdmTOUka.js +0 -90
  594. package/dist/inbound-path-policy-BurOAu44.js +0 -90
  595. package/dist/inspect-nW8LAukU.js +0 -286
  596. package/dist/inspect-xy2EHy8G.js +0 -286
  597. package/dist/installs-CpfHmKY1.js +0 -325
  598. package/dist/installs-DebiMrGj.js +0 -325
  599. package/dist/ipv4-ysiNGssl.js +0 -46
  600. package/dist/ipv4-zc_Hfvbp.js +0 -46
  601. package/dist/ir-CaxTklDC.js +0 -940
  602. package/dist/lifecycle-core-Z5SScMlU.js +0 -476
  603. package/dist/lifecycle-core-pPwYSt7m.js +0 -474
  604. package/dist/loader-BapIdJyx.js +0 -22404
  605. package/dist/loader-BdAToyDH.js +0 -22401
  606. package/dist/local-roots-CrJ_Jv_G.js +0 -314
  607. package/dist/local-roots-n_Y4iYwb.js +0 -313
  608. package/dist/logger-B8yHnzPl.js +0 -49
  609. package/dist/login-C99fsB0N.js +0 -61
  610. package/dist/login-cLvGPjeO.js +0 -62
  611. package/dist/login-qr-CGqRFwgl.js +0 -329
  612. package/dist/login-qr-dnY5DC2C.js +0 -325
  613. package/dist/logs-cli-Bda7xY4N.js +0 -236
  614. package/dist/logs-cli-HzR-vnpD.js +0 -240
  615. package/dist/markdown-tables-58Hq__7K.js +0 -29
  616. package/dist/markdown-tables-GFEX0OR6.js +0 -29
  617. package/dist/media-CFsyXs3H.js +0 -940
  618. package/dist/media-Du5SHtnp.js +0 -10452
  619. package/dist/message-action-names-BfuEvR6j.js +0 -2521
  620. package/dist/message-action-names-CVBkpOLt.js +0 -2521
  621. package/dist/message-channel-FMNRI5Ax.js +0 -91
  622. package/dist/mime-AuIDUZPG.js +0 -149
  623. package/dist/mime-Cqg1jjia.js +0 -149
  624. package/dist/net-BEFkF-nI.js +0 -225
  625. package/dist/net-CNsUGiSw.js +0 -225
  626. package/dist/node-cli-Bu-InsO9.js +0 -1462
  627. package/dist/node-cli-DE7Pm7Fr.js +0 -1458
  628. package/dist/node-service-CumFZc9L.js +0 -67
  629. package/dist/node-service-DY1gG06I.js +0 -67
  630. package/dist/nodes-cli-B5aAExN0.js +0 -1350
  631. package/dist/nodes-cli-eKRqlKuO.js +0 -1346
  632. package/dist/nodes-screen-B3Sij1uT.js +0 -250
  633. package/dist/nodes-screen-DEvpoFmH.js +0 -250
  634. package/dist/note-CPFJCWJJ.js +0 -92
  635. package/dist/npm-registry-spec-BgMtTHvq.js +0 -786
  636. package/dist/npm-registry-spec-Dz3z1Zpd.js +0 -786
  637. package/dist/npm-resolution-Buio63BQ.js +0 -86
  638. package/dist/npm-resolution-gH1zHW2a.js +0 -86
  639. package/dist/onboard-BSf6qJWk.js +0 -647
  640. package/dist/onboard-V-SsZRk-.js +0 -649
  641. package/dist/onboard-auth-C_wHkop1.js +0 -207
  642. package/dist/onboard-auth-CkCBLvTg.js +0 -211
  643. package/dist/onboard-channels-DQTGPC18.js +0 -2548
  644. package/dist/onboard-channels-DSDQfR0u.js +0 -2547
  645. package/dist/onboard-helpers-Q7M6vdzh.js +0 -363
  646. package/dist/onboard-helpers-SCO3k5Y8.js +0 -364
  647. package/dist/onboard-remote-Co2hv1AD.js +0 -127
  648. package/dist/onboard-remote-Dl3BFSg2.js +0 -127
  649. package/dist/onboarding-B0bJfZ20.js +0 -588
  650. package/dist/onboarding-CeBR9OBi.js +0 -586
  651. package/dist/onboarding.finalize-BPgfWPB9.js +0 -404
  652. package/dist/onboarding.finalize-BmfLvNPJ.js +0 -402
  653. package/dist/onboarding.gateway-config-BL0Q7Wpg.js +0 -201
  654. package/dist/onboarding.gateway-config-D2QsXMYO.js +0 -195
  655. package/dist/outbound-CcaPcetn.js +0 -220
  656. package/dist/outbound-CeiW8z3a.js +0 -221
  657. package/dist/outbound-attachment-BIvFb3Is.js +0 -18
  658. package/dist/outbound-attachment-Bfm5-JYe.js +0 -18
  659. package/dist/outbound-attachment-CZ7zoYxB.js +0 -18
  660. package/dist/pairing-cli-CgX79ujL.js +0 -125
  661. package/dist/pairing-cli-DvbbXFgC.js +0 -129
  662. package/dist/pairing-labels-3wDxaApH.js +0 -9
  663. package/dist/pairing-labels-DCbWnbWk.js +0 -9
  664. package/dist/pairing-store-CdY7iRS0.js +0 -459
  665. package/dist/pairing-store-DykkYpQ7.js +0 -460
  666. package/dist/path-env-Cqo5LZmw.js +0 -89
  667. package/dist/path-env-GTM4HXCN.js +0 -89
  668. package/dist/path-safety-CXKAVpMp.js +0 -14
  669. package/dist/path-safety-DGB91qBk.js +0 -14
  670. package/dist/plugin-auto-enable-C6FPGg_-.js +0 -301
  671. package/dist/plugin-auto-enable-L8eOc8iC.js +0 -302
  672. package/dist/plugin-registry-CHlaWZD7.js +0 -33
  673. package/dist/plugin-registry-DQdMze4z.js +0 -33
  674. package/dist/plugin-sdk/auth/session-override.d.ts +0 -17
  675. package/dist/plugin-sdk/auto-reply/reply/directive-handling.auth.d.ts +0 -18
  676. package/dist/plugin-sdk/link-understanding/apply.d.ts +0 -10
  677. package/dist/plugin-sdk/link-understanding/defaults.d.ts +0 -2
  678. package/dist/plugin-sdk/link-understanding/detect.d.ts +0 -3
  679. package/dist/plugin-sdk/link-understanding/format.d.ts +0 -4
  680. package/dist/plugin-sdk/link-understanding/runner.d.ts +0 -11
  681. package/dist/plugin-sdk/media/input-files.d.ts +0 -95
  682. package/dist/plugin-sdk/media-understanding/apply.d.ts +0 -19
  683. package/dist/plugin-sdk/media-understanding/attachments.d.ts +0 -49
  684. package/dist/plugin-sdk/media-understanding/concurrency.d.ts +0 -1
  685. package/dist/plugin-sdk/media-understanding/defaults.d.ts +0 -11
  686. package/dist/plugin-sdk/media-understanding/errors.d.ts +0 -6
  687. package/dist/plugin-sdk/media-understanding/format.d.ts +0 -7
  688. package/dist/plugin-sdk/media-understanding/fs.d.ts +0 -1
  689. package/dist/plugin-sdk/media-understanding/output-extract.d.ts +0 -2
  690. package/dist/plugin-sdk/media-understanding/providers/anthropic/index.d.ts +0 -2
  691. package/dist/plugin-sdk/media-understanding/providers/deepgram/audio.d.ts +0 -1
  692. package/dist/plugin-sdk/media-understanding/providers/deepgram/index.d.ts +0 -2
  693. package/dist/plugin-sdk/media-understanding/providers/google/audio.d.ts +0 -1
  694. package/dist/plugin-sdk/media-understanding/providers/google/index.d.ts +0 -2
  695. package/dist/plugin-sdk/media-understanding/providers/google/video.d.ts +0 -3
  696. package/dist/plugin-sdk/media-understanding/providers/groq/index.d.ts +0 -2
  697. package/dist/plugin-sdk/media-understanding/providers/index.d.ts +0 -4
  698. package/dist/plugin-sdk/media-understanding/providers/minimax/index.d.ts +0 -2
  699. package/dist/plugin-sdk/media-understanding/providers/mistral/index.d.ts +0 -2
  700. package/dist/plugin-sdk/media-understanding/providers/moonshot/index.d.ts +0 -2
  701. package/dist/plugin-sdk/media-understanding/providers/moonshot/video.d.ts +0 -3
  702. package/dist/plugin-sdk/media-understanding/providers/openai/audio.d.ts +0 -1
  703. package/dist/plugin-sdk/media-understanding/providers/openai/index.d.ts +0 -2
  704. package/dist/plugin-sdk/media-understanding/providers/shared.d.ts +0 -20
  705. package/dist/plugin-sdk/media-understanding/providers/zai/index.d.ts +0 -2
  706. package/dist/plugin-sdk/media-understanding/resolve.d.ts +0 -44
  707. package/dist/plugin-sdk/media-understanding/runner.d.ts +0 -34
  708. package/dist/plugin-sdk/media-understanding/runner.entries.d.ts +0 -33
  709. package/dist/plugin-sdk/media-understanding/scope.d.ts +0 -9
  710. package/dist/plugin-sdk/media-understanding/types.d.ts +0 -59
  711. package/dist/plugin-sdk/media-understanding/video.d.ts +0 -2
  712. package/dist/plugin-sdk/utils/mask-api-key.d.ts +0 -1
  713. package/dist/plugin-sdk/utils/run-with-concurrency.d.ts +0 -11
  714. package/dist/plugins-7B167wIj.js +0 -453
  715. package/dist/plugins-BRHOfy1Z.js +0 -455
  716. package/dist/plugins-cli--I43zIaS.js +0 -797
  717. package/dist/plugins-cli-DIxMbY9I.js +0 -801
  718. package/dist/ports-BS8kQkd9.js +0 -96
  719. package/dist/ports-CAqyeQYZ.js +0 -316
  720. package/dist/ports-CTUgXF2d.js +0 -96
  721. package/dist/ports-DqfnVnCw.js +0 -370
  722. package/dist/preflight-CaRJtknt.js +0 -64
  723. package/dist/preflight-DeDRKMx4.js +0 -68
  724. package/dist/program-context-9dv7ClZz.js +0 -474
  725. package/dist/program-wVSvyiD-.js +0 -248
  726. package/dist/prompt-select-styled-BE_4W66Z.js +0 -1672
  727. package/dist/prompt-select-styled-BTPf06Os.js +0 -1669
  728. package/dist/provider-dispatcher-VZWITjmt.js +0 -660
  729. package/dist/provider-dispatcher-zYYGo00g.js +0 -659
  730. package/dist/push-apns-Cj0Ryn18.js +0 -713
  731. package/dist/push-apns-fFfYCqda.js +0 -711
  732. package/dist/pw-ai-CnN2sITD.js +0 -1908
  733. package/dist/pw-ai-fnX3cecw.js +0 -1911
  734. package/dist/qr-cli-CriPg41m.js +0 -349
  735. package/dist/qr-cli-DSURqD0D.js +0 -353
  736. package/dist/redact-snapshot-BecRL_h6.js +0 -2016
  737. package/dist/redact-snapshot-pTdzSrex.js +0 -2016
  738. package/dist/register.agent-B5_1XatO.js +0 -290
  739. package/dist/register.agent-Dba3CYyo.js +0 -1018
  740. package/dist/register.configure-DmwHGsPG.js +0 -128
  741. package/dist/register.configure-DrPlgBqB.js +0 -133
  742. package/dist/register.import-CPQqqdje.js +0 -31
  743. package/dist/register.import-D1UaH1QV.js +0 -29
  744. package/dist/register.maintenance-D76tiF4W.js +0 -501
  745. package/dist/register.maintenance-hUriFBfi.js +0 -499
  746. package/dist/register.message--VzmF3u4.js +0 -685
  747. package/dist/register.message-itNWUdvP.js +0 -689
  748. package/dist/register.onboard-Co8D908b.js +0 -93
  749. package/dist/register.onboard-q8JzWtuv.js +0 -97
  750. package/dist/register.setup-Djc6jZTc.js +0 -113
  751. package/dist/register.setup-hhPii4O7.js +0 -117
  752. package/dist/register.status-health-sessions-C1FhACQB.js +0 -668
  753. package/dist/register.status-health-sessions-DcUegHcH.js +0 -428
  754. package/dist/register.subclis-DAfihpBz.js +0 -267
  755. package/dist/replies-IpiCq1Ht.js +0 -136
  756. package/dist/replies-LSx_XhsP.js +0 -136
  757. package/dist/reply-D0CLqcBY.js +0 -13718
  758. package/dist/reply-Djq8ghfI.js +0 -13715
  759. package/dist/reply-directives-Cz7622Qx.js +0 -182
  760. package/dist/reply-directives-ssnaPNiU.js +0 -182
  761. package/dist/reply-payloads-CQMtrphw.js +0 -527
  762. package/dist/reply-prefix-CWcAZKhE.js +0 -37
  763. package/dist/reply-prefix-Drq7Pf3A.js +0 -37
  764. package/dist/resolve-route-B8uIc2H3.js +0 -249
  765. package/dist/resolve-route-C8ooNlI4.js +0 -249
  766. package/dist/response-prefix-template-DPOggmPO.js +0 -134
  767. package/dist/retry-BdhJlZQI.js +0 -77
  768. package/dist/run-main-B-Cb62fC.js +0 -306
  769. package/dist/runner-DUnmgjJ8.js +0 -2394
  770. package/dist/runner-EobZIrDt.js +0 -2394
  771. package/dist/secure-random-B5qmFc3N.js +0 -44
  772. package/dist/security-cli-05blEYyC.js +0 -482
  773. package/dist/security-cli-DYbt8duB.js +0 -487
  774. package/dist/send-7O3-bRtl.js +0 -547
  775. package/dist/send-9Huf62k3.js +0 -2245
  776. package/dist/send-B9mIJdUo.js +0 -547
  777. package/dist/send-Bj0RXr-a.js +0 -492
  778. package/dist/send-BzkAsn7K.js +0 -29
  779. package/dist/send-CXFhFLP9.js +0 -11
  780. package/dist/send-Ce_BDa8P.js +0 -349
  781. package/dist/send-ChvasRSh.js +0 -1779
  782. package/dist/send-Cl5BhbnF.js +0 -426
  783. package/dist/send-CpebTvM6.js +0 -374
  784. package/dist/send-DWf7BCPe.js +0 -492
  785. package/dist/send-DX8QSuSI.js +0 -1174
  786. package/dist/send-DZRn6PT2.js +0 -332
  787. package/dist/send-Dd2_MykI.js +0 -2245
  788. package/dist/send-IJaUAa8H.js +0 -1776
  789. package/dist/send-vvZXksNU.js +0 -349
  790. package/dist/server-BrzR9JmX.js +0 -206
  791. package/dist/server-_h27-uP_.js +0 -202
  792. package/dist/server-lifecycle-CUdA6Far.js +0 -2437
  793. package/dist/server-lifecycle-DQZWL8iP.js +0 -2437
  794. package/dist/server-node-events-DgB1z2Cx.js +0 -392
  795. package/dist/server-node-events-DtvPfM1I.js +0 -396
  796. package/dist/service-9le8AnC-.js +0 -670
  797. package/dist/service-Drb0kx6I.js +0 -670
  798. package/dist/session-BIAOl5QR.js +0 -170
  799. package/dist/session-Wu00pCn_.js +0 -170
  800. package/dist/session-cost-usage-7plmOKbs.js +0 -627
  801. package/dist/session-cost-usage-CPFxBFUg.js +0 -627
  802. package/dist/session-dirs-CfIrIJxG.js +0 -318
  803. package/dist/session-dirs-DlPpWt5Q.js +0 -318
  804. package/dist/session-utils-Sd9w4vc1.js +0 -622
  805. package/dist/session-utils-iL47hYmZ.js +0 -622
  806. package/dist/sessions-6pKQ3gN3.js +0 -247
  807. package/dist/sessions-ZRmCDdj1.js +0 -2569
  808. package/dist/shell-env-DYZq9PqC.js +0 -163
  809. package/dist/ssrf-B-rF_tZB.js +0 -183
  810. package/dist/ssrf-DJW14Wkh.js +0 -183
  811. package/dist/status-CTRQCXRj.js +0 -1979
  812. package/dist/status-Y67xsH93.js +0 -1983
  813. package/dist/status.update-DlBReI5-.js +0 -449
  814. package/dist/status.update-v7fEQ7R9.js +0 -449
  815. package/dist/store-B5989JkX.js +0 -64
  816. package/dist/store-BgtgYJoX.js +0 -53
  817. package/dist/store-DCrrxHyS.js +0 -2571
  818. package/dist/store-Ql6vAcsg.js +0 -64
  819. package/dist/subagent-registry-BGknZEUI.js +0 -4856
  820. package/dist/subagent-registry-CWeRBjfn.js +0 -4854
  821. package/dist/subsystem-Ct6qOOqZ.js +0 -1079
  822. package/dist/subsystem-PQ64_nsu.js +0 -1136
  823. package/dist/system-cli-CmO-4Rju.js +0 -77
  824. package/dist/system-cli-VBsa18K6.js +0 -73
  825. package/dist/systemd-CqFpK30Y.js +0 -547
  826. package/dist/systemd-fK9AV5bP.js +0 -547
  827. package/dist/systemd-hints-D3rr0j14.js +0 -278
  828. package/dist/systemd-hints-DNOSRaqA.js +0 -278
  829. package/dist/systemd-linger-B907NVVy.js +0 -75
  830. package/dist/systemd-linger-wYksBbM7.js +0 -75
  831. package/dist/tables-Boxa9MJH.js +0 -55
  832. package/dist/tables-CO_kxD0e.js +0 -55
  833. package/dist/tables-WZp8Vt9n.js +0 -55
  834. package/dist/tailnet-CfZhpSnt.js +0 -40
  835. package/dist/tailnet-D0NV0tRJ.js +0 -40
  836. package/dist/tailscale-B__xvMjA.js +0 -230
  837. package/dist/tailscale-q_ZrxUCc.js +0 -230
  838. package/dist/targets-B4rMyQFJ.js +0 -53
  839. package/dist/targets-BHYLCv06.js +0 -2534
  840. package/dist/targets-BjWhDMJM.js +0 -650
  841. package/dist/targets-BnpMZZC_.js +0 -120
  842. package/dist/targets-CHwGDIgO.js +0 -650
  843. package/dist/targets-DIDKlfKI.js +0 -220
  844. package/dist/targets-bqjVeCnF.js +0 -2535
  845. package/dist/targets-mqj9GNg1.js +0 -53
  846. package/dist/tool-display-C0hpLmkw.js +0 -785
  847. package/dist/tool-display-CQTRHo3Z.js +0 -785
  848. package/dist/tool-images-BYY11Gw3.js +0 -263
  849. package/dist/tool-images-CnJ0R8Fo.js +0 -263
  850. package/dist/trash-C0mjnHuW.js +0 -125
  851. package/dist/trash-Cgwc9mLD.js +0 -125
  852. package/dist/tui-9cJnR1dN.js +0 -3282
  853. package/dist/tui-BR3egaFJ.js +0 -3282
  854. package/dist/tui-cli-BYpkhE6J.js +0 -66
  855. package/dist/tui-cli-DndeZyup.js +0 -62
  856. package/dist/update-BJVdkzk7.js +0 -349
  857. package/dist/update-DjI6KTA5.js +0 -349
  858. package/dist/update-cli-B7Rl2Qr2.js +0 -1146
  859. package/dist/update-cli-CFk_jqUm.js +0 -1148
  860. package/dist/usage-CFv4a1Nf.js +0 -5448
  861. package/dist/voice-credentials-D59RcLbl.js +0 -45
  862. package/dist/voice-credentials-fjA7GShF.js +0 -45
  863. package/dist/web-Bs1td8Qw.js +0 -79
  864. package/dist/web-CSiw--Px.js +0 -3070
  865. package/dist/web-jRTtDiNf.js +0 -74
  866. package/dist/webhooks-cli-0yQha2yj.js +0 -334
  867. package/dist/webhooks-cli-ula0bTX-.js +0 -330
  868. package/dist/whatsapp-actions-3NdzsNg1.js +0 -130
  869. package/dist/whatsapp-actions-y_1vjkYY.js +0 -125
  870. package/dist/workspace-BT3X-qCZ.js +0 -449
  871. package/dist/workspace-D5hHXubL.js +0 -447
  872. package/dist/zod-schema-CbqZAIYy.js +0 -2696
  873. package/dist/zod-schema-YGQJEcnj.js +0 -2696
  874. /package/dist/{account-lookup-BOCzCnir.js → account-lookup-CIY_RKhi.js} +0 -0
  875. /package/dist/{account-lookup-C0ndrpt-.js → account-lookup-DGscKBsr.js} +0 -0
  876. /package/dist/{agent-helpers-eEHy5uX2.js → agent-helpers-D83kfcF9.js} +0 -0
  877. /package/dist/{agents.config-BgDBcY4h.js → agents.config-BPe_hkMn.js} +0 -0
  878. /package/dist/{api-Cd_7aESj.js → api-D8QQo5bc.js} +0 -0
  879. /package/dist/{api-DJ_oWYus.js → api-GywrnwRm.js} +0 -0
  880. /package/dist/{argv-BY8EVMTP.js → argv-DW4MYBdJ.js} +0 -0
  881. /package/dist/{bindings-Dr0bGRst.js → bindings-BpL4pISF.js} +0 -0
  882. /package/dist/{brew-CmTYeZk1.js → brew-CBsS-Vq1.js} +0 -0
  883. /package/dist/{brew-V4lMBeE3.js → brew-Clw9vXhE.js} +0 -0
  884. /package/dist/{chat-envelope-CrM0X4sl.js → chat-envelope-CY1yvCc-.js} +0 -0
  885. /package/dist/{chat-envelope-BIujl9Cj.js → chat-envelope-DUMcMMB2.js} +0 -0
  886. /package/dist/{chat-type-CH3W-zKy.js → chat-type-BKe459rw.js} +0 -0
  887. /package/dist/{chat-type-DyovJwCt.js → chat-type-CE6cJOyt.js} +0 -0
  888. /package/dist/{cleanup-utils-CNwlTKyR.js → cleanup-utils-365rf8YN.js} +0 -0
  889. /package/dist/{cleanup-utils-gNzIs9yk.js → cleanup-utils-rqUXvR3Z.js} +0 -0
  890. /package/dist/{cli-name-3MdfbvIR.js → cli-name-7Gb97Vyl.js} +0 -0
  891. /package/dist/{cli-name-CRLBidNP.js → cli-name-Yv30OygA.js} +0 -0
  892. /package/dist/{cli-utils-5ZIfXAfM.js → cli-utils-5W6ugvN5.js} +0 -0
  893. /package/dist/{cli-utils-BUOtyfnU.js → cli-utils-CZJacPS2.js} +0 -0
  894. /package/dist/{client-D5m46AuY.js → client-DQ-Nh-rV.js} +0 -0
  895. /package/dist/{client-DFyI5I0n.js → client-Fi2k2G9Z.js} +0 -0
  896. /package/dist/{command-options-Cn2fc1Of.js → command-options-CXHYeogR.js} +0 -0
  897. /package/dist/{command-options-D2nN4AXX.js → command-options-Cx6evn0x.js} +0 -0
  898. /package/dist/{config-eval-CU2G7a83.js → config-eval-DU_v_3lY.js} +0 -0
  899. /package/dist/{config-eval-BCKpAS_K.js → config-eval-V26Gl6eZ.js} +0 -0
  900. /package/dist/{constants-CRGAZ2ow.js → constants-C7gkSGRE.js} +0 -0
  901. /package/dist/{constants-BAZuhSRm.js → constants-DAiBiWlI.js} +0 -0
  902. /package/dist/{constants-DoYLsBmv.js → constants-DOnQraOP.js} +0 -0
  903. /package/dist/{constants-BBVTjb1j.js → constants-DQxqJVLu.js} +0 -0
  904. /package/dist/{credentials-DMAWNZdV.js → credentials-BHWUBHMd.js} +0 -0
  905. /package/dist/{credentials-Dmc3H-jd.js → credentials-DG0tD6-e.js} +0 -0
  906. /package/dist/{daemon-runtime-CzFI2dPw.js → daemon-runtime-B7Tmba31.js} +0 -0
  907. /package/dist/{daemon-runtime-aQhinwSL.js → daemon-runtime-KyXiP2ib.js} +0 -0
  908. /package/dist/{dangerous-name-matching-BlTBBZns.js → dangerous-name-matching-B4MRPcn-.js} +0 -0
  909. /package/dist/{dangerous-tools-BRmbBvRf.js → dangerous-tools-CIPZZJoN.js} +0 -0
  910. /package/dist/{dangerous-tools-E1i3IoxZ.js → dangerous-tools-D-GNbdpV.js} +0 -0
  911. /package/dist/{fetch-timeout-DBRRPNBi.js → fetch-timeout-CPe2rPLq.js} +0 -0
  912. /package/dist/{fetch-timeout-l_6RdoMw.js → fetch-timeout-DkT3EnRA.js} +0 -0
  913. /package/dist/{file-identity-BnGA6wyc.js → file-identity-C8MIb5lb.js} +0 -0
  914. /package/dist/{format-duration-B-Uv5nOi.js → format-duration-Cd7SCued.js} +0 -0
  915. /package/dist/{format-duration-D1M3Zxu6.js → format-duration-Oj8pTbYL.js} +0 -0
  916. /package/dist/{format-relative-Cywx6ldk.js → format-relative-8dpVUfzZ.js} +0 -0
  917. /package/dist/{format-relative-DcQZUAYl.js → format-relative-BMNeqaxW.js} +0 -0
  918. /package/dist/{health-format-CL2Xq92A.js → health-format-CwLlmYSK.js} +0 -0
  919. /package/dist/{health-format-CVgQD-z9.js → health-format-CycFH5Sj.js} +0 -0
  920. /package/dist/{heartbeat-wake-DLxQm6-U.js → heartbeat-wake-D6Lt5YUk.js} +0 -0
  921. /package/dist/{heartbeat-wake-DjsTDzF3.js → heartbeat-wake-uZkAP-tP.js} +0 -0
  922. /package/dist/{help-format-DM6-OBt-.js → help-format-B0YIbosn.js} +0 -0
  923. /package/dist/{help-format-CJQ7APRn.js → help-format-GeOPYD_A.js} +0 -0
  924. /package/dist/{helpers-BER76F_2.js → helpers-6_MYSJEW.js} +0 -0
  925. /package/dist/{helpers-DSMIGYx2.js → helpers-703bXVlF.js} +0 -0
  926. /package/dist/{helpers-D-r6yhnI.js → helpers-p_u0Gnj_.js} +0 -0
  927. /package/dist/{input-provenance-BgfeDgck.js → input-provenance-C4nlFv5Y.js} +0 -0
  928. /package/dist/{input-provenance-xUsSMOsz.js → input-provenance-duDehu0D.js} +0 -0
  929. /package/dist/{ip-BAhS4rY2.js → ip-BFJnbRh9.js} +0 -0
  930. /package/dist/{ip-BUhsZdJu.js → ip-D0zgNmBV.js} +0 -0
  931. /package/dist/{is-main-BmHYGRhd.js → is-main-BE1Jih91.js} +0 -0
  932. /package/dist/{json-file-B5WEJJye.js → json-file-CsV03dh-.js} +0 -0
  933. /package/dist/{json-file-Dbg7nZg1.js → json-file-CtQKYRLl.js} +0 -0
  934. /package/dist/{json-files-BFGbyEzL.js → json-files-B2yMsppu.js} +0 -0
  935. /package/dist/{json-files-CfhnuGaC.js → json-files-BYH8U7Mx.js} +0 -0
  936. /package/dist/{lanes-4FoQemog.js → lanes-BWL_LwXG.js} +0 -0
  937. /package/dist/{lanes-BhdzrAIa.js → lanes-cHJ5arWg.js} +0 -0
  938. /package/dist/{links-CwTlzaPe.js → links-BFtUmGLH.js} +0 -0
  939. /package/dist/{links-D5vtq30Q.js → links-BNjLUJ9U.js} +0 -0
  940. /package/dist/{location-50gaJF5Z.js → location-BC45kOxc.js} +0 -0
  941. /package/dist/{location-Qo8Ii1zo.js → location-BUhzov-a.js} +0 -0
  942. /package/dist/{logger-IA_Dr_BT.js → logger-1QWMF9Hc.js} +0 -0
  943. /package/dist/{logger-nEdVxm5D.js → logger-BWMPnILd.js} +0 -0
  944. /package/dist/{logger-O6JX52kK.js → logger-Liu31nEU.js} +0 -0
  945. /package/dist/{logging-FctZEleJ.js → logging-CtbzyUjs.js} +0 -0
  946. /package/dist/{logging-BiuZwq5D.js → logging-DJFQvfGD.js} +0 -0
  947. /package/dist/{logging-Bs1VqVFL.js → logging-JiRrQn2_.js} +0 -0
  948. /package/dist/{logging-JZEg5nDp.js → logging-kuFzZMsG.js} +0 -0
  949. /package/dist/{message-channel-tuc9CdEw.js → message-channel-DOyKgFu8.js} +0 -0
  950. /package/dist/{mutable-allowlist-detectors-CtKavajp.js → mutable-allowlist-detectors-4m-Kc8Kn.js} +0 -0
  951. /package/dist/{mutable-allowlist-detectors-TCG6mnbz.js → mutable-allowlist-detectors-BECxOoKX.js} +0 -0
  952. /package/dist/{onboard-config-BxfgUqk6.js → onboard-config-C9so5ggC.js} +0 -0
  953. /package/dist/{onboard-config-DNzlo8Cg.js → onboard-config-oXID97rS.js} +0 -0
  954. /package/dist/{parse-log-line-CT0H1-oQ.js → parse-log-line-BtFI563v.js} +0 -0
  955. /package/dist/{parse-log-line-pij_xhtE.js → parse-log-line-COptqka7.js} +0 -0
  956. /package/dist/{parse-timeout-CvODy9RC.js → parse-timeout-BpphuwYl.js} +0 -0
  957. /package/dist/{path-guards-DOpzcMXz.js → path-guards-DJteVA0d.js} +0 -0
  958. /package/dist/{path-guards-DipYoPVw.js → path-guards-DVRUJZVN.js} +0 -0
  959. /package/dist/plugin-sdk/{media-understanding → stt}/providers/google/inline-data.d.ts +0 -0
  960. /package/dist/{plugins-allowlist-Bcqe9Gd8.js → plugins-allowlist-Clt6dsY6.js} +0 -0
  961. /package/dist/{polls-DQrR-qT3.js → polls-C5xr-8pM.js} +0 -0
  962. /package/dist/{polls-ybwcqkWt.js → polls-DXd67TD8.js} +0 -0
  963. /package/dist/{ports-lsof-CDyv5GJd.js → ports-lsof-xWMTWvMQ.js} +0 -0
  964. /package/dist/{process-scoped-map-BwUkYFQV.js → process-scoped-map-C7KeadUK.js} +0 -0
  965. /package/dist/{process-scoped-map-_zxf_kLz.js → process-scoped-map-CQ1C5MbT.js} +0 -0
  966. /package/dist/{program-context-CG-t6Yp-.js → program-context-LuBAPt4y.js} +0 -0
  967. /package/dist/{progress-DRLmcFiG.js → progress-C-hTn2yV.js} +0 -0
  968. /package/dist/{progress-BOdRbOHD.js → progress-ChmZpgvt.js} +0 -0
  969. /package/dist/{prompt-WEkXwIMT.js → prompt-BXeXEH0o.js} +0 -0
  970. /package/dist/{prompt-BRGfic91.js → prompt-C31r0R5I.js} +0 -0
  971. /package/dist/{prompt-style-B4Cq4PyQ.js → prompt-style-BcM-VSMx.js} +0 -0
  972. /package/dist/{proxy-BMJL0Qog.js → proxy-dRhp8Ykw.js} +0 -0
  973. /package/dist/{pw-ai-state-CwXeO5d0.js → pw-ai-state-CjfcKQoO.js} +0 -0
  974. /package/dist/{pw-ai-state-DaISdsXY.js → pw-ai-state-DfjyEttO.js} +0 -0
  975. /package/dist/{redact-gXuh8MFk.js → redact-D975G-N6.js} +0 -0
  976. /package/dist/{redact-CqWx9rpK.js → redact-Dx1Fue21.js} +0 -0
  977. /package/dist/{redact-identifier-BJOQDEj0.js → redact-identifier-Bqj_YiPd.js} +0 -0
  978. /package/dist/{redact-identifier-DR54qsoT.js → redact-identifier-HyK89Sod.js} +0 -0
  979. /package/dist/{remoteclaw-root-CgNyrbxc.js → remoteclaw-root-B1iQBmbi.js} +0 -0
  980. /package/dist/{remoteclaw-root-u8dAeHID.js → remoteclaw-root-BmYwCzQN.js} +0 -0
  981. /package/dist/{render-CDCvpfhh.js → render-BvFSFJZW.js} +0 -0
  982. /package/dist/{render-CJl4GK1B.js → render-flG67HhW.js} +0 -0
  983. /package/dist/{response-prefix-template-D3ZcJP4E.js → response-prefix-template-DDvbVpx6.js} +0 -0
  984. /package/dist/{retry-cXXk2j6_.js → retry-CByUYDAZ.js} +0 -0
  985. /package/dist/{retry-B19gMxS7.js → retry-oNE3cBeG.js} +0 -0
  986. /package/dist/{runtime-guard-BS55uiSW.js → runtime-guard-CqNug-FG.js} +0 -0
  987. /package/dist/{runtime-guard-CK80eucm.js → runtime-guard-DAHXelsb.js} +0 -0
  988. /package/dist/{runtime-status-BhW7hP_U.js → runtime-status-CM4rzyfO.js} +0 -0
  989. /package/dist/{runtime-status-hFVEC3wO.js → runtime-status-DJYthOLz.js} +0 -0
  990. /package/dist/{secret-equal-CJzes24Z.js → secret-equal-1-dwi8DL.js} +0 -0
  991. /package/dist/{secret-equal-CQAmGfGc.js → secret-equal-CXJEZiWb.js} +0 -0
  992. /package/dist/{secure-random-B3f7Ri2X.js → secure-random-Ba4Y5xG5.js} +0 -0
  993. /package/dist/{secure-random-BkZFG9cd.js → secure-random-C6AVByhV.js} +0 -0
  994. /package/dist/{stagger-B-_Wnofy.js → stagger-CjeisVRF.js} +0 -0
  995. /package/dist/{stagger-B2ORDHsP.js → stagger-vkvpUmOz.js} +0 -0
  996. /package/dist/{status-C6YNwimj.js → status-DNLnVQZ4.js} +0 -0
  997. /package/dist/{status-yrDGXYZM.js → status-DZhl73dM.js} +0 -0
  998. /package/dist/{strip-inbound-meta-0cvL6itU.js → strip-inbound-meta-C3Cwe_ZO.js} +0 -0
  999. /package/dist/{strip-inbound-meta-DjKcSFaW.js → strip-inbound-meta-DuDjnGjC.js} +0 -0
  1000. /package/dist/{table-ByMyHTh_.js → table-B9zSN_7D.js} +0 -0
  1001. /package/dist/{table-C-dba-5-.js → table-j8Ayarot.js} +0 -0
  1002. /package/dist/{target-errors-DJVRKFcU.js → target-errors-ChjvOMuV.js} +0 -0
  1003. /package/dist/{target-errors-GZXDqlUu.js → target-errors-Dn4aykSV.js} +0 -0
  1004. /package/dist/{targets-B_d_1z3N.js → targets-BtGRUQMa.js} +0 -0
  1005. /package/dist/{targets-DOJXjN1U.js → targets-CE4AYRI9.js} +0 -0
  1006. /package/dist/{targets-D01MJGnh.js → targets-DlufWCmy.js} +0 -0
  1007. /package/dist/{targets-WSwPflb6.js → targets-akvAerZF.js} +0 -0
  1008. /package/dist/{text-format-DarxU3JH.js → text-format-VSogn9Yq.js} +0 -0
  1009. /package/dist/{text-format-mr5bZq0f.js → text-format-xeHt9ywT.js} +0 -0
  1010. /package/dist/{thinking-BqJmU6Zp.js → thinking-B171Rc3-.js} +0 -0
  1011. /package/dist/{tokens-C8yGxAcR.js → tokens-B-jmvNR9.js} +0 -0
  1012. /package/dist/{tokens-DAFBx5qr.js → tokens-kTLGxaAF.js} +0 -0
  1013. /package/dist/{usage-BXi79Rq6.js → usage-CRJFqYf8.js} +0 -0
  1014. /package/dist/{usage-C1lHaofV.js → usage-Txvb0Iq2.js} +0 -0
  1015. /package/dist/{usage-format-CD5jsZY1.js → usage-format-70DvrseE.js} +0 -0
  1016. /package/dist/{usage-format-CRVpDVj1.js → usage-format-Bs8DkQtr.js} +0 -0
  1017. /package/dist/{widearea-dns-C-0P7TRi.js → widearea-dns-BOgHvO4O.js} +0 -0
  1018. /package/dist/{widearea-dns-DFZMcfLf.js → widearea-dns-CGhfClCr.js} +0 -0
  1019. /package/dist/{workspace-BJCKO8Ns.js → workspace-DhUqtMK_.js} +0 -0
  1020. /package/dist/{wsl-kFaeW76c.js → wsl-Cs-gowFJ.js} +0 -0
@@ -0,0 +1,1733 @@
1
+ import { t as CONFIG_DIR } from "./utils-C5daYcFn.js";
2
+ import { t as createSubsystemLogger } from "./subsystem-m7RSGQoR.js";
3
+ import { i as loadConfig } from "./config-C_WcTz_O.js";
4
+ import { n as isLoopbackAddress, p as rawDataToString, r as isLoopbackHost } from "./net-DMh1m8AZ.js";
5
+ import { i as resolvePinnedHostnameWithPolicy } from "./ssrf-DZi4qw5c.js";
6
+ import { r as ensurePortAvailable } from "./ports-CRI-HSZx.js";
7
+ import { c as DEFAULT_REMOTECLAW_BROWSER_PROFILE_NAME, o as DEFAULT_REMOTECLAW_BROWSER_COLOR } from "./constants-DOnQraOP.js";
8
+ import fs from "node:fs";
9
+ import os from "node:os";
10
+ import path from "node:path";
11
+ import { createHmac } from "node:crypto";
12
+ import { execFileSync, spawn } from "node:child_process";
13
+ import WebSocket, { WebSocketServer } from "ws";
14
+ import { createServer } from "node:http";
15
+
16
+ //#region src/browser/extension-relay-auth.ts
17
+ const RELAY_TOKEN_CONTEXT = "remoteclaw-extension-relay-v1";
18
+ const DEFAULT_RELAY_PROBE_TIMEOUT_MS = 500;
19
+ const REMOTECLAW_RELAY_BROWSER = "RemoteClaw/extension-relay";
20
+ function resolveGatewayAuthToken() {
21
+ const envToken = process.env.REMOTECLAW_GATEWAY_TOKEN?.trim() || process.env.CLAWDBOT_GATEWAY_TOKEN?.trim();
22
+ if (envToken) return envToken;
23
+ try {
24
+ const configToken = loadConfig().gateway?.auth?.token?.trim();
25
+ if (configToken) return configToken;
26
+ } catch {}
27
+ return null;
28
+ }
29
+ function deriveRelayAuthToken(gatewayToken, port) {
30
+ return createHmac("sha256", gatewayToken).update(`${RELAY_TOKEN_CONTEXT}:${port}`).digest("hex");
31
+ }
32
+ function resolveRelayAcceptedTokensForPort(port) {
33
+ const gatewayToken = resolveGatewayAuthToken();
34
+ if (!gatewayToken) throw new Error("extension relay requires gateway auth token (set gateway.auth.token or REMOTECLAW_GATEWAY_TOKEN)");
35
+ const relayToken = deriveRelayAuthToken(gatewayToken, port);
36
+ if (relayToken === gatewayToken) return [relayToken];
37
+ return [relayToken, gatewayToken];
38
+ }
39
+ function resolveRelayAuthTokenForPort(port) {
40
+ return resolveRelayAcceptedTokensForPort(port)[0];
41
+ }
42
+ async function probeAuthenticatedRemoteClawRelay(params) {
43
+ const ctrl = new AbortController();
44
+ const timer = setTimeout(() => ctrl.abort(), params.timeoutMs ?? DEFAULT_RELAY_PROBE_TIMEOUT_MS);
45
+ try {
46
+ const versionUrl = new URL("/json/version", `${params.baseUrl}/`).toString();
47
+ const res = await fetch(versionUrl, {
48
+ signal: ctrl.signal,
49
+ headers: { [params.relayAuthHeader]: params.relayAuthToken }
50
+ });
51
+ if (!res.ok) return false;
52
+ const body = await res.json();
53
+ return (typeof body?.Browser === "string" ? body.Browser.trim() : "") === REMOTECLAW_RELAY_BROWSER;
54
+ } catch {
55
+ return false;
56
+ } finally {
57
+ clearTimeout(timer);
58
+ }
59
+ }
60
+
61
+ //#endregion
62
+ //#region src/browser/extension-relay.ts
63
+ const RELAY_AUTH_HEADER = "x-remoteclaw-relay-token";
64
+ function headerValue(value) {
65
+ if (!value) return;
66
+ if (Array.isArray(value)) return value[0];
67
+ return value;
68
+ }
69
+ function getHeader(req, name) {
70
+ return headerValue(req.headers[name.toLowerCase()]);
71
+ }
72
+ function getRelayAuthTokenFromRequest(req, url) {
73
+ const headerToken = getHeader(req, RELAY_AUTH_HEADER)?.trim();
74
+ if (headerToken) return headerToken;
75
+ const queryToken = url?.searchParams.get("token")?.trim();
76
+ if (queryToken) return queryToken;
77
+ }
78
+ function parseUrlPort(parsed) {
79
+ const port = parsed.port?.trim() !== "" ? Number(parsed.port) : parsed.protocol === "https:" ? 443 : 80;
80
+ if (!Number.isFinite(port) || port <= 0 || port > 65535) return null;
81
+ return port;
82
+ }
83
+ function parseBaseUrl(raw) {
84
+ const parsed = new URL(raw.trim().replace(/\/$/, ""));
85
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") throw new Error(`extension relay cdpUrl must be http(s), got ${parsed.protocol}`);
86
+ const host = parsed.hostname;
87
+ const port = parseUrlPort(parsed);
88
+ if (!port) throw new Error(`extension relay cdpUrl has invalid port: ${parsed.port || "(empty)"}`);
89
+ return {
90
+ host,
91
+ port,
92
+ baseUrl: parsed.toString().replace(/\/$/, "")
93
+ };
94
+ }
95
+ function text(res, status, bodyText) {
96
+ const body = Buffer.from(bodyText);
97
+ res.write(`HTTP/1.1 ${status} ${status === 200 ? "OK" : "ERR"}\r\nContent-Type: text/plain; charset=utf-8\r
98
+ Content-Length: ${body.length}\r\nConnection: close\r
99
+ \r
100
+ `);
101
+ res.write(body);
102
+ res.end();
103
+ }
104
+ function rejectUpgrade(socket, status, bodyText) {
105
+ text(socket, status, bodyText);
106
+ try {
107
+ socket.destroy();
108
+ } catch {}
109
+ }
110
+ const relayRuntimeByPort = /* @__PURE__ */ new Map();
111
+ function isAddrInUseError(err) {
112
+ return typeof err === "object" && err !== null && "code" in err && err.code === "EADDRINUSE";
113
+ }
114
+ function relayAuthTokenForUrl(url) {
115
+ try {
116
+ const parsed = new URL(url);
117
+ if (!isLoopbackHost(parsed.hostname)) return null;
118
+ const port = parseUrlPort(parsed);
119
+ if (!port) return null;
120
+ return relayRuntimeByPort.get(port)?.relayAuthToken ?? null;
121
+ } catch {
122
+ return null;
123
+ }
124
+ }
125
+ function getChromeExtensionRelayAuthHeaders(url) {
126
+ const token = relayAuthTokenForUrl(url);
127
+ if (!token) return {};
128
+ return { [RELAY_AUTH_HEADER]: token };
129
+ }
130
+ async function ensureChromeExtensionRelayServer(opts) {
131
+ const info = parseBaseUrl(opts.cdpUrl);
132
+ if (!isLoopbackHost(info.host)) throw new Error(`extension relay requires loopback cdpUrl host (got ${info.host})`);
133
+ const existing = relayRuntimeByPort.get(info.port);
134
+ if (existing) return existing.server;
135
+ const relayAuthToken = resolveRelayAuthTokenForPort(info.port);
136
+ const relayAuthTokens = new Set(resolveRelayAcceptedTokensForPort(info.port));
137
+ let extensionWs = null;
138
+ const cdpClients = /* @__PURE__ */ new Set();
139
+ const connectedTargets = /* @__PURE__ */ new Map();
140
+ const extensionConnected = () => extensionWs?.readyState === WebSocket.OPEN;
141
+ const pendingExtension = /* @__PURE__ */ new Map();
142
+ let nextExtensionId = 1;
143
+ const sendToExtension = async (payload) => {
144
+ const ws = extensionWs;
145
+ if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
146
+ ws.send(JSON.stringify(payload));
147
+ return await new Promise((resolve, reject) => {
148
+ const timer = setTimeout(() => {
149
+ pendingExtension.delete(payload.id);
150
+ reject(/* @__PURE__ */ new Error(`extension request timeout: ${payload.params.method}`));
151
+ }, 3e4);
152
+ pendingExtension.set(payload.id, {
153
+ resolve,
154
+ reject,
155
+ timer
156
+ });
157
+ });
158
+ };
159
+ const broadcastToCdpClients = (evt) => {
160
+ const msg = JSON.stringify(evt);
161
+ for (const ws of cdpClients) {
162
+ if (ws.readyState !== WebSocket.OPEN) continue;
163
+ ws.send(msg);
164
+ }
165
+ };
166
+ const sendResponseToCdp = (ws, res) => {
167
+ if (ws.readyState !== WebSocket.OPEN) return;
168
+ ws.send(JSON.stringify(res));
169
+ };
170
+ const ensureTargetEventsForClient = (ws, mode) => {
171
+ for (const target of connectedTargets.values()) if (mode === "autoAttach") ws.send(JSON.stringify({
172
+ method: "Target.attachedToTarget",
173
+ params: {
174
+ sessionId: target.sessionId,
175
+ targetInfo: {
176
+ ...target.targetInfo,
177
+ attached: true
178
+ },
179
+ waitingForDebugger: false
180
+ }
181
+ }));
182
+ else ws.send(JSON.stringify({
183
+ method: "Target.targetCreated",
184
+ params: { targetInfo: {
185
+ ...target.targetInfo,
186
+ attached: true
187
+ } }
188
+ }));
189
+ };
190
+ const routeCdpCommand = async (cmd) => {
191
+ switch (cmd.method) {
192
+ case "Browser.getVersion": return {
193
+ protocolVersion: "1.3",
194
+ product: "Chrome/RemoteClaw-Extension-Relay",
195
+ revision: "0",
196
+ userAgent: "RemoteClaw-Extension-Relay",
197
+ jsVersion: "V8"
198
+ };
199
+ case "Browser.setDownloadBehavior": return {};
200
+ case "Target.setAutoAttach":
201
+ case "Target.setDiscoverTargets": return {};
202
+ case "Target.getTargets": return { targetInfos: Array.from(connectedTargets.values()).map((t) => ({
203
+ ...t.targetInfo,
204
+ attached: true
205
+ })) };
206
+ case "Target.getTargetInfo": {
207
+ const params = cmd.params ?? {};
208
+ const targetId = typeof params.targetId === "string" ? params.targetId : void 0;
209
+ if (targetId) {
210
+ for (const t of connectedTargets.values()) if (t.targetId === targetId) return { targetInfo: t.targetInfo };
211
+ }
212
+ if (cmd.sessionId && connectedTargets.has(cmd.sessionId)) {
213
+ const t = connectedTargets.get(cmd.sessionId);
214
+ if (t) return { targetInfo: t.targetInfo };
215
+ }
216
+ return { targetInfo: Array.from(connectedTargets.values())[0]?.targetInfo };
217
+ }
218
+ case "Target.attachToTarget": {
219
+ const params = cmd.params ?? {};
220
+ const targetId = typeof params.targetId === "string" ? params.targetId : void 0;
221
+ if (!targetId) throw new Error("targetId required");
222
+ for (const t of connectedTargets.values()) if (t.targetId === targetId) return { sessionId: t.sessionId };
223
+ throw new Error("target not found");
224
+ }
225
+ default: return await sendToExtension({
226
+ id: nextExtensionId++,
227
+ method: "forwardCDPCommand",
228
+ params: {
229
+ method: cmd.method,
230
+ sessionId: cmd.sessionId,
231
+ params: cmd.params
232
+ }
233
+ });
234
+ }
235
+ };
236
+ const server = createServer((req, res) => {
237
+ const path = new URL(req.url ?? "/", info.baseUrl).pathname;
238
+ if (path.startsWith("/json")) {
239
+ const token = getHeader(req, RELAY_AUTH_HEADER)?.trim();
240
+ if (!token || !relayAuthTokens.has(token)) {
241
+ res.writeHead(401);
242
+ res.end("Unauthorized");
243
+ return;
244
+ }
245
+ }
246
+ if (req.method === "HEAD" && path === "/") {
247
+ res.writeHead(200);
248
+ res.end();
249
+ return;
250
+ }
251
+ if (path === "/") {
252
+ res.writeHead(200, { "Content-Type": "text/plain; charset=utf-8" });
253
+ res.end("OK");
254
+ return;
255
+ }
256
+ if (path === "/extension/status") {
257
+ res.writeHead(200, { "Content-Type": "application/json" });
258
+ res.end(JSON.stringify({ connected: extensionConnected() }));
259
+ return;
260
+ }
261
+ const cdpWsUrl = `${`ws://${req.headers.host?.trim() || `${info.host}:${info.port}`}`}/cdp`;
262
+ if ((path === "/json/version" || path === "/json/version/") && (req.method === "GET" || req.method === "PUT")) {
263
+ const payload = {
264
+ Browser: "RemoteClaw/extension-relay",
265
+ "Protocol-Version": "1.3"
266
+ };
267
+ if (extensionConnected()) payload.webSocketDebuggerUrl = cdpWsUrl;
268
+ res.writeHead(200, { "Content-Type": "application/json" });
269
+ res.end(JSON.stringify(payload));
270
+ return;
271
+ }
272
+ if (new Set([
273
+ "/json",
274
+ "/json/",
275
+ "/json/list",
276
+ "/json/list/"
277
+ ]).has(path) && (req.method === "GET" || req.method === "PUT")) {
278
+ const list = Array.from(connectedTargets.values()).map((t) => ({
279
+ id: t.targetId,
280
+ type: t.targetInfo.type ?? "page",
281
+ title: t.targetInfo.title ?? "",
282
+ description: t.targetInfo.title ?? "",
283
+ url: t.targetInfo.url ?? "",
284
+ webSocketDebuggerUrl: cdpWsUrl,
285
+ devtoolsFrontendUrl: `/devtools/inspector.html?ws=${cdpWsUrl.replace("ws://", "")}`
286
+ }));
287
+ res.writeHead(200, { "Content-Type": "application/json" });
288
+ res.end(JSON.stringify(list));
289
+ return;
290
+ }
291
+ const handleTargetActionRoute = (match, cdpMethod) => {
292
+ if (!match || req.method !== "GET" && req.method !== "PUT") return false;
293
+ const targetId = decodeURIComponent(match[1] ?? "").trim();
294
+ if (!targetId) {
295
+ res.writeHead(400);
296
+ res.end("targetId required");
297
+ return true;
298
+ }
299
+ (async () => {
300
+ try {
301
+ await sendToExtension({
302
+ id: nextExtensionId++,
303
+ method: "forwardCDPCommand",
304
+ params: {
305
+ method: cdpMethod,
306
+ params: { targetId }
307
+ }
308
+ });
309
+ } catch {}
310
+ })();
311
+ res.writeHead(200);
312
+ res.end("OK");
313
+ return true;
314
+ };
315
+ if (handleTargetActionRoute(path.match(/^\/json\/activate\/(.+)$/), "Target.activateTarget")) return;
316
+ if (handleTargetActionRoute(path.match(/^\/json\/close\/(.+)$/), "Target.closeTarget")) return;
317
+ res.writeHead(404);
318
+ res.end("not found");
319
+ });
320
+ const wssExtension = new WebSocketServer({ noServer: true });
321
+ const wssCdp = new WebSocketServer({ noServer: true });
322
+ server.on("upgrade", (req, socket, head) => {
323
+ const url = new URL(req.url ?? "/", info.baseUrl);
324
+ const pathname = url.pathname;
325
+ const remote = req.socket.remoteAddress;
326
+ if (!isLoopbackAddress(remote)) {
327
+ rejectUpgrade(socket, 403, "Forbidden");
328
+ return;
329
+ }
330
+ const origin = headerValue(req.headers.origin);
331
+ if (origin && !origin.startsWith("chrome-extension://")) {
332
+ rejectUpgrade(socket, 403, "Forbidden: invalid origin");
333
+ return;
334
+ }
335
+ if (pathname === "/extension") {
336
+ const token = getRelayAuthTokenFromRequest(req, url);
337
+ if (!token || !relayAuthTokens.has(token)) {
338
+ rejectUpgrade(socket, 401, "Unauthorized");
339
+ return;
340
+ }
341
+ if (extensionConnected()) {
342
+ rejectUpgrade(socket, 409, "Extension already connected");
343
+ return;
344
+ }
345
+ if (extensionWs && extensionWs.readyState !== WebSocket.OPEN) {
346
+ try {
347
+ extensionWs.terminate();
348
+ } catch {}
349
+ extensionWs = null;
350
+ }
351
+ wssExtension.handleUpgrade(req, socket, head, (ws) => {
352
+ wssExtension.emit("connection", ws, req);
353
+ });
354
+ return;
355
+ }
356
+ if (pathname === "/cdp") {
357
+ const token = getRelayAuthTokenFromRequest(req, url);
358
+ if (!token || !relayAuthTokens.has(token)) {
359
+ rejectUpgrade(socket, 401, "Unauthorized");
360
+ return;
361
+ }
362
+ if (!extensionConnected()) {
363
+ rejectUpgrade(socket, 503, "Extension not connected");
364
+ return;
365
+ }
366
+ wssCdp.handleUpgrade(req, socket, head, (ws) => {
367
+ wssCdp.emit("connection", ws, req);
368
+ });
369
+ return;
370
+ }
371
+ rejectUpgrade(socket, 404, "Not Found");
372
+ });
373
+ wssExtension.on("connection", (ws) => {
374
+ extensionWs = ws;
375
+ const ping = setInterval(() => {
376
+ if (ws.readyState !== WebSocket.OPEN) return;
377
+ ws.send(JSON.stringify({ method: "ping" }));
378
+ }, 5e3);
379
+ ws.on("message", (data) => {
380
+ if (extensionWs !== ws) return;
381
+ let parsed = null;
382
+ try {
383
+ parsed = JSON.parse(rawDataToString(data));
384
+ } catch {
385
+ return;
386
+ }
387
+ if (parsed && typeof parsed === "object" && "id" in parsed && typeof parsed.id === "number") {
388
+ const pending = pendingExtension.get(parsed.id);
389
+ if (!pending) return;
390
+ pendingExtension.delete(parsed.id);
391
+ clearTimeout(pending.timer);
392
+ if ("error" in parsed && typeof parsed.error === "string" && parsed.error.trim()) pending.reject(new Error(parsed.error));
393
+ else pending.resolve(parsed.result);
394
+ return;
395
+ }
396
+ if (parsed && typeof parsed === "object" && "method" in parsed) {
397
+ if (parsed.method === "pong") return;
398
+ if (parsed.method !== "forwardCDPEvent") return;
399
+ const evt = parsed;
400
+ const method = evt.params?.method;
401
+ const params = evt.params?.params;
402
+ const sessionId = evt.params?.sessionId;
403
+ if (!method || typeof method !== "string") return;
404
+ if (method === "Target.attachedToTarget") {
405
+ const attached = params ?? {};
406
+ if ((attached?.targetInfo?.type ?? "page") !== "page") return;
407
+ if (attached?.sessionId && attached?.targetInfo?.targetId) {
408
+ const prev = connectedTargets.get(attached.sessionId);
409
+ const nextTargetId = attached.targetInfo.targetId;
410
+ const prevTargetId = prev?.targetId;
411
+ const changedTarget = Boolean(prev && prevTargetId && prevTargetId !== nextTargetId);
412
+ connectedTargets.set(attached.sessionId, {
413
+ sessionId: attached.sessionId,
414
+ targetId: nextTargetId,
415
+ targetInfo: attached.targetInfo
416
+ });
417
+ if (changedTarget && prevTargetId) broadcastToCdpClients({
418
+ method: "Target.detachedFromTarget",
419
+ params: {
420
+ sessionId: attached.sessionId,
421
+ targetId: prevTargetId
422
+ },
423
+ sessionId: attached.sessionId
424
+ });
425
+ if (!prev || changedTarget) broadcastToCdpClients({
426
+ method,
427
+ params,
428
+ sessionId
429
+ });
430
+ return;
431
+ }
432
+ }
433
+ if (method === "Target.detachedFromTarget") {
434
+ const detached = params ?? {};
435
+ if (detached?.sessionId) connectedTargets.delete(detached.sessionId);
436
+ broadcastToCdpClients({
437
+ method,
438
+ params,
439
+ sessionId
440
+ });
441
+ return;
442
+ }
443
+ if (method === "Target.targetInfoChanged") {
444
+ const targetInfo = (params ?? {})?.targetInfo;
445
+ const targetId = targetInfo?.targetId;
446
+ if (targetId && (targetInfo?.type ?? "page") === "page") for (const [sid, target] of connectedTargets) {
447
+ if (target.targetId !== targetId) continue;
448
+ connectedTargets.set(sid, {
449
+ ...target,
450
+ targetInfo: {
451
+ ...target.targetInfo,
452
+ ...targetInfo
453
+ }
454
+ });
455
+ }
456
+ }
457
+ broadcastToCdpClients({
458
+ method,
459
+ params,
460
+ sessionId
461
+ });
462
+ }
463
+ });
464
+ ws.on("close", () => {
465
+ clearInterval(ping);
466
+ if (extensionWs !== ws) return;
467
+ extensionWs = null;
468
+ for (const [, pending] of pendingExtension) {
469
+ clearTimeout(pending.timer);
470
+ pending.reject(/* @__PURE__ */ new Error("extension disconnected"));
471
+ }
472
+ pendingExtension.clear();
473
+ connectedTargets.clear();
474
+ for (const client of cdpClients) try {
475
+ client.close(1011, "extension disconnected");
476
+ } catch {}
477
+ cdpClients.clear();
478
+ });
479
+ });
480
+ wssCdp.on("connection", (ws) => {
481
+ cdpClients.add(ws);
482
+ ws.on("message", async (data) => {
483
+ let cmd = null;
484
+ try {
485
+ cmd = JSON.parse(rawDataToString(data));
486
+ } catch {
487
+ return;
488
+ }
489
+ if (!cmd || typeof cmd !== "object") return;
490
+ if (typeof cmd.id !== "number" || typeof cmd.method !== "string") return;
491
+ if (!extensionConnected()) {
492
+ sendResponseToCdp(ws, {
493
+ id: cmd.id,
494
+ sessionId: cmd.sessionId,
495
+ error: { message: "Extension not connected" }
496
+ });
497
+ return;
498
+ }
499
+ try {
500
+ const result = await routeCdpCommand(cmd);
501
+ if (cmd.method === "Target.setAutoAttach" && !cmd.sessionId) ensureTargetEventsForClient(ws, "autoAttach");
502
+ if (cmd.method === "Target.setDiscoverTargets") {
503
+ if ((cmd.params ?? {}).discover === true) ensureTargetEventsForClient(ws, "discover");
504
+ }
505
+ if (cmd.method === "Target.attachToTarget") {
506
+ const params = cmd.params ?? {};
507
+ const targetId = typeof params.targetId === "string" ? params.targetId : void 0;
508
+ if (targetId) {
509
+ const target = Array.from(connectedTargets.values()).find((t) => t.targetId === targetId);
510
+ if (target) ws.send(JSON.stringify({
511
+ method: "Target.attachedToTarget",
512
+ params: {
513
+ sessionId: target.sessionId,
514
+ targetInfo: {
515
+ ...target.targetInfo,
516
+ attached: true
517
+ },
518
+ waitingForDebugger: false
519
+ }
520
+ }));
521
+ }
522
+ }
523
+ sendResponseToCdp(ws, {
524
+ id: cmd.id,
525
+ sessionId: cmd.sessionId,
526
+ result
527
+ });
528
+ } catch (err) {
529
+ sendResponseToCdp(ws, {
530
+ id: cmd.id,
531
+ sessionId: cmd.sessionId,
532
+ error: { message: err instanceof Error ? err.message : String(err) }
533
+ });
534
+ }
535
+ });
536
+ ws.on("close", () => {
537
+ cdpClients.delete(ws);
538
+ });
539
+ });
540
+ try {
541
+ await new Promise((resolve, reject) => {
542
+ server.listen(info.port, info.host, () => resolve());
543
+ server.once("error", reject);
544
+ });
545
+ } catch (err) {
546
+ if (isAddrInUseError(err) && await probeAuthenticatedRemoteClawRelay({
547
+ baseUrl: info.baseUrl,
548
+ relayAuthHeader: RELAY_AUTH_HEADER,
549
+ relayAuthToken
550
+ })) {
551
+ const existingRelay = {
552
+ host: info.host,
553
+ port: info.port,
554
+ baseUrl: info.baseUrl,
555
+ cdpWsUrl: `ws://${info.host}:${info.port}/cdp`,
556
+ extensionConnected: () => false,
557
+ stop: async () => {
558
+ relayRuntimeByPort.delete(info.port);
559
+ }
560
+ };
561
+ relayRuntimeByPort.set(info.port, {
562
+ server: existingRelay,
563
+ relayAuthToken
564
+ });
565
+ return existingRelay;
566
+ }
567
+ throw err;
568
+ }
569
+ const port = server.address()?.port ?? info.port;
570
+ const host = info.host;
571
+ const relay = {
572
+ host,
573
+ port,
574
+ baseUrl: `${new URL(info.baseUrl).protocol}//${host}:${port}`,
575
+ cdpWsUrl: `ws://${host}:${port}/cdp`,
576
+ extensionConnected,
577
+ stop: async () => {
578
+ relayRuntimeByPort.delete(port);
579
+ try {
580
+ extensionWs?.close(1001, "server stopping");
581
+ } catch {}
582
+ for (const ws of cdpClients) try {
583
+ ws.close(1001, "server stopping");
584
+ } catch {}
585
+ await new Promise((resolve) => {
586
+ server.close(() => resolve());
587
+ });
588
+ wssExtension.close();
589
+ wssCdp.close();
590
+ }
591
+ };
592
+ relayRuntimeByPort.set(port, {
593
+ server: relay,
594
+ relayAuthToken
595
+ });
596
+ return relay;
597
+ }
598
+ async function stopChromeExtensionRelayServer(opts) {
599
+ const info = parseBaseUrl(opts.cdpUrl);
600
+ const existing = relayRuntimeByPort.get(info.port);
601
+ if (!existing) return false;
602
+ await existing.server.stop();
603
+ return true;
604
+ }
605
+
606
+ //#endregion
607
+ //#region src/browser/cdp.helpers.ts
608
+ function getHeadersWithAuth(url, headers = {}) {
609
+ const mergedHeaders = {
610
+ ...getChromeExtensionRelayAuthHeaders(url),
611
+ ...headers
612
+ };
613
+ try {
614
+ const parsed = new URL(url);
615
+ if (Object.keys(mergedHeaders).some((key) => key.toLowerCase() === "authorization")) return mergedHeaders;
616
+ if (parsed.username || parsed.password) {
617
+ const auth = Buffer.from(`${parsed.username}:${parsed.password}`).toString("base64");
618
+ return {
619
+ ...mergedHeaders,
620
+ Authorization: `Basic ${auth}`
621
+ };
622
+ }
623
+ } catch {}
624
+ return mergedHeaders;
625
+ }
626
+ function appendCdpPath(cdpUrl, path) {
627
+ const url = new URL(cdpUrl);
628
+ url.pathname = `${url.pathname.replace(/\/$/, "")}${path.startsWith("/") ? path : `/${path}`}`;
629
+ return url.toString();
630
+ }
631
+ function createCdpSender(ws) {
632
+ let nextId = 1;
633
+ const pending = /* @__PURE__ */ new Map();
634
+ const send = (method, params, sessionId) => {
635
+ const id = nextId++;
636
+ const msg = {
637
+ id,
638
+ method,
639
+ params,
640
+ sessionId
641
+ };
642
+ ws.send(JSON.stringify(msg));
643
+ return new Promise((resolve, reject) => {
644
+ pending.set(id, {
645
+ resolve,
646
+ reject
647
+ });
648
+ });
649
+ };
650
+ const closeWithError = (err) => {
651
+ for (const [, p] of pending) p.reject(err);
652
+ pending.clear();
653
+ try {
654
+ ws.close();
655
+ } catch {}
656
+ };
657
+ ws.on("error", (err) => {
658
+ closeWithError(err instanceof Error ? err : new Error(String(err)));
659
+ });
660
+ ws.on("message", (data) => {
661
+ try {
662
+ const parsed = JSON.parse(rawDataToString(data));
663
+ if (typeof parsed.id !== "number") return;
664
+ const p = pending.get(parsed.id);
665
+ if (!p) return;
666
+ pending.delete(parsed.id);
667
+ if (parsed.error?.message) {
668
+ p.reject(new Error(parsed.error.message));
669
+ return;
670
+ }
671
+ p.resolve(parsed.result);
672
+ } catch {}
673
+ });
674
+ ws.on("close", () => {
675
+ closeWithError(/* @__PURE__ */ new Error("CDP socket closed"));
676
+ });
677
+ return {
678
+ send,
679
+ closeWithError
680
+ };
681
+ }
682
+ async function fetchJson(url, timeoutMs = 1500, init) {
683
+ return await (await fetchChecked(url, timeoutMs, init)).json();
684
+ }
685
+ async function fetchChecked(url, timeoutMs = 1500, init) {
686
+ const ctrl = new AbortController();
687
+ const t = setTimeout(ctrl.abort.bind(ctrl), timeoutMs);
688
+ try {
689
+ const headers = getHeadersWithAuth(url, init?.headers || {});
690
+ const res = await fetch(url, {
691
+ ...init,
692
+ headers,
693
+ signal: ctrl.signal
694
+ });
695
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
696
+ return res;
697
+ } finally {
698
+ clearTimeout(t);
699
+ }
700
+ }
701
+ async function fetchOk(url, timeoutMs = 1500, init) {
702
+ await fetchChecked(url, timeoutMs, init);
703
+ }
704
+ async function withCdpSocket(wsUrl, fn, opts) {
705
+ const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
706
+ const ws = new WebSocket(wsUrl, {
707
+ handshakeTimeout: typeof opts?.handshakeTimeoutMs === "number" && Number.isFinite(opts.handshakeTimeoutMs) ? Math.max(1, Math.floor(opts.handshakeTimeoutMs)) : 5e3,
708
+ ...Object.keys(headers).length ? { headers } : {}
709
+ });
710
+ const { send, closeWithError } = createCdpSender(ws);
711
+ const openPromise = new Promise((resolve, reject) => {
712
+ ws.once("open", () => resolve());
713
+ ws.once("error", (err) => reject(err));
714
+ ws.once("close", () => reject(/* @__PURE__ */ new Error("CDP socket closed")));
715
+ });
716
+ try {
717
+ await openPromise;
718
+ } catch (err) {
719
+ closeWithError(err instanceof Error ? err : new Error(String(err)));
720
+ throw err;
721
+ }
722
+ try {
723
+ return await fn(send);
724
+ } catch (err) {
725
+ closeWithError(err instanceof Error ? err : new Error(String(err)));
726
+ throw err;
727
+ } finally {
728
+ try {
729
+ ws.close();
730
+ } catch {}
731
+ }
732
+ }
733
+
734
+ //#endregion
735
+ //#region src/browser/navigation-guard.ts
736
+ const NETWORK_NAVIGATION_PROTOCOLS = new Set(["http:", "https:"]);
737
+ const SAFE_NON_NETWORK_URLS = new Set(["about:blank"]);
738
+ function isAllowedNonNetworkNavigationUrl(parsed) {
739
+ return SAFE_NON_NETWORK_URLS.has(parsed.href);
740
+ }
741
+ var InvalidBrowserNavigationUrlError = class extends Error {
742
+ constructor(message) {
743
+ super(message);
744
+ this.name = "InvalidBrowserNavigationUrlError";
745
+ }
746
+ };
747
+ function withBrowserNavigationPolicy(ssrfPolicy) {
748
+ return ssrfPolicy ? { ssrfPolicy } : {};
749
+ }
750
+ async function assertBrowserNavigationAllowed(opts) {
751
+ const rawUrl = String(opts.url ?? "").trim();
752
+ if (!rawUrl) throw new InvalidBrowserNavigationUrlError("url is required");
753
+ let parsed;
754
+ try {
755
+ parsed = new URL(rawUrl);
756
+ } catch {
757
+ throw new InvalidBrowserNavigationUrlError(`Invalid URL: ${rawUrl}`);
758
+ }
759
+ if (!NETWORK_NAVIGATION_PROTOCOLS.has(parsed.protocol)) {
760
+ if (isAllowedNonNetworkNavigationUrl(parsed)) return;
761
+ throw new InvalidBrowserNavigationUrlError(`Navigation blocked: unsupported protocol "${parsed.protocol}"`);
762
+ }
763
+ await resolvePinnedHostnameWithPolicy(parsed.hostname, {
764
+ lookupFn: opts.lookupFn,
765
+ policy: opts.ssrfPolicy
766
+ });
767
+ }
768
+ /**
769
+ * Best-effort post-navigation guard for final page URLs.
770
+ * Only validates network URLs (http/https) and about:blank to avoid false
771
+ * positives on browser-internal error pages (e.g. chrome-error://).
772
+ */
773
+ async function assertBrowserNavigationResultAllowed(opts) {
774
+ const rawUrl = String(opts.url ?? "").trim();
775
+ if (!rawUrl) return;
776
+ let parsed;
777
+ try {
778
+ parsed = new URL(rawUrl);
779
+ } catch {
780
+ return;
781
+ }
782
+ if (NETWORK_NAVIGATION_PROTOCOLS.has(parsed.protocol) || isAllowedNonNetworkNavigationUrl(parsed)) await assertBrowserNavigationAllowed(opts);
783
+ }
784
+
785
+ //#endregion
786
+ //#region src/browser/cdp.ts
787
+ function normalizeCdpWsUrl(wsUrl, cdpUrl) {
788
+ const ws = new URL(wsUrl);
789
+ const cdp = new URL(cdpUrl);
790
+ if (isLoopbackHost(ws.hostname) && !isLoopbackHost(cdp.hostname)) {
791
+ ws.hostname = cdp.hostname;
792
+ const cdpPort = cdp.port || (cdp.protocol === "https:" ? "443" : "80");
793
+ if (cdpPort) ws.port = cdpPort;
794
+ ws.protocol = cdp.protocol === "https:" ? "wss:" : "ws:";
795
+ }
796
+ if (cdp.protocol === "https:" && ws.protocol === "ws:") ws.protocol = "wss:";
797
+ if (!ws.username && !ws.password && (cdp.username || cdp.password)) {
798
+ ws.username = cdp.username;
799
+ ws.password = cdp.password;
800
+ }
801
+ for (const [key, value] of cdp.searchParams.entries()) if (!ws.searchParams.has(key)) ws.searchParams.append(key, value);
802
+ return ws.toString();
803
+ }
804
+ async function captureScreenshot(opts) {
805
+ return await withCdpSocket(opts.wsUrl, async (send) => {
806
+ await send("Page.enable");
807
+ let clip;
808
+ if (opts.fullPage) {
809
+ const metrics = await send("Page.getLayoutMetrics");
810
+ const size = metrics?.cssContentSize ?? metrics?.contentSize;
811
+ const width = Number(size?.width ?? 0);
812
+ const height = Number(size?.height ?? 0);
813
+ if (width > 0 && height > 0) clip = {
814
+ x: 0,
815
+ y: 0,
816
+ width,
817
+ height,
818
+ scale: 1
819
+ };
820
+ }
821
+ const format = opts.format ?? "png";
822
+ const quality = format === "jpeg" ? Math.max(0, Math.min(100, Math.round(opts.quality ?? 85))) : void 0;
823
+ const base64 = (await send("Page.captureScreenshot", {
824
+ format,
825
+ ...quality !== void 0 ? { quality } : {},
826
+ fromSurface: true,
827
+ captureBeyondViewport: true,
828
+ ...clip ? { clip } : {}
829
+ }))?.data;
830
+ if (!base64) throw new Error("Screenshot failed: missing data");
831
+ return Buffer.from(base64, "base64");
832
+ });
833
+ }
834
+ async function createTargetViaCdp(opts) {
835
+ await assertBrowserNavigationAllowed({
836
+ url: opts.url,
837
+ ...withBrowserNavigationPolicy(opts.ssrfPolicy)
838
+ });
839
+ const version = await fetchJson(appendCdpPath(opts.cdpUrl, "/json/version"), 1500);
840
+ const wsUrlRaw = String(version?.webSocketDebuggerUrl ?? "").trim();
841
+ const wsUrl = wsUrlRaw ? normalizeCdpWsUrl(wsUrlRaw, opts.cdpUrl) : "";
842
+ if (!wsUrl) throw new Error("CDP /json/version missing webSocketDebuggerUrl");
843
+ return await withCdpSocket(wsUrl, async (send) => {
844
+ const created = await send("Target.createTarget", { url: opts.url });
845
+ const targetId = String(created?.targetId ?? "").trim();
846
+ if (!targetId) throw new Error("CDP Target.createTarget returned no targetId");
847
+ return { targetId };
848
+ });
849
+ }
850
+ function axValue(v) {
851
+ if (!v || typeof v !== "object") return "";
852
+ const value = v.value;
853
+ if (typeof value === "string") return value;
854
+ if (typeof value === "number" || typeof value === "boolean") return String(value);
855
+ return "";
856
+ }
857
+ function formatAriaSnapshot(nodes, limit) {
858
+ const byId = /* @__PURE__ */ new Map();
859
+ for (const n of nodes) if (n.nodeId) byId.set(n.nodeId, n);
860
+ const referenced = /* @__PURE__ */ new Set();
861
+ for (const n of nodes) for (const c of n.childIds ?? []) referenced.add(c);
862
+ const root = nodes.find((n) => n.nodeId && !referenced.has(n.nodeId)) ?? nodes[0];
863
+ if (!root?.nodeId) return [];
864
+ const out = [];
865
+ const stack = [{
866
+ id: root.nodeId,
867
+ depth: 0
868
+ }];
869
+ while (stack.length && out.length < limit) {
870
+ const popped = stack.pop();
871
+ if (!popped) break;
872
+ const { id, depth } = popped;
873
+ const n = byId.get(id);
874
+ if (!n) continue;
875
+ const role = axValue(n.role);
876
+ const name = axValue(n.name);
877
+ const value = axValue(n.value);
878
+ const description = axValue(n.description);
879
+ const ref = `ax${out.length + 1}`;
880
+ out.push({
881
+ ref,
882
+ role: role || "unknown",
883
+ name: name || "",
884
+ ...value ? { value } : {},
885
+ ...description ? { description } : {},
886
+ ...typeof n.backendDOMNodeId === "number" ? { backendDOMNodeId: n.backendDOMNodeId } : {},
887
+ depth
888
+ });
889
+ const children = (n.childIds ?? []).filter((c) => byId.has(c));
890
+ for (let i = children.length - 1; i >= 0; i--) {
891
+ const child = children[i];
892
+ if (child) stack.push({
893
+ id: child,
894
+ depth: depth + 1
895
+ });
896
+ }
897
+ }
898
+ return out;
899
+ }
900
+ async function snapshotAria(opts) {
901
+ const limit = Math.max(1, Math.min(2e3, Math.floor(opts.limit ?? 500)));
902
+ return await withCdpSocket(opts.wsUrl, async (send) => {
903
+ await send("Accessibility.enable").catch(() => {});
904
+ const res = await send("Accessibility.getFullAXTree");
905
+ return { nodes: formatAriaSnapshot(Array.isArray(res?.nodes) ? res.nodes : [], limit) };
906
+ });
907
+ }
908
+
909
+ //#endregion
910
+ //#region src/browser/chrome.executables.ts
911
+ const CHROMIUM_BUNDLE_IDS = new Set([
912
+ "com.google.Chrome",
913
+ "com.google.Chrome.beta",
914
+ "com.google.Chrome.canary",
915
+ "com.google.Chrome.dev",
916
+ "com.brave.Browser",
917
+ "com.brave.Browser.beta",
918
+ "com.brave.Browser.nightly",
919
+ "com.microsoft.Edge",
920
+ "com.microsoft.EdgeBeta",
921
+ "com.microsoft.EdgeDev",
922
+ "com.microsoft.EdgeCanary",
923
+ "org.chromium.Chromium",
924
+ "com.vivaldi.Vivaldi",
925
+ "com.operasoftware.Opera",
926
+ "com.operasoftware.OperaGX",
927
+ "com.yandex.desktop.yandex-browser",
928
+ "company.thebrowser.Browser"
929
+ ]);
930
+ const CHROMIUM_DESKTOP_IDS = new Set([
931
+ "google-chrome.desktop",
932
+ "google-chrome-beta.desktop",
933
+ "google-chrome-unstable.desktop",
934
+ "brave-browser.desktop",
935
+ "microsoft-edge.desktop",
936
+ "microsoft-edge-beta.desktop",
937
+ "microsoft-edge-dev.desktop",
938
+ "microsoft-edge-canary.desktop",
939
+ "chromium.desktop",
940
+ "chromium-browser.desktop",
941
+ "vivaldi.desktop",
942
+ "vivaldi-stable.desktop",
943
+ "opera.desktop",
944
+ "opera-gx.desktop",
945
+ "yandex-browser.desktop",
946
+ "org.chromium.Chromium.desktop"
947
+ ]);
948
+ const CHROMIUM_EXE_NAMES = new Set([
949
+ "chrome.exe",
950
+ "msedge.exe",
951
+ "brave.exe",
952
+ "brave-browser.exe",
953
+ "chromium.exe",
954
+ "vivaldi.exe",
955
+ "opera.exe",
956
+ "launcher.exe",
957
+ "yandex.exe",
958
+ "yandexbrowser.exe",
959
+ "google chrome",
960
+ "google chrome canary",
961
+ "brave browser",
962
+ "microsoft edge",
963
+ "chromium",
964
+ "chrome",
965
+ "brave",
966
+ "msedge",
967
+ "brave-browser",
968
+ "google-chrome",
969
+ "google-chrome-stable",
970
+ "google-chrome-beta",
971
+ "google-chrome-unstable",
972
+ "microsoft-edge",
973
+ "microsoft-edge-beta",
974
+ "microsoft-edge-dev",
975
+ "microsoft-edge-canary",
976
+ "chromium-browser",
977
+ "vivaldi",
978
+ "vivaldi-stable",
979
+ "opera",
980
+ "opera-stable",
981
+ "opera-gx",
982
+ "yandex-browser"
983
+ ]);
984
+ function exists$1(filePath) {
985
+ try {
986
+ return fs.existsSync(filePath);
987
+ } catch {
988
+ return false;
989
+ }
990
+ }
991
+ function execText(command, args, timeoutMs = 1200, maxBuffer = 1024 * 1024) {
992
+ try {
993
+ const output = execFileSync(command, args, {
994
+ timeout: timeoutMs,
995
+ encoding: "utf8",
996
+ maxBuffer
997
+ });
998
+ return String(output ?? "").trim() || null;
999
+ } catch {
1000
+ return null;
1001
+ }
1002
+ }
1003
+ function inferKindFromIdentifier(identifier) {
1004
+ const id = identifier.toLowerCase();
1005
+ if (id.includes("brave")) return "brave";
1006
+ if (id.includes("edge")) return "edge";
1007
+ if (id.includes("chromium")) return "chromium";
1008
+ if (id.includes("canary")) return "canary";
1009
+ if (id.includes("opera") || id.includes("vivaldi") || id.includes("yandex") || id.includes("thebrowser")) return "chromium";
1010
+ return "chrome";
1011
+ }
1012
+ function inferKindFromExecutableName(name) {
1013
+ const lower = name.toLowerCase();
1014
+ if (lower.includes("brave")) return "brave";
1015
+ if (lower.includes("edge") || lower.includes("msedge")) return "edge";
1016
+ if (lower.includes("chromium")) return "chromium";
1017
+ if (lower.includes("canary") || lower.includes("sxs")) return "canary";
1018
+ if (lower.includes("opera") || lower.includes("vivaldi") || lower.includes("yandex")) return "chromium";
1019
+ return "chrome";
1020
+ }
1021
+ function detectDefaultChromiumExecutable(platform) {
1022
+ if (platform === "darwin") return detectDefaultChromiumExecutableMac();
1023
+ if (platform === "linux") return detectDefaultChromiumExecutableLinux();
1024
+ if (platform === "win32") return detectDefaultChromiumExecutableWindows();
1025
+ return null;
1026
+ }
1027
+ function detectDefaultChromiumExecutableMac() {
1028
+ const bundleId = detectDefaultBrowserBundleIdMac();
1029
+ if (!bundleId || !CHROMIUM_BUNDLE_IDS.has(bundleId)) return null;
1030
+ const appPathRaw = execText("/usr/bin/osascript", ["-e", `POSIX path of (path to application id "${bundleId}")`]);
1031
+ if (!appPathRaw) return null;
1032
+ const appPath = appPathRaw.trim().replace(/\/$/, "");
1033
+ const exeName = execText("/usr/bin/defaults", [
1034
+ "read",
1035
+ path.join(appPath, "Contents", "Info"),
1036
+ "CFBundleExecutable"
1037
+ ]);
1038
+ if (!exeName) return null;
1039
+ const exePath = path.join(appPath, "Contents", "MacOS", exeName.trim());
1040
+ if (!exists$1(exePath)) return null;
1041
+ return {
1042
+ kind: inferKindFromIdentifier(bundleId),
1043
+ path: exePath
1044
+ };
1045
+ }
1046
+ function detectDefaultBrowserBundleIdMac() {
1047
+ const plistPath = path.join(os.homedir(), "Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist");
1048
+ if (!exists$1(plistPath)) return null;
1049
+ const handlersRaw = execText("/usr/bin/plutil", [
1050
+ "-extract",
1051
+ "LSHandlers",
1052
+ "json",
1053
+ "-o",
1054
+ "-",
1055
+ "--",
1056
+ plistPath
1057
+ ], 2e3, 5 * 1024 * 1024);
1058
+ if (!handlersRaw) return null;
1059
+ let handlers;
1060
+ try {
1061
+ handlers = JSON.parse(handlersRaw);
1062
+ } catch {
1063
+ return null;
1064
+ }
1065
+ if (!Array.isArray(handlers)) return null;
1066
+ const resolveScheme = (scheme) => {
1067
+ let candidate = null;
1068
+ for (const entry of handlers) {
1069
+ if (!entry || typeof entry !== "object") continue;
1070
+ const record = entry;
1071
+ if (record.LSHandlerURLScheme !== scheme) continue;
1072
+ const role = typeof record.LSHandlerRoleAll === "string" && record.LSHandlerRoleAll || typeof record.LSHandlerRoleViewer === "string" && record.LSHandlerRoleViewer || null;
1073
+ if (role) candidate = role;
1074
+ }
1075
+ return candidate;
1076
+ };
1077
+ return resolveScheme("http") ?? resolveScheme("https");
1078
+ }
1079
+ function detectDefaultChromiumExecutableLinux() {
1080
+ const desktopId = execText("xdg-settings", ["get", "default-web-browser"]) || execText("xdg-mime", [
1081
+ "query",
1082
+ "default",
1083
+ "x-scheme-handler/http"
1084
+ ]);
1085
+ if (!desktopId) return null;
1086
+ const trimmed = desktopId.trim();
1087
+ if (!CHROMIUM_DESKTOP_IDS.has(trimmed)) return null;
1088
+ const desktopPath = findDesktopFilePath(trimmed);
1089
+ if (!desktopPath) return null;
1090
+ const execLine = readDesktopExecLine(desktopPath);
1091
+ if (!execLine) return null;
1092
+ const command = extractExecutableFromExecLine(execLine);
1093
+ if (!command) return null;
1094
+ const resolved = resolveLinuxExecutablePath(command);
1095
+ if (!resolved) return null;
1096
+ const exeName = path.posix.basename(resolved).toLowerCase();
1097
+ if (!CHROMIUM_EXE_NAMES.has(exeName)) return null;
1098
+ return {
1099
+ kind: inferKindFromExecutableName(exeName),
1100
+ path: resolved
1101
+ };
1102
+ }
1103
+ function detectDefaultChromiumExecutableWindows() {
1104
+ const progId = readWindowsProgId();
1105
+ const command = (progId ? readWindowsCommandForProgId(progId) : null) || readWindowsCommandForProgId("http");
1106
+ if (!command) return null;
1107
+ const exePath = extractWindowsExecutablePath(expandWindowsEnvVars(command));
1108
+ if (!exePath) return null;
1109
+ if (!exists$1(exePath)) return null;
1110
+ const exeName = path.win32.basename(exePath).toLowerCase();
1111
+ if (!CHROMIUM_EXE_NAMES.has(exeName)) return null;
1112
+ return {
1113
+ kind: inferKindFromExecutableName(exeName),
1114
+ path: exePath
1115
+ };
1116
+ }
1117
+ function findDesktopFilePath(desktopId) {
1118
+ const candidates = [
1119
+ path.join(os.homedir(), ".local", "share", "applications", desktopId),
1120
+ path.join("/usr/local/share/applications", desktopId),
1121
+ path.join("/usr/share/applications", desktopId),
1122
+ path.join("/var/lib/snapd/desktop/applications", desktopId)
1123
+ ];
1124
+ for (const candidate of candidates) if (exists$1(candidate)) return candidate;
1125
+ return null;
1126
+ }
1127
+ function readDesktopExecLine(desktopPath) {
1128
+ try {
1129
+ const lines = fs.readFileSync(desktopPath, "utf8").split(/\r?\n/);
1130
+ for (const line of lines) if (line.startsWith("Exec=")) return line.slice(5).trim();
1131
+ } catch {}
1132
+ return null;
1133
+ }
1134
+ function extractExecutableFromExecLine(execLine) {
1135
+ const tokens = splitExecLine(execLine);
1136
+ for (const token of tokens) {
1137
+ if (!token) continue;
1138
+ if (token === "env") continue;
1139
+ if (token.includes("=") && !token.startsWith("/") && !token.includes("\\")) continue;
1140
+ return token.replace(/^["']|["']$/g, "");
1141
+ }
1142
+ return null;
1143
+ }
1144
+ function splitExecLine(line) {
1145
+ const tokens = [];
1146
+ let current = "";
1147
+ let inQuotes = false;
1148
+ let quoteChar = "";
1149
+ for (let i = 0; i < line.length; i += 1) {
1150
+ const ch = line[i];
1151
+ if ((ch === "\"" || ch === "'") && (!inQuotes || ch === quoteChar)) {
1152
+ if (inQuotes) {
1153
+ inQuotes = false;
1154
+ quoteChar = "";
1155
+ } else {
1156
+ inQuotes = true;
1157
+ quoteChar = ch;
1158
+ }
1159
+ continue;
1160
+ }
1161
+ if (!inQuotes && /\s/.test(ch)) {
1162
+ if (current) {
1163
+ tokens.push(current);
1164
+ current = "";
1165
+ }
1166
+ continue;
1167
+ }
1168
+ current += ch;
1169
+ }
1170
+ if (current) tokens.push(current);
1171
+ return tokens;
1172
+ }
1173
+ function resolveLinuxExecutablePath(command) {
1174
+ const cleaned = command.trim().replace(/%[a-zA-Z]/g, "");
1175
+ if (!cleaned) return null;
1176
+ if (cleaned.startsWith("/")) return cleaned;
1177
+ const resolved = execText("which", [cleaned], 800);
1178
+ return resolved ? resolved.trim() : null;
1179
+ }
1180
+ function readWindowsProgId() {
1181
+ const output = execText("reg", [
1182
+ "query",
1183
+ "HKCU\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice",
1184
+ "/v",
1185
+ "ProgId"
1186
+ ]);
1187
+ if (!output) return null;
1188
+ return output.match(/ProgId\s+REG_\w+\s+(.+)$/im)?.[1]?.trim() || null;
1189
+ }
1190
+ function readWindowsCommandForProgId(progId) {
1191
+ const output = execText("reg", [
1192
+ "query",
1193
+ progId === "http" ? "HKCR\\http\\shell\\open\\command" : `HKCR\\${progId}\\shell\\open\\command`,
1194
+ "/ve"
1195
+ ]);
1196
+ if (!output) return null;
1197
+ return output.match(/REG_\w+\s+(.+)$/im)?.[1]?.trim() || null;
1198
+ }
1199
+ function expandWindowsEnvVars(value) {
1200
+ return value.replace(/%([^%]+)%/g, (_match, name) => {
1201
+ const key = String(name ?? "").trim();
1202
+ return key ? process.env[key] ?? `%${key}%` : _match;
1203
+ });
1204
+ }
1205
+ function extractWindowsExecutablePath(command) {
1206
+ const quoted = command.match(/"([^"]+\\.exe)"/i);
1207
+ if (quoted?.[1]) return quoted[1];
1208
+ const unquoted = command.match(/([^\\s]+\\.exe)/i);
1209
+ if (unquoted?.[1]) return unquoted[1];
1210
+ return null;
1211
+ }
1212
+ function findFirstExecutable(candidates) {
1213
+ for (const candidate of candidates) if (exists$1(candidate.path)) return candidate;
1214
+ return null;
1215
+ }
1216
+ function findChromeExecutableMac() {
1217
+ return findFirstExecutable([
1218
+ {
1219
+ kind: "chrome",
1220
+ path: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
1221
+ },
1222
+ {
1223
+ kind: "chrome",
1224
+ path: path.join(os.homedir(), "Applications/Google Chrome.app/Contents/MacOS/Google Chrome")
1225
+ },
1226
+ {
1227
+ kind: "brave",
1228
+ path: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser"
1229
+ },
1230
+ {
1231
+ kind: "brave",
1232
+ path: path.join(os.homedir(), "Applications/Brave Browser.app/Contents/MacOS/Brave Browser")
1233
+ },
1234
+ {
1235
+ kind: "edge",
1236
+ path: "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"
1237
+ },
1238
+ {
1239
+ kind: "edge",
1240
+ path: path.join(os.homedir(), "Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge")
1241
+ },
1242
+ {
1243
+ kind: "chromium",
1244
+ path: "/Applications/Chromium.app/Contents/MacOS/Chromium"
1245
+ },
1246
+ {
1247
+ kind: "chromium",
1248
+ path: path.join(os.homedir(), "Applications/Chromium.app/Contents/MacOS/Chromium")
1249
+ },
1250
+ {
1251
+ kind: "canary",
1252
+ path: "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary"
1253
+ },
1254
+ {
1255
+ kind: "canary",
1256
+ path: path.join(os.homedir(), "Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary")
1257
+ }
1258
+ ]);
1259
+ }
1260
+ function findChromeExecutableLinux() {
1261
+ return findFirstExecutable([
1262
+ {
1263
+ kind: "chrome",
1264
+ path: "/usr/bin/google-chrome"
1265
+ },
1266
+ {
1267
+ kind: "chrome",
1268
+ path: "/usr/bin/google-chrome-stable"
1269
+ },
1270
+ {
1271
+ kind: "chrome",
1272
+ path: "/usr/bin/chrome"
1273
+ },
1274
+ {
1275
+ kind: "brave",
1276
+ path: "/usr/bin/brave-browser"
1277
+ },
1278
+ {
1279
+ kind: "brave",
1280
+ path: "/usr/bin/brave-browser-stable"
1281
+ },
1282
+ {
1283
+ kind: "brave",
1284
+ path: "/usr/bin/brave"
1285
+ },
1286
+ {
1287
+ kind: "brave",
1288
+ path: "/snap/bin/brave"
1289
+ },
1290
+ {
1291
+ kind: "edge",
1292
+ path: "/usr/bin/microsoft-edge"
1293
+ },
1294
+ {
1295
+ kind: "edge",
1296
+ path: "/usr/bin/microsoft-edge-stable"
1297
+ },
1298
+ {
1299
+ kind: "chromium",
1300
+ path: "/usr/bin/chromium"
1301
+ },
1302
+ {
1303
+ kind: "chromium",
1304
+ path: "/usr/bin/chromium-browser"
1305
+ },
1306
+ {
1307
+ kind: "chromium",
1308
+ path: "/snap/bin/chromium"
1309
+ }
1310
+ ]);
1311
+ }
1312
+ function findChromeExecutableWindows() {
1313
+ const localAppData = process.env.LOCALAPPDATA ?? "";
1314
+ const programFiles = process.env.ProgramFiles ?? "C:\\Program Files";
1315
+ const programFilesX86 = process.env["ProgramFiles(x86)"] ?? "C:\\Program Files (x86)";
1316
+ const joinWin = path.win32.join;
1317
+ const candidates = [];
1318
+ if (localAppData) {
1319
+ candidates.push({
1320
+ kind: "chrome",
1321
+ path: joinWin(localAppData, "Google", "Chrome", "Application", "chrome.exe")
1322
+ });
1323
+ candidates.push({
1324
+ kind: "brave",
1325
+ path: joinWin(localAppData, "BraveSoftware", "Brave-Browser", "Application", "brave.exe")
1326
+ });
1327
+ candidates.push({
1328
+ kind: "edge",
1329
+ path: joinWin(localAppData, "Microsoft", "Edge", "Application", "msedge.exe")
1330
+ });
1331
+ candidates.push({
1332
+ kind: "chromium",
1333
+ path: joinWin(localAppData, "Chromium", "Application", "chrome.exe")
1334
+ });
1335
+ candidates.push({
1336
+ kind: "canary",
1337
+ path: joinWin(localAppData, "Google", "Chrome SxS", "Application", "chrome.exe")
1338
+ });
1339
+ }
1340
+ candidates.push({
1341
+ kind: "chrome",
1342
+ path: joinWin(programFiles, "Google", "Chrome", "Application", "chrome.exe")
1343
+ });
1344
+ candidates.push({
1345
+ kind: "chrome",
1346
+ path: joinWin(programFilesX86, "Google", "Chrome", "Application", "chrome.exe")
1347
+ });
1348
+ candidates.push({
1349
+ kind: "brave",
1350
+ path: joinWin(programFiles, "BraveSoftware", "Brave-Browser", "Application", "brave.exe")
1351
+ });
1352
+ candidates.push({
1353
+ kind: "brave",
1354
+ path: joinWin(programFilesX86, "BraveSoftware", "Brave-Browser", "Application", "brave.exe")
1355
+ });
1356
+ candidates.push({
1357
+ kind: "edge",
1358
+ path: joinWin(programFiles, "Microsoft", "Edge", "Application", "msedge.exe")
1359
+ });
1360
+ candidates.push({
1361
+ kind: "edge",
1362
+ path: joinWin(programFilesX86, "Microsoft", "Edge", "Application", "msedge.exe")
1363
+ });
1364
+ return findFirstExecutable(candidates);
1365
+ }
1366
+ function resolveBrowserExecutableForPlatform(resolved, platform) {
1367
+ if (resolved.executablePath) {
1368
+ if (!exists$1(resolved.executablePath)) throw new Error(`browser.executablePath not found: ${resolved.executablePath}`);
1369
+ return {
1370
+ kind: "custom",
1371
+ path: resolved.executablePath
1372
+ };
1373
+ }
1374
+ const detected = detectDefaultChromiumExecutable(platform);
1375
+ if (detected) return detected;
1376
+ if (platform === "darwin") return findChromeExecutableMac();
1377
+ if (platform === "linux") return findChromeExecutableLinux();
1378
+ if (platform === "win32") return findChromeExecutableWindows();
1379
+ return null;
1380
+ }
1381
+
1382
+ //#endregion
1383
+ //#region src/browser/chrome.profile-decoration.ts
1384
+ function decoratedMarkerPath(userDataDir) {
1385
+ return path.join(userDataDir, ".remoteclaw-profile-decorated");
1386
+ }
1387
+ function safeReadJson(filePath) {
1388
+ try {
1389
+ if (!fs.existsSync(filePath)) return null;
1390
+ const raw = fs.readFileSync(filePath, "utf-8");
1391
+ const parsed = JSON.parse(raw);
1392
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return null;
1393
+ return parsed;
1394
+ } catch {
1395
+ return null;
1396
+ }
1397
+ }
1398
+ function safeWriteJson(filePath, data) {
1399
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
1400
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
1401
+ }
1402
+ function setDeep(obj, keys, value) {
1403
+ let node = obj;
1404
+ for (const key of keys.slice(0, -1)) {
1405
+ const next = node[key];
1406
+ if (typeof next !== "object" || next === null || Array.isArray(next)) node[key] = {};
1407
+ node = node[key];
1408
+ }
1409
+ node[keys[keys.length - 1] ?? ""] = value;
1410
+ }
1411
+ function parseHexRgbToSignedArgbInt(hex) {
1412
+ const cleaned = hex.trim().replace(/^#/, "");
1413
+ if (!/^[0-9a-fA-F]{6}$/.test(cleaned)) return null;
1414
+ const argbUnsigned = 255 << 24 | Number.parseInt(cleaned, 16);
1415
+ return argbUnsigned > 2147483647 ? argbUnsigned - 4294967296 : argbUnsigned;
1416
+ }
1417
+ function isProfileDecorated(userDataDir, desiredName, desiredColorHex) {
1418
+ const desiredColorInt = parseHexRgbToSignedArgbInt(desiredColorHex);
1419
+ const localStatePath = path.join(userDataDir, "Local State");
1420
+ const preferencesPath = path.join(userDataDir, "Default", "Preferences");
1421
+ const profile = safeReadJson(localStatePath)?.profile;
1422
+ const infoCache = typeof profile === "object" && profile !== null && !Array.isArray(profile) ? profile.info_cache : null;
1423
+ const info = typeof infoCache === "object" && infoCache !== null && !Array.isArray(infoCache) && typeof infoCache.Default === "object" && infoCache.Default !== null && !Array.isArray(infoCache.Default) ? infoCache.Default : null;
1424
+ const prefs = safeReadJson(preferencesPath);
1425
+ const browserTheme = (() => {
1426
+ const browser = prefs?.browser;
1427
+ const theme = typeof browser === "object" && browser !== null && !Array.isArray(browser) ? browser.theme : null;
1428
+ return typeof theme === "object" && theme !== null && !Array.isArray(theme) ? theme : null;
1429
+ })();
1430
+ const autogeneratedTheme = (() => {
1431
+ const autogenerated = prefs?.autogenerated;
1432
+ const theme = typeof autogenerated === "object" && autogenerated !== null && !Array.isArray(autogenerated) ? autogenerated.theme : null;
1433
+ return typeof theme === "object" && theme !== null && !Array.isArray(theme) ? theme : null;
1434
+ })();
1435
+ const nameOk = typeof info?.name === "string" ? info.name === desiredName : true;
1436
+ if (desiredColorInt == null) return nameOk;
1437
+ const localSeedOk = typeof info?.profile_color_seed === "number" ? info.profile_color_seed === desiredColorInt : false;
1438
+ const prefOk = typeof browserTheme?.user_color2 === "number" && browserTheme.user_color2 === desiredColorInt || typeof autogeneratedTheme?.color === "number" && autogeneratedTheme.color === desiredColorInt;
1439
+ return nameOk && localSeedOk && prefOk;
1440
+ }
1441
+ /**
1442
+ * Best-effort profile decoration (name + brand-orange). Chrome preference keys
1443
+ * vary by version; we keep this conservative and idempotent.
1444
+ */
1445
+ function decorateRemoteClawProfile(userDataDir, opts) {
1446
+ const desiredName = opts?.name ?? DEFAULT_REMOTECLAW_BROWSER_PROFILE_NAME;
1447
+ const desiredColor = (opts?.color ?? DEFAULT_REMOTECLAW_BROWSER_COLOR).toUpperCase();
1448
+ const desiredColorInt = parseHexRgbToSignedArgbInt(desiredColor);
1449
+ const localStatePath = path.join(userDataDir, "Local State");
1450
+ const preferencesPath = path.join(userDataDir, "Default", "Preferences");
1451
+ const localState = safeReadJson(localStatePath) ?? {};
1452
+ setDeep(localState, [
1453
+ "profile",
1454
+ "info_cache",
1455
+ "Default",
1456
+ "name"
1457
+ ], desiredName);
1458
+ setDeep(localState, [
1459
+ "profile",
1460
+ "info_cache",
1461
+ "Default",
1462
+ "shortcut_name"
1463
+ ], desiredName);
1464
+ setDeep(localState, [
1465
+ "profile",
1466
+ "info_cache",
1467
+ "Default",
1468
+ "user_name"
1469
+ ], desiredName);
1470
+ setDeep(localState, [
1471
+ "profile",
1472
+ "info_cache",
1473
+ "Default",
1474
+ "profile_color"
1475
+ ], desiredColor);
1476
+ setDeep(localState, [
1477
+ "profile",
1478
+ "info_cache",
1479
+ "Default",
1480
+ "user_color"
1481
+ ], desiredColor);
1482
+ if (desiredColorInt != null) {
1483
+ setDeep(localState, [
1484
+ "profile",
1485
+ "info_cache",
1486
+ "Default",
1487
+ "profile_color_seed"
1488
+ ], desiredColorInt);
1489
+ setDeep(localState, [
1490
+ "profile",
1491
+ "info_cache",
1492
+ "Default",
1493
+ "profile_highlight_color"
1494
+ ], desiredColorInt);
1495
+ setDeep(localState, [
1496
+ "profile",
1497
+ "info_cache",
1498
+ "Default",
1499
+ "default_avatar_fill_color"
1500
+ ], desiredColorInt);
1501
+ setDeep(localState, [
1502
+ "profile",
1503
+ "info_cache",
1504
+ "Default",
1505
+ "default_avatar_stroke_color"
1506
+ ], desiredColorInt);
1507
+ }
1508
+ safeWriteJson(localStatePath, localState);
1509
+ const prefs = safeReadJson(preferencesPath) ?? {};
1510
+ setDeep(prefs, ["profile", "name"], desiredName);
1511
+ setDeep(prefs, ["profile", "profile_color"], desiredColor);
1512
+ setDeep(prefs, ["profile", "user_color"], desiredColor);
1513
+ if (desiredColorInt != null) {
1514
+ setDeep(prefs, [
1515
+ "autogenerated",
1516
+ "theme",
1517
+ "color"
1518
+ ], desiredColorInt);
1519
+ setDeep(prefs, [
1520
+ "browser",
1521
+ "theme",
1522
+ "user_color2"
1523
+ ], desiredColorInt);
1524
+ }
1525
+ safeWriteJson(preferencesPath, prefs);
1526
+ try {
1527
+ fs.writeFileSync(decoratedMarkerPath(userDataDir), `${Date.now()}\n`, "utf-8");
1528
+ } catch {}
1529
+ }
1530
+ function ensureProfileCleanExit(userDataDir) {
1531
+ const preferencesPath = path.join(userDataDir, "Default", "Preferences");
1532
+ const prefs = safeReadJson(preferencesPath) ?? {};
1533
+ setDeep(prefs, ["exit_type"], "Normal");
1534
+ setDeep(prefs, ["exited_cleanly"], true);
1535
+ safeWriteJson(preferencesPath, prefs);
1536
+ }
1537
+
1538
+ //#endregion
1539
+ //#region src/browser/chrome.ts
1540
+ const log = createSubsystemLogger("browser").child("chrome");
1541
+ function exists(filePath) {
1542
+ try {
1543
+ return fs.existsSync(filePath);
1544
+ } catch {
1545
+ return false;
1546
+ }
1547
+ }
1548
+ function resolveBrowserExecutable(resolved) {
1549
+ return resolveBrowserExecutableForPlatform(resolved, process.platform);
1550
+ }
1551
+ function resolveRemoteClawUserDataDir(profileName = DEFAULT_REMOTECLAW_BROWSER_PROFILE_NAME) {
1552
+ return path.join(CONFIG_DIR, "browser", profileName, "user-data");
1553
+ }
1554
+ function cdpUrlForPort(cdpPort) {
1555
+ return `http://127.0.0.1:${cdpPort}`;
1556
+ }
1557
+ async function isChromeReachable(cdpUrl, timeoutMs = 500) {
1558
+ const version = await fetchChromeVersion(cdpUrl, timeoutMs);
1559
+ return Boolean(version);
1560
+ }
1561
+ async function fetchChromeVersion(cdpUrl, timeoutMs = 500) {
1562
+ const ctrl = new AbortController();
1563
+ const t = setTimeout(ctrl.abort.bind(ctrl), timeoutMs);
1564
+ try {
1565
+ const versionUrl = appendCdpPath(cdpUrl, "/json/version");
1566
+ const res = await fetch(versionUrl, {
1567
+ signal: ctrl.signal,
1568
+ headers: getHeadersWithAuth(versionUrl)
1569
+ });
1570
+ if (!res.ok) return null;
1571
+ const data = await res.json();
1572
+ if (!data || typeof data !== "object") return null;
1573
+ return data;
1574
+ } catch {
1575
+ return null;
1576
+ } finally {
1577
+ clearTimeout(t);
1578
+ }
1579
+ }
1580
+ async function getChromeWebSocketUrl(cdpUrl, timeoutMs = 500) {
1581
+ const version = await fetchChromeVersion(cdpUrl, timeoutMs);
1582
+ const wsUrl = String(version?.webSocketDebuggerUrl ?? "").trim();
1583
+ if (!wsUrl) return null;
1584
+ return normalizeCdpWsUrl(wsUrl, cdpUrl);
1585
+ }
1586
+ async function canOpenWebSocket(wsUrl, timeoutMs = 800) {
1587
+ return await new Promise((resolve) => {
1588
+ const headers = getHeadersWithAuth(wsUrl);
1589
+ const ws = new WebSocket(wsUrl, {
1590
+ handshakeTimeout: timeoutMs,
1591
+ ...Object.keys(headers).length ? { headers } : {}
1592
+ });
1593
+ const timer = setTimeout(() => {
1594
+ try {
1595
+ ws.terminate();
1596
+ } catch {}
1597
+ resolve(false);
1598
+ }, Math.max(50, timeoutMs + 25));
1599
+ ws.once("open", () => {
1600
+ clearTimeout(timer);
1601
+ try {
1602
+ ws.close();
1603
+ } catch {}
1604
+ resolve(true);
1605
+ });
1606
+ ws.once("error", () => {
1607
+ clearTimeout(timer);
1608
+ resolve(false);
1609
+ });
1610
+ });
1611
+ }
1612
+ async function isChromeCdpReady(cdpUrl, timeoutMs = 500, handshakeTimeoutMs = 800) {
1613
+ const wsUrl = await getChromeWebSocketUrl(cdpUrl, timeoutMs);
1614
+ if (!wsUrl) return false;
1615
+ return await canOpenWebSocket(wsUrl, handshakeTimeoutMs);
1616
+ }
1617
+ async function launchRemoteClawChrome(resolved, profile) {
1618
+ if (!profile.cdpIsLoopback) throw new Error(`Profile "${profile.name}" is remote; cannot launch local Chrome.`);
1619
+ await ensurePortAvailable(profile.cdpPort);
1620
+ const exe = resolveBrowserExecutable(resolved);
1621
+ if (!exe) throw new Error("No supported browser found (Chrome/Brave/Edge/Chromium on macOS, Linux, or Windows).");
1622
+ const userDataDir = resolveRemoteClawUserDataDir(profile.name);
1623
+ fs.mkdirSync(userDataDir, { recursive: true });
1624
+ const needsDecorate = !isProfileDecorated(userDataDir, profile.name, (profile.color ?? DEFAULT_REMOTECLAW_BROWSER_COLOR).toUpperCase());
1625
+ const spawnOnce = () => {
1626
+ const args = [
1627
+ `--remote-debugging-port=${profile.cdpPort}`,
1628
+ `--user-data-dir=${userDataDir}`,
1629
+ "--no-first-run",
1630
+ "--no-default-browser-check",
1631
+ "--disable-sync",
1632
+ "--disable-background-networking",
1633
+ "--disable-component-update",
1634
+ "--disable-features=Translate,MediaRouter",
1635
+ "--disable-session-crashed-bubble",
1636
+ "--hide-crash-restore-bubble",
1637
+ "--password-store=basic"
1638
+ ];
1639
+ if (resolved.headless) {
1640
+ args.push("--headless=new");
1641
+ args.push("--disable-gpu");
1642
+ }
1643
+ if (resolved.noSandbox) {
1644
+ args.push("--no-sandbox");
1645
+ args.push("--disable-setuid-sandbox");
1646
+ }
1647
+ if (process.platform === "linux") args.push("--disable-dev-shm-usage");
1648
+ args.push("--disable-blink-features=AutomationControlled");
1649
+ if (resolved.extraArgs.length > 0) args.push(...resolved.extraArgs);
1650
+ args.push("about:blank");
1651
+ return spawn(exe.path, args, {
1652
+ stdio: "pipe",
1653
+ env: {
1654
+ ...process.env,
1655
+ HOME: os.homedir()
1656
+ }
1657
+ });
1658
+ };
1659
+ const startedAt = Date.now();
1660
+ const localStatePath = path.join(userDataDir, "Local State");
1661
+ const preferencesPath = path.join(userDataDir, "Default", "Preferences");
1662
+ if (!exists(localStatePath) || !exists(preferencesPath)) {
1663
+ const bootstrap = spawnOnce();
1664
+ const deadline = Date.now() + 1e4;
1665
+ while (Date.now() < deadline) {
1666
+ if (exists(localStatePath) && exists(preferencesPath)) break;
1667
+ await new Promise((r) => setTimeout(r, 100));
1668
+ }
1669
+ try {
1670
+ bootstrap.kill("SIGTERM");
1671
+ } catch {}
1672
+ const exitDeadline = Date.now() + 5e3;
1673
+ while (Date.now() < exitDeadline) {
1674
+ if (bootstrap.exitCode != null) break;
1675
+ await new Promise((r) => setTimeout(r, 50));
1676
+ }
1677
+ }
1678
+ if (needsDecorate) try {
1679
+ decorateRemoteClawProfile(userDataDir, {
1680
+ name: profile.name,
1681
+ color: profile.color
1682
+ });
1683
+ log.info(`🦀 remoteclaw browser profile decorated (${profile.color})`);
1684
+ } catch (err) {
1685
+ log.warn(`remoteclaw browser profile decoration failed: ${String(err)}`);
1686
+ }
1687
+ try {
1688
+ ensureProfileCleanExit(userDataDir);
1689
+ } catch (err) {
1690
+ log.warn(`remoteclaw browser clean-exit prefs failed: ${String(err)}`);
1691
+ }
1692
+ const proc = spawnOnce();
1693
+ const readyDeadline = Date.now() + 15e3;
1694
+ while (Date.now() < readyDeadline) {
1695
+ if (await isChromeReachable(profile.cdpUrl, 500)) break;
1696
+ await new Promise((r) => setTimeout(r, 200));
1697
+ }
1698
+ if (!await isChromeReachable(profile.cdpUrl, 500)) {
1699
+ try {
1700
+ proc.kill("SIGKILL");
1701
+ } catch {}
1702
+ throw new Error(`Failed to start Chrome CDP on port ${profile.cdpPort} for profile "${profile.name}".`);
1703
+ }
1704
+ const pid = proc.pid ?? -1;
1705
+ log.info(`🦀 remoteclaw browser started (${exe.kind}) profile "${profile.name}" on 127.0.0.1:${profile.cdpPort} (pid ${pid})`);
1706
+ return {
1707
+ pid,
1708
+ exe,
1709
+ userDataDir,
1710
+ cdpPort: profile.cdpPort,
1711
+ startedAt,
1712
+ proc
1713
+ };
1714
+ }
1715
+ async function stopRemoteClawChrome(running, timeoutMs = 2500) {
1716
+ const proc = running.proc;
1717
+ if (proc.killed) return;
1718
+ try {
1719
+ proc.kill("SIGTERM");
1720
+ } catch {}
1721
+ const start = Date.now();
1722
+ while (Date.now() - start < timeoutMs) {
1723
+ if (!proc.exitCode && proc.killed) break;
1724
+ if (!await isChromeReachable(cdpUrlForPort(running.cdpPort), 200)) return;
1725
+ await new Promise((r) => setTimeout(r, 100));
1726
+ }
1727
+ try {
1728
+ proc.kill("SIGKILL");
1729
+ } catch {}
1730
+ }
1731
+
1732
+ //#endregion
1733
+ export { stopChromeExtensionRelayServer as C, ensureChromeExtensionRelayServer as S, appendCdpPath as _, resolveRemoteClawUserDataDir as a, getHeadersWithAuth as b, captureScreenshot as c, normalizeCdpWsUrl as d, snapshotAria as f, withBrowserNavigationPolicy as g, assertBrowserNavigationResultAllowed as h, launchRemoteClawChrome as i, createTargetViaCdp as l, assertBrowserNavigationAllowed as m, isChromeCdpReady as n, stopRemoteClawChrome as o, InvalidBrowserNavigationUrlError as p, isChromeReachable as r, resolveBrowserExecutableForPlatform as s, getChromeWebSocketUrl as t, formatAriaSnapshot as u, fetchJson as v, withCdpSocket as x, fetchOk as y };