claudeup 4.28.0 → 4.29.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudeup",
3
- "version": "4.28.0",
3
+ "version": "4.29.0",
4
4
  "description": "TUI tool for managing Claude Code plugins, MCPs, and configuration",
5
5
  "type": "module",
6
6
  "main": "src/main.tsx",
@@ -64,8 +64,8 @@
64
64
  "typescript": "^5.6.3"
65
65
  },
66
66
  "optionalDependencies": {
67
- "claudeup-darwin-arm64": "4.28.0",
68
- "claudeup-darwin-x64": "4.28.0",
69
- "claudeup-linux-x64": "4.28.0"
67
+ "claudeup-darwin-arm64": "4.29.0",
68
+ "claudeup-darwin-x64": "4.29.0",
69
+ "claudeup-linux-x64": "4.29.0"
70
70
  }
71
71
  }
@@ -33,13 +33,41 @@ function badgeFor(marketplace: Marketplace): string | undefined {
33
33
  return category && "badge" in category ? category.badge : undefined;
34
34
  }
35
35
 
36
+ /** Tone for a marketplace when it has plugins and is expanded. */
37
+ function toneFor(marketplace: Marketplace): string | undefined {
38
+ const items = buildPluginBrowserItems({
39
+ marketplaces: [marketplace],
40
+ plugins: [
41
+ { id: `demo@${marketplace.name}`, name: "demo", marketplace: marketplace.name } as never,
42
+ ],
43
+ collapsedMarketplaces: new Set(),
44
+ });
45
+ const category = items.find((i) => i.kind === "category");
46
+ return category && "tone" in category ? category.tone : undefined;
47
+ }
48
+
36
49
  describe("marketplace category badge", () => {
50
+ test("the byline uses a low-key tone, not an attention-grabbing one", () => {
51
+ // It is a signature, not a status. Green reads as "action succeeded" and
52
+ // competes with the plugin rows for attention.
53
+ expect(
54
+ toneFor(mp({ name: "magus", source: { source: "github", repo: "MadAppGang/magus" } })),
55
+ ).toBe("byline");
56
+
57
+ // A third-party marketplace still uses the green "Added" status tone.
58
+ expect(
59
+ toneFor(
60
+ mp({ name: "sp", source: { source: "github", repo: "obra/superpowers-marketplace" } }),
61
+ ),
62
+ ).toBe("green");
63
+ });
64
+
37
65
  test("MadAppGang marketplaces carry the byline instead of a generic label", () => {
38
66
  for (const name of ["magus", "magus-marketing", "magus-alpha"]) {
39
67
  const badge = badgeFor(
40
68
  mp({ name, source: { source: "github", repo: `MadAppGang/${name}` } }),
41
69
  );
42
- expect(badge).toBe("made with ❤️ by MadAppGang");
70
+ expect(badge).toBe("by MadAppGang");
43
71
  }
44
72
  });
45
73
 
@@ -48,7 +76,7 @@ describe("marketplace category badge", () => {
48
76
  const badge = badgeFor(
49
77
  mp({ name: "magus", source: { source: "github", repo: "madappgang/magus" } }),
50
78
  );
51
- expect(badge).toBe("made with ❤️ by MadAppGang");
79
+ expect(badge).toBe("by MadAppGang");
52
80
  });
53
81
 
54
82
  test("someone else's marketplace does NOT claim the byline", () => {
@@ -18,7 +18,7 @@ export interface PluginCategoryItem {
18
18
  isExpanded: boolean;
19
19
  isCommunitySection?: boolean;
20
20
  /** Visual tone for the category row */
21
- tone: "yellow" | "gray" | "green" | "red" | "purple" | "teal";
21
+ tone: "yellow" | "gray" | "green" | "red" | "purple" | "teal" | "byline";
22
22
  /** Badge text shown on category row (e.g. "★ Official") */
23
23
  badge?: string;
24
24
  }
@@ -66,7 +66,7 @@ function categoryStyling(
66
66
  return { tone: "yellow", badge: "★ Official" };
67
67
  }
68
68
  if (isMadAppGang(mp)) {
69
- return { tone: "green", badge: "made with ❤️ by MadAppGang" };
69
+ return { tone: "byline", badge: "by MadAppGang" };
70
70
  }
71
71
  return { tone: "green", badge: "✓ Added" };
72
72
  }
@@ -52,6 +52,7 @@ function categoryRow(item: PluginCategoryItem, isSelected: boolean): React.React
52
52
  red: "red",
53
53
  purple: theme.colors.accent,
54
54
  teal: "cyan",
55
+ byline: theme.colors.byline,
55
56
  };
56
57
 
57
58
  return (
package/src/ui/theme.ts CHANGED
@@ -6,6 +6,8 @@ export const theme = {
6
6
  border: "#444444",
7
7
  link: "#5c9aff",
8
8
  accent: "#7e57c2",
9
+ /** Low-key brand tint for bylines — readable, deliberately not attention-grabbing. */
10
+ byline: "#8a7fa8",
9
11
  success: "green",
10
12
  warning: "yellow",
11
13
  danger: "red",