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,250 @@
1
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
+ /**
4
+ * Manages connections to MCP servers and provides unified access to their capabilities
5
+ */
6
+ export class MCPClientManager {
7
+ clients = new Map();
8
+ serverConfigs = new Map();
9
+ tools = new Map();
10
+ resources = new Map();
11
+ prompts = new Map();
12
+ /**
13
+ * Connect to an MCP server
14
+ */
15
+ async connect(serverConfig) {
16
+ if (this.clients.has(serverConfig.name)) {
17
+ throw new Error(`Already connected to MCP server: ${serverConfig.name}`);
18
+ }
19
+ try {
20
+ const client = new Client({
21
+ name: 'xibecode',
22
+ version: '1.0.0',
23
+ }, {
24
+ capabilities: {},
25
+ });
26
+ if (serverConfig.transport !== 'stdio') {
27
+ throw new Error(`Currently only 'stdio' transport is supported. Server: ${serverConfig.name}`);
28
+ }
29
+ if (!serverConfig.command) {
30
+ throw new Error(`stdio transport requires 'command' for server ${serverConfig.name}`);
31
+ }
32
+ const transport = new StdioClientTransport({
33
+ command: serverConfig.command,
34
+ args: serverConfig.args || [],
35
+ env: serverConfig.env,
36
+ });
37
+ await client.connect(transport);
38
+ // Store client and config
39
+ this.clients.set(serverConfig.name, client);
40
+ this.serverConfigs.set(serverConfig.name, serverConfig);
41
+ // Discover and cache capabilities
42
+ await this.discoverCapabilities(serverConfig.name);
43
+ }
44
+ catch (error) {
45
+ throw new Error(`Failed to connect to MCP server ${serverConfig.name}: ${error instanceof Error ? error.message : String(error)}`);
46
+ }
47
+ }
48
+ /**
49
+ * Disconnect from an MCP server
50
+ */
51
+ async disconnect(serverName) {
52
+ const client = this.clients.get(serverName);
53
+ if (!client) {
54
+ return;
55
+ }
56
+ try {
57
+ await client.close();
58
+ }
59
+ catch (error) {
60
+ // Log but don't throw - we're disconnecting anyway
61
+ console.error(`Error disconnecting from ${serverName}:`, error);
62
+ }
63
+ this.clients.delete(serverName);
64
+ this.serverConfigs.delete(serverName);
65
+ // Remove cached capabilities
66
+ for (const [key, tool] of this.tools.entries()) {
67
+ if (tool.serverName === serverName) {
68
+ this.tools.delete(key);
69
+ }
70
+ }
71
+ for (const [key, resource] of this.resources.entries()) {
72
+ if (resource.serverName === serverName) {
73
+ this.resources.delete(key);
74
+ }
75
+ }
76
+ for (const [key, prompt] of this.prompts.entries()) {
77
+ if (prompt.serverName === serverName) {
78
+ this.prompts.delete(key);
79
+ }
80
+ }
81
+ }
82
+ /**
83
+ * Disconnect from all MCP servers
84
+ */
85
+ async disconnectAll() {
86
+ const serverNames = Array.from(this.clients.keys());
87
+ await Promise.all(serverNames.map(name => this.disconnect(name)));
88
+ }
89
+ /**
90
+ * Discover and cache capabilities from a connected server
91
+ */
92
+ async discoverCapabilities(serverName) {
93
+ const client = this.clients.get(serverName);
94
+ if (!client) {
95
+ throw new Error(`Not connected to server: ${serverName}`);
96
+ }
97
+ try {
98
+ // Discover tools
99
+ const toolsList = await client.listTools();
100
+ if (toolsList.tools) {
101
+ for (const tool of toolsList.tools) {
102
+ const mcpTool = { ...tool, serverName };
103
+ this.tools.set(`${serverName}::${tool.name}`, mcpTool);
104
+ }
105
+ }
106
+ // Discover resources
107
+ const resourcesList = await client.listResources();
108
+ if (resourcesList.resources) {
109
+ for (const resource of resourcesList.resources) {
110
+ const mcpResource = { ...resource, serverName };
111
+ this.resources.set(`${serverName}::${resource.uri}`, mcpResource);
112
+ }
113
+ }
114
+ // Discover prompts
115
+ const promptsList = await client.listPrompts();
116
+ if (promptsList.prompts) {
117
+ for (const prompt of promptsList.prompts) {
118
+ const mcpPrompt = { ...prompt, serverName };
119
+ this.prompts.set(`${serverName}::${prompt.name}`, mcpPrompt);
120
+ }
121
+ }
122
+ }
123
+ catch (error) {
124
+ throw new Error(`Failed to discover capabilities for ${serverName}: ${error instanceof Error ? error.message : String(error)}`);
125
+ }
126
+ }
127
+ /**
128
+ * Get all available tools from all connected MCP servers
129
+ */
130
+ getAvailableTools() {
131
+ return Array.from(this.tools.values());
132
+ }
133
+ /**
134
+ * Get all available resources from all connected MCP servers
135
+ */
136
+ getAvailableResources() {
137
+ return Array.from(this.resources.values());
138
+ }
139
+ /**
140
+ * Get all available prompts from all connected MCP servers
141
+ */
142
+ getAvailablePrompts() {
143
+ return Array.from(this.prompts.values());
144
+ }
145
+ /**
146
+ * Execute a tool from an MCP server
147
+ */
148
+ async executeMCPTool(toolName, args) {
149
+ // Parse server name from toolName (format: "serverName::actualToolName")
150
+ const parts = toolName.split('::');
151
+ if (parts.length !== 2) {
152
+ throw new Error(`Invalid MCP tool name format: ${toolName}. Expected format: serverName::toolName`);
153
+ }
154
+ const [serverName, actualToolName] = parts;
155
+ const client = this.clients.get(serverName);
156
+ if (!client) {
157
+ throw new Error(`Not connected to MCP server: ${serverName}`);
158
+ }
159
+ const tool = this.tools.get(toolName);
160
+ if (!tool) {
161
+ throw new Error(`Tool not found: ${toolName}`);
162
+ }
163
+ try {
164
+ const result = await client.callTool({
165
+ name: actualToolName,
166
+ arguments: args,
167
+ });
168
+ return result;
169
+ }
170
+ catch (error) {
171
+ throw new Error(`Failed to execute MCP tool ${toolName}: ${error instanceof Error ? error.message : String(error)}`);
172
+ }
173
+ }
174
+ /**
175
+ * Read a resource from an MCP server
176
+ */
177
+ async readResource(resourceUri) {
178
+ // Parse server name from resourceUri (format: "serverName::actualUri")
179
+ const parts = resourceUri.split('::');
180
+ if (parts.length !== 2) {
181
+ throw new Error(`Invalid MCP resource URI format: ${resourceUri}. Expected format: serverName::uri`);
182
+ }
183
+ const [serverName, actualUri] = parts;
184
+ const client = this.clients.get(serverName);
185
+ if (!client) {
186
+ throw new Error(`Not connected to MCP server: ${serverName}`);
187
+ }
188
+ const resource = this.resources.get(resourceUri);
189
+ if (!resource) {
190
+ throw new Error(`Resource not found: ${resourceUri}`);
191
+ }
192
+ try {
193
+ const result = await client.readResource({
194
+ uri: actualUri,
195
+ });
196
+ return result;
197
+ }
198
+ catch (error) {
199
+ throw new Error(`Failed to read MCP resource ${resourceUri}: ${error instanceof Error ? error.message : String(error)}`);
200
+ }
201
+ }
202
+ /**
203
+ * Get a prompt from an MCP server
204
+ */
205
+ async getPrompt(promptName, args) {
206
+ // Parse server name from promptName (format: "serverName::actualPromptName")
207
+ const parts = promptName.split('::');
208
+ if (parts.length !== 2) {
209
+ throw new Error(`Invalid MCP prompt name format: ${promptName}. Expected format: serverName::promptName`);
210
+ }
211
+ const [serverName, actualPromptName] = parts;
212
+ const client = this.clients.get(serverName);
213
+ if (!client) {
214
+ throw new Error(`Not connected to MCP server: ${serverName}`);
215
+ }
216
+ const prompt = this.prompts.get(promptName);
217
+ if (!prompt) {
218
+ throw new Error(`Prompt not found: ${promptName}`);
219
+ }
220
+ try {
221
+ const result = await client.getPrompt({
222
+ name: actualPromptName,
223
+ arguments: args,
224
+ });
225
+ return result;
226
+ }
227
+ catch (error) {
228
+ throw new Error(`Failed to get MCP prompt ${promptName}: ${error instanceof Error ? error.message : String(error)}`);
229
+ }
230
+ }
231
+ /**
232
+ * Get list of connected servers
233
+ */
234
+ getConnectedServers() {
235
+ return Array.from(this.clients.keys());
236
+ }
237
+ /**
238
+ * Check if connected to a specific server
239
+ */
240
+ isConnected(serverName) {
241
+ return this.clients.has(serverName);
242
+ }
243
+ /**
244
+ * Get server configuration
245
+ */
246
+ getServerConfig(serverName) {
247
+ return this.serverConfigs.get(serverName);
248
+ }
249
+ }
250
+ //# sourceMappingURL=mcp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/core/mcp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Multi-mode architecture for XibeCode
3
+ * Defines different operating modes with specific capabilities and restrictions
4
+ */
5
+ export type AgentMode = 'plan' | 'agent' | 'debugger' | 'security' | 'review';
6
+ export type ToolCategory = 'read_only' | 'write_fs' | 'git_read' | 'git_mutation' | 'shell_command' | 'tests' | 'network' | 'context';
7
+ export interface ModeCapabilities {
8
+ /** Human-readable mode name */
9
+ name: string;
10
+ /** Short description of the mode */
11
+ description: string;
12
+ /** Agent persona name (friendly name for this mode) */
13
+ personaName: string;
14
+ /** Agent persona role description */
15
+ personaRole: string;
16
+ /** Tool categories allowed in this mode */
17
+ allowedCategories: ToolCategory[];
18
+ /** Whether this mode can modify files */
19
+ canModify: boolean;
20
+ /** Whether dry-run is enabled by default */
21
+ defaultDryRun: boolean;
22
+ /** Color for TUI display (for chalk) */
23
+ displayColor: string;
24
+ /** Icon/emoji for TUI display */
25
+ icon: string;
26
+ /** Additional system prompt instructions for this mode */
27
+ promptSuffix: string;
28
+ /** Risk tolerance level for operations */
29
+ riskTolerance: 'low' | 'medium' | 'high';
30
+ /** Whether mode transitions require confirmation */
31
+ requiresConfirmation: boolean;
32
+ }
33
+ export declare const MODE_CONFIG: Record<AgentMode, ModeCapabilities>;
34
+ export declare function isToolAllowed(mode: AgentMode, toolName: string): {
35
+ allowed: boolean;
36
+ reason?: string;
37
+ };
38
+ export declare function getAllowedTools(mode: AgentMode): string[];
39
+ export declare function requiresModeTransitionConfirmation(fromMode: AgentMode, toMode: AgentMode): boolean;
40
+ export declare function getModeTransitionMessage(fromMode: AgentMode, toMode: AgentMode): string;
41
+ /**
42
+ * Mode state for tracking in agent session
43
+ */
44
+ export interface ModeState {
45
+ current: AgentMode;
46
+ previous?: AgentMode;
47
+ history: Array<{
48
+ mode: AgentMode;
49
+ timestamp: number;
50
+ reason?: string;
51
+ }>;
52
+ transitionInProgress?: {
53
+ from: AgentMode;
54
+ to: AgentMode;
55
+ awaitingConfirmation: boolean;
56
+ };
57
+ pendingRequest?: ModeTransitionRequest;
58
+ }
59
+ /**
60
+ * Mode transition request
61
+ */
62
+ export interface ModeTransitionRequest {
63
+ targetMode: AgentMode;
64
+ reason: string;
65
+ source: 'model' | 'user' | 'system';
66
+ timestamp: number;
67
+ }
68
+ /**
69
+ * Auto-approval policy for mode escalation
70
+ */
71
+ export type AutoApprovalPolicy = 'never' | 'prompt-only' | 'always-for-debugger' | 'always';
72
+ /**
73
+ * Mode transition policy configuration
74
+ */
75
+ export interface ModeTransitionPolicy {
76
+ autoApprovalPolicy: AutoApprovalPolicy;
77
+ allowAutoEscalation: boolean;
78
+ }
79
+ export declare function createModeState(initialMode?: AgentMode): ModeState;
80
+ export declare function transitionMode(state: ModeState, newMode: AgentMode, reason?: string): ModeState;
81
+ /**
82
+ * Mode Orchestrator - manages mode transitions and policies
83
+ */
84
+ export declare class ModeOrchestrator {
85
+ private policy;
86
+ constructor(policy?: ModeTransitionPolicy);
87
+ /**
88
+ * Request a mode change
89
+ */
90
+ requestModeChange(state: ModeState, targetMode: AgentMode, reason: string, source?: 'model' | 'user' | 'system'): ModeState;
91
+ /**
92
+ * Evaluate if a mode transition should be auto-approved
93
+ */
94
+ evaluateModeChangeRequest(state: ModeState): {
95
+ approved: boolean;
96
+ requiresConfirmation: boolean;
97
+ reason?: string;
98
+ };
99
+ /**
100
+ * Clear pending mode change request
101
+ */
102
+ clearPendingRequest(state: ModeState): ModeState;
103
+ /**
104
+ * Update policy
105
+ */
106
+ updatePolicy(policy: Partial<ModeTransitionPolicy>): void;
107
+ /**
108
+ * Get current policy
109
+ */
110
+ getPolicy(): ModeTransitionPolicy;
111
+ }
112
+ /**
113
+ * Parse mode request from text (looks for [[REQUEST_MODE: ...]] tags)
114
+ */
115
+ export declare function parseModeRequest(text: string): {
116
+ mode: AgentMode;
117
+ reason: string;
118
+ } | null;
119
+ /**
120
+ * Strip mode request tags from text (for display)
121
+ */
122
+ export declare function stripModeRequests(text: string): string;
123
+ export declare function isValidMode(mode: string): mode is AgentMode;
124
+ export declare function getAllModes(): AgentMode[];
125
+ //# sourceMappingURL=modes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modes.d.ts","sourceRoot":"","sources":["../../src/core/modes.ts"],"names":[],"mappings":"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"}