xibecode 0.0.2 → 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 (49) 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.d.ts.map +1 -1
  39. package/dist/ui/enhanced-tui.js +1 -19
  40. package/dist/ui/enhanced-tui.js.map +1 -1
  41. package/dist/utils/config.d.ts +40 -0
  42. package/dist/utils/config.d.ts.map +1 -1
  43. package/dist/utils/config.js +80 -0
  44. package/dist/utils/config.js.map +1 -1
  45. package/dist/utils/mcp-servers-file.d.ts +39 -0
  46. package/dist/utils/mcp-servers-file.d.ts.map +1 -0
  47. package/dist/utils/mcp-servers-file.js +160 -0
  48. package/dist/utils/mcp-servers-file.js.map +1 -0
  49. package/package.json +10 -8
@@ -1,11 +1,14 @@
1
1
  import Conf from 'conf';
2
2
  import * as path from 'path';
3
3
  import * as os from 'os';
4
+ import { MCPServersFileManager } from './mcp-servers-file.js';
4
5
  export class ConfigManager {
5
6
  store;
6
7
  configPath;
8
+ mcpFileManager;
7
9
  constructor() {
8
10
  this.configPath = path.join(os.homedir(), '.xibecode');
11
+ this.mcpFileManager = new MCPServersFileManager();
9
12
  this.store = new Conf({
10
13
  projectName: 'xibecode',
11
14
  cwd: this.configPath,
@@ -17,6 +20,7 @@ export class ConfigManager {
17
20
  enableDryRunByDefault: false,
18
21
  gitCheckpointStrategy: 'stash',
19
22
  plugins: [],
23
+ mcpServers: [],
20
24
  },
21
25
  });
22
26
  }
@@ -144,5 +148,81 @@ export class ConfigManager {
144
148
  'Config Path': this.getConfigPath(),
145
149
  };
146
150
  }
151
+ /**
152
+ * Get all MCP server configurations
153
+ * Loads from mcp-servers.json file first, falls back to config store
154
+ */
155
+ async getMCPServers() {
156
+ try {
157
+ // Try to load from file first
158
+ const fileServers = await this.mcpFileManager.loadMCPServers();
159
+ if (fileServers.length > 0 || await this.mcpFileManager.fileExists()) {
160
+ return fileServers;
161
+ }
162
+ }
163
+ catch (error) {
164
+ // If file has errors, fall back to config store
165
+ console.warn(`Warning: Failed to load MCP servers from file, using config store: ${error instanceof Error ? error.message : String(error)}`);
166
+ }
167
+ // Fall back to config store
168
+ return this.get('mcpServers') || [];
169
+ }
170
+ /**
171
+ * Get MCP servers synchronously (for backward compatibility)
172
+ * Uses config store only
173
+ */
174
+ getMCPServersSync() {
175
+ return this.get('mcpServers') || [];
176
+ }
177
+ /**
178
+ * Get MCP servers file manager
179
+ */
180
+ getMCPServersFileManager() {
181
+ return this.mcpFileManager;
182
+ }
183
+ /**
184
+ * Add an MCP server configuration
185
+ */
186
+ addMCPServer(serverConfig) {
187
+ const servers = this.getMCPServersSync();
188
+ // Check if server with same name already exists
189
+ if (servers.some(s => s.name === serverConfig.name)) {
190
+ throw new Error(`MCP server with name "${serverConfig.name}" already exists`);
191
+ }
192
+ servers.push(serverConfig);
193
+ this.set('mcpServers', servers);
194
+ }
195
+ /**
196
+ * Remove an MCP server configuration
197
+ */
198
+ removeMCPServer(serverName) {
199
+ const servers = this.getMCPServersSync();
200
+ const filtered = servers.filter(s => s.name !== serverName);
201
+ if (filtered.length === servers.length) {
202
+ return false; // Server not found
203
+ }
204
+ this.set('mcpServers', filtered);
205
+ return true;
206
+ }
207
+ /**
208
+ * Get a specific MCP server configuration
209
+ */
210
+ getMCPServer(serverName) {
211
+ const servers = this.getMCPServersSync();
212
+ return servers.find(s => s.name === serverName);
213
+ }
214
+ /**
215
+ * Update an MCP server configuration
216
+ */
217
+ updateMCPServer(serverName, updates) {
218
+ const servers = this.getMCPServersSync();
219
+ const index = servers.findIndex(s => s.name === serverName);
220
+ if (index === -1) {
221
+ return false; // Server not found
222
+ }
223
+ servers[index] = { ...servers[index], ...updates };
224
+ this.set('mcpServers', servers);
225
+ return true;
226
+ }
147
227
  }
