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.
Files changed (47) hide show
  1. package/README.md +192 -2
  2. package/dist/commands/chat.d.ts.map +1 -1
  3. package/dist/commands/chat.js +52 -1
  4. package/dist/commands/chat.js.map +1 -1
  5. package/dist/commands/config.d.ts +3 -0
  6. package/dist/commands/config.d.ts.map +1 -1
  7. package/dist/commands/config.js +168 -0
  8. package/dist/commands/config.js.map +1 -1
  9. package/dist/commands/mcp.d.ts +11 -0
  10. package/dist/commands/mcp.d.ts.map +1 -0
  11. package/dist/commands/mcp.js +217 -0
  12. package/dist/commands/mcp.js.map +1 -0
  13. package/dist/commands/punycode.d.ts +5 -0
  14. package/dist/commands/punycode.d.ts.map +1 -0
  15. package/dist/commands/punycode.js +48 -0
  16. package/dist/commands/punycode.js.map +1 -0
  17. package/dist/commands/run.d.ts.map +1 -1
  18. package/dist/commands/run.js +24 -0
  19. package/dist/commands/run.js.map +1 -1
  20. package/dist/core/agent.d.ts +5 -1
  21. package/dist/core/agent.d.ts.map +1 -1
  22. package/dist/core/agent.js +317 -11
  23. package/dist/core/agent.js.map +1 -1
  24. package/dist/core/mcp-client.d.ts +80 -0
  25. package/dist/core/mcp-client.d.ts.map +1 -0
  26. package/dist/core/mcp-client.js +250 -0
  27. package/dist/core/mcp-client.js.map +1 -0
  28. package/dist/core/modes.d.ts +125 -0
  29. package/dist/core/modes.d.ts.map +1 -0
  30. package/dist/core/modes.js +459 -0
  31. package/dist/core/modes.js.map +1 -0
  32. package/dist/core/tools.d.ts +3 -0
  33. package/dist/core/tools.d.ts.map +1 -1
  34. package/dist/core/tools.js +32 -1
  35. package/dist/core/tools.js.map +1 -1
  36. package/dist/index.js +43 -2
  37. package/dist/index.js.map +1 -1
  38. package/dist/ui/enhanced-tui.js +1 -1
  39. package/dist/utils/config.d.ts +40 -0
  40. package/dist/utils/config.d.ts.map +1 -1
  41. package/dist/utils/config.js +80 -0
  42. package/dist/utils/config.js.map +1 -1
  43. package/dist/utils/mcp-servers-file.d.ts +39 -0
  44. package/dist/utils/mcp-servers-file.d.ts.map +1 -0
  45. package/dist/utils/mcp-servers-file.js +160 -0
  46. package/dist/utils/mcp-servers-file.js.map +1 -0
  47. 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",
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
- "commander": "^12.0.0",
34
+ "@modelcontextprotocol/sdk": "^1.26.0",
35
35
  "chalk": "^5.3.0",
36
- "ora": "^8.0.1",
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
- "strip-ansi": "^7.1.0"
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
- "typescript": "^5.3.3",
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": {