claudeup 3.16.0 → 4.0.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 (45) hide show
  1. package/package.json +1 -1
  2. package/src/data/predefined-profiles.js +191 -0
  3. package/src/data/predefined-profiles.ts +205 -0
  4. package/src/ui/adapters/pluginsAdapter.js +139 -0
  5. package/src/ui/adapters/pluginsAdapter.ts +202 -0
  6. package/src/ui/adapters/settingsAdapter.js +111 -0
  7. package/src/ui/adapters/settingsAdapter.ts +165 -0
  8. package/src/ui/components/ScrollableList.js +4 -4
  9. package/src/ui/components/ScrollableList.tsx +4 -4
  10. package/src/ui/components/SearchInput.js +2 -2
  11. package/src/ui/components/SearchInput.tsx +3 -3
  12. package/src/ui/components/StyledText.js +1 -1
  13. package/src/ui/components/StyledText.tsx +5 -1
  14. package/src/ui/components/layout/ProgressBar.js +1 -1
  15. package/src/ui/components/layout/ProgressBar.tsx +1 -5
  16. package/src/ui/components/modals/InputModal.tsx +1 -6
  17. package/src/ui/components/modals/LoadingModal.js +1 -1
  18. package/src/ui/components/modals/LoadingModal.tsx +1 -3
  19. package/src/ui/hooks/index.js +3 -3
  20. package/src/ui/hooks/index.ts +3 -3
  21. package/src/ui/hooks/useKeyboard.ts +1 -3
  22. package/src/ui/hooks/useKeyboardHandler.js +9 -9
  23. package/src/ui/hooks/useKeyboardHandler.ts +9 -9
  24. package/src/ui/renderers/cliToolRenderers.js +33 -0
  25. package/src/ui/renderers/cliToolRenderers.tsx +153 -0
  26. package/src/ui/renderers/mcpRenderers.js +26 -0
  27. package/src/ui/renderers/mcpRenderers.tsx +145 -0
  28. package/src/ui/renderers/pluginRenderers.js +124 -0
  29. package/src/ui/renderers/pluginRenderers.tsx +362 -0
  30. package/src/ui/renderers/profileRenderers.js +172 -0
  31. package/src/ui/renderers/profileRenderers.tsx +410 -0
  32. package/src/ui/renderers/settingsRenderers.js +69 -0
  33. package/src/ui/renderers/settingsRenderers.tsx +205 -0
  34. package/src/ui/screens/CliToolsScreen.js +14 -58
  35. package/src/ui/screens/CliToolsScreen.tsx +36 -196
  36. package/src/ui/screens/EnvVarsScreen.js +12 -168
  37. package/src/ui/screens/EnvVarsScreen.tsx +16 -327
  38. package/src/ui/screens/McpScreen.js +12 -62
  39. package/src/ui/screens/McpScreen.tsx +21 -190
  40. package/src/ui/screens/PluginsScreen.js +52 -425
  41. package/src/ui/screens/PluginsScreen.tsx +70 -758
  42. package/src/ui/screens/ProfilesScreen.js +104 -68
  43. package/src/ui/screens/ProfilesScreen.tsx +147 -221
  44. package/src/ui/screens/SkillsScreen.js +16 -16
  45. package/src/ui/screens/SkillsScreen.tsx +20 -23
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudeup",
3
- "version": "3.16.0",
3
+ "version": "4.0.0",
4
4
  "description": "TUI tool for managing Claude Code plugins, MCPs, and configuration",
5
5
  "type": "module",
6
6
  "main": "src/main.tsx",
