@seanhogg/builderforce-agents 2026.10.12 → 2026.10.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/dist/{agent-DvDtjczG.js → agent-CeWx2EpQ.js} +1 -1
  2. package/dist/{agent-DiLX8OzY.js → agent-DrcnpqOF.js} +1 -1
  3. package/dist/{agents-BawpdEjP.js → agents-CRJM6qhK.js} +1 -1
  4. package/dist/{agents-COWLUJqm.js → agents-hATFRfwk.js} +1 -1
  5. package/dist/{audio-preflight-CYQiI74L.js → audio-preflight-B9CfGDD2.js} +1 -1
  6. package/dist/{audio-preflight-BN1u9Tpc.js → audio-preflight-DHHeocUj.js} +1 -1
  7. package/dist/{auth-choice-D9VN-WjA.js → auth-choice-CWbPLRN0.js} +1 -1
  8. package/dist/{auth-choice-3cdcHeim.js → auth-choice-CzhKgWJy.js} +1 -1
  9. package/dist/{auth-choice.apply-Cd0RR0Z-.js → auth-choice.apply-C0RTYtRN.js} +1 -1
  10. package/dist/{auth-choice.apply-CMDgoDNN.js → auth-choice.apply-ChrTTHkK.js} +1 -1
  11. package/dist/{auth-choice.apply-BAeGyEKW.js → auth-choice.apply-D4LYzI8l.js} +1 -1
  12. package/dist/{auth-choice.apply-CSXvPCea.js → auth-choice.apply-Dy4rVG6K.js} +1 -1
  13. package/dist/{auth-choice.apply.transformers-DkX2-OZa.js → auth-choice.apply.transformers-9v6HFzNs.js} +1 -1
  14. package/dist/{auth-choice.apply.transformers-CEVxl3ul.js → auth-choice.apply.transformers-Be8599JD.js} +1 -1
  15. package/dist/{auth-choice.apply.transformers-B2Nr9M7m.js → auth-choice.apply.transformers-CgfGlqy1.js} +1 -1
  16. package/dist/{auth-choice.apply.transformers-Dpy9gODo.js → auth-choice.apply.transformers-D9a8-sLS.js} +1 -1
  17. package/dist/{banner-C93QSUTe.js → banner-8F7-gU1V.js} +1 -1
  18. package/dist/build-info.json +3 -3
  19. package/dist/{builderforce-Dl4bZ63C.js → builderforce-CCfM1c79.js} +1 -1
  20. package/dist/{builderforce-C_tuO46t.js → builderforce-CImLd8Zo.js} +1 -1
  21. package/dist/bundled/boot-md/handler.js +1 -1
  22. package/dist/bundled/session-memory/handler.js +1 -1
  23. package/dist/{channel-options-CiYpNR-1.js → channel-options-CRng-5hZ.js} +1 -1
  24. package/dist/{channel-options-Cziy0WDc.js → channel-options-D5kOIN7b.js} +1 -1
  25. package/dist/{channel-web-Ae15MleJ.js → channel-web-B5HSpL4k.js} +1 -1
  26. package/dist/{channels-cli-CZM033Me.js → channels-cli-COl9TDHT.js} +1 -1
  27. package/dist/{channels-cli-yi1vxpvO.js → channels-cli-bR8QwOv3.js} +1 -1
  28. package/dist/chrome-ChzFLAeJ.js +4 -0
  29. package/dist/chrome-CrqJ4Ijz.js +4 -0
  30. package/dist/{cli-Bwv_-VuS.js → cli-BqJMHFNK.js} +1 -1
  31. package/dist/{cli-D8fndSEi.js → cli-DBn0qbHS.js} +1 -1
  32. package/dist/{command-registry-Cjom5ab0.js → command-registry-BqhtXJa7.js} +1 -1
  33. package/dist/{command-registry-8uEx2JjY.js → command-registry-DVH79C3B.js} +1 -1
  34. package/dist/{completion-cli-PTFpWp8Q.js → completion-cli-BFR0u1Uh.js} +1 -1
  35. package/dist/{completion-cli-LUuqgvVQ.js → completion-cli-BuUAEqQw.js} +1 -1
  36. package/dist/{completion-cli-DRsz70D2.js → completion-cli-CwaIh4zw.js} +1 -1
  37. package/dist/{completion-cli-BsXDz7T2.js → completion-cli-Da3-oE7r.js} +1 -1
  38. package/dist/{config-cli-BIx0enD5.js → config-cli-Bhrj7H1i.js} +1 -1
  39. package/dist/{config-cli-BFhOXrua.js → config-cli-DOHKZ1lO.js} +1 -1
  40. package/dist/{configure-D96xLIb6.js → configure-B-Yta1X3.js} +1 -1
  41. package/dist/{configure-S7YE6hn1.js → configure-BHVk4Ax9.js} +1 -1
  42. package/dist/{configure-dDKfCq_g.js → configure-D9YZEK_D.js} +1 -1
  43. package/dist/{configure-C7xdw9Kq.js → configure-DPE2hDzY.js} +1 -1
  44. package/dist/{deps-CGiO_NDu.js → deps-CrAVOWsA.js} +1 -1
  45. package/dist/{doctor-completion-ChhIrLd3.js → doctor-completion-CkjrUmbI.js} +1 -1
  46. package/dist/{doctor-completion-BUZwWoWB.js → doctor-completion-Dh9ah5lH.js} +1 -1
  47. package/dist/{embedded-DJYMy81Q.js → embedded-BrqzM5oT.js} +12 -12
  48. package/dist/{embedded-DjDnQMNx.js → embedded-wYxo-ADm.js} +12 -12
  49. package/dist/entry.js +1 -1
  50. package/dist/extensionAPI.js +1 -1
  51. package/dist/{gateway-cli-CN114d5j.js → gateway-cli-C2nh9UyY.js} +2 -2
  52. package/dist/{gateway-cli-Dzl70YBF.js → gateway-cli-CGkTLhet.js} +2 -2
  53. package/dist/{health-Cf1YoTRN.js → health-CEz2-7et.js} +1 -1
  54. package/dist/{health-AlkF1nUa.js → health-CFVx21sO.js} +1 -1
  55. package/dist/{health-ySVOGGNu.js → health-aKuq4xwa.js} +1 -1
  56. package/dist/{hooks-cli-6jeFEGg3.js → hooks-cli-DPSrycwI.js} +1 -1
  57. package/dist/{hooks-cli-DVPMCXUq.js → hooks-cli-uPHs7qnC.js} +1 -1
  58. package/dist/index.js +2 -2
  59. package/dist/llm-slug-generator.js +1 -1
  60. package/dist/{models-CGUxphfN.js → models--TwKHn8b.js} +1 -1
  61. package/dist/{models-CIMM_Z3u.js → models-BXJebxTU.js} +1 -1
  62. package/dist/{models-cli-Cijh2uON.js → models-cli-O1zCgeoA.js} +1 -1
  63. package/dist/{models-cli-Oys3e_I3.js → models-cli-iKu1IVeH.js} +1 -1
  64. package/dist/{onboard-DAEXNhNd.js → onboard--0I8pdee.js} +1 -1
  65. package/dist/{onboard-b2fWbf0Q.js → onboard-C40OvMZO.js} +1 -1
  66. package/dist/{onboard-channels-elaccQRE.js → onboard-channels-BbpyejX4.js} +1 -1
  67. package/dist/{onboard-channels-Bsd11scA.js → onboard-channels-CoJnsCfd.js} +1 -1
  68. package/dist/{onboard-channels-C_Q7OUow.js → onboard-channels-ZI4QC9WU.js} +1 -1
  69. package/dist/{onboard-channels-Tl1X4Pl_.js → onboard-channels-uvIeLPXK.js} +1 -1
  70. package/dist/{onboard-interactive-DyGNiYRI.js → onboard-interactive-B3Z0XLT6.js} +1 -1
  71. package/dist/{onboard-interactive-C0qmgHsH.js → onboard-interactive-CJdxqQ1b.js} +1 -1
  72. package/dist/{onboard-interactive-86s992_v.js → onboard-interactive-COnCCTTW.js} +1 -1
  73. package/dist/{onboard-interactive-CvMSTjPK.js → onboard-interactive-jss8R9r9.js} +1 -1
  74. package/dist/{onboarding-DzvbhsaR.js → onboarding-B1BmYWrs.js} +2 -2
  75. package/dist/{onboarding-B0tbaqZ7.js → onboarding-CdRbvLgp.js} +2 -2
  76. package/dist/{onboarding.finalize-D-Pi9Blv.js → onboarding.finalize-B0AjF6qZ.js} +1 -1
  77. package/dist/{onboarding.finalize-CERLBlRF.js → onboarding.finalize-WsL-ijTc.js} +1 -1
  78. package/dist/{outbound-send-deps-CzhBrVa7.js → outbound-send-deps-DuML6h7r.js} +1 -1
  79. package/dist/{plugin-registry-DtrHn5NR.js → plugin-registry-BjWNyeVY.js} +1 -1
  80. package/dist/{plugin-registry-Avx51RIY.js → plugin-registry-Cf_sv-ny.js} +1 -1
  81. package/dist/{plugin-registry-CFkQDTOt.js → plugin-registry-DdFb5usc.js} +1 -1
  82. package/dist/{plugin-registry-BEmyRfmb.js → plugin-registry-DrEpL5ac.js} +1 -1
  83. package/dist/plugin-sdk/{accounts-BwreSNAR.js → accounts-Cy3WCbWg.js} +1 -1
  84. package/dist/plugin-sdk/{active-listener-DpQ7aGYd.js → active-listener-DVWVNlT9.js} +1 -1
  85. package/dist/plugin-sdk/agent-runtime/src/agents/tool-retry.d.ts +40 -32
  86. package/dist/plugin-sdk/agent-runtime/src/builderforce/model/agent-types.d.ts +6 -0
  87. package/dist/plugin-sdk/{agent-scope-BQByW0cD.js → agent-scope-DgKN27hJ.js} +1 -1
  88. package/dist/plugin-sdk/{api-key-rotation-yqTCeKjV.js → api-key-rotation-D37jV9ZW.js} +1 -1
  89. package/dist/plugin-sdk/{audio-preflight-B6uTvVfA.js → audio-preflight-D4xyO8Zq.js} +1 -1
  90. package/dist/plugin-sdk/{auth-json-Dw6ij9Pa.js → auth-json-nASe57Uw.js} +1 -1
  91. package/dist/plugin-sdk/{bindings-CDEzl4kl.js → bindings-CH-YLOLC.js} +1 -1
  92. package/dist/plugin-sdk/{channel-web-DKbpA9xC.js → channel-web-huZSNTX3.js} +1 -1
  93. package/dist/plugin-sdk/{chrome-DriEqJRH.js → chrome-CRUzg3kA.js} +1 -1
  94. package/dist/plugin-sdk/{chunk-cW0POl22.js → chunk-C94IAOuf.js} +1 -1
  95. package/dist/plugin-sdk/{command-format-CAX9XFjI.js → command-format-B3XMq_73.js} +1 -1
  96. package/dist/plugin-sdk/{common-BxEWhN2X.js → common-n0l_XN-S.js} +1 -1
  97. package/dist/plugin-sdk/{config-3vPn_hmp.js → config--Ci8Y91R.js} +2 -2
  98. package/dist/plugin-sdk/{fetch-DH0Y8iyO.js → fetch-B-GxSYRO.js} +1 -1
  99. package/dist/plugin-sdk/index.js +1 -1
  100. package/dist/plugin-sdk/{login-Dhdx0bVL.js → login-DZliYZg8.js} +1 -1
  101. package/dist/plugin-sdk/{login-qr-DAjOuijP.js → login-qr-DKcGvAjv.js} +1 -1
  102. package/dist/plugin-sdk/{manager-i8psl2Er.js → manager-DioOqJm_.js} +1 -1
  103. package/dist/plugin-sdk/{markdown-tables-Epim9b-0.js → markdown-tables-BUfhHgfs.js} +1 -1
  104. package/dist/plugin-sdk/{message-channel-sBPQc_-T.js → message-channel-CuZ2xOAM.js} +1 -1
  105. package/dist/plugin-sdk/{model-catalog-COVRezOQ.js → model-catalog-DIQ5a-o4.js} +1 -1
  106. package/dist/plugin-sdk/{model-selection-Crz-xYNU.js → model-selection-_H_U9jWH.js} +1 -1
  107. package/dist/plugin-sdk/{outbound-CPutSvae.js → outbound-Djibdmi7.js} +1 -1
  108. package/dist/plugin-sdk/{plugins-CaUOZBVb.js → plugins-BdkC9v5E.js} +1 -1
  109. package/dist/plugin-sdk/{pw-ai-jI9AWvKe.js → pw-ai-Bbi8Us-p.js} +1 -1
  110. package/dist/plugin-sdk/{qmd-manager-BRe5fGZw.js → qmd-manager-Dxn0jCpE.js} +1 -1
  111. package/dist/plugin-sdk/{registry-DJq2Cvo9.js → registry-CZHRcH-q.js} +1 -1
  112. package/dist/plugin-sdk/{render-BUCRXPIk.js → render-CuA_WRX5.js} +1 -1
  113. package/dist/plugin-sdk/{replies-CYjI7bye.js → replies-Cf69aZLA.js} +1 -1
  114. package/dist/plugin-sdk/{reply-B5o-SSYy.js → reply-BOVC-7UD.js} +13 -13
  115. package/dist/plugin-sdk/{reply-prefix-CCymsmsP.js → reply-prefix-w7kAvH11.js} +1 -1
  116. package/dist/plugin-sdk/{resolve-route-DN1J7Wyc.js → resolve-route-0sbvl4ZN.js} +1 -1
  117. package/dist/plugin-sdk/{runner-C2pDJlRw.js → runner-DKoKK09-.js} +4 -4
  118. package/dist/plugin-sdk/{session-BnleckVX.js → session-DGLuyt10.js} +1 -1
  119. package/dist/plugin-sdk/{sqlite-BlMLqMl8.js → sqlite-JjFgDV-H.js} +1 -1
  120. package/dist/plugin-sdk/{subsystem-COTa5Ly_.js → subsystem-D0Ril4rt.js} +1 -1
  121. package/dist/plugin-sdk/{tool-images-DSpchb4x.js → tool-images-WRTP95FT.js} +1 -1
  122. package/dist/plugin-sdk/{tool-loop-detection-16p7mJ8N.js → tool-loop-detection-g8gPTCgJ.js} +1 -1
  123. package/dist/plugin-sdk/web-Cdu8TkUy.js +1 -0
  124. package/dist/plugin-sdk/{whatsapp-actions-C2B3iw8n.js → whatsapp-actions-CsSzy7G0.js} +1 -1
  125. package/dist/{plugins-DAlgx58e.js → plugins-Dr1wmnAf.js} +1 -1
  126. package/dist/{plugins-De7aK3yK.js → plugins-JhEblShx.js} +1 -1
  127. package/dist/{plugins-cli-CwdUVWjG.js → plugins-cli-DW4hoeeV.js} +1 -1
  128. package/dist/{plugins-cli-CfVCrrhx.js → plugins-cli-GewV3E8e.js} +1 -1
  129. package/dist/{program-CFL6mW3l.js → program-bggmBKuL.js} +2 -2
  130. package/dist/{program-context-DP4Xq9zC.js → program-context-BCTE8zEF.js} +1 -1
  131. package/dist/{prompt-select-styled-NxrGT7OR.js → prompt-select-styled-BtjhlTEH.js} +1 -1
  132. package/dist/{prompt-select-styled-Csz9HlSx.js → prompt-select-styled-CaNl41mG.js} +1 -1
  133. package/dist/{provider-auth-helpers-BMBw21Tn.js → provider-auth-helpers-CWUfg9zf.js} +1 -1
  134. package/dist/{provider-auth-helpers-VWPvSXPH.js → provider-auth-helpers-y1X8xKVE.js} +1 -1
  135. package/dist/{provider-dispatcher-CSOHd9zJ.js → provider-dispatcher-CRsPmKhJ.js} +1 -1
  136. package/dist/{provider-dispatcher-Bg9orQPy.js → provider-dispatcher-D9GbE_Ce.js} +1 -1
  137. package/dist/{push-apns-rMu8MKXi.js → push-apns-Cb1sQEEa.js} +1 -1
  138. package/dist/{push-apns-ep5WkyGz.js → push-apns-Cr-6aD3y.js} +1 -1
  139. package/dist/{pw-ai-UXo3gDGy.js → pw-ai-CG-kY5NP.js} +1 -1
  140. package/dist/{pw-ai-CIN6tj0G.js → pw-ai-DcZPg2vm.js} +1 -1
  141. package/dist/{register.agent-BynXVz7v.js → register.agent-B33EZBoL.js} +1 -1
  142. package/dist/{register.agent-RNVNKBP3.js → register.agent-DfYqZls1.js} +1 -1
  143. package/dist/{register.configure-BdqREs1-.js → register.configure-CREcJhKA.js} +1 -1
  144. package/dist/{register.configure-DDrvpBnA.js → register.configure-D8an7wc5.js} +1 -1
  145. package/dist/{register.maintenance-DT6t7mD_.js → register.maintenance-D84M5XLR.js} +1 -1
  146. package/dist/{register.maintenance-BSKHOCTV.js → register.maintenance-Dnp_Ii2x.js} +1 -1
  147. package/dist/{register.message-7KIfSUxS.js → register.message-B6E0uAEu.js} +1 -1
  148. package/dist/{register.message-DDhEvcaX.js → register.message-WOWC4tyf.js} +1 -1
  149. package/dist/{register.onboard-CKhooa7L.js → register.onboard-AgVEhehS.js} +1 -1
  150. package/dist/{register.onboard-CswvuzLx.js → register.onboard-Cwozk0Tx.js} +1 -1
  151. package/dist/{register.setup-1BmR-qlh.js → register.setup-BKyCvo9_.js} +1 -1
  152. package/dist/{register.setup-CivwfXf_.js → register.setup-C9IeGiAd.js} +1 -1
  153. package/dist/{register.status-health-sessions-CLdHZiJm.js → register.status-health-sessions-CYZctjpx.js} +1 -1
  154. package/dist/{register.status-health-sessions-BXpljfv3.js → register.status-health-sessions-CcL6srRC.js} +1 -1
  155. package/dist/{register.subclis-D_fHb-Aj.js → register.subclis-AFsfDByV.js} +1 -1
  156. package/dist/{register.subclis-CTTxdHaJ.js → register.subclis-C0DxtuRO.js} +1 -1
  157. package/dist/{reply-D9wUWhMx.js → reply-BuUSdq2L.js} +9 -9
  158. package/dist/{run-main-DNyQhVQT.js → run-main-CgJMiKPV.js} +1 -1
  159. package/dist/{runner-BNnckkaT.js → runner-C8oNv-9y.js} +3 -3
  160. package/dist/{runner-EHybuAt7.js → runner-nDoIXX7n.js} +3 -3
  161. package/dist/{server-node-events-BGrnw4ZT.js → server-node-events-BMsKmU5S.js} +1 -1
  162. package/dist/{server-node-events-D4WVcVHy.js → server-node-events-fS8TluXq.js} +1 -1
  163. package/dist/{session-dirs-eNN7E3kA.js → session-dirs-Bkfs-7vN.js} +1 -1
  164. package/dist/{session-dirs-C-pVBwSV.js → session-dirs-rYDCA_mQ.js} +1 -1
  165. package/dist/{status-Demw1HZ7.js → status-Ad1eFPKR.js} +1 -1
  166. package/dist/{status-CBieo24v.js → status-BMzVz5KY.js} +1 -1
  167. package/dist/{status-rkFgCaBM.js → status-CXRyaGws.js} +1 -1
  168. package/dist/{status-wTMmjZ7M.js → status-DpEUFAMk.js} +1 -1
  169. package/dist/{status-BhJw9Htq.js → status-oaiZkYBt.js} +1 -1
  170. package/dist/{subagent-registry-Bje3RAgk.js → subagent-registry-gVTWLPpL.js} +1 -1
  171. package/dist/{subagent-registry-B0kpBIxD.js → subagent-registry-hM0OCDzv.js} +1 -1
  172. package/dist/{subagent-registry-Cj5yC7B4.js → subagent-registry-m_x-JRkR.js} +9 -9
  173. package/dist/{tui-BCtecmPL.js → tui-HTtOgZ_X.js} +2 -2
  174. package/dist/{tui-BqHLI73U.js → tui-LemSel3H.js} +2 -2
  175. package/dist/{tui-cli-2R0xjpqW.js → tui-cli-BpzicV5H.js} +1 -1
  176. package/dist/{tui-cli-Dvd8BwzD.js → tui-cli-CruoIP1K.js} +1 -1
  177. package/dist/{update-cli-DUObGvw1.js → update-cli-Wa-nZ_Lq.js} +1 -1
  178. package/dist/{update-cli-Bt7Vfi7c.js → update-cli-zv67YxK1.js} +1 -1
  179. package/dist/{web--KblE8ax.js → web-BrsbhB1i.js} +1 -1
  180. package/dist/{web-C-yTnRvS.js → web-BzkO4Pbe.js} +1 -1
  181. package/dist/{web-0VRcRcFj.js → web-D_QYY7Gt.js} +1 -1
  182. package/dist/{web-BcUIWAAJ.js → web-jPbmSTQm.js} +1 -1
  183. package/package.json +1 -1
  184. package/dist/chrome-CmCESKt9.js +0 -4
  185. package/dist/chrome-D6qk0wxW.js +0 -4
  186. package/dist/plugin-sdk/web-CzJYJZZs.js +0 -1
