@seanhogg/builderforce-agents 2026.9.5 → 2026.9.6

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 (205) hide show
  1. package/dist/{agent-CBRDuLO-.js → agent-59_cdTZl.js} +1 -1
  2. package/dist/{agent-CCY1r5YW.js → agent-CvMM49lm.js} +1 -1
  3. package/dist/{agents-DW3hte-y.js → agents-2d7A-Uwz.js} +1 -1
  4. package/dist/{agents-Ce4bN10e.js → agents-BdOgv61S.js} +1 -1
  5. package/dist/{audio-preflight-BvzGdNYy.js → audio-preflight-CmX2XJ3N.js} +1 -1
  6. package/dist/{audio-preflight-BYMboYmW.js → audio-preflight-Dnw3oDJr.js} +1 -1
  7. package/dist/{audio-preflight-CEOxJosQ.js → audio-preflight-HcRdB0oH.js} +1 -1
  8. package/dist/{audio-preflight-CswNxppe.js → audio-preflight-Sh649dxR.js} +1 -1
  9. package/dist/{auth-choice-DSLN0TLU.js → auth-choice-D06_TWBf.js} +1 -1
  10. package/dist/{auth-choice-BTrUlYmE.js → auth-choice-DyxxR025.js} +1 -1
  11. package/dist/{auth-choice.apply-BZ7E08Yb.js → auth-choice.apply-CUuLdlQd.js} +1 -1
  12. package/dist/{auth-choice.apply-D3EY1pZ3.js → auth-choice.apply-CfFhu_Vk.js} +1 -1
  13. package/dist/{auth-choice.apply-5dpCNO0l.js → auth-choice.apply-D57XA_d9.js} +1 -1
  14. package/dist/{auth-choice.apply-3tPFL-eH.js → auth-choice.apply-s_rOXFVz.js} +1 -1
  15. package/dist/{auth-choice.apply.transformers-B_Q6e8Yk.js → auth-choice.apply.transformers-CqQSUnsx.js} +1 -1
  16. package/dist/{auth-choice.apply.transformers-D1EzC906.js → auth-choice.apply.transformers-DXBWOilg.js} +1 -1
  17. package/dist/{auth-choice.apply.transformers-BJbpyCWs.js → auth-choice.apply.transformers-DizfkAmz.js} +1 -1
  18. package/dist/{auth-choice.apply.transformers-vLzCo5ew.js → auth-choice.apply.transformers-vyvtAxcX.js} +1 -1
  19. package/dist/{banner-DVNoUX5I.js → banner-BXpp_pEd.js} +1 -1
  20. package/dist/build-info.json +3 -3
  21. package/dist/{builderforce-Bs_G8kBN.js → builderforce-BdJAOfvE.js} +2 -2
  22. package/dist/{builderforce-BN_So1di.js → builderforce-BrFUSx35.js} +2 -2
  23. package/dist/{builderforce-directory-sync-BCZK4FYJ.js → builderforce-directory-sync-CFiQew6N.js} +1 -1
  24. package/dist/{builderforce-directory-sync-DHfiUf2g.js → builderforce-directory-sync-DIQQT09l.js} +1 -1
  25. package/dist/{builderforce-onboarding-Bbjz8F-r.js → builderforce-onboarding-CoGJY95Q.js} +1 -1
  26. package/dist/{builderforce-onboarding-8lL2bgtL.js → builderforce-onboarding-DyYM_cib.js} +1 -1
  27. package/dist/{builderforcellm-syscheck-CyZiwcdF.js → builderforcellm-syscheck-CfFrfeV2.js} +1 -1
  28. package/dist/{builderforcellm-syscheck-DMjMJNFI.js → builderforcellm-syscheck-DGZKIwPC.js} +1 -1
  29. package/dist/bundled/boot-md/handler.js +1 -1
  30. package/dist/bundled/session-memory/handler.js +1 -1
  31. package/dist/{channel-options-Zk5QnNPR.js → channel-options--DZ4jYy9.js} +1 -1
  32. package/dist/{channel-options-Cbz6vcgo.js → channel-options-xVK4amr4.js} +1 -1
  33. package/dist/{channel-web-1xD-Ad2T.js → channel-web-9vO41fn2.js} +1 -1
  34. package/dist/{channels-cli-CiVlP8_q.js → channels-cli-Ch1sZ58k.js} +1 -1
  35. package/dist/{channels-cli-BOcpgY_W.js → channels-cli-YMSOJUmp.js} +1 -1
  36. package/dist/chrome-Bi-3xZj-.js +4 -0
  37. package/dist/chrome-C6oWWmHX.js +4 -0
  38. package/dist/{cli-6znoaKr2.js → cli-gsxv7DrZ.js} +1 -1
  39. package/dist/{cli-BPwpRE1j.js → cli-zC5qoRAp.js} +1 -1
  40. package/dist/{command-registry-BTxAGdlS.js → command-registry-BXLjR3kb.js} +1 -1
  41. package/dist/{command-registry-BZINHmI9.js → command-registry-I83E6HLw.js} +1 -1
  42. package/dist/{completion-cli-BwCfUaHz.js → completion-cli-BQCxFDqY.js} +1 -1
  43. package/dist/{completion-cli-vR4Sx9zB.js → completion-cli-CDy8f_Fg.js} +1 -1
  44. package/dist/{completion-cli-C8kMJ401.js → completion-cli-DbIxXK1B.js} +1 -1
  45. package/dist/{completion-cli-D8WkqtSU.js → completion-cli-ydxyAE7J.js} +1 -1
  46. package/dist/{config-cli-BYFA4Nin.js → config-cli-5ZSrACPR.js} +1 -1
  47. package/dist/{config-cli-DVpEv0oj.js → config-cli-BvJso6op.js} +1 -1
  48. package/dist/{configure-COeSbyyP.js → configure-1e4C38zp.js} +1 -1
  49. package/dist/{configure-CW2bJ91q.js → configure-B_oI_bg-.js} +1 -1
  50. package/dist/{configure-B_juJzVi.js → configure-Dp71zeJI.js} +1 -1
  51. package/dist/{configure-CgkUUUpM.js → configure-NxmuXXEd.js} +1 -1
  52. package/dist/{deliver-qM1Zkf4i.js → deliver-C6HTqnzY.js} +1 -1
  53. package/dist/{deliver-BNMupwo6.js → deliver-CdwCHH01.js} +1 -1
  54. package/dist/{deliver-Bs-FVPQ4.js → deliver-DFhj1d_t.js} +1 -1
  55. package/dist/{deliver-C5lVQcrs.js → deliver-XGIFv80r.js} +1 -1
  56. package/dist/{deps-DWFMK9Xg.js → deps-C4YVdrEi.js} +1 -1
  57. package/dist/{doctor-completion-s5vcMc-C.js → doctor-completion-DhIR9uqB.js} +1 -1
  58. package/dist/{doctor-completion-BdMxCat-.js → doctor-completion-Dpy-8HV9.js} +1 -1
  59. package/dist/{embedded-CRoX1qTh.js → embedded-Cw4g0mzl.js} +7 -7
  60. package/dist/{embedded-DpSS2q2a.js → embedded-DG3sEMyg.js} +7 -7
  61. package/dist/{embedded-helpers-BrfnCpCe.js → embedded-helpers-3FEGD_4b.js} +1 -1
  62. package/dist/{embedded-helpers-Q5h1lA6D.js → embedded-helpers-DGDYymYx.js} +1 -1
  63. package/dist/entry.js +1 -1
  64. package/dist/extensionAPI.js +1 -1
  65. package/dist/{gateway-cli-oSSOT67p.js → gateway-cli-BBu6KI7r.js} +4 -4
  66. package/dist/{gateway-cli-DzxNTkvL.js → gateway-cli-CSmbpS6n.js} +4 -4
  67. package/dist/{health-_L8Avf4v.js → health-AOM42u9C.js} +1 -1
  68. package/dist/{health-hXlukqbf.js → health-CRIXA8je.js} +1 -1
  69. package/dist/{health-B_qWRpsT.js → health-Cuh0tZl2.js} +1 -1
  70. package/dist/{hooks-cli-C-vbyL2y.js → hooks-cli-BeqvyPiX.js} +1 -1
  71. package/dist/{hooks-cli-7gBXRQ81.js → hooks-cli-CYI9ZvNI.js} +1 -1
  72. package/dist/index.js +2 -2
  73. package/dist/{ink-session-DpO3VOYc.js → ink-session-MNcfJzij.js} +1 -1
  74. package/dist/{ink-session-CZj35xTR.js → ink-session-VqYNJYzq.js} +1 -1
  75. package/dist/llm-slug-generator.js +1 -1
  76. package/dist/{mamba-state-engine-CFwb8DcP.js → mamba-state-engine-BYmUnYwn.js} +1 -1
  77. package/dist/{mamba-state-engine-Ck2JCfL6.js → mamba-state-engine-BloJzrxU.js} +1 -1
  78. package/dist/{models-PPv9KRbb.js → models-B6kkCBLd.js} +1 -1
  79. package/dist/{models-cli-btaamH96.js → models-cli-C7u8eLls.js} +1 -1
  80. package/dist/{models-cli-BUDSwmIY.js → models-cli-DpbpZwjy.js} +1 -1
  81. package/dist/{models-DMrs_Zsc.js → models-hEa3avo7.js} +1 -1
  82. package/dist/{onboard-4JByma4r.js → onboard-BHlI_UVY.js} +2 -2
  83. package/dist/{onboard-Dq_XQQXY.js → onboard-BW5J0Ym8.js} +2 -2
  84. package/dist/{onboard-channels-Dzyeem1L.js → onboard-channels-BkrhZ79I.js} +1 -1
  85. package/dist/{onboard-channels-D4g6xuSC.js → onboard-channels-DXIqdoto.js} +1 -1
  86. package/dist/{onboard-channels-Dir2EguP.js → onboard-channels-V51s9X-h.js} +1 -1
  87. package/dist/{onboard-channels-UZOCuxN7.js → onboard-channels-fyGQ1v4S.js} +1 -1
  88. package/dist/{onboard-interactive-DvNhkCNr.js → onboard-interactive-ClPMlCIl.js} +1 -1
  89. package/dist/{onboard-interactive-DyyEDd9a.js → onboard-interactive-D6IBBU8m.js} +1 -1
  90. package/dist/{onboard-interactive-CwNfYxGe.js → onboard-interactive-DEeqmoeW.js} +1 -1
  91. package/dist/{onboard-interactive-Co2bcd7g.js → onboard-interactive-DSZak3YX.js} +1 -1
  92. package/dist/{onboarding-DBL-H1Qu.js → onboarding-CYOfGpd5.js} +3 -3
  93. package/dist/{onboarding-CIxLpuFP.js → onboarding-DIxm_q7P.js} +3 -3
  94. package/dist/{onboarding.finalize-CGGbkAOL.js → onboarding.finalize-Co5L0rNp.js} +1 -1
  95. package/dist/{onboarding.finalize-R3TfibWY.js → onboarding.finalize-DAwpQa7n.js} +1 -1
  96. package/dist/{outbound-send-deps-CsJgGsii.js → outbound-send-deps-Cys_MtmC.js} +1 -1
  97. package/dist/{plugin-registry-Ty9w94Rd.js → plugin-registry-BM1-sG-e.js} +1 -1
  98. package/dist/{plugin-registry-BkGhcUDV.js → plugin-registry-CAy3I1K1.js} +1 -1
  99. package/dist/{plugin-registry-BenvgIsJ.js → plugin-registry-DjmzOS3n.js} +1 -1
  100. package/dist/{plugin-registry-DZirturB.js → plugin-registry-l2iN7_1l.js} +1 -1
  101. package/dist/plugin-sdk/agent-runtime/src/builderforce/ports.d.ts +1 -1
  102. package/dist/plugin-sdk/agent-runtime/src/infra/limbic-system-service.d.ts +2 -3
  103. package/dist/plugin-sdk/{audio-preflight-lhP946UF.js → audio-preflight-BbtfbLzo.js} +1 -1
  104. package/dist/plugin-sdk/{channel-web-CzXHQXgb.js → channel-web-BHose9yJ.js} +1 -1
  105. package/dist/plugin-sdk/index.js +1 -1
  106. package/dist/plugin-sdk/packages/agent-tools/src/index.d.ts +0 -1
  107. package/dist/plugin-sdk/packages/agent-tools/src/psychometric-dims.d.ts +2 -2
  108. package/dist/plugin-sdk/packages/agent-tools/src/psychometrics.d.ts +38 -5
  109. package/dist/plugin-sdk/packages/agent-tools/src/spec.d.ts +3 -1
  110. package/dist/plugin-sdk/{reply-DkmZ32IH.js → reply-V98uAjNN.js} +5 -5
  111. package/dist/plugin-sdk/{runner-DeqVi2ay.js → runner-BpFNG45j.js} +1 -1
  112. package/dist/plugin-sdk/{src-yVjde9hC.js → src-pvdIxmTY.js} +2 -2
  113. package/dist/plugin-sdk/{tool-loop-detection-AO2R09bJ.js → tool-loop-detection-Bjiit8CZ.js} +1 -1
  114. package/dist/plugin-sdk/{web-D-h3WpSq.js → web-Bq6nGRsB.js} +1 -1
  115. package/dist/{plugins-r-hGfiMK.js → plugins-BbovMu2g.js} +1 -1
  116. package/dist/{plugins-ChYVZuHy.js → plugins-DrkC1ANW.js} +1 -1
  117. package/dist/{plugins-cli-CKQ2X7tA.js → plugins-cli-CqtTn-Gv.js} +1 -1
  118. package/dist/{plugins-cli-CB7e9eCK.js → plugins-cli-DWlQnRpV.js} +1 -1
  119. package/dist/{program-D71K23KC.js → program-DOGUG9Uz.js} +2 -2
  120. package/dist/{program-context-B9V62ZJg.js → program-context-DBtTOKkf.js} +1 -1
  121. package/dist/{project-context-Cnqfr64Z.js → project-context-C5KLsMTc.js} +1 -1
  122. package/dist/{project-context-DXP12xhk.js → project-context-Cg0S9eFT.js} +1 -1
  123. package/dist/project-context-DbBD_r4v.js +1 -0
  124. package/dist/project-context-nIzFswHk.js +1 -0
  125. package/dist/project-context-store-B96x1Lfk.js +1 -0
  126. package/dist/{project-context-store-C8TROXjr.js → project-context-store-BS994lZX.js} +1 -1
  127. package/dist/{project-context-store-ClFt-YDL.js → project-context-store-BSIWJD6S.js} +1 -1
  128. package/dist/project-context-store-BzX1YdMP.js +1 -0
  129. package/dist/{prompt-select-styled-Cect8vJu.js → prompt-select-styled-2q_0LOx1.js} +1 -1
  130. package/dist/{prompt-select-styled-CJBJZiX_.js → prompt-select-styled-D31D9EIl.js} +1 -1
  131. package/dist/{provider-auth-helpers-DItSj71N.js → provider-auth-helpers-9Ut-MHV9.js} +1 -1
  132. package/dist/{provider-auth-helpers-ByvJdQT3.js → provider-auth-helpers-u1GAP4Bi.js} +1 -1
  133. package/dist/{provider-dispatcher-E-RjX6WG.js → provider-dispatcher-4KsB_bCw.js} +1 -1
  134. package/dist/{provider-dispatcher-D6-kUWf8.js → provider-dispatcher-CG7kSp65.js} +1 -1
  135. package/dist/{push-apns-B6YfFR5s.js → push-apns-CEzi4ars.js} +1 -1
  136. package/dist/{push-apns-n8P3oclR.js → push-apns-oUAHr48A.js} +1 -1
  137. package/dist/{pw-ai-BpY-eMJT.js → pw-ai-CfV_5FWo.js} +1 -1
  138. package/dist/{pw-ai-Bu1w-1rC.js → pw-ai-Dx8XRyPq.js} +1 -1
  139. package/dist/{register.agent-CAsV5dRf.js → register.agent-C84ud-cS.js} +1 -1
  140. package/dist/{register.agent-DQ4zQymV.js → register.agent-Db9SzkZg.js} +1 -1
  141. package/dist/{register.configure-HcPL-Na2.js → register.configure-BfPiEcFk.js} +1 -1
  142. package/dist/{register.configure-B-xRsB-s.js → register.configure-WYMz_fwM.js} +1 -1
  143. package/dist/{register.connect-BcZeAJ1s.js → register.connect-CMN7lqC5.js} +1 -1
  144. package/dist/{register.connect-ChZQOiYF.js → register.connect-Dqhd81kK.js} +1 -1
  145. package/dist/{register.maintenance-C-7Arpam.js → register.maintenance-BpQE-3eC.js} +1 -1
  146. package/dist/{register.maintenance-Jdfg2LKA.js → register.maintenance-DjKxt-jl.js} +1 -1
  147. package/dist/{register.message-D1IU3K0a.js → register.message-C4Gf388m.js} +1 -1
  148. package/dist/{register.message-C3cFBIXY.js → register.message-D5A7-_wN.js} +1 -1
  149. package/dist/{register.onboard-DJ2QNnOi.js → register.onboard-BF5tXr7K.js} +1 -1
  150. package/dist/{register.onboard-DjrhC3jh.js → register.onboard-BO_OtYg9.js} +1 -1
  151. package/dist/{register.setup-BNUqkiVa.js → register.setup-BzDbYjEw.js} +1 -1
  152. package/dist/{register.setup-C8XgG5Zt.js → register.setup-CaWt1bhf.js} +1 -1
  153. package/dist/{register.status-health-sessions-DcqlqAhs.js → register.status-health-sessions-BbYzFw1X.js} +1 -1
  154. package/dist/{register.status-health-sessions-CBTZZ0Rh.js → register.status-health-sessions-CDD6Eoxf.js} +1 -1
  155. package/dist/{register.subclis-CqVl0uO4.js → register.subclis-Cfb5FUTI.js} +1 -1
  156. package/dist/{register.subclis-Meewq2dj.js → register.subclis-yYbEKj9a.js} +1 -1
  157. package/dist/{reply-BsRbeUhd.js → reply-CpGH-3If.js} +8 -8
  158. package/dist/{run-main-CFVoPcgN.js → run-main-B82VAQTQ.js} +1 -1
  159. package/dist/{runner-68-X3KHf.js → runner-BLCTET8O.js} +2 -2
  160. package/dist/{runner-CfNJMPWu.js → runner-C651oVfk.js} +2 -2
  161. package/dist/{runner-BgUG2-RV.js → runner-DCn9sBTn.js} +3 -3
  162. package/dist/{runner-BKHYCYMH.js → runner-xF3_-mDL.js} +3 -3
  163. package/dist/{server-node-events-DusCxrVm.js → server-node-events-Bam08x5E.js} +1 -1
  164. package/dist/{server-node-events-BahizW3Z.js → server-node-events-kbTUUaAA.js} +1 -1
  165. package/dist/{session-dirs-RIA98OsG.js → session-dirs-BBGuanHN.js} +1 -1
  166. package/dist/{session-dirs-Cutn9srI.js → session-dirs-DV-c-o7M.js} +1 -1
  167. package/dist/{src-BRo9ywDM.js → src-BM8G-tIl.js} +3 -3
  168. package/dist/{src-DxNC0IHE.js → src-D2-7sOAX.js} +3 -3
  169. package/dist/{src-NJhXretA.js → src-D5vOHX9i.js} +2 -2
  170. package/dist/{src-Enbbh3hH.js → src-Dptpvd0V.js} +2 -2
  171. package/dist/{status-DPza6sZ1.js → status-BcT4AI8l.js} +1 -1
  172. package/dist/{status-CMdPdaSM.js → status-C9D1ex2G.js} +1 -1
  173. package/dist/{status-CFDh5snF.js → status-D_YsiWpP.js} +1 -1
  174. package/dist/{status-SyaizSN6.js → status-V8zvPBOv.js} +1 -1
  175. package/dist/{status-C1toWVvJ.js → status-i_sJ6Ikx.js} +1 -1
  176. package/dist/{subagent-registry-oB_F2U2W.js → subagent-registry-BUKplZi1.js} +8 -8
  177. package/dist/{subagent-registry-DFzwOGge.js → subagent-registry-BgUoQjBB.js} +1 -1
  178. package/dist/{subagent-registry-C1opJIrJ.js → subagent-registry-DrrF3JoH.js} +1 -1
  179. package/dist/{tool-loop-detection-DxqiqYam.js → tool-loop-detection-Bv0aRyd6.js} +1 -1
  180. package/dist/{tool-loop-detection-3W6bLEza.js → tool-loop-detection-CgUkrbCZ.js} +1 -1
  181. package/dist/{tool-loop-detection-C3z1wqgV.js → tool-loop-detection-CshVZIOE.js} +1 -1
  182. package/dist/{tool-loop-detection-DNM8YCNW.js → tool-loop-detection-bpZ-S3A1.js} +1 -1
  183. package/dist/{tui-Dy1FnApe.js → tui-CdYI5f3k.js} +2 -2
  184. package/dist/{tui-lng2vIp3.js → tui-DgBGTw2s.js} +2 -2
  185. package/dist/{tui-cli-BTFEL897.js → tui-cli-BNeRzoEe.js} +1 -1
  186. package/dist/{tui-cli-D-cDh9DV.js → tui-cli-BZ--mp9s.js} +1 -1
  187. package/dist/{tui-stream-assembler-B_AQD4Kg.js → tui-stream-assembler-BNJE9PoS.js} +1 -1
  188. package/dist/{tui-stream-assembler-Bn1WXUGG.js → tui-stream-assembler-xFcJqFJ9.js} +1 -1
  189. package/dist/{update-cli-BdT4-P_D.js → update-cli-BATUCF7p.js} +1 -1
  190. package/dist/{update-cli-DMMSWPXh.js → update-cli-BRBoX_97.js} +1 -1
  191. package/dist/{web-BiSkmACr.js → web-BdYyXjsX.js} +1 -1
  192. package/dist/{web-CXrAweDC.js → web-C5hfXVCy.js} +1 -1
  193. package/dist/{web-BS6WUf7c.js → web-CsWqmV_E.js} +1 -1
  194. package/dist/{web-CfYUd-lX.js → web-fg3nA4Qq.js} +1 -1
  195. package/dist/{workflow-cli-Du4IfE1A.js → workflow-cli-D-o_-jfU.js} +1 -1
  196. package/dist/{workflow-cli-BuEKJ4ut.js → workflow-cli-DDWSXyi0.js} +1 -1
  197. package/package.json +6 -5
  198. package/dist/chrome-C6fODzE5.js +0 -4
  199. package/dist/chrome-Cm-kVyuA.js +0 -4
  200. package/dist/plugin-sdk/agent-runtime/src/builderforce/limbic.d.ts +0 -14
  201. package/dist/plugin-sdk/packages/agent-tools/src/limbic.d.ts +0 -104
  202. package/dist/project-context-DS52UwJZ.js +0 -1
  203. package/dist/project-context-PiiAmwVd.js +0 -1
  204. package/dist/project-context-store-B2GYSwld.js +0 -1
  205. package/dist/project-context-store-DNx9ScQ_.js +0 -1
