mstro-app 0.1.58 → 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/PRIVACY.md +126 -0
- package/README.md +24 -23
- package/bin/commands/login.js +85 -42
- package/bin/commands/logout.js +35 -1
- package/bin/commands/status.js +1 -1
- package/bin/mstro.js +231 -131
- package/dist/server/cli/headless/claude-invoker.d.ts.map +1 -1
- package/dist/server/cli/headless/claude-invoker.js +550 -115
- package/dist/server/cli/headless/claude-invoker.js.map +1 -1
- package/dist/server/cli/headless/index.d.ts +2 -1
- package/dist/server/cli/headless/index.d.ts.map +1 -1
- package/dist/server/cli/headless/index.js +2 -0
- package/dist/server/cli/headless/index.js.map +1 -1
- package/dist/server/cli/headless/prompt-utils.d.ts +5 -8
- package/dist/server/cli/headless/prompt-utils.d.ts.map +1 -1
- package/dist/server/cli/headless/prompt-utils.js +40 -5
- package/dist/server/cli/headless/prompt-utils.js.map +1 -1
- package/dist/server/cli/headless/runner.d.ts +1 -1
- package/dist/server/cli/headless/runner.d.ts.map +1 -1
- package/dist/server/cli/headless/runner.js +52 -7
- package/dist/server/cli/headless/runner.js.map +1 -1
- package/dist/server/cli/headless/stall-assessor.d.ts +79 -1
- package/dist/server/cli/headless/stall-assessor.d.ts.map +1 -1
- package/dist/server/cli/headless/stall-assessor.js +355 -20
- package/dist/server/cli/headless/stall-assessor.js.map +1 -1
- package/dist/server/cli/headless/tool-watchdog.d.ts +70 -0
- package/dist/server/cli/headless/tool-watchdog.d.ts.map +1 -0
- package/dist/server/cli/headless/tool-watchdog.js +302 -0
- package/dist/server/cli/headless/tool-watchdog.js.map +1 -0
- package/dist/server/cli/headless/types.d.ts +98 -1
- package/dist/server/cli/headless/types.d.ts.map +1 -1
- package/dist/server/cli/improvisation-session-manager.d.ts +136 -2
- package/dist/server/cli/improvisation-session-manager.d.ts.map +1 -1
- package/dist/server/cli/improvisation-session-manager.js +929 -132
- package/dist/server/cli/improvisation-session-manager.js.map +1 -1
- package/dist/server/index.js +5 -13
- package/dist/server/index.js.map +1 -1
- package/dist/server/mcp/bouncer-integration.d.ts.map +1 -1
- package/dist/server/mcp/bouncer-integration.js +18 -0
- package/dist/server/mcp/bouncer-integration.js.map +1 -1
- package/dist/server/mcp/security-audit.d.ts +2 -2
- package/dist/server/mcp/security-audit.d.ts.map +1 -1
- package/dist/server/mcp/security-audit.js +12 -8
- package/dist/server/mcp/security-audit.js.map +1 -1
- package/dist/server/mcp/security-patterns.d.ts.map +1 -1
- package/dist/server/mcp/security-patterns.js +9 -4
- package/dist/server/mcp/security-patterns.js.map +1 -1
- package/dist/server/routes/improvise.js +6 -6
- package/dist/server/routes/improvise.js.map +1 -1
- package/dist/server/services/analytics.d.ts +2 -0
- package/dist/server/services/analytics.d.ts.map +1 -1
- package/dist/server/services/analytics.js +26 -4
- package/dist/server/services/analytics.js.map +1 -1
- package/dist/server/services/platform.d.ts.map +1 -1
- package/dist/server/services/platform.js +17 -10
- package/dist/server/services/platform.js.map +1 -1
- package/dist/server/services/sandbox-utils.d.ts +6 -0
- package/dist/server/services/sandbox-utils.d.ts.map +1 -0
- package/dist/server/services/sandbox-utils.js +72 -0
- package/dist/server/services/sandbox-utils.js.map +1 -0
- package/dist/server/services/settings.d.ts +6 -0
- package/dist/server/services/settings.d.ts.map +1 -1
- package/dist/server/services/settings.js +21 -0
- package/dist/server/services/settings.js.map +1 -1
- package/dist/server/services/terminal/pty-manager.d.ts +5 -51
- package/dist/server/services/terminal/pty-manager.d.ts.map +1 -1
- package/dist/server/services/terminal/pty-manager.js +63 -102
- package/dist/server/services/terminal/pty-manager.js.map +1 -1
- package/dist/server/services/websocket/file-explorer-handlers.d.ts +5 -0
- package/dist/server/services/websocket/file-explorer-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/file-explorer-handlers.js +518 -0
- package/dist/server/services/websocket/file-explorer-handlers.js.map +1 -0
- package/dist/server/services/websocket/git-handlers.d.ts +36 -0
- package/dist/server/services/websocket/git-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/git-handlers.js +797 -0
- package/dist/server/services/websocket/git-handlers.js.map +1 -0
- package/dist/server/services/websocket/git-pr-handlers.d.ts +4 -0
- package/dist/server/services/websocket/git-pr-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/git-pr-handlers.js +299 -0
- package/dist/server/services/websocket/git-pr-handlers.js.map +1 -0
- package/dist/server/services/websocket/git-worktree-handlers.d.ts +4 -0
- package/dist/server/services/websocket/git-worktree-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/git-worktree-handlers.js +353 -0
- package/dist/server/services/websocket/git-worktree-handlers.js.map +1 -0
- package/dist/server/services/websocket/handler-context.d.ts +32 -0
- package/dist/server/services/websocket/handler-context.d.ts.map +1 -0
- package/dist/server/services/websocket/handler-context.js +4 -0
- package/dist/server/services/websocket/handler-context.js.map +1 -0
- package/dist/server/services/websocket/handler.d.ts +27 -338
- package/dist/server/services/websocket/handler.d.ts.map +1 -1
- package/dist/server/services/websocket/handler.js +74 -2106
- package/dist/server/services/websocket/handler.js.map +1 -1
- package/dist/server/services/websocket/index.d.ts +1 -1
- package/dist/server/services/websocket/index.d.ts.map +1 -1
- package/dist/server/services/websocket/index.js.map +1 -1
- package/dist/server/services/websocket/session-handlers.d.ts +10 -0
- package/dist/server/services/websocket/session-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/session-handlers.js +507 -0
- package/dist/server/services/websocket/session-handlers.js.map +1 -0
- package/dist/server/services/websocket/settings-handlers.d.ts +6 -0
- package/dist/server/services/websocket/settings-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/settings-handlers.js +125 -0
- package/dist/server/services/websocket/settings-handlers.js.map +1 -0
- package/dist/server/services/websocket/tab-handlers.d.ts +10 -0
- package/dist/server/services/websocket/tab-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/tab-handlers.js +131 -0
- package/dist/server/services/websocket/tab-handlers.js.map +1 -0
- package/dist/server/services/websocket/terminal-handlers.d.ts +9 -0
- package/dist/server/services/websocket/terminal-handlers.d.ts.map +1 -0
- package/dist/server/services/websocket/terminal-handlers.js +220 -0
- package/dist/server/services/websocket/terminal-handlers.js.map +1 -0
- package/dist/server/services/websocket/types.d.ts +67 -2
- package/dist/server/services/websocket/types.d.ts.map +1 -1
- package/hooks/bouncer.sh +11 -4
- package/package.json +7 -2
- package/server/README.md +176 -159
- package/server/cli/headless/claude-invoker.ts +740 -133
- package/server/cli/headless/index.ts +7 -1
- package/server/cli/headless/output-utils.test.ts +225 -0
- package/server/cli/headless/prompt-utils.ts +37 -5
- package/server/cli/headless/runner.ts +55 -8
- package/server/cli/headless/stall-assessor.test.ts +165 -0
- package/server/cli/headless/stall-assessor.ts +478 -22
- package/server/cli/headless/tool-watchdog.test.ts +429 -0
- package/server/cli/headless/tool-watchdog.ts +398 -0
- package/server/cli/headless/types.ts +93 -1
- package/server/cli/improvisation-session-manager.ts +1133 -145
- package/server/index.ts +5 -14
- package/server/mcp/README.md +59 -67
- package/server/mcp/bouncer-integration.test.ts +161 -0
- package/server/mcp/bouncer-integration.ts +28 -0
- package/server/mcp/security-audit.ts +12 -8
- package/server/mcp/security-patterns.test.ts +258 -0
- package/server/mcp/security-patterns.ts +8 -2
- package/server/routes/improvise.ts +6 -6
- package/server/services/analytics.ts +26 -4
- package/server/services/platform.test.ts +0 -10
- package/server/services/platform.ts +16 -11
- package/server/services/sandbox-utils.ts +78 -0
- package/server/services/settings.ts +25 -0
- package/server/services/terminal/pty-manager.ts +68 -129
- package/server/services/websocket/autocomplete.test.ts +194 -0
- package/server/services/websocket/file-explorer-handlers.ts +587 -0
- package/server/services/websocket/git-handlers.ts +924 -0
- package/server/services/websocket/git-pr-handlers.ts +363 -0
- package/server/services/websocket/git-worktree-handlers.ts +403 -0
- package/server/services/websocket/handler-context.ts +44 -0
- package/server/services/websocket/handler.test.ts +1 -1
- package/server/services/websocket/handler.ts +90 -2421
- package/server/services/websocket/index.ts +1 -1
- package/server/services/websocket/session-handlers.ts +574 -0
- package/server/services/websocket/settings-handlers.ts +150 -0
- package/server/services/websocket/tab-handlers.ts +150 -0
- package/server/services/websocket/terminal-handlers.ts +277 -0
- package/server/services/websocket/types.ts +145 -4
- package/bin/release.sh +0 -110
- package/dist/server/services/terminal/tmux-manager.d.ts +0 -82
- package/dist/server/services/terminal/tmux-manager.d.ts.map +0 -1
- package/dist/server/services/terminal/tmux-manager.js +0 -352
- package/dist/server/services/terminal/tmux-manager.js.map +0 -1
- package/server/services/terminal/tmux-manager.ts +0 -426
|
@@ -11,14 +11,12 @@
|
|
|
11
11
|
* - Scrollback buffer is maintained for replay on reconnect
|
|
12
12
|
* - Sessions can be reattached without losing running processes
|
|
13
13
|
*
|
|
14
|
-
* Also supports tmux-backed persistence for sessions that survive server restarts.
|
|
15
|
-
*
|
|
16
14
|
* NOTE: node-pty is an optional dependency requiring native compilation.
|
|
17
15
|
* Terminal features gracefully degrade when node-pty is not available.
|
|
18
16
|
*/
|
|
19
17
|
import { EventEmitter } from 'node:events';
|
|
20
18
|
import { homedir, platform } from 'node:os';
|
|
21
|
-
import {
|
|
19
|
+
import { sanitizeEnvForSandbox } from '../sandbox-utils.js';
|
|
22
20
|
// Try to load node-pty (optional native dependency)
|
|
23
21
|
let pty = null;
|
|
24
22
|
let _ptyLoadError = null;
|
|
@@ -66,10 +64,6 @@ export function getPtyInstallInstructions() {
|
|
|
66
64
|
instructions += `3. Restart mstro\n`;
|
|
67
65
|
return instructions;
|
|
68
66
|
}
|
|
69
|
-
// Maximum lines to store in scrollback buffer per terminal
|
|
70
|
-
const MAX_SCROLLBACK_LINES = 5000;
|
|
71
|
-
// Maximum characters per line to prevent memory bloat
|
|
72
|
-
const MAX_LINE_LENGTH = 2000;
|
|
73
67
|
/**
|
|
74
68
|
* Detect the user's default shell
|
|
75
69
|
*/
|
|
@@ -120,36 +114,6 @@ export class PTYManager extends EventEmitter {
|
|
|
120
114
|
rows: session.rows,
|
|
121
115
|
};
|
|
122
116
|
}
|
|
123
|
-
/**
|
|
124
|
-
* Get scrollback buffer for replay on reconnect
|
|
125
|
-
* Returns the stored output history
|
|
126
|
-
*/
|
|
127
|
-
getScrollback(terminalId) {
|
|
128
|
-
const session = this.terminals.get(terminalId);
|
|
129
|
-
if (!session)
|
|
130
|
-
return [];
|
|
131
|
-
return [...session.scrollback];
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Add data to scrollback buffer
|
|
135
|
-
* Maintains a rolling buffer of recent terminal output
|
|
136
|
-
*/
|
|
137
|
-
addToScrollback(session, data) {
|
|
138
|
-
// Split data into lines
|
|
139
|
-
const lines = data.split(/\r?\n/);
|
|
140
|
-
for (const line of lines) {
|
|
141
|
-
// Truncate very long lines to prevent memory issues
|
|
142
|
-
const truncatedLine = line.length > MAX_LINE_LENGTH
|
|
143
|
-
? `${line.slice(0, MAX_LINE_LENGTH)}...`
|
|
144
|
-
: line;
|
|
145
|
-
session.scrollback.push(truncatedLine);
|
|
146
|
-
}
|
|
147
|
-
// Trim buffer if it exceeds max size
|
|
148
|
-
if (session.scrollback.length > MAX_SCROLLBACK_LINES) {
|
|
149
|
-
session.scrollback = session.scrollback.slice(-MAX_SCROLLBACK_LINES);
|
|
150
|
-
}
|
|
151
|
-
session.lastActivityAt = Date.now();
|
|
152
|
-
}
|
|
153
117
|
/**
|
|
154
118
|
* Check if PTY functionality is available
|
|
155
119
|
*/
|
|
@@ -165,7 +129,7 @@ export class PTYManager extends EventEmitter {
|
|
|
165
129
|
/**
|
|
166
130
|
* Create a new terminal session
|
|
167
131
|
*/
|
|
168
|
-
create(terminalId, workingDir, cols = 80, rows = 24, requestedShell) {
|
|
132
|
+
create(terminalId, workingDir, cols = 80, rows = 24, requestedShell, options) {
|
|
169
133
|
// Check if node-pty is available
|
|
170
134
|
if (!pty) {
|
|
171
135
|
throw new Error(`PTY_NOT_AVAILABLE:${getPtyInstallInstructions()}`);
|
|
@@ -187,40 +151,79 @@ export class PTYManager extends EventEmitter {
|
|
|
187
151
|
const shell = requestedShell || detectShell();
|
|
188
152
|
const cwd = workingDir || homedir();
|
|
189
153
|
try {
|
|
154
|
+
// Build env: sandboxed sessions get stripped secrets and HOME=projectDir
|
|
155
|
+
const baseEnv = options?.sandboxed
|
|
156
|
+
? sanitizeEnvForSandbox(process.env, cwd)
|
|
157
|
+
: { ...process.env, HOME: homedir() };
|
|
158
|
+
const env = {
|
|
159
|
+
...baseEnv,
|
|
160
|
+
TERM: 'xterm-256color',
|
|
161
|
+
COLORTERM: 'truecolor',
|
|
162
|
+
};
|
|
190
163
|
// Spawn the PTY process
|
|
191
164
|
const ptyProcess = pty.spawn(shell, [], {
|
|
192
165
|
name: 'xterm-256color',
|
|
193
166
|
cols,
|
|
194
167
|
rows,
|
|
195
168
|
cwd,
|
|
196
|
-
env
|
|
197
|
-
...process.env,
|
|
198
|
-
TERM: 'xterm-256color',
|
|
199
|
-
COLORTERM: 'truecolor',
|
|
200
|
-
// Ensure home directory is set
|
|
201
|
-
HOME: homedir(),
|
|
202
|
-
},
|
|
169
|
+
env,
|
|
203
170
|
});
|
|
204
|
-
// Store the session with scrollback buffer
|
|
205
171
|
const session = {
|
|
206
172
|
id: terminalId,
|
|
207
173
|
pty: ptyProcess,
|
|
208
174
|
shell: getShellName(shell),
|
|
209
175
|
cwd,
|
|
210
|
-
scrollback: [],
|
|
211
176
|
createdAt: Date.now(),
|
|
212
177
|
lastActivityAt: Date.now(),
|
|
213
178
|
cols,
|
|
214
179
|
rows,
|
|
180
|
+
_outputBuffer: '',
|
|
181
|
+
_outputTimer: null,
|
|
215
182
|
};
|
|
216
183
|
this.terminals.set(terminalId, session);
|
|
217
|
-
// Handle data output
|
|
184
|
+
// Handle data output — coalesce small chunks to reduce WebSocket message count.
|
|
185
|
+
// On macOS, node-pty emits many tiny chunks (sometimes single bytes) and zsh
|
|
186
|
+
// wraps echoed chars in multi-part ANSI sequences (RPROMPT, syntax highlighting).
|
|
187
|
+
// A longer window on macOS ensures these multi-part sequences arrive as one chunk,
|
|
188
|
+
// which the browser's predictive echo can match correctly.
|
|
189
|
+
const OUTPUT_COALESCE_MS = platform() === 'darwin' ? 16 : 8;
|
|
190
|
+
// High-water mark: flush immediately when buffer exceeds this size
|
|
191
|
+
// to prevent unbounded memory growth during high-output commands (e.g. `yes`)
|
|
192
|
+
const OUTPUT_HIGH_WATER = 64 * 1024; // 64KB
|
|
193
|
+
// Maximum chunk size per WebSocket message to prevent browser overload
|
|
194
|
+
const OUTPUT_CHUNK_SIZE = 64 * 1024;
|
|
195
|
+
const flushOutputBuffer = () => {
|
|
196
|
+
if (session._outputTimer) {
|
|
197
|
+
clearTimeout(session._outputTimer);
|
|
198
|
+
session._outputTimer = null;
|
|
199
|
+
}
|
|
200
|
+
const buffered = session._outputBuffer;
|
|
201
|
+
session._outputBuffer = '';
|
|
202
|
+
// Chunk large output to prevent single massive WebSocket frames
|
|
203
|
+
for (let i = 0; i < buffered.length; i += OUTPUT_CHUNK_SIZE) {
|
|
204
|
+
this.emit('output', terminalId, buffered.slice(i, i + OUTPUT_CHUNK_SIZE));
|
|
205
|
+
}
|
|
206
|
+
};
|
|
218
207
|
ptyProcess.onData((data) => {
|
|
219
|
-
|
|
220
|
-
|
|
208
|
+
session.lastActivityAt = Date.now();
|
|
209
|
+
session._outputBuffer += data;
|
|
210
|
+
// Flush immediately if buffer exceeds high-water mark
|
|
211
|
+
if (session._outputBuffer.length >= OUTPUT_HIGH_WATER) {
|
|
212
|
+
flushOutputBuffer();
|
|
213
|
+
}
|
|
214
|
+
else if (!session._outputTimer) {
|
|
215
|
+
session._outputTimer = setTimeout(flushOutputBuffer, OUTPUT_COALESCE_MS);
|
|
216
|
+
}
|
|
221
217
|
});
|
|
222
|
-
// Handle exit
|
|
218
|
+
// Handle exit — flush any buffered output first
|
|
223
219
|
ptyProcess.onExit(({ exitCode }) => {
|
|
220
|
+
if (session._outputBuffer) {
|
|
221
|
+
flushOutputBuffer();
|
|
222
|
+
}
|
|
223
|
+
else if (session._outputTimer) {
|
|
224
|
+
clearTimeout(session._outputTimer);
|
|
225
|
+
session._outputTimer = null;
|
|
226
|
+
}
|
|
224
227
|
this.emit('exit', terminalId, exitCode);
|
|
225
228
|
this.terminals.delete(terminalId);
|
|
226
229
|
});
|
|
@@ -278,6 +281,15 @@ export class PTYManager extends EventEmitter {
|
|
|
278
281
|
return false;
|
|
279
282
|
}
|
|
280
283
|
try {
|
|
284
|
+
// Flush any coalesced output before closing
|
|
285
|
+
if (session._outputTimer) {
|
|
286
|
+
clearTimeout(session._outputTimer);
|
|
287
|
+
if (session._outputBuffer) {
|
|
288
|
+
this.emit('output', terminalId, session._outputBuffer);
|
|
289
|
+
session._outputBuffer = '';
|
|
290
|
+
}
|
|
291
|
+
session._outputTimer = null;
|
|
292
|
+
}
|
|
281
293
|
session.pty.kill();
|
|
282
294
|
this.terminals.delete(terminalId);
|
|
283
295
|
return true;
|
|
@@ -314,57 +326,6 @@ export class PTYManager extends EventEmitter {
|
|
|
314
326
|
this.close(terminalId);
|
|
315
327
|
}
|
|
316
328
|
}
|
|
317
|
-
/**
|
|
318
|
-
* Check if tmux persistence is available
|
|
319
|
-
*/
|
|
320
|
-
isTmuxAvailable() {
|
|
321
|
-
return isTmuxAvailable();
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Get list of persistent tmux sessions that can be restored
|
|
325
|
-
* These are sessions that survived a server restart
|
|
326
|
-
*/
|
|
327
|
-
getPersistentSessions() {
|
|
328
|
-
const tmux = getTmuxManager();
|
|
329
|
-
return tmux.getActiveSessions();
|
|
330
|
-
}
|
|
331
|
-
/**
|
|
332
|
-
* Create a persistent (tmux-backed) terminal session
|
|
333
|
-
* These sessions survive server restarts
|
|
334
|
-
*/
|
|
335
|
-
createPersistent(terminalId, workingDir, cols = 80, rows = 24, requestedShell) {
|
|
336
|
-
const tmux = getTmuxManager();
|
|
337
|
-
if (!tmux.isAvailable()) {
|
|
338
|
-
throw new Error('tmux is not available for persistent sessions');
|
|
339
|
-
}
|
|
340
|
-
const result = tmux.create(terminalId, workingDir, cols, rows, requestedShell);
|
|
341
|
-
return { ...result, persistent: true };
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Attach to a persistent (tmux) session
|
|
345
|
-
* Returns handlers for write, resize, and detach
|
|
346
|
-
*/
|
|
347
|
-
attachPersistent(terminalId, onOutput, onExit) {
|
|
348
|
-
const tmux = getTmuxManager();
|
|
349
|
-
if (!tmux.exists(terminalId)) {
|
|
350
|
-
return null;
|
|
351
|
-
}
|
|
352
|
-
return tmux.attach(terminalId, onOutput, onExit);
|
|
353
|
-
}
|
|
354
|
-
/**
|
|
355
|
-
* Get scrollback from a persistent (tmux) session
|
|
356
|
-
*/
|
|
357
|
-
getPersistentScrollback(terminalId) {
|
|
358
|
-
const tmux = getTmuxManager();
|
|
359
|
-
return tmux.getScrollback(terminalId);
|
|
360
|
-
}
|
|
361
|
-
/**
|
|
362
|
-
* Close a persistent (tmux) session
|
|
363
|
-
*/
|
|
364
|
-
closePersistent(terminalId) {
|
|
365
|
-
const tmux = getTmuxManager();
|
|
366
|
-
return tmux.close(terminalId);
|
|
367
|
-
}
|
|
368
329
|
}
|
|
369
330
|
// Singleton instance
|
|
370
331
|
let ptyManagerInstance = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty-manager.js","sourceRoot":"","sources":["../../../../server/services/terminal/pty-manager.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,gEAAgE;AAEhE
|
|
1
|
+
{"version":3,"file":"pty-manager.js","sourceRoot":"","sources":["../../../../server/services/terminal/pty-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { HandlerContext } from './handler-context.js';
|
|
2
|
+
import type { WebSocketMessage, WSContext } from './types.js';
|
|
3
|
+
export declare function handleFileMessage(ctx: HandlerContext, ws: WSContext, msg: WebSocketMessage, tabId: string, workingDir: string, permission?: 'control' | 'view'): void;
|
|
4
|
+
export declare function handleFileExplorerMessage(ctx: HandlerContext, ws: WSContext, msg: WebSocketMessage, tabId: string, workingDir: string, permission?: 'control' | 'view'): void;
|
|
5
|
+
//# sourceMappingURL=file-explorer-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-explorer-handlers.d.ts","sourceRoot":"","sources":["../../../../server/services/websocket/file-explorer-handlers.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAqB,SAAS,EAAE,MAAM,YAAY,CAAC;AAEjF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAarK;AAsBD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAwB7K"}
|