@seanhogg/builderforce-agents 2026.10.9 → 2026.10.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{acp-cli-DcKpPsJa.js → acp-cli-C23mmrQt.js} +1 -1
- package/dist/{acp-cli-BxH-eUDl.js → acp-cli-D6F-D5JB.js} +1 -1
- package/dist/{agent-cXF-aL0g.js → agent-B-2r1Lr_.js} +1 -1
- package/dist/{agent-wJmvciTM.js → agent-BI9qSnSp.js} +1 -1
- package/dist/{agentbot-cli-Cub3Abbt.js → agentbot-cli-Cyrhr5jX.js} +1 -1
- package/dist/{agentbot-cli-CTRvEfBp.js → agentbot-cli-sC55m-XS.js} +1 -1
- package/dist/{agents-Cr7WO73I.js → agents-CMThT_Bj.js} +1 -1
- package/dist/agents-Chz9nfm2.js +1 -0
- package/dist/{api-key-rotation-CHBjUwUJ.js → api-key-rotation-CyCi-UqR.js} +1 -1
- package/dist/{audio-preflight-CWFuqbao.js → audio-preflight-B411b2-y.js} +1 -1
- package/dist/{audio-preflight-F2e3Y4CW.js → audio-preflight-Cs4eUjQk.js} +1 -1
- package/dist/{audit-DGnEhZYe.js → audit-B-USV03V.js} +1 -1
- package/dist/{audit-DBjjjW93.js → audit-SKNPS-K2.js} +1 -1
- package/dist/auth-choice-CChsMy-F.js +1 -0
- package/dist/{auth-choice-9gZuOvPS.js → auth-choice-CCib_yVL.js} +1 -1
- package/dist/auth-choice-DSnpkrMc.js +1 -0
- package/dist/{auth-choice-BoZFVmEa.js → auth-choice-DzBqqq7i.js} +1 -1
- package/dist/auth-choice.apply-6f3Jb_lS.js +1 -0
- package/dist/{auth-choice.apply-CcatXiNo.js → auth-choice.apply-BgOXoS8X.js} +1 -1
- package/dist/{auth-choice.apply-BHLQeym9.js → auth-choice.apply-DBuvopiF.js} +1 -1
- package/dist/auth-choice.apply-DeXnLwVS.js +1 -0
- package/dist/auth-choice.apply.transformers-CZDuBaOr.js +1 -0
- package/dist/{auth-choice.apply.transformers-CIn3fs7K.js → auth-choice.apply.transformers-Df9l_jRz.js} +2 -2
- package/dist/{auth-choice.apply.transformers-1plI0MUg.js → auth-choice.apply.transformers-DmdxpHGz.js} +2 -2
- package/dist/{auth-choice.apply.transformers-D5OrjEHo.js → auth-choice.apply.transformers-dn7l6XyJ.js} +1 -1
- package/dist/{auth-json-D1ite-pW.js → auth-json-BB-VBn5E.js} +1 -1
- package/dist/{auth-json-CN3MWw57.js → auth-json-BVyos95N.js} +1 -1
- package/dist/{auth-json-HGu227VM.js → auth-json-CoOe4tEg.js} +1 -1
- package/dist/{auth-json-DZ7E50Y1.js → auth-json-wrKixZxh.js} +1 -1
- package/dist/{auth-profiles-C1VbcUOm.js → auth-profiles-pt7Tr4HA.js} +1 -1
- package/dist/{auth-token-CyVfNEQb.js → auth-token-BE67qxLw.js} +1 -1
- package/dist/{auth-token-CoQ5ePPl.js → auth-token-BPHeoBAW.js} +1 -1
- package/dist/{banner-DY-L7_eI.js → banner-ErBINvbk.js} +1 -1
- package/dist/{browser-cli-D2O94twn.js → browser-cli-BZc64-Xx.js} +1 -1
- package/dist/{browser-cli-CoRx_4iM.js → browser-cli-CoxVKdon.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/{builderforce-BmrsVdFw.js → builderforce-B9187Tm9.js} +4 -4
- package/dist/{builderforce-Bwyw0GJ6.js → builderforce-BLqHwgeu.js} +4 -4
- package/dist/builderforce-api-DKgXl8BH.js +1 -0
- package/dist/builderforce-api-DcPAGsla.js +1 -0
- package/dist/builderforce-onboarding-CaPJZSvw.js +24 -0
- package/dist/builderforce-onboarding-RXFb0gct.js +24 -0
- package/dist/{builderforcellm-syscheck-CprBhARf.js → builderforcellm-syscheck-9ksvqHYX.js} +1 -1
- package/dist/{builderforcellm-syscheck-DrFJ638L.js → builderforcellm-syscheck-F5JMAr3p.js} +1 -1
- package/dist/{call-DxPWzV-k.js → call-BnAs_SER.js} +1 -1
- package/dist/{call-DFjBq0H2.js → call-D1Opj5ev.js} +1 -1
- package/dist/{call-DmAU4cRX.js → call-Du2LiaX6.js} +1 -1
- package/dist/{call-BbRf8gFM.js → call-T8ciwMTA.js} +1 -1
- package/dist/{channel-options-d4EwVQD0.js → channel-options-B7sRMp2v.js} +1 -1
- package/dist/{channel-options-CDixz6dT.js → channel-options-rhDBCtlp.js} +1 -1
- package/dist/{channel-web-DJa8JC9W.js → channel-web-CcCqUQrJ.js} +1 -1
- package/dist/{channels-cli-BgKy0MbE.js → channels-cli-BjnLW14T.js} +1 -1
- package/dist/{channels-cli-nNW0ezPM.js → channels-cli-DVWUBsmc.js} +1 -1
- package/dist/{chrome-BnEbJV3D.js → chrome-CFmcixaE.js} +1 -1
- package/dist/{chrome-a3X9_-nf.js → chrome-DXt86tmV.js} +1 -1
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-DkWt7p2x.js → cli-BUqtALJK.js} +1 -1
- package/dist/{cli-C5MbcECQ.js → cli-K4reS6IS.js} +1 -1
- package/dist/{coding-tools.policy-NEPm7Mz1.js → coding-tools.policy-D9Ba8eDh.js} +1 -1
- package/dist/{coding-tools.policy-6qh9acJy.js → coding-tools.policy-ZhOdlcEI.js} +1 -1
- package/dist/{command-registry-COUcUWby.js → command-registry-B7uAoROP.js} +1 -1
- package/dist/{command-registry-4_K-lfW5.js → command-registry-CW16Mk2Y.js} +1 -1
- package/dist/{completion-cli-DlvHqL86.js → completion-cli-ZvXrCQqk.js} +1 -1
- package/dist/{completion-cli-B2qcVd6q.js → completion-cli-gyvx5ZXu.js} +1 -1
- package/dist/{completion-cli-DpFvU4Qn.js → completion-cli-n8UsdT91.js} +1 -1
- package/dist/{completion-cli-SdcQ-kQj.js → completion-cli-sKReGv3d.js} +1 -1
- package/dist/{config-_1Ca6jGb.js → config-BgV_FYSq.js} +1 -1
- package/dist/{config-toczWD3q.js → config-BpChMIJ6.js} +1 -1
- package/dist/{config-BTWlKwtB.js → config-D01EgOky.js} +1 -1
- package/dist/{config-27_FNba3.js → config-Dsnbi-a3.js} +1 -1
- package/dist/{config-cli-DeiQz5sY.js → config-cli-Bpo74mE5.js} +1 -1
- package/dist/{config-cli-CfczShaZ.js → config-cli-CF31O_5s.js} +1 -1
- package/dist/{config-guard-CD-Wq8kk.js → config-guard-BRUOk5YL.js} +1 -1
- package/dist/{config-guard-ClVl2FvD.js → config-guard-BUpQiSTW.js} +1 -1
- package/dist/{config-guard-B4in8l8I.js → config-guard-USCN-dq0.js} +1 -1
- package/dist/{config-validation-jpeXzoU3.js → config-validation-BGpSeNbh.js} +1 -1
- package/dist/{config-validation-C6u-z9bJ.js → config-validation-CdBJ-tZq.js} +1 -1
- package/dist/{configure-3W9C5LiT.js → configure-CWr61Ph2.js} +1 -1
- package/dist/configure-DhazB2qh.js +1 -0
- package/dist/{configure-BtXQW7ue.js → configure-DlcO1tWx.js} +1 -1
- package/dist/configure-MXheujvX.js +1 -0
- package/dist/{control-service-CJuuqNOE.js → control-service-2PkCt256.js} +1 -1
- package/dist/{control-service-qKfWP7VD.js → control-service-CcsbseZS.js} +1 -1
- package/dist/{control-service-izGyCWQs.js → control-service-qK1oboMo.js} +1 -1
- package/dist/{control-service-BbsswoMy.js → control-service-y3GYvIBg.js} +1 -1
- package/dist/{cron-cli-BrOM4s6N.js → cron-cli-BYu_lA8i.js} +1 -1
- package/dist/{cron-cli-CwtTX6pg.js → cron-cli-D_Og20iB.js} +1 -1
- package/dist/{daemon-cli-DyVsMf8p.js → daemon-cli-BNzthScZ.js} +1 -1
- package/dist/{daemon-cli-DlwOVDbt.js → daemon-cli-Bh3p0hui.js} +1 -1
- package/dist/{daemon-cli-Br0wu9xQ.js → daemon-cli-DxxKiKVN.js} +1 -1
- package/dist/{daemon-cli-DmicpZED.js → daemon-cli-emNxLkIw.js} +1 -1
- package/dist/{daemon-runtime-CtOr1ncS.js → daemon-runtime-9XitJmIL.js} +1 -1
- package/dist/{daemon-runtime-B4UjqdyJ.js → daemon-runtime-Dx800VUt.js} +1 -1
- package/dist/{deliver-BpLm3ktn.js → deliver--6OBF3LL.js} +1 -1
- package/dist/{deliver-9o_SE4ZK.js → deliver-ADpnRGRf.js} +1 -1
- package/dist/{deliver-D2VAVelb.js → deliver-BM6-damm.js} +1 -1
- package/dist/{deliver-BuZu68tp.js → deliver-CsG0cHbZ.js} +1 -1
- package/dist/{deps-CkJiJ6wc.js → deps-Dg_9rfXK.js} +1 -1
- package/dist/{devices-cli-BfXeDnbx.js → devices-cli-B8DXzcRP.js} +1 -1
- package/dist/{devices-cli-B9G6YOsS.js → devices-cli-BZkdWSx-.js} +1 -1
- package/dist/{directory-cli-BRCaiGOn.js → directory-cli-B78pAVI_.js} +1 -1
- package/dist/{directory-cli-D5ciZ5fY.js → directory-cli-CSaRkkL8.js} +1 -1
- package/dist/{dm-policy-shared-CRZpjRv0.js → dm-policy-shared-B9lW-AsK.js} +1 -1
- package/dist/{dm-policy-shared-Dhw9_6mi.js → dm-policy-shared-DYZ_T-az.js} +1 -1
- package/dist/{dns-cli-CgZ7oMcT.js → dns-cli-CLPGOFA1.js} +1 -1
- package/dist/{dns-cli-C4f4Tyij.js → dns-cli-dr5dHzfI.js} +1 -1
- package/dist/{doctor-completion-BSotFS6p.js → doctor-completion-94zme499.js} +1 -1
- package/dist/{doctor-completion-DVxbs-74.js → doctor-completion-CbF34DIH.js} +1 -1
- package/dist/{embedded-helpers-CEsr3aQ0.js → embedded-helpers-C9jpiwlw.js} +1 -1
- package/dist/{embedded-helpers-DK8_apW0.js → embedded-helpers-DdU30lmt.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/{exec-approvals-cli-YuOu7mVg.js → exec-approvals-cli-CS_uabo7.js} +1 -1
- package/dist/{exec-approvals-cli-BPFi82B0.js → exec-approvals-cli-ktB7M7WE.js} +1 -1
- package/dist/{gateway-cli-D2Bg1Um6.js → gateway-cli-CKcoLVMA.js} +5 -5
- package/dist/{gateway-cli-DFEo8C0z.js → gateway-cli-CuXBDBWe.js} +5 -5
- package/dist/{gateway-rpc-BXR_lVIx.js → gateway-rpc-B02y0PnE.js} +1 -1
- package/dist/{gateway-rpc-ByUcnQ7W.js → gateway-rpc-ff1RVb0_.js} +1 -1
- package/dist/{gemini-auth-CkD5jCPh.js → gemini-auth-DDR12zst.js} +1 -1
- package/dist/health-D0DZmCmh.js +1 -0
- package/dist/{health-yS3NRKvY.js → health-FO8MG5Ur.js} +1 -1
- package/dist/{health-DVo8a9yg.js → health-zrsgFZmR.js} +1 -1
- package/dist/{hooks-cli-B0lVee-j.js → hooks-cli-5Y4hnSX9.js} +1 -1
- package/dist/{hooks-cli-DsVmrQAG.js → hooks-cli-DpHZzRo2.js} +1 -1
- package/dist/index.js +2 -2
- package/dist/{ink-session-BitZ1wcY.js → ink-session-Dt9Q4iH-.js} +2 -2
- package/dist/{ink-session-CyAqXDla.js → ink-session-N8wCBzwk.js} +2 -2
- package/dist/{installs-CWd54ARy.js → installs-B_t2YXgq.js} +1 -1
- package/dist/{installs-C9A8QFiF.js → installs-DFiF4lGy.js} +1 -1
- package/dist/{io-3R_ZyUxB.js → io-BLBq4T2o.js} +1 -1
- package/dist/{io-DSIGyPrT.js → io-CXN4uLS2.js} +1 -1
- package/dist/{io-6jLoKffb.js → io-Ckd4NlvH.js} +1 -1
- package/dist/{io-CohJffHG.js → io-D9hC2aG0.js} +1 -1
- package/dist/{lifecycle-core-BpMvDXy1.js → lifecycle-core-D9Dg5Qps.js} +1 -1
- package/dist/{lifecycle-core-Dwb4gHjZ.js → lifecycle-core-uxjxTzFv.js} +1 -1
- package/dist/login-B3sDAgHb.js +1 -0
- package/dist/{login-C_ZdMOvv.js → login-CwwuaXtb.js} +1 -1
- package/dist/{login-DtDUyFO3.js → login-D1bVUPlv.js} +1 -1
- package/dist/{login-CEnjUo5c.js → login-GLDax56V.js} +1 -1
- package/dist/{login-qr-B9lyIZVD.js → login-qr-CbiUcBLy.js} +1 -1
- package/dist/{login-qr-BCBsxwhT.js → login-qr-Cp0YqK4e.js} +1 -1
- package/dist/{logs-cli-CdM5W3HE.js → logs-cli-Cy11HfSG.js} +1 -1
- package/dist/{logs-cli-jh5Xn3TD.js → logs-cli-nD36c-Y1.js} +1 -1
- package/dist/{manager-CRba8roB.js → manager-BeohB4-8.js} +1 -1
- package/dist/{manager-B3IJ_IKf.js → manager-CTTXDBt3.js} +1 -1
- package/dist/{manager-TGVy_fAb.js → manager-CoQMlcrf.js} +1 -1
- package/dist/{manager-DwywI_5-.js → manager-DSz61dXv.js} +1 -1
- package/dist/{memory-cli-BlayFTAM.js → memory-cli-BpAiRntI.js} +1 -1
- package/dist/{memory-cli-DRz4wtHk.js → memory-cli-CbkWGjRn.js} +1 -1
- package/dist/{memory-cli-PdyTQ84w.js → memory-cli-CrBMLM2P.js} +1 -1
- package/dist/{memory-cli-ivAs7q7v.js → memory-cli-CveeVOWH.js} +1 -1
- package/dist/{model-catalog-CQOdhMUY.js → model-catalog-B29yeBYS.js} +1 -1
- package/dist/{model-catalog-CiiFJX77.js → model-catalog-BeBXvbFm.js} +1 -1
- package/dist/model-catalog-CMKHKuBL.js +1 -0
- package/dist/{model-catalog-C6UrZ0uG.js → model-catalog-DjNiebr7.js} +1 -1
- package/dist/{model-discovery-C9Xm95uL.js → model-discovery-D0i1JpiL.js} +1 -1
- package/dist/{model-picker-swoSwauV.js → model-picker-CGDNPRPc.js} +1 -1
- package/dist/model-picker-CGEF8yhc.js +1 -0
- package/dist/model-picker-DeUNOC78.js +1 -0
- package/dist/{model-picker-BUePD7Zg.js → model-picker-EIhpfOZa.js} +1 -1
- package/dist/{model-selection-9bRFKBI_.js → model-selection-DG9J_VTz.js} +1 -1
- package/dist/{models-BNivsd2o.js → models-BjIzVQYX.js} +2 -2
- package/dist/{models-DQeSIY6M.js → models-JoqOgEF5.js} +1 -1
- package/dist/{models-cli-KokGgWeP.js → models-cli-B2zbchgs.js} +1 -1
- package/dist/{models-cli-BcNxU4P_.js → models-cli-CkFdc8NN.js} +2 -2
- package/dist/{node-cli-DIMh3X2F.js → node-cli-CXnuxiBq.js} +1 -1
- package/dist/{node-cli-EmTU-Gh0.js → node-cli-oVyjVnb7.js} +1 -1
- package/dist/{nodes-cli-BX8TznFK.js → nodes-cli-BBVotxNt.js} +1 -1
- package/dist/{nodes-cli-DyHovdAc.js → nodes-cli-DVMBSUhK.js} +1 -1
- package/dist/{onboard-DfMVh1bM.js → onboard-BItclJp0.js} +1 -1
- package/dist/{onboard-BVmZ4jMw.js → onboard-CqvHIvKj.js} +1 -1
- package/dist/{onboard-auth.credentials-yagR-VMG.js → onboard-auth.credentials-DneFSdYg.js} +1 -1
- package/dist/{onboard-auth.credentials-BuT-etnE.js → onboard-auth.credentials-DpitLlzw.js} +1 -1
- package/dist/onboard-channels-B91m5S3w.js +1 -0
- package/dist/onboard-channels-BOoPtYbF.js +1 -0
- package/dist/{onboard-channels-B6QDFkkK.js → onboard-channels-Dn0u5C-C.js} +1 -1
- package/dist/{onboard-channels-C8FCFn29.js → onboard-channels-vhtccaIV.js} +1 -1
- package/dist/onboard-custom-BN0uzSq_.js +1 -0
- package/dist/{onboard-custom-D1nd8Hlu.js → onboard-custom-BYIza2e7.js} +1 -1
- package/dist/onboard-custom-CCFthqto.js +1 -0
- package/dist/{onboard-custom-C_BI0ZXn.js → onboard-custom-Ckf0xKXY.js} +1 -1
- package/dist/{onboard-helpers-CGlLpagb.js → onboard-helpers-B8I5AVyb.js} +1 -1
- package/dist/{onboard-helpers-CckrS8_K.js → onboard-helpers-Ce_c4Raj.js} +1 -1
- package/dist/{onboard-helpers-Cf5dNq7-.js → onboard-helpers-CiHzTaFX.js} +1 -1
- package/dist/{onboard-helpers-BvIZ4-R5.js → onboard-helpers-DC-nMl-V.js} +1 -1
- package/dist/{onboard-interactive-DYJttZ2w.js → onboard-interactive-Cl2K3EYn.js} +1 -1
- package/dist/{onboard-interactive-zgjmwJz-.js → onboard-interactive-JNux9zfA.js} +1 -1
- package/dist/{onboard-interactive-B3-KBZbZ.js → onboard-interactive-J_ObFzeW.js} +1 -1
- package/dist/{onboard-interactive-Dc_7URYb.js → onboard-interactive-OUNsvlh0.js} +1 -1
- package/dist/{onboard-remote-D5lR2lVm.js → onboard-remote-0-q7MG9t.js} +1 -1
- package/dist/{onboard-remote-BmSyHww1.js → onboard-remote-CgAAEZpq.js} +1 -1
- package/dist/{onboard-remote-CzzQMZ3X.js → onboard-remote-DKXHDdBD.js} +1 -1
- package/dist/{onboard-remote-DcuX8b2g.js → onboard-remote-cB8j9RG-.js} +1 -1
- package/dist/{onboard-skills-ILHIeg1R.js → onboard-skills-47upVdA2.js} +1 -1
- package/dist/{onboard-skills-BPlNN_-T.js → onboard-skills-9Um4TL2x.js} +1 -1
- package/dist/{onboard-skills-DIhjDMom.js → onboard-skills-DhCmvhJY.js} +1 -1
- package/dist/{onboard-skills-CI1OtWsE.js → onboard-skills-mI2kfvdT.js} +1 -1
- package/dist/{onboarding-D4-HDbmU.js → onboarding-BSENgR9C.js} +5 -5
- package/dist/{onboarding-CP9rrz8y.js → onboarding-CIaZLNc1.js} +5 -5
- package/dist/{onboarding.finalize-C2kZi7F0.js → onboarding.finalize-BwOpvoPE.js} +1 -1
- package/dist/{onboarding.finalize-BfWXPgX7.js → onboarding.finalize-yMK-g7Uy.js} +1 -1
- package/dist/{onboarding.gateway-config-Cd7_bXVs.js → onboarding.gateway-config-Kn1O-QFl.js} +1 -1
- package/dist/{onboarding.gateway-config-Bd8HJkso.js → onboarding.gateway-config-huOjFf8D.js} +1 -1
- package/dist/{openai-model-default-Cp3nf21W.js → openai-model-default-CH2-2Hvk.js} +1 -1
- package/dist/{openai-model-default-BMRrqTmH.js → openai-model-default-pfoEzWYJ.js} +1 -1
- package/dist/{outbound-BRInCJD9.js → outbound-BdeHcMAo.js} +1 -1
- package/dist/{outbound-CAtBpFoD.js → outbound-BylJYD7n.js} +1 -1
- package/dist/{outbound-OI-t5zZ0.js → outbound-CAirtWr1.js} +1 -1
- package/dist/{outbound-CnIvOJlU.js → outbound-VNcvF2MG.js} +1 -1
- package/dist/{outbound-send-deps-m6DqOma_.js → outbound-send-deps-B3Lg-uqF.js} +1 -1
- package/dist/{pairing-cli-CEr0yEsc.js → pairing-cli-5RtPvz2i.js} +1 -1
- package/dist/{pairing-cli-Dxfoni-F.js → pairing-cli-C_Mj6Dy4.js} +1 -1
- package/dist/{pairing-labels-3j_iRYOO.js → pairing-labels-BJPrScRl.js} +1 -1
- package/dist/{pairing-labels-BW5jQZlr.js → pairing-labels-oA-nKTaW.js} +1 -1
- package/dist/{pairing-store-QDb6lhIU.js → pairing-store-YRy7EBgI.js} +1 -1
- package/dist/{pairing-store-CbvMJhD3.js → pairing-store-ti3FEkmr.js} +1 -1
- package/dist/{plugin-auto-enable-BV9K9Vhr.js → plugin-auto-enable-Cupr4wbt.js} +1 -1
- package/dist/{plugin-auto-enable-DDry2fA6.js → plugin-auto-enable-D8gKiE3F.js} +1 -1
- package/dist/plugin-registry-BEfyc2f_.js +1 -0
- package/dist/{plugin-registry-C-_GA65s.js → plugin-registry-BoPaef5I.js} +1 -1
- package/dist/{plugin-registry-SAdxNUwm.js → plugin-registry-CxnuHO_n.js} +1 -1
- package/dist/plugin-registry-D0tIqo8L.js +1 -0
- package/dist/plugin-sdk/{accounts-Cy3WCbWg.js → accounts-BwreSNAR.js} +1 -1
- package/dist/plugin-sdk/{active-listener-DVWVNlT9.js → active-listener-DpQ7aGYd.js} +1 -1
- package/dist/plugin-sdk/agent-runtime/src/infra/workflow-telemetry.d.ts +12 -1
- package/dist/plugin-sdk/{agent-scope-DgKN27hJ.js → agent-scope-BQByW0cD.js} +1 -1
- package/dist/plugin-sdk/{api-key-rotation-ftXf7mBZ.js → api-key-rotation-7YdImWrh.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-CfTmmeS-.js → audio-preflight-EbkaATDO.js} +1 -1
- package/dist/plugin-sdk/{auth-json-BrNBg87n.js → auth-json-DK6qod1_.js} +1 -1
- package/dist/plugin-sdk/{bindings-CH-YLOLC.js → bindings-CDEzl4kl.js} +1 -1
- package/dist/plugin-sdk/{channel-web-B6rg0Rbf.js → channel-web-D2KuONp0.js} +1 -1
- package/dist/plugin-sdk/{chrome-CuXP-hes.js → chrome-SOXFIkUM.js} +1 -1
- package/dist/plugin-sdk/{chunk-C94IAOuf.js → chunk-cW0POl22.js} +1 -1
- package/dist/plugin-sdk/{command-format-B3XMq_73.js → command-format-CAX9XFjI.js} +1 -1
- package/dist/plugin-sdk/{common-n0l_XN-S.js → common-BxEWhN2X.js} +1 -1
- package/dist/plugin-sdk/{config-DsXZsCkJ.js → config-v1EU9Ll8.js} +2 -2
- package/dist/plugin-sdk/{fetch-B-GxSYRO.js → fetch-DH0Y8iyO.js} +1 -1
- package/dist/plugin-sdk/index.js +1 -1
- package/dist/plugin-sdk/{login-_my8QwPP.js → login-d1zBgykF.js} +1 -1
- package/dist/plugin-sdk/{login-qr-BaePtXuG.js → login-qr-B6exvQnN.js} +1 -1
- package/dist/plugin-sdk/{manager-BsC-4ymy.js → manager-BH_bmGds.js} +1 -1
- package/dist/plugin-sdk/{markdown-tables-BUfhHgfs.js → markdown-tables-Epim9b-0.js} +1 -1
- package/dist/plugin-sdk/{message-channel-CuZ2xOAM.js → message-channel-sBPQc_-T.js} +1 -1
- package/dist/plugin-sdk/{model-catalog-yuiXVcmw.js → model-catalog-cXsza5GU.js} +1 -1
- package/dist/plugin-sdk/{model-selection-BtgvnqB5.js → model-selection-K82MAGlL.js} +1 -1
- package/dist/plugin-sdk/{outbound-D_attiyO.js → outbound-Chn_H1O7.js} +1 -1
- package/dist/plugin-sdk/{plugins-BdkC9v5E.js → plugins-CaUOZBVb.js} +1 -1
- package/dist/plugin-sdk/{pw-ai-A7Rathx6.js → pw-ai-BIiJF7ZD.js} +1 -1
- package/dist/plugin-sdk/{qmd-manager-Dxn0jCpE.js → qmd-manager-BRe5fGZw.js} +1 -1
- package/dist/plugin-sdk/{registry-CZHRcH-q.js → registry-DJq2Cvo9.js} +1 -1
- package/dist/plugin-sdk/{render-CuA_WRX5.js → render-BUCRXPIk.js} +1 -1
- package/dist/plugin-sdk/{replies-DmLfO-pg.js → replies-Cz5OD3qN.js} +1 -1
- package/dist/plugin-sdk/{reply-3-ne-N_7.js → reply-D5Uk7pUv.js} +9 -9
- package/dist/plugin-sdk/{reply-prefix-w7kAvH11.js → reply-prefix-CCymsmsP.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-0sbvl4ZN.js → resolve-route-DN1J7Wyc.js} +1 -1
- package/dist/plugin-sdk/{runner-4UfrAQnx.js → runner-CYkuO7Fh.js} +4 -4
- package/dist/plugin-sdk/{session-BB-yfDWx.js → session-D5jHDo78.js} +1 -1
- package/dist/plugin-sdk/{sqlite-JjFgDV-H.js → sqlite-BlMLqMl8.js} +1 -1
- package/dist/plugin-sdk/{subsystem-D0Ril4rt.js → subsystem-COTa5Ly_.js} +1 -1
- package/dist/plugin-sdk/{tool-images-WRTP95FT.js → tool-images-DSpchb4x.js} +1 -1
- package/dist/plugin-sdk/{tool-loop-detection-sC_rhJfb.js → tool-loop-detection-BP6u-mbh.js} +1 -1
- package/dist/plugin-sdk/web-BbganhKi.js +1 -0
- package/dist/plugin-sdk/{whatsapp-actions-ThxQ5niy.js → whatsapp-actions-CZUqxmP1.js} +1 -1
- package/dist/{plugins-BIG8NDB9.js → plugins-Cx29kkDj.js} +1 -1
- package/dist/{plugins-iAq-Gr8l.js → plugins-DJqou2hi.js} +1 -1
- package/dist/{plugins-cli-CpaVUv_r.js → plugins-cli-Bu-A8aGy.js} +1 -1
- package/dist/{plugins-cli-CPkSgvdL.js → plugins-cli-CGFsQDVW.js} +1 -1
- package/dist/{program-context-BCwL3wlM.js → program-context-ClBa4lUj.js} +1 -1
- package/dist/{program-2w7Ue902.js → program-vVCzU0cH.js} +2 -2
- package/dist/{prompt-select-styled-hB_nLOn1.js → prompt-select-styled-BJPGccTJ.js} +1 -1
- package/dist/{prompt-select-styled-Dd5swW2b.js → prompt-select-styled-BK74z6FF.js} +1 -1
- package/dist/{provider-auth-helpers-BpTnp2Yr.js → provider-auth-helpers-B84m5VMc.js} +1 -1
- package/dist/{provider-auth-helpers-CJTG_tVx.js → provider-auth-helpers-hNwpK_hl.js} +1 -1
- package/dist/{provider-dispatcher-TWwBT2aH.js → provider-dispatcher-BjR5DE3O.js} +1 -1
- package/dist/provider-dispatcher-DgOeVjcL.js +1 -0
- package/dist/{provider-usage-BdrU4cIE.js → provider-usage-B-wPVN_j.js} +1 -1
- package/dist/{provider-usage-Bn4ZrnU7.js → provider-usage-B8lFHp0K.js} +1 -1
- package/dist/{push-apns-C4sJnHbO.js → push-apns-BTPPvY81.js} +1 -1
- package/dist/{push-apns-CiD3rrVv.js → push-apns-CscYUS0D.js} +1 -1
- package/dist/{pw-ai-DSEj1QrV.js → pw-ai-CLS_VZ8p.js} +1 -1
- package/dist/{pw-ai-dNZY-qBs.js → pw-ai-D5og_rIf.js} +1 -1
- package/dist/{qr-cli-qr-SFLZW.js → qr-cli-CAquM1Zk.js} +1 -1
- package/dist/{qr-cli-B45dCV0o.js → qr-cli-GsR8n1cm.js} +1 -1
- package/dist/{qr-cli-CMlAIzrD.js → qr-cli-kAKgaL-T.js} +1 -1
- package/dist/{qr-cli-CySNSEFj.js → qr-cli-uyxNf-cQ.js} +1 -1
- package/dist/{register.agent-BA6LIJSb.js → register.agent-BwTCfyeJ.js} +1 -1
- package/dist/{register.agent-D2uCH8jZ.js → register.agent-Dhdo3_7k.js} +1 -1
- package/dist/register.configure-B0m0G3ot.js +1 -0
- package/dist/register.configure-D3cbjmTz.js +1 -0
- package/dist/{register.maintenance-BELfCO_C.js → register.maintenance-C6ocMld2.js} +1 -1
- package/dist/{register.maintenance-DukWFS_D.js → register.maintenance-CbE2zSyc.js} +1 -1
- package/dist/{register.message-DiZRRAE5.js → register.message-Jn4u533_.js} +1 -1
- package/dist/{register.message-8iGDhO8h.js → register.message-Tu1hlM0m.js} +1 -1
- package/dist/{register.onboard-B9DMNfHE.js → register.onboard-B34211N6.js} +1 -1
- package/dist/{register.onboard-Dt7rzAq-.js → register.onboard-S1d2WAE4.js} +1 -1
- package/dist/{register.setup-CSF-2ImP.js → register.setup-CJPyAwCQ.js} +1 -1
- package/dist/{register.setup-BRRVPrx7.js → register.setup-Sg8f3nsH.js} +1 -1
- package/dist/{register.status-health-sessions-D6wdwPwV.js → register.status-health-sessions-BlgVxoZ4.js} +1 -1
- package/dist/{register.status-health-sessions-ZSufYw5j.js → register.status-health-sessions-DwADQJ74.js} +1 -1
- package/dist/{register.subclis-4eDV9jKH.js → register.subclis-C9V_M-Lk.js} +1 -1
- package/dist/{register.subclis-Cr9DoYcv.js → register.subclis-pWn9XObB.js} +1 -1
- package/dist/{replies-DbkT_5BV.js → replies-BOGMDhSN.js} +1 -1
- package/dist/{replies-CzV-RFUG.js → replies-BXbV02ik.js} +1 -1
- package/dist/{replies-DIBQzxGp.js → replies-CUv671JF.js} +1 -1
- package/dist/{replies-Bd2RPZwQ.js → replies-DokbEfJD.js} +1 -1
- package/dist/{reply-Cd3vVnD7.js → reply-GY1C8tcv.js} +10 -10
- package/dist/{routes-BzfLvF8W.js → routes-DZntyPY6.js} +1 -1
- package/dist/{routes-lclJHOYY.js → routes-_iZdG1Fo.js} +1 -1
- package/dist/{rpc-BLqXRn5R.js → rpc-CbUnwStf.js} +1 -1
- package/dist/{rpc-DcQNGQlj.js → rpc-Cwm4gchc.js} +1 -1
- package/dist/{run-main-DLcDEJgv.js → run-main-DQMbgbcF.js} +1 -1
- package/dist/{runner-DwWmciCt.js → runner-Cu9NJouV.js} +1 -1
- package/dist/{runner-SxCr9kXD.js → runner-eTTUbLAK.js} +1 -1
- package/dist/{sandbox-BZibn6PX.js → sandbox-C4AKi2EX.js} +1 -1
- package/dist/{sandbox-z9t_PRf9.js → sandbox-DvKMuAXL.js} +1 -1
- package/dist/{sandbox-cli-BtGs0dBR.js → sandbox-cli-C0LhzYq_.js} +1 -1
- package/dist/{sandbox-cli-B8FpLgyY.js → sandbox-cli-De0iaoHB.js} +1 -1
- package/dist/{security-cli-D8Q8I7fn.js → security-cli-BvEfiO8m.js} +1 -1
- package/dist/{security-cli-IIMR7Pb4.js → security-cli-BzsQ0XQh.js} +1 -1
- package/dist/{send-DnMzjS7L.js → send-2dRKMWtl.js} +1 -1
- package/dist/{send-DerUBvXW.js → send-Aw8wK3vK.js} +1 -1
- package/dist/{send-BvroeIQ6.js → send-B7H8Ae5j.js} +1 -1
- package/dist/{send-4d9NswaD.js → send-BP5osGBo.js} +1 -1
- package/dist/{send-BU_-BGmf.js → send-BVal50Bi.js} +1 -1
- package/dist/{send-CxG2suVM.js → send-Bbo7TXLx.js} +1 -1
- package/dist/{send-CBBziNqM.js → send-BxoVLIy1.js} +1 -1
- package/dist/{send-dDpSBSBo.js → send-COKUbcqs.js} +1 -1
- package/dist/{send--12DIueA.js → send-CTw3PqN4.js} +1 -1
- package/dist/{send-UFtylOiq.js → send-CYGOPcKq.js} +1 -1
- package/dist/{send-DyF1Xy9K.js → send-ChGpVO3O.js} +1 -1
- package/dist/{send-Q-uTkSFE.js → send-Cqea2UFo.js} +1 -1
- package/dist/{send-j15662lv.js → send-CrFWgJKx.js} +1 -1
- package/dist/{send-gDb60Hk-.js → send-CwK8QBR3.js} +1 -1
- package/dist/{send-CceNWtYE.js → send-DqR7Rxzm.js} +1 -1
- package/dist/{send-CJHXQvVl.js → send-DxwfUIN-.js} +1 -1
- package/dist/{send-ByCVQQVz.js → send-KgN1P41U.js} +1 -1
- package/dist/{send-B1rJLLpr.js → send-bNp87SIq.js} +1 -1
- package/dist/{send-B_1BtyfA.js → send-kkm_zrHQ.js} +1 -1
- package/dist/{send-BJDzwYJN.js → send-l3ge4wkC.js} +1 -1
- package/dist/{server-context-DJZT7Upf.js → server-context-CQ2v4BAx.js} +1 -1
- package/dist/{server-context-owOmmyUM.js → server-context-CttALzrW.js} +1 -1
- package/dist/{server-node-events-54d8Rmjl.js → server-node-events-CIMO6Vae.js} +1 -1
- package/dist/{server-node-events-CSFVqgxX.js → server-node-events-iCF2ngcN.js} +1 -1
- package/dist/{session-BzQdcCqN.js → session-BJHsjD3z.js} +1 -1
- package/dist/{session-4FpEJvkE.js → session-C_b1ttHJ.js} +1 -1
- package/dist/{session-dirs-OxQuIvJW.js → session-dirs-Bvbgw0GC.js} +1 -1
- package/dist/{session-dirs-D_ARkyw0.js → session-dirs-DHaoq7zc.js} +1 -1
- package/dist/{session-utils-GMvum00v.js → session-utils-Dxou8SbO.js} +1 -1
- package/dist/{sessions-Bl1wwotX.js → sessions-BA8Se_bT.js} +1 -1
- package/dist/{sessions-CdanN_ZI.js → sessions-BuZVmOWt.js} +1 -1
- package/dist/{sessions-B5dwRhUC.js → sessions-DvbW0FNJ.js} +1 -1
- package/dist/{sessions-B1t7qeEn.js → sessions-DvqsIg0M.js} +1 -1
- package/dist/{shared-xj-xaKFi.js → shared-BBOiNdjf.js} +1 -1
- package/dist/{shared-BPN3qd7G.js → shared-C2orjbTD.js} +1 -1
- package/dist/{skill-scanner-U3AJgjqc.js → skill-scanner-BEvov9QH.js} +1 -1
- package/dist/{skill-scanner-DEmbPsRh.js → skill-scanner-OTLeRZ_p.js} +1 -1
- package/dist/{skills-cli-CIdnXa3B.js → skills-cli-C1BOgB3y.js} +1 -1
- package/dist/{skills-cli-BXbGr7vl.js → skills-cli-CFT2Aq5R.js} +1 -1
- package/dist/{skills-install-Btw_GHbI.js → skills-install-LlKntDHa.js} +1 -1
- package/dist/{skills-install-DMHQRpIl.js → skills-install-tx5Mahav.js} +1 -1
- package/dist/{status-DXaDS_0w.js → status-Bh8V7kjv.js} +1 -1
- package/dist/{status-BxeKmkVr.js → status-BtBHmhQh.js} +1 -1
- package/dist/{status-BkcmeZg6.js → status-CpwD4y9B.js} +1 -1
- package/dist/status-CqaTmyih.js +1 -0
- package/dist/{status-DouJcFzf.js → status-yXz8PUbL.js} +1 -1
- package/dist/{status.update-C9iy31xr.js → status.update-CdgsLBPg.js} +1 -1
- package/dist/{status.update-KYyRSDZY.js → status.update-hzMro-BT.js} +1 -1
- package/dist/{subagent-registry-Dr20nzwk.js → subagent-registry-CaRUNwCj.js} +1 -1
- package/dist/{subagent-registry-CyGxu3kP.js → subagent-registry-DDEN4oJi.js} +10 -10
- package/dist/{subagent-registry-BiXkIDeh.js → subagent-registry-DYYfeIc3.js} +1 -1
- package/dist/{system-cli-b4YgXPHv.js → system-cli-4aii1JYf.js} +1 -1
- package/dist/{system-cli-C7YzJeP4.js → system-cli-CfkDD3FV.js} +1 -1
- package/dist/{tui-DylWbrDx.js → tui-DnVRxfI8.js} +2 -2
- package/dist/{tui-BwWMByVp.js → tui-JfWoLGIV.js} +2 -2
- package/dist/{tui-cli-C_TTgabr.js → tui-cli-CGjg2Eb5.js} +1 -1
- package/dist/{tui-cli-Bh1V8-w9.js → tui-cli-cd7Efw5u.js} +1 -1
- package/dist/{tui-setup-check-DJZCJokQ.js → tui-setup-check-BEHm9wwo.js} +1 -1
- package/dist/{tui-setup-check-BABAyl-e.js → tui-setup-check-DK8vdhLI.js} +1 -1
- package/dist/{tui-stream-assembler-ign_cPkv.js → tui-stream-assembler-8ud9oyMK.js} +1 -1
- package/dist/{tui-stream-assembler-q9GANTDr.js → tui-stream-assembler-Br15rhRH.js} +1 -1
- package/dist/{update-BUzcmoDf.js → update-B5yKFeGO.js} +1 -1
- package/dist/{update-D6U-V8Au.js → update-DodoQDCk.js} +1 -1
- package/dist/{update-cli-DUrUIrYQ.js → update-cli-CfJJcSUS.js} +1 -1
- package/dist/{update-cli-CA3LuuJ7.js → update-cli-x8Ocbf-0.js} +1 -1
- package/dist/{usage-cli-CfEg1_NZ.js → usage-cli-CN7L1YRG.js} +1 -1
- package/dist/{usage-cli-CpbYMXxS.js → usage-cli-CQmokGkG.js} +1 -1
- package/dist/{web-D-NSyF6b.js → web-BXLk9UT2.js} +1 -1
- package/dist/web-Btgs8oWv.js +1 -0
- package/dist/{webhooks-cli-B_f61rq7.js → webhooks-cli-DIo8p3lk.js} +1 -1
- package/dist/{webhooks-cli-Bi0t3w6P.js → webhooks-cli-DhxEtiFt.js} +1 -1
- package/dist/{whatsapp-actions-JbF2MrTV.js → whatsapp-actions-B7r9AyZN.js} +1 -1
- package/dist/{whatsapp-actions-BkCMhD9X.js → whatsapp-actions-DX2QU6Gs.js} +1 -1
- package/dist/{with-timeout-T07SJo4N.js → with-timeout-B_p5pWDv.js} +1 -1
- package/dist/{with-timeout-Bwq-GyUQ.js → with-timeout-GDLpcjW7.js} +1 -1
- package/dist/workflow-telemetry-BMTg5lPd.js +1 -0
- package/dist/workflow-telemetry-Bg8MVUr_.js +2 -0
- package/dist/workflow-telemetry-Do1UsYwM.js +1 -0
- package/dist/workflow-telemetry-DqBPhVL4.js +2 -0
- package/package.json +1 -1
- package/dist/agents-DsZ5vLKE.js +0 -1
- package/dist/auth-choice-Btd2Rxxd.js +0 -1
- package/dist/auth-choice-CVV9wRFN.js +0 -1
- package/dist/auth-choice.apply-BOK9XRCQ.js +0 -1
- package/dist/auth-choice.apply-Cv-BiV5Q.js +0 -1
- package/dist/auth-choice.apply.transformers-CXywS3GZ.js +0 -1
- package/dist/builderforce-onboarding-Dq6VUSKZ.js +0 -24
- package/dist/builderforce-onboarding-DuUfZ6oL.js +0 -24
- package/dist/configure-CWBBFk3F.js +0 -1
- package/dist/configure-fHVOAucW.js +0 -1
- package/dist/health-GLcAfqDz.js +0 -1
- package/dist/login-CPyEf5h6.js +0 -1
- package/dist/model-catalog-J7R-tJDu.js +0 -1
- package/dist/model-picker-D2bcWrtu.js +0 -1
- package/dist/model-picker-DO1HtEEm.js +0 -1
- package/dist/onboard-channels-CmqKsAoW.js +0 -1
- package/dist/onboard-channels-Db0P4iWl.js +0 -1
- package/dist/onboard-custom-BABqIYa4.js +0 -1
- package/dist/onboard-custom-VpW3UC8u.js +0 -1
- package/dist/plugin-registry-B-UOeWqM.js +0 -1
- package/dist/plugin-registry-BjMr3yXM.js +0 -1
- package/dist/plugin-sdk/web-CThgoHQp.js +0 -1
- package/dist/provider-dispatcher-C4nHaNqn.js +0 -1
- package/dist/register.configure-DAL38e7r.js +0 -1
- package/dist/register.configure-DZG7-WVi.js +0 -1
- package/dist/status-BTYqHVha.js +0 -1
- package/dist/web-P6QsgmSD.js +0 -1
- package/dist/workflow-telemetry-B8Im0mPk.js +0 -1
- package/dist/workflow-telemetry-DLEnm5TI.js +0 -2
- package/dist/workflow-telemetry-Dc_oseV7.js +0 -2
- package/dist/workflow-telemetry-Dkm3mofI.js +0 -1
- /package/dist/{devtools-CI7JyCXv.js → devtools-Cg4F-l9O.js} +0 -0
- /package/dist/{devtools-eMFaIsAT.js → devtools-Dl2DACSO.js} +0 -0
- /package/dist/{github-copilot-token-D3gHtNUu.js → github-copilot-token-BlyiXyTy.js} +0 -0
- /package/dist/{github-copilot-token-DHP2kAiN.js → github-copilot-token-D5sB2AUI.js} +0 -0
- /package/dist/{onboard-hooks-Cenav0eW.js → onboard-hooks-BaOSgxs9.js} +0 -0
- /package/dist/{onboard-hooks-Ce20rwpW.js → onboard-hooks-fO5eeDe_.js} +0 -0
- /package/dist/{qmd-manager-DVd_aWEV.js → qmd-manager-BgplOjHN.js} +0 -0
- /package/dist/{qmd-manager-keHvLmvP.js → qmd-manager-COUi_Fqb.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-
|
|
1
|
+
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-pt7Tr4HA.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-D9hC2aG0.js";import"./manifest-registry-009gLJ4l.js";import"./config-BpChMIJ6.js";import"./client-CGgp3zkQ.js";import"./call-Du2LiaX6.js";import"./message-channel-z5YRpR2d.js";import"./sessions-BA8Se_bT.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./accounts-Cx82nj4E.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./ports-DTku9NSx.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./links-BKzP7VVP.js";import"./progress-Cqb-jAjT.js";import"./onboard-helpers-Ce_c4Raj.js";import"./prompt-style-BMWmaqSC.js";import"./daemon-runtime-Dx800VUt.js";import"./runtime-guard-Bi8k55v9.js";import"./systemd-DdVd5Yet.js";import"./service-EKJG69M3.js";import"./lifecycle-core-D9Dg5Qps.js";import"./diagnostics-DamNPi4e.js";import{t as registerDaemonCli}from"./daemon-cli-BNzthScZ.js";export{registerDaemonCli};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as resolveStateDir,y as resolveRequiredHomeDir}from"./paths-5FcIFMsj.js";import{t as formatCliCommand}from"./command-format-D806O2pt.js";import{U as VERSION,z as collectConfigEnvVars}from"./io-3R_ZyUxB.js";import{a as NODE_SERVICE_MARKER,c as resolveGatewayLaunchAgentLabel,d as resolveGatewaySystemdServiceName,g as resolveNodeWindowsTaskName,h as resolveNodeSystemdServiceName,i as NODE_SERVICE_KIND,m as resolveNodeLaunchAgentLabel,n as GATEWAY_SERVICE_KIND,o as NODE_WINDOWS_TASK_SCRIPT_NAME,r as GATEWAY_SERVICE_MARKER}from"./constants-BBbGeL3t.js";import{n as isSupportedNodeVersion}from"./runtime-guard-DhksRHci.js";import os from"node:os";import path from"node:path";import fs from"node:fs/promises";import{execFile}from"node:child_process";import{promisify}from"node:util";function isNodeRuntime(execPath){let base=path.basename(execPath).toLowerCase();return base===`node`||base===`node.exe`}function isBunRuntime(execPath){let base=path.basename(execPath).toLowerCase();return base===`bun`||base===`bun.exe`}async function resolveCliEntrypointPathForService(){let argv1=process.argv[1];if(!argv1)throw Error(`Unable to resolve CLI entrypoint path`);let normalized=path.resolve(argv1),resolvedPath=await resolveRealpathSafe(normalized);if(/[/\\]dist[/\\].+\.(cjs|js|mjs)$/.test(resolvedPath)){if(await fs.access(resolvedPath),/[/\\]dist[/\\].+\.(cjs|js|mjs)$/.test(normalized)&&normalized!==resolvedPath)try{return await fs.access(normalized),normalized}catch{}return resolvedPath}let distCandidates=buildDistCandidates(resolvedPath,normalized);for(let candidate of distCandidates)try{return await fs.access(candidate),candidate}catch{}throw Error(`Cannot find built CLI at ${distCandidates.join(` or `)}. Run "pnpm build" first, or use dev mode.`)}async function resolveRealpathSafe(inputPath){try{return await fs.realpath(inputPath)}catch{return inputPath}}function buildDistCandidates(...inputs){let candidates=[],seen=new Set;for(let inputPath of inputs){if(!inputPath)continue;let baseDir=path.dirname(inputPath);appendDistCandidates(candidates,seen,path.resolve(baseDir,`..`)),appendDistCandidates(candidates,seen,baseDir),appendNodeModulesBinCandidates(candidates,seen,inputPath)}return candidates}function appendDistCandidates(candidates,seen,baseDir){let distDir=path.resolve(baseDir,`dist`),distEntries=[path.join(distDir,`index.js`),path.join(distDir,`index.mjs`),path.join(distDir,`entry.js`),path.join(distDir,`entry.mjs`)];for(let entry of distEntries)seen.has(entry)||(seen.add(entry),candidates.push(entry))}function appendNodeModulesBinCandidates(candidates,seen,inputPath){let parts=inputPath.split(path.sep),binIndex=parts.lastIndexOf(`.bin`);if(binIndex<=0||parts[binIndex-1]!==`node_modules`)return;let binName=path.basename(inputPath),nodeModulesDir=parts.slice(0,binIndex).join(path.sep);appendDistCandidates(candidates,seen,path.join(nodeModulesDir,binName))}function resolveRepoRootForDev(){let argv1=process.argv[1];if(!argv1)throw Error(`Unable to resolve repo root`);let parts=path.resolve(argv1).split(path.sep),srcIndex=parts.lastIndexOf(`src`);if(srcIndex===-1)throw Error(`Dev mode requires running from repo (src/index.ts)`);return parts.slice(0,srcIndex).join(path.sep)}async function resolveBunPath(){return await resolveBinaryPath(`bun`)}async function resolveNodePath(){return await resolveBinaryPath(`node`)}async function resolveBinaryPath(binary){let{execSync}=await import(`node:child_process`),cmd=process.platform===`win32`?`where`:`which`;try{let resolved=execSync(`${cmd} ${binary}`,{encoding:`utf8`}).trim().split(/\r?\n/)[0]?.trim();if(!resolved)throw Error(`empty`);return await fs.access(resolved),resolved}catch{throw binary===`bun`?Error(`Bun not found in PATH. Install bun: https://bun.sh`):Error(`Node not found in PATH. Install Node 22+.`)}}async function resolveCliProgramArguments(params){let execPath=process.execPath,runtime=params.runtime??`auto`;if(runtime===`node`)return{programArguments:[params.nodePath??(isNodeRuntime(execPath)?execPath:await resolveNodePath()),await resolveCliEntrypointPathForService(),...params.args]};if(runtime===`bun`){if(params.dev){let repoRoot=resolveRepoRootForDev(),devCliPath=path.join(repoRoot,`src`,`index.ts`);return await fs.access(devCliPath),{programArguments:[isBunRuntime(execPath)?execPath:await resolveBunPath(),devCliPath,...params.args],workingDirectory:repoRoot}}return{programArguments:[isBunRuntime(execPath)?execPath:await resolveBunPath(),await resolveCliEntrypointPathForService(),...params.args]}}if(!params.dev)try{return{programArguments:[execPath,await resolveCliEntrypointPathForService(),...params.args]}}catch(error){if(!isNodeRuntime(execPath))return{programArguments:[execPath,...params.args]};throw error}let repoRoot=resolveRepoRootForDev(),devCliPath=path.join(repoRoot,`src`,`index.ts`);return await fs.access(devCliPath),isBunRuntime(execPath)?{programArguments:[execPath,devCliPath,...params.args],workingDirectory:repoRoot}:{programArguments:[await resolveBunPath(),devCliPath,...params.args],workingDirectory:repoRoot}}async function resolveGatewayProgramArguments(params){return resolveCliProgramArguments({args:[`gateway`,`--port`,String(params.port)],dev:params.dev,runtime:params.runtime,nodePath:params.nodePath})}async function resolveNodeProgramArguments(params){let args=[`node`,`run`,`--host`,params.host,`--port`,String(params.port)];return(params.tls||params.tlsFingerprint)&&args.push(`--tls`),params.tlsFingerprint&&args.push(`--tls-fingerprint`,params.tlsFingerprint),params.nodeId&&args.push(`--node-id`,params.nodeId),params.displayName&&args.push(`--display-name`,params.displayName),resolveCliProgramArguments({args,dev:params.dev,runtime:params.runtime,nodePath:params.nodePath})}const VERSION_MANAGER_MARKERS=[`/.nvm/`,`/.fnm/`,`/.volta/`,`/.asdf/`,`/.n/`,`/.nodenv/`,`/.nodebrew/`,`/nvs/`];function getPathModule(platform){return platform===`win32`?path.win32:path.posix}function isNodeExecPath(execPath,platform){let base=getPathModule(platform).basename(execPath).toLowerCase();return base===`node`||base===`node.exe`}function normalizeForCompare(input,platform){let normalized=getPathModule(platform).normalize(input).replaceAll(`\\`,`/`);return platform===`win32`?normalized.toLowerCase():normalized}function buildSystemNodeCandidates(env,platform){if(platform===`darwin`)return[`/opt/homebrew/bin/node`,`/usr/local/bin/node`,`/usr/bin/node`];if(platform===`linux`)return[`/usr/local/bin/node`,`/usr/bin/node`];if(platform===`win32`){let pathModule=getPathModule(platform),programFiles=env.ProgramFiles??`C:\\Program Files`,programFilesX86=env[`ProgramFiles(x86)`]??`C:\\Program Files (x86)`;return[pathModule.join(programFiles,`nodejs`,`node.exe`),pathModule.join(programFilesX86,`nodejs`,`node.exe`)]}return[]}const execFileAsync=promisify(execFile);async function resolveNodeVersion(nodePath,execFileImpl){try{let{stdout}=await execFileImpl(nodePath,[`-p`,`process.versions.node`],{encoding:`utf8`});return stdout.trim()||null}catch{return null}}function isVersionManagedNodePath(nodePath,platform=process.platform){let normalized=normalizeForCompare(nodePath,platform);return VERSION_MANAGER_MARKERS.some(marker=>normalized.includes(marker))}function isSystemNodePath(nodePath,env=process.env,platform=process.platform){let normalized=normalizeForCompare(nodePath,platform);return buildSystemNodeCandidates(env,platform).some(candidate=>normalized===normalizeForCompare(candidate,platform))}async function resolveSystemNodePath(env=process.env,platform=process.platform){let candidates=buildSystemNodeCandidates(env,platform);for(let candidate of candidates)try{return await fs.access(candidate),candidate}catch{}return null}async function resolveSystemNodeInfo(params){let systemNode=await resolveSystemNodePath(params.env??process.env,params.platform??process.platform);if(!systemNode)return null;let version=await resolveNodeVersion(systemNode,params.execFile??execFileAsync);return{path:systemNode,version,supported:isSupportedNodeVersion(version)}}function renderSystemNodeWarning(systemNode,selectedNodePath){if(!systemNode||systemNode.supported)return null;let versionLabel=systemNode.version??`unknown`,selectedLabel=selectedNodePath?` Using ${selectedNodePath} for the daemon.`:``;return`System Node ${versionLabel} at ${systemNode.path} is below the required Node 22+.${selectedLabel} Install Node 22+ from nodejs.org or Homebrew.`}async function resolvePreferredNodePath(params){if(params.runtime!==`node`)return;let platform=params.platform??process.platform,currentExecPath=params.execPath??process.execPath;if(currentExecPath&&isNodeExecPath(currentExecPath,platform)&&isSupportedNodeVersion(await resolveNodeVersion(currentExecPath,params.execFile??execFileAsync)))return currentExecPath;let systemNode=await resolveSystemNodeInfo(params);if(systemNode?.supported)return systemNode.path}function addNonEmptyDir(dirs,dir){dir&&dirs.push(dir)}function appendSubdir(base,subdir){if(base)return base.endsWith(`/${subdir}`)?base:path.posix.join(base,subdir)}function addCommonUserBinDirs(dirs,home){dirs.push(`${home}/.local/bin`),dirs.push(`${home}/.npm-global/bin`),dirs.push(`${home}/bin`),dirs.push(`${home}/.volta/bin`),dirs.push(`${home}/.asdf/shims`),dirs.push(`${home}/.bun/bin`)}function resolveSystemPathDirs(platform){return platform===`darwin`?[`/opt/homebrew/bin`,`/usr/local/bin`,`/usr/bin`,`/bin`]:platform===`linux`?[`/usr/local/bin`,`/usr/bin`,`/bin`]:[]}function resolveDarwinUserBinDirs(home,env){if(!home)return[];let dirs=[];return addNonEmptyDir(dirs,env?.PNPM_HOME),addNonEmptyDir(dirs,appendSubdir(env?.NPM_CONFIG_PREFIX,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.BUN_INSTALL,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.VOLTA_HOME,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.ASDF_DATA_DIR,`shims`)),addNonEmptyDir(dirs,env?.NVM_DIR),addNonEmptyDir(dirs,appendSubdir(env?.FNM_DIR,`aliases/default/bin`)),addCommonUserBinDirs(dirs,home),dirs.push(`${home}/Library/Application Support/fnm/aliases/default/bin`),dirs.push(`${home}/.fnm/aliases/default/bin`),dirs.push(`${home}/Library/pnpm`),dirs.push(`${home}/.local/share/pnpm`),dirs}function resolveLinuxUserBinDirs(home,env){if(!home)return[];let dirs=[];return addNonEmptyDir(dirs,env?.PNPM_HOME),addNonEmptyDir(dirs,appendSubdir(env?.NPM_CONFIG_PREFIX,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.BUN_INSTALL,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.VOLTA_HOME,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.ASDF_DATA_DIR,`shims`)),addNonEmptyDir(dirs,appendSubdir(env?.NVM_DIR,`current/bin`)),addNonEmptyDir(dirs,appendSubdir(env?.FNM_DIR,`current/bin`)),addCommonUserBinDirs(dirs,home),dirs.push(`${home}/.nvm/current/bin`),dirs.push(`${home}/.fnm/current/bin`),dirs.push(`${home}/.local/share/pnpm`),dirs}function getMinimalServicePathParts(options={}){let platform=options.platform??process.platform;if(platform===`win32`)return[];let parts=[],extraDirs=options.extraDirs??[],systemDirs=resolveSystemPathDirs(platform),userDirs=platform===`linux`?resolveLinuxUserBinDirs(options.home,options.env):platform===`darwin`?resolveDarwinUserBinDirs(options.home,options.env):[],add=dir=>{dir&&(parts.includes(dir)||parts.push(dir))};for(let dir of extraDirs)add(dir);for(let dir of userDirs)add(dir);for(let dir of systemDirs)add(dir);return parts}function getMinimalServicePathPartsFromEnv(options={}){let env=options.env??process.env;return getMinimalServicePathParts({...options,home:options.home??env.HOME,env})}function buildMinimalServicePath(options={}){let env=options.env??process.env;return(options.platform??process.platform)===`win32`?env.PATH??``:getMinimalServicePathPartsFromEnv({...options,env}).join(path.posix.delimiter)}function buildServiceEnvironment(params){let{env,port,token,launchdLabel}=params,profile=env.BUILDERFORCE_AGENTS_PROFILE,resolvedLaunchdLabel=launchdLabel||(process.platform===`darwin`?resolveGatewayLaunchAgentLabel(profile):void 0),systemdUnit=`${resolveGatewaySystemdServiceName(profile)}.service`,stateDir=env.BUILDERFORCE_AGENTS_STATE_DIR?.trim()||resolveStateDir(env),configPath=env.BUILDERFORCE_AGENTS_CONFIG_PATH?.trim()||(stateDir?path.join(stateDir,`builderforce.json`):void 0),tmpDir=env.TMPDIR?.trim()||os.tmpdir();return{HOME:env.HOME,TMPDIR:tmpDir,PATH:buildMinimalServicePath({env}),BUILDERFORCE_AGENTS_PROFILE:profile,BUILDERFORCE_AGENTS_STATE_DIR:stateDir,BUILDERFORCE_AGENTS_CONFIG_PATH:configPath,BUILDERFORCE_AGENTS_GATEWAY_PORT:String(port),BUILDERFORCE_AGENTS_GATEWAY_TOKEN:token,BUILDERFORCE_AGENTS_LAUNCHD_LABEL:resolvedLaunchdLabel,BUILDERFORCE_AGENTS_SYSTEMD_UNIT:systemdUnit,BUILDERFORCE_AGENTS_SERVICE_MARKER:GATEWAY_SERVICE_MARKER,BUILDERFORCE_AGENTS_SERVICE_KIND:GATEWAY_SERVICE_KIND,BUILDERFORCE_AGENTS_SERVICE_VERSION:VERSION}}function buildNodeServiceEnvironment(params){let{env}=params,stateDir=env.BUILDERFORCE_AGENTS_STATE_DIR,configPath=env.BUILDERFORCE_AGENTS_CONFIG_PATH,tmpDir=env.TMPDIR?.trim()||os.tmpdir();return{HOME:env.HOME,TMPDIR:tmpDir,PATH:buildMinimalServicePath({env}),BUILDERFORCE_AGENTS_STATE_DIR:stateDir,BUILDERFORCE_AGENTS_CONFIG_PATH:configPath,BUILDERFORCE_AGENTS_LAUNCHD_LABEL:resolveNodeLaunchAgentLabel(),BUILDERFORCE_AGENTS_SYSTEMD_UNIT:resolveNodeSystemdServiceName(),BUILDERFORCE_AGENTS_WINDOWS_TASK_NAME:resolveNodeWindowsTaskName(),BUILDERFORCE_AGENTS_TASK_SCRIPT_NAME:NODE_WINDOWS_TASK_SCRIPT_NAME,BUILDERFORCE_AGENTS_LOG_PREFIX:`node`,BUILDERFORCE_AGENTS_SERVICE_MARKER:NODE_SERVICE_MARKER,BUILDERFORCE_AGENTS_SERVICE_KIND:NODE_SERVICE_KIND,BUILDERFORCE_AGENTS_SERVICE_VERSION:VERSION}}async function emitNodeRuntimeWarning(params){if(params.runtime!==`node`)return;let warning=renderSystemNodeWarning(await resolveSystemNodeInfo({env:params.env}),params.nodeProgram);warning&¶ms.warn?.(warning,params.title)}function resolveGatewayDevMode(argv=process.argv){let normalizedEntry=argv[1]?.replaceAll(`\\`,`/`);return!!(normalizedEntry?.includes(`/src/`)&&normalizedEntry.endsWith(`.ts`))}async function buildGatewayInstallPlan(params){let devMode=params.devMode??resolveGatewayDevMode(),nodePath=params.nodePath??await resolvePreferredNodePath({env:params.env,runtime:params.runtime}),{programArguments,workingDirectory}=await resolveGatewayProgramArguments({port:params.port,dev:devMode,runtime:params.runtime,nodePath});!workingDirectory&&process.platform===`win32`&&(workingDirectory=resolveRequiredHomeDir(params.env,os.homedir)),await emitNodeRuntimeWarning({env:params.env,runtime:params.runtime,nodeProgram:programArguments[0],warn:params.warn,title:`Gateway runtime`});let serviceEnvironment=buildServiceEnvironment({env:params.env,port:params.port,token:params.token,launchdLabel:process.platform===`darwin`?resolveGatewayLaunchAgentLabel(params.env.BUILDERFORCE_AGENTS_PROFILE):void 0}),environment={...collectConfigEnvVars(params.config)};return Object.assign(environment,serviceEnvironment),{programArguments,workingDirectory,environment}}function gatewayInstallErrorHint(platform=process.platform){return platform===`win32`?`Tip: rerun from an elevated PowerShell (Start → type PowerShell → right-click → Run as administrator) or skip service install.`:`Tip: rerun \`${formatCliCommand(`builderforce gateway install`)}\` after fixing the error.`}const DEFAULT_GATEWAY_DAEMON_RUNTIME=`node`,GATEWAY_DAEMON_RUNTIME_OPTIONS=[{value:`node`,label:`Node (recommended)`,hint:`Required for WhatsApp + Telegram. Bun can corrupt memory on reconnect.`}];function isGatewayDaemonRuntime(value){return value===`node`||value===`bun`}export{gatewayInstallErrorHint as a,buildNodeServiceEnvironment as c,isVersionManagedNodePath as d,renderSystemNodeWarning as f,resolveNodeProgramArguments as g,resolveSystemNodePath as h,buildGatewayInstallPlan as i,getMinimalServicePathPartsFromEnv as l,resolveSystemNodeInfo as m,GATEWAY_DAEMON_RUNTIME_OPTIONS as n,resolveGatewayDevMode as o,resolvePreferredNodePath as p,isGatewayDaemonRuntime as r,emitNodeRuntimeWarning as s,DEFAULT_GATEWAY_DAEMON_RUNTIME as t,isSystemNodePath as u};
|
|
1
|
+
import{g as resolveStateDir,y as resolveRequiredHomeDir}from"./paths-5FcIFMsj.js";import{t as formatCliCommand}from"./command-format-D806O2pt.js";import{U as VERSION,z as collectConfigEnvVars}from"./io-BLBq4T2o.js";import{a as NODE_SERVICE_MARKER,c as resolveGatewayLaunchAgentLabel,d as resolveGatewaySystemdServiceName,g as resolveNodeWindowsTaskName,h as resolveNodeSystemdServiceName,i as NODE_SERVICE_KIND,m as resolveNodeLaunchAgentLabel,n as GATEWAY_SERVICE_KIND,o as NODE_WINDOWS_TASK_SCRIPT_NAME,r as GATEWAY_SERVICE_MARKER}from"./constants-BBbGeL3t.js";import{n as isSupportedNodeVersion}from"./runtime-guard-DhksRHci.js";import os from"node:os";import path from"node:path";import fs from"node:fs/promises";import{execFile}from"node:child_process";import{promisify}from"node:util";function isNodeRuntime(execPath){let base=path.basename(execPath).toLowerCase();return base===`node`||base===`node.exe`}function isBunRuntime(execPath){let base=path.basename(execPath).toLowerCase();return base===`bun`||base===`bun.exe`}async function resolveCliEntrypointPathForService(){let argv1=process.argv[1];if(!argv1)throw Error(`Unable to resolve CLI entrypoint path`);let normalized=path.resolve(argv1),resolvedPath=await resolveRealpathSafe(normalized);if(/[/\\]dist[/\\].+\.(cjs|js|mjs)$/.test(resolvedPath)){if(await fs.access(resolvedPath),/[/\\]dist[/\\].+\.(cjs|js|mjs)$/.test(normalized)&&normalized!==resolvedPath)try{return await fs.access(normalized),normalized}catch{}return resolvedPath}let distCandidates=buildDistCandidates(resolvedPath,normalized);for(let candidate of distCandidates)try{return await fs.access(candidate),candidate}catch{}throw Error(`Cannot find built CLI at ${distCandidates.join(` or `)}. Run "pnpm build" first, or use dev mode.`)}async function resolveRealpathSafe(inputPath){try{return await fs.realpath(inputPath)}catch{return inputPath}}function buildDistCandidates(...inputs){let candidates=[],seen=new Set;for(let inputPath of inputs){if(!inputPath)continue;let baseDir=path.dirname(inputPath);appendDistCandidates(candidates,seen,path.resolve(baseDir,`..`)),appendDistCandidates(candidates,seen,baseDir),appendNodeModulesBinCandidates(candidates,seen,inputPath)}return candidates}function appendDistCandidates(candidates,seen,baseDir){let distDir=path.resolve(baseDir,`dist`),distEntries=[path.join(distDir,`index.js`),path.join(distDir,`index.mjs`),path.join(distDir,`entry.js`),path.join(distDir,`entry.mjs`)];for(let entry of distEntries)seen.has(entry)||(seen.add(entry),candidates.push(entry))}function appendNodeModulesBinCandidates(candidates,seen,inputPath){let parts=inputPath.split(path.sep),binIndex=parts.lastIndexOf(`.bin`);if(binIndex<=0||parts[binIndex-1]!==`node_modules`)return;let binName=path.basename(inputPath),nodeModulesDir=parts.slice(0,binIndex).join(path.sep);appendDistCandidates(candidates,seen,path.join(nodeModulesDir,binName))}function resolveRepoRootForDev(){let argv1=process.argv[1];if(!argv1)throw Error(`Unable to resolve repo root`);let parts=path.resolve(argv1).split(path.sep),srcIndex=parts.lastIndexOf(`src`);if(srcIndex===-1)throw Error(`Dev mode requires running from repo (src/index.ts)`);return parts.slice(0,srcIndex).join(path.sep)}async function resolveBunPath(){return await resolveBinaryPath(`bun`)}async function resolveNodePath(){return await resolveBinaryPath(`node`)}async function resolveBinaryPath(binary){let{execSync}=await import(`node:child_process`),cmd=process.platform===`win32`?`where`:`which`;try{let resolved=execSync(`${cmd} ${binary}`,{encoding:`utf8`}).trim().split(/\r?\n/)[0]?.trim();if(!resolved)throw Error(`empty`);return await fs.access(resolved),resolved}catch{throw binary===`bun`?Error(`Bun not found in PATH. Install bun: https://bun.sh`):Error(`Node not found in PATH. Install Node 22+.`)}}async function resolveCliProgramArguments(params){let execPath=process.execPath,runtime=params.runtime??`auto`;if(runtime===`node`)return{programArguments:[params.nodePath??(isNodeRuntime(execPath)?execPath:await resolveNodePath()),await resolveCliEntrypointPathForService(),...params.args]};if(runtime===`bun`){if(params.dev){let repoRoot=resolveRepoRootForDev(),devCliPath=path.join(repoRoot,`src`,`index.ts`);return await fs.access(devCliPath),{programArguments:[isBunRuntime(execPath)?execPath:await resolveBunPath(),devCliPath,...params.args],workingDirectory:repoRoot}}return{programArguments:[isBunRuntime(execPath)?execPath:await resolveBunPath(),await resolveCliEntrypointPathForService(),...params.args]}}if(!params.dev)try{return{programArguments:[execPath,await resolveCliEntrypointPathForService(),...params.args]}}catch(error){if(!isNodeRuntime(execPath))return{programArguments:[execPath,...params.args]};throw error}let repoRoot=resolveRepoRootForDev(),devCliPath=path.join(repoRoot,`src`,`index.ts`);return await fs.access(devCliPath),isBunRuntime(execPath)?{programArguments:[execPath,devCliPath,...params.args],workingDirectory:repoRoot}:{programArguments:[await resolveBunPath(),devCliPath,...params.args],workingDirectory:repoRoot}}async function resolveGatewayProgramArguments(params){return resolveCliProgramArguments({args:[`gateway`,`--port`,String(params.port)],dev:params.dev,runtime:params.runtime,nodePath:params.nodePath})}async function resolveNodeProgramArguments(params){let args=[`node`,`run`,`--host`,params.host,`--port`,String(params.port)];return(params.tls||params.tlsFingerprint)&&args.push(`--tls`),params.tlsFingerprint&&args.push(`--tls-fingerprint`,params.tlsFingerprint),params.nodeId&&args.push(`--node-id`,params.nodeId),params.displayName&&args.push(`--display-name`,params.displayName),resolveCliProgramArguments({args,dev:params.dev,runtime:params.runtime,nodePath:params.nodePath})}const VERSION_MANAGER_MARKERS=[`/.nvm/`,`/.fnm/`,`/.volta/`,`/.asdf/`,`/.n/`,`/.nodenv/`,`/.nodebrew/`,`/nvs/`];function getPathModule(platform){return platform===`win32`?path.win32:path.posix}function isNodeExecPath(execPath,platform){let base=getPathModule(platform).basename(execPath).toLowerCase();return base===`node`||base===`node.exe`}function normalizeForCompare(input,platform){let normalized=getPathModule(platform).normalize(input).replaceAll(`\\`,`/`);return platform===`win32`?normalized.toLowerCase():normalized}function buildSystemNodeCandidates(env,platform){if(platform===`darwin`)return[`/opt/homebrew/bin/node`,`/usr/local/bin/node`,`/usr/bin/node`];if(platform===`linux`)return[`/usr/local/bin/node`,`/usr/bin/node`];if(platform===`win32`){let pathModule=getPathModule(platform),programFiles=env.ProgramFiles??`C:\\Program Files`,programFilesX86=env[`ProgramFiles(x86)`]??`C:\\Program Files (x86)`;return[pathModule.join(programFiles,`nodejs`,`node.exe`),pathModule.join(programFilesX86,`nodejs`,`node.exe`)]}return[]}const execFileAsync=promisify(execFile);async function resolveNodeVersion(nodePath,execFileImpl){try{let{stdout}=await execFileImpl(nodePath,[`-p`,`process.versions.node`],{encoding:`utf8`});return stdout.trim()||null}catch{return null}}function isVersionManagedNodePath(nodePath,platform=process.platform){let normalized=normalizeForCompare(nodePath,platform);return VERSION_MANAGER_MARKERS.some(marker=>normalized.includes(marker))}function isSystemNodePath(nodePath,env=process.env,platform=process.platform){let normalized=normalizeForCompare(nodePath,platform);return buildSystemNodeCandidates(env,platform).some(candidate=>normalized===normalizeForCompare(candidate,platform))}async function resolveSystemNodePath(env=process.env,platform=process.platform){let candidates=buildSystemNodeCandidates(env,platform);for(let candidate of candidates)try{return await fs.access(candidate),candidate}catch{}return null}async function resolveSystemNodeInfo(params){let systemNode=await resolveSystemNodePath(params.env??process.env,params.platform??process.platform);if(!systemNode)return null;let version=await resolveNodeVersion(systemNode,params.execFile??execFileAsync);return{path:systemNode,version,supported:isSupportedNodeVersion(version)}}function renderSystemNodeWarning(systemNode,selectedNodePath){if(!systemNode||systemNode.supported)return null;let versionLabel=systemNode.version??`unknown`,selectedLabel=selectedNodePath?` Using ${selectedNodePath} for the daemon.`:``;return`System Node ${versionLabel} at ${systemNode.path} is below the required Node 22+.${selectedLabel} Install Node 22+ from nodejs.org or Homebrew.`}async function resolvePreferredNodePath(params){if(params.runtime!==`node`)return;let platform=params.platform??process.platform,currentExecPath=params.execPath??process.execPath;if(currentExecPath&&isNodeExecPath(currentExecPath,platform)&&isSupportedNodeVersion(await resolveNodeVersion(currentExecPath,params.execFile??execFileAsync)))return currentExecPath;let systemNode=await resolveSystemNodeInfo(params);if(systemNode?.supported)return systemNode.path}function addNonEmptyDir(dirs,dir){dir&&dirs.push(dir)}function appendSubdir(base,subdir){if(base)return base.endsWith(`/${subdir}`)?base:path.posix.join(base,subdir)}function addCommonUserBinDirs(dirs,home){dirs.push(`${home}/.local/bin`),dirs.push(`${home}/.npm-global/bin`),dirs.push(`${home}/bin`),dirs.push(`${home}/.volta/bin`),dirs.push(`${home}/.asdf/shims`),dirs.push(`${home}/.bun/bin`)}function resolveSystemPathDirs(platform){return platform===`darwin`?[`/opt/homebrew/bin`,`/usr/local/bin`,`/usr/bin`,`/bin`]:platform===`linux`?[`/usr/local/bin`,`/usr/bin`,`/bin`]:[]}function resolveDarwinUserBinDirs(home,env){if(!home)return[];let dirs=[];return addNonEmptyDir(dirs,env?.PNPM_HOME),addNonEmptyDir(dirs,appendSubdir(env?.NPM_CONFIG_PREFIX,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.BUN_INSTALL,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.VOLTA_HOME,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.ASDF_DATA_DIR,`shims`)),addNonEmptyDir(dirs,env?.NVM_DIR),addNonEmptyDir(dirs,appendSubdir(env?.FNM_DIR,`aliases/default/bin`)),addCommonUserBinDirs(dirs,home),dirs.push(`${home}/Library/Application Support/fnm/aliases/default/bin`),dirs.push(`${home}/.fnm/aliases/default/bin`),dirs.push(`${home}/Library/pnpm`),dirs.push(`${home}/.local/share/pnpm`),dirs}function resolveLinuxUserBinDirs(home,env){if(!home)return[];let dirs=[];return addNonEmptyDir(dirs,env?.PNPM_HOME),addNonEmptyDir(dirs,appendSubdir(env?.NPM_CONFIG_PREFIX,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.BUN_INSTALL,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.VOLTA_HOME,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.ASDF_DATA_DIR,`shims`)),addNonEmptyDir(dirs,appendSubdir(env?.NVM_DIR,`current/bin`)),addNonEmptyDir(dirs,appendSubdir(env?.FNM_DIR,`current/bin`)),addCommonUserBinDirs(dirs,home),dirs.push(`${home}/.nvm/current/bin`),dirs.push(`${home}/.fnm/current/bin`),dirs.push(`${home}/.local/share/pnpm`),dirs}function getMinimalServicePathParts(options={}){let platform=options.platform??process.platform;if(platform===`win32`)return[];let parts=[],extraDirs=options.extraDirs??[],systemDirs=resolveSystemPathDirs(platform),userDirs=platform===`linux`?resolveLinuxUserBinDirs(options.home,options.env):platform===`darwin`?resolveDarwinUserBinDirs(options.home,options.env):[],add=dir=>{dir&&(parts.includes(dir)||parts.push(dir))};for(let dir of extraDirs)add(dir);for(let dir of userDirs)add(dir);for(let dir of systemDirs)add(dir);return parts}function getMinimalServicePathPartsFromEnv(options={}){let env=options.env??process.env;return getMinimalServicePathParts({...options,home:options.home??env.HOME,env})}function buildMinimalServicePath(options={}){let env=options.env??process.env;return(options.platform??process.platform)===`win32`?env.PATH??``:getMinimalServicePathPartsFromEnv({...options,env}).join(path.posix.delimiter)}function buildServiceEnvironment(params){let{env,port,token,launchdLabel}=params,profile=env.BUILDERFORCE_AGENTS_PROFILE,resolvedLaunchdLabel=launchdLabel||(process.platform===`darwin`?resolveGatewayLaunchAgentLabel(profile):void 0),systemdUnit=`${resolveGatewaySystemdServiceName(profile)}.service`,stateDir=env.BUILDERFORCE_AGENTS_STATE_DIR?.trim()||resolveStateDir(env),configPath=env.BUILDERFORCE_AGENTS_CONFIG_PATH?.trim()||(stateDir?path.join(stateDir,`builderforce.json`):void 0),tmpDir=env.TMPDIR?.trim()||os.tmpdir();return{HOME:env.HOME,TMPDIR:tmpDir,PATH:buildMinimalServicePath({env}),BUILDERFORCE_AGENTS_PROFILE:profile,BUILDERFORCE_AGENTS_STATE_DIR:stateDir,BUILDERFORCE_AGENTS_CONFIG_PATH:configPath,BUILDERFORCE_AGENTS_GATEWAY_PORT:String(port),BUILDERFORCE_AGENTS_GATEWAY_TOKEN:token,BUILDERFORCE_AGENTS_LAUNCHD_LABEL:resolvedLaunchdLabel,BUILDERFORCE_AGENTS_SYSTEMD_UNIT:systemdUnit,BUILDERFORCE_AGENTS_SERVICE_MARKER:GATEWAY_SERVICE_MARKER,BUILDERFORCE_AGENTS_SERVICE_KIND:GATEWAY_SERVICE_KIND,BUILDERFORCE_AGENTS_SERVICE_VERSION:VERSION}}function buildNodeServiceEnvironment(params){let{env}=params,stateDir=env.BUILDERFORCE_AGENTS_STATE_DIR,configPath=env.BUILDERFORCE_AGENTS_CONFIG_PATH,tmpDir=env.TMPDIR?.trim()||os.tmpdir();return{HOME:env.HOME,TMPDIR:tmpDir,PATH:buildMinimalServicePath({env}),BUILDERFORCE_AGENTS_STATE_DIR:stateDir,BUILDERFORCE_AGENTS_CONFIG_PATH:configPath,BUILDERFORCE_AGENTS_LAUNCHD_LABEL:resolveNodeLaunchAgentLabel(),BUILDERFORCE_AGENTS_SYSTEMD_UNIT:resolveNodeSystemdServiceName(),BUILDERFORCE_AGENTS_WINDOWS_TASK_NAME:resolveNodeWindowsTaskName(),BUILDERFORCE_AGENTS_TASK_SCRIPT_NAME:NODE_WINDOWS_TASK_SCRIPT_NAME,BUILDERFORCE_AGENTS_LOG_PREFIX:`node`,BUILDERFORCE_AGENTS_SERVICE_MARKER:NODE_SERVICE_MARKER,BUILDERFORCE_AGENTS_SERVICE_KIND:NODE_SERVICE_KIND,BUILDERFORCE_AGENTS_SERVICE_VERSION:VERSION}}async function emitNodeRuntimeWarning(params){if(params.runtime!==`node`)return;let warning=renderSystemNodeWarning(await resolveSystemNodeInfo({env:params.env}),params.nodeProgram);warning&¶ms.warn?.(warning,params.title)}function resolveGatewayDevMode(argv=process.argv){let normalizedEntry=argv[1]?.replaceAll(`\\`,`/`);return!!(normalizedEntry?.includes(`/src/`)&&normalizedEntry.endsWith(`.ts`))}async function buildGatewayInstallPlan(params){let devMode=params.devMode??resolveGatewayDevMode(),nodePath=params.nodePath??await resolvePreferredNodePath({env:params.env,runtime:params.runtime}),{programArguments,workingDirectory}=await resolveGatewayProgramArguments({port:params.port,dev:devMode,runtime:params.runtime,nodePath});!workingDirectory&&process.platform===`win32`&&(workingDirectory=resolveRequiredHomeDir(params.env,os.homedir)),await emitNodeRuntimeWarning({env:params.env,runtime:params.runtime,nodeProgram:programArguments[0],warn:params.warn,title:`Gateway runtime`});let serviceEnvironment=buildServiceEnvironment({env:params.env,port:params.port,token:params.token,launchdLabel:process.platform===`darwin`?resolveGatewayLaunchAgentLabel(params.env.BUILDERFORCE_AGENTS_PROFILE):void 0}),environment={...collectConfigEnvVars(params.config)};return Object.assign(environment,serviceEnvironment),{programArguments,workingDirectory,environment}}function gatewayInstallErrorHint(platform=process.platform){return platform===`win32`?`Tip: rerun from an elevated PowerShell (Start → type PowerShell → right-click → Run as administrator) or skip service install.`:`Tip: rerun \`${formatCliCommand(`builderforce gateway install`)}\` after fixing the error.`}const DEFAULT_GATEWAY_DAEMON_RUNTIME=`node`,GATEWAY_DAEMON_RUNTIME_OPTIONS=[{value:`node`,label:`Node (recommended)`,hint:`Required for WhatsApp + Telegram. Bun can corrupt memory on reconnect.`}];function isGatewayDaemonRuntime(value){return value===`node`||value===`bun`}export{gatewayInstallErrorHint as a,buildNodeServiceEnvironment as c,isVersionManagedNodePath as d,renderSystemNodeWarning as f,resolveNodeProgramArguments as g,resolveSystemNodePath as h,buildGatewayInstallPlan as i,getMinimalServicePathPartsFromEnv as l,resolveSystemNodeInfo as m,GATEWAY_DAEMON_RUNTIME_OPTIONS as n,resolveGatewayDevMode as o,resolvePreferredNodePath as p,isGatewayDaemonRuntime as r,emitNodeRuntimeWarning as s,DEFAULT_GATEWAY_DAEMON_RUNTIME as t,isSystemNodePath as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as resolveStateDir,y as resolveRequiredHomeDir}from"./paths-BHg-VHB4.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import{U as VERSION,z as collectConfigEnvVars}from"./io-CohJffHG.js";import{a as NODE_SERVICE_MARKER,c as resolveGatewayLaunchAgentLabel,d as resolveGatewaySystemdServiceName,g as resolveNodeWindowsTaskName,h as resolveNodeSystemdServiceName,i as NODE_SERVICE_KIND,m as resolveNodeLaunchAgentLabel,n as GATEWAY_SERVICE_KIND,o as NODE_WINDOWS_TASK_SCRIPT_NAME,r as GATEWAY_SERVICE_MARKER}from"./constants-D2th5NXV.js";import{n as isSupportedNodeVersion}from"./runtime-guard-Bi8k55v9.js";import{execFile}from"node:child_process";import os from"node:os";import path from"node:path";import{promisify}from"node:util";import fs from"node:fs/promises";function isNodeRuntime(execPath){let base=path.basename(execPath).toLowerCase();return base===`node`||base===`node.exe`}function isBunRuntime(execPath){let base=path.basename(execPath).toLowerCase();return base===`bun`||base===`bun.exe`}async function resolveCliEntrypointPathForService(){let argv1=process.argv[1];if(!argv1)throw Error(`Unable to resolve CLI entrypoint path`);let normalized=path.resolve(argv1),resolvedPath=await resolveRealpathSafe(normalized);if(/[/\\]dist[/\\].+\.(cjs|js|mjs)$/.test(resolvedPath)){if(await fs.access(resolvedPath),/[/\\]dist[/\\].+\.(cjs|js|mjs)$/.test(normalized)&&normalized!==resolvedPath)try{return await fs.access(normalized),normalized}catch{}return resolvedPath}let distCandidates=buildDistCandidates(resolvedPath,normalized);for(let candidate of distCandidates)try{return await fs.access(candidate),candidate}catch{}throw Error(`Cannot find built CLI at ${distCandidates.join(` or `)}. Run "pnpm build" first, or use dev mode.`)}async function resolveRealpathSafe(inputPath){try{return await fs.realpath(inputPath)}catch{return inputPath}}function buildDistCandidates(...inputs){let candidates=[],seen=new Set;for(let inputPath of inputs){if(!inputPath)continue;let baseDir=path.dirname(inputPath);appendDistCandidates(candidates,seen,path.resolve(baseDir,`..`)),appendDistCandidates(candidates,seen,baseDir),appendNodeModulesBinCandidates(candidates,seen,inputPath)}return candidates}function appendDistCandidates(candidates,seen,baseDir){let distDir=path.resolve(baseDir,`dist`),distEntries=[path.join(distDir,`index.js`),path.join(distDir,`index.mjs`),path.join(distDir,`entry.js`),path.join(distDir,`entry.mjs`)];for(let entry of distEntries)seen.has(entry)||(seen.add(entry),candidates.push(entry))}function appendNodeModulesBinCandidates(candidates,seen,inputPath){let parts=inputPath.split(path.sep),binIndex=parts.lastIndexOf(`.bin`);if(binIndex<=0||parts[binIndex-1]!==`node_modules`)return;let binName=path.basename(inputPath),nodeModulesDir=parts.slice(0,binIndex).join(path.sep);appendDistCandidates(candidates,seen,path.join(nodeModulesDir,binName))}function resolveRepoRootForDev(){let argv1=process.argv[1];if(!argv1)throw Error(`Unable to resolve repo root`);let parts=path.resolve(argv1).split(path.sep),srcIndex=parts.lastIndexOf(`src`);if(srcIndex===-1)throw Error(`Dev mode requires running from repo (src/index.ts)`);return parts.slice(0,srcIndex).join(path.sep)}async function resolveBunPath(){return await resolveBinaryPath(`bun`)}async function resolveNodePath(){return await resolveBinaryPath(`node`)}async function resolveBinaryPath(binary){let{execSync}=await import(`node:child_process`),cmd=process.platform===`win32`?`where`:`which`;try{let resolved=execSync(`${cmd} ${binary}`,{encoding:`utf8`}).trim().split(/\r?\n/)[0]?.trim();if(!resolved)throw Error(`empty`);return await fs.access(resolved),resolved}catch{throw binary===`bun`?Error(`Bun not found in PATH. Install bun: https://bun.sh`):Error(`Node not found in PATH. Install Node 22+.`)}}async function resolveCliProgramArguments(params){let execPath=process.execPath,runtime=params.runtime??`auto`;if(runtime===`node`)return{programArguments:[params.nodePath??(isNodeRuntime(execPath)?execPath:await resolveNodePath()),await resolveCliEntrypointPathForService(),...params.args]};if(runtime===`bun`){if(params.dev){let repoRoot=resolveRepoRootForDev(),devCliPath=path.join(repoRoot,`src`,`index.ts`);return await fs.access(devCliPath),{programArguments:[isBunRuntime(execPath)?execPath:await resolveBunPath(),devCliPath,...params.args],workingDirectory:repoRoot}}return{programArguments:[isBunRuntime(execPath)?execPath:await resolveBunPath(),await resolveCliEntrypointPathForService(),...params.args]}}if(!params.dev)try{return{programArguments:[execPath,await resolveCliEntrypointPathForService(),...params.args]}}catch(error){if(!isNodeRuntime(execPath))return{programArguments:[execPath,...params.args]};throw error}let repoRoot=resolveRepoRootForDev(),devCliPath=path.join(repoRoot,`src`,`index.ts`);return await fs.access(devCliPath),isBunRuntime(execPath)?{programArguments:[execPath,devCliPath,...params.args],workingDirectory:repoRoot}:{programArguments:[await resolveBunPath(),devCliPath,...params.args],workingDirectory:repoRoot}}async function resolveGatewayProgramArguments(params){return resolveCliProgramArguments({args:[`gateway`,`--port`,String(params.port)],dev:params.dev,runtime:params.runtime,nodePath:params.nodePath})}async function resolveNodeProgramArguments(params){let args=[`node`,`run`,`--host`,params.host,`--port`,String(params.port)];return(params.tls||params.tlsFingerprint)&&args.push(`--tls`),params.tlsFingerprint&&args.push(`--tls-fingerprint`,params.tlsFingerprint),params.nodeId&&args.push(`--node-id`,params.nodeId),params.displayName&&args.push(`--display-name`,params.displayName),resolveCliProgramArguments({args,dev:params.dev,runtime:params.runtime,nodePath:params.nodePath})}const VERSION_MANAGER_MARKERS=[`/.nvm/`,`/.fnm/`,`/.volta/`,`/.asdf/`,`/.n/`,`/.nodenv/`,`/.nodebrew/`,`/nvs/`];function getPathModule(platform){return platform===`win32`?path.win32:path.posix}function isNodeExecPath(execPath,platform){let base=getPathModule(platform).basename(execPath).toLowerCase();return base===`node`||base===`node.exe`}function normalizeForCompare(input,platform){let normalized=getPathModule(platform).normalize(input).replaceAll(`\\`,`/`);return platform===`win32`?normalized.toLowerCase():normalized}function buildSystemNodeCandidates(env,platform){if(platform===`darwin`)return[`/opt/homebrew/bin/node`,`/usr/local/bin/node`,`/usr/bin/node`];if(platform===`linux`)return[`/usr/local/bin/node`,`/usr/bin/node`];if(platform===`win32`){let pathModule=getPathModule(platform),programFiles=env.ProgramFiles??`C:\\Program Files`,programFilesX86=env[`ProgramFiles(x86)`]??`C:\\Program Files (x86)`;return[pathModule.join(programFiles,`nodejs`,`node.exe`),pathModule.join(programFilesX86,`nodejs`,`node.exe`)]}return[]}const execFileAsync=promisify(execFile);async function resolveNodeVersion(nodePath,execFileImpl){try{let{stdout}=await execFileImpl(nodePath,[`-p`,`process.versions.node`],{encoding:`utf8`});return stdout.trim()||null}catch{return null}}function isVersionManagedNodePath(nodePath,platform=process.platform){let normalized=normalizeForCompare(nodePath,platform);return VERSION_MANAGER_MARKERS.some(marker=>normalized.includes(marker))}function isSystemNodePath(nodePath,env=process.env,platform=process.platform){let normalized=normalizeForCompare(nodePath,platform);return buildSystemNodeCandidates(env,platform).some(candidate=>normalized===normalizeForCompare(candidate,platform))}async function resolveSystemNodePath(env=process.env,platform=process.platform){let candidates=buildSystemNodeCandidates(env,platform);for(let candidate of candidates)try{return await fs.access(candidate),candidate}catch{}return null}async function resolveSystemNodeInfo(params){let systemNode=await resolveSystemNodePath(params.env??process.env,params.platform??process.platform);if(!systemNode)return null;let version=await resolveNodeVersion(systemNode,params.execFile??execFileAsync);return{path:systemNode,version,supported:isSupportedNodeVersion(version)}}function renderSystemNodeWarning(systemNode,selectedNodePath){if(!systemNode||systemNode.supported)return null;let versionLabel=systemNode.version??`unknown`,selectedLabel=selectedNodePath?` Using ${selectedNodePath} for the daemon.`:``;return`System Node ${versionLabel} at ${systemNode.path} is below the required Node 22+.${selectedLabel} Install Node 22+ from nodejs.org or Homebrew.`}async function resolvePreferredNodePath(params){if(params.runtime!==`node`)return;let platform=params.platform??process.platform,currentExecPath=params.execPath??process.execPath;if(currentExecPath&&isNodeExecPath(currentExecPath,platform)&&isSupportedNodeVersion(await resolveNodeVersion(currentExecPath,params.execFile??execFileAsync)))return currentExecPath;let systemNode=await resolveSystemNodeInfo(params);if(systemNode?.supported)return systemNode.path}function addNonEmptyDir(dirs,dir){dir&&dirs.push(dir)}function appendSubdir(base,subdir){if(base)return base.endsWith(`/${subdir}`)?base:path.posix.join(base,subdir)}function addCommonUserBinDirs(dirs,home){dirs.push(`${home}/.local/bin`),dirs.push(`${home}/.npm-global/bin`),dirs.push(`${home}/bin`),dirs.push(`${home}/.volta/bin`),dirs.push(`${home}/.asdf/shims`),dirs.push(`${home}/.bun/bin`)}function resolveSystemPathDirs(platform){return platform===`darwin`?[`/opt/homebrew/bin`,`/usr/local/bin`,`/usr/bin`,`/bin`]:platform===`linux`?[`/usr/local/bin`,`/usr/bin`,`/bin`]:[]}function resolveDarwinUserBinDirs(home,env){if(!home)return[];let dirs=[];return addNonEmptyDir(dirs,env?.PNPM_HOME),addNonEmptyDir(dirs,appendSubdir(env?.NPM_CONFIG_PREFIX,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.BUN_INSTALL,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.VOLTA_HOME,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.ASDF_DATA_DIR,`shims`)),addNonEmptyDir(dirs,env?.NVM_DIR),addNonEmptyDir(dirs,appendSubdir(env?.FNM_DIR,`aliases/default/bin`)),addCommonUserBinDirs(dirs,home),dirs.push(`${home}/Library/Application Support/fnm/aliases/default/bin`),dirs.push(`${home}/.fnm/aliases/default/bin`),dirs.push(`${home}/Library/pnpm`),dirs.push(`${home}/.local/share/pnpm`),dirs}function resolveLinuxUserBinDirs(home,env){if(!home)return[];let dirs=[];return addNonEmptyDir(dirs,env?.PNPM_HOME),addNonEmptyDir(dirs,appendSubdir(env?.NPM_CONFIG_PREFIX,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.BUN_INSTALL,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.VOLTA_HOME,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.ASDF_DATA_DIR,`shims`)),addNonEmptyDir(dirs,appendSubdir(env?.NVM_DIR,`current/bin`)),addNonEmptyDir(dirs,appendSubdir(env?.FNM_DIR,`current/bin`)),addCommonUserBinDirs(dirs,home),dirs.push(`${home}/.nvm/current/bin`),dirs.push(`${home}/.fnm/current/bin`),dirs.push(`${home}/.local/share/pnpm`),dirs}function getMinimalServicePathParts(options={}){let platform=options.platform??process.platform;if(platform===`win32`)return[];let parts=[],extraDirs=options.extraDirs??[],systemDirs=resolveSystemPathDirs(platform),userDirs=platform===`linux`?resolveLinuxUserBinDirs(options.home,options.env):platform===`darwin`?resolveDarwinUserBinDirs(options.home,options.env):[],add=dir=>{dir&&(parts.includes(dir)||parts.push(dir))};for(let dir of extraDirs)add(dir);for(let dir of userDirs)add(dir);for(let dir of systemDirs)add(dir);return parts}function getMinimalServicePathPartsFromEnv(options={}){let env=options.env??process.env;return getMinimalServicePathParts({...options,home:options.home??env.HOME,env})}function buildMinimalServicePath(options={}){let env=options.env??process.env;return(options.platform??process.platform)===`win32`?env.PATH??``:getMinimalServicePathPartsFromEnv({...options,env}).join(path.posix.delimiter)}function buildServiceEnvironment(params){let{env,port,token,launchdLabel}=params,profile=env.BUILDERFORCE_AGENTS_PROFILE,resolvedLaunchdLabel=launchdLabel||(process.platform===`darwin`?resolveGatewayLaunchAgentLabel(profile):void 0),systemdUnit=`${resolveGatewaySystemdServiceName(profile)}.service`,stateDir=env.BUILDERFORCE_AGENTS_STATE_DIR?.trim()||resolveStateDir(env),configPath=env.BUILDERFORCE_AGENTS_CONFIG_PATH?.trim()||(stateDir?path.join(stateDir,`builderforce.json`):void 0),tmpDir=env.TMPDIR?.trim()||os.tmpdir();return{HOME:env.HOME,TMPDIR:tmpDir,PATH:buildMinimalServicePath({env}),BUILDERFORCE_AGENTS_PROFILE:profile,BUILDERFORCE_AGENTS_STATE_DIR:stateDir,BUILDERFORCE_AGENTS_CONFIG_PATH:configPath,BUILDERFORCE_AGENTS_GATEWAY_PORT:String(port),BUILDERFORCE_AGENTS_GATEWAY_TOKEN:token,BUILDERFORCE_AGENTS_LAUNCHD_LABEL:resolvedLaunchdLabel,BUILDERFORCE_AGENTS_SYSTEMD_UNIT:systemdUnit,BUILDERFORCE_AGENTS_SERVICE_MARKER:GATEWAY_SERVICE_MARKER,BUILDERFORCE_AGENTS_SERVICE_KIND:GATEWAY_SERVICE_KIND,BUILDERFORCE_AGENTS_SERVICE_VERSION:VERSION}}function buildNodeServiceEnvironment(params){let{env}=params,stateDir=env.BUILDERFORCE_AGENTS_STATE_DIR,configPath=env.BUILDERFORCE_AGENTS_CONFIG_PATH,tmpDir=env.TMPDIR?.trim()||os.tmpdir();return{HOME:env.HOME,TMPDIR:tmpDir,PATH:buildMinimalServicePath({env}),BUILDERFORCE_AGENTS_STATE_DIR:stateDir,BUILDERFORCE_AGENTS_CONFIG_PATH:configPath,BUILDERFORCE_AGENTS_LAUNCHD_LABEL:resolveNodeLaunchAgentLabel(),BUILDERFORCE_AGENTS_SYSTEMD_UNIT:resolveNodeSystemdServiceName(),BUILDERFORCE_AGENTS_WINDOWS_TASK_NAME:resolveNodeWindowsTaskName(),BUILDERFORCE_AGENTS_TASK_SCRIPT_NAME:NODE_WINDOWS_TASK_SCRIPT_NAME,BUILDERFORCE_AGENTS_LOG_PREFIX:`node`,BUILDERFORCE_AGENTS_SERVICE_MARKER:NODE_SERVICE_MARKER,BUILDERFORCE_AGENTS_SERVICE_KIND:NODE_SERVICE_KIND,BUILDERFORCE_AGENTS_SERVICE_VERSION:VERSION}}async function emitNodeRuntimeWarning(params){if(params.runtime!==`node`)return;let warning=renderSystemNodeWarning(await resolveSystemNodeInfo({env:params.env}),params.nodeProgram);warning&¶ms.warn?.(warning,params.title)}function resolveGatewayDevMode(argv=process.argv){let normalizedEntry=argv[1]?.replaceAll(`\\`,`/`);return!!(normalizedEntry?.includes(`/src/`)&&normalizedEntry.endsWith(`.ts`))}async function buildGatewayInstallPlan(params){let devMode=params.devMode??resolveGatewayDevMode(),nodePath=params.nodePath??await resolvePreferredNodePath({env:params.env,runtime:params.runtime}),{programArguments,workingDirectory}=await resolveGatewayProgramArguments({port:params.port,dev:devMode,runtime:params.runtime,nodePath});!workingDirectory&&process.platform===`win32`&&(workingDirectory=resolveRequiredHomeDir(params.env,os.homedir)),await emitNodeRuntimeWarning({env:params.env,runtime:params.runtime,nodeProgram:programArguments[0],warn:params.warn,title:`Gateway runtime`});let serviceEnvironment=buildServiceEnvironment({env:params.env,port:params.port,token:params.token,launchdLabel:process.platform===`darwin`?resolveGatewayLaunchAgentLabel(params.env.BUILDERFORCE_AGENTS_PROFILE):void 0}),environment={...collectConfigEnvVars(params.config)};return Object.assign(environment,serviceEnvironment),{programArguments,workingDirectory,environment}}function gatewayInstallErrorHint(platform=process.platform){return platform===`win32`?`Tip: rerun from an elevated PowerShell (Start → type PowerShell → right-click → Run as administrator) or skip service install.`:`Tip: rerun \`${formatCliCommand(`builderforce gateway install`)}\` after fixing the error.`}const DEFAULT_GATEWAY_DAEMON_RUNTIME=`node`,GATEWAY_DAEMON_RUNTIME_OPTIONS=[{value:`node`,label:`Node (recommended)`,hint:`Required for WhatsApp + Telegram. Bun can corrupt memory on reconnect.`}];function isGatewayDaemonRuntime(value){return value===`node`||value===`bun`}export{gatewayInstallErrorHint as a,buildNodeServiceEnvironment as c,isVersionManagedNodePath as d,renderSystemNodeWarning as f,resolveNodeProgramArguments as g,resolveSystemNodePath as h,buildGatewayInstallPlan as i,getMinimalServicePathPartsFromEnv as l,resolveSystemNodeInfo as m,GATEWAY_DAEMON_RUNTIME_OPTIONS as n,resolveGatewayDevMode as o,resolvePreferredNodePath as p,isGatewayDaemonRuntime as r,emitNodeRuntimeWarning as s,DEFAULT_GATEWAY_DAEMON_RUNTIME as t,isSystemNodePath as u};
|
|
1
|
+
import{g as resolveStateDir,y as resolveRequiredHomeDir}from"./paths-BHg-VHB4.js";import{t as formatCliCommand}from"./command-format-DTMaGKs7.js";import{U as VERSION,z as collectConfigEnvVars}from"./io-D9hC2aG0.js";import{a as NODE_SERVICE_MARKER,c as resolveGatewayLaunchAgentLabel,d as resolveGatewaySystemdServiceName,g as resolveNodeWindowsTaskName,h as resolveNodeSystemdServiceName,i as NODE_SERVICE_KIND,m as resolveNodeLaunchAgentLabel,n as GATEWAY_SERVICE_KIND,o as NODE_WINDOWS_TASK_SCRIPT_NAME,r as GATEWAY_SERVICE_MARKER}from"./constants-D2th5NXV.js";import{n as isSupportedNodeVersion}from"./runtime-guard-Bi8k55v9.js";import{execFile}from"node:child_process";import os from"node:os";import path from"node:path";import{promisify}from"node:util";import fs from"node:fs/promises";function isNodeRuntime(execPath){let base=path.basename(execPath).toLowerCase();return base===`node`||base===`node.exe`}function isBunRuntime(execPath){let base=path.basename(execPath).toLowerCase();return base===`bun`||base===`bun.exe`}async function resolveCliEntrypointPathForService(){let argv1=process.argv[1];if(!argv1)throw Error(`Unable to resolve CLI entrypoint path`);let normalized=path.resolve(argv1),resolvedPath=await resolveRealpathSafe(normalized);if(/[/\\]dist[/\\].+\.(cjs|js|mjs)$/.test(resolvedPath)){if(await fs.access(resolvedPath),/[/\\]dist[/\\].+\.(cjs|js|mjs)$/.test(normalized)&&normalized!==resolvedPath)try{return await fs.access(normalized),normalized}catch{}return resolvedPath}let distCandidates=buildDistCandidates(resolvedPath,normalized);for(let candidate of distCandidates)try{return await fs.access(candidate),candidate}catch{}throw Error(`Cannot find built CLI at ${distCandidates.join(` or `)}. Run "pnpm build" first, or use dev mode.`)}async function resolveRealpathSafe(inputPath){try{return await fs.realpath(inputPath)}catch{return inputPath}}function buildDistCandidates(...inputs){let candidates=[],seen=new Set;for(let inputPath of inputs){if(!inputPath)continue;let baseDir=path.dirname(inputPath);appendDistCandidates(candidates,seen,path.resolve(baseDir,`..`)),appendDistCandidates(candidates,seen,baseDir),appendNodeModulesBinCandidates(candidates,seen,inputPath)}return candidates}function appendDistCandidates(candidates,seen,baseDir){let distDir=path.resolve(baseDir,`dist`),distEntries=[path.join(distDir,`index.js`),path.join(distDir,`index.mjs`),path.join(distDir,`entry.js`),path.join(distDir,`entry.mjs`)];for(let entry of distEntries)seen.has(entry)||(seen.add(entry),candidates.push(entry))}function appendNodeModulesBinCandidates(candidates,seen,inputPath){let parts=inputPath.split(path.sep),binIndex=parts.lastIndexOf(`.bin`);if(binIndex<=0||parts[binIndex-1]!==`node_modules`)return;let binName=path.basename(inputPath),nodeModulesDir=parts.slice(0,binIndex).join(path.sep);appendDistCandidates(candidates,seen,path.join(nodeModulesDir,binName))}function resolveRepoRootForDev(){let argv1=process.argv[1];if(!argv1)throw Error(`Unable to resolve repo root`);let parts=path.resolve(argv1).split(path.sep),srcIndex=parts.lastIndexOf(`src`);if(srcIndex===-1)throw Error(`Dev mode requires running from repo (src/index.ts)`);return parts.slice(0,srcIndex).join(path.sep)}async function resolveBunPath(){return await resolveBinaryPath(`bun`)}async function resolveNodePath(){return await resolveBinaryPath(`node`)}async function resolveBinaryPath(binary){let{execSync}=await import(`node:child_process`),cmd=process.platform===`win32`?`where`:`which`;try{let resolved=execSync(`${cmd} ${binary}`,{encoding:`utf8`}).trim().split(/\r?\n/)[0]?.trim();if(!resolved)throw Error(`empty`);return await fs.access(resolved),resolved}catch{throw binary===`bun`?Error(`Bun not found in PATH. Install bun: https://bun.sh`):Error(`Node not found in PATH. Install Node 22+.`)}}async function resolveCliProgramArguments(params){let execPath=process.execPath,runtime=params.runtime??`auto`;if(runtime===`node`)return{programArguments:[params.nodePath??(isNodeRuntime(execPath)?execPath:await resolveNodePath()),await resolveCliEntrypointPathForService(),...params.args]};if(runtime===`bun`){if(params.dev){let repoRoot=resolveRepoRootForDev(),devCliPath=path.join(repoRoot,`src`,`index.ts`);return await fs.access(devCliPath),{programArguments:[isBunRuntime(execPath)?execPath:await resolveBunPath(),devCliPath,...params.args],workingDirectory:repoRoot}}return{programArguments:[isBunRuntime(execPath)?execPath:await resolveBunPath(),await resolveCliEntrypointPathForService(),...params.args]}}if(!params.dev)try{return{programArguments:[execPath,await resolveCliEntrypointPathForService(),...params.args]}}catch(error){if(!isNodeRuntime(execPath))return{programArguments:[execPath,...params.args]};throw error}let repoRoot=resolveRepoRootForDev(),devCliPath=path.join(repoRoot,`src`,`index.ts`);return await fs.access(devCliPath),isBunRuntime(execPath)?{programArguments:[execPath,devCliPath,...params.args],workingDirectory:repoRoot}:{programArguments:[await resolveBunPath(),devCliPath,...params.args],workingDirectory:repoRoot}}async function resolveGatewayProgramArguments(params){return resolveCliProgramArguments({args:[`gateway`,`--port`,String(params.port)],dev:params.dev,runtime:params.runtime,nodePath:params.nodePath})}async function resolveNodeProgramArguments(params){let args=[`node`,`run`,`--host`,params.host,`--port`,String(params.port)];return(params.tls||params.tlsFingerprint)&&args.push(`--tls`),params.tlsFingerprint&&args.push(`--tls-fingerprint`,params.tlsFingerprint),params.nodeId&&args.push(`--node-id`,params.nodeId),params.displayName&&args.push(`--display-name`,params.displayName),resolveCliProgramArguments({args,dev:params.dev,runtime:params.runtime,nodePath:params.nodePath})}const VERSION_MANAGER_MARKERS=[`/.nvm/`,`/.fnm/`,`/.volta/`,`/.asdf/`,`/.n/`,`/.nodenv/`,`/.nodebrew/`,`/nvs/`];function getPathModule(platform){return platform===`win32`?path.win32:path.posix}function isNodeExecPath(execPath,platform){let base=getPathModule(platform).basename(execPath).toLowerCase();return base===`node`||base===`node.exe`}function normalizeForCompare(input,platform){let normalized=getPathModule(platform).normalize(input).replaceAll(`\\`,`/`);return platform===`win32`?normalized.toLowerCase():normalized}function buildSystemNodeCandidates(env,platform){if(platform===`darwin`)return[`/opt/homebrew/bin/node`,`/usr/local/bin/node`,`/usr/bin/node`];if(platform===`linux`)return[`/usr/local/bin/node`,`/usr/bin/node`];if(platform===`win32`){let pathModule=getPathModule(platform),programFiles=env.ProgramFiles??`C:\\Program Files`,programFilesX86=env[`ProgramFiles(x86)`]??`C:\\Program Files (x86)`;return[pathModule.join(programFiles,`nodejs`,`node.exe`),pathModule.join(programFilesX86,`nodejs`,`node.exe`)]}return[]}const execFileAsync=promisify(execFile);async function resolveNodeVersion(nodePath,execFileImpl){try{let{stdout}=await execFileImpl(nodePath,[`-p`,`process.versions.node`],{encoding:`utf8`});return stdout.trim()||null}catch{return null}}function isVersionManagedNodePath(nodePath,platform=process.platform){let normalized=normalizeForCompare(nodePath,platform);return VERSION_MANAGER_MARKERS.some(marker=>normalized.includes(marker))}function isSystemNodePath(nodePath,env=process.env,platform=process.platform){let normalized=normalizeForCompare(nodePath,platform);return buildSystemNodeCandidates(env,platform).some(candidate=>normalized===normalizeForCompare(candidate,platform))}async function resolveSystemNodePath(env=process.env,platform=process.platform){let candidates=buildSystemNodeCandidates(env,platform);for(let candidate of candidates)try{return await fs.access(candidate),candidate}catch{}return null}async function resolveSystemNodeInfo(params){let systemNode=await resolveSystemNodePath(params.env??process.env,params.platform??process.platform);if(!systemNode)return null;let version=await resolveNodeVersion(systemNode,params.execFile??execFileAsync);return{path:systemNode,version,supported:isSupportedNodeVersion(version)}}function renderSystemNodeWarning(systemNode,selectedNodePath){if(!systemNode||systemNode.supported)return null;let versionLabel=systemNode.version??`unknown`,selectedLabel=selectedNodePath?` Using ${selectedNodePath} for the daemon.`:``;return`System Node ${versionLabel} at ${systemNode.path} is below the required Node 22+.${selectedLabel} Install Node 22+ from nodejs.org or Homebrew.`}async function resolvePreferredNodePath(params){if(params.runtime!==`node`)return;let platform=params.platform??process.platform,currentExecPath=params.execPath??process.execPath;if(currentExecPath&&isNodeExecPath(currentExecPath,platform)&&isSupportedNodeVersion(await resolveNodeVersion(currentExecPath,params.execFile??execFileAsync)))return currentExecPath;let systemNode=await resolveSystemNodeInfo(params);if(systemNode?.supported)return systemNode.path}function addNonEmptyDir(dirs,dir){dir&&dirs.push(dir)}function appendSubdir(base,subdir){if(base)return base.endsWith(`/${subdir}`)?base:path.posix.join(base,subdir)}function addCommonUserBinDirs(dirs,home){dirs.push(`${home}/.local/bin`),dirs.push(`${home}/.npm-global/bin`),dirs.push(`${home}/bin`),dirs.push(`${home}/.volta/bin`),dirs.push(`${home}/.asdf/shims`),dirs.push(`${home}/.bun/bin`)}function resolveSystemPathDirs(platform){return platform===`darwin`?[`/opt/homebrew/bin`,`/usr/local/bin`,`/usr/bin`,`/bin`]:platform===`linux`?[`/usr/local/bin`,`/usr/bin`,`/bin`]:[]}function resolveDarwinUserBinDirs(home,env){if(!home)return[];let dirs=[];return addNonEmptyDir(dirs,env?.PNPM_HOME),addNonEmptyDir(dirs,appendSubdir(env?.NPM_CONFIG_PREFIX,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.BUN_INSTALL,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.VOLTA_HOME,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.ASDF_DATA_DIR,`shims`)),addNonEmptyDir(dirs,env?.NVM_DIR),addNonEmptyDir(dirs,appendSubdir(env?.FNM_DIR,`aliases/default/bin`)),addCommonUserBinDirs(dirs,home),dirs.push(`${home}/Library/Application Support/fnm/aliases/default/bin`),dirs.push(`${home}/.fnm/aliases/default/bin`),dirs.push(`${home}/Library/pnpm`),dirs.push(`${home}/.local/share/pnpm`),dirs}function resolveLinuxUserBinDirs(home,env){if(!home)return[];let dirs=[];return addNonEmptyDir(dirs,env?.PNPM_HOME),addNonEmptyDir(dirs,appendSubdir(env?.NPM_CONFIG_PREFIX,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.BUN_INSTALL,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.VOLTA_HOME,`bin`)),addNonEmptyDir(dirs,appendSubdir(env?.ASDF_DATA_DIR,`shims`)),addNonEmptyDir(dirs,appendSubdir(env?.NVM_DIR,`current/bin`)),addNonEmptyDir(dirs,appendSubdir(env?.FNM_DIR,`current/bin`)),addCommonUserBinDirs(dirs,home),dirs.push(`${home}/.nvm/current/bin`),dirs.push(`${home}/.fnm/current/bin`),dirs.push(`${home}/.local/share/pnpm`),dirs}function getMinimalServicePathParts(options={}){let platform=options.platform??process.platform;if(platform===`win32`)return[];let parts=[],extraDirs=options.extraDirs??[],systemDirs=resolveSystemPathDirs(platform),userDirs=platform===`linux`?resolveLinuxUserBinDirs(options.home,options.env):platform===`darwin`?resolveDarwinUserBinDirs(options.home,options.env):[],add=dir=>{dir&&(parts.includes(dir)||parts.push(dir))};for(let dir of extraDirs)add(dir);for(let dir of userDirs)add(dir);for(let dir of systemDirs)add(dir);return parts}function getMinimalServicePathPartsFromEnv(options={}){let env=options.env??process.env;return getMinimalServicePathParts({...options,home:options.home??env.HOME,env})}function buildMinimalServicePath(options={}){let env=options.env??process.env;return(options.platform??process.platform)===`win32`?env.PATH??``:getMinimalServicePathPartsFromEnv({...options,env}).join(path.posix.delimiter)}function buildServiceEnvironment(params){let{env,port,token,launchdLabel}=params,profile=env.BUILDERFORCE_AGENTS_PROFILE,resolvedLaunchdLabel=launchdLabel||(process.platform===`darwin`?resolveGatewayLaunchAgentLabel(profile):void 0),systemdUnit=`${resolveGatewaySystemdServiceName(profile)}.service`,stateDir=env.BUILDERFORCE_AGENTS_STATE_DIR?.trim()||resolveStateDir(env),configPath=env.BUILDERFORCE_AGENTS_CONFIG_PATH?.trim()||(stateDir?path.join(stateDir,`builderforce.json`):void 0),tmpDir=env.TMPDIR?.trim()||os.tmpdir();return{HOME:env.HOME,TMPDIR:tmpDir,PATH:buildMinimalServicePath({env}),BUILDERFORCE_AGENTS_PROFILE:profile,BUILDERFORCE_AGENTS_STATE_DIR:stateDir,BUILDERFORCE_AGENTS_CONFIG_PATH:configPath,BUILDERFORCE_AGENTS_GATEWAY_PORT:String(port),BUILDERFORCE_AGENTS_GATEWAY_TOKEN:token,BUILDERFORCE_AGENTS_LAUNCHD_LABEL:resolvedLaunchdLabel,BUILDERFORCE_AGENTS_SYSTEMD_UNIT:systemdUnit,BUILDERFORCE_AGENTS_SERVICE_MARKER:GATEWAY_SERVICE_MARKER,BUILDERFORCE_AGENTS_SERVICE_KIND:GATEWAY_SERVICE_KIND,BUILDERFORCE_AGENTS_SERVICE_VERSION:VERSION}}function buildNodeServiceEnvironment(params){let{env}=params,stateDir=env.BUILDERFORCE_AGENTS_STATE_DIR,configPath=env.BUILDERFORCE_AGENTS_CONFIG_PATH,tmpDir=env.TMPDIR?.trim()||os.tmpdir();return{HOME:env.HOME,TMPDIR:tmpDir,PATH:buildMinimalServicePath({env}),BUILDERFORCE_AGENTS_STATE_DIR:stateDir,BUILDERFORCE_AGENTS_CONFIG_PATH:configPath,BUILDERFORCE_AGENTS_LAUNCHD_LABEL:resolveNodeLaunchAgentLabel(),BUILDERFORCE_AGENTS_SYSTEMD_UNIT:resolveNodeSystemdServiceName(),BUILDERFORCE_AGENTS_WINDOWS_TASK_NAME:resolveNodeWindowsTaskName(),BUILDERFORCE_AGENTS_TASK_SCRIPT_NAME:NODE_WINDOWS_TASK_SCRIPT_NAME,BUILDERFORCE_AGENTS_LOG_PREFIX:`node`,BUILDERFORCE_AGENTS_SERVICE_MARKER:NODE_SERVICE_MARKER,BUILDERFORCE_AGENTS_SERVICE_KIND:NODE_SERVICE_KIND,BUILDERFORCE_AGENTS_SERVICE_VERSION:VERSION}}async function emitNodeRuntimeWarning(params){if(params.runtime!==`node`)return;let warning=renderSystemNodeWarning(await resolveSystemNodeInfo({env:params.env}),params.nodeProgram);warning&¶ms.warn?.(warning,params.title)}function resolveGatewayDevMode(argv=process.argv){let normalizedEntry=argv[1]?.replaceAll(`\\`,`/`);return!!(normalizedEntry?.includes(`/src/`)&&normalizedEntry.endsWith(`.ts`))}async function buildGatewayInstallPlan(params){let devMode=params.devMode??resolveGatewayDevMode(),nodePath=params.nodePath??await resolvePreferredNodePath({env:params.env,runtime:params.runtime}),{programArguments,workingDirectory}=await resolveGatewayProgramArguments({port:params.port,dev:devMode,runtime:params.runtime,nodePath});!workingDirectory&&process.platform===`win32`&&(workingDirectory=resolveRequiredHomeDir(params.env,os.homedir)),await emitNodeRuntimeWarning({env:params.env,runtime:params.runtime,nodeProgram:programArguments[0],warn:params.warn,title:`Gateway runtime`});let serviceEnvironment=buildServiceEnvironment({env:params.env,port:params.port,token:params.token,launchdLabel:process.platform===`darwin`?resolveGatewayLaunchAgentLabel(params.env.BUILDERFORCE_AGENTS_PROFILE):void 0}),environment={...collectConfigEnvVars(params.config)};return Object.assign(environment,serviceEnvironment),{programArguments,workingDirectory,environment}}function gatewayInstallErrorHint(platform=process.platform){return platform===`win32`?`Tip: rerun from an elevated PowerShell (Start → type PowerShell → right-click → Run as administrator) or skip service install.`:`Tip: rerun \`${formatCliCommand(`builderforce gateway install`)}\` after fixing the error.`}const DEFAULT_GATEWAY_DAEMON_RUNTIME=`node`,GATEWAY_DAEMON_RUNTIME_OPTIONS=[{value:`node`,label:`Node (recommended)`,hint:`Required for WhatsApp + Telegram. Bun can corrupt memory on reconnect.`}];function isGatewayDaemonRuntime(value){return value===`node`||value===`bun`}export{gatewayInstallErrorHint as a,buildNodeServiceEnvironment as c,isVersionManagedNodePath as d,renderSystemNodeWarning as f,resolveNodeProgramArguments as g,resolveSystemNodePath as h,buildGatewayInstallPlan as i,getMinimalServicePathPartsFromEnv as l,resolveSystemNodeInfo as m,GATEWAY_DAEMON_RUNTIME_OPTIONS as n,resolveGatewayDevMode as o,resolvePreferredNodePath as p,isGatewayDaemonRuntime as r,emitNodeRuntimeWarning as s,DEFAULT_GATEWAY_DAEMON_RUNTIME as t,isSystemNodePath as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as isMessagingToolDuplicate}from"./embedded-helpers-
|
|
1
|
+
import{i as isMessagingToolDuplicate}from"./embedded-helpers-C9jpiwlw.js";import{u as normalizeAccountId$1}from"./session-key-EoB0qaG9.js";import{t as createSubsystemLogger}from"./subsystem-B3TqcCrZ.js";import{C as createInternalHookEvent,T as triggerInternalHook,d as getActivePluginRegistry}from"./registry-TdK-aV05.js";import{W as getChannelDock,i as resolveMirroredTranscriptText,r as appendAssistantMessageToSessionTranscript}from"./sessions-BuZVmOWt.js";import{r as normalizeChannelId,t as getChannelPlugin}from"./plugins-D5zP6ENo.js";import{n as SILENT_REPLY_TOKEN,r as isSilentReplyText}from"./tokens-CCU3zO-D.js";import{c as resolveTextChunkLimit,d as parseFenceSpans,i as chunkMarkdownTextWithMode,n as chunkByParagraph,s as resolveChunkMode}from"./chunk-FCBlVOyo.js";import{t as resolveMarkdownTableMode}from"./markdown-tables-P6uoUSFa.js";import{s as getAgentScopedMediaLocalRoots}from"./ir-5BNoIXZm.js";import{c as markdownToSignalTextChunks,t as sendMessageSignal}from"./send-BP5osGBo.js";import{i as enqueueDelivery,n as ackDelivery,o as failDelivery}from"./delivery-queue-CXKynF1P.js";function getHooksForName(registry,hookName){return registry.typedHooks.filter(h=>h.hookName===hookName).toSorted((a,b)=>(b.priority??0)-(a.priority??0))}function createHookRunner(registry,options={}){let logger=options.logger,catchErrors=options.catchErrors??!0,mergeBeforeModelResolve=(acc,next)=>({modelOverride:acc?.modelOverride??next.modelOverride,providerOverride:acc?.providerOverride??next.providerOverride}),mergeBeforePromptBuild=(acc,next)=>({systemPrompt:next.systemPrompt??acc?.systemPrompt,prependContext:acc?.prependContext&&next.prependContext?`${acc.prependContext}\n\n${next.prependContext}`:next.prependContext??acc?.prependContext});async function runVoidHook(hookName,event,ctx){let hooks=getHooksForName(registry,hookName);if(hooks.length===0)return;logger?.debug?.(`[hooks] running ${hookName} (${hooks.length} handlers)`);let promises=hooks.map(async hook=>{try{await hook.handler(event,ctx)}catch(err){let msg=`[hooks] ${hookName} handler from ${hook.pluginId} failed: ${String(err)}`;if(catchErrors)logger?.error(msg);else throw Error(msg,{cause:err})}});await Promise.all(promises)}async function runModifyingHook(hookName,event,ctx,mergeResults){let hooks=getHooksForName(registry,hookName);if(hooks.length===0)return;logger?.debug?.(`[hooks] running ${hookName} (${hooks.length} handlers, sequential)`);let result;for(let hook of hooks)try{let handlerResult=await hook.handler(event,ctx);handlerResult!=null&&(result=mergeResults&&result!==void 0?mergeResults(result,handlerResult):handlerResult)}catch(err){let msg=`[hooks] ${hookName} handler from ${hook.pluginId} failed: ${String(err)}`;if(catchErrors)logger?.error(msg);else throw Error(msg,{cause:err})}return result}async function runBeforeModelResolve(event,ctx){return runModifyingHook(`before_model_resolve`,event,ctx,mergeBeforeModelResolve)}async function runBeforePromptBuild(event,ctx){return runModifyingHook(`before_prompt_build`,event,ctx,mergeBeforePromptBuild)}async function runBeforeAgentStart(event,ctx){return runModifyingHook(`before_agent_start`,event,ctx,(acc,next)=>({...mergeBeforePromptBuild(acc,next),...mergeBeforeModelResolve(acc,next)}))}async function runAgentEnd(event,ctx){return runVoidHook(`agent_end`,event,ctx)}async function runLlmInput(event,ctx){return runVoidHook(`llm_input`,event,ctx)}async function runLlmOutput(event,ctx){return runVoidHook(`llm_output`,event,ctx)}async function runBeforeCompaction(event,ctx){return runVoidHook(`before_compaction`,event,ctx)}async function runAfterCompaction(event,ctx){return runVoidHook(`after_compaction`,event,ctx)}async function runBeforeReset(event,ctx){return runVoidHook(`before_reset`,event,ctx)}async function runMessageReceived(event,ctx){return runVoidHook(`message_received`,event,ctx)}async function runMessageSending(event,ctx){return runModifyingHook(`message_sending`,event,ctx,(acc,next)=>({content:next.content??acc?.content,cancel:next.cancel??acc?.cancel}))}async function runMessageSent(event,ctx){return runVoidHook(`message_sent`,event,ctx)}async function runBeforeToolCall(event,ctx){return runModifyingHook(`before_tool_call`,event,ctx,(acc,next)=>({params:next.params??acc?.params,block:next.block??acc?.block,blockReason:next.blockReason??acc?.blockReason}))}async function runAfterToolCall(event,ctx){return runVoidHook(`after_tool_call`,event,ctx)}function runToolResultPersist(event,ctx){let hooks=getHooksForName(registry,`tool_result_persist`);if(hooks.length===0)return;let current=event.message;for(let hook of hooks)try{let out=hook.handler({...event,message:current},ctx);if(out&&typeof out.then==`function`){let msg=`[hooks] tool_result_persist handler from ${hook.pluginId} returned a Promise; this hook is synchronous and the result was ignored.`;if(catchErrors){logger?.warn?.(msg);continue}throw Error(msg)}let next=out?.message;next&&(current=next)}catch(err){let msg=`[hooks] tool_result_persist handler from ${hook.pluginId} failed: ${String(err)}`;if(catchErrors)logger?.error(msg);else throw Error(msg,{cause:err})}return{message:current}}function runBeforeMessageWrite(event,ctx){let hooks=getHooksForName(registry,`before_message_write`);if(hooks.length===0)return;let current=event.message;for(let hook of hooks)try{let out=hook.handler({...event,message:current},ctx);if(out&&typeof out.then==`function`){let msg=`[hooks] before_message_write handler from ${hook.pluginId} returned a Promise; this hook is synchronous and the result was ignored.`;if(catchErrors){logger?.warn?.(msg);continue}throw Error(msg)}let result=out;if(result?.block)return{block:!0};result?.message&&(current=result.message)}catch(err){let msg=`[hooks] before_message_write handler from ${hook.pluginId} failed: ${String(err)}`;if(catchErrors)logger?.error(msg);else throw Error(msg,{cause:err})}if(current!==event.message)return{message:current}}async function runSessionStart(event,ctx){return runVoidHook(`session_start`,event,ctx)}async function runSessionEnd(event,ctx){return runVoidHook(`session_end`,event,ctx)}async function runGatewayStart(event,ctx){return runVoidHook(`gateway_start`,event,ctx)}async function runGatewayStop(event,ctx){return runVoidHook(`gateway_stop`,event,ctx)}function hasHooks(hookName){return registry.typedHooks.some(h=>h.hookName===hookName)}function getHookCount(hookName){return registry.typedHooks.filter(h=>h.hookName===hookName).length}return{runBeforeModelResolve,runBeforePromptBuild,runBeforeAgentStart,runLlmInput,runLlmOutput,runAgentEnd,runBeforeCompaction,runAfterCompaction,runBeforeReset,runMessageReceived,runMessageSending,runMessageSent,runBeforeToolCall,runAfterToolCall,runToolResultPersist,runBeforeMessageWrite,runSessionStart,runSessionEnd,runGatewayStart,runGatewayStop,hasHooks,getHookCount}}const log=createSubsystemLogger(`plugins`);let globalHookRunner=null;function initializeGlobalHookRunner(registry){globalHookRunner=createHookRunner(registry,{logger:{debug:msg=>log.debug(msg),warn:msg=>log.warn(msg),error:msg=>log.error(msg)},catchErrors:!0});let hookCount=registry.hooks.length;hookCount>0&&log.info(`hook runner initialized with ${hookCount} registered hooks`)}function getGlobalHookRunner(){return globalHookRunner}async function runGlobalGatewayStopSafely(params){let hookRunner=getGlobalHookRunner();if(hookRunner?.hasHooks(`gateway_stop`))try{await hookRunner.runGatewayStop(params.event,params.ctx)}catch(err){if(params.onError){params.onError(err);return}log.warn(`gateway_stop hook failed: ${String(err)}`)}}const MB=1024*1024;function resolveChannelMediaMaxBytes(params){let accountId=normalizeAccountId$1(params.accountId),channelLimit=params.resolveChannelLimitMb({cfg:params.cfg,accountId});if(channelLimit)return channelLimit*MB;if(params.cfg.agents?.defaults?.mediaMaxMb)return params.cfg.agents.defaults.mediaMaxMb*MB}const cache=new Map;let lastRegistry=null;function ensureCacheForRegistry(registry){registry!==lastRegistry&&(cache.clear(),lastRegistry=registry)}async function loadChannelOutboundAdapter(id){let registry=getActivePluginRegistry();ensureCacheForRegistry(registry);let cached=cache.get(id);if(cached)return cached;let outbound=(registry?.channels.find(entry=>entry.plugin.id===id))?.plugin.outbound;if(outbound)return cache.set(id,outbound),outbound}function stripWhatsAppLeadingBlankLines(text){return text.replace(/^(?:[ \t]*\r?\n)+/,``)}function throwIfAborted(abortSignal){if(abortSignal?.aborted){let err=Error(`Operation aborted`);throw err.name=`AbortError`,err}}const AUDIO_TAG_RE=/\[\[\s*audio_as_voice\s*\]\]/gi,REPLY_TAG_RE=/\[\[\s*(?:reply_to_current|reply_to\s*:\s*([^\]\n]+))\s*\]\]/gi;function normalizeDirectiveWhitespace(text){return text.replace(/[ \t]+/g,` `).replace(/[ \t]*\n[ \t]*/g,`
|
|
2
2
|
`).trim()}function parseInlineDirectives(text,options={}){let{currentMessageId,stripAudioTag=!0,stripReplyTags=!0}=options;if(!text)return{text:``,audioAsVoice:!1,replyToCurrent:!1,hasAudioTag:!1,hasReplyTag:!1};let cleaned=text,audioAsVoice=!1,hasAudioTag=!1,hasReplyTag=!1,sawCurrent=!1,lastExplicitId;cleaned=cleaned.replace(AUDIO_TAG_RE,match=>(audioAsVoice=!0,hasAudioTag=!0,stripAudioTag?` `:match)),cleaned=cleaned.replace(REPLY_TAG_RE,(match,idRaw)=>{if(hasReplyTag=!0,idRaw===void 0)sawCurrent=!0;else{let id=idRaw.trim();id&&(lastExplicitId=id)}return stripReplyTags?` `:match}),cleaned=normalizeDirectiveWhitespace(cleaned);let replyToId=lastExplicitId??(sawCurrent&¤tMessageId?.trim()||void 0);return{text:cleaned,audioAsVoice,replyToId,replyToExplicitId:lastExplicitId,replyToCurrent:sawCurrent,hasAudioTag,hasReplyTag}}function parseAudioTag(text){let result=parseInlineDirectives(text,{stripReplyTags:!1});return{text:result.text,audioAsVoice:result.audioAsVoice,hadTag:result.hasAudioTag}}const MEDIA_TOKEN_RE=/\bMEDIA:\s*`?([^\n]+)`?/gi;function normalizeMediaSource(src){return src.startsWith(`file://`)?src.replace(`file://`,``):src}function cleanCandidate(raw){return raw.replace(/^[`"'[{(]+/,``).replace(/[`"'\\})\],]+$/,``)}const WINDOWS_DRIVE_RE=/^[a-zA-Z]:[\\/]/,SCHEME_RE=/^[a-zA-Z][a-zA-Z0-9+.-]*:/,HAS_FILE_EXT=/\.\w{1,10}$/;function isLikelyLocalPath(candidate){return candidate.startsWith(`/`)||candidate.startsWith(`./`)||candidate.startsWith(`../`)||candidate.startsWith(`~`)||WINDOWS_DRIVE_RE.test(candidate)||candidate.startsWith(`\\\\`)||!SCHEME_RE.test(candidate)&&(candidate.includes(`/`)||candidate.includes(`\\`))}function isValidMedia(candidate,opts){return!candidate||candidate.length>4096||!opts?.allowSpaces&&/\s/.test(candidate)?!1:!!(/^https?:\/\//i.test(candidate)||isLikelyLocalPath(candidate)||opts?.allowBareFilename&&!SCHEME_RE.test(candidate)&&HAS_FILE_EXT.test(candidate))}function unwrapQuoted(value){let trimmed=value.trim();if(trimmed.length<2)return;let first=trimmed[0];if(first===trimmed[trimmed.length-1]&&!(first!==`"`&&first!==`'`&&first!=="`"))return trimmed.slice(1,-1).trim()}function isInsideFence(fenceSpans,offset){return fenceSpans.some(span=>offset>=span.start&&offset<span.end)}function splitMediaFromOutput(raw){let trimmedRaw=raw.trimEnd();if(!trimmedRaw.trim())return{text:``};let media=[],foundMediaToken=!1,fenceSpans=parseFenceSpans(trimmedRaw),lines=trimmedRaw.split(`
|
|
3
3
|
`),keptLines=[],lineOffset=0;for(let line of lines){if(isInsideFence(fenceSpans,lineOffset)){keptLines.push(line),lineOffset+=line.length+1;continue}if(!line.trimStart().startsWith(`MEDIA:`)){keptLines.push(line),lineOffset+=line.length+1;continue}let matches=Array.from(line.matchAll(MEDIA_TOKEN_RE));if(matches.length===0){keptLines.push(line),lineOffset+=line.length+1;continue}let pieces=[],cursor=0;for(let match of matches){let start=match.index??0;pieces.push(line.slice(cursor,start));let payload=match[1],unwrapped=unwrapQuoted(payload),payloadValue=unwrapped??payload,parts=unwrapped?[unwrapped]:payload.split(/\s+/).filter(Boolean),mediaStartIndex=media.length,validCount=0,invalidParts=[],hasValidMedia=!1;for(let part of parts){let candidate=normalizeMediaSource(cleanCandidate(part));isValidMedia(candidate,unwrapped?{allowSpaces:!0}:void 0)?(media.push(candidate),hasValidMedia=!0,foundMediaToken=!0,validCount+=1):invalidParts.push(part)}let trimmedPayload=payloadValue.trim(),looksLikeLocalPath=isLikelyLocalPath(trimmedPayload)||trimmedPayload.startsWith(`file://`);if(!unwrapped&&validCount===1&&invalidParts.length>0&&/\s/.test(payloadValue)&&looksLikeLocalPath){let fallback=normalizeMediaSource(cleanCandidate(payloadValue));isValidMedia(fallback,{allowSpaces:!0})&&(media.splice(mediaStartIndex,media.length-mediaStartIndex,fallback),hasValidMedia=!0,foundMediaToken=!0,validCount=1,invalidParts.length=0)}if(!hasValidMedia){let fallback=normalizeMediaSource(cleanCandidate(payloadValue));isValidMedia(fallback,{allowSpaces:!0,allowBareFilename:!0})&&(media.push(fallback),hasValidMedia=!0,foundMediaToken=!0,invalidParts.length=0)}hasValidMedia?invalidParts.length>0&&pieces.push(invalidParts.join(` `)):looksLikeLocalPath?foundMediaToken=!0:pieces.push(match[0]),cursor=start+match[0].length}pieces.push(line.slice(cursor));let cleanedLine=pieces.join(``).replace(/[ \t]{2,}/g,` `).trim();cleanedLine&&keptLines.push(cleanedLine),lineOffset+=line.length+1}let cleanedText=keptLines.join(`
|
|
4
4
|
`).replace(/[ \t]+\n/g,`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./embedded-helpers-
|
|
1
|
+
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./embedded-helpers-C9jpiwlw.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-DG9J_VTz.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-BLBq4T2o.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BgV_FYSq.js";import"./sandbox-C4AKi2EX.js";import"./chrome-DXt86tmV.js";import"./tailscale-DLkpGquM.js";import"./auth-lebUHrkd.js";import"./server-context-CQ2v4BAx.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./routes-DZntyPY6.js";import"./redact-BHdfp2MZ.js";import"./errors-B1MIg3g-.js";import"./paths-cR8ct-Y3.js";import"./ssrf-p9k-iapc.js";import"./image-ops-C8IUQKjn.js";import"./store-CmHBQ-yX.js";import"./ports-DgmEDNOm.js";import"./trash-DD2Hc5oq.js";import"./sessions-BuZVmOWt.js";import"./message-channel-D_jXxXQj.js";import"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./accounts-rmXEiebi.js";import"./accounts-BLueHgKj.js";import"./bindings-DR59065T.js";import"./paths-DJ6rztqJ.js";import"./tool-images-B7b_OiMz.js";import"./fetch-guard-8mwt3-hm.js";import"./fetch-BuOLY9KP.js";import"./tokens-CCU3zO-D.js";import{t as deliverOutboundPayloads}from"./deliver--6OBF3LL.js";import"./chunk-FCBlVOyo.js";import"./markdown-tables-P6uoUSFa.js";import"./ir-5BNoIXZm.js";import"./send-BP5osGBo.js";import"./outbound-attachment-C7wByQO5.js";import"./fetch-DnVtDecb.js";import"./delivery-queue-CXKynF1P.js";export{deliverOutboundPayloads};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-
|
|
1
|
+
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-pt7Tr4HA.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-D9hC2aG0.js";import"./manifest-registry-009gLJ4l.js";import"./config-BpChMIJ6.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./message-channel-z5YRpR2d.js";import"./sessions-BA8Se_bT.js";import"./tokens-CFKkpUIu.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import{t as deliverOutboundPayloads}from"./deliver-CsG0cHbZ.js";import"./accounts-Cx82nj4E.js";import"./image-ops-CotJhwRR.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./embedded-helpers-DdU30lmt.js";import"./sandbox-DvKMuAXL.js";import"./chrome-CFmcixaE.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-CttALzrW.js";import"./routes-_iZdG1Fo.js";import"./paths-BnOjueoX.js";import"./ssrf-DJXLYZ0d.js";import"./store-DHD2IEgd.js";import"./ports-DTku9NSx.js";import"./trash-C3zmJ_O7.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./tool-images-CCpqFtrL.js";import"./chunk-Dly7lM4r.js";import"./markdown-tables-B1Rx8hv6.js";import"./fetch-guard-DnXqPKae.js";import"./fetch-Cn_THzz8.js";import"./ir-CSdQJPqu.js";import"./fetch-DnWD6ydH.js";import"./send-kkm_zrHQ.js";import"./outbound-attachment-BaTYE4qp.js";import"./delivery-queue-Cp3t4Upn.js";export{deliverOutboundPayloads};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{C as createInternalHookEvent,T as triggerInternalHook,d as getActivePluginRegistry}from"./registry-Cv7CoWAs.js";import{t as createSubsystemLogger}from"./subsystem-C4b1Von0.js";import{u as normalizeAccountId$1}from"./session-key-CksCYipj.js";import{L as getChannelDock,i as resolveMirroredTranscriptText,r as appendAssistantMessageToSessionTranscript}from"./sessions-
|
|
1
|
+
import{C as createInternalHookEvent,T as triggerInternalHook,d as getActivePluginRegistry}from"./registry-Cv7CoWAs.js";import{t as createSubsystemLogger}from"./subsystem-C4b1Von0.js";import{u as normalizeAccountId$1}from"./session-key-CksCYipj.js";import{L as getChannelDock,i as resolveMirroredTranscriptText,r as appendAssistantMessageToSessionTranscript}from"./sessions-BA8Se_bT.js";import{n as SILENT_REPLY_TOKEN,r as isSilentReplyText}from"./tokens-CFKkpUIu.js";import{r as normalizeChannelId,t as getChannelPlugin}from"./plugins-1Mn6RiNf.js";import{h as isMessagingToolDuplicate}from"./embedded-helpers-DdU30lmt.js";import{c as resolveTextChunkLimit,d as parseFenceSpans,i as chunkMarkdownTextWithMode,n as chunkByParagraph,s as resolveChunkMode}from"./chunk-Dly7lM4r.js";import{t as resolveMarkdownTableMode}from"./markdown-tables-B1Rx8hv6.js";import{s as getAgentScopedMediaLocalRoots}from"./ir-CSdQJPqu.js";import{c as markdownToSignalTextChunks,t as sendMessageSignal}from"./send-kkm_zrHQ.js";import{i as enqueueDelivery,n as ackDelivery,o as failDelivery}from"./delivery-queue-Cp3t4Upn.js";function getHooksForName(registry,hookName){return registry.typedHooks.filter(h=>h.hookName===hookName).toSorted((a,b)=>(b.priority??0)-(a.priority??0))}function createHookRunner(registry,options={}){let logger=options.logger,catchErrors=options.catchErrors??!0,mergeBeforeModelResolve=(acc,next)=>({modelOverride:acc?.modelOverride??next.modelOverride,providerOverride:acc?.providerOverride??next.providerOverride}),mergeBeforePromptBuild=(acc,next)=>({systemPrompt:next.systemPrompt??acc?.systemPrompt,prependContext:acc?.prependContext&&next.prependContext?`${acc.prependContext}\n\n${next.prependContext}`:next.prependContext??acc?.prependContext});async function runVoidHook(hookName,event,ctx){let hooks=getHooksForName(registry,hookName);if(hooks.length===0)return;logger?.debug?.(`[hooks] running ${hookName} (${hooks.length} handlers)`);let promises=hooks.map(async hook=>{try{await hook.handler(event,ctx)}catch(err){let msg=`[hooks] ${hookName} handler from ${hook.pluginId} failed: ${String(err)}`;if(catchErrors)logger?.error(msg);else throw Error(msg,{cause:err})}});await Promise.all(promises)}async function runModifyingHook(hookName,event,ctx,mergeResults){let hooks=getHooksForName(registry,hookName);if(hooks.length===0)return;logger?.debug?.(`[hooks] running ${hookName} (${hooks.length} handlers, sequential)`);let result;for(let hook of hooks)try{let handlerResult=await hook.handler(event,ctx);handlerResult!=null&&(result=mergeResults&&result!==void 0?mergeResults(result,handlerResult):handlerResult)}catch(err){let msg=`[hooks] ${hookName} handler from ${hook.pluginId} failed: ${String(err)}`;if(catchErrors)logger?.error(msg);else throw Error(msg,{cause:err})}return result}async function runBeforeModelResolve(event,ctx){return runModifyingHook(`before_model_resolve`,event,ctx,mergeBeforeModelResolve)}async function runBeforePromptBuild(event,ctx){return runModifyingHook(`before_prompt_build`,event,ctx,mergeBeforePromptBuild)}async function runBeforeAgentStart(event,ctx){return runModifyingHook(`before_agent_start`,event,ctx,(acc,next)=>({...mergeBeforePromptBuild(acc,next),...mergeBeforeModelResolve(acc,next)}))}async function runAgentEnd(event,ctx){return runVoidHook(`agent_end`,event,ctx)}async function runLlmInput(event,ctx){return runVoidHook(`llm_input`,event,ctx)}async function runLlmOutput(event,ctx){return runVoidHook(`llm_output`,event,ctx)}async function runBeforeCompaction(event,ctx){return runVoidHook(`before_compaction`,event,ctx)}async function runAfterCompaction(event,ctx){return runVoidHook(`after_compaction`,event,ctx)}async function runBeforeReset(event,ctx){return runVoidHook(`before_reset`,event,ctx)}async function runMessageReceived(event,ctx){return runVoidHook(`message_received`,event,ctx)}async function runMessageSending(event,ctx){return runModifyingHook(`message_sending`,event,ctx,(acc,next)=>({content:next.content??acc?.content,cancel:next.cancel??acc?.cancel}))}async function runMessageSent(event,ctx){return runVoidHook(`message_sent`,event,ctx)}async function runBeforeToolCall(event,ctx){return runModifyingHook(`before_tool_call`,event,ctx,(acc,next)=>({params:next.params??acc?.params,block:next.block??acc?.block,blockReason:next.blockReason??acc?.blockReason}))}async function runAfterToolCall(event,ctx){return runVoidHook(`after_tool_call`,event,ctx)}function runToolResultPersist(event,ctx){let hooks=getHooksForName(registry,`tool_result_persist`);if(hooks.length===0)return;let current=event.message;for(let hook of hooks)try{let out=hook.handler({...event,message:current},ctx);if(out&&typeof out.then==`function`){let msg=`[hooks] tool_result_persist handler from ${hook.pluginId} returned a Promise; this hook is synchronous and the result was ignored.`;if(catchErrors){logger?.warn?.(msg);continue}throw Error(msg)}let next=out?.message;next&&(current=next)}catch(err){let msg=`[hooks] tool_result_persist handler from ${hook.pluginId} failed: ${String(err)}`;if(catchErrors)logger?.error(msg);else throw Error(msg,{cause:err})}return{message:current}}function runBeforeMessageWrite(event,ctx){let hooks=getHooksForName(registry,`before_message_write`);if(hooks.length===0)return;let current=event.message;for(let hook of hooks)try{let out=hook.handler({...event,message:current},ctx);if(out&&typeof out.then==`function`){let msg=`[hooks] before_message_write handler from ${hook.pluginId} returned a Promise; this hook is synchronous and the result was ignored.`;if(catchErrors){logger?.warn?.(msg);continue}throw Error(msg)}let result=out;if(result?.block)return{block:!0};result?.message&&(current=result.message)}catch(err){let msg=`[hooks] before_message_write handler from ${hook.pluginId} failed: ${String(err)}`;if(catchErrors)logger?.error(msg);else throw Error(msg,{cause:err})}if(current!==event.message)return{message:current}}async function runSessionStart(event,ctx){return runVoidHook(`session_start`,event,ctx)}async function runSessionEnd(event,ctx){return runVoidHook(`session_end`,event,ctx)}async function runGatewayStart(event,ctx){return runVoidHook(`gateway_start`,event,ctx)}async function runGatewayStop(event,ctx){return runVoidHook(`gateway_stop`,event,ctx)}function hasHooks(hookName){return registry.typedHooks.some(h=>h.hookName===hookName)}function getHookCount(hookName){return registry.typedHooks.filter(h=>h.hookName===hookName).length}return{runBeforeModelResolve,runBeforePromptBuild,runBeforeAgentStart,runLlmInput,runLlmOutput,runAgentEnd,runBeforeCompaction,runAfterCompaction,runBeforeReset,runMessageReceived,runMessageSending,runMessageSent,runBeforeToolCall,runAfterToolCall,runToolResultPersist,runBeforeMessageWrite,runSessionStart,runSessionEnd,runGatewayStart,runGatewayStop,hasHooks,getHookCount}}const log=createSubsystemLogger(`plugins`);let globalHookRunner=null;function initializeGlobalHookRunner(registry){globalHookRunner=createHookRunner(registry,{logger:{debug:msg=>log.debug(msg),warn:msg=>log.warn(msg),error:msg=>log.error(msg)},catchErrors:!0});let hookCount=registry.hooks.length;hookCount>0&&log.info(`hook runner initialized with ${hookCount} registered hooks`)}function getGlobalHookRunner(){return globalHookRunner}async function runGlobalGatewayStopSafely(params){let hookRunner=getGlobalHookRunner();if(hookRunner?.hasHooks(`gateway_stop`))try{await hookRunner.runGatewayStop(params.event,params.ctx)}catch(err){if(params.onError){params.onError(err);return}log.warn(`gateway_stop hook failed: ${String(err)}`)}}const MB=1024*1024;function resolveChannelMediaMaxBytes(params){let accountId=normalizeAccountId$1(params.accountId),channelLimit=params.resolveChannelLimitMb({cfg:params.cfg,accountId});if(channelLimit)return channelLimit*MB;if(params.cfg.agents?.defaults?.mediaMaxMb)return params.cfg.agents.defaults.mediaMaxMb*MB}const cache=new Map;let lastRegistry=null;function ensureCacheForRegistry(registry){registry!==lastRegistry&&(cache.clear(),lastRegistry=registry)}async function loadChannelOutboundAdapter(id){let registry=getActivePluginRegistry();ensureCacheForRegistry(registry);let cached=cache.get(id);if(cached)return cached;let outbound=(registry?.channels.find(entry=>entry.plugin.id===id))?.plugin.outbound;if(outbound)return cache.set(id,outbound),outbound}function stripWhatsAppLeadingBlankLines(text){return text.replace(/^(?:[ \t]*\r?\n)+/,``)}function throwIfAborted(abortSignal){if(abortSignal?.aborted){let err=Error(`Operation aborted`);throw err.name=`AbortError`,err}}const AUDIO_TAG_RE=/\[\[\s*audio_as_voice\s*\]\]/gi,REPLY_TAG_RE=/\[\[\s*(?:reply_to_current|reply_to\s*:\s*([^\]\n]+))\s*\]\]/gi;function normalizeDirectiveWhitespace(text){return text.replace(/[ \t]+/g,` `).replace(/[ \t]*\n[ \t]*/g,`
|
|
2
2
|
`).trim()}function parseInlineDirectives(text,options={}){let{currentMessageId,stripAudioTag=!0,stripReplyTags=!0}=options;if(!text)return{text:``,audioAsVoice:!1,replyToCurrent:!1,hasAudioTag:!1,hasReplyTag:!1};let cleaned=text,audioAsVoice=!1,hasAudioTag=!1,hasReplyTag=!1,sawCurrent=!1,lastExplicitId;cleaned=cleaned.replace(AUDIO_TAG_RE,match=>(audioAsVoice=!0,hasAudioTag=!0,stripAudioTag?` `:match)),cleaned=cleaned.replace(REPLY_TAG_RE,(match,idRaw)=>{if(hasReplyTag=!0,idRaw===void 0)sawCurrent=!0;else{let id=idRaw.trim();id&&(lastExplicitId=id)}return stripReplyTags?` `:match}),cleaned=normalizeDirectiveWhitespace(cleaned);let replyToId=lastExplicitId??(sawCurrent&¤tMessageId?.trim()||void 0);return{text:cleaned,audioAsVoice,replyToId,replyToExplicitId:lastExplicitId,replyToCurrent:sawCurrent,hasAudioTag,hasReplyTag}}function parseAudioTag(text){let result=parseInlineDirectives(text,{stripReplyTags:!1});return{text:result.text,audioAsVoice:result.audioAsVoice,hadTag:result.hasAudioTag}}const MEDIA_TOKEN_RE=/\bMEDIA:\s*`?([^\n]+)`?/gi;function normalizeMediaSource(src){return src.startsWith(`file://`)?src.replace(`file://`,``):src}function cleanCandidate(raw){return raw.replace(/^[`"'[{(]+/,``).replace(/[`"'\\})\],]+$/,``)}const WINDOWS_DRIVE_RE=/^[a-zA-Z]:[\\/]/,SCHEME_RE=/^[a-zA-Z][a-zA-Z0-9+.-]*:/,HAS_FILE_EXT=/\.\w{1,10}$/;function isLikelyLocalPath(candidate){return candidate.startsWith(`/`)||candidate.startsWith(`./`)||candidate.startsWith(`../`)||candidate.startsWith(`~`)||WINDOWS_DRIVE_RE.test(candidate)||candidate.startsWith(`\\\\`)||!SCHEME_RE.test(candidate)&&(candidate.includes(`/`)||candidate.includes(`\\`))}function isValidMedia(candidate,opts){return!candidate||candidate.length>4096||!opts?.allowSpaces&&/\s/.test(candidate)?!1:!!(/^https?:\/\//i.test(candidate)||isLikelyLocalPath(candidate)||opts?.allowBareFilename&&!SCHEME_RE.test(candidate)&&HAS_FILE_EXT.test(candidate))}function unwrapQuoted(value){let trimmed=value.trim();if(trimmed.length<2)return;let first=trimmed[0];if(first===trimmed[trimmed.length-1]&&!(first!==`"`&&first!==`'`&&first!=="`"))return trimmed.slice(1,-1).trim()}function isInsideFence(fenceSpans,offset){return fenceSpans.some(span=>offset>=span.start&&offset<span.end)}function splitMediaFromOutput(raw){let trimmedRaw=raw.trimEnd();if(!trimmedRaw.trim())return{text:``};let media=[],foundMediaToken=!1,fenceSpans=parseFenceSpans(trimmedRaw),lines=trimmedRaw.split(`
|
|
3
3
|
`),keptLines=[],lineOffset=0;for(let line of lines){if(isInsideFence(fenceSpans,lineOffset)){keptLines.push(line),lineOffset+=line.length+1;continue}if(!line.trimStart().startsWith(`MEDIA:`)){keptLines.push(line),lineOffset+=line.length+1;continue}let matches=Array.from(line.matchAll(MEDIA_TOKEN_RE));if(matches.length===0){keptLines.push(line),lineOffset+=line.length+1;continue}let pieces=[],cursor=0;for(let match of matches){let start=match.index??0;pieces.push(line.slice(cursor,start));let payload=match[1],unwrapped=unwrapQuoted(payload),payloadValue=unwrapped??payload,parts=unwrapped?[unwrapped]:payload.split(/\s+/).filter(Boolean),mediaStartIndex=media.length,validCount=0,invalidParts=[],hasValidMedia=!1;for(let part of parts){let candidate=normalizeMediaSource(cleanCandidate(part));isValidMedia(candidate,unwrapped?{allowSpaces:!0}:void 0)?(media.push(candidate),hasValidMedia=!0,foundMediaToken=!0,validCount+=1):invalidParts.push(part)}let trimmedPayload=payloadValue.trim(),looksLikeLocalPath=isLikelyLocalPath(trimmedPayload)||trimmedPayload.startsWith(`file://`);if(!unwrapped&&validCount===1&&invalidParts.length>0&&/\s/.test(payloadValue)&&looksLikeLocalPath){let fallback=normalizeMediaSource(cleanCandidate(payloadValue));isValidMedia(fallback,{allowSpaces:!0})&&(media.splice(mediaStartIndex,media.length-mediaStartIndex,fallback),hasValidMedia=!0,foundMediaToken=!0,validCount=1,invalidParts.length=0)}if(!hasValidMedia){let fallback=normalizeMediaSource(cleanCandidate(payloadValue));isValidMedia(fallback,{allowSpaces:!0,allowBareFilename:!0})&&(media.push(fallback),hasValidMedia=!0,foundMediaToken=!0,invalidParts.length=0)}hasValidMedia?invalidParts.length>0&&pieces.push(invalidParts.join(` `)):looksLikeLocalPath?foundMediaToken=!0:pieces.push(match[0]),cursor=start+match[0].length}pieces.push(line.slice(cursor));let cleanedLine=pieces.join(``).replace(/[ \t]{2,}/g,` `).trim();cleanedLine&&keptLines.push(cleanedLine),lineOffset+=line.length+1}let cleanedText=keptLines.join(`
|
|
4
4
|
`).replace(/[ \t]+\n/g,`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function createDefaultDeps(){return{sendMessageWhatsApp:async(...args)=>{let{sendMessageWhatsApp}=await import(`./web-
|
|
1
|
+
function createDefaultDeps(){return{sendMessageWhatsApp:async(...args)=>{let{sendMessageWhatsApp}=await import(`./web-Btgs8oWv.js`);return await sendMessageWhatsApp(...args)},sendMessageTelegram:async(...args)=>{let{sendMessageTelegram}=await import(`./send-COKUbcqs.js`);return await sendMessageTelegram(...args)},sendMessageDiscord:async(...args)=>{let{sendMessageDiscord}=await import(`./send-CrFWgJKx.js`);return await sendMessageDiscord(...args)},sendMessageSlack:async(...args)=>{let{sendMessageSlack}=await import(`./send-CwK8QBR3.js`);return await sendMessageSlack(...args)},sendMessageSignal:async(...args)=>{let{sendMessageSignal}=await import(`./send-Bbo7TXLx.js`);return await sendMessageSignal(...args)},sendMessageIMessage:async(...args)=>{let{sendMessageIMessage}=await import(`./send-CTw3PqN4.js`);return await sendMessageIMessage(...args)}}}function createOutboundSendDeps(deps){return{sendWhatsApp:deps.sendMessageWhatsApp,sendTelegram:deps.sendMessageTelegram,sendDiscord:deps.sendMessageDiscord,sendSlack:deps.sendMessageSlack,sendSignal:deps.sendMessageSignal,sendIMessage:deps.sendMessageIMessage}}export{createOutboundSendDeps as n,createDefaultDeps as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import{B as theme}from"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-
|
|
1
|
+
import"./paths-5FcIFMsj.js";import{B as theme}from"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-DG9J_VTz.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-BLBq4T2o.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BgV_FYSq.js";import{h as GATEWAY_CLIENT_NAMES,m as GATEWAY_CLIENT_MODES}from"./message-channel-D_jXxXQj.js";import"./client-xfoidwPI.js";import{n as callGateway}from"./call-T8ciwMTA.js";import{n as formatTimeAgo}from"./format-relative-niF9gXss.js";import{n as withProgress}from"./progress-BfOtdN6b.js";import{t as renderTable}from"./table-BoCHYKoQ.js";const devicesCallOpts=(cmd,defaults)=>cmd.option(`--url <url>`,`Gateway WebSocket URL (defaults to gateway.remote.url when configured)`).option(`--token <token>`,`Gateway token (if required)`).option(`--password <password>`,`Gateway password (password auth)`).option(`--timeout <ms>`,`Timeout in ms`,String(defaults?.timeoutMs??1e4)).option(`--json`,`Output JSON`,!1),callGatewayCli=async(method,opts,params)=>withProgress({label:`Devices ${method}`,indeterminate:!0,enabled:opts.json!==!0},async()=>await callGateway({url:opts.url,token:opts.token,password:opts.password,method,params,timeoutMs:Number(opts.timeout??1e4),clientName:GATEWAY_CLIENT_NAMES.CLI,mode:GATEWAY_CLIENT_MODES.CLI}));function parseDevicePairingList(value){let obj=typeof value==`object`&&value?value:{};return{pending:Array.isArray(obj.pending)?obj.pending:[],paired:Array.isArray(obj.paired)?obj.paired:[]}}function selectLatestPendingRequest(pending){return pending?.length?pending.reduce((latest,current)=>{let latestTs=typeof latest.ts==`number`?latest.ts:0;return(typeof current.ts==`number`?current.ts:0)>latestTs?current:latest}):null}function formatTokenSummary(tokens){return!tokens||tokens.length===0?`none`:tokens.map(t=>`${t.role}${t.revokedAtMs?` (revoked)`:``}`).toSorted((a,b)=>a.localeCompare(b)).join(`, `)}function resolveRequiredDeviceRole(opts){let deviceId=String(opts.device??``).trim(),role=String(opts.role??``).trim();return deviceId&&role?{deviceId,role}:(defaultRuntime.error(`--device and --role required`),defaultRuntime.exit(1),null)}function registerDevicesCli(program){let devices=program.command(`devices`).description(`Device pairing and auth tokens`);devicesCallOpts(devices.command(`list`).description(`List pending and paired devices`).action(async opts=>{let list=parseDevicePairingList(await callGatewayCli(`device.pair.list`,opts,{}));if(opts.json){defaultRuntime.log(JSON.stringify(list,null,2));return}if(list.pending?.length){let tableWidth=Math.max(60,(process.stdout.columns??120)-1);defaultRuntime.log(`${theme.heading(`Pending`)} ${theme.muted(`(${list.pending.length})`)}`),defaultRuntime.log(renderTable({width:tableWidth,columns:[{key:`Request`,header:`Request`,minWidth:10},{key:`Device`,header:`Device`,minWidth:16,flex:!0},{key:`Role`,header:`Role`,minWidth:8},{key:`IP`,header:`IP`,minWidth:12},{key:`Age`,header:`Age`,minWidth:8},{key:`Flags`,header:`Flags`,minWidth:8}],rows:list.pending.map(req=>({Request:req.requestId,Device:req.displayName||req.deviceId,Role:req.role??``,IP:req.remoteIp??``,Age:typeof req.ts==`number`?formatTimeAgo(Date.now()-req.ts):``,Flags:req.isRepair?`repair`:``}))}).trimEnd())}if(list.paired?.length){let tableWidth=Math.max(60,(process.stdout.columns??120)-1);defaultRuntime.log(`${theme.heading(`Paired`)} ${theme.muted(`(${list.paired.length})`)}`),defaultRuntime.log(renderTable({width:tableWidth,columns:[{key:`Device`,header:`Device`,minWidth:16,flex:!0},{key:`Roles`,header:`Roles`,minWidth:12,flex:!0},{key:`Scopes`,header:`Scopes`,minWidth:12,flex:!0},{key:`Tokens`,header:`Tokens`,minWidth:12,flex:!0},{key:`IP`,header:`IP`,minWidth:12}],rows:list.paired.map(device=>({Device:device.displayName||device.deviceId,Roles:device.roles?.length?device.roles.join(`, `):``,Scopes:device.scopes?.length?device.scopes.join(`, `):``,Tokens:formatTokenSummary(device.tokens),IP:device.remoteIp??``}))}).trimEnd())}!list.pending?.length&&!list.paired?.length&&defaultRuntime.log(theme.muted(`No device pairing entries.`))})),devicesCallOpts(devices.command(`remove`).description(`Remove a paired device entry`).argument(`<deviceId>`,`Paired device id`).action(async(deviceId,opts)=>{let trimmed=deviceId.trim();if(!trimmed){defaultRuntime.error(`deviceId is required`),defaultRuntime.exit(1);return}let result=await callGatewayCli(`device.pair.remove`,opts,{deviceId:trimmed});if(opts.json){defaultRuntime.log(JSON.stringify(result,null,2));return}defaultRuntime.log(`${theme.warn(`Removed`)} ${theme.command(trimmed)}`)})),devicesCallOpts(devices.command(`clear`).description(`Clear paired devices from the gateway table`).option(`--pending`,`Also reject all pending pairing requests`,!1).option(`--yes`,`Confirm destructive clear`,!1).action(async opts=>{if(!opts.yes){defaultRuntime.error(`Refusing to clear pairing table without --yes`),defaultRuntime.exit(1);return}let list=parseDevicePairingList(await callGatewayCli(`device.pair.list`,opts,{})),removedDeviceIds=[],rejectedRequestIds=[],paired=Array.isArray(list.paired)?list.paired:[];for(let device of paired){let deviceId=typeof device.deviceId==`string`?device.deviceId.trim():``;deviceId&&(await callGatewayCli(`device.pair.remove`,opts,{deviceId}),removedDeviceIds.push(deviceId))}if(opts.pending){let pending=Array.isArray(list.pending)?list.pending:[];for(let req of pending){let requestId=typeof req.requestId==`string`?req.requestId.trim():``;requestId&&(await callGatewayCli(`device.pair.reject`,opts,{requestId}),rejectedRequestIds.push(requestId))}}if(opts.json){defaultRuntime.log(JSON.stringify({removedDevices:removedDeviceIds,rejectedPending:rejectedRequestIds},null,2));return}defaultRuntime.log(`${theme.warn(`Cleared`)} ${removedDeviceIds.length} paired device${removedDeviceIds.length===1?``:`s`}`),opts.pending&&defaultRuntime.log(`${theme.warn(`Rejected`)} ${rejectedRequestIds.length} pending request${rejectedRequestIds.length===1?``:`s`}`)})),devicesCallOpts(devices.command(`approve`).description(`Approve a pending device pairing request`).argument(`[requestId]`,`Pending request id`).option(`--latest`,`Approve the most recent pending request`,!1).action(async(requestId,opts)=>{let resolvedRequestId=requestId?.trim();if((!resolvedRequestId||opts.latest)&&(resolvedRequestId=selectLatestPendingRequest(parseDevicePairingList(await callGatewayCli(`device.pair.list`,opts,{})).pending)?.requestId?.trim()),!resolvedRequestId){defaultRuntime.error(`No pending device pairing requests to approve`),defaultRuntime.exit(1);return}let result=await callGatewayCli(`device.pair.approve`,opts,{requestId:resolvedRequestId});if(opts.json){defaultRuntime.log(JSON.stringify(result,null,2));return}let deviceId=result?.device?.deviceId;defaultRuntime.log(`${theme.success(`Approved`)} ${theme.command(deviceId??`ok`)} ${theme.muted(`(${resolvedRequestId})`)}`)})),devicesCallOpts(devices.command(`reject`).description(`Reject a pending device pairing request`).argument(`<requestId>`,`Pending request id`).action(async(requestId,opts)=>{let result=await callGatewayCli(`device.pair.reject`,opts,{requestId});if(opts.json){defaultRuntime.log(JSON.stringify(result,null,2));return}let deviceId=result?.deviceId;defaultRuntime.log(`${theme.warn(`Rejected`)} ${theme.command(deviceId??`ok`)}`)})),devicesCallOpts(devices.command(`rotate`).description(`Rotate a device token for a role`).requiredOption(`--device <id>`,`Device id`).requiredOption(`--role <role>`,`Role name`).option(`--scope <scope...>`,`Scopes to attach to the token (repeatable)`).action(async opts=>{let required=resolveRequiredDeviceRole(opts);if(!required)return;let result=await callGatewayCli(`device.token.rotate`,opts,{deviceId:required.deviceId,role:required.role,scopes:Array.isArray(opts.scope)?opts.scope:void 0});defaultRuntime.log(JSON.stringify(result,null,2))})),devicesCallOpts(devices.command(`revoke`).description(`Revoke a device token for a role`).requiredOption(`--device <id>`,`Device id`).requiredOption(`--role <role>`,`Role name`).action(async opts=>{let required=resolveRequiredDeviceRole(opts);if(!required)return;let result=await callGatewayCli(`device.token.revoke`,opts,{deviceId:required.deviceId,role:required.role});defaultRuntime.log(JSON.stringify(result,null,2))}))}export{registerDevicesCli};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-
|
|
1
|
+
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-pt7Tr4HA.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-D9hC2aG0.js";import"./manifest-registry-009gLJ4l.js";import"./config-BpChMIJ6.js";import"./client-CGgp3zkQ.js";import{n as callGateway}from"./call-Du2LiaX6.js";import{h as GATEWAY_CLIENT_NAMES,m as GATEWAY_CLIENT_MODES}from"./message-channel-z5YRpR2d.js";import{n as formatTimeAgo}from"./format-relative-CruqE52s.js";import{n as withProgress}from"./progress-Cqb-jAjT.js";import{t as renderTable}from"./table-BFCCZDsp.js";const devicesCallOpts=(cmd,defaults)=>cmd.option(`--url <url>`,`Gateway WebSocket URL (defaults to gateway.remote.url when configured)`).option(`--token <token>`,`Gateway token (if required)`).option(`--password <password>`,`Gateway password (password auth)`).option(`--timeout <ms>`,`Timeout in ms`,String(defaults?.timeoutMs??1e4)).option(`--json`,`Output JSON`,!1),callGatewayCli=async(method,opts,params)=>withProgress({label:`Devices ${method}`,indeterminate:!0,enabled:opts.json!==!0},async()=>await callGateway({url:opts.url,token:opts.token,password:opts.password,method,params,timeoutMs:Number(opts.timeout??1e4),clientName:GATEWAY_CLIENT_NAMES.CLI,mode:GATEWAY_CLIENT_MODES.CLI}));function parseDevicePairingList(value){let obj=typeof value==`object`&&value?value:{};return{pending:Array.isArray(obj.pending)?obj.pending:[],paired:Array.isArray(obj.paired)?obj.paired:[]}}function selectLatestPendingRequest(pending){return pending?.length?pending.reduce((latest,current)=>{let latestTs=typeof latest.ts==`number`?latest.ts:0;return(typeof current.ts==`number`?current.ts:0)>latestTs?current:latest}):null}function formatTokenSummary(tokens){return!tokens||tokens.length===0?`none`:tokens.map(t=>`${t.role}${t.revokedAtMs?` (revoked)`:``}`).toSorted((a,b)=>a.localeCompare(b)).join(`, `)}function resolveRequiredDeviceRole(opts){let deviceId=String(opts.device??``).trim(),role=String(opts.role??``).trim();return deviceId&&role?{deviceId,role}:(defaultRuntime.error(`--device and --role required`),defaultRuntime.exit(1),null)}function registerDevicesCli(program){let devices=program.command(`devices`).description(`Device pairing and auth tokens`);devicesCallOpts(devices.command(`list`).description(`List pending and paired devices`).action(async opts=>{let list=parseDevicePairingList(await callGatewayCli(`device.pair.list`,opts,{}));if(opts.json){defaultRuntime.log(JSON.stringify(list,null,2));return}if(list.pending?.length){let tableWidth=Math.max(60,(process.stdout.columns??120)-1);defaultRuntime.log(`${theme.heading(`Pending`)} ${theme.muted(`(${list.pending.length})`)}`),defaultRuntime.log(renderTable({width:tableWidth,columns:[{key:`Request`,header:`Request`,minWidth:10},{key:`Device`,header:`Device`,minWidth:16,flex:!0},{key:`Role`,header:`Role`,minWidth:8},{key:`IP`,header:`IP`,minWidth:12},{key:`Age`,header:`Age`,minWidth:8},{key:`Flags`,header:`Flags`,minWidth:8}],rows:list.pending.map(req=>({Request:req.requestId,Device:req.displayName||req.deviceId,Role:req.role??``,IP:req.remoteIp??``,Age:typeof req.ts==`number`?formatTimeAgo(Date.now()-req.ts):``,Flags:req.isRepair?`repair`:``}))}).trimEnd())}if(list.paired?.length){let tableWidth=Math.max(60,(process.stdout.columns??120)-1);defaultRuntime.log(`${theme.heading(`Paired`)} ${theme.muted(`(${list.paired.length})`)}`),defaultRuntime.log(renderTable({width:tableWidth,columns:[{key:`Device`,header:`Device`,minWidth:16,flex:!0},{key:`Roles`,header:`Roles`,minWidth:12,flex:!0},{key:`Scopes`,header:`Scopes`,minWidth:12,flex:!0},{key:`Tokens`,header:`Tokens`,minWidth:12,flex:!0},{key:`IP`,header:`IP`,minWidth:12}],rows:list.paired.map(device=>({Device:device.displayName||device.deviceId,Roles:device.roles?.length?device.roles.join(`, `):``,Scopes:device.scopes?.length?device.scopes.join(`, `):``,Tokens:formatTokenSummary(device.tokens),IP:device.remoteIp??``}))}).trimEnd())}!list.pending?.length&&!list.paired?.length&&defaultRuntime.log(theme.muted(`No device pairing entries.`))})),devicesCallOpts(devices.command(`remove`).description(`Remove a paired device entry`).argument(`<deviceId>`,`Paired device id`).action(async(deviceId,opts)=>{let trimmed=deviceId.trim();if(!trimmed){defaultRuntime.error(`deviceId is required`),defaultRuntime.exit(1);return}let result=await callGatewayCli(`device.pair.remove`,opts,{deviceId:trimmed});if(opts.json){defaultRuntime.log(JSON.stringify(result,null,2));return}defaultRuntime.log(`${theme.warn(`Removed`)} ${theme.command(trimmed)}`)})),devicesCallOpts(devices.command(`clear`).description(`Clear paired devices from the gateway table`).option(`--pending`,`Also reject all pending pairing requests`,!1).option(`--yes`,`Confirm destructive clear`,!1).action(async opts=>{if(!opts.yes){defaultRuntime.error(`Refusing to clear pairing table without --yes`),defaultRuntime.exit(1);return}let list=parseDevicePairingList(await callGatewayCli(`device.pair.list`,opts,{})),removedDeviceIds=[],rejectedRequestIds=[],paired=Array.isArray(list.paired)?list.paired:[];for(let device of paired){let deviceId=typeof device.deviceId==`string`?device.deviceId.trim():``;deviceId&&(await callGatewayCli(`device.pair.remove`,opts,{deviceId}),removedDeviceIds.push(deviceId))}if(opts.pending){let pending=Array.isArray(list.pending)?list.pending:[];for(let req of pending){let requestId=typeof req.requestId==`string`?req.requestId.trim():``;requestId&&(await callGatewayCli(`device.pair.reject`,opts,{requestId}),rejectedRequestIds.push(requestId))}}if(opts.json){defaultRuntime.log(JSON.stringify({removedDevices:removedDeviceIds,rejectedPending:rejectedRequestIds},null,2));return}defaultRuntime.log(`${theme.warn(`Cleared`)} ${removedDeviceIds.length} paired device${removedDeviceIds.length===1?``:`s`}`),opts.pending&&defaultRuntime.log(`${theme.warn(`Rejected`)} ${rejectedRequestIds.length} pending request${rejectedRequestIds.length===1?``:`s`}`)})),devicesCallOpts(devices.command(`approve`).description(`Approve a pending device pairing request`).argument(`[requestId]`,`Pending request id`).option(`--latest`,`Approve the most recent pending request`,!1).action(async(requestId,opts)=>{let resolvedRequestId=requestId?.trim();if((!resolvedRequestId||opts.latest)&&(resolvedRequestId=selectLatestPendingRequest(parseDevicePairingList(await callGatewayCli(`device.pair.list`,opts,{})).pending)?.requestId?.trim()),!resolvedRequestId){defaultRuntime.error(`No pending device pairing requests to approve`),defaultRuntime.exit(1);return}let result=await callGatewayCli(`device.pair.approve`,opts,{requestId:resolvedRequestId});if(opts.json){defaultRuntime.log(JSON.stringify(result,null,2));return}let deviceId=result?.device?.deviceId;defaultRuntime.log(`${theme.success(`Approved`)} ${theme.command(deviceId??`ok`)} ${theme.muted(`(${resolvedRequestId})`)}`)})),devicesCallOpts(devices.command(`reject`).description(`Reject a pending device pairing request`).argument(`<requestId>`,`Pending request id`).action(async(requestId,opts)=>{let result=await callGatewayCli(`device.pair.reject`,opts,{requestId});if(opts.json){defaultRuntime.log(JSON.stringify(result,null,2));return}let deviceId=result?.deviceId;defaultRuntime.log(`${theme.warn(`Rejected`)} ${theme.command(deviceId??`ok`)}`)})),devicesCallOpts(devices.command(`rotate`).description(`Rotate a device token for a role`).requiredOption(`--device <id>`,`Device id`).requiredOption(`--role <role>`,`Role name`).option(`--scope <scope...>`,`Scopes to attach to the token (repeatable)`).action(async opts=>{let required=resolveRequiredDeviceRole(opts);if(!required)return;let result=await callGatewayCli(`device.token.rotate`,opts,{deviceId:required.deviceId,role:required.role,scopes:Array.isArray(opts.scope)?opts.scope:void 0});defaultRuntime.log(JSON.stringify(result,null,2))})),devicesCallOpts(devices.command(`revoke`).description(`Revoke a device token for a role`).requiredOption(`--device <id>`,`Device id`).requiredOption(`--role <role>`,`Role name`).action(async opts=>{let required=resolveRequiredDeviceRole(opts);if(!required)return;let result=await callGatewayCli(`device.token.revoke`,opts,{deviceId:required.deviceId,role:required.role});defaultRuntime.log(JSON.stringify(result,null,2))}))}export{registerDevicesCli};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{D as danger,z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-
|
|
1
|
+
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{D as danger,z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-pt7Tr4HA.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import{r as loadConfig}from"./io-D9hC2aG0.js";import"./manifest-registry-009gLJ4l.js";import"./config-BpChMIJ6.js";import"./message-channel-z5YRpR2d.js";import{t as getChannelPlugin}from"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import{n as resolveMessageChannelSelection}from"./channel-selection-BLwXhb9t.js";import{t as formatDocsLink}from"./links-BKzP7VVP.js";import{t as formatHelpExamples}from"./help-format-CfFf-w62.js";import{t as resolveChannelDefaultAccountId}from"./helpers-DPPVplyk.js";import{t as renderTable}from"./table-BFCCZDsp.js";function parseLimit(value){if(typeof value==`number`&&Number.isFinite(value))return value<=0?null:Math.floor(value);if(typeof value!=`string`)return null;let raw=value.trim();if(!raw)return null;let parsed=Number.parseInt(raw,10);return!Number.isFinite(parsed)||parsed<=0?null:parsed}function buildRows(entries){return entries.map(entry=>({ID:entry.id,Name:entry.name?.trim()??``}))}function printDirectoryList(params){if(params.entries.length===0){defaultRuntime.log(theme.muted(params.emptyMessage));return}let tableWidth=Math.max(60,(process.stdout.columns??120)-1);defaultRuntime.log(`${theme.heading(params.title)} ${theme.muted(`(${params.entries.length})`)}`),defaultRuntime.log(renderTable({width:tableWidth,columns:[{key:`ID`,header:`ID`,minWidth:16,flex:!0},{key:`Name`,header:`Name`,minWidth:18,flex:!0}],rows:buildRows(params.entries)}).trimEnd())}function registerDirectoryCli(program){let directory=program.command(`directory`).description(`Lookup contact and group IDs (self, peers, groups) for supported chat channels`).addHelpText(`after`,()=>`\n${theme.heading(`Examples:`)}\n${formatHelpExamples([[`builderforce directory self --channel slack`,`Show the connected account identity.`],[`builderforce directory peers list --channel slack --query "alice"`,`Search contact/user IDs by name.`],[`builderforce directory groups list --channel discord`,`List available groups/channels.`],[`builderforce directory groups members --channel discord --group-id <id>`,`List members for a specific group.`]])}\n\n${theme.muted(`Docs:`)} ${formatDocsLink(`/cli/directory`,`docs.builderforce.ai/cli/directory`)}\n`).action(()=>{directory.help({error:!0})}),withChannel=cmd=>cmd.option(`--channel <name>`,`Channel (auto when only one is configured)`).option(`--account <id>`,`Account id (accountId)`).option(`--json`,`Output JSON`,!1),resolve=async opts=>{let cfg=loadConfig(),channelId=(await resolveMessageChannelSelection({cfg,channel:opts.channel??null})).channel,plugin=getChannelPlugin(channelId);if(!plugin)throw Error(`Unsupported channel: ${String(channelId)}`);return{cfg,channelId,accountId:opts.account?.trim()||resolveChannelDefaultAccountId({plugin,cfg}),plugin}},runDirectoryList=async params=>{let{cfg,channelId,accountId,plugin}=await resolve({channel:params.opts.channel,account:params.opts.account}),fn=params.action===`listPeers`?plugin.directory?.listPeers:plugin.directory?.listGroups;if(!fn)throw Error(`Channel ${channelId} does not support directory ${params.unsupported}`);let result=await fn({cfg,accountId,query:params.opts.query??null,limit:parseLimit(params.opts.limit),runtime:defaultRuntime});if(params.opts.json){defaultRuntime.log(JSON.stringify(result,null,2));return}printDirectoryList({title:params.title,emptyMessage:params.emptyMessage,entries:result})};withChannel(directory.command(`self`).description(`Show the current account user`)).action(async opts=>{try{let{cfg,channelId,accountId,plugin}=await resolve({channel:opts.channel,account:opts.account}),fn=plugin.directory?.self;if(!fn)throw Error(`Channel ${channelId} does not support directory self`);let result=await fn({cfg,accountId,runtime:defaultRuntime});if(opts.json){defaultRuntime.log(JSON.stringify(result,null,2));return}if(!result){defaultRuntime.log(theme.muted(`Not available.`));return}let tableWidth=Math.max(60,(process.stdout.columns??120)-1);defaultRuntime.log(theme.heading(`Self`)),defaultRuntime.log(renderTable({width:tableWidth,columns:[{key:`ID`,header:`ID`,minWidth:16,flex:!0},{key:`Name`,header:`Name`,minWidth:18,flex:!0}],rows:buildRows([result])}).trimEnd())}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}}),withChannel(directory.command(`peers`).description(`Peer directory (contacts/users)`).command(`list`).description(`List peers`)).option(`--query <text>`,`Optional search query`).option(`--limit <n>`,`Limit results`).action(async opts=>{try{await runDirectoryList({opts,action:`listPeers`,unsupported:`peers`,title:`Peers`,emptyMessage:`No peers found.`})}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}});let groups=directory.command(`groups`).description(`Group directory`);withChannel(groups.command(`list`).description(`List groups`)).option(`--query <text>`,`Optional search query`).option(`--limit <n>`,`Limit results`).action(async opts=>{try{await runDirectoryList({opts,action:`listGroups`,unsupported:`groups`,title:`Groups`,emptyMessage:`No groups found.`})}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}}),withChannel(groups.command(`members`).description(`List group members`).requiredOption(`--group-id <id>`,`Group id`)).option(`--limit <n>`,`Limit results`).action(async opts=>{try{let{cfg,channelId,accountId,plugin}=await resolve({channel:opts.channel,account:opts.account}),fn=plugin.directory?.listGroupMembers;if(!fn)throw Error(`Channel ${channelId} does not support group members listing`);let groupId=String(opts.groupId??``).trim();if(!groupId)throw Error(`Missing --group-id`);let result=await fn({cfg,accountId,groupId,limit:parseLimit(opts.limit),runtime:defaultRuntime});if(opts.json){defaultRuntime.log(JSON.stringify(result,null,2));return}printDirectoryList({title:`Group Members`,emptyMessage:`No group members found.`,entries:result})}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}})}export{registerDirectoryCli};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import{B as theme,O as danger}from"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-
|
|
1
|
+
import"./paths-5FcIFMsj.js";import{B as theme,O as danger}from"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-DG9J_VTz.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import{r as loadConfig}from"./io-BLBq4T2o.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BgV_FYSq.js";import"./message-channel-D_jXxXQj.js";import{t as getChannelPlugin}from"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./bindings-DR59065T.js";import{t as formatDocsLink}from"./links-BgWWaaOT.js";import{t as formatHelpExamples}from"./help-format-Qfk2vDNX.js";import{n as resolveMessageChannelSelection}from"./channel-selection-DyAvzlY8.js";import{t as resolveChannelDefaultAccountId}from"./helpers-DTDCy17p.js";import{t as renderTable}from"./table-BoCHYKoQ.js";function parseLimit(value){if(typeof value==`number`&&Number.isFinite(value))return value<=0?null:Math.floor(value);if(typeof value!=`string`)return null;let raw=value.trim();if(!raw)return null;let parsed=Number.parseInt(raw,10);return!Number.isFinite(parsed)||parsed<=0?null:parsed}function buildRows(entries){return entries.map(entry=>({ID:entry.id,Name:entry.name?.trim()??``}))}function printDirectoryList(params){if(params.entries.length===0){defaultRuntime.log(theme.muted(params.emptyMessage));return}let tableWidth=Math.max(60,(process.stdout.columns??120)-1);defaultRuntime.log(`${theme.heading(params.title)} ${theme.muted(`(${params.entries.length})`)}`),defaultRuntime.log(renderTable({width:tableWidth,columns:[{key:`ID`,header:`ID`,minWidth:16,flex:!0},{key:`Name`,header:`Name`,minWidth:18,flex:!0}],rows:buildRows(params.entries)}).trimEnd())}function registerDirectoryCli(program){let directory=program.command(`directory`).description(`Lookup contact and group IDs (self, peers, groups) for supported chat channels`).addHelpText(`after`,()=>`\n${theme.heading(`Examples:`)}\n${formatHelpExamples([[`builderforce directory self --channel slack`,`Show the connected account identity.`],[`builderforce directory peers list --channel slack --query "alice"`,`Search contact/user IDs by name.`],[`builderforce directory groups list --channel discord`,`List available groups/channels.`],[`builderforce directory groups members --channel discord --group-id <id>`,`List members for a specific group.`]])}\n\n${theme.muted(`Docs:`)} ${formatDocsLink(`/cli/directory`,`docs.builderforce.ai/cli/directory`)}\n`).action(()=>{directory.help({error:!0})}),withChannel=cmd=>cmd.option(`--channel <name>`,`Channel (auto when only one is configured)`).option(`--account <id>`,`Account id (accountId)`).option(`--json`,`Output JSON`,!1),resolve=async opts=>{let cfg=loadConfig(),channelId=(await resolveMessageChannelSelection({cfg,channel:opts.channel??null})).channel,plugin=getChannelPlugin(channelId);if(!plugin)throw Error(`Unsupported channel: ${String(channelId)}`);return{cfg,channelId,accountId:opts.account?.trim()||resolveChannelDefaultAccountId({plugin,cfg}),plugin}},runDirectoryList=async params=>{let{cfg,channelId,accountId,plugin}=await resolve({channel:params.opts.channel,account:params.opts.account}),fn=params.action===`listPeers`?plugin.directory?.listPeers:plugin.directory?.listGroups;if(!fn)throw Error(`Channel ${channelId} does not support directory ${params.unsupported}`);let result=await fn({cfg,accountId,query:params.opts.query??null,limit:parseLimit(params.opts.limit),runtime:defaultRuntime});if(params.opts.json){defaultRuntime.log(JSON.stringify(result,null,2));return}printDirectoryList({title:params.title,emptyMessage:params.emptyMessage,entries:result})};withChannel(directory.command(`self`).description(`Show the current account user`)).action(async opts=>{try{let{cfg,channelId,accountId,plugin}=await resolve({channel:opts.channel,account:opts.account}),fn=plugin.directory?.self;if(!fn)throw Error(`Channel ${channelId} does not support directory self`);let result=await fn({cfg,accountId,runtime:defaultRuntime});if(opts.json){defaultRuntime.log(JSON.stringify(result,null,2));return}if(!result){defaultRuntime.log(theme.muted(`Not available.`));return}let tableWidth=Math.max(60,(process.stdout.columns??120)-1);defaultRuntime.log(theme.heading(`Self`)),defaultRuntime.log(renderTable({width:tableWidth,columns:[{key:`ID`,header:`ID`,minWidth:16,flex:!0},{key:`Name`,header:`Name`,minWidth:18,flex:!0}],rows:buildRows([result])}).trimEnd())}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}}),withChannel(directory.command(`peers`).description(`Peer directory (contacts/users)`).command(`list`).description(`List peers`)).option(`--query <text>`,`Optional search query`).option(`--limit <n>`,`Limit results`).action(async opts=>{try{await runDirectoryList({opts,action:`listPeers`,unsupported:`peers`,title:`Peers`,emptyMessage:`No peers found.`})}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}});let groups=directory.command(`groups`).description(`Group directory`);withChannel(groups.command(`list`).description(`List groups`)).option(`--query <text>`,`Optional search query`).option(`--limit <n>`,`Limit results`).action(async opts=>{try{await runDirectoryList({opts,action:`listGroups`,unsupported:`groups`,title:`Groups`,emptyMessage:`No groups found.`})}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}}),withChannel(groups.command(`members`).description(`List group members`).requiredOption(`--group-id <id>`,`Group id`)).option(`--limit <n>`,`Limit results`).action(async opts=>{try{let{cfg,channelId,accountId,plugin}=await resolve({channel:opts.channel,account:opts.account}),fn=plugin.directory?.listGroupMembers;if(!fn)throw Error(`Channel ${channelId} does not support group members listing`);let groupId=String(opts.groupId??``).trim();if(!groupId)throw Error(`Missing --group-id`);let result=await fn({cfg,accountId,groupId,limit:parseLimit(opts.limit),runtime:defaultRuntime});if(opts.json){defaultRuntime.log(JSON.stringify(result,null,2));return}printDirectoryList({title:`Group Members`,emptyMessage:`No group members found.`,entries:result})}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}})}export{registerDirectoryCli};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{q as normalizeStringEntries}from"./sessions-
|
|
1
|
+
import{q as normalizeStringEntries}from"./sessions-BA8Se_bT.js";import{i as readChannelAllowFromStore}from"./pairing-store-YRy7EBgI.js";function normalizeTelegramAllowFromEntry(raw){return(typeof raw==`string`?raw:typeof raw==`number`?String(raw):``).trim().replace(/^(telegram|tg):/i,``).trim()}function isNumericTelegramUserId(raw){return/^-?\d+$/.test(raw)}async function resolveDmAllowState(params){let configAllowFrom=normalizeStringEntries(Array.isArray(params.allowFrom)?params.allowFrom:void 0),hasWildcard=configAllowFrom.includes(`*`),storeAllowFrom=await(params.readStore??readChannelAllowFromStore)(params.provider).catch(()=>[]),normalizeEntry=params.normalizeEntry??(value=>value),normalizedCfg=configAllowFrom.filter(value=>value!==`*`).map(value=>normalizeEntry(value)).map(value=>value.trim()).filter(Boolean),normalizedStore=storeAllowFrom.map(value=>normalizeEntry(value)).map(value=>value.trim()).filter(Boolean),allowCount=Array.from(new Set([...normalizedCfg,...normalizedStore])).length;return{configAllowFrom,hasWildcard,allowCount,isMultiUserDm:hasWildcard||allowCount>1}}export{isNumericTelegramUserId as n,normalizeTelegramAllowFromEntry as r,resolveDmAllowState as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{et as normalizeStringEntries}from"./sessions-
|
|
1
|
+
import{et as normalizeStringEntries}from"./sessions-BuZVmOWt.js";import{i as readChannelAllowFromStore}from"./pairing-store-ti3FEkmr.js";function normalizeTelegramAllowFromEntry(raw){return(typeof raw==`string`?raw:typeof raw==`number`?String(raw):``).trim().replace(/^(telegram|tg):/i,``).trim()}function isNumericTelegramUserId(raw){return/^-?\d+$/.test(raw)}async function resolveDmAllowState(params){let configAllowFrom=normalizeStringEntries(Array.isArray(params.allowFrom)?params.allowFrom:void 0),hasWildcard=configAllowFrom.includes(`*`),storeAllowFrom=await(params.readStore??readChannelAllowFromStore)(params.provider).catch(()=>[]),normalizeEntry=params.normalizeEntry??(value=>value),normalizedCfg=configAllowFrom.filter(value=>value!==`*`).map(value=>normalizeEntry(value)).map(value=>value.trim()).filter(Boolean),normalizedStore=storeAllowFrom.map(value=>normalizeEntry(value)).map(value=>value.trim()).filter(Boolean),allowCount=Array.from(new Set([...normalizedCfg,...normalizedStore])).length;return{configAllowFrom,hasWildcard,allowCount,isMultiUserDm:hasWildcard||allowCount>1}}export{isNumericTelegramUserId as n,normalizeTelegramAllowFromEntry as r,resolveDmAllowState as t};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-
|
|
1
|
+
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-pt7Tr4HA.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import{r as loadConfig}from"./io-D9hC2aG0.js";import"./manifest-registry-009gLJ4l.js";import"./config-BpChMIJ6.js";import{n as pickPrimaryTailnetIPv4,r as pickPrimaryTailnetIPv6}from"./tailnet-B0Q5E6lZ.js";import{t as formatDocsLink}from"./links-BKzP7VVP.js";import{t as renderTable}from"./table-BFCCZDsp.js";import{n as resolveWideAreaDiscoveryDomain,t as getWideAreaZonePath}from"./widearea-dns-DvQozd9v.js";import{spawnSync}from"node:child_process";import path from"node:path";import fs from"node:fs";function run(cmd,args,opts){let res=spawnSync(cmd,args,{encoding:`utf-8`,stdio:opts?.inherit?`inherit`:`pipe`});if(res.error)throw res.error;if(!opts?.allowFailure&&res.status!==0){let errText=typeof res.stderr==`string`&&res.stderr.trim()?res.stderr.trim():`exit ${res.status??`unknown`}`;throw Error(`${cmd} ${args.join(` `)} failed: ${errText}`)}return typeof res.stdout==`string`?res.stdout:``}function writeFileSudoIfNeeded(filePath,content){try{fs.writeFileSync(filePath,content,`utf-8`);return}catch(err){let code=err.code;if(code!==`EACCES`&&code!==`EPERM`)throw err instanceof Error?err:Error(String(err))}let res=spawnSync(`sudo`,[`tee`,filePath],{input:content,encoding:`utf-8`,stdio:[`pipe`,`ignore`,`inherit`]});if(res.error)throw res.error;if(res.status!==0)throw Error(`sudo tee ${filePath} failed: exit ${res.status??`unknown`}`)}function mkdirSudoIfNeeded(dirPath){try{fs.mkdirSync(dirPath,{recursive:!0});return}catch(err){let code=err.code;if(code!==`EACCES`&&code!==`EPERM`)throw err instanceof Error?err:Error(String(err))}run(`sudo`,[`mkdir`,`-p`,dirPath],{inherit:!0})}function zoneFileNeedsBootstrap(zonePath){if(!fs.existsSync(zonePath))return!0;try{let content=fs.readFileSync(zonePath,`utf-8`);return!/\bSOA\b/.test(content)||!/\bNS\b/.test(content)}catch{return!0}}function detectBrewPrefix(){let prefix=run(`brew`,[`--prefix`]).trim();if(!prefix)throw Error(`failed to resolve Homebrew prefix`);return prefix}function ensureImportLine(corefilePath,importGlob){let existing=fs.readFileSync(corefilePath,`utf-8`);return existing.includes(importGlob)?!1:(writeFileSudoIfNeeded(corefilePath,`${existing.replace(/\s*$/,``)}\n\nimport ${importGlob}\n`),!0)}function registerDnsCli(program){program.command(`dns`).description(`DNS helpers for wide-area discovery (Tailscale + CoreDNS)`).addHelpText(`after`,()=>`\n${theme.muted(`Docs:`)} ${formatDocsLink(`/cli/dns`,`docs.builderforce.ai/cli/dns`)}\n`).command(`setup`).description(`Set up CoreDNS to serve your discovery domain for unicast DNS-SD (Wide-Area Bonjour)`).option(`--domain <domain>`,`Wide-area discovery domain (e.g. builderforce.internal)`).option(`--apply`,`Install/update CoreDNS config and (re)start the service (requires sudo)`,!1).action(async opts=>{let cfg=loadConfig(),tailnetIPv4=pickPrimaryTailnetIPv4(),tailnetIPv6=pickPrimaryTailnetIPv6(),wideAreaDomain=resolveWideAreaDiscoveryDomain({configDomain:opts.domain??cfg.discovery?.wideArea?.domain});if(!wideAreaDomain)throw Error(`No wide-area domain configured. Set discovery.wideArea.domain or pass --domain.`);let zonePath=getWideAreaZonePath(wideAreaDomain),tableWidth=Math.max(60,(process.stdout.columns??120)-1);if(defaultRuntime.log(theme.heading(`DNS setup`)),defaultRuntime.log(renderTable({width:tableWidth,columns:[{key:`Key`,header:`Key`,minWidth:18},{key:`Value`,header:`Value`,minWidth:24,flex:!0}],rows:[{Key:`Domain`,Value:wideAreaDomain},{Key:`Zone file`,Value:zonePath},{Key:`Tailnet IP`,Value:`${tailnetIPv4??`—`}${tailnetIPv6?` (v6 ${tailnetIPv6})`:``}`}]}).trimEnd()),defaultRuntime.log(``),defaultRuntime.log(theme.heading(`Recommended ~/.builderforce/builderforce.json:`)),defaultRuntime.log(JSON.stringify({gateway:{bind:`auto`},discovery:{wideArea:{enabled:!0,domain:wideAreaDomain}}},null,2)),defaultRuntime.log(``),defaultRuntime.log(theme.heading(`Tailscale admin (DNS → Nameservers):`)),defaultRuntime.log(theme.muted(`- Add nameserver: ${tailnetIPv4??`<this machine's tailnet IPv4>`}`)),defaultRuntime.log(theme.muted(`- Restrict to domain (Split DNS): ${wideAreaDomain.replace(/\.$/,``)}`)),!opts.apply){defaultRuntime.log(``),defaultRuntime.log(theme.muted(`Run with --apply to install CoreDNS and configure it.`));return}if(process.platform!==`darwin`)throw Error(`dns setup is currently supported on macOS only`);if(!tailnetIPv4&&!tailnetIPv6)throw Error(`no tailnet IP detected; ensure Tailscale is running on this machine`);let prefix=detectBrewPrefix(),etcDir=path.join(prefix,`etc`,`coredns`),corefilePath=path.join(etcDir,`Corefile`),confDir=path.join(etcDir,`conf.d`),importGlob=path.join(confDir,`*.server`),serverPath=path.join(confDir,`${wideAreaDomain.replace(/\.$/,``)}.server`);run(`brew`,[`list`,`coredns`],{allowFailure:!0}),run(`brew`,[`install`,`coredns`],{inherit:!0,allowFailure:!0}),mkdirSudoIfNeeded(confDir),fs.existsSync(corefilePath)?ensureImportLine(corefilePath,importGlob):writeFileSudoIfNeeded(corefilePath,`import ${importGlob}\n`);let bindArgs=[tailnetIPv4,tailnetIPv6].filter(v=>!!v?.trim());if(writeFileSudoIfNeeded(serverPath,[`${wideAreaDomain.replace(/\.$/,``)}:53 {`,` bind ${bindArgs.join(` `)}`,` file ${zonePath} {`,` reload 10s`,` }`,` errors`,` log`,`}`,``].join(`
|
|
2
2
|
`)),await fs.promises.mkdir(path.dirname(zonePath),{recursive:!0}),zoneFileNeedsBootstrap(zonePath)){let serial=`${new Date().getUTCFullYear()}${String(new Date().getUTCMonth()+1).padStart(2,`0`)}${String(new Date().getUTCDate()).padStart(2,`0`)}01`,zoneLines=[`; created by builderforce dns setup (will be overwritten by the gateway when wide-area discovery is enabled)`,`$ORIGIN ${wideAreaDomain}`,`$TTL 60`,`@ IN SOA ns1 hostmaster ${serial} 7200 3600 1209600 60`,`@ IN NS ns1`,tailnetIPv4?`ns1 IN A ${tailnetIPv4}`:null,tailnetIPv6?`ns1 IN AAAA ${tailnetIPv6}`:null,``].filter(line=>!!line);fs.writeFileSync(zonePath,zoneLines.join(`
|
|
3
3
|
`),`utf-8`)}defaultRuntime.log(``),defaultRuntime.log(theme.heading(`Starting CoreDNS (sudo)…`)),run(`sudo`,[`brew`,`services`,`restart`,`coredns`],{inherit:!0}),cfg.discovery?.wideArea?.enabled!==!0&&(defaultRuntime.log(``),defaultRuntime.log(theme.muted(`Note: enable discovery.wideArea.enabled in ~/.builderforce/builderforce.json on the gateway and restart the gateway so it writes the DNS-SD zone.`)))})}export{registerDnsCli};
|