openpaean 0.1.0 → 0.3.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 (66) hide show
  1. package/dist/agent/chat.ink.d.ts +5 -0
  2. package/dist/agent/chat.ink.d.ts.map +1 -1
  3. package/dist/agent/chat.ink.js +9 -0
  4. package/dist/agent/chat.ink.js.map +1 -1
  5. package/dist/cli.js +3 -3
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/agent.d.ts.map +1 -1
  8. package/dist/commands/agent.js +6 -5
  9. package/dist/commands/agent.js.map +1 -1
  10. package/dist/ui/App.d.ts +1 -1
  11. package/dist/ui/App.d.ts.map +1 -1
  12. package/dist/ui/App.js +15 -9
  13. package/dist/ui/App.js.map +1 -1
  14. package/dist/ui/FullscreenApp.d.ts +1 -0
  15. package/dist/ui/FullscreenApp.d.ts.map +1 -1
  16. package/dist/ui/FullscreenApp.js +8 -5
  17. package/dist/ui/FullscreenApp.js.map +1 -1
  18. package/dist/ui/components/MarkdownText.d.ts +23 -0
  19. package/dist/ui/components/MarkdownText.d.ts.map +1 -0
  20. package/dist/ui/components/MarkdownText.js +84 -0
  21. package/dist/ui/components/MarkdownText.js.map +1 -0
  22. package/dist/ui/components/ScrollableBox.d.ts +21 -0
  23. package/dist/ui/components/ScrollableBox.d.ts.map +1 -0
  24. package/dist/ui/components/ScrollableBox.js +101 -0
  25. package/dist/ui/components/ScrollableBox.js.map +1 -0
  26. package/dist/ui/components/StreamingText.d.ts +1 -1
  27. package/dist/ui/components/StreamingText.d.ts.map +1 -1
  28. package/dist/ui/components/StreamingText.js +6 -5
  29. package/dist/ui/components/StreamingText.js.map +1 -1
  30. package/dist/ui/components/index.d.ts +2 -0
  31. package/dist/ui/components/index.d.ts.map +1 -1
  32. package/dist/ui/components/index.js +2 -0
  33. package/dist/ui/components/index.js.map +1 -1
  34. package/dist/ui/terminal/ErrorDisplay.d.ts +63 -0
  35. package/dist/ui/terminal/ErrorDisplay.d.ts.map +1 -0
  36. package/dist/ui/terminal/ErrorDisplay.js +113 -0
  37. package/dist/ui/terminal/ErrorDisplay.js.map +1 -0
  38. package/dist/ui/terminal/HelpDisplay.d.ts +21 -0
  39. package/dist/ui/terminal/HelpDisplay.d.ts.map +1 -0
  40. package/dist/ui/terminal/HelpDisplay.js +89 -0
  41. package/dist/ui/terminal/HelpDisplay.js.map +1 -0
  42. package/dist/ui/terminal/Spinner.d.ts +65 -0
  43. package/dist/ui/terminal/Spinner.d.ts.map +1 -0
  44. package/dist/ui/terminal/Spinner.js +130 -0
  45. package/dist/ui/terminal/Spinner.js.map +1 -0
  46. package/dist/ui/terminal/StatusBar.d.ts +27 -0
  47. package/dist/ui/terminal/StatusBar.d.ts.map +1 -0
  48. package/dist/ui/terminal/StatusBar.js +79 -0
  49. package/dist/ui/terminal/StatusBar.js.map +1 -0
  50. package/dist/ui/terminal/TerminalApp.d.ts +137 -0
  51. package/dist/ui/terminal/TerminalApp.d.ts.map +1 -0
  52. package/dist/ui/terminal/TerminalApp.js +450 -0
  53. package/dist/ui/terminal/TerminalApp.js.map +1 -0
  54. package/dist/ui/terminal/output.d.ts +91 -0
  55. package/dist/ui/terminal/output.d.ts.map +1 -0
  56. package/dist/ui/terminal/output.js +138 -0
  57. package/dist/ui/terminal/output.js.map +1 -0
  58. package/dist/ui/theme/index.d.ts +157 -0
  59. package/dist/ui/theme/index.d.ts.map +1 -0
  60. package/dist/ui/theme/index.js +236 -0
  61. package/dist/ui/theme/index.js.map +1 -0
  62. package/dist/utils/inputHistory.d.ts +88 -0
  63. package/dist/utils/inputHistory.d.ts.map +1 -0
  64. package/dist/utils/inputHistory.js +206 -0
  65. package/dist/utils/inputHistory.js.map +1 -0
  66. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../src/ui/terminal/StatusBar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * TerminalApp - Scrolling Mode Chat Interface
