@laststance/claude-plugin-dashboard 0.2.2 → 0.3.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.
@@ -3,7 +3,92 @@
3
3
  * These types aggregate data from multiple Claude Code configuration files
4
4
  */
5
5
  /**
6
- * Component types provided by a plugin
6
+ * Component type identifier
7
+ */
8
+ export type ComponentType = 'skill' | 'command' | 'agent' | 'hook' | 'mcp' | 'lsp';
9
+ /**
10
+ * Individual component information with name and optional description
11
+ *
12
+ * Data Source Architecture:
13
+ * ```
14
+ * ┌─────────────────────────────────────────────────────────────┐
15
+ * │ Plugin Installed? │
16
+ * │ │ │
17
+ * │ ┌──── YES ─────┴───── NO ────┐ │
18
+ * │ │ │ │
19
+ * │ ▼ ▼ │
20
+ * │ ┌─────────────────────┐ ┌─────────────────────┐ │
21
+ * │ │ File System Scan │ │ Marketplace JSON │ │
22
+ * │ │ ───────────────── │ │ ───────────────── │ │
23
+ * │ │ skills/{name}/ │ │ skills: [ │ │
24
+ * │ │ commands/{name}.md │ │ "./skills/xlsx" │ │
25
+ * │ │ agents/{name}.md │ │ ] │ │
26
+ * │ │ plugin.json keys │ │ │ │
27
+ * │ └─────────────────────┘ └─────────────────────┘ │
28
+ * │ │ │ │
29
+ * │ ▼ ▼ │
30
+ * │ Names + Descriptions Names only (if available) │
31
+ * │ │
32
+ * │ └────────────────────────────┘ │
33
+ * │ │ │
34
+ * │ ▼ │
35
+ * │ PluginComponentsDetailed │
36
+ * │ ───────────────────────── │
37
+ * │ { │
38
+ * │ skills: [ │
39
+ * │ { name: "xlsx", description: "..." }, │
40
+ * │ { name: "docx" } │
41
+ * │ ], │
42
+ * │ mcpServers: ["supabase", "context7"] │
43
+ * │ } │
44
+ * └─────────────────────────────────────────────────────────────┘
45
+ * ```
46
+ *
47
+ * @example
48
+ * // Skill with description (from SKILL.md frontmatter)
49
+ * { name: "xlsx", description: "Spreadsheet editing", type: "skill" }
50
+ *
51
+ * @example
52
+ * // Command without description
53
+ * { name: "code-review", type: "command" }
54
+ */
55
+ export interface ComponentInfo {
56
+ /** Component name (e.g., "xlsx", "code-review") */
57
+ name: string;
58
+ /** Optional description from SKILL.md frontmatter or first line of .md file */
59
+ description?: string;
60
+ /** Component type for display categorization */
61
+ type: ComponentType;
62
+ }
63
+ /**
64
+ * Detailed component information for a plugin
65
+ * Extends PluginComponents (counts) with actual component names and descriptions
66
+ *
67
+ * @example
68
+ * {
69
+ * skills: [
70
+ * { name: "xlsx", description: "Spreadsheet editing", type: "skill" },
71
+ * { name: "docx", type: "skill" }
72
+ * ],
73
+ * mcpServers: ["supabase", "context7"]
74
+ * }
75
+ */
76
+ export interface PluginComponentsDetailed {
77
+ /** Skill details (name + optional description) */
78
+ skills?: ComponentInfo[];
79
+ /** Command details */
80
+ commands?: ComponentInfo[];
81
+ /** Agent details */
82
+ agents?: ComponentInfo[];
83
+ /** Hook event names */
84
+ hooks?: string[];
85
+ /** MCP server names from plugin.json mcpServers keys */
86
+ mcpServers?: string[];
87
+ /** LSP server language IDs from .lsp.json keys */
88
+ lspServers?: string[];
89
+ }
90
+ /**
91
+ * Component types provided by a plugin (counts only)
7
92
  * Detected by scanning plugin directory structure and plugin.json
8
93
  * @example
9
94
  * { skills: 5, commands: 2, mcpServers: 1 } // Plugin with skills, commands, and MCP
@@ -64,6 +149,8 @@ export interface Plugin {
64
149
  gitCommitSha?: string;
65
150
  /** Component types provided by this plugin (skills, commands, MCP, etc.) */
