@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readline-ui.js","sourceRoot":"","sources":["../../src/ui/readline-ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface UserSettings {
2
+ apiKey?: string;
3
+ baseURL?: string;
4
+ defaultModel?: string;
5
+ models?: string[];
6
+ }
7
+ export interface ProjectSettings {
8
+ model?: string;
9
+ mcpServers?: Record<string, any>;
10
+ }
11
+ export declare function loadUserSettings(): UserSettings;
12
+ export declare function loadProjectSettings(): ProjectSettings;
13
+ export declare function saveUserSettings(settings: UserSettings): void;
14
+ export declare function saveProjectSettings(settings: ProjectSettings): void;
15
+ export declare function getApiKey(): string | undefined;
16
+ export declare function getBaseURL(): string;
17
+ export declare function getCurrentModel(): string;
18
+ export declare function getAvailableModels(): string[];
19
+ export declare function loadCustomInstructions(): string | null;
20
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/utils/settings.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAUD,wBAAgB,gBAAgB,IAAI,YAAY,CAY/C;AAED,wBAAgB,mBAAmB,IAAI,eAAe,CAYrD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAS7D;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CASnE;AAED,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAE9C;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAWxC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAS7C;AAED,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAsBtD"}
@@ -0,0 +1,101 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ function getUserSettingsPath() {
5
+ return path.join(os.homedir(), '.grok', 'user-settings.json');
6
+ }
7
+ function getProjectSettingsPath() {
8
+ return path.join(process.cwd(), '.grok', 'settings.json');
9
+ }
10
+ export function loadUserSettings() {
11
+ const settingsPath = getUserSettingsPath();
12
+ if (!fs.existsSync(settingsPath)) {
13
+ return {};
14
+ }
15
+ try {
16
+ return JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
17
+ }
18
+ catch (error) {
19
+ return {};
20
+ }
21
+ }
22
+ export function loadProjectSettings() {
23
+ const settingsPath = getProjectSettingsPath();
24
+ if (!fs.existsSync(settingsPath)) {
25
+ return {};
26
+ }
27
+ try {
28
+ return JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
29
+ }
30
+ catch (error) {
31
+ return {};
32
+ }
33
+ }
34
+ export function saveUserSettings(settings) {
35
+ const settingsPath = getUserSettingsPath();
36
+ const settingsDir = path.dirname(settingsPath);
37
+ if (!fs.existsSync(settingsDir)) {
38
+ fs.mkdirSync(settingsDir, { recursive: true });
39
+ }
40
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
41
+ }
42
+ export function saveProjectSettings(settings) {
43
+ const settingsPath = getProjectSettingsPath();
44
+ const settingsDir = path.dirname(settingsPath);
45
+ if (!fs.existsSync(settingsDir)) {
46
+ fs.mkdirSync(settingsDir, { recursive: true });
47
+ }
48
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
49
+ }
50
+ export function getApiKey() {
51
+ return process.env.GROK_API_KEY || loadUserSettings().apiKey;
52
+ }
53
+ export function getBaseURL() {
54
+ return process.env.GROK_BASE_URL || loadUserSettings().baseURL || 'https://api.x.ai/v1';
55
+ }
56
+ export function getCurrentModel() {
57
+ const envModel = process.env.GROK_MODEL;
58
+ if (envModel)
59
+ return envModel;
60
+ const projectSettings = loadProjectSettings();
61
+ if (projectSettings.model)
62
+ return projectSettings.model;
63
+ const userSettings = loadUserSettings();
64
+ if (userSettings.defaultModel)
65
+ return userSettings.defaultModel;
66
+ return 'grok-3-fast';
67
+ }
68
+ export function getAvailableModels() {
69
+ const userSettings = loadUserSettings();
70
+ return userSettings.models || [
71
+ 'grok-code-fast-1',
72
+ 'grok-4-latest',
73
+ 'grok-3-latest',
74
+ 'grok-3-fast',
75
+ 'grok-3-mini-fast'
76
+ ];
77
+ }
78
+ export function loadCustomInstructions() {
79
+ // Check project-level instructions first
80
+ const projectPath = path.join(process.cwd(), '.grok', 'GROK.md');
81
+ if (fs.existsSync(projectPath)) {
82
+ try {
83
+ return fs.readFileSync(projectPath, 'utf-8');
84
+ }
85
+ catch (error) {
86
+ // Ignore errors
87
+ }
88
+ }
89
+ // Fall back to global instructions
90
+ const globalPath = path.join(os.homedir(), '.grok', 'GROK.md');
91
+ if (fs.existsSync(globalPath)) {
92
+ try {
93
+ return fs.readFileSync(globalPath, 'utf-8');
94
+ }
95
+ catch (error) {
96
+ // Ignore errors
97
+ }
98
+ }
99
+ return null;
100
+ }
101
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/utils/settings.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@nils.del/supergrok",
3
+ "version": "1.0.0",
4
+ "description": "A fixed version of Grok CLI that works properly with MCP on Linux - no Ink flickering issues",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/index.d.ts"
11
+ }
12
+ },
13
+ "bin": {
14
+ "supergrok": "dist/index.js"
15
+ },
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "dev": "bun run src/index.ts",
19
+ "start": "node dist/index.js",
20
+ "typecheck": "tsc --noEmit"
21
+ },
22
+ "keywords": [
23
+ "cli",
24
+ "agent",
25
+ "grok",
26
+ "ai",
27
+ "mcp",
28
+ "linux"
29
+ ],
30
+ "author": "Fixed by Claude",
31
+ "license": "MIT",
32
+ "dependencies": {
33
+ "@modelcontextprotocol/sdk": "^1.17.0",
34
+ "axios": "^1.7.0",
35
+ "chalk": "^5.3.0",
36
+ "commander": "^12.0.0",
37
+ "dotenv": "^16.4.0",
38
+ "fs-extra": "^11.2.0",
39
+ "openai": "^5.10.1",
40
+ "readline": "^1.3.0",
41
+ "tiktoken": "^1.0.21"
42
+ },
43
+ "devDependencies": {
44
+ "@types/fs-extra": "^11.0.2",
45
+ "@types/node": "^20.8.0",
46
+ "typescript": "^5.3.3"
47
+ },
48
+ "engines": {
49
+ "node": ">=18.0.0"
50
+ }
51
+ }
@@ -0,0 +1,302 @@
1
+ import OpenAI from 'openai';
2
+ import type { ChatCompletionMessageParam, ChatCompletionTool } from 'openai/resources/chat';
3
+ import { getAllTools, executeToolCall, ToolResult, ToolCall } from '../tools/index.js';
4
+ import { loadCustomInstructions, getCurrentModel } from '../utils/settings.js';
5
+ import { getMCPManager } from '../mcp/client.js';
6
+
7
+ export interface ChatEntry {
8
+ type: 'user' | 'assistant' | 'tool_call' | 'tool_result';
9
+ content: string;
10
+ timestamp: Date;
11
+ toolCall?: ToolCall;
12
+ toolCalls?: ToolCall[];
13
+ toolResult?: ToolResult;
14
+ isStreaming?: boolean;
15
+ }
16
+
17
+ export interface StreamChunk {
18
+ type: 'content' | 'tool_calls' | 'tool_result' | 'token_count' | 'done';
19
+ content?: string;
20
+ toolCalls?: ToolCall[];
21
+ toolCall?: ToolCall;
22
+ toolResult?: ToolResult;
23
+ tokenCount?: number;
24
+ }
25
+
26
+ const DEFAULT_SYSTEM_PROMPT = `You are Grok, a powerful AI assistant running in a command-line interface.
27
+
28
+ You have access to various tools to help users with their tasks:
29
+ - bash: Execute shell commands
30
+ - str_replace_editor: View and edit files (view, create, str_replace, insert)
31
+ - MCP tools: Additional capabilities from connected Model Context Protocol servers
32
+
33
+ Guidelines:
34
+ 1. Be concise but helpful
35
+ 2. Use tools when appropriate to accomplish tasks
36
+ 3. When editing files, first view the file to understand its structure
37
+ 4. For complex changes, break them into smaller steps
38
+ 5. Always confirm destructive operations
39
+ 6. Provide clear feedback about what you're doing
40
+
41
+ Current working directory: ${process.cwd()}`;
42
+
43
+ export class GrokAgent {
44
+ private client: OpenAI;
45
+ private model: string;
46
+ private messages: ChatCompletionMessageParam[] = [];
47
+ private maxToolRounds: number;
48
+ private abortController: AbortController | null = null;
49
+
50
+ constructor(
51
+ apiKey: string,
52
+ baseURL?: string,
53
+ model?: string,
54
+ maxToolRounds: number = 400
55
+ ) {
56
+ this.client = new OpenAI({
57
+ apiKey,
58
+ baseURL: baseURL || 'https://api.x.ai/v1'
59
+ });
60
+
61
+ this.model = model || getCurrentModel();
62
+ this.maxToolRounds = maxToolRounds;
63
+
64
+ // Initialize system prompt
65
+ const customInstructions = loadCustomInstructions();
66
+ let systemPrompt = DEFAULT_SYSTEM_PROMPT;
67
+
68
+ if (customInstructions) {
69
+ systemPrompt += `\n\nCustom Instructions:\n${customInstructions}`;
70
+ }
71
+
72
+ this.messages.push({
73
+ role: 'system',
74
+ content: systemPrompt
75
+ });
76
+ }
77
+
78
+ getCurrentModel(): string {
79
+ return this.model;
80
+ }
81
+
82
+ setModel(model: string): void {
83
+ this.model = model;
84
+ }
85
+
86
+ abortCurrentOperation(): void {
87
+ if (this.abortController) {
88
+ this.abortController.abort();
89
+ this.abortController = null;
90
+ }
91
+ }
92
+
93
+ async executeBashCommand(command: string): Promise<ToolResult> {
94
+ const { executeBashCommand } = await import('../tools/bash.js');
95
+ return executeBashCommand({ command });
96
+ }
97
+
98
+ async *processUserMessageStream(userMessage: string): AsyncGenerator<StreamChunk> {
99
+ this.abortController = new AbortController();
100
+
101
+ this.messages.push({
102
+ role: 'user',
103
+ content: userMessage
104
+ });
105
+
106
+ let toolRounds = 0;
107
+
108
+ while (toolRounds < this.maxToolRounds) {
109
+ const tools = await getAllTools();
110
+
111
+ try {
112
+ const stream = await this.client.chat.completions.create({
113
+ model: this.model,
114
+ messages: this.messages,
115
+ tools: tools as ChatCompletionTool[],
116
+ stream: true
117
+ }, { signal: this.abortController?.signal });
118
+
119
+ let currentContent = '';
120
+ let toolCalls: ToolCall[] = [];
121
+ let currentToolCallId = '';
122
+ let currentToolCallName = '';
123
+ let currentToolCallArgs = '';
124
+
125
+ for await (const chunk of stream) {
126
+ const delta = chunk.choices[0]?.delta;
127
+
128
+ // Handle content
129
+ if (delta?.content) {
130
+ currentContent += delta.content;
131
+ yield { type: 'content', content: delta.content };
132
+ }
133
+
134
+ // Handle tool calls
135
+ if (delta?.tool_calls) {
136
+ for (const tc of delta.tool_calls) {
137
+ if (tc.id) {
138
+ if (currentToolCallId && currentToolCallName) {
139
+ toolCalls.push({
140
+ id: currentToolCallId,
141
+ type: 'function',
142
+ function: {
143
+ name: currentToolCallName,
144
+ arguments: currentToolCallArgs
145
+ }
146
+ });
147
+ }
148
+ currentToolCallId = tc.id;
149
+ currentToolCallName = tc.function?.name || '';
150
+ currentToolCallArgs = tc.function?.arguments || '';
151
+ } else {
152
+ if (tc.function?.name) currentToolCallName += tc.function.name;
153
+ if (tc.function?.arguments) currentToolCallArgs += tc.function.arguments;
154
+ }
155
+ }
156
+ }
157
+
158
+ // Token count (approximate from stream)
159
+ if (chunk.usage?.total_tokens) {
160
+ yield { type: 'token_count', tokenCount: chunk.usage.total_tokens };
161
+ }
162
+ }
163
+
164
+ // Push last tool call if any
165
+ if (currentToolCallId && currentToolCallName) {
166
+ toolCalls.push({
167
+ id: currentToolCallId,
168
+ type: 'function',
169
+ function: {
170
+ name: currentToolCallName,
171
+ arguments: currentToolCallArgs
172
+ }
173
+ });
174
+ }
175
+
176
+ // If we have tool calls, execute them
177
+ if (toolCalls.length > 0) {
178
+ // Add assistant message with tool calls
179
+ this.messages.push({
180
+ role: 'assistant',
181
+ content: currentContent || null,
182
+ tool_calls: toolCalls.map(tc => ({
183
+ id: tc.id,
184
+ type: 'function' as const,
185
+ function: {
186
+ name: tc.function.name,
187
+ arguments: tc.function.arguments
188
+ }
189
+ }))
190
+ });
191
+
192
+ yield { type: 'tool_calls', toolCalls };
193
+
194
+ // Execute each tool call
195
+ for (const toolCall of toolCalls) {
196
+ const result = await executeToolCall(toolCall);
197
+
198
+ // Add tool result to messages
199
+ this.messages.push({
200
+ role: 'tool',
201
+ tool_call_id: toolCall.id,
202
+ content: result.success ? (result.output || 'Success') : (result.error || 'Error')
203
+ });
204
+
205
+ yield { type: 'tool_result', toolCall, toolResult: result };
206
+ }
207
+
208
+ toolRounds++;
209
+ // Continue the loop to let the model respond to tool results
210
+ } else {
211
+ // No tool calls, we're done
212
+ if (currentContent) {
213
+ this.messages.push({
214
+ role: 'assistant',
215
+ content: currentContent
216
+ });
217
+ }
218
+ break;
219
+ }
220
+ } catch (error: any) {
221
+ if (error.name === 'AbortError') {
222
+ yield { type: 'content', content: '\n[Operation aborted]' };
223
+ break;
224
+ }
225
+ throw error;
226
+ }
227
+ }
228
+
229
+ yield { type: 'done' };
230
+ this.abortController = null;
231
+ }
232
+
233
+ async processUserMessage(userMessage: string): Promise<ChatEntry[]> {
234
+ const entries: ChatEntry[] = [];
235
+
236
+ entries.push({
237
+ type: 'user',
238
+ content: userMessage,
239
+ timestamp: new Date()
240
+ });
241
+
242
+ let assistantContent = '';
243
+
244
+ for await (const chunk of this.processUserMessageStream(userMessage)) {
245
+ switch (chunk.type) {
246
+ case 'content':
247
+ if (chunk.content) {
248
+ assistantContent += chunk.content;
249
+ }
250
+ break;
251
+
252
+ case 'tool_calls':
253
+ if (assistantContent) {
254
+ entries.push({
255
+ type: 'assistant',
256
+ content: assistantContent,
257
+ timestamp: new Date(),
258
+ toolCalls: chunk.toolCalls
259
+ });
260
+ assistantContent = '';
261
+ }
262
+ break;
263
+
264
+ case 'tool_result':
265
+ if (chunk.toolCall && chunk.toolResult) {
266
+ entries.push({
267
+ type: 'tool_result',
268
+ content: chunk.toolResult.success
269
+ ? (chunk.toolResult.output || 'Success')
270
+ : (chunk.toolResult.error || 'Error'),
271
+ timestamp: new Date(),
272
+ toolCall: chunk.toolCall,
273
+ toolResult: chunk.toolResult
274
+ });
275
+ }
276
+ break;
277
+
278
+ case 'done':
279
+ if (assistantContent) {
280
+ entries.push({
281
+ type: 'assistant',
282
+ content: assistantContent,
283
+ timestamp: new Date()
284
+ });
285
+ }
286
+ break;
287
+ }
288
+ }
289
+
290
+ return entries;
291
+ }
292
+
293
+ clearHistory(): void {
294
+ // Keep only the system message
295
+ this.messages = this.messages.slice(0, 1);
296
+ }
297
+
298
+ async shutdown(): Promise<void> {
299
+ const mcpManager = getMCPManager();
300
+ await mcpManager.shutdown();
301
+ }
302
+ }