centaurus-cli 2.9.4 → 2.9.6

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 (98) hide show
  1. package/dist/cli-adapter.d.ts +29 -4
  2. package/dist/cli-adapter.d.ts.map +1 -1
  3. package/dist/cli-adapter.js +700 -121
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/config/slash-commands.d.ts.map +1 -1
  6. package/dist/config/slash-commands.js +7 -0
  7. package/dist/config/slash-commands.js.map +1 -1
  8. package/dist/context/context-manager.d.ts +10 -0
  9. package/dist/context/context-manager.d.ts.map +1 -1
  10. package/dist/context/context-manager.js +17 -0
  11. package/dist/context/context-manager.js.map +1 -1
  12. package/dist/context/handlers/docker-handler.d.ts +7 -1
  13. package/dist/context/handlers/docker-handler.d.ts.map +1 -1
  14. package/dist/context/handlers/docker-handler.js +89 -16
  15. package/dist/context/handlers/docker-handler.js.map +1 -1
  16. package/dist/context/handlers/ssh-handler.d.ts +47 -1
  17. package/dist/context/handlers/ssh-handler.d.ts.map +1 -1
  18. package/dist/context/handlers/ssh-handler.js +546 -73
  19. package/dist/context/handlers/ssh-handler.js.map +1 -1
  20. package/dist/context/handlers/wsl-handler.d.ts +5 -1
  21. package/dist/context/handlers/wsl-handler.d.ts.map +1 -1
  22. package/dist/context/handlers/wsl-handler.js +24 -6
  23. package/dist/context/handlers/wsl-handler.js.map +1 -1
  24. package/dist/context/subshell-handler.d.ts +8 -2
  25. package/dist/context/subshell-handler.d.ts.map +1 -1
  26. package/dist/index.js +12 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/services/checkpoint-manager.d.ts +162 -0
  29. package/dist/services/checkpoint-manager.d.ts.map +1 -0
  30. package/dist/services/checkpoint-manager.js +926 -0
  31. package/dist/services/checkpoint-manager.js.map +1 -0
  32. package/dist/services/local-chat-storage.d.ts +3 -1
  33. package/dist/services/local-chat-storage.d.ts.map +1 -1
  34. package/dist/services/local-chat-storage.js +8 -3
  35. package/dist/services/local-chat-storage.js.map +1 -1
  36. package/dist/tools/background-command.d.ts.map +1 -1
  37. package/dist/tools/background-command.js +132 -24
  38. package/dist/tools/background-command.js.map +1 -1
  39. package/dist/tools/command.d.ts.map +1 -1
  40. package/dist/tools/command.js +106 -42
  41. package/dist/tools/command.js.map +1 -1
  42. package/dist/tools/create-image.d.ts.map +1 -1
  43. package/dist/tools/create-image.js +43 -18
  44. package/dist/tools/create-image.js.map +1 -1
  45. package/dist/tools/file-ops.d.ts.map +1 -1
  46. package/dist/tools/file-ops.js +12 -12
  47. package/dist/tools/file-ops.js.map +1 -1
  48. package/dist/tools/get-diff.d.ts +9 -45
  49. package/dist/tools/get-diff.d.ts.map +1 -1
  50. package/dist/tools/get-diff.js +288 -171
  51. package/dist/tools/get-diff.js.map +1 -1
  52. package/dist/tools/grep-search.d.ts +1 -1
  53. package/dist/tools/grep-search.d.ts.map +1 -1
  54. package/dist/tools/grep-search.js +80 -1
  55. package/dist/tools/grep-search.js.map +1 -1
  56. package/dist/tools/types.d.ts +3 -0
  57. package/dist/tools/types.d.ts.map +1 -1
  58. package/dist/ui/components/App.d.ts +8 -0
  59. package/dist/ui/components/App.d.ts.map +1 -1
  60. package/dist/ui/components/App.js +256 -66
  61. package/dist/ui/components/App.js.map +1 -1
  62. package/dist/ui/components/Breadcrumbs.d.ts.map +1 -1
  63. package/dist/ui/components/Breadcrumbs.js +22 -2
  64. package/dist/ui/components/Breadcrumbs.js.map +1 -1
  65. package/dist/ui/components/ConfirmPrompt.d.ts +2 -0
  66. package/dist/ui/components/ConfirmPrompt.d.ts.map +1 -1
  67. package/dist/ui/components/ConfirmPrompt.js +8 -3
  68. package/dist/ui/components/ConfirmPrompt.js.map +1 -1
  69. package/dist/ui/components/InputBox.d.ts +6 -0
  70. package/dist/ui/components/InputBox.d.ts.map +1 -1
  71. package/dist/ui/components/InputBox.js +188 -23
  72. package/dist/ui/components/InputBox.js.map +1 -1
  73. package/dist/ui/components/InteractiveShell.d.ts +2 -0
  74. package/dist/ui/components/InteractiveShell.d.ts.map +1 -1
  75. package/dist/ui/components/InteractiveShell.js +88 -26
  76. package/dist/ui/components/InteractiveShell.js.map +1 -1
  77. package/dist/ui/components/KeyboardHelp.d.ts.map +1 -1
  78. package/dist/ui/components/KeyboardHelp.js +14 -6
  79. package/dist/ui/components/KeyboardHelp.js.map +1 -1
  80. package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
  81. package/dist/ui/components/ToolExecutionMessage.js +35 -16
  82. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  83. package/dist/utils/ansi-encoder.d.ts +5 -0
  84. package/dist/utils/ansi-encoder.d.ts.map +1 -1
  85. package/dist/utils/ansi-encoder.js +12 -5
  86. package/dist/utils/ansi-encoder.js.map +1 -1
  87. package/dist/utils/editor-utils.d.ts +14 -0
  88. package/dist/utils/editor-utils.d.ts.map +1 -1
  89. package/dist/utils/editor-utils.js +172 -0
  90. package/dist/utils/editor-utils.js.map +1 -1
  91. package/dist/utils/input-classifier.d.ts.map +1 -1
  92. package/dist/utils/input-classifier.js +2 -1
  93. package/dist/utils/input-classifier.js.map +1 -1
  94. package/dist/utils/terminal-output.d.ts +3 -1
  95. package/dist/utils/terminal-output.d.ts.map +1 -1
  96. package/dist/utils/terminal-output.js +235 -195
  97. package/dist/utils/terminal-output.js.map +1 -1
  98. package/package.json +3 -1
