centaurus-cli 2.7.3 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/cli-adapter.d.ts +2 -0
  2. package/dist/cli-adapter.d.ts.map +1 -1
  3. package/dist/cli-adapter.js +46 -4
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/context/handlers/wsl-handler.d.ts.map +1 -1
  6. package/dist/context/handlers/wsl-handler.js +2 -1
  7. package/dist/context/handlers/wsl-handler.js.map +1 -1
  8. package/dist/index.js +3 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/services/ai-service-client.d.ts.map +1 -1
  11. package/dist/services/ai-service-client.js +20 -0
  12. package/dist/services/ai-service-client.js.map +1 -1
  13. package/dist/tools/file-ops.d.ts.map +1 -1
  14. package/dist/tools/file-ops.js +13 -3
  15. package/dist/tools/file-ops.js.map +1 -1
  16. package/dist/ui/components/App.d.ts +1 -0
  17. package/dist/ui/components/App.d.ts.map +1 -1
  18. package/dist/ui/components/App.js +73 -74
  19. package/dist/ui/components/App.js.map +1 -1
  20. package/dist/ui/components/InteractiveShell.d.ts +2 -1
  21. package/dist/ui/components/InteractiveShell.d.ts.map +1 -1
  22. package/dist/ui/components/InteractiveShell.js +41 -106
  23. package/dist/ui/components/InteractiveShell.js.map +1 -1
  24. package/dist/ui/components/MarkdownRenderer.d.ts.map +1 -1
  25. package/dist/ui/components/MarkdownRenderer.js +12 -8
  26. package/dist/ui/components/MarkdownRenderer.js.map +1 -1
  27. package/dist/ui/components/MessageDisplay.d.ts.map +1 -1
  28. package/dist/ui/components/MessageDisplay.js +10 -2
  29. package/dist/ui/components/MessageDisplay.js.map +1 -1
  30. package/dist/ui/components/StreamingMessageDisplay.d.ts.map +1 -1
  31. package/dist/ui/components/StreamingMessageDisplay.js +5 -5
  32. package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
  33. package/dist/utils/editor-utils.d.ts +50 -0
  34. package/dist/utils/editor-utils.d.ts.map +1 -0
  35. package/dist/utils/editor-utils.js +501 -0
  36. package/dist/utils/editor-utils.js.map +1 -0
  37. package/dist/utils/input-classifier.d.ts.map +1 -1
  38. package/dist/utils/input-classifier.js +2 -1
  39. package/dist/utils/input-classifier.js.map +1 -1
  40. package/dist/utils/shell.d.ts +32 -1
  41. package/dist/utils/shell.d.ts.map +1 -1
  42. package/dist/utils/shell.js +97 -161
  43. package/dist/utils/shell.js.map +1 -1
  44. package/dist/utils/syntax-checker.d.ts +24 -0
  45. package/dist/utils/syntax-checker.d.ts.map +1 -0
  46. package/dist/utils/syntax-checker.js +320 -0
  47. package/dist/utils/syntax-checker.js.map +1 -0
  48. package/package.json +4 -3
@@ -1,19 +1,20 @@
1
1
  import * as os from 'os';
2
- import spawn from 'cross-spawn'; // Use cross-spawn for better Windows support
3
2
  import { exec } from 'child_process';