@@ -1,2 +1,2 @@
1
- import"./paths-BHg-VHB4.js";import{c as hasHelpOrVersion,n as getCommandPath,o as getVerboseFlag}from"./argv-BgQk38nl.js";import"./registry-Cv7CoWAs.js";import{N as setVerbose,R as isRich,c as escapeRegExp,z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import{t as isTruthyEnvValue}from"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-BARnVAUE.js";import{n as replaceCliName,r as resolveCliName}from"./command-format-DTMaGKs7.js";import"./logger-AbH8mdkv.js";import"./session-key-D--2AEus.js";import"./builderforce-root-D3-p8W2n.js";import"./exec-CGuYALEs.js";import"./agent-scope-BcoQBOwz.js";import"./env-file-BIKVpYUN.js";import{U as VERSION}from"./io-BySzqKzT.js";import"./manifest-registry-DtqFvEIR.js";import"./config-Bwt58P9r.js";import"./model-discovery-DxpimsRF.js";import"./model-catalog-wcISK04b.js";import"./frontmatter-DgRc5y_l.js";import"./skills-W00EPvKR.js";import"./plugin-skills-BSUncenp.js";import"./refresh-bgGvF0aF.js";import"./client-DeQ0LbP9.js";import"./call-CjC3SRPv.js";import"./message-channel-C-yw5fZm.js";import"./subagent-registry-oB_F2U2W.js";import"./sessions-ko0LxxGk.js";import"./src-BRo9ywDM.js";import"./project-context-store-ClFt-YDL.js";import"./tokens-BNwTTeJb.js";import"./plugins-DJGW_fnS.js";import"./accounts-Z5bJpNrG.js";import"./bindings-D0uket3l.js";import"./send-gG3CFJwv.js";import"./send-DqJCViFb.js";import"./with-timeout-By0c7Ur9.js";import"./deliver-Bs-FVPQ4.js";import"./accounts-DoJYLMfS.js";import"./send-mCN63Hkn.js";import"./image-ops-Bg9yFwjX.js";import"./redact-bWj_-q3j.js";import"./errors-t5wHPcwh.js";import"./embedded-helpers-Q5h1lA6D.js";import"./sandbox-BcH7kS1y.js";import"./chrome-IJYO1tSE.js";import"./tailscale-CgCG7AVQ.js";import"./auth-B4Kn3eee.js";import"./server-context-D3iiIzvV.js";import"./routes-7QTsp3sA.js";import"./paths-GamzES41.js";import"./ssrf-BiSQzdcA.js";import"./store-C5LmVaEC.js";import"./ports-LqFTyTSK.js";import"./trash-zs6gNxed.js";import"./accounts-BT-NzzBc.js";import"./paths-BQ9W7Bs0.js";import"./tool-images-DV2HMmx4.js";import"./workspace-Cz9mCy0P.js";import"./reply-prefix-9hmbzubX.js";import"./sqlite-BEgCClMz.js";import"./memory-cli-COgt0ROi.js";import"./manager-Cob4Ofzr.js";import"./gemini-auth-BZgBIY0M.js";import"./retry-Cc6xusE8.js";import"./common-BRdxH-uH.js";import"./runner-68-X3KHf.js";import"./tool-display-BIswnHaq.js";import"./chunk-UPhdkZNp.js";import"./markdown-tables-CpqWBduK.js";import"./fetch-guard-CoGEds8D.js";import"./fetch-CUsKv8oj.js";import"./ir-6L-eU4id.js";import"./render-1ABBE2Y6.js";import"./builderforcellm-syscheck-CyZiwcdF.js";import"./session-utils-VCGKYbgW.js";import"./coding-tools.policy-DIeVRurg.js";import"./pairing-store-tegvJa08.js";import"./fetch-CrbOFvsL.js";import"./exec-approvals-Cn0K-HtJ.js";import"./nodes-screen-OI7tHqlU.js";import"./session-cost-usage-BgZfN_WR.js";import"./provider-usage-BLkm6ojE.js";import"./send-BIR1Jhc5.js";import"./outbound-attachment-3GZbMqo1.js";import"./delivery-queue-DQXq7KUU.js";import"./project-context-DXP12xhk.js";import"./control-service-Cml__v8i.js";import"./stagger-CUH5rlmS.js";import"./channel-selection-DFf_nAm7.js";import"./send-9rUcCK7O.js";import"./resolve-route-D3X-bXU-.js";import"./channel-activity-By7lsk7N.js";import"./tables-DZSV6me6.js";import{t as formatDocsLink}from"./links-B6LU5cXN.js";import"./cli-utils-ByV85M53.js";import"./help-format-DIDk_7gh.js";import"./progress-BQMO_-7I.js";import"./replies-CL0uQgU7.js";import"./onboard-helpers-Di5OXlap.js";import"./prompt-style-CZOeG0sw.js";import"./pairing-labels-DofkNLS2.js";import"./active-listener-BC31MA4v.js";import"./mamba-state-engine-CFwb8DcP.js";import"./transformers-stream-nSL4Xu31.js";import"./catalog-CEJqw4s-.js";import"./plugin-registry-Ty9w94Rd.js";import{n as resolveCliChannelOptions}from"./channel-options-Cbz6vcgo.js";import{t as getSubCliCommandsWithSubcommands}from"./register.subclis-Meewq2dj.js";import{a as registerProgramCommands,n as getCoreCliCommandsWithSubcommands}from"./command-registry-BTxAGdlS.js";import{n as setProgramContext}from"./program-context-D37YNAO5.js";import"./ports-DWKqfHru.js";import{n as formatCliBannerLine,r as hasEmittedCliBanner,t as emitCliBanner}from"./banner-DVNoUX5I.js";import{Command}from"commander";function createProgramContext(){let channelOptions=resolveCliChannelOptions();return{programVersion:VERSION,channelOptions,messageChannelOptions:channelOptions.join(`|`),agentChannelOptions:[`last`,...channelOptions].join(`|`)}}const CLI_NAME=resolveCliName(),CLI_NAME_PATTERN=escapeRegExp(CLI_NAME),ROOT_COMMANDS_WITH_SUBCOMMANDS=new Set([...getCoreCliCommandsWithSubcommands(),...getSubCliCommandsWithSubcommands()]),EXAMPLES=[[`builderforce models --help`,`Show detailed help for the models command.`],[`builderforce channels login --verbose`,`Link personal WhatsApp Web and show QR + connection logs.`],[`builderforce message send --target +15555550123 --message "Hi" --json`,`Send via your web session and print JSON result.`],[`builderforce gateway --port 18789`,`Run the WebSocket Gateway locally.`],[`builderforce --dev gateway`,`Run a dev Gateway (isolated state/config) on ws://127.0.0.1:19001.`],[`builderforce gateway --force`,`Kill anything bound to the default gateway port, then start it.`],[`builderforce gateway ...`,`Gateway control via WebSocket.`],[`builderforce agent --to +15555550123 --message "Run summary" --deliver`,`Talk directly to the agent using the Gateway; optionally send the WhatsApp reply.`],[`builderforce message send --channel telegram --target @mychat --message "Hi"`,`Send via your Telegram bot.`]];function configureProgramHelp(program,ctx){program.name(CLI_NAME).description(``).version(ctx.programVersion).option(`--dev`,`Dev profile: isolate state under ~/.builderforce-dev, default gateway port 19001, and shift derived ports (browser/canvas)`).option(`--profile <name>`,`Use a named profile (isolates BUILDERFORCE_AGENTS_STATE_DIR/BUILDERFORCE_AGENTS_CONFIG_PATH under ~/.builderforce-<name>)`),program.option(`--no-color`,`Disable ANSI colors`,!1),program.helpOption(`-h, --help`,`Display help for command`),program.helpCommand(`help [command]`,`Display help for command`),program.configureHelp({sortSubcommands:!0,sortOptions:!0,optionTerm:option=>theme.option(option.flags),subcommandTerm:cmd=>{let hasSubcommands=cmd.parent===program&&ROOT_COMMANDS_WITH_SUBCOMMANDS.has(cmd.name());return theme.command(hasSubcommands?`${cmd.name()} *`:cmd.name())}});let formatHelpOutput=str=>{let output=str;return RegExp(`^Usage:\\s+${CLI_NAME_PATTERN}\\s+\\[options\\]\\s+\\[command\\]\\s*$`,`m`).test(output)&&/^Commands:/m.test(output)&&(output=output.replace(/^Commands:/m,`Commands:\n ${theme.muted(`Hint: commands suffixed with * have subcommands. Run <command> --help for details.`)}`)),output.replace(/^Usage:/gm,theme.heading(`Usage:`)).replace(/^Options:/gm,theme.heading(`Options:`)).replace(/^Commands:/gm,theme.heading(`Commands:`))};program.configureOutput({writeOut:str=>{process.stdout.write(formatHelpOutput(str))},writeErr:str=>{process.stderr.write(formatHelpOutput(str))},outputError:(str,write)=>write(theme.error(str))}),(process.argv.includes(`-V`)||process.argv.includes(`--version`)||process.argv.includes(`-v`))&&(console.log(ctx.programVersion),process.exit(0)),program.addHelpText(`beforeAll`,()=>{if(hasEmittedCliBanner())return``;let rich=isRich();return`\n${formatCliBannerLine(ctx.programVersion,{richTty:rich})}\n`});let fmtExamples=EXAMPLES.map(([cmd,desc])=>` ${theme.command(replaceCliName(cmd,CLI_NAME))}\n ${theme.muted(desc)}`).join(`
2
- `);program.addHelpText(`afterAll`,({command})=>{if(command!==program)return``;let docs=formatDocsLink(`/cli`,`docs.builderforce.ai/cli`);return`\n${theme.heading(`Examples:`)}\n${fmtExamples}\n\n${theme.muted(`Docs:`)} ${docs}\n`})}function setProcessTitleForCommand(actionCommand){let current=actionCommand;for(;current.parent&&current.parent.parent;)current=current.parent;let name=current.name(),cliName=resolveCliName();!name||name===cliName||(process.title=`${cliName}-${name}`)}const PLUGIN_REQUIRED_COMMANDS=new Set([`message`,`channels`,`directory`]);function registerPreActionHooks(program,programVersion){program.hook(`preAction`,async(_thisCommand,actionCommand)=>{setProcessTitleForCommand(actionCommand);let argv=process.argv;if(hasHelpOrVersion(argv))return;let commandPath=getCommandPath(argv,2);isTruthyEnvValue(process.env.BUILDERFORCE_AGENTS_HIDE_BANNER)||commandPath[0]===`update`||commandPath[0]===`completion`||commandPath[0]===`plugins`&&commandPath[1]===`update`||emitCliBanner(programVersion);let verbose=getVerboseFlag(argv,{includeDebug:!0});if(setVerbose(verbose),verbose||(process.env.NODE_NO_WARNINGS??=`1`),commandPath[0]===`doctor`||commandPath[0]===`completion`)return;let{ensureConfigReady}=await import(`./config-guard-Bg0w-hQo.js`);if(await ensureConfigReady({runtime:defaultRuntime,commandPath}),PLUGIN_REQUIRED_COMMANDS.has(commandPath[0])){let{ensurePluginRegistryLoaded}=await import(`./plugin-registry-BenvgIsJ.js`);ensurePluginRegistryLoaded()}})}function buildProgram(){let program=new Command,ctx=createProgramContext(),argv=process.argv;return setProgramContext(program,ctx),configureProgramHelp(program,ctx),registerPreActionHooks(program,ctx.programVersion),registerProgramCommands(program,ctx,argv),program.option(`-m, --message <text>`,`Start a session and send this as the first message`).action(async opts=>{let{runBuilderForceAgentsSession}=await import(`./builderforce-BN_So1di.js`);await runBuilderForceAgentsSession(process.cwd(),{message:opts.message})}),program}export{buildProgram};
1
+ import"./paths-BHg-VHB4.js";import{c as hasHelpOrVersion,n as getCommandPath,o as getVerboseFlag}from"./argv-BgQk38nl.js";import"./registry-Cv7CoWAs.js";import{N as setVerbose,R as isRich,c as escapeRegExp,z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import{t as isTruthyEnvValue}from"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-BARnVAUE.js";import{n as replaceCliName,r as resolveCliName}from"./command-format-DTMaGKs7.js";import"./logger-AbH8mdkv.js";import"./session-key-D--2AEus.js";import"./builderforce-root-D3-p8W2n.js";import"./exec-CGuYALEs.js";import"./agent-scope-BcoQBOwz.js";import"./env-file-BIKVpYUN.js";import{U as VERSION}from"./io-BySzqKzT.js";import"./manifest-registry-DtqFvEIR.js";import"./config-Bwt58P9r.js";import"./model-discovery-DxpimsRF.js";import"./model-catalog-wcISK04b.js";import"./frontmatter-DgRc5y_l.js";import"./skills-W00EPvKR.js";import"./plugin-skills-BSUncenp.js";import"./refresh-bgGvF0aF.js";import"./client-DeQ0LbP9.js";import"./call-CjC3SRPv.js";import"./message-channel-C-yw5fZm.js";import"./subagent-registry-BUKplZi1.js";import"./sessions-ko0LxxGk.js";import"./src-BM8G-tIl.js";import"./project-context-store-BSIWJD6S.js";import"./tokens-BNwTTeJb.js";import"./plugins-DJGW_fnS.js";import"./accounts-Z5bJpNrG.js";import"./bindings-D0uket3l.js";import"./send-gG3CFJwv.js";import"./send-DqJCViFb.js";import"./with-timeout-By0c7Ur9.js";import"./deliver-DFhj1d_t.js";import"./accounts-DoJYLMfS.js";import"./send-mCN63Hkn.js";import"./image-ops-Bg9yFwjX.js";import"./redact-bWj_-q3j.js";import"./errors-t5wHPcwh.js";import"./embedded-helpers-DGDYymYx.js";import"./sandbox-BcH7kS1y.js";import"./chrome-IJYO1tSE.js";import"./tailscale-CgCG7AVQ.js";import"./auth-B4Kn3eee.js";import"./server-context-D3iiIzvV.js";import"./routes-7QTsp3sA.js";import"./paths-GamzES41.js";import"./ssrf-BiSQzdcA.js";import"./store-C5LmVaEC.js";import"./ports-LqFTyTSK.js";import"./trash-zs6gNxed.js";import"./accounts-BT-NzzBc.js";import"./paths-BQ9W7Bs0.js";import"./tool-images-DV2HMmx4.js";import"./workspace-Cz9mCy0P.js";import"./reply-prefix-9hmbzubX.js";import"./sqlite-BEgCClMz.js";import"./memory-cli-COgt0ROi.js";import"./manager-Cob4Ofzr.js";import"./gemini-auth-BZgBIY0M.js";import"./retry-Cc6xusE8.js";import"./common-BRdxH-uH.js";import"./runner-BLCTET8O.js";import"./tool-display-BIswnHaq.js";import"./chunk-UPhdkZNp.js";import"./markdown-tables-CpqWBduK.js";import"./fetch-guard-CoGEds8D.js";import"./fetch-CUsKv8oj.js";import"./ir-6L-eU4id.js";import"./render-1ABBE2Y6.js";import"./builderforcellm-syscheck-CfFrfeV2.js";import"./session-utils-VCGKYbgW.js";import"./coding-tools.policy-DIeVRurg.js";import"./pairing-store-tegvJa08.js";import"./fetch-CrbOFvsL.js";import"./exec-approvals-Cn0K-HtJ.js";import"./nodes-screen-OI7tHqlU.js";import"./session-cost-usage-BgZfN_WR.js";import"./provider-usage-BLkm6ojE.js";import"./send-BIR1Jhc5.js";import"./outbound-attachment-3GZbMqo1.js";import"./delivery-queue-DQXq7KUU.js";import"./project-context-C5KLsMTc.js";import"./control-service-Cml__v8i.js";import"./stagger-CUH5rlmS.js";import"./channel-selection-DFf_nAm7.js";import"./send-9rUcCK7O.js";import"./resolve-route-D3X-bXU-.js";import"./channel-activity-By7lsk7N.js";import"./tables-DZSV6me6.js";import{t as formatDocsLink}from"./links-B6LU5cXN.js";import"./cli-utils-ByV85M53.js";import"./help-format-DIDk_7gh.js";import"./progress-BQMO_-7I.js";import"./replies-CL0uQgU7.js";import"./onboard-helpers-Di5OXlap.js";import"./prompt-style-CZOeG0sw.js";import"./pairing-labels-DofkNLS2.js";import"./active-listener-BC31MA4v.js";import"./mamba-state-engine-BYmUnYwn.js";import"./transformers-stream-nSL4Xu31.js";import"./catalog-CEJqw4s-.js";import"./plugin-registry-BM1-sG-e.js";import{n as resolveCliChannelOptions}from"./channel-options-xVK4amr4.js";import{t as getSubCliCommandsWithSubcommands}from"./register.subclis-yYbEKj9a.js";import{a as registerProgramCommands,n as getCoreCliCommandsWithSubcommands}from"./command-registry-BXLjR3kb.js";import{n as setProgramContext}from"./program-context-D37YNAO5.js";import"./ports-DWKqfHru.js";import{n as formatCliBannerLine,r as hasEmittedCliBanner,t as emitCliBanner}from"./banner-BXpp_pEd.js";import{Command}from"commander";function createProgramContext(){let channelOptions=resolveCliChannelOptions();return{programVersion:VERSION,channelOptions,messageChannelOptions:channelOptions.join(`|`),agentChannelOptions:[`last`,...channelOptions].join(`|`)}}const CLI_NAME=resolveCliName(),CLI_NAME_PATTERN=escapeRegExp(CLI_NAME),ROOT_COMMANDS_WITH_SUBCOMMANDS=new Set([...getCoreCliCommandsWithSubcommands(),...getSubCliCommandsWithSubcommands()]),EXAMPLES=[[`builderforce models --help`,`Show detailed help for the models command.`],[`builderforce channels login --verbose`,`Link personal WhatsApp Web and show QR + connection logs.`],[`builderforce message send --target +15555550123 --message "Hi" --json`,`Send via your web session and print JSON result.`],[`builderforce gateway --port 18789`,`Run the WebSocket Gateway locally.`],[`builderforce --dev gateway`,`Run a dev Gateway (isolated state/config) on ws://127.0.0.1:19001.`],[`builderforce gateway --force`,`Kill anything bound to the default gateway port, then start it.`],[`builderforce gateway ...`,`Gateway control via WebSocket.`],[`builderforce agent --to +15555550123 --message "Run summary" --deliver`,`Talk directly to the agent using the Gateway; optionally send the WhatsApp reply.`],[`builderforce message send --channel telegram --target @mychat --message "Hi"`,`Send via your Telegram bot.`]];function configureProgramHelp(program,ctx){program.name(CLI_NAME).description(``).version(ctx.programVersion).option(`--dev`,`Dev profile: isolate state under ~/.builderforce-dev, default gateway port 19001, and shift derived ports (browser/canvas)`).option(`--profile <name>`,`Use a named profile (isolates BUILDERFORCE_AGENTS_STATE_DIR/BUILDERFORCE_AGENTS_CONFIG_PATH under ~/.builderforce-<name>)`),program.option(`--no-color`,`Disable ANSI colors`,!1),program.helpOption(`-h, --help`,`Display help for command`),program.helpCommand(`help [command]`,`Display help for command`),program.configureHelp({sortSubcommands:!0,sortOptions:!0,optionTerm:option=>theme.option(option.flags),subcommandTerm:cmd=>{let hasSubcommands=cmd.parent===program&&ROOT_COMMANDS_WITH_SUBCOMMANDS.has(cmd.name());return theme.command(hasSubcommands?`${cmd.name()} *`:cmd.name())}});let formatHelpOutput=str=>{let output=str;return RegExp(`^Usage:\\s+${CLI_NAME_PATTERN}\\s+\\[options\\]\\s+\\[command\\]\\s*$`,`m`).test(output)&&/^Commands:/m.test(output)&&(output=output.replace(/^Commands:/m,`Commands:\n ${theme.muted(`Hint: commands suffixed with * have subcommands. Run <command> --help for details.`)}`)),output.replace(/^Usage:/gm,theme.heading(`Usage:`)).replace(/^Options:/gm,theme.heading(`Options:`)).replace(/^Commands:/gm,theme.heading(`Commands:`))};program.configureOutput({writeOut:str=>{process.stdout.write(formatHelpOutput(str))},writeErr:str=>{process.stderr.write(formatHelpOutput(str))},outputError:(str,write)=>write(theme.error(str))}),(process.argv.includes(`-V`)||process.argv.includes(`--version`)||process.argv.includes(`-v`))&&(console.log(ctx.programVersion),process.exit(0)),program.addHelpText(`beforeAll`,()=>{if(hasEmittedCliBanner())return``;let rich=isRich();return`\n${formatCliBannerLine(ctx.programVersion,{richTty:rich})}\n`});let fmtExamples=EXAMPLES.map(([cmd,desc])=>` ${theme.command(replaceCliName(cmd,CLI_NAME))}\n ${theme.muted(desc)}`).join(`
2
+ `);program.addHelpText(`afterAll`,({command})=>{if(command!==program)return``;let docs=formatDocsLink(`/cli`,`docs.builderforce.ai/cli`);return`\n${theme.heading(`Examples:`)}\n${fmtExamples}\n\n${theme.muted(`Docs:`)} ${docs}\n`})}function setProcessTitleForCommand(actionCommand){let current=actionCommand;for(;current.parent&&current.parent.parent;)current=current.parent;let name=current.name(),cliName=resolveCliName();!name||name===cliName||(process.title=`${cliName}-${name}`)}const PLUGIN_REQUIRED_COMMANDS=new Set([`message`,`channels`,`directory`]);function registerPreActionHooks(program,programVersion){program.hook(`preAction`,async(_thisCommand,actionCommand)=>{setProcessTitleForCommand(actionCommand);let argv=process.argv;if(hasHelpOrVersion(argv))return;let commandPath=getCommandPath(argv,2);isTruthyEnvValue(process.env.BUILDERFORCE_AGENTS_HIDE_BANNER)||commandPath[0]===`update`||commandPath[0]===`completion`||commandPath[0]===`plugins`&&commandPath[1]===`update`||emitCliBanner(programVersion);let verbose=getVerboseFlag(argv,{includeDebug:!0});if(setVerbose(verbose),verbose||(process.env.NODE_NO_WARNINGS??=`1`),commandPath[0]===`doctor`||commandPath[0]===`completion`)return;let{ensureConfigReady}=await import(`./config-guard-Bg0w-hQo.js`);if(await ensureConfigReady({runtime:defaultRuntime,commandPath}),PLUGIN_REQUIRED_COMMANDS.has(commandPath[0])){let{ensurePluginRegistryLoaded}=await import(`./plugin-registry-DjmzOS3n.js`);ensurePluginRegistryLoaded()}})}function buildProgram(){let program=new Command,ctx=createProgramContext(),argv=process.argv;return setProgramContext(program,ctx),configureProgramHelp(program,ctx),registerPreActionHooks(program,ctx.programVersion),registerProgramCommands(program,ctx,argv),program.option(`-m, --message <text>`,`Start a session and send this as the first message`).action(async opts=>{let{runBuilderForceAgentsSession}=await import(`./builderforce-BrFUSx35.js`);await runBuilderForceAgentsSession(process.cwd(),{message:opts.message})}),program}export{buildProgram};
@@ -1 +1 @@
1
- import{t as isTruthyEnvValue}from"./env-BHP32i7Q.js";import{r as resolveActionArgs}from"./helpers-WeAzElGL.js";const HELP_FLAGS=new Set([`-h`,`--help`]),VERSION_FLAGS=new Set([`-v`,`-V`,`--version`]);function hasHelpOrVersion(argv){return argv.some(arg=>HELP_FLAGS.has(arg)||VERSION_FLAGS.has(arg))?!0:getPrimaryCommand(argv)===`help`}function hasFlag(argv,name){let args=argv.slice(2);for(let arg of args){if(arg===`--`)break;if(arg===name)return!0}return!1}function getVerboseFlag(argv,options){return!!(hasFlag(argv,`--verbose`)||options?.includeDebug&&hasFlag(argv,`--debug`))}function getCommandPath(argv,depth=2){let args=argv.slice(2),path=[];for(let i=0;i<args.length;i+=1){let arg=args[i];if(arg&&(arg===`--`||!arg.startsWith(`-`)&&(path.push(arg),path.length>=depth)))break}return path}function getPrimaryCommand(argv){let[primary]=getCommandPath(argv,1);return primary??null}function buildParseArgv(params){let baseArgv=params.rawArgs&&params.rawArgs.length>0?params.rawArgs:params.fallbackArgv&&params.fallbackArgv.length>0?params.fallbackArgv:process.argv,programName=params.programName??``,normalizedArgv=programName&&baseArgv[0]===programName||baseArgv[0]?.endsWith(`builderforce`)||baseArgv[0]?.endsWith(`builderforce`)?baseArgv.slice(1):baseArgv,executable=(normalizedArgv[0]?.split(/[/\\]/).pop()??``).toLowerCase();return normalizedArgv.length>=2&&(isNodeExecutable(executable)||isBunExecutable(executable))?normalizedArgv:[`node`,programName||`builderforce`,...normalizedArgv]}const nodeExecutablePattern=/^node-\d+(?:\.\d+)*(?:\.exe)?$/;function isNodeExecutable(executable){return executable===`node`||executable===`node.exe`||executable===`nodejs`||executable===`nodejs.exe`||nodeExecutablePattern.test(executable)}function isBunExecutable(executable){return executable===`bun`||executable===`bun.exe`}async function reparseProgramFromActionArgs(program,actionArgs){let actionCommand=actionArgs.at(-1),rawArgs=(actionCommand?.parent??program).rawArgs,actionArgsList=resolveActionArgs(actionCommand),fallbackArgv=actionCommand?.name()?[actionCommand.name(),...actionArgsList]:actionArgsList,parseArgv=buildParseArgv({programName:program.name(),rawArgs,fallbackArgv});await program.parseAsync(parseArgv)}const shouldRegisterPrimaryOnly=argv=>!(isTruthyEnvValue(process.env.BUILDERFORCE_AGENTS_DISABLE_LAZY_SUBCOMMANDS)||hasHelpOrVersion(argv)),shouldEagerRegisterSubcommands=_argv=>isTruthyEnvValue(process.env.BUILDERFORCE_AGENTS_DISABLE_LAZY_SUBCOMMANDS),loadConfig=async()=>{let{loadConfig:_load}=await import(`./io-eFeD7i45.js`);return _load()},entries=[{name:`acp`,description:`Agent Control Protocol tools`,hasSubcommands:!0,register:async program=>{(await import(`./acp-cli-MpAiMGLW.js`)).registerAcpCli(program)}},{name:`gateway`,description:`Run, inspect, and query the WebSocket Gateway`,hasSubcommands:!0,register:async program=>{(await import(`./gateway-cli-oSSOT67p.js`)).registerGatewayCli(program)}},{name:`daemon`,description:`Gateway service (legacy alias)`,hasSubcommands:!0,register:async program=>{(await import(`./daemon-cli-D1H4xGtf.js`)).registerDaemonCli(program)}},{name:`logs`,description:`Tail gateway file logs via RPC`,hasSubcommands:!1,register:async program=>{(await import(`./logs-cli-9nvNUnFR.js`)).registerLogsCli(program)}},{name:`usage`,description:`Show provider usage / quota (and workspace spend via gateway)`,hasSubcommands:!1,register:async program=>{(await import(`./usage-cli-DFdVNlsU.js`)).registerUsageCli(program)}},{name:`system`,description:`System events, heartbeat, and presence`,hasSubcommands:!0,register:async program=>{(await import(`./system-cli-DPS13LYc.js`)).registerSystemCli(program)}},{name:`models`,description:`Discover, scan, and configure models`,hasSubcommands:!0,register:async program=>{(await import(`./models-cli-BUDSwmIY.js`)).registerModelsCli(program)}},{name:`approvals`,description:`Manage exec approvals (gateway or node host)`,hasSubcommands:!0,register:async program=>{(await import(`./exec-approvals-cli-D3LAnLxs.js`)).registerExecApprovalsCli(program)}},{name:`nodes`,description:`Manage gateway-owned node pairing and node commands`,hasSubcommands:!0,register:async program=>{(await import(`./nodes-cli-DWd9tYUl.js`)).registerNodesCli(program)}},{name:`devices`,description:`Device pairing + token management`,hasSubcommands:!0,register:async program=>{(await import(`./devices-cli-D9Jj4pXw.js`)).registerDevicesCli(program)}},{name:`node`,description:`Run and manage the headless node host service`,hasSubcommands:!0,register:async program=>{(await import(`./node-cli-C7vElKc4.js`)).registerNodeCli(program)}},{name:`sandbox`,description:`Manage sandbox containers for agent isolation`,hasSubcommands:!0,register:async program=>{(await import(`./sandbox-cli-pf9GM19Y.js`)).registerSandboxCli(program)}},{name:`tui`,description:`Open a terminal UI connected to the Gateway`,hasSubcommands:!1,register:async program=>{(await import(`./tui-cli-BTFEL897.js`)).registerTuiCli(program)}},{name:`cron`,description:`Manage cron jobs via the Gateway scheduler`,hasSubcommands:!0,register:async program=>{(await import(`./cron-cli-DGOu2Psn.js`)).registerCronCli(program)}},{name:`workflow`,description:`Trigger Builderforce workflows from the CLI / CI`,hasSubcommands:!0,register:async program=>{(await import(`./workflow-cli-BuEKJ4ut.js`)).registerWorkflowCli(program)}},{name:`dns`,description:`DNS helpers for wide-area discovery (Tailscale + CoreDNS)`,hasSubcommands:!0,register:async program=>{(await import(`./dns-cli-1kDSkke5.js`)).registerDnsCli(program)}},{name:`docs`,description:`Search the live BuilderForceAgents docs`,hasSubcommands:!1,register:async program=>{(await import(`./docs-cli-Dm0mhd23.js`)).registerDocsCli(program)}},{name:`hooks`,description:`Manage internal agent hooks`,hasSubcommands:!0,register:async program=>{(await import(`./hooks-cli-7gBXRQ81.js`)).registerHooksCli(program)}},{name:`webhooks`,description:`Webhook helpers and integrations`,hasSubcommands:!0,register:async program=>{(await import(`./webhooks-cli-B3MfYMco.js`)).registerWebhooksCli(program)}},{name:`qr`,description:`Generate iOS pairing QR/setup code`,hasSubcommands:!1,register:async program=>{(await import(`./qr-cli-DGAuhszY.js`)).registerQrCli(program)}},{name:`agentbot`,description:`Legacy agentbot command aliases`,hasSubcommands:!0,register:async program=>{(await import(`./agentbot-cli-Bb2XPINn.js`)).registerAgentbotCli(program)}},{name:`pairing`,description:`Secure DM pairing (approve inbound requests)`,hasSubcommands:!0,register:async program=>{let{registerPluginCliCommands}=await import(`./cli-BPwpRE1j.js`);registerPluginCliCommands(program,await loadConfig()),(await import(`./pairing-cli-B1yEP0mE.js`)).registerPairingCli(program)}},{name:`plugins`,description:`Manage BuilderForceAgents plugins and extensions`,hasSubcommands:!0,register:async program=>{(await import(`./plugins-cli-CB7e9eCK.js`)).registerPluginsCli(program);let{registerPluginCliCommands}=await import(`./cli-BPwpRE1j.js`);registerPluginCliCommands(program,await loadConfig())}},{name:`channels`,description:`Manage connected chat channels (Telegram, Discord, etc.)`,hasSubcommands:!0,register:async program=>{(await import(`./channels-cli-BOcpgY_W.js`)).registerChannelsCli(program)}},{name:`directory`,description:`Lookup contact and group IDs (self, peers, groups) for supported chat channels`,hasSubcommands:!0,register:async program=>{(await import(`./directory-cli-CcxIC-sP.js`)).registerDirectoryCli(program)}},{name:`security`,description:`Security tools and local config audits`,hasSubcommands:!0,register:async program=>{(await import(`./security-cli-BcOBr53d.js`)).registerSecurityCli(program)}},{name:`skills`,description:`List and inspect available skills`,hasSubcommands:!0,register:async program=>{(await import(`./skills-cli-BYoNED-4.js`)).registerSkillsCli(program)}},{name:`update`,description:`Update BuilderForceAgents and inspect update channel status`,hasSubcommands:!0,register:async program=>{(await import(`./update-cli-BdT4-P_D.js`)).registerUpdateCli(program)}},{name:`completion`,description:`Generate shell completion script`,hasSubcommands:!1,register:async program=>{(await import(`./completion-cli-vR4Sx9zB.js`)).registerCompletionCli(program)}}];function getSubCliEntries(){return entries}function getSubCliCommandsWithSubcommands(){return entries.filter(entry=>entry.hasSubcommands).map(entry=>entry.name)}function removeCommand$1(program,command){let commands=program.commands,index=commands.indexOf(command);index>=0&&commands.splice(index,1)}async function registerSubCliByName(program,name){let entry=entries.find(candidate=>candidate.name===name);if(!entry)return!1;let existing=program.commands.find(cmd=>cmd.name()===entry.name);return existing&&removeCommand$1(program,existing),await entry.register(program),!0}function registerLazyCommand(program,entry){let placeholder=program.command(entry.name).description(entry.description);placeholder.allowUnknownOption(!0),placeholder.allowExcessArguments(!0),placeholder.action(async(...actionArgs)=>{removeCommand$1(program,placeholder),await entry.register(program),await reparseProgramFromActionArgs(program,actionArgs)})}function registerSubCliCommands(program,argv=process.argv){if(shouldEagerRegisterSubcommands(argv)){for(let entry of entries)entry.register(program);return}let primary=getPrimaryCommand(argv);if(primary&&shouldRegisterPrimaryOnly(argv)){let entry=entries.find(candidate=>candidate.name===primary);if(entry){registerLazyCommand(program,entry);return}}for(let candidate of entries)registerLazyCommand(program,candidate)}const shouldRegisterCorePrimaryOnly=argv=>!hasHelpOrVersion(argv),coreEntries=[{commands:[{name:`setup`,description:`Initialize local config and agent workspace`,hasSubcommands:!1}],register:async({program})=>{(await import(`./register.setup-BNUqkiVa.js`)).registerSetupCommand(program)}},{commands:[{name:`onboard`,description:`Interactive onboarding wizard for gateway, workspace, and skills`,hasSubcommands:!1}],register:async({program})=>{(await import(`./register.onboard-DjrhC3jh.js`)).registerOnboardCommand(program)}},{commands:[{name:`connect`,description:`Register this machine as an agent host in a Builderforce workspace`,hasSubcommands:!1}],register:async({program})=>{(await import(`./register.connect-BcZeAJ1s.js`)).registerConnectCommand(program)}},{commands:[{name:`configure`,description:`Interactive setup wizard for credentials, channels, gateway, and agent defaults`,hasSubcommands:!1}],register:async({program})=>{(await import(`./register.configure-HcPL-Na2.js`)).registerConfigureCommand(program)}},{commands:[{name:`config`,description:`Non-interactive config helpers (get/set/unset). Default: starts setup wizard.`,hasSubcommands:!0}],register:async({program})=>{(await import(`./config-cli-BYFA4Nin.js`)).registerConfigCli(program)}},{commands:[{name:`doctor`,description:`Health checks + quick fixes for the gateway and channels`,hasSubcommands:!1},{name:`dashboard`,description:`Open the Control UI with your current token`,hasSubcommands:!1},{name:`reset`,description:`Reset local config/state (keeps the CLI installed)`,hasSubcommands:!1},{name:`stop`,description:`Stop the running gateway service`,hasSubcommands:!1},{name:`uninstall`,description:`Uninstall the gateway service + local data (CLI remains)`,hasSubcommands:!1}],register:async({program})=>{(await import(`./register.maintenance-C-7Arpam.js`)).registerMaintenanceCommands(program)}},{commands:[{name:`message`,description:`Send, read, and manage messages`,hasSubcommands:!0}],register:async({program,ctx})=>{(await import(`./register.message-D1IU3K0a.js`)).registerMessageCommands(program,ctx)}},{commands:[{name:`memory`,description:`Search and reindex memory files`,hasSubcommands:!0}],register:async({program})=>{(await import(`./memory-cli-DDUGbrvP.js`)).registerMemoryCli(program)}},{commands:[{name:`agent`,description:`Run one agent turn via the Gateway`,hasSubcommands:!1},{name:`agents`,description:`Manage isolated agents (workspaces, auth, routing)`,hasSubcommands:!0}],register:async({program,ctx})=>{(await import(`./register.agent-CAsV5dRf.js`)).registerAgentCommands(program,{agentChannelOptions:ctx.agentChannelOptions})}},{commands:[{name:`status`,description:`Show channel health and recent session recipients`,hasSubcommands:!1},{name:`health`,description:`Fetch health from the running gateway`,hasSubcommands:!1},{name:`sessions`,description:`List stored conversation sessions`,hasSubcommands:!1}],register:async({program})=>{(await import(`./register.status-health-sessions-DcqlqAhs.js`)).registerStatusHealthSessionsCommands(program)}},{commands:[{name:`browser`,description:`Manage BuilderForceAgents's dedicated browser (Chrome/Chromium)`,hasSubcommands:!0}],register:async({program})=>{(await import(`./browser-cli-vjQ9HuP3.js`)).registerBrowserCli(program)}},{commands:[{name:`init`,description:`Initialize a project with builderForceAgents`,hasSubcommands:!1},{name:`project`,description:`Manage builderForceAgents project context`,hasSubcommands:!0},{name:`workforce`,description:`Manage Builderforce Workforce agents (custom trained LLMs)`,hasSubcommands:!0}],register:async({program})=>{let mod=await import(`./builderforce-Bs_G8kBN.js`);program.addCommand(mod.createInitCommand()),program.addCommand(mod.createBuilderForceAgentsCommand()),program.addCommand(mod.createAgentCommand())}}];function collectCoreCliCommandNames(predicate){let seen=new Set,names=[];for(let entry of coreEntries)for(let command of entry.commands)predicate&&!predicate(command)||seen.has(command.name)||(seen.add(command.name),names.push(command.name));return names}function getCoreCliCommandNames(){return collectCoreCliCommandNames()}function getCoreCliCommandsWithSubcommands(){return collectCoreCliCommandNames(command=>command.hasSubcommands)}function removeCommand(program,command){let commands=program.commands,index=commands.indexOf(command);index>=0&&commands.splice(index,1)}function removeEntryCommands(program,entry){for(let cmd of entry.commands){let existing=program.commands.find(c=>c.name()===cmd.name);existing&&removeCommand(program,existing)}}function registerLazyCoreCommand(program,ctx,entry,command){let placeholder=program.command(command.name).description(command.description);placeholder.allowUnknownOption(!0),placeholder.allowExcessArguments(!0),placeholder.action(async(...actionArgs)=>{removeEntryCommands(program,entry),await entry.register({program,ctx,argv:process.argv}),await reparseProgramFromActionArgs(program,actionArgs)})}async function registerCoreCliByName(program,ctx,name,argv=process.argv){let entry=coreEntries.find(candidate=>candidate.commands.some(cmd=>cmd.name===name));return entry?(removeEntryCommands(program,entry),await entry.register({program,ctx,argv}),!0):!1}function registerCoreCliCommands(program,ctx,argv){let primary=getPrimaryCommand(argv);if(primary&&shouldRegisterCorePrimaryOnly(argv)){let entry=coreEntries.find(candidate=>candidate.commands.some(cmd=>cmd.name===primary));if(entry){let cmd=entry.commands.find(c=>c.name===primary);cmd&&registerLazyCoreCommand(program,ctx,entry,cmd);return}}for(let entry of coreEntries)for(let cmd of entry.commands)registerLazyCoreCommand(program,ctx,entry,cmd)}function registerProgramCommands(program,ctx,argv=process.argv){registerCoreCliCommands(program,ctx,argv),registerSubCliCommands(program,argv)}const PROGRAM_CONTEXT_SYMBOL=Symbol.for(`builderforce.cli.programContext`);function setProgramContext(program,ctx){program[PROGRAM_CONTEXT_SYMBOL]=ctx}function getProgramContext(program){return program[PROGRAM_CONTEXT_SYMBOL]}export{registerCoreCliByName as a,getSubCliEntries as c,getVerboseFlag as d,hasHelpOrVersion as f,getCoreCliCommandsWithSubcommands as i,registerSubCliByName as l,setProgramContext as n,registerProgramCommands as o,getCoreCliCommandNames as r,getSubCliCommandsWithSubcommands as s,getProgramContext as t,getCommandPath as u};
1
+ import{t as isTruthyEnvValue}from"./env-BHP32i7Q.js";import{r as resolveActionArgs}from"./helpers-WeAzElGL.js";const HELP_FLAGS=new Set([`-h`,`--help`]),VERSION_FLAGS=new Set([`-v`,`-V`,`--version`]);function hasHelpOrVersion(argv){return argv.some(arg=>HELP_FLAGS.has(arg)||VERSION_FLAGS.has(arg))?!0:getPrimaryCommand(argv)===`help`}function hasFlag(argv,name){let args=argv.slice(2);for(let arg of args){if(arg===`--`)break;if(arg===name)return!0}return!1}function getVerboseFlag(argv,options){return!!(hasFlag(argv,`--verbose`)||options?.includeDebug&&hasFlag(argv,`--debug`))}function getCommandPath(argv,depth=2){let args=argv.slice(2),path=[];for(let i=0;i<args.length;i+=1){let arg=args[i];if(arg&&(arg===`--`||!arg.startsWith(`-`)&&(path.push(arg),path.length>=depth)))break}return path}function getPrimaryCommand(argv){let[primary]=getCommandPath(argv,1);return primary??null}function buildParseArgv(params){let baseArgv=params.rawArgs&&params.rawArgs.length>0?params.rawArgs:params.fallbackArgv&&params.fallbackArgv.length>0?params.fallbackArgv:process.argv,programName=params.programName??``,normalizedArgv=programName&&baseArgv[0]===programName||baseArgv[0]?.endsWith(`builderforce`)||baseArgv[0]?.endsWith(`builderforce`)?baseArgv.slice(1):baseArgv,executable=(normalizedArgv[0]?.split(/[/\\]/).pop()??``).toLowerCase();return normalizedArgv.length>=2&&(isNodeExecutable(executable)||isBunExecutable(executable))?normalizedArgv:[`node`,programName||`builderforce`,...normalizedArgv]}const nodeExecutablePattern=/^node-\d+(?:\.\d+)*(?:\.exe)?$/;function isNodeExecutable(executable){return executable===`node`||executable===`node.exe`||executable===`nodejs`||executable===`nodejs.exe`||nodeExecutablePattern.test(executable)}function isBunExecutable(executable){return executable===`bun`||executable===`bun.exe`}async function reparseProgramFromActionArgs(program,actionArgs){let actionCommand=actionArgs.at(-1),rawArgs=(actionCommand?.parent??program).rawArgs,actionArgsList=resolveActionArgs(actionCommand),fallbackArgv=actionCommand?.name()?[actionCommand.name(),...actionArgsList]:actionArgsList,parseArgv=buildParseArgv({programName:program.name(),rawArgs,fallbackArgv});await program.parseAsync(parseArgv)}const shouldRegisterPrimaryOnly=argv=>!(isTruthyEnvValue(process.env.BUILDERFORCE_AGENTS_DISABLE_LAZY_SUBCOMMANDS)||hasHelpOrVersion(argv)),shouldEagerRegisterSubcommands=_argv=>isTruthyEnvValue(process.env.BUILDERFORCE_AGENTS_DISABLE_LAZY_SUBCOMMANDS),loadConfig=async()=>{let{loadConfig:_load}=await import(`./io-eFeD7i45.js`);return _load()},entries=[{name:`acp`,description:`Agent Control Protocol tools`,hasSubcommands:!0,register:async program=>{(await import(`./acp-cli-MpAiMGLW.js`)).registerAcpCli(program)}},{name:`gateway`,description:`Run, inspect, and query the WebSocket Gateway`,hasSubcommands:!0,register:async program=>{(await import(`./gateway-cli-BBu6KI7r.js`)).registerGatewayCli(program)}},{name:`daemon`,description:`Gateway service (legacy alias)`,hasSubcommands:!0,register:async program=>{(await import(`./daemon-cli-D1H4xGtf.js`)).registerDaemonCli(program)}},{name:`logs`,description:`Tail gateway file logs via RPC`,hasSubcommands:!1,register:async program=>{(await import(`./logs-cli-9nvNUnFR.js`)).registerLogsCli(program)}},{name:`usage`,description:`Show provider usage / quota (and workspace spend via gateway)`,hasSubcommands:!1,register:async program=>{(await import(`./usage-cli-DFdVNlsU.js`)).registerUsageCli(program)}},{name:`system`,description:`System events, heartbeat, and presence`,hasSubcommands:!0,register:async program=>{(await import(`./system-cli-DPS13LYc.js`)).registerSystemCli(program)}},{name:`models`,description:`Discover, scan, and configure models`,hasSubcommands:!0,register:async program=>{(await import(`./models-cli-DpbpZwjy.js`)).registerModelsCli(program)}},{name:`approvals`,description:`Manage exec approvals (gateway or node host)`,hasSubcommands:!0,register:async program=>{(await import(`./exec-approvals-cli-D3LAnLxs.js`)).registerExecApprovalsCli(program)}},{name:`nodes`,description:`Manage gateway-owned node pairing and node commands`,hasSubcommands:!0,register:async program=>{(await import(`./nodes-cli-DWd9tYUl.js`)).registerNodesCli(program)}},{name:`devices`,description:`Device pairing + token management`,hasSubcommands:!0,register:async program=>{(await import(`./devices-cli-D9Jj4pXw.js`)).registerDevicesCli(program)}},{name:`node`,description:`Run and manage the headless node host service`,hasSubcommands:!0,register:async program=>{(await import(`./node-cli-C7vElKc4.js`)).registerNodeCli(program)}},{name:`sandbox`,description:`Manage sandbox containers for agent isolation`,hasSubcommands:!0,register:async program=>{(await import(`./sandbox-cli-pf9GM19Y.js`)).registerSandboxCli(program)}},{name:`tui`,description:`Open a terminal UI connected to the Gateway`,hasSubcommands:!1,register:async program=>{(await import(`./tui-cli-BNeRzoEe.js`)).registerTuiCli(program)}},{name:`cron`,description:`Manage cron jobs via the Gateway scheduler`,hasSubcommands:!0,register:async program=>{(await import(`./cron-cli-DGOu2Psn.js`)).registerCronCli(program)}},{name:`workflow`,description:`Trigger Builderforce workflows from the CLI / CI`,hasSubcommands:!0,register:async program=>{(await import(`./workflow-cli-DDWSXyi0.js`)).registerWorkflowCli(program)}},{name:`dns`,description:`DNS helpers for wide-area discovery (Tailscale + CoreDNS)`,hasSubcommands:!0,register:async program=>{(await import(`./dns-cli-1kDSkke5.js`)).registerDnsCli(program)}},{name:`docs`,description:`Search the live BuilderForceAgents docs`,hasSubcommands:!1,register:async program=>{(await import(`./docs-cli-Dm0mhd23.js`)).registerDocsCli(program)}},{name:`hooks`,description:`Manage internal agent hooks`,hasSubcommands:!0,register:async program=>{(await import(`./hooks-cli-CYI9ZvNI.js`)).registerHooksCli(program)}},{name:`webhooks`,description:`Webhook helpers and integrations`,hasSubcommands:!0,register:async program=>{(await import(`./webhooks-cli-B3MfYMco.js`)).registerWebhooksCli(program)}},{name:`qr`,description:`Generate iOS pairing QR/setup code`,hasSubcommands:!1,register:async program=>{(await import(`./qr-cli-DGAuhszY.js`)).registerQrCli(program)}},{name:`agentbot`,description:`Legacy agentbot command aliases`,hasSubcommands:!0,register:async program=>{(await import(`./agentbot-cli-Bb2XPINn.js`)).registerAgentbotCli(program)}},{name:`pairing`,description:`Secure DM pairing (approve inbound requests)`,hasSubcommands:!0,register:async program=>{let{registerPluginCliCommands}=await import(`./cli-zC5qoRAp.js`);registerPluginCliCommands(program,await loadConfig()),(await import(`./pairing-cli-B1yEP0mE.js`)).registerPairingCli(program)}},{name:`plugins`,description:`Manage BuilderForceAgents plugins and extensions`,hasSubcommands:!0,register:async program=>{(await import(`./plugins-cli-DWlQnRpV.js`)).registerPluginsCli(program);let{registerPluginCliCommands}=await import(`./cli-zC5qoRAp.js`);registerPluginCliCommands(program,await loadConfig())}},{name:`channels`,description:`Manage connected chat channels (Telegram, Discord, etc.)`,hasSubcommands:!0,register:async program=>{(await import(`./channels-cli-YMSOJUmp.js`)).registerChannelsCli(program)}},{name:`directory`,description:`Lookup contact and group IDs (self, peers, groups) for supported chat channels`,hasSubcommands:!0,register:async program=>{(await import(`./directory-cli-CcxIC-sP.js`)).registerDirectoryCli(program)}},{name:`security`,description:`Security tools and local config audits`,hasSubcommands:!0,register:async program=>{(await import(`./security-cli-BcOBr53d.js`)).registerSecurityCli(program)}},{name:`skills`,description:`List and inspect available skills`,hasSubcommands:!0,register:async program=>{(await import(`./skills-cli-BYoNED-4.js`)).registerSkillsCli(program)}},{name:`update`,description:`Update BuilderForceAgents and inspect update channel status`,hasSubcommands:!0,register:async program=>{(await import(`./update-cli-BATUCF7p.js`)).registerUpdateCli(program)}},{name:`completion`,description:`Generate shell completion script`,hasSubcommands:!1,register:async program=>{(await import(`./completion-cli-CDy8f_Fg.js`)).registerCompletionCli(program)}}];function getSubCliEntries(){return entries}function getSubCliCommandsWithSubcommands(){return entries.filter(entry=>entry.hasSubcommands).map(entry=>entry.name)}function removeCommand$1(program,command){let commands=program.commands,index=commands.indexOf(command);index>=0&&commands.splice(index,1)}async function registerSubCliByName(program,name){let entry=entries.find(candidate=>candidate.name===name);if(!entry)return!1;let existing=program.commands.find(cmd=>cmd.name()===entry.name);return existing&&removeCommand$1(program,existing),await entry.register(program),!0}function registerLazyCommand(program,entry){let placeholder=program.command(entry.name).description(entry.description);placeholder.allowUnknownOption(!0),placeholder.allowExcessArguments(!0),placeholder.action(async(...actionArgs)=>{removeCommand$1(program,placeholder),await entry.register(program),await reparseProgramFromActionArgs(program,actionArgs)})}function registerSubCliCommands(program,argv=process.argv){if(shouldEagerRegisterSubcommands(argv)){for(let entry of entries)entry.register(program);return}let primary=getPrimaryCommand(argv);if(primary&&shouldRegisterPrimaryOnly(argv)){let entry=entries.find(candidate=>candidate.name===primary);if(entry){registerLazyCommand(program,entry);return}}for(let candidate of entries)registerLazyCommand(program,candidate)}const shouldRegisterCorePrimaryOnly=argv=>!hasHelpOrVersion(argv),coreEntries=[{commands:[{name:`setup`,description:`Initialize local config and agent workspace`,hasSubcommands:!1}],register:async({program})=>{(await import(`./register.setup-BzDbYjEw.js`)).registerSetupCommand(program)}},{commands:[{name:`onboard`,description:`Interactive onboarding wizard for gateway, workspace, and skills`,hasSubcommands:!1}],register:async({program})=>{(await import(`./register.onboard-BO_OtYg9.js`)).registerOnboardCommand(program)}},{commands:[{name:`connect`,description:`Register this machine as an agent host in a Builderforce workspace`,hasSubcommands:!1}],register:async({program})=>{(await import(`./register.connect-CMN7lqC5.js`)).registerConnectCommand(program)}},{commands:[{name:`configure`,description:`Interactive setup wizard for credentials, channels, gateway, and agent defaults`,hasSubcommands:!1}],register:async({program})=>{(await import(`./register.configure-BfPiEcFk.js`)).registerConfigureCommand(program)}},{commands:[{name:`config`,description:`Non-interactive config helpers (get/set/unset). Default: starts setup wizard.`,hasSubcommands:!0}],register:async({program})=>{(await import(`./config-cli-5ZSrACPR.js`)).registerConfigCli(program)}},{commands:[{name:`doctor`,description:`Health checks + quick fixes for the gateway and channels`,hasSubcommands:!1},{name:`dashboard`,description:`Open the Control UI with your current token`,hasSubcommands:!1},{name:`reset`,description:`Reset local config/state (keeps the CLI installed)`,hasSubcommands:!1},{name:`stop`,description:`Stop the running gateway service`,hasSubcommands:!1},{name:`uninstall`,description:`Uninstall the gateway service + local data (CLI remains)`,hasSubcommands:!1}],register:async({program})=>{(await import(`./register.maintenance-BpQE-3eC.js`)).registerMaintenanceCommands(program)}},{commands:[{name:`message`,description:`Send, read, and manage messages`,hasSubcommands:!0}],register:async({program,ctx})=>{(await import(`./register.message-C4Gf388m.js`)).registerMessageCommands(program,ctx)}},{commands:[{name:`memory`,description:`Search and reindex memory files`,hasSubcommands:!0}],register:async({program})=>{(await import(`./memory-cli-DDUGbrvP.js`)).registerMemoryCli(program)}},{commands:[{name:`agent`,description:`Run one agent turn via the Gateway`,hasSubcommands:!1},{name:`agents`,description:`Manage isolated agents (workspaces, auth, routing)`,hasSubcommands:!0}],register:async({program,ctx})=>{(await import(`./register.agent-C84ud-cS.js`)).registerAgentCommands(program,{agentChannelOptions:ctx.agentChannelOptions})}},{commands:[{name:`status`,description:`Show channel health and recent session recipients`,hasSubcommands:!1},{name:`health`,description:`Fetch health from the running gateway`,hasSubcommands:!1},{name:`sessions`,description:`List stored conversation sessions`,hasSubcommands:!1}],register:async({program})=>{(await import(`./register.status-health-sessions-BbYzFw1X.js`)).registerStatusHealthSessionsCommands(program)}},{commands:[{name:`browser`,description:`Manage BuilderForceAgents's dedicated browser (Chrome/Chromium)`,hasSubcommands:!0}],register:async({program})=>{(await import(`./browser-cli-vjQ9HuP3.js`)).registerBrowserCli(program)}},{commands:[{name:`init`,description:`Initialize a project with builderForceAgents`,hasSubcommands:!1},{name:`project`,description:`Manage builderForceAgents project context`,hasSubcommands:!0},{name:`workforce`,description:`Manage Builderforce Workforce agents (custom trained LLMs)`,hasSubcommands:!0}],register:async({program})=>{let mod=await import(`./builderforce-BdJAOfvE.js`);program.addCommand(mod.createInitCommand()),program.addCommand(mod.createBuilderForceAgentsCommand()),program.addCommand(mod.createAgentCommand())}}];function collectCoreCliCommandNames(predicate){let seen=new Set,names=[];for(let entry of coreEntries)for(let command of entry.commands)predicate&&!predicate(command)||seen.has(command.name)||(seen.add(command.name),names.push(command.name));return names}function getCoreCliCommandNames(){return collectCoreCliCommandNames()}function getCoreCliCommandsWithSubcommands(){return collectCoreCliCommandNames(command=>command.hasSubcommands)}function removeCommand(program,command){let commands=program.commands,index=commands.indexOf(command);index>=0&&commands.splice(index,1)}function removeEntryCommands(program,entry){for(let cmd of entry.commands){let existing=program.commands.find(c=>c.name()===cmd.name);existing&&removeCommand(program,existing)}}function registerLazyCoreCommand(program,ctx,entry,command){let placeholder=program.command(command.name).description(command.description);placeholder.allowUnknownOption(!0),placeholder.allowExcessArguments(!0),placeholder.action(async(...actionArgs)=>{removeEntryCommands(program,entry),await entry.register({program,ctx,argv:process.argv}),await reparseProgramFromActionArgs(program,actionArgs)})}async function registerCoreCliByName(program,ctx,name,argv=process.argv){let entry=coreEntries.find(candidate=>candidate.commands.some(cmd=>cmd.name===name));return entry?(removeEntryCommands(program,entry),await entry.register({program,ctx,argv}),!0):!1}function registerCoreCliCommands(program,ctx,argv){let primary=getPrimaryCommand(argv);if(primary&&shouldRegisterCorePrimaryOnly(argv)){let entry=coreEntries.find(candidate=>candidate.commands.some(cmd=>cmd.name===primary));if(entry){let cmd=entry.commands.find(c=>c.name===primary);cmd&&registerLazyCoreCommand(program,ctx,entry,cmd);return}}for(let entry of coreEntries)for(let cmd of entry.commands)registerLazyCoreCommand(program,ctx,entry,cmd)}function registerProgramCommands(program,ctx,argv=process.argv){registerCoreCliCommands(program,ctx,argv),registerSubCliCommands(program,argv)}const PROGRAM_CONTEXT_SYMBOL=Symbol.for(`builderforce.cli.programContext`);function setProgramContext(program,ctx){program[PROGRAM_CONTEXT_SYMBOL]=ctx}function getProgramContext(program){return program[PROGRAM_CONTEXT_SYMBOL]}export{registerCoreCliByName as a,getSubCliEntries as c,getVerboseFlag as d,hasHelpOrVersion as f,getCoreCliCommandsWithSubcommands as i,registerSubCliByName as l,setProgramContext as n,registerProgramCommands as o,getCoreCliCommandNames as r,getSubCliCommandsWithSubcommands as s,getProgramContext as t,getCommandPath as u};
@@ -1,4 +1,4 @@
1
- import{C as loadPersonasFromDir,a as saveProjectContext,g as WORKSPACE_STATE_FILE,n as loadProjectContext,v as resolveBuilderForceAgentsDir}from"./project-context-store-C8TROXjr.js";import path from"node:path";import fs from"node:fs/promises";import{parse,stringify}from"yaml";async function initializeBuilderForceAgentsProject(projectRoot,context){let dir=resolveBuilderForceAgentsDir(projectRoot);await fs.mkdir(dir.root,{recursive:!0}),await fs.mkdir(dir.skillsDir,{recursive:!0}),await fs.mkdir(dir.memoryDir,{recursive:!0}),await fs.mkdir(dir.sessionsDir,{recursive:!0}),await fs.mkdir(dir.personasDir,{recursive:!0});let defaultContext={version:1,projectName:context?.projectName||path.basename(projectRoot),description:context?.description||`A builderForceAgents-enabled project`,rootPath:projectRoot,languages:context?.languages||[],frameworks:context?.frameworks||[],architecture:context?.architecture||{style:`unknown`,layers:[],patterns:[]},buildSystem:context?.buildSystem,testFramework:context?.testFramework,lintingTools:context?.lintingTools||[],dependencies:context?.dependencies||{production:{},development:{}},customRules:context?.customRules||[],metadata:context?.metadata||{},...context?.llm?{llm:context.llm}:{},...context?.builderforce?{builderforce:context.builderforce}:{}};await fs.writeFile(dir.contextPath,stringify(defaultContext),`utf-8`),await fs.writeFile(dir.architecturePath,`# Architecture
1
+ import{C as loadPersonasFromDir,a as saveProjectContext,g as WORKSPACE_STATE_FILE,n as loadProjectContext,v as resolveBuilderForceAgentsDir}from"./project-context-store-BSIWJD6S.js";import path from"node:path";import fs from"node:fs/promises";import{parse,stringify}from"yaml";async function initializeBuilderForceAgentsProject(projectRoot,context){let dir=resolveBuilderForceAgentsDir(projectRoot);await fs.mkdir(dir.root,{recursive:!0}),await fs.mkdir(dir.skillsDir,{recursive:!0}),await fs.mkdir(dir.memoryDir,{recursive:!0}),await fs.mkdir(dir.sessionsDir,{recursive:!0}),await fs.mkdir(dir.personasDir,{recursive:!0});let defaultContext={version:1,projectName:context?.projectName||path.basename(projectRoot),description:context?.description||`A builderForceAgents-enabled project`,rootPath:projectRoot,languages:context?.languages||[],frameworks:context?.frameworks||[],architecture:context?.architecture||{style:`unknown`,layers:[],patterns:[]},buildSystem:context?.buildSystem,testFramework:context?.testFramework,lintingTools:context?.lintingTools||[],dependencies:context?.dependencies||{production:{},development:{}},customRules:context?.customRules||[],metadata:context?.metadata||{},...context?.llm?{llm:context.llm}:{},...context?.builderforce?{builderforce:context.builderforce}:{}};await fs.writeFile(dir.contextPath,stringify(defaultContext),`utf-8`),await fs.writeFile(dir.architecturePath,`# Architecture
2
2
 
3
3
  ## Overview
4
4
 
@@ -1,4 +1,4 @@
1
- import{C as loadPersonasFromDir,a as saveProjectContext,g as WORKSPACE_STATE_FILE,n as loadProjectContext,v as resolveBuilderForceAgentsDir}from"./project-context-store-ClFt-YDL.js";import path from"node:path";import fs from"node:fs/promises";import{parse,stringify}from"yaml";async function initializeBuilderForceAgentsProject(projectRoot,context){let dir=resolveBuilderForceAgentsDir(projectRoot);await fs.mkdir(dir.root,{recursive:!0}),await fs.mkdir(dir.skillsDir,{recursive:!0}),await fs.mkdir(dir.memoryDir,{recursive:!0}),await fs.mkdir(dir.sessionsDir,{recursive:!0}),await fs.mkdir(dir.personasDir,{recursive:!0});let defaultContext={version:1,projectName:context?.projectName||path.basename(projectRoot),description:context?.description||`A builderForceAgents-enabled project`,rootPath:projectRoot,languages:context?.languages||[],frameworks:context?.frameworks||[],architecture:context?.architecture||{style:`unknown`,layers:[],patterns:[]},buildSystem:context?.buildSystem,testFramework:context?.testFramework,lintingTools:context?.lintingTools||[],dependencies:context?.dependencies||{production:{},development:{}},customRules:context?.customRules||[],metadata:context?.metadata||{},...context?.llm?{llm:context.llm}:{},...context?.builderforce?{builderforce:context.builderforce}:{}};await fs.writeFile(dir.contextPath,stringify(defaultContext),`utf-8`),await fs.writeFile(dir.architecturePath,`# Architecture
1
+ import{C as loadPersonasFromDir,a as saveProjectContext,g as WORKSPACE_STATE_FILE,n as loadProjectContext,v as resolveBuilderForceAgentsDir}from"./project-context-store-BS994lZX.js";import path from"node:path";import fs from"node:fs/promises";import{parse,stringify}from"yaml";async function initializeBuilderForceAgentsProject(projectRoot,context){let dir=resolveBuilderForceAgentsDir(projectRoot);await fs.mkdir(dir.root,{recursive:!0}),await fs.mkdir(dir.skillsDir,{recursive:!0}),await fs.mkdir(dir.memoryDir,{recursive:!0}),await fs.mkdir(dir.sessionsDir,{recursive:!0}),await fs.mkdir(dir.personasDir,{recursive:!0});let defaultContext={version:1,projectName:context?.projectName||path.basename(projectRoot),description:context?.description||`A builderForceAgents-enabled project`,rootPath:projectRoot,languages:context?.languages||[],frameworks:context?.frameworks||[],architecture:context?.architecture||{style:`unknown`,layers:[],patterns:[]},buildSystem:context?.buildSystem,testFramework:context?.testFramework,lintingTools:context?.lintingTools||[],dependencies:context?.dependencies||{production:{},development:{}},customRules:context?.customRules||[],metadata:context?.metadata||{},...context?.llm?{llm:context.llm}:{},...context?.builderforce?{builderforce:context.builderforce}:{}};await fs.writeFile(dir.contextPath,stringify(defaultContext),`utf-8`),await fs.writeFile(dir.architecturePath,`# Architecture
2
2
 
3
3
  ## Overview
4
4
 
@@ -0,0 +1 @@
1
+ import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./src-D2-7sOAX.js";import{_ as isBuilderForceAgentsProject}from"./project-context-store-BS994lZX.js";import{f as initializeBuilderForceAgentsProject}from"./project-context-Cg0S9eFT.js";export{initializeBuilderForceAgentsProject,isBuilderForceAgentsProject};
@@ -0,0 +1 @@
1
+ import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./logger-AbH8mdkv.js";import"./src-BM8G-tIl.js";import{_ as isBuilderForceAgentsProject}from"./project-context-store-BSIWJD6S.js";import{f as initializeBuilderForceAgentsProject}from"./project-context-C5KLsMTc.js";export{initializeBuilderForceAgentsProject,isBuilderForceAgentsProject};
@@ -0,0 +1 @@
1
+ import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./logger-AbH8mdkv.js";import"./src-BM8G-tIl.js";import{n as loadProjectContext}from"./project-context-store-BSIWJD6S.js";export{loadProjectContext};
@@ -1,2 +1,2 @@
1
- import{t as logDebug}from"./logger-Bch0bx9c.js";import{a as buildPsychometricBlock,g as maxThink}from"./src-DxNC0IHE.js";import os from"node:os";import path from"node:path";import fs from"node:fs/promises";import{parse,stringify}from"yaml";function raiseThinkLevel(requested,floor){return floor?requested?maxThink(requested,floor):floor:requested}function getRoleProfile(role){return role.persona?.psychometric}const USER_PERSONAS_DIR=path.join(os.homedir(),`.builderforce`,`personas`);var PersonaRegistry=class PersonaRegistry{constructor(){this.builtins=[],this.byName=new Map,this.assignments=[]}static{this.SOURCE_PRIORITY=[`builtin`,`user-global`,`project-local`,`marketplace`,`builderforce-assigned`]}static priority(source){let idx=PersonaRegistry.SOURCE_PRIORITY.indexOf(source);return idx===-1?-1:idx}registerBuiltins(roles){for(let role of roles){let plugin={...role,source:`builtin`,active:!1};this.builtins.push(plugin),this.byName.has(role.name)||this.byName.set(role.name,plugin)}}register(plugin){let existing=this.byName.get(plugin.name);(!existing||PersonaRegistry.priority(plugin.source)>=PersonaRegistry.priority(existing.source))&&(this.byName.set(plugin.name,plugin),logDebug(`[personas] registered "${plugin.name}" from ${plugin.source}`+(plugin.pluginMetadata?.version?` v${plugin.pluginMetadata.version}`:``)))}async loadFromDir(dir,source){let plugins=await loadPersonasFromDir(dir,source);for(let p of plugins)this.register(p);return plugins.length}applyAssignments(assignments){this.assignments=assignments;for(let assignment of assignments){let plugin=this.byName.get(assignment.name);plugin&&(plugin.active=!0)}}activate(name){let plugin=this.byName.get(name);return plugin?(plugin.active=!0,this.assignments.find(a=>a.name===name)||this.assignments.push({name,assignedAt:new Date().toISOString()}),!0):!1}deactivate(name){let plugin=this.byName.get(name);plugin&&(plugin.active=!1)}resolve(name){return this.byName.get(name)??null}listAll(){return Array.from(this.byName.values()).toSorted((a,b)=>a.name.localeCompare(b.name))}listActive(){return this.listAll().filter(p=>p.active)}getAssignments(){return this.assignments.slice()}unregisterForTest(name){let existing=this.byName.get(name);existing&&existing.source!==`builtin`&&this.byName.delete(name)}};function metaStr(pluginMeta,raw,field){let fromMeta=field===`agenthubId`?void 0:pluginMeta?.[field];if(typeof fromMeta==`string`)return fromMeta;let fromRaw=raw[field];return typeof fromRaw==`string`?fromRaw:void 0}async function loadPersonaFromFile(filePath,source){try{let raw=parse(await fs.readFile(filePath,`utf-8`));if(!raw||typeof raw.name!=`string`||!raw.name.trim())return logDebug(`[personas] skipping ${filePath}: missing required "name" field`),null;let pluginMeta=raw.pluginMetadata,mergedMeta={marketplaceId:metaStr(pluginMeta,raw,`marketplaceId`)??metaStr(pluginMeta,raw,`agenthubId`),version:metaStr(pluginMeta,raw,`version`),author:metaStr(pluginMeta,raw,`author`),authorUrl:metaStr(pluginMeta,raw,`authorUrl`),license:metaStr(pluginMeta,raw,`license`),requiresLicense:pluginMeta?.requiresLicense??(typeof raw.requiresLicense==`boolean`?raw.requiresLicense:void 0),marketplaceUrl:metaStr(pluginMeta,raw,`marketplaceUrl`),builderForceAgentsVersion:metaStr(pluginMeta,raw,`builderForceAgentsVersion`),tags:pluginMeta?.tags??(Array.isArray(raw.tags)?raw.tags:void 0)},cleanMeta=Object.fromEntries(Object.entries(mergedMeta).filter(([,v])=>v!==void 0));return{name:raw.name,description:typeof raw.description==`string`?raw.description:``,capabilities:Array.isArray(raw.capabilities)?raw.capabilities:[],tools:Array.isArray(raw.tools)?raw.tools:[],systemPrompt:typeof raw.systemPrompt==`string`?raw.systemPrompt:void 0,persona:raw.persona&&typeof raw.persona==`object`?raw.persona:void 0,outputFormat:raw.outputFormat&&typeof raw.outputFormat==`object`?raw.outputFormat:void 0,model:typeof raw.model==`string`?raw.model:void 0,thinking:typeof raw.thinking==`string`?raw.thinking:void 0,constraints:Array.isArray(raw.constraints)?raw.constraints:void 0,source,filePath,pluginMetadata:Object.keys(cleanMeta??{}).length>0?cleanMeta:void 0,active:!1}}catch(err){return logDebug(`[personas] failed to load ${filePath}: ${String(err)}`),null}}async function loadPersonasFromDir(dir,source){let plugins=[];try{let files=await fs.readdir(dir);for(let file of files)if(file.endsWith(`.yaml`)||file.endsWith(`.yml`)){let plugin=await loadPersonaFromFile(path.join(dir,file),source);plugin&&plugins.push(plugin)}}catch{}return plugins}function buildPersonaSystemBlock(role){let lines=[],hasPersona=!!role.persona,hasFormat=!!(role.outputFormat?.requiredSections?.length||role.outputFormat?.outputPrefix),hasConstraints=!!role.constraints?.length;if(!hasPersona&&!hasFormat&&!hasConstraints)return``;if(lines.push(`--- Agent Persona ---`),lines.push(`Role: ${role.name}`),role.persona){lines.push(`Voice: ${role.persona.voice}`),lines.push(`Perspective: ${role.persona.perspective}`),lines.push(`Decision style: ${role.persona.decisionStyle}`);let psychometricBlock=buildPsychometricBlock(role.persona.psychometric);psychometricBlock&&lines.push(psychometricBlock)}return role.outputFormat?.requiredSections?.length&&lines.push(`Required output sections: ${role.outputFormat.requiredSections.join(`, `)}`),role.outputFormat?.outputPrefix&&lines.push(`Prefix your summary with: ${role.outputFormat.outputPrefix}`),role.constraints?.length&&lines.push(`Constraints: ${role.constraints.join(`; `)}`),lines.push(`---`),lines.join(`
1
+ import{t as logDebug}from"./logger-Bch0bx9c.js";import{a as buildPsychometricBlock,b as maxThink}from"./src-D2-7sOAX.js";import os from"node:os";import path from"node:path";import fs from"node:fs/promises";import{parse,stringify}from"yaml";function raiseThinkLevel(requested,floor){return floor?requested?maxThink(requested,floor):floor:requested}function getRoleProfile(role){return role.persona?.psychometric}const USER_PERSONAS_DIR=path.join(os.homedir(),`.builderforce`,`personas`);var PersonaRegistry=class PersonaRegistry{constructor(){this.builtins=[],this.byName=new Map,this.assignments=[]}static{this.SOURCE_PRIORITY=[`builtin`,`user-global`,`project-local`,`marketplace`,`builderforce-assigned`]}static priority(source){let idx=PersonaRegistry.SOURCE_PRIORITY.indexOf(source);return idx===-1?-1:idx}registerBuiltins(roles){for(let role of roles){let plugin={...role,source:`builtin`,active:!1};this.builtins.push(plugin),this.byName.has(role.name)||this.byName.set(role.name,plugin)}}register(plugin){let existing=this.byName.get(plugin.name);(!existing||PersonaRegistry.priority(plugin.source)>=PersonaRegistry.priority(existing.source))&&(this.byName.set(plugin.name,plugin),logDebug(`[personas] registered "${plugin.name}" from ${plugin.source}`+(plugin.pluginMetadata?.version?` v${plugin.pluginMetadata.version}`:``)))}async loadFromDir(dir,source){let plugins=await loadPersonasFromDir(dir,source);for(let p of plugins)this.register(p);return plugins.length}applyAssignments(assignments){this.assignments=assignments;for(let assignment of assignments){let plugin=this.byName.get(assignment.name);plugin&&(plugin.active=!0)}}activate(name){let plugin=this.byName.get(name);return plugin?(plugin.active=!0,this.assignments.find(a=>a.name===name)||this.assignments.push({name,assignedAt:new Date().toISOString()}),!0):!1}deactivate(name){let plugin=this.byName.get(name);plugin&&(plugin.active=!1)}resolve(name){return this.byName.get(name)??null}listAll(){return Array.from(this.byName.values()).toSorted((a,b)=>a.name.localeCompare(b.name))}listActive(){return this.listAll().filter(p=>p.active)}getAssignments(){return this.assignments.slice()}unregisterForTest(name){let existing=this.byName.get(name);existing&&existing.source!==`builtin`&&this.byName.delete(name)}};function metaStr(pluginMeta,raw,field){let fromMeta=field===`agenthubId`?void 0:pluginMeta?.[field];if(typeof fromMeta==`string`)return fromMeta;let fromRaw=raw[field];return typeof fromRaw==`string`?fromRaw:void 0}async function loadPersonaFromFile(filePath,source){try{let raw=parse(await fs.readFile(filePath,`utf-8`));if(!raw||typeof raw.name!=`string`||!raw.name.trim())return logDebug(`[personas] skipping ${filePath}: missing required "name" field`),null;let pluginMeta=raw.pluginMetadata,mergedMeta={marketplaceId:metaStr(pluginMeta,raw,`marketplaceId`)??metaStr(pluginMeta,raw,`agenthubId`),version:metaStr(pluginMeta,raw,`version`),author:metaStr(pluginMeta,raw,`author`),authorUrl:metaStr(pluginMeta,raw,`authorUrl`),license:metaStr(pluginMeta,raw,`license`),requiresLicense:pluginMeta?.requiresLicense??(typeof raw.requiresLicense==`boolean`?raw.requiresLicense:void 0),marketplaceUrl:metaStr(pluginMeta,raw,`marketplaceUrl`),builderForceAgentsVersion:metaStr(pluginMeta,raw,`builderForceAgentsVersion`),tags:pluginMeta?.tags??(Array.isArray(raw.tags)?raw.tags:void 0)},cleanMeta=Object.fromEntries(Object.entries(mergedMeta).filter(([,v])=>v!==void 0));return{name:raw.name,description:typeof raw.description==`string`?raw.description:``,capabilities:Array.isArray(raw.capabilities)?raw.capabilities:[],tools:Array.isArray(raw.tools)?raw.tools:[],systemPrompt:typeof raw.systemPrompt==`string`?raw.systemPrompt:void 0,persona:raw.persona&&typeof raw.persona==`object`?raw.persona:void 0,outputFormat:raw.outputFormat&&typeof raw.outputFormat==`object`?raw.outputFormat:void 0,model:typeof raw.model==`string`?raw.model:void 0,thinking:typeof raw.thinking==`string`?raw.thinking:void 0,constraints:Array.isArray(raw.constraints)?raw.constraints:void 0,source,filePath,pluginMetadata:Object.keys(cleanMeta??{}).length>0?cleanMeta:void 0,active:!1}}catch(err){return logDebug(`[personas] failed to load ${filePath}: ${String(err)}`),null}}async function loadPersonasFromDir(dir,source){let plugins=[];try{let files=await fs.readdir(dir);for(let file of files)if(file.endsWith(`.yaml`)||file.endsWith(`.yml`)){let plugin=await loadPersonaFromFile(path.join(dir,file),source);plugin&&plugins.push(plugin)}}catch{}return plugins}function buildPersonaSystemBlock(role){let lines=[],hasPersona=!!role.persona,hasFormat=!!(role.outputFormat?.requiredSections?.length||role.outputFormat?.outputPrefix),hasConstraints=!!role.constraints?.length;if(!hasPersona&&!hasFormat&&!hasConstraints)return``;if(lines.push(`--- Agent Persona ---`),lines.push(`Role: ${role.name}`),role.persona){lines.push(`Voice: ${role.persona.voice}`),lines.push(`Perspective: ${role.persona.perspective}`),lines.push(`Decision style: ${role.persona.decisionStyle}`);let psychometricBlock=buildPsychometricBlock(role.persona.psychometric);psychometricBlock&&lines.push(psychometricBlock)}return role.outputFormat?.requiredSections?.length&&lines.push(`Required output sections: ${role.outputFormat.requiredSections.join(`, `)}`),role.outputFormat?.outputPrefix&&lines.push(`Prefix your summary with: ${role.outputFormat.outputPrefix}`),role.constraints?.length&&lines.push(`Constraints: ${role.constraints.join(`; `)}`),lines.push(`---`),lines.join(`
2
2
  `)}const globalPersonaRegistry=new PersonaRegistry,BUILDERFORCE_AGENTS_DIR=`.builderforce`,PRD_FILE=`PRD.md`;function resolvePrdPath(projectRoot){return path.join(projectRoot,PRD_FILE)}const CONTEXT_FILE=`context.yaml`,ARCHITECTURE_FILE=`architecture.md`,RULES_FILE=`rules.yaml`,GOVERNANCE_FILE=`governance.md`,WORKSPACE_STATE_FILE=`workspace-state.json`,SKILLS_DIR=`skills`,MEMORY_DIR=`memory`,SESSIONS_DIR=`sessions`;function resolveBuilderForceAgentsDir(projectRoot){let root=path.join(projectRoot,BUILDERFORCE_AGENTS_DIR);return{root,contextPath:path.join(root,CONTEXT_FILE),architecturePath:path.join(root,ARCHITECTURE_FILE),rulesPath:path.join(root,RULES_FILE),governancePath:path.join(root,GOVERNANCE_FILE),skillsDir:path.join(root,SKILLS_DIR),memoryDir:path.join(root,MEMORY_DIR),sessionsDir:path.join(root,SESSIONS_DIR),personasDir:path.join(root,`personas`)}}async function isBuilderForceAgentsProject(projectRoot){let dir=resolveBuilderForceAgentsDir(projectRoot);try{return(await fs.stat(dir.root)).isDirectory()}catch{return!1}}async function updateProjectContextFields(projectRoot,updates){let dir=resolveBuilderForceAgentsDir(projectRoot),updated={...parse(await fs.readFile(dir.contextPath,`utf-8`)),...updates};await fs.writeFile(dir.contextPath,stringify(updated),`utf-8`)}async function loadProjectContext(projectRoot){let dir=resolveBuilderForceAgentsDir(projectRoot);try{return parse(await fs.readFile(dir.contextPath,`utf-8`))}catch{return null}}async function saveProjectContext(projectRoot,context){let dir=resolveBuilderForceAgentsDir(projectRoot);await fs.mkdir(path.dirname(dir.contextPath),{recursive:!0}),await fs.writeFile(dir.contextPath,stringify(context),`utf-8`)}async function loadProjectRules(projectRoot){let dir=resolveBuilderForceAgentsDir(projectRoot);try{return parse(await fs.readFile(dir.rulesPath,`utf-8`))}catch{return null}}async function loadProjectGovernance(projectRoot){let dir=resolveBuilderForceAgentsDir(projectRoot);try{return await fs.readFile(dir.governancePath,`utf-8`)}catch{return null}}async function loadProjectArchitecture(projectRoot){let dir=resolveBuilderForceAgentsDir(projectRoot);try{return await fs.readFile(dir.architecturePath,`utf-8`)}catch{return null}}export{loadPersonasFromDir as C,globalPersonaRegistry as S,raiseThinkLevel as T,isBuilderForceAgentsProject as _,saveProjectContext as a,USER_PERSONAS_DIR as b,BUILDERFORCE_AGENTS_DIR as c,MEMORY_DIR as d,PRD_FILE as f,WORKSPACE_STATE_FILE as g,SKILLS_DIR as h,loadProjectRules as i,CONTEXT_FILE as l,SESSIONS_DIR as m,loadProjectContext as n,updateProjectContextFields as o,RULES_FILE as p,loadProjectGovernance as r,ARCHITECTURE_FILE as s,loadProjectArchitecture as t,GOVERNANCE_FILE as u,resolveBuilderForceAgentsDir as v,getRoleProfile as w,buildPersonaSystemBlock as x,resolvePrdPath as y};
@@ -1,2 +1,2 @@
1
- import{t as logDebug}from"./logger-AbH8mdkv.js";import{a as buildPsychometricBlock,g as maxThink}from"./src-BRo9ywDM.js";import os from"node:os";import path from"node:path";import fs from"node:fs/promises";import{parse,stringify}from"yaml";function raiseThinkLevel(requested,floor){return floor?requested?maxThink(requested,floor):floor:requested}function getRoleProfile(role){return role.persona?.psychometric}const USER_PERSONAS_DIR=path.join(os.homedir(),`.builderforce`,`personas`);var PersonaRegistry=class PersonaRegistry{constructor(){this.builtins=[],this.byName=new Map,this.assignments=[]}static{this.SOURCE_PRIORITY=[`builtin`,`user-global`,`project-local`,`marketplace`,`builderforce-assigned`]}static priority(source){let idx=PersonaRegistry.SOURCE_PRIORITY.indexOf(source);return idx===-1?-1:idx}registerBuiltins(roles){for(let role of roles){let plugin={...role,source:`builtin`,active:!1};this.builtins.push(plugin),this.byName.has(role.name)||this.byName.set(role.name,plugin)}}register(plugin){let existing=this.byName.get(plugin.name);(!existing||PersonaRegistry.priority(plugin.source)>=PersonaRegistry.priority(existing.source))&&(this.byName.set(plugin.name,plugin),logDebug(`[personas] registered "${plugin.name}" from ${plugin.source}`+(plugin.pluginMetadata?.version?` v${plugin.pluginMetadata.version}`:``)))}async loadFromDir(dir,source){let plugins=await loadPersonasFromDir(dir,source);for(let p of plugins)this.register(p);return plugins.length}applyAssignments(assignments){this.assignments=assignments;for(let assignment of assignments){let plugin=this.byName.get(assignment.name);plugin&&(plugin.active=!0)}}activate(name){let plugin=this.byName.get(name);return plugin?(plugin.active=!0,this.assignments.find(a=>a.name===name)||this.assignments.push({name,assignedAt:new Date().toISOString()}),!0):!1}deactivate(name){let plugin=this.byName.get(name);plugin&&(plugin.active=!1)}resolve(name){return this.byName.get(name)??null}listAll(){return Array.from(this.byName.values()).toSorted((a,b)=>a.name.localeCompare(b.name))}listActive(){return this.listAll().filter(p=>p.active)}getAssignments(){return this.assignments.slice()}unregisterForTest(name){let existing=this.byName.get(name);existing&&existing.source!==`builtin`&&this.byName.delete(name)}};function metaStr(pluginMeta,raw,field){let fromMeta=field===`agenthubId`?void 0:pluginMeta?.[field];if(typeof fromMeta==`string`)return fromMeta;let fromRaw=raw[field];return typeof fromRaw==`string`?fromRaw:void 0}async function loadPersonaFromFile(filePath,source){try{let raw=parse(await fs.readFile(filePath,`utf-8`));if(!raw||typeof raw.name!=`string`||!raw.name.trim())return logDebug(`[personas] skipping ${filePath}: missing required "name" field`),null;let pluginMeta=raw.pluginMetadata,mergedMeta={marketplaceId:metaStr(pluginMeta,raw,`marketplaceId`)??metaStr(pluginMeta,raw,`agenthubId`),version:metaStr(pluginMeta,raw,`version`),author:metaStr(pluginMeta,raw,`author`),authorUrl:metaStr(pluginMeta,raw,`authorUrl`),license:metaStr(pluginMeta,raw,`license`),requiresLicense:pluginMeta?.requiresLicense??(typeof raw.requiresLicense==`boolean`?raw.requiresLicense:void 0),marketplaceUrl:metaStr(pluginMeta,raw,`marketplaceUrl`),builderForceAgentsVersion:metaStr(pluginMeta,raw,`builderForceAgentsVersion`),tags:pluginMeta?.tags??(Array.isArray(raw.tags)?raw.tags:void 0)},cleanMeta=Object.fromEntries(Object.entries(mergedMeta).filter(([,v])=>v!==void 0));return{name:raw.name,description:typeof raw.description==`string`?raw.description:``,capabilities:Array.isArray(raw.capabilities)?raw.capabilities:[],tools:Array.isArray(raw.tools)?raw.tools:[],systemPrompt:typeof raw.systemPrompt==`string`?raw.systemPrompt:void 0,persona:raw.persona&&typeof raw.persona==`object`?raw.persona:void 0,outputFormat:raw.outputFormat&&typeof raw.outputFormat==`object`?raw.outputFormat:void 0,model:typeof raw.model==`string`?raw.model:void 0,thinking:typeof raw.thinking==`string`?raw.thinking:void 0,constraints:Array.isArray(raw.constraints)?raw.constraints:void 0,source,filePath,pluginMetadata:Object.keys(cleanMeta??{}).length>0?cleanMeta:void 0,active:!1}}catch(err){return logDebug(`[personas] failed to load ${filePath}: ${String(err)}`),null}}async function loadPersonasFromDir(dir,source){let plugins=[];try{let files=await fs.readdir(dir);for(let file of files)if(file.endsWith(`.yaml`)||file.endsWith(`.yml`)){let plugin=await loadPersonaFromFile(path.join(dir,file),source);plugin&&plugins.push(plugin)}}catch{}return plugins}function buildPersonaSystemBlock(role){let lines=[],hasPersona=!!role.persona,hasFormat=!!(role.outputFormat?.requiredSections?.length||role.outputFormat?.outputPrefix),hasConstraints=!!role.constraints?.length;if(!hasPersona&&!hasFormat&&!hasConstraints)return``;if(lines.push(`--- Agent Persona ---`),lines.push(`Role: ${role.name}`),role.persona){lines.push(`Voice: ${role.persona.voice}`),lines.push(`Perspective: ${role.persona.perspective}`),lines.push(`Decision style: ${role.persona.decisionStyle}`);let psychometricBlock=buildPsychometricBlock(role.persona.psychometric);psychometricBlock&&lines.push(psychometricBlock)}return role.outputFormat?.requiredSections?.length&&lines.push(`Required output sections: ${role.outputFormat.requiredSections.join(`, `)}`),role.outputFormat?.outputPrefix&&lines.push(`Prefix your summary with: ${role.outputFormat.outputPrefix}`),role.constraints?.length&&lines.push(`Constraints: ${role.constraints.join(`; `)}`),lines.push(`---`),lines.join(`
1
+ import{t as logDebug}from"./logger-AbH8mdkv.js";import{a as buildPsychometricBlock,b as maxThink}from"./src-BM8G-tIl.js";import os from"node:os";import path from"node:path";import fs from"node:fs/promises";import{parse,stringify}from"yaml";function raiseThinkLevel(requested,floor){return floor?requested?maxThink(requested,floor):floor:requested}function getRoleProfile(role){return role.persona?.psychometric}const USER_PERSONAS_DIR=path.join(os.homedir(),`.builderforce`,`personas`);var PersonaRegistry=class PersonaRegistry{constructor(){this.builtins=[],this.byName=new Map,this.assignments=[]}static{this.SOURCE_PRIORITY=[`builtin`,`user-global`,`project-local`,`marketplace`,`builderforce-assigned`]}static priority(source){let idx=PersonaRegistry.SOURCE_PRIORITY.indexOf(source);return idx===-1?-1:idx}registerBuiltins(roles){for(let role of roles){let plugin={...role,source:`builtin`,active:!1};this.builtins.push(plugin),this.byName.has(role.name)||this.byName.set(role.name,plugin)}}register(plugin){let existing=this.byName.get(plugin.name);(!existing||PersonaRegistry.priority(plugin.source)>=PersonaRegistry.priority(existing.source))&&(this.byName.set(plugin.name,plugin),logDebug(`[personas] registered "${plugin.name}" from ${plugin.source}`+(plugin.pluginMetadata?.version?` v${plugin.pluginMetadata.version}`:``)))}async loadFromDir(dir,source){let plugins=await loadPersonasFromDir(dir,source);for(let p of plugins)this.register(p);return plugins.length}applyAssignments(assignments){this.assignments=assignments;for(let assignment of assignments){let plugin=this.byName.get(assignment.name);plugin&&(plugin.active=!0)}}activate(name){let plugin=this.byName.get(name);return plugin?(plugin.active=!0,this.assignments.find(a=>a.name===name)||this.assignments.push({name,assignedAt:new Date().toISOString()}),!0):!1}deactivate(name){let plugin=this.byName.get(name);plugin&&(plugin.active=!1)}resolve(name){return this.byName.get(name)??null}listAll(){return Array.from(this.byName.values()).toSorted((a,b)=>a.name.localeCompare(b.name))}listActive(){return this.listAll().filter(p=>p.active)}getAssignments(){return this.assignments.slice()}unregisterForTest(name){let existing=this.byName.get(name);existing&&existing.source!==`builtin`&&this.byName.delete(name)}};function metaStr(pluginMeta,raw,field){let fromMeta=field===`agenthubId`?void 0:pluginMeta?.[field];if(typeof fromMeta==`string`)return fromMeta;let fromRaw=raw[field];return typeof fromRaw==`string`?fromRaw:void 0}async function loadPersonaFromFile(filePath,source){try{let raw=parse(await fs.readFile(filePath,`utf-8`));if(!raw||typeof raw.name!=`string`||!raw.name.trim())return logDebug(`[personas] skipping ${filePath}: missing required "name" field`),null;let pluginMeta=raw.pluginMetadata,mergedMeta={marketplaceId:metaStr(pluginMeta,raw,`marketplaceId`)??metaStr(pluginMeta,raw,`agenthubId`),version:metaStr(pluginMeta,raw,`version`),author:metaStr(pluginMeta,raw,`author`),authorUrl:metaStr(pluginMeta,raw,`authorUrl`),license:metaStr(pluginMeta,raw,`license`),requiresLicense:pluginMeta?.requiresLicense??(typeof raw.requiresLicense==`boolean`?raw.requiresLicense:void 0),marketplaceUrl:metaStr(pluginMeta,raw,`marketplaceUrl`),builderForceAgentsVersion:metaStr(pluginMeta,raw,`builderForceAgentsVersion`),tags:pluginMeta?.tags??(Array.isArray(raw.tags)?raw.tags:void 0)},cleanMeta=Object.fromEntries(Object.entries(mergedMeta).filter(([,v])=>v!==void 0));return{name:raw.name,description:typeof raw.description==`string`?raw.description:``,capabilities:Array.isArray(raw.capabilities)?raw.capabilities:[],tools:Array.isArray(raw.tools)?raw.tools:[],systemPrompt:typeof raw.systemPrompt==`string`?raw.systemPrompt:void 0,persona:raw.persona&&typeof raw.persona==`object`?raw.persona:void 0,outputFormat:raw.outputFormat&&typeof raw.outputFormat==`object`?raw.outputFormat:void 0,model:typeof raw.model==`string`?raw.model:void 0,thinking:typeof raw.thinking==`string`?raw.thinking:void 0,constraints:Array.isArray(raw.constraints)?raw.constraints:void 0,source,filePath,pluginMetadata:Object.keys(cleanMeta??{}).length>0?cleanMeta:void 0,active:!1}}catch(err){return logDebug(`[personas] failed to load ${filePath}: ${String(err)}`),null}}async function loadPersonasFromDir(dir,source){let plugins=[];try{let files=await fs.readdir(dir);for(let file of files)if(file.endsWith(`.yaml`)||file.endsWith(`.yml`)){let plugin=await loadPersonaFromFile(path.join(dir,file),source);plugin&&plugins.push(plugin)}}catch{}return plugins}function buildPersonaSystemBlock(role){let lines=[],hasPersona=!!role.persona,hasFormat=!!(role.outputFormat?.requiredSections?.length||role.outputFormat?.outputPrefix),hasConstraints=!!role.constraints?.length;if(!hasPersona&&!hasFormat&&!hasConstraints)return``;if(lines.push(`--- Agent Persona ---`),lines.push(`Role: ${role.name}`),role.persona){lines.push(`Voice: ${role.persona.voice}`),lines.push(`Perspective: ${role.persona.perspective}`),lines.push(`Decision style: ${role.persona.decisionStyle}`);let psychometricBlock=buildPsychometricBlock(role.persona.psychometric);psychometricBlock&&lines.push(psychometricBlock)}return role.outputFormat?.requiredSections?.length&&lines.push(`Required output sections: ${role.outputFormat.requiredSections.join(`, `)}`),role.outputFormat?.outputPrefix&&lines.push(`Prefix your summary with: ${role.outputFormat.outputPrefix}`),role.constraints?.length&&lines.push(`Constraints: ${role.constraints.join(`; `)}`),lines.push(`---`),lines.join(`
2
2
  `)}const globalPersonaRegistry=new PersonaRegistry,BUILDERFORCE_AGENTS_DIR=`.builderforce`,PRD_FILE=`PRD.md`;function resolvePrdPath(projectRoot){return path.join(projectRoot,PRD_FILE)}const CONTEXT_FILE=`context.yaml`,ARCHITECTURE_FILE=`architecture.md`,RULES_FILE=`rules.yaml`,GOVERNANCE_FILE=`governance.md`,WORKSPACE_STATE_FILE=`workspace-state.json`,SKILLS_DIR=`skills`,MEMORY_DIR=`memory`,SESSIONS_DIR=`sessions`;function resolveBuilderForceAgentsDir(projectRoot){let root=path.join(projectRoot,BUILDERFORCE_AGENTS_DIR);return{root,contextPath:path.join(root,CONTEXT_FILE),architecturePath:path.join(root,ARCHITECTURE_FILE),rulesPath:path.join(root,RULES_FILE),governancePath:path.join(root,GOVERNANCE_FILE),skillsDir:path.join(root,SKILLS_DIR),memoryDir:path.join(root,MEMORY_DIR),sessionsDir:path.join(root,SESSIONS_DIR),personasDir:path.join(root,`personas`)}}async function isBuilderForceAgentsProject(projectRoot){let dir=resolveBuilderForceAgentsDir(projectRoot);try{return(await fs.stat(dir.root)).isDirectory()}catch{return!1}}async function updateProjectContextFields(projectRoot,updates){let dir=resolveBuilderForceAgentsDir(projectRoot),updated={...parse(await fs.readFile(dir.contextPath,`utf-8`)),...updates};await fs.writeFile(dir.contextPath,stringify(updated),`utf-8`)}async function loadProjectContext(projectRoot){let dir=resolveBuilderForceAgentsDir(projectRoot);try{return parse(await fs.readFile(dir.contextPath,`utf-8`))}catch{return null}}async function saveProjectContext(projectRoot,context){let dir=resolveBuilderForceAgentsDir(projectRoot);await fs.mkdir(path.dirname(dir.contextPath),{recursive:!0}),await fs.writeFile(dir.contextPath,stringify(context),`utf-8`)}async function loadProjectRules(projectRoot){let dir=resolveBuilderForceAgentsDir(projectRoot);try{return parse(await fs.readFile(dir.rulesPath,`utf-8`))}catch{return null}}async function loadProjectGovernance(projectRoot){let dir=resolveBuilderForceAgentsDir(projectRoot);try{return await fs.readFile(dir.governancePath,`utf-8`)}catch{return null}}async function loadProjectArchitecture(projectRoot){let dir=resolveBuilderForceAgentsDir(projectRoot);try{return await fs.readFile(dir.architecturePath,`utf-8`)}catch{return null}}export{loadPersonasFromDir as C,globalPersonaRegistry as S,raiseThinkLevel as T,isBuilderForceAgentsProject as _,saveProjectContext as a,USER_PERSONAS_DIR as b,BUILDERFORCE_AGENTS_DIR as c,MEMORY_DIR as d,PRD_FILE as f,WORKSPACE_STATE_FILE as g,SKILLS_DIR as h,loadProjectRules as i,CONTEXT_FILE as l,SESSIONS_DIR as m,loadProjectContext as n,updateProjectContextFields as o,RULES_FILE as p,loadProjectGovernance as r,ARCHITECTURE_FILE as s,loadProjectArchitecture as t,GOVERNANCE_FILE as u,resolveBuilderForceAgentsDir as v,getRoleProfile as w,buildPersonaSystemBlock as x,resolvePrdPath as y};
@@ -0,0 +1 @@
1
+ import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./src-D2-7sOAX.js";import{n as loadProjectContext}from"./project-context-store-BS994lZX.js";export{loadProjectContext};
@@ -1,4 +1,4 @@
1
- import{d as resolveIsNixMode,f as resolveLegacyStateDirs,g as resolveStateDir,m as resolveOAuthDir,p as resolveNewStateDir,t as CONFIG_PATH,u as resolveGatewayPort,y as resolveRequiredHomeDir}from"./paths-BHg-VHB4.js";import{C as sleep,S as shortenHomePath,W as getResolvedLoggerSettings,_ as resolveHomeDir$1,d as isRecord,y as resolveUserPath}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import{t as isTruthyEnvValue}from"./env-BoE8QSib.js";import{N as getModelRefStatus,Pt as resolveApiKeyForProvider,S as updateAuthProfileStoreWithLock,U as resolveHooksGmailModel,V as resolveConfiguredModelRef,b as ensureAuthProfileStore,in as DEFAULT_PROVIDER,o as resolveProfileUnusableUntilForDisplay,on as CLAUDE_CLI_PROFILE_ID,p as repairOAuthProfileIdMismatch,rn as DEFAULT_MODEL,s as resolveApiKeyForProfile,sn as CODEX_CLI_PROFILE_ID}from"./auth-profiles-BARnVAUE.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import{a as buildAgentMainSessionKey,d as normalizeAgentId,i as DEFAULT_MAIN_KEY,n as DEFAULT_ACCOUNT_ID}from"./session-key-D--2AEus.js";import{t as resolveBuilderForceAgentsPackageRoot}from"./builderforce-root-D3-p8W2n.js";import{n as runExec,t as runCommandWithTimeout}from"./exec-CGuYALEs.js";import{A as resolveWorkspaceFilePath,c as resolveAgentWorkspaceDir,i as resolveAgentDir,l as resolveDefaultAgentId,p as DEFAULT_AGENTS_FILENAME}from"./agent-scope-BcoQBOwz.js";import{a as readConfigFileSnapshot,c as writeConfigFile,p as BuilderForceAgentsSchema}from"./io-BySzqKzT.js";import{t as migrateLegacyConfig}from"./config-Bwt58P9r.js";import{r as loadModelCatalog}from"./model-catalog-wcISK04b.js";import{t as buildWorkspaceSkillStatus}from"./skills-status-BCwjn1Id.js";import{n as callGateway,t as buildGatewayConnectionDetails}from"./call-CjC3SRPv.js";import{l as resolveGatewayBindHost,n as isLoopbackHost}from"./net-tt1qDR9Z.js";import{An as buildAuthHealthSummary,jn as formatRemainingShort,kn as DEFAULT_OAUTH_WARN_MS,w as loadBuilderForceAgentsPlugins}from"./subagent-registry-oB_F2U2W.js";import{A as canonicalizeMainSessionAlias,N as resolveMainSessionKey,X as cleanStaleLockFiles,a as loadSessionStore,c as saveSessionStore}from"./sessions-ko0LxxGk.js";import{c as listTelegramAccountIds,l as resolveTelegramAccount,n as listChannelPlugins}from"./plugins-DJGW_fnS.js";import{D as DEFAULT_SANDBOX_IMAGE,E as DEFAULT_SANDBOX_COMMON_IMAGE,T as DEFAULT_SANDBOX_BROWSER_IMAGE,f as resolveSandboxScope}from"./sandbox-BcH7kS1y.js";import{i as resolveGatewayAuth}from"./auth-B4Kn3eee.js";import{a as formatPortDiagnostics,n as inspectPortUsage}from"./ports-LqFTyTSK.js";import{c as resolveStorePath,n as resolveSessionFilePath,s as resolveSessionTranscriptsDirForAgent}from"./paths-BQ9W7Bs0.js";import{c as resolveGatewayLaunchAgentLabel,d as resolveGatewaySystemdServiceName,f as resolveGatewayWindowsTaskName,m as resolveNodeLaunchAgentLabel}from"./constants-OUTpFkXP.js";import{c as getDefaultMemoryDirs,l as getDefaultMemoryFilePaths}from"./sqlite-BEgCClMz.js";import{r as resolveMemorySearchConfig}from"./manager-Cob4Ofzr.js";import{t as formatDurationCompact}from"./format-duration-BwzoPIex.js";import{f as printWizardHeader,m as randomToken,n as applyWizardMetadata,s as guardCancel}from"./onboard-helpers-Di5OXlap.js";import{n as isWSLEnv,t as isWSL}from"./wsl-BrsNH7_s.js";import{n as stylePromptMessage,r as stylePromptTitle,t as stylePromptHint}from"./prompt-style-CZOeG0sw.js";import{t as note$1}from"./note-BvXfFmlu.js";import{t as resolveChannelDefaultAccountId}from"./helpers-DDS6DSK4.js";import{t as applyPluginAutoEnable}from"./plugin-auto-enable-tSxWjjZC.js";import{t as isWithinDir}from"./path-safety-B5rQrmGv.js";import{t as collectChannelStatusIssues}from"./channels-status-issues-DLF6QGGM.js";import{a as gatewayInstallErrorHint,f as renderSystemNodeWarning,i as buildGatewayInstallPlan,m as resolveSystemNodeInfo,n as GATEWAY_DAEMON_RUNTIME_OPTIONS,t as DEFAULT_GATEWAY_DAEMON_RUNTIME}from"./daemon-runtime-Ddsn0FJm.js";import{r as isSystemdUserServiceAvailable}from"./systemd-DpT8tcbh.js";import{a as launchAgentPlistExists,i as isLaunchAgentLoaded,o as repairLaunchAgentBootstrap,r as isLaunchAgentListed,s as resolveGatewayLogPaths,t as resolveGatewayService}from"./service-ugwM110q.js";import{a as isSystemdUnavailableDetail,c as auditGatewayServiceConfig,l as needsNodeRuntimeMigration,o as renderSystemdUnavailableHints,s as SERVICE_AUDIT_CODES,y as formatRuntimeStatus}from"./lifecycle-core-DM4IEWmJ.js";import{t as readLastGatewayErrorLine}from"./diagnostics-D4pveUt2.js";import{a as renderGatewayServiceCleanupHints,i as findExtraGatewayServices}from"./daemon-cli-DOnPzRrW.js";import{r as healthCommand}from"./health-hXlukqbf.js";import{n as resolveControlUiDistIndexHealth,r as resolveControlUiDistIndexPathForRoot}from"./control-ui-assets-BweA3rDY.js";import{n as isNumericTelegramUserId,r as normalizeTelegramAllowFromEntry,t as resolveDmAllowState}from"./dm-policy-shared-D3GiLoDG.js";import{n as runGatewayUpdate,t as resolveAgentSessionDirs}from"./session-dirs-RIA98OsG.js";import{n as logConfigUpdated}from"./logging-CRzk-5ye.js";import{t as ensureSystemdUserLingerInteractive}from"./systemd-linger-CuzOv-tn.js";import{t as formatHealthCheckFailure}from"./health-format-CtcXvo40.js";import{n as doctorShellCompletion}from"./doctor-completion-BdMxCat-.js";import{execFile}from"node:child_process";import os from"node:os";import path from"node:path";import fs from"node:fs";import{promisify}from"node:util";import JSON5 from"json5";import fs$1 from"node:fs/promises";import{confirm,intro,outro,select}from"@clack/prompts";async function maybeRepairAnthropicOAuthProfileId(cfg,prompter){let repair=repairOAuthProfileIdMismatch({cfg,store:await ensureAuthProfileStore(),provider:`anthropic`,legacyProfileId:`anthropic:default`});return!repair.migrated||repair.changes.length===0||(note$1(repair.changes.map(c=>`- ${c}`).join(`
1
+ import{d as resolveIsNixMode,f as resolveLegacyStateDirs,g as resolveStateDir,m as resolveOAuthDir,p as resolveNewStateDir,t as CONFIG_PATH,u as resolveGatewayPort,y as resolveRequiredHomeDir}from"./paths-BHg-VHB4.js";import{C as sleep,S as shortenHomePath,W as getResolvedLoggerSettings,_ as resolveHomeDir$1,d as isRecord,y as resolveUserPath}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import{t as isTruthyEnvValue}from"./env-BoE8QSib.js";import{N as getModelRefStatus,Pt as resolveApiKeyForProvider,S as updateAuthProfileStoreWithLock,U as resolveHooksGmailModel,V as resolveConfiguredModelRef,b as ensureAuthProfileStore,in as DEFAULT_PROVIDER,o as resolveProfileUnusableUntilForDisplay,on as CLAUDE_CLI_PROFILE_ID,p as repairOAuthProfileIdMismatch,rn as DEFAULT_MODEL,s as resolveApiKeyForProfile,sn as CODEX_CLI_PROFILE_ID}from"./auth-profiles-BARnVAUE.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import{a as buildAgentMainSessionKey,d as normalizeAgentId,i as DEFAULT_MAIN_KEY,n as DEFAULT_ACCOUNT_ID}from"./session-key-D--2AEus.js";import{t as resolveBuilderForceAgentsPackageRoot}from"./builderforce-root-D3-p8W2n.js";import{n as runExec,t as runCommandWithTimeout}from"./exec-CGuYALEs.js";import{A as resolveWorkspaceFilePath,c as resolveAgentWorkspaceDir,i as resolveAgentDir,l as resolveDefaultAgentId,p as DEFAULT_AGENTS_FILENAME}from"./agent-scope-BcoQBOwz.js";import{a as readConfigFileSnapshot,c as writeConfigFile,p as BuilderForceAgentsSchema}from"./io-BySzqKzT.js";import{t as migrateLegacyConfig}from"./config-Bwt58P9r.js";import{r as loadModelCatalog}from"./model-catalog-wcISK04b.js";import{t as buildWorkspaceSkillStatus}from"./skills-status-BCwjn1Id.js";import{n as callGateway,t as buildGatewayConnectionDetails}from"./call-CjC3SRPv.js";import{l as resolveGatewayBindHost,n as isLoopbackHost}from"./net-tt1qDR9Z.js";import{An as buildAuthHealthSummary,jn as formatRemainingShort,kn as DEFAULT_OAUTH_WARN_MS,w as loadBuilderForceAgentsPlugins}from"./subagent-registry-BUKplZi1.js";import{A as canonicalizeMainSessionAlias,N as resolveMainSessionKey,X as cleanStaleLockFiles,a as loadSessionStore,c as saveSessionStore}from"./sessions-ko0LxxGk.js";import{c as listTelegramAccountIds,l as resolveTelegramAccount,n as listChannelPlugins}from"./plugins-DJGW_fnS.js";import{D as DEFAULT_SANDBOX_IMAGE,E as DEFAULT_SANDBOX_COMMON_IMAGE,T as DEFAULT_SANDBOX_BROWSER_IMAGE,f as resolveSandboxScope}from"./sandbox-BcH7kS1y.js";import{i as resolveGatewayAuth}from"./auth-B4Kn3eee.js";import{a as formatPortDiagnostics,n as inspectPortUsage}from"./ports-LqFTyTSK.js";import{c as resolveStorePath,n as resolveSessionFilePath,s as resolveSessionTranscriptsDirForAgent}from"./paths-BQ9W7Bs0.js";import{c as resolveGatewayLaunchAgentLabel,d as resolveGatewaySystemdServiceName,f as resolveGatewayWindowsTaskName,m as resolveNodeLaunchAgentLabel}from"./constants-OUTpFkXP.js";import{c as getDefaultMemoryDirs,l as getDefaultMemoryFilePaths}from"./sqlite-BEgCClMz.js";import{r as resolveMemorySearchConfig}from"./manager-Cob4Ofzr.js";import{t as formatDurationCompact}from"./format-duration-BwzoPIex.js";import{f as printWizardHeader,m as randomToken,n as applyWizardMetadata,s as guardCancel}from"./onboard-helpers-Di5OXlap.js";import{n as isWSLEnv,t as isWSL}from"./wsl-BrsNH7_s.js";import{n as stylePromptMessage,r as stylePromptTitle,t as stylePromptHint}from"./prompt-style-CZOeG0sw.js";import{t as note$1}from"./note-BvXfFmlu.js";import{t as resolveChannelDefaultAccountId}from"./helpers-DDS6DSK4.js";import{t as applyPluginAutoEnable}from"./plugin-auto-enable-tSxWjjZC.js";import{t as isWithinDir}from"./path-safety-B5rQrmGv.js";import{t as collectChannelStatusIssues}from"./channels-status-issues-DLF6QGGM.js";import{a as gatewayInstallErrorHint,f as renderSystemNodeWarning,i as buildGatewayInstallPlan,m as resolveSystemNodeInfo,n as GATEWAY_DAEMON_RUNTIME_OPTIONS,t as DEFAULT_GATEWAY_DAEMON_RUNTIME}from"./daemon-runtime-Ddsn0FJm.js";import{r as isSystemdUserServiceAvailable}from"./systemd-DpT8tcbh.js";import{a as launchAgentPlistExists,i as isLaunchAgentLoaded,o as repairLaunchAgentBootstrap,r as isLaunchAgentListed,s as resolveGatewayLogPaths,t as resolveGatewayService}from"./service-ugwM110q.js";import{a as isSystemdUnavailableDetail,c as auditGatewayServiceConfig,l as needsNodeRuntimeMigration,o as renderSystemdUnavailableHints,s as SERVICE_AUDIT_CODES,y as formatRuntimeStatus}from"./lifecycle-core-DM4IEWmJ.js";import{t as readLastGatewayErrorLine}from"./diagnostics-D4pveUt2.js";import{a as renderGatewayServiceCleanupHints,i as findExtraGatewayServices}from"./daemon-cli-DOnPzRrW.js";import{r as healthCommand}from"./health-CRIXA8je.js";import{n as resolveControlUiDistIndexHealth,r as resolveControlUiDistIndexPathForRoot}from"./control-ui-assets-BweA3rDY.js";import{n as isNumericTelegramUserId,r as normalizeTelegramAllowFromEntry,t as resolveDmAllowState}from"./dm-policy-shared-D3GiLoDG.js";import{n as runGatewayUpdate,t as resolveAgentSessionDirs}from"./session-dirs-BBGuanHN.js";import{n as logConfigUpdated}from"./logging-CRzk-5ye.js";import{t as ensureSystemdUserLingerInteractive}from"./systemd-linger-CuzOv-tn.js";import{t as formatHealthCheckFailure}from"./health-format-CtcXvo40.js";import{n as doctorShellCompletion}from"./doctor-completion-Dpy-8HV9.js";import{execFile}from"node:child_process";import os from"node:os";import path from"node:path";import fs from"node:fs";import{promisify}from"node:util";import JSON5 from"json5";import fs$1 from"node:fs/promises";import{confirm,intro,outro,select}from"@clack/prompts";async function maybeRepairAnthropicOAuthProfileId(cfg,prompter){let repair=repairOAuthProfileIdMismatch({cfg,store:await ensureAuthProfileStore(),provider:`anthropic`,legacyProfileId:`anthropic:default`});return!repair.migrated||repair.changes.length===0||(note$1(repair.changes.map(c=>`- ${c}`).join(`
2
2
  `),`Auth profiles`),!await prompter.confirm({message:`Update Anthropic OAuth profile id in config now?`,initialValue:!0}))?cfg:repair.config}function pruneAuthOrder(order,profileIds){if(!order)return{next:order,changed:!1};let changed=!1,next={};for(let[provider,list]of Object.entries(order)){let filtered=list.filter(id=>!profileIds.has(id));filtered.length!==list.length&&(changed=!0),filtered.length>0&&(next[provider]=filtered)}return{next:Object.keys(next).length>0?next:void 0,changed}}function pruneAuthProfiles(cfg,profileIds){let profiles=cfg.auth?.profiles,order=cfg.auth?.order,nextProfiles=profiles?{...profiles}:void 0,changed=!1;if(nextProfiles)for(let id of profileIds)id in nextProfiles&&(delete nextProfiles[id],changed=!0);let prunedOrder=pruneAuthOrder(order,profileIds);if(prunedOrder.changed&&(changed=!0),!changed)return{next:cfg,changed:!1};let nextAuth=nextProfiles||prunedOrder.next?{...cfg.auth,profiles:nextProfiles&&Object.keys(nextProfiles).length>0?nextProfiles:void 0,order:prunedOrder.next}:void 0;return{next:{...cfg,auth:nextAuth},changed:!0}}async function maybeRemoveDeprecatedCliAuthProfiles(cfg,prompter){let store=await ensureAuthProfileStore(void 0,{allowKeychainPrompt:!1}),deprecated=new Set;if((store.profiles[CLAUDE_CLI_PROFILE_ID]||cfg.auth?.profiles?.[CLAUDE_CLI_PROFILE_ID])&&deprecated.add(CLAUDE_CLI_PROFILE_ID),(store.profiles[CODEX_CLI_PROFILE_ID]||cfg.auth?.profiles?.[CODEX_CLI_PROFILE_ID])&&deprecated.add(CODEX_CLI_PROFILE_ID),deprecated.size===0)return cfg;let lines=[`Deprecated external CLI auth profiles detected (no longer supported):`];if(deprecated.has(CLAUDE_CLI_PROFILE_ID)&&lines.push(`- ${CLAUDE_CLI_PROFILE_ID} (Anthropic): use setup-token → ${formatCliCommand(`builderforce models auth setup-token`)}`),deprecated.has(CODEX_CLI_PROFILE_ID)&&lines.push(`- ${CODEX_CLI_PROFILE_ID} (OpenAI Codex): use OAuth → ${formatCliCommand(`builderforce models auth login --provider openai-codex`)}`),note$1(lines.join(`
3
3
  `),`Auth profiles`),!await prompter.confirmRepair({message:`Remove deprecated CLI auth profiles now?`,initialValue:!0}))return cfg;await updateAuthProfileStoreWithLock({updater:nextStore=>{let mutated=!1;for(let id of deprecated)nextStore.profiles[id]&&(delete nextStore.profiles[id],mutated=!0),nextStore.usageStats?.[id]&&(delete nextStore.usageStats[id],mutated=!0);if(nextStore.order)for(let[provider,list]of Object.entries(nextStore.order)){let filtered=list.filter(id=>!deprecated.has(id));filtered.length!==list.length&&(mutated=!0,filtered.length>0?nextStore.order[provider]=filtered:delete nextStore.order[provider])}if(nextStore.lastGood)for(let[provider,profileId]of Object.entries(nextStore.lastGood))deprecated.has(profileId)&&(delete nextStore.lastGood[provider],mutated=!0);return mutated}});let pruned=pruneAuthProfiles(cfg,deprecated);return pruned.changed&&note$1(Array.from(deprecated.values()).map(id=>`- removed ${id} from config`).join(`
4
4
  `),`Doctor changes`),pruned.next}function formatAuthIssueHint(issue){return issue.provider===`anthropic`&&issue.profileId===CLAUDE_CLI_PROFILE_ID?`Deprecated profile. Use ${formatCliCommand(`builderforce models auth setup-token`)} or ${formatCliCommand(`builderforce configure`)}.`:issue.provider===`openai-codex`&&issue.profileId===CODEX_CLI_PROFILE_ID?`Deprecated profile. Use ${formatCliCommand(`builderforce models auth login --provider openai-codex`)} or ${formatCliCommand(`builderforce configure`)}.`:`Re-auth via \`${formatCliCommand(`builderforce configure`)}\` or \`${formatCliCommand(`builderforce onboard`)}\`.`}function formatAuthIssueLine(issue){let remaining=issue.remainingMs===void 0?``:` (${formatRemainingShort(issue.remainingMs)})`,hint=formatAuthIssueHint(issue);return`- ${issue.profileId}: ${issue.status}${remaining}${hint?` — ${hint}`:``}`}async function noteAuthProfileHealth(params){let store=await ensureAuthProfileStore(void 0,{allowKeychainPrompt:params.allowKeychainPrompt}),unusable=(()=>{let now=Date.now(),out=[];for(let profileId of Object.keys(store.usageStats??{})){let until=resolveProfileUnusableUntilForDisplay(store,profileId);if(!until||now>=until)continue;let stats=store.usageStats?.[profileId],remaining=formatRemainingShort(until-now),kind=typeof stats?.disabledUntil==`number`&&now<stats.disabledUntil?`disabled${stats.disabledReason?`:${stats.disabledReason}`:``}`:`cooldown`,hint=kind.startsWith(`disabled:billing`)?`Top up credits (provider billing) or switch provider.`:`Wait for cooldown or switch provider.`;out.push(`- ${profileId}: ${kind} (${remaining})${hint?` — ${hint}`:``}`)}return out})();unusable.length>0&&note$1(unusable.join(`
@@ -1,4 +1,4 @@
1
- import{d as resolveIsNixMode,f as resolveLegacyStateDirs,g as resolveStateDir,m as resolveOAuthDir,p as resolveNewStateDir,t as CONFIG_PATH,u as resolveGatewayPort,y as resolveRequiredHomeDir}from"./paths-5FcIFMsj.js";import{C as shortenHomePath,G as getResolvedLoggerSettings,b as resolveUserPath,f as isRecord,v as resolveHomeDir$1,w as sleep}from"./utils-DbaBVFaK.js";import{At as loadBuilderForceAgentsPlugins,ai as formatRemainingShort,ii as buildAuthHealthSummary,ri as DEFAULT_OAUTH_WARN_MS}from"./reply-BsRbeUhd.js";import{a as buildAgentMainSessionKey,d as normalizeAgentId,i as DEFAULT_MAIN_KEY,n as DEFAULT_ACCOUNT_ID}from"./session-key-EoB0qaG9.js";import{t as resolveBuilderForceAgentsPackageRoot}from"./builderforce-root-D64_sXEi.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import{n as runExec,t as runCommandWithTimeout}from"./exec-DdcIjeyn.js";import{A as resolveWorkspaceFilePath,c as resolveAgentWorkspaceDir,i as resolveAgentDir,l as resolveDefaultAgentId,p as DEFAULT_AGENTS_FILENAME}from"./agent-scope-DPtjOxzp.js";import{Gt as ensureAuthProfileStore,Mt as resolveApiKeyForProfile,Rt as repairOAuthProfileIdMismatch,a as getModelRefStatus,h as resolveHooksGmailModel,in as CODEX_CLI_PROFILE_ID,jt as resolveProfileUnusableUntilForDisplay,on as DEFAULT_MODEL,ot as resolveApiKeyForProvider,p as resolveConfiguredModelRef,qt as updateAuthProfileStoreWithLock,rn as CLAUDE_CLI_PROFILE_ID,sn as DEFAULT_PROVIDER}from"./model-selection-DX_WOc2P.js";import{t as formatCliCommand}from"./command-format-Dd7BgZsg.js";import{t as isTruthyEnvValue}from"./env-BHP32i7Q.js";import{a as readConfigFileSnapshot,c as writeConfigFile,p as BuilderForceAgentsSchema}from"./io-YzT_09GD.js";import{t as migrateLegacyConfig}from"./config-8x9ZIdfF.js";import{r as loadModelCatalog}from"./model-catalog-C7PdRY6w.js";import{D as DEFAULT_SANDBOX_IMAGE,E as DEFAULT_SANDBOX_COMMON_IMAGE,T as DEFAULT_SANDBOX_BROWSER_IMAGE,f as resolveSandboxScope}from"./sandbox-DzuXOMNa.js";import{i as resolveGatewayAuth}from"./auth-CDcrUXYB.js";import{r as isLoopbackHost,u as resolveGatewayBindHost}from"./ws-Dunpda4N.js";import{a as inspectPortUsage,c as formatPortDiagnostics}from"./ports-BNC_iRpw.js";import{B as resolveMainSessionKey,L as canonicalizeMainSessionAlias,a as loadSessionStore,c as saveSessionStore,rt as cleanStaleLockFiles}from"./sessions-OZNhnSwZ.js";import{c as listTelegramAccountIds,l as resolveTelegramAccount,n as listChannelPlugins}from"./plugins-COtQnUML.js";import{c as resolveStorePath,n as resolveSessionFilePath,s as resolveSessionTranscriptsDirForAgent}from"./paths-CkcK939O.js";import{c as getDefaultMemoryDirs,l as getDefaultMemoryFilePaths}from"./sqlite-DEiKj1vi.js";import{c as resolveGatewayLaunchAgentLabel,d as resolveGatewaySystemdServiceName,f as resolveGatewayWindowsTaskName,m as resolveNodeLaunchAgentLabel}from"./constants-BUyfn6Rk.js";import{r as resolveMemorySearchConfig}from"./manager-VPNjVm0W.js";import{n as callGateway,t as buildGatewayConnectionDetails}from"./call-DwWslKWv.js";import{t as formatDurationCompact}from"./format-duration-BwzoPIex.js";import{f as printWizardHeader,m as randomToken,n as applyWizardMetadata,s as guardCancel}from"./onboard-helpers-CPmBeDvt.js";import{n as isWSLEnv,t as isWSL}from"./wsl-CQrB96ai.js";import{n as stylePromptMessage,r as stylePromptTitle,t as stylePromptHint}from"./prompt-style-BwwmGo3-.js";import{t as buildWorkspaceSkillStatus}from"./skills-status-DPBxzSMt.js";import{t as note$1}from"./note-CvzMolLy.js";import{t as resolveChannelDefaultAccountId}from"./helpers-_XD3UAOf.js";import{t as applyPluginAutoEnable}from"./plugin-auto-enable-CFshBQKJ.js";import{t as isWithinDir}from"./path-safety-Wg3iYXlh.js";import{t as collectChannelStatusIssues}from"./channels-status-issues-BjjGTJ4V.js";import{a as gatewayInstallErrorHint,f as renderSystemNodeWarning,i as buildGatewayInstallPlan,m as resolveSystemNodeInfo,n as GATEWAY_DAEMON_RUNTIME_OPTIONS,t as DEFAULT_GATEWAY_DAEMON_RUNTIME}from"./daemon-runtime-CHo7loUb.js";import{r as isSystemdUserServiceAvailable}from"./systemd-CTHIdkg9.js";import{a as launchAgentPlistExists,i as isLaunchAgentLoaded,o as repairLaunchAgentBootstrap,r as isLaunchAgentListed,s as resolveGatewayLogPaths,t as resolveGatewayService}from"./service-BXrSjb3e.js";import{a as isSystemdUnavailableDetail,c as auditGatewayServiceConfig,l as needsNodeRuntimeMigration,o as renderSystemdUnavailableHints,s as SERVICE_AUDIT_CODES,y as formatRuntimeStatus}from"./lifecycle-core-Cu8g_SOD.js";import{t as readLastGatewayErrorLine}from"./diagnostics-Bsqm-Flj.js";import{a as renderGatewayServiceCleanupHints,i as findExtraGatewayServices}from"./daemon-cli-DxC3LYrI.js";import{r as healthCommand}from"./health-B_qWRpsT.js";import{n as resolveControlUiDistIndexHealth,r as resolveControlUiDistIndexPathForRoot}from"./control-ui-assets-CAmSpVpE.js";import{n as isNumericTelegramUserId,r as normalizeTelegramAllowFromEntry,t as resolveDmAllowState}from"./dm-policy-shared-Ch1U9RnQ.js";import{n as runGatewayUpdate,t as resolveAgentSessionDirs}from"./session-dirs-Cutn9srI.js";import{n as logConfigUpdated}from"./logging-9jbJihk2.js";import{t as ensureSystemdUserLingerInteractive}from"./systemd-linger-RhNkOjuf.js";import{t as formatHealthCheckFailure}from"./health-format-COHxl9I_.js";import{n as doctorShellCompletion}from"./doctor-completion-s5vcMc-C.js";import fs from"node:fs";import os from"node:os";import path from"node:path";import JSON5 from"json5";import fs$1 from"node:fs/promises";import{execFile}from"node:child_process";import{promisify}from"node:util";import{confirm,intro,outro,select}from"@clack/prompts";async function maybeRepairAnthropicOAuthProfileId(cfg,prompter){let repair=repairOAuthProfileIdMismatch({cfg,store:await ensureAuthProfileStore(),provider:`anthropic`,legacyProfileId:`anthropic:default`});return!repair.migrated||repair.changes.length===0||(note$1(repair.changes.map(c=>`- ${c}`).join(`
1
+ import{d as resolveIsNixMode,f as resolveLegacyStateDirs,g as resolveStateDir,m as resolveOAuthDir,p as resolveNewStateDir,t as CONFIG_PATH,u as resolveGatewayPort,y as resolveRequiredHomeDir}from"./paths-5FcIFMsj.js";import{C as shortenHomePath,G as getResolvedLoggerSettings,b as resolveUserPath,f as isRecord,v as resolveHomeDir$1,w as sleep}from"./utils-DbaBVFaK.js";import{At as loadBuilderForceAgentsPlugins,ai as formatRemainingShort,ii as buildAuthHealthSummary,ri as DEFAULT_OAUTH_WARN_MS}from"./reply-CpGH-3If.js";import{a as buildAgentMainSessionKey,d as normalizeAgentId,i as DEFAULT_MAIN_KEY,n as DEFAULT_ACCOUNT_ID}from"./session-key-EoB0qaG9.js";import{t as resolveBuilderForceAgentsPackageRoot}from"./builderforce-root-D64_sXEi.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import{n as runExec,t as runCommandWithTimeout}from"./exec-DdcIjeyn.js";import{A as resolveWorkspaceFilePath,c as resolveAgentWorkspaceDir,i as resolveAgentDir,l as resolveDefaultAgentId,p as DEFAULT_AGENTS_FILENAME}from"./agent-scope-DPtjOxzp.js";import{Gt as ensureAuthProfileStore,Mt as resolveApiKeyForProfile,Rt as repairOAuthProfileIdMismatch,a as getModelRefStatus,h as resolveHooksGmailModel,in as CODEX_CLI_PROFILE_ID,jt as resolveProfileUnusableUntilForDisplay,on as DEFAULT_MODEL,ot as resolveApiKeyForProvider,p as resolveConfiguredModelRef,qt as updateAuthProfileStoreWithLock,rn as CLAUDE_CLI_PROFILE_ID,sn as DEFAULT_PROVIDER}from"./model-selection-DX_WOc2P.js";import{t as formatCliCommand}from"./command-format-Dd7BgZsg.js";import{t as isTruthyEnvValue}from"./env-BHP32i7Q.js";import{a as readConfigFileSnapshot,c as writeConfigFile,p as BuilderForceAgentsSchema}from"./io-YzT_09GD.js";import{t as migrateLegacyConfig}from"./config-8x9ZIdfF.js";import{r as loadModelCatalog}from"./model-catalog-C7PdRY6w.js";import{D as DEFAULT_SANDBOX_IMAGE,E as DEFAULT_SANDBOX_COMMON_IMAGE,T as DEFAULT_SANDBOX_BROWSER_IMAGE,f as resolveSandboxScope}from"./sandbox-DzuXOMNa.js";import{i as resolveGatewayAuth}from"./auth-CDcrUXYB.js";import{r as isLoopbackHost,u as resolveGatewayBindHost}from"./ws-Dunpda4N.js";import{a as inspectPortUsage,c as formatPortDiagnostics}from"./ports-BNC_iRpw.js";import{B as resolveMainSessionKey,L as canonicalizeMainSessionAlias,a as loadSessionStore,c as saveSessionStore,rt as cleanStaleLockFiles}from"./sessions-OZNhnSwZ.js";import{c as listTelegramAccountIds,l as resolveTelegramAccount,n as listChannelPlugins}from"./plugins-COtQnUML.js";import{c as resolveStorePath,n as resolveSessionFilePath,s as resolveSessionTranscriptsDirForAgent}from"./paths-CkcK939O.js";import{c as getDefaultMemoryDirs,l as getDefaultMemoryFilePaths}from"./sqlite-DEiKj1vi.js";import{c as resolveGatewayLaunchAgentLabel,d as resolveGatewaySystemdServiceName,f as resolveGatewayWindowsTaskName,m as resolveNodeLaunchAgentLabel}from"./constants-BUyfn6Rk.js";import{r as resolveMemorySearchConfig}from"./manager-VPNjVm0W.js";import{n as callGateway,t as buildGatewayConnectionDetails}from"./call-DwWslKWv.js";import{t as formatDurationCompact}from"./format-duration-BwzoPIex.js";import{f as printWizardHeader,m as randomToken,n as applyWizardMetadata,s as guardCancel}from"./onboard-helpers-CPmBeDvt.js";import{n as isWSLEnv,t as isWSL}from"./wsl-CQrB96ai.js";import{n as stylePromptMessage,r as stylePromptTitle,t as stylePromptHint}from"./prompt-style-BwwmGo3-.js";import{t as buildWorkspaceSkillStatus}from"./skills-status-DPBxzSMt.js";import{t as note$1}from"./note-CvzMolLy.js";import{t as resolveChannelDefaultAccountId}from"./helpers-_XD3UAOf.js";import{t as applyPluginAutoEnable}from"./plugin-auto-enable-CFshBQKJ.js";import{t as isWithinDir}from"./path-safety-Wg3iYXlh.js";import{t as collectChannelStatusIssues}from"./channels-status-issues-BjjGTJ4V.js";import{a as gatewayInstallErrorHint,f as renderSystemNodeWarning,i as buildGatewayInstallPlan,m as resolveSystemNodeInfo,n as GATEWAY_DAEMON_RUNTIME_OPTIONS,t as DEFAULT_GATEWAY_DAEMON_RUNTIME}from"./daemon-runtime-CHo7loUb.js";import{r as isSystemdUserServiceAvailable}from"./systemd-CTHIdkg9.js";import{a as launchAgentPlistExists,i as isLaunchAgentLoaded,o as repairLaunchAgentBootstrap,r as isLaunchAgentListed,s as resolveGatewayLogPaths,t as resolveGatewayService}from"./service-BXrSjb3e.js";import{a as isSystemdUnavailableDetail,c as auditGatewayServiceConfig,l as needsNodeRuntimeMigration,o as renderSystemdUnavailableHints,s as SERVICE_AUDIT_CODES,y as formatRuntimeStatus}from"./lifecycle-core-Cu8g_SOD.js";import{t as readLastGatewayErrorLine}from"./diagnostics-Bsqm-Flj.js";import{a as renderGatewayServiceCleanupHints,i as findExtraGatewayServices}from"./daemon-cli-DxC3LYrI.js";import{r as healthCommand}from"./health-Cuh0tZl2.js";import{n as resolveControlUiDistIndexHealth,r as resolveControlUiDistIndexPathForRoot}from"./control-ui-assets-CAmSpVpE.js";import{n as isNumericTelegramUserId,r as normalizeTelegramAllowFromEntry,t as resolveDmAllowState}from"./dm-policy-shared-Ch1U9RnQ.js";import{n as runGatewayUpdate,t as resolveAgentSessionDirs}from"./session-dirs-DV-c-o7M.js";import{n as logConfigUpdated}from"./logging-9jbJihk2.js";import{t as ensureSystemdUserLingerInteractive}from"./systemd-linger-RhNkOjuf.js";import{t as formatHealthCheckFailure}from"./health-format-COHxl9I_.js";import{n as doctorShellCompletion}from"./doctor-completion-DhIR9uqB.js";import fs from"node:fs";import os from"node:os";import path from"node:path";import JSON5 from"json5";import fs$1 from"node:fs/promises";import{execFile}from"node:child_process";import{promisify}from"node:util";import{confirm,intro,outro,select}from"@clack/prompts";async function maybeRepairAnthropicOAuthProfileId(cfg,prompter){let repair=repairOAuthProfileIdMismatch({cfg,store:await ensureAuthProfileStore(),provider:`anthropic`,legacyProfileId:`anthropic:default`});return!repair.migrated||repair.changes.length===0||(note$1(repair.changes.map(c=>`- ${c}`).join(`
2
2
  `),`Auth profiles`),!await prompter.confirm({message:`Update Anthropic OAuth profile id in config now?`,initialValue:!0}))?cfg:repair.config}function pruneAuthOrder(order,profileIds){if(!order)return{next:order,changed:!1};let changed=!1,next={};for(let[provider,list]of Object.entries(order)){let filtered=list.filter(id=>!profileIds.has(id));filtered.length!==list.length&&(changed=!0),filtered.length>0&&(next[provider]=filtered)}return{next:Object.keys(next).length>0?next:void 0,changed}}function pruneAuthProfiles(cfg,profileIds){let profiles=cfg.auth?.profiles,order=cfg.auth?.order,nextProfiles=profiles?{...profiles}:void 0,changed=!1;if(nextProfiles)for(let id of profileIds)id in nextProfiles&&(delete nextProfiles[id],changed=!0);let prunedOrder=pruneAuthOrder(order,profileIds);if(prunedOrder.changed&&(changed=!0),!changed)return{next:cfg,changed:!1};let nextAuth=nextProfiles||prunedOrder.next?{...cfg.auth,profiles:nextProfiles&&Object.keys(nextProfiles).length>0?nextProfiles:void 0,order:prunedOrder.next}:void 0;return{next:{...cfg,auth:nextAuth},changed:!0}}async function maybeRemoveDeprecatedCliAuthProfiles(cfg,prompter){let store=await ensureAuthProfileStore(void 0,{allowKeychainPrompt:!1}),deprecated=new Set;if((store.profiles[CLAUDE_CLI_PROFILE_ID]||cfg.auth?.profiles?.[CLAUDE_CLI_PROFILE_ID])&&deprecated.add(CLAUDE_CLI_PROFILE_ID),(store.profiles[CODEX_CLI_PROFILE_ID]||cfg.auth?.profiles?.[CODEX_CLI_PROFILE_ID])&&deprecated.add(CODEX_CLI_PROFILE_ID),deprecated.size===0)return cfg;let lines=[`Deprecated external CLI auth profiles detected (no longer supported):`];if(deprecated.has(CLAUDE_CLI_PROFILE_ID)&&lines.push(`- ${CLAUDE_CLI_PROFILE_ID} (Anthropic): use setup-token → ${formatCliCommand(`builderforce models auth setup-token`)}`),deprecated.has(CODEX_CLI_PROFILE_ID)&&lines.push(`- ${CODEX_CLI_PROFILE_ID} (OpenAI Codex): use OAuth → ${formatCliCommand(`builderforce models auth login --provider openai-codex`)}`),note$1(lines.join(`
3
3
  `),`Auth profiles`),!await prompter.confirmRepair({message:`Remove deprecated CLI auth profiles now?`,initialValue:!0}))return cfg;await updateAuthProfileStoreWithLock({updater:nextStore=>{let mutated=!1;for(let id of deprecated)nextStore.profiles[id]&&(delete nextStore.profiles[id],mutated=!0),nextStore.usageStats?.[id]&&(delete nextStore.usageStats[id],mutated=!0);if(nextStore.order)for(let[provider,list]of Object.entries(nextStore.order)){let filtered=list.filter(id=>!deprecated.has(id));filtered.length!==list.length&&(mutated=!0,filtered.length>0?nextStore.order[provider]=filtered:delete nextStore.order[provider])}if(nextStore.lastGood)for(let[provider,profileId]of Object.entries(nextStore.lastGood))deprecated.has(profileId)&&(delete nextStore.lastGood[provider],mutated=!0);return mutated}});let pruned=pruneAuthProfiles(cfg,deprecated);return pruned.changed&&note$1(Array.from(deprecated.values()).map(id=>`- removed ${id} from config`).join(`
4
4
  `),`Doctor changes`),pruned.next}function formatAuthIssueHint(issue){return issue.provider===`anthropic`&&issue.profileId===CLAUDE_CLI_PROFILE_ID?`Deprecated profile. Use ${formatCliCommand(`builderforce models auth setup-token`)} or ${formatCliCommand(`builderforce configure`)}.`:issue.provider===`openai-codex`&&issue.profileId===CODEX_CLI_PROFILE_ID?`Deprecated profile. Use ${formatCliCommand(`builderforce models auth login --provider openai-codex`)} or ${formatCliCommand(`builderforce configure`)}.`:`Re-auth via \`${formatCliCommand(`builderforce configure`)}\` or \`${formatCliCommand(`builderforce onboard`)}\`.`}function formatAuthIssueLine(issue){let remaining=issue.remainingMs===void 0?``:` (${formatRemainingShort(issue.remainingMs)})`,hint=formatAuthIssueHint(issue);return`- ${issue.profileId}: ${issue.status}${remaining}${hint?` — ${hint}`:``}`}async function noteAuthProfileHealth(params){let store=await ensureAuthProfileStore(void 0,{allowKeychainPrompt:params.allowKeychainPrompt}),unusable=(()=>{let now=Date.now(),out=[];for(let profileId of Object.keys(store.usageStats??{})){let until=resolveProfileUnusableUntilForDisplay(store,profileId);if(!until||now>=until)continue;let stats=store.usageStats?.[profileId],remaining=formatRemainingShort(until-now),kind=typeof stats?.disabledUntil==`number`&&now<stats.disabledUntil?`disabled${stats.disabledReason?`:${stats.disabledReason}`:``}`:`cooldown`,hint=kind.startsWith(`disabled:billing`)?`Top up credits (provider billing) or switch provider.`:`Wait for cooldown or switch provider.`;out.push(`- ${profileId}: ${kind} (${remaining})${hint?` — ${hint}`:``}`)}return out})();unusable.length>0&&note$1(unusable.join(`
@@ -1,2 +1,2 @@
1
- import{At as loadBuilderForceAgentsPlugins,kt as createPluginLoaderLogger}from"./reply-BsRbeUhd.js";import{t as createSubsystemLogger}from"./subsystem-B3TqcCrZ.js";import{Gt as ensureAuthProfileStore,Ut as upsertAuthProfile,l as normalizeProviderId}from"./model-selection-DX_WOc2P.js";import{n as isWSLEnv}from"./wsl-CQrB96ai.js";import{r as stylePromptTitle}from"./prompt-style-BwwmGo3-.js";import{f as updateConfig}from"./shared-eZqGzEHT.js";import{d as applyAuthProfileConfig}from"./auth-token-CWT7TW8z.js";import{n as logConfigUpdated}from"./logging-9jbJihk2.js";import{intro,note,outro,spinner}from"@clack/prompts";const CLIENT_ID=`Iv1.b507a08c87ecfe98`;function parseJsonResponse(value){if(!value||typeof value!=`object`)throw Error(`Unexpected response from GitHub`);return value}async function requestDeviceCode(params){let body=new URLSearchParams({client_id:CLIENT_ID,scope:params.scope}),res=await fetch(`https://github.com/login/device/code`,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`},body});if(!res.ok)throw Error(`GitHub device code failed: HTTP ${res.status}`);let json=parseJsonResponse(await res.json());if(!json.device_code||!json.user_code||!json.verification_uri)throw Error(`GitHub device code response missing fields`);return json}async function pollForAccessToken(params){let bodyBase=new URLSearchParams({client_id:CLIENT_ID,device_code:params.deviceCode,grant_type:`urn:ietf:params:oauth:grant-type:device_code`});for(;Date.now()<params.expiresAt;){let res=await fetch(`https://github.com/login/oauth/access_token`,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`},body:bodyBase});if(!res.ok)throw Error(`GitHub device token failed: HTTP ${res.status}`);let json=parseJsonResponse(await res.json());if(`access_token`in json&&typeof json.access_token==`string`)return json.access_token;let err=`error`in json?json.error:`unknown`;if(err===`authorization_pending`){await new Promise(r=>setTimeout(r,params.intervalMs));continue}if(err===`slow_down`){await new Promise(r=>setTimeout(r,params.intervalMs+2e3));continue}throw err===`expired_token`?Error(`GitHub device code expired; run login again`):err===`access_denied`?Error(`GitHub login cancelled`):Error(`GitHub device flow error: ${err}`)}throw Error(`GitHub device code expired; run login again`)}async function githubCopilotLoginCommand(opts,runtime){if(!process.stdin.isTTY)throw Error(`github-copilot login requires an interactive TTY.`);intro(stylePromptTitle(`GitHub Copilot login`));let profileId=opts.profileId?.trim()||`github-copilot:github`;(await ensureAuthProfileStore(void 0,{allowKeychainPrompt:!1})).profiles[profileId]&&!opts.yes&&note(`Auth profile already exists: ${profileId}\nRe-running will overwrite it.`,stylePromptTitle(`Existing credentials`));let spin=spinner();spin.start(`Requesting device code from GitHub...`);let device=await requestDeviceCode({scope:`read:user`});spin.stop(`Device code ready`),note([`Visit: ${device.verification_uri}`,`Code: ${device.user_code}`].join(`
1
+ import{At as loadBuilderForceAgentsPlugins,kt as createPluginLoaderLogger}from"./reply-CpGH-3If.js";import{t as createSubsystemLogger}from"./subsystem-B3TqcCrZ.js";import{Gt as ensureAuthProfileStore,Ut as upsertAuthProfile,l as normalizeProviderId}from"./model-selection-DX_WOc2P.js";import{n as isWSLEnv}from"./wsl-CQrB96ai.js";import{r as stylePromptTitle}from"./prompt-style-BwwmGo3-.js";import{f as updateConfig}from"./shared-eZqGzEHT.js";import{d as applyAuthProfileConfig}from"./auth-token-CWT7TW8z.js";import{n as logConfigUpdated}from"./logging-9jbJihk2.js";import{intro,note,outro,spinner}from"@clack/prompts";const CLIENT_ID=`Iv1.b507a08c87ecfe98`;function parseJsonResponse(value){if(!value||typeof value!=`object`)throw Error(`Unexpected response from GitHub`);return value}async function requestDeviceCode(params){let body=new URLSearchParams({client_id:CLIENT_ID,scope:params.scope}),res=await fetch(`https://github.com/login/device/code`,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`},body});if(!res.ok)throw Error(`GitHub device code failed: HTTP ${res.status}`);let json=parseJsonResponse(await res.json());if(!json.device_code||!json.user_code||!json.verification_uri)throw Error(`GitHub device code response missing fields`);return json}async function pollForAccessToken(params){let bodyBase=new URLSearchParams({client_id:CLIENT_ID,device_code:params.deviceCode,grant_type:`urn:ietf:params:oauth:grant-type:device_code`});for(;Date.now()<params.expiresAt;){let res=await fetch(`https://github.com/login/oauth/access_token`,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`},body:bodyBase});if(!res.ok)throw Error(`GitHub device token failed: HTTP ${res.status}`);let json=parseJsonResponse(await res.json());if(`access_token`in json&&typeof json.access_token==`string`)return json.access_token;let err=`error`in json?json.error:`unknown`;if(err===`authorization_pending`){await new Promise(r=>setTimeout(r,params.intervalMs));continue}if(err===`slow_down`){await new Promise(r=>setTimeout(r,params.intervalMs+2e3));continue}throw err===`expired_token`?Error(`GitHub device code expired; run login again`):err===`access_denied`?Error(`GitHub login cancelled`):Error(`GitHub device flow error: ${err}`)}throw Error(`GitHub device code expired; run login again`)}async function githubCopilotLoginCommand(opts,runtime){if(!process.stdin.isTTY)throw Error(`github-copilot login requires an interactive TTY.`);intro(stylePromptTitle(`GitHub Copilot login`));let profileId=opts.profileId?.trim()||`github-copilot:github`;(await ensureAuthProfileStore(void 0,{allowKeychainPrompt:!1})).profiles[profileId]&&!opts.yes&&note(`Auth profile already exists: ${profileId}\nRe-running will overwrite it.`,stylePromptTitle(`Existing credentials`));let spin=spinner();spin.start(`Requesting device code from GitHub...`);let device=await requestDeviceCode({scope:`read:user`});spin.stop(`Device code ready`),note([`Visit: ${device.verification_uri}`,`Code: ${device.user_code}`].join(`
2
2
  `),stylePromptTitle(`Authorize`));let expiresAt=Date.now()+device.expires_in*1e3,intervalMs=Math.max(1e3,device.interval*1e3),polling=spinner();polling.start(`Waiting for GitHub authorization...`);let accessToken=await pollForAccessToken({deviceCode:device.device_code,intervalMs,expiresAt});polling.stop(`GitHub access token acquired`),upsertAuthProfile({profileId,credential:{type:`token`,provider:`github-copilot`,token:accessToken}}),await updateConfig(cfg=>applyAuthProfileConfig(cfg,{provider:`github-copilot`,profileId,mode:`token`})),logConfigUpdated(runtime),runtime.log(`Auth profile: ${profileId} (github-copilot/token)`),outro(`Done`)}const log=createSubsystemLogger(`plugins`);function resolvePluginProviders(params){return loadBuilderForceAgentsPlugins({config:params.config,workspaceDir:params.workspaceDir,logger:createPluginLoaderLogger(log)}).providers.map(entry=>entry.provider)}function isRemoteEnvironment(){return!!(process.env.SSH_CLIENT||process.env.SSH_TTY||process.env.SSH_CONNECTION||process.env.REMOTE_CONTAINERS||process.env.CODESPACES||process.platform===`linux`&&!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY&&!isWSLEnv())}const validateRequiredInput=value=>value.trim().length>0?void 0:`Required`;function createVpsAwareOAuthHandlers(params){let manualPromptMessage=params.manualPromptMessage??`Paste the redirect URL`,manualCodePromise;return{onAuth:async({url})=>{if(params.isRemote){params.spin.stop(`OAuth URL ready`),params.runtime.log(`\nOpen this URL in your LOCAL browser:\n\n${url}\n`),manualCodePromise=params.prompter.text({message:manualPromptMessage,validate:validateRequiredInput}).then(value=>String(value));return}params.spin.update(params.localBrowserMessage),await params.openUrl(url),params.runtime.log(`Open: ${url}`)},onPrompt:async prompt=>{if(manualCodePromise)return manualCodePromise;let code=await params.prompter.text({message:prompt.message,placeholder:prompt.placeholder,validate:validateRequiredInput});return String(code)}}}function resolveProviderMatch(providers,rawProvider){let raw=rawProvider?.trim();if(!raw)return null;let normalized=normalizeProviderId(raw);return providers.find(provider=>normalizeProviderId(provider.id)===normalized)??providers.find(provider=>provider.aliases?.some(alias=>normalizeProviderId(alias)===normalized)??!1)??null}function pickAuthMethod(provider,rawMethod){let raw=rawMethod?.trim();if(!raw)return null;let normalized=raw.toLowerCase();return provider.auth.find(method=>method.id.toLowerCase()===normalized)??provider.auth.find(method=>method.label.toLowerCase()===normalized)??null}function isPlainRecord(value){return!!(value&&typeof value==`object`&&!Array.isArray(value))}function mergeConfigPatch(base,patch){if(!isPlainRecord(base)||!isPlainRecord(patch))return patch;let next={...base};for(let[key,value]of Object.entries(patch)){let existing=next[key];isPlainRecord(existing)&&isPlainRecord(value)?next[key]=mergeConfigPatch(existing,value):next[key]=value}return next}function applyDefaultModel(cfg,model){let models={...cfg.agents?.defaults?.models};models[model]=models[model]??{};let existingModel=cfg.agents?.defaults?.model;return{...cfg,agents:{...cfg.agents,defaults:{...cfg.agents?.defaults,models,model:{...existingModel&&typeof existingModel==`object`&&`fallbacks`in existingModel?{fallbacks:existingModel.fallbacks}:void 0,primary:model}}}}}export{createVpsAwareOAuthHandlers as a,githubCopilotLoginCommand as c,resolveProviderMatch as i,mergeConfigPatch as n,isRemoteEnvironment as o,pickAuthMethod as r,resolvePluginProviders as s,applyDefaultModel as t};
@@ -1,2 +1,2 @@
1
- import{t as createSubsystemLogger}from"./subsystem-C4b1Von0.js";import{L as normalizeProviderId,b as ensureAuthProfileStore,v as upsertAuthProfile}from"./auth-profiles-BARnVAUE.js";import{C as createPluginLoaderLogger,w as loadBuilderForceAgentsPlugins}from"./subagent-registry-oB_F2U2W.js";import{n as isWSLEnv}from"./wsl-BrsNH7_s.js";import{r as stylePromptTitle}from"./prompt-style-CZOeG0sw.js";import{f as updateConfig}from"./shared-DjBPjC55.js";import{d as applyAuthProfileConfig}from"./auth-token-DGaO7TMn.js";import{n as logConfigUpdated}from"./logging-CRzk-5ye.js";import{intro,note,outro,spinner}from"@clack/prompts";const CLIENT_ID=`Iv1.b507a08c87ecfe98`;function parseJsonResponse(value){if(!value||typeof value!=`object`)throw Error(`Unexpected response from GitHub`);return value}async function requestDeviceCode(params){let body=new URLSearchParams({client_id:CLIENT_ID,scope:params.scope}),res=await fetch(`https://github.com/login/device/code`,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`},body});if(!res.ok)throw Error(`GitHub device code failed: HTTP ${res.status}`);let json=parseJsonResponse(await res.json());if(!json.device_code||!json.user_code||!json.verification_uri)throw Error(`GitHub device code response missing fields`);return json}async function pollForAccessToken(params){let bodyBase=new URLSearchParams({client_id:CLIENT_ID,device_code:params.deviceCode,grant_type:`urn:ietf:params:oauth:grant-type:device_code`});for(;Date.now()<params.expiresAt;){let res=await fetch(`https://github.com/login/oauth/access_token`,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`},body:bodyBase});if(!res.ok)throw Error(`GitHub device token failed: HTTP ${res.status}`);let json=parseJsonResponse(await res.json());if(`access_token`in json&&typeof json.access_token==`string`)return json.access_token;let err=`error`in json?json.error:`unknown`;if(err===`authorization_pending`){await new Promise(r=>setTimeout(r,params.intervalMs));continue}if(err===`slow_down`){await new Promise(r=>setTimeout(r,params.intervalMs+2e3));continue}throw err===`expired_token`?Error(`GitHub device code expired; run login again`):err===`access_denied`?Error(`GitHub login cancelled`):Error(`GitHub device flow error: ${err}`)}throw Error(`GitHub device code expired; run login again`)}async function githubCopilotLoginCommand(opts,runtime){if(!process.stdin.isTTY)throw Error(`github-copilot login requires an interactive TTY.`);intro(stylePromptTitle(`GitHub Copilot login`));let profileId=opts.profileId?.trim()||`github-copilot:github`;(await ensureAuthProfileStore(void 0,{allowKeychainPrompt:!1})).profiles[profileId]&&!opts.yes&&note(`Auth profile already exists: ${profileId}\nRe-running will overwrite it.`,stylePromptTitle(`Existing credentials`));let spin=spinner();spin.start(`Requesting device code from GitHub...`);let device=await requestDeviceCode({scope:`read:user`});spin.stop(`Device code ready`),note([`Visit: ${device.verification_uri}`,`Code: ${device.user_code}`].join(`
1
+ import{t as createSubsystemLogger}from"./subsystem-C4b1Von0.js";import{L as normalizeProviderId,b as ensureAuthProfileStore,v as upsertAuthProfile}from"./auth-profiles-BARnVAUE.js";import{C as createPluginLoaderLogger,w as loadBuilderForceAgentsPlugins}from"./subagent-registry-BUKplZi1.js";import{n as isWSLEnv}from"./wsl-BrsNH7_s.js";import{r as stylePromptTitle}from"./prompt-style-CZOeG0sw.js";import{f as updateConfig}from"./shared-DjBPjC55.js";import{d as applyAuthProfileConfig}from"./auth-token-DGaO7TMn.js";import{n as logConfigUpdated}from"./logging-CRzk-5ye.js";import{intro,note,outro,spinner}from"@clack/prompts";const CLIENT_ID=`Iv1.b507a08c87ecfe98`;function parseJsonResponse(value){if(!value||typeof value!=`object`)throw Error(`Unexpected response from GitHub`);return value}async function requestDeviceCode(params){let body=new URLSearchParams({client_id:CLIENT_ID,scope:params.scope}),res=await fetch(`https://github.com/login/device/code`,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`},body});if(!res.ok)throw Error(`GitHub device code failed: HTTP ${res.status}`);let json=parseJsonResponse(await res.json());if(!json.device_code||!json.user_code||!json.verification_uri)throw Error(`GitHub device code response missing fields`);return json}async function pollForAccessToken(params){let bodyBase=new URLSearchParams({client_id:CLIENT_ID,device_code:params.deviceCode,grant_type:`urn:ietf:params:oauth:grant-type:device_code`});for(;Date.now()<params.expiresAt;){let res=await fetch(`https://github.com/login/oauth/access_token`,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`},body:bodyBase});if(!res.ok)throw Error(`GitHub device token failed: HTTP ${res.status}`);let json=parseJsonResponse(await res.json());if(`access_token`in json&&typeof json.access_token==`string`)return json.access_token;let err=`error`in json?json.error:`unknown`;if(err===`authorization_pending`){await new Promise(r=>setTimeout(r,params.intervalMs));continue}if(err===`slow_down`){await new Promise(r=>setTimeout(r,params.intervalMs+2e3));continue}throw err===`expired_token`?Error(`GitHub device code expired; run login again`):err===`access_denied`?Error(`GitHub login cancelled`):Error(`GitHub device flow error: ${err}`)}throw Error(`GitHub device code expired; run login again`)}async function githubCopilotLoginCommand(opts,runtime){if(!process.stdin.isTTY)throw Error(`github-copilot login requires an interactive TTY.`);intro(stylePromptTitle(`GitHub Copilot login`));let profileId=opts.profileId?.trim()||`github-copilot:github`;(await ensureAuthProfileStore(void 0,{allowKeychainPrompt:!1})).profiles[profileId]&&!opts.yes&&note(`Auth profile already exists: ${profileId}\nRe-running will overwrite it.`,stylePromptTitle(`Existing credentials`));let spin=spinner();spin.start(`Requesting device code from GitHub...`);let device=await requestDeviceCode({scope:`read:user`});spin.stop(`Device code ready`),note([`Visit: ${device.verification_uri}`,`Code: ${device.user_code}`].join(`
2
2
  `),stylePromptTitle(`Authorize`));let expiresAt=Date.now()+device.expires_in*1e3,intervalMs=Math.max(1e3,device.interval*1e3),polling=spinner();polling.start(`Waiting for GitHub authorization...`);let accessToken=await pollForAccessToken({deviceCode:device.device_code,intervalMs,expiresAt});polling.stop(`GitHub access token acquired`),upsertAuthProfile({profileId,credential:{type:`token`,provider:`github-copilot`,token:accessToken}}),await updateConfig(cfg=>applyAuthProfileConfig(cfg,{provider:`github-copilot`,profileId,mode:`token`})),logConfigUpdated(runtime),runtime.log(`Auth profile: ${profileId} (github-copilot/token)`),outro(`Done`)}const log=createSubsystemLogger(`plugins`);function resolvePluginProviders(params){return loadBuilderForceAgentsPlugins({config:params.config,workspaceDir:params.workspaceDir,logger:createPluginLoaderLogger(log)}).providers.map(entry=>entry.provider)}function isRemoteEnvironment(){return!!(process.env.SSH_CLIENT||process.env.SSH_TTY||process.env.SSH_CONNECTION||process.env.REMOTE_CONTAINERS||process.env.CODESPACES||process.platform===`linux`&&!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY&&!isWSLEnv())}const validateRequiredInput=value=>value.trim().length>0?void 0:`Required`;function createVpsAwareOAuthHandlers(params){let manualPromptMessage=params.manualPromptMessage??`Paste the redirect URL`,manualCodePromise;return{onAuth:async({url})=>{if(params.isRemote){params.spin.stop(`OAuth URL ready`),params.runtime.log(`\nOpen this URL in your LOCAL browser:\n\n${url}\n`),manualCodePromise=params.prompter.text({message:manualPromptMessage,validate:validateRequiredInput}).then(value=>String(value));return}params.spin.update(params.localBrowserMessage),await params.openUrl(url),params.runtime.log(`Open: ${url}`)},onPrompt:async prompt=>{if(manualCodePromise)return manualCodePromise;let code=await params.prompter.text({message:prompt.message,placeholder:prompt.placeholder,validate:validateRequiredInput});return String(code)}}}function resolveProviderMatch(providers,rawProvider){let raw=rawProvider?.trim();if(!raw)return null;let normalized=normalizeProviderId(raw);return providers.find(provider=>normalizeProviderId(provider.id)===normalized)??providers.find(provider=>provider.aliases?.some(alias=>normalizeProviderId(alias)===normalized)??!1)??null}function pickAuthMethod(provider,rawMethod){let raw=rawMethod?.trim();if(!raw)return null;let normalized=raw.toLowerCase();return provider.auth.find(method=>method.id.toLowerCase()===normalized)??provider.auth.find(method=>method.label.toLowerCase()===normalized)??null}function isPlainRecord(value){return!!(value&&typeof value==`object`&&!Array.isArray(value))}function mergeConfigPatch(base,patch){if(!isPlainRecord(base)||!isPlainRecord(patch))return patch;let next={...base};for(let[key,value]of Object.entries(patch)){let existing=next[key];isPlainRecord(existing)&&isPlainRecord(value)?next[key]=mergeConfigPatch(existing,value):next[key]=value}return next}function applyDefaultModel(cfg,model){let models={...cfg.agents?.defaults?.models};models[model]=models[model]??{};let existingModel=cfg.agents?.defaults?.model;return{...cfg,agents:{...cfg.agents,defaults:{...cfg.agents?.defaults,models,model:{...existingModel&&typeof existingModel==`object`&&`fallbacks`in existingModel?{fallbacks:existingModel.fallbacks}:void 0,primary:model}}}}}export{createVpsAwareOAuthHandlers as a,githubCopilotLoginCommand as c,resolveProviderMatch as i,mergeConfigPatch as n,isRemoteEnvironment as o,pickAuthMethod as r,resolvePluginProviders as s,applyDefaultModel as t};
@@ -1 +1 @@
1
- import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./embedded-helpers-BrfnCpCe.js";import{_n as dispatchReplyWithBufferedBlockDispatcher,vn as dispatchReplyWithDispatcher}from"./reply-BsRbeUhd.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"./model-selection-DX_WOc2P.js";import"./env-file-BI2jpOmF.js";import"./boolean-Cn4K2fc9.js";import"./env-BHP32i7Q.js";import"./io-YzT_09GD.js";import"./manifest-registry-BVDm_CP0.js";import"./config-8x9ZIdfF.js";import"./runner-CfNJMPWu.js";import"./model-catalog-C7PdRY6w.js";import"./sandbox-DzuXOMNa.js";import"./chrome-Dk-WNIhp.js";import"./tailscale-B-VKIlWm.js";import"./auth-CDcrUXYB.js";import"./server-context-DsuST81W.js";import"./frontmatter-DyJ2unbL.js";import"./skills-B4r9m770.js";import"./plugin-skills-C39wi4uD.js";import"./routes-DoGqdgOP.js";import"./redact-C3oo7_aY.js";import"./errors-CjmtpPBP.js";import"./paths-C1QKdGJX.js";import"./ssrf-4MnoQ7Sz.js";import"./image-ops-CONrkLJK.js";import"./store-BoTKCB2d.js";import"./ports-BNC_iRpw.js";import"./trash-Czxs8cUf.js";import"./sessions-OZNhnSwZ.js";import"./message-channel-DrfCCUg4.js";import"./plugins-COtQnUML.js";import"./accounts-CTKk3xPO.js";import"./accounts-DFqpWzeU.js";import"./accounts-CbQihLRU.js";import"./bindings-DMDv84HS.js";import"./send-Dmzp1gNF.js";import"./send-DEgD1Cfd.js";import"./paths-CkcK939O.js";import"./src-DxNC0IHE.js";import"./tool-images-DsKy1uNN.js";import"./tool-display-TRKLY-yH.js";import"./fetch-guard-BQuCLA1C.js";import"./api-key-rotation-ChHXb1Pq.js";import"./fetch-CDeJQlzN.js";import"./sqlite-DEiKj1vi.js";import"./tokens-Ct4DyfhX.js";import"./project-context-store-C8TROXjr.js";import"./with-timeout-YbYylXgf.js";import"./deliver-C5lVQcrs.js";import"./send-DlPwTVpG.js";import"./workspace-ChbaDWgp.js";import"./reply-prefix-BwtP84WV.js";import"./memory-cli-DWEtZrJ5.js";import"./manager-VPNjVm0W.js";import"./retry-Jis-ZZfm.js";import"./client-DhlZRznX.js";import"./call-DwWslKWv.js";import"./common-NHQnma5l.js";import"./chunk-h7FZEwW2.js";import"./markdown-tables-DOq8FfUr.js";import"./ir-AM9J0QtO.js";import"./render-CSLaFZoy.js";import"./builderforcellm-syscheck-DMjMJNFI.js";import"./send-DglIOKdS.js";import"./outbound-attachment-TWzrIR9Q.js";import"./fetch-B6_hd7w9.js";import"./delivery-queue-BZWZDdpJ.js";import"./channel-activity-qRD5c3VV.js";import"./tables-DirB1oU7.js";import"./pairing-store-DIpKOfDK.js";import"./links-CYRGsVCu.js";import"./cli-utils-BLNnV_WG.js";import"./help-format-NhTn4dWd.js";import"./progress-OKwbfa23.js";import"./resolve-route-BvfmiLqC.js";import"./replies-BoxyKuBS.js";import"./refresh-DgTiir08.js";import"./coding-tools.policy-BJQuylwM.js";import"./send-BgdpJymE.js";import"./onboard-helpers-CPmBeDvt.js";import"./prompt-style-BwwmGo3-.js";import"./pairing-labels-CELZqNBC.js";import"./session-cost-usage-pgxrRRW4.js";import"./provider-usage-CbH7sm73.js";import"./active-listener-DBdxNyOd.js";import"./exec-approvals-kmxxyvIe.js";import"./nodes-screen-BWDONgPE.js";import"./project-context-Cnqfr64Z.js";import"./control-service-BhSaBRxC.js";import"./stagger-NaB6u1z1.js";import"./channel-selection-CQ5MM7Hi.js";import"./mamba-state-engine-Ck2JCfL6.js";import"./transformers-stream-QS2dnQob.js";export{dispatchReplyWithBufferedBlockDispatcher,dispatchReplyWithDispatcher};
1
+ import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./embedded-helpers-3FEGD_4b.js";import{_n as dispatchReplyWithBufferedBlockDispatcher,vn as dispatchReplyWithDispatcher}from"./reply-CpGH-3If.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"./model-selection-DX_WOc2P.js";import"./env-file-BI2jpOmF.js";import"./boolean-Cn4K2fc9.js";import"./env-BHP32i7Q.js";import"./io-YzT_09GD.js";import"./manifest-registry-BVDm_CP0.js";import"./config-8x9ZIdfF.js";import"./runner-C651oVfk.js";import"./model-catalog-C7PdRY6w.js";import"./sandbox-DzuXOMNa.js";import"./chrome-Dk-WNIhp.js";import"./tailscale-B-VKIlWm.js";import"./auth-CDcrUXYB.js";import"./server-context-DsuST81W.js";import"./frontmatter-DyJ2unbL.js";import"./skills-B4r9m770.js";import"./plugin-skills-C39wi4uD.js";import"./routes-DoGqdgOP.js";import"./redact-C3oo7_aY.js";import"./errors-CjmtpPBP.js";import"./paths-C1QKdGJX.js";import"./ssrf-4MnoQ7Sz.js";import"./image-ops-CONrkLJK.js";import"./store-BoTKCB2d.js";import"./ports-BNC_iRpw.js";import"./trash-Czxs8cUf.js";import"./sessions-OZNhnSwZ.js";import"./message-channel-DrfCCUg4.js";import"./plugins-COtQnUML.js";import"./accounts-CTKk3xPO.js";import"./accounts-DFqpWzeU.js";import"./accounts-CbQihLRU.js";import"./bindings-DMDv84HS.js";import"./send-Dmzp1gNF.js";import"./send-DEgD1Cfd.js";import"./paths-CkcK939O.js";import"./src-D2-7sOAX.js";import"./tool-images-DsKy1uNN.js";import"./tool-display-TRKLY-yH.js";import"./fetch-guard-BQuCLA1C.js";import"./api-key-rotation-ChHXb1Pq.js";import"./fetch-CDeJQlzN.js";import"./sqlite-DEiKj1vi.js";import"./tokens-Ct4DyfhX.js";import"./project-context-store-BS994lZX.js";import"./with-timeout-YbYylXgf.js";import"./deliver-XGIFv80r.js";import"./send-DlPwTVpG.js";import"./workspace-ChbaDWgp.js";import"./reply-prefix-BwtP84WV.js";import"./memory-cli-DWEtZrJ5.js";import"./manager-VPNjVm0W.js";import"./retry-Jis-ZZfm.js";import"./client-DhlZRznX.js";import"./call-DwWslKWv.js";import"./common-NHQnma5l.js";import"./chunk-h7FZEwW2.js";import"./markdown-tables-DOq8FfUr.js";import"./ir-AM9J0QtO.js";import"./render-CSLaFZoy.js";import"./builderforcellm-syscheck-DGZKIwPC.js";import"./send-DglIOKdS.js";import"./outbound-attachment-TWzrIR9Q.js";import"./fetch-B6_hd7w9.js";import"./delivery-queue-BZWZDdpJ.js";import"./channel-activity-qRD5c3VV.js";import"./tables-DirB1oU7.js";import"./pairing-store-DIpKOfDK.js";import"./links-CYRGsVCu.js";import"./cli-utils-BLNnV_WG.js";import"./help-format-NhTn4dWd.js";import"./progress-OKwbfa23.js";import"./resolve-route-BvfmiLqC.js";import"./replies-BoxyKuBS.js";import"./refresh-DgTiir08.js";import"./coding-tools.policy-BJQuylwM.js";import"./send-BgdpJymE.js";import"./onboard-helpers-CPmBeDvt.js";import"./prompt-style-BwwmGo3-.js";import"./pairing-labels-CELZqNBC.js";import"./session-cost-usage-pgxrRRW4.js";import"./provider-usage-CbH7sm73.js";import"./active-listener-DBdxNyOd.js";import"./exec-approvals-kmxxyvIe.js";import"./nodes-screen-BWDONgPE.js";import"./project-context-Cg0S9eFT.js";import"./control-service-BhSaBRxC.js";import"./stagger-NaB6u1z1.js";import"./channel-selection-CQ5MM7Hi.js";import"./mamba-state-engine-BloJzrxU.js";import"./transformers-stream-QS2dnQob.js";export{dispatchReplyWithBufferedBlockDispatcher,dispatchReplyWithDispatcher};
@@ -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"./warning-filter-nSTjpMIH.js";import"./auth-profiles-BARnVAUE.js";import"./logger-AbH8mdkv.js";import"./session-key-D--2AEus.js";import"./builderforce-root-D3-p8W2n.js";import"./exec-CGuYALEs.js";import"./agent-scope-BcoQBOwz.js";import"./env-file-BIKVpYUN.js";import"./io-BySzqKzT.js";import"./manifest-registry-DtqFvEIR.js";import"./config-Bwt58P9r.js";import"./model-discovery-DxpimsRF.js";import"./model-catalog-wcISK04b.js";import"./frontmatter-DgRc5y_l.js";import"./skills-W00EPvKR.js";import"./plugin-skills-BSUncenp.js";import"./refresh-bgGvF0aF.js";import"./client-DeQ0LbP9.js";import"./call-CjC3SRPv.js";import"./message-channel-C-yw5fZm.js";import{L as dispatchReplyWithBufferedBlockDispatcher,R as dispatchReplyWithDispatcher}from"./subagent-registry-oB_F2U2W.js";import"./sessions-ko0LxxGk.js";import"./src-BRo9ywDM.js";import"./project-context-store-ClFt-YDL.js";import"./tokens-BNwTTeJb.js";import"./plugins-DJGW_fnS.js";import"./accounts-Z5bJpNrG.js";import"./bindings-D0uket3l.js";import"./send-gG3CFJwv.js";import"./send-DqJCViFb.js";import"./with-timeout-By0c7Ur9.js";import"./deliver-Bs-FVPQ4.js";import"./accounts-DoJYLMfS.js";import"./send-mCN63Hkn.js";import"./image-ops-Bg9yFwjX.js";import"./redact-bWj_-q3j.js";import"./errors-t5wHPcwh.js";import"./embedded-helpers-Q5h1lA6D.js";import"./sandbox-BcH7kS1y.js";import"./chrome-IJYO1tSE.js";import"./tailscale-CgCG7AVQ.js";import"./auth-B4Kn3eee.js";import"./server-context-D3iiIzvV.js";import"./routes-7QTsp3sA.js";import"./paths-GamzES41.js";import"./ssrf-BiSQzdcA.js";import"./store-C5LmVaEC.js";import"./ports-LqFTyTSK.js";import"./trash-zs6gNxed.js";import"./accounts-BT-NzzBc.js";import"./paths-BQ9W7Bs0.js";import"./tool-images-DV2HMmx4.js";import"./workspace-Cz9mCy0P.js";import"./reply-prefix-9hmbzubX.js";import"./sqlite-BEgCClMz.js";import"./memory-cli-COgt0ROi.js";import"./manager-Cob4Ofzr.js";import"./gemini-auth-BZgBIY0M.js";import"./retry-Cc6xusE8.js";import"./common-BRdxH-uH.js";import"./runner-68-X3KHf.js";import"./tool-display-BIswnHaq.js";import"./chunk-UPhdkZNp.js";import"./markdown-tables-CpqWBduK.js";import"./fetch-guard-CoGEds8D.js";import"./fetch-CUsKv8oj.js";import"./ir-6L-eU4id.js";import"./render-1ABBE2Y6.js";import"./builderforcellm-syscheck-CyZiwcdF.js";import"./session-utils-VCGKYbgW.js";import"./coding-tools.policy-DIeVRurg.js";import"./pairing-store-tegvJa08.js";import"./fetch-CrbOFvsL.js";import"./exec-approvals-Cn0K-HtJ.js";import"./nodes-screen-OI7tHqlU.js";import"./session-cost-usage-BgZfN_WR.js";import"./provider-usage-BLkm6ojE.js";import"./send-BIR1Jhc5.js";import"./outbound-attachment-3GZbMqo1.js";import"./delivery-queue-DQXq7KUU.js";import"./project-context-DXP12xhk.js";import"./control-service-Cml__v8i.js";import"./stagger-CUH5rlmS.js";import"./channel-selection-DFf_nAm7.js";import"./send-9rUcCK7O.js";import"./resolve-route-D3X-bXU-.js";import"./channel-activity-By7lsk7N.js";import"./tables-DZSV6me6.js";import"./links-B6LU5cXN.js";import"./cli-utils-ByV85M53.js";import"./help-format-DIDk_7gh.js";import"./progress-BQMO_-7I.js";import"./replies-CL0uQgU7.js";import"./onboard-helpers-Di5OXlap.js";import"./prompt-style-CZOeG0sw.js";import"./pairing-labels-DofkNLS2.js";import"./active-listener-BC31MA4v.js";import"./mamba-state-engine-CFwb8DcP.js";import"./transformers-stream-nSL4Xu31.js";export{dispatchReplyWithBufferedBlockDispatcher,dispatchReplyWithDispatcher};
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"./warning-filter-nSTjpMIH.js";import"./auth-profiles-BARnVAUE.js";import"./logger-AbH8mdkv.js";import"./session-key-D--2AEus.js";import"./builderforce-root-D3-p8W2n.js";import"./exec-CGuYALEs.js";import"./agent-scope-BcoQBOwz.js";import"./env-file-BIKVpYUN.js";import"./io-BySzqKzT.js";import"./manifest-registry-DtqFvEIR.js";import"./config-Bwt58P9r.js";import"./model-discovery-DxpimsRF.js";import"./model-catalog-wcISK04b.js";import"./frontmatter-DgRc5y_l.js";import"./skills-W00EPvKR.js";import"./plugin-skills-BSUncenp.js";import"./refresh-bgGvF0aF.js";import"./client-DeQ0LbP9.js";import"./call-CjC3SRPv.js";import"./message-channel-C-yw5fZm.js";import{L as dispatchReplyWithBufferedBlockDispatcher,R as dispatchReplyWithDispatcher}from"./subagent-registry-BUKplZi1.js";import"./sessions-ko0LxxGk.js";import"./src-BM8G-tIl.js";import"./project-context-store-BSIWJD6S.js";import"./tokens-BNwTTeJb.js";import"./plugins-DJGW_fnS.js";import"./accounts-Z5bJpNrG.js";import"./bindings-D0uket3l.js";import"./send-gG3CFJwv.js";import"./send-DqJCViFb.js";import"./with-timeout-By0c7Ur9.js";import"./deliver-DFhj1d_t.js";import"./accounts-DoJYLMfS.js";import"./send-mCN63Hkn.js";import"./image-ops-Bg9yFwjX.js";import"./redact-bWj_-q3j.js";import"./errors-t5wHPcwh.js";import"./embedded-helpers-DGDYymYx.js";import"./sandbox-BcH7kS1y.js";import"./chrome-IJYO1tSE.js";import"./tailscale-CgCG7AVQ.js";import"./auth-B4Kn3eee.js";import"./server-context-D3iiIzvV.js";import"./routes-7QTsp3sA.js";import"./paths-GamzES41.js";import"./ssrf-BiSQzdcA.js";import"./store-C5LmVaEC.js";import"./ports-LqFTyTSK.js";import"./trash-zs6gNxed.js";import"./accounts-BT-NzzBc.js";import"./paths-BQ9W7Bs0.js";import"./tool-images-DV2HMmx4.js";import"./workspace-Cz9mCy0P.js";import"./reply-prefix-9hmbzubX.js";import"./sqlite-BEgCClMz.js";import"./memory-cli-COgt0ROi.js";import"./manager-Cob4Ofzr.js";import"./gemini-auth-BZgBIY0M.js";import"./retry-Cc6xusE8.js";import"./common-BRdxH-uH.js";import"./runner-BLCTET8O.js";import"./tool-display-BIswnHaq.js";import"./chunk-UPhdkZNp.js";import"./markdown-tables-CpqWBduK.js";import"./fetch-guard-CoGEds8D.js";import"./fetch-CUsKv8oj.js";import"./ir-6L-eU4id.js";import"./render-1ABBE2Y6.js";import"./builderforcellm-syscheck-CfFrfeV2.js";import"./session-utils-VCGKYbgW.js";import"./coding-tools.policy-DIeVRurg.js";import"./pairing-store-tegvJa08.js";import"./fetch-CrbOFvsL.js";import"./exec-approvals-Cn0K-HtJ.js";import"./nodes-screen-OI7tHqlU.js";import"./session-cost-usage-BgZfN_WR.js";import"./provider-usage-BLkm6ojE.js";import"./send-BIR1Jhc5.js";import"./outbound-attachment-3GZbMqo1.js";import"./delivery-queue-DQXq7KUU.js";import"./project-context-C5KLsMTc.js";import"./control-service-Cml__v8i.js";import"./stagger-CUH5rlmS.js";import"./channel-selection-DFf_nAm7.js";import"./send-9rUcCK7O.js";import"./resolve-route-D3X-bXU-.js";import"./channel-activity-By7lsk7N.js";import"./tables-DZSV6me6.js";import"./links-B6LU5cXN.js";import"./cli-utils-ByV85M53.js";import"./help-format-DIDk_7gh.js";import"./progress-BQMO_-7I.js";import"./replies-CL0uQgU7.js";import"./onboard-helpers-Di5OXlap.js";import"./prompt-style-CZOeG0sw.js";import"./pairing-labels-DofkNLS2.js";import"./active-listener-BC31MA4v.js";import"./mamba-state-engine-BYmUnYwn.js";import"./transformers-stream-nSL4Xu31.js";export{dispatchReplyWithBufferedBlockDispatcher,dispatchReplyWithDispatcher};
@@ -1,2 +1,2 @@
1
- import{g as resolveStateDir}from"./paths-BHg-VHB4.js";import{k as isVerbose}from"./utils-BP60e80M.js";import{s as shouldLogSubsystemToConsole,t as createSubsystemLogger}from"./subsystem-C4b1Von0.js";import{C as parseAgentSessionKey}from"./session-key-D--2AEus.js";import{En as writeJsonAtomic,Tn as readJsonFile,qn as estimateBase64DecodedBytes,wn as createAsyncLock,x as sniffMimeFromBase64}from"./subagent-registry-oB_F2U2W.js";import{n as redactSensitiveText,t as getDefaultRedactPatterns}from"./redact-bWj_-q3j.js";import path from"node:path";import chalk from"chalk";import{createHash,createPrivateKey,sign}from"node:crypto";import fs from"node:fs/promises";import http2 from"node:http2";let gatewayWsLogStyle=`auto`;function setGatewayWsLogStyle(style){gatewayWsLogStyle=style}function getGatewayWsLogStyle(){return gatewayWsLogStyle}const UUID_RE=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,WS_LOG_REDACT_OPTIONS={mode:`tools`,patterns:getDefaultRedactPatterns()},wsInflightCompact=new Map;let wsLastCompactConnId;const wsInflightOptimized=new Map,wsInflightSince=new Map,wsLog=createSubsystemLogger(`gateway/ws`),WS_META_SKIP_KEYS=new Set([`connId`,`id`,`method`,`ok`,`event`]);function collectWsRestMeta(meta){let restMeta=[];if(!meta)return restMeta;for(let[key,value]of Object.entries(meta))value!==void 0&&(WS_META_SKIP_KEYS.has(key)||restMeta.push(`${chalk.dim(key)}=${formatForLog(value)}`));return restMeta}function buildWsHeadline(params){if((params.kind===`req`||params.kind===`res`)&&params.method)return chalk.bold(params.method);if(params.kind===`event`&&params.event)return chalk.bold(params.event)}function buildWsStatusToken(kind,ok){if(!(kind!==`res`||ok===void 0))return ok?chalk.greenBright(`✓`):chalk.redBright(`✗`)}function logWsInfoLine(params){let tokens=[params.prefix,params.statusToken,params.headline,params.durationToken,...params.restMeta,...params.trailing].filter(t=>!!t);wsLog.info(tokens.join(` `))}function shouldLogWs(){return shouldLogSubsystemToConsole(`gateway/ws`)}function shortId(value){let s=value.trim();return UUID_RE.test(s)?`${s.slice(0,8)}…${s.slice(-4)}`:s.length<=24?s:`${s.slice(0,12)}…${s.slice(-4)}`}function formatForLog(value){try{if(value instanceof Error){let parts=[];value.name&&parts.push(value.name),value.message&&parts.push(value.message);let code=`code`in value&&(typeof value.code==`string`||typeof value.code==`number`)?String(value.code):``;code&&parts.push(`code=${code}`);let combined=parts.filter(Boolean).join(`: `).trim();if(combined)return combined.length>240?`${combined.slice(0,240)}...`:combined}if(value&&typeof value==`object`){let rec=value;if(typeof rec.message==`string`&&rec.message.trim()){let name=typeof rec.name==`string`?rec.name.trim():``,code=typeof rec.code==`string`||typeof rec.code==`number`?String(rec.code):``,parts=[name,rec.message.trim()].filter(Boolean);code&&parts.push(`code=${code}`);let combined=parts.join(`: `).trim();return combined.length>240?`${combined.slice(0,240)}...`:combined}}let str=typeof value==`string`||typeof value==`number`?String(value):JSON.stringify(value);if(!str)return``;let redacted=redactSensitiveText(str,WS_LOG_REDACT_OPTIONS);return redacted.length>240?`${redacted.slice(0,240)}...`:redacted}catch{return String(value)}}function compactPreview(input,maxLen=160){let oneLine=input.replace(/\s+/g,` `).trim();return oneLine.length<=maxLen?oneLine:`${oneLine.slice(0,Math.max(0,maxLen-1))}…`}function summarizeAgentEventForWsLog(payload){if(!payload||typeof payload!=`object`)return{};let rec=payload,runId=typeof rec.runId==`string`?rec.runId:void 0,stream=typeof rec.stream==`string`?rec.stream:void 0,seq=typeof rec.seq==`number`?rec.seq:void 0,sessionKey=typeof rec.sessionKey==`string`?rec.sessionKey:void 0,data=rec.data&&typeof rec.data==`object`?rec.data:void 0,extra={};if(runId&&(extra.run=shortId(runId)),sessionKey){let parsed=parseAgentSessionKey(sessionKey);parsed?(extra.agent=parsed.agentId,extra.session=parsed.rest):extra.session=sessionKey}if(stream&&(extra.stream=stream),seq!==void 0&&(extra.aseq=seq),!data)return extra;if(stream===`assistant`){let text=typeof data.text==`string`?data.text:void 0;text?.trim()&&(extra.text=compactPreview(text));let mediaUrls=Array.isArray(data.mediaUrls)?data.mediaUrls:void 0;return mediaUrls&&mediaUrls.length>0&&(extra.media=mediaUrls.length),extra}if(stream===`tool`){let phase=typeof data.phase==`string`?data.phase:void 0,name=typeof data.name==`string`?data.name:void 0;(phase||name)&&(extra.tool=`${phase??`?`}:${name??`?`}`);let toolCallId=typeof data.toolCallId==`string`?data.toolCallId:void 0;toolCallId&&(extra.call=shortId(toolCallId));let meta=typeof data.meta==`string`?data.meta:void 0;return meta?.trim()&&(extra.meta=meta),typeof data.isError==`boolean`&&(extra.err=data.isError),extra}if(stream===`lifecycle`){let phase=typeof data.phase==`string`?data.phase:void 0;phase&&(extra.phase=phase),typeof data.aborted==`boolean`&&(extra.aborted=data.aborted);let error=typeof data.error==`string`?data.error:void 0;return error?.trim()&&(extra.error=compactPreview(error,120)),extra}let reason=typeof data.reason==`string`?data.reason:void 0;return reason?.trim()&&(extra.reason=reason),extra}function logWs(direction,kind,meta){if(!shouldLogSubsystemToConsole(`gateway/ws`))return;let style=getGatewayWsLogStyle();if(!isVerbose()){logWsOptimized(direction,kind,meta);return}if(style===`compact`||style===`auto`){logWsCompact(direction,kind,meta);return}let now=Date.now(),connId=typeof meta?.connId==`string`?meta.connId:void 0,id=typeof meta?.id==`string`?meta.id:void 0,method=typeof meta?.method==`string`?meta.method:void 0,ok=typeof meta?.ok==`boolean`?meta.ok:void 0,event=typeof meta?.event==`string`?meta.event:void 0,inflightKey=connId&&id?`${connId}:${id}`:void 0;direction===`in`&&kind===`req`&&inflightKey&&wsInflightSince.set(inflightKey,now);let durationMs=direction===`out`&&kind===`res`&&inflightKey?(()=>{let startedAt=wsInflightSince.get(inflightKey);if(startedAt!==void 0)return wsInflightSince.delete(inflightKey),now-startedAt})():void 0,dirArrow=direction===`in`?`←`:`→`,prefix=`${(direction===`in`?chalk.greenBright:chalk.cyanBright)(dirArrow)} ${chalk.bold(kind)}`,headline=buildWsHeadline({kind,method,event}),statusToken=buildWsStatusToken(kind,ok),durationToken=typeof durationMs==`number`?chalk.dim(`${durationMs}ms`):void 0,restMeta=collectWsRestMeta(meta),trailing=[];connId&&trailing.push(`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId))}`),id&&trailing.push(`${chalk.dim(`id`)}=${chalk.gray(shortId(id))}`),logWsInfoLine({prefix,statusToken,headline,durationToken,restMeta,trailing})}function logWsOptimized(direction,kind,meta){let connId=typeof meta?.connId==`string`?meta.connId:void 0,id=typeof meta?.id==`string`?meta.id:void 0,ok=typeof meta?.ok==`boolean`?meta.ok:void 0,method=typeof meta?.method==`string`?meta.method:void 0,inflightKey=connId&&id?`${connId}:${id}`:void 0;if(direction===`in`&&kind===`req`&&inflightKey){wsInflightOptimized.set(inflightKey,Date.now()),wsInflightOptimized.size>2e3&&wsInflightOptimized.clear();return}if(kind===`parse-error`){let errorMsg=typeof meta?.error==`string`?formatForLog(meta.error):void 0;wsLog.warn([`${chalk.redBright(`✗`)} ${chalk.bold(`parse-error`)}`,errorMsg?`${chalk.dim(`error`)}=${errorMsg}`:void 0,`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId??`?`))}`].filter(t=>!!t).join(` `));return}if(direction!==`out`||kind!==`res`){if(kind===`event`&&direction===`out`&&(typeof meta?.event==`string`?meta.event:void 0)===`agent`){let stream=typeof meta?.stream==`string`?meta.stream:void 0,tool=typeof meta?.tool==`string`?meta.tool:void 0,phase=typeof meta?.phase==`string`?meta.phase:void 0,run=typeof meta?.run==`string`?meta.run:void 0,agent=typeof meta?.agent==`string`?meta.agent:void 0,tokens=[`${chalk.cyanBright(`→`)} ${chalk.bold(`agent`)}`,stream?`${chalk.dim(`stream`)}=${stream}`:void 0,tool?`${chalk.dim(`tool`)}=${tool}`:void 0,phase?`${chalk.dim(`phase`)}=${phase}`:void 0,agent?`${chalk.dim(`agent`)}=${agent}`:void 0,run?`${chalk.dim(`run`)}=${chalk.gray(run)}`:void 0].filter(t=>!!t);wsLog.info(tokens.join(` `))}return}let startedAt=inflightKey?wsInflightOptimized.get(inflightKey):void 0;inflightKey&&wsInflightOptimized.delete(inflightKey);let durationMs=typeof startedAt==`number`?Date.now()-startedAt:void 0;if(!(ok===!1||typeof durationMs==`number`&&durationMs>=50))return;let statusToken=buildWsStatusToken(`res`,ok),durationToken=typeof durationMs==`number`?chalk.dim(`${durationMs}ms`):void 0,restMeta=collectWsRestMeta(meta);logWsInfoLine({prefix:`${chalk.yellowBright(`⇄`)} ${chalk.bold(`res`)}`,statusToken,headline:method?chalk.bold(method):void 0,durationToken,restMeta,trailing:[connId?`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId))}`:``,id?`${chalk.dim(`id`)}=${chalk.gray(shortId(id))}`:``].filter(Boolean)})}function logWsCompact(direction,kind,meta){let now=Date.now(),connId=typeof meta?.connId==`string`?meta.connId:void 0,id=typeof meta?.id==`string`?meta.id:void 0,method=typeof meta?.method==`string`?meta.method:void 0,ok=typeof meta?.ok==`boolean`?meta.ok:void 0,inflightKey=connId&&id?`${connId}:${id}`:void 0;if(kind===`req`&&direction===`in`&&inflightKey){wsInflightCompact.set(inflightKey,{ts:now,method,meta});return}let compactArrow=kind===`req`||kind===`res`?`⇄`:direction===`in`?`←`:`→`,prefix=`${(kind===`req`||kind===`res`?chalk.yellowBright:direction===`in`?chalk.greenBright:chalk.cyanBright)(compactArrow)} ${chalk.bold(kind)}`,statusToken=buildWsStatusToken(kind,ok),startedAt=kind===`res`&&direction===`out`&&inflightKey?wsInflightCompact.get(inflightKey)?.ts:void 0;kind===`res`&&direction===`out`&&inflightKey&&wsInflightCompact.delete(inflightKey);let durationToken=typeof startedAt==`number`?chalk.dim(`${now-startedAt}ms`):void 0,headline=buildWsHeadline({kind,method,event:typeof meta?.event==`string`?meta.event:void 0}),restMeta=collectWsRestMeta(meta),trailing=[];connId&&connId!==wsLastCompactConnId&&(trailing.push(`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId))}`),wsLastCompactConnId=connId),id&&trailing.push(`${chalk.dim(`id`)}=${chalk.gray(shortId(id))}`),logWsInfoLine({prefix,statusToken,headline,durationToken,restMeta,trailing})}function normalizeMime(mime){if(mime)return mime.split(`;`)[0]?.trim().toLowerCase()||void 0}function isImageMime(mime){return typeof mime==`string`&&mime.startsWith(`image/`)}function isValidBase64(value){return value.length>0&&value.length%4==0&&/^[A-Za-z0-9+/]+={0,2}$/.test(value)}function normalizeAttachment(att,idx,opts){let mime=att.mimeType??``,content=att.content,label=att.fileName||att.type||`attachment-${idx+1}`;if(typeof content!=`string`)throw Error(`attachment ${label}: content must be base64 string`);if(opts.requireImageMime&&!mime.startsWith(`image/`))throw Error(`attachment ${label}: only image/* supported`);let base64=content.trim();if(opts.stripDataUrlPrefix){let dataUrlMatch=/^data:[^;]+;base64,(.*)$/.exec(base64);dataUrlMatch&&(base64=dataUrlMatch[1])}return{label,mime,base64}}function validateAttachmentBase64OrThrow(normalized,opts){if(!isValidBase64(normalized.base64))throw Error(`attachment ${normalized.label}: invalid base64 content`);let sizeBytes=estimateBase64DecodedBytes(normalized.base64);if(sizeBytes<=0||sizeBytes>opts.maxBytes)throw Error(`attachment ${normalized.label}: exceeds size limit (${sizeBytes} > ${opts.maxBytes} bytes)`);return sizeBytes}async function parseMessageWithAttachments(message,attachments,opts){let maxBytes=opts?.maxBytes??5e6,log=opts?.log;if(!attachments||attachments.length===0)return{message,images:[]};let images=[];for(let[idx,att]of attachments.entries()){if(!att)continue;let normalized=normalizeAttachment(att,idx,{stripDataUrlPrefix:!0,requireImageMime:!1});validateAttachmentBase64OrThrow(normalized,{maxBytes});let{base64:b64,label,mime}=normalized,providedMime=normalizeMime(mime),sniffedMime=normalizeMime(await sniffMimeFromBase64(b64));if(sniffedMime&&!isImageMime(sniffedMime)){log?.warn(`attachment ${label}: detected non-image (${sniffedMime}), dropping`);continue}if(!sniffedMime&&!isImageMime(providedMime)){log?.warn(`attachment ${label}: unable to detect image mime type, dropping`);continue}sniffedMime&&providedMime&&sniffedMime!==providedMime&&log?.warn(`attachment ${label}: mime mismatch (${providedMime} -> ${sniffedMime}), using sniffed`),images.push({type:`image`,data:b64,mimeType:sniffedMime??providedMime??mime})}return{message,images}}function normalizeRpcAttachmentsToChatAttachments(attachments){return attachments?.map(a=>({type:typeof a?.type==`string`?a.type:void 0,mimeType:typeof a?.mimeType==`string`?a.mimeType:void 0,fileName:typeof a?.fileName==`string`?a.fileName:void 0,content:typeof a?.content==`string`?a.content:ArrayBuffer.isView(a?.content)?Buffer.from(a.content.buffer,a.content.byteOffset,a.content.byteLength).toString(`base64`):a?.content instanceof ArrayBuffer?Buffer.from(a.content).toString(`base64`):void 0})).filter(a=>a.content)??[]}const withLock=createAsyncLock();let cachedJwt=null;function resolveApnsRegistrationPath(baseDir){let root=baseDir??resolveStateDir();return path.join(root,`push/apns-registrations.json`)}function normalizeNodeId(value){return value.trim()}function normalizeApnsToken(value){return value.trim().replace(/[<>\s]/g,``).toLowerCase()}function normalizeTopic(value){return value.trim()}function isLikelyApnsToken(value){return/^[0-9a-f]{32,}$/i.test(value)}function parseReason(body){let trimmed=body.trim();if(trimmed)try{let parsed=JSON.parse(trimmed);return typeof parsed.reason==`string`&&parsed.reason.trim().length>0?parsed.reason.trim():trimmed.slice(0,200)}catch{return trimmed.slice(0,200)}}function toBase64UrlBytes(value){return Buffer.from(value).toString(`base64`).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/g,``)}function toBase64UrlJson(value){return toBase64UrlBytes(Buffer.from(JSON.stringify(value)))}function getJwtCacheKey(auth){let keyHash=createHash(`sha256`).update(auth.privateKey).digest(`hex`);return`${auth.teamId}:${auth.keyId}:${keyHash}`}function getApnsBearerToken(auth,nowMs=Date.now()){let cacheKey=getJwtCacheKey(auth);if(cachedJwt&&cachedJwt.cacheKey===cacheKey&&nowMs<cachedJwt.expiresAtMs)return cachedJwt.token;let iat=Math.floor(nowMs/1e3),signingInput=`${toBase64UrlJson({alg:`ES256`,kid:auth.keyId,typ:`JWT`})}.${toBase64UrlJson({iss:auth.teamId,iat})}`,token=`${signingInput}.${toBase64UrlBytes(sign(`sha256`,Buffer.from(signingInput,`utf8`),{key:createPrivateKey(auth.privateKey),dsaEncoding:`ieee-p1363`}))}`;return cachedJwt={cacheKey,token,expiresAtMs:nowMs+3e6},token}function normalizePrivateKey(value){return value.trim().replace(/\\n/g,`
1
+ import{g as resolveStateDir}from"./paths-BHg-VHB4.js";import{k as isVerbose}from"./utils-BP60e80M.js";import{s as shouldLogSubsystemToConsole,t as createSubsystemLogger}from"./subsystem-C4b1Von0.js";import{C as parseAgentSessionKey}from"./session-key-D--2AEus.js";import{En as writeJsonAtomic,Tn as readJsonFile,qn as estimateBase64DecodedBytes,wn as createAsyncLock,x as sniffMimeFromBase64}from"./subagent-registry-BUKplZi1.js";import{n as redactSensitiveText,t as getDefaultRedactPatterns}from"./redact-bWj_-q3j.js";import path from"node:path";import chalk from"chalk";import{createHash,createPrivateKey,sign}from"node:crypto";import fs from"node:fs/promises";import http2 from"node:http2";let gatewayWsLogStyle=`auto`;function setGatewayWsLogStyle(style){gatewayWsLogStyle=style}function getGatewayWsLogStyle(){return gatewayWsLogStyle}const UUID_RE=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,WS_LOG_REDACT_OPTIONS={mode:`tools`,patterns:getDefaultRedactPatterns()},wsInflightCompact=new Map;let wsLastCompactConnId;const wsInflightOptimized=new Map,wsInflightSince=new Map,wsLog=createSubsystemLogger(`gateway/ws`),WS_META_SKIP_KEYS=new Set([`connId`,`id`,`method`,`ok`,`event`]);function collectWsRestMeta(meta){let restMeta=[];if(!meta)return restMeta;for(let[key,value]of Object.entries(meta))value!==void 0&&(WS_META_SKIP_KEYS.has(key)||restMeta.push(`${chalk.dim(key)}=${formatForLog(value)}`));return restMeta}function buildWsHeadline(params){if((params.kind===`req`||params.kind===`res`)&&params.method)return chalk.bold(params.method);if(params.kind===`event`&&params.event)return chalk.bold(params.event)}function buildWsStatusToken(kind,ok){if(!(kind!==`res`||ok===void 0))return ok?chalk.greenBright(`✓`):chalk.redBright(`✗`)}function logWsInfoLine(params){let tokens=[params.prefix,params.statusToken,params.headline,params.durationToken,...params.restMeta,...params.trailing].filter(t=>!!t);wsLog.info(tokens.join(` `))}function shouldLogWs(){return shouldLogSubsystemToConsole(`gateway/ws`)}function shortId(value){let s=value.trim();return UUID_RE.test(s)?`${s.slice(0,8)}…${s.slice(-4)}`:s.length<=24?s:`${s.slice(0,12)}…${s.slice(-4)}`}function formatForLog(value){try{if(value instanceof Error){let parts=[];value.name&&parts.push(value.name),value.message&&parts.push(value.message);let code=`code`in value&&(typeof value.code==`string`||typeof value.code==`number`)?String(value.code):``;code&&parts.push(`code=${code}`);let combined=parts.filter(Boolean).join(`: `).trim();if(combined)return combined.length>240?`${combined.slice(0,240)}...`:combined}if(value&&typeof value==`object`){let rec=value;if(typeof rec.message==`string`&&rec.message.trim()){let name=typeof rec.name==`string`?rec.name.trim():``,code=typeof rec.code==`string`||typeof rec.code==`number`?String(rec.code):``,parts=[name,rec.message.trim()].filter(Boolean);code&&parts.push(`code=${code}`);let combined=parts.join(`: `).trim();return combined.length>240?`${combined.slice(0,240)}...`:combined}}let str=typeof value==`string`||typeof value==`number`?String(value):JSON.stringify(value);if(!str)return``;let redacted=redactSensitiveText(str,WS_LOG_REDACT_OPTIONS);return redacted.length>240?`${redacted.slice(0,240)}...`:redacted}catch{return String(value)}}function compactPreview(input,maxLen=160){let oneLine=input.replace(/\s+/g,` `).trim();return oneLine.length<=maxLen?oneLine:`${oneLine.slice(0,Math.max(0,maxLen-1))}…`}function summarizeAgentEventForWsLog(payload){if(!payload||typeof payload!=`object`)return{};let rec=payload,runId=typeof rec.runId==`string`?rec.runId:void 0,stream=typeof rec.stream==`string`?rec.stream:void 0,seq=typeof rec.seq==`number`?rec.seq:void 0,sessionKey=typeof rec.sessionKey==`string`?rec.sessionKey:void 0,data=rec.data&&typeof rec.data==`object`?rec.data:void 0,extra={};if(runId&&(extra.run=shortId(runId)),sessionKey){let parsed=parseAgentSessionKey(sessionKey);parsed?(extra.agent=parsed.agentId,extra.session=parsed.rest):extra.session=sessionKey}if(stream&&(extra.stream=stream),seq!==void 0&&(extra.aseq=seq),!data)return extra;if(stream===`assistant`){let text=typeof data.text==`string`?data.text:void 0;text?.trim()&&(extra.text=compactPreview(text));let mediaUrls=Array.isArray(data.mediaUrls)?data.mediaUrls:void 0;return mediaUrls&&mediaUrls.length>0&&(extra.media=mediaUrls.length),extra}if(stream===`tool`){let phase=typeof data.phase==`string`?data.phase:void 0,name=typeof data.name==`string`?data.name:void 0;(phase||name)&&(extra.tool=`${phase??`?`}:${name??`?`}`);let toolCallId=typeof data.toolCallId==`string`?data.toolCallId:void 0;toolCallId&&(extra.call=shortId(toolCallId));let meta=typeof data.meta==`string`?data.meta:void 0;return meta?.trim()&&(extra.meta=meta),typeof data.isError==`boolean`&&(extra.err=data.isError),extra}if(stream===`lifecycle`){let phase=typeof data.phase==`string`?data.phase:void 0;phase&&(extra.phase=phase),typeof data.aborted==`boolean`&&(extra.aborted=data.aborted);let error=typeof data.error==`string`?data.error:void 0;return error?.trim()&&(extra.error=compactPreview(error,120)),extra}let reason=typeof data.reason==`string`?data.reason:void 0;return reason?.trim()&&(extra.reason=reason),extra}function logWs(direction,kind,meta){if(!shouldLogSubsystemToConsole(`gateway/ws`))return;let style=getGatewayWsLogStyle();if(!isVerbose()){logWsOptimized(direction,kind,meta);return}if(style===`compact`||style===`auto`){logWsCompact(direction,kind,meta);return}let now=Date.now(),connId=typeof meta?.connId==`string`?meta.connId:void 0,id=typeof meta?.id==`string`?meta.id:void 0,method=typeof meta?.method==`string`?meta.method:void 0,ok=typeof meta?.ok==`boolean`?meta.ok:void 0,event=typeof meta?.event==`string`?meta.event:void 0,inflightKey=connId&&id?`${connId}:${id}`:void 0;direction===`in`&&kind===`req`&&inflightKey&&wsInflightSince.set(inflightKey,now);let durationMs=direction===`out`&&kind===`res`&&inflightKey?(()=>{let startedAt=wsInflightSince.get(inflightKey);if(startedAt!==void 0)return wsInflightSince.delete(inflightKey),now-startedAt})():void 0,dirArrow=direction===`in`?`←`:`→`,prefix=`${(direction===`in`?chalk.greenBright:chalk.cyanBright)(dirArrow)} ${chalk.bold(kind)}`,headline=buildWsHeadline({kind,method,event}),statusToken=buildWsStatusToken(kind,ok),durationToken=typeof durationMs==`number`?chalk.dim(`${durationMs}ms`):void 0,restMeta=collectWsRestMeta(meta),trailing=[];connId&&trailing.push(`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId))}`),id&&trailing.push(`${chalk.dim(`id`)}=${chalk.gray(shortId(id))}`),logWsInfoLine({prefix,statusToken,headline,durationToken,restMeta,trailing})}function logWsOptimized(direction,kind,meta){let connId=typeof meta?.connId==`string`?meta.connId:void 0,id=typeof meta?.id==`string`?meta.id:void 0,ok=typeof meta?.ok==`boolean`?meta.ok:void 0,method=typeof meta?.method==`string`?meta.method:void 0,inflightKey=connId&&id?`${connId}:${id}`:void 0;if(direction===`in`&&kind===`req`&&inflightKey){wsInflightOptimized.set(inflightKey,Date.now()),wsInflightOptimized.size>2e3&&wsInflightOptimized.clear();return}if(kind===`parse-error`){let errorMsg=typeof meta?.error==`string`?formatForLog(meta.error):void 0;wsLog.warn([`${chalk.redBright(`✗`)} ${chalk.bold(`parse-error`)}`,errorMsg?`${chalk.dim(`error`)}=${errorMsg}`:void 0,`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId??`?`))}`].filter(t=>!!t).join(` `));return}if(direction!==`out`||kind!==`res`){if(kind===`event`&&direction===`out`&&(typeof meta?.event==`string`?meta.event:void 0)===`agent`){let stream=typeof meta?.stream==`string`?meta.stream:void 0,tool=typeof meta?.tool==`string`?meta.tool:void 0,phase=typeof meta?.phase==`string`?meta.phase:void 0,run=typeof meta?.run==`string`?meta.run:void 0,agent=typeof meta?.agent==`string`?meta.agent:void 0,tokens=[`${chalk.cyanBright(`→`)} ${chalk.bold(`agent`)}`,stream?`${chalk.dim(`stream`)}=${stream}`:void 0,tool?`${chalk.dim(`tool`)}=${tool}`:void 0,phase?`${chalk.dim(`phase`)}=${phase}`:void 0,agent?`${chalk.dim(`agent`)}=${agent}`:void 0,run?`${chalk.dim(`run`)}=${chalk.gray(run)}`:void 0].filter(t=>!!t);wsLog.info(tokens.join(` `))}return}let startedAt=inflightKey?wsInflightOptimized.get(inflightKey):void 0;inflightKey&&wsInflightOptimized.delete(inflightKey);let durationMs=typeof startedAt==`number`?Date.now()-startedAt:void 0;if(!(ok===!1||typeof durationMs==`number`&&durationMs>=50))return;let statusToken=buildWsStatusToken(`res`,ok),durationToken=typeof durationMs==`number`?chalk.dim(`${durationMs}ms`):void 0,restMeta=collectWsRestMeta(meta);logWsInfoLine({prefix:`${chalk.yellowBright(`⇄`)} ${chalk.bold(`res`)}`,statusToken,headline:method?chalk.bold(method):void 0,durationToken,restMeta,trailing:[connId?`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId))}`:``,id?`${chalk.dim(`id`)}=${chalk.gray(shortId(id))}`:``].filter(Boolean)})}function logWsCompact(direction,kind,meta){let now=Date.now(),connId=typeof meta?.connId==`string`?meta.connId:void 0,id=typeof meta?.id==`string`?meta.id:void 0,method=typeof meta?.method==`string`?meta.method:void 0,ok=typeof meta?.ok==`boolean`?meta.ok:void 0,inflightKey=connId&&id?`${connId}:${id}`:void 0;if(kind===`req`&&direction===`in`&&inflightKey){wsInflightCompact.set(inflightKey,{ts:now,method,meta});return}let compactArrow=kind===`req`||kind===`res`?`⇄`:direction===`in`?`←`:`→`,prefix=`${(kind===`req`||kind===`res`?chalk.yellowBright:direction===`in`?chalk.greenBright:chalk.cyanBright)(compactArrow)} ${chalk.bold(kind)}`,statusToken=buildWsStatusToken(kind,ok),startedAt=kind===`res`&&direction===`out`&&inflightKey?wsInflightCompact.get(inflightKey)?.ts:void 0;kind===`res`&&direction===`out`&&inflightKey&&wsInflightCompact.delete(inflightKey);let durationToken=typeof startedAt==`number`?chalk.dim(`${now-startedAt}ms`):void 0,headline=buildWsHeadline({kind,method,event:typeof meta?.event==`string`?meta.event:void 0}),restMeta=collectWsRestMeta(meta),trailing=[];connId&&connId!==wsLastCompactConnId&&(trailing.push(`${chalk.dim(`conn`)}=${chalk.gray(shortId(connId))}`),wsLastCompactConnId=connId),id&&trailing.push(`${chalk.dim(`id`)}=${chalk.gray(shortId(id))}`),logWsInfoLine({prefix,statusToken,headline,durationToken,restMeta,trailing})}function normalizeMime(mime){if(mime)return mime.split(`;`)[0]?.trim().toLowerCase()||void 0}function isImageMime(mime){return typeof mime==`string`&&mime.startsWith(`image/`)}function isValidBase64(value){return value.length>0&&value.length%4==0&&/^[A-Za-z0-9+/]+={0,2}$/.test(value)}function normalizeAttachment(att,idx,opts){let mime=att.mimeType??``,content=att.content,label=att.fileName||att.type||`attachment-${idx+1}`;if(typeof content!=`string`)throw Error(`attachment ${label}: content must be base64 string`);if(opts.requireImageMime&&!mime.startsWith(`image/`))throw Error(`attachment ${label}: only image/* supported`);let base64=content.trim();if(opts.stripDataUrlPrefix){let dataUrlMatch=/^data:[^;]+;base64,(.*)$/.exec(base64);dataUrlMatch&&(base64=dataUrlMatch[1])}return{label,mime,base64}}function validateAttachmentBase64OrThrow(normalized,opts){if(!isValidBase64(normalized.base64))throw Error(`attachment ${normalized.label}: invalid base64 content`);let sizeBytes=estimateBase64DecodedBytes(normalized.base64);if(sizeBytes<=0||sizeBytes>opts.maxBytes)throw Error(`attachment ${normalized.label}: exceeds size limit (${sizeBytes} > ${opts.maxBytes} bytes)`);return sizeBytes}async function parseMessageWithAttachments(message,attachments,opts){let maxBytes=opts?.maxBytes??5e6,log=opts?.log;if(!attachments||attachments.length===0)return{message,images:[]};let images=[];for(let[idx,att]of attachments.entries()){if(!att)continue;let normalized=normalizeAttachment(att,idx,{stripDataUrlPrefix:!0,requireImageMime:!1});validateAttachmentBase64OrThrow(normalized,{maxBytes});let{base64:b64,label,mime}=normalized,providedMime=normalizeMime(mime),sniffedMime=normalizeMime(await sniffMimeFromBase64(b64));if(sniffedMime&&!isImageMime(sniffedMime)){log?.warn(`attachment ${label}: detected non-image (${sniffedMime}), dropping`);continue}if(!sniffedMime&&!isImageMime(providedMime)){log?.warn(`attachment ${label}: unable to detect image mime type, dropping`);continue}sniffedMime&&providedMime&&sniffedMime!==providedMime&&log?.warn(`attachment ${label}: mime mismatch (${providedMime} -> ${sniffedMime}), using sniffed`),images.push({type:`image`,data:b64,mimeType:sniffedMime??providedMime??mime})}return{message,images}}function normalizeRpcAttachmentsToChatAttachments(attachments){return attachments?.map(a=>({type:typeof a?.type==`string`?a.type:void 0,mimeType:typeof a?.mimeType==`string`?a.mimeType:void 0,fileName:typeof a?.fileName==`string`?a.fileName:void 0,content:typeof a?.content==`string`?a.content:ArrayBuffer.isView(a?.content)?Buffer.from(a.content.buffer,a.content.byteOffset,a.content.byteLength).toString(`base64`):a?.content instanceof ArrayBuffer?Buffer.from(a.content).toString(`base64`):void 0})).filter(a=>a.content)??[]}const withLock=createAsyncLock();let cachedJwt=null;function resolveApnsRegistrationPath(baseDir){let root=baseDir??resolveStateDir();return path.join(root,`push/apns-registrations.json`)}function normalizeNodeId(value){return value.trim()}function normalizeApnsToken(value){return value.trim().replace(/[<>\s]/g,``).toLowerCase()}function normalizeTopic(value){return value.trim()}function isLikelyApnsToken(value){return/^[0-9a-f]{32,}$/i.test(value)}function parseReason(body){let trimmed=body.trim();if(trimmed)try{let parsed=JSON.parse(trimmed);return typeof parsed.reason==`string`&&parsed.reason.trim().length>0?parsed.reason.trim():trimmed.slice(0,200)}catch{return trimmed.slice(0,200)}}function toBase64UrlBytes(value){return Buffer.from(value).toString(`base64`).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/g,``)}function toBase64UrlJson(value){return toBase64UrlBytes(Buffer.from(JSON.stringify(value)))}function getJwtCacheKey(auth){let keyHash=createHash(`sha256`).update(auth.privateKey).digest(`hex`);return`${auth.teamId}:${auth.keyId}:${keyHash}`}function getApnsBearerToken(auth,nowMs=Date.now()){let cacheKey=getJwtCacheKey(auth);if(cachedJwt&&cachedJwt.cacheKey===cacheKey&&nowMs<cachedJwt.expiresAtMs)return cachedJwt.token;let iat=Math.floor(nowMs/1e3),signingInput=`${toBase64UrlJson({alg:`ES256`,kid:auth.keyId,typ:`JWT`})}.${toBase64UrlJson({iss:auth.teamId,iat})}`,token=`${signingInput}.${toBase64UrlBytes(sign(`sha256`,Buffer.from(signingInput,`utf8`),{key:createPrivateKey(auth.privateKey),dsaEncoding:`ieee-p1363`}))}`;return cachedJwt={cacheKey,token,expiresAtMs:nowMs+3e6},token}function normalizePrivateKey(value){return value.trim().replace(/\\n/g,`
2
2
  `)}function normalizeNonEmptyString(value){let trimmed=value?.trim()??``;return trimmed.length>0?trimmed:null}async function loadRegistrationsState(baseDir){let existing=await readJsonFile(resolveApnsRegistrationPath(baseDir));return!existing||typeof existing!=`object`?{registrationsByNodeId:{}}:{registrationsByNodeId:existing.registrationsByNodeId&&typeof existing.registrationsByNodeId==`object`&&!Array.isArray(existing.registrationsByNodeId)?existing.registrationsByNodeId:{}}}async function persistRegistrationsState(state,baseDir){await writeJsonAtomic(resolveApnsRegistrationPath(baseDir),state)}function normalizeApnsEnvironment(value){if(typeof value!=`string`)return null;let normalized=value.trim().toLowerCase();return normalized===`sandbox`||normalized===`production`?normalized:null}async function registerApnsToken(params){let nodeId=normalizeNodeId(params.nodeId),token=normalizeApnsToken(params.token),topic=normalizeTopic(params.topic),environment=normalizeApnsEnvironment(params.environment)??`sandbox`;if(!nodeId)throw Error(`nodeId required`);if(!topic)throw Error(`topic required`);if(!isLikelyApnsToken(token))throw Error(`invalid APNs token`);return await withLock(async()=>{let state=await loadRegistrationsState(params.baseDir),next={nodeId,token,topic,environment,updatedAtMs:Date.now()};return state.registrationsByNodeId[nodeId]=next,await persistRegistrationsState(state,params.baseDir),next})}async function loadApnsRegistration(nodeId,baseDir){let normalizedNodeId=normalizeNodeId(nodeId);return normalizedNodeId?(await loadRegistrationsState(baseDir)).registrationsByNodeId[normalizedNodeId]??null:null}async function resolveApnsAuthConfigFromEnv(env=process.env){let teamId=normalizeNonEmptyString(env.BUILDERFORCE_AGENTS_APNS_TEAM_ID),keyId=normalizeNonEmptyString(env.BUILDERFORCE_AGENTS_APNS_KEY_ID);if(!teamId||!keyId)return{ok:!1,error:`APNs auth missing: set BUILDERFORCE_AGENTS_APNS_TEAM_ID and BUILDERFORCE_AGENTS_APNS_KEY_ID`};let inlineKeyRaw=normalizeNonEmptyString(env.BUILDERFORCE_AGENTS_APNS_PRIVATE_KEY_P8)??normalizeNonEmptyString(env.BUILDERFORCE_AGENTS_APNS_PRIVATE_KEY);if(inlineKeyRaw)return{ok:!0,value:{teamId,keyId,privateKey:normalizePrivateKey(inlineKeyRaw)}};let keyPath=normalizeNonEmptyString(env.BUILDERFORCE_AGENTS_APNS_PRIVATE_KEY_PATH);if(!keyPath)return{ok:!1,error:`APNs private key missing: set BUILDERFORCE_AGENTS_APNS_PRIVATE_KEY_P8 or BUILDERFORCE_AGENTS_APNS_PRIVATE_KEY_PATH`};try{return{ok:!0,value:{teamId,keyId,privateKey:normalizePrivateKey(await fs.readFile(keyPath,`utf8`))}}}catch(err){return{ok:!1,error:`failed reading BUILDERFORCE_AGENTS_APNS_PRIVATE_KEY_PATH (${keyPath}): ${err instanceof Error?err.message:String(err)}`}}}async function sendApnsRequest(params){let authority=params.environment===`production`?`https://api.push.apple.com`:`https://api.sandbox.push.apple.com`,body=JSON.stringify(params.payload),requestPath=`/3/device/${params.token}`;return await new Promise((resolve,reject)=>{let client=http2.connect(authority),settled=!1,fail=err=>{settled||(settled=!0,client.destroy(),reject(err))},finish=result=>{settled||(settled=!0,client.close(),resolve(result))};client.once(`error`,err=>fail(err));let req=client.request({":method":`POST`,":path":requestPath,authorization:`bearer ${params.bearerToken}`,"apns-topic":params.topic,"apns-push-type":params.pushType,"apns-priority":params.priority,"apns-expiration":`0`,"content-type":`application/json`,"content-length":Buffer.byteLength(body).toString()}),statusCode=0,apnsId,responseBody=``;req.setEncoding(`utf8`),req.setTimeout(params.timeoutMs,()=>{req.close(http2.constants.NGHTTP2_CANCEL),fail(Error(`APNs request timed out after ${params.timeoutMs}ms`))}),req.on(`response`,headers=>{let statusHeader=headers[`:status`];statusCode=typeof statusHeader==`number`?statusHeader:Number(statusHeader??0);let idHeader=headers[`apns-id`];typeof idHeader==`string`&&idHeader.trim().length>0&&(apnsId=idHeader.trim())}),req.on(`data`,chunk=>{typeof chunk==`string`&&(responseBody+=chunk)}),req.on(`end`,()=>{finish({status:statusCode,apnsId,body:responseBody})}),req.on(`error`,err=>fail(err)),req.end(body)})}function resolveApnsTimeoutMs(timeoutMs){return typeof timeoutMs==`number`&&Number.isFinite(timeoutMs)?Math.max(1e3,Math.trunc(timeoutMs)):1e4}function resolveApnsSendContext(params){let token=normalizeApnsToken(params.registration.token);if(!isLikelyApnsToken(token))throw Error(`invalid APNs token`);let topic=normalizeTopic(params.registration.topic);if(!topic)throw Error(`topic required`);return{token,topic,environment:params.registration.environment,bearerToken:getApnsBearerToken(params.auth)}}function toApnsPushResult(params){return{ok:params.response.status===200,status:params.response.status,apnsId:params.response.apnsId,reason:parseReason(params.response.body),tokenSuffix:params.token.slice(-8),topic:params.topic,environment:params.environment}}async function sendApnsAlert(params){let{token,topic,environment,bearerToken}=resolveApnsSendContext({auth:params.auth,registration:params.registration}),payload={aps:{alert:{title:params.title,body:params.body},sound:`default`},builderforce:{kind:`push.test`,nodeId:params.nodeId,ts:Date.now()}};return toApnsPushResult({response:await(params.requestSender??sendApnsRequest)({token,topic,environment,bearerToken,payload,timeoutMs:resolveApnsTimeoutMs(params.timeoutMs),pushType:`alert`,priority:`10`}),token,topic,environment})}async function sendApnsBackgroundWake(params){let{token,topic,environment,bearerToken}=resolveApnsSendContext({auth:params.auth,registration:params.registration}),payload={aps:{"content-available":1},builderforce:{kind:`node.wake`,reason:params.wakeReason??`node.invoke`,nodeId:params.nodeId,ts:Date.now()}};return toApnsPushResult({response:await(params.requestSender??sendApnsRequest)({token,topic,environment,bearerToken,payload,timeoutMs:resolveApnsTimeoutMs(params.timeoutMs),pushType:`background`,priority:`5`}),token,topic,environment})}export{sendApnsAlert as a,parseMessageWithAttachments as c,shouldLogWs as d,summarizeAgentEventForWsLog as f,resolveApnsAuthConfigFromEnv as i,formatForLog as l,normalizeApnsEnvironment as n,sendApnsBackgroundWake as o,setGatewayWsLogStyle as p,registerApnsToken as r,normalizeRpcAttachmentsToChatAttachments as s,loadApnsRegistration as t,logWs as u};