claudeup 4.0.0 → 4.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.
@@ -1,4 +1,4 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "@opentui/react/jsx-runtime";
1
+ import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "@opentui/react/jsx-runtime";
2
2
  import { theme } from "../theme.js";
3
3
  // ─── Helpers ───────────────────────────────────────────────────────────────────
4
4
  function truncate(s, maxLen) {
@@ -31,6 +31,12 @@ export function humanizeKey(key) {
31
31
  model: "Model",
32
32
  outputStyle: "Output",
33
33
  alwaysThinkingEnabled: "Thinking",
34
+ includeGitInstructions: "Git Instructions",
35
+ respectGitignore: "Gitignore",
36
+ enableAllProjectMcpServers: "Auto MCP",
37
+ autoUpdatesChannel: "Updates",
38
+ language: "Language",
39
+ cleanupPeriodDays: "Cleanup",
34
40
  };
35
41
  return labels[key] ?? key;
36
42
  }
@@ -81,24 +87,23 @@ const predefinedRenderer = {
81
87
  const { profile } = item;
82
88
  const pluginCount = profile.magusPlugins.length + profile.anthropicPlugins.length;
83
89
  const skillCount = profile.skills.length;
84
- const label = truncate(`${profile.name} — ${pluginCount} plugins · ${skillCount} skill${skillCount !== 1 ? "s" : ""}`, 45);
90
+ const countStr = `${pluginCount}p ${skillCount}s`;
85
91
  if (isSelected) {
86
- return (_jsxs("text", { bg: "blue", fg: "white", children: [" ", label, " "] }));
92
+ return (_jsxs("text", { bg: theme.selection.bg, fg: theme.selection.fg, children: [" ", profile.name, " ", countStr, " "] }));
87
93
  }
88
- return (_jsxs("text", { children: [_jsx("span", { fg: theme.colors.muted, children: "- " }), _jsx("span", { fg: theme.colors.text, children: label })] }));
94
+ return (_jsxs("text", { children: [_jsxs("span", { fg: "white", children: [" ", profile.name] }), _jsxs("span", { fg: theme.colors.dim, children: [" ", countStr] })] }));
89
95
  },
