claudeup 0.4.2 → 0.6.0

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.
Files changed (72) hide show
  1. package/package.json +30 -18
  2. package/dist/data/cli-tools.d.ts +0 -13
  3. package/dist/data/cli-tools.d.ts.map +0 -1
  4. package/dist/data/cli-tools.js +0 -113
  5. package/dist/data/cli-tools.js.map +0 -1
  6. package/dist/data/marketplaces.d.ts +0 -4
  7. package/dist/data/marketplaces.d.ts.map +0 -1
  8. package/dist/data/marketplaces.js +0 -26
  9. package/dist/data/marketplaces.js.map +0 -1
  10. package/dist/data/mcp-servers.d.ts +0 -8
  11. package/dist/data/mcp-servers.d.ts.map +0 -1
  12. package/dist/data/mcp-servers.js +0 -421
  13. package/dist/data/mcp-servers.js.map +0 -1
  14. package/dist/data/statuslines.d.ts +0 -10
  15. package/dist/data/statuslines.d.ts.map +0 -1
  16. package/dist/data/statuslines.js +0 -160
  17. package/dist/data/statuslines.js.map +0 -1
  18. package/dist/index.d.ts +0 -3
  19. package/dist/index.d.ts.map +0 -1
  20. package/dist/index.js.map +0 -1
  21. package/dist/services/claude-settings.d.ts +0 -49
  22. package/dist/services/claude-settings.d.ts.map +0 -1
  23. package/dist/services/claude-settings.js +0 -299
  24. package/dist/services/claude-settings.js.map +0 -1
  25. package/dist/services/mcp-registry.d.ts +0 -10
  26. package/dist/services/mcp-registry.d.ts.map +0 -1
  27. package/dist/services/mcp-registry.js +0 -88
  28. package/dist/services/mcp-registry.js.map +0 -1
  29. package/dist/services/plugin-manager.d.ts +0 -23
  30. package/dist/services/plugin-manager.d.ts.map +0 -1
  31. package/dist/services/plugin-manager.js +0 -151
  32. package/dist/services/plugin-manager.js.map +0 -1
  33. package/dist/types/index.d.ts +0 -86
  34. package/dist/types/index.d.ts.map +0 -1
  35. package/dist/types/index.js +0 -2
  36. package/dist/types/index.js.map +0 -1
  37. package/dist/ui/app.d.ts +0 -38
  38. package/dist/ui/app.d.ts.map +0 -1
  39. package/dist/ui/app.js +0 -565
  40. package/dist/ui/app.js.map +0 -1
  41. package/dist/ui/screens/cli-tools.d.ts +0 -4
  42. package/dist/ui/screens/cli-tools.d.ts.map +0 -1
  43. package/dist/ui/screens/cli-tools.js +0 -331
  44. package/dist/ui/screens/cli-tools.js.map +0 -1
  45. package/dist/ui/screens/env-vars.d.ts +0 -3
  46. package/dist/ui/screens/env-vars.d.ts.map +0 -1
  47. package/dist/ui/screens/env-vars.js +0 -119
  48. package/dist/ui/screens/env-vars.js.map +0 -1
  49. package/dist/ui/screens/main-menu.d.ts +0 -3
  50. package/dist/ui/screens/main-menu.d.ts.map +0 -1
  51. package/dist/ui/screens/main-menu.js +0 -110
  52. package/dist/ui/screens/main-menu.js.map +0 -1
  53. package/dist/ui/screens/marketplace.d.ts +0 -3
  54. package/dist/ui/screens/marketplace.d.ts.map +0 -1
  55. package/dist/ui/screens/marketplace.js +0 -132
  56. package/dist/ui/screens/marketplace.js.map +0 -1
  57. package/dist/ui/screens/mcp-registry.d.ts +0 -10
  58. package/dist/ui/screens/mcp-registry.d.ts.map +0 -1
  59. package/dist/ui/screens/mcp-registry.js +0 -310
  60. package/dist/ui/screens/mcp-registry.js.map +0 -1
  61. package/dist/ui/screens/mcp-setup.d.ts +0 -4
  62. package/dist/ui/screens/mcp-setup.d.ts.map +0 -1
  63. package/dist/ui/screens/mcp-setup.js +0 -492
  64. package/dist/ui/screens/mcp-setup.js.map +0 -1
  65. package/dist/ui/screens/plugins.d.ts +0 -3
  66. package/dist/ui/screens/plugins.d.ts.map +0 -1
  67. package/dist/ui/screens/plugins.js +0 -449
  68. package/dist/ui/screens/plugins.js.map +0 -1
  69. package/dist/ui/screens/statusline.d.ts +0 -5
  70. package/dist/ui/screens/statusline.d.ts.map +0 -1
  71. package/dist/ui/screens/statusline.js +0 -235
  72. package/dist/ui/screens/statusline.js.map +0 -1
