remoteclaw 0.1.0-next.cd6ddde → 0.1.0-next.cf9ccbe

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 (1054) hide show
  1. package/dist/accounts-79XhjwAj.js +32 -0
  2. package/dist/accounts-B1M3fOxL.js +272 -0
  3. package/dist/accounts-BwbvnKsW.js +205 -0
  4. package/dist/accounts-CIVjmTg9.js +270 -0
  5. package/dist/accounts-D1awQXKu.js +36 -0
  6. package/dist/accounts-DHkGVGUR.js +36 -0
  7. package/dist/accounts-P7cmIXUM.js +206 -0
  8. package/dist/accounts-XFgBY644.js +47 -0
  9. package/dist/accounts-_ZuNC5bz.js +47 -0
  10. package/dist/ack-reactions-BGJ9Vigf.js +621 -0
  11. package/dist/ack-reactions-Diu9O24z.js +621 -0
  12. package/dist/acp-cli-BwZ-va2P.js +1316 -0
  13. package/dist/acp-cli-eVKByz-j.js +1311 -0
  14. package/dist/active-listener--jrUO-8L.js +37 -0
  15. package/dist/active-listener-C7SyMcNY.js +37 -0
  16. package/dist/agent-BAxK2KQW.js +688 -0
  17. package/dist/agent-Dd5Yfhmq.js +687 -0
  18. package/dist/agent-helpers-5F0tdxud.js +400 -0
  19. package/dist/agent-scope-BA1HP4K6.js +114 -0
  20. package/dist/agent-scope-CAQLm3LP.js +116 -0
  21. package/dist/agents-2VlLHxv-.js +754 -0
  22. package/dist/agents.config-CmyzLYqW.js +116 -0
  23. package/dist/agents.config-DerBqRzk.js +116 -0
  24. package/dist/audio-ClIuKwkl.js +43 -0
  25. package/dist/audio-DqlIYYTb.js +43 -0
  26. package/dist/audit-Cn0cNCE4.js +3114 -0
  27. package/dist/audit-DXY4NHBC.js +3114 -0
  28. package/dist/auth-B-QK8JhI.js +315 -0
  29. package/dist/auth-C1zx1O24.js +314 -0
  30. package/dist/auth-DDmNYVMW.js +448 -0
  31. package/dist/auth-DH1wEw0w.js +448 -0
  32. package/dist/banner-CBWZhANO.js +294 -0
  33. package/dist/binaries-CYwLdubd.js +13 -0
  34. package/dist/bindings-DFAFatwT.js +69 -0
  35. package/dist/bindings-GUKIzFCp.js +69 -0
  36. package/dist/bonjour-discovery-AQMJqY4V.js +378 -0
  37. package/dist/bonjour-discovery-BLcPWHFJ.js +378 -0
  38. package/dist/boot/handler.js +28 -28
  39. package/dist/browser-cli-8Dv5ogFT.js +1690 -0
  40. package/dist/browser-cli-wNLo8SOy.js +1694 -0
  41. package/dist/build-info.json +3 -3
  42. package/dist/call-BTHzKFbN.js +518 -0
  43. package/dist/call-D_NchaCs.js +517 -0
  44. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  45. package/dist/catalog-DgpN5jxU.js +186 -0
  46. package/dist/catalog-k056Nh93.js +186 -0
  47. package/dist/channel-account-context-BHIy71Yh.js +133 -0
  48. package/dist/channel-account-context-DXU_-EkJ.js +133 -0
  49. package/dist/channel-activity-BatlvP_U.js +292 -0
  50. package/dist/channel-activity-BhT7NQ_v.js +94 -0
  51. package/dist/channel-activity-CvjEwpJz.js +94 -0
  52. package/dist/channel-options-BCccA2WC.js +32 -0
  53. package/dist/channel-options-VPR_pNyS.js +33 -0
  54. package/dist/channel-selection-AH6_y6RS.js +51 -0
  55. package/dist/channel-selection-ovohyJQZ.js +51 -0
  56. package/dist/channel-web-APDaQ_wp.js +2134 -0
  57. package/dist/channel-web-BW_YuNlT.js +2132 -0
  58. package/dist/channels-cli-BBkHQtBI.js +1440 -0
  59. package/dist/channels-cli-CKcOwL-Q.js +1436 -0
  60. package/dist/channels-status-issues-BbYNzwLp.js +18 -0
  61. package/dist/channels-status-issues-DRybAijg.js +18 -0
  62. package/dist/chat-envelope-AJFUAuBM.js +248 -0
  63. package/dist/chat-envelope-BrfcPlDM.js +248 -0
  64. package/dist/chrome-Bv2UtAMQ.js +1732 -0
  65. package/dist/chrome-C6Vc_7su.js +1733 -0
  66. package/dist/chunk-BzVoFUZL.js +341 -0
  67. package/dist/clack-prompter-C6mBTOzE.js +122 -0
  68. package/dist/clack-prompter-DKcYqv3o.js +121 -0
  69. package/dist/cleanup-utils-Cb-leJcy.js +94 -0
  70. package/dist/cli/daemon-cli.js +1 -1
  71. package/dist/cli-Cs1n6-eD.js +135 -0
  72. package/dist/cli-Di3p1tLN.js +131 -0
  73. package/dist/client-B6h7bgbF.js +2311 -0
  74. package/dist/client-CMtdm9Ii.js +2311 -0
  75. package/dist/clipboard-A06eV_5C.js +31 -0
  76. package/dist/clipboard-DQBl3coj.js +31 -0
  77. package/dist/command-format-BiiNHkWG.js +18 -0
  78. package/dist/command-format-Dntg_tnC.js +32 -0
  79. package/dist/command-logger/handler.js +1 -1
  80. package/dist/command-registry-BV2MH_iw.js +215 -0
  81. package/dist/commands-D93TXYhv.js +41 -0
  82. package/dist/commands-UD7V7QC9.js +41 -0
  83. package/dist/commands-registry-CCbTtSSK.js +891 -0
  84. package/dist/commands-registry-De8JhZLG.js +890 -0
  85. package/dist/common-D4fL3S2m.js +156 -0
  86. package/dist/common-DXNisGxw.js +156 -0
  87. package/dist/completion-cli-319xyosV.js +452 -0
  88. package/dist/completion-cli-B6Zimnek.js +452 -0
  89. package/dist/config-BTH7fB_v.js +3345 -0
  90. package/dist/config-DwuBnd6D.js +3347 -0
  91. package/dist/config-cli-c_Itt86J.js +247 -0
  92. package/dist/config-cli-rcMB3A3B.js +243 -0
  93. package/dist/config-guard-BcT7soTj.js +92 -0
  94. package/dist/config-guard-Bqak3bDc.js +75 -0
  95. package/dist/config-validation-CHEjSJ5K.js +18 -0
  96. package/dist/config-validation-CvgqLhyG.js +18 -0
  97. package/dist/configure-Cb3bbYnh.js +891 -0
  98. package/dist/configure-R2gWNv5y.js +889 -0
  99. package/dist/control-auth-DrGYtMJM.js +397 -0
  100. package/dist/control-auth-KY4Qdr2I.js +397 -0
  101. package/dist/control-ui-assets-DO1L6M0S.js +186 -0
  102. package/dist/control-ui-assets-S_TLo6Fs.js +186 -0
  103. package/dist/conversation-label-CMOfgCVl.js +36 -0
  104. package/dist/cron-cli-C7h_hLHu.js +495 -0
  105. package/dist/cron-cli-DTNg0Uvl.js +499 -0
  106. package/dist/daemon-cli-BlJS9zWM.js +737 -0
  107. package/dist/daemon-cli-Cfc1yszp.js +735 -0
  108. package/dist/daemon-cli.js +124 -1071
  109. package/dist/daemon-install-BbBLuLWg.js +60 -0
  110. package/dist/daemon-install-WEBvqVOj.js +56 -0
  111. package/dist/daemon-install-helpers-BVtPC2TK.js +504 -0
  112. package/dist/daemon-install-helpers-DVr51zvE.js +504 -0
  113. package/dist/deliver-EB272zWh.js +481 -0
  114. package/dist/deliver-iGD_woru.js +481 -0
  115. package/dist/delivery-queue-BDvalA10.js +244 -0
  116. package/dist/delivery-queue-BimvYz5E.js +244 -0
  117. package/dist/devices-cli-BXCOsNFc.js +323 -0
  118. package/dist/devices-cli-CHGdYfrz.js +319 -0
  119. package/dist/diagnostics-BzzhTQzK.js +35 -0
  120. package/dist/diagnostics-DILtxtcE.js +35 -0
  121. package/dist/directory-cli-COS40yI9.js +221 -0
  122. package/dist/directory-cli-Cb5j1JTC.js +225 -0
  123. package/dist/dispatcher-BUqxh_mA.js +174 -0
  124. package/dist/dispatcher-By-KZRWZ.js +173 -0
  125. package/dist/dm-policy-shared-BCp9_z3w.js +22 -0
  126. package/dist/dm-policy-shared-DgeKqjOu.js +22 -0
  127. package/dist/dns-cli-B8yyXB2N.js +203 -0
  128. package/dist/dns-cli-DAkTk-gM.js +199 -0
  129. package/dist/dock-B0bIIDS3.js +906 -0
  130. package/dist/dock-C3PzQ6CS.js +907 -0
  131. package/dist/doctor-completion-B_Zp4fZk.js +92 -0
  132. package/dist/doctor-completion-CZ1P5laQ.js +92 -0
  133. package/dist/doctor-config-flow-BDDsR2J1.js +978 -0
  134. package/dist/doctor-config-flow-CwFFRUic.js +979 -0
  135. package/dist/enable-C3I9dWel.js +59 -0
  136. package/dist/enable-DnwKeWnR.js +59 -0
  137. package/dist/entry.js +62 -6
  138. package/dist/env-DyyqmxSM.js +60 -0
  139. package/dist/errors-0dfGxeYQ.js +35 -0
  140. package/dist/errors-C1kDByVU.js +35 -0
  141. package/dist/exec-CAk1dxq_.js +164 -0
  142. package/dist/exec-epNpA1aU.js +164 -0
  143. package/dist/extensionAPI.js +263 -1088
  144. package/dist/fetch-BMQq41sB.js +281 -0
  145. package/dist/fetch-Cky99wYB.js +281 -0
  146. package/dist/fetch-D3tw4B4n.js +67 -0
  147. package/dist/fetch-Dgm9ZHFm.js +67 -0
  148. package/dist/file-lock-DWH0TfVu.js +107 -0
  149. package/dist/file-lock-DXW9h9ek.js +107 -0
  150. package/dist/fs-safe-BjSd07M4.js +115 -0
  151. package/dist/fs-safe-aWIhCWlb.js +125 -0
  152. package/dist/gateway-cli-BLeY_1DX.js +24154 -0
  153. package/dist/gateway-cli-Cu4vwhmi.js +24150 -0
  154. package/dist/gateway-rpc-B92CH0D3.js +28 -0
  155. package/dist/gateway-rpc-DZNlWapO.js +28 -0
  156. package/dist/gmail-setup-utils-CKyh29_R.js +422 -0
  157. package/dist/gmail-setup-utils-DquflkMR.js +423 -0
  158. package/dist/health-BYl7T-4m.js +1417 -0
  159. package/dist/health-DdviISKg.js +1414 -0
  160. package/dist/health-format-BE5TK5bs.js +28 -0
  161. package/dist/heartbeat-visibility-BO3iRpB6.js +125 -0
  162. package/dist/heartbeat-visibility-Cwp4TrTv.js +125 -0
  163. package/dist/help-format-D3JhWp1E.js +17 -0
  164. package/dist/hook-runner-global-C1thol1d.js +527 -0
  165. package/dist/hooks-cli-BKS9uZ0H.js +1221 -0
  166. package/dist/hooks-cli-FLWcCr9q.js +1217 -0
  167. package/dist/image-ops-CX41n0v5.js +354 -0
  168. package/dist/image-ops-DSL3eFfQ.js +354 -0
  169. package/dist/import-BSFgt760.js +604 -0
  170. package/dist/import-Da1CHJJg.js +606 -0
  171. package/dist/inbound-context-a5bzQvRt.js +68 -0
  172. package/dist/index.js +127 -101
  173. package/dist/inspect-BEpFbi0c.js +286 -0
  174. package/dist/inspect-BeNNpWna.js +286 -0
  175. package/dist/installs-CH7Qq_m_.js +319 -0
  176. package/dist/installs-CcM8H2YA.js +319 -0
  177. package/dist/ipv4-DNo9AFDu.js +46 -0
  178. package/dist/ipv4-VfoVR5uR.js +46 -0
  179. package/dist/ir-BPwP8hIc.js +972 -0
  180. package/dist/lifecycle-core-5Zxqwa6V.js +476 -0
  181. package/dist/lifecycle-core-C1bGeLby.js +474 -0
  182. package/dist/links-CtGBIrG8.js +15 -0
  183. package/dist/loader-BoP3JA-r.js +22411 -0
  184. package/dist/loader-DXbpue-L.js +22414 -0
  185. package/dist/logger-ASsO5Nz-.js +49 -0
  186. package/dist/logging-Cd9y2AdQ.js +20 -0
  187. package/dist/login-B2UXzgaB.js +61 -0
  188. package/dist/login-BEFL3xY9.js +62 -0
  189. package/dist/login-qr-C7wAz2fe.js +329 -0
  190. package/dist/login-qr-DWpUP1Ud.js +325 -0
  191. package/dist/logs-cli-CAcd-pXA.js +240 -0
  192. package/dist/logs-cli-D7Bzarht.js +236 -0
  193. package/dist/markdown-tables-BBNUZp4n.js +29 -0
  194. package/dist/markdown-tables-NgPcfXoF.js +29 -0
  195. package/dist/media-4-qOIjO-.js +971 -0
  196. package/dist/media-DTwJhAbE.js +9481 -0
  197. package/dist/message-action-names-BsNTjuBE.js +2520 -0
  198. package/dist/message-action-names-ocKcq8_3.js +2520 -0
  199. package/dist/message-channel-CtcVHawF.js +91 -0
  200. package/dist/mime-CAqaK3kp.js +146 -0
  201. package/dist/mime-ViuhRuMM.js +146 -0
  202. package/dist/net-DSkFMHJ8.js +225 -0
  203. package/dist/net-DTqfFYzt.js +225 -0
  204. package/dist/node-cli-BeXU67eQ.js +1458 -0
  205. package/dist/node-cli-i2aCtnmM.js +1462 -0
  206. package/dist/node-service-RyMlWp8N.js +67 -0
  207. package/dist/node-service-TL9b6Qfz.js +67 -0
  208. package/dist/nodes-cli-CtqnXBMD.js +1346 -0
  209. package/dist/nodes-cli-DgQU3LrG.js +1350 -0
  210. package/dist/nodes-screen-B7HJugJ0.js +250 -0
  211. package/dist/nodes-screen-nCRd71Mk.js +250 -0
  212. package/dist/note-B6142LyJ.js +92 -0
  213. package/dist/note-D-EI0czq.js +92 -0
  214. package/dist/npm-registry-spec-PPyRXSpx.js +786 -0
  215. package/dist/npm-registry-spec-uUmDWe6v.js +786 -0
  216. package/dist/npm-resolution-BC1LqCm2.js +86 -0
  217. package/dist/npm-resolution-DhlhUmRF.js +86 -0
  218. package/dist/onboard-CHowLVEG.js +647 -0
  219. package/dist/onboard-D_eCnKjt.js +649 -0
  220. package/dist/onboard-auth-cNtb3FTP.js +211 -0
  221. package/dist/onboard-auth-gwz-0mZ6.js +207 -0
  222. package/dist/onboard-channels-CFsUIDWq.js +2618 -0
  223. package/dist/onboard-channels-ZCML5CWb.js +2619 -0
  224. package/dist/onboard-helpers-8afRV_Tm.js +364 -0
  225. package/dist/onboard-helpers-DTRrJLj-.js +363 -0
  226. package/dist/onboard-remote-CFkvVAYg.js +127 -0
  227. package/dist/onboard-remote-JfBnmK70.js +127 -0
  228. package/dist/onboarding-DIxNghyi.js +586 -0
  229. package/dist/onboarding-Dhh0bjrb.js +588 -0
  230. package/dist/onboarding.finalize-5uipJuOl.js +403 -0
  231. package/dist/onboarding.finalize-De4etQul.js +405 -0
  232. package/dist/onboarding.gateway-config-DolBTXWT.js +196 -0
  233. package/dist/onboarding.gateway-config-rJkIamlG.js +202 -0
  234. package/dist/outbound-CPMaDtgC.js +220 -0
  235. package/dist/outbound-CYSuCMiW.js +221 -0
  236. package/dist/outbound-attachment-Ci02LXoq.js +18 -0
  237. package/dist/outbound-attachment-CqZ7Qc_o.js +18 -0
  238. package/dist/outbound-attachment-CuqWdsdV.js +18 -0
  239. package/dist/pairing-cli-B9JKvvST.js +126 -0
  240. package/dist/pairing-cli-C4HrfIHe.js +130 -0
  241. package/dist/pairing-labels-CBmGQ31P.js +9 -0
  242. package/dist/pairing-labels-D0xwC7Xb.js +9 -0
  243. package/dist/pairing-store-BoF0g-iN.js +459 -0
  244. package/dist/pairing-store-CseXj-5p.js +460 -0
  245. package/dist/path-env-CPZbb7me.js +89 -0
  246. package/dist/path-safety-BFE0XmGC.js +14 -0
  247. package/dist/path-safety-BJ8ge6Ho.js +14 -0
  248. package/dist/paths-DHuXVC00.js +229 -0
  249. package/dist/plugin-auto-enable-B_9J1XED.js +302 -0
  250. package/dist/plugin-auto-enable-DghjlFCL.js +301 -0
  251. package/dist/plugin-registry-68h2T8vi.js +33 -0
  252. package/dist/plugin-registry-BitdVPb4.js +33 -0
  253. package/dist/plugin-sdk/agents/subagent-registry.store.d.ts +0 -1
  254. package/dist/plugin-sdk/auto-reply/reply/agent-runner-utils.d.ts +0 -11
  255. package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +1 -4
  256. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/shared.d.ts +1 -1
  257. package/dist/plugin-sdk/auto-reply/reply/commands-types.d.ts +1 -10
  258. package/dist/plugin-sdk/auto-reply/reply/directive-handling.levels.d.ts +1 -4
  259. package/dist/plugin-sdk/auto-reply/reply/directive-handling.params.d.ts +1 -8
  260. package/dist/plugin-sdk/auto-reply/reply/directive-handling.parse.d.ts +1 -23
  261. package/dist/plugin-sdk/auto-reply/reply/directive-handling.persist.d.ts +0 -2
  262. package/dist/plugin-sdk/auto-reply/reply/directive-handling.shared.d.ts +0 -22
  263. package/dist/plugin-sdk/auto-reply/reply/directives.d.ts +2 -29
  264. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives-apply.d.ts +0 -8
  265. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives-utils.d.ts +0 -1
  266. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -15
  267. package/dist/plugin-sdk/auto-reply/reply/get-reply-inline-actions.d.ts +1 -8
  268. package/dist/plugin-sdk/auto-reply/reply/get-reply-run.d.ts +1 -11
  269. package/dist/plugin-sdk/auto-reply/reply/queue/types.d.ts +1 -13
  270. package/dist/plugin-sdk/auto-reply/reply.d.ts +1 -1
  271. package/dist/plugin-sdk/auto-reply/status.d.ts +1 -4
  272. package/dist/plugin-sdk/auto-reply/templating.d.ts +0 -4
  273. package/dist/plugin-sdk/auto-reply/thinking.d.ts +0 -4
  274. package/dist/plugin-sdk/channels/dock.d.ts +1 -2
  275. package/dist/plugin-sdk/channels/plugins/types.adapters.d.ts +0 -6
  276. package/dist/plugin-sdk/channels/plugins/types.d.ts +1 -1
  277. package/dist/plugin-sdk/channels/plugins/types.plugin.d.ts +1 -2
  278. package/dist/plugin-sdk/commands/onboard-helpers.d.ts +0 -1
  279. package/dist/plugin-sdk/commands/onboard-types.d.ts +0 -2
  280. package/dist/plugin-sdk/config/legacy.migrations.d.ts +2 -1
  281. package/dist/plugin-sdk/config/legacy.shared.d.ts +0 -9
  282. package/dist/plugin-sdk/config/sessions/types.d.ts +0 -7
  283. package/dist/plugin-sdk/config/types.agent-defaults.d.ts +0 -8
  284. package/dist/plugin-sdk/config/types.base.d.ts +0 -1
  285. package/dist/plugin-sdk/config/types.messages.d.ts +0 -4
  286. package/dist/plugin-sdk/config/types.tools.d.ts +0 -73
  287. package/dist/plugin-sdk/config/types.tts.d.ts +2 -1
  288. package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +0 -4
  289. package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +7 -197
  290. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +2 -10
  291. package/dist/plugin-sdk/config/zod-schema.core.d.ts +6 -234
  292. package/dist/plugin-sdk/config/zod-schema.d.ts +98 -301
  293. package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +148 -160
  294. package/dist/plugin-sdk/config/zod-schema.providers-whatsapp.d.ts +12 -12
  295. package/dist/plugin-sdk/config/zod-schema.providers.d.ts +88 -96
  296. package/dist/plugin-sdk/config/zod-schema.session.d.ts +4 -10
  297. package/dist/plugin-sdk/gateway/protocol/index.d.ts +11 -16
  298. package/dist/plugin-sdk/gateway/protocol/schema/sessions.d.ts +0 -5
  299. package/dist/plugin-sdk/gateway/session-utils.types.d.ts +0 -1
  300. package/dist/plugin-sdk/index.js +295 -1236
  301. package/dist/plugin-sdk/line/config-schema.d.ts +4 -4
  302. package/dist/plugin-sdk/logging/levels.d.ts +1 -1
  303. package/dist/plugin-sdk/middleware/cli-runtime-base.d.ts +6 -0
  304. package/dist/plugin-sdk/middleware/runtimes/claude.d.ts +6 -0
  305. package/dist/plugin-sdk/middleware/runtimes/codex.d.ts +2 -2
  306. package/dist/plugin-sdk/middleware/runtimes/gemini.d.ts +8 -1
  307. package/dist/plugin-sdk/plugin-sdk/index.d.ts +3 -1
  308. package/dist/plugin-sdk/plugins/manifest-registry.d.ts +2 -0
  309. package/dist/plugin-sdk/plugins/manifest.d.ts +4 -4
  310. package/dist/plugin-sdk/plugins/registry.d.ts +18 -0
  311. package/dist/plugin-sdk/plugins/types.d.ts +4 -0
  312. package/dist/plugin-sdk/slack/manifest.d.ts +17 -0
  313. package/dist/plugin-sdk/stt/preflight.d.ts +2 -4
  314. package/dist/plugin-sdk/stt/providers/index.d.ts +1 -1
  315. package/dist/plugin-sdk/stt/providers/shared.d.ts +20 -1
  316. package/dist/plugin-sdk/tts/providers/edge.d.ts +2 -0
  317. package/dist/plugin-sdk/tts/providers/elevenlabs.d.ts +2 -0
  318. package/dist/plugin-sdk/tts/providers/index.d.ts +4 -0
  319. package/dist/plugin-sdk/tts/providers/openai.d.ts +2 -0
  320. package/dist/plugin-sdk/tts/tts.d.ts +13 -5
  321. package/dist/plugin-sdk/tts/types.d.ts +21 -0
  322. package/dist/plugins-BviLFPLV.js +255 -0
  323. package/dist/plugins-CaudBUbl.js +254 -0
  324. package/dist/plugins-cli-CsLhphNr.js +803 -0
  325. package/dist/plugins-cli-CujSP9NS.js +807 -0
  326. package/dist/ports-BtuzUQHl.js +370 -0
  327. package/dist/ports-CMcHia07.js +96 -0
  328. package/dist/ports-gRBeuUtp.js +316 -0
  329. package/dist/preflight-Bq8rimP-.js +667 -0
  330. package/dist/preflight-DyYbEp9X.js +667 -0
  331. package/dist/program-G8cGMPuz.js +250 -0
  332. package/dist/program-context-B9BwrbSx.js +474 -0
  333. package/dist/progress-BcwxtM9Q.js +124 -0
  334. package/dist/prompt-DtWGd43j.js +21 -0
  335. package/dist/prompt-select-styled-CpOsmtZi.js +1672 -0
  336. package/dist/prompt-select-styled-D-qBqrEJ.js +1669 -0
  337. package/dist/prompt-style-BpUMhEHC.js +9 -0
  338. package/dist/provider-auth-B7QgxlKt.js +187 -0
  339. package/dist/provider-auth-j-EQvvIk.js +187 -0
  340. package/dist/provider-dispatcher-Bx6CaIoV.js +660 -0
  341. package/dist/provider-dispatcher-DhkvjhO5.js +659 -0
  342. package/dist/push-apns--nEiZmEN.js +711 -0
  343. package/dist/push-apns-BtS6B6lb.js +713 -0
  344. package/dist/pw-ai-BpCsXF-x.js +1908 -0
  345. package/dist/pw-ai-ud_Kbn5S.js +1911 -0
  346. package/dist/qr-cli-BCeVLGfz.js +353 -0
  347. package/dist/qr-cli-Crsqtw01.js +349 -0
  348. package/dist/redact-Ci96Gj0O.js +191 -0
  349. package/dist/redact-snapshot-B9nof-Pb.js +1952 -0
  350. package/dist/redact-snapshot-BKiS91Mj.js +1952 -0
  351. package/dist/register.agent-GnCbOS2U.js +1014 -0
  352. package/dist/register.agent-Mwu5hgjA.js +292 -0
  353. package/dist/register.configure-By-Re240.js +130 -0
  354. package/dist/register.configure-rB-Q0WKu.js +135 -0
  355. package/dist/register.import-B83Dn36B.js +29 -0
  356. package/dist/register.import-wIYU2cVW.js +31 -0
  357. package/dist/register.maintenance-D5KctP9K.js +503 -0
  358. package/dist/register.maintenance-Er88Oxcm.js +501 -0
  359. package/dist/register.message-BQhRoEQQ.js +687 -0
  360. package/dist/register.message-CvZKWeGb.js +691 -0
  361. package/dist/register.onboard-BG064oHg.js +94 -0
  362. package/dist/register.onboard-CAKyc1Fc.js +98 -0
  363. package/dist/register.setup-C9sZLS_P.js +114 -0
  364. package/dist/register.setup-CVsZdhkJ.js +118 -0
  365. package/dist/register.status-health-sessions-BZJ0wTSa.js +429 -0
  366. package/dist/register.status-health-sessions-CyrUwwtB.js +667 -0
  367. package/dist/register.subclis-CQ_Pjkyv.js +267 -0
  368. package/dist/replies-BIx-MbQ7.js +136 -0
  369. package/dist/replies-DVU655H4.js +136 -0
  370. package/dist/reply-CL5VMSKN.js +12372 -0
  371. package/dist/reply-XKyfU3rS.js +12375 -0
  372. package/dist/reply-directives-DQfJ001O.js +182 -0
  373. package/dist/reply-directives-DfUITt7C.js +182 -0
  374. package/dist/reply-payloads-ZHo6kfTS.js +527 -0
  375. package/dist/reply-prefix-BSf3PC0x.js +37 -0
  376. package/dist/reply-prefix-DBTlMHLK.js +37 -0
  377. package/dist/resolve-route-B-_IgETc.js +249 -0
  378. package/dist/resolve-route-C8ZsgWDQ.js +249 -0
  379. package/dist/response-prefix-template-3LeqJx2X.js +134 -0
  380. package/dist/response-prefix-template-DBrUVx5V.js +134 -0
  381. package/dist/retry-CDrH81GP.js +77 -0
  382. package/dist/retry-Dar_7pCv.js +77 -0
  383. package/dist/run-main-DBFpx1kt.js +308 -0
  384. package/dist/secure-random-CLWSvf8A.js +44 -0
  385. package/dist/security-cli-B8lXw9ke.js +488 -0
  386. package/dist/security-cli-CRkS3VAf.js +483 -0
  387. package/dist/send-6g8QKfWj.js +374 -0
  388. package/dist/send-B5Hz1PIn.js +29 -0
  389. package/dist/send-B8eIlA1u.js +349 -0
  390. package/dist/send-BFZPQE4j.js +492 -0
  391. package/dist/send-BpTDvE0D.js +1779 -0
  392. package/dist/send-BxOrO1Wv.js +1776 -0
  393. package/dist/send-C6gPJu-Z.js +11 -0
  394. package/dist/send-C7MoKtkN.js +426 -0
  395. package/dist/send-CXzq2LI6.js +2245 -0
  396. package/dist/send-CYOZoObr.js +547 -0
  397. package/dist/send-CfQyIvcC.js +332 -0
  398. package/dist/send-DUtuuwhw.js +492 -0
  399. package/dist/send-DbafVwxp.js +2245 -0
  400. package/dist/send-DeZg8K7y.js +349 -0
  401. package/dist/send-DwkjxJlv.js +547 -0
  402. package/dist/send-iX9xbxlU.js +1178 -0
  403. package/dist/server-BKfCzEzd.js +206 -0
  404. package/dist/server-fmO4eo7K.js +202 -0
  405. package/dist/server-lifecycle-CgPpP10P.js +2437 -0
  406. package/dist/server-lifecycle-Cn8yY5MW.js +2437 -0
  407. package/dist/server-node-events-C-ZzSBYh.js +391 -0
  408. package/dist/server-node-events-DYlyfDHM.js +395 -0
  409. package/dist/service-C2j81L86.js +670 -0
  410. package/dist/service-C8a0SXHD.js +670 -0
  411. package/dist/session-AulYhqOb.js +170 -0
  412. package/dist/session-C6VKWvx6.js +170 -0
  413. package/dist/session-cost-usage-0Vs4hgMe.js +627 -0
  414. package/dist/session-cost-usage-C-DsaOfN.js +627 -0
  415. package/dist/session-dirs-CO1f2ArM.js +318 -0
  416. package/dist/session-dirs-DoboH7Oy.js +318 -0
  417. package/dist/session-utils-CRK8ToKG.js +621 -0
  418. package/dist/session-utils-DWlkmCX8.js +621 -0
  419. package/dist/sessions-DtqrmUJS.js +2553 -0
  420. package/dist/sessions-gT-4fcX-.js +245 -0
  421. package/dist/shell-env-c3j5zcU9.js +163 -0
  422. package/dist/ssrf-8wNqPNzN.js +183 -0
  423. package/dist/ssrf-CJIdPXuS.js +183 -0
  424. package/dist/status-BI_-xpDt.js +1947 -0
  425. package/dist/status-PZVwjKjl.js +1943 -0
  426. package/dist/status.update-BmuDZ7E7.js +449 -0
  427. package/dist/status.update-Mf6HSRvU.js +449 -0
  428. package/dist/store-B7PGEdFf.js +2555 -0
  429. package/dist/store-CzhBjUCN.js +64 -0
  430. package/dist/store-YkSxKAey.js +53 -0
  431. package/dist/store-ZNeFv2Q7.js +64 -0
  432. package/dist/subagent-registry-R1DiAM4R.js +4839 -0
  433. package/dist/subagent-registry-xLRXC8Bg.js +4841 -0
  434. package/dist/subsystem-BAW_f3DI.js +1195 -0
  435. package/dist/subsystem-DGSHVL8I.js +1081 -0
  436. package/dist/system-cli-9SvRrT9D.js +77 -0
  437. package/dist/system-cli-yCa5Q1YM.js +73 -0
  438. package/dist/systemd-40Rij3QR.js +547 -0
  439. package/dist/systemd-5C97CSzd.js +547 -0
  440. package/dist/systemd-hints-3iQteJw-.js +278 -0
  441. package/dist/systemd-hints-CyQqHq1i.js +278 -0
  442. package/dist/systemd-linger-B2rPbnAi.js +75 -0
  443. package/dist/systemd-linger-DDvkfxH-.js +75 -0
  444. package/dist/table-DFx25vNb.js +279 -0
  445. package/dist/tables-C5fI0PmT.js +55 -0
  446. package/dist/tables-Cm9qvQ9D.js +55 -0
  447. package/dist/tables-fRe01eP1.js +55 -0
  448. package/dist/tailnet-Da-_9e8E.js +40 -0
  449. package/dist/tailnet-xt92Yaop.js +40 -0
  450. package/dist/tailscale-CnV0JWca.js +230 -0
  451. package/dist/tailscale-VkEC8dzj.js +230 -0
  452. package/dist/targets-C99szk_e.js +114 -0
  453. package/dist/targets-CPaTjbpp.js +2607 -0
  454. package/dist/targets-CmC5m7Ey.js +53 -0
  455. package/dist/targets-D-p4rJVS.js +650 -0
  456. package/dist/targets-D2OQt8-7.js +650 -0
  457. package/dist/targets-D94MtTiZ.js +2606 -0
  458. package/dist/targets-RajrXTl7.js +220 -0
  459. package/dist/targets-_UWmnyI9.js +53 -0
  460. package/dist/thinking-4nOZPunr.js +60 -0
  461. package/dist/thinking-ZfH2V9Os.js +60 -0
  462. package/dist/tokens-TtJJxzRr.js +21 -0
  463. package/dist/tool-display-Bxs_1jIn.js +785 -0
  464. package/dist/tool-display-D9p_Ttkq.js +785 -0
  465. package/dist/tool-images-9Ron321Q.js +263 -0
  466. package/dist/tool-images-BWhy6WRN.js +263 -0
  467. package/dist/trash-B5xyvBDf.js +125 -0
  468. package/dist/trash-BpB96kHe.js +125 -0
  469. package/dist/tui-Ba0uZDrg.js +3237 -0
  470. package/dist/tui-Biz0HqDj.js +3237 -0
  471. package/dist/tui-cli-C-UV6o2v.js +63 -0
  472. package/dist/tui-cli-Ds_bLT-h.js +67 -0
  473. package/dist/types.tools-BBb2rl3g.js +23 -0
  474. package/dist/types.tools-BDJw1yFx.js +23 -0
  475. package/dist/update-Barj5dsg.js +349 -0
  476. package/dist/update-D839Q8su.js +349 -0
  477. package/dist/update-cli-2I4hm0Gy.js +1150 -0
  478. package/dist/update-cli-CcwXmMKB.js +1148 -0
  479. package/dist/usage-BI9kergH.js +5465 -0
  480. package/dist/utils-DPoNpP7D.js +631 -0
  481. package/dist/voice-credentials-64XAMSJm.js +46 -0
  482. package/dist/voice-credentials-v-CQkTpD.js +46 -0
  483. package/dist/web-63IbbidQ.js +3051 -0
  484. package/dist/web-D9N764Da.js +80 -0
  485. package/dist/web-DUvNYLzr.js +75 -0
  486. package/dist/webhooks-cli-owhVNNkz.js +334 -0
  487. package/dist/webhooks-cli-zlvka6QD.js +330 -0
  488. package/dist/whatsapp-actions-8DejyRG5.js +126 -0
  489. package/dist/whatsapp-actions-DCzp5LKe.js +131 -0
  490. package/dist/widearea-dns-CQqZIeu8.js +127 -0
  491. package/dist/workspace-CB7pVojf.js +441 -0
  492. package/dist/workspace-DWEyzM0F.js +439 -0
  493. package/dist/zod-schema-CvFqwpNE.js +2719 -0
  494. package/dist/zod-schema-Y5SQgJLm.js +2719 -0
  495. package/package.json +1 -1
  496. package/dist/accounts-Aqbb2_Fn.js +0 -270
  497. package/dist/accounts-Bo2bX8jP.js +0 -272
  498. package/dist/accounts-CJUdvsIZ.js +0 -32
  499. package/dist/accounts-D3fAPVzU.js +0 -36
  500. package/dist/accounts-DZmv4bXS.js +0 -47
  501. package/dist/accounts-DmB4SVPK.js +0 -47
  502. package/dist/accounts-DtkyfvwR.js +0 -36
  503. package/dist/ack-reactions-BqcZUQJ3.js +0 -446
  504. package/dist/ack-reactions-DXHaDBH-.js +0 -446
  505. package/dist/acp-cli-DVXhDMc6.js +0 -1324
  506. package/dist/acp-cli-QBL4_qcW.js +0 -1319
  507. package/dist/active-listener-CwxZ24bZ.js +0 -37
  508. package/dist/active-listener-v2sItamh.js +0 -37
  509. package/dist/agent-C5PZDKE1.js +0 -687
  510. package/dist/agent-helpers-BSGqeJr-.js +0 -400
  511. package/dist/agent-qCBPcUcF.js +0 -688
  512. package/dist/agent-scope-CJW7vnF8.js +0 -114
  513. package/dist/agent-scope-_ND_-bJy.js +0 -116
  514. package/dist/agents-Byc39Y4A.js +0 -760
  515. package/dist/agents.config-BgDBcY4h.js +0 -116
  516. package/dist/agents.config-D8gLHPWo.js +0 -116
  517. package/dist/audio-BIvUsncf.js +0 -43
  518. package/dist/audio-CQ8TfmVN.js +0 -43
  519. package/dist/audit-C0x7Cm6K.js +0 -3150
  520. package/dist/audit-CAY-uzWP.js +0 -3150
  521. package/dist/auth-DGqCLaQq.js +0 -448
  522. package/dist/auth-DLTRySEi.js +0 -314
  523. package/dist/auth-Drf91ntw.js +0 -315
  524. package/dist/auth-ku2khJyQ.js +0 -448
  525. package/dist/banner-CGI3XOm4.js +0 -294
  526. package/dist/binaries-BTvHIrCr.js +0 -13
  527. package/dist/bindings-Dr0bGRst.js +0 -69
  528. package/dist/bindings-DsWJQVKh.js +0 -69
  529. package/dist/bonjour-discovery-BElR62fH.js +0 -378
  530. package/dist/bonjour-discovery-C8XyVsjb.js +0 -378
  531. package/dist/browser-cli-DxJew43l.js +0 -1694
  532. package/dist/browser-cli-p0nakrjO.js +0 -1690
  533. package/dist/call-BrTmlOx3.js +0 -518
  534. package/dist/call-ChdUdwb4.js +0 -517
  535. package/dist/catalog-DTlcfTT9.js +0 -185
  536. package/dist/catalog-PixZqhZK.js +0 -185
  537. package/dist/channel-account-context-BO245Tcn.js +0 -133
  538. package/dist/channel-account-context-BgK0hm-I.js +0 -133
  539. package/dist/channel-activity-B0qlUR5e.js +0 -292
  540. package/dist/channel-activity-C-L6rDrQ.js +0 -94
  541. package/dist/channel-activity-DdgLBZ7M.js +0 -94
  542. package/dist/channel-options-C1Q9SUhv.js +0 -33
  543. package/dist/channel-options-zANFhRx_.js +0 -32
  544. package/dist/channel-selection-DW21dXB1.js +0 -51
  545. package/dist/channel-selection-wK_6S2Ku.js +0 -51
  546. package/dist/channel-web-DCSjrtlh.js +0 -2136
  547. package/dist/channel-web-JCgegBgG.js +0 -2134
  548. package/dist/channels-cli-D48ytzLq.js +0 -1438
  549. package/dist/channels-cli-hZbUcB3G.js +0 -1434
  550. package/dist/channels-status-issues-B6I2l7Sm.js +0 -18
  551. package/dist/channels-status-issues-DhDH2fWp.js +0 -18
  552. package/dist/chat-envelope-BIujl9Cj.js +0 -248
  553. package/dist/chat-envelope-CrM0X4sl.js +0 -248
  554. package/dist/chrome-Dqtq7zCc.js +0 -1733
  555. package/dist/chrome-XeSY99Z_.js +0 -1732
  556. package/dist/chunk-LUabyS9k.js +0 -341
  557. package/dist/clack-prompter-fAgbvPW4.js +0 -122
  558. package/dist/clack-prompter-kf9qTN5p.js +0 -121
  559. package/dist/cleanup-utils-CNwlTKyR.js +0 -94
  560. package/dist/cli-BTLaY8q4.js +0 -133
  561. package/dist/cli-CZV23GbW.js +0 -129
  562. package/dist/client-B9u3JdT_.js +0 -2316
  563. package/dist/client-DEEOhx0w.js +0 -2316
  564. package/dist/clipboard-B2nstLx7.js +0 -31
  565. package/dist/clipboard-C8QI9fes.js +0 -31
  566. package/dist/command-format-D0vKipG9.js +0 -32
  567. package/dist/command-format-LFmgWzKJ.js +0 -18
  568. package/dist/command-registry-BPXqH4ST.js +0 -215
  569. package/dist/commands-BAYwlS3d.js +0 -41
  570. package/dist/commands-D842kCjj.js +0 -41
  571. package/dist/commands-registry-Cg2GTT2J.js +0 -892
  572. package/dist/commands-registry-Yz-uV5oG.js +0 -891
  573. package/dist/common-B67cBSew.js +0 -156
  574. package/dist/common-DEoiTqOr.js +0 -156
  575. package/dist/completion-cli-D5J3fPka.js +0 -452
  576. package/dist/completion-cli-Dd1g-p7S.js +0 -452
  577. package/dist/config-CAa0rZSx.js +0 -4225
  578. package/dist/config-W0w-gi2j.js +0 -4223
  579. package/dist/config-cli-Ddz-yCdQ.js +0 -247
  580. package/dist/config-cli-shgSFYig.js +0 -243
  581. package/dist/config-guard-BI85dxHR.js +0 -99
  582. package/dist/config-guard-DQqnigKh.js +0 -75
  583. package/dist/config-validation-D-h4LHyA.js +0 -18
  584. package/dist/config-validation-Df_kroIQ.js +0 -18
  585. package/dist/configure-BnFwpZ3l.js +0 -891
  586. package/dist/configure-Cj4mlKSH.js +0 -889
  587. package/dist/control-auth-BrBr2xb8.js +0 -397
  588. package/dist/control-auth-CehjYKnL.js +0 -397
  589. package/dist/control-ui-assets-D8F383Mo.js +0 -186
  590. package/dist/control-ui-assets-DYKtRIm0.js +0 -186
  591. package/dist/conversation-label-Bn5j3lUT.js +0 -36
  592. package/dist/cron-cli-DVzDHzAX.js +0 -494
  593. package/dist/cron-cli-gkH2qKM4.js +0 -498
  594. package/dist/daemon-cli-BTdNO1vH.js +0 -737
  595. package/dist/daemon-cli-DNNqI2LD.js +0 -735
  596. package/dist/daemon-install-CaEHG92p.js +0 -56
  597. package/dist/daemon-install-DbpDSDfW.js +0 -60
  598. package/dist/daemon-install-helpers-DjE_WnlY.js +0 -504
  599. package/dist/daemon-install-helpers-DocTUxqQ.js +0 -504
  600. package/dist/deliver-CDcL8ok6.js +0 -481
  601. package/dist/deliver-CS8JsevV.js +0 -481
  602. package/dist/delivery-queue-CTaYZQ_8.js +0 -244
  603. package/dist/delivery-queue-DMZ7mH8P.js +0 -244
  604. package/dist/devices-cli-BBJ4His-.js +0 -319
  605. package/dist/devices-cli-DHSJSFW1.js +0 -323
  606. package/dist/diagnostics-BSvCaLNs.js +0 -35
  607. package/dist/diagnostics-mWFAsFeo.js +0 -35
  608. package/dist/directory-cli-C-oHD_XE.js +0 -224
  609. package/dist/directory-cli-Cw99VGvr.js +0 -220
  610. package/dist/dispatcher-C8d1NNLZ.js +0 -174
  611. package/dist/dispatcher-DY6Ga60j.js +0 -173
  612. package/dist/dm-policy-shared-CRQ-Wr5g.js +0 -22
  613. package/dist/dm-policy-shared-CXXf2ltd.js +0 -22
  614. package/dist/dns-cli-BOqx9qo1.js +0 -199
  615. package/dist/dns-cli-WfqSC3JU.js +0 -203
  616. package/dist/dock-Big-J2VN.js +0 -929
  617. package/dist/dock-Cj4PKiUh.js +0 -928
  618. package/dist/doctor-completion-B9RsNJKh.js +0 -92
  619. package/dist/doctor-completion-DhNvADTs.js +0 -92
  620. package/dist/doctor-config-flow-BUuADMDa.js +0 -1935
  621. package/dist/doctor-config-flow-yOUpQC2B.js +0 -1934
  622. package/dist/enable-DC9V0nTO.js +0 -59
  623. package/dist/enable-DzXMQJ-o.js +0 -59
  624. package/dist/env-B3zr72vQ.js +0 -60
  625. package/dist/errors-CdmXrBic.js +0 -35
  626. package/dist/errors-Cr_NbOb4.js +0 -35
  627. package/dist/exec-D_s-zAtY.js +0 -164
  628. package/dist/exec-Zz6eJ6YU.js +0 -164
  629. package/dist/fetch-C8pdlo4-.js +0 -67
  630. package/dist/fetch-DRVdxxEj.js +0 -67
  631. package/dist/file-lock-6NXMPZTT.js +0 -107
  632. package/dist/file-lock-C_KRlR7M.js +0 -107
  633. package/dist/fs-safe-DZHpH7TI.js +0 -98
  634. package/dist/fs-safe-vm3JMUkq.js +0 -88
  635. package/dist/gateway-cli-CebjflhZ.js +0 -24337
  636. package/dist/gateway-cli-Y9U6rbPB.js +0 -24333
  637. package/dist/gateway-rpc-BCFkQPa2.js +0 -28
  638. package/dist/gateway-rpc-DOgYbsOG.js +0 -28
  639. package/dist/gmail-setup-utils-DMeA1UM1.js +0 -423
  640. package/dist/gmail-setup-utils-FHWSAur3.js +0 -422
  641. package/dist/health-CXWQZGNz.js +0 -1414
  642. package/dist/health-DCC6hoLO.js +0 -1417
  643. package/dist/health-format-CVgQD-z9.js +0 -28
  644. package/dist/heartbeat-visibility-Cv0ejWJ-.js +0 -125
  645. package/dist/heartbeat-visibility-Da3TDQp2.js +0 -125
  646. package/dist/help-format-DM6-OBt-.js +0 -17
  647. package/dist/hook-runner-global-C0DFQmQw.js +0 -527
  648. package/dist/hooks-cli-CB5rKhHe.js +0 -1221
  649. package/dist/hooks-cli-Dy7m9hzM.js +0 -1225
  650. package/dist/image-ops-B9ofmzSq.js +0 -354
  651. package/dist/image-ops-CMuvRsMY.js +0 -354
  652. package/dist/import-BH13F5mT.js +0 -606
  653. package/dist/import-D8HVcDqO.js +0 -604
  654. package/dist/inbound-context-CmmmT8IP.js +0 -68
  655. package/dist/inbound-path-policy-BdmTOUka.js +0 -90
  656. package/dist/inbound-path-policy-BurOAu44.js +0 -90
  657. package/dist/inspect-nW8LAukU.js +0 -286
  658. package/dist/inspect-xy2EHy8G.js +0 -286
  659. package/dist/installs-CpfHmKY1.js +0 -325
  660. package/dist/installs-DebiMrGj.js +0 -325
  661. package/dist/ipv4-ysiNGssl.js +0 -46
  662. package/dist/ipv4-zc_Hfvbp.js +0 -46
  663. package/dist/ir-CaxTklDC.js +0 -940
  664. package/dist/lifecycle-core-Z5SScMlU.js +0 -476
  665. package/dist/lifecycle-core-pPwYSt7m.js +0 -474
  666. package/dist/links-D5vtq30Q.js +0 -15
  667. package/dist/loader-BVHaRcP7.js +0 -22404
  668. package/dist/loader-CxSGgugQ.js +0 -22401
  669. package/dist/local-roots-CrJ_Jv_G.js +0 -314
  670. package/dist/local-roots-n_Y4iYwb.js +0 -313
  671. package/dist/logger-B8yHnzPl.js +0 -49
  672. package/dist/logging-FctZEleJ.js +0 -20
  673. package/dist/login-C99fsB0N.js +0 -61
  674. package/dist/login-cLvGPjeO.js +0 -62
  675. package/dist/login-qr-CGqRFwgl.js +0 -329
  676. package/dist/login-qr-dnY5DC2C.js +0 -325
  677. package/dist/logs-cli-Bda7xY4N.js +0 -236
  678. package/dist/logs-cli-HzR-vnpD.js +0 -240
  679. package/dist/markdown-tables-58Hq__7K.js +0 -29
  680. package/dist/markdown-tables-GFEX0OR6.js +0 -29
  681. package/dist/media-C1SIfGTn.js +0 -10452
  682. package/dist/media-CFsyXs3H.js +0 -940
  683. package/dist/message-action-names-BgsKGLDS.js +0 -2521
  684. package/dist/message-action-names-DkZwEFhU.js +0 -2521
  685. package/dist/message-channel-FMNRI5Ax.js +0 -91
  686. package/dist/mime-AuIDUZPG.js +0 -149
  687. package/dist/mime-Cqg1jjia.js +0 -149
  688. package/dist/net-BEFkF-nI.js +0 -225
  689. package/dist/net-CNsUGiSw.js +0 -225
  690. package/dist/node-cli-Bu-InsO9.js +0 -1462
  691. package/dist/node-cli-DE7Pm7Fr.js +0 -1458
  692. package/dist/node-service-CumFZc9L.js +0 -67
  693. package/dist/node-service-DY1gG06I.js +0 -67
  694. package/dist/nodes-cli-B5aAExN0.js +0 -1350
  695. package/dist/nodes-cli-eKRqlKuO.js +0 -1346
  696. package/dist/nodes-screen-B3Sij1uT.js +0 -250
  697. package/dist/nodes-screen-DEvpoFmH.js +0 -250
  698. package/dist/note-CPFJCWJJ.js +0 -92
  699. package/dist/note-DHUJACHE.js +0 -92
  700. package/dist/npm-registry-spec-BgMtTHvq.js +0 -786
  701. package/dist/npm-registry-spec-Dz3z1Zpd.js +0 -786
  702. package/dist/npm-resolution-BXiQH99t.js +0 -86
  703. package/dist/npm-resolution-CqE0nhxJ.js +0 -86
  704. package/dist/onboard-DK2z3w1P.js +0 -649
  705. package/dist/onboard-auth-C_wHkop1.js +0 -207
  706. package/dist/onboard-auth-CkCBLvTg.js +0 -211
  707. package/dist/onboard-channels-C8_OLbPk.js +0 -2547
  708. package/dist/onboard-channels-w_tnOhVu.js +0 -2548
  709. package/dist/onboard-helpers-Q7M6vdzh.js +0 -363
  710. package/dist/onboard-helpers-SCO3k5Y8.js +0 -364
  711. package/dist/onboard-remote-Co2hv1AD.js +0 -127
  712. package/dist/onboard-remote-Dl3BFSg2.js +0 -127
  713. package/dist/onboard-rioH3DW6.js +0 -647
  714. package/dist/onboarding-CsXVuzFP.js +0 -586
  715. package/dist/onboarding-r5RCkc-Z.js +0 -588
  716. package/dist/onboarding.finalize-BY8uN1nD.js +0 -402
  717. package/dist/onboarding.finalize-C-kfj-aR.js +0 -404
  718. package/dist/onboarding.gateway-config-BL0Q7Wpg.js +0 -201
  719. package/dist/onboarding.gateway-config-D2QsXMYO.js +0 -195
  720. package/dist/outbound-CcaPcetn.js +0 -220
  721. package/dist/outbound-CeiW8z3a.js +0 -221
  722. package/dist/outbound-attachment-BLSGI2dJ.js +0 -18
  723. package/dist/outbound-attachment-Bfm5-JYe.js +0 -18
  724. package/dist/outbound-attachment-CZ7zoYxB.js +0 -18
  725. package/dist/pairing-cli-CgX79ujL.js +0 -125
  726. package/dist/pairing-cli-DvbbXFgC.js +0 -129
  727. package/dist/pairing-labels-3wDxaApH.js +0 -9
  728. package/dist/pairing-labels-DCbWnbWk.js +0 -9
  729. package/dist/pairing-store-CdY7iRS0.js +0 -459
  730. package/dist/pairing-store-DykkYpQ7.js +0 -460
  731. package/dist/path-env-Cqo5LZmw.js +0 -89
  732. package/dist/path-guards-DOpzcMXz.js +0 -31
  733. package/dist/path-guards-DipYoPVw.js +0 -31
  734. package/dist/path-safety-CXKAVpMp.js +0 -14
  735. package/dist/path-safety-DGB91qBk.js +0 -14
  736. package/dist/paths-BTaH3rLn.js +0 -232
  737. package/dist/plugin-auto-enable-C6FPGg_-.js +0 -301
  738. package/dist/plugin-auto-enable-L8eOc8iC.js +0 -302
  739. package/dist/plugin-registry-BTycBIix.js +0 -33
  740. package/dist/plugin-registry-CFty9Gym.js +0 -33
  741. package/dist/plugin-sdk/auto-reply/reply/elevated-allowlist-matcher.d.ts +0 -20
  742. package/dist/plugin-sdk/auto-reply/reply/elevated-unavailable.d.ts +0 -8
  743. package/dist/plugin-sdk/auto-reply/reply/reply-elevated.d.ts +0 -16
  744. package/dist/plugin-sdk/compat/legacy-names.d.ts +0 -8
  745. package/dist/plugin-sdk/config/legacy.migrations.part-1.d.ts +0 -2
  746. package/dist/plugin-sdk/config/legacy.migrations.part-2.d.ts +0 -2
  747. package/dist/plugin-sdk/config/legacy.migrations.part-3.d.ts +0 -2
  748. package/dist/plugin-sdk/cron/legacy-delivery.d.ts +0 -3
  749. package/dist/plugin-sdk/cron/payload-migration.d.ts +0 -3
  750. package/dist/plugin-sdk/link-understanding/apply.d.ts +0 -10
  751. package/dist/plugin-sdk/link-understanding/defaults.d.ts +0 -2
  752. package/dist/plugin-sdk/link-understanding/detect.d.ts +0 -3
  753. package/dist/plugin-sdk/link-understanding/format.d.ts +0 -4
  754. package/dist/plugin-sdk/link-understanding/runner.d.ts +0 -11
  755. package/dist/plugin-sdk/media/input-files.d.ts +0 -95
  756. package/dist/plugin-sdk/media-understanding/apply.d.ts +0 -19
  757. package/dist/plugin-sdk/media-understanding/attachments.d.ts +0 -49
  758. package/dist/plugin-sdk/media-understanding/concurrency.d.ts +0 -1
  759. package/dist/plugin-sdk/media-understanding/defaults.d.ts +0 -11
  760. package/dist/plugin-sdk/media-understanding/errors.d.ts +0 -6
  761. package/dist/plugin-sdk/media-understanding/format.d.ts +0 -7
  762. package/dist/plugin-sdk/media-understanding/fs.d.ts +0 -1
  763. package/dist/plugin-sdk/media-understanding/output-extract.d.ts +0 -2
  764. package/dist/plugin-sdk/media-understanding/providers/anthropic/index.d.ts +0 -2
  765. package/dist/plugin-sdk/media-understanding/providers/deepgram/audio.d.ts +0 -1
  766. package/dist/plugin-sdk/media-understanding/providers/deepgram/index.d.ts +0 -2
  767. package/dist/plugin-sdk/media-understanding/providers/google/audio.d.ts +0 -1
  768. package/dist/plugin-sdk/media-understanding/providers/google/index.d.ts +0 -2
  769. package/dist/plugin-sdk/media-understanding/providers/google/video.d.ts +0 -3
  770. package/dist/plugin-sdk/media-understanding/providers/groq/index.d.ts +0 -2
  771. package/dist/plugin-sdk/media-understanding/providers/index.d.ts +0 -4
  772. package/dist/plugin-sdk/media-understanding/providers/minimax/index.d.ts +0 -2
  773. package/dist/plugin-sdk/media-understanding/providers/mistral/index.d.ts +0 -2
  774. package/dist/plugin-sdk/media-understanding/providers/moonshot/index.d.ts +0 -2
  775. package/dist/plugin-sdk/media-understanding/providers/moonshot/video.d.ts +0 -3
  776. package/dist/plugin-sdk/media-understanding/providers/openai/audio.d.ts +0 -1
  777. package/dist/plugin-sdk/media-understanding/providers/openai/index.d.ts +0 -2
  778. package/dist/plugin-sdk/media-understanding/providers/shared.d.ts +0 -20
  779. package/dist/plugin-sdk/media-understanding/providers/zai/index.d.ts +0 -2
  780. package/dist/plugin-sdk/media-understanding/resolve.d.ts +0 -44
  781. package/dist/plugin-sdk/media-understanding/runner.d.ts +0 -34
  782. package/dist/plugin-sdk/media-understanding/runner.entries.d.ts +0 -33
  783. package/dist/plugin-sdk/media-understanding/scope.d.ts +0 -9
  784. package/dist/plugin-sdk/media-understanding/types.d.ts +0 -59
  785. package/dist/plugin-sdk/media-understanding/video.d.ts +0 -2
  786. package/dist/plugin-sdk/utils/run-with-concurrency.d.ts +0 -11
  787. package/dist/plugins-7B167wIj.js +0 -453
  788. package/dist/plugins-BRHOfy1Z.js +0 -455
  789. package/dist/plugins-cli-CQGW40I-.js +0 -797
  790. package/dist/plugins-cli-D-ZfWRTw.js +0 -801
  791. package/dist/ports-CAqyeQYZ.js +0 -316
  792. package/dist/ports-CTUgXF2d.js +0 -96
  793. package/dist/ports-DqfnVnCw.js +0 -370
  794. package/dist/preflight-CJqKHCYa.js +0 -64
  795. package/dist/preflight-TR92sc61.js +0 -68
  796. package/dist/program-_SGrjcuG.js +0 -248
  797. package/dist/program-context-B6yIPfYd.js +0 -474
  798. package/dist/progress-BOdRbOHD.js +0 -124
  799. package/dist/prompt-WEkXwIMT.js +0 -21
  800. package/dist/prompt-select-styled-BiBnOTh8.js +0 -1669
  801. package/dist/prompt-select-styled-DQacku67.js +0 -1672
  802. package/dist/prompt-style-B4Cq4PyQ.js +0 -9
  803. package/dist/provider-dispatcher-BjsUFEpi.js +0 -659
  804. package/dist/provider-dispatcher-BxNDRVIT.js +0 -660
  805. package/dist/push-apns-Cj0Ryn18.js +0 -713
  806. package/dist/push-apns-fFfYCqda.js +0 -711
  807. package/dist/pw-ai-CnN2sITD.js +0 -1908
  808. package/dist/pw-ai-fnX3cecw.js +0 -1911
  809. package/dist/qr-cli-CriPg41m.js +0 -349
  810. package/dist/qr-cli-DSURqD0D.js +0 -353
  811. package/dist/redact-gXuh8MFk.js +0 -191
  812. package/dist/redact-snapshot-BecRL_h6.js +0 -2016
  813. package/dist/redact-snapshot-pTdzSrex.js +0 -2016
  814. package/dist/register.agent-Bpwvc5By.js +0 -1018
  815. package/dist/register.agent-DQFcnOVQ.js +0 -290
  816. package/dist/register.configure-C5CK8tgd.js +0 -133
  817. package/dist/register.configure-CEJ5Wrkl.js +0 -128
  818. package/dist/register.import-CPQqqdje.js +0 -31
  819. package/dist/register.import-D1UaH1QV.js +0 -29
  820. package/dist/register.maintenance-Bpz-NOhG.js +0 -499
  821. package/dist/register.maintenance-DDwlfAfw.js +0 -501
  822. package/dist/register.message-BoNswT8e.js +0 -685
  823. package/dist/register.message-pvz70g_-.js +0 -689
  824. package/dist/register.onboard-BvcVLNp3.js +0 -93
  825. package/dist/register.onboard-CZV7LvZI.js +0 -97
  826. package/dist/register.setup-Cgv2uSPG.js +0 -117
  827. package/dist/register.setup-yTqvTinY.js +0 -113
  828. package/dist/register.status-health-sessions-LK50hWDT.js +0 -428
  829. package/dist/register.status-health-sessions-kDGDihye.js +0 -668
  830. package/dist/register.subclis-DSr7AHAr.js +0 -267
  831. package/dist/replies-IpiCq1Ht.js +0 -136
  832. package/dist/replies-LSx_XhsP.js +0 -136
  833. package/dist/reply-B8It91bP.js +0 -13652
  834. package/dist/reply-CbgHVTv2.js +0 -13649
  835. package/dist/reply-directives-Cz7622Qx.js +0 -182
  836. package/dist/reply-directives-ssnaPNiU.js +0 -182
  837. package/dist/reply-payloads-CQMtrphw.js +0 -527
  838. package/dist/reply-prefix-CWcAZKhE.js +0 -37
  839. package/dist/reply-prefix-Drq7Pf3A.js +0 -37
  840. package/dist/resolve-route-B8uIc2H3.js +0 -249
  841. package/dist/resolve-route-C8ooNlI4.js +0 -249
  842. package/dist/response-prefix-template-D3ZcJP4E.js +0 -134
  843. package/dist/response-prefix-template-DPOggmPO.js +0 -134
  844. package/dist/retry-B19gMxS7.js +0 -77
  845. package/dist/retry-BdhJlZQI.js +0 -77
  846. package/dist/run-main-BP3UHEJa.js +0 -306
  847. package/dist/runner-CD3YycXx.js +0 -2365
  848. package/dist/runner-D74Wiza_.js +0 -2365
  849. package/dist/secure-random-CQa3H-OL.js +0 -44
  850. package/dist/security-cli-05blEYyC.js +0 -482
  851. package/dist/security-cli-DYbt8duB.js +0 -487
  852. package/dist/send-7O3-bRtl.js +0 -547
  853. package/dist/send-9Huf62k3.js +0 -2245
  854. package/dist/send-B0C42B2A.js +0 -426
  855. package/dist/send-B9mIJdUo.js +0 -547
  856. package/dist/send-BHm9dk6D.js +0 -1178
  857. package/dist/send-BetMntNc.js +0 -11
  858. package/dist/send-Bj0RXr-a.js +0 -492
  859. package/dist/send-COuVtZ4b.js +0 -374
  860. package/dist/send-CXNuhYA-.js +0 -332
  861. package/dist/send-Ce_BDa8P.js +0 -349
  862. package/dist/send-ChvasRSh.js +0 -1779
  863. package/dist/send-DNVRlTEF.js +0 -29
  864. package/dist/send-DWf7BCPe.js +0 -492
  865. package/dist/send-Dd2_MykI.js +0 -2245
  866. package/dist/send-IJaUAa8H.js +0 -1776
  867. package/dist/send-vvZXksNU.js +0 -349
  868. package/dist/server-BrzR9JmX.js +0 -206
  869. package/dist/server-_h27-uP_.js +0 -202
  870. package/dist/server-lifecycle-CUdA6Far.js +0 -2437
  871. package/dist/server-lifecycle-DQZWL8iP.js +0 -2437
  872. package/dist/server-node-events-DSefRBGC.js +0 -394
  873. package/dist/server-node-events-jDiG1-M2.js +0 -390
  874. package/dist/service-9le8AnC-.js +0 -670
  875. package/dist/service-Drb0kx6I.js +0 -670
  876. package/dist/session-BIAOl5QR.js +0 -170
  877. package/dist/session-Wu00pCn_.js +0 -170
  878. package/dist/session-cost-usage-7plmOKbs.js +0 -627
  879. package/dist/session-cost-usage-CPFxBFUg.js +0 -627
  880. package/dist/session-dirs-CfIrIJxG.js +0 -318
  881. package/dist/session-dirs-DlPpWt5Q.js +0 -318
  882. package/dist/session-utils-Sd9w4vc1.js +0 -622
  883. package/dist/session-utils-iL47hYmZ.js +0 -622
  884. package/dist/sessions-6pKQ3gN3.js +0 -247
  885. package/dist/sessions-ZRmCDdj1.js +0 -2569
  886. package/dist/shell-env-DYZq9PqC.js +0 -163
  887. package/dist/ssrf-B-rF_tZB.js +0 -183
  888. package/dist/ssrf-DJW14Wkh.js +0 -183
  889. package/dist/status-BGM-EJGk.js +0 -1983
  890. package/dist/status-CGkrO9om.js +0 -1979
  891. package/dist/status.update-DlBReI5-.js +0 -449
  892. package/dist/status.update-v7fEQ7R9.js +0 -449
  893. package/dist/store-B5989JkX.js +0 -64
  894. package/dist/store-BpXxa0Uf.js +0 -53
  895. package/dist/store-DCrrxHyS.js +0 -2571
  896. package/dist/store-Ql6vAcsg.js +0 -64
  897. package/dist/subagent-registry-BGknZEUI.js +0 -4856
  898. package/dist/subagent-registry-CWeRBjfn.js +0 -4854
  899. package/dist/subsystem-Ct6qOOqZ.js +0 -1079
  900. package/dist/subsystem-PQ64_nsu.js +0 -1136
  901. package/dist/system-cli-CmO-4Rju.js +0 -77
  902. package/dist/system-cli-VBsa18K6.js +0 -73
  903. package/dist/systemd-CqFpK30Y.js +0 -547
  904. package/dist/systemd-fK9AV5bP.js +0 -547
  905. package/dist/systemd-hints-D3rr0j14.js +0 -278
  906. package/dist/systemd-hints-DNOSRaqA.js +0 -278
  907. package/dist/systemd-linger-B907NVVy.js +0 -75
  908. package/dist/systemd-linger-wYksBbM7.js +0 -75
  909. package/dist/table-C-dba-5-.js +0 -279
  910. package/dist/tables-CO_kxD0e.js +0 -55
  911. package/dist/tables-Rd6ZUH0u.js +0 -55
  912. package/dist/tables-WZp8Vt9n.js +0 -55
  913. package/dist/tailnet-CfZhpSnt.js +0 -40
  914. package/dist/tailnet-D0NV0tRJ.js +0 -40
  915. package/dist/tailscale-B__xvMjA.js +0 -230
  916. package/dist/tailscale-q_ZrxUCc.js +0 -230
  917. package/dist/targets-B4rMyQFJ.js +0 -53
  918. package/dist/targets-BEBzTa22.js +0 -114
  919. package/dist/targets-BjWhDMJM.js +0 -650
  920. package/dist/targets-BlEVuFSt.js +0 -2474
  921. package/dist/targets-CHwGDIgO.js +0 -650
  922. package/dist/targets-CbbmgMRV.js +0 -2473
  923. package/dist/targets-SpN-MPBH.js +0 -220
  924. package/dist/targets-mqj9GNg1.js +0 -53
  925. package/dist/thinking-BqJmU6Zp.js +0 -88
  926. package/dist/thinking-l-rrvZwu.js +0 -88
  927. package/dist/tokens-DAFBx5qr.js +0 -21
  928. package/dist/tool-display-C0hpLmkw.js +0 -785
  929. package/dist/tool-display-CQTRHo3Z.js +0 -785
  930. package/dist/tool-images-BYY11Gw3.js +0 -263
  931. package/dist/tool-images-CnJ0R8Fo.js +0 -263
  932. package/dist/trash-C0mjnHuW.js +0 -125
  933. package/dist/trash-Cgwc9mLD.js +0 -125
  934. package/dist/tui-9cJnR1dN.js +0 -3282
  935. package/dist/tui-BR3egaFJ.js +0 -3282
  936. package/dist/tui-cli-BYpkhE6J.js +0 -66
  937. package/dist/tui-cli-DndeZyup.js +0 -62
  938. package/dist/update-BJVdkzk7.js +0 -349
  939. package/dist/update-DjI6KTA5.js +0 -349
  940. package/dist/update-cli-DR-zFdCm.js +0 -1146
  941. package/dist/update-cli-EuHV_AUf.js +0 -1148
  942. package/dist/usage-BQUMGgBj.js +0 -5350
  943. package/dist/utils-C5daYcFn.js +0 -631
  944. package/dist/voice-credentials-CXdoE4IF.js +0 -45
  945. package/dist/voice-credentials-Cu7htUQq.js +0 -45
  946. package/dist/web-6WVkqhtO.js +0 -3087
  947. package/dist/web-BfSXKISl.js +0 -74
  948. package/dist/web-Cngqu3vs.js +0 -79
  949. package/dist/webhooks-cli-0yQha2yj.js +0 -334
  950. package/dist/webhooks-cli-ula0bTX-.js +0 -330
  951. package/dist/whatsapp-actions-3NdzsNg1.js +0 -130
  952. package/dist/whatsapp-actions-y_1vjkYY.js +0 -125
  953. package/dist/widearea-dns-C-0P7TRi.js +0 -127
  954. package/dist/workspace-BT3X-qCZ.js +0 -449
  955. package/dist/workspace-D5hHXubL.js +0 -447
  956. package/dist/zod-schema-CbqZAIYy.js +0 -2696
  957. package/dist/zod-schema-YGQJEcnj.js +0 -2696
  958. /package/dist/{account-lookup-BOCzCnir.js → account-lookup-CIY_RKhi.js} +0 -0
  959. /package/dist/{agent-helpers-eEHy5uX2.js → agent-helpers-Bs2nBXeI.js} +0 -0
  960. /package/dist/{api-Cd_7aESj.js → api-BE4ZCWWB.js} +0 -0
  961. /package/dist/{api-DJ_oWYus.js → api-wsk9zRVi.js} +0 -0
  962. /package/dist/{chat-type-DyovJwCt.js → chat-type-BP9akbag.js} +0 -0
  963. /package/dist/{chunk-CWD_zrz_.js → chunk-BAMyFYtF.js} +0 -0
  964. /package/dist/{cleanup-utils-gNzIs9yk.js → cleanup-utils-ZC2zvntc.js} +0 -0
  965. /package/dist/{cli-name-3MdfbvIR.js → cli-name-BZsYSp9l.js} +0 -0
  966. /package/dist/{cli-name-CRLBidNP.js → cli-name-CRe5Ow_t.js} +0 -0
  967. /package/dist/{cli-utils-5ZIfXAfM.js → cli-utils-CGB3cBZm.js} +0 -0
  968. /package/dist/{client-D5m46AuY.js → client-9dK56xly.js} +0 -0
  969. /package/dist/{client-DFyI5I0n.js → client-D-R1YdRD.js} +0 -0
  970. /package/dist/{command-options-Cn2fc1Of.js → command-options-CnHA4TzR.js} +0 -0
  971. /package/dist/{config-eval-BCKpAS_K.js → config-eval-BQIR-wSg.js} +0 -0
  972. /package/dist/{config-eval-CU2G7a83.js → config-eval-Bh82JoXK.js} +0 -0
  973. /package/dist/{constants-CRGAZ2ow.js → constants-C7j1VA2S.js} +0 -0
  974. /package/dist/{constants-BAZuhSRm.js → constants-PMRtHBHU.js} +0 -0
  975. /package/dist/{credentials-DMAWNZdV.js → credentials-C_RoJFmK.js} +0 -0
  976. /package/dist/{credentials-Dmc3H-jd.js → credentials-DM_Dj0m8.js} +0 -0
  977. /package/dist/{daemon-runtime-aQhinwSL.js → daemon-runtime-9oDBR7YW.js} +0 -0
  978. /package/dist/{dangerous-name-matching-BCaPvXy_.js → dangerous-name-matching-CSq9sJDG.js} +0 -0
  979. /package/dist/{dangerous-tools-E1i3IoxZ.js → dangerous-tools-D4jtl72G.js} +0 -0
  980. /package/dist/{fetch-DTR2MlOk.js → fetch-DTsU2XnC.js} +0 -0
  981. /package/dist/{fetch-timeout-l_6RdoMw.js → fetch-timeout-CytN1wiO.js} +0 -0
  982. /package/dist/{file-identity-BnGA6wyc.js → file-identity-CeRK5CJC.js} +0 -0
  983. /package/dist/{format-relative-Cywx6ldk.js → format-relative-Czf5fUjn.js} +0 -0
  984. /package/dist/{format-relative-DcQZUAYl.js → format-relative-zwkkXJvs.js} +0 -0
  985. /package/dist/{health-format-CL2Xq92A.js → health-format-DF54wvUU.js} +0 -0
  986. /package/dist/{heartbeat-wake-DjsTDzF3.js → heartbeat-wake-CvHncCjP.js} +0 -0
  987. /package/dist/{helpers-D-r6yhnI.js → helpers-DAEoFkbn.js} +0 -0
  988. /package/dist/{helpers-DSMIGYx2.js → helpers-n2CtWpm9.js} +0 -0
  989. /package/dist/{helpers-CRrn7Err.js → helpers-ndPQWl6m.js} +0 -0
  990. /package/dist/{input-provenance-BgfeDgck.js → input-provenance-gIfDn1ki.js} +0 -0
  991. /package/dist/{input-provenance-xUsSMOsz.js → input-provenance-wkso1o5V.js} +0 -0
  992. /package/dist/{ip-BAhS4rY2.js → ip-D4VG5EJO.js} +0 -0
  993. /package/dist/{ip-BUhsZdJu.js → ip-MwCwRA7c.js} +0 -0
  994. /package/dist/{json-file-Dbg7nZg1.js → json-file-BW22hGtf.js} +0 -0
  995. /package/dist/{json-file-B5WEJJye.js → json-file-DwRAfAAy.js} +0 -0
  996. /package/dist/{json-files-CfhnuGaC.js → json-files-BI20PLIm.js} +0 -0
  997. /package/dist/{json-files-BFGbyEzL.js → json-files-Dy52honG.js} +0 -0
  998. /package/dist/{lanes-4FoQemog.js → lanes-1CBKdsiR.js} +0 -0
  999. /package/dist/{lanes-BhdzrAIa.js → lanes-DqVYfPRG.js} +0 -0
  1000. /package/dist/{logger-IA_Dr_BT.js → logger-B8BE0PyS.js} +0 -0
  1001. /package/dist/{logger-nEdVxm5D.js → logger-CPvz-aPM.js} +0 -0
  1002. /package/dist/{logger-O6JX52kK.js → logger-cL0D2DCr.js} +0 -0
  1003. /package/dist/{logging-BiuZwq5D.js → logging-DRwtiLIS.js} +0 -0
  1004. /package/dist/{logging-Bs1VqVFL.js → logging-DTEoeoa3.js} +0 -0
  1005. /package/dist/{logging-JZEg5nDp.js → logging-fywhKCmE.js} +0 -0
  1006. /package/dist/{mutable-allowlist-detectors-TCG6mnbz.js → mutable-allowlist-detectors-BXE7Hr7F.js} +0 -0
  1007. /package/dist/{onboard-config-BxfgUqk6.js → onboard-config-DOmXYEvJ.js} +0 -0
  1008. /package/dist/{onboard-config-DNzlo8Cg.js → onboard-config-JmR21VYa.js} +0 -0
  1009. /package/dist/{parse-log-line-CT0H1-oQ.js → parse-log-line-GisaZn5H.js} +0 -0
  1010. /package/dist/{parse-log-line-pij_xhtE.js → parse-log-line-ZsbwG_u7.js} +0 -0
  1011. /package/dist/{parse-timeout-CvODy9RC.js → parse-timeout-BpphuwYl.js} +0 -0
  1012. /package/dist/{parse-timeout-CxYHsZWc.js → parse-timeout-CE6BjmGU.js} +0 -0
  1013. /package/dist/plugin-sdk/{media-understanding → stt}/providers/google/inline-data.d.ts +0 -0
  1014. /package/dist/{plugins-allowlist-Bcqe9Gd8.js → plugins-allowlist-A38nxBRG.js} +0 -0
  1015. /package/dist/{plugins-allowlist-ptAp-oPY.js → plugins-allowlist-D2tS9tcu.js} +0 -0
  1016. /package/dist/{polls-DQrR-qT3.js → polls-BLyT08ZI.js} +0 -0
  1017. /package/dist/{polls-ybwcqkWt.js → polls-BmymsJEe.js} +0 -0
  1018. /package/dist/{ports-BS8kQkd9.js → ports-DALdfBQy.js} +0 -0
  1019. /package/dist/{process-scoped-map-BwUkYFQV.js → process-scoped-map-BCJR56ZB.js} +0 -0
  1020. /package/dist/{process-scoped-map-_zxf_kLz.js → process-scoped-map-Cb1EHPyN.js} +0 -0
  1021. /package/dist/{program-context-CG-t6Yp-.js → program-context-DlXnmuB7.js} +0 -0
  1022. /package/dist/{prompt-style-B1740PBl.js → prompt-style-CUuA6OCy.js} +0 -0
  1023. /package/dist/{proxy-BdjLhNln.js → proxy-D-qGA1vm.js} +0 -0
  1024. /package/dist/{pw-ai-state-DaISdsXY.js → pw-ai-state--TxTVwRW.js} +0 -0
  1025. /package/dist/{redact-CqWx9rpK.js → redact-BW8tobyp.js} +0 -0
  1026. /package/dist/{redact-identifier-DR54qsoT.js → redact-identifier-Bv5SUUw-.js} +0 -0
  1027. /package/dist/{remoteclaw-root-u8dAeHID.js → remoteclaw-root-BfPjgewe.js} +0 -0
  1028. /package/dist/{remoteclaw-root-CgNyrbxc.js → remoteclaw-root-E4-hmb4E.js} +0 -0
  1029. /package/dist/{render-CDCvpfhh.js → render-BhKzKdV0.js} +0 -0
  1030. /package/dist/{render-CJl4GK1B.js → render-e7fENCYH.js} +0 -0
  1031. /package/dist/{retry-cXXk2j6_.js → retry-BWv_fy4u.js} +0 -0
  1032. /package/dist/{runtime-guard-BS55uiSW.js → runtime-guard-Bhx-pb8_.js} +0 -0
  1033. /package/dist/{runtime-status-BhW7hP_U.js → runtime-status-CR9445g5.js} +0 -0
  1034. /package/dist/{secret-equal-CJzes24Z.js → secret-equal-D6AoXne1.js} +0 -0
  1035. /package/dist/{secret-equal-CQAmGfGc.js → secret-equal-DLnUuWM3.js} +0 -0
  1036. /package/dist/{secure-random-B3f7Ri2X.js → secure-random-CJtykx_p.js} +0 -0
  1037. /package/dist/{secure-random-BkZFG9cd.js → secure-random-CRVHgtmO.js} +0 -0
  1038. /package/dist/{stagger-B-_Wnofy.js → stagger--wvODnNe.js} +0 -0
  1039. /package/dist/{stagger-B2ORDHsP.js → stagger-BLmTO4cK.js} +0 -0
  1040. /package/dist/{status-C6YNwimj.js → status-1zVD-Clq.js} +0 -0
  1041. /package/dist/{status-yrDGXYZM.js → status-BtRY0nXQ.js} +0 -0
  1042. /package/dist/{strip-inbound-meta-0cvL6itU.js → strip-inbound-meta-zmUXypSS.js} +0 -0
  1043. /package/dist/{strip-inbound-meta-DjKcSFaW.js → strip-inbound-meta-zqtN9FTK.js} +0 -0
  1044. /package/dist/{table-ByMyHTh_.js → table-On3hkCqi.js} +0 -0
  1045. /package/dist/{targets-DOJXjN1U.js → targets-B46m7u5J.js} +0 -0
  1046. /package/dist/{targets-WSwPflb6.js → targets-D7PT_rdO.js} +0 -0
  1047. /package/dist/{text-format-mr5bZq0f.js → text-format-Ds92M9UT.js} +0 -0
  1048. /package/dist/{tokens-C8yGxAcR.js → tokens-Dw7ZdYwT.js} +0 -0
  1049. /package/dist/{usage-BXi79Rq6.js → usage-BIzKZ5dT.js} +0 -0
  1050. /package/dist/{usage-C1lHaofV.js → usage-BvZOzIC7.js} +0 -0
  1051. /package/dist/{usage-format-CD5jsZY1.js → usage-format-CmniSPCG.js} +0 -0
  1052. /package/dist/{usage-format-CRVpDVj1.js → usage-format-D_KQYQ-w.js} +0 -0
  1053. /package/dist/{widearea-dns-DFZMcfLf.js → widearea-dns-D01FFYZ8.js} +0 -0
  1054. /package/dist/{wsl-D28w2jQC.js → wsl-PDLKeX04.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-BTH7fB_v.js";
3
+ import { n as isLoopbackAddress, p as rawDataToString, r as isLoopbackHost } from "./net-DSkFMHJ8.js";
4
+ import { i as resolvePinnedHostnameWithPolicy } from "./ssrf-CJIdPXuS.js";
5
+ import { t as ensurePortAvailable } from "./ports-gRBeuUtp.js";
6
+ import { c as DEFAULT_REMOTECLAW_BROWSER_PROFILE_NAME, o as DEFAULT_REMOTECLAW_BROWSER_COLOR } from "./constants-DoYLsBmv.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 };