@seanhogg/builderforce-agents 2026.10.9 → 2026.10.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{audio-preflight-CvvHdoWy.js → audio-preflight-Dm9zyfJq.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/{builderforce-BmrsVdFw.js → builderforce-2EpP2M8q.js} +3 -3
- package/dist/{builderforce-Bwyw0GJ6.js → builderforce-Cyg20uU8.js} +3 -3
- package/dist/{builderforce-onboarding-DuUfZ6oL.js → builderforce-onboarding-C89jVb-9.js} +1 -1
- package/dist/{builderforce-onboarding-Dq6VUSKZ.js → builderforce-onboarding-D5A-wEs-.js} +1 -1
- package/dist/chrome-DUBgoZpO.js +4 -0
- package/dist/{command-registry-COUcUWby.js → command-registry-CDcuHGpx.js} +1 -1
- package/dist/{command-registry-4_K-lfW5.js → command-registry-hHegQvBn.js} +1 -1
- package/dist/{completion-cli-DlvHqL86.js → completion-cli-Bqr0W4L6.js} +1 -1
- package/dist/{completion-cli-B2qcVd6q.js → completion-cli-Ch9ozmkg.js} +1 -1
- package/dist/{completion-cli-SdcQ-kQj.js → completion-cli-Ck0FTqPT.js} +1 -1
- package/dist/{completion-cli-DpFvU4Qn.js → completion-cli-Do4vXo1k.js} +1 -1
- package/dist/{doctor-completion-BSotFS6p.js → doctor-completion-BjBTLcoC.js} +1 -1
- package/dist/{doctor-completion-DVxbs-74.js → doctor-completion-Ccs-JEvV.js} +1 -1
- package/dist/{embedded-D-citLF2.js → embedded-cvG_LpfQ.js} +6 -6
- package/dist/entry.js +1 -1
- package/dist/extensionAPI.js +1 -1
- package/dist/{gateway-cli-D2Bg1Um6.js → gateway-cli-CiHNwzdS.js} +1 -1
- package/dist/{gateway-cli-DFEo8C0z.js → gateway-cli-z47dfosr.js} +1 -1
- package/dist/index.js +2 -2
- package/dist/{onboard-DfMVh1bM.js → onboard-D4uXN5Ec.js} +1 -1
- package/dist/{onboard-BVmZ4jMw.js → onboard-cB37uVxy.js} +1 -1
- package/dist/{onboard-interactive-B3-KBZbZ.js → onboard-interactive-CnXgQrpI.js} +1 -1
- package/dist/{onboard-interactive-Dc_7URYb.js → onboard-interactive-CoFFuSJT.js} +1 -1
- package/dist/{onboard-interactive-zgjmwJz-.js → onboard-interactive-gvfRcLOt.js} +1 -1
- package/dist/{onboard-interactive-DYJttZ2w.js → onboard-interactive-vwqLS6pe.js} +1 -1
- package/dist/{onboarding-CP9rrz8y.js → onboarding-B9GqKO5L.js} +2 -2
- package/dist/{onboarding-D4-HDbmU.js → onboarding-DdKW5K8Y.js} +2 -2
- package/dist/{onboarding.finalize-C2kZi7F0.js → onboarding.finalize-CcuO4Yxw.js} +1 -1
- package/dist/{onboarding.finalize-BfWXPgX7.js → onboarding.finalize-D3mTpOdc.js} +1 -1
- package/dist/plugin-sdk/{accounts-Cy3WCbWg.js → accounts-BwreSNAR.js} +1 -1
- package/dist/plugin-sdk/{active-listener-DVWVNlT9.js → active-listener-DpQ7aGYd.js} +1 -1
- package/dist/plugin-sdk/{agent-scope-DgKN27hJ.js → agent-scope-BQByW0cD.js} +1 -1
- package/dist/plugin-sdk/{api-key-rotation-ftXf7mBZ.js → api-key-rotation-7YdImWrh.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-CfTmmeS-.js → audio-preflight-EbkaATDO.js} +1 -1
- package/dist/plugin-sdk/{auth-json-BrNBg87n.js → auth-json-DK6qod1_.js} +1 -1
- package/dist/plugin-sdk/{bindings-CH-YLOLC.js → bindings-CDEzl4kl.js} +1 -1
- package/dist/plugin-sdk/{channel-web-B6rg0Rbf.js → channel-web-D2KuONp0.js} +1 -1
- package/dist/plugin-sdk/{chrome-CuXP-hes.js → chrome-SOXFIkUM.js} +1 -1
- package/dist/plugin-sdk/{chunk-C94IAOuf.js → chunk-cW0POl22.js} +1 -1
- package/dist/plugin-sdk/{command-format-B3XMq_73.js → command-format-CAX9XFjI.js} +1 -1
- package/dist/plugin-sdk/{common-n0l_XN-S.js → common-BxEWhN2X.js} +1 -1
- package/dist/plugin-sdk/{config-DsXZsCkJ.js → config-v1EU9Ll8.js} +2 -2
- package/dist/plugin-sdk/{fetch-B-GxSYRO.js → fetch-DH0Y8iyO.js} +1 -1
- package/dist/plugin-sdk/index.js +1 -1
- package/dist/plugin-sdk/{login-_my8QwPP.js → login-d1zBgykF.js} +1 -1
- package/dist/plugin-sdk/{login-qr-BaePtXuG.js → login-qr-B6exvQnN.js} +1 -1
- package/dist/plugin-sdk/{manager-BsC-4ymy.js → manager-BH_bmGds.js} +1 -1
- package/dist/plugin-sdk/{markdown-tables-BUfhHgfs.js → markdown-tables-Epim9b-0.js} +1 -1
- package/dist/plugin-sdk/{message-channel-CuZ2xOAM.js → message-channel-sBPQc_-T.js} +1 -1
- package/dist/plugin-sdk/{model-catalog-yuiXVcmw.js → model-catalog-cXsza5GU.js} +1 -1
- package/dist/plugin-sdk/{model-selection-BtgvnqB5.js → model-selection-K82MAGlL.js} +1 -1
- package/dist/plugin-sdk/{outbound-D_attiyO.js → outbound-Chn_H1O7.js} +1 -1
- package/dist/plugin-sdk/{plugins-BdkC9v5E.js → plugins-CaUOZBVb.js} +1 -1
- package/dist/plugin-sdk/{pw-ai-A7Rathx6.js → pw-ai-BIiJF7ZD.js} +1 -1
- package/dist/plugin-sdk/{qmd-manager-Dxn0jCpE.js → qmd-manager-BRe5fGZw.js} +1 -1
- package/dist/plugin-sdk/{registry-CZHRcH-q.js → registry-DJq2Cvo9.js} +1 -1
- package/dist/plugin-sdk/{render-CuA_WRX5.js → render-BUCRXPIk.js} +1 -1
- package/dist/plugin-sdk/{replies-DmLfO-pg.js → replies-Cz5OD3qN.js} +1 -1
- package/dist/plugin-sdk/{reply-3-ne-N_7.js → reply-D5Uk7pUv.js} +9 -9
- package/dist/plugin-sdk/{reply-prefix-w7kAvH11.js → reply-prefix-CCymsmsP.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-0sbvl4ZN.js → resolve-route-DN1J7Wyc.js} +1 -1
- package/dist/plugin-sdk/{runner-4UfrAQnx.js → runner-CYkuO7Fh.js} +4 -4
- package/dist/plugin-sdk/{session-BB-yfDWx.js → session-D5jHDo78.js} +1 -1
- package/dist/plugin-sdk/{sqlite-JjFgDV-H.js → sqlite-BlMLqMl8.js} +1 -1
- package/dist/plugin-sdk/{subsystem-D0Ril4rt.js → subsystem-COTa5Ly_.js} +1 -1
- package/dist/plugin-sdk/{tool-images-WRTP95FT.js → tool-images-DSpchb4x.js} +1 -1
- package/dist/plugin-sdk/{tool-loop-detection-sC_rhJfb.js → tool-loop-detection-BP6u-mbh.js} +1 -1
- package/dist/plugin-sdk/web-BbganhKi.js +1 -0
- package/dist/plugin-sdk/{whatsapp-actions-ThxQ5niy.js → whatsapp-actions-CZUqxmP1.js} +1 -1
- package/dist/{program-2w7Ue902.js → program-BgDciyOQ.js} +2 -2
- package/dist/{program-context-BCwL3wlM.js → program-context-CpxTJP1m.js} +1 -1
- package/dist/{prompt-select-styled-Dd5swW2b.js → prompt-select-styled-Bu7WPMzB.js} +1 -1
- package/dist/{prompt-select-styled-hB_nLOn1.js → prompt-select-styled-Qb0DubNy.js} +1 -1
- package/dist/{pw-ai-DaxMmaVL.js → pw-ai-D8HJAvv-.js} +1 -1
- package/dist/{register.maintenance-BELfCO_C.js → register.maintenance-CPnm6L-m.js} +1 -1
- package/dist/{register.maintenance-DukWFS_D.js → register.maintenance-D8WmeEaD.js} +1 -1
- package/dist/{register.onboard-Dt7rzAq-.js → register.onboard-BoUicPRh.js} +1 -1
- package/dist/{register.onboard-B9DMNfHE.js → register.onboard-DMfqe2nX.js} +1 -1
- package/dist/{register.setup-CSF-2ImP.js → register.setup-BK6OEvY3.js} +1 -1
- package/dist/{register.setup-BRRVPrx7.js → register.setup-CtcAR3JR.js} +1 -1
- package/dist/{register.subclis-4eDV9jKH.js → register.subclis-Dl6jPPsc.js} +1 -1
- package/dist/{register.subclis-Cr9DoYcv.js → register.subclis-EScCVgbV.js} +1 -1
- package/dist/{run-main-DLcDEJgv.js → run-main-C3lmcvyV.js} +1 -1
- package/dist/{runner-COldX-El.js → runner-CviGu3Nk.js} +3 -3
- package/dist/{tui-DylWbrDx.js → tui-D2sTsa4p.js} +1 -1
- package/dist/{tui-BwWMByVp.js → tui-DY2oYbxk.js} +1 -1
- package/dist/{tui-cli-C_TTgabr.js → tui-cli-GW-qybY6.js} +1 -1
- package/dist/{tui-cli-Bh1V8-w9.js → tui-cli-wn3DmvUG.js} +1 -1
- package/dist/{update-cli-CA3LuuJ7.js → update-cli-CN0oxZ_A.js} +1 -1
- package/dist/{update-cli-DUrUIrYQ.js → update-cli-K5dGZmg8.js} +1 -1
- package/dist/{web-BQPd6gQJ.js → web-DONGrYXq.js} +1 -1
- package/package.json +1 -1
- package/dist/chrome-Brg9KsB9.js +0 -4
- package/dist/plugin-sdk/web-CThgoHQp.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{u as resolveGatewayPort}from"./paths-5FcIFMsj.js";import{C as shortenHomePath,b as resolveUserPath}from"./utils-DbaBVFaK.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import{Gt as resolveApiKeyForProfile,in as ensureAuthProfileStore,mn as normalizeSecretInput,nn as upsertAuthProfile,pn as normalizeOptionalSecretInput,u as normalizeProviderId,xt as resolveEnvApiKey,zt as resolveAuthProfileOrder}from"./model-selection-9bRFKBI_.js";import{t as formatCliCommand}from"./command-format-D806O2pt.js";import{a as upsertSharedEnvVar}from"./env-file-D1MDi-AM.js";import{a as readConfigFileSnapshot,c as writeConfigFile,y as parseDurationMs}from"./io-3R_ZyUxB.js";import{a as ensureWorkspaceAndSessions,b as waitForGatewayReachable,c as handleReset,g as resolveControlUiLinks,m as randomToken,n as applyWizardMetadata,t as DEFAULT_WORKSPACE}from"./onboard-helpers-Cf5dNq7-.js";import{t as assertSupportedRuntime}from"./runtime-guard-DhksRHci.js";import{a as gatewayInstallErrorHint,i as buildGatewayInstallPlan,r as isGatewayDaemonRuntime,t as DEFAULT_GATEWAY_DAEMON_RUNTIME}from"./daemon-runtime-CtOr1ncS.js";import{r as isSystemdUserServiceAvailable}from"./systemd-BG3_QT6W.js";import{t as resolveGatewayService}from"./service-D-NLDyK3.js";import{r as healthCommand}from"./health-yS3NRKvY.js";import{C as setXaiApiKey,S as setVercelAiGatewayApiKey,T as setZaiApiKey,_ as setOpenrouterApiKey,b as setTogetherApiKey,c as setAnthropicApiKey,d as setHuggingfaceApiKey,f as setKimiCodingApiKey,g as setOpencodeZenApiKey,h as setMoonshotApiKey,l as setCloudflareAiGatewayConfig,m as setMinimaxApiKey,p as setLitellmApiKey,u as setGeminiApiKey,v as setQianfanApiKey,w as setXiaomiApiKey,x as setVeniceApiKey,y as setSyntheticApiKey}from"./onboard-auth.credentials-BuT-etnE.js";import{A as applyXaiConfig,B as applyVercelAiGatewayConfig,E as applyTogetherConfig,H as applyAgentDefaultModelPrimary,I as applyLitellmConfig,M as applyXiaomiConfig,O as applyVeniceConfig,P as applyZaiConfig,R as applyCloudflareAiGatewayConfig,S as applyQianfanConfig,_ as applyMoonshotConfigCn,a as applyMinimaxApiConfig,b as applyOpenrouterConfig,d as applyAuthProfileConfig,f as applyHuggingfaceConfig,g as applyMoonshotConfig,l as applyMinimaxConfig,m as applyKimiCodeConfig,n as validateAnthropicSetupToken,o as applyMinimaxApiConfigCn,r as applyOpencodeZenConfig,t as buildTokenProfileId,w as applySyntheticConfig}from"./auth-token-CyVfNEQb.js";import{n as logConfigUpdated}from"./logging-DHa3jQN3.js";import{n as isDeprecatedAuthChoice,r as normalizeLegacyOnboardAuthChoice}from"./auth-choice-legacy-CqbQRfmW.js";import{i as detectZaiEndpoint,n as applyOpenAIConfig,o as applyGoogleGeminiModelDefault}from"./openai-model-default-Cp3nf21W.js";import{n as ensureSystemdUserLingerNonInteractive}from"./systemd-linger-CT-VHPB3.js";import{a as resolveCustomProviderId,n as applyCustomApiConfig,r as parseNonInteractiveCustomApiFlags,t as CustomApiError}from"./onboard-custom-C_BI0ZXn.js";import{t as runInteractiveOnboarding}from"./onboard-interactive-
|
|
1
|
+
import{u as resolveGatewayPort}from"./paths-5FcIFMsj.js";import{C as shortenHomePath,b as resolveUserPath}from"./utils-DbaBVFaK.js";import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import{Gt as resolveApiKeyForProfile,in as ensureAuthProfileStore,mn as normalizeSecretInput,nn as upsertAuthProfile,pn as normalizeOptionalSecretInput,u as normalizeProviderId,xt as resolveEnvApiKey,zt as resolveAuthProfileOrder}from"./model-selection-9bRFKBI_.js";import{t as formatCliCommand}from"./command-format-D806O2pt.js";import{a as upsertSharedEnvVar}from"./env-file-D1MDi-AM.js";import{a as readConfigFileSnapshot,c as writeConfigFile,y as parseDurationMs}from"./io-3R_ZyUxB.js";import{a as ensureWorkspaceAndSessions,b as waitForGatewayReachable,c as handleReset,g as resolveControlUiLinks,m as randomToken,n as applyWizardMetadata,t as DEFAULT_WORKSPACE}from"./onboard-helpers-Cf5dNq7-.js";import{t as assertSupportedRuntime}from"./runtime-guard-DhksRHci.js";import{a as gatewayInstallErrorHint,i as buildGatewayInstallPlan,r as isGatewayDaemonRuntime,t as DEFAULT_GATEWAY_DAEMON_RUNTIME}from"./daemon-runtime-CtOr1ncS.js";import{r as isSystemdUserServiceAvailable}from"./systemd-BG3_QT6W.js";import{t as resolveGatewayService}from"./service-D-NLDyK3.js";import{r as healthCommand}from"./health-yS3NRKvY.js";import{C as setXaiApiKey,S as setVercelAiGatewayApiKey,T as setZaiApiKey,_ as setOpenrouterApiKey,b as setTogetherApiKey,c as setAnthropicApiKey,d as setHuggingfaceApiKey,f as setKimiCodingApiKey,g as setOpencodeZenApiKey,h as setMoonshotApiKey,l as setCloudflareAiGatewayConfig,m as setMinimaxApiKey,p as setLitellmApiKey,u as setGeminiApiKey,v as setQianfanApiKey,w as setXiaomiApiKey,x as setVeniceApiKey,y as setSyntheticApiKey}from"./onboard-auth.credentials-BuT-etnE.js";import{A as applyXaiConfig,B as applyVercelAiGatewayConfig,E as applyTogetherConfig,H as applyAgentDefaultModelPrimary,I as applyLitellmConfig,M as applyXiaomiConfig,O as applyVeniceConfig,P as applyZaiConfig,R as applyCloudflareAiGatewayConfig,S as applyQianfanConfig,_ as applyMoonshotConfigCn,a as applyMinimaxApiConfig,b as applyOpenrouterConfig,d as applyAuthProfileConfig,f as applyHuggingfaceConfig,g as applyMoonshotConfig,l as applyMinimaxConfig,m as applyKimiCodeConfig,n as validateAnthropicSetupToken,o as applyMinimaxApiConfigCn,r as applyOpencodeZenConfig,t as buildTokenProfileId,w as applySyntheticConfig}from"./auth-token-CyVfNEQb.js";import{n as logConfigUpdated}from"./logging-DHa3jQN3.js";import{n as isDeprecatedAuthChoice,r as normalizeLegacyOnboardAuthChoice}from"./auth-choice-legacy-CqbQRfmW.js";import{i as detectZaiEndpoint,n as applyOpenAIConfig,o as applyGoogleGeminiModelDefault}from"./openai-model-default-Cp3nf21W.js";import{n as ensureSystemdUserLingerNonInteractive}from"./systemd-linger-CT-VHPB3.js";import{a as resolveCustomProviderId,n as applyCustomApiConfig,r as parseNonInteractiveCustomApiFlags,t as CustomApiError}from"./onboard-custom-C_BI0ZXn.js";import{t as runInteractiveOnboarding}from"./onboard-interactive-gvfRcLOt.js";import{t as applyOnboardingLocalWorkspaceConfig}from"./onboard-config-Kjacn8P6.js";const ONBOARD_PROVIDER_AUTH_FLAGS=[{optionKey:`anthropicApiKey`,authChoice:`apiKey`,cliFlag:`--anthropic-api-key`,cliOption:`--anthropic-api-key <key>`,description:`Anthropic API key`},{optionKey:`openaiApiKey`,authChoice:`openai-api-key`,cliFlag:`--openai-api-key`,cliOption:`--openai-api-key <key>`,description:`OpenAI API key`},{optionKey:`openrouterApiKey`,authChoice:`openrouter-api-key`,cliFlag:`--openrouter-api-key`,cliOption:`--openrouter-api-key <key>`,description:`OpenRouter API key`},{optionKey:`aiGatewayApiKey`,authChoice:`ai-gateway-api-key`,cliFlag:`--ai-gateway-api-key`,cliOption:`--ai-gateway-api-key <key>`,description:`Vercel AI Gateway API key`},{optionKey:`cloudflareAiGatewayApiKey`,authChoice:`cloudflare-ai-gateway-api-key`,cliFlag:`--cloudflare-ai-gateway-api-key`,cliOption:`--cloudflare-ai-gateway-api-key <key>`,description:`Cloudflare AI Gateway API key`},{optionKey:`moonshotApiKey`,authChoice:`moonshot-api-key`,cliFlag:`--moonshot-api-key`,cliOption:`--moonshot-api-key <key>`,description:`Moonshot API key`},{optionKey:`kimiCodeApiKey`,authChoice:`kimi-code-api-key`,cliFlag:`--kimi-code-api-key`,cliOption:`--kimi-code-api-key <key>`,description:`Kimi Coding API key`},{optionKey:`geminiApiKey`,authChoice:`gemini-api-key`,cliFlag:`--gemini-api-key`,cliOption:`--gemini-api-key <key>`,description:`Gemini API key`},{optionKey:`zaiApiKey`,authChoice:`zai-api-key`,cliFlag:`--zai-api-key`,cliOption:`--zai-api-key <key>`,description:`Z.AI API key`},{optionKey:`xiaomiApiKey`,authChoice:`xiaomi-api-key`,cliFlag:`--xiaomi-api-key`,cliOption:`--xiaomi-api-key <key>`,description:`Xiaomi API key`},{optionKey:`minimaxApiKey`,authChoice:`minimax-api`,cliFlag:`--minimax-api-key`,cliOption:`--minimax-api-key <key>`,description:`MiniMax API key`},{optionKey:`syntheticApiKey`,authChoice:`synthetic-api-key`,cliFlag:`--synthetic-api-key`,cliOption:`--synthetic-api-key <key>`,description:`Synthetic API key`},{optionKey:`veniceApiKey`,authChoice:`venice-api-key`,cliFlag:`--venice-api-key`,cliOption:`--venice-api-key <key>`,description:`Venice API key`},{optionKey:`togetherApiKey`,authChoice:`together-api-key`,cliFlag:`--together-api-key`,cliOption:`--together-api-key <key>`,description:`Together AI API key`},{optionKey:`huggingfaceApiKey`,authChoice:`huggingface-api-key`,cliFlag:`--huggingface-api-key`,cliOption:`--huggingface-api-key <key>`,description:`Hugging Face API key (HF token)`},{optionKey:`opencodeZenApiKey`,authChoice:`opencode-zen`,cliFlag:`--opencode-zen-api-key`,cliOption:`--opencode-zen-api-key <key>`,description:`OpenCode Zen API key`},{optionKey:`xaiApiKey`,authChoice:`xai-api-key`,cliFlag:`--xai-api-key`,cliOption:`--xai-api-key <key>`,description:`xAI API key`},{optionKey:`litellmApiKey`,authChoice:`litellm-api-key`,cliFlag:`--litellm-api-key`,cliOption:`--litellm-api-key <key>`,description:`LiteLLM API key`},{optionKey:`qianfanApiKey`,authChoice:`qianfan-api-key`,cliFlag:`--qianfan-api-key`,cliOption:`--qianfan-api-key <key>`,description:`QIANFAN API key`}];function hasStringValue(value){return typeof value==`string`?value.trim().length>0:!!value}function inferAuthChoiceFromFlags(opts){let matches=ONBOARD_PROVIDER_AUTH_FLAGS.filter(({optionKey})=>hasStringValue(opts[optionKey])).map(flag=>({optionKey:flag.optionKey,authChoice:flag.authChoice,label:flag.cliFlag}));return(hasStringValue(opts.customBaseUrl)||hasStringValue(opts.customModelId)||hasStringValue(opts.customApiKey))&&matches.push({optionKey:`customBaseUrl`,authChoice:`custom-api-key`,label:`--custom-base-url/--custom-model-id/--custom-api-key`}),{choice:matches[0]?.authChoice,matches}}async function resolveApiKeyFromProfiles(params){let store=await ensureAuthProfileStore(params.agentDir),order=resolveAuthProfileOrder({cfg:params.cfg,store,provider:params.provider});for(let profileId of order){if(store.profiles[profileId]?.type!==`api_key`)continue;let resolved=await resolveApiKeyForProfile({cfg:params.cfg,store,profileId,agentDir:params.agentDir});if(resolved?.apiKey)return resolved.apiKey}return null}async function resolveNonInteractiveApiKey(params){let flagKey=normalizeOptionalSecretInput(params.flagValue);if(flagKey)return{key:flagKey,source:`flag`};let envResolved=resolveEnvApiKey(params.provider);if(envResolved?.apiKey)return{key:envResolved.apiKey,source:`env`};let explicitEnvVar=params.envVarName?.trim();if(explicitEnvVar){let explicitEnvKey=normalizeOptionalSecretInput(process.env[explicitEnvVar]);if(explicitEnvKey)return{key:explicitEnvKey,source:`env`}}if(params.allowProfile??!0){let profileKey=await resolveApiKeyFromProfiles({provider:params.provider,cfg:params.cfg,agentDir:params.agentDir});if(profileKey)return{key:profileKey,source:`profile`}}if(params.required===!1)return null;let profileHint=params.allowProfile===!1?``:`, or existing ${params.provider} API-key profile`;return params.runtime.error(`Missing ${params.flagName} (or ${params.envVar} in env${profileHint}).`),params.runtime.exit(1),null}async function applyNonInteractiveAuthChoice(params){let{authChoice,opts,runtime,baseConfig}=params,nextConfig=params.nextConfig;if(authChoice===`claude-cli`||authChoice===`codex-cli`)return runtime.error([`Auth choice "${authChoice}" is deprecated.`,`Use "--auth-choice builderforcellm" (recommended default), "--auth-choice token" (Anthropic setup-token), or "--auth-choice openai-codex".`].join(`
|
|
2
2
|
`)),runtime.exit(1),null;if(authChoice===`setup-token`)return runtime.error([`Auth choice "setup-token" requires interactive mode.`,`Use "--auth-choice token" with --token and --token-provider anthropic.`].join(`
|
|
3
3
|
`)),runtime.exit(1),null;if(authChoice===`local`)return runtime.error([`Auth choice "local" requires interactive mode.`,`Use interactive onboard/configure for guided local Ollama or llama.cpp/vLLM setup.`].join(`
|
|
4
4
|
`)),runtime.exit(1),null;if(authChoice===`vllm`)return runtime.error([`Auth choice "vllm" requires interactive mode.`,`Use interactive onboard/configure to enter base URL, API key, and model ID.`].join(`
|
|
@@ -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-9bRFKBI_.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-3R_ZyUxB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-_1Ca6jGb.js";import"./progress-BfOtdN6b.js";import"./prompt-style-BpVK43GK.js";import"./note-B6NtFdXt.js";import"./clack-prompter-Dg23_riR.js";import"./onboarding-
|
|
1
|
+
import"./paths-5FcIFMsj.js";import"./utils-DbaBVFaK.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-9bRFKBI_.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-3R_ZyUxB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-_1Ca6jGb.js";import"./progress-BfOtdN6b.js";import"./prompt-style-BpVK43GK.js";import"./note-B6NtFdXt.js";import"./clack-prompter-Dg23_riR.js";import"./onboarding-DdKW5K8Y.js";import{t as runInteractiveOnboarding}from"./onboard-interactive-gvfRcLOt.js";export{runInteractiveOnboarding};
|
|
@@ -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-C1VbcUOm.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./progress-Cqb-jAjT.js";import"./prompt-style-BMWmaqSC.js";import"./note-DgDXuE0F.js";import"./clack-prompter-B52CP7eY.js";import"./onboarding-
|
|
1
|
+
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import"./utils-BP60e80M.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./auth-profiles-C1VbcUOm.js";import"./src-DvWaTze9.js";import"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./progress-Cqb-jAjT.js";import"./prompt-style-BMWmaqSC.js";import"./note-DgDXuE0F.js";import"./clack-prompter-B52CP7eY.js";import"./onboarding-B9GqKO5L.js";import{t as runInteractiveOnboarding}from"./onboard-interactive-vwqLS6pe.js";export{runInteractiveOnboarding};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import{t as restoreTerminalState}from"./restore-gPan2ZAn.js";import{t as WizardCancelledError}from"./prompts-Bchzq3K0.js";import{t as createClackPrompter}from"./clack-prompter-Dg23_riR.js";import{t as runOnboardingWizard}from"./onboarding-
|
|
1
|
+
import{i as defaultRuntime}from"./subsystem-B3TqcCrZ.js";import{t as restoreTerminalState}from"./restore-gPan2ZAn.js";import{t as WizardCancelledError}from"./prompts-Bchzq3K0.js";import{t as createClackPrompter}from"./clack-prompter-Dg23_riR.js";import{t as runOnboardingWizard}from"./onboarding-DdKW5K8Y.js";async function runInteractiveOnboarding(opts,runtime=defaultRuntime){let prompter=createClackPrompter(),exitCode=null;try{await runOnboardingWizard(opts,runtime,prompter)}catch(err){if(err instanceof WizardCancelledError){exitCode=1;return}throw err}finally{restoreTerminalState(`onboarding finish`,{resumeStdinIfPaused:!1}),exitCode!==null&&runtime.exit(exitCode)}}export{runInteractiveOnboarding as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as restoreTerminalState}from"./restore-BdB4wlsZ.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import{t as WizardCancelledError}from"./prompts-BP4e56X_.js";import{t as createClackPrompter}from"./clack-prompter-B52CP7eY.js";import{t as runOnboardingWizard}from"./onboarding-
|
|
1
|
+
import{t as restoreTerminalState}from"./restore-BdB4wlsZ.js";import{p as defaultRuntime}from"./subsystem-C4b1Von0.js";import{t as WizardCancelledError}from"./prompts-BP4e56X_.js";import{t as createClackPrompter}from"./clack-prompter-B52CP7eY.js";import{t as runOnboardingWizard}from"./onboarding-B9GqKO5L.js";async function runInteractiveOnboarding(opts,runtime=defaultRuntime){let prompter=createClackPrompter(),exitCode=null;try{await runOnboardingWizard(opts,runtime,prompter)}catch(err){if(err instanceof WizardCancelledError){exitCode=1;return}throw err}finally{restoreTerminalState(`onboarding finish`,{resumeStdinIfPaused:!1}),exitCode!==null&&runtime.exit(exitCode)}}export{runInteractiveOnboarding as t};
|
|
@@ -3,5 +3,5 @@ import{n as DEFAULT_GATEWAY_PORT,u as resolveGatewayPort}from"./paths-BHg-VHB4.j
|
|
|
3
3
|
`),`Config issues`),await prompter.outro(`Config invalid. Run \`${formatCliCommand(`builderforce doctor`)}\` to repair it, then re-run onboarding.`),runtime.exit(1);return}let quickstartHint=`Configure details later via ${formatCliCommand(`builderforce configure`)}.`,explicitFlowRaw=opts.flow?.trim(),normalizedExplicitFlow=explicitFlowRaw===`manual`?`advanced`:explicitFlowRaw;if(normalizedExplicitFlow&&normalizedExplicitFlow!==`quickstart`&&normalizedExplicitFlow!==`advanced`){runtime.error(`Invalid --flow (use quickstart, manual, or advanced).`),runtime.exit(1);return}let flow=(normalizedExplicitFlow===`quickstart`||normalizedExplicitFlow===`advanced`?normalizedExplicitFlow:void 0)??await prompter.select({message:`Onboarding mode`,options:[{value:`quickstart`,label:`QuickStart`,hint:quickstartHint},{value:`advanced`,label:`Manual`,hint:`Configure port, network, Tailscale, and auth options.`}],initialValue:`quickstart`});if(opts.mode===`remote`&&flow===`quickstart`&&(await prompter.note(`QuickStart only supports local gateways. Switching to Manual mode.`,`QuickStart`),flow=`advanced`),snapshot.exists){await prompter.note(onboardHelpers.summarizeExistingConfig(baseConfig),`Existing config detected`);let action=await prompter.select({message:`Config handling
|
|
4
4
|
(↑/↓ to select, Enter to confirm)`,options:[{value:`keep`,label:`Use existing values`},{value:`modify`,label:`Update values`},{value:`reset`,label:`Reset`}],initialValue:`keep`});if(configHandlingAction=action,action===`reset`){let workspaceDefault=baseConfig.agents?.defaults?.workspace??onboardHelpers.DEFAULT_WORKSPACE,resetScope=await prompter.select({message:`Reset scope`,options:[{value:`config`,label:`Config only`},{value:`config+creds+sessions`,label:`Config + creds + sessions`},{value:`full`,label:`Full reset (config + creds + sessions + workspace)`}]});await onboardHelpers.handleReset(resetScope,resolveUserPath(workspaceDefault),runtime),baseConfig={}}}let keepExistingValues=configHandlingAction===`keep`,quickstartGateway=(()=>{let hasExisting=typeof baseConfig.gateway?.port==`number`||baseConfig.gateway?.bind!==void 0||baseConfig.gateway?.auth?.mode!==void 0||baseConfig.gateway?.auth?.token!==void 0||baseConfig.gateway?.auth?.password!==void 0||baseConfig.gateway?.customBindHost!==void 0||baseConfig.gateway?.tailscale?.mode!==void 0,bindRaw=baseConfig.gateway?.bind,bind=bindRaw===`loopback`||bindRaw===`lan`||bindRaw===`auto`||bindRaw===`custom`||bindRaw===`tailnet`?bindRaw:`loopback`,authMode=`token`;baseConfig.gateway?.auth?.mode===`token`||baseConfig.gateway?.auth?.mode===`password`?authMode=baseConfig.gateway.auth.mode:baseConfig.gateway?.auth?.token?authMode=`token`:baseConfig.gateway?.auth?.password&&(authMode=`password`);let tailscaleRaw=baseConfig.gateway?.tailscale?.mode,tailscaleMode=tailscaleRaw===`off`||tailscaleRaw===`serve`||tailscaleRaw===`funnel`?tailscaleRaw:`off`;return{hasExisting,port:resolveGatewayPort(baseConfig),bind,authMode,tailscaleMode,token:baseConfig.gateway?.auth?.token,password:baseConfig.gateway?.auth?.password,customBindHost:baseConfig.gateway?.customBindHost,tailscaleResetOnExit:baseConfig.gateway?.tailscale?.resetOnExit??!1}})();if(flow===`quickstart`){let formatBind=value=>value===`loopback`?`Loopback (127.0.0.1)`:value===`lan`?`LAN`:value===`custom`?`Custom IP`:value===`tailnet`?`Tailnet (Tailscale IP)`:`Auto`,formatAuth=value=>value===`token`?`Token (default)`:`Password`,formatTailscale=value=>value===`off`?`Off`:value===`serve`?`Serve`:`Funnel`,quickstartLines=quickstartGateway.hasExisting?[`Keeping your current gateway settings:`,`Gateway port: ${quickstartGateway.port}`,`Gateway bind: ${formatBind(quickstartGateway.bind)}`,...quickstartGateway.bind===`custom`&&quickstartGateway.customBindHost?[`Gateway custom IP: ${quickstartGateway.customBindHost}`]:[],`Gateway auth: ${formatAuth(quickstartGateway.authMode)}`,`Tailscale exposure: ${formatTailscale(quickstartGateway.tailscaleMode)}`,`Direct to chat channels.`]:[`Gateway port: ${DEFAULT_GATEWAY_PORT}`,`Gateway bind: Loopback (127.0.0.1)`,`Gateway auth: Token (default)`,`Tailscale exposure: Off`,`Direct to chat channels.`];await prompter.note(quickstartLines.join(`
|
|
5
5
|
`),`QuickStart`)}let localPort=resolveGatewayPort(baseConfig),localUrl=`ws://127.0.0.1:${localPort}`,localProbe=await onboardHelpers.probeGatewayReachable({url:localUrl,token:baseConfig.gateway?.auth?.token??process.env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN,password:baseConfig.gateway?.auth?.password??process.env.BUILDERFORCE_AGENTS_GATEWAY_PASSWORD}),remoteUrl=baseConfig.gateway?.remote?.url?.trim()??``,remoteProbe=remoteUrl?await onboardHelpers.probeGatewayReachable({url:remoteUrl,token:baseConfig.gateway?.remote?.token}):null,mode=opts.mode??(flow===`quickstart`?`local`:await prompter.select({message:`What do you want to set up?`,options:[{value:`local`,label:`Local gateway (this machine)`,hint:localProbe.ok?`Gateway reachable (${localUrl})`:`No gateway detected (${localUrl})`},{value:`remote`,label:`Remote gateway (info-only)`,hint:remoteUrl?remoteProbe?.ok?`Gateway reachable (${remoteUrl})`:`Configured but unreachable (${remoteUrl})`:`No remote URL configured yet`}]}));if(mode===`remote`){let{promptRemoteGatewayConfig}=await import(`./onboard-remote-CzzQMZ3X.js`),{logConfigUpdated}=await import(`./logging-DSIJukIo.js`),nextConfig=await promptRemoteGatewayConfig(baseConfig,prompter);nextConfig=onboardHelpers.applyWizardMetadata(nextConfig,{command:`onboard`,mode}),await writeConfigFile(nextConfig),logConfigUpdated(runtime),await prompter.outro(`Remote gateway configured.`);return}let existingWorkspace=baseConfig.agents?.defaults?.workspace??onboardHelpers.DEFAULT_WORKSPACE,workspaceDir=resolveUserPath((opts.workspace??(flow===`quickstart`||keepExistingValues?existingWorkspace:await prompter.text({message:`Workspace directory`,initialValue:existingWorkspace}))).trim()||onboardHelpers.DEFAULT_WORKSPACE),{applyOnboardingLocalWorkspaceConfig}=await import(`./onboard-config-C-P0yFzv.js`),nextConfig=applyOnboardingLocalWorkspaceConfig(baseConfig,workspaceDir),{promptAuthChoiceGrouped}=await import(`./auth-choice-prompt-BotfCVbL.js`),{promptCustomApiConfig}=await import(`./onboard-custom-BABqIYa4.js`),{applyAuthChoice,resolvePreferredProviderForAuthChoice,warnIfModelConfigLooksOff}=await import(`./auth-choice-CVV9wRFN.js`),{applyPrimaryModel,promptDefaultModel}=await import(`./model-picker-D2bcWrtu.js`);if(keepExistingValues&&hasConfiguredModelOrAuth(nextConfig))await prompter.note(`Keeping existing model/auth configuration.`,`Model/auth provider`);else{let authStore=await ensureAuthProfileStore(void 0,{allowKeychainPrompt:!1}),authChoiceFromPrompt=opts.authChoice===void 0,authChoice=opts.authChoice??await promptAuthChoiceGrouped({prompter,store:authStore,includeSkip:!0});if(nextConfig=authChoice===`custom-api-key`?(await promptCustomApiConfig({prompter,runtime,config:nextConfig})).config:(await applyAuthChoice({authChoice,config:nextConfig,prompter,runtime,setDefaultModel:!0,opts:{tokenProvider:opts.tokenProvider,token:opts.authChoice===`apiKey`&&opts.token?opts.token:void 0}})).config,authChoiceFromPrompt&&authChoice!==`custom-api-key`&&authChoice!==`local`&&authChoice!==`builderforcellm`){let modelSelection=await promptDefaultModel({config:nextConfig,prompter,allowKeep:!0,ignoreAllowlist:!0,includeVllm:!0,preferredProvider:resolvePreferredProviderForAuthChoice(authChoice)});modelSelection.config&&(nextConfig=modelSelection.config),modelSelection.model&&(nextConfig=applyPrimaryModel(nextConfig,modelSelection.model))}let primaryModel=typeof nextConfig.agents?.defaults?.model?.primary==`string`?nextConfig.agents.defaults.model.primary.trim().toLowerCase():``;if((primaryModel===`builderforcellm`||primaryModel.startsWith(`builderforcellm/`))&&!(process.env.BUILDERFORCE_API_KEY?.trim()??readSharedEnvVar(`BUILDERFORCE_API_KEY`)?.trim())){await prompter.note([`BuilderForceAgentsLLM requires Builderforce registration.`,`Complete login/registration now so /model builderforcellm/auto works immediately.`,`You can skip this and connect later — use /setup or: builderforce init --reconnect`].join(`
|
|
6
|
-
`),`BuilderForceAgentsLLM`);let{promptBuilderforceOnboarding}=await import(`./builderforce-onboarding-
|
|
7
|
-
`),`Skipped`)}await warnIfModelConfigLooksOff(nextConfig,prompter)}let alreadyHasLocalBrain=nextConfig.models?.providers?.[`builderforcellm-local`]?.api===`transformers`;if(!opts.skipProviders&&(configHandlingAction!==`keep`||!alreadyHasLocalBrain))if(await prompter.select({message:`Enable local brain (amygdala + hippocampus)?`,options:[{value:`smart`,label:`Enable dual local brain`,hint:`Downloads amygdala (SmolLM2) + hippocampus (Qwen3-0.6B). ~3.5 GB disk.`},{value:`skip`,label:`Skip — use my cortex (configured LLM) only`,hint:`No extra download. Uses whatever model you configured above.`}],initialValue:`skip`})===`smart`){nextConfig={...nextConfig,localBrain:{enabled:!0}};let{downloadAndWireLocalBrain}=await import(`./auth-choice.apply.transformers-CXywS3GZ.js`);nextConfig={...(await downloadAndWireLocalBrain({config:nextConfig,prompter})).config}}else nextConfig={...nextConfig,localBrain:{enabled:!1}};let settings;if(keepExistingValues&&quickstartGateway.hasExisting)settings={port:quickstartGateway.port,bind:quickstartGateway.bind,customBindHost:quickstartGateway.bind===`custom`?quickstartGateway.customBindHost:void 0,authMode:quickstartGateway.authMode,gatewayToken:quickstartGateway.authMode===`token`?quickstartGateway.token:void 0,tailscaleMode:quickstartGateway.tailscaleMode,tailscaleResetOnExit:quickstartGateway.tailscaleResetOnExit},await prompter.note(`Keeping existing gateway settings.`,`Gateway`);else{let{configureGatewayForOnboarding}=await import(`./onboarding.gateway-config-Cd7_bXVs.js`),gateway=await configureGatewayForOnboarding({flow,baseConfig,nextConfig,localPort,quickstartGateway,prompter,runtime});nextConfig=gateway.nextConfig,settings=gateway.settings}let skipChannelsForKeep=keepExistingValues&&hasConfiguredChannels(nextConfig);if(opts.skipChannels??opts.skipProviders??skipChannelsForKeep)await prompter.note(`Skipping channel setup.`,`Channels`);else{let{listChannelPlugins}=await import(`./plugins-BIG8NDB9.js`),{setupChannels}=await import(`./onboard-channels-Db0P4iWl.js`),quickstartAllowFromChannels=flow===`quickstart`?listChannelPlugins().filter(plugin=>plugin.meta.quickstartAllowFrom).map(plugin=>plugin.id):[];nextConfig=await setupChannels(nextConfig,runtime,prompter,{allowSignalInstall:!0,forceAllowFromChannels:quickstartAllowFromChannels,skipDmPolicyPrompt:flow===`quickstart`,skipConfirm:flow===`quickstart`,quickstartDefaults:flow===`quickstart`})}await writeConfigFile(nextConfig);let{logConfigUpdated}=await import(`./logging-DSIJukIo.js`);logConfigUpdated(runtime),await onboardHelpers.ensureWorkspaceAndSessions(workspaceDir,runtime,{skipBootstrap:!!nextConfig.agents?.defaults?.skipBootstrap});let{isBuilderForceAgentsProject,initializeBuilderForceAgentsProject}=await import(`./project-context-DXVJ6Qot.js`);if(await isBuilderForceAgentsProject(workspaceDir)||(await initializeBuilderForceAgentsProject(workspaceDir),runtime.log(`Initialised .builderforce/ project directory`)),opts.skipSkills)await prompter.note(`Skipping skills setup.`,`Skills`);else{let{setupSkills}=await import(`./onboard-skills-ILHIeg1R.js`);nextConfig=await setupSkills(nextConfig,workspaceDir,runtime,prompter)}let{setupInternalHooks}=await import(`./onboard-hooks-Cenav0eW.js`);nextConfig=await setupInternalHooks(nextConfig,runtime,prompter),nextConfig=onboardHelpers.applyWizardMetadata(nextConfig,{command:`onboard`,mode}),await writeConfigFile(nextConfig);let{finalizeOnboardingWizard}=await import(`./onboarding.finalize-
|
|
6
|
+
`),`BuilderForceAgentsLLM`);let{promptBuilderforceOnboarding}=await import(`./builderforce-onboarding-D5A-wEs-.js`);await promptBuilderforceOnboarding({projectRoot:workspaceDir,defaultInstanceName:path.basename(workspaceDir)||`builderforce`,forcePrompt:!0}),(process.env.BUILDERFORCE_API_KEY?.trim()??readSharedEnvVar(`BUILDERFORCE_API_KEY`)?.trim())||await prompter.note([`BuilderForceAgentsLLM won't work until you connect to Builderforce.`,`You can still use BuilderForceAgents — switch models with /model or connect later.`].join(`
|
|
7
|
+
`),`Skipped`)}await warnIfModelConfigLooksOff(nextConfig,prompter)}let alreadyHasLocalBrain=nextConfig.models?.providers?.[`builderforcellm-local`]?.api===`transformers`;if(!opts.skipProviders&&(configHandlingAction!==`keep`||!alreadyHasLocalBrain))if(await prompter.select({message:`Enable local brain (amygdala + hippocampus)?`,options:[{value:`smart`,label:`Enable dual local brain`,hint:`Downloads amygdala (SmolLM2) + hippocampus (Qwen3-0.6B). ~3.5 GB disk.`},{value:`skip`,label:`Skip — use my cortex (configured LLM) only`,hint:`No extra download. Uses whatever model you configured above.`}],initialValue:`skip`})===`smart`){nextConfig={...nextConfig,localBrain:{enabled:!0}};let{downloadAndWireLocalBrain}=await import(`./auth-choice.apply.transformers-CXywS3GZ.js`);nextConfig={...(await downloadAndWireLocalBrain({config:nextConfig,prompter})).config}}else nextConfig={...nextConfig,localBrain:{enabled:!1}};let settings;if(keepExistingValues&&quickstartGateway.hasExisting)settings={port:quickstartGateway.port,bind:quickstartGateway.bind,customBindHost:quickstartGateway.bind===`custom`?quickstartGateway.customBindHost:void 0,authMode:quickstartGateway.authMode,gatewayToken:quickstartGateway.authMode===`token`?quickstartGateway.token:void 0,tailscaleMode:quickstartGateway.tailscaleMode,tailscaleResetOnExit:quickstartGateway.tailscaleResetOnExit},await prompter.note(`Keeping existing gateway settings.`,`Gateway`);else{let{configureGatewayForOnboarding}=await import(`./onboarding.gateway-config-Cd7_bXVs.js`),gateway=await configureGatewayForOnboarding({flow,baseConfig,nextConfig,localPort,quickstartGateway,prompter,runtime});nextConfig=gateway.nextConfig,settings=gateway.settings}let skipChannelsForKeep=keepExistingValues&&hasConfiguredChannels(nextConfig);if(opts.skipChannels??opts.skipProviders??skipChannelsForKeep)await prompter.note(`Skipping channel setup.`,`Channels`);else{let{listChannelPlugins}=await import(`./plugins-BIG8NDB9.js`),{setupChannels}=await import(`./onboard-channels-Db0P4iWl.js`),quickstartAllowFromChannels=flow===`quickstart`?listChannelPlugins().filter(plugin=>plugin.meta.quickstartAllowFrom).map(plugin=>plugin.id):[];nextConfig=await setupChannels(nextConfig,runtime,prompter,{allowSignalInstall:!0,forceAllowFromChannels:quickstartAllowFromChannels,skipDmPolicyPrompt:flow===`quickstart`,skipConfirm:flow===`quickstart`,quickstartDefaults:flow===`quickstart`})}await writeConfigFile(nextConfig);let{logConfigUpdated}=await import(`./logging-DSIJukIo.js`);logConfigUpdated(runtime),await onboardHelpers.ensureWorkspaceAndSessions(workspaceDir,runtime,{skipBootstrap:!!nextConfig.agents?.defaults?.skipBootstrap});let{isBuilderForceAgentsProject,initializeBuilderForceAgentsProject}=await import(`./project-context-DXVJ6Qot.js`);if(await isBuilderForceAgentsProject(workspaceDir)||(await initializeBuilderForceAgentsProject(workspaceDir),runtime.log(`Initialised .builderforce/ project directory`)),opts.skipSkills)await prompter.note(`Skipping skills setup.`,`Skills`);else{let{setupSkills}=await import(`./onboard-skills-ILHIeg1R.js`);nextConfig=await setupSkills(nextConfig,workspaceDir,runtime,prompter)}let{setupInternalHooks}=await import(`./onboard-hooks-Cenav0eW.js`);nextConfig=await setupInternalHooks(nextConfig,runtime,prompter),nextConfig=onboardHelpers.applyWizardMetadata(nextConfig,{command:`onboard`,mode}),await writeConfigFile(nextConfig);let{finalizeOnboardingWizard}=await import(`./onboarding.finalize-D3mTpOdc.js`),{launchedTui}=await finalizeOnboardingWizard({flow,opts,baseConfig,nextConfig,workspaceDir,settings,prompter,runtime})}export{runOnboardingWizard as t};
|
|
@@ -3,5 +3,5 @@ import{n as DEFAULT_GATEWAY_PORT,u as resolveGatewayPort}from"./paths-5FcIFMsj.j
|
|
|
3
3
|
`),`Config issues`),await prompter.outro(`Config invalid. Run \`${formatCliCommand(`builderforce doctor`)}\` to repair it, then re-run onboarding.`),runtime.exit(1);return}let quickstartHint=`Configure details later via ${formatCliCommand(`builderforce configure`)}.`,explicitFlowRaw=opts.flow?.trim(),normalizedExplicitFlow=explicitFlowRaw===`manual`?`advanced`:explicitFlowRaw;if(normalizedExplicitFlow&&normalizedExplicitFlow!==`quickstart`&&normalizedExplicitFlow!==`advanced`){runtime.error(`Invalid --flow (use quickstart, manual, or advanced).`),runtime.exit(1);return}let flow=(normalizedExplicitFlow===`quickstart`||normalizedExplicitFlow===`advanced`?normalizedExplicitFlow:void 0)??await prompter.select({message:`Onboarding mode`,options:[{value:`quickstart`,label:`QuickStart`,hint:quickstartHint},{value:`advanced`,label:`Manual`,hint:`Configure port, network, Tailscale, and auth options.`}],initialValue:`quickstart`});if(opts.mode===`remote`&&flow===`quickstart`&&(await prompter.note(`QuickStart only supports local gateways. Switching to Manual mode.`,`QuickStart`),flow=`advanced`),snapshot.exists){await prompter.note(onboardHelpers.summarizeExistingConfig(baseConfig),`Existing config detected`);let action=await prompter.select({message:`Config handling
|
|
4
4
|
(↑/↓ to select, Enter to confirm)`,options:[{value:`keep`,label:`Use existing values`},{value:`modify`,label:`Update values`},{value:`reset`,label:`Reset`}],initialValue:`keep`});if(configHandlingAction=action,action===`reset`){let workspaceDefault=baseConfig.agents?.defaults?.workspace??onboardHelpers.DEFAULT_WORKSPACE,resetScope=await prompter.select({message:`Reset scope`,options:[{value:`config`,label:`Config only`},{value:`config+creds+sessions`,label:`Config + creds + sessions`},{value:`full`,label:`Full reset (config + creds + sessions + workspace)`}]});await onboardHelpers.handleReset(resetScope,resolveUserPath(workspaceDefault),runtime),baseConfig={}}}let keepExistingValues=configHandlingAction===`keep`,quickstartGateway=(()=>{let hasExisting=typeof baseConfig.gateway?.port==`number`||baseConfig.gateway?.bind!==void 0||baseConfig.gateway?.auth?.mode!==void 0||baseConfig.gateway?.auth?.token!==void 0||baseConfig.gateway?.auth?.password!==void 0||baseConfig.gateway?.customBindHost!==void 0||baseConfig.gateway?.tailscale?.mode!==void 0,bindRaw=baseConfig.gateway?.bind,bind=bindRaw===`loopback`||bindRaw===`lan`||bindRaw===`auto`||bindRaw===`custom`||bindRaw===`tailnet`?bindRaw:`loopback`,authMode=`token`;baseConfig.gateway?.auth?.mode===`token`||baseConfig.gateway?.auth?.mode===`password`?authMode=baseConfig.gateway.auth.mode:baseConfig.gateway?.auth?.token?authMode=`token`:baseConfig.gateway?.auth?.password&&(authMode=`password`);let tailscaleRaw=baseConfig.gateway?.tailscale?.mode,tailscaleMode=tailscaleRaw===`off`||tailscaleRaw===`serve`||tailscaleRaw===`funnel`?tailscaleRaw:`off`;return{hasExisting,port:resolveGatewayPort(baseConfig),bind,authMode,tailscaleMode,token:baseConfig.gateway?.auth?.token,password:baseConfig.gateway?.auth?.password,customBindHost:baseConfig.gateway?.customBindHost,tailscaleResetOnExit:baseConfig.gateway?.tailscale?.resetOnExit??!1}})();if(flow===`quickstart`){let formatBind=value=>value===`loopback`?`Loopback (127.0.0.1)`:value===`lan`?`LAN`:value===`custom`?`Custom IP`:value===`tailnet`?`Tailnet (Tailscale IP)`:`Auto`,formatAuth=value=>value===`token`?`Token (default)`:`Password`,formatTailscale=value=>value===`off`?`Off`:value===`serve`?`Serve`:`Funnel`,quickstartLines=quickstartGateway.hasExisting?[`Keeping your current gateway settings:`,`Gateway port: ${quickstartGateway.port}`,`Gateway bind: ${formatBind(quickstartGateway.bind)}`,...quickstartGateway.bind===`custom`&&quickstartGateway.customBindHost?[`Gateway custom IP: ${quickstartGateway.customBindHost}`]:[],`Gateway auth: ${formatAuth(quickstartGateway.authMode)}`,`Tailscale exposure: ${formatTailscale(quickstartGateway.tailscaleMode)}`,`Direct to chat channels.`]:[`Gateway port: ${DEFAULT_GATEWAY_PORT}`,`Gateway bind: Loopback (127.0.0.1)`,`Gateway auth: Token (default)`,`Tailscale exposure: Off`,`Direct to chat channels.`];await prompter.note(quickstartLines.join(`
|
|
5
5
|
`),`QuickStart`)}let localPort=resolveGatewayPort(baseConfig),localUrl=`ws://127.0.0.1:${localPort}`,localProbe=await onboardHelpers.probeGatewayReachable({url:localUrl,token:baseConfig.gateway?.auth?.token??process.env.BUILDERFORCE_AGENTS_GATEWAY_TOKEN,password:baseConfig.gateway?.auth?.password??process.env.BUILDERFORCE_AGENTS_GATEWAY_PASSWORD}),remoteUrl=baseConfig.gateway?.remote?.url?.trim()??``,remoteProbe=remoteUrl?await onboardHelpers.probeGatewayReachable({url:remoteUrl,token:baseConfig.gateway?.remote?.token}):null,mode=opts.mode??(flow===`quickstart`?`local`:await prompter.select({message:`What do you want to set up?`,options:[{value:`local`,label:`Local gateway (this machine)`,hint:localProbe.ok?`Gateway reachable (${localUrl})`:`No gateway detected (${localUrl})`},{value:`remote`,label:`Remote gateway (info-only)`,hint:remoteUrl?remoteProbe?.ok?`Gateway reachable (${remoteUrl})`:`Configured but unreachable (${remoteUrl})`:`No remote URL configured yet`}]}));if(mode===`remote`){let{promptRemoteGatewayConfig}=await import(`./onboard-remote-DcuX8b2g.js`),{logConfigUpdated}=await import(`./logging-DuPWVnGa.js`),nextConfig=await promptRemoteGatewayConfig(baseConfig,prompter);nextConfig=onboardHelpers.applyWizardMetadata(nextConfig,{command:`onboard`,mode}),await writeConfigFile(nextConfig),logConfigUpdated(runtime),await prompter.outro(`Remote gateway configured.`);return}let existingWorkspace=baseConfig.agents?.defaults?.workspace??onboardHelpers.DEFAULT_WORKSPACE,workspaceDir=resolveUserPath((opts.workspace??(flow===`quickstart`||keepExistingValues?existingWorkspace:await prompter.text({message:`Workspace directory`,initialValue:existingWorkspace}))).trim()||onboardHelpers.DEFAULT_WORKSPACE),{applyOnboardingLocalWorkspaceConfig}=await import(`./onboard-config-CZqislkG.js`),nextConfig=applyOnboardingLocalWorkspaceConfig(baseConfig,workspaceDir),{promptAuthChoiceGrouped}=await import(`./auth-choice-prompt-aEk7uMxo.js`),{promptCustomApiConfig}=await import(`./onboard-custom-VpW3UC8u.js`),{applyAuthChoice,resolvePreferredProviderForAuthChoice,warnIfModelConfigLooksOff}=await import(`./auth-choice-Btd2Rxxd.js`),{applyPrimaryModel,promptDefaultModel}=await import(`./model-picker-DO1HtEEm.js`);if(keepExistingValues&&hasConfiguredModelOrAuth(nextConfig))await prompter.note(`Keeping existing model/auth configuration.`,`Model/auth provider`);else{let authStore=await ensureAuthProfileStore(void 0,{allowKeychainPrompt:!1}),authChoiceFromPrompt=opts.authChoice===void 0,authChoice=opts.authChoice??await promptAuthChoiceGrouped({prompter,store:authStore,includeSkip:!0});if(nextConfig=authChoice===`custom-api-key`?(await promptCustomApiConfig({prompter,runtime,config:nextConfig})).config:(await applyAuthChoice({authChoice,config:nextConfig,prompter,runtime,setDefaultModel:!0,opts:{tokenProvider:opts.tokenProvider,token:opts.authChoice===`apiKey`&&opts.token?opts.token:void 0}})).config,authChoiceFromPrompt&&authChoice!==`custom-api-key`&&authChoice!==`local`&&authChoice!==`builderforcellm`){let modelSelection=await promptDefaultModel({config:nextConfig,prompter,allowKeep:!0,ignoreAllowlist:!0,includeVllm:!0,preferredProvider:resolvePreferredProviderForAuthChoice(authChoice)});modelSelection.config&&(nextConfig=modelSelection.config),modelSelection.model&&(nextConfig=applyPrimaryModel(nextConfig,modelSelection.model))}let primaryModel=typeof nextConfig.agents?.defaults?.model?.primary==`string`?nextConfig.agents.defaults.model.primary.trim().toLowerCase():``;if((primaryModel===`builderforcellm`||primaryModel.startsWith(`builderforcellm/`))&&!(process.env.BUILDERFORCE_API_KEY?.trim()??readSharedEnvVar(`BUILDERFORCE_API_KEY`)?.trim())){await prompter.note([`BuilderForceAgentsLLM requires Builderforce registration.`,`Complete login/registration now so /model builderforcellm/auto works immediately.`,`You can skip this and connect later — use /setup or: builderforce init --reconnect`].join(`
|
|
6
|
-
`),`BuilderForceAgentsLLM`);let{promptBuilderforceOnboarding}=await import(`./builderforce-onboarding-
|
|
7
|
-
`),`Skipped`)}await warnIfModelConfigLooksOff(nextConfig,prompter)}let alreadyHasLocalBrain=nextConfig.models?.providers?.[`builderforcellm-local`]?.api===`transformers`;if(!opts.skipProviders&&(configHandlingAction!==`keep`||!alreadyHasLocalBrain))if(await prompter.select({message:`Enable local brain (amygdala + hippocampus)?`,options:[{value:`smart`,label:`Enable dual local brain`,hint:`Downloads amygdala (SmolLM2) + hippocampus (Qwen3-0.6B). ~3.5 GB disk.`},{value:`skip`,label:`Skip — use my cortex (configured LLM) only`,hint:`No extra download. Uses whatever model you configured above.`}],initialValue:`skip`})===`smart`){nextConfig={...nextConfig,localBrain:{enabled:!0}};let{downloadAndWireLocalBrain}=await import(`./auth-choice.apply.transformers-D5OrjEHo.js`);nextConfig={...(await downloadAndWireLocalBrain({config:nextConfig,prompter})).config}}else nextConfig={...nextConfig,localBrain:{enabled:!1}};let settings;if(keepExistingValues&&quickstartGateway.hasExisting)settings={port:quickstartGateway.port,bind:quickstartGateway.bind,customBindHost:quickstartGateway.bind===`custom`?quickstartGateway.customBindHost:void 0,authMode:quickstartGateway.authMode,gatewayToken:quickstartGateway.authMode===`token`?quickstartGateway.token:void 0,tailscaleMode:quickstartGateway.tailscaleMode,tailscaleResetOnExit:quickstartGateway.tailscaleResetOnExit},await prompter.note(`Keeping existing gateway settings.`,`Gateway`);else{let{configureGatewayForOnboarding}=await import(`./onboarding.gateway-config-Bd8HJkso.js`),gateway=await configureGatewayForOnboarding({flow,baseConfig,nextConfig,localPort,quickstartGateway,prompter,runtime});nextConfig=gateway.nextConfig,settings=gateway.settings}let skipChannelsForKeep=keepExistingValues&&hasConfiguredChannels(nextConfig);if(opts.skipChannels??opts.skipProviders??skipChannelsForKeep)await prompter.note(`Skipping channel setup.`,`Channels`);else{let{listChannelPlugins}=await import(`./plugins-iAq-Gr8l.js`),{setupChannels}=await import(`./onboard-channels-CmqKsAoW.js`),quickstartAllowFromChannels=flow===`quickstart`?listChannelPlugins().filter(plugin=>plugin.meta.quickstartAllowFrom).map(plugin=>plugin.id):[];nextConfig=await setupChannels(nextConfig,runtime,prompter,{allowSignalInstall:!0,forceAllowFromChannels:quickstartAllowFromChannels,skipDmPolicyPrompt:flow===`quickstart`,skipConfirm:flow===`quickstart`,quickstartDefaults:flow===`quickstart`})}await writeConfigFile(nextConfig);let{logConfigUpdated}=await import(`./logging-DuPWVnGa.js`);logConfigUpdated(runtime),await onboardHelpers.ensureWorkspaceAndSessions(workspaceDir,runtime,{skipBootstrap:!!nextConfig.agents?.defaults?.skipBootstrap});let{isBuilderForceAgentsProject,initializeBuilderForceAgentsProject}=await import(`./project-context-B0-sfVBd.js`);if(await isBuilderForceAgentsProject(workspaceDir)||(await initializeBuilderForceAgentsProject(workspaceDir),runtime.log(`Initialised .builderforce/ project directory`)),opts.skipSkills)await prompter.note(`Skipping skills setup.`,`Skills`);else{let{setupSkills}=await import(`./onboard-skills-DIhjDMom.js`);nextConfig=await setupSkills(nextConfig,workspaceDir,runtime,prompter)}let{setupInternalHooks}=await import(`./onboard-hooks-Ce20rwpW.js`);nextConfig=await setupInternalHooks(nextConfig,runtime,prompter),nextConfig=onboardHelpers.applyWizardMetadata(nextConfig,{command:`onboard`,mode}),await writeConfigFile(nextConfig);let{finalizeOnboardingWizard}=await import(`./onboarding.finalize-
|
|
6
|
+
`),`BuilderForceAgentsLLM`);let{promptBuilderforceOnboarding}=await import(`./builderforce-onboarding-C89jVb-9.js`);await promptBuilderforceOnboarding({projectRoot:workspaceDir,defaultInstanceName:path.basename(workspaceDir)||`builderforce`,forcePrompt:!0}),(process.env.BUILDERFORCE_API_KEY?.trim()??readSharedEnvVar(`BUILDERFORCE_API_KEY`)?.trim())||await prompter.note([`BuilderForceAgentsLLM won't work until you connect to Builderforce.`,`You can still use BuilderForceAgents — switch models with /model or connect later.`].join(`
|
|
7
|
+
`),`Skipped`)}await warnIfModelConfigLooksOff(nextConfig,prompter)}let alreadyHasLocalBrain=nextConfig.models?.providers?.[`builderforcellm-local`]?.api===`transformers`;if(!opts.skipProviders&&(configHandlingAction!==`keep`||!alreadyHasLocalBrain))if(await prompter.select({message:`Enable local brain (amygdala + hippocampus)?`,options:[{value:`smart`,label:`Enable dual local brain`,hint:`Downloads amygdala (SmolLM2) + hippocampus (Qwen3-0.6B). ~3.5 GB disk.`},{value:`skip`,label:`Skip — use my cortex (configured LLM) only`,hint:`No extra download. Uses whatever model you configured above.`}],initialValue:`skip`})===`smart`){nextConfig={...nextConfig,localBrain:{enabled:!0}};let{downloadAndWireLocalBrain}=await import(`./auth-choice.apply.transformers-D5OrjEHo.js`);nextConfig={...(await downloadAndWireLocalBrain({config:nextConfig,prompter})).config}}else nextConfig={...nextConfig,localBrain:{enabled:!1}};let settings;if(keepExistingValues&&quickstartGateway.hasExisting)settings={port:quickstartGateway.port,bind:quickstartGateway.bind,customBindHost:quickstartGateway.bind===`custom`?quickstartGateway.customBindHost:void 0,authMode:quickstartGateway.authMode,gatewayToken:quickstartGateway.authMode===`token`?quickstartGateway.token:void 0,tailscaleMode:quickstartGateway.tailscaleMode,tailscaleResetOnExit:quickstartGateway.tailscaleResetOnExit},await prompter.note(`Keeping existing gateway settings.`,`Gateway`);else{let{configureGatewayForOnboarding}=await import(`./onboarding.gateway-config-Bd8HJkso.js`),gateway=await configureGatewayForOnboarding({flow,baseConfig,nextConfig,localPort,quickstartGateway,prompter,runtime});nextConfig=gateway.nextConfig,settings=gateway.settings}let skipChannelsForKeep=keepExistingValues&&hasConfiguredChannels(nextConfig);if(opts.skipChannels??opts.skipProviders??skipChannelsForKeep)await prompter.note(`Skipping channel setup.`,`Channels`);else{let{listChannelPlugins}=await import(`./plugins-iAq-Gr8l.js`),{setupChannels}=await import(`./onboard-channels-CmqKsAoW.js`),quickstartAllowFromChannels=flow===`quickstart`?listChannelPlugins().filter(plugin=>plugin.meta.quickstartAllowFrom).map(plugin=>plugin.id):[];nextConfig=await setupChannels(nextConfig,runtime,prompter,{allowSignalInstall:!0,forceAllowFromChannels:quickstartAllowFromChannels,skipDmPolicyPrompt:flow===`quickstart`,skipConfirm:flow===`quickstart`,quickstartDefaults:flow===`quickstart`})}await writeConfigFile(nextConfig);let{logConfigUpdated}=await import(`./logging-DuPWVnGa.js`);logConfigUpdated(runtime),await onboardHelpers.ensureWorkspaceAndSessions(workspaceDir,runtime,{skipBootstrap:!!nextConfig.agents?.defaults?.skipBootstrap});let{isBuilderForceAgentsProject,initializeBuilderForceAgentsProject}=await import(`./project-context-B0-sfVBd.js`);if(await isBuilderForceAgentsProject(workspaceDir)||(await initializeBuilderForceAgentsProject(workspaceDir),runtime.log(`Initialised .builderforce/ project directory`)),opts.skipSkills)await prompter.note(`Skipping skills setup.`,`Skills`);else{let{setupSkills}=await import(`./onboard-skills-DIhjDMom.js`);nextConfig=await setupSkills(nextConfig,workspaceDir,runtime,prompter)}let{setupInternalHooks}=await import(`./onboard-hooks-Ce20rwpW.js`);nextConfig=await setupInternalHooks(nextConfig,runtime,prompter),nextConfig=onboardHelpers.applyWizardMetadata(nextConfig,{command:`onboard`,mode}),await writeConfigFile(nextConfig);let{finalizeOnboardingWizard}=await import(`./onboarding.finalize-CcuO4Yxw.js`),{launchedTui}=await finalizeOnboardingWizard({flow,opts,baseConfig,nextConfig,workspaceDir,settings,prompter,runtime})}export{runOnboardingWizard as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"./paths-5FcIFMsj.js";import{G as getResolvedLoggerSettings,b as resolveUserPath,g as pathExists}from"./utils-DbaBVFaK.js";import"./embedded-helpers-CEsr3aQ0.js";import"./reply-Cd3vVnD7.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import{t as restoreTerminalState}from"./restore-gPan2ZAn.js";import{i as logWarn}from"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import{A as resolveWorkspaceFilePath,h as DEFAULT_BOOTSTRAP_FILENAME}from"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-9bRFKBI_.js";import{r as resolveCliName,t as formatCliCommand}from"./command-format-D806O2pt.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-3R_ZyUxB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-_1Ca6jGb.js";import"./runner-SxCr9kXD.js";import"./model-catalog-C6UrZ0uG.js";import"./sandbox-BZibn6PX.js";import"./chrome-a3X9_-nf.js";import"./tailscale-DLkpGquM.js";import"./auth-lebUHrkd.js";import"./server-context-DJZT7Upf.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./routes-BzfLvF8W.js";import"./redact-BHdfp2MZ.js";import"./errors-B1MIg3g-.js";import"./paths-cR8ct-Y3.js";import"./ssrf-p9k-iapc.js";import"./image-ops-C8IUQKjn.js";import"./store-CmHBQ-yX.js";import"./ports-DgmEDNOm.js";import"./trash-DD2Hc5oq.js";import"./sessions-CdanN_ZI.js";import"./message-channel-D_jXxXQj.js";import"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./accounts-rmXEiebi.js";import"./accounts-BLueHgKj.js";import"./bindings-DR59065T.js";import"./send-DerUBvXW.js";import"./send-DyF1Xy9K.js";import"./paths-DJ6rztqJ.js";import"./tool-images-B7b_OiMz.js";import"./tool-display-ByOZtWvA.js";import"./fetch-guard-8mwt3-hm.js";import"./api-key-rotation-CHBjUwUJ.js";import"./fetch-BuOLY9KP.js";import"./sqlite-C39E12XS.js";import"./tokens-CCU3zO-D.js";import"./project-context-store-wcq7lXuI.js";import"./with-timeout-Bwq-GyUQ.js";import"./deliver-BpLm3ktn.js";import"./send-CBBziNqM.js";import"./workspace-D4LK4thI.js";import"./reply-prefix-zIMgi6K6.js";import"./memory-cli-DRz4wtHk.js";import"./manager-DwywI_5-.js";import"./retry-DlVhg5qu.js";import"./client-xfoidwPI.js";import"./call-BbRf8gFM.js";import"./common-BTbIhLyt.js";import"./chunk-FCBlVOyo.js";import"./markdown-tables-P6uoUSFa.js";import"./ir-5BNoIXZm.js";import"./render-D1dVTEB1.js";import"./builderforcellm-syscheck-DrFJ638L.js";import"./send-4d9NswaD.js";import"./outbound-attachment-C7wByQO5.js";import"./fetch-DnVtDecb.js";import"./delivery-queue-CXKynF1P.js";import"./channel-activity-CCNDbdD3.js";import"./tables-ERcoWFDp.js";import"./pairing-store-CbvMJhD3.js";import"./links-BgWWaaOT.js";import"./cli-utils-LBYKdNFb.js";import"./help-format-Qfk2vDNX.js";import"./progress-BfOtdN6b.js";import"./resolve-route-D49haUnv.js";import"./replies-Bd2RPZwQ.js";import"./refresh-TiC_kLgE.js";import"./coding-tools.policy-6qh9acJy.js";import"./send-BJDzwYJN.js";import{b as waitForGatewayReachable,d as openUrl,g as resolveControlUiLinks,i as detectBrowserOpenSupport,o as formatControlUiSshHint,p as probeGatewayReachable}from"./onboard-helpers-Cf5dNq7-.js";import"./prompt-style-BpVK43GK.js";import"./pairing-labels-BW5jQZlr.js";import"./session-cost-usage-BjH7mxVj.js";import"./usage-format-DGf8ZWPH.js";import"./provider-usage-BdrU4cIE.js";import"./active-listener-Dcg19lJG.js";import"./exec-approvals-BpVPDVtV.js";import"./nodes-screen-C3TDIi8d.js";import"./project-context-CJj0Inz-.js";import"./control-service-BbsswoMy.js";import"./stagger-8EkqkqJv.js";import"./channel-selection-DyAvzlY8.js";import"./mamba-state-engine-CoGqoBTH.js";import"./transformers-stream-D7nRu4Qu.js";import"./runtime-guard-DhksRHci.js";import"./program-context-BCwL3wlM.js";import"./note-B6NtFdXt.js";import"./helpers-DTDCy17p.js";import{n as installCompletion}from"./completion-cli-B2qcVd6q.js";import{a as gatewayInstallErrorHint,i as buildGatewayInstallPlan,n as GATEWAY_DAEMON_RUNTIME_OPTIONS,t as DEFAULT_GATEWAY_DAEMON_RUNTIME}from"./daemon-runtime-CtOr1ncS.js";import{r as isSystemdUserServiceAvailable}from"./systemd-BG3_QT6W.js";import{t as resolveGatewayService}from"./service-D-NLDyK3.js";import{r as healthCommand}from"./health-yS3NRKvY.js";import{t as ensureControlUiAssetsBuilt}from"./control-ui-assets-CWgH1Tda.js";import"./builderforce-directory-sync-DAH62b3b.js";import"./shared-BPN3qd7G.js";import"./model-picker-BUePD7Zg.js";import"./auth-choice.apply.transformers-CIn3fs7K.js";import{t as formatHealthCheckFailure}from"./health-format-iE_KYEwP.js";import{r as ensureCompletionCacheExists,t as checkShellCompletionStatus}from"./doctor-completion-DVxbs-74.js";import{t as runTui}from"./tui-DylWbrDx.js";import"./tui-stream-assembler-ign_cPkv.js";import os from"node:os";import path from"node:path";import fs from"node:fs/promises";async function resolveProfileHint(shell){let home=process.env.HOME||os.homedir();return shell===`zsh`?`~/.zshrc`:shell===`bash`?await pathExists(path.join(home,`.bashrc`))?`~/.bashrc`:`~/.bash_profile`:shell===`fish`?`~/.config/fish/config.fish`:`$PROFILE`}function formatReloadHint(shell,profileHint){return shell===`powershell`?`Restart your shell (or reload your PowerShell profile).`:`Restart your shell or run: source ${profileHint}`}async function setupOnboardingShellCompletion(params){let deps={resolveCliName,checkShellCompletionStatus,ensureCompletionCacheExists,installCompletion,...params.deps},cliName=deps.resolveCliName(),completionStatus=await deps.checkShellCompletionStatus(cliName);if(completionStatus.usesSlowPattern){await deps.ensureCompletionCacheExists(cliName)&&await deps.installCompletion(completionStatus.shell,!0,cliName);return}if(completionStatus.profileInstalled&&!completionStatus.cacheExists){await deps.ensureCompletionCacheExists(cliName);return}if(!completionStatus.profileInstalled){if(!(params.flow===`quickstart`||await params.prompter.confirm({message:`Enable ${completionStatus.shell} shell completion for ${cliName}?`,initialValue:!0})))return;if(!await deps.ensureCompletionCacheExists(cliName)){await params.prompter.note(`Failed to generate completion cache. Run \`${cliName} completion --install\` later.`,`Shell completion`);return}await deps.installCompletion(completionStatus.shell,!0,cliName);let profileHint=await resolveProfileHint(completionStatus.shell);await params.prompter.note(`Shell completion installed. ${formatReloadHint(completionStatus.shell,profileHint)}`,`Shell completion`)}}async function finalizeOnboardingWizard(options){let{flow,opts,baseConfig,nextConfig,settings,prompter,runtime}=options,withWizardProgress=async(label,options,work)=>{let progress=prompter.progress(label);try{return await work(progress)}finally{progress.stop(options.doneMessage)}},systemdAvailable=process.platform===`linux`?await isSystemdUserServiceAvailable():!0;if(process.platform===`linux`&&!systemdAvailable&&await prompter.note(`Systemd user services are unavailable. Skipping lingering checks and service install.`,`Systemd`),process.platform===`linux`&&systemdAvailable){let{ensureSystemdUserLingerInteractive}=await import(`./systemd-linger-Defy1T1U.js`);await ensureSystemdUserLingerInteractive({runtime,prompter:{confirm:prompter.confirm,note:prompter.note},reason:`Linux installs use a systemd user service by default. Without lingering, systemd stops the user session on logout/idle and kills the Gateway.`,requireConfirm:!1})}let explicitInstallDaemon=typeof opts.installDaemon==`boolean`?opts.installDaemon:void 0,installDaemon;if(installDaemon=explicitInstallDaemon===void 0?process.platform===`linux`&&!systemdAvailable?!1:flow===`quickstart`?!0:await prompter.confirm({message:`Install Gateway service (recommended)`,initialValue:!0}):explicitInstallDaemon,process.platform===`linux`&&!systemdAvailable&&installDaemon&&(await prompter.note("Systemd user services are unavailable; skipping service install. Use your container supervisor or `docker compose up -d`.",`Gateway service`),installDaemon=!1),installDaemon){let daemonRuntime=flow===`quickstart`?DEFAULT_GATEWAY_DAEMON_RUNTIME:await prompter.select({message:`Gateway service runtime`,options:GATEWAY_DAEMON_RUNTIME_OPTIONS,initialValue:opts.daemonRuntime??DEFAULT_GATEWAY_DAEMON_RUNTIME});flow===`quickstart`&&await prompter.note(`QuickStart uses Node for the Gateway service (stable + supported).`,`Gateway service runtime`);let service=resolveGatewayService(),loaded=await service.isLoaded({env:process.env});if(loaded){let action=await prompter.select({message:`Gateway service already installed`,options:[{value:`restart`,label:`Restart`},{value:`reinstall`,label:`Reinstall`},{value:`skip`,label:`Skip`}]});action===`restart`?await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service restarted.`},async progress=>{progress.update(`Restarting Gateway service…`),await service.restart({env:process.env,stdout:process.stdout})}):action===`reinstall`&&await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service uninstalled.`},async progress=>{progress.update(`Uninstalling Gateway service…`),await service.uninstall({env:process.env,stdout:process.stdout})})}if(!loaded||loaded&&!await service.isLoaded({env:process.env})){let progress=prompter.progress(`Gateway service`),installError=null;try{progress.update(`Preparing Gateway service…`);let{programArguments,workingDirectory,environment}=await buildGatewayInstallPlan({env:process.env,port:settings.port,token:settings.gatewayToken,runtime:daemonRuntime,warn:(message,title)=>prompter.note(message,title),config:nextConfig});progress.update(`Installing Gateway service…`),await service.install({env:process.env,stdout:process.stdout,programArguments,workingDirectory,environment})}catch(err){installError=err instanceof Error?err.message:String(err)}finally{progress.stop(installError?`Gateway service install failed.`:`Gateway service installed.`)}installError&&(await prompter.note(`Gateway service install failed: ${installError}`,`Gateway`),await prompter.note(gatewayInstallErrorHint(),`Gateway`))}}if(!opts.skipHealth){await waitForGatewayReachable({url:resolveControlUiLinks({bind:nextConfig.gateway?.bind??`loopback`,port:settings.port,customBindHost:nextConfig.gateway?.customBindHost,basePath:void 0}).wsUrl,token:settings.gatewayToken,deadlineMs:15e3});try{await healthCommand({json:!1,timeoutMs:1e4},runtime)}catch(err){let msg=formatHealthCheckFailure(err);runtime.error(msg),logWarn(`[onboarding] health check failed: ${String(err)}`);let logFile=getResolvedLoggerSettings().file;await prompter.note([`Logs:`,logFile,`View: ${formatCliCommand(`builderforce logs --follow`)}`,``,`Docs:`,`https://docs.builderforce.ai/gateway/health`,`https://docs.builderforce.ai/gateway/troubleshooting`].join(`
|
|
1
|
+
import"./paths-5FcIFMsj.js";import{G as getResolvedLoggerSettings,b as resolveUserPath,g as pathExists}from"./utils-DbaBVFaK.js";import"./embedded-helpers-CEsr3aQ0.js";import"./reply-Cd3vVnD7.js";import"./session-key-EoB0qaG9.js";import"./builderforce-root-D64_sXEi.js";import"./subsystem-B3TqcCrZ.js";import"./registry-TdK-aV05.js";import{t as restoreTerminalState}from"./restore-gPan2ZAn.js";import{i as logWarn}from"./logger-Bch0bx9c.js";import"./exec-DdcIjeyn.js";import{A as resolveWorkspaceFilePath,h as DEFAULT_BOOTSTRAP_FILENAME}from"./agent-scope-DPtjOxzp.js";import"./src-CA0fU67C.js";import"./model-selection-9bRFKBI_.js";import{r as resolveCliName,t as formatCliCommand}from"./command-format-D806O2pt.js";import"./env-file-D1MDi-AM.js";import"./boolean-Cnh1KNl1.js";import"./env-BIdU5BAp.js";import"./src-DTFqOIQD.js";import"./io-3R_ZyUxB.js";import"./manifest-registry-BJCfNV1a.js";import"./config-_1Ca6jGb.js";import"./runner-SxCr9kXD.js";import"./model-catalog-C6UrZ0uG.js";import"./sandbox-BZibn6PX.js";import"./chrome-a3X9_-nf.js";import"./tailscale-DLkpGquM.js";import"./auth-lebUHrkd.js";import"./server-context-DJZT7Upf.js";import"./frontmatter-3D1EdC1L.js";import"./skills-Ba4ftrB-.js";import"./plugin-skills-B11rggZh.js";import"./routes-BzfLvF8W.js";import"./redact-BHdfp2MZ.js";import"./errors-B1MIg3g-.js";import"./paths-cR8ct-Y3.js";import"./ssrf-p9k-iapc.js";import"./image-ops-C8IUQKjn.js";import"./store-CmHBQ-yX.js";import"./ports-DgmEDNOm.js";import"./trash-DD2Hc5oq.js";import"./sessions-CdanN_ZI.js";import"./message-channel-D_jXxXQj.js";import"./plugins-D5zP6ENo.js";import"./accounts-o35LU_iy.js";import"./accounts-rmXEiebi.js";import"./accounts-BLueHgKj.js";import"./bindings-DR59065T.js";import"./send-DerUBvXW.js";import"./send-DyF1Xy9K.js";import"./paths-DJ6rztqJ.js";import"./tool-images-B7b_OiMz.js";import"./tool-display-ByOZtWvA.js";import"./fetch-guard-8mwt3-hm.js";import"./api-key-rotation-CHBjUwUJ.js";import"./fetch-BuOLY9KP.js";import"./sqlite-C39E12XS.js";import"./tokens-CCU3zO-D.js";import"./project-context-store-wcq7lXuI.js";import"./with-timeout-Bwq-GyUQ.js";import"./deliver-BpLm3ktn.js";import"./send-CBBziNqM.js";import"./workspace-D4LK4thI.js";import"./reply-prefix-zIMgi6K6.js";import"./memory-cli-DRz4wtHk.js";import"./manager-DwywI_5-.js";import"./retry-DlVhg5qu.js";import"./client-xfoidwPI.js";import"./call-BbRf8gFM.js";import"./common-BTbIhLyt.js";import"./chunk-FCBlVOyo.js";import"./markdown-tables-P6uoUSFa.js";import"./ir-5BNoIXZm.js";import"./render-D1dVTEB1.js";import"./builderforcellm-syscheck-DrFJ638L.js";import"./send-4d9NswaD.js";import"./outbound-attachment-C7wByQO5.js";import"./fetch-DnVtDecb.js";import"./delivery-queue-CXKynF1P.js";import"./channel-activity-CCNDbdD3.js";import"./tables-ERcoWFDp.js";import"./pairing-store-CbvMJhD3.js";import"./links-BgWWaaOT.js";import"./cli-utils-LBYKdNFb.js";import"./help-format-Qfk2vDNX.js";import"./progress-BfOtdN6b.js";import"./resolve-route-D49haUnv.js";import"./replies-Bd2RPZwQ.js";import"./refresh-TiC_kLgE.js";import"./coding-tools.policy-6qh9acJy.js";import"./send-BJDzwYJN.js";import{b as waitForGatewayReachable,d as openUrl,g as resolveControlUiLinks,i as detectBrowserOpenSupport,o as formatControlUiSshHint,p as probeGatewayReachable}from"./onboard-helpers-Cf5dNq7-.js";import"./prompt-style-BpVK43GK.js";import"./pairing-labels-BW5jQZlr.js";import"./session-cost-usage-BjH7mxVj.js";import"./usage-format-DGf8ZWPH.js";import"./provider-usage-BdrU4cIE.js";import"./active-listener-Dcg19lJG.js";import"./exec-approvals-BpVPDVtV.js";import"./nodes-screen-C3TDIi8d.js";import"./project-context-CJj0Inz-.js";import"./control-service-BbsswoMy.js";import"./stagger-8EkqkqJv.js";import"./channel-selection-DyAvzlY8.js";import"./mamba-state-engine-CoGqoBTH.js";import"./transformers-stream-D7nRu4Qu.js";import"./runtime-guard-DhksRHci.js";import"./program-context-CpxTJP1m.js";import"./note-B6NtFdXt.js";import"./helpers-DTDCy17p.js";import{n as installCompletion}from"./completion-cli-Ch9ozmkg.js";import{a as gatewayInstallErrorHint,i as buildGatewayInstallPlan,n as GATEWAY_DAEMON_RUNTIME_OPTIONS,t as DEFAULT_GATEWAY_DAEMON_RUNTIME}from"./daemon-runtime-CtOr1ncS.js";import{r as isSystemdUserServiceAvailable}from"./systemd-BG3_QT6W.js";import{t as resolveGatewayService}from"./service-D-NLDyK3.js";import{r as healthCommand}from"./health-yS3NRKvY.js";import{t as ensureControlUiAssetsBuilt}from"./control-ui-assets-CWgH1Tda.js";import"./builderforce-directory-sync-DAH62b3b.js";import"./shared-BPN3qd7G.js";import"./model-picker-BUePD7Zg.js";import"./auth-choice.apply.transformers-CIn3fs7K.js";import{t as formatHealthCheckFailure}from"./health-format-iE_KYEwP.js";import{r as ensureCompletionCacheExists,t as checkShellCompletionStatus}from"./doctor-completion-Ccs-JEvV.js";import{t as runTui}from"./tui-D2sTsa4p.js";import"./tui-stream-assembler-ign_cPkv.js";import os from"node:os";import path from"node:path";import fs from"node:fs/promises";async function resolveProfileHint(shell){let home=process.env.HOME||os.homedir();return shell===`zsh`?`~/.zshrc`:shell===`bash`?await pathExists(path.join(home,`.bashrc`))?`~/.bashrc`:`~/.bash_profile`:shell===`fish`?`~/.config/fish/config.fish`:`$PROFILE`}function formatReloadHint(shell,profileHint){return shell===`powershell`?`Restart your shell (or reload your PowerShell profile).`:`Restart your shell or run: source ${profileHint}`}async function setupOnboardingShellCompletion(params){let deps={resolveCliName,checkShellCompletionStatus,ensureCompletionCacheExists,installCompletion,...params.deps},cliName=deps.resolveCliName(),completionStatus=await deps.checkShellCompletionStatus(cliName);if(completionStatus.usesSlowPattern){await deps.ensureCompletionCacheExists(cliName)&&await deps.installCompletion(completionStatus.shell,!0,cliName);return}if(completionStatus.profileInstalled&&!completionStatus.cacheExists){await deps.ensureCompletionCacheExists(cliName);return}if(!completionStatus.profileInstalled){if(!(params.flow===`quickstart`||await params.prompter.confirm({message:`Enable ${completionStatus.shell} shell completion for ${cliName}?`,initialValue:!0})))return;if(!await deps.ensureCompletionCacheExists(cliName)){await params.prompter.note(`Failed to generate completion cache. Run \`${cliName} completion --install\` later.`,`Shell completion`);return}await deps.installCompletion(completionStatus.shell,!0,cliName);let profileHint=await resolveProfileHint(completionStatus.shell);await params.prompter.note(`Shell completion installed. ${formatReloadHint(completionStatus.shell,profileHint)}`,`Shell completion`)}}async function finalizeOnboardingWizard(options){let{flow,opts,baseConfig,nextConfig,settings,prompter,runtime}=options,withWizardProgress=async(label,options,work)=>{let progress=prompter.progress(label);try{return await work(progress)}finally{progress.stop(options.doneMessage)}},systemdAvailable=process.platform===`linux`?await isSystemdUserServiceAvailable():!0;if(process.platform===`linux`&&!systemdAvailable&&await prompter.note(`Systemd user services are unavailable. Skipping lingering checks and service install.`,`Systemd`),process.platform===`linux`&&systemdAvailable){let{ensureSystemdUserLingerInteractive}=await import(`./systemd-linger-Defy1T1U.js`);await ensureSystemdUserLingerInteractive({runtime,prompter:{confirm:prompter.confirm,note:prompter.note},reason:`Linux installs use a systemd user service by default. Without lingering, systemd stops the user session on logout/idle and kills the Gateway.`,requireConfirm:!1})}let explicitInstallDaemon=typeof opts.installDaemon==`boolean`?opts.installDaemon:void 0,installDaemon;if(installDaemon=explicitInstallDaemon===void 0?process.platform===`linux`&&!systemdAvailable?!1:flow===`quickstart`?!0:await prompter.confirm({message:`Install Gateway service (recommended)`,initialValue:!0}):explicitInstallDaemon,process.platform===`linux`&&!systemdAvailable&&installDaemon&&(await prompter.note("Systemd user services are unavailable; skipping service install. Use your container supervisor or `docker compose up -d`.",`Gateway service`),installDaemon=!1),installDaemon){let daemonRuntime=flow===`quickstart`?DEFAULT_GATEWAY_DAEMON_RUNTIME:await prompter.select({message:`Gateway service runtime`,options:GATEWAY_DAEMON_RUNTIME_OPTIONS,initialValue:opts.daemonRuntime??DEFAULT_GATEWAY_DAEMON_RUNTIME});flow===`quickstart`&&await prompter.note(`QuickStart uses Node for the Gateway service (stable + supported).`,`Gateway service runtime`);let service=resolveGatewayService(),loaded=await service.isLoaded({env:process.env});if(loaded){let action=await prompter.select({message:`Gateway service already installed`,options:[{value:`restart`,label:`Restart`},{value:`reinstall`,label:`Reinstall`},{value:`skip`,label:`Skip`}]});action===`restart`?await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service restarted.`},async progress=>{progress.update(`Restarting Gateway service…`),await service.restart({env:process.env,stdout:process.stdout})}):action===`reinstall`&&await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service uninstalled.`},async progress=>{progress.update(`Uninstalling Gateway service…`),await service.uninstall({env:process.env,stdout:process.stdout})})}if(!loaded||loaded&&!await service.isLoaded({env:process.env})){let progress=prompter.progress(`Gateway service`),installError=null;try{progress.update(`Preparing Gateway service…`);let{programArguments,workingDirectory,environment}=await buildGatewayInstallPlan({env:process.env,port:settings.port,token:settings.gatewayToken,runtime:daemonRuntime,warn:(message,title)=>prompter.note(message,title),config:nextConfig});progress.update(`Installing Gateway service…`),await service.install({env:process.env,stdout:process.stdout,programArguments,workingDirectory,environment})}catch(err){installError=err instanceof Error?err.message:String(err)}finally{progress.stop(installError?`Gateway service install failed.`:`Gateway service installed.`)}installError&&(await prompter.note(`Gateway service install failed: ${installError}`,`Gateway`),await prompter.note(gatewayInstallErrorHint(),`Gateway`))}}if(!opts.skipHealth){await waitForGatewayReachable({url:resolveControlUiLinks({bind:nextConfig.gateway?.bind??`loopback`,port:settings.port,customBindHost:nextConfig.gateway?.customBindHost,basePath:void 0}).wsUrl,token:settings.gatewayToken,deadlineMs:15e3});try{await healthCommand({json:!1,timeoutMs:1e4},runtime)}catch(err){let msg=formatHealthCheckFailure(err);runtime.error(msg),logWarn(`[onboarding] health check failed: ${String(err)}`);let logFile=getResolvedLoggerSettings().file;await prompter.note([`Logs:`,logFile,`View: ${formatCliCommand(`builderforce logs --follow`)}`,``,`Docs:`,`https://docs.builderforce.ai/gateway/health`,`https://docs.builderforce.ai/gateway/troubleshooting`].join(`
|
|
2
2
|
`),`Health check help`)}}let controlUiEnabled=nextConfig.gateway?.controlUi?.enabled??baseConfig.gateway?.controlUi?.enabled??!0;if(!opts.skipUi&&controlUiEnabled){let controlUiAssets=await ensureControlUiAssetsBuilt(runtime);!controlUiAssets.ok&&controlUiAssets.message&&runtime.error(controlUiAssets.message)}await prompter.note([`Add nodes for extra features:`,`- macOS app (system + notifications)`,`- iOS app (camera/canvas)`,`- Android app (camera/canvas)`].join(`
|
|
3
3
|
`),`Optional apps`);let controlUiBasePath=nextConfig.gateway?.controlUi?.basePath??baseConfig.gateway?.controlUi?.basePath,links=resolveControlUiLinks({bind:settings.bind,port:settings.port,customBindHost:settings.customBindHost,basePath:controlUiBasePath}),authedUrl=settings.authMode===`token`&&settings.gatewayToken?`${links.httpUrl}#token=${encodeURIComponent(settings.gatewayToken)}`:links.httpUrl,gatewayProbe=await probeGatewayReachable({url:links.wsUrl,token:settings.authMode===`token`?settings.gatewayToken:void 0,password:settings.authMode===`password`?nextConfig.gateway?.auth?.password:``}),gatewayStatusLine=gatewayProbe.ok?`Gateway: reachable`:`Gateway: not detected${gatewayProbe.detail?` (${gatewayProbe.detail})`:``}`,bootstrapPath=resolveWorkspaceFilePath(resolveUserPath(options.workspaceDir),DEFAULT_BOOTSTRAP_FILENAME),hasBootstrap=await fs.access(bootstrapPath).then(()=>!0).catch(()=>!1);await prompter.note([`Web UI: ${links.httpUrl}`,settings.authMode===`token`&&settings.gatewayToken?`Web UI (with token): ${authedUrl}`:void 0,`Gateway WS: ${links.wsUrl}`,gatewayStatusLine,`Docs: https://docs.builderforce.ai/web/control-ui`].filter(Boolean).join(`
|
|
4
4
|
`),`Control UI`);let controlUiOpened=!1,controlUiOpenHint,hatchChoice=null,launchedTui=!1;!opts.skipUi&&gatewayProbe.ok?(hasBootstrap&&await prompter.note([`This is the defining action that makes your agent you.`,`Please take your time.`,`The more you tell it, the better the experience will be.`,`We will send: "Wake up, my friend!"`].join(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{W as getResolvedLoggerSettings,h as pathExists,y as resolveUserPath}from"./utils-BP60e80M.js";import{t as restoreTerminalState}from"./restore-BdB4wlsZ.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-C1VbcUOm.js";import{r as resolveCliName,t as formatCliCommand}from"./command-format-DTMaGKs7.js";import"./src-DvWaTze9.js";import{i as logWarn}from"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import{A as resolveWorkspaceFilePath,h as DEFAULT_BOOTSTRAP_FILENAME}from"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./model-discovery-C9Xm95uL.js";import"./model-catalog-CiiFJX77.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./refresh-C4vwneXT.js";import"./client-CGgp3zkQ.js";import"./call-DmAU4cRX.js";import"./message-channel-z5YRpR2d.js";import"./subagent-registry-CyGxu3kP.js";import"./sessions-Bl1wwotX.js";import"./project-context-store-CIUcwUP_.js";import"./tokens-CFKkpUIu.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./send-BvroeIQ6.js";import"./send-CceNWtYE.js";import"./with-timeout-T07SJo4N.js";import"./deliver-BuZu68tp.js";import"./accounts-Cx82nj4E.js";import"./send-ByCVQQVz.js";import"./image-ops-CotJhwRR.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./embedded-helpers-DK8_apW0.js";import"./sandbox-z9t_PRf9.js";import"./chrome-BnEbJV3D.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-owOmmyUM.js";import"./routes-lclJHOYY.js";import"./paths-BnOjueoX.js";import"./ssrf-DJXLYZ0d.js";import"./store-DHD2IEgd.js";import"./ports-DTku9NSx.js";import"./trash-C3zmJ_O7.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./tool-images-CCpqFtrL.js";import"./workspace-waBqRxiy.js";import"./reply-prefix-Cg7AqaK0.js";import"./sqlite-CIGM1WKg.js";import"./memory-cli-ivAs7q7v.js";import"./manager-CRba8roB.js";import"./gemini-auth-CkD5jCPh.js";import"./retry-B151Hej5.js";import"./common-BfwMxpLu.js";import"./runner-DwWmciCt.js";import"./tool-display-Cs4hDP1f.js";import"./chunk-Dly7lM4r.js";import"./markdown-tables-B1Rx8hv6.js";import"./fetch-guard-DnXqPKae.js";import"./fetch-Cn_THzz8.js";import"./ir-CSdQJPqu.js";import"./render-DlHYsbvQ.js";import"./builderforcellm-syscheck-CprBhARf.js";import"./session-utils-GMvum00v.js";import"./coding-tools.policy-NEPm7Mz1.js";import"./pairing-store-QDb6lhIU.js";import"./fetch-DnWD6ydH.js";import"./exec-approvals-D7ZPAZpt.js";import"./nodes-screen-D6GHv_S0.js";import"./session-cost-usage-S0nkbPoW.js";import"./usage-format-5sp5AMSu.js";import"./provider-usage-Bn4ZrnU7.js";import"./send-B_1BtyfA.js";import"./outbound-attachment-BaTYE4qp.js";import"./delivery-queue-Cp3t4Upn.js";import"./project-context-D3Mx4maV.js";import"./control-service-CJuuqNOE.js";import"./stagger-CRe77dWL.js";import"./channel-selection-BLwXhb9t.js";import"./send-UFtylOiq.js";import"./resolve-route-DEIW5uKy.js";import"./channel-activity-DX36RadH.js";import"./tables-CojSfTth.js";import"./links-BKzP7VVP.js";import"./cli-utils-C9pW69LF.js";import"./help-format-CfFf-w62.js";import"./progress-Cqb-jAjT.js";import"./replies-DbkT_5BV.js";import{b as waitForGatewayReachable,d as openUrl,g as resolveControlUiLinks,i as detectBrowserOpenSupport,o as formatControlUiSshHint,p as probeGatewayReachable}from"./onboard-helpers-CckrS8_K.js";import"./prompt-style-BMWmaqSC.js";import"./pairing-labels-3j_iRYOO.js";import"./active-listener-Di9e1YAD.js";import"./mamba-state-engine-CV4nDcCk.js";import"./transformers-stream-Buj40qHl.js";import"./note-DgDXuE0F.js";import"./helpers-DPPVplyk.js";import"./register.subclis-Cr9DoYcv.js";import"./command-registry-COUcUWby.js";import"./program-context-Wpc-6CdI.js";import{n as installCompletion}from"./completion-cli-DpFvU4Qn.js";import{a as gatewayInstallErrorHint,i as buildGatewayInstallPlan,n as GATEWAY_DAEMON_RUNTIME_OPTIONS,t as DEFAULT_GATEWAY_DAEMON_RUNTIME}from"./daemon-runtime-B4UjqdyJ.js";import"./runtime-guard-Bi8k55v9.js";import{r as isSystemdUserServiceAvailable}from"./systemd-DdVd5Yet.js";import{t as resolveGatewayService}from"./service-EKJG69M3.js";import{r as healthCommand}from"./health-DVo8a9yg.js";import{t as ensureControlUiAssetsBuilt}from"./control-ui-assets-BxgWcomx.js";import"./builderforce-directory-sync-DQ6u60yX.js";import"./shared-xj-xaKFi.js";import"./model-picker-swoSwauV.js";import"./auth-choice.apply.transformers-1plI0MUg.js";import{t as formatHealthCheckFailure}from"./health-format-D4MaIjaG.js";import{r as ensureCompletionCacheExists,t as checkShellCompletionStatus}from"./doctor-completion-BSotFS6p.js";import{t as runTui}from"./tui-BwWMByVp.js";import"./tui-stream-assembler-q9GANTDr.js";import os from"node:os";import path from"node:path";import fs from"node:fs/promises";async function resolveProfileHint(shell){let home=process.env.HOME||os.homedir();return shell===`zsh`?`~/.zshrc`:shell===`bash`?await pathExists(path.join(home,`.bashrc`))?`~/.bashrc`:`~/.bash_profile`:shell===`fish`?`~/.config/fish/config.fish`:`$PROFILE`}function formatReloadHint(shell,profileHint){return shell===`powershell`?`Restart your shell (or reload your PowerShell profile).`:`Restart your shell or run: source ${profileHint}`}async function setupOnboardingShellCompletion(params){let deps={resolveCliName,checkShellCompletionStatus,ensureCompletionCacheExists,installCompletion,...params.deps},cliName=deps.resolveCliName(),completionStatus=await deps.checkShellCompletionStatus(cliName);if(completionStatus.usesSlowPattern){await deps.ensureCompletionCacheExists(cliName)&&await deps.installCompletion(completionStatus.shell,!0,cliName);return}if(completionStatus.profileInstalled&&!completionStatus.cacheExists){await deps.ensureCompletionCacheExists(cliName);return}if(!completionStatus.profileInstalled){if(!(params.flow===`quickstart`||await params.prompter.confirm({message:`Enable ${completionStatus.shell} shell completion for ${cliName}?`,initialValue:!0})))return;if(!await deps.ensureCompletionCacheExists(cliName)){await params.prompter.note(`Failed to generate completion cache. Run \`${cliName} completion --install\` later.`,`Shell completion`);return}await deps.installCompletion(completionStatus.shell,!0,cliName);let profileHint=await resolveProfileHint(completionStatus.shell);await params.prompter.note(`Shell completion installed. ${formatReloadHint(completionStatus.shell,profileHint)}`,`Shell completion`)}}async function finalizeOnboardingWizard(options){let{flow,opts,baseConfig,nextConfig,settings,prompter,runtime}=options,withWizardProgress=async(label,options,work)=>{let progress=prompter.progress(label);try{return await work(progress)}finally{progress.stop(options.doneMessage)}},systemdAvailable=process.platform===`linux`?await isSystemdUserServiceAvailable():!0;if(process.platform===`linux`&&!systemdAvailable&&await prompter.note(`Systemd user services are unavailable. Skipping lingering checks and service install.`,`Systemd`),process.platform===`linux`&&systemdAvailable){let{ensureSystemdUserLingerInteractive}=await import(`./systemd-linger-Dgxo9kqA.js`);await ensureSystemdUserLingerInteractive({runtime,prompter:{confirm:prompter.confirm,note:prompter.note},reason:`Linux installs use a systemd user service by default. Without lingering, systemd stops the user session on logout/idle and kills the Gateway.`,requireConfirm:!1})}let explicitInstallDaemon=typeof opts.installDaemon==`boolean`?opts.installDaemon:void 0,installDaemon;if(installDaemon=explicitInstallDaemon===void 0?process.platform===`linux`&&!systemdAvailable?!1:flow===`quickstart`?!0:await prompter.confirm({message:`Install Gateway service (recommended)`,initialValue:!0}):explicitInstallDaemon,process.platform===`linux`&&!systemdAvailable&&installDaemon&&(await prompter.note("Systemd user services are unavailable; skipping service install. Use your container supervisor or `docker compose up -d`.",`Gateway service`),installDaemon=!1),installDaemon){let daemonRuntime=flow===`quickstart`?DEFAULT_GATEWAY_DAEMON_RUNTIME:await prompter.select({message:`Gateway service runtime`,options:GATEWAY_DAEMON_RUNTIME_OPTIONS,initialValue:opts.daemonRuntime??DEFAULT_GATEWAY_DAEMON_RUNTIME});flow===`quickstart`&&await prompter.note(`QuickStart uses Node for the Gateway service (stable + supported).`,`Gateway service runtime`);let service=resolveGatewayService(),loaded=await service.isLoaded({env:process.env});if(loaded){let action=await prompter.select({message:`Gateway service already installed`,options:[{value:`restart`,label:`Restart`},{value:`reinstall`,label:`Reinstall`},{value:`skip`,label:`Skip`}]});action===`restart`?await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service restarted.`},async progress=>{progress.update(`Restarting Gateway service…`),await service.restart({env:process.env,stdout:process.stdout})}):action===`reinstall`&&await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service uninstalled.`},async progress=>{progress.update(`Uninstalling Gateway service…`),await service.uninstall({env:process.env,stdout:process.stdout})})}if(!loaded||loaded&&!await service.isLoaded({env:process.env})){let progress=prompter.progress(`Gateway service`),installError=null;try{progress.update(`Preparing Gateway service…`);let{programArguments,workingDirectory,environment}=await buildGatewayInstallPlan({env:process.env,port:settings.port,token:settings.gatewayToken,runtime:daemonRuntime,warn:(message,title)=>prompter.note(message,title),config:nextConfig});progress.update(`Installing Gateway service…`),await service.install({env:process.env,stdout:process.stdout,programArguments,workingDirectory,environment})}catch(err){installError=err instanceof Error?err.message:String(err)}finally{progress.stop(installError?`Gateway service install failed.`:`Gateway service installed.`)}installError&&(await prompter.note(`Gateway service install failed: ${installError}`,`Gateway`),await prompter.note(gatewayInstallErrorHint(),`Gateway`))}}if(!opts.skipHealth){await waitForGatewayReachable({url:resolveControlUiLinks({bind:nextConfig.gateway?.bind??`loopback`,port:settings.port,customBindHost:nextConfig.gateway?.customBindHost,basePath:void 0}).wsUrl,token:settings.gatewayToken,deadlineMs:15e3});try{await healthCommand({json:!1,timeoutMs:1e4},runtime)}catch(err){let msg=formatHealthCheckFailure(err);runtime.error(msg),logWarn(`[onboarding] health check failed: ${String(err)}`);let logFile=getResolvedLoggerSettings().file;await prompter.note([`Logs:`,logFile,`View: ${formatCliCommand(`builderforce logs --follow`)}`,``,`Docs:`,`https://docs.builderforce.ai/gateway/health`,`https://docs.builderforce.ai/gateway/troubleshooting`].join(`
|
|
1
|
+
import"./paths-BHg-VHB4.js";import"./registry-Cv7CoWAs.js";import{W as getResolvedLoggerSettings,h as pathExists,y as resolveUserPath}from"./utils-BP60e80M.js";import{t as restoreTerminalState}from"./restore-BdB4wlsZ.js";import"./subsystem-C4b1Von0.js";import"./boolean-ssGoaBPk.js";import"./env-BoE8QSib.js";import"./warning-filter-nSTjpMIH.js";import"./auth-profiles-C1VbcUOm.js";import{r as resolveCliName,t as formatCliCommand}from"./command-format-DTMaGKs7.js";import"./src-DvWaTze9.js";import{i as logWarn}from"./logger-wuOr7HKl.js";import"./session-key-CksCYipj.js";import"./builderforce-root-DY1qbWNX.js";import"./exec-COgsU9ql.js";import{A as resolveWorkspaceFilePath,h as DEFAULT_BOOTSTRAP_FILENAME}from"./agent-scope-CufEmNj_.js";import"./env-file-DeS6x2OL.js";import"./src-HrLX5bhG.js";import"./io-CohJffHG.js";import"./manifest-registry-009gLJ4l.js";import"./config-toczWD3q.js";import"./model-discovery-C9Xm95uL.js";import"./model-catalog-CiiFJX77.js";import"./frontmatter-CaY7feZm.js";import"./skills-D3MwwPOH.js";import"./plugin-skills-pSFUbhg_.js";import"./refresh-C4vwneXT.js";import"./client-CGgp3zkQ.js";import"./call-DmAU4cRX.js";import"./message-channel-z5YRpR2d.js";import"./subagent-registry-CyGxu3kP.js";import"./sessions-Bl1wwotX.js";import"./project-context-store-CIUcwUP_.js";import"./tokens-CFKkpUIu.js";import"./plugins-1Mn6RiNf.js";import"./accounts-BkTLjSrD.js";import"./bindings-CKSDlQ1i.js";import"./send-BvroeIQ6.js";import"./send-CceNWtYE.js";import"./with-timeout-T07SJo4N.js";import"./deliver-BuZu68tp.js";import"./accounts-Cx82nj4E.js";import"./send-ByCVQQVz.js";import"./image-ops-CotJhwRR.js";import"./redact-CgO7wehS.js";import"./errors-tAt19c1E.js";import"./embedded-helpers-DK8_apW0.js";import"./sandbox-z9t_PRf9.js";import"./chrome-BnEbJV3D.js";import"./tailscale-DV-yOmYe.js";import"./auth-ChecwOXS.js";import"./server-context-owOmmyUM.js";import"./routes-lclJHOYY.js";import"./paths-BnOjueoX.js";import"./ssrf-DJXLYZ0d.js";import"./store-DHD2IEgd.js";import"./ports-DTku9NSx.js";import"./trash-C3zmJ_O7.js";import"./accounts-DcoaLXKI.js";import"./paths-ClsbsPQP.js";import"./tool-images-CCpqFtrL.js";import"./workspace-waBqRxiy.js";import"./reply-prefix-Cg7AqaK0.js";import"./sqlite-CIGM1WKg.js";import"./memory-cli-ivAs7q7v.js";import"./manager-CRba8roB.js";import"./gemini-auth-CkD5jCPh.js";import"./retry-B151Hej5.js";import"./common-BfwMxpLu.js";import"./runner-DwWmciCt.js";import"./tool-display-Cs4hDP1f.js";import"./chunk-Dly7lM4r.js";import"./markdown-tables-B1Rx8hv6.js";import"./fetch-guard-DnXqPKae.js";import"./fetch-Cn_THzz8.js";import"./ir-CSdQJPqu.js";import"./render-DlHYsbvQ.js";import"./builderforcellm-syscheck-CprBhARf.js";import"./session-utils-GMvum00v.js";import"./coding-tools.policy-NEPm7Mz1.js";import"./pairing-store-QDb6lhIU.js";import"./fetch-DnWD6ydH.js";import"./exec-approvals-D7ZPAZpt.js";import"./nodes-screen-D6GHv_S0.js";import"./session-cost-usage-S0nkbPoW.js";import"./usage-format-5sp5AMSu.js";import"./provider-usage-Bn4ZrnU7.js";import"./send-B_1BtyfA.js";import"./outbound-attachment-BaTYE4qp.js";import"./delivery-queue-Cp3t4Upn.js";import"./project-context-D3Mx4maV.js";import"./control-service-CJuuqNOE.js";import"./stagger-CRe77dWL.js";import"./channel-selection-BLwXhb9t.js";import"./send-UFtylOiq.js";import"./resolve-route-DEIW5uKy.js";import"./channel-activity-DX36RadH.js";import"./tables-CojSfTth.js";import"./links-BKzP7VVP.js";import"./cli-utils-C9pW69LF.js";import"./help-format-CfFf-w62.js";import"./progress-Cqb-jAjT.js";import"./replies-DbkT_5BV.js";import{b as waitForGatewayReachable,d as openUrl,g as resolveControlUiLinks,i as detectBrowserOpenSupport,o as formatControlUiSshHint,p as probeGatewayReachable}from"./onboard-helpers-CckrS8_K.js";import"./prompt-style-BMWmaqSC.js";import"./pairing-labels-3j_iRYOO.js";import"./active-listener-Di9e1YAD.js";import"./mamba-state-engine-CV4nDcCk.js";import"./transformers-stream-Buj40qHl.js";import"./note-DgDXuE0F.js";import"./helpers-DPPVplyk.js";import"./register.subclis-EScCVgbV.js";import"./command-registry-CDcuHGpx.js";import"./program-context-Wpc-6CdI.js";import{n as installCompletion}from"./completion-cli-Do4vXo1k.js";import{a as gatewayInstallErrorHint,i as buildGatewayInstallPlan,n as GATEWAY_DAEMON_RUNTIME_OPTIONS,t as DEFAULT_GATEWAY_DAEMON_RUNTIME}from"./daemon-runtime-B4UjqdyJ.js";import"./runtime-guard-Bi8k55v9.js";import{r as isSystemdUserServiceAvailable}from"./systemd-DdVd5Yet.js";import{t as resolveGatewayService}from"./service-EKJG69M3.js";import{r as healthCommand}from"./health-DVo8a9yg.js";import{t as ensureControlUiAssetsBuilt}from"./control-ui-assets-BxgWcomx.js";import"./builderforce-directory-sync-DQ6u60yX.js";import"./shared-xj-xaKFi.js";import"./model-picker-swoSwauV.js";import"./auth-choice.apply.transformers-1plI0MUg.js";import{t as formatHealthCheckFailure}from"./health-format-D4MaIjaG.js";import{r as ensureCompletionCacheExists,t as checkShellCompletionStatus}from"./doctor-completion-BjBTLcoC.js";import{t as runTui}from"./tui-DY2oYbxk.js";import"./tui-stream-assembler-q9GANTDr.js";import os from"node:os";import path from"node:path";import fs from"node:fs/promises";async function resolveProfileHint(shell){let home=process.env.HOME||os.homedir();return shell===`zsh`?`~/.zshrc`:shell===`bash`?await pathExists(path.join(home,`.bashrc`))?`~/.bashrc`:`~/.bash_profile`:shell===`fish`?`~/.config/fish/config.fish`:`$PROFILE`}function formatReloadHint(shell,profileHint){return shell===`powershell`?`Restart your shell (or reload your PowerShell profile).`:`Restart your shell or run: source ${profileHint}`}async function setupOnboardingShellCompletion(params){let deps={resolveCliName,checkShellCompletionStatus,ensureCompletionCacheExists,installCompletion,...params.deps},cliName=deps.resolveCliName(),completionStatus=await deps.checkShellCompletionStatus(cliName);if(completionStatus.usesSlowPattern){await deps.ensureCompletionCacheExists(cliName)&&await deps.installCompletion(completionStatus.shell,!0,cliName);return}if(completionStatus.profileInstalled&&!completionStatus.cacheExists){await deps.ensureCompletionCacheExists(cliName);return}if(!completionStatus.profileInstalled){if(!(params.flow===`quickstart`||await params.prompter.confirm({message:`Enable ${completionStatus.shell} shell completion for ${cliName}?`,initialValue:!0})))return;if(!await deps.ensureCompletionCacheExists(cliName)){await params.prompter.note(`Failed to generate completion cache. Run \`${cliName} completion --install\` later.`,`Shell completion`);return}await deps.installCompletion(completionStatus.shell,!0,cliName);let profileHint=await resolveProfileHint(completionStatus.shell);await params.prompter.note(`Shell completion installed. ${formatReloadHint(completionStatus.shell,profileHint)}`,`Shell completion`)}}async function finalizeOnboardingWizard(options){let{flow,opts,baseConfig,nextConfig,settings,prompter,runtime}=options,withWizardProgress=async(label,options,work)=>{let progress=prompter.progress(label);try{return await work(progress)}finally{progress.stop(options.doneMessage)}},systemdAvailable=process.platform===`linux`?await isSystemdUserServiceAvailable():!0;if(process.platform===`linux`&&!systemdAvailable&&await prompter.note(`Systemd user services are unavailable. Skipping lingering checks and service install.`,`Systemd`),process.platform===`linux`&&systemdAvailable){let{ensureSystemdUserLingerInteractive}=await import(`./systemd-linger-Dgxo9kqA.js`);await ensureSystemdUserLingerInteractive({runtime,prompter:{confirm:prompter.confirm,note:prompter.note},reason:`Linux installs use a systemd user service by default. Without lingering, systemd stops the user session on logout/idle and kills the Gateway.`,requireConfirm:!1})}let explicitInstallDaemon=typeof opts.installDaemon==`boolean`?opts.installDaemon:void 0,installDaemon;if(installDaemon=explicitInstallDaemon===void 0?process.platform===`linux`&&!systemdAvailable?!1:flow===`quickstart`?!0:await prompter.confirm({message:`Install Gateway service (recommended)`,initialValue:!0}):explicitInstallDaemon,process.platform===`linux`&&!systemdAvailable&&installDaemon&&(await prompter.note("Systemd user services are unavailable; skipping service install. Use your container supervisor or `docker compose up -d`.",`Gateway service`),installDaemon=!1),installDaemon){let daemonRuntime=flow===`quickstart`?DEFAULT_GATEWAY_DAEMON_RUNTIME:await prompter.select({message:`Gateway service runtime`,options:GATEWAY_DAEMON_RUNTIME_OPTIONS,initialValue:opts.daemonRuntime??DEFAULT_GATEWAY_DAEMON_RUNTIME});flow===`quickstart`&&await prompter.note(`QuickStart uses Node for the Gateway service (stable + supported).`,`Gateway service runtime`);let service=resolveGatewayService(),loaded=await service.isLoaded({env:process.env});if(loaded){let action=await prompter.select({message:`Gateway service already installed`,options:[{value:`restart`,label:`Restart`},{value:`reinstall`,label:`Reinstall`},{value:`skip`,label:`Skip`}]});action===`restart`?await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service restarted.`},async progress=>{progress.update(`Restarting Gateway service…`),await service.restart({env:process.env,stdout:process.stdout})}):action===`reinstall`&&await withWizardProgress(`Gateway service`,{doneMessage:`Gateway service uninstalled.`},async progress=>{progress.update(`Uninstalling Gateway service…`),await service.uninstall({env:process.env,stdout:process.stdout})})}if(!loaded||loaded&&!await service.isLoaded({env:process.env})){let progress=prompter.progress(`Gateway service`),installError=null;try{progress.update(`Preparing Gateway service…`);let{programArguments,workingDirectory,environment}=await buildGatewayInstallPlan({env:process.env,port:settings.port,token:settings.gatewayToken,runtime:daemonRuntime,warn:(message,title)=>prompter.note(message,title),config:nextConfig});progress.update(`Installing Gateway service…`),await service.install({env:process.env,stdout:process.stdout,programArguments,workingDirectory,environment})}catch(err){installError=err instanceof Error?err.message:String(err)}finally{progress.stop(installError?`Gateway service install failed.`:`Gateway service installed.`)}installError&&(await prompter.note(`Gateway service install failed: ${installError}`,`Gateway`),await prompter.note(gatewayInstallErrorHint(),`Gateway`))}}if(!opts.skipHealth){await waitForGatewayReachable({url:resolveControlUiLinks({bind:nextConfig.gateway?.bind??`loopback`,port:settings.port,customBindHost:nextConfig.gateway?.customBindHost,basePath:void 0}).wsUrl,token:settings.gatewayToken,deadlineMs:15e3});try{await healthCommand({json:!1,timeoutMs:1e4},runtime)}catch(err){let msg=formatHealthCheckFailure(err);runtime.error(msg),logWarn(`[onboarding] health check failed: ${String(err)}`);let logFile=getResolvedLoggerSettings().file;await prompter.note([`Logs:`,logFile,`View: ${formatCliCommand(`builderforce logs --follow`)}`,``,`Docs:`,`https://docs.builderforce.ai/gateway/health`,`https://docs.builderforce.ai/gateway/troubleshooting`].join(`
|
|
2
2
|
`),`Health check help`)}}let controlUiEnabled=nextConfig.gateway?.controlUi?.enabled??baseConfig.gateway?.controlUi?.enabled??!0;if(!opts.skipUi&&controlUiEnabled){let controlUiAssets=await ensureControlUiAssetsBuilt(runtime);!controlUiAssets.ok&&controlUiAssets.message&&runtime.error(controlUiAssets.message)}await prompter.note([`Add nodes for extra features:`,`- macOS app (system + notifications)`,`- iOS app (camera/canvas)`,`- Android app (camera/canvas)`].join(`
|
|
3
3
|
`),`Optional apps`);let controlUiBasePath=nextConfig.gateway?.controlUi?.basePath??baseConfig.gateway?.controlUi?.basePath,links=resolveControlUiLinks({bind:settings.bind,port:settings.port,customBindHost:settings.customBindHost,basePath:controlUiBasePath}),authedUrl=settings.authMode===`token`&&settings.gatewayToken?`${links.httpUrl}#token=${encodeURIComponent(settings.gatewayToken)}`:links.httpUrl,gatewayProbe=await probeGatewayReachable({url:links.wsUrl,token:settings.authMode===`token`?settings.gatewayToken:void 0,password:settings.authMode===`password`?nextConfig.gateway?.auth?.password:``}),gatewayStatusLine=gatewayProbe.ok?`Gateway: reachable`:`Gateway: not detected${gatewayProbe.detail?` (${gatewayProbe.detail})`:``}`,bootstrapPath=resolveWorkspaceFilePath(resolveUserPath(options.workspaceDir),DEFAULT_BOOTSTRAP_FILENAME),hasBootstrap=await fs.access(bootstrapPath).then(()=>!0).catch(()=>!1);await prompter.note([`Web UI: ${links.httpUrl}`,settings.authMode===`token`&&settings.gatewayToken?`Web UI (with token): ${authedUrl}`:void 0,`Gateway WS: ${links.wsUrl}`,gatewayStatusLine,`Docs: https://docs.builderforce.ai/web/control-ui`].filter(Boolean).join(`
|
|
4
4
|
`),`Control UI`);let controlUiOpened=!1,controlUiOpenHint,hatchChoice=null,launchedTui=!1;!opts.skipUi&&gatewayProbe.ok?(hasBootstrap&&await prompter.note([`This is the defining action that makes your agent you.`,`Please take your time.`,`The more you tell it, the better the experience will be.`,`We will send: "Wake up, my friend!"`].join(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as normalizeAccountId,t as DEFAULT_ACCOUNT_ID}from"./session-key-5J69DULS.js";import{B as info,E as jidToE164,K as success,Z as getChildLogger,j as resolveUserPath}from"./registry-
|
|
1
|
+
import{c as normalizeAccountId,t as DEFAULT_ACCOUNT_ID}from"./session-key-5J69DULS.js";import{B as info,E as jidToE164,K as success,Z as getChildLogger,j as resolveUserPath}from"./registry-DJq2Cvo9.js";import{a as resolveOAuthDir}from"./paths-Cb8zTlyG.js";import{i as defaultRuntime}from"./subsystem-COTa5Ly_.js";import{t as formatCliCommand}from"./command-format-CAX9XFjI.js";import path from"node:path";import fs from"node:fs";import fs$1 from"node:fs/promises";function createAccountListHelpers(channelKey){function listConfiguredAccountIds(cfg){let accounts=cfg.channels?.[channelKey]?.accounts;return!accounts||typeof accounts!=`object`?[]:Object.keys(accounts).filter(Boolean)}function listAccountIds(cfg){let ids=listConfiguredAccountIds(cfg);return ids.length===0?[DEFAULT_ACCOUNT_ID]:ids.toSorted((a,b)=>a.localeCompare(b))}function resolveDefaultAccountId(cfg){let ids=listAccountIds(cfg);return ids.includes(DEFAULT_ACCOUNT_ID)?DEFAULT_ACCOUNT_ID:ids[0]??DEFAULT_ACCOUNT_ID}return{listConfiguredAccountIds,listAccountIds,resolveDefaultAccountId}}function resolveDefaultWebAuthDir(){return path.join(resolveOAuthDir(),`whatsapp`,DEFAULT_ACCOUNT_ID)}const WA_WEB_AUTH_DIR=resolveDefaultWebAuthDir();function resolveWebCredsPath(authDir){return path.join(authDir,`creds.json`)}function resolveWebCredsBackupPath(authDir){return path.join(authDir,`creds.json.bak`)}function readCredsJsonRaw(filePath){try{if(!fs.existsSync(filePath))return null;let stats=fs.statSync(filePath);return!stats.isFile()||stats.size<=1?null:fs.readFileSync(filePath,`utf-8`)}catch{return null}}function maybeRestoreCredsFromBackup(authDir){let logger=getChildLogger({module:`web-session`});try{let credsPath=resolveWebCredsPath(authDir),backupPath=resolveWebCredsBackupPath(authDir),raw=readCredsJsonRaw(credsPath);if(raw){JSON.parse(raw);return}let backupRaw=readCredsJsonRaw(backupPath);if(!backupRaw)return;JSON.parse(backupRaw),fs.copyFileSync(backupPath,credsPath);try{fs.chmodSync(credsPath,384)}catch{}logger.warn({credsPath},`restored corrupted WhatsApp creds.json from backup`)}catch{}}async function webAuthExists(authDir=resolveDefaultWebAuthDir()){let resolvedAuthDir=resolveUserPath(authDir);maybeRestoreCredsFromBackup(resolvedAuthDir);let credsPath=resolveWebCredsPath(resolvedAuthDir);try{await fs$1.access(resolvedAuthDir)}catch{return!1}try{let stats=await fs$1.stat(credsPath);if(!stats.isFile()||stats.size<=1)return!1;let raw=await fs$1.readFile(credsPath,`utf-8`);return JSON.parse(raw),!0}catch{return!1}}async function clearLegacyBaileysAuthState(authDir){let entries=await fs$1.readdir(authDir,{withFileTypes:!0}),shouldDelete=name=>name===`oauth.json`?!1:name===`creds.json`||name===`creds.json.bak`?!0:name.endsWith(`.json`)?/^(app-state-sync|session|sender-key|pre-key)-/.test(name):!1;await Promise.all(entries.map(async entry=>{entry.isFile()&&shouldDelete(entry.name)&&await fs$1.rm(path.join(authDir,entry.name),{force:!0})}))}async function logoutWeb(params){let runtime=params.runtime??defaultRuntime,resolvedAuthDir=resolveUserPath(params.authDir??resolveDefaultWebAuthDir());return await webAuthExists(resolvedAuthDir)?(params.isLegacyAuthDir?await clearLegacyBaileysAuthState(resolvedAuthDir):await fs$1.rm(resolvedAuthDir,{recursive:!0,force:!0}),runtime.log(success(`Cleared WhatsApp Web credentials.`)),!0):(runtime.log(info(`No WhatsApp Web session found; nothing to delete.`)),!1)}function readWebSelfId(authDir=resolveDefaultWebAuthDir()){try{let credsPath=resolveWebCredsPath(resolveUserPath(authDir));if(!fs.existsSync(credsPath))return{e164:null,jid:null};let raw=fs.readFileSync(credsPath,`utf-8`),jid=JSON.parse(raw)?.me?.id??null;return{e164:jid?jidToE164(jid,{authDir}):null,jid}}catch{return{e164:null,jid:null}}}function getWebAuthAgeMs(authDir=resolveDefaultWebAuthDir()){try{let stats=fs.statSync(resolveWebCredsPath(resolveUserPath(authDir)));return Date.now()-stats.mtimeMs}catch{return null}}function logWebSelfId(authDir=resolveDefaultWebAuthDir(),runtime=defaultRuntime,includeChannelPrefix=!1){let{e164,jid}=readWebSelfId(authDir),details=e164||jid?`${e164??`unknown`}${jid?` (jid ${jid})`:``}`:`unknown`,prefix=includeChannelPrefix?`Web Channel: `:``;runtime.log(info(`${prefix}${details}`))}async function pickWebChannel(pref,authDir=resolveDefaultWebAuthDir()){let choice=pref===`auto`?`web`:pref;if(!await webAuthExists(authDir))throw Error(`No WhatsApp Web session found. Run \`${formatCliCommand(`builderforce channels login --channel whatsapp --verbose`)}\` to link.`);return choice}const{listConfiguredAccountIds,listAccountIds,resolveDefaultAccountId}=createAccountListHelpers(`whatsapp`),listWhatsAppAccountIds=listAccountIds,resolveDefaultWhatsAppAccountId=resolveDefaultAccountId;function resolveAccountConfig(cfg,accountId){let accounts=cfg.channels?.whatsapp?.accounts;if(!(!accounts||typeof accounts!=`object`))return accounts[accountId]}function resolveDefaultAuthDir(accountId){return path.join(resolveOAuthDir(),`whatsapp`,normalizeAccountId(accountId))}function resolveLegacyAuthDir(){return resolveOAuthDir()}function legacyAuthExists(authDir){try{return fs.existsSync(path.join(authDir,`creds.json`))}catch{return!1}}function resolveWhatsAppAuthDir(params){let accountId=params.accountId.trim()||DEFAULT_ACCOUNT_ID,configured=resolveAccountConfig(params.cfg,accountId)?.authDir?.trim();if(configured)return{authDir:resolveUserPath(configured),isLegacy:!1};let defaultDir=resolveDefaultAuthDir(accountId);if(accountId===DEFAULT_ACCOUNT_ID){let legacyDir=resolveLegacyAuthDir();if(legacyAuthExists(legacyDir)&&!legacyAuthExists(defaultDir))return{authDir:legacyDir,isLegacy:!0}}return{authDir:defaultDir,isLegacy:!1}}function resolveWhatsAppAccount(params){let rootCfg=params.cfg.channels?.whatsapp,accountId=params.accountId?.trim()||resolveDefaultWhatsAppAccountId(params.cfg),accountCfg=resolveAccountConfig(params.cfg,accountId),enabled=accountCfg?.enabled!==!1,{authDir,isLegacy}=resolveWhatsAppAuthDir({cfg:params.cfg,accountId});return{accountId,name:accountCfg?.name?.trim()||void 0,enabled,sendReadReceipts:accountCfg?.sendReadReceipts??rootCfg?.sendReadReceipts??!0,messagePrefix:accountCfg?.messagePrefix??rootCfg?.messagePrefix??params.cfg.messages?.messagePrefix,authDir,isLegacyAuthDir:isLegacy,selfChatMode:accountCfg?.selfChatMode??rootCfg?.selfChatMode,dmPolicy:accountCfg?.dmPolicy??rootCfg?.dmPolicy,allowFrom:accountCfg?.allowFrom??rootCfg?.allowFrom,groupAllowFrom:accountCfg?.groupAllowFrom??rootCfg?.groupAllowFrom,groupPolicy:accountCfg?.groupPolicy??rootCfg?.groupPolicy,textChunkLimit:accountCfg?.textChunkLimit??rootCfg?.textChunkLimit,chunkMode:accountCfg?.chunkMode??rootCfg?.chunkMode,mediaMaxMb:accountCfg?.mediaMaxMb??rootCfg?.mediaMaxMb,blockStreaming:accountCfg?.blockStreaming??rootCfg?.blockStreaming,ackReaction:accountCfg?.ackReaction??rootCfg?.ackReaction,groups:accountCfg?.groups??rootCfg?.groups,debounceMs:accountCfg?.debounceMs??rootCfg?.debounceMs}}export{createAccountListHelpers as _,WA_WEB_AUTH_DIR as a,logoutWeb as c,readCredsJsonRaw as d,readWebSelfId as f,webAuthExists as g,resolveWebCredsPath as h,resolveWhatsAppAuthDir as i,maybeRestoreCredsFromBackup as l,resolveWebCredsBackupPath as m,resolveDefaultWhatsAppAccountId as n,getWebAuthAgeMs as o,resolveDefaultWebAuthDir as p,resolveWhatsAppAccount as r,logWebSelfId as s,listWhatsAppAccountIds as t,pickWebChannel as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as DEFAULT_ACCOUNT_ID}from"./session-key-5J69DULS.js";import{t as formatCliCommand}from"./command-format-
|
|
1
|
+
import{t as DEFAULT_ACCOUNT_ID}from"./session-key-5J69DULS.js";import{t as formatCliCommand}from"./command-format-CAX9XFjI.js";import{i as markdownToIRWithMeta,t as renderMarkdownWithMarkers}from"./render-BUCRXPIk.js";function normalizePollInput(input,options={}){let question=input.question.trim();if(!question)throw Error(`Poll question is required`);let cleaned=(input.options??[]).map(option=>option.trim()).filter(Boolean);if(cleaned.length<2)throw Error(`Poll requires at least 2 options`);if(options.maxOptions!==void 0&&cleaned.length>options.maxOptions)throw Error(`Poll supports at most ${options.maxOptions} options`);let maxSelectionsRaw=input.maxSelections,maxSelections=typeof maxSelectionsRaw==`number`&&Number.isFinite(maxSelectionsRaw)?Math.floor(maxSelectionsRaw):1;if(maxSelections<1)throw Error(`maxSelections must be at least 1`);if(maxSelections>cleaned.length)throw Error(`maxSelections cannot exceed option count`);let durationSecondsRaw=input.durationSeconds,durationSeconds=typeof durationSecondsRaw==`number`&&Number.isFinite(durationSecondsRaw)?Math.floor(durationSecondsRaw):void 0;if(durationSeconds!==void 0&&durationSeconds<1)throw Error(`durationSeconds must be at least 1`);let durationRaw=input.durationHours,durationHours=typeof durationRaw==`number`&&Number.isFinite(durationRaw)?Math.floor(durationRaw):void 0;if(durationHours!==void 0&&durationHours<1)throw Error(`durationHours must be at least 1`);if(durationSeconds!==void 0&&durationHours!==void 0)throw Error(`durationSeconds and durationHours are mutually exclusive`);return{question,options:cleaned,maxSelections,durationSeconds,durationHours}}function normalizePollDurationHours(value,options){let base=typeof value==`number`&&Number.isFinite(value)?Math.floor(value):options.defaultHours;return Math.min(Math.max(base,1),options.maxHours)}const MARKDOWN_STYLE_MARKERS={bold:{open:`**`,close:`**`},italic:{open:`_`,close:`_`},strikethrough:{open:`~~`,close:`~~`},code:{open:"`",close:"`"},code_block:{open:"```\n",close:"```"}};function convertMarkdownTables(markdown,mode){if(!markdown||mode===`off`)return markdown;let{ir,hasTables}=markdownToIRWithMeta(markdown,{linkify:!1,autolink:!1,headingStyle:`none`,blockquotePrefix:``,tableMode:mode});return hasTables?renderMarkdownWithMarkers(ir,{styleMarkers:MARKDOWN_STYLE_MARKERS,escapeText:text=>text,buildLink:(link,text)=>{let href=link.href.trim();return!href||!text.slice(link.start,link.end)?null:{start:link.start,end:link.end,open:`[`,close:`](${href})`}}}):markdown}const listeners=new Map;function resolveWebAccountId(accountId){return(accountId??``).trim()||DEFAULT_ACCOUNT_ID}function requireActiveWebListener(accountId){let id=resolveWebAccountId(accountId),listener=listeners.get(id)??null;if(!listener)throw Error(`No active WhatsApp Web listener (account: ${id}). Start the gateway, then link WhatsApp with: ${formatCliCommand(`builderforce channels login --channel whatsapp --account ${id}`)}.`);return{accountId:id,listener}}function setActiveWebListener(accountIdOrListener,maybeListener){let{accountId,listener}=typeof accountIdOrListener==`string`?{accountId:accountIdOrListener,listener:maybeListener??null}:{accountId:DEFAULT_ACCOUNT_ID,listener:accountIdOrListener??null},id=resolveWebAccountId(accountId);listener?listeners.set(id,listener):listeners.delete(id)}function getActiveWebListener(accountId){let id=resolveWebAccountId(accountId);return listeners.get(id)??null}export{normalizePollDurationHours as a,convertMarkdownTables as i,requireActiveWebListener as n,normalizePollInput as o,setActiveWebListener as r,getActiveWebListener as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as isSubagentSessionKey,g as isCronSessionKey,l as normalizeAgentId,n as DEFAULT_AGENT_ID,v as parseAgentSessionKey}from"./session-key-5J69DULS.js";import{B as info,G as shouldLogVerbose,O as pathExists,Q as getLogger,U as logVerboseConsole,et as onLoggerReset,j as resolveUserPath,q as warn,z as danger}from"./registry-CZHRcH-q.js";import{s as resolveStateDir,u as resolveRequiredHomeDir}from"./paths-Cb8zTlyG.js";import{i as defaultRuntime,t as createSubsystemLogger}from"./subsystem-D0Ril4rt.js";import path from"node:path";import fs from"node:fs";import os from"node:os";import{fileURLToPath}from"node:url";import fs$1 from"node:fs/promises";import{promisify}from"node:util";import{execFile,spawn}from"node:child_process";const subsystemColonRe=/^([a-z][a-z0-9-]{1,30}):\s+(.*)$/i,subsystemBracketRe=/^\[([a-z][a-z0-9_.:/-]{0,40})\]\s*(.*)$/i;function parseSubsystem(message){let colonMatch=message.match(subsystemColonRe);if(colonMatch)return{subsystem:colonMatch[1],rest:colonMatch[2]};let bracketMatch=message.match(subsystemBracketRe);return bracketMatch?{subsystem:bracketMatch[1],rest:bracketMatch[2]}:null}const loggerCache=new Map;function getSubsystem(name){let logger=loggerCache.get(name);return logger||(logger=createSubsystemLogger(name),loggerCache.set(name,logger)),logger}function resetLoggerCache(){loggerCache.clear()}onLoggerReset(resetLoggerCache);function logInfo(message,runtime=defaultRuntime){if(runtime!==defaultRuntime){runtime.log(info(message)),getLogger().info(message);return}let parsed=parseSubsystem(message);parsed?getSubsystem(parsed.subsystem).info(parsed.rest):getSubsystem(`general`).info(message)}function logWarn(message,runtime=defaultRuntime){if(runtime!==defaultRuntime){runtime.log(warn(message)),getLogger().warn(message);return}let parsed=parseSubsystem(message);parsed?getSubsystem(parsed.subsystem).warn(parsed.rest):getSubsystem(`general`).warn(message)}function logError(message,runtime=defaultRuntime){if(runtime!==defaultRuntime){runtime.error(danger(message)),getLogger().error(message);return}let parsed=parseSubsystem(message);parsed?getSubsystem(parsed.subsystem).error(parsed.rest):getSubsystem(`general`).error(message)}function logDebug(message){getLogger().debug(message),logVerboseConsole(message)}const DEFAULT_RETRY_CODES=[`EBADF`];function resolveCommandStdio(params){return[params.hasInput?`pipe`:params.preferInherit?`inherit`:`pipe`,`pipe`,`pipe`]}function shouldRetry(err,codes){let code=err&&typeof err==`object`&&`code`in err?String(err.code):``;return code.length>0&&codes.includes(code)}async function spawnAndWaitForSpawn(spawnImpl,argv,options){let child=spawnImpl(argv[0],argv.slice(1),options);return await new Promise((resolve,reject)=>{let settled=!1,cleanup=()=>{child.removeListener(`error`,onError),child.removeListener(`spawn`,onSpawn)},finishResolve=()=>{settled||(settled=!0,cleanup(),resolve(child))},onError=err=>{settled||(settled=!0,cleanup(),reject(err))},onSpawn=()=>{finishResolve()};child.once(`error`,onError),child.once(`spawn`,onSpawn),process.nextTick(()=>{typeof child.pid==`number`&&finishResolve()})})}async function spawnWithFallback(params){let spawnImpl=params.spawnImpl??spawn,retryCodes=params.retryCodes??DEFAULT_RETRY_CODES,baseOptions={...params.options},fallbacks=params.fallbacks??[],attempts=[{options:baseOptions},...fallbacks.map(fallback=>({label:fallback.label,options:{...baseOptions,...fallback.options}}))],lastError;for(let index=0;index<attempts.length;index+=1){let attempt=attempts[index];try{return{child:await spawnAndWaitForSpawn(spawnImpl,params.argv,attempt.options),usedFallback:index>0,fallbackLabel:attempt.label}}catch(err){lastError=err;let nextFallback=fallbacks[index];if(!nextFallback||!shouldRetry(err,retryCodes))throw err;params.onFallback?.(err,nextFallback)}}throw lastError}const execFileAsync=promisify(execFile);function resolveCommand(command){if(process.platform!==`win32`)return command;let basename=path.basename(command).toLowerCase();return path.extname(basename)?command:[`npm`,`pnpm`,`yarn`,`npx`].includes(basename)?`${command}.cmd`:command}function shouldSpawnWithShell(params){return!1}async function runExec(command,args,opts=1e4){let options=typeof opts==`number`?{timeout:opts,encoding:`utf8`}:{timeout:opts.timeoutMs,maxBuffer:opts.maxBuffer,encoding:`utf8`};try{let{stdout,stderr}=await execFileAsync(resolveCommand(command),args,options);return shouldLogVerbose()&&(stdout.trim()&&logDebug(stdout.trim()),stderr.trim()&&logError(stderr.trim())),{stdout,stderr}}catch(err){throw shouldLogVerbose()&&logError(danger(`Command failed: ${command} ${args.join(` `)}`)),err}}async function runCommandWithTimeout(argv,optionsOrTimeout){let options=typeof optionsOrTimeout==`number`?{timeoutMs:optionsOrTimeout}:optionsOrTimeout,{timeoutMs,cwd,input,env,noOutputTimeoutMs}=options,{windowsVerbatimArguments}=options,hasInput=input!==void 0,shouldSuppressNpmFund=(()=>{let cmd=path.basename(argv[0]??``);return cmd===`npm`||cmd===`npm.cmd`||cmd===`npm.exe`?!0:cmd===`node`||cmd===`node.exe`?(argv[1]??``).includes(`npm-cli.js`):!1})(),mergedEnv=env?{...process.env,...env}:{...process.env},resolvedEnv=Object.fromEntries(Object.entries(mergedEnv).filter(([,value])=>value!==void 0).map(([key,value])=>[key,String(value)]));shouldSuppressNpmFund&&(resolvedEnv.NPM_CONFIG_FUND??=`false`,resolvedEnv.npm_config_fund??=`false`);let stdio=resolveCommandStdio({hasInput,preferInherit:!0}),resolvedCommand=resolveCommand(argv[0]??``),child=spawn(resolvedCommand,argv.slice(1),{stdio,cwd,env:resolvedEnv,windowsVerbatimArguments,...shouldSpawnWithShell({resolvedCommand,platform:process.platform})?{shell:!0}:{}});return await new Promise((resolve,reject)=>{let stdout=``,stderr=``,settled=!1,timedOut=!1,noOutputTimedOut=!1,noOutputTimer=null,shouldTrackOutputTimeout=typeof noOutputTimeoutMs==`number`&&Number.isFinite(noOutputTimeoutMs)&&noOutputTimeoutMs>0,clearNoOutputTimer=()=>{noOutputTimer&&=(clearTimeout(noOutputTimer),null)},armNoOutputTimer=()=>{!shouldTrackOutputTimeout||settled||(clearNoOutputTimer(),noOutputTimer=setTimeout(()=>{settled||(noOutputTimedOut=!0,typeof child.kill==`function`&&child.kill(`SIGKILL`))},Math.floor(noOutputTimeoutMs)))},timer=setTimeout(()=>{timedOut=!0,typeof child.kill==`function`&&child.kill(`SIGKILL`)},timeoutMs);armNoOutputTimer(),hasInput&&child.stdin&&(child.stdin.write(input??``),child.stdin.end()),child.stdout?.on(`data`,d=>{stdout+=d.toString(),armNoOutputTimer()}),child.stderr?.on(`data`,d=>{stderr+=d.toString(),armNoOutputTimer()}),child.on(`error`,err=>{settled||(settled=!0,clearTimeout(timer),clearNoOutputTimer(),reject(err))}),child.on(`close`,(code,signal)=>{if(settled)return;settled=!0,clearTimeout(timer),clearNoOutputTimer();let termination=noOutputTimedOut?`no-output-timeout`:timedOut?`timeout`:signal==null?`exit`:`signal`;resolve({pid:child.pid??void 0,stdout,stderr,code,signal,killed:child.killed,termination,noOutputTimedOut})})})}function normalizeSkillFilter(skillFilter){if(skillFilter!==void 0)return skillFilter.map(entry=>String(entry).trim()).filter(Boolean)}const CORE_PACKAGE_NAMES=[`@seanhogg/builderforce-agents`,...[`builderforce`]],CORE_PACKAGE_NAME_SET=new Set(CORE_PACKAGE_NAMES);function isCorePackageName(name){return!!(name&&CORE_PACKAGE_NAME_SET.has(name))}async function readPackageName(dir){try{let raw=await fs$1.readFile(path.join(dir,`package.json`),`utf-8`),parsed=JSON.parse(raw);return typeof parsed.name==`string`?parsed.name:null}catch{return null}}function readPackageNameSync(dir){try{let raw=fs.readFileSync(path.join(dir,`package.json`),`utf-8`),parsed=JSON.parse(raw);return typeof parsed.name==`string`?parsed.name:null}catch{return null}}async function findPackageRoot(startDir,maxDepth=12){let current=path.resolve(startDir);for(let i=0;i<maxDepth;i+=1){if(isCorePackageName(await readPackageName(current)))return current;let parent=path.dirname(current);if(parent===current)break;current=parent}return null}function findPackageRootSync(startDir,maxDepth=12){let current=path.resolve(startDir);for(let i=0;i<maxDepth;i+=1){if(isCorePackageName(readPackageNameSync(current)))return current;let parent=path.dirname(current);if(parent===current)break;current=parent}return null}function candidateDirsFromArgv1(argv1){let normalized=path.resolve(argv1),candidates=[path.dirname(normalized)];try{let resolved=fs.realpathSync(normalized);resolved!==normalized&&candidates.push(path.dirname(resolved))}catch{}let parts=normalized.split(path.sep),binIndex=parts.lastIndexOf(`.bin`);if(binIndex>0&&parts[binIndex-1]===`node_modules`){let binName=path.basename(normalized),nodeModulesDir=parts.slice(0,binIndex).join(path.sep);candidates.push(path.join(nodeModulesDir,binName))}return candidates}async function resolveBuilderForceAgentsPackageRoot(opts){for(let candidate of buildCandidates(opts)){let found=await findPackageRoot(candidate);if(found)return found}return null}function resolveBuilderForceAgentsPackageRootSync(opts){for(let candidate of buildCandidates(opts)){let found=findPackageRootSync(candidate);if(found)return found}return null}function buildCandidates(opts){let candidates=[];return opts.moduleUrl&&candidates.push(path.dirname(fileURLToPath(opts.moduleUrl))),opts.argv1&&candidates.push(...candidateDirsFromArgv1(opts.argv1)),opts.cwd&&candidates.push(opts.cwd),candidates}const FALLBACK_TEMPLATE_DIR=path.resolve(path.dirname(fileURLToPath(import.meta.url)),`../../foundation`);let cachedTemplateDir,resolvingTemplateDir;async function resolveWorkspaceTemplateDir(opts){if(cachedTemplateDir)return cachedTemplateDir;if(resolvingTemplateDir)return resolvingTemplateDir;resolvingTemplateDir=(async()=>{let moduleUrl=opts?.moduleUrl??import.meta.url,argv1=opts?.argv1??process.argv[1],cwd=opts?.cwd??process.cwd(),packageRoot=await resolveBuilderForceAgentsPackageRoot({moduleUrl,argv1,cwd}),candidates=[packageRoot?path.join(packageRoot,`foundation`):null,cwd?path.resolve(cwd,`foundation`):null,FALLBACK_TEMPLATE_DIR].filter(Boolean);for(let candidate of candidates)if(await pathExists(candidate))return cachedTemplateDir=candidate,candidate;return cachedTemplateDir=candidates[0]??FALLBACK_TEMPLATE_DIR,cachedTemplateDir})();try{return await resolvingTemplateDir}finally{resolvingTemplateDir=void 0}}function resolveDefaultAgentWorkspaceDir(env=process.env,homedir=os.homedir){let home=resolveRequiredHomeDir(env,homedir),profile=env.BUILDERFORCE_AGENTS_PROFILE?.trim();return profile&&profile.toLowerCase()!==`default`?path.join(home,`.builderforce`,`workspace-${profile}`):path.join(home,`.builderforce`,`workspace`)}const DEFAULT_AGENT_WORKSPACE_DIR=resolveDefaultAgentWorkspaceDir(),DEFAULT_AGENTS_FILENAME=`AGENTS.md`,DEFAULT_SOUL_FILENAME=`SOUL.md`,DEFAULT_TOOLS_FILENAME=`TOOLS.md`,DEFAULT_IDENTITY_FILENAME=`IDENTITY.md`,DEFAULT_USER_FILENAME=`USER.md`,DEFAULT_HEARTBEAT_FILENAME=`HEARTBEAT.md`,DEFAULT_BOOTSTRAP_FILENAME=`BOOTSTRAP.md`,EMBEDDED_WORKSPACE_TEMPLATES={[DEFAULT_AGENTS_FILENAME]:`# AGENTS
|
|
1
|
+
import{_ as isSubagentSessionKey,g as isCronSessionKey,l as normalizeAgentId,n as DEFAULT_AGENT_ID,v as parseAgentSessionKey}from"./session-key-5J69DULS.js";import{B as info,G as shouldLogVerbose,O as pathExists,Q as getLogger,U as logVerboseConsole,et as onLoggerReset,j as resolveUserPath,q as warn,z as danger}from"./registry-DJq2Cvo9.js";import{s as resolveStateDir,u as resolveRequiredHomeDir}from"./paths-Cb8zTlyG.js";import{i as defaultRuntime,t as createSubsystemLogger}from"./subsystem-COTa5Ly_.js";import path from"node:path";import fs from"node:fs";import os from"node:os";import{fileURLToPath}from"node:url";import fs$1 from"node:fs/promises";import{promisify}from"node:util";import{execFile,spawn}from"node:child_process";const subsystemColonRe=/^([a-z][a-z0-9-]{1,30}):\s+(.*)$/i,subsystemBracketRe=/^\[([a-z][a-z0-9_.:/-]{0,40})\]\s*(.*)$/i;function parseSubsystem(message){let colonMatch=message.match(subsystemColonRe);if(colonMatch)return{subsystem:colonMatch[1],rest:colonMatch[2]};let bracketMatch=message.match(subsystemBracketRe);return bracketMatch?{subsystem:bracketMatch[1],rest:bracketMatch[2]}:null}const loggerCache=new Map;function getSubsystem(name){let logger=loggerCache.get(name);return logger||(logger=createSubsystemLogger(name),loggerCache.set(name,logger)),logger}function resetLoggerCache(){loggerCache.clear()}onLoggerReset(resetLoggerCache);function logInfo(message,runtime=defaultRuntime){if(runtime!==defaultRuntime){runtime.log(info(message)),getLogger().info(message);return}let parsed=parseSubsystem(message);parsed?getSubsystem(parsed.subsystem).info(parsed.rest):getSubsystem(`general`).info(message)}function logWarn(message,runtime=defaultRuntime){if(runtime!==defaultRuntime){runtime.log(warn(message)),getLogger().warn(message);return}let parsed=parseSubsystem(message);parsed?getSubsystem(parsed.subsystem).warn(parsed.rest):getSubsystem(`general`).warn(message)}function logError(message,runtime=defaultRuntime){if(runtime!==defaultRuntime){runtime.error(danger(message)),getLogger().error(message);return}let parsed=parseSubsystem(message);parsed?getSubsystem(parsed.subsystem).error(parsed.rest):getSubsystem(`general`).error(message)}function logDebug(message){getLogger().debug(message),logVerboseConsole(message)}const DEFAULT_RETRY_CODES=[`EBADF`];function resolveCommandStdio(params){return[params.hasInput?`pipe`:params.preferInherit?`inherit`:`pipe`,`pipe`,`pipe`]}function shouldRetry(err,codes){let code=err&&typeof err==`object`&&`code`in err?String(err.code):``;return code.length>0&&codes.includes(code)}async function spawnAndWaitForSpawn(spawnImpl,argv,options){let child=spawnImpl(argv[0],argv.slice(1),options);return await new Promise((resolve,reject)=>{let settled=!1,cleanup=()=>{child.removeListener(`error`,onError),child.removeListener(`spawn`,onSpawn)},finishResolve=()=>{settled||(settled=!0,cleanup(),resolve(child))},onError=err=>{settled||(settled=!0,cleanup(),reject(err))},onSpawn=()=>{finishResolve()};child.once(`error`,onError),child.once(`spawn`,onSpawn),process.nextTick(()=>{typeof child.pid==`number`&&finishResolve()})})}async function spawnWithFallback(params){let spawnImpl=params.spawnImpl??spawn,retryCodes=params.retryCodes??DEFAULT_RETRY_CODES,baseOptions={...params.options},fallbacks=params.fallbacks??[],attempts=[{options:baseOptions},...fallbacks.map(fallback=>({label:fallback.label,options:{...baseOptions,...fallback.options}}))],lastError;for(let index=0;index<attempts.length;index+=1){let attempt=attempts[index];try{return{child:await spawnAndWaitForSpawn(spawnImpl,params.argv,attempt.options),usedFallback:index>0,fallbackLabel:attempt.label}}catch(err){lastError=err;let nextFallback=fallbacks[index];if(!nextFallback||!shouldRetry(err,retryCodes))throw err;params.onFallback?.(err,nextFallback)}}throw lastError}const execFileAsync=promisify(execFile);function resolveCommand(command){if(process.platform!==`win32`)return command;let basename=path.basename(command).toLowerCase();return path.extname(basename)?command:[`npm`,`pnpm`,`yarn`,`npx`].includes(basename)?`${command}.cmd`:command}function shouldSpawnWithShell(params){return!1}async function runExec(command,args,opts=1e4){let options=typeof opts==`number`?{timeout:opts,encoding:`utf8`}:{timeout:opts.timeoutMs,maxBuffer:opts.maxBuffer,encoding:`utf8`};try{let{stdout,stderr}=await execFileAsync(resolveCommand(command),args,options);return shouldLogVerbose()&&(stdout.trim()&&logDebug(stdout.trim()),stderr.trim()&&logError(stderr.trim())),{stdout,stderr}}catch(err){throw shouldLogVerbose()&&logError(danger(`Command failed: ${command} ${args.join(` `)}`)),err}}async function runCommandWithTimeout(argv,optionsOrTimeout){let options=typeof optionsOrTimeout==`number`?{timeoutMs:optionsOrTimeout}:optionsOrTimeout,{timeoutMs,cwd,input,env,noOutputTimeoutMs}=options,{windowsVerbatimArguments}=options,hasInput=input!==void 0,shouldSuppressNpmFund=(()=>{let cmd=path.basename(argv[0]??``);return cmd===`npm`||cmd===`npm.cmd`||cmd===`npm.exe`?!0:cmd===`node`||cmd===`node.exe`?(argv[1]??``).includes(`npm-cli.js`):!1})(),mergedEnv=env?{...process.env,...env}:{...process.env},resolvedEnv=Object.fromEntries(Object.entries(mergedEnv).filter(([,value])=>value!==void 0).map(([key,value])=>[key,String(value)]));shouldSuppressNpmFund&&(resolvedEnv.NPM_CONFIG_FUND??=`false`,resolvedEnv.npm_config_fund??=`false`);let stdio=resolveCommandStdio({hasInput,preferInherit:!0}),resolvedCommand=resolveCommand(argv[0]??``),child=spawn(resolvedCommand,argv.slice(1),{stdio,cwd,env:resolvedEnv,windowsVerbatimArguments,...shouldSpawnWithShell({resolvedCommand,platform:process.platform})?{shell:!0}:{}});return await new Promise((resolve,reject)=>{let stdout=``,stderr=``,settled=!1,timedOut=!1,noOutputTimedOut=!1,noOutputTimer=null,shouldTrackOutputTimeout=typeof noOutputTimeoutMs==`number`&&Number.isFinite(noOutputTimeoutMs)&&noOutputTimeoutMs>0,clearNoOutputTimer=()=>{noOutputTimer&&=(clearTimeout(noOutputTimer),null)},armNoOutputTimer=()=>{!shouldTrackOutputTimeout||settled||(clearNoOutputTimer(),noOutputTimer=setTimeout(()=>{settled||(noOutputTimedOut=!0,typeof child.kill==`function`&&child.kill(`SIGKILL`))},Math.floor(noOutputTimeoutMs)))},timer=setTimeout(()=>{timedOut=!0,typeof child.kill==`function`&&child.kill(`SIGKILL`)},timeoutMs);armNoOutputTimer(),hasInput&&child.stdin&&(child.stdin.write(input??``),child.stdin.end()),child.stdout?.on(`data`,d=>{stdout+=d.toString(),armNoOutputTimer()}),child.stderr?.on(`data`,d=>{stderr+=d.toString(),armNoOutputTimer()}),child.on(`error`,err=>{settled||(settled=!0,clearTimeout(timer),clearNoOutputTimer(),reject(err))}),child.on(`close`,(code,signal)=>{if(settled)return;settled=!0,clearTimeout(timer),clearNoOutputTimer();let termination=noOutputTimedOut?`no-output-timeout`:timedOut?`timeout`:signal==null?`exit`:`signal`;resolve({pid:child.pid??void 0,stdout,stderr,code,signal,killed:child.killed,termination,noOutputTimedOut})})})}function normalizeSkillFilter(skillFilter){if(skillFilter!==void 0)return skillFilter.map(entry=>String(entry).trim()).filter(Boolean)}const CORE_PACKAGE_NAMES=[`@seanhogg/builderforce-agents`,...[`builderforce`]],CORE_PACKAGE_NAME_SET=new Set(CORE_PACKAGE_NAMES);function isCorePackageName(name){return!!(name&&CORE_PACKAGE_NAME_SET.has(name))}async function readPackageName(dir){try{let raw=await fs$1.readFile(path.join(dir,`package.json`),`utf-8`),parsed=JSON.parse(raw);return typeof parsed.name==`string`?parsed.name:null}catch{return null}}function readPackageNameSync(dir){try{let raw=fs.readFileSync(path.join(dir,`package.json`),`utf-8`),parsed=JSON.parse(raw);return typeof parsed.name==`string`?parsed.name:null}catch{return null}}async function findPackageRoot(startDir,maxDepth=12){let current=path.resolve(startDir);for(let i=0;i<maxDepth;i+=1){if(isCorePackageName(await readPackageName(current)))return current;let parent=path.dirname(current);if(parent===current)break;current=parent}return null}function findPackageRootSync(startDir,maxDepth=12){let current=path.resolve(startDir);for(let i=0;i<maxDepth;i+=1){if(isCorePackageName(readPackageNameSync(current)))return current;let parent=path.dirname(current);if(parent===current)break;current=parent}return null}function candidateDirsFromArgv1(argv1){let normalized=path.resolve(argv1),candidates=[path.dirname(normalized)];try{let resolved=fs.realpathSync(normalized);resolved!==normalized&&candidates.push(path.dirname(resolved))}catch{}let parts=normalized.split(path.sep),binIndex=parts.lastIndexOf(`.bin`);if(binIndex>0&&parts[binIndex-1]===`node_modules`){let binName=path.basename(normalized),nodeModulesDir=parts.slice(0,binIndex).join(path.sep);candidates.push(path.join(nodeModulesDir,binName))}return candidates}async function resolveBuilderForceAgentsPackageRoot(opts){for(let candidate of buildCandidates(opts)){let found=await findPackageRoot(candidate);if(found)return found}return null}function resolveBuilderForceAgentsPackageRootSync(opts){for(let candidate of buildCandidates(opts)){let found=findPackageRootSync(candidate);if(found)return found}return null}function buildCandidates(opts){let candidates=[];return opts.moduleUrl&&candidates.push(path.dirname(fileURLToPath(opts.moduleUrl))),opts.argv1&&candidates.push(...candidateDirsFromArgv1(opts.argv1)),opts.cwd&&candidates.push(opts.cwd),candidates}const FALLBACK_TEMPLATE_DIR=path.resolve(path.dirname(fileURLToPath(import.meta.url)),`../../foundation`);let cachedTemplateDir,resolvingTemplateDir;async function resolveWorkspaceTemplateDir(opts){if(cachedTemplateDir)return cachedTemplateDir;if(resolvingTemplateDir)return resolvingTemplateDir;resolvingTemplateDir=(async()=>{let moduleUrl=opts?.moduleUrl??import.meta.url,argv1=opts?.argv1??process.argv[1],cwd=opts?.cwd??process.cwd(),packageRoot=await resolveBuilderForceAgentsPackageRoot({moduleUrl,argv1,cwd}),candidates=[packageRoot?path.join(packageRoot,`foundation`):null,cwd?path.resolve(cwd,`foundation`):null,FALLBACK_TEMPLATE_DIR].filter(Boolean);for(let candidate of candidates)if(await pathExists(candidate))return cachedTemplateDir=candidate,candidate;return cachedTemplateDir=candidates[0]??FALLBACK_TEMPLATE_DIR,cachedTemplateDir})();try{return await resolvingTemplateDir}finally{resolvingTemplateDir=void 0}}function resolveDefaultAgentWorkspaceDir(env=process.env,homedir=os.homedir){let home=resolveRequiredHomeDir(env,homedir),profile=env.BUILDERFORCE_AGENTS_PROFILE?.trim();return profile&&profile.toLowerCase()!==`default`?path.join(home,`.builderforce`,`workspace-${profile}`):path.join(home,`.builderforce`,`workspace`)}const DEFAULT_AGENT_WORKSPACE_DIR=resolveDefaultAgentWorkspaceDir(),DEFAULT_AGENTS_FILENAME=`AGENTS.md`,DEFAULT_SOUL_FILENAME=`SOUL.md`,DEFAULT_TOOLS_FILENAME=`TOOLS.md`,DEFAULT_IDENTITY_FILENAME=`IDENTITY.md`,DEFAULT_USER_FILENAME=`USER.md`,DEFAULT_HEARTBEAT_FILENAME=`HEARTBEAT.md`,DEFAULT_BOOTSTRAP_FILENAME=`BOOTSTRAP.md`,EMBEDDED_WORKSPACE_TEMPLATES={[DEFAULT_AGENTS_FILENAME]:`# AGENTS
|
|
2
2
|
|
|
3
3
|
Project rules and collaboration guidelines for this workspace.
|
|
4
4
|
`,[DEFAULT_SOUL_FILENAME]:`# SOUL
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{l as normalizeProviderId}from"./model-selection-
|
|
1
|
+
import{l as normalizeProviderId}from"./model-selection-K82MAGlL.js";import{n as formatErrorMessage}from"./errors-L3rugjUL.js";const SESSION_TRANSCRIPT_LISTENERS=new Set;function onSessionTranscriptUpdate(listener){return SESSION_TRANSCRIPT_LISTENERS.add(listener),()=>{SESSION_TRANSCRIPT_LISTENERS.delete(listener)}}function emitSessionTranscriptUpdate(sessionFile){let trimmed=sessionFile.trim();if(!trimmed)return;let update={sessionFile:trimmed};for(let listener of SESSION_TRANSCRIPT_LISTENERS)listener(update)}function parseGeminiAuth(apiKey){if(apiKey.startsWith(`{`))try{let parsed=JSON.parse(apiKey);if(typeof parsed.token==`string`&&parsed.token)return{headers:{Authorization:`Bearer ${parsed.token}`,"Content-Type":`application/json`}}}catch{}return{headers:{"x-goog-api-key":apiKey,"Content-Type":`application/json`}}}const KEY_SPLIT_RE=/[\s,;]+/g,GOOGLE_LIVE_SINGLE_KEY=`BUILDERFORCE_AGENTS_LIVE_GEMINI_KEY`,PROVIDER_PREFIX_OVERRIDES={google:`GEMINI`,"google-vertex":`GEMINI`},PROVIDER_API_KEY_CONFIG={anthropic:{liveSingle:`BUILDERFORCE_AGENTS_LIVE_ANTHROPIC_KEY`,listVar:`BUILDERFORCE_AGENTS_LIVE_ANTHROPIC_KEYS`,primaryVar:`ANTHROPIC_API_KEY`,prefixedVar:`ANTHROPIC_API_KEY_`},google:{liveSingle:GOOGLE_LIVE_SINGLE_KEY,listVar:`GEMINI_API_KEYS`,primaryVar:`GEMINI_API_KEY`,prefixedVar:`GEMINI_API_KEY_`},"google-vertex":{liveSingle:GOOGLE_LIVE_SINGLE_KEY,listVar:`GEMINI_API_KEYS`,primaryVar:`GEMINI_API_KEY`,prefixedVar:`GEMINI_API_KEY_`},openai:{liveSingle:`BUILDERFORCE_AGENTS_LIVE_OPENAI_KEY`,listVar:`OPENAI_API_KEYS`,primaryVar:`OPENAI_API_KEY`,prefixedVar:`OPENAI_API_KEY_`}};function parseKeyList(raw){return raw?raw.split(KEY_SPLIT_RE).map(value=>value.trim()).filter(Boolean):[]}function collectEnvPrefixedKeys(prefix){let keys=[];for(let[name,value]of Object.entries(process.env)){if(!name.startsWith(prefix))continue;let trimmed=value?.trim();trimmed&&keys.push(trimmed)}return keys}function resolveProviderApiKeyConfig(provider){let normalized=normalizeProviderId(provider),custom=PROVIDER_API_KEY_CONFIG[normalized],base=PROVIDER_PREFIX_OVERRIDES[normalized]??normalized.toUpperCase().replace(/-/g,`_`),liveSingle=custom?.liveSingle??`BUILDERFORCE_AGENTS_LIVE_${base}_KEY`,listVar=custom?.listVar??`${base}_API_KEYS`,primaryVar=custom?.primaryVar??`${base}_API_KEY`,prefixedVar=custom?.prefixedVar??`${base}_API_KEY_`;return normalized===`google`||normalized===`google-vertex`?{liveSingle,listVar,primaryVar,prefixedVar,fallbackVars:[`GOOGLE_API_KEY`]}:{liveSingle,listVar,primaryVar,prefixedVar,fallbackVars:[]}}function collectProviderApiKeys(provider){let config=resolveProviderApiKeyConfig(provider),forcedSingle=config.liveSingle?process.env[config.liveSingle]?.trim():void 0;if(forcedSingle)return[forcedSingle];let fromList=parseKeyList(config.listVar?process.env[config.listVar]:void 0),primary=config.primaryVar?process.env[config.primaryVar]?.trim():void 0,fromPrefixed=config.prefixedVar?collectEnvPrefixedKeys(config.prefixedVar):[],fallback=config.fallbackVars.map(envVar=>process.env[envVar]?.trim()).filter(Boolean),seen=new Set,add=value=>{value&&(seen.has(value)||seen.add(value))};for(let value of fromList)add(value);add(primary);for(let value of fromPrefixed)add(value);for(let value of fallback)add(value);return Array.from(seen)}function isApiKeyRateLimitError(message){let lower=message.toLowerCase();return!!(lower.includes(`rate_limit`)||lower.includes(`rate limit`)||lower.includes(`429`)||lower.includes(`quota exceeded`)||lower.includes(`quota_exceeded`)||lower.includes(`resource exhausted`)||lower.includes(`resource_exhausted`)||lower.includes(`too many requests`))}function dedupeApiKeys(raw){let seen=new Set,keys=[];for(let value of raw){let apiKey=value.trim();!apiKey||seen.has(apiKey)||(seen.add(apiKey),keys.push(apiKey))}return keys}function collectProviderApiKeysForExecution(params){let{primaryApiKey,provider}=params;return dedupeApiKeys([primaryApiKey?.trim()??``,...collectProviderApiKeys(provider)])}async function executeWithApiKeyRotation(params){let keys=dedupeApiKeys(params.apiKeys);if(keys.length===0)throw Error(`No API keys configured for provider "${params.provider}".`);let lastError;for(let attempt=0;attempt<keys.length;attempt+=1){let apiKey=keys[attempt];try{return await params.execute(apiKey)}catch(error){lastError=error;let message=formatErrorMessage(error);if(!(params.shouldRetry?params.shouldRetry({apiKey,error,attempt,message}):isApiKeyRateLimitError(message))||attempt+1>=keys.length)break;params.onRetry?.({apiKey,error,attempt,message})}}throw lastError===void 0?Error(`Failed to run API request for ${params.provider}.`):lastError}export{onSessionTranscriptUpdate as a,emitSessionTranscriptUpdate as i,executeWithApiKeyRotation as n,parseGeminiAuth as r,collectProviderApiKeysForExecution as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./session-key-5J69DULS.js";import"./accounts-
|
|
1
|
+
import"./session-key-5J69DULS.js";import"./accounts-BwreSNAR.js";import{G as shouldLogVerbose,H as logVerbose}from"./registry-DJq2Cvo9.js";import"./paths-Cb8zTlyG.js";import"./model-selection-K82MAGlL.js";import"./config-v1EU9Ll8.js";import"./fetch-DH0Y8iyO.js";import"./subsystem-COTa5Ly_.js";import"./agent-scope-BQByW0cD.js";import"./tool-images-DSpchb4x.js";import{a as runCapability,n as createMediaAttachmentCache,o as isAudioAttachment,r as normalizeMediaAttachments,t as buildProviderRegistry}from"./runner-CYkuO7Fh.js";import"./redact-Bv8wnIZm.js";import"./errors-L3rugjUL.js";import"./chrome-SOXFIkUM.js";import"./command-format-CAX9XFjI.js";import"./plugins-CaUOZBVb.js";import"./bindings-CDEzl4kl.js";import"./message-channel-sBPQc_-T.js";import"./src-BcDibXPq.js";import"./paths-DtbnCdO7.js";import"./api-key-rotation-7YdImWrh.js";import"./model-catalog-cXsza5GU.js";async function transcribeFirstAudio(params){let{ctx,cfg}=params,audioConfig=cfg.tools?.media?.audio;if(!audioConfig||audioConfig.enabled===!1)return;let attachments=normalizeMediaAttachments(ctx);if(!attachments||attachments.length===0)return;let firstAudio=attachments.find(att=>att&&isAudioAttachment(att)&&!att.alreadyTranscribed);if(!firstAudio)return;shouldLogVerbose()&&logVerbose(`audio-preflight: transcribing attachment ${firstAudio.index} for mention check`);let providerRegistry=buildProviderRegistry(params.providers),cache=createMediaAttachmentCache(attachments);try{let result=await runCapability({capability:`audio`,cfg,ctx,attachments:cache,media:attachments,agentDir:params.agentDir,providerRegistry,config:audioConfig,activeModel:params.activeModel});if(!result||result.outputs.length===0)return;let audioOutput=result.outputs.find(output=>output.kind===`audio.transcription`);return!audioOutput||!audioOutput.text?void 0:(firstAudio.alreadyTranscribed=!0,shouldLogVerbose()&&logVerbose(`audio-preflight: transcribed ${audioOutput.text.length} chars from attachment ${firstAudio.index}`),audioOutput.text)}catch(err){shouldLogVerbose()&&logVerbose(`audio-preflight: transcription failed: ${String(err)}`);return}finally{await cache.cleanup()}}export{transcribeFirstAudio};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./session-key-5J69DULS.js";import"./registry-
|
|
1
|
+
import"./session-key-5J69DULS.js";import"./registry-DJq2Cvo9.js";import"./paths-Cb8zTlyG.js";import{l as normalizeProviderId,lt as ensureAuthProfileStore}from"./model-selection-K82MAGlL.js";import"./subsystem-COTa5Ly_.js";import"./agent-scope-BQByW0cD.js";import"./command-format-CAX9XFjI.js";import"./src-BcDibXPq.js";import path from"node:path";import fs from"node:fs/promises";async function readAuthJson(filePath){try{let raw=await fs.readFile(filePath,`utf8`),parsed=JSON.parse(raw);return!parsed||typeof parsed!=`object`?{}:parsed}catch{return{}}}function convertCredential(cred){if(cred.type===`api_key`){let key=typeof cred.key==`string`?cred.key.trim():``;return key?{type:`api_key`,key}:null}if(cred.type===`token`){let token=typeof cred.token==`string`?cred.token.trim():``;if(!token)return null;let expires=typeof cred.expires==`number`?cred.expires:NaN;return Number.isFinite(expires)&&expires>0&&Date.now()>=expires?null:{type:`api_key`,key:token}}if(cred.type===`oauth`){let accessRaw=cred.access,refreshRaw=cred.refresh,expiresRaw=cred.expires,access=typeof accessRaw==`string`?accessRaw.trim():``,refresh=typeof refreshRaw==`string`?refreshRaw.trim():``,expires=typeof expiresRaw==`number`?expiresRaw:NaN;return!access||!refresh||!Number.isFinite(expires)||expires<=0?null:{type:`oauth`,access,refresh,expires}}return null}function credentialsEqual(a,b){return!a||typeof a!=`object`||a.type!==b.type?!1:a.type===`api_key`&&b.type===`api_key`?a.key===b.key:a.type===`oauth`&&b.type===`oauth`?a.access===b.access&&a.refresh===b.refresh&&a.expires===b.expires:!1}async function ensureAuthJsonFromAuthProfiles(agentDir){let store=await ensureAuthProfileStore(agentDir,{allowKeychainPrompt:!1}),authPath=path.join(agentDir,`auth.json`),providerCredentials=new Map;for(let[,cred]of Object.entries(store.profiles)){let provider=normalizeProviderId(String(cred.provider??``)).trim();if(!provider||providerCredentials.has(provider))continue;let converted=convertCredential(cred);converted&&providerCredentials.set(provider,converted)}if(providerCredentials.size===0)return{wrote:!1,authPath};let existing=await readAuthJson(authPath),changed=!1;for(let[provider,cred]of providerCredentials)credentialsEqual(existing[provider],cred)||(existing[provider]=cred,changed=!0);return changed?(await fs.mkdir(agentDir,{recursive:!0,mode:448}),await fs.writeFile(authPath,`${JSON.stringify(existing,null,2)}\n`,{mode:384}),{wrote:!0,authPath}):{wrote:!1,authPath}}export{ensureAuthJsonFromAuthProfiles};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as normalizeAccountId,l as normalizeAgentId}from"./session-key-5J69DULS.js";import{o as normalizeChatChannelId}from"./registry-
|
|
1
|
+
import{c as normalizeAccountId,l as normalizeAgentId}from"./session-key-5J69DULS.js";import{o as normalizeChatChannelId}from"./registry-DJq2Cvo9.js";import{c as resolveDefaultAgentId}from"./agent-scope-BQByW0cD.js";function normalizeBindingChannelId(raw){return normalizeChatChannelId(raw)||(raw??``).trim().toLowerCase()||null}function listBindings(cfg){return Array.isArray(cfg.bindings)?cfg.bindings:[]}function resolveNormalizedBindingMatch(binding){if(!binding||typeof binding!=`object`)return null;let match=binding.match;if(!match||typeof match!=`object`)return null;let channelId=normalizeBindingChannelId(match.channel);if(!channelId)return null;let accountId=typeof match.accountId==`string`?match.accountId.trim():``;return!accountId||accountId===`*`?null:{agentId:normalizeAgentId(binding.agentId),accountId:normalizeAccountId(accountId),channelId}}function listBoundAccountIds(cfg,channelId){let normalizedChannel=normalizeBindingChannelId(channelId);if(!normalizedChannel)return[];let ids=new Set;for(let binding of listBindings(cfg)){let resolved=resolveNormalizedBindingMatch(binding);!resolved||resolved.channelId!==normalizedChannel||ids.add(resolved.accountId)}return Array.from(ids).toSorted((a,b)=>a.localeCompare(b))}function resolveDefaultAgentBoundAccountId(cfg,channelId){let normalizedChannel=normalizeBindingChannelId(channelId);if(!normalizedChannel)return null;let defaultAgentId=normalizeAgentId(resolveDefaultAgentId(cfg));for(let binding of listBindings(cfg)){let resolved=resolveNormalizedBindingMatch(binding);if(!(!resolved||resolved.channelId!==normalizedChannel||resolved.agentId!==defaultAgentId))return resolved.accountId}return null}export{listBoundAccountIds as n,resolveDefaultAgentBoundAccountId as r,listBindings as t};
|