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.
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Seahorse Bash Client
3
+ *
4
+ * Reverse MCP client that provides PTY-based bash tools to Seahorse Agent.
5
+ */
6
+ export { WebSocketClient } from './websocket-client';
7
+ export { PTYManager, ptyManager } from './pty-manager';
8
+ export { TOOL_DEFINITIONS } from './tools';
9
+ export * from './types';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /**
3
+ * Seahorse Bash Client
4
+ *
5
+ * Reverse MCP client that provides PTY-based bash tools to Seahorse Agent.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.TOOL_DEFINITIONS = exports.ptyManager = exports.PTYManager = exports.WebSocketClient = void 0;
23
+ var websocket_client_1 = require("./websocket-client");
24
+ Object.defineProperty(exports, "WebSocketClient", { enumerable: true, get: function () { return websocket_client_1.WebSocketClient; } });
25
+ var pty_manager_1 = require("./pty-manager");
26
+ Object.defineProperty(exports, "PTYManager", { enumerable: true, get: function () { return pty_manager_1.PTYManager; } });
27
+ Object.defineProperty(exports, "ptyManager", { enumerable: true, get: function () { return pty_manager_1.ptyManager; } });
28
+ var tools_1 = require("./tools");
29
+ Object.defineProperty(exports, "TOOL_DEFINITIONS", { enumerable: true, get: function () { return tools_1.TOOL_DEFINITIONS; } });
30
+ __exportStar(require("./types"), exports);
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AACxB,6CAAuD;AAA9C,yGAAA,UAAU,OAAA;AAAE,yGAAA,UAAU,OAAA;AAC/B,iCAA2C;AAAlC,yGAAA,gBAAgB,OAAA;AACzB,0CAAwB"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * PTY Manager - Manages multiple PTY sessions with rolling output buffers
3
+ */
4
+ import { EventEmitter } from 'events';
5
+ import { PTYSession, BashSpawnInput, BashExecInput, BashWriteInput, BashReadInput, BashListInput, BashKillInput, BashSpawnResponse, BashExecResponse, BashWriteResponse, BashReadResponse, BashListResponse, BashKillResponse } from './types';
6
+ export declare class PTYManager extends EventEmitter {
7
+ private sessions;
8
+ private maxOutputLines;
9
+ private defaultShell;
10
+ constructor(options?: {
11
+ maxOutputLines?: number;
12
+ defaultShell?: string;
13
+ });
14
+ /**
15
+ * Spawn a new PTY session
16
+ */
17
+ spawn(input: BashSpawnInput): Promise<BashSpawnResponse>;
18
+ /**
19
+ * Execute a command synchronously and wait for completion
20
+ */
21
+ exec(input: BashExecInput): Promise<BashExecResponse>;
22
+ /**
23
+ * Write data to a PTY session
24
+ */
25
+ write(input: BashWriteInput): BashWriteResponse;
26
+ /**
27
+ * Read output from a PTY session
28
+ */
29
+ read(input: BashReadInput): BashReadResponse;
30
+ /**
31
+ * List all PTY sessions
32
+ */
33
+ list(input?: BashListInput): BashListResponse;
34
+ /**
35
+ * Kill a PTY session
36
+ */
37
+ kill(input: BashKillInput): Promise<BashKillResponse>;
38
+ /**
39
+ * Get a session by ID
40
+ */
41
+ getSession(sessionId: string): PTYSession | undefined;
42
+ /**
43
+ * Shutdown all sessions
44
+ */
45
+ shutdown(): Promise<void>;
46
+ /**
47
+ * Append output to a session's buffer
48
+ */
49
+ private appendOutput;
50
+ }
51
+ export declare const ptyManager: PTYManager;
52
+ //# sourceMappingURL=pty-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-manager.d.ts","sourceRoot":"","sources":["../src/pty-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EACL,UAAU,EAGV,cAAc,EACd,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAsBjB,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,GAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAO;IAM5E;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA6E9D;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA6C3D;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,iBAAiB;IA4B/C;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,gBAAgB;IA8C5C;;OAEG;IACH,IAAI,CAAC,KAAK,GAAE,aAAkB,GAAG,gBAAgB;IAkDjD;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuD3D;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIrD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAW/B;;OAEG;IACH,OAAO,CAAC,YAAY;CA2BrB;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAC"}
@@ -0,0 +1,387 @@
1
+ "use strict";
2
+ /**
3
+ * PTY Manager - Manages multiple PTY sessions with rolling output buffers
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.ptyManager = exports.PTYManager = void 0;
40
+ const pty = __importStar(require("node-pty"));
41
+ const uuid_1 = require("uuid");
42
+ const events_1 = require("events");
43
+ // Special key mappings
44
+ const SPECIAL_KEYS = {
45
+ 'ctrl+c': '\x03',
46
+ 'ctrl+d': '\x04',
47
+ 'ctrl+z': '\x1a',
48
+ 'enter': '\r',
49
+ 'tab': '\t',
50
+ 'up': '\x1b[A',
51
+ 'down': '\x1b[B',
52
+ 'left': '\x1b[D',
53
+ 'right': '\x1b[C',
54
+ };
55
+ class PTYManager extends events_1.EventEmitter {
56
+ constructor(options = {}) {
57
+ super();
58
+ this.sessions = new Map();
59
+ this.maxOutputLines = options.maxOutputLines || 50000;
60
+ this.defaultShell = options.defaultShell || process.env.SHELL || '/bin/bash';
61
+ }
62
+ /**
63
+ * Spawn a new PTY session
64
+ */
65
+ async spawn(input) {
66
+ const sessionId = `pty_${(0, uuid_1.v4)().slice(0, 8)}`;
67
+ const shell = input.shell || this.defaultShell;
68
+ const cwd = input.cwd || process.cwd();
69
+ // Build the command
70
+ const shellArgs = input.command
71
+ ? ['-c', `${input.command}${input.args ? ' ' + input.args.join(' ') : ''}`]
72
+ : [];
73
+ // Merge environment
74
+ const env = { ...process.env, ...input.env };
75
+ // Create PTY process
76
+ const ptyProcess = pty.spawn(shell, shellArgs, {
77
+ name: 'xterm-256color',
78
+ cols: input.cols || 120,
79
+ rows: input.rows || 30,
80
+ cwd,
81
+ env,
82
+ });
83
+ const session = {
84
+ id: sessionId,
85
+ name: input.name,
86
+ pid: ptyProcess.pid,
87
+ command: input.command || '',
88
+ args: input.args || [],
89
+ cwd,
90
+ status: 'running',
91
+ createdAt: new Date(),
92
+ lineCount: 0,
93
+ };
94
+ const managedSession = {
95
+ session,
96
+ ptyProcess,
97
+ outputBuffer: [],
98
+ notifyOnExit: input.notifyOnExit !== false,
99
+ };
100
+ this.sessions.set(sessionId, managedSession);
101
+ // Handle output
102
+ ptyProcess.onData((data) => {
103
+ this.appendOutput(sessionId, data);
104
+ });
105
+ // Handle exit
106
+ ptyProcess.onExit(({ exitCode, signal }) => {
107
+ const ms = this.sessions.get(sessionId);
108
+ if (ms) {
109
+ ms.session.status = signal ? 'killed' : 'exited';
110
+ ms.session.exitCode = exitCode;
111
+ ms.session.signal = signal?.toString();
112
+ if (ms.notifyOnExit) {
113
+ this.emit('session:exited', {
114
+ sessionId,
115
+ exitCode,
116
+ signal: signal?.toString(),
117
+ duration: Date.now() - ms.session.createdAt.getTime(),
118
+ finalLineCount: ms.session.lineCount,
119
+ });
120
+ }
121
+ }
122
+ });
123
+ return {
124
+ sessionId,
125
+ pid: ptyProcess.pid,
126
+ command: input.command || '',
127
+ status: 'running',
128
+ message: 'Session created and command started',
129
+ };
130
+ }
131
+ /**
132
+ * Execute a command synchronously and wait for completion
133
+ */
134
+ async exec(input) {
135
+ return new Promise((resolve) => {
136
+ const shell = this.defaultShell;
137
+ const cwd = input.cwd || process.cwd();
138
+ const timeout = Math.min(input.timeout || 30000, 600000); // Max 10 minutes
139
+ const env = { ...process.env, ...input.env };
140
+ let stdout = '';
141
+ let stderr = '';
142
+ let timedOut = false;
143
+ const startTime = Date.now();
144
+ const ptyProcess = pty.spawn(shell, ['-c', input.command], {
145
+ name: 'xterm-256color',
146
+ cols: 120,
147
+ rows: 30,
148
+ cwd,
149
+ env,
150
+ });
151
+ // Timeout handler
152
+ const timeoutId = setTimeout(() => {
153
+ timedOut = true;
154
+ ptyProcess.kill();
155
+ }, timeout);
156
+ // Collect output
157
+ ptyProcess.onData((data) => {
158
+ stdout += data;
159
+ });
160
+ // Handle exit
161
+ ptyProcess.onExit(({ exitCode }) => {
162
+ clearTimeout(timeoutId);
163
+ resolve({
164
+ exitCode: timedOut ? -1 : exitCode,
165
+ stdout: stdout.trim(),
166
+ stderr: stderr.trim(),
167
+ duration: Date.now() - startTime,
168
+ timedOut,
169
+ });
170
+ });
171
+ });
172
+ }
173
+ /**
174
+ * Write data to a PTY session
175
+ */
176
+ write(input) {
177
+ const ms = this.sessions.get(input.sessionId);
178
+ if (!ms) {
179
+ throw new Error(`Session not found: ${input.sessionId}`);
180
+ }
181
+ if (ms.session.status !== 'running') {
182
+ throw new Error(`Session is not running: ${input.sessionId}`);
183
+ }
184
+ let data = input.data || '';
185
+ if (input.specialKey) {
186
+ data = SPECIAL_KEYS[input.specialKey] || '';
187
+ }
188
+ if (!data) {
189
+ throw new Error('No data or specialKey provided');
190
+ }
191
+ ms.ptyProcess.write(data);
192
+ return {
193
+ success: true,
194
+ bytesWritten: data.length,
195
+ sessionStatus: ms.session.status,
196
+ };
197
+ }
198
+ /**
199
+ * Read output from a PTY session
200
+ */
201
+ read(input) {
202
+ const ms = this.sessions.get(input.sessionId);
203
+ if (!ms) {
204
+ throw new Error(`Session not found: ${input.sessionId}`);
205
+ }
206
+ let lines = [...ms.outputBuffer];
207
+ // Filter by pattern
208
+ if (input.pattern) {
209
+ const regex = new RegExp(input.pattern, input.ignoreCase ? 'i' : '');
210
+ lines = lines.filter((line) => regex.test(line.text));
211
+ }
212
+ // Filter by timestamp
213
+ if (input.since) {
214
+ const sinceDate = new Date(input.since);
215
+ lines = lines.filter((line) => line.timestamp >= sinceDate);
216
+ }
217
+ const totalLines = lines.length;
218
+ // Apply pagination
219
+ const offset = input.offset || 0;
220
+ const limit = Math.min(input.limit || 100, 1000);
221
+ if (input.tail) {
222
+ // Return last N lines
223
+ lines = lines.slice(Math.max(0, lines.length - limit));
224
+ }
225
+ else {
226
+ lines = lines.slice(offset, offset + limit);
227
+ }
228
+ return {
229
+ sessionId: input.sessionId,
230
+ lines: lines.map((l, idx) => ({
231
+ line: input.tail ? totalLines - lines.length + idx + 1 : offset + idx + 1,
232
+ text: l.text,
233
+ timestamp: l.timestamp.toISOString(),
234
+ })),
235
+ totalLines: ms.session.lineCount,
236
+ hasMore: offset + limit < totalLines,
237
+ sessionStatus: ms.session.status,
238
+ };
239
+ }
240
+ /**
241
+ * List all PTY sessions
242
+ */
243
+ list(input = {}) {
244
+ const sessions = [];
245
+ let running = 0, exited = 0, killed = 0;
246
+ for (const [, ms] of this.sessions) {
247
+ // Count by status
248
+ if (ms.session.status === 'running')
249
+ running++;
250
+ else if (ms.session.status === 'exited')
251
+ exited++;
252
+ else if (ms.session.status === 'killed')
253
+ killed++;
254
+ // Filter by status
255
+ if (input.status && input.status !== 'all' && ms.session.status !== input.status) {
256
+ continue;
257
+ }
258
+ const sessionInfo = {
259
+ sessionId: ms.session.id,
260
+ name: ms.session.name,
261
+ pid: ms.session.pid,
262
+ command: ms.session.command,
263
+ status: ms.session.status,
264
+ createdAt: ms.session.createdAt.toISOString(),
265
+ lineCount: ms.session.lineCount,
266
+ cwd: ms.session.cwd,
267
+ };
268
+ // Include recent output if requested
269
+ if (input.includeOutput) {
270
+ const outputLines = input.outputLines || 5;
271
+ sessionInfo.recentOutput = ms.outputBuffer
272
+ .slice(-outputLines)
273
+ .map((l) => l.text);
274
+ }
275
+ sessions.push(sessionInfo);
276
+ }
277
+ return {
278
+ sessions,
279
+ summary: {
280
+ total: this.sessions.size,
281
+ running,
282
+ exited,
283
+ killed,
284
+ },
285
+ };
286
+ }
287
+ /**
288
+ * Kill a PTY session
289
+ */
290
+ async kill(input) {
291
+ const ms = this.sessions.get(input.sessionId);
292
+ if (!ms) {
293
+ throw new Error(`Session not found: ${input.sessionId}`);
294
+ }
295
+ const signal = input.signal || 'SIGTERM';
296
+ const gracePeriod = input.gracePeriod || 5000;
297
+ const finalLineCount = ms.session.lineCount;
298
+ if (ms.session.status === 'running') {
299
+ // Send signal
300
+ ms.ptyProcess.kill(signal);
301
+ // Wait for graceful termination
302
+ if (signal === 'SIGTERM') {
303
+ await new Promise((resolve) => {
304
+ const checkInterval = setInterval(() => {
305
+ if (ms.session.status !== 'running') {
306
+ clearInterval(checkInterval);
307
+ resolve();
308
+ }
309
+ }, 100);
310
+ setTimeout(() => {
311
+ clearInterval(checkInterval);
312
+ if (ms.session.status === 'running') {
313
+ ms.ptyProcess.kill('SIGKILL');
314
+ }
315
+ resolve();
316
+ }, gracePeriod);
317
+ });
318
+ }
319
+ ms.session.status = 'killed';
320
+ ms.session.signal = signal;
321
+ }
322
+ // Cleanup if requested
323
+ if (input.cleanup) {
324
+ this.sessions.delete(input.sessionId);
325
+ }
326
+ return {
327
+ sessionId: input.sessionId,
328
+ exitCode: ms.session.exitCode,
329
+ signal,
330
+ cleaned: input.cleanup || false,
331
+ finalLineCount,
332
+ message: input.cleanup
333
+ ? 'Session terminated and cleaned up'
334
+ : 'Session terminated successfully',
335
+ };
336
+ }
337
+ /**
338
+ * Get a session by ID
339
+ */
340
+ getSession(sessionId) {
341
+ return this.sessions.get(sessionId)?.session;
342
+ }
343
+ /**
344
+ * Shutdown all sessions
345
+ */
346
+ async shutdown() {
347
+ const promises = [];
348
+ for (const [sessionId, ms] of this.sessions) {
349
+ if (ms.session.status === 'running') {
350
+ promises.push(this.kill({ sessionId, cleanup: true }));
351
+ }
352
+ }
353
+ await Promise.all(promises);
354
+ this.sessions.clear();
355
+ }
356
+ /**
357
+ * Append output to a session's buffer
358
+ */
359
+ appendOutput(sessionId, data) {
360
+ const ms = this.sessions.get(sessionId);
361
+ if (!ms)
362
+ return;
363
+ // Split by newlines and add to buffer
364
+ const lines = data.split(/\r?\n/);
365
+ const now = new Date();
366
+ for (const text of lines) {
367
+ if (text || lines.length === 1) {
368
+ ms.outputBuffer.push({
369
+ line: ms.session.lineCount + 1,
370
+ text,
371
+ timestamp: now,
372
+ });
373
+ ms.session.lineCount++;
374
+ // Trim buffer if too large
375
+ if (ms.outputBuffer.length > this.maxOutputLines) {
376
+ ms.outputBuffer.shift();
377
+ }
378
+ }
379
+ }
380
+ // Emit output event
381
+ this.emit('output', { sessionId, data });
382
+ }
383
+ }
384
+ exports.PTYManager = PTYManager;
385
+ // Export singleton instance
386
+ exports.ptyManager = new PTYManager();
387
+ //# sourceMappingURL=pty-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-manager.js","sourceRoot":"","sources":["../src/pty-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * PTY Manager Unit Tests
3
+ *
4
+ * Tests for verifying PTY session management, command execution,
5
+ * and output buffering functionality.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=pty-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-manager.test.d.ts","sourceRoot":"","sources":["../src/pty-manager.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}