lit-shell.js 0.1.3

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 (39) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +304 -0
  3. package/dist/client/browser-bundle.js +314 -0
  4. package/dist/client/browser-bundle.js.map +7 -0
  5. package/dist/client/index.d.ts +7 -0
  6. package/dist/client/index.d.ts.map +1 -0
  7. package/dist/client/index.js +5 -0
  8. package/dist/client/index.js.map +1 -0
  9. package/dist/client/terminal-client.d.ts +122 -0
  10. package/dist/client/terminal-client.d.ts.map +1 -0
  11. package/dist/client/terminal-client.js +328 -0
  12. package/dist/client/terminal-client.js.map +1 -0
  13. package/dist/server/index.d.ts +7 -0
  14. package/dist/server/index.d.ts.map +1 -0
  15. package/dist/server/index.js +5 -0
  16. package/dist/server/index.js.map +1 -0
  17. package/dist/server/terminal-server.d.ts +109 -0
  18. package/dist/server/terminal-server.d.ts.map +1 -0
  19. package/dist/server/terminal-server.js +393 -0
  20. package/dist/server/terminal-server.js.map +1 -0
  21. package/dist/shared/types.d.ts +133 -0
  22. package/dist/shared/types.d.ts.map +1 -0
  23. package/dist/shared/types.js +5 -0
  24. package/dist/shared/types.js.map +1 -0
  25. package/dist/ui/browser-bundle.js +1678 -0
  26. package/dist/ui/browser-bundle.js.map +7 -0
  27. package/dist/ui/index.d.ts +6 -0
  28. package/dist/ui/index.d.ts.map +1 -0
  29. package/dist/ui/index.js +6 -0
  30. package/dist/ui/index.js.map +1 -0
  31. package/dist/ui/lit-shell-terminal.d.ts +105 -0
  32. package/dist/ui/lit-shell-terminal.d.ts.map +1 -0
  33. package/dist/ui/lit-shell-terminal.js +570 -0
  34. package/dist/ui/lit-shell-terminal.js.map +1 -0
  35. package/dist/ui/styles.d.ts +16 -0
  36. package/dist/ui/styles.d.ts.map +1 -0
  37. package/dist/ui/styles.js +125 -0
  38. package/dist/ui/styles.js.map +1 -0
  39. package/package.json +94 -0
