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
JavaScript
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);
}