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.
- package/dist/agent/chat.ink.d.ts +5 -0
- package/dist/agent/chat.ink.d.ts.map +1 -1
- package/dist/agent/chat.ink.js +9 -0
- package/dist/agent/chat.ink.js.map +1 -1
- package/dist/cli.js +3 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +6 -5
- package/dist/commands/agent.js.map +1 -1
- package/dist/ui/terminal/ErrorDisplay.d.ts +63 -0
- package/dist/ui/terminal/ErrorDisplay.d.ts.map +1 -0
- package/dist/ui/terminal/ErrorDisplay.js +113 -0
- package/dist/ui/terminal/ErrorDisplay.js.map +1 -0
- package/dist/ui/terminal/HelpDisplay.d.ts +21 -0
- package/dist/ui/terminal/HelpDisplay.d.ts.map +1 -0
- package/dist/ui/terminal/HelpDisplay.js +89 -0
- package/dist/ui/terminal/HelpDisplay.js.map +1 -0
- package/dist/ui/terminal/Spinner.d.ts +65 -0
- package/dist/ui/terminal/Spinner.d.ts.map +1 -0
- package/dist/ui/terminal/Spinner.js +130 -0
- package/dist/ui/terminal/Spinner.js.map +1 -0
- package/dist/ui/terminal/StatusBar.d.ts +27 -0
- package/dist/ui/terminal/StatusBar.d.ts.map +1 -0
- package/dist/ui/terminal/StatusBar.js +79 -0
- package/dist/ui/terminal/StatusBar.js.map +1 -0
- package/dist/ui/terminal/TerminalApp.d.ts +137 -0
- package/dist/ui/terminal/TerminalApp.d.ts.map +1 -0
- package/dist/ui/terminal/TerminalApp.js +450 -0
- package/dist/ui/terminal/TerminalApp.js.map +1 -0
- package/dist/ui/terminal/output.d.ts +91 -0
- package/dist/ui/terminal/output.d.ts.map +1 -0
- package/dist/ui/terminal/output.js +138 -0
- package/dist/ui/terminal/output.js.map +1 -0
- package/dist/ui/theme/index.d.ts +157 -0
- package/dist/ui/theme/index.d.ts.map +1 -0
- package/dist/ui/theme/index.js +236 -0
- package/dist/ui/theme/index.js.map +1 -0
- package/dist/utils/inputHistory.d.ts +88 -0
- package/dist/utils/inputHistory.d.ts.map +1 -0
- package/dist/utils/inputHistory.js +206 -0
- package/dist/utils/inputHistory.js.map +1 -0
- 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"}
|