@@ -0,0 +1,191 @@
1
+ export const PREDEFINED_PROFILES = [
2
+ {
3
+ id: "frontend-pro",
4
+ name: "Frontend Pro",
5
+ description: "UI implementation, design fidelity, browser-driven workflows",
6
+ icon: "🎨",
7
+ magusPlugins: [
8
+ "dev",
9
+ "code-analysis",
10
+ "terminal",
11
+ "statusline",
12
+ "designer",
13
+ "browser-use",
14
+ "multimodel",
15
+ ],
16
+ anthropicPlugins: [
17
+ "feature-dev",
18
+ "frontend-design",
19
+ "code-simplifier",
20
+ "explanatory-output-style",
21
+ "typescript-lsp",
22
+ ],
23
+ skills: [
24
+ "React Best Practices",
25
+ "Web Design Guidelines",
26
+ "shadcn/ui",
27
+ "UI/UX Pro Max",
28
+ "Find Skills",
29
+ ],
30
+ settings: {
31
+ effortLevel: "high",
32
+ alwaysThinkingEnabled: true,
33
+ model: "claude-sonnet-4-6",
34
+ outputStyle: "explanatory",
35
+ env: {
36
+ CLAUDE_CODE_ENABLE_TASKS: "true",
37
+ CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "true",
38
+ },
39
+ includeGitInstructions: true,
40
+ respectGitignore: true,
41
+ enableAllProjectMcpServers: true,
42
+ },
43
+ },
44
+ {
45
+ id: "backend-forge",
46
+ name: "Backend Forge",
47
+ description: "API development, debugging, code quality, data workflows",
48
+ icon: "⚙️",
49
+ magusPlugins: [
50
+ "dev",
51
+ "code-analysis",
52
+ "terminal",
53
+ "statusline",
54
+ "conductor",
55
+ "multimodel",
56
+ "gtd",
57
+ ],
58
+ anthropicPlugins: [
59
+ "feature-dev",
60
+ "code-review",
61
+ "code-simplifier",
62
+ "commit-commands",
63
+ "security-guidance",
64
+ "agent-sdk-dev",
65
+ ],
66
+ skills: ["Systematic Debugging", "Neon Postgres", "Find Skills"],
67
+ settings: {
68
+ effortLevel: "high",
69
+ alwaysThinkingEnabled: true,
70
+ model: "claude-sonnet-4-6",
71
+ outputStyle: "concise",
72
+ env: {
73
+ CLAUDE_CODE_ENABLE_TASKS: "true",
74
+ CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "true",
75
+ },
76
+ includeGitInstructions: true,
77
+ respectGitignore: true,
78
+ enableAllProjectMcpServers: true,
79
+ },
80
+ },
81
+ {
82
+ id: "infra-ops",
83
+ name: "Infra Ops",
84
+ description: "Infrastructure, operational debugging, automation, terminal-first",
85
+ icon: "🔧",
86
+ magusPlugins: [
87
+ "dev",
88
+ "code-analysis",
89
+ "terminal",
90
+ "statusline",
91
+ "multimodel",
92
+ "gtd",
93
+ "browser-use",
94
+ ],
95
+ anthropicPlugins: [
96
+ "claude-code-setup",
97
+ "hookify",
98
+ "code-review",
99
+ "commit-commands",
100
+ "security-guidance",
101
+ "plugin-dev",
102
+ ],
103
+ skills: ["Systematic Debugging", "Find Skills"],
104
+ settings: {
105
+ effortLevel: "high",
106
+ alwaysThinkingEnabled: true,
107
+ model: "claude-opus-4-6",
108
+ outputStyle: "concise",
109
+ env: {
110
+ CLAUDE_CODE_ENABLE_TASKS: "true",
111
+ CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "true",
112
+ },
113
+ includeGitInstructions: true,
114
+ respectGitignore: true,
115
+ enableAllProjectMcpServers: true,
116
+ },
117
+ },
118
+ {
119
+ id: "growth-marketer",
120
+ name: "Growth Marketer",
121
+ description: "SEO, website audits, content production, marketing automation",
122
+ icon: "📈",
123
+ magusPlugins: [
124
+ "dev",
125
+ "code-analysis",
126
+ "terminal",
127
+ "statusline",
128
+ "seo",
129
+ "browser-use",
130
+ "nanobanana",
131
+ "video-editing",
132
+ ],
133
+ anthropicPlugins: [
134
+ "explanatory-output-style",
135
+ "frontend-design",
136
+ "playground",
137
+ ],
138
+ skills: [
139
+ "Audit Website",
140
+ "Web Design Guidelines",
141
+ "ElevenLabs TTS",
142
+ "Find Skills",
143
+ ],
144
+ settings: {
145
+ effortLevel: "medium",
146
+ alwaysThinkingEnabled: false,
147
+ model: "claude-sonnet-4-6",
148
+ outputStyle: "explanatory",
149
+ env: { CLAUDE_CODE_ENABLE_TASKS: "true" },
150
+ respectGitignore: true,
151
+ enableAllProjectMcpServers: true,
152
+ },
153
+ },
154
+ {
155
+ id: "team-lead",
156
+ name: "Team Lead",
157
+ description: "Planning, code review, coordination, and broad repo visibility",
158
+ icon: "👔",
159
+ magusPlugins: [
160
+ "dev",
161
+ "code-analysis",
162
+ "terminal",
163
+ "statusline",
164
+ "multimodel",
165
+ "gtd",
166
+ "agentdev",
167
+ ],
168
+ anthropicPlugins: [
169
+ "code-review",
170
+ "pr-review-toolkit",
171
+ "claude-md-management",
172
+ "commit-commands",
173
+ "explanatory-output-style",
174
+ "skill-creator",
175
+ ],
176
+ skills: ["Systematic Debugging", "Find Skills", "Audit Website"],
177
+ settings: {
178
+ effortLevel: "medium",
179
+ alwaysThinkingEnabled: true,
180
+ model: "claude-sonnet-4-6",
181
+ outputStyle: "explanatory",
182
+ env: {
183
+ CLAUDE_CODE_ENABLE_TASKS: "true",
184
+ CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "true",
185
+ },
186
+ includeGitInstructions: true,
187
+ respectGitignore: true,
188
+ enableAllProjectMcpServers: true,
189
+ },
190
+ },
191
+ ];
@@ -0,0 +1,205 @@
1
+ export interface PredefinedProfile {
2
+ id: string;
3
+ name: string;
4
+ description: string;
5
+ icon: string; // emoji or symbol
6
+ magusPlugins: string[];
7
+ anthropicPlugins: string[];
8
+ skills: string[];
9
+ settings: Record<string, unknown>;
10
+ }
11
+
12
+ export const PREDEFINED_PROFILES: PredefinedProfile[] = [
13
+ {
14
+ id: "frontend-pro",
15
+ name: "Frontend Pro",
16
+ description: "UI implementation, design fidelity, browser-driven workflows",
17
+ icon: "🎨",
18
+ magusPlugins: [
19
+ "dev",
20
+ "code-analysis",
21
+ "terminal",
22
+ "statusline",
23
+ "designer",
24
+ "browser-use",
25
+ "multimodel",
26
+ ],
27
+ anthropicPlugins: [
28
+ "feature-dev",
29
+ "frontend-design",
30
+ "code-simplifier",
31
+ "explanatory-output-style",
32
+ "typescript-lsp",
33
+ ],
34
+ skills: [
35
+ "React Best Practices",
36
+ "Web Design Guidelines",
37
+ "shadcn/ui",
38
+ "UI/UX Pro Max",
39
+ "Find Skills",
40
+ ],
41
+ settings: {
42
+ effortLevel: "high",
43
+ alwaysThinkingEnabled: true,
44
+ model: "claude-sonnet-4-6",
45
+ outputStyle: "explanatory",
46
+ env: {
47
+ CLAUDE_CODE_ENABLE_TASKS: "true",
48
+ CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "true",
49
+ },
50
+ includeGitInstructions: true,
51
+ respectGitignore: true,
52
+ enableAllProjectMcpServers: true,
53
+ },
54
+ },
55
+ {
56
+ id: "backend-forge",
57
+ name: "Backend Forge",
58
+ description: "API development, debugging, code quality, data workflows",
59
+ icon: "⚙️",
60
+ magusPlugins: [
61
+ "dev",
62
+ "code-analysis",
63
+ "terminal",
64
+ "statusline",
65
+ "conductor",
66
+ "multimodel",
67
+ "gtd",
68
+ ],
69
+ anthropicPlugins: [
70
+ "feature-dev",
71
+ "code-review",
72
+ "code-simplifier",
73
+ "commit-commands",
74
+ "security-guidance",
75
+ "agent-sdk-dev",
76
+ ],
77
+ skills: ["Systematic Debugging", "Neon Postgres", "Find Skills"],
78
+ settings: {
79
+ effortLevel: "high",
80
+ alwaysThinkingEnabled: true,
81
+ model: "claude-sonnet-4-6",
82
+ outputStyle: "concise",
83
+ env: {
84
+ CLAUDE_CODE_ENABLE_TASKS: "true",
85
+ CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "true",
86
+ },
87
+ includeGitInstructions: true,
88
+ respectGitignore: true,
89
+ enableAllProjectMcpServers: true,
90
+ },
91
+ },
92
+ {
93
+ id: "infra-ops",
94
+ name: "Infra Ops",
95
+ description:
96
+ "Infrastructure, operational debugging, automation, terminal-first",
97
+ icon: "🔧",
98
+ magusPlugins: [
99
+ "dev",
100
+ "code-analysis",
101
+ "terminal",
102
+ "statusline",
103
+ "multimodel",
104
+ "gtd",
105
+ "browser-use",
106
+ ],
107
+ anthropicPlugins: [
108
+ "claude-code-setup",
109
+ "hookify",
110
+ "code-review",
111
+ "commit-commands",
112
+ "security-guidance",
113
+ "plugin-dev",
114
+ ],
115
+ skills: ["Systematic Debugging", "Find Skills"],
116
+ settings: {
117
+ effortLevel: "high",
118
+ alwaysThinkingEnabled: true,
119
+ model: "claude-opus-4-6",
120
+ outputStyle: "concise",
121
+ env: {
122
+ CLAUDE_CODE_ENABLE_TASKS: "true",
123
+ CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "true",
124
+ },
125
+ includeGitInstructions: true,
126
+ respectGitignore: true,
127
+ enableAllProjectMcpServers: true,
128
+ },
129
+ },
130
+ {
131
+ id: "growth-marketer",
132
+ name: "Growth Marketer",
133
+ description:
134
+ "SEO, website audits, content production, marketing automation",
135
+ icon: "📈",
136
+ magusPlugins: [
137
+ "dev",
138
+ "code-analysis",
139
+ "terminal",
140
+ "statusline",
141
+ "seo",
142
+ "browser-use",
143
+ "nanobanana",
144
+ "video-editing",
145
+ ],
146
+ anthropicPlugins: [
147
+ "explanatory-output-style",
148
+ "frontend-design",
149
+ "playground",
150
+ ],
151
+ skills: [
152
+ "Audit Website",
153
+ "Web Design Guidelines",
154
+ "ElevenLabs TTS",
155
+ "Find Skills",
156
+ ],
157
+ settings: {
158
+ effortLevel: "medium",
159
+ alwaysThinkingEnabled: false,
160
+ model: "claude-sonnet-4-6",
161
+ outputStyle: "explanatory",
162
+ env: { CLAUDE_CODE_ENABLE_TASKS: "true" },
163
+ respectGitignore: true,
164
+ enableAllProjectMcpServers: true,
165
+ },
166
+ },
167
+ {
168
+ id: "team-lead",
169
+ name: "Team Lead",
170
+ description:
171
+ "Planning, code review, coordination, and broad repo visibility",
172
+ icon: "👔",
173
+ magusPlugins: [
174
+ "dev",
175
+ "code-analysis",
176
+ "terminal",
177
+ "statusline",
178
+ "multimodel",
179
+ "gtd",
180
+ "agentdev",
181
+ ],
182
+ anthropicPlugins: [
183
+ "code-review",
184
+ "pr-review-toolkit",
185
+ "claude-md-management",
186
+ "commit-commands",
187
+ "explanatory-output-style",
188
+ "skill-creator",
189
+ ],
190
+ skills: ["Systematic Debugging", "Find Skills", "Audit Website"],
191
+ settings: {
192
+ effortLevel: "medium",
193
+ alwaysThinkingEnabled: true,
194
+ model: "claude-sonnet-4-6",
195
+ outputStyle: "explanatory",
196
+ env: {
197
+ CLAUDE_CODE_ENABLE_TASKS: "true",
198
+ CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "true",
199
+ },
200
+ includeGitInstructions: true,
201
+ respectGitignore: true,
202
+ enableAllProjectMcpServers: true,
203
+ },
204
+ },
205
+ ];
@@ -0,0 +1,139 @@
1
+ // Virtual marketplace name for the community sub-section of claude-plugins-official
2
+ export const COMMUNITY_VIRTUAL_MARKETPLACE = "claude-plugins-official:community";
3
+ // The marketplace that gets split into Anthropic Official + Community sections
4
+ export const SPLIT_MARKETPLACE = "claude-plugins-official";
5
+ /**
6
+ * Derives tone and badge for a category item based on marketplace identity.
7
+ */
8
+ function categoryStyling(mp, isCommunitySection, marketplaceEnabled) {
9
+ if (!marketplaceEnabled) {
10
+ return { tone: "gray" };
11
+ }
12
+ if (isCommunitySection) {
13
+ return { tone: "gray", badge: "3rd Party" };
14
+ }
15
+ if (mp.name === "claude-plugins-official") {
16
+ return { tone: "yellow", badge: "★ Official" };
17
+ }
18
+ if (mp.name === "claude-code-plugins") {
19
+ return { tone: "red", badge: "⚠ Deprecated" };
20
+ }
21
+ if (mp.official) {
22
+ return { tone: "yellow", badge: "★ Official" };
23
+ }
24
+ return { tone: "green", badge: "✓ Added" };
25
+ }
26
+ /**
27
+ * Builds the flat list of items for the PluginsScreen list panel.
28
+ * Extracted from PluginsScreen so it can be tested independently.
29
+ */
30
+ export function buildPluginBrowserItems({ marketplaces, plugins, collapsedMarketplaces, }) {
31
+ const pluginsByMarketplace = new Map();
32
+ for (const plugin of plugins) {
33
+ const existing = pluginsByMarketplace.get(plugin.marketplace) || [];
34
+ existing.push(plugin);
35
+ pluginsByMarketplace.set(plugin.marketplace, existing);
36
+ }
37
+ // Sort marketplaces: deprecated ones go to the bottom
38
+ const sortedMarketplaces = [...marketplaces].sort((a, b) => {
39
+ const aDeprecated = a.name === "claude-code-plugins" ? 1 : 0;
40
+ const bDeprecated = b.name === "claude-code-plugins" ? 1 : 0;
41
+ return aDeprecated - bDeprecated;
42
+ });
43
+ const items = [];
44
+ for (const marketplace of sortedMarketplaces) {
45
+ const marketplacePlugins = pluginsByMarketplace.get(marketplace.name) || [];
46
+ const isCollapsed = collapsedMarketplaces.has(marketplace.name);
47
+ const isEnabled = marketplacePlugins.length > 0 || !!marketplace.official;
48
+ const hasPlugins = marketplacePlugins.length > 0;
49
+ // Special handling: split claude-plugins-official into two sub-sections
50
+ if (marketplace.name === SPLIT_MARKETPLACE && hasPlugins) {
51
+ const anthropicPlugins = marketplacePlugins.filter((p) => p.author?.name?.toLowerCase() === "anthropic");
52
+ const communityPlugins = marketplacePlugins.filter((p) => p.author?.name?.toLowerCase() !== "anthropic");
53
+ // Sub-section 1: Anthropic Official (plugins by Anthropic)
54
+ const anthropicCollapsed = collapsedMarketplaces.has(marketplace.name);
55
+ const anthropicHasPlugins = anthropicPlugins.length > 0;
56
+ const anthropicStyle = categoryStyling(marketplace, false, isEnabled);
57
+ items.push({
58
+ id: `mp:${marketplace.name}`,
59
+ kind: "category",
60
+ label: marketplace.displayName,
61
+ marketplace,
62
+ marketplaceEnabled: isEnabled,
63
+ pluginCount: anthropicPlugins.length,
64
+ isExpanded: !anthropicCollapsed && anthropicHasPlugins,
65
+ tone: anthropicStyle.tone,
66
+ badge: anthropicStyle.badge,
67
+ });
68
+ if (isEnabled && anthropicHasPlugins && !anthropicCollapsed) {
69
+ for (const plugin of anthropicPlugins) {
70
+ items.push({
71
+ id: `pl:${plugin.id}`,
72
+ kind: "plugin",
73
+ label: plugin.name,
74
+ plugin,
75
+ });
76
+ }
77
+ }
78
+ // Sub-section 2: Community (third-party plugins in same marketplace)
79
+ if (communityPlugins.length > 0) {
80
+ const communityVirtualMp = {
81
+ name: COMMUNITY_VIRTUAL_MARKETPLACE,
82
+ displayName: "Anthropic Official — 3rd Party",
83
+ source: marketplace.source,
84
+ description: "Third-party plugins in the Anthropic Official marketplace",
85
+ };
86
+ const communityCollapsed = collapsedMarketplaces.has(COMMUNITY_VIRTUAL_MARKETPLACE);
87
+ const communityStyle = categoryStyling(communityVirtualMp, true, true);
88
+ items.push({
89
+ id: `mp:${COMMUNITY_VIRTUAL_MARKETPLACE}`,
90
+ kind: "category",
91
+ label: "Anthropic Official — 3rd Party",
92
+ marketplace: communityVirtualMp,
93
+ marketplaceEnabled: true,
94
+ pluginCount: communityPlugins.length,
95
+ isExpanded: !communityCollapsed,
96
+ isCommunitySection: true,
97
+ tone: communityStyle.tone,
98
+ badge: communityStyle.badge,
99
+ });
100
+ if (!communityCollapsed) {
101
+ for (const plugin of communityPlugins) {
102
+ items.push({
103
+ id: `pl:${plugin.id}`,
104
+ kind: "plugin",
105
+ label: plugin.name,
106
+ plugin,
107
+ });
108
+ }
109
+ }
110
+ }
111
+ continue;
112
+ }
113
+ // Category header (marketplace)
114
+ const style = categoryStyling(marketplace, false, isEnabled);
115
+ items.push({
116
+ id: `mp:${marketplace.name}`,
117
+ kind: "category",
118
+ label: marketplace.displayName,
119
+ marketplace,
120
+ marketplaceEnabled: isEnabled,
121
+ pluginCount: marketplacePlugins.length,
122
+ isExpanded: !isCollapsed && hasPlugins,
123
+ tone: style.tone,
124
+ badge: style.badge,
125
+ });
126
+ // Plugins under this marketplace (if expanded)
127
+ if (isEnabled && hasPlugins && !isCollapsed) {
128
+ for (const plugin of marketplacePlugins) {
129
+ items.push({
130
+ id: `pl:${plugin.id}`,
131
+ kind: "plugin",
132
+ label: plugin.name,
133
+ plugin,
134
+ });
135
+ }
136
+ }
137
+ }
138
+ return items;
139
+ }