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,330 @@
1
+ import blessed from 'neo-blessed';
2
+ import { createHeader, createFooter, showMessage, showConfirm } from '../app.js';
3
+ import { defaultMarketplaces } from '../../data/marketplaces.js';
4
+ import { addMarketplace, removeMarketplace, getConfiguredMarketplaces, enablePlugin, } from '../../services/claude-settings.js';
5
+ import { saveInstalledPluginVersion, removeInstalledPluginVersion, clearMarketplaceCache, getAvailablePlugins, } from '../../services/plugin-manager.js';
6
+ export async function createPluginsScreen(state) {
7
+ createHeader(state, 'Plugins');
8
+ const configuredMarketplaces = await getConfiguredMarketplaces(state.projectPath);
9
+ // Fetch all available plugins
10
+ let allPlugins = [];
11
+ try {
12
+ allPlugins = await getAvailablePlugins(state.projectPath);
13
+ }
14
+ catch {
15
+ // Continue with empty plugins
16
+ }
17
+ // Group plugins by marketplace
18
+ const pluginsByMarketplace = new Map();
19
+ for (const plugin of allPlugins) {
20
+ const existing = pluginsByMarketplace.get(plugin.marketplace) || [];
21
+ existing.push(plugin);
22
+ pluginsByMarketplace.set(plugin.marketplace, existing);
23
+ }
24
+ // Build unified list
25
+ const listItems = [];
26
+ for (const marketplace of defaultMarketplaces) {
27
+ const isEnabled = configuredMarketplaces[marketplace.name] !== undefined;
28
+ const plugins = pluginsByMarketplace.get(marketplace.name) || [];
29
+ // Marketplace header
30
+ const enabledBadge = isEnabled ? '{green-fg}✓{/green-fg}' : '{gray-fg}○{/gray-fg}';
31
+ const officialBadge = marketplace.official ? ' {cyan-fg}[Official]{/cyan-fg}' : '';
32
+ const pluginCount = plugins.length > 0 ? ` {gray-fg}(${plugins.length}){/gray-fg}` : '';
33
+ listItems.push({
34
+ label: `${enabledBadge} {bold}${marketplace.displayName}{/bold}${officialBadge}${pluginCount}`,
35
+ type: 'marketplace',
36
+ marketplace,
37
+ marketplaceEnabled: isEnabled,
38
+ });
39
+ // Plugins under this marketplace (if enabled)
40
+ if (isEnabled && plugins.length > 0) {
41
+ for (const plugin of plugins) {
42
+ let status = '{gray-fg}○{/gray-fg}';
43
+ if (plugin.enabled) {
44
+ status = '{green-fg}●{/green-fg}';
45
+ }
46
+ else if (plugin.installedVersion) {
47
+ status = '{yellow-fg}●{/yellow-fg}';
48
+ }
49
+ let versionDisplay = `{gray-fg}v${plugin.version}{/gray-fg}`;
50
+ if (plugin.hasUpdate) {
51
+ versionDisplay = `{yellow-fg}v${plugin.installedVersion} → v${plugin.version}{/yellow-fg}`;
52
+ }
53
+ else if (plugin.installedVersion) {
54
+ versionDisplay = `{green-fg}v${plugin.installedVersion}{/green-fg}`;
55
+ }
56
+ const updateBadge = plugin.hasUpdate ? ' {yellow-fg}⬆{/yellow-fg}' : '';
57
+ listItems.push({
58
+ label: ` ${status} ${plugin.name} ${versionDisplay}${updateBadge}`,
59
+ type: 'plugin',
60
+ plugin,
61
+ });
62
+ }
63
+ }
64
+ else if (isEnabled) {
65
+ listItems.push({
66
+ label: ' {gray-fg}No plugins available{/gray-fg}',
67
+ type: 'empty',
68
+ });
69
+ }
70
+ // Empty line between marketplaces
71
+ listItems.push({ label: '', type: 'empty' });
72
+ }
73
+ // List
74
+ const list = blessed.list({
75
+ parent: state.screen,
76
+ top: 3,
77
+ left: 2,
78
+ width: '50%-2',
79
+ height: '100%-5',
80
+ items: listItems.map((item) => item.label),
81
+ keys: true,
82
+ vi: false,
83
+ mouse: true,
84
+ tags: true,
85
+ scrollable: true,
86
+ border: { type: 'line' },
87
+ style: {
88
+ selected: { bg: 'blue', fg: 'white' },
89
+ border: { fg: 'gray' },
90
+ },
91
+ scrollbar: { ch: '│', style: { bg: 'gray' } },
92
+ label: ' Marketplaces & Plugins ',
93
+ });
94
+ // Detail panel
95
+ const detailBox = blessed.box({
96
+ parent: state.screen,
97
+ top: 3,
98
+ right: 2,
99
+ width: '50%-2',
100
+ height: '100%-5',
101
+ content: '',
102
+ tags: true,
103
+ border: { type: 'line' },
104
+ style: { border: { fg: 'gray' } },
105
+ label: ' Details ',
106
+ });
107
+ // Update detail panel
108
+ const updateDetail = () => {
109
+ const selected = list.selected;
110
+ const item = listItems[selected];
111
+ if (!item || item.type === 'empty') {
112
+ detailBox.setContent('{gray-fg}Select an item to see details{/gray-fg}');
113
+ state.screen.render();
114
+ return;
115
+ }
116
+ if (item.type === 'marketplace' && item.marketplace) {
117
+ const mp = item.marketplace;
118
+ const statusText = item.marketplaceEnabled
119
+ ? '{green-fg}● Enabled{/green-fg}'
120
+ : '{gray-fg}○ Not added{/gray-fg}';
121
+ const plugins = pluginsByMarketplace.get(mp.name) || [];
122
+ const pluginInfo = plugins.length > 0
123
+ ? `{bold}Plugins:{/bold} ${plugins.length} available`
124
+ : '{gray-fg}Enable to see plugins{/gray-fg}';
125
+ const actionText = item.marketplaceEnabled
126
+ ? '{red-fg}Press Enter to remove{/red-fg}'
127
+ : '{green-fg}Press Enter to add{/green-fg}';
128
+ const content = `
129
+ {bold}{cyan-fg}${mp.displayName}{/cyan-fg}{/bold}${mp.official ? ' {cyan-fg}[Official]{/cyan-fg}' : ''}
130
+
131
+ ${mp.description}
132
+
133
+ {bold}Status:{/bold} ${statusText}
134
+ ${pluginInfo}
135
+
136
+ {bold}Source:{/bold}
137
+ {gray-fg}github.com/${mp.source.repo}{/gray-fg}
138
+
139
+ ${actionText}
140
+ `.trim();
141
+ detailBox.setContent(content);
142
+ }
143
+ else if (item.type === 'plugin' && item.plugin) {
144
+ const plugin = item.plugin;
145
+ let statusText = '{gray-fg}Not installed{/gray-fg}';
146
+ if (plugin.enabled) {
147
+ statusText = '{green-fg}● Enabled{/green-fg}';
148
+ }
149
+ else if (plugin.installedVersion) {
150
+ statusText = '{yellow-fg}● Installed (disabled){/yellow-fg}';
151
+ }
152
+ let versionInfo = `{bold}Latest:{/bold} v${plugin.version}`;
153
+ if (plugin.installedVersion) {
154
+ versionInfo = `{bold}Installed:{/bold} v${plugin.installedVersion}\n{bold}Latest:{/bold} v${plugin.version}`;
155
+ if (plugin.hasUpdate) {
156
+ versionInfo += '\n{yellow-fg}⬆ Update available{/yellow-fg}';
157
+ }
158
+ }
159
+ let actions = '';
160
+ if (plugin.installedVersion) {
161
+ actions = plugin.enabled
162
+ ? '{cyan-fg}[Enter]{/cyan-fg} Disable'
163
+ : '{cyan-fg}[Enter]{/cyan-fg} Enable';
164
+ if (plugin.hasUpdate) {
165
+ actions += ' {green-fg}[u]{/green-fg} Update';
166
+ }
167
+ actions += ' {red-fg}[d]{/red-fg} Uninstall';
168
+ }
169
+ else {
170
+ actions = '{green-fg}[Enter]{/green-fg} Install & Enable';
171
+ }
172
+ const content = `
173
+ {bold}{cyan-fg}${plugin.name}{/cyan-fg}{/bold}
174
+
175
+ ${plugin.description}
176
+
177
+ {bold}Status:{/bold} ${statusText}
178
+
179
+ ${versionInfo}
180
+
181
+ {bold}ID:{/bold} ${plugin.id}
182
+
183
+ ${actions}
184
+ `.trim();
185
+ detailBox.setContent(content);
186
+ }
187
+ state.screen.render();
188
+ };
189
+ list.on('select item', updateDetail);
190
+ setTimeout(updateDetail, 0);
191
+ // Handle selection (Enter)
192
+ list.on('select', async (_item, index) => {
193
+ const selected = listItems[index];
194
+ if (!selected || selected.type === 'empty')
195
+ return;
196
+ if (selected.type === 'marketplace' && selected.marketplace) {
197
+ const mp = selected.marketplace;
198
+ if (selected.marketplaceEnabled) {
199
+ // Remove marketplace
200
+ const confirm = await showConfirm(state, `Remove ${mp.displayName}?`, 'Plugins from this marketplace will no longer be available.');
201
+ if (confirm) {
202
+ await removeMarketplace(mp.name, state.projectPath);
203
+ clearMarketplaceCache();
204
+ await showMessage(state, 'Removed', `${mp.displayName} removed.`, 'success');
205
+ createPluginsScreen(state);
206
+ }
207
+ }
208
+ else {
209
+ // Add marketplace
210
+ await addMarketplace(mp, state.projectPath);
211
+ clearMarketplaceCache();
212
+ await showMessage(state, 'Added', `${mp.displayName} added.\nPlugins are now available below.`, 'success');
213
+ createPluginsScreen(state);
214
+ }
215
+ }
216
+ else if (selected.type === 'plugin' && selected.plugin) {
217
+ const plugin = selected.plugin;
218
+ if (plugin.installedVersion) {
219
+ // Toggle enabled/disabled
220
+ const newState = !plugin.enabled;
221
+ await enablePlugin(plugin.id, newState, state.projectPath);
222
+ clearMarketplaceCache();
223
+ await showMessage(state, newState ? 'Enabled' : 'Disabled', `${plugin.name} ${newState ? 'enabled' : 'disabled'}.\nRestart Claude Code to apply.`, 'success');
224
+ createPluginsScreen(state);
225
+ }
226
+ else {
227
+ // Install plugin
228
+ await enablePlugin(plugin.id, true, state.projectPath);
229
+ await saveInstalledPluginVersion(plugin.id, plugin.version, state.projectPath);
230
+ clearMarketplaceCache();
231
+ await showMessage(state, 'Installed', `${plugin.name} v${plugin.version} installed.\nRestart Claude Code to apply.`, 'success');
232
+ createPluginsScreen(state);
233
+ }
234
+ }
235
+ });
236
+ // Update plugin (u key)
237
+ state.screen.key(['u'], async () => {
238
+ if (state.isSearching)
239
+ return;
240
+ const selected = list.selected;
241
+ const item = listItems[selected];
242
+ if (!item || item.type !== 'plugin' || !item.plugin)
243
+ return;
244
+ const plugin = item.plugin;
245
+ if (!plugin.hasUpdate) {
246
+ await showMessage(state, 'No Update', `${plugin.name} is at the latest version.`, 'info');
247
+ return;
248
+ }
249
+ const confirm = await showConfirm(state, 'Update Plugin?', `Update ${plugin.name} to v${plugin.version}?`);
250
+ if (confirm) {
251
+ await saveInstalledPluginVersion(plugin.id, plugin.version, state.projectPath);
252
+ clearMarketplaceCache();
253
+ await showMessage(state, 'Updated', `${plugin.name} updated.\nRestart Claude Code to apply.`, 'success');
254
+ createPluginsScreen(state);
255
+ }
256
+ });
257
+ // Uninstall plugin (d key)
258
+ state.screen.key(['d'], async () => {
259
+ if (state.isSearching)
260
+ return;
261
+ const selected = list.selected;
262
+ const item = listItems[selected];
263
+ if (!item || item.type !== 'plugin' || !item.plugin)
264
+ return;
265
+ const plugin = item.plugin;
266
+ if (!plugin.installedVersion) {
267
+ await showMessage(state, 'Not Installed', `${plugin.name} is not installed.`, 'info');
268
+ return;
269
+ }
270
+ const confirm = await showConfirm(state, 'Uninstall?', `Remove ${plugin.name}?`);
271
+ if (confirm) {
272
+ await enablePlugin(plugin.id, false, state.projectPath);
273
+ await removeInstalledPluginVersion(plugin.id, state.projectPath);
274
+ clearMarketplaceCache();
275
+ await showMessage(state, 'Uninstalled', `${plugin.name} removed.\nRestart Claude Code to apply.`, 'success');
276
+ createPluginsScreen(state);
277
+ }
278
+ });
279
+ // Refresh (r key)
280
+ state.screen.key(['r'], async () => {
281
+ if (state.isSearching)
282
+ return;
283
+ clearMarketplaceCache();
284
+ createPluginsScreen(state);
285
+ });
286
+ // Update all plugins (a key)
287
+ state.screen.key(['a'], async () => {
288
+ if (state.isSearching)
289
+ return;
290
+ const updatable = allPlugins.filter((p) => p.hasUpdate);
291
+ if (updatable.length === 0) {
292
+ await showMessage(state, 'All Up to Date', 'All plugins are at the latest version.', 'info');
293
+ return;
294
+ }
295
+ const confirm = await showConfirm(state, 'Update All?', `Update ${updatable.length} plugin(s)?`);
296
+ if (confirm) {
297
+ for (const plugin of updatable) {
298
+ await saveInstalledPluginVersion(plugin.id, plugin.version, state.projectPath);
299
+ }
300
+ clearMarketplaceCache();
301
+ await showMessage(state, 'Updated', `Updated ${updatable.length} plugin(s).\nRestart Claude Code to apply.`, 'success');
302
+ createPluginsScreen(state);
303
+ }
304
+ });
305
+ // Navigation
306
+ list.key(['j'], () => {
307
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
308
+ list.down();
309
+ state.screen.render();
310
+ });
311
+ list.key(['k'], () => {
312
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
313
+ list.up();
314
+ state.screen.render();
315
+ });
316
+ // Legend
317
+ blessed.box({
318
+ parent: state.screen,
319
+ bottom: 1,
320
+ right: 2,
321
+ width: 45,
322
+ height: 1,
323
+ content: '{green-fg}●{/green-fg} Enabled {yellow-fg}●{/yellow-fg} Disabled {gray-fg}○{/gray-fg} Not installed',
324
+ tags: true,
325
+ });
326
+ createFooter(state, '↑↓ Navigate │ Enter Toggle │ u Update │ d Uninstall │ a Update All │ r Refresh');
327
+ list.focus();
328
+ state.screen.render();
329
+ }
330
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../src/ui/screens/plugins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { AppState } from '../app.js';
2
+ type Scope = 'project' | 'global';
3
+ export declare function createStatusLineScreen(state: AppState, initialScope?: Scope): Promise<void>;
4
+ export {};
5
+ //# sourceMappingURL=statusline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/statusline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAY1C,KAAK,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElC,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,GAAE,KAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8R5G"}
@@ -0,0 +1,235 @@
1
+ import blessed from 'neo-blessed';
2
+ import { createHeader, createFooter, showMessage, showInput } from '../app.js';
3
+ import { statusLineCategories } from '../../data/statuslines.js';
4
+ import { setStatusLine, getStatusLine, setGlobalStatusLine, getGlobalStatusLine, getEffectiveStatusLine, } from '../../services/claude-settings.js';
5
+ export async function createStatusLineScreen(state, initialScope = 'project') {
6
+ createHeader(state, 'Status Line Configuration');
7
+ let currentScope = initialScope;
8
+ const projectStatusLine = await getStatusLine(state.projectPath);
9
+ const globalStatusLine = await getGlobalStatusLine();
10
+ const effective = await getEffectiveStatusLine(state.projectPath);
11
+ const getCurrentStatusLine = () => {
12
+ return currentScope === 'project' ? projectStatusLine : globalStatusLine;
13
+ };
14
+ // Scope indicator
15
+ const scopeBox = blessed.box({
16
+ parent: state.screen,
17
+ top: 3,
18
+ left: 2,
19
+ width: '100%-4',
20
+ height: 3,
21
+ tags: true,
22
+ border: {
23
+ type: 'line',
24
+ },
25
+ style: {
26
+ border: {
27
+ fg: 'cyan',
28
+ },
29
+ },
30
+ });
31
+ const updateScopeBox = () => {
32
+ const projectLabel = currentScope === 'project'
33
+ ? '{bold}{cyan-fg}[P] 📁 Project{/cyan-fg}{/bold}'
34
+ : '{gray-fg}[P] 📁 Project{/gray-fg}';
35
+ const globalLabel = currentScope === 'global'
36
+ ? '{bold}{cyan-fg}[G] 🌍 Global{/cyan-fg}{/bold}'
37
+ : '{gray-fg}[G] 🌍 Global{/gray-fg}';
38
+ const projectStatus = projectStatusLine ? '{green-fg}✓{/green-fg}' : '{gray-fg}○{/gray-fg}';
39
+ const globalStatus = globalStatusLine ? '{green-fg}✓{/green-fg}' : '{gray-fg}○{/gray-fg}';
40
+ scopeBox.setContent(` ${projectLabel} ${projectStatus} ${globalLabel} ${globalStatus} ` +
41
+ `{gray-fg}│{/gray-fg} Active: {yellow-fg}${effective.source}{/yellow-fg}`);
42
+ };
43
+ updateScopeBox();
44
+ // Info box
45
+ blessed.box({
46
+ parent: state.screen,
47
+ top: 6,
48
+ left: 2,
49
+ width: '100%-4',
50
+ height: 2,
51
+ content: `{gray-fg}Current ${currentScope}: {/gray-fg}{bold}${getCurrentStatusLine() || '(not set)'}{/bold}`,
52
+ tags: true,
53
+ });
54
+ const buildListItems = () => {
55
+ const currentForScope = getCurrentStatusLine();
56
+ const items = [];
57
+ for (const category of statusLineCategories) {
58
+ // Add category header
59
+ items.push({
60
+ label: `{${category.color}-fg}{bold}${category.name}{/bold}{/${category.color}-fg}`,
61
+ isHeader: true,
62
+ });
63
+ // Add presets in this category
64
+ for (const preset of category.presets) {
65
+ const isActive = currentForScope === preset.template;
66
+ const status = isActive ? '{green-fg}✓{/green-fg}' : ' ';
67
+ items.push({
68
+ label: ` ${status} ${preset.name} {gray-fg}- ${preset.description}{/gray-fg}`,
69
+ preset,
70
+ });
71
+ }
72
+ }
73
+ // Add custom option at the end
74
+ items.push({
75
+ label: '{cyan-fg}{bold}+ Custom Status Line{/bold}{/cyan-fg}',
76
+ isCustom: true,
77
+ });
78
+ return items;
79
+ };
80
+ const listItems = buildListItems();
81
+ const list = blessed.list({
82
+ parent: state.screen,
83
+ top: 9,
84
+ left: 2,
85
+ width: '100%-4',
86
+ height: '50%-6',
87
+ items: listItems.map((item) => item.label),
88
+ keys: true,
89
+ vi: true,
90
+ mouse: true,
91
+ tags: true,
92
+ scrollable: true,
93
+ border: {
94
+ type: 'line',
95
+ },
96
+ style: {
97
+ selected: {
98
+ bg: 'blue',
99
+ fg: 'white',
100
+ },
101
+ border: {
102
+ fg: 'cyan',
103
+ },
104
+ },
105
+ scrollbar: {
106
+ ch: '|',
107
+ style: {
108
+ bg: 'gray',
109
+ },
110
+ },
111
+ label: ' 🎨 Themes ',
112
+ });
113
+ // Preview box - positioned at the bottom
114
+ const previewBox = blessed.box({
115
+ parent: state.screen,
116
+ top: '50%+4',
117
+ left: 2,
118
+ width: '100%-4',
119
+ height: '50%-6',
120
+ content: '',
121
+ tags: true,
122
+ border: {
123
+ type: 'line',
124
+ },
125
+ label: ' Preview ',
126
+ style: {
127
+ border: {
128
+ fg: 'gray',
129
+ },
130
+ },
131
+ });
132
+ // Update preview on selection change
133
+ const updatePreview = () => {
134
+ const selected = list.selected;
135
+ const item = listItems[selected];
136
+ if (item?.isHeader) {
137
+ previewBox.setContent('{gray-fg}Select a preset below{/gray-fg}');
138
+ state.screen.render();
139
+ return;
140
+ }
141
+ if (item?.preset) {
142
+ // Build colorful preview with highlighted values
143
+ const example = item.preset.template
144
+ .replace('{model}', '{green-fg}claude-sonnet-4{/green-fg}')
145
+ .replace('{model_short}', '{green-fg}sonnet{/green-fg}')
146
+ .replace('{cost}', '{yellow-fg}0.42{/yellow-fg}')
147
+ .replace('{cwd}', '{blue-fg}~/myapp{/blue-fg}')
148
+ .replace('{git_branch}', '{magenta-fg}main{/magenta-fg}')
149
+ .replace('{input_tokens}', '{cyan-fg}1.2k{/cyan-fg}')
150
+ .replace('{output_tokens}', '{cyan-fg}850{/cyan-fg}')
151
+ .replace('{session_duration}', '{red-fg}12m{/red-fg}');
152
+ const content = `{bold}{cyan-fg}${item.preset.name}{/cyan-fg}{/bold}\n` +
153
+ `{gray-fg}${item.preset.description}{/gray-fg}\n\n` +
154
+ `{yellow-fg}{bold}Preview:{/bold}{/yellow-fg}\n` +
155
+ `{white-fg}${example}{/white-fg}\n\n` +
156
+ `{gray-fg}Template: ${item.preset.template}{/gray-fg}`;
157
+ previewBox.setContent(content);
158
+ }
159
+ else if (item?.isCustom) {
160
+ previewBox.setContent(`{bold}{cyan-fg}+ Custom Status Line{/cyan-fg}{/bold}\n\n` +
161
+ `{white-fg}Create your own unique status line!{/white-fg}\n\n` +
162
+ `{yellow-fg}{bold}Available variables:{/bold}{/yellow-fg}\n\n` +
163
+ `{green-fg}{model}{/green-fg} Model name\n` +
164
+ `{green-fg}{model_short}{/green-fg} Short name\n` +
165
+ `{yellow-fg}{cost}{/yellow-fg} Session cost\n` +
166
+ `{blue-fg}{cwd}{/blue-fg} Working directory\n` +
167
+ `{magenta-fg}{git_branch}{/magenta-fg} Git branch\n` +
168
+ `{cyan-fg}{input_tokens}{/cyan-fg} Input tokens\n` +
169
+ `{cyan-fg}{output_tokens}{/cyan-fg} Output tokens\n` +
170
+ `{red-fg}{session_duration}{/red-fg} Session duration`);
171
+ }
172
+ state.screen.render();
173
+ };
174
+ list.on('select item', updatePreview);
175
+ updatePreview();
176
+ // Save function based on current scope
177
+ const saveStatusLine = async (template) => {
178
+ if (currentScope === 'global') {
179
+ await setGlobalStatusLine(template);
180
+ }
181
+ else {
182
+ await setStatusLine(template, state.projectPath);
183
+ }
184
+ };
185
+ // Handle selection
186
+ list.on('select', async (_item, index) => {
187
+ const selected = listItems[index];
188
+ if (!selected || selected.isHeader)
189
+ return;
190
+ const scopeLabel = currentScope === 'global' ? '🌍 Global' : '📁 Project';
191
+ if (selected.isCustom) {
192
+ // Custom status line
193
+ const template = await showInput(state, `Custom Status Line (${scopeLabel})`, 'Enter template (use {model}, {cost}, etc.):', getCurrentStatusLine() || '');
194
+ if (template !== null) {
195
+ await saveStatusLine(template);
196
+ await showMessage(state, 'Saved', `Custom status line saved to ${scopeLabel}.\n\nRestart Claude Code to apply changes.`, 'success');
197
+ createStatusLineScreen(state, currentScope);
198
+ }
199
+ }
200
+ else if (selected.preset) {
201
+ // Apply preset
202
+ await saveStatusLine(selected.preset.template);
203
+ await showMessage(state, 'Applied', `"${selected.preset.name}" applied to ${scopeLabel}.\n\nRestart Claude Code to apply changes.`, 'success');
204
+ createStatusLineScreen(state, currentScope);
205
+ }
206
+ });
207
+ // Toggle scope with P and G keys - disabled during search
208
+ state.screen.key(['p'], () => {
209
+ if (state.isSearching)
210
+ return;
211
+ if (currentScope !== 'project') {
212
+ createStatusLineScreen(state, 'project');
213
+ }
214
+ });
215
+ state.screen.key(['g'], () => {
216
+ if (state.isSearching)
217
+ return;
218
+ if (currentScope !== 'global') {
219
+ createStatusLineScreen(state, 'global');
220
+ }
221
+ });
222
+ // Reset to default - disabled during search
223
+ state.screen.key(['r'], async () => {
224
+ if (state.isSearching)
225
+ return;
226
+ const scopeLabel = currentScope === 'global' ? '🌍 Global' : '📁 Project';
227
+ await saveStatusLine('');
228
+ await showMessage(state, 'Reset', `${scopeLabel} status line has been cleared.`, 'success');
229
+ createStatusLineScreen(state, currentScope);
230
+ });
231
+ createFooter(state, '↑↓ Navigate │ Enter Apply │ P Project │ G Global │ r Reset │ Esc Back');
232
+ list.focus();
233
+ state.screen.render();
234
+ }
235
+ //# sourceMappingURL=statusline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statusline.js","sourceRoot":"","sources":["../../../src/ui/screens/statusline.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "claudeup",
3
+ "version": "0.1.0",
4
+ "description": "TUI tool for managing Claude Code plugins, MCPs, and configuration",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "claudeup": "bin/claudeup.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc -w",
13
+ "start": "node dist/index.js",
14
+ "start:bun": "bun run src/index.ts",
15
+ "lint": "biome check src/",
16
+ "format": "biome format --write src/",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "keywords": [
20
+ "claude",
21
+ "claude-code",
22
+ "mcp",
23
+ "plugins",
24
+ "tui",
25
+ "cli"
26
+ ],
27
+ "author": "Jack Rudenko <i@madappgang.com>",
28
+ "license": "MIT",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/MadAppGang/claude-code.git",
32
+ "directory": "tools/claudeup"
33
+ },
34
+ "bugs": {
35
+ "url": "https://github.com/MadAppGang/claude-code/issues"
36
+ },
37
+ "homepage": "https://github.com/MadAppGang/claude-code/tree/main/tools/claudeup#readme",
38
+ "engines": {
39
+ "node": ">=18.0.0"
40
+ },
41
+ "files": [
42
+ "dist",
43
+ "bin"
44
+ ],
45
+ "dependencies": {
46
+ "neo-blessed": "^0.2.0",
47
+ "chalk": "^5.3.0",
48
+ "fs-extra": "^11.2.0",
49
+ "semver": "^7.6.3"
50
+ },
51
+ "devDependencies": {
52
+ "@biomejs/biome": "^1.9.4",
53
+ "@types/fs-extra": "^11.0.4",
54
+ "@types/node": "^22.9.0",
55
+ "@types/semver": "^7.5.8",
56
+ "typescript": "^5.6.3"
57
+ }
58
+ }