@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 +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"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./skills-status-CGlKz1D1.js";import"./client-CGgp3zkQ.js";import"./call-DmAU4cRX.js";import"./message-channel-z5YRpR2d.js";import"./sessions-Bl1wwotX.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./accounts-Cx82nj4E.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./ssrf-DJXLYZ0d.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./fetch-guard-DnXqPKae.js";import"./onboard-helpers-CckrS8_K.js";import"./prompt-style-BMWmaqSC.js";import"./install-safe-path-ObPl6zIf.js";import"./skill-scanner-DEmbPsRh.js";import"./skills-install-DMHQRpIl.js";import{t as setupSkills}from"./onboard-skills-BPlNN_-T.js";export{setupSkills};
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"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./skills-status-CGlKz1D1.js";import"./client-CGgp3zkQ.js";import"./call-Du2LiaX6.js";import"./message-channel-z5YRpR2d.js";import"./sessions-BA8Se_bT.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./accounts-Cx82nj4E.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./ssrf-DJXLYZ0d.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./fetch-guard-DnXqPKae.js";import"./onboard-helpers-Ce_c4Raj.js";import"./prompt-style-BMWmaqSC.js";import"./install-safe-path-ObPl6zIf.js";import"./skill-scanner-OTLeRZ_p.js";import"./skills-install-tx5Mahav.js";import{t as setupSkills}from"./onboard-skills-9Um4TL2x.js";export{setupSkills};
@@ -1,4 +1,4 @@
1
- import{Qt as normalizeSecretInput}from"./auth-profiles-C1VbcUOm.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import{t as buildWorkspaceSkillStatus}from"./skills-status-CGlKz1D1.js";import{_ as resolveNodeManagerOptions,r as detectBinary}from"./onboard-helpers-CckrS8_K.js";import{t as installSkill}from"./skills-install-DMHQRpIl.js";function summarizeInstallFailure(message){let cleaned=message.replace(/^Install failed(?:\s*\([^)]*\))?\s*:?\s*/i,``).trim();return cleaned?cleaned.length>140?`${cleaned.slice(0,139)}…`:cleaned:void 0}function formatSkillHint(skill){let desc=skill.description?.trim(),installLabel=skill.install[0]?.label?.trim(),combined=desc&&installLabel?`${desc} — ${installLabel}`:desc||installLabel;return combined?combined.length>90?`${combined.slice(0,89)}…`:combined:`install`}function upsertSkillEntry(cfg,skillKey,patch){let entries={...cfg.skills?.entries};return entries[skillKey]={...entries[skillKey]??{},...patch},{...cfg,skills:{...cfg.skills,entries}}}async function setupSkills(cfg,workspaceDir,runtime,prompter){let report=buildWorkspaceSkillStatus(workspaceDir,{config:cfg}),eligible=report.skills.filter(s=>s.eligible),unsupportedOs=report.skills.filter(s=>!s.disabled&&!s.blockedByAllowlist&&s.missing.os.length>0),missing=report.skills.filter(s=>!s.eligible&&!s.disabled&&!s.blockedByAllowlist&&s.missing.os.length===0),blocked=report.skills.filter(s=>s.blockedByAllowlist);if(await prompter.note([`Eligible: ${eligible.length}`,`Missing requirements: ${missing.length}`,`Unsupported on this OS: ${unsupportedOs.length}`,`Blocked by allowlist: ${blocked.length}`].join(`
1
+ import{Qt as normalizeSecretInput}from"./auth-profiles-pt7Tr4HA.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import{t as buildWorkspaceSkillStatus}from"./skills-status-CGlKz1D1.js";import{_ as resolveNodeManagerOptions,r as detectBinary}from"./onboard-helpers-Ce_c4Raj.js";import{t as installSkill}from"./skills-install-tx5Mahav.js";function summarizeInstallFailure(message){let cleaned=message.replace(/^Install failed(?:\s*\([^)]*\))?\s*:?\s*/i,``).trim();return cleaned?cleaned.length>140?`${cleaned.slice(0,139)}…`:cleaned:void 0}function formatSkillHint(skill){let desc=skill.description?.trim(),installLabel=skill.install[0]?.label?.trim(),combined=desc&&installLabel?`${desc} — ${installLabel}`:desc||installLabel;return combined?combined.length>90?`${combined.slice(0,89)}…`:combined:`install`}function upsertSkillEntry(cfg,skillKey,patch){let entries={...cfg.skills?.entries};return entries[skillKey]={...entries[skillKey]??{},...patch},{...cfg,skills:{...cfg.skills,entries}}}async function setupSkills(cfg,workspaceDir,runtime,prompter){let report=buildWorkspaceSkillStatus(workspaceDir,{config:cfg}),eligible=report.skills.filter(s=>s.eligible),unsupportedOs=report.skills.filter(s=>!s.disabled&&!s.blockedByAllowlist&&s.missing.os.length>0),missing=report.skills.filter(s=>!s.eligible&&!s.disabled&&!s.blockedByAllowlist&&s.missing.os.length===0),blocked=report.skills.filter(s=>s.blockedByAllowlist);if(await prompter.note([`Eligible: ${eligible.length}`,`Missing requirements: ${missing.length}`,`Unsupported on this OS: ${unsupportedOs.length}`,`Blocked by allowlist: ${blocked.length}`].join(`
2
2
  `),`Skills status`),!await prompter.confirm({message:`Configure skills now? (recommended)`,initialValue:!0}))return cfg;let installable=missing.filter(skill=>skill.install.length>0&&skill.missing.bins.length>0),next=cfg;if(installable.length>0){let selected=(await prompter.multiselect({message:`Install missing skill dependencies`,options:[{value:`__skip__`,label:`Skip for now`,hint:`Continue without installing dependencies`},...installable.map(skill=>({value:skill.name,label:`${skill.emoji??`🧩`} ${skill.name}`,hint:formatSkillHint(skill)}))]})).filter(name=>name!==`__skip__`),selectedSkills=selected.map(name=>installable.find(s=>s.name===name)).filter(item=>!!item);if(process.platform!==`win32`&&selectedSkills.some(skill=>skill.install.some(option=>option.kind===`brew`))&&!await detectBinary(`brew`)&&(await prompter.note([`Many skill dependencies are shipped via Homebrew.`,`Without brew, you'll need to build from source or download releases manually.`].join(`
3
3
  `),`Homebrew recommended`),await prompter.confirm({message:`Show Homebrew install command?`,initialValue:!0})&&await prompter.note([`Run:`,`/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`].join(`
4
4
  `),`Homebrew install`)),selectedSkills.some(skill=>skill.install.some(option=>option.kind===`node`))){let nodeManager=await prompter.select({message:`Preferred node manager for skill installs`,options:resolveNodeManagerOptions()});next={...next,skills:{...next.skills,install:{...next.skills?.install,nodeManager}}}}for(let name of selected){let target=installable.find(s=>s.name===name);if(!target||target.install.length===0)continue;let installId=target.install[0]?.id;if(!installId)continue;let spin=prompter.progress(`Installing ${name}…`),result=await installSkill({workspaceDir,skillName:target.name,installId,config:next}),warnings=result.warnings??[];if(result.ok){spin.stop(warnings.length>0?`Installed ${name} (with warnings)`:`Installed ${name}`);for(let warning of warnings)runtime.log(warning);continue}let code=result.code==null?``:` (exit ${result.code})`,detail=summarizeInstallFailure(result.message);spin.stop(`Install failed: ${name}${code}${detail?` — ${detail}`:``}`);for(let warning of warnings)runtime.log(warning);result.stderr?runtime.log(result.stderr.trim()):result.stdout&&runtime.log(result.stdout.trim()),runtime.log(`Tip: run \`${formatCliCommand(`builderforce doctor`)}\` to review skills + requirements.`),runtime.log(`Docs: https://docs.builderforce.ai/skills`)}}for(let skill of missing){if(!skill.primaryEnv||skill.missing.env.length===0||!await prompter.confirm({message:`Set ${skill.primaryEnv} for ${skill.name}?`,initialValue:!1}))continue;let apiKey=String(await prompter.text({message:`Enter ${skill.primaryEnv}`,validate:value=>value?.trim()?void 0:`Required`}));next=upsertSkillEntry(next,skill.skillKey,{apiKey:normalizeSecretInput(apiKey)})}return next}export{setupSkills 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"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./redact-BHdfp2MZ.js";import"./errors-B1MIg3g-.js";import"./ssrf-p9k-iapc.js";import"./sessions-CdanN_ZI.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"./paths-DJ6rztqJ.js";import"./fetch-guard-8mwt3-hm.js";import"./client-xfoidwPI.js";import"./call-BbRf8gFM.js";import"./onboard-helpers-Cf5dNq7-.js";import"./prompt-style-BpVK43GK.js";import"./skills-status-vWC0PU8J.js";import"./install-safe-path-DsLq2BUJ.js";import"./skill-scanner-U3AJgjqc.js";import"./skills-install-Btw_GHbI.js";import{t as setupSkills}from"./onboard-skills-CI1OtWsE.js";export{setupSkills};
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"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./redact-BHdfp2MZ.js";import"./errors-B1MIg3g-.js";import"./ssrf-p9k-iapc.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"./paths-DJ6rztqJ.js";import"./fetch-guard-8mwt3-hm.js";import"./client-xfoidwPI.js";import"./call-T8ciwMTA.js";import"./onboard-helpers-CiHzTaFX.js";import"./prompt-style-BpVK43GK.js";import"./skills-status-vWC0PU8J.js";import"./install-safe-path-DsLq2BUJ.js";import"./skill-scanner-BEvov9QH.js";import"./skills-install-LlKntDHa.js";import{t as setupSkills}from"./onboard-skills-mI2kfvdT.js";export{setupSkills};
@@ -1,4 +1,4 @@
1
- import{mn as normalizeSecretInput}from"./model-selection-9bRFKBI_.js";import{t as formatCliCommand}from"./command-format-D806O2pt.js";import{_ as resolveNodeManagerOptions,r as detectBinary}from"./onboard-helpers-Cf5dNq7-.js";import{t as buildWorkspaceSkillStatus}from"./skills-status-vWC0PU8J.js";import{t as installSkill}from"./skills-install-Btw_GHbI.js";function summarizeInstallFailure(message){let cleaned=message.replace(/^Install failed(?:\s*\([^)]*\))?\s*:?\s*/i,``).trim();return cleaned?cleaned.length>140?`${cleaned.slice(0,139)}…`:cleaned:void 0}function formatSkillHint(skill){let desc=skill.description?.trim(),installLabel=skill.install[0]?.label?.trim(),combined=desc&&installLabel?`${desc} — ${installLabel}`:desc||installLabel;return combined?combined.length>90?`${combined.slice(0,89)}…`:combined:`install`}function upsertSkillEntry(cfg,skillKey,patch){let entries={...cfg.skills?.entries};return entries[skillKey]={...entries[skillKey]??{},...patch},{...cfg,skills:{...cfg.skills,entries}}}async function setupSkills(cfg,workspaceDir,runtime,prompter){let report=buildWorkspaceSkillStatus(workspaceDir,{config:cfg}),eligible=report.skills.filter(s=>s.eligible),unsupportedOs=report.skills.filter(s=>!s.disabled&&!s.blockedByAllowlist&&s.missing.os.length>0),missing=report.skills.filter(s=>!s.eligible&&!s.disabled&&!s.blockedByAllowlist&&s.missing.os.length===0),blocked=report.skills.filter(s=>s.blockedByAllowlist);if(await prompter.note([`Eligible: ${eligible.length}`,`Missing requirements: ${missing.length}`,`Unsupported on this OS: ${unsupportedOs.length}`,`Blocked by allowlist: ${blocked.length}`].join(`
1
+ import{mn as normalizeSecretInput}from"./model-selection-DG9J_VTz.js";import{t as formatCliCommand}from"./command-format-D806O2pt.js";import{_ as resolveNodeManagerOptions,r as detectBinary}from"./onboard-helpers-CiHzTaFX.js";import{t as buildWorkspaceSkillStatus}from"./skills-status-vWC0PU8J.js";import{t as installSkill}from"./skills-install-LlKntDHa.js";function summarizeInstallFailure(message){let cleaned=message.replace(/^Install failed(?:\s*\([^)]*\))?\s*:?\s*/i,``).trim();return cleaned?cleaned.length>140?`${cleaned.slice(0,139)}…`:cleaned:void 0}function formatSkillHint(skill){let desc=skill.description?.trim(),installLabel=skill.install[0]?.label?.trim(),combined=desc&&installLabel?`${desc} — ${installLabel}`:desc||installLabel;return combined?combined.length>90?`${combined.slice(0,89)}…`:combined:`install`}function upsertSkillEntry(cfg,skillKey,patch){let entries={...cfg.skills?.entries};return entries[skillKey]={...entries[skillKey]??{},...patch},{...cfg,skills:{...cfg.skills,entries}}}async function setupSkills(cfg,workspaceDir,runtime,prompter){let report=buildWorkspaceSkillStatus(workspaceDir,{config:cfg}),eligible=report.skills.filter(s=>s.eligible),unsupportedOs=report.skills.filter(s=>!s.disabled&&!s.blockedByAllowlist&&s.missing.os.length>0),missing=report.skills.filter(s=>!s.eligible&&!s.disabled&&!s.blockedByAllowlist&&s.missing.os.length===0),blocked=report.skills.filter(s=>s.blockedByAllowlist);if(await prompter.note([`Eligible: ${eligible.length}`,`Missing requirements: ${missing.length}`,`Unsupported on this OS: ${unsupportedOs.length}`,`Blocked by allowlist: ${blocked.length}`].join(`
2
2
  `),`Skills status`),!await prompter.confirm({message:`Configure skills now? (recommended)`,initialValue:!0}))return cfg;let installable=missing.filter(skill=>skill.install.length>0&&skill.missing.bins.length>0),next=cfg;if(installable.length>0){let selected=(await prompter.multiselect({message:`Install missing skill dependencies`,options:[{value:`__skip__`,label:`Skip for now`,hint:`Continue without installing dependencies`},...installable.map(skill=>({value:skill.name,label:`${skill.emoji??`🧩`} ${skill.name}`,hint:formatSkillHint(skill)}))]})).filter(name=>name!==`__skip__`),selectedSkills=selected.map(name=>installable.find(s=>s.name===name)).filter(item=>!!item);if(process.platform!==`win32`&&selectedSkills.some(skill=>skill.install.some(option=>option.kind===`brew`))&&!await detectBinary(`brew`)&&(await prompter.note([`Many skill dependencies are shipped via Homebrew.`,`Without brew, you'll need to build from source or download releases manually.`].join(`
3
3
  `),`Homebrew recommended`),await prompter.confirm({message:`Show Homebrew install command?`,initialValue:!0})&&await prompter.note([`Run:`,`/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`].join(`
4
4
  `),`Homebrew install`)),selectedSkills.some(skill=>skill.install.some(option=>option.kind===`node`))){let nodeManager=await prompter.select({message:`Preferred node manager for skill installs`,options:resolveNodeManagerOptions()});next={...next,skills:{...next.skills,install:{...next.skills?.install,nodeManager}}}}for(let name of selected){let target=installable.find(s=>s.name===name);if(!target||target.install.length===0)continue;let installId=target.install[0]?.id;if(!installId)continue;let spin=prompter.progress(`Installing ${name}…`),result=await installSkill({workspaceDir,skillName:target.name,installId,config:next}),warnings=result.warnings??[];if(result.ok){spin.stop(warnings.length>0?`Installed ${name} (with warnings)`:`Installed ${name}`);for(let warning of warnings)runtime.log(warning);continue}let code=result.code==null?``:` (exit ${result.code})`,detail=summarizeInstallFailure(result.message);spin.stop(`Install failed: ${name}${code}${detail?` — ${detail}`:``}`);for(let warning of warnings)runtime.log(warning);result.stderr?runtime.log(result.stderr.trim()):result.stdout&&runtime.log(result.stdout.trim()),runtime.log(`Tip: run \`${formatCliCommand(`builderforce doctor`)}\` to review skills + requirements.`),runtime.log(`Docs: https://docs.builderforce.ai/skills`)}}for(let skill of missing){if(!skill.primaryEnv||skill.missing.env.length===0||!await prompter.confirm({message:`Set ${skill.primaryEnv} for ${skill.name}?`,initialValue:!1}))continue;let apiKey=String(await prompter.text({message:`Enter ${skill.primaryEnv}`,validate:value=>value?.trim()?void 0:`Required`}));next=upsertSkillEntry(next,skill.skillKey,{apiKey:normalizeSecretInput(apiKey)})}return next}export{setupSkills as t};
