xibecode 0.0.3 → 0.0.4
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 +192 -2
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +52 -1
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +168 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/mcp.d.ts +11 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +217 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/punycode.d.ts +5 -0
- package/dist/commands/punycode.d.ts.map +1 -0
- package/dist/commands/punycode.js +48 -0
- package/dist/commands/punycode.js.map +1 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +24 -0
- package/dist/commands/run.js.map +1 -1
- package/dist/core/agent.d.ts +5 -1
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +317 -11
- package/dist/core/agent.js.map +1 -1
- package/dist/core/mcp-client.d.ts +80 -0
- package/dist/core/mcp-client.d.ts.map +1 -0
- package/dist/core/mcp-client.js +250 -0
- package/dist/core/mcp-client.js.map +1 -0
- package/dist/core/modes.d.ts +125 -0
- package/dist/core/modes.d.ts.map +1 -0
- package/dist/core/modes.js +459 -0
- package/dist/core/modes.js.map +1 -0
- package/dist/core/tools.d.ts +3 -0
- package/dist/core/tools.d.ts.map +1 -1
- package/dist/core/tools.js +32 -1
- package/dist/core/tools.js.map +1 -1
- package/dist/index.js +43 -2
- package/dist/index.js.map +1 -1
- package/dist/ui/enhanced-tui.js +1 -1
- package/dist/utils/config.d.ts +40 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +80 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/mcp-servers-file.d.ts +39 -0
- package/dist/utils/mcp-servers-file.d.ts.map +1 -0
- package/dist/utils/mcp-servers-file.js +160 -0
- package/dist/utils/mcp-servers-file.js.map +1 -0
- package/package.json +10 -8
|
@@ -0,0 +1,160 @@
|
|
|
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
|
+
*/
|
|
34
|
+
async loadMCPServers() {
|
|
35
|
+
try {
|
|
36
|
+
if (!(await this.fileExists())) {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
const content = await fs.readFile(this.filePath, 'utf-8');
|
|
40
|
+
const data = JSON.parse(content);
|
|
41
|
+
// Validate structure
|
|
42
|
+
if (!data.servers || !Array.isArray(data.servers)) {
|
|
43
|
+
throw new Error('Invalid file format: "servers" must be an array');
|
|
44
|
+
}
|
|
45
|
+
// Validate each server
|
|
46
|
+
const validatedServers = [];
|
|
47
|
+
for (const server of data.servers) {
|
|
48
|
+
if (!server.name || !server.transport || !server.command) {
|
|
49
|
+
throw new Error(`Invalid server config: missing required fields (name, transport, command)`);
|
|
50
|
+
}
|
|
51
|
+
if (server.transport !== 'stdio') {
|
|
52
|
+
throw new Error(`Invalid transport type: only "stdio" is supported`);
|
|
53
|
+
}
|
|
54
|
+
validatedServers.push(server);
|
|
55
|
+
}
|
|
56
|
+
return validatedServers;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
if (error.code === 'ENOENT') {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
throw new Error(`Failed to load MCP servers file: ${error.message}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Save MCP servers to file
|
|
67
|
+
*/
|
|
68
|
+
async saveMCPServers(servers) {
|
|
69
|
+
try {
|
|
70
|
+
const configDir = path.dirname(this.filePath);
|
|
71
|
+
// Ensure directory exists
|
|
72
|
+
await fs.mkdir(configDir, { recursive: true });
|
|
73
|
+
const data = {
|
|
74
|
+
servers,
|
|
75
|
+
};
|
|
76
|
+
await fs.writeFile(this.filePath, JSON.stringify(data, null, 2) + '\n', 'utf-8');
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
throw new Error(`Failed to save MCP servers file: ${error.message}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Create default config file with examples
|
|
84
|
+
*/
|
|
85
|
+
async createDefaultFile() {
|
|
86
|
+
const defaultServers = [
|
|
87
|
+
{
|
|
88
|
+
name: 'filesystem',
|
|
89
|
+
transport: 'stdio',
|
|
90
|
+
command: 'mcp-server-filesystem',
|
|
91
|
+
args: ['--root', '/path/to/files'],
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: 'github',
|
|
95
|
+
transport: 'stdio',
|
|
96
|
+
command: 'mcp-server-github',
|
|
97
|
+
args: ['--token', 'YOUR_GITHUB_TOKEN'],
|
|
98
|
+
},
|
|
99
|
+
];
|
|
100
|
+
await this.saveMCPServers(defaultServers);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Validate the file format
|
|
104
|
+
*/
|
|
105
|
+
async validateFile() {
|
|
106
|
+
const errors = [];
|
|
107
|
+
try {
|
|
108
|
+
if (!(await this.fileExists())) {
|
|
109
|
+
return { valid: false, errors: ['File does not exist'] };
|
|
110
|
+
}
|
|
111
|
+
const content = await fs.readFile(this.filePath, 'utf-8');
|
|
112
|
+
let data;
|
|
113
|
+
try {
|
|
114
|
+
data = JSON.parse(content);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
errors.push(`Invalid JSON: ${error.message}`);
|
|
118
|
+
return { valid: false, errors };
|
|
119
|
+
}
|
|
120
|
+
if (!data.servers) {
|
|
121
|
+
errors.push('Missing "servers" field');
|
|
122
|
+
}
|
|
123
|
+
else if (!Array.isArray(data.servers)) {
|
|
124
|
+
errors.push('"servers" must be an array');
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
// Validate each server
|
|
128
|
+
data.servers.forEach((server, index) => {
|
|
129
|
+
if (!server.name) {
|
|
130
|
+
errors.push(`Server ${index + 1}: missing "name"`);
|
|
131
|
+
}
|
|
132
|
+
if (!server.transport) {
|
|
133
|
+
errors.push(`Server ${index + 1}: missing "transport"`);
|
|
134
|
+
}
|
|
135
|
+
else if (server.transport !== 'stdio') {
|
|
136
|
+
errors.push(`Server ${index + 1}: invalid transport "${server.transport}" (only "stdio" supported)`);
|
|
137
|
+
}
|
|
138
|
+
if (!server.command) {
|
|
139
|
+
errors.push(`Server ${index + 1}: missing "command"`);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
// Check for duplicate names
|
|
143
|
+
const names = data.servers.map(s => s.name).filter(Boolean);
|
|
144
|
+
const duplicates = names.filter((name, index) => names.indexOf(name) !== index);
|
|
145
|
+
if (duplicates.length > 0) {
|
|
146
|
+
errors.push(`Duplicate server names: ${[...new Set(duplicates)].join(', ')}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
valid: errors.length === 0,
|
|
151
|
+
errors,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
errors.push(`Failed to read file: ${error.message}`);
|
|
156
|
+
return { valid: false, errors };
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=mcp-servers-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-servers-file.js","sourceRoot":"","sources":["../../src/utils/mcp-servers-file.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xibecode",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "AI-powered autonomous coding assistant with test integration, git awareness, and plugin support",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -31,23 +31,25 @@
|
|
|
31
31
|
"homepage": "https://github.com/yourusername/xibecode#readme",
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@anthropic-ai/sdk": "^0.32.1",
|
|
34
|
-
"
|
|
34
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
35
35
|
"chalk": "^5.3.0",
|
|
36
|
-
"
|
|
37
|
-
"inquirer": "^9.2.12",
|
|
38
|
-
"dotenv": "^16.3.1",
|
|
36
|
+
"commander": "^12.0.0",
|
|
39
37
|
"conf": "^12.0.0",
|
|
40
38
|
"diff": "^5.1.0",
|
|
39
|
+
"dotenv": "^16.3.1",
|
|
41
40
|
"fast-glob": "^3.3.2",
|
|
41
|
+
"inquirer": "^9.2.12",
|
|
42
42
|
"node-fetch": "^3.3.2",
|
|
43
|
-
"
|
|
43
|
+
"ora": "^8.0.1",
|
|
44
|
+
"strip-ansi": "^7.1.0",
|
|
45
|
+
"zod": "^4.3.6"
|
|
44
46
|
},
|
|
45
47
|
"devDependencies": {
|
|
46
|
-
"@types/node": "^20.10.0",
|
|
47
48
|
"@types/diff": "^5.0.8",
|
|
48
49
|
"@types/inquirer": "^9.0.7",
|
|
49
|
-
"
|
|
50
|
+
"@types/node": "^20.10.0",
|
|
50
51
|
"tsx": "^4.7.0",
|
|
52
|
+
"typescript": "^5.3.3",
|
|
51
53
|
"vitest": "^1.0.4"
|
|
52
54
|
},
|
|
53
55
|
"engines": {
|