New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

@voltagent/cli

Package Overview
Dependencies
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@voltagent/cli - npm Package Compare versions

Comparing version
0.1.10
to
0.1.11
+303
-143
dist/index.js

@@ -38,3 +38,3 @@ #!/usr/bin/env node

module.exports = __toCommonJS(index_exports);
var import_chalk6 = __toESM(require("chalk"));
var import_chalk7 = __toESM(require("chalk"));
var import_commander = require("commander");

@@ -176,15 +176,174 @@ var import_figlet = __toESM(require("figlet"));

// src/commands/deploy.ts
var import_node_fs = require("fs");
var import_node_path = __toESM(require("path"));
var import_chalk2 = __toESM(require("chalk"));
var import_inquirer = __toESM(require("inquirer"));
// src/templates/cloudflare-wrangler.toml
var cloudflare_wrangler_default = '# Generated by VoltAgent CLI\nname = "voltagent-worker"\nmain = "dist/index.js"\ncompatibility_date = "2025-01-01"\naccount_id = ""\nworkers_dev = true\ncompatibility_flags = [\n "nodejs_compat",\n "nodejs_compat_populate_process_env",\n "no_handle_cross_request_promise_resolution",\n]\n';
// src/templates/netlify.toml
var netlify_default = '# Generated by VoltAgent CLI\n[functions]\n node_bundler = "esbuild"\n\n[[edge_functions]]\n function = "voltagent"\n path = "/*"\n';
// src/templates/vercel.json.template
var vercel_json_default = '// Generated by VoltAgent CLI\n{\n "version": 3,\n "functions": {\n "api/voltagent.ts": {\n "runtime": "edge"\n }\n },\n "routes": [\n { "src": "/(.*)", "dest": "/api/voltagent.ts" }\n ]\n}\n';
// src/commands/deploy.ts
var SUPPORTED_TARGETS = ["cloudflare", "vercel", "netlify"];
var CLOUDFLARE_WRANGLER_TEMPLATE = cloudflare_wrangler_default;
var VERCEL_CONFIG_TEMPLATE = vercel_json_default;
var NETLIFY_CONFIG_TEMPLATE = netlify_default;
async function ensureFile(pathToFile, contents) {
try {
await import_node_fs.promises.access(pathToFile);
return false;
} catch {
await import_node_fs.promises.writeFile(pathToFile, contents, { encoding: "utf8" });
return true;
}
}
__name(ensureFile, "ensureFile");
async function handleCloudflareDeploy() {
const targetPath = import_node_path.default.join(process.cwd(), "wrangler.toml");
const created = await ensureFile(targetPath, CLOUDFLARE_WRANGLER_TEMPLATE);
if (created) {
console.log(import_chalk2.default.green(`
\u2705 Created wrangler.toml at ${targetPath}`));
} else {
console.log(
import_chalk2.default.yellow(`
\u26A0\uFE0F wrangler.toml already exists at ${targetPath}. No changes were made.`)
);
}
console.log("\nNext steps:");
console.log(' 1. Build your project: "pnpm build"');
console.log(' 2. Authenticate if needed: "pnpm wrangler login"');
console.log(' 3. Deploy: "pnpm wrangler deploy"');
console.log(
'\nNote: If you maintain multiple Cloudflare accounts or use KV/D1 bindings/routes, edit "wrangler.toml" to provide those values.'
);
console.log(
"Need help? Wrangler docs: https://developers.cloudflare.com/workers/wrangler/configuration/"
);
console.log("Join the VoltAgent Discord: https://s.voltagent.dev/discord\n");
}
__name(handleCloudflareDeploy, "handleCloudflareDeploy");
async function handleVercelDeploy() {
const targetPath = import_node_path.default.join(process.cwd(), "vercel.json");
const created = await ensureFile(targetPath, VERCEL_CONFIG_TEMPLATE);
if (created) {
console.log(import_chalk2.default.green(`
\u2705 Created vercel.json at ${targetPath}`));
} else {
console.log(
import_chalk2.default.yellow(`
\u26A0\uFE0F vercel.json already exists at ${targetPath}. No changes were made.`)
);
}
console.log("\nNext steps:");
console.log(' 1. Build your project: "pnpm build"');
console.log(
' 2. Ensure you have a serverless entry (example: api/voltagent.ts) that exports "voltAgent.serverless().toVercelEdge()".'
);
console.log(' 3. Authenticate if needed: "pnpm vercel login" (or "vercel login")');
console.log(' 4. Deploy: "pnpm vercel deploy" (or "vercel deploy")');
console.log(
"\nNote: Adjust vercel.json routes/functions if you use a different API path or need environment variables."
);
console.log("Need help? Vercel Edge docs: https://vercel.com/docs/functions/edge-functions");
console.log("Join the VoltAgent Discord: https://s.voltagent.dev/discord\n");
}
__name(handleVercelDeploy, "handleVercelDeploy");
async function handleNetlifyDeploy() {
const targetPath = import_node_path.default.join(process.cwd(), "netlify.toml");
const created = await ensureFile(targetPath, NETLIFY_CONFIG_TEMPLATE);
if (created) {
console.log(import_chalk2.default.green(`
\u2705 Created netlify.toml at ${targetPath}`));
} else {
console.log(
import_chalk2.default.yellow(`
\u26A0\uFE0F netlify.toml already exists at ${targetPath}. No changes were made.`)
);
}
console.log("\nNext steps:");
console.log(' 1. Build your project: "pnpm build"');
console.log(
' 2. Add a function file (example: netlify/functions/voltagent.ts) that exports "createNetlifyFunctionHandler(getVoltAgent())".'
);
console.log(' 3. Authenticate if needed: "pnpm netlify login" (or "netlify login")');
console.log(' 4. Deploy: "pnpm netlify deploy --prod" (or "netlify deploy --prod")');
console.log(
"\nNote: Update netlify.toml to match your project (custom paths, environment variables, etc.)."
);
console.log("Need help? Netlify Functions docs: https://docs.netlify.com/functions/overview/");
console.log("Join the VoltAgent Discord: https://s.voltagent.dev/discord\n");
}
__name(handleNetlifyDeploy, "handleNetlifyDeploy");
var registerDeployCommand = /* @__PURE__ */ __name((program) => {
program.command("deploy").description("Prepare deployment configuration for supported serverless runtimes.").option("-t, --target <target>", "Target platform").action(async (options) => {
let target = options.target;
if (!target) {
const answer = await import_inquirer.default.prompt([
{
type: "list",
name: "chosenTarget",
message: "Select a deployment target",
choices: SUPPORTED_TARGETS,
default: "cloudflare"
}
]);
target = answer.chosenTarget;
}
if (!SUPPORTED_TARGETS.includes(target)) {
console.error(
import_chalk2.default.red(
`
Unsupported target "${target}". Supported targets: ${SUPPORTED_TARGETS.join(", ")}.
`
)
);
return;
}
try {
switch (target) {
case "cloudflare":
await handleCloudflareDeploy();
break;
case "vercel":
await handleVercelDeploy();
break;
case "netlify":
await handleNetlifyDeploy();
break;
default:
console.log(import_chalk2.default.yellow("\nNo handlers implemented for the selected target yet.\n"));
}
} catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error);
console.error(import_chalk2.default.red("\nAn unexpected error occurred during deploy setup:"));
console.error(errorMessage);
captureError({
command: "deploy",
errorMessage
});
process.exit(1);
}
});
}, "registerDeployCommand");
// src/commands/init.ts
var import_node_child_process = require("child_process");
var import_node_fs = __toESM(require("fs"));
var import_node_path = __toESM(require("path"));
var import_chalk2 = __toESM(require("chalk"));
var import_node_fs2 = __toESM(require("fs"));
var import_node_path2 = __toESM(require("path"));
var import_chalk3 = __toESM(require("chalk"));
var registerInitCommand = /* @__PURE__ */ __name((program) => {
program.command("init").description("Integrate VoltAgent CLI into a project").action(async () => {
try {
console.log(import_chalk2.default.cyan("Integrating VoltAgent CLI into your project..."));
const packageJsonPath = import_node_path.default.join(process.cwd(), "package.json");
if (!import_node_fs.default.existsSync(packageJsonPath)) {
console.log(import_chalk3.default.cyan("Integrating VoltAgent CLI into your project..."));
const packageJsonPath = import_node_path2.default.join(process.cwd(), "package.json");
if (!import_node_fs2.default.existsSync(packageJsonPath)) {
console.error(
import_chalk2.default.red(
import_chalk3.default.red(
"Error: package.json file not found. This command must be run inside a Node.js project."

@@ -195,9 +354,9 @@ )

}
const packageJson = JSON.parse(import_node_fs.default.readFileSync(packageJsonPath, "utf-8"));
const packageJson = JSON.parse(import_node_fs2.default.readFileSync(packageJsonPath, "utf-8"));
const scripts = packageJson.scripts || {};
let packageManager = "npm";
try {
if (import_node_fs.default.existsSync(import_node_path.default.join(process.cwd(), "pnpm-lock.yaml"))) {
if (import_node_fs2.default.existsSync(import_node_path2.default.join(process.cwd(), "pnpm-lock.yaml"))) {
packageManager = "pnpm";
} else if (import_node_fs.default.existsSync(import_node_path.default.join(process.cwd(), "yarn.lock"))) {
} else if (import_node_fs2.default.existsSync(import_node_path2.default.join(process.cwd(), "yarn.lock"))) {
packageManager = "yarn";

@@ -208,3 +367,3 @@ }

}
console.log(import_chalk2.default.blue(`Detected package manager: ${packageManager}`));
console.log(import_chalk3.default.blue(`Detected package manager: ${packageManager}`));
let modified = false;

@@ -216,13 +375,13 @@ if (!scripts.volt || scripts.volt !== "volt") {

if (!modified) {
console.log(import_chalk2.default.yellow("No changes made. The 'volt' script is already configured."));
console.log(import_chalk3.default.yellow("No changes made. The 'volt' script is already configured."));
} else {
packageJson.scripts = scripts;
import_node_fs.default.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
console.log(import_chalk2.default.green("\u2713 Added 'volt' script to package.json"));
import_node_fs2.default.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
console.log(import_chalk3.default.green("\u2713 Added 'volt' script to package.json"));
}
let isPackageInstalled = false;
try {
import_node_fs.default.accessSync(
import_node_path.default.join(process.cwd(), "node_modules", "@voltagent", "cli"),
import_node_fs.default.constants.F_OK
import_node_fs2.default.accessSync(
import_node_path2.default.join(process.cwd(), "node_modules", "@voltagent", "cli"),
import_node_fs2.default.constants.F_OK
);

@@ -234,10 +393,10 @@ isPackageInstalled = true;

if (!isPackageInstalled) {
console.log(import_chalk2.default.cyan("Installing @voltagent/cli locally..."));
console.log(import_chalk3.default.cyan("Installing @voltagent/cli locally..."));
try {
const installCommand = packageManager === "yarn" ? "yarn add @voltagent/cli --dev" : packageManager === "pnpm" ? "pnpm add @voltagent/cli --save-dev" : "npm install @voltagent/cli --save-dev";
(0, import_node_child_process.execSync)(installCommand, { stdio: "inherit" });
console.log(import_chalk2.default.green("\u2713 @voltagent/cli successfully installed!"));
console.log(import_chalk3.default.green("\u2713 @voltagent/cli successfully installed!"));
} catch (error) {
console.error(
import_chalk2.default.red("Failed to install @voltagent/cli:"),
import_chalk3.default.red("Failed to install @voltagent/cli:"),
error instanceof Error ? error.message : String(error)

@@ -247,8 +406,8 @@ );

}
const voltagentDir = import_node_path.default.join(process.cwd(), ".voltagent");
if (!import_node_fs.default.existsSync(voltagentDir)) {
import_node_fs.default.mkdirSync(voltagentDir);
const voltagentDir = import_node_path2.default.join(process.cwd(), ".voltagent");
if (!import_node_fs2.default.existsSync(voltagentDir)) {
import_node_fs2.default.mkdirSync(voltagentDir);
}
console.log(import_chalk2.default.green("\u2713 VoltAgent CLI successfully integrated!"));
console.log("\n", import_chalk2.default.cyan("To run VoltAgent:"), import_chalk2.default.green("npm run volt"));
console.log(import_chalk3.default.green("\u2713 VoltAgent CLI successfully integrated!"));
console.log("\n", import_chalk3.default.cyan("To run VoltAgent:"), import_chalk3.default.green("npm run volt"));
captureInitEvent({

@@ -259,3 +418,3 @@ packageManager

const errorMessage = error instanceof Error ? error.message : String(error);
console.error(import_chalk2.default.red("Error:"), errorMessage);
console.error(import_chalk3.default.red("Error:"), errorMessage);
captureError({

@@ -271,6 +430,6 @@ command: "init",

// src/commands/mcp.ts
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"));
var import_node_fs3 = __toESM(require("fs"));
var import_node_path3 = __toESM(require("path"));
var import_chalk4 = __toESM(require("chalk"));
var import_inquirer2 = __toESM(require("inquirer"));
var import_ora = __toESM(require("ora"));

@@ -328,8 +487,8 @@ var isWindows = process.platform === "win32";

const config = configs[ide];
const configDir = import_node_path2.default.join(projectRoot, config.dir);
const configFile = import_node_path2.default.join(configDir, config.file);
if (!import_node_fs2.default.existsSync(configDir)) {
import_node_fs2.default.mkdirSync(configDir, { recursive: true });
const configDir = import_node_path3.default.join(projectRoot, config.dir);
const configFile = import_node_path3.default.join(configDir, config.file);
if (!import_node_fs3.default.existsSync(configDir)) {
import_node_fs3.default.mkdirSync(configDir, { recursive: true });
}
import_node_fs2.default.writeFileSync(configFile, JSON.stringify(config.content, null, 2));
import_node_fs3.default.writeFileSync(configFile, JSON.stringify(config.content, null, 2));
}

@@ -339,10 +498,10 @@ __name(createMCPConfig, "createMCPConfig");

const possibleConfigs = [
{ ide: "cursor", path: import_node_path2.default.join(projectRoot, ".cursor", "mcp.json") },
{ ide: "windsurf", path: import_node_path2.default.join(projectRoot, ".windsurf", "mcp.json") },
{ ide: "vscode", path: import_node_path2.default.join(projectRoot, ".vscode", "mcp.json") }
{ ide: "cursor", path: import_node_path3.default.join(projectRoot, ".cursor", "mcp.json") },
{ ide: "windsurf", path: import_node_path3.default.join(projectRoot, ".windsurf", "mcp.json") },
{ ide: "vscode", path: import_node_path3.default.join(projectRoot, ".vscode", "mcp.json") }
];
for (const config of possibleConfigs) {
if (import_node_fs2.default.existsSync(config.path)) {
if (import_node_fs3.default.existsSync(config.path)) {
try {
const content = import_node_fs2.default.readFileSync(config.path, "utf-8");
const content = import_node_fs3.default.readFileSync(config.path, "utf-8");
const parsed = JSON.parse(content);

@@ -366,3 +525,3 @@ const hasVoltAgentDocs = parsed.mcpServers?.["voltagent-docs"] || parsed.servers?.["voltagent-docs"];

const projectRoot = process.cwd();
console.log(import_chalk3.default.cyan("\u{1F527} VoltAgent MCP Docs Server Setup\n"));
console.log(import_chalk4.default.cyan("\u{1F527} VoltAgent MCP Docs Server Setup\n"));
try {

@@ -372,7 +531,7 @@ const existingConfig = checkExistingConfig(projectRoot);

console.log(
import_chalk3.default.yellow(`\u26A0\uFE0F MCP already seems to be installed (${existingConfig.configuredIDE})`)
import_chalk4.default.yellow(`\u26A0\uFE0F MCP already seems to be installed (${existingConfig.configuredIDE})`)
);
console.log(import_chalk3.default.gray(` Location: ${existingConfig.configPath}
console.log(import_chalk4.default.gray(` Location: ${existingConfig.configPath}
`));
const shouldContinue = await import_inquirer.default.prompt([
const shouldContinue = await import_inquirer2.default.prompt([
{

@@ -386,7 +545,7 @@ type: "confirm",

if (!shouldContinue.continue) {
console.log(import_chalk3.default.gray("Setup cancelled."));
console.log(import_chalk4.default.gray("Setup cancelled."));
return;
}
}
const ideChoice = await import_inquirer.default.prompt([
const ideChoice = await import_inquirer2.default.prompt([
{

@@ -406,6 +565,6 @@ type: "list",

if (ide === "none") {
console.log(import_chalk3.default.yellow("\n\u{1F4D6} Manual setup selected."));
console.log(import_chalk3.default.gray("You will need to configure the MCP server manually."));
console.log(import_chalk4.default.yellow("\n\u{1F4D6} Manual setup selected."));
console.log(import_chalk4.default.gray("You will need to configure the MCP server manually."));
console.log(
import_chalk3.default.blue("For details: https://voltagent.dev/docs/getting-started/mcp-docs-server\n")
import_chalk4.default.blue("For details: https://voltagent.dev/docs/getting-started/mcp-docs-server\n")
);

@@ -417,16 +576,16 @@ return;

createMCPConfig(ide, projectRoot);
spinner.succeed(import_chalk3.default.green(`\u2705 MCP configuration created for ${ide}!`));
console.log(import_chalk3.default.cyan("\n\u{1F4C1} Created files:"));
const configPath = import_node_path2.default.join(`.${ide}`, "mcp.json");
console.log(import_chalk3.default.gray(` ${configPath}`));
console.log(import_chalk3.default.cyan("\n\u{1F680} Next steps:"));
spinner.succeed(import_chalk4.default.green(`\u2705 MCP configuration created for ${ide}!`));
console.log(import_chalk4.default.cyan("\n\u{1F4C1} Created files:"));
const configPath = import_node_path3.default.join(`.${ide}`, "mcp.json");
console.log(import_chalk4.default.gray(` ${configPath}`));
console.log(import_chalk4.default.cyan("\n\u{1F680} Next steps:"));
console.log(
import_chalk3.default.white(
import_chalk4.default.white(
` 1. Restart ${ide === "cursor" ? "Cursor" : ide === "windsurf" ? "Windsurf" : "VS Code"}`
)
);
console.log(import_chalk3.default.white(" 2. Ask your AI assistant questions about VoltAgent"));
console.log(import_chalk3.default.gray(' Example: "How do I create an agent in VoltAgent?"'));
console.log(import_chalk4.default.white(" 2. Ask your AI assistant questions about VoltAgent"));
console.log(import_chalk4.default.gray(' Example: "How do I create an agent in VoltAgent?"'));
} catch (error) {
spinner.fail(import_chalk3.default.red("Failed to create MCP configuration"));
spinner.fail(import_chalk4.default.red("Failed to create MCP configuration"));
throw error;

@@ -436,3 +595,3 @@ }

const errorMessage = error instanceof Error ? error.message : String(error);
console.error(import_chalk3.default.red(`
console.error(import_chalk4.default.red(`
\u274C Error: ${errorMessage}`));

@@ -448,27 +607,27 @@ captureError({

async function testMCP() {
console.log(import_chalk3.default.cyan("\u{1F9EA} Testing VoltAgent MCP Connection\n"));
console.log(import_chalk4.default.cyan("\u{1F9EA} Testing VoltAgent MCP Connection\n"));
const projectRoot = process.cwd();
const existingConfig = checkExistingConfig(projectRoot);
if (!existingConfig.hasConfig) {
console.log(import_chalk3.default.red("\u274C MCP configuration not found."));
console.log(import_chalk3.default.gray("Please run 'volt mcp setup' first.\n"));
console.log(import_chalk4.default.red("\u274C MCP configuration not found."));
console.log(import_chalk4.default.gray("Please run 'volt mcp setup' first.\n"));
return;
}
console.log(import_chalk3.default.green(`\u2705 MCP configuration found (${existingConfig.configuredIDE})`));
console.log(import_chalk3.default.gray(` Location: ${existingConfig.configPath}`));
console.log(import_chalk3.default.cyan("\n\u{1F4CB} Test suggestions:"));
console.log(import_chalk3.default.white(" You can ask your AI assistant these questions:"));
console.log(import_chalk3.default.gray(' \u2022 "How do I create an agent in VoltAgent?"'));
console.log(import_chalk3.default.gray(' \u2022 "Is there a VoltAgent example with Next.js?"'));
console.log(import_chalk3.default.gray(' \u2022 "How do I use voice features?"'));
console.log(import_chalk3.default.gray(' \u2022 "What are the latest updates?"'));
console.log(import_chalk3.default.cyan("\n\u{1F527} Having issues?"));
console.log(import_chalk4.default.green(`\u2705 MCP configuration found (${existingConfig.configuredIDE})`));
console.log(import_chalk4.default.gray(` Location: ${existingConfig.configPath}`));
console.log(import_chalk4.default.cyan("\n\u{1F4CB} Test suggestions:"));
console.log(import_chalk4.default.white(" You can ask your AI assistant these questions:"));
console.log(import_chalk4.default.gray(' \u2022 "How do I create an agent in VoltAgent?"'));
console.log(import_chalk4.default.gray(' \u2022 "Is there a VoltAgent example with Next.js?"'));
console.log(import_chalk4.default.gray(' \u2022 "How do I use voice features?"'));
console.log(import_chalk4.default.gray(' \u2022 "What are the latest updates?"'));
console.log(import_chalk4.default.cyan("\n\u{1F527} Having issues?"));
console.log(
import_chalk3.default.white(
import_chalk4.default.white(
` 1. Restart ${existingConfig.configuredIDE === "cursor" ? "Cursor" : existingConfig.configuredIDE === "windsurf" ? "Windsurf" : "VS Code"}`
)
);
console.log(import_chalk3.default.white(" 2. Check MCP settings"));
console.log(import_chalk4.default.white(" 2. Check MCP settings"));
console.log(
import_chalk3.default.blue(" 3. For help: https://voltagent.dev/docs/getting-started/mcp-docs-server")
import_chalk4.default.blue(" 3. For help: https://voltagent.dev/docs/getting-started/mcp-docs-server")
);

@@ -478,22 +637,22 @@ }

async function statusMCP() {
console.log(import_chalk3.default.cyan("\u{1F4CA} VoltAgent MCP Status\n"));
console.log(import_chalk4.default.cyan("\u{1F4CA} VoltAgent MCP Status\n"));
const projectRoot = process.cwd();
const existingConfig = checkExistingConfig(projectRoot);
if (!existingConfig.hasConfig) {
console.log(import_chalk3.default.red("\u274C MCP configuration not found"));
console.log(import_chalk3.default.gray("MCP appears to not be installed yet.\n"));
console.log(import_chalk3.default.blue("To install: volt mcp setup"));
console.log(import_chalk4.default.red("\u274C MCP configuration not found"));
console.log(import_chalk4.default.gray("MCP appears to not be installed yet.\n"));
console.log(import_chalk4.default.blue("To install: volt mcp setup"));
return;
}
console.log(import_chalk3.default.green("\u2705 MCP configuration active"));
console.log(import_chalk3.default.gray(` IDE: ${existingConfig.configuredIDE}`));
console.log(import_chalk3.default.gray(` File: ${existingConfig.configPath}`));
console.log(import_chalk4.default.green("\u2705 MCP configuration active"));
console.log(import_chalk4.default.gray(` IDE: ${existingConfig.configuredIDE}`));
console.log(import_chalk4.default.gray(` File: ${existingConfig.configPath}`));
if (existingConfig.configPath) {
try {
const content = import_node_fs2.default.readFileSync(existingConfig.configPath, "utf-8");
const content = import_node_fs3.default.readFileSync(existingConfig.configPath, "utf-8");
const config = JSON.parse(content);
console.log(import_chalk3.default.cyan("\n\u{1F4CB} Configuration details:"));
console.log(import_chalk3.default.gray(JSON.stringify(config, null, 2)));
console.log(import_chalk4.default.cyan("\n\u{1F4CB} Configuration details:"));
console.log(import_chalk4.default.gray(JSON.stringify(config, null, 2)));
} catch {
console.log(import_chalk3.default.yellow("\u26A0\uFE0F Configuration file could not be read"));
console.log(import_chalk4.default.yellow("\u26A0\uFE0F Configuration file could not be read"));
}

@@ -504,13 +663,13 @@ }

async function removeMCP() {
console.log(import_chalk3.default.cyan("\u{1F5D1}\uFE0F VoltAgent MCP Removal\n"));
console.log(import_chalk4.default.cyan("\u{1F5D1}\uFE0F VoltAgent MCP Removal\n"));
const projectRoot = process.cwd();
const existingConfig = checkExistingConfig(projectRoot);
if (!existingConfig.hasConfig) {
console.log(import_chalk3.default.yellow("\u26A0\uFE0F MCP configuration not found"));
console.log(import_chalk3.default.gray("It may have already been removed.\n"));
console.log(import_chalk4.default.yellow("\u26A0\uFE0F MCP configuration not found"));
console.log(import_chalk4.default.gray("It may have already been removed.\n"));
return;
}
console.log(import_chalk3.default.yellow(`MCP configuration found (${existingConfig.configuredIDE})`));
console.log(import_chalk3.default.gray(`Location: ${existingConfig.configPath}`));
const shouldRemove = await import_inquirer.default.prompt([
console.log(import_chalk4.default.yellow(`MCP configuration found (${existingConfig.configuredIDE})`));
console.log(import_chalk4.default.gray(`Location: ${existingConfig.configPath}`));
const shouldRemove = await import_inquirer2.default.prompt([
{

@@ -524,3 +683,3 @@ type: "confirm",

if (!shouldRemove.remove) {
console.log(import_chalk3.default.gray("Operation cancelled."));
console.log(import_chalk4.default.gray("Operation cancelled."));
return;

@@ -530,6 +689,6 @@ }

try {
import_node_fs2.default.unlinkSync(existingConfig.configPath);
console.log(import_chalk3.default.green("\u2705 MCP configuration removed"));
import_node_fs3.default.unlinkSync(existingConfig.configPath);
console.log(import_chalk4.default.green("\u2705 MCP configuration removed"));
} catch (error) {
console.log(import_chalk3.default.red("\u274C Failed to remove MCP configuration"));
console.log(import_chalk4.default.red("\u274C Failed to remove MCP configuration"));
console.error(error);

@@ -561,6 +720,6 @@ }

// src/commands/update.ts
var import_node_fs3 = __toESM(require("fs"));
var import_node_path3 = __toESM(require("path"));
var import_chalk4 = __toESM(require("chalk"));
var import_inquirer2 = __toESM(require("inquirer"));
var import_node_fs4 = __toESM(require("fs"));
var import_node_path4 = __toESM(require("path"));
var import_chalk5 = __toESM(require("chalk"));
var import_inquirer3 = __toESM(require("inquirer"));
var ncuPackage = __toESM(require("npm-check-updates"));

@@ -570,5 +729,5 @@ var import_ora2 = __toESM(require("ora"));

try {
const rootDir = packagePath ? import_node_path3.default.dirname(packagePath) : process.cwd();
const packageJsonPath = packagePath || import_node_path3.default.join(rootDir, "package.json");
if (!import_node_fs3.default.existsSync(packageJsonPath)) {
const rootDir = packagePath ? import_node_path4.default.dirname(packagePath) : process.cwd();
const packageJsonPath = packagePath || import_node_path4.default.join(rootDir, "package.json");
if (!import_node_fs4.default.existsSync(packageJsonPath)) {
return {

@@ -616,7 +775,7 @@ hasUpdates: false,

var interactiveUpdate = /* @__PURE__ */ __name(async (updates, packagePath) => {
const rootDir = packagePath ? import_node_path3.default.dirname(packagePath) : process.cwd();
const packageJsonPath = packagePath || import_node_path3.default.join(rootDir, "package.json");
const rootDir = packagePath ? import_node_path4.default.dirname(packagePath) : process.cwd();
const packageJsonPath = packagePath || import_node_path4.default.join(rootDir, "package.json");
const choices = Object.entries(updates).map(([name, version]) => {
return {
name: `${import_chalk4.default.cyan(name)}: ${import_chalk4.default.gray(getCurrentVersion(name, packageJsonPath))} \u2192 ${import_chalk4.default.green(version)}`,
name: `${import_chalk5.default.cyan(name)}: ${import_chalk5.default.gray(getCurrentVersion(name, packageJsonPath))} \u2192 ${import_chalk5.default.green(version)}`,
value: name,

@@ -626,3 +785,3 @@ short: name

});
const { selectedPackages } = await import_inquirer2.default.prompt([
const { selectedPackages } = await import_inquirer3.default.prompt([
{

@@ -639,7 +798,7 @@ type: "checkbox",

if (selectedPackages.length === 0) {
console.log(import_chalk4.default.yellow("No packages selected for update."));
console.log(import_chalk5.default.yellow("No packages selected for update."));
return;
}
const selectedFilter = selectedPackages.join(" ");
console.log(import_chalk4.default.cyan("\nApplying updates for selected packages..."));
console.log(import_chalk5.default.cyan("\nApplying updates for selected packages..."));
try {

@@ -651,6 +810,6 @@ await ncuPackage.default({

});
console.log(import_chalk4.default.green(`\u2713 Updated ${selectedPackages.length} packages in package.json`));
console.log(import_chalk4.default.green("Run 'npm install' to install updated packages"));
console.log(import_chalk5.default.green(`\u2713 Updated ${selectedPackages.length} packages in package.json`));
console.log(import_chalk5.default.green("Run 'npm install' to install updated packages"));
} catch (error) {
console.error(import_chalk4.default.red("Error applying updates:"));
console.error(import_chalk5.default.red("Error applying updates:"));
console.error(error instanceof Error ? error.message : String(error));

@@ -661,3 +820,3 @@ }

try {
const packageJson = JSON.parse(import_node_fs3.default.readFileSync(packageJsonPath, "utf8"));
const packageJson = JSON.parse(import_node_fs4.default.readFileSync(packageJsonPath, "utf8"));
for (const section of [

@@ -689,22 +848,22 @@ "dependencies",

if (!updates.hasUpdates) {
console.log(import_chalk4.default.green("\u2713 All VoltAgent packages are up to date"));
console.log(import_chalk5.default.green("\u2713 All VoltAgent packages are up to date"));
return;
}
console.log(import_chalk4.default.yellow(`Found ${updates.count} outdated VoltAgent packages:`));
console.log(import_chalk5.default.yellow(`Found ${updates.count} outdated VoltAgent packages:`));
Object.entries(updates.updates).forEach(([name, version]) => {
console.log(` ${import_chalk4.default.cyan(name)}: ${import_chalk4.default.gray("\u2192")} ${import_chalk4.default.green(version)}`);
console.log(` ${import_chalk5.default.cyan(name)}: ${import_chalk5.default.gray("\u2192")} ${import_chalk5.default.green(version)}`);
});
if (options.apply) {
console.log(import_chalk4.default.cyan("\nApplying updates..."));
console.log(import_chalk5.default.cyan("\nApplying updates..."));
try {
await ncuPackage.default({
packageFile: import_node_path3.default.join(process.cwd(), "package.json"),
packageFile: import_node_path4.default.join(process.cwd(), "package.json"),
upgrade: true,
filter
});
console.log(import_chalk4.default.green("\u2713 Updates applied to package.json"));
console.log(import_chalk4.default.green("Run 'npm install' to install updated packages"));
console.log(import_chalk5.default.green("\u2713 Updates applied to package.json"));
console.log(import_chalk5.default.green("Run 'npm install' to install updated packages"));
return;
} catch (error) {
console.error(import_chalk4.default.red("Error applying updates:"));
console.error(import_chalk5.default.red("Error applying updates:"));
console.error(error instanceof Error ? error.message : String(error));

@@ -715,7 +874,7 @@ return;

console.log();
console.log(import_chalk4.default.cyan("Starting interactive update..."));
console.log(import_chalk5.default.cyan("Starting interactive update..."));
await interactiveUpdate(updates.updates);
} catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error);
console.error(import_chalk4.default.red("Error checking for updates:"));
console.error(import_chalk5.default.red("Error checking for updates:"));
console.error(errorMessage);

@@ -731,21 +890,21 @@ captureError({

// src/commands/whoami.ts
var import_node_fs4 = __toESM(require("fs"));
var import_node_fs5 = __toESM(require("fs"));
var import_node_os2 = __toESM(require("os"));
var import_node_path4 = __toESM(require("path"));
var import_chalk5 = __toESM(require("chalk"));
var import_node_path5 = __toESM(require("path"));
var import_chalk6 = __toESM(require("chalk"));
var registerWhoamiCommand = /* @__PURE__ */ __name((program) => {
program.command("whoami").description("Display system and user information").action(async () => {
try {
console.log(import_chalk5.default.cyan("System and User Information:"));
console.log(import_chalk5.default.blue(`Username: ${import_node_os2.default.userInfo().username}`));
console.log(import_chalk5.default.blue(`Hostname: ${import_node_os2.default.hostname()}`));
console.log(import_chalk5.default.blue(`Platform: ${import_node_os2.default.platform()}`));
console.log(import_chalk5.default.blue(`OS: ${import_node_os2.default.type()} ${import_node_os2.default.release()}`));
console.log(import_chalk5.default.blue(`Architecture: ${import_node_os2.default.arch()}`));
console.log(import_chalk5.default.blue(`Home Directory: ${import_node_os2.default.homedir()}`));
console.log(import_chalk5.default.cyan("\nInstalled VoltAgent Packages:"));
console.log(import_chalk6.default.cyan("System and User Information:"));
console.log(import_chalk6.default.blue(`Username: ${import_node_os2.default.userInfo().username}`));
console.log(import_chalk6.default.blue(`Hostname: ${import_node_os2.default.hostname()}`));
console.log(import_chalk6.default.blue(`Platform: ${import_node_os2.default.platform()}`));
console.log(import_chalk6.default.blue(`OS: ${import_node_os2.default.type()} ${import_node_os2.default.release()}`));
console.log(import_chalk6.default.blue(`Architecture: ${import_node_os2.default.arch()}`));
console.log(import_chalk6.default.blue(`Home Directory: ${import_node_os2.default.homedir()}`));
console.log(import_chalk6.default.cyan("\nInstalled VoltAgent Packages:"));
let numVoltPackages = 0;
const packageJsonPath = import_node_path4.default.join(process.cwd(), "package.json");
if (import_node_fs4.default.existsSync(packageJsonPath)) {
const packageJson = JSON.parse(import_node_fs4.default.readFileSync(packageJsonPath, "utf-8"));
const packageJsonPath = import_node_path5.default.join(process.cwd(), "package.json");
if (import_node_fs5.default.existsSync(packageJsonPath)) {
const packageJson = JSON.parse(import_node_fs5.default.readFileSync(packageJsonPath, "utf-8"));
const dependencies = {

@@ -759,9 +918,9 @@ ...packageJson.dependencies,

voltagentPackages.forEach((pkg) => {
console.log(import_chalk5.default.blue(`${pkg.name}: ${pkg.version}`));
console.log(import_chalk6.default.blue(`${pkg.name}: ${pkg.version}`));
});
} else {
console.log(import_chalk5.default.yellow("No VoltAgent packages found in package.json"));
console.log(import_chalk6.default.yellow("No VoltAgent packages found in package.json"));
}
} else {
console.log(import_chalk5.default.yellow("No package.json found in current directory"));
console.log(import_chalk6.default.yellow("No package.json found in current directory"));
}

@@ -773,3 +932,3 @@ captureWhoamiEvent({

const errorMessage = error instanceof Error ? error.message : String(error);
console.error(import_chalk5.default.red("Error:"), errorMessage);
console.error(import_chalk6.default.red("Error:"), errorMessage);
captureError({

@@ -793,2 +952,3 @@ command: "whoami",

registerMCPCommand(program);
registerDeployCommand(program);
return program;

@@ -799,3 +959,3 @@ }, "createCLI");

console.log(
import_chalk6.default.cyan(
import_chalk7.default.cyan(
import_figlet.default.textSync("VoltAgent CLI", {

@@ -813,3 +973,3 @@ font: "Standard",

const errorMessage = error instanceof Error ? error.message : String(error);
console.error(import_chalk6.default.red("An unexpected error occurred:"));
console.error(import_chalk7.default.red("An unexpected error occurred:"));
console.error(errorMessage);

@@ -816,0 +976,0 @@ captureError({

@@ -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 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"]}
{"version":3,"sources":["../src/index.ts","../src/commands/add.ts","../src/utils/analytics.ts","../src/commands/deploy.ts","../src/templates/cloudflare-wrangler.toml","../src/templates/netlify.toml","../src/templates/vercel.json.template","../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 { registerDeployCommand } from \"./commands/deploy\";\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 registerDeployCommand(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 { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport inquirer from \"inquirer\";\nimport cloudflareTemplate from \"../templates/cloudflare-wrangler.toml\";\nimport netlifyTemplate from \"../templates/netlify.toml\";\nimport vercelTemplate from \"../templates/vercel.json.template\";\nimport { captureError } from \"../utils/analytics\";\n\nconst SUPPORTED_TARGETS = [\"cloudflare\", \"vercel\", \"netlify\"] as const;\ntype SupportedTarget = (typeof SUPPORTED_TARGETS)[number];\n\nconst CLOUDFLARE_WRANGLER_TEMPLATE = cloudflareTemplate;\nconst VERCEL_CONFIG_TEMPLATE = vercelTemplate;\nconst NETLIFY_CONFIG_TEMPLATE = netlifyTemplate;\n\nasync function ensureFile(pathToFile: string, contents: string) {\n try {\n await fs.access(pathToFile);\n return false;\n } catch {\n await fs.writeFile(pathToFile, contents, { encoding: \"utf8\" });\n return true;\n }\n}\n\nasync function handleCloudflareDeploy() {\n const targetPath = path.join(process.cwd(), \"wrangler.toml\");\n const created = await ensureFile(targetPath, CLOUDFLARE_WRANGLER_TEMPLATE);\n\n if (created) {\n console.log(chalk.green(`\\n✅ Created wrangler.toml at ${targetPath}`));\n } else {\n console.log(\n chalk.yellow(`\\n⚠️ wrangler.toml already exists at ${targetPath}. No changes were made.`),\n );\n }\n\n console.log(\"\\nNext steps:\");\n console.log(' 1. Build your project: \"pnpm build\"');\n console.log(' 2. Authenticate if needed: \"pnpm wrangler login\"');\n console.log(' 3. Deploy: \"pnpm wrangler deploy\"');\n console.log(\n '\\nNote: If you maintain multiple Cloudflare accounts or use KV/D1 bindings/routes, edit \"wrangler.toml\" to provide those values.',\n );\n console.log(\n \"Need help? Wrangler docs: https://developers.cloudflare.com/workers/wrangler/configuration/\",\n );\n console.log(\"Join the VoltAgent Discord: https://s.voltagent.dev/discord\\n\");\n}\n\nasync function handleVercelDeploy() {\n const targetPath = path.join(process.cwd(), \"vercel.json\");\n const created = await ensureFile(targetPath, VERCEL_CONFIG_TEMPLATE);\n\n if (created) {\n console.log(chalk.green(`\\n✅ Created vercel.json at ${targetPath}`));\n } else {\n console.log(\n chalk.yellow(`\\n⚠️ vercel.json already exists at ${targetPath}. No changes were made.`),\n );\n }\n\n console.log(\"\\nNext steps:\");\n console.log(' 1. Build your project: \"pnpm build\"');\n console.log(\n ' 2. Ensure you have a serverless entry (example: api/voltagent.ts) that exports \"voltAgent.serverless().toVercelEdge()\".',\n );\n console.log(' 3. Authenticate if needed: \"pnpm vercel login\" (or \"vercel login\")');\n console.log(' 4. Deploy: \"pnpm vercel deploy\" (or \"vercel deploy\")');\n console.log(\n \"\\nNote: Adjust vercel.json routes/functions if you use a different API path or need environment variables.\",\n );\n console.log(\"Need help? Vercel Edge docs: https://vercel.com/docs/functions/edge-functions\");\n console.log(\"Join the VoltAgent Discord: https://s.voltagent.dev/discord\\n\");\n}\n\nasync function handleNetlifyDeploy() {\n const targetPath = path.join(process.cwd(), \"netlify.toml\");\n const created = await ensureFile(targetPath, NETLIFY_CONFIG_TEMPLATE);\n\n if (created) {\n console.log(chalk.green(`\\n✅ Created netlify.toml at ${targetPath}`));\n } else {\n console.log(\n chalk.yellow(`\\n⚠️ netlify.toml already exists at ${targetPath}. No changes were made.`),\n );\n }\n\n console.log(\"\\nNext steps:\");\n console.log(' 1. Build your project: \"pnpm build\"');\n console.log(\n ' 2. Add a function file (example: netlify/functions/voltagent.ts) that exports \"createNetlifyFunctionHandler(getVoltAgent())\".',\n );\n console.log(' 3. Authenticate if needed: \"pnpm netlify login\" (or \"netlify login\")');\n console.log(' 4. Deploy: \"pnpm netlify deploy --prod\" (or \"netlify deploy --prod\")');\n console.log(\n \"\\nNote: Update netlify.toml to match your project (custom paths, environment variables, etc.).\",\n );\n console.log(\"Need help? Netlify Functions docs: https://docs.netlify.com/functions/overview/\");\n console.log(\"Join the VoltAgent Discord: https://s.voltagent.dev/discord\\n\");\n}\n\nexport const registerDeployCommand = (program: Command) => {\n program\n .command(\"deploy\")\n .description(\"Prepare deployment configuration for supported serverless runtimes.\")\n .option(\"-t, --target <target>\", \"Target platform\")\n .action(async (options: { target?: string }) => {\n let target = options.target as SupportedTarget | undefined;\n\n if (!target) {\n const answer = await inquirer.prompt([\n {\n type: \"list\",\n name: \"chosenTarget\",\n message: \"Select a deployment target\",\n choices: SUPPORTED_TARGETS,\n default: \"cloudflare\",\n },\n ]);\n target = answer.chosenTarget as SupportedTarget;\n }\n\n if (!SUPPORTED_TARGETS.includes(target)) {\n console.error(\n chalk.red(\n `\\nUnsupported target \\\"${target}\\\". Supported targets: ${SUPPORTED_TARGETS.join(\", \")}.\\n`,\n ),\n );\n return;\n }\n\n try {\n switch (target) {\n case \"cloudflare\":\n await handleCloudflareDeploy();\n break;\n case \"vercel\":\n await handleVercelDeploy();\n break;\n case \"netlify\":\n await handleNetlifyDeploy();\n break;\n default:\n console.log(chalk.yellow(\"\\nNo handlers implemented for the selected target yet.\\n\"));\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(chalk.red(\"\\nAn unexpected error occurred during deploy setup:\"));\n console.error(errorMessage);\n\n captureError({\n command: \"deploy\",\n errorMessage,\n });\n\n process.exit(1);\n }\n });\n};\n","# Generated by VoltAgent CLI\nname = \"voltagent-worker\"\nmain = \"dist/index.js\"\ncompatibility_date = \"2025-01-01\"\naccount_id = \"\"\nworkers_dev = true\ncompatibility_flags = [\n \"nodejs_compat\",\n \"nodejs_compat_populate_process_env\",\n \"no_handle_cross_request_promise_resolution\",\n]\n","# Generated by VoltAgent CLI\n[functions]\n node_bundler = \"esbuild\"\n\n[[edge_functions]]\n function = \"voltagent\"\n path = \"/*\"\n","// Generated by VoltAgent CLI\n{\n \"version\": 3,\n \"functions\": {\n \"api/voltagent.ts\": {\n \"runtime\": \"edge\"\n }\n },\n \"routes\": [\n { \"src\": \"/(.*)\", \"dest\": \"/api/voltagent.ts\" }\n ]\n}\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","fs","path","chalk","inquirer","import_node_fs","import_node_path","import_chalk","chalk","path","fs","import_node_fs","import_node_path","import_chalk","import_inquirer","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"]}
{
"name": "@voltagent/cli",
"description": "CLI tool for VoltAgent applications",
"version": "0.1.10",
"version": "0.1.11",
"bin": {

@@ -28,3 +28,3 @@ "volt": "dist/index.js"

"@types/inquirer": "^9.0.7",
"@types/node": "^24.0.3",
"@types/node": "^24.2.1",
"@types/semver": "^7.5.6",

@@ -31,0 +31,0 @@ "@types/update-notifier": "^6.0.8",

+63
-13

@@ -28,3 +28,3 @@ <div align="center">

<div align="center">
[![npm version](https://img.shields.io/npm/v/@voltagent/core.svg)](https://www.npmjs.com/package/@voltagent/core)

@@ -34,3 +34,3 @@ [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.0-4baaaa.svg)](CODE_OF_CONDUCT.md)

[![Twitter Follow](https://img.shields.io/twitter/follow/voltagent_dev?style=social)](https://twitter.com/voltagent_dev)
</div>

@@ -57,2 +57,3 @@

- **Multi-Agent Systems**: Architect complex applications by coordinating multiple specialized agents using Supervisors.
- **Workflow Engine**: Go beyond simple request-response. Orchestrate multi-step automations that can process data, call APIs, run tasks in parallel, and execute conditional logic.
- **Extensible Packages**: Enhance functionality with packages like `@voltagent/voice` for voice interactions.

@@ -79,2 +80,3 @@ - **Tooling & Integrations**: Equip agents with tools to connect to external APIs, databases, and services, enabling them to perform real-world tasks. **Supports the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) for standardized tool interactions.**

- **Scalability:** Start simple and easily scale to complex, multi-agent systems handling intricate workflows.
- **Build Sophisticated Automations:** It's not just for chat. The workflow engine lets you build complex, multi-step processes for tasks like data analysis pipelines, automated content generation, or intelligent decision-making systems.
- **Flexibility:** Full control over agent behavior, LLM choice, tool integrations, and UI connections.

@@ -97,19 +99,34 @@ - **Avoid Lock-in:** Freedom to switch AI providers and models as needed.

You'll see the starter code in `src/index.ts` to get you started with the VoltAgent framework.
You'll see the starter code in `src/index.ts`, which now registers both an agent and a comprehensive workflow example found in `src/workflows/index.ts`.
```typescript
import { VoltAgent, Agent } from "@voltagent/core";
import { VercelAIProvider } from "@voltagent/vercel-ai"; // Example provider
import { openai } from "@ai-sdk/openai"; // Example model
import { VoltAgent, Agent, Memory } from "@voltagent/core";
import { LibSQLMemoryAdapter } from "@voltagent/libsql";
import { createPinoLogger } from "@voltagent/logger";
import { honoServer } from "@voltagent/server-hono";
import { openai } from "@ai-sdk/openai";
import { expenseApprovalWorkflow } from "./workflows";
import { weatherTool } from "./tools";
// Define a simple agent
// Create a logger instance
const logger = createPinoLogger({
name: "my-agent-app",
level: "info",
});
// Optional persistent memory (remove to use default in-memory)
const memory = new Memory({
storage: new LibSQLMemoryAdapter({ url: "file:./.voltagent/memory.db" }),
});
// A simple, general-purpose agent for the project.
const agent = new Agent({
name: "my-agent",
instructions: "A helpful assistant that answers questions without using tools",
// Note: You can swap VercelAIProvider and openai with other supported providers/models
llm: new VercelAIProvider(),
instructions: "A helpful assistant that can check weather and help with various tasks",
model: openai("gpt-4o-mini"),
tools: [weatherTool],
memory,
});
// Initialize VoltAgent with your agent(s)
// Initialize VoltAgent with your agent(s) and workflow(s)
new VoltAgent({

@@ -119,2 +136,7 @@ agents: {

},
workflows: {
expenseApprovalWorkflow,
},
server: honoServer(),
logger,
});

@@ -149,7 +171,28 @@ ```

![VoltAgent VoltOps Platform Demo](https://github.com/user-attachments/assets/0adbec33-1373-4cf4-b67d-825f7baf1cb4)
[![VoltAgent VoltOps Platform Demo](https://github.com/user-attachments/assets/0adbec33-1373-4cf4-b67d-825f7baf1cb4)](https://console.voltagent.dev/)
### Running Your First Workflow
Your new project also includes a powerful workflow engine. You can test the pre-built `expenseApprovalWorkflow` directly from the VoltOps console:
![VoltOps Workflow Observability](https://github.com/user-attachments/assets/9b877c65-f095-407f-9237-d7879964c38a)
1. **Go to the Workflows Page:** After starting your server, go directly to the [Workflows page](https://console.voltagent.dev/workflows).
2. **Select Your Project:** Use the project selector to choose your project (e.g., "my-agent-app").
3. **Find and Run:** You will see **"Expense Approval Workflow"** listed. Click it, then click the **"Run"** button.
4. **Provide Input:** The workflow expects a JSON object with expense details. Try a small expense for automatic approval:
```json
{
"employeeId": "EMP-123",
"amount": 250,
"category": "office-supplies",
"description": "New laptop mouse and keyboard"
}
```
5. **View the Results:** After execution, you can inspect the detailed logs for each step and see the final output directly in the console.
## Key Features
- **Agent Core:** Define agents with descriptions, LLM providers, tools, and memory management.
- **Workflow Engine:** Orchestrate complex, multi-step automations with a powerful and declarative API (`andThen`, `andAgent`, `andAll`, `andRace`, `andWhen`).
- **Multi-Agent Systems:** Build complex workflows using Supervisor Agents coordinating multiple specialized Sub-Agents.

@@ -160,2 +203,3 @@ - **Tool Usage & Lifecycle:** Equip agents with custom or pre-built tools (functions) with type-safety (Zod), lifecycle hooks, and cancellation support to interact with external systems.

- **Observability & Debugging:** Visually monitor agent states, interactions, logs, and performance via the [VoltOps LLM Observability Platform](https://console.voltagent.dev).
- **Custom API Endpoints:** Extend the VoltAgent API server with your own custom endpoints to build specialized functionality on top of the core framework.
- **Voice Interaction:** Build voice-enabled agents capable of speech recognition and synthesis using the `@voltagent/voice` package.

@@ -192,4 +236,10 @@ - **Data Retrieval & RAG:** Integrate specialized retriever agents for efficient information fetching and **Retrieval-Augmented Generation (RAG)** from various sources.

## Community ♥️ Thanks
## Contributor ♥️ Thanks
Big thanks to everyone who's been part of the VoltAgent journey, whether you've built a plugin, opened an issue, dropped a pull request, or just helped someone out on Discord or GitHub Discussions.
VoltAgent is a community effort, and it keeps getting better because of people like you.
![Contributors](https://contrib.rocks/image?repo=voltagent/voltagent)
Your stars help us reach more developers! If you find VoltAgent useful, please consider giving us a star on GitHub to support the project and help others discover it.

@@ -196,0 +246,0 @@