claudeup 0.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.
- package/README.md +91 -0
- package/bin/claudeup.js +6 -0
- package/dist/data/cli-tools.d.ts +13 -0
- package/dist/data/cli-tools.d.ts.map +1 -0
- package/dist/data/cli-tools.js +91 -0
- package/dist/data/cli-tools.js.map +1 -0
- package/dist/data/marketplaces.d.ts +4 -0
- package/dist/data/marketplaces.d.ts.map +1 -0
- package/dist/data/marketplaces.js +26 -0
- package/dist/data/marketplaces.js.map +1 -0
- package/dist/data/mcp-servers.d.ts +8 -0
- package/dist/data/mcp-servers.d.ts.map +1 -0
- package/dist/data/mcp-servers.js +421 -0
- package/dist/data/mcp-servers.js.map +1 -0
- package/dist/data/statuslines.d.ts +10 -0
- package/dist/data/statuslines.d.ts.map +1 -0
- package/dist/data/statuslines.js +160 -0
- package/dist/data/statuslines.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/services/claude-settings.d.ts +31 -0
- package/dist/services/claude-settings.d.ts.map +1 -0
- package/dist/services/claude-settings.js +177 -0
- package/dist/services/claude-settings.js.map +1 -0
- package/dist/services/mcp-registry.d.ts +10 -0
- package/dist/services/mcp-registry.d.ts.map +1 -0
- package/dist/services/mcp-registry.js +88 -0
- package/dist/services/mcp-registry.js.map +1 -0
- package/dist/services/plugin-manager.d.ts +22 -0
- package/dist/services/plugin-manager.d.ts.map +1 -0
- package/dist/services/plugin-manager.js +115 -0
- package/dist/services/plugin-manager.js.map +1 -0
- package/dist/types/index.d.ts +83 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/app.d.ts +28 -0
- package/dist/ui/app.d.ts.map +1 -0
- package/dist/ui/app.js +408 -0
- package/dist/ui/app.js.map +1 -0
- package/dist/ui/screens/cli-tools.d.ts +3 -0
- package/dist/ui/screens/cli-tools.d.ts.map +1 -0
- package/dist/ui/screens/cli-tools.js +314 -0
- package/dist/ui/screens/cli-tools.js.map +1 -0
- package/dist/ui/screens/main-menu.d.ts +3 -0
- package/dist/ui/screens/main-menu.d.ts.map +1 -0
- package/dist/ui/screens/main-menu.js +110 -0
- package/dist/ui/screens/main-menu.js.map +1 -0
- package/dist/ui/screens/marketplace.d.ts +3 -0
- package/dist/ui/screens/marketplace.d.ts.map +1 -0
- package/dist/ui/screens/marketplace.js +132 -0
- package/dist/ui/screens/marketplace.js.map +1 -0
- package/dist/ui/screens/mcp-registry.d.ts +10 -0
- package/dist/ui/screens/mcp-registry.d.ts.map +1 -0
- package/dist/ui/screens/mcp-registry.js +310 -0
- package/dist/ui/screens/mcp-registry.js.map +1 -0
- package/dist/ui/screens/mcp-setup.d.ts +4 -0
- package/dist/ui/screens/mcp-setup.d.ts.map +1 -0
- package/dist/ui/screens/mcp-setup.js +417 -0
- package/dist/ui/screens/mcp-setup.js.map +1 -0
- package/dist/ui/screens/plugins.d.ts +3 -0
- package/dist/ui/screens/plugins.d.ts.map +1 -0
- package/dist/ui/screens/plugins.js +330 -0
- package/dist/ui/screens/plugins.js.map +1 -0
- package/dist/ui/screens/statusline.d.ts +5 -0
- package/dist/ui/screens/statusline.d.ts.map +1 -0
- package/dist/ui/screens/statusline.js +235 -0
- package/dist/ui/screens/statusline.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ClaudeSettings, ClaudeLocalSettings, McpServerConfig, Marketplace, MarketplaceSource } from '../types/index.js';
|
|
2
|
+
export declare function getClaudeDir(projectPath?: string): string;
|
|
3
|
+
export declare function getGlobalClaudeDir(): string;
|
|
4
|
+
export declare function ensureClaudeDir(projectPath?: string): Promise<string>;
|
|
5
|
+
export declare function readSettings(projectPath?: string): Promise<ClaudeSettings>;
|
|
6
|
+
export declare function writeSettings(settings: ClaudeSettings, projectPath?: string): Promise<void>;
|
|
7
|
+
export declare function readLocalSettings(projectPath?: string): Promise<ClaudeLocalSettings>;
|
|
8
|
+
export declare function writeLocalSettings(settings: ClaudeLocalSettings, projectPath?: string): Promise<void>;
|
|
9
|
+
export declare function readGlobalSettings(): Promise<ClaudeSettings>;
|
|
10
|
+
export declare function writeGlobalSettings(settings: ClaudeSettings): Promise<void>;
|
|
11
|
+
export declare function addMcpServer(name: string, config: McpServerConfig, projectPath?: string): Promise<void>;
|
|
12
|
+
export declare function removeMcpServer(name: string, projectPath?: string): Promise<void>;
|
|
13
|
+
export declare function toggleMcpServer(name: string, enabled: boolean, projectPath?: string): Promise<void>;
|
|
14
|
+
export declare function setAllowMcp(allow: boolean, projectPath?: string): Promise<void>;
|
|
15
|
+
export declare function addMarketplace(marketplace: Marketplace, projectPath?: string): Promise<void>;
|
|
16
|
+
export declare function removeMarketplace(name: string, projectPath?: string): Promise<void>;
|
|
17
|
+
export declare function enablePlugin(pluginId: string, enabled: boolean, projectPath?: string): Promise<void>;
|
|
18
|
+
export declare function getEnabledPlugins(projectPath?: string): Promise<Record<string, boolean>>;
|
|
19
|
+
export declare function setStatusLine(template: string, projectPath?: string): Promise<void>;
|
|
20
|
+
export declare function getStatusLine(projectPath?: string): Promise<string | undefined>;
|
|
21
|
+
export declare function setGlobalStatusLine(template: string): Promise<void>;
|
|
22
|
+
export declare function getGlobalStatusLine(): Promise<string | undefined>;
|
|
23
|
+
export declare function getEffectiveStatusLine(projectPath?: string): Promise<{
|
|
24
|
+
template: string | undefined;
|
|
25
|
+
source: 'project' | 'global' | 'default';
|
|
26
|
+
}>;
|
|
27
|
+
export declare function hasClaudeDir(projectPath?: string): Promise<boolean>;
|
|
28
|
+
export declare function getInstalledMcpServers(projectPath?: string): Promise<Record<string, McpServerConfig>>;
|
|
29
|
+
export declare function getEnabledMcpServers(projectPath?: string): Promise<Record<string, boolean>>;
|
|
30
|
+
export declare function getConfiguredMarketplaces(projectPath?: string): Promise<Record<string, MarketplaceSource>>;
|
|
31
|
+
//# sourceMappingURL=claude-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-settings.d.ts","sourceRoot":"","sources":["../../src/services/claude-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
const CLAUDE_DIR = '.claude';
|
|
5
|
+
const SETTINGS_FILE = 'settings.json';
|
|
6
|
+
const LOCAL_SETTINGS_FILE = 'settings.local.json';
|
|
7
|
+
export function getClaudeDir(projectPath) {
|
|
8
|
+
const base = projectPath || process.cwd();
|
|
9
|
+
return path.join(base, CLAUDE_DIR);
|
|
10
|
+
}
|
|
11
|
+
export function getGlobalClaudeDir() {
|
|
12
|
+
return path.join(os.homedir(), CLAUDE_DIR);
|
|
13
|
+
}
|
|
14
|
+
export async function ensureClaudeDir(projectPath) {
|
|
15
|
+
const claudeDir = getClaudeDir(projectPath);
|
|
16
|
+
await fs.ensureDir(claudeDir);
|
|
17
|
+
return claudeDir;
|
|
18
|
+
}
|
|
19
|
+
export async function readSettings(projectPath) {
|
|
20
|
+
const settingsPath = path.join(getClaudeDir(projectPath), SETTINGS_FILE);
|
|
21
|
+
try {
|
|
22
|
+
if (await fs.pathExists(settingsPath)) {
|
|
23
|
+
return await fs.readJson(settingsPath);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Return empty settings on error
|
|
28
|
+
}
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
export async function writeSettings(settings, projectPath) {
|
|
32
|
+
const claudeDir = await ensureClaudeDir(projectPath);
|
|
33
|
+
const settingsPath = path.join(claudeDir, SETTINGS_FILE);
|
|
34
|
+
await fs.writeJson(settingsPath, settings, { spaces: 2 });
|
|
35
|
+
}
|
|
36
|
+
export async function readLocalSettings(projectPath) {
|
|
37
|
+
const localPath = path.join(getClaudeDir(projectPath), LOCAL_SETTINGS_FILE);
|
|
38
|
+
try {
|
|
39
|
+
if (await fs.pathExists(localPath)) {
|
|
40
|
+
return await fs.readJson(localPath);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Return empty settings on error
|
|
45
|
+
}
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
export async function writeLocalSettings(settings, projectPath) {
|
|
49
|
+
const claudeDir = await ensureClaudeDir(projectPath);
|
|
50
|
+
const localPath = path.join(claudeDir, LOCAL_SETTINGS_FILE);
|
|
51
|
+
await fs.writeJson(localPath, settings, { spaces: 2 });
|
|
52
|
+
}
|
|
53
|
+
export async function readGlobalSettings() {
|
|
54
|
+
const settingsPath = path.join(getGlobalClaudeDir(), SETTINGS_FILE);
|
|
55
|
+
try {
|
|
56
|
+
if (await fs.pathExists(settingsPath)) {
|
|
57
|
+
return await fs.readJson(settingsPath);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Return empty settings on error
|
|
62
|
+
}
|
|
63
|
+
return {};
|
|
64
|
+
}
|
|
65
|
+
export async function writeGlobalSettings(settings) {
|
|
66
|
+
await fs.ensureDir(getGlobalClaudeDir());
|
|
67
|
+
const settingsPath = path.join(getGlobalClaudeDir(), SETTINGS_FILE);
|
|
68
|
+
await fs.writeJson(settingsPath, settings, { spaces: 2 });
|
|
69
|
+
}
|
|
70
|
+
// MCP Server management
|
|
71
|
+
export async function addMcpServer(name, config, projectPath) {
|
|
72
|
+
const settings = await readLocalSettings(projectPath);
|
|
73
|
+
settings.mcpServers = settings.mcpServers || {};
|
|
74
|
+
settings.mcpServers[name] = config;
|
|
75
|
+
settings.enabledMcpServers = settings.enabledMcpServers || {};
|
|
76
|
+
settings.enabledMcpServers[name] = true;
|
|
77
|
+
settings.allowMcp = true;
|
|
78
|
+
await writeLocalSettings(settings, projectPath);
|
|
79
|
+
}
|
|
80
|
+
export async function removeMcpServer(name, projectPath) {
|
|
81
|
+
const settings = await readLocalSettings(projectPath);
|
|
82
|
+
if (settings.mcpServers) {
|
|
83
|
+
delete settings.mcpServers[name];
|
|
84
|
+
}
|
|
85
|
+
if (settings.enabledMcpServers) {
|
|
86
|
+
delete settings.enabledMcpServers[name];
|
|
87
|
+
}
|
|
88
|
+
await writeLocalSettings(settings, projectPath);
|
|
89
|
+
}
|
|
90
|
+
export async function toggleMcpServer(name, enabled, projectPath) {
|
|
91
|
+
const settings = await readLocalSettings(projectPath);
|
|
92
|
+
settings.enabledMcpServers = settings.enabledMcpServers || {};
|
|
93
|
+
settings.enabledMcpServers[name] = enabled;
|
|
94
|
+
await writeLocalSettings(settings, projectPath);
|
|
95
|
+
}
|
|
96
|
+
export async function setAllowMcp(allow, projectPath) {
|
|
97
|
+
const settings = await readLocalSettings(projectPath);
|
|
98
|
+
settings.allowMcp = allow;
|
|
99
|
+
await writeLocalSettings(settings, projectPath);
|
|
100
|
+
}
|
|
101
|
+
// Marketplace management
|
|
102
|
+
export async function addMarketplace(marketplace, projectPath) {
|
|
103
|
+
const settings = await readSettings(projectPath);
|
|
104
|
+
settings.extraKnownMarketplaces = settings.extraKnownMarketplaces || {};
|
|
105
|
+
settings.extraKnownMarketplaces[marketplace.name] = { source: marketplace.source };
|
|
106
|
+
await writeSettings(settings, projectPath);
|
|
107
|
+
}
|
|
108
|
+
export async function removeMarketplace(name, projectPath) {
|
|
109
|
+
const settings = await readSettings(projectPath);
|
|
110
|
+
if (settings.extraKnownMarketplaces) {
|
|
111
|
+
delete settings.extraKnownMarketplaces[name];
|
|
112
|
+
}
|
|
113
|
+
await writeSettings(settings, projectPath);
|
|
114
|
+
}
|
|
115
|
+
// Plugin management
|
|
116
|
+
export async function enablePlugin(pluginId, enabled, projectPath) {
|
|
117
|
+
const settings = await readSettings(projectPath);
|
|
118
|
+
settings.enabledPlugins = settings.enabledPlugins || {};
|
|
119
|
+
settings.enabledPlugins[pluginId] = enabled;
|
|
120
|
+
await writeSettings(settings, projectPath);
|
|
121
|
+
}
|
|
122
|
+
export async function getEnabledPlugins(projectPath) {
|
|
123
|
+
const settings = await readSettings(projectPath);
|
|
124
|
+
return settings.enabledPlugins || {};
|
|
125
|
+
}
|
|
126
|
+
// Status line management
|
|
127
|
+
export async function setStatusLine(template, projectPath) {
|
|
128
|
+
const settings = await readSettings(projectPath);
|
|
129
|
+
settings.statusLine = template;
|
|
130
|
+
await writeSettings(settings, projectPath);
|
|
131
|
+
}
|
|
132
|
+
export async function getStatusLine(projectPath) {
|
|
133
|
+
const settings = await readSettings(projectPath);
|
|
134
|
+
return settings.statusLine;
|
|
135
|
+
}
|
|
136
|
+
// Global status line management
|
|
137
|
+
export async function setGlobalStatusLine(template) {
|
|
138
|
+
const settings = await readGlobalSettings();
|
|
139
|
+
settings.statusLine = template;
|
|
140
|
+
await writeGlobalSettings(settings);
|
|
141
|
+
}
|
|
142
|
+
export async function getGlobalStatusLine() {
|
|
143
|
+
const settings = await readGlobalSettings();
|
|
144
|
+
return settings.statusLine;
|
|
145
|
+
}
|
|
146
|
+
// Get effective status line (project overrides global)
|
|
147
|
+
export async function getEffectiveStatusLine(projectPath) {
|
|
148
|
+
const projectStatusLine = await getStatusLine(projectPath);
|
|
149
|
+
if (projectStatusLine) {
|
|
150
|
+
return { template: projectStatusLine, source: 'project' };
|
|
151
|
+
}
|
|
152
|
+
const globalStatusLine = await getGlobalStatusLine();
|
|
153
|
+
if (globalStatusLine) {
|
|
154
|
+
return { template: globalStatusLine, source: 'global' };
|
|
155
|
+
}
|
|
156
|
+
return { template: undefined, source: 'default' };
|
|
157
|
+
}
|
|
158
|
+
// Check if .claude directory exists
|
|
159
|
+
export async function hasClaudeDir(projectPath) {
|
|
160
|
+
return fs.pathExists(getClaudeDir(projectPath));
|
|
161
|
+
}
|
|
162
|
+
// Get installed MCP servers
|
|
163
|
+
export async function getInstalledMcpServers(projectPath) {
|
|
164
|
+
const localSettings = await readLocalSettings(projectPath);
|
|
165
|
+
return localSettings.mcpServers || {};
|
|
166
|
+
}
|
|
167
|
+
// Get enabled MCP servers
|
|
168
|
+
export async function getEnabledMcpServers(projectPath) {
|
|
169
|
+
const localSettings = await readLocalSettings(projectPath);
|
|
170
|
+
return localSettings.enabledMcpServers || {};
|
|
171
|
+
}
|
|
172
|
+
// Get all configured marketplaces
|
|
173
|
+
export async function getConfiguredMarketplaces(projectPath) {
|
|
174
|
+
const settings = await readSettings(projectPath);
|
|
175
|
+
return settings.extraKnownMarketplaces || {};
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=claude-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-settings.js","sourceRoot":"","sources":["../../src/services/claude-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { McpRegistryServer, McpRegistryResponse } from '../types/index.js';
|
|
2
|
+
export interface SearchOptions {
|
|
3
|
+
query?: string;
|
|
4
|
+
limit?: number;
|
|
5
|
+
cursor?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function searchMcpServers(options?: SearchOptions): Promise<McpRegistryResponse>;
|
|
8
|
+
export declare function getPopularServers(limit?: number): Promise<McpRegistryServer[]>;
|
|
9
|
+
export declare function formatDate(dateStr?: string): string;
|
|
10
|
+
//# sourceMappingURL=mcp-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-registry.d.ts","sourceRoot":"","sources":["../../src/services/mcp-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAMhF,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA+DhG;AAED,wBAAsB,iBAAiB,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAIhF;AAED,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAanD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Official Model Context Protocol Registry
|
|
2
|
+
// API Docs: https://registry.modelcontextprotocol.io
|
|
3
|
+
const MCP_REGISTRY_API = 'https://registry.modelcontextprotocol.io/v0';
|
|
4
|
+
export async function searchMcpServers(options = {}) {
|
|
5
|
+
const { query = '', limit = 20, cursor } = options;
|
|
6
|
+
const params = new URLSearchParams();
|
|
7
|
+
if (query)
|
|
8
|
+
params.set('query', query);
|
|
9
|
+
params.set('limit', String(limit));
|
|
10
|
+
if (cursor)
|
|
11
|
+
params.set('cursor', cursor);
|
|
12
|
+
const url = `${MCP_REGISTRY_API}/servers?${params.toString()}`;
|
|
13
|
+
const response = await fetch(url, {
|
|
14
|
+
headers: {
|
|
15
|
+
'Accept': 'application/json',
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
if (!response.ok) {
|
|
19
|
+
throw new Error(`MCP Registry API error: ${response.status} ${response.statusText}`);
|
|
20
|
+
}
|
|
21
|
+
const data = await response.json();
|
|
22
|
+
// The official registry returns data in a nested format:
|
|
23
|
+
// { servers: [{ server: {...}, _meta: {...} }] }
|
|
24
|
+
// Convert it to match our expected McpRegistryResponse format
|
|
25
|
+
const servers = (data.servers || [])
|
|
26
|
+
.map((item) => {
|
|
27
|
+
const server = item.server || item; // Handle both nested and flat structures
|
|
28
|
+
const meta = item._meta?.['io.modelcontextprotocol.registry/official'];
|
|
29
|
+
// Get URL from remotes (HTTP) or construct from packages
|
|
30
|
+
let url = '';
|
|
31
|
+
if (server.remotes?.length > 0) {
|
|
32
|
+
url = server.remotes[0].url;
|
|
33
|
+
}
|
|
34
|
+
else if (server.packages?.length > 0) {
|
|
35
|
+
// For package-based servers, use the package identifier as reference
|
|
36
|
+
const pkg = server.packages[0];
|
|
37
|
+
url = `${pkg.registryType}:${pkg.identifier}`;
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
name: server.name,
|
|
41
|
+
url,
|
|
42
|
+
short_description: server.description || 'No description',
|
|
43
|
+
version: server.version,
|
|
44
|
+
source_code_url: server.repository?.url,
|
|
45
|
+
package_registry: server.packages?.[0]?.registryType,
|
|
46
|
+
published_at: meta?.publishedAt,
|
|
47
|
+
};
|
|
48
|
+
})
|
|
49
|
+
// Filter out servers without name or URL
|
|
50
|
+
.filter((s) => s.name && s.url)
|
|
51
|
+
// Sort by publish date (newest first)
|
|
52
|
+
.sort((a, b) => {
|
|
53
|
+
if (!a.published_at)
|
|
54
|
+
return 1;
|
|
55
|
+
if (!b.published_at)
|
|
56
|
+
return -1;
|
|
57
|
+
return new Date(b.published_at).getTime() - new Date(a.published_at).getTime();
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
servers,
|
|
61
|
+
next_cursor: data.metadata?.nextCursor || data.next_cursor,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export async function getPopularServers(limit = 20) {
|
|
65
|
+
const response = await searchMcpServers({ limit });
|
|
66
|
+
// Already sorted by publish date in searchMcpServers
|
|
67
|
+
return response.servers;
|
|
68
|
+
}
|
|
69
|
+
export function formatDate(dateStr) {
|
|
70
|
+
if (!dateStr)
|
|
71
|
+
return '';
|
|
72
|
+
const date = new Date(dateStr);
|
|
73
|
+
const now = new Date();
|
|
74
|
+
const diffMs = now.getTime() - date.getTime();
|
|
75
|
+
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
|
|
76
|
+
if (diffDays === 0)
|
|
77
|
+
return 'today';
|
|
78
|
+
if (diffDays === 1)
|
|
79
|
+
return 'yesterday';
|
|
80
|
+
if (diffDays < 7)
|
|
81
|
+
return `${diffDays}d ago`;
|
|
82
|
+
if (diffDays < 30)
|
|
83
|
+
return `${Math.floor(diffDays / 7)}w ago`;
|
|
84
|
+
if (diffDays < 365)
|
|
85
|
+
return `${Math.floor(diffDays / 30)}mo ago`;
|
|
86
|
+
return `${Math.floor(diffDays / 365)}y ago`;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=mcp-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-registry.js","sourceRoot":"","sources":["../../src/services/mcp-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface PluginInfo {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
version: string;
|
|
5
|
+
description: string;
|
|
6
|
+
marketplace: string;
|
|
7
|
+
marketplaceDisplay: string;
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
installedVersion?: string;
|
|
10
|
+
hasUpdate?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface MarketplacePlugin {
|
|
13
|
+
name: string;
|
|
14
|
+
version: string;
|
|
15
|
+
description: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function fetchMarketplacePlugins(marketplaceName: string, repo: string): Promise<MarketplacePlugin[]>;
|
|
18
|
+
export declare function getAvailablePlugins(projectPath?: string): Promise<PluginInfo[]>;
|
|
19
|
+
export declare function saveInstalledPluginVersion(pluginId: string, version: string, projectPath?: string): Promise<void>;
|
|
20
|
+
export declare function removeInstalledPluginVersion(pluginId: string, projectPath?: string): Promise<void>;
|
|
21
|
+
export declare function clearMarketplaceCache(): void;
|
|
22
|
+
//# sourceMappingURL=plugin-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-manager.d.ts","sourceRoot":"","sources":["../../src/services/plugin-manager.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,wBAAsB,uBAAuB,CAC3C,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAsC9B;AAED,wBAAsB,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA0CrF;AAyBD,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAKf;AAGD,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAMf;AAGD,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { getConfiguredMarketplaces, getEnabledPlugins, readSettings, writeSettings } from './claude-settings.js';
|
|
2
|
+
import { defaultMarketplaces } from '../data/marketplaces.js';
|
|
3
|
+
// Cache for fetched marketplace data
|
|
4
|
+
const marketplaceCache = new Map();
|
|
5
|
+
const CACHE_TTL = 5 * 60 * 1000; // 5 minutes
|
|
6
|
+
export async function fetchMarketplacePlugins(marketplaceName, repo) {
|
|
7
|
+
// Check cache first
|
|
8
|
+
const cached = marketplaceCache.get(marketplaceName);
|
|
9
|
+
if (cached && Date.now() - cached.fetchedAt < CACHE_TTL) {
|
|
10
|
+
return cached.plugins;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
// Fetch marketplace.json from GitHub
|
|
14
|
+
const url = `https://raw.githubusercontent.com/${repo}/main/.claude-plugin/marketplace.json`;
|
|
15
|
+
const response = await fetch(url);
|
|
16
|
+
if (!response.ok) {
|
|
17
|
+
console.error(`Failed to fetch marketplace: ${response.status}`);
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
const data = (await response.json());
|
|
21
|
+
const plugins = [];
|
|
22
|
+
if (data.plugins && Array.isArray(data.plugins)) {
|
|
23
|
+
for (const plugin of data.plugins) {
|
|
24
|
+
plugins.push({
|
|
25
|
+
name: plugin.name,
|
|
26
|
+
version: plugin.version || '0.0.0',
|
|
27
|
+
description: plugin.description || '',
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Cache the result
|
|
32
|
+
marketplaceCache.set(marketplaceName, { plugins, fetchedAt: Date.now() });
|
|
33
|
+
return plugins;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
console.error(`Error fetching marketplace ${marketplaceName}:`, error);
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export async function getAvailablePlugins(projectPath) {
|
|
41
|
+
const configuredMarketplaces = await getConfiguredMarketplaces(projectPath);
|
|
42
|
+
const enabledPlugins = await getEnabledPlugins(projectPath);
|
|
43
|
+
const installedVersions = await getInstalledPluginVersions(projectPath);
|
|
44
|
+
const plugins = [];
|
|
45
|
+
// Get all marketplace names (configured + defaults)
|
|
46
|
+
const marketplaceNames = new Set();
|
|
47
|
+
for (const mp of defaultMarketplaces) {
|
|
48
|
+
if (configuredMarketplaces[mp.name]) {
|
|
49
|
+
marketplaceNames.add(mp.name);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Fetch plugins from each configured marketplace
|
|
53
|
+
for (const mpName of marketplaceNames) {
|
|
54
|
+
const marketplace = defaultMarketplaces.find((m) => m.name === mpName);
|
|
55
|
+
if (!marketplace)
|
|
56
|
+
continue;
|
|
57
|
+
const marketplacePlugins = await fetchMarketplacePlugins(mpName, marketplace.source.repo);
|
|
58
|
+
for (const plugin of marketplacePlugins) {
|
|
59
|
+
const pluginId = `${plugin.name}@${mpName}`;
|
|
60
|
+
const installedVersion = installedVersions[pluginId];
|
|
61
|
+
const isEnabled = enabledPlugins[pluginId] === true;
|
|
62
|
+
plugins.push({
|
|
63
|
+
id: pluginId,
|
|
64
|
+
name: plugin.name,
|
|
65
|
+
version: plugin.version,
|
|
66
|
+
description: plugin.description,
|
|
67
|
+
marketplace: mpName,
|
|
68
|
+
marketplaceDisplay: marketplace.displayName,
|
|
69
|
+
enabled: isEnabled,
|
|
70
|
+
installedVersion: installedVersion,
|
|
71
|
+
hasUpdate: installedVersion ? compareVersions(plugin.version, installedVersion) > 0 : false,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return plugins;
|
|
76
|
+
}
|
|
77
|
+
// Simple version comparison (returns 1 if a > b, -1 if a < b, 0 if equal)
|
|
78
|
+
function compareVersions(a, b) {
|
|
79
|
+
const partsA = a.replace(/^v/, '').split('.').map(Number);
|
|
80
|
+
const partsB = b.replace(/^v/, '').split('.').map(Number);
|
|
81
|
+
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
|
|
82
|
+
const numA = partsA[i] || 0;
|
|
83
|
+
const numB = partsB[i] || 0;
|
|
84
|
+
if (numA > numB)
|
|
85
|
+
return 1;
|
|
86
|
+
if (numA < numB)
|
|
87
|
+
return -1;
|
|
88
|
+
}
|
|
89
|
+
return 0;
|
|
90
|
+
}
|
|
91
|
+
// Get installed plugin versions from settings.json (shared, not secret)
|
|
92
|
+
async function getInstalledPluginVersions(projectPath) {
|
|
93
|
+
const settings = await readSettings(projectPath);
|
|
94
|
+
return settings.installedPluginVersions || {};
|
|
95
|
+
}
|
|
96
|
+
// Save installed plugin version to settings.json
|
|
97
|
+
export async function saveInstalledPluginVersion(pluginId, version, projectPath) {
|
|
98
|
+
const settings = await readSettings(projectPath);
|
|
99
|
+
settings.installedPluginVersions = settings.installedPluginVersions || {};
|
|
100
|
+
settings.installedPluginVersions[pluginId] = version;
|
|
101
|
+
await writeSettings(settings, projectPath);
|
|
102
|
+
}
|
|
103
|
+
// Remove installed plugin version from settings.json
|
|
104
|
+
export async function removeInstalledPluginVersion(pluginId, projectPath) {
|
|
105
|
+
const settings = await readSettings(projectPath);
|
|
106
|
+
if (settings.installedPluginVersions) {
|
|
107
|
+
delete settings.installedPluginVersions[pluginId];
|
|
108
|
+
await writeSettings(settings, projectPath);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Clear marketplace cache
|
|
112
|
+
export function clearMarketplaceCache() {
|
|
113
|
+
marketplaceCache.clear();
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=plugin-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-manager.js","sourceRoot":"","sources":["../../src/services/plugin-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export interface McpServer {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
command?: string;
|
|
5
|
+
args?: string[];
|
|
6
|
+
env?: Record<string, string>;
|
|
7
|
+
type?: 'http';
|
|
8
|
+
url?: string;
|
|
9
|
+
category: 'browser' | 'ai' | 'design' | 'dev-tools' | 'cloud' | 'database' | 'productivity';
|
|
10
|
+
requiresConfig?: boolean;
|
|
11
|
+
configFields?: ConfigField[];
|
|
12
|
+
}
|
|
13
|
+
export interface ConfigField {
|
|
14
|
+
name: string;
|
|
15
|
+
label: string;
|
|
16
|
+
type: 'string' | 'path' | 'url' | 'boolean';
|
|
17
|
+
required: boolean;
|
|
18
|
+
default?: string;
|
|
19
|
+
envVar?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface Marketplace {
|
|
22
|
+
name: string;
|
|
23
|
+
displayName: string;
|
|
24
|
+
source: {
|
|
25
|
+
source: 'github';
|
|
26
|
+
repo: string;
|
|
27
|
+
};
|
|
28
|
+
description: string;
|
|
29
|
+
official?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface Plugin {
|
|
32
|
+
name: string;
|
|
33
|
+
version: string;
|
|
34
|
+
description: string;
|
|
35
|
+
marketplace: string;
|
|
36
|
+
installed: boolean;
|
|
37
|
+
availableVersion?: string;
|
|
38
|
+
hasUpdate?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface StatusLineConfig {
|
|
41
|
+
name: string;
|
|
42
|
+
description: string;
|
|
43
|
+
template: string;
|
|
44
|
+
}
|
|
45
|
+
export interface MarketplaceSource {
|
|
46
|
+
source: {
|
|
47
|
+
source: 'github';
|
|
48
|
+
repo: string;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export interface ClaudeSettings {
|
|
52
|
+
enabledMcpServers?: Record<string, boolean>;
|
|
53
|
+
mcpServers?: Record<string, McpServerConfig>;
|
|
54
|
+
enabledPlugins?: Record<string, boolean>;
|
|
55
|
+
extraKnownMarketplaces?: Record<string, MarketplaceSource>;
|
|
56
|
+
installedPluginVersions?: Record<string, string>;
|
|
57
|
+
statusLine?: string;
|
|
58
|
+
}
|
|
59
|
+
export interface McpServerConfig {
|
|
60
|
+
command?: string;
|
|
61
|
+
args?: string[];
|
|
62
|
+
env?: Record<string, string>;
|
|
63
|
+
type?: 'http';
|
|
64
|
+
url?: string;
|
|
65
|
+
}
|
|
66
|
+
export interface ClaudeLocalSettings extends ClaudeSettings {
|
|
67
|
+
allowMcp?: boolean;
|
|
68
|
+
}
|
|
69
|
+
export type Screen = 'main' | 'mcp' | 'mcp-registry' | 'plugins' | 'statusline' | 'cli-tools';
|
|
70
|
+
export interface McpRegistryServer {
|
|
71
|
+
name: string;
|
|
72
|
+
url: string;
|
|
73
|
+
short_description: string;
|
|
74
|
+
version?: string;
|
|
75
|
+
source_code_url?: string;
|
|
76
|
+
package_registry?: string;
|
|
77
|
+
published_at?: string;
|
|
78
|
+
}
|
|
79
|
+
export interface McpRegistryResponse {
|
|
80
|
+
servers: McpRegistryServer[];
|
|
81
|
+
next_cursor?: string;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
package/dist/ui/app.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import blessed from 'neo-blessed';
|
|
2
|
+
import type { Screen } from '../types/index.js';
|
|
3
|
+
export interface AppState {
|
|
4
|
+
screen: blessed.Screen;
|
|
5
|
+
currentScreen: Screen;
|
|
6
|
+
projectPath: string;
|
|
7
|
+
isSearching: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const colors: {
|
|
10
|
+
primary: string;
|
|
11
|
+
secondary: string;
|
|
12
|
+
success: string;
|
|
13
|
+
warning: string;
|
|
14
|
+
error: string;
|
|
15
|
+
muted: string;
|
|
16
|
+
bg: string;
|
|
17
|
+
fg: string;
|
|
18
|
+
};
|
|
19
|
+
export declare function createApp(): AppState;
|
|
20
|
+
export declare function navigateTo(state: AppState, screen: Screen): Promise<void>;
|
|
21
|
+
export declare function showHelp(state: AppState): void;
|
|
22
|
+
export declare function showMessage(state: AppState, title: string, message: string, type?: 'info' | 'success' | 'error'): Promise<void>;
|
|
23
|
+
export declare function showConfirm(state: AppState, title: string, message: string): Promise<boolean>;
|
|
24
|
+
export declare function showInput(state: AppState, title: string, label: string, defaultValue?: string): Promise<string | null>;
|
|
25
|
+
export declare function createBackground(state: AppState): blessed.BoxElement;
|
|
26
|
+
export declare function createHeader(state: AppState, _title: string): blessed.BoxElement;
|
|
27
|
+
export declare function createFooter(state: AppState, hints: string): blessed.BoxElement;
|
|
28
|
+
//# sourceMappingURL=app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/ui/app.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAMhD,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAGD,eAAO,MAAM,MAAM;;;;;;;;;CASlB,CAAC;AAEF,wBAAgB,SAAS,IAAI,QAAQ,CAoDpC;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D/E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CA8C9C;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,GAAG,SAAS,GAAG,OAAgB,GAC1C,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAoClB;AAED,wBAAgB,SAAS,CACvB,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkHxB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAWpE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAkChF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAU/E"}
|