remoteclaw 0.1.0-next.2abd2fa → 0.1.0-next.2e9a6cd

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 (1052) hide show
  1. package/README.md +9 -7
  2. package/dist/accounts-A8jZK_v9.js +272 -0
  3. package/dist/accounts-BegPt5VR.js +36 -0
  4. package/dist/accounts-BmiimLpP.js +47 -0
  5. package/dist/accounts-Bomfgw0M.js +32 -0
  6. package/dist/accounts-Bpk-loA6.js +47 -0
  7. package/dist/accounts-DAdUdbPk.js +36 -0
  8. package/dist/accounts-WYyfAiie.js +270 -0
  9. package/dist/ack-reactions-CMDRj7fJ.js +446 -0
  10. package/dist/ack-reactions-D7VScSny.js +446 -0
  11. package/dist/acp-cli-BpMS0SsZ.js +1323 -0
  12. package/dist/acp-cli-DkXTlCpF.js +1317 -0
  13. package/dist/active-listener--FT8ewxl.js +37 -0
  14. package/dist/active-listener-C1StcdIA.js +37 -0
  15. package/dist/agent-C76P7tEr.js +703 -0
  16. package/dist/agent-helpers-CK3Obbsi.js +400 -0
  17. package/dist/agent-helpers-KHUla1K7.js +400 -0
  18. package/dist/agent-scope-BrDeaWWf.js +116 -0
  19. package/dist/agent-scope-DxqtYjuJ.js +114 -0
  20. package/dist/agent-ue8p9AIv.js +704 -0
  21. package/dist/agents--24oKN80.js +788 -0
  22. package/dist/agents.config-CWAUoPzG.js +116 -0
  23. package/dist/agents.config-Ck45E_ce.js +116 -0
  24. package/dist/audio-B85HoT7E.js +43 -0
  25. package/dist/audio-BbCUzndz.js +43 -0
  26. package/dist/audio-preflight-B3f0x3zu.js +69 -0
  27. package/dist/audio-preflight-Dv76vFTu.js +64 -0
  28. package/dist/audit-BAbBf2MU.js +3149 -0
  29. package/dist/audit-g55SYz1m.js +3149 -0
  30. package/dist/auth-Bq44qPUd.js +448 -0
  31. package/dist/auth-CVfoI--S.js +281 -0
  32. package/dist/auth-DTWpZJ1a.js +279 -0
  33. package/dist/auth-VItd2pwK.js +448 -0
  34. package/dist/banner-CyPQJybO.js +294 -0
  35. package/dist/binaries-DbgLoSWv.js +13 -0
  36. package/dist/bindings-6KojDoIi.js +69 -0
  37. package/dist/bindings-B6icMMUx.js +69 -0
  38. package/dist/bonjour-discovery-CQU4QbLK.js +378 -0
  39. package/dist/bonjour-discovery-D8aOnk3M.js +378 -0
  40. package/dist/boot/handler.js +42 -69
  41. package/dist/browser-cli-BH41geGr.js +1693 -0
  42. package/dist/browser-cli-u4nrjp1h.js +1688 -0
  43. package/dist/build-info.json +3 -3
  44. package/dist/call-CMDcRlGW.js +2826 -0
  45. package/dist/call-D5YKTYSM.js +2827 -0
  46. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  47. package/dist/catalog-CUY_iTaG.js +185 -0
  48. package/dist/catalog-p6W09S2j.js +185 -0
  49. package/dist/channel-account-context-CA2m93Kt.js +550 -0
  50. package/dist/channel-account-context-Las-t6RP.js +550 -0
  51. package/dist/channel-activity-BD603ehL.js +94 -0
  52. package/dist/channel-activity-CwiF_QMr.js +94 -0
  53. package/dist/channel-activity-daCpxHdT.js +292 -0
  54. package/dist/channel-options-CAlClffy.js +33 -0
  55. package/dist/channel-options-Hl_ep3UG.js +32 -0
  56. package/dist/channel-selection-CHJ7TumC.js +51 -0
  57. package/dist/channel-selection-DR7eW8UG.js +51 -0
  58. package/dist/channel-web-B79j9fSC.js +2134 -0
  59. package/dist/channel-web-DHTTcipm.js +2136 -0
  60. package/dist/channels-cli-DeZ95hcx.js +1427 -0
  61. package/dist/channels-cli-eUCi6jXk.js +1422 -0
  62. package/dist/channels-status-issues-By77REbh.js +18 -0
  63. package/dist/channels-status-issues-DXyOO-KH.js +18 -0
  64. package/dist/chat-envelope-BEDutlnF.js +248 -0
  65. package/dist/chat-envelope-vJJUdDE7.js +248 -0
  66. package/dist/chrome-BuAi16Rq.js +1732 -0
  67. package/dist/chrome-IR-2ukph.js +1733 -0
  68. package/dist/chunk-C1mQSjas.js +341 -0
  69. package/dist/chunk-D7VX4pmT.js +341 -0
  70. package/dist/clack-prompter-BX8SVxtP.js +122 -0
  71. package/dist/clack-prompter-D6HhVlZW.js +121 -0
  72. package/dist/cleanup-utils-DNd0wdKZ.js +94 -0
  73. package/dist/cli/daemon-cli.js +1 -1
  74. package/dist/cli-CK4Y43rx.js +131 -0
  75. package/dist/cli-Cha5Uk29.js +126 -0
  76. package/dist/clipboard-Cbj3McM_.js +31 -0
  77. package/dist/clipboard-Ne8gaWea.js +31 -0
  78. package/dist/command-format-D0vKipG9.js +32 -0
  79. package/dist/command-format-KkslAzwV.js +18 -0
  80. package/dist/command-logger/handler.js +3 -3
  81. package/dist/command-registry-07zlvSN8.js +215 -0
  82. package/dist/commands-DChC3pIF.js +41 -0
  83. package/dist/commands-DFHMoQgH.js +41 -0
  84. package/dist/commands-registry-BN04GIlJ.js +891 -0
  85. package/dist/commands-registry-DbS9NHeX.js +892 -0
  86. package/dist/common-DHHHAcmR.js +156 -0
  87. package/dist/common-De-Lakuh.js +156 -0
  88. package/dist/completion-cli--Jcg794c.js +452 -0
  89. package/dist/completion-cli-B8n7umme.js +452 -0
  90. package/dist/config-BupC6eiJ.js +4223 -0
  91. package/dist/config-CHDaGquZ.js +4225 -0
  92. package/dist/config-cli-Cu79BThx.js +242 -0
  93. package/dist/config-cli-DrJtiyW-.js +247 -0
  94. package/dist/config-guard-BLsqW1qt.js +98 -0
  95. package/dist/config-guard-NQ7jaYM4.js +75 -0
  96. package/dist/config-validation-BLllMW0t.js +18 -0
  97. package/dist/config-validation-DT29VEco.js +18 -0
  98. package/dist/configure-B25UEQnQ.js +889 -0
  99. package/dist/configure-CqMUE4Zw.js +891 -0
  100. package/dist/constants-BbAEYzFC.js +70 -0
  101. package/dist/constants-tLOgmZZ1.js +70 -0
  102. package/dist/control-auth-BFbDXKLK.js +397 -0
  103. package/dist/control-auth-BiiO-FNy.js +397 -0
  104. package/dist/control-ui/assets/index-CuY3pfh1.js +7716 -0
  105. package/dist/control-ui/assets/index-CuY3pfh1.js.map +1 -0
  106. package/dist/control-ui/assets/index-D_fjkN3g.css +1 -0
  107. package/dist/control-ui/index.html +2 -2
  108. package/dist/control-ui-assets-BlpSXjlT.js +186 -0
  109. package/dist/control-ui-assets-eJU2-yvs.js +186 -0
  110. package/dist/conversation-label-Bn5j3lUT.js +36 -0
  111. package/dist/conversation-label-L0QTtKji.js +36 -0
  112. package/dist/cron-cli-BV1o0UgM.js +491 -0
  113. package/dist/cron-cli-C8j-P8GF.js +496 -0
  114. package/dist/daemon-cli-BDvU0Xv6.js +1199 -0
  115. package/dist/daemon-cli-CoNl2Ugf.js +1197 -0
  116. package/dist/daemon-cli.js +53 -97
  117. package/dist/daemon-install-BMEnzWwq.js +60 -0
  118. package/dist/daemon-install-BkUJbdPC.js +55 -0
  119. package/dist/daemon-install-helpers-B9kMxC1v.js +462 -0
  120. package/dist/daemon-install-helpers-DoYR5z4H.js +462 -0
  121. package/dist/deliver-D8P9_nk-.js +481 -0
  122. package/dist/deliver-F9ed3dhp.js +481 -0
  123. package/dist/delivery-queue-B6TuHppj.js +244 -0
  124. package/dist/delivery-queue-BZc3AiGu.js +244 -0
  125. package/dist/devices-cli-DZgxMNLD.js +322 -0
  126. package/dist/devices-cli-DlG9ehK0.js +317 -0
  127. package/dist/diagnostics-CK2HGAFw.js +46 -0
  128. package/dist/diagnostics-G-C-IuxO.js +46 -0
  129. package/dist/directory-cli-CY6tHRIZ.js +218 -0
  130. package/dist/directory-cli-HyvRJ1Ua.js +223 -0
  131. package/dist/dm-policy-shared-1FdjwGtJ.js +22 -0
  132. package/dist/dm-policy-shared-CT3er5HI.js +22 -0
  133. package/dist/dns-cli-Cu-wYvll.js +203 -0
  134. package/dist/dns-cli-DQdnNJh4.js +198 -0
  135. package/dist/dock-D038fZZl.js +929 -0
  136. package/dist/dock-D5pZ3a44.js +928 -0
  137. package/dist/doctor-completion-BrHnayfU.js +92 -0
  138. package/dist/doctor-completion-CoZP2KiR.js +92 -0
  139. package/dist/doctor-config-flow-DJ1nWCTZ.js +1935 -0
  140. package/dist/doctor-config-flow-DYhXUwEq.js +1934 -0
  141. package/dist/enable-B5dIjgnm.js +59 -0
  142. package/dist/enable-FmiEY4ng.js +59 -0
  143. package/dist/entry.js +14 -16
  144. package/dist/env-DUb5GiQe.js +60 -0
  145. package/dist/env-vars-C8WMB8Ix.js +93 -0
  146. package/dist/errors-CdmXrBic.js +35 -0
  147. package/dist/errors-DdLfwEVi.js +35 -0
  148. package/dist/exec-BhkXWg7V.js +164 -0
  149. package/dist/exec-ClUTXFZ9.js +164 -0
  150. package/dist/export-html/template.css +0 -36
  151. package/dist/export-html/template.js +1 -32
  152. package/dist/extensionAPI.js +1015 -142
  153. package/dist/fetch-CCuD0LYV.js +67 -0
  154. package/dist/fetch-JBWLkOpL.js +67 -0
  155. package/dist/fetch-oku6r8tJ.js +67 -0
  156. package/dist/file-lock-6NXMPZTT.js +107 -0
  157. package/dist/file-lock-Ks-RPU6W.js +107 -0
  158. package/dist/fs-safe-93aDW4mH.js +98 -0
  159. package/dist/fs-safe-ACrBwOF5.js +88 -0
  160. package/dist/gateway-cli-CJs4Mxlv.js +23730 -0
  161. package/dist/gateway-cli-gUVR20v7.js +23725 -0
  162. package/dist/gateway-rpc-CSdrtPzg.js +28 -0
  163. package/dist/gateway-rpc-PNA_wUoe.js +28 -0
  164. package/dist/gmail-setup-utils-DNZEf6T0.js +422 -0
  165. package/dist/gmail-setup-utils-KPAKWwGy.js +423 -0
  166. package/dist/health-BCidscV-.js +1417 -0
  167. package/dist/health-Cw2dr19V.js +1414 -0
  168. package/dist/health-format-DOhfU1rY.js +28 -0
  169. package/dist/heartbeat-visibility-C5Vxudi9.js +125 -0
  170. package/dist/heartbeat-visibility-DHeZ-ko1.js +125 -0
  171. package/dist/help-format-Ch0EWh7N.js +17 -0
  172. package/dist/helpers-B4NWktS8.js +10 -0
  173. package/dist/hook-runner-global-Vj-YQxeR.js +527 -0
  174. package/dist/hooks-cli---vy0V0j.js +1218 -0
  175. package/dist/hooks-cli-CX-JUHdJ.js +1223 -0
  176. package/dist/image-ops-DMl7j7f4.js +354 -0
  177. package/dist/image-ops-DpkTOzhI.js +354 -0
  178. package/dist/import-DIjlFm_Y.js +493 -0
  179. package/dist/import-DdQvVR-_.js +495 -0
  180. package/dist/inbound-context-CmmmT8IP.js +68 -0
  181. package/dist/inbound-context-oxIWzEgc.js +68 -0
  182. package/dist/inbound-path-policy-BdmTOUka.js +90 -0
  183. package/dist/inbound-path-policy-DYTLjca8.js +90 -0
  184. package/dist/index.js +106 -105
  185. package/dist/inspect-C9d1V-lI.js +559 -0
  186. package/dist/inspect-rHjRqr3W.js +559 -0
  187. package/dist/installs-QUjSL2ZA.js +325 -0
  188. package/dist/installs-vT5wnxC4.js +325 -0
  189. package/dist/ipv4-DdcyK1aU.js +46 -0
  190. package/dist/ipv4-OHvujh00.js +46 -0
  191. package/dist/ir-CnMQRFBu.js +940 -0
  192. package/dist/json-files-BiA_B-xm.js +46 -0
  193. package/dist/links-CIHbVNO_.js +15 -0
  194. package/dist/loader-CYigLbch.js +22404 -0
  195. package/dist/loader-ElWX62xE.js +22401 -0
  196. package/dist/local-roots-B0QcJDJI.js +313 -0
  197. package/dist/local-roots-BfXsZRkm.js +314 -0
  198. package/dist/logger-BtwpYD7c.js +49 -0
  199. package/dist/logging-CLc3Umm0.js +20 -0
  200. package/dist/login-C8jHYLxN.js +61 -0
  201. package/dist/login-D__FYZX9.js +62 -0
  202. package/dist/login-qr-C0Gd6ybl.js +323 -0
  203. package/dist/login-qr-D7dw54Yp.js +328 -0
  204. package/dist/logs-cli-CFOVARdJ.js +234 -0
  205. package/dist/logs-cli-DtAR__VH.js +239 -0
  206. package/dist/markdown-tables-ChBqQA_Q.js +29 -0
  207. package/dist/markdown-tables-xMuH3QnS.js +29 -0
  208. package/dist/media-CmiNXiOZ.js +10453 -0
  209. package/dist/media-DYopaoc0.js +940 -0
  210. package/dist/message-action-names-CACBi-HB.js +2521 -0
  211. package/dist/message-action-names-CFwlz01T.js +2521 -0
  212. package/dist/message-channel-DF4I2vOK.js +91 -0
  213. package/dist/net-COL170MG.js +225 -0
  214. package/dist/net-QZ8IHNXc.js +225 -0
  215. package/dist/node-cli-CW8jOcHO.js +24 -0
  216. package/dist/nodes-cli-B4lvU9N5.js +1349 -0
  217. package/dist/nodes-cli-B8iTBsI6.js +1344 -0
  218. package/dist/nodes-screen-CZCXHrWB.js +250 -0
  219. package/dist/nodes-screen-C_K1vcS5.js +250 -0
  220. package/dist/note-BVerR3D5.js +92 -0
  221. package/dist/note-Dk8-EaJg.js +92 -0
  222. package/dist/npm-registry-spec-Dma0KHft.js +786 -0
  223. package/dist/npm-registry-spec-vYkxZb6u.js +786 -0
  224. package/dist/npm-resolution-CcZYnzrL.js +86 -0
  225. package/dist/npm-resolution-DsATEEGx.js +86 -0
  226. package/dist/onboard-Csm4bDd_.js +438 -0
  227. package/dist/onboard-D1b535pC.js +436 -0
  228. package/dist/onboard-channels-5EIXyDZh.js +2547 -0
  229. package/dist/onboard-channels-bedB47Hs.js +2548 -0
  230. package/dist/onboard-config-CcPV3Cqz.js +39 -0
  231. package/dist/onboard-config-DcTaxmuf.js +39 -0
  232. package/dist/onboard-helpers-BHNXyhA4.js +364 -0
  233. package/dist/onboard-helpers-eTUU00t8.js +363 -0
  234. package/dist/onboard-remote-DwDKQk1K.js +127 -0
  235. package/dist/onboard-remote-TPbiye5m.js +127 -0
  236. package/dist/onboarding-D0YGZ_Ux.js +588 -0
  237. package/dist/onboarding-DCfmKzl2.js +586 -0
  238. package/dist/onboarding.finalize-BhpsVwME.js +399 -0
  239. package/dist/onboarding.finalize-CY8vgmi9.js +402 -0
  240. package/dist/onboarding.gateway-config-C_eqpJ7D.js +192 -0
  241. package/dist/onboarding.gateway-config-DR1ey6tU.js +199 -0
  242. package/dist/outbound-Be4BgVqF.js +220 -0
  243. package/dist/outbound-CXJLn8kn.js +221 -0
  244. package/dist/outbound-attachment-CbNLn0lk.js +18 -0
  245. package/dist/outbound-attachment-DNCMF74c.js +18 -0
  246. package/dist/outbound-attachment-DaStRTGv.js +18 -0
  247. package/dist/pairing-cli-CxGDUsLT.js +128 -0
  248. package/dist/pairing-cli-D83T3PG9.js +123 -0
  249. package/dist/pairing-labels-6f8FqSS5.js +9 -0
  250. package/dist/pairing-labels-CI5j-OUT.js +9 -0
  251. package/dist/pairing-store-DnTHRcnO.js +459 -0
  252. package/dist/pairing-store-ONzqxcNb.js +460 -0
  253. package/dist/path-env-D7VB7sOO.js +89 -0
  254. package/dist/path-env-DFiYvvI-.js +89 -0
  255. package/dist/path-safety-BshBsw4P.js +14 -0
  256. package/dist/path-safety-CZbhQciI.js +14 -0
  257. package/dist/plugin-auto-enable-BnCQKkIK.js +302 -0
  258. package/dist/plugin-auto-enable-CFRs-pcA.js +301 -0
  259. package/dist/plugin-registry-CV5pfXOU.js +33 -0
  260. package/dist/plugin-registry-CmG34W0u.js +33 -0
  261. package/dist/plugin-sdk/agents/agent-helpers.d.ts +0 -1
  262. package/dist/plugin-sdk/agents/agent-scope.d.ts +10 -0
  263. package/dist/plugin-sdk/agents/agent-types.d.ts +1 -6
  264. package/dist/plugin-sdk/agents/agent-utils.d.ts +0 -14
  265. package/dist/plugin-sdk/agents/provider-utils.d.ts +0 -1
  266. package/dist/plugin-sdk/agents/subagent-spawn.d.ts +0 -1
  267. package/dist/plugin-sdk/agents/tools/sessions-helpers.d.ts +0 -1
  268. package/dist/plugin-sdk/auth/constants.d.ts +16 -0
  269. package/dist/plugin-sdk/auth/display.d.ts +7 -0
  270. package/dist/plugin-sdk/auth/doctor.d.ts +8 -0
  271. package/dist/plugin-sdk/auth/env-injection.d.ts +41 -0
  272. package/dist/plugin-sdk/auth/index.d.ts +8 -0
  273. package/dist/plugin-sdk/auth/oauth.d.ts +14 -0
  274. package/dist/plugin-sdk/auth/provider-auth.d.ts +40 -0
  275. package/dist/plugin-sdk/auth/session-override.d.ts +18 -0
  276. package/dist/plugin-sdk/auto-reply/reply/agent-runner-execution.d.ts +0 -1
  277. package/dist/plugin-sdk/auto-reply/reply/agent-runner-utils.d.ts +0 -2
  278. package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +1 -4
  279. package/dist/plugin-sdk/auto-reply/reply/commands-types.d.ts +1 -4
  280. package/dist/plugin-sdk/auto-reply/reply/directive-handling.levels.d.ts +1 -7
  281. package/dist/plugin-sdk/auto-reply/reply/directive-handling.params.d.ts +1 -4
  282. package/dist/plugin-sdk/auto-reply/reply/directive-handling.parse.d.ts +1 -7
  283. package/dist/plugin-sdk/auto-reply/reply/directive-handling.shared.d.ts +1 -4
  284. package/dist/plugin-sdk/auto-reply/reply/directives.d.ts +3 -15
  285. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -5
  286. package/dist/plugin-sdk/auto-reply/reply/get-reply-inline-actions.d.ts +1 -5
  287. package/dist/plugin-sdk/auto-reply/reply/get-reply-run.d.ts +1 -5
  288. package/dist/plugin-sdk/auto-reply/reply/queue/types.d.ts +1 -3
  289. package/dist/plugin-sdk/auto-reply/reply/response-prefix-template.d.ts +4 -6
  290. package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +0 -7
  291. package/dist/plugin-sdk/auto-reply/reply/session-updates.d.ts +0 -10
  292. package/dist/plugin-sdk/auto-reply/reply.d.ts +1 -1
  293. package/dist/plugin-sdk/auto-reply/status.d.ts +2 -6
  294. package/dist/plugin-sdk/auto-reply/thinking.d.ts +0 -11
  295. package/dist/plugin-sdk/auto-reply/types.d.ts +1 -2
  296. package/dist/plugin-sdk/commands/agent/session.d.ts +1 -2
  297. package/dist/plugin-sdk/config/defaults.d.ts +0 -1
  298. package/dist/plugin-sdk/config/sessions/types.d.ts +0 -8
  299. package/dist/plugin-sdk/config/types.agent-defaults.d.ts +28 -112
  300. package/dist/plugin-sdk/config/types.agents.d.ts +8 -0
  301. package/dist/plugin-sdk/config/types.messages.d.ts +1 -2
  302. package/dist/plugin-sdk/config/types.tools.d.ts +1 -1
  303. package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +9 -66
  304. package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +5 -13
  305. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +12 -76
  306. package/dist/plugin-sdk/config/zod-schema.d.ts +12 -76
  307. package/dist/plugin-sdk/daemon/constants.d.ts +2 -2
  308. package/dist/plugin-sdk/gateway/protocol/index.d.ts +1 -3
  309. package/dist/plugin-sdk/gateway/protocol/schema/sessions.d.ts +0 -2
  310. package/dist/plugin-sdk/gateway/session-utils.types.d.ts +0 -2
  311. package/dist/plugin-sdk/index.js +108 -134
  312. package/dist/plugin-sdk/middleware/auth-key-retry.d.ts +32 -0
  313. package/dist/plugin-sdk/middleware/channel-bridge.d.ts +4 -0
  314. package/dist/plugin-sdk/middleware/error-classifier.d.ts +5 -0
  315. package/dist/plugin-sdk/middleware/media-resolver.d.ts +12 -0
  316. package/dist/plugin-sdk/middleware/runtime-factory.d.ts +42 -0
  317. package/dist/plugin-sdk/middleware/types.d.ts +33 -1
  318. package/dist/plugin-sdk/plugins/types.d.ts +1 -1
  319. package/dist/plugin-sdk/terminal/palette.d.ts +2 -2
  320. package/dist/plugins-B4waLB_f.js +453 -0
  321. package/dist/plugins-D6-JJ1il.js +455 -0
  322. package/dist/plugins-cli-DG2zHgdP.js +799 -0
  323. package/dist/plugins-cli-DZvQzkWd.js +794 -0
  324. package/dist/ports-BcTKFlWl.js +96 -0
  325. package/dist/ports-DAc2AlZE.js +316 -0
  326. package/dist/ports-HiuYk3bt.js +96 -0
  327. package/dist/ports-dEePqmCq.js +370 -0
  328. package/dist/program-CX-EtQ9W.js +245 -0
  329. package/dist/program-context-R3wsjl2f.js +474 -0
  330. package/dist/progress-DQ1drugY.js +124 -0
  331. package/dist/prompt-edYTUtju.js +21 -0
  332. package/dist/prompt-select-styled-BzL7v1zQ.js +1647 -0
  333. package/dist/prompt-select-styled-g5q4srtu.js +1650 -0
  334. package/dist/prompt-style-CYEpbwXH.js +9 -0
  335. package/dist/provider-dispatcher-D7qFGoUR.js +660 -0
  336. package/dist/provider-dispatcher-dB_rm6tV.js +659 -0
  337. package/dist/push-apns-DQwR-i4_.js +713 -0
  338. package/dist/push-apns-Dj5RApCY.js +711 -0
  339. package/dist/pw-ai-DOQMJFB-.js +1911 -0
  340. package/dist/pw-ai-oqtYDmjQ.js +1907 -0
  341. package/dist/qr-cli-CBGm_Cik.js +353 -0
  342. package/dist/qr-cli-D2jZPdW9.js +348 -0
  343. package/dist/redact-gXuh8MFk.js +191 -0
  344. package/dist/redact-snapshot-B-2V56Yb.js +2016 -0
  345. package/dist/redact-snapshot-CD36XSYE.js +2016 -0
  346. package/dist/register.agent-DLSuiqWE.js +287 -0
  347. package/dist/register.agent-DcvEt3hG.js +1044 -0
  348. package/dist/register.configure-3edoYZai.js +131 -0
  349. package/dist/register.configure-CyOJCmnY.js +125 -0
  350. package/dist/register.import-Cku0T-PA.js +31 -0
  351. package/dist/register.import-Dr8TiUVx.js +28 -0
  352. package/dist/register.maintenance-5aaPQbJk.js +495 -0
  353. package/dist/register.maintenance-DPSswZDJ.js +498 -0
  354. package/dist/register.message-BaSVFv92.js +682 -0
  355. package/dist/register.message-FEI0RiNN.js +687 -0
  356. package/dist/register.onboard-CO1UZL-9.js +258 -0
  357. package/dist/register.onboard-DuLKxjXl.js +263 -0
  358. package/dist/register.setup-CFYYd_Ev.js +115 -0
  359. package/dist/register.setup-P0UHDBMS.js +110 -0
  360. package/dist/register.status-health-sessions-D_3vm2yw.js +424 -0
  361. package/dist/register.status-health-sessions-z9x79dmg.js +665 -0
  362. package/dist/register.subclis-B-d970d6.js +267 -0
  363. package/dist/replies-BvarRpHb.js +136 -0
  364. package/dist/replies-CSzm5168.js +136 -0
  365. package/dist/reply-CTgksTO1.js +13695 -0
  366. package/dist/reply-CUyafs4J.js +13692 -0
  367. package/dist/reply-directives-Caq4zVTg.js +182 -0
  368. package/dist/reply-directives-D91fapDF.js +182 -0
  369. package/dist/reply-payloads-te0YnESs.js +527 -0
  370. package/dist/reply-prefix-Bv8Mv9q8.js +37 -0
  371. package/dist/reply-prefix-Rk_UEaJa.js +37 -0
  372. package/dist/resolve-route-BPa6q23t.js +249 -0
  373. package/dist/resolve-route-CN9BEALz.js +249 -0
  374. package/dist/response-prefix-template-D-ptXREi.js +134 -0
  375. package/dist/response-prefix-template-Dckjdftg.js +134 -0
  376. package/dist/retry-BcZuGfnV.js +77 -0
  377. package/dist/retry-BzWBtFpP.js +77 -0
  378. package/dist/run-main-BugUkGES.js +303 -0
  379. package/dist/runner-CVMXkHe9.js +2295 -0
  380. package/dist/runner-DOWTBU0-.js +2295 -0
  381. package/dist/runtime-guard-CXt4yzo-.js +60 -0
  382. package/dist/secure-random-CBwDBdj1.js +44 -0
  383. package/dist/security-cli-BQzdzJUp.js +479 -0
  384. package/dist/security-cli-D2d8RvsT.js +485 -0
  385. package/dist/send-B3G3I3II.js +349 -0
  386. package/dist/send-B6IB6ELR.js +547 -0
  387. package/dist/send-BT8XEvZB.js +332 -0
  388. package/dist/send-BTupAHVX.js +2245 -0
  389. package/dist/send-BZCfto_I.js +1174 -0
  390. package/dist/send-C5EDjThR.js +492 -0
  391. package/dist/send-CBM54hgN.js +349 -0
  392. package/dist/send-CPBd6ItT.js +29 -0
  393. package/dist/send-CzYm7ULP.js +2245 -0
  394. package/dist/send-D2m_x8xM.js +374 -0
  395. package/dist/send-DmEBPE2S.js +1779 -0
  396. package/dist/send-Dt4iCx61.js +426 -0
  397. package/dist/send-MWjpLHEV.js +11 -0
  398. package/dist/send-qpwqt34s.js +547 -0
  399. package/dist/send-rW25uKNz.js +1776 -0
  400. package/dist/send-uqa6CNuP.js +492 -0
  401. package/dist/server-BhmYVCED.js +201 -0
  402. package/dist/server-DaUw1o2B.js +206 -0
  403. package/dist/server-lifecycle-BeZsBQwF.js +2437 -0
  404. package/dist/server-lifecycle-C2F1_TE2.js +2437 -0
  405. package/dist/server-node-events-DoRFbKCT.js +390 -0
  406. package/dist/server-node-events-jbbbt-4R.js +395 -0
  407. package/dist/service-BDt-zUvV.js +670 -0
  408. package/dist/service-Os7W1F2S.js +670 -0
  409. package/dist/session-B9KGKVrY.js +170 -0
  410. package/dist/session-DzAupDyj.js +170 -0
  411. package/dist/session-cost-usage-BYCI739a.js +627 -0
  412. package/dist/session-cost-usage-DGsPcuMj.js +627 -0
  413. package/dist/session-dirs-BIg5RHAh.js +947 -0
  414. package/dist/session-dirs-DwDxjK1p.js +947 -0
  415. package/dist/session-utils-BgWDCbyx.js +622 -0
  416. package/dist/session-utils-CxxOeC1M.js +622 -0
  417. package/dist/sessions-Bwu0l_CG.js +2569 -0
  418. package/dist/sessions-CiuFFCnt.js +247 -0
  419. package/dist/shell-env-CsV_IkJj.js +163 -0
  420. package/dist/shell-env-hZW9j-Uc.js +163 -0
  421. package/dist/ssrf-B-rF_tZB.js +183 -0
  422. package/dist/ssrf-D6fl_7ww.js +183 -0
  423. package/dist/status-BOFm7iyj.js +2065 -0
  424. package/dist/status-RI2y_M21.js +2061 -0
  425. package/dist/status.update-DbO7izip.js +79 -0
  426. package/dist/status.update-wXyvcztI.js +79 -0
  427. package/dist/store-BLGrRL_E.js +64 -0
  428. package/dist/store-BYhcsOLr.js +64 -0
  429. package/dist/store-Dv76bGHg.js +2571 -0
  430. package/dist/store-Dw93tSB-.js +53 -0
  431. package/dist/subagent-registry-DWL-tayF.js +4856 -0
  432. package/dist/subagent-registry-HjR1tO3-.js +4854 -0
  433. package/dist/subsystem-BCkt9Ocb.js +1079 -0
  434. package/dist/subsystem-BgxIzx7w.js +1137 -0
  435. package/dist/system-cli-DtrDDmCt.js +71 -0
  436. package/dist/system-cli-xDr_Yyaa.js +76 -0
  437. package/dist/systemd-BlbIQ1PV.js +547 -0
  438. package/dist/systemd-DzXePo7r.js +547 -0
  439. package/dist/systemd-linger-mLbBF4pa.js +75 -0
  440. package/dist/systemd-linger-qlGGW2JB.js +75 -0
  441. package/dist/table-V_9n7CjP.js +279 -0
  442. package/dist/tables-Cy3gObW7.js +55 -0
  443. package/dist/tables-DAuk-Y6F.js +55 -0
  444. package/dist/tables-DRh09aPZ.js +55 -0
  445. package/dist/tailnet-BoTa0e2q.js +40 -0
  446. package/dist/tailnet-Cy0Q27lj.js +40 -0
  447. package/dist/tailscale-CiWkh0vS.js +230 -0
  448. package/dist/tailscale-Driw3j8E.js +230 -0
  449. package/dist/targets-3hewwPvM.js +120 -0
  450. package/dist/targets-Bkw_co-B.js +220 -0
  451. package/dist/targets-C1Tt0ZWd.js +2406 -0
  452. package/dist/targets-CsrqF2M4.js +650 -0
  453. package/dist/targets-DKriCISG.js +53 -0
  454. package/dist/targets-DTM2OPnS.js +650 -0
  455. package/dist/targets-DhhaK2xG.js +53 -0
  456. package/dist/targets-tDrl_ioQ.js +46 -0
  457. package/dist/targets-yq1kGK1_.js +2407 -0
  458. package/dist/thinking-XA5P_zFw.js +88 -0
  459. package/dist/thinking-l-rrvZwu.js +88 -0
  460. package/dist/tokens-7ZtWRjA3.js +21 -0
  461. package/dist/tool-display-AxpSXZVq.js +785 -0
  462. package/dist/tool-display-D6GD-41Y.js +785 -0
  463. package/dist/tool-images-D16vIWPg.js +263 -0
  464. package/dist/tool-images-IVIZ29ID.js +263 -0
  465. package/dist/trash--8b4GDyV.js +125 -0
  466. package/dist/trash-ivbG2QWV.js +125 -0
  467. package/dist/tui-Cbe1EW-B.js +3319 -0
  468. package/dist/tui-Dj3XrTCV.js +3319 -0
  469. package/dist/tui-cli-EGqEcdfE.js +64 -0
  470. package/dist/tui-cli-KKmqnNs2.js +59 -0
  471. package/dist/update-DruVguh4.js +349 -0
  472. package/dist/update-cli-C5tdQeGG.js +1371 -0
  473. package/dist/update-cli-Canq11sh.js +1374 -0
  474. package/dist/update-y8nz-3OC.js +349 -0
  475. package/dist/usage-CAuX4vsd.js +5384 -0
  476. package/dist/utils-C5daYcFn.js +631 -0
  477. package/dist/web-B9gR_cGR.js +3071 -0
  478. package/dist/web-DZ8ahrhK.js +77 -0
  479. package/dist/web-DkYPsnyd.js +71 -0
  480. package/dist/webhooks-cli-DFqGwW1f.js +329 -0
  481. package/dist/webhooks-cli-y-E-q0Xo.js +334 -0
  482. package/dist/whatsapp-actions-BXIe-Uei.js +123 -0
  483. package/dist/whatsapp-actions-BictxOCB.js +129 -0
  484. package/dist/widearea-dns-fHQt5-Q3.js +127 -0
  485. package/dist/workspace-DvbSDgO_.js +449 -0
  486. package/dist/workspace-zLfKNRwR.js +447 -0
  487. package/dist/zod-schema-B9RGngMW.js +2696 -0
  488. package/dist/zod-schema-D3hQ5SKe.js +2696 -0
  489. package/extensions/matrix/src/matrix/monitor/replies.ts +0 -24
  490. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +0 -1
  491. package/package.json +3 -3
  492. package/dist/accounts-BFy_Z3od.js +0 -272
  493. package/dist/accounts-BTXSfPWi.js +0 -270
  494. package/dist/accounts-BxGS70Do.js +0 -36
  495. package/dist/accounts-CNY1TGj1.js +0 -47
  496. package/dist/accounts-DBohBlww.js +0 -32
  497. package/dist/accounts-DqRQ75w3.js +0 -36
  498. package/dist/accounts-iODF3SK2.js +0 -47
  499. package/dist/ack-reactions-B11TAC2D.js +0 -446
  500. package/dist/ack-reactions-BWVjL4H6.js +0 -446
  501. package/dist/acp-cli-CA1xMmVo.js +0 -1320
  502. package/dist/acp-cli-CGo6fJVZ.js +0 -1326
  503. package/dist/active-listener-VzhWW8W6.js +0 -37
  504. package/dist/active-listener-z0qVEcom.js +0 -37
  505. package/dist/agent-CTizRPIJ.js +0 -732
  506. package/dist/agent-D2RVoS5g.js +0 -731
  507. package/dist/agent-helpers-B6VfZ9_u.js +0 -606
  508. package/dist/agent-helpers-CTx5KKJu.js +0 -606
  509. package/dist/agent-scope-BGYzhtWQ.js +0 -121
  510. package/dist/agent-scope-C50VuLKh.js +0 -119
  511. package/dist/agents-BuYn-obw.js +0 -788
  512. package/dist/agents.config-BSTxuTVd.js +0 -116
  513. package/dist/agents.config-p3V3b9u6.js +0 -116
  514. package/dist/audio-DPOuhNq7.js +0 -43
  515. package/dist/audio-VBcVDa08.js +0 -43
  516. package/dist/audio-preflight-BwmCYeuM.js +0 -64
  517. package/dist/audio-preflight-co8gjlPX.js +0 -69
  518. package/dist/audit-oH4urD3G.js +0 -3138
  519. package/dist/audit-qgtCT3ik.js +0 -3138
  520. package/dist/auth-CAczFgAO.js +0 -448
  521. package/dist/auth-Deh9i9Eg.js +0 -448
  522. package/dist/auth-profiles-BquJGKLC.js +0 -279
  523. package/dist/auth-profiles-D8vKiBPq.js +0 -281
  524. package/dist/banner-Cf978khN.js +0 -294
  525. package/dist/binaries-DXW6oATV.js +0 -13
  526. package/dist/bindings-CRU_udk8.js +0 -69
  527. package/dist/bindings-DQZAu8Wv.js +0 -69
  528. package/dist/bonjour-discovery-DdAk1VyO.js +0 -378
  529. package/dist/bonjour-discovery-DuhiIZZx.js +0 -378
  530. package/dist/browser-cli-CZC4h5V4.js +0 -1687
  531. package/dist/browser-cli-DAgi_aQk.js +0 -1692
  532. package/dist/call-BbwtB9Y-.js +0 -2828
  533. package/dist/call-PivL7Uex.js +0 -2829
  534. package/dist/catalog-BqO6yem_.js +0 -185
  535. package/dist/catalog-DFmaYwfk.js +0 -185
  536. package/dist/channel-account-context-CvIDAtHS.js +0 -550
  537. package/dist/channel-account-context-q-o0pG1A.js +0 -550
  538. package/dist/channel-activity-BaCNOZpP.js +0 -94
  539. package/dist/channel-activity-C-G4n9BK.js +0 -292
  540. package/dist/channel-activity-DTKGf3j5.js +0 -94
  541. package/dist/channel-options-Cyappik_.js +0 -32
  542. package/dist/channel-options-DFnypY5S.js +0 -33
  543. package/dist/channel-selection-BGl53D5K.js +0 -51
  544. package/dist/channel-selection-NNPbxnyZ.js +0 -51
  545. package/dist/channel-web-DmhVkWbP.js +0 -2134
  546. package/dist/channel-web-kRC3UYBJ.js +0 -2136
  547. package/dist/channels-cli-C5XRkPJl.js +0 -1421
  548. package/dist/channels-cli-D6TqCI0m.js +0 -1426
  549. package/dist/channels-status-issues-CUc9mpeW.js +0 -18
  550. package/dist/channels-status-issues-DwRDzwrV.js +0 -18
  551. package/dist/chat-envelope-DEZ-5RY8.js +0 -248
  552. package/dist/chat-envelope-el7Uo-Fe.js +0 -248
  553. package/dist/chrome-0QaGKb3L.js +0 -1732
  554. package/dist/chrome-CFeWdP0Y.js +0 -1733
  555. package/dist/chunk-CSQfUhgF.js +0 -341
  556. package/dist/chunk-D0Y_w4oX.js +0 -341
  557. package/dist/clack-prompter-B7tOxhJd.js +0 -122
  558. package/dist/clack-prompter-CCFnKP_1.js +0 -121
  559. package/dist/cleanup-utils-CqAVZz2b.js +0 -94
  560. package/dist/cli-BR2J3c4l.js +0 -125
  561. package/dist/cli-C1q1vSmN.js +0 -130
  562. package/dist/clipboard-D7_SKHPK.js +0 -31
  563. package/dist/clipboard-Dzkx6Q2K.js +0 -31
  564. package/dist/command-format-CVfo8I5f.js +0 -18
  565. package/dist/command-format-DgXcqxBt.js +0 -32
  566. package/dist/command-registry-CYjvOp8W.js +0 -215
  567. package/dist/commands-CDonBOrw.js +0 -41
  568. package/dist/commands-D_-bgTlO.js +0 -41
  569. package/dist/commands-registry-CWJv6xe2.js +0 -892
  570. package/dist/commands-registry-Ci8_cFk9.js +0 -893
  571. package/dist/common-CMI-qsF8.js +0 -156
  572. package/dist/common-DSVmydhm.js +0 -156
  573. package/dist/completion-cli-8iZJqfmX.js +0 -452
  574. package/dist/completion-cli-CYDjEZSt.js +0 -452
  575. package/dist/config-D5XU45KD.js +0 -6953
  576. package/dist/config-FHu9Bn4R.js +0 -6951
  577. package/dist/config-cli-Gehy4sav.js +0 -241
  578. package/dist/config-cli-RC9qMgJq.js +0 -246
  579. package/dist/config-guard-J-Q_DFWk.js +0 -97
  580. package/dist/config-guard-cB5a_ANg.js +0 -75
  581. package/dist/config-validation-BPNyd9_3.js +0 -18
  582. package/dist/config-validation-BPWuvhVe.js +0 -18
  583. package/dist/configure-CC2XdRRm.js +0 -891
  584. package/dist/configure-DxFBJuhZ.js +0 -889
  585. package/dist/constants-BmRFoHl0.js +0 -67
  586. package/dist/constants-C9WPAluB.js +0 -67
  587. package/dist/control-auth-D0tpV3ts.js +0 -397
  588. package/dist/control-auth-_-0PGRUs.js +0 -397
  589. package/dist/control-ui/assets/index-B4ZM1lW1.js +0 -7738
  590. package/dist/control-ui/assets/index-B4ZM1lW1.js.map +0 -1
  591. package/dist/control-ui/assets/index-PED72sKF.css +0 -1
  592. package/dist/control-ui-assets-Cx_mw4D0.js +0 -186
  593. package/dist/control-ui-assets-W1AUuGrO.js +0 -186
  594. package/dist/conversation-label-C4SDz4sT.js +0 -36
  595. package/dist/conversation-label-D1frnvYe.js +0 -36
  596. package/dist/cron-cli-BzERxhr5.js +0 -495
  597. package/dist/cron-cli-C8j_uslU.js +0 -490
  598. package/dist/daemon-cli-C95XNbX0.js +0 -1199
  599. package/dist/daemon-cli-e6sURMqd.js +0 -1197
  600. package/dist/daemon-install-CcohRvKV.js +0 -55
  601. package/dist/daemon-install-DDshfT0J.js +0 -60
  602. package/dist/daemon-install-helpers-CFGAfRlj.js +0 -462
  603. package/dist/daemon-install-helpers-DIUzSFG1.js +0 -462
  604. package/dist/defaults-B5KStIBg.js +0 -7
  605. package/dist/defaults-xUAL2Z-F.js +0 -7
  606. package/dist/deliver-912khjLK.js +0 -481
  607. package/dist/deliver-D56J4-1F.js +0 -481
  608. package/dist/delivery-queue-Cfa9Wmxp.js +0 -244
  609. package/dist/delivery-queue-CxVRi4tw.js +0 -244
  610. package/dist/devices-cli-0qDhTgZR.js +0 -316
  611. package/dist/devices-cli-6SKMR2bV.js +0 -321
  612. package/dist/diagnostics-99iCgBUh.js +0 -46
  613. package/dist/diagnostics-VC0cz7kX.js +0 -46
  614. package/dist/directory-cli-5YXdoVdn.js +0 -217
  615. package/dist/directory-cli-D3IKCHmn.js +0 -222
  616. package/dist/dm-policy-shared-4rkjhcrM.js +0 -22
  617. package/dist/dm-policy-shared-D8lgnmrC.js +0 -22
  618. package/dist/dns-cli-11CtErVU.js +0 -197
  619. package/dist/dns-cli-SiEd_1Lq.js +0 -202
  620. package/dist/dock-BqNINg7k.js +0 -928
  621. package/dist/dock-CQuu41bw.js +0 -929
  622. package/dist/doctor-completion-BR1SlAT3.js +0 -92
  623. package/dist/doctor-completion-CZwpEhIK.js +0 -92
  624. package/dist/doctor-config-flow-BVkHcvoj.js +0 -1933
  625. package/dist/doctor-config-flow-DVYRn0An.js +0 -1934
  626. package/dist/enable-DcJnkzfz.js +0 -59
  627. package/dist/enable-ibNq4UWy.js +0 -59
  628. package/dist/env-DeF64iu0.js +0 -60
  629. package/dist/env-vars-7aZqKPhk.js +0 -93
  630. package/dist/errors-8F-77i6m.js +0 -35
  631. package/dist/errors-DZ199hOo.js +0 -35
  632. package/dist/exec-DbKuYyM1.js +0 -164
  633. package/dist/exec-DkFE7lqU.js +0 -164
  634. package/dist/fetch-BFSBLBkA.js +0 -67
  635. package/dist/fetch-C6XKGA11.js +0 -67
  636. package/dist/fetch-CEDsOiql.js +0 -67
  637. package/dist/file-lock-CIvloidc.js +0 -107
  638. package/dist/file-lock-CzBL_VIx.js +0 -107
  639. package/dist/fs-safe-DSwT85uK.js +0 -88
  640. package/dist/fs-safe-DkBhNAc3.js +0 -98
  641. package/dist/gateway-cli-BEEZhCHv.js +0 -23747
  642. package/dist/gateway-cli-Nob0g_4y.js +0 -23742
  643. package/dist/gateway-rpc-CksB-N83.js +0 -28
  644. package/dist/gateway-rpc-Dq44SkOv.js +0 -28
  645. package/dist/gmail-setup-utils-Cnx8A5pW.js +0 -422
  646. package/dist/gmail-setup-utils-nkabbKOE.js +0 -423
  647. package/dist/health-RT-F3hzT.js +0 -1423
  648. package/dist/health-SOuaKNRa.js +0 -1420
  649. package/dist/health-format-BG95OE6N.js +0 -28
  650. package/dist/heartbeat-visibility-BxkZjE5m.js +0 -125
  651. package/dist/heartbeat-visibility-CGG-G7px.js +0 -125
  652. package/dist/help-format-DAxf0l_h.js +0 -17
  653. package/dist/helpers-kkeXif0Q.js +0 -10
  654. package/dist/hook-runner-global-DJ14gXFP.js +0 -527
  655. package/dist/hooks-cli-DyEKryW8.js +0 -1217
  656. package/dist/hooks-cli-RuEn0-oy.js +0 -1222
  657. package/dist/image-ops-Bi6JPSkD.js +0 -354
  658. package/dist/image-ops-DWytvdh_.js +0 -354
  659. package/dist/import-D8BBZQgl.js +0 -170
  660. package/dist/import-DQ6NI4Fz.js +0 -168
  661. package/dist/inbound-context-CPkkQW0i.js +0 -68
  662. package/dist/inbound-context-DS_kpIYI.js +0 -68
  663. package/dist/inbound-path-policy-Bg4gZBx-.js +0 -250
  664. package/dist/inbound-path-policy-sdr5Ji0k.js +0 -250
  665. package/dist/inspect-Dt8hogS3.js +0 -559
  666. package/dist/inspect-vYIL1oA0.js +0 -559
  667. package/dist/installs-aM5dWAyn.js +0 -325
  668. package/dist/installs-pWdqG8HL.js +0 -325
  669. package/dist/ipv4--2WXMVtE.js +0 -46
  670. package/dist/ipv4-CDQpx1A7.js +0 -46
  671. package/dist/ir-BpaAMTfW.js +0 -940
  672. package/dist/json-files-DzpTak5i.js +0 -46
  673. package/dist/links-C3soDNDH.js +0 -15
  674. package/dist/loader-Ccwsh8Sh.js +0 -22624
  675. package/dist/loader-y9MhJewT.js +0 -22621
  676. package/dist/local-roots-BrH0Q63K.js +0 -313
  677. package/dist/local-roots-nImrw2WR.js +0 -314
  678. package/dist/logger-Bw3cFE5t.js +0 -49
  679. package/dist/logging-C-nxX2fn.js +0 -20
  680. package/dist/login-C_Kt57nO.js +0 -62
  681. package/dist/login-DOmWDMeP.js +0 -61
  682. package/dist/login-qr-CXU0wC5K.js +0 -322
  683. package/dist/login-qr-D0u6fdeO.js +0 -327
  684. package/dist/logs-cli-CschwP4d.js +0 -238
  685. package/dist/logs-cli-D7ayUvz_.js +0 -233
  686. package/dist/markdown-tables-CrmghPAr.js +0 -29
  687. package/dist/markdown-tables-jrnSPvZ6.js +0 -29
  688. package/dist/media-CojxZ45J.js +0 -10492
  689. package/dist/media-DN7yRfrH.js +0 -940
  690. package/dist/message-action-names-CtEZcmlU.js +0 -2521
  691. package/dist/message-action-names-WglOO_DT.js +0 -2521
  692. package/dist/message-channel-DzJqHVZD.js +0 -91
  693. package/dist/net-Cg8AQeke.js +0 -225
  694. package/dist/net-D6D0wgcF.js +0 -225
  695. package/dist/node-cli-Q2-n3Fgv.js +0 -24
  696. package/dist/nodes-cli-C2SoKfCv.js +0 -1343
  697. package/dist/nodes-cli-CQmlfx0K.js +0 -1348
  698. package/dist/nodes-screen-BR9sYoPa.js +0 -250
  699. package/dist/nodes-screen-Cw7Hv7M2.js +0 -250
  700. package/dist/note-Dlv4NmlQ.js +0 -92
  701. package/dist/note-kvWV4xtw.js +0 -92
  702. package/dist/npm-registry-spec-0qiKawvv.js +0 -786
  703. package/dist/npm-registry-spec-COvUzy5J.js +0 -786
  704. package/dist/npm-resolution-6v_Zm-9G.js +0 -86
  705. package/dist/npm-resolution-BFz7LeoN.js +0 -86
  706. package/dist/onboard-CgyU-mDL.js +0 -407
  707. package/dist/onboard-RI4vNTZd.js +0 -405
  708. package/dist/onboard-channels-DN5JoKPd.js +0 -2548
  709. package/dist/onboard-channels-DyAd1OZr.js +0 -2547
  710. package/dist/onboard-config-BCTthQ7J.js +0 -24
  711. package/dist/onboard-config-y-2cgT0V.js +0 -24
  712. package/dist/onboard-helpers-BCzZUD0z.js +0 -363
  713. package/dist/onboard-helpers-sDc2Ky6H.js +0 -362
  714. package/dist/onboard-remote-CJrMtttl.js +0 -127
  715. package/dist/onboard-remote-hyQIBguz.js +0 -127
  716. package/dist/onboarding-DCu1iBTV.js +0 -541
  717. package/dist/onboarding-zKMitzpb.js +0 -543
  718. package/dist/onboarding.finalize-ClHhYE2E.js +0 -401
  719. package/dist/onboarding.finalize-D5JkVJgg.js +0 -398
  720. package/dist/onboarding.gateway-config-DFh71Ndn.js +0 -198
  721. package/dist/onboarding.gateway-config-VBk6AP9U.js +0 -191
  722. package/dist/outbound-BYlZshIw.js +0 -221
  723. package/dist/outbound-CFfJC1j5.js +0 -220
  724. package/dist/outbound-attachment-BCNs1u1F.js +0 -18
  725. package/dist/outbound-attachment-B_0D60Yr.js +0 -18
  726. package/dist/outbound-attachment-o0seS0CP.js +0 -18
  727. package/dist/pairing-cli-BeydfoF9.js +0 -122
  728. package/dist/pairing-cli-DWzX866x.js +0 -127
  729. package/dist/pairing-labels-B-N8S5Fc.js +0 -9
  730. package/dist/pairing-labels-B_53dY5L.js +0 -9
  731. package/dist/pairing-store-BxdqFZGK.js +0 -460
  732. package/dist/pairing-store-CTkD51uW.js +0 -459
  733. package/dist/path-env-DR5vn3QL.js +0 -89
  734. package/dist/path-env-qRJbjJzj.js +0 -89
  735. package/dist/path-safety-DkT9RmTG.js +0 -14
  736. package/dist/path-safety-juI2XbO1.js +0 -14
  737. package/dist/plugin-auto-enable-D23gv7Aw.js +0 -302
  738. package/dist/plugin-auto-enable-DuPS9XiJ.js +0 -301
  739. package/dist/plugin-registry-CNu_1KZz.js +0 -33
  740. package/dist/plugin-registry-DeHwd2jk.js +0 -33
  741. package/dist/plugin-sdk/agents/agent-helpers/thinking.d.ts +0 -5
  742. package/dist/plugin-sdk/agents/auth-profiles/constants.d.ts +0 -16
  743. package/dist/plugin-sdk/agents/auth-profiles/display.d.ts +0 -7
  744. package/dist/plugin-sdk/agents/auth-profiles/doctor.d.ts +0 -8
  745. package/dist/plugin-sdk/agents/auth-profiles/oauth.d.ts +0 -14
  746. package/dist/plugin-sdk/agents/auth-profiles/session-override.d.ts +0 -18
  747. package/dist/plugin-sdk/agents/auth-profiles.d.ts +0 -8
  748. package/dist/plugin-sdk/agents/defaults.d.ts +0 -3
  749. package/dist/plugin-sdk/agents/provider-auth.d.ts +0 -40
  750. package/dist/plugin-sdk/auto-reply/model-runtime.d.ts +0 -17
  751. package/dist/plugin-sdk/config/model-input.d.ts +0 -9
  752. package/dist/plugin-sdk/config/zod-schema.agent-model.d.ts +0 -5
  753. package/dist/plugin-sdk/sessions/model-overrides.d.ts +0 -14
  754. package/dist/plugin-sdk/telegram/reasoning-lane-coordinator.d.ts +0 -18
  755. package/dist/plugins-BflZz0sp.js +0 -453
  756. package/dist/plugins-cli-DV82scUw.js +0 -798
  757. package/dist/plugins-cli-Qj1UyIZO.js +0 -793
  758. package/dist/plugins-woGRXMzU.js +0 -455
  759. package/dist/ports-DrruB2fK.js +0 -370
  760. package/dist/ports-GT1yV-Tg.js +0 -96
  761. package/dist/ports-NPqtlfp0.js +0 -316
  762. package/dist/ports-QMI4-F9m.js +0 -96
  763. package/dist/program-CQmIaRUI.js +0 -244
  764. package/dist/program-context-DEU6ACnL.js +0 -474
  765. package/dist/progress-CBkSaM6z.js +0 -124
  766. package/dist/prompt-Bllj1dhc.js +0 -21
  767. package/dist/prompt-select-styled-BhTN6zE2.js +0 -1650
  768. package/dist/prompt-select-styled-WopXnjIy.js +0 -1647
  769. package/dist/prompt-style-DVEm3BZW.js +0 -9
  770. package/dist/provider-dispatcher-B4QMe-I6.js +0 -659
  771. package/dist/provider-dispatcher-Bfauw6zz.js +0 -660
  772. package/dist/push-apns-C0LyG-WB.js +0 -713
  773. package/dist/push-apns-DuG95AKC.js +0 -711
  774. package/dist/pw-ai-D9n6-Wa6.js +0 -1906
  775. package/dist/pw-ai-T280E6Mn.js +0 -1910
  776. package/dist/qr-cli-DVECWTHN.js +0 -352
  777. package/dist/qr-cli-hSLixZCe.js +0 -347
  778. package/dist/redact-eZq1uwNK.js +0 -191
  779. package/dist/redact-snapshot-BZYLIqe-.js +0 -2028
  780. package/dist/redact-snapshot-C6hVx_9I.js +0 -2028
  781. package/dist/register.agent-Dmj-sgEl.js +0 -1043
  782. package/dist/register.agent-IspcBFeD.js +0 -286
  783. package/dist/register.configure-BqJEqyGL.js +0 -130
  784. package/dist/register.configure-PPkU_4Ea.js +0 -124
  785. package/dist/register.import-Bs-UkOs-.js +0 -27
  786. package/dist/register.import-DLng8g-e.js +0 -30
  787. package/dist/register.maintenance-BbpkJil3.js +0 -497
  788. package/dist/register.maintenance-C5nkOQxa.js +0 -494
  789. package/dist/register.message-C83Hi1b3.js +0 -681
  790. package/dist/register.message-D16isu4u.js +0 -686
  791. package/dist/register.onboard-B8EzX3wY.js +0 -257
  792. package/dist/register.onboard-CyRbr_0V.js +0 -262
  793. package/dist/register.setup-DWyoowAz.js +0 -109
  794. package/dist/register.setup-Dz6GwMnu.js +0 -114
  795. package/dist/register.status-health-sessions-CbQOfycz.js +0 -423
  796. package/dist/register.status-health-sessions-DXIWG47y.js +0 -669
  797. package/dist/register.subclis-DeGP5UPU.js +0 -267
  798. package/dist/replies-BKrzM0QI.js +0 -136
  799. package/dist/replies-Cl2gYBVt.js +0 -136
  800. package/dist/reply-CCu_DY64.js +0 -13900
  801. package/dist/reply-DSKC8kyS.js +0 -13897
  802. package/dist/reply-directives-BHJKp1Du.js +0 -182
  803. package/dist/reply-directives-CD2WycBM.js +0 -182
  804. package/dist/reply-payloads-D_BM1Anb.js +0 -527
  805. package/dist/reply-prefix-DBLCYiup.js +0 -38
  806. package/dist/reply-prefix-Q4DOJSn_.js +0 -38
  807. package/dist/resolve-route-CBVbY0xS.js +0 -249
  808. package/dist/resolve-route-DGEgTEif.js +0 -249
  809. package/dist/response-prefix-template-rVZQOViK.js +0 -136
  810. package/dist/response-prefix-template-up4REfuR.js +0 -136
  811. package/dist/retry-BhuXOEVR.js +0 -77
  812. package/dist/retry-DUjAzOBy.js +0 -77
  813. package/dist/run-main-Um5xhxla.js +0 -320
  814. package/dist/runner-yVJ4HB2K.js +0 -2294
  815. package/dist/runner-z92MWZ3m.js +0 -2294
  816. package/dist/runtime-guard-DZ_xuCc4.js +0 -60
  817. package/dist/secure-random-Pl9rPl0l.js +0 -44
  818. package/dist/security-cli-CdwbWZUj.js +0 -484
  819. package/dist/security-cli-DP5QJpa5.js +0 -478
  820. package/dist/send-B1_Ymjb9.js +0 -1778
  821. package/dist/send-B84axiIa.js +0 -29
  822. package/dist/send-BN_zYVlx.js +0 -547
  823. package/dist/send-BqVOxAmK.js +0 -1174
  824. package/dist/send-Bx9bUGav.js +0 -492
  825. package/dist/send-C3pdJ6p-.js +0 -2245
  826. package/dist/send-CBGSXjfD.js +0 -2245
  827. package/dist/send-CGXyTF22.js +0 -426
  828. package/dist/send-CKavrhXj.js +0 -11
  829. package/dist/send-D08Je6DL.js +0 -374
  830. package/dist/send-D1aYEG-k.js +0 -332
  831. package/dist/send-DHldI3gf.js +0 -492
  832. package/dist/send-D_DUQJ6H.js +0 -349
  833. package/dist/send-Ds63eF4a.js +0 -349
  834. package/dist/send-YRVDWfSs.js +0 -547
  835. package/dist/send-xnwty9cY.js +0 -1775
  836. package/dist/server-BQFoyCRR.js +0 -200
  837. package/dist/server-DhXw25Jq.js +0 -205
  838. package/dist/server-lifecycle-BjCCyD3w.js +0 -2437
  839. package/dist/server-lifecycle-Coyr6Lda.js +0 -2437
  840. package/dist/server-node-events-De4WZQQD.js +0 -393
  841. package/dist/server-node-events-dXXayuqY.js +0 -398
  842. package/dist/service-Bjqii5nW.js +0 -670
  843. package/dist/service-fp29z5Ww.js +0 -670
  844. package/dist/session-DBL5nHDy.js +0 -170
  845. package/dist/session-cost-usage-DX09eTPU.js +0 -627
  846. package/dist/session-cost-usage-yYi525j3.js +0 -627
  847. package/dist/session-dirs-Cj5xi7zX.js +0 -947
  848. package/dist/session-dirs-DdF6TDsE.js +0 -947
  849. package/dist/session-utils-CEtEq6bi.js +0 -625
  850. package/dist/session-utils-WmlWAs1r.js +0 -625
  851. package/dist/session-xKIW6gL2.js +0 -170
  852. package/dist/sessions--PykPynp.js +0 -2593
  853. package/dist/sessions-Bw4LRnSr.js +0 -252
  854. package/dist/ssrf-Ck9HDZpv.js +0 -183
  855. package/dist/ssrf-m7kFIobZ.js +0 -183
  856. package/dist/status-CtzYFLLF.js +0 -2072
  857. package/dist/status-DiN1cq2p.js +0 -2068
  858. package/dist/status.update-C55QM2xs.js +0 -79
  859. package/dist/status.update-CBmPXwYN.js +0 -79
  860. package/dist/store-C3tOpizT.js +0 -64
  861. package/dist/store-CPJXuhvQ.js +0 -53
  862. package/dist/store-SusmIfz7.js +0 -2595
  863. package/dist/store-v3P-OWhi.js +0 -64
  864. package/dist/subagent-registry-Db4Ho_2Y.js +0 -4858
  865. package/dist/subagent-registry-Du_j0Fnt.js +0 -4860
  866. package/dist/subsystem-BUXAJwPD.js +0 -1079
  867. package/dist/subsystem-COd61u0P.js +0 -1139
  868. package/dist/system-cli-DYCpLO3T.js +0 -75
  869. package/dist/system-cli-eAk5wVbP.js +0 -70
  870. package/dist/systemd-DSnlM3jX.js +0 -547
  871. package/dist/systemd-TfK8GuTx.js +0 -547
  872. package/dist/systemd-linger-Axnc1xCb.js +0 -75
  873. package/dist/systemd-linger-_0_-RY4v.js +0 -75
  874. package/dist/table-DPTzZyhu.js +0 -279
  875. package/dist/tables-DI5LGEr1.js +0 -55
  876. package/dist/tables-PxcSPSO0.js +0 -55
  877. package/dist/tables-TWiml6b1.js +0 -55
  878. package/dist/tailnet-CEudzG0i.js +0 -40
  879. package/dist/tailnet-PnMrjwGT.js +0 -40
  880. package/dist/tailscale-DTATQxAG.js +0 -230
  881. package/dist/tailscale-Dbyahx0J.js +0 -230
  882. package/dist/targets-C1NeMn2J.js +0 -220
  883. package/dist/targets-CcTME3bp.js +0 -46
  884. package/dist/targets-CmC5m7Ey.js +0 -53
  885. package/dist/targets-D-u6Kyio.js +0 -650
  886. package/dist/targets-D7OKVXMI.js +0 -650
  887. package/dist/targets-DB4vBpIQ.js +0 -2172
  888. package/dist/targets-DfqPGOmM.js +0 -2173
  889. package/dist/targets-DyybKefq.js +0 -53
  890. package/dist/targets-JCISV-hS.js +0 -120
  891. package/dist/tokens-DzFOtLlW.js +0 -21
  892. package/dist/tool-display-Br6mwaJc.js +0 -785
  893. package/dist/tool-display-sgNwLOBj.js +0 -785
  894. package/dist/tool-images-BNfIJ_Kj.js +0 -263
  895. package/dist/tool-images-kloBqxqK.js +0 -263
  896. package/dist/trash-DPi0aCCQ.js +0 -125
  897. package/dist/trash-D_Jd_yQZ.js +0 -125
  898. package/dist/tui-CHc0EfJO.js +0 -3392
  899. package/dist/tui-CyHwc2uX.js +0 -3392
  900. package/dist/tui-cli-BvwbrIYO.js +0 -63
  901. package/dist/tui-cli-C9I18SfW.js +0 -58
  902. package/dist/update-DxyjwCL2.js +0 -349
  903. package/dist/update-IX7vdqA8.js +0 -349
  904. package/dist/update-cli-CBeXUSzq.js +0 -1373
  905. package/dist/update-cli-DkAWmUrp.js +0 -1370
  906. package/dist/usage-CYlQW4M2.js +0 -5279
  907. package/dist/utils-LBKvDoPx.js +0 -631
  908. package/dist/web-BUYUdnRH.js +0 -3065
  909. package/dist/web-Dquzwqf4.js +0 -70
  910. package/dist/web-tS8diboh.js +0 -76
  911. package/dist/webhooks-cli-B7Vw3CMz.js +0 -333
  912. package/dist/webhooks-cli-BpZHQlVd.js +0 -328
  913. package/dist/whatsapp-actions-D5HXezjp.js +0 -128
  914. package/dist/whatsapp-actions-DaA291Ya.js +0 -122
  915. package/dist/widearea-dns-DSoaA-eH.js +0 -127
  916. package/dist/workspace-B4ZvVYT9.js +0 -447
  917. package/dist/workspace-B8PA8oxJ.js +0 -449
  918. /package/dist/{account-lookup-0KDSp5Mj.js → account-lookup-BOCzCnir.js} +0 -0
  919. /package/dist/{account-lookup-zvANGr2x.js → account-lookup-DGscKBsr.js} +0 -0
  920. /package/dist/{ansi-D04X81yq.js → ansi-aRwLYlzD.js} +0 -0
  921. /package/dist/{api-BeQMq2iS.js → api-BDff51CS.js} +0 -0
  922. /package/dist/{api-CxX8-gGz.js → api-qWSMsT8m.js} +0 -0
  923. /package/dist/{argv-Co-b9Zsc.js → argv-neJY_Hxm.js} +0 -0
  924. /package/dist/{brew-C4zKZsHX.js → brew-ByYl36Mt.js} +0 -0
  925. /package/dist/{brew-DbSbN8sD.js → brew-CMSQ5Fek.js} +0 -0
  926. /package/dist/{chat-type-CYPyHAj-.js → chat-type-BKe459rw.js} +0 -0
  927. /package/dist/{chat-type-DKb2TlGZ.js → chat-type-DyovJwCt.js} +0 -0
  928. /package/dist/{cleanup-utils-CwQvD73q.js → cleanup-utils-S_P5Jebv.js} +0 -0
  929. /package/dist/{cli-name-BicfmwQX.js → cli-name-CRLBidNP.js} +0 -0
  930. /package/dist/{cli-name-C6rJGl18.js → cli-name-Yv30OygA.js} +0 -0
  931. /package/dist/{cli-utils-BhXbz2UF.js → cli-utils-C5nQDfa6.js} +0 -0
  932. /package/dist/{cli-utils-DZe_rVkZ.js → cli-utils-KcEwAsuZ.js} +0 -0
  933. /package/dist/{client-C61M8zI3.js → client-C7B0uFB0.js} +0 -0
  934. /package/dist/{client-DdpmATKq.js → client-Cd2HNUX0.js} +0 -0
  935. /package/dist/{command-options-C4paWSGf.js → command-options-1bi44p_B.js} +0 -0
  936. /package/dist/{command-options-CA30lfLK.js → command-options-7y5Zrv4M.js} +0 -0
  937. /package/dist/{config-eval-CjGZtLwx.js → config-eval-CJtk3Msr.js} +0 -0
  938. /package/dist/{config-eval-H_wlEYIG.js → config-eval-DQIwdWg7.js} +0 -0
  939. /package/dist/{constants-ChptG3d7.js → constants--3PuQVaS.js} +0 -0
  940. /package/dist/{constants-DY6b-_Wl.js → constants-DNWjlxZ5.js} +0 -0
  941. /package/dist/{credentials-BHWUBHMd.js → credentials-BhnauW0K.js} +0 -0
  942. /package/dist/{credentials-DFsi1_e8.js → credentials-eZcqWNG_.js} +0 -0
  943. /package/dist/{daemon-runtime-CMnbwryP.js → daemon-runtime-99xh1fGv.js} +0 -0
  944. /package/dist/{daemon-runtime-CvqE4ysg.js → daemon-runtime-BOcdJaFy.js} +0 -0
  945. /package/dist/{dangerous-name-matching-BzmiLXmA.js → dangerous-name-matching-YeatnYIA.js} +0 -0
  946. /package/dist/{dangerous-name-matching-DaVRgwer.js → dangerous-name-matching-oVb1EqYT.js} +0 -0
  947. /package/dist/{dangerous-tools-BOLoCRv4.js → dangerous-tools-BMt8-6jE.js} +0 -0
  948. /package/dist/{dangerous-tools-Baq7Q-i6.js → dangerous-tools-CripTfYv.js} +0 -0
  949. /package/dist/{fetch-timeout-DTIN7CGM.js → fetch-timeout-Db3da8yR.js} +0 -0
  950. /package/dist/{fetch-timeout-DoySHqfO.js → fetch-timeout-l_6RdoMw.js} +0 -0
  951. /package/dist/{file-identity-BxlKD8Ys.js → file-identity-Bs9zZOi2.js} +0 -0
  952. /package/dist/{format-duration-CqUERz51.js → format-duration-Bo-Mxi3E.js} +0 -0
  953. /package/dist/{format-duration-Ct-yiwkS.js → format-duration-CfrJ5T8k.js} +0 -0
  954. /package/dist/{format-relative-79_Y1n2Y.js → format-relative-8cNYQsqb.js} +0 -0
  955. /package/dist/{format-relative-CxLpEQOX.js → format-relative-CZOlQ2pA.js} +0 -0
  956. /package/dist/{health-format-B_QRD8Si.js → health-format-WMRp1BbP.js} +0 -0
  957. /package/dist/{heartbeat-wake-LGEgcXjs.js → heartbeat-wake-BtRrOB-t.js} +0 -0
  958. /package/dist/{heartbeat-wake-Y97geucO.js → heartbeat-wake-eRINROYK.js} +0 -0
  959. /package/dist/{help-format-NNm_Ov4H.js → help-format-BEb0SPHF.js} +0 -0
  960. /package/dist/{helpers-BAsMXprO.js → helpers-BJtPtu_2.js} +0 -0
  961. /package/dist/{helpers-DLgbkcEn.js → helpers-Cj6f8SPZ.js} +0 -0
  962. /package/dist/{helpers-R7bU5IBz.js → helpers-ryxLx-aM.js} +0 -0
  963. /package/dist/{host-env-security-szwfmhC4.js → host-env-security-CbiODGvQ.js} +0 -0
  964. /package/dist/{input-provenance-Bn6thJNm.js → input-provenance-CPhdY-0F.js} +0 -0
  965. /package/dist/{input-provenance-xUsSMOsz.js → input-provenance-DUNEQoFM.js} +0 -0
  966. /package/dist/{ip-C9q3Oq20.js → ip-BAhS4rY2.js} +0 -0
  967. /package/dist/{ip-D0zgNmBV.js → ip-BcdPcLiP.js} +0 -0
  968. /package/dist/{is-main-DN8-sNR5.js → is-main-KcWqINzy.js} +0 -0
  969. /package/dist/{json-file-ChO_R9yh.js → json-file-BVvmrQG3.js} +0 -0
  970. /package/dist/{json-file-B7l5-Xhr.js → json-file-Dbg7nZg1.js} +0 -0
  971. /package/dist/{json-files-CmpYSF4G.js → json-files-DSKEdz7x.js} +0 -0
  972. /package/dist/{lanes-ByWMUgrz.js → lanes-Brd-nf-Z.js} +0 -0
  973. /package/dist/{lanes-cHJ5arWg.js → lanes-COs3zODW.js} +0 -0
  974. /package/dist/{links-Bz4V7R_p.js → links-gse8sWn-.js} +0 -0
  975. /package/dist/{location-DBWCGNLq.js → location-D1FM_C63.js} +0 -0
  976. /package/dist/{location-GbZ0bBRU.js → location-LuzkqHGi.js} +0 -0
  977. /package/dist/{logger-DyL5G2DO.js → logger-BMP_j_Lx.js} +0 -0
  978. /package/dist/{logger-BWMPnILd.js → logger-DWbwXLjl.js} +0 -0
  979. /package/dist/{logger-GvipVDfh.js → logger-DXCDb7qu.js} +0 -0
  980. /package/dist/{logging-D8-Kozjc.js → logging-CAgCb3n3.js} +0 -0
  981. /package/dist/{message-channel-uWMAiywE.js → message-channel-D72Bc6Tb.js} +0 -0
  982. /package/dist/{mime-BS3jhcZE.js → mime-Cqg1jjia.js} +0 -0
  983. /package/dist/{mime-Cxh_64P6.js → mime-D4bQLMJL.js} +0 -0
  984. /package/dist/{mutable-allowlist-detectors-DiZDtmlZ.js → mutable-allowlist-detectors-NtI6s4TE.js} +0 -0
  985. /package/dist/{mutable-allowlist-detectors-U5ThQr9V.js → mutable-allowlist-detectors-nAmo9v5u.js} +0 -0
  986. /package/dist/{node-cli-Uf6lAntf.js → node-cli-bNJbha3z.js} +0 -0
  987. /package/dist/{parse-log-line-enq8pduH.js → parse-log-line-BY9Vz72K.js} +0 -0
  988. /package/dist/{parse-log-line-mz9TG6ig.js → parse-log-line-BrrE4onI.js} +0 -0
  989. /package/dist/{parse-timeout-BMP8a0_a.js → parse-timeout-Dfyln-4M.js} +0 -0
  990. /package/dist/{path-guards-CIx4hURU.js → path-guards-D9LU0y9L.js} +0 -0
  991. /package/dist/{path-guards-CrQOUlsq.js → path-guards-crZaTVvq.js} +0 -0
  992. /package/dist/plugin-sdk/{agents → auth}/api-key-rotation.d.ts +0 -0
  993. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/paths.d.ts +0 -0
  994. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/profiles.d.ts +0 -0
  995. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/store.d.ts +0 -0
  996. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/types.d.ts +0 -0
  997. /package/dist/{plugins-allowlist-BbTQ5Z2k.js → plugins-allowlist-CD4oIJNk.js} +0 -0
  998. /package/dist/{plugins-allowlist-C20oaESO.js → plugins-allowlist-CUhk3GDh.js} +0 -0
  999. /package/dist/{polls-B0CCBDeR.js → polls-ChvH1OIW.js} +0 -0
  1000. /package/dist/{polls-CwwHzYBM.js → polls-Dn1C2d1-.js} +0 -0
  1001. /package/dist/{ports-lsof-Wteul3ju.js → ports-lsof-BDQWExpn.js} +0 -0
  1002. /package/dist/{process-scoped-map-CV9kDvfG.js → process-scoped-map-BwUkYFQV.js} +0 -0
  1003. /package/dist/{process-scoped-map-PEvnG75N.js → process-scoped-map-CBWcUvTa.js} +0 -0
  1004. /package/dist/{program-context-jqeI5alP.js → program-context-DtsEOsdM.js} +0 -0
  1005. /package/dist/{progress-C1kUfYL-.js → progress-BjGCAXH7.js} +0 -0
  1006. /package/dist/{prompt-Yn2yClg1.js → prompt-FIISMuNm.js} +0 -0
  1007. /package/dist/{prompt-style-DjEYC_s-.js → prompt-style-DL64_X-p.js} +0 -0
  1008. /package/dist/{provider-utils-3JTMJroG.js → provider-utils-DiLhkKQp.js} +0 -0
  1009. /package/dist/{proxy-DL3MD6-P.js → proxy-DUTF0OYE.js} +0 -0
  1010. /package/dist/{proxy-DpNv2cSV.js → proxy-Dv0sbx6A.js} +0 -0
  1011. /package/dist/{pw-ai-state-CGfLv6nV.js → pw-ai-state-DKhOTqDv.js} +0 -0
  1012. /package/dist/{pw-ai-state-Dynx20hr.js → pw-ai-state-kkp06zyZ.js} +0 -0
  1013. /package/dist/{redact-Dx1Fue21.js → redact-BTeK8lMZ.js} +0 -0
  1014. /package/dist/{redact-identifier-BTIWtaa-.js → redact-identifier-F6t5pklx.js} +0 -0
  1015. /package/dist/{redact-identifier-CAagcfWA.js → redact-identifier-VdOrq-IK.js} +0 -0
  1016. /package/dist/{remoteclaw-root-C2HV2VeC.js → remoteclaw-root-DF8m3X4C.js} +0 -0
  1017. /package/dist/{remoteclaw-root-DybYl8PL.js → remoteclaw-root-rJHOCwzo.js} +0 -0
  1018. /package/dist/{render-CCLsW6Lz.js → render-e7fENCYH.js} +0 -0
  1019. /package/dist/{render-uf6PvGMV.js → render-qcqmrHse.js} +0 -0
  1020. /package/dist/{retry-DnqPAqWp.js → retry-CwZiwLDN.js} +0 -0
  1021. /package/dist/{runtime-DJNp29jv.js → runtime-Ds3E9SqF.js} +0 -0
  1022. /package/dist/{runtime-guard-U-ewY_QH.js → runtime-guard-CdJVmJc0.js} +0 -0
  1023. /package/dist/{secret-equal-BbHdTtqY.js → secret-equal-CDUVxXmp.js} +0 -0
  1024. /package/dist/{secret-equal-CXJEZiWb.js → secret-equal-d3sEnK98.js} +0 -0
  1025. /package/dist/{secure-random-CS2mSdTn.js → secure-random-CJtykx_p.js} +0 -0
  1026. /package/dist/{secure-random-_dzDDlFo.js → secure-random-y6N6Gted.js} +0 -0
  1027. /package/dist/{session-key-5YLnn_qf.js → session-key-BF-9YzxC.js} +0 -0
  1028. /package/dist/{stagger-BXv_apuy.js → stagger-B-_Wnofy.js} +0 -0
  1029. /package/dist/{stagger-MI9gd2rQ.js → stagger-CjkdqPuN.js} +0 -0
  1030. /package/dist/{status-BmtCS3T1.js → status-BFmH9Uge.js} +0 -0
  1031. /package/dist/{status-BrwHRn2B.js → status-BIupzBh9.js} +0 -0
  1032. /package/dist/{strip-inbound-meta-DjKcSFaW.js → strip-inbound-meta-BNXRYvmY.js} +0 -0
  1033. /package/dist/{strip-inbound-meta-jy3bkUab.js → strip-inbound-meta-BtNFmc6V.js} +0 -0
  1034. /package/dist/{table-C1rdyYl9.js → table-Au5EeKD6.js} +0 -0
  1035. /package/dist/{target-errors-BDpPcwh5.js → target-errors-B6YON-5k.js} +0 -0
  1036. /package/dist/{target-errors-DdIAPcMM.js → target-errors-sPHoHj73.js} +0 -0
  1037. /package/dist/{targets-D-qLBpTA.js → targets-BtGRUQMa.js} +0 -0
  1038. /package/dist/{targets-BMenhVHg.js → targets-D3r6Zgic.js} +0 -0
  1039. /package/dist/{targets-C-2xwh9f.js → targets-DDdPVd12.js} +0 -0
  1040. /package/dist/{targets-UncQvCVs.js → targets-Ds5eT_RZ.js} +0 -0
  1041. /package/dist/{targets-D7PT_rdO.js → targets-DtvPW-B8.js} +0 -0
  1042. /package/dist/{text-format-BQ3z_OXA.js → text-format-CFm4X8Ze.js} +0 -0
  1043. /package/dist/{text-format-oWqzVmah.js → text-format-KHU3KzvQ.js} +0 -0
  1044. /package/dist/{tokens-B-jmvNR9.js → tokens-BGw4xHhW.js} +0 -0
  1045. /package/dist/{usage-BdhBT0Vz.js → usage-BEjWlD9A.js} +0 -0
  1046. /package/dist/{usage-format-C3mNLfhI.js → usage-format-Cx3JveFn.js} +0 -0
  1047. /package/dist/{usage-format-DAaPzr_z.js → usage-format-D-ZaYT_e.js} +0 -0
  1048. /package/dist/{usage-BtQcAnf6.js → usage-o8O_TxA-.js} +0 -0
  1049. /package/dist/{widearea-dns-CsmBVbez.js → widearea-dns-DUDYT3z2.js} +0 -0
  1050. /package/dist/{workspace-BzPeZDew.js → workspace-9__vtmnA.js} +0 -0
  1051. /package/dist/{wsl-B_sPlzWw.js → wsl-BLrG__iS.js} +0 -0
  1052. /package/dist/{wsl-BCnYV9O0.js → wsl-C2dudsWt.js} +0 -0
