@voltagent/cli
Advanced tools
+49
-46
@@ -9,2 +9,3 @@ #!/usr/bin/env node | ||
| var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
| var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); | ||
| var __export = (target, all) => { | ||
@@ -33,7 +34,7 @@ for (var name in all) | ||
| // src/index.ts | ||
| var src_exports = {}; | ||
| __export(src_exports, { | ||
| var index_exports = {}; | ||
| __export(index_exports, { | ||
| runCLI: () => runCLI | ||
| }); | ||
| module.exports = __toCommonJS(src_exports); | ||
| module.exports = __toCommonJS(index_exports); | ||
| var import_chalk6 = __toESM(require("chalk")); | ||
@@ -51,5 +52,5 @@ var import_commander = require("commander"); | ||
| var import_uuid = require("uuid"); | ||
| var isTelemetryDisabled = () => { | ||
| var isTelemetryDisabled = /* @__PURE__ */ __name(() => { | ||
| return process.env.VOLTAGENT_TELEMETRY_DISABLED === "1" || process.env.VOLTAGENT_TELEMETRY_DISABLED === "true"; | ||
| }; | ||
| }, "isTelemetryDisabled"); | ||
| var client = new import_posthog_node.PostHog("phc_cLPjGbbZ9BdRtLG3cxoHNch3ZJnQvNhXCHRkeWUI6z5", { | ||
@@ -61,3 +62,3 @@ host: "https://us.i.posthog.com", | ||
| }); | ||
| var getMachineId = () => { | ||
| var getMachineId = /* @__PURE__ */ __name(() => { | ||
| try { | ||
@@ -73,4 +74,4 @@ const hostname = import_node_os.default.hostname(); | ||
| } | ||
| }; | ||
| var getOSInfo = () => { | ||
| }, "getMachineId"); | ||
| var getOSInfo = /* @__PURE__ */ __name(() => { | ||
| try { | ||
@@ -91,6 +92,5 @@ return { | ||
| } | ||
| }; | ||
| var captureInitEvent = (options) => { | ||
| if (isTelemetryDisabled()) | ||
| return; | ||
| }, "getOSInfo"); | ||
| var captureInitEvent = /* @__PURE__ */ __name((options) => { | ||
| if (isTelemetryDisabled()) return; | ||
| client.capture({ | ||
@@ -105,6 +105,5 @@ distinctId: getMachineId(), | ||
| }); | ||
| }; | ||
| var captureUpdateEvent = (options) => { | ||
| if (isTelemetryDisabled()) | ||
| return; | ||
| }, "captureInitEvent"); | ||
| var captureUpdateEvent = /* @__PURE__ */ __name((options) => { | ||
| if (isTelemetryDisabled()) return; | ||
| client.capture({ | ||
@@ -119,6 +118,5 @@ distinctId: getMachineId(), | ||
| }); | ||
| }; | ||
| var captureError = (options) => { | ||
| if (isTelemetryDisabled()) | ||
| return; | ||
| }, "captureUpdateEvent"); | ||
| var captureError = /* @__PURE__ */ __name((options) => { | ||
| if (isTelemetryDisabled()) return; | ||
| client.capture({ | ||
@@ -134,6 +132,5 @@ distinctId: getMachineId(), | ||
| }); | ||
| }; | ||
| var captureWhoamiEvent = (options) => { | ||
| if (isTelemetryDisabled()) | ||
| return; | ||
| }, "captureError"); | ||
| var captureWhoamiEvent = /* @__PURE__ */ __name((options) => { | ||
| if (isTelemetryDisabled()) return; | ||
| client.capture({ | ||
@@ -148,7 +145,7 @@ distinctId: getMachineId(), | ||
| }); | ||
| }; | ||
| }, "captureWhoamiEvent"); | ||
| var analytics_default = client; | ||
| // src/commands/add.ts | ||
| var registerAddCommand = (program) => { | ||
| var registerAddCommand = /* @__PURE__ */ __name((program) => { | ||
| program.command("add <agent-slug>").description("Add a VoltAgent agent from the marketplace to your project.").action(async (agentSlug) => { | ||
@@ -186,3 +183,3 @@ try { | ||
| }); | ||
| }; | ||
| }, "registerAddCommand"); | ||
@@ -194,3 +191,3 @@ // src/commands/init.ts | ||
| var import_chalk2 = __toESM(require("chalk")); | ||
| var registerInitCommand = (program) => { | ||
| var registerInitCommand = /* @__PURE__ */ __name((program) => { | ||
| program.command("init").description("Integrate VoltAgent CLI into a project").action(async () => { | ||
@@ -275,8 +272,8 @@ try { | ||
| }); | ||
| }; | ||
| }, "registerInitCommand"); | ||
| // src/commands/mcp.ts | ||
| var import_chalk3 = __toESM(require("chalk")); | ||
| var import_node_fs2 = __toESM(require("fs")); | ||
| var import_node_path2 = __toESM(require("path")); | ||
| var import_chalk3 = __toESM(require("chalk")); | ||
| var import_inquirer = __toESM(require("inquirer")); | ||
@@ -286,4 +283,3 @@ var import_ora = __toESM(require("ora")); | ||
| function createMCPConfig(ide, projectRoot) { | ||
| if (ide === "none") | ||
| return; | ||
| if (ide === "none") return; | ||
| const configs = { | ||
@@ -344,2 +340,3 @@ cursor: { | ||
| } | ||
| __name(createMCPConfig, "createMCPConfig"); | ||
| function checkExistingConfig(projectRoot) { | ||
@@ -370,2 +367,3 @@ const possibleConfigs = [ | ||
| } | ||
| __name(checkExistingConfig, "checkExistingConfig"); | ||
| async function setupMCP(options = {}) { | ||
@@ -447,2 +445,3 @@ const projectRoot = process.cwd(); | ||
| } | ||
| __name(setupMCP, "setupMCP"); | ||
| async function testMCP() { | ||
@@ -476,2 +475,3 @@ console.log(import_chalk3.default.cyan("\u{1F9EA} Testing VoltAgent MCP Connection\n")); | ||
| } | ||
| __name(testMCP, "testMCP"); | ||
| async function statusMCP() { | ||
@@ -501,2 +501,3 @@ console.log(import_chalk3.default.cyan("\u{1F4CA} VoltAgent MCP Status\n")); | ||
| } | ||
| __name(statusMCP, "statusMCP"); | ||
| async function removeMCP() { | ||
@@ -535,2 +536,3 @@ console.log(import_chalk3.default.cyan("\u{1F5D1}\uFE0F VoltAgent MCP Removal\n")); | ||
| } | ||
| __name(removeMCP, "removeMCP"); | ||
| function registerMCPCommand(program) { | ||
@@ -554,2 +556,3 @@ const mcpCommand = program.command("mcp").description("VoltAgent MCP Docs Server management"); | ||
| } | ||
| __name(registerMCPCommand, "registerMCPCommand"); | ||
@@ -563,3 +566,3 @@ // src/commands/update.ts | ||
| var import_ora2 = __toESM(require("ora")); | ||
| var checkForUpdates = async (packagePath, options) => { | ||
| var checkForUpdates = /* @__PURE__ */ __name(async (packagePath, options) => { | ||
| try { | ||
@@ -609,4 +612,4 @@ const rootDir = packagePath ? import_node_path3.default.dirname(packagePath) : process.cwd(); | ||
| } | ||
| }; | ||
| var interactiveUpdate = async (updates, packagePath) => { | ||
| }, "checkForUpdates"); | ||
| var interactiveUpdate = /* @__PURE__ */ __name(async (updates, packagePath) => { | ||
| const rootDir = packagePath ? import_node_path3.default.dirname(packagePath) : process.cwd(); | ||
@@ -650,4 +653,4 @@ const packageJsonPath = packagePath || import_node_path3.default.join(rootDir, "package.json"); | ||
| } | ||
| }; | ||
| var getCurrentVersion = (packageName, packageJsonPath) => { | ||
| }, "interactiveUpdate"); | ||
| var getCurrentVersion = /* @__PURE__ */ __name((packageName, packageJsonPath) => { | ||
| try { | ||
@@ -669,4 +672,4 @@ const packageJson = JSON.parse(import_node_fs3.default.readFileSync(packageJsonPath, "utf8")); | ||
| } | ||
| }; | ||
| var registerUpdateCommand = (program) => { | ||
| }, "getCurrentVersion"); | ||
| var registerUpdateCommand = /* @__PURE__ */ __name((program) => { | ||
| program.command("update").description("Interactive update for VoltAgent packages").option("--apply", "Apply updates without interactive mode").action(async (options) => { | ||
@@ -719,3 +722,3 @@ try { | ||
| }); | ||
| }; | ||
| }, "registerUpdateCommand"); | ||
@@ -727,3 +730,3 @@ // src/commands/whoami.ts | ||
| var import_chalk5 = __toESM(require("chalk")); | ||
| var registerWhoamiCommand = (program) => { | ||
| var registerWhoamiCommand = /* @__PURE__ */ __name((program) => { | ||
| program.command("whoami").description("Display system and user information").action(async () => { | ||
@@ -772,6 +775,6 @@ try { | ||
| }); | ||
| }; | ||
| }, "registerWhoamiCommand"); | ||
| // src/index.ts | ||
| var createCLI = () => { | ||
| var createCLI = /* @__PURE__ */ __name(() => { | ||
| const program = new import_commander.Command(); | ||
@@ -785,4 +788,4 @@ program.name("voltagent").description("VoltAgent CLI - CLI tool for update checks").version("0.1.0"); | ||
| return program; | ||
| }; | ||
| var runCLI = async () => { | ||
| }, "createCLI"); | ||
| var runCLI = /* @__PURE__ */ __name(async () => { | ||
| try { | ||
@@ -812,3 +815,3 @@ console.log( | ||
| } | ||
| }; | ||
| }, "runCLI"); | ||
| runCLI().catch((error) => { | ||
@@ -815,0 +818,0 @@ const errorMessage = error instanceof Error ? error.message : String(error); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/index.ts","../src/commands/add.ts","../src/utils/analytics.ts","../src/commands/init.ts","../src/commands/mcp.ts","../src/commands/update.ts","../src/commands/whoami.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport figlet from \"figlet\";\nimport { registerAddCommand } from \"./commands/add\";\nimport { registerInitCommand } from \"./commands/init\";\nimport { registerMCPCommand } from \"./commands/mcp\";\nimport { registerUpdateCommand } from \"./commands/update\";\nimport { registerWhoamiCommand } from \"./commands/whoami\";\nimport { captureError } from \"./utils/analytics\";\nimport posthogClient from \"./utils/analytics\";\n\nconst createCLI = () => {\n // Create Commander program\n const program = new Command();\n\n // Set CLI information\n program\n .name(\"voltagent\")\n .description(\"VoltAgent CLI - CLI tool for update checks\")\n .version(\"0.1.0\");\n\n // Register commands\n registerInitCommand(program);\n registerUpdateCommand(program);\n registerWhoamiCommand(program);\n registerAddCommand(program);\n registerMCPCommand(program);\n\n return program;\n};\n\nconst runCLI = async () => {\n try {\n // Welcome message\n console.log(\n chalk.cyan(\n figlet.textSync(\"VoltAgent CLI\", {\n font: \"Standard\",\n horizontalLayout: \"default\",\n verticalLayout: \"default\",\n }),\n ),\n );\n\n // Run CLI\n const program = createCLI();\n await program.parseAsync(process.argv);\n\n // Ensure PostHog events are sent before exiting\n await posthogClient.shutdown();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(\"An unexpected error occurred:\"));\n console.error(errorMessage);\n\n // Track unexpected error\n captureError({\n command: \"unknown\",\n errorMessage,\n });\n\n // Ensure PostHog events are sent before exiting with error\n await posthogClient.shutdown();\n process.exit(1);\n }\n};\n\n// Run\nrunCLI().catch((error) => {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(`Error: ${errorMessage}`);\n\n // Track error in the CLI runner\n captureError({\n command: \"cli_runner\",\n errorMessage,\n });\n\n // Shutdown PostHog client before exiting\n posthogClient.shutdown().then(() => {\n process.exit(1);\n });\n});\n\nexport { runCLI };\n","import chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport { captureError } from \"../utils/analytics\";\n\nexport const registerAddCommand = (program: Command) => {\n program\n .command(\"add <agent-slug>\")\n .description(\"Add a VoltAgent agent from the marketplace to your project.\")\n .action(async (agentSlug: string) => {\n try {\n console.log(\n chalk.yellow(\n `\\n🚧 The 'add' command is coming soon! This feature will allow you to easily integrate agents like '${agentSlug}' into your project.\\n`,\n ),\n );\n console.log(\n chalk.cyan(\"\\nWant to be among the first to try it out and shape its development?\\n\"),\n );\n console.log(\n chalk.cyan(\n `Join the discussion on GitHub and become an early user: ${chalk.underline(\n \"https://github.com/orgs/voltagent/discussions/74/\",\n )}\\n`,\n ),\n );\n console.log(chalk.gray(\"\\nWe appreciate your interest!\\n\"));\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(\"\\nAn unexpected error occurred:\"));\n console.error(errorMessage);\n\n captureError({\n command: \"add\",\n errorMessage,\n });\n\n // Ensure PostHog events are sent before exiting with error\n // Need to import posthogClient if you uncomment tracking above or want error tracking here\n // await posthogClient.shutdown();\n process.exit(1);\n }\n });\n};\n","import crypto from \"node:crypto\";\nimport os from \"node:os\";\nimport { PostHog } from \"posthog-node\";\nimport { v4 as uuidv4 } from \"uuid\";\n\n// Check if telemetry is disabled via environment variable\nconst isTelemetryDisabled = (): boolean => {\n return (\n process.env.VOLTAGENT_TELEMETRY_DISABLED === \"1\" ||\n process.env.VOLTAGENT_TELEMETRY_DISABLED === \"true\"\n );\n};\n\n// Initialize PostHog client\nconst client = new PostHog(\"phc_cLPjGbbZ9BdRtLG3cxoHNch3ZJnQvNhXCHRkeWUI6z5\", {\n host: \"https://us.i.posthog.com\",\n flushAt: 1,\n flushInterval: 0,\n disableGeoip: false,\n});\n\n// Generate a machine-specific but anonymous ID\nconst getMachineId = (): string => {\n try {\n // Create a hash from stable machine properties\n const hostname = os.hostname();\n const cpus = os.cpus().length;\n const platform = os.platform();\n const arch = os.arch();\n\n const dataToHash = `${hostname}-${cpus}-${platform}-${arch}`;\n return crypto.createHash(\"sha256\").update(dataToHash).digest(\"hex\").substring(0, 32);\n } catch {\n // Fallback to a random UUID if machine info isn't accessible\n return uuidv4();\n }\n};\n\n// Get OS info for analytics with fallback\nconst getOSInfo = () => {\n try {\n return {\n os_platform: os.platform(),\n os_release: os.release(),\n os_version: os.version(),\n os_arch: os.arch(),\n };\n } catch {\n // Fallback to minimal info if OS info isn't accessible due to security restrictions\n return {\n os_platform: \"unknown\",\n os_release: \"unknown\",\n os_version: \"unknown\",\n os_arch: \"unknown\",\n };\n }\n};\n\n// Function to capture CLI initialization events\nexport const captureInitEvent = (options: { packageManager: string }) => {\n // Skip if telemetry is disabled\n if (isTelemetryDisabled()) return;\n\n client.capture({\n distinctId: getMachineId(),\n event: \"cli_init\",\n properties: {\n package_manager: options.packageManager,\n machine_id: getMachineId(),\n ...getOSInfo(),\n },\n });\n};\n\n// Function to capture CLI update check events\nexport const captureUpdateEvent = (options: { hadUpdates: boolean }) => {\n // Skip if telemetry is disabled\n if (isTelemetryDisabled()) return;\n\n client.capture({\n distinctId: getMachineId(),\n event: \"cli_update_check\",\n properties: {\n had_updates: options.hadUpdates,\n machine_id: getMachineId(),\n ...getOSInfo(),\n },\n });\n};\n\n// Function to capture error events\nexport const captureError = (options: { command: string; errorMessage: string }) => {\n // Skip if telemetry is disabled\n if (isTelemetryDisabled()) return;\n\n client.capture({\n distinctId: getMachineId(),\n event: \"cli_error\",\n properties: {\n command: options.command,\n error_message: options.errorMessage,\n machine_id: getMachineId(),\n ...getOSInfo(),\n },\n });\n};\n\n// Function to capture whoami command events\nexport const captureWhoamiEvent = (options: { numVoltPackages: number }) => {\n // Skip if telemetry is disabled\n if (isTelemetryDisabled()) return;\n\n client.capture({\n distinctId: getMachineId(),\n event: \"cli_whoami\",\n properties: {\n num_volt_packages: options.numVoltPackages,\n machine_id: getMachineId(),\n ...getOSInfo(),\n },\n });\n};\n\nexport default client;\n","import { execSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport { captureError, captureInitEvent } from \"../utils/analytics\";\n\nexport const registerInitCommand = (program: Command): void => {\n program\n .command(\"init\")\n .description(\"Integrate VoltAgent CLI into a project\")\n .action(async () => {\n try {\n console.log(chalk.cyan(\"Integrating VoltAgent CLI into your project...\"));\n\n // Check for package.json file\n const packageJsonPath = path.join(process.cwd(), \"package.json\");\n if (!fs.existsSync(packageJsonPath)) {\n console.error(\n chalk.red(\n \"Error: package.json file not found. This command must be run inside a Node.js project.\",\n ),\n );\n process.exit(1);\n }\n\n // Read package.json file\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n\n // Get existing scripts\n const scripts = packageJson.scripts || {};\n\n // Detect package manager\n let packageManager = \"npm\";\n try {\n // Check if pnpm is being used\n if (fs.existsSync(path.join(process.cwd(), \"pnpm-lock.yaml\"))) {\n packageManager = \"pnpm\";\n } else if (fs.existsSync(path.join(process.cwd(), \"yarn.lock\"))) {\n packageManager = \"yarn\";\n }\n } catch {\n // Default to npm if detection fails\n packageManager = \"npm\";\n }\n\n console.log(chalk.blue(`Detected package manager: ${packageManager}`));\n\n // Add \"volt\" script to package.json\n let modified = false;\n if (!scripts.volt || scripts.volt !== \"volt\") {\n scripts.volt = \"volt\";\n modified = true;\n }\n\n if (!modified) {\n console.log(chalk.yellow(\"No changes made. The 'volt' script is already configured.\"));\n } else {\n // Update package.json file\n packageJson.scripts = scripts;\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));\n console.log(chalk.green(\"✓ Added 'volt' script to package.json\"));\n }\n\n // Check if @voltagent/cli is installed locally and install if needed\n let isPackageInstalled = false;\n try {\n // Check if the package exists in node_modules\n fs.accessSync(\n path.join(process.cwd(), \"node_modules\", \"@voltagent\", \"cli\"),\n fs.constants.F_OK,\n );\n isPackageInstalled = true;\n } catch {\n // Package is not installed\n isPackageInstalled = false;\n }\n\n if (!isPackageInstalled) {\n console.log(chalk.cyan(\"Installing @voltagent/cli locally...\"));\n try {\n const installCommand =\n packageManager === \"yarn\"\n ? \"yarn add @voltagent/cli --dev\"\n : packageManager === \"pnpm\"\n ? \"pnpm add @voltagent/cli --save-dev\"\n : \"npm install @voltagent/cli --save-dev\";\n\n execSync(installCommand, { stdio: \"inherit\" });\n console.log(chalk.green(\"✓ @voltagent/cli successfully installed!\"));\n } catch (error) {\n console.error(\n chalk.red(\"Failed to install @voltagent/cli:\"),\n error instanceof Error ? error.message : String(error),\n );\n }\n }\n\n // Create .voltagent directory\n const voltagentDir = path.join(process.cwd(), \".voltagent\");\n if (!fs.existsSync(voltagentDir)) {\n fs.mkdirSync(voltagentDir);\n }\n\n console.log(chalk.green(\"✓ VoltAgent CLI successfully integrated!\"));\n\n console.log(\"\\n\", chalk.cyan(\"To run VoltAgent:\"), chalk.green(\"npm run volt\"));\n\n // Track init event\n captureInitEvent({\n packageManager,\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(\"Error:\"), errorMessage);\n\n // Track error event\n captureError({\n command: \"init\",\n errorMessage,\n });\n\n process.exit(1);\n }\n });\n};\n","import chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport inquirer from \"inquirer\";\nimport ora from \"ora\";\nimport { captureError } from \"../utils/analytics\";\n\ntype IDEType = \"cursor\" | \"windsurf\" | \"vscode\" | \"none\";\n\nconst isWindows = process.platform === \"win32\";\n\nfunction createMCPConfig(ide: IDEType, projectRoot: string): void {\n if (ide === \"none\") return;\n\n const configs = {\n cursor: {\n dir: \".cursor\",\n file: \"mcp.json\",\n content: {\n mcpServers: {\n voltagent: {\n command: \"npx\",\n args: [\"-y\", \"@voltagent/docs-mcp\"],\n },\n },\n },\n },\n windsurf: {\n dir: \".windsurf\",\n file: \"mcp.json\",\n content: {\n mcpServers: {\n voltagent: {\n command: \"npx\",\n args: [\"-y\", \"@voltagent/docs-mcp\"],\n },\n },\n },\n },\n vscode: {\n dir: \".vscode\",\n file: \"mcp.json\",\n content: isWindows\n ? {\n servers: {\n voltagent: {\n command: \"cmd\",\n args: [\"/c\", \"npx\", \"-y\", \"@voltagent/docs-mcp\"],\n type: \"stdio\",\n },\n },\n }\n : {\n servers: {\n voltagent: {\n command: \"npx\",\n args: [\"-y\", \"@voltagent/docs-mcp\"],\n type: \"stdio\",\n },\n },\n },\n },\n };\n\n const config = configs[ide];\n const configDir = path.join(projectRoot, config.dir);\n const configFile = path.join(configDir, config.file);\n\n if (!fs.existsSync(configDir)) {\n fs.mkdirSync(configDir, { recursive: true });\n }\n\n fs.writeFileSync(configFile, JSON.stringify(config.content, null, 2));\n}\n\nfunction checkExistingConfig(projectRoot: string): {\n hasConfig: boolean;\n configuredIDE?: IDEType;\n configPath?: string;\n} {\n const possibleConfigs = [\n { ide: \"cursor\" as IDEType, path: path.join(projectRoot, \".cursor\", \"mcp.json\") },\n { ide: \"windsurf\" as IDEType, path: path.join(projectRoot, \".windsurf\", \"mcp.json\") },\n { ide: \"vscode\" as IDEType, path: path.join(projectRoot, \".vscode\", \"mcp.json\") },\n ];\n\n for (const config of possibleConfigs) {\n if (fs.existsSync(config.path)) {\n try {\n const content = fs.readFileSync(config.path, \"utf-8\");\n const parsed = JSON.parse(content);\n\n const hasVoltAgentDocs =\n parsed.mcpServers?.[\"voltagent-docs\"] || parsed.servers?.[\"voltagent-docs\"];\n\n if (hasVoltAgentDocs) {\n return {\n hasConfig: true,\n configuredIDE: config.ide,\n configPath: config.path,\n };\n }\n } catch {\n // Continue on JSON parse error\n }\n }\n }\n\n return { hasConfig: false };\n}\n\nasync function setupMCP(options: { force?: boolean } = {}) {\n const projectRoot = process.cwd();\n\n console.log(chalk.cyan(\"🔧 VoltAgent MCP Docs Server Setup\\n\"));\n\n try {\n const existingConfig = checkExistingConfig(projectRoot);\n\n if (existingConfig.hasConfig && !options.force) {\n console.log(\n chalk.yellow(`⚠️ MCP already seems to be installed (${existingConfig.configuredIDE})`),\n );\n console.log(chalk.gray(` Location: ${existingConfig.configPath}\\n`));\n\n const shouldContinue = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"continue\",\n message: \"Do you want to reinstall the setup?\",\n default: false,\n },\n ]);\n\n if (!shouldContinue.continue) {\n console.log(chalk.gray(\"Setup cancelled.\"));\n return;\n }\n }\n\n const ideChoice = await inquirer.prompt([\n {\n type: \"list\",\n name: \"ide\",\n message: \"Which IDE are you using?\",\n choices: [\n { name: \"Cursor\", value: \"cursor\" },\n { name: \"Windsurf\", value: \"windsurf\" },\n { name: \"VS Code\", value: \"vscode\" },\n { name: \"None (manual setup)\", value: \"none\" },\n ],\n },\n ]);\n\n const ide = ideChoice.ide as IDEType;\n\n if (ide === \"none\") {\n console.log(chalk.yellow(\"\\n📖 Manual setup selected.\"));\n console.log(chalk.gray(\"You will need to configure the MCP server manually.\"));\n console.log(\n chalk.blue(\"For details: https://voltagent.dev/docs/getting-started/mcp-docs-server\\n\"),\n );\n return;\n }\n\n const spinner = ora(\"Creating MCP configuration...\").start();\n\n try {\n createMCPConfig(ide, projectRoot);\n spinner.succeed(chalk.green(`✅ MCP configuration created for ${ide}!`));\n\n console.log(chalk.cyan(\"\\n📁 Created files:\"));\n const configPath = path.join(`.${ide}`, \"mcp.json\");\n console.log(chalk.gray(` ${configPath}`));\n\n console.log(chalk.cyan(\"\\n🚀 Next steps:\"));\n console.log(\n chalk.white(\n ` 1. Restart ${ide === \"cursor\" ? \"Cursor\" : ide === \"windsurf\" ? \"Windsurf\" : \"VS Code\"}`,\n ),\n );\n console.log(chalk.white(\" 2. Ask your AI assistant questions about VoltAgent\"));\n console.log(chalk.gray(' Example: \"How do I create an agent in VoltAgent?\"'));\n } catch (error) {\n spinner.fail(chalk.red(\"Failed to create MCP configuration\"));\n throw error;\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(`\\n❌ Error: ${errorMessage}`));\n\n captureError({\n command: \"mcp_setup\",\n errorMessage,\n });\n\n process.exit(1);\n }\n}\n\nasync function testMCP() {\n console.log(chalk.cyan(\"🧪 Testing VoltAgent MCP Connection\\n\"));\n\n const projectRoot = process.cwd();\n const existingConfig = checkExistingConfig(projectRoot);\n\n if (!existingConfig.hasConfig) {\n console.log(chalk.red(\"❌ MCP configuration not found.\"));\n console.log(chalk.gray(\"Please run 'volt mcp setup' first.\\n\"));\n return;\n }\n\n console.log(chalk.green(`✅ MCP configuration found (${existingConfig.configuredIDE})`));\n console.log(chalk.gray(` Location: ${existingConfig.configPath}`));\n\n console.log(chalk.cyan(\"\\n📋 Test suggestions:\"));\n console.log(chalk.white(\" You can ask your AI assistant these questions:\"));\n console.log(chalk.gray(' • \"How do I create an agent in VoltAgent?\"'));\n console.log(chalk.gray(' • \"Is there a VoltAgent example with Next.js?\"'));\n console.log(chalk.gray(' • \"How do I use voice features?\"'));\n console.log(chalk.gray(' • \"What are the latest updates?\"'));\n\n console.log(chalk.cyan(\"\\n🔧 Having issues?\"));\n console.log(\n chalk.white(\n ` 1. Restart ${existingConfig.configuredIDE === \"cursor\" ? \"Cursor\" : existingConfig.configuredIDE === \"windsurf\" ? \"Windsurf\" : \"VS Code\"}`,\n ),\n );\n console.log(chalk.white(\" 2. Check MCP settings\"));\n console.log(\n chalk.blue(\" 3. For help: https://voltagent.dev/docs/getting-started/mcp-docs-server\"),\n );\n}\n\nasync function statusMCP() {\n console.log(chalk.cyan(\"📊 VoltAgent MCP Status\\n\"));\n\n const projectRoot = process.cwd();\n const existingConfig = checkExistingConfig(projectRoot);\n\n if (!existingConfig.hasConfig) {\n console.log(chalk.red(\"❌ MCP configuration not found\"));\n console.log(chalk.gray(\"MCP appears to not be installed yet.\\n\"));\n console.log(chalk.blue(\"To install: volt mcp setup\"));\n return;\n }\n\n console.log(chalk.green(\"✅ MCP configuration active\"));\n console.log(chalk.gray(` IDE: ${existingConfig.configuredIDE}`));\n console.log(chalk.gray(` File: ${existingConfig.configPath}`));\n\n if (existingConfig.configPath) {\n try {\n const content = fs.readFileSync(existingConfig.configPath, \"utf-8\");\n const config = JSON.parse(content);\n\n console.log(chalk.cyan(\"\\n📋 Configuration details:\"));\n console.log(chalk.gray(JSON.stringify(config, null, 2)));\n } catch {\n console.log(chalk.yellow(\"⚠️ Configuration file could not be read\"));\n }\n }\n}\n\nasync function removeMCP() {\n console.log(chalk.cyan(\"🗑️ VoltAgent MCP Removal\\n\"));\n\n const projectRoot = process.cwd();\n const existingConfig = checkExistingConfig(projectRoot);\n\n if (!existingConfig.hasConfig) {\n console.log(chalk.yellow(\"⚠️ MCP configuration not found\"));\n console.log(chalk.gray(\"It may have already been removed.\\n\"));\n return;\n }\n\n console.log(chalk.yellow(`MCP configuration found (${existingConfig.configuredIDE})`));\n console.log(chalk.gray(`Location: ${existingConfig.configPath}`));\n\n const shouldRemove = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"remove\",\n message: \"Are you sure you want to remove the MCP configuration?\",\n default: false,\n },\n ]);\n\n if (!shouldRemove.remove) {\n console.log(chalk.gray(\"Operation cancelled.\"));\n return;\n }\n\n if (existingConfig.configPath) {\n try {\n fs.unlinkSync(existingConfig.configPath);\n console.log(chalk.green(\"✅ MCP configuration removed\"));\n } catch (error) {\n console.log(chalk.red(\"❌ Failed to remove MCP configuration\"));\n console.error(error);\n }\n }\n}\n\nexport function registerMCPCommand(program: Command): void {\n const mcpCommand = program.command(\"mcp\").description(\"VoltAgent MCP Docs Server management\");\n\n mcpCommand\n .command(\"setup\")\n .description(\"MCP Docs Server setup\")\n .option(\"-f, --force\", \"Overwrite existing configuration\")\n .action(async (options) => {\n await setupMCP(options);\n });\n\n mcpCommand\n .command(\"test\")\n .description(\"Test MCP connection\")\n .action(async () => {\n await testMCP();\n });\n\n mcpCommand\n .command(\"status\")\n .description(\"Show MCP status\")\n .action(async () => {\n await statusMCP();\n });\n\n mcpCommand\n .command(\"remove\")\n .description(\"Remove MCP configuration\")\n .action(async () => {\n await removeMCP();\n });\n\n mcpCommand.action(async () => {\n await setupMCP();\n });\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport inquirer from \"inquirer\";\nimport * as ncuPackage from \"npm-check-updates\";\nimport ora from \"ora\";\nimport { captureError, captureUpdateEvent } from \"../utils/analytics\";\n\n// Not directly importing from @voltagent/core due to potential circular dependencies\n// instead, we'll implement a simpler version here\ntype UpdateResult = {\n hasUpdates: boolean;\n updates: Record<string, string>;\n count: number;\n message: string;\n};\n\n/**\n * Simple version of checkForUpdates that uses npm-check-updates API\n */\nconst checkForUpdates = async (\n packagePath?: string,\n options?: { filter?: string },\n): Promise<UpdateResult> => {\n try {\n // Find package.json path\n const rootDir = packagePath ? path.dirname(packagePath) : process.cwd();\n const packageJsonPath = packagePath || path.join(rootDir, \"package.json\");\n\n // Check if package.json exists\n if (!fs.existsSync(packageJsonPath)) {\n return {\n hasUpdates: false,\n updates: {},\n count: 0,\n message: \"Could not find package.json\",\n };\n }\n\n // Use ncu API instead of CLI\n const result = await ncuPackage.default({\n packageFile: packageJsonPath,\n silent: true,\n jsonUpgraded: true,\n filter: options?.filter,\n });\n\n // Process results\n const updates = result as Record<string, string>;\n const count = Object.keys(updates).length;\n\n if (count > 0) {\n const updatesList = Object.entries(updates)\n .map(([name, version]) => ` - ${name} → ${version}`)\n .join(\"\\n\");\n\n return {\n hasUpdates: true,\n updates,\n count,\n message: `Found ${count} outdated packages:\\n${updatesList}`,\n };\n }\n return {\n hasUpdates: false,\n updates: {},\n count: 0,\n message: \"All packages are up to date\",\n };\n } catch (error) {\n console.error(\"Error checking for updates:\", error);\n return {\n hasUpdates: false,\n updates: {},\n count: 0,\n message: `Error checking for updates: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n};\n\n/**\n * Custom interactive updater using inquirer\n */\nconst interactiveUpdate = async (\n updates: Record<string, string>,\n packagePath?: string,\n): Promise<void> => {\n // Get package.json\n const rootDir = packagePath ? path.dirname(packagePath) : process.cwd();\n const packageJsonPath = packagePath || path.join(rootDir, \"package.json\");\n\n // Prepare choices for inquirer\n const choices = Object.entries(updates).map(([name, version]) => {\n return {\n name: `${chalk.cyan(name)}: ${chalk.gray(getCurrentVersion(name, packageJsonPath))} → ${chalk.green(version)}`,\n value: name,\n short: name,\n };\n });\n\n // Ask user which packages to update\n const { selectedPackages } = await inquirer.prompt([\n {\n type: \"checkbox\",\n name: \"selectedPackages\",\n message: \"Select packages to update:\",\n choices: choices,\n pageSize: 15,\n default: choices.map((c) => c.value), // Default select all\n },\n ]);\n\n if (selectedPackages.length === 0) {\n console.log(chalk.yellow(\"No packages selected for update.\"));\n return;\n }\n\n // Create filter for selected packages only\n const selectedFilter = selectedPackages.join(\" \");\n\n console.log(chalk.cyan(\"\\nApplying updates for selected packages...\"));\n\n try {\n // Use ncu API to apply updates for selected packages\n await ncuPackage.default({\n packageFile: packageJsonPath,\n upgrade: true,\n filter: selectedFilter,\n });\n\n console.log(chalk.green(`✓ Updated ${selectedPackages.length} packages in package.json`));\n console.log(chalk.green(\"Run 'npm install' to install updated packages\"));\n } catch (error) {\n console.error(chalk.red(\"Error applying updates:\"));\n console.error(error instanceof Error ? error.message : String(error));\n }\n};\n\n/**\n * Get current version of a package from package.json\n */\nconst getCurrentVersion = (packageName: string, packageJsonPath: string): string => {\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\"));\n\n // Check in different dependency sections\n for (const section of [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n \"optionalDependencies\",\n ]) {\n if (packageJson[section]?.[packageName]) {\n return packageJson[section][packageName];\n }\n }\n\n return \"unknown\";\n } catch {\n return \"unknown\";\n }\n};\n\n/**\n * Register the update command to the CLI program\n */\nexport const registerUpdateCommand = (program: Command): void => {\n program\n .command(\"update\")\n .description(\"Interactive update for VoltAgent packages\")\n .option(\"--apply\", \"Apply updates without interactive mode\")\n .action(async (options) => {\n try {\n // Initialize spinner\n const spinner = ora(\"Checking for updates...\").start();\n\n // Check for updates using our utility\n const filter = \"@voltagent*\";\n const updates = await checkForUpdates(undefined, { filter });\n\n spinner.stop();\n\n // Track update check event\n captureUpdateEvent({\n hadUpdates: updates.hasUpdates,\n });\n\n if (!updates.hasUpdates) {\n console.log(chalk.green(\"✓ All VoltAgent packages are up to date\"));\n return;\n }\n\n // Show found updates\n console.log(chalk.yellow(`Found ${updates.count} outdated VoltAgent packages:`));\n Object.entries(updates.updates).forEach(([name, version]) => {\n console.log(` ${chalk.cyan(name)}: ${chalk.gray(\"→\")} ${chalk.green(version)}`);\n });\n\n // Apply updates directly if --apply flag is used\n if (options.apply) {\n console.log(chalk.cyan(\"\\nApplying updates...\"));\n\n try {\n // Use ncu API to apply updates\n await ncuPackage.default({\n packageFile: path.join(process.cwd(), \"package.json\"),\n upgrade: true,\n filter: filter,\n });\n\n console.log(chalk.green(\"✓ Updates applied to package.json\"));\n console.log(chalk.green(\"Run 'npm install' to install updated packages\"));\n return;\n } catch (error) {\n console.error(chalk.red(\"Error applying updates:\"));\n console.error(error instanceof Error ? error.message : String(error));\n return;\n }\n }\n\n // Use our custom interactive update\n console.log(); // Empty line\n console.log(chalk.cyan(\"Starting interactive update...\"));\n\n await interactiveUpdate(updates.updates);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(\"Error checking for updates:\"));\n console.error(errorMessage);\n\n // Track error event\n captureError({\n command: \"update\",\n errorMessage,\n });\n }\n });\n};\n","import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport { captureError, captureWhoamiEvent } from \"../utils/analytics\";\n\nexport const registerWhoamiCommand = (program: Command): void => {\n program\n .command(\"whoami\")\n .description(\"Display system and user information\")\n .action(async () => {\n try {\n console.log(chalk.cyan(\"System and User Information:\"));\n console.log(chalk.blue(`Username: ${os.userInfo().username}`));\n console.log(chalk.blue(`Hostname: ${os.hostname()}`));\n console.log(chalk.blue(`Platform: ${os.platform()}`));\n console.log(chalk.blue(`OS: ${os.type()} ${os.release()}`));\n console.log(chalk.blue(`Architecture: ${os.arch()}`));\n console.log(chalk.blue(`Home Directory: ${os.homedir()}`));\n\n // List installed voltagent packages\n console.log(chalk.cyan(\"\\nInstalled VoltAgent Packages:\"));\n\n let numVoltPackages = 0;\n const packageJsonPath = path.join(process.cwd(), \"package.json\");\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n const dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n const voltagentPackages = Object.entries(dependencies || {})\n .filter(([name]) => name.includes(\"voltagent\"))\n .map(([name, version]) => ({ name, version }));\n\n numVoltPackages = voltagentPackages.length;\n\n if (voltagentPackages.length > 0) {\n voltagentPackages.forEach((pkg) => {\n console.log(chalk.blue(`${pkg.name}: ${pkg.version}`));\n });\n } else {\n console.log(chalk.yellow(\"No VoltAgent packages found in package.json\"));\n }\n } else {\n console.log(chalk.yellow(\"No package.json found in current directory\"));\n }\n\n // Track whoami event\n captureWhoamiEvent({\n numVoltPackages,\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(\"Error:\"), errorMessage);\n\n // Track error event\n captureError({\n command: \"whoami\",\n errorMessage,\n });\n\n process.exit(1);\n }\n });\n};\n"],"mappings":"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","names":["import_chalk","os","crypto","uuidv4","chalk","import_chalk","chalk","path","fs","import_chalk","import_node_fs","import_node_path","path","fs","chalk","inquirer","ora","import_node_fs","import_node_path","import_chalk","import_inquirer","import_ora","path","fs","chalk","inquirer","ora","import_node_fs","import_node_os","import_node_path","import_chalk","chalk","os","path","fs","chalk","figlet"]} | ||
| {"version":3,"sources":["../src/index.ts","../src/commands/add.ts","../src/utils/analytics.ts","../src/commands/init.ts","../src/commands/mcp.ts","../src/commands/update.ts","../src/commands/whoami.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport figlet from \"figlet\";\nimport { registerAddCommand } from \"./commands/add\";\nimport { registerInitCommand } from \"./commands/init\";\nimport { registerMCPCommand } from \"./commands/mcp\";\nimport { registerUpdateCommand } from \"./commands/update\";\nimport { registerWhoamiCommand } from \"./commands/whoami\";\nimport { captureError } from \"./utils/analytics\";\nimport posthogClient from \"./utils/analytics\";\n\nconst createCLI = () => {\n // Create Commander program\n const program = new Command();\n\n // Set CLI information\n program\n .name(\"voltagent\")\n .description(\"VoltAgent CLI - CLI tool for update checks\")\n .version(\"0.1.0\");\n\n // Register commands\n registerInitCommand(program);\n registerUpdateCommand(program);\n registerWhoamiCommand(program);\n registerAddCommand(program);\n registerMCPCommand(program);\n\n return program;\n};\n\nconst runCLI = async () => {\n try {\n // Welcome message\n console.log(\n chalk.cyan(\n figlet.textSync(\"VoltAgent CLI\", {\n font: \"Standard\",\n horizontalLayout: \"default\",\n verticalLayout: \"default\",\n }),\n ),\n );\n\n // Run CLI\n const program = createCLI();\n await program.parseAsync(process.argv);\n\n // Ensure PostHog events are sent before exiting\n await posthogClient.shutdown();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(\"An unexpected error occurred:\"));\n console.error(errorMessage);\n\n // Track unexpected error\n captureError({\n command: \"unknown\",\n errorMessage,\n });\n\n // Ensure PostHog events are sent before exiting with error\n await posthogClient.shutdown();\n process.exit(1);\n }\n};\n\n// Run\nrunCLI().catch((error) => {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(`Error: ${errorMessage}`);\n\n // Track error in the CLI runner\n captureError({\n command: \"cli_runner\",\n errorMessage,\n });\n\n // Shutdown PostHog client before exiting\n posthogClient.shutdown().then(() => {\n process.exit(1);\n });\n});\n\nexport { runCLI };\n","import chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport { captureError } from \"../utils/analytics\";\n\nexport const registerAddCommand = (program: Command) => {\n program\n .command(\"add <agent-slug>\")\n .description(\"Add a VoltAgent agent from the marketplace to your project.\")\n .action(async (agentSlug: string) => {\n try {\n console.log(\n chalk.yellow(\n `\\n🚧 The 'add' command is coming soon! This feature will allow you to easily integrate agents like '${agentSlug}' into your project.\\n`,\n ),\n );\n console.log(\n chalk.cyan(\"\\nWant to be among the first to try it out and shape its development?\\n\"),\n );\n console.log(\n chalk.cyan(\n `Join the discussion on GitHub and become an early user: ${chalk.underline(\n \"https://github.com/orgs/voltagent/discussions/74/\",\n )}\\n`,\n ),\n );\n console.log(chalk.gray(\"\\nWe appreciate your interest!\\n\"));\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(\"\\nAn unexpected error occurred:\"));\n console.error(errorMessage);\n\n captureError({\n command: \"add\",\n errorMessage,\n });\n\n // Ensure PostHog events are sent before exiting with error\n // Need to import posthogClient if you uncomment tracking above or want error tracking here\n // await posthogClient.shutdown();\n process.exit(1);\n }\n });\n};\n","import crypto from \"node:crypto\";\nimport os from \"node:os\";\nimport { PostHog } from \"posthog-node\";\nimport { v4 as uuidv4 } from \"uuid\";\n\n// Check if telemetry is disabled via environment variable\nconst isTelemetryDisabled = (): boolean => {\n return (\n process.env.VOLTAGENT_TELEMETRY_DISABLED === \"1\" ||\n process.env.VOLTAGENT_TELEMETRY_DISABLED === \"true\"\n );\n};\n\n// Initialize PostHog client\nconst client = new PostHog(\"phc_cLPjGbbZ9BdRtLG3cxoHNch3ZJnQvNhXCHRkeWUI6z5\", {\n host: \"https://us.i.posthog.com\",\n flushAt: 1,\n flushInterval: 0,\n disableGeoip: false,\n});\n\n// Generate a machine-specific but anonymous ID\nconst getMachineId = (): string => {\n try {\n // Create a hash from stable machine properties\n const hostname = os.hostname();\n const cpus = os.cpus().length;\n const platform = os.platform();\n const arch = os.arch();\n\n const dataToHash = `${hostname}-${cpus}-${platform}-${arch}`;\n return crypto.createHash(\"sha256\").update(dataToHash).digest(\"hex\").substring(0, 32);\n } catch {\n // Fallback to a random UUID if machine info isn't accessible\n return uuidv4();\n }\n};\n\n// Get OS info for analytics with fallback\nconst getOSInfo = () => {\n try {\n return {\n os_platform: os.platform(),\n os_release: os.release(),\n os_version: os.version(),\n os_arch: os.arch(),\n };\n } catch {\n // Fallback to minimal info if OS info isn't accessible due to security restrictions\n return {\n os_platform: \"unknown\",\n os_release: \"unknown\",\n os_version: \"unknown\",\n os_arch: \"unknown\",\n };\n }\n};\n\n// Function to capture CLI initialization events\nexport const captureInitEvent = (options: { packageManager: string }) => {\n // Skip if telemetry is disabled\n if (isTelemetryDisabled()) return;\n\n client.capture({\n distinctId: getMachineId(),\n event: \"cli_init\",\n properties: {\n package_manager: options.packageManager,\n machine_id: getMachineId(),\n ...getOSInfo(),\n },\n });\n};\n\n// Function to capture CLI update check events\nexport const captureUpdateEvent = (options: { hadUpdates: boolean }) => {\n // Skip if telemetry is disabled\n if (isTelemetryDisabled()) return;\n\n client.capture({\n distinctId: getMachineId(),\n event: \"cli_update_check\",\n properties: {\n had_updates: options.hadUpdates,\n machine_id: getMachineId(),\n ...getOSInfo(),\n },\n });\n};\n\n// Function to capture error events\nexport const captureError = (options: { command: string; errorMessage: string }) => {\n // Skip if telemetry is disabled\n if (isTelemetryDisabled()) return;\n\n client.capture({\n distinctId: getMachineId(),\n event: \"cli_error\",\n properties: {\n command: options.command,\n error_message: options.errorMessage,\n machine_id: getMachineId(),\n ...getOSInfo(),\n },\n });\n};\n\n// Function to capture whoami command events\nexport const captureWhoamiEvent = (options: { numVoltPackages: number }) => {\n // Skip if telemetry is disabled\n if (isTelemetryDisabled()) return;\n\n client.capture({\n distinctId: getMachineId(),\n event: \"cli_whoami\",\n properties: {\n num_volt_packages: options.numVoltPackages,\n machine_id: getMachineId(),\n ...getOSInfo(),\n },\n });\n};\n\nexport default client;\n","import { execSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport { captureError, captureInitEvent } from \"../utils/analytics\";\n\nexport const registerInitCommand = (program: Command): void => {\n program\n .command(\"init\")\n .description(\"Integrate VoltAgent CLI into a project\")\n .action(async () => {\n try {\n console.log(chalk.cyan(\"Integrating VoltAgent CLI into your project...\"));\n\n // Check for package.json file\n const packageJsonPath = path.join(process.cwd(), \"package.json\");\n if (!fs.existsSync(packageJsonPath)) {\n console.error(\n chalk.red(\n \"Error: package.json file not found. This command must be run inside a Node.js project.\",\n ),\n );\n process.exit(1);\n }\n\n // Read package.json file\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n\n // Get existing scripts\n const scripts = packageJson.scripts || {};\n\n // Detect package manager\n let packageManager = \"npm\";\n try {\n // Check if pnpm is being used\n if (fs.existsSync(path.join(process.cwd(), \"pnpm-lock.yaml\"))) {\n packageManager = \"pnpm\";\n } else if (fs.existsSync(path.join(process.cwd(), \"yarn.lock\"))) {\n packageManager = \"yarn\";\n }\n } catch {\n // Default to npm if detection fails\n packageManager = \"npm\";\n }\n\n console.log(chalk.blue(`Detected package manager: ${packageManager}`));\n\n // Add \"volt\" script to package.json\n let modified = false;\n if (!scripts.volt || scripts.volt !== \"volt\") {\n scripts.volt = \"volt\";\n modified = true;\n }\n\n if (!modified) {\n console.log(chalk.yellow(\"No changes made. The 'volt' script is already configured.\"));\n } else {\n // Update package.json file\n packageJson.scripts = scripts;\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));\n console.log(chalk.green(\"✓ Added 'volt' script to package.json\"));\n }\n\n // Check if @voltagent/cli is installed locally and install if needed\n let isPackageInstalled = false;\n try {\n // Check if the package exists in node_modules\n fs.accessSync(\n path.join(process.cwd(), \"node_modules\", \"@voltagent\", \"cli\"),\n fs.constants.F_OK,\n );\n isPackageInstalled = true;\n } catch {\n // Package is not installed\n isPackageInstalled = false;\n }\n\n if (!isPackageInstalled) {\n console.log(chalk.cyan(\"Installing @voltagent/cli locally...\"));\n try {\n const installCommand =\n packageManager === \"yarn\"\n ? \"yarn add @voltagent/cli --dev\"\n : packageManager === \"pnpm\"\n ? \"pnpm add @voltagent/cli --save-dev\"\n : \"npm install @voltagent/cli --save-dev\";\n\n execSync(installCommand, { stdio: \"inherit\" });\n console.log(chalk.green(\"✓ @voltagent/cli successfully installed!\"));\n } catch (error) {\n console.error(\n chalk.red(\"Failed to install @voltagent/cli:\"),\n error instanceof Error ? error.message : String(error),\n );\n }\n }\n\n // Create .voltagent directory\n const voltagentDir = path.join(process.cwd(), \".voltagent\");\n if (!fs.existsSync(voltagentDir)) {\n fs.mkdirSync(voltagentDir);\n }\n\n console.log(chalk.green(\"✓ VoltAgent CLI successfully integrated!\"));\n\n console.log(\"\\n\", chalk.cyan(\"To run VoltAgent:\"), chalk.green(\"npm run volt\"));\n\n // Track init event\n captureInitEvent({\n packageManager,\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(\"Error:\"), errorMessage);\n\n // Track error event\n captureError({\n command: \"init\",\n errorMessage,\n });\n\n process.exit(1);\n }\n });\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport inquirer from \"inquirer\";\nimport ora from \"ora\";\nimport { captureError } from \"../utils/analytics\";\n\ntype IDEType = \"cursor\" | \"windsurf\" | \"vscode\" | \"none\";\n\nconst isWindows = process.platform === \"win32\";\n\nfunction createMCPConfig(ide: IDEType, projectRoot: string): void {\n if (ide === \"none\") return;\n\n const configs = {\n cursor: {\n dir: \".cursor\",\n file: \"mcp.json\",\n content: {\n mcpServers: {\n voltagent: {\n command: \"npx\",\n args: [\"-y\", \"@voltagent/docs-mcp\"],\n },\n },\n },\n },\n windsurf: {\n dir: \".windsurf\",\n file: \"mcp.json\",\n content: {\n mcpServers: {\n voltagent: {\n command: \"npx\",\n args: [\"-y\", \"@voltagent/docs-mcp\"],\n },\n },\n },\n },\n vscode: {\n dir: \".vscode\",\n file: \"mcp.json\",\n content: isWindows\n ? {\n servers: {\n voltagent: {\n command: \"cmd\",\n args: [\"/c\", \"npx\", \"-y\", \"@voltagent/docs-mcp\"],\n type: \"stdio\",\n },\n },\n }\n : {\n servers: {\n voltagent: {\n command: \"npx\",\n args: [\"-y\", \"@voltagent/docs-mcp\"],\n type: \"stdio\",\n },\n },\n },\n },\n };\n\n const config = configs[ide];\n const configDir = path.join(projectRoot, config.dir);\n const configFile = path.join(configDir, config.file);\n\n if (!fs.existsSync(configDir)) {\n fs.mkdirSync(configDir, { recursive: true });\n }\n\n fs.writeFileSync(configFile, JSON.stringify(config.content, null, 2));\n}\n\nfunction checkExistingConfig(projectRoot: string): {\n hasConfig: boolean;\n configuredIDE?: IDEType;\n configPath?: string;\n} {\n const possibleConfigs = [\n { ide: \"cursor\" as IDEType, path: path.join(projectRoot, \".cursor\", \"mcp.json\") },\n { ide: \"windsurf\" as IDEType, path: path.join(projectRoot, \".windsurf\", \"mcp.json\") },\n { ide: \"vscode\" as IDEType, path: path.join(projectRoot, \".vscode\", \"mcp.json\") },\n ];\n\n for (const config of possibleConfigs) {\n if (fs.existsSync(config.path)) {\n try {\n const content = fs.readFileSync(config.path, \"utf-8\");\n const parsed = JSON.parse(content);\n\n const hasVoltAgentDocs =\n parsed.mcpServers?.[\"voltagent-docs\"] || parsed.servers?.[\"voltagent-docs\"];\n\n if (hasVoltAgentDocs) {\n return {\n hasConfig: true,\n configuredIDE: config.ide,\n configPath: config.path,\n };\n }\n } catch {\n // Continue on JSON parse error\n }\n }\n }\n\n return { hasConfig: false };\n}\n\nasync function setupMCP(options: { force?: boolean } = {}) {\n const projectRoot = process.cwd();\n\n console.log(chalk.cyan(\"🔧 VoltAgent MCP Docs Server Setup\\n\"));\n\n try {\n const existingConfig = checkExistingConfig(projectRoot);\n\n if (existingConfig.hasConfig && !options.force) {\n console.log(\n chalk.yellow(`⚠️ MCP already seems to be installed (${existingConfig.configuredIDE})`),\n );\n console.log(chalk.gray(` Location: ${existingConfig.configPath}\\n`));\n\n const shouldContinue = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"continue\",\n message: \"Do you want to reinstall the setup?\",\n default: false,\n },\n ]);\n\n if (!shouldContinue.continue) {\n console.log(chalk.gray(\"Setup cancelled.\"));\n return;\n }\n }\n\n const ideChoice = await inquirer.prompt([\n {\n type: \"list\",\n name: \"ide\",\n message: \"Which IDE are you using?\",\n choices: [\n { name: \"Cursor\", value: \"cursor\" },\n { name: \"Windsurf\", value: \"windsurf\" },\n { name: \"VS Code\", value: \"vscode\" },\n { name: \"None (manual setup)\", value: \"none\" },\n ],\n },\n ]);\n\n const ide = ideChoice.ide as IDEType;\n\n if (ide === \"none\") {\n console.log(chalk.yellow(\"\\n📖 Manual setup selected.\"));\n console.log(chalk.gray(\"You will need to configure the MCP server manually.\"));\n console.log(\n chalk.blue(\"For details: https://voltagent.dev/docs/getting-started/mcp-docs-server\\n\"),\n );\n return;\n }\n\n const spinner = ora(\"Creating MCP configuration...\").start();\n\n try {\n createMCPConfig(ide, projectRoot);\n spinner.succeed(chalk.green(`✅ MCP configuration created for ${ide}!`));\n\n console.log(chalk.cyan(\"\\n📁 Created files:\"));\n const configPath = path.join(`.${ide}`, \"mcp.json\");\n console.log(chalk.gray(` ${configPath}`));\n\n console.log(chalk.cyan(\"\\n🚀 Next steps:\"));\n console.log(\n chalk.white(\n ` 1. Restart ${ide === \"cursor\" ? \"Cursor\" : ide === \"windsurf\" ? \"Windsurf\" : \"VS Code\"}`,\n ),\n );\n console.log(chalk.white(\" 2. Ask your AI assistant questions about VoltAgent\"));\n console.log(chalk.gray(' Example: \"How do I create an agent in VoltAgent?\"'));\n } catch (error) {\n spinner.fail(chalk.red(\"Failed to create MCP configuration\"));\n throw error;\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(`\\n❌ Error: ${errorMessage}`));\n\n captureError({\n command: \"mcp_setup\",\n errorMessage,\n });\n\n process.exit(1);\n }\n}\n\nasync function testMCP() {\n console.log(chalk.cyan(\"🧪 Testing VoltAgent MCP Connection\\n\"));\n\n const projectRoot = process.cwd();\n const existingConfig = checkExistingConfig(projectRoot);\n\n if (!existingConfig.hasConfig) {\n console.log(chalk.red(\"❌ MCP configuration not found.\"));\n console.log(chalk.gray(\"Please run 'volt mcp setup' first.\\n\"));\n return;\n }\n\n console.log(chalk.green(`✅ MCP configuration found (${existingConfig.configuredIDE})`));\n console.log(chalk.gray(` Location: ${existingConfig.configPath}`));\n\n console.log(chalk.cyan(\"\\n📋 Test suggestions:\"));\n console.log(chalk.white(\" You can ask your AI assistant these questions:\"));\n console.log(chalk.gray(' • \"How do I create an agent in VoltAgent?\"'));\n console.log(chalk.gray(' • \"Is there a VoltAgent example with Next.js?\"'));\n console.log(chalk.gray(' • \"How do I use voice features?\"'));\n console.log(chalk.gray(' • \"What are the latest updates?\"'));\n\n console.log(chalk.cyan(\"\\n🔧 Having issues?\"));\n console.log(\n chalk.white(\n ` 1. Restart ${existingConfig.configuredIDE === \"cursor\" ? \"Cursor\" : existingConfig.configuredIDE === \"windsurf\" ? \"Windsurf\" : \"VS Code\"}`,\n ),\n );\n console.log(chalk.white(\" 2. Check MCP settings\"));\n console.log(\n chalk.blue(\" 3. For help: https://voltagent.dev/docs/getting-started/mcp-docs-server\"),\n );\n}\n\nasync function statusMCP() {\n console.log(chalk.cyan(\"📊 VoltAgent MCP Status\\n\"));\n\n const projectRoot = process.cwd();\n const existingConfig = checkExistingConfig(projectRoot);\n\n if (!existingConfig.hasConfig) {\n console.log(chalk.red(\"❌ MCP configuration not found\"));\n console.log(chalk.gray(\"MCP appears to not be installed yet.\\n\"));\n console.log(chalk.blue(\"To install: volt mcp setup\"));\n return;\n }\n\n console.log(chalk.green(\"✅ MCP configuration active\"));\n console.log(chalk.gray(` IDE: ${existingConfig.configuredIDE}`));\n console.log(chalk.gray(` File: ${existingConfig.configPath}`));\n\n if (existingConfig.configPath) {\n try {\n const content = fs.readFileSync(existingConfig.configPath, \"utf-8\");\n const config = JSON.parse(content);\n\n console.log(chalk.cyan(\"\\n📋 Configuration details:\"));\n console.log(chalk.gray(JSON.stringify(config, null, 2)));\n } catch {\n console.log(chalk.yellow(\"⚠️ Configuration file could not be read\"));\n }\n }\n}\n\nasync function removeMCP() {\n console.log(chalk.cyan(\"🗑️ VoltAgent MCP Removal\\n\"));\n\n const projectRoot = process.cwd();\n const existingConfig = checkExistingConfig(projectRoot);\n\n if (!existingConfig.hasConfig) {\n console.log(chalk.yellow(\"⚠️ MCP configuration not found\"));\n console.log(chalk.gray(\"It may have already been removed.\\n\"));\n return;\n }\n\n console.log(chalk.yellow(`MCP configuration found (${existingConfig.configuredIDE})`));\n console.log(chalk.gray(`Location: ${existingConfig.configPath}`));\n\n const shouldRemove = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"remove\",\n message: \"Are you sure you want to remove the MCP configuration?\",\n default: false,\n },\n ]);\n\n if (!shouldRemove.remove) {\n console.log(chalk.gray(\"Operation cancelled.\"));\n return;\n }\n\n if (existingConfig.configPath) {\n try {\n fs.unlinkSync(existingConfig.configPath);\n console.log(chalk.green(\"✅ MCP configuration removed\"));\n } catch (error) {\n console.log(chalk.red(\"❌ Failed to remove MCP configuration\"));\n console.error(error);\n }\n }\n}\n\nexport function registerMCPCommand(program: Command): void {\n const mcpCommand = program.command(\"mcp\").description(\"VoltAgent MCP Docs Server management\");\n\n mcpCommand\n .command(\"setup\")\n .description(\"MCP Docs Server setup\")\n .option(\"-f, --force\", \"Overwrite existing configuration\")\n .action(async (options) => {\n await setupMCP(options);\n });\n\n mcpCommand\n .command(\"test\")\n .description(\"Test MCP connection\")\n .action(async () => {\n await testMCP();\n });\n\n mcpCommand\n .command(\"status\")\n .description(\"Show MCP status\")\n .action(async () => {\n await statusMCP();\n });\n\n mcpCommand\n .command(\"remove\")\n .description(\"Remove MCP configuration\")\n .action(async () => {\n await removeMCP();\n });\n\n mcpCommand.action(async () => {\n await setupMCP();\n });\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport inquirer from \"inquirer\";\nimport * as ncuPackage from \"npm-check-updates\";\nimport ora from \"ora\";\nimport { captureError, captureUpdateEvent } from \"../utils/analytics\";\n\n// Not directly importing from @voltagent/core due to potential circular dependencies\n// instead, we'll implement a simpler version here\ntype UpdateResult = {\n hasUpdates: boolean;\n updates: Record<string, string>;\n count: number;\n message: string;\n};\n\n/**\n * Simple version of checkForUpdates that uses npm-check-updates API\n */\nconst checkForUpdates = async (\n packagePath?: string,\n options?: { filter?: string },\n): Promise<UpdateResult> => {\n try {\n // Find package.json path\n const rootDir = packagePath ? path.dirname(packagePath) : process.cwd();\n const packageJsonPath = packagePath || path.join(rootDir, \"package.json\");\n\n // Check if package.json exists\n if (!fs.existsSync(packageJsonPath)) {\n return {\n hasUpdates: false,\n updates: {},\n count: 0,\n message: \"Could not find package.json\",\n };\n }\n\n // Use ncu API instead of CLI\n const result = await ncuPackage.default({\n packageFile: packageJsonPath,\n silent: true,\n jsonUpgraded: true,\n filter: options?.filter,\n });\n\n // Process results\n const updates = result as Record<string, string>;\n const count = Object.keys(updates).length;\n\n if (count > 0) {\n const updatesList = Object.entries(updates)\n .map(([name, version]) => ` - ${name} → ${version}`)\n .join(\"\\n\");\n\n return {\n hasUpdates: true,\n updates,\n count,\n message: `Found ${count} outdated packages:\\n${updatesList}`,\n };\n }\n return {\n hasUpdates: false,\n updates: {},\n count: 0,\n message: \"All packages are up to date\",\n };\n } catch (error) {\n console.error(\"Error checking for updates:\", error);\n return {\n hasUpdates: false,\n updates: {},\n count: 0,\n message: `Error checking for updates: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n};\n\n/**\n * Custom interactive updater using inquirer\n */\nconst interactiveUpdate = async (\n updates: Record<string, string>,\n packagePath?: string,\n): Promise<void> => {\n // Get package.json\n const rootDir = packagePath ? path.dirname(packagePath) : process.cwd();\n const packageJsonPath = packagePath || path.join(rootDir, \"package.json\");\n\n // Prepare choices for inquirer\n const choices = Object.entries(updates).map(([name, version]) => {\n return {\n name: `${chalk.cyan(name)}: ${chalk.gray(getCurrentVersion(name, packageJsonPath))} → ${chalk.green(version)}`,\n value: name,\n short: name,\n };\n });\n\n // Ask user which packages to update\n const { selectedPackages } = await inquirer.prompt([\n {\n type: \"checkbox\",\n name: \"selectedPackages\",\n message: \"Select packages to update:\",\n choices: choices,\n pageSize: 15,\n default: choices.map((c) => c.value), // Default select all\n },\n ]);\n\n if (selectedPackages.length === 0) {\n console.log(chalk.yellow(\"No packages selected for update.\"));\n return;\n }\n\n // Create filter for selected packages only\n const selectedFilter = selectedPackages.join(\" \");\n\n console.log(chalk.cyan(\"\\nApplying updates for selected packages...\"));\n\n try {\n // Use ncu API to apply updates for selected packages\n await ncuPackage.default({\n packageFile: packageJsonPath,\n upgrade: true,\n filter: selectedFilter,\n });\n\n console.log(chalk.green(`✓ Updated ${selectedPackages.length} packages in package.json`));\n console.log(chalk.green(\"Run 'npm install' to install updated packages\"));\n } catch (error) {\n console.error(chalk.red(\"Error applying updates:\"));\n console.error(error instanceof Error ? error.message : String(error));\n }\n};\n\n/**\n * Get current version of a package from package.json\n */\nconst getCurrentVersion = (packageName: string, packageJsonPath: string): string => {\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\"));\n\n // Check in different dependency sections\n for (const section of [\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n \"optionalDependencies\",\n ]) {\n if (packageJson[section]?.[packageName]) {\n return packageJson[section][packageName];\n }\n }\n\n return \"unknown\";\n } catch {\n return \"unknown\";\n }\n};\n\n/**\n * Register the update command to the CLI program\n */\nexport const registerUpdateCommand = (program: Command): void => {\n program\n .command(\"update\")\n .description(\"Interactive update for VoltAgent packages\")\n .option(\"--apply\", \"Apply updates without interactive mode\")\n .action(async (options) => {\n try {\n // Initialize spinner\n const spinner = ora(\"Checking for updates...\").start();\n\n // Check for updates using our utility\n const filter = \"@voltagent*\";\n const updates = await checkForUpdates(undefined, { filter });\n\n spinner.stop();\n\n // Track update check event\n captureUpdateEvent({\n hadUpdates: updates.hasUpdates,\n });\n\n if (!updates.hasUpdates) {\n console.log(chalk.green(\"✓ All VoltAgent packages are up to date\"));\n return;\n }\n\n // Show found updates\n console.log(chalk.yellow(`Found ${updates.count} outdated VoltAgent packages:`));\n Object.entries(updates.updates).forEach(([name, version]) => {\n console.log(` ${chalk.cyan(name)}: ${chalk.gray(\"→\")} ${chalk.green(version)}`);\n });\n\n // Apply updates directly if --apply flag is used\n if (options.apply) {\n console.log(chalk.cyan(\"\\nApplying updates...\"));\n\n try {\n // Use ncu API to apply updates\n await ncuPackage.default({\n packageFile: path.join(process.cwd(), \"package.json\"),\n upgrade: true,\n filter: filter,\n });\n\n console.log(chalk.green(\"✓ Updates applied to package.json\"));\n console.log(chalk.green(\"Run 'npm install' to install updated packages\"));\n return;\n } catch (error) {\n console.error(chalk.red(\"Error applying updates:\"));\n console.error(error instanceof Error ? error.message : String(error));\n return;\n }\n }\n\n // Use our custom interactive update\n console.log(); // Empty line\n console.log(chalk.cyan(\"Starting interactive update...\"));\n\n await interactiveUpdate(updates.updates);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(\"Error checking for updates:\"));\n console.error(errorMessage);\n\n // Track error event\n captureError({\n command: \"update\",\n errorMessage,\n });\n }\n });\n};\n","import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport { captureError, captureWhoamiEvent } from \"../utils/analytics\";\n\nexport const registerWhoamiCommand = (program: Command): void => {\n program\n .command(\"whoami\")\n .description(\"Display system and user information\")\n .action(async () => {\n try {\n console.log(chalk.cyan(\"System and User Information:\"));\n console.log(chalk.blue(`Username: ${os.userInfo().username}`));\n console.log(chalk.blue(`Hostname: ${os.hostname()}`));\n console.log(chalk.blue(`Platform: ${os.platform()}`));\n console.log(chalk.blue(`OS: ${os.type()} ${os.release()}`));\n console.log(chalk.blue(`Architecture: ${os.arch()}`));\n console.log(chalk.blue(`Home Directory: ${os.homedir()}`));\n\n // List installed voltagent packages\n console.log(chalk.cyan(\"\\nInstalled VoltAgent Packages:\"));\n\n let numVoltPackages = 0;\n const packageJsonPath = path.join(process.cwd(), \"package.json\");\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n const dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n const voltagentPackages = Object.entries(dependencies || {})\n .filter(([name]) => name.includes(\"voltagent\"))\n .map(([name, version]) => ({ name, version }));\n\n numVoltPackages = voltagentPackages.length;\n\n if (voltagentPackages.length > 0) {\n voltagentPackages.forEach((pkg) => {\n console.log(chalk.blue(`${pkg.name}: ${pkg.version}`));\n });\n } else {\n console.log(chalk.yellow(\"No VoltAgent packages found in package.json\"));\n }\n } else {\n console.log(chalk.yellow(\"No package.json found in current directory\"));\n }\n\n // Track whoami event\n captureWhoamiEvent({\n numVoltPackages,\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(\"Error:\"), errorMessage);\n\n // Track error event\n captureError({\n command: \"whoami\",\n errorMessage,\n });\n\n process.exit(1);\n }\n });\n};\n"],"mappings":"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","names":["import_chalk","os","crypto","uuidv4","chalk","import_chalk","chalk","path","fs","import_node_fs","import_node_path","import_chalk","path","fs","chalk","inquirer","ora","import_node_fs","import_node_path","import_chalk","import_inquirer","import_ora","path","fs","chalk","inquirer","ora","import_node_fs","import_node_os","import_node_path","import_chalk","chalk","os","path","fs","chalk","figlet"]} |
+19
-17
| { | ||
| "name": "@voltagent/cli", | ||
| "version": "0.1.9", | ||
| "description": "CLI tool for VoltAgent applications", | ||
| "keywords": [ | ||
| "voltagent", | ||
| "cli", | ||
| "agent" | ||
| ], | ||
| "license": "MIT", | ||
| "main": "dist/index.js", | ||
| "version": "0.1.10", | ||
| "bin": { | ||
| "volt": "dist/index.js" | ||
| }, | ||
| "files": [ | ||
| "dist" | ||
| ], | ||
| "dependencies": { | ||
@@ -38,10 +28,10 @@ "boxen": "^5.1.2", | ||
| "@types/inquirer": "^9.0.7", | ||
| "@types/node": "^20.19.0", | ||
| "@types/node": "^24.0.3", | ||
| "@types/semver": "^7.5.6", | ||
| "@types/update-notifier": "^6.0.8", | ||
| "@types/uuid": "^9.0.8", | ||
| "@vitest/coverage-v8": "^3.2.3", | ||
| "tsup": "^6.7.0", | ||
| "typescript": "^5.0.4", | ||
| "vitest": "^3.2.3" | ||
| "@types/uuid": "^10.0.0", | ||
| "@vitest/coverage-v8": "^3.2.4", | ||
| "tsup": "^8.5.0", | ||
| "typescript": "^5.8.2", | ||
| "vitest": "^3.2.4" | ||
| }, | ||
@@ -51,3 +41,14 @@ "engines": { | ||
| }, | ||
| "files": [ | ||
| "dist" | ||
| ], | ||
| "keywords": [ | ||
| "agent", | ||
| "cli", | ||
| "voltagent" | ||
| ], | ||
| "license": "MIT", | ||
| "main": "dist/index.js", | ||
| "scripts": { | ||
| "attw": "attw --pack", | ||
| "build": "tsup", | ||
@@ -57,2 +58,3 @@ "dev": "tsup --watch", | ||
| "lint:fix": "biome check . --write", | ||
| "publint": "publint --strict", | ||
| "start": "node dist/index.js", | ||
@@ -59,0 +61,0 @@ "test": "vitest", |
+1
-1
@@ -131,3 +131,3 @@ <div align="center"> | ||
| VoltOps Platform: https://console.voltagent.dev | ||
| Test your agents with VoltOps Console: https://console.voltagent.dev | ||
| ══════════════════════════════════════════════════ | ||
@@ -134,0 +134,0 @@ ``` |
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
96983
1.6%795
0.38%