const { spawn } = require('child_process');
const path = require('path');
const os = require('os');
const fs = require('fs');
function getBinaryName() {
const platform = os.platform();
const arch = os.arch();
const platformMap = {
win32: 'aicommit-windows',
linux: 'aicommit-linux',
darwin: 'aicommit-macos'
};
const archMap = {
x64: 'x86_64',
arm64: 'aarch64'
};
const base = platformMap[platform];
const archSuffix = archMap[arch];
if (platform === 'linux' && arch !== 'x64') {
throw new Error('Linux builds are only available for x86_64 architecture');
}
if (!base || !archSuffix) {
throw new Error(`Unsupported platform (${platform}) or architecture (${arch})`);
}
return `${base}-${archSuffix}${platform === 'win32' ? '.exe' : ''}`;
}
const binaryPath = path.join(__dirname, 'bin', getBinaryName());
if (!fs.existsSync(binaryPath)) {
console.error(`Binary not found: ${binaryPath}`);
process.exit(1);
}
if (os.platform() !== 'win32') {
try {
fs.chmodSync(binaryPath, 0o755);
} catch (err) {
console.error(`Failed to make binary executable: ${err}`);
process.exit(1);
}
}
const binary = spawn(binaryPath, process.argv.slice(2), { stdio: 'inherit' });
binary.on('error', (err) => {
console.error(`Failed to start binary: ${err}`);
process.exit(1);
});
binary.on('exit', (code) => {
process.exit(code);
});