@lvnt/release-radar-cli 0.2.41 → 0.2.42
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 +2 -1
- package/dist/ui.d.ts +2 -0
- package/dist/ui.js +73 -38
- package/package.json +1 -1
- package/versions.json +19 -19
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import { DownloadTracker } from './tracker.js';
|
|
|
7
7
|
import { loadVersions } from './versions.js';
|
|
8
8
|
import { checkAndUpdate } from './updater.js';
|
|
9
9
|
import { downloadFile, updateNpmPackage } from './downloader.js';
|
|
10
|
-
import { promptSetup, promptToolSelection, renderTable } from './ui.js';
|
|
10
|
+
import { promptSetup, promptToolSelection, renderTable, isVscodeExtension } from './ui.js';
|
|
11
11
|
import { isNpmTool } from './types.js';
|
|
12
12
|
function getVersion() {
|
|
13
13
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
@@ -84,6 +84,7 @@ async function showStatus() {
|
|
|
84
84
|
downloadedVersion: record?.version ?? '-',
|
|
85
85
|
status,
|
|
86
86
|
type: isNpmTool(tool) ? 'npm' : 'download',
|
|
87
|
+
category: isVscodeExtension(tool) ? 'vscode-extension' : 'tool',
|
|
87
88
|
};
|
|
88
89
|
});
|
|
89
90
|
renderTable(rows);
|
package/dist/ui.d.ts
CHANGED
|
@@ -26,7 +26,9 @@ export interface TableRow {
|
|
|
26
26
|
downloadedVersion: string;
|
|
27
27
|
status: 'new' | 'update' | 'current';
|
|
28
28
|
type: 'npm' | 'download';
|
|
29
|
+
category: 'tool' | 'vscode-extension';
|
|
29
30
|
}
|
|
30
31
|
export declare function renderTable(rows: TableRow[]): void;
|
|
32
|
+
export declare function isVscodeExtension(tool: VersionsJsonTool): boolean;
|
|
31
33
|
export declare function promptToolSelection(tools: VersionsJsonTool[], downloaded: DownloadedState, generatedAt: string): Promise<ToolChoice[]>;
|
|
32
34
|
export {};
|
package/dist/ui.js
CHANGED
|
@@ -94,72 +94,107 @@ function createToolChoice(tool, downloaded) {
|
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const colWidths = {
|
|
97
|
+
function calculateColWidths(rows) {
|
|
98
|
+
return {
|
|
100
99
|
tool: Math.max(4, ...rows.map(r => r.displayName.length)) + 2,
|
|
101
100
|
latest: Math.max(6, ...rows.map(r => r.version.length)) + 2,
|
|
102
101
|
downloaded: Math.max(10, ...rows.map(r => r.downloadedVersion.length)) + 2,
|
|
103
102
|
status: 8,
|
|
104
103
|
type: 4,
|
|
105
104
|
};
|
|
106
|
-
|
|
107
|
-
|
|
105
|
+
}
|
|
106
|
+
function renderTableHeader(colWidths) {
|
|
108
107
|
console.log(chalk.bold(' ' +
|
|
109
108
|
'Tool'.padEnd(colWidths.tool) +
|
|
110
109
|
'Latest'.padEnd(colWidths.latest) +
|
|
111
110
|
'Downloaded'.padEnd(colWidths.downloaded) +
|
|
112
111
|
'Status'.padEnd(colWidths.status) +
|
|
113
112
|
'Type'));
|
|
113
|
+
const totalWidth = colWidths.tool + colWidths.latest + colWidths.downloaded + colWidths.status + colWidths.type + 2;
|
|
114
|
+
console.log(chalk.gray('─'.repeat(totalWidth)));
|
|
115
|
+
}
|
|
116
|
+
function renderTableRow(row, colWidths) {
|
|
117
|
+
let statusText;
|
|
118
|
+
let statusColored;
|
|
119
|
+
switch (row.status) {
|
|
120
|
+
case 'new':
|
|
121
|
+
statusText = 'NEW'.padEnd(colWidths.status);
|
|
122
|
+
statusColored = chalk.blue(statusText);
|
|
123
|
+
break;
|
|
124
|
+
case 'update':
|
|
125
|
+
statusText = 'UPDATE'.padEnd(colWidths.status);
|
|
126
|
+
statusColored = chalk.yellow(statusText);
|
|
127
|
+
break;
|
|
128
|
+
case 'current':
|
|
129
|
+
statusText = '✓'.padEnd(colWidths.status);
|
|
130
|
+
statusColored = chalk.green(statusText);
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
const typeStr = row.type === 'npm' ? chalk.magenta('npm') : chalk.cyan('wget');
|
|
134
|
+
console.log(' ' +
|
|
135
|
+
row.displayName.padEnd(colWidths.tool) +
|
|
136
|
+
row.version.padEnd(colWidths.latest) +
|
|
137
|
+
row.downloadedVersion.padEnd(colWidths.downloaded) +
|
|
138
|
+
statusColored +
|
|
139
|
+
typeStr);
|
|
140
|
+
}
|
|
141
|
+
function renderGroupHeader(title, colWidths) {
|
|
142
|
+
const totalWidth = colWidths.tool + colWidths.latest + colWidths.downloaded + colWidths.status + colWidths.type + 2;
|
|
143
|
+
console.log('');
|
|
144
|
+
console.log(chalk.bold.underline(` ${title}`));
|
|
114
145
|
console.log(chalk.gray('─'.repeat(totalWidth)));
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
146
|
+
}
|
|
147
|
+
export function renderTable(rows) {
|
|
148
|
+
const colWidths = calculateColWidths(rows);
|
|
149
|
+
// Group rows by category
|
|
150
|
+
const tools = rows.filter(r => r.category === 'tool');
|
|
151
|
+
const extensions = rows.filter(r => r.category === 'vscode-extension');
|
|
152
|
+
// Render tools first
|
|
153
|
+
if (tools.length > 0) {
|
|
154
|
+
renderTableHeader(colWidths);
|
|
155
|
+
for (const row of tools) {
|
|
156
|
+
renderTableRow(row, colWidths);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Render VSCode extensions as a separate group
|
|
160
|
+
if (extensions.length > 0) {
|
|
161
|
+
renderGroupHeader('VSCode Extensions', colWidths);
|
|
162
|
+
for (const row of extensions) {
|
|
163
|
+
renderTableRow(row, colWidths);
|
|
133
164
|
}
|
|
134
|
-
const typeStr = row.type === 'npm' ? chalk.magenta('npm') : chalk.cyan('wget');
|
|
135
|
-
console.log(' ' +
|
|
136
|
-
row.displayName.padEnd(colWidths.tool) +
|
|
137
|
-
row.version.padEnd(colWidths.latest) +
|
|
138
|
-
row.downloadedVersion.padEnd(colWidths.downloaded) +
|
|
139
|
-
statusColored +
|
|
140
|
-
typeStr);
|
|
141
165
|
}
|
|
142
166
|
}
|
|
167
|
+
export function isVscodeExtension(tool) {
|
|
168
|
+
if (isNpmTool(tool))
|
|
169
|
+
return false;
|
|
170
|
+
// Check if filename ends with .vsix
|
|
171
|
+
return tool.filename.toLowerCase().endsWith('.vsix');
|
|
172
|
+
}
|
|
143
173
|
export async function promptToolSelection(tools, downloaded, generatedAt) {
|
|
144
174
|
const choices = tools.map((tool) => createToolChoice(tool, downloaded));
|
|
145
175
|
console.log(chalk.bold(`\nrelease-radar-cli`));
|
|
146
176
|
console.log(chalk.gray(`Last updated: ${new Date(generatedAt).toLocaleString()}\n`));
|
|
147
|
-
// Convert to table rows and display
|
|
148
|
-
const rows =
|
|
149
|
-
displayName:
|
|
150
|
-
version:
|
|
151
|
-
downloadedVersion:
|
|
152
|
-
status:
|
|
153
|
-
type:
|
|
177
|
+
// Convert to table rows with category and display
|
|
178
|
+
const rows = tools.map((tool, i) => ({
|
|
179
|
+
displayName: choices[i].displayName,
|
|
180
|
+
version: choices[i].version,
|
|
181
|
+
downloadedVersion: choices[i].downloadedVersion ?? '-',
|
|
182
|
+
status: choices[i].status,
|
|
183
|
+
type: choices[i].type === 'npm' ? 'npm' : 'download',
|
|
184
|
+
category: isVscodeExtension(tool) ? 'vscode-extension' : 'tool',
|
|
154
185
|
}));
|
|
155
186
|
renderTable(rows);
|
|
156
187
|
console.log('');
|
|
188
|
+
// Sort choices to match displayed order (tools first, then extensions)
|
|
189
|
+
const toolChoices = choices.filter((_, i) => !isVscodeExtension(tools[i]));
|
|
190
|
+
const extensionChoices = choices.filter((_, i) => isVscodeExtension(tools[i]));
|
|
191
|
+
const sortedChoices = [...toolChoices, ...extensionChoices];
|
|
157
192
|
const { selected } = await inquirer.prompt([
|
|
158
193
|
{
|
|
159
194
|
type: 'checkbox',
|
|
160
195
|
name: 'selected',
|
|
161
196
|
message: 'Select tools to download:',
|
|
162
|
-
choices:
|
|
197
|
+
choices: sortedChoices.map((choice) => ({
|
|
163
198
|
name: `${choice.displayName} ${choice.version}`,
|
|
164
199
|
value: choice,
|
|
165
200
|
checked: choice.status !== 'current',
|
package/package.json
CHANGED
package/versions.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-01-
|
|
2
|
+
"generatedAt": "2026-01-29T20:06:18.603Z",
|
|
3
3
|
"tools": [
|
|
4
4
|
{
|
|
5
5
|
"name": "VSCode",
|
|
6
6
|
"displayName": "VS Code",
|
|
7
7
|
"version": "1.108.2",
|
|
8
|
-
"publishedAt": "2026-01-
|
|
8
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
9
9
|
"downloadUrl": "{{NEXUS_URL}}/github.com/lvntbkdmr/apps/releases/download/vscode-v1.108.2/VSCode-1.108.2-win-x64.msi",
|
|
10
10
|
"filename": "VSCode-1.108.2-win-x64.msi"
|
|
11
11
|
},
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"name": "Claude Code CLI",
|
|
14
14
|
"displayName": "Claude Code CLI",
|
|
15
15
|
"version": "2.1.23",
|
|
16
|
-
"publishedAt": "2026-01-
|
|
16
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
17
17
|
"downloadUrl": "{{NEXUS_URL}}/storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/2.1.23/win32-x64/claude.exe",
|
|
18
18
|
"filename": "claude-2.1.23.exe"
|
|
19
19
|
},
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"name": "Ninja",
|
|
22
22
|
"displayName": "Ninja",
|
|
23
23
|
"version": "1.13.2",
|
|
24
|
-
"publishedAt": "2026-01-
|
|
24
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
25
25
|
"downloadUrl": "{{NEXUS_URL}}/github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-win.zip",
|
|
26
26
|
"filename": "ninja-1.13.2-win.zip"
|
|
27
27
|
},
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"name": "CMake",
|
|
30
30
|
"displayName": "CMake",
|
|
31
31
|
"version": "4.2.3",
|
|
32
|
-
"publishedAt": "2026-01-
|
|
32
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
33
33
|
"downloadUrl": "{{NEXUS_URL}}/github.com/Kitware/CMake/releases/download/v4.2.3/cmake-4.2.3-windows-x86_64.zip",
|
|
34
34
|
"filename": "cmake-4.2.3-windows-x86_64.zip"
|
|
35
35
|
},
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"name": "Git",
|
|
38
38
|
"displayName": "Git for Windows",
|
|
39
39
|
"version": "2.52.0.windows.1",
|
|
40
|
-
"publishedAt": "2026-01-
|
|
40
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
41
41
|
"downloadUrl": "{{NEXUS_URL}}/github.com/git-for-windows/git/releases/download/v2.52.0.windows.1/Git-2.52.0-64-bit.exe",
|
|
42
42
|
"filename": "Git-2.52.0-64-bit.exe"
|
|
43
43
|
},
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"name": "Clangd",
|
|
46
46
|
"displayName": "Clangd",
|
|
47
47
|
"version": "21.1.8",
|
|
48
|
-
"publishedAt": "2026-01-
|
|
48
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
49
49
|
"downloadUrl": "{{NEXUS_URL}}/github.com/clangd/clangd/releases/download/21.1.8/clangd-windows-21.1.8.zip",
|
|
50
50
|
"filename": "clangd-windows-21.1.8.zip"
|
|
51
51
|
},
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"name": "Wezterm",
|
|
54
54
|
"displayName": "Wezterm",
|
|
55
55
|
"version": "20240203-110809-5046fc22",
|
|
56
|
-
"publishedAt": "2026-01-
|
|
56
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
57
57
|
"downloadUrl": "{{NEXUS_URL}}/github.com/wezterm/wezterm/releases/download/20240203-110809-5046fc22/WezTerm-20240203-110809-5046fc22-setup.exe",
|
|
58
58
|
"filename": "WezTerm-20240203-110809-5046fc22-setup.exe"
|
|
59
59
|
},
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"name": "Ralphy",
|
|
62
62
|
"displayName": "Ralphy CLI",
|
|
63
63
|
"version": "4.7.1",
|
|
64
|
-
"publishedAt": "2026-01-
|
|
64
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
65
65
|
"type": "npm",
|
|
66
66
|
"package": "ralphy-cli"
|
|
67
67
|
},
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"name": "vscode-cpptools",
|
|
70
70
|
"displayName": "C/C++ Extension",
|
|
71
71
|
"version": "1.29.3",
|
|
72
|
-
"publishedAt": "2026-01-
|
|
72
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
73
73
|
"downloadUrl": "{{NEXUS_URL}}/github.com/microsoft/vscode-cpptools/releases/download/v1.29.3/cpptools-windows-x64.vsix",
|
|
74
74
|
"filename": "cpptools-windows-x64-1.29.3.vsix"
|
|
75
75
|
},
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"name": "vscode-clangd",
|
|
78
78
|
"displayName": "clangd Extension",
|
|
79
79
|
"version": "0.4.0",
|
|
80
|
-
"publishedAt": "2026-01-
|
|
80
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
81
81
|
"downloadUrl": "{{NEXUS_URL}}/github.com/clangd/vscode-clangd/releases/download/0.4.0/vscode-clangd-0.4.0.vsix",
|
|
82
82
|
"filename": "vscode-clangd-0.4.0.vsix"
|
|
83
83
|
},
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
"name": "Claude Code VSCode",
|
|
86
86
|
"displayName": "Claude Code Extension",
|
|
87
87
|
"version": "2.1.23",
|
|
88
|
-
"publishedAt": "2026-01-
|
|
88
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
89
89
|
"downloadUrl": "{{NEXUS_URL}}/github.com/lvntbkdmr/apps/releases/download/claude-code-vscode-v2.1.23/claude-code-2.1.23-win32-x64.vsix",
|
|
90
90
|
"filename": "claude-code-2.1.23-win32-x64.vsix"
|
|
91
91
|
},
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"name": "CMake Tools",
|
|
94
94
|
"displayName": "CMake Tools Extension",
|
|
95
95
|
"version": "1.22.26",
|
|
96
|
-
"publishedAt": "2026-01-
|
|
96
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
97
97
|
"downloadUrl": "{{NEXUS_URL}}/github.com/microsoft/vscode-cmake-tools/releases/download/v1.22.26/cmake-tools.vsix",
|
|
98
98
|
"filename": "cmake-tools-1.22.26.vsix"
|
|
99
99
|
},
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"name": "Roo Code",
|
|
102
102
|
"displayName": "Roo Code Extension",
|
|
103
103
|
"version": "3.45.0",
|
|
104
|
-
"publishedAt": "2026-01-
|
|
104
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
105
105
|
"downloadUrl": "{{NEXUS_URL}}/github.com/RooCodeInc/Roo-Code/releases/download/v3.45.0/roo-cline-3.45.0.vsix",
|
|
106
106
|
"filename": "roo-cline-3.45.0.vsix"
|
|
107
107
|
},
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"name": "Atlascode",
|
|
110
110
|
"displayName": "Atlassian Extension",
|
|
111
111
|
"version": "4.0.17",
|
|
112
|
-
"publishedAt": "2026-01-
|
|
112
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
113
113
|
"downloadUrl": "{{NEXUS_URL}}/github.com/atlassian/atlascode/releases/download/v4.0.17/atlascode-4.0.17.vsix",
|
|
114
114
|
"filename": "atlascode-4.0.17.vsix"
|
|
115
115
|
},
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
"name": "Zed",
|
|
118
118
|
"displayName": "Zed",
|
|
119
119
|
"version": "0.221.4",
|
|
120
|
-
"publishedAt": "2026-01-
|
|
120
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
121
121
|
"downloadUrl": "{{NEXUS_URL}}/github.com/zed-industries/zed/releases/download/v0.221.4/Zed-x86_64.exe",
|
|
122
122
|
"filename": "Zed-0.221.4-x86_64.exe"
|
|
123
123
|
},
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
"name": "Claude Code Router",
|
|
126
126
|
"displayName": "Claude Code Router",
|
|
127
127
|
"version": "2.0.0",
|
|
128
|
-
"publishedAt": "2026-01-
|
|
128
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
129
129
|
"type": "npm",
|
|
130
130
|
"package": "@musistudio/claude-code-router"
|
|
131
131
|
},
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
"name": "PowerShell",
|
|
134
134
|
"displayName": "PowerShell",
|
|
135
135
|
"version": "7.5.4",
|
|
136
|
-
"publishedAt": "2026-01-
|
|
136
|
+
"publishedAt": "2026-01-29T20:06:18.601Z",
|
|
137
137
|
"downloadUrl": "{{NEXUS_URL}}/github.com/PowerShell/PowerShell/releases/download/v7.5.4/PowerShell-7.5.4-win-x64.msi",
|
|
138
138
|
"filename": "PowerShell-7.5.4-win-x64.msi"
|
|
139
139
|
},
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"name": "Pylance",
|
|
142
142
|
"displayName": "Pylance",
|
|
143
143
|
"version": "2025.12.102",
|
|
144
|
-
"publishedAt": "2026-01-
|
|
144
|
+
"publishedAt": "2026-01-29T20:06:18.602Z",
|
|
145
145
|
"downloadUrl": "{{NEXUS_URL}}/github.com/lvntbkdmr/apps/releases/download/pylance-v2025.12.102/vscode-pylance-2025.12.102.vsix",
|
|
146
146
|
"filename": "vscode-pylance-2025.12.102.vsix"
|
|
147
147
|
}
|