microfox 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/README.md +114 -0
  3. package/dist/agent-template.txt +486 -0
  4. package/dist/background-agent/.gitignore.txt +22 -0
  5. package/dist/background-agent/eslint.config.js.txt +48 -0
  6. package/dist/background-agent/microfox.json.txt +4 -0
  7. package/dist/background-agent/openapi.md.txt +1 -0
  8. package/dist/background-agent/package.json.txt +47 -0
  9. package/dist/background-agent/serverless.yml.txt +123 -0
  10. package/dist/background-agent/src/functions/cron-paginate.ts.txt +135 -0
  11. package/dist/background-agent/src/functions/cron-populate.ts.txt +33 -0
  12. package/dist/background-agent/src/functions/route-trigger-index.ts.txt +157 -0
  13. package/dist/background-agent/src/functions/route-trigger-populate.ts.txt +0 -0
  14. package/dist/background-agent/src/functions/sqs-index.ts.txt +147 -0
  15. package/dist/background-agent/src/helpers/ragRedis.ts.txt +78 -0
  16. package/dist/background-agent/src/index.ts.txt +69 -0
  17. package/dist/background-agent/tsconfig.json.txt +33 -0
  18. package/dist/chunk-4HNHBA2H.mjs +104 -0
  19. package/dist/chunk-4HNHBA2H.mjs.map +1 -0
  20. package/dist/chunk-ARAHSYJI.mjs +263 -0
  21. package/dist/chunk-ARAHSYJI.mjs.map +1 -0
  22. package/dist/chunk-JGAX4PD6.mjs +290 -0
  23. package/dist/chunk-JGAX4PD6.mjs.map +1 -0
  24. package/dist/chunk-KPJJOO76.mjs +12 -0
  25. package/dist/chunk-KPJJOO76.mjs.map +1 -0
  26. package/dist/chunk-TZQZMKHP.mjs +11 -0
  27. package/dist/chunk-TZQZMKHP.mjs.map +1 -0
  28. package/dist/chunk-UFRGJMF4.mjs +154 -0
  29. package/dist/chunk-UFRGJMF4.mjs.map +1 -0
  30. package/dist/chunk-UHWJTQKW.mjs +139 -0
  31. package/dist/chunk-UHWJTQKW.mjs.map +1 -0
  32. package/dist/chunk-UYROVW53.mjs +89 -0
  33. package/dist/chunk-UYROVW53.mjs.map +1 -0
  34. package/dist/chunk-XGFSFWK3.mjs +113 -0
  35. package/dist/chunk-XGFSFWK3.mjs.map +1 -0
  36. package/dist/cli.d.mts +2 -0
  37. package/dist/cli.d.ts +2 -0
  38. package/dist/cli.js +1154 -0
  39. package/dist/cli.js.map +1 -0
  40. package/dist/cli.mjs +52 -0
  41. package/dist/cli.mjs.map +1 -0
  42. package/dist/commands/add.d.mts +5 -0
  43. package/dist/commands/add.d.ts +5 -0
  44. package/dist/commands/add.js +126 -0
  45. package/dist/commands/add.js.map +1 -0
  46. package/dist/commands/add.mjs +10 -0
  47. package/dist/commands/add.mjs.map +1 -0
  48. package/dist/commands/code.d.mts +5 -0
  49. package/dist/commands/code.d.ts +5 -0
  50. package/dist/commands/code.js +187 -0
  51. package/dist/commands/code.js.map +1 -0
  52. package/dist/commands/code.mjs +9 -0
  53. package/dist/commands/code.mjs.map +1 -0
  54. package/dist/commands/install.d.mts +5 -0
  55. package/dist/commands/install.d.ts +5 -0
  56. package/dist/commands/install.js +296 -0
  57. package/dist/commands/install.js.map +1 -0
  58. package/dist/commands/install.mjs +9 -0
  59. package/dist/commands/install.mjs.map +1 -0
  60. package/dist/commands/kickstart.d.mts +5 -0
  61. package/dist/commands/kickstart.d.ts +5 -0
  62. package/dist/commands/kickstart.js +322 -0
  63. package/dist/commands/kickstart.js.map +1 -0
  64. package/dist/commands/kickstart.mjs +10 -0
  65. package/dist/commands/kickstart.mjs.map +1 -0
  66. package/dist/commands/push.d.mts +5 -0
  67. package/dist/commands/push.d.ts +5 -0
  68. package/dist/commands/push.js +137 -0
  69. package/dist/commands/push.js.map +1 -0
  70. package/dist/commands/push.mjs +9 -0
  71. package/dist/commands/push.mjs.map +1 -0
  72. package/dist/commands/status.d.mts +7 -0
  73. package/dist/commands/status.d.ts +7 -0
  74. package/dist/commands/status.js +148 -0
  75. package/dist/commands/status.js.map +1 -0
  76. package/dist/commands/status.mjs +13 -0
  77. package/dist/commands/status.mjs.map +1 -0
  78. package/dist/commands/update.d.mts +5 -0
  79. package/dist/commands/update.d.ts +5 -0
  80. package/dist/commands/update.js +172 -0
  81. package/dist/commands/update.js.map +1 -0
  82. package/dist/commands/update.mjs +9 -0
  83. package/dist/commands/update.mjs.map +1 -0
  84. package/dist/index.d.mts +20 -0
  85. package/dist/index.d.ts +20 -0
  86. package/dist/index.js +406 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/index.mjs +14 -0
  89. package/dist/index.mjs.map +1 -0
  90. package/dist/package-template.txt +494 -0
  91. package/package.json +68 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts","../src/commands/kickstart.ts","../src/utils/getProjectRoot.ts","../src/utils/npmChecker.ts","../src/commands/add.ts","../src/commands/push.ts","../src/commands/status.ts","../src/commands/code.ts","../src/utils/findProjectRoot.ts","../src/commands/install.ts","../src/utils/experimental-installer.ts","../src/commands/update.ts","../src/utils/experimental-updater.ts","../package.json"],"sourcesContent":["import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { kickstartCommand } from './commands/kickstart';\nimport { addCommand } from './commands/add';\nimport { pushCommand } from './commands/push';\nimport { statusCommand, logsCommand, metricsCommand } from './commands/status';\nimport { codeCommand } from './commands/code';\nimport { installCommand } from './commands/install';\nimport { updateCommand } from './commands/update';\nimport { version } from '../package.json';\n\nconst program = new Command();\n\nprogram\n .name('microfox')\n .description('Universal CLI tool for creating and managing Microfox projects')\n .version(version);\n\nprogram.addCommand(kickstartCommand);\nprogram.addCommand(addCommand);\nprogram.addCommand(pushCommand);\nprogram.addCommand(statusCommand);\nprogram.addCommand(logsCommand);\nprogram.addCommand(metricsCommand);\nprogram.addCommand(codeCommand);\nprogram.addCommand(installCommand);\nprogram.addCommand(updateCommand);\n\nprogram.action(() => {\n // Show help if no command is provided\n if (process.argv.length <= 2) {\n program.help();\n }\n});\n\nprogram.parse(process.argv); ","import { Command } from 'commander';\nimport fs from 'fs';\nimport path from 'path';\nimport chalk from 'chalk';\nimport readlineSync from 'readline-sync';\nimport inquirer from 'inquirer';\nimport { getWorkingDirectory } from '../utils/getProjectRoot';\nimport { checkPackageNameAndPrompt } from '../utils/npmChecker';\n\nasync function createAgentProject(agentName: string): Promise<void> {\n const workingDir = getWorkingDirectory();\n const agentDir = path.join(workingDir, agentName);\n\n if (fs.existsSync(agentDir)) {\n throw new Error(`Directory already exists at ${agentDir}`);\n }\n\n console.log(\n chalk.blue(\n `🚀 Creating agent ${chalk.bold(agentName)} at ${agentDir}\\n`,\n ),\n );\n\n fs.mkdirSync(agentDir, { recursive: true });\n\n const templatePath = path.resolve(__dirname, 'agent-template.txt');\n const templateContent = fs.readFileSync(templatePath, 'utf-8');\n\n const fileSections = templateContent.split('--- filename: ').slice(1);\n\n for (const section of fileSections) {\n const lines = section.split('\\n');\n const filePath = lines.shift()!.trim();\n const content = lines.join('\\n').replace(/<%= agentName %>/g, agentName);\n \n const destPath = path.join(agentDir, filePath);\n const destDir = path.dirname(destPath);\n\n if (!fs.existsSync(destDir)) {\n fs.mkdirSync(destDir, { recursive: true });\n }\n\n fs.writeFileSync(destPath, content);\n console.log(chalk.green(`✅ Created ${filePath}`));\n }\n}\n\nasync function createPackageProject(packageName: string): Promise<void> {\n const simpleName = packageName.includes('/')\n ? packageName.split('/')[1]\n : packageName;\n const titleName = simpleName\n .split('-')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n const description = `A TypeScript SDK for ${titleName}.`;\n const className = simpleName.split('-').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('') + 'Sdk';\n\n const workingDir = getWorkingDirectory();\n const packageDir = path.join(workingDir, simpleName);\n\n if (fs.existsSync(packageDir)) {\n throw new Error(`Directory already exists at ${packageDir}`);\n }\n\n console.log(\n chalk.blue(\n `🚀 Creating package ${chalk.bold(packageName)} at ${packageDir}\\n`,\n ),\n );\n \n fs.mkdirSync(packageDir, { recursive: true });\n\n const templatePath = path.resolve(__dirname, 'package-template.txt');\n const templateContent = fs.readFileSync(templatePath, 'utf-8');\n\n const fileSections = templateContent.split('--- filename: ').slice(1);\n\n for (const section of fileSections) {\n const lines = section.split('\\n');\n const filePath = lines.shift()!.trim().replace(/<%= simpleName %>/g, simpleName);\n let content = lines.join('\\n');\n\n content = content.replace(/<%= packageName %>/g, packageName);\n content = content.replace(/<%= simpleName %>/g, simpleName);\n content = content.replace(/<%= titleName %>/g, titleName);\n content = content.replace(/<%= description %>/g, description);\n content = content.replace(/<%= className %>/g, className);\n\n const destPath = path.join(packageDir, filePath);\n const destDir = path.dirname(destPath);\n\n if (!fs.existsSync(destDir)) {\n fs.mkdirSync(destDir, { recursive: true });\n }\n\n fs.writeFileSync(destPath, content);\n console.log(chalk.green(`✅ Created ${filePath}`));\n }\n\n const docsDir = path.join(packageDir, 'docs');\n const docsConstructors = path.join(docsDir, 'constructors');\n const docsFunctions = path.join(docsDir, 'functions');\n\n fs.mkdirSync(docsDir, { recursive: true });\n fs.mkdirSync(docsConstructors, { recursive: true });\n fs.mkdirSync(docsFunctions, { recursive: true });\n}\n\nasync function createBackgroundAgentProject(agentName: string): Promise<void> {\n const workingDir = getWorkingDirectory();\n const agentDir = path.join(workingDir, agentName);\n \n if (fs.existsSync(agentDir)) {\n throw new Error(`Directory already exists at ${agentDir}`);\n }\n \n console.log(\n chalk.blue(\n `🚀 Creating background agent ${chalk.bold(agentName)} at ${agentDir}\\n`,\n ),\n );\n \n fs.mkdirSync(agentDir, { recursive: true });\n \n const templateDir = path.resolve(__dirname, 'background-agent');\n \n const copyTemplates = (src: string, dest: string) => {\n const entries = fs.readdirSync(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name.replace(/\\.txt$/, ''));\n \n if (entry.isDirectory()) {\n fs.mkdirSync(destPath, { recursive: true });\n copyTemplates(srcPath, destPath);\n } else if (entry.name.endsWith('.txt')) {\n const templateContent = fs.readFileSync(srcPath, 'utf-8');\n const content = templateContent.replace(/<%= agentName %>/g, agentName);\n fs.writeFileSync(destPath, content);\n console.log(chalk.green(`✅ Created ${path.relative(agentDir, destPath)}`));\n }\n }\n };\n \n copyTemplates(templateDir, agentDir);\n}\n\nasync function kickstartAction(): Promise<void> {\n console.log(chalk.cyan(\"🚀 Let's kickstart your new project!\\n\"));\n\n const { boilerplateType } = await inquirer.prompt([\n {\n type: 'list',\n name: 'boilerplateType',\n message: 'Select boilerplate type:',\n choices: ['package', 'agent'],\n },\n ]);\n\n if (!boilerplateType) {\n console.log(chalk.yellow('Operation cancelled.'));\n return;\n }\n\n if (boilerplateType === 'agent') {\n const { agentType } = await inquirer.prompt([\n {\n type: 'list',\n name: 'agentType',\n message: 'Select agent type:',\n choices: ['plain', 'background'],\n },\n ]);\n \n if(agentType === 'plain'){\n const agentName = readlineSync.question(\n chalk.yellow('📦 Enter agent name: '),\n );\n \n if (!agentName.trim()) {\n throw new Error('Agent name cannot be empty');\n }\n await createAgentProject(agentName.trim());\n \n console.log(\n chalk.green(\n `\\n🎉 Successfully created agent ${chalk.bold(agentName)}!`,\n ),\n );\n console.log(chalk.gray(`📍 Located at ${path.join(getWorkingDirectory(), agentName)}`));\n console.log(chalk.yellow('\\n💡 Next steps:'));\n console.log(chalk.yellow(` 1. cd ${agentName}`));\n console.log(chalk.yellow(' 2. npm install'));\n console.log(chalk.yellow(' 3. Configure your env.json'));\n console.log(chalk.yellow(' 4. npm run dev'));\n console.log(chalk.yellow(' 5. Start developing your agent!'));\n\n } else if (agentType === 'background') {\n const agentName = readlineSync.question(\n chalk.yellow('📦 Enter agent name: '),\n );\n \n if (!agentName.trim()) {\n throw new Error('Agent name cannot be empty');\n }\n await createBackgroundAgentProject(agentName.trim());\n\n console.log(\n chalk.green(\n `\\n🎉 Successfully created background agent ${chalk.bold(agentName)}!`,\n ),\n );\n console.log(chalk.gray(`📍 Located at ${path.join(getWorkingDirectory(), agentName)}`));\n console.log(chalk.yellow('\\n💡 Next steps:'));\n console.log(chalk.yellow(` 1. cd ${agentName}`));\n console.log(chalk.yellow(' 2. npm install'));\n console.log(chalk.yellow(' 3. Configure your env.json'));\n console.log(chalk.yellow(' 4. npm run dev'));\n console.log(chalk.yellow(' 5. Start developing your agent!'));\n }\n\n } else if (boilerplateType === 'package') {\n // Ask for package name interactively\n const packageName = readlineSync.question(\n chalk.yellow('📦 Enter package name: '),\n );\n\n if (!packageName.trim()) {\n throw new Error('Package name cannot be empty');\n }\n\n // Check npm availability and get final package name\n const finalPackageName = await checkPackageNameAndPrompt(`@microfox/${packageName.trim()}`);\n await createPackageProject(finalPackageName);\n\n const simpleName = finalPackageName.includes('/')\n ? finalPackageName.split('/')[1]\n : finalPackageName;\n\n console.log(\n chalk.green(\n `\\n🎉 Successfully created package ${chalk.bold(finalPackageName)}!`,\n ),\n );\n console.log(chalk.gray(`📍 Located at ${path.join(getWorkingDirectory(), simpleName)}`));\n console.log(chalk.yellow('\\n💡 Next steps:'));\n console.log(chalk.yellow(` 1. cd ${simpleName}`));\n console.log(chalk.yellow(' 2. npm install'));\n console.log(chalk.yellow(' 3. npm run build'));\n console.log(chalk.yellow(' 4. npm test'));\n console.log(chalk.yellow(' 5. Start developing your SDK!'));\n console.log(\n chalk.gray(\n `\\n📚 Your package is ready to be published to npm as \"${finalPackageName}\"`,\n ),\n );\n } else {\n console.log(chalk.red('Invalid boilerplate type selected. Please choose \"package\" or \"agent\".'));\n }\n}\n\nexport const kickstartCommand = new Command('kickstart')\n .description('Kickstart a new TypeScript SDK or agent package')\n .action(async () => {\n try {\n console.log(chalk.blue('🚀 Package Kickstarter\\n'));\n await kickstartAction();\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n","export const getWorkingDirectory = () => {\n // Return the current working directory where the CLI is executed\n // This allows creating packages in any directory\n return process.cwd();\n}; ","export async function isPackageNameAvailable(\n packageName: string,\n): Promise<boolean> {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 5000);\n\n const response = await fetch(`https://registry.npmjs.org/${packageName}`, {\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n // If we get a 200 response, the package exists\n if (response.ok) {\n return false;\n }\n\n // If we get a 404, the package doesn't exist (available)\n if (response.status === 404) {\n return true;\n }\n\n // For other status codes, assume unavailable for safety\n console.warn(\n `Warning: Unexpected status ${response.status} when checking npm availability for ${packageName}. Proceeding with caution.`,\n );\n return false;\n } catch (error: any) {\n // For network errors, timeouts, etc., assume unavailable for safety\n if (error.name === 'AbortError') {\n console.warn(\n `Warning: Timeout when checking npm availability for ${packageName}. Proceeding with caution.`,\n );\n } else {\n console.warn(\n `Warning: Could not check npm availability for ${packageName}. Proceeding with caution.`,\n );\n }\n return false;\n }\n}\n\nexport async function checkPackageNameAndPrompt(\n packageName: string,\n): Promise<string> {\n const readlineSync = require('readline-sync');\n let currentName = packageName?.startsWith('@microfox/')\n ? packageName\n : `@microfox/${packageName}`;\n\n while (true) {\n console.log(`🔍 Checking npm availability for \"${currentName}\"...`);\n\n const isAvailable = await isPackageNameAvailable(currentName);\n\n if (isAvailable) {\n console.log(`✅ Package name \"${currentName}\" is available on npm!`);\n return currentName;\n } else {\n console.log(`❌ Package name \"${currentName}\" is already taken on npm.`);\n\n const newName = readlineSync.question(\n 'Please enter a new package name: ',\n );\n if (!newName || newName.trim() === '') {\n console.log('❌ Invalid package name. Please try again.');\n continue;\n }\n\n currentName = newName.trim();\n }\n }\n}\n","import { Command } from 'commander';\nimport fs from 'fs';\nimport path from 'path';\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport readlineSync from 'readline-sync';\nimport { getWorkingDirectory } from '../utils/getProjectRoot';\n\nasync function addBackgroundAgentFunctions(name: string): Promise<void> {\n const workingDir = getWorkingDirectory();\n const functionsDir = path.join(workingDir, 'src', 'functions', name);\n\n // if (fs.existsSync(functionsDir)) {\n // throw new Error(`Directory already exists at ${functionsDir}`);\n // }\n\n console.log(\n chalk.blue(\n `🚀 Adding background agent functions ${chalk.bold(name)} at ${functionsDir}\\n`,\n ),\n );\n\n fs.mkdirSync(functionsDir, { recursive: true });\n\n const templateDir = path.resolve(__dirname, 'background-agent', 'src', 'functions');\n\n const entries = fs.readdirSync(templateDir, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(templateDir, entry.name);\n const destPath = path.join(functionsDir, entry.name.replace(/\\.txt$/, ''));\n\n if (!entry.isDirectory() && entry.name.endsWith('.txt')) {\n const templateContent = fs.readFileSync(srcPath, 'utf-8');\n const content = templateContent.replace(/<%= agentName %>/g, name);\n fs.writeFileSync(destPath, content);\n console.log(chalk.green(`✅ Created ${path.relative(workingDir, destPath)}`));\n }\n }\n}\n\nasync function addAction(): Promise<void> {\n console.log(chalk.cyan(\"✨ Add new features to your project!\\n\"));\n\n const workingDir = getWorkingDirectory();\n const microfoxConfigPath = path.join(workingDir, 'microfox.json');\n if (!fs.existsSync(microfoxConfigPath)) {\n console.log(chalk.red('Error: `microfox.json` not found in the current directory.'));\n console.log(chalk.red('Please run this command from the root of a Microfox project.'));\n return;\n }\n\n const { featureType } = await inquirer.prompt([\n {\n type: 'list',\n name: 'featureType',\n message: 'Select what you want to add:',\n choices: ['background_agent_functions'],\n },\n ]);\n\n if (!featureType) {\n console.log(chalk.yellow('Operation cancelled.'));\n return;\n }\n\n if (featureType === 'background_agent_functions') {\n const functionName = readlineSync.question(\n chalk.yellow('📦 Enter a name for the new functions: '),\n );\n\n if (!functionName.trim()) {\n throw new Error('Function name cannot be empty');\n }\n\n await addBackgroundAgentFunctions(functionName.trim());\n\n console.log(\n chalk.green(\n `\\n🎉 Successfully added background agent functions ${chalk.bold(functionName)}!`,\n ),\n );\n console.log(chalk.gray(`📍 Located at src/functions/${functionName.trim()}`));\n console.log(chalk.yellow('\\n💡 Next steps:'));\n console.log(chalk.yellow(' 1. Check the new files in src/functions/'));\n console.log(chalk.yellow(' 2. Update your agent logic to use the new functions.'));\n }\n}\n\nexport const addCommand = new Command('add')\n .description('Add features to a Microfox project')\n .action(async () => {\n try {\n await addAction();\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n }); ","import { Command } from 'commander';\nimport fs from 'fs';\nimport path from 'path';\nimport chalk from 'chalk';\nimport axios from 'axios';\nimport micromatch from 'micromatch';\n\ninterface FileDirectory {\n type: 'file' | 'directory';\n name: string;\n path: string;\n content?: string;\n children?: FileDirectory[];\n}\n\nconst API_ENDPOINT = 'https://staging-cicd.microfox.app/api/deployments/new-agent-cli';\n\nconst getDirectoryFiles = (dir: string, basePath: string = '', ignorePatterns: string[]): FileDirectory[] => {\n const structure: FileDirectory[] = [];\n const items = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const item of items) {\n const relativePath = path.join(basePath, item.name);\n if (micromatch.isMatch(relativePath, ignorePatterns)) {\n continue;\n }\n\n if (item.isDirectory()) {\n structure.push(...getDirectoryFiles(path.join(dir, item.name), relativePath, ignorePatterns));\n } else {\n structure.push({\n type: 'file',\n name: item.name,\n path: relativePath.replace(/\\\\/g, '/'),\n content: fs.readFileSync(path.join(dir, item.name), 'utf-8'),\n });\n }\n }\n return structure;\n};\n\nasync function pushAction(): Promise<void> {\n const cwd = process.cwd();\n const microfoxConfigPath = path.join(cwd, 'microfox.json');\n\n if (!fs.existsSync(microfoxConfigPath)) {\n console.error(chalk.red('❌ Error: `microfox.json` not found in the current directory.'));\n console.log(chalk.yellow('This command must be run from the root of an agent project.'));\n process.exit(1);\n }\n\n console.log(chalk.cyan('🚀 Pushing your agent to Microfox...'));\n\n const microfoxConfig = JSON.parse(fs.readFileSync(microfoxConfigPath, 'utf-8'));\n\n let agentApiKey: string | undefined;\n const envPath = path.join(cwd, 'env.json');\n if (fs.existsSync(envPath)) {\n try {\n const envConfig = JSON.parse(fs.readFileSync(envPath, 'utf-8'));\n agentApiKey = envConfig.AGENT_API_KEY;\n } catch (e) {\n console.warn(chalk.yellow('⚠️ Could not read or parse `env.json`. The AGENT_API_KEY will not be sent.'));\n }\n }\n\n const stage = microfoxConfig.stage || 'prod';\n const ignored: string[] = microfoxConfig.ignored || [];\n\n const defaultIgnore = ['node_modules/**', '.git/**', 'dist/**', '.build/**', '.serverless/**', '.DS_Store', 'package-lock.json', 'pnpm-lock.yaml'];\n const allIgnored = [...defaultIgnore, ...ignored];\n\n const files: FileDirectory[] = getDirectoryFiles(cwd, '', allIgnored);\n\n // console.log(JSON.stringify(files, null, 2));\n \n try {\n console.log(chalk.blue('📦 Bundling and deploying your agent...'));\n const response = await axios.post(\n API_ENDPOINT,\n {\n stage,\n isLocal: false,\n dir: files,\n },\n {\n headers: {\n 'x-agent-api-key': agentApiKey,\n },\n },\n );\n\n if (response.status === 200) {\n console.log(chalk.green('✅ Deployment successful!'));\n console.log(chalk.green(` Run ID: ${response.data.runId}`));\n console.log(chalk.green(` Message: ${response.data.message}`));\n } else {\n console.error(chalk.red(`❌ Deployment failed with status: ${response.status}`));\n console.error(response.data);\n process.exit(1);\n }\n } catch (error) {\n console.error(chalk.red('❌ An error occurred during deployment:'));\n if (axios.isAxiosError(error) && error.response) {\n console.error(chalk.red(` Status: ${error.response.status}`));\n console.error(chalk.red(` Data: ${JSON.stringify(error.response.data, null, 2)}`));\n } else {\n console.error(error);\n }\n process.exit(1);\n }\n}\n\nexport const pushCommand = new Command('push')\n .description('Deploy your agent to the Microfox platform')\n .action(async () => {\n try {\n await pushAction();\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n }); ","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport axios from 'axios';\nimport inquirer from 'inquirer';\n\nconst API_BASE_URL = 'https://staging-cicd.microfox.app/api/deployment-status/agent/status/';\n\nasync function getRunId(runId?: string): Promise<string> {\n if (runId) {\n return runId;\n }\n const { promptedRunId } = await inquirer.prompt([\n {\n type: 'input',\n name: 'promptedRunId',\n message: 'Please enter the deployment Run ID:',\n validate: (input) => !!input || 'Run ID cannot be empty.',\n },\n ]);\n return promptedRunId;\n }\n \n\nasync function getDeploymentData(runId: string) {\n try {\n const response = await axios.get(`${API_BASE_URL}${runId}`);\n return response.data;\n } catch (error) {\n if (axios.isAxiosError(error) && error.response?.status === 404) {\n console.error(chalk.red(`❌ Error: Deployment with Run ID \"${runId}\" not found.`));\n } else {\n console.error(chalk.red('❌ An error occurred while fetching deployment status:'));\n console.error(error);\n }\n process.exit(1);\n }\n}\n\nasync function statusAction(runId?: string): Promise<void> {\n const finalRunId = await getRunId(runId);\n const data = await getDeploymentData(finalRunId);\n const deployment = data.data.deployment;\n\n console.log(chalk.cyan.bold('🚀 Deployment Status'));\n console.log(chalk.gray('----------------------------------------'));\n console.log(`${chalk.bold('Run ID:')} ${deployment.sha}`);\n console.log(`${chalk.bold('Status:')} ${chalk.green(deployment.status)}`);\n console.log(`${chalk.bold('Description:')} ${deployment.statusDescription}`);\n console.log(`${chalk.bold('Stage:')} ${deployment.stage}`);\n console.log(`${chalk.bold('Start Time:')} ${deployment.startTime ? new Date(deployment.startTime).toLocaleString() : 'N/A'}`);\n console.log(`${chalk.bold('End Time:')} ${deployment.endTime ? new Date(deployment.endTime).toLocaleString() : 'N/A'}`);\n console.log(`${chalk.bold('Base URL:')} ${deployment.baseUrl ? chalk.underline.blue(deployment.baseUrl) : 'N/A'}`);\n console.log(chalk.gray('----------------------------------------'));\n}\n\nasync function logsAction(runId?: string): Promise<void> {\n const finalRunId = await getRunId(runId);\n const data = await getDeploymentData(finalRunId);\n const logs = data.data.deploymentLogs;\n\n console.log(chalk.cyan.bold('📜 Deployment Logs'));\n console.log(chalk.gray('----------------------------------------'));\n console.log(logs);\n console.log(chalk.gray('----------------------------------------'));\n}\n\nasync function metricsAction(runId?: string): Promise<void> {\n const finalRunId = await getRunId(runId);\n const data = await getDeploymentData(finalRunId);\n const metrics = data.data.deployment.metrics;\n\n console.log(chalk.cyan.bold('📊 Deployment Metrics'));\n console.log(chalk.gray('----------------------------------------'));\n\n console.log(chalk.bold.underline('System'));\n console.log(` Platform: ${metrics.system.platform}`);\n console.log(` Architecture: ${metrics.system.arch}`);\n console.log(` Node Version: ${metrics.system.nodeVersion}`);\n\n console.log(chalk.bold.underline('\\nTiming (ms)'));\n for (const [step, duration] of Object.entries(metrics?.timing?.stepDurations || {})) {\n console.log(` ${step}:`.padEnd(15) + `${duration ? `${duration}ms` : 'N/A'}`);\n }\n console.log(` Total Duration:`.padEnd(15) + `${metrics?.timing?.totalDuration ? `${metrics.timing.totalDuration}ms` : 'N/A'}`);\n\n console.log(chalk.bold.underline('\\nResources'));\n console.log(chalk.bold(' CPU:'));\n console.log(` Peak: ${metrics?.resources?.cpu?.peak ? `${metrics?.resources?.cpu?.peak}${metrics?.resources?.cpu?.usageUnits}` : 'N/A'}`);\n console.log(` Average: ${metrics?.resources?.cpu?.average ? `${metrics?.resources?.cpu?.average}${metrics?.resources?.cpu?.usageUnits}` : 'N/A'}`);\n console.log(chalk.bold(' Memory:'));\n console.log(` Peak: ${metrics?.resources?.memory?.peak ? `${metrics?.resources?.memory?.peak.toFixed(2)}${metrics?.resources?.memory?.usageUnits}` : 'N/A'}`);\n console.log(` Average: ${metrics?.resources?.memory?.average ? `${metrics?.resources?.memory?.average.toFixed(2)}${metrics?.resources?.memory?.usageUnits}` : 'N/A'}`);\n console.log(chalk.bold(' Disk:'));\n console.log(` Final Size: ${metrics?.resources?.diskSize?.final ? `${(metrics?.resources?.diskSize?.final / (1024 * 1024)).toFixed(2)} MB` : 'N/A'}`);\n\n console.log(chalk.gray('----------------------------------------'));\n}\n\nexport const statusCommand = new Command('status')\n .description('Check the deployment status of your agent')\n .argument('[runId]', 'The deployment Run ID')\n .action(async (runId) => {\n try {\n await statusAction(runId);\n } catch (error) {\n // Error is already handled in getDeploymentData, just exit\n }\n });\n\nexport const logsCommand = new Command('logs')\n .description('View the deployment logs for your agent')\n .argument('[runId]', 'The deployment Run ID')\n .action(async (runId) => {\n try {\n await logsAction(runId);\n } catch (error) {\n // Error is already handled in getDeploymentData, just exit\n }\n });\n\nexport const metricsCommand = new Command('metrics')\n .description('View the deployment metrics for your agent')\n .argument('[runId]', 'The deployment Run ID')\n .action(async (runId) => {\n try {\n await metricsAction(runId);\n } catch (error) {\n // Error is already handled in getDeploymentData, just exit\n }\n }); ","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport axios from 'axios';\nimport { spawn, ChildProcess } from 'child_process';\nimport { findProjectRoot } from '../utils/findProjectRoot';\nimport path from 'path';\nimport readline from 'readline';\n\nconst NEXTJS_PORT = 3000;\nconst API_URL = `http://localhost:${NEXTJS_PORT}/api/agent`;\n\nconst createLogger = (rl: readline.Interface) => {\n return (source: string, message: string, color: typeof chalk) => {\n readline.cursorTo(process.stdout, 0);\n readline.clearLine(process.stdout, 0);\n\n const prefix = color(`[${source}]`);\n \n const lines = message.trim().split('\\n');\n for (const line of lines) {\n console.log(`${prefix} ${line}`);\n }\n \n rl.prompt(true);\n };\n};\n\nasync function codeAction(): Promise<void> {\n let childProcess: ChildProcess | null = null;\n \n const killProcess = () => {\n if (childProcess && childProcess.pid) {\n console.log(chalk.yellow('\\nGracefully shutting down...'));\n if (process.platform === 'win32') {\n spawn('taskkill', ['/pid', childProcess.pid.toString(), '/f', '/t']);\n } else {\n childProcess.kill('SIGINT');\n }\n childProcess = null;\n }\n };\n\n process.on('SIGINT', () => {\n killProcess();\n process.exit(0);\n });\n process.on('exit', killProcess);\n\n\n try {\n const projectRoot = await findProjectRoot();\n if (!projectRoot) {\n console.error(\n chalk.red('Error: Could not find project root. Make sure you are inside a Microfox project.')\n );\n process.exit(1);\n }\n\n const codeAppPath = path.join(projectRoot, 'apps', 'code');\n \n console.log(chalk.cyan(`Starting Next.js server in ${codeAppPath}...`));\n \n childProcess = spawn('npm', ['run', 'dev'], {\n cwd: codeAppPath,\n shell: true,\n env: { ...process.env, FORCE_COLOR: 'true' }\n });\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: chalk.cyan('> ')\n });\n\n const log = createLogger(rl);\n \n let serverReady = false;\n\n const onServerData = (data: Buffer) => {\n const output = data.toString();\n if (!serverReady) {\n process.stdout.write(output);\n if (output.toLowerCase().includes('ready in') || output.toLowerCase().includes('compiled successfully')) {\n serverReady = true;\n console.log(chalk.green('\\nServer is ready. You can now type your queries.'));\n rl.prompt();\n }\n } else {\n log('nextjs', output, chalk.gray);\n }\n };\n\n childProcess.stdout?.on('data', onServerData);\n childProcess.stderr?.on('data', onServerData);\n\n childProcess.on('exit', (code) => {\n log('system', `Next.js process exited with code ${code}`, chalk.red);\n process.exit(code ?? 1);\n });\n\n rl.on('line', async (line) => {\n const query = line.trim();\n if (!serverReady) {\n log('system', 'Server is not ready yet, please wait.', chalk.yellow);\n rl.prompt();\n return;\n }\n if (query.toLowerCase() === 'exit') {\n rl.close();\n }\n if (query) {\n try {\n const response = await axios.post(API_URL, { prompt: query });\n const responseData = typeof response.data === 'object' \n ? JSON.stringify(response.data, null, 2) \n : response.data;\n \n log('agent', responseData, chalk.green);\n\n } catch (error) {\n if (axios.isAxiosError(error)) {\n log('agent', `Error: ${error.message}`, chalk.red);\n } else if (error instanceof Error) {\n log('agent', `An unknown error occurred: ${error.message}`, chalk.red);\n }\n }\n }\n rl.prompt();\n });\n\n rl.on('close', () => {\n killProcess();\n process.exit(0);\n });\n\n } catch (error) {\n killProcess();\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n process.exit(1);\n }\n}\n\nexport const codeCommand = new Command('code')\n .description('Run the code agent for your project')\n .action(async () => {\n try {\n await codeAction();\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n }); ","import path from 'path';\nimport fs from 'fs';\n\nexport async function findProjectRoot(startPath: string = process.cwd()): Promise<string | null> {\n let currentPath = startPath;\n let count = 0\n while (true) {\n const microfoxRootPath = path.join(currentPath, 'microfox-root');\n if (fs.existsSync(microfoxRootPath)) {\n return currentPath;\n }\n\n const parentPath = path.dirname(currentPath);\n if (parentPath === currentPath || count > 10) {\n // Reached the root of the file system\n return null;\n }\n currentPath = parentPath;\n }\n} ","import { Command } from 'commander';\nimport { runExperimentalInstall } from '../utils/experimental-installer';\n\nexport const installCommand = new Command('install')\n .description('Install packages for local development.')\n .argument('[packages...]', 'Specific packages to install')\n .option('--experimental', 'Enable experimental features')\n .option('--target <name>', 'Specify the target source directory name', 'Microfox')\n .action(async (packages, options) => {\n if (options.experimental) {\n await runExperimentalInstall(packages, options.target);\n } else {\n console.log('This command is only available with the --experimental flag.');\n process.exit(1);\n }\n }); ","import fs from 'fs';\nimport path from 'path';\nimport { execSync } from 'child_process';\nimport chalk from 'chalk';\n\nconst CWD_PACKAGE_JSON = path.join(process.cwd(), 'package.json');\nconst CWD_NODE_MODULES = path.join(process.cwd(), 'node_modules');\nlet MICROFOX_NODE_MODULES: string;\n\nfunction log(message: string, isError = false, isWarning = false) {\n const timestamp = new Date().toLocaleTimeString();\n let prefix;\n\n if (isError) {\n prefix = chalk.red(`❌ [install-microfox ${timestamp}]`);\n } else if (isWarning) {\n prefix = chalk.yellow(`⚠️ [install-microfox ${timestamp}]`);\n } else {\n prefix = chalk.blue(`ℹ️ [install-microfox ${timestamp}]`);\n }\n\n console.log(`${prefix} ${message}`);\n}\n\nfunction logSuccess(message: string) {\n const timestamp = new Date().toLocaleTimeString();\n console.log(chalk.green(`✅ [install-microfox ${timestamp}] ${message}`));\n}\n\nfunction logSection(title: string) {\n console.log('\\n' + '='.repeat(60));\n console.log(` ${title}`);\n console.log('='.repeat(60));\n}\n\nfunction findSourceDir(targetDirName: string): string | null {\n let currentDir = process.cwd();\n for (let i = 0; i < 10; i++) {\n const gitDir = path.join(currentDir, '.git');\n if (fs.existsSync(gitDir)) {\n const parentDir = path.dirname(currentDir);\n const microfoxDir = path.join(parentDir, targetDirName);\n if (fs.existsSync(microfoxDir)) {\n return microfoxDir;\n }\n }\n const parent = path.dirname(currentDir);\n if (parent === currentDir) {\n break;\n }\n currentDir = parent;\n }\n return null;\n}\n\nfunction copyDirectory(src: string, dest: string): boolean {\n try {\n const normalizedSrc = path.resolve(src);\n const normalizedDest = path.resolve(dest);\n\n log(`Copying from: ${normalizedSrc}`);\n log(`Copying to: ${normalizedDest}`);\n\n if (!fs.existsSync(normalizedDest)) {\n fs.mkdirSync(normalizedDest, { recursive: true });\n }\n\n const isWindows = process.platform === 'win32';\n\n if (isWindows) {\n try {\n execSync(`robocopy \"${normalizedSrc}\" \"${normalizedDest}\" /E /NFL /NDL /NJH /NJS /nc /ns /np`, { stdio: 'pipe' });\n } catch (error: any) {\n if (error.status !== 1 && error.status !== 0) {\n throw error;\n }\n }\n } else {\n execSync(`cp -r \"${normalizedSrc}/.\" \"${normalizedDest}\"`, { stdio: 'pipe' });\n }\n\n if (fs.existsSync(normalizedDest) && fs.readdirSync(normalizedDest).length > 0) {\n log(`✅ Copied ${normalizedSrc} -> ${normalizedDest}`);\n return true;\n } else {\n log(`❌ Copy verification failed: destination is empty`);\n return false;\n }\n } catch (error: any) {\n log(`❌ Failed to copy ${src} -> ${dest}: ${error.message}`);\n return false;\n }\n}\n\nfunction updatePackageJson(packageName: string): boolean {\n try {\n log(`Updating package.json to add ${packageName} with \"*\" version...`);\n\n if (!fs.existsSync(CWD_PACKAGE_JSON)) {\n log(`Package.json file not found at: ${CWD_PACKAGE_JSON}`, true);\n return false;\n }\n\n const packageJson = JSON.parse(fs.readFileSync(CWD_PACKAGE_JSON, 'utf8'));\n\n const existingVersion = packageJson.dependencies?.[packageName] || packageJson.devDependencies?.[packageName];\n if (existingVersion && existingVersion !== '*') {\n log(`Package ${packageName} already exists with version: ${existingVersion}`, false, true);\n log(`Updating to \"*\" for local development...`, false, true);\n }\n\n if (!packageJson.dependencies) {\n packageJson.dependencies = {};\n }\n\n packageJson.dependencies[packageName] = '*';\n\n if (packageJson.devDependencies?.[packageName]) {\n delete packageJson.devDependencies[packageName];\n log(`Moved ${packageName} from devDependencies to dependencies`);\n }\n\n fs.writeFileSync(CWD_PACKAGE_JSON, JSON.stringify(packageJson, null, 2) + '\\n');\n\n logSuccess(`Added ${packageName}: \"*\" to package.json`);\n return true;\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n log(`Package.json file not found at: ${CWD_PACKAGE_JSON}`, true);\n } else if (error instanceof SyntaxError) {\n log(`Invalid JSON in package.json: ${error.message}`, true);\n } else if (error.code === 'EACCES') {\n log(`Permission denied writing to package.json`, true);\n } else {\n log(`Failed to update package.json: ${error.message}`, true);\n }\n return false;\n }\n}\n\nfunction installSpecificPackage(packageName: string) {\n logSection(`Installing Specific Package: ${packageName}`);\n\n if (!packageName || typeof packageName !== 'string' || !packageName.startsWith('@microfox/')) {\n log(`Invalid package name format: \"${packageName}\". Must start with \"@microfox/\"`, true);\n process.exit(1);\n }\n\n const packageShortName = packageName.replace('@microfox/', '');\n if (!packageShortName || packageShortName.trim() === '') {\n log(`Invalid package name: \"${packageName}\"`, true);\n process.exit(1);\n }\n\n const microfoxDir = path.join(MICROFOX_NODE_MODULES, '@microfox');\n const srcDir = path.join(microfoxDir, packageShortName);\n\n log(`Searching for package: ${packageName}`);\n log(`Source directory: ${srcDir}`);\n\n if (!fs.existsSync(microfoxDir)) {\n log(`Microfox packages directory not found at: ${microfoxDir}`, true);\n process.exit(1);\n }\n\n if (!fs.existsSync(srcDir)) {\n log(`Package \"${packageName}\" not found in source packages`, true);\n log(`Searched in: ${srcDir}`, true);\n process.exit(1);\n }\n\n if (!updatePackageJson(packageName)) {\n process.exit(1);\n }\n\n const microfoxScopeDir = path.join(CWD_NODE_MODULES, '@microfox');\n if (!fs.existsSync(microfoxScopeDir)) {\n fs.mkdirSync(microfoxScopeDir, { recursive: true });\n }\n\n const destDir = path.join(CWD_NODE_MODULES, '@microfox', packageShortName);\n\n log(`Copying package files...`);\n if (copyDirectory(srcDir, destDir)) {\n logSection(`✅ SUCCESS`);\n logSuccess(`Package ${packageName} installed for local development!`);\n log(`Package location: ${destDir}`);\n } else {\n log(`Failed to copy package files`, true);\n process.exit(1);\n }\n}\n\nfunction installAllPackages() {\n log('Installing all @microfox/* packages with \"*\" version from package.json...');\n\n const packageJson = JSON.parse(fs.readFileSync(CWD_PACKAGE_JSON, 'utf8'));\n const dependencies = { ...packageJson.dependencies, ...packageJson.devDependencies };\n\n const microfoxPackages = Object.entries(dependencies)\n .filter(([name, version]) => name.startsWith('@microfox/') && version === '*')\n .map(([name]) => name);\n\n if (microfoxPackages.length === 0) {\n log('ℹ️ No @microfox/* packages with \"*\" version found in package.json');\n return;\n }\n\n log(`Found ${microfoxPackages.length} @microfox/* packages to install:`);\n microfoxPackages.forEach(pkg => log(` - ${pkg}`));\n\n const microfoxScopeDir = path.join(CWD_NODE_MODULES, '@microfox');\n if (!fs.existsSync(microfoxScopeDir)) {\n fs.mkdirSync(microfoxScopeDir, { recursive: true });\n }\n\n let successCount = 0;\n let failureCount = 0;\n\n for (const packageName of microfoxPackages) {\n const packageShortName = packageName.replace('@microfox/', '');\n const srcDir = path.join(MICROFOX_NODE_MODULES, '@microfox', packageShortName);\n const destDir = path.join(CWD_NODE_MODULES, '@microfox', packageShortName);\n\n if (!fs.existsSync(srcDir)) {\n log(`⚠️ Package ${packageName} not found in source node_modules, skipping...`);\n failureCount++;\n continue;\n }\n\n if (copyDirectory(srcDir, destDir)) {\n successCount++;\n } else {\n failureCount++;\n }\n }\n\n log(`\\n📊 Installation Summary:`);\n log(` ✅ Successfully installed: ${successCount} packages`);\n if (failureCount > 0) {\n log(` ❌ Failed to install: ${failureCount} packages`);\n }\n}\n\nexport async function runExperimentalInstall(packages: string[], targetDirName: string) {\n try {\n logSection('Microfox Local Package Installer (Experimental)');\n log(`Started at: ${new Date().toLocaleString()}`);\n log(`Working directory: ${process.cwd()}`);\n\n const sourceDir = findSourceDir(targetDirName);\n if (!sourceDir) {\n log(`Could not find source directory '${targetDirName}' in any parent of a .git directory.`, true)\n log(`Searched up to 10 levels from ${process.cwd()}`, true)\n process.exit(1);\n }\n log(`Found source directory at: ${sourceDir}`);\n MICROFOX_NODE_MODULES = path.join(sourceDir, 'node_modules');\n\n if (!fs.existsSync(MICROFOX_NODE_MODULES)) {\n log(`Source node_modules directory not found at: ${MICROFOX_NODE_MODULES}`, true);\n log(`Please run 'npm install' or 'pnpm install' in ${sourceDir}`, true);\n process.exit(1);\n }\n\n if (!fs.existsSync(CWD_PACKAGE_JSON)) {\n log(`package.json not found in current directory: ${CWD_PACKAGE_JSON}`, true);\n process.exit(1);\n }\n\n if (packages.length > 0) {\n log(`Installing ${packages.length} specific package(s)...`);\n for (let i = 0; i < packages.length; i++) {\n const packageName = packages[i];\n log(`\\n[${i + 1}/${packages.length}] Processing: ${packageName}`);\n installSpecificPackage(packageName);\n }\n logSection('🎉 All Specified Packages Installed Successfully');\n } else {\n installAllPackages();\n }\n } catch (error: any) {\n log('', true);\n log(`Unexpected error occurred: ${error.message}`, true);\n if (error.stack) {\n log(`Stack trace: ${error.stack}`, true);\n }\n process.exit(1);\n }\n} ","import { Command } from 'commander';\nimport { runUpdate } from '../utils/experimental-updater';\n\nexport const updateCommand = new Command('update')\n .description('Update @microfox packages to the latest versions from npm.')\n .argument('[packages...]', 'Specific packages to update')\n .option('--experimental', 'Enable experimental features')\n .option('--dev', 'Update packages in devDependencies')\n .action(async (packages, options) => {\n if (options.experimental) {\n await runUpdate(packages, options);\n } else {\n console.log('This command is only available with the --experimental flag.');\n process.exit(1);\n }\n }); ","import fs from 'fs';\nimport path from 'path';\nimport { execSync } from 'child_process';\nimport chalk from 'chalk';\n\nconst CWD_PACKAGE_JSON = path.join(process.cwd(), 'package.json');\n\nfunction log(message: string, isError = false, isWarning = false) {\n const timestamp = new Date().toLocaleTimeString();\n let prefix;\n\n if (isError) {\n prefix = chalk.red(`❌ [update-microfox ${timestamp}]`);\n } else if (isWarning) {\n prefix = chalk.yellow(`⚠️ [update-microfox ${timestamp}]`);\n } else {\n prefix = chalk.blue(`ℹ️ [update-microfox ${timestamp}]`);\n }\n\n console.log(`${prefix} ${message}`);\n}\n\nfunction logSuccess(message: string) {\n const timestamp = new Date().toLocaleTimeString();\n console.log(chalk.green(`✅ [update-microfox ${timestamp}] ${message}`));\n}\n\nfunction logSection(title: string) {\n console.log('\\n' + '='.repeat(60));\n console.log(` ${title}`);\n console.log('='.repeat(60));\n}\n\nfunction updatePackage(packageName: string, isDev: boolean): boolean {\n log(`Updating package to latest: ${packageName}`);\n const saveFlag = isDev ? '--save-dev' : '--save';\n try {\n execSync(`npm install ${packageName}@latest ${saveFlag}`, { cwd: process.cwd(), stdio: 'pipe' });\n logSuccess(`Successfully updated ${packageName} to the latest version from npm.`);\n return true;\n } catch (error: any) {\n log(`Failed to update ${packageName}: ${error.message}`, true);\n log(`Stderr: ${error.stderr?.toString()}`, true);\n return false;\n }\n}\n\nfunction updateSpecificPackage(packageName: string, isDevFlag: boolean) {\n logSection(`Updating Specific Package: ${packageName}`);\n\n if (!packageName || typeof packageName !== 'string' || !packageName.startsWith('@microfox/')) {\n log(`Invalid package name: \"${packageName}\". Must start with \"@microfox/\".`, true);\n process.exit(1);\n }\n\n const packageJson = JSON.parse(fs.readFileSync(CWD_PACKAGE_JSON, 'utf8'));\n const dependencies = packageJson.dependencies || {};\n const devDependencies = packageJson.devDependencies || {};\n\n let isDev = !!devDependencies[packageName];\n\n if (!dependencies[packageName] && !devDependencies[packageName]) {\n log(`Package \"${packageName}\" not found in dependencies.`, false, true);\n log(`Attempting to install it as a new package...`, false, true);\n isDev = isDevFlag;\n } else {\n log(`Package found in ${isDev ? 'devDependencies' : 'dependencies'}.`);\n }\n\n if (updatePackage(packageName, isDev)) {\n logSection(`✅ SUCCESS`);\n logSuccess(`Package ${packageName} updated successfully!`);\n } else {\n log(`Failed to update ${packageName}`, true);\n process.exit(1);\n }\n}\n\nfunction updateAllPackages() {\n logSection('Updating all @microfox/* packages to latest');\n\n const packageJson = JSON.parse(fs.readFileSync(CWD_PACKAGE_JSON, 'utf8'));\n const dependencies = packageJson.dependencies || {};\n const devDependencies = packageJson.devDependencies || {};\n const allDependencies = { ...dependencies, ...devDependencies };\n\n const microfoxPackages = Object.entries(allDependencies)\n .filter(([name]) => name.startsWith('@microfox/'))\n .map(([name]) => name);\n\n if (microfoxPackages.length === 0) {\n log('ℹ️ No @microfox/* packages found in package.json.');\n return;\n }\n\n log(`Found ${microfoxPackages.length} packages to update:`);\n microfoxPackages.forEach(pkg => log(` - ${pkg}`));\n\n let successCount = 0;\n let failureCount = 0;\n\n for (const packageName of microfoxPackages) {\n const isDev = !!devDependencies[packageName];\n if (updatePackage(packageName, isDev)) {\n successCount++;\n } else {\n failureCount++;\n }\n }\n\n log(`\\n📊 Update Summary:`);\n log(` ✅ Successfully updated: ${successCount} packages`);\n if (failureCount > 0) {\n log(` ❌ Failed to update: ${failureCount} packages`);\n }\n}\n\nexport async function runUpdate(packages: string[], options: { dev?: boolean }) {\n try {\n logSection('Microfox Package Updater (Experimental)');\n\n if (!fs.existsSync(CWD_PACKAGE_JSON)) {\n log(`package.json not found in ${process.cwd()}`, true);\n process.exit(1);\n }\n\n if (packages.length > 0) {\n log(`Updating ${packages.length} specific package(s)...`);\n packages.forEach(pkg => updateSpecificPackage(pkg, !!options.dev));\n logSection('🎉 All specified packages processed.');\n } else {\n updateAllPackages();\n }\n } catch (error: any) {\n log('', true);\n log(`An unexpected error occurred: ${error.message}`, true);\n if (error.stack) {\n log(`Stack trace: ${error.stack}`, true);\n }\n process.exit(1);\n }\n} ","{\n \"name\": \"microfox\",\n \"version\": \"1.0.11\",\n \"description\": \"Universal CLI tool for creating modern TypeScript packages with npm availability checking\",\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": {\n \"microfox\": \"./dist/cli.js\"\n },\n \"files\": [\n \"dist/**/*\",\n \"CHANGELOG.md\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:watch\": \"tsup --watch\",\n \"clean\": \"rm -rf dist\",\n \"lint\": \"eslint \\\"./**/*.ts*\\\"\",\n \"prettier-check\": \"prettier --check \\\"./**/*.ts*\\\"\"\n },\n \"exports\": {\n \"./package.json\": \"./package.json\",\n \".\": {\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n }\n },\n \"dependencies\": {\n \"@types/micromatch\": \"^4.0.9\",\n \"axios\": \"^1.10.0\",\n \"chalk\": \"^5.3.0\",\n \"commander\": \"^14.0.0\",\n \"inquirer\": \"^12.7.0\",\n \"micromatch\": \"^4.0.8\",\n \"readline-sync\": \"^1.4.10\",\n \"zod\": \"^4.0.5\"\n },\n \"devDependencies\": {\n \"@microfox/tsconfig\": \"*\",\n \"@types/inquirer\": \"^9.0.8\",\n \"@types/node\": \"^24.0.8\",\n \"@types/readline-sync\": \"^1.4.8\",\n \"tsup\": \"^8\",\n \"typescript\": \"5.8.3\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"engines\": {\n \"node\": \">=20.0.0\"\n },\n \"homepage\": \"https://github.com/microfox-ai/microfox\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/microfox-ai/microfox.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/microfox-ai/microfox/issues\"\n },\n \"keywords\": [\n \"microfox\",\n \"cli\",\n \"tool\",\n \"package-management\",\n \"typescript\"\n ]\n}\n"],"mappings":"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","names":["import_commander","readlineSync","path","fs","chalk","inquirer","readlineSync","import_commander","import_fs","import_path","import_chalk","import_inquirer","import_readline_sync","path","chalk","fs","inquirer","readlineSync","import_commander","import_fs","import_path","import_chalk","fs","path","micromatch","chalk","axios","import_commander","import_chalk","import_axios","import_inquirer","inquirer","axios","chalk","import_commander","import_chalk","import_axios","import_path","import_fs","path","fs","import_path","readline","chalk","path","log","axios","import_commander","import_fs","import_path","import_child_process","import_chalk","path","chalk","fs","version","import_commander","import_fs","import_path","import_child_process","import_chalk","CWD_PACKAGE_JSON","path","log","chalk","logSuccess","logSection","fs"]}
package/dist/cli.mjs ADDED
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ updateCommand
4
+ } from "./chunk-UHWJTQKW.mjs";
5
+ import {
6
+ addCommand
7
+ } from "./chunk-UYROVW53.mjs";
8
+ import {
9
+ codeCommand
10
+ } from "./chunk-UFRGJMF4.mjs";
11
+ import {
12
+ installCommand
13
+ } from "./chunk-ARAHSYJI.mjs";
14
+ import {
15
+ kickstartCommand
16
+ } from "./chunk-JGAX4PD6.mjs";
17
+ import "./chunk-TZQZMKHP.mjs";
18
+ import {
19
+ pushCommand
20
+ } from "./chunk-4HNHBA2H.mjs";
21
+ import {
22
+ logsCommand,
23
+ metricsCommand,
24
+ statusCommand
25
+ } from "./chunk-XGFSFWK3.mjs";
26
+ import "./chunk-KPJJOO76.mjs";
27
+
28
+ // src/cli.ts
29
+ import { Command } from "commander";
30
+
31
+ // package.json
32
+ var version = "1.0.11";
33
+
34
+ // src/cli.ts
35
+ var program = new Command();
36
+ program.name("microfox").description("Universal CLI tool for creating and managing Microfox projects").version(version);
37
+ program.addCommand(kickstartCommand);
38
+ program.addCommand(addCommand);
39
+ program.addCommand(pushCommand);
40
+ program.addCommand(statusCommand);
41
+ program.addCommand(logsCommand);
42
+ program.addCommand(metricsCommand);
43
+ program.addCommand(codeCommand);
44
+ program.addCommand(installCommand);
45
+ program.addCommand(updateCommand);
46
+ program.action(() => {
47
+ if (process.argv.length <= 2) {
48
+ program.help();
49
+ }
50
+ });
51
+ program.parse(process.argv);
52
+ //# sourceMappingURL=cli.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts","../package.json"],"sourcesContent":["import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { kickstartCommand } from './commands/kickstart';\nimport { addCommand } from './commands/add';\nimport { pushCommand } from './commands/push';\nimport { statusCommand, logsCommand, metricsCommand } from './commands/status';\nimport { codeCommand } from './commands/code';\nimport { installCommand } from './commands/install';\nimport { updateCommand } from './commands/update';\nimport { version } from '../package.json';\n\nconst program = new Command();\n\nprogram\n .name('microfox')\n .description('Universal CLI tool for creating and managing Microfox projects')\n .version(version);\n\nprogram.addCommand(kickstartCommand);\nprogram.addCommand(addCommand);\nprogram.addCommand(pushCommand);\nprogram.addCommand(statusCommand);\nprogram.addCommand(logsCommand);\nprogram.addCommand(metricsCommand);\nprogram.addCommand(codeCommand);\nprogram.addCommand(installCommand);\nprogram.addCommand(updateCommand);\n\nprogram.action(() => {\n // Show help if no command is provided\n if (process.argv.length <= 2) {\n program.help();\n }\n});\n\nprogram.parse(process.argv); ","{\n \"name\": \"microfox\",\n \"version\": \"1.0.11\",\n \"description\": \"Universal CLI tool for creating modern TypeScript packages with npm availability checking\",\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": {\n \"microfox\": \"./dist/cli.js\"\n },\n \"files\": [\n \"dist/**/*\",\n \"CHANGELOG.md\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:watch\": \"tsup --watch\",\n \"clean\": \"rm -rf dist\",\n \"lint\": \"eslint \\\"./**/*.ts*\\\"\",\n \"prettier-check\": \"prettier --check \\\"./**/*.ts*\\\"\"\n },\n \"exports\": {\n \"./package.json\": \"./package.json\",\n \".\": {\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n }\n },\n \"dependencies\": {\n \"@types/micromatch\": \"^4.0.9\",\n \"axios\": \"^1.10.0\",\n \"chalk\": \"^5.3.0\",\n \"commander\": \"^14.0.0\",\n \"inquirer\": \"^12.7.0\",\n \"micromatch\": \"^4.0.8\",\n \"readline-sync\": \"^1.4.10\",\n \"zod\": \"^4.0.5\"\n },\n \"devDependencies\": {\n \"@microfox/tsconfig\": \"*\",\n \"@types/inquirer\": \"^9.0.8\",\n \"@types/node\": \"^24.0.8\",\n \"@types/readline-sync\": \"^1.4.8\",\n \"tsup\": \"^8\",\n \"typescript\": \"5.8.3\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"engines\": {\n \"node\": \">=20.0.0\"\n },\n \"homepage\": \"https://github.com/microfox-ai/microfox\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/microfox-ai/microfox.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/microfox-ai/microfox/issues\"\n },\n \"keywords\": [\n \"microfox\",\n \"cli\",\n \"tool\",\n \"package-management\",\n \"typescript\"\n ]\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,eAAe;;;ACEtB,cAAW;;;ADSb,IAAM,UAAU,IAAI,QAAQ;AAE5B,QACG,KAAK,UAAU,EACf,YAAY,gEAAgE,EAC5E,QAAQ,OAAO;AAElB,QAAQ,WAAW,gBAAgB;AACnC,QAAQ,WAAW,UAAU;AAC7B,QAAQ,WAAW,WAAW;AAC9B,QAAQ,WAAW,aAAa;AAChC,QAAQ,WAAW,WAAW;AAC9B,QAAQ,WAAW,cAAc;AACjC,QAAQ,WAAW,WAAW;AAC9B,QAAQ,WAAW,cAAc;AACjC,QAAQ,WAAW,aAAa;AAEhC,QAAQ,OAAO,MAAM;AAEnB,MAAI,QAAQ,KAAK,UAAU,GAAG;AAC5B,YAAQ,KAAK;AAAA,EACf;AACF,CAAC;AAED,QAAQ,MAAM,QAAQ,IAAI;","names":[]}
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+
3
+ declare const addCommand: Command;
4
+
5
+ export { addCommand };
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+
3
+ declare const addCommand: Command;
4
+
5
+ export { addCommand };
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+
31
+ // src/commands/add.ts
32
+ var add_exports = {};
33
+ __export(add_exports, {
34
+ addCommand: () => addCommand
35
+ });
36
+ module.exports = __toCommonJS(add_exports);
37
+ var import_commander = require("commander");
38
+ var import_fs = __toESM(require("fs"));
39
+ var import_path = __toESM(require("path"));
40
+ var import_chalk = __toESM(require("chalk"));
41
+ var import_inquirer = __toESM(require("inquirer"));
42
+ var import_readline_sync = __toESM(require("readline-sync"));
43
+
44
+ // src/utils/getProjectRoot.ts
45
+ var getWorkingDirectory = () => {
46
+ return process.cwd();
47
+ };
48
+
49
+ // src/commands/add.ts
50
+ async function addBackgroundAgentFunctions(name) {
51
+ const workingDir = getWorkingDirectory();
52
+ const functionsDir = import_path.default.join(workingDir, "src", "functions", name);
53
+ console.log(
54
+ import_chalk.default.blue(
55
+ `\u{1F680} Adding background agent functions ${import_chalk.default.bold(name)} at ${functionsDir}
56
+ `
57
+ )
58
+ );
59
+ import_fs.default.mkdirSync(functionsDir, { recursive: true });
60
+ const templateDir = import_path.default.resolve(__dirname, "background-agent", "src", "functions");
61
+ const entries = import_fs.default.readdirSync(templateDir, { withFileTypes: true });
62
+ for (const entry of entries) {
63
+ const srcPath = import_path.default.join(templateDir, entry.name);
64
+ const destPath = import_path.default.join(functionsDir, entry.name.replace(/\.txt$/, ""));
65
+ if (!entry.isDirectory() && entry.name.endsWith(".txt")) {
66
+ const templateContent = import_fs.default.readFileSync(srcPath, "utf-8");
67
+ const content = templateContent.replace(/<%= agentName %>/g, name);
68
+ import_fs.default.writeFileSync(destPath, content);
69
+ console.log(import_chalk.default.green(`\u2705 Created ${import_path.default.relative(workingDir, destPath)}`));
70
+ }
71
+ }
72
+ }
73
+ async function addAction() {
74
+ console.log(import_chalk.default.cyan("\u2728 Add new features to your project!\n"));
75
+ const workingDir = getWorkingDirectory();
76
+ const microfoxConfigPath = import_path.default.join(workingDir, "microfox.json");
77
+ if (!import_fs.default.existsSync(microfoxConfigPath)) {
78
+ console.log(import_chalk.default.red("Error: `microfox.json` not found in the current directory."));
79
+ console.log(import_chalk.default.red("Please run this command from the root of a Microfox project."));
80
+ return;
81
+ }
82
+ const { featureType } = await import_inquirer.default.prompt([
83
+ {
84
+ type: "list",
85
+ name: "featureType",
86
+ message: "Select what you want to add:",
87
+ choices: ["background_agent_functions"]
88
+ }
89
+ ]);
90
+ if (!featureType) {
91
+ console.log(import_chalk.default.yellow("Operation cancelled."));
92
+ return;
93
+ }
94
+ if (featureType === "background_agent_functions") {
95
+ const functionName = import_readline_sync.default.question(
96
+ import_chalk.default.yellow("\u{1F4E6} Enter a name for the new functions: ")
97
+ );
98
+ if (!functionName.trim()) {
99
+ throw new Error("Function name cannot be empty");
100
+ }
101
+ await addBackgroundAgentFunctions(functionName.trim());
102
+ console.log(
103
+ import_chalk.default.green(
104
+ `
105
+ \u{1F389} Successfully added background agent functions ${import_chalk.default.bold(functionName)}!`
106
+ )
107
+ );
108
+ console.log(import_chalk.default.gray(`\u{1F4CD} Located at src/functions/${functionName.trim()}`));
109
+ console.log(import_chalk.default.yellow("\n\u{1F4A1} Next steps:"));
110
+ console.log(import_chalk.default.yellow(" 1. Check the new files in src/functions/"));
111
+ console.log(import_chalk.default.yellow(" 2. Update your agent logic to use the new functions."));
112
+ }
113
+ }
114
+ var addCommand = new import_commander.Command("add").description("Add features to a Microfox project").action(async () => {
115
+ try {
116
+ await addAction();
117
+ } catch (error) {
118
+ console.error(import_chalk.default.red("\u274C Error:"), error instanceof Error ? error.message : String(error));
119
+ process.exit(1);
120
+ }
121
+ });
122
+ // Annotate the CommonJS export names for ESM import in node:
123
+ 0 && (module.exports = {
124
+ addCommand
125
+ });
126
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/add.ts","../../src/utils/getProjectRoot.ts"],"sourcesContent":["import { Command } from 'commander';\nimport fs from 'fs';\nimport path from 'path';\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport readlineSync from 'readline-sync';\nimport { getWorkingDirectory } from '../utils/getProjectRoot';\n\nasync function addBackgroundAgentFunctions(name: string): Promise<void> {\n const workingDir = getWorkingDirectory();\n const functionsDir = path.join(workingDir, 'src', 'functions', name);\n\n // if (fs.existsSync(functionsDir)) {\n // throw new Error(`Directory already exists at ${functionsDir}`);\n // }\n\n console.log(\n chalk.blue(\n `🚀 Adding background agent functions ${chalk.bold(name)} at ${functionsDir}\\n`,\n ),\n );\n\n fs.mkdirSync(functionsDir, { recursive: true });\n\n const templateDir = path.resolve(__dirname, 'background-agent', 'src', 'functions');\n\n const entries = fs.readdirSync(templateDir, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(templateDir, entry.name);\n const destPath = path.join(functionsDir, entry.name.replace(/\\.txt$/, ''));\n\n if (!entry.isDirectory() && entry.name.endsWith('.txt')) {\n const templateContent = fs.readFileSync(srcPath, 'utf-8');\n const content = templateContent.replace(/<%= agentName %>/g, name);\n fs.writeFileSync(destPath, content);\n console.log(chalk.green(`✅ Created ${path.relative(workingDir, destPath)}`));\n }\n }\n}\n\nasync function addAction(): Promise<void> {\n console.log(chalk.cyan(\"✨ Add new features to your project!\\n\"));\n\n const workingDir = getWorkingDirectory();\n const microfoxConfigPath = path.join(workingDir, 'microfox.json');\n if (!fs.existsSync(microfoxConfigPath)) {\n console.log(chalk.red('Error: `microfox.json` not found in the current directory.'));\n console.log(chalk.red('Please run this command from the root of a Microfox project.'));\n return;\n }\n\n const { featureType } = await inquirer.prompt([\n {\n type: 'list',\n name: 'featureType',\n message: 'Select what you want to add:',\n choices: ['background_agent_functions'],\n },\n ]);\n\n if (!featureType) {\n console.log(chalk.yellow('Operation cancelled.'));\n return;\n }\n\n if (featureType === 'background_agent_functions') {\n const functionName = readlineSync.question(\n chalk.yellow('📦 Enter a name for the new functions: '),\n );\n\n if (!functionName.trim()) {\n throw new Error('Function name cannot be empty');\n }\n\n await addBackgroundAgentFunctions(functionName.trim());\n\n console.log(\n chalk.green(\n `\\n🎉 Successfully added background agent functions ${chalk.bold(functionName)}!`,\n ),\n );\n console.log(chalk.gray(`📍 Located at src/functions/${functionName.trim()}`));\n console.log(chalk.yellow('\\n💡 Next steps:'));\n console.log(chalk.yellow(' 1. Check the new files in src/functions/'));\n console.log(chalk.yellow(' 2. Update your agent logic to use the new functions.'));\n }\n}\n\nexport const addCommand = new Command('add')\n .description('Add features to a Microfox project')\n .action(async () => {\n try {\n await addAction();\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n }); ","export const getWorkingDirectory = () => {\n // Return the current working directory where the CLI is executed\n // This allows creating packages in any directory\n return process.cwd();\n}; "],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAwB;AACxB,gBAAe;AACf,kBAAiB;AACjB,mBAAkB;AAClB,sBAAqB;AACrB,2BAAyB;;;ACLlB,IAAM,sBAAsB,MAAM;AAGvC,SAAO,QAAQ,IAAI;AACrB;;;ADIA,eAAe,4BAA4B,MAA6B;AACtE,QAAM,aAAa,oBAAoB;AACvC,QAAM,eAAe,YAAAA,QAAK,KAAK,YAAY,OAAO,aAAa,IAAI;AAMnE,UAAQ;AAAA,IACN,aAAAC,QAAM;AAAA,MACJ,+CAAwC,aAAAA,QAAM,KAAK,IAAI,CAAC,OAAO,YAAY;AAAA;AAAA,IAC7E;AAAA,EACF;AAEA,YAAAC,QAAG,UAAU,cAAc,EAAE,WAAW,KAAK,CAAC;AAE9C,QAAM,cAAc,YAAAF,QAAK,QAAQ,WAAW,oBAAoB,OAAO,WAAW;AAElF,QAAM,UAAU,UAAAE,QAAG,YAAY,aAAa,EAAE,eAAe,KAAK,CAAC;AACnE,aAAW,SAAS,SAAS;AAC3B,UAAM,UAAU,YAAAF,QAAK,KAAK,aAAa,MAAM,IAAI;AACjD,UAAM,WAAW,YAAAA,QAAK,KAAK,cAAc,MAAM,KAAK,QAAQ,UAAU,EAAE,CAAC;AAEzE,QAAI,CAAC,MAAM,YAAY,KAAK,MAAM,KAAK,SAAS,MAAM,GAAG;AACvD,YAAM,kBAAkB,UAAAE,QAAG,aAAa,SAAS,OAAO;AACxD,YAAM,UAAU,gBAAgB,QAAQ,qBAAqB,IAAI;AACjE,gBAAAA,QAAG,cAAc,UAAU,OAAO;AAClC,cAAQ,IAAI,aAAAD,QAAM,MAAM,kBAAa,YAAAD,QAAK,SAAS,YAAY,QAAQ,CAAC,EAAE,CAAC;AAAA,IAC7E;AAAA,EACF;AACF;AAEA,eAAe,YAA2B;AACxC,UAAQ,IAAI,aAAAC,QAAM,KAAK,4CAAuC,CAAC;AAE/D,QAAM,aAAa,oBAAoB;AACvC,QAAM,qBAAqB,YAAAD,QAAK,KAAK,YAAY,eAAe;AAChE,MAAI,CAAC,UAAAE,QAAG,WAAW,kBAAkB,GAAG;AACtC,YAAQ,IAAI,aAAAD,QAAM,IAAI,4DAA4D,CAAC;AACnF,YAAQ,IAAI,aAAAA,QAAM,IAAI,8DAA8D,CAAC;AACrF;AAAA,EACF;AAEA,QAAM,EAAE,YAAY,IAAI,MAAM,gBAAAE,QAAS,OAAO;AAAA,IAC5C;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,CAAC,4BAA4B;AAAA,IACxC;AAAA,EACF,CAAC;AAED,MAAI,CAAC,aAAa;AAChB,YAAQ,IAAI,aAAAF,QAAM,OAAO,sBAAsB,CAAC;AAChD;AAAA,EACF;AAEA,MAAI,gBAAgB,8BAA8B;AAChD,UAAM,eAAe,qBAAAG,QAAa;AAAA,MAChC,aAAAH,QAAM,OAAO,gDAAyC;AAAA,IACxD;AAEA,QAAI,CAAC,aAAa,KAAK,GAAG;AACxB,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AAEA,UAAM,4BAA4B,aAAa,KAAK,CAAC;AAErD,YAAQ;AAAA,MACN,aAAAA,QAAM;AAAA,QACJ;AAAA,0DAAsD,aAAAA,QAAM,KAAK,YAAY,CAAC;AAAA,MAChF;AAAA,IACF;AACA,YAAQ,IAAI,aAAAA,QAAM,KAAK,sCAA+B,aAAa,KAAK,CAAC,EAAE,CAAC;AAC5E,YAAQ,IAAI,aAAAA,QAAM,OAAO,yBAAkB,CAAC;AAC5C,YAAQ,IAAI,aAAAA,QAAM,OAAO,6CAA6C,CAAC;AACvE,YAAQ,IAAI,aAAAA,QAAM,OAAO,yDAAyD,CAAC;AAAA,EACrF;AACF;AAEO,IAAM,aAAa,IAAI,yBAAQ,KAAK,EACtC,YAAY,oCAAoC,EAChD,OAAO,YAAY;AAChB,MAAI;AACA,UAAM,UAAU;AAAA,EACpB,SAAS,OAAO;AACZ,YAAQ,MAAM,aAAAA,QAAM,IAAI,eAAU,GAAG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAC3F,YAAQ,KAAK,CAAC;AAAA,EAClB;AACJ,CAAC;","names":["path","chalk","fs","inquirer","readlineSync"]}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ addCommand
4
+ } from "../chunk-UYROVW53.mjs";
5
+ import "../chunk-TZQZMKHP.mjs";
6
+ import "../chunk-KPJJOO76.mjs";
7
+ export {
8
+ addCommand
9
+ };
10
+ //# sourceMappingURL=add.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+
3
+ declare const codeCommand: Command;
4
+
5
+ export { codeCommand };
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+
3
+ declare const codeCommand: Command;
4
+
5
+ export { codeCommand };
@@ -0,0 +1,187 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+
31
+ // src/commands/code.ts
32
+ var code_exports = {};
33
+ __export(code_exports, {
34
+ codeCommand: () => codeCommand
35
+ });
36
+ module.exports = __toCommonJS(code_exports);
37
+ var import_commander = require("commander");
38
+ var import_chalk = __toESM(require("chalk"));
39
+ var import_axios = __toESM(require("axios"));
40
+ var import_child_process = require("child_process");
41
+
42
+ // src/utils/findProjectRoot.ts
43
+ var import_path = __toESM(require("path"));
44
+ var import_fs = __toESM(require("fs"));
45
+ async function findProjectRoot(startPath = process.cwd()) {
46
+ let currentPath = startPath;
47
+ let count = 0;
48
+ while (true) {
49
+ const microfoxRootPath = import_path.default.join(currentPath, "microfox-root");
50
+ if (import_fs.default.existsSync(microfoxRootPath)) {
51
+ return currentPath;
52
+ }
53
+ const parentPath = import_path.default.dirname(currentPath);
54
+ if (parentPath === currentPath || count > 10) {
55
+ return null;
56
+ }
57
+ currentPath = parentPath;
58
+ }
59
+ }
60
+
61
+ // src/commands/code.ts
62
+ var import_path2 = __toESM(require("path"));
63
+ var import_readline = __toESM(require("readline"));
64
+ var NEXTJS_PORT = 3e3;
65
+ var API_URL = `http://localhost:${NEXTJS_PORT}/api/agent`;
66
+ var createLogger = (rl) => {
67
+ return (source, message, color) => {
68
+ import_readline.default.cursorTo(process.stdout, 0);
69
+ import_readline.default.clearLine(process.stdout, 0);
70
+ const prefix = color(`[${source}]`);
71
+ const lines = message.trim().split("\n");
72
+ for (const line of lines) {
73
+ console.log(`${prefix} ${line}`);
74
+ }
75
+ rl.prompt(true);
76
+ };
77
+ };
78
+ async function codeAction() {
79
+ var _a, _b;
80
+ let childProcess = null;
81
+ const killProcess = () => {
82
+ if (childProcess && childProcess.pid) {
83
+ console.log(import_chalk.default.yellow("\nGracefully shutting down..."));
84
+ if (process.platform === "win32") {
85
+ (0, import_child_process.spawn)("taskkill", ["/pid", childProcess.pid.toString(), "/f", "/t"]);
86
+ } else {
87
+ childProcess.kill("SIGINT");
88
+ }
89
+ childProcess = null;
90
+ }
91
+ };
92
+ process.on("SIGINT", () => {
93
+ killProcess();
94
+ process.exit(0);
95
+ });
96
+ process.on("exit", killProcess);
97
+ try {
98
+ const projectRoot = await findProjectRoot();
99
+ if (!projectRoot) {
100
+ console.error(
101
+ import_chalk.default.red("Error: Could not find project root. Make sure you are inside a Microfox project.")
102
+ );
103
+ process.exit(1);
104
+ }
105
+ const codeAppPath = import_path2.default.join(projectRoot, "apps", "code");
106
+ console.log(import_chalk.default.cyan(`Starting Next.js server in ${codeAppPath}...`));
107
+ childProcess = (0, import_child_process.spawn)("npm", ["run", "dev"], {
108
+ cwd: codeAppPath,
109
+ shell: true,
110
+ env: { ...process.env, FORCE_COLOR: "true" }
111
+ });
112
+ const rl = import_readline.default.createInterface({
113
+ input: process.stdin,
114
+ output: process.stdout,
115
+ prompt: import_chalk.default.cyan("> ")
116
+ });
117
+ const log = createLogger(rl);
118
+ let serverReady = false;
119
+ const onServerData = (data) => {
120
+ const output = data.toString();
121
+ if (!serverReady) {
122
+ process.stdout.write(output);
123
+ if (output.toLowerCase().includes("ready in") || output.toLowerCase().includes("compiled successfully")) {
124
+ serverReady = true;
125
+ console.log(import_chalk.default.green("\nServer is ready. You can now type your queries."));
126
+ rl.prompt();
127
+ }
128
+ } else {
129
+ log("nextjs", output, import_chalk.default.gray);
130
+ }
131
+ };
132
+ (_a = childProcess.stdout) == null ? void 0 : _a.on("data", onServerData);
133
+ (_b = childProcess.stderr) == null ? void 0 : _b.on("data", onServerData);
134
+ childProcess.on("exit", (code) => {
135
+ log("system", `Next.js process exited with code ${code}`, import_chalk.default.red);
136
+ process.exit(code != null ? code : 1);
137
+ });
138
+ rl.on("line", async (line) => {
139
+ const query = line.trim();
140
+ if (!serverReady) {
141
+ log("system", "Server is not ready yet, please wait.", import_chalk.default.yellow);
142
+ rl.prompt();
143
+ return;
144
+ }
145
+ if (query.toLowerCase() === "exit") {
146
+ rl.close();
147
+ }
148
+ if (query) {
149
+ try {
150
+ const response = await import_axios.default.post(API_URL, { prompt: query });
151
+ const responseData = typeof response.data === "object" ? JSON.stringify(response.data, null, 2) : response.data;
152
+ log("agent", responseData, import_chalk.default.green);
153
+ } catch (error) {
154
+ if (import_axios.default.isAxiosError(error)) {
155
+ log("agent", `Error: ${error.message}`, import_chalk.default.red);
156
+ } else if (error instanceof Error) {
157
+ log("agent", `An unknown error occurred: ${error.message}`, import_chalk.default.red);
158
+ }
159
+ }
160
+ }
161
+ rl.prompt();
162
+ });
163
+ rl.on("close", () => {
164
+ killProcess();
165
+ process.exit(0);
166
+ });
167
+ } catch (error) {
168
+ killProcess();
169
+ if (error instanceof Error) {
170
+ console.error(import_chalk.default.red(`Error: ${error.message}`));
171
+ }
172
+ process.exit(1);
173
+ }
174
+ }
175
+ var codeCommand = new import_commander.Command("code").description("Run the code agent for your project").action(async () => {
176
+ try {
177
+ await codeAction();
178
+ } catch (error) {
179
+ console.error(import_chalk.default.red("\u274C Error:"), error instanceof Error ? error.message : String(error));
180
+ process.exit(1);
181
+ }
182
+ });
183
+ // Annotate the CommonJS export names for ESM import in node:
184
+ 0 && (module.exports = {
185
+ codeCommand
186
+ });
187
+ //# sourceMappingURL=code.js.map