90
96
  renderDetail: ({ item }) => {
91
97
  const { profile } = item;
92
- const magusNames = profile.magusPlugins;
93
- const anthropicNames = profile.anthropicPlugins;
94
- const magusLines = wrapNames(magusNames);
95
- const anthropicLines = wrapNames(anthropicNames);
96
- const skillLines = wrapNames(profile.skills);
97
98
  const settingEntries = Object.entries(profile.settings).filter(([k]) => k !== "env");
98
99
  const envMap = profile.settings["env"] ?? {};
99
100
  const tasksOn = envMap["CLAUDE_CODE_ENABLE_TASKS"] === "true";
100
101
  const teamsOn = envMap["CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS"] === "true";
101
- return (_jsxs("box", { flexDirection: "column", children: [_jsx("text", { fg: theme.colors.text, children: _jsx("strong", { children: profile.name }) }), _jsx("box", { marginTop: 1, children: _jsx("text", { fg: theme.colors.muted, children: profile.description }) }), _jsx("box", { marginTop: 1, children: _jsx("text", { fg: theme.colors.dim, children: DIVIDER }) }), _jsxs("box", { marginTop: 1, flexDirection: "column", children: [_jsxs("text", { fg: theme.colors.muted, children: ["Magus plugins (", magusNames.length, "):"] }), magusLines.map((line, i) => (_jsxs("text", { fg: theme.colors.info, children: [" ", line] }, i)))] }), _jsxs("box", { marginTop: 1, flexDirection: "column", children: [_jsxs("text", { fg: theme.colors.muted, children: ["Anthropic plugins (", anthropicNames.length, "):"] }), anthropicLines.map((line, i) => (_jsxs("text", { fg: theme.colors.warning, children: [" ", line] }, i)))] }), _jsxs("box", { marginTop: 1, flexDirection: "column", children: [_jsxs("text", { fg: theme.colors.muted, children: ["Skills (", profile.skills.length, "):"] }), skillLines.map((line, i) => (_jsxs("text", { fg: theme.colors.text, children: [" ", line] }, i)))] }), _jsx("box", { marginTop: 1, children: _jsx("text", { fg: theme.colors.dim, children: DIVIDER }) }), _jsxs("box", { marginTop: 1, flexDirection: "column", children: [_jsx("text", { fg: theme.colors.muted, children: "Settings:" }), settingEntries.map(([k, v]) => (_jsxs("text", { children: [_jsxs("span", { fg: theme.colors.muted, children: [" ", humanizeKey(k).padEnd(14)] }), _jsx("span", { fg: theme.colors.text, children: humanizeValue(k, v) })] }, k))), tasksOn && (_jsxs("text", { children: [_jsxs("span", { fg: theme.colors.muted, children: [" ", "Tasks".padEnd(14)] }), _jsx("span", { fg: theme.colors.text, children: "on" })] })), teamsOn && (_jsxs("text", { children: [_jsxs("span", { fg: theme.colors.muted, children: [" ", "Agent Teams".padEnd(14)] }), _jsx("span", { fg: theme.colors.text, children: "on" })] }))] }), _jsx("box", { marginTop: 1, children: _jsx("text", { fg: theme.colors.dim, children: DIVIDER }) }), _jsxs("box", { marginTop: 1, children: [_jsxs("text", { bg: "blue", fg: "white", children: [" ", "Enter/a", " "] }), _jsx("text", { fg: theme.colors.muted, children: " Apply to project" })] })] }));
102
+ return (_jsxs("box", { flexDirection: "column", children: [_jsx("box", { children: _jsx("text", { bg: theme.colors.accent, fg: "white", children: _jsxs("strong", { children: [" ", profile.name, " "] }) }) }), _jsx("box", { marginTop: 1, children: _jsx("text", { fg: theme.colors.muted, children: profile.description }) }), _jsx("box", { children: _jsx("text", { fg: theme.colors.muted, children: `\nMagus (${profile.magusPlugins.length})` }) }), _jsx("box", { children: _jsx("text", { fg: "#00bfa5", children: profile.magusPlugins.map((p) => ` ■ ${p}`).join("\n") }) }), _jsx("box", { children: _jsx("text", { fg: theme.colors.muted, children: `\nAnthropic (${profile.anthropicPlugins.length})` }) }), _jsx("box", { children: _jsx("text", { fg: "#b39ddb", children: profile.anthropicPlugins.map((p) => ` ■ ${p}`).join("\n") }) }), profile.skills.length > 0 && (_jsxs(_Fragment, { children: [_jsx("box", { children: _jsx("text", { fg: theme.colors.muted, children: `\nSkills (${profile.skills.length})` }) }), _jsx("box", { children: _jsx("text", { fg: "#ffd54f", children: profile.skills.map((s) => ` ■ ${s}`).join("\n") }) })] })), _jsx("box", { children: _jsx("text", { fg: theme.colors.dim, children: `\n${DIVIDER}` }) }), _jsx("box", { children: _jsx("text", { fg: theme.colors.muted, children: [
103
+ ...settingEntries.map(([k, v]) => ` ${humanizeKey(k).padEnd(18)}${humanizeValue(k, v)}`),
104
+ ...(tasksOn ? [` ${"Tasks".padEnd(18)}on`] : []),
105
+ ...(teamsOn ? [` ${"Agent Teams".padEnd(18)}on`] : []),
106
+ ].join("\n") }) }), _jsx("box", { children: _jsx("text", { fg: theme.colors.dim, children: `\n${DIVIDER}` }) }), _jsx("box", { children: _jsx("text", { fg: theme.colors.info, children: " Enter/a to apply" }) })] }));
102
107
  },
