openpaean 0.2.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 (42) 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/terminal/ErrorDisplay.d.ts +63 -0
  11. package/dist/ui/terminal/ErrorDisplay.d.ts.map +1 -0
  12. package/dist/ui/terminal/ErrorDisplay.js +113 -0
  13. package/dist/ui/terminal/ErrorDisplay.js.map +1 -0
  14. package/dist/ui/terminal/HelpDisplay.d.ts +21 -0
  15. package/dist/ui/terminal/HelpDisplay.d.ts.map +1 -0
  16. package/dist/ui/terminal/HelpDisplay.js +89 -0
  17. package/dist/ui/terminal/HelpDisplay.js.map +1 -0
  18. package/dist/ui/terminal/Spinner.d.ts +65 -0
  19. package/dist/ui/terminal/Spinner.d.ts.map +1 -0
  20. package/dist/ui/terminal/Spinner.js +130 -0
  21. package/dist/ui/terminal/Spinner.js.map +1 -0
  22. package/dist/ui/terminal/StatusBar.d.ts +27 -0
  23. package/dist/ui/terminal/StatusBar.d.ts.map +1 -0
  24. package/dist/ui/terminal/StatusBar.js +79 -0
  25. package/dist/ui/terminal/StatusBar.js.map +1 -0
  26. package/dist/ui/terminal/TerminalApp.d.ts +137 -0
  27. package/dist/ui/terminal/TerminalApp.d.ts.map +1 -0
  28. package/dist/ui/terminal/TerminalApp.js +450 -0
  29. package/dist/ui/terminal/TerminalApp.js.map +1 -0
  30. package/dist/ui/terminal/output.d.ts +91 -0
  31. package/dist/ui/terminal/output.d.ts.map +1 -0
  32. package/dist/ui/terminal/output.js +138 -0
  33. package/dist/ui/terminal/output.js.map +1 -0
  34. package/dist/ui/theme/index.d.ts +157 -0
  35. package/dist/ui/theme/index.d.ts.map +1 -0
  36. package/dist/ui/theme/index.js +236 -0
  37. package/dist/ui/theme/index.js.map +1 -0
  38. package/dist/utils/inputHistory.d.ts +88 -0
  39. package/dist/utils/inputHistory.d.ts.map +1 -0
  40. package/dist/utils/inputHistory.js +206 -0
  41. package/dist/utils/inputHistory.js.map +1 -0
  42. package/package.json +2 -2
@@ -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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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Terminal Output Utilities
3
+ * Handles ANSI escape codes for terminal control
4
+ */
5
+ /**
6
+ * ANSI escape codes
7
+ */
8
+ export declare const ANSI: {
9
+ saveCursor: string;
10
+ restoreCursor: string;
11
+ moveCursorUp: (n: number) => string;
12
+ moveCursorDown: (n: number) => string;
13
+ moveCursorLeft: (n: number) => string;
14
+ moveCursorRight: (n: number) => string;
15
+ moveToColumn: (n: number) => string;
16
+ moveToStart: string;
17
+ clearLine: string;
18
+ clearScreen: string;
19
+ clearToEnd: string;
20
+ reset: string;
21
+ bold: string;
22
+ dim: string;
23
+ italic: string;
24
+ underline: string;
25
+ black: string;
26
+ red: string;
27
+ green: string;
28
+ yellow: string;
29
+ blue: string;
30
+ magenta: string;
31
+ cyan: string;
32
+ white: string;
33
+ brightBlack: string;
34
+ brightRed: string;
35
+ brightGreen: string;
36
+ brightYellow: string;
37
+ brightBlue: string;
38
+ brightMagenta: string;
39
+ brightCyan: string;
40
+ brightWhite: string;
41
+ };
42
+ /**
43
+ * Get terminal width
44
+ */
45
+ export declare function getTerminalWidth(): number;
46
+ /**
47
+ * Get terminal height
48
+ */
49
+ export declare function getTerminalHeight(): number;
50
+ /**
51
+ * Apply color to text (only if supported)
52
+ * Note: For semantic colors, use the theme system instead
53
+ */
54
+ export declare function colorize(text: string, ansiCode: string): string;
55
+ /**
56
+ * Apply multiple styles
57
+ */
58
+ export declare function style(text: string, ...styles: string[]): string;
59
+ /**
60
+ * Clear current line and move cursor to start
61
+ */
62
+ export declare function clearLine(): void;
63
+ /**
64
+ * Clear lines above (for redraw)
65
+ */
66
+ export declare function clearLinesAbove(count: number): void;
67
+ /**
68
+ * Write a line that doesn't affect the input area
69
+ */
70
+ export declare function writeLine(text: string): void;
71
+ /**
72
+ * Write text at a specific position
73
+ */
74
+ export declare function writeAt(row: number, col: number, text: string): void;
75
+ /**
76
+ * Hide cursor
77
+ */
78
+ export declare function hideCursor(): void;
79
+ /**
80
+ * Show cursor
81
+ */
82
+ export declare function showCursor(): void;
83
+ /**
84
+ * Enable raw mode (for special key handling)
85
+ */
86
+ export declare function enableRawMode(): void;
87
+ /**
88
+ * Disable raw mode
89
+ */
90
+ export declare function disableRawMode(): void;
91
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/ui/terminal/output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,IAAI;;;sBAIK,MAAM;wBACJ,MAAM;wBACN,MAAM;yBACL,MAAM;sBACT,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC3B,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAK/D;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAInD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAS5C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAMpE;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAIrC"}