@@ -1,331 +0,0 @@
1
- import blessed from 'neo-blessed';
2
- import { exec, execSync } from 'child_process';
3
- import { promisify } from 'util';
4
- import { createHeader, createFooter, showMessage } from '../app.js';
5
- import { cliTools } from '../../data/cli-tools.js';
6
- const execAsync = promisify(exec);
7
- // Session-level cache for tool statuses (persists until explicit refresh)
8
- let cachedToolStatuses = null;
9
- let cacheInitialized = false;
10
- export function clearCliToolsCache() {
11
- cachedToolStatuses = null;
12
- cacheInitialized = false;
13
- }
14
- function parseVersion(versionOutput) {
15
- // Extract version number from various formats like "v1.2.3", "1.2.3", "aider 0.82.0"
16
- const match = versionOutput.match(/v?(\d+\.\d+\.\d+(?:-[\w.]+)?)/);
17
- return match ? match[1] : undefined;
18
- }
19
- async function getInstalledVersion(tool) {
20
- try {
21
- const { stdout } = await execAsync(tool.checkCommand, { timeout: 5000 });
22
- return parseVersion(stdout.trim());
23
- }
24
- catch {
25
- return undefined;
26
- }
27
- }
28
- async function getLatestNpmVersion(packageName) {
29
- try {
30
- const { stdout } = await execAsync(`npm view ${packageName} version 2>/dev/null`, { timeout: 10000 });
31
- return stdout.trim() || undefined;
32
- }
33
- catch {
34
- return undefined;
35
- }
36
- }
37
- async function getLatestPipVersion(packageName) {
38
- try {
39
- const { stdout } = await execAsync(`pip index versions ${packageName} 2>/dev/null | head -1`, {
40
- timeout: 10000,
41
- shell: '/bin/bash',
42
- });
43
- const match = stdout.trim().match(/\(([^)]+)\)/);
44
- return match ? match[1] : undefined;
45
- }
46
- catch {
47
- return undefined;
48
- }
49
- }
50
- async function getLatestVersion(tool) {
51
- if (tool.packageManager === 'npm') {
52
- return getLatestNpmVersion(tool.packageName);
53
- }
54
- else {
55
- return getLatestPipVersion(tool.packageName);
56
- }
57
- }
58
- function compareVersions(v1, v2) {
59
- const parts1 = v1.split(/[-.]/).map((p) => parseInt(p, 10) || 0);
60
- const parts2 = v2.split(/[-.]/).map((p) => parseInt(p, 10) || 0);
61
- for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
62
- const p1 = parts1[i] || 0;
63
- const p2 = parts2[i] || 0;
64
- if (p1 < p2)
65
- return -1;
66
- if (p1 > p2)
67
- return 1;
68
- }
69
- return 0;
70
- }
71
- export async function createCliToolsScreen(state) {
72
- createHeader(state, 'CLI Tools');
73
- // Use cached tool statuses if available, otherwise initialize
74
- const toolStatuses = cachedToolStatuses || cliTools.map((tool) => ({
75
- tool,
76
- installed: false,
77
- installedVersion: undefined,
78
- checking: true,
79
- }));
80
- // Store reference for caching
81
- if (!cachedToolStatuses) {
82
- cachedToolStatuses = toolStatuses;
83
- }
84
- // Build list items
85
- const buildListItems = () => {
86
- return toolStatuses.map((status) => {
87
- let icon;
88
- let versionInfo = '';
89
- let badge = '';
90
- if (!status.installed) {
91
- icon = '{gray-fg}○{/gray-fg}';
92
- if (status.checking) {
93
- badge = ' {gray-fg}...{/gray-fg}';
94
- }
95
- else if (status.latestVersion) {
96
- versionInfo = ` {gray-fg}v${status.latestVersion}{/gray-fg}`;
97
- }
98
- }
99
- else if (status.checking) {
100
- icon = '{green-fg}●{/green-fg}';
101
- versionInfo = ` {green-fg}v${status.installedVersion}{/green-fg}`;
102
- badge = ' {gray-fg}...{/gray-fg}';
103
- }
104
- else if (status.hasUpdate) {
105
- icon = '{yellow-fg}↑{/yellow-fg}';
106
- versionInfo = ` {yellow-fg}v${status.installedVersion}{/yellow-fg}`;
107
- badge = ` {cyan-fg}→ v${status.latestVersion}{/cyan-fg}`;
108
- }
109
- else {
110
- icon = '{green-fg}●{/green-fg}';
111
- versionInfo = ` {green-fg}v${status.installedVersion}{/green-fg}`;
112
- badge = ' {cyan-fg}(up-to-date){/cyan-fg}';
113
- }
114
- return `${icon} {bold}${status.tool.displayName}{/bold}${versionInfo}${badge}`;
115
- });
116
- };
117
- // List
118
- const list = blessed.list({
119
- parent: state.screen,
120
- top: 3,
121
- left: 2,
122
- width: '50%-2',
123
- height: '100%-5',
124
- items: buildListItems(),
125
- keys: true,
126
- vi: false,
127
- mouse: true,
128
- tags: true,
129
- scrollable: true,
130
- border: { type: 'line' },
131
- style: {
132
- selected: { bg: 'magenta', fg: 'white' },
133
- border: { fg: 'gray' },
134
- },
135
- scrollbar: { ch: '|', style: { bg: 'gray' } },
136
- label: ' AI Coding Tools ',
137
- });
138
- // Detail panel
139
- const detailBox = blessed.box({
140
- parent: state.screen,
141
- top: 3,
142
- right: 2,
143
- width: '50%-2',
144
- height: '100%-5',
145
- content: '',
146
- tags: true,
147
- border: { type: 'line' },
148
- style: { border: { fg: 'gray' } },
149
- label: ' Details ',
150
- });
151
- // Update detail panel
152
- const updateDetail = () => {
153
- const selected = list.selected;
154
- const status = toolStatuses[selected];
155
- if (!status)
156
- return;
157
- const { tool, installed, installedVersion, latestVersion, hasUpdate, checking } = status;
158
- let statusText;
159
- if (!installed) {
160
- statusText = '{gray-fg}Not installed{/gray-fg}';
161
- }
162
- else if (checking) {
163
- statusText = '{green-fg}Installed{/green-fg} {gray-fg}(checking for updates...){/gray-fg}';
164
- }
165
- else if (hasUpdate) {
166
- statusText = '{yellow-fg}Update available{/yellow-fg}';
167
- }
168
- else {
169
- statusText = '{green-fg}Up to date{/green-fg}';
170
- }
171
- let versionText = '';
172
- if (installedVersion) {
173
- versionText += `{bold}Installed:{/bold} {green-fg}v${installedVersion}{/green-fg}\n`;
174
- }
175
- if (latestVersion) {
176
- versionText += `{bold}Latest:{/bold} {cyan-fg}v${latestVersion}{/cyan-fg}\n`;
177
- }
178
- else if (checking) {
179
- versionText += `{bold}Latest:{/bold} {gray-fg}checking...{/gray-fg}\n`;
180
- }
181
- let actionText;
182
- if (!installed) {
183
- actionText = '{green-fg}Press Enter to install{/green-fg}';
184
- }
185
- else if (hasUpdate) {
186
- actionText = '{yellow-fg}Press Enter to update{/yellow-fg}';
187
- }
188
- else {
189
- actionText = '{gray-fg}Press Enter to reinstall{/gray-fg}';
190
- }
191
- const content = `
192
- {bold}{cyan-fg}${tool.displayName}{/cyan-fg}{/bold}
193
-
194
- ${tool.description}
195
-
196
- {bold}Status:{/bold} ${statusText}
197
- ${versionText}
198
- {bold}Install:{/bold}
199
- {gray-fg}${tool.installCommand}{/gray-fg}
200
-
201
- {bold}Website:{/bold}
202
- {cyan-fg}${tool.website}{/cyan-fg}
203
-
204
- ${actionText}
205
- `.trim();
206
- detailBox.setContent(content);
207
- state.screen.render();
208
- };
209
- list.on('select item', updateDetail);
210
- setTimeout(updateDetail, 0);
211
- // Refresh list display
212
- const refreshList = () => {
213
- const items = buildListItems();
214
- for (let i = 0; i < items.length; i++) {
215
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
216
- list.setItem(i, items[i]);
217
- }
218
- updateDetail();
219
- state.screen.render();
220
- };
221
- // Fetch all version info asynchronously
222
- const fetchVersionInfo = async () => {
223
- // First, check installed versions in parallel (fast, local)
224
- const installedChecks = toolStatuses.map(async (status) => {
225
- const installed = await getInstalledVersion(status.tool);
226
- status.installedVersion = installed;
227
- status.installed = installed !== undefined;
228
- refreshList();
229
- });
230
- // Don't wait for all installed checks - start fetching latest versions immediately
231
- // This runs both in parallel for maximum speed
232
- const latestChecks = toolStatuses.map(async (status) => {
233
- try {
234
- const latest = await getLatestVersion(status.tool);
235
- status.latestVersion = latest;
236
- status.checking = false;
237
- if (status.installedVersion && latest) {
238
- status.hasUpdate = compareVersions(status.installedVersion, latest) < 0;
239
- }
240
- }
241
- catch {
242
- status.checking = false;
243
- }
244
- refreshList();
245
- });
246
- // Wait for all to complete
247
- await Promise.all([...installedChecks, ...latestChecks]);
248
- };
249
- // Start async version fetching only if not already cached
250
- if (!cacheInitialized) {
251
- cacheInitialized = true;
252
- fetchVersionInfo();
253
- }
254
- // Install/Update on Enter
255
- list.on('select', async (_item, index) => {
256
- const status = toolStatuses[index];
257
- if (!status)
258
- return;
259
- const { tool, installed, hasUpdate } = status;
260
- const action = !installed ? 'Installing' : hasUpdate ? 'Updating' : 'Reinstalling';
261
- await showMessage(state, action, `Running: ${tool.installCommand}\n\nThis may take a moment...`, 'info');
262
- try {
263
- execSync(tool.installCommand, {
264
- encoding: 'utf-8',
265
- stdio: 'inherit',
266
- shell: '/bin/bash',
267
- });
268
- await showMessage(state, 'Success', `${tool.displayName} has been ${action.toLowerCase().replace('ing', 'ed')}.`, 'success');
269
- }
270
- catch (error) {
271
- await showMessage(state, 'Error', `Failed to install ${tool.displayName}.\n\nTry running manually:\n${tool.installCommand}`, 'error');
272
- }
273
- // Clear cache and refresh screen to detect new version
274
- clearCliToolsCache();
275
- createCliToolsScreen(state);
276
- });
277
- // Navigation
278
- list.key(['j'], () => {
279
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
280
- list.down();
281
- state.screen.render();
282
- });
283
- list.key(['k'], () => {
284
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
285
- list.up();
286
- state.screen.render();
287
- });
288
- // Refresh - clear cache and reload
289
- list.key(['r'], () => {
290
- clearCliToolsCache();
291
- createCliToolsScreen(state);
292
- });
293
- // Update all
294
- list.key(['a'], async () => {
295
- const updatable = toolStatuses.filter((s) => s.hasUpdate);
296
- if (updatable.length === 0) {
297
- await showMessage(state, 'All Up to Date', 'All tools are at the latest version.', 'info');
298
- return;
299
- }
300
- await showMessage(state, 'Updating All', `Updating ${updatable.length} tool(s)...\n\nThis may take a while.`, 'info');
301
- for (const status of updatable) {
302
- try {
303
- execSync(status.tool.installCommand, {
304
- encoding: 'utf-8',
305
- stdio: 'inherit',
306
- shell: '/bin/bash',
307
- });
308
- }
309
- catch {
310
- // Continue with other updates
311
- }
312
- }
313
- await showMessage(state, 'Done', `Updated ${updatable.length} tool(s).`, 'success');
314
- clearCliToolsCache();
315
- createCliToolsScreen(state);
316
- });
317
- // Legend
318
- blessed.box({
319
- parent: state.screen,
320
- bottom: 1,
321
- right: 2,
322
- width: 55,
323
- height: 1,
324
- content: '{green-fg}●{/green-fg} Up-to-date {yellow-fg}↑{/yellow-fg} Update available {gray-fg}○{/gray-fg} Not installed',
325
- tags: true,
326
- });
327
- createFooter(state, '↑↓ Navigate │ Enter Install/Update │ a Update All │ r Refresh │ q Back');
328
- list.focus();
329
- state.screen.render();
330
- }
331
- //# sourceMappingURL=cli-tools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-tools.js","sourceRoot":"","sources":["../../../src/ui/screens/cli-tools.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { AppState } from '../app.js';
2
- export declare function createEnvVarsScreen(state: AppState): Promise<void>;
3
- //# sourceMappingURL=env-vars.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env-vars.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/env-vars.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAc1C,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA6IxE"}
@@ -1,119 +0,0 @@
1
- import blessed from 'neo-blessed';
2
- import { createHeader, createFooter, showMessage, showConfirm, showInput, } from '../app.js';
3
- import { getMcpEnvVars, setMcpEnvVar, removeMcpEnvVar, } from '../../services/claude-settings.js';
4
- export async function createEnvVarsScreen(state) {
5
- createHeader(state, 'Environment Variables');
6
- const envVars = await getMcpEnvVars(state.projectPath);
7
- const envVarNames = Object.keys(envVars);
8
- // Info box
9
- blessed.box({
10
- parent: state.screen,
11
- top: 3,
12
- left: 2,
13
- width: '100%-4',
14
- height: 3,
15
- tags: true,
16
- border: { type: 'line' },
17
- style: { border: { fg: 'gray' } },
18
- content: '{gray-fg}Environment variables stored in .claude/settings.local.json{/gray-fg}',
19
- });
20
- const listItems = [];
21
- if (envVarNames.length === 0) {
22
- listItems.push({
23
- label: '{gray-fg}No environment variables configured{/gray-fg}',
24
- });
25
- }
26
- else {
27
- for (const varName of envVarNames) {
28
- const value = envVars[varName];
29
- const masked = value.length > 30 ? value.slice(0, 30) + '...' : value;
30
- listItems.push({
31
- label: `{cyan-fg}${varName}{/cyan-fg} = {gray-fg}"${masked}"{/gray-fg}`,
32
- varName,
33
- });
34
- }
35
- }
36
- const list = blessed.list({
37
- parent: state.screen,
38
- top: 6,
39
- left: 2,
40
- width: '100%-4',
41
- height: '100%-9',
42
- items: listItems.map((item) => item.label),
43
- keys: true,
44
- mouse: true,
45
- tags: true,
46
- scrollable: true,
47
- border: { type: 'line' },
48
- style: {
49
- selected: { bg: 'blue', fg: 'white' },
50
- border: { fg: 'gray' },
51
- },
52
- scrollbar: { ch: '|', style: { bg: 'gray' } },
53
- });
54
- // Add new variable with 'a' key
55
- list.key(['a'], async () => {
56
- const varName = await showInput(state, 'Add Variable', 'Variable name:');
57
- if (varName === null || !varName.trim())
58
- return;
59
- const cleanName = varName.trim().toUpperCase().replace(/[^A-Z0-9_]/g, '_');
60
- // Check if already exists
61
- if (envVars[cleanName]) {
62
- const overwrite = await showConfirm(state, `${cleanName} exists`, 'Overwrite existing value?');
63
- if (!overwrite)
64
- return;
65
- }
66
- const value = await showInput(state, `Set ${cleanName}`, 'Value:');
67
- if (value === null)
68
- return;
69
- await setMcpEnvVar(cleanName, value, state.projectPath);
70
- await showMessage(state, 'Added', `${cleanName} added.\nRestart Claude Code to apply.`, 'success');
71
- createEnvVarsScreen(state);
72
- });
73
- // Edit selected variable with Enter or 'e'
74
- const editSelected = async () => {
75
- const selected = list.selected;
76
- const item = listItems[selected];
77
- if (!item?.varName)
78
- return;
79
- const varName = item.varName;
80
- const currentValue = envVars[varName];
81
- const newValue = await showInput(state, `Edit ${varName}`, 'New value:', currentValue);
82
- if (newValue === null)
83
- return;
84
- await setMcpEnvVar(varName, newValue, state.projectPath);
85
- await showMessage(state, 'Updated', `${varName} updated.\nRestart Claude Code to apply.`, 'success');
86
- createEnvVarsScreen(state);
87
- };
88
- list.on('select', editSelected);
89
- list.key(['e'], editSelected);
90
- // Delete with 'd' key
91
- list.key(['d'], async () => {
92
- const selected = list.selected;
93
- const item = listItems[selected];
94
- if (!item?.varName)
95
- return;
96
- const varName = item.varName;
97
- const confirmDelete = await showConfirm(state, `Delete ${varName}?`, 'This will remove the variable from configuration.');
98
- if (confirmDelete) {
99
- await removeMcpEnvVar(varName, state.projectPath);
100
- await showMessage(state, 'Deleted', `${varName} removed.`, 'success');
101
- createEnvVarsScreen(state);
102
- }
103
- });
104
- // Navigation
105
- list.key(['j'], () => {
106
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
107
- list.down();
108
- state.screen.render();
109
- });
110
- list.key(['k'], () => {
111
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
112
- list.up();
113
- state.screen.render();
114
- });
115
- createFooter(state, '↑↓ Navigate │ Enter/e Edit │ a Add │ d Delete │ q Back');
116
- list.focus();
117
- state.screen.render();
118
- }
119
- //# sourceMappingURL=env-vars.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env-vars.js","sourceRoot":"","sources":["../../../src/ui/screens/env-vars.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { AppState } from '../app.js';
2
- export declare function createMainMenu(state: AppState): Promise<void>;
3
- //# sourceMappingURL=main-menu.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main-menu.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/main-menu.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAsC1C,wBAAsB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFnE"}
@@ -1,110 +0,0 @@
1
- import blessed from 'neo-blessed';
2
- import { navigateTo, createHeader, createFooter } from '../app.js';
3
- import { hasClaudeDir } from '../../services/claude-settings.js';
4
- const menuItems = [
5
- {
6
- label: 'Plugins & Marketplaces',
7
- screen: 'plugins',
8
- description: 'Manage plugin marketplaces and installed plugins',
9
- icon: '📦',
10
- },
11
- {
12
- label: 'MCP Servers',
13
- screen: 'mcp',
14
- description: 'Setup and manage Model Context Protocol servers',
15
- icon: '🔌',
16
- },
17
- {
18
- label: 'Status Line',
19
- screen: 'statusline',
20
- description: 'Configure status line display format',
21
- icon: '📊',
22
- },
23
- {
24
- label: 'CLI Tools',
25
- screen: 'cli-tools',
26
- description: 'Install and update AI coding CLI tools',
27
- icon: '🛠️',
28
- },
29
- ];
30
- export async function createMainMenu(state) {
31
- createHeader(state, 'Claude Code Configuration');
32
- // Project status
33
- const hasProject = await hasClaudeDir(state.projectPath);
34
- const statusText = hasProject
35
- ? '{green-fg}✓ Project configured{/green-fg}'
36
- : '{yellow-fg}○ New project{/yellow-fg}';
37
- blessed.box({
38
- parent: state.screen,
39
- top: 3,
40
- left: 2,
41
- width: '100%-4',
42
- height: 3,
43
- content: `Working directory: {bold}${state.projectPath}{/bold}\nStatus: ${statusText}`,
44
- tags: true,
45
- });
46
- // Menu list
47
- const list = blessed.list({
48
- parent: state.screen,
49
- top: 7,
50
- left: 2,
51
- width: '100%-4',
52
- height: menuItems.length + 2,
53
- items: menuItems.map((item) => ` ${item.icon} ${item.label}`),
54
- keys: true,
55
- vi: true,
56
- mouse: true,
57
- border: {
58
- type: 'line',
59
- },
60
- style: {
61
- selected: {
62
- bg: 'blue',
63
- fg: 'white',
64
- bold: true,
65
- },
66
- border: {
67
- fg: 'cyan',
68
- },
69
- },
70
- });
71
- // Description box
72
- const descBox = blessed.box({
73
- parent: state.screen,
74
- top: 8 + menuItems.length + 2,
75
- left: 2,
76
- width: '100%-4',
77
- height: 3,
78
- content: '',
79
- tags: true,
80
- style: {
81
- fg: 'gray',
82
- },
83
- });
84
- // Update description on selection change
85
- const updateDescription = () => {
86
- const selected = list.selected;
87
- if (menuItems[selected]) {
88
- descBox.setContent(` ${menuItems[selected].description}`);
89
- state.screen.render();
90
- }
91
- };
92
- list.on('select item', updateDescription);
93
- updateDescription();
94
- // Handle selection
95
- list.on('select', (_item, index) => {
96
- const menuItem = menuItems[index];
97
- if (menuItem) {
98
- navigateTo(state, menuItem.screen);
99
- }
100
- });
101
- // Number key shortcuts
102
- state.screen.key(['1'], () => navigateTo(state, 'plugins'));
103
- state.screen.key(['2'], () => navigateTo(state, 'mcp'));
104
- state.screen.key(['3'], () => navigateTo(state, 'statusline'));
105
- state.screen.key(['4'], () => navigateTo(state, 'cli-tools'));
106
- createFooter(state, '↑↓ Navigate | Enter Select | 1-4 Quick Jump | q Quit | ? Help');
107
- list.focus();
108
- state.screen.render();
109
- }
110
- //# sourceMappingURL=main-menu.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main-menu.js","sourceRoot":"","sources":["../../../src/ui/screens/main-menu.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { AppState } from '../app.js';
2
- export declare function createMarketplaceScreen(state: AppState): Promise<void>;
3
- //# sourceMappingURL=marketplace.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/marketplace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAS1C,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA6K5E"}