@@ -1,7 +1,7 @@
1
- import{n as DEFAULT_GATEWAY_PORT,u as resolveGatewayPort}from"./paths-5FcIFMsj.js";import{b as resolveUserPath}from"./utils-DbaBVFaK.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import{in as ensureAuthProfileStore}from"./model-selection-9bRFKBI_.js";import{t as formatCliCommand}from"./command-format-D806O2pt.js";import{i as readSharedEnvVar}from"./env-file-D1MDi-AM.js";import{a as readConfigFileSnapshot,c as writeConfigFile}from"./io-3R_ZyUxB.js";import{t as WizardCancelledError}from"./prompts-Bchzq3K0.js";import path from"node:path";async function requireRiskAcknowledgement(params){if(params.opts.acceptRisk!==!0&&(await params.prompter.note([`Security warning — please read.`,``,`BuilderForceAgents is a hobby project and still in beta. Expect sharp edges.`,`This bot can read files and run actions if tools are enabled.`,`A bad prompt can trick it into doing unsafe things.`,``,`If you’re not comfortable with basic security and access control, don’t run BuilderForceAgents.`,`Ask someone experienced to help before enabling tools or exposing it to the internet.`,``,`Recommended baseline:`,`- Pairing/allowlists + mention gating.`,`- Sandbox + least-privilege tools.`,`- Keep secrets out of the agent’s reachable filesystem.`,`- Use the strongest available model for any bot with tools or untrusted inboxes.`,``,`Run regularly:`,`builderforce security audit --deep`,`builderforce security audit --fix`,``,`Must read: https://docs.builderforce.ai/gateway/security`].join(`
2
- `),`Security`),!await params.prompter.confirm({message:`I understand this is powerful and inherently risky. Continue?`,initialValue:!1})))throw new WizardCancelledError(`risk not accepted`)}function hasConfiguredModelOrAuth(config){let defaultsModel=config.agents?.defaults?.model,hasDefaultModel=typeof defaultsModel?.primary==`string`&&defaultsModel.primary.trim().length>0,hasModelCatalog=!!config.models&&Object.keys(config.models).length>0;return hasDefaultModel||hasModelCatalog}function hasConfiguredChannels(config){let channels=config.channels;return!channels||typeof channels!=`object`?!1:Object.values(channels).some(value=>value==null?!1:typeof value==`boolean`?value:typeof value==`string`?value.trim().length>0:typeof value==`number`?!0:Array.isArray(value)?value.length>0:typeof value==`object`?Object.keys(value).length>0:!1)}async function runOnboardingWizard(opts,runtime=defaultRuntime,prompter){let onboardHelpers=await import(`./onboard-helpers-CGlLpagb.js`);onboardHelpers.printWizardHeader(runtime),await prompter.intro(`BuilderForceAgents onboarding`),await requireRiskAcknowledgement({opts,prompter});let snapshot=await readConfigFileSnapshot(),baseConfig=snapshot.valid?snapshot.config:{},configHandlingAction=null;if(snapshot.exists&&!snapshot.valid){await prompter.note(onboardHelpers.summarizeExistingConfig(baseConfig),`Invalid config`),snapshot.issues.length>0&&await prompter.note([...snapshot.issues.map(iss=>`- ${iss.path}: ${iss.message}`),``,`Docs: https://docs.builderforce.ai/gateway/configuration`].join(`
1
+ import{n as DEFAULT_GATEWAY_PORT,u as resolveGatewayPort}from"./paths-5FcIFMsj.js";import{b as resolveUserPath}from"./utils-DbaBVFaK.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import{in as ensureAuthProfileStore}from"./model-selection-DG9J_VTz.js";import{t as formatCliCommand}from"./command-format-D806O2pt.js";import{i as readSharedEnvVar}from"./env-file-D1MDi-AM.js";import{a as readConfigFileSnapshot,c as writeConfigFile}from"./io-BLBq4T2o.js";import{t as WizardCancelledError}from"./prompts-Bchzq3K0.js";import path from"node:path";async function requireRiskAcknowledgement(params){if(params.opts.acceptRisk!==!0&&(await params.prompter.note([`Security warning — please read.`,``,`BuilderForceAgents is a hobby project and still in beta. Expect sharp edges.`,`This bot can read files and run actions if tools are enabled.`,`A bad prompt can trick it into doing unsafe things.`,``,`If you’re not comfortable with basic security and access control, don’t run BuilderForceAgents.`,`Ask someone experienced to help before enabling tools or exposing it to the internet.`,``,`Recommended baseline:`,`- Pairing/allowlists + mention gating.`,`- Sandbox + least-privilege tools.`,`- Keep secrets out of the agent’s reachable filesystem.`,`- Use the strongest available model for any bot with tools or untrusted inboxes.`,``,`Run regularly:`,`builderforce security audit --deep`,`builderforce security audit --fix`,``,`Must read: https://docs.builderforce.ai/gateway/security`].join(`
2
+ `),`Security`),!await params.prompter.confirm({message:`I understand this is powerful and inherently risky. Continue?`,initialValue:!1})))throw new WizardCancelledError(`risk not accepted`)}function hasConfiguredModelOrAuth(config){let defaultsModel=config.agents?.defaults?.model,hasDefaultModel=typeof defaultsModel?.primary==`string`&&defaultsModel.primary.trim().length>0,hasModelCatalog=!!config.models&&Object.keys(config.models).length>0;return hasDefaultModel||hasModelCatalog}function hasConfiguredChannels(config){let channels=config.channels;return!channels||typeof channels!=`object`?!1:Object.values(channels).some(value=>value==null?!1:typeof value==`boolean`?value:typeof value==`string`?value.trim().length>0:typeof value==`number`?!0:Array.isArray(value)?value.length>0:typeof value==`object`?Object.keys(value).length>0:!1)}async function runOnboardingWizard(opts,runtime=defaultRuntime,prompter){let onboardHelpers=await import(`./onboard-helpers-B8I5AVyb.js`);onboardHelpers.printWizardHeader(runtime),await prompter.intro(`BuilderForceAgents onboarding`),await requireRiskAcknowledgement({opts,prompter});let snapshot=await readConfigFileSnapshot(),baseConfig=snapshot.valid?snapshot.config:{},configHandlingAction=null;if(snapshot.exists&&!snapshot.valid){await prompter.note(onboardHelpers.summarizeExistingConfig(baseConfig),`Invalid config`),snapshot.issues.length>0&&await prompter.note([...snapshot.issues.map(iss=>`- ${iss.path}: ${iss.message}`),``,`Docs: https://docs.builderforce.ai/gateway/configuration`].join(`
3
3
  `),`Config issues`),await prompter.outro(`Config invalid. Run \`${formatCliCommand(`builderforce doctor`)}\` to repair it, then re-run onboarding.`),runtime.exit(1);return}let quickstartHint=`Configure details later via ${formatCliCommand(`builderforce configure`)}.`,explicitFlowRaw=opts.flow?.trim(),normalizedExplicitFlow=explicitFlowRaw===`manual`?`advanced`:explicitFlowRaw;if(normalizedExplicitFlow&&normalizedExplicitFlow!==`quickstart`&&normalizedExplicitFlow!==`advanced`){runtime.error(`Invalid --flow (use quickstart, manual, or advanced).`),runtime.exit(1);return}let flow=(normalizedExplicitFlow===`quickstart`||normalizedExplicitFlow===`advanced`?normalizedExplicitFlow:void 0)??await prompter.select({message:`Onboarding mode`,options:[{value:`quickstart`,label:`QuickStart`,hint:quickstartHint},{value:`advanced`,label:`Manual`,hint:`Configure port, network, Tailscale, and auth options.`}],initialValue:`quickstart`});if(opts.mode===`remote`&&flow===`quickstart`&&(await prompter.note(`QuickStart only supports local gateways. Switching to Manual mode.`,`QuickStart`),flow=`advanced`),snapshot.exists){await prompter.note(onboardHelpers.summarizeExistingConfig(baseConfig),`Existing config detected`);let action=await prompter.select({message:`Config handling
4
4
  (↑/↓ to select, Enter to confirm)`,options:[{value:`keep`,label:`Use existing values`},{value:`modify`,label:`Update values`},{value:`reset`,label:`Reset`}],initialValue:`keep`});if(configHandlingAction=action,action===`reset`){let workspaceDefault=baseConfig.agents?.defaults?.workspace??onboardHelpers.DEFAULT_WORKSPACE,resetScope=await prompter.select({message:`Reset scope`,options:[{value:`config`,label:`Config only`},{value:`config+creds+sessions`,label:`Config + creds + sessions`},{value:`full`,label:`Full reset (config + creds + sessions + workspace)`}]});await onboardHelpers.handleReset(resetScope,resolveUserPath(workspaceDefault),runtime),baseConfig={}}}let keepExistingValues=configHandlingAction===`keep`,quickstartGateway=(()=>{let hasExisting=typeof baseConfig.gateway?.port==`number`||baseConfig.gateway?.bind!==void 0||baseConfig.gateway?.auth?.mode!==void 0||baseConfig.gateway?.auth?.token!==void 0||baseConfig.gateway?.auth?.password!==void 0||baseConfig.gateway?.customBindHost!==void 0||baseConfig.gateway?.tailscale?.mode!==void 0,bindRaw=baseConfig.gateway?.bind,bind=bindRaw===`loopback`||bindRaw===`lan`||bindRaw===`auto`||bindRaw===`custom`||bindRaw===`tailnet`?bindRaw:`loopback`,authMode=`token`;baseConfig.gateway?.auth?.mode===`token`||baseConfig.gateway?.auth?.mode===`password`?authMode=baseConfig.gateway.auth.mode:baseConfig.gateway?.auth?.token?authMode=`token`:baseConfig.gateway?.auth?.password&&(authMode=`password`);let tailscaleRaw=baseConfig.gateway?.tailscale?.mode,tailscaleMode=tailscaleRaw===`off`||tailscaleRaw===`serve`||tailscaleRaw===`funnel`?tailscaleRaw:`off`;return{hasExisting,port:resolveGatewayPort(baseConfig),bind,authMode,tailscaleMode,token:baseConfig.gateway?.auth?.token,password:baseConfig.gateway?.auth?.password,customBindHost:baseConfig.gateway?.customBindHost,tailscaleResetOnExit:baseConfig.gateway?.tailscale?.resetOnExit??!1}})();if(flow===`quickstart`){let formatBind=value=>value===`loopback`?`Loopback (127.0.0.1)`:value===`lan`?`LAN`:value===`custom`?`Custom IP`:value===`tailnet`?`Tailnet (Tailscale IP)`:`Auto`,formatAuth=value=>value===`token`?`Token (default)`:`Password`,formatTailscale=value=>value===`off`?`Off`:value===`serve`?`Serve`:`Funnel`,quickstartLines=quickstartGateway.hasExisting?[`Keeping your current gateway settings:`,`Gateway port: ${quickstartGateway.port}`,`Gateway bind: ${formatBind(quickstartGateway.bind)}`,...quickstartGateway.bind===`custom`&&quickstartGateway.customBindHost?[`Gateway custom IP: ${quickstartGateway.customBindHost}`]:[],`Gateway auth: ${formatAuth(quickstartGateway.authMode)}`,`Tailscale exposure: ${formatTailscale(quickstartGateway.tailscaleMode)}`,`Direct to chat channels.`]:[`Gateway port: ${DEFAULT_GATEWAY_PORT}`,`Gateway bind: Loopback (127.0.0.1)`,`Gateway auth: Token (default)`,`Tailscale exposure: Off`,`Direct to chat channels.`];await prompter.note(quickstartLines.join(`
5
- `),`QuickStart`)}let localPort=resolveGatewayPort(baseConfig),localUrl=`ws://127.0.0.1:${localPort}`,localProbe=await onboardHelpers.probeGatewayReachable({url:localUrl,token:baseConfig.gateway?.auth?.token??process.env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN,password:baseConfig.gateway?.auth?.password??process.env.BUILDERFORCE_AGENTS_GATEWAY_PASSWORD}),remoteUrl=baseConfig.gateway?.remote?.url?.trim()??``,remoteProbe=remoteUrl?await onboardHelpers.probeGatewayReachable({url:remoteUrl,token:baseConfig.gateway?.remote?.token}):null,mode=opts.mode??(flow===`quickstart`?`local`:await prompter.select({message:`What do you want to set up?`,options:[{value:`local`,label:`Local gateway (this machine)`,hint:localProbe.ok?`Gateway reachable (${localUrl})`:`No gateway detected (${localUrl})`},{value:`remote`,label:`Remote gateway (info-only)`,hint:remoteUrl?remoteProbe?.ok?`Gateway reachable (${remoteUrl})`:`Configured but unreachable (${remoteUrl})`:`No remote URL configured yet`}]}));if(mode===`remote`){let{promptRemoteGatewayConfig}=await import(`./onboard-remote-DcuX8b2g.js`),{logConfigUpdated}=await import(`./logging-DuPWVnGa.js`),nextConfig=await promptRemoteGatewayConfig(baseConfig,prompter);nextConfig=onboardHelpers.applyWizardMetadata(nextConfig,{command:`onboard`,mode}),await writeConfigFile(nextConfig),logConfigUpdated(runtime),await prompter.outro(`Remote gateway configured.`);return}let existingWorkspace=baseConfig.agents?.defaults?.workspace??onboardHelpers.DEFAULT_WORKSPACE,workspaceDir=resolveUserPath((opts.workspace??(flow===`quickstart`||keepExistingValues?existingWorkspace:await prompter.text({message:`Workspace directory`,initialValue:existingWorkspace}))).trim()||onboardHelpers.DEFAULT_WORKSPACE),{applyOnboardingLocalWorkspaceConfig}=await import(`./onboard-config-CZqislkG.js`),nextConfig=applyOnboardingLocalWorkspaceConfig(baseConfig,workspaceDir),{promptAuthChoiceGrouped}=await import(`./auth-choice-prompt-aEk7uMxo.js`),{promptCustomApiConfig}=await import(`./onboard-custom-VpW3UC8u.js`),{applyAuthChoice,resolvePreferredProviderForAuthChoice,warnIfModelConfigLooksOff}=await import(`./auth-choice-Btd2Rxxd.js`),{applyPrimaryModel,promptDefaultModel}=await import(`./model-picker-DO1HtEEm.js`);if(keepExistingValues&&hasConfiguredModelOrAuth(nextConfig))await prompter.note(`Keeping existing model/auth configuration.`,`Model/auth provider`);else{let authStore=await ensureAuthProfileStore(void 0,{allowKeychainPrompt:!1}),authChoiceFromPrompt=opts.authChoice===void 0,authChoice=opts.authChoice??await promptAuthChoiceGrouped({prompter,store:authStore,includeSkip:!0});if(nextConfig=authChoice===`custom-api-key`?(await promptCustomApiConfig({prompter,runtime,config:nextConfig})).config:(await applyAuthChoice({authChoice,config:nextConfig,prompter,runtime,setDefaultModel:!0,opts:{tokenProvider:opts.tokenProvider,token:opts.authChoice===`apiKey`&&opts.token?opts.token:void 0}})).config,authChoiceFromPrompt&&authChoice!==`custom-api-key`&&authChoice!==`local`&&authChoice!==`builderforcellm`){let modelSelection=await promptDefaultModel({config:nextConfig,prompter,allowKeep:!0,ignoreAllowlist:!0,includeVllm:!0,preferredProvider:resolvePreferredProviderForAuthChoice(authChoice)});modelSelection.config&&(nextConfig=modelSelection.config),modelSelection.model&&(nextConfig=applyPrimaryModel(nextConfig,modelSelection.model))}let primaryModel=typeof nextConfig.agents?.defaults?.model?.primary==`string`?nextConfig.agents.defaults.model.primary.trim().toLowerCase():``;if((primaryModel===`builderforcellm`||primaryModel.startsWith(`builderforcellm/`))&&!(process.env.BUILDERFORCE_API_KEY?.trim()??readSharedEnvVar(`BUILDERFORCE_API_KEY`)?.trim())){await prompter.note([`BuilderForceAgentsLLM requires Builderforce registration.`,`Complete login/registration now so /model builderforcellm/auto works immediately.`,`You can skip this and connect later — use /setup or: builderforce init --reconnect`].join(`
6
- `),`BuilderForceAgentsLLM`);let{promptBuilderforceOnboarding}=await import(`./builderforce-onboarding-DuUfZ6oL.js`);await promptBuilderforceOnboarding({projectRoot:workspaceDir,defaultInstanceName:path.basename(workspaceDir)||`builderforce`,forcePrompt:!0}),(process.env.BUILDERFORCE_API_KEY?.trim()??readSharedEnvVar(`BUILDERFORCE_API_KEY`)?.trim())||await prompter.note([`BuilderForceAgentsLLM won't work until you connect to Builderforce.`,`You can still use BuilderForceAgents — switch models with /model or connect later.`].join(`
7
- `),`Skipped`)}await warnIfModelConfigLooksOff(nextConfig,prompter)}let alreadyHasLocalBrain=nextConfig.models?.providers?.[`builderforcellm-local`]?.api===`transformers`;if(!opts.skipProviders&&(configHandlingAction!==`keep`||!alreadyHasLocalBrain))if(await prompter.select({message:`Enable local brain (amygdala + hippocampus)?`,options:[{value:`smart`,label:`Enable dual local brain`,hint:`Downloads amygdala (SmolLM2) + hippocampus (Qwen3-0.6B). ~3.5 GB disk.`},{value:`skip`,label:`Skip — use my cortex (configured LLM) only`,hint:`No extra download. Uses whatever model you configured above.`}],initialValue:`skip`})===`smart`){nextConfig={...nextConfig,localBrain:{enabled:!0}};let{downloadAndWireLocalBrain}=await import(`./auth-choice.apply.transformers-D5OrjEHo.js`);nextConfig={...(await downloadAndWireLocalBrain({config:nextConfig,prompter})).config}}else nextConfig={...nextConfig,localBrain:{enabled:!1}};let settings;if(keepExistingValues&&quickstartGateway.hasExisting)settings={port:quickstartGateway.port,bind:quickstartGateway.bind,customBindHost:quickstartGateway.bind===`custom`?quickstartGateway.customBindHost:void 0,authMode:quickstartGateway.authMode,gatewayToken:quickstartGateway.authMode===`token`?quickstartGateway.token:void 0,tailscaleMode:quickstartGateway.tailscaleMode,tailscaleResetOnExit:quickstartGateway.tailscaleResetOnExit},await prompter.note(`Keeping existing gateway settings.`,`Gateway`);else{let{configureGatewayForOnboarding}=await import(`./onboarding.gateway-config-Bd8HJkso.js`),gateway=await configureGatewayForOnboarding({flow,baseConfig,nextConfig,localPort,quickstartGateway,prompter,runtime});nextConfig=gateway.nextConfig,settings=gateway.settings}let skipChannelsForKeep=keepExistingValues&&hasConfiguredChannels(nextConfig);if(opts.skipChannels??opts.skipProviders??skipChannelsForKeep)await prompter.note(`Skipping channel setup.`,`Channels`);else{let{listChannelPlugins}=await import(`./plugins-iAq-Gr8l.js`),{setupChannels}=await import(`./onboard-channels-CmqKsAoW.js`),quickstartAllowFromChannels=flow===`quickstart`?listChannelPlugins().filter(plugin=>plugin.meta.quickstartAllowFrom).map(plugin=>plugin.id):[];nextConfig=await setupChannels(nextConfig,runtime,prompter,{allowSignalInstall:!0,forceAllowFromChannels:quickstartAllowFromChannels,skipDmPolicyPrompt:flow===`quickstart`,skipConfirm:flow===`quickstart`,quickstartDefaults:flow===`quickstart`})}await writeConfigFile(nextConfig);let{logConfigUpdated}=await import(`./logging-DuPWVnGa.js`);logConfigUpdated(runtime),await onboardHelpers.ensureWorkspaceAndSessions(workspaceDir,runtime,{skipBootstrap:!!nextConfig.agents?.defaults?.skipBootstrap});let{isBuilderForceAgentsProject,initializeBuilderForceAgentsProject}=await import(`./project-context-B0-sfVBd.js`);if(await isBuilderForceAgentsProject(workspaceDir)||(await initializeBuilderForceAgentsProject(workspaceDir),runtime.log(`Initialised .builderforce/ project directory`)),opts.skipSkills)await prompter.note(`Skipping skills setup.`,`Skills`);else{let{setupSkills}=await import(`./onboard-skills-DIhjDMom.js`);nextConfig=await setupSkills(nextConfig,workspaceDir,runtime,prompter)}let{setupInternalHooks}=await import(`./onboard-hooks-Ce20rwpW.js`);nextConfig=await setupInternalHooks(nextConfig,runtime,prompter),nextConfig=onboardHelpers.applyWizardMetadata(nextConfig,{command:`onboard`,mode}),await writeConfigFile(nextConfig);let{finalizeOnboardingWizard}=await import(`./onboarding.finalize-C2kZi7F0.js`),{launchedTui}=await finalizeOnboardingWizard({flow,opts,baseConfig,nextConfig,workspaceDir,settings,prompter,runtime})}export{runOnboardingWizard as t};
5
+ `),`QuickStart`)}let localPort=resolveGatewayPort(baseConfig),localUrl=`ws://127.0.0.1:${localPort}`,localProbe=await onboardHelpers.probeGatewayReachable({url:localUrl,token:baseConfig.gateway?.auth?.token??process.env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN,password:baseConfig.gateway?.auth?.password??process.env.BUILDERFORCE_AGENTS_GATEWAY_PASSWORD}),remoteUrl=baseConfig.gateway?.remote?.url?.trim()??``,remoteProbe=remoteUrl?await onboardHelpers.probeGatewayReachable({url:remoteUrl,token:baseConfig.gateway?.remote?.token}):null,mode=opts.mode??(flow===`quickstart`?`local`:await prompter.select({message:`What do you want to set up?`,options:[{value:`local`,label:`Local gateway (this machine)`,hint:localProbe.ok?`Gateway reachable (${localUrl})`:`No gateway detected (${localUrl})`},{value:`remote`,label:`Remote gateway (info-only)`,hint:remoteUrl?remoteProbe?.ok?`Gateway reachable (${remoteUrl})`:`Configured but unreachable (${remoteUrl})`:`No remote URL configured yet`}]}));if(mode===`remote`){let{promptRemoteGatewayConfig}=await import(`./onboard-remote-cB8j9RG-.js`),{logConfigUpdated}=await import(`./logging-DuPWVnGa.js`),nextConfig=await promptRemoteGatewayConfig(baseConfig,prompter);nextConfig=onboardHelpers.applyWizardMetadata(nextConfig,{command:`onboard`,mode}),await writeConfigFile(nextConfig),logConfigUpdated(runtime),await prompter.outro(`Remote gateway configured.`);return}let existingWorkspace=baseConfig.agents?.defaults?.workspace??onboardHelpers.DEFAULT_WORKSPACE,workspaceDir=resolveUserPath((opts.workspace??(flow===`quickstart`||keepExistingValues?existingWorkspace:await prompter.text({message:`Workspace directory`,initialValue:existingWorkspace}))).trim()||onboardHelpers.DEFAULT_WORKSPACE),{applyOnboardingLocalWorkspaceConfig}=await import(`./onboard-config-CZqislkG.js`),nextConfig=applyOnboardingLocalWorkspaceConfig(baseConfig,workspaceDir),{promptAuthChoiceGrouped}=await import(`./auth-choice-prompt-aEk7uMxo.js`),{promptCustomApiConfig}=await import(`./onboard-custom-CCFthqto.js`),{applyAuthChoice,resolvePreferredProviderForAuthChoice,warnIfModelConfigLooksOff}=await import(`./auth-choice-CChsMy-F.js`),{applyPrimaryModel,promptDefaultModel}=await import(`./model-picker-DeUNOC78.js`);if(keepExistingValues&&hasConfiguredModelOrAuth(nextConfig))await prompter.note(`Keeping existing model/auth configuration.`,`Model/auth provider`);else{let authStore=await ensureAuthProfileStore(void 0,{allowKeychainPrompt:!1}),authChoiceFromPrompt=opts.authChoice===void 0,authChoice=opts.authChoice??await promptAuthChoiceGrouped({prompter,store:authStore,includeSkip:!0});if(nextConfig=authChoice===`custom-api-key`?(await promptCustomApiConfig({prompter,runtime,config:nextConfig})).config:(await applyAuthChoice({authChoice,config:nextConfig,prompter,runtime,setDefaultModel:!0,opts:{tokenProvider:opts.tokenProvider,token:opts.authChoice===`apiKey`&&opts.token?opts.token:void 0}})).config,authChoiceFromPrompt&&authChoice!==`custom-api-key`&&authChoice!==`local`&&authChoice!==`builderforcellm`){let modelSelection=await promptDefaultModel({config:nextConfig,prompter,allowKeep:!0,ignoreAllowlist:!0,includeVllm:!0,preferredProvider:resolvePreferredProviderForAuthChoice(authChoice)});modelSelection.config&&(nextConfig=modelSelection.config),modelSelection.model&&(nextConfig=applyPrimaryModel(nextConfig,modelSelection.model))}let primaryModel=typeof nextConfig.agents?.defaults?.model?.primary==`string`?nextConfig.agents.defaults.model.primary.trim().toLowerCase():``;if((primaryModel===`builderforcellm`||primaryModel.startsWith(`builderforcellm/`))&&!(process.env.BUILDERFORCE_API_KEY?.trim()??readSharedEnvVar(`BUILDERFORCE_API_KEY`)?.trim())){await prompter.note([`BuilderForceAgentsLLM requires Builderforce registration.`,`Complete login/registration now so /model builderforcellm/auto works immediately.`,`You can skip this and connect later — use /setup or: builderforce init --reconnect`].join(`
6
+ `),`BuilderForceAgentsLLM`);let{promptBuilderforceOnboarding}=await import(`./builderforce-onboarding-CaPJZSvw.js`);await promptBuilderforceOnboarding({projectRoot:workspaceDir,defaultInstanceName:path.basename(workspaceDir)||`builderforce`,forcePrompt:!0}),(process.env.BUILDERFORCE_API_KEY?.trim()??readSharedEnvVar(`BUILDERFORCE_API_KEY`)?.trim())||await prompter.note([`BuilderForceAgentsLLM won't work until you connect to Builderforce.`,`You can still use BuilderForceAgents — switch models with /model or connect later.`].join(`
7
+ `),`Skipped`)}await warnIfModelConfigLooksOff(nextConfig,prompter)}let alreadyHasLocalBrain=nextConfig.models?.providers?.[`builderforcellm-local`]?.api===`transformers`;if(!opts.skipProviders&&(configHandlingAction!==`keep`||!alreadyHasLocalBrain))if(await prompter.select({message:`Enable local brain (amygdala + hippocampus)?`,options:[{value:`smart`,label:`Enable dual local brain`,hint:`Downloads amygdala (SmolLM2) + hippocampus (Qwen3-0.6B). ~3.5 GB disk.`},{value:`skip`,label:`Skip — use my cortex (configured LLM) only`,hint:`No extra download. Uses whatever model you configured above.`}],initialValue:`skip`})===`smart`){nextConfig={...nextConfig,localBrain:{enabled:!0}};let{downloadAndWireLocalBrain}=await import(`./auth-choice.apply.transformers-dn7l6XyJ.js`);nextConfig={...(await downloadAndWireLocalBrain({config:nextConfig,prompter})).config}}else nextConfig={...nextConfig,localBrain:{enabled:!1}};let settings;if(keepExistingValues&&quickstartGateway.hasExisting)settings={port:quickstartGateway.port,bind:quickstartGateway.bind,customBindHost:quickstartGateway.bind===`custom`?quickstartGateway.customBindHost:void 0,authMode:quickstartGateway.authMode,gatewayToken:quickstartGateway.authMode===`token`?quickstartGateway.token:void 0,tailscaleMode:quickstartGateway.tailscaleMode,tailscaleResetOnExit:quickstartGateway.tailscaleResetOnExit},await prompter.note(`Keeping existing gateway settings.`,`Gateway`);else{let{configureGatewayForOnboarding}=await import(`./onboarding.gateway-config-huOjFf8D.js`),gateway=await configureGatewayForOnboarding({flow,baseConfig,nextConfig,localPort,quickstartGateway,prompter,runtime});nextConfig=gateway.nextConfig,settings=gateway.settings}let skipChannelsForKeep=keepExistingValues&&hasConfiguredChannels(nextConfig);if(opts.skipChannels??opts.skipProviders??skipChannelsForKeep)await prompter.note(`Skipping channel setup.`,`Channels`);else{let{listChannelPlugins}=await import(`./plugins-DJqou2hi.js`),{setupChannels}=await import(`./onboard-channels-BOoPtYbF.js`),quickstartAllowFromChannels=flow===`quickstart`?listChannelPlugins().filter(plugin=>plugin.meta.quickstartAllowFrom).map(plugin=>plugin.id):[];nextConfig=await setupChannels(nextConfig,runtime,prompter,{allowSignalInstall:!0,forceAllowFromChannels:quickstartAllowFromChannels,skipDmPolicyPrompt:flow===`quickstart`,skipConfirm:flow===`quickstart`,quickstartDefaults:flow===`quickstart`})}await writeConfigFile(nextConfig);let{logConfigUpdated}=await import(`./logging-DuPWVnGa.js`);logConfigUpdated(runtime),await onboardHelpers.ensureWorkspaceAndSessions(workspaceDir,runtime,{skipBootstrap:!!nextConfig.agents?.defaults?.skipBootstrap});let{isBuilderForceAgentsProject,initializeBuilderForceAgentsProject}=await import(`./project-context-B0-sfVBd.js`);if(await isBuilderForceAgentsProject(workspaceDir)||(await initializeBuilderForceAgentsProject(workspaceDir),runtime.log(`Initialised .builderforce/ project directory`)),opts.skipSkills)await prompter.note(`Skipping skills setup.`,`Skills`);else{let{setupSkills}=await import(`./onboard-skills-DhCmvhJY.js`);nextConfig=await setupSkills(nextConfig,workspaceDir,runtime,prompter)}let{setupInternalHooks}=await import(`./onboard-hooks-fO5eeDe_.js`);nextConfig=await setupInternalHooks(nextConfig,runtime,prompter),nextConfig=onboardHelpers.applyWizardMetadata(nextConfig,{command:`onboard`,mode}),await writeConfigFile(nextConfig);let{finalizeOnboardingWizard}=await import(`./onboarding.finalize-BwOpvoPE.js`),{launchedTui}=await finalizeOnboardingWizard({flow,opts,baseConfig,nextConfig,workspaceDir,settings,prompter,runtime})}export{runOnboardingWizard as t};
@@ -1,7 +1,7 @@
1
- import{n as DEFAULT_GATEWAY_PORT,u as resolveGatewayPort}from"./paths-BHg-VHB4.js";import{y as resolveUserPath}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import{b as ensureAuthProfileStore}from"./auth-profiles-C1VbcUOm.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import{i as readSharedEnvVar}from"./env-file-DeS6x2OL.js";import{a as readConfigFileSnapshot,c as writeConfigFile}from"./io-CohJffHG.js";import{t as WizardCancelledError}from"./prompts-BP4e56X_.js";import path from"node:path";async function requireRiskAcknowledgement(params){if(params.opts.acceptRisk!==!0&&(await params.prompter.note([`Security warning — please read.`,``,`BuilderForceAgents is a hobby project and still in beta. Expect sharp edges.`,`This bot can read files and run actions if tools are enabled.`,`A bad prompt can trick it into doing unsafe things.`,``,`If you’re not comfortable with basic security and access control, don’t run BuilderForceAgents.`,`Ask someone experienced to help before enabling tools or exposing it to the internet.`,``,`Recommended baseline:`,`- Pairing/allowlists + mention gating.`,`- Sandbox + least-privilege tools.`,`- Keep secrets out of the agent’s reachable filesystem.`,`- Use the strongest available model for any bot with tools or untrusted inboxes.`,``,`Run regularly:`,`builderforce security audit --deep`,`builderforce security audit --fix`,``,`Must read: https://docs.builderforce.ai/gateway/security`].join(`
2
- `),`Security`),!await params.prompter.confirm({message:`I understand this is powerful and inherently risky. Continue?`,initialValue:!1})))throw new WizardCancelledError(`risk not accepted`)}function hasConfiguredModelOrAuth(config){let defaultsModel=config.agents?.defaults?.model,hasDefaultModel=typeof defaultsModel?.primary==`string`&&defaultsModel.primary.trim().length>0,hasModelCatalog=!!config.models&&Object.keys(config.models).length>0;return hasDefaultModel||hasModelCatalog}function hasConfiguredChannels(config){let channels=config.channels;return!channels||typeof channels!=`object`?!1:Object.values(channels).some(value=>value==null?!1:typeof value==`boolean`?value:typeof value==`string`?value.trim().length>0:typeof value==`number`?!0:Array.isArray(value)?value.length>0:typeof value==`object`?Object.keys(value).length>0:!1)}async function runOnboardingWizard(opts,runtime=defaultRuntime,prompter){let onboardHelpers=await import(`./onboard-helpers-BvIZ4-R5.js`);onboardHelpers.printWizardHeader(runtime),await prompter.intro(`BuilderForceAgents onboarding`),await requireRiskAcknowledgement({opts,prompter});let snapshot=await readConfigFileSnapshot(),baseConfig=snapshot.valid?snapshot.config:{},configHandlingAction=null;if(snapshot.exists&&!snapshot.valid){await prompter.note(onboardHelpers.summarizeExistingConfig(baseConfig),`Invalid config`),snapshot.issues.length>0&&await prompter.note([...snapshot.issues.map(iss=>`- ${iss.path}: ${iss.message}`),``,`Docs: https://docs.builderforce.ai/gateway/configuration`].join(`
1
+ import{n as DEFAULT_GATEWAY_PORT,u as resolveGatewayPort}from"./paths-BHg-VHB4.js";import{y as resolveUserPath}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import{b as ensureAuthProfileStore}from"./auth-profiles-pt7Tr4HA.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import{i as readSharedEnvVar}from"./env-file-DeS6x2OL.js";import{a as readConfigFileSnapshot,c as writeConfigFile}from"./io-D9hC2aG0.js";import{t as WizardCancelledError}from"./prompts-BP4e56X_.js";import path from"node:path";async function requireRiskAcknowledgement(params){if(params.opts.acceptRisk!==!0&&(await params.prompter.note([`Security warning — please read.`,``,`BuilderForceAgents is a hobby project and still in beta. Expect sharp edges.`,`This bot can read files and run actions if tools are enabled.`,`A bad prompt can trick it into doing unsafe things.`,``,`If you’re not comfortable with basic security and access control, don’t run BuilderForceAgents.`,`Ask someone experienced to help before enabling tools or exposing it to the internet.`,``,`Recommended baseline:`,`- Pairing/allowlists + mention gating.`,`- Sandbox + least-privilege tools.`,`- Keep secrets out of the agent’s reachable filesystem.`,`- Use the strongest available model for any bot with tools or untrusted inboxes.`,``,`Run regularly:`,`builderforce security audit --deep`,`builderforce security audit --fix`,``,`Must read: https://docs.builderforce.ai/gateway/security`].join(`
2
+ `),`Security`),!await params.prompter.confirm({message:`I understand this is powerful and inherently risky. Continue?`,initialValue:!1})))throw new WizardCancelledError(`risk not accepted`)}function hasConfiguredModelOrAuth(config){let defaultsModel=config.agents?.defaults?.model,hasDefaultModel=typeof defaultsModel?.primary==`string`&&defaultsModel.primary.trim().length>0,hasModelCatalog=!!config.models&&Object.keys(config.models).length>0;return hasDefaultModel||hasModelCatalog}function hasConfiguredChannels(config){let channels=config.channels;return!channels||typeof channels!=`object`?!1:Object.values(channels).some(value=>value==null?!1:typeof value==`boolean`?value:typeof value==`string`?value.trim().length>0:typeof value==`number`?!0:Array.isArray(value)?value.length>0:typeof value==`object`?Object.keys(value).length>0:!1)}async function runOnboardingWizard(opts,runtime=defaultRuntime,prompter){let onboardHelpers=await import(`./onboard-helpers-DC-nMl-V.js`);onboardHelpers.printWizardHeader(runtime),await prompter.intro(`BuilderForceAgents onboarding`),await requireRiskAcknowledgement({opts,prompter});let snapshot=await readConfigFileSnapshot(),baseConfig=snapshot.valid?snapshot.config:{},configHandlingAction=null;if(snapshot.exists&&!snapshot.valid){await prompter.note(onboardHelpers.summarizeExistingConfig(baseConfig),`Invalid config`),snapshot.issues.length>0&&await prompter.note([...snapshot.issues.map(iss=>`- ${iss.path}: ${iss.message}`),``,`Docs: https://docs.builderforce.ai/gateway/configuration`].join(`
3
3
  `),`Config issues`),await prompter.outro(`Config invalid. Run \`${formatCliCommand(`builderforce doctor`)}\` to repair it, then re-run onboarding.`),runtime.exit(1);return}let quickstartHint=`Configure details later via ${formatCliCommand(`builderforce configure`)}.`,explicitFlowRaw=opts.flow?.trim(),normalizedExplicitFlow=explicitFlowRaw===`manual`?`advanced`:explicitFlowRaw;if(normalizedExplicitFlow&&normalizedExplicitFlow!==`quickstart`&&normalizedExplicitFlow!==`advanced`){runtime.error(`Invalid --flow (use quickstart, manual, or advanced).`),runtime.exit(1);return}let flow=(normalizedExplicitFlow===`quickstart`||normalizedExplicitFlow===`advanced`?normalizedExplicitFlow:void 0)??await prompter.select({message:`Onboarding mode`,options:[{value:`quickstart`,label:`QuickStart`,hint:quickstartHint},{value:`advanced`,label:`Manual`,hint:`Configure port, network, Tailscale, and auth options.`}],initialValue:`quickstart`});if(opts.mode===`remote`&&flow===`quickstart`&&(await prompter.note(`QuickStart only supports local gateways. Switching to Manual mode.`,`QuickStart`),flow=`advanced`),snapshot.exists){await prompter.note(onboardHelpers.summarizeExistingConfig(baseConfig),`Existing config detected`);let action=await prompter.select({message:`Config handling
4
4
  (↑/↓ to select, Enter to confirm)`,options:[{value:`keep`,label:`Use existing values`},{value:`modify`,label:`Update values`},{value:`reset`,label:`Reset`}],initialValue:`keep`});if(configHandlingAction=action,action===`reset`){let workspaceDefault=baseConfig.agents?.defaults?.workspace??onboardHelpers.DEFAULT_WORKSPACE,resetScope=await prompter.select({message:`Reset scope`,options:[{value:`config`,label:`Config only`},{value:`config+creds+sessions`,label:`Config + creds + sessions`},{value:`full`,label:`Full reset (config + creds + sessions + workspace)`}]});await onboardHelpers.handleReset(resetScope,resolveUserPath(workspaceDefault),runtime),baseConfig={}}}let keepExistingValues=configHandlingAction===`keep`,quickstartGateway=(()=>{let hasExisting=typeof baseConfig.gateway?.port==`number`||baseConfig.gateway?.bind!==void 0||baseConfig.gateway?.auth?.mode!==void 0||baseConfig.gateway?.auth?.token!==void 0||baseConfig.gateway?.auth?.password!==void 0||baseConfig.gateway?.customBindHost!==void 0||baseConfig.gateway?.tailscale?.mode!==void 0,bindRaw=baseConfig.gateway?.bind,bind=bindRaw===`loopback`||bindRaw===`lan`||bindRaw===`auto`||bindRaw===`custom`||bindRaw===`tailnet`?bindRaw:`loopback`,authMode=`token`;baseConfig.gateway?.auth?.mode===`token`||baseConfig.gateway?.auth?.mode===`password`?authMode=baseConfig.gateway.auth.mode:baseConfig.gateway?.auth?.token?authMode=`token`:baseConfig.gateway?.auth?.password&&(authMode=`password`);let tailscaleRaw=baseConfig.gateway?.tailscale?.mode,tailscaleMode=tailscaleRaw===`off`||tailscaleRaw===`serve`||tailscaleRaw===`funnel`?tailscaleRaw:`off`;return{hasExisting,port:resolveGatewayPort(baseConfig),bind,authMode,tailscaleMode,token:baseConfig.gateway?.auth?.token,password:baseConfig.gateway?.auth?.password,customBindHost:baseConfig.gateway?.customBindHost,tailscaleResetOnExit:baseConfig.gateway?.tailscale?.resetOnExit??!1}})();if(flow===`quickstart`){let formatBind=value=>value===`loopback`?`Loopback (127.0.0.1)`:value===`lan`?`LAN`:value===`custom`?`Custom IP`:value===`tailnet`?`Tailnet (Tailscale IP)`:`Auto`,formatAuth=value=>value===`token`?`Token (default)`:`Password`,formatTailscale=value=>value===`off`?`Off`:value===`serve`?`Serve`:`Funnel`,quickstartLines=quickstartGateway.hasExisting?[`Keeping your current gateway settings:`,`Gateway port: ${quickstartGateway.port}`,`Gateway bind: ${formatBind(quickstartGateway.bind)}`,...quickstartGateway.bind===`custom`&&quickstartGateway.customBindHost?[`Gateway custom IP: ${quickstartGateway.customBindHost}`]:[],`Gateway auth: ${formatAuth(quickstartGateway.authMode)}`,`Tailscale exposure: ${formatTailscale(quickstartGateway.tailscaleMode)}`,`Direct to chat channels.`]:[`Gateway port: ${DEFAULT_GATEWAY_PORT}`,`Gateway bind: Loopback (127.0.0.1)`,`Gateway auth: Token (default)`,`Tailscale exposure: Off`,`Direct to chat channels.`];await prompter.note(quickstartLines.join(`
5
- `),`QuickStart`)}let localPort=resolveGatewayPort(baseConfig),localUrl=`ws://127.0.0.1:${localPort}`,localProbe=await onboardHelpers.probeGatewayReachable({url:localUrl,token:baseConfig.gateway?.auth?.token??process.env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN,password:baseConfig.gateway?.auth?.password??process.env.BUILDERFORCE_AGENTS_GATEWAY_PASSWORD}),remoteUrl=baseConfig.gateway?.remote?.url?.trim()??``,remoteProbe=remoteUrl?await onboardHelpers.probeGatewayReachable({url:remoteUrl,token:baseConfig.gateway?.remote?.token}):null,mode=opts.mode??(flow===`quickstart`?`local`:await prompter.select({message:`What do you want to set up?`,options:[{value:`local`,label:`Local gateway (this machine)`,hint:localProbe.ok?`Gateway reachable (${localUrl})`:`No gateway detected (${localUrl})`},{value:`remote`,label:`Remote gateway (info-only)`,hint:remoteUrl?remoteProbe?.ok?`Gateway reachable (${remoteUrl})`:`Configured but unreachable (${remoteUrl})`:`No remote URL configured yet`}]}));if(mode===`remote`){let{promptRemoteGatewayConfig}=await import(`./onboard-remote-CzzQMZ3X.js`),{logConfigUpdated}=await import(`./logging-DSIJukIo.js`),nextConfig=await promptRemoteGatewayConfig(baseConfig,prompter);nextConfig=onboardHelpers.applyWizardMetadata(nextConfig,{command:`onboard`,mode}),await writeConfigFile(nextConfig),logConfigUpdated(runtime),await prompter.outro(`Remote gateway configured.`);return}let existingWorkspace=baseConfig.agents?.defaults?.workspace??onboardHelpers.DEFAULT_WORKSPACE,workspaceDir=resolveUserPath((opts.workspace??(flow===`quickstart`||keepExistingValues?existingWorkspace:await prompter.text({message:`Workspace directory`,initialValue:existingWorkspace}))).trim()||onboardHelpers.DEFAULT_WORKSPACE),{applyOnboardingLocalWorkspaceConfig}=await import(`./onboard-config-C-P0yFzv.js`),nextConfig=applyOnboardingLocalWorkspaceConfig(baseConfig,workspaceDir),{promptAuthChoiceGrouped}=await import(`./auth-choice-prompt-BotfCVbL.js`),{promptCustomApiConfig}=await import(`./onboard-custom-BABqIYa4.js`),{applyAuthChoice,resolvePreferredProviderForAuthChoice,warnIfModelConfigLooksOff}=await import(`./auth-choice-CVV9wRFN.js`),{applyPrimaryModel,promptDefaultModel}=await import(`./model-picker-D2bcWrtu.js`);if(keepExistingValues&&hasConfiguredModelOrAuth(nextConfig))await prompter.note(`Keeping existing model/auth configuration.`,`Model/auth provider`);else{let authStore=await ensureAuthProfileStore(void 0,{allowKeychainPrompt:!1}),authChoiceFromPrompt=opts.authChoice===void 0,authChoice=opts.authChoice??await promptAuthChoiceGrouped({prompter,store:authStore,includeSkip:!0});if(nextConfig=authChoice===`custom-api-key`?(await promptCustomApiConfig({prompter,runtime,config:nextConfig})).config:(await applyAuthChoice({authChoice,config:nextConfig,prompter,runtime,setDefaultModel:!0,opts:{tokenProvider:opts.tokenProvider,token:opts.authChoice===`apiKey`&&opts.token?opts.token:void 0}})).config,authChoiceFromPrompt&&authChoice!==`custom-api-key`&&authChoice!==`local`&&authChoice!==`builderforcellm`){let modelSelection=await promptDefaultModel({config:nextConfig,prompter,allowKeep:!0,ignoreAllowlist:!0,includeVllm:!0,preferredProvider:resolvePreferredProviderForAuthChoice(authChoice)});modelSelection.config&&(nextConfig=modelSelection.config),modelSelection.model&&(nextConfig=applyPrimaryModel(nextConfig,modelSelection.model))}let primaryModel=typeof nextConfig.agents?.defaults?.model?.primary==`string`?nextConfig.agents.defaults.model.primary.trim().toLowerCase():``;if((primaryModel===`builderforcellm`||primaryModel.startsWith(`builderforcellm/`))&&!(process.env.BUILDERFORCE_API_KEY?.trim()??readSharedEnvVar(`BUILDERFORCE_API_KEY`)?.trim())){await prompter.note([`BuilderForceAgentsLLM requires Builderforce registration.`,`Complete login/registration now so /model builderforcellm/auto works immediately.`,`You can skip this and connect later — use /setup or: builderforce init --reconnect`].join(`
6
- `),`BuilderForceAgentsLLM`);let{promptBuilderforceOnboarding}=await import(`./builderforce-onboarding-Dq6VUSKZ.js`);await promptBuilderforceOnboarding({projectRoot:workspaceDir,defaultInstanceName:path.basename(workspaceDir)||`builderforce`,forcePrompt:!0}),(process.env.BUILDERFORCE_API_KEY?.trim()??readSharedEnvVar(`BUILDERFORCE_API_KEY`)?.trim())||await prompter.note([`BuilderForceAgentsLLM won't work until you connect to Builderforce.`,`You can still use BuilderForceAgents — switch models with /model or connect later.`].join(`
7
- `),`Skipped`)}await warnIfModelConfigLooksOff(nextConfig,prompter)}let alreadyHasLocalBrain=nextConfig.models?.providers?.[`builderforcellm-local`]?.api===`transformers`;if(!opts.skipProviders&&(configHandlingAction!==`keep`||!alreadyHasLocalBrain))if(await prompter.select({message:`Enable local brain (amygdala + hippocampus)?`,options:[{value:`smart`,label:`Enable dual local brain`,hint:`Downloads amygdala (SmolLM2) + hippocampus (Qwen3-0.6B). ~3.5 GB disk.`},{value:`skip`,label:`Skip — use my cortex (configured LLM) only`,hint:`No extra download. Uses whatever model you configured above.`}],initialValue:`skip`})===`smart`){nextConfig={...nextConfig,localBrain:{enabled:!0}};let{downloadAndWireLocalBrain}=await import(`./auth-choice.apply.transformers-CXywS3GZ.js`);nextConfig={...(await downloadAndWireLocalBrain({config:nextConfig,prompter})).config}}else nextConfig={...nextConfig,localBrain:{enabled:!1}};let settings;if(keepExistingValues&&quickstartGateway.hasExisting)settings={port:quickstartGateway.port,bind:quickstartGateway.bind,customBindHost:quickstartGateway.bind===`custom`?quickstartGateway.customBindHost:void 0,authMode:quickstartGateway.authMode,gatewayToken:quickstartGateway.authMode===`token`?quickstartGateway.token:void 0,tailscaleMode:quickstartGateway.tailscaleMode,tailscaleResetOnExit:quickstartGateway.tailscaleResetOnExit},await prompter.note(`Keeping existing gateway settings.`,`Gateway`);else{let{configureGatewayForOnboarding}=await import(`./onboarding.gateway-config-Cd7_bXVs.js`),gateway=await configureGatewayForOnboarding({flow,baseConfig,nextConfig,localPort,quickstartGateway,prompter,runtime});nextConfig=gateway.nextConfig,settings=gateway.settings}let skipChannelsForKeep=keepExistingValues&&hasConfiguredChannels(nextConfig);if(opts.skipChannels??opts.skipProviders??skipChannelsForKeep)await prompter.note(`Skipping channel setup.`,`Channels`);else{let{listChannelPlugins}=await import(`./plugins-BIG8NDB9.js`),{setupChannels}=await import(`./onboard-channels-Db0P4iWl.js`),quickstartAllowFromChannels=flow===`quickstart`?listChannelPlugins().filter(plugin=>plugin.meta.quickstartAllowFrom).map(plugin=>plugin.id):[];nextConfig=await setupChannels(nextConfig,runtime,prompter,{allowSignalInstall:!0,forceAllowFromChannels:quickstartAllowFromChannels,skipDmPolicyPrompt:flow===`quickstart`,skipConfirm:flow===`quickstart`,quickstartDefaults:flow===`quickstart`})}await writeConfigFile(nextConfig);let{logConfigUpdated}=await import(`./logging-DSIJukIo.js`);logConfigUpdated(runtime),await onboardHelpers.ensureWorkspaceAndSessions(workspaceDir,runtime,{skipBootstrap:!!nextConfig.agents?.defaults?.skipBootstrap});let{isBuilderForceAgentsProject,initializeBuilderForceAgentsProject}=await import(`./project-context-DXVJ6Qot.js`);if(await isBuilderForceAgentsProject(workspaceDir)||(await initializeBuilderForceAgentsProject(workspaceDir),runtime.log(`Initialised .builderforce/ project directory`)),opts.skipSkills)await prompter.note(`Skipping skills setup.`,`Skills`);else{let{setupSkills}=await import(`./onboard-skills-ILHIeg1R.js`);nextConfig=await setupSkills(nextConfig,workspaceDir,runtime,prompter)}let{setupInternalHooks}=await import(`./onboard-hooks-Cenav0eW.js`);nextConfig=await setupInternalHooks(nextConfig,runtime,prompter),nextConfig=onboardHelpers.applyWizardMetadata(nextConfig,{command:`onboard`,mode}),await writeConfigFile(nextConfig);let{finalizeOnboardingWizard}=await import(`./onboarding.finalize-BfWXPgX7.js`),{launchedTui}=await finalizeOnboardingWizard({flow,opts,baseConfig,nextConfig,workspaceDir,settings,prompter,runtime})}export{runOnboardingWizard as t};
5
+ `),`QuickStart`)}let localPort=resolveGatewayPort(baseConfig),localUrl=`ws://127.0.0.1:${localPort}`,localProbe=await onboardHelpers.probeGatewayReachable({url:localUrl,token:baseConfig.gateway?.auth?.token??process.env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN,password:baseConfig.gateway?.auth?.password??process.env.BUILDERFORCE_AGENTS_GATEWAY_PASSWORD}),remoteUrl=baseConfig.gateway?.remote?.url?.trim()??``,remoteProbe=remoteUrl?await onboardHelpers.probeGatewayReachable({url:remoteUrl,token:baseConfig.gateway?.remote?.token}):null,mode=opts.mode??(flow===`quickstart`?`local`:await prompter.select({message:`What do you want to set up?`,options:[{value:`local`,label:`Local gateway (this machine)`,hint:localProbe.ok?`Gateway reachable (${localUrl})`:`No gateway detected (${localUrl})`},{value:`remote`,label:`Remote gateway (info-only)`,hint:remoteUrl?remoteProbe?.ok?`Gateway reachable (${remoteUrl})`:`Configured but unreachable (${remoteUrl})`:`No remote URL configured yet`}]}));if(mode===`remote`){let{promptRemoteGatewayConfig}=await import(`./onboard-remote-DKXHDdBD.js`),{logConfigUpdated}=await import(`./logging-DSIJukIo.js`),nextConfig=await promptRemoteGatewayConfig(baseConfig,prompter);nextConfig=onboardHelpers.applyWizardMetadata(nextConfig,{command:`onboard`,mode}),await writeConfigFile(nextConfig),logConfigUpdated(runtime),await prompter.outro(`Remote gateway configured.`);return}let existingWorkspace=baseConfig.agents?.defaults?.workspace??onboardHelpers.DEFAULT_WORKSPACE,workspaceDir=resolveUserPath((opts.workspace??(flow===`quickstart`||keepExistingValues?existingWorkspace:await prompter.text({message:`Workspace directory`,initialValue:existingWorkspace}))).trim()||onboardHelpers.DEFAULT_WORKSPACE),{applyOnboardingLocalWorkspaceConfig}=await import(`./onboard-config-C-P0yFzv.js`),nextConfig=applyOnboardingLocalWorkspaceConfig(baseConfig,workspaceDir),{promptAuthChoiceGrouped}=await import(`./auth-choice-prompt-BotfCVbL.js`),{promptCustomApiConfig}=await import(`./onboard-custom-BN0uzSq_.js`),{applyAuthChoice,resolvePreferredProviderForAuthChoice,warnIfModelConfigLooksOff}=await import(`./auth-choice-DSnpkrMc.js`),{applyPrimaryModel,promptDefaultModel}=await import(`./model-picker-CGEF8yhc.js`);if(keepExistingValues&&hasConfiguredModelOrAuth(nextConfig))await prompter.note(`Keeping existing model/auth configuration.`,`Model/auth provider`);else{let authStore=await ensureAuthProfileStore(void 0,{allowKeychainPrompt:!1}),authChoiceFromPrompt=opts.authChoice===void 0,authChoice=opts.authChoice??await promptAuthChoiceGrouped({prompter,store:authStore,includeSkip:!0});if(nextConfig=authChoice===`custom-api-key`?(await promptCustomApiConfig({prompter,runtime,config:nextConfig})).config:(await applyAuthChoice({authChoice,config:nextConfig,prompter,runtime,setDefaultModel:!0,opts:{tokenProvider:opts.tokenProvider,token:opts.authChoice===`apiKey`&&opts.token?opts.token:void 0}})).config,authChoiceFromPrompt&&authChoice!==`custom-api-key`&&authChoice!==`local`&&authChoice!==`builderforcellm`){let modelSelection=await promptDefaultModel({config:nextConfig,prompter,allowKeep:!0,ignoreAllowlist:!0,includeVllm:!0,preferredProvider:resolvePreferredProviderForAuthChoice(authChoice)});modelSelection.config&&(nextConfig=modelSelection.config),modelSelection.model&&(nextConfig=applyPrimaryModel(nextConfig,modelSelection.model))}let primaryModel=typeof nextConfig.agents?.defaults?.model?.primary==`string`?nextConfig.agents.defaults.model.primary.trim().toLowerCase():``;if((primaryModel===`builderforcellm`||primaryModel.startsWith(`builderforcellm/`))&&!(process.env.BUILDERFORCE_API_KEY?.trim()??readSharedEnvVar(`BUILDERFORCE_API_KEY`)?.trim())){await prompter.note([`BuilderForceAgentsLLM requires Builderforce registration.`,`Complete login/registration now so /model builderforcellm/auto works immediately.`,`You can skip this and connect later — use /setup or: builderforce init --reconnect`].join(`
6
+ `),`BuilderForceAgentsLLM`);let{promptBuilderforceOnboarding}=await import(`./builderforce-onboarding-RXFb0gct.js`);await promptBuilderforceOnboarding({projectRoot:workspaceDir,defaultInstanceName:path.basename(workspaceDir)||`builderforce`,forcePrompt:!0}),(process.env.BUILDERFORCE_API_KEY?.trim()??readSharedEnvVar(`BUILDERFORCE_API_KEY`)?.trim())||await prompter.note([`BuilderForceAgentsLLM won't work until you connect to Builderforce.`,`You can still use BuilderForceAgents — switch models with /model or connect later.`].join(`
7
+ `),`Skipped`)}await warnIfModelConfigLooksOff(nextConfig,prompter)}let alreadyHasLocalBrain=nextConfig.models?.providers?.[`builderforcellm-local`]?.api===`transformers`;if(!opts.skipProviders&&(configHandlingAction!==`keep`||!alreadyHasLocalBrain))if(await prompter.select({message:`Enable local brain (amygdala + hippocampus)?`,options:[{value:`smart`,label:`Enable dual local brain`,hint:`Downloads amygdala (SmolLM2) + hippocampus (Qwen3-0.6B). ~3.5 GB disk.`},{value:`skip`,label:`Skip — use my cortex (configured LLM) only`,hint:`No extra download. Uses whatever model you configured above.`}],initialValue:`skip`})===`smart`){nextConfig={...nextConfig,localBrain:{enabled:!0}};let{downloadAndWireLocalBrain}=await import(`./auth-choice.apply.transformers-CZDuBaOr.js`);nextConfig={...(await downloadAndWireLocalBrain({config:nextConfig,prompter})).config}}else nextConfig={...nextConfig,localBrain:{enabled:!1}};let settings;if(keepExistingValues&&quickstartGateway.hasExisting)settings={port:quickstartGateway.port,bind:quickstartGateway.bind,customBindHost:quickstartGateway.bind===`custom`?quickstartGateway.customBindHost:void 0,authMode:quickstartGateway.authMode,gatewayToken:quickstartGateway.authMode===`token`?quickstartGateway.token:void 0,tailscaleMode:quickstartGateway.tailscaleMode,tailscaleResetOnExit:quickstartGateway.tailscaleResetOnExit},await prompter.note(`Keeping existing gateway settings.`,`Gateway`);else{let{configureGatewayForOnboarding}=await import(`./onboarding.gateway-config-Kn1O-QFl.js`),gateway=await configureGatewayForOnboarding({flow,baseConfig,nextConfig,localPort,quickstartGateway,prompter,runtime});nextConfig=gateway.nextConfig,settings=gateway.settings}let skipChannelsForKeep=keepExistingValues&&hasConfiguredChannels(nextConfig);if(opts.skipChannels??opts.skipProviders??skipChannelsForKeep)await prompter.note(`Skipping channel setup.`,`Channels`);else{let{listChannelPlugins}=await import(`./plugins-Cx29kkDj.js`),{setupChannels}=await import(`./onboard-channels-B91m5S3w.js`),quickstartAllowFromChannels=flow===`quickstart`?listChannelPlugins().filter(plugin=>plugin.meta.quickstartAllowFrom).map(plugin=>plugin.id):[];nextConfig=await setupChannels(nextConfig,runtime,prompter,{allowSignalInstall:!0,forceAllowFromChannels:quickstartAllowFromChannels,skipDmPolicyPrompt:flow===`quickstart`,skipConfirm:flow===`quickstart`,quickstartDefaults:flow===`quickstart`})}await writeConfigFile(nextConfig);let{logConfigUpdated}=await import(`./logging-DSIJukIo.js`);logConfigUpdated(runtime),await onboardHelpers.ensureWorkspaceAndSessions(workspaceDir,runtime,{skipBootstrap:!!nextConfig.agents?.defaults?.skipBootstrap});let{isBuilderForceAgentsProject,initializeBuilderForceAgentsProject}=await import(`./project-context-DXVJ6Qot.js`);if(await isBuilderForceAgentsProject(workspaceDir)||(await initializeBuilderForceAgentsProject(workspaceDir),runtime.log(`Initialised .builderforce/ project directory`)),opts.skipSkills)await prompter.note(`Skipping skills setup.`,`Skills`);else{let{setupSkills}=await import(`./onboard-skills-47upVdA2.js`);nextConfig=await setupSkills(nextConfig,workspaceDir,runtime,prompter)}let{setupInternalHooks}=await import(`./onboard-hooks-BaOSgxs9.js`);nextConfig=await setupInternalHooks(nextConfig,runtime,prompter),nextConfig=onboardHelpers.applyWizardMetadata(nextConfig,{command:`onboard`,mode}),await writeConfigFile(nextConfig);let{finalizeOnboardingWizard}=await import(`./onboarding.finalize-yMK-g7Uy.js`),{launchedTui}=await finalizeOnboardingWizard({flow,opts,baseConfig,nextConfig,workspaceDir,settings,prompter,runtime})}export{runOnboardingWizard as t};
@@ -1,4 +1,4 @@
1
- import"./paths-5FcIFMsj.js";import{G as getResolvedLoggerSettings,b as resolveUserPath,g as pathExists}from"./utils-DbaBVFaK.js";import"./embedded-helpers-CEsr3aQ0.js";import"./reply-Cd3vVnD7.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import{t as restoreTerminalState}from"./restore-gPan2ZAn.js";import{i as logWarn}from"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import{A as resolveWorkspaceFilePath,h as DEFAULT_BOOTSTRAP_FILENAME}from"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-9bRFKBI_.js";import{r as resolveCliName,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"./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"./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-DerUBvXW.js";import"./send-DyF1Xy9K.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-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"./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"./links-BgWWaaOT.js";import"./cli-utils-LBYKdNFb.js";import"./help-format-Qfk2vDNX.js";import"./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{b as waitForGatewayReachable,d as openUrl,g as resolveControlUiLinks,i as detectBrowserOpenSupport,o as formatControlUiSshHint,p as probeGatewayReachable}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"./runtime-guard-DhksRHci.js";import"./program-context-BCwL3wlM.js";import"./note-B6NtFdXt.js";import"./helpers-DTDCy17p.js";import{n as installCompletion}from"./completion-cli-B2qcVd6q.js";import{a as gatewayInstallErrorHint,i as buildGatewayInstallPlan,n as GATEWAY_DAEMON_RUNTIME_OPTIONS,t as DEFAULT_GATEWAY_DAEMON_RUNTIME}from"./daemon-runtime-CtOr1ncS.js";import{r as isSystemdUserServiceAvailable}from"./systemd-BG3_QT6W.js";import{t as resolveGatewayService}from"./service-D-NLDyK3.js";import{r as healthCommand}from"./health-yS3NRKvY.js";import{t as ensureControlUiAssetsBuilt}from"./control-ui-assets-CWgH1Tda.js";import"./builderforce-directory-sync-DAH62b3b.js";import"./shared-BPN3qd7G.js";import"./model-picker-BUePD7Zg.js";import"./auth-choice.apply.transformers-CIn3fs7K.js";import{t as formatHealthCheckFailure}from"./health-format-iE_KYEwP.js";import{r as ensureCompletionCacheExists,t as checkShellCompletionStatus}from"./doctor-completion-DVxbs-74.js";import{t as runTui}from"./tui-DylWbrDx.js";import"./tui-stream-assembler-ign_cPkv.js";import os from"node:os";import path from"node:path";import fs from"node:fs/promises";async function resolveProfileHint(shell){let home=process.env.HOME||os.homedir();return shell===`zsh`?`~/.zshrc`:shell===`bash`?await pathExists(path.join(home,`.bashrc`))?`~/.bashrc`:`~/.bash_profile`:shell===`fish`?`~/.config/fish/config.fish`:`$PROFILE`}function formatReloadHint(shell,profileHint){return shell===`powershell`?`Restart your shell (or reload your PowerShell profile).`:`Restart your shell or run: source ${profileHint}`}async function setupOnboardingShellCompletion(params){let deps={resolveCliName,checkShellCompletionStatus,ensureCompletionCacheExists,installCompletion,...params.deps},cliName=deps.resolveCliName(),completionStatus=await deps.checkShellCompletionStatus(cliName);if(completionStatus.usesSlowPattern){await deps.ensureCompletionCacheExists(cliName)&&await deps.installCompletion(completionStatus.shell,!0,cliName);return}if(completionStatus.profileInstalled&&!completionStatus.cacheExists){await deps.ensureCompletionCacheExists(cliName);return}if(!completionStatus.profileInstalled){if(!(params.flow===`quickstart`||await params.prompter.confirm({message:`Enable ${completionStatus.shell} shell completion for ${cliName}?`,initialValue:!0})))return;if(!await deps.ensureCompletionCacheExists(cliName)){await params.prompter.note(`Failed to generate completion cache. Run \`${cliName} completion --install\` later.`,`Shell completion`);return}await deps.installCompletion(completionStatus.shell,!0,cliName);let profileHint=await resolveProfileHint(completionStatus.shell);await params.prompter.note(`Shell completion installed. ${formatReloadHint(completionStatus.shell,profileHint)}`,`Shell completion`)}}async function finalizeOnboardingWizard(options){let{flow,opts,baseConfig,nextConfig,settings,prompter,runtime}=options,withWizardProgress=async(label,options,work)=>{let progress=prompter.progress(label);try{return await work(progress)}finally{progress.stop(options.doneMessage)}},systemdAvailable=process.platform===`linux`?await isSystemdUserServiceAvailable():!0;if(process.platform===`linux`&&!systemdAvailable&&await prompter.note(`Systemd user services are unavailable. Skipping lingering checks and service install.`,`Systemd`),process.platform===`linux`&&systemdAvailable){let{ensureSystemdUserLingerInteractive}=await import(`./systemd-linger-Defy1T1U.js`);await ensureSystemdUserLingerInteractive({runtime,prompter:{confirm:prompter.confirm,note:prompter.note},reason:`Linux installs use a systemd user service by default. Without lingering, systemd stops the user session on logout/idle and kills the Gateway.`,requireConfirm:!1})}let explicitInstallDaemon=typeof opts.installDaemon==`boolean`?opts.installDaemon:void 0,installDaemon;if(installDaemon=explicitInstallDaemon===void 0?process.platform===`linux`&&!systemdAvailable?!1:flow===`quickstart`?!0:await prompter.confirm({message:`Install Gateway service (recommended)`,initialValue:!0}):explicitInstallDaemon,process.platform===`linux`&&!systemdAvailable&&installDaemon&&(await prompter.note("Systemd user services are unavailable; skipping service install. Use your container supervisor or `docker compose up -d`.",`Gateway service`),installDaemon=!1),installDaemon){let daemonRuntime=flow===`quickstart`?DEFAULT_GATEWAY_DAEMON_RUNTIME:await prompter.select({message:`Gateway service runtime`,options:GATEWAY_DAEMON_RUNTIME_OPTIONS,initialValue:opts.daemonRuntime??DEFAULT_GATEWAY_DAEMON_RUNTIME});flow===`quickstart`&&await prompter.note(`QuickStart uses Node for the Gateway service (stable + supported).`,`Gateway service runtime`);let service=resolveGatewayService(),loaded=await service.isLoaded({env:process.env});if(loaded){let action=await prompter.select({message:`Gateway service already installed`,options:[{value:`restart`,label:`Restart`},{value:`reinstall`,label:`Reinstall`},{value:`skip`,label:`Skip`}]});action===`restart`?await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service restarted.`},async progress=>{progress.update(`Restarting Gateway service…`),await service.restart({env:process.env,stdout:process.stdout})}):action===`reinstall`&&await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service uninstalled.`},async progress=>{progress.update(`Uninstalling Gateway service…`),await service.uninstall({env:process.env,stdout:process.stdout})})}if(!loaded||loaded&&!await service.isLoaded({env:process.env})){let progress=prompter.progress(`Gateway service`),installError=null;try{progress.update(`Preparing Gateway service…`);let{programArguments,workingDirectory,environment}=await buildGatewayInstallPlan({env:process.env,port:settings.port,token:settings.gatewayToken,runtime:daemonRuntime,warn:(message,title)=>prompter.note(message,title),config:nextConfig});progress.update(`Installing Gateway service…`),await service.install({env:process.env,stdout:process.stdout,programArguments,workingDirectory,environment})}catch(err){installError=err instanceof Error?err.message:String(err)}finally{progress.stop(installError?`Gateway service install failed.`:`Gateway service installed.`)}installError&&(await prompter.note(`Gateway service install failed: ${installError}`,`Gateway`),await prompter.note(gatewayInstallErrorHint(),`Gateway`))}}if(!opts.skipHealth){await waitForGatewayReachable({url:resolveControlUiLinks({bind:nextConfig.gateway?.bind??`loopback`,port:settings.port,customBindHost:nextConfig.gateway?.customBindHost,basePath:void 0}).wsUrl,token:settings.gatewayToken,deadlineMs:15e3});try{await healthCommand({json:!1,timeoutMs:1e4},runtime)}catch(err){let msg=formatHealthCheckFailure(err);runtime.error(msg),logWarn(`[onboarding] health check failed: ${String(err)}`);let logFile=getResolvedLoggerSettings().file;await prompter.note([`Logs:`,logFile,`View: ${formatCliCommand(`builderforce logs --follow`)}`,``,`Docs:`,`https://docs.builderforce.ai/gateway/health`,`https://docs.builderforce.ai/gateway/troubleshooting`].join(`
1
+ import"./paths-5FcIFMsj.js";import{G as getResolvedLoggerSettings,b as resolveUserPath,g as pathExists}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"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import{t as restoreTerminalState}from"./restore-gPan2ZAn.js";import{i as logWarn}from"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import{A as resolveWorkspaceFilePath,h as DEFAULT_BOOTSTRAP_FILENAME}from"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-DG9J_VTz.js";import{r as resolveCliName,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"./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"./links-BgWWaaOT.js";import"./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{b as waitForGatewayReachable,d as openUrl,g as resolveControlUiLinks,i as detectBrowserOpenSupport,o as formatControlUiSshHint,p as probeGatewayReachable}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"./runtime-guard-DhksRHci.js";import"./program-context-ClBa4lUj.js";import"./note-B6NtFdXt.js";import"./helpers-DTDCy17p.js";import{n as installCompletion}from"./completion-cli-gyvx5ZXu.js";import{a as gatewayInstallErrorHint,i as buildGatewayInstallPlan,n as GATEWAY_DAEMON_RUNTIME_OPTIONS,t as DEFAULT_GATEWAY_DAEMON_RUNTIME}from"./daemon-runtime-9XitJmIL.js";import{r as isSystemdUserServiceAvailable}from"./systemd-BG3_QT6W.js";import{t as resolveGatewayService}from"./service-D-NLDyK3.js";import{r as healthCommand}from"./health-FO8MG5Ur.js";import{t as ensureControlUiAssetsBuilt}from"./control-ui-assets-CWgH1Tda.js";import"./builderforce-directory-sync-DAH62b3b.js";import"./shared-C2orjbTD.js";import"./model-picker-EIhpfOZa.js";import"./auth-choice.apply.transformers-Df9l_jRz.js";import{t as formatHealthCheckFailure}from"./health-format-iE_KYEwP.js";import{r as ensureCompletionCacheExists,t as checkShellCompletionStatus}from"./doctor-completion-CbF34DIH.js";import{t as runTui}from"./tui-DnVRxfI8.js";import"./tui-stream-assembler-8ud9oyMK.js";import os from"node:os";import path from"node:path";import fs from"node:fs/promises";async function resolveProfileHint(shell){let home=process.env.HOME||os.homedir();return shell===`zsh`?`~/.zshrc`:shell===`bash`?await pathExists(path.join(home,`.bashrc`))?`~/.bashrc`:`~/.bash_profile`:shell===`fish`?`~/.config/fish/config.fish`:`$PROFILE`}function formatReloadHint(shell,profileHint){return shell===`powershell`?`Restart your shell (or reload your PowerShell profile).`:`Restart your shell or run: source ${profileHint}`}async function setupOnboardingShellCompletion(params){let deps={resolveCliName,checkShellCompletionStatus,ensureCompletionCacheExists,installCompletion,...params.deps},cliName=deps.resolveCliName(),completionStatus=await deps.checkShellCompletionStatus(cliName);if(completionStatus.usesSlowPattern){await deps.ensureCompletionCacheExists(cliName)&&await deps.installCompletion(completionStatus.shell,!0,cliName);return}if(completionStatus.profileInstalled&&!completionStatus.cacheExists){await deps.ensureCompletionCacheExists(cliName);return}if(!completionStatus.profileInstalled){if(!(params.flow===`quickstart`||await params.prompter.confirm({message:`Enable ${completionStatus.shell} shell completion for ${cliName}?`,initialValue:!0})))return;if(!await deps.ensureCompletionCacheExists(cliName)){await params.prompter.note(`Failed to generate completion cache. Run \`${cliName} completion --install\` later.`,`Shell completion`);return}await deps.installCompletion(completionStatus.shell,!0,cliName);let profileHint=await resolveProfileHint(completionStatus.shell);await params.prompter.note(`Shell completion installed. ${formatReloadHint(completionStatus.shell,profileHint)}`,`Shell completion`)}}async function finalizeOnboardingWizard(options){let{flow,opts,baseConfig,nextConfig,settings,prompter,runtime}=options,withWizardProgress=async(label,options,work)=>{let progress=prompter.progress(label);try{return await work(progress)}finally{progress.stop(options.doneMessage)}},systemdAvailable=process.platform===`linux`?await isSystemdUserServiceAvailable():!0;if(process.platform===`linux`&&!systemdAvailable&&await prompter.note(`Systemd user services are unavailable. Skipping lingering checks and service install.`,`Systemd`),process.platform===`linux`&&systemdAvailable){let{ensureSystemdUserLingerInteractive}=await import(`./systemd-linger-Defy1T1U.js`);await ensureSystemdUserLingerInteractive({runtime,prompter:{confirm:prompter.confirm,note:prompter.note},reason:`Linux installs use a systemd user service by default. Without lingering, systemd stops the user session on logout/idle and kills the Gateway.`,requireConfirm:!1})}let explicitInstallDaemon=typeof opts.installDaemon==`boolean`?opts.installDaemon:void 0,installDaemon;if(installDaemon=explicitInstallDaemon===void 0?process.platform===`linux`&&!systemdAvailable?!1:flow===`quickstart`?!0:await prompter.confirm({message:`Install Gateway service (recommended)`,initialValue:!0}):explicitInstallDaemon,process.platform===`linux`&&!systemdAvailable&&installDaemon&&(await prompter.note("Systemd user services are unavailable; skipping service install. Use your container supervisor or `docker compose up -d`.",`Gateway service`),installDaemon=!1),installDaemon){let daemonRuntime=flow===`quickstart`?DEFAULT_GATEWAY_DAEMON_RUNTIME:await prompter.select({message:`Gateway service runtime`,options:GATEWAY_DAEMON_RUNTIME_OPTIONS,initialValue:opts.daemonRuntime??DEFAULT_GATEWAY_DAEMON_RUNTIME});flow===`quickstart`&&await prompter.note(`QuickStart uses Node for the Gateway service (stable + supported).`,`Gateway service runtime`);let service=resolveGatewayService(),loaded=await service.isLoaded({env:process.env});if(loaded){let action=await prompter.select({message:`Gateway service already installed`,options:[{value:`restart`,label:`Restart`},{value:`reinstall`,label:`Reinstall`},{value:`skip`,label:`Skip`}]});action===`restart`?await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service restarted.`},async progress=>{progress.update(`Restarting Gateway service…`),await service.restart({env:process.env,stdout:process.stdout})}):action===`reinstall`&&await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service uninstalled.`},async progress=>{progress.update(`Uninstalling Gateway service…`),await service.uninstall({env:process.env,stdout:process.stdout})})}if(!loaded||loaded&&!await service.isLoaded({env:process.env})){let progress=prompter.progress(`Gateway service`),installError=null;try{progress.update(`Preparing Gateway service…`);let{programArguments,workingDirectory,environment}=await buildGatewayInstallPlan({env:process.env,port:settings.port,token:settings.gatewayToken,runtime:daemonRuntime,warn:(message,title)=>prompter.note(message,title),config:nextConfig});progress.update(`Installing Gateway service…`),await service.install({env:process.env,stdout:process.stdout,programArguments,workingDirectory,environment})}catch(err){installError=err instanceof Error?err.message:String(err)}finally{progress.stop(installError?`Gateway service install failed.`:`Gateway service installed.`)}installError&&(await prompter.note(`Gateway service install failed: ${installError}`,`Gateway`),await prompter.note(gatewayInstallErrorHint(),`Gateway`))}}if(!opts.skipHealth){await waitForGatewayReachable({url:resolveControlUiLinks({bind:nextConfig.gateway?.bind??`loopback`,port:settings.port,customBindHost:nextConfig.gateway?.customBindHost,basePath:void 0}).wsUrl,token:settings.gatewayToken,deadlineMs:15e3});try{await healthCommand({json:!1,timeoutMs:1e4},runtime)}catch(err){let msg=formatHealthCheckFailure(err);runtime.error(msg),logWarn(`[onboarding] health check failed: ${String(err)}`);let logFile=getResolvedLoggerSettings().file;await prompter.note([`Logs:`,logFile,`View: ${formatCliCommand(`builderforce logs --follow`)}`,``,`Docs:`,`https://docs.builderforce.ai/gateway/health`,`https://docs.builderforce.ai/gateway/troubleshooting`].join(`
2
2
  `),`Health check help`)}}let controlUiEnabled=nextConfig.gateway?.controlUi?.enabled??baseConfig.gateway?.controlUi?.enabled??!0;if(!opts.skipUi&&controlUiEnabled){let controlUiAssets=await ensureControlUiAssetsBuilt(runtime);!controlUiAssets.ok&&controlUiAssets.message&&runtime.error(controlUiAssets.message)}await prompter.note([`Add nodes for extra features:`,`- macOS app (system + notifications)`,`- iOS app (camera/canvas)`,`- Android app (camera/canvas)`].join(`
3
3
  `),`Optional apps`);let controlUiBasePath=nextConfig.gateway?.controlUi?.basePath??baseConfig.gateway?.controlUi?.basePath,links=resolveControlUiLinks({bind:settings.bind,port:settings.port,customBindHost:settings.customBindHost,basePath:controlUiBasePath}),authedUrl=settings.authMode===`token`&&settings.gatewayToken?`${links.httpUrl}#token=${encodeURIComponent(settings.gatewayToken)}`:links.httpUrl,gatewayProbe=await probeGatewayReachable({url:links.wsUrl,token:settings.authMode===`token`?settings.gatewayToken:void 0,password:settings.authMode===`password`?nextConfig.gateway?.auth?.password:``}),gatewayStatusLine=gatewayProbe.ok?`Gateway: reachable`:`Gateway: not detected${gatewayProbe.detail?` (${gatewayProbe.detail})`:``}`,bootstrapPath=resolveWorkspaceFilePath(resolveUserPath(options.workspaceDir),DEFAULT_BOOTSTRAP_FILENAME),hasBootstrap=await fs.access(bootstrapPath).then(()=>!0).catch(()=>!1);await prompter.note([`Web UI: ${links.httpUrl}`,settings.authMode===`token`&&settings.gatewayToken?`Web UI (with token): ${authedUrl}`:void 0,`Gateway WS: ${links.wsUrl}`,gatewayStatusLine,`Docs: https://docs.builderforce.ai/web/control-ui`].filter(Boolean).join(`
4
4
  `),`Control UI`);let controlUiOpened=!1,controlUiOpenHint,hatchChoice=null,launchedTui=!1;!opts.skipUi&&gatewayProbe.ok?(hasBootstrap&&await prompter.note([`This is the defining action that makes your agent you.`,`Please take your time.`,`The more you tell it, the better the experience will be.`,`We will send: "Wake up, my friend!"`].join(`
@@ -1,4 +1,4 @@
1
- import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{W as getResolvedLoggerSettings,h as pathExists,y as resolveUserPath}from"./utils-BP60e80M.js";import{t as restoreTerminalState}from"./restore-BdB4wlsZ.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-C1VbcUOm.js";import{r as resolveCliName,t as formatCliCommand}from"./command-format-DTMaGKs7.js";import"./src-DvWaTze9.js";import{i as logWarn}from"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import{A as resolveWorkspaceFilePath,h as DEFAULT_BOOTSTRAP_FILENAME}from"./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"./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"./call-DmAU4cRX.js";import"./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"./links-BKzP7VVP.js";import"./cli-utils-C9pW69LF.js";import"./help-format-CfFf-w62.js";import"./progress-Cqb-jAjT.js";import"./replies-DbkT_5BV.js";import{b as waitForGatewayReachable,d as openUrl,g as resolveControlUiLinks,i as detectBrowserOpenSupport,o as formatControlUiSshHint,p as probeGatewayReachable}from"./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"./note-DgDXuE0F.js";import"./helpers-DPPVplyk.js";import"./register.subclis-Cr9DoYcv.js";import"./command-registry-COUcUWby.js";import"./program-context-Wpc-6CdI.js";import{n as installCompletion}from"./completion-cli-DpFvU4Qn.js";import{a as gatewayInstallErrorHint,i as buildGatewayInstallPlan,n as GATEWAY_DAEMON_RUNTIME_OPTIONS,t as DEFAULT_GATEWAY_DAEMON_RUNTIME}from"./daemon-runtime-B4UjqdyJ.js";import"./runtime-guard-Bi8k55v9.js";import{r as isSystemdUserServiceAvailable}from"./systemd-DdVd5Yet.js";import{t as resolveGatewayService}from"./service-EKJG69M3.js";import{r as healthCommand}from"./health-DVo8a9yg.js";import{t as ensureControlUiAssetsBuilt}from"./control-ui-assets-BxgWcomx.js";import"./builderforce-directory-sync-DQ6u60yX.js";import"./shared-xj-xaKFi.js";import"./model-picker-swoSwauV.js";import"./auth-choice.apply.transformers-1plI0MUg.js";import{t as formatHealthCheckFailure}from"./health-format-D4MaIjaG.js";import{r as ensureCompletionCacheExists,t as checkShellCompletionStatus}from"./doctor-completion-BSotFS6p.js";import{t as runTui}from"./tui-BwWMByVp.js";import"./tui-stream-assembler-q9GANTDr.js";import os from"node:os";import path from"node:path";import fs from"node:fs/promises";async function resolveProfileHint(shell){let home=process.env.HOME||os.homedir();return shell===`zsh`?`~/.zshrc`:shell===`bash`?await pathExists(path.join(home,`.bashrc`))?`~/.bashrc`:`~/.bash_profile`:shell===`fish`?`~/.config/fish/config.fish`:`$PROFILE`}function formatReloadHint(shell,profileHint){return shell===`powershell`?`Restart your shell (or reload your PowerShell profile).`:`Restart your shell or run: source ${profileHint}`}async function setupOnboardingShellCompletion(params){let deps={resolveCliName,checkShellCompletionStatus,ensureCompletionCacheExists,installCompletion,...params.deps},cliName=deps.resolveCliName(),completionStatus=await deps.checkShellCompletionStatus(cliName);if(completionStatus.usesSlowPattern){await deps.ensureCompletionCacheExists(cliName)&&await deps.installCompletion(completionStatus.shell,!0,cliName);return}if(completionStatus.profileInstalled&&!completionStatus.cacheExists){await deps.ensureCompletionCacheExists(cliName);return}if(!completionStatus.profileInstalled){if(!(params.flow===`quickstart`||await params.prompter.confirm({message:`Enable ${completionStatus.shell} shell completion for ${cliName}?`,initialValue:!0})))return;if(!await deps.ensureCompletionCacheExists(cliName)){await params.prompter.note(`Failed to generate completion cache. Run \`${cliName} completion --install\` later.`,`Shell completion`);return}await deps.installCompletion(completionStatus.shell,!0,cliName);let profileHint=await resolveProfileHint(completionStatus.shell);await params.prompter.note(`Shell completion installed. ${formatReloadHint(completionStatus.shell,profileHint)}`,`Shell completion`)}}async function finalizeOnboardingWizard(options){let{flow,opts,baseConfig,nextConfig,settings,prompter,runtime}=options,withWizardProgress=async(label,options,work)=>{let progress=prompter.progress(label);try{return await work(progress)}finally{progress.stop(options.doneMessage)}},systemdAvailable=process.platform===`linux`?await isSystemdUserServiceAvailable():!0;if(process.platform===`linux`&&!systemdAvailable&&await prompter.note(`Systemd user services are unavailable. Skipping lingering checks and service install.`,`Systemd`),process.platform===`linux`&&systemdAvailable){let{ensureSystemdUserLingerInteractive}=await import(`./systemd-linger-Dgxo9kqA.js`);await ensureSystemdUserLingerInteractive({runtime,prompter:{confirm:prompter.confirm,note:prompter.note},reason:`Linux installs use a systemd user service by default. Without lingering, systemd stops the user session on logout/idle and kills the Gateway.`,requireConfirm:!1})}let explicitInstallDaemon=typeof opts.installDaemon==`boolean`?opts.installDaemon:void 0,installDaemon;if(installDaemon=explicitInstallDaemon===void 0?process.platform===`linux`&&!systemdAvailable?!1:flow===`quickstart`?!0:await prompter.confirm({message:`Install Gateway service (recommended)`,initialValue:!0}):explicitInstallDaemon,process.platform===`linux`&&!systemdAvailable&&installDaemon&&(await prompter.note("Systemd user services are unavailable; skipping service install. Use your container supervisor or `docker compose up -d`.",`Gateway service`),installDaemon=!1),installDaemon){let daemonRuntime=flow===`quickstart`?DEFAULT_GATEWAY_DAEMON_RUNTIME:await prompter.select({message:`Gateway service runtime`,options:GATEWAY_DAEMON_RUNTIME_OPTIONS,initialValue:opts.daemonRuntime??DEFAULT_GATEWAY_DAEMON_RUNTIME});flow===`quickstart`&&await prompter.note(`QuickStart uses Node for the Gateway service (stable + supported).`,`Gateway service runtime`);let service=resolveGatewayService(),loaded=await service.isLoaded({env:process.env});if(loaded){let action=await prompter.select({message:`Gateway service already installed`,options:[{value:`restart`,label:`Restart`},{value:`reinstall`,label:`Reinstall`},{value:`skip`,label:`Skip`}]});action===`restart`?await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service restarted.`},async progress=>{progress.update(`Restarting Gateway service…`),await service.restart({env:process.env,stdout:process.stdout})}):action===`reinstall`&&await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service uninstalled.`},async progress=>{progress.update(`Uninstalling Gateway service…`),await service.uninstall({env:process.env,stdout:process.stdout})})}if(!loaded||loaded&&!await service.isLoaded({env:process.env})){let progress=prompter.progress(`Gateway service`),installError=null;try{progress.update(`Preparing Gateway service…`);let{programArguments,workingDirectory,environment}=await buildGatewayInstallPlan({env:process.env,port:settings.port,token:settings.gatewayToken,runtime:daemonRuntime,warn:(message,title)=>prompter.note(message,title),config:nextConfig});progress.update(`Installing Gateway service…`),await service.install({env:process.env,stdout:process.stdout,programArguments,workingDirectory,environment})}catch(err){installError=err instanceof Error?err.message:String(err)}finally{progress.stop(installError?`Gateway service install failed.`:`Gateway service installed.`)}installError&&(await prompter.note(`Gateway service install failed: ${installError}`,`Gateway`),await prompter.note(gatewayInstallErrorHint(),`Gateway`))}}if(!opts.skipHealth){await waitForGatewayReachable({url:resolveControlUiLinks({bind:nextConfig.gateway?.bind??`loopback`,port:settings.port,customBindHost:nextConfig.gateway?.customBindHost,basePath:void 0}).wsUrl,token:settings.gatewayToken,deadlineMs:15e3});try{await healthCommand({json:!1,timeoutMs:1e4},runtime)}catch(err){let msg=formatHealthCheckFailure(err);runtime.error(msg),logWarn(`[onboarding] health check failed: ${String(err)}`);let logFile=getResolvedLoggerSettings().file;await prompter.note([`Logs:`,logFile,`View: ${formatCliCommand(`builderforce logs --follow`)}`,``,`Docs:`,`https://docs.builderforce.ai/gateway/health`,`https://docs.builderforce.ai/gateway/troubleshooting`].join(`
1
+ import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{W as getResolvedLoggerSettings,h as pathExists,y as resolveUserPath}from"./utils-BP60e80M.js";import{t as restoreTerminalState}from"./restore-BdB4wlsZ.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-pt7Tr4HA.js";import{r as resolveCliName,t as formatCliCommand}from"./command-format-DTMaGKs7.js";import"./src-DvWaTze9.js";import{i as logWarn}from"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import{A as resolveWorkspaceFilePath,h as DEFAULT_BOOTSTRAP_FILENAME}from"./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"./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"./links-BKzP7VVP.js";import"./cli-utils-C9pW69LF.js";import"./help-format-CfFf-w62.js";import"./progress-Cqb-jAjT.js";import"./replies-BOGMDhSN.js";import{b as waitForGatewayReachable,d as openUrl,g as resolveControlUiLinks,i as detectBrowserOpenSupport,o as formatControlUiSshHint,p as probeGatewayReachable}from"./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"./note-DgDXuE0F.js";import"./helpers-DPPVplyk.js";import"./register.subclis-pWn9XObB.js";import"./command-registry-B7uAoROP.js";import"./program-context-Wpc-6CdI.js";import{n as installCompletion}from"./completion-cli-n8UsdT91.js";import{a as gatewayInstallErrorHint,i as buildGatewayInstallPlan,n as GATEWAY_DAEMON_RUNTIME_OPTIONS,t as DEFAULT_GATEWAY_DAEMON_RUNTIME}from"./daemon-runtime-Dx800VUt.js";import"./runtime-guard-Bi8k55v9.js";import{r as isSystemdUserServiceAvailable}from"./systemd-DdVd5Yet.js";import{t as resolveGatewayService}from"./service-EKJG69M3.js";import{r as healthCommand}from"./health-zrsgFZmR.js";import{t as ensureControlUiAssetsBuilt}from"./control-ui-assets-BxgWcomx.js";import"./builderforce-directory-sync-DQ6u60yX.js";import"./shared-BBOiNdjf.js";import"./model-picker-CGDNPRPc.js";import"./auth-choice.apply.transformers-DmdxpHGz.js";import{t as formatHealthCheckFailure}from"./health-format-D4MaIjaG.js";import{r as ensureCompletionCacheExists,t as checkShellCompletionStatus}from"./doctor-completion-94zme499.js";import{t as runTui}from"./tui-JfWoLGIV.js";import"./tui-stream-assembler-Br15rhRH.js";import os from"node:os";import path from"node:path";import fs from"node:fs/promises";async function resolveProfileHint(shell){let home=process.env.HOME||os.homedir();return shell===`zsh`?`~/.zshrc`:shell===`bash`?await pathExists(path.join(home,`.bashrc`))?`~/.bashrc`:`~/.bash_profile`:shell===`fish`?`~/.config/fish/config.fish`:`$PROFILE`}function formatReloadHint(shell,profileHint){return shell===`powershell`?`Restart your shell (or reload your PowerShell profile).`:`Restart your shell or run: source ${profileHint}`}async function setupOnboardingShellCompletion(params){let deps={resolveCliName,checkShellCompletionStatus,ensureCompletionCacheExists,installCompletion,...params.deps},cliName=deps.resolveCliName(),completionStatus=await deps.checkShellCompletionStatus(cliName);if(completionStatus.usesSlowPattern){await deps.ensureCompletionCacheExists(cliName)&&await deps.installCompletion(completionStatus.shell,!0,cliName);return}if(completionStatus.profileInstalled&&!completionStatus.cacheExists){await deps.ensureCompletionCacheExists(cliName);return}if(!completionStatus.profileInstalled){if(!(params.flow===`quickstart`||await params.prompter.confirm({message:`Enable ${completionStatus.shell} shell completion for ${cliName}?`,initialValue:!0})))return;if(!await deps.ensureCompletionCacheExists(cliName)){await params.prompter.note(`Failed to generate completion cache. Run \`${cliName} completion --install\` later.`,`Shell completion`);return}await deps.installCompletion(completionStatus.shell,!0,cliName);let profileHint=await resolveProfileHint(completionStatus.shell);await params.prompter.note(`Shell completion installed. ${formatReloadHint(completionStatus.shell,profileHint)}`,`Shell completion`)}}async function finalizeOnboardingWizard(options){let{flow,opts,baseConfig,nextConfig,settings,prompter,runtime}=options,withWizardProgress=async(label,options,work)=>{let progress=prompter.progress(label);try{return await work(progress)}finally{progress.stop(options.doneMessage)}},systemdAvailable=process.platform===`linux`?await isSystemdUserServiceAvailable():!0;if(process.platform===`linux`&&!systemdAvailable&&await prompter.note(`Systemd user services are unavailable. Skipping lingering checks and service install.`,`Systemd`),process.platform===`linux`&&systemdAvailable){let{ensureSystemdUserLingerInteractive}=await import(`./systemd-linger-Dgxo9kqA.js`);await ensureSystemdUserLingerInteractive({runtime,prompter:{confirm:prompter.confirm,note:prompter.note},reason:`Linux installs use a systemd user service by default. Without lingering, systemd stops the user session on logout/idle and kills the Gateway.`,requireConfirm:!1})}let explicitInstallDaemon=typeof opts.installDaemon==`boolean`?opts.installDaemon:void 0,installDaemon;if(installDaemon=explicitInstallDaemon===void 0?process.platform===`linux`&&!systemdAvailable?!1:flow===`quickstart`?!0:await prompter.confirm({message:`Install Gateway service (recommended)`,initialValue:!0}):explicitInstallDaemon,process.platform===`linux`&&!systemdAvailable&&installDaemon&&(await prompter.note("Systemd user services are unavailable; skipping service install. Use your container supervisor or `docker compose up -d`.",`Gateway service`),installDaemon=!1),installDaemon){let daemonRuntime=flow===`quickstart`?DEFAULT_GATEWAY_DAEMON_RUNTIME:await prompter.select({message:`Gateway service runtime`,options:GATEWAY_DAEMON_RUNTIME_OPTIONS,initialValue:opts.daemonRuntime??DEFAULT_GATEWAY_DAEMON_RUNTIME});flow===`quickstart`&&await prompter.note(`QuickStart uses Node for the Gateway service (stable + supported).`,`Gateway service runtime`);let service=resolveGatewayService(),loaded=await service.isLoaded({env:process.env});if(loaded){let action=await prompter.select({message:`Gateway service already installed`,options:[{value:`restart`,label:`Restart`},{value:`reinstall`,label:`Reinstall`},{value:`skip`,label:`Skip`}]});action===`restart`?await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service restarted.`},async progress=>{progress.update(`Restarting Gateway service…`),await service.restart({env:process.env,stdout:process.stdout})}):action===`reinstall`&&await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service uninstalled.`},async progress=>{progress.update(`Uninstalling Gateway service…`),await service.uninstall({env:process.env,stdout:process.stdout})})}if(!loaded||loaded&&!await service.isLoaded({env:process.env})){let progress=prompter.progress(`Gateway service`),installError=null;try{progress.update(`Preparing Gateway service…`);let{programArguments,workingDirectory,environment}=await buildGatewayInstallPlan({env:process.env,port:settings.port,token:settings.gatewayToken,runtime:daemonRuntime,warn:(message,title)=>prompter.note(message,title),config:nextConfig});progress.update(`Installing Gateway service…`),await service.install({env:process.env,stdout:process.stdout,programArguments,workingDirectory,environment})}catch(err){installError=err instanceof Error?err.message:String(err)}finally{progress.stop(installError?`Gateway service install failed.`:`Gateway service installed.`)}installError&&(await prompter.note(`Gateway service install failed: ${installError}`,`Gateway`),await prompter.note(gatewayInstallErrorHint(),`Gateway`))}}if(!opts.skipHealth){await waitForGatewayReachable({url:resolveControlUiLinks({bind:nextConfig.gateway?.bind??`loopback`,port:settings.port,customBindHost:nextConfig.gateway?.customBindHost,basePath:void 0}).wsUrl,token:settings.gatewayToken,deadlineMs:15e3});try{await healthCommand({json:!1,timeoutMs:1e4},runtime)}catch(err){let msg=formatHealthCheckFailure(err);runtime.error(msg),logWarn(`[onboarding] health check failed: ${String(err)}`);let logFile=getResolvedLoggerSettings().file;await prompter.note([`Logs:`,logFile,`View: ${formatCliCommand(`builderforce logs --follow`)}`,``,`Docs:`,`https://docs.builderforce.ai/gateway/health`,`https://docs.builderforce.ai/gateway/troubleshooting`].join(`
2
2
  `),`Health check help`)}}let controlUiEnabled=nextConfig.gateway?.controlUi?.enabled??baseConfig.gateway?.controlUi?.enabled??!0;if(!opts.skipUi&&controlUiEnabled){let controlUiAssets=await ensureControlUiAssetsBuilt(runtime);!controlUiAssets.ok&&controlUiAssets.message&&runtime.error(controlUiAssets.message)}await prompter.note([`Add nodes for extra features:`,`- macOS app (system + notifications)`,`- iOS app (camera/canvas)`,`- Android app (camera/canvas)`].join(`
3
3
  `),`Optional apps`);let controlUiBasePath=nextConfig.gateway?.controlUi?.basePath??baseConfig.gateway?.controlUi?.basePath,links=resolveControlUiLinks({bind:settings.bind,port:settings.port,customBindHost:settings.customBindHost,basePath:controlUiBasePath}),authedUrl=settings.authMode===`token`&&settings.gatewayToken?`${links.httpUrl}#token=${encodeURIComponent(settings.gatewayToken)}`:links.httpUrl,gatewayProbe=await probeGatewayReachable({url:links.wsUrl,token:settings.authMode===`token`?settings.gatewayToken:void 0,password:settings.authMode===`password`?nextConfig.gateway?.auth?.password:``}),gatewayStatusLine=gatewayProbe.ok?`Gateway: reachable`:`Gateway: not detected${gatewayProbe.detail?` (${gatewayProbe.detail})`:``}`,bootstrapPath=resolveWorkspaceFilePath(resolveUserPath(options.workspaceDir),DEFAULT_BOOTSTRAP_FILENAME),hasBootstrap=await fs.access(bootstrapPath).then(()=>!0).catch(()=>!1);await prompter.note([`Web UI: ${links.httpUrl}`,settings.authMode===`token`&&settings.gatewayToken?`Web UI (with token): ${authedUrl}`:void 0,`Gateway WS: ${links.wsUrl}`,gatewayStatusLine,`Docs: https://docs.builderforce.ai/web/control-ui`].filter(Boolean).join(`
4
4
  `),`Control UI`);let controlUiOpened=!1,controlUiOpenHint,hatchChoice=null,launchedTui=!1;!opts.skipUi&&gatewayProbe.ok?(hasBootstrap&&await prompter.note([`This is the defining action that makes your agent you.`,`Please take your time.`,`The more you tell it, the better the experience will be.`,`We will send: "Wake up, my friend!"`].join(`
@@ -1,3 +1,3 @@
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"./client-CGgp3zkQ.js";import"./call-DmAU4cRX.js";import"./message-channel-z5YRpR2d.js";import"./sessions-Bl1wwotX.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./accounts-Cx82nj4E.js";import{a as findTailscaleBinary}from"./tailscale-DV-yOmYe.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import{m as randomToken,u as normalizeGatewayTokenInput,y as validateGatewayPasswordInput}from"./onboard-helpers-CckrS8_K.js";import"./prompt-style-BMWmaqSC.js";import{i as TAILSCALE_MISSING_BIN_NOTE_LINES,n as TAILSCALE_DOCS_LINES,r as TAILSCALE_EXPOSURE_OPTIONS,t as validateIPv4AddressInput}from"./ipv4-DEWh6vFc.js";const DEFAULT_DANGEROUS_NODE_DENY_COMMANDS=[`camera.snap`,`camera.clip`,`screen.record`,`calendar.add`,`contacts.add`,`reminders.add`];async function configureGatewayForOnboarding(opts){let{flow,localPort,quickstartGateway,prompter}=opts,{nextConfig}=opts,port=flow===`quickstart`?quickstartGateway.port:Number.parseInt(String(await prompter.text({message:`Gateway port`,initialValue:String(localPort),validate:value=>Number.isFinite(Number(value))?void 0:`Invalid port`})),10),bind=flow===`quickstart`?quickstartGateway.bind:await prompter.select({message:`Gateway bind`,options:[{value:`loopback`,label:`Loopback (127.0.0.1)`},{value:`lan`,label:`LAN (0.0.0.0)`},{value:`tailnet`,label:`Tailnet (Tailscale IP)`},{value:`auto`,label:`Auto (Loopback → LAN)`},{value:`custom`,label:`Custom IP`}]}),customBindHost=quickstartGateway.customBindHost;if(bind===`custom`&&(flow!==`quickstart`||!customBindHost)){let input=await prompter.text({message:`Custom IP address`,placeholder:`192.168.1.100`,initialValue:customBindHost??``,validate:validateIPv4AddressInput});customBindHost=typeof input==`string`?input.trim():void 0}let authMode=flow===`quickstart`?quickstartGateway.authMode:await prompter.select({message:`Gateway auth`,options:[{value:`token`,label:`Token`,hint:`Recommended default (local + remote)`},{value:`password`,label:`Password`}],initialValue:`token`}),tailscaleMode=flow===`quickstart`?quickstartGateway.tailscaleMode:await prompter.select({message:`Tailscale exposure`,options:[...TAILSCALE_EXPOSURE_OPTIONS]});tailscaleMode!==`off`&&(await findTailscaleBinary()||await prompter.note(TAILSCALE_MISSING_BIN_NOTE_LINES.join(`
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"./client-CGgp3zkQ.js";import"./call-Du2LiaX6.js";import"./message-channel-z5YRpR2d.js";import"./sessions-BA8Se_bT.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./accounts-Cx82nj4E.js";import{a as findTailscaleBinary}from"./tailscale-DV-yOmYe.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import{m as randomToken,u as normalizeGatewayTokenInput,y as validateGatewayPasswordInput}from"./onboard-helpers-Ce_c4Raj.js";import"./prompt-style-BMWmaqSC.js";import{i as TAILSCALE_MISSING_BIN_NOTE_LINES,n as TAILSCALE_DOCS_LINES,r as TAILSCALE_EXPOSURE_OPTIONS,t as validateIPv4AddressInput}from"./ipv4-DEWh6vFc.js";const DEFAULT_DANGEROUS_NODE_DENY_COMMANDS=[`camera.snap`,`camera.clip`,`screen.record`,`calendar.add`,`contacts.add`,`reminders.add`];async function configureGatewayForOnboarding(opts){let{flow,localPort,quickstartGateway,prompter}=opts,{nextConfig}=opts,port=flow===`quickstart`?quickstartGateway.port:Number.parseInt(String(await prompter.text({message:`Gateway port`,initialValue:String(localPort),validate:value=>Number.isFinite(Number(value))?void 0:`Invalid port`})),10),bind=flow===`quickstart`?quickstartGateway.bind:await prompter.select({message:`Gateway bind`,options:[{value:`loopback`,label:`Loopback (127.0.0.1)`},{value:`lan`,label:`LAN (0.0.0.0)`},{value:`tailnet`,label:`Tailnet (Tailscale IP)`},{value:`auto`,label:`Auto (Loopback → LAN)`},{value:`custom`,label:`Custom IP`}]}),customBindHost=quickstartGateway.customBindHost;if(bind===`custom`&&(flow!==`quickstart`||!customBindHost)){let input=await prompter.text({message:`Custom IP address`,placeholder:`192.168.1.100`,initialValue:customBindHost??``,validate:validateIPv4AddressInput});customBindHost=typeof input==`string`?input.trim():void 0}let authMode=flow===`quickstart`?quickstartGateway.authMode:await prompter.select({message:`Gateway auth`,options:[{value:`token`,label:`Token`,hint:`Recommended default (local + remote)`},{value:`password`,label:`Password`}],initialValue:`token`}),tailscaleMode=flow===`quickstart`?quickstartGateway.tailscaleMode:await prompter.select({message:`Tailscale exposure`,options:[...TAILSCALE_EXPOSURE_OPTIONS]});tailscaleMode!==`off`&&(await findTailscaleBinary()||await prompter.note(TAILSCALE_MISSING_BIN_NOTE_LINES.join(`
2
2
  `),`Tailscale Warning`));let tailscaleResetOnExit=flow===`quickstart`?quickstartGateway.tailscaleResetOnExit:!1;tailscaleMode!==`off`&&flow!==`quickstart`&&(await prompter.note(TAILSCALE_DOCS_LINES.join(`
3
3
  `),`Tailscale`),tailscaleResetOnExit=!!await prompter.confirm({message:`Reset Tailscale serve/funnel on exit?`,initialValue:!1})),tailscaleMode!==`off`&&bind!==`loopback`&&(await prompter.note(`Tailscale requires bind=loopback. Adjusting bind to loopback.`,`Note`),bind=`loopback`,customBindHost=void 0),tailscaleMode===`funnel`&&authMode!==`password`&&(await prompter.note(`Tailscale funnel requires password auth.`,`Note`),authMode=`password`);let gatewayToken;if(authMode===`token`&&(gatewayToken=flow===`quickstart`?quickstartGateway.token??randomToken():normalizeGatewayTokenInput(await prompter.text({message:`Gateway token (blank to generate)`,placeholder:`Needed for multi-machine or non-loopback access`,initialValue:quickstartGateway.token??``}))||randomToken()),authMode===`password`){let password=flow===`quickstart`&&quickstartGateway.password?quickstartGateway.password:await prompter.text({message:`Gateway password`,validate:validateGatewayPasswordInput});nextConfig={...nextConfig,gateway:{...nextConfig.gateway,auth:{...nextConfig.gateway?.auth,mode:`password`,password:String(password??``).trim()}}}}else authMode===`token`&&(nextConfig={...nextConfig,gateway:{...nextConfig.gateway,auth:{...nextConfig.gateway?.auth,mode:`token`,token:gatewayToken}}});return nextConfig={...nextConfig,gateway:{...nextConfig.gateway,port,bind,...bind===`custom`&&customBindHost?{customBindHost}:{},tailscale:{...nextConfig.gateway?.tailscale,mode:tailscaleMode,resetOnExit:tailscaleResetOnExit}}},!quickstartGateway.hasExisting&&nextConfig.gateway?.nodes?.denyCommands===void 0&&nextConfig.gateway?.nodes?.allowCommands===void 0&&nextConfig.gateway?.nodes?.browser===void 0&&(nextConfig={...nextConfig,gateway:{...nextConfig.gateway,nodes:{...nextConfig.gateway?.nodes,denyCommands:[...DEFAULT_DANGEROUS_NODE_DENY_COMMANDS]}}}),{nextConfig,settings:{port,bind,customBindHost:bind===`custom`?customBindHost:void 0,authMode,gatewayToken,tailscaleMode,tailscaleResetOnExit}}}export{configureGatewayForOnboarding};
@@ -1,3 +1,3 @@
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{a as findTailscaleBinary}from"./tailscale-DLkpGquM.js";import"./sessions-CdanN_ZI.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"./paths-DJ6rztqJ.js";import"./client-xfoidwPI.js";import"./call-BbRf8gFM.js";import{m as randomToken,u as normalizeGatewayTokenInput,y as validateGatewayPasswordInput}from"./onboard-helpers-Cf5dNq7-.js";import"./prompt-style-BpVK43GK.js";import{i as TAILSCALE_MISSING_BIN_NOTE_LINES,n as TAILSCALE_DOCS_LINES,r as TAILSCALE_EXPOSURE_OPTIONS,t as validateIPv4AddressInput}from"./ipv4-Brrhx_sr.js";const DEFAULT_DANGEROUS_NODE_DENY_COMMANDS=[`camera.snap`,`camera.clip`,`screen.record`,`calendar.add`,`contacts.add`,`reminders.add`];async function configureGatewayForOnboarding(opts){let{flow,localPort,quickstartGateway,prompter}=opts,{nextConfig}=opts,port=flow===`quickstart`?quickstartGateway.port:Number.parseInt(String(await prompter.text({message:`Gateway port`,initialValue:String(localPort),validate:value=>Number.isFinite(Number(value))?void 0:`Invalid port`})),10),bind=flow===`quickstart`?quickstartGateway.bind:await prompter.select({message:`Gateway bind`,options:[{value:`loopback`,label:`Loopback (127.0.0.1)`},{value:`lan`,label:`LAN (0.0.0.0)`},{value:`tailnet`,label:`Tailnet (Tailscale IP)`},{value:`auto`,label:`Auto (Loopback → LAN)`},{value:`custom`,label:`Custom IP`}]}),customBindHost=quickstartGateway.customBindHost;if(bind===`custom`&&(flow!==`quickstart`||!customBindHost)){let input=await prompter.text({message:`Custom IP address`,placeholder:`192.168.1.100`,initialValue:customBindHost??``,validate:validateIPv4AddressInput});customBindHost=typeof input==`string`?input.trim():void 0}let authMode=flow===`quickstart`?quickstartGateway.authMode:await prompter.select({message:`Gateway auth`,options:[{value:`token`,label:`Token`,hint:`Recommended default (local + remote)`},{value:`password`,label:`Password`}],initialValue:`token`}),tailscaleMode=flow===`quickstart`?quickstartGateway.tailscaleMode:await prompter.select({message:`Tailscale exposure`,options:[...TAILSCALE_EXPOSURE_OPTIONS]});tailscaleMode!==`off`&&(await findTailscaleBinary()||await prompter.note(TAILSCALE_MISSING_BIN_NOTE_LINES.join(`
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{a as findTailscaleBinary}from"./tailscale-DLkpGquM.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"./paths-DJ6rztqJ.js";import"./client-xfoidwPI.js";import"./call-T8ciwMTA.js";import{m as randomToken,u as normalizeGatewayTokenInput,y as validateGatewayPasswordInput}from"./onboard-helpers-CiHzTaFX.js";import"./prompt-style-BpVK43GK.js";import{i as TAILSCALE_MISSING_BIN_NOTE_LINES,n as TAILSCALE_DOCS_LINES,r as TAILSCALE_EXPOSURE_OPTIONS,t as validateIPv4AddressInput}from"./ipv4-Brrhx_sr.js";const DEFAULT_DANGEROUS_NODE_DENY_COMMANDS=[`camera.snap`,`camera.clip`,`screen.record`,`calendar.add`,`contacts.add`,`reminders.add`];async function configureGatewayForOnboarding(opts){let{flow,localPort,quickstartGateway,prompter}=opts,{nextConfig}=opts,port=flow===`quickstart`?quickstartGateway.port:Number.parseInt(String(await prompter.text({message:`Gateway port`,initialValue:String(localPort),validate:value=>Number.isFinite(Number(value))?void 0:`Invalid port`})),10),bind=flow===`quickstart`?quickstartGateway.bind:await prompter.select({message:`Gateway bind`,options:[{value:`loopback`,label:`Loopback (127.0.0.1)`},{value:`lan`,label:`LAN (0.0.0.0)`},{value:`tailnet`,label:`Tailnet (Tailscale IP)`},{value:`auto`,label:`Auto (Loopback → LAN)`},{value:`custom`,label:`Custom IP`}]}),customBindHost=quickstartGateway.customBindHost;if(bind===`custom`&&(flow!==`quickstart`||!customBindHost)){let input=await prompter.text({message:`Custom IP address`,placeholder:`192.168.1.100`,initialValue:customBindHost??``,validate:validateIPv4AddressInput});customBindHost=typeof input==`string`?input.trim():void 0}let authMode=flow===`quickstart`?quickstartGateway.authMode:await prompter.select({message:`Gateway auth`,options:[{value:`token`,label:`Token`,hint:`Recommended default (local + remote)`},{value:`password`,label:`Password`}],initialValue:`token`}),tailscaleMode=flow===`quickstart`?quickstartGateway.tailscaleMode:await prompter.select({message:`Tailscale exposure`,options:[...TAILSCALE_EXPOSURE_OPTIONS]});tailscaleMode!==`off`&&(await findTailscaleBinary()||await prompter.note(TAILSCALE_MISSING_BIN_NOTE_LINES.join(`
2
2
  `),`Tailscale Warning`));let tailscaleResetOnExit=flow===`quickstart`?quickstartGateway.tailscaleResetOnExit:!1;tailscaleMode!==`off`&&flow!==`quickstart`&&(await prompter.note(TAILSCALE_DOCS_LINES.join(`
3
3
  `),`Tailscale`),tailscaleResetOnExit=!!await prompter.confirm({message:`Reset Tailscale serve/funnel on exit?`,initialValue:!1})),tailscaleMode!==`off`&&bind!==`loopback`&&(await prompter.note(`Tailscale requires bind=loopback. Adjusting bind to loopback.`,`Note`),bind=`loopback`,customBindHost=void 0),tailscaleMode===`funnel`&&authMode!==`password`&&(await prompter.note(`Tailscale funnel requires password auth.`,`Note`),authMode=`password`);let gatewayToken;if(authMode===`token`&&(gatewayToken=flow===`quickstart`?quickstartGateway.token??randomToken():normalizeGatewayTokenInput(await prompter.text({message:`Gateway token (blank to generate)`,placeholder:`Needed for multi-machine or non-loopback access`,initialValue:quickstartGateway.token??``}))||randomToken()),authMode===`password`){let password=flow===`quickstart`&&quickstartGateway.password?quickstartGateway.password:await prompter.text({message:`Gateway password`,validate:validateGatewayPasswordInput});nextConfig={...nextConfig,gateway:{...nextConfig.gateway,auth:{...nextConfig.gateway?.auth,mode:`password`,password:String(password??``).trim()}}}}else authMode===`token`&&(nextConfig={...nextConfig,gateway:{...nextConfig.gateway,auth:{...nextConfig.gateway?.auth,mode:`token`,token:gatewayToken}}});return nextConfig={...nextConfig,gateway:{...nextConfig.gateway,port,bind,...bind===`custom`&&customBindHost?{customBindHost}:{},tailscale:{...nextConfig.gateway?.tailscale,mode:tailscaleMode,resetOnExit:tailscaleResetOnExit}}},!quickstartGateway.hasExisting&&nextConfig.gateway?.nodes?.denyCommands===void 0&&nextConfig.gateway?.nodes?.allowCommands===void 0&&nextConfig.gateway?.nodes?.browser===void 0&&(nextConfig={...nextConfig,gateway:{...nextConfig.gateway,nodes:{...nextConfig.gateway?.nodes,denyCommands:[...DEFAULT_DANGEROUS_NODE_DENY_COMMANDS]}}}),{nextConfig,settings:{port,bind,customBindHost:bind===`custom`?customBindHost:void 0,authMode,gatewayToken,tailscaleMode,tailscaleResetOnExit}}}export{configureGatewayForOnboarding};
@@ -1 +1 @@
1
- import{bn as DEFAULT_PROVIDER,p as resolveAllowlistModelKey}from"./model-selection-9bRFKBI_.js";import{n as fetchWithTimeout}from"./fetch-timeout-BIqoSVfA.js";import{B as ZAI_CODING_CN_BASE_URL,U as ZAI_GLOBAL_BASE_URL,V as ZAI_CODING_GLOBAL_BASE_URL,z as ZAI_CN_BASE_URL}from"./onboard-auth.credentials-BuT-etnE.js";import{l as applyAgentDefaultPrimaryModel}from"./model-picker-BUePD7Zg.js";function ensureModelAllowlistEntry(params){let rawModelRef=params.modelRef.trim();if(!rawModelRef)return params.cfg;let models={...params.cfg.agents?.defaults?.models},keySet=new Set([rawModelRef]),canonicalKey=resolveAllowlistModelKey(rawModelRef,params.defaultProvider??DEFAULT_PROVIDER);canonicalKey&&keySet.add(canonicalKey);for(let key of keySet)models[key]={...models[key]};return{...params.cfg,agents:{...params.cfg.agents,defaults:{...params.cfg.agents?.defaults,models}}}}const GOOGLE_GEMINI_DEFAULT_MODEL=`google/gemini-3-pro-preview`;function applyGoogleGeminiModelDefault(cfg){return applyAgentDefaultPrimaryModel({cfg,model:GOOGLE_GEMINI_DEFAULT_MODEL})}async function probeZaiChatCompletions(params){try{let res=await fetchWithTimeout(`${params.baseUrl}/chat/completions`,{method:`POST`,headers:{authorization:`Bearer ${params.apiKey}`,"content-type":`application/json`},body:JSON.stringify({model:params.modelId,stream:!1,max_tokens:1,messages:[{role:`user`,content:`ping`}]})},params.timeoutMs,params.fetchFn);if(res.ok)return{ok:!0};let errorCode,errorMessage;try{let json=await res.json(),code=json?.error?.code,msg=json?.error?.message??json?.msg??json?.message;typeof code==`string`?errorCode=code:typeof code==`number`&&(errorCode=String(code)),typeof msg==`string`&&(errorMessage=msg)}catch{}return{ok:!1,status:res.status,errorCode,errorMessage}}catch{return{ok:!1}}}async function detectZaiEndpoint(params){if(process.env.VITEST&&!params.fetchFn)return null;let timeoutMs=params.timeoutMs??5e3,glm5=[{endpoint:`global`,baseUrl:ZAI_GLOBAL_BASE_URL},{endpoint:`cn`,baseUrl:ZAI_CN_BASE_URL}];for(let candidate of glm5)if((await probeZaiChatCompletions({baseUrl:candidate.baseUrl,apiKey:params.apiKey,modelId:`glm-5`,timeoutMs,fetchFn:params.fetchFn})).ok)return{endpoint:candidate.endpoint,baseUrl:candidate.baseUrl,modelId:`glm-5`,note:`Verified GLM-5 on ${candidate.endpoint} endpoint.`};let coding=[{endpoint:`coding-global`,baseUrl:ZAI_CODING_GLOBAL_BASE_URL},{endpoint:`coding-cn`,baseUrl:ZAI_CODING_CN_BASE_URL}];for(let candidate of coding)if((await probeZaiChatCompletions({baseUrl:candidate.baseUrl,apiKey:params.apiKey,modelId:`glm-4.7`,timeoutMs,fetchFn:params.fetchFn})).ok)return{endpoint:candidate.endpoint,baseUrl:candidate.baseUrl,modelId:`glm-4.7`,note:`Coding Plan endpoint detected; GLM-5 is not available there. Defaulting to GLM-4.7.`};return null}const OPENAI_DEFAULT_MODEL=`openai/gpt-5.1-codex`;function applyOpenAIProviderConfig(cfg){let next=ensureModelAllowlistEntry({cfg,modelRef:OPENAI_DEFAULT_MODEL}),models={...next.agents?.defaults?.models};return models[OPENAI_DEFAULT_MODEL]={...models[OPENAI_DEFAULT_MODEL],alias:models[OPENAI_DEFAULT_MODEL]?.alias??`GPT`},{...next,agents:{...next.agents,defaults:{...next.agents?.defaults,models}}}}function applyOpenAIConfig(cfg){let next=applyOpenAIProviderConfig(cfg);return{...next,agents:{...next.agents,defaults:{...next.agents?.defaults,model:next.agents?.defaults?.model&&typeof next.agents.defaults.model==`object`?{...next.agents.defaults.model,primary:OPENAI_DEFAULT_MODEL}:{primary:OPENAI_DEFAULT_MODEL}}}}}export{GOOGLE_GEMINI_DEFAULT_MODEL as a,detectZaiEndpoint as i,applyOpenAIConfig as n,applyGoogleGeminiModelDefault as o,applyOpenAIProviderConfig as r,ensureModelAllowlistEntry as s,OPENAI_DEFAULT_MODEL as t};
1
+ import{bn as DEFAULT_PROVIDER,p as resolveAllowlistModelKey}from"./model-selection-DG9J_VTz.js";import{n as fetchWithTimeout}from"./fetch-timeout-BIqoSVfA.js";import{B as ZAI_CODING_CN_BASE_URL,U as ZAI_GLOBAL_BASE_URL,V as ZAI_CODING_GLOBAL_BASE_URL,z as ZAI_CN_BASE_URL}from"./onboard-auth.credentials-DpitLlzw.js";import{l as applyAgentDefaultPrimaryModel}from"./model-picker-EIhpfOZa.js";function ensureModelAllowlistEntry(params){let rawModelRef=params.modelRef.trim();if(!rawModelRef)return params.cfg;let models={...params.cfg.agents?.defaults?.models},keySet=new Set([rawModelRef]),canonicalKey=resolveAllowlistModelKey(rawModelRef,params.defaultProvider??DEFAULT_PROVIDER);canonicalKey&&keySet.add(canonicalKey);for(let key of keySet)models[key]={...models[key]};return{...params.cfg,agents:{...params.cfg.agents,defaults:{...params.cfg.agents?.defaults,models}}}}const GOOGLE_GEMINI_DEFAULT_MODEL=`google/gemini-3-pro-preview`;function applyGoogleGeminiModelDefault(cfg){return applyAgentDefaultPrimaryModel({cfg,model:GOOGLE_GEMINI_DEFAULT_MODEL})}async function probeZaiChatCompletions(params){try{let res=await fetchWithTimeout(`${params.baseUrl}/chat/completions`,{method:`POST`,headers:{authorization:`Bearer ${params.apiKey}`,"content-type":`application/json`},body:JSON.stringify({model:params.modelId,stream:!1,max_tokens:1,messages:[{role:`user`,content:`ping`}]})},params.timeoutMs,params.fetchFn);if(res.ok)return{ok:!0};let errorCode,errorMessage;try{let json=await res.json(),code=json?.error?.code,msg=json?.error?.message??json?.msg??json?.message;typeof code==`string`?errorCode=code:typeof code==`number`&&(errorCode=String(code)),typeof msg==`string`&&(errorMessage=msg)}catch{}return{ok:!1,status:res.status,errorCode,errorMessage}}catch{return{ok:!1}}}async function detectZaiEndpoint(params){if(process.env.VITEST&&!params.fetchFn)return null;let timeoutMs=params.timeoutMs??5e3,glm5=[{endpoint:`global`,baseUrl:ZAI_GLOBAL_BASE_URL},{endpoint:`cn`,baseUrl:ZAI_CN_BASE_URL}];for(let candidate of glm5)if((await probeZaiChatCompletions({baseUrl:candidate.baseUrl,apiKey:params.apiKey,modelId:`glm-5`,timeoutMs,fetchFn:params.fetchFn})).ok)return{endpoint:candidate.endpoint,baseUrl:candidate.baseUrl,modelId:`glm-5`,note:`Verified GLM-5 on ${candidate.endpoint} endpoint.`};let coding=[{endpoint:`coding-global`,baseUrl:ZAI_CODING_GLOBAL_BASE_URL},{endpoint:`coding-cn`,baseUrl:ZAI_CODING_CN_BASE_URL}];for(let candidate of coding)if((await probeZaiChatCompletions({baseUrl:candidate.baseUrl,apiKey:params.apiKey,modelId:`glm-4.7`,timeoutMs,fetchFn:params.fetchFn})).ok)return{endpoint:candidate.endpoint,baseUrl:candidate.baseUrl,modelId:`glm-4.7`,note:`Coding Plan endpoint detected; GLM-5 is not available there. Defaulting to GLM-4.7.`};return null}const OPENAI_DEFAULT_MODEL=`openai/gpt-5.1-codex`;function applyOpenAIProviderConfig(cfg){let next=ensureModelAllowlistEntry({cfg,modelRef:OPENAI_DEFAULT_MODEL}),models={...next.agents?.defaults?.models};return models[OPENAI_DEFAULT_MODEL]={...models[OPENAI_DEFAULT_MODEL],alias:models[OPENAI_DEFAULT_MODEL]?.alias??`GPT`},{...next,agents:{...next.agents,defaults:{...next.agents?.defaults,models}}}}function applyOpenAIConfig(cfg){let next=applyOpenAIProviderConfig(cfg);return{...next,agents:{...next.agents,defaults:{...next.agents?.defaults,model:next.agents?.defaults?.model&&typeof next.agents.defaults.model==`object`?{...next.agents.defaults.model,primary:OPENAI_DEFAULT_MODEL}:{primary:OPENAI_DEFAULT_MODEL}}}}}export{GOOGLE_GEMINI_DEFAULT_MODEL as a,detectZaiEndpoint as i,applyOpenAIConfig as n,applyGoogleGeminiModelDefault as o,applyOpenAIProviderConfig as r,ensureModelAllowlistEntry as s,OPENAI_DEFAULT_MODEL as t};
@@ -1 +1 @@
1
- import{V as resolveAllowlistModelKey,_n as DEFAULT_PROVIDER}from"./auth-profiles-C1VbcUOm.js";import{n as fetchWithTimeout}from"./fetch-timeout-Cb8Yj9Tw.js";import{B as ZAI_CODING_CN_BASE_URL,U as ZAI_GLOBAL_BASE_URL,V as ZAI_CODING_GLOBAL_BASE_URL,z as ZAI_CN_BASE_URL}from"./onboard-auth.credentials-yagR-VMG.js";import{l as applyAgentDefaultPrimaryModel}from"./model-picker-swoSwauV.js";function ensureModelAllowlistEntry(params){let rawModelRef=params.modelRef.trim();if(!rawModelRef)return params.cfg;let models={...params.cfg.agents?.defaults?.models},keySet=new Set([rawModelRef]),canonicalKey=resolveAllowlistModelKey(rawModelRef,params.defaultProvider??DEFAULT_PROVIDER);canonicalKey&&keySet.add(canonicalKey);for(let key of keySet)models[key]={...models[key]};return{...params.cfg,agents:{...params.cfg.agents,defaults:{...params.cfg.agents?.defaults,models}}}}const GOOGLE_GEMINI_DEFAULT_MODEL=`google/gemini-3-pro-preview`;function applyGoogleGeminiModelDefault(cfg){return applyAgentDefaultPrimaryModel({cfg,model:GOOGLE_GEMINI_DEFAULT_MODEL})}async function probeZaiChatCompletions(params){try{let res=await fetchWithTimeout(`${params.baseUrl}/chat/completions`,{method:`POST`,headers:{authorization:`Bearer ${params.apiKey}`,"content-type":`application/json`},body:JSON.stringify({model:params.modelId,stream:!1,max_tokens:1,messages:[{role:`user`,content:`ping`}]})},params.timeoutMs,params.fetchFn);if(res.ok)return{ok:!0};let errorCode,errorMessage;try{let json=await res.json(),code=json?.error?.code,msg=json?.error?.message??json?.msg??json?.message;typeof code==`string`?errorCode=code:typeof code==`number`&&(errorCode=String(code)),typeof msg==`string`&&(errorMessage=msg)}catch{}return{ok:!1,status:res.status,errorCode,errorMessage}}catch{return{ok:!1}}}async function detectZaiEndpoint(params){if(process.env.VITEST&&!params.fetchFn)return null;let timeoutMs=params.timeoutMs??5e3,glm5=[{endpoint:`global`,baseUrl:ZAI_GLOBAL_BASE_URL},{endpoint:`cn`,baseUrl:ZAI_CN_BASE_URL}];for(let candidate of glm5)if((await probeZaiChatCompletions({baseUrl:candidate.baseUrl,apiKey:params.apiKey,modelId:`glm-5`,timeoutMs,fetchFn:params.fetchFn})).ok)return{endpoint:candidate.endpoint,baseUrl:candidate.baseUrl,modelId:`glm-5`,note:`Verified GLM-5 on ${candidate.endpoint} endpoint.`};let coding=[{endpoint:`coding-global`,baseUrl:ZAI_CODING_GLOBAL_BASE_URL},{endpoint:`coding-cn`,baseUrl:ZAI_CODING_CN_BASE_URL}];for(let candidate of coding)if((await probeZaiChatCompletions({baseUrl:candidate.baseUrl,apiKey:params.apiKey,modelId:`glm-4.7`,timeoutMs,fetchFn:params.fetchFn})).ok)return{endpoint:candidate.endpoint,baseUrl:candidate.baseUrl,modelId:`glm-4.7`,note:`Coding Plan endpoint detected; GLM-5 is not available there. Defaulting to GLM-4.7.`};return null}const OPENAI_DEFAULT_MODEL=`openai/gpt-5.1-codex`;function applyOpenAIProviderConfig(cfg){let next=ensureModelAllowlistEntry({cfg,modelRef:OPENAI_DEFAULT_MODEL}),models={...next.agents?.defaults?.models};return models[OPENAI_DEFAULT_MODEL]={...models[OPENAI_DEFAULT_MODEL],alias:models[OPENAI_DEFAULT_MODEL]?.alias??`GPT`},{...next,agents:{...next.agents,defaults:{...next.agents?.defaults,models}}}}function applyOpenAIConfig(cfg){let next=applyOpenAIProviderConfig(cfg);return{...next,agents:{...next.agents,defaults:{...next.agents?.defaults,model:next.agents?.defaults?.model&&typeof next.agents.defaults.model==`object`?{...next.agents.defaults.model,primary:OPENAI_DEFAULT_MODEL}:{primary:OPENAI_DEFAULT_MODEL}}}}}export{GOOGLE_GEMINI_DEFAULT_MODEL as a,detectZaiEndpoint as i,applyOpenAIConfig as n,applyGoogleGeminiModelDefault as o,applyOpenAIProviderConfig as r,ensureModelAllowlistEntry as s,OPENAI_DEFAULT_MODEL as t};
1
+ import{V as resolveAllowlistModelKey,_n as DEFAULT_PROVIDER}from"./auth-profiles-pt7Tr4HA.js";import{n as fetchWithTimeout}from"./fetch-timeout-Cb8Yj9Tw.js";import{B as ZAI_CODING_CN_BASE_URL,U as ZAI_GLOBAL_BASE_URL,V as ZAI_CODING_GLOBAL_BASE_URL,z as ZAI_CN_BASE_URL}from"./onboard-auth.credentials-DneFSdYg.js";import{l as applyAgentDefaultPrimaryModel}from"./model-picker-CGDNPRPc.js";function ensureModelAllowlistEntry(params){let rawModelRef=params.modelRef.trim();if(!rawModelRef)return params.cfg;let models={...params.cfg.agents?.defaults?.models},keySet=new Set([rawModelRef]),canonicalKey=resolveAllowlistModelKey(rawModelRef,params.defaultProvider??DEFAULT_PROVIDER);canonicalKey&&keySet.add(canonicalKey);for(let key of keySet)models[key]={...models[key]};return{...params.cfg,agents:{...params.cfg.agents,defaults:{...params.cfg.agents?.defaults,models}}}}const GOOGLE_GEMINI_DEFAULT_MODEL=`google/gemini-3-pro-preview`;function applyGoogleGeminiModelDefault(cfg){return applyAgentDefaultPrimaryModel({cfg,model:GOOGLE_GEMINI_DEFAULT_MODEL})}async function probeZaiChatCompletions(params){try{let res=await fetchWithTimeout(`${params.baseUrl}/chat/completions`,{method:`POST`,headers:{authorization:`Bearer ${params.apiKey}`,"content-type":`application/json`},body:JSON.stringify({model:params.modelId,stream:!1,max_tokens:1,messages:[{role:`user`,content:`ping`}]})},params.timeoutMs,params.fetchFn);if(res.ok)return{ok:!0};let errorCode,errorMessage;try{let json=await res.json(),code=json?.error?.code,msg=json?.error?.message??json?.msg??json?.message;typeof code==`string`?errorCode=code:typeof code==`number`&&(errorCode=String(code)),typeof msg==`string`&&(errorMessage=msg)}catch{}return{ok:!1,status:res.status,errorCode,errorMessage}}catch{return{ok:!1}}}async function detectZaiEndpoint(params){if(process.env.VITEST&&!params.fetchFn)return null;let timeoutMs=params.timeoutMs??5e3,glm5=[{endpoint:`global`,baseUrl:ZAI_GLOBAL_BASE_URL},{endpoint:`cn`,baseUrl:ZAI_CN_BASE_URL}];for(let candidate of glm5)if((await probeZaiChatCompletions({baseUrl:candidate.baseUrl,apiKey:params.apiKey,modelId:`glm-5`,timeoutMs,fetchFn:params.fetchFn})).ok)return{endpoint:candidate.endpoint,baseUrl:candidate.baseUrl,modelId:`glm-5`,note:`Verified GLM-5 on ${candidate.endpoint} endpoint.`};let coding=[{endpoint:`coding-global`,baseUrl:ZAI_CODING_GLOBAL_BASE_URL},{endpoint:`coding-cn`,baseUrl:ZAI_CODING_CN_BASE_URL}];for(let candidate of coding)if((await probeZaiChatCompletions({baseUrl:candidate.baseUrl,apiKey:params.apiKey,modelId:`glm-4.7`,timeoutMs,fetchFn:params.fetchFn})).ok)return{endpoint:candidate.endpoint,baseUrl:candidate.baseUrl,modelId:`glm-4.7`,note:`Coding Plan endpoint detected; GLM-5 is not available there. Defaulting to GLM-4.7.`};return null}const OPENAI_DEFAULT_MODEL=`openai/gpt-5.1-codex`;function applyOpenAIProviderConfig(cfg){let next=ensureModelAllowlistEntry({cfg,modelRef:OPENAI_DEFAULT_MODEL}),models={...next.agents?.defaults?.models};return models[OPENAI_DEFAULT_MODEL]={...models[OPENAI_DEFAULT_MODEL],alias:models[OPENAI_DEFAULT_MODEL]?.alias??`GPT`},{...next,agents:{...next.agents,defaults:{...next.agents?.defaults,models}}}}function applyOpenAIConfig(cfg){let next=applyOpenAIProviderConfig(cfg);return{...next,agents:{...next.agents,defaults:{...next.agents?.defaults,model:next.agents?.defaults?.model&&typeof next.agents.defaults.model==`object`?{...next.agents.defaults.model,primary:OPENAI_DEFAULT_MODEL}:{primary:OPENAI_DEFAULT_MODEL}}}}}export{GOOGLE_GEMINI_DEFAULT_MODEL as a,detectZaiEndpoint as i,applyOpenAIConfig as n,applyGoogleGeminiModelDefault as o,applyOpenAIProviderConfig as r,ensureModelAllowlistEntry as s,OPENAI_DEFAULT_MODEL as t};
@@ -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"./message-channel-z5YRpR2d.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./image-ops-CotJhwRR.js";import"./ssrf-DJXLYZ0d.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"./tables-CojSfTth.js";import"./active-listener-Di9e1YAD.js";import{n as sendPollWhatsApp,r as sendReactionWhatsApp,t as sendMessageWhatsApp}from"./outbound-CAtBpFoD.js";export{sendMessageWhatsApp,sendPollWhatsApp,sendReactionWhatsApp};
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"./message-channel-z5YRpR2d.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./image-ops-CotJhwRR.js";import"./ssrf-DJXLYZ0d.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"./tables-CojSfTth.js";import"./active-listener-Di9e1YAD.js";import{n as sendPollWhatsApp,r as sendReactionWhatsApp,t as sendMessageWhatsApp}from"./outbound-BylJYD7n.js";export{sendMessageWhatsApp,sendPollWhatsApp,sendReactionWhatsApp};
@@ -1 +1 @@
1
- import{H as getChildLogger,T as toWhatsappJid,c as escapeRegExp}from"./utils-BP60e80M.js";import{t as createSubsystemLogger}from"./subsystem-C4b1Von0.js";import{r as loadConfig}from"./io-CohJffHG.js";import{t as resolveMarkdownTableMode}from"./markdown-tables-B1Rx8hv6.js";import{a as loadWebMedia}from"./ir-CSdQJPqu.js";import{n as normalizePollInput}from"./polls-BdfE-6dQ.js";import{t as convertMarkdownTables}from"./tables-CojSfTth.js";import{n as requireActiveWebListener}from"./active-listener-Di9e1YAD.js";import{randomUUID}from"node:crypto";const FENCE_PLACEHOLDER=`\0FENCE`,INLINE_CODE_PLACEHOLDER=`\0CODE`;function markdownToWhatsApp(text){if(!text)return text;let fences=[],result=text.replace(/```[\s\S]*?```/g,match=>(fences.push(match),`${FENCE_PLACEHOLDER}${fences.length-1}`)),inlineCodes=[];return result=result.replace(/`[^`\n]+`/g,match=>(inlineCodes.push(match),`${INLINE_CODE_PLACEHOLDER}${inlineCodes.length-1}`)),result=result.replace(/\*\*(.+?)\*\*/g,`*$1*`),result=result.replace(/__(.+?)__/g,`*$1*`),result=result.replace(/~~(.+?)~~/g,`~$1~`),result=result.replace(RegExp(`${escapeRegExp(INLINE_CODE_PLACEHOLDER)}(\\d+)`,`g`),(_,idx)=>inlineCodes[Number(idx)]??``),result=result.replace(RegExp(`${escapeRegExp(FENCE_PLACEHOLDER)}(\\d+)`,`g`),(_,idx)=>fences[Number(idx)]??``),result}const outboundLog=createSubsystemLogger(`gateway/channels/whatsapp`).child(`outbound`);async function sendMessageWhatsApp(to,body,options){let text=body,correlationId=randomUUID(),startedAt=Date.now(),{listener:active,accountId:resolvedAccountId}=requireActiveWebListener(options.accountId),tableMode=resolveMarkdownTableMode({cfg:loadConfig(),channel:`whatsapp`,accountId:resolvedAccountId??options.accountId});text=convertMarkdownTables(text??``,tableMode),text=markdownToWhatsApp(text);let logger=getChildLogger({module:`web-outbound`,correlationId,to});try{let jid=toWhatsappJid(to),mediaBuffer,mediaType,documentFileName;if(options.mediaUrl){let media=await loadWebMedia(options.mediaUrl,{localRoots:options.mediaLocalRoots}),caption=text||void 0;mediaBuffer=media.buffer,mediaType=media.contentType,media.kind===`audio`?mediaType=media.contentType===`audio/ogg`?`audio/ogg; codecs=opus`:media.contentType??`application/octet-stream`:media.kind===`video`||media.kind===`image`?text=caption??``:(text=caption??``,documentFileName=media.fileName)}outboundLog.info(`Sending message -> ${jid}${options.mediaUrl?` (media)`:``}`),logger.info({jid,hasMedia:!!options.mediaUrl},`sending message`),await active.sendComposingTo(to);let accountId=options.accountId?.trim()?resolvedAccountId:void 0,sendOptions=options.gifPlayback||accountId||documentFileName?{...options.gifPlayback?{gifPlayback:!0}:{},...documentFileName?{fileName:documentFileName}:{},accountId}:void 0,messageId=(sendOptions?await active.sendMessage(to,text,mediaBuffer,mediaType,sendOptions):await active.sendMessage(to,text,mediaBuffer,mediaType))?.messageId??`unknown`,durationMs=Date.now()-startedAt;return outboundLog.info(`Sent message ${messageId} -> ${jid}${options.mediaUrl?` (media)`:``} (${durationMs}ms)`),logger.info({jid,messageId},`sent message`),{messageId,toJid:jid}}catch(err){throw logger.error({err:String(err),to,hasMedia:!!options.mediaUrl},`failed to send via web session`),err}}async function sendReactionWhatsApp(chatJid,messageId,emoji,options){let correlationId=randomUUID(),{listener:active}=requireActiveWebListener(options.accountId),logger=getChildLogger({module:`web-outbound`,correlationId,chatJid,messageId});try{let jid=toWhatsappJid(chatJid);outboundLog.info(`Sending reaction "${emoji}" -> message ${messageId}`),logger.info({chatJid:jid,messageId,emoji},`sending reaction`),await active.sendReaction(chatJid,messageId,emoji,options.fromMe??!1,options.participant),outboundLog.info(`Sent reaction "${emoji}" -> message ${messageId}`),logger.info({chatJid:jid,messageId,emoji},`sent reaction`)}catch(err){throw logger.error({err:String(err),chatJid,messageId,emoji},`failed to send reaction via web session`),err}}async function sendPollWhatsApp(to,poll,options){let correlationId=randomUUID(),startedAt=Date.now(),{listener:active}=requireActiveWebListener(options.accountId),logger=getChildLogger({module:`web-outbound`,correlationId,to});try{let jid=toWhatsappJid(to),normalized=normalizePollInput(poll,{maxOptions:12});outboundLog.info(`Sending poll -> ${jid}: "${normalized.question}"`),logger.info({jid,question:normalized.question,optionCount:normalized.options.length,maxSelections:normalized.maxSelections},`sending poll`);let messageId=(await active.sendPoll(to,normalized))?.messageId??`unknown`,durationMs=Date.now()-startedAt;return outboundLog.info(`Sent poll ${messageId} -> ${jid} (${durationMs}ms)`),logger.info({jid,messageId},`sent poll`),{messageId,toJid:jid}}catch(err){throw logger.error({err:String(err),to,question:poll.question},`failed to send poll via web session`),err}}export{markdownToWhatsApp as i,sendPollWhatsApp as n,sendReactionWhatsApp as r,sendMessageWhatsApp as t};
1
+ import{H as getChildLogger,T as toWhatsappJid,c as escapeRegExp}from"./utils-BP60e80M.js";import{t as createSubsystemLogger}from"./subsystem-C4b1Von0.js";import{r as loadConfig}from"./io-D9hC2aG0.js";import{t as resolveMarkdownTableMode}from"./markdown-tables-B1Rx8hv6.js";import{a as loadWebMedia}from"./ir-CSdQJPqu.js";import{n as normalizePollInput}from"./polls-BdfE-6dQ.js";import{t as convertMarkdownTables}from"./tables-CojSfTth.js";import{n as requireActiveWebListener}from"./active-listener-Di9e1YAD.js";import{randomUUID}from"node:crypto";const FENCE_PLACEHOLDER=`\0FENCE`,INLINE_CODE_PLACEHOLDER=`\0CODE`;function markdownToWhatsApp(text){if(!text)return text;let fences=[],result=text.replace(/```[\s\S]*?```/g,match=>(fences.push(match),`${FENCE_PLACEHOLDER}${fences.length-1}`)),inlineCodes=[];return result=result.replace(/`[^`\n]+`/g,match=>(inlineCodes.push(match),`${INLINE_CODE_PLACEHOLDER}${inlineCodes.length-1}`)),result=result.replace(/\*\*(.+?)\*\*/g,`*$1*`),result=result.replace(/__(.+?)__/g,`*$1*`),result=result.replace(/~~(.+?)~~/g,`~$1~`),result=result.replace(RegExp(`${escapeRegExp(INLINE_CODE_PLACEHOLDER)}(\\d+)`,`g`),(_,idx)=>inlineCodes[Number(idx)]??``),result=result.replace(RegExp(`${escapeRegExp(FENCE_PLACEHOLDER)}(\\d+)`,`g`),(_,idx)=>fences[Number(idx)]??``),result}const outboundLog=createSubsystemLogger(`gateway/channels/whatsapp`).child(`outbound`);async function sendMessageWhatsApp(to,body,options){let text=body,correlationId=randomUUID(),startedAt=Date.now(),{listener:active,accountId:resolvedAccountId}=requireActiveWebListener(options.accountId),tableMode=resolveMarkdownTableMode({cfg:loadConfig(),channel:`whatsapp`,accountId:resolvedAccountId??options.accountId});text=convertMarkdownTables(text??``,tableMode),text=markdownToWhatsApp(text);let logger=getChildLogger({module:`web-outbound`,correlationId,to});try{let jid=toWhatsappJid(to),mediaBuffer,mediaType,documentFileName;if(options.mediaUrl){let media=await loadWebMedia(options.mediaUrl,{localRoots:options.mediaLocalRoots}),caption=text||void 0;mediaBuffer=media.buffer,mediaType=media.contentType,media.kind===`audio`?mediaType=media.contentType===`audio/ogg`?`audio/ogg; codecs=opus`:media.contentType??`application/octet-stream`:media.kind===`video`||media.kind===`image`?text=caption??``:(text=caption??``,documentFileName=media.fileName)}outboundLog.info(`Sending message -> ${jid}${options.mediaUrl?` (media)`:``}`),logger.info({jid,hasMedia:!!options.mediaUrl},`sending message`),await active.sendComposingTo(to);let accountId=options.accountId?.trim()?resolvedAccountId:void 0,sendOptions=options.gifPlayback||accountId||documentFileName?{...options.gifPlayback?{gifPlayback:!0}:{},...documentFileName?{fileName:documentFileName}:{},accountId}:void 0,messageId=(sendOptions?await active.sendMessage(to,text,mediaBuffer,mediaType,sendOptions):await active.sendMessage(to,text,mediaBuffer,mediaType))?.messageId??`unknown`,durationMs=Date.now()-startedAt;return outboundLog.info(`Sent message ${messageId} -> ${jid}${options.mediaUrl?` (media)`:``} (${durationMs}ms)`),logger.info({jid,messageId},`sent message`),{messageId,toJid:jid}}catch(err){throw logger.error({err:String(err),to,hasMedia:!!options.mediaUrl},`failed to send via web session`),err}}async function sendReactionWhatsApp(chatJid,messageId,emoji,options){let correlationId=randomUUID(),{listener:active}=requireActiveWebListener(options.accountId),logger=getChildLogger({module:`web-outbound`,correlationId,chatJid,messageId});try{let jid=toWhatsappJid(chatJid);outboundLog.info(`Sending reaction "${emoji}" -> message ${messageId}`),logger.info({chatJid:jid,messageId,emoji},`sending reaction`),await active.sendReaction(chatJid,messageId,emoji,options.fromMe??!1,options.participant),outboundLog.info(`Sent reaction "${emoji}" -> message ${messageId}`),logger.info({chatJid:jid,messageId,emoji},`sent reaction`)}catch(err){throw logger.error({err:String(err),chatJid,messageId,emoji},`failed to send reaction via web session`),err}}async function sendPollWhatsApp(to,poll,options){let correlationId=randomUUID(),startedAt=Date.now(),{listener:active}=requireActiveWebListener(options.accountId),logger=getChildLogger({module:`web-outbound`,correlationId,to});try{let jid=toWhatsappJid(to),normalized=normalizePollInput(poll,{maxOptions:12});outboundLog.info(`Sending poll -> ${jid}: "${normalized.question}"`),logger.info({jid,question:normalized.question,optionCount:normalized.options.length,maxSelections:normalized.maxSelections},`sending poll`);let messageId=(await active.sendPoll(to,normalized))?.messageId??`unknown`,durationMs=Date.now()-startedAt;return outboundLog.info(`Sent poll ${messageId} -> ${jid} (${durationMs}ms)`),logger.info({jid,messageId},`sent poll`),{messageId,toJid:jid}}catch(err){throw logger.error({err:String(err),to,question:poll.question},`failed to send poll via web session`),err}}export{markdownToWhatsApp as i,sendPollWhatsApp as n,sendReactionWhatsApp as r,sendMessageWhatsApp as t};
@@ -1 +1 @@
1
- import{E as toWhatsappJid,U as getChildLogger,l as escapeRegExp}from"./utils-DbaBVFaK.js";import{t as createSubsystemLogger}from"./subsystem-B3TqcCrZ.js";import{r as loadConfig}from"./io-3R_ZyUxB.js";import{t as resolveMarkdownTableMode}from"./markdown-tables-P6uoUSFa.js";import{a as loadWebMedia}from"./ir-5BNoIXZm.js";import{n as normalizePollInput}from"./polls-IFZVG0cW.js";import{t as convertMarkdownTables}from"./tables-ERcoWFDp.js";import{n as requireActiveWebListener}from"./active-listener-Dcg19lJG.js";import{randomUUID}from"node:crypto";const FENCE_PLACEHOLDER=`\0FENCE`,INLINE_CODE_PLACEHOLDER=`\0CODE`;function markdownToWhatsApp(text){if(!text)return text;let fences=[],result=text.replace(/```[\s\S]*?```/g,match=>(fences.push(match),`${FENCE_PLACEHOLDER}${fences.length-1}`)),inlineCodes=[];return result=result.replace(/`[^`\n]+`/g,match=>(inlineCodes.push(match),`${INLINE_CODE_PLACEHOLDER}${inlineCodes.length-1}`)),result=result.replace(/\*\*(.+?)\*\*/g,`*$1*`),result=result.replace(/__(.+?)__/g,`*$1*`),result=result.replace(/~~(.+?)~~/g,`~$1~`),result=result.replace(RegExp(`${escapeRegExp(INLINE_CODE_PLACEHOLDER)}(\\d+)`,`g`),(_,idx)=>inlineCodes[Number(idx)]??``),result=result.replace(RegExp(`${escapeRegExp(FENCE_PLACEHOLDER)}(\\d+)`,`g`),(_,idx)=>fences[Number(idx)]??``),result}const outboundLog=createSubsystemLogger(`gateway/channels/whatsapp`).child(`outbound`);async function sendMessageWhatsApp(to,body,options){let text=body,correlationId=randomUUID(),startedAt=Date.now(),{listener:active,accountId:resolvedAccountId}=requireActiveWebListener(options.accountId),tableMode=resolveMarkdownTableMode({cfg:loadConfig(),channel:`whatsapp`,accountId:resolvedAccountId??options.accountId});text=convertMarkdownTables(text??``,tableMode),text=markdownToWhatsApp(text);let logger=getChildLogger({module:`web-outbound`,correlationId,to});try{let jid=toWhatsappJid(to),mediaBuffer,mediaType,documentFileName;if(options.mediaUrl){let media=await loadWebMedia(options.mediaUrl,{localRoots:options.mediaLocalRoots}),caption=text||void 0;mediaBuffer=media.buffer,mediaType=media.contentType,media.kind===`audio`?mediaType=media.contentType===`audio/ogg`?`audio/ogg; codecs=opus`:media.contentType??`application/octet-stream`:media.kind===`video`||media.kind===`image`?text=caption??``:(text=caption??``,documentFileName=media.fileName)}outboundLog.info(`Sending message -> ${jid}${options.mediaUrl?` (media)`:``}`),logger.info({jid,hasMedia:!!options.mediaUrl},`sending message`),await active.sendComposingTo(to);let accountId=options.accountId?.trim()?resolvedAccountId:void 0,sendOptions=options.gifPlayback||accountId||documentFileName?{...options.gifPlayback?{gifPlayback:!0}:{},...documentFileName?{fileName:documentFileName}:{},accountId}:void 0,messageId=(sendOptions?await active.sendMessage(to,text,mediaBuffer,mediaType,sendOptions):await active.sendMessage(to,text,mediaBuffer,mediaType))?.messageId??`unknown`,durationMs=Date.now()-startedAt;return outboundLog.info(`Sent message ${messageId} -> ${jid}${options.mediaUrl?` (media)`:``} (${durationMs}ms)`),logger.info({jid,messageId},`sent message`),{messageId,toJid:jid}}catch(err){throw logger.error({err:String(err),to,hasMedia:!!options.mediaUrl},`failed to send via web session`),err}}async function sendReactionWhatsApp(chatJid,messageId,emoji,options){let correlationId=randomUUID(),{listener:active}=requireActiveWebListener(options.accountId),logger=getChildLogger({module:`web-outbound`,correlationId,chatJid,messageId});try{let jid=toWhatsappJid(chatJid);outboundLog.info(`Sending reaction "${emoji}" -> message ${messageId}`),logger.info({chatJid:jid,messageId,emoji},`sending reaction`),await active.sendReaction(chatJid,messageId,emoji,options.fromMe??!1,options.participant),outboundLog.info(`Sent reaction "${emoji}" -> message ${messageId}`),logger.info({chatJid:jid,messageId,emoji},`sent reaction`)}catch(err){throw logger.error({err:String(err),chatJid,messageId,emoji},`failed to send reaction via web session`),err}}async function sendPollWhatsApp(to,poll,options){let correlationId=randomUUID(),startedAt=Date.now(),{listener:active}=requireActiveWebListener(options.accountId),logger=getChildLogger({module:`web-outbound`,correlationId,to});try{let jid=toWhatsappJid(to),normalized=normalizePollInput(poll,{maxOptions:12});outboundLog.info(`Sending poll -> ${jid}: "${normalized.question}"`),logger.info({jid,question:normalized.question,optionCount:normalized.options.length,maxSelections:normalized.maxSelections},`sending poll`);let messageId=(await active.sendPoll(to,normalized))?.messageId??`unknown`,durationMs=Date.now()-startedAt;return outboundLog.info(`Sent poll ${messageId} -> ${jid} (${durationMs}ms)`),logger.info({jid,messageId},`sent poll`),{messageId,toJid:jid}}catch(err){throw logger.error({err:String(err),to,question:poll.question},`failed to send poll via web session`),err}}export{markdownToWhatsApp as i,sendPollWhatsApp as n,sendReactionWhatsApp as r,sendMessageWhatsApp as t};
1
+ import{E as toWhatsappJid,U as getChildLogger,l as escapeRegExp}from"./utils-DbaBVFaK.js";import{t as createSubsystemLogger}from"./subsystem-B3TqcCrZ.js";import{r as loadConfig}from"./io-BLBq4T2o.js";import{t as resolveMarkdownTableMode}from"./markdown-tables-P6uoUSFa.js";import{a as loadWebMedia}from"./ir-5BNoIXZm.js";import{n as normalizePollInput}from"./polls-IFZVG0cW.js";import{t as convertMarkdownTables}from"./tables-ERcoWFDp.js";import{n as requireActiveWebListener}from"./active-listener-Dcg19lJG.js";import{randomUUID}from"node:crypto";const FENCE_PLACEHOLDER=`\0FENCE`,INLINE_CODE_PLACEHOLDER=`\0CODE`;function markdownToWhatsApp(text){if(!text)return text;let fences=[],result=text.replace(/```[\s\S]*?```/g,match=>(fences.push(match),`${FENCE_PLACEHOLDER}${fences.length-1}`)),inlineCodes=[];return result=result.replace(/`[^`\n]+`/g,match=>(inlineCodes.push(match),`${INLINE_CODE_PLACEHOLDER}${inlineCodes.length-1}`)),result=result.replace(/\*\*(.+?)\*\*/g,`*$1*`),result=result.replace(/__(.+?)__/g,`*$1*`),result=result.replace(/~~(.+?)~~/g,`~$1~`),result=result.replace(RegExp(`${escapeRegExp(INLINE_CODE_PLACEHOLDER)}(\\d+)`,`g`),(_,idx)=>inlineCodes[Number(idx)]??``),result=result.replace(RegExp(`${escapeRegExp(FENCE_PLACEHOLDER)}(\\d+)`,`g`),(_,idx)=>fences[Number(idx)]??``),result}const outboundLog=createSubsystemLogger(`gateway/channels/whatsapp`).child(`outbound`);async function sendMessageWhatsApp(to,body,options){let text=body,correlationId=randomUUID(),startedAt=Date.now(),{listener:active,accountId:resolvedAccountId}=requireActiveWebListener(options.accountId),tableMode=resolveMarkdownTableMode({cfg:loadConfig(),channel:`whatsapp`,accountId:resolvedAccountId??options.accountId});text=convertMarkdownTables(text??``,tableMode),text=markdownToWhatsApp(text);let logger=getChildLogger({module:`web-outbound`,correlationId,to});try{let jid=toWhatsappJid(to),mediaBuffer,mediaType,documentFileName;if(options.mediaUrl){let media=await loadWebMedia(options.mediaUrl,{localRoots:options.mediaLocalRoots}),caption=text||void 0;mediaBuffer=media.buffer,mediaType=media.contentType,media.kind===`audio`?mediaType=media.contentType===`audio/ogg`?`audio/ogg; codecs=opus`:media.contentType??`application/octet-stream`:media.kind===`video`||media.kind===`image`?text=caption??``:(text=caption??``,documentFileName=media.fileName)}outboundLog.info(`Sending message -> ${jid}${options.mediaUrl?` (media)`:``}`),logger.info({jid,hasMedia:!!options.mediaUrl},`sending message`),await active.sendComposingTo(to);let accountId=options.accountId?.trim()?resolvedAccountId:void 0,sendOptions=options.gifPlayback||accountId||documentFileName?{...options.gifPlayback?{gifPlayback:!0}:{},...documentFileName?{fileName:documentFileName}:{},accountId}:void 0,messageId=(sendOptions?await active.sendMessage(to,text,mediaBuffer,mediaType,sendOptions):await active.sendMessage(to,text,mediaBuffer,mediaType))?.messageId??`unknown`,durationMs=Date.now()-startedAt;return outboundLog.info(`Sent message ${messageId} -> ${jid}${options.mediaUrl?` (media)`:``} (${durationMs}ms)`),logger.info({jid,messageId},`sent message`),{messageId,toJid:jid}}catch(err){throw logger.error({err:String(err),to,hasMedia:!!options.mediaUrl},`failed to send via web session`),err}}async function sendReactionWhatsApp(chatJid,messageId,emoji,options){let correlationId=randomUUID(),{listener:active}=requireActiveWebListener(options.accountId),logger=getChildLogger({module:`web-outbound`,correlationId,chatJid,messageId});try{let jid=toWhatsappJid(chatJid);outboundLog.info(`Sending reaction "${emoji}" -> message ${messageId}`),logger.info({chatJid:jid,messageId,emoji},`sending reaction`),await active.sendReaction(chatJid,messageId,emoji,options.fromMe??!1,options.participant),outboundLog.info(`Sent reaction "${emoji}" -> message ${messageId}`),logger.info({chatJid:jid,messageId,emoji},`sent reaction`)}catch(err){throw logger.error({err:String(err),chatJid,messageId,emoji},`failed to send reaction via web session`),err}}async function sendPollWhatsApp(to,poll,options){let correlationId=randomUUID(),startedAt=Date.now(),{listener:active}=requireActiveWebListener(options.accountId),logger=getChildLogger({module:`web-outbound`,correlationId,to});try{let jid=toWhatsappJid(to),normalized=normalizePollInput(poll,{maxOptions:12});outboundLog.info(`Sending poll -> ${jid}: "${normalized.question}"`),logger.info({jid,question:normalized.question,optionCount:normalized.options.length,maxSelections:normalized.maxSelections},`sending poll`);let messageId=(await active.sendPoll(to,normalized))?.messageId??`unknown`,durationMs=Date.now()-startedAt;return outboundLog.info(`Sent poll ${messageId} -> ${jid} (${durationMs}ms)`),logger.info({jid,messageId},`sent poll`),{messageId,toJid:jid}}catch(err){throw logger.error({err:String(err),to,question:poll.question},`failed to send poll via web session`),err}}export{markdownToWhatsApp as i,sendPollWhatsApp as n,sendReactionWhatsApp as r,sendMessageWhatsApp 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"./ssrf-p9k-iapc.js";import"./image-ops-C8IUQKjn.js";import"./message-channel-D_jXxXQj.js";import"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./bindings-DR59065T.js";import"./fetch-guard-8mwt3-hm.js";import"./fetch-BuOLY9KP.js";import"./chunk-FCBlVOyo.js";import"./markdown-tables-P6uoUSFa.js";import"./ir-5BNoIXZm.js";import"./render-D1dVTEB1.js";import"./tables-ERcoWFDp.js";import"./active-listener-Dcg19lJG.js";import{n as sendPollWhatsApp,r as sendReactionWhatsApp,t as sendMessageWhatsApp}from"./outbound-OI-t5zZ0.js";export{sendMessageWhatsApp,sendPollWhatsApp,sendReactionWhatsApp};
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"./ssrf-p9k-iapc.js";import"./image-ops-C8IUQKjn.js";import"./message-channel-D_jXxXQj.js";import"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./bindings-DR59065T.js";import"./fetch-guard-8mwt3-hm.js";import"./fetch-BuOLY9KP.js";import"./chunk-FCBlVOyo.js";import"./markdown-tables-P6uoUSFa.js";import"./ir-5BNoIXZm.js";import"./render-D1dVTEB1.js";import"./tables-ERcoWFDp.js";import"./active-listener-Dcg19lJG.js";import{n as sendPollWhatsApp,r as sendReactionWhatsApp,t as sendMessageWhatsApp}from"./outbound-CAirtWr1.js";export{sendMessageWhatsApp,sendPollWhatsApp,sendReactionWhatsApp};
@@ -1 +1 @@
1
- function createDefaultDeps(){return{sendMessageWhatsApp:async(...args)=>{let{sendMessageWhatsApp}=await import(`./web-D-NSyF6b.js`);return await sendMessageWhatsApp(...args)},sendMessageTelegram:async(...args)=>{let{sendMessageTelegram}=await import(`./send-CJHXQvVl.js`);return await sendMessageTelegram(...args)},sendMessageDiscord:async(...args)=>{let{sendMessageDiscord}=await import(`./send-DnMzjS7L.js`);return await sendMessageDiscord(...args)},sendMessageSlack:async(...args)=>{let{sendMessageSlack}=await import(`./send-BU_-BGmf.js`);return await sendMessageSlack(...args)},sendMessageSignal:async(...args)=>{let{sendMessageSignal}=await import(`./send-B1rJLLpr.js`);return await sendMessageSignal(...args)},sendMessageIMessage:async(...args)=>{let{sendMessageIMessage}=await import(`./send-Q-uTkSFE.js`);return await sendMessageIMessage(...args)}}}function createOutboundSendDeps$1(deps){return{sendWhatsApp:deps.sendMessageWhatsApp,sendTelegram:deps.sendMessageTelegram,sendDiscord:deps.sendMessageDiscord,sendSlack:deps.sendMessageSlack,sendSignal:deps.sendMessageSignal,sendIMessage:deps.sendMessageIMessage}}function createOutboundSendDeps(deps){return{sendWhatsApp:deps.sendMessageWhatsApp,sendTelegram:deps.sendMessageTelegram,sendDiscord:deps.sendMessageDiscord,sendSlack:deps.sendMessageSlack,sendSignal:deps.sendMessageSignal,sendIMessage:deps.sendMessageIMessage}}export{createDefaultDeps as n,createOutboundSendDeps$1 as r,createOutboundSendDeps as t};
1
+ function createDefaultDeps(){return{sendMessageWhatsApp:async(...args)=>{let{sendMessageWhatsApp}=await import(`./web-BXLk9UT2.js`);return await sendMessageWhatsApp(...args)},sendMessageTelegram:async(...args)=>{let{sendMessageTelegram}=await import(`./send-DxwfUIN-.js`);return await sendMessageTelegram(...args)},sendMessageDiscord:async(...args)=>{let{sendMessageDiscord}=await import(`./send-2dRKMWtl.js`);return await sendMessageDiscord(...args)},sendMessageSlack:async(...args)=>{let{sendMessageSlack}=await import(`./send-BVal50Bi.js`);return await sendMessageSlack(...args)},sendMessageSignal:async(...args)=>{let{sendMessageSignal}=await import(`./send-bNp87SIq.js`);return await sendMessageSignal(...args)},sendMessageIMessage:async(...args)=>{let{sendMessageIMessage}=await import(`./send-Cqea2UFo.js`);return await sendMessageIMessage(...args)}}}function createOutboundSendDeps$1(deps){return{sendWhatsApp:deps.sendMessageWhatsApp,sendTelegram:deps.sendMessageTelegram,sendDiscord:deps.sendMessageDiscord,sendSlack:deps.sendMessageSlack,sendSignal:deps.sendMessageSignal,sendIMessage:deps.sendMessageIMessage}}function createOutboundSendDeps(deps){return{sendWhatsApp:deps.sendMessageWhatsApp,sendTelegram:deps.sendMessageTelegram,sendDiscord:deps.sendMessageDiscord,sendSlack:deps.sendMessageSlack,sendSignal:deps.sendMessageSignal,sendIMessage:deps.sendMessageIMessage}}export{createDefaultDeps as n,createOutboundSendDeps$1 as r,createOutboundSendDeps as t};
@@ -1 +1 @@
1
- import"./paths-5FcIFMsj.js";import{B as theme}from"./utils-DbaBVFaK.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-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{r as loadConfig}from"./io-3R_ZyUxB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-_1Ca6jGb.js";import{r as normalizeChannelId}from"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./bindings-DR59065T.js";import{c as listPairingChannels,l as notifyPairingApproved,n as approveChannelPairingCode,r as listChannelPairingRequests}from"./pairing-store-CbvMJhD3.js";import{t as formatDocsLink}from"./links-BgWWaaOT.js";import{t as resolvePairingIdLabel}from"./pairing-labels-BW5jQZlr.js";import{t as renderTable}from"./table-BoCHYKoQ.js";function parseChannel(raw,channels){let value=(typeof raw==`string`?raw:typeof raw==`number`||typeof raw==`boolean`?String(raw):``).trim().toLowerCase();if(!value)throw Error(`Channel required`);let normalized=normalizeChannelId(value);if(normalized){if(!channels.includes(normalized))throw Error(`Channel ${normalized} does not support pairing`);return normalized}if(/^[a-z][a-z0-9_-]{0,63}$/.test(value))return value;throw Error(`Invalid channel: ${value}`)}async function notifyApproved(channel,id){await notifyPairingApproved({channelId:channel,id,cfg:loadConfig()})}function registerPairingCli(program){let channels=listPairingChannels(),pairing=program.command(`pairing`).description(`Secure DM pairing (approve inbound requests)`).addHelpText(`after`,()=>`\n${theme.muted(`Docs:`)} ${formatDocsLink(`/cli/pairing`,`docs.builderforce.ai/cli/pairing`)}\n`);pairing.command(`list`).description(`List pending pairing requests`).option(`--channel <channel>`,`Channel (${channels.join(`, `)})`).option(`--account <accountId>`,`Account id (for multi-account channels)`).argument(`[channel]`,`Channel (${channels.join(`, `)})`).option(`--json`,`Print JSON`,!1).action(async(channelArg,opts)=>{let channelRaw=opts.channel??channelArg;if(!channelRaw)throw Error(`Channel required. Use --channel <channel> or pass it as the first argument (expected one of: ${channels.join(`, `)})`);let channel=parseChannel(channelRaw,channels),accountId=String(opts.account??``).trim(),requests=accountId?await listChannelPairingRequests(channel,process.env,accountId):await listChannelPairingRequests(channel);if(opts.json){defaultRuntime.log(JSON.stringify({channel,requests},null,2));return}if(requests.length===0){defaultRuntime.log(theme.muted(`No pending ${channel} pairing requests.`));return}let idLabel=resolvePairingIdLabel(channel),tableWidth=Math.max(60,(process.stdout.columns??120)-1);defaultRuntime.log(`${theme.heading(`Pairing requests`)} ${theme.muted(`(${requests.length})`)}`),defaultRuntime.log(renderTable({width:tableWidth,columns:[{key:`Code`,header:`Code`,minWidth:10},{key:`ID`,header:idLabel,minWidth:12,flex:!0},{key:`Meta`,header:`Meta`,minWidth:8,flex:!0},{key:`Requested`,header:`Requested`,minWidth:12}],rows:requests.map(r=>({Code:r.code,ID:r.id,Meta:r.meta?JSON.stringify(r.meta):``,Requested:r.createdAt}))}).trimEnd())}),pairing.command(`approve`).description(`Approve a pairing code and allow that sender`).option(`--channel <channel>`,`Channel (${channels.join(`, `)})`).option(`--account <accountId>`,`Account id (for multi-account channels)`).argument(`<codeOrChannel>`,`Pairing code (or channel when using 2 args)`).argument(`[code]`,`Pairing code (when channel is passed as the 1st arg)`).option(`--notify`,`Notify the requester on the same channel`,!1).action(async(codeOrChannel,code,opts)=>{let channelRaw=opts.channel??codeOrChannel,resolvedCode=opts.channel?codeOrChannel:code;if(!opts.channel&&!code)throw Error(`Usage: ${formatCliCommand(`builderforce pairing approve <channel> <code>`)} (or: ${formatCliCommand(`builderforce pairing approve --channel <channel> <code>`)})`);if(opts.channel&&code!=null)throw Error(`Too many arguments. Use: ${formatCliCommand(`builderforce pairing approve --channel <channel> <code>`)}`);let channel=parseChannel(channelRaw,channels),accountId=String(opts.account??``).trim(),approved=accountId?await approveChannelPairingCode({channel,code:String(resolvedCode),accountId}):await approveChannelPairingCode({channel,code:String(resolvedCode)});if(!approved)throw Error(`No pending pairing request found for code: ${String(resolvedCode)}`);defaultRuntime.log(`${theme.success(`Approved`)} ${theme.muted(channel)} sender ${theme.command(approved.id)}.`),opts.notify&&await notifyApproved(channel,approved.id).catch(err=>{defaultRuntime.log(theme.warn(`Failed to notify requester: ${String(err)}`))})})}export{registerPairingCli};
1
+ import"./paths-5FcIFMsj.js";import{B as theme}from"./utils-DbaBVFaK.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{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{r as loadConfig}from"./io-BLBq4T2o.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BgV_FYSq.js";import{r as normalizeChannelId}from"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./bindings-DR59065T.js";import{c as listPairingChannels,l as notifyPairingApproved,n as approveChannelPairingCode,r as listChannelPairingRequests}from"./pairing-store-ti3FEkmr.js";import{t as formatDocsLink}from"./links-BgWWaaOT.js";import{t as resolvePairingIdLabel}from"./pairing-labels-oA-nKTaW.js";import{t as renderTable}from"./table-BoCHYKoQ.js";function parseChannel(raw,channels){let value=(typeof raw==`string`?raw:typeof raw==`number`||typeof raw==`boolean`?String(raw):``).trim().toLowerCase();if(!value)throw Error(`Channel required`);let normalized=normalizeChannelId(value);if(normalized){if(!channels.includes(normalized))throw Error(`Channel ${normalized} does not support pairing`);return normalized}if(/^[a-z][a-z0-9_-]{0,63}$/.test(value))return value;throw Error(`Invalid channel: ${value}`)}async function notifyApproved(channel,id){await notifyPairingApproved({channelId:channel,id,cfg:loadConfig()})}function registerPairingCli(program){let channels=listPairingChannels(),pairing=program.command(`pairing`).description(`Secure DM pairing (approve inbound requests)`).addHelpText(`after`,()=>`\n${theme.muted(`Docs:`)} ${formatDocsLink(`/cli/pairing`,`docs.builderforce.ai/cli/pairing`)}\n`);pairing.command(`list`).description(`List pending pairing requests`).option(`--channel <channel>`,`Channel (${channels.join(`, `)})`).option(`--account <accountId>`,`Account id (for multi-account channels)`).argument(`[channel]`,`Channel (${channels.join(`, `)})`).option(`--json`,`Print JSON`,!1).action(async(channelArg,opts)=>{let channelRaw=opts.channel??channelArg;if(!channelRaw)throw Error(`Channel required. Use --channel <channel> or pass it as the first argument (expected one of: ${channels.join(`, `)})`);let channel=parseChannel(channelRaw,channels),accountId=String(opts.account??``).trim(),requests=accountId?await listChannelPairingRequests(channel,process.env,accountId):await listChannelPairingRequests(channel);if(opts.json){defaultRuntime.log(JSON.stringify({channel,requests},null,2));return}if(requests.length===0){defaultRuntime.log(theme.muted(`No pending ${channel} pairing requests.`));return}let idLabel=resolvePairingIdLabel(channel),tableWidth=Math.max(60,(process.stdout.columns??120)-1);defaultRuntime.log(`${theme.heading(`Pairing requests`)} ${theme.muted(`(${requests.length})`)}`),defaultRuntime.log(renderTable({width:tableWidth,columns:[{key:`Code`,header:`Code`,minWidth:10},{key:`ID`,header:idLabel,minWidth:12,flex:!0},{key:`Meta`,header:`Meta`,minWidth:8,flex:!0},{key:`Requested`,header:`Requested`,minWidth:12}],rows:requests.map(r=>({Code:r.code,ID:r.id,Meta:r.meta?JSON.stringify(r.meta):``,Requested:r.createdAt}))}).trimEnd())}),pairing.command(`approve`).description(`Approve a pairing code and allow that sender`).option(`--channel <channel>`,`Channel (${channels.join(`, `)})`).option(`--account <accountId>`,`Account id (for multi-account channels)`).argument(`<codeOrChannel>`,`Pairing code (or channel when using 2 args)`).argument(`[code]`,`Pairing code (when channel is passed as the 1st arg)`).option(`--notify`,`Notify the requester on the same channel`,!1).action(async(codeOrChannel,code,opts)=>{let channelRaw=opts.channel??codeOrChannel,resolvedCode=opts.channel?codeOrChannel:code;if(!opts.channel&&!code)throw Error(`Usage: ${formatCliCommand(`builderforce pairing approve <channel> <code>`)} (or: ${formatCliCommand(`builderforce pairing approve --channel <channel> <code>`)})`);if(opts.channel&&code!=null)throw Error(`Too many arguments. Use: ${formatCliCommand(`builderforce pairing approve --channel <channel> <code>`)}`);let channel=parseChannel(channelRaw,channels),accountId=String(opts.account??``).trim(),approved=accountId?await approveChannelPairingCode({channel,code:String(resolvedCode),accountId}):await approveChannelPairingCode({channel,code:String(resolvedCode)});if(!approved)throw Error(`No pending pairing request found for code: ${String(resolvedCode)}`);defaultRuntime.log(`${theme.success(`Approved`)} ${theme.muted(channel)} sender ${theme.command(approved.id)}.`),opts.notify&&await notifyApproved(channel,approved.id).catch(err=>{defaultRuntime.log(theme.warn(`Failed to notify requester: ${String(err)}`))})})}export{registerPairingCli};