const { existsSync } = require('fs');
const { join } = require('path');
const MACOS_HELPER_NAME = 'agent-desktop-macos-helper';
const LINUX_HELPER_NAME = 'agent-desktop-linux-clipboard-owner';
const PLATFORMS = {
'darwin-arm64': {
target: 'aarch64-apple-darwin',
binaryName: 'agent-desktop-darwin-arm64',
entries: ['agent-desktop', MACOS_HELPER_NAME],
released: true,
},
'darwin-x64': {
target: 'x86_64-apple-darwin',
binaryName: 'agent-desktop-darwin-x64',
entries: ['agent-desktop', MACOS_HELPER_NAME],
released: true,
},
'linux-arm64': {
target: 'aarch64-unknown-linux-gnu',
binaryName: 'agent-desktop-linux-arm64',
entries: ['agent-desktop', LINUX_HELPER_NAME],
released: true,
},
'linux-x64': {
target: 'x86_64-unknown-linux-gnu',
binaryName: 'agent-desktop-linux-x64',
entries: ['agent-desktop', LINUX_HELPER_NAME],
released: true,
},
'win32-arm64': {
target: 'aarch64-pc-windows-msvc',
binaryName: 'agent-desktop-win32-arm64.exe',
entries: ['agent-desktop.exe'],
released: true,
},
'win32-x64': {
target: 'x86_64-pc-windows-msvc',
binaryName: 'agent-desktop-win32-x64.exe',
entries: ['agent-desktop.exe'],
released: true,
},
};
function resolve(osPlatform, osArch) {
return PLATFORMS[`${osPlatform}-${osArch}`];
}
function helperNames(entry) {
return entry.entries.slice(1);
}
function releasedKeys() {
return Object.entries(PLATFORMS)
.filter(([, entry]) => entry.released)
.map(([key]) => key);
}
function tarballName(version, target) {
return `agent-desktop-v${version}-${target}.tar.gz`;
}
function tarCommand(osPlatform, environment) {
if (osPlatform !== 'win32') {
return 'tar';
}
const systemRoot = environment.SystemRoot || environment.windir;
if (!systemRoot) {
return 'tar';
}
const inBox = join(systemRoot, 'System32', 'tar.exe');
return existsSync(inBox) ? inBox : 'tar';
}
module.exports = {
LINUX_HELPER_NAME,
MACOS_HELPER_NAME,
PLATFORMS,
helperNames,
releasedKeys,
resolve,
tarCommand,
tarballName,
};