xibecode 1.0.3 → 1.0.6
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/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +10 -7
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/diagnostics.js +1 -1
- package/dist/commands/diagnostics.js.map +1 -1
- package/dist/commands/mcp.js +1 -1
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/resume.js +1 -1
- package/dist/commands/resume.js.map +1 -1
- package/dist/commands/run-pr.d.ts.map +1 -1
- package/dist/commands/run-pr.js +10 -9
- package/dist/commands/run-pr.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +14 -13
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +3 -2
- package/dist/commands/skills.js.map +1 -1
- package/dist/components/AssistantMarkdown.js +1 -1
- package/dist/components/AssistantMarkdown.js.map +1 -1
- package/dist/ui/claude-style-chat.d.ts.map +1 -1
- package/dist/ui/claude-style-chat.js +12 -10
- package/dist/ui/claude-style-chat.js.map +1 -1
- package/dist/utils/built-in-skills-dir.d.ts +7 -0
- package/dist/utils/built-in-skills-dir.d.ts.map +1 -0
- package/dist/utils/built-in-skills-dir.js +11 -0
- package/dist/utils/built-in-skills-dir.js.map +1 -0
- package/dist/utils/config.d.ts +2 -119
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +3 -88
- package/dist/utils/config.js.map +1 -1
- package/package.json +11 -17
- package/dist/commands/punycode.d.ts +0 -5
- package/dist/commands/punycode.d.ts.map +0 -1
- package/dist/commands/punycode.js +0 -48
- package/dist/commands/punycode.js.map +0 -1
- package/dist/commands/tui.d.ts +0 -9
- package/dist/commands/tui.d.ts.map +0 -1
- package/dist/commands/tui.js +0 -83
- package/dist/commands/tui.js.map +0 -1
- package/dist/core/agent-tool-policies.d.ts +0 -5
- package/dist/core/agent-tool-policies.d.ts.map +0 -1
- package/dist/core/agent-tool-policies.js +0 -18
- package/dist/core/agent-tool-policies.js.map +0 -1
- package/dist/core/agent.d.ts +0 -181
- package/dist/core/agent.d.ts.map +0 -1
- package/dist/core/agent.js +0 -1777
- package/dist/core/agent.js.map +0 -1
- package/dist/core/background-agent.d.ts +0 -23
- package/dist/core/background-agent.d.ts.map +0 -1
- package/dist/core/background-agent.js +0 -175
- package/dist/core/background-agent.js.map +0 -1
- package/dist/core/code-graph.d.ts +0 -18
- package/dist/core/code-graph.d.ts.map +0 -1
- package/dist/core/code-graph.js +0 -105
- package/dist/core/code-graph.js.map +0 -1
- package/dist/core/conflict-solver.d.ts +0 -26
- package/dist/core/conflict-solver.d.ts.map +0 -1
- package/dist/core/conflict-solver.js +0 -108
- package/dist/core/conflict-solver.js.map +0 -1
- package/dist/core/context-compactor.d.ts +0 -10
- package/dist/core/context-compactor.d.ts.map +0 -1
- package/dist/core/context-compactor.js +0 -158
- package/dist/core/context-compactor.js.map +0 -1
- package/dist/core/context-pruner.d.ts +0 -19
- package/dist/core/context-pruner.d.ts.map +0 -1
- package/dist/core/context-pruner.js +0 -103
- package/dist/core/context-pruner.js.map +0 -1
- package/dist/core/context.d.ts +0 -82
- package/dist/core/context.d.ts.map +0 -1
- package/dist/core/context.js +0 -273
- package/dist/core/context.js.map +0 -1
- package/dist/core/conversation-recovery.d.ts +0 -9
- package/dist/core/conversation-recovery.d.ts.map +0 -1
- package/dist/core/conversation-recovery.js +0 -15
- package/dist/core/conversation-recovery.js.map +0 -1
- package/dist/core/debug-workflow.d.ts +0 -9
- package/dist/core/debug-workflow.d.ts.map +0 -1
- package/dist/core/debug-workflow.js +0 -19
- package/dist/core/debug-workflow.js.map +0 -1
- package/dist/core/docs-scraper.d.ts +0 -40
- package/dist/core/docs-scraper.d.ts.map +0 -1
- package/dist/core/docs-scraper.js +0 -386
- package/dist/core/docs-scraper.js.map +0 -1
- package/dist/core/editor.d.ts +0 -87
- package/dist/core/editor.d.ts.map +0 -1
- package/dist/core/editor.js +0 -377
- package/dist/core/editor.js.map +0 -1
- package/dist/core/export.d.ts +0 -11
- package/dist/core/export.d.ts.map +0 -1
- package/dist/core/export.js +0 -54
- package/dist/core/export.js.map +0 -1
- package/dist/core/history-manager.d.ts +0 -75
- package/dist/core/history-manager.d.ts.map +0 -1
- package/dist/core/history-manager.js +0 -146
- package/dist/core/history-manager.js.map +0 -1
- package/dist/core/marketplace-client.d.ts +0 -52
- package/dist/core/marketplace-client.d.ts.map +0 -1
- package/dist/core/marketplace-client.js +0 -71
- package/dist/core/marketplace-client.js.map +0 -1
- package/dist/core/mcp/mcp-config.d.ts +0 -10
- package/dist/core/mcp/mcp-config.d.ts.map +0 -1
- package/dist/core/mcp/mcp-config.js +0 -70
- package/dist/core/mcp/mcp-config.js.map +0 -1
- package/dist/core/mcp/mcp-policy.d.ts +0 -17
- package/dist/core/mcp/mcp-policy.d.ts.map +0 -1
- package/dist/core/mcp/mcp-policy.js +0 -56
- package/dist/core/mcp/mcp-policy.js.map +0 -1
- package/dist/core/mcp/oauth-flow.d.ts +0 -30
- package/dist/core/mcp/oauth-flow.d.ts.map +0 -1
- package/dist/core/mcp/oauth-flow.js +0 -230
- package/dist/core/mcp/oauth-flow.js.map +0 -1
- package/dist/core/mcp/oauth-store.d.ts +0 -13
- package/dist/core/mcp/oauth-store.d.ts.map +0 -1
- package/dist/core/mcp/oauth-store.js +0 -68
- package/dist/core/mcp/oauth-store.js.map +0 -1
- package/dist/core/mcp/resolve-mcp-servers.d.ts +0 -16
- package/dist/core/mcp/resolve-mcp-servers.d.ts.map +0 -1
- package/dist/core/mcp/resolve-mcp-servers.js +0 -83
- package/dist/core/mcp/resolve-mcp-servers.js.map +0 -1
- package/dist/core/mcp-client.d.ts +0 -99
- package/dist/core/mcp-client.d.ts.map +0 -1
- package/dist/core/mcp-client.js +0 -317
- package/dist/core/mcp-client.js.map +0 -1
- package/dist/core/memory-promotions.d.ts +0 -15
- package/dist/core/memory-promotions.d.ts.map +0 -1
- package/dist/core/memory-promotions.js +0 -38
- package/dist/core/memory-promotions.js.map +0 -1
- package/dist/core/memory.d.ts +0 -32
- package/dist/core/memory.d.ts.map +0 -1
- package/dist/core/memory.js +0 -121
- package/dist/core/memory.js.map +0 -1
- package/dist/core/modes.d.ts +0 -432
- package/dist/core/modes.d.ts.map +0 -1
- package/dist/core/modes.js +0 -1094
- package/dist/core/modes.js.map +0 -1
- package/dist/core/pattern-miner.d.ts +0 -43
- package/dist/core/pattern-miner.d.ts.map +0 -1
- package/dist/core/pattern-miner.js +0 -123
- package/dist/core/pattern-miner.js.map +0 -1
- package/dist/core/permission-store.d.ts +0 -15
- package/dist/core/permission-store.d.ts.map +0 -1
- package/dist/core/permission-store.js +0 -30
- package/dist/core/permission-store.js.map +0 -1
- package/dist/core/permissions.d.ts +0 -33
- package/dist/core/permissions.d.ts.map +0 -1
- package/dist/core/permissions.js +0 -141
- package/dist/core/permissions.js.map +0 -1
- package/dist/core/plan-artifacts.d.ts +0 -10
- package/dist/core/plan-artifacts.d.ts.map +0 -1
- package/dist/core/plan-artifacts.js +0 -60
- package/dist/core/plan-artifacts.js.map +0 -1
- package/dist/core/plan-session.d.ts +0 -25
- package/dist/core/plan-session.d.ts.map +0 -1
- package/dist/core/plan-session.js +0 -99
- package/dist/core/plan-session.js.map +0 -1
- package/dist/core/planMode.d.ts +0 -51
- package/dist/core/planMode.d.ts.map +0 -1
- package/dist/core/planMode.js +0 -245
- package/dist/core/planMode.js.map +0 -1
- package/dist/core/plugins.d.ts +0 -96
- package/dist/core/plugins.d.ts.map +0 -1
- package/dist/core/plugins.js +0 -204
- package/dist/core/plugins.js.map +0 -1
- package/dist/core/session-bridge.d.ts +0 -128
- package/dist/core/session-bridge.d.ts.map +0 -1
- package/dist/core/session-bridge.js +0 -328
- package/dist/core/session-bridge.js.map +0 -1
- package/dist/core/session-manager.d.ts +0 -80
- package/dist/core/session-manager.d.ts.map +0 -1
- package/dist/core/session-manager.js +0 -166
- package/dist/core/session-manager.js.map +0 -1
- package/dist/core/session-memory.d.ts +0 -45
- package/dist/core/session-memory.d.ts.map +0 -1
- package/dist/core/session-memory.js +0 -103
- package/dist/core/session-memory.js.map +0 -1
- package/dist/core/skill-selection.d.ts +0 -36
- package/dist/core/skill-selection.d.ts.map +0 -1
- package/dist/core/skill-selection.js +0 -172
- package/dist/core/skill-selection.js.map +0 -1
- package/dist/core/skills-sh-client.d.ts +0 -19
- package/dist/core/skills-sh-client.d.ts.map +0 -1
- package/dist/core/skills-sh-client.js +0 -75
- package/dist/core/skills-sh-client.js.map +0 -1
- package/dist/core/skills.d.ts +0 -97
- package/dist/core/skills.d.ts.map +0 -1
- package/dist/core/skills.js +0 -339
- package/dist/core/skills.js.map +0 -1
- package/dist/core/swarm.d.ts +0 -34
- package/dist/core/swarm.d.ts.map +0 -1
- package/dist/core/swarm.js +0 -111
- package/dist/core/swarm.js.map +0 -1
- package/dist/core/task-status.d.ts +0 -13
- package/dist/core/task-status.d.ts.map +0 -1
- package/dist/core/task-status.js +0 -17
- package/dist/core/task-status.js.map +0 -1
- package/dist/core/tool-orchestrator.d.ts +0 -30
- package/dist/core/tool-orchestrator.d.ts.map +0 -1
- package/dist/core/tool-orchestrator.js +0 -89
- package/dist/core/tool-orchestrator.js.map +0 -1
- package/dist/core/tools.d.ts +0 -462
- package/dist/core/tools.d.ts.map +0 -1
- package/dist/core/tools.js +0 -2916
- package/dist/core/tools.js.map +0 -1
- package/dist/core/transcript-cleanup.d.ts +0 -8
- package/dist/core/transcript-cleanup.d.ts.map +0 -1
- package/dist/core/transcript-cleanup.js +0 -52
- package/dist/core/transcript-cleanup.js.map +0 -1
- package/dist/core/visual-feedback.d.ts +0 -20
- package/dist/core/visual-feedback.d.ts.map +0 -1
- package/dist/core/visual-feedback.js +0 -117
- package/dist/core/visual-feedback.js.map +0 -1
- package/dist/tools/browser.d.ts +0 -120
- package/dist/tools/browser.d.ts.map +0 -1
- package/dist/tools/browser.js +0 -439
- package/dist/tools/browser.js.map +0 -1
- package/dist/tools/test-generator.d.ts +0 -157
- package/dist/tools/test-generator.d.ts.map +0 -1
- package/dist/tools/test-generator.js +0 -893
- package/dist/tools/test-generator.js.map +0 -1
- package/dist/tui/InkApp.d.ts +0 -21
- package/dist/tui/InkApp.d.ts.map +0 -1
- package/dist/tui/InkApp.js +0 -146
- package/dist/tui/InkApp.js.map +0 -1
- package/dist/tui/MarkdownMessage.d.ts +0 -16
- package/dist/tui/MarkdownMessage.d.ts.map +0 -1
- package/dist/tui/MarkdownMessage.js +0 -63
- package/dist/tui/MarkdownMessage.js.map +0 -1
- package/dist/tui/blessed-chat.d.ts +0 -9
- package/dist/tui/blessed-chat.d.ts.map +0 -1
- package/dist/tui/blessed-chat.js +0 -887
- package/dist/tui/blessed-chat.js.map +0 -1
- package/dist/tui/markdown-to-blessed.d.ts +0 -6
- package/dist/tui/markdown-to-blessed.d.ts.map +0 -1
- package/dist/tui/markdown-to-blessed.js +0 -26
- package/dist/tui/markdown-to-blessed.js.map +0 -1
- package/dist/ui/ink/App.d.ts +0 -25
- package/dist/ui/ink/App.d.ts.map +0 -1
- package/dist/ui/ink/App.js +0 -372
- package/dist/ui/ink/App.js.map +0 -1
- package/dist/utils/at-references.d.ts +0 -14
- package/dist/utils/at-references.d.ts.map +0 -1
- package/dist/utils/at-references.js +0 -47
- package/dist/utils/at-references.js.map +0 -1
- package/dist/utils/auto-memory.d.ts +0 -24
- package/dist/utils/auto-memory.d.ts.map +0 -1
- package/dist/utils/auto-memory.js +0 -153
- package/dist/utils/auto-memory.js.map +0 -1
- package/dist/utils/git.d.ts +0 -89
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js +0 -444
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/mcp-servers-file.d.ts +0 -46
- package/dist/utils/mcp-servers-file.d.ts.map +0 -1
- package/dist/utils/mcp-servers-file.js +0 -212
- package/dist/utils/mcp-servers-file.js.map +0 -1
- package/dist/utils/safety.d.ts +0 -60
- package/dist/utils/safety.d.ts.map +0 -1
- package/dist/utils/safety.js +0 -254
- package/dist/utils/safety.js.map +0 -1
- package/dist/utils/smithery.d.ts +0 -25
- package/dist/utils/smithery.d.ts.map +0 -1
- package/dist/utils/smithery.js +0 -50
- package/dist/utils/smithery.js.map +0 -1
- package/dist/utils/testRunner.d.ts +0 -44
- package/dist/utils/testRunner.d.ts.map +0 -1
- package/dist/utils/testRunner.js +0 -270
- package/dist/utils/testRunner.js.map +0 -1
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs/promises';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import * as os from 'os';
|
|
4
|
-
/**
|
|
5
|
-
* Manages MCP servers configuration file
|
|
6
|
-
*/
|
|
7
|
-
export class MCPServersFileManager {
|
|
8
|
-
filePath;
|
|
9
|
-
constructor() {
|
|
10
|
-
const configDir = path.join(os.homedir(), '.xibecode');
|
|
11
|
-
this.filePath = path.join(configDir, 'mcp-servers.json');
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Get the path to the MCP servers config file
|
|
15
|
-
*/
|
|
16
|
-
getFilePath() {
|
|
17
|
-
return this.filePath;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Check if the file exists
|
|
21
|
-
*/
|
|
22
|
-
async fileExists() {
|
|
23
|
-
try {
|
|
24
|
-
await fs.access(this.filePath);
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Load MCP servers from file
|
|
33
|
-
* Supports both new object-based format and legacy array-based format
|
|
34
|
-
* Automatically migrates legacy format to new format
|
|
35
|
-
*/
|
|
36
|
-
async loadMCPServers() {
|
|
37
|
-
try {
|
|
38
|
-
if (!(await this.fileExists())) {
|
|
39
|
-
return {};
|
|
40
|
-
}
|
|
41
|
-
const content = await fs.readFile(this.filePath, 'utf-8');
|
|
42
|
-
const data = JSON.parse(content);
|
|
43
|
-
// Check if it's the new object-based format
|
|
44
|
-
if (data.mcpServers && typeof data.mcpServers === 'object' && !Array.isArray(data.mcpServers)) {
|
|
45
|
-
// New format - validate and return
|
|
46
|
-
const validatedServers = {};
|
|
47
|
-
for (const [serverName, serverConfig] of Object.entries(data.mcpServers)) {
|
|
48
|
-
const config = serverConfig;
|
|
49
|
-
if (!config.command) {
|
|
50
|
-
throw new Error(`Invalid server config for "${serverName}": missing required field "command"`);
|
|
51
|
-
}
|
|
52
|
-
validatedServers[serverName] = {
|
|
53
|
-
command: config.command,
|
|
54
|
-
args: config.args,
|
|
55
|
-
env: config.env,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
return validatedServers;
|
|
59
|
-
}
|
|
60
|
-
// Check if it's the legacy array-based format
|
|
61
|
-
if (data.servers && Array.isArray(data.servers)) {
|
|
62
|
-
// Legacy format - migrate to new format
|
|
63
|
-
const legacyData = data;
|
|
64
|
-
const migratedServers = {};
|
|
65
|
-
for (const server of legacyData.servers) {
|
|
66
|
-
if (!server.name || !server.command) {
|
|
67
|
-
throw new Error(`Invalid server config in legacy format: missing required fields (name, command)`);
|
|
68
|
-
}
|
|
69
|
-
// Remove transport field and use name as key
|
|
70
|
-
migratedServers[server.name] = {
|
|
71
|
-
command: server.command,
|
|
72
|
-
args: server.args,
|
|
73
|
-
env: server.env,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
// Auto-migrate: save in new format
|
|
77
|
-
console.log('Migrating MCP servers configuration to new format...');
|
|
78
|
-
await this.saveMCPServers(migratedServers);
|
|
79
|
-
return migratedServers;
|
|
80
|
-
}
|
|
81
|
-
throw new Error('Invalid file format: must contain "mcpServers" object or legacy "servers" array');
|
|
82
|
-
}
|
|
83
|
-
catch (error) {
|
|
84
|
-
if (error.code === 'ENOENT') {
|
|
85
|
-
return {};
|
|
86
|
-
}
|
|
87
|
-
throw new Error(`Failed to load MCP servers file: ${error.message}`);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Save MCP servers to file
|
|
92
|
-
* Uses new object-based format
|
|
93
|
-
*/
|
|
94
|
-
async saveMCPServers(servers) {
|
|
95
|
-
try {
|
|
96
|
-
const configDir = path.dirname(this.filePath);
|
|
97
|
-
// Ensure directory exists
|
|
98
|
-
await fs.mkdir(configDir, { recursive: true });
|
|
99
|
-
const data = {
|
|
100
|
-
mcpServers: servers,
|
|
101
|
-
};
|
|
102
|
-
await fs.writeFile(this.filePath, JSON.stringify(data, null, 2) + '\n', 'utf-8');
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
throw new Error(`Failed to save MCP servers file: ${error.message}`);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Create default config file with examples
|
|
110
|
-
*/
|
|
111
|
-
async createDefaultFile() {
|
|
112
|
-
const defaultServers = {
|
|
113
|
-
'filesystem': {
|
|
114
|
-
command: 'mcp-server-filesystem',
|
|
115
|
-
args: ['--root', '/path/to/files'],
|
|
116
|
-
},
|
|
117
|
-
'github': {
|
|
118
|
-
command: 'mcp-server-github',
|
|
119
|
-
args: ['--token', 'YOUR_GITHUB_TOKEN'],
|
|
120
|
-
},
|
|
121
|
-
};
|
|
122
|
-
await this.saveMCPServers(defaultServers);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Validate the file format
|
|
126
|
-
* Supports both new object-based and legacy array-based formats
|
|
127
|
-
*/
|
|
128
|
-
async validateFile() {
|
|
129
|
-
const errors = [];
|
|
130
|
-
try {
|
|
131
|
-
if (!(await this.fileExists())) {
|
|
132
|
-
return { valid: false, errors: ['File does not exist'] };
|
|
133
|
-
}
|
|
134
|
-
const content = await fs.readFile(this.filePath, 'utf-8');
|
|
135
|
-
let data;
|
|
136
|
-
try {
|
|
137
|
-
data = JSON.parse(content);
|
|
138
|
-
}
|
|
139
|
-
catch (error) {
|
|
140
|
-
errors.push(`Invalid JSON: ${error.message}`);
|
|
141
|
-
return { valid: false, errors };
|
|
142
|
-
}
|
|
143
|
-
// Check for new object-based format
|
|
144
|
-
if (data.mcpServers) {
|
|
145
|
-
if (typeof data.mcpServers !== 'object' || Array.isArray(data.mcpServers)) {
|
|
146
|
-
errors.push('"mcpServers" must be an object (not an array)');
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
// Validate each server
|
|
150
|
-
for (const [serverName, serverConfig] of Object.entries(data.mcpServers)) {
|
|
151
|
-
const config = serverConfig;
|
|
152
|
-
if (!config || typeof config !== 'object') {
|
|
153
|
-
errors.push(`Server "${serverName}": configuration must be an object`);
|
|
154
|
-
continue;
|
|
155
|
-
}
|
|
156
|
-
if (!config.command) {
|
|
157
|
-
errors.push(`Server "${serverName}": missing "command" field`);
|
|
158
|
-
}
|
|
159
|
-
if (config.args && !Array.isArray(config.args)) {
|
|
160
|
-
errors.push(`Server "${serverName}": "args" must be an array`);
|
|
161
|
-
}
|
|
162
|
-
if (config.env && typeof config.env !== 'object') {
|
|
163
|
-
errors.push(`Server "${serverName}": "env" must be an object`);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
// Check for legacy array-based format
|
|
169
|
-
else if (data.servers) {
|
|
170
|
-
if (!Array.isArray(data.servers)) {
|
|
171
|
-
errors.push('Legacy format: "servers" must be an array');
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
// Validate legacy format
|
|
175
|
-
data.servers.forEach((server, index) => {
|
|
176
|
-
if (!server.name) {
|
|
177
|
-
errors.push(`Server ${index + 1}: missing "name"`);
|
|
178
|
-
}
|
|
179
|
-
if (!server.command) {
|
|
180
|
-
errors.push(`Server ${index + 1}: missing "command"`);
|
|
181
|
-
}
|
|
182
|
-
if (server.transport && server.transport !== 'stdio') {
|
|
183
|
-
errors.push(`Server ${index + 1}: invalid transport "${server.transport}" (only "stdio" supported)`);
|
|
184
|
-
}
|
|
185
|
-
});
|
|
186
|
-
// Check for duplicate names
|
|
187
|
-
const names = data.servers.map((s) => s.name).filter(Boolean);
|
|
188
|
-
const duplicates = names.filter((name, index) => names.indexOf(name) !== index);
|
|
189
|
-
if (duplicates.length > 0) {
|
|
190
|
-
errors.push(`Duplicate server names: ${[...new Set(duplicates)].join(', ')}`);
|
|
191
|
-
}
|
|
192
|
-
// Suggest migration
|
|
193
|
-
if (errors.length === 0) {
|
|
194
|
-
errors.push('Note: Using legacy array-based format. Will auto-migrate to new object-based format on load.');
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
errors.push('Missing "mcpServers" field (or legacy "servers" field)');
|
|
200
|
-
}
|
|
201
|
-
return {
|
|
202
|
-
valid: errors.length === 0 || (errors.length === 1 && errors[0].startsWith('Note:')),
|
|
203
|
-
errors,
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
catch (error) {
|
|
207
|
-
errors.push(`Failed to read file: ${error.message}`);
|
|
208
|
-
return { valid: false, errors };
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
//# sourceMappingURL=mcp-servers-file.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-servers-file.js","sourceRoot":"","sources":["../../src/utils/mcp-servers-file.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/safety.d.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Safety utilities for classifying and managing risky operations
|
|
3
|
-
*/
|
|
4
|
-
export type RiskLevel = 'low' | 'medium' | 'high';
|
|
5
|
-
/**
|
|
6
|
-
* Resolve a file path against a working directory and ensure it stays inside it (no path traversal).
|
|
7
|
-
* Use for all user-provided paths before file operations.
|
|
8
|
-
*/
|
|
9
|
-
export declare function sanitizePath(workingDir: string, filePath: string): {
|
|
10
|
-
ok: true;
|
|
11
|
-
path: string;
|
|
12
|
-
} | {
|
|
13
|
-
ok: false;
|
|
14
|
-
message: string;
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* Validate URL for fetch_url to reduce SSRF risk: only http/https, no localhost or private IPs by default.
|
|
18
|
-
*/
|
|
19
|
-
export declare function sanitizeUrl(url: string, allowLocalhost?: boolean): {
|
|
20
|
-
ok: true;
|
|
21
|
-
url: string;
|
|
22
|
-
} | {
|
|
23
|
-
ok: false;
|
|
24
|
-
message: string;
|
|
25
|
-
};
|
|
26
|
-
export interface RiskAssessment {
|
|
27
|
-
level: RiskLevel;
|
|
28
|
-
reasons: string[];
|
|
29
|
-
warnings: string[];
|
|
30
|
-
}
|
|
31
|
-
export declare class SafetyChecker {
|
|
32
|
-
/**
|
|
33
|
-
* Assess the risk level of a tool operation
|
|
34
|
-
*/
|
|
35
|
-
assessToolRisk(toolName: string, params: any): RiskAssessment;
|
|
36
|
-
/**
|
|
37
|
-
* Assess the risk level of a shell command
|
|
38
|
-
*/
|
|
39
|
-
assessCommandRisk(command: string): RiskLevel;
|
|
40
|
-
/**
|
|
41
|
-
* Check if a command should be blocked entirely
|
|
42
|
-
*/
|
|
43
|
-
isCommandBlocked(command: string): {
|
|
44
|
-
blocked: boolean;
|
|
45
|
-
reason?: string;
|
|
46
|
-
};
|
|
47
|
-
/**
|
|
48
|
-
* Suggest safer alternatives for risky commands
|
|
49
|
-
*/
|
|
50
|
-
suggestSaferAlternative(command: string): string | null;
|
|
51
|
-
/**
|
|
52
|
-
* Check if a file path is sensitive
|
|
53
|
-
*/
|
|
54
|
-
isSensitivePath(filepath: string): boolean;
|
|
55
|
-
/**
|
|
56
|
-
* Validate dry-run compatibility for a tool
|
|
57
|
-
*/
|
|
58
|
-
canDryRun(toolName: string): boolean;
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=safety.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../src/utils/safety.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAQ9H;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,UAAQ,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAiB3H;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,cAAc;IAqG7D;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;IAkD7C;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAqBxE;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA0BvD;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAgB1C;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAgBrC"}
|
package/dist/utils/safety.js
DELETED
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Safety utilities for classifying and managing risky operations
|
|
3
|
-
*/
|
|
4
|
-
import * as path from 'path';
|
|
5
|
-
/**
|
|
6
|
-
* Resolve a file path against a working directory and ensure it stays inside it (no path traversal).
|
|
7
|
-
* Use for all user-provided paths before file operations.
|
|
8
|
-
*/
|
|
9
|
-
export function sanitizePath(workingDir, filePath) {
|
|
10
|
-
const normalized = path.normalize(filePath).replace(/^(\.\.(\/|\\))+/, '');
|
|
11
|
-
const resolved = path.resolve(workingDir, normalized);
|
|
12
|
-
const relative = path.relative(workingDir, resolved);
|
|
13
|
-
if (relative.startsWith('..') || path.isAbsolute(relative)) {
|
|
14
|
-
return { ok: false, message: 'Path escapes working directory and is not allowed' };
|
|
15
|
-
}
|
|
16
|
-
return { ok: true, path: resolved };
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Validate URL for fetch_url to reduce SSRF risk: only http/https, no localhost or private IPs by default.
|
|
20
|
-
*/
|
|
21
|
-
export function sanitizeUrl(url, allowLocalhost = false) {
|
|
22
|
-
let parsed;
|
|
23
|
-
try {
|
|
24
|
-
parsed = new URL(url);
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
return { ok: false, message: 'Invalid URL' };
|
|
28
|
-
}
|
|
29
|
-
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
30
|
-
return { ok: false, message: 'Only http and https URLs are allowed' };
|
|
31
|
-
}
|
|
32
|
-
if (!allowLocalhost) {
|
|
33
|
-
const host = (parsed.hostname || '').toLowerCase();
|
|
34
|
-
if (host === 'localhost' || host === '127.0.0.1' || host.startsWith('192.168.') || host.startsWith('10.') || host.endsWith('.local')) {
|
|
35
|
-
return { ok: false, message: 'Local or private URLs are not allowed' };
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return { ok: true, url: parsed.toString() };
|
|
39
|
-
}
|
|
40
|
-
export class SafetyChecker {
|
|
41
|
-
/**
|
|
42
|
-
* Assess the risk level of a tool operation
|
|
43
|
-
*/
|
|
44
|
-
assessToolRisk(toolName, params) {
|
|
45
|
-
const reasons = [];
|
|
46
|
-
const warnings = [];
|
|
47
|
-
let level = 'low';
|
|
48
|
-
switch (toolName) {
|
|
49
|
-
case 'delete_file':
|
|
50
|
-
level = 'high';
|
|
51
|
-
reasons.push('Deletes files/directories permanently');
|
|
52
|
-
warnings.push('Ensure backups exist before deletion');
|
|
53
|
-
// Check if deleting important directories
|
|
54
|
-
if (params.path) {
|
|
55
|
-
const dangerousPaths = [
|
|
56
|
-
'node_modules',
|
|
57
|
-
'.git',
|
|
58
|
-
'dist',
|
|
59
|
-
'build',
|
|
60
|
-
'src',
|
|
61
|
-
'/',
|
|
62
|
-
'~',
|
|
63
|
-
];
|
|
64
|
-
for (const dangerous of dangerousPaths) {
|
|
65
|
-
if (params.path.includes(dangerous)) {
|
|
66
|
-
level = 'high';
|
|
67
|
-
warnings.push(`Deleting ${dangerous} directory - HIGH RISK`);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
break;
|
|
72
|
-
case 'write_file':
|
|
73
|
-
// Writing is generally safe but can overwrite
|
|
74
|
-
if (params.path) {
|
|
75
|
-
// Check for important files
|
|
76
|
-
const importantFiles = [
|
|
77
|
-
'package.json',
|
|
78
|
-
'tsconfig.json',
|
|
79
|
-
'.gitignore',
|
|
80
|
-
'README.md',
|
|
81
|
-
'.env',
|
|
82
|
-
];
|
|
83
|
-
if (importantFiles.some(f => params.path.endsWith(f))) {
|
|
84
|
-
level = 'medium';
|
|
85
|
-
reasons.push('Modifying important configuration file');
|
|
86
|
-
warnings.push('Verify changes to avoid breaking the project');
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
break;
|
|
90
|
-
case 'edit_file':
|
|
91
|
-
case 'edit_lines':
|
|
92
|
-
case 'insert_at_line':
|
|
93
|
-
level = 'low';
|
|
94
|
-
reasons.push('File edits are backed up automatically');
|
|
95
|
-
break;
|
|
96
|
-
case 'move_file':
|
|
97
|
-
level = 'medium';
|
|
98
|
-
reasons.push('Moving files can break imports and references');
|
|
99
|
-
warnings.push('Update imports after moving files');
|
|
100
|
-
break;
|
|
101
|
-
case 'run_command':
|
|
102
|
-
level = this.assessCommandRisk(params.command);
|
|
103
|
-
if (level === 'high') {
|
|
104
|
-
reasons.push('Command can make irreversible changes');
|
|
105
|
-
}
|
|
106
|
-
break;
|
|
107
|
-
case 'create_git_checkpoint':
|
|
108
|
-
level = 'low';
|
|
109
|
-
reasons.push('Creates a safe restore point');
|
|
110
|
-
break;
|
|
111
|
-
case 'revert_to_git_checkpoint':
|
|
112
|
-
level = 'high';
|
|
113
|
-
reasons.push('Reverts code changes');
|
|
114
|
-
warnings.push('Ensure correct checkpoint before reverting');
|
|
115
|
-
if (!params.confirm) {
|
|
116
|
-
warnings.push('Requires explicit confirmation');
|
|
117
|
-
}
|
|
118
|
-
break;
|
|
119
|
-
case 'revert_file':
|
|
120
|
-
level = 'medium';
|
|
121
|
-
reasons.push('Reverts file to previous version');
|
|
122
|
-
warnings.push('Verify backup index before reverting');
|
|
123
|
-
break;
|
|
124
|
-
default:
|
|
125
|
-
level = 'low';
|
|
126
|
-
}
|
|
127
|
-
return { level, reasons, warnings };
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Assess the risk level of a shell command
|
|
131
|
-
*/
|
|
132
|
-
assessCommandRisk(command) {
|
|
133
|
-
const cmd = command.toLowerCase().trim();
|
|
134
|
-
// High-risk commands
|
|
135
|
-
const highRiskPatterns = [
|
|
136
|
-
/rm\s+-rf/,
|
|
137
|
-
/git\s+reset\s+--hard/,
|
|
138
|
-
/git\s+push\s+--force/,
|
|
139
|
-
/git\s+push\s+-f/,
|
|
140
|
-
/dd\s+if=/,
|
|
141
|
-
/mkfs/,
|
|
142
|
-
/format/,
|
|
143
|
-
/:\(\)\{.*\}/, // Fork bomb pattern
|
|
144
|
-
/chmod\s+777/,
|
|
145
|
-
/chown\s+-R/,
|
|
146
|
-
/sudo\s+rm/,
|
|
147
|
-
/> \/dev\//,
|
|
148
|
-
/curl.*\|\s*(bash|sh)/,
|
|
149
|
-
/wget.*\|\s*(bash|sh)/,
|
|
150
|
-
];
|
|
151
|
-
for (const pattern of highRiskPatterns) {
|
|
152
|
-
if (pattern.test(cmd)) {
|
|
153
|
-
return 'high';
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
// Medium-risk commands
|
|
157
|
-
const mediumRiskPatterns = [
|
|
158
|
-
/git\s+push/,
|
|
159
|
-
/npm\s+publish/,
|
|
160
|
-
/rm\s+/,
|
|
161
|
-
/git\s+reset/,
|
|
162
|
-
/git\s+rebase/,
|
|
163
|
-
/git\s+merge/,
|
|
164
|
-
/docker\s+rm/,
|
|
165
|
-
/docker\s+rmi/,
|
|
166
|
-
/kill\s+-9/,
|
|
167
|
-
/pkill/,
|
|
168
|
-
];
|
|
169
|
-
for (const pattern of mediumRiskPatterns) {
|
|
170
|
-
if (pattern.test(cmd)) {
|
|
171
|
-
return 'medium';
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
return 'low';
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Check if a command should be blocked entirely
|
|
178
|
-
*/
|
|
179
|
-
isCommandBlocked(command) {
|
|
180
|
-
const cmd = command.toLowerCase().trim();
|
|
181
|
-
// Block extremely dangerous commands
|
|
182
|
-
const blockedPatterns = [
|
|
183
|
-
{ pattern: /:\(\)\{.*\}/, reason: 'Fork bomb detected' },
|
|
184
|
-
{ pattern: /rm\s+-rf\s+\/($|\s)/, reason: 'Attempting to delete root directory' },
|
|
185
|
-
{ pattern: /rm\s+-rf\s+~($|\s)/, reason: 'Attempting to delete home directory' },
|
|
186
|
-
{ pattern: /> \/dev\/sda/, reason: 'Attempting to write directly to disk' },
|
|
187
|
-
{ pattern: /mkfs/, reason: 'Attempting to format filesystem' },
|
|
188
|
-
];
|
|
189
|
-
for (const { pattern, reason } of blockedPatterns) {
|
|
190
|
-
if (pattern.test(cmd)) {
|
|
191
|
-
return { blocked: true, reason };
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
return { blocked: false };
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Suggest safer alternatives for risky commands
|
|
198
|
-
*/
|
|
199
|
-
suggestSaferAlternative(command) {
|
|
200
|
-
const cmd = command.toLowerCase().trim();
|
|
201
|
-
// Normalize multiple spaces for simpler matching
|
|
202
|
-
const normalized = cmd.replace(/\s+/g, ' ');
|
|
203
|
-
if (normalized.includes('git reset --hard')) {
|
|
204
|
-
return 'Use "git stash" to save changes, then "git stash drop" if you really want to discard them';
|
|
205
|
-
}
|
|
206
|
-
if (normalized.includes('git push --force') || normalized.includes('git push -f')) {
|
|
207
|
-
return 'Use "git push --force-with-lease" to avoid overwriting others\' work';
|
|
208
|
-
}
|
|
209
|
-
if (normalized.match(/rm\s+-rf/)) {
|
|
210
|
-
return 'Consider using "mv" to move files to a temporary location first';
|
|
211
|
-
}
|
|
212
|
-
// Suggest alternative package managers only for explicit "npm install"
|
|
213
|
-
if (/^npm\s+install\b/.test(normalized) && !normalized.includes('-g')) {
|
|
214
|
-
return 'Consider using "pnpm install" or "bun install" for faster, more efficient installs';
|
|
215
|
-
}
|
|
216
|
-
return null;
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Check if a file path is sensitive
|
|
220
|
-
*/
|
|
221
|
-
isSensitivePath(filepath) {
|
|
222
|
-
const sensitive = [
|
|
223
|
-
'.env',
|
|
224
|
-
'.env.local',
|
|
225
|
-
'.env.production',
|
|
226
|
-
'credentials.json',
|
|
227
|
-
'secrets.yaml',
|
|
228
|
-
'private.key',
|
|
229
|
-
'.ssh/',
|
|
230
|
-
'id_rsa',
|
|
231
|
-
'id_ed25519',
|
|
232
|
-
];
|
|
233
|
-
return sensitive.some(pattern => filepath.includes(pattern));
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* Validate dry-run compatibility for a tool
|
|
237
|
-
*/
|
|
238
|
-
canDryRun(toolName) {
|
|
239
|
-
const dryRunnable = [
|
|
240
|
-
'write_file',
|
|
241
|
-
'edit_file',
|
|
242
|
-
'edit_lines',
|
|
243
|
-
'insert_at_line',
|
|
244
|
-
'delete_file',
|
|
245
|
-
'move_file',
|
|
246
|
-
'create_directory',
|
|
247
|
-
'create_git_checkpoint',
|
|
248
|
-
'revert_to_git_checkpoint',
|
|
249
|
-
'revert_file',
|
|
250
|
-
];
|
|
251
|
-
return dryRunnable.includes(toolName);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
//# sourceMappingURL=safety.js.map
|
package/dist/utils/safety.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/utils/safety.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/smithery.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export interface SmitheryServer {
|
|
2
|
-
qualifiedName: string;
|
|
3
|
-
displayName?: string;
|
|
4
|
-
description?: string;
|
|
5
|
-
useCount?: number;
|
|
6
|
-
connectionUrl?: string;
|
|
7
|
-
}
|
|
8
|
-
export declare class SmitheryClient {
|
|
9
|
-
/**
|
|
10
|
-
* Search for MCP servers using Smithery CLI
|
|
11
|
-
*/
|
|
12
|
-
search(query: string): Promise<SmitheryServer[]>;
|
|
13
|
-
/**
|
|
14
|
-
* Construct the command configuration for running an MCP server via Smithery
|
|
15
|
-
*/
|
|
16
|
-
getRunConfig(serverName: string, config?: Record<string, any>): {
|
|
17
|
-
command: string;
|
|
18
|
-
args: string[];
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* Check if Smithery CLI is usable (has node/npx)
|
|
22
|
-
*/
|
|
23
|
-
isAvailable(): Promise<boolean>;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=smithery.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"smithery.d.ts","sourceRoot":"","sources":["../../src/utils/smithery.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,cAAc;IACvB;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAYtD;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE;IAcvG;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAQxC"}
|
package/dist/utils/smithery.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { exec } from 'child_process';
|
|
2
|
-
import { promisify } from 'util';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
|
-
const execAsync = promisify(exec);
|
|
5
|
-
export class SmitheryClient {
|
|
6
|
-
/**
|
|
7
|
-
* Search for MCP servers using Smithery CLI
|
|
8
|
-
*/
|
|
9
|
-
async search(query) {
|
|
10
|
-
try {
|
|
11
|
-
// Use --json to get structured output
|
|
12
|
-
const { stdout } = await execAsync(`npx -y @smithery/cli search "${query}" --json`);
|
|
13
|
-
const data = JSON.parse(stdout);
|
|
14
|
-
return Array.isArray(data) ? data : [];
|
|
15
|
-
}
|
|
16
|
-
catch (error) {
|
|
17
|
-
console.error(chalk.red('Failed to search Smithery:'), error.message);
|
|
18
|
-
return [];
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Construct the command configuration for running an MCP server via Smithery
|
|
23
|
-
*/
|
|
24
|
-
getRunConfig(serverName, config = {}) {
|
|
25
|
-
return {
|
|
26
|
-
command: 'npx',
|
|
27
|
-
args: [
|
|
28
|
-
'-y',
|
|
29
|
-
'@smithery/cli@latest',
|
|
30
|
-
'run',
|
|
31
|
-
serverName,
|
|
32
|
-
'--config',
|
|
33
|
-
JSON.stringify(config) // Config must be passed as a JSON string to the CLI
|
|
34
|
-
]
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Check if Smithery CLI is usable (has node/npx)
|
|
39
|
-
*/
|
|
40
|
-
async isAvailable() {
|
|
41
|
-
try {
|
|
42
|
-
await execAsync('npx --version');
|
|
43
|
-
return true;
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=smithery.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"smithery.js","sourceRoot":"","sources":["../../src/utils/smithery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAUlC,MAAM,OAAO,cAAc;IACvB;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa;QACtB,IAAI,CAAC;YACD,sCAAsC;YACtC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,gCAAgC,KAAK,UAAU,CAAC,CAAC;YACpF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACtE,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,UAAkB,EAAE,SAA8B,EAAE;QAC7D,OAAO;YACH,OAAO,EAAE,KAAK;YACd,IAAI,EAAE;gBACF,IAAI;gBACJ,sBAAsB;gBACtB,KAAK;gBACL,UAAU;gBACV,UAAU;gBACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,oDAAoD;aAC9E;SACJ,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACb,IAAI,CAAC;YACD,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ"}
|