@seanhogg/builderforce-agents 2026.10.9 → 2026.10.11

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 (437) hide show
  1. package/dist/{acp-cli-DcKpPsJa.js → acp-cli-C23mmrQt.js} +1 -1
  2. package/dist/{acp-cli-BxH-eUDl.js → acp-cli-D6F-D5JB.js} +1 -1
  3. package/dist/{agent-cXF-aL0g.js → agent-B-2r1Lr_.js} +1 -1
  4. package/dist/{agent-wJmvciTM.js → agent-BI9qSnSp.js} +1 -1
  5. package/dist/{agentbot-cli-Cub3Abbt.js → agentbot-cli-Cyrhr5jX.js} +1 -1
  6. package/dist/{agentbot-cli-CTRvEfBp.js → agentbot-cli-sC55m-XS.js} +1 -1
  7. package/dist/{agents-Cr7WO73I.js → agents-CMThT_Bj.js} +1 -1
  8. package/dist/agents-Chz9nfm2.js +1 -0
  9. package/dist/{api-key-rotation-CHBjUwUJ.js → api-key-rotation-CyCi-UqR.js} +1 -1
  10. package/dist/{audio-preflight-CWFuqbao.js → audio-preflight-B411b2-y.js} +1 -1
  11. package/dist/{audio-preflight-F2e3Y4CW.js → audio-preflight-Cs4eUjQk.js} +1 -1
  12. package/dist/{audit-DGnEhZYe.js → audit-B-USV03V.js} +1 -1
  13. package/dist/{audit-DBjjjW93.js → audit-SKNPS-K2.js} +1 -1
  14. package/dist/auth-choice-CChsMy-F.js +1 -0
  15. package/dist/{auth-choice-9gZuOvPS.js → auth-choice-CCib_yVL.js} +1 -1
  16. package/dist/auth-choice-DSnpkrMc.js +1 -0
  17. package/dist/{auth-choice-BoZFVmEa.js → auth-choice-DzBqqq7i.js} +1 -1
  18. package/dist/auth-choice.apply-6f3Jb_lS.js +1 -0
  19. package/dist/{auth-choice.apply-CcatXiNo.js → auth-choice.apply-BgOXoS8X.js} +1 -1
  20. package/dist/{auth-choice.apply-BHLQeym9.js → auth-choice.apply-DBuvopiF.js} +1 -1
  21. package/dist/auth-choice.apply-DeXnLwVS.js +1 -0
  22. package/dist/auth-choice.apply.transformers-CZDuBaOr.js +1 -0
  23. package/dist/{auth-choice.apply.transformers-CIn3fs7K.js → auth-choice.apply.transformers-Df9l_jRz.js} +2 -2
  24. package/dist/{auth-choice.apply.transformers-1plI0MUg.js → auth-choice.apply.transformers-DmdxpHGz.js} +2 -2
  25. package/dist/{auth-choice.apply.transformers-D5OrjEHo.js → auth-choice.apply.transformers-dn7l6XyJ.js} +1 -1
  26. package/dist/{auth-json-D1ite-pW.js → auth-json-BB-VBn5E.js} +1 -1
  27. package/dist/{auth-json-CN3MWw57.js → auth-json-BVyos95N.js} +1 -1
  28. package/dist/{auth-json-HGu227VM.js → auth-json-CoOe4tEg.js} +1 -1
  29. package/dist/{auth-json-DZ7E50Y1.js → auth-json-wrKixZxh.js} +1 -1
  30. package/dist/{auth-profiles-C1VbcUOm.js → auth-profiles-pt7Tr4HA.js} +1 -1
  31. package/dist/{auth-token-CyVfNEQb.js → auth-token-BE67qxLw.js} +1 -1
  32. package/dist/{auth-token-CoQ5ePPl.js → auth-token-BPHeoBAW.js} +1 -1
  33. package/dist/{banner-DY-L7_eI.js → banner-ErBINvbk.js} +1 -1
  34. package/dist/{browser-cli-D2O94twn.js → browser-cli-BZc64-Xx.js} +1 -1
  35. package/dist/{browser-cli-CoRx_4iM.js → browser-cli-CoxVKdon.js} +1 -1
  36. package/dist/build-info.json +3 -3
  37. package/dist/{builderforce-BmrsVdFw.js → builderforce-B9187Tm9.js} +4 -4
  38. package/dist/{builderforce-Bwyw0GJ6.js → builderforce-BLqHwgeu.js} +4 -4
  39. package/dist/builderforce-api-DKgXl8BH.js +1 -0
  40. package/dist/builderforce-api-DcPAGsla.js +1 -0
  41. package/dist/builderforce-onboarding-CaPJZSvw.js +24 -0
  42. package/dist/builderforce-onboarding-RXFb0gct.js +24 -0
  43. package/dist/{builderforcellm-syscheck-CprBhARf.js → builderforcellm-syscheck-9ksvqHYX.js} +1 -1
  44. package/dist/{builderforcellm-syscheck-DrFJ638L.js → builderforcellm-syscheck-F5JMAr3p.js} +1 -1
  45. package/dist/{call-DxPWzV-k.js → call-BnAs_SER.js} +1 -1
  46. package/dist/{call-DFjBq0H2.js → call-D1Opj5ev.js} +1 -1
  47. package/dist/{call-DmAU4cRX.js → call-Du2LiaX6.js} +1 -1
  48. package/dist/{call-BbRf8gFM.js → call-T8ciwMTA.js} +1 -1
  49. package/dist/{channel-options-d4EwVQD0.js → channel-options-B7sRMp2v.js} +1 -1
  50. package/dist/{channel-options-CDixz6dT.js → channel-options-rhDBCtlp.js} +1 -1
  51. package/dist/{channel-web-DJa8JC9W.js → channel-web-CcCqUQrJ.js} +1 -1
  52. package/dist/{channels-cli-BgKy0MbE.js → channels-cli-BjnLW14T.js} +1 -1
  53. package/dist/{channels-cli-nNW0ezPM.js → channels-cli-DVWUBsmc.js} +1 -1
  54. package/dist/{chrome-BnEbJV3D.js → chrome-CFmcixaE.js} +1 -1
  55. package/dist/{chrome-a3X9_-nf.js → chrome-DXt86tmV.js} +1 -1
  56. package/dist/cli/daemon-cli.js +1 -1
  57. package/dist/{cli-DkWt7p2x.js → cli-BUqtALJK.js} +1 -1
  58. package/dist/{cli-C5MbcECQ.js → cli-K4reS6IS.js} +1 -1
  59. package/dist/{coding-tools.policy-NEPm7Mz1.js → coding-tools.policy-D9Ba8eDh.js} +1 -1
  60. package/dist/{coding-tools.policy-6qh9acJy.js → coding-tools.policy-ZhOdlcEI.js} +1 -1
  61. package/dist/{command-registry-COUcUWby.js → command-registry-B7uAoROP.js} +1 -1
  62. package/dist/{command-registry-4_K-lfW5.js → command-registry-CW16Mk2Y.js} +1 -1
  63. package/dist/{completion-cli-DlvHqL86.js → completion-cli-ZvXrCQqk.js} +1 -1
  64. package/dist/{completion-cli-B2qcVd6q.js → completion-cli-gyvx5ZXu.js} +1 -1
  65. package/dist/{completion-cli-DpFvU4Qn.js → completion-cli-n8UsdT91.js} +1 -1
  66. package/dist/{completion-cli-SdcQ-kQj.js → completion-cli-sKReGv3d.js} +1 -1
  67. package/dist/{config-_1Ca6jGb.js → config-BgV_FYSq.js} +1 -1
  68. package/dist/{config-toczWD3q.js → config-BpChMIJ6.js} +1 -1
  69. package/dist/{config-BTWlKwtB.js → config-D01EgOky.js} +1 -1
  70. package/dist/{config-27_FNba3.js → config-Dsnbi-a3.js} +1 -1
  71. package/dist/{config-cli-DeiQz5sY.js → config-cli-Bpo74mE5.js} +1 -1
  72. package/dist/{config-cli-CfczShaZ.js → config-cli-CF31O_5s.js} +1 -1
  73. package/dist/{config-guard-CD-Wq8kk.js → config-guard-BRUOk5YL.js} +1 -1
  74. package/dist/{config-guard-ClVl2FvD.js → config-guard-BUpQiSTW.js} +1 -1
  75. package/dist/{config-guard-B4in8l8I.js → config-guard-USCN-dq0.js} +1 -1
  76. package/dist/{config-validation-jpeXzoU3.js → config-validation-BGpSeNbh.js} +1 -1
  77. package/dist/{config-validation-C6u-z9bJ.js → config-validation-CdBJ-tZq.js} +1 -1
  78. package/dist/{configure-3W9C5LiT.js → configure-CWr61Ph2.js} +1 -1
  79. package/dist/configure-DhazB2qh.js +1 -0
  80. package/dist/{configure-BtXQW7ue.js → configure-DlcO1tWx.js} +1 -1
  81. package/dist/configure-MXheujvX.js +1 -0
  82. package/dist/{control-service-CJuuqNOE.js → control-service-2PkCt256.js} +1 -1
  83. package/dist/{control-service-qKfWP7VD.js → control-service-CcsbseZS.js} +1 -1
  84. package/dist/{control-service-izGyCWQs.js → control-service-qK1oboMo.js} +1 -1
  85. package/dist/{control-service-BbsswoMy.js → control-service-y3GYvIBg.js} +1 -1
  86. package/dist/{cron-cli-BrOM4s6N.js → cron-cli-BYu_lA8i.js} +1 -1
  87. package/dist/{cron-cli-CwtTX6pg.js → cron-cli-D_Og20iB.js} +1 -1
  88. package/dist/{daemon-cli-DyVsMf8p.js → daemon-cli-BNzthScZ.js} +1 -1
  89. package/dist/{daemon-cli-DlwOVDbt.js → daemon-cli-Bh3p0hui.js} +1 -1
  90. package/dist/{daemon-cli-Br0wu9xQ.js → daemon-cli-DxxKiKVN.js} +1 -1
  91. package/dist/{daemon-cli-DmicpZED.js → daemon-cli-emNxLkIw.js} +1 -1
  92. package/dist/{daemon-runtime-CtOr1ncS.js → daemon-runtime-9XitJmIL.js} +1 -1
  93. package/dist/{daemon-runtime-B4UjqdyJ.js → daemon-runtime-Dx800VUt.js} +1 -1
  94. package/dist/{deliver-BpLm3ktn.js → deliver--6OBF3LL.js} +1 -1
  95. package/dist/{deliver-9o_SE4ZK.js → deliver-ADpnRGRf.js} +1 -1
  96. package/dist/{deliver-D2VAVelb.js → deliver-BM6-damm.js} +1 -1
  97. package/dist/{deliver-BuZu68tp.js → deliver-CsG0cHbZ.js} +1 -1
  98. package/dist/{deps-CkJiJ6wc.js → deps-Dg_9rfXK.js} +1 -1
  99. package/dist/{devices-cli-BfXeDnbx.js → devices-cli-B8DXzcRP.js} +1 -1
  100. package/dist/{devices-cli-B9G6YOsS.js → devices-cli-BZkdWSx-.js} +1 -1
  101. package/dist/{directory-cli-BRCaiGOn.js → directory-cli-B78pAVI_.js} +1 -1
  102. package/dist/{directory-cli-D5ciZ5fY.js → directory-cli-CSaRkkL8.js} +1 -1
  103. package/dist/{dm-policy-shared-CRZpjRv0.js → dm-policy-shared-B9lW-AsK.js} +1 -1
  104. package/dist/{dm-policy-shared-Dhw9_6mi.js → dm-policy-shared-DYZ_T-az.js} +1 -1
  105. package/dist/{dns-cli-CgZ7oMcT.js → dns-cli-CLPGOFA1.js} +1 -1
  106. package/dist/{dns-cli-C4f4Tyij.js → dns-cli-dr5dHzfI.js} +1 -1
  107. package/dist/{doctor-completion-BSotFS6p.js → doctor-completion-94zme499.js} +1 -1
  108. package/dist/{doctor-completion-DVxbs-74.js → doctor-completion-CbF34DIH.js} +1 -1
  109. package/dist/{embedded-helpers-CEsr3aQ0.js → embedded-helpers-C9jpiwlw.js} +1 -1
  110. package/dist/{embedded-helpers-DK8_apW0.js → embedded-helpers-DdU30lmt.js} +1 -1
  111. package/dist/entry.js +1 -1
  112. package/dist/{exec-approvals-cli-YuOu7mVg.js → exec-approvals-cli-CS_uabo7.js} +1 -1
  113. package/dist/{exec-approvals-cli-BPFi82B0.js → exec-approvals-cli-ktB7M7WE.js} +1 -1
  114. package/dist/{gateway-cli-D2Bg1Um6.js → gateway-cli-CKcoLVMA.js} +5 -5
  115. package/dist/{gateway-cli-DFEo8C0z.js → gateway-cli-CuXBDBWe.js} +5 -5
  116. package/dist/{gateway-rpc-BXR_lVIx.js → gateway-rpc-B02y0PnE.js} +1 -1
  117. package/dist/{gateway-rpc-ByUcnQ7W.js → gateway-rpc-ff1RVb0_.js} +1 -1
  118. package/dist/{gemini-auth-CkD5jCPh.js → gemini-auth-DDR12zst.js} +1 -1
  119. package/dist/health-D0DZmCmh.js +1 -0
  120. package/dist/{health-yS3NRKvY.js → health-FO8MG5Ur.js} +1 -1
  121. package/dist/{health-DVo8a9yg.js → health-zrsgFZmR.js} +1 -1
  122. package/dist/{hooks-cli-B0lVee-j.js → hooks-cli-5Y4hnSX9.js} +1 -1
  123. package/dist/{hooks-cli-DsVmrQAG.js → hooks-cli-DpHZzRo2.js} +1 -1
  124. package/dist/index.js +2 -2
  125. package/dist/{ink-session-BitZ1wcY.js → ink-session-Dt9Q4iH-.js} +2 -2
  126. package/dist/{ink-session-CyAqXDla.js → ink-session-N8wCBzwk.js} +2 -2
  127. package/dist/{installs-CWd54ARy.js → installs-B_t2YXgq.js} +1 -1
  128. package/dist/{installs-C9A8QFiF.js → installs-DFiF4lGy.js} +1 -1
  129. package/dist/{io-3R_ZyUxB.js → io-BLBq4T2o.js} +1 -1
  130. package/dist/{io-DSIGyPrT.js → io-CXN4uLS2.js} +1 -1
  131. package/dist/{io-6jLoKffb.js → io-Ckd4NlvH.js} +1 -1
  132. package/dist/{io-CohJffHG.js → io-D9hC2aG0.js} +1 -1
  133. package/dist/{lifecycle-core-BpMvDXy1.js → lifecycle-core-D9Dg5Qps.js} +1 -1
  134. package/dist/{lifecycle-core-Dwb4gHjZ.js → lifecycle-core-uxjxTzFv.js} +1 -1
  135. package/dist/login-B3sDAgHb.js +1 -0
  136. package/dist/{login-C_ZdMOvv.js → login-CwwuaXtb.js} +1 -1
  137. package/dist/{login-DtDUyFO3.js → login-D1bVUPlv.js} +1 -1
  138. package/dist/{login-CEnjUo5c.js → login-GLDax56V.js} +1 -1
  139. package/dist/{login-qr-B9lyIZVD.js → login-qr-CbiUcBLy.js} +1 -1
  140. package/dist/{login-qr-BCBsxwhT.js → login-qr-Cp0YqK4e.js} +1 -1
  141. package/dist/{logs-cli-CdM5W3HE.js → logs-cli-Cy11HfSG.js} +1 -1
  142. package/dist/{logs-cli-jh5Xn3TD.js → logs-cli-nD36c-Y1.js} +1 -1
  143. package/dist/{manager-CRba8roB.js → manager-BeohB4-8.js} +1 -1
  144. package/dist/{manager-B3IJ_IKf.js → manager-CTTXDBt3.js} +1 -1
  145. package/dist/{manager-TGVy_fAb.js → manager-CoQMlcrf.js} +1 -1
  146. package/dist/{manager-DwywI_5-.js → manager-DSz61dXv.js} +1 -1
  147. package/dist/{memory-cli-BlayFTAM.js → memory-cli-BpAiRntI.js} +1 -1
  148. package/dist/{memory-cli-DRz4wtHk.js → memory-cli-CbkWGjRn.js} +1 -1
  149. package/dist/{memory-cli-PdyTQ84w.js → memory-cli-CrBMLM2P.js} +1 -1
  150. package/dist/{memory-cli-ivAs7q7v.js → memory-cli-CveeVOWH.js} +1 -1
  151. package/dist/{model-catalog-CQOdhMUY.js → model-catalog-B29yeBYS.js} +1 -1
  152. package/dist/{model-catalog-CiiFJX77.js → model-catalog-BeBXvbFm.js} +1 -1
  153. package/dist/model-catalog-CMKHKuBL.js +1 -0
  154. package/dist/{model-catalog-C6UrZ0uG.js → model-catalog-DjNiebr7.js} +1 -1
  155. package/dist/{model-discovery-C9Xm95uL.js → model-discovery-D0i1JpiL.js} +1 -1
  156. package/dist/{model-picker-swoSwauV.js → model-picker-CGDNPRPc.js} +1 -1
  157. package/dist/model-picker-CGEF8yhc.js +1 -0
  158. package/dist/model-picker-DeUNOC78.js +1 -0
  159. package/dist/{model-picker-BUePD7Zg.js → model-picker-EIhpfOZa.js} +1 -1
  160. package/dist/{model-selection-9bRFKBI_.js → model-selection-DG9J_VTz.js} +1 -1
  161. package/dist/{models-BNivsd2o.js → models-BjIzVQYX.js} +2 -2
  162. package/dist/{models-DQeSIY6M.js → models-JoqOgEF5.js} +1 -1
  163. package/dist/{models-cli-KokGgWeP.js → models-cli-B2zbchgs.js} +1 -1
  164. package/dist/{models-cli-BcNxU4P_.js → models-cli-CkFdc8NN.js} +2 -2
  165. package/dist/{node-cli-DIMh3X2F.js → node-cli-CXnuxiBq.js} +1 -1
  166. package/dist/{node-cli-EmTU-Gh0.js → node-cli-oVyjVnb7.js} +1 -1
  167. package/dist/{nodes-cli-BX8TznFK.js → nodes-cli-BBVotxNt.js} +1 -1
  168. package/dist/{nodes-cli-DyHovdAc.js → nodes-cli-DVMBSUhK.js} +1 -1
  169. package/dist/{onboard-DfMVh1bM.js → onboard-BItclJp0.js} +1 -1
  170. package/dist/{onboard-BVmZ4jMw.js → onboard-CqvHIvKj.js} +1 -1
  171. package/dist/{onboard-auth.credentials-yagR-VMG.js → onboard-auth.credentials-DneFSdYg.js} +1 -1
  172. package/dist/{onboard-auth.credentials-BuT-etnE.js → onboard-auth.credentials-DpitLlzw.js} +1 -1
  173. package/dist/onboard-channels-B91m5S3w.js +1 -0
  174. package/dist/onboard-channels-BOoPtYbF.js +1 -0
  175. package/dist/{onboard-channels-B6QDFkkK.js → onboard-channels-Dn0u5C-C.js} +1 -1
  176. package/dist/{onboard-channels-C8FCFn29.js → onboard-channels-vhtccaIV.js} +1 -1
  177. package/dist/onboard-custom-BN0uzSq_.js +1 -0
  178. package/dist/{onboard-custom-D1nd8Hlu.js → onboard-custom-BYIza2e7.js} +1 -1
  179. package/dist/onboard-custom-CCFthqto.js +1 -0
  180. package/dist/{onboard-custom-C_BI0ZXn.js → onboard-custom-Ckf0xKXY.js} +1 -1
  181. package/dist/{onboard-helpers-CGlLpagb.js → onboard-helpers-B8I5AVyb.js} +1 -1
  182. package/dist/{onboard-helpers-CckrS8_K.js → onboard-helpers-Ce_c4Raj.js} +1 -1
  183. package/dist/{onboard-helpers-Cf5dNq7-.js → onboard-helpers-CiHzTaFX.js} +1 -1
  184. package/dist/{onboard-helpers-BvIZ4-R5.js → onboard-helpers-DC-nMl-V.js} +1 -1
  185. package/dist/{onboard-interactive-DYJttZ2w.js → onboard-interactive-Cl2K3EYn.js} +1 -1
  186. package/dist/{onboard-interactive-zgjmwJz-.js → onboard-interactive-JNux9zfA.js} +1 -1
  187. package/dist/{onboard-interactive-B3-KBZbZ.js → onboard-interactive-J_ObFzeW.js} +1 -1
  188. package/dist/{onboard-interactive-Dc_7URYb.js → onboard-interactive-OUNsvlh0.js} +1 -1
  189. package/dist/{onboard-remote-D5lR2lVm.js → onboard-remote-0-q7MG9t.js} +1 -1
  190. package/dist/{onboard-remote-BmSyHww1.js → onboard-remote-CgAAEZpq.js} +1 -1
  191. package/dist/{onboard-remote-CzzQMZ3X.js → onboard-remote-DKXHDdBD.js} +1 -1
  192. package/dist/{onboard-remote-DcuX8b2g.js → onboard-remote-cB8j9RG-.js} +1 -1
  193. package/dist/{onboard-skills-ILHIeg1R.js → onboard-skills-47upVdA2.js} +1 -1
  194. package/dist/{onboard-skills-BPlNN_-T.js → onboard-skills-9Um4TL2x.js} +1 -1
  195. package/dist/{onboard-skills-DIhjDMom.js → onboard-skills-DhCmvhJY.js} +1 -1
  196. package/dist/{onboard-skills-CI1OtWsE.js → onboard-skills-mI2kfvdT.js} +1 -1
  197. package/dist/{onboarding-D4-HDbmU.js → onboarding-BSENgR9C.js} +5 -5
  198. package/dist/{onboarding-CP9rrz8y.js → onboarding-CIaZLNc1.js} +5 -5
  199. package/dist/{onboarding.finalize-C2kZi7F0.js → onboarding.finalize-BwOpvoPE.js} +1 -1
  200. package/dist/{onboarding.finalize-BfWXPgX7.js → onboarding.finalize-yMK-g7Uy.js} +1 -1
  201. package/dist/{onboarding.gateway-config-Cd7_bXVs.js → onboarding.gateway-config-Kn1O-QFl.js} +1 -1
  202. package/dist/{onboarding.gateway-config-Bd8HJkso.js → onboarding.gateway-config-huOjFf8D.js} +1 -1
  203. package/dist/{openai-model-default-Cp3nf21W.js → openai-model-default-CH2-2Hvk.js} +1 -1
  204. package/dist/{openai-model-default-BMRrqTmH.js → openai-model-default-pfoEzWYJ.js} +1 -1
  205. package/dist/{outbound-BRInCJD9.js → outbound-BdeHcMAo.js} +1 -1
  206. package/dist/{outbound-CAtBpFoD.js → outbound-BylJYD7n.js} +1 -1
  207. package/dist/{outbound-OI-t5zZ0.js → outbound-CAirtWr1.js} +1 -1
  208. package/dist/{outbound-CnIvOJlU.js → outbound-VNcvF2MG.js} +1 -1
  209. package/dist/{outbound-send-deps-m6DqOma_.js → outbound-send-deps-B3Lg-uqF.js} +1 -1
  210. package/dist/{pairing-cli-CEr0yEsc.js → pairing-cli-5RtPvz2i.js} +1 -1
  211. package/dist/{pairing-cli-Dxfoni-F.js → pairing-cli-C_Mj6Dy4.js} +1 -1
  212. package/dist/{pairing-labels-3j_iRYOO.js → pairing-labels-BJPrScRl.js} +1 -1
  213. package/dist/{pairing-labels-BW5jQZlr.js → pairing-labels-oA-nKTaW.js} +1 -1
  214. package/dist/{pairing-store-QDb6lhIU.js → pairing-store-YRy7EBgI.js} +1 -1
  215. package/dist/{pairing-store-CbvMJhD3.js → pairing-store-ti3FEkmr.js} +1 -1
  216. package/dist/{plugin-auto-enable-BV9K9Vhr.js → plugin-auto-enable-Cupr4wbt.js} +1 -1
  217. package/dist/{plugin-auto-enable-DDry2fA6.js → plugin-auto-enable-D8gKiE3F.js} +1 -1
  218. package/dist/plugin-registry-BEfyc2f_.js +1 -0
  219. package/dist/{plugin-registry-C-_GA65s.js → plugin-registry-BoPaef5I.js} +1 -1
  220. package/dist/{plugin-registry-SAdxNUwm.js → plugin-registry-CxnuHO_n.js} +1 -1
  221. package/dist/plugin-registry-D0tIqo8L.js +1 -0
  222. package/dist/plugin-sdk/{accounts-Cy3WCbWg.js → accounts-BwreSNAR.js} +1 -1
  223. package/dist/plugin-sdk/{active-listener-DVWVNlT9.js → active-listener-DpQ7aGYd.js} +1 -1
  224. package/dist/plugin-sdk/agent-runtime/src/infra/workflow-telemetry.d.ts +12 -1
  225. package/dist/plugin-sdk/{agent-scope-DgKN27hJ.js → agent-scope-BQByW0cD.js} +1 -1
  226. package/dist/plugin-sdk/{api-key-rotation-ftXf7mBZ.js → api-key-rotation-7YdImWrh.js} +1 -1
  227. package/dist/plugin-sdk/{audio-preflight-CfTmmeS-.js → audio-preflight-EbkaATDO.js} +1 -1
  228. package/dist/plugin-sdk/{auth-json-BrNBg87n.js → auth-json-DK6qod1_.js} +1 -1
  229. package/dist/plugin-sdk/{bindings-CH-YLOLC.js → bindings-CDEzl4kl.js} +1 -1
  230. package/dist/plugin-sdk/{channel-web-B6rg0Rbf.js → channel-web-D2KuONp0.js} +1 -1
  231. package/dist/plugin-sdk/{chrome-CuXP-hes.js → chrome-SOXFIkUM.js} +1 -1
  232. package/dist/plugin-sdk/{chunk-C94IAOuf.js → chunk-cW0POl22.js} +1 -1
  233. package/dist/plugin-sdk/{command-format-B3XMq_73.js → command-format-CAX9XFjI.js} +1 -1
  234. package/dist/plugin-sdk/{common-n0l_XN-S.js → common-BxEWhN2X.js} +1 -1
  235. package/dist/plugin-sdk/{config-DsXZsCkJ.js → config-v1EU9Ll8.js} +2 -2
  236. package/dist/plugin-sdk/{fetch-B-GxSYRO.js → fetch-DH0Y8iyO.js} +1 -1
  237. package/dist/plugin-sdk/index.js +1 -1
  238. package/dist/plugin-sdk/{login-_my8QwPP.js → login-d1zBgykF.js} +1 -1
  239. package/dist/plugin-sdk/{login-qr-BaePtXuG.js → login-qr-B6exvQnN.js} +1 -1
  240. package/dist/plugin-sdk/{manager-BsC-4ymy.js → manager-BH_bmGds.js} +1 -1
  241. package/dist/plugin-sdk/{markdown-tables-BUfhHgfs.js → markdown-tables-Epim9b-0.js} +1 -1
  242. package/dist/plugin-sdk/{message-channel-CuZ2xOAM.js → message-channel-sBPQc_-T.js} +1 -1
  243. package/dist/plugin-sdk/{model-catalog-yuiXVcmw.js → model-catalog-cXsza5GU.js} +1 -1
  244. package/dist/plugin-sdk/{model-selection-BtgvnqB5.js → model-selection-K82MAGlL.js} +1 -1
  245. package/dist/plugin-sdk/{outbound-D_attiyO.js → outbound-Chn_H1O7.js} +1 -1
  246. package/dist/plugin-sdk/{plugins-BdkC9v5E.js → plugins-CaUOZBVb.js} +1 -1
  247. package/dist/plugin-sdk/{pw-ai-A7Rathx6.js → pw-ai-BIiJF7ZD.js} +1 -1
  248. package/dist/plugin-sdk/{qmd-manager-Dxn0jCpE.js → qmd-manager-BRe5fGZw.js} +1 -1
  249. package/dist/plugin-sdk/{registry-CZHRcH-q.js → registry-DJq2Cvo9.js} +1 -1
  250. package/dist/plugin-sdk/{render-CuA_WRX5.js → render-BUCRXPIk.js} +1 -1
  251. package/dist/plugin-sdk/{replies-DmLfO-pg.js → replies-Cz5OD3qN.js} +1 -1
  252. package/dist/plugin-sdk/{reply-3-ne-N_7.js → reply-D5Uk7pUv.js} +9 -9
  253. package/dist/plugin-sdk/{reply-prefix-w7kAvH11.js → reply-prefix-CCymsmsP.js} +1 -1
  254. package/dist/plugin-sdk/{resolve-route-0sbvl4ZN.js → resolve-route-DN1J7Wyc.js} +1 -1
  255. package/dist/plugin-sdk/{runner-4UfrAQnx.js → runner-CYkuO7Fh.js} +4 -4
  256. package/dist/plugin-sdk/{session-BB-yfDWx.js → session-D5jHDo78.js} +1 -1
  257. package/dist/plugin-sdk/{sqlite-JjFgDV-H.js → sqlite-BlMLqMl8.js} +1 -1
  258. package/dist/plugin-sdk/{subsystem-D0Ril4rt.js → subsystem-COTa5Ly_.js} +1 -1
  259. package/dist/plugin-sdk/{tool-images-WRTP95FT.js → tool-images-DSpchb4x.js} +1 -1
  260. package/dist/plugin-sdk/{tool-loop-detection-sC_rhJfb.js → tool-loop-detection-BP6u-mbh.js} +1 -1
  261. package/dist/plugin-sdk/web-BbganhKi.js +1 -0
  262. package/dist/plugin-sdk/{whatsapp-actions-ThxQ5niy.js → whatsapp-actions-CZUqxmP1.js} +1 -1
  263. package/dist/{plugins-BIG8NDB9.js → plugins-Cx29kkDj.js} +1 -1
  264. package/dist/{plugins-iAq-Gr8l.js → plugins-DJqou2hi.js} +1 -1
  265. package/dist/{plugins-cli-CpaVUv_r.js → plugins-cli-Bu-A8aGy.js} +1 -1
  266. package/dist/{plugins-cli-CPkSgvdL.js → plugins-cli-CGFsQDVW.js} +1 -1
  267. package/dist/{program-context-BCwL3wlM.js → program-context-ClBa4lUj.js} +1 -1
  268. package/dist/{program-2w7Ue902.js → program-vVCzU0cH.js} +2 -2
  269. package/dist/{prompt-select-styled-hB_nLOn1.js → prompt-select-styled-BJPGccTJ.js} +1 -1
  270. package/dist/{prompt-select-styled-Dd5swW2b.js → prompt-select-styled-BK74z6FF.js} +1 -1
  271. package/dist/{provider-auth-helpers-BpTnp2Yr.js → provider-auth-helpers-B84m5VMc.js} +1 -1
  272. package/dist/{provider-auth-helpers-CJTG_tVx.js → provider-auth-helpers-hNwpK_hl.js} +1 -1
  273. package/dist/{provider-dispatcher-TWwBT2aH.js → provider-dispatcher-BjR5DE3O.js} +1 -1
  274. package/dist/provider-dispatcher-DgOeVjcL.js +1 -0
  275. package/dist/{provider-usage-BdrU4cIE.js → provider-usage-B-wPVN_j.js} +1 -1
  276. package/dist/{provider-usage-Bn4ZrnU7.js → provider-usage-B8lFHp0K.js} +1 -1
  277. package/dist/{push-apns-C4sJnHbO.js → push-apns-BTPPvY81.js} +1 -1
  278. package/dist/{push-apns-CiD3rrVv.js → push-apns-CscYUS0D.js} +1 -1
  279. package/dist/{pw-ai-DSEj1QrV.js → pw-ai-CLS_VZ8p.js} +1 -1
  280. package/dist/{pw-ai-dNZY-qBs.js → pw-ai-D5og_rIf.js} +1 -1
  281. package/dist/{qr-cli-qr-SFLZW.js → qr-cli-CAquM1Zk.js} +1 -1
  282. package/dist/{qr-cli-B45dCV0o.js → qr-cli-GsR8n1cm.js} +1 -1
  283. package/dist/{qr-cli-CMlAIzrD.js → qr-cli-kAKgaL-T.js} +1 -1
  284. package/dist/{qr-cli-CySNSEFj.js → qr-cli-uyxNf-cQ.js} +1 -1
  285. package/dist/{register.agent-BA6LIJSb.js → register.agent-BwTCfyeJ.js} +1 -1
  286. package/dist/{register.agent-D2uCH8jZ.js → register.agent-Dhdo3_7k.js} +1 -1
  287. package/dist/register.configure-B0m0G3ot.js +1 -0
  288. package/dist/register.configure-D3cbjmTz.js +1 -0
  289. package/dist/{register.maintenance-BELfCO_C.js → register.maintenance-C6ocMld2.js} +1 -1
  290. package/dist/{register.maintenance-DukWFS_D.js → register.maintenance-CbE2zSyc.js} +1 -1
  291. package/dist/{register.message-DiZRRAE5.js → register.message-Jn4u533_.js} +1 -1
  292. package/dist/{register.message-8iGDhO8h.js → register.message-Tu1hlM0m.js} +1 -1
  293. package/dist/{register.onboard-B9DMNfHE.js → register.onboard-B34211N6.js} +1 -1
  294. package/dist/{register.onboard-Dt7rzAq-.js → register.onboard-S1d2WAE4.js} +1 -1
  295. package/dist/{register.setup-CSF-2ImP.js → register.setup-CJPyAwCQ.js} +1 -1
  296. package/dist/{register.setup-BRRVPrx7.js → register.setup-Sg8f3nsH.js} +1 -1
  297. package/dist/{register.status-health-sessions-D6wdwPwV.js → register.status-health-sessions-BlgVxoZ4.js} +1 -1
  298. package/dist/{register.status-health-sessions-ZSufYw5j.js → register.status-health-sessions-DwADQJ74.js} +1 -1
  299. package/dist/{register.subclis-4eDV9jKH.js → register.subclis-C9V_M-Lk.js} +1 -1
  300. package/dist/{register.subclis-Cr9DoYcv.js → register.subclis-pWn9XObB.js} +1 -1
  301. package/dist/{replies-DbkT_5BV.js → replies-BOGMDhSN.js} +1 -1
  302. package/dist/{replies-CzV-RFUG.js → replies-BXbV02ik.js} +1 -1
  303. package/dist/{replies-DIBQzxGp.js → replies-CUv671JF.js} +1 -1
  304. package/dist/{replies-Bd2RPZwQ.js → replies-DokbEfJD.js} +1 -1
  305. package/dist/{reply-Cd3vVnD7.js → reply-GY1C8tcv.js} +10 -10
  306. package/dist/{routes-BzfLvF8W.js → routes-DZntyPY6.js} +1 -1
  307. package/dist/{routes-lclJHOYY.js → routes-_iZdG1Fo.js} +1 -1
  308. package/dist/{rpc-BLqXRn5R.js → rpc-CbUnwStf.js} +1 -1
  309. package/dist/{rpc-DcQNGQlj.js → rpc-Cwm4gchc.js} +1 -1
  310. package/dist/{run-main-DLcDEJgv.js → run-main-DQMbgbcF.js} +1 -1
  311. package/dist/{runner-DwWmciCt.js → runner-Cu9NJouV.js} +1 -1
  312. package/dist/{runner-SxCr9kXD.js → runner-eTTUbLAK.js} +1 -1
  313. package/dist/{sandbox-BZibn6PX.js → sandbox-C4AKi2EX.js} +1 -1
  314. package/dist/{sandbox-z9t_PRf9.js → sandbox-DvKMuAXL.js} +1 -1
  315. package/dist/{sandbox-cli-BtGs0dBR.js → sandbox-cli-C0LhzYq_.js} +1 -1
  316. package/dist/{sandbox-cli-B8FpLgyY.js → sandbox-cli-De0iaoHB.js} +1 -1
  317. package/dist/{security-cli-D8Q8I7fn.js → security-cli-BvEfiO8m.js} +1 -1
  318. package/dist/{security-cli-IIMR7Pb4.js → security-cli-BzsQ0XQh.js} +1 -1
  319. package/dist/{send-DnMzjS7L.js → send-2dRKMWtl.js} +1 -1
  320. package/dist/{send-DerUBvXW.js → send-Aw8wK3vK.js} +1 -1
  321. package/dist/{send-BvroeIQ6.js → send-B7H8Ae5j.js} +1 -1
  322. package/dist/{send-4d9NswaD.js → send-BP5osGBo.js} +1 -1
  323. package/dist/{send-BU_-BGmf.js → send-BVal50Bi.js} +1 -1
  324. package/dist/{send-CxG2suVM.js → send-Bbo7TXLx.js} +1 -1
  325. package/dist/{send-CBBziNqM.js → send-BxoVLIy1.js} +1 -1
  326. package/dist/{send-dDpSBSBo.js → send-COKUbcqs.js} +1 -1
  327. package/dist/{send--12DIueA.js → send-CTw3PqN4.js} +1 -1
  328. package/dist/{send-UFtylOiq.js → send-CYGOPcKq.js} +1 -1
  329. package/dist/{send-DyF1Xy9K.js → send-ChGpVO3O.js} +1 -1
  330. package/dist/{send-Q-uTkSFE.js → send-Cqea2UFo.js} +1 -1
  331. package/dist/{send-j15662lv.js → send-CrFWgJKx.js} +1 -1
  332. package/dist/{send-gDb60Hk-.js → send-CwK8QBR3.js} +1 -1
  333. package/dist/{send-CceNWtYE.js → send-DqR7Rxzm.js} +1 -1
  334. package/dist/{send-CJHXQvVl.js → send-DxwfUIN-.js} +1 -1
  335. package/dist/{send-ByCVQQVz.js → send-KgN1P41U.js} +1 -1
  336. package/dist/{send-B1rJLLpr.js → send-bNp87SIq.js} +1 -1
  337. package/dist/{send-B_1BtyfA.js → send-kkm_zrHQ.js} +1 -1
  338. package/dist/{send-BJDzwYJN.js → send-l3ge4wkC.js} +1 -1
  339. package/dist/{server-context-DJZT7Upf.js → server-context-CQ2v4BAx.js} +1 -1
  340. package/dist/{server-context-owOmmyUM.js → server-context-CttALzrW.js} +1 -1
  341. package/dist/{server-node-events-54d8Rmjl.js → server-node-events-CIMO6Vae.js} +1 -1
  342. package/dist/{server-node-events-CSFVqgxX.js → server-node-events-iCF2ngcN.js} +1 -1
  343. package/dist/{session-BzQdcCqN.js → session-BJHsjD3z.js} +1 -1
  344. package/dist/{session-4FpEJvkE.js → session-C_b1ttHJ.js} +1 -1
  345. package/dist/{session-dirs-OxQuIvJW.js → session-dirs-Bvbgw0GC.js} +1 -1
  346. package/dist/{session-dirs-D_ARkyw0.js → session-dirs-DHaoq7zc.js} +1 -1
  347. package/dist/{session-utils-GMvum00v.js → session-utils-Dxou8SbO.js} +1 -1
  348. package/dist/{sessions-Bl1wwotX.js → sessions-BA8Se_bT.js} +1 -1
  349. package/dist/{sessions-CdanN_ZI.js → sessions-BuZVmOWt.js} +1 -1
  350. package/dist/{sessions-B5dwRhUC.js → sessions-DvbW0FNJ.js} +1 -1
  351. package/dist/{sessions-B1t7qeEn.js → sessions-DvqsIg0M.js} +1 -1
  352. package/dist/{shared-xj-xaKFi.js → shared-BBOiNdjf.js} +1 -1
  353. package/dist/{shared-BPN3qd7G.js → shared-C2orjbTD.js} +1 -1
  354. package/dist/{skill-scanner-U3AJgjqc.js → skill-scanner-BEvov9QH.js} +1 -1
  355. package/dist/{skill-scanner-DEmbPsRh.js → skill-scanner-OTLeRZ_p.js} +1 -1
  356. package/dist/{skills-cli-CIdnXa3B.js → skills-cli-C1BOgB3y.js} +1 -1
  357. package/dist/{skills-cli-BXbGr7vl.js → skills-cli-CFT2Aq5R.js} +1 -1
  358. package/dist/{skills-install-Btw_GHbI.js → skills-install-LlKntDHa.js} +1 -1
  359. package/dist/{skills-install-DMHQRpIl.js → skills-install-tx5Mahav.js} +1 -1
  360. package/dist/{status-DXaDS_0w.js → status-Bh8V7kjv.js} +1 -1
  361. package/dist/{status-BxeKmkVr.js → status-BtBHmhQh.js} +1 -1
  362. package/dist/{status-BkcmeZg6.js → status-CpwD4y9B.js} +1 -1
  363. package/dist/status-CqaTmyih.js +1 -0
  364. package/dist/{status-DouJcFzf.js → status-yXz8PUbL.js} +1 -1
  365. package/dist/{status.update-C9iy31xr.js → status.update-CdgsLBPg.js} +1 -1
  366. package/dist/{status.update-KYyRSDZY.js → status.update-hzMro-BT.js} +1 -1
  367. package/dist/{subagent-registry-Dr20nzwk.js → subagent-registry-CaRUNwCj.js} +1 -1
  368. package/dist/{subagent-registry-CyGxu3kP.js → subagent-registry-DDEN4oJi.js} +10 -10
  369. package/dist/{subagent-registry-BiXkIDeh.js → subagent-registry-DYYfeIc3.js} +1 -1
  370. package/dist/{system-cli-b4YgXPHv.js → system-cli-4aii1JYf.js} +1 -1
  371. package/dist/{system-cli-C7YzJeP4.js → system-cli-CfkDD3FV.js} +1 -1
  372. package/dist/{tui-DylWbrDx.js → tui-DnVRxfI8.js} +2 -2
  373. package/dist/{tui-BwWMByVp.js → tui-JfWoLGIV.js} +2 -2
  374. package/dist/{tui-cli-C_TTgabr.js → tui-cli-CGjg2Eb5.js} +1 -1
  375. package/dist/{tui-cli-Bh1V8-w9.js → tui-cli-cd7Efw5u.js} +1 -1
  376. package/dist/{tui-setup-check-DJZCJokQ.js → tui-setup-check-BEHm9wwo.js} +1 -1
  377. package/dist/{tui-setup-check-BABAyl-e.js → tui-setup-check-DK8vdhLI.js} +1 -1
  378. package/dist/{tui-stream-assembler-ign_cPkv.js → tui-stream-assembler-8ud9oyMK.js} +1 -1
  379. package/dist/{tui-stream-assembler-q9GANTDr.js → tui-stream-assembler-Br15rhRH.js} +1 -1
  380. package/dist/{update-BUzcmoDf.js → update-B5yKFeGO.js} +1 -1
  381. package/dist/{update-D6U-V8Au.js → update-DodoQDCk.js} +1 -1
  382. package/dist/{update-cli-DUrUIrYQ.js → update-cli-CfJJcSUS.js} +1 -1
  383. package/dist/{update-cli-CA3LuuJ7.js → update-cli-x8Ocbf-0.js} +1 -1
  384. package/dist/{usage-cli-CfEg1_NZ.js → usage-cli-CN7L1YRG.js} +1 -1
  385. package/dist/{usage-cli-CpbYMXxS.js → usage-cli-CQmokGkG.js} +1 -1
  386. package/dist/{web-D-NSyF6b.js → web-BXLk9UT2.js} +1 -1
  387. package/dist/web-Btgs8oWv.js +1 -0
  388. package/dist/{webhooks-cli-B_f61rq7.js → webhooks-cli-DIo8p3lk.js} +1 -1
  389. package/dist/{webhooks-cli-Bi0t3w6P.js → webhooks-cli-DhxEtiFt.js} +1 -1
  390. package/dist/{whatsapp-actions-JbF2MrTV.js → whatsapp-actions-B7r9AyZN.js} +1 -1
  391. package/dist/{whatsapp-actions-BkCMhD9X.js → whatsapp-actions-DX2QU6Gs.js} +1 -1
  392. package/dist/{with-timeout-T07SJo4N.js → with-timeout-B_p5pWDv.js} +1 -1
  393. package/dist/{with-timeout-Bwq-GyUQ.js → with-timeout-GDLpcjW7.js} +1 -1
  394. package/dist/workflow-telemetry-BMTg5lPd.js +1 -0
  395. package/dist/workflow-telemetry-Bg8MVUr_.js +2 -0
  396. package/dist/workflow-telemetry-Do1UsYwM.js +1 -0
  397. package/dist/workflow-telemetry-DqBPhVL4.js +2 -0
  398. package/package.json +1 -1
  399. package/dist/agents-DsZ5vLKE.js +0 -1
  400. package/dist/auth-choice-Btd2Rxxd.js +0 -1
  401. package/dist/auth-choice-CVV9wRFN.js +0 -1
  402. package/dist/auth-choice.apply-BOK9XRCQ.js +0 -1
  403. package/dist/auth-choice.apply-Cv-BiV5Q.js +0 -1
  404. package/dist/auth-choice.apply.transformers-CXywS3GZ.js +0 -1
  405. package/dist/builderforce-onboarding-Dq6VUSKZ.js +0 -24
  406. package/dist/builderforce-onboarding-DuUfZ6oL.js +0 -24
  407. package/dist/configure-CWBBFk3F.js +0 -1
  408. package/dist/configure-fHVOAucW.js +0 -1
  409. package/dist/health-GLcAfqDz.js +0 -1
  410. package/dist/login-CPyEf5h6.js +0 -1
  411. package/dist/model-catalog-J7R-tJDu.js +0 -1
  412. package/dist/model-picker-D2bcWrtu.js +0 -1
  413. package/dist/model-picker-DO1HtEEm.js +0 -1
  414. package/dist/onboard-channels-CmqKsAoW.js +0 -1
  415. package/dist/onboard-channels-Db0P4iWl.js +0 -1
  416. package/dist/onboard-custom-BABqIYa4.js +0 -1
  417. package/dist/onboard-custom-VpW3UC8u.js +0 -1
  418. package/dist/plugin-registry-B-UOeWqM.js +0 -1
  419. package/dist/plugin-registry-BjMr3yXM.js +0 -1
  420. package/dist/plugin-sdk/web-CThgoHQp.js +0 -1
  421. package/dist/provider-dispatcher-C4nHaNqn.js +0 -1
  422. package/dist/register.configure-DAL38e7r.js +0 -1
  423. package/dist/register.configure-DZG7-WVi.js +0 -1
  424. package/dist/status-BTYqHVha.js +0 -1
  425. package/dist/web-P6QsgmSD.js +0 -1
  426. package/dist/workflow-telemetry-B8Im0mPk.js +0 -1
  427. package/dist/workflow-telemetry-DLEnm5TI.js +0 -2
  428. package/dist/workflow-telemetry-Dc_oseV7.js +0 -2
  429. package/dist/workflow-telemetry-Dkm3mofI.js +0 -1
  430. /package/dist/{devtools-CI7JyCXv.js → devtools-Cg4F-l9O.js} +0 -0
  431. /package/dist/{devtools-eMFaIsAT.js → devtools-Dl2DACSO.js} +0 -0
  432. /package/dist/{github-copilot-token-D3gHtNUu.js → github-copilot-token-BlyiXyTy.js} +0 -0
  433. /package/dist/{github-copilot-token-DHP2kAiN.js → github-copilot-token-D5sB2AUI.js} +0 -0
  434. /package/dist/{onboard-hooks-Cenav0eW.js → onboard-hooks-BaOSgxs9.js} +0 -0
  435. /package/dist/{onboard-hooks-Ce20rwpW.js → onboard-hooks-fO5eeDe_.js} +0 -0
  436. /package/dist/{qmd-manager-DVd_aWEV.js → qmd-manager-BgplOjHN.js} +0 -0
  437. /package/dist/{qmd-manager-keHvLmvP.js → qmd-manager-COUi_Fqb.js} +0 -0
