@seanhogg/builderforce-agents 2026.10.9 → 2026.10.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{acp-cli-DcKpPsJa.js → acp-cli-C23mmrQt.js} +1 -1
- package/dist/{acp-cli-BxH-eUDl.js → acp-cli-D6F-D5JB.js} +1 -1
- package/dist/{agent-cXF-aL0g.js → agent-B-2r1Lr_.js} +1 -1
- package/dist/{agent-wJmvciTM.js → agent-BI9qSnSp.js} +1 -1
- package/dist/{agentbot-cli-Cub3Abbt.js → agentbot-cli-Cyrhr5jX.js} +1 -1
- package/dist/{agentbot-cli-CTRvEfBp.js → agentbot-cli-sC55m-XS.js} +1 -1
- package/dist/{agents-Cr7WO73I.js → agents-CMThT_Bj.js} +1 -1
- package/dist/agents-Chz9nfm2.js +1 -0
- package/dist/{api-key-rotation-CHBjUwUJ.js → api-key-rotation-CyCi-UqR.js} +1 -1
- package/dist/{audio-preflight-CWFuqbao.js → audio-preflight-B411b2-y.js} +1 -1
- package/dist/{audio-preflight-F2e3Y4CW.js → audio-preflight-Cs4eUjQk.js} +1 -1
- package/dist/{audit-DGnEhZYe.js → audit-B-USV03V.js} +1 -1
- package/dist/{audit-DBjjjW93.js → audit-SKNPS-K2.js} +1 -1
- package/dist/auth-choice-CChsMy-F.js +1 -0
- package/dist/{auth-choice-9gZuOvPS.js → auth-choice-CCib_yVL.js} +1 -1
- package/dist/auth-choice-DSnpkrMc.js +1 -0
- package/dist/{auth-choice-BoZFVmEa.js → auth-choice-DzBqqq7i.js} +1 -1
- package/dist/auth-choice.apply-6f3Jb_lS.js +1 -0
- package/dist/{auth-choice.apply-CcatXiNo.js → auth-choice.apply-BgOXoS8X.js} +1 -1
- package/dist/{auth-choice.apply-BHLQeym9.js → auth-choice.apply-DBuvopiF.js} +1 -1
- package/dist/auth-choice.apply-DeXnLwVS.js +1 -0
- package/dist/auth-choice.apply.transformers-CZDuBaOr.js +1 -0
- package/dist/{auth-choice.apply.transformers-CIn3fs7K.js → auth-choice.apply.transformers-Df9l_jRz.js} +2 -2
- package/dist/{auth-choice.apply.transformers-1plI0MUg.js → auth-choice.apply.transformers-DmdxpHGz.js} +2 -2
- package/dist/{auth-choice.apply.transformers-D5OrjEHo.js → auth-choice.apply.transformers-dn7l6XyJ.js} +1 -1
- package/dist/{auth-json-D1ite-pW.js → auth-json-BB-VBn5E.js} +1 -1
- package/dist/{auth-json-CN3MWw57.js → auth-json-BVyos95N.js} +1 -1
- package/dist/{auth-json-HGu227VM.js → auth-json-CoOe4tEg.js} +1 -1
- package/dist/{auth-json-DZ7E50Y1.js → auth-json-wrKixZxh.js} +1 -1
- package/dist/{auth-profiles-C1VbcUOm.js → auth-profiles-pt7Tr4HA.js} +1 -1
- package/dist/{auth-token-CyVfNEQb.js → auth-token-BE67qxLw.js} +1 -1
- package/dist/{auth-token-CoQ5ePPl.js → auth-token-BPHeoBAW.js} +1 -1
- package/dist/{banner-DY-L7_eI.js → banner-ErBINvbk.js} +1 -1
- package/dist/{browser-cli-D2O94twn.js → browser-cli-BZc64-Xx.js} +1 -1
- package/dist/{browser-cli-CoRx_4iM.js → browser-cli-CoxVKdon.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/{builderforce-BmrsVdFw.js → builderforce-B9187Tm9.js} +4 -4
- package/dist/{builderforce-Bwyw0GJ6.js → builderforce-BLqHwgeu.js} +4 -4
- package/dist/builderforce-api-DKgXl8BH.js +1 -0
- package/dist/builderforce-api-DcPAGsla.js +1 -0
- package/dist/builderforce-onboarding-CaPJZSvw.js +24 -0
- package/dist/builderforce-onboarding-RXFb0gct.js +24 -0
- package/dist/{builderforcellm-syscheck-CprBhARf.js → builderforcellm-syscheck-9ksvqHYX.js} +1 -1
- package/dist/{builderforcellm-syscheck-DrFJ638L.js → builderforcellm-syscheck-F5JMAr3p.js} +1 -1
- package/dist/{call-DxPWzV-k.js → call-BnAs_SER.js} +1 -1
- package/dist/{call-DFjBq0H2.js → call-D1Opj5ev.js} +1 -1
- package/dist/{call-DmAU4cRX.js → call-Du2LiaX6.js} +1 -1
- package/dist/{call-BbRf8gFM.js → call-T8ciwMTA.js} +1 -1
- package/dist/{channel-options-d4EwVQD0.js → channel-options-B7sRMp2v.js} +1 -1
- package/dist/{channel-options-CDixz6dT.js → channel-options-rhDBCtlp.js} +1 -1
- package/dist/{channel-web-DJa8JC9W.js → channel-web-CcCqUQrJ.js} +1 -1
- package/dist/{channels-cli-BgKy0MbE.js → channels-cli-BjnLW14T.js} +1 -1
- package/dist/{channels-cli-nNW0ezPM.js → channels-cli-DVWUBsmc.js} +1 -1
- package/dist/{chrome-BnEbJV3D.js → chrome-CFmcixaE.js} +1 -1
- package/dist/{chrome-a3X9_-nf.js → chrome-DXt86tmV.js} +1 -1
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-DkWt7p2x.js → cli-BUqtALJK.js} +1 -1
- package/dist/{cli-C5MbcECQ.js → cli-K4reS6IS.js} +1 -1
- package/dist/{coding-tools.policy-NEPm7Mz1.js → coding-tools.policy-D9Ba8eDh.js} +1 -1
- package/dist/{coding-tools.policy-6qh9acJy.js → coding-tools.policy-ZhOdlcEI.js} +1 -1
- package/dist/{command-registry-COUcUWby.js → command-registry-B7uAoROP.js} +1 -1
- package/dist/{command-registry-4_K-lfW5.js → command-registry-CW16Mk2Y.js} +1 -1
- package/dist/{completion-cli-DlvHqL86.js → completion-cli-ZvXrCQqk.js} +1 -1
- package/dist/{completion-cli-B2qcVd6q.js → completion-cli-gyvx5ZXu.js} +1 -1
- package/dist/{completion-cli-DpFvU4Qn.js → completion-cli-n8UsdT91.js} +1 -1
- package/dist/{completion-cli-SdcQ-kQj.js → completion-cli-sKReGv3d.js} +1 -1
- package/dist/{config-_1Ca6jGb.js → config-BgV_FYSq.js} +1 -1
- package/dist/{config-toczWD3q.js → config-BpChMIJ6.js} +1 -1
- package/dist/{config-BTWlKwtB.js → config-D01EgOky.js} +1 -1
- package/dist/{config-27_FNba3.js → config-Dsnbi-a3.js} +1 -1
- package/dist/{config-cli-DeiQz5sY.js → config-cli-Bpo74mE5.js} +1 -1
- package/dist/{config-cli-CfczShaZ.js → config-cli-CF31O_5s.js} +1 -1
- package/dist/{config-guard-CD-Wq8kk.js → config-guard-BRUOk5YL.js} +1 -1
- package/dist/{config-guard-ClVl2FvD.js → config-guard-BUpQiSTW.js} +1 -1
- package/dist/{config-guard-B4in8l8I.js → config-guard-USCN-dq0.js} +1 -1
- package/dist/{config-validation-jpeXzoU3.js → config-validation-BGpSeNbh.js} +1 -1
- package/dist/{config-validation-C6u-z9bJ.js → config-validation-CdBJ-tZq.js} +1 -1
- package/dist/{configure-3W9C5LiT.js → configure-CWr61Ph2.js} +1 -1
- package/dist/configure-DhazB2qh.js +1 -0
- package/dist/{configure-BtXQW7ue.js → configure-DlcO1tWx.js} +1 -1
- package/dist/configure-MXheujvX.js +1 -0
- package/dist/{control-service-CJuuqNOE.js → control-service-2PkCt256.js} +1 -1
- package/dist/{control-service-qKfWP7VD.js → control-service-CcsbseZS.js} +1 -1
- package/dist/{control-service-izGyCWQs.js → control-service-qK1oboMo.js} +1 -1
- package/dist/{control-service-BbsswoMy.js → control-service-y3GYvIBg.js} +1 -1
- package/dist/{cron-cli-BrOM4s6N.js → cron-cli-BYu_lA8i.js} +1 -1
- package/dist/{cron-cli-CwtTX6pg.js → cron-cli-D_Og20iB.js} +1 -1
- package/dist/{daemon-cli-DyVsMf8p.js → daemon-cli-BNzthScZ.js} +1 -1
- package/dist/{daemon-cli-DlwOVDbt.js → daemon-cli-Bh3p0hui.js} +1 -1
- package/dist/{daemon-cli-Br0wu9xQ.js → daemon-cli-DxxKiKVN.js} +1 -1
- package/dist/{daemon-cli-DmicpZED.js → daemon-cli-emNxLkIw.js} +1 -1
- package/dist/{daemon-runtime-CtOr1ncS.js → daemon-runtime-9XitJmIL.js} +1 -1
- package/dist/{daemon-runtime-B4UjqdyJ.js → daemon-runtime-Dx800VUt.js} +1 -1
- package/dist/{deliver-BpLm3ktn.js → deliver--6OBF3LL.js} +1 -1
- package/dist/{deliver-9o_SE4ZK.js → deliver-ADpnRGRf.js} +1 -1
- package/dist/{deliver-D2VAVelb.js → deliver-BM6-damm.js} +1 -1
- package/dist/{deliver-BuZu68tp.js → deliver-CsG0cHbZ.js} +1 -1
- package/dist/{deps-CkJiJ6wc.js → deps-Dg_9rfXK.js} +1 -1
- package/dist/{devices-cli-BfXeDnbx.js → devices-cli-B8DXzcRP.js} +1 -1
- package/dist/{devices-cli-B9G6YOsS.js → devices-cli-BZkdWSx-.js} +1 -1
- package/dist/{directory-cli-BRCaiGOn.js → directory-cli-B78pAVI_.js} +1 -1
- package/dist/{directory-cli-D5ciZ5fY.js → directory-cli-CSaRkkL8.js} +1 -1
- package/dist/{dm-policy-shared-CRZpjRv0.js → dm-policy-shared-B9lW-AsK.js} +1 -1
- package/dist/{dm-policy-shared-Dhw9_6mi.js → dm-policy-shared-DYZ_T-az.js} +1 -1
- package/dist/{dns-cli-CgZ7oMcT.js → dns-cli-CLPGOFA1.js} +1 -1
- package/dist/{dns-cli-C4f4Tyij.js → dns-cli-dr5dHzfI.js} +1 -1
- package/dist/{doctor-completion-BSotFS6p.js → doctor-completion-94zme499.js} +1 -1
- package/dist/{doctor-completion-DVxbs-74.js → doctor-completion-CbF34DIH.js} +1 -1
- package/dist/{embedded-helpers-CEsr3aQ0.js → embedded-helpers-C9jpiwlw.js} +1 -1
- package/dist/{embedded-helpers-DK8_apW0.js → embedded-helpers-DdU30lmt.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/{exec-approvals-cli-YuOu7mVg.js → exec-approvals-cli-CS_uabo7.js} +1 -1
- package/dist/{exec-approvals-cli-BPFi82B0.js → exec-approvals-cli-ktB7M7WE.js} +1 -1
- package/dist/{gateway-cli-D2Bg1Um6.js → gateway-cli-CKcoLVMA.js} +5 -5
- package/dist/{gateway-cli-DFEo8C0z.js → gateway-cli-CuXBDBWe.js} +5 -5
- package/dist/{gateway-rpc-BXR_lVIx.js → gateway-rpc-B02y0PnE.js} +1 -1
- package/dist/{gateway-rpc-ByUcnQ7W.js → gateway-rpc-ff1RVb0_.js} +1 -1
- package/dist/{gemini-auth-CkD5jCPh.js → gemini-auth-DDR12zst.js} +1 -1
- package/dist/health-D0DZmCmh.js +1 -0
- package/dist/{health-yS3NRKvY.js → health-FO8MG5Ur.js} +1 -1
- package/dist/{health-DVo8a9yg.js → health-zrsgFZmR.js} +1 -1
- package/dist/{hooks-cli-B0lVee-j.js → hooks-cli-5Y4hnSX9.js} +1 -1
- package/dist/{hooks-cli-DsVmrQAG.js → hooks-cli-DpHZzRo2.js} +1 -1
- package/dist/index.js +2 -2
- package/dist/{ink-session-BitZ1wcY.js → ink-session-Dt9Q4iH-.js} +2 -2
- package/dist/{ink-session-CyAqXDla.js → ink-session-N8wCBzwk.js} +2 -2
- package/dist/{installs-CWd54ARy.js → installs-B_t2YXgq.js} +1 -1
- package/dist/{installs-C9A8QFiF.js → installs-DFiF4lGy.js} +1 -1
- package/dist/{io-3R_ZyUxB.js → io-BLBq4T2o.js} +1 -1
- package/dist/{io-DSIGyPrT.js → io-CXN4uLS2.js} +1 -1
- package/dist/{io-6jLoKffb.js → io-Ckd4NlvH.js} +1 -1
- package/dist/{io-CohJffHG.js → io-D9hC2aG0.js} +1 -1
- package/dist/{lifecycle-core-BpMvDXy1.js → lifecycle-core-D9Dg5Qps.js} +1 -1
- package/dist/{lifecycle-core-Dwb4gHjZ.js → lifecycle-core-uxjxTzFv.js} +1 -1
- package/dist/login-B3sDAgHb.js +1 -0
- package/dist/{login-C_ZdMOvv.js → login-CwwuaXtb.js} +1 -1
- package/dist/{login-DtDUyFO3.js → login-D1bVUPlv.js} +1 -1
- package/dist/{login-CEnjUo5c.js → login-GLDax56V.js} +1 -1
- package/dist/{login-qr-B9lyIZVD.js → login-qr-CbiUcBLy.js} +1 -1
- package/dist/{login-qr-BCBsxwhT.js → login-qr-Cp0YqK4e.js} +1 -1
- package/dist/{logs-cli-CdM5W3HE.js → logs-cli-Cy11HfSG.js} +1 -1
- package/dist/{logs-cli-jh5Xn3TD.js → logs-cli-nD36c-Y1.js} +1 -1
- package/dist/{manager-CRba8roB.js → manager-BeohB4-8.js} +1 -1
- package/dist/{manager-B3IJ_IKf.js → manager-CTTXDBt3.js} +1 -1
- package/dist/{manager-TGVy_fAb.js → manager-CoQMlcrf.js} +1 -1
- package/dist/{manager-DwywI_5-.js → manager-DSz61dXv.js} +1 -1
- package/dist/{memory-cli-BlayFTAM.js → memory-cli-BpAiRntI.js} +1 -1
- package/dist/{memory-cli-DRz4wtHk.js → memory-cli-CbkWGjRn.js} +1 -1
- package/dist/{memory-cli-PdyTQ84w.js → memory-cli-CrBMLM2P.js} +1 -1
- package/dist/{memory-cli-ivAs7q7v.js → memory-cli-CveeVOWH.js} +1 -1
- package/dist/{model-catalog-CQOdhMUY.js → model-catalog-B29yeBYS.js} +1 -1
- package/dist/{model-catalog-CiiFJX77.js → model-catalog-BeBXvbFm.js} +1 -1
- package/dist/model-catalog-CMKHKuBL.js +1 -0
- package/dist/{model-catalog-C6UrZ0uG.js → model-catalog-DjNiebr7.js} +1 -1
- package/dist/{model-discovery-C9Xm95uL.js → model-discovery-D0i1JpiL.js} +1 -1
- package/dist/{model-picker-swoSwauV.js → model-picker-CGDNPRPc.js} +1 -1
- package/dist/model-picker-CGEF8yhc.js +1 -0
- package/dist/model-picker-DeUNOC78.js +1 -0
- package/dist/{model-picker-BUePD7Zg.js → model-picker-EIhpfOZa.js} +1 -1
- package/dist/{model-selection-9bRFKBI_.js → model-selection-DG9J_VTz.js} +1 -1
- package/dist/{models-BNivsd2o.js → models-BjIzVQYX.js} +2 -2
- package/dist/{models-DQeSIY6M.js → models-JoqOgEF5.js} +1 -1
- package/dist/{models-cli-KokGgWeP.js → models-cli-B2zbchgs.js} +1 -1
- package/dist/{models-cli-BcNxU4P_.js → models-cli-CkFdc8NN.js} +2 -2
- package/dist/{node-cli-DIMh3X2F.js → node-cli-CXnuxiBq.js} +1 -1
- package/dist/{node-cli-EmTU-Gh0.js → node-cli-oVyjVnb7.js} +1 -1
- package/dist/{nodes-cli-BX8TznFK.js → nodes-cli-BBVotxNt.js} +1 -1
- package/dist/{nodes-cli-DyHovdAc.js → nodes-cli-DVMBSUhK.js} +1 -1
- package/dist/{onboard-DfMVh1bM.js → onboard-BItclJp0.js} +1 -1
- package/dist/{onboard-BVmZ4jMw.js → onboard-CqvHIvKj.js} +1 -1
- package/dist/{onboard-auth.credentials-yagR-VMG.js → onboard-auth.credentials-DneFSdYg.js} +1 -1
- package/dist/{onboard-auth.credentials-BuT-etnE.js → onboard-auth.credentials-DpitLlzw.js} +1 -1
- package/dist/onboard-channels-B91m5S3w.js +1 -0
- package/dist/onboard-channels-BOoPtYbF.js +1 -0
- package/dist/{onboard-channels-B6QDFkkK.js → onboard-channels-Dn0u5C-C.js} +1 -1
- package/dist/{onboard-channels-C8FCFn29.js → onboard-channels-vhtccaIV.js} +1 -1
- package/dist/onboard-custom-BN0uzSq_.js +1 -0
- package/dist/{onboard-custom-D1nd8Hlu.js → onboard-custom-BYIza2e7.js} +1 -1
- package/dist/onboard-custom-CCFthqto.js +1 -0
- package/dist/{onboard-custom-C_BI0ZXn.js → onboard-custom-Ckf0xKXY.js} +1 -1
- package/dist/{onboard-helpers-CGlLpagb.js → onboard-helpers-B8I5AVyb.js} +1 -1
- package/dist/{onboard-helpers-CckrS8_K.js → onboard-helpers-Ce_c4Raj.js} +1 -1
- package/dist/{onboard-helpers-Cf5dNq7-.js → onboard-helpers-CiHzTaFX.js} +1 -1
- package/dist/{onboard-helpers-BvIZ4-R5.js → onboard-helpers-DC-nMl-V.js} +1 -1
- package/dist/{onboard-interactive-DYJttZ2w.js → onboard-interactive-Cl2K3EYn.js} +1 -1
- package/dist/{onboard-interactive-zgjmwJz-.js → onboard-interactive-JNux9zfA.js} +1 -1
- package/dist/{onboard-interactive-B3-KBZbZ.js → onboard-interactive-J_ObFzeW.js} +1 -1
- package/dist/{onboard-interactive-Dc_7URYb.js → onboard-interactive-OUNsvlh0.js} +1 -1
- package/dist/{onboard-remote-D5lR2lVm.js → onboard-remote-0-q7MG9t.js} +1 -1
- package/dist/{onboard-remote-BmSyHww1.js → onboard-remote-CgAAEZpq.js} +1 -1
- package/dist/{onboard-remote-CzzQMZ3X.js → onboard-remote-DKXHDdBD.js} +1 -1
- package/dist/{onboard-remote-DcuX8b2g.js → onboard-remote-cB8j9RG-.js} +1 -1
- package/dist/{onboard-skills-ILHIeg1R.js → onboard-skills-47upVdA2.js} +1 -1
- package/dist/{onboard-skills-BPlNN_-T.js → onboard-skills-9Um4TL2x.js} +1 -1
- package/dist/{onboard-skills-DIhjDMom.js → onboard-skills-DhCmvhJY.js} +1 -1
- package/dist/{onboard-skills-CI1OtWsE.js → onboard-skills-mI2kfvdT.js} +1 -1
- package/dist/{onboarding-D4-HDbmU.js → onboarding-BSENgR9C.js} +5 -5
- package/dist/{onboarding-CP9rrz8y.js → onboarding-CIaZLNc1.js} +5 -5
- package/dist/{onboarding.finalize-C2kZi7F0.js → onboarding.finalize-BwOpvoPE.js} +1 -1
- package/dist/{onboarding.finalize-BfWXPgX7.js → onboarding.finalize-yMK-g7Uy.js} +1 -1
- package/dist/{onboarding.gateway-config-Cd7_bXVs.js → onboarding.gateway-config-Kn1O-QFl.js} +1 -1
- package/dist/{onboarding.gateway-config-Bd8HJkso.js → onboarding.gateway-config-huOjFf8D.js} +1 -1
- package/dist/{openai-model-default-Cp3nf21W.js → openai-model-default-CH2-2Hvk.js} +1 -1
- package/dist/{openai-model-default-BMRrqTmH.js → openai-model-default-pfoEzWYJ.js} +1 -1
- package/dist/{outbound-BRInCJD9.js → outbound-BdeHcMAo.js} +1 -1
- package/dist/{outbound-CAtBpFoD.js → outbound-BylJYD7n.js} +1 -1
- package/dist/{outbound-OI-t5zZ0.js → outbound-CAirtWr1.js} +1 -1
- package/dist/{outbound-CnIvOJlU.js → outbound-VNcvF2MG.js} +1 -1
- package/dist/{outbound-send-deps-m6DqOma_.js → outbound-send-deps-B3Lg-uqF.js} +1 -1
- package/dist/{pairing-cli-CEr0yEsc.js → pairing-cli-5RtPvz2i.js} +1 -1
- package/dist/{pairing-cli-Dxfoni-F.js → pairing-cli-C_Mj6Dy4.js} +1 -1
- package/dist/{pairing-labels-3j_iRYOO.js → pairing-labels-BJPrScRl.js} +1 -1
- package/dist/{pairing-labels-BW5jQZlr.js → pairing-labels-oA-nKTaW.js} +1 -1
- package/dist/{pairing-store-QDb6lhIU.js → pairing-store-YRy7EBgI.js} +1 -1
- package/dist/{pairing-store-CbvMJhD3.js → pairing-store-ti3FEkmr.js} +1 -1
- package/dist/{plugin-auto-enable-BV9K9Vhr.js → plugin-auto-enable-Cupr4wbt.js} +1 -1
- package/dist/{plugin-auto-enable-DDry2fA6.js → plugin-auto-enable-D8gKiE3F.js} +1 -1
- package/dist/plugin-registry-BEfyc2f_.js +1 -0
- package/dist/{plugin-registry-C-_GA65s.js → plugin-registry-BoPaef5I.js} +1 -1
- package/dist/{plugin-registry-SAdxNUwm.js → plugin-registry-CxnuHO_n.js} +1 -1
- package/dist/plugin-registry-D0tIqo8L.js +1 -0
- package/dist/plugin-sdk/{accounts-Cy3WCbWg.js → accounts-BwreSNAR.js} +1 -1
- package/dist/plugin-sdk/{active-listener-DVWVNlT9.js → active-listener-DpQ7aGYd.js} +1 -1
- package/dist/plugin-sdk/agent-runtime/src/infra/workflow-telemetry.d.ts +12 -1
- package/dist/plugin-sdk/{agent-scope-DgKN27hJ.js → agent-scope-BQByW0cD.js} +1 -1
- package/dist/plugin-sdk/{api-key-rotation-ftXf7mBZ.js → api-key-rotation-7YdImWrh.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-CfTmmeS-.js → audio-preflight-EbkaATDO.js} +1 -1
- package/dist/plugin-sdk/{auth-json-BrNBg87n.js → auth-json-DK6qod1_.js} +1 -1
- package/dist/plugin-sdk/{bindings-CH-YLOLC.js → bindings-CDEzl4kl.js} +1 -1
- package/dist/plugin-sdk/{channel-web-B6rg0Rbf.js → channel-web-D2KuONp0.js} +1 -1
- package/dist/plugin-sdk/{chrome-CuXP-hes.js → chrome-SOXFIkUM.js} +1 -1
- package/dist/plugin-sdk/{chunk-C94IAOuf.js → chunk-cW0POl22.js} +1 -1
- package/dist/plugin-sdk/{command-format-B3XMq_73.js → command-format-CAX9XFjI.js} +1 -1
- package/dist/plugin-sdk/{common-n0l_XN-S.js → common-BxEWhN2X.js} +1 -1
- package/dist/plugin-sdk/{config-DsXZsCkJ.js → config-v1EU9Ll8.js} +2 -2
- package/dist/plugin-sdk/{fetch-B-GxSYRO.js → fetch-DH0Y8iyO.js} +1 -1
- package/dist/plugin-sdk/index.js +1 -1
- package/dist/plugin-sdk/{login-_my8QwPP.js → login-d1zBgykF.js} +1 -1
- package/dist/plugin-sdk/{login-qr-BaePtXuG.js → login-qr-B6exvQnN.js} +1 -1
- package/dist/plugin-sdk/{manager-BsC-4ymy.js → manager-BH_bmGds.js} +1 -1
- package/dist/plugin-sdk/{markdown-tables-BUfhHgfs.js → markdown-tables-Epim9b-0.js} +1 -1
- package/dist/plugin-sdk/{message-channel-CuZ2xOAM.js → message-channel-sBPQc_-T.js} +1 -1
- package/dist/plugin-sdk/{model-catalog-yuiXVcmw.js → model-catalog-cXsza5GU.js} +1 -1
- package/dist/plugin-sdk/{model-selection-BtgvnqB5.js → model-selection-K82MAGlL.js} +1 -1
- package/dist/plugin-sdk/{outbound-D_attiyO.js → outbound-Chn_H1O7.js} +1 -1
- package/dist/plugin-sdk/{plugins-BdkC9v5E.js → plugins-CaUOZBVb.js} +1 -1
- package/dist/plugin-sdk/{pw-ai-A7Rathx6.js → pw-ai-BIiJF7ZD.js} +1 -1
- package/dist/plugin-sdk/{qmd-manager-Dxn0jCpE.js → qmd-manager-BRe5fGZw.js} +1 -1
- package/dist/plugin-sdk/{registry-CZHRcH-q.js → registry-DJq2Cvo9.js} +1 -1
- package/dist/plugin-sdk/{render-CuA_WRX5.js → render-BUCRXPIk.js} +1 -1
- package/dist/plugin-sdk/{replies-DmLfO-pg.js → replies-Cz5OD3qN.js} +1 -1
- package/dist/plugin-sdk/{reply-3-ne-N_7.js → reply-D5Uk7pUv.js} +9 -9
- package/dist/plugin-sdk/{reply-prefix-w7kAvH11.js → reply-prefix-CCymsmsP.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-0sbvl4ZN.js → resolve-route-DN1J7Wyc.js} +1 -1
- package/dist/plugin-sdk/{runner-4UfrAQnx.js → runner-CYkuO7Fh.js} +4 -4
- package/dist/plugin-sdk/{session-BB-yfDWx.js → session-D5jHDo78.js} +1 -1
- package/dist/plugin-sdk/{sqlite-JjFgDV-H.js → sqlite-BlMLqMl8.js} +1 -1
- package/dist/plugin-sdk/{subsystem-D0Ril4rt.js → subsystem-COTa5Ly_.js} +1 -1
- package/dist/plugin-sdk/{tool-images-WRTP95FT.js → tool-images-DSpchb4x.js} +1 -1
- package/dist/plugin-sdk/{tool-loop-detection-sC_rhJfb.js → tool-loop-detection-BP6u-mbh.js} +1 -1
- package/dist/plugin-sdk/web-BbganhKi.js +1 -0
- package/dist/plugin-sdk/{whatsapp-actions-ThxQ5niy.js → whatsapp-actions-CZUqxmP1.js} +1 -1
- package/dist/{plugins-BIG8NDB9.js → plugins-Cx29kkDj.js} +1 -1
- package/dist/{plugins-iAq-Gr8l.js → plugins-DJqou2hi.js} +1 -1
- package/dist/{plugins-cli-CpaVUv_r.js → plugins-cli-Bu-A8aGy.js} +1 -1
- package/dist/{plugins-cli-CPkSgvdL.js → plugins-cli-CGFsQDVW.js} +1 -1
- package/dist/{program-context-BCwL3wlM.js → program-context-ClBa4lUj.js} +1 -1
- package/dist/{program-2w7Ue902.js → program-vVCzU0cH.js} +2 -2
- package/dist/{prompt-select-styled-hB_nLOn1.js → prompt-select-styled-BJPGccTJ.js} +1 -1
- package/dist/{prompt-select-styled-Dd5swW2b.js → prompt-select-styled-BK74z6FF.js} +1 -1
- package/dist/{provider-auth-helpers-BpTnp2Yr.js → provider-auth-helpers-B84m5VMc.js} +1 -1
- package/dist/{provider-auth-helpers-CJTG_tVx.js → provider-auth-helpers-hNwpK_hl.js} +1 -1
- package/dist/{provider-dispatcher-TWwBT2aH.js → provider-dispatcher-BjR5DE3O.js} +1 -1
- package/dist/provider-dispatcher-DgOeVjcL.js +1 -0
- package/dist/{provider-usage-BdrU4cIE.js → provider-usage-B-wPVN_j.js} +1 -1
- package/dist/{provider-usage-Bn4ZrnU7.js → provider-usage-B8lFHp0K.js} +1 -1
- package/dist/{push-apns-C4sJnHbO.js → push-apns-BTPPvY81.js} +1 -1
- package/dist/{push-apns-CiD3rrVv.js → push-apns-CscYUS0D.js} +1 -1
- package/dist/{pw-ai-DSEj1QrV.js → pw-ai-CLS_VZ8p.js} +1 -1
- package/dist/{pw-ai-dNZY-qBs.js → pw-ai-D5og_rIf.js} +1 -1
- package/dist/{qr-cli-qr-SFLZW.js → qr-cli-CAquM1Zk.js} +1 -1
- package/dist/{qr-cli-B45dCV0o.js → qr-cli-GsR8n1cm.js} +1 -1
- package/dist/{qr-cli-CMlAIzrD.js → qr-cli-kAKgaL-T.js} +1 -1
- package/dist/{qr-cli-CySNSEFj.js → qr-cli-uyxNf-cQ.js} +1 -1
- package/dist/{register.agent-BA6LIJSb.js → register.agent-BwTCfyeJ.js} +1 -1
- package/dist/{register.agent-D2uCH8jZ.js → register.agent-Dhdo3_7k.js} +1 -1
- package/dist/register.configure-B0m0G3ot.js +1 -0
- package/dist/register.configure-D3cbjmTz.js +1 -0
- package/dist/{register.maintenance-BELfCO_C.js → register.maintenance-C6ocMld2.js} +1 -1
- package/dist/{register.maintenance-DukWFS_D.js → register.maintenance-CbE2zSyc.js} +1 -1
- package/dist/{register.message-DiZRRAE5.js → register.message-Jn4u533_.js} +1 -1
- package/dist/{register.message-8iGDhO8h.js → register.message-Tu1hlM0m.js} +1 -1
- package/dist/{register.onboard-B9DMNfHE.js → register.onboard-B34211N6.js} +1 -1
- package/dist/{register.onboard-Dt7rzAq-.js → register.onboard-S1d2WAE4.js} +1 -1
- package/dist/{register.setup-CSF-2ImP.js → register.setup-CJPyAwCQ.js} +1 -1
- package/dist/{register.setup-BRRVPrx7.js → register.setup-Sg8f3nsH.js} +1 -1
- package/dist/{register.status-health-sessions-D6wdwPwV.js → register.status-health-sessions-BlgVxoZ4.js} +1 -1
- package/dist/{register.status-health-sessions-ZSufYw5j.js → register.status-health-sessions-DwADQJ74.js} +1 -1
- package/dist/{register.subclis-4eDV9jKH.js → register.subclis-C9V_M-Lk.js} +1 -1
- package/dist/{register.subclis-Cr9DoYcv.js → register.subclis-pWn9XObB.js} +1 -1
- package/dist/{replies-DbkT_5BV.js → replies-BOGMDhSN.js} +1 -1
- package/dist/{replies-CzV-RFUG.js → replies-BXbV02ik.js} +1 -1
- package/dist/{replies-DIBQzxGp.js → replies-CUv671JF.js} +1 -1
- package/dist/{replies-Bd2RPZwQ.js → replies-DokbEfJD.js} +1 -1
- package/dist/{reply-Cd3vVnD7.js → reply-GY1C8tcv.js} +10 -10
- package/dist/{routes-BzfLvF8W.js → routes-DZntyPY6.js} +1 -1
- package/dist/{routes-lclJHOYY.js → routes-_iZdG1Fo.js} +1 -1
- package/dist/{rpc-BLqXRn5R.js → rpc-CbUnwStf.js} +1 -1
- package/dist/{rpc-DcQNGQlj.js → rpc-Cwm4gchc.js} +1 -1
- package/dist/{run-main-DLcDEJgv.js → run-main-DQMbgbcF.js} +1 -1
- package/dist/{runner-DwWmciCt.js → runner-Cu9NJouV.js} +1 -1
- package/dist/{runner-SxCr9kXD.js → runner-eTTUbLAK.js} +1 -1
- package/dist/{sandbox-BZibn6PX.js → sandbox-C4AKi2EX.js} +1 -1
- package/dist/{sandbox-z9t_PRf9.js → sandbox-DvKMuAXL.js} +1 -1
- package/dist/{sandbox-cli-BtGs0dBR.js → sandbox-cli-C0LhzYq_.js} +1 -1
- package/dist/{sandbox-cli-B8FpLgyY.js → sandbox-cli-De0iaoHB.js} +1 -1
- package/dist/{security-cli-D8Q8I7fn.js → security-cli-BvEfiO8m.js} +1 -1
- package/dist/{security-cli-IIMR7Pb4.js → security-cli-BzsQ0XQh.js} +1 -1
- package/dist/{send-DnMzjS7L.js → send-2dRKMWtl.js} +1 -1
- package/dist/{send-DerUBvXW.js → send-Aw8wK3vK.js} +1 -1
- package/dist/{send-BvroeIQ6.js → send-B7H8Ae5j.js} +1 -1
- package/dist/{send-4d9NswaD.js → send-BP5osGBo.js} +1 -1
- package/dist/{send-BU_-BGmf.js → send-BVal50Bi.js} +1 -1
- package/dist/{send-CxG2suVM.js → send-Bbo7TXLx.js} +1 -1
- package/dist/{send-CBBziNqM.js → send-BxoVLIy1.js} +1 -1
- package/dist/{send-dDpSBSBo.js → send-COKUbcqs.js} +1 -1
- package/dist/{send--12DIueA.js → send-CTw3PqN4.js} +1 -1
- package/dist/{send-UFtylOiq.js → send-CYGOPcKq.js} +1 -1
- package/dist/{send-DyF1Xy9K.js → send-ChGpVO3O.js} +1 -1
- package/dist/{send-Q-uTkSFE.js → send-Cqea2UFo.js} +1 -1
- package/dist/{send-j15662lv.js → send-CrFWgJKx.js} +1 -1
- package/dist/{send-gDb60Hk-.js → send-CwK8QBR3.js} +1 -1
- package/dist/{send-CceNWtYE.js → send-DqR7Rxzm.js} +1 -1
- package/dist/{send-CJHXQvVl.js → send-DxwfUIN-.js} +1 -1
- package/dist/{send-ByCVQQVz.js → send-KgN1P41U.js} +1 -1
- package/dist/{send-B1rJLLpr.js → send-bNp87SIq.js} +1 -1
- package/dist/{send-B_1BtyfA.js → send-kkm_zrHQ.js} +1 -1
- package/dist/{send-BJDzwYJN.js → send-l3ge4wkC.js} +1 -1
- package/dist/{server-context-DJZT7Upf.js → server-context-CQ2v4BAx.js} +1 -1
- package/dist/{server-context-owOmmyUM.js → server-context-CttALzrW.js} +1 -1
- package/dist/{server-node-events-54d8Rmjl.js → server-node-events-CIMO6Vae.js} +1 -1
- package/dist/{server-node-events-CSFVqgxX.js → server-node-events-iCF2ngcN.js} +1 -1
- package/dist/{session-BzQdcCqN.js → session-BJHsjD3z.js} +1 -1
- package/dist/{session-4FpEJvkE.js → session-C_b1ttHJ.js} +1 -1
- package/dist/{session-dirs-OxQuIvJW.js → session-dirs-Bvbgw0GC.js} +1 -1
- package/dist/{session-dirs-D_ARkyw0.js → session-dirs-DHaoq7zc.js} +1 -1
- package/dist/{session-utils-GMvum00v.js → session-utils-Dxou8SbO.js} +1 -1
- package/dist/{sessions-Bl1wwotX.js → sessions-BA8Se_bT.js} +1 -1
- package/dist/{sessions-CdanN_ZI.js → sessions-BuZVmOWt.js} +1 -1
- package/dist/{sessions-B5dwRhUC.js → sessions-DvbW0FNJ.js} +1 -1
- package/dist/{sessions-B1t7qeEn.js → sessions-DvqsIg0M.js} +1 -1
- package/dist/{shared-xj-xaKFi.js → shared-BBOiNdjf.js} +1 -1
- package/dist/{shared-BPN3qd7G.js → shared-C2orjbTD.js} +1 -1
- package/dist/{skill-scanner-U3AJgjqc.js → skill-scanner-BEvov9QH.js} +1 -1
- package/dist/{skill-scanner-DEmbPsRh.js → skill-scanner-OTLeRZ_p.js} +1 -1
- package/dist/{skills-cli-CIdnXa3B.js → skills-cli-C1BOgB3y.js} +1 -1
- package/dist/{skills-cli-BXbGr7vl.js → skills-cli-CFT2Aq5R.js} +1 -1
- package/dist/{skills-install-Btw_GHbI.js → skills-install-LlKntDHa.js} +1 -1
- package/dist/{skills-install-DMHQRpIl.js → skills-install-tx5Mahav.js} +1 -1
- package/dist/{status-DXaDS_0w.js → status-Bh8V7kjv.js} +1 -1
- package/dist/{status-BxeKmkVr.js → status-BtBHmhQh.js} +1 -1
- package/dist/{status-BkcmeZg6.js → status-CpwD4y9B.js} +1 -1
- package/dist/status-CqaTmyih.js +1 -0
- package/dist/{status-DouJcFzf.js → status-yXz8PUbL.js} +1 -1
- package/dist/{status.update-C9iy31xr.js → status.update-CdgsLBPg.js} +1 -1
- package/dist/{status.update-KYyRSDZY.js → status.update-hzMro-BT.js} +1 -1
- package/dist/{subagent-registry-Dr20nzwk.js → subagent-registry-CaRUNwCj.js} +1 -1
- package/dist/{subagent-registry-CyGxu3kP.js → subagent-registry-DDEN4oJi.js} +10 -10
- package/dist/{subagent-registry-BiXkIDeh.js → subagent-registry-DYYfeIc3.js} +1 -1
- package/dist/{system-cli-b4YgXPHv.js → system-cli-4aii1JYf.js} +1 -1
- package/dist/{system-cli-C7YzJeP4.js → system-cli-CfkDD3FV.js} +1 -1
- package/dist/{tui-DylWbrDx.js → tui-DnVRxfI8.js} +2 -2
- package/dist/{tui-BwWMByVp.js → tui-JfWoLGIV.js} +2 -2
- package/dist/{tui-cli-C_TTgabr.js → tui-cli-CGjg2Eb5.js} +1 -1
- package/dist/{tui-cli-Bh1V8-w9.js → tui-cli-cd7Efw5u.js} +1 -1
- package/dist/{tui-setup-check-DJZCJokQ.js → tui-setup-check-BEHm9wwo.js} +1 -1
- package/dist/{tui-setup-check-BABAyl-e.js → tui-setup-check-DK8vdhLI.js} +1 -1
- package/dist/{tui-stream-assembler-ign_cPkv.js → tui-stream-assembler-8ud9oyMK.js} +1 -1
- package/dist/{tui-stream-assembler-q9GANTDr.js → tui-stream-assembler-Br15rhRH.js} +1 -1
- package/dist/{update-BUzcmoDf.js → update-B5yKFeGO.js} +1 -1
- package/dist/{update-D6U-V8Au.js → update-DodoQDCk.js} +1 -1
- package/dist/{update-cli-DUrUIrYQ.js → update-cli-CfJJcSUS.js} +1 -1
- package/dist/{update-cli-CA3LuuJ7.js → update-cli-x8Ocbf-0.js} +1 -1
- package/dist/{usage-cli-CfEg1_NZ.js → usage-cli-CN7L1YRG.js} +1 -1
- package/dist/{usage-cli-CpbYMXxS.js → usage-cli-CQmokGkG.js} +1 -1
- package/dist/{web-D-NSyF6b.js → web-BXLk9UT2.js} +1 -1
- package/dist/web-Btgs8oWv.js +1 -0
- package/dist/{webhooks-cli-B_f61rq7.js → webhooks-cli-DIo8p3lk.js} +1 -1
- package/dist/{webhooks-cli-Bi0t3w6P.js → webhooks-cli-DhxEtiFt.js} +1 -1
- package/dist/{whatsapp-actions-JbF2MrTV.js → whatsapp-actions-B7r9AyZN.js} +1 -1
- package/dist/{whatsapp-actions-BkCMhD9X.js → whatsapp-actions-DX2QU6Gs.js} +1 -1
- package/dist/{with-timeout-T07SJo4N.js → with-timeout-B_p5pWDv.js} +1 -1
- package/dist/{with-timeout-Bwq-GyUQ.js → with-timeout-GDLpcjW7.js} +1 -1
- package/dist/workflow-telemetry-BMTg5lPd.js +1 -0
- package/dist/workflow-telemetry-Bg8MVUr_.js +2 -0
- package/dist/workflow-telemetry-Do1UsYwM.js +1 -0
- package/dist/workflow-telemetry-DqBPhVL4.js +2 -0
- package/package.json +1 -1
- package/dist/agents-DsZ5vLKE.js +0 -1
- package/dist/auth-choice-Btd2Rxxd.js +0 -1
- package/dist/auth-choice-CVV9wRFN.js +0 -1
- package/dist/auth-choice.apply-BOK9XRCQ.js +0 -1
- package/dist/auth-choice.apply-Cv-BiV5Q.js +0 -1
- package/dist/auth-choice.apply.transformers-CXywS3GZ.js +0 -1
- package/dist/builderforce-onboarding-Dq6VUSKZ.js +0 -24
- package/dist/builderforce-onboarding-DuUfZ6oL.js +0 -24
- package/dist/configure-CWBBFk3F.js +0 -1
- package/dist/configure-fHVOAucW.js +0 -1
- package/dist/health-GLcAfqDz.js +0 -1
- package/dist/login-CPyEf5h6.js +0 -1
- package/dist/model-catalog-J7R-tJDu.js +0 -1
- package/dist/model-picker-D2bcWrtu.js +0 -1
- package/dist/model-picker-DO1HtEEm.js +0 -1
- package/dist/onboard-channels-CmqKsAoW.js +0 -1
- package/dist/onboard-channels-Db0P4iWl.js +0 -1
- package/dist/onboard-custom-BABqIYa4.js +0 -1
- package/dist/onboard-custom-VpW3UC8u.js +0 -1
- package/dist/plugin-registry-B-UOeWqM.js +0 -1
- package/dist/plugin-registry-BjMr3yXM.js +0 -1
- package/dist/plugin-sdk/web-CThgoHQp.js +0 -1
- package/dist/provider-dispatcher-C4nHaNqn.js +0 -1
- package/dist/register.configure-DAL38e7r.js +0 -1
- package/dist/register.configure-DZG7-WVi.js +0 -1
- package/dist/status-BTYqHVha.js +0 -1
- package/dist/web-P6QsgmSD.js +0 -1
- package/dist/workflow-telemetry-B8Im0mPk.js +0 -1
- package/dist/workflow-telemetry-DLEnm5TI.js +0 -2
- package/dist/workflow-telemetry-Dc_oseV7.js +0 -2
- package/dist/workflow-telemetry-Dkm3mofI.js +0 -1
- /package/dist/{devtools-CI7JyCXv.js → devtools-Cg4F-l9O.js} +0 -0
- /package/dist/{devtools-eMFaIsAT.js → devtools-Dl2DACSO.js} +0 -0
- /package/dist/{github-copilot-token-D3gHtNUu.js → github-copilot-token-BlyiXyTy.js} +0 -0
- /package/dist/{github-copilot-token-DHP2kAiN.js → github-copilot-token-D5sB2AUI.js} +0 -0
- /package/dist/{onboard-hooks-Cenav0eW.js → onboard-hooks-BaOSgxs9.js} +0 -0
- /package/dist/{onboard-hooks-Ce20rwpW.js → onboard-hooks-fO5eeDe_.js} +0 -0
- /package/dist/{qmd-manager-DVd_aWEV.js → qmd-manager-BgplOjHN.js} +0 -0
- /package/dist/{qmd-manager-keHvLmvP.js → qmd-manager-COUi_Fqb.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./embedded-helpers-
|
|
1
|
+
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./embedded-helpers-C9jpiwlw.js";import{Bn as isSubagentSessionRunActive,Ln as countActiveDescendantRuns,qn as resolveRequesterForChildSession}from"./reply-GY1C8tcv.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"./runner-eTTUbLAK.js";import"./model-catalog-DjNiebr7.js";import"./sandbox-C4AKi2EX.js";import"./chrome-DXt86tmV.js";import"./tailscale-DLkpGquM.js";import"./auth-lebUHrkd.js";import"./server-context-CQ2v4BAx.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./routes-DZntyPY6.js";import"./redact-BHdfp2MZ.js";import"./errors-B1MIg3g-.js";import"./paths-cR8ct-Y3.js";import"./ssrf-p9k-iapc.js";import"./image-ops-C8IUQKjn.js";import"./store-CmHBQ-yX.js";import"./ports-DgmEDNOm.js";import"./trash-DD2Hc5oq.js";import"./sessions-BuZVmOWt.js";import"./message-channel-D_jXxXQj.js";import"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./accounts-rmXEiebi.js";import"./accounts-BLueHgKj.js";import"./bindings-DR59065T.js";import"./send-Aw8wK3vK.js";import"./send-ChGpVO3O.js";import"./paths-DJ6rztqJ.js";import"./tool-images-B7b_OiMz.js";import"./tool-display-ByOZtWvA.js";import"./fetch-guard-8mwt3-hm.js";import"./api-key-rotation-CyCi-UqR.js";import"./fetch-BuOLY9KP.js";import"./sqlite-C39E12XS.js";import"./tokens-CCU3zO-D.js";import"./project-context-store-wcq7lXuI.js";import"./with-timeout-GDLpcjW7.js";import"./deliver--6OBF3LL.js";import"./send-BxoVLIy1.js";import"./workspace-D4LK4thI.js";import"./reply-prefix-zIMgi6K6.js";import"./memory-cli-CbkWGjRn.js";import"./manager-DSz61dXv.js";import"./retry-DlVhg5qu.js";import"./client-xfoidwPI.js";import"./call-T8ciwMTA.js";import"./common-BTbIhLyt.js";import"./chunk-FCBlVOyo.js";import"./markdown-tables-P6uoUSFa.js";import"./ir-5BNoIXZm.js";import"./render-D1dVTEB1.js";import"./builderforcellm-syscheck-F5JMAr3p.js";import"./send-BP5osGBo.js";import"./outbound-attachment-C7wByQO5.js";import"./fetch-DnVtDecb.js";import"./delivery-queue-CXKynF1P.js";import"./channel-activity-CCNDbdD3.js";import"./tables-ERcoWFDp.js";import"./pairing-store-ti3FEkmr.js";import"./links-BgWWaaOT.js";import"./cli-utils-LBYKdNFb.js";import"./help-format-Qfk2vDNX.js";import"./progress-BfOtdN6b.js";import"./resolve-route-D49haUnv.js";import"./replies-DokbEfJD.js";import"./refresh-TiC_kLgE.js";import"./coding-tools.policy-ZhOdlcEI.js";import"./send-l3ge4wkC.js";import"./onboard-helpers-CiHzTaFX.js";import"./prompt-style-BpVK43GK.js";import"./pairing-labels-oA-nKTaW.js";import"./session-cost-usage-BjH7mxVj.js";import"./usage-format-DGf8ZWPH.js";import"./provider-usage-B-wPVN_j.js";import"./active-listener-Dcg19lJG.js";import"./exec-approvals-BpVPDVtV.js";import"./nodes-screen-C3TDIi8d.js";import"./project-context-CJj0Inz-.js";import"./control-service-y3GYvIBg.js";import"./stagger-8EkqkqJv.js";import"./channel-selection-DyAvzlY8.js";import"./mamba-state-engine-CoGqoBTH.js";import"./transformers-stream-D7nRu4Qu.js";export{countActiveDescendantRuns,isSubagentSessionRunActive,resolveRequesterForChildSession};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import{B as theme,O as danger}from"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-
|
|
1
|
+
import"./paths-5FcIFMsj.js";import{B as theme,O as danger}from"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-DG9J_VTz.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-BLBq4T2o.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BgV_FYSq.js";import"./message-channel-D_jXxXQj.js";import"./client-xfoidwPI.js";import"./call-T8ciwMTA.js";import{t as formatDocsLink}from"./links-BgWWaaOT.js";import"./progress-BfOtdN6b.js";import{n as callGatewayFromCli,t as addGatewayClientOptions}from"./gateway-rpc-B02y0PnE.js";const normalizeWakeMode=raw=>{let mode=typeof raw==`string`?raw.trim():``;if(!mode)return`next-heartbeat`;if(mode===`now`||mode===`next-heartbeat`)return mode;throw Error(`--mode must be now or next-heartbeat`)};function registerSystemCli(program){let system=program.command(`system`).description(`System tools (events, heartbeat, presence)`).addHelpText(`after`,()=>`\n${theme.muted(`Docs:`)} ${formatDocsLink(`/cli/system`,`docs.builderforce.ai/cli/system`)}\n`);addGatewayClientOptions(system.command(`event`).description(`Enqueue a system event and optionally trigger a heartbeat`).requiredOption(`--text <text>`,`System event text`).option(`--mode <mode>`,`Wake mode (now|next-heartbeat)`,`next-heartbeat`).option(`--json`,`Output JSON`,!1)).action(async opts=>{try{let text=typeof opts.text==`string`?opts.text.trim():``;if(!text)throw Error(`--text is required`);let result=await callGatewayFromCli(`wake`,opts,{mode:normalizeWakeMode(opts.mode),text},{expectFinal:!1});opts.json?defaultRuntime.log(JSON.stringify(result,null,2)):defaultRuntime.log(`ok`)}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}});let heartbeat=system.command(`heartbeat`).description(`Heartbeat controls`);addGatewayClientOptions(heartbeat.command(`last`).description(`Show the last heartbeat event`).option(`--json`,`Output JSON`,!1)).action(async opts=>{try{let result=await callGatewayFromCli(`last-heartbeat`,opts,void 0,{expectFinal:!1});defaultRuntime.log(JSON.stringify(result,null,2))}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}}),addGatewayClientOptions(heartbeat.command(`enable`).description(`Enable heartbeats`).option(`--json`,`Output JSON`,!1)).action(async opts=>{try{let result=await callGatewayFromCli(`set-heartbeats`,opts,{enabled:!0},{expectFinal:!1});defaultRuntime.log(JSON.stringify(result,null,2))}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}}),addGatewayClientOptions(heartbeat.command(`disable`).description(`Disable heartbeats`).option(`--json`,`Output JSON`,!1)).action(async opts=>{try{let result=await callGatewayFromCli(`set-heartbeats`,opts,{enabled:!1},{expectFinal:!1});defaultRuntime.log(JSON.stringify(result,null,2))}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}}),addGatewayClientOptions(system.command(`presence`).description(`List system presence entries`).option(`--json`,`Output JSON`,!1)).action(async opts=>{try{let result=await callGatewayFromCli(`system-presence`,opts,void 0,{expectFinal:!1});defaultRuntime.log(JSON.stringify(result,null,2))}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}})}export{registerSystemCli};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{D as danger,z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-
|
|
1
|
+
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{D as danger,z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-pt7Tr4HA.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-D9hC2aG0.js";import"./manifest-registry-009gLJ4l.js";import"./config-BpChMIJ6.js";import"./client-CGgp3zkQ.js";import"./call-Du2LiaX6.js";import"./message-channel-z5YRpR2d.js";import{t as formatDocsLink}from"./links-BKzP7VVP.js";import"./progress-Cqb-jAjT.js";import{n as callGatewayFromCli,t as addGatewayClientOptions}from"./gateway-rpc-ff1RVb0_.js";const normalizeWakeMode=raw=>{let mode=typeof raw==`string`?raw.trim():``;if(!mode)return`next-heartbeat`;if(mode===`now`||mode===`next-heartbeat`)return mode;throw Error(`--mode must be now or next-heartbeat`)};function registerSystemCli(program){let system=program.command(`system`).description(`System tools (events, heartbeat, presence)`).addHelpText(`after`,()=>`\n${theme.muted(`Docs:`)} ${formatDocsLink(`/cli/system`,`docs.builderforce.ai/cli/system`)}\n`);addGatewayClientOptions(system.command(`event`).description(`Enqueue a system event and optionally trigger a heartbeat`).requiredOption(`--text <text>`,`System event text`).option(`--mode <mode>`,`Wake mode (now|next-heartbeat)`,`next-heartbeat`).option(`--json`,`Output JSON`,!1)).action(async opts=>{try{let text=typeof opts.text==`string`?opts.text.trim():``;if(!text)throw Error(`--text is required`);let result=await callGatewayFromCli(`wake`,opts,{mode:normalizeWakeMode(opts.mode),text},{expectFinal:!1});opts.json?defaultRuntime.log(JSON.stringify(result,null,2)):defaultRuntime.log(`ok`)}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}});let heartbeat=system.command(`heartbeat`).description(`Heartbeat controls`);addGatewayClientOptions(heartbeat.command(`last`).description(`Show the last heartbeat event`).option(`--json`,`Output JSON`,!1)).action(async opts=>{try{let result=await callGatewayFromCli(`last-heartbeat`,opts,void 0,{expectFinal:!1});defaultRuntime.log(JSON.stringify(result,null,2))}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}}),addGatewayClientOptions(heartbeat.command(`enable`).description(`Enable heartbeats`).option(`--json`,`Output JSON`,!1)).action(async opts=>{try{let result=await callGatewayFromCli(`set-heartbeats`,opts,{enabled:!0},{expectFinal:!1});defaultRuntime.log(JSON.stringify(result,null,2))}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}}),addGatewayClientOptions(heartbeat.command(`disable`).description(`Disable heartbeats`).option(`--json`,`Output JSON`,!1)).action(async opts=>{try{let result=await callGatewayFromCli(`set-heartbeats`,opts,{enabled:!1},{expectFinal:!1});defaultRuntime.log(JSON.stringify(result,null,2))}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}}),addGatewayClientOptions(system.command(`presence`).description(`List system presence entries`).option(`--json`,`Output JSON`,!1)).action(async opts=>{try{let result=await callGatewayFromCli(`system-presence`,opts,void 0,{expectFinal:!1});defaultRuntime.log(JSON.stringify(result,null,2))}catch(err){defaultRuntime.error(danger(String(err))),defaultRuntime.exit(1)}})}export{registerSystemCli};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{J as resolveResponseUsageMode,K as normalizeUsageDisplay,V as listThinkingLevelLabels,z as formatThinkingLevels}from"./embedded-helpers-
|
|
1
|
+
import{J as resolveResponseUsageMode,K as normalizeUsageDisplay,V as listThinkingLevelLabels,z as formatThinkingLevels}from"./embedded-helpers-C9jpiwlw.js";import{C as parseAgentSessionKey,a as buildAgentMainSessionKey,d as normalizeAgentId,f as normalizeMainKey}from"./session-key-EoB0qaG9.js";import{d as stripAnsi,f as truncateToWidth,p as visibleWidth}from"./subsystem-B3TqcCrZ.js";import{i as logWarn,t as logDebug}from"./logger-Bch0bx9c.js";import{l as resolveDefaultAgentId}from"./agent-scope-DPtjOxzp.js";import{t as normalizeBaseUrl}from"./normalize-base-url-DmugqkQ6.js";import{i as readSharedEnvVar}from"./env-file-D1MDi-AM.js";import{c as writeConfigFile,r as loadConfig}from"./io-BLBq4T2o.js";import{n as resolveToolDisplay,t as formatToolDetail}from"./tool-display-ByOZtWvA.js";import{n as loadProjectContext}from"./project-context-store-wcq7lXuI.js";import{a as buildStagedSummary,d as isStagingActive,f as rejectAllEdits,i as activateStaging,l as getStagedEdits,m as resolveStagedTarget,n as acceptAllEdits,o as buildUnifiedDiff,p as rejectEdit,r as acceptEdit,s as deactivateStaging,t as isModelCached,u as hasStagedEdits,v as listChatCommands,y as listChatCommandsForConfig}from"./builderforcellm-syscheck-F5JMAr3p.js";import{n as formatTimeAgo,t as formatRelativeTimestamp}from"./format-relative-niF9gXss.js";import{n as formatTokenCount}from"./usage-format-DGf8ZWPH.js";import{c as saveSessionHandoff,f as initializeBuilderForceAgentsProject,n as loadWorkspaceState,s as loadLatestSessionHandoff}from"./project-context-CJj0Inz-.js";import{s as downloadBuilderForceAgentsLlmModel}from"./transformers-stream-D7nRu4Qu.js";import{r as syncBuilderForceAgentsDirectoryWithMetaUpdate}from"./builderforce-directory-sync-DAH62b3b.js";import{a as HIPPOCAMPUS_MODEL_ID,c as applyTransformersProviderConfig,i as HIPPOCAMPUS_DTYPE,l as defaultCacheDir,n as AMYGDALA_MODEL_ID,r as BUILDERFORCE_AGENTSLLM_LOCAL_PROVIDER_ID,t as AMYGDALA_DTYPE}from"./auth-choice.apply.transformers-Df9l_jRz.js";import{a as formatContextUsageLine,c as sanitizeRenderableText,i as extractTextFromMessage,n as GatewayChatClient,o as formatTokens,r as asString,s as isCommandMessage,t as TuiStreamAssembler}from"./tui-stream-assembler-8ud9oyMK.js";import{randomUUID}from"node:crypto";import chalk from"chalk";import{spawn}from"node:child_process";import{Box,CombinedAutocompleteProvider,Container,Editor,Input,Key,Loader,Markdown,ProcessTerminal,SelectList,SettingsList,Spacer,TUI,Text,getEditorKeybindings,isKeyRelease,matchesKey}from"@mariozechner/pi-tui";import{highlight,supportsLanguage}from"cli-highlight";const VERBOSE_LEVELS=[`on`,`off`],REASONING_LEVELS=[`on`,`off`],ELEVATED_LEVELS=[`on`,`off`,`ask`,`full`],ACTIVATION_LEVELS=[`mention`,`always`],USAGE_FOOTER_LEVELS=[`off`,`tokens`,`full`],COMMAND_ALIASES={elev:`elevated`,onboard:`setup`,service:`gateway`};function parseCommand(input){let trimmed=input.replace(/^\//,``).trim();if(!trimmed)return{name:``,args:``};let[name,...rest]=trimmed.split(/\s+/),normalized=name.toLowerCase();return{name:COMMAND_ALIASES[normalized]??normalized,args:rest.join(` `).trim()}}function getSlashCommands(options={}){let thinkLevels=listThinkingLevelLabels(options.provider,options.model),commands=[{name:`help`,description:`Show slash command help`},{name:`status`,description:`Show gateway status summary`},{name:`agent`,description:`Switch agent (or open picker)`},{name:`agents`,description:`Open agent picker`},{name:`session`,description:`Switch session (or open picker)`},{name:`sessions`,description:`Open session picker`},{name:`fork`,description:`Clone the current session into a new transcript`},{name:`undo`,description:`Rewind the last conversation turn`},{name:`model`,description:`Set model (or open picker)`},{name:`models`,description:`Open model picker`},{name:`think`,description:`Set thinking level`,getArgumentCompletions:prefix=>thinkLevels.filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`verbose`,description:`Set verbose on/off`,getArgumentCompletions:prefix=>VERBOSE_LEVELS.filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`reasoning`,description:`Set reasoning on/off`,getArgumentCompletions:prefix=>REASONING_LEVELS.filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`usage`,description:`Toggle per-response usage line`,getArgumentCompletions:prefix=>USAGE_FOOTER_LEVELS.filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`elevated`,description:`Set elevated on/off/ask/full`,getArgumentCompletions:prefix=>ELEVATED_LEVELS.filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`elev`,description:`Alias for /elevated`,getArgumentCompletions:prefix=>ELEVATED_LEVELS.filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`activation`,description:`Set group activation`,getArgumentCompletions:prefix=>ACTIVATION_LEVELS.filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`abort`,description:`Abort active run`},{name:`new`,description:`Reset the session`},{name:`reset`,description:`Reset the session`},{name:`settings`,description:`Open settings`},{name:`restart`,description:`Restart gateway locally`},{name:`gateway`,description:`Gateway control (status/start/stop/restart/token <value>)`},{name:`daemon`,description:`Alias for /gateway`},{name:`logs`,description:`Show recent gateway log lines`},{name:`init`,description:`Initialize builderForceAgents project in workspace`},{name:`handoff`,description:`Ask the agent to save a session handoff for the next session`},{name:`exit`,description:`Exit the TUI`},{name:`quit`,description:`Exit the TUI`},{name:`setup`,description:`Run the setup/onboarding wizard`},{name:`onboard`,description:`Alias for /setup`},{name:`localbrain`,description:`Toggle local brain on/off/refresh`,getArgumentCompletions:prefix=>[`on`,`off`,`refresh`].filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`project`,description:`Show project context from .builderForceAgents directory`},{name:`sync`,description:`Force sync .builderForceAgents directory to Builderforce`},{name:`spec`,description:`Run a spec-driven planning workflow (PRD → architecture → tasks)`},{name:`workflow`,description:`Show status of the latest (or a specific) workflow`},{name:`stage`,description:`Toggle staged-edit mode (buffer write/edit for /diff /accept /reject)`,getArgumentCompletions:prefix=>[`on`,`off`,`status`].filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`diff`,description:`Show staged file changes (or a specific file). Use after agent edits.`},{name:`accept`,description:`Apply staged changes to disk. /accept [file] or /accept all`},{name:`reject`,description:`Discard staged changes. /reject [file] or /reject all`}],seen=new Set(commands.map(command=>command.name)),gatewayCommands=options.cfg?listChatCommandsForConfig(options.cfg):listChatCommands();for(let command of gatewayCommands){let aliases=command.textAliases.length>0?command.textAliases:[`/${command.key}`];for(let alias of aliases){let name=alias.replace(/^\//,``).trim();!name||seen.has(name)||(seen.add(name),commands.push({name,description:command.description}))}}return commands}function helpText(options={}){return[`Slash commands:`,`/help`,`/commands`,`/status`,`/agent <id> (or /agents)`,`/session <key> (or /sessions)`,`/fork`,`/undo`,`/model <provider/model> (or /models)`,`/think <${formatThinkingLevels(options.provider,options.model,`|`)}>`,`/verbose <on|off>`,`/reasoning <on|off>`,`/usage <off|tokens|full>`,`/elevated <on|off|ask|full>`,`/elev <on|off|ask|full>`,`/activation <mention|always>`,`/new or /reset`,`/abort`,`/compact [instructions]`,`/settings`,`/restart (restart gateway; works when disconnected)`,`/gateway <status|start|stop|restart|token <value>>`,`/daemon <status|start|stop|restart|token <value>>`,`/logs [count]`,`/init`,`/handoff`,`/project`,`/sync`,`/spec <goal>`,`/workflow [id]`,`/stage [on|off|status]`,`/diff [file]`,`/accept [file|all]`,`/reject [file|all]`,`/exit`,`/localbrain <on|off|refresh>`,`/setup or /onboard`].join(`
|
|
2
2
|
`)}function createSyntaxTheme(fallback){return{keyword:chalk.hex(`#C586C0`),built_in:chalk.hex(`#4EC9B0`),type:chalk.hex(`#4EC9B0`),literal:chalk.hex(`#569CD6`),number:chalk.hex(`#B5CEA8`),string:chalk.hex(`#CE9178`),regexp:chalk.hex(`#D16969`),symbol:chalk.hex(`#B5CEA8`),class:chalk.hex(`#4EC9B0`),function:chalk.hex(`#DCDCAA`),title:chalk.hex(`#DCDCAA`),params:chalk.hex(`#9CDCFE`),comment:chalk.hex(`#6A9955`),doctag:chalk.hex(`#608B4E`),meta:chalk.hex(`#9CDCFE`),"meta-keyword":chalk.hex(`#C586C0`),"meta-string":chalk.hex(`#CE9178`),section:chalk.hex(`#DCDCAA`),tag:chalk.hex(`#569CD6`),name:chalk.hex(`#9CDCFE`),attr:chalk.hex(`#9CDCFE`),attribute:chalk.hex(`#9CDCFE`),variable:chalk.hex(`#9CDCFE`),bullet:chalk.hex(`#D7BA7D`),code:chalk.hex(`#CE9178`),emphasis:chalk.italic,strong:chalk.bold,formula:chalk.hex(`#C586C0`),link:chalk.hex(`#4EC9B0`),quote:chalk.hex(`#6A9955`),addition:chalk.hex(`#B5CEA8`),deletion:chalk.hex(`#F44747`),"selector-tag":chalk.hex(`#D7BA7D`),"selector-id":chalk.hex(`#D7BA7D`),"selector-class":chalk.hex(`#D7BA7D`),"selector-attr":chalk.hex(`#D7BA7D`),"selector-pseudo":chalk.hex(`#D7BA7D`),"template-tag":chalk.hex(`#C586C0`),"template-variable":chalk.hex(`#9CDCFE`),default:fallback}}const palette={text:`#E8E3D5`,dim:`#7B7F87`,accent:`#F6C453`,accentSoft:`#F2A65A`,border:`#3C414B`,userBg:`#2B2F36`,userText:`#F3EEE0`,systemText:`#9BA3B2`,toolPendingBg:`#1F2A2F`,toolSuccessBg:`#1E2D23`,toolErrorBg:`#2F1F1F`,toolTitle:`#F6C453`,toolOutput:`#E1DACB`,quote:`#8CC8FF`,quoteBorder:`#3B4D6B`,code:`#F0C987`,codeBlock:`#1E232A`,codeBorder:`#343A45`,modalBorder:`#4D8DFF`,modalBg:`#171A20`,link:`#7DD3A5`,error:`#F97066`,success:`#7DD3A5`},fg=hex=>text=>chalk.hex(hex)(text),bg=hex=>text=>chalk.bgHex(hex)(text),syntaxTheme=createSyntaxTheme(fg(palette.code));function highlightCode(code,lang){try{return highlight(code,{language:lang&&supportsLanguage(lang)?lang:void 0,theme:syntaxTheme,ignoreIllegals:!0}).split(`
|
|
3
3
|
`)}catch{return code.split(`
|
|
4
4
|
`).map(line=>fg(palette.code)(line))}}const theme={fg:fg(palette.text),assistantText:text=>text,dim:fg(palette.dim),accent:fg(palette.accent),accentSoft:fg(palette.accentSoft),success:fg(palette.success),error:fg(palette.error),header:text=>chalk.bold(fg(palette.accent)(text)),system:fg(palette.systemText),userBg:bg(palette.userBg),userText:fg(palette.userText),toolTitle:fg(palette.toolTitle),toolOutput:fg(palette.toolOutput),toolPendingBg:bg(palette.toolPendingBg),toolSuccessBg:bg(palette.toolSuccessBg),toolErrorBg:bg(palette.toolErrorBg),modalBg:bg(palette.modalBg),border:fg(palette.border),modalBorder:fg(palette.modalBorder),bold:text=>chalk.bold(text),italic:text=>chalk.italic(text)},markdownTheme={heading:text=>chalk.bold(fg(palette.accent)(text)),link:text=>fg(palette.link)(text),linkUrl:text=>chalk.dim(text),code:text=>fg(palette.code)(text),codeBlock:text=>fg(palette.code)(text),codeBlockBorder:text=>fg(palette.codeBorder)(text),quote:text=>fg(palette.quote)(text),quoteBorder:text=>fg(palette.quoteBorder)(text),hr:text=>fg(palette.border)(text),listBullet:text=>fg(palette.accentSoft)(text),bold:text=>chalk.bold(text),italic:text=>chalk.italic(text),strikethrough:text=>chalk.strikethrough(text),underline:text=>chalk.underline(text),highlightCode},baseSelectListTheme={selectedPrefix:text=>fg(palette.accent)(text),selectedText:text=>chalk.bold(fg(palette.accent)(text)),description:text=>fg(palette.dim)(text),scrollInfo:text=>fg(palette.dim)(text),noMatch:text=>fg(palette.dim)(text)},selectListTheme=baseSelectListTheme,filterableSelectListTheme={...baseSelectListTheme,filterLabel:text=>fg(palette.dim)(text)},settingsListTheme={label:(text,selected)=>selected?chalk.bold(fg(palette.accent)(text)):fg(palette.text)(text),value:(text,selected)=>selected?fg(palette.accentSoft)(text):fg(palette.dim)(text),description:text=>fg(palette.systemText)(text),cursor:fg(palette.accent)(`→ `),hint:text=>fg(palette.dim)(text)},editorTheme={borderColor:text=>fg(palette.border)(text),selectList:selectListTheme},searchableSelectListTheme={...baseSelectListTheme,searchPrompt:text=>fg(palette.accentSoft)(text),searchInput:text=>fg(palette.text)(text),matchHighlight:text=>chalk.bold(fg(palette.accent)(text))};var AssistantMessageComponent=class extends Container{constructor(text){super(),this.body=new Markdown(text,1,0,markdownTheme,{color:line=>theme.assistantText(line)}),this.addChild(new Spacer(1)),this.addChild(this.body)}setText(text){this.body.setText(text)}};function formatArgs(toolName,args){let detail=formatToolDetail(resolveToolDisplay({name:toolName,args}));if(detail)return sanitizeRenderableText(detail);if(!args||typeof args!=`object`)return``;try{return sanitizeRenderableText(JSON.stringify(args))}catch{return``}}function extractText(result){if(!result?.content)return``;let lines=[];for(let entry of result.content)if(entry.type===`text`&&entry.text)lines.push(sanitizeRenderableText(entry.text));else if(entry.type===`image`){let mime=entry.mimeType??`image`,size=entry.bytes?` ${Math.round(entry.bytes/1024)}kb`:``,omitted=entry.omitted?` (omitted)`:``;lines.push(`[${mime}${size}${omitted}]`)}return lines.join(`
|
|
@@ -24,4 +24,4 @@ This will re-download the latest local brain models.`);break}if(action===`reset`
|
|
|
24
24
|
`))deps.chatLog.addSystem(`[local] ${line}`);deps.chatLog.addSystem(`[local] exit ${code??`?`}${signal?` (signal ${String(signal)})`:``}`),deps.tui.requestRender(),resolve()}),child.on(`error`,err=>{deps.chatLog.addSystem(`[local] error: ${String(err)}`),deps.tui.requestRender(),resolve()})})}}}var ModalOverlayFrame=class{constructor(inner){this.inner=inner,this._focused=!1}render(width){let innerWidth=Math.max(1,width-2),innerLines=this.inner.render(innerWidth),contentLines=innerLines.length>0?innerLines:[``],top=theme.modalBorder(`┌${`─`.repeat(innerWidth)}┐`),bottom=theme.modalBorder(`└${`─`.repeat(innerWidth)}┘`);return[top,...contentLines.map(line=>{let trimmed=truncateToWidth(line,innerWidth,``),pad=` `.repeat(Math.max(0,innerWidth-visibleWidth(trimmed)));return`${theme.modalBorder(`│`)}${theme.modalBg(`${trimmed}${pad}`)}${theme.modalBorder(`│`)}`}),bottom]}handleInput(data){this.inner.handleInput?.(data)}invalidate(){this.inner.invalidate()}get focused(){return this._focused}set focused(value){this._focused=value;let maybeFocusable=this.inner;typeof maybeFocusable.focused==`boolean`&&(maybeFocusable.focused=value)}};function createOverlayHandlers(host,fallbackFocus){return{openOverlay:component=>{host.showOverlay(new ModalOverlayFrame(component))},closeOverlay:()=>{if(host.hasOverlay()){host.hideOverlay();return}host.setFocus(fallbackFocus)}}}function createSessionActions(context){let{client,chatLog,tui,opts,state,agentNames,initialSessionInput,initialSessionAgentId,resolveSessionKey,updateHeader,updateFooter,updateAutocompleteProvider,setActivityStatus,clearLocalRunIds}=context,refreshSessionInfoPromise=Promise.resolve(),lastSessionDefaults=null,applyAgentsResult=result=>{state.agentDefaultId=normalizeAgentId(result.defaultId),state.sessionMainKey=normalizeMainKey(result.mainKey),state.sessionScope=result.scope??state.sessionScope,state.agents=result.agents.map(agent=>({id:normalizeAgentId(agent.id),name:agent.name?.trim()||void 0})),agentNames.clear();for(let agent of state.agents)agent.name&&agentNames.set(agent.id,agent.name);if(state.initialSessionApplied)state.agents.some(agent=>agent.id===state.currentAgentId)||(state.currentAgentId=state.agents[0]?.id??normalizeAgentId(result.defaultId??state.currentAgentId));else{initialSessionAgentId?state.agents.some(agent=>agent.id===initialSessionAgentId)&&(state.currentAgentId=initialSessionAgentId):state.agents.some(agent=>agent.id===state.currentAgentId)||(state.currentAgentId=state.agents[0]?.id??normalizeAgentId(result.defaultId??state.currentAgentId));let nextSessionKey=resolveSessionKey(initialSessionInput);nextSessionKey!==state.currentSessionKey&&(state.currentSessionKey=nextSessionKey),state.initialSessionApplied=!0}updateHeader(),updateFooter()},refreshAgents=async()=>{try{applyAgentsResult(await client.listAgents())}catch(err){chatLog.addSystem(`agents list failed: ${String(err)}`)}},updateAgentFromSessionKey=key=>{let parsed=parseAgentSessionKey(key);if(!parsed)return;let next=normalizeAgentId(parsed.agentId);next!==state.currentAgentId&&(state.currentAgentId=next)},resolveModelSelection=entry=>{if(entry?.modelProvider||entry?.model)return{modelProvider:entry.modelProvider??state.sessionInfo.modelProvider,model:entry.model??state.sessionInfo.model};let overrideModel=entry?.modelOverride?.trim();return overrideModel?{modelProvider:entry?.providerOverride?.trim()||state.sessionInfo.modelProvider,model:overrideModel}:{modelProvider:state.sessionInfo.modelProvider,model:state.sessionInfo.model}},applySessionInfo=params=>{let entry=params.entry??void 0,defaults=params.defaults??lastSessionDefaults??void 0,previousDefaults=lastSessionDefaults,defaultsChanged=params.defaults?previousDefaults?.model!==params.defaults.model||previousDefaults?.modelProvider!==params.defaults.modelProvider||previousDefaults?.contextTokens!==params.defaults.contextTokens:!1;params.defaults&&(lastSessionDefaults=params.defaults);let entryUpdatedAt=entry?.updatedAt??null,currentUpdatedAt=state.sessionInfo.updatedAt??null,modelChanged=entry?.modelProvider!==void 0&&entry.modelProvider!==state.sessionInfo.modelProvider||entry?.model!==void 0&&entry.model!==state.sessionInfo.model;if(!params.force&&entryUpdatedAt!==null&¤tUpdatedAt!==null&&entryUpdatedAt<currentUpdatedAt&&!defaultsChanged&&!modelChanged)return;let next={...state.sessionInfo};entry?.thinkingLevel!==void 0&&(next.thinkingLevel=entry.thinkingLevel),entry?.verboseLevel!==void 0&&(next.verboseLevel=entry.verboseLevel),entry?.reasoningLevel!==void 0&&(next.reasoningLevel=entry.reasoningLevel),entry?.responseUsage!==void 0&&(next.responseUsage=entry.responseUsage),entry?.inputTokens!==void 0&&(next.inputTokens=entry.inputTokens),entry?.outputTokens!==void 0&&(next.outputTokens=entry.outputTokens),entry?.totalTokens!==void 0&&(next.totalTokens=entry.totalTokens),(entry?.contextTokens!==void 0||defaults?.contextTokens!==void 0)&&(next.contextTokens=entry?.contextTokens??defaults?.contextTokens??state.sessionInfo.contextTokens),entry?.displayName!==void 0&&(next.displayName=entry.displayName),entry?.updatedAt!==void 0&&(next.updatedAt=entry.updatedAt);let selection=resolveModelSelection(entry);selection.modelProvider!==void 0&&(next.modelProvider=selection.modelProvider),selection.model!==void 0&&(next.model=selection.model),state.sessionInfo=next,updateAutocompleteProvider(),updateFooter(),tui.requestRender()},runRefreshSessionInfo=async()=>{try{let listAgentId=(()=>{if(state.currentSessionKey===`global`||state.currentSessionKey===`unknown`)return;let parsed=parseAgentSessionKey(state.currentSessionKey);return parsed?.agentId?normalizeAgentId(parsed.agentId):state.currentAgentId})(),result=await client.listSessions({includeGlobal:!1,includeUnknown:!1,agentId:listAgentId}),normalizeMatchKey=key=>parseAgentSessionKey(key)?.rest??key,currentMatchKey=normalizeMatchKey(state.currentSessionKey),entry=result.sessions.find(row=>row.key===state.currentSessionKey?!0:normalizeMatchKey(row.key)===currentMatchKey);entry?.key&&entry.key!==state.currentSessionKey&&(updateAgentFromSessionKey(entry.key),state.currentSessionKey=entry.key,updateHeader()),applySessionInfo({entry,defaults:result.defaults})}catch(err){chatLog.addSystem(`sessions list failed: ${String(err)}`)}},refreshSessionInfo=async()=>{refreshSessionInfoPromise=refreshSessionInfoPromise.then(runRefreshSessionInfo,runRefreshSessionInfo),await refreshSessionInfoPromise},applySessionInfoFromPatch=result=>{if(!result?.entry)return;result.key&&result.key!==state.currentSessionKey&&(updateAgentFromSessionKey(result.key),state.currentSessionKey=result.key,updateHeader());let resolved=result.resolved;applySessionInfo({entry:resolved&&(resolved.modelProvider||resolved.model)?{...result.entry,modelProvider:resolved.modelProvider??result.entry.modelProvider,model:resolved.model??result.entry.model}:result.entry,force:!0})},loadHistory=async()=>{try{let record=await client.loadHistory({sessionKey:state.currentSessionKey,limit:opts.historyLimit??200});state.currentSessionId=typeof record.sessionId==`string`?record.sessionId:null,state.sessionInfo.thinkingLevel=record.thinkingLevel??state.sessionInfo.thinkingLevel,state.sessionInfo.verboseLevel=record.verboseLevel??state.sessionInfo.verboseLevel;let showTools=(state.sessionInfo.verboseLevel??`off`)!==`off`;chatLog.clearAll(),chatLog.addSystem(`session ${state.currentSessionKey}`);for(let entry of record.messages??[]){if(!entry||typeof entry!=`object`)continue;let message=entry;if(isCommandMessage(message)){let text=extractTextFromMessage(message);text&&chatLog.addSystem(text);continue}if(message.role===`user`){let text=extractTextFromMessage(message);text&&chatLog.addUser(text);continue}if(message.role===`assistant`){let text=extractTextFromMessage(message,{includeThinking:state.showThinking});text&&chatLog.finalizeAssistant(text);continue}if(message.role===`toolResult`){if(!showTools)continue;let toolCallId=asString(message.toolCallId,``),toolName=asString(message.toolName,`tool`);chatLog.startTool(toolCallId,toolName,{}).setResult({content:Array.isArray(message.content)?message.content:[],details:typeof message.details==`object`&&message.details?message.details:void 0},{isError:!!message.isError})}}state.historyLoaded=!0}catch(err){chatLog.addSystem(`history failed: ${String(err)}`)}await refreshSessionInfo(),tui.requestRender()};return{applyAgentsResult,refreshAgents,refreshSessionInfo,applySessionInfoFromPatch,loadHistory,setSession:async rawKey=>{let nextKey=resolveSessionKey(rawKey);updateAgentFromSessionKey(nextKey),state.currentSessionKey=nextKey,state.activeChatRunId=null,state.currentSessionId=null,state.historyLoaded=!1,clearLocalRunIds?.(),updateHeader(),updateFooter(),await loadHistory();try{let handoff=await loadLatestSessionHandoff(process.cwd());if(handoff){let lines=[`Resuming from session ${handoff.sessionId.slice(0,8)} (${handoff.timestamp.slice(0,10)})`,`Summary: ${handoff.summary}`];handoff.decisions.length>0&&lines.push(`Decisions: ${handoff.decisions.map(d=>`• ${d}`).join(` `)}`),handoff.nextSteps.length>0&&lines.push(`Next steps: ${handoff.nextSteps.map(s=>`• ${s}`).join(` `)}`),handoff.openQuestions.length>0&&lines.push(`Open questions: ${handoff.openQuestions.map(q=>`• ${q}`).join(` `)}`),chatLog.addSystem(lines.join(`
|
|
25
25
|
`))}}catch{}},abortActive:async()=>{if(!state.activeChatRunId){chatLog.addSystem(`no active run`),tui.requestRender();return}try{await client.abortChat({sessionKey:state.currentSessionKey,runId:state.activeChatRunId}),setActivityStatus(`aborted`)}catch(err){chatLog.addSystem(`abort failed: ${String(err)}`),setActivityStatus(`abort failed`)}tui.requestRender()}}}const defaultWaitingPhrases=[`flibbertigibbeting`,`kerfuffling`,`dillydallying`,`twiddling thumbs`,`noodling`,`bamboozling`,`moseying`,`hobnobbing`,`pondering`,`conjuring`];function pickWaitingPhrase(tick,phrases=defaultWaitingPhrases){return phrases[Math.floor(tick/10)%phrases.length]??phrases[0]??`waiting`}function shimmerText(theme,text,tick){let hi=ch=>theme.bold(theme.accentSoft(ch)),pos=tick%(text.length+6),start=Math.max(0,pos-6),end=Math.min(text.length-1,pos),out=``;for(let i=0;i<text.length;i++){let ch=text[i];out+=i>=start&&i<=end?hi(ch):theme.dim(ch)}return out}function buildWaitingStatusMessage(params){let phrase=pickWaitingPhrase(params.tick,params.phrases);return`${shimmerText(params.theme,`${phrase}…`,params.tick)} • ${params.elapsed} | ${params.connectionStatus}`}function createEditorSubmitHandler(params){return text=>{let raw=text,value=raw.trim();if(params.editor.setText(``),value){if(raw.startsWith(`!`)&&raw!==`!`){params.editor.addToHistory(raw),params.handleBangLine(raw);return}if(params.editor.addToHistory(value),value.startsWith(`/`)){params.handleCommand(value);return}params.sendMessage(value)}}}function shouldEnableWindowsGitBashPasteFallback(params){if((params?.platform??process.platform)!==`win32`)return!1;let env=params?.env??process.env,msystem=(env.MSYSTEM??``).toUpperCase(),shell=env.SHELL??``,termProgram=(env.TERM_PROGRAM??``).toLowerCase();return msystem.startsWith(`MINGW`)||msystem.startsWith(`MSYS`)||shell.toLowerCase().includes(`bash`)?!0:termProgram.includes(`mintty`)}function createSubmitBurstCoalescer(params){let windowMs=Math.max(1,params.burstWindowMs??50),now=params.now??(()=>Date.now()),setTimer=params.setTimer??setTimeout,clearTimer=params.clearTimer??clearTimeout,pending=null,pendingAt=0,flushTimer=null,clearFlushTimer=()=>{flushTimer&&=(clearTimer(flushTimer),null)},flushPending=()=>{if(pending===null)return;let value=pending;pending=null,pendingAt=0,clearFlushTimer(),params.submit(value)},scheduleFlush=()=>{clearFlushTimer(),flushTimer=setTimer(()=>{flushPending()},windowMs)};return value=>{if(!params.enabled){params.submit(value);return}if(value.includes(`
|
|
26
26
|
`)){flushPending(),params.submit(value);return}let ts=now();if(pending===null){pending=value,pendingAt=ts,scheduleFlush();return}if(ts-pendingAt<=windowMs){pending=`${pending}\n${value}`,pendingAt=ts,scheduleFlush();return}flushPending(),pending=value,pendingAt=ts,scheduleFlush()}}function resolveTuiSessionKey(params){let trimmed=(params.raw??``).trim();return trimmed?trimmed===`global`||trimmed===`unknown`||trimmed.startsWith(`agent:`)?trimmed:`agent:${params.currentAgentId}:${trimmed}`:params.sessionScope===`global`?`global`:buildAgentMainSessionKey({agentId:params.currentAgentId,mainKey:params.sessionMainKey})}async function runTui(opts){let config=loadConfig(),initialSessionInput=(opts.session??``).trim(),sessionScope=config.session?.scope??`per-sender`,sessionMainKey=normalizeMainKey(config.session?.mainKey),agentDefaultId=resolveDefaultAgentId(config),currentAgentId=agentDefaultId,agents=[],agentNames=new Map,currentSessionKey=``,initialSessionApplied=!1,currentSessionId=null,activeChatRunId=null,historyLoaded=!1,isConnected=!1,wasDisconnected=!1,toolsExpanded=!1,loggingEnabled=config.logging?.enabled!==!1,showThinking=!1,localRunIds=new Set,deliverDefault=opts.deliver??!1,autoMessage=opts.message?.trim(),autoMessageSent=!1,sessionInfo={},lastCtrlCAt=0,activityStatus=`idle`,connectionStatus=`connecting`,statusTimeout=null,statusTimer=null,statusStartedAt=null,lastActivityStatus=activityStatus,setupInProgress=!1,projectName=null,workspaceState=null;Promise.all([loadProjectContext(process.cwd()).catch(()=>null),loadWorkspaceState(process.cwd()).catch(()=>null)]).then(([ctx,ws])=>{projectName=ctx?.projectName??null,workspaceState=ws});let state={get agentDefaultId(){return agentDefaultId},set agentDefaultId(value){agentDefaultId=value},get sessionMainKey(){return sessionMainKey},set sessionMainKey(value){sessionMainKey=value},get sessionScope(){return sessionScope},set sessionScope(value){sessionScope=value},get agents(){return agents},set agents(value){agents=value},get currentAgentId(){return currentAgentId},set currentAgentId(value){currentAgentId=value},get currentSessionKey(){return currentSessionKey},set currentSessionKey(value){currentSessionKey=value},get currentSessionId(){return currentSessionId},set currentSessionId(value){currentSessionId=value},get activeChatRunId(){return activeChatRunId},set activeChatRunId(value){activeChatRunId=value},get historyLoaded(){return historyLoaded},set historyLoaded(value){historyLoaded=value},get sessionInfo(){return sessionInfo},set sessionInfo(value){sessionInfo=value},get initialSessionApplied(){return initialSessionApplied},set initialSessionApplied(value){initialSessionApplied=value},get isConnected(){return isConnected},set isConnected(value){isConnected=value},get autoMessageSent(){return autoMessageSent},set autoMessageSent(value){autoMessageSent=value},get toolsExpanded(){return toolsExpanded},set toolsExpanded(value){toolsExpanded=value},get showThinking(){return showThinking},set showThinking(value){showThinking=value},get connectionStatus(){return connectionStatus},set connectionStatus(value){connectionStatus=value},get activityStatus(){return activityStatus},set activityStatus(value){activityStatus=value},get statusTimeout(){return statusTimeout},set statusTimeout(value){statusTimeout=value},get lastCtrlCAt(){return lastCtrlCAt},set lastCtrlCAt(value){lastCtrlCAt=value},get loggingEnabled(){return loggingEnabled},set loggingEnabled(value){loggingEnabled=value}},noteLocalRunId=runId=>{if(runId&&(localRunIds.add(runId),localRunIds.size>200)){let[first]=localRunIds;first&&localRunIds.delete(first)}},forgetLocalRunId=runId=>{localRunIds.delete(runId)},isLocalRunId=runId=>localRunIds.has(runId),clearLocalRunIds=()=>{localRunIds.clear()},client=new GatewayChatClient({url:opts.url,token:opts.token,password:opts.password}),tui=new TUI(new ProcessTerminal),header=new Text(``,1,0),statusContainer=new Container,statusBodyContainer=new Container,statusTraceText=new Text(``,1,0),footer=new Text(``,1,0),chatLog=new ChatLog,editor=new CustomEditor(tui,editorTheme),root=new Container;root.addChild(header),root.addChild(chatLog),statusContainer.addChild(statusBodyContainer),statusContainer.addChild(statusTraceText),root.addChild(statusContainer),root.addChild(footer),root.addChild(editor);let updateAutocompleteProvider=()=>{editor.setAutocompleteProvider(new CombinedAutocompleteProvider(getSlashCommands({cfg:config,provider:sessionInfo.modelProvider,model:sessionInfo.model}),process.cwd()))};tui.addChild(root),tui.setFocus(editor);let formatSessionKey=key=>key===`global`||key===`unknown`?key:parseAgentSessionKey(key)?.rest??key,formatAgentLabel=id=>{let name=agentNames.get(id);return name?`${id} (${name})`:id},resolveSessionKey=raw=>resolveTuiSessionKey({raw,sessionScope,currentAgentId,sessionMainKey});currentSessionKey=resolveSessionKey(initialSessionInput);let updateHeader=()=>{let sessionLabel=formatSessionKey(currentSessionKey),agentLabel=formatAgentLabel(currentAgentId),projectPart=projectName?` · ${projectName}`:``,syncPart=workspaceState?.lastSyncedAt?` [synced ${formatTimeAgo(Date.now()-new Date(workspaceState.lastSyncedAt).getTime())}]`:``;header.setText(theme.header(`builderforce tui${projectPart}${syncPart} - ${client.connection.url} - agent ${agentLabel} - session ${sessionLabel}`))},busyStates=new Set([`sending`,`waiting`,`streaming`,`running`]),statusText=null,statusLoader=null,statusTraceLines=[],renderStatusTrace=()=>{statusTraceText.setText(theme.dim(statusTraceLines.join(`
|
|
27
|
-
`)))},reportAction=text=>{let message=text.trim();message&&(statusTraceLines.push(`• ${message}`),statusTraceLines.length>14&&statusTraceLines.splice(0,statusTraceLines.length-14),renderStatusTrace())},formatElapsed=startMs=>{let totalSeconds=Math.max(0,Math.floor((Date.now()-startMs)/1e3));return totalSeconds<60?`${totalSeconds}s`:`${Math.floor(totalSeconds/60)}m ${totalSeconds%60}s`},ensureStatusText=()=>{statusText||(statusBodyContainer.clear(),statusLoader?.stop(),statusLoader=null,statusText=new Text(``,1,0),statusBodyContainer.addChild(statusText))},ensureStatusLoader=()=>{statusLoader||(statusBodyContainer.clear(),statusText=null,statusLoader=new Loader(tui,spinner=>theme.accent(spinner),text=>theme.bold(theme.accentSoft(text)),``),statusBodyContainer.addChild(statusLoader))},waitingTick=0,waitingTimer=null,waitingPhrase=null,updateBusyStatusMessage=()=>{if(!statusLoader||!statusStartedAt)return;let elapsed=formatElapsed(statusStartedAt);if(activityStatus===`waiting`){waitingTick++,statusLoader.setMessage(buildWaitingStatusMessage({theme,tick:waitingTick,elapsed,connectionStatus,phrases:waitingPhrase?[waitingPhrase]:void 0}));return}statusLoader.setMessage(`${activityStatus} • ${elapsed} | ${connectionStatus}`)},startStatusTimer=()=>{statusTimer||=setInterval(()=>{busyStates.has(activityStatus)&&updateBusyStatusMessage()},1e3)},stopStatusTimer=()=>{statusTimer&&=(clearInterval(statusTimer),null)},startWaitingTimer=()=>{waitingTimer||=(waitingPhrase||=defaultWaitingPhrases[Math.floor(Math.random()*defaultWaitingPhrases.length)]??defaultWaitingPhrases[0]??`waiting`,waitingTick=0,setInterval(()=>{activityStatus===`waiting`&&updateBusyStatusMessage()},120))},stopWaitingTimer=()=>{waitingTimer&&(clearInterval(waitingTimer),waitingTimer=null,waitingPhrase=null)},renderStatus=()=>{if(busyStates.has(activityStatus))(!statusStartedAt||lastActivityStatus!==activityStatus)&&(statusStartedAt=Date.now()),ensureStatusLoader(),activityStatus===`waiting`?(stopStatusTimer(),startWaitingTimer()):(stopWaitingTimer(),startStatusTimer()),updateBusyStatusMessage();else{statusStartedAt=null,stopStatusTimer(),stopWaitingTimer(),statusLoader?.stop(),statusLoader=null,ensureStatusText();let text=activityStatus?`${connectionStatus} | ${activityStatus}`:connectionStatus;statusText?.setText(theme.dim(text))}lastActivityStatus=activityStatus},setConnectionStatus=(text,ttlMs)=>{let previous=connectionStatus;connectionStatus=text,text!==previous&&reportAction(`connection: ${text}`),renderStatus(),statusTimeout&&clearTimeout(statusTimeout),ttlMs&&ttlMs>0&&(statusTimeout=setTimeout(()=>{connectionStatus=isConnected?`connected`:`disconnected`,renderStatus()},ttlMs))},setActivityStatus=text=>{activityStatus=text,renderStatus()},updateFooter=()=>{let sessionKeyLabel=formatSessionKey(currentSessionKey),sessionLabel=sessionInfo.displayName?`${sessionKeyLabel} (${sessionInfo.displayName})`:sessionKeyLabel,agentLabel=formatAgentLabel(currentAgentId),modelLabel=sessionInfo.model?sessionInfo.modelProvider?`${sessionInfo.modelProvider}/${sessionInfo.model}`:sessionInfo.model:`unknown`,tokens=formatTokens(sessionInfo.totalTokens??null,sessionInfo.contextTokens??null),think=sessionInfo.thinkingLevel??`off`,verbose=sessionInfo.verboseLevel??`off`,reasoning=sessionInfo.reasoningLevel??`off`,reasoningLabel=reasoning===`on`?`reasoning`:reasoning===`stream`?`reasoning:stream`:null,localBrainLabel=config.localBrain?.enabled?`local brain`:null,footerParts=[`agent ${agentLabel}`,`session ${sessionLabel}`,modelLabel,localBrainLabel,think===`off`?null:`think ${think}`,verbose===`off`?null:`verbose ${verbose}`,reasoningLabel,tokens].filter(Boolean);footer.setText(theme.dim(footerParts.join(` | `)))},{openOverlay,closeOverlay}=createOverlayHandlers(tui,editor),{refreshAgents,refreshSessionInfo,applySessionInfoFromPatch,loadHistory,setSession,abortActive}=createSessionActions({client,chatLog,tui,opts,state,agentNames,initialSessionInput,initialSessionAgentId:(()=>{if(!initialSessionInput)return null;let parsed=parseAgentSessionKey(initialSessionInput);return parsed?normalizeAgentId(parsed.agentId):null})(),resolveSessionKey,updateHeader,updateFooter,updateAutocompleteProvider,setActivityStatus,clearLocalRunIds}),{handleChatEvent,handleAgentEvent}=createEventHandlers({chatLog,tui,state,setActivityStatus,reportAction,refreshSessionInfo,loadHistory,isLocalRunId,forgetLocalRunId,clearLocalRunIds}),{handleCommand,sendMessage,openModelSelector,openAgentSelector,openSessionSelector}=createCommandHandlers({client,chatLog,tui,opts,state,deliverDefault,openOverlay,closeOverlay,refreshSessionInfo,applySessionInfoFromPatch,updateFooter,loadHistory,setSession,refreshAgents,abortActive,setActivityStatus,reportAction,formatSessionKey,noteLocalRunId,forgetLocalRunId,onSetup:async()=>{if(setupInProgress){chatLog.addSystem(`Setup is already running.`),tui.requestRender();return}setupInProgress=!0;try{chatLog.addSystem(`Stopping TUI — setup wizard starting…`),tui.requestRender(),await new Promise(r=>setTimeout(r,80)),client.stop(),tui.stop(),await new Promise(r=>setTimeout(r,50));let{restoreTerminalState}=await import(`./restore-BNDNfE3q.js`),{runInteractiveOnboarding}=await import(`./onboard-interactive-
|
|
27
|
+
`)))},reportAction=text=>{let message=text.trim();message&&(statusTraceLines.push(`• ${message}`),statusTraceLines.length>14&&statusTraceLines.splice(0,statusTraceLines.length-14),renderStatusTrace())},formatElapsed=startMs=>{let totalSeconds=Math.max(0,Math.floor((Date.now()-startMs)/1e3));return totalSeconds<60?`${totalSeconds}s`:`${Math.floor(totalSeconds/60)}m ${totalSeconds%60}s`},ensureStatusText=()=>{statusText||(statusBodyContainer.clear(),statusLoader?.stop(),statusLoader=null,statusText=new Text(``,1,0),statusBodyContainer.addChild(statusText))},ensureStatusLoader=()=>{statusLoader||(statusBodyContainer.clear(),statusText=null,statusLoader=new Loader(tui,spinner=>theme.accent(spinner),text=>theme.bold(theme.accentSoft(text)),``),statusBodyContainer.addChild(statusLoader))},waitingTick=0,waitingTimer=null,waitingPhrase=null,updateBusyStatusMessage=()=>{if(!statusLoader||!statusStartedAt)return;let elapsed=formatElapsed(statusStartedAt);if(activityStatus===`waiting`){waitingTick++,statusLoader.setMessage(buildWaitingStatusMessage({theme,tick:waitingTick,elapsed,connectionStatus,phrases:waitingPhrase?[waitingPhrase]:void 0}));return}statusLoader.setMessage(`${activityStatus} • ${elapsed} | ${connectionStatus}`)},startStatusTimer=()=>{statusTimer||=setInterval(()=>{busyStates.has(activityStatus)&&updateBusyStatusMessage()},1e3)},stopStatusTimer=()=>{statusTimer&&=(clearInterval(statusTimer),null)},startWaitingTimer=()=>{waitingTimer||=(waitingPhrase||=defaultWaitingPhrases[Math.floor(Math.random()*defaultWaitingPhrases.length)]??defaultWaitingPhrases[0]??`waiting`,waitingTick=0,setInterval(()=>{activityStatus===`waiting`&&updateBusyStatusMessage()},120))},stopWaitingTimer=()=>{waitingTimer&&(clearInterval(waitingTimer),waitingTimer=null,waitingPhrase=null)},renderStatus=()=>{if(busyStates.has(activityStatus))(!statusStartedAt||lastActivityStatus!==activityStatus)&&(statusStartedAt=Date.now()),ensureStatusLoader(),activityStatus===`waiting`?(stopStatusTimer(),startWaitingTimer()):(stopWaitingTimer(),startStatusTimer()),updateBusyStatusMessage();else{statusStartedAt=null,stopStatusTimer(),stopWaitingTimer(),statusLoader?.stop(),statusLoader=null,ensureStatusText();let text=activityStatus?`${connectionStatus} | ${activityStatus}`:connectionStatus;statusText?.setText(theme.dim(text))}lastActivityStatus=activityStatus},setConnectionStatus=(text,ttlMs)=>{let previous=connectionStatus;connectionStatus=text,text!==previous&&reportAction(`connection: ${text}`),renderStatus(),statusTimeout&&clearTimeout(statusTimeout),ttlMs&&ttlMs>0&&(statusTimeout=setTimeout(()=>{connectionStatus=isConnected?`connected`:`disconnected`,renderStatus()},ttlMs))},setActivityStatus=text=>{activityStatus=text,renderStatus()},updateFooter=()=>{let sessionKeyLabel=formatSessionKey(currentSessionKey),sessionLabel=sessionInfo.displayName?`${sessionKeyLabel} (${sessionInfo.displayName})`:sessionKeyLabel,agentLabel=formatAgentLabel(currentAgentId),modelLabel=sessionInfo.model?sessionInfo.modelProvider?`${sessionInfo.modelProvider}/${sessionInfo.model}`:sessionInfo.model:`unknown`,tokens=formatTokens(sessionInfo.totalTokens??null,sessionInfo.contextTokens??null),think=sessionInfo.thinkingLevel??`off`,verbose=sessionInfo.verboseLevel??`off`,reasoning=sessionInfo.reasoningLevel??`off`,reasoningLabel=reasoning===`on`?`reasoning`:reasoning===`stream`?`reasoning:stream`:null,localBrainLabel=config.localBrain?.enabled?`local brain`:null,footerParts=[`agent ${agentLabel}`,`session ${sessionLabel}`,modelLabel,localBrainLabel,think===`off`?null:`think ${think}`,verbose===`off`?null:`verbose ${verbose}`,reasoningLabel,tokens].filter(Boolean);footer.setText(theme.dim(footerParts.join(` | `)))},{openOverlay,closeOverlay}=createOverlayHandlers(tui,editor),{refreshAgents,refreshSessionInfo,applySessionInfoFromPatch,loadHistory,setSession,abortActive}=createSessionActions({client,chatLog,tui,opts,state,agentNames,initialSessionInput,initialSessionAgentId:(()=>{if(!initialSessionInput)return null;let parsed=parseAgentSessionKey(initialSessionInput);return parsed?normalizeAgentId(parsed.agentId):null})(),resolveSessionKey,updateHeader,updateFooter,updateAutocompleteProvider,setActivityStatus,clearLocalRunIds}),{handleChatEvent,handleAgentEvent}=createEventHandlers({chatLog,tui,state,setActivityStatus,reportAction,refreshSessionInfo,loadHistory,isLocalRunId,forgetLocalRunId,clearLocalRunIds}),{handleCommand,sendMessage,openModelSelector,openAgentSelector,openSessionSelector}=createCommandHandlers({client,chatLog,tui,opts,state,deliverDefault,openOverlay,closeOverlay,refreshSessionInfo,applySessionInfoFromPatch,updateFooter,loadHistory,setSession,refreshAgents,abortActive,setActivityStatus,reportAction,formatSessionKey,noteLocalRunId,forgetLocalRunId,onSetup:async()=>{if(setupInProgress){chatLog.addSystem(`Setup is already running.`),tui.requestRender();return}setupInProgress=!0;try{chatLog.addSystem(`Stopping TUI — setup wizard starting…`),tui.requestRender(),await new Promise(r=>setTimeout(r,80)),client.stop(),tui.stop(),await new Promise(r=>setTimeout(r,50));let{restoreTerminalState}=await import(`./restore-BNDNfE3q.js`),{runInteractiveOnboarding}=await import(`./onboard-interactive-J_ObFzeW.js`),{startGatewayBackground}=await import(`./tui-setup-check-DK8vdhLI.js`);restoreTerminalState(`pre-setup-wizard`,{resumeStdinIfPaused:!0}),await new Promise(r=>setTimeout(r,150));try{await runInteractiveOnboarding({flow:`quickstart`})}catch(err){process.stderr.write(`Setup wizard failed: ${String(err)}\n`)}finally{restoreTerminalState(`post-setup-wizard`,{resumeStdinIfPaused:!0})}await startGatewayBackground(),setConnectionStatus(`restarting tui`),setActivityStatus(`idle`),updateHeader(),updateFooter(),tui.start(),tui.setFocus(editor),tui.requestRender(),client.start()}finally{setupInProgress=!1}},config}),{runLocalShellLine}=createLocalShellRunner({chatLog,tui,openOverlay,closeOverlay});updateAutocompleteProvider(),editor.onSubmit=createSubmitBurstCoalescer({submit:createEditorSubmitHandler({editor,handleCommand,sendMessage,handleBangLine:runLocalShellLine}),enabled:shouldEnableWindowsGitBashPasteFallback()}),editor.onEscape=()=>{abortActive()},editor.onCtrlC=()=>{let now=Date.now();if(editor.getText().trim().length>0){editor.setText(``),setActivityStatus(`cleared input`),tui.requestRender();return}now-lastCtrlCAt<1e3&&(client.stop(),tui.stop(),process.exit(0)),lastCtrlCAt=now,setActivityStatus(`press ctrl+c again to exit`),tui.requestRender()},editor.onCtrlD=()=>{client.stop(),tui.stop(),process.exit(0)},editor.onCtrlO=()=>{toolsExpanded=!toolsExpanded,chatLog.setToolsExpanded(toolsExpanded),setActivityStatus(toolsExpanded?`tools expanded`:`tools collapsed`),tui.requestRender()},editor.onCtrlL=()=>{openModelSelector()},editor.onCtrlG=()=>{openAgentSelector()},editor.onCtrlP=()=>{openSessionSelector()},editor.onCtrlT=()=>{showThinking=!showThinking,loadHistory()},client.onEvent=evt=>{evt.event===`chat`&&handleChatEvent(evt.payload),evt.event===`agent`&&handleAgentEvent(evt.payload)},client.onConnected=()=>{isConnected=!0;let reconnected=wasDisconnected;wasDisconnected=!1,setConnectionStatus(`connected`),(async()=>{await refreshAgents(),updateHeader(),await refreshSessionInfo(),await loadHistory(),setConnectionStatus(reconnected?`gateway reconnected`:`gateway connected`,4e3),tui.requestRender(),!autoMessageSent&&autoMessage&&(autoMessageSent=!0,await sendMessage(autoMessage)),updateFooter(),tui.requestRender()})()},client.onDisconnected=reason=>{let isFirstFailure=!wasDisconnected&&!isConnected;isConnected=!1,wasDisconnected=!0,historyLoaded=!1,setConnectionStatus(`gateway disconnected: ${reason?.trim()?reason.trim():`closed`}`,5e3),setActivityStatus(`idle`),isFirstFailure&&chatLog.addSystem(`Gateway not reachable. Type /setup or /onboard to run the setup wizard, or /gateway restart to restart the gateway.`),updateFooter(),tui.requestRender()},client.onGap=info=>{setConnectionStatus(`event gap: expected ${info.expected}, got ${info.received}`,5e3),tui.requestRender()},updateHeader(),setConnectionStatus(`connecting`),updateFooter(),tui.start(),client.start(),await new Promise(resolve=>{let finish=()=>resolve();process.once(`exit`,finish),process.once(`SIGINT`,finish),process.once(`SIGTERM`,finish)})}export{runTui as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{d as visibleWidth,l as stripAnsi,u as truncateToWidth}from"./subsystem-C4b1Von0.js";import{i as logWarn,t as logDebug}from"./logger-wuOr7HKl.js";import{C as parseAgentSessionKey,a as buildAgentMainSessionKey,d as normalizeAgentId,f as normalizeMainKey}from"./session-key-CksCYipj.js";import{l as resolveDefaultAgentId}from"./agent-scope-CufEmNj_.js";import{t as normalizeBaseUrl}from"./normalize-base-url-D_sv6Zgt.js";import{i as readSharedEnvVar}from"./env-file-DeS6x2OL.js";import{c as writeConfigFile,r as loadConfig}from"./io-
|
|
1
|
+
import{d as visibleWidth,l as stripAnsi,u as truncateToWidth}from"./subsystem-C4b1Von0.js";import{i as logWarn,t as logDebug}from"./logger-wuOr7HKl.js";import{C as parseAgentSessionKey,a as buildAgentMainSessionKey,d as normalizeAgentId,f as normalizeMainKey}from"./session-key-CksCYipj.js";import{l as resolveDefaultAgentId}from"./agent-scope-CufEmNj_.js";import{t as normalizeBaseUrl}from"./normalize-base-url-D_sv6Zgt.js";import{i as readSharedEnvVar}from"./env-file-DeS6x2OL.js";import{c as writeConfigFile,r as loadConfig}from"./io-D9hC2aG0.js";import{n as loadProjectContext}from"./project-context-store-CIUcwUP_.js";import{d as normalizeUsageDisplay,i as formatThinkingLevels,o as listThinkingLevelLabels,p as resolveResponseUsageMode}from"./embedded-helpers-DdU30lmt.js";import{n as resolveToolDisplay,t as formatToolDetail}from"./tool-display-Cs4hDP1f.js";import{a as buildStagedSummary,d as isStagingActive,f as rejectAllEdits,i as activateStaging,l as getStagedEdits,m as resolveStagedTarget,n as acceptAllEdits,o as buildUnifiedDiff,p as rejectEdit,r as acceptEdit,s as deactivateStaging,t as isModelCached,u as hasStagedEdits,v as listChatCommands,y as listChatCommandsForConfig}from"./builderforcellm-syscheck-9ksvqHYX.js";import{n as formatTimeAgo,t as formatRelativeTimestamp}from"./format-relative-CruqE52s.js";import{n as formatTokenCount}from"./usage-format-5sp5AMSu.js";import{c as saveSessionHandoff,f as initializeBuilderForceAgentsProject,n as loadWorkspaceState,s as loadLatestSessionHandoff}from"./project-context-D3Mx4maV.js";import{s as downloadBuilderForceAgentsLlmModel}from"./transformers-stream-Buj40qHl.js";import{r as syncBuilderForceAgentsDirectoryWithMetaUpdate}from"./builderforce-directory-sync-DQ6u60yX.js";import{a as HIPPOCAMPUS_MODEL_ID,c as applyTransformersProviderConfig,i as HIPPOCAMPUS_DTYPE,l as defaultCacheDir,n as AMYGDALA_MODEL_ID,r as BUILDERFORCE_AGENTSLLM_LOCAL_PROVIDER_ID,t as AMYGDALA_DTYPE}from"./auth-choice.apply.transformers-DmdxpHGz.js";import{a as formatContextUsageLine,c as sanitizeRenderableText,i as extractTextFromMessage,n as GatewayChatClient,o as formatTokens,r as asString,s as isCommandMessage,t as TuiStreamAssembler}from"./tui-stream-assembler-Br15rhRH.js";import{spawn}from"node:child_process";import chalk from"chalk";import{randomUUID}from"node:crypto";import{Box,CombinedAutocompleteProvider,Container,Editor,Input,Key,Loader,Markdown,ProcessTerminal,SelectList,SettingsList,Spacer,TUI,Text,getEditorKeybindings,isKeyRelease,matchesKey}from"@mariozechner/pi-tui";import{highlight,supportsLanguage}from"cli-highlight";const VERBOSE_LEVELS=[`on`,`off`],REASONING_LEVELS=[`on`,`off`],ELEVATED_LEVELS=[`on`,`off`,`ask`,`full`],ACTIVATION_LEVELS=[`mention`,`always`],USAGE_FOOTER_LEVELS=[`off`,`tokens`,`full`],COMMAND_ALIASES={elev:`elevated`,onboard:`setup`,service:`gateway`};function parseCommand(input){let trimmed=input.replace(/^\//,``).trim();if(!trimmed)return{name:``,args:``};let[name,...rest]=trimmed.split(/\s+/),normalized=name.toLowerCase();return{name:COMMAND_ALIASES[normalized]??normalized,args:rest.join(` `).trim()}}function getSlashCommands(options={}){let thinkLevels=listThinkingLevelLabels(options.provider,options.model),commands=[{name:`help`,description:`Show slash command help`},{name:`status`,description:`Show gateway status summary`},{name:`agent`,description:`Switch agent (or open picker)`},{name:`agents`,description:`Open agent picker`},{name:`session`,description:`Switch session (or open picker)`},{name:`sessions`,description:`Open session picker`},{name:`fork`,description:`Clone the current session into a new transcript`},{name:`undo`,description:`Rewind the last conversation turn`},{name:`model`,description:`Set model (or open picker)`},{name:`models`,description:`Open model picker`},{name:`think`,description:`Set thinking level`,getArgumentCompletions:prefix=>thinkLevels.filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`verbose`,description:`Set verbose on/off`,getArgumentCompletions:prefix=>VERBOSE_LEVELS.filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`reasoning`,description:`Set reasoning on/off`,getArgumentCompletions:prefix=>REASONING_LEVELS.filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`usage`,description:`Toggle per-response usage line`,getArgumentCompletions:prefix=>USAGE_FOOTER_LEVELS.filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`elevated`,description:`Set elevated on/off/ask/full`,getArgumentCompletions:prefix=>ELEVATED_LEVELS.filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`elev`,description:`Alias for /elevated`,getArgumentCompletions:prefix=>ELEVATED_LEVELS.filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`activation`,description:`Set group activation`,getArgumentCompletions:prefix=>ACTIVATION_LEVELS.filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`abort`,description:`Abort active run`},{name:`new`,description:`Reset the session`},{name:`reset`,description:`Reset the session`},{name:`settings`,description:`Open settings`},{name:`restart`,description:`Restart gateway locally`},{name:`gateway`,description:`Gateway control (status/start/stop/restart/token <value>)`},{name:`daemon`,description:`Alias for /gateway`},{name:`logs`,description:`Show recent gateway log lines`},{name:`init`,description:`Initialize builderForceAgents project in workspace`},{name:`handoff`,description:`Ask the agent to save a session handoff for the next session`},{name:`exit`,description:`Exit the TUI`},{name:`quit`,description:`Exit the TUI`},{name:`setup`,description:`Run the setup/onboarding wizard`},{name:`onboard`,description:`Alias for /setup`},{name:`localbrain`,description:`Toggle local brain on/off/refresh`,getArgumentCompletions:prefix=>[`on`,`off`,`refresh`].filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`project`,description:`Show project context from .builderForceAgents directory`},{name:`sync`,description:`Force sync .builderForceAgents directory to Builderforce`},{name:`spec`,description:`Run a spec-driven planning workflow (PRD → architecture → tasks)`},{name:`workflow`,description:`Show status of the latest (or a specific) workflow`},{name:`stage`,description:`Toggle staged-edit mode (buffer write/edit for /diff /accept /reject)`,getArgumentCompletions:prefix=>[`on`,`off`,`status`].filter(v=>v.startsWith(prefix.toLowerCase())).map(value=>({value,label:value}))},{name:`diff`,description:`Show staged file changes (or a specific file). Use after agent edits.`},{name:`accept`,description:`Apply staged changes to disk. /accept [file] or /accept all`},{name:`reject`,description:`Discard staged changes. /reject [file] or /reject all`}],seen=new Set(commands.map(command=>command.name)),gatewayCommands=options.cfg?listChatCommandsForConfig(options.cfg):listChatCommands();for(let command of gatewayCommands){let aliases=command.textAliases.length>0?command.textAliases:[`/${command.key}`];for(let alias of aliases){let name=alias.replace(/^\//,``).trim();!name||seen.has(name)||(seen.add(name),commands.push({name,description:command.description}))}}return commands}function helpText(options={}){return[`Slash commands:`,`/help`,`/commands`,`/status`,`/agent <id> (or /agents)`,`/session <key> (or /sessions)`,`/fork`,`/undo`,`/model <provider/model> (or /models)`,`/think <${formatThinkingLevels(options.provider,options.model,`|`)}>`,`/verbose <on|off>`,`/reasoning <on|off>`,`/usage <off|tokens|full>`,`/elevated <on|off|ask|full>`,`/elev <on|off|ask|full>`,`/activation <mention|always>`,`/new or /reset`,`/abort`,`/compact [instructions]`,`/settings`,`/restart (restart gateway; works when disconnected)`,`/gateway <status|start|stop|restart|token <value>>`,`/daemon <status|start|stop|restart|token <value>>`,`/logs [count]`,`/init`,`/handoff`,`/project`,`/sync`,`/spec <goal>`,`/workflow [id]`,`/stage [on|off|status]`,`/diff [file]`,`/accept [file|all]`,`/reject [file|all]`,`/exit`,`/localbrain <on|off|refresh>`,`/setup or /onboard`].join(`
|
|
2
2
|
`)}function createSyntaxTheme(fallback){return{keyword:chalk.hex(`#C586C0`),built_in:chalk.hex(`#4EC9B0`),type:chalk.hex(`#4EC9B0`),literal:chalk.hex(`#569CD6`),number:chalk.hex(`#B5CEA8`),string:chalk.hex(`#CE9178`),regexp:chalk.hex(`#D16969`),symbol:chalk.hex(`#B5CEA8`),class:chalk.hex(`#4EC9B0`),function:chalk.hex(`#DCDCAA`),title:chalk.hex(`#DCDCAA`),params:chalk.hex(`#9CDCFE`),comment:chalk.hex(`#6A9955`),doctag:chalk.hex(`#608B4E`),meta:chalk.hex(`#9CDCFE`),"meta-keyword":chalk.hex(`#C586C0`),"meta-string":chalk.hex(`#CE9178`),section:chalk.hex(`#DCDCAA`),tag:chalk.hex(`#569CD6`),name:chalk.hex(`#9CDCFE`),attr:chalk.hex(`#9CDCFE`),attribute:chalk.hex(`#9CDCFE`),variable:chalk.hex(`#9CDCFE`),bullet:chalk.hex(`#D7BA7D`),code:chalk.hex(`#CE9178`),emphasis:chalk.italic,strong:chalk.bold,formula:chalk.hex(`#C586C0`),link:chalk.hex(`#4EC9B0`),quote:chalk.hex(`#6A9955`),addition:chalk.hex(`#B5CEA8`),deletion:chalk.hex(`#F44747`),"selector-tag":chalk.hex(`#D7BA7D`),"selector-id":chalk.hex(`#D7BA7D`),"selector-class":chalk.hex(`#D7BA7D`),"selector-attr":chalk.hex(`#D7BA7D`),"selector-pseudo":chalk.hex(`#D7BA7D`),"template-tag":chalk.hex(`#C586C0`),"template-variable":chalk.hex(`#9CDCFE`),default:fallback}}const palette={text:`#E8E3D5`,dim:`#7B7F87`,accent:`#F6C453`,accentSoft:`#F2A65A`,border:`#3C414B`,userBg:`#2B2F36`,userText:`#F3EEE0`,systemText:`#9BA3B2`,toolPendingBg:`#1F2A2F`,toolSuccessBg:`#1E2D23`,toolErrorBg:`#2F1F1F`,toolTitle:`#F6C453`,toolOutput:`#E1DACB`,quote:`#8CC8FF`,quoteBorder:`#3B4D6B`,code:`#F0C987`,codeBlock:`#1E232A`,codeBorder:`#343A45`,modalBorder:`#4D8DFF`,modalBg:`#171A20`,link:`#7DD3A5`,error:`#F97066`,success:`#7DD3A5`},fg=hex=>text=>chalk.hex(hex)(text),bg=hex=>text=>chalk.bgHex(hex)(text),syntaxTheme=createSyntaxTheme(fg(palette.code));function highlightCode(code,lang){try{return highlight(code,{language:lang&&supportsLanguage(lang)?lang:void 0,theme:syntaxTheme,ignoreIllegals:!0}).split(`
|
|
3
3
|
`)}catch{return code.split(`
|
|
4
4
|
`).map(line=>fg(palette.code)(line))}}const theme={fg:fg(palette.text),assistantText:text=>text,dim:fg(palette.dim),accent:fg(palette.accent),accentSoft:fg(palette.accentSoft),success:fg(palette.success),error:fg(palette.error),header:text=>chalk.bold(fg(palette.accent)(text)),system:fg(palette.systemText),userBg:bg(palette.userBg),userText:fg(palette.userText),toolTitle:fg(palette.toolTitle),toolOutput:fg(palette.toolOutput),toolPendingBg:bg(palette.toolPendingBg),toolSuccessBg:bg(palette.toolSuccessBg),toolErrorBg:bg(palette.toolErrorBg),modalBg:bg(palette.modalBg),border:fg(palette.border),modalBorder:fg(palette.modalBorder),bold:text=>chalk.bold(text),italic:text=>chalk.italic(text)},markdownTheme={heading:text=>chalk.bold(fg(palette.accent)(text)),link:text=>fg(palette.link)(text),linkUrl:text=>chalk.dim(text),code:text=>fg(palette.code)(text),codeBlock:text=>fg(palette.code)(text),codeBlockBorder:text=>fg(palette.codeBorder)(text),quote:text=>fg(palette.quote)(text),quoteBorder:text=>fg(palette.quoteBorder)(text),hr:text=>fg(palette.border)(text),listBullet:text=>fg(palette.accentSoft)(text),bold:text=>chalk.bold(text),italic:text=>chalk.italic(text),strikethrough:text=>chalk.strikethrough(text),underline:text=>chalk.underline(text),highlightCode},baseSelectListTheme={selectedPrefix:text=>fg(palette.accent)(text),selectedText:text=>chalk.bold(fg(palette.accent)(text)),description:text=>fg(palette.dim)(text),scrollInfo:text=>fg(palette.dim)(text),noMatch:text=>fg(palette.dim)(text)},selectListTheme=baseSelectListTheme,filterableSelectListTheme={...baseSelectListTheme,filterLabel:text=>fg(palette.dim)(text)},settingsListTheme={label:(text,selected)=>selected?chalk.bold(fg(palette.accent)(text)):fg(palette.text)(text),value:(text,selected)=>selected?fg(palette.accentSoft)(text):fg(palette.dim)(text),description:text=>fg(palette.systemText)(text),cursor:fg(palette.accent)(`→ `),hint:text=>fg(palette.dim)(text)},editorTheme={borderColor:text=>fg(palette.border)(text),selectList:selectListTheme},searchableSelectListTheme={...baseSelectListTheme,searchPrompt:text=>fg(palette.accentSoft)(text),searchInput:text=>fg(palette.text)(text),matchHighlight:text=>chalk.bold(fg(palette.accent)(text))};var AssistantMessageComponent=class extends Container{constructor(text){super(),this.body=new Markdown(text,1,0,markdownTheme,{color:line=>theme.assistantText(line)}),this.addChild(new Spacer(1)),this.addChild(this.body)}setText(text){this.body.setText(text)}};function formatArgs(toolName,args){let detail=formatToolDetail(resolveToolDisplay({name:toolName,args}));if(detail)return sanitizeRenderableText(detail);if(!args||typeof args!=`object`)return``;try{return sanitizeRenderableText(JSON.stringify(args))}catch{return``}}function extractText(result){if(!result?.content)return``;let lines=[];for(let entry of result.content)if(entry.type===`text`&&entry.text)lines.push(sanitizeRenderableText(entry.text));else if(entry.type===`image`){let mime=entry.mimeType??`image`,size=entry.bytes?` ${Math.round(entry.bytes/1024)}kb`:``,omitted=entry.omitted?` (omitted)`:``;lines.push(`[${mime}${size}${omitted}]`)}return lines.join(`
|
|
@@ -24,4 +24,4 @@ This will re-download the latest local brain models.`);break}if(action===`reset`
|
|
|
24
24
|
`))deps.chatLog.addSystem(`[local] ${line}`);deps.chatLog.addSystem(`[local] exit ${code??`?`}${signal?` (signal ${String(signal)})`:``}`),deps.tui.requestRender(),resolve()}),child.on(`error`,err=>{deps.chatLog.addSystem(`[local] error: ${String(err)}`),deps.tui.requestRender(),resolve()})})}}}var ModalOverlayFrame=class{constructor(inner){this.inner=inner,this._focused=!1}render(width){let innerWidth=Math.max(1,width-2),innerLines=this.inner.render(innerWidth),contentLines=innerLines.length>0?innerLines:[``],top=theme.modalBorder(`┌${`─`.repeat(innerWidth)}┐`),bottom=theme.modalBorder(`└${`─`.repeat(innerWidth)}┘`);return[top,...contentLines.map(line=>{let trimmed=truncateToWidth(line,innerWidth,``),pad=` `.repeat(Math.max(0,innerWidth-visibleWidth(trimmed)));return`${theme.modalBorder(`│`)}${theme.modalBg(`${trimmed}${pad}`)}${theme.modalBorder(`│`)}`}),bottom]}handleInput(data){this.inner.handleInput?.(data)}invalidate(){this.inner.invalidate()}get focused(){return this._focused}set focused(value){this._focused=value;let maybeFocusable=this.inner;typeof maybeFocusable.focused==`boolean`&&(maybeFocusable.focused=value)}};function createOverlayHandlers(host,fallbackFocus){return{openOverlay:component=>{host.showOverlay(new ModalOverlayFrame(component))},closeOverlay:()=>{if(host.hasOverlay()){host.hideOverlay();return}host.setFocus(fallbackFocus)}}}function createSessionActions(context){let{client,chatLog,tui,opts,state,agentNames,initialSessionInput,initialSessionAgentId,resolveSessionKey,updateHeader,updateFooter,updateAutocompleteProvider,setActivityStatus,clearLocalRunIds}=context,refreshSessionInfoPromise=Promise.resolve(),lastSessionDefaults=null,applyAgentsResult=result=>{state.agentDefaultId=normalizeAgentId(result.defaultId),state.sessionMainKey=normalizeMainKey(result.mainKey),state.sessionScope=result.scope??state.sessionScope,state.agents=result.agents.map(agent=>({id:normalizeAgentId(agent.id),name:agent.name?.trim()||void 0})),agentNames.clear();for(let agent of state.agents)agent.name&&agentNames.set(agent.id,agent.name);if(state.initialSessionApplied)state.agents.some(agent=>agent.id===state.currentAgentId)||(state.currentAgentId=state.agents[0]?.id??normalizeAgentId(result.defaultId??state.currentAgentId));else{initialSessionAgentId?state.agents.some(agent=>agent.id===initialSessionAgentId)&&(state.currentAgentId=initialSessionAgentId):state.agents.some(agent=>agent.id===state.currentAgentId)||(state.currentAgentId=state.agents[0]?.id??normalizeAgentId(result.defaultId??state.currentAgentId));let nextSessionKey=resolveSessionKey(initialSessionInput);nextSessionKey!==state.currentSessionKey&&(state.currentSessionKey=nextSessionKey),state.initialSessionApplied=!0}updateHeader(),updateFooter()},refreshAgents=async()=>{try{applyAgentsResult(await client.listAgents())}catch(err){chatLog.addSystem(`agents list failed: ${String(err)}`)}},updateAgentFromSessionKey=key=>{let parsed=parseAgentSessionKey(key);if(!parsed)return;let next=normalizeAgentId(parsed.agentId);next!==state.currentAgentId&&(state.currentAgentId=next)},resolveModelSelection=entry=>{if(entry?.modelProvider||entry?.model)return{modelProvider:entry.modelProvider??state.sessionInfo.modelProvider,model:entry.model??state.sessionInfo.model};let overrideModel=entry?.modelOverride?.trim();return overrideModel?{modelProvider:entry?.providerOverride?.trim()||state.sessionInfo.modelProvider,model:overrideModel}:{modelProvider:state.sessionInfo.modelProvider,model:state.sessionInfo.model}},applySessionInfo=params=>{let entry=params.entry??void 0,defaults=params.defaults??lastSessionDefaults??void 0,previousDefaults=lastSessionDefaults,defaultsChanged=params.defaults?previousDefaults?.model!==params.defaults.model||previousDefaults?.modelProvider!==params.defaults.modelProvider||previousDefaults?.contextTokens!==params.defaults.contextTokens:!1;params.defaults&&(lastSessionDefaults=params.defaults);let entryUpdatedAt=entry?.updatedAt??null,currentUpdatedAt=state.sessionInfo.updatedAt??null,modelChanged=entry?.modelProvider!==void 0&&entry.modelProvider!==state.sessionInfo.modelProvider||entry?.model!==void 0&&entry.model!==state.sessionInfo.model;if(!params.force&&entryUpdatedAt!==null&¤tUpdatedAt!==null&&entryUpdatedAt<currentUpdatedAt&&!defaultsChanged&&!modelChanged)return;let next={...state.sessionInfo};entry?.thinkingLevel!==void 0&&(next.thinkingLevel=entry.thinkingLevel),entry?.verboseLevel!==void 0&&(next.verboseLevel=entry.verboseLevel),entry?.reasoningLevel!==void 0&&(next.reasoningLevel=entry.reasoningLevel),entry?.responseUsage!==void 0&&(next.responseUsage=entry.responseUsage),entry?.inputTokens!==void 0&&(next.inputTokens=entry.inputTokens),entry?.outputTokens!==void 0&&(next.outputTokens=entry.outputTokens),entry?.totalTokens!==void 0&&(next.totalTokens=entry.totalTokens),(entry?.contextTokens!==void 0||defaults?.contextTokens!==void 0)&&(next.contextTokens=entry?.contextTokens??defaults?.contextTokens??state.sessionInfo.contextTokens),entry?.displayName!==void 0&&(next.displayName=entry.displayName),entry?.updatedAt!==void 0&&(next.updatedAt=entry.updatedAt);let selection=resolveModelSelection(entry);selection.modelProvider!==void 0&&(next.modelProvider=selection.modelProvider),selection.model!==void 0&&(next.model=selection.model),state.sessionInfo=next,updateAutocompleteProvider(),updateFooter(),tui.requestRender()},runRefreshSessionInfo=async()=>{try{let listAgentId=(()=>{if(state.currentSessionKey===`global`||state.currentSessionKey===`unknown`)return;let parsed=parseAgentSessionKey(state.currentSessionKey);return parsed?.agentId?normalizeAgentId(parsed.agentId):state.currentAgentId})(),result=await client.listSessions({includeGlobal:!1,includeUnknown:!1,agentId:listAgentId}),normalizeMatchKey=key=>parseAgentSessionKey(key)?.rest??key,currentMatchKey=normalizeMatchKey(state.currentSessionKey),entry=result.sessions.find(row=>row.key===state.currentSessionKey?!0:normalizeMatchKey(row.key)===currentMatchKey);entry?.key&&entry.key!==state.currentSessionKey&&(updateAgentFromSessionKey(entry.key),state.currentSessionKey=entry.key,updateHeader()),applySessionInfo({entry,defaults:result.defaults})}catch(err){chatLog.addSystem(`sessions list failed: ${String(err)}`)}},refreshSessionInfo=async()=>{refreshSessionInfoPromise=refreshSessionInfoPromise.then(runRefreshSessionInfo,runRefreshSessionInfo),await refreshSessionInfoPromise},applySessionInfoFromPatch=result=>{if(!result?.entry)return;result.key&&result.key!==state.currentSessionKey&&(updateAgentFromSessionKey(result.key),state.currentSessionKey=result.key,updateHeader());let resolved=result.resolved;applySessionInfo({entry:resolved&&(resolved.modelProvider||resolved.model)?{...result.entry,modelProvider:resolved.modelProvider??result.entry.modelProvider,model:resolved.model??result.entry.model}:result.entry,force:!0})},loadHistory=async()=>{try{let record=await client.loadHistory({sessionKey:state.currentSessionKey,limit:opts.historyLimit??200});state.currentSessionId=typeof record.sessionId==`string`?record.sessionId:null,state.sessionInfo.thinkingLevel=record.thinkingLevel??state.sessionInfo.thinkingLevel,state.sessionInfo.verboseLevel=record.verboseLevel??state.sessionInfo.verboseLevel;let showTools=(state.sessionInfo.verboseLevel??`off`)!==`off`;chatLog.clearAll(),chatLog.addSystem(`session ${state.currentSessionKey}`);for(let entry of record.messages??[]){if(!entry||typeof entry!=`object`)continue;let message=entry;if(isCommandMessage(message)){let text=extractTextFromMessage(message);text&&chatLog.addSystem(text);continue}if(message.role===`user`){let text=extractTextFromMessage(message);text&&chatLog.addUser(text);continue}if(message.role===`assistant`){let text=extractTextFromMessage(message,{includeThinking:state.showThinking});text&&chatLog.finalizeAssistant(text);continue}if(message.role===`toolResult`){if(!showTools)continue;let toolCallId=asString(message.toolCallId,``),toolName=asString(message.toolName,`tool`);chatLog.startTool(toolCallId,toolName,{}).setResult({content:Array.isArray(message.content)?message.content:[],details:typeof message.details==`object`&&message.details?message.details:void 0},{isError:!!message.isError})}}state.historyLoaded=!0}catch(err){chatLog.addSystem(`history failed: ${String(err)}`)}await refreshSessionInfo(),tui.requestRender()};return{applyAgentsResult,refreshAgents,refreshSessionInfo,applySessionInfoFromPatch,loadHistory,setSession:async rawKey=>{let nextKey=resolveSessionKey(rawKey);updateAgentFromSessionKey(nextKey),state.currentSessionKey=nextKey,state.activeChatRunId=null,state.currentSessionId=null,state.historyLoaded=!1,clearLocalRunIds?.(),updateHeader(),updateFooter(),await loadHistory();try{let handoff=await loadLatestSessionHandoff(process.cwd());if(handoff){let lines=[`Resuming from session ${handoff.sessionId.slice(0,8)} (${handoff.timestamp.slice(0,10)})`,`Summary: ${handoff.summary}`];handoff.decisions.length>0&&lines.push(`Decisions: ${handoff.decisions.map(d=>`• ${d}`).join(` `)}`),handoff.nextSteps.length>0&&lines.push(`Next steps: ${handoff.nextSteps.map(s=>`• ${s}`).join(` `)}`),handoff.openQuestions.length>0&&lines.push(`Open questions: ${handoff.openQuestions.map(q=>`• ${q}`).join(` `)}`),chatLog.addSystem(lines.join(`
|
|
25
25
|
`))}}catch{}},abortActive:async()=>{if(!state.activeChatRunId){chatLog.addSystem(`no active run`),tui.requestRender();return}try{await client.abortChat({sessionKey:state.currentSessionKey,runId:state.activeChatRunId}),setActivityStatus(`aborted`)}catch(err){chatLog.addSystem(`abort failed: ${String(err)}`),setActivityStatus(`abort failed`)}tui.requestRender()}}}const defaultWaitingPhrases=[`flibbertigibbeting`,`kerfuffling`,`dillydallying`,`twiddling thumbs`,`noodling`,`bamboozling`,`moseying`,`hobnobbing`,`pondering`,`conjuring`];function pickWaitingPhrase(tick,phrases=defaultWaitingPhrases){return phrases[Math.floor(tick/10)%phrases.length]??phrases[0]??`waiting`}function shimmerText(theme,text,tick){let hi=ch=>theme.bold(theme.accentSoft(ch)),pos=tick%(text.length+6),start=Math.max(0,pos-6),end=Math.min(text.length-1,pos),out=``;for(let i=0;i<text.length;i++){let ch=text[i];out+=i>=start&&i<=end?hi(ch):theme.dim(ch)}return out}function buildWaitingStatusMessage(params){let phrase=pickWaitingPhrase(params.tick,params.phrases);return`${shimmerText(params.theme,`${phrase}…`,params.tick)} • ${params.elapsed} | ${params.connectionStatus}`}function createEditorSubmitHandler(params){return text=>{let raw=text,value=raw.trim();if(params.editor.setText(``),value){if(raw.startsWith(`!`)&&raw!==`!`){params.editor.addToHistory(raw),params.handleBangLine(raw);return}if(params.editor.addToHistory(value),value.startsWith(`/`)){params.handleCommand(value);return}params.sendMessage(value)}}}function shouldEnableWindowsGitBashPasteFallback(params){if((params?.platform??process.platform)!==`win32`)return!1;let env=params?.env??process.env,msystem=(env.MSYSTEM??``).toUpperCase(),shell=env.SHELL??``,termProgram=(env.TERM_PROGRAM??``).toLowerCase();return msystem.startsWith(`MINGW`)||msystem.startsWith(`MSYS`)||shell.toLowerCase().includes(`bash`)?!0:termProgram.includes(`mintty`)}function createSubmitBurstCoalescer(params){let windowMs=Math.max(1,params.burstWindowMs??50),now=params.now??(()=>Date.now()),setTimer=params.setTimer??setTimeout,clearTimer=params.clearTimer??clearTimeout,pending=null,pendingAt=0,flushTimer=null,clearFlushTimer=()=>{flushTimer&&=(clearTimer(flushTimer),null)},flushPending=()=>{if(pending===null)return;let value=pending;pending=null,pendingAt=0,clearFlushTimer(),params.submit(value)},scheduleFlush=()=>{clearFlushTimer(),flushTimer=setTimer(()=>{flushPending()},windowMs)};return value=>{if(!params.enabled){params.submit(value);return}if(value.includes(`
|
|
26
26
|
`)){flushPending(),params.submit(value);return}let ts=now();if(pending===null){pending=value,pendingAt=ts,scheduleFlush();return}if(ts-pendingAt<=windowMs){pending=`${pending}\n${value}`,pendingAt=ts,scheduleFlush();return}flushPending(),pending=value,pendingAt=ts,scheduleFlush()}}function resolveTuiSessionKey(params){let trimmed=(params.raw??``).trim();return trimmed?trimmed===`global`||trimmed===`unknown`||trimmed.startsWith(`agent:`)?trimmed:`agent:${params.currentAgentId}:${trimmed}`:params.sessionScope===`global`?`global`:buildAgentMainSessionKey({agentId:params.currentAgentId,mainKey:params.sessionMainKey})}async function runTui(opts){let config=loadConfig(),initialSessionInput=(opts.session??``).trim(),sessionScope=config.session?.scope??`per-sender`,sessionMainKey=normalizeMainKey(config.session?.mainKey),agentDefaultId=resolveDefaultAgentId(config),currentAgentId=agentDefaultId,agents=[],agentNames=new Map,currentSessionKey=``,initialSessionApplied=!1,currentSessionId=null,activeChatRunId=null,historyLoaded=!1,isConnected=!1,wasDisconnected=!1,toolsExpanded=!1,loggingEnabled=config.logging?.enabled!==!1,showThinking=!1,localRunIds=new Set,deliverDefault=opts.deliver??!1,autoMessage=opts.message?.trim(),autoMessageSent=!1,sessionInfo={},lastCtrlCAt=0,activityStatus=`idle`,connectionStatus=`connecting`,statusTimeout=null,statusTimer=null,statusStartedAt=null,lastActivityStatus=activityStatus,setupInProgress=!1,projectName=null,workspaceState=null;Promise.all([loadProjectContext(process.cwd()).catch(()=>null),loadWorkspaceState(process.cwd()).catch(()=>null)]).then(([ctx,ws])=>{projectName=ctx?.projectName??null,workspaceState=ws});let state={get agentDefaultId(){return agentDefaultId},set agentDefaultId(value){agentDefaultId=value},get sessionMainKey(){return sessionMainKey},set sessionMainKey(value){sessionMainKey=value},get sessionScope(){return sessionScope},set sessionScope(value){sessionScope=value},get agents(){return agents},set agents(value){agents=value},get currentAgentId(){return currentAgentId},set currentAgentId(value){currentAgentId=value},get currentSessionKey(){return currentSessionKey},set currentSessionKey(value){currentSessionKey=value},get currentSessionId(){return currentSessionId},set currentSessionId(value){currentSessionId=value},get activeChatRunId(){return activeChatRunId},set activeChatRunId(value){activeChatRunId=value},get historyLoaded(){return historyLoaded},set historyLoaded(value){historyLoaded=value},get sessionInfo(){return sessionInfo},set sessionInfo(value){sessionInfo=value},get initialSessionApplied(){return initialSessionApplied},set initialSessionApplied(value){initialSessionApplied=value},get isConnected(){return isConnected},set isConnected(value){isConnected=value},get autoMessageSent(){return autoMessageSent},set autoMessageSent(value){autoMessageSent=value},get toolsExpanded(){return toolsExpanded},set toolsExpanded(value){toolsExpanded=value},get showThinking(){return showThinking},set showThinking(value){showThinking=value},get connectionStatus(){return connectionStatus},set connectionStatus(value){connectionStatus=value},get activityStatus(){return activityStatus},set activityStatus(value){activityStatus=value},get statusTimeout(){return statusTimeout},set statusTimeout(value){statusTimeout=value},get lastCtrlCAt(){return lastCtrlCAt},set lastCtrlCAt(value){lastCtrlCAt=value},get loggingEnabled(){return loggingEnabled},set loggingEnabled(value){loggingEnabled=value}},noteLocalRunId=runId=>{if(runId&&(localRunIds.add(runId),localRunIds.size>200)){let[first]=localRunIds;first&&localRunIds.delete(first)}},forgetLocalRunId=runId=>{localRunIds.delete(runId)},isLocalRunId=runId=>localRunIds.has(runId),clearLocalRunIds=()=>{localRunIds.clear()},client=new GatewayChatClient({url:opts.url,token:opts.token,password:opts.password}),tui=new TUI(new ProcessTerminal),header=new Text(``,1,0),statusContainer=new Container,statusBodyContainer=new Container,statusTraceText=new Text(``,1,0),footer=new Text(``,1,0),chatLog=new ChatLog,editor=new CustomEditor(tui,editorTheme),root=new Container;root.addChild(header),root.addChild(chatLog),statusContainer.addChild(statusBodyContainer),statusContainer.addChild(statusTraceText),root.addChild(statusContainer),root.addChild(footer),root.addChild(editor);let updateAutocompleteProvider=()=>{editor.setAutocompleteProvider(new CombinedAutocompleteProvider(getSlashCommands({cfg:config,provider:sessionInfo.modelProvider,model:sessionInfo.model}),process.cwd()))};tui.addChild(root),tui.setFocus(editor);let formatSessionKey=key=>key===`global`||key===`unknown`?key:parseAgentSessionKey(key)?.rest??key,formatAgentLabel=id=>{let name=agentNames.get(id);return name?`${id} (${name})`:id},resolveSessionKey=raw=>resolveTuiSessionKey({raw,sessionScope,currentAgentId,sessionMainKey});currentSessionKey=resolveSessionKey(initialSessionInput);let updateHeader=()=>{let sessionLabel=formatSessionKey(currentSessionKey),agentLabel=formatAgentLabel(currentAgentId),projectPart=projectName?` · ${projectName}`:``,syncPart=workspaceState?.lastSyncedAt?` [synced ${formatTimeAgo(Date.now()-new Date(workspaceState.lastSyncedAt).getTime())}]`:``;header.setText(theme.header(`builderforce tui${projectPart}${syncPart} - ${client.connection.url} - agent ${agentLabel} - session ${sessionLabel}`))},busyStates=new Set([`sending`,`waiting`,`streaming`,`running`]),statusText=null,statusLoader=null,statusTraceLines=[],renderStatusTrace=()=>{statusTraceText.setText(theme.dim(statusTraceLines.join(`
|
|
27
|
-
`)))},reportAction=text=>{let message=text.trim();message&&(statusTraceLines.push(`• ${message}`),statusTraceLines.length>14&&statusTraceLines.splice(0,statusTraceLines.length-14),renderStatusTrace())},formatElapsed=startMs=>{let totalSeconds=Math.max(0,Math.floor((Date.now()-startMs)/1e3));return totalSeconds<60?`${totalSeconds}s`:`${Math.floor(totalSeconds/60)}m ${totalSeconds%60}s`},ensureStatusText=()=>{statusText||(statusBodyContainer.clear(),statusLoader?.stop(),statusLoader=null,statusText=new Text(``,1,0),statusBodyContainer.addChild(statusText))},ensureStatusLoader=()=>{statusLoader||(statusBodyContainer.clear(),statusText=null,statusLoader=new Loader(tui,spinner=>theme.accent(spinner),text=>theme.bold(theme.accentSoft(text)),``),statusBodyContainer.addChild(statusLoader))},waitingTick=0,waitingTimer=null,waitingPhrase=null,updateBusyStatusMessage=()=>{if(!statusLoader||!statusStartedAt)return;let elapsed=formatElapsed(statusStartedAt);if(activityStatus===`waiting`){waitingTick++,statusLoader.setMessage(buildWaitingStatusMessage({theme,tick:waitingTick,elapsed,connectionStatus,phrases:waitingPhrase?[waitingPhrase]:void 0}));return}statusLoader.setMessage(`${activityStatus} • ${elapsed} | ${connectionStatus}`)},startStatusTimer=()=>{statusTimer||=setInterval(()=>{busyStates.has(activityStatus)&&updateBusyStatusMessage()},1e3)},stopStatusTimer=()=>{statusTimer&&=(clearInterval(statusTimer),null)},startWaitingTimer=()=>{waitingTimer||=(waitingPhrase||=defaultWaitingPhrases[Math.floor(Math.random()*defaultWaitingPhrases.length)]??defaultWaitingPhrases[0]??`waiting`,waitingTick=0,setInterval(()=>{activityStatus===`waiting`&&updateBusyStatusMessage()},120))},stopWaitingTimer=()=>{waitingTimer&&(clearInterval(waitingTimer),waitingTimer=null,waitingPhrase=null)},renderStatus=()=>{if(busyStates.has(activityStatus))(!statusStartedAt||lastActivityStatus!==activityStatus)&&(statusStartedAt=Date.now()),ensureStatusLoader(),activityStatus===`waiting`?(stopStatusTimer(),startWaitingTimer()):(stopWaitingTimer(),startStatusTimer()),updateBusyStatusMessage();else{statusStartedAt=null,stopStatusTimer(),stopWaitingTimer(),statusLoader?.stop(),statusLoader=null,ensureStatusText();let text=activityStatus?`${connectionStatus} | ${activityStatus}`:connectionStatus;statusText?.setText(theme.dim(text))}lastActivityStatus=activityStatus},setConnectionStatus=(text,ttlMs)=>{let previous=connectionStatus;connectionStatus=text,text!==previous&&reportAction(`connection: ${text}`),renderStatus(),statusTimeout&&clearTimeout(statusTimeout),ttlMs&&ttlMs>0&&(statusTimeout=setTimeout(()=>{connectionStatus=isConnected?`connected`:`disconnected`,renderStatus()},ttlMs))},setActivityStatus=text=>{activityStatus=text,renderStatus()},updateFooter=()=>{let sessionKeyLabel=formatSessionKey(currentSessionKey),sessionLabel=sessionInfo.displayName?`${sessionKeyLabel} (${sessionInfo.displayName})`:sessionKeyLabel,agentLabel=formatAgentLabel(currentAgentId),modelLabel=sessionInfo.model?sessionInfo.modelProvider?`${sessionInfo.modelProvider}/${sessionInfo.model}`:sessionInfo.model:`unknown`,tokens=formatTokens(sessionInfo.totalTokens??null,sessionInfo.contextTokens??null),think=sessionInfo.thinkingLevel??`off`,verbose=sessionInfo.verboseLevel??`off`,reasoning=sessionInfo.reasoningLevel??`off`,reasoningLabel=reasoning===`on`?`reasoning`:reasoning===`stream`?`reasoning:stream`:null,localBrainLabel=config.localBrain?.enabled?`local brain`:null,footerParts=[`agent ${agentLabel}`,`session ${sessionLabel}`,modelLabel,localBrainLabel,think===`off`?null:`think ${think}`,verbose===`off`?null:`verbose ${verbose}`,reasoningLabel,tokens].filter(Boolean);footer.setText(theme.dim(footerParts.join(` | `)))},{openOverlay,closeOverlay}=createOverlayHandlers(tui,editor),{refreshAgents,refreshSessionInfo,applySessionInfoFromPatch,loadHistory,setSession,abortActive}=createSessionActions({client,chatLog,tui,opts,state,agentNames,initialSessionInput,initialSessionAgentId:(()=>{if(!initialSessionInput)return null;let parsed=parseAgentSessionKey(initialSessionInput);return parsed?normalizeAgentId(parsed.agentId):null})(),resolveSessionKey,updateHeader,updateFooter,updateAutocompleteProvider,setActivityStatus,clearLocalRunIds}),{handleChatEvent,handleAgentEvent}=createEventHandlers({chatLog,tui,state,setActivityStatus,reportAction,refreshSessionInfo,loadHistory,isLocalRunId,forgetLocalRunId,clearLocalRunIds}),{handleCommand,sendMessage,openModelSelector,openAgentSelector,openSessionSelector}=createCommandHandlers({client,chatLog,tui,opts,state,deliverDefault,openOverlay,closeOverlay,refreshSessionInfo,applySessionInfoFromPatch,updateFooter,loadHistory,setSession,refreshAgents,abortActive,setActivityStatus,reportAction,formatSessionKey,noteLocalRunId,forgetLocalRunId,onSetup:async()=>{if(setupInProgress){chatLog.addSystem(`Setup is already running.`),tui.requestRender();return}setupInProgress=!0;try{chatLog.addSystem(`Stopping TUI — setup wizard starting…`),tui.requestRender(),await new Promise(r=>setTimeout(r,80)),client.stop(),tui.stop(),await new Promise(r=>setTimeout(r,50));let{restoreTerminalState}=await import(`./restore-DsNJCsuC.js`),{runInteractiveOnboarding}=await import(`./onboard-interactive-
|
|
27
|
+
`)))},reportAction=text=>{let message=text.trim();message&&(statusTraceLines.push(`• ${message}`),statusTraceLines.length>14&&statusTraceLines.splice(0,statusTraceLines.length-14),renderStatusTrace())},formatElapsed=startMs=>{let totalSeconds=Math.max(0,Math.floor((Date.now()-startMs)/1e3));return totalSeconds<60?`${totalSeconds}s`:`${Math.floor(totalSeconds/60)}m ${totalSeconds%60}s`},ensureStatusText=()=>{statusText||(statusBodyContainer.clear(),statusLoader?.stop(),statusLoader=null,statusText=new Text(``,1,0),statusBodyContainer.addChild(statusText))},ensureStatusLoader=()=>{statusLoader||(statusBodyContainer.clear(),statusText=null,statusLoader=new Loader(tui,spinner=>theme.accent(spinner),text=>theme.bold(theme.accentSoft(text)),``),statusBodyContainer.addChild(statusLoader))},waitingTick=0,waitingTimer=null,waitingPhrase=null,updateBusyStatusMessage=()=>{if(!statusLoader||!statusStartedAt)return;let elapsed=formatElapsed(statusStartedAt);if(activityStatus===`waiting`){waitingTick++,statusLoader.setMessage(buildWaitingStatusMessage({theme,tick:waitingTick,elapsed,connectionStatus,phrases:waitingPhrase?[waitingPhrase]:void 0}));return}statusLoader.setMessage(`${activityStatus} • ${elapsed} | ${connectionStatus}`)},startStatusTimer=()=>{statusTimer||=setInterval(()=>{busyStates.has(activityStatus)&&updateBusyStatusMessage()},1e3)},stopStatusTimer=()=>{statusTimer&&=(clearInterval(statusTimer),null)},startWaitingTimer=()=>{waitingTimer||=(waitingPhrase||=defaultWaitingPhrases[Math.floor(Math.random()*defaultWaitingPhrases.length)]??defaultWaitingPhrases[0]??`waiting`,waitingTick=0,setInterval(()=>{activityStatus===`waiting`&&updateBusyStatusMessage()},120))},stopWaitingTimer=()=>{waitingTimer&&(clearInterval(waitingTimer),waitingTimer=null,waitingPhrase=null)},renderStatus=()=>{if(busyStates.has(activityStatus))(!statusStartedAt||lastActivityStatus!==activityStatus)&&(statusStartedAt=Date.now()),ensureStatusLoader(),activityStatus===`waiting`?(stopStatusTimer(),startWaitingTimer()):(stopWaitingTimer(),startStatusTimer()),updateBusyStatusMessage();else{statusStartedAt=null,stopStatusTimer(),stopWaitingTimer(),statusLoader?.stop(),statusLoader=null,ensureStatusText();let text=activityStatus?`${connectionStatus} | ${activityStatus}`:connectionStatus;statusText?.setText(theme.dim(text))}lastActivityStatus=activityStatus},setConnectionStatus=(text,ttlMs)=>{let previous=connectionStatus;connectionStatus=text,text!==previous&&reportAction(`connection: ${text}`),renderStatus(),statusTimeout&&clearTimeout(statusTimeout),ttlMs&&ttlMs>0&&(statusTimeout=setTimeout(()=>{connectionStatus=isConnected?`connected`:`disconnected`,renderStatus()},ttlMs))},setActivityStatus=text=>{activityStatus=text,renderStatus()},updateFooter=()=>{let sessionKeyLabel=formatSessionKey(currentSessionKey),sessionLabel=sessionInfo.displayName?`${sessionKeyLabel} (${sessionInfo.displayName})`:sessionKeyLabel,agentLabel=formatAgentLabel(currentAgentId),modelLabel=sessionInfo.model?sessionInfo.modelProvider?`${sessionInfo.modelProvider}/${sessionInfo.model}`:sessionInfo.model:`unknown`,tokens=formatTokens(sessionInfo.totalTokens??null,sessionInfo.contextTokens??null),think=sessionInfo.thinkingLevel??`off`,verbose=sessionInfo.verboseLevel??`off`,reasoning=sessionInfo.reasoningLevel??`off`,reasoningLabel=reasoning===`on`?`reasoning`:reasoning===`stream`?`reasoning:stream`:null,localBrainLabel=config.localBrain?.enabled?`local brain`:null,footerParts=[`agent ${agentLabel}`,`session ${sessionLabel}`,modelLabel,localBrainLabel,think===`off`?null:`think ${think}`,verbose===`off`?null:`verbose ${verbose}`,reasoningLabel,tokens].filter(Boolean);footer.setText(theme.dim(footerParts.join(` | `)))},{openOverlay,closeOverlay}=createOverlayHandlers(tui,editor),{refreshAgents,refreshSessionInfo,applySessionInfoFromPatch,loadHistory,setSession,abortActive}=createSessionActions({client,chatLog,tui,opts,state,agentNames,initialSessionInput,initialSessionAgentId:(()=>{if(!initialSessionInput)return null;let parsed=parseAgentSessionKey(initialSessionInput);return parsed?normalizeAgentId(parsed.agentId):null})(),resolveSessionKey,updateHeader,updateFooter,updateAutocompleteProvider,setActivityStatus,clearLocalRunIds}),{handleChatEvent,handleAgentEvent}=createEventHandlers({chatLog,tui,state,setActivityStatus,reportAction,refreshSessionInfo,loadHistory,isLocalRunId,forgetLocalRunId,clearLocalRunIds}),{handleCommand,sendMessage,openModelSelector,openAgentSelector,openSessionSelector}=createCommandHandlers({client,chatLog,tui,opts,state,deliverDefault,openOverlay,closeOverlay,refreshSessionInfo,applySessionInfoFromPatch,updateFooter,loadHistory,setSession,refreshAgents,abortActive,setActivityStatus,reportAction,formatSessionKey,noteLocalRunId,forgetLocalRunId,onSetup:async()=>{if(setupInProgress){chatLog.addSystem(`Setup is already running.`),tui.requestRender();return}setupInProgress=!0;try{chatLog.addSystem(`Stopping TUI — setup wizard starting…`),tui.requestRender(),await new Promise(r=>setTimeout(r,80)),client.stop(),tui.stop(),await new Promise(r=>setTimeout(r,50));let{restoreTerminalState}=await import(`./restore-DsNJCsuC.js`),{runInteractiveOnboarding}=await import(`./onboard-interactive-OUNsvlh0.js`),{startGatewayBackground}=await import(`./tui-setup-check-BEHm9wwo.js`);restoreTerminalState(`pre-setup-wizard`,{resumeStdinIfPaused:!0}),await new Promise(r=>setTimeout(r,150));try{await runInteractiveOnboarding({flow:`quickstart`})}catch(err){process.stderr.write(`Setup wizard failed: ${String(err)}\n`)}finally{restoreTerminalState(`post-setup-wizard`,{resumeStdinIfPaused:!0})}await startGatewayBackground(),setConnectionStatus(`restarting tui`),setActivityStatus(`idle`),updateHeader(),updateFooter(),tui.start(),tui.setFocus(editor),tui.requestRender(),client.start()}finally{setupInProgress=!1}},config}),{runLocalShellLine}=createLocalShellRunner({chatLog,tui,openOverlay,closeOverlay});updateAutocompleteProvider(),editor.onSubmit=createSubmitBurstCoalescer({submit:createEditorSubmitHandler({editor,handleCommand,sendMessage,handleBangLine:runLocalShellLine}),enabled:shouldEnableWindowsGitBashPasteFallback()}),editor.onEscape=()=>{abortActive()},editor.onCtrlC=()=>{let now=Date.now();if(editor.getText().trim().length>0){editor.setText(``),setActivityStatus(`cleared input`),tui.requestRender();return}now-lastCtrlCAt<1e3&&(client.stop(),tui.stop(),process.exit(0)),lastCtrlCAt=now,setActivityStatus(`press ctrl+c again to exit`),tui.requestRender()},editor.onCtrlD=()=>{client.stop(),tui.stop(),process.exit(0)},editor.onCtrlO=()=>{toolsExpanded=!toolsExpanded,chatLog.setToolsExpanded(toolsExpanded),setActivityStatus(toolsExpanded?`tools expanded`:`tools collapsed`),tui.requestRender()},editor.onCtrlL=()=>{openModelSelector()},editor.onCtrlG=()=>{openAgentSelector()},editor.onCtrlP=()=>{openSessionSelector()},editor.onCtrlT=()=>{showThinking=!showThinking,loadHistory()},client.onEvent=evt=>{evt.event===`chat`&&handleChatEvent(evt.payload),evt.event===`agent`&&handleAgentEvent(evt.payload)},client.onConnected=()=>{isConnected=!0;let reconnected=wasDisconnected;wasDisconnected=!1,setConnectionStatus(`connected`),(async()=>{await refreshAgents(),updateHeader(),await refreshSessionInfo(),await loadHistory(),setConnectionStatus(reconnected?`gateway reconnected`:`gateway connected`,4e3),tui.requestRender(),!autoMessageSent&&autoMessage&&(autoMessageSent=!0,await sendMessage(autoMessage)),updateFooter(),tui.requestRender()})()},client.onDisconnected=reason=>{let isFirstFailure=!wasDisconnected&&!isConnected;isConnected=!1,wasDisconnected=!0,historyLoaded=!1,setConnectionStatus(`gateway disconnected: ${reason?.trim()?reason.trim():`closed`}`,5e3),setActivityStatus(`idle`),isFirstFailure&&chatLog.addSystem(`Gateway not reachable. Type /setup or /onboard to run the setup wizard, or /gateway restart to restart the gateway.`),updateFooter(),tui.requestRender()},client.onGap=info=>{setConnectionStatus(`event gap: expected ${info.expected}, got ${info.received}`,5e3),tui.requestRender()},updateHeader(),setConnectionStatus(`connecting`),updateFooter(),tui.start(),client.start(),await new Promise(resolve=>{let finish=()=>resolve();process.once(`exit`,finish),process.once(`SIGINT`,finish),process.once(`SIGTERM`,finish)})}export{runTui as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import{B as theme}from"./utils-DbaBVFaK.js";import"./embedded-helpers-
|
|
1
|
+
import"./paths-5FcIFMsj.js";import{B as theme}from"./utils-DbaBVFaK.js";import"./embedded-helpers-C9jpiwlw.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-DG9J_VTz.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-BLBq4T2o.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BgV_FYSq.js";import"./model-catalog-DjNiebr7.js";import"./sandbox-C4AKi2EX.js";import"./chrome-DXt86tmV.js";import"./tailscale-DLkpGquM.js";import"./auth-lebUHrkd.js";import"./server-context-CQ2v4BAx.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./routes-DZntyPY6.js";import"./redact-BHdfp2MZ.js";import"./errors-B1MIg3g-.js";import"./paths-cR8ct-Y3.js";import"./ssrf-p9k-iapc.js";import"./image-ops-C8IUQKjn.js";import"./store-CmHBQ-yX.js";import"./ports-DgmEDNOm.js";import"./trash-DD2Hc5oq.js";import"./sessions-BuZVmOWt.js";import"./message-channel-D_jXxXQj.js";import"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./accounts-rmXEiebi.js";import"./accounts-BLueHgKj.js";import"./bindings-DR59065T.js";import"./paths-DJ6rztqJ.js";import"./tool-images-B7b_OiMz.js";import"./tool-display-ByOZtWvA.js";import"./project-context-store-wcq7lXuI.js";import"./client-xfoidwPI.js";import"./call-T8ciwMTA.js";import"./builderforcellm-syscheck-F5JMAr3p.js";import{t as formatDocsLink}from"./links-BgWWaaOT.js";import"./usage-format-DGf8ZWPH.js";import"./project-context-CJj0Inz-.js";import{t as parseTimeoutMs}from"./parse-timeout-DgbvuHbz.js";import"./transformers-stream-D7nRu4Qu.js";import"./builderforce-directory-sync-DAH62b3b.js";import"./shared-C2orjbTD.js";import"./model-picker-EIhpfOZa.js";import"./auth-choice.apply.transformers-Df9l_jRz.js";import{t as runTui}from"./tui-DnVRxfI8.js";import"./tui-stream-assembler-8ud9oyMK.js";function registerTuiCli(program){program.command(`tui`).description(`Open a terminal UI connected to the Gateway`).option(`--url <url>`,`Gateway WebSocket URL (defaults to gateway.remote.url when configured)`).option(`--token <token>`,`Gateway token (if required)`).option(`--password <password>`,`Gateway password (if required)`).option(`--session <key>`,`Session key (default: "main", or "global" when scope is global)`).option(`--deliver`,`Deliver assistant replies`,!1).option(`--thinking <level>`,`Thinking level override`).option(`--message <text>`,`Send an initial message after connecting`).option(`--timeout-ms <ms>`,`Agent timeout in ms (defaults to agents.defaults.timeoutSeconds)`).option(`--history-limit <n>`,`History entries to load`,`200`).addHelpText(`after`,()=>`\n${theme.muted(`Docs:`)} ${formatDocsLink(`/cli/tui`,`docs.builderforce.ai/cli/tui`)}\n`).action(async opts=>{try{let{checkIfSetupNeeded}=await import(`./tui-setup-check-DK8vdhLI.js`),setupCheck=process.env.BUILDERFORCE_AGENTS_SKIP_SETUP_CHECK===`1`?{needed:!1}:await checkIfSetupNeeded();if(setupCheck.needed){defaultRuntime.log(theme.muted(setupCheck.hint));let{runInteractiveOnboarding}=await import(`./onboard-interactive-J_ObFzeW.js`);await runInteractiveOnboarding({flow:`quickstart`});let{startGatewayBackground}=await import(`./tui-setup-check-DK8vdhLI.js`);await startGatewayBackground()||defaultRuntime.log(theme.muted(`Gateway not reachable yet — TUI will retry when it connects.`))}let timeoutMs=parseTimeoutMs(opts.timeoutMs);opts.timeoutMs!==void 0&&timeoutMs===void 0&&defaultRuntime.error(`warning: invalid --timeout-ms "${String(opts.timeoutMs)}"; ignoring`);let historyLimit=Number.parseInt(String(opts.historyLimit??`200`),10);if(process.env.BUILDERFORCE_AGENTS_INK_TUI===`1`){let{runInkSession}=await import(`./ink-session-N8wCBzwk.js`);await runInkSession({sessionKey:opts.session?.trim()||`main`,connection:{url:opts.url,token:opts.token,password:opts.password},showThinking:typeof opts.thinking==`string`&&opts.thinking!==`off`});return}await runTui({url:opts.url,token:opts.token,password:opts.password,session:opts.session,deliver:!!opts.deliver,thinking:opts.thinking,message:opts.message,timeoutMs,historyLimit:Number.isNaN(historyLimit)?void 0:historyLimit})}catch(err){defaultRuntime.error(String(err)),defaultRuntime.exit(1)}})}export{registerTuiCli};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-
|
|
1
|
+
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{z as theme}from"./utils-BP60e80M.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-pt7Tr4HA.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-D9hC2aG0.js";import"./manifest-registry-009gLJ4l.js";import"./config-BpChMIJ6.js";import"./model-discovery-D0i1JpiL.js";import"./model-catalog-BeBXvbFm.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./client-CGgp3zkQ.js";import"./call-Du2LiaX6.js";import"./message-channel-z5YRpR2d.js";import"./sessions-BA8Se_bT.js";import"./project-context-store-CIUcwUP_.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./accounts-Cx82nj4E.js";import"./image-ops-CotJhwRR.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./embedded-helpers-DdU30lmt.js";import"./sandbox-DvKMuAXL.js";import"./chrome-CFmcixaE.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-CttALzrW.js";import"./routes-_iZdG1Fo.js";import"./paths-BnOjueoX.js";import"./ssrf-DJXLYZ0d.js";import"./store-DHD2IEgd.js";import"./ports-DTku9NSx.js";import"./trash-C3zmJ_O7.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./tool-images-CCpqFtrL.js";import"./tool-display-Cs4hDP1f.js";import"./builderforcellm-syscheck-9ksvqHYX.js";import"./usage-format-5sp5AMSu.js";import"./project-context-D3Mx4maV.js";import{t as parseTimeoutMs}from"./parse-timeout-BvepsazJ.js";import{t as formatDocsLink}from"./links-BKzP7VVP.js";import"./transformers-stream-Buj40qHl.js";import"./builderforce-directory-sync-DQ6u60yX.js";import"./shared-BBOiNdjf.js";import"./model-picker-CGDNPRPc.js";import"./auth-choice.apply.transformers-DmdxpHGz.js";import{t as runTui}from"./tui-JfWoLGIV.js";import"./tui-stream-assembler-Br15rhRH.js";function registerTuiCli(program){program.command(`tui`).description(`Open a terminal UI connected to the Gateway`).option(`--url <url>`,`Gateway WebSocket URL (defaults to gateway.remote.url when configured)`).option(`--token <token>`,`Gateway token (if required)`).option(`--password <password>`,`Gateway password (if required)`).option(`--session <key>`,`Session key (default: "main", or "global" when scope is global)`).option(`--deliver`,`Deliver assistant replies`,!1).option(`--thinking <level>`,`Thinking level override`).option(`--message <text>`,`Send an initial message after connecting`).option(`--timeout-ms <ms>`,`Agent timeout in ms (defaults to agents.defaults.timeoutSeconds)`).option(`--history-limit <n>`,`History entries to load`,`200`).addHelpText(`after`,()=>`\n${theme.muted(`Docs:`)} ${formatDocsLink(`/cli/tui`,`docs.builderforce.ai/cli/tui`)}\n`).action(async opts=>{try{let{checkIfSetupNeeded}=await import(`./tui-setup-check-BEHm9wwo.js`),setupCheck=process.env.BUILDERFORCE_AGENTS_SKIP_SETUP_CHECK===`1`?{needed:!1}:await checkIfSetupNeeded();if(setupCheck.needed){defaultRuntime.log(theme.muted(setupCheck.hint));let{runInteractiveOnboarding}=await import(`./onboard-interactive-OUNsvlh0.js`);await runInteractiveOnboarding({flow:`quickstart`});let{startGatewayBackground}=await import(`./tui-setup-check-BEHm9wwo.js`);await startGatewayBackground()||defaultRuntime.log(theme.muted(`Gateway not reachable yet — TUI will retry when it connects.`))}let timeoutMs=parseTimeoutMs(opts.timeoutMs);opts.timeoutMs!==void 0&&timeoutMs===void 0&&defaultRuntime.error(`warning: invalid --timeout-ms "${String(opts.timeoutMs)}"; ignoring`);let historyLimit=Number.parseInt(String(opts.historyLimit??`200`),10);if(process.env.BUILDERFORCE_AGENTS_INK_TUI===`1`){let{runInkSession}=await import(`./ink-session-Dt9Q4iH-.js`);await runInkSession({sessionKey:opts.session?.trim()||`main`,connection:{url:opts.url,token:opts.token,password:opts.password},showThinking:typeof opts.thinking==`string`&&opts.thinking!==`off`});return}await runTui({url:opts.url,token:opts.token,password:opts.password,session:opts.session,deliver:!!opts.deliver,thinking:opts.thinking,message:opts.message,timeoutMs,historyLimit:Number.isNaN(historyLimit)?void 0:historyLimit})}catch(err){defaultRuntime.error(String(err)),defaultRuntime.exit(1)}})}export{registerTuiCli};
|
|
@@ -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{a as readConfigFileSnapshot,r as loadConfig}from"./io-D9hC2aG0.js";import"./manifest-registry-009gLJ4l.js";function hasConfiguredModelOrAuth(config){let defaultsModel=config.agents?.defaults?.model,hasDefaultModel=typeof defaultsModel?.primary==`string`&&defaultsModel.primary.trim().length>0,hasModelCatalog=!!config.models&&Object.keys(config.models).length>0;return hasDefaultModel||hasModelCatalog}async function checkIfSetupNeeded(){try{let snapshot=await readConfigFileSnapshot();return snapshot.exists?hasConfiguredModelOrAuth(snapshot.config)?{needed:!1}:{needed:!0,hint:`Config exists but no model is configured — running setup.`}:{needed:!0,hint:`No config found — running first-time setup.`}}catch{return{needed:!1}}}async function startGatewayBackground(){try{let config=loadConfig(),port=config.gateway?.port??18789,bind=config.gateway?.bind??`loopback`,token=config.gateway?.auth?.token,args=[process.argv[1],`gateway`,`run`,`--port`,String(port),`--bind`,bind];token&&args.push(`--token`,token);let{buildGatewayConnectionDetails}=await import(`./call-D1Opj5ev.js`),{waitForGatewayReachable}=await import(`./onboard-helpers-DC-nMl-V.js`),{url}=buildGatewayConnectionDetails({config});if((await waitForGatewayReachable({url,token,deadlineMs:500})).ok)return!0;let{spawn}=await import(`node:child_process`);return spawn(process.execPath,args,{detached:!0,stdio:`ignore`,windowsHide:!0,cwd:process.cwd(),env:{...process.env,BUILDERFORCE_AGENTS_SKIP_CHANNELS:`1`}}).unref(),(await waitForGatewayReachable({url,token,deadlineMs:5e3})).ok}catch{return!1}}export{checkIfSetupNeeded,startGatewayBackground};
|
|
@@ -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{a as readConfigFileSnapshot,r as loadConfig}from"./io-BLBq4T2o.js";import"./manifest-registry-BJCfNV1a.js";function hasConfiguredModelOrAuth(config){let defaultsModel=config.agents?.defaults?.model,hasDefaultModel=typeof defaultsModel?.primary==`string`&&defaultsModel.primary.trim().length>0,hasModelCatalog=!!config.models&&Object.keys(config.models).length>0;return hasDefaultModel||hasModelCatalog}async function checkIfSetupNeeded(){try{let snapshot=await readConfigFileSnapshot();return snapshot.exists?hasConfiguredModelOrAuth(snapshot.config)?{needed:!1}:{needed:!0,hint:`Config exists but no model is configured — running setup.`}:{needed:!0,hint:`No config found — running first-time setup.`}}catch{return{needed:!1}}}async function startGatewayBackground(){try{let config=loadConfig(),port=config.gateway?.port??18789,bind=config.gateway?.bind??`loopback`,token=config.gateway?.auth?.token,args=[process.argv[1],`gateway`,`run`,`--port`,String(port),`--bind`,bind];token&&args.push(`--token`,token);let{buildGatewayConnectionDetails}=await import(`./call-BnAs_SER.js`),{waitForGatewayReachable}=await import(`./onboard-helpers-B8I5AVyb.js`),{url}=buildGatewayConnectionDetails({config});if((await waitForGatewayReachable({url,token,deadlineMs:500})).ok)return!0;let{spawn}=await import(`node:child_process`);return spawn(process.execPath,args,{detached:!0,stdio:`ignore`,windowsHide:!0,cwd:process.cwd(),env:{...process.env,BUILDERFORCE_AGENTS_SKIP_CHANNELS:`1`}}).unref(),(await waitForGatewayReachable({url,token,deadlineMs:5e3})).ok}catch{return!1}}export{checkIfSetupNeeded,startGatewayBackground};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as formatRawAssistantErrorForUi}from"./embedded-helpers-
|
|
1
|
+
import{_ as formatRawAssistantErrorForUi}from"./embedded-helpers-C9jpiwlw.js";import{d as stripAnsi}from"./subsystem-B3TqcCrZ.js";import{U as VERSION,r as loadConfig}from"./io-BLBq4T2o.js";import{f as GATEWAY_CLIENT_CAPS,h as GATEWAY_CLIENT_NAMES,m as GATEWAY_CLIENT_MODES}from"./message-channel-D_jXxXQj.js";import{jt as PROTOCOL_VERSION,t as GatewayClient}from"./client-xfoidwPI.js";import{a as resolveExplicitGatewayAuth,r as ensureExplicitGatewayAuth,t as buildGatewayConnectionDetails}from"./call-T8ciwMTA.js";import{n as formatTokenCount}from"./usage-format-DGf8ZWPH.js";import{randomUUID}from"node:crypto";const REPLACEMENT_CHAR_RE=/\uFFFD/g,LONG_TOKEN_RE=/\S{33,}/g,LONG_TOKEN_TEST_RE=/\S{33,}/,URL_PREFIX_RE=/^(https?:\/\/|file:\/\/)/i,WINDOWS_DRIVE_RE=/^[a-zA-Z]:[\\/]/,FILE_LIKE_RE=/^[a-zA-Z0-9._-]+$/;function hasControlChars(text){for(let char of text){let code=char.charCodeAt(0);if(code<=31&&code!==9&&code!==10&&code!==13||code>=127&&code<=159)return!0}return!1}function stripControlChars(text){if(!hasControlChars(text))return text;let sanitized=``;for(let char of text){let code=char.charCodeAt(0);!(code<=31&&code!==9&&code!==10&&code!==13)&&!(code>=127&&code<=159)&&(sanitized+=char)}return sanitized}function chunkToken(token,maxChars){if(token.length<=maxChars)return[token];let chunks=[];for(let i=0;i<token.length;i+=maxChars)chunks.push(token.slice(i,i+maxChars));return chunks}function isCopySensitiveToken(token){return URL_PREFIX_RE.test(token)||token.startsWith(`/`)||token.startsWith(`~/`)||token.startsWith(`./`)||token.startsWith(`../`)||WINDOWS_DRIVE_RE.test(token)||token.startsWith(`\\\\`)||token.includes(`/`)||token.includes(`\\`)?!0:token.includes(`_`)&&FILE_LIKE_RE.test(token)}function normalizeLongTokenForDisplay(token){return isCopySensitiveToken(token)?token:chunkToken(token,32).join(` `)}function redactBinaryLikeLine(line){let replacementCount=(line.match(REPLACEMENT_CHAR_RE)||[]).length;return replacementCount>=12&&replacementCount*2>=line.length?`[binary data omitted]`:line}function sanitizeRenderableText(text){if(!text)return text;let hasAnsi=text.includes(`\x1B`),hasReplacementChars=text.includes(`�`),hasLongTokens=LONG_TOKEN_TEST_RE.test(text),hasControls=hasControlChars(text);if(!hasAnsi&&!hasReplacementChars&&!hasLongTokens&&!hasControls)return text;let withoutAnsi=hasAnsi?stripAnsi(text):text,withoutControlChars=hasControls?stripControlChars(withoutAnsi):withoutAnsi,redacted=hasReplacementChars?withoutControlChars.split(`
|
|
2
2
|
`).map(line=>redactBinaryLikeLine(line)).join(`
|
|
3
3
|
`):withoutControlChars;return LONG_TOKEN_TEST_RE.test(redacted)?redacted.replace(LONG_TOKEN_RE,normalizeLongTokenForDisplay):redacted}function resolveFinalAssistantText(params){let finalText=params.finalText??``;if(finalText.trim())return finalText;let streamedText=params.streamedText??``;return streamedText.trim()?streamedText:`(no output)`}function composeThinkingAndContent(params){let thinkingText=params.thinkingText?.trim()??``,contentText=params.contentText?.trim()??``,parts=[];return params.showThinking&&thinkingText&&parts.push(`[thinking]\n${thinkingText}`),contentText&&parts.push(contentText),parts.join(`
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{l as stripAnsi}from"./subsystem-C4b1Von0.js";import{U as VERSION,r as loadConfig}from"./io-
|
|
1
|
+
import{l as stripAnsi}from"./subsystem-C4b1Von0.js";import{U as VERSION,r as loadConfig}from"./io-D9hC2aG0.js";import{jt as PROTOCOL_VERSION,t as GatewayClient}from"./client-CGgp3zkQ.js";import{a as resolveExplicitGatewayAuth,r as ensureExplicitGatewayAuth,t as buildGatewayConnectionDetails}from"./call-Du2LiaX6.js";import{f as GATEWAY_CLIENT_CAPS,h as GATEWAY_CLIENT_NAMES,m as GATEWAY_CLIENT_MODES}from"./message-channel-z5YRpR2d.js";import{O as formatRawAssistantErrorForUi}from"./embedded-helpers-DdU30lmt.js";import{n as formatTokenCount}from"./usage-format-5sp5AMSu.js";import{randomUUID}from"node:crypto";const REPLACEMENT_CHAR_RE=/\uFFFD/g,LONG_TOKEN_RE=/\S{33,}/g,LONG_TOKEN_TEST_RE=/\S{33,}/,URL_PREFIX_RE=/^(https?:\/\/|file:\/\/)/i,WINDOWS_DRIVE_RE=/^[a-zA-Z]:[\\/]/,FILE_LIKE_RE=/^[a-zA-Z0-9._-]+$/;function hasControlChars(text){for(let char of text){let code=char.charCodeAt(0);if(code<=31&&code!==9&&code!==10&&code!==13||code>=127&&code<=159)return!0}return!1}function stripControlChars(text){if(!hasControlChars(text))return text;let sanitized=``;for(let char of text){let code=char.charCodeAt(0);!(code<=31&&code!==9&&code!==10&&code!==13)&&!(code>=127&&code<=159)&&(sanitized+=char)}return sanitized}function chunkToken(token,maxChars){if(token.length<=maxChars)return[token];let chunks=[];for(let i=0;i<token.length;i+=maxChars)chunks.push(token.slice(i,i+maxChars));return chunks}function isCopySensitiveToken(token){return URL_PREFIX_RE.test(token)||token.startsWith(`/`)||token.startsWith(`~/`)||token.startsWith(`./`)||token.startsWith(`../`)||WINDOWS_DRIVE_RE.test(token)||token.startsWith(`\\\\`)||token.includes(`/`)||token.includes(`\\`)?!0:token.includes(`_`)&&FILE_LIKE_RE.test(token)}function normalizeLongTokenForDisplay(token){return isCopySensitiveToken(token)?token:chunkToken(token,32).join(` `)}function redactBinaryLikeLine(line){let replacementCount=(line.match(REPLACEMENT_CHAR_RE)||[]).length;return replacementCount>=12&&replacementCount*2>=line.length?`[binary data omitted]`:line}function sanitizeRenderableText(text){if(!text)return text;let hasAnsi=text.includes(`\x1B`),hasReplacementChars=text.includes(`�`),hasLongTokens=LONG_TOKEN_TEST_RE.test(text),hasControls=hasControlChars(text);if(!hasAnsi&&!hasReplacementChars&&!hasLongTokens&&!hasControls)return text;let withoutAnsi=hasAnsi?stripAnsi(text):text,withoutControlChars=hasControls?stripControlChars(withoutAnsi):withoutAnsi,redacted=hasReplacementChars?withoutControlChars.split(`
|
|
2
2
|
`).map(line=>redactBinaryLikeLine(line)).join(`
|
|
3
3
|
`):withoutControlChars;return LONG_TOKEN_TEST_RE.test(redacted)?redacted.replace(LONG_TOKEN_RE,normalizeLongTokenForDisplay):redacted}function resolveFinalAssistantText(params){let finalText=params.finalText??``;if(finalText.trim())return finalText;let streamedText=params.streamedText??``;return streamedText.trim()?streamedText:`(no output)`}function composeThinkingAndContent(params){let thinkingText=params.thinkingText?.trim()??``,contentText=params.contentText?.trim()??``,parts=[];return params.showThinking&&thinkingText&&parts.push(`[thinking]\n${thinkingText}`),contentText&&parts.push(contentText),parts.join(`
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as resolveUserPath}from"./utils-DbaBVFaK.js";import{i as loadPluginManifest,r as discoverBuilderForceAgentsPlugins}from"./manifest-registry-BJCfNV1a.js";import{i as resolvePluginInstallDir,n as installPluginFromNpmSpec,t as recordPluginInstall}from"./installs-
|
|
1
|
+
import{b as resolveUserPath}from"./utils-DbaBVFaK.js";import{i as loadPluginManifest,r as discoverBuilderForceAgentsPlugins}from"./manifest-registry-BJCfNV1a.js";import{i as resolvePluginInstallDir,n as installPluginFromNpmSpec,t as recordPluginInstall}from"./installs-DFiF4lGy.js";import fs from"node:fs/promises";async function readInstalledPackageVersion(dir){try{let raw=await fs.readFile(`${dir}/package.json`,`utf-8`),parsed=JSON.parse(raw);return typeof parsed.version==`string`?parsed.version:void 0}catch{return}}function resolveBundledPluginSources(params){let discovery=discoverBuilderForceAgentsPlugins({workspaceDir:params.workspaceDir}),bundled=new Map;for(let candidate of discovery.candidates){if(candidate.origin!==`bundled`)continue;let manifest=loadPluginManifest(candidate.rootDir);if(!manifest.ok)continue;let pluginId=manifest.manifest.id;if(bundled.has(pluginId))continue;let npmSpec=candidate.packageManifest?.install?.npmSpec?.trim()||candidate.packageName?.trim()||void 0;bundled.set(pluginId,{pluginId,localPath:candidate.rootDir,npmSpec})}return bundled}function pathsEqual(left,right){return!left||!right?!1:resolveUserPath(left)===resolveUserPath(right)}function buildLoadPathHelpers(existing){let paths=[...existing],resolveSet=()=>new Set(paths.map(entry=>resolveUserPath(entry))),resolved=resolveSet(),changed=!1;return{addPath:value=>{let normalized=resolveUserPath(value);resolved.has(normalized)||(paths.push(value),resolved.add(normalized),changed=!0)},removePath:value=>{let normalized=resolveUserPath(value);resolved.has(normalized)&&(paths=paths.filter(entry=>resolveUserPath(entry)!==normalized),resolved=resolveSet(),changed=!0)},get changed(){return changed},get paths(){return paths}}}async function updateNpmInstalledPlugins(params){let logger=params.logger??{},installs=params.config.plugins?.installs??{},targets=params.pluginIds?.length?params.pluginIds:Object.keys(installs),outcomes=[],next=params.config,changed=!1;for(let pluginId of targets){if(params.skipIds?.has(pluginId)){outcomes.push({pluginId,status:`skipped`,message:`Skipping "${pluginId}" (already updated).`});continue}let record=installs[pluginId];if(!record){outcomes.push({pluginId,status:`skipped`,message:`No install record for "${pluginId}".`});continue}if(record.source!==`npm`){outcomes.push({pluginId,status:`skipped`,message:`Skipping "${pluginId}" (source: ${record.source}).`});continue}if(!record.spec){outcomes.push({pluginId,status:`skipped`,message:`Skipping "${pluginId}" (missing npm spec).`});continue}let installPath;try{installPath=record.installPath??resolvePluginInstallDir(pluginId)}catch(err){outcomes.push({pluginId,status:`error`,message:`Invalid install path for "${pluginId}": ${String(err)}`});continue}let currentVersion=await readInstalledPackageVersion(installPath);if(params.dryRun){let probe;try{probe=await installPluginFromNpmSpec({spec:record.spec,mode:`update`,dryRun:!0,expectedPluginId:pluginId,logger})}catch(err){outcomes.push({pluginId,status:`error`,message:`Failed to check ${pluginId}: ${String(err)}`});continue}if(!probe.ok){outcomes.push({pluginId,status:`error`,message:`Failed to check ${pluginId}: ${probe.error}`});continue}let nextVersion=probe.version??`unknown`,currentLabel=currentVersion??`unknown`;currentVersion&&probe.version&¤tVersion===probe.version?outcomes.push({pluginId,status:`unchanged`,currentVersion:currentVersion??void 0,nextVersion:probe.version??void 0,message:`${pluginId} is up to date (${currentLabel}).`}):outcomes.push({pluginId,status:`updated`,currentVersion:currentVersion??void 0,nextVersion:probe.version??void 0,message:`Would update ${pluginId}: ${currentLabel} -> ${nextVersion}.`});continue}let result;try{result=await installPluginFromNpmSpec({spec:record.spec,mode:`update`,expectedPluginId:pluginId,logger})}catch(err){outcomes.push({pluginId,status:`error`,message:`Failed to update ${pluginId}: ${String(err)}`});continue}if(!result.ok){outcomes.push({pluginId,status:`error`,message:`Failed to update ${pluginId}: ${result.error}`});continue}let nextVersion=result.version??await readInstalledPackageVersion(result.targetDir);next=recordPluginInstall(next,{pluginId,source:`npm`,spec:record.spec,installPath:result.targetDir,version:nextVersion}),changed=!0;let currentLabel=currentVersion??`unknown`,nextLabel=nextVersion??`unknown`;currentVersion&&nextVersion&¤tVersion===nextVersion?outcomes.push({pluginId,status:`unchanged`,currentVersion:currentVersion??void 0,nextVersion:nextVersion??void 0,message:`${pluginId} already at ${currentLabel}.`}):outcomes.push({pluginId,status:`updated`,currentVersion:currentVersion??void 0,nextVersion:nextVersion??void 0,message:`Updated ${pluginId}: ${currentLabel} -> ${nextLabel}.`})}return{config:next,changed,outcomes}}async function syncPluginsForUpdateChannel(params){let summary={switchedToBundled:[],switchedToNpm:[],warnings:[],errors:[]},bundled=resolveBundledPluginSources({workspaceDir:params.workspaceDir});if(bundled.size===0)return{config:params.config,changed:!1,summary};let next=params.config,loadHelpers=buildLoadPathHelpers(next.plugins?.load?.paths??[]),installs=next.plugins?.installs??{},changed=!1;if(params.channel===`dev`)for(let[pluginId,record]of Object.entries(installs)){let bundledInfo=bundled.get(pluginId);bundledInfo&&(loadHelpers.addPath(bundledInfo.localPath),!(record.source===`path`&&pathsEqual(record.sourcePath,bundledInfo.localPath))&&(next=recordPluginInstall(next,{pluginId,source:`path`,sourcePath:bundledInfo.localPath,installPath:bundledInfo.localPath,spec:record.spec??bundledInfo.npmSpec,version:record.version}),summary.switchedToBundled.push(pluginId),changed=!0))}else for(let[pluginId,record]of Object.entries(installs)){let bundledInfo=bundled.get(pluginId);if(!bundledInfo)continue;if(record.source===`npm`){loadHelpers.removePath(bundledInfo.localPath);continue}if(record.source!==`path`||!pathsEqual(record.sourcePath,bundledInfo.localPath))continue;let spec=record.spec??bundledInfo.npmSpec;if(!spec){summary.warnings.push(`Missing npm spec for ${pluginId}; keeping local path.`);continue}let result;try{result=await installPluginFromNpmSpec({spec,mode:`update`,expectedPluginId:pluginId,logger:params.logger})}catch(err){summary.errors.push(`Failed to install ${pluginId}: ${String(err)}`);continue}if(!result.ok){summary.errors.push(`Failed to install ${pluginId}: ${result.error}`);continue}next=recordPluginInstall(next,{pluginId,source:`npm`,spec,installPath:result.targetDir,version:result.version,sourcePath:void 0}),summary.switchedToNpm.push(pluginId),changed=!0,loadHelpers.removePath(bundledInfo.localPath)}return loadHelpers.changed&&(next={...next,plugins:{...next.plugins,load:{...next.plugins?.load,paths:loadHelpers.paths}}},changed=!0),{config:next,changed,summary}}export{updateNpmInstalledPlugins as n,syncPluginsForUpdateChannel as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{y as resolveUserPath}from"./utils-BP60e80M.js";import{i as loadPluginManifest,r as discoverBuilderForceAgentsPlugins}from"./manifest-registry-009gLJ4l.js";import{i as resolvePluginInstallDir,n as installPluginFromNpmSpec,t as recordPluginInstall}from"./installs-
|
|
1
|
+
import{y as resolveUserPath}from"./utils-BP60e80M.js";import{i as loadPluginManifest,r as discoverBuilderForceAgentsPlugins}from"./manifest-registry-009gLJ4l.js";import{i as resolvePluginInstallDir,n as installPluginFromNpmSpec,t as recordPluginInstall}from"./installs-B_t2YXgq.js";import fs from"node:fs/promises";async function readInstalledPackageVersion(dir){try{let raw=await fs.readFile(`${dir}/package.json`,`utf-8`),parsed=JSON.parse(raw);return typeof parsed.version==`string`?parsed.version:void 0}catch{return}}function resolveBundledPluginSources(params){let discovery=discoverBuilderForceAgentsPlugins({workspaceDir:params.workspaceDir}),bundled=new Map;for(let candidate of discovery.candidates){if(candidate.origin!==`bundled`)continue;let manifest=loadPluginManifest(candidate.rootDir);if(!manifest.ok)continue;let pluginId=manifest.manifest.id;if(bundled.has(pluginId))continue;let npmSpec=candidate.packageManifest?.install?.npmSpec?.trim()||candidate.packageName?.trim()||void 0;bundled.set(pluginId,{pluginId,localPath:candidate.rootDir,npmSpec})}return bundled}function pathsEqual(left,right){return!left||!right?!1:resolveUserPath(left)===resolveUserPath(right)}function buildLoadPathHelpers(existing){let paths=[...existing],resolveSet=()=>new Set(paths.map(entry=>resolveUserPath(entry))),resolved=resolveSet(),changed=!1;return{addPath:value=>{let normalized=resolveUserPath(value);resolved.has(normalized)||(paths.push(value),resolved.add(normalized),changed=!0)},removePath:value=>{let normalized=resolveUserPath(value);resolved.has(normalized)&&(paths=paths.filter(entry=>resolveUserPath(entry)!==normalized),resolved=resolveSet(),changed=!0)},get changed(){return changed},get paths(){return paths}}}async function updateNpmInstalledPlugins(params){let logger=params.logger??{},installs=params.config.plugins?.installs??{},targets=params.pluginIds?.length?params.pluginIds:Object.keys(installs),outcomes=[],next=params.config,changed=!1;for(let pluginId of targets){if(params.skipIds?.has(pluginId)){outcomes.push({pluginId,status:`skipped`,message:`Skipping "${pluginId}" (already updated).`});continue}let record=installs[pluginId];if(!record){outcomes.push({pluginId,status:`skipped`,message:`No install record for "${pluginId}".`});continue}if(record.source!==`npm`){outcomes.push({pluginId,status:`skipped`,message:`Skipping "${pluginId}" (source: ${record.source}).`});continue}if(!record.spec){outcomes.push({pluginId,status:`skipped`,message:`Skipping "${pluginId}" (missing npm spec).`});continue}let installPath;try{installPath=record.installPath??resolvePluginInstallDir(pluginId)}catch(err){outcomes.push({pluginId,status:`error`,message:`Invalid install path for "${pluginId}": ${String(err)}`});continue}let currentVersion=await readInstalledPackageVersion(installPath);if(params.dryRun){let probe;try{probe=await installPluginFromNpmSpec({spec:record.spec,mode:`update`,dryRun:!0,expectedPluginId:pluginId,logger})}catch(err){outcomes.push({pluginId,status:`error`,message:`Failed to check ${pluginId}: ${String(err)}`});continue}if(!probe.ok){outcomes.push({pluginId,status:`error`,message:`Failed to check ${pluginId}: ${probe.error}`});continue}let nextVersion=probe.version??`unknown`,currentLabel=currentVersion??`unknown`;currentVersion&&probe.version&¤tVersion===probe.version?outcomes.push({pluginId,status:`unchanged`,currentVersion:currentVersion??void 0,nextVersion:probe.version??void 0,message:`${pluginId} is up to date (${currentLabel}).`}):outcomes.push({pluginId,status:`updated`,currentVersion:currentVersion??void 0,nextVersion:probe.version??void 0,message:`Would update ${pluginId}: ${currentLabel} -> ${nextVersion}.`});continue}let result;try{result=await installPluginFromNpmSpec({spec:record.spec,mode:`update`,expectedPluginId:pluginId,logger})}catch(err){outcomes.push({pluginId,status:`error`,message:`Failed to update ${pluginId}: ${String(err)}`});continue}if(!result.ok){outcomes.push({pluginId,status:`error`,message:`Failed to update ${pluginId}: ${result.error}`});continue}let nextVersion=result.version??await readInstalledPackageVersion(result.targetDir);next=recordPluginInstall(next,{pluginId,source:`npm`,spec:record.spec,installPath:result.targetDir,version:nextVersion}),changed=!0;let currentLabel=currentVersion??`unknown`,nextLabel=nextVersion??`unknown`;currentVersion&&nextVersion&¤tVersion===nextVersion?outcomes.push({pluginId,status:`unchanged`,currentVersion:currentVersion??void 0,nextVersion:nextVersion??void 0,message:`${pluginId} already at ${currentLabel}.`}):outcomes.push({pluginId,status:`updated`,currentVersion:currentVersion??void 0,nextVersion:nextVersion??void 0,message:`Updated ${pluginId}: ${currentLabel} -> ${nextLabel}.`})}return{config:next,changed,outcomes}}async function syncPluginsForUpdateChannel(params){let summary={switchedToBundled:[],switchedToNpm:[],warnings:[],errors:[]},bundled=resolveBundledPluginSources({workspaceDir:params.workspaceDir});if(bundled.size===0)return{config:params.config,changed:!1,summary};let next=params.config,loadHelpers=buildLoadPathHelpers(next.plugins?.load?.paths??[]),installs=next.plugins?.installs??{},changed=!1;if(params.channel===`dev`)for(let[pluginId,record]of Object.entries(installs)){let bundledInfo=bundled.get(pluginId);bundledInfo&&(loadHelpers.addPath(bundledInfo.localPath),!(record.source===`path`&&pathsEqual(record.sourcePath,bundledInfo.localPath))&&(next=recordPluginInstall(next,{pluginId,source:`path`,sourcePath:bundledInfo.localPath,installPath:bundledInfo.localPath,spec:record.spec??bundledInfo.npmSpec,version:record.version}),summary.switchedToBundled.push(pluginId),changed=!0))}else for(let[pluginId,record]of Object.entries(installs)){let bundledInfo=bundled.get(pluginId);if(!bundledInfo)continue;if(record.source===`npm`){loadHelpers.removePath(bundledInfo.localPath);continue}if(record.source!==`path`||!pathsEqual(record.sourcePath,bundledInfo.localPath))continue;let spec=record.spec??bundledInfo.npmSpec;if(!spec){summary.warnings.push(`Missing npm spec for ${pluginId}; keeping local path.`);continue}let result;try{result=await installPluginFromNpmSpec({spec,mode:`update`,expectedPluginId:pluginId,logger:params.logger})}catch(err){summary.errors.push(`Failed to install ${pluginId}: ${String(err)}`);continue}if(!result.ok){summary.errors.push(`Failed to install ${pluginId}: ${result.error}`);continue}next=recordPluginInstall(next,{pluginId,source:`npm`,spec,installPath:result.targetDir,version:result.version,sourcePath:void 0}),summary.switchedToNpm.push(pluginId),changed=!0,loadHelpers.removePath(bundledInfo.localPath)}return loadHelpers.changed&&(next={...next,plugins:{...next.plugins,load:{...next.plugins?.load,paths:loadHelpers.paths}}},changed=!0),{config:next,changed,summary}}export{updateNpmInstalledPlugins as n,syncPluginsForUpdateChannel as t};
|