UNPKG

agentvasya

Version:

Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more

121 lines (100 loc) 3.73 kB
#!/usr/bin/env node const fs = require('fs'); const path = require('path'); const os = require('os'); // Detect current platform and architecture function getPlatformInfo() { const platform = os.platform(); const arch = os.arch(); // Map Node.js arch names to Go arch names let goArch = arch; if (arch === 'x64') { goArch = 'amd64'; } let goPlatform = platform; return { platform: goPlatform, arch: goArch }; } // Setup platform-specific binaries function setupBinaries() { const { platform, arch } = getPlatformInfo(); const platformSuffix = `${platform}-${arch}`; console.log(`Setting up AgentVasya CLI for ${platformSuffix}...`); const binDir = path.join(__dirname, 'bin'); // Check if platform-specific binaries exist const agentvasyaSource = path.join(binDir, `agentvasya-${platformSuffix}`); const agentvasyaHostSource = path.join(binDir, `agentvasya-host-${platformSuffix}`); if (!fs.existsSync(agentvasyaSource)) { console.error(`Error: Binary not found for platform ${platformSuffix}`); console.error(`Expected: ${agentvasyaSource}`); console.error(`Supported platforms: darwin-arm64, darwin-amd64, linux-amd64, linux-arm64`); process.exit(1); } if (!fs.existsSync(agentvasyaHostSource)) { console.error(`Error: Binary not found for platform ${platformSuffix}`); console.error(`Expected: ${agentvasyaHostSource}`); process.exit(1); } // Create symlinks or copies to the generic names const agentvasyaTarget = path.join(binDir, 'agentvasya'); const agentvasyaHostTarget = path.join(binDir, 'agentvasya-host'); // Remove existing files if they exist [agentvasyaTarget, agentvasyaHostTarget].forEach(target => { if (fs.existsSync(target)) { try { fs.unlinkSync(target); } catch (e) { console.warn(`Warning: Could not remove existing file ${target}: ${e.message}`); } } }); // On Unix, create symlinks; on Windows, copy files if (platform === 'win32') { // Windows: copy files fs.copyFileSync(agentvasyaSource, agentvasyaTarget); fs.copyFileSync(agentvasyaHostSource, agentvasyaHostTarget); console.log('✓ Copied platform-specific binaries'); } else { // Unix: create symlinks fs.symlinkSync(path.basename(agentvasyaSource), agentvasyaTarget); fs.symlinkSync(path.basename(agentvasyaHostSource), agentvasyaHostTarget); console.log('✓ Created symlinks to platform-specific binaries'); // Make binaries executable try { fs.chmodSync(agentvasyaSource, 0o755); fs.chmodSync(agentvasyaHostSource, 0o755); fs.chmodSync(agentvasyaTarget, 0o755); fs.chmodSync(agentvasyaHostTarget, 0o755); } catch (error) { console.warn(`Warning: Could not set executable permissions: ${error.message}`); } } // Check ripgrep binary const rgBinary = platform === 'win32' ? 'rg.exe' : 'rg'; const rgPath = path.join(__dirname, rgBinary); if (!fs.existsSync(rgPath)) { console.error(`Error: ripgrep binary not found at ${rgPath}`); process.exit(1); } // Make ripgrep executable (Unix only) if (platform !== 'win32') { try { fs.chmodSync(rgPath, 0o755); } catch (error) { console.warn(`Warning: Could not set ripgrep executable permissions: ${error.message}`); } } console.log('✓ AgentVasya CLI installation complete'); console.log(''); console.log('Usage:'); console.log(' agentvasya - Start AgentVasya CLI'); console.log(' agentvasya-host - Start AgentVasya host service'); console.log(''); console.log('Documentation: https://docs.agentvasya.com'); } try { setupBinaries(); } catch (error) { console.error(`Installation failed: ${error.message}`); console.error('Please report this issue at: https://github.com/agentvasya/agentvasya/issues'); process.exit(1); }