@@ -1,2 +1,2 @@
1
- import{g as resolveStateDir}from"./paths-BHg-VHB4.js";import{k as isVerbose}from"./utils-BP60e80M.js";import{s as shouldLogSubsystemToConsole,t as createSubsystemLogger}from"./subsystem-C4b1Von0.js";import{C as parseAgentSessionKey}from"./session-key-CksCYipj.js";import{Dn as readJsonFile,En as createAsyncLock,On as writeJsonAtomic,Yn as estimateBase64DecodedBytes,x as sniffMimeFromBase64}from"./subagent-registry-CyGxu3kP.js";import{n as redactSensitiveText,t as getDefaultRedactPatterns}from"./redact-CgO7wehS.js";import path from"node:path";import chalk from"chalk";import{createHash,createPrivateKey,sign}from"node:crypto";import fs from"node:fs/promises";import http2 from"node:http2";let gatewayWsLogStyle=`auto`;function setGatewayWsLogStyle(style){gatewayWsLogStyle=style}function getGatewayWsLogStyle(){return gatewayWsLogStyle}const UUID_RE=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,WS_LOG_REDACT_OPTIONS={mode:`tools`,patterns:getDefaultRedactPatterns()},wsInflightCompact=new Map;let wsLastCompactConnId;const wsInflightOptimized=new Map,wsInflightSince=new Map,wsLog=createSubsystemLogger(`gateway/ws`),WS_META_SKIP_KEYS=new Set([`connId`,`id`,`method`,`ok`,`event`]);function collectWsRestMeta(meta){let restMeta=[];if(!meta)return restMeta;for(let[key,value]of Object.entries(meta))value!==void 0&&(WS_META_SKIP_KEYS.has(key)||restMeta.push(`${chalk.dim(key)}=${formatForLog(value)}`));return restMeta}function buildWsHeadline(params){if((params.kind===`req`||params.kind===`res`)&&params.method)return chalk.bold(params.method);if(params.kind===`event`&&params.event)return chalk.bold(params.event)}function buildWsStatusToken(kind,ok){if(!(kind!==`res`||ok===void 0))return ok?chalk.greenBright(`✓`):chalk.redBright(`✗`)}function logWsInfoLine(params){let tokens=[params.prefix,params.statusToken,params.headline,params.durationToken,...params.restMeta,...params.trailing].filter(t=>!!t);wsLog.info(tokens.join(` `))}function shouldLogWs(){return shouldLogSubsystemToConsole(`gateway/ws`)}function shortId(value){let s=value.trim();return UUID_RE.test(s)?`${s.slice(0,8)}…${s.slice(-4)}`:s.length<=24?s:`${s.slice(0,12)}…${s.slice(-4)}`}function formatForLog(value){try{if(value instanceof Error){let parts=[];value.name&&parts.push(value.name),value.message&&parts.push(value.message);let code=`code`in value&&(typeof value.code==`string`||typeof value.code==`number`)?String(value.code):``;code&&parts.push(`code=${code}`);let combined=parts.filter(Boolean).join(`: `).trim();if(combined)return combined.length>240?`${combined.slice(0,240)}...`:combined}if(value&&typeof value==`object`){let rec=value;if(typeof rec.message==`string`&&rec.message.trim()){let name=typeof rec.name==`string`?rec.name.trim():``,code=typeof rec.code==`string`||typeof rec.code==`number`?String(rec.code):``,parts=[name,rec.message.trim()].filter(Boolean);code&&parts.push(`code=${code}`);let combined=parts.join(`: `).trim();return combined.length>240?`${combined.slice(0,240)}...`:combined}}let str=typeof value==`string`||typeof value==`number`?String(value):JSON.stringify(value);if(!str)return``;let redacted=redactSensitiveText(str,WS_LOG_REDACT_OPTIONS);return redacted.length>240?`${redacted.slice(0,240)}...`:redacted}catch{return String(value)}}function compactPreview(input,maxLen=160){let oneLine=input.replace(/\s+/g,` `).trim();return oneLine.length<=maxLen?oneLine:`${oneLine.slice(0,Math.max(0,maxLen-1))}…`}function summarizeAgentEventForWsLog(payload){if(!payload||typeof payload!=`object`)return{};let rec=payload,runId=typeof rec.runId==`string`?rec.runId:void 0,stream=typeof rec.stream==`string`?rec.stream:void 0,seq=typeof rec.seq==`number`?rec.seq:void 0,sessionKey=typeof rec.sessionKey==`string`?rec.sessionKey:void 0,data=rec.data&&typeof rec.data==`object`?rec.data:void 0,extra={};if(runId&&(extra.run=shortId(runId)),sessionKey){let parsed=parseAgentSessionKey(sessionKey);parsed?(extra.agent=parsed.agentId,extra.session=parsed.rest):extra.session=sessionKey}if(stream&&(extra.stream=stream),seq!==void 0&&(extra.aseq=seq),!data)return extra;if(stream===`assistant`){let text=typeof data.text==`string`?data.text:void 0;text?.trim()&&(extra.text=compactPreview(text));let mediaUrls=Array.isArray(data.mediaUrls)?data.mediaUrls:void 0;return mediaUrls&&mediaUrls.length>0&&(extra.media=mediaUrls.length),extra}if(stream===`tool`){let phase=typeof data.phase==`string`?data.phase:void 0,name=typeof data.name==`string`?data.name:void 0;(phase||name)&&(extra.tool=`${phase??`?`}:${name??`?`}`);let toolCallId=typeof data.toolCallId==`string`?data.toolCallId:void 0;toolCallId&&(extra.call=shortId(toolCallId));let meta=typeof data.meta==`string`?data.meta:void 0;return meta?.trim()&&(extra.meta=meta),typeof data.isError==`boolean`&&(extra.err=data.isError),extra}if(stream===`lifecycle`){let phase=typeof data.phase==`string`?data.phase:void 0;phase&&(extra.phase=phase),typeof data.aborted==`boolean`&&(extra.aborted=data.aborted);let error=typeof data.error==`string`?data.error:void 0;return error?.trim()&&(extra.error=compactPreview(error,120)),extra}let reason=typeof data.reason==`string`?data.reason:void 0;return reason?.trim()&&(extra.reason=reason),extra}function logWs(direction,kind,meta){if(!shouldLogSubsystemToConsole(`gateway/ws`))return;let style=getGatewayWsLogStyle();if(!isVerbose()){logWsOptimized(direction,kind,meta);return}if(style===`compact`||style===`auto`){logWsCompact(direction,kind,meta);return}let now=Date.now(),connId=typeof meta?.connId==`string`?meta.connId:void 0,id=typeof meta?.id==`string`?meta.id:void 0,method=typeof meta?.method==`string`?meta.method:void 0,ok=typeof meta?.ok==`boolean`?meta.ok:void 0,event=typeof meta?.event==`string`?meta.event:void 0,inflightKey=connId&&id?`${connId}:${id}`:void 0;direction===`in`&&kind===`req`&&inflightKey&&wsInflightSince.set(inflightKey,now);let durationMs=direction===`out`&&kind===`res`&&inflightKey?(()=>{let startedAt=wsInflightSince.get(inflightKey);if(startedAt!==void 0)return wsInflightSince.delete(inflightKey),now-startedAt})():void 0,dirArrow=direction===`in`?`←`:`→`,prefix=`${(direction===`in`?chalk.greenBright:chalk.cyanBright)(dirArrow)} ${chalk.bold(kind)}`,headline=buildWsHeadline({kind,method,event}),statusToken=buildWsStatusToken(kind,ok),durationToken=typeof durationMs==`number`?chalk.dim(`${durationMs}ms`):void 0,restMeta=collectWsRestMeta(meta),trailing=[];connId&&trailing.push(`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId))}`),id&&trailing.push(`${chalk.dim(`id`)}=${chalk.gray(shortId(id))}`),logWsInfoLine({prefix,statusToken,headline,durationToken,restMeta,trailing})}function logWsOptimized(direction,kind,meta){let connId=typeof meta?.connId==`string`?meta.connId:void 0,id=typeof meta?.id==`string`?meta.id:void 0,ok=typeof meta?.ok==`boolean`?meta.ok:void 0,method=typeof meta?.method==`string`?meta.method:void 0,inflightKey=connId&&id?`${connId}:${id}`:void 0;if(direction===`in`&&kind===`req`&&inflightKey){wsInflightOptimized.set(inflightKey,Date.now()),wsInflightOptimized.size>2e3&&wsInflightOptimized.clear();return}if(kind===`parse-error`){let errorMsg=typeof meta?.error==`string`?formatForLog(meta.error):void 0;wsLog.warn([`${chalk.redBright(`✗`)} ${chalk.bold(`parse-error`)}`,errorMsg?`${chalk.dim(`error`)}=${errorMsg}`:void 0,`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId??`?`))}`].filter(t=>!!t).join(` `));return}if(direction!==`out`||kind!==`res`){if(kind===`event`&&direction===`out`&&(typeof meta?.event==`string`?meta.event:void 0)===`agent`){let stream=typeof meta?.stream==`string`?meta.stream:void 0,tool=typeof meta?.tool==`string`?meta.tool:void 0,phase=typeof meta?.phase==`string`?meta.phase:void 0,run=typeof meta?.run==`string`?meta.run:void 0,agent=typeof meta?.agent==`string`?meta.agent:void 0,tokens=[`${chalk.cyanBright(`→`)} ${chalk.bold(`agent`)}`,stream?`${chalk.dim(`stream`)}=${stream}`:void 0,tool?`${chalk.dim(`tool`)}=${tool}`:void 0,phase?`${chalk.dim(`phase`)}=${phase}`:void 0,agent?`${chalk.dim(`agent`)}=${agent}`:void 0,run?`${chalk.dim(`run`)}=${chalk.gray(run)}`:void 0].filter(t=>!!t);wsLog.info(tokens.join(` `))}return}let startedAt=inflightKey?wsInflightOptimized.get(inflightKey):void 0;inflightKey&&wsInflightOptimized.delete(inflightKey);let durationMs=typeof startedAt==`number`?Date.now()-startedAt:void 0;if(!(ok===!1||typeof durationMs==`number`&&durationMs>=50))return;let statusToken=buildWsStatusToken(`res`,ok),durationToken=typeof durationMs==`number`?chalk.dim(`${durationMs}ms`):void 0,restMeta=collectWsRestMeta(meta);logWsInfoLine({prefix:`${chalk.yellowBright(`⇄`)} ${chalk.bold(`res`)}`,statusToken,headline:method?chalk.bold(method):void 0,durationToken,restMeta,trailing:[connId?`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId))}`:``,id?`${chalk.dim(`id`)}=${chalk.gray(shortId(id))}`:``].filter(Boolean)})}function logWsCompact(direction,kind,meta){let now=Date.now(),connId=typeof meta?.connId==`string`?meta.connId:void 0,id=typeof meta?.id==`string`?meta.id:void 0,method=typeof meta?.method==`string`?meta.method:void 0,ok=typeof meta?.ok==`boolean`?meta.ok:void 0,inflightKey=connId&&id?`${connId}:${id}`:void 0;if(kind===`req`&&direction===`in`&&inflightKey){wsInflightCompact.set(inflightKey,{ts:now,method,meta});return}let compactArrow=kind===`req`||kind===`res`?`⇄`:direction===`in`?`←`:`→`,prefix=`${(kind===`req`||kind===`res`?chalk.yellowBright:direction===`in`?chalk.greenBright:chalk.cyanBright)(compactArrow)} ${chalk.bold(kind)}`,statusToken=buildWsStatusToken(kind,ok),startedAt=kind===`res`&&direction===`out`&&inflightKey?wsInflightCompact.get(inflightKey)?.ts:void 0;kind===`res`&&direction===`out`&&inflightKey&&wsInflightCompact.delete(inflightKey);let durationToken=typeof startedAt==`number`?chalk.dim(`${now-startedAt}ms`):void 0,headline=buildWsHeadline({kind,method,event:typeof meta?.event==`string`?meta.event:void 0}),restMeta=collectWsRestMeta(meta),trailing=[];connId&&connId!==wsLastCompactConnId&&(trailing.push(`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId))}`),wsLastCompactConnId=connId),id&&trailing.push(`${chalk.dim(`id`)}=${chalk.gray(shortId(id))}`),logWsInfoLine({prefix,statusToken,headline,durationToken,restMeta,trailing})}function normalizeMime(mime){if(mime)return mime.split(`;`)[0]?.trim().toLowerCase()||void 0}function isImageMime(mime){return typeof mime==`string`&&mime.startsWith(`image/`)}function isValidBase64(value){return value.length>0&&value.length%4==0&&/^[A-Za-z0-9+/]+={0,2}$/.test(value)}function normalizeAttachment(att,idx,opts){let mime=att.mimeType??``,content=att.content,label=att.fileName||att.type||`attachment-${idx+1}`;if(typeof content!=`string`)throw Error(`attachment ${label}: content must be base64 string`);if(opts.requireImageMime&&!mime.startsWith(`image/`))throw Error(`attachment ${label}: only image/* supported`);let base64=content.trim();if(opts.stripDataUrlPrefix){let dataUrlMatch=/^data:[^;]+;base64,(.*)$/.exec(base64);dataUrlMatch&&(base64=dataUrlMatch[1])}return{label,mime,base64}}function validateAttachmentBase64OrThrow(normalized,opts){if(!isValidBase64(normalized.base64))throw Error(`attachment ${normalized.label}: invalid base64 content`);let sizeBytes=estimateBase64DecodedBytes(normalized.base64);if(sizeBytes<=0||sizeBytes>opts.maxBytes)throw Error(`attachment ${normalized.label}: exceeds size limit (${sizeBytes} > ${opts.maxBytes} bytes)`);return sizeBytes}async function parseMessageWithAttachments(message,attachments,opts){let maxBytes=opts?.maxBytes??5e6,log=opts?.log;if(!attachments||attachments.length===0)return{message,images:[]};let images=[];for(let[idx,att]of attachments.entries()){if(!att)continue;let normalized=normalizeAttachment(att,idx,{stripDataUrlPrefix:!0,requireImageMime:!1});validateAttachmentBase64OrThrow(normalized,{maxBytes});let{base64:b64,label,mime}=normalized,providedMime=normalizeMime(mime),sniffedMime=normalizeMime(await sniffMimeFromBase64(b64));if(sniffedMime&&!isImageMime(sniffedMime)){log?.warn(`attachment ${label}: detected non-image (${sniffedMime}), dropping`);continue}if(!sniffedMime&&!isImageMime(providedMime)){log?.warn(`attachment ${label}: unable to detect image mime type, dropping`);continue}sniffedMime&&providedMime&&sniffedMime!==providedMime&&log?.warn(`attachment ${label}: mime mismatch (${providedMime} -> ${sniffedMime}), using sniffed`),images.push({type:`image`,data:b64,mimeType:sniffedMime??providedMime??mime})}return{message,images}}function normalizeRpcAttachmentsToChatAttachments(attachments){return attachments?.map(a=>({type:typeof a?.type==`string`?a.type:void 0,mimeType:typeof a?.mimeType==`string`?a.mimeType:void 0,fileName:typeof a?.fileName==`string`?a.fileName:void 0,content:typeof a?.content==`string`?a.content:ArrayBuffer.isView(a?.content)?Buffer.from(a.content.buffer,a.content.byteOffset,a.content.byteLength).toString(`base64`):a?.content instanceof ArrayBuffer?Buffer.from(a.content).toString(`base64`):void 0})).filter(a=>a.content)??[]}const withLock=createAsyncLock();let cachedJwt=null;function resolveApnsRegistrationPath(baseDir){let root=baseDir??resolveStateDir();return path.join(root,`push/apns-registrations.json`)}function normalizeNodeId(value){return value.trim()}function normalizeApnsToken(value){return value.trim().replace(/[<>\s]/g,``).toLowerCase()}function normalizeTopic(value){return value.trim()}function isLikelyApnsToken(value){return/^[0-9a-f]{32,}$/i.test(value)}function parseReason(body){let trimmed=body.trim();if(trimmed)try{let parsed=JSON.parse(trimmed);return typeof parsed.reason==`string`&&parsed.reason.trim().length>0?parsed.reason.trim():trimmed.slice(0,200)}catch{return trimmed.slice(0,200)}}function toBase64UrlBytes(value){return Buffer.from(value).toString(`base64`).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/g,``)}function toBase64UrlJson(value){return toBase64UrlBytes(Buffer.from(JSON.stringify(value)))}function getJwtCacheKey(auth){let keyHash=createHash(`sha256`).update(auth.privateKey).digest(`hex`);return`${auth.teamId}:${auth.keyId}:${keyHash}`}function getApnsBearerToken(auth,nowMs=Date.now()){let cacheKey=getJwtCacheKey(auth);if(cachedJwt&&cachedJwt.cacheKey===cacheKey&&nowMs<cachedJwt.expiresAtMs)return cachedJwt.token;let iat=Math.floor(nowMs/1e3),signingInput=`${toBase64UrlJson({alg:`ES256`,kid:auth.keyId,typ:`JWT`})}.${toBase64UrlJson({iss:auth.teamId,iat})}`,token=`${signingInput}.${toBase64UrlBytes(sign(`sha256`,Buffer.from(signingInput,`utf8`),{key:createPrivateKey(auth.privateKey),dsaEncoding:`ieee-p1363`}))}`;return cachedJwt={cacheKey,token,expiresAtMs:nowMs+3e6},token}function normalizePrivateKey(value){return value.trim().replace(/\\n/g,`
1
+ import{g as resolveStateDir}from"./paths-BHg-VHB4.js";import{k as isVerbose}from"./utils-BP60e80M.js";import{s as shouldLogSubsystemToConsole,t as createSubsystemLogger}from"./subsystem-C4b1Von0.js";import{C as parseAgentSessionKey}from"./session-key-CksCYipj.js";import{Dn as readJsonFile,En as createAsyncLock,On as writeJsonAtomic,Yn as estimateBase64DecodedBytes,x as sniffMimeFromBase64}from"./subagent-registry-DDEN4oJi.js";import{n as redactSensitiveText,t as getDefaultRedactPatterns}from"./redact-CgO7wehS.js";import path from"node:path";import chalk from"chalk";import{createHash,createPrivateKey,sign}from"node:crypto";import fs from"node:fs/promises";import http2 from"node:http2";let gatewayWsLogStyle=`auto`;function setGatewayWsLogStyle(style){gatewayWsLogStyle=style}function getGatewayWsLogStyle(){return gatewayWsLogStyle}const UUID_RE=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,WS_LOG_REDACT_OPTIONS={mode:`tools`,patterns:getDefaultRedactPatterns()},wsInflightCompact=new Map;let wsLastCompactConnId;const wsInflightOptimized=new Map,wsInflightSince=new Map,wsLog=createSubsystemLogger(`gateway/ws`),WS_META_SKIP_KEYS=new Set([`connId`,`id`,`method`,`ok`,`event`]);function collectWsRestMeta(meta){let restMeta=[];if(!meta)return restMeta;for(let[key,value]of Object.entries(meta))value!==void 0&&(WS_META_SKIP_KEYS.has(key)||restMeta.push(`${chalk.dim(key)}=${formatForLog(value)}`));return restMeta}function buildWsHeadline(params){if((params.kind===`req`||params.kind===`res`)&&params.method)return chalk.bold(params.method);if(params.kind===`event`&&params.event)return chalk.bold(params.event)}function buildWsStatusToken(kind,ok){if(!(kind!==`res`||ok===void 0))return ok?chalk.greenBright(`✓`):chalk.redBright(`✗`)}function logWsInfoLine(params){let tokens=[params.prefix,params.statusToken,params.headline,params.durationToken,...params.restMeta,...params.trailing].filter(t=>!!t);wsLog.info(tokens.join(` `))}function shouldLogWs(){return shouldLogSubsystemToConsole(`gateway/ws`)}function shortId(value){let s=value.trim();return UUID_RE.test(s)?`${s.slice(0,8)}…${s.slice(-4)}`:s.length<=24?s:`${s.slice(0,12)}…${s.slice(-4)}`}function formatForLog(value){try{if(value instanceof Error){let parts=[];value.name&&parts.push(value.name),value.message&&parts.push(value.message);let code=`code`in value&&(typeof value.code==`string`||typeof value.code==`number`)?String(value.code):``;code&&parts.push(`code=${code}`);let combined=parts.filter(Boolean).join(`: `).trim();if(combined)return combined.length>240?`${combined.slice(0,240)}...`:combined}if(value&&typeof value==`object`){let rec=value;if(typeof rec.message==`string`&&rec.message.trim()){let name=typeof rec.name==`string`?rec.name.trim():``,code=typeof rec.code==`string`||typeof rec.code==`number`?String(rec.code):``,parts=[name,rec.message.trim()].filter(Boolean);code&&parts.push(`code=${code}`);let combined=parts.join(`: `).trim();return combined.length>240?`${combined.slice(0,240)}...`:combined}}let str=typeof value==`string`||typeof value==`number`?String(value):JSON.stringify(value);if(!str)return``;let redacted=redactSensitiveText(str,WS_LOG_REDACT_OPTIONS);return redacted.length>240?`${redacted.slice(0,240)}...`:redacted}catch{return String(value)}}function compactPreview(input,maxLen=160){let oneLine=input.replace(/\s+/g,` `).trim();return oneLine.length<=maxLen?oneLine:`${oneLine.slice(0,Math.max(0,maxLen-1))}…`}function summarizeAgentEventForWsLog(payload){if(!payload||typeof payload!=`object`)return{};let rec=payload,runId=typeof rec.runId==`string`?rec.runId:void 0,stream=typeof rec.stream==`string`?rec.stream:void 0,seq=typeof rec.seq==`number`?rec.seq:void 0,sessionKey=typeof rec.sessionKey==`string`?rec.sessionKey:void 0,data=rec.data&&typeof rec.data==`object`?rec.data:void 0,extra={};if(runId&&(extra.run=shortId(runId)),sessionKey){let parsed=parseAgentSessionKey(sessionKey);parsed?(extra.agent=parsed.agentId,extra.session=parsed.rest):extra.session=sessionKey}if(stream&&(extra.stream=stream),seq!==void 0&&(extra.aseq=seq),!data)return extra;if(stream===`assistant`){let text=typeof data.text==`string`?data.text:void 0;text?.trim()&&(extra.text=compactPreview(text));let mediaUrls=Array.isArray(data.mediaUrls)?data.mediaUrls:void 0;return mediaUrls&&mediaUrls.length>0&&(extra.media=mediaUrls.length),extra}if(stream===`tool`){let phase=typeof data.phase==`string`?data.phase:void 0,name=typeof data.name==`string`?data.name:void 0;(phase||name)&&(extra.tool=`${phase??`?`}:${name??`?`}`);let toolCallId=typeof data.toolCallId==`string`?data.toolCallId:void 0;toolCallId&&(extra.call=shortId(toolCallId));let meta=typeof data.meta==`string`?data.meta:void 0;return meta?.trim()&&(extra.meta=meta),typeof data.isError==`boolean`&&(extra.err=data.isError),extra}if(stream===`lifecycle`){let phase=typeof data.phase==`string`?data.phase:void 0;phase&&(extra.phase=phase),typeof data.aborted==`boolean`&&(extra.aborted=data.aborted);let error=typeof data.error==`string`?data.error:void 0;return error?.trim()&&(extra.error=compactPreview(error,120)),extra}let reason=typeof data.reason==`string`?data.reason:void 0;return reason?.trim()&&(extra.reason=reason),extra}function logWs(direction,kind,meta){if(!shouldLogSubsystemToConsole(`gateway/ws`))return;let style=getGatewayWsLogStyle();if(!isVerbose()){logWsOptimized(direction,kind,meta);return}if(style===`compact`||style===`auto`){logWsCompact(direction,kind,meta);return}let now=Date.now(),connId=typeof meta?.connId==`string`?meta.connId:void 0,id=typeof meta?.id==`string`?meta.id:void 0,method=typeof meta?.method==`string`?meta.method:void 0,ok=typeof meta?.ok==`boolean`?meta.ok:void 0,event=typeof meta?.event==`string`?meta.event:void 0,inflightKey=connId&&id?`${connId}:${id}`:void 0;direction===`in`&&kind===`req`&&inflightKey&&wsInflightSince.set(inflightKey,now);let durationMs=direction===`out`&&kind===`res`&&inflightKey?(()=>{let startedAt=wsInflightSince.get(inflightKey);if(startedAt!==void 0)return wsInflightSince.delete(inflightKey),now-startedAt})():void 0,dirArrow=direction===`in`?`←`:`→`,prefix=`${(direction===`in`?chalk.greenBright:chalk.cyanBright)(dirArrow)} ${chalk.bold(kind)}`,headline=buildWsHeadline({kind,method,event}),statusToken=buildWsStatusToken(kind,ok),durationToken=typeof durationMs==`number`?chalk.dim(`${durationMs}ms`):void 0,restMeta=collectWsRestMeta(meta),trailing=[];connId&&trailing.push(`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId))}`),id&&trailing.push(`${chalk.dim(`id`)}=${chalk.gray(shortId(id))}`),logWsInfoLine({prefix,statusToken,headline,durationToken,restMeta,trailing})}function logWsOptimized(direction,kind,meta){let connId=typeof meta?.connId==`string`?meta.connId:void 0,id=typeof meta?.id==`string`?meta.id:void 0,ok=typeof meta?.ok==`boolean`?meta.ok:void 0,method=typeof meta?.method==`string`?meta.method:void 0,inflightKey=connId&&id?`${connId}:${id}`:void 0;if(direction===`in`&&kind===`req`&&inflightKey){wsInflightOptimized.set(inflightKey,Date.now()),wsInflightOptimized.size>2e3&&wsInflightOptimized.clear();return}if(kind===`parse-error`){let errorMsg=typeof meta?.error==`string`?formatForLog(meta.error):void 0;wsLog.warn([`${chalk.redBright(`✗`)} ${chalk.bold(`parse-error`)}`,errorMsg?`${chalk.dim(`error`)}=${errorMsg}`:void 0,`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId??`?`))}`].filter(t=>!!t).join(` `));return}if(direction!==`out`||kind!==`res`){if(kind===`event`&&direction===`out`&&(typeof meta?.event==`string`?meta.event:void 0)===`agent`){let stream=typeof meta?.stream==`string`?meta.stream:void 0,tool=typeof meta?.tool==`string`?meta.tool:void 0,phase=typeof meta?.phase==`string`?meta.phase:void 0,run=typeof meta?.run==`string`?meta.run:void 0,agent=typeof meta?.agent==`string`?meta.agent:void 0,tokens=[`${chalk.cyanBright(`→`)} ${chalk.bold(`agent`)}`,stream?`${chalk.dim(`stream`)}=${stream}`:void 0,tool?`${chalk.dim(`tool`)}=${tool}`:void 0,phase?`${chalk.dim(`phase`)}=${phase}`:void 0,agent?`${chalk.dim(`agent`)}=${agent}`:void 0,run?`${chalk.dim(`run`)}=${chalk.gray(run)}`:void 0].filter(t=>!!t);wsLog.info(tokens.join(` `))}return}let startedAt=inflightKey?wsInflightOptimized.get(inflightKey):void 0;inflightKey&&wsInflightOptimized.delete(inflightKey);let durationMs=typeof startedAt==`number`?Date.now()-startedAt:void 0;if(!(ok===!1||typeof durationMs==`number`&&durationMs>=50))return;let statusToken=buildWsStatusToken(`res`,ok),durationToken=typeof durationMs==`number`?chalk.dim(`${durationMs}ms`):void 0,restMeta=collectWsRestMeta(meta);logWsInfoLine({prefix:`${chalk.yellowBright(`⇄`)} ${chalk.bold(`res`)}`,statusToken,headline:method?chalk.bold(method):void 0,durationToken,restMeta,trailing:[connId?`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId))}`:``,id?`${chalk.dim(`id`)}=${chalk.gray(shortId(id))}`:``].filter(Boolean)})}function logWsCompact(direction,kind,meta){let now=Date.now(),connId=typeof meta?.connId==`string`?meta.connId:void 0,id=typeof meta?.id==`string`?meta.id:void 0,method=typeof meta?.method==`string`?meta.method:void 0,ok=typeof meta?.ok==`boolean`?meta.ok:void 0,inflightKey=connId&&id?`${connId}:${id}`:void 0;if(kind===`req`&&direction===`in`&&inflightKey){wsInflightCompact.set(inflightKey,{ts:now,method,meta});return}let compactArrow=kind===`req`||kind===`res`?`⇄`:direction===`in`?`←`:`→`,prefix=`${(kind===`req`||kind===`res`?chalk.yellowBright:direction===`in`?chalk.greenBright:chalk.cyanBright)(compactArrow)} ${chalk.bold(kind)}`,statusToken=buildWsStatusToken(kind,ok),startedAt=kind===`res`&&direction===`out`&&inflightKey?wsInflightCompact.get(inflightKey)?.ts:void 0;kind===`res`&&direction===`out`&&inflightKey&&wsInflightCompact.delete(inflightKey);let durationToken=typeof startedAt==`number`?chalk.dim(`${now-startedAt}ms`):void 0,headline=buildWsHeadline({kind,method,event:typeof meta?.event==`string`?meta.event:void 0}),restMeta=collectWsRestMeta(meta),trailing=[];connId&&connId!==wsLastCompactConnId&&(trailing.push(`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId))}`),wsLastCompactConnId=connId),id&&trailing.push(`${chalk.dim(`id`)}=${chalk.gray(shortId(id))}`),logWsInfoLine({prefix,statusToken,headline,durationToken,restMeta,trailing})}function normalizeMime(mime){if(mime)return mime.split(`;`)[0]?.trim().toLowerCase()||void 0}function isImageMime(mime){return typeof mime==`string`&&mime.startsWith(`image/`)}function isValidBase64(value){return value.length>0&&value.length%4==0&&/^[A-Za-z0-9+/]+={0,2}$/.test(value)}function normalizeAttachment(att,idx,opts){let mime=att.mimeType??``,content=att.content,label=att.fileName||att.type||`attachment-${idx+1}`;if(typeof content!=`string`)throw Error(`attachment ${label}: content must be base64 string`);if(opts.requireImageMime&&!mime.startsWith(`image/`))throw Error(`attachment ${label}: only image/* supported`);let base64=content.trim();if(opts.stripDataUrlPrefix){let dataUrlMatch=/^data:[^;]+;base64,(.*)$/.exec(base64);dataUrlMatch&&(base64=dataUrlMatch[1])}return{label,mime,base64}}function validateAttachmentBase64OrThrow(normalized,opts){if(!isValidBase64(normalized.base64))throw Error(`attachment ${normalized.label}: invalid base64 content`);let sizeBytes=estimateBase64DecodedBytes(normalized.base64);if(sizeBytes<=0||sizeBytes>opts.maxBytes)throw Error(`attachment ${normalized.label}: exceeds size limit (${sizeBytes} > ${opts.maxBytes} bytes)`);return sizeBytes}async function parseMessageWithAttachments(message,attachments,opts){let maxBytes=opts?.maxBytes??5e6,log=opts?.log;if(!attachments||attachments.length===0)return{message,images:[]};let images=[];for(let[idx,att]of attachments.entries()){if(!att)continue;let normalized=normalizeAttachment(att,idx,{stripDataUrlPrefix:!0,requireImageMime:!1});validateAttachmentBase64OrThrow(normalized,{maxBytes});let{base64:b64,label,mime}=normalized,providedMime=normalizeMime(mime),sniffedMime=normalizeMime(await sniffMimeFromBase64(b64));if(sniffedMime&&!isImageMime(sniffedMime)){log?.warn(`attachment ${label}: detected non-image (${sniffedMime}), dropping`);continue}if(!sniffedMime&&!isImageMime(providedMime)){log?.warn(`attachment ${label}: unable to detect image mime type, dropping`);continue}sniffedMime&&providedMime&&sniffedMime!==providedMime&&log?.warn(`attachment ${label}: mime mismatch (${providedMime} -> ${sniffedMime}), using sniffed`),images.push({type:`image`,data:b64,mimeType:sniffedMime??providedMime??mime})}return{message,images}}function normalizeRpcAttachmentsToChatAttachments(attachments){return attachments?.map(a=>({type:typeof a?.type==`string`?a.type:void 0,mimeType:typeof a?.mimeType==`string`?a.mimeType:void 0,fileName:typeof a?.fileName==`string`?a.fileName:void 0,content:typeof a?.content==`string`?a.content:ArrayBuffer.isView(a?.content)?Buffer.from(a.content.buffer,a.content.byteOffset,a.content.byteLength).toString(`base64`):a?.content instanceof ArrayBuffer?Buffer.from(a.content).toString(`base64`):void 0})).filter(a=>a.content)??[]}const withLock=createAsyncLock();let cachedJwt=null;function resolveApnsRegistrationPath(baseDir){let root=baseDir??resolveStateDir();return path.join(root,`push/apns-registrations.json`)}function normalizeNodeId(value){return value.trim()}function normalizeApnsToken(value){return value.trim().replace(/[<>\s]/g,``).toLowerCase()}function normalizeTopic(value){return value.trim()}function isLikelyApnsToken(value){return/^[0-9a-f]{32,}$/i.test(value)}function parseReason(body){let trimmed=body.trim();if(trimmed)try{let parsed=JSON.parse(trimmed);return typeof parsed.reason==`string`&&parsed.reason.trim().length>0?parsed.reason.trim():trimmed.slice(0,200)}catch{return trimmed.slice(0,200)}}function toBase64UrlBytes(value){return Buffer.from(value).toString(`base64`).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/g,``)}function toBase64UrlJson(value){return toBase64UrlBytes(Buffer.from(JSON.stringify(value)))}function getJwtCacheKey(auth){let keyHash=createHash(`sha256`).update(auth.privateKey).digest(`hex`);return`${auth.teamId}:${auth.keyId}:${keyHash}`}function getApnsBearerToken(auth,nowMs=Date.now()){let cacheKey=getJwtCacheKey(auth);if(cachedJwt&&cachedJwt.cacheKey===cacheKey&&nowMs<cachedJwt.expiresAtMs)return cachedJwt.token;let iat=Math.floor(nowMs/1e3),signingInput=`${toBase64UrlJson({alg:`ES256`,kid:auth.keyId,typ:`JWT`})}.${toBase64UrlJson({iss:auth.teamId,iat})}`,token=`${signingInput}.${toBase64UrlBytes(sign(`sha256`,Buffer.from(signingInput,`utf8`),{key:createPrivateKey(auth.privateKey),dsaEncoding:`ieee-p1363`}))}`;return cachedJwt={cacheKey,token,expiresAtMs:nowMs+3e6},token}function normalizePrivateKey(value){return value.trim().replace(/\\n/g,`
2
2
  `)}function normalizeNonEmptyString(value){let trimmed=value?.trim()??``;return trimmed.length>0?trimmed:null}async function loadRegistrationsState(baseDir){let existing=await readJsonFile(resolveApnsRegistrationPath(baseDir));return!existing||typeof existing!=`object`?{registrationsByNodeId:{}}:{registrationsByNodeId:existing.registrationsByNodeId&&typeof existing.registrationsByNodeId==`object`&&!Array.isArray(existing.registrationsByNodeId)?existing.registrationsByNodeId:{}}}async function persistRegistrationsState(state,baseDir){await writeJsonAtomic(resolveApnsRegistrationPath(baseDir),state)}function normalizeApnsEnvironment(value){if(typeof value!=`string`)return null;let normalized=value.trim().toLowerCase();return normalized===`sandbox`||normalized===`production`?normalized:null}async function registerApnsToken(params){let nodeId=normalizeNodeId(params.nodeId),token=normalizeApnsToken(params.token),topic=normalizeTopic(params.topic),environment=normalizeApnsEnvironment(params.environment)??`sandbox`;if(!nodeId)throw Error(`nodeId required`);if(!topic)throw Error(`topic required`);if(!isLikelyApnsToken(token))throw Error(`invalid APNs token`);return await withLock(async()=>{let state=await loadRegistrationsState(params.baseDir),next={nodeId,token,topic,environment,updatedAtMs:Date.now()};return state.registrationsByNodeId[nodeId]=next,await persistRegistrationsState(state,params.baseDir),next})}async function loadApnsRegistration(nodeId,baseDir){let normalizedNodeId=normalizeNodeId(nodeId);return normalizedNodeId?(await loadRegistrationsState(baseDir)).registrationsByNodeId[normalizedNodeId]??null:null}async function resolveApnsAuthConfigFromEnv(env=process.env){let teamId=normalizeNonEmptyString(env.BUILDERFORCE_AGENTS_APNS_TEAM_ID),keyId=normalizeNonEmptyString(env.BUILDERFORCE_AGENTS_APNS_KEY_ID);if(!teamId||!keyId)return{ok:!1,error:`APNs auth missing: set BUILDERFORCE_AGENTS_APNS_TEAM_ID and BUILDERFORCE_AGENTS_APNS_KEY_ID`};let inlineKeyRaw=normalizeNonEmptyString(env.BUILDERFORCE_AGENTS_APNS_PRIVATE_KEY_P8)??normalizeNonEmptyString(env.BUILDERFORCE_AGENTS_APNS_PRIVATE_KEY);if(inlineKeyRaw)return{ok:!0,value:{teamId,keyId,privateKey:normalizePrivateKey(inlineKeyRaw)}};let keyPath=normalizeNonEmptyString(env.BUILDERFORCE_AGENTS_APNS_PRIVATE_KEY_PATH);if(!keyPath)return{ok:!1,error:`APNs private key missing: set BUILDERFORCE_AGENTS_APNS_PRIVATE_KEY_P8 or BUILDERFORCE_AGENTS_APNS_PRIVATE_KEY_PATH`};try{return{ok:!0,value:{teamId,keyId,privateKey:normalizePrivateKey(await fs.readFile(keyPath,`utf8`))}}}catch(err){return{ok:!1,error:`failed reading BUILDERFORCE_AGENTS_APNS_PRIVATE_KEY_PATH (${keyPath}): ${err instanceof Error?err.message:String(err)}`}}}async function sendApnsRequest(params){let authority=params.environment===`production`?`https://api.push.apple.com`:`https://api.sandbox.push.apple.com`,body=JSON.stringify(params.payload),requestPath=`/3/device/${params.token}`;return await new Promise((resolve,reject)=>{let client=http2.connect(authority),settled=!1,fail=err=>{settled||(settled=!0,client.destroy(),reject(err))},finish=result=>{settled||(settled=!0,client.close(),resolve(result))};client.once(`error`,err=>fail(err));let req=client.request({":method":`POST`,":path":requestPath,authorization:`bearer ${params.bearerToken}`,"apns-topic":params.topic,"apns-push-type":params.pushType,"apns-priority":params.priority,"apns-expiration":`0`,"content-type":`application/json`,"content-length":Buffer.byteLength(body).toString()}),statusCode=0,apnsId,responseBody=``;req.setEncoding(`utf8`),req.setTimeout(params.timeoutMs,()=>{req.close(http2.constants.NGHTTP2_CANCEL),fail(Error(`APNs request timed out after ${params.timeoutMs}ms`))}),req.on(`response`,headers=>{let statusHeader=headers[`:status`];statusCode=typeof statusHeader==`number`?statusHeader:Number(statusHeader??0);let idHeader=headers[`apns-id`];typeof idHeader==`string`&&idHeader.trim().length>0&&(apnsId=idHeader.trim())}),req.on(`data`,chunk=>{typeof chunk==`string`&&(responseBody+=chunk)}),req.on(`end`,()=>{finish({status:statusCode,apnsId,body:responseBody})}),req.on(`error`,err=>fail(err)),req.end(body)})}function resolveApnsTimeoutMs(timeoutMs){return typeof timeoutMs==`number`&&Number.isFinite(timeoutMs)?Math.max(1e3,Math.trunc(timeoutMs)):1e4}function resolveApnsSendContext(params){let token=normalizeApnsToken(params.registration.token);if(!isLikelyApnsToken(token))throw Error(`invalid APNs token`);let topic=normalizeTopic(params.registration.topic);if(!topic)throw Error(`topic required`);return{token,topic,environment:params.registration.environment,bearerToken:getApnsBearerToken(params.auth)}}function toApnsPushResult(params){return{ok:params.response.status===200,status:params.response.status,apnsId:params.response.apnsId,reason:parseReason(params.response.body),tokenSuffix:params.token.slice(-8),topic:params.topic,environment:params.environment}}async function sendApnsAlert(params){let{token,topic,environment,bearerToken}=resolveApnsSendContext({auth:params.auth,registration:params.registration}),payload={aps:{alert:{title:params.title,body:params.body},sound:`default`},builderforce:{kind:`push.test`,nodeId:params.nodeId,ts:Date.now()}};return toApnsPushResult({response:await(params.requestSender??sendApnsRequest)({token,topic,environment,bearerToken,payload,timeoutMs:resolveApnsTimeoutMs(params.timeoutMs),pushType:`alert`,priority:`10`}),token,topic,environment})}async function sendApnsBackgroundWake(params){let{token,topic,environment,bearerToken}=resolveApnsSendContext({auth:params.auth,registration:params.registration}),payload={aps:{"content-available":1},builderforce:{kind:`node.wake`,reason:params.wakeReason??`node.invoke`,nodeId:params.nodeId,ts:Date.now()}};return toApnsPushResult({response:await(params.requestSender??sendApnsRequest)({token,topic,environment,bearerToken,payload,timeoutMs:resolveApnsTimeoutMs(params.timeoutMs),pushType:`background`,priority:`5`}),token,topic,environment})}export{sendApnsAlert as a,parseMessageWithAttachments as c,shouldLogWs as d,summarizeAgentEventForWsLog as f,resolveApnsAuthConfigFromEnv as i,formatForLog as l,normalizeApnsEnvironment as n,sendApnsBackgroundWake as o,setGatewayWsLogStyle as p,registerApnsToken as r,normalizeRpcAttachmentsToChatAttachments as s,loadApnsRegistration as t,logWs as u};
@@ -1,4 +1,4 @@
1
- import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-C1VbcUOm.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import{t as normalizeBaseUrl}from"./normalize-base-url-D_sv6Zgt.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./redact-CgO7wehS.js";import{n as formatErrorMessage}from"./errors-tAt19c1E.js";import{_ as withCdpSocket,d as normalizeCdpWsUrl,g as getHeadersWithAuth,m as fetchJson,p as appendCdpPath,t as getChromeWebSocketUrl,u as formatAriaSnapshot}from"./chrome-BnEbJV3D.js";import{t as resolvePreferredBuilderForceAgentsTmpDir}from"./tmp-builderforce-dir-BOumzMSc.js";import"./ports-DTku9NSx.js";import path from"node:path";import crypto from"node:crypto";import fs from"node:fs/promises";import{chromium,devices}from"playwright-core";const pageStates=new WeakMap,contextStates=new WeakMap,observedContexts=new WeakSet,observedPages=new WeakSet,roleRefsByTarget=new Map;let cached=null,connecting=null;function normalizeCdpUrl(raw){return raw.replace(/\/$/,``)}function findNetworkRequestById(state,id){for(let i=state.requests.length-1;i>=0;--i){let candidate=state.requests[i];if(candidate&&candidate.id===id)return candidate}}function roleRefsKey(cdpUrl,targetId){return`${normalizeCdpUrl(cdpUrl)}::${targetId}`}function rememberRoleRefsForTarget(opts){let targetId=opts.targetId.trim();if(targetId)for(roleRefsByTarget.set(roleRefsKey(opts.cdpUrl,targetId),{refs:opts.refs,...opts.frameSelector?{frameSelector:opts.frameSelector}:{},...opts.mode?{mode:opts.mode}:{}});roleRefsByTarget.size>50;){let first=roleRefsByTarget.keys().next();if(first.done)break;roleRefsByTarget.delete(first.value)}}function storeRoleRefsForTarget(opts){let state=ensurePageState(opts.page);state.roleRefs=opts.refs,state.roleRefsFrameSelector=opts.frameSelector,state.roleRefsMode=opts.mode,opts.targetId?.trim()&&rememberRoleRefsForTarget({cdpUrl:opts.cdpUrl,targetId:opts.targetId,refs:opts.refs,frameSelector:opts.frameSelector,mode:opts.mode})}function restoreRoleRefsForTarget(opts){let targetId=opts.targetId?.trim()||``;if(!targetId)return;let cached=roleRefsByTarget.get(roleRefsKey(opts.cdpUrl,targetId));if(!cached)return;let state=ensurePageState(opts.page);state.roleRefs||(state.roleRefs=cached.refs,state.roleRefsFrameSelector=cached.frameSelector,state.roleRefsMode=cached.mode)}function ensurePageState(page){let existing=pageStates.get(page);if(existing)return existing;let state={console:[],errors:[],requests:[],requestIds:new WeakMap,nextRequestId:0,armIdUpload:0,armIdDialog:0,armIdDownload:0};return pageStates.set(page,state),observedPages.has(page)||(observedPages.add(page),page.on(`console`,msg=>{let entry={type:msg.type(),text:msg.text(),timestamp:new Date().toISOString(),location:msg.location()};state.console.push(entry),state.console.length>500&&state.console.shift()}),page.on(`pageerror`,err=>{state.errors.push({message:err?.message?String(err.message):String(err),name:err?.name?String(err.name):void 0,stack:err?.stack?String(err.stack):void 0,timestamp:new Date().toISOString()}),state.errors.length>200&&state.errors.shift()}),page.on(`request`,req=>{state.nextRequestId+=1;let id=`r${state.nextRequestId}`;state.requestIds.set(req,id),state.requests.push({id,timestamp:new Date().toISOString(),method:req.method(),url:req.url(),resourceType:req.resourceType()}),state.requests.length>500&&state.requests.shift()}),page.on(`response`,resp=>{let req=resp.request(),id=state.requestIds.get(req);if(!id)return;let rec=findNetworkRequestById(state,id);rec&&(rec.status=resp.status(),rec.ok=resp.ok())}),page.on(`requestfailed`,req=>{let id=state.requestIds.get(req);if(!id)return;let rec=findNetworkRequestById(state,id);rec&&(rec.failureText=req.failure()?.errorText,rec.ok=!1)}),page.on(`close`,()=>{pageStates.delete(page),observedPages.delete(page)})),state}function observeContext(context){if(!observedContexts.has(context)){observedContexts.add(context),ensureContextState(context);for(let page of context.pages())ensurePageState(page);context.on(`page`,page=>ensurePageState(page))}}function ensureContextState(context){let existing=contextStates.get(context);if(existing)return existing;let state={traceActive:!1};return contextStates.set(context,state),state}function observeBrowser(browser){for(let context of browser.contexts())observeContext(context)}async function connectBrowser(cdpUrl){let normalized=normalizeCdpUrl(cdpUrl);return cached?.cdpUrl===normalized?cached:(connecting||=(async()=>{let lastErr;for(let attempt=0;attempt<3;attempt+=1)try{let timeout=5e3+attempt*2e3,endpoint=await getChromeWebSocketUrl(normalized,timeout).catch(()=>null)??normalized,headers=getHeadersWithAuth(endpoint),browser=await chromium.connectOverCDP(endpoint,{timeout,headers}),onDisconnected=()=>{cached?.browser===browser&&(cached=null)},connected={browser,cdpUrl:normalized,onDisconnected};return cached=connected,browser.on(`disconnected`,onDisconnected),observeBrowser(browser),connected}catch(err){lastErr=err;let delay=250+attempt*250;await new Promise(r=>setTimeout(r,delay))}if(lastErr instanceof Error)throw lastErr;let message=lastErr?formatErrorMessage(lastErr):`CDP connect failed`;throw Error(message)})().finally(()=>{connecting=null}),await connecting)}async function getAllPages(browser){return browser.contexts().flatMap(c=>c.pages())}async function pageTargetId(page){let session=await page.context().newCDPSession(page);try{let info=await session.send(`Target.getTargetInfo`);return String(info?.targetInfo?.targetId??``).trim()||null}finally{await session.detach().catch(()=>{})}}async function findPageByTargetId(browser,targetId,cdpUrl){let pages=await getAllPages(browser),resolvedViaCdp=!1;for(let page of pages){let tid=null;try{tid=await pageTargetId(page),resolvedViaCdp=!0}catch{tid=null}if(tid&&tid===targetId)return page}if(!resolvedViaCdp&&pages.length===1)return pages[0];if(cdpUrl)try{let listUrl=`${normalizeBaseUrl(cdpUrl).replace(/^ws:/,`http:`).replace(/\/cdp$/,``)}/json/list`,response=await fetch(listUrl,{headers:getHeadersWithAuth(listUrl)});if(response.ok){let targets=await response.json(),target=targets.find(t=>t.id===targetId);if(target){let urlMatch=pages.filter(p=>p.url()===target.url);if(urlMatch.length===1)return urlMatch[0];if(urlMatch.length>1){let sameUrlTargets=targets.filter(t=>t.url===target.url);if(sameUrlTargets.length===urlMatch.length){let idx=sameUrlTargets.findIndex(t=>t.id===targetId);if(idx>=0&&idx<urlMatch.length)return urlMatch[idx]}}}}}catch{}return null}async function getPageForTargetId(opts){let{browser}=await connectBrowser(opts.cdpUrl),pages=await getAllPages(browser);if(!pages.length)throw Error(`No pages available in the connected browser.`);let first=pages[0];if(!opts.targetId)return first;let found=await findPageByTargetId(browser,opts.targetId,opts.cdpUrl);if(!found){if(pages.length===1)return first;throw Error(`tab not found`)}return found}function refLocator(page,ref){let normalized=ref.startsWith(`@`)?ref.slice(1):ref.startsWith(`ref=`)?ref.slice(4):ref;if(/^e\d+$/.test(normalized)){let state=pageStates.get(page);if(state?.roleRefsMode===`aria`)return(state.roleRefsFrameSelector?page.frameLocator(state.roleRefsFrameSelector):page).locator(`aria-ref=${normalized}`);let info=state?.roleRefs?.[normalized];if(!info)throw Error(`Unknown ref "${normalized}". Run a new snapshot and use a ref from that snapshot.`);let locAny=state?.roleRefsFrameSelector?page.frameLocator(state.roleRefsFrameSelector):page,locator=info.name?locAny.getByRole(info.role,{name:info.name,exact:!0}):locAny.getByRole(info.role);return info.nth===void 0?locator:locator.nth(info.nth)}return page.locator(`aria-ref=${normalized}`)}async function closePlaywrightBrowserConnection(){let cur=cached;cached=null,connecting=null,cur&&(cur.onDisconnected&&typeof cur.browser.off==`function`&&cur.browser.off(`disconnected`,cur.onDisconnected),await cur.browser.close().catch(()=>{}))}function normalizeCdpHttpBaseForJsonEndpoints(cdpUrl){try{let url=new URL(cdpUrl);return url.protocol===`ws:`?url.protocol=`http:`:url.protocol===`wss:`&&(url.protocol=`https:`),url.pathname=url.pathname.replace(/\/devtools\/browser\/.*$/,``),url.pathname=url.pathname.replace(/\/cdp$/,``),url.toString().replace(/\/$/,``)}catch{return cdpUrl.replace(/^ws:/,`http:`).replace(/^wss:/,`https:`).replace(/\/devtools\/browser\/.*$/,``).replace(/\/cdp$/,``).replace(/\/$/,``)}}function cdpSocketNeedsAttach(wsUrl){try{let pathname=new URL(wsUrl).pathname;return pathname===`/cdp`||pathname.endsWith(`/cdp`)||pathname.includes(`/devtools/browser/`)}catch{return!1}}async function tryTerminateExecutionViaCdp(opts){let cdpHttpBase=normalizeCdpHttpBaseForJsonEndpoints(opts.cdpUrl),pages=await fetchJson(appendCdpPath(cdpHttpBase,`/json/list`),2e3).catch(()=>null);if(!pages||pages.length===0)return;let target=pages.find(p=>String(p.id??``).trim()===opts.targetId),wsUrlRaw=String(target?.webSocketDebuggerUrl??``).trim();if(!wsUrlRaw)return;let wsUrl=normalizeCdpWsUrl(wsUrlRaw,cdpHttpBase),needsAttach=cdpSocketNeedsAttach(wsUrl),runWithTimeout=async(work,ms)=>{let timer,timeoutPromise=new Promise((_,reject)=>{timer=setTimeout(()=>reject(Error(`CDP command timed out`)),ms)});try{return await Promise.race([work,timeoutPromise])}finally{timer&&clearTimeout(timer)}};await withCdpSocket(wsUrl,async send=>{let sessionId;try{if(needsAttach){let attached=await runWithTimeout(send(`Target.attachToTarget`,{targetId:opts.targetId,flatten:!0}),1500);typeof attached?.sessionId==`string`&&attached.sessionId.trim()&&(sessionId=attached.sessionId)}await runWithTimeout(send(`Runtime.terminateExecution`,void 0,sessionId),1500),sessionId&&send(`Target.detachFromTarget`,{sessionId}).catch(()=>{})}catch{}},{handshakeTimeoutMs:2e3}).catch(()=>{})}async function forceDisconnectPlaywrightForTarget(opts){let normalized=normalizeCdpUrl(opts.cdpUrl);if(cached?.cdpUrl!==normalized)return;let cur=cached;if(cached=null,connecting=null,cur){cur.onDisconnected&&typeof cur.browser.off==`function`&&cur.browser.off(`disconnected`,cur.onDisconnected);let targetId=opts.targetId?.trim()||``;targetId&&await tryTerminateExecutionViaCdp({cdpUrl:normalized,targetId}).catch(()=>{}),cur.browser.close().catch(()=>{})}}async function listPagesViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),pages=await getAllPages(browser),results=[];for(let page of pages){let tid=await pageTargetId(page).catch(()=>null);tid&&results.push({targetId:tid,title:await page.title().catch(()=>``),url:page.url(),type:`page`})}return results}async function createPageViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),context=browser.contexts()[0]??await browser.newContext();ensureContextState(context);let page=await context.newPage();ensurePageState(page);let targetUrl=opts.url.trim()||`about:blank`;targetUrl!==`about:blank`&&await page.goto(targetUrl,{timeout:3e4}).catch(()=>{});let tid=await pageTargetId(page).catch(()=>null);if(!tid)throw Error(`Failed to get targetId for new page`);return{targetId:tid,title:await page.title().catch(()=>``),url:page.url(),type:`page`}}async function closePageByTargetIdViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),page=await findPageByTargetId(browser,opts.targetId,opts.cdpUrl);if(!page)throw Error(`tab not found`);await page.close()}async function focusPageByTargetIdViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),page=await findPageByTargetId(browser,opts.targetId,opts.cdpUrl);if(!page)throw Error(`tab not found`);try{await page.bringToFront()}catch(err){let session=await page.context().newCDPSession(page);try{await session.send(`Page.bringToFront`);return}catch{throw err}finally{await session.detach().catch(()=>{})}}}async function getPageErrorsViaPlaywright(opts){let state=ensurePageState(await getPageForTargetId(opts)),errors=[...state.errors];return opts.clear&&(state.errors=[]),{errors}}async function getNetworkRequestsViaPlaywright(opts){let state=ensurePageState(await getPageForTargetId(opts)),raw=[...state.requests],filter=typeof opts.filter==`string`?opts.filter.trim():``,requests=filter?raw.filter(r=>r.url.includes(filter)):raw;return opts.clear&&(state.requests=[],state.requestIds=new WeakMap),{requests}}function consolePriority(level){switch(level){case`error`:return 3;case`warning`:return 2;case`info`:case`log`:return 1;case`debug`:return 0;default:return 1}}async function getConsoleMessagesViaPlaywright(opts){let state=ensurePageState(await getPageForTargetId(opts));if(!opts.level)return[...state.console];let min=consolePriority(opts.level);return state.console.filter(msg=>consolePriority(msg.type)>=min)}const INTERACTIVE_ROLES=new Set([`button`,`link`,`textbox`,`checkbox`,`radio`,`combobox`,`listbox`,`menuitem`,`menuitemcheckbox`,`menuitemradio`,`option`,`searchbox`,`slider`,`spinbutton`,`switch`,`tab`,`treeitem`]),CONTENT_ROLES=new Set([`heading`,`cell`,`gridcell`,`columnheader`,`rowheader`,`listitem`,`article`,`region`,`main`,`navigation`]),STRUCTURAL_ROLES=new Set([`generic`,`group`,`list`,`table`,`row`,`rowgroup`,`grid`,`treegrid`,`menu`,`menubar`,`toolbar`,`tablist`,`tree`,`directory`,`document`,`application`,`presentation`,`none`]);function getRoleSnapshotStats(snapshot,refs){let interactive=Object.values(refs).filter(r=>INTERACTIVE_ROLES.has(r.role)).length;return{lines:snapshot.split(`
1
+ import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-pt7Tr4HA.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import{t as normalizeBaseUrl}from"./normalize-base-url-D_sv6Zgt.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-D9hC2aG0.js";import"./manifest-registry-009gLJ4l.js";import"./config-BpChMIJ6.js";import"./redact-CgO7wehS.js";import{n as formatErrorMessage}from"./errors-tAt19c1E.js";import{_ as withCdpSocket,d as normalizeCdpWsUrl,g as getHeadersWithAuth,m as fetchJson,p as appendCdpPath,t as getChromeWebSocketUrl,u as formatAriaSnapshot}from"./chrome-CFmcixaE.js";import{t as resolvePreferredBuilderForceAgentsTmpDir}from"./tmp-builderforce-dir-BOumzMSc.js";import"./ports-DTku9NSx.js";import path from"node:path";import crypto from"node:crypto";import fs from"node:fs/promises";import{chromium,devices}from"playwright-core";const pageStates=new WeakMap,contextStates=new WeakMap,observedContexts=new WeakSet,observedPages=new WeakSet,roleRefsByTarget=new Map;let cached=null,connecting=null;function normalizeCdpUrl(raw){return raw.replace(/\/$/,``)}function findNetworkRequestById(state,id){for(let i=state.requests.length-1;i>=0;--i){let candidate=state.requests[i];if(candidate&&candidate.id===id)return candidate}}function roleRefsKey(cdpUrl,targetId){return`${normalizeCdpUrl(cdpUrl)}::${targetId}`}function rememberRoleRefsForTarget(opts){let targetId=opts.targetId.trim();if(targetId)for(roleRefsByTarget.set(roleRefsKey(opts.cdpUrl,targetId),{refs:opts.refs,...opts.frameSelector?{frameSelector:opts.frameSelector}:{},...opts.mode?{mode:opts.mode}:{}});roleRefsByTarget.size>50;){let first=roleRefsByTarget.keys().next();if(first.done)break;roleRefsByTarget.delete(first.value)}}function storeRoleRefsForTarget(opts){let state=ensurePageState(opts.page);state.roleRefs=opts.refs,state.roleRefsFrameSelector=opts.frameSelector,state.roleRefsMode=opts.mode,opts.targetId?.trim()&&rememberRoleRefsForTarget({cdpUrl:opts.cdpUrl,targetId:opts.targetId,refs:opts.refs,frameSelector:opts.frameSelector,mode:opts.mode})}function restoreRoleRefsForTarget(opts){let targetId=opts.targetId?.trim()||``;if(!targetId)return;let cached=roleRefsByTarget.get(roleRefsKey(opts.cdpUrl,targetId));if(!cached)return;let state=ensurePageState(opts.page);state.roleRefs||(state.roleRefs=cached.refs,state.roleRefsFrameSelector=cached.frameSelector,state.roleRefsMode=cached.mode)}function ensurePageState(page){let existing=pageStates.get(page);if(existing)return existing;let state={console:[],errors:[],requests:[],requestIds:new WeakMap,nextRequestId:0,armIdUpload:0,armIdDialog:0,armIdDownload:0};return pageStates.set(page,state),observedPages.has(page)||(observedPages.add(page),page.on(`console`,msg=>{let entry={type:msg.type(),text:msg.text(),timestamp:new Date().toISOString(),location:msg.location()};state.console.push(entry),state.console.length>500&&state.console.shift()}),page.on(`pageerror`,err=>{state.errors.push({message:err?.message?String(err.message):String(err),name:err?.name?String(err.name):void 0,stack:err?.stack?String(err.stack):void 0,timestamp:new Date().toISOString()}),state.errors.length>200&&state.errors.shift()}),page.on(`request`,req=>{state.nextRequestId+=1;let id=`r${state.nextRequestId}`;state.requestIds.set(req,id),state.requests.push({id,timestamp:new Date().toISOString(),method:req.method(),url:req.url(),resourceType:req.resourceType()}),state.requests.length>500&&state.requests.shift()}),page.on(`response`,resp=>{let req=resp.request(),id=state.requestIds.get(req);if(!id)return;let rec=findNetworkRequestById(state,id);rec&&(rec.status=resp.status(),rec.ok=resp.ok())}),page.on(`requestfailed`,req=>{let id=state.requestIds.get(req);if(!id)return;let rec=findNetworkRequestById(state,id);rec&&(rec.failureText=req.failure()?.errorText,rec.ok=!1)}),page.on(`close`,()=>{pageStates.delete(page),observedPages.delete(page)})),state}function observeContext(context){if(!observedContexts.has(context)){observedContexts.add(context),ensureContextState(context);for(let page of context.pages())ensurePageState(page);context.on(`page`,page=>ensurePageState(page))}}function ensureContextState(context){let existing=contextStates.get(context);if(existing)return existing;let state={traceActive:!1};return contextStates.set(context,state),state}function observeBrowser(browser){for(let context of browser.contexts())observeContext(context)}async function connectBrowser(cdpUrl){let normalized=normalizeCdpUrl(cdpUrl);return cached?.cdpUrl===normalized?cached:(connecting||=(async()=>{let lastErr;for(let attempt=0;attempt<3;attempt+=1)try{let timeout=5e3+attempt*2e3,endpoint=await getChromeWebSocketUrl(normalized,timeout).catch(()=>null)??normalized,headers=getHeadersWithAuth(endpoint),browser=await chromium.connectOverCDP(endpoint,{timeout,headers}),onDisconnected=()=>{cached?.browser===browser&&(cached=null)},connected={browser,cdpUrl:normalized,onDisconnected};return cached=connected,browser.on(`disconnected`,onDisconnected),observeBrowser(browser),connected}catch(err){lastErr=err;let delay=250+attempt*250;await new Promise(r=>setTimeout(r,delay))}if(lastErr instanceof Error)throw lastErr;let message=lastErr?formatErrorMessage(lastErr):`CDP connect failed`;throw Error(message)})().finally(()=>{connecting=null}),await connecting)}async function getAllPages(browser){return browser.contexts().flatMap(c=>c.pages())}async function pageTargetId(page){let session=await page.context().newCDPSession(page);try{let info=await session.send(`Target.getTargetInfo`);return String(info?.targetInfo?.targetId??``).trim()||null}finally{await session.detach().catch(()=>{})}}async function findPageByTargetId(browser,targetId,cdpUrl){let pages=await getAllPages(browser),resolvedViaCdp=!1;for(let page of pages){let tid=null;try{tid=await pageTargetId(page),resolvedViaCdp=!0}catch{tid=null}if(tid&&tid===targetId)return page}if(!resolvedViaCdp&&pages.length===1)return pages[0];if(cdpUrl)try{let listUrl=`${normalizeBaseUrl(cdpUrl).replace(/^ws:/,`http:`).replace(/\/cdp$/,``)}/json/list`,response=await fetch(listUrl,{headers:getHeadersWithAuth(listUrl)});if(response.ok){let targets=await response.json(),target=targets.find(t=>t.id===targetId);if(target){let urlMatch=pages.filter(p=>p.url()===target.url);if(urlMatch.length===1)return urlMatch[0];if(urlMatch.length>1){let sameUrlTargets=targets.filter(t=>t.url===target.url);if(sameUrlTargets.length===urlMatch.length){let idx=sameUrlTargets.findIndex(t=>t.id===targetId);if(idx>=0&&idx<urlMatch.length)return urlMatch[idx]}}}}}catch{}return null}async function getPageForTargetId(opts){let{browser}=await connectBrowser(opts.cdpUrl),pages=await getAllPages(browser);if(!pages.length)throw Error(`No pages available in the connected browser.`);let first=pages[0];if(!opts.targetId)return first;let found=await findPageByTargetId(browser,opts.targetId,opts.cdpUrl);if(!found){if(pages.length===1)return first;throw Error(`tab not found`)}return found}function refLocator(page,ref){let normalized=ref.startsWith(`@`)?ref.slice(1):ref.startsWith(`ref=`)?ref.slice(4):ref;if(/^e\d+$/.test(normalized)){let state=pageStates.get(page);if(state?.roleRefsMode===`aria`)return(state.roleRefsFrameSelector?page.frameLocator(state.roleRefsFrameSelector):page).locator(`aria-ref=${normalized}`);let info=state?.roleRefs?.[normalized];if(!info)throw Error(`Unknown ref "${normalized}". Run a new snapshot and use a ref from that snapshot.`);let locAny=state?.roleRefsFrameSelector?page.frameLocator(state.roleRefsFrameSelector):page,locator=info.name?locAny.getByRole(info.role,{name:info.name,exact:!0}):locAny.getByRole(info.role);return info.nth===void 0?locator:locator.nth(info.nth)}return page.locator(`aria-ref=${normalized}`)}async function closePlaywrightBrowserConnection(){let cur=cached;cached=null,connecting=null,cur&&(cur.onDisconnected&&typeof cur.browser.off==`function`&&cur.browser.off(`disconnected`,cur.onDisconnected),await cur.browser.close().catch(()=>{}))}function normalizeCdpHttpBaseForJsonEndpoints(cdpUrl){try{let url=new URL(cdpUrl);return url.protocol===`ws:`?url.protocol=`http:`:url.protocol===`wss:`&&(url.protocol=`https:`),url.pathname=url.pathname.replace(/\/devtools\/browser\/.*$/,``),url.pathname=url.pathname.replace(/\/cdp$/,``),url.toString().replace(/\/$/,``)}catch{return cdpUrl.replace(/^ws:/,`http:`).replace(/^wss:/,`https:`).replace(/\/devtools\/browser\/.*$/,``).replace(/\/cdp$/,``).replace(/\/$/,``)}}function cdpSocketNeedsAttach(wsUrl){try{let pathname=new URL(wsUrl).pathname;return pathname===`/cdp`||pathname.endsWith(`/cdp`)||pathname.includes(`/devtools/browser/`)}catch{return!1}}async function tryTerminateExecutionViaCdp(opts){let cdpHttpBase=normalizeCdpHttpBaseForJsonEndpoints(opts.cdpUrl),pages=await fetchJson(appendCdpPath(cdpHttpBase,`/json/list`),2e3).catch(()=>null);if(!pages||pages.length===0)return;let target=pages.find(p=>String(p.id??``).trim()===opts.targetId),wsUrlRaw=String(target?.webSocketDebuggerUrl??``).trim();if(!wsUrlRaw)return;let wsUrl=normalizeCdpWsUrl(wsUrlRaw,cdpHttpBase),needsAttach=cdpSocketNeedsAttach(wsUrl),runWithTimeout=async(work,ms)=>{let timer,timeoutPromise=new Promise((_,reject)=>{timer=setTimeout(()=>reject(Error(`CDP command timed out`)),ms)});try{return await Promise.race([work,timeoutPromise])}finally{timer&&clearTimeout(timer)}};await withCdpSocket(wsUrl,async send=>{let sessionId;try{if(needsAttach){let attached=await runWithTimeout(send(`Target.attachToTarget`,{targetId:opts.targetId,flatten:!0}),1500);typeof attached?.sessionId==`string`&&attached.sessionId.trim()&&(sessionId=attached.sessionId)}await runWithTimeout(send(`Runtime.terminateExecution`,void 0,sessionId),1500),sessionId&&send(`Target.detachFromTarget`,{sessionId}).catch(()=>{})}catch{}},{handshakeTimeoutMs:2e3}).catch(()=>{})}async function forceDisconnectPlaywrightForTarget(opts){let normalized=normalizeCdpUrl(opts.cdpUrl);if(cached?.cdpUrl!==normalized)return;let cur=cached;if(cached=null,connecting=null,cur){cur.onDisconnected&&typeof cur.browser.off==`function`&&cur.browser.off(`disconnected`,cur.onDisconnected);let targetId=opts.targetId?.trim()||``;targetId&&await tryTerminateExecutionViaCdp({cdpUrl:normalized,targetId}).catch(()=>{}),cur.browser.close().catch(()=>{})}}async function listPagesViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),pages=await getAllPages(browser),results=[];for(let page of pages){let tid=await pageTargetId(page).catch(()=>null);tid&&results.push({targetId:tid,title:await page.title().catch(()=>``),url:page.url(),type:`page`})}return results}async function createPageViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),context=browser.contexts()[0]??await browser.newContext();ensureContextState(context);let page=await context.newPage();ensurePageState(page);let targetUrl=opts.url.trim()||`about:blank`;targetUrl!==`about:blank`&&await page.goto(targetUrl,{timeout:3e4}).catch(()=>{});let tid=await pageTargetId(page).catch(()=>null);if(!tid)throw Error(`Failed to get targetId for new page`);return{targetId:tid,title:await page.title().catch(()=>``),url:page.url(),type:`page`}}async function closePageByTargetIdViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),page=await findPageByTargetId(browser,opts.targetId,opts.cdpUrl);if(!page)throw Error(`tab not found`);await page.close()}async function focusPageByTargetIdViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),page=await findPageByTargetId(browser,opts.targetId,opts.cdpUrl);if(!page)throw Error(`tab not found`);try{await page.bringToFront()}catch(err){let session=await page.context().newCDPSession(page);try{await session.send(`Page.bringToFront`);return}catch{throw err}finally{await session.detach().catch(()=>{})}}}async function getPageErrorsViaPlaywright(opts){let state=ensurePageState(await getPageForTargetId(opts)),errors=[...state.errors];return opts.clear&&(state.errors=[]),{errors}}async function getNetworkRequestsViaPlaywright(opts){let state=ensurePageState(await getPageForTargetId(opts)),raw=[...state.requests],filter=typeof opts.filter==`string`?opts.filter.trim():``,requests=filter?raw.filter(r=>r.url.includes(filter)):raw;return opts.clear&&(state.requests=[],state.requestIds=new WeakMap),{requests}}function consolePriority(level){switch(level){case`error`:return 3;case`warning`:return 2;case`info`:case`log`:return 1;case`debug`:return 0;default:return 1}}async function getConsoleMessagesViaPlaywright(opts){let state=ensurePageState(await getPageForTargetId(opts));if(!opts.level)return[...state.console];let min=consolePriority(opts.level);return state.console.filter(msg=>consolePriority(msg.type)>=min)}const INTERACTIVE_ROLES=new Set([`button`,`link`,`textbox`,`checkbox`,`radio`,`combobox`,`listbox`,`menuitem`,`menuitemcheckbox`,`menuitemradio`,`option`,`searchbox`,`slider`,`spinbutton`,`switch`,`tab`,`treeitem`]),CONTENT_ROLES=new Set([`heading`,`cell`,`gridcell`,`columnheader`,`rowheader`,`listitem`,`article`,`region`,`main`,`navigation`]),STRUCTURAL_ROLES=new Set([`generic`,`group`,`list`,`table`,`row`,`rowgroup`,`grid`,`treegrid`,`menu`,`menubar`,`toolbar`,`tablist`,`tree`,`directory`,`document`,`application`,`presentation`,`none`]);function getRoleSnapshotStats(snapshot,refs){let interactive=Object.values(refs).filter(r=>INTERACTIVE_ROLES.has(r.role)).length;return{lines:snapshot.split(`
2
2
  `).length,chars:snapshot.length,refs:Object.keys(refs).length,interactive}}function getIndentLevel(line){let match=line.match(/^(\s*)/);return match?Math.floor(match[1].length/2):0}function matchInteractiveSnapshotLine(line,options){let depth=getIndentLevel(line);if(options.maxDepth!==void 0&&depth>options.maxDepth)return null;let match=line.match(/^(\s*-\s*)(\w+)(?:\s+"([^"]*)")?(.*)$/);if(!match)return null;let[,,roleRaw,name,suffix]=match;return roleRaw.startsWith(`/`)?null:{roleRaw,role:roleRaw.toLowerCase(),...name?{name}:{},suffix}}function createRoleNameTracker(){let counts=new Map,refsByKey=new Map;return{counts,refsByKey,getKey(role,name){return`${role}:${name??``}`},getNextIndex(role,name){let key=this.getKey(role,name),current=counts.get(key)??0;return counts.set(key,current+1),current},trackRef(role,name,ref){let key=this.getKey(role,name),list=refsByKey.get(key)??[];list.push(ref),refsByKey.set(key,list)},getDuplicateKeys(){let out=new Set;for(let[key,refs]of refsByKey)refs.length>1&&out.add(key);return out}}}function removeNthFromNonDuplicates(refs,tracker){let duplicates=tracker.getDuplicateKeys();for(let[ref,data]of Object.entries(refs)){let key=tracker.getKey(data.role,data.name);duplicates.has(key)||delete refs[ref]?.nth}}function compactTree(tree){let lines=tree.split(`
3
3
  `),result=[];for(let i=0;i<lines.length;i+=1){let line=lines[i];if(line.includes(`[ref=`)){result.push(line);continue}if(line.includes(`:`)&&!line.trimEnd().endsWith(`:`)){result.push(line);continue}let currentIndent=getIndentLevel(line),hasRelevantChildren=!1;for(let j=i+1;j<lines.length&&!(getIndentLevel(lines[j])<=currentIndent);j+=1)if(lines[j]?.includes(`[ref=`)){hasRelevantChildren=!0;break}hasRelevantChildren&&result.push(line)}return result.join(`
4
4
  `)}function processLine(line,refs,options,tracker,nextRef){let depth=getIndentLevel(line);if(options.maxDepth!==void 0&&depth>options.maxDepth)return null;let match=line.match(/^(\s*-\s*)(\w+)(?:\s+"([^"]*)")?(.*)$/);if(!match)return options.interactive?null:line;let[,prefix,roleRaw,name,suffix]=match;if(roleRaw.startsWith(`/`))return options.interactive?null:line;let role=roleRaw.toLowerCase(),isInteractive=INTERACTIVE_ROLES.has(role),isContent=CONTENT_ROLES.has(role),isStructural=STRUCTURAL_ROLES.has(role);if(options.interactive&&!isInteractive||options.compact&&isStructural&&!name)return null;if(!(isInteractive||isContent&&name))return line;let ref=nextRef(),nth=tracker.getNextIndex(role,name);tracker.trackRef(role,name,ref),refs[ref]={role,name,nth};let enhanced=`${prefix}${roleRaw}`;return name&&(enhanced+=` "${name}"`),enhanced+=` [ref=${ref}]`,nth>0&&(enhanced+=` [nth=${nth}]`),suffix&&(enhanced+=suffix),enhanced}function parseRoleRef(raw){let trimmed=raw.trim();if(!trimmed)return null;let normalized=trimmed.startsWith(`@`)?trimmed.slice(1):trimmed.startsWith(`ref=`)?trimmed.slice(4):trimmed;return/^e\d+$/.test(normalized)?normalized:null}function buildRoleSnapshotFromAriaSnapshot(ariaSnapshot,options={}){let lines=ariaSnapshot.split(`
@@ -1,4 +1,4 @@
1
- import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-9bRFKBI_.js";import{t as normalizeBaseUrl}from"./normalize-base-url-DmugqkQ6.js";import{t as formatCliCommand}from"./command-format-D806O2pt.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-3R_ZyUxB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-_1Ca6jGb.js";import{_ as withCdpSocket,d as normalizeCdpWsUrl,g as getHeadersWithAuth,m as fetchJson,p as appendCdpPath,t as getChromeWebSocketUrl,u as formatAriaSnapshot}from"./chrome-a3X9_-nf.js";import"./redact-BHdfp2MZ.js";import{n as formatErrorMessage}from"./errors-B1MIg3g-.js";import{t as resolvePreferredBuilderForceAgentsTmpDir}from"./tmp-builderforce-dir-CgcZDXhj.js";import"./ports-DgmEDNOm.js";import path from"node:path";import crypto from"node:crypto";import fs from"node:fs/promises";import{chromium,devices}from"playwright-core";const pageStates=new WeakMap,contextStates=new WeakMap,observedContexts=new WeakSet,observedPages=new WeakSet,roleRefsByTarget=new Map;let cached=null,connecting=null;function normalizeCdpUrl(raw){return raw.replace(/\/$/,``)}function findNetworkRequestById(state,id){for(let i=state.requests.length-1;i>=0;--i){let candidate=state.requests[i];if(candidate&&candidate.id===id)return candidate}}function roleRefsKey(cdpUrl,targetId){return`${normalizeCdpUrl(cdpUrl)}::${targetId}`}function rememberRoleRefsForTarget(opts){let targetId=opts.targetId.trim();if(targetId)for(roleRefsByTarget.set(roleRefsKey(opts.cdpUrl,targetId),{refs:opts.refs,...opts.frameSelector?{frameSelector:opts.frameSelector}:{},...opts.mode?{mode:opts.mode}:{}});roleRefsByTarget.size>50;){let first=roleRefsByTarget.keys().next();if(first.done)break;roleRefsByTarget.delete(first.value)}}function storeRoleRefsForTarget(opts){let state=ensurePageState(opts.page);state.roleRefs=opts.refs,state.roleRefsFrameSelector=opts.frameSelector,state.roleRefsMode=opts.mode,opts.targetId?.trim()&&rememberRoleRefsForTarget({cdpUrl:opts.cdpUrl,targetId:opts.targetId,refs:opts.refs,frameSelector:opts.frameSelector,mode:opts.mode})}function restoreRoleRefsForTarget(opts){let targetId=opts.targetId?.trim()||``;if(!targetId)return;let cached=roleRefsByTarget.get(roleRefsKey(opts.cdpUrl,targetId));if(!cached)return;let state=ensurePageState(opts.page);state.roleRefs||(state.roleRefs=cached.refs,state.roleRefsFrameSelector=cached.frameSelector,state.roleRefsMode=cached.mode)}function ensurePageState(page){let existing=pageStates.get(page);if(existing)return existing;let state={console:[],errors:[],requests:[],requestIds:new WeakMap,nextRequestId:0,armIdUpload:0,armIdDialog:0,armIdDownload:0};return pageStates.set(page,state),observedPages.has(page)||(observedPages.add(page),page.on(`console`,msg=>{let entry={type:msg.type(),text:msg.text(),timestamp:new Date().toISOString(),location:msg.location()};state.console.push(entry),state.console.length>500&&state.console.shift()}),page.on(`pageerror`,err=>{state.errors.push({message:err?.message?String(err.message):String(err),name:err?.name?String(err.name):void 0,stack:err?.stack?String(err.stack):void 0,timestamp:new Date().toISOString()}),state.errors.length>200&&state.errors.shift()}),page.on(`request`,req=>{state.nextRequestId+=1;let id=`r${state.nextRequestId}`;state.requestIds.set(req,id),state.requests.push({id,timestamp:new Date().toISOString(),method:req.method(),url:req.url(),resourceType:req.resourceType()}),state.requests.length>500&&state.requests.shift()}),page.on(`response`,resp=>{let req=resp.request(),id=state.requestIds.get(req);if(!id)return;let rec=findNetworkRequestById(state,id);rec&&(rec.status=resp.status(),rec.ok=resp.ok())}),page.on(`requestfailed`,req=>{let id=state.requestIds.get(req);if(!id)return;let rec=findNetworkRequestById(state,id);rec&&(rec.failureText=req.failure()?.errorText,rec.ok=!1)}),page.on(`close`,()=>{pageStates.delete(page),observedPages.delete(page)})),state}function observeContext(context){if(!observedContexts.has(context)){observedContexts.add(context),ensureContextState(context);for(let page of context.pages())ensurePageState(page);context.on(`page`,page=>ensurePageState(page))}}function ensureContextState(context){let existing=contextStates.get(context);if(existing)return existing;let state={traceActive:!1};return contextStates.set(context,state),state}function observeBrowser(browser){for(let context of browser.contexts())observeContext(context)}async function connectBrowser(cdpUrl){let normalized=normalizeCdpUrl(cdpUrl);return cached?.cdpUrl===normalized?cached:(connecting||=(async()=>{let lastErr;for(let attempt=0;attempt<3;attempt+=1)try{let timeout=5e3+attempt*2e3,endpoint=await getChromeWebSocketUrl(normalized,timeout).catch(()=>null)??normalized,headers=getHeadersWithAuth(endpoint),browser=await chromium.connectOverCDP(endpoint,{timeout,headers}),onDisconnected=()=>{cached?.browser===browser&&(cached=null)},connected={browser,cdpUrl:normalized,onDisconnected};return cached=connected,browser.on(`disconnected`,onDisconnected),observeBrowser(browser),connected}catch(err){lastErr=err;let delay=250+attempt*250;await new Promise(r=>setTimeout(r,delay))}if(lastErr instanceof Error)throw lastErr;let message=lastErr?formatErrorMessage(lastErr):`CDP connect failed`;throw Error(message)})().finally(()=>{connecting=null}),await connecting)}async function getAllPages(browser){return browser.contexts().flatMap(c=>c.pages())}async function pageTargetId(page){let session=await page.context().newCDPSession(page);try{let info=await session.send(`Target.getTargetInfo`);return String(info?.targetInfo?.targetId??``).trim()||null}finally{await session.detach().catch(()=>{})}}async function findPageByTargetId(browser,targetId,cdpUrl){let pages=await getAllPages(browser),resolvedViaCdp=!1;for(let page of pages){let tid=null;try{tid=await pageTargetId(page),resolvedViaCdp=!0}catch{tid=null}if(tid&&tid===targetId)return page}if(!resolvedViaCdp&&pages.length===1)return pages[0];if(cdpUrl)try{let listUrl=`${normalizeBaseUrl(cdpUrl).replace(/^ws:/,`http:`).replace(/\/cdp$/,``)}/json/list`,response=await fetch(listUrl,{headers:getHeadersWithAuth(listUrl)});if(response.ok){let targets=await response.json(),target=targets.find(t=>t.id===targetId);if(target){let urlMatch=pages.filter(p=>p.url()===target.url);if(urlMatch.length===1)return urlMatch[0];if(urlMatch.length>1){let sameUrlTargets=targets.filter(t=>t.url===target.url);if(sameUrlTargets.length===urlMatch.length){let idx=sameUrlTargets.findIndex(t=>t.id===targetId);if(idx>=0&&idx<urlMatch.length)return urlMatch[idx]}}}}}catch{}return null}async function getPageForTargetId(opts){let{browser}=await connectBrowser(opts.cdpUrl),pages=await getAllPages(browser);if(!pages.length)throw Error(`No pages available in the connected browser.`);let first=pages[0];if(!opts.targetId)return first;let found=await findPageByTargetId(browser,opts.targetId,opts.cdpUrl);if(!found){if(pages.length===1)return first;throw Error(`tab not found`)}return found}function refLocator(page,ref){let normalized=ref.startsWith(`@`)?ref.slice(1):ref.startsWith(`ref=`)?ref.slice(4):ref;if(/^e\d+$/.test(normalized)){let state=pageStates.get(page);if(state?.roleRefsMode===`aria`)return(state.roleRefsFrameSelector?page.frameLocator(state.roleRefsFrameSelector):page).locator(`aria-ref=${normalized}`);let info=state?.roleRefs?.[normalized];if(!info)throw Error(`Unknown ref "${normalized}". Run a new snapshot and use a ref from that snapshot.`);let locAny=state?.roleRefsFrameSelector?page.frameLocator(state.roleRefsFrameSelector):page,locator=info.name?locAny.getByRole(info.role,{name:info.name,exact:!0}):locAny.getByRole(info.role);return info.nth===void 0?locator:locator.nth(info.nth)}return page.locator(`aria-ref=${normalized}`)}async function closePlaywrightBrowserConnection(){let cur=cached;cached=null,connecting=null,cur&&(cur.onDisconnected&&typeof cur.browser.off==`function`&&cur.browser.off(`disconnected`,cur.onDisconnected),await cur.browser.close().catch(()=>{}))}function normalizeCdpHttpBaseForJsonEndpoints(cdpUrl){try{let url=new URL(cdpUrl);return url.protocol===`ws:`?url.protocol=`http:`:url.protocol===`wss:`&&(url.protocol=`https:`),url.pathname=url.pathname.replace(/\/devtools\/browser\/.*$/,``),url.pathname=url.pathname.replace(/\/cdp$/,``),url.toString().replace(/\/$/,``)}catch{return cdpUrl.replace(/^ws:/,`http:`).replace(/^wss:/,`https:`).replace(/\/devtools\/browser\/.*$/,``).replace(/\/cdp$/,``).replace(/\/$/,``)}}function cdpSocketNeedsAttach(wsUrl){try{let pathname=new URL(wsUrl).pathname;return pathname===`/cdp`||pathname.endsWith(`/cdp`)||pathname.includes(`/devtools/browser/`)}catch{return!1}}async function tryTerminateExecutionViaCdp(opts){let cdpHttpBase=normalizeCdpHttpBaseForJsonEndpoints(opts.cdpUrl),pages=await fetchJson(appendCdpPath(cdpHttpBase,`/json/list`),2e3).catch(()=>null);if(!pages||pages.length===0)return;let target=pages.find(p=>String(p.id??``).trim()===opts.targetId),wsUrlRaw=String(target?.webSocketDebuggerUrl??``).trim();if(!wsUrlRaw)return;let wsUrl=normalizeCdpWsUrl(wsUrlRaw,cdpHttpBase),needsAttach=cdpSocketNeedsAttach(wsUrl),runWithTimeout=async(work,ms)=>{let timer,timeoutPromise=new Promise((_,reject)=>{timer=setTimeout(()=>reject(Error(`CDP command timed out`)),ms)});try{return await Promise.race([work,timeoutPromise])}finally{timer&&clearTimeout(timer)}};await withCdpSocket(wsUrl,async send=>{let sessionId;try{if(needsAttach){let attached=await runWithTimeout(send(`Target.attachToTarget`,{targetId:opts.targetId,flatten:!0}),1500);typeof attached?.sessionId==`string`&&attached.sessionId.trim()&&(sessionId=attached.sessionId)}await runWithTimeout(send(`Runtime.terminateExecution`,void 0,sessionId),1500),sessionId&&send(`Target.detachFromTarget`,{sessionId}).catch(()=>{})}catch{}},{handshakeTimeoutMs:2e3}).catch(()=>{})}async function forceDisconnectPlaywrightForTarget(opts){let normalized=normalizeCdpUrl(opts.cdpUrl);if(cached?.cdpUrl!==normalized)return;let cur=cached;if(cached=null,connecting=null,cur){cur.onDisconnected&&typeof cur.browser.off==`function`&&cur.browser.off(`disconnected`,cur.onDisconnected);let targetId=opts.targetId?.trim()||``;targetId&&await tryTerminateExecutionViaCdp({cdpUrl:normalized,targetId}).catch(()=>{}),cur.browser.close().catch(()=>{})}}async function listPagesViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),pages=await getAllPages(browser),results=[];for(let page of pages){let tid=await pageTargetId(page).catch(()=>null);tid&&results.push({targetId:tid,title:await page.title().catch(()=>``),url:page.url(),type:`page`})}return results}async function createPageViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),context=browser.contexts()[0]??await browser.newContext();ensureContextState(context);let page=await context.newPage();ensurePageState(page);let targetUrl=opts.url.trim()||`about:blank`;targetUrl!==`about:blank`&&await page.goto(targetUrl,{timeout:3e4}).catch(()=>{});let tid=await pageTargetId(page).catch(()=>null);if(!tid)throw Error(`Failed to get targetId for new page`);return{targetId:tid,title:await page.title().catch(()=>``),url:page.url(),type:`page`}}async function closePageByTargetIdViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),page=await findPageByTargetId(browser,opts.targetId,opts.cdpUrl);if(!page)throw Error(`tab not found`);await page.close()}async function focusPageByTargetIdViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),page=await findPageByTargetId(browser,opts.targetId,opts.cdpUrl);if(!page)throw Error(`tab not found`);try{await page.bringToFront()}catch(err){let session=await page.context().newCDPSession(page);try{await session.send(`Page.bringToFront`);return}catch{throw err}finally{await session.detach().catch(()=>{})}}}async function getPageErrorsViaPlaywright(opts){let state=ensurePageState(await getPageForTargetId(opts)),errors=[...state.errors];return opts.clear&&(state.errors=[]),{errors}}async function getNetworkRequestsViaPlaywright(opts){let state=ensurePageState(await getPageForTargetId(opts)),raw=[...state.requests],filter=typeof opts.filter==`string`?opts.filter.trim():``,requests=filter?raw.filter(r=>r.url.includes(filter)):raw;return opts.clear&&(state.requests=[],state.requestIds=new WeakMap),{requests}}function consolePriority(level){switch(level){case`error`:return 3;case`warning`:return 2;case`info`:case`log`:return 1;case`debug`:return 0;default:return 1}}async function getConsoleMessagesViaPlaywright(opts){let state=ensurePageState(await getPageForTargetId(opts));if(!opts.level)return[...state.console];let min=consolePriority(opts.level);return state.console.filter(msg=>consolePriority(msg.type)>=min)}const INTERACTIVE_ROLES=new Set([`button`,`link`,`textbox`,`checkbox`,`radio`,`combobox`,`listbox`,`menuitem`,`menuitemcheckbox`,`menuitemradio`,`option`,`searchbox`,`slider`,`spinbutton`,`switch`,`tab`,`treeitem`]),CONTENT_ROLES=new Set([`heading`,`cell`,`gridcell`,`columnheader`,`rowheader`,`listitem`,`article`,`region`,`main`,`navigation`]),STRUCTURAL_ROLES=new Set([`generic`,`group`,`list`,`table`,`row`,`rowgroup`,`grid`,`treegrid`,`menu`,`menubar`,`toolbar`,`tablist`,`tree`,`directory`,`document`,`application`,`presentation`,`none`]);function getRoleSnapshotStats(snapshot,refs){let interactive=Object.values(refs).filter(r=>INTERACTIVE_ROLES.has(r.role)).length;return{lines:snapshot.split(`
1
+ import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-DG9J_VTz.js";import{t as normalizeBaseUrl}from"./normalize-base-url-DmugqkQ6.js";import{t as formatCliCommand}from"./command-format-D806O2pt.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-BLBq4T2o.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BgV_FYSq.js";import{_ as withCdpSocket,d as normalizeCdpWsUrl,g as getHeadersWithAuth,m as fetchJson,p as appendCdpPath,t as getChromeWebSocketUrl,u as formatAriaSnapshot}from"./chrome-DXt86tmV.js";import"./redact-BHdfp2MZ.js";import{n as formatErrorMessage}from"./errors-B1MIg3g-.js";import{t as resolvePreferredBuilderForceAgentsTmpDir}from"./tmp-builderforce-dir-CgcZDXhj.js";import"./ports-DgmEDNOm.js";import path from"node:path";import crypto from"node:crypto";import fs from"node:fs/promises";import{chromium,devices}from"playwright-core";const pageStates=new WeakMap,contextStates=new WeakMap,observedContexts=new WeakSet,observedPages=new WeakSet,roleRefsByTarget=new Map;let cached=null,connecting=null;function normalizeCdpUrl(raw){return raw.replace(/\/$/,``)}function findNetworkRequestById(state,id){for(let i=state.requests.length-1;i>=0;--i){let candidate=state.requests[i];if(candidate&&candidate.id===id)return candidate}}function roleRefsKey(cdpUrl,targetId){return`${normalizeCdpUrl(cdpUrl)}::${targetId}`}function rememberRoleRefsForTarget(opts){let targetId=opts.targetId.trim();if(targetId)for(roleRefsByTarget.set(roleRefsKey(opts.cdpUrl,targetId),{refs:opts.refs,...opts.frameSelector?{frameSelector:opts.frameSelector}:{},...opts.mode?{mode:opts.mode}:{}});roleRefsByTarget.size>50;){let first=roleRefsByTarget.keys().next();if(first.done)break;roleRefsByTarget.delete(first.value)}}function storeRoleRefsForTarget(opts){let state=ensurePageState(opts.page);state.roleRefs=opts.refs,state.roleRefsFrameSelector=opts.frameSelector,state.roleRefsMode=opts.mode,opts.targetId?.trim()&&rememberRoleRefsForTarget({cdpUrl:opts.cdpUrl,targetId:opts.targetId,refs:opts.refs,frameSelector:opts.frameSelector,mode:opts.mode})}function restoreRoleRefsForTarget(opts){let targetId=opts.targetId?.trim()||``;if(!targetId)return;let cached=roleRefsByTarget.get(roleRefsKey(opts.cdpUrl,targetId));if(!cached)return;let state=ensurePageState(opts.page);state.roleRefs||(state.roleRefs=cached.refs,state.roleRefsFrameSelector=cached.frameSelector,state.roleRefsMode=cached.mode)}function ensurePageState(page){let existing=pageStates.get(page);if(existing)return existing;let state={console:[],errors:[],requests:[],requestIds:new WeakMap,nextRequestId:0,armIdUpload:0,armIdDialog:0,armIdDownload:0};return pageStates.set(page,state),observedPages.has(page)||(observedPages.add(page),page.on(`console`,msg=>{let entry={type:msg.type(),text:msg.text(),timestamp:new Date().toISOString(),location:msg.location()};state.console.push(entry),state.console.length>500&&state.console.shift()}),page.on(`pageerror`,err=>{state.errors.push({message:err?.message?String(err.message):String(err),name:err?.name?String(err.name):void 0,stack:err?.stack?String(err.stack):void 0,timestamp:new Date().toISOString()}),state.errors.length>200&&state.errors.shift()}),page.on(`request`,req=>{state.nextRequestId+=1;let id=`r${state.nextRequestId}`;state.requestIds.set(req,id),state.requests.push({id,timestamp:new Date().toISOString(),method:req.method(),url:req.url(),resourceType:req.resourceType()}),state.requests.length>500&&state.requests.shift()}),page.on(`response`,resp=>{let req=resp.request(),id=state.requestIds.get(req);if(!id)return;let rec=findNetworkRequestById(state,id);rec&&(rec.status=resp.status(),rec.ok=resp.ok())}),page.on(`requestfailed`,req=>{let id=state.requestIds.get(req);if(!id)return;let rec=findNetworkRequestById(state,id);rec&&(rec.failureText=req.failure()?.errorText,rec.ok=!1)}),page.on(`close`,()=>{pageStates.delete(page),observedPages.delete(page)})),state}function observeContext(context){if(!observedContexts.has(context)){observedContexts.add(context),ensureContextState(context);for(let page of context.pages())ensurePageState(page);context.on(`page`,page=>ensurePageState(page))}}function ensureContextState(context){let existing=contextStates.get(context);if(existing)return existing;let state={traceActive:!1};return contextStates.set(context,state),state}function observeBrowser(browser){for(let context of browser.contexts())observeContext(context)}async function connectBrowser(cdpUrl){let normalized=normalizeCdpUrl(cdpUrl);return cached?.cdpUrl===normalized?cached:(connecting||=(async()=>{let lastErr;for(let attempt=0;attempt<3;attempt+=1)try{let timeout=5e3+attempt*2e3,endpoint=await getChromeWebSocketUrl(normalized,timeout).catch(()=>null)??normalized,headers=getHeadersWithAuth(endpoint),browser=await chromium.connectOverCDP(endpoint,{timeout,headers}),onDisconnected=()=>{cached?.browser===browser&&(cached=null)},connected={browser,cdpUrl:normalized,onDisconnected};return cached=connected,browser.on(`disconnected`,onDisconnected),observeBrowser(browser),connected}catch(err){lastErr=err;let delay=250+attempt*250;await new Promise(r=>setTimeout(r,delay))}if(lastErr instanceof Error)throw lastErr;let message=lastErr?formatErrorMessage(lastErr):`CDP connect failed`;throw Error(message)})().finally(()=>{connecting=null}),await connecting)}async function getAllPages(browser){return browser.contexts().flatMap(c=>c.pages())}async function pageTargetId(page){let session=await page.context().newCDPSession(page);try{let info=await session.send(`Target.getTargetInfo`);return String(info?.targetInfo?.targetId??``).trim()||null}finally{await session.detach().catch(()=>{})}}async function findPageByTargetId(browser,targetId,cdpUrl){let pages=await getAllPages(browser),resolvedViaCdp=!1;for(let page of pages){let tid=null;try{tid=await pageTargetId(page),resolvedViaCdp=!0}catch{tid=null}if(tid&&tid===targetId)return page}if(!resolvedViaCdp&&pages.length===1)return pages[0];if(cdpUrl)try{let listUrl=`${normalizeBaseUrl(cdpUrl).replace(/^ws:/,`http:`).replace(/\/cdp$/,``)}/json/list`,response=await fetch(listUrl,{headers:getHeadersWithAuth(listUrl)});if(response.ok){let targets=await response.json(),target=targets.find(t=>t.id===targetId);if(target){let urlMatch=pages.filter(p=>p.url()===target.url);if(urlMatch.length===1)return urlMatch[0];if(urlMatch.length>1){let sameUrlTargets=targets.filter(t=>t.url===target.url);if(sameUrlTargets.length===urlMatch.length){let idx=sameUrlTargets.findIndex(t=>t.id===targetId);if(idx>=0&&idx<urlMatch.length)return urlMatch[idx]}}}}}catch{}return null}async function getPageForTargetId(opts){let{browser}=await connectBrowser(opts.cdpUrl),pages=await getAllPages(browser);if(!pages.length)throw Error(`No pages available in the connected browser.`);let first=pages[0];if(!opts.targetId)return first;let found=await findPageByTargetId(browser,opts.targetId,opts.cdpUrl);if(!found){if(pages.length===1)return first;throw Error(`tab not found`)}return found}function refLocator(page,ref){let normalized=ref.startsWith(`@`)?ref.slice(1):ref.startsWith(`ref=`)?ref.slice(4):ref;if(/^e\d+$/.test(normalized)){let state=pageStates.get(page);if(state?.roleRefsMode===`aria`)return(state.roleRefsFrameSelector?page.frameLocator(state.roleRefsFrameSelector):page).locator(`aria-ref=${normalized}`);let info=state?.roleRefs?.[normalized];if(!info)throw Error(`Unknown ref "${normalized}". Run a new snapshot and use a ref from that snapshot.`);let locAny=state?.roleRefsFrameSelector?page.frameLocator(state.roleRefsFrameSelector):page,locator=info.name?locAny.getByRole(info.role,{name:info.name,exact:!0}):locAny.getByRole(info.role);return info.nth===void 0?locator:locator.nth(info.nth)}return page.locator(`aria-ref=${normalized}`)}async function closePlaywrightBrowserConnection(){let cur=cached;cached=null,connecting=null,cur&&(cur.onDisconnected&&typeof cur.browser.off==`function`&&cur.browser.off(`disconnected`,cur.onDisconnected),await cur.browser.close().catch(()=>{}))}function normalizeCdpHttpBaseForJsonEndpoints(cdpUrl){try{let url=new URL(cdpUrl);return url.protocol===`ws:`?url.protocol=`http:`:url.protocol===`wss:`&&(url.protocol=`https:`),url.pathname=url.pathname.replace(/\/devtools\/browser\/.*$/,``),url.pathname=url.pathname.replace(/\/cdp$/,``),url.toString().replace(/\/$/,``)}catch{return cdpUrl.replace(/^ws:/,`http:`).replace(/^wss:/,`https:`).replace(/\/devtools\/browser\/.*$/,``).replace(/\/cdp$/,``).replace(/\/$/,``)}}function cdpSocketNeedsAttach(wsUrl){try{let pathname=new URL(wsUrl).pathname;return pathname===`/cdp`||pathname.endsWith(`/cdp`)||pathname.includes(`/devtools/browser/`)}catch{return!1}}async function tryTerminateExecutionViaCdp(opts){let cdpHttpBase=normalizeCdpHttpBaseForJsonEndpoints(opts.cdpUrl),pages=await fetchJson(appendCdpPath(cdpHttpBase,`/json/list`),2e3).catch(()=>null);if(!pages||pages.length===0)return;let target=pages.find(p=>String(p.id??``).trim()===opts.targetId),wsUrlRaw=String(target?.webSocketDebuggerUrl??``).trim();if(!wsUrlRaw)return;let wsUrl=normalizeCdpWsUrl(wsUrlRaw,cdpHttpBase),needsAttach=cdpSocketNeedsAttach(wsUrl),runWithTimeout=async(work,ms)=>{let timer,timeoutPromise=new Promise((_,reject)=>{timer=setTimeout(()=>reject(Error(`CDP command timed out`)),ms)});try{return await Promise.race([work,timeoutPromise])}finally{timer&&clearTimeout(timer)}};await withCdpSocket(wsUrl,async send=>{let sessionId;try{if(needsAttach){let attached=await runWithTimeout(send(`Target.attachToTarget`,{targetId:opts.targetId,flatten:!0}),1500);typeof attached?.sessionId==`string`&&attached.sessionId.trim()&&(sessionId=attached.sessionId)}await runWithTimeout(send(`Runtime.terminateExecution`,void 0,sessionId),1500),sessionId&&send(`Target.detachFromTarget`,{sessionId}).catch(()=>{})}catch{}},{handshakeTimeoutMs:2e3}).catch(()=>{})}async function forceDisconnectPlaywrightForTarget(opts){let normalized=normalizeCdpUrl(opts.cdpUrl);if(cached?.cdpUrl!==normalized)return;let cur=cached;if(cached=null,connecting=null,cur){cur.onDisconnected&&typeof cur.browser.off==`function`&&cur.browser.off(`disconnected`,cur.onDisconnected);let targetId=opts.targetId?.trim()||``;targetId&&await tryTerminateExecutionViaCdp({cdpUrl:normalized,targetId}).catch(()=>{}),cur.browser.close().catch(()=>{})}}async function listPagesViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),pages=await getAllPages(browser),results=[];for(let page of pages){let tid=await pageTargetId(page).catch(()=>null);tid&&results.push({targetId:tid,title:await page.title().catch(()=>``),url:page.url(),type:`page`})}return results}async function createPageViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),context=browser.contexts()[0]??await browser.newContext();ensureContextState(context);let page=await context.newPage();ensurePageState(page);let targetUrl=opts.url.trim()||`about:blank`;targetUrl!==`about:blank`&&await page.goto(targetUrl,{timeout:3e4}).catch(()=>{});let tid=await pageTargetId(page).catch(()=>null);if(!tid)throw Error(`Failed to get targetId for new page`);return{targetId:tid,title:await page.title().catch(()=>``),url:page.url(),type:`page`}}async function closePageByTargetIdViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),page=await findPageByTargetId(browser,opts.targetId,opts.cdpUrl);if(!page)throw Error(`tab not found`);await page.close()}async function focusPageByTargetIdViaPlaywright(opts){let{browser}=await connectBrowser(opts.cdpUrl),page=await findPageByTargetId(browser,opts.targetId,opts.cdpUrl);if(!page)throw Error(`tab not found`);try{await page.bringToFront()}catch(err){let session=await page.context().newCDPSession(page);try{await session.send(`Page.bringToFront`);return}catch{throw err}finally{await session.detach().catch(()=>{})}}}async function getPageErrorsViaPlaywright(opts){let state=ensurePageState(await getPageForTargetId(opts)),errors=[...state.errors];return opts.clear&&(state.errors=[]),{errors}}async function getNetworkRequestsViaPlaywright(opts){let state=ensurePageState(await getPageForTargetId(opts)),raw=[...state.requests],filter=typeof opts.filter==`string`?opts.filter.trim():``,requests=filter?raw.filter(r=>r.url.includes(filter)):raw;return opts.clear&&(state.requests=[],state.requestIds=new WeakMap),{requests}}function consolePriority(level){switch(level){case`error`:return 3;case`warning`:return 2;case`info`:case`log`:return 1;case`debug`:return 0;default:return 1}}async function getConsoleMessagesViaPlaywright(opts){let state=ensurePageState(await getPageForTargetId(opts));if(!opts.level)return[...state.console];let min=consolePriority(opts.level);return state.console.filter(msg=>consolePriority(msg.type)>=min)}const INTERACTIVE_ROLES=new Set([`button`,`link`,`textbox`,`checkbox`,`radio`,`combobox`,`listbox`,`menuitem`,`menuitemcheckbox`,`menuitemradio`,`option`,`searchbox`,`slider`,`spinbutton`,`switch`,`tab`,`treeitem`]),CONTENT_ROLES=new Set([`heading`,`cell`,`gridcell`,`columnheader`,`rowheader`,`listitem`,`article`,`region`,`main`,`navigation`]),STRUCTURAL_ROLES=new Set([`generic`,`group`,`list`,`table`,`row`,`rowgroup`,`grid`,`treegrid`,`menu`,`menubar`,`toolbar`,`tablist`,`tree`,`directory`,`document`,`application`,`presentation`,`none`]);function getRoleSnapshotStats(snapshot,refs){let interactive=Object.values(refs).filter(r=>INTERACTIVE_ROLES.has(r.role)).length;return{lines:snapshot.split(`
2
2
  `).length,chars:snapshot.length,refs:Object.keys(refs).length,interactive}}function getIndentLevel(line){let match=line.match(/^(\s*)/);return match?Math.floor(match[1].length/2):0}function matchInteractiveSnapshotLine(line,options){let depth=getIndentLevel(line);if(options.maxDepth!==void 0&&depth>options.maxDepth)return null;let match=line.match(/^(\s*-\s*)(\w+)(?:\s+"([^"]*)")?(.*)$/);if(!match)return null;let[,,roleRaw,name,suffix]=match;return roleRaw.startsWith(`/`)?null:{roleRaw,role:roleRaw.toLowerCase(),...name?{name}:{},suffix}}function createRoleNameTracker(){let counts=new Map,refsByKey=new Map;return{counts,refsByKey,getKey(role,name){return`${role}:${name??``}`},getNextIndex(role,name){let key=this.getKey(role,name),current=counts.get(key)??0;return counts.set(key,current+1),current},trackRef(role,name,ref){let key=this.getKey(role,name),list=refsByKey.get(key)??[];list.push(ref),refsByKey.set(key,list)},getDuplicateKeys(){let out=new Set;for(let[key,refs]of refsByKey)refs.length>1&&out.add(key);return out}}}function removeNthFromNonDuplicates(refs,tracker){let duplicates=tracker.getDuplicateKeys();for(let[ref,data]of Object.entries(refs)){let key=tracker.getKey(data.role,data.name);duplicates.has(key)||delete refs[ref]?.nth}}function compactTree(tree){let lines=tree.split(`
3
3
  `),result=[];for(let i=0;i<lines.length;i+=1){let line=lines[i];if(line.includes(`[ref=`)){result.push(line);continue}if(line.includes(`:`)&&!line.trimEnd().endsWith(`:`)){result.push(line);continue}let currentIndent=getIndentLevel(line),hasRelevantChildren=!1;for(let j=i+1;j<lines.length&&!(getIndentLevel(lines[j])<=currentIndent);j+=1)if(lines[j]?.includes(`[ref=`)){hasRelevantChildren=!0;break}hasRelevantChildren&&result.push(line)}return result.join(`
4
4
  `)}function processLine(line,refs,options,tracker,nextRef){let depth=getIndentLevel(line);if(options.maxDepth!==void 0&&depth>options.maxDepth)return null;let match=line.match(/^(\s*-\s*)(\w+)(?:\s+"([^"]*)")?(.*)$/);if(!match)return options.interactive?null:line;let[,prefix,roleRaw,name,suffix]=match;if(roleRaw.startsWith(`/`))return options.interactive?null:line;let role=roleRaw.toLowerCase(),isInteractive=INTERACTIVE_ROLES.has(role),isContent=CONTENT_ROLES.has(role),isStructural=STRUCTURAL_ROLES.has(role);if(options.interactive&&!isInteractive||options.compact&&isStructural&&!name)return null;if(!(isInteractive||isContent&&name))return line;let ref=nextRef(),nth=tracker.getNextIndex(role,name);tracker.trackRef(role,name,ref),refs[ref]={role,name,nth};let enhanced=`${prefix}${roleRaw}`;return name&&(enhanced+=` "${name}"`),enhanced+=` [ref=${ref}]`,nth>0&&(enhanced+=` [nth=${nth}]`),suffix&&(enhanced+=suffix),enhanced}function parseRoleRef(raw){let trimmed=raw.trim();if(!trimmed)return null;let normalized=trimmed.startsWith(`@`)?trimmed.slice(1):trimmed.startsWith(`ref=`)?trimmed.slice(4):trimmed;return/^e\d+$/.test(normalized)?normalized:null}function buildRoleSnapshotFromAriaSnapshot(ariaSnapshot,options={}){let lines=ariaSnapshot.split(`
@@ -1,2 +1,2 @@
1
- import{B as theme}from"./utils-DbaBVFaK.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import{t as runCommandWithTimeout}from"./exec-DdcIjeyn.js";import{r as loadConfig}from"./io-3R_ZyUxB.js";import os from"node:os";import qrcode from"qrcode-terminal";function normalizeUrl(raw,schemeFallback){let trimmed=raw.trim();if(!trimmed)return null;try{let parsed=new URL(trimmed),scheme=parsed.protocol.replace(`:`,``);if(!scheme)return null;let resolvedScheme=scheme===`http`?`ws`:scheme===`https`?`wss`:scheme;if(resolvedScheme!==`ws`&&resolvedScheme!==`wss`)return null;let host=parsed.hostname;return host?`${resolvedScheme}://${host}${parsed.port?`:${parsed.port}`:``}`:null}catch{}let withoutPath=trimmed.split(`/`)[0]??``;return withoutPath?`${schemeFallback}://${withoutPath}`:null}function resolveGatewayPort(cfg,env){let envRaw=env.BUILDERFORCE_AGENTS_GATEWAY_PORT?.trim();if(envRaw){let parsed=Number.parseInt(envRaw,10);if(Number.isFinite(parsed)&&parsed>0)return parsed}let configPort=cfg.gateway?.port;return typeof configPort==`number`&&Number.isFinite(configPort)&&configPort>0?configPort:18789}function resolveScheme(cfg,opts){return opts?.forceSecure||cfg.gateway?.tls?.enabled===!0?`wss`:`ws`}function parseIPv4Octets(address){let parts=address.split(`.`);if(parts.length!==4)return null;let octets=parts.map(part=>Number.parseInt(part,10));return octets.some(value=>!Number.isFinite(value)||value<0||value>255)?null:[octets[0],octets[1],octets[2],octets[3]]}function isPrivateIPv4(address){let octets=parseIPv4Octets(address);if(!octets)return!1;let[a,b]=octets;return a===10||a===172&&b>=16&&b<=31||a===192&&b===168}function isTailnetIPv4(address){let octets=parseIPv4Octets(address);if(!octets)return!1;let[a,b]=octets;return a===100&&b>=64&&b<=127}function pickIPv4Matching(networkInterfaces,matches){let nets=networkInterfaces();for(let entries of Object.values(nets))if(entries)for(let entry of entries){let isIpv4=entry?.family===`IPv4`;if(!entry||entry.internal||!isIpv4)continue;let address=entry.address?.trim()??``;if(address&&matches(address))return address}return null}function pickLanIPv4(networkInterfaces){return pickIPv4Matching(networkInterfaces,isPrivateIPv4)}function pickTailnetIPv4(networkInterfaces){return pickIPv4Matching(networkInterfaces,isTailnetIPv4)}function parsePossiblyNoisyJsonObject(raw){let start=raw.indexOf(`{`),end=raw.lastIndexOf(`}`);if(start===-1||end<=start)return{};try{return JSON.parse(raw.slice(start,end+1))}catch{return{}}}async function resolveTailnetHost(runCommandWithTimeout){if(!runCommandWithTimeout)return null;for(let candidate of[`tailscale`,`/Applications/Tailscale.app/Contents/MacOS/Tailscale`])try{let result=await runCommandWithTimeout([candidate,`status`,`--json`],{timeoutMs:5e3});if(result.code!==0)continue;let raw=result.stdout.trim();if(!raw)continue;let parsed=parsePossiblyNoisyJsonObject(raw),self=typeof parsed.Self==`object`&&parsed.Self!==null?parsed.Self:void 0,dns=typeof self?.DNSName==`string`?self.DNSName:void 0;if(dns&&dns.length>0)return dns.replace(/\.$/,``);let ips=Array.isArray(self?.TailscaleIPs)?self.TailscaleIPs:[];if(ips.length>0)return ips[0]??null}catch{continue}return null}function resolveAuth(cfg,env){let mode=cfg.gateway?.auth?.mode,token=env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN?.trim()||env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN?.trim()||cfg.gateway?.auth?.token?.trim(),password=env.BUILDERFORCE_AGENTS_GATEWAY_PASSWORD?.trim()||env.BUILDERFORCE_AGENTS_GATEWAY_PASSWORD?.trim()||cfg.gateway?.auth?.password?.trim();return mode===`password`?password?{password,label:`password`}:{error:`Gateway auth is set to password, but no password is configured.`}:mode===`token`?token?{token,label:`token`}:{error:`Gateway auth is set to token, but no token is configured.`}:token?{token,label:`token`}:password?{password,label:`password`}:{error:`Gateway auth is not configured (no token or password).`}}async function resolveGatewayUrl(cfg,opts){let scheme=resolveScheme(cfg,{forceSecure:opts.forceSecure}),port=resolveGatewayPort(cfg,opts.env);if(typeof opts.publicUrl==`string`&&opts.publicUrl.trim()){let url=normalizeUrl(opts.publicUrl,scheme);return url?{url,source:`plugins.entries.device-pair.config.publicUrl`}:{error:`Configured publicUrl is invalid.`}}let remoteUrlRaw=cfg.gateway?.remote?.url,remoteUrl=typeof remoteUrlRaw==`string`&&remoteUrlRaw.trim()?normalizeUrl(remoteUrlRaw,scheme):null;if(opts.preferRemoteUrl&&remoteUrl)return{url:remoteUrl,source:`gateway.remote.url`};let tailscaleMode=cfg.gateway?.tailscale?.mode??`off`;if(tailscaleMode===`serve`||tailscaleMode===`funnel`){let host=await resolveTailnetHost(opts.runCommandWithTimeout);return host?{url:`wss://${host}`,source:`gateway.tailscale.mode=${tailscaleMode}`}:{error:`Tailscale Serve is enabled, but MagicDNS could not be resolved.`}}if(remoteUrl)return{url:remoteUrl,source:`gateway.remote.url`};let bind=cfg.gateway?.bind??`loopback`;if(bind===`custom`){let host=cfg.gateway?.customBindHost?.trim();return host?{url:`${scheme}://${host}:${port}`,source:`gateway.bind=custom`}:{error:`gateway.bind=custom requires gateway.customBindHost.`}}if(bind===`tailnet`){let host=pickTailnetIPv4(opts.networkInterfaces);return host?{url:`${scheme}://${host}:${port}`,source:`gateway.bind=tailnet`}:{error:`gateway.bind=tailnet set, but no tailnet IP was found.`}}if(bind===`lan`){let host=pickLanIPv4(opts.networkInterfaces);return host?{url:`${scheme}://${host}:${port}`,source:`gateway.bind=lan`}:{error:`gateway.bind=lan set, but no private LAN IP was found.`}}return{error:`Gateway is only bound to loopback. Set gateway.bind=lan, enable tailscale serve, or configure plugins.entries.device-pair.config.publicUrl.`}}function encodePairingSetupCode(payload){let json=JSON.stringify(payload);return Buffer.from(json,`utf8`).toString(`base64`).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/g,``)}async function resolvePairingSetupFromConfig(cfg,options={}){let env=options.env??process.env,auth=resolveAuth(cfg,env);if(auth.error)return{ok:!1,error:auth.error};let urlResult=await resolveGatewayUrl(cfg,{env,publicUrl:options.publicUrl,preferRemoteUrl:options.preferRemoteUrl,forceSecure:options.forceSecure,runCommandWithTimeout:options.runCommandWithTimeout,networkInterfaces:options.networkInterfaces??os.networkInterfaces});return urlResult.url?auth.label?{ok:!0,payload:{url:urlResult.url,token:auth.token,password:auth.password},authLabel:auth.label,urlSource:urlResult.source??`unknown`}:{ok:!1,error:`Gateway auth is not configured (no token or password).`}:{ok:!1,error:urlResult.error??`Gateway URL unavailable.`}}function renderQrAscii(data){return new Promise(resolve=>{qrcode.generate(data,{small:!0},output=>{resolve(output)})})}function readDevicePairPublicUrlFromConfig(cfg){let value=cfg.plugins?.entries?.[`device-pair`]?.config?.publicUrl;if(typeof value!=`string`)return;let trimmed=value.trim();return trimmed.length>0?trimmed:void 0}function registerQrCli(program){program.command(`qr`).description(`Generate an iOS pairing QR code and setup code`).option(`--remote`,`Use gateway.remote.url and gateway.remote token/password (ignores device-pair publicUrl)`,!1).option(`--url <url>`,`Override gateway URL used in the setup payload`).option(`--public-url <url>`,`Override gateway public URL used in the setup payload`).option(`--token <token>`,`Override gateway token for setup payload`).option(`--password <password>`,`Override gateway password for setup payload`).option(`--setup-code-only`,`Print only the setup code`,!1).option(`--no-ascii`,`Skip ASCII QR rendering`).option(`--json`,`Output JSON`,!1).action(async opts=>{try{if(opts.token&&opts.password)throw Error(`Use either --token or --password, not both.`);let loaded=loadConfig(),cfg={...loaded,gateway:{...loaded.gateway,auth:{...loaded.gateway?.auth}}},token=typeof opts.token==`string`?opts.token.trim():``,password=typeof opts.password==`string`?opts.password.trim():``,wantsRemote=opts.remote===!0;if(token&&(cfg.gateway.auth.mode=`token`,cfg.gateway.auth.token=token),password&&(cfg.gateway.auth.mode=`password`,cfg.gateway.auth.password=password),wantsRemote&&!token&&!password){let remoteToken=typeof cfg.gateway?.remote?.token==`string`?cfg.gateway.remote.token.trim():``,remotePassword=typeof cfg.gateway?.remote?.password==`string`?cfg.gateway.remote.password.trim():``;remoteToken?(cfg.gateway.auth.mode=`token`,cfg.gateway.auth.token=remoteToken,cfg.gateway.auth.password=void 0):remotePassword&&(cfg.gateway.auth.mode=`password`,cfg.gateway.auth.password=remotePassword,cfg.gateway.auth.token=void 0)}if(wantsRemote&&!opts.url&&!opts.publicUrl){let tailscaleMode=cfg.gateway?.tailscale?.mode??`off`,remoteUrl=cfg.gateway?.remote?.url;if(!(typeof remoteUrl==`string`&&remoteUrl.trim().length>0)&&!(tailscaleMode===`serve`||tailscaleMode===`funnel`))throw Error(`qr --remote requires gateway.remote.url (or gateway.tailscale.mode=serve/funnel).`)}let resolved=await resolvePairingSetupFromConfig(cfg,{publicUrl:(typeof opts.url==`string`&&opts.url.trim()?opts.url.trim():typeof opts.publicUrl==`string`&&opts.publicUrl.trim()?opts.publicUrl.trim():void 0)??(wantsRemote?void 0:readDevicePairPublicUrlFromConfig(cfg)),preferRemoteUrl:wantsRemote,runCommandWithTimeout:async(argv,runOpts)=>await runCommandWithTimeout(argv,{timeoutMs:runOpts.timeoutMs})});if(!resolved.ok)throw Error(resolved.error);let setupCode=encodePairingSetupCode(resolved.payload);if(opts.setupCodeOnly){defaultRuntime.log(setupCode);return}if(opts.json){defaultRuntime.log(JSON.stringify({setupCode,gatewayUrl:resolved.payload.url,auth:resolved.authLabel,urlSource:resolved.urlSource},null,2));return}let lines=[theme.heading(`Pairing QR`),`Scan this with the BuilderForceAgents iOS app (Onboarding -> Scan QR).`,``];if(opts.ascii!==!1){let qrAscii=await renderQrAscii(setupCode);lines.push(qrAscii.trimEnd(),``)}lines.push(`${theme.muted(`Setup code:`)} ${setupCode}`,`${theme.muted(`Gateway:`)} ${resolved.payload.url}`,`${theme.muted(`Auth:`)} ${resolved.authLabel}`,`${theme.muted(`Source:`)} ${resolved.urlSource}`,``,`Approve after scan with:`,` ${theme.command(`builderforce devices list`)}`,` ${theme.command(`builderforce devices approve <requestId>`)}`),defaultRuntime.log(lines.join(`
1
+ import{B as theme}from"./utils-DbaBVFaK.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import{t as runCommandWithTimeout}from"./exec-DdcIjeyn.js";import{r as loadConfig}from"./io-BLBq4T2o.js";import os from"node:os";import qrcode from"qrcode-terminal";function normalizeUrl(raw,schemeFallback){let trimmed=raw.trim();if(!trimmed)return null;try{let parsed=new URL(trimmed),scheme=parsed.protocol.replace(`:`,``);if(!scheme)return null;let resolvedScheme=scheme===`http`?`ws`:scheme===`https`?`wss`:scheme;if(resolvedScheme!==`ws`&&resolvedScheme!==`wss`)return null;let host=parsed.hostname;return host?`${resolvedScheme}://${host}${parsed.port?`:${parsed.port}`:``}`:null}catch{}let withoutPath=trimmed.split(`/`)[0]??``;return withoutPath?`${schemeFallback}://${withoutPath}`:null}function resolveGatewayPort(cfg,env){let envRaw=env.BUILDERFORCE_AGENTS_GATEWAY_PORT?.trim();if(envRaw){let parsed=Number.parseInt(envRaw,10);if(Number.isFinite(parsed)&&parsed>0)return parsed}let configPort=cfg.gateway?.port;return typeof configPort==`number`&&Number.isFinite(configPort)&&configPort>0?configPort:18789}function resolveScheme(cfg,opts){return opts?.forceSecure||cfg.gateway?.tls?.enabled===!0?`wss`:`ws`}function parseIPv4Octets(address){let parts=address.split(`.`);if(parts.length!==4)return null;let octets=parts.map(part=>Number.parseInt(part,10));return octets.some(value=>!Number.isFinite(value)||value<0||value>255)?null:[octets[0],octets[1],octets[2],octets[3]]}function isPrivateIPv4(address){let octets=parseIPv4Octets(address);if(!octets)return!1;let[a,b]=octets;return a===10||a===172&&b>=16&&b<=31||a===192&&b===168}function isTailnetIPv4(address){let octets=parseIPv4Octets(address);if(!octets)return!1;let[a,b]=octets;return a===100&&b>=64&&b<=127}function pickIPv4Matching(networkInterfaces,matches){let nets=networkInterfaces();for(let entries of Object.values(nets))if(entries)for(let entry of entries){let isIpv4=entry?.family===`IPv4`;if(!entry||entry.internal||!isIpv4)continue;let address=entry.address?.trim()??``;if(address&&matches(address))return address}return null}function pickLanIPv4(networkInterfaces){return pickIPv4Matching(networkInterfaces,isPrivateIPv4)}function pickTailnetIPv4(networkInterfaces){return pickIPv4Matching(networkInterfaces,isTailnetIPv4)}function parsePossiblyNoisyJsonObject(raw){let start=raw.indexOf(`{`),end=raw.lastIndexOf(`}`);if(start===-1||end<=start)return{};try{return JSON.parse(raw.slice(start,end+1))}catch{return{}}}async function resolveTailnetHost(runCommandWithTimeout){if(!runCommandWithTimeout)return null;for(let candidate of[`tailscale`,`/Applications/Tailscale.app/Contents/MacOS/Tailscale`])try{let result=await runCommandWithTimeout([candidate,`status`,`--json`],{timeoutMs:5e3});if(result.code!==0)continue;let raw=result.stdout.trim();if(!raw)continue;let parsed=parsePossiblyNoisyJsonObject(raw),self=typeof parsed.Self==`object`&&parsed.Self!==null?parsed.Self:void 0,dns=typeof self?.DNSName==`string`?self.DNSName:void 0;if(dns&&dns.length>0)return dns.replace(/\.$/,``);let ips=Array.isArray(self?.TailscaleIPs)?self.TailscaleIPs:[];if(ips.length>0)return ips[0]??null}catch{continue}return null}function resolveAuth(cfg,env){let mode=cfg.gateway?.auth?.mode,token=env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN?.trim()||env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN?.trim()||cfg.gateway?.auth?.token?.trim(),password=env.BUILDERFORCE_AGENTS_GATEWAY_PASSWORD?.trim()||env.BUILDERFORCE_AGENTS_GATEWAY_PASSWORD?.trim()||cfg.gateway?.auth?.password?.trim();return mode===`password`?password?{password,label:`password`}:{error:`Gateway auth is set to password, but no password is configured.`}:mode===`token`?token?{token,label:`token`}:{error:`Gateway auth is set to token, but no token is configured.`}:token?{token,label:`token`}:password?{password,label:`password`}:{error:`Gateway auth is not configured (no token or password).`}}async function resolveGatewayUrl(cfg,opts){let scheme=resolveScheme(cfg,{forceSecure:opts.forceSecure}),port=resolveGatewayPort(cfg,opts.env);if(typeof opts.publicUrl==`string`&&opts.publicUrl.trim()){let url=normalizeUrl(opts.publicUrl,scheme);return url?{url,source:`plugins.entries.device-pair.config.publicUrl`}:{error:`Configured publicUrl is invalid.`}}let remoteUrlRaw=cfg.gateway?.remote?.url,remoteUrl=typeof remoteUrlRaw==`string`&&remoteUrlRaw.trim()?normalizeUrl(remoteUrlRaw,scheme):null;if(opts.preferRemoteUrl&&remoteUrl)return{url:remoteUrl,source:`gateway.remote.url`};let tailscaleMode=cfg.gateway?.tailscale?.mode??`off`;if(tailscaleMode===`serve`||tailscaleMode===`funnel`){let host=await resolveTailnetHost(opts.runCommandWithTimeout);return host?{url:`wss://${host}`,source:`gateway.tailscale.mode=${tailscaleMode}`}:{error:`Tailscale Serve is enabled, but MagicDNS could not be resolved.`}}if(remoteUrl)return{url:remoteUrl,source:`gateway.remote.url`};let bind=cfg.gateway?.bind??`loopback`;if(bind===`custom`){let host=cfg.gateway?.customBindHost?.trim();return host?{url:`${scheme}://${host}:${port}`,source:`gateway.bind=custom`}:{error:`gateway.bind=custom requires gateway.customBindHost.`}}if(bind===`tailnet`){let host=pickTailnetIPv4(opts.networkInterfaces);return host?{url:`${scheme}://${host}:${port}`,source:`gateway.bind=tailnet`}:{error:`gateway.bind=tailnet set, but no tailnet IP was found.`}}if(bind===`lan`){let host=pickLanIPv4(opts.networkInterfaces);return host?{url:`${scheme}://${host}:${port}`,source:`gateway.bind=lan`}:{error:`gateway.bind=lan set, but no private LAN IP was found.`}}return{error:`Gateway is only bound to loopback. Set gateway.bind=lan, enable tailscale serve, or configure plugins.entries.device-pair.config.publicUrl.`}}function encodePairingSetupCode(payload){let json=JSON.stringify(payload);return Buffer.from(json,`utf8`).toString(`base64`).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/g,``)}async function resolvePairingSetupFromConfig(cfg,options={}){let env=options.env??process.env,auth=resolveAuth(cfg,env);if(auth.error)return{ok:!1,error:auth.error};let urlResult=await resolveGatewayUrl(cfg,{env,publicUrl:options.publicUrl,preferRemoteUrl:options.preferRemoteUrl,forceSecure:options.forceSecure,runCommandWithTimeout:options.runCommandWithTimeout,networkInterfaces:options.networkInterfaces??os.networkInterfaces});return urlResult.url?auth.label?{ok:!0,payload:{url:urlResult.url,token:auth.token,password:auth.password},authLabel:auth.label,urlSource:urlResult.source??`unknown`}:{ok:!1,error:`Gateway auth is not configured (no token or password).`}:{ok:!1,error:urlResult.error??`Gateway URL unavailable.`}}function renderQrAscii(data){return new Promise(resolve=>{qrcode.generate(data,{small:!0},output=>{resolve(output)})})}function readDevicePairPublicUrlFromConfig(cfg){let value=cfg.plugins?.entries?.[`device-pair`]?.config?.publicUrl;if(typeof value!=`string`)return;let trimmed=value.trim();return trimmed.length>0?trimmed:void 0}function registerQrCli(program){program.command(`qr`).description(`Generate an iOS pairing QR code and setup code`).option(`--remote`,`Use gateway.remote.url and gateway.remote token/password (ignores device-pair publicUrl)`,!1).option(`--url <url>`,`Override gateway URL used in the setup payload`).option(`--public-url <url>`,`Override gateway public URL used in the setup payload`).option(`--token <token>`,`Override gateway token for setup payload`).option(`--password <password>`,`Override gateway password for setup payload`).option(`--setup-code-only`,`Print only the setup code`,!1).option(`--no-ascii`,`Skip ASCII QR rendering`).option(`--json`,`Output JSON`,!1).action(async opts=>{try{if(opts.token&&opts.password)throw Error(`Use either --token or --password, not both.`);let loaded=loadConfig(),cfg={...loaded,gateway:{...loaded.gateway,auth:{...loaded.gateway?.auth}}},token=typeof opts.token==`string`?opts.token.trim():``,password=typeof opts.password==`string`?opts.password.trim():``,wantsRemote=opts.remote===!0;if(token&&(cfg.gateway.auth.mode=`token`,cfg.gateway.auth.token=token),password&&(cfg.gateway.auth.mode=`password`,cfg.gateway.auth.password=password),wantsRemote&&!token&&!password){let remoteToken=typeof cfg.gateway?.remote?.token==`string`?cfg.gateway.remote.token.trim():``,remotePassword=typeof cfg.gateway?.remote?.password==`string`?cfg.gateway.remote.password.trim():``;remoteToken?(cfg.gateway.auth.mode=`token`,cfg.gateway.auth.token=remoteToken,cfg.gateway.auth.password=void 0):remotePassword&&(cfg.gateway.auth.mode=`password`,cfg.gateway.auth.password=remotePassword,cfg.gateway.auth.token=void 0)}if(wantsRemote&&!opts.url&&!opts.publicUrl){let tailscaleMode=cfg.gateway?.tailscale?.mode??`off`,remoteUrl=cfg.gateway?.remote?.url;if(!(typeof remoteUrl==`string`&&remoteUrl.trim().length>0)&&!(tailscaleMode===`serve`||tailscaleMode===`funnel`))throw Error(`qr --remote requires gateway.remote.url (or gateway.tailscale.mode=serve/funnel).`)}let resolved=await resolvePairingSetupFromConfig(cfg,{publicUrl:(typeof opts.url==`string`&&opts.url.trim()?opts.url.trim():typeof opts.publicUrl==`string`&&opts.publicUrl.trim()?opts.publicUrl.trim():void 0)??(wantsRemote?void 0:readDevicePairPublicUrlFromConfig(cfg)),preferRemoteUrl:wantsRemote,runCommandWithTimeout:async(argv,runOpts)=>await runCommandWithTimeout(argv,{timeoutMs:runOpts.timeoutMs})});if(!resolved.ok)throw Error(resolved.error);let setupCode=encodePairingSetupCode(resolved.payload);if(opts.setupCodeOnly){defaultRuntime.log(setupCode);return}if(opts.json){defaultRuntime.log(JSON.stringify({setupCode,gatewayUrl:resolved.payload.url,auth:resolved.authLabel,urlSource:resolved.urlSource},null,2));return}let lines=[theme.heading(`Pairing QR`),`Scan this with the BuilderForceAgents iOS app (Onboarding -> Scan QR).`,``];if(opts.ascii!==!1){let qrAscii=await renderQrAscii(setupCode);lines.push(qrAscii.trimEnd(),``)}lines.push(`${theme.muted(`Setup code:`)} ${setupCode}`,`${theme.muted(`Gateway:`)} ${resolved.payload.url}`,`${theme.muted(`Auth:`)} ${resolved.authLabel}`,`${theme.muted(`Source:`)} ${resolved.urlSource}`,``,`Approve after scan with:`,` ${theme.command(`builderforce devices list`)}`,` ${theme.command(`builderforce devices approve <requestId>`)}`),defaultRuntime.log(lines.join(`
2
2
  `))}catch(err){defaultRuntime.error(String(err)),defaultRuntime.exit(1)}})}export{registerQrCli as t};
@@ -1,2 +1,2 @@
1
- import{z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import{t as runCommandWithTimeout}from"./exec-COgsU9ql.js";import{r as loadConfig}from"./io-CohJffHG.js";import os from"node:os";import qrcode from"qrcode-terminal";function normalizeUrl(raw,schemeFallback){let trimmed=raw.trim();if(!trimmed)return null;try{let parsed=new URL(trimmed),scheme=parsed.protocol.replace(`:`,``);if(!scheme)return null;let resolvedScheme=scheme===`http`?`ws`:scheme===`https`?`wss`:scheme;if(resolvedScheme!==`ws`&&resolvedScheme!==`wss`)return null;let host=parsed.hostname;return host?`${resolvedScheme}://${host}${parsed.port?`:${parsed.port}`:``}`:null}catch{}let withoutPath=trimmed.split(`/`)[0]??``;return withoutPath?`${schemeFallback}://${withoutPath}`:null}function resolveGatewayPort(cfg,env){let envRaw=env.BUILDERFORCE_AGENTS_GATEWAY_PORT?.trim();if(envRaw){let parsed=Number.parseInt(envRaw,10);if(Number.isFinite(parsed)&&parsed>0)return parsed}let configPort=cfg.gateway?.port;return typeof configPort==`number`&&Number.isFinite(configPort)&&configPort>0?configPort:18789}function resolveScheme(cfg,opts){return opts?.forceSecure||cfg.gateway?.tls?.enabled===!0?`wss`:`ws`}function parseIPv4Octets(address){let parts=address.split(`.`);if(parts.length!==4)return null;let octets=parts.map(part=>Number.parseInt(part,10));return octets.some(value=>!Number.isFinite(value)||value<0||value>255)?null:[octets[0],octets[1],octets[2],octets[3]]}function isPrivateIPv4(address){let octets=parseIPv4Octets(address);if(!octets)return!1;let[a,b]=octets;return a===10||a===172&&b>=16&&b<=31||a===192&&b===168}function isTailnetIPv4(address){let octets=parseIPv4Octets(address);if(!octets)return!1;let[a,b]=octets;return a===100&&b>=64&&b<=127}function pickIPv4Matching(networkInterfaces,matches){let nets=networkInterfaces();for(let entries of Object.values(nets))if(entries)for(let entry of entries){let isIpv4=entry?.family===`IPv4`;if(!entry||entry.internal||!isIpv4)continue;let address=entry.address?.trim()??``;if(address&&matches(address))return address}return null}function pickLanIPv4(networkInterfaces){return pickIPv4Matching(networkInterfaces,isPrivateIPv4)}function pickTailnetIPv4(networkInterfaces){return pickIPv4Matching(networkInterfaces,isTailnetIPv4)}function parsePossiblyNoisyJsonObject(raw){let start=raw.indexOf(`{`),end=raw.lastIndexOf(`}`);if(start===-1||end<=start)return{};try{return JSON.parse(raw.slice(start,end+1))}catch{return{}}}async function resolveTailnetHost(runCommandWithTimeout){if(!runCommandWithTimeout)return null;for(let candidate of[`tailscale`,`/Applications/Tailscale.app/Contents/MacOS/Tailscale`])try{let result=await runCommandWithTimeout([candidate,`status`,`--json`],{timeoutMs:5e3});if(result.code!==0)continue;let raw=result.stdout.trim();if(!raw)continue;let parsed=parsePossiblyNoisyJsonObject(raw),self=typeof parsed.Self==`object`&&parsed.Self!==null?parsed.Self:void 0,dns=typeof self?.DNSName==`string`?self.DNSName:void 0;if(dns&&dns.length>0)return dns.replace(/\.$/,``);let ips=Array.isArray(self?.TailscaleIPs)?self.TailscaleIPs:[];if(ips.length>0)return ips[0]??null}catch{continue}return null}function resolveAuth(cfg,env){let mode=cfg.gateway?.auth?.mode,token=env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN?.trim()||env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN?.trim()||cfg.gateway?.auth?.token?.trim(),password=env.BUILDERFORCE_AGENTS_GATEWAY_PASSWORD?.trim()||env.BUILDERFORCE_AGENTS_GATEWAY_PASSWORD?.trim()||cfg.gateway?.auth?.password?.trim();return mode===`password`?password?{password,label:`password`}:{error:`Gateway auth is set to password, but no password is configured.`}:mode===`token`?token?{token,label:`token`}:{error:`Gateway auth is set to token, but no token is configured.`}:token?{token,label:`token`}:password?{password,label:`password`}:{error:`Gateway auth is not configured (no token or password).`}}async function resolveGatewayUrl(cfg,opts){let scheme=resolveScheme(cfg,{forceSecure:opts.forceSecure}),port=resolveGatewayPort(cfg,opts.env);if(typeof opts.publicUrl==`string`&&opts.publicUrl.trim()){let url=normalizeUrl(opts.publicUrl,scheme);return url?{url,source:`plugins.entries.device-pair.config.publicUrl`}:{error:`Configured publicUrl is invalid.`}}let remoteUrlRaw=cfg.gateway?.remote?.url,remoteUrl=typeof remoteUrlRaw==`string`&&remoteUrlRaw.trim()?normalizeUrl(remoteUrlRaw,scheme):null;if(opts.preferRemoteUrl&&remoteUrl)return{url:remoteUrl,source:`gateway.remote.url`};let tailscaleMode=cfg.gateway?.tailscale?.mode??`off`;if(tailscaleMode===`serve`||tailscaleMode===`funnel`){let host=await resolveTailnetHost(opts.runCommandWithTimeout);return host?{url:`wss://${host}`,source:`gateway.tailscale.mode=${tailscaleMode}`}:{error:`Tailscale Serve is enabled, but MagicDNS could not be resolved.`}}if(remoteUrl)return{url:remoteUrl,source:`gateway.remote.url`};let bind=cfg.gateway?.bind??`loopback`;if(bind===`custom`){let host=cfg.gateway?.customBindHost?.trim();return host?{url:`${scheme}://${host}:${port}`,source:`gateway.bind=custom`}:{error:`gateway.bind=custom requires gateway.customBindHost.`}}if(bind===`tailnet`){let host=pickTailnetIPv4(opts.networkInterfaces);return host?{url:`${scheme}://${host}:${port}`,source:`gateway.bind=tailnet`}:{error:`gateway.bind=tailnet set, but no tailnet IP was found.`}}if(bind===`lan`){let host=pickLanIPv4(opts.networkInterfaces);return host?{url:`${scheme}://${host}:${port}`,source:`gateway.bind=lan`}:{error:`gateway.bind=lan set, but no private LAN IP was found.`}}return{error:`Gateway is only bound to loopback. Set gateway.bind=lan, enable tailscale serve, or configure plugins.entries.device-pair.config.publicUrl.`}}function encodePairingSetupCode(payload){let json=JSON.stringify(payload);return Buffer.from(json,`utf8`).toString(`base64`).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/g,``)}async function resolvePairingSetupFromConfig(cfg,options={}){let env=options.env??process.env,auth=resolveAuth(cfg,env);if(auth.error)return{ok:!1,error:auth.error};let urlResult=await resolveGatewayUrl(cfg,{env,publicUrl:options.publicUrl,preferRemoteUrl:options.preferRemoteUrl,forceSecure:options.forceSecure,runCommandWithTimeout:options.runCommandWithTimeout,networkInterfaces:options.networkInterfaces??os.networkInterfaces});return urlResult.url?auth.label?{ok:!0,payload:{url:urlResult.url,token:auth.token,password:auth.password},authLabel:auth.label,urlSource:urlResult.source??`unknown`}:{ok:!1,error:`Gateway auth is not configured (no token or password).`}:{ok:!1,error:urlResult.error??`Gateway URL unavailable.`}}function renderQrAscii(data){return new Promise(resolve=>{qrcode.generate(data,{small:!0},output=>{resolve(output)})})}function readDevicePairPublicUrlFromConfig(cfg){let value=cfg.plugins?.entries?.[`device-pair`]?.config?.publicUrl;if(typeof value!=`string`)return;let trimmed=value.trim();return trimmed.length>0?trimmed:void 0}function registerQrCli(program){program.command(`qr`).description(`Generate an iOS pairing QR code and setup code`).option(`--remote`,`Use gateway.remote.url and gateway.remote token/password (ignores device-pair publicUrl)`,!1).option(`--url <url>`,`Override gateway URL used in the setup payload`).option(`--public-url <url>`,`Override gateway public URL used in the setup payload`).option(`--token <token>`,`Override gateway token for setup payload`).option(`--password <password>`,`Override gateway password for setup payload`).option(`--setup-code-only`,`Print only the setup code`,!1).option(`--no-ascii`,`Skip ASCII QR rendering`).option(`--json`,`Output JSON`,!1).action(async opts=>{try{if(opts.token&&opts.password)throw Error(`Use either --token or --password, not both.`);let loaded=loadConfig(),cfg={...loaded,gateway:{...loaded.gateway,auth:{...loaded.gateway?.auth}}},token=typeof opts.token==`string`?opts.token.trim():``,password=typeof opts.password==`string`?opts.password.trim():``,wantsRemote=opts.remote===!0;if(token&&(cfg.gateway.auth.mode=`token`,cfg.gateway.auth.token=token),password&&(cfg.gateway.auth.mode=`password`,cfg.gateway.auth.password=password),wantsRemote&&!token&&!password){let remoteToken=typeof cfg.gateway?.remote?.token==`string`?cfg.gateway.remote.token.trim():``,remotePassword=typeof cfg.gateway?.remote?.password==`string`?cfg.gateway.remote.password.trim():``;remoteToken?(cfg.gateway.auth.mode=`token`,cfg.gateway.auth.token=remoteToken,cfg.gateway.auth.password=void 0):remotePassword&&(cfg.gateway.auth.mode=`password`,cfg.gateway.auth.password=remotePassword,cfg.gateway.auth.token=void 0)}if(wantsRemote&&!opts.url&&!opts.publicUrl){let tailscaleMode=cfg.gateway?.tailscale?.mode??`off`,remoteUrl=cfg.gateway?.remote?.url;if(!(typeof remoteUrl==`string`&&remoteUrl.trim().length>0)&&!(tailscaleMode===`serve`||tailscaleMode===`funnel`))throw Error(`qr --remote requires gateway.remote.url (or gateway.tailscale.mode=serve/funnel).`)}let resolved=await resolvePairingSetupFromConfig(cfg,{publicUrl:(typeof opts.url==`string`&&opts.url.trim()?opts.url.trim():typeof opts.publicUrl==`string`&&opts.publicUrl.trim()?opts.publicUrl.trim():void 0)??(wantsRemote?void 0:readDevicePairPublicUrlFromConfig(cfg)),preferRemoteUrl:wantsRemote,runCommandWithTimeout:async(argv,runOpts)=>await runCommandWithTimeout(argv,{timeoutMs:runOpts.timeoutMs})});if(!resolved.ok)throw Error(resolved.error);let setupCode=encodePairingSetupCode(resolved.payload);if(opts.setupCodeOnly){defaultRuntime.log(setupCode);return}if(opts.json){defaultRuntime.log(JSON.stringify({setupCode,gatewayUrl:resolved.payload.url,auth:resolved.authLabel,urlSource:resolved.urlSource},null,2));return}let lines=[theme.heading(`Pairing QR`),`Scan this with the BuilderForceAgents iOS app (Onboarding -> Scan QR).`,``];if(opts.ascii!==!1){let qrAscii=await renderQrAscii(setupCode);lines.push(qrAscii.trimEnd(),``)}lines.push(`${theme.muted(`Setup code:`)} ${setupCode}`,`${theme.muted(`Gateway:`)} ${resolved.payload.url}`,`${theme.muted(`Auth:`)} ${resolved.authLabel}`,`${theme.muted(`Source:`)} ${resolved.urlSource}`,``,`Approve after scan with:`,` ${theme.command(`builderforce devices list`)}`,` ${theme.command(`builderforce devices approve <requestId>`)}`),defaultRuntime.log(lines.join(`
1
+ import{z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import{t as runCommandWithTimeout}from"./exec-COgsU9ql.js";import{r as loadConfig}from"./io-D9hC2aG0.js";import os from"node:os";import qrcode from"qrcode-terminal";function normalizeUrl(raw,schemeFallback){let trimmed=raw.trim();if(!trimmed)return null;try{let parsed=new URL(trimmed),scheme=parsed.protocol.replace(`:`,``);if(!scheme)return null;let resolvedScheme=scheme===`http`?`ws`:scheme===`https`?`wss`:scheme;if(resolvedScheme!==`ws`&&resolvedScheme!==`wss`)return null;let host=parsed.hostname;return host?`${resolvedScheme}://${host}${parsed.port?`:${parsed.port}`:``}`:null}catch{}let withoutPath=trimmed.split(`/`)[0]??``;return withoutPath?`${schemeFallback}://${withoutPath}`:null}function resolveGatewayPort(cfg,env){let envRaw=env.BUILDERFORCE_AGENTS_GATEWAY_PORT?.trim();if(envRaw){let parsed=Number.parseInt(envRaw,10);if(Number.isFinite(parsed)&&parsed>0)return parsed}let configPort=cfg.gateway?.port;return typeof configPort==`number`&&Number.isFinite(configPort)&&configPort>0?configPort:18789}function resolveScheme(cfg,opts){return opts?.forceSecure||cfg.gateway?.tls?.enabled===!0?`wss`:`ws`}function parseIPv4Octets(address){let parts=address.split(`.`);if(parts.length!==4)return null;let octets=parts.map(part=>Number.parseInt(part,10));return octets.some(value=>!Number.isFinite(value)||value<0||value>255)?null:[octets[0],octets[1],octets[2],octets[3]]}function isPrivateIPv4(address){let octets=parseIPv4Octets(address);if(!octets)return!1;let[a,b]=octets;return a===10||a===172&&b>=16&&b<=31||a===192&&b===168}function isTailnetIPv4(address){let octets=parseIPv4Octets(address);if(!octets)return!1;let[a,b]=octets;return a===100&&b>=64&&b<=127}function pickIPv4Matching(networkInterfaces,matches){let nets=networkInterfaces();for(let entries of Object.values(nets))if(entries)for(let entry of entries){let isIpv4=entry?.family===`IPv4`;if(!entry||entry.internal||!isIpv4)continue;let address=entry.address?.trim()??``;if(address&&matches(address))return address}return null}function pickLanIPv4(networkInterfaces){return pickIPv4Matching(networkInterfaces,isPrivateIPv4)}function pickTailnetIPv4(networkInterfaces){return pickIPv4Matching(networkInterfaces,isTailnetIPv4)}function parsePossiblyNoisyJsonObject(raw){let start=raw.indexOf(`{`),end=raw.lastIndexOf(`}`);if(start===-1||end<=start)return{};try{return JSON.parse(raw.slice(start,end+1))}catch{return{}}}async function resolveTailnetHost(runCommandWithTimeout){if(!runCommandWithTimeout)return null;for(let candidate of[`tailscale`,`/Applications/Tailscale.app/Contents/MacOS/Tailscale`])try{let result=await runCommandWithTimeout([candidate,`status`,`--json`],{timeoutMs:5e3});if(result.code!==0)continue;let raw=result.stdout.trim();if(!raw)continue;let parsed=parsePossiblyNoisyJsonObject(raw),self=typeof parsed.Self==`object`&&parsed.Self!==null?parsed.Self:void 0,dns=typeof self?.DNSName==`string`?self.DNSName:void 0;if(dns&&dns.length>0)return dns.replace(/\.$/,``);let ips=Array.isArray(self?.TailscaleIPs)?self.TailscaleIPs:[];if(ips.length>0)return ips[0]??null}catch{continue}return null}function resolveAuth(cfg,env){let mode=cfg.gateway?.auth?.mode,token=env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN?.trim()||env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN?.trim()||cfg.gateway?.auth?.token?.trim(),password=env.BUILDERFORCE_AGENTS_GATEWAY_PASSWORD?.trim()||env.BUILDERFORCE_AGENTS_GATEWAY_PASSWORD?.trim()||cfg.gateway?.auth?.password?.trim();return mode===`password`?password?{password,label:`password`}:{error:`Gateway auth is set to password, but no password is configured.`}:mode===`token`?token?{token,label:`token`}:{error:`Gateway auth is set to token, but no token is configured.`}:token?{token,label:`token`}:password?{password,label:`password`}:{error:`Gateway auth is not configured (no token or password).`}}async function resolveGatewayUrl(cfg,opts){let scheme=resolveScheme(cfg,{forceSecure:opts.forceSecure}),port=resolveGatewayPort(cfg,opts.env);if(typeof opts.publicUrl==`string`&&opts.publicUrl.trim()){let url=normalizeUrl(opts.publicUrl,scheme);return url?{url,source:`plugins.entries.device-pair.config.publicUrl`}:{error:`Configured publicUrl is invalid.`}}let remoteUrlRaw=cfg.gateway?.remote?.url,remoteUrl=typeof remoteUrlRaw==`string`&&remoteUrlRaw.trim()?normalizeUrl(remoteUrlRaw,scheme):null;if(opts.preferRemoteUrl&&remoteUrl)return{url:remoteUrl,source:`gateway.remote.url`};let tailscaleMode=cfg.gateway?.tailscale?.mode??`off`;if(tailscaleMode===`serve`||tailscaleMode===`funnel`){let host=await resolveTailnetHost(opts.runCommandWithTimeout);return host?{url:`wss://${host}`,source:`gateway.tailscale.mode=${tailscaleMode}`}:{error:`Tailscale Serve is enabled, but MagicDNS could not be resolved.`}}if(remoteUrl)return{url:remoteUrl,source:`gateway.remote.url`};let bind=cfg.gateway?.bind??`loopback`;if(bind===`custom`){let host=cfg.gateway?.customBindHost?.trim();return host?{url:`${scheme}://${host}:${port}`,source:`gateway.bind=custom`}:{error:`gateway.bind=custom requires gateway.customBindHost.`}}if(bind===`tailnet`){let host=pickTailnetIPv4(opts.networkInterfaces);return host?{url:`${scheme}://${host}:${port}`,source:`gateway.bind=tailnet`}:{error:`gateway.bind=tailnet set, but no tailnet IP was found.`}}if(bind===`lan`){let host=pickLanIPv4(opts.networkInterfaces);return host?{url:`${scheme}://${host}:${port}`,source:`gateway.bind=lan`}:{error:`gateway.bind=lan set, but no private LAN IP was found.`}}return{error:`Gateway is only bound to loopback. Set gateway.bind=lan, enable tailscale serve, or configure plugins.entries.device-pair.config.publicUrl.`}}function encodePairingSetupCode(payload){let json=JSON.stringify(payload);return Buffer.from(json,`utf8`).toString(`base64`).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/g,``)}async function resolvePairingSetupFromConfig(cfg,options={}){let env=options.env??process.env,auth=resolveAuth(cfg,env);if(auth.error)return{ok:!1,error:auth.error};let urlResult=await resolveGatewayUrl(cfg,{env,publicUrl:options.publicUrl,preferRemoteUrl:options.preferRemoteUrl,forceSecure:options.forceSecure,runCommandWithTimeout:options.runCommandWithTimeout,networkInterfaces:options.networkInterfaces??os.networkInterfaces});return urlResult.url?auth.label?{ok:!0,payload:{url:urlResult.url,token:auth.token,password:auth.password},authLabel:auth.label,urlSource:urlResult.source??`unknown`}:{ok:!1,error:`Gateway auth is not configured (no token or password).`}:{ok:!1,error:urlResult.error??`Gateway URL unavailable.`}}function renderQrAscii(data){return new Promise(resolve=>{qrcode.generate(data,{small:!0},output=>{resolve(output)})})}function readDevicePairPublicUrlFromConfig(cfg){let value=cfg.plugins?.entries?.[`device-pair`]?.config?.publicUrl;if(typeof value!=`string`)return;let trimmed=value.trim();return trimmed.length>0?trimmed:void 0}function registerQrCli(program){program.command(`qr`).description(`Generate an iOS pairing QR code and setup code`).option(`--remote`,`Use gateway.remote.url and gateway.remote token/password (ignores device-pair publicUrl)`,!1).option(`--url <url>`,`Override gateway URL used in the setup payload`).option(`--public-url <url>`,`Override gateway public URL used in the setup payload`).option(`--token <token>`,`Override gateway token for setup payload`).option(`--password <password>`,`Override gateway password for setup payload`).option(`--setup-code-only`,`Print only the setup code`,!1).option(`--no-ascii`,`Skip ASCII QR rendering`).option(`--json`,`Output JSON`,!1).action(async opts=>{try{if(opts.token&&opts.password)throw Error(`Use either --token or --password, not both.`);let loaded=loadConfig(),cfg={...loaded,gateway:{...loaded.gateway,auth:{...loaded.gateway?.auth}}},token=typeof opts.token==`string`?opts.token.trim():``,password=typeof opts.password==`string`?opts.password.trim():``,wantsRemote=opts.remote===!0;if(token&&(cfg.gateway.auth.mode=`token`,cfg.gateway.auth.token=token),password&&(cfg.gateway.auth.mode=`password`,cfg.gateway.auth.password=password),wantsRemote&&!token&&!password){let remoteToken=typeof cfg.gateway?.remote?.token==`string`?cfg.gateway.remote.token.trim():``,remotePassword=typeof cfg.gateway?.remote?.password==`string`?cfg.gateway.remote.password.trim():``;remoteToken?(cfg.gateway.auth.mode=`token`,cfg.gateway.auth.token=remoteToken,cfg.gateway.auth.password=void 0):remotePassword&&(cfg.gateway.auth.mode=`password`,cfg.gateway.auth.password=remotePassword,cfg.gateway.auth.token=void 0)}if(wantsRemote&&!opts.url&&!opts.publicUrl){let tailscaleMode=cfg.gateway?.tailscale?.mode??`off`,remoteUrl=cfg.gateway?.remote?.url;if(!(typeof remoteUrl==`string`&&remoteUrl.trim().length>0)&&!(tailscaleMode===`serve`||tailscaleMode===`funnel`))throw Error(`qr --remote requires gateway.remote.url (or gateway.tailscale.mode=serve/funnel).`)}let resolved=await resolvePairingSetupFromConfig(cfg,{publicUrl:(typeof opts.url==`string`&&opts.url.trim()?opts.url.trim():typeof opts.publicUrl==`string`&&opts.publicUrl.trim()?opts.publicUrl.trim():void 0)??(wantsRemote?void 0:readDevicePairPublicUrlFromConfig(cfg)),preferRemoteUrl:wantsRemote,runCommandWithTimeout:async(argv,runOpts)=>await runCommandWithTimeout(argv,{timeoutMs:runOpts.timeoutMs})});if(!resolved.ok)throw Error(resolved.error);let setupCode=encodePairingSetupCode(resolved.payload);if(opts.setupCodeOnly){defaultRuntime.log(setupCode);return}if(opts.json){defaultRuntime.log(JSON.stringify({setupCode,gatewayUrl:resolved.payload.url,auth:resolved.authLabel,urlSource:resolved.urlSource},null,2));return}let lines=[theme.heading(`Pairing QR`),`Scan this with the BuilderForceAgents iOS app (Onboarding -> Scan QR).`,``];if(opts.ascii!==!1){let qrAscii=await renderQrAscii(setupCode);lines.push(qrAscii.trimEnd(),``)}lines.push(`${theme.muted(`Setup code:`)} ${setupCode}`,`${theme.muted(`Gateway:`)} ${resolved.payload.url}`,`${theme.muted(`Auth:`)} ${resolved.authLabel}`,`${theme.muted(`Source:`)} ${resolved.urlSource}`,``,`Approve after scan with:`,` ${theme.command(`builderforce devices list`)}`,` ${theme.command(`builderforce devices approve <requestId>`)}`),defaultRuntime.log(lines.join(`
2
2
  `))}catch(err){defaultRuntime.error(String(err)),defaultRuntime.exit(1)}})}export{registerQrCli as t};
@@ -1 +1 @@
1
- import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-9bRFKBI_.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-3R_ZyUxB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-_1Ca6jGb.js";import{t as registerQrCli}from"./qr-cli-qr-SFLZW.js";export{registerQrCli};
1
+ import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-DG9J_VTz.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-BLBq4T2o.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BgV_FYSq.js";import{t as registerQrCli}from"./qr-cli-CAquM1Zk.js";export{registerQrCli};
@@ -1 +1 @@
1
- import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-C1VbcUOm.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import{t as registerQrCli}from"./qr-cli-B45dCV0o.js";export{registerQrCli};
1
+ import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-pt7Tr4HA.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-D9hC2aG0.js";import"./manifest-registry-009gLJ4l.js";import"./config-BpChMIJ6.js";import{t as registerQrCli}from"./qr-cli-GsR8n1cm.js";export{registerQrCli};
@@ -1,4 +1,4 @@
1
- import"./paths-5FcIFMsj.js";import{B as theme,C as shortenHomePath,P as setVerbose,b as resolveUserPath}from"./utils-DbaBVFaK.js";import"./embedded-helpers-CEsr3aQ0.js";import"./reply-Cd3vVnD7.js";import{d as normalizeAgentId,n as DEFAULT_ACCOUNT_ID,r as DEFAULT_AGENT_ID}from"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import{r as DEFAULT_CHAT_CHANNEL}from"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import{A as resolveWorkspaceFilePath,C as WORKSPACE_RUNTIME_DIRNAME,_ as DEFAULT_IDENTITY_FILENAME,c as resolveAgentWorkspaceDir,i as resolveAgentDir,l as resolveDefaultAgentId,n as listAgentIds,t as listAgentEntries}from"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import{in as ensureAuthProfileStore,sn as resolveAuthStorePath}from"./model-selection-9bRFKBI_.js";import{t as formatCliCommand}from"./command-format-D806O2pt.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import{c as writeConfigFile,r as loadConfig}from"./io-3R_ZyUxB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-_1Ca6jGb.js";import"./runner-SxCr9kXD.js";import"./model-catalog-C6UrZ0uG.js";import"./sandbox-BZibn6PX.js";import"./chrome-a3X9_-nf.js";import"./tailscale-DLkpGquM.js";import"./auth-lebUHrkd.js";import"./server-context-DJZT7Upf.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./routes-BzfLvF8W.js";import"./redact-BHdfp2MZ.js";import"./errors-B1MIg3g-.js";import"./paths-cR8ct-Y3.js";import"./ssrf-p9k-iapc.js";import"./image-ops-C8IUQKjn.js";import"./store-CmHBQ-yX.js";import"./ports-DgmEDNOm.js";import"./trash-DD2Hc5oq.js";import"./sessions-CdanN_ZI.js";import{h as GATEWAY_CLIENT_NAMES,l as normalizeMessageChannel,m as GATEWAY_CLIENT_MODES}from"./message-channel-D_jXxXQj.js";import{n as listChannelPlugins,r as normalizeChannelId,t as getChannelPlugin}from"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./accounts-rmXEiebi.js";import"./accounts-BLueHgKj.js";import"./bindings-DR59065T.js";import"./send-DerUBvXW.js";import"./send-DyF1Xy9K.js";import{s as resolveSessionTranscriptsDirForAgent}from"./paths-DJ6rztqJ.js";import"./tool-images-B7b_OiMz.js";import"./tool-display-ByOZtWvA.js";import"./fetch-guard-8mwt3-hm.js";import"./api-key-rotation-CHBjUwUJ.js";import"./fetch-BuOLY9KP.js";import"./sqlite-C39E12XS.js";import"./tokens-CCU3zO-D.js";import"./project-context-store-wcq7lXuI.js";import"./with-timeout-Bwq-GyUQ.js";import"./deliver-BpLm3ktn.js";import"./send-CBBziNqM.js";import"./workspace-D4LK4thI.js";import"./reply-prefix-zIMgi6K6.js";import"./memory-cli-DRz4wtHk.js";import"./manager-DwywI_5-.js";import"./retry-DlVhg5qu.js";import"./client-xfoidwPI.js";import{i as randomIdempotencyKey,n as callGateway}from"./call-BbRf8gFM.js";import"./common-BTbIhLyt.js";import"./chunk-FCBlVOyo.js";import"./markdown-tables-P6uoUSFa.js";import"./ir-5BNoIXZm.js";import"./render-D1dVTEB1.js";import"./builderforcellm-syscheck-DrFJ638L.js";import"./send-4d9NswaD.js";import"./outbound-attachment-C7wByQO5.js";import"./fetch-DnVtDecb.js";import"./delivery-queue-CXKynF1P.js";import"./channel-activity-CCNDbdD3.js";import"./tables-ERcoWFDp.js";import"./pairing-store-CbvMJhD3.js";import{t as formatDocsLink}from"./links-BgWWaaOT.js";import{n as runCommandWithRuntime}from"./cli-utils-LBYKdNFb.js";import{t as formatHelpExamples}from"./help-format-Qfk2vDNX.js";import{n as withProgress}from"./progress-BfOtdN6b.js";import"./resolve-route-D49haUnv.js";import"./replies-Bd2RPZwQ.js";import"./refresh-TiC_kLgE.js";import"./coding-tools.policy-6qh9acJy.js";import"./send-BJDzwYJN.js";import{a as ensureWorkspaceAndSessions,l as moveToTrash}from"./onboard-helpers-Cf5dNq7-.js";import"./prompt-style-BpVK43GK.js";import"./pairing-labels-BW5jQZlr.js";import"./session-cost-usage-BjH7mxVj.js";import"./usage-format-DGf8ZWPH.js";import"./provider-usage-BdrU4cIE.js";import"./active-listener-Dcg19lJG.js";import"./exec-approvals-BpVPDVtV.js";import"./nodes-screen-C3TDIi8d.js";import"./project-context-CJj0Inz-.js";import"./control-service-BbsswoMy.js";import"./stagger-8EkqkqJv.js";import"./channel-selection-DyAvzlY8.js";import"./mamba-state-engine-CoGqoBTH.js";import"./transformers-stream-D7nRu4Qu.js";import{t as createDefaultDeps}from"./deps-CkJiJ6wc.js";import{t as collectOption}from"./helpers-CESJCicC.js";import"./catalog-rgiY__UQ.js";import{t as hasExplicitOptions}from"./command-options-DzGFCQYs.js";import"./note-B6NtFdXt.js";import{t as WizardCancelledError}from"./prompts-Bchzq3K0.js";import{t as createClackPrompter}from"./clack-prompter-Dg23_riR.js";import{t as resolveChannelDefaultAccountId}from"./helpers-DTDCy17p.js";import"./plugin-auto-enable-DDry2fA6.js";import"./install-safe-path-DsLq2BUJ.js";import"./npm-registry-spec-DIW6RsGN.js";import"./skill-scanner-U3AJgjqc.js";import"./installs-C9A8QFiF.js";import{n as setupChannels}from"./onboard-channels-C8FCFn29.js";import{t as requireValidConfigSnapshot}from"./config-validation-C6u-z9bJ.js";import{a as pruneAgentConfig,c as parseIdentityMarkdown,i as loadAgentIdentity,n as buildAgentSummaries,o as identityHasValues,r as findAgentEntryIndex,t as applyAgentConfig}from"./agents.config-BllQ7zna.js";import{n as resolveSessionKeyForRequest,t as agentCommand}from"./agent-cXF-aL0g.js";import"./shared-BPN3qd7G.js";import"./onboard-auth.credentials-BuT-etnE.js";import"./auth-token-CyVfNEQb.js";import{n as logConfigUpdated}from"./logging-DHa3jQN3.js";import"./provider-auth-helpers-BpTnp2Yr.js";import{t as promptAuthChoiceGrouped}from"./auth-choice-prompt-wkrUXDfB.js";import{t as applyAuthChoice}from"./auth-choice.apply-BHLQeym9.js";import"./openai-model-default-Cp3nf21W.js";import"./model-picker-BUePD7Zg.js";import"./auth-choice.apply.transformers-CIn3fs7K.js";import{n as warnIfModelConfigLooksOff}from"./auth-choice-9gZuOvPS.js";import path from"node:path";import fs from"node:fs/promises";function parseTimeoutSeconds(opts){let raw=opts.timeout===void 0?opts.cfg.agents?.defaults?.timeoutSeconds??600:Number.parseInt(String(opts.timeout),10);if(Number.isNaN(raw)||raw<0)throw Error(`--timeout must be a non-negative integer (seconds; 0 means no timeout)`);return raw}function formatPayloadForLog(payload){let lines=[];payload.text&&lines.push(payload.text.trimEnd());let mediaUrl=typeof payload.mediaUrl==`string`&&payload.mediaUrl.trim()?payload.mediaUrl.trim():void 0,media=payload.mediaUrls??(mediaUrl?[mediaUrl]:[]);for(let url of media)lines.push(`MEDIA:${url}`);return lines.join(`
1
+ import"./paths-5FcIFMsj.js";import{B as theme,C as shortenHomePath,P as setVerbose,b as resolveUserPath}from"./utils-DbaBVFaK.js";import"./embedded-helpers-C9jpiwlw.js";import"./reply-GY1C8tcv.js";import{d as normalizeAgentId,n as DEFAULT_ACCOUNT_ID,r as DEFAULT_AGENT_ID}from"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import{r as DEFAULT_CHAT_CHANNEL}from"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import{A as resolveWorkspaceFilePath,C as WORKSPACE_RUNTIME_DIRNAME,_ as DEFAULT_IDENTITY_FILENAME,c as resolveAgentWorkspaceDir,i as resolveAgentDir,l as resolveDefaultAgentId,n as listAgentIds,t as listAgentEntries}from"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import{in as ensureAuthProfileStore,sn as resolveAuthStorePath}from"./model-selection-DG9J_VTz.js";import{t as formatCliCommand}from"./command-format-D806O2pt.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import{c as writeConfigFile,r as loadConfig}from"./io-BLBq4T2o.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BgV_FYSq.js";import"./runner-eTTUbLAK.js";import"./model-catalog-DjNiebr7.js";import"./sandbox-C4AKi2EX.js";import"./chrome-DXt86tmV.js";import"./tailscale-DLkpGquM.js";import"./auth-lebUHrkd.js";import"./server-context-CQ2v4BAx.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./routes-DZntyPY6.js";import"./redact-BHdfp2MZ.js";import"./errors-B1MIg3g-.js";import"./paths-cR8ct-Y3.js";import"./ssrf-p9k-iapc.js";import"./image-ops-C8IUQKjn.js";import"./store-CmHBQ-yX.js";import"./ports-DgmEDNOm.js";import"./trash-DD2Hc5oq.js";import"./sessions-BuZVmOWt.js";import{h as GATEWAY_CLIENT_NAMES,l as normalizeMessageChannel,m as GATEWAY_CLIENT_MODES}from"./message-channel-D_jXxXQj.js";import{n as listChannelPlugins,r as normalizeChannelId,t as getChannelPlugin}from"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./accounts-rmXEiebi.js";import"./accounts-BLueHgKj.js";import"./bindings-DR59065T.js";import"./send-Aw8wK3vK.js";import"./send-ChGpVO3O.js";import{s as resolveSessionTranscriptsDirForAgent}from"./paths-DJ6rztqJ.js";import"./tool-images-B7b_OiMz.js";import"./tool-display-ByOZtWvA.js";import"./fetch-guard-8mwt3-hm.js";import"./api-key-rotation-CyCi-UqR.js";import"./fetch-BuOLY9KP.js";import"./sqlite-C39E12XS.js";import"./tokens-CCU3zO-D.js";import"./project-context-store-wcq7lXuI.js";import"./with-timeout-GDLpcjW7.js";import"./deliver--6OBF3LL.js";import"./send-BxoVLIy1.js";import"./workspace-D4LK4thI.js";import"./reply-prefix-zIMgi6K6.js";import"./memory-cli-CbkWGjRn.js";import"./manager-DSz61dXv.js";import"./retry-DlVhg5qu.js";import"./client-xfoidwPI.js";import{i as randomIdempotencyKey,n as callGateway}from"./call-T8ciwMTA.js";import"./common-BTbIhLyt.js";import"./chunk-FCBlVOyo.js";import"./markdown-tables-P6uoUSFa.js";import"./ir-5BNoIXZm.js";import"./render-D1dVTEB1.js";import"./builderforcellm-syscheck-F5JMAr3p.js";import"./send-BP5osGBo.js";import"./outbound-attachment-C7wByQO5.js";import"./fetch-DnVtDecb.js";import"./delivery-queue-CXKynF1P.js";import"./channel-activity-CCNDbdD3.js";import"./tables-ERcoWFDp.js";import"./pairing-store-ti3FEkmr.js";import{t as formatDocsLink}from"./links-BgWWaaOT.js";import{n as runCommandWithRuntime}from"./cli-utils-LBYKdNFb.js";import{t as formatHelpExamples}from"./help-format-Qfk2vDNX.js";import{n as withProgress}from"./progress-BfOtdN6b.js";import"./resolve-route-D49haUnv.js";import"./replies-DokbEfJD.js";import"./refresh-TiC_kLgE.js";import"./coding-tools.policy-ZhOdlcEI.js";import"./send-l3ge4wkC.js";import{a as ensureWorkspaceAndSessions,l as moveToTrash}from"./onboard-helpers-CiHzTaFX.js";import"./prompt-style-BpVK43GK.js";import"./pairing-labels-oA-nKTaW.js";import"./session-cost-usage-BjH7mxVj.js";import"./usage-format-DGf8ZWPH.js";import"./provider-usage-B-wPVN_j.js";import"./active-listener-Dcg19lJG.js";import"./exec-approvals-BpVPDVtV.js";import"./nodes-screen-C3TDIi8d.js";import"./project-context-CJj0Inz-.js";import"./control-service-y3GYvIBg.js";import"./stagger-8EkqkqJv.js";import"./channel-selection-DyAvzlY8.js";import"./mamba-state-engine-CoGqoBTH.js";import"./transformers-stream-D7nRu4Qu.js";import{t as createDefaultDeps}from"./deps-Dg_9rfXK.js";import{t as collectOption}from"./helpers-CESJCicC.js";import"./catalog-rgiY__UQ.js";import{t as hasExplicitOptions}from"./command-options-DzGFCQYs.js";import"./note-B6NtFdXt.js";import{t as WizardCancelledError}from"./prompts-Bchzq3K0.js";import{t as createClackPrompter}from"./clack-prompter-Dg23_riR.js";import{t as resolveChannelDefaultAccountId}from"./helpers-DTDCy17p.js";import"./plugin-auto-enable-D8gKiE3F.js";import"./install-safe-path-DsLq2BUJ.js";import"./npm-registry-spec-DIW6RsGN.js";import"./skill-scanner-BEvov9QH.js";import"./installs-DFiF4lGy.js";import{n as setupChannels}from"./onboard-channels-vhtccaIV.js";import{t as requireValidConfigSnapshot}from"./config-validation-CdBJ-tZq.js";import{a as pruneAgentConfig,c as parseIdentityMarkdown,i as loadAgentIdentity,n as buildAgentSummaries,o as identityHasValues,r as findAgentEntryIndex,t as applyAgentConfig}from"./agents.config-BllQ7zna.js";import{n as resolveSessionKeyForRequest,t as agentCommand}from"./agent-B-2r1Lr_.js";import"./shared-C2orjbTD.js";import"./onboard-auth.credentials-DpitLlzw.js";import"./auth-token-BE67qxLw.js";import{n as logConfigUpdated}from"./logging-DHa3jQN3.js";import"./provider-auth-helpers-B84m5VMc.js";import{t as promptAuthChoiceGrouped}from"./auth-choice-prompt-wkrUXDfB.js";import{t as applyAuthChoice}from"./auth-choice.apply-DBuvopiF.js";import"./openai-model-default-CH2-2Hvk.js";import"./model-picker-EIhpfOZa.js";import"./auth-choice.apply.transformers-Df9l_jRz.js";import{n as warnIfModelConfigLooksOff}from"./auth-choice-CCib_yVL.js";import path from"node:path";import fs from"node:fs/promises";function parseTimeoutSeconds(opts){let raw=opts.timeout===void 0?opts.cfg.agents?.defaults?.timeoutSeconds??600:Number.parseInt(String(opts.timeout),10);if(Number.isNaN(raw)||raw<0)throw Error(`--timeout must be a non-negative integer (seconds; 0 means no timeout)`);return raw}function formatPayloadForLog(payload){let lines=[];payload.text&&lines.push(payload.text.trimEnd());let mediaUrl=typeof payload.mediaUrl==`string`&&payload.mediaUrl.trim()?payload.mediaUrl.trim():void 0,media=payload.mediaUrls??(mediaUrl?[mediaUrl]:[]);for(let url of media)lines.push(`MEDIA:${url}`);return lines.join(`
2
2
  `).trimEnd()}async function agentViaGatewayCommand(opts,runtime){let body=(opts.message??``).trim();if(!body)throw Error(`Message (--message) is required`);if(!opts.to&&!opts.sessionId&&!opts.agent)throw Error(`Pass --to <E.164>, --session-id, or --agent to choose a session`);let cfg=loadConfig(),agentIdRaw=opts.agent?.trim(),agentId=agentIdRaw?normalizeAgentId(agentIdRaw):void 0;if(agentId&&!listAgentIds(cfg).includes(agentId))throw Error(`Unknown agent id "${agentIdRaw}". Use "${formatCliCommand(`builderforce agents list`)}" to see configured agents.`);let timeoutSeconds=parseTimeoutSeconds({cfg,timeout:opts.timeout}),gatewayTimeoutMs=timeoutSeconds===0?2147e6:Math.max(1e4,(timeoutSeconds+30)*1e3),sessionKey=resolveSessionKeyForRequest({cfg,agentId,to:opts.to,sessionId:opts.sessionId}).sessionKey,channel=normalizeMessageChannel(opts.channel)??DEFAULT_CHAT_CHANNEL,idempotencyKey=opts.runId?.trim()||randomIdempotencyKey(),response=await withProgress({label:`Waiting for agent reply…`,indeterminate:!0,enabled:opts.json!==!0},async()=>await callGateway({method:`agent`,params:{message:body,agentId,to:opts.to,replyTo:opts.replyTo,sessionId:opts.sessionId,sessionKey,thinking:opts.thinking,deliver:!!opts.deliver,channel,replyChannel:opts.replyChannel,replyAccountId:opts.replyAccount,timeout:timeoutSeconds,lane:opts.lane,extraSystemPrompt:opts.extraSystemPrompt,idempotencyKey},expectFinal:!0,timeoutMs:gatewayTimeoutMs,clientName:GATEWAY_CLIENT_NAMES.CLI,mode:GATEWAY_CLIENT_MODES.CLI}));if(opts.json)return runtime.log(JSON.stringify(response,null,2)),response;let payloads=response?.result?.payloads??[];if(payloads.length===0)return runtime.log(response?.summary?String(response.summary):`No reply from agent.`),response;for(let payload of payloads){let out=formatPayloadForLog(payload);out&&runtime.log(out)}return response}async function agentCliCommand(opts,runtime,deps){let localOpts={...opts,agentId:opts.agent,replyAccountId:opts.replyAccount};if(opts.local===!0)return await agentCommand(localOpts,runtime,deps);try{return await agentViaGatewayCommand(opts,runtime)}catch(err){return runtime.error?.(`Gateway agent failed; falling back to embedded: ${String(err)}`),await agentCommand(localOpts,runtime,deps)}}function bindingMatchKey(match){let accountId=match.accountId?.trim()||DEFAULT_ACCOUNT_ID;return[match.channel,accountId,match.peer?.kind??``,match.peer?.id??``,match.guildId??``,match.teamId??``].join(`|`)}function describeBinding(binding){let match=binding.match,parts=[match.channel];return match.accountId&&parts.push(`accountId=${match.accountId}`),match.peer&&parts.push(`peer=${match.peer.kind}:${match.peer.id}`),match.guildId&&parts.push(`guild=${match.guildId}`),match.teamId&&parts.push(`team=${match.teamId}`),parts.join(` `)}function applyAgentBindings(cfg,bindings){let existing=cfg.bindings??[],existingMatchMap=new Map;for(let binding of existing){let key=bindingMatchKey(binding.match);existingMatchMap.has(key)||existingMatchMap.set(key,normalizeAgentId(binding.agentId))}let added=[],skipped=[],conflicts=[];for(let binding of bindings){let agentId=normalizeAgentId(binding.agentId),key=bindingMatchKey(binding.match),existingAgentId=existingMatchMap.get(key);if(existingAgentId){existingAgentId===agentId?skipped.push(binding):conflicts.push({binding,existingAgentId});continue}existingMatchMap.set(key,agentId),added.push({...binding,agentId})}return added.length===0?{config:cfg,added,skipped,conflicts}:{config:{...cfg,bindings:[...existing,...added]},added,skipped,conflicts}}function resolveDefaultAccountId$1(cfg,provider){let plugin=getChannelPlugin(provider);return plugin?resolveChannelDefaultAccountId({plugin,cfg}):DEFAULT_ACCOUNT_ID}function buildChannelBindings(params){let bindings=[],agentId=normalizeAgentId(params.agentId);for(let channel of params.selection){let match={channel},accountId=params.accountIds?.[channel]?.trim();accountId?match.accountId=accountId:getChannelPlugin(channel)?.meta.forceAccountBinding&&(match.accountId=resolveDefaultAccountId$1(params.config,channel)),bindings.push({agentId,match})}return bindings}function parseBindingSpecs(params){let bindings=[],errors=[],specs=params.specs??[],agentId=normalizeAgentId(params.agentId);for(let raw of specs){let trimmed=raw?.trim();if(!trimmed)continue;let[channelRaw,accountRaw]=trimmed.split(`:`,2),channel=normalizeChannelId(channelRaw);if(!channel){errors.push(`Unknown channel "${channelRaw}".`);continue}let accountId=accountRaw?.trim();if(accountRaw!==void 0&&!accountId){errors.push(`Invalid binding "${trimmed}" (empty account id).`);continue}accountId||getChannelPlugin(channel)?.meta.forceAccountBinding&&(accountId=resolveDefaultAccountId$1(params.config,channel));let match={channel};accountId&&(match.accountId=accountId),bindings.push({agentId,match})}return{bindings,errors}}function createQuietRuntime(runtime){return{...runtime,log:()=>{}}}async function requireValidConfig(runtime){return await requireValidConfigSnapshot(runtime)}async function fileExists(pathname){try{return await fs.stat(pathname),!0}catch{return!1}}async function agentsAddCommand(opts,runtime=defaultRuntime,params){let cfg=await requireValidConfig(runtime);if(!cfg)return;let workspaceFlag=opts.workspace?.trim(),nameInput=opts.name?.trim(),hasFlags=params?.hasFlags===!0,nonInteractive=!!(opts.nonInteractive||hasFlags);if(nonInteractive&&!workspaceFlag){runtime.error(`Non-interactive mode requires --workspace. Re-run without flags to use the wizard.`),runtime.exit(1);return}if(nonInteractive){if(!nameInput){runtime.error(`Agent name is required in non-interactive mode.`),runtime.exit(1);return}if(!workspaceFlag){runtime.error(`Non-interactive mode requires --workspace. Re-run without flags to use the wizard.`),runtime.exit(1);return}let agentId=normalizeAgentId(nameInput);if(agentId===DEFAULT_AGENT_ID){runtime.error(`"${DEFAULT_AGENT_ID}" is reserved. Choose another name.`),runtime.exit(1);return}if(agentId!==nameInput&&runtime.log(`Normalized agent id to "${agentId}".`),findAgentEntryIndex(listAgentEntries(cfg),agentId)>=0){runtime.error(`Agent "${agentId}" already exists.`),runtime.exit(1);return}let workspaceDir=resolveUserPath(workspaceFlag),agentDir=opts.agentDir?.trim()?resolveUserPath(opts.agentDir.trim()):resolveAgentDir(cfg,agentId),model=opts.model?.trim(),nextConfig=applyAgentConfig(cfg,{agentId,name:nameInput,workspace:workspaceDir,agentDir,...model?{model}:{}}),bindingParse=parseBindingSpecs({agentId,specs:opts.bind,config:nextConfig});if(bindingParse.errors.length>0){runtime.error(bindingParse.errors.join(`
3
3
  `)),runtime.exit(1);return}let bindingResult=bindingParse.bindings.length>0?applyAgentBindings(nextConfig,bindingParse.bindings):{config:nextConfig,added:[],skipped:[],conflicts:[]};await writeConfigFile(bindingResult.config),opts.json||logConfigUpdated(runtime),await ensureWorkspaceAndSessions(workspaceDir,opts.json?createQuietRuntime(runtime):runtime,{skipBootstrap:!!bindingResult.config.agents?.defaults?.skipBootstrap,agentId});let payload={agentId,name:nameInput,workspace:workspaceDir,agentDir,model,bindings:{added:bindingResult.added.map(describeBinding),skipped:bindingResult.skipped.map(describeBinding),conflicts:bindingResult.conflicts.map(conflict=>`${describeBinding(conflict.binding)} (agent=${conflict.existingAgentId})`)}};opts.json?runtime.log(JSON.stringify(payload,null,2)):(runtime.log(`Agent: ${agentId}`),runtime.log(`Workspace: ${shortenHomePath(workspaceDir)}`),runtime.log(`Agent dir: ${shortenHomePath(agentDir)}`),model&&runtime.log(`Model: ${model}`),bindingResult.conflicts.length>0&&runtime.error([`Skipped bindings already claimed by another agent:`,...bindingResult.conflicts.map(conflict=>`- ${describeBinding(conflict.binding)} (agent=${conflict.existingAgentId})`)].join(`
4
4
  `)));return}let prompter=createClackPrompter();try{await prompter.intro(`Add BuilderForceAgents agent`);let name=nameInput??await prompter.text({message:`Agent name`,validate:value=>{if(!value?.trim())return`Required`;if(normalizeAgentId(value)===DEFAULT_AGENT_ID)return`"${DEFAULT_AGENT_ID}" is reserved. Choose another name.`}}),agentName=String(name??``).trim(),agentId=normalizeAgentId(agentName);if(agentName!==agentId&&await prompter.note(`Normalized id to "${agentId}".`,`Agent id`),listAgentEntries(cfg).find(agent=>normalizeAgentId(agent.id)===agentId)&&!await prompter.confirm({message:`Agent "${agentId}" already exists. Update it?`,initialValue:!1})){await prompter.outro(`No changes made.`);return}let workspaceDefault=resolveAgentWorkspaceDir(cfg,agentId),workspaceInput=await prompter.text({message:`Workspace directory`,initialValue:workspaceDefault,validate:value=>value?.trim()?void 0:`Required`}),workspaceDir=resolveUserPath(String(workspaceInput??``).trim()||workspaceDefault),agentDir=resolveAgentDir(cfg,agentId),nextConfig=applyAgentConfig(cfg,{agentId,name:agentName,workspace:workspaceDir,agentDir}),defaultAgentId=resolveDefaultAgentId(cfg);if(defaultAgentId!==agentId){let sourceAuthPath=resolveAuthStorePath(resolveAgentDir(cfg,defaultAgentId)),destAuthPath=resolveAuthStorePath(agentDir);path.resolve(sourceAuthPath).toLowerCase()!==path.resolve(destAuthPath).toLowerCase()&&await fileExists(sourceAuthPath)&&!await fileExists(destAuthPath)&&await prompter.confirm({message:`Copy auth profiles from "${defaultAgentId}"?`,initialValue:!1})&&(await fs.mkdir(path.dirname(destAuthPath),{recursive:!0}),await fs.copyFile(sourceAuthPath,destAuthPath),await prompter.note(`Copied auth profiles from "${defaultAgentId}".`,`Auth profiles`))}if(await prompter.confirm({message:`Configure model/auth for this agent now?`,initialValue:!1})){let authResult=await applyAuthChoice({authChoice:await promptAuthChoiceGrouped({prompter,store:await ensureAuthProfileStore(agentDir,{allowKeychainPrompt:!1}),includeSkip:!0}),config:nextConfig,prompter,runtime,agentDir,setDefaultModel:!1,agentId});nextConfig=authResult.config,authResult.agentModelOverride&&(nextConfig=applyAgentConfig(nextConfig,{agentId,model:authResult.agentModelOverride}))}await warnIfModelConfigLooksOff(nextConfig,prompter,{agentId,agentDir});let selection=[],channelAccountIds={};if(nextConfig=await setupChannels(nextConfig,runtime,prompter,{allowSignalInstall:!0,onSelection:value=>{selection=value},promptAccountIds:!0,onAccountId:(channel,accountId)=>{channelAccountIds[channel]=accountId}}),selection.length>0)if(await prompter.confirm({message:`Route selected channels to this agent now? (bindings)`,initialValue:!1})){let desiredBindings=buildChannelBindings({agentId,selection,config:nextConfig,accountIds:channelAccountIds}),result=applyAgentBindings(nextConfig,desiredBindings);nextConfig=result.config,result.conflicts.length>0&&await prompter.note([`Skipped bindings already claimed by another agent:`,...result.conflicts.map(conflict=>`- ${describeBinding(conflict.binding)} (agent=${conflict.existingAgentId})`)].join(`
@@ -1,4 +1,4 @@
1
- import"./paths-BHg-VHB4.js";import{r as DEFAULT_CHAT_CHANNEL}from"./registry-Cv7CoWAs.js";import{N as setVerbose,z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-C1VbcUOm.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import{d as normalizeAgentId}from"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import{n as listAgentIds}from"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import{r as loadConfig}from"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./model-discovery-C9Xm95uL.js";import"./model-catalog-CiiFJX77.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./refresh-C4vwneXT.js";import"./client-CGgp3zkQ.js";import{i as randomIdempotencyKey,n as callGateway}from"./call-DmAU4cRX.js";import{h as GATEWAY_CLIENT_NAMES,l as normalizeMessageChannel,m as GATEWAY_CLIENT_MODES}from"./message-channel-z5YRpR2d.js";import"./subagent-registry-CyGxu3kP.js";import"./sessions-Bl1wwotX.js";import"./project-context-store-CIUcwUP_.js";import"./tokens-CFKkpUIu.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./send-BvroeIQ6.js";import"./send-CceNWtYE.js";import"./with-timeout-T07SJo4N.js";import"./deliver-BuZu68tp.js";import"./accounts-Cx82nj4E.js";import"./send-ByCVQQVz.js";import"./image-ops-CotJhwRR.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./embedded-helpers-DK8_apW0.js";import"./sandbox-z9t_PRf9.js";import"./chrome-BnEbJV3D.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-owOmmyUM.js";import"./routes-lclJHOYY.js";import"./paths-BnOjueoX.js";import"./ssrf-DJXLYZ0d.js";import"./store-DHD2IEgd.js";import"./ports-DTku9NSx.js";import"./trash-C3zmJ_O7.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./tool-images-CCpqFtrL.js";import"./workspace-waBqRxiy.js";import"./reply-prefix-Cg7AqaK0.js";import"./sqlite-CIGM1WKg.js";import"./memory-cli-ivAs7q7v.js";import"./manager-CRba8roB.js";import"./gemini-auth-CkD5jCPh.js";import"./retry-B151Hej5.js";import"./common-BfwMxpLu.js";import"./runner-DwWmciCt.js";import"./tool-display-Cs4hDP1f.js";import"./chunk-Dly7lM4r.js";import"./markdown-tables-B1Rx8hv6.js";import"./fetch-guard-DnXqPKae.js";import"./fetch-Cn_THzz8.js";import"./ir-CSdQJPqu.js";import"./render-DlHYsbvQ.js";import"./builderforcellm-syscheck-CprBhARf.js";import"./session-utils-GMvum00v.js";import"./coding-tools.policy-NEPm7Mz1.js";import"./pairing-store-QDb6lhIU.js";import"./fetch-DnWD6ydH.js";import"./exec-approvals-D7ZPAZpt.js";import"./nodes-screen-D6GHv_S0.js";import"./session-cost-usage-S0nkbPoW.js";import"./usage-format-5sp5AMSu.js";import"./provider-usage-Bn4ZrnU7.js";import"./send-B_1BtyfA.js";import"./outbound-attachment-BaTYE4qp.js";import"./delivery-queue-Cp3t4Upn.js";import"./project-context-D3Mx4maV.js";import"./control-service-CJuuqNOE.js";import"./stagger-CRe77dWL.js";import"./channel-selection-BLwXhb9t.js";import"./send-UFtylOiq.js";import"./resolve-route-DEIW5uKy.js";import"./channel-activity-DX36RadH.js";import"./tables-CojSfTth.js";import{t as formatDocsLink}from"./links-BKzP7VVP.js";import{n as runCommandWithRuntime}from"./cli-utils-C9pW69LF.js";import{t as formatHelpExamples}from"./help-format-CfFf-w62.js";import{n as withProgress}from"./progress-Cqb-jAjT.js";import"./replies-DbkT_5BV.js";import"./onboard-helpers-CckrS8_K.js";import"./prompt-style-BMWmaqSC.js";import"./pairing-labels-3j_iRYOO.js";import"./active-listener-Di9e1YAD.js";import"./mamba-state-engine-CV4nDcCk.js";import"./transformers-stream-Buj40qHl.js";import{t as hasExplicitOptions}from"./command-options-DbMbMxM2.js";import"./catalog-li4bSIE2.js";import"./note-DgDXuE0F.js";import"./clack-prompter-B52CP7eY.js";import"./helpers-DPPVplyk.js";import"./plugin-auto-enable-BV9K9Vhr.js";import"./install-safe-path-ObPl6zIf.js";import"./npm-registry-spec-BV1VDmuN.js";import"./skill-scanner-DEmbPsRh.js";import"./installs-CWd54ARy.js";import"./onboard-channels-B6QDFkkK.js";import"./config-validation-jpeXzoU3.js";import{t as collectOption}from"./helpers-DPw5_6PJ.js";import{n as createDefaultDeps}from"./outbound-send-deps-m6DqOma_.js";import"./agents.config-D6Yhwmnh.js";import{n as resolveSessionKeyForRequest,t as agentCommand}from"./agent-wJmvciTM.js";import"./shared-xj-xaKFi.js";import"./onboard-auth.credentials-yagR-VMG.js";import"./auth-token-CoQ5ePPl.js";import"./logging-ayt7F7vy.js";import"./provider-auth-helpers-CJTG_tVx.js";import{i as agentsAddCommand,n as agentsSetIdentityCommand,r as agentsDeleteCommand,t as agentsListCommand}from"./agents-Cr7WO73I.js";import"./auth-choice.apply-CcatXiNo.js";import"./openai-model-default-BMRrqTmH.js";import"./model-picker-swoSwauV.js";import"./auth-choice.apply.transformers-1plI0MUg.js";import"./auth-choice-BoZFVmEa.js";function parseTimeoutSeconds(opts){let raw=opts.timeout===void 0?opts.cfg.agents?.defaults?.timeoutSeconds??600:Number.parseInt(String(opts.timeout),10);if(Number.isNaN(raw)||raw<0)throw Error(`--timeout must be a non-negative integer (seconds; 0 means no timeout)`);return raw}function formatPayloadForLog(payload){let lines=[];payload.text&&lines.push(payload.text.trimEnd());let mediaUrl=typeof payload.mediaUrl==`string`&&payload.mediaUrl.trim()?payload.mediaUrl.trim():void 0,media=payload.mediaUrls??(mediaUrl?[mediaUrl]:[]);for(let url of media)lines.push(`MEDIA:${url}`);return lines.join(`
1
+ import"./paths-BHg-VHB4.js";import{r as DEFAULT_CHAT_CHANNEL}from"./registry-Cv7CoWAs.js";import{N as setVerbose,z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-pt7Tr4HA.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import{d as normalizeAgentId}from"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import{n as listAgentIds}from"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import{r as loadConfig}from"./io-D9hC2aG0.js";import"./manifest-registry-009gLJ4l.js";import"./config-BpChMIJ6.js";import"./model-discovery-D0i1JpiL.js";import"./model-catalog-BeBXvbFm.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./refresh-C4vwneXT.js";import"./client-CGgp3zkQ.js";import{i as randomIdempotencyKey,n as callGateway}from"./call-Du2LiaX6.js";import{h as GATEWAY_CLIENT_NAMES,l as normalizeMessageChannel,m as GATEWAY_CLIENT_MODES}from"./message-channel-z5YRpR2d.js";import"./subagent-registry-DDEN4oJi.js";import"./sessions-BA8Se_bT.js";import"./project-context-store-CIUcwUP_.js";import"./tokens-CFKkpUIu.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./send-B7H8Ae5j.js";import"./send-DqR7Rxzm.js";import"./with-timeout-B_p5pWDv.js";import"./deliver-CsG0cHbZ.js";import"./accounts-Cx82nj4E.js";import"./send-KgN1P41U.js";import"./image-ops-CotJhwRR.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./embedded-helpers-DdU30lmt.js";import"./sandbox-DvKMuAXL.js";import"./chrome-CFmcixaE.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-CttALzrW.js";import"./routes-_iZdG1Fo.js";import"./paths-BnOjueoX.js";import"./ssrf-DJXLYZ0d.js";import"./store-DHD2IEgd.js";import"./ports-DTku9NSx.js";import"./trash-C3zmJ_O7.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./tool-images-CCpqFtrL.js";import"./workspace-waBqRxiy.js";import"./reply-prefix-Cg7AqaK0.js";import"./sqlite-CIGM1WKg.js";import"./memory-cli-CveeVOWH.js";import"./manager-BeohB4-8.js";import"./gemini-auth-DDR12zst.js";import"./retry-B151Hej5.js";import"./common-BfwMxpLu.js";import"./runner-Cu9NJouV.js";import"./tool-display-Cs4hDP1f.js";import"./chunk-Dly7lM4r.js";import"./markdown-tables-B1Rx8hv6.js";import"./fetch-guard-DnXqPKae.js";import"./fetch-Cn_THzz8.js";import"./ir-CSdQJPqu.js";import"./render-DlHYsbvQ.js";import"./builderforcellm-syscheck-9ksvqHYX.js";import"./session-utils-Dxou8SbO.js";import"./coding-tools.policy-D9Ba8eDh.js";import"./pairing-store-YRy7EBgI.js";import"./fetch-DnWD6ydH.js";import"./exec-approvals-D7ZPAZpt.js";import"./nodes-screen-D6GHv_S0.js";import"./session-cost-usage-S0nkbPoW.js";import"./usage-format-5sp5AMSu.js";import"./provider-usage-B8lFHp0K.js";import"./send-kkm_zrHQ.js";import"./outbound-attachment-BaTYE4qp.js";import"./delivery-queue-Cp3t4Upn.js";import"./project-context-D3Mx4maV.js";import"./control-service-2PkCt256.js";import"./stagger-CRe77dWL.js";import"./channel-selection-BLwXhb9t.js";import"./send-CYGOPcKq.js";import"./resolve-route-DEIW5uKy.js";import"./channel-activity-DX36RadH.js";import"./tables-CojSfTth.js";import{t as formatDocsLink}from"./links-BKzP7VVP.js";import{n as runCommandWithRuntime}from"./cli-utils-C9pW69LF.js";import{t as formatHelpExamples}from"./help-format-CfFf-w62.js";import{n as withProgress}from"./progress-Cqb-jAjT.js";import"./replies-BOGMDhSN.js";import"./onboard-helpers-Ce_c4Raj.js";import"./prompt-style-BMWmaqSC.js";import"./pairing-labels-BJPrScRl.js";import"./active-listener-Di9e1YAD.js";import"./mamba-state-engine-CV4nDcCk.js";import"./transformers-stream-Buj40qHl.js";import{t as hasExplicitOptions}from"./command-options-DbMbMxM2.js";import"./catalog-li4bSIE2.js";import"./note-DgDXuE0F.js";import"./clack-prompter-B52CP7eY.js";import"./helpers-DPPVplyk.js";import"./plugin-auto-enable-Cupr4wbt.js";import"./install-safe-path-ObPl6zIf.js";import"./npm-registry-spec-BV1VDmuN.js";import"./skill-scanner-OTLeRZ_p.js";import"./installs-B_t2YXgq.js";import"./onboard-channels-Dn0u5C-C.js";import"./config-validation-BGpSeNbh.js";import{t as collectOption}from"./helpers-DPw5_6PJ.js";import{n as createDefaultDeps}from"./outbound-send-deps-B3Lg-uqF.js";import"./agents.config-D6Yhwmnh.js";import{n as resolveSessionKeyForRequest,t as agentCommand}from"./agent-BI9qSnSp.js";import"./shared-BBOiNdjf.js";import"./onboard-auth.credentials-DneFSdYg.js";import"./auth-token-BPHeoBAW.js";import"./logging-ayt7F7vy.js";import"./provider-auth-helpers-hNwpK_hl.js";import{i as agentsAddCommand,n as agentsSetIdentityCommand,r as agentsDeleteCommand,t as agentsListCommand}from"./agents-CMThT_Bj.js";import"./auth-choice.apply-BgOXoS8X.js";import"./openai-model-default-pfoEzWYJ.js";import"./model-picker-CGDNPRPc.js";import"./auth-choice.apply.transformers-DmdxpHGz.js";import"./auth-choice-DzBqqq7i.js";function parseTimeoutSeconds(opts){let raw=opts.timeout===void 0?opts.cfg.agents?.defaults?.timeoutSeconds??600:Number.parseInt(String(opts.timeout),10);if(Number.isNaN(raw)||raw<0)throw Error(`--timeout must be a non-negative integer (seconds; 0 means no timeout)`);return raw}function formatPayloadForLog(payload){let lines=[];payload.text&&lines.push(payload.text.trimEnd());let mediaUrl=typeof payload.mediaUrl==`string`&&payload.mediaUrl.trim()?payload.mediaUrl.trim():void 0,media=payload.mediaUrls??(mediaUrl?[mediaUrl]:[]);for(let url of media)lines.push(`MEDIA:${url}`);return lines.join(`
2
2
  `).trimEnd()}async function agentViaGatewayCommand(opts,runtime){let body=(opts.message??``).trim();if(!body)throw Error(`Message (--message) is required`);if(!opts.to&&!opts.sessionId&&!opts.agent)throw Error(`Pass --to <E.164>, --session-id, or --agent to choose a session`);let cfg=loadConfig(),agentIdRaw=opts.agent?.trim(),agentId=agentIdRaw?normalizeAgentId(agentIdRaw):void 0;if(agentId&&!listAgentIds(cfg).includes(agentId))throw Error(`Unknown agent id "${agentIdRaw}". Use "${formatCliCommand(`builderforce agents list`)}" to see configured agents.`);let timeoutSeconds=parseTimeoutSeconds({cfg,timeout:opts.timeout}),gatewayTimeoutMs=timeoutSeconds===0?2147e6:Math.max(1e4,(timeoutSeconds+30)*1e3),sessionKey=resolveSessionKeyForRequest({cfg,agentId,to:opts.to,sessionId:opts.sessionId}).sessionKey,channel=normalizeMessageChannel(opts.channel)??DEFAULT_CHAT_CHANNEL,idempotencyKey=opts.runId?.trim()||randomIdempotencyKey(),response=await withProgress({label:`Waiting for agent reply…`,indeterminate:!0,enabled:opts.json!==!0},async()=>await callGateway({method:`agent`,params:{message:body,agentId,to:opts.to,replyTo:opts.replyTo,sessionId:opts.sessionId,sessionKey,thinking:opts.thinking,deliver:!!opts.deliver,channel,replyChannel:opts.replyChannel,replyAccountId:opts.replyAccount,timeout:timeoutSeconds,lane:opts.lane,extraSystemPrompt:opts.extraSystemPrompt,idempotencyKey},expectFinal:!0,timeoutMs:gatewayTimeoutMs,clientName:GATEWAY_CLIENT_NAMES.CLI,mode:GATEWAY_CLIENT_MODES.CLI}));if(opts.json)return runtime.log(JSON.stringify(response,null,2)),response;let payloads=response?.result?.payloads??[];if(payloads.length===0)return runtime.log(response?.summary?String(response.summary):`No reply from agent.`),response;for(let payload of payloads){let out=formatPayloadForLog(payload);out&&runtime.log(out)}return response}async function agentCliCommand(opts,runtime,deps){let localOpts={...opts,agentId:opts.agent,replyAccountId:opts.replyAccount};if(opts.local===!0)return await agentCommand(localOpts,runtime,deps);try{return await agentViaGatewayCommand(opts,runtime)}catch(err){return runtime.error?.(`Gateway agent failed; falling back to embedded: ${String(err)}`),await agentCommand(localOpts,runtime,deps)}}function registerAgentCommands(program,args){program.command(`agent`).description(`Run an agent turn via the Gateway (use --local for embedded)`).requiredOption(`-m, --message <text>`,`Message body for the agent`).option(`-t, --to <number>`,`Recipient number in E.164 used to derive the session key`).option(`--session-id <id>`,`Use an explicit session id`).option(`--agent <id>`,`Agent id (overrides routing bindings)`).option(`--thinking <level>`,`Thinking level: off | minimal | low | medium | high`).option(`--verbose <on|off>`,`Persist agent verbose level for the session`).option(`--channel <channel>`,`Delivery channel: ${args.agentChannelOptions} (default: ${DEFAULT_CHAT_CHANNEL})`).option(`--reply-to <target>`,`Delivery target override (separate from session routing)`).option(`--reply-channel <channel>`,`Delivery channel override (separate from routing)`).option(`--reply-account <id>`,`Delivery account id override`).option(`--local`,`Run the embedded agent locally (requires model provider API keys in your shell)`,!1).option(`--deliver`,`Send the agent's reply back to the selected channel`,!1).option(`--json`,`Output result as JSON`,!1).option(`--timeout <seconds>`,`Override agent command timeout (seconds, default 600 or config value)`).addHelpText(`after`,()=>`
3
3
  ${theme.heading(`Examples:`)}
4
4
  ${formatHelpExamples([[`builderforce agent --to +15555550123 --message "status update"`,`Start a new session.`],[`builderforce agent --agent ops --message "Summarize logs"`,`Use a specific agent.`],[`builderforce agent --session-id 1234 --message "Summarize inbox" --thinking medium`,`Target a session with explicit thinking level.`],[`builderforce agent --to +15555550123 --message "Trace logs" --verbose on --json`,`Enable verbose logging and JSON output.`],[`builderforce agent --to +15555550123 --message "Summon reply" --deliver`,`Deliver reply.`],[`builderforce agent --agent ops --message "Generate report" --deliver --reply-channel slack --reply-to "#reports"`,`Send reply to a different channel/target.`]])}
@@ -0,0 +1 @@
1
+ import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-pt7Tr4HA.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-D9hC2aG0.js";import"./manifest-registry-009gLJ4l.js";import"./config-BpChMIJ6.js";import"./model-discovery-D0i1JpiL.js";import"./model-catalog-BeBXvbFm.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./skills-status-CGlKz1D1.js";import"./refresh-C4vwneXT.js";import"./client-CGgp3zkQ.js";import"./call-Du2LiaX6.js";import"./message-channel-z5YRpR2d.js";import"./subagent-registry-DDEN4oJi.js";import"./sessions-BA8Se_bT.js";import"./project-context-store-CIUcwUP_.js";import"./tokens-CFKkpUIu.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./send-B7H8Ae5j.js";import"./send-DqR7Rxzm.js";import"./with-timeout-B_p5pWDv.js";import"./deliver-CsG0cHbZ.js";import"./accounts-Cx82nj4E.js";import"./send-KgN1P41U.js";import"./image-ops-CotJhwRR.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./embedded-helpers-DdU30lmt.js";import"./sandbox-DvKMuAXL.js";import"./chrome-CFmcixaE.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-CttALzrW.js";import"./routes-_iZdG1Fo.js";import"./paths-BnOjueoX.js";import"./ssrf-DJXLYZ0d.js";import"./store-DHD2IEgd.js";import"./ports-DTku9NSx.js";import"./trash-C3zmJ_O7.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./tool-images-CCpqFtrL.js";import"./workspace-waBqRxiy.js";import"./reply-prefix-Cg7AqaK0.js";import"./sqlite-CIGM1WKg.js";import"./memory-cli-CveeVOWH.js";import"./manager-BeohB4-8.js";import"./gemini-auth-DDR12zst.js";import"./retry-B151Hej5.js";import"./common-BfwMxpLu.js";import"./runner-Cu9NJouV.js";import"./tool-display-Cs4hDP1f.js";import"./chunk-Dly7lM4r.js";import"./markdown-tables-B1Rx8hv6.js";import"./fetch-guard-DnXqPKae.js";import"./fetch-Cn_THzz8.js";import"./ir-CSdQJPqu.js";import"./render-DlHYsbvQ.js";import"./builderforcellm-syscheck-9ksvqHYX.js";import"./session-utils-Dxou8SbO.js";import"./coding-tools.policy-D9Ba8eDh.js";import"./pairing-store-YRy7EBgI.js";import"./fetch-DnWD6ydH.js";import"./exec-approvals-D7ZPAZpt.js";import"./nodes-screen-D6GHv_S0.js";import"./session-cost-usage-S0nkbPoW.js";import"./usage-format-5sp5AMSu.js";import"./provider-usage-B8lFHp0K.js";import"./send-kkm_zrHQ.js";import"./outbound-attachment-BaTYE4qp.js";import"./delivery-queue-Cp3t4Upn.js";import"./project-context-D3Mx4maV.js";import"./control-service-2PkCt256.js";import"./stagger-CRe77dWL.js";import"./channel-selection-BLwXhb9t.js";import"./send-CYGOPcKq.js";import"./resolve-route-DEIW5uKy.js";import"./channel-activity-DX36RadH.js";import"./tables-CojSfTth.js";import{t as formatDocsLink}from"./links-BKzP7VVP.js";import{n as runCommandWithRuntime}from"./cli-utils-C9pW69LF.js";import"./help-format-CfFf-w62.js";import"./progress-Cqb-jAjT.js";import"./replies-BOGMDhSN.js";import"./onboard-helpers-Ce_c4Raj.js";import"./prompt-style-BMWmaqSC.js";import"./pairing-labels-BJPrScRl.js";import"./active-listener-Di9e1YAD.js";import"./mamba-state-engine-CV4nDcCk.js";import"./transformers-stream-Buj40qHl.js";import"./catalog-li4bSIE2.js";import"./note-DgDXuE0F.js";import"./clack-prompter-B52CP7eY.js";import"./helpers-DPPVplyk.js";import"./plugin-auto-enable-Cupr4wbt.js";import"./install-safe-path-ObPl6zIf.js";import"./npm-registry-spec-BV1VDmuN.js";import"./skill-scanner-OTLeRZ_p.js";import"./installs-B_t2YXgq.js";import"./onboard-channels-Dn0u5C-C.js";import"./daemon-runtime-Dx800VUt.js";import"./runtime-guard-Bi8k55v9.js";import"./systemd-DdVd5Yet.js";import"./service-EKJG69M3.js";import"./widearea-dns-DvQozd9v.js";import"./bonjour-discovery-CViQz7cm.js";import"./health-zrsgFZmR.js";import"./control-ui-assets-BxgWcomx.js";import"./skills-install-tx5Mahav.js";import"./shared-BBOiNdjf.js";import"./onboard-auth.credentials-DneFSdYg.js";import"./auth-token-BPHeoBAW.js";import"./logging-ayt7F7vy.js";import"./provider-auth-helpers-hNwpK_hl.js";import"./auth-choice.apply-BgOXoS8X.js";import"./openai-model-default-pfoEzWYJ.js";import"./model-picker-CGDNPRPc.js";import"./auth-choice.apply.transformers-DmdxpHGz.js";import"./auth-choice-DzBqqq7i.js";import{n as configureCommandFromSectionsArg,o as CONFIGURE_WIZARD_SECTIONS}from"./configure-CWr61Ph2.js";import"./systemd-linger-CPKngdUf.js";import"./onboard-custom-BYIza2e7.js";import"./health-format-D4MaIjaG.js";import"./onboard-remote-0-q7MG9t.js";import"./onboard-skills-9Um4TL2x.js";function registerConfigureCommand(program){program.command(`configure`).description(`Interactive setup wizard for credentials, channels, gateway, and agent defaults`).addHelpText(`after`,()=>`\n${theme.muted(`Docs:`)} ${formatDocsLink(`/cli/configure`,`docs.builderforce.ai/cli/configure`)}\n`).option(`--section <section>`,`Configuration sections (repeatable). Options: ${CONFIGURE_WIZARD_SECTIONS.join(`, `)}`,(value,previous)=>[...previous,value],[]).action(async opts=>{await runCommandWithRuntime(defaultRuntime,async()=>{await configureCommandFromSectionsArg(opts.section,defaultRuntime)})})}export{registerConfigureCommand};
@@ -0,0 +1 @@
1
+ import"./paths-5FcIFMsj.js";import{B as theme}from"./utils-DbaBVFaK.js";import"./embedded-helpers-C9jpiwlw.js";import"./reply-GY1C8tcv.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-DG9J_VTz.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-BLBq4T2o.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BgV_FYSq.js";import"./runner-eTTUbLAK.js";import"./model-catalog-DjNiebr7.js";import"./sandbox-C4AKi2EX.js";import"./chrome-DXt86tmV.js";import"./tailscale-DLkpGquM.js";import"./auth-lebUHrkd.js";import"./server-context-CQ2v4BAx.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./routes-DZntyPY6.js";import"./redact-BHdfp2MZ.js";import"./errors-B1MIg3g-.js";import"./paths-cR8ct-Y3.js";import"./ssrf-p9k-iapc.js";import"./image-ops-C8IUQKjn.js";import"./store-CmHBQ-yX.js";import"./ports-DgmEDNOm.js";import"./trash-DD2Hc5oq.js";import"./sessions-BuZVmOWt.js";import"./message-channel-D_jXxXQj.js";import"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./accounts-rmXEiebi.js";import"./accounts-BLueHgKj.js";import"./bindings-DR59065T.js";import"./send-Aw8wK3vK.js";import"./send-ChGpVO3O.js";import"./paths-DJ6rztqJ.js";import"./tool-images-B7b_OiMz.js";import"./tool-display-ByOZtWvA.js";import"./fetch-guard-8mwt3-hm.js";import"./api-key-rotation-CyCi-UqR.js";import"./fetch-BuOLY9KP.js";import"./sqlite-C39E12XS.js";import"./tokens-CCU3zO-D.js";import"./project-context-store-wcq7lXuI.js";import"./with-timeout-GDLpcjW7.js";import"./deliver--6OBF3LL.js";import"./send-BxoVLIy1.js";import"./workspace-D4LK4thI.js";import"./reply-prefix-zIMgi6K6.js";import"./memory-cli-CbkWGjRn.js";import"./manager-DSz61dXv.js";import"./retry-DlVhg5qu.js";import"./client-xfoidwPI.js";import"./call-T8ciwMTA.js";import"./common-BTbIhLyt.js";import"./chunk-FCBlVOyo.js";import"./markdown-tables-P6uoUSFa.js";import"./ir-5BNoIXZm.js";import"./render-D1dVTEB1.js";import"./builderforcellm-syscheck-F5JMAr3p.js";import"./send-BP5osGBo.js";import"./outbound-attachment-C7wByQO5.js";import"./fetch-DnVtDecb.js";import"./delivery-queue-CXKynF1P.js";import"./channel-activity-CCNDbdD3.js";import"./tables-ERcoWFDp.js";import"./pairing-store-ti3FEkmr.js";import{t as formatDocsLink}from"./links-BgWWaaOT.js";import{n as runCommandWithRuntime}from"./cli-utils-LBYKdNFb.js";import"./help-format-Qfk2vDNX.js";import"./progress-BfOtdN6b.js";import"./resolve-route-D49haUnv.js";import"./replies-DokbEfJD.js";import"./refresh-TiC_kLgE.js";import"./coding-tools.policy-ZhOdlcEI.js";import"./send-l3ge4wkC.js";import"./onboard-helpers-CiHzTaFX.js";import"./prompt-style-BpVK43GK.js";import"./pairing-labels-oA-nKTaW.js";import"./session-cost-usage-BjH7mxVj.js";import"./usage-format-DGf8ZWPH.js";import"./provider-usage-B-wPVN_j.js";import"./active-listener-Dcg19lJG.js";import"./exec-approvals-BpVPDVtV.js";import"./nodes-screen-C3TDIi8d.js";import"./project-context-CJj0Inz-.js";import"./control-service-y3GYvIBg.js";import"./stagger-8EkqkqJv.js";import"./channel-selection-DyAvzlY8.js";import"./mamba-state-engine-CoGqoBTH.js";import"./transformers-stream-D7nRu4Qu.js";import"./runtime-guard-DhksRHci.js";import"./catalog-rgiY__UQ.js";import"./skills-status-vWC0PU8J.js";import"./note-B6NtFdXt.js";import"./clack-prompter-Dg23_riR.js";import"./helpers-DTDCy17p.js";import"./plugin-auto-enable-D8gKiE3F.js";import"./install-safe-path-DsLq2BUJ.js";import"./npm-registry-spec-DIW6RsGN.js";import"./skill-scanner-BEvov9QH.js";import"./installs-DFiF4lGy.js";import"./onboard-channels-vhtccaIV.js";import"./daemon-runtime-9XitJmIL.js";import"./systemd-BG3_QT6W.js";import"./service-D-NLDyK3.js";import"./widearea-dns-CZR56vQb.js";import"./bonjour-discovery-Dq1G1iS-.js";import"./health-FO8MG5Ur.js";import"./control-ui-assets-CWgH1Tda.js";import"./skills-install-LlKntDHa.js";import"./shared-C2orjbTD.js";import"./onboard-auth.credentials-DpitLlzw.js";import"./auth-token-BE67qxLw.js";import"./logging-DHa3jQN3.js";import"./provider-auth-helpers-B84m5VMc.js";import"./auth-choice.apply-DBuvopiF.js";import"./openai-model-default-CH2-2Hvk.js";import"./model-picker-EIhpfOZa.js";import"./auth-choice.apply.transformers-Df9l_jRz.js";import"./auth-choice-CCib_yVL.js";import{n as configureCommandFromSectionsArg,o as CONFIGURE_WIZARD_SECTIONS}from"./configure-DlcO1tWx.js";import"./systemd-linger-CT-VHPB3.js";import"./onboard-custom-Ckf0xKXY.js";import"./health-format-iE_KYEwP.js";import"./onboard-remote-CgAAEZpq.js";import"./onboard-skills-mI2kfvdT.js";function registerConfigureCommand(program){program.command(`configure`).description(`Interactive setup wizard for credentials, channels, gateway, and agent defaults`).addHelpText(`after`,()=>`\n${theme.muted(`Docs:`)} ${formatDocsLink(`/cli/configure`,`docs.builderforce.ai/cli/configure`)}\n`).option(`--section <section>`,`Configuration sections (repeatable). Options: ${CONFIGURE_WIZARD_SECTIONS.join(`, `)}`,(value,previous)=>[...previous,value],[]).action(async opts=>{await runCommandWithRuntime(defaultRuntime,async()=>{await configureCommandFromSectionsArg(opts.section,defaultRuntime)})})}export{registerConfigureCommand};