claudeup 0.1.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 (71) hide show
  1. package/README.md +91 -0
  2. package/bin/claudeup.js +6 -0
  3. package/dist/data/cli-tools.d.ts +13 -0
  4. package/dist/data/cli-tools.d.ts.map +1 -0
  5. package/dist/data/cli-tools.js +91 -0
  6. package/dist/data/cli-tools.js.map +1 -0
  7. package/dist/data/marketplaces.d.ts +4 -0
  8. package/dist/data/marketplaces.d.ts.map +1 -0
  9. package/dist/data/marketplaces.js +26 -0
  10. package/dist/data/marketplaces.js.map +1 -0
  11. package/dist/data/mcp-servers.d.ts +8 -0
  12. package/dist/data/mcp-servers.d.ts.map +1 -0
  13. package/dist/data/mcp-servers.js +421 -0
  14. package/dist/data/mcp-servers.js.map +1 -0
  15. package/dist/data/statuslines.d.ts +10 -0
  16. package/dist/data/statuslines.d.ts.map +1 -0
  17. package/dist/data/statuslines.js +160 -0
  18. package/dist/data/statuslines.js.map +1 -0
  19. package/dist/index.d.ts +3 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +12 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/services/claude-settings.d.ts +31 -0
  24. package/dist/services/claude-settings.d.ts.map +1 -0
  25. package/dist/services/claude-settings.js +177 -0
  26. package/dist/services/claude-settings.js.map +1 -0
  27. package/dist/services/mcp-registry.d.ts +10 -0
  28. package/dist/services/mcp-registry.d.ts.map +1 -0
  29. package/dist/services/mcp-registry.js +88 -0
  30. package/dist/services/mcp-registry.js.map +1 -0
  31. package/dist/services/plugin-manager.d.ts +22 -0
  32. package/dist/services/plugin-manager.d.ts.map +1 -0
  33. package/dist/services/plugin-manager.js +115 -0
  34. package/dist/services/plugin-manager.js.map +1 -0
  35. package/dist/types/index.d.ts +83 -0
  36. package/dist/types/index.d.ts.map +1 -0
  37. package/dist/types/index.js +2 -0
  38. package/dist/types/index.js.map +1 -0
  39. package/dist/ui/app.d.ts +28 -0
  40. package/dist/ui/app.d.ts.map +1 -0
  41. package/dist/ui/app.js +408 -0
  42. package/dist/ui/app.js.map +1 -0
  43. package/dist/ui/screens/cli-tools.d.ts +3 -0
  44. package/dist/ui/screens/cli-tools.d.ts.map +1 -0
  45. package/dist/ui/screens/cli-tools.js +314 -0
  46. package/dist/ui/screens/cli-tools.js.map +1 -0
  47. package/dist/ui/screens/main-menu.d.ts +3 -0
  48. package/dist/ui/screens/main-menu.d.ts.map +1 -0
  49. package/dist/ui/screens/main-menu.js +110 -0
  50. package/dist/ui/screens/main-menu.js.map +1 -0
  51. package/dist/ui/screens/marketplace.d.ts +3 -0
  52. package/dist/ui/screens/marketplace.d.ts.map +1 -0
  53. package/dist/ui/screens/marketplace.js +132 -0
  54. package/dist/ui/screens/marketplace.js.map +1 -0
  55. package/dist/ui/screens/mcp-registry.d.ts +10 -0
  56. package/dist/ui/screens/mcp-registry.d.ts.map +1 -0
  57. package/dist/ui/screens/mcp-registry.js +310 -0
  58. package/dist/ui/screens/mcp-registry.js.map +1 -0
  59. package/dist/ui/screens/mcp-setup.d.ts +4 -0
  60. package/dist/ui/screens/mcp-setup.d.ts.map +1 -0
  61. package/dist/ui/screens/mcp-setup.js +417 -0
  62. package/dist/ui/screens/mcp-setup.js.map +1 -0
  63. package/dist/ui/screens/plugins.d.ts +3 -0
  64. package/dist/ui/screens/plugins.d.ts.map +1 -0
  65. package/dist/ui/screens/plugins.js +330 -0
  66. package/dist/ui/screens/plugins.js.map +1 -0
  67. package/dist/ui/screens/statusline.d.ts +5 -0
  68. package/dist/ui/screens/statusline.d.ts.map +1 -0
  69. package/dist/ui/screens/statusline.js +235 -0
  70. package/dist/ui/screens/statusline.js.map +1 -0
  71. package/package.json +58 -0