@@ -0,0 +1,1732 @@
1
+ import { H as CONFIG_DIR, o as createSubsystemLogger } from "./entry.js";
2
+ import { i as loadConfig } from "./config-BupC6eiJ.js";
3
+ import { n as isLoopbackAddress, p as rawDataToString, r as isLoopbackHost } from "./net-QZ8IHNXc.js";
4
+ import { a as resolvePinnedHostnameWithPolicy } from "./ssrf-D6fl_7ww.js";
5
+ import { t as ensurePortAvailable } from "./ports-DAc2AlZE.js";
6
+ import { c as DEFAULT_REMOTECLAW_BROWSER_PROFILE_NAME, o as DEFAULT_REMOTECLAW_BROWSER_COLOR } from "./constants--3PuQVaS.js";
7
+ import { execFileSync, spawn } from "node:child_process";
8
+ import os from "node:os";
9
+ import path from "node:path";
10
+ import fs from "node:fs";
11
+ import { createHmac } from "node:crypto";
12
+ import WebSocket, { WebSocketServer } from "ws";
13
+ import { createServer } from "node:http";
14
+
15
+ //#region src/browser/extension-relay-auth.ts
16
+ const RELAY_TOKEN_CONTEXT = "remoteclaw-extension-relay-v1";
17
+ const DEFAULT_RELAY_PROBE_TIMEOUT_MS = 500;
18
+ const REMOTECLAW_RELAY_BROWSER = "RemoteClaw/extension-relay";
19
+ function resolveGatewayAuthToken() {
20
+ const envToken = process.env.REMOTECLAW_GATEWAY_TOKEN?.trim() || process.env.CLAWDBOT_GATEWAY_TOKEN?.trim();
21
+ if (envToken) return envToken;
22
+ try {
23
+ const configToken = loadConfig().gateway?.auth?.token?.trim();
24
+ if (configToken) return configToken;
25
+ } catch {}
26
+ return null;
27
+ }
28
+ function deriveRelayAuthToken(gatewayToken, port) {
29
+ return createHmac("sha256", gatewayToken).update(`${RELAY_TOKEN_CONTEXT}:${port}`).digest("hex");
30
+ }
31
+ function resolveRelayAcceptedTokensForPort(port) {
32
+ const gatewayToken = resolveGatewayAuthToken();
33
+ if (!gatewayToken) throw new Error("extension relay requires gateway auth token (set gateway.auth.token or REMOTECLAW_GATEWAY_TOKEN)");
34
+ const relayToken = deriveRelayAuthToken(gatewayToken, port);
35
+ if (relayToken === gatewayToken) return [relayToken];
36
+ return [relayToken, gatewayToken];
37
+ }
38
+ function resolveRelayAuthTokenForPort(port) {
39
+ return resolveRelayAcceptedTokensForPort(port)[0];
40
+ }
41
+ async function probeAuthenticatedRemoteClawRelay(params) {
42
+ const ctrl = new AbortController();
43
+ const timer = setTimeout(() => ctrl.abort(), params.timeoutMs ?? DEFAULT_RELAY_PROBE_TIMEOUT_MS);
44
+ try {
45
+ const versionUrl = new URL("/json/version", `${params.baseUrl}/`).toString();
46
+ const res = await fetch(versionUrl, {
47
+ signal: ctrl.signal,
48
+ headers: { [params.relayAuthHeader]: params.relayAuthToken }
49
+ });
50
+ if (!res.ok) return false;
51
+ const body = await res.json();
52
+ return (typeof body?.Browser === "string" ? body.Browser.trim() : "") === REMOTECLAW_RELAY_BROWSER;
53
+ } catch {
54
+ return false;
55
+ } finally {
56
+ clearTimeout(timer);
57
+ }
58
+ }
59
+
60
+ //#endregion
61
+ //#region src/browser/extension-relay.ts
62
+ const RELAY_AUTH_HEADER = "x-remoteclaw-relay-token";
63
+ function headerValue(value) {
64
+ if (!value) return;
65
+ if (Array.isArray(value)) return value[0];
66
+ return value;
67
+ }
68
+ function getHeader(req, name) {
69
+ return headerValue(req.headers[name.toLowerCase()]);
70
+ }
71
+ function getRelayAuthTokenFromRequest(req, url) {
72
+ const headerToken = getHeader(req, RELAY_AUTH_HEADER)?.trim();
73
+ if (headerToken) return headerToken;
74
+ const queryToken = url?.searchParams.get("token")?.trim();
75
+ if (queryToken) return queryToken;
76
+ }
77
+ function parseUrlPort(parsed) {
78
+ const port = parsed.port?.trim() !== "" ? Number(parsed.port) : parsed.protocol === "https:" ? 443 : 80;
79
+ if (!Number.isFinite(port) || port <= 0 || port > 65535) return null;
80
+ return port;
81
+ }
82
+ function parseBaseUrl(raw) {
83
+ const parsed = new URL(raw.trim().replace(/\/$/, ""));
84
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") throw new Error(`extension relay cdpUrl must be http(s), got ${parsed.protocol}`);
85
+ const host = parsed.hostname;
86
+ const port = parseUrlPort(parsed);
87
+ if (!port) throw new Error(`extension relay cdpUrl has invalid port: ${parsed.port || "(empty)"}`);
88
+ return {
89
+ host,
90
+ port,
91
+ baseUrl: parsed.toString().replace(/\/$/, "")
92
+ };
93
+ }
94
+ function text(res, status, bodyText) {
95
+ const body = Buffer.from(bodyText);
96
+ res.write(`HTTP/1.1 ${status} ${status === 200 ? "OK" : "ERR"}\r\nContent-Type: text/plain; charset=utf-8\r
97
+ Content-Length: ${body.length}\r\nConnection: close\r
98
+ \r
99
+ `);
100
+ res.write(body);
101
+ res.end();
102
+ }
103
+ function rejectUpgrade(socket, status, bodyText) {
104
+ text(socket, status, bodyText);
105
+ try {
106
+ socket.destroy();
107
+ } catch {}
108
+ }
109
+ const relayRuntimeByPort = /* @__PURE__ */ new Map();
110
+ function isAddrInUseError(err) {
111
+ return typeof err === "object" && err !== null && "code" in err && err.code === "EADDRINUSE";
112
+ }
113
+ function relayAuthTokenForUrl(url) {
114
+ try {
115
+ const parsed = new URL(url);
116
+ if (!isLoopbackHost(parsed.hostname)) return null;
117
+ const port = parseUrlPort(parsed);
118
+ if (!port) return null;
119
+ return relayRuntimeByPort.get(port)?.relayAuthToken ?? null;
120
+ } catch {
121
+ return null;
122
+ }
123
+ }
124
+ function getChromeExtensionRelayAuthHeaders(url) {
125
+ const token = relayAuthTokenForUrl(url);
126
+ if (!token) return {};
127
+ return { [RELAY_AUTH_HEADER]: token };
128
+ }
129
+ async function ensureChromeExtensionRelayServer(opts) {
130
+ const info = parseBaseUrl(opts.cdpUrl);
131
+ if (!isLoopbackHost(info.host)) throw new Error(`extension relay requires loopback cdpUrl host (got ${info.host})`);
132
+ const existing = relayRuntimeByPort.get(info.port);
133
+ if (existing) return existing.server;
134
+ const relayAuthToken = resolveRelayAuthTokenForPort(info.port);
135
+ const relayAuthTokens = new Set(resolveRelayAcceptedTokensForPort(info.port));
136
+ let extensionWs = null;
137
+ const cdpClients = /* @__PURE__ */ new Set();
138
+ const connectedTargets = /* @__PURE__ */ new Map();
139
+ const extensionConnected = () => extensionWs?.readyState === WebSocket.OPEN;
140
+ const pendingExtension = /* @__PURE__ */ new Map();
141
+ let nextExtensionId = 1;
142
+ const sendToExtension = async (payload) => {
143
+ const ws = extensionWs;
144
+ if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
145
+ ws.send(JSON.stringify(payload));
146
+ return await new Promise((resolve, reject) => {
147
+ const timer = setTimeout(() => {
148
+ pendingExtension.delete(payload.id);
149
+ reject(/* @__PURE__ */ new Error(`extension request timeout: ${payload.params.method}`));
150
+ }, 3e4);
151
+ pendingExtension.set(payload.id, {
152
+ resolve,
153
+ reject,
154
+ timer
155
+ });
156
+ });
157
+ };
158
+ const broadcastToCdpClients = (evt) => {
159
+ const msg = JSON.stringify(evt);
160
+ for (const ws of cdpClients) {
161
+ if (ws.readyState !== WebSocket.OPEN) continue;
162
+ ws.send(msg);
163
+ }
164
+ };
165
+ const sendResponseToCdp = (ws, res) => {
166
+ if (ws.readyState !== WebSocket.OPEN) return;
167
+ ws.send(JSON.stringify(res));
168
+ };
169
+ const ensureTargetEventsForClient = (ws, mode) => {
170
+ for (const target of connectedTargets.values()) if (mode === "autoAttach") ws.send(JSON.stringify({
171
+ method: "Target.attachedToTarget",
172
+ params: {
173
+ sessionId: target.sessionId,
174
+ targetInfo: {
175
+ ...target.targetInfo,
176
+ attached: true
177
+ },
178
+ waitingForDebugger: false
179
+ }
180
+ }));
181
+ else ws.send(JSON.stringify({
182
+ method: "Target.targetCreated",
183
+ params: { targetInfo: {
184
+ ...target.targetInfo,
185
+ attached: true
186
+ } }
187
+ }));
188
+ };
189
+ const routeCdpCommand = async (cmd) => {
190
+ switch (cmd.method) {
191
+ case "Browser.getVersion": return {
192
+ protocolVersion: "1.3",
193
+ product: "Chrome/RemoteClaw-Extension-Relay",
194
+ revision: "0",
195
+ userAgent: "RemoteClaw-Extension-Relay",
196
+ jsVersion: "V8"
197
+ };
198
+ case "Browser.setDownloadBehavior": return {};
199
+ case "Target.setAutoAttach":
200
+ case "Target.setDiscoverTargets": return {};
201
+ case "Target.getTargets": return { targetInfos: Array.from(connectedTargets.values()).map((t) => ({
202
+ ...t.targetInfo,
203
+ attached: true
204
+ })) };
205
+ case "Target.getTargetInfo": {
206
+ const params = cmd.params ?? {};
207
+ const targetId = typeof params.targetId === "string" ? params.targetId : void 0;
208
+ if (targetId) {
209
+ for (const t of connectedTargets.values()) if (t.targetId === targetId) return { targetInfo: t.targetInfo };
210
+ }
211
+ if (cmd.sessionId && connectedTargets.has(cmd.sessionId)) {
212
+ const t = connectedTargets.get(cmd.sessionId);
213
+ if (t) return { targetInfo: t.targetInfo };
214
+ }
215
+ return { targetInfo: Array.from(connectedTargets.values())[0]?.targetInfo };
216
+ }
217
+ case "Target.attachToTarget": {
218
+ const params = cmd.params ?? {};
219
+ const targetId = typeof params.targetId === "string" ? params.targetId : void 0;
220
+ if (!targetId) throw new Error("targetId required");
221
+ for (const t of connectedTargets.values()) if (t.targetId === targetId) return { sessionId: t.sessionId };
222
+ throw new Error("target not found");
223
+ }
224
+ default: return await sendToExtension({
225
+ id: nextExtensionId++,
226
+ method: "forwardCDPCommand",
227
+ params: {
228
+ method: cmd.method,
229
+ sessionId: cmd.sessionId,
230
+ params: cmd.params
231
+ }
232
+ });
233
+ }
234
+ };
235
+ const server = createServer((req, res) => {
236
+ const path = new URL(req.url ?? "/", info.baseUrl).pathname;
237
+ if (path.startsWith("/json")) {
238
+ const token = getHeader(req, RELAY_AUTH_HEADER)?.trim();
239
+ if (!token || !relayAuthTokens.has(token)) {
240
+ res.writeHead(401);
241
+ res.end("Unauthorized");
242
+ return;
243
+ }
244
+ }
245
+ if (req.method === "HEAD" && path === "/") {
246
+ res.writeHead(200);
247
+ res.end();
248
+ return;
249
+ }
250
+ if (path === "/") {
251
+ res.writeHead(200, { "Content-Type": "text/plain; charset=utf-8" });
252
+ res.end("OK");
253
+ return;
254
+ }
255
+ if (path === "/extension/status") {
256
+ res.writeHead(200, { "Content-Type": "application/json" });
257
+ res.end(JSON.stringify({ connected: extensionConnected() }));
258
+ return;
259
+ }
260
+ const cdpWsUrl = `${`ws://${req.headers.host?.trim() || `${info.host}:${info.port}`}`}/cdp`;
261
+ if ((path === "/json/version" || path === "/json/version/") && (req.method === "GET" || req.method === "PUT")) {
262
+ const payload = {
263
+ Browser: "RemoteClaw/extension-relay",
264
+ "Protocol-Version": "1.3"
265
+ };
266
+ if (extensionConnected()) payload.webSocketDebuggerUrl = cdpWsUrl;
267
+ res.writeHead(200, { "Content-Type": "application/json" });
268
+ res.end(JSON.stringify(payload));
269
+ return;
270
+ }
271
+ if (new Set([
272
+ "/json",
273
+ "/json/",
274
+ "/json/list",
275
+ "/json/list/"
276
+ ]).has(path) && (req.method === "GET" || req.method === "PUT")) {
277
+ const list = Array.from(connectedTargets.values()).map((t) => ({
278
+ id: t.targetId,
279
+ type: t.targetInfo.type ?? "page",
280
+ title: t.targetInfo.title ?? "",
281
+ description: t.targetInfo.title ?? "",
282
+ url: t.targetInfo.url ?? "",
283
+ webSocketDebuggerUrl: cdpWsUrl,
284
+ devtoolsFrontendUrl: `/devtools/inspector.html?ws=${cdpWsUrl.replace("ws://", "")}`
285
+ }));
286
+ res.writeHead(200, { "Content-Type": "application/json" });
287
+ res.end(JSON.stringify(list));
288
+ return;
289
+ }
290
+ const handleTargetActionRoute = (match, cdpMethod) => {
291
+ if (!match || req.method !== "GET" && req.method !== "PUT") return false;
292
+ const targetId = decodeURIComponent(match[1] ?? "").trim();
293
+ if (!targetId) {
294
+ res.writeHead(400);
295
+ res.end("targetId required");
296
+ return true;
297
+ }
298
+ (async () => {
299
+ try {
300
+ await sendToExtension({
301
+ id: nextExtensionId++,
302
+ method: "forwardCDPCommand",
303
+ params: {
304
+ method: cdpMethod,
305
+ params: { targetId }
306
+ }
307
+ });
308
+ } catch {}
309
+ })();
310
+ res.writeHead(200);
311
+ res.end("OK");
312
+ return true;
313
+ };
314
+ if (handleTargetActionRoute(path.match(/^\/json\/activate\/(.+)$/), "Target.activateTarget")) return;
315
+ if (handleTargetActionRoute(path.match(/^\/json\/close\/(.+)$/), "Target.closeTarget")) return;
316
+ res.writeHead(404);
317
+ res.end("not found");
318
+ });
319
+ const wssExtension = new WebSocketServer({ noServer: true });
320
+ const wssCdp = new WebSocketServer({ noServer: true });
321
+ server.on("upgrade", (req, socket, head) => {
322
+ const url = new URL(req.url ?? "/", info.baseUrl);
323
+ const pathname = url.pathname;
324
+ const remote = req.socket.remoteAddress;
325
+ if (!isLoopbackAddress(remote)) {
326
+ rejectUpgrade(socket, 403, "Forbidden");
327
+ return;
328
+ }
329
+ const origin = headerValue(req.headers.origin);
330
+ if (origin && !origin.startsWith("chrome-extension://")) {
331
+ rejectUpgrade(socket, 403, "Forbidden: invalid origin");
332
+ return;
333
+ }
334
+ if (pathname === "/extension") {
335
+ const token = getRelayAuthTokenFromRequest(req, url);
336
+ if (!token || !relayAuthTokens.has(token)) {
337
+ rejectUpgrade(socket, 401, "Unauthorized");
338
+ return;
339
+ }
340
+ if (extensionConnected()) {
341
+ rejectUpgrade(socket, 409, "Extension already connected");
342
+ return;
343
+ }
344
+ if (extensionWs && extensionWs.readyState !== WebSocket.OPEN) {
345
+ try {
346
+ extensionWs.terminate();
347
+ } catch {}
348
+ extensionWs = null;
349
+ }
350
+ wssExtension.handleUpgrade(req, socket, head, (ws) => {
351
+ wssExtension.emit("connection", ws, req);
352
+ });
353
+ return;
354
+ }
355
+ if (pathname === "/cdp") {
356
+ const token = getRelayAuthTokenFromRequest(req, url);
357
+ if (!token || !relayAuthTokens.has(token)) {
358
+ rejectUpgrade(socket, 401, "Unauthorized");
359
+ return;
360
+ }
361
+ if (!extensionConnected()) {
362
+ rejectUpgrade(socket, 503, "Extension not connected");
363
+ return;
364
+ }
365
+ wssCdp.handleUpgrade(req, socket, head, (ws) => {
366
+ wssCdp.emit("connection", ws, req);
367
+ });
368
+ return;
369
+ }
370
+ rejectUpgrade(socket, 404, "Not Found");
371
+ });
372
+ wssExtension.on("connection", (ws) => {
373
+ extensionWs = ws;
374
+ const ping = setInterval(() => {
375
+ if (ws.readyState !== WebSocket.OPEN) return;
376
+ ws.send(JSON.stringify({ method: "ping" }));
377
+ }, 5e3);
378
+ ws.on("message", (data) => {
379
+ if (extensionWs !== ws) return;
380
+ let parsed = null;
381
+ try {
382
+ parsed = JSON.parse(rawDataToString(data));
383
+ } catch {
384
+ return;
385
+ }
386
+ if (parsed && typeof parsed === "object" && "id" in parsed && typeof parsed.id === "number") {
387
+ const pending = pendingExtension.get(parsed.id);
388
+ if (!pending) return;
389
+ pendingExtension.delete(parsed.id);
390
+ clearTimeout(pending.timer);
391
+ if ("error" in parsed && typeof parsed.error === "string" && parsed.error.trim()) pending.reject(new Error(parsed.error));
392
+ else pending.resolve(parsed.result);
393
+ return;
394
+ }
395
+ if (parsed && typeof parsed === "object" && "method" in parsed) {
396
+ if (parsed.method === "pong") return;
397
+ if (parsed.method !== "forwardCDPEvent") return;
398
+ const evt = parsed;
399
+ const method = evt.params?.method;
400
+ const params = evt.params?.params;
401
+ const sessionId = evt.params?.sessionId;
402
+ if (!method || typeof method !== "string") return;
403
+ if (method === "Target.attachedToTarget") {
404
+ const attached = params ?? {};
405
+ if ((attached?.targetInfo?.type ?? "page") !== "page") return;
406
+ if (attached?.sessionId && attached?.targetInfo?.targetId) {
407
+ const prev = connectedTargets.get(attached.sessionId);
408
+ const nextTargetId = attached.targetInfo.targetId;
409
+ const prevTargetId = prev?.targetId;
410
+ const changedTarget = Boolean(prev && prevTargetId && prevTargetId !== nextTargetId);
411
+ connectedTargets.set(attached.sessionId, {
412
+ sessionId: attached.sessionId,
413
+ targetId: nextTargetId,
414
+ targetInfo: attached.targetInfo
415
+ });
416
+ if (changedTarget && prevTargetId) broadcastToCdpClients({
417
+ method: "Target.detachedFromTarget",
418
+ params: {
419
+ sessionId: attached.sessionId,
420
+ targetId: prevTargetId
421
+ },
422
+ sessionId: attached.sessionId
423
+ });
424
+ if (!prev || changedTarget) broadcastToCdpClients({
425
+ method,
426
+ params,
427
+ sessionId
428
+ });
429
+ return;
430
+ }
431
+ }
432
+ if (method === "Target.detachedFromTarget") {
433
+ const detached = params ?? {};
434
+ if (detached?.sessionId) connectedTargets.delete(detached.sessionId);
435
+ broadcastToCdpClients({
436
+ method,
437
+ params,
438
+ sessionId
439
+ });
440
+ return;
441
+ }
442
+ if (method === "Target.targetInfoChanged") {
443
+ const targetInfo = (params ?? {})?.targetInfo;
444
+ const targetId = targetInfo?.targetId;
445
+ if (targetId && (targetInfo?.type ?? "page") === "page") for (const [sid, target] of connectedTargets) {
446
+ if (target.targetId !== targetId) continue;
447
+ connectedTargets.set(sid, {
448
+ ...target,
449
+ targetInfo: {
450
+ ...target.targetInfo,
451
+ ...targetInfo
452
+ }
453
+ });
454
+ }
455
+ }
456
+ broadcastToCdpClients({
457
+ method,
458
+ params,
459
+ sessionId
460
+ });
461
+ }
462
+ });
463
+ ws.on("close", () => {
464
+ clearInterval(ping);
465
+ if (extensionWs !== ws) return;
466
+ extensionWs = null;
467
+ for (const [, pending] of pendingExtension) {
468
+ clearTimeout(pending.timer);
469
+ pending.reject(/* @__PURE__ */ new Error("extension disconnected"));
470
+ }
471
+ pendingExtension.clear();
472
+ connectedTargets.clear();
473
+ for (const client of cdpClients) try {
474
+ client.close(1011, "extension disconnected");
475
+ } catch {}
476
+ cdpClients.clear();
477
+ });
478
+ });
479
+ wssCdp.on("connection", (ws) => {
480
+ cdpClients.add(ws);
481
+ ws.on("message", async (data) => {
482
+ let cmd = null;
483
+ try {
484
+ cmd = JSON.parse(rawDataToString(data));
485
+ } catch {
486
+ return;
487
+ }
488
+ if (!cmd || typeof cmd !== "object") return;
489
+ if (typeof cmd.id !== "number" || typeof cmd.method !== "string") return;
490
+ if (!extensionConnected()) {
491
+ sendResponseToCdp(ws, {
492
+ id: cmd.id,
493
+ sessionId: cmd.sessionId,
494
+ error: { message: "Extension not connected" }
495
+ });
496
+ return;
497
+ }
498
+ try {
499
+ const result = await routeCdpCommand(cmd);
500
+ if (cmd.method === "Target.setAutoAttach" && !cmd.sessionId) ensureTargetEventsForClient(ws, "autoAttach");
501
+ if (cmd.method === "Target.setDiscoverTargets") {
502
+ if ((cmd.params ?? {}).discover === true) ensureTargetEventsForClient(ws, "discover");
503
+ }
504
+ if (cmd.method === "Target.attachToTarget") {
505
+ const params = cmd.params ?? {};
506
+ const targetId = typeof params.targetId === "string" ? params.targetId : void 0;
507
+ if (targetId) {
508
+ const target = Array.from(connectedTargets.values()).find((t) => t.targetId === targetId);
509
+ if (target) ws.send(JSON.stringify({
510
+ method: "Target.attachedToTarget",
511
+ params: {
512
+ sessionId: target.sessionId,
513
+ targetInfo: {
514
+ ...target.targetInfo,
515
+ attached: true
516
+ },
517
+ waitingForDebugger: false
518
+ }
519
+ }));
520
+ }
521
+ }
522
+ sendResponseToCdp(ws, {
523
+ id: cmd.id,
524
+ sessionId: cmd.sessionId,
525
+ result
526
+ });
527
+ } catch (err) {
528
+ sendResponseToCdp(ws, {
529
+ id: cmd.id,
530
+ sessionId: cmd.sessionId,
531
+ error: { message: err instanceof Error ? err.message : String(err) }
532
+ });
533
+ }
534
+ });
535
+ ws.on("close", () => {
536
+ cdpClients.delete(ws);
537
+ });
538
+ });
539
+ try {
540
+ await new Promise((resolve, reject) => {
541
+ server.listen(info.port, info.host, () => resolve());
542
+ server.once("error", reject);
543
+ });
544
+ } catch (err) {
545
+ if (isAddrInUseError(err) && await probeAuthenticatedRemoteClawRelay({
546
+ baseUrl: info.baseUrl,
547
+ relayAuthHeader: RELAY_AUTH_HEADER,
548
+ relayAuthToken
549
+ })) {
550
+ const existingRelay = {
551
+ host: info.host,
552
+ port: info.port,
553
+ baseUrl: info.baseUrl,
554
+ cdpWsUrl: `ws://${info.host}:${info.port}/cdp`,
555
+ extensionConnected: () => false,
556
+ stop: async () => {
557
+ relayRuntimeByPort.delete(info.port);
558
+ }
559
+ };
560
+ relayRuntimeByPort.set(info.port, {
561
+ server: existingRelay,
562
+ relayAuthToken
563
+ });
564
+ return existingRelay;
565
+ }
566
+ throw err;
567
+ }
568
+ const port = server.address()?.port ?? info.port;
569
+ const host = info.host;
570
+ const relay = {
571
+ host,
572
+ port,
573
+ baseUrl: `${new URL(info.baseUrl).protocol}//${host}:${port}`,
574
+ cdpWsUrl: `ws://${host}:${port}/cdp`,
575
+ extensionConnected,
576
+ stop: async () => {
577
+ relayRuntimeByPort.delete(port);
578
+ try {
579
+ extensionWs?.close(1001, "server stopping");
580
+ } catch {}
581
+ for (const ws of cdpClients) try {
582
+ ws.close(1001, "server stopping");
583
+ } catch {}
584
+ await new Promise((resolve) => {
585
+ server.close(() => resolve());
586
+ });
587
+ wssExtension.close();
588
+ wssCdp.close();
589
+ }
590
+ };
591
+ relayRuntimeByPort.set(port, {
592
+ server: relay,
593
+ relayAuthToken
594
+ });
595
+ return relay;
596
+ }
597
+ async function stopChromeExtensionRelayServer(opts) {
598
+ const info = parseBaseUrl(opts.cdpUrl);
599
+ const existing = relayRuntimeByPort.get(info.port);
600
+ if (!existing) return false;
601
+ await existing.server.stop();
602
+ return true;
603
+ }
604
+
605
+ //#endregion
606
+ //#region src/browser/cdp.helpers.ts
607
+ function getHeadersWithAuth(url, headers = {}) {
608
+ const mergedHeaders = {
609
+ ...getChromeExtensionRelayAuthHeaders(url),
610
+ ...headers
611
+ };
612
+ try {
613
+ const parsed = new URL(url);
614
+ if (Object.keys(mergedHeaders).some((key) => key.toLowerCase() === "authorization")) return mergedHeaders;
615
+ if (parsed.username || parsed.password) {
616
+ const auth = Buffer.from(`${parsed.username}:${parsed.password}`).toString("base64");
617
+ return {
618
+ ...mergedHeaders,
619
+ Authorization: `Basic ${auth}`
620
+ };
621
+ }
622
+ } catch {}
623
+ return mergedHeaders;
624
+ }
625
+ function appendCdpPath(cdpUrl, path) {
626
+ const url = new URL(cdpUrl);
627
+ url.pathname = `${url.pathname.replace(/\/$/, "")}${path.startsWith("/") ? path : `/${path}`}`;
628
+ return url.toString();
629
+ }
630
+ function createCdpSender(ws) {
631
+ let nextId = 1;
632
+ const pending = /* @__PURE__ */ new Map();
633
+ const send = (method, params, sessionId) => {
634
+ const id = nextId++;
635
+ const msg = {
636
+ id,
637
+ method,
638
+ params,
639
+ sessionId
640
+ };
641
+ ws.send(JSON.stringify(msg));
642
+ return new Promise((resolve, reject) => {
643
+ pending.set(id, {
644
+ resolve,
645
+ reject
646
+ });
647
+ });
648
+ };
649
+ const closeWithError = (err) => {
650
+ for (const [, p] of pending) p.reject(err);
651
+ pending.clear();
652
+ try {
653
+ ws.close();
654
+ } catch {}
655
+ };
656
+ ws.on("error", (err) => {
657
+ closeWithError(err instanceof Error ? err : new Error(String(err)));
658
+ });
659
+ ws.on("message", (data) => {
660
+ try {
661
+ const parsed = JSON.parse(rawDataToString(data));
662
+ if (typeof parsed.id !== "number") return;
663
+ const p = pending.get(parsed.id);
664
+ if (!p) return;
665
+ pending.delete(parsed.id);
666
+ if (parsed.error?.message) {
667
+ p.reject(new Error(parsed.error.message));
668
+ return;
669
+ }
670
+ p.resolve(parsed.result);
671
+ } catch {}
672
+ });
673
+ ws.on("close", () => {
674
+ closeWithError(/* @__PURE__ */ new Error("CDP socket closed"));
675
+ });
676
+ return {
677
+ send,
678
+ closeWithError
679
+ };
680
+ }
681
+ async function fetchJson(url, timeoutMs = 1500, init) {
682
+ return await (await fetchChecked(url, timeoutMs, init)).json();
683
+ }
684
+ async function fetchChecked(url, timeoutMs = 1500, init) {
685
+ const ctrl = new AbortController();
686
+ const t = setTimeout(ctrl.abort.bind(ctrl), timeoutMs);
687
+ try {
688
+ const headers = getHeadersWithAuth(url, init?.headers || {});
689
+ const res = await fetch(url, {
690
+ ...init,
691
+ headers,
692
+ signal: ctrl.signal
693
+ });
694
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
695
+ return res;
696
+ } finally {
697
+ clearTimeout(t);
698
+ }
699
+ }
700
+ async function fetchOk(url, timeoutMs = 1500, init) {
701
+ await fetchChecked(url, timeoutMs, init);
702
+ }
703
+ async function withCdpSocket(wsUrl, fn, opts) {
704
+ const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
705
+ const ws = new WebSocket(wsUrl, {
706
+ handshakeTimeout: typeof opts?.handshakeTimeoutMs === "number" && Number.isFinite(opts.handshakeTimeoutMs) ? Math.max(1, Math.floor(opts.handshakeTimeoutMs)) : 5e3,
707
+ ...Object.keys(headers).length ? { headers } : {}
708
+ });
709
+ const { send, closeWithError } = createCdpSender(ws);
710
+ const openPromise = new Promise((resolve, reject) => {
711
+ ws.once("open", () => resolve());
712
+ ws.once("error", (err) => reject(err));
713
+ ws.once("close", () => reject(/* @__PURE__ */ new Error("CDP socket closed")));
714
+ });
715
+ try {
716
+ await openPromise;
717
+ } catch (err) {
718
+ closeWithError(err instanceof Error ? err : new Error(String(err)));
719
+ throw err;
720
+ }
721
+ try {
722
+ return await fn(send);
723
+ } catch (err) {
724
+ closeWithError(err instanceof Error ? err : new Error(String(err)));
725
+ throw err;
726
+ } finally {
727
+ try {
728
+ ws.close();
729
+ } catch {}
730
+ }
731
+ }
732
+
733
+ //#endregion
734
+ //#region src/browser/navigation-guard.ts
735
+ const NETWORK_NAVIGATION_PROTOCOLS = new Set(["http:", "https:"]);
736
+ const SAFE_NON_NETWORK_URLS = new Set(["about:blank"]);
737
+ function isAllowedNonNetworkNavigationUrl(parsed) {
738
+ return SAFE_NON_NETWORK_URLS.has(parsed.href);
739
+ }
740
+ var InvalidBrowserNavigationUrlError = class extends Error {
741
+ constructor(message) {
742
+ super(message);
743
+ this.name = "InvalidBrowserNavigationUrlError";
744
+ }
745
+ };
746
+ function withBrowserNavigationPolicy(ssrfPolicy) {
747
+ return ssrfPolicy ? { ssrfPolicy } : {};
748
+ }
749
+ async function assertBrowserNavigationAllowed(opts) {
750
+ const rawUrl = String(opts.url ?? "").trim();
751
+ if (!rawUrl) throw new InvalidBrowserNavigationUrlError("url is required");
752
+ let parsed;
753
+ try {
754
+ parsed = new URL(rawUrl);
755
+ } catch {
756
+ throw new InvalidBrowserNavigationUrlError(`Invalid URL: ${rawUrl}`);
757
+ }
758
+ if (!NETWORK_NAVIGATION_PROTOCOLS.has(parsed.protocol)) {
759
+ if (isAllowedNonNetworkNavigationUrl(parsed)) return;
760
+ throw new InvalidBrowserNavigationUrlError(`Navigation blocked: unsupported protocol "${parsed.protocol}"`);
761
+ }
762
+ await resolvePinnedHostnameWithPolicy(parsed.hostname, {
763
+ lookupFn: opts.lookupFn,
764
+ policy: opts.ssrfPolicy
765
+ });
766
+ }
767
+ /**
768
+ * Best-effort post-navigation guard for final page URLs.
769
+ * Only validates network URLs (http/https) and about:blank to avoid false
770
+ * positives on browser-internal error pages (e.g. chrome-error://).
771
+ */
772
+ async function assertBrowserNavigationResultAllowed(opts) {
773
+ const rawUrl = String(opts.url ?? "").trim();
774
+ if (!rawUrl) return;
775
+ let parsed;
776
+ try {
777
+ parsed = new URL(rawUrl);
778
+ } catch {
779
+ return;
780
+ }
781
+ if (NETWORK_NAVIGATION_PROTOCOLS.has(parsed.protocol) || isAllowedNonNetworkNavigationUrl(parsed)) await assertBrowserNavigationAllowed(opts);
782
+ }
783
+
784
+ //#endregion
785
+ //#region src/browser/cdp.ts
786
+ function normalizeCdpWsUrl(wsUrl, cdpUrl) {
787
+ const ws = new URL(wsUrl);
788
+ const cdp = new URL(cdpUrl);
789
+ if (isLoopbackHost(ws.hostname) && !isLoopbackHost(cdp.hostname)) {
790
+ ws.hostname = cdp.hostname;
791
+ const cdpPort = cdp.port || (cdp.protocol === "https:" ? "443" : "80");
792
+ if (cdpPort) ws.port = cdpPort;
793
+ ws.protocol = cdp.protocol === "https:" ? "wss:" : "ws:";
794
+ }
795
+ if (cdp.protocol === "https:" && ws.protocol === "ws:") ws.protocol = "wss:";
796
+ if (!ws.username && !ws.password && (cdp.username || cdp.password)) {
797
+ ws.username = cdp.username;
798
+ ws.password = cdp.password;
799
+ }
800
+ for (const [key, value] of cdp.searchParams.entries()) if (!ws.searchParams.has(key)) ws.searchParams.append(key, value);
801
+ return ws.toString();
802
+ }
803
+ async function captureScreenshot(opts) {
804
+ return await withCdpSocket(opts.wsUrl, async (send) => {
805
+ await send("Page.enable");
806
+ let clip;
807
+ if (opts.fullPage) {
808
+ const metrics = await send("Page.getLayoutMetrics");
809
+ const size = metrics?.cssContentSize ?? metrics?.contentSize;
810
+ const width = Number(size?.width ?? 0);
811
+ const height = Number(size?.height ?? 0);
812
+ if (width > 0 && height > 0) clip = {
813
+ x: 0,
814
+ y: 0,
815
+ width,
816
+ height,
817
+ scale: 1
818
+ };
819
+ }
820
+ const format = opts.format ?? "png";
821
+ const quality = format === "jpeg" ? Math.max(0, Math.min(100, Math.round(opts.quality ?? 85))) : void 0;
822
+ const base64 = (await send("Page.captureScreenshot", {
823
+ format,
824
+ ...quality !== void 0 ? { quality } : {},
825
+ fromSurface: true,
826
+ captureBeyondViewport: true,
827
+ ...clip ? { clip } : {}
828
+ }))?.data;
829
+ if (!base64) throw new Error("Screenshot failed: missing data");
830
+ return Buffer.from(base64, "base64");
831
+ });
832
+ }
833
+ async function createTargetViaCdp(opts) {
834
+ await assertBrowserNavigationAllowed({
835
+ url: opts.url,
836
+ ...withBrowserNavigationPolicy(opts.ssrfPolicy)
837
+ });
838
+ const version = await fetchJson(appendCdpPath(opts.cdpUrl, "/json/version"), 1500);
839
+ const wsUrlRaw = String(version?.webSocketDebuggerUrl ?? "").trim();
840
+ const wsUrl = wsUrlRaw ? normalizeCdpWsUrl(wsUrlRaw, opts.cdpUrl) : "";
841
+ if (!wsUrl) throw new Error("CDP /json/version missing webSocketDebuggerUrl");
842
+ return await withCdpSocket(wsUrl, async (send) => {
843
+ const created = await send("Target.createTarget", { url: opts.url });
844
+ const targetId = String(created?.targetId ?? "").trim();
845
+ if (!targetId) throw new Error("CDP Target.createTarget returned no targetId");
846
+ return { targetId };
847
+ });
848
+ }
849
+ function axValue(v) {
850
+ if (!v || typeof v !== "object") return "";
851
+ const value = v.value;
852
+ if (typeof value === "string") return value;
853
+ if (typeof value === "number" || typeof value === "boolean") return String(value);
854
+ return "";
855
+ }
856
+ function formatAriaSnapshot(nodes, limit) {
857
+ const byId = /* @__PURE__ */ new Map();
858
+ for (const n of nodes) if (n.nodeId) byId.set(n.nodeId, n);
859
+ const referenced = /* @__PURE__ */ new Set();
860
+ for (const n of nodes) for (const c of n.childIds ?? []) referenced.add(c);
861
+ const root = nodes.find((n) => n.nodeId && !referenced.has(n.nodeId)) ?? nodes[0];
862
+ if (!root?.nodeId) return [];
863
+ const out = [];
864
+ const stack = [{
865
+ id: root.nodeId,
866
+ depth: 0
867
+ }];
868
+ while (stack.length && out.length < limit) {
869
+ const popped = stack.pop();
870
+ if (!popped) break;
871
+ const { id, depth } = popped;
872
+ const n = byId.get(id);
873
+ if (!n) continue;
874
+ const role = axValue(n.role);
875
+ const name = axValue(n.name);
876
+ const value = axValue(n.value);
877
+ const description = axValue(n.description);
878
+ const ref = `ax${out.length + 1}`;
879
+ out.push({
880
+ ref,
881
+ role: role || "unknown",
882
+ name: name || "",
883
+ ...value ? { value } : {},
884
+ ...description ? { description } : {},
885
+ ...typeof n.backendDOMNodeId === "number" ? { backendDOMNodeId: n.backendDOMNodeId } : {},
886
+ depth
887
+ });
888
+ const children = (n.childIds ?? []).filter((c) => byId.has(c));
889
+ for (let i = children.length - 1; i >= 0; i--) {
890
+ const child = children[i];
891
+ if (child) stack.push({
892
+ id: child,
893
+ depth: depth + 1
894
+ });
895
+ }
896
+ }
897
+ return out;
898
+ }
899
+ async function snapshotAria(opts) {
900
+ const limit = Math.max(1, Math.min(2e3, Math.floor(opts.limit ?? 500)));
901
+ return await withCdpSocket(opts.wsUrl, async (send) => {
902
+ await send("Accessibility.enable").catch(() => {});
903
+ const res = await send("Accessibility.getFullAXTree");
904
+ return { nodes: formatAriaSnapshot(Array.isArray(res?.nodes) ? res.nodes : [], limit) };
905
+ });
906
+ }
907
+
908
+ //#endregion
909
+ //#region src/browser/chrome.executables.ts
910
+ const CHROMIUM_BUNDLE_IDS = new Set([
911
+ "com.google.Chrome",
912
+ "com.google.Chrome.beta",
913
+ "com.google.Chrome.canary",
914
+ "com.google.Chrome.dev",
915
+ "com.brave.Browser",
916
+ "com.brave.Browser.beta",
917
+ "com.brave.Browser.nightly",
918
+ "com.microsoft.Edge",
919
+ "com.microsoft.EdgeBeta",
920
+ "com.microsoft.EdgeDev",
921
+ "com.microsoft.EdgeCanary",
922
+ "org.chromium.Chromium",
923
+ "com.vivaldi.Vivaldi",
924
+ "com.operasoftware.Opera",
925
+ "com.operasoftware.OperaGX",
926
+ "com.yandex.desktop.yandex-browser",
927
+ "company.thebrowser.Browser"
928
+ ]);
929
+ const CHROMIUM_DESKTOP_IDS = new Set([
930
+ "google-chrome.desktop",
931
+ "google-chrome-beta.desktop",
932
+ "google-chrome-unstable.desktop",
933
+ "brave-browser.desktop",
934
+ "microsoft-edge.desktop",
935
+ "microsoft-edge-beta.desktop",
936
+ "microsoft-edge-dev.desktop",
937
+ "microsoft-edge-canary.desktop",
938
+ "chromium.desktop",
939
+ "chromium-browser.desktop",
940
+ "vivaldi.desktop",
941
+ "vivaldi-stable.desktop",
942
+ "opera.desktop",
943
+ "opera-gx.desktop",
944
+ "yandex-browser.desktop",
945
+ "org.chromium.Chromium.desktop"
946
+ ]);
947
+ const CHROMIUM_EXE_NAMES = new Set([
948
+ "chrome.exe",
949
+ "msedge.exe",
950
+ "brave.exe",
951
+ "brave-browser.exe",
952
+ "chromium.exe",
953
+ "vivaldi.exe",
954
+ "opera.exe",
955
+ "launcher.exe",
956
+ "yandex.exe",
957
+ "yandexbrowser.exe",
958
+ "google chrome",
959
+ "google chrome canary",
960
+ "brave browser",
961
+ "microsoft edge",
962
+ "chromium",
963
+ "chrome",
964
+ "brave",
965
+ "msedge",
966
+ "brave-browser",
967
+ "google-chrome",
968
+ "google-chrome-stable",
969
+ "google-chrome-beta",
970
+ "google-chrome-unstable",
971
+ "microsoft-edge",
972
+ "microsoft-edge-beta",
973
+ "microsoft-edge-dev",
974
+ "microsoft-edge-canary",
975
+ "chromium-browser",
976
+ "vivaldi",
977
+ "vivaldi-stable",
978
+ "opera",
979
+ "opera-stable",
980
+ "opera-gx",
981
+ "yandex-browser"
982
+ ]);
983
+ function exists$1(filePath) {
984
+ try {
985
+ return fs.existsSync(filePath);
986
+ } catch {
987
+ return false;
988
+ }
989
+ }
990
+ function execText(command, args, timeoutMs = 1200, maxBuffer = 1024 * 1024) {
991
+ try {
992
+ const output = execFileSync(command, args, {
993
+ timeout: timeoutMs,
994
+ encoding: "utf8",
995
+ maxBuffer
996
+ });
997
+ return String(output ?? "").trim() || null;
998
+ } catch {
999
+ return null;
1000
+ }
1001
+ }
1002
+ function inferKindFromIdentifier(identifier) {
1003
+ const id = identifier.toLowerCase();
1004
+ if (id.includes("brave")) return "brave";
1005
+ if (id.includes("edge")) return "edge";
1006
+ if (id.includes("chromium")) return "chromium";
1007
+ if (id.includes("canary")) return "canary";
1008
+ if (id.includes("opera") || id.includes("vivaldi") || id.includes("yandex") || id.includes("thebrowser")) return "chromium";
1009
+ return "chrome";
1010
+ }
1011
+ function inferKindFromExecutableName(name) {
1012
+ const lower = name.toLowerCase();
1013
+ if (lower.includes("brave")) return "brave";
1014
+ if (lower.includes("edge") || lower.includes("msedge")) return "edge";
1015
+ if (lower.includes("chromium")) return "chromium";
1016
+ if (lower.includes("canary") || lower.includes("sxs")) return "canary";
1017
+ if (lower.includes("opera") || lower.includes("vivaldi") || lower.includes("yandex")) return "chromium";
1018
+ return "chrome";
1019
+ }
1020
+ function detectDefaultChromiumExecutable(platform) {
1021
+ if (platform === "darwin") return detectDefaultChromiumExecutableMac();
1022
+ if (platform === "linux") return detectDefaultChromiumExecutableLinux();
1023
+ if (platform === "win32") return detectDefaultChromiumExecutableWindows();
1024
+ return null;
1025
+ }
1026
+ function detectDefaultChromiumExecutableMac() {
1027
+ const bundleId = detectDefaultBrowserBundleIdMac();
1028
+ if (!bundleId || !CHROMIUM_BUNDLE_IDS.has(bundleId)) return null;
1029
+ const appPathRaw = execText("/usr/bin/osascript", ["-e", `POSIX path of (path to application id "${bundleId}")`]);
1030
+ if (!appPathRaw) return null;
1031
+ const appPath = appPathRaw.trim().replace(/\/$/, "");
1032
+ const exeName = execText("/usr/bin/defaults", [
1033
+ "read",
1034
+ path.join(appPath, "Contents", "Info"),
1035
+ "CFBundleExecutable"
1036
+ ]);
1037
+ if (!exeName) return null;
1038
+ const exePath = path.join(appPath, "Contents", "MacOS", exeName.trim());
1039
+ if (!exists$1(exePath)) return null;
1040
+ return {
1041
+ kind: inferKindFromIdentifier(bundleId),
1042
+ path: exePath
1043
+ };
1044
+ }
1045
+ function detectDefaultBrowserBundleIdMac() {
1046
+ const plistPath = path.join(os.homedir(), "Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist");
1047
+ if (!exists$1(plistPath)) return null;
1048
+ const handlersRaw = execText("/usr/bin/plutil", [
1049
+ "-extract",
1050
+ "LSHandlers",
1051
+ "json",
1052
+ "-o",
1053
+ "-",
1054
+ "--",
1055
+ plistPath
1056
+ ], 2e3, 5 * 1024 * 1024);
1057
+ if (!handlersRaw) return null;
1058
+ let handlers;
1059
+ try {
1060
+ handlers = JSON.parse(handlersRaw);
1061
+ } catch {
1062
+ return null;
1063
+ }
1064
+ if (!Array.isArray(handlers)) return null;
1065
+ const resolveScheme = (scheme) => {
1066
+ let candidate = null;
1067
+ for (const entry of handlers) {
1068
+ if (!entry || typeof entry !== "object") continue;
1069
+ const record = entry;
1070
+ if (record.LSHandlerURLScheme !== scheme) continue;
1071
+ const role = typeof record.LSHandlerRoleAll === "string" && record.LSHandlerRoleAll || typeof record.LSHandlerRoleViewer === "string" && record.LSHandlerRoleViewer || null;
1072
+ if (role) candidate = role;
1073
+ }
1074
+ return candidate;
1075
+ };
1076
+ return resolveScheme("http") ?? resolveScheme("https");
1077
+ }
1078
+ function detectDefaultChromiumExecutableLinux() {
1079
+ const desktopId = execText("xdg-settings", ["get", "default-web-browser"]) || execText("xdg-mime", [
1080
+ "query",
1081
+ "default",
1082
+ "x-scheme-handler/http"
1083
+ ]);
1084
+ if (!desktopId) return null;
1085
+ const trimmed = desktopId.trim();
1086
+ if (!CHROMIUM_DESKTOP_IDS.has(trimmed)) return null;
1087
+ const desktopPath = findDesktopFilePath(trimmed);
1088
+ if (!desktopPath) return null;
1089
+ const execLine = readDesktopExecLine(desktopPath);
1090
+ if (!execLine) return null;
1091
+ const command = extractExecutableFromExecLine(execLine);
1092
+ if (!command) return null;
1093
+ const resolved = resolveLinuxExecutablePath(command);
1094
+ if (!resolved) return null;
1095
+ const exeName = path.posix.basename(resolved).toLowerCase();
1096
+ if (!CHROMIUM_EXE_NAMES.has(exeName)) return null;
1097
+ return {
1098
+ kind: inferKindFromExecutableName(exeName),
1099
+ path: resolved
1100
+ };
1101
+ }
1102
+ function detectDefaultChromiumExecutableWindows() {
1103
+ const progId = readWindowsProgId();
1104
+ const command = (progId ? readWindowsCommandForProgId(progId) : null) || readWindowsCommandForProgId("http");
1105
+ if (!command) return null;
1106
+ const exePath = extractWindowsExecutablePath(expandWindowsEnvVars(command));
1107
+ if (!exePath) return null;
1108
+ if (!exists$1(exePath)) return null;
1109
+ const exeName = path.win32.basename(exePath).toLowerCase();
1110
+ if (!CHROMIUM_EXE_NAMES.has(exeName)) return null;
1111
+ return {
1112
+ kind: inferKindFromExecutableName(exeName),
1113
+ path: exePath
1114
+ };
1115
+ }
1116
+ function findDesktopFilePath(desktopId) {
1117
+ const candidates = [
1118
+ path.join(os.homedir(), ".local", "share", "applications", desktopId),
1119
+ path.join("/usr/local/share/applications", desktopId),
1120
+ path.join("/usr/share/applications", desktopId),
1121
+ path.join("/var/lib/snapd/desktop/applications", desktopId)
1122
+ ];
1123
+ for (const candidate of candidates) if (exists$1(candidate)) return candidate;
1124
+ return null;
1125
+ }
1126
+ function readDesktopExecLine(desktopPath) {
1127
+ try {
1128
+ const lines = fs.readFileSync(desktopPath, "utf8").split(/\r?\n/);
1129
+ for (const line of lines) if (line.startsWith("Exec=")) return line.slice(5).trim();
1130
+ } catch {}
1131
+ return null;
1132
+ }
1133
+ function extractExecutableFromExecLine(execLine) {
1134
+ const tokens = splitExecLine(execLine);
1135
+ for (const token of tokens) {
1136
+ if (!token) continue;
1137
+ if (token === "env") continue;
1138
+ if (token.includes("=") && !token.startsWith("/") && !token.includes("\\")) continue;
1139
+ return token.replace(/^["']|["']$/g, "");
1140
+ }
1141
+ return null;
1142
+ }
1143
+ function splitExecLine(line) {
1144
+ const tokens = [];
1145
+ let current = "";
1146
+ let inQuotes = false;
1147
+ let quoteChar = "";
1148
+ for (let i = 0; i < line.length; i += 1) {
1149
+ const ch = line[i];
1150
+ if ((ch === "\"" || ch === "'") && (!inQuotes || ch === quoteChar)) {
1151
+ if (inQuotes) {
1152
+ inQuotes = false;
1153
+ quoteChar = "";
1154
+ } else {
1155
+ inQuotes = true;
1156
+ quoteChar = ch;
1157
+ }
1158
+ continue;
1159
+ }
1160
+ if (!inQuotes && /\s/.test(ch)) {
1161
+ if (current) {
1162
+ tokens.push(current);
1163
+ current = "";
1164
+ }
1165
+ continue;
1166
+ }
1167
+ current += ch;
1168
+ }
1169
+ if (current) tokens.push(current);
1170
+ return tokens;
1171
+ }
1172
+ function resolveLinuxExecutablePath(command) {
1173
+ const cleaned = command.trim().replace(/%[a-zA-Z]/g, "");
1174
+ if (!cleaned) return null;
1175
+ if (cleaned.startsWith("/")) return cleaned;
1176
+ const resolved = execText("which", [cleaned], 800);
1177
+ return resolved ? resolved.trim() : null;
1178
+ }
1179
+ function readWindowsProgId() {
1180
+ const output = execText("reg", [
1181
+ "query",
1182
+ "HKCU\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice",
1183
+ "/v",
1184
+ "ProgId"
1185
+ ]);
1186
+ if (!output) return null;
1187
+ return output.match(/ProgId\s+REG_\w+\s+(.+)$/im)?.[1]?.trim() || null;
1188
+ }
1189
+ function readWindowsCommandForProgId(progId) {
1190
+ const output = execText("reg", [
1191
+ "query",
1192
+ progId === "http" ? "HKCR\\http\\shell\\open\\command" : `HKCR\\${progId}\\shell\\open\\command`,
1193
+ "/ve"
1194
+ ]);
1195
+ if (!output) return null;
1196
+ return output.match(/REG_\w+\s+(.+)$/im)?.[1]?.trim() || null;
1197
+ }
1198
+ function expandWindowsEnvVars(value) {
1199
+ return value.replace(/%([^%]+)%/g, (_match, name) => {
1200
+ const key = String(name ?? "").trim();
1201
+ return key ? process.env[key] ?? `%${key}%` : _match;
1202
+ });
1203
+ }
1204
+ function extractWindowsExecutablePath(command) {
1205
+ const quoted = command.match(/"([^"]+\\.exe)"/i);
1206
+ if (quoted?.[1]) return quoted[1];
1207
+ const unquoted = command.match(/([^\\s]+\\.exe)/i);
1208
+ if (unquoted?.[1]) return unquoted[1];
1209
+ return null;
1210
+ }
1211
+ function findFirstExecutable(candidates) {
1212
+ for (const candidate of candidates) if (exists$1(candidate.path)) return candidate;
1213
+ return null;
1214
+ }
1215
+ function findChromeExecutableMac() {
1216
+ return findFirstExecutable([
1217
+ {
1218
+ kind: "chrome",
1219
+ path: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
1220
+ },
1221
+ {
1222
+ kind: "chrome",
1223
+ path: path.join(os.homedir(), "Applications/Google Chrome.app/Contents/MacOS/Google Chrome")
1224
+ },
1225
+ {
1226
+ kind: "brave",
1227
+ path: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser"
1228
+ },
1229
+ {
1230
+ kind: "brave",
1231
+ path: path.join(os.homedir(), "Applications/Brave Browser.app/Contents/MacOS/Brave Browser")
1232
+ },
1233
+ {
1234
+ kind: "edge",
1235
+ path: "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"
1236
+ },
1237
+ {
1238
+ kind: "edge",
1239
+ path: path.join(os.homedir(), "Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge")
1240
+ },
1241
+ {
1242
+ kind: "chromium",
1243
+ path: "/Applications/Chromium.app/Contents/MacOS/Chromium"
1244
+ },
1245
+ {
1246
+ kind: "chromium",
1247
+ path: path.join(os.homedir(), "Applications/Chromium.app/Contents/MacOS/Chromium")
1248
+ },
1249
+ {
1250
+ kind: "canary",
1251
+ path: "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary"
1252
+ },
1253
+ {
1254
+ kind: "canary",
1255
+ path: path.join(os.homedir(), "Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary")
1256
+ }
1257
+ ]);
1258
+ }
1259
+ function findChromeExecutableLinux() {
1260
+ return findFirstExecutable([
1261
+ {
1262
+ kind: "chrome",
1263
+ path: "/usr/bin/google-chrome"
1264
+ },
1265
+ {
1266
+ kind: "chrome",
1267
+ path: "/usr/bin/google-chrome-stable"
1268
+ },
1269
+ {
1270
+ kind: "chrome",
1271
+ path: "/usr/bin/chrome"
1272
+ },
1273
+ {
1274
+ kind: "brave",
1275
+ path: "/usr/bin/brave-browser"
1276
+ },
1277
+ {
1278
+ kind: "brave",
1279
+ path: "/usr/bin/brave-browser-stable"
1280
+ },
1281
+ {
1282
+ kind: "brave",
1283
+ path: "/usr/bin/brave"
1284
+ },
1285
+ {
1286
+ kind: "brave",
1287
+ path: "/snap/bin/brave"
1288
+ },
1289
+ {
1290
+ kind: "edge",
1291
+ path: "/usr/bin/microsoft-edge"
1292
+ },
1293
+ {
1294
+ kind: "edge",
1295
+ path: "/usr/bin/microsoft-edge-stable"
1296
+ },
1297
+ {
1298
+ kind: "chromium",
1299
+ path: "/usr/bin/chromium"
1300
+ },
1301
+ {
1302
+ kind: "chromium",
1303
+ path: "/usr/bin/chromium-browser"
1304
+ },
1305
+ {
1306
+ kind: "chromium",
1307
+ path: "/snap/bin/chromium"
1308
+ }
1309
+ ]);
1310
+ }
1311
+ function findChromeExecutableWindows() {
1312
+ const localAppData = process.env.LOCALAPPDATA ?? "";
1313
+ const programFiles = process.env.ProgramFiles ?? "C:\\Program Files";
1314
+ const programFilesX86 = process.env["ProgramFiles(x86)"] ?? "C:\\Program Files (x86)";
1315
+ const joinWin = path.win32.join;
1316
+ const candidates = [];
1317
+ if (localAppData) {
1318
+ candidates.push({
1319
+ kind: "chrome",
1320
+ path: joinWin(localAppData, "Google", "Chrome", "Application", "chrome.exe")
1321
+ });
1322
+ candidates.push({
1323
+ kind: "brave",
1324
+ path: joinWin(localAppData, "BraveSoftware", "Brave-Browser", "Application", "brave.exe")
1325
+ });
1326
+ candidates.push({
1327
+ kind: "edge",
1328
+ path: joinWin(localAppData, "Microsoft", "Edge", "Application", "msedge.exe")
1329
+ });
1330
+ candidates.push({
1331
+ kind: "chromium",
1332
+ path: joinWin(localAppData, "Chromium", "Application", "chrome.exe")
1333
+ });
1334
+ candidates.push({
1335
+ kind: "canary",
1336
+ path: joinWin(localAppData, "Google", "Chrome SxS", "Application", "chrome.exe")
1337
+ });
1338
+ }
1339
+ candidates.push({
1340
+ kind: "chrome",
1341
+ path: joinWin(programFiles, "Google", "Chrome", "Application", "chrome.exe")
1342
+ });
1343
+ candidates.push({
1344
+ kind: "chrome",
1345
+ path: joinWin(programFilesX86, "Google", "Chrome", "Application", "chrome.exe")
1346
+ });
1347
+ candidates.push({
1348
+ kind: "brave",
1349
+ path: joinWin(programFiles, "BraveSoftware", "Brave-Browser", "Application", "brave.exe")
1350
+ });
1351
+ candidates.push({
1352
+ kind: "brave",
1353
+ path: joinWin(programFilesX86, "BraveSoftware", "Brave-Browser", "Application", "brave.exe")
1354
+ });
1355
+ candidates.push({
1356
+ kind: "edge",
1357
+ path: joinWin(programFiles, "Microsoft", "Edge", "Application", "msedge.exe")
1358
+ });
1359
+ candidates.push({
1360
+ kind: "edge",
1361
+ path: joinWin(programFilesX86, "Microsoft", "Edge", "Application", "msedge.exe")
1362
+ });
1363
+ return findFirstExecutable(candidates);
1364
+ }
1365
+ function resolveBrowserExecutableForPlatform(resolved, platform) {
1366
+ if (resolved.executablePath) {
1367
+ if (!exists$1(resolved.executablePath)) throw new Error(`browser.executablePath not found: ${resolved.executablePath}`);
1368
+ return {
1369
+ kind: "custom",
1370
+ path: resolved.executablePath
1371
+ };
1372
+ }
1373
+ const detected = detectDefaultChromiumExecutable(platform);
1374
+ if (detected) return detected;
1375
+ if (platform === "darwin") return findChromeExecutableMac();
1376
+ if (platform === "linux") return findChromeExecutableLinux();
1377
+ if (platform === "win32") return findChromeExecutableWindows();
1378
+ return null;
1379
+ }
1380
+
1381
+ //#endregion
1382
+ //#region src/browser/chrome.profile-decoration.ts
1383
+ function decoratedMarkerPath(userDataDir) {
1384
+ return path.join(userDataDir, ".remoteclaw-profile-decorated");
1385
+ }
1386
+ function safeReadJson(filePath) {
1387
+ try {
1388
+ if (!fs.existsSync(filePath)) return null;
1389
+ const raw = fs.readFileSync(filePath, "utf-8");
1390
+ const parsed = JSON.parse(raw);
1391
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return null;
1392
+ return parsed;
1393
+ } catch {
1394
+ return null;
1395
+ }
1396
+ }
1397
+ function safeWriteJson(filePath, data) {
1398
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
1399
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
1400
+ }
1401
+ function setDeep(obj, keys, value) {
1402
+ let node = obj;
1403
+ for (const key of keys.slice(0, -1)) {
1404
+ const next = node[key];
1405
+ if (typeof next !== "object" || next === null || Array.isArray(next)) node[key] = {};
1406
+ node = node[key];
1407
+ }
1408
+ node[keys[keys.length - 1] ?? ""] = value;
1409
+ }
1410
+ function parseHexRgbToSignedArgbInt(hex) {
1411
+ const cleaned = hex.trim().replace(/^#/, "");
1412
+ if (!/^[0-9a-fA-F]{6}$/.test(cleaned)) return null;
1413
+ const argbUnsigned = 255 << 24 | Number.parseInt(cleaned, 16);
1414
+ return argbUnsigned > 2147483647 ? argbUnsigned - 4294967296 : argbUnsigned;
1415
+ }
1416
+ function isProfileDecorated(userDataDir, desiredName, desiredColorHex) {
1417
+ const desiredColorInt = parseHexRgbToSignedArgbInt(desiredColorHex);
1418
+ const localStatePath = path.join(userDataDir, "Local State");
1419
+ const preferencesPath = path.join(userDataDir, "Default", "Preferences");
1420
+ const profile = safeReadJson(localStatePath)?.profile;
1421
+ const infoCache = typeof profile === "object" && profile !== null && !Array.isArray(profile) ? profile.info_cache : null;
1422
+ const info = typeof infoCache === "object" && infoCache !== null && !Array.isArray(infoCache) && typeof infoCache.Default === "object" && infoCache.Default !== null && !Array.isArray(infoCache.Default) ? infoCache.Default : null;
1423
+ const prefs = safeReadJson(preferencesPath);
1424
+ const browserTheme = (() => {
1425
+ const browser = prefs?.browser;
1426
+ const theme = typeof browser === "object" && browser !== null && !Array.isArray(browser) ? browser.theme : null;
1427
+ return typeof theme === "object" && theme !== null && !Array.isArray(theme) ? theme : null;
1428
+ })();
1429
+ const autogeneratedTheme = (() => {
1430
+ const autogenerated = prefs?.autogenerated;
1431
+ const theme = typeof autogenerated === "object" && autogenerated !== null && !Array.isArray(autogenerated) ? autogenerated.theme : null;
1432
+ return typeof theme === "object" && theme !== null && !Array.isArray(theme) ? theme : null;
1433
+ })();
1434
+ const nameOk = typeof info?.name === "string" ? info.name === desiredName : true;
1435
+ if (desiredColorInt == null) return nameOk;
1436
+ const localSeedOk = typeof info?.profile_color_seed === "number" ? info.profile_color_seed === desiredColorInt : false;
1437
+ const prefOk = typeof browserTheme?.user_color2 === "number" && browserTheme.user_color2 === desiredColorInt || typeof autogeneratedTheme?.color === "number" && autogeneratedTheme.color === desiredColorInt;
1438
+ return nameOk && localSeedOk && prefOk;
1439
+ }
1440
+ /**
1441
+ * Best-effort profile decoration (name + brand-orange). Chrome preference keys
1442
+ * vary by version; we keep this conservative and idempotent.
1443
+ */
1444
+ function decorateRemoteClawProfile(userDataDir, opts) {
1445
+ const desiredName = opts?.name ?? DEFAULT_REMOTECLAW_BROWSER_PROFILE_NAME;
1446
+ const desiredColor = (opts?.color ?? DEFAULT_REMOTECLAW_BROWSER_COLOR).toUpperCase();
1447
+ const desiredColorInt = parseHexRgbToSignedArgbInt(desiredColor);
1448
+ const localStatePath = path.join(userDataDir, "Local State");
1449
+ const preferencesPath = path.join(userDataDir, "Default", "Preferences");
1450
+ const localState = safeReadJson(localStatePath) ?? {};
1451
+ setDeep(localState, [
1452
+ "profile",
1453
+ "info_cache",
1454
+ "Default",
1455
+ "name"
1456
+ ], desiredName);
1457
+ setDeep(localState, [
1458
+ "profile",
1459
+ "info_cache",
1460
+ "Default",
1461
+ "shortcut_name"
1462
+ ], desiredName);
1463
+ setDeep(localState, [
1464
+ "profile",
1465
+ "info_cache",
1466
+ "Default",
1467
+ "user_name"
1468
+ ], desiredName);
1469
+ setDeep(localState, [
1470
+ "profile",
1471
+ "info_cache",
1472
+ "Default",
1473
+ "profile_color"
1474
+ ], desiredColor);
1475
+ setDeep(localState, [
1476
+ "profile",
1477
+ "info_cache",
1478
+ "Default",
1479
+ "user_color"
1480
+ ], desiredColor);
1481
+ if (desiredColorInt != null) {
1482
+ setDeep(localState, [
1483
+ "profile",
1484
+ "info_cache",
1485
+ "Default",
1486
+ "profile_color_seed"
1487
+ ], desiredColorInt);
1488
+ setDeep(localState, [
1489
+ "profile",
1490
+ "info_cache",
1491
+ "Default",
1492
+ "profile_highlight_color"
1493
+ ], desiredColorInt);
1494
+ setDeep(localState, [
1495
+ "profile",
1496
+ "info_cache",
1497
+ "Default",
1498
+ "default_avatar_fill_color"
1499
+ ], desiredColorInt);
1500
+ setDeep(localState, [
1501
+ "profile",
1502
+ "info_cache",
1503
+ "Default",
1504
+ "default_avatar_stroke_color"
1505
+ ], desiredColorInt);
1506
+ }
1507
+ safeWriteJson(localStatePath, localState);
1508
+ const prefs = safeReadJson(preferencesPath) ?? {};
1509
+ setDeep(prefs, ["profile", "name"], desiredName);
1510
+ setDeep(prefs, ["profile", "profile_color"], desiredColor);
1511
+ setDeep(prefs, ["profile", "user_color"], desiredColor);
1512
+ if (desiredColorInt != null) {
1513
+ setDeep(prefs, [
1514
+ "autogenerated",
1515
+ "theme",
1516
+ "color"
1517
+ ], desiredColorInt);
1518
+ setDeep(prefs, [
1519
+ "browser",
1520
+ "theme",
1521
+ "user_color2"
1522
+ ], desiredColorInt);
1523
+ }
1524
+ safeWriteJson(preferencesPath, prefs);
1525
+ try {
1526
+ fs.writeFileSync(decoratedMarkerPath(userDataDir), `${Date.now()}\n`, "utf-8");
1527
+ } catch {}
1528
+ }
1529
+ function ensureProfileCleanExit(userDataDir) {
1530
+ const preferencesPath = path.join(userDataDir, "Default", "Preferences");
1531
+ const prefs = safeReadJson(preferencesPath) ?? {};
1532
+ setDeep(prefs, ["exit_type"], "Normal");
1533
+ setDeep(prefs, ["exited_cleanly"], true);
1534
+ safeWriteJson(preferencesPath, prefs);
1535
+ }
1536
+
1537
+ //#endregion
1538
+ //#region src/browser/chrome.ts
1539
+ const log = createSubsystemLogger("browser").child("chrome");
1540
+ function exists(filePath) {
1541
+ try {
1542
+ return fs.existsSync(filePath);
1543
+ } catch {
1544
+ return false;
1545
+ }
1546
+ }
1547
+ function resolveBrowserExecutable(resolved) {
1548
+ return resolveBrowserExecutableForPlatform(resolved, process.platform);
1549
+ }
1550
+ function resolveRemoteClawUserDataDir(profileName = DEFAULT_REMOTECLAW_BROWSER_PROFILE_NAME) {
1551
+ return path.join(CONFIG_DIR, "browser", profileName, "user-data");
1552
+ }
1553
+ function cdpUrlForPort(cdpPort) {
1554
+ return `http://127.0.0.1:${cdpPort}`;
1555
+ }
1556
+ async function isChromeReachable(cdpUrl, timeoutMs = 500) {
1557
+ const version = await fetchChromeVersion(cdpUrl, timeoutMs);
1558
+ return Boolean(version);
1559
+ }
1560
+ async function fetchChromeVersion(cdpUrl, timeoutMs = 500) {
1561
+ const ctrl = new AbortController();
1562
+ const t = setTimeout(ctrl.abort.bind(ctrl), timeoutMs);
1563
+ try {
1564
+ const versionUrl = appendCdpPath(cdpUrl, "/json/version");
1565
+ const res = await fetch(versionUrl, {
1566
+ signal: ctrl.signal,
1567
+ headers: getHeadersWithAuth(versionUrl)
1568
+ });
1569
+ if (!res.ok) return null;
1570
+ const data = await res.json();
1571
+ if (!data || typeof data !== "object") return null;
1572
+ return data;
1573
+ } catch {
1574
+ return null;
1575
+ } finally {
1576
+ clearTimeout(t);
1577
+ }
1578
+ }
1579
+ async function getChromeWebSocketUrl(cdpUrl, timeoutMs = 500) {
1580
+ const version = await fetchChromeVersion(cdpUrl, timeoutMs);
1581
+ const wsUrl = String(version?.webSocketDebuggerUrl ?? "").trim();
1582
+ if (!wsUrl) return null;
1583
+ return normalizeCdpWsUrl(wsUrl, cdpUrl);
1584
+ }
1585
+ async function canOpenWebSocket(wsUrl, timeoutMs = 800) {
1586
+ return await new Promise((resolve) => {
1587
+ const headers = getHeadersWithAuth(wsUrl);
1588
+ const ws = new WebSocket(wsUrl, {
1589
+ handshakeTimeout: timeoutMs,
1590
+ ...Object.keys(headers).length ? { headers } : {}
1591
+ });
1592
+ const timer = setTimeout(() => {
1593
+ try {
1594
+ ws.terminate();
1595
+ } catch {}
1596
+ resolve(false);
1597
+ }, Math.max(50, timeoutMs + 25));
1598
+ ws.once("open", () => {
1599
+ clearTimeout(timer);
1600
+ try {
1601
+ ws.close();
1602
+ } catch {}
1603
+ resolve(true);
1604
+ });
1605
+ ws.once("error", () => {
1606
+ clearTimeout(timer);
1607
+ resolve(false);
1608
+ });
1609
+ });
1610
+ }
1611
+ async function isChromeCdpReady(cdpUrl, timeoutMs = 500, handshakeTimeoutMs = 800) {
1612
+ const wsUrl = await getChromeWebSocketUrl(cdpUrl, timeoutMs);
1613
+ if (!wsUrl) return false;
1614
+ return await canOpenWebSocket(wsUrl, handshakeTimeoutMs);
1615
+ }
1616
+ async function launchRemoteClawChrome(resolved, profile) {
1617
+ if (!profile.cdpIsLoopback) throw new Error(`Profile "${profile.name}" is remote; cannot launch local Chrome.`);
1618
+ await ensurePortAvailable(profile.cdpPort);
1619
+ const exe = resolveBrowserExecutable(resolved);
1620
+ if (!exe) throw new Error("No supported browser found (Chrome/Brave/Edge/Chromium on macOS, Linux, or Windows).");
1621
+ const userDataDir = resolveRemoteClawUserDataDir(profile.name);
1622
+ fs.mkdirSync(userDataDir, { recursive: true });
1623
+ const needsDecorate = !isProfileDecorated(userDataDir, profile.name, (profile.color ?? DEFAULT_REMOTECLAW_BROWSER_COLOR).toUpperCase());
1624
+ const spawnOnce = () => {
1625
+ const args = [
1626
+ `--remote-debugging-port=${profile.cdpPort}`,
1627
+ `--user-data-dir=${userDataDir}`,
1628
+ "--no-first-run",
1629
+ "--no-default-browser-check",
1630
+ "--disable-sync",
1631
+ "--disable-background-networking",
1632
+ "--disable-component-update",
1633
+ "--disable-features=Translate,MediaRouter",
1634
+ "--disable-session-crashed-bubble",
1635
+ "--hide-crash-restore-bubble",
1636
+ "--password-store=basic"
1637
+ ];
1638
+ if (resolved.headless) {
1639
+ args.push("--headless=new");
1640
+ args.push("--disable-gpu");
1641
+ }
1642
+ if (resolved.noSandbox) {
1643
+ args.push("--no-sandbox");
1644
+ args.push("--disable-setuid-sandbox");
1645
+ }
1646
+ if (process.platform === "linux") args.push("--disable-dev-shm-usage");
1647
+ args.push("--disable-blink-features=AutomationControlled");
1648
+ if (resolved.extraArgs.length > 0) args.push(...resolved.extraArgs);
1649
+ args.push("about:blank");
1650
+ return spawn(exe.path, args, {
1651
+ stdio: "pipe",
1652
+ env: {
1653
+ ...process.env,
1654
+ HOME: os.homedir()
1655
+ }
1656
+ });
1657
+ };
1658
+ const startedAt = Date.now();
1659
+ const localStatePath = path.join(userDataDir, "Local State");
1660
+ const preferencesPath = path.join(userDataDir, "Default", "Preferences");
1661
+ if (!exists(localStatePath) || !exists(preferencesPath)) {
1662
+ const bootstrap = spawnOnce();
1663
+ const deadline = Date.now() + 1e4;
1664
+ while (Date.now() < deadline) {
1665
+ if (exists(localStatePath) && exists(preferencesPath)) break;
1666
+ await new Promise((r) => setTimeout(r, 100));
1667
+ }
1668
+ try {
1669
+ bootstrap.kill("SIGTERM");
1670
+ } catch {}
1671
+ const exitDeadline = Date.now() + 5e3;
1672
+ while (Date.now() < exitDeadline) {
1673
+ if (bootstrap.exitCode != null) break;
1674
+ await new Promise((r) => setTimeout(r, 50));
1675
+ }
1676
+ }
1677
+ if (needsDecorate) try {
1678
+ decorateRemoteClawProfile(userDataDir, {
1679
+ name: profile.name,
1680
+ color: profile.color
1681
+ });
1682
+ log.info(`🦀 remoteclaw browser profile decorated (${profile.color})`);
1683
+ } catch (err) {
1684
+ log.warn(`remoteclaw browser profile decoration failed: ${String(err)}`);
1685
+ }
1686
+ try {
1687
+ ensureProfileCleanExit(userDataDir);
1688
+ } catch (err) {
1689
+ log.warn(`remoteclaw browser clean-exit prefs failed: ${String(err)}`);
1690
+ }
1691
+ const proc = spawnOnce();
1692
+ const readyDeadline = Date.now() + 15e3;
1693
+ while (Date.now() < readyDeadline) {
1694
+ if (await isChromeReachable(profile.cdpUrl, 500)) break;
1695
+ await new Promise((r) => setTimeout(r, 200));
1696
+ }
1697
+ if (!await isChromeReachable(profile.cdpUrl, 500)) {
1698
+ try {
1699
+ proc.kill("SIGKILL");
1700
+ } catch {}
1701
+ throw new Error(`Failed to start Chrome CDP on port ${profile.cdpPort} for profile "${profile.name}".`);
1702
+ }
1703
+ const pid = proc.pid ?? -1;
1704
+ log.info(`🦀 remoteclaw browser started (${exe.kind}) profile "${profile.name}" on 127.0.0.1:${profile.cdpPort} (pid ${pid})`);
1705
+ return {
1706
+ pid,
1707
+ exe,
1708
+ userDataDir,
1709
+ cdpPort: profile.cdpPort,
1710
+ startedAt,
1711
+ proc
1712
+ };
1713
+ }
1714
+ async function stopRemoteClawChrome(running, timeoutMs = 2500) {
1715
+ const proc = running.proc;
1716
+ if (proc.killed) return;
1717
+ try {
1718
+ proc.kill("SIGTERM");
1719
+ } catch {}
1720
+ const start = Date.now();
1721
+ while (Date.now() - start < timeoutMs) {
1722
+ if (!proc.exitCode && proc.killed) break;
1723
+ if (!await isChromeReachable(cdpUrlForPort(running.cdpPort), 200)) return;
1724
+ await new Promise((r) => setTimeout(r, 100));
1725
+ }
1726
+ try {
1727
+ proc.kill("SIGKILL");
1728
+ } catch {}
1729
+ }
1730
+
1731
+ //#endregion
1732
+ 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 };