66
151
  components?: PluginComponents;
152
+ /** Detailed component info with names and descriptions */
153
+ componentsDetailed?: PluginComponentsDetailed;
67
154
  }
68
155
  /**
69
156
  * Raw installed plugin data from installed_plugins.json
@@ -98,6 +185,7 @@ export interface Marketplace {
98
185
  installLocation: string;
99
186
  lastUpdated: string;
100
187
  pluginCount?: number;
188
+ autoUpdate?: boolean;
101
189
  }
102
190
  /**
103
191
  * Structure of known_marketplaces.json file
@@ -111,6 +199,7 @@ export interface KnownMarketplacesFile {
111
199
  };
112
200
  installLocation: string;
113
201
  lastUpdated: string;
202
+ autoUpdate?: boolean;
114
203
  };
115
204
  }
116
205
  /**
@@ -128,6 +217,12 @@ export interface MarketplacePluginEntry {
128
217
  homepage?: string;
129
218
  tags?: string[];
130
219
  keywords?: string[];
220
+ /** Skill paths from marketplace.json (e.g., ["./skills/xlsx"]) */
221
+ skills?: string[];
222
+ /** Agent paths from marketplace.json */
223
+ agents?: string[];
224
+ /** Command paths from marketplace.json */
225
+ commands?: string[];
131
226
  }
132
227
  /**
133
228
  * Structure of marketplace.json file
@@ -229,6 +324,10 @@ export interface AppState {
229
324
  showAddMarketplaceDialog: boolean;
230
325
  /** Error message for add marketplace dialog */
231
326
  addMarketplaceError: string | null;
327
+ /** Whether marketplace action menu is showing */
328
+ showMarketplaceActionMenu: boolean;
329
+ /** Selected index in marketplace action menu */
330
+ actionMenuSelectedIndex: number;
232
331
  }
233
332
  /**
234
333
  * Action types for useReducer
@@ -317,4 +416,14 @@ export type Action = {
317
416
  } | {
318
417
  type: 'SET_ADD_MARKETPLACE_ERROR';
319
418
  payload: string | null;
419
+ } | {
420
+ type: 'SHOW_MARKETPLACE_ACTION_MENU';
421
+ } | {
422
+ type: 'HIDE_MARKETPLACE_ACTION_MENU';
423
+ } | {
424
+ type: 'SET_ACTION_MENU_INDEX';
425
+ payload: number;
426
+ } | {
427
+ type: 'MOVE_ACTION_MENU_SELECTION';
428
+ payload: 'up' | 'down';
320
429
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@laststance/claude-plugin-dashboard",
3
- "version": "0.2.2",
3
+ "version": "0.3.0",
4
4
  "description": "Interactive CLI dashboard to manage Claude Code plugins",
5
5
  "license": "MIT",
6
6
  "author": "Ryota Murakami <ryota.murakami@laststance.io> (https://github.com/ryota-murakami)",
@@ -50,8 +50,10 @@
50
50
  "test:coverage": "vitest run --coverage"
51
51
  },
52
52
  "dependencies": {
53
+ "fullscreen-ink": "^0.1.0",
53
54
  "ink": "^5.1.0",
54
- "react": "^18.3.1"
55
+ "react": "^18.3.1",
56
+ "ts-pattern": "^5.9.0"
55
57
  },
56
58
  "devDependencies": {
57
59
  "@sindresorhus/tsconfig": "^6.0.0",
@@ -65,4 +67,4 @@
65
67
  "typescript": "^5.7.2",
66
68
  "vitest": "^4.0.16"
67
69
  }
68
- }
70
+ }