3
+ import { createRequire } from 'module';
4
+ // Use createRequire for ESM compatibility with native modules
5
+ const require = createRequire(import.meta.url);
6
+ const nodePty = require('@homebridge/node-pty-prebuilt-multiarch');
7
+ /**
8
+ * Check if PTY is available on this system
9
+ */
10
+ export function isPtyAvailable() {
11
+ return nodePty !== null;
12
+ }
4
13
  export function killProcessTree(pid, signal) {
5
14
  if (os.platform() === 'win32') {
6
- try {
7
- require('fs').appendFileSync('shell_debug.log', `[${new Date().toISOString()}] Executing taskkill for PID ${pid}\n`);
8
- }
9
- catch (e) { }
10
15
  exec(`taskkill /pid ${pid} /T /F`, (error, stdout, stderr) => {
11
16
  if (error) {
12
- try {
13
- require('fs').appendFileSync('shell_debug.log', `[${new Date().toISOString()}] taskkill failed: ${error.message}\nstderr: ${stderr}\n`);
14
- }
15
- catch (e) { }
16
- // Fallback to normal kill if taskkill fails (e.g. permission issue)
17
+ // Fallback to normal kill if taskkill fails
17
18
  try {
18
19
  process.kill(pid, signal);
19
20
  }
@@ -21,12 +22,6 @@ export function killProcessTree(pid, signal) {
21
22
  // Ignore if process already gone
22
23
  }
23
24
  }
24
- else {
25
- try {
26
- require('fs').appendFileSync('shell_debug.log', `[${new Date().toISOString()}] taskkill success: ${stdout}\n`);
27
- }
28
- catch (e) { }
29
- }
30
25
  });
31
26
  }
32
27
  else {
@@ -48,173 +43,114 @@ export function killProcessTree(pid, signal) {
48
43
  export function getShellCommand() {
49
44
  return os.platform() === 'win32' ? 'powershell.exe' : (process.env.SHELL || '/bin/bash');
50
45
  }
51
- export function executeCommandInteractive(command, cwd, onData, onExit) {
46
+ /**
47
+ * Execute a command using node-pty for full terminal emulation.
48
+ * This provides true PTY support with colors, cursor positioning, and interactive programs.
49
+ */
50
+ export function executePtyCommand(command, cwd, onData, onExit) {
52
51
  const shell = getShellCommand();
53
- // cross-spawn handles the args parsing automatically/safely
54
- const args = os.platform() === 'win32' ? ['-Command', command] : ['-c', command];
55
- const childProcess = spawn(shell, args, {
52
+ const isWindows = os.platform() === 'win32';
53
+ const args = isWindows ? ['-Command', command] : ['-c', command];
54
+ // Get initial terminal dimensions
55
+ const cols = process.stdout.columns || 80;
56
+ const rows = process.stdout.rows || 24;
57
+ // Spawn PTY process
58
+ const ptyProcess = nodePty.spawn(shell, args, {
59
+ name: 'xterm-256color',
60
+ cols,
61
+ rows,
56
62
  cwd,
57
- stdio: ['pipe', 'pipe', 'pipe'], // CRITICAL: All pipes must be open
58
63
  env: {
59
64
  ...process.env,
60
- // Force Unbuffered Output so Python/Ruby print immediately
61
- PYTHONUNBUFFERED: '1',
62
- // Force Color Output (Many tools check this)
65
+ TERM: 'xterm-256color',
66
+ COLORTERM: 'truecolor',
63
67
  FORCE_COLOR: '1',
64
68
  CLICOLOR: '1',
65
- TERM: 'xterm-256color'
66
- }
69
+ PYTHONUNBUFFERED: '1',
70
+ },
71
+ });
72
+ let isRunning = true;
73
+ // Stream data as it comes
74
+ ptyProcess.onData((data) => {
75
+ onData(data);
67
76
  });
68
- // Throttling Logic (Keep this from your previous code)
69
- let buffer = '';
70
- let throttleTimer = null;
71
- const flush = () => {
72
- if (buffer) {
73
- onData(buffer, 'stdout'); // Merge to single stream for UI simplicity
74
- buffer = '';
77
+ // Handle exit
78
+ ptyProcess.onExit(({ exitCode }) => {
79
+ isRunning = false;
80
+ if (onExit) {
81
+ onExit(exitCode);
75
82
  }
76
- throttleTimer = null;
77
- };
78
- const handleData = (data) => {
79
- buffer += data.toString();
80
- if (!throttleTimer)
81
- throttleTimer = setTimeout(flush, 50); // 50ms debounce
82
- };
83
- childProcess.stdout?.on('data', handleData);
84
- childProcess.stderr?.on('data', handleData); // Merge stderr so user sees errors inline
85
- childProcess.on('close', (code) => {
86
- if (throttleTimer)
87
- clearTimeout(throttleTimer);
88
- flush();
89
- if (onExit)
90
- onExit(code ?? 0);
91
83
  });
92
84
  return {
93
- process: childProcess,
94
- // Simple write wrapper
95
- write: (input) => {
96
- if (childProcess.stdin && !childProcess.stdin.destroyed) {
97
- childProcess.stdin.write(input);
85
+ write: (data) => {
86
+ if (isRunning) {
87
+ ptyProcess.write(data);
88
+ }
89
+ },
90
+ resize: (cols, rows) => {
91
+ if (isRunning) {
92
+ ptyProcess.resize(cols, rows);
98
93
  }
99
94
  },
100
95
  kill: () => {
101
- childProcess.kill();
96
+ if (isRunning) {
97
+ ptyProcess.kill();
98
+ isRunning = false;
99
+ }
100
+ },
101
+ isRunning: () => isRunning,
102
+ pid: ptyProcess.pid,
103
+ };
104
+ }
105
+ /**
106
+ * Execute a command interactively using PTY.
107
+ * Now exclusively uses node-pty for production-grade terminal experience.
108
+ */
109
+ export function executeCommandInteractive(command, cwd, onData, onExit) {
110
+ const ptyProc = executePtyCommand(command, cwd, (chunk) => onData(chunk, 'stdout'), onExit);
111
+ return {
112
+ process: null,
113
+ ptyProcess: ptyProc,
114
+ write: (input) => {
115
+ ptyProc.write(input);
102
116
  },
117
+ kill: () => ptyProc.kill(),
103
118
  signal: (signal) => {
104
- if (!childProcess.pid)
105
- return;
106
- // 1. Try graceful signal first
107
- try {
108
- require('fs').appendFileSync('shell_debug.log', `[${new Date().toISOString()}] Sending signal ${signal} to PID ${childProcess.pid}\n`);
109
- }
110
- catch (e) { }
111
- childProcess.kill(signal);
112
- // 2. Set safety timeout to force kill if it doesn't exit
113
- setTimeout(() => {
114
- if (childProcess.exitCode === null && childProcess.pid) {
115
- try {
116
- require('fs').appendFileSync('shell_debug.log', `[${new Date().toISOString()}] Process ${childProcess.pid} still running, forcing killProcessTree\n`);
119
+ // For PTY, send control characters for signals
120
+ if (signal === 'SIGINT') {
121
+ ptyProc.write('\x03'); // Ctrl+C
122
+ // Also try to kill after a short delay if it doesn't respond
123
+ setTimeout(() => {
124
+ if (ptyProc.isRunning()) {
125
+ ptyProc.kill();
117
126
  }
118
- catch (e) { }
119
- killProcessTree(childProcess.pid, signal);
120
- }
121
- else {
122
- try {
123
- require('fs').appendFileSync('shell_debug.log', `[${new Date().toISOString()}] Process ${childProcess.pid} already exited with code ${childProcess.exitCode}\n`);
124
- }
125
- catch (e) { }
126
- }
127
- }, 500);
128
- }
127
+ }, 500);
128
+ }
129
+ else if (signal === 'SIGTERM') {
130
+ ptyProc.kill();
131
+ }
132
+ else {
133
+ ptyProc.kill();
134
+ }
135
+ },
136
+ resize: (cols, rows) => ptyProc.resize(cols, rows),
137
+ isPty: true,
129
138
  };
130
139
  }
131
140
  export async function executeCommand(command, cwd, onData) {
132
141
  return new Promise((resolve) => {
133
- const platform = os.platform();
134
- const isWindows = platform === 'win32';
135
- // Determine shell and command format
136
- const shell = isWindows ? 'powershell.exe' : (process.env.SHELL || '/bin/bash');
137
- const shellArgs = isWindows ? ['-Command', command] : ['-c', command];
138
- // Spawn the process with explicit pipe mode
139
- const childProcess = spawn(shell, shellArgs, {
140
- cwd,
141
- windowsHide: true,
142
- stdio: ['pipe', 'pipe', 'pipe'], // Explicit pipe mode - no inheritance
143
- });
144
- let stdout = '';
145
- let stderr = '';
146
- let isResolved = false;
147
- // Throttling buffers
148
- let stdoutBuffer = '';
149
- let stderrBuffer = '';
150
- let throttleTimer = null;
151
- // Flush function - sends buffered data to callback
152
- const flush = () => {
142
+ let output = '';
143
+ const proc = executeCommandInteractive(command, cwd, (chunk) => {
144
+ output += chunk;
153
145
  if (onData) {
154
- if (stdoutBuffer) {
155
- onData(stdoutBuffer, 'stdout');
156
- stdoutBuffer = '';
157
- }
158
- if (stderrBuffer) {
159
- onData(stderrBuffer, 'stderr');
160
- stderrBuffer = '';
161
- }
162
- }
163
- throttleTimer = null;
164
- };
165
- // Capture stdout with throttled streaming
166
- childProcess.stdout?.on('data', (data) => {
167
- const chunk = data.toString();
168
- stdout += chunk;
169
- // Buffer the chunk
170
- stdoutBuffer += chunk;
171
- // Set throttle timer if not already running
172
- if (!throttleTimer && onData) {
173
- throttleTimer = setTimeout(flush, 50); // 50ms throttle
174
- }
175
- });
176
- // Capture stderr with throttled streaming
177
- childProcess.stderr?.on('data', (data) => {
178
- const chunk = data.toString();
179
- stderr += chunk;
180
- // Buffer the chunk
181
- stderrBuffer += chunk;
182
- // Set throttle timer if not already running
183
- if (!throttleTimer && onData) {
184
- throttleTimer = setTimeout(flush, 50); // 50ms throttle
185
- }
186
- });
187
- // Handle process completion
188
- childProcess.on('close', (exitCode) => {
189
- if (!isResolved) {
190
- isResolved = true;
191
- // Clear throttle timer and flush remaining data
192
- if (throttleTimer) {
193
- clearTimeout(throttleTimer);
194
- }
195
- flush();
196
- resolve({
197
- stdout,
198
- stderr,
199
- exitCode: exitCode ?? 0,
200
- });
201
- }
202
- });
203
- // Handle process errors
204
- childProcess.on('error', (error) => {
205
- if (!isResolved) {
206
- isResolved = true;
207
- // Clear throttle timer and flush remaining data
208
- if (throttleTimer) {
209
- clearTimeout(throttleTimer);
210
- }
211
- flush();
212
- resolve({
213
- stdout,
214
- stderr: stderr || error.message,
215
- exitCode: 1,
216
- });
146
+ onData(chunk, 'stdout');
217
147
  }
148
+ }, (exitCode) => {
149
+ resolve({
150
+ stdout: output,
151
+ stderr: '',
152
+ exitCode,
153
+ });
218
154
  });
219
155
  });
220
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Result of a syntax check operation
3
+ */
4
+ export interface SyntaxCheckResult {
5
+ success: boolean;
6
+ language: string;
7
+ error?: string;
8
+ skipped?: boolean;
9
+ skipReason?: string;
10
+ }
11
+ /**
12
+ * Detect language from file path
13
+ */
14
+ export declare function detectLanguage(filePath: string): string;
15
+ /**
16
+ * Main syntax check function
17
+ * Checks the syntax of a file based on its extension
18
+ */
19
+ export declare function checkSyntax(filePath: string, content?: string): Promise<SyntaxCheckResult>;
20
+ /**
21
+ * Format syntax check result as a human-readable string
22
+ */
23
+ export declare function formatSyntaxCheckResult(result: SyntaxCheckResult): string;
24
+ //# sourceMappingURL=syntax-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax-checker.d.ts","sourceRoot":"","sources":["../../src/utils/syntax-checker.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AA6ED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgBvD;AA8KD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6DhG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAUzE"}