@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.
- package/.env +45 -0
- package/.grok/settings.json +13 -0
- package/dist/agent/index.d.ts +35 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +244 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +242 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +33 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +134 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/config.d.ts +15 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +123 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/transports.d.ts +24 -0
- package/dist/mcp/transports.d.ts.map +1 -0
- package/dist/mcp/transports.js +91 -0
- package/dist/mcp/transports.js.map +1 -0
- package/dist/tools/bash.d.ts +28 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +70 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/index.d.ts +77 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +80 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/text-editor.d.ts +69 -0
- package/dist/tools/text-editor.d.ts.map +1 -0
- package/dist/tools/text-editor.js +178 -0
- package/dist/tools/text-editor.js.map +1 -0
- package/dist/tools/types.d.ts +14 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/ui/readline-ui.d.ts +32 -0
- package/dist/ui/readline-ui.d.ts.map +1 -0
- package/dist/ui/readline-ui.js +256 -0
- package/dist/ui/readline-ui.js.map +1 -0
- package/dist/utils/settings.d.ts +20 -0
- package/dist/utils/settings.d.ts.map +1 -0
- package/dist/utils/settings.js +101 -0
- package/dist/utils/settings.js.map +1 -0
- package/package.json +51 -0
- package/src/agent/index.ts +302 -0
- package/src/index.ts +275 -0
- package/src/mcp/client.ts +178 -0
- package/src/mcp/config.ts +149 -0
- package/src/mcp/transports.ts +142 -0
- package/src/tools/bash.ts +84 -0
- package/src/tools/index.ts +91 -0
- package/src/tools/text-editor.ts +222 -0
- package/src/tools/types.ts +14 -0
- package/src/ui/readline-ui.ts +294 -0
- package/src/utils/settings.ts +129 -0
- 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
|
+
}
|