package/dist/ui/app.js ADDED
@@ -0,0 +1,408 @@
1
+ import blessed from 'neo-blessed';
2
+ import { createMainMenu } from './screens/main-menu.js';
3
+ import { createMcpScreen } from './screens/mcp-setup.js';
4
+ import { createPluginsScreen } from './screens/plugins.js';
5
+ import { createStatusLineScreen } from './screens/statusline.js';
6
+ // Claude Code color palette
7
+ export const colors = {
8
+ primary: 'cyan',
9
+ secondary: 'magenta',
10
+ success: 'green',
11
+ warning: 'yellow',
12
+ error: 'red',
13
+ muted: 'gray',
14
+ bg: 'black',
15
+ fg: 'white',
16
+ };
17
+ export function createApp() {
18
+ const screen = blessed.screen({
19
+ smartCSR: true,
20
+ title: 'claudeup',
21
+ fullUnicode: true,
22
+ });
23
+ const state = {
24
+ screen,
25
+ currentScreen: 'plugins', // Default to plugins screen
26
+ projectPath: process.cwd(),
27
+ isSearching: false,
28
+ };
29
+ // Global key bindings - check isSearching to prevent conflicts
30
+ screen.key(['escape', 'q', 'C-c'], () => {
31
+ if (state.isSearching)
32
+ return; // Let search handler handle escape
33
+ if (state.currentScreen === 'plugins') {
34
+ process.exit(0);
35
+ }
36
+ else {
37
+ navigateTo(state, 'plugins');
38
+ }
39
+ });
40
+ screen.key(['?'], () => {
41
+ if (state.isSearching)
42
+ return;
43
+ showHelp(state);
44
+ });
45
+ // Quick navigation keys - disabled during search or in sub-screens
46
+ const isTopLevelScreen = (screen) => {
47
+ return ['plugins', 'mcp', 'statusline', 'cli-tools'].includes(screen);
48
+ };
49
+ screen.key(['1'], () => {
50
+ if (state.isSearching || !isTopLevelScreen(state.currentScreen))
51
+ return;
52
+ navigateTo(state, 'plugins');
53
+ });
54
+ screen.key(['2'], () => {
55
+ if (state.isSearching || !isTopLevelScreen(state.currentScreen))
56
+ return;
57
+ navigateTo(state, 'mcp');
58
+ });
59
+ screen.key(['3'], () => {
60
+ if (state.isSearching || !isTopLevelScreen(state.currentScreen))
61
+ return;
62
+ navigateTo(state, 'statusline');
63
+ });
64
+ screen.key(['4'], () => {
65
+ if (state.isSearching || !isTopLevelScreen(state.currentScreen))
66
+ return;
67
+ navigateTo(state, 'cli-tools');
68
+ });
69
+ return state;
70
+ }
71
+ export async function navigateTo(state, screen) {
72
+ // Clear current screen content - destroy all children
73
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
74
+ const children = [...state.screen.children];
75
+ for (const child of children) {
76
+ if (child.type !== 'screen') {
77
+ child.detach();
78
+ child.destroy();
79
+ }
80
+ }
81
+ // Remove all global screen key bindings to prevent cross-screen contamination
82
+ // This removes keys like 'r' for refresh that were set by plugins screen
83
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
84
+ const scr = state.screen;
85
+ if (scr.unkey && typeof scr.unkey === 'function') {
86
+ // Remove common global keys that might have been set
87
+ try {
88
+ scr.unkey(['r']);
89
+ scr.unkey(['u']);
90
+ scr.unkey(['d']);
91
+ scr.unkey(['a']);
92
+ }
93
+ catch (e) {
94
+ // Ignore errors if keys weren't bound
95
+ }
96
+ }
97
+ // Force clear and redraw the screen
98
+ if (scr.clearRegion) {
99
+ scr.clearRegion(0, scr.width, 0, scr.height);
100
+ }
101
+ if (scr.realloc) {
102
+ scr.realloc();
103
+ }
104
+ state.currentScreen = screen;
105
+ switch (screen) {
106
+ case 'main':
107
+ createMainMenu(state);
108
+ break;
109
+ case 'mcp':
110
+ await createMcpScreen(state);
111
+ break;
112
+ case 'mcp-registry':
113
+ const { createMcpRegistryScreen } = await import('./screens/mcp-registry.js');
114
+ await createMcpRegistryScreen(state);
115
+ break;
116
+ case 'plugins':
117
+ await createPluginsScreen(state);
118
+ break;
119
+ case 'statusline':
120
+ await createStatusLineScreen(state);
121
+ break;
122
+ case 'cli-tools':
123
+ const { createCliToolsScreen } = await import('./screens/cli-tools.js');
124
+ await createCliToolsScreen(state);
125
+ break;
126
+ }
127
+ state.screen.render();
128
+ }
129
+ export function showHelp(state) {
130
+ const helpBox = blessed.box({
131
+ parent: state.screen,
132
+ top: 'center',
133
+ left: 'center',
134
+ width: 60,
135
+ height: 20,
136
+ content: `
137
+ {center}{bold}{cyan-fg}claudeup{/cyan-fg} Help{/bold}{/center}
138
+
139
+ {bold}Navigation{/bold}
140
+ {cyan-fg}↑/↓{/cyan-fg} {gray-fg}or{/gray-fg} {cyan-fg}j/k{/cyan-fg} Move selection
141
+ {cyan-fg}Enter{/cyan-fg} Select / Toggle
142
+ {cyan-fg}Escape{/cyan-fg} {gray-fg}or{/gray-fg} {cyan-fg}q{/cyan-fg} Back / Quit
143
+ {cyan-fg}?{/cyan-fg} This help
144
+
145
+ {bold}Quick Navigation{/bold}
146
+ {cyan-fg}1{/cyan-fg} Plugins {cyan-fg}3{/cyan-fg} Status Line
147
+ {cyan-fg}2{/cyan-fg} MCP Servers {cyan-fg}4{/cyan-fg} CLI Tools
148
+
149
+ {bold}Plugin Actions{/bold}
150
+ {cyan-fg}u{/cyan-fg} Update {cyan-fg}d{/cyan-fg} Uninstall
151
+ {cyan-fg}a{/cyan-fg} Update All {cyan-fg}r{/cyan-fg} Refresh
152
+
153
+ {bold}MCP Servers{/bold}
154
+ {cyan-fg}/{/cyan-fg} Search local + remote
155
+ {cyan-fg}r{/cyan-fg} Browse MCP registry
156
+ `.trim(),
157
+ tags: true,
158
+ border: {
159
+ type: 'line',
160
+ },
161
+ style: {
162
+ border: {
163
+ fg: 'cyan',
164
+ },
165
+ },
166
+ });
167
+ helpBox.key(['escape', 'q', 'enter', '?'], () => {
168
+ helpBox.destroy();
169
+ state.screen.render();
170
+ });
171
+ helpBox.focus();
172
+ state.screen.render();
173
+ }
174
+ export function showMessage(state, title, message, type = 'info') {
175
+ return new Promise((resolve) => {
176
+ const borderColors = {
177
+ info: 'cyan',
178
+ success: 'green',
179
+ error: 'red',
180
+ };
181
+ const icons = {
182
+ info: 'ℹ',
183
+ success: '✓',
184
+ error: '✗',
185
+ };
186
+ const msgBox = blessed.box({
187
+ parent: state.screen,
188
+ top: 'center',
189
+ left: 'center',
190
+ width: 'shrink',
191
+ height: 'shrink',
192
+ padding: { left: 2, right: 2, top: 1, bottom: 1 },
193
+ content: `{center}{bold}${icons[type]} ${title}{/bold}{/center}\n\n${message}\n\n{center}{gray-fg}Enter to continue{/gray-fg}{/center}`,
194
+ tags: true,
195
+ border: {
196
+ type: 'line',
197
+ },
198
+ style: {
199
+ border: {
200
+ fg: borderColors[type],
201
+ },
202
+ },
203
+ });
204
+ msgBox.key(['escape', 'q', 'enter'], () => {
205
+ msgBox.destroy();
206
+ state.screen.render();
207
+ resolve();
208
+ });
209
+ msgBox.focus();
210
+ state.screen.render();
211
+ });
212
+ }
213
+ export function showConfirm(state, title, message) {
214
+ return new Promise((resolve) => {
215
+ const confirmBox = blessed.box({
216
+ parent: state.screen,
217
+ top: 'center',
218
+ left: 'center',
219
+ width: 'shrink',
220
+ height: 'shrink',
221
+ padding: { left: 2, right: 2, top: 1, bottom: 1 },
222
+ content: `{center}{bold}${title}{/bold}{/center}\n\n${message}\n\n{center}{green-fg}[Y]{/green-fg}es {red-fg}[N]{/red-fg}o{/center}`,
223
+ tags: true,
224
+ border: {
225
+ type: 'line',
226
+ },
227
+ style: {
228
+ border: {
229
+ fg: 'yellow',
230
+ },
231
+ },
232
+ });
233
+ confirmBox.key(['y', 'Y'], () => {
234
+ confirmBox.destroy();
235
+ state.screen.render();
236
+ resolve(true);
237
+ });
238
+ confirmBox.key(['n', 'N', 'escape', 'q'], () => {
239
+ confirmBox.destroy();
240
+ state.screen.render();
241
+ resolve(false);
242
+ });
243
+ confirmBox.focus();
244
+ state.screen.render();
245
+ });
246
+ }
247
+ export function showInput(state, title, label, defaultValue) {
248
+ return new Promise((resolve) => {
249
+ let value = defaultValue || '';
250
+ let resolved = false;
251
+ // Block global key handlers while input is active
252
+ state.isSearching = true;
253
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
254
+ const form = blessed.box({
255
+ parent: state.screen,
256
+ top: 'center',
257
+ left: 'center',
258
+ width: 60,
259
+ height: 10,
260
+ keys: true,
261
+ inputOnFocus: true,
262
+ border: {
263
+ type: 'line',
264
+ },
265
+ style: {
266
+ border: {
267
+ fg: 'cyan',
268
+ },
269
+ },
270
+ });
271
+ blessed.text({
272
+ parent: form,
273
+ top: 0,
274
+ left: 1,
275
+ content: `{bold}${title}{/bold}`,
276
+ tags: true,
277
+ });
278
+ blessed.text({
279
+ parent: form,
280
+ top: 2,
281
+ left: 1,
282
+ content: label,
283
+ });
284
+ const inputBox = blessed.box({
285
+ parent: form,
286
+ top: 3,
287
+ left: 1,
288
+ width: 56,
289
+ height: 3,
290
+ border: {
291
+ type: 'line',
292
+ },
293
+ style: {
294
+ border: {
295
+ fg: 'green',
296
+ },
297
+ },
298
+ });
299
+ const inputText = blessed.box({
300
+ parent: inputBox,
301
+ top: 0,
302
+ left: 0,
303
+ width: '100%-2',
304
+ height: 1,
305
+ content: value + '{inverse} {/inverse}',
306
+ tags: true,
307
+ });
308
+ blessed.text({
309
+ parent: form,
310
+ top: 7,
311
+ left: 1,
312
+ content: '{gray-fg}Enter to confirm • Escape to cancel{/gray-fg}',
313
+ tags: true,
314
+ });
315
+ const updateInput = () => {
316
+ inputText.setContent(value + '{inverse} {/inverse}');
317
+ state.screen.render();
318
+ };
319
+ const cleanup = () => {
320
+ state.isSearching = false;
321
+ form.destroy();
322
+ state.screen.render();
323
+ };
324
+ // Handle keyboard input on the form element directly
325
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
326
+ const formAny = form;
327
+ formAny.on('keypress', (ch, key) => {
328
+ if (resolved)
329
+ return;
330
+ if (key.name === 'escape') {
331
+ resolved = true;
332
+ cleanup();
333
+ resolve(null);
334
+ }
335
+ else if (key.name === 'enter' || key.name === 'return') {
336
+ resolved = true;
337
+ cleanup();
338
+ resolve(value);
339
+ }
340
+ else if (key.name === 'backspace') {
341
+ value = value.slice(0, -1);
342
+ updateInput();
343
+ }
344
+ else if (ch && ch.length === 1 && !key.full.startsWith('C-')) {
345
+ value += ch;
346
+ updateInput();
347
+ }
348
+ });
349
+ form.focus();
350
+ state.screen.render();
351
+ });
352
+ }
353
+ export function createBackground(state) {
354
+ return blessed.box({
355
+ parent: state.screen,
356
+ top: 0,
357
+ left: 0,
358
+ width: '100%',
359
+ height: '100%',
360
+ style: {
361
+ bg: 'black',
362
+ },
363
+ });
364
+ }
365
+ export function createHeader(state, _title) {
366
+ // Always create background first to clear the screen
367
+ createBackground(state);
368
+ // Navigation tabs
369
+ const tabs = [
370
+ { key: '1', label: 'Plugins', screen: 'plugins' },
371
+ { key: '2', label: 'MCP', screen: 'mcp' },
372
+ { key: '3', label: 'Status', screen: 'statusline' },
373
+ { key: '4', label: 'Tools', screen: 'cli-tools' },
374
+ ];
375
+ const tabContent = tabs
376
+ .map((tab) => {
377
+ const isActive = state.currentScreen === tab.screen;
378
+ if (isActive) {
379
+ return `{cyan-fg}{bold}[${tab.key}] ${tab.label}{/bold}{/cyan-fg}`;
380
+ }
381
+ return `{gray-fg}[${tab.key}] ${tab.label}{/gray-fg}`;
382
+ })
383
+ .join(' ');
384
+ return blessed.box({
385
+ parent: state.screen,
386
+ top: 0,
387
+ left: 0,
388
+ width: '100%',
389
+ height: 3,
390
+ content: `{bold}{cyan-fg}◆ claudeup{/cyan-fg}{/bold} ${tabContent}\n{gray-fg}${'─'.repeat(80)}{/gray-fg}`,
391
+ tags: true,
392
+ style: {
393
+ fg: 'white',
394
+ },
395
+ });
396
+ }
397
+ export function createFooter(state, hints) {
398
+ return blessed.box({
399
+ parent: state.screen,
400
+ bottom: 0,
401
+ left: 0,
402
+ width: '100%',
403
+ height: 1,
404
+ content: `{gray-fg}${hints}{/gray-fg}`,
405
+ tags: true,
406
+ });
407
+ }
408
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/ui/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AppState } from '../app.js';
2
+ export declare function createCliToolsScreen(state: AppState): Promise<void>;
3
+ //# sourceMappingURL=cli-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-tools.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/cli-tools.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAyE1C,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAgSzE"}