claudeup 4.10.1 → 4.10.2

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudeup",
3
- "version": "4.10.1",
3
+ "version": "4.10.2",
4
4
  "description": "TUI tool for managing Claude Code plugins, MCPs, and configuration",
5
5
  "type": "module",
6
6
  "main": "src/main.tsx",
package/src/ui/App.js CHANGED
@@ -166,7 +166,7 @@ MCP Servers
166
166
  function UpdateBanner({ result }) {
167
167
  if (!result.updateAvailable)
168
168
  return null;
169
- return (_jsxs("box", { paddingLeft: 1, paddingRight: 1, children: [_jsx("text", { bg: "yellow", fg: "black", children: _jsx("strong", { children: " UPDATE " }) }), _jsxs("text", { fg: "yellow", children: [" ", "v", result.currentVersion, " \u2192 v", result.latestVersion] }), _jsx("text", { fg: "gray", children: " Run: " }), _jsx("text", { fg: "cyan", children: "npm i -g claudeup" })] }));
169
+ return (_jsxs("box", { paddingLeft: 1, paddingRight: 1, children: [_jsx("text", { bg: "yellow", fg: "black", children: _jsx("strong", { children: " UPDATE " }) }), _jsxs("text", { fg: "yellow", children: [" ", "v", result.currentVersion, " \u2192 v", result.latestVersion] }), _jsx("text", { fg: "gray", children: " Run: " }), _jsx("text", { fg: "cyan", children: "claudeup update" })] }));
170
170
  }