103
108
  };
104
109
  // ─── Saved renderer ────────────────────────────────────────────────────────────
@@ -36,6 +36,12 @@ export function humanizeKey(key: string): string {
36
36
  model: "Model",
37
37
  outputStyle: "Output",
38
38
  alwaysThinkingEnabled: "Thinking",
39
+ includeGitInstructions: "Git Instructions",
40
+ respectGitignore: "Gitignore",
41
+ enableAllProjectMcpServers: "Auto MCP",
42
+ autoUpdatesChannel: "Updates",
43
+ language: "Language",
44
+ cleanupPeriodDays: "Cleanup",
39
45
  };
40
46
  return labels[key] ?? key;
41
47
  }
@@ -106,36 +112,26 @@ const predefinedRenderer: ItemRenderer<{ kind: "predefined"; profile: Predefined
106
112
  const pluginCount =
107
113
  profile.magusPlugins.length + profile.anthropicPlugins.length;
108
114
  const skillCount = profile.skills.length;
109
- const label = truncate(
110
- `${profile.name} — ${pluginCount} plugins · ${skillCount} skill${skillCount !== 1 ? "s" : ""}`,
111
- 45,
112
- );
115
+ const countStr = `${pluginCount}p ${skillCount}s`;
113
116
 
114
117
  if (isSelected) {
115
118
  return (
116
- <text bg="blue" fg="white">
117
- {" "}
118
- {label}{" "}
119
+ <text bg={theme.selection.bg} fg={theme.selection.fg}>
120
+ {" "}{profile.name} {countStr}{" "}
119
121
  </text>
120
122
  );
121
123
  }
122
124
 
123
125
  return (
124
126
  <text>
125
- <span fg={theme.colors.muted}>{"- "}</span>
126
- <span fg={theme.colors.text}>{label}</span>
127
+ <span fg="white">{" "}{profile.name}</span>
128
+ <span fg={theme.colors.dim}> {countStr}</span>
127
129
  </text>
128
130
  );
129
131
  },
130
132
 