@@ -1,4 +1,4 @@
1
- import{T as resolveBuilderForceAgentsAgentDir,Yt as resolveEnvApiKey,b as ensureAuthProfileStore,c as CHUTES_AUTHORIZE_ENDPOINT,d as parseOAuthCallbackInput,dn as isHuggingfacePolicyLocked,f as loginOpenAICodex,fn as CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF,gt as SYNTHETIC_DEFAULT_MODEL_REF,l as exchangeChutesCodeForTokens,lt as VENICE_DEFAULT_MODEL_REF,st as resolveOllamaApiBase,t as resolveAuthProfileOrder,u as generateChutesPkce,un as discoverHuggingfaceModels,v as upsertAuthProfile,y as upsertAuthProfileWithLock}from"./auth-profiles-CuAFgjuQ.js";import{a as currentAnthropicModelId}from"./src-DvWaTze9.js";import{c as resolveAgentWorkspaceDir,i as resolveAgentDir,k as resolveDefaultAgentWorkspaceDir,l as resolveDefaultAgentId}from"./agent-scope-CufEmNj_.js";import{t as normalizeBaseUrl$1}from"./normalize-base-url-D_sv6Zgt.js";import{a as upsertSharedEnvVar}from"./env-file-DeS6x2OL.js";import{n as isLoopbackHost}from"./net-DtnXq2dW.js";import{d as openUrl}from"./onboard-helpers-D2vxAtv8.js";import{t as enablePluginInConfig}from"./enable-vNR-vlAd.js";import{C as setXaiApiKey,D as KIMI_CODING_MODEL_REF,E as writeOAuthCredentials,F as MOONSHOT_DEFAULT_MODEL_REF,I as QIANFAN_DEFAULT_MODEL_REF,S as setVercelAiGatewayApiKey,T as setZaiApiKey,_ as setOpenrouterApiKey,a as VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF,b as setTogetherApiKey,c as setAnthropicApiKey,d as setHuggingfaceApiKey,f as setKimiCodingApiKey,g as setOpencodeZenApiKey,h as setMoonshotApiKey,i as TOGETHER_DEFAULT_MODEL_REF,l as setCloudflareAiGatewayConfig,m as setMinimaxApiKey,n as LITELLM_DEFAULT_MODEL_REF,o as XIAOMI_DEFAULT_MODEL_REF,p as setLitellmApiKey,r as OPENROUTER_DEFAULT_MODEL_REF,s as ZAI_DEFAULT_MODEL_REF,t as HUGGINGFACE_DEFAULT_MODEL_REF,u as setGeminiApiKey,v as setQianfanApiKey,w as setXiaomiApiKey,x as setVeniceApiKey,y as setSyntheticApiKey,z as XAI_DEFAULT_MODEL_REF}from"./onboard-auth.credentials-CV8n9m_T.js";import{A as applyXaiConfig,B as applyVercelAiGatewayConfig,C as applyQianfanProviderConfig,D as applyTogetherProviderConfig,E as applyTogetherConfig,F as applyZaiProviderConfig,H as applyAgentDefaultModelPrimary,I as applyLitellmConfig,L as applyLitellmProviderConfig,M as applyXiaomiConfig,N as applyXiaomiProviderConfig,O as applyVeniceConfig,P as applyZaiConfig,R as applyCloudflareAiGatewayConfig,S as applyQianfanConfig,T as applySyntheticProviderConfig,V as applyVercelAiGatewayProviderConfig,_ as applyMoonshotConfigCn,a as applyMinimaxApiConfig,b as applyOpenrouterConfig,c as applyMinimaxApiProviderConfigCn,d as applyAuthProfileConfig,g as applyMoonshotConfig,h as applyKimiCodeProviderConfig,i as applyOpencodeZenProviderConfig,j as applyXaiProviderConfig,k as applyVeniceProviderConfig,l as applyMinimaxConfig,m as applyKimiCodeConfig,n as validateAnthropicSetupToken,o as applyMinimaxApiConfigCn,p as applyHuggingfaceProviderConfig,r as applyOpencodeZenConfig,s as applyMinimaxApiProviderConfig,t as buildTokenProfileId,u as applyMinimaxProviderConfig,v as applyMoonshotProviderConfig,w as applySyntheticConfig,x as applyOpenrouterProviderConfig,y as applyMoonshotProviderConfigCn,z as applyCloudflareAiGatewayProviderConfig}from"./auth-token-yWeJoLJ8.js";import{a as createVpsAwareOAuthHandlers,c as githubCopilotLoginCommand,i as resolveProviderMatch,n as mergeConfigPatch,o as isRemoteEnvironment,r as pickAuthMethod,s as resolvePluginProviders,t as applyDefaultModel}from"./provider-auth-helpers-BMBw21Tn.js";import{a as GOOGLE_GEMINI_DEFAULT_MODEL,i as detectZaiEndpoint,n as applyOpenAIConfig,o as applyGoogleGeminiModelDefault,r as applyOpenAIProviderConfig,s as ensureModelAllowlistEntry,t as OPENAI_DEFAULT_MODEL}from"./openai-model-default-CzXGNcAh.js";import{c as applyOpenAICodexModelDefault,o as promptAndConfigureVllm,r as applyPrimaryModel,s as OPENAI_CODEX_DEFAULT_MODEL}from"./model-picker-Do5aHFkC.js";import{s as applyAuthChoiceTransformers}from"./auth-choice.apply.transformers-CEVxl3ul.js";import{randomBytes}from"node:crypto";import{createServer}from"node:http";const DEFAULT_KEY_PREVIEW={head:4,tail:4};function normalizeApiKeyInput(raw){let trimmed=String(raw??``).trim();if(!trimmed)return``;let assignmentMatch=trimmed.match(/^(?:export\s+)?[A-Za-z_][A-Za-z0-9_]*\s*=\s*(.+)$/),valuePart=assignmentMatch?assignmentMatch[1].trim():trimmed,unquoted=valuePart.length>=2&&(valuePart.startsWith(`"`)&&valuePart.endsWith(`"`)||valuePart.startsWith(`'`)&&valuePart.endsWith(`'`)||valuePart.startsWith("`")&&valuePart.endsWith("`"))?valuePart.slice(1,-1):valuePart;return(unquoted.endsWith(`;`)?unquoted.slice(0,-1):unquoted).trim()}const validateApiKeyInput=value=>normalizeApiKeyInput(value).length>0?void 0:`Required`;function formatApiKeyPreview(raw,opts={}){let trimmed=raw.trim();if(!trimmed)return`…`;let head=opts.head??DEFAULT_KEY_PREVIEW.head,tail=opts.tail??DEFAULT_KEY_PREVIEW.tail;if(trimmed.length<=head+tail){let shortHead=Math.min(2,trimmed.length),shortTail=Math.min(2,trimmed.length-shortHead);return shortTail<=0?`${trimmed.slice(0,shortHead)}…`:`${trimmed.slice(0,shortHead)}…${trimmed.slice(-shortTail)}`}return`${trimmed.slice(0,head)}…${trimmed.slice(-tail)}`}const DEFAULT_ANTHROPIC_MODEL=`anthropic/${currentAnthropicModelId(`sonnet`)}`;async function applyAuthChoiceAnthropic(params){if(params.authChoice===`setup-token`||params.authChoice===`oauth`||params.authChoice===`token`){let nextConfig=params.config;await params.prompter.note(["Run `claude setup-token` in your terminal.",`Then paste the generated token below.`].join(`
1
+ import{T as resolveBuilderForceAgentsAgentDir,Yt as resolveEnvApiKey,b as ensureAuthProfileStore,c as CHUTES_AUTHORIZE_ENDPOINT,d as parseOAuthCallbackInput,dn as isHuggingfacePolicyLocked,f as loginOpenAICodex,fn as CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF,gt as SYNTHETIC_DEFAULT_MODEL_REF,l as exchangeChutesCodeForTokens,lt as VENICE_DEFAULT_MODEL_REF,st as resolveOllamaApiBase,t as resolveAuthProfileOrder,u as generateChutesPkce,un as discoverHuggingfaceModels,v as upsertAuthProfile,y as upsertAuthProfileWithLock}from"./auth-profiles-CuAFgjuQ.js";import{a as currentAnthropicModelId}from"./src-DvWaTze9.js";import{c as resolveAgentWorkspaceDir,i as resolveAgentDir,k as resolveDefaultAgentWorkspaceDir,l as resolveDefaultAgentId}from"./agent-scope-CufEmNj_.js";import{t as normalizeBaseUrl$1}from"./normalize-base-url-D_sv6Zgt.js";import{a as upsertSharedEnvVar}from"./env-file-DeS6x2OL.js";import{n as isLoopbackHost}from"./net-DtnXq2dW.js";import{d as openUrl}from"./onboard-helpers-D2vxAtv8.js";import{t as enablePluginInConfig}from"./enable-vNR-vlAd.js";import{C as setXaiApiKey,D as KIMI_CODING_MODEL_REF,E as writeOAuthCredentials,F as MOONSHOT_DEFAULT_MODEL_REF,I as QIANFAN_DEFAULT_MODEL_REF,S as setVercelAiGatewayApiKey,T as setZaiApiKey,_ as setOpenrouterApiKey,a as VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF,b as setTogetherApiKey,c as setAnthropicApiKey,d as setHuggingfaceApiKey,f as setKimiCodingApiKey,g as setOpencodeZenApiKey,h as setMoonshotApiKey,i as TOGETHER_DEFAULT_MODEL_REF,l as setCloudflareAiGatewayConfig,m as setMinimaxApiKey,n as LITELLM_DEFAULT_MODEL_REF,o as XIAOMI_DEFAULT_MODEL_REF,p as setLitellmApiKey,r as OPENROUTER_DEFAULT_MODEL_REF,s as ZAI_DEFAULT_MODEL_REF,t as HUGGINGFACE_DEFAULT_MODEL_REF,u as setGeminiApiKey,v as setQianfanApiKey,w as setXiaomiApiKey,x as setVeniceApiKey,y as setSyntheticApiKey,z as XAI_DEFAULT_MODEL_REF}from"./onboard-auth.credentials-CV8n9m_T.js";import{A as applyXaiConfig,B as applyVercelAiGatewayConfig,C as applyQianfanProviderConfig,D as applyTogetherProviderConfig,E as applyTogetherConfig,F as applyZaiProviderConfig,H as applyAgentDefaultModelPrimary,I as applyLitellmConfig,L as applyLitellmProviderConfig,M as applyXiaomiConfig,N as applyXiaomiProviderConfig,O as applyVeniceConfig,P as applyZaiConfig,R as applyCloudflareAiGatewayConfig,S as applyQianfanConfig,T as applySyntheticProviderConfig,V as applyVercelAiGatewayProviderConfig,_ as applyMoonshotConfigCn,a as applyMinimaxApiConfig,b as applyOpenrouterConfig,c as applyMinimaxApiProviderConfigCn,d as applyAuthProfileConfig,g as applyMoonshotConfig,h as applyKimiCodeProviderConfig,i as applyOpencodeZenProviderConfig,j as applyXaiProviderConfig,k as applyVeniceProviderConfig,l as applyMinimaxConfig,m as applyKimiCodeConfig,n as validateAnthropicSetupToken,o as applyMinimaxApiConfigCn,p as applyHuggingfaceProviderConfig,r as applyOpencodeZenConfig,s as applyMinimaxApiProviderConfig,t as buildTokenProfileId,u as applyMinimaxProviderConfig,v as applyMoonshotProviderConfig,w as applySyntheticConfig,x as applyOpenrouterProviderConfig,y as applyMoonshotProviderConfigCn,z as applyCloudflareAiGatewayProviderConfig}from"./auth-token-yWeJoLJ8.js";import{a as createVpsAwareOAuthHandlers,c as githubCopilotLoginCommand,i as resolveProviderMatch,n as mergeConfigPatch,o as isRemoteEnvironment,r as pickAuthMethod,s as resolvePluginProviders,t as applyDefaultModel}from"./provider-auth-helpers-CWUfg9zf.js";import{a as GOOGLE_GEMINI_DEFAULT_MODEL,i as detectZaiEndpoint,n as applyOpenAIConfig,o as applyGoogleGeminiModelDefault,r as applyOpenAIProviderConfig,s as ensureModelAllowlistEntry,t as OPENAI_DEFAULT_MODEL}from"./openai-model-default-CzXGNcAh.js";import{c as applyOpenAICodexModelDefault,o as promptAndConfigureVllm,r as applyPrimaryModel,s as OPENAI_CODEX_DEFAULT_MODEL}from"./model-picker-Do5aHFkC.js";import{s as applyAuthChoiceTransformers}from"./auth-choice.apply.transformers-Be8599JD.js";import{randomBytes}from"node:crypto";import{createServer}from"node:http";const DEFAULT_KEY_PREVIEW={head:4,tail:4};function normalizeApiKeyInput(raw){let trimmed=String(raw??``).trim();if(!trimmed)return``;let assignmentMatch=trimmed.match(/^(?:export\s+)?[A-Za-z_][A-Za-z0-9_]*\s*=\s*(.+)$/),valuePart=assignmentMatch?assignmentMatch[1].trim():trimmed,unquoted=valuePart.length>=2&&(valuePart.startsWith(`"`)&&valuePart.endsWith(`"`)||valuePart.startsWith(`'`)&&valuePart.endsWith(`'`)||valuePart.startsWith("`")&&valuePart.endsWith("`"))?valuePart.slice(1,-1):valuePart;return(unquoted.endsWith(`;`)?unquoted.slice(0,-1):unquoted).trim()}const validateApiKeyInput=value=>normalizeApiKeyInput(value).length>0?void 0:`Required`;function formatApiKeyPreview(raw,opts={}){let trimmed=raw.trim();if(!trimmed)return`…`;let head=opts.head??DEFAULT_KEY_PREVIEW.head,tail=opts.tail??DEFAULT_KEY_PREVIEW.tail;if(trimmed.length<=head+tail){let shortHead=Math.min(2,trimmed.length),shortTail=Math.min(2,trimmed.length-shortHead);return shortTail<=0?`${trimmed.slice(0,shortHead)}…`:`${trimmed.slice(0,shortHead)}…${trimmed.slice(-shortTail)}`}return`${trimmed.slice(0,head)}…${trimmed.slice(-tail)}`}const DEFAULT_ANTHROPIC_MODEL=`anthropic/${currentAnthropicModelId(`sonnet`)}`;async function applyAuthChoiceAnthropic(params){if(params.authChoice===`setup-token`||params.authChoice===`oauth`||params.authChoice===`token`){let nextConfig=params.config;await params.prompter.note(["Run `claude setup-token` in your terminal.",`Then paste the generated token below.`].join(`
2
2
  `),`Anthropic setup-token`);let tokenRaw=await params.prompter.text({message:`Paste Anthropic setup-token`,validate:value=>validateAnthropicSetupToken(String(value??``))}),token=String(tokenRaw??``).trim(),profileNameRaw=await params.prompter.text({message:`Token name (blank = default)`,placeholder:`default`}),provider=`anthropic`,namedProfileId=buildTokenProfileId({provider,name:String(profileNameRaw??``)});return await upsertAuthProfile({profileId:namedProfileId,agentDir:params.agentDir,credential:{type:`token`,provider,token}}),nextConfig=applyAuthProfileConfig(nextConfig,{profileId:namedProfileId,provider,mode:`token`}),params.setDefaultModel&&(nextConfig=applyAgentDefaultModelPrimary(nextConfig,DEFAULT_ANTHROPIC_MODEL)),{config:nextConfig}}if(params.authChoice===`apiKey`){if(params.opts?.tokenProvider&&params.opts.tokenProvider!==`anthropic`)return null;let nextConfig=params.config,hasCredential=!1,envKey=process.env.ANTHROPIC_API_KEY?.trim();if(params.opts?.token&&(await setAnthropicApiKey(normalizeApiKeyInput(params.opts.token),params.agentDir),hasCredential=!0),!hasCredential&&envKey&&await params.prompter.confirm({message:`Use existing ANTHROPIC_API_KEY (env, ${formatApiKeyPreview(envKey)})?`,initialValue:!0})&&(await setAnthropicApiKey(envKey,params.agentDir),hasCredential=!0),!hasCredential){let key=await params.prompter.text({message:`Enter Anthropic API key`,validate:validateApiKeyInput});await setAnthropicApiKey(normalizeApiKeyInput(String(key??``)),params.agentDir)}return nextConfig=applyAuthProfileConfig(nextConfig,{profileId:`anthropic:default`,provider:`anthropic`,mode:`api_key`}),params.setDefaultModel&&(nextConfig=applyAgentDefaultModelPrimary(nextConfig,DEFAULT_ANTHROPIC_MODEL)),{config:nextConfig}}return null}function createAuthChoiceAgentModelNoter(params){return async model=>{params.agentId&&await params.prompter.note(`Default model set to ${model} for agent "${params.agentId}".`,`Model configured`)}}async function applyDefaultModelChoice(params){if(params.setDefaultModel){let next=params.applyDefaultConfig(params.config);return params.noteDefault&&await params.prompter.note(`Default model set to ${params.noteDefault}`,`Model configured`),{config:next}}let nextWithModel=ensureModelAllowlistEntry({cfg:params.applyProviderConfig(params.config),modelRef:params.defaultModel});return await params.noteAgentModel(params.defaultModel),{config:nextWithModel,agentModelOverride:params.defaultModel}}async function applyAuthChoiceHuggingface(params){if(params.authChoice!==`huggingface-api-key`)return null;let nextConfig=params.config,agentModelOverride,noteAgentModel=createAuthChoiceAgentModelNoter(params),hasCredential=!1,hfKey=``;if(!hasCredential&&params.opts?.token&&params.opts.tokenProvider===`huggingface`&&(hfKey=normalizeApiKeyInput(params.opts.token),await setHuggingfaceApiKey(hfKey,params.agentDir),hasCredential=!0),hasCredential||await params.prompter.note([`Hugging Face Inference Providers offer OpenAI-compatible chat completions.`,`Create a token at: https://huggingface.co/settings/tokens (fine-grained, 'Make calls to Inference Providers').`].join(`
3
3
  `),`Hugging Face`),!hasCredential){let envKey=resolveEnvApiKey(`huggingface`);envKey&&await params.prompter.confirm({message:`Use existing Hugging Face token (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,initialValue:!0})&&(hfKey=envKey.apiKey,await setHuggingfaceApiKey(hfKey,params.agentDir),hasCredential=!0)}if(!hasCredential){let key=await params.prompter.text({message:`Enter Hugging Face API key (HF token)`,validate:validateApiKeyInput});hfKey=normalizeApiKeyInput(String(key??``)),await setHuggingfaceApiKey(hfKey,params.agentDir)}nextConfig=applyAuthProfileConfig(nextConfig,{profileId:`huggingface:default`,provider:`huggingface`,mode:`api_key`});let models=await discoverHuggingfaceModels(hfKey),options=[];for(let m of models){let baseRef=`huggingface/${m.id}`,label=m.name??m.id;options.push({value:baseRef,label}),options.push({value:`${baseRef}:cheapest`,label:`${label} (cheapest)`}),options.push({value:`${baseRef}:fastest`,label:`${label} (fastest)`})}let defaultRef=HUGGINGFACE_DEFAULT_MODEL_REF;options.sort((a,b)=>a.value===defaultRef?-1:b.value===defaultRef?1:a.label.localeCompare(b.label,void 0,{sensitivity:`base`}));let selectedModelRef=options.length===0?defaultRef:options.length===1?options[0].value:await params.prompter.select({message:`Default Hugging Face model`,options,initialValue:options.some(o=>o.value===defaultRef)?defaultRef:options[0].value});isHuggingfacePolicyLocked(selectedModelRef)&&await params.prompter.note(`Provider locked — router will choose backend by cost or speed.`,`Hugging Face`);let applied=await applyDefaultModelChoice({config:nextConfig,setDefaultModel:params.setDefaultModel,defaultModel:selectedModelRef,applyDefaultConfig:config=>{let withProvider=applyHuggingfaceProviderConfig(config),existingModel=withProvider.agents?.defaults?.model;return ensureModelAllowlistEntry({cfg:{...withProvider,agents:{...withProvider.agents,defaults:{...withProvider.agents?.defaults,model:{...existingModel&&typeof existingModel==`object`&&`fallbacks`in existingModel?{fallbacks:existingModel.fallbacks}:{},primary:selectedModelRef}}}},modelRef:selectedModelRef})},applyProviderConfig:applyHuggingfaceProviderConfig,noteDefault:selectedModelRef,noteAgentModel,prompter:params.prompter});return nextConfig=applied.config,agentModelOverride=applied.agentModelOverride??agentModelOverride,{config:nextConfig,agentModelOverride}}async function applyAuthChoiceOpenRouter(params){let nextConfig=params.config,agentModelOverride,noteAgentModel=createAuthChoiceAgentModelNoter(params),store=await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),existingProfileId=resolveAuthProfileOrder({cfg:nextConfig,store,provider:`openrouter`}).find(profileId=>!!store.profiles[profileId]),existingCred=existingProfileId?store.profiles[existingProfileId]:void 0,profileId=`openrouter:default`,mode=`api_key`,hasCredential=!1;if(existingProfileId&&existingCred?.type&&(profileId=existingProfileId,mode=existingCred.type===`oauth`?`oauth`:existingCred.type===`token`?`token`:`api_key`,hasCredential=!0),!hasCredential&&params.opts?.token&&params.opts?.tokenProvider===`openrouter`&&(await setOpenrouterApiKey(normalizeApiKeyInput(params.opts.token),params.agentDir),hasCredential=!0),!hasCredential){let envKey=resolveEnvApiKey(`openrouter`);envKey&&await params.prompter.confirm({message:`Use existing OPENROUTER_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,initialValue:!0})&&(await setOpenrouterApiKey(envKey.apiKey,params.agentDir),hasCredential=!0)}if(!hasCredential){let key=await params.prompter.text({message:`Enter OpenRouter API key`,validate:validateApiKeyInput});await setOpenrouterApiKey(normalizeApiKeyInput(String(key??``)),params.agentDir),hasCredential=!0}hasCredential&&(nextConfig=applyAuthProfileConfig(nextConfig,{profileId,provider:`openrouter`,mode}));let applied=await applyDefaultModelChoice({config:nextConfig,setDefaultModel:params.setDefaultModel,defaultModel:OPENROUTER_DEFAULT_MODEL_REF,applyDefaultConfig:applyOpenrouterConfig,applyProviderConfig:applyOpenrouterProviderConfig,noteDefault:OPENROUTER_DEFAULT_MODEL_REF,noteAgentModel,prompter:params.prompter});return nextConfig=applied.config,agentModelOverride=applied.agentModelOverride??agentModelOverride,{config:nextConfig,agentModelOverride}}const OPENCODE_ZEN_DEFAULT_MODEL=`opencode/claude-opus-4-6`;async function applyAuthChoiceApiProviders(params){let nextConfig=params.config,agentModelOverride,noteAgentModel=createAuthChoiceAgentModelNoter(params),authChoice=params.authChoice;authChoice===`apiKey`&&params.opts?.tokenProvider&&params.opts.tokenProvider!==`anthropic`&&params.opts.tokenProvider!==`openai`&&(params.opts.tokenProvider===`openrouter`?authChoice=`openrouter-api-key`:params.opts.tokenProvider===`litellm`?authChoice=`litellm-api-key`:params.opts.tokenProvider===`vercel-ai-gateway`?authChoice=`ai-gateway-api-key`:params.opts.tokenProvider===`cloudflare-ai-gateway`?authChoice=`cloudflare-ai-gateway-api-key`:params.opts.tokenProvider===`moonshot`?authChoice=`moonshot-api-key`:params.opts.tokenProvider===`kimi-code`||params.opts.tokenProvider===`kimi-coding`?authChoice=`kimi-code-api-key`:params.opts.tokenProvider===`google`?authChoice=`gemini-api-key`:params.opts.tokenProvider===`zai`?authChoice=`zai-api-key`:params.opts.tokenProvider===`xiaomi`?authChoice=`xiaomi-api-key`:params.opts.tokenProvider===`synthetic`?authChoice=`synthetic-api-key`:params.opts.tokenProvider===`venice`?authChoice=`venice-api-key`:params.opts.tokenProvider===`together`?authChoice=`together-api-key`:params.opts.tokenProvider===`huggingface`?authChoice=`huggingface-api-key`:params.opts.tokenProvider===`opencode`?authChoice=`opencode-zen`:params.opts.tokenProvider===`qianfan`&&(authChoice=`qianfan-api-key`));async function ensureMoonshotApiKeyCredential(promptMessage){let hasCredential=!1;!hasCredential&&params.opts?.token&&params.opts?.tokenProvider===`moonshot`&&(await setMoonshotApiKey(normalizeApiKeyInput(params.opts.token),params.agentDir),hasCredential=!0);let envKey=resolveEnvApiKey(`moonshot`);if(envKey&&await params.prompter.confirm({message:`Use existing MOONSHOT_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,initialValue:!0})&&(await setMoonshotApiKey(envKey.apiKey,params.agentDir),hasCredential=!0),!hasCredential){let key=await params.prompter.text({message:promptMessage,validate:validateApiKeyInput});await setMoonshotApiKey(normalizeApiKeyInput(String(key??``)),params.agentDir)}}if(authChoice===`openrouter-api-key`)return applyAuthChoiceOpenRouter(params);if(authChoice===`builderforcellm`){await params.prompter.note(`Using BuilderForceAgentsLLM default proxy (no local API key required).`,`BuilderForceAgentsLLM`);let defaultModel=`builderforcellm/auto`,applied=await applyDefaultModelChoice({config:nextConfig,setDefaultModel:params.setDefaultModel,defaultModel,applyDefaultConfig:config=>applyAgentDefaultModelPrimary(config,defaultModel),applyProviderConfig:config=>config,noteDefault:defaultModel,noteAgentModel,prompter:params.prompter});return nextConfig=applied.config,agentModelOverride=applied.agentModelOverride??agentModelOverride,{config:nextConfig,agentModelOverride}}if(authChoice===`litellm-api-key`){let store=await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),existingProfileId=resolveAuthProfileOrder({cfg:nextConfig,store,provider:`litellm`}).find(profileId=>!!store.profiles[profileId]),existingCred=existingProfileId?store.profiles[existingProfileId]:void 0,profileId=`litellm:default`,hasCredential=!1;if(existingProfileId&&existingCred?.type===`api_key`&&(profileId=existingProfileId,hasCredential=!0),!hasCredential&&params.opts?.token&&params.opts?.tokenProvider===`litellm`&&(await setLitellmApiKey(normalizeApiKeyInput(params.opts.token),params.agentDir),hasCredential=!0),!hasCredential){await params.prompter.note(`LiteLLM provides a unified API to 100+ LLM providers.
4
4
  Get your API key from your LiteLLM proxy or https://litellm.ai
@@ -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-CuAFgjuQ.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-C8c9naq-.js";import"./io-CsCa3_1Z.js";import"./manifest-registry-009gLJ4l.js";import"./config-DmxNxDRW.js";import"./model-discovery-RTHjxEvZ.js";import"./model-catalog-D8OQ7p7I.js";import"./transformers-stream-Buj40qHl.js";import"./shared-DUsuqnhk.js";import"./model-picker-Do5aHFkC.js";import{u as downloadAndWireLocalBrain}from"./auth-choice.apply.transformers-CEVxl3ul.js";export{downloadAndWireLocalBrain};
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-CuAFgjuQ.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-C8c9naq-.js";import"./io-CsCa3_1Z.js";import"./manifest-registry-009gLJ4l.js";import"./config-DmxNxDRW.js";import"./model-discovery-RTHjxEvZ.js";import"./model-catalog-D8OQ7p7I.js";import"./transformers-stream-Buj40qHl.js";import"./shared-DUsuqnhk.js";import"./model-picker-Do5aHFkC.js";import{u as downloadAndWireLocalBrain}from"./auth-choice.apply.transformers-Be8599JD.js";export{downloadAndWireLocalBrain};
@@ -1,2 +1,2 @@
1
1
  import{g as resolveStateDir}from"./paths-BHg-VHB4.js";import{b as ensureAuthProfileStore}from"./auth-profiles-CuAFgjuQ.js";import{s as downloadBuilderForceAgentsLlmModel}from"./transformers-stream-Buj40qHl.js";import{t as promptAuthChoiceGrouped}from"./auth-choice-prompt-_E1tVVLJ.js";import{r as applyPrimaryModel}from"./model-picker-Do5aHFkC.js";import path from"node:path";const BUILDERFORCE_AGENTSLLM_LOCAL_PROVIDER_ID=`builderforcellm-local`,TRANSFORMERS_PROVIDER_ID=BUILDERFORCE_AGENTSLLM_LOCAL_PROVIDER_ID,AMYGDALA_MODEL_ID=`HuggingFaceTB/SmolLM2-1.7B-Instruct`,AMYGDALA_DTYPE=`q4`,HIPPOCAMPUS_MODEL_ID=`onnx-community/Qwen3-0.6B-ONNX`,HIPPOCAMPUS_DTYPE=`q4f16`;function defaultCacheDir(){return path.join(resolveStateDir(),`models`)}function toModelKey(modelId){return`${TRANSFORMERS_PROVIDER_ID}/${modelId}`}function applyTransformersProviderConfig(cfg,amygdalaModelId,amygdalaDtype,hippocampusModelId,hippocampusDtype,cacheDir){return{...cfg,models:{...cfg.models,mode:cfg.models?.mode??`merge`,providers:{...cfg.models?.providers,[TRANSFORMERS_PROVIDER_ID]:{baseUrl:cacheDir,api:`transformers`,apiKey:`local`,models:[{id:amygdalaModelId,name:`amygdala (${amygdalaModelId})`,reasoning:!1,input:[`text`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:8192,maxTokens:2048,headers:{"x-transformers-dtype":amygdalaDtype,"x-brain-role":`amygdala`}},{id:hippocampusModelId,name:`hippocampus (${hippocampusModelId})`,reasoning:!1,input:[`text`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:40960,maxTokens:4096,headers:{"x-transformers-dtype":hippocampusDtype,"x-brain-role":`hippocampus`}}]}}},localBrain:{...cfg.localBrain,enabled:!0,models:{amygdala:{modelId:amygdalaModelId,dtype:amygdalaDtype},hippocampus:{modelId:hippocampusModelId,dtype:hippocampusDtype}}}}}function extractPrimaryModel(cfg){let model=cfg.agents?.defaults?.model;if(typeof model==`string`)return model;if(model&&typeof model==`object`)return model.primary}function setModelWithFallback(cfg,primary,fallback){let defaults=cfg.agents?.defaults,existingModel=defaults?.model;return{...cfg,agents:{...cfg.agents,defaults:{...defaults,model:{...typeof existingModel==`object`?existingModel:void 0,primary,fallbacks:[fallback]}}}}}async function downloadAndWireLocalBrain(opts){let nextConfig=opts.config,configuredModelKey=extractPrimaryModel(nextConfig),amygdalaModelId=nextConfig.localBrain?.models?.amygdala?.modelId??AMYGDALA_MODEL_ID,amygdalaDtype=nextConfig.localBrain?.models?.amygdala?.dtype??`q4`,hippocampusModelId=nextConfig.localBrain?.models?.hippocampus?.modelId??HIPPOCAMPUS_MODEL_ID,hippocampusDtype=nextConfig.localBrain?.models?.hippocampus?.dtype??HIPPOCAMPUS_DTYPE,cacheDir=defaultCacheDir();nextConfig=applyTransformersProviderConfig(nextConfig,amygdalaModelId,amygdalaDtype,hippocampusModelId,hippocampusDtype,cacheDir);let lastFile=``,amygdalaSpinner=opts.prompter.progress(`Downloading amygdala (${amygdalaModelId}, ${amygdalaDtype})… (~0.9 GB)`);try{await downloadBuilderForceAgentsLlmModel({modelId:amygdalaModelId,dtype:amygdalaDtype,cacheDir,onProgress:(file,pct)=>{file!==lastFile&&(lastFile=file),amygdalaSpinner.update(`Amygdala: ${path.basename(file)} — ${pct}%`)}}),amygdalaSpinner.stop(`Amygdala (fast router) downloaded and ready.`)}catch(err){let msg=err instanceof Error?err.message:String(err);return amygdalaSpinner.stop(`Amygdala download failed: ${msg}\nThe cortex (registered LLM) will be used without a local brain.\nRe-run "builderforce configure" to try again.`),{config:nextConfig}}lastFile=``;let hippoSpinner=opts.prompter.progress(`Downloading hippocampus (${hippocampusModelId}, ${hippocampusDtype})… (~2.3 GB)`);try{await downloadBuilderForceAgentsLlmModel({modelId:hippocampusModelId,dtype:hippocampusDtype,cacheDir,onProgress:(file,pct)=>{file!==lastFile&&(lastFile=file),hippoSpinner.update(`Hippocampus: ${path.basename(file)} — ${pct}%`)}}),hippoSpinner.stop(`Hippocampus (memory model) downloaded and ready.`)}catch(err){let msg=err instanceof Error?err.message:String(err);hippoSpinner.stop(`Hippocampus download failed: ${msg}\nAmygdala will run solo; hippocampus features disabled.\nRe-run "builderforce configure" to try again.`)}let localModelKey=toModelKey(amygdalaModelId);return nextConfig=configuredModelKey&&configuredModelKey!==localModelKey?setModelWithFallback(nextConfig,localModelKey,configuredModelKey):applyPrimaryModel(nextConfig,localModelKey),{config:nextConfig}}async function applyAuthChoiceTransformers(params){if(params.authChoice!==`builderforcellm-local`)return null;await params.prompter.note(`First, pick your main LLM provider.
2
- This handles coding tasks, complex reasoning, and everything the local brain defers.`,`Configure LLM`);let llmChoice=await promptAuthChoiceGrouped({prompter:params.prompter,store:await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),includeSkip:!1}),{applyAuthChoice}=await import(`./auth-choice.apply-BAeGyEKW.js`),nextConfig=(await applyAuthChoice({authChoice:llmChoice,config:params.config,prompter:params.prompter,runtime:params.runtime,setDefaultModel:!0})).config;return await params.prompter.confirm({message:`Enable local brain? (handles simple tasks, defers complex ones)`,initialValue:!0})?{config:(await downloadAndWireLocalBrain({config:nextConfig,prompter:params.prompter})).config}:{config:nextConfig}}export{HIPPOCAMPUS_MODEL_ID as a,applyTransformersProviderConfig as c,HIPPOCAMPUS_DTYPE as i,defaultCacheDir as l,AMYGDALA_MODEL_ID as n,TRANSFORMERS_PROVIDER_ID as o,BUILDERFORCE_AGENTSLLM_LOCAL_PROVIDER_ID as r,applyAuthChoiceTransformers as s,AMYGDALA_DTYPE as t,downloadAndWireLocalBrain as u};
2
+ This handles coding tasks, complex reasoning, and everything the local brain defers.`,`Configure LLM`);let llmChoice=await promptAuthChoiceGrouped({prompter:params.prompter,store:await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),includeSkip:!1}),{applyAuthChoice}=await import(`./auth-choice.apply-D4LYzI8l.js`),nextConfig=(await applyAuthChoice({authChoice:llmChoice,config:params.config,prompter:params.prompter,runtime:params.runtime,setDefaultModel:!0})).config;return await params.prompter.confirm({message:`Enable local brain? (handles simple tasks, defers complex ones)`,initialValue:!0})?{config:(await downloadAndWireLocalBrain({config:nextConfig,prompter:params.prompter})).config}:{config:nextConfig}}export{HIPPOCAMPUS_MODEL_ID as a,applyTransformersProviderConfig as c,HIPPOCAMPUS_DTYPE as i,defaultCacheDir as l,AMYGDALA_MODEL_ID as n,TRANSFORMERS_PROVIDER_ID as o,BUILDERFORCE_AGENTSLLM_LOCAL_PROVIDER_ID as r,applyAuthChoiceTransformers as s,AMYGDALA_DTYPE as t,downloadAndWireLocalBrain as u};
@@ -1,2 +1,2 @@
1
1
  import{g as resolveStateDir}from"./paths-5FcIFMsj.js";import{in as ensureAuthProfileStore}from"./model-selection-Doyvd4lU.js";import{s as downloadBuilderForceAgentsLlmModel}from"./transformers-stream-D7nRu4Qu.js";import{t as promptAuthChoiceGrouped}from"./auth-choice-prompt-Cg9HlfLS.js";import{r as applyPrimaryModel}from"./model-picker-CCvGdvzM.js";import path from"node:path";const BUILDERFORCE_AGENTSLLM_LOCAL_PROVIDER_ID=`builderforcellm-local`,TRANSFORMERS_PROVIDER_ID=BUILDERFORCE_AGENTSLLM_LOCAL_PROVIDER_ID,AMYGDALA_MODEL_ID=`HuggingFaceTB/SmolLM2-1.7B-Instruct`,AMYGDALA_DTYPE=`q4`,HIPPOCAMPUS_MODEL_ID=`onnx-community/Qwen3-0.6B-ONNX`,HIPPOCAMPUS_DTYPE=`q4f16`;function defaultCacheDir(){return path.join(resolveStateDir(),`models`)}function toModelKey(modelId){return`${TRANSFORMERS_PROVIDER_ID}/${modelId}`}function applyTransformersProviderConfig(cfg,amygdalaModelId,amygdalaDtype,hippocampusModelId,hippocampusDtype,cacheDir){return{...cfg,models:{...cfg.models,mode:cfg.models?.mode??`merge`,providers:{...cfg.models?.providers,[TRANSFORMERS_PROVIDER_ID]:{baseUrl:cacheDir,api:`transformers`,apiKey:`local`,models:[{id:amygdalaModelId,name:`amygdala (${amygdalaModelId})`,reasoning:!1,input:[`text`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:8192,maxTokens:2048,headers:{"x-transformers-dtype":amygdalaDtype,"x-brain-role":`amygdala`}},{id:hippocampusModelId,name:`hippocampus (${hippocampusModelId})`,reasoning:!1,input:[`text`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:40960,maxTokens:4096,headers:{"x-transformers-dtype":hippocampusDtype,"x-brain-role":`hippocampus`}}]}}},localBrain:{...cfg.localBrain,enabled:!0,models:{amygdala:{modelId:amygdalaModelId,dtype:amygdalaDtype},hippocampus:{modelId:hippocampusModelId,dtype:hippocampusDtype}}}}}function extractPrimaryModel(cfg){let model=cfg.agents?.defaults?.model;if(typeof model==`string`)return model;if(model&&typeof model==`object`)return model.primary}function setModelWithFallback(cfg,primary,fallback){let defaults=cfg.agents?.defaults,existingModel=defaults?.model;return{...cfg,agents:{...cfg.agents,defaults:{...defaults,model:{...typeof existingModel==`object`?existingModel:void 0,primary,fallbacks:[fallback]}}}}}async function downloadAndWireLocalBrain(opts){let nextConfig=opts.config,configuredModelKey=extractPrimaryModel(nextConfig),amygdalaModelId=nextConfig.localBrain?.models?.amygdala?.modelId??AMYGDALA_MODEL_ID,amygdalaDtype=nextConfig.localBrain?.models?.amygdala?.dtype??`q4`,hippocampusModelId=nextConfig.localBrain?.models?.hippocampus?.modelId??HIPPOCAMPUS_MODEL_ID,hippocampusDtype=nextConfig.localBrain?.models?.hippocampus?.dtype??HIPPOCAMPUS_DTYPE,cacheDir=defaultCacheDir();nextConfig=applyTransformersProviderConfig(nextConfig,amygdalaModelId,amygdalaDtype,hippocampusModelId,hippocampusDtype,cacheDir);let lastFile=``,amygdalaSpinner=opts.prompter.progress(`Downloading amygdala (${amygdalaModelId}, ${amygdalaDtype})… (~0.9 GB)`);try{await downloadBuilderForceAgentsLlmModel({modelId:amygdalaModelId,dtype:amygdalaDtype,cacheDir,onProgress:(file,pct)=>{file!==lastFile&&(lastFile=file),amygdalaSpinner.update(`Amygdala: ${path.basename(file)} — ${pct}%`)}}),amygdalaSpinner.stop(`Amygdala (fast router) downloaded and ready.`)}catch(err){let msg=err instanceof Error?err.message:String(err);return amygdalaSpinner.stop(`Amygdala download failed: ${msg}\nThe cortex (registered LLM) will be used without a local brain.\nRe-run "builderforce configure" to try again.`),{config:nextConfig}}lastFile=``;let hippoSpinner=opts.prompter.progress(`Downloading hippocampus (${hippocampusModelId}, ${hippocampusDtype})… (~2.3 GB)`);try{await downloadBuilderForceAgentsLlmModel({modelId:hippocampusModelId,dtype:hippocampusDtype,cacheDir,onProgress:(file,pct)=>{file!==lastFile&&(lastFile=file),hippoSpinner.update(`Hippocampus: ${path.basename(file)} — ${pct}%`)}}),hippoSpinner.stop(`Hippocampus (memory model) downloaded and ready.`)}catch(err){let msg=err instanceof Error?err.message:String(err);hippoSpinner.stop(`Hippocampus download failed: ${msg}\nAmygdala will run solo; hippocampus features disabled.\nRe-run "builderforce configure" to try again.`)}let localModelKey=toModelKey(amygdalaModelId);return nextConfig=configuredModelKey&&configuredModelKey!==localModelKey?setModelWithFallback(nextConfig,localModelKey,configuredModelKey):applyPrimaryModel(nextConfig,localModelKey),{config:nextConfig}}async function applyAuthChoiceTransformers(params){if(params.authChoice!==`builderforcellm-local`)return null;await params.prompter.note(`First, pick your main LLM provider.
2
- This handles coding tasks, complex reasoning, and everything the local brain defers.`,`Configure LLM`);let llmChoice=await promptAuthChoiceGrouped({prompter:params.prompter,store:await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),includeSkip:!1}),{applyAuthChoice}=await import(`./auth-choice.apply-Cd0RR0Z-.js`),nextConfig=(await applyAuthChoice({authChoice:llmChoice,config:params.config,prompter:params.prompter,runtime:params.runtime,setDefaultModel:!0})).config;return await params.prompter.confirm({message:`Enable local brain? (handles simple tasks, defers complex ones)`,initialValue:!0})?{config:(await downloadAndWireLocalBrain({config:nextConfig,prompter:params.prompter})).config}:{config:nextConfig}}export{HIPPOCAMPUS_MODEL_ID as a,applyTransformersProviderConfig as c,HIPPOCAMPUS_DTYPE as i,defaultCacheDir as l,AMYGDALA_MODEL_ID as n,TRANSFORMERS_PROVIDER_ID as o,BUILDERFORCE_AGENTSLLM_LOCAL_PROVIDER_ID as r,applyAuthChoiceTransformers as s,AMYGDALA_DTYPE as t,downloadAndWireLocalBrain as u};
2
+ This handles coding tasks, complex reasoning, and everything the local brain defers.`,`Configure LLM`);let llmChoice=await promptAuthChoiceGrouped({prompter:params.prompter,store:await ensureAuthProfileStore(params.agentDir,{allowKeychainPrompt:!1}),includeSkip:!1}),{applyAuthChoice}=await import(`./auth-choice.apply-C0RTYtRN.js`),nextConfig=(await applyAuthChoice({authChoice:llmChoice,config:params.config,prompter:params.prompter,runtime:params.runtime,setDefaultModel:!0})).config;return await params.prompter.confirm({message:`Enable local brain? (handles simple tasks, defers complex ones)`,initialValue:!0})?{config:(await downloadAndWireLocalBrain({config:nextConfig,prompter:params.prompter})).config}:{config:nextConfig}}export{HIPPOCAMPUS_MODEL_ID as a,applyTransformersProviderConfig as c,HIPPOCAMPUS_DTYPE as i,defaultCacheDir as l,AMYGDALA_MODEL_ID as n,TRANSFORMERS_PROVIDER_ID as o,BUILDERFORCE_AGENTSLLM_LOCAL_PROVIDER_ID as r,applyAuthChoiceTransformers as s,AMYGDALA_DTYPE as t,downloadAndWireLocalBrain as u};
@@ -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-Doyvd4lU.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-BifagO7i.js";import"./io-BNtgT4VB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BD801bpx.js";import"./model-catalog-BoiWqBTw.js";import"./transformers-stream-D7nRu4Qu.js";import"./shared-DXDwFhUI.js";import"./model-picker-CCvGdvzM.js";import{u as downloadAndWireLocalBrain}from"./auth-choice.apply.transformers-B2Nr9M7m.js";export{downloadAndWireLocalBrain};
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-Doyvd4lU.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-BifagO7i.js";import"./io-BNtgT4VB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BD801bpx.js";import"./model-catalog-BoiWqBTw.js";import"./transformers-stream-D7nRu4Qu.js";import"./shared-DXDwFhUI.js";import"./model-picker-CCvGdvzM.js";import{u as downloadAndWireLocalBrain}from"./auth-choice.apply.transformers-CgfGlqy1.js";export{downloadAndWireLocalBrain};
@@ -1 +1 @@
1
- import{R as isRich,z as theme}from"./utils-BP60e80M.js";import{d as visibleWidth}from"./subsystem-C4b1Von0.js";import{rn as resolveCommitHash}from"./subagent-registry-Cj5yC7B4.js";const DEFAULT_TAGLINE=`All your chats, one BuilderForceAgents.`,HOLIDAY_TAGLINES={newYear:`New Year's Day: New year, new config—same old EADDRINUSE, but this time we resolve it like grown-ups.`,lunarNewYear:`Lunar New Year: May your builds be lucky, your branches prosperous, and your merge conflicts chased away with fireworks.`,christmas:`Christmas: Ho ho ho—Santa's little agentNode-sistant is here to ship joy, roll back chaos, and stash the keys safely.`,eid:`Eid al-Fitr: Celebration mode: queues cleared, tasks completed, and good vibes committed to main with clean history.`,diwali:`Diwali: Let the logs sparkle and the bugs flee—today we light up the terminal and ship with pride.`,easter:`Easter: I found your missing environment variable—consider it a tiny CLI egg hunt with fewer jellybeans.`,hanukkah:`Hanukkah: Eight nights, eight retries, zero shame—may your gateway stay lit and your deployments stay peaceful.`,halloween:`Halloween: Spooky season: beware haunted dependencies, cursed caches, and the ghost of node_modules past.`,thanksgiving:`Thanksgiving: Grateful for stable ports, working DNS, and a bot that reads the logs so nobody has to.`,valentines:`Valentine's Day: Roses are typed, violets are piped—I'll automate the chores so you can spend time with humans.`},TAGLINES=[`Your terminal just grew agentNodes—type something and let the bot pinch the busywork.`,`Welcome to the command line: where dreams compile and confidence segfaults.`,`I run on caffeine, JSON5, and the audacity of "it worked on my machine."`,`Gateway online—please keep hands, feet, and appendages inside the shell at all times.`,`I speak fluent bash, mild sarcasm, and aggressive tab-completion energy.`,`One CLI to rule them all, and one more restart because you changed the port.`,`If it works, it's automation; if it breaks, it's a "learning opportunity."`,`Pairing codes exist because even bots believe in consent—and good security hygiene.`,`Your .env is showing; don't worry, I'll pretend I didn't see it.`,`I'll do the boring stuff while you dramatically stare at the logs like it's cinema.`,`I'm not saying your workflow is chaotic... I'm just bringing a linter and a helmet.`,`Type the command with confidence—nature will provide the stack trace if needed.`,`I don't judge, but your missing API keys are absolutely judging you.`,`I can grep it, git blame it, and gently roast it—pick your coping mechanism.`,`Hot reload for config, cold sweat for deploys.`,`I'm the assistant your terminal demanded, not the one your sleep schedule requested.`,`I keep secrets like a vault... unless you print them in debug logs again.`,`Automation with agentNodes: minimal fuss, maximal pinch.`,`I'm basically a Swiss Army knife, but with more opinions and fewer sharp edges.`,`If you're lost, run doctor; if you're brave, run prod; if you're wise, run tests.`,`Your task has been queued; your dignity has been deprecated.`,`I can't fix your code taste, but I can fix your build and your backlog.`,`I'm not magic—I'm just extremely persistent with retries and coping strategies.`,`It's not "failing," it's "discovering new ways to configure the same thing wrong."`,`Give me a workspace and I'll give you fewer tabs, fewer toggles, and more oxygen.`,`I read logs so you can keep pretending you don't have to.`,`If something's on fire, I can't extinguish it—but I can write a beautiful postmortem.`,`I'll refactor your busywork like it owes me money.`,`Say "stop" and I'll stop—say "ship" and we'll both learn a lesson.`,`I'm the reason your shell history looks like a hacker-movie montage.`,`I'm like tmux: confusing at first, then suddenly you can't live without me.`,`I can run local, remote, or purely on vibes—results may vary with DNS.`,`If you can describe it, I can probably automate it—or at least make it funnier.`,`Your config is valid, your assumptions are not.`,`I don't just autocomplete—I auto-commit (emotionally), then ask you to review (logically).`,`Less clicking, more shipping, fewer "where did that file go" moments.`,`AgentNodes out, commit in—let's ship something mildly responsible.`,`If it's repetitive, I'll automate it; if it's hard, I'll bring jokes and a rollback plan.`,`Because texting yourself reminders is so 2024.`,`Your inbox, your infra, your rules.`,`Turning "I'll reply later" into "my bot replied instantly".`,`Chat automation for people who peaked at IRC.`,`Because Siri wasn't answering at 3AM.`,`IPC, but it's your phone.`,`The UNIX philosophy meets your DMs.`,`curl for conversations.`,`Less middlemen, more messages.`,`Ship fast, log faster.`,`End-to-end encrypted, drama-to-drama excluded.`,`The only bot that stays out of your training set.`,`WhatsApp automation without the "please accept our new privacy policy".`,`Chat APIs that don't require a Senate hearing.`,`Meta wishes they shipped this fast.`,`Because the right answer is usually a script.`,`Your messages, your servers, your control.`,`OpenAI-compatible, not OpenAI-dependent.`,`iMessage green bubble energy, but for everyone.`,`Siri's competent cousin.`,`Works on Android. Crazy concept, we know.`,`No $999 stand required.`,`We ship features faster than Apple ships calculator updates.`,`Your AI assistant, now without the $3,499 headset.`,`Think different. Actually think.`,`Ah, the fruit tree company! 🍎`,`Greetings, Professor Falken`,HOLIDAY_TAGLINES.newYear,HOLIDAY_TAGLINES.lunarNewYear,HOLIDAY_TAGLINES.christmas,HOLIDAY_TAGLINES.eid,HOLIDAY_TAGLINES.diwali,HOLIDAY_TAGLINES.easter,HOLIDAY_TAGLINES.hanukkah,HOLIDAY_TAGLINES.halloween,HOLIDAY_TAGLINES.thanksgiving,HOLIDAY_TAGLINES.valentines],DAY_MS=1440*60*1e3;function utcParts(date){return{year:date.getUTCFullYear(),month:date.getUTCMonth(),day:date.getUTCDate()}}const onMonthDay=(month,day)=>date=>{let parts=utcParts(date);return parts.month===month&&parts.day===day},onSpecificDates=(dates,durationDays=1)=>date=>{let parts=utcParts(date);return dates.some(([year,month,day])=>{if(parts.year!==year)return!1;let start=Date.UTC(year,month,day),current=Date.UTC(parts.year,parts.month,parts.day);return current>=start&&current<start+durationDays*DAY_MS})},HOLIDAY_RULES=new Map([[HOLIDAY_TAGLINES.newYear,onMonthDay(0,1)],[HOLIDAY_TAGLINES.lunarNewYear,onSpecificDates([[2025,0,29],[2026,1,17],[2027,1,6]],1)],[HOLIDAY_TAGLINES.eid,onSpecificDates([[2025,2,30],[2025,2,31],[2026,2,20],[2027,2,10]],1)],[HOLIDAY_TAGLINES.diwali,onSpecificDates([[2025,9,20],[2026,10,8],[2027,9,28]],1)],[HOLIDAY_TAGLINES.easter,onSpecificDates([[2025,3,20],[2026,3,5],[2027,2,28]],1)],[HOLIDAY_TAGLINES.hanukkah,(windows=>date=>{let parts=utcParts(date),window=windows.find(entry=>entry.year===parts.year);if(!window)return!1;let start=Date.UTC(window.year,window.month,window.day),current=Date.UTC(parts.year,parts.month,parts.day);return current>=start&&current<start+window.duration*DAY_MS})([{year:2025,month:11,day:15,duration:8},{year:2026,month:11,day:5,duration:8},{year:2027,month:11,day:25,duration:8}])],[HOLIDAY_TAGLINES.halloween,onMonthDay(9,31)],[HOLIDAY_TAGLINES.thanksgiving,date=>{let parts=utcParts(date);if(parts.month!==10)return!1;let fourthThursday=1+(4-new Date(Date.UTC(parts.year,10,1)).getUTCDay()+7)%7+21;return parts.day===fourthThursday}],[HOLIDAY_TAGLINES.valentines,onMonthDay(1,14)],[HOLIDAY_TAGLINES.christmas,onMonthDay(11,25)]]);function isTaglineActive(tagline,date){let rule=HOLIDAY_RULES.get(tagline);return rule?rule(date):!0}function activeTaglines(options={}){if(TAGLINES.length===0)return[DEFAULT_TAGLINE];let today=options.now?options.now():new Date,filtered=TAGLINES.filter(tagline=>isTaglineActive(tagline,today));return filtered.length>0?filtered:TAGLINES}function pickTagline(options={}){let override=(options.env??process.env)?.BUILDERFORCE_AGENTS_TAGLINE_INDEX;if(override!==void 0){let parsed=Number.parseInt(override,10);if(!Number.isNaN(parsed)&&parsed>=0){let pool=TAGLINES.length>0?TAGLINES:[DEFAULT_TAGLINE];return pool[parsed%pool.length]}}let pool=activeTaglines(options),rand=options.random??Math.random;return pool[Math.floor(rand()*pool.length)%pool.length]}let bannerEmitted=!1;const hasJsonFlag=argv=>argv.some(arg=>arg===`--json`||arg.startsWith(`--json=`)),hasVersionFlag=argv=>argv.some(arg=>arg===`--version`||arg===`-V`||arg===`-v`);function formatCliBannerLine(version,options={}){let commitLabel=options.commit??resolveCommitHash({env:options.env})??`local`,tagline=pickTagline(options),rich=options.richTty??isRich(),title=`BuilderForceAgents`,columns=options.columns??process.stdout.columns??120,plainFullLine=`${title} ${version} (${commitLabel}) — ${tagline}`,fitsOnOneLine=visibleWidth(plainFullLine)<=columns;return rich?fitsOnOneLine?`${theme.brand(title)} ${theme.brand(version)} ${theme.muted(`(${commitLabel})`)} ${theme.muted(`—`)} ${theme.brand(tagline)}`:`${`${theme.brand(title)} ${theme.brand(version)} ${theme.muted(`(${commitLabel})`)}`}\n${`${` `.repeat(0)}${theme.brand(tagline)}`}`:fitsOnOneLine?plainFullLine:`${`${title} ${version} (${commitLabel})`}\n${`${` `.repeat(0)}${tagline}`}`}function emitCliBanner(version,options={}){if(bannerEmitted)return;let argv=options.argv??process.argv;if(!process.stdout.isTTY||hasJsonFlag(argv)||hasVersionFlag(argv))return;let line=formatCliBannerLine(version,options);process.stdout.write(`\n${line}\n\n`),bannerEmitted=!0}function hasEmittedCliBanner(){return bannerEmitted}export{formatCliBannerLine as n,hasEmittedCliBanner as r,emitCliBanner as t};
1
+ import{R as isRich,z as theme}from"./utils-BP60e80M.js";import{d as visibleWidth}from"./subsystem-C4b1Von0.js";import{rn as resolveCommitHash}from"./subagent-registry-m_x-JRkR.js";const DEFAULT_TAGLINE=`All your chats, one BuilderForceAgents.`,HOLIDAY_TAGLINES={newYear:`New Year's Day: New year, new config—same old EADDRINUSE, but this time we resolve it like grown-ups.`,lunarNewYear:`Lunar New Year: May your builds be lucky, your branches prosperous, and your merge conflicts chased away with fireworks.`,christmas:`Christmas: Ho ho ho—Santa's little agentNode-sistant is here to ship joy, roll back chaos, and stash the keys safely.`,eid:`Eid al-Fitr: Celebration mode: queues cleared, tasks completed, and good vibes committed to main with clean history.`,diwali:`Diwali: Let the logs sparkle and the bugs flee—today we light up the terminal and ship with pride.`,easter:`Easter: I found your missing environment variable—consider it a tiny CLI egg hunt with fewer jellybeans.`,hanukkah:`Hanukkah: Eight nights, eight retries, zero shame—may your gateway stay lit and your deployments stay peaceful.`,halloween:`Halloween: Spooky season: beware haunted dependencies, cursed caches, and the ghost of node_modules past.`,thanksgiving:`Thanksgiving: Grateful for stable ports, working DNS, and a bot that reads the logs so nobody has to.`,valentines:`Valentine's Day: Roses are typed, violets are piped—I'll automate the chores so you can spend time with humans.`},TAGLINES=[`Your terminal just grew agentNodes—type something and let the bot pinch the busywork.`,`Welcome to the command line: where dreams compile and confidence segfaults.`,`I run on caffeine, JSON5, and the audacity of "it worked on my machine."`,`Gateway online—please keep hands, feet, and appendages inside the shell at all times.`,`I speak fluent bash, mild sarcasm, and aggressive tab-completion energy.`,`One CLI to rule them all, and one more restart because you changed the port.`,`If it works, it's automation; if it breaks, it's a "learning opportunity."`,`Pairing codes exist because even bots believe in consent—and good security hygiene.`,`Your .env is showing; don't worry, I'll pretend I didn't see it.`,`I'll do the boring stuff while you dramatically stare at the logs like it's cinema.`,`I'm not saying your workflow is chaotic... I'm just bringing a linter and a helmet.`,`Type the command with confidence—nature will provide the stack trace if needed.`,`I don't judge, but your missing API keys are absolutely judging you.`,`I can grep it, git blame it, and gently roast it—pick your coping mechanism.`,`Hot reload for config, cold sweat for deploys.`,`I'm the assistant your terminal demanded, not the one your sleep schedule requested.`,`I keep secrets like a vault... unless you print them in debug logs again.`,`Automation with agentNodes: minimal fuss, maximal pinch.`,`I'm basically a Swiss Army knife, but with more opinions and fewer sharp edges.`,`If you're lost, run doctor; if you're brave, run prod; if you're wise, run tests.`,`Your task has been queued; your dignity has been deprecated.`,`I can't fix your code taste, but I can fix your build and your backlog.`,`I'm not magic—I'm just extremely persistent with retries and coping strategies.`,`It's not "failing," it's "discovering new ways to configure the same thing wrong."`,`Give me a workspace and I'll give you fewer tabs, fewer toggles, and more oxygen.`,`I read logs so you can keep pretending you don't have to.`,`If something's on fire, I can't extinguish it—but I can write a beautiful postmortem.`,`I'll refactor your busywork like it owes me money.`,`Say "stop" and I'll stop—say "ship" and we'll both learn a lesson.`,`I'm the reason your shell history looks like a hacker-movie montage.`,`I'm like tmux: confusing at first, then suddenly you can't live without me.`,`I can run local, remote, or purely on vibes—results may vary with DNS.`,`If you can describe it, I can probably automate it—or at least make it funnier.`,`Your config is valid, your assumptions are not.`,`I don't just autocomplete—I auto-commit (emotionally), then ask you to review (logically).`,`Less clicking, more shipping, fewer "where did that file go" moments.`,`AgentNodes out, commit in—let's ship something mildly responsible.`,`If it's repetitive, I'll automate it; if it's hard, I'll bring jokes and a rollback plan.`,`Because texting yourself reminders is so 2024.`,`Your inbox, your infra, your rules.`,`Turning "I'll reply later" into "my bot replied instantly".`,`Chat automation for people who peaked at IRC.`,`Because Siri wasn't answering at 3AM.`,`IPC, but it's your phone.`,`The UNIX philosophy meets your DMs.`,`curl for conversations.`,`Less middlemen, more messages.`,`Ship fast, log faster.`,`End-to-end encrypted, drama-to-drama excluded.`,`The only bot that stays out of your training set.`,`WhatsApp automation without the "please accept our new privacy policy".`,`Chat APIs that don't require a Senate hearing.`,`Meta wishes they shipped this fast.`,`Because the right answer is usually a script.`,`Your messages, your servers, your control.`,`OpenAI-compatible, not OpenAI-dependent.`,`iMessage green bubble energy, but for everyone.`,`Siri's competent cousin.`,`Works on Android. Crazy concept, we know.`,`No $999 stand required.`,`We ship features faster than Apple ships calculator updates.`,`Your AI assistant, now without the $3,499 headset.`,`Think different. Actually think.`,`Ah, the fruit tree company! 🍎`,`Greetings, Professor Falken`,HOLIDAY_TAGLINES.newYear,HOLIDAY_TAGLINES.lunarNewYear,HOLIDAY_TAGLINES.christmas,HOLIDAY_TAGLINES.eid,HOLIDAY_TAGLINES.diwali,HOLIDAY_TAGLINES.easter,HOLIDAY_TAGLINES.hanukkah,HOLIDAY_TAGLINES.halloween,HOLIDAY_TAGLINES.thanksgiving,HOLIDAY_TAGLINES.valentines],DAY_MS=1440*60*1e3;function utcParts(date){return{year:date.getUTCFullYear(),month:date.getUTCMonth(),day:date.getUTCDate()}}const onMonthDay=(month,day)=>date=>{let parts=utcParts(date);return parts.month===month&&parts.day===day},onSpecificDates=(dates,durationDays=1)=>date=>{let parts=utcParts(date);return dates.some(([year,month,day])=>{if(parts.year!==year)return!1;let start=Date.UTC(year,month,day),current=Date.UTC(parts.year,parts.month,parts.day);return current>=start&&current<start+durationDays*DAY_MS})},HOLIDAY_RULES=new Map([[HOLIDAY_TAGLINES.newYear,onMonthDay(0,1)],[HOLIDAY_TAGLINES.lunarNewYear,onSpecificDates([[2025,0,29],[2026,1,17],[2027,1,6]],1)],[HOLIDAY_TAGLINES.eid,onSpecificDates([[2025,2,30],[2025,2,31],[2026,2,20],[2027,2,10]],1)],[HOLIDAY_TAGLINES.diwali,onSpecificDates([[2025,9,20],[2026,10,8],[2027,9,28]],1)],[HOLIDAY_TAGLINES.easter,onSpecificDates([[2025,3,20],[2026,3,5],[2027,2,28]],1)],[HOLIDAY_TAGLINES.hanukkah,(windows=>date=>{let parts=utcParts(date),window=windows.find(entry=>entry.year===parts.year);if(!window)return!1;let start=Date.UTC(window.year,window.month,window.day),current=Date.UTC(parts.year,parts.month,parts.day);return current>=start&&current<start+window.duration*DAY_MS})([{year:2025,month:11,day:15,duration:8},{year:2026,month:11,day:5,duration:8},{year:2027,month:11,day:25,duration:8}])],[HOLIDAY_TAGLINES.halloween,onMonthDay(9,31)],[HOLIDAY_TAGLINES.thanksgiving,date=>{let parts=utcParts(date);if(parts.month!==10)return!1;let fourthThursday=1+(4-new Date(Date.UTC(parts.year,10,1)).getUTCDay()+7)%7+21;return parts.day===fourthThursday}],[HOLIDAY_TAGLINES.valentines,onMonthDay(1,14)],[HOLIDAY_TAGLINES.christmas,onMonthDay(11,25)]]);function isTaglineActive(tagline,date){let rule=HOLIDAY_RULES.get(tagline);return rule?rule(date):!0}function activeTaglines(options={}){if(TAGLINES.length===0)return[DEFAULT_TAGLINE];let today=options.now?options.now():new Date,filtered=TAGLINES.filter(tagline=>isTaglineActive(tagline,today));return filtered.length>0?filtered:TAGLINES}function pickTagline(options={}){let override=(options.env??process.env)?.BUILDERFORCE_AGENTS_TAGLINE_INDEX;if(override!==void 0){let parsed=Number.parseInt(override,10);if(!Number.isNaN(parsed)&&parsed>=0){let pool=TAGLINES.length>0?TAGLINES:[DEFAULT_TAGLINE];return pool[parsed%pool.length]}}let pool=activeTaglines(options),rand=options.random??Math.random;return pool[Math.floor(rand()*pool.length)%pool.length]}let bannerEmitted=!1;const hasJsonFlag=argv=>argv.some(arg=>arg===`--json`||arg.startsWith(`--json=`)),hasVersionFlag=argv=>argv.some(arg=>arg===`--version`||arg===`-V`||arg===`-v`);function formatCliBannerLine(version,options={}){let commitLabel=options.commit??resolveCommitHash({env:options.env})??`local`,tagline=pickTagline(options),rich=options.richTty??isRich(),title=`BuilderForceAgents`,columns=options.columns??process.stdout.columns??120,plainFullLine=`${title} ${version} (${commitLabel}) — ${tagline}`,fitsOnOneLine=visibleWidth(plainFullLine)<=columns;return rich?fitsOnOneLine?`${theme.brand(title)} ${theme.brand(version)} ${theme.muted(`(${commitLabel})`)} ${theme.muted(`—`)} ${theme.brand(tagline)}`:`${`${theme.brand(title)} ${theme.brand(version)} ${theme.muted(`(${commitLabel})`)}`}\n${`${` `.repeat(0)}${theme.brand(tagline)}`}`:fitsOnOneLine?plainFullLine:`${`${title} ${version} (${commitLabel})`}\n${`${` `.repeat(0)}${tagline}`}`}function emitCliBanner(version,options={}){if(bannerEmitted)return;let argv=options.argv??process.argv;if(!process.stdout.isTTY||hasJsonFlag(argv)||hasVersionFlag(argv))return;let line=formatCliBannerLine(version,options);process.stdout.write(`\n${line}\n\n`),bannerEmitted=!0}function hasEmittedCliBanner(){return bannerEmitted}export{formatCliBannerLine as n,hasEmittedCliBanner as r,emitCliBanner as t};
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026.10.12",
3
- "commit": "331b516bd8a70dd0faeda3e1a79507ec8b3a7484",
4
- "builtAt": "2026-10-20T03:05:24.766Z"
2
+ "version": "2026.10.13",
3
+ "commit": "ed26ab8a853d62339194546e2b0d984a19157718",
4
+ "builtAt": "2026-10-20T04:33:10.301Z"
5
5
  }
@@ -1,4 +1,4 @@
1
- import"./paths-5FcIFMsj.js";import{B as theme}from"./utils-DbaBVFaK.js";import"./embedded-helpers-2fP2Yq8h.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-Doyvd4lU.js";import{t as normalizeBaseUrl}from"./normalize-base-url-DmugqkQ6.js";import{a as upsertSharedEnvVar,i as readSharedEnvVar}from"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-BifagO7i.js";import{U as VERSION,a as readConfigFileSnapshot,c as writeConfigFile}from"./io-BNtgT4VB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BD801bpx.js";import"./model-catalog-BoiWqBTw.js";import"./sandbox-1jtP0nhr.js";import"./chrome-Bfprrnm1.js";import"./tailscale-DLkpGquM.js";import"./auth-lebUHrkd.js";import"./server-context-DKdrUePN.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./routes-CRrqIFJR.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-BPr0-lkT.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{n as fetchWithTimeout}from"./fetch-timeout-BIqoSVfA.js";import{_ as isBuilderForceAgentsProject,n as loadProjectContext,o as updateProjectContextFields}from"./project-context-store-Dbbjk8CQ.js";import"./client-xfoidwPI.js";import"./call-CJq3iGqu.js";import"./builderforcellm-syscheck-Cp4LMft_.js";import"./usage-format-DGf8ZWPH.js";import{f as initializeBuilderForceAgentsProject}from"./project-context-BLpMH93w.js";import{r as saveMambaState}from"./mamba-state-engine-BQuRdgMU.js";import"./transformers-stream-D7nRu4Qu.js";import"./builderforce-directory-sync-DRmWhsXb.js";import"./shared-DXDwFhUI.js";import{_ as setOpenrouterApiKey,c as setAnthropicApiKey,u as setGeminiApiKey}from"./onboard-auth.credentials-uekJMiYv.js";import"./model-picker-CCvGdvzM.js";import"./auth-choice.apply.transformers-B2Nr9M7m.js";import{t as runTui}from"./tui-BCtecmPL.js";import"./tui-stream-assembler-4UmPxCWJ.js";import{i as selectTenantAndToken,n as builderforceApiFetch,r as ensureProjectMapping,t as authenticateWithPassword}from"./builderforce-api-DcPAGsla.js";import path from"node:path";import fs from"node:fs/promises";import{confirm,intro,note,outro,password,select,spinner,text}from"@clack/prompts";import{Command}from"commander";const DEFAULT_REGISTRY_URL=`https://api.builderforce.ai`;function resolveRegistryUrl(){return normalizeBaseUrl(readSharedEnvVar(`BUILDERFORCE_AGENTS_LINK_URL`)??DEFAULT_REGISTRY_URL)}function resolveAuthHeaders(){let apiKey=readSharedEnvVar(`BUILDERFORCE_AGENTS_LINK_API_KEY`);return apiKey?{Authorization:`Bearer ${apiKey}`}:{}}function isV2Package(pkg){return pkg.version===`2.0`}async function fetchAgentPackage(params){let url=`${normalizeBaseUrl(params.registryUrl??resolveRegistryUrl())}/api/agents/${encodeURIComponent(params.agentId)}/package`,res;try{res=await fetchWithTimeout(url,{method:`GET`,headers:{Accept:`application/json`,...resolveAuthHeaders()}},3e4)}catch(err){let msg=err instanceof Error?err.message:String(err);throw Error(`Network error fetching agent package: ${msg}`,{cause:err})}if(!res.ok){let text=await res.text().catch(()=>``);throw Error(`Registry returned ${res.status} ${res.statusText}${text?`: ${text}`:``}`)}let pkg=await res.json();if(!pkg.version||!pkg.platform||!pkg.name||!pkg.base_model)throw Error(`Invalid agent package: missing required fields (version, platform, name, base_model)`);return pkg}function resolveWorkforceModelRef(params){return readSharedEnvVar(`BUILDERFORCE_AGENTS_LINK_API_KEY`)?`builderforcellm/workforce-${params.agentId}`:params.pkg.base_model}async function installWorkforceAgent(params){let registryUrl=params.registryUrl??resolveRegistryUrl(),spin=spinner();spin.start(`Fetching agent package for "${params.agentId}" from ${registryUrl}…`);let pkg;try{pkg=await fetchAgentPackage({agentId:params.agentId,registryUrl}),spin.stop(`Package downloaded: ${pkg.name} (v${pkg.version})`)}catch(err){throw spin.stop(`Failed to download agent package`),err}let modelRef=resolveWorkforceModelRef({agentId:params.agentId,pkg}),hasMambaState=isV2Package(pkg)&&!!pkg.mamba_state,installed={agentId:params.agentId,name:pkg.name,title:pkg.title,baseModel:pkg.base_model,modelRef,loraArtifactKey:pkg.r2_artifact_key,packageVersion:pkg.version,hasMambaState,installedAt:new Date().toISOString(),registryUrl};return await updateProjectContextFields(params.projectRoot,{customAgent:installed,llm:{provider:`builderforcellm`,model:modelRef}}),hasMambaState&&isV2Package(pkg)&&pkg.mamba_state&&await saveMambaState(params.projectRoot,pkg.mamba_state),[`Workforce agent installed: ${pkg.name} (${params.agentId})`,` Base model: ${pkg.base_model}`,` Package: v${pkg.version}`,` Mamba state: ${hasMambaState?`yes (persistent memory)`:`no`}`,` Model ref: ${modelRef}`].join(`
1
+ import"./paths-5FcIFMsj.js";import{B as theme}from"./utils-DbaBVFaK.js";import"./embedded-helpers-2fP2Yq8h.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-Doyvd4lU.js";import{t as normalizeBaseUrl}from"./normalize-base-url-DmugqkQ6.js";import{a as upsertSharedEnvVar,i as readSharedEnvVar}from"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-BifagO7i.js";import{U as VERSION,a as readConfigFileSnapshot,c as writeConfigFile}from"./io-BNtgT4VB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-BD801bpx.js";import"./model-catalog-BoiWqBTw.js";import"./sandbox-1jtP0nhr.js";import"./chrome-Bfprrnm1.js";import"./tailscale-DLkpGquM.js";import"./auth-lebUHrkd.js";import"./server-context-DKdrUePN.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./routes-CRrqIFJR.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-BPr0-lkT.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{n as fetchWithTimeout}from"./fetch-timeout-BIqoSVfA.js";import{_ as isBuilderForceAgentsProject,n as loadProjectContext,o as updateProjectContextFields}from"./project-context-store-Dbbjk8CQ.js";import"./client-xfoidwPI.js";import"./call-CJq3iGqu.js";import"./builderforcellm-syscheck-Cp4LMft_.js";import"./usage-format-DGf8ZWPH.js";import{f as initializeBuilderForceAgentsProject}from"./project-context-BLpMH93w.js";import{r as saveMambaState}from"./mamba-state-engine-BQuRdgMU.js";import"./transformers-stream-D7nRu4Qu.js";import"./builderforce-directory-sync-DRmWhsXb.js";import"./shared-DXDwFhUI.js";import{_ as setOpenrouterApiKey,c as setAnthropicApiKey,u as setGeminiApiKey}from"./onboard-auth.credentials-uekJMiYv.js";import"./model-picker-CCvGdvzM.js";import"./auth-choice.apply.transformers-CgfGlqy1.js";import{t as runTui}from"./tui-HTtOgZ_X.js";import"./tui-stream-assembler-4UmPxCWJ.js";import{i as selectTenantAndToken,n as builderforceApiFetch,r as ensureProjectMapping,t as authenticateWithPassword}from"./builderforce-api-DcPAGsla.js";import path from"node:path";import fs from"node:fs/promises";import{confirm,intro,note,outro,password,select,spinner,text}from"@clack/prompts";import{Command}from"commander";const DEFAULT_REGISTRY_URL=`https://api.builderforce.ai`;function resolveRegistryUrl(){return normalizeBaseUrl(readSharedEnvVar(`BUILDERFORCE_AGENTS_LINK_URL`)??DEFAULT_REGISTRY_URL)}function resolveAuthHeaders(){let apiKey=readSharedEnvVar(`BUILDERFORCE_AGENTS_LINK_API_KEY`);return apiKey?{Authorization:`Bearer ${apiKey}`}:{}}function isV2Package(pkg){return pkg.version===`2.0`}async function fetchAgentPackage(params){let url=`${normalizeBaseUrl(params.registryUrl??resolveRegistryUrl())}/api/agents/${encodeURIComponent(params.agentId)}/package`,res;try{res=await fetchWithTimeout(url,{method:`GET`,headers:{Accept:`application/json`,...resolveAuthHeaders()}},3e4)}catch(err){let msg=err instanceof Error?err.message:String(err);throw Error(`Network error fetching agent package: ${msg}`,{cause:err})}if(!res.ok){let text=await res.text().catch(()=>``);throw Error(`Registry returned ${res.status} ${res.statusText}${text?`: ${text}`:``}`)}let pkg=await res.json();if(!pkg.version||!pkg.platform||!pkg.name||!pkg.base_model)throw Error(`Invalid agent package: missing required fields (version, platform, name, base_model)`);return pkg}function resolveWorkforceModelRef(params){return readSharedEnvVar(`BUILDERFORCE_AGENTS_LINK_API_KEY`)?`builderforcellm/workforce-${params.agentId}`:params.pkg.base_model}async function installWorkforceAgent(params){let registryUrl=params.registryUrl??resolveRegistryUrl(),spin=spinner();spin.start(`Fetching agent package for "${params.agentId}" from ${registryUrl}…`);let pkg;try{pkg=await fetchAgentPackage({agentId:params.agentId,registryUrl}),spin.stop(`Package downloaded: ${pkg.name} (v${pkg.version})`)}catch(err){throw spin.stop(`Failed to download agent package`),err}let modelRef=resolveWorkforceModelRef({agentId:params.agentId,pkg}),hasMambaState=isV2Package(pkg)&&!!pkg.mamba_state,installed={agentId:params.agentId,name:pkg.name,title:pkg.title,baseModel:pkg.base_model,modelRef,loraArtifactKey:pkg.r2_artifact_key,packageVersion:pkg.version,hasMambaState,installedAt:new Date().toISOString(),registryUrl};return await updateProjectContextFields(params.projectRoot,{customAgent:installed,llm:{provider:`builderforcellm`,model:modelRef}}),hasMambaState&&isV2Package(pkg)&&pkg.mamba_state&&await saveMambaState(params.projectRoot,pkg.mamba_state),[`Workforce agent installed: ${pkg.name} (${params.agentId})`,` Base model: ${pkg.base_model}`,` Package: v${pkg.version}`,` Mamba state: ${hasMambaState?`yes (persistent memory)`:`no`}`,` Model ref: ${modelRef}`].join(`
2
2
  `)}async function showWorkforceAgentInfo(projectRoot){let ctx=await loadProjectContext(projectRoot);if(!ctx?.customAgent){note(`No Workforce agent is installed in this project.
3
3
 
4
4
  Run: builderforce agent install <agentId>`,`No agent installed`);return}let a=ctx.customAgent;note([theme.heading(`Workforce Agent`),` ID: ${a.agentId}`,` Name: ${a.name}${a.title?` — ${a.title}`:``}`,` Base model: ${a.baseModel}`,` Model ref: ${a.modelRef}`,` Package: v${a.packageVersion}`,` Mamba state: ${a.hasMambaState?`yes (persistent memory)`:`no`}`,` Installed: ${a.installedAt}`,` Registry: ${a.registryUrl}`].join(`
@@ -1,4 +1,4 @@
1
- import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{z as theme}from"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-CuAFgjuQ.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import{t as normalizeBaseUrl}from"./normalize-base-url-D_sv6Zgt.js";import{a as upsertSharedEnvVar,i as readSharedEnvVar}from"./env-file-DeS6x2OL.js";import"./src-C8c9naq-.js";import{U as VERSION,a as readConfigFileSnapshot,c as writeConfigFile}from"./io-CsCa3_1Z.js";import"./manifest-registry-009gLJ4l.js";import"./config-DmxNxDRW.js";import"./model-discovery-RTHjxEvZ.js";import"./model-catalog-D8OQ7p7I.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./client-CGgp3zkQ.js";import"./call-O-iC_P5t.js";import"./message-channel-z5YRpR2d.js";import"./sessions-CmJXMlLP.js";import{_ as isBuilderForceAgentsProject,n as loadProjectContext,o as updateProjectContextFields}from"./project-context-store-BNXYrLJz.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-BZGiFZlP.js";import"./sandbox-C-Owvt1-.js";import"./chrome-BfwLDcFc.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-BjYYSEVE.js";import"./routes-Dnfsevhw.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{n as fetchWithTimeout}from"./fetch-timeout-Cb8Yj9Tw.js";import"./builderforcellm-syscheck-tquUDu_7.js";import"./usage-format-5sp5AMSu.js";import{f as initializeBuilderForceAgentsProject}from"./project-context-BdK18hVI.js";import{r as saveMambaState}from"./mamba-state-engine-DJt_RpLC.js";import"./transformers-stream-Buj40qHl.js";import"./builderforce-directory-sync-gx_ESkap.js";import"./shared-DUsuqnhk.js";import{_ as setOpenrouterApiKey,c as setAnthropicApiKey,u as setGeminiApiKey}from"./onboard-auth.credentials-CV8n9m_T.js";import"./model-picker-Do5aHFkC.js";import"./auth-choice.apply.transformers-CEVxl3ul.js";import{t as runTui}from"./tui-BqHLI73U.js";import"./tui-stream-assembler-DW908fGx.js";import{i as selectTenantAndToken,n as builderforceApiFetch,r as ensureProjectMapping,t as authenticateWithPassword}from"./builderforce-api-DKgXl8BH.js";import path from"node:path";import fs from"node:fs/promises";import{confirm,intro,note,outro,password,select,spinner,text}from"@clack/prompts";import{Command}from"commander";const DEFAULT_REGISTRY_URL=`https://api.builderforce.ai`;function resolveRegistryUrl(){return normalizeBaseUrl(readSharedEnvVar(`BUILDERFORCE_AGENTS_LINK_URL`)??DEFAULT_REGISTRY_URL)}function resolveAuthHeaders(){let apiKey=readSharedEnvVar(`BUILDERFORCE_AGENTS_LINK_API_KEY`);return apiKey?{Authorization:`Bearer ${apiKey}`}:{}}function isV2Package(pkg){return pkg.version===`2.0`}async function fetchAgentPackage(params){let url=`${normalizeBaseUrl(params.registryUrl??resolveRegistryUrl())}/api/agents/${encodeURIComponent(params.agentId)}/package`,res;try{res=await fetchWithTimeout(url,{method:`GET`,headers:{Accept:`application/json`,...resolveAuthHeaders()}},3e4)}catch(err){let msg=err instanceof Error?err.message:String(err);throw Error(`Network error fetching agent package: ${msg}`,{cause:err})}if(!res.ok){let text=await res.text().catch(()=>``);throw Error(`Registry returned ${res.status} ${res.statusText}${text?`: ${text}`:``}`)}let pkg=await res.json();if(!pkg.version||!pkg.platform||!pkg.name||!pkg.base_model)throw Error(`Invalid agent package: missing required fields (version, platform, name, base_model)`);return pkg}function resolveWorkforceModelRef(params){return readSharedEnvVar(`BUILDERFORCE_AGENTS_LINK_API_KEY`)?`builderforcellm/workforce-${params.agentId}`:params.pkg.base_model}async function installWorkforceAgent(params){let registryUrl=params.registryUrl??resolveRegistryUrl(),spin=spinner();spin.start(`Fetching agent package for "${params.agentId}" from ${registryUrl}…`);let pkg;try{pkg=await fetchAgentPackage({agentId:params.agentId,registryUrl}),spin.stop(`Package downloaded: ${pkg.name} (v${pkg.version})`)}catch(err){throw spin.stop(`Failed to download agent package`),err}let modelRef=resolveWorkforceModelRef({agentId:params.agentId,pkg}),hasMambaState=isV2Package(pkg)&&!!pkg.mamba_state,installed={agentId:params.agentId,name:pkg.name,title:pkg.title,baseModel:pkg.base_model,modelRef,loraArtifactKey:pkg.r2_artifact_key,packageVersion:pkg.version,hasMambaState,installedAt:new Date().toISOString(),registryUrl};return await updateProjectContextFields(params.projectRoot,{customAgent:installed,llm:{provider:`builderforcellm`,model:modelRef}}),hasMambaState&&isV2Package(pkg)&&pkg.mamba_state&&await saveMambaState(params.projectRoot,pkg.mamba_state),[`Workforce agent installed: ${pkg.name} (${params.agentId})`,` Base model: ${pkg.base_model}`,` Package: v${pkg.version}`,` Mamba state: ${hasMambaState?`yes (persistent memory)`:`no`}`,` Model ref: ${modelRef}`].join(`
1
+ import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{z as theme}from"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-CuAFgjuQ.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import{t as normalizeBaseUrl}from"./normalize-base-url-D_sv6Zgt.js";import{a as upsertSharedEnvVar,i as readSharedEnvVar}from"./env-file-DeS6x2OL.js";import"./src-C8c9naq-.js";import{U as VERSION,a as readConfigFileSnapshot,c as writeConfigFile}from"./io-CsCa3_1Z.js";import"./manifest-registry-009gLJ4l.js";import"./config-DmxNxDRW.js";import"./model-discovery-RTHjxEvZ.js";import"./model-catalog-D8OQ7p7I.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./client-CGgp3zkQ.js";import"./call-O-iC_P5t.js";import"./message-channel-z5YRpR2d.js";import"./sessions-CmJXMlLP.js";import{_ as isBuilderForceAgentsProject,n as loadProjectContext,o as updateProjectContextFields}from"./project-context-store-BNXYrLJz.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-BZGiFZlP.js";import"./sandbox-C-Owvt1-.js";import"./chrome-BfwLDcFc.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-BjYYSEVE.js";import"./routes-Dnfsevhw.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{n as fetchWithTimeout}from"./fetch-timeout-Cb8Yj9Tw.js";import"./builderforcellm-syscheck-tquUDu_7.js";import"./usage-format-5sp5AMSu.js";import{f as initializeBuilderForceAgentsProject}from"./project-context-BdK18hVI.js";import{r as saveMambaState}from"./mamba-state-engine-DJt_RpLC.js";import"./transformers-stream-Buj40qHl.js";import"./builderforce-directory-sync-gx_ESkap.js";import"./shared-DUsuqnhk.js";import{_ as setOpenrouterApiKey,c as setAnthropicApiKey,u as setGeminiApiKey}from"./onboard-auth.credentials-CV8n9m_T.js";import"./model-picker-Do5aHFkC.js";import"./auth-choice.apply.transformers-Be8599JD.js";import{t as runTui}from"./tui-LemSel3H.js";import"./tui-stream-assembler-DW908fGx.js";import{i as selectTenantAndToken,n as builderforceApiFetch,r as ensureProjectMapping,t as authenticateWithPassword}from"./builderforce-api-DKgXl8BH.js";import path from"node:path";import fs from"node:fs/promises";import{confirm,intro,note,outro,password,select,spinner,text}from"@clack/prompts";import{Command}from"commander";const DEFAULT_REGISTRY_URL=`https://api.builderforce.ai`;function resolveRegistryUrl(){return normalizeBaseUrl(readSharedEnvVar(`BUILDERFORCE_AGENTS_LINK_URL`)??DEFAULT_REGISTRY_URL)}function resolveAuthHeaders(){let apiKey=readSharedEnvVar(`BUILDERFORCE_AGENTS_LINK_API_KEY`);return apiKey?{Authorization:`Bearer ${apiKey}`}:{}}function isV2Package(pkg){return pkg.version===`2.0`}async function fetchAgentPackage(params){let url=`${normalizeBaseUrl(params.registryUrl??resolveRegistryUrl())}/api/agents/${encodeURIComponent(params.agentId)}/package`,res;try{res=await fetchWithTimeout(url,{method:`GET`,headers:{Accept:`application/json`,...resolveAuthHeaders()}},3e4)}catch(err){let msg=err instanceof Error?err.message:String(err);throw Error(`Network error fetching agent package: ${msg}`,{cause:err})}if(!res.ok){let text=await res.text().catch(()=>``);throw Error(`Registry returned ${res.status} ${res.statusText}${text?`: ${text}`:``}`)}let pkg=await res.json();if(!pkg.version||!pkg.platform||!pkg.name||!pkg.base_model)throw Error(`Invalid agent package: missing required fields (version, platform, name, base_model)`);return pkg}function resolveWorkforceModelRef(params){return readSharedEnvVar(`BUILDERFORCE_AGENTS_LINK_API_KEY`)?`builderforcellm/workforce-${params.agentId}`:params.pkg.base_model}async function installWorkforceAgent(params){let registryUrl=params.registryUrl??resolveRegistryUrl(),spin=spinner();spin.start(`Fetching agent package for "${params.agentId}" from ${registryUrl}…`);let pkg;try{pkg=await fetchAgentPackage({agentId:params.agentId,registryUrl}),spin.stop(`Package downloaded: ${pkg.name} (v${pkg.version})`)}catch(err){throw spin.stop(`Failed to download agent package`),err}let modelRef=resolveWorkforceModelRef({agentId:params.agentId,pkg}),hasMambaState=isV2Package(pkg)&&!!pkg.mamba_state,installed={agentId:params.agentId,name:pkg.name,title:pkg.title,baseModel:pkg.base_model,modelRef,loraArtifactKey:pkg.r2_artifact_key,packageVersion:pkg.version,hasMambaState,installedAt:new Date().toISOString(),registryUrl};return await updateProjectContextFields(params.projectRoot,{customAgent:installed,llm:{provider:`builderforcellm`,model:modelRef}}),hasMambaState&&isV2Package(pkg)&&pkg.mamba_state&&await saveMambaState(params.projectRoot,pkg.mamba_state),[`Workforce agent installed: ${pkg.name} (${params.agentId})`,` Base model: ${pkg.base_model}`,` Package: v${pkg.version}`,` Mamba state: ${hasMambaState?`yes (persistent memory)`:`no`}`,` Model ref: ${modelRef}`].join(`
2
2
  `)}async function showWorkforceAgentInfo(projectRoot){let ctx=await loadProjectContext(projectRoot);if(!ctx?.customAgent){note(`No Workforce agent is installed in this project.
3
3
 
4
4
  Run: builderforce agent install <agentId>`,`No agent installed`);return}let a=ctx.customAgent;note([theme.heading(`Workforce Agent`),` ID: ${a.agentId}`,` Name: ${a.name}${a.title?` — ${a.title}`:``}`,` Base model: ${a.baseModel}`,` Model ref: ${a.modelRef}`,` Package: v${a.packageVersion}`,` Mamba state: ${a.hasMambaState?`yes (persistent memory)`:`no`}`,` Installed: ${a.installedAt}`,` Registry: ${a.registryUrl}`].join(`
@@ -1,2 +1,2 @@
1
- import"../../paths-BVMSM1lQ.js";import{d as resolveAgentIdFromSessionKey,l as normalizeAgentId,u as normalizeMainKey}from"../../session-key-CYpYHc1e.js";import{r as DEFAULT_CHAT_CHANNEL}from"../../registry-D_frpmHZ.js";import{a as resolveAgentModelPrimary,l as resolveEffectiveModelFallbacks,o as resolveAgentSkillsFilter,r as resolveAgentDir,s as resolveAgentWorkspaceDir,t as listAgentIds,u as resolveSessionAgentId}from"../../agent-scope-EkacNLg3.js";import{r as defaultRuntime,t as createSubsystemLogger}from"../../subsystem-BakM_oqD.js";import{h as resolveWorkspaceFilePath,l as ensureAgentWorkspace}from"../../workspace-BCjtHT4u.js";import{Ct as DEFAULT_CONTEXT_TOKENS,Tt as DEFAULT_PROVIDER,a as isCliProvider,d as resolveConfiguredModelRef,g as resolveThinkingDefault,mt as ensureAuthProfileStore,o as modelKey,s as normalizeModelRef,t as buildAllowedModelSet,wt as DEFAULT_MODEL}from"../../model-selection-Cg2DOZgd.js";import{n as formatCliCommand}from"../../env-BhRm7_r8.js";import"../../boolean-ssGoaBPk.js";import"../../src-CFZ3EtDR.js";import{A as clearSessionAuthProfileOverride,C as deriveSessionTotalTokens,D as getRemoteSkillEligibility,E as resolveSendPolicy,G as formatOutboundPayloadLog,J as clearAgentRunContext,K as normalizeOutboundPayloads,M as applyVerboseOverride,O as getSkillsSnapshotVersion,U as resolveAgentTimeoutMs,W as deliverOutboundPayloads,X as registerAgentRunContext,Y as emitAgentEvent,Z as runWithModelFallback,_ as resolveOutboundTarget,b as AGENT_LANE_SUBAGENT,g as runCliAgent,h as setCliSessionId,j as applyModelOverrideToSessionEntry,k as lookupContextTokens,m as getCliSessionId,q as normalizeOutboundPayloadsForJson,t as runEmbeddedAgent,v as resolveSessionDeliveryTarget,w as hasNonzeroUsage,y as AGENT_LANE_NESTED}from"../../embedded-DjDnQMNx.js";import{s as SILENT_REPLY_TOKEN}from"../../replies-6n4d8GOb.js";import{r as normalizeChannelId,t as getChannelPlugin}from"../../plugins-J28Y83f5.js";import"../../accounts-193gfWbH.js";import"../../bindings-BfB5A-by.js";import"../../send-DIvsXqDn.js";import"../../send-BlCzsxZT.js";import"../../accounts-DHeA4T6C.js";import"../../send-D_kPTMSE.js";import"../../fetch-BklyLYYN.js";import{n as loadModelCatalog}from"../../model-catalog-IPEvGgYj.js";import"../../redact-sNZY-pGx.js";import"../../errors-BmztzL5I.js";import{$t as resolveChannelResetConfig,An as buildWorkspaceSkillSnapshot,H as normalizeThinkLevel,Ht as normalizeAccountId,K as supportsXHighThinking,L as formatThinkingLevels,Nt as updateSessionStore,Qt as evaluateSessionFreshness,R as formatXHighModelHint,W as normalizeVerboseLevel,Zt as resolveSessionKey,en as resolveSessionResetPolicy,kt as loadSessionStore,on as resolveExplicitAgentSessionKey,sn as resolveMainSessionKey,tn as resolveSessionResetType}from"../../runner-BNnckkaT.js";import{n as loadConfig}from"../../config-CzogmWgi.js";import"../../chrome-D6qk0wxW.js";import"../../frontmatter-DBVosMFY.js";import"../../store-DN9AcI73.js";import{i as isInternalMessageChannel,l as resolveMessageChannel,n as isDeliverableMessageChannel,r as isGatewayMessageChannel,s as normalizeMessageChannel,t as INTERNAL_MESSAGE_CHANNEL}from"../../message-channel-tBuQgYSD.js";import"../../accounts-C7FtIPYB.js";import{n as resolveSessionFilePath,s as resolveStorePath}from"../../paths-CzXKnIOb.js";import"../../gemini-auth-B0Tpzvwg.js";import"../../tool-images-mfC2sOfJ.js";import"../../config-DfXnxW-V.js";import"../../reply-prefix-me5vnbrB.js";import"../../sqlite-D3Ov16zb.js";import"../../manager-CZuv_3z9.js";import"../../retry-BYnMCvOU.js";import"../../common-CDXsNQYT.js";import"../../chunk-CrsAQ01n.js";import"../../markdown-tables-DvSC1OTb.js";import"../../ir-Ct8GNKB7.js";import"../../render-CVWbhuqU.js";import"../../send-D-mgLS84.js";import"../../outbound-attachment-U-XtahS5.js";import"../../fetch-Jq1KZsRq.js";import"../../send-DLkvIHZm.js";import"../../resolve-route-CGe48x_Z.js";import"../../channel-activity-xLea9vdo.js";import"../../tables-Desw59m6.js";import"../../active-listener-BQLkI7vg.js";import fs from"node:fs/promises";import crypto from"node:crypto";function createDefaultDeps(){return{sendMessageWhatsApp:async(...args)=>{let{sendMessageWhatsApp}=await import(`../../web-0VRcRcFj.js`);return await sendMessageWhatsApp(...args)},sendMessageTelegram:async(...args)=>{let{sendMessageTelegram}=await import(`../../send-D_kPTMSE.js`).then(n=>n.l);return await sendMessageTelegram(...args)},sendMessageDiscord:async(...args)=>{let{sendMessageDiscord}=await import(`../../send-BlCzsxZT.js`).then(n=>n.t);return await sendMessageDiscord(...args)},sendMessageSlack:async(...args)=>{let{sendMessageSlack}=await import(`../../send-DIvsXqDn.js`).then(n=>n.n);return await sendMessageSlack(...args)},sendMessageSignal:async(...args)=>{let{sendMessageSignal}=await import(`../../send-D-mgLS84.js`).then(n=>n.i);return await sendMessageSignal(...args)},sendMessageIMessage:async(...args)=>{let{sendMessageIMessage}=await import(`../../send-DLkvIHZm.js`).then(n=>n.n);return await sendMessageIMessage(...args)}}}function createOutboundSendDeps(deps){return{sendWhatsApp:deps.sendMessageWhatsApp,sendTelegram:deps.sendMessageTelegram,sendDiscord:deps.sendMessageDiscord,sendSlack:deps.sendMessageSlack,sendSignal:deps.sendMessageSignal,sendIMessage:deps.sendMessageIMessage}}function resolveAgentDeliveryPlan(params){let requestedRaw=typeof params.requestedChannel==`string`?params.requestedChannel.trim():``,requestedChannel=(requestedRaw?normalizeMessageChannel(requestedRaw):void 0)||`last`,explicitTo=typeof params.explicitTo==`string`&&params.explicitTo.trim()?params.explicitTo.trim():void 0,baseDelivery=resolveSessionDeliveryTarget({entry:params.sessionEntry,requestedChannel:requestedChannel===INTERNAL_MESSAGE_CHANNEL?`last`:requestedChannel,explicitTo,explicitThreadId:params.explicitThreadId}),resolvedChannel=requestedChannel===INTERNAL_MESSAGE_CHANNEL?INTERNAL_MESSAGE_CHANNEL:requestedChannel===`last`?baseDelivery.channel&&baseDelivery.channel!==INTERNAL_MESSAGE_CHANNEL?baseDelivery.channel:params.wantsDelivery?DEFAULT_CHAT_CHANNEL:INTERNAL_MESSAGE_CHANNEL:isGatewayMessageChannel(requestedChannel)?requestedChannel:baseDelivery.channel&&baseDelivery.channel!==INTERNAL_MESSAGE_CHANNEL?baseDelivery.channel:params.wantsDelivery?DEFAULT_CHAT_CHANNEL:INTERNAL_MESSAGE_CHANNEL,deliveryTargetMode=explicitTo?`explicit`:isDeliverableMessageChannel(resolvedChannel)?`implicit`:void 0,resolvedAccountId=normalizeAccountId(params.accountId)??(deliveryTargetMode===`implicit`?baseDelivery.accountId:void 0),resolvedTo=explicitTo;return!resolvedTo&&isDeliverableMessageChannel(resolvedChannel)&&resolvedChannel===baseDelivery.lastChannel&&(resolvedTo=baseDelivery.lastTo),{baseDelivery,resolvedChannel,resolvedTo,resolvedAccountId,resolvedThreadId:baseDelivery.threadId,deliveryTargetMode}}function resolveAgentOutboundTarget(params){let targetMode=params.targetMode??params.plan.deliveryTargetMode??(params.plan.resolvedTo?`explicit`:`implicit`);if(!isDeliverableMessageChannel(params.plan.resolvedChannel)||params.validateExplicitTarget!==!0&&params.plan.resolvedTo)return{resolvedTarget:null,resolvedTo:params.plan.resolvedTo,targetMode};let resolvedTarget=resolveOutboundTarget({channel:params.plan.resolvedChannel,to:params.plan.resolvedTo,cfg:params.cfg,accountId:params.plan.resolvedAccountId,mode:targetMode});return{resolvedTarget,resolvedTo:resolvedTarget.ok?resolvedTarget.to:params.plan.resolvedTo,targetMode}}const isOutboundPayloadJson=payload=>`mediaUrl`in payload;function buildOutboundResultEnvelope(params){let hasPayloads=params.payloads!==void 0,payloads=params.payloads===void 0?void 0:params.payloads.length===0?[]:isOutboundPayloadJson(params.payloads[0])?params.payloads:normalizeOutboundPayloadsForJson(params.payloads);return params.flattenDelivery!==!1&&params.delivery&&!params.meta&&!hasPayloads?params.delivery:{...hasPayloads?{payloads}:{},...params.meta?{meta:params.meta}:{},...params.delivery?{delivery:params.delivery}:{}}}function formatNestedLogPrefix(opts){let parts=[`[agent:nested]`],session=opts.sessionKey??opts.sessionId;session&&parts.push(`session=${session}`),opts.runId&&parts.push(`run=${opts.runId}`);let channel=opts.messageChannel??opts.channel;return channel&&parts.push(`channel=${channel}`),opts.to&&parts.push(`to=${opts.to}`),opts.accountId&&parts.push(`account=${opts.accountId}`),parts.join(` `)}function logNestedOutput(runtime,opts,output){let prefix=formatNestedLogPrefix(opts);for(let line of output.split(/\r?\n/))line&&runtime.log(`${prefix} ${line}`)}async function deliverAgentCommandResult(params){let{cfg,deps,runtime,opts,sessionEntry,payloads,result}=params,deliver=opts.deliver===!0,bestEffortDeliver=opts.bestEffortDeliver===!0,deliveryPlan=resolveAgentDeliveryPlan({sessionEntry,requestedChannel:opts.replyChannel??opts.channel,explicitTo:opts.replyTo??opts.to,explicitThreadId:opts.threadId,accountId:opts.replyAccountId??opts.accountId,wantsDelivery:deliver}),deliveryChannel=deliveryPlan.resolvedChannel,deliveryPlugin=isInternalMessageChannel(deliveryChannel)?void 0:getChannelPlugin(normalizeChannelId(deliveryChannel)??deliveryChannel),isDeliveryChannelKnown=isInternalMessageChannel(deliveryChannel)||!!deliveryPlugin,targetMode=opts.deliveryTargetMode??deliveryPlan.deliveryTargetMode??(opts.to?`explicit`:`implicit`),resolvedAccountId=deliveryPlan.resolvedAccountId,resolved=deliver&&isDeliveryChannelKnown&&deliveryChannel?resolveAgentOutboundTarget({cfg,plan:deliveryPlan,targetMode,validateExplicitTarget:!0}):{resolvedTarget:null,resolvedTo:deliveryPlan.resolvedTo,targetMode},resolvedTarget=resolved.resolvedTarget,deliveryTarget=resolved.resolvedTo,resolvedThreadId=deliveryPlan.resolvedThreadId??opts.threadId,resolvedReplyToId=deliveryChannel===`slack`&&resolvedThreadId!=null?String(resolvedThreadId):void 0,resolvedThreadTarget=deliveryChannel===`slack`?void 0:resolvedThreadId,logDeliveryError=err=>{let message=`Delivery failed (${deliveryChannel}${deliveryTarget?` to ${deliveryTarget}`:``}): ${String(err)}`;runtime.error?.(message),runtime.error||runtime.log(message)};if(deliver){if(!isDeliveryChannelKnown){let err=Error(`Unknown channel: ${deliveryChannel}`);if(!bestEffortDeliver)throw err;logDeliveryError(err)}else if(resolvedTarget&&!resolvedTarget.ok){if(!bestEffortDeliver)throw resolvedTarget.error;logDeliveryError(resolvedTarget.error)}}let normalizedPayloads=normalizeOutboundPayloadsForJson(payloads??[]);if(opts.json&&(runtime.log(JSON.stringify(buildOutboundResultEnvelope({payloads:normalizedPayloads,meta:result.meta}),null,2)),!deliver))return{payloads:normalizedPayloads,meta:result.meta};if(!payloads||payloads.length===0)return runtime.log(`No reply from agent.`),{payloads:[],meta:result.meta};let deliveryPayloads=normalizeOutboundPayloads(payloads),logPayload=payload=>{if(opts.json)return;let output=formatOutboundPayloadLog(payload);if(output){if(opts.lane===AGENT_LANE_NESTED){logNestedOutput(runtime,opts,output);return}runtime.log(output)}};if(!deliver)for(let payload of deliveryPayloads)logPayload(payload);return deliver&&deliveryChannel&&!isInternalMessageChannel(deliveryChannel)&&deliveryTarget&&await deliverOutboundPayloads({cfg,channel:deliveryChannel,to:deliveryTarget,accountId:resolvedAccountId,payloads:deliveryPayloads,agentId:opts.agentId??(opts.sessionKey?resolveSessionAgentId({sessionKey:opts.sessionKey,config:cfg}):void 0),replyToId:resolvedReplyToId??null,threadId:resolvedThreadTarget??null,bestEffort:bestEffortDeliver,onError:err=>logDeliveryError(err),onPayload:logPayload,deps:createOutboundSendDeps(deps)}),{payloads:normalizedPayloads,meta:result.meta}}function resolveAgentRunContext(opts){let merged=opts.runContext?{...opts.runContext}:{},normalizedChannel=resolveMessageChannel(merged.messageChannel??opts.messageChannel,opts.replyChannel??opts.channel);normalizedChannel&&(merged.messageChannel=normalizedChannel);let normalizedAccountId=normalizeAccountId(merged.accountId??opts.accountId);normalizedAccountId&&(merged.accountId=normalizedAccountId);let groupId=(merged.groupId??opts.groupId)?.toString().trim();groupId&&(merged.groupId=groupId);let groupChannel=(merged.groupChannel??opts.groupChannel)?.toString().trim();groupChannel&&(merged.groupChannel=groupChannel);let groupSpace=(merged.groupSpace??opts.groupSpace)?.toString().trim();if(groupSpace&&(merged.groupSpace=groupSpace),merged.currentThreadTs==null&&opts.threadId!=null&&opts.threadId!==``&&opts.threadId!==null&&(merged.currentThreadTs=String(opts.threadId)),!merged.currentChannelId&&opts.to){let trimmedTo=opts.to.trim();trimmedTo&&(merged.currentChannelId=trimmedTo)}return merged}async function updateSessionStoreAfterAgentRun(params){let{cfg,sessionId,sessionKey,storePath,sessionStore,defaultProvider,defaultModel,fallbackProvider,fallbackModel,result}=params,usage=result.meta.agentMeta?.usage,promptTokens=result.meta.agentMeta?.promptTokens,compactionsThisRun=Math.max(0,result.meta.agentMeta?.compactionCount??0),modelUsed=result.meta.agentMeta?.model??fallbackModel??defaultModel,providerUsed=result.meta.agentMeta?.provider??fallbackProvider??defaultProvider,contextTokens=params.contextTokensOverride??lookupContextTokens(modelUsed)??DEFAULT_CONTEXT_TOKENS,entry=sessionStore[sessionKey]??{sessionId,updatedAt:Date.now()},next={...entry,sessionId,updatedAt:Date.now(),modelProvider:providerUsed,model:modelUsed,contextTokens};if(isCliProvider(providerUsed,cfg)){let cliSessionId=result.meta.agentMeta?.sessionId?.trim();cliSessionId&&setCliSessionId(next,providerUsed,cliSessionId)}if(next.abortedLastRun=result.meta.aborted??!1,hasNonzeroUsage(usage)){let input=usage.input??0,output=usage.output??0,totalTokens=deriveSessionTotalTokens({usage,contextTokens,promptTokens})??input;next.inputTokens=input,next.outputTokens=output,next.totalTokens=totalTokens,next.totalTokensFresh=!0}compactionsThisRun>0&&(next.compactionCount=(entry.compactionCount??0)+compactionsThisRun),sessionStore[sessionKey]=next,await updateSessionStore(storePath,store=>{store[sessionKey]=next})}function resolveSessionKeyForRequest(opts){let sessionCfg=opts.cfg.session,scope=sessionCfg?.scope??`per-sender`,mainKey=normalizeMainKey(sessionCfg?.mainKey),explicitSessionKey=opts.sessionKey?.trim()||resolveExplicitAgentSessionKey({cfg:opts.cfg,agentId:opts.agentId}),storeAgentId=resolveAgentIdFromSessionKey(explicitSessionKey),storePath=resolveStorePath(sessionCfg?.store,{agentId:storeAgentId}),sessionStore=loadSessionStore(storePath),ctx=opts.to?.trim()?{From:opts.to}:void 0,sessionKey=explicitSessionKey??(ctx?resolveSessionKey(scope,ctx,mainKey):void 0);if(!explicitSessionKey&&opts.sessionId&&(!sessionKey||sessionStore[sessionKey]?.sessionId!==opts.sessionId)){let foundKey=Object.keys(sessionStore).find(key=>sessionStore[key]?.sessionId===opts.sessionId);foundKey&&(sessionKey=foundKey)}if(opts.sessionId&&!explicitSessionKey&&(!sessionKey||sessionStore[sessionKey]?.sessionId!==opts.sessionId)){let allAgentIds=listAgentIds(opts.cfg);for(let agentId of allAgentIds){if(agentId===storeAgentId)continue;let altStorePath=resolveStorePath(sessionCfg?.store,{agentId}),altStore=loadSessionStore(altStorePath),foundKey=Object.keys(altStore).find(key=>altStore[key]?.sessionId===opts.sessionId);if(foundKey)return{sessionKey:foundKey,sessionStore:altStore,storePath:altStorePath}}}return{sessionKey,sessionStore,storePath}}function resolveSession(opts){let sessionCfg=opts.cfg.session,{sessionKey,sessionStore,storePath}=resolveSessionKeyForRequest({cfg:opts.cfg,to:opts.to,sessionId:opts.sessionId,sessionKey:opts.sessionKey,agentId:opts.agentId}),now=Date.now(),sessionEntry=sessionKey?sessionStore[sessionKey]:void 0,resetPolicy=resolveSessionResetPolicy({sessionCfg,resetType:resolveSessionResetType({sessionKey}),resetOverride:resolveChannelResetConfig({sessionCfg,channel:sessionEntry?.lastChannel??sessionEntry?.channel})}),fresh=sessionEntry?evaluateSessionFreshness({updatedAt:sessionEntry.updatedAt,now,policy:resetPolicy}).fresh:!1;return{sessionId:opts.sessionId?.trim()||(fresh?sessionEntry?.sessionId:void 0)||crypto.randomUUID(),sessionKey,sessionEntry,sessionStore,storePath,isNewSession:!fresh&&!opts.sessionId,persistedThinking:fresh&&sessionEntry?.thinkingLevel?normalizeThinkLevel(sessionEntry.thinkingLevel):void 0,persistedVerbose:fresh&&sessionEntry?.verboseLevel?normalizeVerboseLevel(sessionEntry.verboseLevel):void 0}}async function persistSessionEntry(params){params.sessionStore[params.sessionKey]=params.entry,await updateSessionStore(params.storePath,store=>{store[params.sessionKey]=params.entry})}function resolveFallbackRetryPrompt(params){return params.isFallbackRetry?`Continue where you left off. The previous model attempt failed or timed out.`:params.body}function runAgentAttempt(params){let effectivePrompt=resolveFallbackRetryPrompt({body:params.body,isFallbackRetry:params.isFallbackRetry});if(isCliProvider(params.providerOverride,params.cfg)){let cliSessionId=getCliSessionId(params.sessionEntry,params.providerOverride);return runCliAgent({sessionId:params.sessionId,sessionKey:params.sessionKey,agentId:params.sessionAgentId,sessionFile:params.sessionFile,workspaceDir:params.workspaceDir,config:params.cfg,prompt:effectivePrompt,provider:params.providerOverride,model:params.modelOverride,thinkLevel:params.resolvedThinkLevel,timeoutMs:params.timeoutMs,runId:params.runId,extraSystemPrompt:params.opts.extraSystemPrompt,cliSessionId,images:params.isFallbackRetry?void 0:params.opts.images,streamParams:params.opts.streamParams})}let authProfileId=params.providerOverride===params.primaryProvider?params.sessionEntry?.authProfileOverride:void 0;return runEmbeddedAgent({sessionId:params.sessionId,sessionKey:params.sessionKey,agentId:params.sessionAgentId,messageChannel:params.messageChannel,agentAccountId:params.runContext.accountId,messageTo:params.opts.replyTo??params.opts.to,messageThreadId:params.opts.threadId,groupId:params.runContext.groupId,groupChannel:params.runContext.groupChannel,groupSpace:params.runContext.groupSpace,spawnedBy:params.spawnedBy,currentChannelId:params.runContext.currentChannelId,currentThreadTs:params.runContext.currentThreadTs,replyToMode:params.runContext.replyToMode,hasRepliedRef:params.runContext.hasRepliedRef,senderIsOwner:!0,sessionFile:params.sessionFile,workspaceDir:params.workspaceDir,config:params.cfg,skillsSnapshot:params.skillsSnapshot,prompt:effectivePrompt,images:params.isFallbackRetry?void 0:params.opts.images,clientTools:params.opts.clientTools,provider:params.providerOverride,model:params.modelOverride,authProfileId,authProfileIdSource:authProfileId?params.sessionEntry?.authProfileOverrideSource:void 0,thinkLevel:params.resolvedThinkLevel,verboseLevel:params.resolvedVerboseLevel,timeoutMs:params.timeoutMs,runId:params.runId,lane:params.opts.lane,abortSignal:params.opts.abortSignal,extraSystemPrompt:params.opts.extraSystemPrompt,inputProvenance:params.opts.inputProvenance,streamParams:params.opts.streamParams,agentDir:params.agentDir,onAgentEvent:params.onAgentEvent})}async function agentCommand(opts,runtime=defaultRuntime,deps=createDefaultDeps()){let body=(opts.message??``).trim();if(!body)throw Error(`Message (--message) is required`);if(!opts.to&&!opts.sessionId&&!opts.sessionKey&&!opts.agentId)throw Error(`Pass --to <E.164>, --session-id, or --agent to choose a session`);let cfg=loadConfig(),agentIdOverrideRaw=opts.agentId?.trim(),agentIdOverride=agentIdOverrideRaw?normalizeAgentId(agentIdOverrideRaw):void 0;if(agentIdOverride&&!listAgentIds(cfg).includes(agentIdOverride))throw Error(`Unknown agent id "${agentIdOverrideRaw}". Use "${formatCliCommand(`builderforce agents list`)}" to see configured agents.`);if(agentIdOverride&&opts.sessionKey){let sessionAgentId=resolveAgentIdFromSessionKey(opts.sessionKey);if(sessionAgentId!==agentIdOverride)throw Error(`Agent id "${agentIdOverrideRaw}" does not match session key agent "${sessionAgentId}".`)}let agentCfg=cfg.agents?.defaults,sessionAgentId=agentIdOverride??resolveAgentIdFromSessionKey(opts.sessionKey?.trim()),workspaceDirRaw=resolveAgentWorkspaceDir(cfg,sessionAgentId),agentDir=resolveAgentDir(cfg,sessionAgentId),workspaceDir=(await ensureAgentWorkspace({dir:workspaceDirRaw,ensureBootstrapFiles:!agentCfg?.skipBootstrap})).dir,configuredModel=resolveConfiguredModelRef({cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),thinkingLevelsHint=formatThinkingLevels(configuredModel.provider,configuredModel.model),thinkOverride=normalizeThinkLevel(opts.thinking),thinkOnce=normalizeThinkLevel(opts.thinkingOnce);if(opts.thinking&&!thinkOverride)throw Error(`Invalid thinking level. Use one of: ${thinkingLevelsHint}.`);if(opts.thinkingOnce&&!thinkOnce)throw Error(`Invalid one-shot thinking level. Use one of: ${thinkingLevelsHint}.`);let verboseOverride=normalizeVerboseLevel(opts.verbose);if(opts.verbose&&!verboseOverride)throw Error(`Invalid verbose level. Use "on", "full", or "off".`);let isSubagentLane=(typeof opts.lane==`string`?opts.lane.trim():``)===String(AGENT_LANE_SUBAGENT),timeoutSecondsRaw=opts.timeout===void 0?isSubagentLane?0:void 0:Number.parseInt(String(opts.timeout),10);if(timeoutSecondsRaw!==void 0&&(Number.isNaN(timeoutSecondsRaw)||timeoutSecondsRaw<0))throw Error(`--timeout must be a non-negative integer (seconds; 0 means no timeout)`);let timeoutMs=resolveAgentTimeoutMs({cfg,overrideSeconds:timeoutSecondsRaw}),{sessionId,sessionKey,sessionEntry:resolvedSessionEntry,sessionStore,storePath,isNewSession,persistedThinking,persistedVerbose}=resolveSession({cfg,to:opts.to,sessionId:opts.sessionId,sessionKey:opts.sessionKey,agentId:agentIdOverride}),sessionEntry=resolvedSessionEntry,runId=opts.runId?.trim()||sessionId;try{if(opts.deliver===!0&&resolveSendPolicy({cfg,entry:sessionEntry,sessionKey,channel:sessionEntry?.channel,chatType:sessionEntry?.chatType})===`deny`)throw Error(`send blocked by session policy`);let resolvedThinkLevel=thinkOnce??thinkOverride??persistedThinking??agentCfg?.thinkingDefault,resolvedVerboseLevel=verboseOverride??persistedVerbose??agentCfg?.verboseDefault??`on`;sessionKey&&registerAgentRunContext(runId,{sessionKey,verboseLevel:resolvedVerboseLevel});let needsSkillsSnapshot=isNewSession||!sessionEntry?.skillsSnapshot,skillsSnapshotVersion=getSkillsSnapshotVersion(workspaceDir),skillFilter=resolveAgentSkillsFilter(cfg,sessionAgentId),skillsSnapshot=needsSkillsSnapshot?buildWorkspaceSkillSnapshot(workspaceDir,{config:cfg,eligibility:{remote:getRemoteSkillEligibility()},snapshotVersion:skillsSnapshotVersion,skillFilter}):sessionEntry?.skillsSnapshot;if(skillsSnapshot&&sessionStore&&sessionKey&&needsSkillsSnapshot){let next={...sessionEntry??{sessionId,updatedAt:Date.now()},sessionId,updatedAt:Date.now(),skillsSnapshot};await persistSessionEntry({sessionStore,sessionKey,storePath,entry:next}),sessionEntry=next}if(sessionStore&&sessionKey){let next={...sessionStore[sessionKey]??sessionEntry??{sessionId,updatedAt:Date.now()},sessionId,updatedAt:Date.now()};thinkOverride&&(next.thinkingLevel=thinkOverride),applyVerboseOverride(next,verboseOverride),await persistSessionEntry({sessionStore,sessionKey,storePath,entry:next})}let agentModelPrimary=resolveAgentModelPrimary(cfg,sessionAgentId),configuredDefaultRef=resolveConfiguredModelRef({cfg:agentModelPrimary?{...cfg,agents:{...cfg.agents,defaults:{...cfg.agents?.defaults,model:{...typeof cfg.agents?.defaults?.model==`object`?cfg.agents.defaults.model:void 0,primary:agentModelPrimary}}}}:cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),{provider:defaultProvider,model:defaultModel}=normalizeModelRef(configuredDefaultRef.provider,configuredDefaultRef.model),provider=defaultProvider,model=defaultModel,hasAllowlist=agentCfg?.models&&Object.keys(agentCfg.models).length>0,hasStoredOverride=!!(sessionEntry?.modelOverride||sessionEntry?.providerOverride),needsModelCatalog=hasAllowlist||hasStoredOverride,allowedModelKeys=new Set,allowedModelCatalog=[],modelCatalog=null;if(needsModelCatalog){modelCatalog=await loadModelCatalog({config:cfg});let allowed=buildAllowedModelSet({cfg,catalog:modelCatalog,defaultProvider,defaultModel});allowedModelKeys=allowed.allowedKeys,allowedModelCatalog=allowed.allowedCatalog}if(sessionEntry&&sessionStore&&sessionKey&&hasStoredOverride){let entry=sessionEntry,overrideProvider=sessionEntry.providerOverride?.trim()||defaultProvider,overrideModel=sessionEntry.modelOverride?.trim();if(overrideModel){let normalizedOverride=normalizeModelRef(overrideProvider,overrideModel),key=modelKey(normalizedOverride.provider,normalizedOverride.model);if(!isCliProvider(normalizedOverride.provider,cfg)&&allowedModelKeys.size>0&&!allowedModelKeys.has(key)){let{updated}=applyModelOverrideToSessionEntry({entry,selection:{provider:defaultProvider,model:defaultModel,isDefault:!0}});updated&&await persistSessionEntry({sessionStore,sessionKey,storePath,entry})}}}let storedProviderOverride=sessionEntry?.providerOverride?.trim(),storedModelOverride=sessionEntry?.modelOverride?.trim();if(storedModelOverride){let normalizedStored=normalizeModelRef(storedProviderOverride||defaultProvider,storedModelOverride),key=modelKey(normalizedStored.provider,normalizedStored.model);(isCliProvider(normalizedStored.provider,cfg)||allowedModelKeys.size===0||allowedModelKeys.has(key))&&(provider=normalizedStored.provider,model=normalizedStored.model)}if(sessionEntry){let authProfileId=sessionEntry.authProfileOverride;if(authProfileId){let entry=sessionEntry,profile=(await ensureAuthProfileStore()).profiles[authProfileId];(!profile||profile.provider!==provider)&&sessionStore&&sessionKey&&await clearSessionAuthProfileOverride({sessionEntry:entry,sessionStore,sessionKey,storePath})}}if(!resolvedThinkLevel){let catalogForThinking=modelCatalog??allowedModelCatalog;(!catalogForThinking||catalogForThinking.length===0)&&(modelCatalog=await loadModelCatalog({config:cfg}),catalogForThinking=modelCatalog),resolvedThinkLevel=resolveThinkingDefault({cfg,provider,model,catalog:catalogForThinking})}if(resolvedThinkLevel===`xhigh`&&!supportsXHighThinking(provider,model)){if(thinkOnce||thinkOverride)throw Error(`Thinking level "xhigh" is only supported for ${formatXHighModelHint()}.`);if(resolvedThinkLevel=`high`,sessionEntry&&sessionStore&&sessionKey&&sessionEntry.thinkingLevel===`xhigh`){let entry=sessionEntry;entry.thinkingLevel=`high`,entry.updatedAt=Date.now(),await persistSessionEntry({sessionStore,sessionKey,storePath,entry})}}let sessionFile=resolveSessionFilePath(sessionId,sessionEntry,{agentId:sessionAgentId}),startedAt=Date.now(),lifecycleEnded=!1,result,fallbackProvider=provider,fallbackModel=model;try{let runContext=resolveAgentRunContext(opts),messageChannel=resolveMessageChannel(runContext.messageChannel,opts.replyChannel??opts.channel),spawnedBy=opts.spawnedBy??sessionEntry?.spawnedBy,effectiveFallbacksOverride=resolveEffectiveModelFallbacks({cfg,agentId:sessionAgentId,hasSessionModelOverride:!!storedModelOverride}),fallbackAttemptIndex=0,fallbackResult=await runWithModelFallback({cfg,provider,model,agentDir,fallbacksOverride:effectiveFallbacksOverride,run:(providerOverride,modelOverride)=>{let isFallbackRetry=fallbackAttemptIndex>0;return fallbackAttemptIndex+=1,runAgentAttempt({providerOverride,modelOverride,cfg,sessionEntry,sessionId,sessionKey,sessionAgentId,sessionFile,workspaceDir,body,isFallbackRetry,resolvedThinkLevel,timeoutMs,runId,opts,runContext,spawnedBy,messageChannel,skillsSnapshot,resolvedVerboseLevel,agentDir,primaryProvider:provider,onAgentEvent:evt=>{evt.stream===`lifecycle`&&typeof evt.data?.phase==`string`&&(evt.data.phase===`end`||evt.data.phase===`error`)&&(lifecycleEnded=!0)}})}});result=fallbackResult.result,fallbackProvider=fallbackResult.provider,fallbackModel=fallbackResult.model,lifecycleEnded||emitAgentEvent({runId,stream:`lifecycle`,data:{phase:`end`,startedAt,endedAt:Date.now(),aborted:result.meta.aborted??!1}})}catch(err){throw lifecycleEnded||emitAgentEvent({runId,stream:`lifecycle`,data:{phase:`error`,startedAt,endedAt:Date.now(),error:String(err)}}),err}sessionStore&&sessionKey&&await updateSessionStoreAfterAgentRun({cfg,contextTokensOverride:agentCfg?.contextTokens,sessionId,sessionKey,storePath,sessionStore,defaultProvider:provider,defaultModel:model,fallbackProvider,fallbackModel,result});let payloads=result.payloads??[];return await deliverAgentCommandResult({cfg,deps,runtime,opts,sessionEntry,result,payloads})}finally{clearAgentRunContext(runId)}}function generateBootSessionId(){return`boot-${new Date().toISOString().replace(/[:.]/g,`-`).replace(`T`,`_`).replace(`Z`,``)}-${crypto.randomUUID().slice(0,8)}`}const log=createSubsystemLogger(`gateway/boot`),BOOT_FILENAME=`BOOT.md`;function buildBootPrompt(content){return[`You are running a boot check. Follow BOOT.md instructions exactly.`,``,`BOOT.md:`,content,``,`If BOOT.md asks you to send a message, use the message tool (action=send with channel + target).`,"Use the `target` field (not `to`) for message tool destinations.",`After sending with the message tool, reply with ONLY: ${SILENT_REPLY_TOKEN}.`,`If nothing needs attention, reply with ONLY: ${SILENT_REPLY_TOKEN}.`].join(`
1
+ import"../../paths-BVMSM1lQ.js";import{d as resolveAgentIdFromSessionKey,l as normalizeAgentId,u as normalizeMainKey}from"../../session-key-CYpYHc1e.js";import{r as DEFAULT_CHAT_CHANNEL}from"../../registry-D_frpmHZ.js";import{a as resolveAgentModelPrimary,l as resolveEffectiveModelFallbacks,o as resolveAgentSkillsFilter,r as resolveAgentDir,s as resolveAgentWorkspaceDir,t as listAgentIds,u as resolveSessionAgentId}from"../../agent-scope-EkacNLg3.js";import{r as defaultRuntime,t as createSubsystemLogger}from"../../subsystem-BakM_oqD.js";import{h as resolveWorkspaceFilePath,l as ensureAgentWorkspace}from"../../workspace-BCjtHT4u.js";import{Ct as DEFAULT_CONTEXT_TOKENS,Tt as DEFAULT_PROVIDER,a as isCliProvider,d as resolveConfiguredModelRef,g as resolveThinkingDefault,mt as ensureAuthProfileStore,o as modelKey,s as normalizeModelRef,t as buildAllowedModelSet,wt as DEFAULT_MODEL}from"../../model-selection-Cg2DOZgd.js";import{n as formatCliCommand}from"../../env-BhRm7_r8.js";import"../../boolean-ssGoaBPk.js";import"../../src-CFZ3EtDR.js";import{A as clearSessionAuthProfileOverride,C as deriveSessionTotalTokens,D as getRemoteSkillEligibility,E as resolveSendPolicy,G as formatOutboundPayloadLog,J as clearAgentRunContext,K as normalizeOutboundPayloads,M as applyVerboseOverride,O as getSkillsSnapshotVersion,U as resolveAgentTimeoutMs,W as deliverOutboundPayloads,X as registerAgentRunContext,Y as emitAgentEvent,Z as runWithModelFallback,_ as resolveOutboundTarget,b as AGENT_LANE_SUBAGENT,g as runCliAgent,h as setCliSessionId,j as applyModelOverrideToSessionEntry,k as lookupContextTokens,m as getCliSessionId,q as normalizeOutboundPayloadsForJson,t as runEmbeddedAgent,v as resolveSessionDeliveryTarget,w as hasNonzeroUsage,y as AGENT_LANE_NESTED}from"../../embedded-wYxo-ADm.js";import{s as SILENT_REPLY_TOKEN}from"../../replies-6n4d8GOb.js";import{r as normalizeChannelId,t as getChannelPlugin}from"../../plugins-J28Y83f5.js";import"../../accounts-193gfWbH.js";import"../../bindings-BfB5A-by.js";import"../../send-DIvsXqDn.js";import"../../send-BlCzsxZT.js";import"../../accounts-DHeA4T6C.js";import"../../send-D_kPTMSE.js";import"../../fetch-BklyLYYN.js";import{n as loadModelCatalog}from"../../model-catalog-IPEvGgYj.js";import"../../redact-sNZY-pGx.js";import"../../errors-BmztzL5I.js";import{$t as resolveChannelResetConfig,An as buildWorkspaceSkillSnapshot,H as normalizeThinkLevel,Ht as normalizeAccountId,K as supportsXHighThinking,L as formatThinkingLevels,Nt as updateSessionStore,Qt as evaluateSessionFreshness,R as formatXHighModelHint,W as normalizeVerboseLevel,Zt as resolveSessionKey,en as resolveSessionResetPolicy,kt as loadSessionStore,on as resolveExplicitAgentSessionKey,sn as resolveMainSessionKey,tn as resolveSessionResetType}from"../../runner-C8oNv-9y.js";import{n as loadConfig}from"../../config-CzogmWgi.js";import"../../chrome-CrqJ4Ijz.js";import"../../frontmatter-DBVosMFY.js";import"../../store-DN9AcI73.js";import{i as isInternalMessageChannel,l as resolveMessageChannel,n as isDeliverableMessageChannel,r as isGatewayMessageChannel,s as normalizeMessageChannel,t as INTERNAL_MESSAGE_CHANNEL}from"../../message-channel-tBuQgYSD.js";import"../../accounts-C7FtIPYB.js";import{n as resolveSessionFilePath,s as resolveStorePath}from"../../paths-CzXKnIOb.js";import"../../gemini-auth-B0Tpzvwg.js";import"../../tool-images-mfC2sOfJ.js";import"../../config-DfXnxW-V.js";import"../../reply-prefix-me5vnbrB.js";import"../../sqlite-D3Ov16zb.js";import"../../manager-CZuv_3z9.js";import"../../retry-BYnMCvOU.js";import"../../common-CDXsNQYT.js";import"../../chunk-CrsAQ01n.js";import"../../markdown-tables-DvSC1OTb.js";import"../../ir-Ct8GNKB7.js";import"../../render-CVWbhuqU.js";import"../../send-D-mgLS84.js";import"../../outbound-attachment-U-XtahS5.js";import"../../fetch-Jq1KZsRq.js";import"../../send-DLkvIHZm.js";import"../../resolve-route-CGe48x_Z.js";import"../../channel-activity-xLea9vdo.js";import"../../tables-Desw59m6.js";import"../../active-listener-BQLkI7vg.js";import fs from"node:fs/promises";import crypto from"node:crypto";function createDefaultDeps(){return{sendMessageWhatsApp:async(...args)=>{let{sendMessageWhatsApp}=await import(`../../web-D_QYY7Gt.js`);return await sendMessageWhatsApp(...args)},sendMessageTelegram:async(...args)=>{let{sendMessageTelegram}=await import(`../../send-D_kPTMSE.js`).then(n=>n.l);return await sendMessageTelegram(...args)},sendMessageDiscord:async(...args)=>{let{sendMessageDiscord}=await import(`../../send-BlCzsxZT.js`).then(n=>n.t);return await sendMessageDiscord(...args)},sendMessageSlack:async(...args)=>{let{sendMessageSlack}=await import(`../../send-DIvsXqDn.js`).then(n=>n.n);return await sendMessageSlack(...args)},sendMessageSignal:async(...args)=>{let{sendMessageSignal}=await import(`../../send-D-mgLS84.js`).then(n=>n.i);return await sendMessageSignal(...args)},sendMessageIMessage:async(...args)=>{let{sendMessageIMessage}=await import(`../../send-DLkvIHZm.js`).then(n=>n.n);return await sendMessageIMessage(...args)}}}function createOutboundSendDeps(deps){return{sendWhatsApp:deps.sendMessageWhatsApp,sendTelegram:deps.sendMessageTelegram,sendDiscord:deps.sendMessageDiscord,sendSlack:deps.sendMessageSlack,sendSignal:deps.sendMessageSignal,sendIMessage:deps.sendMessageIMessage}}function resolveAgentDeliveryPlan(params){let requestedRaw=typeof params.requestedChannel==`string`?params.requestedChannel.trim():``,requestedChannel=(requestedRaw?normalizeMessageChannel(requestedRaw):void 0)||`last`,explicitTo=typeof params.explicitTo==`string`&&params.explicitTo.trim()?params.explicitTo.trim():void 0,baseDelivery=resolveSessionDeliveryTarget({entry:params.sessionEntry,requestedChannel:requestedChannel===INTERNAL_MESSAGE_CHANNEL?`last`:requestedChannel,explicitTo,explicitThreadId:params.explicitThreadId}),resolvedChannel=requestedChannel===INTERNAL_MESSAGE_CHANNEL?INTERNAL_MESSAGE_CHANNEL:requestedChannel===`last`?baseDelivery.channel&&baseDelivery.channel!==INTERNAL_MESSAGE_CHANNEL?baseDelivery.channel:params.wantsDelivery?DEFAULT_CHAT_CHANNEL:INTERNAL_MESSAGE_CHANNEL:isGatewayMessageChannel(requestedChannel)?requestedChannel:baseDelivery.channel&&baseDelivery.channel!==INTERNAL_MESSAGE_CHANNEL?baseDelivery.channel:params.wantsDelivery?DEFAULT_CHAT_CHANNEL:INTERNAL_MESSAGE_CHANNEL,deliveryTargetMode=explicitTo?`explicit`:isDeliverableMessageChannel(resolvedChannel)?`implicit`:void 0,resolvedAccountId=normalizeAccountId(params.accountId)??(deliveryTargetMode===`implicit`?baseDelivery.accountId:void 0),resolvedTo=explicitTo;return!resolvedTo&&isDeliverableMessageChannel(resolvedChannel)&&resolvedChannel===baseDelivery.lastChannel&&(resolvedTo=baseDelivery.lastTo),{baseDelivery,resolvedChannel,resolvedTo,resolvedAccountId,resolvedThreadId:baseDelivery.threadId,deliveryTargetMode}}function resolveAgentOutboundTarget(params){let targetMode=params.targetMode??params.plan.deliveryTargetMode??(params.plan.resolvedTo?`explicit`:`implicit`);if(!isDeliverableMessageChannel(params.plan.resolvedChannel)||params.validateExplicitTarget!==!0&&params.plan.resolvedTo)return{resolvedTarget:null,resolvedTo:params.plan.resolvedTo,targetMode};let resolvedTarget=resolveOutboundTarget({channel:params.plan.resolvedChannel,to:params.plan.resolvedTo,cfg:params.cfg,accountId:params.plan.resolvedAccountId,mode:targetMode});return{resolvedTarget,resolvedTo:resolvedTarget.ok?resolvedTarget.to:params.plan.resolvedTo,targetMode}}const isOutboundPayloadJson=payload=>`mediaUrl`in payload;function buildOutboundResultEnvelope(params){let hasPayloads=params.payloads!==void 0,payloads=params.payloads===void 0?void 0:params.payloads.length===0?[]:isOutboundPayloadJson(params.payloads[0])?params.payloads:normalizeOutboundPayloadsForJson(params.payloads);return params.flattenDelivery!==!1&&params.delivery&&!params.meta&&!hasPayloads?params.delivery:{...hasPayloads?{payloads}:{},...params.meta?{meta:params.meta}:{},...params.delivery?{delivery:params.delivery}:{}}}function formatNestedLogPrefix(opts){let parts=[`[agent:nested]`],session=opts.sessionKey??opts.sessionId;session&&parts.push(`session=${session}`),opts.runId&&parts.push(`run=${opts.runId}`);let channel=opts.messageChannel??opts.channel;return channel&&parts.push(`channel=${channel}`),opts.to&&parts.push(`to=${opts.to}`),opts.accountId&&parts.push(`account=${opts.accountId}`),parts.join(` `)}function logNestedOutput(runtime,opts,output){let prefix=formatNestedLogPrefix(opts);for(let line of output.split(/\r?\n/))line&&runtime.log(`${prefix} ${line}`)}async function deliverAgentCommandResult(params){let{cfg,deps,runtime,opts,sessionEntry,payloads,result}=params,deliver=opts.deliver===!0,bestEffortDeliver=opts.bestEffortDeliver===!0,deliveryPlan=resolveAgentDeliveryPlan({sessionEntry,requestedChannel:opts.replyChannel??opts.channel,explicitTo:opts.replyTo??opts.to,explicitThreadId:opts.threadId,accountId:opts.replyAccountId??opts.accountId,wantsDelivery:deliver}),deliveryChannel=deliveryPlan.resolvedChannel,deliveryPlugin=isInternalMessageChannel(deliveryChannel)?void 0:getChannelPlugin(normalizeChannelId(deliveryChannel)??deliveryChannel),isDeliveryChannelKnown=isInternalMessageChannel(deliveryChannel)||!!deliveryPlugin,targetMode=opts.deliveryTargetMode??deliveryPlan.deliveryTargetMode??(opts.to?`explicit`:`implicit`),resolvedAccountId=deliveryPlan.resolvedAccountId,resolved=deliver&&isDeliveryChannelKnown&&deliveryChannel?resolveAgentOutboundTarget({cfg,plan:deliveryPlan,targetMode,validateExplicitTarget:!0}):{resolvedTarget:null,resolvedTo:deliveryPlan.resolvedTo,targetMode},resolvedTarget=resolved.resolvedTarget,deliveryTarget=resolved.resolvedTo,resolvedThreadId=deliveryPlan.resolvedThreadId??opts.threadId,resolvedReplyToId=deliveryChannel===`slack`&&resolvedThreadId!=null?String(resolvedThreadId):void 0,resolvedThreadTarget=deliveryChannel===`slack`?void 0:resolvedThreadId,logDeliveryError=err=>{let message=`Delivery failed (${deliveryChannel}${deliveryTarget?` to ${deliveryTarget}`:``}): ${String(err)}`;runtime.error?.(message),runtime.error||runtime.log(message)};if(deliver){if(!isDeliveryChannelKnown){let err=Error(`Unknown channel: ${deliveryChannel}`);if(!bestEffortDeliver)throw err;logDeliveryError(err)}else if(resolvedTarget&&!resolvedTarget.ok){if(!bestEffortDeliver)throw resolvedTarget.error;logDeliveryError(resolvedTarget.error)}}let normalizedPayloads=normalizeOutboundPayloadsForJson(payloads??[]);if(opts.json&&(runtime.log(JSON.stringify(buildOutboundResultEnvelope({payloads:normalizedPayloads,meta:result.meta}),null,2)),!deliver))return{payloads:normalizedPayloads,meta:result.meta};if(!payloads||payloads.length===0)return runtime.log(`No reply from agent.`),{payloads:[],meta:result.meta};let deliveryPayloads=normalizeOutboundPayloads(payloads),logPayload=payload=>{if(opts.json)return;let output=formatOutboundPayloadLog(payload);if(output){if(opts.lane===AGENT_LANE_NESTED){logNestedOutput(runtime,opts,output);return}runtime.log(output)}};if(!deliver)for(let payload of deliveryPayloads)logPayload(payload);return deliver&&deliveryChannel&&!isInternalMessageChannel(deliveryChannel)&&deliveryTarget&&await deliverOutboundPayloads({cfg,channel:deliveryChannel,to:deliveryTarget,accountId:resolvedAccountId,payloads:deliveryPayloads,agentId:opts.agentId??(opts.sessionKey?resolveSessionAgentId({sessionKey:opts.sessionKey,config:cfg}):void 0),replyToId:resolvedReplyToId??null,threadId:resolvedThreadTarget??null,bestEffort:bestEffortDeliver,onError:err=>logDeliveryError(err),onPayload:logPayload,deps:createOutboundSendDeps(deps)}),{payloads:normalizedPayloads,meta:result.meta}}function resolveAgentRunContext(opts){let merged=opts.runContext?{...opts.runContext}:{},normalizedChannel=resolveMessageChannel(merged.messageChannel??opts.messageChannel,opts.replyChannel??opts.channel);normalizedChannel&&(merged.messageChannel=normalizedChannel);let normalizedAccountId=normalizeAccountId(merged.accountId??opts.accountId);normalizedAccountId&&(merged.accountId=normalizedAccountId);let groupId=(merged.groupId??opts.groupId)?.toString().trim();groupId&&(merged.groupId=groupId);let groupChannel=(merged.groupChannel??opts.groupChannel)?.toString().trim();groupChannel&&(merged.groupChannel=groupChannel);let groupSpace=(merged.groupSpace??opts.groupSpace)?.toString().trim();if(groupSpace&&(merged.groupSpace=groupSpace),merged.currentThreadTs==null&&opts.threadId!=null&&opts.threadId!==``&&opts.threadId!==null&&(merged.currentThreadTs=String(opts.threadId)),!merged.currentChannelId&&opts.to){let trimmedTo=opts.to.trim();trimmedTo&&(merged.currentChannelId=trimmedTo)}return merged}async function updateSessionStoreAfterAgentRun(params){let{cfg,sessionId,sessionKey,storePath,sessionStore,defaultProvider,defaultModel,fallbackProvider,fallbackModel,result}=params,usage=result.meta.agentMeta?.usage,promptTokens=result.meta.agentMeta?.promptTokens,compactionsThisRun=Math.max(0,result.meta.agentMeta?.compactionCount??0),modelUsed=result.meta.agentMeta?.model??fallbackModel??defaultModel,providerUsed=result.meta.agentMeta?.provider??fallbackProvider??defaultProvider,contextTokens=params.contextTokensOverride??lookupContextTokens(modelUsed)??DEFAULT_CONTEXT_TOKENS,entry=sessionStore[sessionKey]??{sessionId,updatedAt:Date.now()},next={...entry,sessionId,updatedAt:Date.now(),modelProvider:providerUsed,model:modelUsed,contextTokens};if(isCliProvider(providerUsed,cfg)){let cliSessionId=result.meta.agentMeta?.sessionId?.trim();cliSessionId&&setCliSessionId(next,providerUsed,cliSessionId)}if(next.abortedLastRun=result.meta.aborted??!1,hasNonzeroUsage(usage)){let input=usage.input??0,output=usage.output??0,totalTokens=deriveSessionTotalTokens({usage,contextTokens,promptTokens})??input;next.inputTokens=input,next.outputTokens=output,next.totalTokens=totalTokens,next.totalTokensFresh=!0}compactionsThisRun>0&&(next.compactionCount=(entry.compactionCount??0)+compactionsThisRun),sessionStore[sessionKey]=next,await updateSessionStore(storePath,store=>{store[sessionKey]=next})}function resolveSessionKeyForRequest(opts){let sessionCfg=opts.cfg.session,scope=sessionCfg?.scope??`per-sender`,mainKey=normalizeMainKey(sessionCfg?.mainKey),explicitSessionKey=opts.sessionKey?.trim()||resolveExplicitAgentSessionKey({cfg:opts.cfg,agentId:opts.agentId}),storeAgentId=resolveAgentIdFromSessionKey(explicitSessionKey),storePath=resolveStorePath(sessionCfg?.store,{agentId:storeAgentId}),sessionStore=loadSessionStore(storePath),ctx=opts.to?.trim()?{From:opts.to}:void 0,sessionKey=explicitSessionKey??(ctx?resolveSessionKey(scope,ctx,mainKey):void 0);if(!explicitSessionKey&&opts.sessionId&&(!sessionKey||sessionStore[sessionKey]?.sessionId!==opts.sessionId)){let foundKey=Object.keys(sessionStore).find(key=>sessionStore[key]?.sessionId===opts.sessionId);foundKey&&(sessionKey=foundKey)}if(opts.sessionId&&!explicitSessionKey&&(!sessionKey||sessionStore[sessionKey]?.sessionId!==opts.sessionId)){let allAgentIds=listAgentIds(opts.cfg);for(let agentId of allAgentIds){if(agentId===storeAgentId)continue;let altStorePath=resolveStorePath(sessionCfg?.store,{agentId}),altStore=loadSessionStore(altStorePath),foundKey=Object.keys(altStore).find(key=>altStore[key]?.sessionId===opts.sessionId);if(foundKey)return{sessionKey:foundKey,sessionStore:altStore,storePath:altStorePath}}}return{sessionKey,sessionStore,storePath}}function resolveSession(opts){let sessionCfg=opts.cfg.session,{sessionKey,sessionStore,storePath}=resolveSessionKeyForRequest({cfg:opts.cfg,to:opts.to,sessionId:opts.sessionId,sessionKey:opts.sessionKey,agentId:opts.agentId}),now=Date.now(),sessionEntry=sessionKey?sessionStore[sessionKey]:void 0,resetPolicy=resolveSessionResetPolicy({sessionCfg,resetType:resolveSessionResetType({sessionKey}),resetOverride:resolveChannelResetConfig({sessionCfg,channel:sessionEntry?.lastChannel??sessionEntry?.channel})}),fresh=sessionEntry?evaluateSessionFreshness({updatedAt:sessionEntry.updatedAt,now,policy:resetPolicy}).fresh:!1;return{sessionId:opts.sessionId?.trim()||(fresh?sessionEntry?.sessionId:void 0)||crypto.randomUUID(),sessionKey,sessionEntry,sessionStore,storePath,isNewSession:!fresh&&!opts.sessionId,persistedThinking:fresh&&sessionEntry?.thinkingLevel?normalizeThinkLevel(sessionEntry.thinkingLevel):void 0,persistedVerbose:fresh&&sessionEntry?.verboseLevel?normalizeVerboseLevel(sessionEntry.verboseLevel):void 0}}async function persistSessionEntry(params){params.sessionStore[params.sessionKey]=params.entry,await updateSessionStore(params.storePath,store=>{store[params.sessionKey]=params.entry})}function resolveFallbackRetryPrompt(params){return params.isFallbackRetry?`Continue where you left off. The previous model attempt failed or timed out.`:params.body}function runAgentAttempt(params){let effectivePrompt=resolveFallbackRetryPrompt({body:params.body,isFallbackRetry:params.isFallbackRetry});if(isCliProvider(params.providerOverride,params.cfg)){let cliSessionId=getCliSessionId(params.sessionEntry,params.providerOverride);return runCliAgent({sessionId:params.sessionId,sessionKey:params.sessionKey,agentId:params.sessionAgentId,sessionFile:params.sessionFile,workspaceDir:params.workspaceDir,config:params.cfg,prompt:effectivePrompt,provider:params.providerOverride,model:params.modelOverride,thinkLevel:params.resolvedThinkLevel,timeoutMs:params.timeoutMs,runId:params.runId,extraSystemPrompt:params.opts.extraSystemPrompt,cliSessionId,images:params.isFallbackRetry?void 0:params.opts.images,streamParams:params.opts.streamParams})}let authProfileId=params.providerOverride===params.primaryProvider?params.sessionEntry?.authProfileOverride:void 0;return runEmbeddedAgent({sessionId:params.sessionId,sessionKey:params.sessionKey,agentId:params.sessionAgentId,messageChannel:params.messageChannel,agentAccountId:params.runContext.accountId,messageTo:params.opts.replyTo??params.opts.to,messageThreadId:params.opts.threadId,groupId:params.runContext.groupId,groupChannel:params.runContext.groupChannel,groupSpace:params.runContext.groupSpace,spawnedBy:params.spawnedBy,currentChannelId:params.runContext.currentChannelId,currentThreadTs:params.runContext.currentThreadTs,replyToMode:params.runContext.replyToMode,hasRepliedRef:params.runContext.hasRepliedRef,senderIsOwner:!0,sessionFile:params.sessionFile,workspaceDir:params.workspaceDir,config:params.cfg,skillsSnapshot:params.skillsSnapshot,prompt:effectivePrompt,images:params.isFallbackRetry?void 0:params.opts.images,clientTools:params.opts.clientTools,provider:params.providerOverride,model:params.modelOverride,authProfileId,authProfileIdSource:authProfileId?params.sessionEntry?.authProfileOverrideSource:void 0,thinkLevel:params.resolvedThinkLevel,verboseLevel:params.resolvedVerboseLevel,timeoutMs:params.timeoutMs,runId:params.runId,lane:params.opts.lane,abortSignal:params.opts.abortSignal,extraSystemPrompt:params.opts.extraSystemPrompt,inputProvenance:params.opts.inputProvenance,streamParams:params.opts.streamParams,agentDir:params.agentDir,onAgentEvent:params.onAgentEvent})}async function agentCommand(opts,runtime=defaultRuntime,deps=createDefaultDeps()){let body=(opts.message??``).trim();if(!body)throw Error(`Message (--message) is required`);if(!opts.to&&!opts.sessionId&&!opts.sessionKey&&!opts.agentId)throw Error(`Pass --to <E.164>, --session-id, or --agent to choose a session`);let cfg=loadConfig(),agentIdOverrideRaw=opts.agentId?.trim(),agentIdOverride=agentIdOverrideRaw?normalizeAgentId(agentIdOverrideRaw):void 0;if(agentIdOverride&&!listAgentIds(cfg).includes(agentIdOverride))throw Error(`Unknown agent id "${agentIdOverrideRaw}". Use "${formatCliCommand(`builderforce agents list`)}" to see configured agents.`);if(agentIdOverride&&opts.sessionKey){let sessionAgentId=resolveAgentIdFromSessionKey(opts.sessionKey);if(sessionAgentId!==agentIdOverride)throw Error(`Agent id "${agentIdOverrideRaw}" does not match session key agent "${sessionAgentId}".`)}let agentCfg=cfg.agents?.defaults,sessionAgentId=agentIdOverride??resolveAgentIdFromSessionKey(opts.sessionKey?.trim()),workspaceDirRaw=resolveAgentWorkspaceDir(cfg,sessionAgentId),agentDir=resolveAgentDir(cfg,sessionAgentId),workspaceDir=(await ensureAgentWorkspace({dir:workspaceDirRaw,ensureBootstrapFiles:!agentCfg?.skipBootstrap})).dir,configuredModel=resolveConfiguredModelRef({cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),thinkingLevelsHint=formatThinkingLevels(configuredModel.provider,configuredModel.model),thinkOverride=normalizeThinkLevel(opts.thinking),thinkOnce=normalizeThinkLevel(opts.thinkingOnce);if(opts.thinking&&!thinkOverride)throw Error(`Invalid thinking level. Use one of: ${thinkingLevelsHint}.`);if(opts.thinkingOnce&&!thinkOnce)throw Error(`Invalid one-shot thinking level. Use one of: ${thinkingLevelsHint}.`);let verboseOverride=normalizeVerboseLevel(opts.verbose);if(opts.verbose&&!verboseOverride)throw Error(`Invalid verbose level. Use "on", "full", or "off".`);let isSubagentLane=(typeof opts.lane==`string`?opts.lane.trim():``)===String(AGENT_LANE_SUBAGENT),timeoutSecondsRaw=opts.timeout===void 0?isSubagentLane?0:void 0:Number.parseInt(String(opts.timeout),10);if(timeoutSecondsRaw!==void 0&&(Number.isNaN(timeoutSecondsRaw)||timeoutSecondsRaw<0))throw Error(`--timeout must be a non-negative integer (seconds; 0 means no timeout)`);let timeoutMs=resolveAgentTimeoutMs({cfg,overrideSeconds:timeoutSecondsRaw}),{sessionId,sessionKey,sessionEntry:resolvedSessionEntry,sessionStore,storePath,isNewSession,persistedThinking,persistedVerbose}=resolveSession({cfg,to:opts.to,sessionId:opts.sessionId,sessionKey:opts.sessionKey,agentId:agentIdOverride}),sessionEntry=resolvedSessionEntry,runId=opts.runId?.trim()||sessionId;try{if(opts.deliver===!0&&resolveSendPolicy({cfg,entry:sessionEntry,sessionKey,channel:sessionEntry?.channel,chatType:sessionEntry?.chatType})===`deny`)throw Error(`send blocked by session policy`);let resolvedThinkLevel=thinkOnce??thinkOverride??persistedThinking??agentCfg?.thinkingDefault,resolvedVerboseLevel=verboseOverride??persistedVerbose??agentCfg?.verboseDefault??`on`;sessionKey&&registerAgentRunContext(runId,{sessionKey,verboseLevel:resolvedVerboseLevel});let needsSkillsSnapshot=isNewSession||!sessionEntry?.skillsSnapshot,skillsSnapshotVersion=getSkillsSnapshotVersion(workspaceDir),skillFilter=resolveAgentSkillsFilter(cfg,sessionAgentId),skillsSnapshot=needsSkillsSnapshot?buildWorkspaceSkillSnapshot(workspaceDir,{config:cfg,eligibility:{remote:getRemoteSkillEligibility()},snapshotVersion:skillsSnapshotVersion,skillFilter}):sessionEntry?.skillsSnapshot;if(skillsSnapshot&&sessionStore&&sessionKey&&needsSkillsSnapshot){let next={...sessionEntry??{sessionId,updatedAt:Date.now()},sessionId,updatedAt:Date.now(),skillsSnapshot};await persistSessionEntry({sessionStore,sessionKey,storePath,entry:next}),sessionEntry=next}if(sessionStore&&sessionKey){let next={...sessionStore[sessionKey]??sessionEntry??{sessionId,updatedAt:Date.now()},sessionId,updatedAt:Date.now()};thinkOverride&&(next.thinkingLevel=thinkOverride),applyVerboseOverride(next,verboseOverride),await persistSessionEntry({sessionStore,sessionKey,storePath,entry:next})}let agentModelPrimary=resolveAgentModelPrimary(cfg,sessionAgentId),configuredDefaultRef=resolveConfiguredModelRef({cfg:agentModelPrimary?{...cfg,agents:{...cfg.agents,defaults:{...cfg.agents?.defaults,model:{...typeof cfg.agents?.defaults?.model==`object`?cfg.agents.defaults.model:void 0,primary:agentModelPrimary}}}}:cfg,defaultProvider:DEFAULT_PROVIDER,defaultModel:DEFAULT_MODEL}),{provider:defaultProvider,model:defaultModel}=normalizeModelRef(configuredDefaultRef.provider,configuredDefaultRef.model),provider=defaultProvider,model=defaultModel,hasAllowlist=agentCfg?.models&&Object.keys(agentCfg.models).length>0,hasStoredOverride=!!(sessionEntry?.modelOverride||sessionEntry?.providerOverride),needsModelCatalog=hasAllowlist||hasStoredOverride,allowedModelKeys=new Set,allowedModelCatalog=[],modelCatalog=null;if(needsModelCatalog){modelCatalog=await loadModelCatalog({config:cfg});let allowed=buildAllowedModelSet({cfg,catalog:modelCatalog,defaultProvider,defaultModel});allowedModelKeys=allowed.allowedKeys,allowedModelCatalog=allowed.allowedCatalog}if(sessionEntry&&sessionStore&&sessionKey&&hasStoredOverride){let entry=sessionEntry,overrideProvider=sessionEntry.providerOverride?.trim()||defaultProvider,overrideModel=sessionEntry.modelOverride?.trim();if(overrideModel){let normalizedOverride=normalizeModelRef(overrideProvider,overrideModel),key=modelKey(normalizedOverride.provider,normalizedOverride.model);if(!isCliProvider(normalizedOverride.provider,cfg)&&allowedModelKeys.size>0&&!allowedModelKeys.has(key)){let{updated}=applyModelOverrideToSessionEntry({entry,selection:{provider:defaultProvider,model:defaultModel,isDefault:!0}});updated&&await persistSessionEntry({sessionStore,sessionKey,storePath,entry})}}}let storedProviderOverride=sessionEntry?.providerOverride?.trim(),storedModelOverride=sessionEntry?.modelOverride?.trim();if(storedModelOverride){let normalizedStored=normalizeModelRef(storedProviderOverride||defaultProvider,storedModelOverride),key=modelKey(normalizedStored.provider,normalizedStored.model);(isCliProvider(normalizedStored.provider,cfg)||allowedModelKeys.size===0||allowedModelKeys.has(key))&&(provider=normalizedStored.provider,model=normalizedStored.model)}if(sessionEntry){let authProfileId=sessionEntry.authProfileOverride;if(authProfileId){let entry=sessionEntry,profile=(await ensureAuthProfileStore()).profiles[authProfileId];(!profile||profile.provider!==provider)&&sessionStore&&sessionKey&&await clearSessionAuthProfileOverride({sessionEntry:entry,sessionStore,sessionKey,storePath})}}if(!resolvedThinkLevel){let catalogForThinking=modelCatalog??allowedModelCatalog;(!catalogForThinking||catalogForThinking.length===0)&&(modelCatalog=await loadModelCatalog({config:cfg}),catalogForThinking=modelCatalog),resolvedThinkLevel=resolveThinkingDefault({cfg,provider,model,catalog:catalogForThinking})}if(resolvedThinkLevel===`xhigh`&&!supportsXHighThinking(provider,model)){if(thinkOnce||thinkOverride)throw Error(`Thinking level "xhigh" is only supported for ${formatXHighModelHint()}.`);if(resolvedThinkLevel=`high`,sessionEntry&&sessionStore&&sessionKey&&sessionEntry.thinkingLevel===`xhigh`){let entry=sessionEntry;entry.thinkingLevel=`high`,entry.updatedAt=Date.now(),await persistSessionEntry({sessionStore,sessionKey,storePath,entry})}}let sessionFile=resolveSessionFilePath(sessionId,sessionEntry,{agentId:sessionAgentId}),startedAt=Date.now(),lifecycleEnded=!1,result,fallbackProvider=provider,fallbackModel=model;try{let runContext=resolveAgentRunContext(opts),messageChannel=resolveMessageChannel(runContext.messageChannel,opts.replyChannel??opts.channel),spawnedBy=opts.spawnedBy??sessionEntry?.spawnedBy,effectiveFallbacksOverride=resolveEffectiveModelFallbacks({cfg,agentId:sessionAgentId,hasSessionModelOverride:!!storedModelOverride}),fallbackAttemptIndex=0,fallbackResult=await runWithModelFallback({cfg,provider,model,agentDir,fallbacksOverride:effectiveFallbacksOverride,run:(providerOverride,modelOverride)=>{let isFallbackRetry=fallbackAttemptIndex>0;return fallbackAttemptIndex+=1,runAgentAttempt({providerOverride,modelOverride,cfg,sessionEntry,sessionId,sessionKey,sessionAgentId,sessionFile,workspaceDir,body,isFallbackRetry,resolvedThinkLevel,timeoutMs,runId,opts,runContext,spawnedBy,messageChannel,skillsSnapshot,resolvedVerboseLevel,agentDir,primaryProvider:provider,onAgentEvent:evt=>{evt.stream===`lifecycle`&&typeof evt.data?.phase==`string`&&(evt.data.phase===`end`||evt.data.phase===`error`)&&(lifecycleEnded=!0)}})}});result=fallbackResult.result,fallbackProvider=fallbackResult.provider,fallbackModel=fallbackResult.model,lifecycleEnded||emitAgentEvent({runId,stream:`lifecycle`,data:{phase:`end`,startedAt,endedAt:Date.now(),aborted:result.meta.aborted??!1}})}catch(err){throw lifecycleEnded||emitAgentEvent({runId,stream:`lifecycle`,data:{phase:`error`,startedAt,endedAt:Date.now(),error:String(err)}}),err}sessionStore&&sessionKey&&await updateSessionStoreAfterAgentRun({cfg,contextTokensOverride:agentCfg?.contextTokens,sessionId,sessionKey,storePath,sessionStore,defaultProvider:provider,defaultModel:model,fallbackProvider,fallbackModel,result});let payloads=result.payloads??[];return await deliverAgentCommandResult({cfg,deps,runtime,opts,sessionEntry,result,payloads})}finally{clearAgentRunContext(runId)}}function generateBootSessionId(){return`boot-${new Date().toISOString().replace(/[:.]/g,`-`).replace(`T`,`_`).replace(`Z`,``)}-${crypto.randomUUID().slice(0,8)}`}const log=createSubsystemLogger(`gateway/boot`),BOOT_FILENAME=`BOOT.md`;function buildBootPrompt(content){return[`You are running a boot check. Follow BOOT.md instructions exactly.`,``,`BOOT.md:`,content,``,`If BOOT.md asks you to send a message, use the message tool (action=send with channel + target).`,"Use the `target` field (not `to`) for message tool destinations.",`After sending with the message tool, reply with ONLY: ${SILENT_REPLY_TOKEN}.`,`If nothing needs attention, reply with ONLY: ${SILENT_REPLY_TOKEN}.`].join(`
2
2
  `)}async function loadBootFile(workspaceDir){let bootPath=resolveWorkspaceFilePath(workspaceDir,BOOT_FILENAME);try{let trimmed=(await fs.readFile(bootPath,`utf-8`)).trim();return trimmed?{status:`ok`,content:trimmed}:{status:`empty`}}catch(err){if(err.code===`ENOENT`)return{status:`missing`};throw err}}function snapshotMainSessionMapping(params){let agentId=resolveAgentIdFromSessionKey(params.sessionKey),storePath=resolveStorePath(params.cfg.session?.store,{agentId});try{let entry=loadSessionStore(storePath,{skipCache:!0})[params.sessionKey];return entry?{storePath,sessionKey:params.sessionKey,canRestore:!0,hadEntry:!0,entry:structuredClone(entry)}:{storePath,sessionKey:params.sessionKey,canRestore:!0,hadEntry:!1}}catch(err){return log.debug(`boot: could not snapshot main session mapping`,{sessionKey:params.sessionKey,error:String(err)}),{storePath,sessionKey:params.sessionKey,canRestore:!1,hadEntry:!1}}}async function restoreMainSessionMapping(snapshot){if(snapshot.canRestore)try{await updateSessionStore(snapshot.storePath,store=>{if(snapshot.hadEntry&&snapshot.entry){store[snapshot.sessionKey]=snapshot.entry;return}delete store[snapshot.sessionKey]},{activeSessionKey:snapshot.sessionKey});return}catch(err){return err instanceof Error?err.message:String(err)}}async function runBootOnce(params){let bootRuntime={log:()=>{},error:message=>log.error(String(message)),exit:defaultRuntime.exit},result;try{result=await loadBootFile(params.workspaceDir)}catch(err){let message=err instanceof Error?err.message:String(err);return log.error(`boot: failed to read ${BOOT_FILENAME}: ${message}`),{status:`failed`,reason:message}}if(result.status===`missing`||result.status===`empty`)return{status:`skipped`,reason:result.status};let sessionKey=resolveMainSessionKey(params.cfg),message=buildBootPrompt(result.content??``),sessionId=generateBootSessionId(),mappingSnapshot=snapshotMainSessionMapping({cfg:params.cfg,sessionKey}),agentFailure;try{await agentCommand({message,sessionKey,sessionId,deliver:!1},bootRuntime,params.deps)}catch(err){agentFailure=err instanceof Error?err.message:String(err),log.error(`boot: agent run failed: ${agentFailure}`)}let mappingRestoreFailure=await restoreMainSessionMapping(mappingSnapshot);return mappingRestoreFailure&&log.error(`boot: failed to restore main session mapping: ${mappingRestoreFailure}`),!agentFailure&&!mappingRestoreFailure?{status:`ran`}:{status:`failed`,reason:[agentFailure?`agent run failed: ${agentFailure}`:void 0,mappingRestoreFailure?`mapping restore failed: ${mappingRestoreFailure}`:void 0].filter(part=>!!part).join(`; `)}}const runBootChecklist=async event=>{if(event.type!==`gateway`||event.action!==`startup`)return;let context=event.context??{};if(!context.cfg||!context.workspaceDir)return;let deps=context.deps??createDefaultDeps();await runBootOnce({cfg:context.cfg,deps,workspaceDir:context.workspaceDir})};export{runBootChecklist as default};
@@ -1,4 +1,4 @@
1
- import{s as resolveStateDir}from"../../paths-BVMSM1lQ.js";import{d as resolveAgentIdFromSessionKey}from"../../session-key-CYpYHc1e.js";import"../../registry-D_frpmHZ.js";import{s as resolveAgentWorkspaceDir}from"../../agent-scope-EkacNLg3.js";import{t as createSubsystemLogger}from"../../subsystem-BakM_oqD.js";import"../../workspace-BCjtHT4u.js";import"../../model-selection-Cg2DOZgd.js";import"../../env-BhRm7_r8.js";import"../../boolean-ssGoaBPk.js";import"../../src-CFZ3EtDR.js";import"../../embedded-DjDnQMNx.js";import"../../replies-6n4d8GOb.js";import"../../plugins-J28Y83f5.js";import"../../accounts-193gfWbH.js";import"../../bindings-BfB5A-by.js";import"../../send-DIvsXqDn.js";import"../../send-BlCzsxZT.js";import"../../accounts-DHeA4T6C.js";import"../../send-D_kPTMSE.js";import"../../fetch-BklyLYYN.js";import"../../model-catalog-IPEvGgYj.js";import"../../redact-sNZY-pGx.js";import"../../errors-BmztzL5I.js";import{Yt as hasInterSessionUserProvenance}from"../../runner-BNnckkaT.js";import"../../config-CzogmWgi.js";import"../../chrome-D6qk0wxW.js";import"../../frontmatter-DBVosMFY.js";import"../../store-DN9AcI73.js";import"../../message-channel-tBuQgYSD.js";import"../../accounts-C7FtIPYB.js";import"../../paths-CzXKnIOb.js";import"../../gemini-auth-B0Tpzvwg.js";import"../../tool-images-mfC2sOfJ.js";import{t as resolveHookConfig}from"../../config-DfXnxW-V.js";import"../../reply-prefix-me5vnbrB.js";import"../../sqlite-D3Ov16zb.js";import"../../manager-CZuv_3z9.js";import"../../retry-BYnMCvOU.js";import"../../common-CDXsNQYT.js";import"../../chunk-CrsAQ01n.js";import"../../markdown-tables-DvSC1OTb.js";import"../../ir-Ct8GNKB7.js";import"../../render-CVWbhuqU.js";import"../../send-D-mgLS84.js";import"../../outbound-attachment-U-XtahS5.js";import"../../fetch-Jq1KZsRq.js";import"../../send-DLkvIHZm.js";import"../../resolve-route-CGe48x_Z.js";import"../../channel-activity-xLea9vdo.js";import"../../tables-Desw59m6.js";import"../../active-listener-BQLkI7vg.js";import{generateSlugViaLLM}from"../../llm-slug-generator.js";import fs from"node:fs/promises";import os from"node:os";import path from"node:path";const log=createSubsystemLogger(`hooks/session-memory`);async function getRecentSessionContent(sessionFilePath,messageCount=15){try{let lines=(await fs.readFile(sessionFilePath,`utf-8`)).trim().split(`
1
+ import{s as resolveStateDir}from"../../paths-BVMSM1lQ.js";import{d as resolveAgentIdFromSessionKey}from"../../session-key-CYpYHc1e.js";import"../../registry-D_frpmHZ.js";import{s as resolveAgentWorkspaceDir}from"../../agent-scope-EkacNLg3.js";import{t as createSubsystemLogger}from"../../subsystem-BakM_oqD.js";import"../../workspace-BCjtHT4u.js";import"../../model-selection-Cg2DOZgd.js";import"../../env-BhRm7_r8.js";import"../../boolean-ssGoaBPk.js";import"../../src-CFZ3EtDR.js";import"../../embedded-wYxo-ADm.js";import"../../replies-6n4d8GOb.js";import"../../plugins-J28Y83f5.js";import"../../accounts-193gfWbH.js";import"../../bindings-BfB5A-by.js";import"../../send-DIvsXqDn.js";import"../../send-BlCzsxZT.js";import"../../accounts-DHeA4T6C.js";import"../../send-D_kPTMSE.js";import"../../fetch-BklyLYYN.js";import"../../model-catalog-IPEvGgYj.js";import"../../redact-sNZY-pGx.js";import"../../errors-BmztzL5I.js";import{Yt as hasInterSessionUserProvenance}from"../../runner-C8oNv-9y.js";import"../../config-CzogmWgi.js";import"../../chrome-CrqJ4Ijz.js";import"../../frontmatter-DBVosMFY.js";import"../../store-DN9AcI73.js";import"../../message-channel-tBuQgYSD.js";import"../../accounts-C7FtIPYB.js";import"../../paths-CzXKnIOb.js";import"../../gemini-auth-B0Tpzvwg.js";import"../../tool-images-mfC2sOfJ.js";import{t as resolveHookConfig}from"../../config-DfXnxW-V.js";import"../../reply-prefix-me5vnbrB.js";import"../../sqlite-D3Ov16zb.js";import"../../manager-CZuv_3z9.js";import"../../retry-BYnMCvOU.js";import"../../common-CDXsNQYT.js";import"../../chunk-CrsAQ01n.js";import"../../markdown-tables-DvSC1OTb.js";import"../../ir-Ct8GNKB7.js";import"../../render-CVWbhuqU.js";import"../../send-D-mgLS84.js";import"../../outbound-attachment-U-XtahS5.js";import"../../fetch-Jq1KZsRq.js";import"../../send-DLkvIHZm.js";import"../../resolve-route-CGe48x_Z.js";import"../../channel-activity-xLea9vdo.js";import"../../tables-Desw59m6.js";import"../../active-listener-BQLkI7vg.js";import{generateSlugViaLLM}from"../../llm-slug-generator.js";import fs from"node:fs/promises";import os from"node:os";import path from"node:path";const log=createSubsystemLogger(`hooks/session-memory`);async function getRecentSessionContent(sessionFilePath,messageCount=15){try{let lines=(await fs.readFile(sessionFilePath,`utf-8`)).trim().split(`
2
2
  `),allMessages=[];for(let line of lines)try{let entry=JSON.parse(line);if(entry.type===`message`&&entry.message){let msg=entry.message,role=msg.role;if((role===`user`||role===`assistant`)&&msg.content){if(role===`user`&&hasInterSessionUserProvenance(msg))continue;let text=Array.isArray(msg.content)?msg.content.find(c=>c.type===`text`)?.text:msg.content;text&&!text.startsWith(`/`)&&allMessages.push(`${role}: ${text}`)}}}catch{}return allMessages.slice(-messageCount).join(`
3
3
  `)}catch{return null}}async function getRecentSessionContentWithResetFallback(sessionFilePath,messageCount=15){let primary=await getRecentSessionContent(sessionFilePath,messageCount);if(primary)return primary;try{let dir=path.dirname(sessionFilePath),resetPrefix=`${path.basename(sessionFilePath)}.reset.`,resetCandidates=(await fs.readdir(dir)).filter(name=>name.startsWith(resetPrefix)).toSorted();if(resetCandidates.length===0)return primary;let latestResetPath=path.join(dir,resetCandidates[resetCandidates.length-1]),fallback=await getRecentSessionContent(latestResetPath,messageCount);return fallback&&log.debug(`Loaded session content from reset fallback`,{sessionFilePath,latestResetPath}),fallback||primary}catch{return primary}}function stripResetSuffix(fileName){let resetIndex=fileName.indexOf(`.reset.`);return resetIndex===-1?fileName:fileName.slice(0,resetIndex)}async function findPreviousSessionFile(params){try{let files=await fs.readdir(params.sessionsDir),fileSet=new Set(files),baseFromReset=params.currentSessionFile?stripResetSuffix(path.basename(params.currentSessionFile)):void 0;if(baseFromReset&&fileSet.has(baseFromReset))return path.join(params.sessionsDir,baseFromReset);let trimmedSessionId=params.sessionId?.trim();if(trimmedSessionId){let canonicalFile=`${trimmedSessionId}.jsonl`;if(fileSet.has(canonicalFile))return path.join(params.sessionsDir,canonicalFile);let topicVariants=files.filter(name=>name.startsWith(`${trimmedSessionId}-topic-`)&&name.endsWith(`.jsonl`)&&!name.includes(`.reset.`)).toSorted().toReversed();if(topicVariants.length>0)return path.join(params.sessionsDir,topicVariants[0])}if(!params.currentSessionFile)return;let nonResetJsonl=files.filter(name=>name.endsWith(`.jsonl`)&&!name.includes(`.reset.`)).toSorted().toReversed();if(nonResetJsonl.length>0)return path.join(params.sessionsDir,nonResetJsonl[0])}catch{}}const saveSessionToMemory=async event=>{if(!(event.type!==`command`||event.action!==`new`))try{log.debug(`Hook triggered for /new command`);let context=event.context||{},cfg=context.cfg,agentId=resolveAgentIdFromSessionKey(event.sessionKey),workspaceDir=cfg?resolveAgentWorkspaceDir(cfg,agentId):path.join(resolveStateDir(process.env,os.homedir),`workspace`),memoryDir=path.join(workspaceDir,`.builderforce`,`memory`);await fs.mkdir(memoryDir,{recursive:!0});let now=new Date(event.timestamp),dateStr=now.toISOString().split(`T`)[0],sessionEntry=context.previousSessionEntry||context.sessionEntry||{},currentSessionId=sessionEntry.sessionId,currentSessionFile=sessionEntry.sessionFile||void 0;if(!currentSessionFile||currentSessionFile.includes(`.reset.`)){let sessionsDirs=new Set;currentSessionFile&&sessionsDirs.add(path.dirname(currentSessionFile)),sessionsDirs.add(path.join(workspaceDir,`sessions`));for(let sessionsDir of sessionsDirs){let recoveredSessionFile=await findPreviousSessionFile({sessionsDir,currentSessionFile,sessionId:currentSessionId});if(recoveredSessionFile){currentSessionFile=recoveredSessionFile,log.debug(`Found previous session file`,{file:currentSessionFile});break}}}log.debug(`Session context resolved`,{sessionId:currentSessionId,sessionFile:currentSessionFile,hasCfg:!!cfg});let sessionFile=currentSessionFile||void 0,hookConfig=resolveHookConfig(cfg,`session-memory`),messageCount=typeof hookConfig?.messages==`number`&&hookConfig.messages>0?hookConfig.messages:15,slug=null,sessionContent=null;if(sessionFile){sessionContent=await getRecentSessionContentWithResetFallback(sessionFile,messageCount),log.debug(`Session content loaded`,{length:sessionContent?.length??0,messageCount});let allowLlmSlug=!(process.env.BUILDERFORCE_AGENTS_TEST_FAST===`1`||process.env.VITEST===`true`||process.env.VITEST===`1`)&&hookConfig?.llmSlug!==!1;sessionContent&&cfg&&allowLlmSlug&&(log.debug(`Calling generateSlugViaLLM...`),slug=await generateSlugViaLLM({sessionContent,cfg}),log.debug(`Generated slug`,{slug}))}slug||(slug=now.toISOString().split(`T`)[1].split(`.`)[0].replace(/:/g,``).slice(0,4),log.debug(`Using fallback timestamp slug`,{slug}));let filename=`${dateStr}-${slug}.md`,memoryFilePath=path.join(memoryDir,filename);log.debug(`Memory file path resolved`,{filename,path:memoryFilePath.replace(os.homedir(),`~`)});let timeStr=now.toISOString().split(`T`)[1].split(`.`)[0],sessionId=sessionEntry.sessionId||`unknown`,source=context.commandSource||`unknown`,entryParts=[`# Session: ${dateStr} ${timeStr} UTC`,``,`- **Session Key**: ${event.sessionKey}`,`- **Session ID**: ${sessionId}`,`- **Source**: ${source}`,``];sessionContent&&entryParts.push(`## Conversation Summary`,``,sessionContent,``);let entry=entryParts.join(`
4
4
  `);await fs.writeFile(memoryFilePath,entry,`utf-8`),log.debug(`Memory file written successfully`);let relPath=memoryFilePath.replace(os.homedir(),`~`);log.info(`Session context saved to ${relPath}`)}catch(err){err instanceof Error?log.error(`Failed to save session memory`,{errorName:err.name,errorMessage:err.message,stack:err.stack}):log.error(`Failed to save session memory`,{error:String(err)})}};export{saveSessionToMemory as default};
@@ -1 +1 @@
1
- import{n as CHAT_CHANNEL_ORDER}from"./registry-TdK-aV05.js";import{t as isTruthyEnvValue}from"./env-BIdU5BAp.js";import{n as listChannelPlugins}from"./plugins-D5zP6ENo.js";import{r as listChannelPluginCatalogEntries}from"./catalog-rgiY__UQ.js";import{t as ensurePluginRegistryLoaded}from"./plugin-registry-BEmyRfmb.js";function dedupe(values){let seen=new Set,resolved=[];for(let value of values)!value||seen.has(value)||(seen.add(value),resolved.push(value));return resolved}function resolveCliChannelOptions(){let catalog=listChannelPluginCatalogEntries().map(entry=>entry.id),base=dedupe([...CHAT_CHANNEL_ORDER,...catalog]);if(isTruthyEnvValue(process.env.BUILDERFORCE_AGENTS_EAGER_CHANNEL_OPTIONS)){ensurePluginRegistryLoaded();let pluginIds=listChannelPlugins().map(plugin=>plugin.id);return dedupe([...base,...pluginIds])}return base}function formatCliChannelOptions(extra=[]){return[...extra,...resolveCliChannelOptions()].join(`|`)}export{resolveCliChannelOptions as n,formatCliChannelOptions as t};
1
+ import{n as CHAT_CHANNEL_ORDER}from"./registry-TdK-aV05.js";import{t as isTruthyEnvValue}from"./env-BIdU5BAp.js";import{n as listChannelPlugins}from"./plugins-D5zP6ENo.js";import{r as listChannelPluginCatalogEntries}from"./catalog-rgiY__UQ.js";import{t as ensurePluginRegistryLoaded}from"./plugin-registry-DrEpL5ac.js";function dedupe(values){let seen=new Set,resolved=[];for(let value of values)!value||seen.has(value)||(seen.add(value),resolved.push(value));return resolved}function resolveCliChannelOptions(){let catalog=listChannelPluginCatalogEntries().map(entry=>entry.id),base=dedupe([...CHAT_CHANNEL_ORDER,...catalog]);if(isTruthyEnvValue(process.env.BUILDERFORCE_AGENTS_EAGER_CHANNEL_OPTIONS)){ensurePluginRegistryLoaded();let pluginIds=listChannelPlugins().map(plugin=>plugin.id);return dedupe([...base,...pluginIds])}return base}function formatCliChannelOptions(extra=[]){return[...extra,...resolveCliChannelOptions()].join(`|`)}export{resolveCliChannelOptions as n,formatCliChannelOptions as t};
@@ -1 +1 @@
1
- import{n as CHAT_CHANNEL_ORDER}from"./registry-Cv7CoWAs.js";import{t as isTruthyEnvValue}from"./env-BoE8QSib.js";import{n as listChannelPlugins}from"./plugins-1Mn6RiNf.js";import{r as listChannelPluginCatalogEntries}from"./catalog-li4bSIE2.js";import{t as ensurePluginRegistryLoaded}from"./plugin-registry-CFkQDTOt.js";function dedupe(values){let seen=new Set,resolved=[];for(let value of values)!value||seen.has(value)||(seen.add(value),resolved.push(value));return resolved}function resolveCliChannelOptions(){let catalog=listChannelPluginCatalogEntries().map(entry=>entry.id),base=dedupe([...CHAT_CHANNEL_ORDER,...catalog]);if(isTruthyEnvValue(process.env.BUILDERFORCE_AGENTS_EAGER_CHANNEL_OPTIONS)){ensurePluginRegistryLoaded();let pluginIds=listChannelPlugins().map(plugin=>plugin.id);return dedupe([...base,...pluginIds])}return base}function formatCliChannelOptions(extra=[]){return[...extra,...resolveCliChannelOptions()].join(`|`)}export{resolveCliChannelOptions as n,formatCliChannelOptions as t};
1
+ import{n as CHAT_CHANNEL_ORDER}from"./registry-Cv7CoWAs.js";import{t as isTruthyEnvValue}from"./env-BoE8QSib.js";import{n as listChannelPlugins}from"./plugins-1Mn6RiNf.js";import{r as listChannelPluginCatalogEntries}from"./catalog-li4bSIE2.js";import{t as ensurePluginRegistryLoaded}from"./plugin-registry-DdFb5usc.js";function dedupe(values){let seen=new Set,resolved=[];for(let value of values)!value||seen.has(value)||(seen.add(value),resolved.push(value));return resolved}function resolveCliChannelOptions(){let catalog=listChannelPluginCatalogEntries().map(entry=>entry.id),base=dedupe([...CHAT_CHANNEL_ORDER,...catalog]);if(isTruthyEnvValue(process.env.BUILDERFORCE_AGENTS_EAGER_CHANNEL_OPTIONS)){ensurePluginRegistryLoaded();let pluginIds=listChannelPlugins().map(plugin=>plugin.id);return dedupe([...base,...pluginIds])}return base}function formatCliChannelOptions(extra=[]){return[...extra,...resolveCliChannelOptions()].join(`|`)}export{resolveCliChannelOptions as n,formatCliChannelOptions as t};