@@ -7,71 +7,6 @@
7
7
  * This module provides functions to correctly process such output so that only the
8
8
  * final rendered state is preserved (not intermediate states that should be overwritten).
9
9
  */
10
- /**
11
- * Process backspace and carriage return characters to simulate terminal buffer behavior.
12
- *
13
- * This is critical for proper display of progress bars and spinners:
14
- * - \x08 (backspace) moves cursor left
15
- * - \r (carriage return) moves cursor to start of line (overwrites from beginning)
16
- * - \n (newline) moves to next line
17
- *
18
- * @param input - String containing control characters
19
- * @returns String with control characters applied (simulating terminal display)
20
- */
21
- function processBackspaces(input) {
22
- if (!input.includes('\x08') && !input.includes('\r'))
23
- return input;
24
- // Process the string character by character, simulating a terminal buffer
25
- const lines = [];
26
- let currentLine = '';
27
- let cursorPos = 0;
28
- for (let i = 0; i < input.length; i++) {
29
- const char = input[i];
30
- if (char === '\x08') {
31
- // Backspace: move cursor left (but not past beginning)
32
- if (cursorPos > 0) {
33
- cursorPos--;
34
- }
35
- }
36
- else if (char === '\r') {
37
- // Carriage return: reset cursor to start of line
38
- // This simulates progress bars that overwrite the same line
39
- // DO NOT append \r to output - just reset cursor position
40
- cursorPos = 0;
41
- }
42
- else if (char === '\n') {
43
- // Newline: finalize current line and start new one
44
- // Trim to cursor position to remove orphaned content after \r overwrites
45
- if (cursorPos < currentLine.length) {
46
- currentLine = currentLine.substring(0, cursorPos);
47
- }
48
- lines.push(currentLine);
49
- currentLine = '';
50
- cursorPos = 0;
51
- }
52
- else {
53
- // Regular character: insert/overwrite at cursor position
54
- if (cursorPos < currentLine.length) {
55
- // Overwrite existing character
56
- currentLine = currentLine.substring(0, cursorPos) + char + currentLine.substring(cursorPos + 1);
57
- }
58
- else {
59
- // Append to line
60
- currentLine += char;
61
- }
62
- cursorPos++;
63
- }
64
- }
65
- // Add any remaining content in the current line
66
- if (currentLine.length > 0) {
67
- // Trim to cursor position in case of trailing orphaned content
68
- if (cursorPos < currentLine.length) {
69
- currentLine = currentLine.substring(0, cursorPos);
70
- }
71
- lines.push(currentLine);
72
- }
73
- return lines.join('\n');
74
- }
75
10
  /**
76
11
  * Process terminal output to properly handle carriage returns and ANSI sequences.
77
12
  *
@@ -84,188 +19,293 @@ function processBackspaces(input) {
84
19
  * @param raw - Raw terminal output with potential \r and ANSI sequences
85
20
  * @returns Processed output with only the final rendered state
86
21
  */