131
133
  renderDetail: ({ item }) => {
132
134
  const { profile } = item;
133
- const magusNames = profile.magusPlugins;
134
- const anthropicNames = profile.anthropicPlugins;
135
- const magusLines = wrapNames(magusNames);
136
- const anthropicLines = wrapNames(anthropicNames);
137
- const skillLines = wrapNames(profile.skills);
138
-
139
135
  const settingEntries = Object.entries(profile.settings).filter(
140
136
  ([k]) => k !== "env",
141
137
  );
@@ -146,89 +142,42 @@ const predefinedRenderer: ItemRenderer<{ kind: "predefined"; profile: Predefined
146
142
 
147
143
  return (
148
144
  <box flexDirection="column">
149
- <text fg={theme.colors.text}>
150
- <strong>{profile.name}</strong>
151
- </text>
152
- <box marginTop={1}>
153
- <text fg={theme.colors.muted}>{profile.description}</text>
154
- </box>
155
- <box marginTop={1}>
156
- <text fg={theme.colors.dim}>{DIVIDER}</text>
157
- </box>
158
- <box marginTop={1} flexDirection="column">
159
- <text fg={theme.colors.muted}>
160
- Magus plugins ({magusNames.length}):
145
+ <box>
146
+ <text bg={theme.colors.accent} fg="white">
147
+ <strong> {profile.name} </strong>
161
148
  </text>
162
- {magusLines.map((line, i) => (
163
- <text key={i} fg={theme.colors.info}>
164
- {" "}
165
- {line}
166
- </text>
167
- ))}
168
- </box>
169
- <box marginTop={1} flexDirection="column">
170
- <text fg={theme.colors.muted}>
171
- Anthropic plugins ({anthropicNames.length}):
172
- </text>
173
- {anthropicLines.map((line, i) => (
174
- <text key={i} fg={theme.colors.warning}>
175
- {" "}
176
- {line}
177
- </text>
178
- ))}
179
- </box>
180
- <box marginTop={1} flexDirection="column">
181
- <text fg={theme.colors.muted}>Skills ({profile.skills.length}):</text>
182
- {skillLines.map((line, i) => (
183
- <text key={i} fg={theme.colors.text}>
184
- {" "}
185
- {line}
186
- </text>
187
- ))}
188
149
  </box>
189
150
  <box marginTop={1}>
190
- <text fg={theme.colors.dim}>{DIVIDER}</text>
191
- </box>
192
- <box marginTop={1} flexDirection="column">
193
- <text fg={theme.colors.muted}>Settings:</text>
194
- {settingEntries.map(([k, v]) => (
195
- <text key={k}>
196
- <span fg={theme.colors.muted}>
197
- {" "}
198
- {humanizeKey(k).padEnd(14)}
199
- </span>
200
- <span fg={theme.colors.text}>{humanizeValue(k, v)}</span>
201
- </text>
202
- ))}
203
- {tasksOn && (
204
- <text>
205
- <span fg={theme.colors.muted}>
206
- {" "}
207
- {"Tasks".padEnd(14)}
208
- </span>
209
- <span fg={theme.colors.text}>on</span>
210
- </text>
211
- )}
212
- {teamsOn && (
213
- <text>
214
- <span fg={theme.colors.muted}>
215
- {" "}
216
- {"Agent Teams".padEnd(14)}
217
- </span>
218
- <span fg={theme.colors.text}>on</span>
219
- </text>
220
- )}
221
- </box>
222
- <box marginTop={1}>
223
- <text fg={theme.colors.dim}>{DIVIDER}</text>
224
- </box>
225
- <box marginTop={1}>
226
- <text bg="blue" fg="white">
227
- {" "}
228
- Enter/a{" "}
229
- </text>
230
- <text fg={theme.colors.muted}> Apply to project</text>
151
+ <text fg={theme.colors.muted}>{profile.description}</text>
231
152
  </box>
153
+
154
+ {/* Magus plugins */}
155
+ <box><text fg={theme.colors.muted}>{`\nMagus (${profile.magusPlugins.length})`}</text></box>
156
+ <box><text fg="#00bfa5">{profile.magusPlugins.map((p) => ` ■ ${p}`).join("\n")}</text></box>
157
+
158
+ {/* Anthropic plugins */}
159
+ <box><text fg={theme.colors.muted}>{`\nAnthropic (${profile.anthropicPlugins.length})`}</text></box>
160
+ <box><text fg="#b39ddb">{profile.anthropicPlugins.map((p) => ` ■ ${p}`).join("\n")}</text></box>
161
+
162
+ {/* Skills */}
163
+ {profile.skills.length > 0 && (
164
+ <>
165
+ <box><text fg={theme.colors.muted}>{`\nSkills (${profile.skills.length})`}</text></box>
166
+ <box><text fg="#ffd54f">{profile.skills.map((s) => ` ■ ${s}`).join("\n")}</text></box>
167
+ </>
168
+ )}
169
+
170
+ {/* Settings */}
171
+ <box><text fg={theme.colors.dim}>{`\n${DIVIDER}`}</text></box>
172
+ <box><text fg={theme.colors.muted}>{[
173
+ ...settingEntries.map(([k, v]) => ` ${humanizeKey(k).padEnd(18)}${humanizeValue(k, v)}`),
174
+ ...(tasksOn ? [` ${"Tasks".padEnd(18)}on`] : []),
175
+ ...(teamsOn ? [` ${"Agent Teams".padEnd(18)}on`] : []),
176
+ ].join("\n")}</text></box>
177
+
178
+ {/* Action */}
179
+ <box><text fg={theme.colors.dim}>{`\n${DIVIDER}`}</text></box>
180
+ <box><text fg={theme.colors.info}> Enter/a to apply</text></box>
232
181
  </box>
233
182
  );
234
183
  },