@stacksjs/buddy 0.70.45 → 0.70.53

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/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ # MIT License
2
+
3
+ Copyright (c) 2023 Open Web Foundation
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/cli.js CHANGED
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- var JJ=Object.create;var{getPrototypeOf:QJ,defineProperty:E,getOwnPropertyNames:XJ}=Object;var ZJ=Object.prototype.hasOwnProperty;function $J(J){return this[J]}var WJ,BJ,rJ=(J,Q,Z)=>{var X=J!=null&&typeof J==="object";if(X){var $=Q?WJ??=new WeakMap:BJ??=new WeakMap,W=$.get(J);if(W)return W}Z=J!=null?JJ(QJ(J)):{};let B=Q||!J||!J.__esModule?E(Z,"default",{value:J,enumerable:!0}):Z;for(let G of XJ(J))if(!ZJ.call(B,G))E(B,G,{get:$J.bind(J,G),enumerable:!0});if(X)$.set(J,B);return B};var gJ=(J,Q)=>()=>(Q||J((Q={exports:{}}).exports,Q),Q.exports);var GJ=(J)=>J;function VJ(J,Q){this[J]=GJ.bind(null,Q)}var P=(J,Q)=>{for(var Z in Q)E(J,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:VJ.bind(Q,Z)})};var h=(J,Q)=>()=>(J&&(Q=J(J=0)),Q);var q=import.meta.require;var u={};P(u,{validateConfig:()=>f,loadPlugins:()=>YJ,loadBuddyConfig:()=>p,applyBuddyConfig:()=>HJ});import{existsSync as zJ}from"fs";import{log as L}from"@stacksjs/cli";import{path as I}from"@stacksjs/path";function f(J){let Q=[];if(typeof J!=="object"||J===null)return Q.push({path:"config",message:"Config must be an object",value:J}),Q;if(J.theme!==void 0){let X=["default","dracula","nord","solarized","monokai"];if(typeof J.theme!=="string"||!X.includes(J.theme))Q.push({path:"theme",message:`Theme must be one of: ${X.join(", ")}`,value:J.theme})}if(J.emoji!==void 0&&typeof J.emoji!=="boolean")Q.push({path:"emoji",message:"Emoji must be a boolean",value:J.emoji});if(J.commands!==void 0)if(!Array.isArray(J.commands))Q.push({path:"commands",message:"Commands must be an array",value:J.commands});else J.commands.forEach((X,$)=>{if(typeof X!=="function")Q.push({path:`commands[${$}]`,message:"Each command must be a function",value:X})});if(J.defaultFlags!==void 0)if(typeof J.defaultFlags!=="object"||J.defaultFlags===null)Q.push({path:"defaultFlags",message:"Default flags must be an object",value:J.defaultFlags});else{let X=["verbose","quiet","debug"];for(let $ of Object.keys(J.defaultFlags))if(!X.includes($))Q.push({path:`defaultFlags.${$}`,message:`Unknown flag. Valid flags are: ${X.join(", ")}`,value:J.defaultFlags[$]});else if(typeof J.defaultFlags[$]!=="boolean")Q.push({path:`defaultFlags.${$}`,message:"Flag value must be a boolean",value:J.defaultFlags[$]})}if(J.aliases!==void 0){if(typeof J.aliases!=="object"||J.aliases===null||Array.isArray(J.aliases))Q.push({path:"aliases",message:"Aliases must be an object mapping alias names to command names",value:J.aliases});else for(let[X,$]of Object.entries(J.aliases))if(typeof $!=="string")Q.push({path:`aliases.${X}`,message:"Alias target must be a string",value:$})}if(J.plugins!==void 0)if(!Array.isArray(J.plugins))Q.push({path:"plugins",message:"Plugins must be an array",value:J.plugins});else J.plugins.forEach((X,$)=>{if(typeof X==="string")return;if(typeof X!=="object"||X===null){Q.push({path:`plugins[${$}]`,message:"Each plugin must be an object or a string (module path)",value:X});return}if(!X.name||typeof X.name!=="string")Q.push({path:`plugins[${$}].name`,message:"Plugin must have a name property of type string",value:X.name});if(!X.setup||typeof X.setup!=="function")Q.push({path:`plugins[${$}].setup`,message:"Plugin must have a setup function",value:X.setup});if(X.hooks!==void 0){if(typeof X.hooks!=="object"||X.hooks===null)Q.push({path:`plugins[${$}].hooks`,message:"Plugin hooks must be an object",value:X.hooks})}});let Z=["theme","emoji","commands","defaultFlags","aliases","plugins"];for(let X of Object.keys(J))if(!Z.includes(X))Q.push({path:X,message:`Unknown configuration key. Valid keys are: ${Z.join(", ")}`,value:J[X]});return Q}async function p(){if(A)return A;let J=[I.projectPath("buddy.config.ts"),I.projectPath("buddy.config.js"),I.projectPath(".buddy.config.ts"),I.projectPath(".buddy.config.js")];for(let Q of J)if(zJ(Q))try{L.debug(`Loading buddy config from ${Q}`);let Z=await import(Q),X=Z.default||Z,$=f(X);if($.length>0){L.error("Invalid buddy.config.ts:");for(let W of $)L.error(` - ${W.path}: ${W.message}`);throw Error("Configuration validation failed")}return A=X,A}catch(Z){L.warn(`Failed to load buddy config from ${Q}:`,Z)}return A={},A}async function YJ(J,Q){if(!Q.plugins||Q.plugins.length===0)return;L.debug(`Loading ${Q.plugins.length} plugin(s)`);for(let Z of Q.plugins){let X;if(typeof Z==="string")try{let $=await import(Z);X=$.default||$}catch($){L.error(`Failed to load plugin from ${Z}:`,$);continue}else X=Z;try{if(L.debug(`Initializing plugin: ${X.name}${X.version?` v${X.version}`:""}`),await X.setup(J),X.hooks){if(X.hooks.beforeCommand)J.on("command:*",async($)=>{if(X.hooks?.beforeCommand)await X.hooks.beforeCommand({command:$})});if(X.hooks.afterCommand)J.on("command:*",async($)=>{if(X.hooks?.afterCommand)await X.hooks.afterCommand({command:$})})}L.debug(`Plugin ${X.name} initialized successfully`)}catch($){L.error(`Failed to initialize plugin ${X.name}:`,$)}}}async function HJ(J){let Q=await p();if(Q.emoji!==void 0&&J.options.noEmoji===void 0)J.useEmoji=Q.emoji;if(Q.defaultFlags){if(Q.defaultFlags.verbose&&!J.isVerbose)J.isVerbose=!0;if(Q.defaultFlags.quiet&&!J.isQuiet)J.isQuiet=!0;if(Q.defaultFlags.debug&&!J.isDebug)J.isDebug=!0}if(Q.commands&&Array.isArray(Q.commands)){for(let Z of Q.commands)if(typeof Z==="function")Z(J)}if(Q.aliases)for(let[Z,X]of Object.entries(Q.aliases)){let $=J.commands.find((W)=>W.name===X);if($&&!$.aliasNames.includes(Z))$.aliasNames.push(Z)}}var A=null;var m=()=>{};var C={};P(C,{markLoaded:()=>UJ,loadCommands:()=>k,loadCommandGroup:()=>OJ,loadCommand:()=>t,loadAllCommands:()=>KJ,getCommandsToLoad:()=>AJ,getCommandNames:()=>qJ});function l(J){return`${J.path}#${J.exportName}`}function UJ(J,Q){let Z=Y[Q];if(!Z)return;let X=T.get(J);if(!X)X=new Set,T.set(J,X);X.add(l(Z))}async function t(J,Q){let Z=Y[J];if(!Z)return!1;let X=T.get(Q);if(!X)X=new Set,T.set(Q,X);let $=l(Z);if(X.has($))return!0;X.add($);try{let B=(await import(Z.path))[Z.exportName];if(typeof B==="function")return B(Q),!0;else return!1}catch{return!1}}async function k(J,Q){let Z=(W)=>new Promise((B,G)=>setTimeout(()=>G(Error("timeout")),W)),X=new Set,$=[];for(let W of J){let B=Y[W],G=B?`${B.path}#${B.exportName}`:`name:${W}`;if(X.has(G))continue;X.add(G),$.push(W)}await Promise.all($.map(async(W)=>{try{await Promise.race([t(W,Q),Z(5000)])}catch{}}))}async function OJ(J,Q){let Z=LJ[J];if(Z)await k(Z,Q)}async function KJ(J){let Q=Object.keys(Y);await k(Q,J)}function qJ(){return Object.keys(Y)}function AJ(J){let Q=J[0],Z=Q==="--version"||Q==="-v",X=Q==="--help"||Q==="-h",$=Q==="help";if(Z)return["version"];if(!Q||X||$)return Object.keys(Y);let W=Q.split(":")[0];if(W==="list")return["list",...Object.keys(Y).filter((B)=>B!=="list")];if(Y[W])return[W];if(Q.includes(":")){let B=W;if(Y[B])return[B]}return Object.keys(Y)}var Y,LJ,T;var b=h(()=>{Y={about:{path:"./commands/about.ts",exportName:"about"},add:{path:"./commands/add.ts",exportName:"add"},auth:{path:"./commands/auth.ts",exportName:"auth"},build:{path:"./commands/build.ts",exportName:"build"},changelog:{path:"./commands/changelog.ts",exportName:"changelog"},clean:{path:"./commands/clean.ts",exportName:"clean"},cloud:{path:"./commands/cloud.ts",exportName:"cloud"},commit:{path:"./commands/commit.ts",exportName:"commit"},completion:{path:"./commands/completion.ts",exportName:"completion"},"config:migrate":{path:"./commands/config-migrate.ts",exportName:"configMigrate"},configure:{path:"./commands/configure.ts",exportName:"configure"},create:{path:"./commands/create.ts",exportName:"create"},deploy:{path:"./commands/deploy.ts",exportName:"deploy"},dev:{path:"./commands/dev.ts",exportName:"dev"},dns:{path:"./commands/dns.ts",exportName:"dns"},doctor:{path:"./commands/doctor.ts",exportName:"doctor"},domains:{path:"./commands/domains.ts",exportName:"domains"},email:{path:"./commands/email.ts",exportName:"email"},env:{path:"./commands/env.ts",exportName:"env"},fresh:{path:"./commands/fresh.ts",exportName:"fresh"},generate:{path:"./commands/generate.ts",exportName:"generate"},http:{path:"./commands/http.ts",exportName:"http"},install:{path:"./commands/install.ts",exportName:"install"},key:{path:"./commands/key.ts",exportName:"key"},lint:{path:"./commands/lint.ts",exportName:"lint"},list:{path:"./commands/list.ts",exportName:"list"},mail:{path:"./commands/mail.ts",exportName:"mailCommands"},maintenance:{path:"./commands/maintenance.ts",exportName:"maintenance"},down:{path:"./commands/maintenance.ts",exportName:"maintenance"},up:{path:"./commands/maintenance.ts",exportName:"maintenance"},status:{path:"./commands/maintenance.ts",exportName:"maintenance"},make:{path:"./commands/make.ts",exportName:"make"},migrate:{path:"./commands/migrate.ts",exportName:"migrate"},outdated:{path:"./commands/outdated.ts",exportName:"outdated"},package:{path:"./commands/package.ts",exportName:"packageCommands"},phone:{path:"./commands/phone.ts",exportName:"phone"},ports:{path:"./commands/ports.ts",exportName:"ports"},prepublish:{path:"./commands/prepublish.ts",exportName:"prepublish"},projects:{path:"./commands/projects.ts",exportName:"projects"},publish:{path:"./commands/publish.ts",exportName:"publish"},"publish:model":{path:"./commands/publish.ts",exportName:"publish"},"publish:controller":{path:"./commands/publish.ts",exportName:"publish"},"publish:middleware":{path:"./commands/publish.ts",exportName:"publish"},"publish:action":{path:"./commands/publish.ts",exportName:"publish"},"publish:core":{path:"./commands/publish.ts",exportName:"publish"},queue:{path:"./commands/queue.ts",exportName:"queue"},release:{path:"./commands/release.ts",exportName:"release"},route:{path:"./commands/route.ts",exportName:"route"},saas:{path:"./commands/saas.ts",exportName:"saas"},schedule:{path:"./commands/schedule.ts",exportName:"schedule"},search:{path:"./commands/search.ts",exportName:"search"},seed:{path:"./commands/seed.ts",exportName:"seed"},setup:{path:"./commands/setup.ts",exportName:"setup"},share:{path:"./commands/share.ts",exportName:"share"},stack:{path:"./commands/stacks.ts",exportName:"stacks"},sms:{path:"./commands/sms.ts",exportName:"sms"},telemetry:{path:"./commands/telemetry.ts",exportName:"telemetryCommand"},test:{path:"./commands/test.ts",exportName:"test"},tinker:{path:"./commands/tinker.ts",exportName:"tinker"},types:{path:"./commands/types.ts",exportName:"types"},undeploy:{path:"./commands/cloud.ts",exportName:"cloud"},upgrade:{path:"./commands/upgrade.ts",exportName:"upgrade"},version:{path:"./commands/version.ts",exportName:"version"}},LJ={minimal:["version","help"],development:["dev","build","test","lint"],database:["migrate","seed","fresh"],scaffolding:["make","generate"],deployment:["deploy","release","cloud"],info:["about","doctor","list"]},T=new WeakMap});var d={};P(d,{setup:()=>wJ,optimizePantryDeps:()=>s,ensurePantryInstalled:()=>g,ensurePantryDependencies:()=>a,ensureEnvIsSet:()=>i,ensureAppKey:()=>c});import{existsSync as j,readFileSync as r,writeFileSync as DJ}from"fs";import{join as N}from"path";import O from"process";import{runAction as FJ,setupSSL as _J}from"@stacksjs/actions";import{log as V,onUnknownSubcommand as NJ,runCommand as R}from"@stacksjs/cli";import{Action as RJ}from"@stacksjs/enums";import{handleError as M}from"@stacksjs/error-handling";import{path as v}from"@stacksjs/path";import{copyFile as MJ,storage as SJ}from"@stacksjs/storage";import{ExitCode as D}from"@stacksjs/types";function S(J,Q){let Z=Number(O.env[J]);if(Number.isFinite(Z)&&Z>0)return Z;return Q}function wJ(J){let Q={setup:"This command ensures your project is setup correctly",ssl:"Setup SSL certificates and hosts file for HTTPS development",ohMyZsh:"Enable Oh My Zsh",aws:"Ensures AWS is connected to the project",project:"Target a specific project",verbose:"Enable verbose output",domain:"Custom domain to setup (defaults to APP_URL)",skipHosts:"Skip adding domain to hosts file",skipTrust:"Skip trusting the certificate",skipAws:"Skip AWS configuration during setup",skipKeygen:"Skip generating an application key during setup"};J.command("setup",Q.setup).alias("ensure").option("-p, --project [project]",Q.project,{default:!1}).option("--skip-aws",Q.skipAws,{default:!1}).option("--skip-keygen",Q.skipKeygen,{default:!1}).option("--verbose",Q.verbose,{default:!1}).action(async(Z)=>{V.debug("Running `buddy setup` ...",Z),await g(),await s(),await kJ(Z)}),J.command("setup:ssl",Q.ssl).alias("ssl:setup").option("-d, --domain [domain]",Q.domain).option("--skip-hosts",Q.skipHosts,{default:!1}).option("--skip-trust",Q.skipTrust,{default:!1}).option("--verbose",Q.verbose,{default:!1}).action(async(Z)=>{if(V.debug("Running `buddy setup:ssl` ...",Z),!await _J({domain:Z.domain,skipHosts:Z.skipHosts,skipTrust:Z.skipTrust,verbose:Z.verbose}))V.warn("SSL setup completed with warnings"),V.info("You may need to manually trust certificates or update hosts file")}),J.command("setup:oh-my-zsh",Q.ohMyZsh).alias("upgrade:oh-my-zsh").option("--verbose",Q.verbose,{default:!1}).action(async(Z)=>{V.debug("Running `buddy setup:oh-my-zsh` ...",Z);let X=await FJ(RJ.UpgradeShell);if(X.isErr)V.error(X.error),O.exit(D.FatalError)}),NJ(J,"setup")}async function EJ(){if((await R("pantry --version",{silent:!0,timeoutMs:xJ})).isOk)return!0;return!1}async function PJ(){let J=await R(v.frameworkPath("scripts/pantry-install"),{timeoutMs:IJ});if(J.isOk)return;M(J.error),O.exit(D.FatalError)}async function g(){if(!await EJ())await PJ()}async function a(J){V.info("Installing Pantry dependencies...");let Q=await R("pantry install",{cwd:J,timeoutMs:TJ});if(Q.isOk){V.success("Installed Pantry dependencies");return}M(Q.error),O.exit(D.FatalError)}function hJ(J){let Q=N(J,".env");if(!j(Q))return!1;return/^APP_KEY=.+$/m.test(r(Q,"utf-8"))}async function c(J){if(hJ(J)){V.success("APP_KEY existed");return}let Q=await R("./buddy key:generate",{cwd:J,timeoutMs:jJ});if(Q.isErr)M(Q.error),O.exit(D.FatalError);V.success("Generated application key")}async function kJ(J){let Q=J.cwd||v.projectPath();if(await a(Q),await i(J),!J.skipKeygen)await c(Q);if(!J.skipAws){V.info("Ensuring AWS is connected...");let Z=await R("./buddy configure:aws",{cwd:Q,timeoutMs:vJ});if(Z.isErr)M(Z.error),O.exit(D.FatalError);V.success("Configured AWS")}V.success("Project is setup"),V.info("Happy coding! \uD83D\uDC99")}function bJ(J){let Q=N(J,".env"),Z=N(J,".env.example"),X=j(Q)?Q:j(Z)?Z:void 0;if(!X)return;let W=r(X,"utf-8").match(/^DB_CONNECTION=(.+)$/m);if(!W)return;let B=W[1].trim().replace(/['"]/g,"");return CJ[B]}async function s(){let J=v.projectPath(),Q=N(J,"config","deps.ts");if(!j(Q)){V.debug("No config/deps.ts found, skipping dependency optimization");return}let Z={};try{let B=await import(Q),G=B.config||B.default;if(G?.dependencies)Z={...G.dependencies}}catch(B){V.debug("Could not load config/deps.ts, skipping dependency optimization");return}let X=bJ(J);if(X){if(!Object.keys(Z).some((G)=>G===X||G.startsWith(`${X}/`)))V.info(`Detected DB_CONNECTION requires ${X}, adding to dependencies`),Z[X]="*"}let $=["# Auto-generated from config/deps.ts and .env sniffing.","# This file is regenerated on each `buddy setup` run.","#","# To learn more, please visit:","# https://stacksjs.com/docs/dependency-management","","dependencies:"];for(let[B,G]of Object.entries(Z))$.push(` ${B}: ${G}`);let W=N(J,"deps.yaml");DJ(W,`${$.join(`
2
+ var JJ=Object.create;var{getPrototypeOf:QJ,defineProperty:P,getOwnPropertyNames:XJ}=Object;var ZJ=Object.prototype.hasOwnProperty;function $J(J){return this[J]}var WJ,BJ,rJ=(J,Q,Z)=>{var X=J!=null&&typeof J==="object";if(X){var $=Q?WJ??=new WeakMap:BJ??=new WeakMap,W=$.get(J);if(W)return W}Z=J!=null?JJ(QJ(J)):{};let B=Q||!J||!J.__esModule?P(Z,"default",{value:J,enumerable:!0}):Z;for(let G of XJ(J))if(!ZJ.call(B,G))P(B,G,{get:$J.bind(J,G),enumerable:!0});if(X)$.set(J,B);return B};var gJ=(J,Q)=>()=>(Q||J((Q={exports:{}}).exports,Q),Q.exports);var GJ=(J)=>J;function VJ(J,Q){this[J]=GJ.bind(null,Q)}var h=(J,Q)=>{for(var Z in Q)P(J,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:VJ.bind(Q,Z)})};var k=(J,Q)=>()=>(J&&(Q=J(J=0)),Q);var q=import.meta.require;var u={};h(u,{validateConfig:()=>f,loadPlugins:()=>YJ,loadBuddyConfig:()=>p,applyBuddyConfig:()=>HJ});import{existsSync as zJ}from"fs";import{log as L}from"@stacksjs/cli";import{path as I}from"@stacksjs/path";function f(J){let Q=[];if(typeof J!=="object"||J===null)return Q.push({path:"config",message:"Config must be an object",value:J}),Q;if(J.theme!==void 0){let X=["default","dracula","nord","solarized","monokai"];if(typeof J.theme!=="string"||!X.includes(J.theme))Q.push({path:"theme",message:`Theme must be one of: ${X.join(", ")}`,value:J.theme})}if(J.emoji!==void 0&&typeof J.emoji!=="boolean")Q.push({path:"emoji",message:"Emoji must be a boolean",value:J.emoji});if(J.commands!==void 0)if(!Array.isArray(J.commands))Q.push({path:"commands",message:"Commands must be an array",value:J.commands});else J.commands.forEach((X,$)=>{if(typeof X!=="function")Q.push({path:`commands[${$}]`,message:"Each command must be a function",value:X})});if(J.defaultFlags!==void 0)if(typeof J.defaultFlags!=="object"||J.defaultFlags===null)Q.push({path:"defaultFlags",message:"Default flags must be an object",value:J.defaultFlags});else{let X=["verbose","quiet","debug"];for(let $ of Object.keys(J.defaultFlags))if(!X.includes($))Q.push({path:`defaultFlags.${$}`,message:`Unknown flag. Valid flags are: ${X.join(", ")}`,value:J.defaultFlags[$]});else if(typeof J.defaultFlags[$]!=="boolean")Q.push({path:`defaultFlags.${$}`,message:"Flag value must be a boolean",value:J.defaultFlags[$]})}if(J.aliases!==void 0){if(typeof J.aliases!=="object"||J.aliases===null||Array.isArray(J.aliases))Q.push({path:"aliases",message:"Aliases must be an object mapping alias names to command names",value:J.aliases});else for(let[X,$]of Object.entries(J.aliases))if(typeof $!=="string")Q.push({path:`aliases.${X}`,message:"Alias target must be a string",value:$})}if(J.plugins!==void 0)if(!Array.isArray(J.plugins))Q.push({path:"plugins",message:"Plugins must be an array",value:J.plugins});else J.plugins.forEach((X,$)=>{if(typeof X==="string")return;if(typeof X!=="object"||X===null){Q.push({path:`plugins[${$}]`,message:"Each plugin must be an object or a string (module path)",value:X});return}if(!X.name||typeof X.name!=="string")Q.push({path:`plugins[${$}].name`,message:"Plugin must have a name property of type string",value:X.name});if(!X.setup||typeof X.setup!=="function")Q.push({path:`plugins[${$}].setup`,message:"Plugin must have a setup function",value:X.setup});if(X.hooks!==void 0){if(typeof X.hooks!=="object"||X.hooks===null)Q.push({path:`plugins[${$}].hooks`,message:"Plugin hooks must be an object",value:X.hooks})}});let Z=["theme","emoji","commands","defaultFlags","aliases","plugins"];for(let X of Object.keys(J))if(!Z.includes(X))Q.push({path:X,message:`Unknown configuration key. Valid keys are: ${Z.join(", ")}`,value:J[X]});return Q}async function p(){if(A)return A;let J=[I.projectPath("buddy.config.ts"),I.projectPath("buddy.config.js"),I.projectPath(".buddy.config.ts"),I.projectPath(".buddy.config.js")];for(let Q of J)if(zJ(Q))try{L.debug(`Loading buddy config from ${Q}`);let Z=await import(Q),X=Z.default||Z,$=f(X);if($.length>0){L.error("Invalid buddy.config.ts:");for(let W of $)L.error(` - ${W.path}: ${W.message}`);throw Error("Configuration validation failed")}return A=X,A}catch(Z){L.warn(`Failed to load buddy config from ${Q}:`,Z)}return A={},A}async function YJ(J,Q){if(!Q.plugins||Q.plugins.length===0)return;L.debug(`Loading ${Q.plugins.length} plugin(s)`);for(let Z of Q.plugins){let X;if(typeof Z==="string")try{let $=await import(Z);X=$.default||$}catch($){L.error(`Failed to load plugin from ${Z}:`,$);continue}else X=Z;try{if(L.debug(`Initializing plugin: ${X.name}${X.version?` v${X.version}`:""}`),await X.setup(J),X.hooks){if(X.hooks.beforeCommand)J.on("command:*",async($)=>{if(X.hooks?.beforeCommand)await X.hooks.beforeCommand({command:$})});if(X.hooks.afterCommand)J.on("command:*",async($)=>{if(X.hooks?.afterCommand)await X.hooks.afterCommand({command:$})})}L.debug(`Plugin ${X.name} initialized successfully`)}catch($){L.error(`Failed to initialize plugin ${X.name}:`,$)}}}async function HJ(J){let Q=await p();if(Q.emoji!==void 0&&J.options.noEmoji===void 0)J.useEmoji=Q.emoji;if(Q.defaultFlags){if(Q.defaultFlags.verbose&&!J.isVerbose)J.isVerbose=!0;if(Q.defaultFlags.quiet&&!J.isQuiet)J.isQuiet=!0;if(Q.defaultFlags.debug&&!J.isDebug)J.isDebug=!0}if(Q.commands&&Array.isArray(Q.commands)){for(let Z of Q.commands)if(typeof Z==="function")Z(J)}if(Q.aliases)for(let[Z,X]of Object.entries(Q.aliases)){let $=J.commands.find((W)=>W.name===X);if($&&!$.aliasNames.includes(Z))$.aliasNames.push(Z)}}var A=null;var m=()=>{};var b={};h(b,{markLoaded:()=>UJ,loadCommands:()=>C,loadCommandGroup:()=>OJ,loadCommand:()=>t,loadAllCommands:()=>KJ,getCommandsToLoad:()=>AJ,getCommandNames:()=>qJ});function l(J){return`${J.path}#${J.exportName}`}function UJ(J,Q){let Z=Y[Q];if(!Z)return;let X=T.get(J);if(!X)X=new Set,T.set(J,X);X.add(l(Z))}async function t(J,Q){let Z=Y[J];if(!Z)return!1;let X=T.get(Q);if(!X)X=new Set,T.set(Q,X);let $=l(Z);if(X.has($))return!0;X.add($);try{let B=(await import(Z.path))[Z.exportName];if(typeof B==="function")return B(Q),!0;else return!1}catch{return!1}}async function C(J,Q){let Z=(W)=>new Promise((B,G)=>setTimeout(()=>G(Error("timeout")),W)),X=new Set,$=[];for(let W of J){let B=Y[W],G=B?`${B.path}#${B.exportName}`:`name:${W}`;if(X.has(G))continue;X.add(G),$.push(W)}await Promise.all($.map(async(W)=>{try{await Promise.race([t(W,Q),Z(5000)])}catch{}}))}async function OJ(J,Q){let Z=LJ[J];if(Z)await C(Z,Q)}async function KJ(J){let Q=Object.keys(Y);await C(Q,J)}function qJ(){return Object.keys(Y)}function AJ(J){let Q=J[0],Z=Q==="--version"||Q==="-v",X=Q==="--help"||Q==="-h",$=Q==="help";if(Z)return["version"];if(!Q||X||$)return Object.keys(Y);let W=Q.split(":")[0];if(W==="list")return["list",...Object.keys(Y).filter((B)=>B!=="list")];if(Y[W])return[W];if(Q.includes(":")){let B=W;if(Y[B])return[B]}return Object.keys(Y)}var Y,LJ,T;var y=k(()=>{Y={about:{path:"./commands/about.ts",exportName:"about"},add:{path:"./commands/add.ts",exportName:"add"},auth:{path:"./commands/auth.ts",exportName:"auth"},build:{path:"./commands/build.ts",exportName:"build"},cd:{path:"./commands/cd.ts",exportName:"cd"},changelog:{path:"./commands/changelog.ts",exportName:"changelog"},clean:{path:"./commands/clean.ts",exportName:"clean"},cloud:{path:"./commands/cloud.ts",exportName:"cloud"},commit:{path:"./commands/commit.ts",exportName:"commit"},completion:{path:"./commands/completion.ts",exportName:"completion"},"config:migrate":{path:"./commands/config-migrate.ts",exportName:"configMigrate"},configure:{path:"./commands/configure.ts",exportName:"configure"},create:{path:"./commands/create.ts",exportName:"create"},deploy:{path:"./commands/deploy.ts",exportName:"deploy"},dev:{path:"./commands/dev.ts",exportName:"dev"},dns:{path:"./commands/dns.ts",exportName:"dns"},doctor:{path:"./commands/doctor.ts",exportName:"doctor"},domains:{path:"./commands/domains.ts",exportName:"domains"},email:{path:"./commands/email.ts",exportName:"email"},env:{path:"./commands/env.ts",exportName:"env"},"dashboard:install":{path:"./commands/features.ts",exportName:"features"},"dashboard:uninstall":{path:"./commands/features.ts",exportName:"features"},"commerce:install":{path:"./commands/features.ts",exportName:"features"},"commerce:uninstall":{path:"./commands/features.ts",exportName:"features"},"cms:install":{path:"./commands/features.ts",exportName:"features"},"cms:uninstall":{path:"./commands/features.ts",exportName:"features"},"marketing:install":{path:"./commands/features.ts",exportName:"features"},"marketing:uninstall":{path:"./commands/features.ts",exportName:"features"},"monitoring:install":{path:"./commands/features.ts",exportName:"features"},"monitoring:uninstall":{path:"./commands/features.ts",exportName:"features"},"realtime:install":{path:"./commands/features.ts",exportName:"features"},"realtime:uninstall":{path:"./commands/features.ts",exportName:"features"},"queue:install":{path:"./commands/features.ts",exportName:"features"},"queue:uninstall":{path:"./commands/features.ts",exportName:"features"},fresh:{path:"./commands/fresh.ts",exportName:"fresh"},generate:{path:"./commands/generate.ts",exportName:"generate"},http:{path:"./commands/http.ts",exportName:"http"},install:{path:"./commands/install.ts",exportName:"install"},key:{path:"./commands/key.ts",exportName:"key"},lint:{path:"./commands/lint.ts",exportName:"lint"},list:{path:"./commands/list.ts",exportName:"list"},mail:{path:"./commands/mail.ts",exportName:"mailCommands"},"mail:preview":{path:"./commands/mail.ts",exportName:"mailCommands"},maintenance:{path:"./commands/maintenance.ts",exportName:"maintenance"},down:{path:"./commands/maintenance.ts",exportName:"maintenance"},up:{path:"./commands/maintenance.ts",exportName:"maintenance"},status:{path:"./commands/maintenance.ts",exportName:"maintenance"},make:{path:"./commands/make.ts",exportName:"make"},migrate:{path:"./commands/migrate.ts",exportName:"migrate"},"migrate:fresh":{path:"./commands/migrate.ts",exportName:"migrate"},"migrate:switch":{path:"./commands/migrate.ts",exportName:"migrate"},"migrate:dns":{path:"./commands/migrate.ts",exportName:"migrate"},"migrate:project":{path:"./commands/migrate-project.ts",exportName:"migrateProject"},outdated:{path:"./commands/outdated.ts",exportName:"outdated"},package:{path:"./commands/package.ts",exportName:"packageCommands"},phone:{path:"./commands/phone.ts",exportName:"phone"},ports:{path:"./commands/ports.ts",exportName:"ports"},prepublish:{path:"./commands/prepublish.ts",exportName:"prepublish"},projects:{path:"./commands/projects.ts",exportName:"projects"},publish:{path:"./commands/publish.ts",exportName:"publish"},"publish:model":{path:"./commands/publish.ts",exportName:"publish"},"publish:controller":{path:"./commands/publish.ts",exportName:"publish"},"publish:middleware":{path:"./commands/publish.ts",exportName:"publish"},"publish:action":{path:"./commands/publish.ts",exportName:"publish"},"publish:core":{path:"./commands/publish.ts",exportName:"publish"},queue:{path:"./commands/queue.ts",exportName:"queue"},release:{path:"./commands/release.ts",exportName:"release"},route:{path:"./commands/route.ts",exportName:"route"},saas:{path:"./commands/saas.ts",exportName:"saas"},schedule:{path:"./commands/schedule.ts",exportName:"schedule"},search:{path:"./commands/search.ts",exportName:"search"},seed:{path:"./commands/seed.ts",exportName:"seed"},"seed:roles":{path:"./commands/seed.ts",exportName:"seed"},"roles:seed":{path:"./commands/seed.ts",exportName:"seed"},serve:{path:"./commands/serve.ts",exportName:"serve"},"serve:api":{path:"./commands/serve.ts",exportName:"serveApi"},setup:{path:"./commands/setup.ts",exportName:"setup"},share:{path:"./commands/share.ts",exportName:"share"},stack:{path:"./commands/stacks.ts",exportName:"stacks"},sms:{path:"./commands/sms.ts",exportName:"sms"},telemetry:{path:"./commands/telemetry.ts",exportName:"telemetryCommand"},test:{path:"./commands/test.ts",exportName:"test"},tinker:{path:"./commands/tinker.ts",exportName:"tinker"},types:{path:"./commands/types.ts",exportName:"types"},undeploy:{path:"./commands/cloud.ts",exportName:"cloud"},upgrade:{path:"./commands/upgrade.ts",exportName:"upgrade"},version:{path:"./commands/version.ts",exportName:"version"}},LJ={minimal:["version","help"],development:["dev","build","test","lint"],database:["migrate","seed","fresh"],scaffolding:["make","generate"],deployment:["deploy","release","cloud"],info:["about","doctor","list"]},T=new WeakMap});var d={};h(d,{setup:()=>wJ,optimizePantryDeps:()=>s,ensurePantryInstalled:()=>g,ensurePantryDependencies:()=>a,ensureEnvIsSet:()=>i,ensureAppKey:()=>c});import{existsSync as j,readFileSync as r,writeFileSync as DJ}from"fs";import{join as N}from"path";import O from"process";import{runAction as FJ,setupSSL as _J}from"@stacksjs/actions";import{log as V,onUnknownSubcommand as NJ,runCommand as R}from"@stacksjs/cli";import{Action as RJ}from"@stacksjs/enums";import{handleError as M}from"@stacksjs/error-handling";import{path as v}from"@stacksjs/path";import{copyFile as MJ,storage as SJ}from"@stacksjs/storage";import{ExitCode as D}from"@stacksjs/types";function S(J,Q){let Z=Number(O.env[J]);if(Number.isFinite(Z)&&Z>0)return Z;return Q}function wJ(J){let Q={setup:"This command ensures your project is setup correctly",ssl:"Setup SSL certificates and hosts file for HTTPS development",ohMyZsh:"Enable Oh My Zsh",aws:"Ensures AWS is connected to the project",project:"Target a specific project",verbose:"Enable verbose output",domain:"Custom domain to setup (defaults to APP_URL)",skipHosts:"Skip adding domain to hosts file",skipTrust:"Skip trusting the certificate",skipAws:"Skip AWS configuration during setup",skipKeygen:"Skip generating an application key during setup"};J.command("setup",Q.setup).alias("ensure").option("-p, --project [project]",Q.project,{default:!1}).option("--skip-aws",Q.skipAws,{default:!1}).option("--skip-keygen",Q.skipKeygen,{default:!1}).option("--verbose",Q.verbose,{default:!1}).action(async(Z)=>{V.debug("Running `buddy setup` ...",Z),await g(),await s(),await kJ(Z)}),J.command("setup:ssl",Q.ssl).alias("ssl:setup").option("-d, --domain [domain]",Q.domain).option("--skip-hosts",Q.skipHosts,{default:!1}).option("--skip-trust",Q.skipTrust,{default:!1}).option("--verbose",Q.verbose,{default:!1}).action(async(Z)=>{if(V.debug("Running `buddy setup:ssl` ...",Z),!await _J({domain:Z.domain,skipHosts:Z.skipHosts,skipTrust:Z.skipTrust,verbose:Z.verbose}))V.warn("SSL setup completed with warnings"),V.info("You may need to manually trust certificates or update hosts file")}),J.command("setup:oh-my-zsh",Q.ohMyZsh).alias("upgrade:oh-my-zsh").option("--verbose",Q.verbose,{default:!1}).action(async(Z)=>{V.debug("Running `buddy setup:oh-my-zsh` ...",Z);let X=await FJ(RJ.UpgradeShell);if(X.isErr)V.error(X.error),O.exit(D.FatalError)}),NJ(J,"setup")}async function EJ(){if((await R("pantry --version",{silent:!0,timeoutMs:xJ})).isOk)return!0;return!1}async function PJ(){let J=await R(v.frameworkPath("scripts/pantry-install"),{timeoutMs:IJ});if(J.isOk)return;M(J.error),O.exit(D.FatalError)}async function g(){if(!await EJ())await PJ()}async function a(J){V.info("Installing Pantry dependencies...");let Q=await R("pantry install",{cwd:J,timeoutMs:TJ});if(Q.isOk){V.success("Installed Pantry dependencies");return}M(Q.error),O.exit(D.FatalError)}function hJ(J){let Q=N(J,".env");if(!j(Q))return!1;return/^APP_KEY=.+$/m.test(r(Q,"utf-8"))}async function c(J){if(hJ(J)){V.success("APP_KEY existed");return}let Q=await R("./buddy key:generate",{cwd:J,timeoutMs:jJ});if(Q.isErr)M(Q.error),O.exit(D.FatalError);V.success("Generated application key")}async function kJ(J){let Q=J.cwd||v.projectPath();if(await a(Q),await i(J),!J.skipKeygen)await c(Q);if(!J.skipAws){V.info("Ensuring AWS is connected...");let Z=await R("./buddy configure:aws",{cwd:Q,timeoutMs:vJ});if(Z.isErr)M(Z.error),O.exit(D.FatalError);V.success("Configured AWS")}V.success("Project is setup"),V.info("Happy coding! \uD83D\uDC99")}function bJ(J){let Q=N(J,".env"),Z=N(J,".env.example"),X=j(Q)?Q:j(Z)?Z:void 0;if(!X)return;let W=r(X,"utf-8").match(/^DB_CONNECTION=(.+)$/m);if(!W)return;let B=W[1].trim().replace(/['"]/g,"");return CJ[B]}async function s(){let J=v.projectPath(),Q=N(J,"config","deps.ts");if(!j(Q)){V.debug("No config/deps.ts found, skipping dependency optimization");return}let Z={};try{let B=await import(Q),G=B.config||B.default;if(G?.dependencies)Z={...G.dependencies}}catch(B){V.debug("Could not load config/deps.ts, skipping dependency optimization");return}let X=bJ(J);if(X){if(!Object.keys(Z).some((G)=>G===X||G.startsWith(`${X}/`)))V.info(`Detected DB_CONNECTION requires ${X}, adding to dependencies`),Z[X]="*"}let $=["# Auto-generated from config/deps.ts and .env sniffing.","# This file is regenerated on each `buddy setup` run.","#","# To learn more, please visit:","# https://stacksjs.com/docs/dependency-management","","dependencies:"];for(let[B,G]of Object.entries(Z))$.push(` ${B}: ${G}`);let W=N(J,"deps.yaml");DJ(W,`${$.join(`
3
3
  `)}
4
- `),V.success("Generated deps.yaml from config/deps.ts")}async function i(J){V.info("Ensuring .env exists...");let Q=J.cwd||v.projectPath(),Z=`${Q}/.env`,X=`${Q}/.env.example`;if(SJ.doesNotExist(Z)){try{MJ(X,Z)}catch($){M($),O.exit(D.FatalError)}V.success(".env created")}else V.success(".env existed")}var xJ,IJ,TJ,jJ,vJ,CJ;var e=h(()=>{xJ=S("PANTRY_CHECK_TIMEOUT_MS",15000),IJ=S("PANTRY_INSTALL_TIMEOUT_MS",600000),TJ=S("PANTRY_DEPENDENCIES_TIMEOUT_MS",1200000),jJ=S("KEYGEN_TIMEOUT_MS",120000),vJ=S("AWS_CONFIG_TIMEOUT_MS",900000);CJ={postgres:"postgresql.org",mysql:"mysql.com",sqlite:"sqlite.org"}});import U from"process";import{cli as yJ,log as z}from"@stacksjs/cli";import{path as w}from"@stacksjs/path";var F=U.argv.slice(2),y=F[0]||"help",n=F.includes("--help")||F.includes("-h"),fJ=["--version","-v","version"].includes(y),pJ=y==="help"||n&&F.length<=2,uJ=["build","lint","lint:fix","test","test:types","test:unit","test:feature","typecheck","types:fix","types:generate","clean","fresh","about","doctor","setup","setup:ssl","setup:oh-my-zsh","deploy","new","create"].some((J)=>y.startsWith(J))||n||pJ,o=!fJ;if(o)U.on("uncaughtException",(J)=>{z.debug("Buddy uncaughtException"),z.error(J),U.exit(1)}),U.on("unhandledRejection",(J)=>{z.debug("Buddy unhandledRejection"),z.error(J),U.exit(1)});async function mJ(){let J=yJ("buddy"),Q="./buddy.config.ts";try{await Bun.file("./buddy.config.ts").text();let{applyBuddyConfig:Z}=await Promise.resolve().then(() => (m(),u));await Z(J)}catch{}if(o){let{loadCommands:Z,getCommandsToLoad:X,markLoaded:$}=await Promise.resolve().then(() => (b(),C)),{setup:W}=await Promise.resolve().then(() => (e(),d));if(W(J),$(J,"setup"),!uJ){let{runAction:G}=await import("@stacksjs/actions"),{Action:H}=await import("@stacksjs/enums"),{ensureProjectIsInitialized:_}=await import("@stacksjs/utils");if(!await _()){z.info("Your `APP_KEY` is not yet set"),z.info("Generating application key...");let x=await G(H.KeyGenerate);if(x.isErr)z.error("Failed to set random application key.",x.error),U.exit(1)}}let B=X(F);await Z(B,J),await tJ(J)}else{let{loadCommand:Z}=await Promise.resolve().then(() => (b(),C));await Z("version",J)}if(J.help(),F.length===0&&U.stdin.isTTY&&!J.isNoInteraction)await lJ(J);else J.parse()}async function lJ(J){let{bold:Q,green:Z,intro:X}=await import("@stacksjs/cli"),{select:$}=await import("@stacksjs/cli");await X("buddy"),console.log(Q(Z("What would you like to do?"))),console.log("");let W=await $({message:"Select a command:",choices:[{value:"dev",label:"Start development server"},{value:"build",label:"Build for production"},{value:"test",label:"Run tests"},{value:"list",label:"List all commands"},{value:"doctor",label:"Run health checks"},{value:"about",label:"Show system information"},{value:"help",label:"Show help"},{value:"exit",label:"Exit"}],initial:0});if(console.log(""),W==="exit")U.exit(0);else if(W==="help")J.outputHelp();else U.argv=["bun","buddy",W],J.parse()}await mJ();async function tJ(J){let{fs:Q}=await import("@stacksjs/storage"),Z=w.appPath("Commands");try{let W=(await import(w.appPath("Commands.ts"))).default||{};for(let[B,G]of Object.entries(W)){let H=typeof G==="string"?{file:G,enabled:!0}:G;if(H.enabled===!1)continue;let _=`${Z}/${H.file}.ts`;if(!Q.existsSync(_)){z.debug(`Command file not found: ${_} (registered as '${B}')`);continue}try{let K=await import(_);if(typeof K.default==="function"){if(K.default(J),H.aliases&&Array.isArray(H.aliases))for(let x of H.aliases)J.alias(B,x)}else z.error(`Expected a default export function in ${H.file}.ts, but got:`,K.default)}catch(K){z.error(`Failed to load command ${H.file}:`,K)}}}catch{if(!Q.existsSync(Z)){z.debug("app/Commands directory not found, skipping user commands");return}z.debug("Commands.ts not found, using auto-discovery");let X=Q.readdirSync(Z).filter(($)=>$.endsWith(".ts"));for(let $ of X){let W=`${Z}/${$}`;try{let B=await import(W);if(typeof B.default==="function")B.default(J);else z.debug(`Skipping ${$} \u2014 no default export function`)}catch(B){z.error(`Failed to load command ${$}:`,B)}}}try{let X=await import(w.listenersPath("Console.ts"));if(typeof X.default==="function")X.default(J)}catch{}}
4
+ `),V.success("Generated deps.yaml from config/deps.ts")}async function i(J){V.info("Ensuring .env exists...");let Q=J.cwd||v.projectPath(),Z=`${Q}/.env`,X=`${Q}/.env.example`;if(SJ.doesNotExist(Z)){try{MJ(X,Z)}catch($){M($),O.exit(D.FatalError)}V.success(".env created")}else V.success(".env existed")}var xJ,IJ,TJ,jJ,vJ,CJ;var e=k(()=>{xJ=S("PANTRY_CHECK_TIMEOUT_MS",15000),IJ=S("PANTRY_INSTALL_TIMEOUT_MS",600000),TJ=S("PANTRY_DEPENDENCIES_TIMEOUT_MS",1200000),jJ=S("KEYGEN_TIMEOUT_MS",120000),vJ=S("AWS_CONFIG_TIMEOUT_MS",900000);CJ={postgres:"postgresql.org",mysql:"mysql.com",sqlite:"sqlite.org"}});import U from"process";import{cli as yJ,log as z}from"@stacksjs/cli";import{path as w}from"@stacksjs/path";var F=U.argv.slice(2),E=F[0]||"help",n=F.includes("--help")||F.includes("-h"),fJ=["--version","-v","version"].includes(E),pJ=E==="help"||n&&F.length<=2,uJ=["build","lint","lint:fix","test","test:types","test:unit","test:feature","typecheck","types:fix","types:generate","clean","fresh","about","doctor","setup","setup:ssl","setup:oh-my-zsh","deploy","serve","new","create","migrate","seed","generate","make","key:generate","scaffold:crud"].some((J)=>E===J||E.startsWith(`${J}:`))||n||pJ,o=!fJ;if(o)U.on("uncaughtException",(J)=>{z.debug("Buddy uncaughtException"),z.error(J),U.exit(1)}),U.on("unhandledRejection",(J)=>{z.debug("Buddy unhandledRejection"),z.error(J),U.exit(1)});async function mJ(){let J=yJ("buddy"),Q="./buddy.config.ts";try{await Bun.file("./buddy.config.ts").text();let{applyBuddyConfig:Z}=await Promise.resolve().then(() => (m(),u));await Z(J)}catch{}if(o){let{loadCommands:Z,getCommandsToLoad:X,markLoaded:$}=await Promise.resolve().then(() => (y(),b)),{setup:W}=await Promise.resolve().then(() => (e(),d));if(W(J),$(J,"setup"),!uJ){let{runAction:G}=await import("@stacksjs/actions"),{Action:H}=await import("@stacksjs/enums"),{ensureProjectIsInitialized:_}=await import("@stacksjs/utils");if(!await _()){z.info("Your `APP_KEY` is not yet set"),z.info("Generating application key...");let x=await G(H.KeyGenerate);if(x.isErr)z.error("Failed to set random application key.",x.error),U.exit(1)}}let B=X(F);await Z(B,J),await tJ(J)}else{let{loadCommand:Z}=await Promise.resolve().then(() => (y(),b));await Z("version",J)}if(J.help(),F.length===0&&U.stdin.isTTY&&!J.isNoInteraction)await lJ(J);else J.parse()}async function lJ(J){let{bold:Q,green:Z,intro:X}=await import("@stacksjs/cli"),{select:$}=await import("@stacksjs/cli");await X("buddy"),console.log(Q(Z("What would you like to do?"))),console.log("");let W=await $({message:"Select a command:",choices:[{value:"dev",label:"Start development server"},{value:"build",label:"Build for production"},{value:"test",label:"Run tests"},{value:"list",label:"List all commands"},{value:"doctor",label:"Run health checks"},{value:"about",label:"Show system information"},{value:"help",label:"Show help"},{value:"exit",label:"Exit"}],initial:0});if(console.log(""),W==="exit")U.exit(0);else if(W==="help")J.outputHelp();else U.argv=["bun","buddy",W],J.parse()}await mJ();async function tJ(J){let{fs:Q}=await import("@stacksjs/storage"),Z=w.appPath("Commands");try{let W=(await import(w.appPath("Commands.ts"))).default||{};for(let[B,G]of Object.entries(W)){let H=typeof G==="string"?{file:G,enabled:!0}:G;if(H.enabled===!1)continue;let _=`${Z}/${H.file}.ts`;if(!Q.existsSync(_)){z.debug(`Command file not found: ${_} (registered as '${B}')`);continue}try{let K=await import(_);if(typeof K.default==="function"){if(K.default(J),H.aliases&&Array.isArray(H.aliases))for(let x of H.aliases)J.alias(B,x)}else z.error(`Expected a default export function in ${H.file}.ts, but got:`,K.default)}catch(K){z.error(`Failed to load command ${H.file}:`,K)}}}catch{if(!Q.existsSync(Z)){z.debug("app/Commands directory not found, skipping user commands");return}z.debug("Commands.ts not found, using auto-discovery");let X=Q.readdirSync(Z).filter(($)=>$.endsWith(".ts"));for(let $ of X){let W=`${Z}/${$}`;try{let B=await import(W);if(typeof B.default==="function")B.default(J);else z.debug(`Skipping ${$} \u2014 no default export function`)}catch(B){z.error(`Failed to load command ${$}:`,B)}}}try{let X=await import(w.listenersPath("Console.ts"));if(typeof X.default==="function")X.default(J)}catch{}}