@agentforge/cli 0.5.0 → 0.5.2
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/README.md +51 -0
- package/dist/index.cjs +174 -86
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +172 -84
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/api/package.json +2 -2
- package/templates/cli/package.json +2 -2
- package/templates/full/package.json +2 -2
- package/templates/minimal/package.json +2 -2
- package/templates/reusable-agent/README.md +148 -0
- package/templates/reusable-agent/index.test.ts +155 -0
- package/templates/reusable-agent/index.ts +147 -0
- package/templates/reusable-agent/package.json +35 -0
- package/templates/reusable-agent/prompt-loader.ts +43 -0
- package/templates/reusable-agent/prompts/system.md +28 -0
- package/templates/reusable-agent/tsconfig.json +10 -0
- package/templates/reusable-agent/vitest.config.ts +14 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/logger.ts","../src/utils/prompts.ts","../src/utils/fs.ts","../src/utils/package-manager.ts","../src/utils/git.ts","../src/commands/create.ts","../src/commands/dev.ts","../src/commands/build.ts","../src/commands/test.ts","../src/commands/lint.ts","../src/commands/agent/create.ts","../src/commands/agent/list.ts","../src/commands/agent/test.ts","../src/commands/agent/deploy.ts","../src/commands/tool/create.ts","../src/commands/tool/list.ts","../src/commands/tool/test.ts","../src/commands/tool/publish.ts","../src/index.ts"],"names":["chalk","ora","inquirer","__filename","fileURLToPath","__dirname","path","fs","glob","execa","testCommand","generateTestContent","capitalize","extractDescription","Command"],"mappings":"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","file":"index.cjs","sourcesContent":["import chalk from 'chalk';\nimport ora, { Ora } from 'ora';\n\nexport class Logger {\n private spinner: Ora | null = null;\n\n info(message: string): void {\n console.log(chalk.blue('ℹ'), message);\n }\n\n success(message: string): void {\n console.log(chalk.green('✔'), message);\n }\n\n warn(message: string): void {\n console.log(chalk.yellow('⚠'), message);\n }\n\n error(message: string): void {\n console.log(chalk.red('✖'), message);\n }\n\n debug(message: string): void {\n if (process.env.DEBUG) {\n console.log(chalk.gray('🐛'), message);\n }\n }\n\n startSpinner(message: string): void {\n this.spinner = ora(message).start();\n }\n\n updateSpinner(message: string): void {\n if (this.spinner) {\n this.spinner.text = message;\n }\n }\n\n succeedSpinner(message?: string): void {\n if (this.spinner) {\n this.spinner.succeed(message);\n this.spinner = null;\n }\n }\n\n failSpinner(message?: string): void {\n if (this.spinner) {\n this.spinner.fail(message);\n this.spinner = null;\n }\n }\n\n stopSpinner(): void {\n if (this.spinner) {\n this.spinner.stop();\n this.spinner = null;\n }\n }\n\n newLine(): void {\n console.log();\n }\n\n divider(): void {\n console.log(chalk.gray('─'.repeat(50)));\n }\n\n header(message: string): void {\n this.newLine();\n console.log(chalk.bold.cyan(message));\n this.divider();\n }\n\n code(code: string): void {\n console.log(chalk.gray(' ' + code));\n }\n\n list(items: string[]): void {\n items.forEach((item) => {\n console.log(chalk.gray(' •'), item);\n });\n }\n}\n\nexport const logger = new Logger();\n\n","import inquirer from 'inquirer';\nimport type { PackageManager } from './package-manager.js';\n\nexport interface ProjectPromptAnswers {\n projectName: string;\n template: 'minimal' | 'full' | 'api' | 'cli';\n packageManager: PackageManager;\n installDependencies: boolean;\n initGit: boolean;\n author?: string;\n description?: string;\n}\n\nexport async function promptProjectSetup(defaults: Partial<ProjectPromptAnswers> = {}): Promise<ProjectPromptAnswers> {\n return inquirer.prompt([\n {\n type: 'input',\n name: 'projectName',\n message: 'Project name:',\n default: defaults.projectName || 'my-agent',\n validate: (input: string) => {\n if (!input) return 'Project name is required';\n if (!/^[a-z0-9-]+$/.test(input)) {\n return 'Project name must contain only lowercase letters, numbers, and hyphens';\n }\n return true;\n },\n },\n {\n type: 'list',\n name: 'template',\n message: 'Select a template:',\n choices: [\n { name: 'Minimal Starter - Basic ReAct agent', value: 'minimal' },\n { name: 'Full-Featured App - Multi-agent system with all features', value: 'full' },\n { name: 'API Service - Express/Fastify API with agents', value: 'api' },\n { name: 'CLI Tool - Command-line agent application', value: 'cli' },\n ],\n default: defaults.template || 'minimal',\n },\n {\n type: 'list',\n name: 'packageManager',\n message: 'Package manager:',\n choices: ['pnpm', 'npm', 'yarn'],\n default: defaults.packageManager || 'pnpm',\n },\n {\n type: 'confirm',\n name: 'installDependencies',\n message: 'Install dependencies?',\n default: defaults.installDependencies !== false,\n },\n {\n type: 'confirm',\n name: 'initGit',\n message: 'Initialize git repository?',\n default: defaults.initGit !== false,\n },\n {\n type: 'input',\n name: 'author',\n message: 'Author name (optional):',\n default: defaults.author,\n },\n {\n type: 'input',\n name: 'description',\n message: 'Project description (optional):',\n default: defaults.description,\n },\n ]);\n}\n\nexport interface AgentPromptAnswers {\n name: string;\n pattern: 'react' | 'plan-execute' | 'reflection' | 'multi-agent';\n description?: string;\n generateTests: boolean;\n}\n\nexport async function promptAgentSetup(defaults: Partial<AgentPromptAnswers> = {}): Promise<AgentPromptAnswers> {\n return inquirer.prompt([\n {\n type: 'input',\n name: 'name',\n message: 'Agent name:',\n default: defaults.name,\n validate: (input: string) => {\n if (!input) return 'Agent name is required';\n if (!/^[a-zA-Z][a-zA-Z0-9]*$/.test(input)) {\n return 'Agent name must start with a letter and contain only letters and numbers';\n }\n return true;\n },\n },\n {\n type: 'list',\n name: 'pattern',\n message: 'Agent pattern:',\n choices: [\n { name: 'ReAct - Reasoning and Acting', value: 'react' },\n { name: 'Plan-Execute - Planning and Execution', value: 'plan-execute' },\n { name: 'Reflection - Generate, Reflect, Revise', value: 'reflection' },\n { name: 'Multi-Agent - Supervisor and Workers', value: 'multi-agent' },\n ],\n default: defaults.pattern || 'react',\n },\n {\n type: 'input',\n name: 'description',\n message: 'Agent description (optional):',\n default: defaults.description,\n },\n {\n type: 'confirm',\n name: 'generateTests',\n message: 'Generate tests?',\n default: defaults.generateTests !== false,\n },\n ]);\n}\n\nexport interface ToolPromptAnswers {\n name: string;\n category: 'web' | 'data' | 'file' | 'utility';\n description: string;\n structure: 'single' | 'multi';\n generateTests: boolean;\n}\n\nexport async function promptToolSetup(defaults: Partial<ToolPromptAnswers> = {}): Promise<ToolPromptAnswers> {\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'name',\n message: 'Tool name:',\n default: defaults.name,\n when: () => !defaults.name,\n validate: (input: string) => {\n if (!input) return 'Tool name is required';\n if (!/^[a-zA-Z][a-zA-Z0-9]*$/.test(input)) {\n return 'Tool name must start with a letter and contain only letters and numbers';\n }\n return true;\n },\n },\n {\n type: 'list',\n name: 'category',\n message: 'Tool category:',\n choices: [\n { name: 'Web - HTTP, scraping, parsing', value: 'web' },\n { name: 'Data - JSON, CSV, XML processing', value: 'data' },\n { name: 'File - File operations', value: 'file' },\n { name: 'Utility - General utilities', value: 'utility' },\n ],\n default: defaults.category || 'utility',\n when: () => !defaults.category,\n },\n {\n type: 'input',\n name: 'description',\n message: 'Tool description:',\n default: defaults.description,\n when: () => !defaults.description,\n validate: (input: string) => {\n if (!input) return 'Tool description is required';\n return true;\n },\n },\n {\n type: 'list',\n name: 'structure',\n message: 'Tool structure:',\n choices: [\n {\n name: 'Single file - Simple tools (<150 lines, single responsibility)',\n value: 'single'\n },\n {\n name: 'Multi-file - Complex tools (multiple providers, >150 lines)',\n value: 'multi'\n },\n ],\n default: defaults.structure || 'single',\n when: () => !defaults.structure,\n },\n {\n type: 'confirm',\n name: 'generateTests',\n message: 'Generate tests?',\n default: defaults.generateTests !== false,\n when: () => defaults.generateTests === undefined,\n },\n ]);\n\n // Merge defaults with answers (for skipped prompts)\n return {\n name: defaults.name || answers.name,\n category: defaults.category || answers.category,\n description: defaults.description || answers.description,\n structure: defaults.structure || answers.structure,\n generateTests: defaults.generateTests !== undefined ? defaults.generateTests : answers.generateTests,\n };\n}\n\n","import fs from 'fs-extra';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { glob } from 'glob';\n\n// Get __dirname equivalent in ES modules\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport async function ensureDir(dir: string): Promise<void> {\n await fs.ensureDir(dir);\n}\n\nexport async function copyTemplate(\n templatePath: string,\n targetPath: string,\n replacements: Record<string, string> = {}\n): Promise<void> {\n // Verify template path exists\n if (!(await fs.pathExists(templatePath))) {\n throw new Error(`Template path does not exist: ${templatePath}`);\n }\n\n await fs.ensureDir(targetPath);\n\n const files = await glob('**/*', {\n cwd: templatePath,\n dot: true,\n nodir: true,\n });\n\n if (files.length === 0) {\n throw new Error(`No files found in template: ${templatePath}`);\n }\n\n for (const file of files) {\n const sourcePath = path.join(templatePath, file);\n const destPath = path.join(targetPath, file);\n\n await fs.ensureDir(path.dirname(destPath));\n\n let content = await fs.readFile(sourcePath, 'utf-8');\n\n // Apply replacements\n for (const [key, value] of Object.entries(replacements)) {\n content = content.replace(new RegExp(`{{${key}}}`, 'g'), value);\n }\n\n await fs.writeFile(destPath, content);\n }\n}\n\nexport async function writeJson(filePath: string, data: any): Promise<void> {\n await fs.writeJson(filePath, data, { spaces: 2 });\n}\n\nexport async function readJson<T = any>(filePath: string): Promise<T> {\n return fs.readJson(filePath);\n}\n\nexport async function pathExists(filePath: string): Promise<boolean> {\n return fs.pathExists(filePath);\n}\n\nexport async function removeDir(dir: string): Promise<void> {\n await fs.remove(dir);\n}\n\nexport async function findFiles(\n pattern: string,\n cwd: string = process.cwd()\n): Promise<string[]> {\n return glob(pattern, { cwd });\n}\n\nexport async function readFile(filePath: string): Promise<string> {\n return fs.readFile(filePath, 'utf-8');\n}\n\nexport async function writeFile(filePath: string, content: string): Promise<void> {\n await fs.ensureDir(path.dirname(filePath));\n await fs.writeFile(filePath, content);\n}\n\nexport function getTemplatePath(template: string): string {\n // __dirname is in dist/, so we go up one level to the package root\n // then into templates directory\n return path.join(__dirname, '..', 'templates', template);\n}\n\nexport async function isEmptyDir(dir: string): Promise<boolean> {\n if (!(await pathExists(dir))) {\n return true;\n }\n\n const files = await fs.readdir(dir);\n return files.length === 0;\n}\n\n","import { execa } from 'execa';\nimport fs from 'fs-extra';\nimport path from 'path';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn';\n\nexport async function detectPackageManager(cwd: string = process.cwd()): Promise<PackageManager> {\n // Check for lock files\n if (await fs.pathExists(path.join(cwd, 'pnpm-lock.yaml'))) {\n return 'pnpm';\n }\n if (await fs.pathExists(path.join(cwd, 'yarn.lock'))) {\n return 'yarn';\n }\n if (await fs.pathExists(path.join(cwd, 'package-lock.json'))) {\n return 'npm';\n }\n\n // Check if package managers are available\n try {\n await execa('pnpm', ['--version']);\n return 'pnpm';\n } catch {\n // pnpm not available\n }\n\n try {\n await execa('yarn', ['--version']);\n return 'yarn';\n } catch {\n // yarn not available\n }\n\n return 'npm';\n}\n\nexport async function installDependencies(\n cwd: string,\n packageManager: PackageManager = 'pnpm'\n): Promise<void> {\n const commands: Record<PackageManager, string[]> = {\n npm: ['install'],\n pnpm: ['install'],\n yarn: ['install'],\n };\n\n await execa(packageManager, commands[packageManager], {\n cwd,\n stdio: 'inherit',\n });\n}\n\nexport async function addDependency(\n cwd: string,\n dependency: string,\n options: {\n dev?: boolean;\n packageManager?: PackageManager;\n } = {}\n): Promise<void> {\n const pm = options.packageManager || (await detectPackageManager(cwd));\n const isDev = options.dev || false;\n\n const commands: Record<PackageManager, string[]> = {\n npm: ['install', isDev ? '--save-dev' : '--save', dependency],\n pnpm: ['add', isDev ? '-D' : '', dependency].filter(Boolean),\n yarn: ['add', isDev ? '--dev' : '', dependency].filter(Boolean),\n };\n\n await execa(pm, commands[pm], {\n cwd,\n stdio: 'inherit',\n });\n}\n\nexport async function runScript(\n cwd: string,\n script: string,\n packageManager: PackageManager = 'pnpm'\n): Promise<void> {\n const commands: Record<PackageManager, string[]> = {\n npm: ['run', script],\n pnpm: ['run', script],\n yarn: ['run', script],\n };\n\n await execa(packageManager, commands[packageManager], {\n cwd,\n stdio: 'inherit',\n });\n}\n\nexport function getInstallCommand(packageManager: PackageManager): string {\n const commands: Record<PackageManager, string> = {\n npm: 'npm install',\n pnpm: 'pnpm install',\n yarn: 'yarn install',\n };\n\n return commands[packageManager];\n}\n\nexport function getRunCommand(packageManager: PackageManager, script: string): string {\n const commands: Record<PackageManager, string> = {\n npm: `npm run ${script}`,\n pnpm: `pnpm ${script}`,\n yarn: `yarn ${script}`,\n };\n\n return commands[packageManager];\n}\n\n","import { execa } from 'execa';\nimport fs from 'fs-extra';\nimport path from 'path';\n\nexport async function isGitInstalled(): Promise<boolean> {\n try {\n await execa('git', ['--version']);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function isGitRepository(cwd: string): Promise<boolean> {\n try {\n await execa('git', ['rev-parse', '--git-dir'], { cwd });\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function initGitRepository(cwd: string): Promise<void> {\n await execa('git', ['init'], { cwd });\n \n // Create .gitignore\n const gitignore = `# Dependencies\nnode_modules/\n.pnp\n.pnp.js\n\n# Testing\ncoverage/\n.nyc_output/\n\n# Production\ndist/\nbuild/\n\n# Environment\n.env\n.env.local\n.env.*.local\n\n# IDE\n.vscode/\n.idea/\n*.swp\n*.swo\n*~\n\n# OS\n.DS_Store\nThumbs.db\n\n# Logs\nlogs/\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\n\n# Misc\n.cache/\n.temp/\n.tmp/\n`;\n\n await fs.writeFile(path.join(cwd, '.gitignore'), gitignore);\n}\n\nexport async function createInitialCommit(cwd: string): Promise<void> {\n await execa('git', ['add', '.'], { cwd });\n await execa('git', ['commit', '-m', 'Initial commit from AgentForge CLI'], { cwd });\n}\n\nexport async function getGitUserInfo(): Promise<{ name?: string; email?: string }> {\n try {\n const { stdout: name } = await execa('git', ['config', 'user.name']);\n const { stdout: email } = await execa('git', ['config', 'user.email']);\n return { name, email };\n } catch {\n return {};\n }\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport { logger } from '../utils/logger.js';\nimport { promptProjectSetup } from '../utils/prompts.js';\nimport { copyTemplate, ensureDir, isEmptyDir, writeJson, readJson, getTemplatePath } from '../utils/fs.js';\nimport { installDependencies, getRunCommand, type PackageManager } from '../utils/package-manager.js';\nimport { initGitRepository, createInitialCommit, isGitInstalled } from '../utils/git.js';\n\ninterface CreateOptions {\n template?: 'minimal' | 'full' | 'api' | 'cli';\n packageManager?: PackageManager;\n install?: boolean;\n git?: boolean;\n}\n\nexport async function createCommand(\n projectName: string,\n options: CreateOptions\n): Promise<void> {\n try {\n logger.header('🚀 Create AgentForge Project');\n\n // Validate project name\n if (!projectName) {\n logger.error('Project name is required');\n process.exit(1);\n }\n\n const targetPath = path.join(process.cwd(), projectName);\n\n // Check if directory exists and is not empty\n if (!(await isEmptyDir(targetPath))) {\n logger.error(`Directory ${projectName} already exists and is not empty`);\n process.exit(1);\n }\n\n // Prompt for project setup if not all options provided\n const answers = await promptProjectSetup({\n projectName,\n template: options.template,\n packageManager: options.packageManager,\n installDependencies: options.install,\n initGit: options.git,\n });\n\n logger.newLine();\n logger.info(`Creating project: ${chalk.cyan(answers.projectName)}`);\n logger.info(`Template: ${chalk.cyan(answers.template)}`);\n logger.info(`Package manager: ${chalk.cyan(answers.packageManager)}`);\n logger.newLine();\n\n // Create project directory\n logger.startSpinner('Creating project directory...');\n await ensureDir(targetPath);\n logger.succeedSpinner('Project directory created');\n\n // Copy template\n logger.startSpinner('Copying template files...');\n const templatePath = getTemplatePath(answers.template);\n await copyTemplate(templatePath, targetPath, {\n PROJECT_NAME: answers.projectName,\n AUTHOR: answers.author || '',\n DESCRIPTION: answers.description || `AgentForge project created with ${answers.template} template`,\n PACKAGE_MANAGER: answers.packageManager,\n });\n logger.succeedSpinner('Template files copied');\n\n // Update package.json\n logger.startSpinner('Updating package.json...');\n const packageJsonPath = path.join(targetPath, 'package.json');\n const packageJson = await readJson<any>(packageJsonPath);\n packageJson.name = answers.projectName;\n if (answers.author) {\n packageJson.author = answers.author;\n }\n if (answers.description) {\n packageJson.description = answers.description;\n }\n await writeJson(packageJsonPath, packageJson);\n logger.succeedSpinner('package.json updated');\n\n // Install dependencies\n if (answers.installDependencies) {\n logger.startSpinner('Installing dependencies...');\n try {\n await installDependencies(targetPath, answers.packageManager);\n logger.succeedSpinner('Dependencies installed');\n } catch (error) {\n logger.failSpinner('Failed to install dependencies');\n logger.warn('You can install them manually later');\n }\n }\n\n // Initialize git\n if (answers.initGit && (await isGitInstalled())) {\n logger.startSpinner('Initializing git repository...');\n try {\n await initGitRepository(targetPath);\n await createInitialCommit(targetPath);\n logger.succeedSpinner('Git repository initialized');\n } catch (error) {\n logger.failSpinner('Failed to initialize git');\n logger.warn('You can initialize it manually later');\n }\n }\n\n // Success message\n logger.newLine();\n logger.success(chalk.bold.green('✨ Project created successfully!'));\n logger.newLine();\n logger.header('📝 Next Steps');\n logger.list([\n `cd ${answers.projectName}`,\n answers.installDependencies\n ? getRunCommand(answers.packageManager, 'dev')\n : `${answers.packageManager} install`,\n ]);\n logger.newLine();\n logger.info('Happy coding! 🎉');\n } catch (error: any) {\n logger.error(`Failed to create project: ${error.message}`);\n process.exit(1);\n }\n}\n\n","import { logger } from '../utils/logger.js';\nimport { runScript, detectPackageManager } from '../utils/package-manager.js';\n\ninterface DevOptions {\n port?: string;\n open?: boolean;\n}\n\nexport async function devCommand(options: DevOptions): Promise<void> {\n try {\n logger.header('🚀 Starting Development Server');\n\n const cwd = process.cwd();\n const packageManager = await detectPackageManager(cwd);\n\n logger.info(`Port: ${options.port || '3000'}`);\n logger.info(`Package manager: ${packageManager}`);\n logger.newLine();\n\n logger.startSpinner('Starting development server...');\n\n // Set environment variables\n if (options.port) {\n process.env.PORT = options.port;\n }\n\n await runScript(cwd, 'dev', packageManager);\n\n logger.succeedSpinner('Development server started');\n } catch (error: any) {\n logger.failSpinner('Failed to start development server');\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import { logger } from '../utils/logger.js';\nimport { runScript, detectPackageManager } from '../utils/package-manager.js';\n\ninterface BuildOptions {\n minify?: boolean;\n sourcemap?: boolean;\n}\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n try {\n logger.header('📦 Building for Production');\n\n const cwd = process.cwd();\n const packageManager = await detectPackageManager(cwd);\n\n logger.info(`Minify: ${options.minify !== false ? 'Yes' : 'No'}`);\n logger.info(`Sourcemap: ${options.sourcemap !== false ? 'Yes' : 'No'}`);\n logger.newLine();\n\n logger.startSpinner('Building project...');\n\n // Set environment variables\n process.env.NODE_ENV = 'production';\n if (options.minify === false) {\n process.env.NO_MINIFY = 'true';\n }\n if (options.sourcemap === false) {\n process.env.NO_SOURCEMAP = 'true';\n }\n\n await runScript(cwd, 'build', packageManager);\n\n logger.succeedSpinner('Build completed successfully');\n logger.newLine();\n logger.success('✨ Production build ready!');\n } catch (error: any) {\n logger.failSpinner('Build failed');\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import { logger } from '../utils/logger.js';\nimport { runScript, detectPackageManager } from '../utils/package-manager.js';\n\ninterface TestOptions {\n watch?: boolean;\n ui?: boolean;\n coverage?: boolean;\n}\n\nexport async function testCommand(options: TestOptions): Promise<void> {\n try {\n logger.header('🧪 Running Tests');\n\n const cwd = process.cwd();\n const packageManager = await detectPackageManager(cwd);\n\n logger.info(`Watch mode: ${options.watch ? 'Yes' : 'No'}`);\n logger.info(`UI: ${options.ui ? 'Yes' : 'No'}`);\n logger.info(`Coverage: ${options.coverage ? 'Yes' : 'No'}`);\n logger.newLine();\n\n logger.startSpinner('Running tests...');\n\n // Determine which test script to run\n let script = 'test';\n if (options.ui) {\n script = 'test:ui';\n } else if (options.coverage) {\n script = 'test:coverage';\n } else if (options.watch) {\n script = 'test:watch';\n }\n\n await runScript(cwd, script, packageManager);\n\n logger.succeedSpinner('Tests completed');\n } catch (error: any) {\n logger.failSpinner('Tests failed');\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import { logger } from '../utils/logger.js';\nimport { runScript, detectPackageManager } from '../utils/package-manager.js';\n\ninterface LintOptions {\n fix?: boolean;\n format?: boolean;\n}\n\nexport async function lintCommand(options: LintOptions): Promise<void> {\n try {\n logger.header('🔍 Linting Code');\n\n const cwd = process.cwd();\n const packageManager = await detectPackageManager(cwd);\n\n logger.info(`Auto-fix: ${options.fix ? 'Yes' : 'No'}`);\n logger.info(`Format: ${options.format !== false ? 'Yes' : 'No'}`);\n logger.newLine();\n\n // Run linter\n logger.startSpinner('Running linter...');\n try {\n await runScript(cwd, options.fix ? 'lint:fix' : 'lint', packageManager);\n logger.succeedSpinner('Linting completed');\n } catch (error) {\n logger.failSpinner('Linting found issues');\n if (!options.fix) {\n logger.info('Run with --fix to automatically fix issues');\n }\n }\n\n // Run formatter\n if (options.format !== false) {\n logger.startSpinner('Formatting code...');\n try {\n await runScript(cwd, 'format', packageManager);\n logger.succeedSpinner('Formatting completed');\n } catch (error) {\n logger.failSpinner('Formatting failed');\n }\n }\n\n logger.newLine();\n logger.success('✨ Code quality check completed!');\n } catch (error: any) {\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\nimport { promptAgentSetup } from '../../utils/prompts.js';\nimport { writeFile, ensureDir } from '../../utils/fs.js';\n\ninterface AgentCreateOptions {\n pattern?: 'react' | 'plan-execute' | 'reflection' | 'multi-agent';\n test?: boolean;\n}\n\nexport async function agentCreateCommand(\n name: string,\n options: AgentCreateOptions\n): Promise<void> {\n try {\n logger.header('🤖 Create Agent');\n\n // Prompt for agent setup\n const answers = await promptAgentSetup({\n name,\n pattern: options.pattern,\n generateTests: options.test,\n });\n\n logger.newLine();\n logger.info(`Creating agent: ${chalk.cyan(answers.name)}`);\n logger.info(`Pattern: ${chalk.cyan(answers.pattern)}`);\n logger.newLine();\n\n const cwd = process.cwd();\n const agentDir = path.join(cwd, 'src', 'agents');\n const agentFile = path.join(agentDir, `${answers.name}.ts`);\n\n // Create agent file\n logger.startSpinner('Creating agent file...');\n await ensureDir(agentDir);\n\n const agentContent = generateAgentContent(answers.name, answers.pattern, answers.description);\n await writeFile(agentFile, agentContent);\n\n logger.succeedSpinner('Agent file created');\n\n // Create test file\n if (answers.generateTests) {\n logger.startSpinner('Creating test file...');\n const testDir = path.join(cwd, 'tests', 'agents');\n const testFile = path.join(testDir, `${answers.name}.test.ts`);\n await ensureDir(testDir);\n\n const testContent = generateTestContent(answers.name, answers.pattern);\n await writeFile(testFile, testContent);\n\n logger.succeedSpinner('Test file created');\n }\n\n logger.newLine();\n logger.success(chalk.bold.green('✨ Agent created successfully!'));\n logger.newLine();\n logger.header('📝 Next Steps');\n logger.list([\n `Edit ${chalk.cyan(`src/agents/${answers.name}.ts`)} to customize your agent`,\n answers.generateTests\n ? `Run ${chalk.cyan(`pnpm test tests/agents/${answers.name}.test.ts`)} to test your agent`\n : '',\n ].filter(Boolean));\n } catch (error: any) {\n logger.error(`Failed to create agent: ${error.message}`);\n process.exit(1);\n }\n}\n\nfunction generateAgentContent(\n name: string,\n pattern: string,\n description?: string\n): string {\n const patterns: Record<string, string> = {\n 'react': `import { createReActAgent } from '@agentforge/patterns';\nimport { ChatOpenAI } from '@langchain/openai';\n\n/**\n * ${description || `${name} agent using ReAct pattern`}\n */\nexport async function create${capitalize(name)}Agent() {\n const model = new ChatOpenAI({\n modelName: 'gpt-4',\n temperature: 0,\n });\n\n const agent = createReActAgent({\n model,\n tools: [],\n // Add your configuration here\n });\n\n return agent;\n}\n`,\n 'plan-execute': `import { createPlanExecuteAgent } from '@agentforge/patterns';\nimport { ChatOpenAI } from '@langchain/openai';\n\n/**\n * ${description || `${name} agent using Plan-Execute pattern`}\n */\nexport async function create${capitalize(name)}Agent() {\n const model = new ChatOpenAI({\n modelName: 'gpt-4',\n temperature: 0,\n });\n\n const agent = createPlanExecuteAgent({\n model,\n tools: [],\n // Add your configuration here\n });\n\n return agent;\n}\n`,\n 'reflection': `import { createReflectionAgent } from '@agentforge/patterns';\nimport { ChatOpenAI } from '@langchain/openai';\n\n/**\n * ${description || `${name} agent using Reflection pattern`}\n */\nexport async function create${capitalize(name)}Agent() {\n const model = new ChatOpenAI({\n modelName: 'gpt-4',\n temperature: 0,\n });\n\n const agent = createReflectionAgent({\n model,\n // Add your configuration here\n });\n\n return agent;\n}\n`,\n 'multi-agent': `import { createMultiAgentSystem } from '@agentforge/patterns';\nimport { ChatOpenAI } from '@langchain/openai';\n\n/**\n * ${description || `${name} multi-agent system`}\n */\nexport async function create${capitalize(name)}System() {\n const model = new ChatOpenAI({\n modelName: 'gpt-4',\n temperature: 0,\n });\n\n const system = createMultiAgentSystem({\n model,\n workers: [],\n // Add your configuration here\n });\n\n return system;\n}\n`,\n };\n\n return patterns[pattern] || patterns['react'];\n}\n\nfunction generateTestContent(name: string, pattern: string): string {\n return `import { describe, it, expect } from 'vitest';\nimport { create${capitalize(name)}${pattern === 'multi-agent' ? 'System' : 'Agent'} } from '../../src/agents/${name}.js';\n\ndescribe('${capitalize(name)} ${pattern === 'multi-agent' ? 'System' : 'Agent'}', () => {\n it('should create agent successfully', async () => {\n const agent = await create${capitalize(name)}${pattern === 'multi-agent' ? 'System' : 'Agent'}();\n expect(agent).toBeDefined();\n });\n\n // Add more tests here\n});\n`;\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\nimport { findFiles, readFile } from '../../utils/fs.js';\n\ninterface AgentListOptions {\n verbose?: boolean;\n}\n\nexport async function agentListCommand(options: AgentListOptions): Promise<void> {\n try {\n logger.header('📋 List Agents');\n\n const cwd = process.cwd();\n const agentDir = path.join(cwd, 'src', 'agents');\n\n // Find all agent files\n const agentFiles = await findFiles('*.ts', agentDir);\n\n if (agentFiles.length === 0) {\n logger.warn('No agents found');\n logger.info(`Create an agent with: ${chalk.cyan('agentforge agent:create <name>')}`);\n return;\n }\n\n logger.info(`Found ${chalk.cyan(agentFiles.length)} agent(s):\\n`);\n\n for (const file of agentFiles) {\n const agentName = path.basename(file, '.ts');\n const agentPath = path.join(agentDir, file);\n\n if (options.verbose) {\n // Read file to extract pattern and description\n const content = await readFile(agentPath);\n const pattern = extractPattern(content);\n const description = extractDescription(content);\n\n logger.info(chalk.bold.cyan(` ${agentName}`));\n if (pattern) {\n logger.info(` Pattern: ${pattern}`);\n }\n if (description) {\n logger.info(` Description: ${description}`);\n }\n logger.info(` Path: ${chalk.gray(agentPath)}`);\n logger.newLine();\n } else {\n logger.info(` • ${chalk.cyan(agentName)}`);\n }\n }\n\n if (!options.verbose) {\n logger.newLine();\n logger.info(`Use ${chalk.cyan('--verbose')} for more details`);\n }\n } catch (error: any) {\n logger.error(`Failed to list agents: ${error.message}`);\n process.exit(1);\n }\n}\n\nfunction extractPattern(content: string): string | null {\n const patterns = ['ReAct', 'Plan-Execute', 'Reflection', 'Multi-Agent'];\n for (const pattern of patterns) {\n if (content.includes(`create${pattern.replace('-', '')}Agent`)) {\n return pattern;\n }\n }\n return null;\n}\n\nfunction extractDescription(content: string): string | null {\n const match = content.match(/\\/\\*\\*\\s*\\n\\s*\\*\\s*(.+?)\\s*\\n/);\n return match ? match[1] : null;\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\nimport { runScript, detectPackageManager } from '../../utils/package-manager.js';\nimport { pathExists } from '../../utils/fs.js';\n\ninterface AgentTestOptions {\n watch?: boolean;\n}\n\nexport async function agentTestCommand(\n name: string,\n options: AgentTestOptions\n): Promise<void> {\n try {\n logger.header('🧪 Test Agent');\n\n const cwd = process.cwd();\n const testFile = path.join(cwd, 'tests', 'agents', `${name}.test.ts`);\n\n // Check if test file exists\n if (!(await pathExists(testFile))) {\n logger.error(`Test file not found: ${testFile}`);\n logger.info(`Create tests with: ${chalk.cyan(`agentforge agent:create ${name} --test`)}`);\n process.exit(1);\n }\n\n logger.info(`Testing agent: ${chalk.cyan(name)}`);\n logger.info(`Watch mode: ${options.watch ? 'Yes' : 'No'}`);\n logger.newLine();\n\n const packageManager = await detectPackageManager(cwd);\n\n logger.startSpinner('Running tests...');\n\n // Run tests for specific file\n const testCommand = options.watch ? 'test:watch' : 'test';\n process.env.TEST_FILE = testFile;\n\n await runScript(cwd, testCommand, packageManager);\n\n logger.succeedSpinner('Tests completed');\n } catch (error: any) {\n logger.failSpinner('Tests failed');\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\n\ninterface AgentDeployOptions {\n environment?: string;\n dryRun?: boolean;\n}\n\nexport async function agentDeployCommand(\n name: string,\n options: AgentDeployOptions\n): Promise<void> {\n try {\n logger.header('🚀 Deploy Agent');\n\n logger.info(`Agent: ${chalk.cyan(name)}`);\n logger.info(`Environment: ${chalk.cyan(options.environment || 'production')}`);\n logger.info(`Dry run: ${options.dryRun ? 'Yes' : 'No'}`);\n logger.newLine();\n\n if (options.dryRun) {\n logger.warn('Dry run mode - no actual deployment will occur');\n logger.newLine();\n }\n\n logger.startSpinner('Preparing deployment...');\n\n // TODO: Implement actual deployment logic\n // This would typically involve:\n // 1. Building the agent\n // 2. Running tests\n // 3. Packaging the agent\n // 4. Deploying to the target environment (AWS Lambda, Cloud Run, etc.)\n\n await new Promise((resolve) => setTimeout(resolve, 1000));\n\n logger.succeedSpinner('Deployment prepared');\n\n if (!options.dryRun) {\n logger.startSpinner('Deploying agent...');\n await new Promise((resolve) => setTimeout(resolve, 2000));\n logger.succeedSpinner('Agent deployed successfully');\n }\n\n logger.newLine();\n logger.success(chalk.bold.green('✨ Deployment completed!'));\n logger.newLine();\n logger.info('Note: Actual deployment implementation coming soon');\n logger.info('For now, please use the deployment templates in the templates/deployment directory');\n } catch (error: any) {\n logger.failSpinner('Deployment failed');\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\nimport { promptToolSetup } from '../../utils/prompts.js';\nimport { writeFile, ensureDir, copyTemplate, getTemplatePath } from '../../utils/fs.js';\n\ninterface ToolCreateOptions {\n category?: 'web' | 'data' | 'file' | 'utility';\n structure?: 'single' | 'multi';\n description?: string;\n test?: boolean;\n}\n\nexport async function toolCreateCommand(\n name: string,\n options: ToolCreateOptions\n): Promise<void> {\n try {\n logger.header('🔧 Create Tool');\n\n // Prompt for tool setup\n const answers = await promptToolSetup({\n name,\n category: options.category,\n structure: options.structure,\n description: options.description,\n generateTests: options.test,\n });\n\n logger.newLine();\n logger.info(`Creating tool: ${chalk.cyan(answers.name)}`);\n logger.info(`Category: ${chalk.cyan(answers.category)}`);\n logger.info(`Structure: ${chalk.cyan(answers.structure)}`);\n logger.newLine();\n\n const cwd = process.cwd();\n\n if (answers.structure === 'multi') {\n // Multi-file structure\n await createMultiFileTool(cwd, answers);\n } else {\n // Single-file structure (existing behavior)\n await createSingleFileTool(cwd, answers);\n }\n\n logger.newLine();\n logger.success(chalk.bold.green('✨ Tool created successfully!'));\n logger.newLine();\n logger.header('📝 Next Steps');\n\n const nextSteps = answers.structure === 'multi'\n ? [\n `Edit ${chalk.cyan(`src/tools/${answers.name}/index.ts`)} to implement your tool`,\n `Add providers in ${chalk.cyan(`src/tools/${answers.name}/providers/`)}`,\n `Define types in ${chalk.cyan(`src/tools/${answers.name}/types.ts`)}`,\n answers.generateTests\n ? `Run ${chalk.cyan(`pnpm test ${answers.name}`)} to test your tool`\n : '',\n `Register the tool in your agent's tool registry`,\n ]\n : [\n `Edit ${chalk.cyan(`src/tools/${answers.name}.ts`)} to implement your tool`,\n answers.generateTests\n ? `Run ${chalk.cyan(`pnpm test tests/tools/${answers.name}.test.ts`)} to test your tool`\n : '',\n `Register the tool in your agent's tool registry`,\n ];\n\n logger.list(nextSteps.filter(Boolean));\n } catch (error: any) {\n logger.error(`Failed to create tool: ${error.message}`);\n process.exit(1);\n }\n}\n\nfunction generateToolContent(\n name: string,\n category: string,\n description: string\n): string {\n return `import { z } from 'zod';\nimport { createTool } from '@agentforge/core';\n\n/**\n * ${description}\n * Category: ${category}\n */\nexport const ${name}Tool = createTool()\n .name('${name}')\n .description('${description}')\n .category('${category}')\n .schema(\n z.object({\n // Define your input schema here\n input: z.string().describe('Input parameter'),\n })\n )\n .implement(async ({ input }) => {\n // Implement your tool logic here\n return \\`Processed: \\${input}\\`;\n })\n .build();\n`;\n}\n\nfunction generateTestContent(name: string): string {\n return `import { describe, it, expect } from 'vitest';\nimport { ${name}Tool } from '../../src/tools/${name}.js';\n\ndescribe('${capitalize(name)} Tool', () => {\n it('should have correct metadata', () => {\n expect(${name}Tool.name).toBe('${name}');\n expect(${name}Tool.description).toBeDefined();\n });\n\n it('should execute successfully', async () => {\n const result = await ${name}Tool.invoke({\n input: 'test',\n });\n\n expect(result).toBeDefined();\n });\n\n // Add more tests here\n});\n`;\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * Create a single-file tool (existing behavior)\n */\nasync function createSingleFileTool(\n cwd: string,\n answers: { name: string; category: string; description: string; generateTests: boolean }\n): Promise<void> {\n const toolDir = path.join(cwd, 'src', 'tools');\n const toolFile = path.join(toolDir, `${answers.name}.ts`);\n\n // Create tool file\n logger.startSpinner('Creating tool file...');\n await ensureDir(toolDir);\n\n const toolContent = generateToolContent(answers.name, answers.category, answers.description);\n await writeFile(toolFile, toolContent);\n\n logger.succeedSpinner('Tool file created');\n\n // Create test file\n if (answers.generateTests) {\n logger.startSpinner('Creating test file...');\n const testDir = path.join(cwd, 'tests', 'tools');\n const testFile = path.join(testDir, `${answers.name}.test.ts`);\n await ensureDir(testDir);\n\n const testContent = generateTestContent(answers.name);\n await writeFile(testFile, testContent);\n\n logger.succeedSpinner('Test file created');\n }\n}\n\n/**\n * Create a multi-file tool using template\n */\nasync function createMultiFileTool(\n cwd: string,\n answers: { name: string; category: string; description: string; generateTests: boolean }\n): Promise<void> {\n const toolDir = path.join(cwd, 'src', 'tools', answers.name);\n\n // Create tool directory from template\n logger.startSpinner('Creating tool directory structure...');\n await ensureDir(toolDir);\n\n const templatePath = getTemplatePath('tool-multi');\n\n // Prepare replacements\n const replacements = {\n TOOL_NAME: answers.name,\n TOOL_NAME_PASCAL: capitalize(answers.name),\n TOOL_NAME_CAMEL: answers.name.charAt(0).toLowerCase() + answers.name.slice(1),\n TOOL_DESCRIPTION: answers.description,\n TOOL_CATEGORY: answers.category,\n };\n\n await copyTemplate(templatePath, toolDir, replacements);\n\n logger.succeedSpinner('Tool directory structure created');\n\n // Remove test files if not needed\n if (!answers.generateTests) {\n logger.startSpinner('Cleaning up test files...');\n const fs = await import('fs-extra');\n const testDir = path.join(toolDir, '__tests__');\n await fs.remove(testDir);\n logger.succeedSpinner('Test files removed');\n }\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\nimport { findFiles, readFile } from '../../utils/fs.js';\n\ninterface ToolListOptions {\n category?: string;\n verbose?: boolean;\n}\n\nexport async function toolListCommand(options: ToolListOptions): Promise<void> {\n try {\n logger.header('📋 List Tools');\n\n const cwd = process.cwd();\n const toolDir = path.join(cwd, 'src', 'tools');\n\n // Find all tool files\n const toolFiles = await findFiles('*.ts', toolDir);\n\n if (toolFiles.length === 0) {\n logger.warn('No tools found');\n logger.info(`Create a tool with: ${chalk.cyan('agentforge tool:create <name>')}`);\n return;\n }\n\n let filteredTools = toolFiles;\n\n // Filter by category if specified\n if (options.category) {\n filteredTools = [];\n for (const file of toolFiles) {\n const toolPath = path.join(toolDir, file);\n const content = await readFile(toolPath);\n const category = extractCategory(content);\n if (category === options.category) {\n filteredTools.push(file);\n }\n }\n }\n\n if (filteredTools.length === 0) {\n logger.warn(`No tools found in category: ${options.category}`);\n return;\n }\n\n logger.info(`Found ${chalk.cyan(filteredTools.length)} tool(s):\\n`);\n\n for (const file of filteredTools) {\n const toolName = path.basename(file, '.ts');\n const toolPath = path.join(toolDir, file);\n\n if (options.verbose) {\n // Read file to extract category and description\n const content = await readFile(toolPath);\n const category = extractCategory(content);\n const description = extractDescription(content);\n\n logger.info(chalk.bold.cyan(` ${toolName}`));\n if (category) {\n logger.info(` Category: ${category}`);\n }\n if (description) {\n logger.info(` Description: ${description}`);\n }\n logger.info(` Path: ${chalk.gray(toolPath)}`);\n logger.newLine();\n } else {\n logger.info(` • ${chalk.cyan(toolName)}`);\n }\n }\n\n if (!options.verbose) {\n logger.newLine();\n logger.info(`Use ${chalk.cyan('--verbose')} for more details`);\n }\n } catch (error: any) {\n logger.error(`Failed to list tools: ${error.message}`);\n process.exit(1);\n }\n}\n\nfunction extractCategory(content: string): string | null {\n const match = content.match(/Category:\\s*(\\w+)/);\n return match ? match[1] : null;\n}\n\nfunction extractDescription(content: string): string | null {\n const match = content.match(/\\/\\*\\*\\s*\\n\\s*\\*\\s*(.+?)\\s*\\n/);\n return match ? match[1] : null;\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\nimport { runScript, detectPackageManager } from '../../utils/package-manager.js';\nimport { pathExists } from '../../utils/fs.js';\n\ninterface ToolTestOptions {\n watch?: boolean;\n}\n\nexport async function toolTestCommand(\n name: string,\n options: ToolTestOptions\n): Promise<void> {\n try {\n logger.header('🧪 Test Tool');\n\n const cwd = process.cwd();\n const testFile = path.join(cwd, 'tests', 'tools', `${name}.test.ts`);\n\n // Check if test file exists\n if (!(await pathExists(testFile))) {\n logger.error(`Test file not found: ${testFile}`);\n logger.info(`Create tests with: ${chalk.cyan(`agentforge tool:create ${name} --test`)}`);\n process.exit(1);\n }\n\n logger.info(`Testing tool: ${chalk.cyan(name)}`);\n logger.info(`Watch mode: ${options.watch ? 'Yes' : 'No'}`);\n logger.newLine();\n\n const packageManager = await detectPackageManager(cwd);\n\n logger.startSpinner('Running tests...');\n\n // Run tests for specific file\n const testCommand = options.watch ? 'test:watch' : 'test';\n process.env.TEST_FILE = testFile;\n\n await runScript(cwd, testCommand, packageManager);\n\n logger.succeedSpinner('Tests completed');\n } catch (error: any) {\n logger.failSpinner('Tests failed');\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\nimport { runScript, detectPackageManager } from '../../utils/package-manager.js';\n\ninterface ToolPublishOptions {\n tag?: string;\n dryRun?: boolean;\n}\n\nexport async function toolPublishCommand(\n name: string,\n options: ToolPublishOptions\n): Promise<void> {\n try {\n logger.header('📦 Publish Tool');\n\n logger.info(`Tool: ${chalk.cyan(name)}`);\n logger.info(`Tag: ${chalk.cyan(options.tag || 'latest')}`);\n logger.info(`Dry run: ${options.dryRun ? 'Yes' : 'No'}`);\n logger.newLine();\n\n if (options.dryRun) {\n logger.warn('Dry run mode - no actual publishing will occur');\n logger.newLine();\n }\n\n const cwd = process.cwd();\n const packageManager = await detectPackageManager(cwd);\n\n // Run tests first\n logger.startSpinner('Running tests...');\n try {\n await runScript(cwd, 'test', packageManager);\n logger.succeedSpinner('Tests passed');\n } catch (error) {\n logger.failSpinner('Tests failed');\n logger.error('Cannot publish tool with failing tests');\n process.exit(1);\n }\n\n // Build the tool\n logger.startSpinner('Building tool...');\n try {\n await runScript(cwd, 'build', packageManager);\n logger.succeedSpinner('Build completed');\n } catch (error) {\n logger.failSpinner('Build failed');\n process.exit(1);\n }\n\n // Publish to npm\n if (!options.dryRun) {\n logger.startSpinner('Publishing to npm...');\n \n // TODO: Implement actual npm publish logic\n // This would typically involve:\n // 1. Checking npm credentials\n // 2. Updating version\n // 3. Publishing to npm registry\n \n await new Promise((resolve) => setTimeout(resolve, 2000));\n logger.succeedSpinner('Published to npm');\n }\n\n logger.newLine();\n logger.success(chalk.bold.green('✨ Tool published successfully!'));\n logger.newLine();\n logger.info('Note: Actual npm publishing implementation coming soon');\n logger.info('For now, please use npm publish manually');\n } catch (error: any) {\n logger.failSpinner('Publishing failed');\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { createCommand } from './commands/create.js';\nimport { devCommand } from './commands/dev.js';\nimport { buildCommand } from './commands/build.js';\nimport { testCommand } from './commands/test.js';\nimport { lintCommand } from './commands/lint.js';\nimport { agentCreateCommand } from './commands/agent/create.js';\nimport { agentListCommand } from './commands/agent/list.js';\nimport { agentTestCommand } from './commands/agent/test.js';\nimport { agentDeployCommand } from './commands/agent/deploy.js';\nimport { toolCreateCommand } from './commands/tool/create.js';\nimport { toolListCommand } from './commands/tool/list.js';\nimport { toolTestCommand } from './commands/tool/test.js';\nimport { toolPublishCommand } from './commands/tool/publish.js';\n\nconst program = new Command();\n\nprogram\n .name('agentforge')\n .description('CLI tool for AgentForge - scaffolding, development, and deployment')\n .version('0.1.0');\n\n// Project scaffolding\nprogram\n .command('create <project-name>')\n .description('Create a new AgentForge project')\n .option('-t, --template <template>', 'Project template (minimal, full, api, cli)', 'minimal')\n .option('-p, --package-manager <pm>', 'Package manager (npm, pnpm, yarn)', 'pnpm')\n .option('--no-install', 'Skip dependency installation')\n .option('--no-git', 'Skip git initialization')\n .action(createCommand);\n\n// Development commands\nprogram\n .command('dev')\n .description('Start development server with hot reload')\n .option('-p, --port <port>', 'Port number', '3000')\n .option('--no-open', 'Do not open browser')\n .action(devCommand);\n\nprogram\n .command('build')\n .description('Build for production')\n .option('--no-minify', 'Skip minification')\n .option('--no-sourcemap', 'Skip sourcemap generation')\n .action(buildCommand);\n\nprogram\n .command('test')\n .description('Run tests with coverage')\n .option('-w, --watch', 'Watch mode')\n .option('--ui', 'Open test UI')\n .option('--coverage', 'Generate coverage report')\n .action(testCommand);\n\nprogram\n .command('lint')\n .description('Lint and format code')\n .option('--fix', 'Auto-fix issues')\n .option('--no-format', 'Skip formatting')\n .action(lintCommand);\n\n// Agent management\nconst agent = program.command('agent').description('Manage agents');\n\nagent\n .command('create <name>')\n .description('Create a new agent')\n .option('-p, --pattern <pattern>', 'Agent pattern (react, plan-execute, reflection, multi-agent)', 'react')\n .option('--no-test', 'Skip test generation')\n .action(agentCreateCommand);\n\nagent\n .command('list')\n .description('List all agents')\n .option('-v, --verbose', 'Show detailed information')\n .action(agentListCommand);\n\nagent\n .command('test <name>')\n .description('Test a specific agent')\n .option('-w, --watch', 'Watch mode')\n .action(agentTestCommand);\n\nagent\n .command('deploy <name>')\n .description('Deploy an agent')\n .option('-e, --environment <env>', 'Deployment environment', 'production')\n .option('--dry-run', 'Dry run without actual deployment')\n .action(agentDeployCommand);\n\n// Tool management\nconst tool = program.command('tool').description('Manage tools');\n\ntool\n .command('create <name>')\n .description('Create a new tool')\n .option('-c, --category <category>', 'Tool category (web, data, file, utility)', 'utility')\n .option('-s, --structure <structure>', 'Tool structure (single, multi)', 'single')\n .option('-d, --description <description>', 'Tool description')\n .option('--no-test', 'Skip test generation')\n .action(toolCreateCommand);\n\ntool\n .command('list')\n .description('List all tools')\n .option('-c, --category <category>', 'Filter by category')\n .option('-v, --verbose', 'Show detailed information')\n .action(toolListCommand);\n\ntool\n .command('test <name>')\n .description('Test a specific tool')\n .option('-w, --watch', 'Watch mode')\n .action(toolTestCommand);\n\ntool\n .command('publish <name>')\n .description('Publish a tool to npm')\n .option('--tag <tag>', 'npm tag', 'latest')\n .option('--dry-run', 'Dry run without actual publishing')\n .action(toolPublishCommand);\n\n// Error handling\nprogram.exitOverride();\n\nexport async function run() {\n try {\n await program.parseAsync(process.argv);\n } catch (error: any) {\n if (error.code !== 'commander.help' && error.code !== 'commander.version') {\n console.error(chalk.red('Error:'), error.message);\n process.exit(1);\n }\n }\n}\n\n// Export for testing\nexport { program };\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/logger.ts","../src/utils/prompts.ts","../src/utils/fs.ts","../src/utils/package-manager.ts","../src/utils/git.ts","../src/commands/create.ts","../src/commands/dev.ts","../src/commands/build.ts","../src/commands/test.ts","../src/commands/lint.ts","../src/commands/agent/create.ts","../src/commands/agent/create-reusable.ts","../src/commands/agent/list.ts","../src/commands/agent/test.ts","../src/commands/agent/deploy.ts","../src/commands/tool/create.ts","../src/commands/tool/list.ts","../src/commands/tool/test.ts","../src/commands/tool/publish.ts","../src/index.ts"],"names":["chalk","ora","inquirer","__filename","fileURLToPath","__dirname","path","fs","glob","execa","testCommand","generateTestContent","capitalize","extractDescription","Command"],"mappings":"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","file":"index.cjs","sourcesContent":["import chalk from 'chalk';\nimport ora, { Ora } from 'ora';\n\nexport class Logger {\n private spinner: Ora | null = null;\n\n info(message: string): void {\n console.log(chalk.blue('ℹ'), message);\n }\n\n success(message: string): void {\n console.log(chalk.green('✔'), message);\n }\n\n warn(message: string): void {\n console.log(chalk.yellow('⚠'), message);\n }\n\n error(message: string): void {\n console.log(chalk.red('✖'), message);\n }\n\n debug(message: string): void {\n if (process.env.DEBUG) {\n console.log(chalk.gray('🐛'), message);\n }\n }\n\n startSpinner(message: string): void {\n this.spinner = ora(message).start();\n }\n\n updateSpinner(message: string): void {\n if (this.spinner) {\n this.spinner.text = message;\n }\n }\n\n succeedSpinner(message?: string): void {\n if (this.spinner) {\n this.spinner.succeed(message);\n this.spinner = null;\n }\n }\n\n failSpinner(message?: string): void {\n if (this.spinner) {\n this.spinner.fail(message);\n this.spinner = null;\n }\n }\n\n stopSpinner(): void {\n if (this.spinner) {\n this.spinner.stop();\n this.spinner = null;\n }\n }\n\n newLine(): void {\n console.log();\n }\n\n divider(): void {\n console.log(chalk.gray('─'.repeat(50)));\n }\n\n header(message: string): void {\n this.newLine();\n console.log(chalk.bold.cyan(message));\n this.divider();\n }\n\n code(code: string): void {\n console.log(chalk.gray(' ' + code));\n }\n\n list(items: string[]): void {\n items.forEach((item) => {\n console.log(chalk.gray(' •'), item);\n });\n }\n}\n\nexport const logger = new Logger();\n\n","import inquirer from 'inquirer';\nimport type { PackageManager } from './package-manager.js';\n\nexport interface ProjectPromptAnswers {\n projectName: string;\n template: 'minimal' | 'full' | 'api' | 'cli';\n packageManager: PackageManager;\n installDependencies: boolean;\n initGit: boolean;\n author?: string;\n description?: string;\n}\n\nexport async function promptProjectSetup(defaults: Partial<ProjectPromptAnswers> = {}): Promise<ProjectPromptAnswers> {\n return inquirer.prompt([\n {\n type: 'input',\n name: 'projectName',\n message: 'Project name:',\n default: defaults.projectName || 'my-agent',\n validate: (input: string) => {\n if (!input) return 'Project name is required';\n if (!/^[a-z0-9-]+$/.test(input)) {\n return 'Project name must contain only lowercase letters, numbers, and hyphens';\n }\n return true;\n },\n },\n {\n type: 'list',\n name: 'template',\n message: 'Select a template:',\n choices: [\n { name: 'Minimal Starter - Basic ReAct agent', value: 'minimal' },\n { name: 'Full-Featured App - Multi-agent system with all features', value: 'full' },\n { name: 'API Service - Express/Fastify API with agents', value: 'api' },\n { name: 'CLI Tool - Command-line agent application', value: 'cli' },\n ],\n default: defaults.template || 'minimal',\n },\n {\n type: 'list',\n name: 'packageManager',\n message: 'Package manager:',\n choices: ['pnpm', 'npm', 'yarn'],\n default: defaults.packageManager || 'pnpm',\n },\n {\n type: 'confirm',\n name: 'installDependencies',\n message: 'Install dependencies?',\n default: defaults.installDependencies !== false,\n },\n {\n type: 'confirm',\n name: 'initGit',\n message: 'Initialize git repository?',\n default: defaults.initGit !== false,\n },\n {\n type: 'input',\n name: 'author',\n message: 'Author name (optional):',\n default: defaults.author,\n },\n {\n type: 'input',\n name: 'description',\n message: 'Project description (optional):',\n default: defaults.description,\n },\n ]);\n}\n\nexport interface AgentPromptAnswers {\n name: string;\n pattern: 'react' | 'plan-execute' | 'reflection' | 'multi-agent';\n description?: string;\n generateTests: boolean;\n}\n\nexport async function promptAgentSetup(defaults: Partial<AgentPromptAnswers> = {}): Promise<AgentPromptAnswers> {\n return inquirer.prompt([\n {\n type: 'input',\n name: 'name',\n message: 'Agent name:',\n default: defaults.name,\n validate: (input: string) => {\n if (!input) return 'Agent name is required';\n if (!/^[a-zA-Z][a-zA-Z0-9]*$/.test(input)) {\n return 'Agent name must start with a letter and contain only letters and numbers';\n }\n return true;\n },\n },\n {\n type: 'list',\n name: 'pattern',\n message: 'Agent pattern:',\n choices: [\n { name: 'ReAct - Reasoning and Acting', value: 'react' },\n { name: 'Plan-Execute - Planning and Execution', value: 'plan-execute' },\n { name: 'Reflection - Generate, Reflect, Revise', value: 'reflection' },\n { name: 'Multi-Agent - Supervisor and Workers', value: 'multi-agent' },\n ],\n default: defaults.pattern || 'react',\n },\n {\n type: 'input',\n name: 'description',\n message: 'Agent description (optional):',\n default: defaults.description,\n },\n {\n type: 'confirm',\n name: 'generateTests',\n message: 'Generate tests?',\n default: defaults.generateTests !== false,\n },\n ]);\n}\n\nexport interface ToolPromptAnswers {\n name: string;\n category: 'web' | 'data' | 'file' | 'utility';\n description: string;\n structure: 'single' | 'multi';\n generateTests: boolean;\n}\n\nexport async function promptToolSetup(defaults: Partial<ToolPromptAnswers> = {}): Promise<ToolPromptAnswers> {\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'name',\n message: 'Tool name:',\n default: defaults.name,\n when: () => !defaults.name,\n validate: (input: string) => {\n if (!input) return 'Tool name is required';\n if (!/^[a-zA-Z][a-zA-Z0-9]*$/.test(input)) {\n return 'Tool name must start with a letter and contain only letters and numbers';\n }\n return true;\n },\n },\n {\n type: 'list',\n name: 'category',\n message: 'Tool category:',\n choices: [\n { name: 'Web - HTTP, scraping, parsing', value: 'web' },\n { name: 'Data - JSON, CSV, XML processing', value: 'data' },\n { name: 'File - File operations', value: 'file' },\n { name: 'Utility - General utilities', value: 'utility' },\n ],\n default: defaults.category || 'utility',\n when: () => !defaults.category,\n },\n {\n type: 'input',\n name: 'description',\n message: 'Tool description:',\n default: defaults.description,\n when: () => !defaults.description,\n validate: (input: string) => {\n if (!input) return 'Tool description is required';\n return true;\n },\n },\n {\n type: 'list',\n name: 'structure',\n message: 'Tool structure:',\n choices: [\n {\n name: 'Single file - Simple tools (<150 lines, single responsibility)',\n value: 'single'\n },\n {\n name: 'Multi-file - Complex tools (multiple providers, >150 lines)',\n value: 'multi'\n },\n ],\n default: defaults.structure || 'single',\n when: () => !defaults.structure,\n },\n {\n type: 'confirm',\n name: 'generateTests',\n message: 'Generate tests?',\n default: defaults.generateTests !== false,\n when: () => defaults.generateTests === undefined,\n },\n ]);\n\n // Merge defaults with answers (for skipped prompts)\n return {\n name: defaults.name || answers.name,\n category: defaults.category || answers.category,\n description: defaults.description || answers.description,\n structure: defaults.structure || answers.structure,\n generateTests: defaults.generateTests !== undefined ? defaults.generateTests : answers.generateTests,\n };\n}\n\n","import fs from 'fs-extra';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { glob } from 'glob';\n\n// Get __dirname equivalent in ES modules\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport async function ensureDir(dir: string): Promise<void> {\n await fs.ensureDir(dir);\n}\n\nexport async function copyTemplate(\n templatePath: string,\n targetPath: string,\n replacements: Record<string, string> = {}\n): Promise<void> {\n // Verify template path exists\n if (!(await fs.pathExists(templatePath))) {\n throw new Error(`Template path does not exist: ${templatePath}`);\n }\n\n await fs.ensureDir(targetPath);\n\n const files = await glob('**/*', {\n cwd: templatePath,\n dot: true,\n nodir: true,\n });\n\n if (files.length === 0) {\n throw new Error(`No files found in template: ${templatePath}`);\n }\n\n for (const file of files) {\n const sourcePath = path.join(templatePath, file);\n const destPath = path.join(targetPath, file);\n\n await fs.ensureDir(path.dirname(destPath));\n\n let content = await fs.readFile(sourcePath, 'utf-8');\n\n // Apply replacements\n for (const [key, value] of Object.entries(replacements)) {\n content = content.replace(new RegExp(`{{${key}}}`, 'g'), value);\n }\n\n await fs.writeFile(destPath, content);\n }\n}\n\nexport async function writeJson(filePath: string, data: any): Promise<void> {\n await fs.writeJson(filePath, data, { spaces: 2 });\n}\n\nexport async function readJson<T = any>(filePath: string): Promise<T> {\n return fs.readJson(filePath);\n}\n\nexport async function pathExists(filePath: string): Promise<boolean> {\n return fs.pathExists(filePath);\n}\n\nexport async function removeDir(dir: string): Promise<void> {\n await fs.remove(dir);\n}\n\nexport async function findFiles(\n pattern: string,\n cwd: string = process.cwd()\n): Promise<string[]> {\n return glob(pattern, { cwd });\n}\n\nexport async function readFile(filePath: string): Promise<string> {\n return fs.readFile(filePath, 'utf-8');\n}\n\nexport async function writeFile(filePath: string, content: string): Promise<void> {\n await fs.ensureDir(path.dirname(filePath));\n await fs.writeFile(filePath, content);\n}\n\nexport function getTemplatePath(template: string): string {\n // __dirname is in dist/, so we go up one level to the package root\n // then into templates directory\n return path.join(__dirname, '..', 'templates', template);\n}\n\nexport async function isEmptyDir(dir: string): Promise<boolean> {\n if (!(await pathExists(dir))) {\n return true;\n }\n\n const files = await fs.readdir(dir);\n return files.length === 0;\n}\n\n","import { execa } from 'execa';\nimport fs from 'fs-extra';\nimport path from 'path';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn';\n\nexport async function detectPackageManager(cwd: string = process.cwd()): Promise<PackageManager> {\n // Check for lock files\n if (await fs.pathExists(path.join(cwd, 'pnpm-lock.yaml'))) {\n return 'pnpm';\n }\n if (await fs.pathExists(path.join(cwd, 'yarn.lock'))) {\n return 'yarn';\n }\n if (await fs.pathExists(path.join(cwd, 'package-lock.json'))) {\n return 'npm';\n }\n\n // Check if package managers are available\n try {\n await execa('pnpm', ['--version']);\n return 'pnpm';\n } catch {\n // pnpm not available\n }\n\n try {\n await execa('yarn', ['--version']);\n return 'yarn';\n } catch {\n // yarn not available\n }\n\n return 'npm';\n}\n\nexport async function installDependencies(\n cwd: string,\n packageManager: PackageManager = 'pnpm'\n): Promise<void> {\n const commands: Record<PackageManager, string[]> = {\n npm: ['install'],\n pnpm: ['install'],\n yarn: ['install'],\n };\n\n await execa(packageManager, commands[packageManager], {\n cwd,\n stdio: 'inherit',\n });\n}\n\nexport async function addDependency(\n cwd: string,\n dependency: string,\n options: {\n dev?: boolean;\n packageManager?: PackageManager;\n } = {}\n): Promise<void> {\n const pm = options.packageManager || (await detectPackageManager(cwd));\n const isDev = options.dev || false;\n\n const commands: Record<PackageManager, string[]> = {\n npm: ['install', isDev ? '--save-dev' : '--save', dependency],\n pnpm: ['add', isDev ? '-D' : '', dependency].filter(Boolean),\n yarn: ['add', isDev ? '--dev' : '', dependency].filter(Boolean),\n };\n\n await execa(pm, commands[pm], {\n cwd,\n stdio: 'inherit',\n });\n}\n\nexport async function runScript(\n cwd: string,\n script: string,\n packageManager: PackageManager = 'pnpm'\n): Promise<void> {\n const commands: Record<PackageManager, string[]> = {\n npm: ['run', script],\n pnpm: ['run', script],\n yarn: ['run', script],\n };\n\n await execa(packageManager, commands[packageManager], {\n cwd,\n stdio: 'inherit',\n });\n}\n\nexport function getInstallCommand(packageManager: PackageManager): string {\n const commands: Record<PackageManager, string> = {\n npm: 'npm install',\n pnpm: 'pnpm install',\n yarn: 'yarn install',\n };\n\n return commands[packageManager];\n}\n\nexport function getRunCommand(packageManager: PackageManager, script: string): string {\n const commands: Record<PackageManager, string> = {\n npm: `npm run ${script}`,\n pnpm: `pnpm ${script}`,\n yarn: `yarn ${script}`,\n };\n\n return commands[packageManager];\n}\n\n","import { execa } from 'execa';\nimport fs from 'fs-extra';\nimport path from 'path';\n\nexport async function isGitInstalled(): Promise<boolean> {\n try {\n await execa('git', ['--version']);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function isGitRepository(cwd: string): Promise<boolean> {\n try {\n await execa('git', ['rev-parse', '--git-dir'], { cwd });\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function initGitRepository(cwd: string): Promise<void> {\n await execa('git', ['init'], { cwd });\n \n // Create .gitignore\n const gitignore = `# Dependencies\nnode_modules/\n.pnp\n.pnp.js\n\n# Testing\ncoverage/\n.nyc_output/\n\n# Production\ndist/\nbuild/\n\n# Environment\n.env\n.env.local\n.env.*.local\n\n# IDE\n.vscode/\n.idea/\n*.swp\n*.swo\n*~\n\n# OS\n.DS_Store\nThumbs.db\n\n# Logs\nlogs/\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\n\n# Misc\n.cache/\n.temp/\n.tmp/\n`;\n\n await fs.writeFile(path.join(cwd, '.gitignore'), gitignore);\n}\n\nexport async function createInitialCommit(cwd: string): Promise<void> {\n await execa('git', ['add', '.'], { cwd });\n await execa('git', ['commit', '-m', 'Initial commit from AgentForge CLI'], { cwd });\n}\n\nexport async function getGitUserInfo(): Promise<{ name?: string; email?: string }> {\n try {\n const { stdout: name } = await execa('git', ['config', 'user.name']);\n const { stdout: email } = await execa('git', ['config', 'user.email']);\n return { name, email };\n } catch {\n return {};\n }\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport { logger } from '../utils/logger.js';\nimport { promptProjectSetup } from '../utils/prompts.js';\nimport { copyTemplate, ensureDir, isEmptyDir, writeJson, readJson, getTemplatePath } from '../utils/fs.js';\nimport { installDependencies, getRunCommand, type PackageManager } from '../utils/package-manager.js';\nimport { initGitRepository, createInitialCommit, isGitInstalled } from '../utils/git.js';\n\ninterface CreateOptions {\n template?: 'minimal' | 'full' | 'api' | 'cli';\n packageManager?: PackageManager;\n install?: boolean;\n git?: boolean;\n}\n\nexport async function createCommand(\n projectName: string,\n options: CreateOptions\n): Promise<void> {\n try {\n logger.header('🚀 Create AgentForge Project');\n\n // Validate project name\n if (!projectName) {\n logger.error('Project name is required');\n process.exit(1);\n }\n\n const targetPath = path.join(process.cwd(), projectName);\n\n // Check if directory exists and is not empty\n if (!(await isEmptyDir(targetPath))) {\n logger.error(`Directory ${projectName} already exists and is not empty`);\n process.exit(1);\n }\n\n // Prompt for project setup if not all options provided\n const answers = await promptProjectSetup({\n projectName,\n template: options.template,\n packageManager: options.packageManager,\n installDependencies: options.install,\n initGit: options.git,\n });\n\n logger.newLine();\n logger.info(`Creating project: ${chalk.cyan(answers.projectName)}`);\n logger.info(`Template: ${chalk.cyan(answers.template)}`);\n logger.info(`Package manager: ${chalk.cyan(answers.packageManager)}`);\n logger.newLine();\n\n // Create project directory\n logger.startSpinner('Creating project directory...');\n await ensureDir(targetPath);\n logger.succeedSpinner('Project directory created');\n\n // Copy template\n logger.startSpinner('Copying template files...');\n const templatePath = getTemplatePath(answers.template);\n await copyTemplate(templatePath, targetPath, {\n PROJECT_NAME: answers.projectName,\n AUTHOR: answers.author || '',\n DESCRIPTION: answers.description || `AgentForge project created with ${answers.template} template`,\n PACKAGE_MANAGER: answers.packageManager,\n });\n logger.succeedSpinner('Template files copied');\n\n // Update package.json\n logger.startSpinner('Updating package.json...');\n const packageJsonPath = path.join(targetPath, 'package.json');\n const packageJson = await readJson<any>(packageJsonPath);\n packageJson.name = answers.projectName;\n if (answers.author) {\n packageJson.author = answers.author;\n }\n if (answers.description) {\n packageJson.description = answers.description;\n }\n await writeJson(packageJsonPath, packageJson);\n logger.succeedSpinner('package.json updated');\n\n // Install dependencies\n if (answers.installDependencies) {\n logger.startSpinner('Installing dependencies...');\n try {\n await installDependencies(targetPath, answers.packageManager);\n logger.succeedSpinner('Dependencies installed');\n } catch (error) {\n logger.failSpinner('Failed to install dependencies');\n logger.warn('You can install them manually later');\n }\n }\n\n // Initialize git\n if (answers.initGit && (await isGitInstalled())) {\n logger.startSpinner('Initializing git repository...');\n try {\n await initGitRepository(targetPath);\n await createInitialCommit(targetPath);\n logger.succeedSpinner('Git repository initialized');\n } catch (error) {\n logger.failSpinner('Failed to initialize git');\n logger.warn('You can initialize it manually later');\n }\n }\n\n // Success message\n logger.newLine();\n logger.success(chalk.bold.green('✨ Project created successfully!'));\n logger.newLine();\n logger.header('📝 Next Steps');\n logger.list([\n `cd ${answers.projectName}`,\n answers.installDependencies\n ? getRunCommand(answers.packageManager, 'dev')\n : `${answers.packageManager} install`,\n ]);\n logger.newLine();\n logger.info('Happy coding! 🎉');\n } catch (error: any) {\n logger.error(`Failed to create project: ${error.message}`);\n process.exit(1);\n }\n}\n\n","import { logger } from '../utils/logger.js';\nimport { runScript, detectPackageManager } from '../utils/package-manager.js';\n\ninterface DevOptions {\n port?: string;\n open?: boolean;\n}\n\nexport async function devCommand(options: DevOptions): Promise<void> {\n try {\n logger.header('🚀 Starting Development Server');\n\n const cwd = process.cwd();\n const packageManager = await detectPackageManager(cwd);\n\n logger.info(`Port: ${options.port || '3000'}`);\n logger.info(`Package manager: ${packageManager}`);\n logger.newLine();\n\n logger.startSpinner('Starting development server...');\n\n // Set environment variables\n if (options.port) {\n process.env.PORT = options.port;\n }\n\n await runScript(cwd, 'dev', packageManager);\n\n logger.succeedSpinner('Development server started');\n } catch (error: any) {\n logger.failSpinner('Failed to start development server');\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import { logger } from '../utils/logger.js';\nimport { runScript, detectPackageManager } from '../utils/package-manager.js';\n\ninterface BuildOptions {\n minify?: boolean;\n sourcemap?: boolean;\n}\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n try {\n logger.header('📦 Building for Production');\n\n const cwd = process.cwd();\n const packageManager = await detectPackageManager(cwd);\n\n logger.info(`Minify: ${options.minify !== false ? 'Yes' : 'No'}`);\n logger.info(`Sourcemap: ${options.sourcemap !== false ? 'Yes' : 'No'}`);\n logger.newLine();\n\n logger.startSpinner('Building project...');\n\n // Set environment variables\n process.env.NODE_ENV = 'production';\n if (options.minify === false) {\n process.env.NO_MINIFY = 'true';\n }\n if (options.sourcemap === false) {\n process.env.NO_SOURCEMAP = 'true';\n }\n\n await runScript(cwd, 'build', packageManager);\n\n logger.succeedSpinner('Build completed successfully');\n logger.newLine();\n logger.success('✨ Production build ready!');\n } catch (error: any) {\n logger.failSpinner('Build failed');\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import { logger } from '../utils/logger.js';\nimport { runScript, detectPackageManager } from '../utils/package-manager.js';\n\ninterface TestOptions {\n watch?: boolean;\n ui?: boolean;\n coverage?: boolean;\n}\n\nexport async function testCommand(options: TestOptions): Promise<void> {\n try {\n logger.header('🧪 Running Tests');\n\n const cwd = process.cwd();\n const packageManager = await detectPackageManager(cwd);\n\n logger.info(`Watch mode: ${options.watch ? 'Yes' : 'No'}`);\n logger.info(`UI: ${options.ui ? 'Yes' : 'No'}`);\n logger.info(`Coverage: ${options.coverage ? 'Yes' : 'No'}`);\n logger.newLine();\n\n logger.startSpinner('Running tests...');\n\n // Determine which test script to run\n let script = 'test';\n if (options.ui) {\n script = 'test:ui';\n } else if (options.coverage) {\n script = 'test:coverage';\n } else if (options.watch) {\n script = 'test:watch';\n }\n\n await runScript(cwd, script, packageManager);\n\n logger.succeedSpinner('Tests completed');\n } catch (error: any) {\n logger.failSpinner('Tests failed');\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import { logger } from '../utils/logger.js';\nimport { runScript, detectPackageManager } from '../utils/package-manager.js';\n\ninterface LintOptions {\n fix?: boolean;\n format?: boolean;\n}\n\nexport async function lintCommand(options: LintOptions): Promise<void> {\n try {\n logger.header('🔍 Linting Code');\n\n const cwd = process.cwd();\n const packageManager = await detectPackageManager(cwd);\n\n logger.info(`Auto-fix: ${options.fix ? 'Yes' : 'No'}`);\n logger.info(`Format: ${options.format !== false ? 'Yes' : 'No'}`);\n logger.newLine();\n\n // Run linter\n logger.startSpinner('Running linter...');\n try {\n await runScript(cwd, options.fix ? 'lint:fix' : 'lint', packageManager);\n logger.succeedSpinner('Linting completed');\n } catch (error) {\n logger.failSpinner('Linting found issues');\n if (!options.fix) {\n logger.info('Run with --fix to automatically fix issues');\n }\n }\n\n // Run formatter\n if (options.format !== false) {\n logger.startSpinner('Formatting code...');\n try {\n await runScript(cwd, 'format', packageManager);\n logger.succeedSpinner('Formatting completed');\n } catch (error) {\n logger.failSpinner('Formatting failed');\n }\n }\n\n logger.newLine();\n logger.success('✨ Code quality check completed!');\n } catch (error: any) {\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\nimport { promptAgentSetup } from '../../utils/prompts.js';\nimport { writeFile, ensureDir } from '../../utils/fs.js';\n\ninterface AgentCreateOptions {\n pattern?: 'react' | 'plan-execute' | 'reflection' | 'multi-agent';\n test?: boolean;\n}\n\nexport async function agentCreateCommand(\n name: string,\n options: AgentCreateOptions\n): Promise<void> {\n try {\n logger.header('🤖 Create Agent');\n\n // Prompt for agent setup\n const answers = await promptAgentSetup({\n name,\n pattern: options.pattern,\n generateTests: options.test,\n });\n\n logger.newLine();\n logger.info(`Creating agent: ${chalk.cyan(answers.name)}`);\n logger.info(`Pattern: ${chalk.cyan(answers.pattern)}`);\n logger.newLine();\n\n const cwd = process.cwd();\n const agentDir = path.join(cwd, 'src', 'agents');\n const agentFile = path.join(agentDir, `${answers.name}.ts`);\n\n // Create agent file\n logger.startSpinner('Creating agent file...');\n await ensureDir(agentDir);\n\n const agentContent = generateAgentContent(answers.name, answers.pattern, answers.description);\n await writeFile(agentFile, agentContent);\n\n logger.succeedSpinner('Agent file created');\n\n // Create test file\n if (answers.generateTests) {\n logger.startSpinner('Creating test file...');\n const testDir = path.join(cwd, 'tests', 'agents');\n const testFile = path.join(testDir, `${answers.name}.test.ts`);\n await ensureDir(testDir);\n\n const testContent = generateTestContent(answers.name, answers.pattern);\n await writeFile(testFile, testContent);\n\n logger.succeedSpinner('Test file created');\n }\n\n logger.newLine();\n logger.success(chalk.bold.green('✨ Agent created successfully!'));\n logger.newLine();\n logger.header('📝 Next Steps');\n logger.list([\n `Edit ${chalk.cyan(`src/agents/${answers.name}.ts`)} to customize your agent`,\n answers.generateTests\n ? `Run ${chalk.cyan(`pnpm test tests/agents/${answers.name}.test.ts`)} to test your agent`\n : '',\n ].filter(Boolean));\n } catch (error: any) {\n logger.error(`Failed to create agent: ${error.message}`);\n process.exit(1);\n }\n}\n\nfunction generateAgentContent(\n name: string,\n pattern: string,\n description?: string\n): string {\n const patterns: Record<string, string> = {\n 'react': `import { createReActAgent } from '@agentforge/patterns';\nimport { ChatOpenAI } from '@langchain/openai';\n\n/**\n * ${description || `${name} agent using ReAct pattern`}\n */\nexport async function create${capitalize(name)}Agent() {\n const model = new ChatOpenAI({\n modelName: 'gpt-4',\n temperature: 0,\n });\n\n const agent = createReActAgent({\n model,\n tools: [],\n // Add your configuration here\n });\n\n return agent;\n}\n`,\n 'plan-execute': `import { createPlanExecuteAgent } from '@agentforge/patterns';\nimport { ChatOpenAI } from '@langchain/openai';\n\n/**\n * ${description || `${name} agent using Plan-Execute pattern`}\n */\nexport async function create${capitalize(name)}Agent() {\n const model = new ChatOpenAI({\n modelName: 'gpt-4',\n temperature: 0,\n });\n\n const agent = createPlanExecuteAgent({\n model,\n tools: [],\n // Add your configuration here\n });\n\n return agent;\n}\n`,\n 'reflection': `import { createReflectionAgent } from '@agentforge/patterns';\nimport { ChatOpenAI } from '@langchain/openai';\n\n/**\n * ${description || `${name} agent using Reflection pattern`}\n */\nexport async function create${capitalize(name)}Agent() {\n const model = new ChatOpenAI({\n modelName: 'gpt-4',\n temperature: 0,\n });\n\n const agent = createReflectionAgent({\n model,\n // Add your configuration here\n });\n\n return agent;\n}\n`,\n 'multi-agent': `import { createMultiAgentSystem } from '@agentforge/patterns';\nimport { ChatOpenAI } from '@langchain/openai';\n\n/**\n * ${description || `${name} multi-agent system`}\n */\nexport async function create${capitalize(name)}System() {\n const model = new ChatOpenAI({\n modelName: 'gpt-4',\n temperature: 0,\n });\n\n const system = createMultiAgentSystem({\n model,\n workers: [],\n // Add your configuration here\n });\n\n return system;\n}\n`,\n };\n\n return patterns[pattern] || patterns['react'];\n}\n\nfunction generateTestContent(name: string, pattern: string): string {\n return `import { describe, it, expect } from 'vitest';\nimport { create${capitalize(name)}${pattern === 'multi-agent' ? 'System' : 'Agent'} } from '../../src/agents/${name}.js';\n\ndescribe('${capitalize(name)} ${pattern === 'multi-agent' ? 'System' : 'Agent'}', () => {\n it('should create agent successfully', async () => {\n const agent = await create${capitalize(name)}${pattern === 'multi-agent' ? 'System' : 'Agent'}();\n expect(agent).toBeDefined();\n });\n\n // Add more tests here\n});\n`;\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport { logger } from '../../utils/logger.js';\nimport { copyTemplate, getTemplatePath } from '../../utils/fs.js';\n\ninterface ReusableAgentCreateOptions {\n description?: string;\n author?: string;\n}\n\nexport async function agentCreateReusableCommand(\n name: string,\n options: ReusableAgentCreateOptions\n): Promise<void> {\n try {\n logger.header('📦 Create Reusable Agent');\n\n // Prompt for agent details\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'name',\n message: 'Agent name (e.g., customer-support):',\n default: name,\n validate: (input: string) => {\n if (!input) return 'Agent name is required';\n if (!/^[a-z][a-z0-9-]*$/.test(input)) {\n return 'Agent name must be lowercase with hyphens (e.g., customer-support)';\n }\n return true;\n },\n },\n {\n type: 'input',\n name: 'description',\n message: 'Agent description:',\n default: options.description || `A reusable ${name} agent`,\n },\n {\n type: 'input',\n name: 'author',\n message: 'Author name:',\n default: options.author || '',\n },\n ]);\n\n logger.newLine();\n logger.info(`Creating reusable agent: ${chalk.cyan(answers.name)}`);\n logger.info(`Description: ${chalk.gray(answers.description)}`);\n logger.newLine();\n\n const cwd = process.cwd();\n const agentDir = path.join(cwd, answers.name);\n\n // Generate variable names\n const agentNameKebab = answers.name;\n const agentNamePascal = kebabToPascal(agentNameKebab);\n const agentNameCamel = kebabToCamel(agentNameKebab);\n const packageName = `@agentforge/${agentNameKebab}`;\n\n // Prepare replacements\n const replacements = {\n AGENT_NAME_KEBAB: agentNameKebab,\n AGENT_NAME_PASCAL: agentNamePascal,\n AGENT_NAME_CAMEL: agentNameCamel,\n AGENT_DESCRIPTION: answers.description,\n PACKAGE_NAME: packageName,\n AUTHOR: answers.author || 'Your Name',\n };\n\n // Copy template\n logger.startSpinner('Creating agent structure...');\n const templatePath = getTemplatePath('reusable-agent');\n await copyTemplate(templatePath, agentDir, replacements);\n logger.succeedSpinner('Agent structure created');\n\n // Move files from template root to src/\n logger.startSpinner('Organizing files...');\n const fs = await import('fs-extra');\n \n // Move index.ts and prompt-loader.ts to src/\n const srcDir = path.join(agentDir, 'src');\n await fs.ensureDir(srcDir);\n await fs.move(path.join(agentDir, 'index.ts'), path.join(srcDir, 'index.ts'));\n await fs.move(path.join(agentDir, 'prompt-loader.ts'), path.join(srcDir, 'prompt-loader.ts'));\n await fs.move(path.join(agentDir, 'index.test.ts'), path.join(srcDir, 'index.test.ts'));\n \n logger.succeedSpinner('Files organized');\n\n logger.newLine();\n logger.success(chalk.bold.green('✨ Reusable agent created successfully!'));\n logger.newLine();\n logger.header('📝 Next Steps');\n \n const nextSteps = [\n `cd ${chalk.cyan(answers.name)}`,\n `Install dependencies: ${chalk.cyan('pnpm install')}`,\n `Edit ${chalk.cyan('prompts/system.md')} to customize the agent prompt`,\n `Edit ${chalk.cyan('src/index.ts')} to add tools and configuration`,\n `Run tests: ${chalk.cyan('pnpm test')}`,\n `Build: ${chalk.cyan('pnpm build')}`,\n ];\n\n logger.list(nextSteps);\n\n logger.newLine();\n logger.info(chalk.gray('💡 Tip: See examples/reusable-agents/ for reference implementations'));\n } catch (error: any) {\n logger.error(`Failed to create reusable agent: ${error.message}`);\n process.exit(1);\n }\n}\n\n/**\n * Convert kebab-case to PascalCase\n */\nfunction kebabToPascal(str: string): string {\n return str\n .split('-')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n}\n\n/**\n * Convert kebab-case to camelCase\n */\nfunction kebabToCamel(str: string): string {\n const pascal = kebabToPascal(str);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\nimport { findFiles, readFile } from '../../utils/fs.js';\n\ninterface AgentListOptions {\n verbose?: boolean;\n}\n\nexport async function agentListCommand(options: AgentListOptions): Promise<void> {\n try {\n logger.header('📋 List Agents');\n\n const cwd = process.cwd();\n const agentDir = path.join(cwd, 'src', 'agents');\n\n // Find all agent files\n const agentFiles = await findFiles('*.ts', agentDir);\n\n if (agentFiles.length === 0) {\n logger.warn('No agents found');\n logger.info(`Create an agent with: ${chalk.cyan('agentforge agent:create <name>')}`);\n return;\n }\n\n logger.info(`Found ${chalk.cyan(agentFiles.length)} agent(s):\\n`);\n\n for (const file of agentFiles) {\n const agentName = path.basename(file, '.ts');\n const agentPath = path.join(agentDir, file);\n\n if (options.verbose) {\n // Read file to extract pattern and description\n const content = await readFile(agentPath);\n const pattern = extractPattern(content);\n const description = extractDescription(content);\n\n logger.info(chalk.bold.cyan(` ${agentName}`));\n if (pattern) {\n logger.info(` Pattern: ${pattern}`);\n }\n if (description) {\n logger.info(` Description: ${description}`);\n }\n logger.info(` Path: ${chalk.gray(agentPath)}`);\n logger.newLine();\n } else {\n logger.info(` • ${chalk.cyan(agentName)}`);\n }\n }\n\n if (!options.verbose) {\n logger.newLine();\n logger.info(`Use ${chalk.cyan('--verbose')} for more details`);\n }\n } catch (error: any) {\n logger.error(`Failed to list agents: ${error.message}`);\n process.exit(1);\n }\n}\n\nfunction extractPattern(content: string): string | null {\n const patterns = ['ReAct', 'Plan-Execute', 'Reflection', 'Multi-Agent'];\n for (const pattern of patterns) {\n if (content.includes(`create${pattern.replace('-', '')}Agent`)) {\n return pattern;\n }\n }\n return null;\n}\n\nfunction extractDescription(content: string): string | null {\n const match = content.match(/\\/\\*\\*\\s*\\n\\s*\\*\\s*(.+?)\\s*\\n/);\n return match ? match[1] : null;\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\nimport { runScript, detectPackageManager } from '../../utils/package-manager.js';\nimport { pathExists } from '../../utils/fs.js';\n\ninterface AgentTestOptions {\n watch?: boolean;\n}\n\nexport async function agentTestCommand(\n name: string,\n options: AgentTestOptions\n): Promise<void> {\n try {\n logger.header('🧪 Test Agent');\n\n const cwd = process.cwd();\n const testFile = path.join(cwd, 'tests', 'agents', `${name}.test.ts`);\n\n // Check if test file exists\n if (!(await pathExists(testFile))) {\n logger.error(`Test file not found: ${testFile}`);\n logger.info(`Create tests with: ${chalk.cyan(`agentforge agent:create ${name} --test`)}`);\n process.exit(1);\n }\n\n logger.info(`Testing agent: ${chalk.cyan(name)}`);\n logger.info(`Watch mode: ${options.watch ? 'Yes' : 'No'}`);\n logger.newLine();\n\n const packageManager = await detectPackageManager(cwd);\n\n logger.startSpinner('Running tests...');\n\n // Run tests for specific file\n const testCommand = options.watch ? 'test:watch' : 'test';\n process.env.TEST_FILE = testFile;\n\n await runScript(cwd, testCommand, packageManager);\n\n logger.succeedSpinner('Tests completed');\n } catch (error: any) {\n logger.failSpinner('Tests failed');\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\n\ninterface AgentDeployOptions {\n environment?: string;\n dryRun?: boolean;\n}\n\nexport async function agentDeployCommand(\n name: string,\n options: AgentDeployOptions\n): Promise<void> {\n try {\n logger.header('🚀 Deploy Agent');\n\n logger.info(`Agent: ${chalk.cyan(name)}`);\n logger.info(`Environment: ${chalk.cyan(options.environment || 'production')}`);\n logger.info(`Dry run: ${options.dryRun ? 'Yes' : 'No'}`);\n logger.newLine();\n\n if (options.dryRun) {\n logger.warn('Dry run mode - no actual deployment will occur');\n logger.newLine();\n }\n\n logger.startSpinner('Preparing deployment...');\n\n // TODO: Implement actual deployment logic\n // This would typically involve:\n // 1. Building the agent\n // 2. Running tests\n // 3. Packaging the agent\n // 4. Deploying to the target environment (AWS Lambda, Cloud Run, etc.)\n\n await new Promise((resolve) => setTimeout(resolve, 1000));\n\n logger.succeedSpinner('Deployment prepared');\n\n if (!options.dryRun) {\n logger.startSpinner('Deploying agent...');\n await new Promise((resolve) => setTimeout(resolve, 2000));\n logger.succeedSpinner('Agent deployed successfully');\n }\n\n logger.newLine();\n logger.success(chalk.bold.green('✨ Deployment completed!'));\n logger.newLine();\n logger.info('Note: Actual deployment implementation coming soon');\n logger.info('For now, please use the deployment templates in the templates/deployment directory');\n } catch (error: any) {\n logger.failSpinner('Deployment failed');\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\nimport { promptToolSetup } from '../../utils/prompts.js';\nimport { writeFile, ensureDir, copyTemplate, getTemplatePath } from '../../utils/fs.js';\n\ninterface ToolCreateOptions {\n category?: 'web' | 'data' | 'file' | 'utility';\n structure?: 'single' | 'multi';\n description?: string;\n test?: boolean;\n}\n\nexport async function toolCreateCommand(\n name: string,\n options: ToolCreateOptions\n): Promise<void> {\n try {\n logger.header('🔧 Create Tool');\n\n // Prompt for tool setup\n const answers = await promptToolSetup({\n name,\n category: options.category,\n structure: options.structure,\n description: options.description,\n generateTests: options.test,\n });\n\n logger.newLine();\n logger.info(`Creating tool: ${chalk.cyan(answers.name)}`);\n logger.info(`Category: ${chalk.cyan(answers.category)}`);\n logger.info(`Structure: ${chalk.cyan(answers.structure)}`);\n logger.newLine();\n\n const cwd = process.cwd();\n\n if (answers.structure === 'multi') {\n // Multi-file structure\n await createMultiFileTool(cwd, answers);\n } else {\n // Single-file structure (existing behavior)\n await createSingleFileTool(cwd, answers);\n }\n\n logger.newLine();\n logger.success(chalk.bold.green('✨ Tool created successfully!'));\n logger.newLine();\n logger.header('📝 Next Steps');\n\n const nextSteps = answers.structure === 'multi'\n ? [\n `Edit ${chalk.cyan(`src/tools/${answers.name}/index.ts`)} to implement your tool`,\n `Add providers in ${chalk.cyan(`src/tools/${answers.name}/providers/`)}`,\n `Define types in ${chalk.cyan(`src/tools/${answers.name}/types.ts`)}`,\n answers.generateTests\n ? `Run ${chalk.cyan(`pnpm test ${answers.name}`)} to test your tool`\n : '',\n `Register the tool in your agent's tool registry`,\n ]\n : [\n `Edit ${chalk.cyan(`src/tools/${answers.name}.ts`)} to implement your tool`,\n answers.generateTests\n ? `Run ${chalk.cyan(`pnpm test tests/tools/${answers.name}.test.ts`)} to test your tool`\n : '',\n `Register the tool in your agent's tool registry`,\n ];\n\n logger.list(nextSteps.filter(Boolean));\n } catch (error: any) {\n logger.error(`Failed to create tool: ${error.message}`);\n process.exit(1);\n }\n}\n\nfunction generateToolContent(\n name: string,\n category: string,\n description: string\n): string {\n return `import { z } from 'zod';\nimport { createTool } from '@agentforge/core';\n\n/**\n * ${description}\n * Category: ${category}\n */\nexport const ${name}Tool = createTool()\n .name('${name}')\n .description('${description}')\n .category('${category}')\n .schema(\n z.object({\n // Define your input schema here\n input: z.string().describe('Input parameter'),\n })\n )\n .implement(async ({ input }) => {\n // Implement your tool logic here\n return \\`Processed: \\${input}\\`;\n })\n .build();\n`;\n}\n\nfunction generateTestContent(name: string): string {\n return `import { describe, it, expect } from 'vitest';\nimport { ${name}Tool } from '../../src/tools/${name}.js';\n\ndescribe('${capitalize(name)} Tool', () => {\n it('should have correct metadata', () => {\n expect(${name}Tool.name).toBe('${name}');\n expect(${name}Tool.description).toBeDefined();\n });\n\n it('should execute successfully', async () => {\n const result = await ${name}Tool.invoke({\n input: 'test',\n });\n\n expect(result).toBeDefined();\n });\n\n // Add more tests here\n});\n`;\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * Create a single-file tool (existing behavior)\n */\nasync function createSingleFileTool(\n cwd: string,\n answers: { name: string; category: string; description: string; generateTests: boolean }\n): Promise<void> {\n const toolDir = path.join(cwd, 'src', 'tools');\n const toolFile = path.join(toolDir, `${answers.name}.ts`);\n\n // Create tool file\n logger.startSpinner('Creating tool file...');\n await ensureDir(toolDir);\n\n const toolContent = generateToolContent(answers.name, answers.category, answers.description);\n await writeFile(toolFile, toolContent);\n\n logger.succeedSpinner('Tool file created');\n\n // Create test file\n if (answers.generateTests) {\n logger.startSpinner('Creating test file...');\n const testDir = path.join(cwd, 'tests', 'tools');\n const testFile = path.join(testDir, `${answers.name}.test.ts`);\n await ensureDir(testDir);\n\n const testContent = generateTestContent(answers.name);\n await writeFile(testFile, testContent);\n\n logger.succeedSpinner('Test file created');\n }\n}\n\n/**\n * Create a multi-file tool using template\n */\nasync function createMultiFileTool(\n cwd: string,\n answers: { name: string; category: string; description: string; generateTests: boolean }\n): Promise<void> {\n const toolDir = path.join(cwd, 'src', 'tools', answers.name);\n\n // Create tool directory from template\n logger.startSpinner('Creating tool directory structure...');\n await ensureDir(toolDir);\n\n const templatePath = getTemplatePath('tool-multi');\n\n // Prepare replacements\n const replacements = {\n TOOL_NAME: answers.name,\n TOOL_NAME_PASCAL: capitalize(answers.name),\n TOOL_NAME_CAMEL: answers.name.charAt(0).toLowerCase() + answers.name.slice(1),\n TOOL_DESCRIPTION: answers.description,\n TOOL_CATEGORY: answers.category,\n };\n\n await copyTemplate(templatePath, toolDir, replacements);\n\n logger.succeedSpinner('Tool directory structure created');\n\n // Remove test files if not needed\n if (!answers.generateTests) {\n logger.startSpinner('Cleaning up test files...');\n const fs = await import('fs-extra');\n const testDir = path.join(toolDir, '__tests__');\n await fs.remove(testDir);\n logger.succeedSpinner('Test files removed');\n }\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\nimport { findFiles, readFile } from '../../utils/fs.js';\n\ninterface ToolListOptions {\n category?: string;\n verbose?: boolean;\n}\n\nexport async function toolListCommand(options: ToolListOptions): Promise<void> {\n try {\n logger.header('📋 List Tools');\n\n const cwd = process.cwd();\n const toolDir = path.join(cwd, 'src', 'tools');\n\n // Find all tool files\n const toolFiles = await findFiles('*.ts', toolDir);\n\n if (toolFiles.length === 0) {\n logger.warn('No tools found');\n logger.info(`Create a tool with: ${chalk.cyan('agentforge tool:create <name>')}`);\n return;\n }\n\n let filteredTools = toolFiles;\n\n // Filter by category if specified\n if (options.category) {\n filteredTools = [];\n for (const file of toolFiles) {\n const toolPath = path.join(toolDir, file);\n const content = await readFile(toolPath);\n const category = extractCategory(content);\n if (category === options.category) {\n filteredTools.push(file);\n }\n }\n }\n\n if (filteredTools.length === 0) {\n logger.warn(`No tools found in category: ${options.category}`);\n return;\n }\n\n logger.info(`Found ${chalk.cyan(filteredTools.length)} tool(s):\\n`);\n\n for (const file of filteredTools) {\n const toolName = path.basename(file, '.ts');\n const toolPath = path.join(toolDir, file);\n\n if (options.verbose) {\n // Read file to extract category and description\n const content = await readFile(toolPath);\n const category = extractCategory(content);\n const description = extractDescription(content);\n\n logger.info(chalk.bold.cyan(` ${toolName}`));\n if (category) {\n logger.info(` Category: ${category}`);\n }\n if (description) {\n logger.info(` Description: ${description}`);\n }\n logger.info(` Path: ${chalk.gray(toolPath)}`);\n logger.newLine();\n } else {\n logger.info(` • ${chalk.cyan(toolName)}`);\n }\n }\n\n if (!options.verbose) {\n logger.newLine();\n logger.info(`Use ${chalk.cyan('--verbose')} for more details`);\n }\n } catch (error: any) {\n logger.error(`Failed to list tools: ${error.message}`);\n process.exit(1);\n }\n}\n\nfunction extractCategory(content: string): string | null {\n const match = content.match(/Category:\\s*(\\w+)/);\n return match ? match[1] : null;\n}\n\nfunction extractDescription(content: string): string | null {\n const match = content.match(/\\/\\*\\*\\s*\\n\\s*\\*\\s*(.+?)\\s*\\n/);\n return match ? match[1] : null;\n}\n\n","import path from 'path';\nimport chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\nimport { runScript, detectPackageManager } from '../../utils/package-manager.js';\nimport { pathExists } from '../../utils/fs.js';\n\ninterface ToolTestOptions {\n watch?: boolean;\n}\n\nexport async function toolTestCommand(\n name: string,\n options: ToolTestOptions\n): Promise<void> {\n try {\n logger.header('🧪 Test Tool');\n\n const cwd = process.cwd();\n const testFile = path.join(cwd, 'tests', 'tools', `${name}.test.ts`);\n\n // Check if test file exists\n if (!(await pathExists(testFile))) {\n logger.error(`Test file not found: ${testFile}`);\n logger.info(`Create tests with: ${chalk.cyan(`agentforge tool:create ${name} --test`)}`);\n process.exit(1);\n }\n\n logger.info(`Testing tool: ${chalk.cyan(name)}`);\n logger.info(`Watch mode: ${options.watch ? 'Yes' : 'No'}`);\n logger.newLine();\n\n const packageManager = await detectPackageManager(cwd);\n\n logger.startSpinner('Running tests...');\n\n // Run tests for specific file\n const testCommand = options.watch ? 'test:watch' : 'test';\n process.env.TEST_FILE = testFile;\n\n await runScript(cwd, testCommand, packageManager);\n\n logger.succeedSpinner('Tests completed');\n } catch (error: any) {\n logger.failSpinner('Tests failed');\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import chalk from 'chalk';\nimport { logger } from '../../utils/logger.js';\nimport { runScript, detectPackageManager } from '../../utils/package-manager.js';\n\ninterface ToolPublishOptions {\n tag?: string;\n dryRun?: boolean;\n}\n\nexport async function toolPublishCommand(\n name: string,\n options: ToolPublishOptions\n): Promise<void> {\n try {\n logger.header('📦 Publish Tool');\n\n logger.info(`Tool: ${chalk.cyan(name)}`);\n logger.info(`Tag: ${chalk.cyan(options.tag || 'latest')}`);\n logger.info(`Dry run: ${options.dryRun ? 'Yes' : 'No'}`);\n logger.newLine();\n\n if (options.dryRun) {\n logger.warn('Dry run mode - no actual publishing will occur');\n logger.newLine();\n }\n\n const cwd = process.cwd();\n const packageManager = await detectPackageManager(cwd);\n\n // Run tests first\n logger.startSpinner('Running tests...');\n try {\n await runScript(cwd, 'test', packageManager);\n logger.succeedSpinner('Tests passed');\n } catch (error) {\n logger.failSpinner('Tests failed');\n logger.error('Cannot publish tool with failing tests');\n process.exit(1);\n }\n\n // Build the tool\n logger.startSpinner('Building tool...');\n try {\n await runScript(cwd, 'build', packageManager);\n logger.succeedSpinner('Build completed');\n } catch (error) {\n logger.failSpinner('Build failed');\n process.exit(1);\n }\n\n // Publish to npm\n if (!options.dryRun) {\n logger.startSpinner('Publishing to npm...');\n \n // TODO: Implement actual npm publish logic\n // This would typically involve:\n // 1. Checking npm credentials\n // 2. Updating version\n // 3. Publishing to npm registry\n \n await new Promise((resolve) => setTimeout(resolve, 2000));\n logger.succeedSpinner('Published to npm');\n }\n\n logger.newLine();\n logger.success(chalk.bold.green('✨ Tool published successfully!'));\n logger.newLine();\n logger.info('Note: Actual npm publishing implementation coming soon');\n logger.info('For now, please use npm publish manually');\n } catch (error: any) {\n logger.failSpinner('Publishing failed');\n logger.error(error.message);\n process.exit(1);\n }\n}\n\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { createCommand } from './commands/create.js';\nimport { devCommand } from './commands/dev.js';\nimport { buildCommand } from './commands/build.js';\nimport { testCommand } from './commands/test.js';\nimport { lintCommand } from './commands/lint.js';\nimport { agentCreateCommand } from './commands/agent/create.js';\nimport { agentCreateReusableCommand } from './commands/agent/create-reusable.js';\nimport { agentListCommand } from './commands/agent/list.js';\nimport { agentTestCommand } from './commands/agent/test.js';\nimport { agentDeployCommand } from './commands/agent/deploy.js';\nimport { toolCreateCommand } from './commands/tool/create.js';\nimport { toolListCommand } from './commands/tool/list.js';\nimport { toolTestCommand } from './commands/tool/test.js';\nimport { toolPublishCommand } from './commands/tool/publish.js';\n\nconst program = new Command();\n\nprogram\n .name('agentforge')\n .description('CLI tool for AgentForge - scaffolding, development, and deployment')\n .version('0.1.0');\n\n// Project scaffolding\nprogram\n .command('create <project-name>')\n .description('Create a new AgentForge project')\n .option('-t, --template <template>', 'Project template (minimal, full, api, cli)', 'minimal')\n .option('-p, --package-manager <pm>', 'Package manager (npm, pnpm, yarn)', 'pnpm')\n .option('--no-install', 'Skip dependency installation')\n .option('--no-git', 'Skip git initialization')\n .action(createCommand);\n\n// Development commands\nprogram\n .command('dev')\n .description('Start development server with hot reload')\n .option('-p, --port <port>', 'Port number', '3000')\n .option('--no-open', 'Do not open browser')\n .action(devCommand);\n\nprogram\n .command('build')\n .description('Build for production')\n .option('--no-minify', 'Skip minification')\n .option('--no-sourcemap', 'Skip sourcemap generation')\n .action(buildCommand);\n\nprogram\n .command('test')\n .description('Run tests with coverage')\n .option('-w, --watch', 'Watch mode')\n .option('--ui', 'Open test UI')\n .option('--coverage', 'Generate coverage report')\n .action(testCommand);\n\nprogram\n .command('lint')\n .description('Lint and format code')\n .option('--fix', 'Auto-fix issues')\n .option('--no-format', 'Skip formatting')\n .action(lintCommand);\n\n// Agent management\nconst agent = program.command('agent').description('Manage agents');\n\nagent\n .command('create <name>')\n .description('Create a new agent')\n .option('-p, --pattern <pattern>', 'Agent pattern (react, plan-execute, reflection, multi-agent)', 'react')\n .option('--no-test', 'Skip test generation')\n .action(agentCreateCommand);\n\nagent\n .command('create-reusable <name>')\n .description('Create a new reusable agent (production template)')\n .option('-d, --description <description>', 'Agent description')\n .option('-a, --author <author>', 'Author name')\n .action(agentCreateReusableCommand);\n\nagent\n .command('list')\n .description('List all agents')\n .option('-v, --verbose', 'Show detailed information')\n .action(agentListCommand);\n\nagent\n .command('test <name>')\n .description('Test a specific agent')\n .option('-w, --watch', 'Watch mode')\n .action(agentTestCommand);\n\nagent\n .command('deploy <name>')\n .description('Deploy an agent')\n .option('-e, --environment <env>', 'Deployment environment', 'production')\n .option('--dry-run', 'Dry run without actual deployment')\n .action(agentDeployCommand);\n\n// Tool management\nconst tool = program.command('tool').description('Manage tools');\n\ntool\n .command('create <name>')\n .description('Create a new tool')\n .option('-c, --category <category>', 'Tool category (web, data, file, utility)', 'utility')\n .option('-s, --structure <structure>', 'Tool structure (single, multi)', 'single')\n .option('-d, --description <description>', 'Tool description')\n .option('--no-test', 'Skip test generation')\n .action(toolCreateCommand);\n\ntool\n .command('list')\n .description('List all tools')\n .option('-c, --category <category>', 'Filter by category')\n .option('-v, --verbose', 'Show detailed information')\n .action(toolListCommand);\n\ntool\n .command('test <name>')\n .description('Test a specific tool')\n .option('-w, --watch', 'Watch mode')\n .action(toolTestCommand);\n\ntool\n .command('publish <name>')\n .description('Publish a tool to npm')\n .option('--tag <tag>', 'npm tag', 'latest')\n .option('--dry-run', 'Dry run without actual publishing')\n .action(toolPublishCommand);\n\n// Error handling\nprogram.exitOverride();\n\nexport async function run() {\n try {\n await program.parseAsync(process.argv);\n } catch (error: any) {\n if (error.code !== 'commander.help' && error.code !== 'commander.version') {\n console.error(chalk.red('Error:'), error.message);\n process.exit(1);\n }\n }\n}\n\n// Export for testing\nexport { program };\n\n"]}
|