@@ -0,0 +1,393 @@
1
+ /**
2
+ * Server-side terminal handler using node-pty
3
+ *
4
+ * Manages PTY sessions and WebSocket connections for web-based terminals.
5
+ */
6
+ import { WebSocketServer } from 'ws';
7
+ import * as path from 'path';
8
+ import * as os from 'os';
9
+ /**
10
+ * Get platform default shell
11
+ */
12
+ function getDefaultShell() {
13
+ if (process.platform === 'win32') {
14
+ return process.env.COMSPEC || 'cmd.exe';
15
+ }
16
+ return process.env.SHELL || '/bin/bash';
17
+ }
18
+ /**
19
+ * Terminal server class
20
+ */
21
+ export class TerminalServer {
22
+ constructor(options = {}) {
23
+ this.sessions = new Map();
24
+ this.wss = null;
25
+ this.pty = null;
26
+ this.cleanupInterval = null;
27
+ this.config = {
28
+ allowedShells: options.allowedShells || [getDefaultShell()],
29
+ allowedPaths: options.allowedPaths || [os.homedir()],
30
+ defaultShell: options.defaultShell || getDefaultShell(),
31
+ defaultCwd: options.defaultCwd || os.homedir(),
32
+ maxSessionsPerClient: options.maxSessionsPerClient || 5,
33
+ idleTimeout: options.idleTimeout || 30 * 60 * 1000, // 30 minutes
34
+ path: options.path || '/terminal',
35
+ verbose: options.verbose || false,
36
+ };
37
+ // Start cleanup interval
38
+ this.cleanupInterval = setInterval(() => this.cleanupSessions(), 60000);
39
+ }
40
+ /**
41
+ * Initialize node-pty (lazy load)
42
+ */
43
+ async initPty() {
44
+ if (this.pty)
45
+ return;
46
+ try {
47
+ // @ts-ignore - node-pty is a peer dependency
48
+ this.pty = await import('node-pty');
49
+ }
50
+ catch (error) {
51
+ throw new Error('node-pty is required for lit-shell. Install it with: npm install node-pty');
52
+ }
53
+ }
54
+ /**
55
+ * Attach to an existing HTTP server
56
+ */
57
+ attach(server) {
58
+ this.wss = new WebSocketServer({
59
+ server,
60
+ path: this.config.path,
61
+ });
62
+ this.setupWebSocketServer();
63
+ this.log(`Terminal WebSocket server listening on ${this.config.path}`);
64
+ }
65
+ /**
66
+ * Start standalone WebSocket server
67
+ */
68
+ listen(port) {
69
+ this.wss = new WebSocketServer({ port });
70
+ this.setupWebSocketServer();
71
+ this.log(`Terminal WebSocket server listening on port ${port}`);
72
+ }
73
+ /**
74
+ * Setup WebSocket server event handlers
75
+ */
76
+ setupWebSocketServer() {
77
+ if (!this.wss)
78
+ return;
79
+ this.wss.on('connection', async (ws, req) => {
80
+ this.log(`Client connected from ${req.socket.remoteAddress}`);
81
+ await this.handleConnection(ws, req);
82
+ });
83
+ }
84
+ /**
85
+ * Handle WebSocket connection
86
+ * Can be called directly for manual WebSocket upgrade handling
87
+ */
88
+ async handleConnection(ws, req) {
89
+ // Load node-pty
90
+ try {
91
+ await this.initPty();
92
+ }
93
+ catch (error) {
94
+ this.sendError(ws, error.message);
95
+ ws.close();
96
+ return;
97
+ }
98
+ // Handle messages
99
+ ws.on('message', (data) => {
100
+ try {
101
+ const message = JSON.parse(data.toString());
102
+ this.handleMessage(ws, message);
103
+ }
104
+ catch (error) {
105
+ this.log(`Invalid message: ${error}`, 'error');
106
+ }
107
+ });
108
+ ws.on('close', () => {
109
+ this.log('Client disconnected');
110
+ // Clean up sessions for this WebSocket
111
+ for (const [sessionId, session] of this.sessions.entries()) {
112
+ if (session.ws === ws) {
113
+ this.closeSession(sessionId);
114
+ }
115
+ }
116
+ });
117
+ ws.on('error', (error) => {
118
+ this.log(`WebSocket error: ${error.message}`, 'error');
119
+ });
120
+ }
121
+ /**
122
+ * Handle message from client
123
+ */
124
+ handleMessage(ws, message) {
125
+ switch (message.type) {
126
+ case 'spawn':
127
+ this.spawnSession(ws, message.options || {});
128
+ break;
129
+ case 'data':
130
+ if (message.sessionId) {
131
+ this.writeToSession(message.sessionId, message.data);
132
+ }
133
+ break;
134
+ case 'resize':
135
+ if (message.sessionId) {
136
+ this.resizeSession(message.sessionId, message.cols, message.rows);
137
+ }
138
+ break;
139
+ case 'close':
140
+ if (message.sessionId) {
141
+ this.closeSession(message.sessionId);
142
+ }
143
+ break;
144
+ default:
145
+ this.log(`Unknown message type: ${message.type}`, 'warn');
146
+ }
147
+ }
148
+ /**
149
+ * Validate shell path
150
+ */
151
+ isShellAllowed(shell) {
152
+ if (this.config.allowedShells.length === 0)
153
+ return true;
154
+ const normalizedShell = path.normalize(shell);
155
+ const shellBasename = path.basename(normalizedShell).toLowerCase();
156
+ return this.config.allowedShells.some((allowedShell) => {
157
+ const normalizedAllowed = path.normalize(allowedShell);
158
+ const allowedBasename = path.basename(normalizedAllowed).toLowerCase();
159
+ return (normalizedShell === normalizedAllowed ||
160
+ shellBasename === allowedBasename);
161
+ });
162
+ }
163
+ /**
164
+ * Validate working directory
165
+ */
166
+ isCwdAllowed(cwd) {
167
+ if (this.config.allowedPaths.length === 0)
168
+ return true;
169
+ const normalizedCwd = path.normalize(path.resolve(cwd));
170
+ return this.config.allowedPaths.some((allowedPath) => normalizedCwd.startsWith(path.normalize(path.resolve(allowedPath))));
171
+ }
172
+ /**
173
+ * Spawn a new terminal session
174
+ */
175
+ spawnSession(ws, options) {
176
+ const shell = options.shell || this.config.defaultShell;
177
+ const cwd = options.cwd || this.config.defaultCwd;
178
+ const cols = options.cols || 80;
179
+ const rows = options.rows || 24;
180
+ const env = options.env || {};
181
+ // Count sessions for this client
182
+ let clientSessions = 0;
183
+ for (const session of this.sessions.values()) {
184
+ if (session.ws === ws)
185
+ clientSessions++;
186
+ }
187
+ if (clientSessions >= this.config.maxSessionsPerClient) {
188
+ this.sendError(ws, `Maximum sessions (${this.config.maxSessionsPerClient}) reached`);
189
+ return;
190
+ }
191
+ // Validate shell
192
+ if (!this.isShellAllowed(shell)) {
193
+ this.sendError(ws, `Shell not allowed: ${shell}. Allowed: ${this.config.allowedShells.join(', ')}`);
194
+ return;
195
+ }
196
+ // Validate cwd
197
+ if (!this.isCwdAllowed(cwd)) {
198
+ this.sendError(ws, `Working directory not allowed: ${cwd}`);
199
+ return;
200
+ }
201
+ try {
202
+ // Spawn PTY
203
+ const ptyProcess = this.pty.spawn(shell, [], {
204
+ name: 'xterm-256color',
205
+ cols,
206
+ rows,
207
+ cwd,
208
+ env: { ...process.env, ...env },
209
+ });
210
+ const sessionId = `term-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
211
+ const now = new Date();
212
+ // Store session
213
+ const session = {
214
+ id: sessionId,
215
+ pty: ptyProcess,
216
+ ws,
217
+ shell,
218
+ cwd,
219
+ cols,
220
+ rows,
221
+ createdAt: now,
222
+ lastActivity: now,
223
+ };
224
+ this.sessions.set(sessionId, session);
225
+ // Handle PTY output
226
+ ptyProcess.onData((data) => {
227
+ session.lastActivity = new Date();
228
+ ws.send(JSON.stringify({
229
+ type: 'data',
230
+ sessionId,
231
+ data,
232
+ }));
233
+ });
234
+ // Handle PTY exit
235
+ ptyProcess.onExit(({ exitCode }) => {
236
+ ws.send(JSON.stringify({
237
+ type: 'exit',
238
+ sessionId,
239
+ exitCode,
240
+ }));
241
+ this.sessions.delete(sessionId);
242
+ this.log(`Session exited: ${sessionId} (code: ${exitCode})`);
243
+ });
244
+ // Notify client
245
+ ws.send(JSON.stringify({
246
+ type: 'spawned',
247
+ sessionId,
248
+ shell,
249
+ cwd,
250
+ cols,
251
+ rows,
252
+ }));
253
+ this.log(`Session spawned: ${sessionId} (shell: ${shell}, cwd: ${cwd})`);
254
+ }
255
+ catch (error) {
256
+ this.log(`Failed to spawn session: ${error}`, 'error');
257
+ this.sendError(ws, error.message);
258
+ }
259
+ }
260
+ /**
261
+ * Write data to session
262
+ */
263
+ writeToSession(sessionId, data) {
264
+ const session = this.sessions.get(sessionId);
265
+ if (!session) {
266
+ this.log(`Session not found: ${sessionId}`, 'warn');
267
+ return;
268
+ }
269
+ session.lastActivity = new Date();
270
+ session.pty.write(data);
271
+ }
272
+ /**
273
+ * Resize session
274
+ */
275
+ resizeSession(sessionId, cols, rows) {
276
+ const session = this.sessions.get(sessionId);
277
+ if (!session) {
278
+ this.log(`Session not found: ${sessionId}`, 'warn');
279
+ return;
280
+ }
281
+ session.cols = cols;
282
+ session.rows = rows;
283
+ session.pty.resize(cols, rows);
284
+ }
285
+ /**
286
+ * Close session
287
+ */
288
+ closeSession(sessionId) {
289
+ const session = this.sessions.get(sessionId);
290
+ if (!session)
291
+ return;
292
+ try {
293
+ session.pty.kill();
294
+ }
295
+ catch (error) {
296
+ this.log(`Error killing PTY: ${error}`, 'error');
297
+ }
298
+ this.sessions.delete(sessionId);
299
+ this.log(`Session closed: ${sessionId}`);
300
+ }
301
+ /**
302
+ * Clean up inactive sessions
303
+ */
304
+ cleanupSessions() {
305
+ if (this.config.idleTimeout === 0)
306
+ return;
307
+ const now = Date.now();
308
+ for (const [sessionId, session] of this.sessions.entries()) {
309
+ const idleTime = now - session.lastActivity.getTime();
310
+ if (idleTime > this.config.idleTimeout) {
311
+ this.log(`Closing inactive session: ${sessionId}`);
312
+ session.ws.send(JSON.stringify({
313
+ type: 'exit',
314
+ sessionId,
315
+ exitCode: -1,
316
+ }));
317
+ this.closeSession(sessionId);
318
+ }
319
+ }
320
+ }
321
+ /**
322
+ * Send error message to client
323
+ */
324
+ sendError(ws, error, sessionId) {
325
+ ws.send(JSON.stringify({
326
+ type: 'error',
327
+ sessionId,
328
+ error,
329
+ }));
330
+ }
331
+ /**
332
+ * Log message
333
+ */
334
+ log(message, level = 'info') {
335
+ if (!this.config.verbose && level === 'info')
336
+ return;
337
+ const prefix = '[lit-shell]';
338
+ switch (level) {
339
+ case 'error':
340
+ console.error(`${prefix} ${message}`);
341
+ break;
342
+ case 'warn':
343
+ console.warn(`${prefix} ${message}`);
344
+ break;
345
+ default:
346
+ console.log(`${prefix} ${message}`);
347
+ }
348
+ }
349
+ /**
350
+ * Get all active sessions
351
+ */
352
+ getSessions() {
353
+ return Array.from(this.sessions.values()).map((session) => ({
354
+ sessionId: session.id,
355
+ shell: session.shell,
356
+ cwd: session.cwd,
357
+ cols: session.cols,
358
+ rows: session.rows,
359
+ createdAt: session.createdAt,
360
+ }));
361
+ }
362
+ /**
363
+ * Close all sessions and stop server
364
+ */
365
+ close() {
366
+ // Clear cleanup interval
367
+ if (this.cleanupInterval) {
368
+ clearInterval(this.cleanupInterval);
369
+ this.cleanupInterval = null;
370
+ }
371
+ // Close all sessions
372
+ for (const sessionId of this.sessions.keys()) {
373
+ this.closeSession(sessionId);
374
+ }
375
+ // Close WebSocket server
376
+ if (this.wss) {
377
+ this.wss.close();
378
+ this.wss = null;
379
+ }
380
+ this.log('Terminal server closed');
381
+ }
382
+ }
383
+ /**
384
+ * Express middleware to attach terminal server
385
+ */
386
+ export function createTerminalMiddleware(options = {}) {
387
+ const server = new TerminalServer(options);
388
+ return {
389
+ server,
390
+ attach: (httpServer) => server.attach(httpServer),
391
+ };
392
+ }
393
+ //# sourceMappingURL=terminal-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-server.js","sourceRoot":"","sources":["../../src/server/terminal-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Shared types for lit-shell.js
3
+ */
4
+ /**
5
+ * Terminal spawn options
6
+ */
7
+ export interface TerminalOptions {
8
+ /** Shell to use (e.g., 'bash', 'zsh', 'cmd.exe', 'powershell.exe') */
9
+ shell?: string;
10
+ /** Working directory */
11
+ cwd?: string;
12
+ /** Environment variables */
13
+ env?: Record<string, string>;
14
+ /** Initial columns (default: 80) */
15
+ cols?: number;
16
+ /** Initial rows (default: 24) */
17
+ rows?: number;
18
+ }
19
+ /**
20
+ * Server configuration
21
+ */
22
+ export interface ServerConfig {
23
+ /** Allowed shells (empty = all allowed) */
24
+ allowedShells?: string[];
25
+ /** Allowed working directories (empty = all allowed) */
26
+ allowedPaths?: string[];
27
+ /** Default shell if not specified by client */
28
+ defaultShell?: string;
29
+ /** Default working directory */
30
+ defaultCwd?: string;
31
+ /** Maximum concurrent sessions per client */
32
+ maxSessionsPerClient?: number;
33
+ /** Session idle timeout in ms (0 = no timeout) */
34
+ idleTimeout?: number;
35
+ }
36
+ /**
37
+ * WebSocket message types
38
+ */
39
+ export type MessageType = 'spawn' | 'data' | 'resize' | 'close' | 'error' | 'exit' | 'spawned';
40
+ /**
41
+ * Base message structure
42
+ */
43
+ export interface BaseMessage {
44
+ type: MessageType;
45
+ sessionId?: string;
46
+ }
47
+ /**
48
+ * Spawn request from client
49
+ */
50
+ export interface SpawnMessage extends BaseMessage {
51
+ type: 'spawn';
52
+ options?: TerminalOptions;
53
+ }
54
+ /**
55
+ * Spawned response from server
56
+ */
57
+ export interface SpawnedMessage extends BaseMessage {
58
+ type: 'spawned';
59
+ sessionId: string;
60
+ shell: string;
61
+ cwd: string;
62
+ cols: number;
63
+ rows: number;
64
+ }
65
+ /**
66
+ * Data message (bidirectional)
67
+ */
68
+ export interface DataMessage extends BaseMessage {
69
+ type: 'data';
70
+ sessionId: string;
71
+ data: string;
72
+ }
73
+ /**
74
+ * Resize request from client
75
+ */
76
+ export interface ResizeMessage extends BaseMessage {
77
+ type: 'resize';
78
+ sessionId: string;
79
+ cols: number;
80
+ rows: number;
81
+ }
82
+ /**
83
+ * Close request from client
84
+ */
85
+ export interface CloseMessage extends BaseMessage {
86
+ type: 'close';
87
+ sessionId: string;
88
+ }
89
+ /**
90
+ * Error message from server
91
+ */
92
+ export interface ErrorMessage extends BaseMessage {
93
+ type: 'error';
94
+ sessionId?: string;
95
+ error: string;
96
+ }
97
+ /**
98
+ * Exit message from server
99
+ */
100
+ export interface ExitMessage extends BaseMessage {
101
+ type: 'exit';
102
+ sessionId: string;
103
+ exitCode: number;
104
+ }
105
+ /**
106
+ * Union of all message types
107
+ */
108
+ export type TerminalMessage = SpawnMessage | SpawnedMessage | DataMessage | ResizeMessage | CloseMessage | ErrorMessage | ExitMessage;
109
+ /**
110
+ * Client configuration
111
+ */
112
+ export interface ClientConfig {
113
+ /** WebSocket URL */
114
+ url: string;
115
+ /** Reconnect on disconnect (default: true) */
116
+ reconnect?: boolean;
117
+ /** Maximum reconnection attempts (default: 10) */
118
+ maxReconnectAttempts?: number;
119
+ /** Initial reconnection delay in ms (default: 1000) */
120
+ reconnectDelay?: number;
121
+ }
122
+ /**
123
+ * Terminal session info
124
+ */
125
+ export interface SessionInfo {
126
+ sessionId: string;
127
+ shell: string;
128
+ cwd: string;
129
+ cols: number;
130
+ rows: number;
131
+ createdAt: Date;
132
+ }
133
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared types for lit-shell.js
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}