@seanhogg/builderforce-agents 2026.10.10 → 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/{audio-preflight-Dm9zyfJq.js → audio-preflight-CvvHdoWy.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-2EpP2M8q.js → builderforce-B9187Tm9.js} +4 -4
- package/dist/{builderforce-Cyg20uU8.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-Brg9KsB9.js +4 -0
- 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-CDcuHGpx.js → command-registry-B7uAoROP.js} +1 -1
- package/dist/{command-registry-hHegQvBn.js → command-registry-CW16Mk2Y.js} +1 -1
- package/dist/{completion-cli-Bqr0W4L6.js → completion-cli-ZvXrCQqk.js} +1 -1
- package/dist/{completion-cli-Ch9ozmkg.js → completion-cli-gyvx5ZXu.js} +1 -1
- package/dist/{completion-cli-Do4vXo1k.js → completion-cli-n8UsdT91.js} +1 -1
- package/dist/{completion-cli-Ck0FTqPT.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-BjBTLcoC.js → doctor-completion-94zme499.js} +1 -1
- package/dist/{doctor-completion-Ccs-JEvV.js → doctor-completion-CbF34DIH.js} +1 -1
- package/dist/{embedded-cvG_LpfQ.js → embedded-D-citLF2.js} +6 -6
- 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/extensionAPI.js +1 -1
- package/dist/{gateway-cli-CiHNwzdS.js → gateway-cli-CKcoLVMA.js} +5 -5
- package/dist/{gateway-cli-z47dfosr.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-D4uXN5Ec.js → onboard-BItclJp0.js} +1 -1
- package/dist/{onboard-cB37uVxy.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-vwqLS6pe.js → onboard-interactive-Cl2K3EYn.js} +1 -1
- package/dist/{onboard-interactive-gvfRcLOt.js → onboard-interactive-JNux9zfA.js} +1 -1
- package/dist/{onboard-interactive-CnXgQrpI.js → onboard-interactive-J_ObFzeW.js} +1 -1
- package/dist/{onboard-interactive-CoFFuSJT.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-DdKW5K8Y.js → onboarding-BSENgR9C.js} +5 -5
- package/dist/{onboarding-B9GqKO5L.js → onboarding-CIaZLNc1.js} +5 -5
- package/dist/{onboarding.finalize-CcuO4Yxw.js → onboarding.finalize-BwOpvoPE.js} +1 -1
- package/dist/{onboarding.finalize-D3mTpOdc.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/agent-runtime/src/infra/workflow-telemetry.d.ts +12 -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-CpxTJP1m.js → program-context-ClBa4lUj.js} +1 -1
- package/dist/{program-BgDciyOQ.js → program-vVCzU0cH.js} +2 -2
- package/dist/{prompt-select-styled-Qb0DubNy.js → prompt-select-styled-BJPGccTJ.js} +1 -1
- package/dist/{prompt-select-styled-Bu7WPMzB.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/{pw-ai-D8HJAvv-.js → pw-ai-DaxMmaVL.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-CPnm6L-m.js → register.maintenance-C6ocMld2.js} +1 -1
- package/dist/{register.maintenance-D8WmeEaD.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-DMfqe2nX.js → register.onboard-B34211N6.js} +1 -1
- package/dist/{register.onboard-BoUicPRh.js → register.onboard-S1d2WAE4.js} +1 -1
- package/dist/{register.setup-BK6OEvY3.js → register.setup-CJPyAwCQ.js} +1 -1
- package/dist/{register.setup-CtcAR3JR.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-Dl6jPPsc.js → register.subclis-C9V_M-Lk.js} +1 -1
- package/dist/{register.subclis-EScCVgbV.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-C3lmcvyV.js → run-main-DQMbgbcF.js} +1 -1
- package/dist/{runner-CviGu3Nk.js → runner-COldX-El.js} +3 -3
- 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-D2sTsa4p.js → tui-DnVRxfI8.js} +2 -2
- package/dist/{tui-DY2oYbxk.js → tui-JfWoLGIV.js} +2 -2
- package/dist/{tui-cli-GW-qybY6.js → tui-cli-CGjg2Eb5.js} +1 -1
- package/dist/{tui-cli-wn3DmvUG.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-K5dGZmg8.js → update-cli-CfJJcSUS.js} +1 -1
- package/dist/{update-cli-CN0oxZ_A.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-DONGrYXq.js → web-BQPd6gQJ.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-C89jVb-9.js +0 -24
- package/dist/builderforce-onboarding-D5A-wEs-.js +0 -24
- package/dist/chrome-DUBgoZpO.js +0 -4
- 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/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{t as CONFIG_PATH,u as resolveGatewayPort}from"./paths-5FcIFMsj.js";import{B as theme,O as danger,o as displayPath}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{t as runCommandWithTimeout}from"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-9bRFKBI_.js";import{t as formatCliCommand}from"./command-format-D806O2pt.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import{a as readConfigFileSnapshot,c as writeConfigFile,f as validateConfigObjectWithPlugins,r as loadConfig}from"./io-3R_ZyUxB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-_1Ca6jGb.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import{t as formatDocsLink}from"./links-BgWWaaOT.js";import{C as normalizeServePath,S as normalizeHooksPath,T as resolveGmailHookRuntimeConfig,_ as buildGogWatchServeArgs,a as ensureTopic,b as generateHookToken,c as DEFAULT_GMAIL_LABEL,d as DEFAULT_GMAIL_SERVE_BIND,f as DEFAULT_GMAIL_SERVE_PATH,g as buildDefaultHookUrl,h as DEFAULT_GMAIL_TOPIC,i as ensureTailscaleEndpoint,l as DEFAULT_GMAIL_MAX_BYTES,m as DEFAULT_GMAIL_SUBSCRIPTION,n as ensureGcloudAuth,o as resolveProjectIdFromGogCredentials,p as DEFAULT_GMAIL_SERVE_PORT,r as ensureSubscription,s as runGcloud,t as ensureDependency,u as DEFAULT_GMAIL_RENEW_MINUTES,v as buildGogWatchStartArgs,w as parseTopicPath,x as mergeHookPresets,y as buildTopicPath}from"./gmail-setup-utils-n7gVQG7k.js";import{spawn}from"node:child_process";async function runGmailSetup(opts){await ensureDependency(`gcloud`,[`--cask`,`gcloud-cli`]),await ensureDependency(`gog`,[`gogcli`]),opts.tailscale!==`off`&&!opts.pushEndpoint&&await ensureDependency(`tailscale`,[`tailscale`]),await ensureGcloudAuth();let configSnapshot=await readConfigFileSnapshot();if(!configSnapshot.valid)throw Error(`Config invalid: ${CONFIG_PATH}`);let baseConfig=configSnapshot.config,hooksPath=normalizeHooksPath(baseConfig.hooks?.path),hookToken=opts.hookToken??baseConfig.hooks?.token??generateHookToken(),pushToken=opts.pushToken??baseConfig.hooks?.gmail?.pushToken??generateHookToken(),topicInput=opts.topic??baseConfig.hooks?.gmail?.topic??DEFAULT_GMAIL_TOPIC,parsedTopic=parseTopicPath(topicInput),topicName=parsedTopic?.topicName??topicInput,projectId=opts.project??parsedTopic?.projectId??await resolveProjectIdFromGogCredentials();if(!projectId)throw Error(`GCP project id required (use --project or ensure gog credentials are available)`);let topicPath=buildTopicPath(projectId,topicName),subscription=opts.subscription??DEFAULT_GMAIL_SUBSCRIPTION,label=opts.label??DEFAULT_GMAIL_LABEL,hookUrl=opts.hookUrl??baseConfig.hooks?.gmail?.hookUrl??buildDefaultHookUrl(hooksPath,resolveGatewayPort(baseConfig)),serveBind=opts.bind??DEFAULT_GMAIL_SERVE_BIND,servePort=opts.port??DEFAULT_GMAIL_SERVE_PORT,configuredServePath=opts.path??baseConfig.hooks?.gmail?.serve?.path,configuredTailscaleTarget=opts.tailscaleTarget??baseConfig.hooks?.gmail?.tailscale?.target,normalizedServePath=typeof configuredServePath==`string`&&configuredServePath.trim().length>0?normalizeServePath(configuredServePath):DEFAULT_GMAIL_SERVE_PATH,normalizedTailscaleTarget=typeof configuredTailscaleTarget==`string`&&configuredTailscaleTarget.trim().length>0?configuredTailscaleTarget.trim():void 0,includeBody=opts.includeBody??!0,maxBytes=opts.maxBytes??DEFAULT_GMAIL_MAX_BYTES,renewEveryMinutes=opts.renewEveryMinutes??DEFAULT_GMAIL_RENEW_MINUTES,tailscaleMode=opts.tailscale??`funnel`,servePath=normalizeServePath(tailscaleMode!==`off`&&!normalizedTailscaleTarget?`/`:normalizedServePath),tailscalePath=normalizeServePath(opts.tailscalePath??baseConfig.hooks?.gmail?.tailscale?.path??(tailscaleMode===`off`?servePath:normalizedServePath));await runGcloud([`config`,`set`,`project`,projectId,`--quiet`]),await runGcloud([`services`,`enable`,`gmail.googleapis.com`,`pubsub.googleapis.com`,`--project`,projectId,`--quiet`]),await ensureTopic(projectId,topicName),await runGcloud([`pubsub`,`topics`,`add-iam-policy-binding`,topicName,`--project`,projectId,`--member`,`serviceAccount:gmail-api-push@system.gserviceaccount.com`,`--role`,`roles/pubsub.publisher`,`--quiet`]);let pushEndpoint=opts.pushEndpoint?opts.pushEndpoint:await ensureTailscaleEndpoint({mode:tailscaleMode,path:tailscalePath,port:servePort,target:normalizedTailscaleTarget,token:pushToken});if(!pushEndpoint)throw Error(`push endpoint required (set --push-endpoint)`);await ensureSubscription(projectId,subscription,topicName,pushEndpoint),await startGmailWatch({account:opts.account,label,topic:topicPath},!0);let validated=validateConfigObjectWithPlugins({...baseConfig,hooks:{...baseConfig.hooks,enabled:!0,path:hooksPath,token:hookToken,presets:mergeHookPresets(baseConfig.hooks?.presets,`gmail`),gmail:{...baseConfig.hooks?.gmail,account:opts.account,label,topic:topicPath,subscription,pushToken,hookUrl,includeBody,maxBytes,renewEveryMinutes,serve:{...baseConfig.hooks?.gmail?.serve,bind:serveBind,port:servePort,path:servePath},tailscale:{...baseConfig.hooks?.gmail?.tailscale,mode:tailscaleMode,path:tailscalePath,target:normalizedTailscaleTarget}}}});if(!validated.ok)throw Error(`Config validation failed: ${validated.issues[0]?.message??`invalid`}`);await writeConfigFile(validated.config);let summary={projectId,topic:topicPath,subscription,pushEndpoint,hookUrl,hookToken,pushToken,serve:{bind:serveBind,port:servePort,path:servePath}};if(opts.json){defaultRuntime.log(JSON.stringify(summary,null,2));return}defaultRuntime.log(`Gmail hooks configured:`),defaultRuntime.log(`- project: ${projectId}`),defaultRuntime.log(`- topic: ${topicPath}`),defaultRuntime.log(`- subscription: ${subscription}`),defaultRuntime.log(`- push endpoint: ${pushEndpoint}`),defaultRuntime.log(`- hook url: ${hookUrl}`),defaultRuntime.log(`- config: ${displayPath(CONFIG_PATH)}`),defaultRuntime.log(`Next: ${formatCliCommand(`builderforce webhooks gmail run`)}`)}async function runGmailService(opts){await ensureDependency(`gog`,[`gogcli`]);let resolved=resolveGmailHookRuntimeConfig(loadConfig(),{account:opts.account,topic:opts.topic,subscription:opts.subscription,label:opts.label,hookToken:opts.hookToken,pushToken:opts.pushToken,hookUrl:opts.hookUrl,serveBind:opts.bind,servePort:opts.port,servePath:opts.path,includeBody:opts.includeBody,maxBytes:opts.maxBytes,renewEveryMinutes:opts.renewEveryMinutes,tailscaleMode:opts.tailscale,tailscalePath:opts.tailscalePath,tailscaleTarget:opts.tailscaleTarget});if(!resolved.ok)throw Error(resolved.error);let runtimeConfig=resolved.value;runtimeConfig.tailscale.mode!==`off`&&(await ensureDependency(`tailscale`,[`tailscale`]),await ensureTailscaleEndpoint({mode:runtimeConfig.tailscale.mode,path:runtimeConfig.tailscale.path,port:runtimeConfig.serve.port,target:runtimeConfig.tailscale.target})),await startGmailWatch(runtimeConfig);let shuttingDown=!1,child=spawnGogServe(runtimeConfig),renewMs=runtimeConfig.renewEveryMinutes*6e4,renewTimer=setInterval(()=>{startGmailWatch(runtimeConfig)},renewMs),detachSignals=()=>{process.off(`SIGINT`,shutdown),process.off(`SIGTERM`,shutdown)},shutdown=()=>{shuttingDown||(shuttingDown=!0,detachSignals(),clearInterval(renewTimer),child.kill(`SIGTERM`))};process.on(`SIGINT`,shutdown),process.on(`SIGTERM`,shutdown),child.on(`exit`,()=>{if(shuttingDown){detachSignals();return}defaultRuntime.log(`gog watch serve exited; restarting in 2s`),setTimeout(()=>{shuttingDown||(child=spawnGogServe(runtimeConfig))},2e3)})}function spawnGogServe(cfg){let args=buildGogWatchServeArgs(cfg);return defaultRuntime.log(`Starting gog ${args.join(` `)}`),spawn(`gog`,args,{stdio:`inherit`})}async function startGmailWatch(cfg,fatal=!1){let result=await runCommandWithTimeout([`gog`,...buildGogWatchStartArgs(cfg)],{timeoutMs:12e4});if(result.code!==0){let message=result.stderr||result.stdout||`gog watch start failed`;if(fatal)throw Error(message);defaultRuntime.error(message)}}function registerWebhooksCli(program){let gmail=program.command(`webhooks`).description(`Webhook helpers and integrations`).addHelpText(`after`,()=>`\n${theme.muted(`Docs:`)} ${formatDocsLink(`/cli/webhooks`,`docs.builderforce.ai/cli/webhooks`)}\n`).command(`gmail`).description(`Gmail Pub/Sub hooks (via gogcli)`);gmail.command(`setup`).description(`Configure Gmail watch + Pub/Sub + BuilderForceAgents hooks`).requiredOption(`--account <email>`,`Gmail account to watch`).option(`--project <id>`,`GCP project id (OAuth client owner)`).option(`--topic <name>`,`Pub/Sub topic name`,DEFAULT_GMAIL_TOPIC).option(`--subscription <name>`,`Pub/Sub subscription name`,DEFAULT_GMAIL_SUBSCRIPTION).option(`--label <label>`,`Gmail label to watch`,DEFAULT_GMAIL_LABEL).option(`--hook-url <url>`,`BuilderForceAgents hook URL`).option(`--hook-token <token>`,`BuilderForceAgents hook token`).option(`--push-token <token>`,`Push token for gog watch serve`).option(`--bind <host>`,`gog watch serve bind host`,DEFAULT_GMAIL_SERVE_BIND).option(`--port <port>`,`gog watch serve port`,String(DEFAULT_GMAIL_SERVE_PORT)).option(`--path <path>`,`gog watch serve path`,DEFAULT_GMAIL_SERVE_PATH).option(`--include-body`,`Include email body snippets`,!0).option(`--max-bytes <n>`,`Max bytes for body snippets`,String(DEFAULT_GMAIL_MAX_BYTES)).option(`--renew-minutes <n>`,`Renew watch every N minutes`,String(DEFAULT_GMAIL_RENEW_MINUTES)).option(`--tailscale <mode>`,`Expose push endpoint via tailscale (funnel|serve|off)`,`funnel`).option(`--tailscale-path <path>`,`Path for tailscale serve/funnel`).option(`--tailscale-target <target>`,`Tailscale serve/funnel target (port, host:port, or URL)`).option(`--push-endpoint <url>`,`Explicit Pub/Sub push endpoint`).option(`--json`,`Output JSON summary`,!1).action(async opts=>{try{await runGmailSetup(parseGmailSetupOptions(opts))}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}}),gmail.command(`run`).description(`Run gog watch serve + auto-renew loop`).option(`--account <email>`,`Gmail account to watch`).option(`--topic <topic>`,`Pub/Sub topic path (projects/.../topics/..)`).option(`--subscription <name>`,`Pub/Sub subscription name`).option(`--label <label>`,`Gmail label to watch`).option(`--hook-url <url>`,`BuilderForceAgents hook URL`).option(`--hook-token <token>`,`BuilderForceAgents hook token`).option(`--push-token <token>`,`Push token for gog watch serve`).option(`--bind <host>`,`gog watch serve bind host`).option(`--port <port>`,`gog watch serve port`).option(`--path <path>`,`gog watch serve path`).option(`--include-body`,`Include email body snippets`).option(`--max-bytes <n>`,`Max bytes for body snippets`).option(`--renew-minutes <n>`,`Renew watch every N minutes`).option(`--tailscale <mode>`,`Expose push endpoint via tailscale (funnel|serve|off)`).option(`--tailscale-path <path>`,`Path for tailscale serve/funnel`).option(`--tailscale-target <target>`,`Tailscale serve/funnel target (port, host:port, or URL)`).action(async opts=>{try{await runGmailService(parseGmailRunOptions(opts))}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}})}function parseGmailSetupOptions(raw){let accountRaw=raw.account,account=typeof accountRaw==`string`?accountRaw.trim():``;if(!account)throw Error(`--account is required`);let common=parseGmailCommonOptions(raw);return{account,project:stringOption(raw.project),...gmailOptionsFromCommon(common),pushEndpoint:stringOption(raw.pushEndpoint),json:!!raw.json}}function parseGmailRunOptions(raw){let common=parseGmailCommonOptions(raw);return{account:stringOption(raw.account),...gmailOptionsFromCommon(common)}}function parseGmailCommonOptions(raw){return{topic:stringOption(raw.topic),subscription:stringOption(raw.subscription),label:stringOption(raw.label),hookUrl:stringOption(raw.hookUrl),hookToken:stringOption(raw.hookToken),pushToken:stringOption(raw.pushToken),bind:stringOption(raw.bind),port:numberOption(raw.port),path:stringOption(raw.path),includeBody:booleanOption(raw.includeBody),maxBytes:numberOption(raw.maxBytes),renewEveryMinutes:numberOption(raw.renewMinutes),tailscaleRaw:stringOption(raw.tailscale),tailscalePath:stringOption(raw.tailscalePath),tailscaleTarget:stringOption(raw.tailscaleTarget)}}function gmailOptionsFromCommon(common){return{topic:common.topic,subscription:common.subscription,label:common.label,hookUrl:common.hookUrl,hookToken:common.hookToken,pushToken:common.pushToken,bind:common.bind,port:common.port,path:common.path,includeBody:common.includeBody,maxBytes:common.maxBytes,renewEveryMinutes:common.renewEveryMinutes,tailscale:common.tailscaleRaw,tailscalePath:common.tailscalePath,tailscaleTarget:common.tailscaleTarget}}function stringOption(value){return typeof value==`string`&&value.trim()||void 0}function numberOption(value){if(value==null)return;let n=typeof value==`number`?value:Number(value);if(!(!Number.isFinite(n)||n<=0))return Math.floor(n)}function booleanOption(value){if(value!=null)return!!value}export{registerWebhooksCli};
|
|
1
|
+
import{t as CONFIG_PATH,u as resolveGatewayPort}from"./paths-5FcIFMsj.js";import{B as theme,O as danger,o as displayPath}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{t as runCommandWithTimeout}from"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-DG9J_VTz.js";import{t as formatCliCommand}from"./command-format-D806O2pt.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import{a as readConfigFileSnapshot,c as writeConfigFile,f as validateConfigObjectWithPlugins,r as loadConfig}from"./io-BLBq4T2o.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BgV_FYSq.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import{t as formatDocsLink}from"./links-BgWWaaOT.js";import{C as normalizeServePath,S as normalizeHooksPath,T as resolveGmailHookRuntimeConfig,_ as buildGogWatchServeArgs,a as ensureTopic,b as generateHookToken,c as DEFAULT_GMAIL_LABEL,d as DEFAULT_GMAIL_SERVE_BIND,f as DEFAULT_GMAIL_SERVE_PATH,g as buildDefaultHookUrl,h as DEFAULT_GMAIL_TOPIC,i as ensureTailscaleEndpoint,l as DEFAULT_GMAIL_MAX_BYTES,m as DEFAULT_GMAIL_SUBSCRIPTION,n as ensureGcloudAuth,o as resolveProjectIdFromGogCredentials,p as DEFAULT_GMAIL_SERVE_PORT,r as ensureSubscription,s as runGcloud,t as ensureDependency,u as DEFAULT_GMAIL_RENEW_MINUTES,v as buildGogWatchStartArgs,w as parseTopicPath,x as mergeHookPresets,y as buildTopicPath}from"./gmail-setup-utils-n7gVQG7k.js";import{spawn}from"node:child_process";async function runGmailSetup(opts){await ensureDependency(`gcloud`,[`--cask`,`gcloud-cli`]),await ensureDependency(`gog`,[`gogcli`]),opts.tailscale!==`off`&&!opts.pushEndpoint&&await ensureDependency(`tailscale`,[`tailscale`]),await ensureGcloudAuth();let configSnapshot=await readConfigFileSnapshot();if(!configSnapshot.valid)throw Error(`Config invalid: ${CONFIG_PATH}`);let baseConfig=configSnapshot.config,hooksPath=normalizeHooksPath(baseConfig.hooks?.path),hookToken=opts.hookToken??baseConfig.hooks?.token??generateHookToken(),pushToken=opts.pushToken??baseConfig.hooks?.gmail?.pushToken??generateHookToken(),topicInput=opts.topic??baseConfig.hooks?.gmail?.topic??DEFAULT_GMAIL_TOPIC,parsedTopic=parseTopicPath(topicInput),topicName=parsedTopic?.topicName??topicInput,projectId=opts.project??parsedTopic?.projectId??await resolveProjectIdFromGogCredentials();if(!projectId)throw Error(`GCP project id required (use --project or ensure gog credentials are available)`);let topicPath=buildTopicPath(projectId,topicName),subscription=opts.subscription??DEFAULT_GMAIL_SUBSCRIPTION,label=opts.label??DEFAULT_GMAIL_LABEL,hookUrl=opts.hookUrl??baseConfig.hooks?.gmail?.hookUrl??buildDefaultHookUrl(hooksPath,resolveGatewayPort(baseConfig)),serveBind=opts.bind??DEFAULT_GMAIL_SERVE_BIND,servePort=opts.port??DEFAULT_GMAIL_SERVE_PORT,configuredServePath=opts.path??baseConfig.hooks?.gmail?.serve?.path,configuredTailscaleTarget=opts.tailscaleTarget??baseConfig.hooks?.gmail?.tailscale?.target,normalizedServePath=typeof configuredServePath==`string`&&configuredServePath.trim().length>0?normalizeServePath(configuredServePath):DEFAULT_GMAIL_SERVE_PATH,normalizedTailscaleTarget=typeof configuredTailscaleTarget==`string`&&configuredTailscaleTarget.trim().length>0?configuredTailscaleTarget.trim():void 0,includeBody=opts.includeBody??!0,maxBytes=opts.maxBytes??DEFAULT_GMAIL_MAX_BYTES,renewEveryMinutes=opts.renewEveryMinutes??DEFAULT_GMAIL_RENEW_MINUTES,tailscaleMode=opts.tailscale??`funnel`,servePath=normalizeServePath(tailscaleMode!==`off`&&!normalizedTailscaleTarget?`/`:normalizedServePath),tailscalePath=normalizeServePath(opts.tailscalePath??baseConfig.hooks?.gmail?.tailscale?.path??(tailscaleMode===`off`?servePath:normalizedServePath));await runGcloud([`config`,`set`,`project`,projectId,`--quiet`]),await runGcloud([`services`,`enable`,`gmail.googleapis.com`,`pubsub.googleapis.com`,`--project`,projectId,`--quiet`]),await ensureTopic(projectId,topicName),await runGcloud([`pubsub`,`topics`,`add-iam-policy-binding`,topicName,`--project`,projectId,`--member`,`serviceAccount:gmail-api-push@system.gserviceaccount.com`,`--role`,`roles/pubsub.publisher`,`--quiet`]);let pushEndpoint=opts.pushEndpoint?opts.pushEndpoint:await ensureTailscaleEndpoint({mode:tailscaleMode,path:tailscalePath,port:servePort,target:normalizedTailscaleTarget,token:pushToken});if(!pushEndpoint)throw Error(`push endpoint required (set --push-endpoint)`);await ensureSubscription(projectId,subscription,topicName,pushEndpoint),await startGmailWatch({account:opts.account,label,topic:topicPath},!0);let validated=validateConfigObjectWithPlugins({...baseConfig,hooks:{...baseConfig.hooks,enabled:!0,path:hooksPath,token:hookToken,presets:mergeHookPresets(baseConfig.hooks?.presets,`gmail`),gmail:{...baseConfig.hooks?.gmail,account:opts.account,label,topic:topicPath,subscription,pushToken,hookUrl,includeBody,maxBytes,renewEveryMinutes,serve:{...baseConfig.hooks?.gmail?.serve,bind:serveBind,port:servePort,path:servePath},tailscale:{...baseConfig.hooks?.gmail?.tailscale,mode:tailscaleMode,path:tailscalePath,target:normalizedTailscaleTarget}}}});if(!validated.ok)throw Error(`Config validation failed: ${validated.issues[0]?.message??`invalid`}`);await writeConfigFile(validated.config);let summary={projectId,topic:topicPath,subscription,pushEndpoint,hookUrl,hookToken,pushToken,serve:{bind:serveBind,port:servePort,path:servePath}};if(opts.json){defaultRuntime.log(JSON.stringify(summary,null,2));return}defaultRuntime.log(`Gmail hooks configured:`),defaultRuntime.log(`- project: ${projectId}`),defaultRuntime.log(`- topic: ${topicPath}`),defaultRuntime.log(`- subscription: ${subscription}`),defaultRuntime.log(`- push endpoint: ${pushEndpoint}`),defaultRuntime.log(`- hook url: ${hookUrl}`),defaultRuntime.log(`- config: ${displayPath(CONFIG_PATH)}`),defaultRuntime.log(`Next: ${formatCliCommand(`builderforce webhooks gmail run`)}`)}async function runGmailService(opts){await ensureDependency(`gog`,[`gogcli`]);let resolved=resolveGmailHookRuntimeConfig(loadConfig(),{account:opts.account,topic:opts.topic,subscription:opts.subscription,label:opts.label,hookToken:opts.hookToken,pushToken:opts.pushToken,hookUrl:opts.hookUrl,serveBind:opts.bind,servePort:opts.port,servePath:opts.path,includeBody:opts.includeBody,maxBytes:opts.maxBytes,renewEveryMinutes:opts.renewEveryMinutes,tailscaleMode:opts.tailscale,tailscalePath:opts.tailscalePath,tailscaleTarget:opts.tailscaleTarget});if(!resolved.ok)throw Error(resolved.error);let runtimeConfig=resolved.value;runtimeConfig.tailscale.mode!==`off`&&(await ensureDependency(`tailscale`,[`tailscale`]),await ensureTailscaleEndpoint({mode:runtimeConfig.tailscale.mode,path:runtimeConfig.tailscale.path,port:runtimeConfig.serve.port,target:runtimeConfig.tailscale.target})),await startGmailWatch(runtimeConfig);let shuttingDown=!1,child=spawnGogServe(runtimeConfig),renewMs=runtimeConfig.renewEveryMinutes*6e4,renewTimer=setInterval(()=>{startGmailWatch(runtimeConfig)},renewMs),detachSignals=()=>{process.off(`SIGINT`,shutdown),process.off(`SIGTERM`,shutdown)},shutdown=()=>{shuttingDown||(shuttingDown=!0,detachSignals(),clearInterval(renewTimer),child.kill(`SIGTERM`))};process.on(`SIGINT`,shutdown),process.on(`SIGTERM`,shutdown),child.on(`exit`,()=>{if(shuttingDown){detachSignals();return}defaultRuntime.log(`gog watch serve exited; restarting in 2s`),setTimeout(()=>{shuttingDown||(child=spawnGogServe(runtimeConfig))},2e3)})}function spawnGogServe(cfg){let args=buildGogWatchServeArgs(cfg);return defaultRuntime.log(`Starting gog ${args.join(` `)}`),spawn(`gog`,args,{stdio:`inherit`})}async function startGmailWatch(cfg,fatal=!1){let result=await runCommandWithTimeout([`gog`,...buildGogWatchStartArgs(cfg)],{timeoutMs:12e4});if(result.code!==0){let message=result.stderr||result.stdout||`gog watch start failed`;if(fatal)throw Error(message);defaultRuntime.error(message)}}function registerWebhooksCli(program){let gmail=program.command(`webhooks`).description(`Webhook helpers and integrations`).addHelpText(`after`,()=>`\n${theme.muted(`Docs:`)} ${formatDocsLink(`/cli/webhooks`,`docs.builderforce.ai/cli/webhooks`)}\n`).command(`gmail`).description(`Gmail Pub/Sub hooks (via gogcli)`);gmail.command(`setup`).description(`Configure Gmail watch + Pub/Sub + BuilderForceAgents hooks`).requiredOption(`--account <email>`,`Gmail account to watch`).option(`--project <id>`,`GCP project id (OAuth client owner)`).option(`--topic <name>`,`Pub/Sub topic name`,DEFAULT_GMAIL_TOPIC).option(`--subscription <name>`,`Pub/Sub subscription name`,DEFAULT_GMAIL_SUBSCRIPTION).option(`--label <label>`,`Gmail label to watch`,DEFAULT_GMAIL_LABEL).option(`--hook-url <url>`,`BuilderForceAgents hook URL`).option(`--hook-token <token>`,`BuilderForceAgents hook token`).option(`--push-token <token>`,`Push token for gog watch serve`).option(`--bind <host>`,`gog watch serve bind host`,DEFAULT_GMAIL_SERVE_BIND).option(`--port <port>`,`gog watch serve port`,String(DEFAULT_GMAIL_SERVE_PORT)).option(`--path <path>`,`gog watch serve path`,DEFAULT_GMAIL_SERVE_PATH).option(`--include-body`,`Include email body snippets`,!0).option(`--max-bytes <n>`,`Max bytes for body snippets`,String(DEFAULT_GMAIL_MAX_BYTES)).option(`--renew-minutes <n>`,`Renew watch every N minutes`,String(DEFAULT_GMAIL_RENEW_MINUTES)).option(`--tailscale <mode>`,`Expose push endpoint via tailscale (funnel|serve|off)`,`funnel`).option(`--tailscale-path <path>`,`Path for tailscale serve/funnel`).option(`--tailscale-target <target>`,`Tailscale serve/funnel target (port, host:port, or URL)`).option(`--push-endpoint <url>`,`Explicit Pub/Sub push endpoint`).option(`--json`,`Output JSON summary`,!1).action(async opts=>{try{await runGmailSetup(parseGmailSetupOptions(opts))}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}}),gmail.command(`run`).description(`Run gog watch serve + auto-renew loop`).option(`--account <email>`,`Gmail account to watch`).option(`--topic <topic>`,`Pub/Sub topic path (projects/.../topics/..)`).option(`--subscription <name>`,`Pub/Sub subscription name`).option(`--label <label>`,`Gmail label to watch`).option(`--hook-url <url>`,`BuilderForceAgents hook URL`).option(`--hook-token <token>`,`BuilderForceAgents hook token`).option(`--push-token <token>`,`Push token for gog watch serve`).option(`--bind <host>`,`gog watch serve bind host`).option(`--port <port>`,`gog watch serve port`).option(`--path <path>`,`gog watch serve path`).option(`--include-body`,`Include email body snippets`).option(`--max-bytes <n>`,`Max bytes for body snippets`).option(`--renew-minutes <n>`,`Renew watch every N minutes`).option(`--tailscale <mode>`,`Expose push endpoint via tailscale (funnel|serve|off)`).option(`--tailscale-path <path>`,`Path for tailscale serve/funnel`).option(`--tailscale-target <target>`,`Tailscale serve/funnel target (port, host:port, or URL)`).action(async opts=>{try{await runGmailService(parseGmailRunOptions(opts))}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}})}function parseGmailSetupOptions(raw){let accountRaw=raw.account,account=typeof accountRaw==`string`?accountRaw.trim():``;if(!account)throw Error(`--account is required`);let common=parseGmailCommonOptions(raw);return{account,project:stringOption(raw.project),...gmailOptionsFromCommon(common),pushEndpoint:stringOption(raw.pushEndpoint),json:!!raw.json}}function parseGmailRunOptions(raw){let common=parseGmailCommonOptions(raw);return{account:stringOption(raw.account),...gmailOptionsFromCommon(common)}}function parseGmailCommonOptions(raw){return{topic:stringOption(raw.topic),subscription:stringOption(raw.subscription),label:stringOption(raw.label),hookUrl:stringOption(raw.hookUrl),hookToken:stringOption(raw.hookToken),pushToken:stringOption(raw.pushToken),bind:stringOption(raw.bind),port:numberOption(raw.port),path:stringOption(raw.path),includeBody:booleanOption(raw.includeBody),maxBytes:numberOption(raw.maxBytes),renewEveryMinutes:numberOption(raw.renewMinutes),tailscaleRaw:stringOption(raw.tailscale),tailscalePath:stringOption(raw.tailscalePath),tailscaleTarget:stringOption(raw.tailscaleTarget)}}function gmailOptionsFromCommon(common){return{topic:common.topic,subscription:common.subscription,label:common.label,hookUrl:common.hookUrl,hookToken:common.hookToken,pushToken:common.pushToken,bind:common.bind,port:common.port,path:common.path,includeBody:common.includeBody,maxBytes:common.maxBytes,renewEveryMinutes:common.renewEveryMinutes,tailscale:common.tailscaleRaw,tailscalePath:common.tailscalePath,tailscaleTarget:common.tailscaleTarget}}function stringOption(value){return typeof value==`string`&&value.trim()||void 0}function numberOption(value){if(value==null)return;let n=typeof value==`number`?value:Number(value);if(!(!Number.isFinite(n)||n<=0))return Math.floor(n)}function booleanOption(value){if(value!=null)return!!value}export{registerWebhooksCli};
|
|
@@ -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"./message-channel-z5YRpR2d.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./image-ops-CotJhwRR.js";import"./ssrf-DJXLYZ0d.js";import"./tool-images-CCpqFtrL.js";import{a as jsonResult,n as createActionGate,s as readReactionParams,u as readStringParam}from"./common-BfwMxpLu.js";import"./chunk-Dly7lM4r.js";import"./markdown-tables-B1Rx8hv6.js";import"./fetch-guard-DnXqPKae.js";import"./fetch-Cn_THzz8.js";import"./ir-CSdQJPqu.js";import"./render-DlHYsbvQ.js";import"./tables-CojSfTth.js";import"./active-listener-Di9e1YAD.js";import{r as sendReactionWhatsApp}from"./outbound-BylJYD7n.js";async function handleWhatsAppAction(params,cfg){let action=readStringParam(params,`action`,{required:!0}),isActionEnabled=createActionGate(cfg.channels?.whatsapp?.actions);if(action===`react`){if(!isActionEnabled(`reactions`))throw Error(`WhatsApp reactions are disabled.`);let chatJid=readStringParam(params,`chatJid`,{required:!0}),messageId=readStringParam(params,`messageId`,{required:!0}),{emoji,remove,isEmpty}=readReactionParams(params,{removeErrorMessage:`Emoji is required to remove a WhatsApp reaction.`}),participant=readStringParam(params,`participant`),accountId=readStringParam(params,`accountId`),fromMeRaw=params.fromMe;return await sendReactionWhatsApp(chatJid,messageId,remove?``:emoji,{verbose:!1,fromMe:typeof fromMeRaw==`boolean`?fromMeRaw:void 0,participant:participant??void 0,accountId:accountId??void 0}),jsonResult(!remove&&!isEmpty?{ok:!0,added:emoji}:{ok:!0,removed:!0})}throw Error(`Unsupported WhatsApp action: ${action}`)}export{handleWhatsAppAction};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-
|
|
1
|
+
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-DG9J_VTz.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-BLBq4T2o.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BgV_FYSq.js";import"./ssrf-p9k-iapc.js";import"./image-ops-C8IUQKjn.js";import"./message-channel-D_jXxXQj.js";import"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./bindings-DR59065T.js";import"./tool-images-B7b_OiMz.js";import"./fetch-guard-8mwt3-hm.js";import"./fetch-BuOLY9KP.js";import{a as jsonResult,n as createActionGate,s as readReactionParams,u as readStringParam}from"./common-BTbIhLyt.js";import"./chunk-FCBlVOyo.js";import"./markdown-tables-P6uoUSFa.js";import"./ir-5BNoIXZm.js";import"./render-D1dVTEB1.js";import"./tables-ERcoWFDp.js";import"./active-listener-Dcg19lJG.js";import{r as sendReactionWhatsApp}from"./outbound-CAirtWr1.js";async function handleWhatsAppAction(params,cfg){let action=readStringParam(params,`action`,{required:!0}),isActionEnabled=createActionGate(cfg.channels?.whatsapp?.actions);if(action===`react`){if(!isActionEnabled(`reactions`))throw Error(`WhatsApp reactions are disabled.`);let chatJid=readStringParam(params,`chatJid`,{required:!0}),messageId=readStringParam(params,`messageId`,{required:!0}),{emoji,remove,isEmpty}=readReactionParams(params,{removeErrorMessage:`Emoji is required to remove a WhatsApp reaction.`}),participant=readStringParam(params,`participant`),accountId=readStringParam(params,`accountId`),fromMeRaw=params.fromMe;return await sendReactionWhatsApp(chatJid,messageId,remove?``:emoji,{verbose:!1,fromMe:typeof fromMeRaw==`boolean`?fromMeRaw:void 0,participant:participant??void 0,accountId:accountId??void 0}),jsonResult(!remove&&!isEmpty?{ok:!0,added:emoji}:{ok:!0,removed:!0})}throw Error(`Unsupported WhatsApp action: ${action}`)}export{handleWhatsAppAction};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as escapeRegExp}from"./utils-BP60e80M.js";import{t as registerBrowserRoutes}from"./routes-
|
|
1
|
+
import{c as escapeRegExp}from"./utils-BP60e80M.js";import{t as registerBrowserRoutes}from"./routes-_iZdG1Fo.js";import{execFile}from"node:child_process";import os from"node:os";import{promisify}from"node:util";const execFileAsync=promisify(execFile);let cachedPromise=null;async function tryScutil(key){try{let{stdout}=await execFileAsync(`/usr/sbin/scutil`,[`--get`,key],{timeout:1e3,windowsHide:!0}),value=String(stdout??``).trim();return value.length>0?value:null}catch{return null}}function fallbackHostName(){return os.hostname().replace(/\.local$/i,``).trim()||`builderforce`}async function getMachineDisplayName(){return cachedPromise||(cachedPromise=(async()=>{if(process.env.VITEST)return fallbackHostName();if(process.platform===`darwin`){let computerName=await tryScutil(`ComputerName`);if(computerName)return computerName;let localHostName=await tryScutil(`LocalHostName`);if(localHostName)return localHostName}return fallbackHostName()})(),cachedPromise)}function compileRoute(path){let paramNames=[],parts=path.split(`/`).map(part=>{if(part.startsWith(`:`)){let name=part.slice(1);return paramNames.push(name),`([^/]+)`}return escapeRegExp(part)});return{regex:RegExp(`^${parts.join(`/`)}$`),paramNames}}function createRegistry(){let routes=[],register=method=>(path,handler)=>{let{regex,paramNames}=compileRoute(path);routes.push({method,path,regex,paramNames,handler})};return{routes,router:{get:register(`GET`),post:register(`POST`),delete:register(`DELETE`)}}}function normalizePath(path){return path?path.startsWith(`/`)?path:`/${path}`:`/`}function createBrowserRouteDispatcher(ctx){let registry=createRegistry();return registerBrowserRoutes(registry.router,ctx),{dispatch:async req=>{let method=req.method,path=normalizePath(req.path),query=req.query??{},body=req.body,signal=req.signal,match=registry.routes.find(route=>route.method===method?route.regex.test(path):!1);if(!match)return{status:404,body:{error:`Not Found`}};let exec=match.regex.exec(path),params={};if(exec)for(let[idx,name]of match.paramNames.entries()){let value=exec[idx+1];typeof value==`string`&&(params[name]=decodeURIComponent(value))}let status=200,payload,res={status(code){return status=code,res},json(bodyValue){payload=bodyValue}};try{await match.handler({params,query,body,signal},res)}catch(err){return{status:500,body:{error:String(err)}}}return{status,body:payload}}}}async function withTimeout(work,timeoutMs,label){let resolved=typeof timeoutMs==`number`&&Number.isFinite(timeoutMs)?Math.max(1,Math.floor(timeoutMs)):void 0;if(!resolved)return await work(void 0);let abortCtrl=new AbortController,timeoutError=Error(`${label??`request`} timed out`),timer=setTimeout(()=>abortCtrl.abort(timeoutError),resolved);timer.unref?.();let abortListener,abortPromise=abortCtrl.signal.aborted?Promise.reject(abortCtrl.signal.reason??timeoutError):new Promise((_,reject)=>{abortListener=()=>reject(abortCtrl.signal.reason??timeoutError),abortCtrl.signal.addEventListener(`abort`,abortListener,{once:!0})});try{return await Promise.race([work(abortCtrl.signal),abortPromise])}finally{clearTimeout(timer),abortListener&&abortCtrl.signal.removeEventListener(`abort`,abortListener)}}export{createBrowserRouteDispatcher as n,getMachineDisplayName as r,withTimeout as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{l as escapeRegExp}from"./utils-DbaBVFaK.js";import{t as registerBrowserRoutes}from"./routes-
|
|
1
|
+
import{l as escapeRegExp}from"./utils-DbaBVFaK.js";import{t as registerBrowserRoutes}from"./routes-DZntyPY6.js";import os from"node:os";import{execFile}from"node:child_process";import{promisify}from"node:util";const execFileAsync=promisify(execFile);let cachedPromise=null;async function tryScutil(key){try{let{stdout}=await execFileAsync(`/usr/sbin/scutil`,[`--get`,key],{timeout:1e3,windowsHide:!0}),value=String(stdout??``).trim();return value.length>0?value:null}catch{return null}}function fallbackHostName(){return os.hostname().replace(/\.local$/i,``).trim()||`builderforce`}async function getMachineDisplayName(){return cachedPromise||(cachedPromise=(async()=>{if(process.env.VITEST)return fallbackHostName();if(process.platform===`darwin`){let computerName=await tryScutil(`ComputerName`);if(computerName)return computerName;let localHostName=await tryScutil(`LocalHostName`);if(localHostName)return localHostName}return fallbackHostName()})(),cachedPromise)}function compileRoute(path){let paramNames=[],parts=path.split(`/`).map(part=>{if(part.startsWith(`:`)){let name=part.slice(1);return paramNames.push(name),`([^/]+)`}return escapeRegExp(part)});return{regex:RegExp(`^${parts.join(`/`)}$`),paramNames}}function createRegistry(){let routes=[],register=method=>(path,handler)=>{let{regex,paramNames}=compileRoute(path);routes.push({method,path,regex,paramNames,handler})};return{routes,router:{get:register(`GET`),post:register(`POST`),delete:register(`DELETE`)}}}function normalizePath(path){return path?path.startsWith(`/`)?path:`/${path}`:`/`}function createBrowserRouteDispatcher(ctx){let registry=createRegistry();return registerBrowserRoutes(registry.router,ctx),{dispatch:async req=>{let method=req.method,path=normalizePath(req.path),query=req.query??{},body=req.body,signal=req.signal,match=registry.routes.find(route=>route.method===method?route.regex.test(path):!1);if(!match)return{status:404,body:{error:`Not Found`}};let exec=match.regex.exec(path),params={};if(exec)for(let[idx,name]of match.paramNames.entries()){let value=exec[idx+1];typeof value==`string`&&(params[name]=decodeURIComponent(value))}let status=200,payload,res={status(code){return status=code,res},json(bodyValue){payload=bodyValue}};try{await match.handler({params,query,body,signal},res)}catch(err){return{status:500,body:{error:String(err)}}}return{status,body:payload}}}}async function withTimeout(work,timeoutMs,label){let resolved=typeof timeoutMs==`number`&&Number.isFinite(timeoutMs)?Math.max(1,Math.floor(timeoutMs)):void 0;if(!resolved)return await work(void 0);let abortCtrl=new AbortController,timeoutError=Error(`${label??`request`} timed out`),timer=setTimeout(()=>abortCtrl.abort(timeoutError),resolved);timer.unref?.();let abortListener,abortPromise=abortCtrl.signal.aborted?Promise.reject(abortCtrl.signal.reason??timeoutError):new Promise((_,reject)=>{abortListener=()=>reject(abortCtrl.signal.reason??timeoutError),abortCtrl.signal.addEventListener(`abort`,abortListener,{once:!0})});try{return await Promise.race([work(abortCtrl.signal),abortPromise])}finally{clearTimeout(timer),abortListener&&abortCtrl.signal.removeEventListener(`abort`,abortListener)}}export{createBrowserRouteDispatcher as n,getMachineDisplayName as r,withTimeout as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import{a as emitWorkflowEnd,c as getActiveTraceId,d as telemetryService,i as emitTaskStart,l as initTelemetry,n as emitSpan,o as emitWorkflowStart,r as emitTaskEnd,s as flushTelemetry,t as WorkflowTelemetryService,u as setRelayHook}from"./workflow-telemetry-DqBPhVL4.js";export{WorkflowTelemetryService,emitSpan,emitTaskEnd,emitTaskStart,emitWorkflowEnd,emitWorkflowStart,flushTelemetry,getActiveTraceId,initTelemetry,setRelayHook,telemetryService};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as logDebug}from"./logger-wuOr7HKl.js";import{t as normalizeBaseUrl}from"./normalize-base-url-D_sv6Zgt.js";import path from"node:path";import crypto from"node:crypto";import fs from"node:fs/promises";var WorkflowTelemetryService=class{constructor(){this.projectRoot=null,this.agentNodeId=null,this.apiUrl=null,this.apiKey=null,this.otelBuffer=[],this.otelTimer=null,this.activeTraceId=null,this.relayHook=null}getActiveTraceId(){return this.activeTraceId}setRelayHook(fn){this.relayHook=fn}init(opts){this.projectRoot=opts.projectRoot,this.agentNodeId=opts.agentNodeId??null,this.apiUrl=opts.linkApiUrl??null,this.apiKey=opts.linkApiKey??null}emitSpan(span){this.appendSpan(span)}emitWorkflowStart(workflowId,description){this.activeTraceId=crypto.randomBytes(16).toString(`hex`),this.appendSpan({kind:`workflow.start`,workflowId,description,ts:new Date().toISOString(),agentNodeId:this.agentNodeId??void 0,traceId:this.activeTraceId})}emitWorkflowEnd(workflowId,failed){this.appendSpan({kind:failed?`workflow.fail`:`workflow.complete`,workflowId,ts:new Date().toISOString(),agentNodeId:this.agentNodeId??void 0,traceId:this.activeTraceId??void 0}),this.activeTraceId=null}emitTaskStart(workflowId,taskId,agentRole,description){this.appendSpan({kind:`task.start`,workflowId,taskId,agentRole,description,ts:new Date().toISOString(),agentNodeId:this.agentNodeId??void 0,traceId:this.activeTraceId??void 0})}emitTaskEnd(workflowId,taskId,agentRole,startedAt,error,metrics){let durationMs=Date.now()-startedAt.getTime();this.appendSpan({kind:error===void 0?`task.complete`:`task.fail`,workflowId,taskId,agentRole,ts:new Date().toISOString(),durationMs,error,agentNodeId:this.agentNodeId??void 0,traceId:this.activeTraceId??void 0,model:metrics?.model,inputTokens:metrics?.inputTokens,outputTokens:metrics?.outputTokens,estimatedCostUsd:metrics?.estimatedCostUsd})}async appendSpan(span){if(!this.projectRoot)return;this.syncToBuilderforce(span),this.forwardToOtelProxy(span);let relayEvent=this.spanToRelayEvent(span.kind);if(this.relayHook&&relayEvent)try{this.relayHook(relayEvent,span)}catch{}try{let dir=path.join(this.projectRoot,`.builderForceAgents`,`telemetry`);await fs.mkdir(dir,{recursive:!0});let date=new Date().toISOString().slice(0,10),file=path.join(dir,`${date}.jsonl`);await fs.appendFile(file,JSON.stringify(span)+`
|
|
2
|
+
`,`utf8`)}catch(err){logDebug(`[telemetry] failed to write span: ${String(err)}`)}}syncToBuilderforce(span){if(!this.apiUrl||!this.apiKey||!this.agentNodeId)return;let base=normalizeBaseUrl(this.apiUrl),headers={"Content-Type":`application/json`,Authorization:`Bearer ${this.apiKey}`,"X-AgentHost-Id":this.agentNodeId};span.traceId&&(headers[`X-Trace-Id`]=span.traceId);let doFetch=(url,method,body)=>fetch(url,{method,headers,body:JSON.stringify(body)}).catch(err=>logDebug(`[telemetry] builderforce sync failed (${span.kind}): ${String(err)}`));switch(span.kind){case`workflow.start`:doFetch(`${base}/api/workflows`,`POST`,{id:span.workflowId,status:`running`,description:span.description});break;case`workflow.complete`:doFetch(`${base}/api/workflows`,`POST`,{id:span.workflowId,status:`completed`});break;case`workflow.fail`:doFetch(`${base}/api/workflows`,`POST`,{id:span.workflowId,status:`failed`});break;case`task.start`:doFetch(`${base}/api/workflows/${span.workflowId}/tasks`,`POST`,{id:span.taskId,agentRole:span.agentRole??`agent`,description:span.description??``,status:`running`,startedAt:span.ts});break;case`task.complete`:doFetch(`${base}/api/workflows/${span.workflowId}/tasks/${span.taskId}`,`PATCH`,{status:`completed`,completedAt:span.ts});break;case`task.fail`:doFetch(`${base}/api/workflows/${span.workflowId}/tasks/${span.taskId}`,`PATCH`,{status:`failed`,error:span.error,completedAt:span.ts});break}}forwardToOtelProxy(span){if(!(!this.apiUrl||!this.apiKey||!this.agentNodeId)&&!Number.isNaN(parseInt(this.agentNodeId,10))){if(this.otelBuffer.push(span),this.otelBuffer.length>=25){this.flushOtelSpans();return}this.otelTimer||(this.otelTimer=setTimeout(()=>this.flushOtelSpans(),2e3),this.otelTimer.unref?.())}}flushOtelSpans(){this.otelTimer&&=(clearTimeout(this.otelTimer),null);let batch=this.otelBuffer.splice(0);batch.length===0||!this.apiUrl||!this.apiKey||!this.agentNodeId||fetch(`${normalizeBaseUrl(this.apiUrl)}/api/telemetry/spans`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${this.apiKey}`,"X-AgentHost-Id":this.agentNodeId},body:JSON.stringify(batch)}).catch(err=>logDebug(`[telemetry] otel proxy forward failed: ${String(err)}`))}spanToRelayEvent(kind){switch(kind){case`workflow.start`:case`workflow.complete`:case`workflow.fail`:return`workflow.update`;case`task.start`:return`task.started`;case`task.complete`:case`task.fail`:return`task.completed`;default:return null}}};const telemetryService=new WorkflowTelemetryService;function getActiveTraceId(){return telemetryService.getActiveTraceId()}function setRelayHook(fn){telemetryService.setRelayHook(fn)}function initTelemetry(opts){telemetryService.init(opts)}function flushTelemetry(){telemetryService.flushOtelSpans()}function emitSpan(span){telemetryService.emitSpan(span)}function emitWorkflowStart(workflowId,description){telemetryService.emitWorkflowStart(workflowId,description)}function emitWorkflowEnd(workflowId,failed){telemetryService.emitWorkflowEnd(workflowId,failed)}function emitTaskStart(workflowId,taskId,agentRole,description){telemetryService.emitTaskStart(workflowId,taskId,agentRole,description)}function emitTaskEnd(workflowId,taskId,agentRole,startedAt,error,metrics){telemetryService.emitTaskEnd(workflowId,taskId,agentRole,startedAt,error,metrics)}export{emitWorkflowEnd as a,getActiveTraceId as c,telemetryService as d,emitTaskStart as i,initTelemetry as l,emitSpan as n,emitWorkflowStart as o,emitTaskEnd as r,flushTelemetry as s,WorkflowTelemetryService as t,setRelayHook as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./logger-wuOr7HKl.js";import{a as emitWorkflowEnd,c as getActiveTraceId,d as telemetryService,i as emitTaskStart,l as initTelemetry,n as emitSpan,o as emitWorkflowStart,r as emitTaskEnd,s as flushTelemetry,t as WorkflowTelemetryService,u as setRelayHook}from"./workflow-telemetry-Bg8MVUr_.js";export{WorkflowTelemetryService,emitSpan,emitTaskEnd,emitTaskStart,emitWorkflowEnd,emitWorkflowStart,flushTelemetry,getActiveTraceId,initTelemetry,setRelayHook,telemetryService};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as logDebug}from"./logger-Bch0bx9c.js";import{t as normalizeBaseUrl}from"./normalize-base-url-DmugqkQ6.js";import path from"node:path";import crypto from"node:crypto";import fs from"node:fs/promises";var WorkflowTelemetryService=class{constructor(){this.projectRoot=null,this.agentNodeId=null,this.apiUrl=null,this.apiKey=null,this.otelBuffer=[],this.otelTimer=null,this.activeTraceId=null,this.relayHook=null}getActiveTraceId(){return this.activeTraceId}setRelayHook(fn){this.relayHook=fn}init(opts){this.projectRoot=opts.projectRoot,this.agentNodeId=opts.agentNodeId??null,this.apiUrl=opts.linkApiUrl??null,this.apiKey=opts.linkApiKey??null}emitSpan(span){this.appendSpan(span)}emitWorkflowStart(workflowId,description){this.activeTraceId=crypto.randomBytes(16).toString(`hex`),this.appendSpan({kind:`workflow.start`,workflowId,description,ts:new Date().toISOString(),agentNodeId:this.agentNodeId??void 0,traceId:this.activeTraceId})}emitWorkflowEnd(workflowId,failed){this.appendSpan({kind:failed?`workflow.fail`:`workflow.complete`,workflowId,ts:new Date().toISOString(),agentNodeId:this.agentNodeId??void 0,traceId:this.activeTraceId??void 0}),this.activeTraceId=null}emitTaskStart(workflowId,taskId,agentRole,description){this.appendSpan({kind:`task.start`,workflowId,taskId,agentRole,description,ts:new Date().toISOString(),agentNodeId:this.agentNodeId??void 0,traceId:this.activeTraceId??void 0})}emitTaskEnd(workflowId,taskId,agentRole,startedAt,error,metrics){let durationMs=Date.now()-startedAt.getTime();this.appendSpan({kind:error===void 0?`task.complete`:`task.fail`,workflowId,taskId,agentRole,ts:new Date().toISOString(),durationMs,error,agentNodeId:this.agentNodeId??void 0,traceId:this.activeTraceId??void 0,model:metrics?.model,inputTokens:metrics?.inputTokens,outputTokens:metrics?.outputTokens,estimatedCostUsd:metrics?.estimatedCostUsd})}async appendSpan(span){if(!this.projectRoot)return;this.syncToBuilderforce(span),this.forwardToOtelProxy(span);let relayEvent=this.spanToRelayEvent(span.kind);if(this.relayHook&&relayEvent)try{this.relayHook(relayEvent,span)}catch{}try{let dir=path.join(this.projectRoot,`.builderForceAgents`,`telemetry`);await fs.mkdir(dir,{recursive:!0});let date=new Date().toISOString().slice(0,10),file=path.join(dir,`${date}.jsonl`);await fs.appendFile(file,JSON.stringify(span)+`
|
|
2
|
+
`,`utf8`)}catch(err){logDebug(`[telemetry] failed to write span: ${String(err)}`)}}syncToBuilderforce(span){if(!this.apiUrl||!this.apiKey||!this.agentNodeId)return;let base=normalizeBaseUrl(this.apiUrl),headers={"Content-Type":`application/json`,Authorization:`Bearer ${this.apiKey}`,"X-AgentHost-Id":this.agentNodeId};span.traceId&&(headers[`X-Trace-Id`]=span.traceId);let doFetch=(url,method,body)=>fetch(url,{method,headers,body:JSON.stringify(body)}).catch(err=>logDebug(`[telemetry] builderforce sync failed (${span.kind}): ${String(err)}`));switch(span.kind){case`workflow.start`:doFetch(`${base}/api/workflows`,`POST`,{id:span.workflowId,status:`running`,description:span.description});break;case`workflow.complete`:doFetch(`${base}/api/workflows`,`POST`,{id:span.workflowId,status:`completed`});break;case`workflow.fail`:doFetch(`${base}/api/workflows`,`POST`,{id:span.workflowId,status:`failed`});break;case`task.start`:doFetch(`${base}/api/workflows/${span.workflowId}/tasks`,`POST`,{id:span.taskId,agentRole:span.agentRole??`agent`,description:span.description??``,status:`running`,startedAt:span.ts});break;case`task.complete`:doFetch(`${base}/api/workflows/${span.workflowId}/tasks/${span.taskId}`,`PATCH`,{status:`completed`,completedAt:span.ts});break;case`task.fail`:doFetch(`${base}/api/workflows/${span.workflowId}/tasks/${span.taskId}`,`PATCH`,{status:`failed`,error:span.error,completedAt:span.ts});break}}forwardToOtelProxy(span){if(!(!this.apiUrl||!this.apiKey||!this.agentNodeId)&&!Number.isNaN(parseInt(this.agentNodeId,10))){if(this.otelBuffer.push(span),this.otelBuffer.length>=25){this.flushOtelSpans();return}this.otelTimer||(this.otelTimer=setTimeout(()=>this.flushOtelSpans(),2e3),this.otelTimer.unref?.())}}flushOtelSpans(){this.otelTimer&&=(clearTimeout(this.otelTimer),null);let batch=this.otelBuffer.splice(0);batch.length===0||!this.apiUrl||!this.apiKey||!this.agentNodeId||fetch(`${normalizeBaseUrl(this.apiUrl)}/api/telemetry/spans`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${this.apiKey}`,"X-AgentHost-Id":this.agentNodeId},body:JSON.stringify(batch)}).catch(err=>logDebug(`[telemetry] otel proxy forward failed: ${String(err)}`))}spanToRelayEvent(kind){switch(kind){case`workflow.start`:case`workflow.complete`:case`workflow.fail`:return`workflow.update`;case`task.start`:return`task.started`;case`task.complete`:case`task.fail`:return`task.completed`;default:return null}}};const telemetryService=new WorkflowTelemetryService;function getActiveTraceId(){return telemetryService.getActiveTraceId()}function setRelayHook(fn){telemetryService.setRelayHook(fn)}function initTelemetry(opts){telemetryService.init(opts)}function flushTelemetry(){telemetryService.flushOtelSpans()}function emitSpan(span){telemetryService.emitSpan(span)}function emitWorkflowStart(workflowId,description){telemetryService.emitWorkflowStart(workflowId,description)}function emitWorkflowEnd(workflowId,failed){telemetryService.emitWorkflowEnd(workflowId,failed)}function emitTaskStart(workflowId,taskId,agentRole,description){telemetryService.emitTaskStart(workflowId,taskId,agentRole,description)}function emitTaskEnd(workflowId,taskId,agentRole,startedAt,error,metrics){telemetryService.emitTaskEnd(workflowId,taskId,agentRole,startedAt,error,metrics)}export{emitWorkflowEnd as a,getActiveTraceId as c,telemetryService as d,emitTaskStart as i,initTelemetry as l,emitSpan as n,emitWorkflowStart as o,emitTaskEnd as r,flushTelemetry as s,WorkflowTelemetryService as t,setRelayHook as u};
|
package/package.json
CHANGED
package/dist/agents-DsZ5vLKE.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-C1VbcUOm.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./model-discovery-C9Xm95uL.js";import"./model-catalog-CiiFJX77.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./refresh-C4vwneXT.js";import"./client-CGgp3zkQ.js";import"./call-DmAU4cRX.js";import"./message-channel-z5YRpR2d.js";import"./subagent-registry-CyGxu3kP.js";import"./sessions-Bl1wwotX.js";import"./project-context-store-CIUcwUP_.js";import"./tokens-CFKkpUIu.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./send-BvroeIQ6.js";import"./send-CceNWtYE.js";import"./with-timeout-T07SJo4N.js";import"./deliver-BuZu68tp.js";import"./accounts-Cx82nj4E.js";import"./send-ByCVQQVz.js";import"./image-ops-CotJhwRR.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./embedded-helpers-DK8_apW0.js";import"./sandbox-z9t_PRf9.js";import"./chrome-BnEbJV3D.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-owOmmyUM.js";import"./routes-lclJHOYY.js";import"./paths-BnOjueoX.js";import"./ssrf-DJXLYZ0d.js";import"./store-DHD2IEgd.js";import"./ports-DTku9NSx.js";import"./trash-C3zmJ_O7.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./tool-images-CCpqFtrL.js";import"./workspace-waBqRxiy.js";import"./reply-prefix-Cg7AqaK0.js";import"./sqlite-CIGM1WKg.js";import"./memory-cli-ivAs7q7v.js";import"./manager-CRba8roB.js";import"./gemini-auth-CkD5jCPh.js";import"./retry-B151Hej5.js";import"./common-BfwMxpLu.js";import"./runner-DwWmciCt.js";import"./tool-display-Cs4hDP1f.js";import"./chunk-Dly7lM4r.js";import"./markdown-tables-B1Rx8hv6.js";import"./fetch-guard-DnXqPKae.js";import"./fetch-Cn_THzz8.js";import"./ir-CSdQJPqu.js";import"./render-DlHYsbvQ.js";import"./builderforcellm-syscheck-CprBhARf.js";import"./session-utils-GMvum00v.js";import"./coding-tools.policy-NEPm7Mz1.js";import"./pairing-store-QDb6lhIU.js";import"./fetch-DnWD6ydH.js";import"./exec-approvals-D7ZPAZpt.js";import"./nodes-screen-D6GHv_S0.js";import"./session-cost-usage-S0nkbPoW.js";import"./usage-format-5sp5AMSu.js";import"./provider-usage-Bn4ZrnU7.js";import"./send-B_1BtyfA.js";import"./outbound-attachment-BaTYE4qp.js";import"./delivery-queue-Cp3t4Upn.js";import"./project-context-D3Mx4maV.js";import"./control-service-CJuuqNOE.js";import"./stagger-CRe77dWL.js";import"./channel-selection-BLwXhb9t.js";import"./send-UFtylOiq.js";import"./resolve-route-DEIW5uKy.js";import"./channel-activity-DX36RadH.js";import"./tables-CojSfTth.js";import"./links-BKzP7VVP.js";import"./cli-utils-C9pW69LF.js";import"./help-format-CfFf-w62.js";import"./progress-Cqb-jAjT.js";import"./replies-DbkT_5BV.js";import"./onboard-helpers-CckrS8_K.js";import"./prompt-style-BMWmaqSC.js";import"./pairing-labels-3j_iRYOO.js";import"./active-listener-Di9e1YAD.js";import"./mamba-state-engine-CV4nDcCk.js";import"./transformers-stream-Buj40qHl.js";import"./catalog-li4bSIE2.js";import"./note-DgDXuE0F.js";import"./clack-prompter-B52CP7eY.js";import"./helpers-DPPVplyk.js";import"./plugin-auto-enable-BV9K9Vhr.js";import"./install-safe-path-ObPl6zIf.js";import"./npm-registry-spec-BV1VDmuN.js";import"./skill-scanner-DEmbPsRh.js";import"./installs-CWd54ARy.js";import"./onboard-channels-B6QDFkkK.js";import"./config-validation-jpeXzoU3.js";import"./agents.config-D6Yhwmnh.js";import"./shared-xj-xaKFi.js";import"./onboard-auth.credentials-yagR-VMG.js";import"./auth-token-CoQ5ePPl.js";import"./logging-ayt7F7vy.js";import"./provider-auth-helpers-CJTG_tVx.js";import{t as agentsListCommand}from"./agents-Cr7WO73I.js";import"./auth-choice.apply-CcatXiNo.js";import"./openai-model-default-BMRrqTmH.js";import"./model-picker-swoSwauV.js";import"./auth-choice.apply.transformers-1plI0MUg.js";import"./auth-choice-BoZFVmEa.js";export{agentsListCommand};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./embedded-helpers-CEsr3aQ0.js";import"./reply-Cd3vVnD7.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-9bRFKBI_.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-3R_ZyUxB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-_1Ca6jGb.js";import"./runner-SxCr9kXD.js";import"./model-catalog-C6UrZ0uG.js";import"./sandbox-BZibn6PX.js";import"./chrome-a3X9_-nf.js";import"./tailscale-DLkpGquM.js";import"./auth-lebUHrkd.js";import"./server-context-DJZT7Upf.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./routes-BzfLvF8W.js";import"./redact-BHdfp2MZ.js";import"./errors-B1MIg3g-.js";import"./paths-cR8ct-Y3.js";import"./ssrf-p9k-iapc.js";import"./image-ops-C8IUQKjn.js";import"./store-CmHBQ-yX.js";import"./ports-DgmEDNOm.js";import"./trash-DD2Hc5oq.js";import"./sessions-CdanN_ZI.js";import"./message-channel-D_jXxXQj.js";import"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./accounts-rmXEiebi.js";import"./accounts-BLueHgKj.js";import"./bindings-DR59065T.js";import"./send-DerUBvXW.js";import"./send-DyF1Xy9K.js";import"./paths-DJ6rztqJ.js";import"./tool-images-B7b_OiMz.js";import"./tool-display-ByOZtWvA.js";import"./fetch-guard-8mwt3-hm.js";import"./api-key-rotation-CHBjUwUJ.js";import"./fetch-BuOLY9KP.js";import"./sqlite-C39E12XS.js";import"./tokens-CCU3zO-D.js";import"./project-context-store-wcq7lXuI.js";import"./with-timeout-Bwq-GyUQ.js";import"./deliver-BpLm3ktn.js";import"./send-CBBziNqM.js";import"./workspace-D4LK4thI.js";import"./reply-prefix-zIMgi6K6.js";import"./memory-cli-DRz4wtHk.js";import"./manager-DwywI_5-.js";import"./retry-DlVhg5qu.js";import"./client-xfoidwPI.js";import"./call-BbRf8gFM.js";import"./common-BTbIhLyt.js";import"./chunk-FCBlVOyo.js";import"./markdown-tables-P6uoUSFa.js";import"./ir-5BNoIXZm.js";import"./render-D1dVTEB1.js";import"./builderforcellm-syscheck-DrFJ638L.js";import"./send-4d9NswaD.js";import"./outbound-attachment-C7wByQO5.js";import"./fetch-DnVtDecb.js";import"./delivery-queue-CXKynF1P.js";import"./channel-activity-CCNDbdD3.js";import"./tables-ERcoWFDp.js";import"./pairing-store-CbvMJhD3.js";import"./links-BgWWaaOT.js";import"./cli-utils-LBYKdNFb.js";import"./help-format-Qfk2vDNX.js";import"./progress-BfOtdN6b.js";import"./resolve-route-D49haUnv.js";import"./replies-Bd2RPZwQ.js";import"./refresh-TiC_kLgE.js";import"./coding-tools.policy-6qh9acJy.js";import"./send-BJDzwYJN.js";import"./onboard-helpers-Cf5dNq7-.js";import"./prompt-style-BpVK43GK.js";import"./pairing-labels-BW5jQZlr.js";import"./session-cost-usage-BjH7mxVj.js";import"./usage-format-DGf8ZWPH.js";import"./provider-usage-BdrU4cIE.js";import"./active-listener-Dcg19lJG.js";import"./exec-approvals-BpVPDVtV.js";import"./nodes-screen-C3TDIi8d.js";import"./project-context-CJj0Inz-.js";import"./control-service-BbsswoMy.js";import"./stagger-8EkqkqJv.js";import"./channel-selection-DyAvzlY8.js";import"./mamba-state-engine-CoGqoBTH.js";import"./transformers-stream-D7nRu4Qu.js";import"./shared-BPN3qd7G.js";import"./onboard-auth.credentials-BuT-etnE.js";import"./auth-token-CyVfNEQb.js";import"./logging-DHa3jQN3.js";import"./provider-auth-helpers-BpTnp2Yr.js";import{t as applyAuthChoice}from"./auth-choice.apply-BHLQeym9.js";import"./openai-model-default-Cp3nf21W.js";import"./model-picker-BUePD7Zg.js";import"./auth-choice.apply.transformers-CIn3fs7K.js";import{n as warnIfModelConfigLooksOff,t as resolvePreferredProviderForAuthChoice}from"./auth-choice-9gZuOvPS.js";export{applyAuthChoice,resolvePreferredProviderForAuthChoice,warnIfModelConfigLooksOff};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-C1VbcUOm.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./model-discovery-C9Xm95uL.js";import"./model-catalog-CiiFJX77.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./refresh-C4vwneXT.js";import"./client-CGgp3zkQ.js";import"./call-DmAU4cRX.js";import"./message-channel-z5YRpR2d.js";import"./subagent-registry-CyGxu3kP.js";import"./sessions-Bl1wwotX.js";import"./project-context-store-CIUcwUP_.js";import"./tokens-CFKkpUIu.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./send-BvroeIQ6.js";import"./send-CceNWtYE.js";import"./with-timeout-T07SJo4N.js";import"./deliver-BuZu68tp.js";import"./accounts-Cx82nj4E.js";import"./send-ByCVQQVz.js";import"./image-ops-CotJhwRR.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./embedded-helpers-DK8_apW0.js";import"./sandbox-z9t_PRf9.js";import"./chrome-BnEbJV3D.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-owOmmyUM.js";import"./routes-lclJHOYY.js";import"./paths-BnOjueoX.js";import"./ssrf-DJXLYZ0d.js";import"./store-DHD2IEgd.js";import"./ports-DTku9NSx.js";import"./trash-C3zmJ_O7.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./tool-images-CCpqFtrL.js";import"./workspace-waBqRxiy.js";import"./reply-prefix-Cg7AqaK0.js";import"./sqlite-CIGM1WKg.js";import"./memory-cli-ivAs7q7v.js";import"./manager-CRba8roB.js";import"./gemini-auth-CkD5jCPh.js";import"./retry-B151Hej5.js";import"./common-BfwMxpLu.js";import"./runner-DwWmciCt.js";import"./tool-display-Cs4hDP1f.js";import"./chunk-Dly7lM4r.js";import"./markdown-tables-B1Rx8hv6.js";import"./fetch-guard-DnXqPKae.js";import"./fetch-Cn_THzz8.js";import"./ir-CSdQJPqu.js";import"./render-DlHYsbvQ.js";import"./builderforcellm-syscheck-CprBhARf.js";import"./session-utils-GMvum00v.js";import"./coding-tools.policy-NEPm7Mz1.js";import"./pairing-store-QDb6lhIU.js";import"./fetch-DnWD6ydH.js";import"./exec-approvals-D7ZPAZpt.js";import"./nodes-screen-D6GHv_S0.js";import"./session-cost-usage-S0nkbPoW.js";import"./usage-format-5sp5AMSu.js";import"./provider-usage-Bn4ZrnU7.js";import"./send-B_1BtyfA.js";import"./outbound-attachment-BaTYE4qp.js";import"./delivery-queue-Cp3t4Upn.js";import"./project-context-D3Mx4maV.js";import"./control-service-CJuuqNOE.js";import"./stagger-CRe77dWL.js";import"./channel-selection-BLwXhb9t.js";import"./send-UFtylOiq.js";import"./resolve-route-DEIW5uKy.js";import"./channel-activity-DX36RadH.js";import"./tables-CojSfTth.js";import"./links-BKzP7VVP.js";import"./cli-utils-C9pW69LF.js";import"./help-format-CfFf-w62.js";import"./progress-Cqb-jAjT.js";import"./replies-DbkT_5BV.js";import"./onboard-helpers-CckrS8_K.js";import"./prompt-style-BMWmaqSC.js";import"./pairing-labels-3j_iRYOO.js";import"./active-listener-Di9e1YAD.js";import"./mamba-state-engine-CV4nDcCk.js";import"./transformers-stream-Buj40qHl.js";import"./shared-xj-xaKFi.js";import"./onboard-auth.credentials-yagR-VMG.js";import"./auth-token-CoQ5ePPl.js";import"./logging-ayt7F7vy.js";import"./provider-auth-helpers-CJTG_tVx.js";import{t as applyAuthChoice}from"./auth-choice.apply-CcatXiNo.js";import"./openai-model-default-BMRrqTmH.js";import"./model-picker-swoSwauV.js";import"./auth-choice.apply.transformers-1plI0MUg.js";import{n as warnIfModelConfigLooksOff,t as resolvePreferredProviderForAuthChoice}from"./auth-choice-BoZFVmEa.js";export{applyAuthChoice,resolvePreferredProviderForAuthChoice,warnIfModelConfigLooksOff};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./embedded-helpers-CEsr3aQ0.js";import"./reply-Cd3vVnD7.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-9bRFKBI_.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-3R_ZyUxB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-_1Ca6jGb.js";import"./runner-SxCr9kXD.js";import"./model-catalog-C6UrZ0uG.js";import"./sandbox-BZibn6PX.js";import"./chrome-a3X9_-nf.js";import"./tailscale-DLkpGquM.js";import"./auth-lebUHrkd.js";import"./server-context-DJZT7Upf.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./routes-BzfLvF8W.js";import"./redact-BHdfp2MZ.js";import"./errors-B1MIg3g-.js";import"./paths-cR8ct-Y3.js";import"./ssrf-p9k-iapc.js";import"./image-ops-C8IUQKjn.js";import"./store-CmHBQ-yX.js";import"./ports-DgmEDNOm.js";import"./trash-DD2Hc5oq.js";import"./sessions-CdanN_ZI.js";import"./message-channel-D_jXxXQj.js";import"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./accounts-rmXEiebi.js";import"./accounts-BLueHgKj.js";import"./bindings-DR59065T.js";import"./send-DerUBvXW.js";import"./send-DyF1Xy9K.js";import"./paths-DJ6rztqJ.js";import"./tool-images-B7b_OiMz.js";import"./tool-display-ByOZtWvA.js";import"./fetch-guard-8mwt3-hm.js";import"./api-key-rotation-CHBjUwUJ.js";import"./fetch-BuOLY9KP.js";import"./sqlite-C39E12XS.js";import"./tokens-CCU3zO-D.js";import"./project-context-store-wcq7lXuI.js";import"./with-timeout-Bwq-GyUQ.js";import"./deliver-BpLm3ktn.js";import"./send-CBBziNqM.js";import"./workspace-D4LK4thI.js";import"./reply-prefix-zIMgi6K6.js";import"./memory-cli-DRz4wtHk.js";import"./manager-DwywI_5-.js";import"./retry-DlVhg5qu.js";import"./client-xfoidwPI.js";import"./call-BbRf8gFM.js";import"./common-BTbIhLyt.js";import"./chunk-FCBlVOyo.js";import"./markdown-tables-P6uoUSFa.js";import"./ir-5BNoIXZm.js";import"./render-D1dVTEB1.js";import"./builderforcellm-syscheck-DrFJ638L.js";import"./send-4d9NswaD.js";import"./outbound-attachment-C7wByQO5.js";import"./fetch-DnVtDecb.js";import"./delivery-queue-CXKynF1P.js";import"./channel-activity-CCNDbdD3.js";import"./tables-ERcoWFDp.js";import"./pairing-store-CbvMJhD3.js";import"./links-BgWWaaOT.js";import"./cli-utils-LBYKdNFb.js";import"./help-format-Qfk2vDNX.js";import"./progress-BfOtdN6b.js";import"./resolve-route-D49haUnv.js";import"./replies-Bd2RPZwQ.js";import"./refresh-TiC_kLgE.js";import"./coding-tools.policy-6qh9acJy.js";import"./send-BJDzwYJN.js";import"./onboard-helpers-Cf5dNq7-.js";import"./prompt-style-BpVK43GK.js";import"./pairing-labels-BW5jQZlr.js";import"./session-cost-usage-BjH7mxVj.js";import"./usage-format-DGf8ZWPH.js";import"./provider-usage-BdrU4cIE.js";import"./active-listener-Dcg19lJG.js";import"./exec-approvals-BpVPDVtV.js";import"./nodes-screen-C3TDIi8d.js";import"./project-context-CJj0Inz-.js";import"./control-service-BbsswoMy.js";import"./stagger-8EkqkqJv.js";import"./channel-selection-DyAvzlY8.js";import"./mamba-state-engine-CoGqoBTH.js";import"./transformers-stream-D7nRu4Qu.js";import"./shared-BPN3qd7G.js";import"./onboard-auth.credentials-BuT-etnE.js";import"./auth-token-CyVfNEQb.js";import"./logging-DHa3jQN3.js";import"./provider-auth-helpers-BpTnp2Yr.js";import{t as applyAuthChoice}from"./auth-choice.apply-BHLQeym9.js";import"./openai-model-default-Cp3nf21W.js";import"./model-picker-BUePD7Zg.js";import"./auth-choice.apply.transformers-CIn3fs7K.js";export{applyAuthChoice};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-C1VbcUOm.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./model-discovery-C9Xm95uL.js";import"./model-catalog-CiiFJX77.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./refresh-C4vwneXT.js";import"./client-CGgp3zkQ.js";import"./call-DmAU4cRX.js";import"./message-channel-z5YRpR2d.js";import"./subagent-registry-CyGxu3kP.js";import"./sessions-Bl1wwotX.js";import"./project-context-store-CIUcwUP_.js";import"./tokens-CFKkpUIu.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./send-BvroeIQ6.js";import"./send-CceNWtYE.js";import"./with-timeout-T07SJo4N.js";import"./deliver-BuZu68tp.js";import"./accounts-Cx82nj4E.js";import"./send-ByCVQQVz.js";import"./image-ops-CotJhwRR.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./embedded-helpers-DK8_apW0.js";import"./sandbox-z9t_PRf9.js";import"./chrome-BnEbJV3D.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-owOmmyUM.js";import"./routes-lclJHOYY.js";import"./paths-BnOjueoX.js";import"./ssrf-DJXLYZ0d.js";import"./store-DHD2IEgd.js";import"./ports-DTku9NSx.js";import"./trash-C3zmJ_O7.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./tool-images-CCpqFtrL.js";import"./workspace-waBqRxiy.js";import"./reply-prefix-Cg7AqaK0.js";import"./sqlite-CIGM1WKg.js";import"./memory-cli-ivAs7q7v.js";import"./manager-CRba8roB.js";import"./gemini-auth-CkD5jCPh.js";import"./retry-B151Hej5.js";import"./common-BfwMxpLu.js";import"./runner-DwWmciCt.js";import"./tool-display-Cs4hDP1f.js";import"./chunk-Dly7lM4r.js";import"./markdown-tables-B1Rx8hv6.js";import"./fetch-guard-DnXqPKae.js";import"./fetch-Cn_THzz8.js";import"./ir-CSdQJPqu.js";import"./render-DlHYsbvQ.js";import"./builderforcellm-syscheck-CprBhARf.js";import"./session-utils-GMvum00v.js";import"./coding-tools.policy-NEPm7Mz1.js";import"./pairing-store-QDb6lhIU.js";import"./fetch-DnWD6ydH.js";import"./exec-approvals-D7ZPAZpt.js";import"./nodes-screen-D6GHv_S0.js";import"./session-cost-usage-S0nkbPoW.js";import"./usage-format-5sp5AMSu.js";import"./provider-usage-Bn4ZrnU7.js";import"./send-B_1BtyfA.js";import"./outbound-attachment-BaTYE4qp.js";import"./delivery-queue-Cp3t4Upn.js";import"./project-context-D3Mx4maV.js";import"./control-service-CJuuqNOE.js";import"./stagger-CRe77dWL.js";import"./channel-selection-BLwXhb9t.js";import"./send-UFtylOiq.js";import"./resolve-route-DEIW5uKy.js";import"./channel-activity-DX36RadH.js";import"./tables-CojSfTth.js";import"./links-BKzP7VVP.js";import"./cli-utils-C9pW69LF.js";import"./help-format-CfFf-w62.js";import"./progress-Cqb-jAjT.js";import"./replies-DbkT_5BV.js";import"./onboard-helpers-CckrS8_K.js";import"./prompt-style-BMWmaqSC.js";import"./pairing-labels-3j_iRYOO.js";import"./active-listener-Di9e1YAD.js";import"./mamba-state-engine-CV4nDcCk.js";import"./transformers-stream-Buj40qHl.js";import"./shared-xj-xaKFi.js";import"./onboard-auth.credentials-yagR-VMG.js";import"./auth-token-CoQ5ePPl.js";import"./logging-ayt7F7vy.js";import"./provider-auth-helpers-CJTG_tVx.js";import{t as applyAuthChoice}from"./auth-choice.apply-CcatXiNo.js";import"./openai-model-default-BMRrqTmH.js";import"./model-picker-swoSwauV.js";import"./auth-choice.apply.transformers-1plI0MUg.js";export{applyAuthChoice};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-C1VbcUOm.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./model-discovery-C9Xm95uL.js";import"./model-catalog-CiiFJX77.js";import"./transformers-stream-Buj40qHl.js";import"./shared-xj-xaKFi.js";import"./model-picker-swoSwauV.js";import{u as downloadAndWireLocalBrain}from"./auth-choice.apply.transformers-1plI0MUg.js";export{downloadAndWireLocalBrain};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-9bRFKBI_.js";import{t as normalizeBaseUrl}from"./normalize-base-url-DmugqkQ6.js";import{a as upsertSharedEnvVar,i as readSharedEnvVar}from"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-3R_ZyUxB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-_1Ca6jGb.js";import"./sessions-CdanN_ZI.js";import"./message-channel-D_jXxXQj.js";import"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./accounts-rmXEiebi.js";import"./accounts-BLueHgKj.js";import"./bindings-DR59065T.js";import"./paths-DJ6rztqJ.js";import{n as loadProjectContext,o as updateProjectContextFields}from"./project-context-store-wcq7lXuI.js";import"./client-xfoidwPI.js";import"./call-BbRf8gFM.js";import{d as openUrl,i as detectBrowserOpenSupport}from"./onboard-helpers-Cf5dNq7-.js";import"./prompt-style-BpVK43GK.js";import"./project-context-CJj0Inz-.js";import{t as buildLocalMachineProfile}from"./builderforce-context-DEsrFVCz.js";import{randomBytes}from"node:crypto";import http from"node:http";import{confirm,note,password,select,spinner,text}from"@clack/prompts";const CALLBACK_PORT=51122;async function authenticateViaBrowser(opts){let state=randomBytes(16).toString(`hex`),callbackUrl=`http://localhost:${CALLBACK_PORT}/callback`,authUrl=`${opts.serverUrl.replace(`api.builderforce.ai`,`builderforce.ai`).replace(`api.builderforce.ai`,`builderforce.ai`)}/auth/cli?callback=${encodeURIComponent(callbackUrl)}&state=${encodeURIComponent(state)}`;return(await detectBrowserOpenSupport()).ok?authenticateWithCallbackServer({state,authUrl,prompter:opts.prompter}):authenticateManually({state,authUrl,prompter:opts.prompter})}async function authenticateWithCallbackServer(opts){let tokenPromise=startCallbackServer(opts.state);if(await opts.prompter.note(`Opening browser for authentication…\n${opts.authUrl}`,`Builderforce Auth`),!await openUrl(opts.authUrl))return authenticateManually({state:opts.state,authUrl:opts.authUrl,prompter:opts.prompter});try{return await tokenPromise}catch{return await opts.prompter.note(`Authentication timed out or was cancelled.`,`Auth Error`),null}}async function authenticateManually(opts){await opts.prompter.note([`Open this URL in a browser to authenticate:`,``,opts.authUrl,``,`After authenticating, paste the full callback URL shown in the browser.`].join(`
|
|
2
|
-
`),`Builderforce Auth (manual)`);let pastedUrl=await opts.prompter.text({message:`Paste the callback URL:`,validate:val=>{if(!val.includes(`token=`))return`Invalid callback URL — must contain a token parameter`}});if(typeof pastedUrl==`symbol`||!pastedUrl?.trim())return null;let url=new URL(pastedUrl.trim()),token=url.searchParams.get(`token`);if(url.searchParams.get(`state`)!==opts.state)throw Error(`State mismatch — authentication may have been tampered with.`);if(!token)throw Error(`No token found in callback URL.`);return{webToken:token}}function startCallbackServer(expectedState){return new Promise((resolve,reject)=>{let server=http.createServer((req,res)=>{let url=new URL(req.url??`/`,`http://localhost:${CALLBACK_PORT}`);if(url.pathname!==`/callback`){res.writeHead(404,{"Content-Type":`text/plain`}),res.end(`Not found`);return}let token=url.searchParams.get(`token`);if(url.searchParams.get(`state`)!==expectedState){res.writeHead(400,{"Content-Type":`text/plain`}),res.end(`State mismatch`);return}if(!token){res.writeHead(400,{"Content-Type":`text/plain`}),res.end(`Missing token`);return}res.writeHead(200,{"Content-Type":`text/html; charset=utf-8`,"Cache-Control":`no-store`}),res.end(`<!DOCTYPE html>
|
|
3
|
-
<html lang="en">
|
|
4
|
-
<head>
|
|
5
|
-
<meta charset="utf-8">
|
|
6
|
-
<title>BuilderForceAgents — Authenticated</title>
|
|
7
|
-
<style>
|
|
8
|
-
body { font-family: system-ui, sans-serif; display: flex; justify-content: center;
|
|
9
|
-
align-items: center; min-height: 100vh; margin: 0; background: #0d1117; color: #c9d1d9; }
|
|
10
|
-
.card { text-align: center; padding: 2rem; border-radius: 12px;
|
|
11
|
-
background: #161b22; border: 1px solid #30363d; max-width: 420px; }
|
|
12
|
-
h1 { font-size: 1.4rem; margin: 0 0 .5rem; }
|
|
13
|
-
p { color: #8b949e; }
|
|
14
|
-
</style>
|
|
15
|
-
</head>
|
|
16
|
-
<body>
|
|
17
|
-
<div class="card">
|
|
18
|
-
<h1>✅ Authentication complete</h1>
|
|
19
|
-
<p>You can close this tab and return to the terminal.</p>
|
|
20
|
-
</div>
|
|
21
|
-
</body>
|
|
22
|
-
</html>`),setImmediate(()=>server.close()),resolve({webToken:token})});server.listen(CALLBACK_PORT,`127.0.0.1`);let timer=setTimeout(()=>{server.close(),reject(Error(`Authentication timed out after 5 minutes.`))},3e5);server.on(`close`,()=>clearTimeout(timer))})}async function builderforceApiFetch(url,opts={}){let{token,...rest}=opts,headers={"Content-Type":`application/json`,...token?{Authorization:`Bearer ${token}`}:{}},res=await fetch(url,{...rest,headers}),body=await res.json().catch(()=>({}));if(!res.ok){let msg=body.error??body.message??res.statusText;throw Error(`${res.status} ${msg}`)}return body}async function ensureProjectMapping(params){try{let upsert=await builderforceApiFetch(`${params.serverUrl}/api/projects/upsert`,{method:`POST`,token:params.tenantJwt,body:JSON.stringify({name:params.projectName,description:params.description??`Managed from ${params.projectRoot}`})});return await builderforceApiFetch(`${params.serverUrl}/api/agent-hosts/${params.agentNodeId}/projects/${upsert.project.id}`,{method:`PUT`,token:params.tenantJwt}),{projectId:upsert.project.id,action:upsert.action}}catch{return null}}async function promptBuilderforceOnboarding(params){if(readSharedEnvVar(`BUILDERFORCE_API_KEY`)){let existingUrl=readSharedEnvVar(`BUILDERFORCE_URL`)??`https://api.builderforce.ai`,existingTenantId=readSharedEnvVar(`BUILDERFORCE_TENANT_ID`),existingCtx=await loadProjectContext(params.projectRoot).catch(()=>null),agentNodeLabel=existingCtx?.builderforce?.instanceSlug??existingCtx?.builderforce?.instanceName??existingCtx?.builderforce?.instanceId??`(registered)`;return note([`URL: ${existingUrl}`,`Tenant: ${existingTenantId??`unknown`}`,`AgentNode: ${agentNodeLabel}`,``,`Run 'builderforce init --reconnect' to link a different account.`].join(`
|
|
23
|
-
`),`Already connected to Builderforce`),`Builderforce: already connected (${existingUrl})`}if(!params.forcePrompt&&readSharedEnvVar(`BUILDERFORCE_SKIPPED`)===`1`)return null;let connect=await confirm({message:`Connect to Builderforce? (optional — manage projects, tasks & agents across your mesh)`,initialValue:!0});if(typeof connect==`symbol`||!connect)return upsertSharedEnvVar({key:`BUILDERFORCE_SKIPPED`,value:`1`}),null;let urlInput=await text({message:`Orchestration API URL (Builderforce):`,initialValue:`https://api.builderforce.ai`});if(typeof urlInput==`symbol`)return null;let serverUrl=normalizeBaseUrl(urlInput.trim())||`https://api.builderforce.ai`,authMethod=(await detectBrowserOpenSupport()).ok?await select({message:`How would you like to authenticate?`,options:[{value:`browser`,label:`Open browser (recommended)`,hint:`login or register in your browser`},{value:`terminal`,label:`Type here`,hint:`enter email & password in this terminal`}]}):`terminal`;if(typeof authMethod==`symbol`)return null;let webToken=``;if(authMethod===`browser`){let result=await authenticateViaBrowser({serverUrl,prompter:{note:async(msg,title)=>{note(msg,title)},text:opts=>text({...opts,validate:opts.validate?value=>opts.validate(value??``):void 0})}});if(!result)return null;webToken=result.webToken}else{let authMode=await select({message:`Do you have a Builderforce account?`,options:[{value:`login`,label:`Yes — log in`},{value:`register`,label:`No — create a free account`}]});if(typeof authMode==`symbol`)return null;let emailInput=await text({message:`Email:`});if(typeof emailInput==`symbol`||!emailInput.trim())return null;let email=emailInput.trim(),usernameForReg=``;if(authMode===`register`){let usernameInput=await text({message:`Username:`,initialValue:params.defaultInstanceName.toLowerCase().replace(/[^a-z0-9]+/g,`-`)});if(typeof usernameInput==`symbol`||!usernameInput.trim())return null;usernameForReg=usernameInput.trim()}let passwordInput=await password({message:`Password:`});if(typeof passwordInput==`symbol`||!passwordInput.trim())return null;let rawPassword=passwordInput.trim(),authSpin=spinner();try{authMode===`register`?(authSpin.start(`Creating account…`),webToken=(await builderforceApiFetch(`${serverUrl}/api/auth/web/register`,{method:`POST`,body:JSON.stringify({email,username:usernameForReg,password:rawPassword})})).token,authSpin.stop(`Account created`)):(authSpin.start(`Authenticating…`),webToken=(await builderforceApiFetch(`${serverUrl}/api/auth/web/login`,{method:`POST`,body:JSON.stringify({email,password:rawPassword})})).token,authSpin.stop(`Authenticated`))}catch(err){return authSpin.stop(`Authentication failed`),note(String(err instanceof Error?err.message:err),`Error`),null}}let tenantId=0,tenantSpin=spinner();tenantSpin.start(`Loading workspaces…`);let tenants=[];try{tenants=(await builderforceApiFetch(`${serverUrl}/api/tenants`,{token:webToken})).tenants,tenantSpin.stop(`${tenants.length} workspace(s) found`)}catch(err){return tenantSpin.stop(`Could not load workspaces`),note(String(err instanceof Error?err.message:err),`Error`),null}if(tenants.length===0){let wsNameInput=await text({message:`Create your first workspace:`,initialValue:params.defaultInstanceName});if(typeof wsNameInput==`symbol`||!wsNameInput.trim())return null;let wsSpin=spinner();wsSpin.start(`Creating workspace…`);try{let created=await builderforceApiFetch(`${serverUrl}/api/tenants`,{method:`POST`,token:webToken,body:JSON.stringify({name:wsNameInput.trim()})});tenantId=created.id,wsSpin.stop(`Workspace "${created.name}" created`)}catch(err){return wsSpin.stop(`Could not create workspace`),note(String(err instanceof Error?err.message:err),`Error`),null}}else if(tenants.length===1)tenantId=tenants[0].id,note(`Using workspace: ${tenants[0].name}`,`Workspace`);else{let picked=await select({message:`Select workspace:`,options:tenants.map(tenant=>({value:tenant.id,label:tenant.name,hint:tenant.slug}))});if(typeof picked==`symbol`)return null;tenantId=picked}let tenantJwt=``;try{tenantJwt=(await builderforceApiFetch(`${serverUrl}/api/auth/tenant-token`,{method:`POST`,token:webToken,body:JSON.stringify({tenantId})})).token}catch(err){return note(String(err instanceof Error?err.message:err),`Could not get workspace token`),null}let agentNodeNameInput=await text({message:`AgentNode instance name (shown in dashboard):`,initialValue:params.defaultInstanceName});if(typeof agentNodeNameInput==`symbol`)return null;let agentNodeName=agentNodeNameInput.trim()||params.defaultInstanceName,agentNodeSpin=spinner();agentNodeSpin.start(`Registering agentNode instance…`);let agentNodeId=``,agentNodeSlug=``,apiKey=``,projectId=``,projectAction=`unknown`,machineProfile=buildLocalMachineProfile({workspaceDirectory:params.projectRoot,rootInstallDirectory:process.cwd(),gatewayPort:18789,tunnelUrl:process.env.BUILDERFORCE_AGENTS_PUBLIC_TUNNEL_URL,tunnelStatus:process.env.BUILDERFORCE_AGENTS_PUBLIC_TUNNEL_URL?`connected`:`none`});try{let res=await builderforceApiFetch(`${serverUrl}/api/agent-hosts`,{method:`POST`,token:tenantJwt,body:JSON.stringify({name:agentNodeName,machineProfile})});agentNodeId=String(res.agentHost.id),agentNodeSlug=res.agentHost.slug,apiKey=res.apiKey;let mapped=await ensureProjectMapping({serverUrl,tenantJwt,agentNodeId,projectRoot:params.projectRoot,projectName:params.defaultInstanceName,description:`builderForceAgents project at ${params.projectRoot}`});mapped&&(projectId=mapped.projectId,projectAction=mapped.action),agentNodeSpin.stop(`AgentNode "${res.agentHost.name}" registered`)}catch(err){return agentNodeSpin.stop(`AgentNode registration failed`),note(String(err instanceof Error?err.message:err),`Error`),null}upsertSharedEnvVar({key:`BUILDERFORCE_URL`,value:serverUrl}),upsertSharedEnvVar({key:`BUILDERFORCE_WEB_TOKEN`,value:webToken}),upsertSharedEnvVar({key:`BUILDERFORCE_TENANT_ID`,value:String(tenantId)}),upsertSharedEnvVar({key:`BUILDERFORCE_API_KEY`,value:apiKey}),upsertSharedEnvVar({key:`BUILDERFORCE_SKIPPED`,value:`0`});try{await updateProjectContextFields(params.projectRoot,{builderforce:{instanceId:agentNodeId,instanceSlug:agentNodeSlug,instanceName:agentNodeName,...projectId?{projectId}:{},tenantId,url:serverUrl,machineProfile}})}catch{}return note([`AgentNode API key saved to ~/.builderforce/.env`,`This key was shown once — it is hashed on the server.`,`Instance slug: ${agentNodeSlug} · tenant: ${tenantId}`,projectId?`Project ${projectAction}: ${projectId}`:`Project mapping: not available`].join(`
|
|
24
|
-
`),`Builderforce connected`),`Builderforce: ${agentNodeName} (${agentNodeSlug}) on tenant ${tenantId}`}export{promptBuilderforceOnboarding};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-C1VbcUOm.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import{t as normalizeBaseUrl}from"./normalize-base-url-D_sv6Zgt.js";import{a as upsertSharedEnvVar,i as readSharedEnvVar}from"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./client-CGgp3zkQ.js";import"./call-DmAU4cRX.js";import"./message-channel-z5YRpR2d.js";import"./sessions-Bl1wwotX.js";import{n as loadProjectContext,o as updateProjectContextFields}from"./project-context-store-CIUcwUP_.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./accounts-Cx82nj4E.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./project-context-D3Mx4maV.js";import{d as openUrl,i as detectBrowserOpenSupport}from"./onboard-helpers-CckrS8_K.js";import"./prompt-style-BMWmaqSC.js";import{t as buildLocalMachineProfile}from"./builderforce-context-CyUg2pSn.js";import{randomBytes}from"node:crypto";import http from"node:http";import{confirm,note,password,select,spinner,text}from"@clack/prompts";const CALLBACK_PORT=51122;async function authenticateViaBrowser(opts){let state=randomBytes(16).toString(`hex`),callbackUrl=`http://localhost:${CALLBACK_PORT}/callback`,authUrl=`${opts.serverUrl.replace(`api.builderforce.ai`,`builderforce.ai`).replace(`api.builderforce.ai`,`builderforce.ai`)}/auth/cli?callback=${encodeURIComponent(callbackUrl)}&state=${encodeURIComponent(state)}`;return(await detectBrowserOpenSupport()).ok?authenticateWithCallbackServer({state,authUrl,prompter:opts.prompter}):authenticateManually({state,authUrl,prompter:opts.prompter})}async function authenticateWithCallbackServer(opts){let tokenPromise=startCallbackServer(opts.state);if(await opts.prompter.note(`Opening browser for authentication…\n${opts.authUrl}`,`Builderforce Auth`),!await openUrl(opts.authUrl))return authenticateManually({state:opts.state,authUrl:opts.authUrl,prompter:opts.prompter});try{return await tokenPromise}catch{return await opts.prompter.note(`Authentication timed out or was cancelled.`,`Auth Error`),null}}async function authenticateManually(opts){await opts.prompter.note([`Open this URL in a browser to authenticate:`,``,opts.authUrl,``,`After authenticating, paste the full callback URL shown in the browser.`].join(`
|
|
2
|
-
`),`Builderforce Auth (manual)`);let pastedUrl=await opts.prompter.text({message:`Paste the callback URL:`,validate:val=>{if(!val.includes(`token=`))return`Invalid callback URL — must contain a token parameter`}});if(typeof pastedUrl==`symbol`||!pastedUrl?.trim())return null;let url=new URL(pastedUrl.trim()),token=url.searchParams.get(`token`);if(url.searchParams.get(`state`)!==opts.state)throw Error(`State mismatch — authentication may have been tampered with.`);if(!token)throw Error(`No token found in callback URL.`);return{webToken:token}}function startCallbackServer(expectedState){return new Promise((resolve,reject)=>{let server=http.createServer((req,res)=>{let url=new URL(req.url??`/`,`http://localhost:${CALLBACK_PORT}`);if(url.pathname!==`/callback`){res.writeHead(404,{"Content-Type":`text/plain`}),res.end(`Not found`);return}let token=url.searchParams.get(`token`);if(url.searchParams.get(`state`)!==expectedState){res.writeHead(400,{"Content-Type":`text/plain`}),res.end(`State mismatch`);return}if(!token){res.writeHead(400,{"Content-Type":`text/plain`}),res.end(`Missing token`);return}res.writeHead(200,{"Content-Type":`text/html; charset=utf-8`,"Cache-Control":`no-store`}),res.end(`<!DOCTYPE html>
|
|
3
|
-
<html lang="en">
|
|
4
|
-
<head>
|
|
5
|
-
<meta charset="utf-8">
|
|
6
|
-
<title>BuilderForceAgents — Authenticated</title>
|
|
7
|
-
<style>
|
|
8
|
-
body { font-family: system-ui, sans-serif; display: flex; justify-content: center;
|
|
9
|
-
align-items: center; min-height: 100vh; margin: 0; background: #0d1117; color: #c9d1d9; }
|
|
10
|
-
.card { text-align: center; padding: 2rem; border-radius: 12px;
|
|
11
|
-
background: #161b22; border: 1px solid #30363d; max-width: 420px; }
|
|
12
|
-
h1 { font-size: 1.4rem; margin: 0 0 .5rem; }
|
|
13
|
-
p { color: #8b949e; }
|
|
14
|
-
</style>
|
|
15
|
-
</head>
|
|
16
|
-
<body>
|
|
17
|
-
<div class="card">
|
|
18
|
-
<h1>✅ Authentication complete</h1>
|
|
19
|
-
<p>You can close this tab and return to the terminal.</p>
|
|
20
|
-
</div>
|
|
21
|
-
</body>
|
|
22
|
-
</html>`),setImmediate(()=>server.close()),resolve({webToken:token})});server.listen(CALLBACK_PORT,`127.0.0.1`);let timer=setTimeout(()=>{server.close(),reject(Error(`Authentication timed out after 5 minutes.`))},3e5);server.on(`close`,()=>clearTimeout(timer))})}async function builderforceApiFetch(url,opts={}){let{token,...rest}=opts,headers={"Content-Type":`application/json`,...token?{Authorization:`Bearer ${token}`}:{}},res=await fetch(url,{...rest,headers}),body=await res.json().catch(()=>({}));if(!res.ok){let msg=body.error??body.message??res.statusText;throw Error(`${res.status} ${msg}`)}return body}async function ensureProjectMapping(params){try{let upsert=await builderforceApiFetch(`${params.serverUrl}/api/projects/upsert`,{method:`POST`,token:params.tenantJwt,body:JSON.stringify({name:params.projectName,description:params.description??`Managed from ${params.projectRoot}`})});return await builderforceApiFetch(`${params.serverUrl}/api/agent-hosts/${params.agentNodeId}/projects/${upsert.project.id}`,{method:`PUT`,token:params.tenantJwt}),{projectId:upsert.project.id,action:upsert.action}}catch{return null}}async function promptBuilderforceOnboarding(params){if(readSharedEnvVar(`BUILDERFORCE_API_KEY`)){let existingUrl=readSharedEnvVar(`BUILDERFORCE_URL`)??`https://api.builderforce.ai`,existingTenantId=readSharedEnvVar(`BUILDERFORCE_TENANT_ID`),existingCtx=await loadProjectContext(params.projectRoot).catch(()=>null),agentNodeLabel=existingCtx?.builderforce?.instanceSlug??existingCtx?.builderforce?.instanceName??existingCtx?.builderforce?.instanceId??`(registered)`;return note([`URL: ${existingUrl}`,`Tenant: ${existingTenantId??`unknown`}`,`AgentNode: ${agentNodeLabel}`,``,`Run 'builderforce init --reconnect' to link a different account.`].join(`
|
|
23
|
-
`),`Already connected to Builderforce`),`Builderforce: already connected (${existingUrl})`}if(!params.forcePrompt&&readSharedEnvVar(`BUILDERFORCE_SKIPPED`)===`1`)return null;let connect=await confirm({message:`Connect to Builderforce? (optional — manage projects, tasks & agents across your mesh)`,initialValue:!0});if(typeof connect==`symbol`||!connect)return upsertSharedEnvVar({key:`BUILDERFORCE_SKIPPED`,value:`1`}),null;let urlInput=await text({message:`Orchestration API URL (Builderforce):`,initialValue:`https://api.builderforce.ai`});if(typeof urlInput==`symbol`)return null;let serverUrl=normalizeBaseUrl(urlInput.trim())||`https://api.builderforce.ai`,authMethod=(await detectBrowserOpenSupport()).ok?await select({message:`How would you like to authenticate?`,options:[{value:`browser`,label:`Open browser (recommended)`,hint:`login or register in your browser`},{value:`terminal`,label:`Type here`,hint:`enter email & password in this terminal`}]}):`terminal`;if(typeof authMethod==`symbol`)return null;let webToken=``;if(authMethod===`browser`){let result=await authenticateViaBrowser({serverUrl,prompter:{note:async(msg,title)=>{note(msg,title)},text:opts=>text({...opts,validate:opts.validate?value=>opts.validate(value??``):void 0})}});if(!result)return null;webToken=result.webToken}else{let authMode=await select({message:`Do you have a Builderforce account?`,options:[{value:`login`,label:`Yes — log in`},{value:`register`,label:`No — create a free account`}]});if(typeof authMode==`symbol`)return null;let emailInput=await text({message:`Email:`});if(typeof emailInput==`symbol`||!emailInput.trim())return null;let email=emailInput.trim(),usernameForReg=``;if(authMode===`register`){let usernameInput=await text({message:`Username:`,initialValue:params.defaultInstanceName.toLowerCase().replace(/[^a-z0-9]+/g,`-`)});if(typeof usernameInput==`symbol`||!usernameInput.trim())return null;usernameForReg=usernameInput.trim()}let passwordInput=await password({message:`Password:`});if(typeof passwordInput==`symbol`||!passwordInput.trim())return null;let rawPassword=passwordInput.trim(),authSpin=spinner();try{authMode===`register`?(authSpin.start(`Creating account…`),webToken=(await builderforceApiFetch(`${serverUrl}/api/auth/web/register`,{method:`POST`,body:JSON.stringify({email,username:usernameForReg,password:rawPassword})})).token,authSpin.stop(`Account created`)):(authSpin.start(`Authenticating…`),webToken=(await builderforceApiFetch(`${serverUrl}/api/auth/web/login`,{method:`POST`,body:JSON.stringify({email,password:rawPassword})})).token,authSpin.stop(`Authenticated`))}catch(err){return authSpin.stop(`Authentication failed`),note(String(err instanceof Error?err.message:err),`Error`),null}}let tenantId=0,tenantSpin=spinner();tenantSpin.start(`Loading workspaces…`);let tenants=[];try{tenants=(await builderforceApiFetch(`${serverUrl}/api/tenants`,{token:webToken})).tenants,tenantSpin.stop(`${tenants.length} workspace(s) found`)}catch(err){return tenantSpin.stop(`Could not load workspaces`),note(String(err instanceof Error?err.message:err),`Error`),null}if(tenants.length===0){let wsNameInput=await text({message:`Create your first workspace:`,initialValue:params.defaultInstanceName});if(typeof wsNameInput==`symbol`||!wsNameInput.trim())return null;let wsSpin=spinner();wsSpin.start(`Creating workspace…`);try{let created=await builderforceApiFetch(`${serverUrl}/api/tenants`,{method:`POST`,token:webToken,body:JSON.stringify({name:wsNameInput.trim()})});tenantId=created.id,wsSpin.stop(`Workspace "${created.name}" created`)}catch(err){return wsSpin.stop(`Could not create workspace`),note(String(err instanceof Error?err.message:err),`Error`),null}}else if(tenants.length===1)tenantId=tenants[0].id,note(`Using workspace: ${tenants[0].name}`,`Workspace`);else{let picked=await select({message:`Select workspace:`,options:tenants.map(tenant=>({value:tenant.id,label:tenant.name,hint:tenant.slug}))});if(typeof picked==`symbol`)return null;tenantId=picked}let tenantJwt=``;try{tenantJwt=(await builderforceApiFetch(`${serverUrl}/api/auth/tenant-token`,{method:`POST`,token:webToken,body:JSON.stringify({tenantId})})).token}catch(err){return note(String(err instanceof Error?err.message:err),`Could not get workspace token`),null}let agentNodeNameInput=await text({message:`AgentNode instance name (shown in dashboard):`,initialValue:params.defaultInstanceName});if(typeof agentNodeNameInput==`symbol`)return null;let agentNodeName=agentNodeNameInput.trim()||params.defaultInstanceName,agentNodeSpin=spinner();agentNodeSpin.start(`Registering agentNode instance…`);let agentNodeId=``,agentNodeSlug=``,apiKey=``,projectId=``,projectAction=`unknown`,machineProfile=buildLocalMachineProfile({workspaceDirectory:params.projectRoot,rootInstallDirectory:process.cwd(),gatewayPort:18789,tunnelUrl:process.env.BUILDERFORCE_AGENTS_PUBLIC_TUNNEL_URL,tunnelStatus:process.env.BUILDERFORCE_AGENTS_PUBLIC_TUNNEL_URL?`connected`:`none`});try{let res=await builderforceApiFetch(`${serverUrl}/api/agent-hosts`,{method:`POST`,token:tenantJwt,body:JSON.stringify({name:agentNodeName,machineProfile})});agentNodeId=String(res.agentHost.id),agentNodeSlug=res.agentHost.slug,apiKey=res.apiKey;let mapped=await ensureProjectMapping({serverUrl,tenantJwt,agentNodeId,projectRoot:params.projectRoot,projectName:params.defaultInstanceName,description:`builderForceAgents project at ${params.projectRoot}`});mapped&&(projectId=mapped.projectId,projectAction=mapped.action),agentNodeSpin.stop(`AgentNode "${res.agentHost.name}" registered`)}catch(err){return agentNodeSpin.stop(`AgentNode registration failed`),note(String(err instanceof Error?err.message:err),`Error`),null}upsertSharedEnvVar({key:`BUILDERFORCE_URL`,value:serverUrl}),upsertSharedEnvVar({key:`BUILDERFORCE_WEB_TOKEN`,value:webToken}),upsertSharedEnvVar({key:`BUILDERFORCE_TENANT_ID`,value:String(tenantId)}),upsertSharedEnvVar({key:`BUILDERFORCE_API_KEY`,value:apiKey}),upsertSharedEnvVar({key:`BUILDERFORCE_SKIPPED`,value:`0`});try{await updateProjectContextFields(params.projectRoot,{builderforce:{instanceId:agentNodeId,instanceSlug:agentNodeSlug,instanceName:agentNodeName,...projectId?{projectId}:{},tenantId,url:serverUrl,machineProfile}})}catch{}return note([`AgentNode API key saved to ~/.builderforce/.env`,`This key was shown once — it is hashed on the server.`,`Instance slug: ${agentNodeSlug} · tenant: ${tenantId}`,projectId?`Project ${projectAction}: ${projectId}`:`Project mapping: not available`].join(`
|
|
24
|
-
`),`Builderforce connected`),`Builderforce: ${agentNodeName} (${agentNodeSlug}) on tenant ${tenantId}`}export{promptBuilderforceOnboarding};
|
package/dist/chrome-DUBgoZpO.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{y as CONFIG_DIR}from"./registry-j1UKIotU.js";import{t as createSubsystemLogger}from"./subsystem-ykSbyaud.js";import{i as isErrno}from"./errors-CguQr0Ja.js";import{n as loadConfig}from"./config-C7baFOp1.js";import path from"node:path";import fs from"node:fs";import os from"node:os";import{createHash,randomBytes}from"node:crypto";import"node:fs/promises";import{execFileSync,spawn}from"node:child_process";import net from"node:net";import{createServer}from"node:http";import WebSocket$1,{WebSocketServer}from"ws";import{Buffer as Buffer$1}from"node:buffer";const DEFAULT_BUILDERFORCE_AGENTS_BROWSER_ENABLED=!0,DEFAULT_BROWSER_EVALUATE_ENABLED=!0,DEFAULT_BUILDERFORCE_AGENTS_BROWSER_COLOR=`#FF4500`,DEFAULT_BUILDERFORCE_AGENTS_BROWSER_PROFILE_NAME=`builderforce`,DEFAULT_BROWSER_DEFAULT_PROFILE_NAME=`chrome`,DEFAULT_AI_SNAPSHOT_MAX_CHARS=8e4,DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS=1e4,DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH=6;function isTailnetIPv4(address){let parts=address.split(`.`);if(parts.length!==4)return!1;let octets=parts.map(p=>Number.parseInt(p,10));if(octets.some(n=>!Number.isFinite(n)||n<0||n>255))return!1;let[a,b]=octets;return a===100&&b>=64&&b<=127}function isTailnetIPv6(address){return address.trim().toLowerCase().startsWith(`fd7a:115c:a1e0:`)}function listTailnetAddresses(){let ipv4=[],ipv6=[],ifaces=os.networkInterfaces();for(let entries of Object.values(ifaces))if(entries)for(let e of entries){if(!e||e.internal)continue;let address=e.address?.trim();address&&(isTailnetIPv4(address)&&ipv4.push(address),isTailnetIPv6(address)&&ipv6.push(address))}return{ipv4:[...new Set(ipv4)],ipv6:[...new Set(ipv6)]}}function pickPrimaryTailnetIPv4(){return listTailnetAddresses().ipv4[0]}function pickPrimaryLanIPv4(){let nets=os.networkInterfaces();for(let name of[`en0`,`eth0`]){let entry=nets[name]?.find(n=>n.family===`IPv4`&&!n.internal);if(entry?.address)return entry.address}for(let list of Object.values(nets)){let entry=list?.find(n=>n.family===`IPv4`&&!n.internal);if(entry?.address)return entry.address}}function isLoopbackAddress(ip){return ip?!!(ip===`127.0.0.1`||ip.startsWith(`127.`)||ip===`::1`||ip.startsWith(`::ffff:127.`)):!1}function isLoopbackHost(host){if(!host)return!1;let h=host.trim().toLowerCase();return h===`localhost`?!0:isLoopbackAddress(h.startsWith(`[`)&&h.endsWith(`]`)?h.slice(1,-1):h)}const POSIX_BUILDERFORCE_AGENTS_TMP_DIR=`/tmp/builderforce`;function isNodeErrorWithCode(err,code){return typeof err==`object`&&!!err&&`code`in err&&err.code===code}function resolvePreferredBuilderForceAgentsTmpDir(options={}){let accessSync=options.accessSync??fs.accessSync,lstatSync=options.lstatSync??fs.lstatSync,mkdirSync=options.mkdirSync??fs.mkdirSync,getuid=options.getuid??(()=>{try{return typeof process.getuid==`function`?process.getuid():void 0}catch{return}}),tmpdir=options.tmpdir??os.tmpdir,uid=getuid(),isSecureDirForUser=st=>uid===void 0?!0:!(typeof st.uid==`number`&&st.uid!==uid||typeof st.mode==`number`&&st.mode&18),fallback=()=>{let base=tmpdir(),suffix=uid===void 0?`builderforce`:`builderforce-${uid}`;return path.join(base,suffix)};try{let preferred=lstatSync(POSIX_BUILDERFORCE_AGENTS_TMP_DIR);return!preferred.isDirectory()||preferred.isSymbolicLink()||(accessSync(POSIX_BUILDERFORCE_AGENTS_TMP_DIR,fs.constants.W_OK|fs.constants.X_OK),!isSecureDirForUser(preferred))?fallback():POSIX_BUILDERFORCE_AGENTS_TMP_DIR}catch(err){if(!isNodeErrorWithCode(err,`ENOENT`))return fallback()}try{accessSync(`/tmp`,fs.constants.W_OK|fs.constants.X_OK),mkdirSync(POSIX_BUILDERFORCE_AGENTS_TMP_DIR,{recursive:!0,mode:448});try{let preferred=lstatSync(POSIX_BUILDERFORCE_AGENTS_TMP_DIR);if(!preferred.isDirectory()||preferred.isSymbolicLink()||!isSecureDirForUser(preferred))return fallback()}catch{return fallback()}return POSIX_BUILDERFORCE_AGENTS_TMP_DIR}catch{return fallback()}}function rawDataToString(data,encoding=`utf8`){return typeof data==`string`?data:Buffer$1.isBuffer(data)?data.toString(encoding):Array.isArray(data)?Buffer$1.concat(data).toString(encoding):data instanceof ArrayBuffer?Buffer$1.from(data).toString(encoding):Buffer$1.from(String(data)).toString(encoding)}const RELAY_AUTH_HEADER=`x-builderforce-relay-token`;function headerValue(value){if(value)return Array.isArray(value)?value[0]:value}function getHeader(req,name){return headerValue(req.headers[name.toLowerCase()])}function parseBaseUrl(raw){let parsed=new URL(raw.trim().replace(/\/$/,``));if(parsed.protocol!==`http:`&&parsed.protocol!==`https:`)throw Error(`extension relay cdpUrl must be http(s), got ${parsed.protocol}`);let host=parsed.hostname,port=parsed.port?.trim()===``?parsed.protocol===`https:`?443:80:Number(parsed.port);if(!Number.isFinite(port)||port<=0||port>65535)throw Error(`extension relay cdpUrl has invalid port: ${parsed.port||`(empty)`}`);return{host,port,baseUrl:parsed.toString().replace(/\/$/,``)}}function text(res,status,bodyText){let body=Buffer.from(bodyText);res.write(`HTTP/1.1 ${status} ${status===200?`OK`:`ERR`}\r\nContent-Type: text/plain; charset=utf-8\r
|
|
2
|
-
Content-Length: ${body.length}\r\nConnection: close\r
|
|
3
|
-
\r
|
|
4
|
-
`),res.write(body),res.end()}function rejectUpgrade(socket,status,bodyText){text(socket,status,bodyText);try{socket.destroy()}catch{}}const serversByPort=new Map,relayAuthByPort=new Map;function resolveGatewayAuthToken(){let envToken=process.env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN?.trim()||process.env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN?.trim();if(envToken)return envToken;try{let configToken=loadConfig().gateway?.auth?.token?.trim();if(configToken)return configToken}catch{}return null}function deriveDeterministicRelayAuthToken(port){let gatewayToken=resolveGatewayAuthToken();return gatewayToken?createHash(`sha256`).update(`builderforce-relay:${port}:`).update(gatewayToken).digest(`base64url`):null}function resolveRelayAuthToken(port){return deriveDeterministicRelayAuthToken(port)??randomBytes(32).toString(`base64url`)}function isAddrInUseError(err){return typeof err==`object`&&!!err&&`code`in err&&err.code===`EADDRINUSE`}async function looksLikeBuilderForceAgentsRelay(baseUrl){let ctrl=new AbortController,timer=setTimeout(()=>ctrl.abort(),500);try{let statusUrl=new URL(`/extension/status`,`${baseUrl}/`).toString(),res=await fetch(statusUrl,{signal:ctrl.signal});return res.ok?typeof(await res.json()).connected==`boolean`:!1}catch{return!1}finally{clearTimeout(timer)}}function relayAuthTokenForUrl(url){try{let parsed=new URL(url);if(!isLoopbackHost(parsed.hostname))return null;let port=parsed.port?.trim()===``?parsed.protocol===`https:`||parsed.protocol===`wss:`?443:80:Number(parsed.port);return Number.isFinite(port)?relayAuthByPort.get(port)??deriveDeterministicRelayAuthToken(port):null}catch{return null}}function getChromeExtensionRelayAuthHeaders(url){let token=relayAuthTokenForUrl(url);return token?{[RELAY_AUTH_HEADER]:token}:{}}async function ensureChromeExtensionRelayServer(opts){let info=parseBaseUrl(opts.cdpUrl);if(!isLoopbackHost(info.host))throw Error(`extension relay requires loopback cdpUrl host (got ${info.host})`);let existing=serversByPort.get(info.port);if(existing)return existing;let relayAuthToken=resolveRelayAuthToken(info.port),extensionWs=null,cdpClients=new Set,connectedTargets=new Map,pendingExtension=new Map,nextExtensionId=1,sendToExtension=async payload=>{let ws=extensionWs;if(!ws||ws.readyState!==WebSocket$1.OPEN)throw Error(`Chrome extension not connected`);return ws.send(JSON.stringify(payload)),await new Promise((resolve,reject)=>{let timer=setTimeout(()=>{pendingExtension.delete(payload.id),reject(Error(`extension request timeout: ${payload.params.method}`))},3e4);pendingExtension.set(payload.id,{resolve,reject,timer})})},broadcastToCdpClients=evt=>{let msg=JSON.stringify(evt);for(let ws of cdpClients)ws.readyState===WebSocket$1.OPEN&&ws.send(msg)},sendResponseToCdp=(ws,res)=>{ws.readyState===WebSocket$1.OPEN&&ws.send(JSON.stringify(res))},ensureTargetEventsForClient=(ws,mode)=>{for(let target of connectedTargets.values())mode===`autoAttach`?ws.send(JSON.stringify({method:`Target.attachedToTarget`,params:{sessionId:target.sessionId,targetInfo:{...target.targetInfo,attached:!0},waitingForDebugger:!1}})):ws.send(JSON.stringify({method:`Target.targetCreated`,params:{targetInfo:{...target.targetInfo,attached:!0}}}))},routeCdpCommand=async cmd=>{switch(cmd.method){case`Browser.getVersion`:return{protocolVersion:`1.3`,product:`Chrome/BuilderForceAgents-Extension-Relay`,revision:`0`,userAgent:`BuilderForceAgents-Extension-Relay`,jsVersion:`V8`};case`Browser.setDownloadBehavior`:return{};case`Target.setAutoAttach`:case`Target.setDiscoverTargets`:return{};case`Target.getTargets`:return{targetInfos:Array.from(connectedTargets.values()).map(t=>({...t.targetInfo,attached:!0}))};case`Target.getTargetInfo`:{let params=cmd.params??{},targetId=typeof params.targetId==`string`?params.targetId:void 0;if(targetId){for(let t of connectedTargets.values())if(t.targetId===targetId)return{targetInfo:t.targetInfo}}if(cmd.sessionId&&connectedTargets.has(cmd.sessionId)){let t=connectedTargets.get(cmd.sessionId);if(t)return{targetInfo:t.targetInfo}}return{targetInfo:Array.from(connectedTargets.values())[0]?.targetInfo}}case`Target.attachToTarget`:{let params=cmd.params??{},targetId=typeof params.targetId==`string`?params.targetId:void 0;if(!targetId)throw Error(`targetId required`);for(let t of connectedTargets.values())if(t.targetId===targetId)return{sessionId:t.sessionId};throw Error(`target not found`)}default:return await sendToExtension({id:nextExtensionId++,method:`forwardCDPCommand`,params:{method:cmd.method,sessionId:cmd.sessionId,params:cmd.params}})}},server=createServer((req,res)=>{let path=new URL(req.url??`/`,info.baseUrl).pathname;if(path.startsWith(`/json`)){let token=getHeader(req,RELAY_AUTH_HEADER);if(!token||token!==relayAuthToken){res.writeHead(401),res.end(`Unauthorized`);return}}if(req.method===`HEAD`&&path===`/`){res.writeHead(200),res.end();return}if(path===`/`){res.writeHead(200,{"Content-Type":`text/plain; charset=utf-8`}),res.end(`OK`);return}if(path===`/extension/status`){res.writeHead(200,{"Content-Type":`application/json`}),res.end(JSON.stringify({connected:!!extensionWs}));return}let cdpWsUrl=`${`ws://${req.headers.host?.trim()||`${info.host}:${info.port}`}`}/cdp`;if((path===`/json/version`||path===`/json/version/`)&&(req.method===`GET`||req.method===`PUT`)){let payload={Browser:`BuilderForceAgents/extension-relay`,"Protocol-Version":`1.3`};extensionWs&&(payload.webSocketDebuggerUrl=cdpWsUrl),res.writeHead(200,{"Content-Type":`application/json`}),res.end(JSON.stringify(payload));return}if(new Set([`/json`,`/json/`,`/json/list`,`/json/list/`]).has(path)&&(req.method===`GET`||req.method===`PUT`)){let list=Array.from(connectedTargets.values()).map(t=>({id:t.targetId,type:t.targetInfo.type??`page`,title:t.targetInfo.title??``,description:t.targetInfo.title??``,url:t.targetInfo.url??``,webSocketDebuggerUrl:cdpWsUrl,devtoolsFrontendUrl:`/devtools/inspector.html?ws=${cdpWsUrl.replace(`ws://`,``)}`}));res.writeHead(200,{"Content-Type":`application/json`}),res.end(JSON.stringify(list));return}let activateMatch=path.match(/^\/json\/activate\/(.+)$/);if(activateMatch&&(req.method===`GET`||req.method===`PUT`)){let targetId=decodeURIComponent(activateMatch[1]??``).trim();if(!targetId){res.writeHead(400),res.end(`targetId required`);return}(async()=>{try{await sendToExtension({id:nextExtensionId++,method:`forwardCDPCommand`,params:{method:`Target.activateTarget`,params:{targetId}}})}catch{}})(),res.writeHead(200),res.end(`OK`);return}let closeMatch=path.match(/^\/json\/close\/(.+)$/);if(closeMatch&&(req.method===`GET`||req.method===`PUT`)){let targetId=decodeURIComponent(closeMatch[1]??``).trim();if(!targetId){res.writeHead(400),res.end(`targetId required`);return}(async()=>{try{await sendToExtension({id:nextExtensionId++,method:`forwardCDPCommand`,params:{method:`Target.closeTarget`,params:{targetId}}})}catch{}})(),res.writeHead(200),res.end(`OK`);return}res.writeHead(404),res.end(`not found`)}),wssExtension=new WebSocketServer({noServer:!0}),wssCdp=new WebSocketServer({noServer:!0});server.on(`upgrade`,(req,socket,head)=>{let pathname=new URL(req.url??`/`,info.baseUrl).pathname,remote=req.socket.remoteAddress;if(!isLoopbackAddress(remote)){rejectUpgrade(socket,403,`Forbidden`);return}let origin=headerValue(req.headers.origin);if(origin&&!origin.startsWith(`chrome-extension://`)){rejectUpgrade(socket,403,`Forbidden: invalid origin`);return}if(pathname===`/extension`){if(extensionWs){rejectUpgrade(socket,409,`Extension already connected`);return}wssExtension.handleUpgrade(req,socket,head,ws=>{wssExtension.emit(`connection`,ws,req)});return}if(pathname===`/cdp`){let token=getHeader(req,RELAY_AUTH_HEADER);if(!token||token!==relayAuthToken){rejectUpgrade(socket,401,`Unauthorized`);return}if(!extensionWs){rejectUpgrade(socket,503,`Extension not connected`);return}wssCdp.handleUpgrade(req,socket,head,ws=>{wssCdp.emit(`connection`,ws,req)});return}rejectUpgrade(socket,404,`Not Found`)}),wssExtension.on(`connection`,ws=>{extensionWs=ws;let ping=setInterval(()=>{ws.readyState===WebSocket$1.OPEN&&ws.send(JSON.stringify({method:`ping`}))},5e3);ws.on(`message`,data=>{let parsed=null;try{parsed=JSON.parse(rawDataToString(data))}catch{return}if(parsed&&typeof parsed==`object`&&`id`in parsed&&typeof parsed.id==`number`){let pending=pendingExtension.get(parsed.id);if(!pending)return;pendingExtension.delete(parsed.id),clearTimeout(pending.timer),`error`in parsed&&typeof parsed.error==`string`&&parsed.error.trim()?pending.reject(Error(parsed.error)):pending.resolve(parsed.result);return}if(parsed&&typeof parsed==`object`&&`method`in parsed){if(parsed.method===`pong`||parsed.method!==`forwardCDPEvent`)return;let evt=parsed,method=evt.params?.method,params=evt.params?.params,sessionId=evt.params?.sessionId;if(!method||typeof method!=`string`)return;if(method===`Target.attachedToTarget`){let attached=params??{};if((attached?.targetInfo?.type??`page`)!==`page`)return;if(attached?.sessionId&&attached?.targetInfo?.targetId){let prev=connectedTargets.get(attached.sessionId),nextTargetId=attached.targetInfo.targetId,prevTargetId=prev?.targetId,changedTarget=!!(prev&&prevTargetId&&prevTargetId!==nextTargetId);connectedTargets.set(attached.sessionId,{sessionId:attached.sessionId,targetId:nextTargetId,targetInfo:attached.targetInfo}),changedTarget&&prevTargetId&&broadcastToCdpClients({method:`Target.detachedFromTarget`,params:{sessionId:attached.sessionId,targetId:prevTargetId},sessionId:attached.sessionId}),(!prev||changedTarget)&&broadcastToCdpClients({method,params,sessionId});return}}if(method===`Target.detachedFromTarget`){let detached=params??{};detached?.sessionId&&connectedTargets.delete(detached.sessionId),broadcastToCdpClients({method,params,sessionId});return}if(method===`Target.targetInfoChanged`){let targetInfo=(params??{})?.targetInfo,targetId=targetInfo?.targetId;if(targetId&&(targetInfo?.type??`page`)===`page`)for(let[sid,target]of connectedTargets)target.targetId===targetId&&connectedTargets.set(sid,{...target,targetInfo:{...target.targetInfo,...targetInfo}})}broadcastToCdpClients({method,params,sessionId})}}),ws.on(`close`,()=>{clearInterval(ping),extensionWs=null;for(let[,pending]of pendingExtension)clearTimeout(pending.timer),pending.reject(Error(`extension disconnected`));pendingExtension.clear(),connectedTargets.clear();for(let client of cdpClients)try{client.close(1011,`extension disconnected`)}catch{}cdpClients.clear()})}),wssCdp.on(`connection`,ws=>{cdpClients.add(ws),ws.on(`message`,async data=>{let cmd=null;try{cmd=JSON.parse(rawDataToString(data))}catch{return}if(!(!cmd||typeof cmd!=`object`)&&!(typeof cmd.id!=`number`||typeof cmd.method!=`string`)){if(!extensionWs){sendResponseToCdp(ws,{id:cmd.id,sessionId:cmd.sessionId,error:{message:`Extension not connected`}});return}try{let result=await routeCdpCommand(cmd);if(cmd.method===`Target.setAutoAttach`&&!cmd.sessionId&&ensureTargetEventsForClient(ws,`autoAttach`),cmd.method===`Target.setDiscoverTargets`&&(cmd.params??{}).discover===!0&&ensureTargetEventsForClient(ws,`discover`),cmd.method===`Target.attachToTarget`){let params=cmd.params??{},targetId=typeof params.targetId==`string`?params.targetId:void 0;if(targetId){let target=Array.from(connectedTargets.values()).find(t=>t.targetId===targetId);target&&ws.send(JSON.stringify({method:`Target.attachedToTarget`,params:{sessionId:target.sessionId,targetInfo:{...target.targetInfo,attached:!0},waitingForDebugger:!1}}))}}sendResponseToCdp(ws,{id:cmd.id,sessionId:cmd.sessionId,result})}catch(err){sendResponseToCdp(ws,{id:cmd.id,sessionId:cmd.sessionId,error:{message:err instanceof Error?err.message:String(err)}})}}}),ws.on(`close`,()=>{cdpClients.delete(ws)})});try{await new Promise((resolve,reject)=>{server.listen(info.port,info.host,()=>resolve()),server.once(`error`,reject)})}catch(err){if(isAddrInUseError(err)&&await looksLikeBuilderForceAgentsRelay(info.baseUrl)){let existingRelay={host:info.host,port:info.port,baseUrl:info.baseUrl,cdpWsUrl:`ws://${info.host}:${info.port}/cdp`,extensionConnected:()=>!1,stop:async()=>{serversByPort.delete(info.port),relayAuthByPort.delete(info.port)}};return relayAuthByPort.set(info.port,relayAuthToken),serversByPort.set(info.port,existingRelay),existingRelay}throw err}let port=server.address()?.port??info.port,host=info.host,relay={host,port,baseUrl:`${new URL(info.baseUrl).protocol}//${host}:${port}`,cdpWsUrl:`ws://${host}:${port}/cdp`,extensionConnected:()=>!!extensionWs,stop:async()=>{serversByPort.delete(port),relayAuthByPort.delete(port);try{extensionWs?.close(1001,`server stopping`)}catch{}for(let ws of cdpClients)try{ws.close(1001,`server stopping`)}catch{}await new Promise(resolve=>{server.close(()=>resolve())}),wssExtension.close(),wssCdp.close()}};return relayAuthByPort.set(port,relayAuthToken),serversByPort.set(port,relay),relay}async function stopChromeExtensionRelayServer(opts){let info=parseBaseUrl(opts.cdpUrl),existing=serversByPort.get(info.port);return existing?(await existing.stop(),relayAuthByPort.delete(info.port),!0):!1}function getHeadersWithAuth(url,headers={}){let mergedHeaders={...getChromeExtensionRelayAuthHeaders(url),...headers};try{let parsed=new URL(url);if(Object.keys(mergedHeaders).some(key=>key.toLowerCase()===`authorization`))return mergedHeaders;if(parsed.username||parsed.password){let auth=Buffer.from(`${parsed.username}:${parsed.password}`).toString(`base64`);return{...mergedHeaders,Authorization:`Basic ${auth}`}}}catch{}return mergedHeaders}function appendCdpPath(cdpUrl,path){let url=new URL(cdpUrl);return url.pathname=`${url.pathname.replace(/\/$/,``)}${path.startsWith(`/`)?path:`/${path}`}`,url.toString()}function createCdpSender(ws){let nextId=1,pending=new Map,send=(method,params,sessionId)=>{let id=nextId++,msg={id,method,params,sessionId};return ws.send(JSON.stringify(msg)),new Promise((resolve,reject)=>{pending.set(id,{resolve,reject})})},closeWithError=err=>{for(let[,p]of pending)p.reject(err);pending.clear();try{ws.close()}catch{}};return ws.on(`error`,err=>{closeWithError(err instanceof Error?err:Error(String(err)))}),ws.on(`message`,data=>{try{let parsed=JSON.parse(rawDataToString(data));if(typeof parsed.id!=`number`)return;let p=pending.get(parsed.id);if(!p)return;if(pending.delete(parsed.id),parsed.error?.message){p.reject(Error(parsed.error.message));return}p.resolve(parsed.result)}catch{}}),ws.on(`close`,()=>{closeWithError(Error(`CDP socket closed`))}),{send,closeWithError}}async function fetchJson(url,timeoutMs=1500,init){return await(await fetchChecked(url,timeoutMs,init)).json()}async function fetchChecked(url,timeoutMs=1500,init){let ctrl=new AbortController,t=setTimeout(ctrl.abort.bind(ctrl),timeoutMs);try{let headers=getHeadersWithAuth(url,init?.headers||{}),res=await fetch(url,{...init,headers,signal:ctrl.signal});if(!res.ok)throw Error(`HTTP ${res.status}`);return res}finally{clearTimeout(t)}}async function fetchOk(url,timeoutMs=1500,init){await fetchChecked(url,timeoutMs,init)}async function withCdpSocket(wsUrl,fn,opts){let headers=getHeadersWithAuth(wsUrl,opts?.headers??{}),ws=new WebSocket$1(wsUrl,{handshakeTimeout:typeof opts?.handshakeTimeoutMs==`number`&&Number.isFinite(opts.handshakeTimeoutMs)?Math.max(1,Math.floor(opts.handshakeTimeoutMs)):5e3,...Object.keys(headers).length?{headers}:{}}),{send,closeWithError}=createCdpSender(ws),openPromise=new Promise((resolve,reject)=>{ws.once(`open`,()=>resolve()),ws.once(`error`,err=>reject(err)),ws.once(`close`,()=>reject(Error(`CDP socket closed`)))});try{await openPromise}catch(err){throw closeWithError(err instanceof Error?err:Error(String(err))),err}try{return await fn(send)}catch(err){throw closeWithError(err instanceof Error?err:Error(String(err))),err}finally{try{ws.close()}catch{}}}function normalizeCdpWsUrl(wsUrl,cdpUrl){let ws=new URL(wsUrl),cdp=new URL(cdpUrl);if(isLoopbackHost(ws.hostname)&&!isLoopbackHost(cdp.hostname)){ws.hostname=cdp.hostname;let cdpPort=cdp.port||(cdp.protocol===`https:`?`443`:`80`);cdpPort&&(ws.port=cdpPort),ws.protocol=cdp.protocol===`https:`?`wss:`:`ws:`}cdp.protocol===`https:`&&ws.protocol===`ws:`&&(ws.protocol=`wss:`),!ws.username&&!ws.password&&(cdp.username||cdp.password)&&(ws.username=cdp.username,ws.password=cdp.password);for(let[key,value]of cdp.searchParams.entries())ws.searchParams.has(key)||ws.searchParams.append(key,value);return ws.toString()}async function captureScreenshot(opts){return await withCdpSocket(opts.wsUrl,async send=>{await send(`Page.enable`);let clip;if(opts.fullPage){let metrics=await send(`Page.getLayoutMetrics`),size=metrics?.cssContentSize??metrics?.contentSize,width=Number(size?.width??0),height=Number(size?.height??0);width>0&&height>0&&(clip={x:0,y:0,width,height,scale:1})}let format=opts.format??`png`,quality=format===`jpeg`?Math.max(0,Math.min(100,Math.round(opts.quality??85))):void 0,base64=(await send(`Page.captureScreenshot`,{format,...quality===void 0?{}:{quality},fromSurface:!0,captureBeyondViewport:!0,...clip?{clip}:{}}))?.data;if(!base64)throw Error(`Screenshot failed: missing data`);return Buffer.from(base64,`base64`)})}async function createTargetViaCdp(opts){let version=await fetchJson(appendCdpPath(opts.cdpUrl,`/json/version`),1500),wsUrlRaw=String(version?.webSocketDebuggerUrl??``).trim(),wsUrl=wsUrlRaw?normalizeCdpWsUrl(wsUrlRaw,opts.cdpUrl):``;if(!wsUrl)throw Error(`CDP /json/version missing webSocketDebuggerUrl`);return await withCdpSocket(wsUrl,async send=>{let created=await send(`Target.createTarget`,{url:opts.url}),targetId=String(created?.targetId??``).trim();if(!targetId)throw Error(`CDP Target.createTarget returned no targetId`);return{targetId}})}function axValue(v){if(!v||typeof v!=`object`)return``;let value=v.value;return typeof value==`string`?value:typeof value==`number`||typeof value==`boolean`?String(value):``}function formatAriaSnapshot(nodes,limit){let byId=new Map;for(let n of nodes)n.nodeId&&byId.set(n.nodeId,n);let referenced=new Set;for(let n of nodes)for(let c of n.childIds??[])referenced.add(c);let root=nodes.find(n=>n.nodeId&&!referenced.has(n.nodeId))??nodes[0];if(!root?.nodeId)return[];let out=[],stack=[{id:root.nodeId,depth:0}];for(;stack.length&&out.length<limit;){let popped=stack.pop();if(!popped)break;let{id,depth}=popped,n=byId.get(id);if(!n)continue;let role=axValue(n.role),name=axValue(n.name),value=axValue(n.value),description=axValue(n.description),ref=`ax${out.length+1}`;out.push({ref,role:role||`unknown`,name:name||``,...value?{value}:{},...description?{description}:{},...typeof n.backendDOMNodeId==`number`?{backendDOMNodeId:n.backendDOMNodeId}:{},depth});let children=(n.childIds??[]).filter(c=>byId.has(c));for(let i=children.length-1;i>=0;i--){let child=children[i];child&&stack.push({id:child,depth:depth+1})}}return out}async function snapshotAria(opts){let limit=Math.max(1,Math.min(2e3,Math.floor(opts.limit??500)));return await withCdpSocket(opts.wsUrl,async send=>{await send(`Accessibility.enable`).catch(()=>{});let res=await send(`Accessibility.getFullAXTree`);return{nodes:formatAriaSnapshot(Array.isArray(res?.nodes)?res.nodes:[],limit)}})}const CHROMIUM_BUNDLE_IDS=new Set([`com.google.Chrome`,`com.google.Chrome.beta`,`com.google.Chrome.canary`,`com.google.Chrome.dev`,`com.brave.Browser`,`com.brave.Browser.beta`,`com.brave.Browser.nightly`,`com.microsoft.Edge`,`com.microsoft.EdgeBeta`,`com.microsoft.EdgeDev`,`com.microsoft.EdgeCanary`,`org.chromium.Chromium`,`com.vivaldi.Vivaldi`,`com.operasoftware.Opera`,`com.operasoftware.OperaGX`,`com.yandex.desktop.yandex-browser`,`company.thebrowser.Browser`]),CHROMIUM_DESKTOP_IDS=new Set([`google-chrome.desktop`,`google-chrome-beta.desktop`,`google-chrome-unstable.desktop`,`brave-browser.desktop`,`microsoft-edge.desktop`,`microsoft-edge-beta.desktop`,`microsoft-edge-dev.desktop`,`microsoft-edge-canary.desktop`,`chromium.desktop`,`chromium-browser.desktop`,`vivaldi.desktop`,`vivaldi-stable.desktop`,`opera.desktop`,`opera-gx.desktop`,`yandex-browser.desktop`,`org.chromium.Chromium.desktop`]),CHROMIUM_EXE_NAMES=new Set(`chrome.exe,msedge.exe,brave.exe,brave-browser.exe,chromium.exe,vivaldi.exe,opera.exe,launcher.exe,yandex.exe,yandexbrowser.exe,google chrome,google chrome canary,brave browser,microsoft edge,chromium,chrome,brave,msedge,brave-browser,google-chrome,google-chrome-stable,google-chrome-beta,google-chrome-unstable,microsoft-edge,microsoft-edge-beta,microsoft-edge-dev,microsoft-edge-canary,chromium-browser,vivaldi,vivaldi-stable,opera,opera-stable,opera-gx,yandex-browser`.split(`,`));function exists$1(filePath){try{return fs.existsSync(filePath)}catch{return!1}}function execText(command,args,timeoutMs=1200,maxBuffer=1024*1024){try{let output=execFileSync(command,args,{timeout:timeoutMs,encoding:`utf8`,maxBuffer});return String(output??``).trim()||null}catch{return null}}function inferKindFromIdentifier(identifier){let id=identifier.toLowerCase();return id.includes(`brave`)?`brave`:id.includes(`edge`)?`edge`:id.includes(`chromium`)?`chromium`:id.includes(`canary`)?`canary`:id.includes(`opera`)||id.includes(`vivaldi`)||id.includes(`yandex`)||id.includes(`thebrowser`)?`chromium`:`chrome`}function inferKindFromExecutableName(name){let lower=name.toLowerCase();return lower.includes(`brave`)?`brave`:lower.includes(`edge`)||lower.includes(`msedge`)?`edge`:lower.includes(`chromium`)?`chromium`:lower.includes(`canary`)||lower.includes(`sxs`)?`canary`:lower.includes(`opera`)||lower.includes(`vivaldi`)||lower.includes(`yandex`)?`chromium`:`chrome`}function detectDefaultChromiumExecutable(platform){return platform===`darwin`?detectDefaultChromiumExecutableMac():platform===`linux`?detectDefaultChromiumExecutableLinux():platform===`win32`?detectDefaultChromiumExecutableWindows():null}function detectDefaultChromiumExecutableMac(){let bundleId=detectDefaultBrowserBundleIdMac();if(!bundleId||!CHROMIUM_BUNDLE_IDS.has(bundleId))return null;let appPathRaw=execText(`/usr/bin/osascript`,[`-e`,`POSIX path of (path to application id "${bundleId}")`]);if(!appPathRaw)return null;let appPath=appPathRaw.trim().replace(/\/$/,``),exeName=execText(`/usr/bin/defaults`,[`read`,path.join(appPath,`Contents`,`Info`),`CFBundleExecutable`]);if(!exeName)return null;let exePath=path.join(appPath,`Contents`,`MacOS`,exeName.trim());return exists$1(exePath)?{kind:inferKindFromIdentifier(bundleId),path:exePath}:null}function detectDefaultBrowserBundleIdMac(){let plistPath=path.join(os.homedir(),`Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist`);if(!exists$1(plistPath))return null;let handlersRaw=execText(`/usr/bin/plutil`,[`-extract`,`LSHandlers`,`json`,`-o`,`-`,`--`,plistPath],2e3,5*1024*1024);if(!handlersRaw)return null;let handlers;try{handlers=JSON.parse(handlersRaw)}catch{return null}if(!Array.isArray(handlers))return null;let resolveScheme=scheme=>{let candidate=null;for(let entry of handlers){if(!entry||typeof entry!=`object`)continue;let record=entry;if(record.LSHandlerURLScheme!==scheme)continue;let role=typeof record.LSHandlerRoleAll==`string`&&record.LSHandlerRoleAll||typeof record.LSHandlerRoleViewer==`string`&&record.LSHandlerRoleViewer||null;role&&(candidate=role)}return candidate};return resolveScheme(`http`)??resolveScheme(`https`)}function detectDefaultChromiumExecutableLinux(){let desktopId=execText(`xdg-settings`,[`get`,`default-web-browser`])||execText(`xdg-mime`,[`query`,`default`,`x-scheme-handler/http`]);if(!desktopId)return null;let trimmed=desktopId.trim();if(!CHROMIUM_DESKTOP_IDS.has(trimmed))return null;let desktopPath=findDesktopFilePath(trimmed);if(!desktopPath)return null;let execLine=readDesktopExecLine(desktopPath);if(!execLine)return null;let command=extractExecutableFromExecLine(execLine);if(!command)return null;let resolved=resolveLinuxExecutablePath(command);if(!resolved)return null;let exeName=path.posix.basename(resolved).toLowerCase();return CHROMIUM_EXE_NAMES.has(exeName)?{kind:inferKindFromExecutableName(exeName),path:resolved}:null}function detectDefaultChromiumExecutableWindows(){let progId=readWindowsProgId(),command=(progId?readWindowsCommandForProgId(progId):null)||readWindowsCommandForProgId(`http`);if(!command)return null;let exePath=extractWindowsExecutablePath(expandWindowsEnvVars(command));if(!exePath||!exists$1(exePath))return null;let exeName=path.win32.basename(exePath).toLowerCase();return CHROMIUM_EXE_NAMES.has(exeName)?{kind:inferKindFromExecutableName(exeName),path:exePath}:null}function findDesktopFilePath(desktopId){let candidates=[path.join(os.homedir(),`.local`,`share`,`applications`,desktopId),path.join(`/usr/local/share/applications`,desktopId),path.join(`/usr/share/applications`,desktopId),path.join(`/var/lib/snapd/desktop/applications`,desktopId)];for(let candidate of candidates)if(exists$1(candidate))return candidate;return null}function readDesktopExecLine(desktopPath){try{let lines=fs.readFileSync(desktopPath,`utf8`).split(/\r?\n/);for(let line of lines)if(line.startsWith(`Exec=`))return line.slice(5).trim()}catch{}return null}function extractExecutableFromExecLine(execLine){let tokens=splitExecLine(execLine);for(let token of tokens)if(token&&token!==`env`&&!(token.includes(`=`)&&!token.startsWith(`/`)&&!token.includes(`\\`)))return token.replace(/^["']|["']$/g,``);return null}function splitExecLine(line){let tokens=[],current=``,inQuotes=!1,quoteChar=``;for(let i=0;i<line.length;i+=1){let ch=line[i];if((ch===`"`||ch===`'`)&&(!inQuotes||ch===quoteChar)){inQuotes?(inQuotes=!1,quoteChar=``):(inQuotes=!0,quoteChar=ch);continue}if(!inQuotes&&/\s/.test(ch)){current&&=(tokens.push(current),``);continue}current+=ch}return current&&tokens.push(current),tokens}function resolveLinuxExecutablePath(command){let cleaned=command.trim().replace(/%[a-zA-Z]/g,``);if(!cleaned)return null;if(cleaned.startsWith(`/`))return cleaned;let resolved=execText(`which`,[cleaned],800);return resolved?resolved.trim():null}function readWindowsProgId(){let output=execText(`reg`,[`query`,`HKCU\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice`,`/v`,`ProgId`]);return output&&output.match(/ProgId\s+REG_\w+\s+(.+)$/im)?.[1]?.trim()||null}function readWindowsCommandForProgId(progId){let output=execText(`reg`,[`query`,progId===`http`?`HKCR\\http\\shell\\open\\command`:`HKCR\\${progId}\\shell\\open\\command`,`/ve`]);return output&&output.match(/REG_\w+\s+(.+)$/im)?.[1]?.trim()||null}function expandWindowsEnvVars(value){return value.replace(/%([^%]+)%/g,(_match,name)=>{let key=String(name??``).trim();return key?process.env[key]??`%${key}%`:_match})}function extractWindowsExecutablePath(command){let quoted=command.match(/"([^"]+\\.exe)"/i);if(quoted?.[1])return quoted[1];let unquoted=command.match(/([^\\s]+\\.exe)/i);return unquoted?.[1]?unquoted[1]:null}function findFirstExecutable(candidates){for(let candidate of candidates)if(exists$1(candidate.path))return candidate;return null}function findChromeExecutableMac(){return findFirstExecutable([{kind:`chrome`,path:`/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`},{kind:`chrome`,path:path.join(os.homedir(),`Applications/Google Chrome.app/Contents/MacOS/Google Chrome`)},{kind:`brave`,path:`/Applications/Brave Browser.app/Contents/MacOS/Brave Browser`},{kind:`brave`,path:path.join(os.homedir(),`Applications/Brave Browser.app/Contents/MacOS/Brave Browser`)},{kind:`edge`,path:`/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge`},{kind:`edge`,path:path.join(os.homedir(),`Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge`)},{kind:`chromium`,path:`/Applications/Chromium.app/Contents/MacOS/Chromium`},{kind:`chromium`,path:path.join(os.homedir(),`Applications/Chromium.app/Contents/MacOS/Chromium`)},{kind:`canary`,path:`/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary`},{kind:`canary`,path:path.join(os.homedir(),`Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary`)}])}function findChromeExecutableLinux(){return findFirstExecutable([{kind:`chrome`,path:`/usr/bin/google-chrome`},{kind:`chrome`,path:`/usr/bin/google-chrome-stable`},{kind:`chrome`,path:`/usr/bin/chrome`},{kind:`brave`,path:`/usr/bin/brave-browser`},{kind:`brave`,path:`/usr/bin/brave-browser-stable`},{kind:`brave`,path:`/usr/bin/brave`},{kind:`brave`,path:`/snap/bin/brave`},{kind:`edge`,path:`/usr/bin/microsoft-edge`},{kind:`edge`,path:`/usr/bin/microsoft-edge-stable`},{kind:`chromium`,path:`/usr/bin/chromium`},{kind:`chromium`,path:`/usr/bin/chromium-browser`},{kind:`chromium`,path:`/snap/bin/chromium`}])}function findChromeExecutableWindows(){let localAppData=process.env.LOCALAPPDATA??``,programFiles=process.env.ProgramFiles??`C:\\Program Files`,programFilesX86=process.env[`ProgramFiles(x86)`]??`C:\\Program Files (x86)`,joinWin=path.win32.join,candidates=[];return localAppData&&(candidates.push({kind:`chrome`,path:joinWin(localAppData,`Google`,`Chrome`,`Application`,`chrome.exe`)}),candidates.push({kind:`brave`,path:joinWin(localAppData,`BraveSoftware`,`Brave-Browser`,`Application`,`brave.exe`)}),candidates.push({kind:`edge`,path:joinWin(localAppData,`Microsoft`,`Edge`,`Application`,`msedge.exe`)}),candidates.push({kind:`chromium`,path:joinWin(localAppData,`Chromium`,`Application`,`chrome.exe`)}),candidates.push({kind:`canary`,path:joinWin(localAppData,`Google`,`Chrome SxS`,`Application`,`chrome.exe`)})),candidates.push({kind:`chrome`,path:joinWin(programFiles,`Google`,`Chrome`,`Application`,`chrome.exe`)}),candidates.push({kind:`chrome`,path:joinWin(programFilesX86,`Google`,`Chrome`,`Application`,`chrome.exe`)}),candidates.push({kind:`brave`,path:joinWin(programFiles,`BraveSoftware`,`Brave-Browser`,`Application`,`brave.exe`)}),candidates.push({kind:`brave`,path:joinWin(programFilesX86,`BraveSoftware`,`Brave-Browser`,`Application`,`brave.exe`)}),candidates.push({kind:`edge`,path:joinWin(programFiles,`Microsoft`,`Edge`,`Application`,`msedge.exe`)}),candidates.push({kind:`edge`,path:joinWin(programFilesX86,`Microsoft`,`Edge`,`Application`,`msedge.exe`)}),findFirstExecutable(candidates)}function resolveBrowserExecutableForPlatform(resolved,platform){if(resolved.executablePath){if(!exists$1(resolved.executablePath))throw Error(`browser.executablePath not found: ${resolved.executablePath}`);return{kind:`custom`,path:resolved.executablePath}}return detectDefaultChromiumExecutable(platform)||(platform===`darwin`?findChromeExecutableMac():platform===`linux`?findChromeExecutableLinux():platform===`win32`?findChromeExecutableWindows():null)}process.platform;var PortInUseError=class extends Error{constructor(port,details){super(`Port ${port} is already in use.`),this.name=`PortInUseError`,this.port=port,this.details=details}};async function ensurePortAvailable(port){try{await new Promise((resolve,reject)=>{let tester=net.createServer().once(`error`,err=>reject(err)).once(`listening`,()=>{tester.close(()=>resolve())}).listen(port)})}catch(err){throw isErrno(err)&&err.code===`EADDRINUSE`?new PortInUseError(port):err}}function decoratedMarkerPath(userDataDir){return path.join(userDataDir,`.builderforce-profile-decorated`)}function safeReadJson(filePath){try{if(!fs.existsSync(filePath))return null;let raw=fs.readFileSync(filePath,`utf-8`),parsed=JSON.parse(raw);return typeof parsed!=`object`||!parsed||Array.isArray(parsed)?null:parsed}catch{return null}}function safeWriteJson(filePath,data){fs.mkdirSync(path.dirname(filePath),{recursive:!0}),fs.writeFileSync(filePath,JSON.stringify(data,null,2))}function setDeep(obj,keys,value){let node=obj;for(let key of keys.slice(0,-1)){let next=node[key];(typeof next!=`object`||!next||Array.isArray(next))&&(node[key]={}),node=node[key]}node[keys[keys.length-1]??``]=value}function parseHexRgbToSignedArgbInt(hex){let cleaned=hex.trim().replace(/^#/,``);if(!/^[0-9a-fA-F]{6}$/.test(cleaned))return null;let argbUnsigned=255<<24|Number.parseInt(cleaned,16);return argbUnsigned>2147483647?argbUnsigned-4294967296:argbUnsigned}function isProfileDecorated(userDataDir,desiredName,desiredColorHex){let desiredColorInt=parseHexRgbToSignedArgbInt(desiredColorHex),localStatePath=path.join(userDataDir,`Local State`),preferencesPath=path.join(userDataDir,`Default`,`Preferences`),profile=safeReadJson(localStatePath)?.profile,infoCache=typeof profile==`object`&&profile&&!Array.isArray(profile)?profile.info_cache:null,info=typeof infoCache==`object`&&infoCache&&!Array.isArray(infoCache)&&typeof infoCache.Default==`object`&&infoCache.Default!==null&&!Array.isArray(infoCache.Default)?infoCache.Default:null,prefs=safeReadJson(preferencesPath),browserTheme=(()=>{let browser=prefs?.browser,theme=typeof browser==`object`&&browser&&!Array.isArray(browser)?browser.theme:null;return typeof theme==`object`&&theme&&!Array.isArray(theme)?theme:null})(),autogeneratedTheme=(()=>{let autogenerated=prefs?.autogenerated,theme=typeof autogenerated==`object`&&autogenerated&&!Array.isArray(autogenerated)?autogenerated.theme:null;return typeof theme==`object`&&theme&&!Array.isArray(theme)?theme:null})(),nameOk=typeof info?.name==`string`?info.name===desiredName:!0;if(desiredColorInt==null)return nameOk;let localSeedOk=typeof info?.profile_color_seed==`number`?info.profile_color_seed===desiredColorInt:!1,prefOk=typeof browserTheme?.user_color2==`number`&&browserTheme.user_color2===desiredColorInt||typeof autogeneratedTheme?.color==`number`&&autogeneratedTheme.color===desiredColorInt;return nameOk&&localSeedOk&&prefOk}function decorateBuilderForceAgentsProfile(userDataDir,opts){let desiredName=opts?.name??DEFAULT_BUILDERFORCE_AGENTS_BROWSER_PROFILE_NAME,desiredColor=(opts?.color??DEFAULT_BUILDERFORCE_AGENTS_BROWSER_COLOR).toUpperCase(),desiredColorInt=parseHexRgbToSignedArgbInt(desiredColor),localStatePath=path.join(userDataDir,`Local State`),preferencesPath=path.join(userDataDir,`Default`,`Preferences`),localState=safeReadJson(localStatePath)??{};setDeep(localState,[`profile`,`info_cache`,`Default`,`name`],desiredName),setDeep(localState,[`profile`,`info_cache`,`Default`,`shortcut_name`],desiredName),setDeep(localState,[`profile`,`info_cache`,`Default`,`user_name`],desiredName),setDeep(localState,[`profile`,`info_cache`,`Default`,`profile_color`],desiredColor),setDeep(localState,[`profile`,`info_cache`,`Default`,`user_color`],desiredColor),desiredColorInt!=null&&(setDeep(localState,[`profile`,`info_cache`,`Default`,`profile_color_seed`],desiredColorInt),setDeep(localState,[`profile`,`info_cache`,`Default`,`profile_highlight_color`],desiredColorInt),setDeep(localState,[`profile`,`info_cache`,`Default`,`default_avatar_fill_color`],desiredColorInt),setDeep(localState,[`profile`,`info_cache`,`Default`,`default_avatar_stroke_color`],desiredColorInt)),safeWriteJson(localStatePath,localState);let prefs=safeReadJson(preferencesPath)??{};setDeep(prefs,[`profile`,`name`],desiredName),setDeep(prefs,[`profile`,`profile_color`],desiredColor),setDeep(prefs,[`profile`,`user_color`],desiredColor),desiredColorInt!=null&&(setDeep(prefs,[`autogenerated`,`theme`,`color`],desiredColorInt),setDeep(prefs,[`browser`,`theme`,`user_color2`],desiredColorInt)),safeWriteJson(preferencesPath,prefs);try{fs.writeFileSync(decoratedMarkerPath(userDataDir),`${Date.now()}\n`,`utf-8`)}catch{}}function ensureProfileCleanExit(userDataDir){let preferencesPath=path.join(userDataDir,`Default`,`Preferences`),prefs=safeReadJson(preferencesPath)??{};setDeep(prefs,[`exit_type`],`Normal`),setDeep(prefs,[`exited_cleanly`],!0),safeWriteJson(preferencesPath,prefs)}const log=createSubsystemLogger(`browser`).child(`chrome`);function exists(filePath){try{return fs.existsSync(filePath)}catch{return!1}}function resolveBrowserExecutable(resolved){return resolveBrowserExecutableForPlatform(resolved,process.platform)}function resolveBuilderForceAgentsUserDataDir(profileName=DEFAULT_BUILDERFORCE_AGENTS_BROWSER_PROFILE_NAME){return path.join(CONFIG_DIR,`browser`,profileName,`user-data`)}function cdpUrlForPort(cdpPort){return`http://127.0.0.1:${cdpPort}`}async function isChromeReachable(cdpUrl,timeoutMs=500){return!!await fetchChromeVersion(cdpUrl,timeoutMs)}async function fetchChromeVersion(cdpUrl,timeoutMs=500){let ctrl=new AbortController,t=setTimeout(ctrl.abort.bind(ctrl),timeoutMs);try{let versionUrl=appendCdpPath(cdpUrl,`/json/version`),res=await fetch(versionUrl,{signal:ctrl.signal,headers:getHeadersWithAuth(versionUrl)});if(!res.ok)return null;let data=await res.json();return!data||typeof data!=`object`?null:data}catch{return null}finally{clearTimeout(t)}}async function getChromeWebSocketUrl(cdpUrl,timeoutMs=500){let version=await fetchChromeVersion(cdpUrl,timeoutMs),wsUrl=String(version?.webSocketDebuggerUrl??``).trim();return wsUrl?normalizeCdpWsUrl(wsUrl,cdpUrl):null}async function canOpenWebSocket(wsUrl,timeoutMs=800){return await new Promise(resolve=>{let headers=getHeadersWithAuth(wsUrl),ws=new WebSocket$1(wsUrl,{handshakeTimeout:timeoutMs,...Object.keys(headers).length?{headers}:{}}),timer=setTimeout(()=>{try{ws.terminate()}catch{}resolve(!1)},Math.max(50,timeoutMs+25));ws.once(`open`,()=>{clearTimeout(timer);try{ws.close()}catch{}resolve(!0)}),ws.once(`error`,()=>{clearTimeout(timer),resolve(!1)})})}async function isChromeCdpReady(cdpUrl,timeoutMs=500,handshakeTimeoutMs=800){let wsUrl=await getChromeWebSocketUrl(cdpUrl,timeoutMs);return wsUrl?await canOpenWebSocket(wsUrl,handshakeTimeoutMs):!1}async function launchBuilderForceAgentsChrome(resolved,profile){if(!profile.cdpIsLoopback)throw Error(`Profile "${profile.name}" is remote; cannot launch local Chrome.`);await ensurePortAvailable(profile.cdpPort);let exe=resolveBrowserExecutable(resolved);if(!exe)throw Error(`No supported browser found (Chrome/Brave/Edge/Chromium on macOS, Linux, or Windows).`);let userDataDir=resolveBuilderForceAgentsUserDataDir(profile.name);fs.mkdirSync(userDataDir,{recursive:!0});let needsDecorate=!isProfileDecorated(userDataDir,profile.name,(profile.color??DEFAULT_BUILDERFORCE_AGENTS_BROWSER_COLOR).toUpperCase()),spawnOnce=()=>{let args=[`--remote-debugging-port=${profile.cdpPort}`,`--user-data-dir=${userDataDir}`,`--no-first-run`,`--no-default-browser-check`,`--disable-sync`,`--disable-background-networking`,`--disable-component-update`,`--disable-features=Translate,MediaRouter`,`--disable-session-crashed-bubble`,`--hide-crash-restore-bubble`,`--password-store=basic`];return resolved.headless&&(args.push(`--headless=new`),args.push(`--disable-gpu`)),resolved.noSandbox&&(args.push(`--no-sandbox`),args.push(`--disable-setuid-sandbox`)),process.platform===`linux`&&args.push(`--disable-dev-shm-usage`),args.push(`--disable-blink-features=AutomationControlled`),resolved.extraArgs.length>0&&args.push(...resolved.extraArgs),args.push(`about:blank`),spawn(exe.path,args,{stdio:`pipe`,env:{...process.env,HOME:os.homedir()}})},startedAt=Date.now(),localStatePath=path.join(userDataDir,`Local State`),preferencesPath=path.join(userDataDir,`Default`,`Preferences`);if(!exists(localStatePath)||!exists(preferencesPath)){let bootstrap=spawnOnce(),deadline=Date.now()+1e4;for(;Date.now()<deadline&&!(exists(localStatePath)&&exists(preferencesPath));)await new Promise(r=>setTimeout(r,100));try{bootstrap.kill(`SIGTERM`)}catch{}let exitDeadline=Date.now()+5e3;for(;Date.now()<exitDeadline&&bootstrap.exitCode==null;)await new Promise(r=>setTimeout(r,50))}if(needsDecorate)try{decorateBuilderForceAgentsProfile(userDataDir,{name:profile.name,color:profile.color}),log.info(`🤖 builderforce browser profile decorated (${profile.color})`)}catch(err){log.warn(`builderforce browser profile decoration failed: ${String(err)}`)}try{ensureProfileCleanExit(userDataDir)}catch(err){log.warn(`builderforce browser clean-exit prefs failed: ${String(err)}`)}let proc=spawnOnce(),readyDeadline=Date.now()+15e3;for(;Date.now()<readyDeadline&&!await isChromeReachable(profile.cdpUrl,500);)await new Promise(r=>setTimeout(r,200));if(!await isChromeReachable(profile.cdpUrl,500)){try{proc.kill(`SIGKILL`)}catch{}throw Error(`Failed to start Chrome CDP on port ${profile.cdpPort} for profile "${profile.name}".`)}let pid=proc.pid??-1;return log.info(`🤖 builderforce browser started (${exe.kind}) profile "${profile.name}" on 127.0.0.1:${profile.cdpPort} (pid ${pid})`),{pid,exe,userDataDir,cdpPort:profile.cdpPort,startedAt,proc}}async function stopBuilderForceAgentsChrome(running,timeoutMs=2500){let proc=running.proc;if(proc.killed)return;try{proc.kill(`SIGTERM`)}catch{}let start=Date.now();for(;Date.now()-start<timeoutMs&&!(!proc.exitCode&&proc.killed);){if(!await isChromeReachable(cdpUrlForPort(running.cdpPort),200))return;await new Promise(r=>setTimeout(r,100))}try{proc.kill(`SIGKILL`)}catch{}}export{DEFAULT_BUILDERFORCE_AGENTS_BROWSER_COLOR as A,pickPrimaryLanIPv4 as C,DEFAULT_AI_SNAPSHOT_MAX_CHARS as D,DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS as E,DEFAULT_BUILDERFORCE_AGENTS_BROWSER_PROFILE_NAME as M,DEFAULT_BROWSER_DEFAULT_PROFILE_NAME as O,isLoopbackHost as S,DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH as T,withCdpSocket as _,resolveBuilderForceAgentsUserDataDir as a,rawDataToString as b,captureScreenshot as c,normalizeCdpWsUrl as d,snapshotAria as f,getHeadersWithAuth as g,fetchOk as h,launchBuilderForceAgentsChrome as i,DEFAULT_BUILDERFORCE_AGENTS_BROWSER_ENABLED as j,DEFAULT_BROWSER_EVALUATE_ENABLED as k,createTargetViaCdp as l,fetchJson as m,isChromeCdpReady as n,stopBuilderForceAgentsChrome as o,appendCdpPath as p,isChromeReachable as r,resolveBrowserExecutableForPlatform as s,getChromeWebSocketUrl as t,formatAriaSnapshot as u,ensureChromeExtensionRelayServer as v,pickPrimaryTailnetIPv4 as w,resolvePreferredBuilderForceAgentsTmpDir as x,stopChromeExtensionRelayServer as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-C1VbcUOm.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./model-discovery-C9Xm95uL.js";import"./model-catalog-CiiFJX77.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./skills-status-CGlKz1D1.js";import"./refresh-C4vwneXT.js";import"./client-CGgp3zkQ.js";import"./call-DmAU4cRX.js";import"./message-channel-z5YRpR2d.js";import"./subagent-registry-CyGxu3kP.js";import"./sessions-Bl1wwotX.js";import"./project-context-store-CIUcwUP_.js";import"./tokens-CFKkpUIu.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./send-BvroeIQ6.js";import"./send-CceNWtYE.js";import"./with-timeout-T07SJo4N.js";import"./deliver-BuZu68tp.js";import"./accounts-Cx82nj4E.js";import"./send-ByCVQQVz.js";import"./image-ops-CotJhwRR.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./embedded-helpers-DK8_apW0.js";import"./sandbox-z9t_PRf9.js";import"./chrome-BnEbJV3D.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-owOmmyUM.js";import"./routes-lclJHOYY.js";import"./paths-BnOjueoX.js";import"./ssrf-DJXLYZ0d.js";import"./store-DHD2IEgd.js";import"./ports-DTku9NSx.js";import"./trash-C3zmJ_O7.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./tool-images-CCpqFtrL.js";import"./workspace-waBqRxiy.js";import"./reply-prefix-Cg7AqaK0.js";import"./sqlite-CIGM1WKg.js";import"./memory-cli-ivAs7q7v.js";import"./manager-CRba8roB.js";import"./gemini-auth-CkD5jCPh.js";import"./retry-B151Hej5.js";import"./common-BfwMxpLu.js";import"./runner-DwWmciCt.js";import"./tool-display-Cs4hDP1f.js";import"./chunk-Dly7lM4r.js";import"./markdown-tables-B1Rx8hv6.js";import"./fetch-guard-DnXqPKae.js";import"./fetch-Cn_THzz8.js";import"./ir-CSdQJPqu.js";import"./render-DlHYsbvQ.js";import"./builderforcellm-syscheck-CprBhARf.js";import"./session-utils-GMvum00v.js";import"./coding-tools.policy-NEPm7Mz1.js";import"./pairing-store-QDb6lhIU.js";import"./fetch-DnWD6ydH.js";import"./exec-approvals-D7ZPAZpt.js";import"./nodes-screen-D6GHv_S0.js";import"./session-cost-usage-S0nkbPoW.js";import"./usage-format-5sp5AMSu.js";import"./provider-usage-Bn4ZrnU7.js";import"./send-B_1BtyfA.js";import"./outbound-attachment-BaTYE4qp.js";import"./delivery-queue-Cp3t4Upn.js";import"./project-context-D3Mx4maV.js";import"./control-service-CJuuqNOE.js";import"./stagger-CRe77dWL.js";import"./channel-selection-BLwXhb9t.js";import"./send-UFtylOiq.js";import"./resolve-route-DEIW5uKy.js";import"./channel-activity-DX36RadH.js";import"./tables-CojSfTth.js";import"./links-BKzP7VVP.js";import"./cli-utils-C9pW69LF.js";import"./help-format-CfFf-w62.js";import"./progress-Cqb-jAjT.js";import"./replies-DbkT_5BV.js";import"./onboard-helpers-CckrS8_K.js";import"./prompt-style-BMWmaqSC.js";import"./pairing-labels-3j_iRYOO.js";import"./active-listener-Di9e1YAD.js";import"./mamba-state-engine-CV4nDcCk.js";import"./transformers-stream-Buj40qHl.js";import"./catalog-li4bSIE2.js";import"./note-DgDXuE0F.js";import"./clack-prompter-B52CP7eY.js";import"./helpers-DPPVplyk.js";import"./plugin-auto-enable-BV9K9Vhr.js";import"./install-safe-path-ObPl6zIf.js";import"./npm-registry-spec-BV1VDmuN.js";import"./skill-scanner-DEmbPsRh.js";import"./installs-CWd54ARy.js";import"./onboard-channels-B6QDFkkK.js";import"./daemon-runtime-B4UjqdyJ.js";import"./runtime-guard-Bi8k55v9.js";import"./systemd-DdVd5Yet.js";import"./service-EKJG69M3.js";import"./widearea-dns-DvQozd9v.js";import"./bonjour-discovery-CViQz7cm.js";import"./health-DVo8a9yg.js";import"./control-ui-assets-BxgWcomx.js";import"./skills-install-DMHQRpIl.js";import"./shared-xj-xaKFi.js";import"./onboard-auth.credentials-yagR-VMG.js";import"./auth-token-CoQ5ePPl.js";import"./logging-ayt7F7vy.js";import"./provider-auth-helpers-CJTG_tVx.js";import"./auth-choice.apply-CcatXiNo.js";import"./openai-model-default-BMRrqTmH.js";import"./model-picker-swoSwauV.js";import"./auth-choice.apply.transformers-1plI0MUg.js";import"./auth-choice-BoZFVmEa.js";import{n as configureCommandFromSectionsArg}from"./configure-3W9C5LiT.js";import"./systemd-linger-CPKngdUf.js";import"./onboard-custom-D1nd8Hlu.js";import"./health-format-D4MaIjaG.js";import"./onboard-remote-D5lR2lVm.js";import"./onboard-skills-BPlNN_-T.js";export{configureCommandFromSectionsArg};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./embedded-helpers-CEsr3aQ0.js";import"./reply-Cd3vVnD7.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-9bRFKBI_.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-3R_ZyUxB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-_1Ca6jGb.js";import"./runner-SxCr9kXD.js";import"./model-catalog-C6UrZ0uG.js";import"./sandbox-BZibn6PX.js";import"./chrome-a3X9_-nf.js";import"./tailscale-DLkpGquM.js";import"./auth-lebUHrkd.js";import"./server-context-DJZT7Upf.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./routes-BzfLvF8W.js";import"./redact-BHdfp2MZ.js";import"./errors-B1MIg3g-.js";import"./paths-cR8ct-Y3.js";import"./ssrf-p9k-iapc.js";import"./image-ops-C8IUQKjn.js";import"./store-CmHBQ-yX.js";import"./ports-DgmEDNOm.js";import"./trash-DD2Hc5oq.js";import"./sessions-CdanN_ZI.js";import"./message-channel-D_jXxXQj.js";import"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./accounts-rmXEiebi.js";import"./accounts-BLueHgKj.js";import"./bindings-DR59065T.js";import"./send-DerUBvXW.js";import"./send-DyF1Xy9K.js";import"./paths-DJ6rztqJ.js";import"./tool-images-B7b_OiMz.js";import"./tool-display-ByOZtWvA.js";import"./fetch-guard-8mwt3-hm.js";import"./api-key-rotation-CHBjUwUJ.js";import"./fetch-BuOLY9KP.js";import"./sqlite-C39E12XS.js";import"./tokens-CCU3zO-D.js";import"./project-context-store-wcq7lXuI.js";import"./with-timeout-Bwq-GyUQ.js";import"./deliver-BpLm3ktn.js";import"./send-CBBziNqM.js";import"./workspace-D4LK4thI.js";import"./reply-prefix-zIMgi6K6.js";import"./memory-cli-DRz4wtHk.js";import"./manager-DwywI_5-.js";import"./retry-DlVhg5qu.js";import"./client-xfoidwPI.js";import"./call-BbRf8gFM.js";import"./common-BTbIhLyt.js";import"./chunk-FCBlVOyo.js";import"./markdown-tables-P6uoUSFa.js";import"./ir-5BNoIXZm.js";import"./render-D1dVTEB1.js";import"./builderforcellm-syscheck-DrFJ638L.js";import"./send-4d9NswaD.js";import"./outbound-attachment-C7wByQO5.js";import"./fetch-DnVtDecb.js";import"./delivery-queue-CXKynF1P.js";import"./channel-activity-CCNDbdD3.js";import"./tables-ERcoWFDp.js";import"./pairing-store-CbvMJhD3.js";import"./links-BgWWaaOT.js";import"./cli-utils-LBYKdNFb.js";import"./help-format-Qfk2vDNX.js";import"./progress-BfOtdN6b.js";import"./resolve-route-D49haUnv.js";import"./replies-Bd2RPZwQ.js";import"./refresh-TiC_kLgE.js";import"./coding-tools.policy-6qh9acJy.js";import"./send-BJDzwYJN.js";import"./onboard-helpers-Cf5dNq7-.js";import"./prompt-style-BpVK43GK.js";import"./pairing-labels-BW5jQZlr.js";import"./session-cost-usage-BjH7mxVj.js";import"./usage-format-DGf8ZWPH.js";import"./provider-usage-BdrU4cIE.js";import"./active-listener-Dcg19lJG.js";import"./exec-approvals-BpVPDVtV.js";import"./nodes-screen-C3TDIi8d.js";import"./project-context-CJj0Inz-.js";import"./control-service-BbsswoMy.js";import"./stagger-8EkqkqJv.js";import"./channel-selection-DyAvzlY8.js";import"./mamba-state-engine-CoGqoBTH.js";import"./transformers-stream-D7nRu4Qu.js";import"./runtime-guard-DhksRHci.js";import"./catalog-rgiY__UQ.js";import"./skills-status-vWC0PU8J.js";import"./note-B6NtFdXt.js";import"./clack-prompter-Dg23_riR.js";import"./helpers-DTDCy17p.js";import"./plugin-auto-enable-DDry2fA6.js";import"./install-safe-path-DsLq2BUJ.js";import"./npm-registry-spec-DIW6RsGN.js";import"./skill-scanner-U3AJgjqc.js";import"./installs-C9A8QFiF.js";import"./onboard-channels-C8FCFn29.js";import"./daemon-runtime-CtOr1ncS.js";import"./systemd-BG3_QT6W.js";import"./service-D-NLDyK3.js";import"./widearea-dns-CZR56vQb.js";import"./bonjour-discovery-Dq1G1iS-.js";import"./health-yS3NRKvY.js";import"./control-ui-assets-CWgH1Tda.js";import"./skills-install-Btw_GHbI.js";import"./shared-BPN3qd7G.js";import"./onboard-auth.credentials-BuT-etnE.js";import"./auth-token-CyVfNEQb.js";import"./logging-DHa3jQN3.js";import"./provider-auth-helpers-BpTnp2Yr.js";import"./auth-choice.apply-BHLQeym9.js";import"./openai-model-default-Cp3nf21W.js";import"./model-picker-BUePD7Zg.js";import"./auth-choice.apply.transformers-CIn3fs7K.js";import"./auth-choice-9gZuOvPS.js";import{n as configureCommandFromSectionsArg}from"./configure-BtXQW7ue.js";import"./systemd-linger-CT-VHPB3.js";import"./onboard-custom-C_BI0ZXn.js";import"./health-format-iE_KYEwP.js";import"./onboard-remote-BmSyHww1.js";import"./onboard-skills-CI1OtWsE.js";export{configureCommandFromSectionsArg};
|
package/dist/health-GLcAfqDz.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-C1VbcUOm.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./model-discovery-C9Xm95uL.js";import"./model-catalog-CiiFJX77.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./refresh-C4vwneXT.js";import"./client-CGgp3zkQ.js";import"./call-DmAU4cRX.js";import"./message-channel-z5YRpR2d.js";import"./subagent-registry-CyGxu3kP.js";import"./sessions-Bl1wwotX.js";import"./project-context-store-CIUcwUP_.js";import"./tokens-CFKkpUIu.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./send-BvroeIQ6.js";import"./send-CceNWtYE.js";import"./with-timeout-T07SJo4N.js";import"./deliver-BuZu68tp.js";import"./accounts-Cx82nj4E.js";import"./send-ByCVQQVz.js";import"./image-ops-CotJhwRR.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./embedded-helpers-DK8_apW0.js";import"./sandbox-z9t_PRf9.js";import"./chrome-BnEbJV3D.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-owOmmyUM.js";import"./routes-lclJHOYY.js";import"./paths-BnOjueoX.js";import"./ssrf-DJXLYZ0d.js";import"./store-DHD2IEgd.js";import"./ports-DTku9NSx.js";import"./trash-C3zmJ_O7.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./tool-images-CCpqFtrL.js";import"./workspace-waBqRxiy.js";import"./reply-prefix-Cg7AqaK0.js";import"./sqlite-CIGM1WKg.js";import"./memory-cli-ivAs7q7v.js";import"./manager-CRba8roB.js";import"./gemini-auth-CkD5jCPh.js";import"./retry-B151Hej5.js";import"./common-BfwMxpLu.js";import"./runner-DwWmciCt.js";import"./tool-display-Cs4hDP1f.js";import"./chunk-Dly7lM4r.js";import"./markdown-tables-B1Rx8hv6.js";import"./fetch-guard-DnXqPKae.js";import"./fetch-Cn_THzz8.js";import"./ir-CSdQJPqu.js";import"./render-DlHYsbvQ.js";import"./builderforcellm-syscheck-CprBhARf.js";import"./session-utils-GMvum00v.js";import"./coding-tools.policy-NEPm7Mz1.js";import"./pairing-store-QDb6lhIU.js";import"./fetch-DnWD6ydH.js";import"./exec-approvals-D7ZPAZpt.js";import"./nodes-screen-D6GHv_S0.js";import"./session-cost-usage-S0nkbPoW.js";import"./usage-format-5sp5AMSu.js";import"./provider-usage-Bn4ZrnU7.js";import"./send-B_1BtyfA.js";import"./outbound-attachment-BaTYE4qp.js";import"./delivery-queue-Cp3t4Upn.js";import"./project-context-D3Mx4maV.js";import"./control-service-CJuuqNOE.js";import"./stagger-CRe77dWL.js";import"./channel-selection-BLwXhb9t.js";import"./send-UFtylOiq.js";import"./resolve-route-DEIW5uKy.js";import"./channel-activity-DX36RadH.js";import"./tables-CojSfTth.js";import"./links-BKzP7VVP.js";import"./cli-utils-C9pW69LF.js";import"./help-format-CfFf-w62.js";import"./progress-Cqb-jAjT.js";import"./replies-DbkT_5BV.js";import"./onboard-helpers-CckrS8_K.js";import"./prompt-style-BMWmaqSC.js";import"./pairing-labels-3j_iRYOO.js";import"./active-listener-Di9e1YAD.js";import"./mamba-state-engine-CV4nDcCk.js";import"./transformers-stream-Buj40qHl.js";import"./helpers-DPPVplyk.js";import{r as healthCommand}from"./health-DVo8a9yg.js";export{healthCommand};
|
package/dist/login-CPyEf5h6.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-C1VbcUOm.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./accounts-BkTLjSrD.js";import"./session-4FpEJvkE.js";import{t as loginWeb}from"./login-CEnjUo5c.js";export{loginWeb};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-C1VbcUOm.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./model-discovery-C9Xm95uL.js";import{n as invalidateModelCatalogCache}from"./model-catalog-CiiFJX77.js";export{invalidateModelCatalogCache};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-C1VbcUOm.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./model-discovery-C9Xm95uL.js";import"./model-catalog-CiiFJX77.js";import"./shared-xj-xaKFi.js";import{i as promptDefaultModel,r as applyPrimaryModel}from"./model-picker-swoSwauV.js";export{applyPrimaryModel,promptDefaultModel};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-9bRFKBI_.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-3R_ZyUxB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-_1Ca6jGb.js";import"./model-catalog-C6UrZ0uG.js";import"./shared-BPN3qd7G.js";import{i as promptDefaultModel,r as applyPrimaryModel}from"./model-picker-BUePD7Zg.js";export{applyPrimaryModel,promptDefaultModel};
|