erosolar-cli 1.7.213 → 1.7.215
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/bin/erosolar.js +3 -0
- package/dist/bin/erosolar.js.map +1 -1
- package/dist/mcp/sseClient.d.ts.map +1 -1
- package/dist/mcp/sseClient.js +54 -27
- package/dist/mcp/sseClient.js.map +1 -1
- package/dist/shell/claudeCodeStreamHandler.d.ts.map +1 -1
- package/dist/shell/claudeCodeStreamHandler.js +11 -1
- package/dist/shell/claudeCodeStreamHandler.js.map +1 -1
- package/dist/shell/interactiveShell.d.ts +10 -0
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +76 -31
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/shellApp.d.ts.map +1 -1
- package/dist/shell/shellApp.js +3 -0
- package/dist/shell/shellApp.js.map +1 -1
- package/dist/shell/streamingOutputManager.d.ts +1 -0
- package/dist/shell/streamingOutputManager.d.ts.map +1 -1
- package/dist/shell/streamingOutputManager.js +16 -4
- package/dist/shell/streamingOutputManager.js.map +1 -1
- package/dist/shell/terminalInput.d.ts +27 -7
- package/dist/shell/terminalInput.d.ts.map +1 -1
- package/dist/shell/terminalInput.js +91 -53
- package/dist/shell/terminalInput.js.map +1 -1
- package/dist/shell/terminalInputAdapter.d.ts +14 -0
- package/dist/shell/terminalInputAdapter.d.ts.map +1 -1
- package/dist/shell/terminalInputAdapter.js +20 -0
- package/dist/shell/terminalInputAdapter.js.map +1 -1
- package/dist/ui/display.d.ts +17 -4
- package/dist/ui/display.d.ts.map +1 -1
- package/dist/ui/display.js +141 -81
- package/dist/ui/display.js.map +1 -1
- package/dist/ui/globalWriteLock.d.ts +38 -0
- package/dist/ui/globalWriteLock.d.ts.map +1 -0
- package/dist/ui/globalWriteLock.js +54 -0
- package/dist/ui/globalWriteLock.js.map +1 -0
- package/dist/ui/unified/layout.d.ts +27 -0
- package/dist/ui/unified/layout.d.ts.map +1 -0
- package/dist/ui/unified/layout.js +110 -0
- package/dist/ui/unified/layout.js.map +1 -0
- package/package.json +1 -1
- package/dist/ui/FixedInputArea.d.ts +0 -108
- package/dist/ui/FixedInputArea.d.ts.map +0 -1
- package/dist/ui/FixedInputArea.js +0 -312
- package/dist/ui/FixedInputArea.js.map +0 -1
- package/dist/ui/advancedTheme.d.ts +0 -246
- package/dist/ui/advancedTheme.d.ts.map +0 -1
- package/dist/ui/advancedTheme.js +0 -478
- package/dist/ui/advancedTheme.js.map +0 -1
- package/dist/ui/collapsibleContent.d.ts +0 -57
- package/dist/ui/collapsibleContent.d.ts.map +0 -1
- package/dist/ui/collapsibleContent.js +0 -106
- package/dist/ui/collapsibleContent.js.map +0 -1
- package/dist/ui/diffViewer.d.ts +0 -42
- package/dist/ui/diffViewer.d.ts.map +0 -1
- package/dist/ui/diffViewer.js +0 -343
- package/dist/ui/diffViewer.js.map +0 -1
- package/dist/ui/gitDisplay.d.ts +0 -45
- package/dist/ui/gitDisplay.d.ts.map +0 -1
- package/dist/ui/gitDisplay.js +0 -215
- package/dist/ui/gitDisplay.js.map +0 -1
- package/dist/ui/gitFormatter.d.ts +0 -29
- package/dist/ui/gitFormatter.d.ts.map +0 -1
- package/dist/ui/gitFormatter.js +0 -203
- package/dist/ui/gitFormatter.js.map +0 -1
- package/dist/ui/keyboardShortcuts.d.ts +0 -49
- package/dist/ui/keyboardShortcuts.d.ts.map +0 -1
- package/dist/ui/keyboardShortcuts.js +0 -128
- package/dist/ui/keyboardShortcuts.js.map +0 -1
- package/dist/ui/logFormatter.d.ts +0 -70
- package/dist/ui/logFormatter.d.ts.map +0 -1
- package/dist/ui/logFormatter.js +0 -323
- package/dist/ui/logFormatter.js.map +0 -1
- package/dist/ui/outputSummarizer.d.ts +0 -52
- package/dist/ui/outputSummarizer.d.ts.map +0 -1
- package/dist/ui/outputSummarizer.js +0 -242
- package/dist/ui/outputSummarizer.js.map +0 -1
- package/dist/ui/progressBar.d.ts +0 -51
- package/dist/ui/progressBar.d.ts.map +0 -1
- package/dist/ui/progressBar.js +0 -153
- package/dist/ui/progressBar.js.map +0 -1
- package/dist/ui/progressIndicator.d.ts +0 -69
- package/dist/ui/progressIndicator.d.ts.map +0 -1
- package/dist/ui/progressIndicator.js +0 -145
- package/dist/ui/progressIndicator.js.map +0 -1
- package/dist/ui/streamingIndicators.d.ts +0 -42
- package/dist/ui/streamingIndicators.d.ts.map +0 -1
- package/dist/ui/streamingIndicators.js +0 -155
- package/dist/ui/streamingIndicators.js.map +0 -1
- package/dist/ui/tableFormatter.d.ts +0 -31
- package/dist/ui/tableFormatter.d.ts.map +0 -1
- package/dist/ui/tableFormatter.js +0 -186
- package/dist/ui/tableFormatter.js.map +0 -1
- package/dist/ui/thinkingTracker.d.ts +0 -51
- package/dist/ui/thinkingTracker.d.ts.map +0 -1
- package/dist/ui/thinkingTracker.js +0 -115
- package/dist/ui/thinkingTracker.js.map +0 -1
- package/dist/ui/toolDisplayAdapter.d.ts +0 -66
- package/dist/ui/toolDisplayAdapter.d.ts.map +0 -1
- package/dist/ui/toolDisplayAdapter.js +0 -356
- package/dist/ui/toolDisplayAdapter.js.map +0 -1
- package/dist/ui/treeVisualizer.d.ts +0 -56
- package/dist/ui/treeVisualizer.d.ts.map +0 -1
- package/dist/ui/treeVisualizer.js +0 -247
- package/dist/ui/treeVisualizer.js.map +0 -1
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { theme } from '../theme.js';
|
|
2
|
+
const ANSI_PATTERN = /\u001B\[[0-?]*[ -/]*[@-~]/g;
|
|
3
|
+
const clampWidth = (width, min = 42, max = 110) => {
|
|
4
|
+
if (!Number.isFinite(width) || !width) {
|
|
5
|
+
return max;
|
|
6
|
+
}
|
|
7
|
+
return Math.max(min, Math.min(max, Math.floor(width)));
|
|
8
|
+
};
|
|
9
|
+
const stripAnsi = (value) => value.replace(ANSI_PATTERN, '');
|
|
10
|
+
const visibleLength = (value) => stripAnsi(value).length;
|
|
11
|
+
const padLine = (content, innerWidth) => {
|
|
12
|
+
const visible = visibleLength(content);
|
|
13
|
+
const padding = Math.max(0, innerWidth - visible);
|
|
14
|
+
return `${theme.ui.border('┃')} ${content}${' '.repeat(padding)} ${theme.ui.border('┃')}`;
|
|
15
|
+
};
|
|
16
|
+
const framedBlock = (lines, width) => {
|
|
17
|
+
const innerWidth = clampWidth(width ? width - 2 : undefined, 32, 96);
|
|
18
|
+
const top = theme.ui.border(`╭${'─'.repeat(innerWidth)}╮`);
|
|
19
|
+
const bottom = theme.ui.border(`╰${'─'.repeat(innerWidth)}╯`);
|
|
20
|
+
const body = lines.map((line) => padLine(line, innerWidth));
|
|
21
|
+
return [top, ...body, bottom].join('\n');
|
|
22
|
+
};
|
|
23
|
+
export const renderSessionFrame = (props) => {
|
|
24
|
+
const versionStr = props.version ? `v${props.version}` : 'live';
|
|
25
|
+
const profile = props.profileLabel || props.profileName || 'Default';
|
|
26
|
+
const modelLabel = props.model;
|
|
27
|
+
const workspace = abbreviatePath(props.workspace, Math.max(16, clampWidth(props.width) - 18));
|
|
28
|
+
const shortcuts = theme.ui.muted('/help · /model · /clear · /quit');
|
|
29
|
+
const lines = [
|
|
30
|
+
`${theme.gradient.cool('⚡ EROSOLAR CLI')} ${theme.ui.muted(versionStr)}`,
|
|
31
|
+
`${theme.ui.muted('Profile')} ${theme.info(profile)}`,
|
|
32
|
+
`${theme.ui.muted('Model')} ${theme.info(modelLabel)} ${theme.ui.muted('via')} ${theme.accent(props.provider)}`,
|
|
33
|
+
`${theme.ui.muted('Workspace')} ${workspace}`,
|
|
34
|
+
`${theme.ui.muted('Shortcuts')} ${shortcuts}`,
|
|
35
|
+
];
|
|
36
|
+
return framedBlock(lines, props.width);
|
|
37
|
+
};
|
|
38
|
+
export const renderLiveFrame = (props) => {
|
|
39
|
+
const label = props.label ?? 'Live stream';
|
|
40
|
+
const workspace = props.workspace
|
|
41
|
+
? `${theme.ui.muted('Workspace')} ${abbreviatePath(props.workspace, 48)}`
|
|
42
|
+
: null;
|
|
43
|
+
const header = `${theme.gradient.cool('▶')} ${theme.info(label)} ${theme.ui.muted('•')} ${theme.info(props.model)} ${theme.ui.muted('@')} ${theme.accent(props.provider)}`;
|
|
44
|
+
const lines = workspace ? [header, workspace] : [header];
|
|
45
|
+
return framedBlock(lines, props.width);
|
|
46
|
+
};
|
|
47
|
+
export const renderDivider = (width, label) => {
|
|
48
|
+
const maxWidth = clampWidth(width, 16, 140);
|
|
49
|
+
if (!label) {
|
|
50
|
+
return theme.ui.muted('─'.repeat(maxWidth));
|
|
51
|
+
}
|
|
52
|
+
const cleanLabel = theme.ui.muted(`[${label}]`);
|
|
53
|
+
const labelLen = visibleLength(cleanLabel);
|
|
54
|
+
const side = Math.max(2, Math.floor((maxWidth - labelLen - 2) / 2));
|
|
55
|
+
const left = '─'.repeat(side);
|
|
56
|
+
const right = '─'.repeat(Math.max(0, maxWidth - side - labelLen - 2));
|
|
57
|
+
return theme.ui.muted(`${left} ${cleanLabel} ${right}`);
|
|
58
|
+
};
|
|
59
|
+
export const renderStatusLine = (parts, width) => {
|
|
60
|
+
const segments = parts
|
|
61
|
+
.filter((part) => part.text.trim())
|
|
62
|
+
.map((part) => colorize(part.text.trim(), part.tone));
|
|
63
|
+
// Join with muted separators for consistent rhythm
|
|
64
|
+
const separator = theme.ui.muted(' · ');
|
|
65
|
+
const joined = segments.join(separator);
|
|
66
|
+
const maxLen = clampWidth(width, 8, 180);
|
|
67
|
+
if (visibleLength(joined) <= maxLen) {
|
|
68
|
+
return joined;
|
|
69
|
+
}
|
|
70
|
+
let result = '';
|
|
71
|
+
for (const segment of segments) {
|
|
72
|
+
const next = result ? `${result}${separator}${segment}` : segment;
|
|
73
|
+
if (visibleLength(next) > maxLen) {
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
result = next;
|
|
77
|
+
}
|
|
78
|
+
return result || segments.slice(0, 1).join('');
|
|
79
|
+
};
|
|
80
|
+
const colorize = (text, tone) => {
|
|
81
|
+
switch (tone) {
|
|
82
|
+
case 'info':
|
|
83
|
+
return theme.info(text);
|
|
84
|
+
case 'warn':
|
|
85
|
+
return theme.warning(text);
|
|
86
|
+
case 'error':
|
|
87
|
+
return theme.error(text);
|
|
88
|
+
case 'success':
|
|
89
|
+
return theme.success(text);
|
|
90
|
+
case 'muted':
|
|
91
|
+
default:
|
|
92
|
+
return theme.ui.muted(text);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
const abbreviatePath = (path, maxLen) => {
|
|
96
|
+
if (!path)
|
|
97
|
+
return '';
|
|
98
|
+
if (visibleLength(path) <= maxLen)
|
|
99
|
+
return path;
|
|
100
|
+
const parts = path.split('/').filter(Boolean);
|
|
101
|
+
if (parts.length <= 2) {
|
|
102
|
+
return `${path.slice(0, maxLen - 3)}...`;
|
|
103
|
+
}
|
|
104
|
+
const first = parts[0] ?? '';
|
|
105
|
+
const last = parts[parts.length - 1] ?? '';
|
|
106
|
+
const middleBudget = Math.max(0, maxLen - visibleLength(first) - visibleLength(last) - 7);
|
|
107
|
+
const middle = middleBudget > 0 ? parts.slice(1, -1).join('/').slice(0, middleBudget) : '';
|
|
108
|
+
return `${first}/.../${middle ? `${middle}/` : ''}${last}`;
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/ui/unified/layout.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "erosolar-cli",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.215",
|
|
4
4
|
"description": "Unified AI agent framework for the command line - Multi-provider support with schema-driven tools, code intelligence, and transparent reasoning",
|
|
5
5
|
"main": "dist/bin/erosolar.js",
|
|
6
6
|
"type": "module",
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FixedInputArea - Claude Code style chat box
|
|
3
|
-
*
|
|
4
|
-
* Simple, clean implementation that keeps the input area fixed at the bottom
|
|
5
|
-
* while output scrolls above. Uses terminal scroll regions properly.
|
|
6
|
-
*
|
|
7
|
-
* Key principles:
|
|
8
|
-
* 1. ONE scroll region - set once at start, reset once at end
|
|
9
|
-
* 2. Protected bottom area - output can never touch it
|
|
10
|
-
* 3. Cursor always at input - no jumping around
|
|
11
|
-
* 4. Minimal ANSI codes - only what's necessary
|
|
12
|
-
*/
|
|
13
|
-
export interface FixedInputAreaConfig {
|
|
14
|
-
/** Number of lines to reserve at the bottom (default: 3) */
|
|
15
|
-
reservedLines?: number;
|
|
16
|
-
/** Stream to write to (default: process.stdout) */
|
|
17
|
-
stream?: NodeJS.WriteStream;
|
|
18
|
-
}
|
|
19
|
-
export declare class FixedInputArea {
|
|
20
|
-
private readonly stream;
|
|
21
|
-
private readonly reservedLines;
|
|
22
|
-
private isActive;
|
|
23
|
-
private inputBuffer;
|
|
24
|
-
private cursorPosition;
|
|
25
|
-
private queuedCommands;
|
|
26
|
-
private statusHint;
|
|
27
|
-
constructor(config?: FixedInputAreaConfig);
|
|
28
|
-
/**
|
|
29
|
-
* Enable the fixed input area.
|
|
30
|
-
* Call this when starting AI response/streaming.
|
|
31
|
-
*/
|
|
32
|
-
enable(): void;
|
|
33
|
-
/**
|
|
34
|
-
* Disable the fixed input area.
|
|
35
|
-
* Call this when AI response/streaming ends.
|
|
36
|
-
*/
|
|
37
|
-
disable(): void;
|
|
38
|
-
/**
|
|
39
|
-
* Render the fixed input area at the bottom.
|
|
40
|
-
* This includes: separator line, input prompt, and status hints.
|
|
41
|
-
*/
|
|
42
|
-
renderInputArea(): void;
|
|
43
|
-
/**
|
|
44
|
-
* Handle character input.
|
|
45
|
-
*/
|
|
46
|
-
handleInput(char: string): void;
|
|
47
|
-
/**
|
|
48
|
-
* Handle backspace.
|
|
49
|
-
*/
|
|
50
|
-
handleBackspace(): void;
|
|
51
|
-
/**
|
|
52
|
-
* Handle delete key.
|
|
53
|
-
*/
|
|
54
|
-
handleDelete(): void;
|
|
55
|
-
/**
|
|
56
|
-
* Handle left arrow.
|
|
57
|
-
*/
|
|
58
|
-
handleLeft(): void;
|
|
59
|
-
/**
|
|
60
|
-
* Handle right arrow.
|
|
61
|
-
*/
|
|
62
|
-
handleRight(): void;
|
|
63
|
-
/**
|
|
64
|
-
* Handle home key.
|
|
65
|
-
*/
|
|
66
|
-
handleHome(): void;
|
|
67
|
-
/**
|
|
68
|
-
* Handle end key.
|
|
69
|
-
*/
|
|
70
|
-
handleEnd(): void;
|
|
71
|
-
/**
|
|
72
|
-
* Handle enter key - queue the current input.
|
|
73
|
-
*/
|
|
74
|
-
handleEnter(): string | null;
|
|
75
|
-
/**
|
|
76
|
-
* Handle clear line (Ctrl+U).
|
|
77
|
-
*/
|
|
78
|
-
handleClearLine(): void;
|
|
79
|
-
/**
|
|
80
|
-
* Get and clear queued commands.
|
|
81
|
-
*/
|
|
82
|
-
getQueuedCommands(): string[];
|
|
83
|
-
/**
|
|
84
|
-
* Get current input buffer (for transferring to readline after disable).
|
|
85
|
-
*/
|
|
86
|
-
getInputBuffer(): string;
|
|
87
|
-
/**
|
|
88
|
-
* Set input buffer (for restoring state).
|
|
89
|
-
*/
|
|
90
|
-
setInputBuffer(value: string): void;
|
|
91
|
-
/**
|
|
92
|
-
* Set status hint to display.
|
|
93
|
-
*/
|
|
94
|
-
setStatusHint(hint: string): void;
|
|
95
|
-
/**
|
|
96
|
-
* Check if the fixed input area is active.
|
|
97
|
-
*/
|
|
98
|
-
isEnabled(): boolean;
|
|
99
|
-
/**
|
|
100
|
-
* Force a refresh of the input area.
|
|
101
|
-
* Call this after external output that might have disrupted the display.
|
|
102
|
-
*/
|
|
103
|
-
refresh(): void;
|
|
104
|
-
private write;
|
|
105
|
-
}
|
|
106
|
-
export declare function getFixedInputArea(): FixedInputArea;
|
|
107
|
-
export declare function resetFixedInputArea(): void;
|
|
108
|
-
//# sourceMappingURL=FixedInputArea.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FixedInputArea.d.ts","sourceRoot":"","sources":["../../src/ui/FixedInputArea.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA6BH,MAAM,WAAW,oBAAoB;IACnC,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;CAC7B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,UAAU,CAAM;gBAEZ,MAAM,GAAE,oBAAyB;IAK7C;;;OAGG;IACH,MAAM,IAAI,IAAI;IAkBd;;;OAGG;IACH,OAAO,IAAI,IAAI;IAmBf;;;OAGG;IACH,eAAe,IAAI,IAAI;IAqDvB;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAa/B;;OAEG;IACH,eAAe,IAAI,IAAI;IAavB;;OAEG;IACH,YAAY,IAAI,IAAI;IAYpB;;OAEG;IACH,UAAU,IAAI,IAAI;IASlB;;OAEG;IACH,WAAW,IAAI,IAAI;IASnB;;OAEG;IACH,UAAU,IAAI,IAAI;IAOlB;;OAEG;IACH,SAAS,IAAI,IAAI;IAOjB;;OAEG;IACH,WAAW,IAAI,MAAM,GAAG,IAAI;IAgB5B;;OAEG;IACH,eAAe,IAAI,IAAI;IAQvB;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAM7B;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQnC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOjC;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;;OAGG;IACH,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,KAAK;CAOd;AAKD,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C"}
|
|
@@ -1,312 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FixedInputArea - Claude Code style chat box
|
|
3
|
-
*
|
|
4
|
-
* Simple, clean implementation that keeps the input area fixed at the bottom
|
|
5
|
-
* while output scrolls above. Uses terminal scroll regions properly.
|
|
6
|
-
*
|
|
7
|
-
* Key principles:
|
|
8
|
-
* 1. ONE scroll region - set once at start, reset once at end
|
|
9
|
-
* 2. Protected bottom area - output can never touch it
|
|
10
|
-
* 3. Cursor always at input - no jumping around
|
|
11
|
-
* 4. Minimal ANSI codes - only what's necessary
|
|
12
|
-
*/
|
|
13
|
-
// ANSI escape codes
|
|
14
|
-
const ESC = '\x1b';
|
|
15
|
-
const CSI = `${ESC}[`;
|
|
16
|
-
const ANSI = {
|
|
17
|
-
// Scroll region: set scrollable area from line `top` to line `bottom`
|
|
18
|
-
setScrollRegion: (top, bottom) => `${CSI}${top};${bottom}r`,
|
|
19
|
-
// Reset scroll region to full screen
|
|
20
|
-
resetScrollRegion: () => `${CSI}r`,
|
|
21
|
-
// Move cursor to specific row and column (1-indexed)
|
|
22
|
-
moveTo: (row, col) => `${CSI}${row};${col}H`,
|
|
23
|
-
// Move cursor to column (1-indexed)
|
|
24
|
-
moveToCol: (col) => `${CSI}${col}G`,
|
|
25
|
-
// Clear from cursor to end of line
|
|
26
|
-
clearToEndOfLine: () => `${CSI}K`,
|
|
27
|
-
// Clear entire line
|
|
28
|
-
clearLine: () => `${CSI}2K`,
|
|
29
|
-
// Save cursor position
|
|
30
|
-
saveCursor: () => `${ESC}7`,
|
|
31
|
-
// Restore cursor position
|
|
32
|
-
restoreCursor: () => `${ESC}8`,
|
|
33
|
-
// Hide cursor
|
|
34
|
-
hideCursor: () => `${CSI}?25l`,
|
|
35
|
-
// Show cursor
|
|
36
|
-
showCursor: () => `${CSI}?25h`,
|
|
37
|
-
};
|
|
38
|
-
export class FixedInputArea {
|
|
39
|
-
stream;
|
|
40
|
-
reservedLines;
|
|
41
|
-
isActive = false;
|
|
42
|
-
inputBuffer = '';
|
|
43
|
-
cursorPosition = 0;
|
|
44
|
-
queuedCommands = [];
|
|
45
|
-
statusHint = '';
|
|
46
|
-
constructor(config = {}) {
|
|
47
|
-
this.stream = config.stream ?? process.stdout;
|
|
48
|
-
this.reservedLines = config.reservedLines ?? 3;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Enable the fixed input area.
|
|
52
|
-
* Call this when starting AI response/streaming.
|
|
53
|
-
*/
|
|
54
|
-
enable() {
|
|
55
|
-
if (this.isActive || !this.stream.isTTY)
|
|
56
|
-
return;
|
|
57
|
-
const rows = this.stream.rows ?? 24;
|
|
58
|
-
const scrollBottom = rows - this.reservedLines;
|
|
59
|
-
// Set scroll region to exclude the bottom reserved lines
|
|
60
|
-
this.write(ANSI.setScrollRegion(1, scrollBottom));
|
|
61
|
-
// Move cursor to bottom of scroll region (where output will flow)
|
|
62
|
-
this.write(ANSI.moveTo(scrollBottom, 1));
|
|
63
|
-
// Render the fixed input area at the bottom
|
|
64
|
-
this.renderInputArea();
|
|
65
|
-
this.isActive = true;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Disable the fixed input area.
|
|
69
|
-
* Call this when AI response/streaming ends.
|
|
70
|
-
*/
|
|
71
|
-
disable() {
|
|
72
|
-
if (!this.isActive)
|
|
73
|
-
return;
|
|
74
|
-
// Reset scroll region to full screen
|
|
75
|
-
this.write(ANSI.resetScrollRegion());
|
|
76
|
-
// Clear the reserved area (it will be replaced by normal prompt)
|
|
77
|
-
const rows = this.stream.rows ?? 24;
|
|
78
|
-
for (let i = 0; i < this.reservedLines; i++) {
|
|
79
|
-
this.write(ANSI.moveTo(rows - i, 1));
|
|
80
|
-
this.write(ANSI.clearLine());
|
|
81
|
-
}
|
|
82
|
-
// Move cursor to the bottom
|
|
83
|
-
this.write(ANSI.moveTo(rows, 1));
|
|
84
|
-
this.isActive = false;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Render the fixed input area at the bottom.
|
|
88
|
-
* This includes: separator line, input prompt, and status hints.
|
|
89
|
-
*/
|
|
90
|
-
renderInputArea() {
|
|
91
|
-
if (!this.stream.isTTY)
|
|
92
|
-
return;
|
|
93
|
-
const rows = this.stream.rows ?? 24;
|
|
94
|
-
const cols = this.stream.columns ?? 80;
|
|
95
|
-
// Save cursor position (we're in the scroll region)
|
|
96
|
-
this.write(ANSI.saveCursor());
|
|
97
|
-
// Line 1 of reserved area: Separator
|
|
98
|
-
const separatorRow = rows - this.reservedLines + 1;
|
|
99
|
-
this.write(ANSI.moveTo(separatorRow, 1));
|
|
100
|
-
this.write(ANSI.clearLine());
|
|
101
|
-
const separatorWidth = Math.min(cols - 2, 60);
|
|
102
|
-
this.write('─'.repeat(separatorWidth));
|
|
103
|
-
// Line 2 of reserved area: Input prompt
|
|
104
|
-
const inputRow = separatorRow + 1;
|
|
105
|
-
this.write(ANSI.moveTo(inputRow, 1));
|
|
106
|
-
this.write(ANSI.clearLine());
|
|
107
|
-
this.write('> ');
|
|
108
|
-
// Display input buffer (truncate if too long)
|
|
109
|
-
const maxInputWidth = cols - 4;
|
|
110
|
-
let displayInput = this.inputBuffer;
|
|
111
|
-
if (displayInput.length > maxInputWidth) {
|
|
112
|
-
displayInput = '…' + displayInput.slice(-(maxInputWidth - 1));
|
|
113
|
-
}
|
|
114
|
-
this.write(displayInput);
|
|
115
|
-
// Line 3 of reserved area: Status hints
|
|
116
|
-
const statusRow = inputRow + 1;
|
|
117
|
-
this.write(ANSI.moveTo(statusRow, 1));
|
|
118
|
-
this.write(ANSI.clearLine());
|
|
119
|
-
// Build status line
|
|
120
|
-
const hints = [];
|
|
121
|
-
if (this.queuedCommands.length > 0) {
|
|
122
|
-
hints.push(`${this.queuedCommands.length} queued`);
|
|
123
|
-
}
|
|
124
|
-
hints.push('Esc: cancel', 'Enter: queue');
|
|
125
|
-
if (this.statusHint) {
|
|
126
|
-
hints.unshift(this.statusHint);
|
|
127
|
-
}
|
|
128
|
-
this.write(` ${hints.join(' · ')}`);
|
|
129
|
-
// Position cursor at the input (after "> " and the input text)
|
|
130
|
-
const cursorCol = 3 + Math.min(this.cursorPosition, displayInput.length);
|
|
131
|
-
this.write(ANSI.moveTo(inputRow, cursorCol));
|
|
132
|
-
// Note: We do NOT restore cursor here - we WANT the cursor to stay at the input
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Handle character input.
|
|
136
|
-
*/
|
|
137
|
-
handleInput(char) {
|
|
138
|
-
// Insert character at cursor position
|
|
139
|
-
this.inputBuffer =
|
|
140
|
-
this.inputBuffer.slice(0, this.cursorPosition) +
|
|
141
|
-
char +
|
|
142
|
-
this.inputBuffer.slice(this.cursorPosition);
|
|
143
|
-
this.cursorPosition += char.length;
|
|
144
|
-
if (this.isActive) {
|
|
145
|
-
this.renderInputArea();
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Handle backspace.
|
|
150
|
-
*/
|
|
151
|
-
handleBackspace() {
|
|
152
|
-
if (this.cursorPosition > 0) {
|
|
153
|
-
this.inputBuffer =
|
|
154
|
-
this.inputBuffer.slice(0, this.cursorPosition - 1) +
|
|
155
|
-
this.inputBuffer.slice(this.cursorPosition);
|
|
156
|
-
this.cursorPosition--;
|
|
157
|
-
if (this.isActive) {
|
|
158
|
-
this.renderInputArea();
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Handle delete key.
|
|
164
|
-
*/
|
|
165
|
-
handleDelete() {
|
|
166
|
-
if (this.cursorPosition < this.inputBuffer.length) {
|
|
167
|
-
this.inputBuffer =
|
|
168
|
-
this.inputBuffer.slice(0, this.cursorPosition) +
|
|
169
|
-
this.inputBuffer.slice(this.cursorPosition + 1);
|
|
170
|
-
if (this.isActive) {
|
|
171
|
-
this.renderInputArea();
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Handle left arrow.
|
|
177
|
-
*/
|
|
178
|
-
handleLeft() {
|
|
179
|
-
if (this.cursorPosition > 0) {
|
|
180
|
-
this.cursorPosition--;
|
|
181
|
-
if (this.isActive) {
|
|
182
|
-
this.renderInputArea();
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Handle right arrow.
|
|
188
|
-
*/
|
|
189
|
-
handleRight() {
|
|
190
|
-
if (this.cursorPosition < this.inputBuffer.length) {
|
|
191
|
-
this.cursorPosition++;
|
|
192
|
-
if (this.isActive) {
|
|
193
|
-
this.renderInputArea();
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Handle home key.
|
|
199
|
-
*/
|
|
200
|
-
handleHome() {
|
|
201
|
-
this.cursorPosition = 0;
|
|
202
|
-
if (this.isActive) {
|
|
203
|
-
this.renderInputArea();
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Handle end key.
|
|
208
|
-
*/
|
|
209
|
-
handleEnd() {
|
|
210
|
-
this.cursorPosition = this.inputBuffer.length;
|
|
211
|
-
if (this.isActive) {
|
|
212
|
-
this.renderInputArea();
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Handle enter key - queue the current input.
|
|
217
|
-
*/
|
|
218
|
-
handleEnter() {
|
|
219
|
-
const input = this.inputBuffer.trim();
|
|
220
|
-
if (input) {
|
|
221
|
-
this.queuedCommands.push(input);
|
|
222
|
-
this.inputBuffer = '';
|
|
223
|
-
this.cursorPosition = 0;
|
|
224
|
-
if (this.isActive) {
|
|
225
|
-
this.renderInputArea();
|
|
226
|
-
}
|
|
227
|
-
return input;
|
|
228
|
-
}
|
|
229
|
-
return null;
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Handle clear line (Ctrl+U).
|
|
233
|
-
*/
|
|
234
|
-
handleClearLine() {
|
|
235
|
-
this.inputBuffer = '';
|
|
236
|
-
this.cursorPosition = 0;
|
|
237
|
-
if (this.isActive) {
|
|
238
|
-
this.renderInputArea();
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Get and clear queued commands.
|
|
243
|
-
*/
|
|
244
|
-
getQueuedCommands() {
|
|
245
|
-
const commands = this.queuedCommands;
|
|
246
|
-
this.queuedCommands = [];
|
|
247
|
-
return commands;
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Get current input buffer (for transferring to readline after disable).
|
|
251
|
-
*/
|
|
252
|
-
getInputBuffer() {
|
|
253
|
-
return this.inputBuffer;
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Set input buffer (for restoring state).
|
|
257
|
-
*/
|
|
258
|
-
setInputBuffer(value) {
|
|
259
|
-
this.inputBuffer = value;
|
|
260
|
-
this.cursorPosition = value.length;
|
|
261
|
-
if (this.isActive) {
|
|
262
|
-
this.renderInputArea();
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Set status hint to display.
|
|
267
|
-
*/
|
|
268
|
-
setStatusHint(hint) {
|
|
269
|
-
this.statusHint = hint;
|
|
270
|
-
if (this.isActive) {
|
|
271
|
-
this.renderInputArea();
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* Check if the fixed input area is active.
|
|
276
|
-
*/
|
|
277
|
-
isEnabled() {
|
|
278
|
-
return this.isActive;
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Force a refresh of the input area.
|
|
282
|
-
* Call this after external output that might have disrupted the display.
|
|
283
|
-
*/
|
|
284
|
-
refresh() {
|
|
285
|
-
if (this.isActive) {
|
|
286
|
-
this.renderInputArea();
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
write(data) {
|
|
290
|
-
try {
|
|
291
|
-
this.stream.write(data);
|
|
292
|
-
}
|
|
293
|
-
catch {
|
|
294
|
-
// Ignore write errors
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
// Singleton instance
|
|
299
|
-
let instance = null;
|
|
300
|
-
export function getFixedInputArea() {
|
|
301
|
-
if (!instance) {
|
|
302
|
-
instance = new FixedInputArea();
|
|
303
|
-
}
|
|
304
|
-
return instance;
|
|
305
|
-
}
|
|
306
|
-
export function resetFixedInputArea() {
|
|
307
|
-
if (instance?.isEnabled()) {
|
|
308
|
-
instance.disable();
|
|
309
|
-
}
|
|
310
|
-
instance = null;
|
|
311
|
-
}
|
|
312
|
-
//# sourceMappingURL=FixedInputArea.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FixedInputArea.js","sourceRoot":"","sources":["../../src/ui/FixedInputArea.ts"],"names":[],"mappings":"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"}
|