@nils.del/supergrok 1.0.0

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 (59) hide show
  1. package/.env +45 -0
  2. package/.grok/settings.json +13 -0
  3. package/dist/agent/index.d.ts +35 -0
  4. package/dist/agent/index.d.ts.map +1 -0
  5. package/dist/agent/index.js +244 -0
  6. package/dist/agent/index.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +242 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/mcp/client.d.ts +33 -0
  12. package/dist/mcp/client.d.ts.map +1 -0
  13. package/dist/mcp/client.js +134 -0
  14. package/dist/mcp/client.js.map +1 -0
  15. package/dist/mcp/config.d.ts +15 -0
  16. package/dist/mcp/config.d.ts.map +1 -0
  17. package/dist/mcp/config.js +123 -0
  18. package/dist/mcp/config.js.map +1 -0
  19. package/dist/mcp/transports.d.ts +24 -0
  20. package/dist/mcp/transports.d.ts.map +1 -0
  21. package/dist/mcp/transports.js +91 -0
  22. package/dist/mcp/transports.js.map +1 -0
  23. package/dist/tools/bash.d.ts +28 -0
  24. package/dist/tools/bash.d.ts.map +1 -0
  25. package/dist/tools/bash.js +70 -0
  26. package/dist/tools/bash.js.map +1 -0
  27. package/dist/tools/index.d.ts +77 -0
  28. package/dist/tools/index.d.ts.map +1 -0
  29. package/dist/tools/index.js +80 -0
  30. package/dist/tools/index.js.map +1 -0
  31. package/dist/tools/text-editor.d.ts +69 -0
  32. package/dist/tools/text-editor.d.ts.map +1 -0
  33. package/dist/tools/text-editor.js +178 -0
  34. package/dist/tools/text-editor.js.map +1 -0
  35. package/dist/tools/types.d.ts +14 -0
  36. package/dist/tools/types.d.ts.map +1 -0
  37. package/dist/tools/types.js +2 -0
  38. package/dist/tools/types.js.map +1 -0
  39. package/dist/ui/readline-ui.d.ts +32 -0
  40. package/dist/ui/readline-ui.d.ts.map +1 -0
  41. package/dist/ui/readline-ui.js +256 -0
  42. package/dist/ui/readline-ui.js.map +1 -0
  43. package/dist/utils/settings.d.ts +20 -0
  44. package/dist/utils/settings.d.ts.map +1 -0
  45. package/dist/utils/settings.js +101 -0
  46. package/dist/utils/settings.js.map +1 -0
  47. package/package.json +51 -0
  48. package/src/agent/index.ts +302 -0
  49. package/src/index.ts +275 -0
  50. package/src/mcp/client.ts +178 -0
  51. package/src/mcp/config.ts +149 -0
  52. package/src/mcp/transports.ts +142 -0
  53. package/src/tools/bash.ts +84 -0
  54. package/src/tools/index.ts +91 -0
  55. package/src/tools/text-editor.ts +222 -0
  56. package/src/tools/types.ts +14 -0
  57. package/src/ui/readline-ui.ts +294 -0
  58. package/src/utils/settings.ts +129 -0
  59. package/tsconfig.json +20 -0
