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
@@ -0,0 +1,417 @@
1
+ import blessed from 'neo-blessed';
2
+ import { createHeader, createFooter, showMessage, showConfirm, showInput, } from '../app.js';
3
+ import { getMcpServersByCategory, getCategoryDisplayName, categoryOrder, getAllMcpServers, } from '../../data/mcp-servers.js';
4
+ import { searchMcpServers } from '../../services/mcp-registry.js';
5
+ import { addMcpServer, removeMcpServer, getInstalledMcpServers, getEnabledMcpServers, setAllowMcp, } from '../../services/claude-settings.js';
6
+ // Search results screen
7
+ export async function createMcpSearchScreen(state, query) {
8
+ createHeader(state, 'MCP Servers');
9
+ const installedServers = await getInstalledMcpServers(state.projectPath);
10
+ const enabledServers = await getEnabledMcpServers(state.projectPath);
11
+ const allServers = getAllMcpServers();
12
+ // Search both local and remote sources
13
+ const q = query.toLowerCase();
14
+ // Search local curated servers
15
+ const localFilteredServers = allServers.filter(s => s.name.toLowerCase().includes(q) ||
16
+ s.description.toLowerCase().includes(q) ||
17
+ (s.category && s.category.toLowerCase().includes(q)));
18
+ // Search remote MCP registry
19
+ let remoteServers = [];
20
+ let remoteError = null;
21
+ try {
22
+ const response = await searchMcpServers({ query, limit: 50 });
23
+ remoteServers = response.servers || [];
24
+ }
25
+ catch (err) {
26
+ // Remote search failed, will show local results only
27
+ remoteError = err;
28
+ remoteServers = [];
29
+ }
30
+ // Combine and deduplicate results (prioritize local/curated)
31
+ const allResults = new Map();
32
+ // Add local results first (they have more metadata)
33
+ for (const server of localFilteredServers) {
34
+ allResults.set(server.name, { server, source: 'local' });
35
+ }
36
+ // Add remote results, converting McpRegistryServer to McpServer format
37
+ for (const remote of remoteServers) {
38
+ if (!allResults.has(remote.name)) {
39
+ // Convert remote server to our format
40
+ const convertedServer = {
41
+ name: remote.name,
42
+ description: remote.short_description || 'No description',
43
+ type: 'http',
44
+ url: remote.url,
45
+ category: 'productivity', // Default category for remote servers
46
+ requiresConfig: false,
47
+ };
48
+ allResults.set(remote.name, { server: convertedServer, source: 'remote' });
49
+ }
50
+ }
51
+ const combinedResults = Array.from(allResults.values());
52
+ const localCount = localFilteredServers.length;
53
+ let searchInfo = `${combinedResults.length} found`;
54
+ if (localCount > 0) {
55
+ searchInfo += ` ({cyan-fg}${localCount} local{/cyan-fg})`;
56
+ }
57
+ if (remoteError) {
58
+ searchInfo += ` | {red-fg}Remote search failed{/red-fg}`;
59
+ }
60
+ // Search header
61
+ blessed.box({
62
+ parent: state.screen,
63
+ top: 3,
64
+ left: 2,
65
+ width: '50%-2',
66
+ height: 3,
67
+ tags: true,
68
+ border: { type: 'line' },
69
+ style: { border: { fg: 'green' } },
70
+ label: ' 🔍 Search Results ',
71
+ content: `{white-fg}${query}{/white-fg} {gray-fg}(${searchInfo}){/gray-fg}`,
72
+ });
73
+ // Build list items
74
+ const listItems = combinedResults.map(({ server, source }) => {
75
+ const isInstalled = installedServers[server.name] !== undefined;
76
+ const isEnabled = enabledServers[server.name] === true;
77
+ let status = '{gray-fg}○{/gray-fg}';
78
+ if (isInstalled && isEnabled) {
79
+ status = '{green-fg}●{/green-fg}';
80
+ }
81
+ else if (isInstalled) {
82
+ status = '{yellow-fg}●{/yellow-fg}';
83
+ }
84
+ return {
85
+ label: `${status} {bold}${server.name}{/bold}`,
86
+ server,
87
+ source,
88
+ };
89
+ });
90
+ if (listItems.length === 0) {
91
+ listItems.push({
92
+ label: '{gray-fg}No servers match your search{/gray-fg}',
93
+ server: undefined,
94
+ source: 'local',
95
+ });
96
+ }
97
+ const listLabels = listItems.map((item) => item.label);
98
+ const list = blessed.list({
99
+ parent: state.screen,
100
+ top: 6,
101
+ left: 2,
102
+ width: '50%-2',
103
+ height: '100%-9',
104
+ items: listLabels,
105
+ keys: true,
106
+ mouse: true,
107
+ tags: true,
108
+ scrollable: true,
109
+ border: { type: 'line' },
110
+ style: {
111
+ selected: { bg: 'green', fg: 'white' },
112
+ border: { fg: 'gray' },
113
+ },
114
+ });
115
+ // Detail panel
116
+ const detailBox = blessed.box({
117
+ parent: state.screen,
118
+ top: 3,
119
+ right: 2,
120
+ width: '50%-2',
121
+ height: '100%-5',
122
+ tags: true,
123
+ border: { type: 'line' },
124
+ style: { border: { fg: 'gray' } },
125
+ label: ' Details ',
126
+ });
127
+ const updateDetail = () => {
128
+ const selected = list.selected;
129
+ const item = listItems[selected];
130
+ if (!item?.server) {
131
+ detailBox.setContent('{gray-fg}No server selected{/gray-fg}');
132
+ state.screen.render();
133
+ return;
134
+ }
135
+ const server = item.server;
136
+ const isInstalled = installedServers[server.name] !== undefined;
137
+ const sourceTag = item.source === 'remote' ? '\n{bold}Source:{/bold} {cyan-fg}MCP Registry{/cyan-fg}' : '';
138
+ detailBox.setContent(`
139
+ {bold}{cyan-fg}${server.name}{/cyan-fg}{/bold}
140
+
141
+ ${server.description}
142
+ ${sourceTag}
143
+
144
+ ${isInstalled
145
+ ? '{red-fg}Press Enter to remove{/red-fg}'
146
+ : '{green-fg}Press Enter to install{/green-fg}'}
147
+ `.trim());
148
+ state.screen.render();
149
+ };
150
+ list.on('select item', updateDetail);
151
+ setTimeout(updateDetail, 0);
152
+ // Handle selection
153
+ list.on('select', async (_item, index) => {
154
+ const item = listItems[index];
155
+ if (!item?.server)
156
+ return;
157
+ const server = item.server;
158
+ const isInstalled = installedServers[server.name] !== undefined;
159
+ if (isInstalled) {
160
+ const remove = await showConfirm(state, `Remove ${server.name}?`, 'Remove MCP server?');
161
+ if (remove) {
162
+ await removeMcpServer(server.name, state.projectPath);
163
+ await showMessage(state, 'Removed', `${server.name} removed.`, 'success');
164
+ createMcpSearchScreen(state, query);
165
+ }
166
+ }
167
+ else {
168
+ await installMcpServer(state, server);
169
+ createMcpSearchScreen(state, query);
170
+ }
171
+ });
172
+ // Back to main MCP screen
173
+ list.key(['escape', 'q'], () => {
174
+ createMcpScreen(state);
175
+ });
176
+ // New search
177
+ list.key(['/'], async () => {
178
+ const newQuery = await showInput(state, '🔍 Search', 'Search MCP servers:', query);
179
+ if (newQuery !== null && newQuery.trim()) {
180
+ createMcpSearchScreen(state, newQuery);
181
+ }
182
+ });
183
+ createFooter(state, '↑↓ Navigate │ Enter Install/Remove │ / New Search │ Esc Back');
184
+ list.focus();
185
+ state.screen.render();
186
+ }
187
+ // Main MCP screen (no search filtering)
188
+ export async function createMcpScreen(state) {
189
+ createHeader(state, 'MCP Servers');
190
+ const installedServers = await getInstalledMcpServers(state.projectPath);
191
+ const enabledServers = await getEnabledMcpServers(state.projectPath);
192
+ const serversByCategory = getMcpServersByCategory();
193
+ // Search box - just shows hint
194
+ blessed.box({
195
+ parent: state.screen,
196
+ top: 3,
197
+ left: 2,
198
+ width: '50%-2',
199
+ height: 3,
200
+ tags: true,
201
+ border: { type: 'line' },
202
+ style: { border: { fg: 'cyan' } },
203
+ label: ' 🔍 Search ',
204
+ content: '{gray-fg}Press / to search...{/gray-fg}',
205
+ });
206
+ const listItems = [];
207
+ for (const category of categoryOrder) {
208
+ const servers = serversByCategory[category];
209
+ if (!servers || servers.length === 0)
210
+ continue;
211
+ listItems.push({
212
+ label: `{bold}{cyan-fg}${getCategoryDisplayName(category)}{/cyan-fg}{/bold}`,
213
+ isCategory: true,
214
+ });
215
+ for (const server of servers) {
216
+ const isInstalled = installedServers[server.name] !== undefined;
217
+ const isEnabled = enabledServers[server.name] === true;
218
+ let status = '{gray-fg}○{/gray-fg}';
219
+ if (isInstalled && isEnabled) {
220
+ status = '{green-fg}●{/green-fg}';
221
+ }
222
+ else if (isInstalled) {
223
+ status = '{yellow-fg}●{/yellow-fg}';
224
+ }
225
+ const configTag = server.requiresConfig ? ' {yellow-fg}*{/yellow-fg}' : '';
226
+ listItems.push({
227
+ label: ` ${status} {bold}${server.name}{/bold}${configTag}`,
228
+ server,
229
+ });
230
+ }
231
+ }
232
+ const list = blessed.list({
233
+ parent: state.screen,
234
+ top: 6,
235
+ left: 2,
236
+ width: '50%-2',
237
+ height: '100%-9',
238
+ items: listItems.map((item) => item.label),
239
+ keys: true,
240
+ mouse: true,
241
+ tags: true,
242
+ scrollable: true,
243
+ border: { type: 'line' },
244
+ style: {
245
+ selected: { bg: 'blue', fg: 'white' },
246
+ border: { fg: 'gray' },
247
+ },
248
+ scrollbar: { ch: '|', style: { bg: 'gray' } },
249
+ });
250
+ // Detail panel on the right
251
+ const detailBox = blessed.box({
252
+ parent: state.screen,
253
+ top: 3,
254
+ right: 2,
255
+ width: '50%-2',
256
+ height: '100%-5',
257
+ content: '',
258
+ tags: true,
259
+ border: {
260
+ type: 'line',
261
+ },
262
+ style: {
263
+ border: {
264
+ fg: 'gray',
265
+ },
266
+ },
267
+ label: ' Details ',
268
+ });
269
+ // Update detail panel on selection change
270
+ const updateDetail = () => {
271
+ const selected = list.selected;
272
+ const item = listItems[selected];
273
+ if (!item || item.isCategory || !item.server) {
274
+ detailBox.setContent('{gray-fg}Select a server to see details{/gray-fg}');
275
+ state.screen.render();
276
+ return;
277
+ }
278
+ const server = item.server;
279
+ const isInstalled = installedServers[server.name] !== undefined;
280
+ const isEnabled = enabledServers[server.name] === true;
281
+ let statusText = '{gray-fg}Not installed{/gray-fg}';
282
+ if (isInstalled && isEnabled) {
283
+ statusText = '{green-fg}● Installed & Enabled{/green-fg}';
284
+ }
285
+ else if (isInstalled) {
286
+ statusText = '{yellow-fg}● Installed (disabled){/yellow-fg}';
287
+ }
288
+ let typeInfo = '';
289
+ if (server.type === 'http') {
290
+ typeInfo = `{bold}URL:{/bold} {cyan-fg}${server.url}{/cyan-fg}`;
291
+ }
292
+ else {
293
+ typeInfo = `{bold}Command:{/bold} {cyan-fg}${server.command} ${(server.args || []).join(' ')}{/cyan-fg}`;
294
+ }
295
+ let configInfo = '';
296
+ if (server.requiresConfig && server.configFields) {
297
+ configInfo = `\n\n{bold}Configuration:{/bold}\n`;
298
+ for (const field of server.configFields) {
299
+ const req = field.required ? '{red-fg}*{/red-fg}' : '';
300
+ configInfo += ` ${req} ${field.label}\n`;
301
+ }
302
+ }
303
+ const content = `
304
+ {bold}{cyan-fg}${server.name}{/cyan-fg}{/bold}
305
+
306
+ ${server.description}
307
+
308
+ {bold}Status:{/bold} ${statusText}
309
+
310
+ ${typeInfo}${configInfo}
311
+
312
+ ${isInstalled
313
+ ? '{red-fg}Press Enter to remove{/red-fg}'
314
+ : '{green-fg}Press Enter to install{/green-fg}'}
315
+ `.trim();
316
+ detailBox.setContent(content);
317
+ state.screen.render();
318
+ };
319
+ list.on('select item', updateDetail);
320
+ // Initial update
321
+ setTimeout(updateDetail, 0);
322
+ // Handle selection
323
+ list.on('select', async (_item, index) => {
324
+ const selected = listItems[index];
325
+ if (!selected || selected.isCategory || !selected.server) {
326
+ return;
327
+ }
328
+ const server = selected.server;
329
+ const isInstalled = installedServers[server.name] !== undefined;
330
+ if (isInstalled) {
331
+ const remove = await showConfirm(state, `Remove ${server.name}?`, 'This will remove the MCP server configuration.');
332
+ if (remove) {
333
+ await removeMcpServer(server.name, state.projectPath);
334
+ await showMessage(state, 'Removed', `${server.name} has been removed.`, 'success');
335
+ createMcpScreen(state);
336
+ }
337
+ }
338
+ else {
339
+ await installMcpServer(state, server);
340
+ }
341
+ });
342
+ // Manual j/k navigation (since vi mode is disabled)
343
+ list.key(['j'], () => {
344
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
345
+ list.down();
346
+ state.screen.render();
347
+ });
348
+ list.key(['k'], () => {
349
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
350
+ list.up();
351
+ state.screen.render();
352
+ });
353
+ // Search with / key - opens search screen
354
+ list.key(['/'], async () => {
355
+ const query = await showInput(state, '🔍 Search', 'Search MCP servers:');
356
+ if (query !== null && query.trim()) {
357
+ createMcpSearchScreen(state, query);
358
+ }
359
+ });
360
+ // Switch to registry search with r
361
+ list.key(['r'], async () => {
362
+ const { navigateTo } = await import('../app.js');
363
+ navigateTo(state, 'mcp-registry');
364
+ });
365
+ createFooter(state, '↑↓ Navigate │ Enter Install/Remove │ / Search │ r Registry │ q Back');
366
+ list.focus();
367
+ state.screen.render();
368
+ }
369
+ async function installMcpServer(state, server) {
370
+ let config;
371
+ if (server.type === 'http') {
372
+ // HTTP-based MCP server
373
+ config = {
374
+ type: 'http',
375
+ url: server.url,
376
+ };
377
+ }
378
+ else {
379
+ // Command-based MCP server
380
+ config = {
381
+ command: server.command,
382
+ args: server.args ? [...server.args] : undefined,
383
+ env: server.env ? { ...server.env } : undefined,
384
+ };
385
+ }
386
+ // Collect configuration if required
387
+ if (server.requiresConfig && server.configFields) {
388
+ for (const field of server.configFields) {
389
+ const value = await showInput(state, `Configure ${server.name}`, `${field.label}${field.required ? ' (required)' : ''}:`, field.default);
390
+ if (value === null) {
391
+ // User cancelled
392
+ return;
393
+ }
394
+ if (field.required && !value) {
395
+ await showMessage(state, 'Required Field', `${field.label} is required.`, 'error');
396
+ return;
397
+ }
398
+ if (value) {
399
+ // Replace placeholder in args
400
+ if (config.args) {
401
+ config.args = config.args.map((arg) => arg.replace(`\${${field.name}}`, value));
402
+ }
403
+ // Replace placeholder in env or add new env var
404
+ if (field.envVar) {
405
+ config.env = config.env || {};
406
+ config.env[field.envVar] = value;
407
+ }
408
+ }
409
+ }
410
+ }
411
+ // Enable MCP and add server
412
+ await setAllowMcp(true, state.projectPath);
413
+ await addMcpServer(server.name, config, state.projectPath);
414
+ await showMessage(state, 'Installed', `${server.name} has been configured.\n\nRestart Claude Code to activate.`, 'success');
415
+ createMcpScreen(state);
416
+ }
417
+ //# sourceMappingURL=mcp-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-setup.js","sourceRoot":"","sources":["../../../src/ui/screens/mcp-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AppState } from '../app.js';
2
+ export declare function createPluginsScreen(state: AppState): Promise<void>;
3
+ //# sourceMappingURL=plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/plugins.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAyB1C,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA0XxE"}