3
+ * Claude Code style: messages scroll naturally, input fixed at bottom
4
+ */
5
+ import type { McpState, McpToolResult } from '../../agent/types.js';
6
+ /**
7
+ * Message types
8
+ */
9
+ export type MessageType = 'user' | 'assistant' | 'system' | 'error' | 'tool';
10
+ /**
11
+ * Message interface
12
+ */
13
+ export interface Message {
14
+ id: string;
15
+ type: MessageType;
16
+ content: string;
17
+ timestamp: number;
18
+ toolName?: string;
19
+ serverName?: string;
20
+ }
21
+ /**
22
+ * TerminalApp options
23
+ */
24
+ export interface TerminalAppOptions {
25
+ mcpState?: McpState;
26
+ onMcpToolCall?: (callId: string, serverName: string, toolName: string, args: Record<string, unknown>) => Promise<McpToolResult>;
27
+ debug?: boolean;
28
+ }
29
+ /**
30
+ * TerminalApp class - Scrolling mode chat interface
31
+ */
32
+ export declare class TerminalApp {
33
+ private rl;
34
+ private messages;
35
+ private isProcessing;
36
+ private currentAbort;
37
+ private statusState;
38
+ private agentService;
39
+ private options;
40
+ private streamBuffer;
41
+ private streamingMessageId;
42
+ private get mcpToolCount();
43
+ constructor(options?: TerminalAppOptions);
44
+ /**
45
+ * Tab completer for commands
46
+ */
47
+ private completer;
48
+ /**
49
+ * Setup readline event handlers
50
+ */
51
+ private setupReadline;
52
+ /**
53
+ * Start the interactive loop
54
+ */
55
+ start(): Promise<void>;
56
+ /**
57
+ * Print welcome message
58
+ */
59
+ private printWelcome;
60
+ /**
61
+ * Update the prompt with status hints
62
+ */
63
+ private updatePrompt;
64
+ /**
65
+ * Get current status hints
66
+ */
67
+ private getStatusHints;
68
+ /**
69
+ * Show status hints below prompt
70
+ */
71
+ private showStatusHints;
72
+ /**
73
+ * Handle user input
74
+ */
75
+ private handleInput;
76
+ /**
77
+ * Handle slash commands
78
+ */
79
+ private handleCommand;
80
+ /**
81
+ * Get help text
82
+ */
83
+ private getHelpText;
84
+ /**
85
+ * Get MCP status
86
+ */
87
+ private getMcpStatus;
88
+ /**
89
+ * Process a message through the agent
90
+ */
91
+ private processMessage;
92
+ /**
93
+ * Handle streaming content
94
+ */
95
+ private handleStreamContent;
96
+ /**
97
+ * Handle tool call
98
+ */
99
+ private handleToolCall;
100
+ /**
101
+ * Handle tool result
102
+ */
103
+ private handleToolResult;
104
+ /**
105
+ * Handle MCP tool call
106
+ */
107
+ private handleMcpToolCall;
108
+ /**
109
+ * Handle stream done
110
+ */
111
+ private handleStreamDone;
112
+ /**
113
+ * Handle error
114
+ */
115
+ private handleError;
116
+ /**
117
+ * Abort current processing
118
+ */
119
+ private abortProcessing;
120
+ /**
121
+ * Add a message to history
122
+ */
123
+ private addMessage;
124
+ /**
125
+ * Generate unique ID
126
+ */
127
+ private generateId;
128
+ /**
129
+ * Exit the application
130
+ */
131
+ exit(): void;
132
+ /**
133
+ * Cleanup resources
134
+ */
135
+ private cleanup;
136
+ }
137
+ //# sourceMappingURL=TerminalApp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalApp.d.ts","sourceRoot":"","sources":["../../../src/ui/terminal/TerminalApp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAmBpE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAmBD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,aAAa,CAAC,EAAE,CACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,WAAW,CAMjB;IACF,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,kBAAkB,CAAuB;IAGjD,OAAO,KAAK,YAAY,GAKvB;gBAEW,OAAO,GAAE,kBAAuB;IAqB5C;;OAEG;IACH,OAAO,CAAC,SAAS;IAajB;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;YACW,WAAW;IAkCzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiDrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAsBnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;YACW,cAAc;IAiD5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0B3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;YACW,iBAAiB;IAiC/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,IAAI,IAAI,IAAI;IAMZ;;OAEG;IACH,OAAO,CAAC,OAAO;CAIlB"}
@@ -0,0 +1,450 @@
1
+ /**
2
+ * TerminalApp - Scrolling Mode Chat Interface
3
+ * Claude Code style: messages scroll naturally, input fixed at bottom
4
+ */
5
+ import readline from 'readline';
6
+ import { stdin, stdout } from 'process';
7
+ import { AgentService } from '../../agent/service.js';
8
+ import { ANSI, colorize, getTerminalWidth, showCursor, } from './output.js';
9
+ import { primary, success, error as errorColor, warning, info, muted, styledMessage, mcpSymbol, toolSymbol } from '../theme/index.js';
10
+ /**
11
+ * Available commands for completion
12
+ */
13
+ const AVAILABLE_COMMANDS = [
14
+ '/exit',
15
+ '/quit',
16
+ '/q',
17
+ '/clear',
18
+ '/cls',
19
+ '/help',
20
+ '/h',
21
+ '/?',
22
+ '/debug',
23
+ '/raw',
24
+ '/mcp',
25
+ ];
26
+ /**
27
+ * TerminalApp class - Scrolling mode chat interface
28
+ */
29
+ export class TerminalApp {
30
+ rl;
31
+ messages = [];
32
+ isProcessing = false;
33
+ currentAbort = null;
34
+ statusState = {
35
+ isProcessing: false,
36
+ hasInput: false,
37
+ mcpToolCount: 0,
38
+ isRawMode: false,
39
+ isDebugMode: false,
40
+ };
41
+ agentService;
42
+ options;
43
+ streamBuffer = [];
44
+ streamingMessageId = null;
45
+ // MCP tool count
46
+ get mcpToolCount() {
47
+ return this.options.mcpState?.mcpServers?.reduce((sum, s) => sum + (s.tools?.length || 0), 0) || 0;
48
+ }
49
+ constructor(options = {}) {
50
+ this.options = options;
51
+ this.statusState.mcpToolCount = this.mcpToolCount;
52
+ this.statusState.isDebugMode = options.debug ?? false;
53
+ this.agentService = new AgentService();
54
+ // Create readline interface with completer and history
55
+ this.rl = readline.createInterface({
56
+ input: stdin,
57
+ output: stdout,
58
+ prompt: '',
59
+ terminal: true,
60
+ historySize: 1000, // Use readline's built-in history
61
+ completer: this.completer.bind(this),
62
+ removeHistoryDuplicates: true,
63
+ });
64
+ // Setup readline
65
+ this.setupReadline();
66
+ }
67
+ /**
68
+ * Tab completer for commands
69
+ */
70
+ completer(line) {
71
+ // Command completion
72
+ if (line.startsWith('/')) {
73
+ const matches = AVAILABLE_COMMANDS.filter(cmd => cmd.toLowerCase().startsWith(line.toLowerCase()));
74
+ return [matches, line];
75
+ }
76
+ // For regular input, let readline handle history completion
77
+ return [[], line];
78
+ }
79
+ /**
80
+ * Setup readline event handlers
81
+ */
82
+ setupReadline() {
83
+ // Handle line input (Enter)
84
+ this.rl.on('line', (input) => {
85
+ this.handleInput(input.trim());
86
+ });
87
+ // Handle SIGINT (Ctrl+C)
88
+ this.rl.on('SIGINT', () => {
89
+ if (this.isProcessing) {
90
+ this.abortProcessing();
91
+ }
92
+ else {
93
+ this.exit();
94
+ }
95
+ });
96
+ // Handle SIGTSTP (Ctrl+Z)
97
+ this.rl.on('SIGTSTP', () => {
98
+ // Ignore - we don't want to suspend
99
+ });
100
+ // Handle close
101
+ this.rl.on('close', () => {
102
+ this.cleanup();
103
+ });
104
+ }
105
+ /**
106
+ * Start the interactive loop
107
+ */
108
+ async start() {
109
+ // Show welcome message
110
+ this.printWelcome();
111
+ // Show status hints
112
+ this.showStatusHints();
113
+ // Show initial prompt
114
+ this.updatePrompt();
115
+ // Start the readline loop
116
+ this.rl.prompt();
117
+ }
118
+ /**
119
+ * Print welcome message
120
+ */
121
+ printWelcome() {
122
+ const width = getTerminalWidth();
123
+ const line = '─'.repeat(Math.min(width, 60));
124
+ console.log(muted(line));
125
+ console.log(primary(' OpenPaean AI Agent'));
126
+ console.log(muted(' Type /help for commands, Ctrl+C to exit'));
127
+ console.log(muted(line));
128
+ }
129
+ /**
130
+ * Update the prompt with status hints
131
+ */
132
+ updatePrompt() {
133
+ // Simple prompt without hints - hints shown separately
134
+ this.rl.setPrompt(colorize('> ', ANSI.brightCyan));
135
+ }
136
+ /**
137
+ * Get current status hints
138
+ */
139
+ getStatusHints() {
140
+ if (this.isProcessing) {
141
+ return colorize('[Ctrl+C] Abort', ANSI.brightRed);
142
+ }
143
+ return primary('[/]') + ' Commands ' + primary('[?]') + ' Help';
144
+ }
145
+ /**
146
+ * Show status hints below prompt
147
+ */
148
+ showStatusHints() {
149
+ const hints = this.getStatusHints();
150
+ process.stdout.write(` ${muted(hints)}\n`);
151
+ }
152
+ /**
153
+ * Handle user input
154
+ */
155
+ async handleInput(input) {
156
+ if (input.length === 0) {
157
+ this.rl.prompt();
158
+ return;
159
+ }
160
+ // Check for slash commands
161
+ if (input.startsWith('/')) {
162
+ const result = this.handleCommand(input);
163
+ if (result.handled) {
164
+ if (result.action === 'exit') {
165
+ this.exit();
166
+ return;
167
+ }
168
+ if (result.output) {
169
+ console.log(result.output);
170
+ }
171
+ this.rl.prompt();
172
+ return;
173
+ }
174
+ }
175
+ // Add user message to history
176
+ this.addMessage({
177
+ id: this.generateId(),
178
+ type: 'user',
179
+ content: input,
180
+ timestamp: Date.now(),
181
+ });
182
+ // Process the message (readline already shows the input, no need to echo)
183
+ await this.processMessage(input);
184
+ }
185
+ /**
186
+ * Handle slash commands
187
+ */
188
+ handleCommand(input) {
189
+ const cmd = input.toLowerCase().trim();
190
+ switch (cmd) {
191
+ case '/exit':
192
+ case '/quit':
193
+ case '/q':
194
+ return { handled: true, action: 'exit' };
195
+ case '/clear':
196
+ case '/cls':
197
+ console.clear();
198
+ this.printWelcome();
199
+ return { handled: true, action: 'clear' };
200
+ case '/help':
201
+ case '/h':
202
+ case '/?':
203
+ return {
204
+ handled: true,
205
+ output: this.getHelpText(),
206
+ };
207
+ case '/debug':
208
+ this.statusState.isDebugMode = !this.statusState.isDebugMode;
209
+ return {
210
+ handled: true,
211
+ output: `Debug mode: ${this.statusState.isDebugMode ? 'ON' : 'OFF'}`,
212
+ };
213
+ case '/raw':
214
+ this.statusState.isRawMode = !this.statusState.isRawMode;
215
+ let output = `Raw mode: ${this.statusState.isRawMode ? 'ON' : 'OFF'}`;
216
+ if (this.statusState.isRawMode) {
217
+ output += '\nAgent will return plain text (no markdown)';
218
+ }
219
+ return { handled: true, output };
220
+ case '/mcp':
221
+ return { handled: true, output: this.getMcpStatus() };
222
+ default:
223
+ return {
224
+ handled: true,
225
+ output: errorColor(`Unknown command: ${cmd}\nType /help for available commands`),
226
+ };
227
+ }
228
+ }
229
+ /**
230
+ * Get help text
231
+ */
232
+ getHelpText() {
233
+ return `
234
+ ${info('Available Commands:')}
235
+
236
+ ${success('/exit, /quit, /q')} Exit the chat session
237
+ ${success('/clear, /cls')} Clear the screen
238
+ ${success('/help, /h, /?')} Show this help message
239
+ ${success('/debug')} Toggle debug mode
240
+ ${success('/raw')} Toggle raw output mode (no markdown)
241
+ ${success('/mcp')} Show MCP connection status
242
+
243
+ ${info('Shortcuts:')}
244
+ ${warning('Ctrl+C')} Exit or abort current operation
245
+ ${warning('Ctrl+R')} Search command history
246
+ ${warning('Tab')} Command completion
247
+
248
+ ${info('Terminal:')}
249
+ Use your terminal's scroll to view message history.
250
+ All messages remain visible after exit.
251
+ `;
252
+ }
253
+ /**
254
+ * Get MCP status
255
+ */
256
+ getMcpStatus() {
257
+ const servers = this.options.mcpState?.mcpServers || [];
258
+ if (servers.length === 0) {
259
+ return muted('\nNo MCP servers connected\n');
260
+ }
261
+ let status = primary('\nMCP Connections:\n\n');
262
+ for (const server of servers) {
263
+ const toolCount = server.tools?.length || 0;
264
+ status += ` ${success('●')} ${server.name}: ${toolCount} tools\n`;
265
+ }
266
+ return status;
267
+ }
268
+ /**
269
+ * Process a message through the agent
270
+ */
271
+ async processMessage(message) {
272
+ this.isProcessing = true;
273
+ this.updatePrompt();
274
+ // Create streaming message
275
+ this.streamingMessageId = this.generateId();
276
+ this.streamBuffer = [];
277
+ try {
278
+ const { abort } = await this.agentService.streamMessage(message, {
279
+ onContent: (text, partial) => {
280
+ this.handleStreamContent(text, partial);
281
+ },
282
+ onToolCall: (id, name) => {
283
+ this.handleToolCall(id, name);
284
+ },
285
+ onToolResult: (id, name, result) => {
286
+ this.handleToolResult(id, name, result);
287
+ },
288
+ onMcpToolCall: async (callId, serverName, toolName, args) => {
289
+ return this.handleMcpToolCall(callId, serverName, toolName, args);
290
+ },
291
+ onDone: (conversationId) => {
292
+ this.handleStreamDone(conversationId);
293
+ },
294
+ onError: (error) => {
295
+ this.handleError(error);
296
+ },
297
+ }, {
298
+ mcpState: this.options.mcpState,
299
+ cliMode: this.statusState.isRawMode ? { enabled: true, streamRaw: true } : undefined,
300
+ });
301
+ this.currentAbort = abort;
302
+ }
303
+ catch (error) {
304
+ this.handleError(error.message);
305
+ }
306
+ finally {
307
+ this.isProcessing = false;
308
+ this.currentAbort = null;
309
+ this.streamingMessageId = null;
310
+ this.updatePrompt();
311
+ this.rl.prompt();
312
+ }
313
+ }
314
+ /**
315
+ * Handle streaming content
316
+ */
317
+ handleStreamContent(text, partial) {
318
+ this.streamBuffer.push(text);
319
+ // Only write during streaming (partial=true)
320
+ // Skip the final complete event to avoid duplicate output
321
+ if (partial) {
322
+ // First chunk - write prefix
323
+ if (this.streamBuffer.length === 1) {
324
+ process.stdout.write('\n' + primary('OpenPaean: '));
325
+ }
326
+ // Write the content chunk
327
+ process.stdout.write(text);
328
+ }
329
+ else {
330
+ // Stream complete - just add to messages, don't write again
331
+ this.addMessage({
332
+ id: this.streamingMessageId || this.generateId(),
333
+ type: 'assistant',
334
+ content: this.streamBuffer.join(''),
335
+ timestamp: Date.now(),
336
+ });
337
+ // Write final newlines
338
+ process.stdout.write('\n\n');
339
+ this.streamBuffer = [];
340
+ }
341
+ }
342
+ /**
343
+ * Handle tool call
344
+ */
345
+ handleToolCall(_id, name) {
346
+ // Newline before tool indicator
347
+ process.stdout.write(`\n${toolSymbol()} ${name}...`);
348
+ }
349
+ /**
350
+ * Handle tool result
351
+ */
352
+ handleToolResult(_id, _name, result) {
353
+ if (result.isError) {
354
+ process.stdout.write(' ' + errorColor('✗') + '\n');
355
+ }
356
+ else {
357
+ process.stdout.write(' ' + success('✓') + '\n');
358
+ }
359
+ }
360
+ /**
361
+ * Handle MCP tool call
362
+ */
363
+ async handleMcpToolCall(callId, serverName, toolName, args) {
364
+ if (!this.options.onMcpToolCall) {
365
+ return {
366
+ content: [{ type: 'text', text: 'MCP not available' }],
367
+ isError: true,
368
+ };
369
+ }
370
+ // Newline before MCP tool indicator
371
+ process.stdout.write(`\n${mcpSymbol()} [${serverName}] ${toolName}...`);
372
+ try {
373
+ const result = await this.options.onMcpToolCall(callId, serverName, toolName, args);
374
+ if (result.isError) {
375
+ process.stdout.write(' ' + errorColor('✗') + '\n');
376
+ }
377
+ else {
378
+ process.stdout.write(' ' + success('✓') + '\n');
379
+ }
380
+ return result;
381
+ }
382
+ catch (err) {
383
+ process.stdout.write(' ' + errorColor('✗') + '\n');
384
+ return {
385
+ content: [{ type: 'text', text: err.message }],
386
+ isError: true,
387
+ };
388
+ }
389
+ }
390
+ /**
391
+ * Handle stream done
392
+ */
393
+ handleStreamDone(_conversationId) {
394
+ // Stream complete - handled by the last partial=false content event
395
+ // No action needed here
396
+ }
397
+ /**
398
+ * Handle error
399
+ */
400
+ handleError(error) {
401
+ console.log(styledMessage('error', `Error: ${error}\n`));
402
+ this.addMessage({
403
+ id: this.generateId(),
404
+ type: 'error',
405
+ content: error,
406
+ timestamp: Date.now(),
407
+ });
408
+ }
409
+ /**
410
+ * Abort current processing
411
+ */
412
+ abortProcessing() {
413
+ if (this.currentAbort) {
414
+ this.currentAbort();
415
+ this.currentAbort = null;
416
+ console.log(warning('\n⚠ Aborted\n'));
417
+ }
418
+ this.isProcessing = false;
419
+ this.streamingMessageId = null;
420
+ this.updatePrompt();
421
+ }
422
+ /**
423
+ * Add a message to history
424
+ */
425
+ addMessage(message) {
426
+ this.messages.push(message);
427
+ }
428
+ /**
429
+ * Generate unique ID
430
+ */
431
+ generateId() {
432
+ return `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
433
+ }
434
+ /**
435
+ * Exit the application
436
+ */
437
+ exit() {
438
+ console.log(primary('\n👋 Goodbye!\n'));
439
+ this.cleanup();
440
+ process.exit(0);
441
+ }
442
+ /**
443
+ * Cleanup resources
444
+ */
445
+ cleanup() {
446
+ this.rl.close();
447
+ showCursor();
448
+ }
449
+ }
450
+ //# sourceMappingURL=TerminalApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalApp.js","sourceRoot":"","sources":["../../../src/ui/terminal/TerminalApp.ts"],"names":[],"mappings":"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"}