treesap 0.1.12 → 0.2.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/README.md +56 -0
- package/dist/app.d.ts +28 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +184 -0
- package/dist/app.js.map +1 -0
- package/dist/context.d.ts +36 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +95 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +5 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -9
- package/dist/index.js.map +1 -1
- package/dist/middleware/cors.d.ts +11 -0
- package/dist/middleware/cors.d.ts.map +1 -0
- package/dist/middleware/cors.js +34 -0
- package/dist/middleware/cors.js.map +1 -0
- package/dist/middleware/serve-static.d.ts +6 -0
- package/dist/middleware/serve-static.d.ts.map +1 -0
- package/dist/middleware/serve-static.js +68 -0
- package/dist/middleware/serve-static.js.map +1 -0
- package/dist/node.d.ts +8 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +52 -0
- package/dist/node.js.map +1 -0
- package/dist/path.d.ts +10 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +45 -0
- package/dist/path.js.map +1 -0
- package/dist/vite.d.ts +31 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +278 -0
- package/dist/vite.js.map +1 -0
- package/package.json +33 -40
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -137
- package/dist/cli.js.map +0 -1
- package/dist/components/BaseHead.d.ts +0 -5
- package/dist/components/BaseHead.d.ts.map +0 -1
- package/dist/components/BaseHead.js +0 -161
- package/dist/components/BaseHead.js.map +0 -1
- package/dist/components/ChatInput.d.ts +0 -7
- package/dist/components/ChatInput.d.ts.map +0 -1
- package/dist/components/ChatInput.js +0 -11
- package/dist/components/ChatInput.js.map +0 -1
- package/dist/components/Sidebar.d.ts +0 -8
- package/dist/components/Sidebar.d.ts.map +0 -1
- package/dist/components/Sidebar.js +0 -7
- package/dist/components/Sidebar.js.map +0 -1
- package/dist/components/SimpleLivePreview.d.ts +0 -7
- package/dist/components/SimpleLivePreview.d.ts.map +0 -1
- package/dist/components/SimpleLivePreview.js +0 -7
- package/dist/components/SimpleLivePreview.js.map +0 -1
- package/dist/components/Terminal.d.ts +0 -7
- package/dist/components/Terminal.d.ts.map +0 -1
- package/dist/components/Terminal.js +0 -14
- package/dist/components/Terminal.js.map +0 -1
- package/dist/components/VoiceRecorder.d.ts +0 -4
- package/dist/components/VoiceRecorder.d.ts.map +0 -1
- package/dist/components/VoiceRecorder.js +0 -5
- package/dist/components/VoiceRecorder.js.map +0 -1
- package/dist/components/icons/GeminiLogo.d.ts +0 -7
- package/dist/components/icons/GeminiLogo.d.ts.map +0 -1
- package/dist/components/icons/GeminiLogo.js +0 -5
- package/dist/components/icons/GeminiLogo.js.map +0 -1
- package/dist/components/icons/OllamaLogo.d.ts +0 -2
- package/dist/components/icons/OllamaLogo.d.ts.map +0 -1
- package/dist/components/icons/OllamaLogo.js +0 -5
- package/dist/components/icons/OllamaLogo.js.map +0 -1
- package/dist/layouts/Layout.d.ts +0 -9
- package/dist/layouts/Layout.d.ts.map +0 -1
- package/dist/layouts/Layout.js +0 -9
- package/dist/layouts/Layout.js.map +0 -1
- package/dist/layouts/NotFoundLayout.d.ts +0 -2
- package/dist/layouts/NotFoundLayout.d.ts.map +0 -1
- package/dist/layouts/NotFoundLayout.js +0 -6
- package/dist/layouts/NotFoundLayout.js.map +0 -1
- package/dist/pages/Code.d.ts +0 -7
- package/dist/pages/Code.d.ts.map +0 -1
- package/dist/pages/Code.js +0 -8
- package/dist/pages/Code.js.map +0 -1
- package/dist/pages/Home.d.ts +0 -7
- package/dist/pages/Home.d.ts.map +0 -1
- package/dist/pages/Home.js +0 -8
- package/dist/pages/Home.js.map +0 -1
- package/dist/pages/Welcome.d.ts +0 -2
- package/dist/pages/Welcome.d.ts.map +0 -1
- package/dist/pages/Welcome.js +0 -6
- package/dist/pages/Welcome.js.map +0 -1
- package/dist/server.d.ts +0 -11
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -434
- package/dist/server.js.map +0 -1
- package/dist/services/dev-server.d.ts +0 -29
- package/dist/services/dev-server.d.ts.map +0 -1
- package/dist/services/dev-server.js +0 -201
- package/dist/services/dev-server.js.map +0 -1
- package/dist/services/terminal.d.ts +0 -46
- package/dist/services/terminal.d.ts.map +0 -1
- package/dist/services/terminal.js +0 -264
- package/dist/services/terminal.js.map +0 -1
- package/dist/services/websocket.d.ts +0 -48
- package/dist/services/websocket.d.ts.map +0 -1
- package/dist/services/websocket.js +0 -332
- package/dist/services/websocket.js.map +0 -1
- package/dist/static/components/ChatInput.js +0 -237
- package/dist/static/components/Sidebar.js +0 -225
- package/dist/static/components/SimpleLivePreview.js +0 -305
- package/dist/static/components/Terminal.js +0 -461
- package/dist/static/components/TerminalTabs.js +0 -383
- package/dist/static/favicon.svg +0 -14
- package/dist/static/signals/LivePreviewSignal.js +0 -71
- package/dist/static/signals/SidebarSignal.js +0 -123
- package/dist/static/signals/TerminalSignal.js +0 -273
- package/dist/static/styles/main.css +0 -1761
- package/src/cli.ts +0 -155
- package/src/components/BaseHead.ts +0 -164
- package/src/components/ChatInput.tsx +0 -56
- package/src/components/Sidebar.tsx +0 -99
- package/src/components/SimpleLivePreview.tsx +0 -40
- package/src/components/Terminal.tsx +0 -40
- package/src/components/VoiceRecorder.tsx +0 -33
- package/src/components/icons/GeminiLogo.tsx +0 -10
- package/src/components/icons/OllamaLogo.tsx +0 -5
- package/src/index.tsx +0 -12
- package/src/layouts/Layout.tsx +0 -41
- package/src/layouts/NotFoundLayout.tsx +0 -15
- package/src/pages/Code.tsx +0 -34
- package/src/pages/Welcome.tsx +0 -56
- package/src/server.tsx +0 -519
- package/src/services/dev-server.ts +0 -234
- package/src/services/terminal.ts +0 -325
- package/src/services/websocket.ts +0 -405
- package/src/static/components/ChatInput.js +0 -237
- package/src/static/components/Sidebar.js +0 -225
- package/src/static/components/SimpleLivePreview.js +0 -305
- package/src/static/components/Terminal.js +0 -461
- package/src/static/components/TerminalTabs.js +0 -383
- package/src/static/favicon.svg +0 -14
- package/src/static/signals/LivePreviewSignal.js +0 -71
- package/src/static/signals/SidebarSignal.js +0 -123
- package/src/static/signals/TerminalSignal.js +0 -273
- package/src/static/styles/main.css +0 -1761
- package/src/styles/input.css +0 -3
- package/tailwind.config.ts +0 -22
- package/tsconfig.json +0 -37
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import process from "node:process";
|
|
2
|
-
import { spawn } from "node:child_process";
|
|
3
|
-
export class DevServerManager {
|
|
4
|
-
command;
|
|
5
|
-
port;
|
|
6
|
-
childProcess = null;
|
|
7
|
-
status;
|
|
8
|
-
logBuffer = [];
|
|
9
|
-
errorBuffer = [];
|
|
10
|
-
maxBufferSize = 1000;
|
|
11
|
-
constructor(command, port) {
|
|
12
|
-
this.command = command;
|
|
13
|
-
this.port = port;
|
|
14
|
-
this.status = {
|
|
15
|
-
running: false,
|
|
16
|
-
command: command,
|
|
17
|
-
port: port,
|
|
18
|
-
logs: [],
|
|
19
|
-
errors: []
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
async start() {
|
|
23
|
-
if (this.childProcess) {
|
|
24
|
-
console.log("Dev server is already running");
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
try {
|
|
28
|
-
console.log(`🚀 Starting dev server: ${this.command}`);
|
|
29
|
-
// Split command into parts for spawn
|
|
30
|
-
const commandParts = this.command.split(' ');
|
|
31
|
-
const cmd = commandParts[0];
|
|
32
|
-
const args = commandParts.slice(1);
|
|
33
|
-
this.childProcess = spawn(cmd, args, {
|
|
34
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
35
|
-
cwd: process.cwd(),
|
|
36
|
-
shell: process.platform === 'win32'
|
|
37
|
-
});
|
|
38
|
-
this.status.running = true;
|
|
39
|
-
this.status.pid = this.childProcess.pid;
|
|
40
|
-
this.status.startTime = new Date();
|
|
41
|
-
// Handle stdout
|
|
42
|
-
if (this.childProcess.stdout) {
|
|
43
|
-
this.childProcess.stdout.on('data', (data) => {
|
|
44
|
-
const output = data.toString();
|
|
45
|
-
this.addLog(output);
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
// Handle stderr
|
|
49
|
-
if (this.childProcess.stderr) {
|
|
50
|
-
this.childProcess.stderr.on('data', (data) => {
|
|
51
|
-
const output = data.toString();
|
|
52
|
-
this.addError(output);
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
// Handle process exit
|
|
56
|
-
this.childProcess.on('exit', (code) => {
|
|
57
|
-
console.log(`Dev server exited with code ${code}`);
|
|
58
|
-
this.status.running = false;
|
|
59
|
-
this.status.pid = undefined;
|
|
60
|
-
this.childProcess = null;
|
|
61
|
-
});
|
|
62
|
-
this.childProcess.on('error', (error) => {
|
|
63
|
-
console.error("Dev server error:", error);
|
|
64
|
-
this.status.running = false;
|
|
65
|
-
this.status.pid = undefined;
|
|
66
|
-
this.childProcess = null;
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
console.error("Failed to start dev server:", error);
|
|
71
|
-
this.status.running = false;
|
|
72
|
-
this.addError(`Failed to start: ${error instanceof Error ? error.message : String(error)}`);
|
|
73
|
-
throw error;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
async stop() {
|
|
77
|
-
if (!this.childProcess) {
|
|
78
|
-
console.log("Dev server is not running");
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
try {
|
|
82
|
-
this.childProcess.kill("SIGTERM");
|
|
83
|
-
// Wait for process to exit with timeout
|
|
84
|
-
await new Promise((resolve, reject) => {
|
|
85
|
-
const timeout = setTimeout(() => {
|
|
86
|
-
if (this.childProcess) {
|
|
87
|
-
this.childProcess.kill("SIGKILL");
|
|
88
|
-
}
|
|
89
|
-
reject(new Error("Process did not exit gracefully"));
|
|
90
|
-
}, 5000);
|
|
91
|
-
this.childProcess.on('exit', () => {
|
|
92
|
-
clearTimeout(timeout);
|
|
93
|
-
resolve();
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
this.childProcess = null;
|
|
97
|
-
this.status.running = false;
|
|
98
|
-
this.status.pid = undefined;
|
|
99
|
-
}
|
|
100
|
-
catch (error) {
|
|
101
|
-
console.error("Failed to stop dev server:", error);
|
|
102
|
-
this.addError(`Failed to stop: ${error instanceof Error ? error.message : String(error)}`);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
async restart() {
|
|
106
|
-
console.log("🔄 Restarting dev server...");
|
|
107
|
-
await this.stop();
|
|
108
|
-
// Small delay to ensure cleanup
|
|
109
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
110
|
-
await this.start();
|
|
111
|
-
}
|
|
112
|
-
getStatus() {
|
|
113
|
-
return {
|
|
114
|
-
...this.status,
|
|
115
|
-
logs: [...this.logBuffer],
|
|
116
|
-
errors: [...this.errorBuffer]
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
getLogs(_since) {
|
|
120
|
-
// For now, return all logs. In future, could filter by timestamp
|
|
121
|
-
return [...this.logBuffer];
|
|
122
|
-
}
|
|
123
|
-
sendCommand(command) {
|
|
124
|
-
if (!this.childProcess || !this.childProcess.stdin) {
|
|
125
|
-
return false;
|
|
126
|
-
}
|
|
127
|
-
try {
|
|
128
|
-
this.childProcess.stdin.write(command + '\n');
|
|
129
|
-
return true;
|
|
130
|
-
}
|
|
131
|
-
catch (error) {
|
|
132
|
-
console.error('Failed to send command to subprocess:', error);
|
|
133
|
-
return false;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
addLog(message) {
|
|
137
|
-
const timestamp = new Date().toISOString();
|
|
138
|
-
const logEntry = `[${timestamp}] ${message}`;
|
|
139
|
-
this.logBuffer.push(logEntry);
|
|
140
|
-
if (this.logBuffer.length > this.maxBufferSize) {
|
|
141
|
-
this.logBuffer.shift();
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
addError(message) {
|
|
145
|
-
const timestamp = new Date().toISOString();
|
|
146
|
-
const errorEntry = `[${timestamp}] ${message}`;
|
|
147
|
-
this.errorBuffer.push(errorEntry);
|
|
148
|
-
if (this.errorBuffer.length > this.maxBufferSize) {
|
|
149
|
-
this.errorBuffer.shift();
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
// Cleanup on process exit
|
|
153
|
-
setupGracefulShutdown() {
|
|
154
|
-
const cleanup = async () => {
|
|
155
|
-
if (this.childProcess) {
|
|
156
|
-
await this.stop();
|
|
157
|
-
}
|
|
158
|
-
process.exit(0);
|
|
159
|
-
};
|
|
160
|
-
// Handle Ctrl+C (SIGINT)
|
|
161
|
-
process.on('SIGINT', () => {
|
|
162
|
-
console.log('\n🛑 Shutting down...');
|
|
163
|
-
// Forward signal to child process if it exists
|
|
164
|
-
if (this.childProcess && this.childProcess.pid) {
|
|
165
|
-
try {
|
|
166
|
-
this.childProcess.kill('SIGINT');
|
|
167
|
-
}
|
|
168
|
-
catch {
|
|
169
|
-
// Silently handle signal forwarding errors
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
cleanup().catch(() => { });
|
|
173
|
-
});
|
|
174
|
-
// Handle termination signal
|
|
175
|
-
process.on('SIGTERM', () => {
|
|
176
|
-
console.log('\n🛑 Terminating...');
|
|
177
|
-
// Forward signal to child process if it exists
|
|
178
|
-
if (this.childProcess && this.childProcess.pid) {
|
|
179
|
-
try {
|
|
180
|
-
this.childProcess.kill('SIGTERM');
|
|
181
|
-
}
|
|
182
|
-
catch {
|
|
183
|
-
// Silently handle signal forwarding errors
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
cleanup().catch(() => { });
|
|
187
|
-
});
|
|
188
|
-
// Handle process exit (synchronous cleanup only)
|
|
189
|
-
process.on('exit', () => {
|
|
190
|
-
if (this.childProcess) {
|
|
191
|
-
try {
|
|
192
|
-
this.childProcess.kill('SIGTERM');
|
|
193
|
-
}
|
|
194
|
-
catch {
|
|
195
|
-
// Silently handle cleanup errors during exit
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
//# sourceMappingURL=dev-server.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dev-server.js","sourceRoot":"","sources":["../../src/services/dev-server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAY9D,MAAM,OAAO,gBAAgB;IAOP;IAAyB;IANrC,YAAY,GAAwB,IAAI,CAAC;IACzC,MAAM,CAAkB;IACxB,SAAS,GAAa,EAAE,CAAC;IACzB,WAAW,GAAa,EAAE,CAAC;IAC3B,aAAa,GAAG,IAAI,CAAC;IAE7B,YAAoB,OAAe,EAAU,IAAa;QAAtC,YAAO,GAAP,OAAO,CAAQ;QAAU,SAAI,GAAJ,IAAI,CAAS;QACxD,IAAI,CAAC,MAAM,GAAG;YACZ,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAEvD,qCAAqC;YACrC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEnC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;gBACnC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC/B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;aACpC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YAEnC,gBAAgB;YAChB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACtB,CAAC,CAAC,CAAC;YACL,CAAC;YAED,gBAAgB;YAChB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC/B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACxB,CAAC,CAAC,CAAC;YACL,CAAC;YAED,sBAAsB;YACtB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACpC,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;gBACnD,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;gBAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACtC,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;gBAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;gBAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3B,CAAC,CAAC,CAAC;QAEL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,oBAAoB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5F,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAElC,wCAAwC;YACxC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC9B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;wBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACpC,CAAC;oBACD,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBACvD,CAAC,EAAE,IAAI,CAAC,CAAC;gBAET,IAAI,CAAC,YAAa,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;oBACjC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;QAE9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,mBAAmB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,gCAAgC;QAChC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,SAAS;QACP,OAAO;YACL,GAAG,IAAI,CAAC,MAAM;YACd,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YACzB,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;SAC9B,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAa;QACnB,iEAAiE;QACjE,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,OAAe;QACzB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YACnD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAGO,MAAM,CAAC,OAAe;QAC5B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAE7C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;IAEH,CAAC;IAEO,QAAQ,CAAC,OAAe;QAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAE/C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACjD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;IAEH,CAAC;IAED,0BAA0B;IAC1B,qBAAqB;QACnB,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,yBAAyB;QACzB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,+CAA+C;YAC/C,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;gBAC/C,IAAI,CAAC;oBACH,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnC,CAAC;gBAAC,MAAM,CAAC;oBACP,2CAA2C;gBAC7C,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,4BAA4B;QAC5B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,+CAA+C;YAC/C,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;gBAC/C,IAAI,CAAC;oBACH,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACpC,CAAC;gBAAC,MAAM,CAAC;oBACP,2CAA2C;gBAC7C,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,iDAAiD;QACjD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACtB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC;oBACH,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACpC,CAAC;gBAAC,MAAM,CAAC;oBACP,6CAA6C;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'events';
|
|
2
|
-
import * as pty from 'node-pty';
|
|
3
|
-
export interface TerminalSession {
|
|
4
|
-
id: string;
|
|
5
|
-
process: pty.IPty;
|
|
6
|
-
eventEmitter: EventEmitter;
|
|
7
|
-
createdAt: Date;
|
|
8
|
-
lastActivity: Date;
|
|
9
|
-
cwd?: string;
|
|
10
|
-
env?: Record<string, string>;
|
|
11
|
-
cols?: number;
|
|
12
|
-
rows?: number;
|
|
13
|
-
}
|
|
14
|
-
export interface PersistedSessionData {
|
|
15
|
-
id: string;
|
|
16
|
-
createdAt: string;
|
|
17
|
-
lastActivity: string;
|
|
18
|
-
cwd: string;
|
|
19
|
-
env: Record<string, string>;
|
|
20
|
-
cols: number;
|
|
21
|
-
rows: number;
|
|
22
|
-
}
|
|
23
|
-
export declare class TerminalService {
|
|
24
|
-
private static sessions;
|
|
25
|
-
private static readonly SESSION_TIMEOUT;
|
|
26
|
-
private static readonly PERSISTENCE_DIR;
|
|
27
|
-
private static readonly SESSIONS_FILE;
|
|
28
|
-
static createSession(sessionId: string, options?: {
|
|
29
|
-
cwd?: string;
|
|
30
|
-
cols?: number;
|
|
31
|
-
rows?: number;
|
|
32
|
-
}): TerminalSession;
|
|
33
|
-
static getSession(sessionId: string): TerminalSession | undefined;
|
|
34
|
-
static executeCommand(sessionId: string, command: string): boolean;
|
|
35
|
-
static destroySession(sessionId: string): boolean;
|
|
36
|
-
static getAllSessions(): TerminalSession[];
|
|
37
|
-
static cleanupExpiredSessions(): number;
|
|
38
|
-
private static scheduleSessionCleanup;
|
|
39
|
-
static setupGlobalCleanup(): void;
|
|
40
|
-
private static ensurePersistenceDir;
|
|
41
|
-
private static persistSessionData;
|
|
42
|
-
private static removePersistedSession;
|
|
43
|
-
private static loadPersistedSessions;
|
|
44
|
-
static updateSessionActivity(sessionId: string): void;
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=terminal.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/services/terminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAKhC,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,IAAI,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsC;IAC7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAkB;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAgD;IACvF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAoD;IAEzF,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,eAAe;IAsElH,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIjE,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAgBlE,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IA0BjD,MAAM,CAAC,cAAc,IAAI,eAAe,EAAE;IAI1C,MAAM,CAAC,sBAAsB,IAAI,MAAM;IAgBvC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAgBrC,MAAM,CAAC,kBAAkB,IAAI,IAAI;IA0BjC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAUnC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IA0CjC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAgBrC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAoCpC,MAAM,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAOtD"}
|
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'events';
|
|
2
|
-
import * as pty from 'node-pty';
|
|
3
|
-
import * as fs from 'node:fs';
|
|
4
|
-
import * as path from 'node:path';
|
|
5
|
-
import * as os from 'node:os';
|
|
6
|
-
export class TerminalService {
|
|
7
|
-
static sessions = new Map();
|
|
8
|
-
static SESSION_TIMEOUT = 30 * 60 * 1000; // 30 minutes
|
|
9
|
-
static PERSISTENCE_DIR = path.join(os.tmpdir(), '.treesap-terminals');
|
|
10
|
-
static SESSIONS_FILE = path.join(this.PERSISTENCE_DIR, 'sessions.json');
|
|
11
|
-
static createSession(sessionId, options) {
|
|
12
|
-
// Clean up any existing session with the same ID
|
|
13
|
-
this.destroySession(sessionId);
|
|
14
|
-
const eventEmitter = new EventEmitter();
|
|
15
|
-
// Increase max listeners to handle multiple terminal tabs and connections
|
|
16
|
-
eventEmitter.setMaxListeners(20);
|
|
17
|
-
// Use provided options or defaults
|
|
18
|
-
const cwd = options?.cwd || process.cwd();
|
|
19
|
-
const cols = options?.cols || 80;
|
|
20
|
-
const rows = options?.rows || 24;
|
|
21
|
-
const env = {};
|
|
22
|
-
// Filter out undefined values from process.env
|
|
23
|
-
for (const [key, value] of Object.entries(process.env)) {
|
|
24
|
-
if (value !== undefined) {
|
|
25
|
-
env[key] = value;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
// Create a PTY process for proper terminal behavior
|
|
29
|
-
const ptyProcess = pty.spawn(process.platform === 'win32' ? 'cmd.exe' : process.env.SHELL || '/bin/bash', [], {
|
|
30
|
-
name: 'xterm-256color',
|
|
31
|
-
cols,
|
|
32
|
-
rows,
|
|
33
|
-
cwd,
|
|
34
|
-
env
|
|
35
|
-
});
|
|
36
|
-
const session = {
|
|
37
|
-
id: sessionId,
|
|
38
|
-
process: ptyProcess,
|
|
39
|
-
eventEmitter,
|
|
40
|
-
createdAt: new Date(),
|
|
41
|
-
lastActivity: new Date(),
|
|
42
|
-
cwd,
|
|
43
|
-
env,
|
|
44
|
-
cols,
|
|
45
|
-
rows
|
|
46
|
-
};
|
|
47
|
-
// Handle process output
|
|
48
|
-
ptyProcess.onData((data) => {
|
|
49
|
-
session.lastActivity = new Date();
|
|
50
|
-
eventEmitter.emit('output', {
|
|
51
|
-
type: 'output',
|
|
52
|
-
content: data
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
ptyProcess.onExit((e) => {
|
|
56
|
-
eventEmitter.emit('output', {
|
|
57
|
-
type: 'exit',
|
|
58
|
-
code: e.exitCode
|
|
59
|
-
});
|
|
60
|
-
this.destroySession(sessionId);
|
|
61
|
-
});
|
|
62
|
-
this.sessions.set(sessionId, session);
|
|
63
|
-
// Set up session cleanup
|
|
64
|
-
this.scheduleSessionCleanup(sessionId);
|
|
65
|
-
// Persist session data
|
|
66
|
-
this.persistSessionData(session);
|
|
67
|
-
return session;
|
|
68
|
-
}
|
|
69
|
-
static getSession(sessionId) {
|
|
70
|
-
return this.sessions.get(sessionId);
|
|
71
|
-
}
|
|
72
|
-
static executeCommand(sessionId, command) {
|
|
73
|
-
const session = this.getSession(sessionId);
|
|
74
|
-
if (!session) {
|
|
75
|
-
return false;
|
|
76
|
-
}
|
|
77
|
-
try {
|
|
78
|
-
session.lastActivity = new Date();
|
|
79
|
-
session.process.write(command + '\n');
|
|
80
|
-
return true;
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
console.error(`Error executing command in session ${sessionId}:`, error);
|
|
84
|
-
return false;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
static destroySession(sessionId) {
|
|
88
|
-
const session = this.sessions.get(sessionId);
|
|
89
|
-
if (!session) {
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
try {
|
|
93
|
-
// Clean up the PTY process
|
|
94
|
-
session.process.kill();
|
|
95
|
-
// Remove event listeners
|
|
96
|
-
session.eventEmitter.removeAllListeners();
|
|
97
|
-
// Remove from sessions map
|
|
98
|
-
this.sessions.delete(sessionId);
|
|
99
|
-
// Remove from persistent storage
|
|
100
|
-
this.removePersistedSession(sessionId);
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
console.error(`Error destroying session ${sessionId}:`, error);
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
static getAllSessions() {
|
|
109
|
-
return Array.from(this.sessions.values());
|
|
110
|
-
}
|
|
111
|
-
static cleanupExpiredSessions() {
|
|
112
|
-
const now = new Date();
|
|
113
|
-
let cleanedCount = 0;
|
|
114
|
-
for (const [sessionId, session] of this.sessions.entries()) {
|
|
115
|
-
const timeSinceLastActivity = now.getTime() - session.lastActivity.getTime();
|
|
116
|
-
if (timeSinceLastActivity > this.SESSION_TIMEOUT) {
|
|
117
|
-
this.destroySession(sessionId);
|
|
118
|
-
cleanedCount++;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
return cleanedCount;
|
|
122
|
-
}
|
|
123
|
-
static scheduleSessionCleanup(sessionId) {
|
|
124
|
-
setTimeout(() => {
|
|
125
|
-
const session = this.getSession(sessionId);
|
|
126
|
-
if (session) {
|
|
127
|
-
const timeSinceLastActivity = new Date().getTime() - session.lastActivity.getTime();
|
|
128
|
-
if (timeSinceLastActivity >= this.SESSION_TIMEOUT) {
|
|
129
|
-
console.log(`Cleaning up expired terminal session: ${sessionId}`);
|
|
130
|
-
this.destroySession(sessionId);
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
// Reschedule cleanup
|
|
134
|
-
this.scheduleSessionCleanup(sessionId);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}, this.SESSION_TIMEOUT);
|
|
138
|
-
}
|
|
139
|
-
static setupGlobalCleanup() {
|
|
140
|
-
// Load persisted sessions on startup
|
|
141
|
-
this.loadPersistedSessions();
|
|
142
|
-
// Cleanup all sessions on process exit
|
|
143
|
-
const cleanup = () => {
|
|
144
|
-
console.log('Cleaning up all terminal sessions...');
|
|
145
|
-
for (const sessionId of this.sessions.keys()) {
|
|
146
|
-
this.destroySession(sessionId);
|
|
147
|
-
}
|
|
148
|
-
};
|
|
149
|
-
process.on('SIGINT', cleanup);
|
|
150
|
-
process.on('SIGTERM', cleanup);
|
|
151
|
-
process.on('exit', cleanup);
|
|
152
|
-
// Periodic cleanup of expired sessions
|
|
153
|
-
setInterval(() => {
|
|
154
|
-
const cleaned = this.cleanupExpiredSessions();
|
|
155
|
-
if (cleaned > 0) {
|
|
156
|
-
console.log(`Cleaned up ${cleaned} expired terminal sessions`);
|
|
157
|
-
}
|
|
158
|
-
}, 5 * 60 * 1000); // Every 5 minutes
|
|
159
|
-
}
|
|
160
|
-
// Persistence methods
|
|
161
|
-
static ensurePersistenceDir() {
|
|
162
|
-
try {
|
|
163
|
-
if (!fs.existsSync(this.PERSISTENCE_DIR)) {
|
|
164
|
-
fs.mkdirSync(this.PERSISTENCE_DIR, { recursive: true });
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
catch (error) {
|
|
168
|
-
console.error('Error creating persistence directory:', error);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
static persistSessionData(session) {
|
|
172
|
-
try {
|
|
173
|
-
this.ensurePersistenceDir();
|
|
174
|
-
const sessionData = {
|
|
175
|
-
id: session.id,
|
|
176
|
-
createdAt: session.createdAt.toISOString(),
|
|
177
|
-
lastActivity: session.lastActivity.toISOString(),
|
|
178
|
-
cwd: session.cwd || process.cwd(),
|
|
179
|
-
env: session.env || (() => {
|
|
180
|
-
const env = {};
|
|
181
|
-
for (const [key, value] of Object.entries(process.env)) {
|
|
182
|
-
if (value !== undefined) {
|
|
183
|
-
env[key] = value;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
return env;
|
|
187
|
-
})(),
|
|
188
|
-
cols: session.cols || 80,
|
|
189
|
-
rows: session.rows || 24
|
|
190
|
-
};
|
|
191
|
-
let existingData = [];
|
|
192
|
-
if (fs.existsSync(this.SESSIONS_FILE)) {
|
|
193
|
-
const content = fs.readFileSync(this.SESSIONS_FILE, 'utf8');
|
|
194
|
-
if (content.trim()) {
|
|
195
|
-
existingData = JSON.parse(content);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
// Remove existing session data if present
|
|
199
|
-
existingData = existingData.filter(s => s.id !== session.id);
|
|
200
|
-
// Add new session data
|
|
201
|
-
existingData.push(sessionData);
|
|
202
|
-
fs.writeFileSync(this.SESSIONS_FILE, JSON.stringify(existingData, null, 2));
|
|
203
|
-
}
|
|
204
|
-
catch (error) {
|
|
205
|
-
console.error('Error persisting session data:', error);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
static removePersistedSession(sessionId) {
|
|
209
|
-
try {
|
|
210
|
-
if (!fs.existsSync(this.SESSIONS_FILE))
|
|
211
|
-
return;
|
|
212
|
-
const content = fs.readFileSync(this.SESSIONS_FILE, 'utf8');
|
|
213
|
-
if (!content.trim())
|
|
214
|
-
return;
|
|
215
|
-
let existingData = JSON.parse(content);
|
|
216
|
-
existingData = existingData.filter(s => s.id !== sessionId);
|
|
217
|
-
fs.writeFileSync(this.SESSIONS_FILE, JSON.stringify(existingData, null, 2));
|
|
218
|
-
}
|
|
219
|
-
catch (error) {
|
|
220
|
-
console.error('Error removing persisted session:', error);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
static loadPersistedSessions() {
|
|
224
|
-
try {
|
|
225
|
-
if (!fs.existsSync(this.SESSIONS_FILE))
|
|
226
|
-
return;
|
|
227
|
-
const content = fs.readFileSync(this.SESSIONS_FILE, 'utf8');
|
|
228
|
-
if (!content.trim())
|
|
229
|
-
return;
|
|
230
|
-
const persistedSessions = JSON.parse(content);
|
|
231
|
-
console.log(`Found ${persistedSessions.length} persisted terminal session(s)`);
|
|
232
|
-
for (const sessionData of persistedSessions) {
|
|
233
|
-
// Check if session is not too old
|
|
234
|
-
const lastActivity = new Date(sessionData.lastActivity);
|
|
235
|
-
const timeSinceLastActivity = Date.now() - lastActivity.getTime();
|
|
236
|
-
if (timeSinceLastActivity < this.SESSION_TIMEOUT) {
|
|
237
|
-
console.log(`Restoring terminal session: ${sessionData.id}`);
|
|
238
|
-
// Create new session with the persisted options
|
|
239
|
-
this.createSession(sessionData.id, {
|
|
240
|
-
cwd: sessionData.cwd,
|
|
241
|
-
cols: sessionData.cols,
|
|
242
|
-
rows: sessionData.rows
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
console.log(`Skipping expired session: ${sessionData.id}`);
|
|
247
|
-
this.removePersistedSession(sessionData.id);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
catch (error) {
|
|
252
|
-
console.error('Error loading persisted sessions:', error);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
// Update session activity and persist
|
|
256
|
-
static updateSessionActivity(sessionId) {
|
|
257
|
-
const session = this.getSession(sessionId);
|
|
258
|
-
if (session) {
|
|
259
|
-
session.lastActivity = new Date();
|
|
260
|
-
this.persistSessionData(session);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
//# sourceMappingURL=terminal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/services/terminal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { WebSocket } from 'ws';
|
|
2
|
-
import type { Server } from 'http';
|
|
3
|
-
export interface WebSocketClient {
|
|
4
|
-
id: string;
|
|
5
|
-
ws: WebSocket;
|
|
6
|
-
sessionId?: string;
|
|
7
|
-
terminalId?: string;
|
|
8
|
-
lastPing: Date;
|
|
9
|
-
}
|
|
10
|
-
export interface WebSocketMessage {
|
|
11
|
-
type: 'join' | 'leave' | 'input' | 'resize' | 'ping' | 'pong';
|
|
12
|
-
sessionId?: string;
|
|
13
|
-
terminalId?: string;
|
|
14
|
-
data?: string;
|
|
15
|
-
cols?: number;
|
|
16
|
-
rows?: number;
|
|
17
|
-
timestamp?: number;
|
|
18
|
-
}
|
|
19
|
-
export declare class WebSocketTerminalService {
|
|
20
|
-
private static wss;
|
|
21
|
-
private static clients;
|
|
22
|
-
private static sessionClients;
|
|
23
|
-
static initialize(server: Server): void;
|
|
24
|
-
private static setupPingPong;
|
|
25
|
-
private static handleMessage;
|
|
26
|
-
private static handleJoin;
|
|
27
|
-
private static handleLeave;
|
|
28
|
-
private static handleInput;
|
|
29
|
-
private static handleResize;
|
|
30
|
-
private static handleDisconnect;
|
|
31
|
-
private static addClientToSession;
|
|
32
|
-
private static removeClientFromSession;
|
|
33
|
-
private static setupSessionOutputListener;
|
|
34
|
-
private static cleanupSessionOutputListener;
|
|
35
|
-
private static broadcastToSession;
|
|
36
|
-
private static broadcastClientCount;
|
|
37
|
-
private static sendToClient;
|
|
38
|
-
static getSessionClients(sessionId: string): string[];
|
|
39
|
-
static sendCommandToSession(sessionId: string, command: string): boolean;
|
|
40
|
-
static getActiveSessions(): Array<{
|
|
41
|
-
sessionId: string;
|
|
42
|
-
clientCount: number;
|
|
43
|
-
}>;
|
|
44
|
-
static getConnectedClients(): number;
|
|
45
|
-
static closeSession(sessionId: string): void;
|
|
46
|
-
static cleanup(): void;
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=websocket.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/services/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,SAAS,EAAE,MAAM,IAAI,CAAC;AAKhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,SAAS,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAgC;IAClD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAsC;IAC5D,OAAO,CAAC,MAAM,CAAC,cAAc,CAAkC;IAE/D,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM;IA8ChC,OAAO,CAAC,MAAM,CAAC,aAAa;IAsB5B,OAAO,CAAC,MAAM,CAAC,aAAa;IAqC5B,OAAO,CAAC,MAAM,CAAC,UAAU;IAuCzB,OAAO,CAAC,MAAM,CAAC,WAAW;IAe1B,OAAO,CAAC,MAAM,CAAC,WAAW;IA8B1B,OAAO,CAAC,MAAM,CAAC,YAAY;IA0B3B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAOjC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAYtC,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAiBzC,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAQ3C,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAcjC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAenC,OAAO,CAAC,MAAM,CAAC,YAAY;IAe3B,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAKrD,MAAM,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAaxE,MAAM,CAAC,iBAAiB,IAAI,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAO7E,MAAM,CAAC,mBAAmB,IAAI,MAAM;IAIpC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM;IAoBrC,MAAM,CAAC,OAAO;CAUf"}
|