@lvnt/release-radar-cli 0.2.12 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +14 -100
- package/dist/ui.d.ts +0 -9
- package/dist/ui.js +13 -72
- package/dist/updater.js +8 -2
- package/package.json +3 -10
- package/versions.json +98 -10
- package/README.md +0 -124
package/dist/index.js
CHANGED
|
@@ -1,110 +1,40 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import { readFileSync } from 'fs';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { dirname, join } from 'path';
|
|
5
2
|
import { ConfigManager } from './config.js';
|
|
6
3
|
import { DownloadTracker } from './tracker.js';
|
|
7
4
|
import { loadVersions } from './versions.js';
|
|
8
5
|
import { checkAndUpdate } from './updater.js';
|
|
9
6
|
import { downloadFile, updateNpmPackage } from './downloader.js';
|
|
10
|
-
import { promptSetup, promptToolSelection
|
|
7
|
+
import { promptSetup, promptToolSelection } from './ui.js';
|
|
11
8
|
import { isNpmTool } from './types.js';
|
|
12
|
-
function getVersion() {
|
|
13
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
14
|
-
const pkgPath = join(__dirname, '..', 'package.json');
|
|
15
|
-
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
16
|
-
return pkg.version;
|
|
17
|
-
}
|
|
18
|
-
function showHelp() {
|
|
19
|
-
const version = getVersion();
|
|
20
|
-
console.log(`
|
|
21
|
-
${chalk.bold('release-radar-cli')} v${version}
|
|
22
|
-
|
|
23
|
-
${chalk.bold('USAGE:')}
|
|
24
|
-
release-radar-cli [command] [options]
|
|
25
|
-
|
|
26
|
-
${chalk.bold('COMMANDS:')}
|
|
27
|
-
${chalk.cyan('(default)')} Interactive mode - select and download tools
|
|
28
|
-
${chalk.cyan('status')} Show tool versions and download status
|
|
29
|
-
${chalk.cyan('config')} Configure or reconfigure settings (Nexus URL, download dir)
|
|
30
|
-
${chalk.cyan('version')} Show CLI version
|
|
31
|
-
${chalk.cyan('help')} Show this help message
|
|
32
|
-
|
|
33
|
-
${chalk.bold('OPTIONS:')}
|
|
34
|
-
${chalk.cyan('-v, --version')} Show version number
|
|
35
|
-
${chalk.cyan('-h, --help')} Show help
|
|
36
|
-
${chalk.cyan('--skip-update')} Skip auto-update check on startup
|
|
37
|
-
|
|
38
|
-
${chalk.bold('EXAMPLES:')}
|
|
39
|
-
release-radar-cli # Interactive mode
|
|
40
|
-
release-radar-cli status # Show all tool versions
|
|
41
|
-
release-radar-cli config # Reconfigure settings
|
|
42
|
-
release-radar-cli --version # Show version
|
|
43
|
-
|
|
44
|
-
${chalk.bold('CONFIG LOCATION:')}
|
|
45
|
-
~/.release-radar-cli/config.json
|
|
46
|
-
|
|
47
|
-
${chalk.gray('For more info: https://github.com/lvntbkdmr/release-radar')}
|
|
48
|
-
`);
|
|
49
|
-
}
|
|
50
9
|
async function showStatus() {
|
|
51
10
|
const tracker = new DownloadTracker();
|
|
52
11
|
const versions = loadVersions();
|
|
53
12
|
const downloaded = tracker.getAll();
|
|
54
13
|
console.log(chalk.bold('\nTool Status:\n'));
|
|
55
|
-
|
|
14
|
+
console.log(chalk.bold(' Tool Latest Downloaded Status Type'));
|
|
15
|
+
console.log(chalk.gray('─'.repeat(70)));
|
|
16
|
+
for (const tool of versions.tools) {
|
|
56
17
|
const record = downloaded[tool.name];
|
|
18
|
+
const downloadedVersion = record?.version ?? '-';
|
|
57
19
|
let status;
|
|
58
20
|
if (!record) {
|
|
59
|
-
status = '
|
|
21
|
+
status = chalk.blue('NEW');
|
|
60
22
|
}
|
|
61
23
|
else if (record.version !== tool.version) {
|
|
62
|
-
status = '
|
|
24
|
+
status = chalk.yellow('UPDATE');
|
|
63
25
|
}
|
|
64
26
|
else {
|
|
65
|
-
status = '
|
|
27
|
+
status = chalk.green('✓');
|
|
66
28
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
downloadedVersion: record?.version ?? '-',
|
|
71
|
-
status,
|
|
72
|
-
type: isNpmTool(tool) ? 'npm' : 'download',
|
|
73
|
-
};
|
|
74
|
-
});
|
|
75
|
-
renderTable(rows);
|
|
29
|
+
const typeStr = isNpmTool(tool) ? chalk.magenta('npm') : chalk.cyan('wget');
|
|
30
|
+
console.log(` ${tool.displayName.padEnd(18)} ${tool.version.padEnd(12)} ${downloadedVersion.padEnd(12)} ${status.padEnd(12)} ${typeStr}`);
|
|
31
|
+
}
|
|
76
32
|
console.log('');
|
|
77
33
|
}
|
|
78
34
|
async function runConfig() {
|
|
79
35
|
const configManager = new ConfigManager();
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const current = configManager.load();
|
|
83
|
-
console.log(chalk.bold('\nCurrent configuration:'));
|
|
84
|
-
console.log(` Nexus URL: ${chalk.cyan(current.nexusUrl)}`);
|
|
85
|
-
console.log(` Download dir: ${chalk.cyan(current.downloadDir)}`);
|
|
86
|
-
console.log('');
|
|
87
|
-
const { reconfigure } = await (await import('inquirer')).default.prompt([
|
|
88
|
-
{
|
|
89
|
-
type: 'confirm',
|
|
90
|
-
name: 'reconfigure',
|
|
91
|
-
message: 'Do you want to update these settings?',
|
|
92
|
-
default: false,
|
|
93
|
-
},
|
|
94
|
-
]);
|
|
95
|
-
if (!reconfigure) {
|
|
96
|
-
console.log(chalk.gray('Configuration unchanged.'));
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
// Prompt with current values as defaults
|
|
100
|
-
const { promptReconfigure } = await import('./ui.js');
|
|
101
|
-
const config = await promptReconfigure(current);
|
|
102
|
-
configManager.save(config);
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
const config = await promptSetup();
|
|
106
|
-
configManager.save(config);
|
|
107
|
-
}
|
|
36
|
+
const config = await promptSetup();
|
|
37
|
+
configManager.save(config);
|
|
108
38
|
console.log(chalk.green('\nConfiguration saved!'));
|
|
109
39
|
}
|
|
110
40
|
async function runInteractive() {
|
|
@@ -190,25 +120,9 @@ async function runInteractive() {
|
|
|
190
120
|
}
|
|
191
121
|
}
|
|
192
122
|
async function main() {
|
|
193
|
-
const
|
|
194
|
-
// Handle flags first
|
|
195
|
-
if (rawArgs.includes('-v') || rawArgs.includes('--version')) {
|
|
196
|
-
console.log(getVersion());
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
if (rawArgs.includes('-h') || rawArgs.includes('--help')) {
|
|
200
|
-
showHelp();
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
const args = rawArgs.filter(arg => !arg.startsWith('--') && !arg.startsWith('-'));
|
|
123
|
+
const args = process.argv.slice(2).filter(arg => !arg.startsWith('--'));
|
|
204
124
|
const command = args[0];
|
|
205
125
|
switch (command) {
|
|
206
|
-
case 'version':
|
|
207
|
-
console.log(getVersion());
|
|
208
|
-
break;
|
|
209
|
-
case 'help':
|
|
210
|
-
showHelp();
|
|
211
|
-
break;
|
|
212
126
|
case 'status':
|
|
213
127
|
await showStatus();
|
|
214
128
|
break;
|
package/dist/ui.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ import type { VersionsJsonTool } from './types.js';
|
|
|
2
2
|
import type { DownloadedState } from './tracker.js';
|
|
3
3
|
import type { CliConfig } from './config.js';
|
|
4
4
|
export declare function promptSetup(): Promise<CliConfig>;
|
|
5
|
-
export declare function promptReconfigure(current: CliConfig): Promise<CliConfig>;
|
|
6
5
|
interface ToolChoiceBase {
|
|
7
6
|
name: string;
|
|
8
7
|
displayName: string;
|
|
@@ -20,13 +19,5 @@ interface ToolChoiceNpm extends ToolChoiceBase {
|
|
|
20
19
|
package: string;
|
|
21
20
|
}
|
|
22
21
|
export type ToolChoice = ToolChoiceDownload | ToolChoiceNpm;
|
|
23
|
-
export interface TableRow {
|
|
24
|
-
displayName: string;
|
|
25
|
-
version: string;
|
|
26
|
-
downloadedVersion: string;
|
|
27
|
-
status: 'new' | 'update' | 'current';
|
|
28
|
-
type: 'npm' | 'download';
|
|
29
|
-
}
|
|
30
|
-
export declare function renderTable(rows: TableRow[]): void;
|
|
31
22
|
export declare function promptToolSelection(tools: VersionsJsonTool[], downloaded: DownloadedState, generatedAt: string): Promise<ToolChoice[]>;
|
|
32
23
|
export {};
|
package/dist/ui.js
CHANGED
|
@@ -30,35 +30,6 @@ export async function promptSetup() {
|
|
|
30
30
|
downloadDir: answers.downloadDir.replace('~', process.env.HOME || ''),
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
export async function promptReconfigure(current) {
|
|
34
|
-
console.log(chalk.bold('\nUpdate your settings:\n'));
|
|
35
|
-
const answers = await inquirer.prompt([
|
|
36
|
-
{
|
|
37
|
-
type: 'input',
|
|
38
|
-
name: 'nexusUrl',
|
|
39
|
-
message: 'Nexus proxy base URL:',
|
|
40
|
-
default: current.nexusUrl,
|
|
41
|
-
validate: (input) => {
|
|
42
|
-
if (!input.trim())
|
|
43
|
-
return 'URL is required';
|
|
44
|
-
if (!input.startsWith('http'))
|
|
45
|
-
return 'URL must start with http:// or https://';
|
|
46
|
-
return true;
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
type: 'input',
|
|
51
|
-
name: 'downloadDir',
|
|
52
|
-
message: 'Download directory:',
|
|
53
|
-
default: current.downloadDir,
|
|
54
|
-
validate: (input) => input.trim() ? true : 'Directory is required',
|
|
55
|
-
},
|
|
56
|
-
]);
|
|
57
|
-
return {
|
|
58
|
-
nexusUrl: answers.nexusUrl.replace(/\/$/, ''),
|
|
59
|
-
downloadDir: answers.downloadDir.replace('~', process.env.HOME || ''),
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
33
|
function getStatus(tool, downloaded) {
|
|
63
34
|
const record = downloaded[tool.name];
|
|
64
35
|
if (!record) {
|
|
@@ -94,28 +65,17 @@ function createToolChoice(tool, downloaded) {
|
|
|
94
65
|
};
|
|
95
66
|
}
|
|
96
67
|
}
|
|
97
|
-
export function
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const totalWidth = colWidths.tool + colWidths.latest + colWidths.downloaded + colWidths.status + colWidths.type + 2;
|
|
107
|
-
// Header
|
|
108
|
-
console.log(chalk.bold(' ' +
|
|
109
|
-
'Tool'.padEnd(colWidths.tool) +
|
|
110
|
-
'Latest'.padEnd(colWidths.latest) +
|
|
111
|
-
'Downloaded'.padEnd(colWidths.downloaded) +
|
|
112
|
-
'Status'.padEnd(colWidths.status) +
|
|
113
|
-
'Type'));
|
|
114
|
-
console.log(chalk.gray('─'.repeat(totalWidth)));
|
|
115
|
-
// Rows
|
|
116
|
-
for (const row of rows) {
|
|
68
|
+
export async function promptToolSelection(tools, downloaded, generatedAt) {
|
|
69
|
+
const choices = tools.map((tool) => createToolChoice(tool, downloaded));
|
|
70
|
+
console.log(chalk.bold(`\nrelease-radar-cli`));
|
|
71
|
+
console.log(chalk.gray(`Last updated: ${new Date(generatedAt).toLocaleString()}\n`));
|
|
72
|
+
// Display table
|
|
73
|
+
console.log(chalk.bold(' Tool Latest Downloaded Status Type'));
|
|
74
|
+
console.log(chalk.gray('─'.repeat(70)));
|
|
75
|
+
choices.forEach((choice) => {
|
|
76
|
+
const downloadedStr = choice.downloadedVersion ?? '-';
|
|
117
77
|
let statusStr;
|
|
118
|
-
switch (
|
|
78
|
+
switch (choice.status) {
|
|
119
79
|
case 'new':
|
|
120
80
|
statusStr = chalk.blue('NEW');
|
|
121
81
|
break;
|
|
@@ -126,28 +86,9 @@ export function renderTable(rows) {
|
|
|
126
86
|
statusStr = chalk.green('✓');
|
|
127
87
|
break;
|
|
128
88
|
}
|
|
129
|
-
const typeStr =
|
|
130
|
-
console.log(
|
|
131
|
-
|
|
132
|
-
row.version.padEnd(colWidths.latest) +
|
|
133
|
-
row.downloadedVersion.padEnd(colWidths.downloaded) +
|
|
134
|
-
statusStr.padEnd(colWidths.status + 5) + // +5 for chalk color codes
|
|
135
|
-
typeStr);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
export async function promptToolSelection(tools, downloaded, generatedAt) {
|
|
139
|
-
const choices = tools.map((tool) => createToolChoice(tool, downloaded));
|
|
140
|
-
console.log(chalk.bold(`\nrelease-radar-cli`));
|
|
141
|
-
console.log(chalk.gray(`Last updated: ${new Date(generatedAt).toLocaleString()}\n`));
|
|
142
|
-
// Convert to table rows and display
|
|
143
|
-
const rows = choices.map(choice => ({
|
|
144
|
-
displayName: choice.displayName,
|
|
145
|
-
version: choice.version,
|
|
146
|
-
downloadedVersion: choice.downloadedVersion ?? '-',
|
|
147
|
-
status: choice.status,
|
|
148
|
-
type: choice.type === 'npm' ? 'npm' : 'download',
|
|
149
|
-
}));
|
|
150
|
-
renderTable(rows);
|
|
89
|
+
const typeStr = choice.type === 'npm' ? chalk.magenta('npm') : chalk.cyan('wget');
|
|
90
|
+
console.log(` ${choice.displayName.padEnd(18)} ${choice.version.padEnd(12)} ${downloadedStr.padEnd(12)} ${statusStr.padEnd(12)} ${typeStr}`);
|
|
91
|
+
});
|
|
151
92
|
console.log('');
|
|
152
93
|
const { selected } = await inquirer.prompt([
|
|
153
94
|
{
|
package/dist/updater.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { execSync } from 'child_process';
|
|
1
|
+
import { execSync, spawn } from 'child_process';
|
|
2
2
|
import { readFileSync } from 'fs';
|
|
3
3
|
import { fileURLToPath } from 'url';
|
|
4
4
|
import { dirname, join } from 'path';
|
|
@@ -40,7 +40,13 @@ export async function checkAndUpdate() {
|
|
|
40
40
|
});
|
|
41
41
|
if (result)
|
|
42
42
|
console.log(result);
|
|
43
|
-
console.log('Update complete.
|
|
43
|
+
console.log('Update complete. Restarting...\n');
|
|
44
|
+
// Restart self with a fresh terminal
|
|
45
|
+
const child = spawn(process.argv[0], process.argv.slice(1), {
|
|
46
|
+
detached: true,
|
|
47
|
+
stdio: 'inherit',
|
|
48
|
+
});
|
|
49
|
+
child.unref();
|
|
44
50
|
process.exit(0);
|
|
45
51
|
}
|
|
46
52
|
catch (error) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lvnt/release-radar-cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.13",
|
|
4
4
|
"description": "Interactive CLI for downloading tools through Nexus proxy",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
"files": [
|
|
17
17
|
"dist",
|
|
18
18
|
"bin",
|
|
19
|
-
"versions.json"
|
|
20
|
-
"README.md"
|
|
19
|
+
"versions.json"
|
|
21
20
|
],
|
|
22
21
|
"keywords": [
|
|
23
22
|
"release",
|
|
@@ -27,12 +26,6 @@
|
|
|
27
26
|
],
|
|
28
27
|
"author": "lvnt",
|
|
29
28
|
"license": "ISC",
|
|
30
|
-
"repository": {
|
|
31
|
-
"type": "git",
|
|
32
|
-
"url": "git+https://github.com/lvntbkdmr/release-radar.git",
|
|
33
|
-
"directory": "cli"
|
|
34
|
-
},
|
|
35
|
-
"homepage": "https://github.com/lvntbkdmr/release-radar#readme",
|
|
36
29
|
"dependencies": {
|
|
37
30
|
"chalk": "^5.3.0",
|
|
38
31
|
"inquirer": "^9.2.12"
|
|
@@ -44,4 +37,4 @@
|
|
|
44
37
|
"typescript": "^5.3.0",
|
|
45
38
|
"vitest": "^1.1.0"
|
|
46
39
|
}
|
|
47
|
-
}
|
|
40
|
+
}
|
package/versions.json
CHANGED
|
@@ -1,21 +1,109 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-01-
|
|
2
|
+
"generatedAt": "2026-01-25T15:40:53.910Z",
|
|
3
3
|
"tools": [
|
|
4
|
+
{
|
|
5
|
+
"name": "Claude Code CLI",
|
|
6
|
+
"displayName": "Claude Code CLI",
|
|
7
|
+
"version": "2.1.19",
|
|
8
|
+
"publishedAt": "2026-01-25T15:40:53.910Z",
|
|
9
|
+
"downloadUrl": "{{NEXUS_URL}}/storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/2.1.19/win32-x64/claude.exe",
|
|
10
|
+
"filename": "claude-2.1.19.exe"
|
|
11
|
+
},
|
|
4
12
|
{
|
|
5
13
|
"name": "Ninja",
|
|
6
14
|
"displayName": "Ninja",
|
|
7
|
-
"version": "1.
|
|
8
|
-
"publishedAt": "2026-01-
|
|
9
|
-
"downloadUrl": "{{NEXUS_URL}}/github.com/ninja-build/ninja/releases/download/v1.
|
|
10
|
-
"filename": "ninja-1.
|
|
15
|
+
"version": "1.13.2",
|
|
16
|
+
"publishedAt": "2026-01-25T15:40:53.910Z",
|
|
17
|
+
"downloadUrl": "{{NEXUS_URL}}/github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-win.zip",
|
|
18
|
+
"filename": "ninja-1.13.2-win.zip"
|
|
11
19
|
},
|
|
12
20
|
{
|
|
13
21
|
"name": "CMake",
|
|
14
22
|
"displayName": "CMake",
|
|
15
|
-
"version": "
|
|
16
|
-
"publishedAt": "2026-01-
|
|
17
|
-
"downloadUrl": "{{NEXUS_URL}}/github.com/Kitware/CMake/releases/download/
|
|
18
|
-
"filename": "cmake-
|
|
23
|
+
"version": "4.2.2",
|
|
24
|
+
"publishedAt": "2026-01-25T15:40:53.910Z",
|
|
25
|
+
"downloadUrl": "{{NEXUS_URL}}/github.com/Kitware/CMake/releases/download/v4.2.2/cmake-4.2.2-windows-x86_64.zip",
|
|
26
|
+
"filename": "cmake-4.2.2-windows-x86_64.zip"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"name": "Git",
|
|
30
|
+
"displayName": "Git for Windows",
|
|
31
|
+
"version": "2.52.0.windows.1",
|
|
32
|
+
"publishedAt": "2026-01-25T15:40:53.910Z",
|
|
33
|
+
"downloadUrl": "{{NEXUS_URL}}/github.com/git-for-windows/git/releases/download/v2.52.0.windows.1/Git-2.52.0-64-bit.exe",
|
|
34
|
+
"filename": "Git-2.52.0-64-bit.exe"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "Clangd",
|
|
38
|
+
"displayName": "Clangd",
|
|
39
|
+
"version": "21.1.8",
|
|
40
|
+
"publishedAt": "2026-01-25T15:40:53.910Z",
|
|
41
|
+
"downloadUrl": "{{NEXUS_URL}}/github.com/clangd/clangd/releases/download/21.1.8/clangd-windows-21.1.8.zip",
|
|
42
|
+
"filename": "clangd-windows-21.1.8.zip"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "Wezterm",
|
|
46
|
+
"displayName": "Wezterm",
|
|
47
|
+
"version": "20240203-110809-5046fc22",
|
|
48
|
+
"publishedAt": "2026-01-25T15:40:53.910Z",
|
|
49
|
+
"downloadUrl": "{{NEXUS_URL}}/github.com/wezterm/wezterm/releases/download/20240203-110809-5046fc22/WezTerm-20240203-110809-5046fc22-setup.exe",
|
|
50
|
+
"filename": "WezTerm-20240203-110809-5046fc22-setup.exe"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "Ralphy",
|
|
54
|
+
"displayName": "Ralphy CLI",
|
|
55
|
+
"version": "4.5.3",
|
|
56
|
+
"publishedAt": "2026-01-25T15:40:53.910Z",
|
|
57
|
+
"type": "npm",
|
|
58
|
+
"package": "ralphy-cli"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "vscode-cpptools",
|
|
62
|
+
"displayName": "C/C++ Extension",
|
|
63
|
+
"version": "1.29.3",
|
|
64
|
+
"publishedAt": "2026-01-25T15:40:53.910Z",
|
|
65
|
+
"downloadUrl": "{{NEXUS_URL}}/github.com/microsoft/vscode-cpptools/releases/download/v1.29.3/cpptools-windows-x64.vsix",
|
|
66
|
+
"filename": "cpptools-windows-x64-1.29.3.vsix"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "vscode-clangd",
|
|
70
|
+
"displayName": "clangd Extension",
|
|
71
|
+
"version": "0.4.0",
|
|
72
|
+
"publishedAt": "2026-01-25T15:40:53.910Z",
|
|
73
|
+
"downloadUrl": "{{NEXUS_URL}}/github.com/clangd/vscode-clangd/releases/download/0.4.0/vscode-clangd-0.4.0.vsix",
|
|
74
|
+
"filename": "vscode-clangd-0.4.0.vsix"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "CMake Tools",
|
|
78
|
+
"displayName": "CMake Tools Extension",
|
|
79
|
+
"version": "1.21.36",
|
|
80
|
+
"publishedAt": "2026-01-25T15:40:53.910Z",
|
|
81
|
+
"downloadUrl": "{{NEXUS_URL}}/github.com/microsoft/vscode-cmake-tools/releases/download/v1.21.36/cmake-tools.vsix",
|
|
82
|
+
"filename": "cmake-tools-1.21.36.vsix"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "Roo Code",
|
|
86
|
+
"displayName": "Roo Code Extension",
|
|
87
|
+
"version": "3.43.0",
|
|
88
|
+
"publishedAt": "2026-01-25T15:40:53.910Z",
|
|
89
|
+
"downloadUrl": "{{NEXUS_URL}}/github.com/RooCodeInc/Roo-Code/releases/download/v3.43.0/roo-cline-3.43.0.vsix",
|
|
90
|
+
"filename": "roo-cline-3.43.0.vsix"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "Atlascode",
|
|
94
|
+
"displayName": "Atlassian Extension",
|
|
95
|
+
"version": "4.0.17",
|
|
96
|
+
"publishedAt": "2026-01-25T15:40:53.910Z",
|
|
97
|
+
"downloadUrl": "{{NEXUS_URL}}/github.com/atlassian/atlascode/releases/download/v4.0.17/atlascode-4.0.17.vsix",
|
|
98
|
+
"filename": "atlascode-4.0.17.vsix"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"name": "Zed",
|
|
102
|
+
"displayName": "Zed",
|
|
103
|
+
"version": "0.220.6",
|
|
104
|
+
"publishedAt": "2026-01-25T15:40:53.910Z",
|
|
105
|
+
"downloadUrl": "{{NEXUS_URL}}/github.com/zed-industries/zed/releases/download/v0.220.6/Zed-x86_64.exe",
|
|
106
|
+
"filename": "Zed-0.220.6-x86_64.exe"
|
|
19
107
|
}
|
|
20
108
|
]
|
|
21
|
-
}
|
|
109
|
+
}
|
package/README.md
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
# release-radar-cli
|
|
2
|
-
|
|
3
|
-
Interactive CLI for downloading development tools through a Nexus proxy. Companion tool to [@lvnt/release-radar](https://www.npmjs.com/package/@lvnt/release-radar).
|
|
4
|
-
|
|
5
|
-
## Why?
|
|
6
|
-
|
|
7
|
-
In corporate/intranet environments with restricted internet access, downloading tools directly isn't possible. This CLI:
|
|
8
|
-
|
|
9
|
-
- Downloads tools through your Nexus proxy server
|
|
10
|
-
- Tracks which versions you've downloaded
|
|
11
|
-
- Shows available updates at a glance
|
|
12
|
-
- Supports both wget downloads and npm global packages
|
|
13
|
-
|
|
14
|
-
## Installation
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
npm install -g @lvnt/release-radar-cli
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Quick Start
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
# Run interactive mode
|
|
24
|
-
release-radar-cli
|
|
25
|
-
|
|
26
|
-
# First run will prompt for configuration:
|
|
27
|
-
# - Nexus proxy URL (e.g., https://nexus.company.com/repository/raw-proxy)
|
|
28
|
-
# - Download directory (e.g., ~/downloads/tools)
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Commands
|
|
32
|
-
|
|
33
|
-
| Command | Description |
|
|
34
|
-
|---------|-------------|
|
|
35
|
-
| `release-radar-cli` | Interactive mode - select and download tools |
|
|
36
|
-
| `release-radar-cli status` | Show all tool versions and download status |
|
|
37
|
-
| `release-radar-cli config` | Configure or reconfigure settings |
|
|
38
|
-
| `release-radar-cli version` | Show CLI version |
|
|
39
|
-
| `release-radar-cli help` | Show help message |
|
|
40
|
-
|
|
41
|
-
## Options
|
|
42
|
-
|
|
43
|
-
| Option | Description |
|
|
44
|
-
|--------|-------------|
|
|
45
|
-
| `-v, --version` | Show version number |
|
|
46
|
-
| `-h, --help` | Show help |
|
|
47
|
-
| `--skip-update` | Skip auto-update check on startup |
|
|
48
|
-
|
|
49
|
-
## Interactive Mode
|
|
50
|
-
|
|
51
|
-
When you run `release-radar-cli`, you'll see a table of available tools:
|
|
52
|
-
|
|
53
|
-
```
|
|
54
|
-
Tool Latest Downloaded Status Type
|
|
55
|
-
──────────────────────────────────────────────────────────────────────
|
|
56
|
-
Claude Code CLI 1.0.17 1.0.16 UPDATE wget
|
|
57
|
-
Ninja 1.12.1 1.12.1 ✓ wget
|
|
58
|
-
CMake 4.0.1 - NEW wget
|
|
59
|
-
Ralphy 1.2.0 1.2.0 ✓ npm
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
Select tools with arrow keys and spacebar, then press Enter to download.
|
|
63
|
-
|
|
64
|
-
## Status Display
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
release-radar-cli status
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Shows versions without interactive prompts - useful for scripts or quick checks.
|
|
71
|
-
|
|
72
|
-
## Configuration
|
|
73
|
-
|
|
74
|
-
Config is stored at `~/.release-radar-cli/config.json`:
|
|
75
|
-
|
|
76
|
-
```json
|
|
77
|
-
{
|
|
78
|
-
"nexusUrl": "https://nexus.company.com/repository/raw-proxy",
|
|
79
|
-
"downloadDir": "/home/user/downloads/tools"
|
|
80
|
-
}
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
To reconfigure:
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
release-radar-cli config
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
## Download Types
|
|
90
|
-
|
|
91
|
-
### wget (Binary Downloads)
|
|
92
|
-
|
|
93
|
-
Downloads files through Nexus proxy using wget:
|
|
94
|
-
- Claude Code CLI
|
|
95
|
-
- Ninja
|
|
96
|
-
- CMake
|
|
97
|
-
- Git
|
|
98
|
-
- Clangd
|
|
99
|
-
- Wezterm
|
|
100
|
-
- VS Code Extensions
|
|
101
|
-
|
|
102
|
-
### npm (Global Packages)
|
|
103
|
-
|
|
104
|
-
Updates npm packages globally:
|
|
105
|
-
- Ralphy
|
|
106
|
-
|
|
107
|
-
## Auto-Update
|
|
108
|
-
|
|
109
|
-
The CLI checks for updates on startup and automatically updates itself if a newer version is available. Skip this with `--skip-update`.
|
|
110
|
-
|
|
111
|
-
## How It Works
|
|
112
|
-
|
|
113
|
-
1. **ReleaseRadar service** monitors tool versions and publishes updates to this CLI
|
|
114
|
-
2. **This CLI** reads the embedded `versions.json` containing latest versions and download URLs
|
|
115
|
-
3. **You select** which tools to download
|
|
116
|
-
4. **CLI downloads** through your configured Nexus proxy
|
|
117
|
-
|
|
118
|
-
## Related
|
|
119
|
-
|
|
120
|
-
- [@lvnt/release-radar](https://www.npmjs.com/package/@lvnt/release-radar) - The monitoring service that powers this CLI
|
|
121
|
-
|
|
122
|
-
## License
|
|
123
|
-
|
|
124
|
-
ISC
|