centaurus-cli 2.7.3 → 2.8.1
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/cli-adapter.d.ts +10 -6
- package/dist/cli-adapter.d.ts.map +1 -1
- package/dist/cli-adapter.js +613 -154
- package/dist/cli-adapter.js.map +1 -1
- package/dist/config/slash-commands.d.ts.map +1 -1
- package/dist/config/slash-commands.js +1 -0
- package/dist/config/slash-commands.js.map +1 -1
- package/dist/context/context-manager.d.ts +4 -1
- package/dist/context/context-manager.d.ts.map +1 -1
- package/dist/context/context-manager.js +30 -7
- package/dist/context/context-manager.js.map +1 -1
- package/dist/context/handlers/wsl-handler.d.ts +10 -0
- package/dist/context/handlers/wsl-handler.d.ts.map +1 -1
- package/dist/context/handlers/wsl-handler.js +31 -2
- package/dist/context/handlers/wsl-handler.js.map +1 -1
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -1
- package/dist/services/ai-service-client.d.ts +1 -0
- package/dist/services/ai-service-client.d.ts.map +1 -1
- package/dist/services/ai-service-client.js +20 -0
- package/dist/services/ai-service-client.js.map +1 -1
- package/dist/tools/command.d.ts.map +1 -1
- package/dist/tools/command.js +136 -21
- package/dist/tools/command.js.map +1 -1
- package/dist/tools/file-ops.d.ts +1 -0
- package/dist/tools/file-ops.d.ts.map +1 -1
- package/dist/tools/file-ops.js +144 -3
- package/dist/tools/file-ops.js.map +1 -1
- package/dist/tools/inspect-symbol.js +27 -27
- package/dist/tools/inspect-symbol.js.map +1 -1
- package/dist/tools/plan-mode.d.ts +55 -19
- package/dist/tools/plan-mode.d.ts.map +1 -1
- package/dist/tools/plan-mode.js +204 -123
- package/dist/tools/plan-mode.js.map +1 -1
- package/dist/tools/types.d.ts +1 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +11 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/ui/components/App.d.ts +6 -5
- package/dist/ui/components/App.d.ts.map +1 -1
- package/dist/ui/components/App.js +277 -125
- package/dist/ui/components/App.js.map +1 -1
- package/dist/ui/components/InputBox.d.ts.map +1 -1
- package/dist/ui/components/InputBox.js +24 -5
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/InteractiveShell.d.ts +2 -1
- package/dist/ui/components/InteractiveShell.d.ts.map +1 -1
- package/dist/ui/components/InteractiveShell.js +41 -106
- package/dist/ui/components/InteractiveShell.js.map +1 -1
- package/dist/ui/components/MarkdownRenderer.d.ts.map +1 -1
- package/dist/ui/components/MarkdownRenderer.js +12 -8
- package/dist/ui/components/MarkdownRenderer.js.map +1 -1
- package/dist/ui/components/MessageDisplay.d.ts.map +1 -1
- package/dist/ui/components/MessageDisplay.js +11 -3
- package/dist/ui/components/MessageDisplay.js.map +1 -1
- package/dist/ui/components/PlanAcceptedMessage.d.ts +12 -0
- package/dist/ui/components/PlanAcceptedMessage.d.ts.map +1 -0
- package/dist/ui/components/PlanAcceptedMessage.js +22 -0
- package/dist/ui/components/PlanAcceptedMessage.js.map +1 -0
- package/dist/ui/components/PlanReviewScreen.d.ts +14 -0
- package/dist/ui/components/PlanReviewScreen.d.ts.map +1 -0
- package/dist/ui/components/PlanReviewScreen.js +52 -0
- package/dist/ui/components/PlanReviewScreen.js.map +1 -0
- package/dist/ui/components/StreamingMessageDisplay.d.ts.map +1 -1
- package/dist/ui/components/StreamingMessageDisplay.js +5 -5
- package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
- package/dist/ui/components/TaskCompletedMessage.d.ts +14 -0
- package/dist/ui/components/TaskCompletedMessage.d.ts.map +1 -0
- package/dist/ui/components/TaskCompletedMessage.js +25 -0
- package/dist/ui/components/TaskCompletedMessage.js.map +1 -0
- package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.js +174 -17
- package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
- package/dist/utils/conversation-logger.d.ts +127 -0
- package/dist/utils/conversation-logger.d.ts.map +1 -0
- package/dist/utils/conversation-logger.js +283 -0
- package/dist/utils/conversation-logger.js.map +1 -0
- package/dist/utils/editor-utils.d.ts +87 -0
- package/dist/utils/editor-utils.d.ts.map +1 -0
- package/dist/utils/editor-utils.js +712 -0
- package/dist/utils/editor-utils.js.map +1 -0
- package/dist/utils/input-classifier.d.ts.map +1 -1
- package/dist/utils/input-classifier.js +12 -4
- package/dist/utils/input-classifier.js.map +1 -1
- package/dist/utils/markdown-parser.d.ts.map +1 -1
- package/dist/utils/markdown-parser.js +4 -2
- package/dist/utils/markdown-parser.js.map +1 -1
- package/dist/utils/shell.d.ts +32 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +97 -161
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/syntax-checker.d.ts +24 -0
- package/dist/utils/syntax-checker.d.ts.map +1 -0
- package/dist/utils/syntax-checker.js +320 -0
- package/dist/utils/syntax-checker.js.map +1 -0
- package/package.json +4 -3
- package/prompts/system-prompt-autonomous.md +0 -377
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation Logger
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive logging utility for AI conversation debugging.
|
|
5
|
+
* Logs all messages, tool calls, thoughts, and feedback to help
|
|
6
|
+
* debug issues like hallucination, looping, or getting stuck.
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'fs';
|
|
9
|
+
// Log levels
|
|
10
|
+
export var LogLevel;
|
|
11
|
+
(function (LogLevel) {
|
|
12
|
+
LogLevel["DEBUG"] = "DEBUG";
|
|
13
|
+
LogLevel["INFO"] = "INFO";
|
|
14
|
+
LogLevel["WARN"] = "WARN";
|
|
15
|
+
LogLevel["ERROR"] = "ERROR";
|
|
16
|
+
})(LogLevel || (LogLevel = {}));
|
|
17
|
+
// Log categories for filtering
|
|
18
|
+
export var LogCategory;
|
|
19
|
+
(function (LogCategory) {
|
|
20
|
+
LogCategory["SESSION"] = "SESSION";
|
|
21
|
+
LogCategory["USER_MSG"] = "USER_MSG";
|
|
22
|
+
LogCategory["AI_TEXT"] = "AI_TEXT";
|
|
23
|
+
LogCategory["THOUGHT"] = "THOUGHT";
|
|
24
|
+
LogCategory["TOOL_CALL"] = "TOOL_CALL";
|
|
25
|
+
LogCategory["TOOL_EXEC"] = "TOOL_EXEC";
|
|
26
|
+
LogCategory["TOOL_RESULT"] = "TOOL_RESULT";
|
|
27
|
+
LogCategory["LOOP"] = "LOOP";
|
|
28
|
+
LogCategory["NARRATION"] = "NARRATION";
|
|
29
|
+
LogCategory["ERROR"] = "ERROR";
|
|
30
|
+
LogCategory["SYSTEM"] = "SYSTEM";
|
|
31
|
+
})(LogCategory || (LogCategory = {}));
|
|
32
|
+
/**
|
|
33
|
+
* ConversationLogger class for structured conversation logging
|
|
34
|
+
*/
|
|
35
|
+
export class ConversationLogger {
|
|
36
|
+
logFilePath;
|
|
37
|
+
sessionId = '';
|
|
38
|
+
currentTurn = 0;
|
|
39
|
+
accumulatedThought = '';
|
|
40
|
+
accumulatedAIText = '';
|
|
41
|
+
enabled = true;
|
|
42
|
+
constructor(logFilePath = 'cli_frontend_logs.txt') {
|
|
43
|
+
this.logFilePath = logFilePath;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Enable or disable logging
|
|
47
|
+
*/
|
|
48
|
+
setEnabled(enabled) {
|
|
49
|
+
this.enabled = enabled;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Start a new conversation session
|
|
53
|
+
*/
|
|
54
|
+
startSession() {
|
|
55
|
+
// Generate a short session ID
|
|
56
|
+
this.sessionId = `sess_${Date.now().toString(36)}`;
|
|
57
|
+
this.currentTurn = 0;
|
|
58
|
+
this.accumulatedThought = '';
|
|
59
|
+
this.accumulatedAIText = '';
|
|
60
|
+
this.log(LogLevel.INFO, LogCategory.SESSION, '═══════════════════════════════════════════════════════════════════════════════');
|
|
61
|
+
this.log(LogLevel.INFO, LogCategory.SESSION, `NEW CONVERSATION SESSION STARTED`);
|
|
62
|
+
this.log(LogLevel.INFO, LogCategory.SESSION, '═══════════════════════════════════════════════════════════════════════════════');
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Log a user message
|
|
66
|
+
*/
|
|
67
|
+
logUserMessage(message) {
|
|
68
|
+
this.log(LogLevel.INFO, LogCategory.USER_MSG, 'User message received', {
|
|
69
|
+
content: message,
|
|
70
|
+
length: message.length,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Log AI text chunk (streaming)
|
|
75
|
+
*/
|
|
76
|
+
logAITextChunk(chunk) {
|
|
77
|
+
this.accumulatedAIText += chunk;
|
|
78
|
+
this.log(LogLevel.DEBUG, LogCategory.AI_TEXT, 'AI text chunk received', {
|
|
79
|
+
chunkLength: chunk.length,
|
|
80
|
+
totalLength: this.accumulatedAIText.length,
|
|
81
|
+
chunk: chunk.substring(0, 200) + (chunk.length > 200 ? '...' : ''),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Log completed AI text response
|
|
86
|
+
*/
|
|
87
|
+
logAITextComplete() {
|
|
88
|
+
if (this.accumulatedAIText) {
|
|
89
|
+
this.log(LogLevel.INFO, LogCategory.AI_TEXT, 'AI text response complete', {
|
|
90
|
+
totalLength: this.accumulatedAIText.length,
|
|
91
|
+
preview: this.accumulatedAIText.substring(0, 500) + (this.accumulatedAIText.length > 500 ? '...' : ''),
|
|
92
|
+
fullContent: this.accumulatedAIText,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
this.accumulatedAIText = '';
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Log thought chunk (streaming)
|
|
99
|
+
*/
|
|
100
|
+
logThoughtChunk(thought) {
|
|
101
|
+
this.accumulatedThought += thought;
|
|
102
|
+
this.log(LogLevel.DEBUG, LogCategory.THOUGHT, 'Thought chunk received', {
|
|
103
|
+
chunkLength: thought.length,
|
|
104
|
+
totalLength: this.accumulatedThought.length,
|
|
105
|
+
chunk: thought.substring(0, 200) + (thought.length > 200 ? '...' : ''),
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Log thought completion with duration
|
|
110
|
+
*/
|
|
111
|
+
logThoughtComplete(durationSeconds) {
|
|
112
|
+
this.log(LogLevel.INFO, LogCategory.THOUGHT, 'Thinking completed', {
|
|
113
|
+
durationSeconds,
|
|
114
|
+
totalLength: this.accumulatedThought.length,
|
|
115
|
+
preview: this.accumulatedThought.substring(0, 500) + (this.accumulatedThought.length > 500 ? '...' : ''),
|
|
116
|
+
fullThought: this.accumulatedThought,
|
|
117
|
+
});
|
|
118
|
+
this.accumulatedThought = '';
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Log a tool call being received from AI
|
|
122
|
+
*/
|
|
123
|
+
logToolCall(name, id, args) {
|
|
124
|
+
// Sanitize args to avoid logging huge content
|
|
125
|
+
const sanitizedArgs = {};
|
|
126
|
+
for (const [key, value] of Object.entries(args)) {
|
|
127
|
+
if (typeof value === 'string' && value.length > 1000) {
|
|
128
|
+
sanitizedArgs[key] = value.substring(0, 1000) + `... [truncated ${value.length - 1000} chars]`;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
sanitizedArgs[key] = value;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
this.log(LogLevel.INFO, LogCategory.TOOL_CALL, `Tool call received: ${name}`, {
|
|
135
|
+
toolName: name,
|
|
136
|
+
toolCallId: id,
|
|
137
|
+
arguments: sanitizedArgs,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Log tool execution starting
|
|
142
|
+
*/
|
|
143
|
+
logToolExecutionStart(name, id) {
|
|
144
|
+
this.log(LogLevel.INFO, LogCategory.TOOL_EXEC, `Executing tool: ${name}`, {
|
|
145
|
+
toolName: name,
|
|
146
|
+
toolCallId: id,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Log tool execution result
|
|
151
|
+
*/
|
|
152
|
+
logToolResult(name, id, result, success, error) {
|
|
153
|
+
// Sanitize result to avoid logging huge content
|
|
154
|
+
let sanitizedResult = result;
|
|
155
|
+
if (typeof result === 'string' && result.length > 2000) {
|
|
156
|
+
sanitizedResult = result.substring(0, 2000) + `... [truncated ${result.length - 2000} chars]`;
|
|
157
|
+
}
|
|
158
|
+
this.log(success ? LogLevel.INFO : LogLevel.WARN, LogCategory.TOOL_RESULT, `Tool ${success ? 'completed' : 'failed'}: ${name}`, {
|
|
159
|
+
toolName: name,
|
|
160
|
+
toolCallId: id,
|
|
161
|
+
success,
|
|
162
|
+
result: sanitizedResult,
|
|
163
|
+
error: error,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Log loop state at turn boundaries
|
|
168
|
+
*/
|
|
169
|
+
logLoopState(turn, state) {
|
|
170
|
+
this.currentTurn = turn;
|
|
171
|
+
this.log(LogLevel.INFO, LogCategory.LOOP, `Turn ${turn} state`, state);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Log when narration/completion detection triggers
|
|
175
|
+
*/
|
|
176
|
+
logNarrationDetection(type, details) {
|
|
177
|
+
this.log(LogLevel.WARN, LogCategory.NARRATION, `Detection: ${type}`, details);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Log system prompts added to conversation
|
|
181
|
+
*/
|
|
182
|
+
logSystemPrompt(promptType, content) {
|
|
183
|
+
this.log(LogLevel.INFO, LogCategory.SYSTEM, `System prompt: ${promptType}`, {
|
|
184
|
+
contentLength: content.length,
|
|
185
|
+
content: content.substring(0, 500) + (content.length > 500 ? '...' : ''),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Log an error
|
|
190
|
+
*/
|
|
191
|
+
logError(context, error) {
|
|
192
|
+
const errorMessage = error instanceof Error ? error.message : error;
|
|
193
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
194
|
+
this.log(LogLevel.ERROR, LogCategory.ERROR, `Error in ${context}`, {
|
|
195
|
+
message: errorMessage,
|
|
196
|
+
stack: errorStack,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Log stream completion
|
|
201
|
+
*/
|
|
202
|
+
logStreamEnd(reason) {
|
|
203
|
+
this.log(LogLevel.INFO, LogCategory.LOOP, 'Stream ended', { reason });
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Log task completion
|
|
207
|
+
*/
|
|
208
|
+
logTaskComplete(summary) {
|
|
209
|
+
this.log(LogLevel.INFO, LogCategory.SESSION, 'Task completed', {
|
|
210
|
+
summaryLength: summary.length,
|
|
211
|
+
summary: summary.substring(0, 500) + (summary.length > 500 ? '...' : ''),
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Log session end
|
|
216
|
+
*/
|
|
217
|
+
endSession(finalMessage, turnCount) {
|
|
218
|
+
this.log(LogLevel.INFO, LogCategory.SESSION, '═══════════════════════════════════════════════════════════════════════════════');
|
|
219
|
+
this.log(LogLevel.INFO, LogCategory.SESSION, 'CONVERSATION SESSION ENDED', {
|
|
220
|
+
totalTurns: turnCount,
|
|
221
|
+
finalMessageLength: finalMessage.length,
|
|
222
|
+
finalMessagePreview: finalMessage.substring(0, 300) + (finalMessage.length > 300 ? '...' : ''),
|
|
223
|
+
});
|
|
224
|
+
this.log(LogLevel.INFO, LogCategory.SESSION, '═══════════════════════════════════════════════════════════════════════════════');
|
|
225
|
+
this.log(LogLevel.INFO, LogCategory.SESSION, ''); // Empty line for separation
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Log messages array state (for debugging conversation history)
|
|
229
|
+
*/
|
|
230
|
+
logConversationHistory(messages) {
|
|
231
|
+
this.log(LogLevel.DEBUG, LogCategory.LOOP, 'Current conversation history', {
|
|
232
|
+
messageCount: messages.length,
|
|
233
|
+
messages: messages.map((m, i) => ({
|
|
234
|
+
index: i,
|
|
235
|
+
role: m.role,
|
|
236
|
+
contentLength: m.content.length,
|
|
237
|
+
contentPreview: m.content.substring(0, 100) + (m.content.length > 100 ? '...' : ''),
|
|
238
|
+
hasToolCalls: !!(m.tool_calls && m.tool_calls.length > 0),
|
|
239
|
+
toolCallCount: m.tool_calls?.length || 0,
|
|
240
|
+
})),
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Core logging function
|
|
245
|
+
*/
|
|
246
|
+
log(level, category, message, details) {
|
|
247
|
+
if (!this.enabled)
|
|
248
|
+
return;
|
|
249
|
+
const timestamp = new Date().toISOString();
|
|
250
|
+
const sessionId = this.sessionId || 'no_session';
|
|
251
|
+
const entry = {
|
|
252
|
+
timestamp,
|
|
253
|
+
sessionId,
|
|
254
|
+
level,
|
|
255
|
+
category,
|
|
256
|
+
message,
|
|
257
|
+
details,
|
|
258
|
+
};
|
|
259
|
+
// Format the log line
|
|
260
|
+
let logLine = `[${timestamp}] [${sessionId}] [${level}] [${category}] ${message}`;
|
|
261
|
+
if (details) {
|
|
262
|
+
try {
|
|
263
|
+
const detailsStr = JSON.stringify(details, null, 2);
|
|
264
|
+
// Indent details for readability
|
|
265
|
+
const indentedDetails = detailsStr.split('\n').map(line => ' ' + line).join('\n');
|
|
266
|
+
logLine += '\n' + indentedDetails;
|
|
267
|
+
}
|
|
268
|
+
catch (e) {
|
|
269
|
+
logLine += '\n [Details could not be serialized]';
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
logLine += '\n';
|
|
273
|
+
try {
|
|
274
|
+
fs.appendFileSync(this.logFilePath, logLine);
|
|
275
|
+
}
|
|
276
|
+
catch (e) {
|
|
277
|
+
// Silently fail if we can't write logs
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Export singleton instance
|
|
282
|
+
export const conversationLogger = new ConversationLogger();
|
|
283
|
+
//# sourceMappingURL=conversation-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-logger.js","sourceRoot":"","sources":["../../src/utils/conversation-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if a command is an interactive editor that needs full terminal control
|
|
3
|
+
*/
|
|
4
|
+
export declare function isInteractiveEditorCommand(command: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Check if the command is specifically for nano editor (the only remote-supported editor currently)
|
|
7
|
+
*/
|
|
8
|
+
export declare function isNanoEditor(command: string): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Get the display name of an editor command for user-friendly messages
|
|
11
|
+
*/
|
|
12
|
+
export declare function getEditorName(command: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Run an interactive editor with full terminal control (LOCAL mode).
|
|
15
|
+
* This function:
|
|
16
|
+
* 1. Clears the screen and enters alternate screen buffer
|
|
17
|
+
* 2. Spawns a PTY process
|
|
18
|
+
* 3. Pipes stdin directly to the PTY (raw mode)
|
|
19
|
+
* 4. Pipes PTY output directly to stdout
|
|
20
|
+
* 5. Handles cleanup on exit
|
|
21
|
+
*
|
|
22
|
+
* Uses alternate screen buffer to prevent chat history from showing through.
|
|
23
|
+
*/
|
|
24
|
+
export declare function runInteractiveEditor(command: string, cwd: string, onExit: (exitCode: number) => void): {
|
|
25
|
+
kill: () => void;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Run an interactive editor in WSL session via node-pty.
|
|
29
|
+
* Uses wsl.exe to execute the editor command in the specified distribution.
|
|
30
|
+
*/
|
|
31
|
+
export declare function runWSLEditor(distribution: string, command: string, cwd: string, onExit: (exitCode: number) => void): {
|
|
32
|
+
kill: () => void;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Interactive process interface for WSL PTY commands
|
|
36
|
+
*/
|
|
37
|
+
export interface WSLPtyProcess {
|
|
38
|
+
write: (data: string) => void;
|
|
39
|
+
kill: () => void;
|
|
40
|
+
resize: (cols: number, rows: number) => void;
|
|
41
|
+
isRunning: () => boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Run a command in WSL session via node-pty with streaming output.
|
|
45
|
+
* Unlike runWSLEditor, this doesn't take over the terminal - it streams output to a callback.
|
|
46
|
+
* This is essential for sudo commands that need TTY for password prompts.
|
|
47
|
+
*/
|
|
48
|
+
export declare function runWSLCommand(distribution: string, command: string, cwd: string, onData: (data: string) => void, onExit: (exitCode: number) => void): WSLPtyProcess;
|
|
49
|
+
/**
|
|
50
|
+
* Run a command in Docker container via node-pty with streaming output.
|
|
51
|
+
* Unlike runDockerEditor, this doesn't take over the terminal - it streams output to a callback.
|
|
52
|
+
* This is essential for sudo commands that need TTY for password prompts.
|
|
53
|
+
*/
|
|
54
|
+
export declare function runDockerCommand(containerId: string, command: string, cwd: string, onData: (data: string) => void, onExit: (exitCode: number) => void): WSLPtyProcess;
|
|
55
|
+
/**
|
|
56
|
+
* Run an interactive editor in Docker container via node-pty.
|
|
57
|
+
* Uses docker exec -it to execute the editor command in the container.
|
|
58
|
+
*/
|
|
59
|
+
export declare function runDockerEditor(containerId: string, command: string, cwd: string, onExit: (exitCode: number) => void): {
|
|
60
|
+
kill: () => void;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Run an interactive editor in SSH session via ssh2's interactive shell.
|
|
64
|
+
* This is more complex as we need to use the ssh2 client's shell() method
|
|
65
|
+
* instead of exec() to get a proper interactive PTY.
|
|
66
|
+
*/
|
|
67
|
+
export declare function runSSHEditor(sshClient: any, // ssh2 Client
|
|
68
|
+
command: string, cwd: string, onExit: (exitCode: number) => void): {
|
|
69
|
+
kill: () => void;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* SSH PTY process interface for SSH commands with streaming output
|
|
73
|
+
*/
|
|
74
|
+
export interface SSHPtyProcess {
|
|
75
|
+
write: (data: string) => void;
|
|
76
|
+
kill: () => void;
|
|
77
|
+
resize: (cols: number, rows: number) => void;
|
|
78
|
+
isRunning: () => boolean;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Run a command in SSH session via ssh2's interactive shell with streaming output.
|
|
82
|
+
* Unlike runSSHEditor, this doesn't take over the terminal - it streams output to a callback.
|
|
83
|
+
* This is essential for sudo commands that need TTY for password prompts.
|
|
84
|
+
*/
|
|
85
|
+
export declare function runSSHCommand(sshClient: any, // ssh2 Client
|
|
86
|
+
command: string, cwd: string, onData: (data: string) => void, onExit: (exitCode: number) => void): SSHPtyProcess;
|
|
87
|
+
//# sourceMappingURL=editor-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor-utils.d.ts","sourceRoot":"","sources":["../../src/utils/editor-utils.ts"],"names":[],"mappings":"AA0BA;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAwBnE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAWrD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA2BrD;AAwKD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAChC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACnC;IAAE,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CA6GtB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CACxB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACnC;IAAE,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CA6BtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,SAAS,EAAE,MAAM,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CACzB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC9B,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACnC,aAAa,CAoEf;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC9B,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACnC,aAAa,CAqEf;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACnC;IAAE,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CA8BtB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CACxB,SAAS,EAAE,GAAG,EAAE,cAAc;AAC9B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACnC;IAAE,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CAwGtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,SAAS,EAAE,MAAM,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CACzB,SAAS,EAAE,GAAG,EAAE,cAAc;AAC9B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC9B,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACnC,aAAa,CAwEf"}
|