148
228
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { MCPServerConfig } from './config.js';
2
+ export interface MCPServersFile {
3
+ servers: MCPServerConfig[];
4
+ }
5
+ /**
6
+ * Manages MCP servers configuration file
7
+ */
8
+ export declare class MCPServersFileManager {
9
+ private filePath;
10
+ constructor();
11
+ /**
12
+ * Get the path to the MCP servers config file
13
+ */
14
+ getFilePath(): string;
15
+ /**
16
+ * Check if the file exists
17
+ */
18
+ fileExists(): Promise<boolean>;
19
+ /**
20
+ * Load MCP servers from file
21
+ */
22
+ loadMCPServers(): Promise<MCPServerConfig[]>;
23
+ /**
24
+ * Save MCP servers to file
25
+ */
26
+ saveMCPServers(servers: MCPServerConfig[]): Promise<void>;
27
+ /**
28
+ * Create default config file with examples
29
+ */
30
+ createDefaultFile(): Promise<void>;
31
+ /**
32
+ * Validate the file format
33
+ */
34
+ validateFile(): Promise<{
35
+ valid: boolean;
36
+ errors: string[];
37
+ }>;
38
+ }
39
+ //# sourceMappingURL=mcp-servers-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-servers-file.d.ts","sourceRoot":"","sources":["../../src/utils/mcp-servers-file.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAS;;IAOzB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IASpC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAmClD;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/D;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBxC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAuDpE"}
@@ -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":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAOzB;;GAEG;AACH,MAAM,OAAO,qBAAqB;IACxB,QAAQ,CAAS;IAEzB;QACE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,IAAI,GAAmB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEjD,qBAAqB;YACrB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;YAED,uBAAuB;YACvB,MAAM,gBAAgB,GAAsB,EAAE,CAAC;YAC/C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACzD,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;gBAC/F,CAAC;gBACD,IAAI,MAAM,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;gBACvE,CAAC;gBACD,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC;YAED,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,OAA0B;QAC7C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE9C,0BAA0B;YAC1B,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE/C,MAAM,IAAI,GAAmB;gBAC3B,OAAO;aACR,CAAC;YAEF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,MAAM,cAAc,GAAsB;YACxC;gBACE,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,uBAAuB;gBAChC,IAAI,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC;aACnC;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,mBAAmB;gBAC5B,IAAI,EAAE,CAAC,SAAS,EAAE,mBAAmB,CAAC;aACvC;SACF,CAAC;QAEF,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC3D,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC1D,IAAI,IAAoB,CAAC;YAEzB,IAAI,CAAC;gBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAClC,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,uBAAuB;gBACvB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;oBACrC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;wBACjB,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC,kBAAkB,CAAC,CAAC;oBACrD,CAAC;oBACD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;wBACtB,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC,uBAAuB,CAAC,CAAC;oBAC1D,CAAC;yBAAM,IAAI,MAAM,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;wBACxC,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC,wBAAwB,MAAM,CAAC,SAAS,4BAA4B,CAAC,CAAC;oBACvG,CAAC;oBACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACpB,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBACxD,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,4BAA4B;gBAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;gBAChF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;YAED,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;gBAC1B,MAAM;aACP,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACrD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xibecode",
3
- "version": "0.0.2",
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": {