package/.env ADDED
@@ -0,0 +1,45 @@
1
+ # Active Model - Options: "grok", "claude", "llama-finetuned"
2
+ ACTIVE_MODEL=llama-finetuned
3
+
4
+ # Anthropic API
5
+ ANTHROPIC_API_KEY=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
6
+
7
+ # xAI (Grok) API
8
+ XAI_API_KEY=xai-RUaYXtYkmL0llOyRNtks4nfI2bW9Z0fhxu3qyk4xiU2enWJWXYjYyTswath5zTfwMu0agziSp836bLW3
9
+
10
+ # Telegram Bot
11
+ TELEGRAM_BOT_TOKEN=8568943279:AAFWxdPm10zlVU5D2VfbOeIfwe1IeYKixKM
12
+ TELEGRAM_ADMIN_CHAT_IDS=-5085659125
13
+
14
+ # Clerk API
15
+ CLERK_SECRET_KEY=sk_test_iX9l4S8vM4pvLrqqvoHZyUJKgQhn2bI77kQwveLBJB
16
+
17
+ GOOGLE_API_KEY=AIzaSyDuB2WadqUDqGHcXNQ15txR_Wwd34zqy8U
18
+
19
+
20
+ # Infomaniak SMTP
21
+ INFOMANIAK_SMTP_HOST=mail.infomaniak.com
22
+ INFOMANIAK_SMTP_PORT=587
23
+ INFOMANIAK_SMTP_USER=contact@clashware.com
24
+ INFOMANIAK_SMTP_PASSWORD=tP6kgBYHXRcCg8ue
25
+ INFOMANIAK_FROM_EMAIL=contact@clashware.com
26
+ INFOMANIAK_FROM_NAME=Clashware
27
+
28
+ # Tavily for web search
29
+ TAVILY_API_KEY=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
30
+
31
+ # Unsubscribe settings
32
+ UNSUBSCRIBE_BASE_URL=https://bonega.ai/api/email/unsubscribe
33
+ UNSUBSCRIBE_SECRET=RArdl3vxpzgrS2pJ/3c3ekq1oY61Ld5Of7H4DYbO4p8=
34
+
35
+ # Hugging Face (for model upload)
36
+ HF_TOKEN=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
37
+
38
+ # RunPod Serverless (fine-tuned Llama model)
39
+ RUNPOD_API_KEY=rpa_YQ97KFWORER2CS8H2JN4XRPXRX425ZCO4Q6GR98Oyr08hp
40
+ RUNPOD_ENDPOINT_ID=x7ftmgzf7lk9wk
41
+ RUNPOD_ENDPOINT_URL=https://api.runpod.ai/v2/x7ftmgzf7lk9wk/openai/v1
42
+ RUNPOD_MODEL_NAME=clashware/mail-agent-llama
43
+
44
+ # UploadThing (for hosting email screenshots)
45
+ UPLOADTHING_TOKEN='eyJhcGlLZXkiOiJza19saXZlX2M4ZTNhMWI5MDk1Y2E5NjlkNjgzZDIxZGM4ZjNlNjQ4Njg1NzMxZjYxY2NkMmY0ZWJkYjFkNmE0MWFkNzJhY2IiLCJhcHBJZCI6Imh6NTlkemF5a3ciLCJyZWdpb25zIjpbInNlYTEiXX0='
@@ -0,0 +1,13 @@
1
+ {
2
+ "mcpServers": {
3
+ "playwright": {
4
+ "name": "playwright",
5
+ "transport": {
6
+ "type": "stdio",
7
+ "command": "npx",
8
+ "args": ["@playwright/mcp@latest"],
9
+ "env": {}
10
+ }
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,35 @@
1
+ import { ToolResult, ToolCall } from '../tools/index.js';
2
+ export interface ChatEntry {
3
+ type: 'user' | 'assistant' | 'tool_call' | 'tool_result';
4
+ content: string;
5
+ timestamp: Date;
6
+ toolCall?: ToolCall;
7
+ toolCalls?: ToolCall[];
8
+ toolResult?: ToolResult;
9
+ isStreaming?: boolean;
10
+ }
11
+ export interface StreamChunk {
12
+ type: 'content' | 'tool_calls' | 'tool_result' | 'token_count' | 'done';
13
+ content?: string;
14
+ toolCalls?: ToolCall[];
15
+ toolCall?: ToolCall;
16
+ toolResult?: ToolResult;
17
+ tokenCount?: number;
18
+ }
19
+ export declare class GrokAgent {
20
+ private client;
21
+ private model;
22
+ private messages;
23
+ private maxToolRounds;
24
+ private abortController;
25
+ constructor(apiKey: string, baseURL?: string, model?: string, maxToolRounds?: number);
26
+ getCurrentModel(): string;
27
+ setModel(model: string): void;
28
+ abortCurrentOperation(): void;
29
+ executeBashCommand(command: string): Promise<ToolResult>;
30
+ processUserMessageStream(userMessage: string): AsyncGenerator<StreamChunk>;
31
+ processUserMessage(userMessage: string): Promise<ChatEntry[]>;
32
+ clearHistory(): void;
33
+ shutdown(): Promise<void>;
34
+ }
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgC,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIvF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,aAAa,GAAG,aAAa,GAAG,MAAM,CAAC;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAmBD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAgC;gBAGrD,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,aAAa,GAAE,MAAY;IAwB7B,eAAe,IAAI,MAAM;IAIzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,qBAAqB,IAAI,IAAI;IAOvB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKvD,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC;IAuI3E,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA4DnE,YAAY,IAAI,IAAI;IAKd,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAIhC"}
@@ -0,0 +1,244 @@
1
+ import OpenAI from 'openai';
2
+ import { getAllTools, executeToolCall } from '../tools/index.js';
3
+ import { loadCustomInstructions, getCurrentModel } from '../utils/settings.js';
4
+ import { getMCPManager } from '../mcp/client.js';
5
+ const DEFAULT_SYSTEM_PROMPT = `You are Grok, a powerful AI assistant running in a command-line interface.
6
+
7
+ You have access to various tools to help users with their tasks:
8
+ - bash: Execute shell commands
9
+ - str_replace_editor: View and edit files (view, create, str_replace, insert)
10
+ - MCP tools: Additional capabilities from connected Model Context Protocol servers
11
+
12
+ Guidelines:
13
+ 1. Be concise but helpful
14
+ 2. Use tools when appropriate to accomplish tasks
15
+ 3. When editing files, first view the file to understand its structure
16
+ 4. For complex changes, break them into smaller steps
17
+ 5. Always confirm destructive operations
18
+ 6. Provide clear feedback about what you're doing
19
+
20
+ Current working directory: ${process.cwd()}`;
21
+ export class GrokAgent {
22
+ client;
23
+ model;
24
+ messages = [];
25
+ maxToolRounds;
26
+ abortController = null;
27
+ constructor(apiKey, baseURL, model, maxToolRounds = 400) {
28
+ this.client = new OpenAI({
29
+ apiKey,
30
+ baseURL: baseURL || 'https://api.x.ai/v1'
31
+ });
32
+ this.model = model || getCurrentModel();
33
+ this.maxToolRounds = maxToolRounds;
34
+ // Initialize system prompt
35
+ const customInstructions = loadCustomInstructions();
36
+ let systemPrompt = DEFAULT_SYSTEM_PROMPT;
37
+ if (customInstructions) {
38
+ systemPrompt += `\n\nCustom Instructions:\n${customInstructions}`;
39
+ }
40
+ this.messages.push({
41
+ role: 'system',
42
+ content: systemPrompt
43
+ });
44
+ }
45
+ getCurrentModel() {
46
+ return this.model;
47
+ }
48
+ setModel(model) {
49
+ this.model = model;
50
+ }
51
+ abortCurrentOperation() {
52
+ if (this.abortController) {
53
+ this.abortController.abort();
54
+ this.abortController = null;
55
+ }
56
+ }
57
+ async executeBashCommand(command) {
58
+ const { executeBashCommand } = await import('../tools/bash.js');
59
+ return executeBashCommand({ command });
60
+ }
61
+ async *processUserMessageStream(userMessage) {
62
+ this.abortController = new AbortController();
63
+ this.messages.push({
64
+ role: 'user',
65
+ content: userMessage
66
+ });
67
+ let toolRounds = 0;
68
+ while (toolRounds < this.maxToolRounds) {
69
+ const tools = await getAllTools();
70
+ try {
71
+ const stream = await this.client.chat.completions.create({
72
+ model: this.model,
73
+ messages: this.messages,
74
+ tools: tools,
75
+ stream: true
76
+ }, { signal: this.abortController?.signal });
77
+ let currentContent = '';
78
+ let toolCalls = [];
79
+ let currentToolCallId = '';
80
+ let currentToolCallName = '';
81
+ let currentToolCallArgs = '';
82
+ for await (const chunk of stream) {
83
+ const delta = chunk.choices[0]?.delta;
84
+ // Handle content
85
+ if (delta?.content) {
86
+ currentContent += delta.content;
87
+ yield { type: 'content', content: delta.content };
88
+ }
89
+ // Handle tool calls
90
+ if (delta?.tool_calls) {
91
+ for (const tc of delta.tool_calls) {
92
+ if (tc.id) {
93
+ if (currentToolCallId && currentToolCallName) {
94
+ toolCalls.push({
95
+ id: currentToolCallId,
96
+ type: 'function',
97
+ function: {
98
+ name: currentToolCallName,
99
+ arguments: currentToolCallArgs
100
+ }
101
+ });
102
+ }
103
+ currentToolCallId = tc.id;
104
+ currentToolCallName = tc.function?.name || '';
105
+ currentToolCallArgs = tc.function?.arguments || '';
106
+ }
107
+ else {
108
+ if (tc.function?.name)
109
+ currentToolCallName += tc.function.name;
110
+ if (tc.function?.arguments)
111
+ currentToolCallArgs += tc.function.arguments;
112
+ }
113
+ }
114
+ }
115
+ // Token count (approximate from stream)
116
+ if (chunk.usage?.total_tokens) {
117
+ yield { type: 'token_count', tokenCount: chunk.usage.total_tokens };
118
+ }
119
+ }
120
+ // Push last tool call if any
121
+ if (currentToolCallId && currentToolCallName) {
122
+ toolCalls.push({
123
+ id: currentToolCallId,
124
+ type: 'function',
125
+ function: {
126
+ name: currentToolCallName,
127
+ arguments: currentToolCallArgs
128
+ }
129
+ });
130
+ }
131
+ // If we have tool calls, execute them
132
+ if (toolCalls.length > 0) {
133
+ // Add assistant message with tool calls
134
+ this.messages.push({
135
+ role: 'assistant',
136
+ content: currentContent || null,
137
+ tool_calls: toolCalls.map(tc => ({
138
+ id: tc.id,
139
+ type: 'function',
140
+ function: {
141
+ name: tc.function.name,
142
+ arguments: tc.function.arguments
143
+ }
144
+ }))
145
+ });
146
+ yield { type: 'tool_calls', toolCalls };
147
+ // Execute each tool call
148
+ for (const toolCall of toolCalls) {
149
+ const result = await executeToolCall(toolCall);
150
+ // Add tool result to messages
151
+ this.messages.push({
152
+ role: 'tool',
153
+ tool_call_id: toolCall.id,
154
+ content: result.success ? (result.output || 'Success') : (result.error || 'Error')
155
+ });
156
+ yield { type: 'tool_result', toolCall, toolResult: result };
157
+ }
158
+ toolRounds++;
159
+ // Continue the loop to let the model respond to tool results
160
+ }
161
+ else {
162
+ // No tool calls, we're done
163
+ if (currentContent) {
164
+ this.messages.push({
165
+ role: 'assistant',
166
+ content: currentContent
167
+ });
168
+ }
169
+ break;
170
+ }
171
+ }
172
+ catch (error) {
173
+ if (error.name === 'AbortError') {
174
+ yield { type: 'content', content: '\n[Operation aborted]' };
175
+ break;
176
+ }
177
+ throw error;
178
+ }
179
+ }
180
+ yield { type: 'done' };
181
+ this.abortController = null;
182
+ }
183
+ async processUserMessage(userMessage) {
184
+ const entries = [];
185
+ entries.push({
186
+ type: 'user',
187
+ content: userMessage,
188
+ timestamp: new Date()
189
+ });
190
+ let assistantContent = '';
191
+ for await (const chunk of this.processUserMessageStream(userMessage)) {
192
+ switch (chunk.type) {
193
+ case 'content':
194
+ if (chunk.content) {
195
+ assistantContent += chunk.content;
196
+ }
197
+ break;
198
+ case 'tool_calls':
199
+ if (assistantContent) {
200
+ entries.push({
201
+ type: 'assistant',
202
+ content: assistantContent,
203
+ timestamp: new Date(),
204
+ toolCalls: chunk.toolCalls
205
+ });
206
+ assistantContent = '';
207
+ }
208
+ break;
209
+ case 'tool_result':
210
+ if (chunk.toolCall && chunk.toolResult) {
211
+ entries.push({
212
+ type: 'tool_result',
213
+ content: chunk.toolResult.success
214
+ ? (chunk.toolResult.output || 'Success')
215
+ : (chunk.toolResult.error || 'Error'),
216
+ timestamp: new Date(),
217
+ toolCall: chunk.toolCall,
218
+ toolResult: chunk.toolResult
219
+ });
220
+ }
221
+ break;
222
+ case 'done':
223
+ if (assistantContent) {
224
+ entries.push({
225
+ type: 'assistant',
226
+ content: assistantContent,
227
+ timestamp: new Date()
228
+ });
229
+ }
230
+ break;
231
+ }
232
+ }
233
+ return entries;
234
+ }
235
+ clearHistory() {
236
+ // Keep only the system message
237
+ this.messages = this.messages.slice(0, 1);
238
+ }
239
+ async shutdown() {
240
+ const mcpManager = getMCPManager();
241
+ await mcpManager.shutdown();
242
+ }
243
+ }
244
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,242 @@
1
+ #!/usr/bin/env node
2
+ import { program } from 'commander';
3
+ import * as dotenv from 'dotenv';
4
+ import chalk from 'chalk';
5
+ import { GrokAgent } from './agent/index.js';
6
+ import { runReadlineUI } from './ui/readline-ui.js';
7
+ import { getApiKey, getBaseURL, getCurrentModel, saveUserSettings, loadUserSettings } from './utils/settings.js';
8
+ // Load environment variables
9
+ dotenv.config();
10
+ // Handle uncaught exceptions
11
+ process.on('uncaughtException', (error) => {
12
+ console.error(chalk.red('Uncaught exception:'), error.message);
13
+ process.exit(1);
14
+ });
15
+ process.on('unhandledRejection', (reason) => {
16
+ console.error(chalk.red('Unhandled rejection:'), reason?.message || reason);
17
+ process.exit(1);
18
+ });
19
+ // Headless mode processing
20
+ async function processPromptHeadless(prompt, apiKey, baseURL, model, maxToolRounds) {
21
+ try {
22
+ const agent = new GrokAgent(apiKey, baseURL, model, maxToolRounds);
23
+ console.log(chalk.gray('Processing...'));
24
+ console.log();
25
+ for await (const chunk of agent.processUserMessageStream(prompt)) {
26
+ switch (chunk.type) {
27
+ case 'content':
28
+ if (chunk.content) {
29
+ process.stdout.write(chunk.content);
30
+ }
31
+ break;
32
+ case 'tool_calls':
33
+ if (chunk.toolCalls) {
34
+ console.log();
35
+ for (const tc of chunk.toolCalls) {
36
+ console.log(chalk.blue(`⚡ ${tc.function.name}`));
37
+ }
38
+ }
39
+ break;
40
+ case 'tool_result':
41
+ if (chunk.toolResult) {
42
+ if (chunk.toolResult.success) {
43
+ console.log(chalk.green('✓'), chalk.gray(chunk.toolResult.output?.substring(0, 200) || 'Success'));
44
+ }
45
+ else {
46
+ console.log(chalk.red('✗'), chunk.toolResult.error);
47
+ }
48
+ }
49
+ break;
50
+ case 'done':
51
+ console.log();
52
+ break;
53
+ }
54
+ }
55
+ await agent.shutdown();
56
+ }
57
+ catch (error) {
58
+ console.error(chalk.red('Error:'), error.message);
59
+ process.exit(1);
60
+ }
61
+ }
62
+ program
63
+ .name('grok-fixed')
64
+ .description('Grok CLI (Fixed Edition) - Works properly with MCP on Linux. No Ink flickering issues.')
65
+ .version('1.0.0')
66
+ .argument('[message...]', 'Initial message to send to Grok')
67
+ .option('-d, --directory <dir>', 'Set working directory', process.cwd())
68
+ .option('-k, --api-key <key>', 'Grok API key (or set GROK_API_KEY env var)')
69
+ .option('-u, --base-url <url>', 'Grok API base URL (or set GROK_BASE_URL env var)')
70
+ .option('-m, --model <model>', 'AI model to use (or set GROK_MODEL env var)')
71
+ .option('-p, --prompt <prompt>', 'Process a single prompt and exit (headless mode)')
72
+ .option('--max-tool-rounds <rounds>', 'Maximum tool execution rounds (default: 400)', '400')
73
+ .action(async (message, options) => {
74
+ // Change working directory if specified
75
+ if (options.directory) {
76
+ try {
77
+ process.chdir(options.directory);
78
+ }
79
+ catch (error) {
80
+ console.error(chalk.red(`Error changing directory: ${error.message}`));
81
+ process.exit(1);
82
+ }
83
+ }
84
+ try {
85
+ // Get API key
86
+ const apiKey = options.apiKey || getApiKey();
87
+ const baseURL = options.baseUrl || getBaseURL();
88
+ const model = options.model || getCurrentModel();
89
+ const maxToolRounds = parseInt(options.maxToolRounds) || 400;
90
+ if (!apiKey) {
91
+ console.error(chalk.red('Error: API key required.'));
92
+ console.error(chalk.gray('Set GROK_API_KEY environment variable, use --api-key flag,'));
93
+ console.error(chalk.gray('or add "apiKey" to ~/.grok/user-settings.json'));
94
+ process.exit(1);
95
+ }
96
+ // Save API key if provided via command line
97
+ if (options.apiKey) {
98
+ const settings = loadUserSettings();
99
+ settings.apiKey = options.apiKey;
100
+ if (options.baseUrl) {
101
+ settings.baseURL = options.baseUrl;
102
+ }
103
+ saveUserSettings(settings);
104
+ console.log(chalk.green('✓ API key saved to ~/.grok/user-settings.json'));
105
+ }
106
+ // Headless mode
107
+ if (options.prompt) {
108
+ await processPromptHeadless(options.prompt, apiKey, baseURL, model, maxToolRounds);
109
+ return;
110
+ }
111
+ // Interactive mode
112
+ const agent = new GrokAgent(apiKey, baseURL, model, maxToolRounds);
113
+ const initialMessage = Array.isArray(message) ? message.join(' ') : message;
114
+ await runReadlineUI(agent, initialMessage || undefined);
115
+ }
116
+ catch (error) {
117
+ console.error(chalk.red('Error:'), error.message);
118
+ process.exit(1);
119
+ }
120
+ });
121
+ // MCP subcommand
122
+ const mcpCommand = program
123
+ .command('mcp')
124
+ .description('Manage MCP (Model Context Protocol) servers');
125
+ mcpCommand
126
+ .command('list')
127
+ .description('List configured MCP servers')
128
+ .action(async () => {
129
+ const { loadMCPConfig } = await import('./mcp/config.js');
130
+ const config = loadMCPConfig();
131
+ if (config.servers.length === 0) {
132
+ console.log(chalk.gray('No MCP servers configured.'));
133
+ console.log(chalk.gray('Use "grok-fixed mcp add" to add a server.'));
134
+ return;
135
+ }
136
+ console.log(chalk.cyan('Configured MCP Servers:'));
137
+ for (const server of config.servers) {
138
+ console.log(chalk.white(` • ${server.name}`));
139
+ console.log(chalk.gray(` Transport: ${server.transport.type}`));
140
+ if (server.transport.type === 'stdio') {
141
+ console.log(chalk.gray(` Command: ${server.transport.command} ${(server.transport.args || []).join(' ')}`));
142
+ }
143
+ else if ('url' in server.transport) {
144
+ console.log(chalk.gray(` URL: ${server.transport.url}`));
145
+ }
146
+ }
147
+ });
148
+ mcpCommand
149
+ .command('add <name>')
150
+ .description('Add a new MCP server')
151
+ .option('-t, --transport <type>', 'Transport type (stdio, http, sse)', 'stdio')
152
+ .option('-c, --command <command>', 'Command to run (for stdio transport)')
153
+ .option('-a, --args <args...>', 'Arguments for the command')
154
+ .option('-u, --url <url>', 'URL (for http/sse transport)')
155
+ .option('-e, --env <env...>', 'Environment variables (KEY=value format)')
156
+ .action(async (name, options) => {
157
+ const { saveMCPServerConfig } = await import('./mcp/config.js');
158
+ let transport;
159
+ if (options.transport === 'stdio') {
160
+ if (!options.command) {
161
+ console.error(chalk.red('Error: --command is required for stdio transport'));
162
+ process.exit(1);
163
+ }
164
+ const env = {};
165
+ if (options.env) {
166
+ for (const e of options.env) {
167
+ const [key, ...valueParts] = e.split('=');
168
+ env[key] = valueParts.join('=');
169
+ }
170
+ }
171
+ transport = {
172
+ type: 'stdio',
173
+ command: options.command,
174
+ args: options.args || [],
175
+ env
176
+ };
177
+ }
178
+ else if (options.transport === 'http' || options.transport === 'sse') {
179
+ if (!options.url) {
180
+ console.error(chalk.red(`Error: --url is required for ${options.transport} transport`));
181
+ process.exit(1);
182
+ }
183
+ transport = {
184
+ type: options.transport,
185
+ url: options.url
186
+ };
187
+ }
188
+ else {
189
+ console.error(chalk.red(`Error: Unknown transport type: ${options.transport}`));
190
+ process.exit(1);
191
+ }
192
+ try {
193
+ saveMCPServerConfig({ name, transport });
194
+ console.log(chalk.green(`✓ MCP server "${name}" added successfully`));
195
+ }
196
+ catch (error) {
197
+ console.error(chalk.red(`Error: ${error.message}`));
198
+ process.exit(1);
199
+ }
200
+ });
201
+ mcpCommand
202
+ .command('remove <name>')
203
+ .description('Remove an MCP server')
204
+ .action(async (name) => {
205
+ const { removeMCPServerConfig } = await import('./mcp/config.js');
206
+ if (removeMCPServerConfig(name)) {
207
+ console.log(chalk.green(`✓ MCP server "${name}" removed`));
208
+ }
209
+ else {
210
+ console.log(chalk.yellow(`Server "${name}" not found`));
211
+ }
212
+ });
213
+ mcpCommand
214
+ .command('test [name]')
215
+ .description('Test connection to MCP server(s)')
216
+ .action(async (name) => {
217
+ const { loadMCPConfig } = await import('./mcp/config.js');
218
+ const { getMCPManager } = await import('./mcp/client.js');
219
+ const config = loadMCPConfig();
220
+ const serversToTest = name
221
+ ? config.servers.filter(s => s.name === name)
222
+ : config.servers;
223
+ if (serversToTest.length === 0) {
224
+ console.log(chalk.yellow('No servers to test.'));
225
+ return;
226
+ }
227
+ const mcpManager = getMCPManager();
228
+ for (const server of serversToTest) {
229
+ process.stdout.write(chalk.gray(`Testing ${server.name}... `));
230
+ try {
231
+ await mcpManager.addServer(server);
232
+ const tools = mcpManager.getTools().filter(t => t.serverName === server.name);
233
+ console.log(chalk.green(`✓ Connected (${tools.length} tools)`));
234
+ }
235
+ catch (error) {
236
+ console.log(chalk.red(`✗ Failed: ${error.message}`));
237
+ }
238
+ }
239
+ await mcpManager.shutdown();
240
+ });
241
+ program.parse();
242
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEjH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,6BAA6B;AAC7B,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAW,EAAE,EAAE;IAC/C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,MAAM,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC;IAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,2BAA2B;AAC3B,KAAK,UAAU,qBAAqB,CAClC,MAAc,EACd,MAAc,EACd,OAAgB,EAChB,KAAc,EACd,aAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QAEnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC;YACjE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,SAAS;oBACZ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACtC,CAAC;oBACD,MAAM;gBAER,KAAK,YAAY;oBACf,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;wBACpB,OAAO,CAAC,GAAG,EAAE,CAAC;wBACd,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;4BACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;wBACnD,CAAC;oBACH,CAAC;oBACD,MAAM;gBAER,KAAK,aAAa;oBAChB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;wBACrB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;4BAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;wBACrG,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;wBACtD,CAAC;oBACH,CAAC;oBACD,MAAM;gBAER,KAAK,MAAM;oBACT,OAAO,CAAC,GAAG,EAAE,CAAC;oBACd,MAAM;YACV,CAAC;QACH,CAAC;QAED,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,wFAAwF,CAAC;KACrG,OAAO,CAAC,OAAO,CAAC;KAChB,QAAQ,CAAC,cAAc,EAAE,iCAAiC,CAAC;KAC3D,MAAM,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KACvE,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,sBAAsB,EAAE,kDAAkD,CAAC;KAClF,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;KAC5E,MAAM,CAAC,uBAAuB,EAAE,kDAAkD,CAAC;KACnF,MAAM,CAAC,4BAA4B,EAAE,8CAA8C,EAAE,KAAK,CAAC;KAC3F,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACjC,wCAAwC;IACxC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,cAAc;QACd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC;QACjD,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC;QAE7D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC,CAAC;YACxF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,4CAA4C;QAC5C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;YACpC,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YACjC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YACrC,CAAC;YACD,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,gBAAgB;QAChB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,qBAAqB,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;YACnF,OAAO;QACT,CAAC;QAED,mBAAmB;QACnB,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QACnE,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAE5E,MAAM,aAAa,CAAC,KAAK,EAAE,cAAc,IAAI,SAAS,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,iBAAiB;AACjB,MAAM,UAAU,GAAG,OAAO;KACvB,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,6CAA6C,CAAC,CAAC;AAE9D,UAAU;KACP,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/B,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACnD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACjH,CAAC;aAAM,IAAI,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,UAAU;KACP,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,wBAAwB,EAAE,mCAAmC,EAAE,OAAO,CAAC;KAC9E,MAAM,CAAC,yBAAyB,EAAE,sCAAsC,CAAC;KACzE,MAAM,CAAC,sBAAsB,EAAE,2BAA2B,CAAC;KAC3D,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;KACzD,MAAM,CAAC,oBAAoB,EAAE,0CAA0C,CAAC;KACxE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9B,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAEhE,IAAI,SAAc,CAAC;IAEnB,IAAI,OAAO,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,SAAS,GAAG;YACV,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;YACxB,GAAG;SACJ,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,CAAC,SAAS,KAAK,MAAM,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,OAAO,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC;YACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,SAAS,GAAG;YACV,IAAI,EAAE,OAAO,CAAC,SAAS;YACvB,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,mBAAmB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,IAAI,sBAAsB,CAAC,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,UAAU;KACP,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAElE,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,IAAI,WAAW,CAAC,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,aAAa,CAAC,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,UAAU;KACP,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC1D,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE1D,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,aAAa,GAAG,IAAI;QACxB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;QAC7C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IAEnB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;QAE/D,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ import { EventEmitter } from "events";
3
+ import { TransportType, TransportConfig } from "./transports.js";
4
+ export interface MCPServerConfig {
5
+ name: string;
6
+ transport: TransportConfig;
7
+ command?: string;
8
+ args?: string[];
9
+ env?: Record<string, string>;
10
+ }
11
+ export interface MCPTool {
12
+ name: string;
13
+ description: string;
14
+ inputSchema: any;
15
+ serverName: string;
16
+ }
17
+ export declare class MCPManager extends EventEmitter {
18
+ private clients;
19
+ private transports;
20
+ private tools;
21
+ private initPromise;
22
+ addServer(config: MCPServerConfig): Promise<void>;
23
+ removeServer(serverName: string): Promise<void>;
24
+ callTool(toolName: string, arguments_: any): Promise<CallToolResult>;
25
+ getTools(): MCPTool[];
26
+ getServers(): string[];
27
+ shutdown(): Promise<void>;
28
+ getTransportType(serverName: string): TransportType | undefined;
29
+ ensureServersInitialized(): Promise<void>;
30
+ private initializeServers;
31
+ }
32
+ export declare function getMCPManager(): MCPManager;
33
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAiC,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEhG,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,UAAU,CAAwC;IAC1D,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,WAAW,CAA8B;IAE3C,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDjD,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC;IA0B1E,QAAQ,IAAI,OAAO,EAAE;IAIrB,UAAU,IAAI,MAAM,EAAE;IAIhB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAKzD,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;YAajC,iBAAiB;CAchC;AAKD,wBAAgB,aAAa,IAAI,UAAU,CAK1C"}