seahorse-bash-client 1.0.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/DESIGN.md +463 -0
- package/bin/cli.js +2 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +190 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/pty-manager.d.ts +52 -0
- package/dist/pty-manager.d.ts.map +1 -0
- package/dist/pty-manager.js +387 -0
- package/dist/pty-manager.js.map +1 -0
- package/dist/pty-manager.test.d.ts +8 -0
- package/dist/pty-manager.test.d.ts.map +1 -0
- package/dist/pty-manager.test.js +427 -0
- package/dist/pty-manager.test.js.map +1 -0
- package/dist/tools.d.ts +6 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +212 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +190 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/websocket-client.d.ts +73 -0
- package/dist/websocket-client.d.ts.map +1 -0
- package/dist/websocket-client.js +318 -0
- package/dist/websocket-client.js.map +1 -0
- package/package.json +55 -0
- package/src/cli.ts +179 -0
- package/src/index.ts +10 -0
- package/src/pty-manager.test.ts +555 -0
- package/src/pty-manager.ts +430 -0
- package/src/tools.ts +217 -0
- package/src/types.ts +221 -0
- package/src/websocket-client.ts +374 -0
- package/tsconfig.json +19 -0
- package/vitest.config.ts +10 -0
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PTY Manager Unit Tests
|
|
4
|
+
*
|
|
5
|
+
* Tests for verifying PTY session management, command execution,
|
|
6
|
+
* and output buffering functionality.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const vitest_1 = require("vitest");
|
|
10
|
+
const pty_manager_1 = require("./pty-manager");
|
|
11
|
+
(0, vitest_1.describe)('PTYManager', () => {
|
|
12
|
+
let ptyManager;
|
|
13
|
+
(0, vitest_1.beforeEach)(() => {
|
|
14
|
+
ptyManager = new pty_manager_1.PTYManager({
|
|
15
|
+
maxOutputLines: 1000,
|
|
16
|
+
defaultShell: '/bin/bash',
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
(0, vitest_1.afterEach)(async () => {
|
|
20
|
+
await ptyManager.shutdown();
|
|
21
|
+
});
|
|
22
|
+
(0, vitest_1.describe)('exec', () => {
|
|
23
|
+
(0, vitest_1.it)('should execute a simple command and return output', async () => {
|
|
24
|
+
const result = await ptyManager.exec({
|
|
25
|
+
command: 'echo "hello world"',
|
|
26
|
+
timeout: 5000,
|
|
27
|
+
});
|
|
28
|
+
(0, vitest_1.expect)(result.exitCode).toBe(0);
|
|
29
|
+
(0, vitest_1.expect)(result.stdout).toContain('hello world');
|
|
30
|
+
(0, vitest_1.expect)(result.timedOut).toBe(false);
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.it)('should capture exit code from failed command', async () => {
|
|
33
|
+
const result = await ptyManager.exec({
|
|
34
|
+
command: 'exit 42',
|
|
35
|
+
timeout: 5000,
|
|
36
|
+
});
|
|
37
|
+
(0, vitest_1.expect)(result.exitCode).toBe(42);
|
|
38
|
+
(0, vitest_1.expect)(result.timedOut).toBe(false);
|
|
39
|
+
});
|
|
40
|
+
(0, vitest_1.it)('should timeout long-running commands', async () => {
|
|
41
|
+
const result = await ptyManager.exec({
|
|
42
|
+
command: 'sleep 10',
|
|
43
|
+
timeout: 500,
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.expect)(result.exitCode).toBe(-1);
|
|
46
|
+
(0, vitest_1.expect)(result.timedOut).toBe(true);
|
|
47
|
+
});
|
|
48
|
+
(0, vitest_1.it)('should respect working directory', async () => {
|
|
49
|
+
const result = await ptyManager.exec({
|
|
50
|
+
command: 'pwd',
|
|
51
|
+
cwd: '/tmp',
|
|
52
|
+
timeout: 5000,
|
|
53
|
+
});
|
|
54
|
+
(0, vitest_1.expect)(result.exitCode).toBe(0);
|
|
55
|
+
// PTY may include ANSI codes, so just check contains
|
|
56
|
+
(0, vitest_1.expect)(result.stdout).toContain('/tmp');
|
|
57
|
+
});
|
|
58
|
+
(0, vitest_1.it)('should pass environment variables', async () => {
|
|
59
|
+
const result = await ptyManager.exec({
|
|
60
|
+
command: 'echo $MY_VAR',
|
|
61
|
+
env: { MY_VAR: 'test_value' },
|
|
62
|
+
timeout: 5000,
|
|
63
|
+
});
|
|
64
|
+
(0, vitest_1.expect)(result.exitCode).toBe(0);
|
|
65
|
+
(0, vitest_1.expect)(result.stdout).toContain('test_value');
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.it)('should handle commands with special characters', async () => {
|
|
68
|
+
const result = await ptyManager.exec({
|
|
69
|
+
command: 'echo "test with \'quotes\' and $dollar"',
|
|
70
|
+
timeout: 5000,
|
|
71
|
+
});
|
|
72
|
+
(0, vitest_1.expect)(result.exitCode).toBe(0);
|
|
73
|
+
(0, vitest_1.expect)(result.stdout).toContain('quotes');
|
|
74
|
+
});
|
|
75
|
+
(0, vitest_1.it)('should handle multi-line output', async () => {
|
|
76
|
+
const result = await ptyManager.exec({
|
|
77
|
+
command: 'echo -e "line1\\nline2\\nline3"',
|
|
78
|
+
timeout: 5000,
|
|
79
|
+
});
|
|
80
|
+
(0, vitest_1.expect)(result.exitCode).toBe(0);
|
|
81
|
+
(0, vitest_1.expect)(result.stdout).toContain('line1');
|
|
82
|
+
(0, vitest_1.expect)(result.stdout).toContain('line2');
|
|
83
|
+
(0, vitest_1.expect)(result.stdout).toContain('line3');
|
|
84
|
+
});
|
|
85
|
+
(0, vitest_1.it)('should handle stderr output', async () => {
|
|
86
|
+
const result = await ptyManager.exec({
|
|
87
|
+
command: 'echo "error message" >&2',
|
|
88
|
+
timeout: 5000,
|
|
89
|
+
});
|
|
90
|
+
// PTY combines stdout and stderr
|
|
91
|
+
(0, vitest_1.expect)(result.exitCode).toBe(0);
|
|
92
|
+
(0, vitest_1.expect)(result.stdout).toContain('error message');
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
(0, vitest_1.describe)('spawn', () => {
|
|
96
|
+
(0, vitest_1.it)('should create a new PTY session', async () => {
|
|
97
|
+
const result = await ptyManager.spawn({
|
|
98
|
+
command: 'echo "spawn test"',
|
|
99
|
+
});
|
|
100
|
+
(0, vitest_1.expect)(result.sessionId).toMatch(/^pty_/);
|
|
101
|
+
(0, vitest_1.expect)(result.pid).toBeGreaterThan(0);
|
|
102
|
+
(0, vitest_1.expect)(result.status).toBe('running');
|
|
103
|
+
});
|
|
104
|
+
(0, vitest_1.it)('should track session in list', async () => {
|
|
105
|
+
const spawnResult = await ptyManager.spawn({
|
|
106
|
+
command: 'sleep 1',
|
|
107
|
+
name: 'test-session',
|
|
108
|
+
});
|
|
109
|
+
const listResult = ptyManager.list({ status: 'all' });
|
|
110
|
+
(0, vitest_1.expect)(listResult.sessions.length).toBeGreaterThanOrEqual(1);
|
|
111
|
+
const session = listResult.sessions.find((s) => s.sessionId === spawnResult.sessionId);
|
|
112
|
+
(0, vitest_1.expect)(session).toBeDefined();
|
|
113
|
+
(0, vitest_1.expect)(session?.name).toBe('test-session');
|
|
114
|
+
});
|
|
115
|
+
(0, vitest_1.it)('should capture output to buffer', async () => {
|
|
116
|
+
const spawnResult = await ptyManager.spawn({
|
|
117
|
+
command: 'echo "buffered output"',
|
|
118
|
+
});
|
|
119
|
+
// Wait for output to be captured
|
|
120
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
121
|
+
const readResult = ptyManager.read({
|
|
122
|
+
sessionId: spawnResult.sessionId,
|
|
123
|
+
limit: 100,
|
|
124
|
+
});
|
|
125
|
+
(0, vitest_1.expect)(readResult.lines.length).toBeGreaterThanOrEqual(1);
|
|
126
|
+
});
|
|
127
|
+
(0, vitest_1.it)('should respect terminal size', async () => {
|
|
128
|
+
const result = await ptyManager.spawn({
|
|
129
|
+
command: 'tput cols && tput lines',
|
|
130
|
+
cols: 80,
|
|
131
|
+
rows: 24,
|
|
132
|
+
});
|
|
133
|
+
(0, vitest_1.expect)(result.sessionId).toMatch(/^pty_/);
|
|
134
|
+
// The command should run in the specified terminal size
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
(0, vitest_1.describe)('write', () => {
|
|
138
|
+
(0, vitest_1.it)('should write data to a running session', async () => {
|
|
139
|
+
// Start an interactive session
|
|
140
|
+
const spawnResult = await ptyManager.spawn({
|
|
141
|
+
// No command - just a shell
|
|
142
|
+
});
|
|
143
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
144
|
+
const writeResult = ptyManager.write({
|
|
145
|
+
sessionId: spawnResult.sessionId,
|
|
146
|
+
data: 'echo "written data"\n',
|
|
147
|
+
});
|
|
148
|
+
(0, vitest_1.expect)(writeResult.success).toBe(true);
|
|
149
|
+
(0, vitest_1.expect)(writeResult.bytesWritten).toBeGreaterThan(0);
|
|
150
|
+
});
|
|
151
|
+
(0, vitest_1.it)('should send special keys', async () => {
|
|
152
|
+
const spawnResult = await ptyManager.spawn({
|
|
153
|
+
command: 'sleep 30',
|
|
154
|
+
});
|
|
155
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
156
|
+
// Send Ctrl+C
|
|
157
|
+
const writeResult = ptyManager.write({
|
|
158
|
+
sessionId: spawnResult.sessionId,
|
|
159
|
+
specialKey: 'ctrl+c',
|
|
160
|
+
});
|
|
161
|
+
(0, vitest_1.expect)(writeResult.success).toBe(true);
|
|
162
|
+
(0, vitest_1.expect)(writeResult.bytesWritten).toBe(1); // \x03 is 1 byte
|
|
163
|
+
});
|
|
164
|
+
(0, vitest_1.it)('should fail for non-existent session', () => {
|
|
165
|
+
(0, vitest_1.expect)(() => ptyManager.write({
|
|
166
|
+
sessionId: 'non_existent',
|
|
167
|
+
data: 'test',
|
|
168
|
+
})).toThrow('Session not found');
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
(0, vitest_1.describe)('read', () => {
|
|
172
|
+
(0, vitest_1.it)('should read output from session buffer', async () => {
|
|
173
|
+
const spawnResult = await ptyManager.spawn({
|
|
174
|
+
command: 'for i in 1 2 3 4 5; do echo "line $i"; done',
|
|
175
|
+
});
|
|
176
|
+
// Wait for output
|
|
177
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
178
|
+
const readResult = ptyManager.read({
|
|
179
|
+
sessionId: spawnResult.sessionId,
|
|
180
|
+
limit: 100,
|
|
181
|
+
});
|
|
182
|
+
(0, vitest_1.expect)(readResult.sessionId).toBe(spawnResult.sessionId);
|
|
183
|
+
(0, vitest_1.expect)(readResult.lines.length).toBeGreaterThan(0);
|
|
184
|
+
});
|
|
185
|
+
(0, vitest_1.it)('should support pagination with offset and limit', async () => {
|
|
186
|
+
const spawnResult = await ptyManager.spawn({
|
|
187
|
+
command: 'for i in $(seq 1 20); do echo "line $i"; done',
|
|
188
|
+
});
|
|
189
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
190
|
+
const readResult = ptyManager.read({
|
|
191
|
+
sessionId: spawnResult.sessionId,
|
|
192
|
+
offset: 5,
|
|
193
|
+
limit: 3,
|
|
194
|
+
});
|
|
195
|
+
(0, vitest_1.expect)(readResult.lines.length).toBeLessThanOrEqual(3);
|
|
196
|
+
});
|
|
197
|
+
(0, vitest_1.it)('should support tail mode', async () => {
|
|
198
|
+
const spawnResult = await ptyManager.spawn({
|
|
199
|
+
command: 'for i in $(seq 1 20); do echo "line $i"; done',
|
|
200
|
+
});
|
|
201
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
202
|
+
const readResult = ptyManager.read({
|
|
203
|
+
sessionId: spawnResult.sessionId,
|
|
204
|
+
tail: true,
|
|
205
|
+
limit: 5,
|
|
206
|
+
});
|
|
207
|
+
(0, vitest_1.expect)(readResult.lines.length).toBeLessThanOrEqual(5);
|
|
208
|
+
});
|
|
209
|
+
(0, vitest_1.it)('should support pattern filtering', async () => {
|
|
210
|
+
const spawnResult = await ptyManager.spawn({
|
|
211
|
+
command: 'echo "apple"; echo "banana"; echo "apricot"',
|
|
212
|
+
});
|
|
213
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
214
|
+
const readResult = ptyManager.read({
|
|
215
|
+
sessionId: spawnResult.sessionId,
|
|
216
|
+
pattern: '^a',
|
|
217
|
+
limit: 100,
|
|
218
|
+
});
|
|
219
|
+
// Should filter to lines starting with 'a'
|
|
220
|
+
const matchingLines = readResult.lines.filter((l) => l.text.toLowerCase().startsWith('a'));
|
|
221
|
+
(0, vitest_1.expect)(matchingLines.length).toBeGreaterThanOrEqual(0);
|
|
222
|
+
});
|
|
223
|
+
(0, vitest_1.it)('should fail for non-existent session', () => {
|
|
224
|
+
(0, vitest_1.expect)(() => ptyManager.read({
|
|
225
|
+
sessionId: 'non_existent',
|
|
226
|
+
})).toThrow('Session not found');
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
(0, vitest_1.describe)('list', () => {
|
|
230
|
+
(0, vitest_1.it)('should return empty list when no sessions', () => {
|
|
231
|
+
const result = ptyManager.list();
|
|
232
|
+
(0, vitest_1.expect)(result.sessions).toEqual([]);
|
|
233
|
+
(0, vitest_1.expect)(result.summary.total).toBe(0);
|
|
234
|
+
});
|
|
235
|
+
(0, vitest_1.it)('should filter by status', async () => {
|
|
236
|
+
// Create a session that will exit
|
|
237
|
+
await ptyManager.spawn({
|
|
238
|
+
command: 'echo "quick"',
|
|
239
|
+
});
|
|
240
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
241
|
+
const runningResult = ptyManager.list({ status: 'running' });
|
|
242
|
+
const allResult = ptyManager.list({ status: 'all' });
|
|
243
|
+
(0, vitest_1.expect)(allResult.sessions.length).toBeGreaterThanOrEqual(runningResult.sessions.length);
|
|
244
|
+
});
|
|
245
|
+
(0, vitest_1.it)('should include recent output when requested', async () => {
|
|
246
|
+
const spawnResult = await ptyManager.spawn({
|
|
247
|
+
command: 'echo "output test"',
|
|
248
|
+
});
|
|
249
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
250
|
+
const result = ptyManager.list({
|
|
251
|
+
includeOutput: true,
|
|
252
|
+
outputLines: 5,
|
|
253
|
+
});
|
|
254
|
+
const session = result.sessions.find((s) => s.sessionId === spawnResult.sessionId);
|
|
255
|
+
(0, vitest_1.expect)(session?.recentOutput).toBeDefined();
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
(0, vitest_1.describe)('kill', () => {
|
|
259
|
+
(0, vitest_1.it)('should terminate a running session', async () => {
|
|
260
|
+
const spawnResult = await ptyManager.spawn({
|
|
261
|
+
command: 'sleep 60',
|
|
262
|
+
});
|
|
263
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
264
|
+
const killResult = await ptyManager.kill({
|
|
265
|
+
sessionId: spawnResult.sessionId,
|
|
266
|
+
});
|
|
267
|
+
(0, vitest_1.expect)(killResult.sessionId).toBe(spawnResult.sessionId);
|
|
268
|
+
(0, vitest_1.expect)(killResult.signal).toBe('SIGTERM');
|
|
269
|
+
});
|
|
270
|
+
(0, vitest_1.it)('should cleanup session when requested', async () => {
|
|
271
|
+
const spawnResult = await ptyManager.spawn({
|
|
272
|
+
command: 'sleep 60',
|
|
273
|
+
});
|
|
274
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
275
|
+
await ptyManager.kill({
|
|
276
|
+
sessionId: spawnResult.sessionId,
|
|
277
|
+
cleanup: true,
|
|
278
|
+
});
|
|
279
|
+
const listResult = ptyManager.list();
|
|
280
|
+
const session = listResult.sessions.find((s) => s.sessionId === spawnResult.sessionId);
|
|
281
|
+
(0, vitest_1.expect)(session).toBeUndefined();
|
|
282
|
+
});
|
|
283
|
+
(0, vitest_1.it)('should fail for non-existent session', async () => {
|
|
284
|
+
await (0, vitest_1.expect)(ptyManager.kill({
|
|
285
|
+
sessionId: 'non_existent',
|
|
286
|
+
})).rejects.toThrow('Session not found');
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
(0, vitest_1.describe)('Interactive PTY Tests', () => {
|
|
290
|
+
(0, vitest_1.it)('should handle interactive shell input/output', async () => {
|
|
291
|
+
// Start an interactive shell
|
|
292
|
+
const spawnResult = await ptyManager.spawn({});
|
|
293
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
294
|
+
// Write a command
|
|
295
|
+
ptyManager.write({
|
|
296
|
+
sessionId: spawnResult.sessionId,
|
|
297
|
+
data: 'echo "interactive test"\n',
|
|
298
|
+
});
|
|
299
|
+
// Wait for output
|
|
300
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
301
|
+
const readResult = ptyManager.read({
|
|
302
|
+
sessionId: spawnResult.sessionId,
|
|
303
|
+
tail: true,
|
|
304
|
+
limit: 20,
|
|
305
|
+
});
|
|
306
|
+
// Should have captured the output
|
|
307
|
+
const hasOutput = readResult.lines.some((l) => l.text.includes('interactive test'));
|
|
308
|
+
(0, vitest_1.expect)(hasOutput).toBe(true);
|
|
309
|
+
// Cleanup
|
|
310
|
+
await ptyManager.kill({
|
|
311
|
+
sessionId: spawnResult.sessionId,
|
|
312
|
+
cleanup: true,
|
|
313
|
+
});
|
|
314
|
+
});
|
|
315
|
+
(0, vitest_1.it)('should handle rapid input/output', async () => {
|
|
316
|
+
const spawnResult = await ptyManager.spawn({});
|
|
317
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
318
|
+
// Send multiple commands rapidly
|
|
319
|
+
for (let i = 0; i < 5; i++) {
|
|
320
|
+
ptyManager.write({
|
|
321
|
+
sessionId: spawnResult.sessionId,
|
|
322
|
+
data: `echo "rapid ${i}"\n`,
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
// Wait for all outputs
|
|
326
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
327
|
+
const readResult = ptyManager.read({
|
|
328
|
+
sessionId: spawnResult.sessionId,
|
|
329
|
+
tail: true,
|
|
330
|
+
limit: 50,
|
|
331
|
+
});
|
|
332
|
+
// Should have captured multiple outputs
|
|
333
|
+
(0, vitest_1.expect)(readResult.lines.length).toBeGreaterThan(0);
|
|
334
|
+
await ptyManager.kill({
|
|
335
|
+
sessionId: spawnResult.sessionId,
|
|
336
|
+
cleanup: true,
|
|
337
|
+
});
|
|
338
|
+
});
|
|
339
|
+
});
|
|
340
|
+
(0, vitest_1.describe)('Edge Cases', () => {
|
|
341
|
+
(0, vitest_1.it)('should handle empty command output', async () => {
|
|
342
|
+
const result = await ptyManager.exec({
|
|
343
|
+
command: 'true',
|
|
344
|
+
timeout: 5000,
|
|
345
|
+
});
|
|
346
|
+
(0, vitest_1.expect)(result.exitCode).toBe(0);
|
|
347
|
+
});
|
|
348
|
+
(0, vitest_1.it)('should handle very long output', async () => {
|
|
349
|
+
const result = await ptyManager.exec({
|
|
350
|
+
command: 'for i in $(seq 1 100); do echo "line $i: padding text here"; done',
|
|
351
|
+
timeout: 10000,
|
|
352
|
+
});
|
|
353
|
+
(0, vitest_1.expect)(result.exitCode).toBe(0);
|
|
354
|
+
(0, vitest_1.expect)(result.stdout.length).toBeGreaterThan(1000);
|
|
355
|
+
});
|
|
356
|
+
(0, vitest_1.it)('should handle binary-like output', async () => {
|
|
357
|
+
const result = await ptyManager.exec({
|
|
358
|
+
command: 'echo -e "\\x00\\x01\\x02\\x03"',
|
|
359
|
+
timeout: 5000,
|
|
360
|
+
});
|
|
361
|
+
(0, vitest_1.expect)(result.exitCode).toBe(0);
|
|
362
|
+
});
|
|
363
|
+
(0, vitest_1.it)('should handle ANSI escape sequences', async () => {
|
|
364
|
+
const result = await ptyManager.exec({
|
|
365
|
+
command: 'echo -e "\\033[31mRed\\033[0m"',
|
|
366
|
+
timeout: 5000,
|
|
367
|
+
});
|
|
368
|
+
(0, vitest_1.expect)(result.exitCode).toBe(0);
|
|
369
|
+
// Output should contain ANSI codes
|
|
370
|
+
(0, vitest_1.expect)(result.stdout).toContain('\x1b[31m');
|
|
371
|
+
});
|
|
372
|
+
(0, vitest_1.it)('should handle concurrent sessions', async () => {
|
|
373
|
+
const sessions = await Promise.all([
|
|
374
|
+
ptyManager.spawn({ command: 'sleep 2; echo "session 1"' }),
|
|
375
|
+
ptyManager.spawn({ command: 'sleep 2; echo "session 2"' }),
|
|
376
|
+
ptyManager.spawn({ command: 'sleep 2; echo "session 3"' }),
|
|
377
|
+
]);
|
|
378
|
+
const listResult = ptyManager.list();
|
|
379
|
+
(0, vitest_1.expect)(listResult.sessions.length).toBeGreaterThanOrEqual(3);
|
|
380
|
+
// Cleanup
|
|
381
|
+
for (const session of sessions) {
|
|
382
|
+
await ptyManager.kill({
|
|
383
|
+
sessionId: session.sessionId,
|
|
384
|
+
cleanup: true,
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
});
|
|
389
|
+
(0, vitest_1.describe)('Event Emission', () => {
|
|
390
|
+
(0, vitest_1.it)('should emit session:exited event', async () => {
|
|
391
|
+
const exitedPromise = new Promise((resolve) => {
|
|
392
|
+
ptyManager.on('session:exited', (data) => {
|
|
393
|
+
(0, vitest_1.expect)(data.sessionId).toMatch(/^pty_/);
|
|
394
|
+
(0, vitest_1.expect)(typeof data.exitCode).toBe('number');
|
|
395
|
+
resolve();
|
|
396
|
+
});
|
|
397
|
+
});
|
|
398
|
+
await ptyManager.spawn({
|
|
399
|
+
command: 'exit 0',
|
|
400
|
+
notifyOnExit: true,
|
|
401
|
+
});
|
|
402
|
+
// Wait for exit event (with timeout)
|
|
403
|
+
await Promise.race([
|
|
404
|
+
exitedPromise,
|
|
405
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), 3000)),
|
|
406
|
+
]);
|
|
407
|
+
});
|
|
408
|
+
(0, vitest_1.it)('should emit output event', async () => {
|
|
409
|
+
const outputPromise = new Promise((resolve) => {
|
|
410
|
+
ptyManager.on('output', (data) => {
|
|
411
|
+
if (data.data.includes('output event test')) {
|
|
412
|
+
resolve();
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
});
|
|
416
|
+
await ptyManager.spawn({
|
|
417
|
+
command: 'echo "output event test"',
|
|
418
|
+
});
|
|
419
|
+
// Wait for output event (with timeout)
|
|
420
|
+
await Promise.race([
|
|
421
|
+
outputPromise,
|
|
422
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), 3000)),
|
|
423
|
+
]);
|
|
424
|
+
});
|
|
425
|
+
});
|
|
426
|
+
});
|
|
427
|
+
//# sourceMappingURL=pty-manager.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty-manager.test.js","sourceRoot":"","sources":["../src/pty-manager.test.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAkN5C,CAAC"}
|