@microfox/cli
Version:
Universal CLI tool for creating modern TypeScript packages with npm availability checking
1 lines • 14.3 kB
Source Map (JSON)
{"version":3,"sources":["../src/cli.ts","../src/commands/code.ts","../src/utils/findProjectRoot.ts","../package.json"],"sourcesContent":["import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { kickstartCommand } from './commands/kickstart';\nimport { pushCommand } from './commands/push';\nimport { statusCommand, logsCommand, metricsCommand } from './commands/status';\nimport { codeCommand } from './commands/code';\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\n .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 kickstartCommand();\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\nprogram\n .command('push')\n .description('Deploy your agent to the Microfox platform')\n .action(async () => {\n try {\n await pushCommand();\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\nprogram\n .command('status [runId]')\n .description('Check the deployment status of your agent')\n .action(async (runId) => {\n try {\n await statusCommand(runId);\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\nprogram\n .command('logs [runId]')\n .description('View the deployment logs for your agent')\n .action(async (runId) => {\n try {\n await logsCommand(runId);\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\nprogram\n .command('metrics [runId]')\n .description('View the deployment metrics for your agent')\n .action(async (runId) => {\n try {\n await metricsCommand(runId);\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\nprogram\n .command('code')\n .description('Run the code agent for your project')\n .action(async () => {\n try {\n await codeCommand();\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n });\n\n// Show help if no command is provided\nif (process.argv.length <= 2) {\n program.help();\n}\n\nprogram.parse(process.argv); ","import 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: chalk.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\n\nexport async function codeCommand(): 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} ","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} ","{\n \"name\": \"@microfox/cli\",\n \"version\": \"1.0.10\",\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.4.1\",\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":["chalk","path","chalk"]}