171
171
  /**
172
172
  * ProgressIndicator Component
@@ -180,6 +180,13 @@ function AppContentInner({ showDebug, onDebugToggle, updateInfo, onExit, }) {
180
180
  const { progress } = state;
181
181
  const dimensions = useDimensions();
182
182
  const [recoveryReport, setRecoveryReport] = useState(null);
183
+ // Auto-dismiss recovery banner after 5 seconds
184
+ useEffect(() => {
185
+ if (!recoveryReport)
186
+ return;
187
+ const timer = setTimeout(() => setRecoveryReport(null), 5000);
188
+ return () => clearTimeout(timer);
189
+ }, [recoveryReport]);
183
190
  // Auto-refresh marketplaces on startup
184
191
  useEffect(() => {
185
192
  const noRefresh = process.argv.includes("--no-refresh");
@@ -194,29 +201,28 @@ function AppContentInner({ showDebug, onDebugToggle, updateInfo, onExit, }) {
194
201
  // Recover stale marketplace registry entries (e.g. "directory" → "github")
195
202
  recoverMarketplaceSettings()
196
203
  .then(async (recovery) => {
197
- const msgs = [];
204
+ const parts = [];
198
205
  if (recovery.reregistered.length > 0) {
199
- msgs.push(`Re-registered as GitHub: ${recovery.reregistered.join(", ")}`);
200
206
  // Update the marketplace clone now that the source is fixed
201
207
  const { updateMarketplace } = await import("../services/claude-cli.js");
202
208
  for (const mp of recovery.reregistered) {
203
209
  try {
204
210
  await updateMarketplace(mp);
205
- msgs.push(`Updated marketplace: ${mp}`);
211
+ parts.push(`${mp} refreshed`);
206
212
  }
207
213
  catch {
208
- msgs.push(`Failed to update: ${mp}`);
214
+ parts.push(`${mp} (update failed)`);
209
215
  }
210
216
  }
211
217
  }
212
218
  if (recovery.enabledAutoUpdate.length > 0) {
213
- msgs.push(`Enabled auto-update: ${recovery.enabledAutoUpdate.join(", ")}`);
219
+ parts.push(`auto-update: ${recovery.enabledAutoUpdate.join(", ")}`);
214
220
  }
215
221
  if (recovery.removed.length > 0) {
216
- msgs.push(`Removed stale: ${recovery.removed.join(", ")}`);
222
+ parts.push(`removed: ${recovery.removed.join(", ")}`);
217
223
  }
218
- if (msgs.length > 0) {
219
- setRecoveryReport(msgs.join("\n"));
224
+ if (parts.length > 0) {
225
+ setRecoveryReport(parts.join(" | "));
220
226
  }
221
227
  })
222
228
  .catch(() => { }); // non-fatal
@@ -229,7 +235,7 @@ function AppContentInner({ showDebug, onDebugToggle, updateInfo, onExit, }) {
229
235
  dispatch({ type: "HIDE_PROGRESS" });
230
236
  });
231
237
  }, [dispatch]);
232
- return (_jsxs("box", { flexDirection: "column", height: dimensions.terminalHeight, children: [updateInfo?.updateAvailable && _jsx(UpdateBanner, { result: updateInfo }), recoveryReport && (_jsxs("box", { paddingLeft: 1, paddingRight: 1, children: [_jsx("text", { bg: "green", fg: "black", children: _jsx("strong", { children: " RECOVERED " }) }), _jsxs("text", { fg: "green", children: [" ", recoveryReport.split("\n").join(" | ")] })] })), showDebug && (_jsx("box", { paddingLeft: 1, paddingRight: 1, children: _jsxs("text", { fg: "#888888", children: ["DEBUG: ", dimensions.terminalWidth, "x", dimensions.terminalHeight, " | content=", dimensions.contentHeight, " | screen=", state.currentRoute.screen] }) })), progress && _jsx(ProgressIndicator, { ...progress }), _jsx("box", { flexDirection: "column", height: dimensions.contentHeight, paddingLeft: 1, paddingRight: 1, children: _jsx(Router, {}) }), _jsx(GlobalKeyHandler, { onDebugToggle: onDebugToggle, onExit: onExit }), _jsx(ModalContainer, {})] }));
238
+ return (_jsxs("box", { flexDirection: "column", height: dimensions.terminalHeight, children: [updateInfo?.updateAvailable && _jsx(UpdateBanner, { result: updateInfo }), recoveryReport && (_jsx("box", { paddingLeft: 1, paddingRight: 1, children: _jsxs("text", { fg: "green", children: ["\u2713 Fixed: ", recoveryReport] }) })), showDebug && (_jsx("box", { paddingLeft: 1, paddingRight: 1, children: _jsxs("text", { fg: "#888888", children: ["DEBUG: ", dimensions.terminalWidth, "x", dimensions.terminalHeight, " | content=", dimensions.contentHeight, " | screen=", state.currentRoute.screen] }) })), progress && _jsx(ProgressIndicator, { ...progress }), _jsx("box", { flexDirection: "column", height: dimensions.contentHeight, paddingLeft: 1, paddingRight: 1, children: _jsx(Router, {}) }), _jsx(GlobalKeyHandler, { onDebugToggle: onDebugToggle, onExit: onExit }), _jsx(ModalContainer, {})] }));
233
239
  }
234
240
  function AppContent({ onExit }) {
235
241
  const { state } = useApp();
package/src/ui/App.tsx CHANGED
@@ -216,7 +216,7 @@ function UpdateBanner({ result }: { result: VersionCheckResult }) {
216
216
  v{result.currentVersion} → v{result.latestVersion}
217
217
  </text>
218
218
  <text fg="gray"> Run: </text>
219
- <text fg="cyan">npm i -g claudeup</text>
219
+ <text fg="cyan">claudeup update</text>
220
220
  </box>
221
221
  );
222
222
  }
@@ -263,6 +263,13 @@ function AppContentInner({
263
263
  const dimensions = useDimensions();
264
264
  const [recoveryReport, setRecoveryReport] = useState<string | null>(null);
265
265
 
266
+ // Auto-dismiss recovery banner after 5 seconds
267
+ useEffect(() => {
268
+ if (!recoveryReport) return;
269
+ const timer = setTimeout(() => setRecoveryReport(null), 5000);
270
+ return () => clearTimeout(timer);
271
+ }, [recoveryReport]);
272
+
266
273
  // Auto-refresh marketplaces on startup
267
274
  useEffect(() => {
268
275
  const noRefresh = process.argv.includes("--no-refresh");
@@ -279,11 +286,8 @@ function AppContentInner({
279
286
  // Recover stale marketplace registry entries (e.g. "directory" → "github")
280
287
  recoverMarketplaceSettings()
281
288
  .then(async (recovery) => {
282
- const msgs: string[] = [];
289
+ const parts: string[] = [];
283
290
  if (recovery.reregistered.length > 0) {
284
- msgs.push(
285
- `Re-registered as GitHub: ${recovery.reregistered.join(", ")}`,
286
- );
287
291
  // Update the marketplace clone now that the source is fixed
288
292
  const { updateMarketplace } = await import(
289
293
  "../services/claude-cli.js"
@@ -291,24 +295,24 @@ function AppContentInner({
291
295
  for (const mp of recovery.reregistered) {
292
296
  try {
293
297
  await updateMarketplace(mp);
294
- msgs.push(`Updated marketplace: ${mp}`);
298
+ parts.push(`${mp} refreshed`);
295
299
  } catch {
296
- msgs.push(`Failed to update: ${mp}`);
300
+ parts.push(`${mp} (update failed)`);
297
301
  }
298
302
  }
299
303
  }
300
304
  if (recovery.enabledAutoUpdate.length > 0) {
301
- msgs.push(
302
- `Enabled auto-update: ${recovery.enabledAutoUpdate.join(", ")}`,
305
+ parts.push(
306
+ `auto-update: ${recovery.enabledAutoUpdate.join(", ")}`,
303
307
  );
304
308
  }
305
309
  if (recovery.removed.length > 0) {
306
- msgs.push(
307
- `Removed stale: ${recovery.removed.join(", ")}`,
310
+ parts.push(
311
+ `removed: ${recovery.removed.join(", ")}`,
308
312
  );
309
313
  }
310
- if (msgs.length > 0) {
311
- setRecoveryReport(msgs.join("\n"));
314
+ if (parts.length > 0) {
315
+ setRecoveryReport(parts.join(" | "));
312
316
  }
313
317
  })
314
318
  .catch(() => {}); // non-fatal
@@ -328,10 +332,7 @@ function AppContentInner({
328
332
  {updateInfo?.updateAvailable && <UpdateBanner result={updateInfo} />}
329
333
  {recoveryReport && (
330
334
  <box paddingLeft={1} paddingRight={1}>
331
- <text bg="green" fg="black">
332
- <strong> RECOVERED </strong>
333
- </text>
334
- <text fg="green"> {recoveryReport.split("\n").join(" | ")}</text>
335
+ <text fg="green">✓ Fixed: {recoveryReport}</text>
335
336
  </box>
336
337
  )}
337
338
  {showDebug && (