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.
- 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/App.d.ts +1 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +15 -9
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/FullscreenApp.d.ts +1 -0
- package/dist/ui/FullscreenApp.d.ts.map +1 -1
- package/dist/ui/FullscreenApp.js +8 -5
- package/dist/ui/FullscreenApp.js.map +1 -1
- package/dist/ui/components/MarkdownText.d.ts +23 -0
- package/dist/ui/components/MarkdownText.d.ts.map +1 -0
- package/dist/ui/components/MarkdownText.js +84 -0
- package/dist/ui/components/MarkdownText.js.map +1 -0
- package/dist/ui/components/ScrollableBox.d.ts +21 -0
- package/dist/ui/components/ScrollableBox.d.ts.map +1 -0
- package/dist/ui/components/ScrollableBox.js +101 -0
- package/dist/ui/components/ScrollableBox.js.map +1 -0
- package/dist/ui/components/StreamingText.d.ts +1 -1
- package/dist/ui/components/StreamingText.d.ts.map +1 -1
- package/dist/ui/components/StreamingText.js +6 -5
- package/dist/ui/components/StreamingText.js.map +1 -1
- package/dist/ui/components/index.d.ts +2 -0
- package/dist/ui/components/index.d.ts.map +1 -1
- package/dist/ui/components/index.js +2 -0
- package/dist/ui/components/index.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 @@
|
|
|
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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"}
|