87
- export function processTerminalOutput(raw) {
22
+ export function processTerminalOutput(raw, options) {
88
23
  if (!raw)
89
24
  return '';
90
- // Virtual Terminal Emulator Approach
91
- // We maintain a virtual screen buffer and process escape sequences properly
92
- // This simulates how a real terminal would render the output
93
- const SCREEN_ROWS = 500; // Large enough to capture scrollback
94
- const SCREEN_COLS = 200; // Wide enough for most outputs
95
- // Initialize screen buffer - array of strings representing each row
25
+ const SCREEN_ROWS = 500;
26
+ // const SCREEN_COLS = 200; // Dynamic columns not needed for array-based storage
27
+ // Initialize screen buffer - array of arrays of Cells
28
+ // We use a sparse approach: rows are created as needed
96
29
  const screen = [];
30
+ // Ensure initial rows exist
97
31
  for (let i = 0; i < SCREEN_ROWS; i++) {
98
- screen[i] = '';
32
+ screen[i] = [];
99
33
  }
100
34
  let cursorRow = 0;
101
35
  let cursorCol = 0;
102
- let maxRowUsed = 0; // Track the highest row we've written to
103
- // First, strip sequences we want to completely ignore (don't affect cursor or content)
36
+ let maxRowUsed = 0;
37
+ let currentStyle = ''; // Current accumulated ANSI style sequence
38
+ // Pre-processing: Strip only non-SGR sequences that we don't handle
39
+ // We keep \x1b[...m (SGR) for colors
104
40
  let input = raw
105
- // OSC sequences (Operating System Commands): \x1b]...\x07 or \x1b]...\x1b\\
41
+ // OSC sequences (\x1b] ... \x07 or \x1b\) - Robustly consume until terminator
106
42
  .replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g, '')
107
- .replace(/\x1b\][^\x07]*\x07/g, '')
108
- // Alternate screen buffer - we don't support alternate screens
109
- .replace(/\x1b\[\?(?:1049|47)[hl]/g, '')
110
- // Hide/show cursor - purely visual
111
- .replace(/\x1b\[\?\d+[hl]/g, '')
112
- // DEC private mode sequences
113
- .replace(/\x1b\[\?[\d;]+[a-zA-Z]/g, '')
114
- // Set/reset mode
115
- .replace(/\x1b\[\d*[hl]/g, '')
116
- // SGR (colors/styles) - strip for clean text output
117
- .replace(/\x1b\[[\d;]*m/g, '')
118
- .replace(/\x1b\[m/g, '')
119
- // Cursor save/restore - we'll handle positioning manually
120
- .replace(/\x1b\[[su]/g, '')
121
- .replace(/\x1b[78]/g, '')
122
- // Scroll up/down
123
- .replace(/\x1b\[\d*[ST]/g, '')
124
- // Character set designations
43
+ // Character set designations (e.g. \x1b(0)
125
44
  .replace(/\x1b[()#][0-9A-Za-z]/g, '')
126
- .replace(/\x1b[DME78=\>]/g, '')
127
- // BEL and Form Feed
45
+ // BEL and Form Feed (ignore for layout)
128
46
  .replace(/\x07/g, '')
129
47
  .replace(/\x0C/g, '')
130
- // DEL character
48
+ // DEL
131
49
  .replace(/\x7F/g, '');
132
- // Now process the input character by character with escape sequence handling
133
50
  let i = 0;
134
51
  while (i < input.length) {
135
52
  // Check for escape sequences
136
- if (input[i] === '\x1b' && i + 1 < input.length && input[i + 1] === '[') {
137
- // CSI sequence - parse it
138
- let j = i + 2;
139
- let params = '';
140
- // Collect parameters (digits and semicolons)
141
- while (j < input.length && /[\d;]/.test(input[j])) {
142
- params += input[j];
143
- j++;
144
- }
145
- // Get the command character
146
- const cmd = j < input.length ? input[j] : '';
147
- // Parse numeric parameters
148
- const numbers = params.split(';').map(s => parseInt(s) || 0);
149
- switch (cmd) {
150
- case 'H': // Cursor position
151
- case 'f': // Cursor position (alternate)
152
- // \x1b[row;colH or \x1b[H (home)
153
- cursorRow = Math.max(0, (numbers[0] || 1) - 1); // 1-indexed to 0-indexed
154
- cursorCol = Math.max(0, (numbers[1] || 1) - 1);
155
- break;
156
- case 'A': // Cursor up
157
- cursorRow = Math.max(0, cursorRow - (numbers[0] || 1));
158
- break;
159
- case 'B': // Cursor down
160
- cursorRow = cursorRow + (numbers[0] || 1);
161
- break;
162
- case 'C': // Cursor right
163
- cursorCol = cursorCol + (numbers[0] || 1);
164
- break;
165
- case 'D': // Cursor left
166
- cursorCol = Math.max(0, cursorCol - (numbers[0] || 1));
167
- break;
168
- case 'J': // Erase in display
169
- // 0 = cursor to end, 1 = start to cursor, 2 = entire screen, 3 = scrollback
170
- // For our purposes, just ignore - we want to keep all content
171
- break;
172
- case 'K': // Erase in line
173
- {
174
- const mode = numbers[0] || 0;
175
- const line = screen[cursorRow] || '';
176
- if (mode === 0) {
177
- // Erase from cursor to end of line
178
- screen[cursorRow] = line.substring(0, cursorCol);
179
- }
180
- else if (mode === 1) {
181
- // Erase from start to cursor
182
- screen[cursorRow] = ' '.repeat(cursorCol) + line.substring(cursorCol);
183
- }
184
- else if (mode === 2) {
185
- // Erase entire line
186
- screen[cursorRow] = '';
187
- }
188
- }
189
- break;
190
- case 'X': // Erase characters
191
- {
192
- const count = numbers[0] || 1;
193
- const line = screen[cursorRow] || '';
194
- // Replace 'count' characters with spaces starting at cursor
195
- screen[cursorRow] = line.substring(0, cursorCol) +
196
- ' '.repeat(count) +
197
- line.substring(cursorCol + count);
53
+ if (input[i] === '\x1b') {
54
+ // Check for CSI sequence: ESC [
55
+ if (i + 1 < input.length && input[i + 1] === '[') {
56
+ let j = i + 2;
57
+ // 1. Parameter Bytes (0x30-0x3F): 0-9:;<=>?
58
+ // These includes digits, semicolons, and private mode markers like ? and >
59
+ let params = '';
60
+ while (j < input.length && input.charCodeAt(j) >= 0x30 && input.charCodeAt(j) <= 0x3F) {
61
+ params += input[j];
62
+ j++;
63
+ }
64
+ // 2. Intermediate Bytes (0x20-0x2F): !"#$%&'()*+,-./
65
+ while (j < input.length && input.charCodeAt(j) >= 0x20 && input.charCodeAt(j) <= 0x2F) {
66
+ // We consume but ignore intermediates for now as we don't support them
67
+ j++;
68
+ }
69
+ // 3. Final Byte (0x40-0x7E): @A-Z[\]^_`a-z{|}~
70
+ if (j < input.length && input.charCodeAt(j) >= 0x40 && input.charCodeAt(j) <= 0x7E) {
71
+ const cmd = input[j];
72
+ // Parse parameters only if they exist and aren't just private markers
73
+ // We filter out ?, > etc for the numeric splitting to avoid NaN
74
+ // but keep them in 'params' string for detection if needed.
75
+ const cleanParams = params.replace(/[<>=?]/g, '');
76
+ const numbers = cleanParams.split(';').map(s => parseInt(s) || 0);
77
+ // Default to 1 if missing, for most commands (1-based)
78
+ const n = numbers[0] || 1;
79
+ const m = numbers[1] || 1;
80
+ // Handle supported commands
81
+ switch (cmd) {
82
+ case 'm': // SGR - Select Graphic Rendition (Colors)
83
+ if (params === '' || params === '0' || (cleanParams === '0' && numbers.length === 1)) {
84
+ currentStyle = ''; // Reset
85
+ }
86
+ else {
87
+ // Add to current style.
88
+ // Ideally we should be smarter about merging, but appending works.
89
+ if (numbers.includes(0)) {
90
+ // If sequence contains reset (e.g. 0;1;31), we treat it as reset + others.
91
+ // For simplicity, we just take the whole sequence as the new style
92
+ // since it usually starts with 0 if 0 is present.
93
+ currentStyle = `\x1b[${cleanParams}m`;
94
+ }
95
+ else {
96
+ currentStyle += `\x1b[${cleanParams}m`;
97
+ }
98
+ }
99
+ break;
100
+ case 'H': // CUP - Cursor Position
101
+ case 'f': // HVP - Horizontal and Vertical Position
102
+ // Defaults are 1,1
103
+ cursorRow = Math.max(0, (numbers[0] || 1) - 1);
104
+ cursorCol = Math.max(0, (numbers[1] || 1) - 1);
105
+ break;
106
+ case 'A': // CUU - Cursor Up
107
+ cursorRow = Math.max(0, cursorRow - n);
108
+ break;
109
+ case 'B': // CUD - Cursor Down
110
+ case 'e': // VPR - Vertical Position Relative
111
+ cursorRow = cursorRow + n;
112
+ break;
113
+ case 'C': // CUF - Cursor Forward
114
+ case 'a': // HPR - Horizontal Position Relative
115
+ cursorCol = cursorCol + n;
116
+ break;
117
+ case 'D': // CUB - Cursor Back
118
+ cursorCol = Math.max(0, cursorCol - n);
119
+ break;
120
+ case 'E': // CNL - Cursor Next Line
121
+ cursorRow = cursorRow + n;
122
+ cursorCol = 0;
123
+ break;
124
+ case 'F': // CPL - Cursor Preceding Line
125
+ cursorRow = Math.max(0, cursorRow - n);
126
+ cursorCol = 0;
127
+ break;
128
+ case 'G': // CHA - Cursor Horizontal Absolute
129
+ cursorCol = Math.max(0, n - 1);
130
+ break;
131
+ case 'd': // VPA - Vertical Position Absolute
132
+ cursorRow = Math.max(0, n - 1);
133
+ break;
134
+ case 'K': // EL - Erase in Line
135
+ {
136
+ const mode = numbers[0] || 0;
137
+ if (!screen[cursorRow])
138
+ screen[cursorRow] = [];
139
+ if (mode === 0) { // Cursor to end
140
+ screen[cursorRow].splice(cursorCol);
141
+ }
142
+ else if (mode === 1) { // Start to cursor
143
+ for (let k = 0; k <= cursorCol; k++) {
144
+ if (k < screen[cursorRow].length) {
145
+ screen[cursorRow][k] = { char: ' ', style: '' };
146
+ }
147
+ }
148
+ }
149
+ else if (mode === 2) { // Entire line
150
+ screen[cursorRow] = [];
151
+ }
152
+ }
153
+ break;
154
+ case 'J': // ED - Erase in Display
155
+ {
156
+ const mode = numbers[0] || 0;
157
+ if (mode === 0) {
158
+ // Erase from cursor to end of display
159
+ if (screen[cursorRow])
160
+ screen[cursorRow].splice(cursorCol);
161
+ for (let r = cursorRow + 1; r <= maxRowUsed; r++) {
162
+ screen[r] = [];
163
+ }
164
+ maxRowUsed = cursorRow;
165
+ }
166
+ else if (mode === 1) {
167
+ // Erase from start of display to cursor
168
+ for (let r = 0; r < cursorRow; r++) {
169
+ screen[r] = [];
170
+ }
171
+ if (screen[cursorRow]) {
172
+ for (let c = 0; c <= cursorCol; c++) {
173
+ if (c < screen[cursorRow].length) {
174
+ screen[cursorRow][c] = { char: ' ', style: '' };
175
+ }
176
+ }
177
+ }
178
+ }
179
+ else if (mode === 2 || mode === 3) {
180
+ // Erase entire display (2) or erase display + scrollback (3)
181
+ for (let r = 0; r <= maxRowUsed; r++) {
182
+ screen[r] = [];
183
+ }
184
+ maxRowUsed = cursorRow;
185
+ }
186
+ }
187
+ break;
188
+ // P (DCH), @ (ICH), L (IL), M (DL) - Delete/Insert characters/lines
189
+ // These are complex to implement fully for a buffer-based approach without strict bounds.
190
+ // For now we ignore them to avoid corruption, or we could implement simple versions.
191
+ default:
192
+ // Unknown command, we just consume it (which is the fix for the bug!)
193
+ break;
198
194
  }
199
- break;
200
- default:
201
- // Unknown CSI sequence - skip it
202
- break;
195
+ // Move past the final byte
196
+ i = j + 1;
197
+ continue;
198
+ }
199
+ else {
200
+ // Malformed CSI, treat as plain text if no final byte found?
201
+ // Or just consume what we found?
202
+ // ECMA-48 says if it doesn't end with 0x40-0x7E it's not a valid CSI?
203
+ // But in practice we should probably just treat ESC as a char if not valid.
204
+ }
205
+ }
206
+ // Check for simple ESC sequences (ESC X)
207
+ // e.g. ESC 7 (Save Cursor), ESC 8 (Restore Cursor), ESC M (Reverse Index)
208
+ else if (i + 1 < input.length) {
209
+ // Simple 2-char escape
210
+ const next = input[i + 1];
211
+ // If it is [ it is CSI (handled above)
212
+ // If not, we might want to handle some.
213
+ // However, the main bug is CSI parsing.
214
+ // Let's not be too aggressive with consuming other escapes unless we distinguish them.
215
+ // Valid simple escapes are usually 0x30-0x7E.
203
216
  }
204
- i = j + 1; // Move past the sequence
205
- continue;
206
217
  }
207
- // Handle control characters
208
218
  const char = input[i];
209
219
  if (char === '\r') {
210
- // Carriage return - move to start of line
211
220
  cursorCol = 0;
212
221
  }
213
222
  else if (char === '\n') {
214
- // Newline - move to next line
215
223
  cursorRow++;
216
224
  cursorCol = 0;
217
225
  }
218
- else if (char === '\x08') {
219
- // Backspace - move cursor left
220
- if (cursorCol > 0) {
226
+ else if (char === '\x08') { // Backspace
227
+ if (cursorCol > 0)
221
228
  cursorCol--;
222
- }
223
229
  }
224
230
  else if (char === '\t') {
225
- // Tab - move to next tab stop (every 8 columns)
226
231
  cursorCol = Math.floor(cursorCol / 8 + 1) * 8;
227
232
  }
228
233
  else if (char >= ' ' || char === '\x00') {
229
- // Skip null bytes
230
234
  if (char === '\x00') {
231
235
  i++;
232
236
  continue;
233
237
  }
234
- // Regular printable character - write to screen
235
- // Ensure we have enough rows
238
+ // Ensure row exists
236
239
  while (cursorRow >= screen.length) {
237
- screen.push('');
240
+ screen.push([]);
238
241
  }
239
- // Ensure line is long enough
240
- const line = screen[cursorRow];
241
- if (cursorCol > line.length) {
242
- screen[cursorRow] = line + ' '.repeat(cursorCol - line.length);
242
+ if (!screen[cursorRow])
243
+ screen[cursorRow] = [];
244
+ // Pad with spaces if needed
245
+ while (screen[cursorRow].length < cursorCol) {
246
+ screen[cursorRow].push({ char: ' ', style: '' });
243
247
  }
244
- // Write character
245
- const currentLine = screen[cursorRow];
246
- screen[cursorRow] = currentLine.substring(0, cursorCol) + char + currentLine.substring(cursorCol + 1);
248
+ // Write cell with current style
249
+ screen[cursorRow][cursorCol] = { char: char, style: currentStyle };
247
250
  cursorCol++;
248
- // Track max row
249
- if (cursorRow > maxRowUsed) {
251
+ if (cursorRow > maxRowUsed)
250
252
  maxRowUsed = cursorRow;
251
- }
252
253
  }
253
- // Skip other control characters (0x01-0x1A except those handled above)
254
254
  i++;
255
255
  }
256
- // Extract the used portion of the screen
256
+ // ... (previous code)
257
+ // Render to string with optimization
257
258
  const outputLines = [];
259
+ let lastRenderedStyle = '';
258
260
  for (let row = 0; row <= maxRowUsed; row++) {
259
- outputLines.push((screen[row] || '').trimEnd());
261
+ let lineStr = '';
262
+ const rowCells = screen[row] || [];
263
+ // Ensure we process up to cursor column if this is the cursor row
264
+ // This ensures the cursor is drawn even if it's past the end of text
265
+ const effectiveLength = (options?.highlightCursor && row === cursorRow)
266
+ ? Math.max(rowCells.length, cursorCol + 1)
267
+ : rowCells.length;
268
+ for (let col = 0; col < effectiveLength; col++) {
269
+ let cell = rowCells[col] || { char: ' ', style: '' };
270
+ // Apply cursor highlighting
271
+ if (options?.highlightCursor && row === cursorRow && col === cursorCol) {
272
+ // Invert colors for cursor
273
+ // Standard ANSI invert is 7
274
+ // We append it to the current style
275
+ // If style is empty, it becomes \x1b[7m
276
+ // If style is \x1b[31m, it becomes \x1b[31m\x1b[7m
277
+ // We create a temporary cell for rendering
278
+ cell = {
279
+ char: cell.char || ' ', // Ensure visible char for cursor block
280
+ style: cell.style + '\x1b[7m'
281
+ };
282
+ }
283
+ // If style changed, emit ANSI code
284
+ if (cell.style !== lastRenderedStyle) {
285
+ if (cell.style === '') {
286
+ lineStr += '\x1b[0m';
287
+ }
288
+ else {
289
+ lineStr += '\x1b[0m' + cell.style;
290
+ }
291
+ lastRenderedStyle = cell.style;
292
+ }
293
+ lineStr += cell.char;
294
+ }
295
+ // Reset at end of line
296
+ if (lastRenderedStyle !== '') {
297
+ lineStr += '\x1b[0m';
298
+ lastRenderedStyle = '';
299
+ }
300
+ outputLines.push(lineStr);
260
301
  }
261
- // Join lines and clean up
262
302
  let result = outputLines.join('\n');
263
- // Clean up excessive newlines (max 2 consecutive)
303
+ // Cleanup
264
304
  result = result.replace(/\n{3,}/g, '\n\n');
265
- // Remove leading empty lines
266
305
  result = result.replace(/^\n+/, '');
267
- // Trim trailing whitespace
268
306
  result = result.trimEnd();
307
+ // Ensure final reset
308
+ result += '\x1b[0m';
269
309
  return result;
270
310
  }
271
311
  //# sourceMappingURL=terminal-output.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-output.js","sourceRoot":"","sources":["../../src/utils/terminal-output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal-output.js","sourceRoot":"","sources":["../../src/utils/terminal-output.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "centaurus-cli",
3
- "version": "2.9.4",
3
+ "version": "2.9.6",
4
4
  "description": "A powerful command-line AI coding assistant with Google Gemini support",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -45,8 +45,10 @@
45
45
  "AUTH_FLOW.md"
46
46
  ],
47
47
  "dependencies": {
48
+ "@anthropic-ai/sdk": "^0.74.0",
48
49
  "@crosscopy/clipboard": "^0.2.8",
49
50
  "@homebridge/node-pty-prebuilt-multiarch": "^0.13.1",
51
+ "@huggingface/transformers": "^3.8.1",
50
52
  "@modelcontextprotocol/sdk": "^1.24.2",
51
53
  "axios": "^1.12.2",
52
54
  "boxen": "^8.0.1",