lit-shell.js 0.1.4 → 1.1.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.
@@ -2,10 +2,11 @@
2
2
  * Server-side terminal handler using node-pty
3
3
  *
4
4
  * Manages PTY sessions and WebSocket connections for web-based terminals.
5
+ * Supports session multiplexing - multiple clients can connect to the same session.
5
6
  */
6
7
  import { WebSocket } from 'ws';
7
8
  import type { Server as HttpServer } from 'http';
8
- import type { ServerConfig, SessionInfo } from '../shared/types.js';
9
+ import type { ServerConfig, SessionInfo, SharedSessionInfo, SessionListFilter } from '../shared/types.js';
9
10
  /**
10
11
  * Terminal server options
11
12
  */
@@ -18,17 +19,38 @@ export interface TerminalServerOptions extends ServerConfig {
18
19
  port?: number;
19
20
  /** Enable verbose logging */
20
21
  verbose?: boolean;
22
+ /** Path to Docker CLI (default: 'docker') */
23
+ dockerPath?: string;
24
+ /** Maximum clients per session (default: 10) */
25
+ maxClientsPerSession?: number;
26
+ /** Orphan session timeout in ms (default: 60000) */
27
+ orphanTimeout?: number;
28
+ /** History buffer size in characters (default: 50000) */
29
+ historySize?: number;
30
+ /** Enable session history (default: true) */
31
+ historyEnabled?: boolean;
32
+ /** Maximum total sessions (default: 100) */
33
+ maxSessionsTotal?: number;
21
34
  }
22
35
  /**
23
- * Terminal server class
36
+ * Terminal server class with session multiplexing support
24
37
  */
25
38
  export declare class TerminalServer {
26
39
  private config;
27
- private sessions;
40
+ private sessionManager;
28
41
  private wss;
29
42
  private pty;
30
43
  private cleanupInterval;
44
+ private clientIds;
31
45
  constructor(options?: TerminalServerOptions);
46
+ /**
47
+ * Generate a unique client ID
48
+ */
49
+ private generateClientId;
50
+ /**
51
+ * Get or create client ID for a WebSocket
52
+ */
53
+ private getClientId;
32
54
  /**
33
55
  * Initialize node-pty (lazy load)
34
56
  */
@@ -54,6 +76,18 @@ export declare class TerminalServer {
54
76
  * Handle message from client
55
77
  */
56
78
  private handleMessage;
79
+ /**
80
+ * Handle list sessions request
81
+ */
82
+ private handleListSessions;
83
+ /**
84
+ * Handle join session request
85
+ */
86
+ private handleJoinSession;
87
+ /**
88
+ * Handle leave session request
89
+ */
90
+ private handleLeaveSession;
57
91
  /**
58
92
  * Validate shell path
59
93
  */
@@ -62,10 +96,26 @@ export declare class TerminalServer {
62
96
  * Validate working directory
63
97
  */
64
98
  private isCwdAllowed;
99
+ /**
100
+ * Validate container name/ID against allowed patterns
101
+ */
102
+ private isContainerAllowed;
103
+ /**
104
+ * Spawn a Docker exec session
105
+ */
106
+ private spawnDockerExecSession;
107
+ /**
108
+ * Spawn a Docker attach session (connects to container's main process)
109
+ */
110
+ private spawnDockerAttachSession;
65
111
  /**
66
112
  * Spawn a new terminal session
67
113
  */
68
114
  private spawnSession;
115
+ /**
116
+ * Setup PTY event handlers for a session
117
+ */
118
+ private setupSessionHandlers;
69
119
  /**
70
120
  * Write data to session
71
121
  */
@@ -75,7 +125,7 @@ export declare class TerminalServer {
75
125
  */
76
126
  private resizeSession;
77
127
  /**
78
- * Close session
128
+ * Close session (only owner can close, or force close)
79
129
  */
80
130
  private closeSession;
81
131
  /**
@@ -91,9 +141,29 @@ export declare class TerminalServer {
91
141
  */
92
142
  private log;
93
143
  /**
94
- * Get all active sessions
144
+ * Send server info to client
145
+ */
146
+ private sendServerInfo;
147
+ /**
148
+ * List available Docker containers
149
+ */
150
+ private listContainers;
151
+ /**
152
+ * Get all active sessions (for external access)
95
153
  */
96
154
  getSessions(): SessionInfo[];
155
+ /**
156
+ * Get all active sessions with multiplexing info
157
+ */
158
+ getSharedSessions(filter?: SessionListFilter): SharedSessionInfo[];
159
+ /**
160
+ * Get session manager statistics
161
+ */
162
+ getStats(): {
163
+ sessionCount: number;
164
+ clientCount: number;
165
+ orphanedCount: number;
166
+ };
97
167
  /**
98
168
  * Close all sessions and stop server
99
169
  */
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-server.d.ts","sourceRoot":"","sources":["../../src/server/terminal-server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAmB,MAAM,IAAI,CAAC;AAGhD,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,KAAK,EACV,YAAY,EAGZ,WAAW,EACZ,MAAM,oBAAoB,CAAC;AA2B5B;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IACzD,sDAAsD;IACtD,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAA2D;IACzE,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,eAAe,CAA+C;gBAE1D,OAAO,GAAE,qBAA0B;IAgB/C;;OAEG;YACW,OAAO;IAarB;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAUhC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;;OAGG;IACG,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC9D;;OAEG;IACH,OAAO,CAAC,aAAa;IA6BrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,YAAY;IA2GpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,OAAO,CAAC,GAAG;IAgBX;;OAEG;IACH,WAAW,IAAI,WAAW,EAAE;IAW5B;;OAEG;IACH,KAAK,IAAI,IAAI;CAoBd;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,IAAI,CAAC,qBAAqB,EAAE,QAAQ,GAAG,MAAM,CAAM,GAC3D;IACD,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CAC1C,CAMA"}
1
+ {"version":3,"file":"terminal-server.d.ts","sourceRoot":"","sources":["../../src/server/terminal-server.ts"],"names":[],"mappings":"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"}