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/dist/tools.js ADDED
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Tool Definitions for Seahorse Bash Client
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TOOL_DEFINITIONS = void 0;
7
+ exports.TOOL_DEFINITIONS = [
8
+ {
9
+ name: 'bash_spawn',
10
+ description: 'Create a new PTY session and run a command in background. Use this for long-running processes like dev servers, watchers, or any command that needs persistent terminal state.',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ command: {
15
+ type: 'string',
16
+ description: "Command to execute (e.g., 'npm run dev', 'python server.py')",
17
+ },
18
+ args: {
19
+ type: 'array',
20
+ items: { type: 'string' },
21
+ description: 'Command arguments (optional)',
22
+ },
23
+ cwd: {
24
+ type: 'string',
25
+ description: 'Working directory (default: current directory)',
26
+ },
27
+ env: {
28
+ type: 'object',
29
+ additionalProperties: { type: 'string' },
30
+ description: 'Additional environment variables',
31
+ },
32
+ name: {
33
+ type: 'string',
34
+ description: 'Session name/identifier (optional, auto-generated if not provided)',
35
+ },
36
+ shell: {
37
+ type: 'string',
38
+ enum: ['bash', 'sh', 'zsh'],
39
+ default: 'bash',
40
+ description: 'Shell to use',
41
+ },
42
+ cols: {
43
+ type: 'integer',
44
+ default: 120,
45
+ description: 'Terminal columns',
46
+ },
47
+ rows: {
48
+ type: 'integer',
49
+ default: 30,
50
+ description: 'Terminal rows',
51
+ },
52
+ notifyOnExit: {
53
+ type: 'boolean',
54
+ default: true,
55
+ description: 'Whether to send notification when process exits',
56
+ },
57
+ },
58
+ required: ['command'],
59
+ },
60
+ },
61
+ {
62
+ name: 'bash_exec',
63
+ description: 'Execute a command synchronously and wait for completion. Use this for quick commands that should finish within the timeout. Output is returned directly.',
64
+ inputSchema: {
65
+ type: 'object',
66
+ properties: {
67
+ command: {
68
+ type: 'string',
69
+ description: 'Bash command to execute',
70
+ },
71
+ cwd: {
72
+ type: 'string',
73
+ description: 'Working directory (optional)',
74
+ },
75
+ timeout: {
76
+ type: 'integer',
77
+ default: 30000,
78
+ description: 'Timeout in milliseconds (default 30s, max 600s)',
79
+ },
80
+ env: {
81
+ type: 'object',
82
+ additionalProperties: { type: 'string' },
83
+ description: 'Additional environment variables',
84
+ },
85
+ },
86
+ required: ['command'],
87
+ },
88
+ },
89
+ {
90
+ name: 'bash_write',
91
+ description: 'Write data or send special keys to a running PTY session. Use this to send input to interactive programs, including Ctrl+C to interrupt.',
92
+ inputSchema: {
93
+ type: 'object',
94
+ properties: {
95
+ sessionId: {
96
+ type: 'string',
97
+ description: 'Target session ID',
98
+ },
99
+ data: {
100
+ type: 'string',
101
+ description: 'Text data to send',
102
+ },
103
+ specialKey: {
104
+ type: 'string',
105
+ enum: ['ctrl+c', 'ctrl+d', 'ctrl+z', 'enter', 'tab', 'up', 'down', 'left', 'right'],
106
+ description: 'Special key to send (alternative to data)',
107
+ },
108
+ },
109
+ required: ['sessionId'],
110
+ },
111
+ },
112
+ {
113
+ name: 'bash_read',
114
+ description: 'Read output from a PTY session buffer. Supports pagination, filtering by regex pattern, and retrieving output since a specific timestamp.',
115
+ inputSchema: {
116
+ type: 'object',
117
+ properties: {
118
+ sessionId: {
119
+ type: 'string',
120
+ description: 'Target session ID',
121
+ },
122
+ offset: {
123
+ type: 'integer',
124
+ default: 0,
125
+ description: 'Starting line number (0-indexed)',
126
+ },
127
+ limit: {
128
+ type: 'integer',
129
+ default: 100,
130
+ maximum: 1000,
131
+ description: 'Maximum lines to return',
132
+ },
133
+ pattern: {
134
+ type: 'string',
135
+ description: 'Regex pattern to filter lines (optional)',
136
+ },
137
+ ignoreCase: {
138
+ type: 'boolean',
139
+ default: false,
140
+ description: 'Case-insensitive pattern matching',
141
+ },
142
+ since: {
143
+ type: 'string',
144
+ format: 'date-time',
145
+ description: 'Return output after this timestamp (optional)',
146
+ },
147
+ tail: {
148
+ type: 'boolean',
149
+ default: false,
150
+ description: 'If true, return last N lines instead of from offset',
151
+ },
152
+ },
153
+ required: ['sessionId'],
154
+ },
155
+ },
156
+ {
157
+ name: 'bash_list',
158
+ description: 'List all PTY sessions with their status. Optionally include recent output from each session.',
159
+ inputSchema: {
160
+ type: 'object',
161
+ properties: {
162
+ status: {
163
+ type: 'string',
164
+ enum: ['all', 'running', 'exited', 'killed'],
165
+ default: 'all',
166
+ description: 'Filter by session status',
167
+ },
168
+ includeOutput: {
169
+ type: 'boolean',
170
+ default: false,
171
+ description: 'Include recent output lines',
172
+ },
173
+ outputLines: {
174
+ type: 'integer',
175
+ default: 5,
176
+ description: 'Number of output lines to include if includeOutput=true',
177
+ },
178
+ },
179
+ },
180
+ },
181
+ {
182
+ name: 'bash_kill',
183
+ description: 'Terminate a PTY session. Sends SIGTERM by default with graceful shutdown, then SIGKILL if needed.',
184
+ inputSchema: {
185
+ type: 'object',
186
+ properties: {
187
+ sessionId: {
188
+ type: 'string',
189
+ description: 'Session ID to terminate',
190
+ },
191
+ signal: {
192
+ type: 'string',
193
+ enum: ['SIGTERM', 'SIGKILL', 'SIGINT'],
194
+ default: 'SIGTERM',
195
+ description: 'Signal to send',
196
+ },
197
+ cleanup: {
198
+ type: 'boolean',
199
+ default: false,
200
+ description: 'If true, remove session from list (deletes output buffer)',
201
+ },
202
+ gracePeriod: {
203
+ type: 'integer',
204
+ default: 5000,
205
+ description: 'Time to wait before SIGKILL after SIGTERM (ms)',
206
+ },
207
+ },
208
+ required: ['sessionId'],
209
+ },
210
+ },
211
+ ];
212
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Seahorse Bash Client Types
3
+ */
4
+ export type SessionStatus = 'running' | 'exited' | 'killed';
5
+ export interface PTYSession {
6
+ id: string;
7
+ name?: string;
8
+ pid: number;
9
+ command: string;
10
+ args: string[];
11
+ cwd: string;
12
+ status: SessionStatus;
13
+ createdAt: Date;
14
+ exitCode?: number;
15
+ signal?: string;
16
+ lineCount: number;
17
+ }
18
+ export interface OutputLine {
19
+ line: number;
20
+ text: string;
21
+ timestamp: Date;
22
+ }
23
+ export interface BashSpawnInput {
24
+ command?: string;
25
+ args?: string[];
26
+ cwd?: string;
27
+ env?: Record<string, string>;
28
+ name?: string;
29
+ shell?: 'bash' | 'sh' | 'zsh';
30
+ cols?: number;
31
+ rows?: number;
32
+ notifyOnExit?: boolean;
33
+ }
34
+ export interface BashExecInput {
35
+ command: string;
36
+ cwd?: string;
37
+ timeout?: number;
38
+ env?: Record<string, string>;
39
+ }
40
+ export interface BashWriteInput {
41
+ sessionId: string;
42
+ data?: string;
43
+ specialKey?: 'ctrl+c' | 'ctrl+d' | 'ctrl+z' | 'enter' | 'tab' | 'up' | 'down' | 'left' | 'right';
44
+ }
45
+ export interface BashReadInput {
46
+ sessionId: string;
47
+ offset?: number;
48
+ limit?: number;
49
+ pattern?: string;
50
+ ignoreCase?: boolean;
51
+ since?: string;
52
+ tail?: boolean;
53
+ }
54
+ export interface BashListInput {
55
+ status?: 'all' | 'running' | 'exited' | 'killed';
56
+ includeOutput?: boolean;
57
+ outputLines?: number;
58
+ }
59
+ export interface BashKillInput {
60
+ sessionId: string;
61
+ signal?: 'SIGTERM' | 'SIGKILL' | 'SIGINT';
62
+ cleanup?: boolean;
63
+ gracePeriod?: number;
64
+ }
65
+ export interface BashSpawnResponse {
66
+ sessionId: string;
67
+ pid: number;
68
+ command: string;
69
+ status: SessionStatus;
70
+ message: string;
71
+ }
72
+ export interface BashExecResponse {
73
+ exitCode: number;
74
+ stdout: string;
75
+ stderr: string;
76
+ duration: number;
77
+ timedOut: boolean;
78
+ }
79
+ export interface BashWriteResponse {
80
+ success: boolean;
81
+ bytesWritten: number;
82
+ sessionStatus: SessionStatus;
83
+ }
84
+ export interface BashReadResponse {
85
+ sessionId: string;
86
+ lines: Array<{
87
+ line: number;
88
+ text: string;
89
+ timestamp: string;
90
+ }>;
91
+ totalLines: number;
92
+ hasMore: boolean;
93
+ sessionStatus: SessionStatus;
94
+ }
95
+ export interface BashListResponse {
96
+ sessions: Array<{
97
+ sessionId: string;
98
+ name?: string;
99
+ pid: number;
100
+ command: string;
101
+ status: SessionStatus;
102
+ createdAt: string;
103
+ lineCount: number;
104
+ cwd: string;
105
+ recentOutput?: string[];
106
+ }>;
107
+ summary: {
108
+ total: number;
109
+ running: number;
110
+ exited: number;
111
+ killed: number;
112
+ };
113
+ }
114
+ export interface BashKillResponse {
115
+ sessionId: string;
116
+ exitCode?: number;
117
+ signal: string;
118
+ cleaned: boolean;
119
+ finalLineCount: number;
120
+ message: string;
121
+ }
122
+ export interface ToolDefinition {
123
+ name: string;
124
+ description: string;
125
+ inputSchema: object;
126
+ }
127
+ export interface RegisterMessage {
128
+ type: 'registration';
129
+ tools: ToolDefinition[];
130
+ metadata: {
131
+ version: string;
132
+ hostname: string;
133
+ platform: string;
134
+ shell: string;
135
+ };
136
+ }
137
+ export interface ToolCallMessage {
138
+ type: 'tool_call';
139
+ request_id: string;
140
+ method: string;
141
+ params: {
142
+ name: string;
143
+ arguments: Record<string, unknown>;
144
+ };
145
+ }
146
+ export interface ToolResponseMessage {
147
+ type: 'tool_response';
148
+ request_id: string;
149
+ content: Array<{
150
+ type: 'text';
151
+ text: string;
152
+ }>;
153
+ isError: boolean;
154
+ error?: string;
155
+ }
156
+ export interface NotificationMessage {
157
+ type: 'notification';
158
+ method: string;
159
+ params: Record<string, unknown>;
160
+ }
161
+ export interface HeartbeatMessage {
162
+ type: 'heartbeat';
163
+ }
164
+ export interface HeartbeatAckMessage {
165
+ type: 'heartbeat_ack';
166
+ }
167
+ export interface RegistrationAckMessage {
168
+ type: 'registration_ack';
169
+ server_name: string;
170
+ registered_tools: number;
171
+ tool_names: string[];
172
+ }
173
+ export interface ErrorMessage {
174
+ type: 'error';
175
+ error: string;
176
+ }
177
+ export type WebSocketMessage = RegisterMessage | ToolCallMessage | ToolResponseMessage | NotificationMessage | HeartbeatMessage | HeartbeatAckMessage | RegistrationAckMessage | ErrorMessage;
178
+ export interface ClientConfig {
179
+ serverUrl: string;
180
+ serverName: string;
181
+ reconnectInterval?: number;
182
+ heartbeatInterval?: number;
183
+ maxOutputLines?: number;
184
+ defaultShell?: string;
185
+ allowedCommands?: string[];
186
+ blockedCommands?: string[];
187
+ allowedCwdPaths?: string[];
188
+ insecure?: boolean;
189
+ }
190
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Seahorse Bash Client Types
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * WebSocket Client - Connects to Seahorse Agent and handles MCP tool calls
3
+ */
4
+ import { EventEmitter } from 'events';
5
+ import { ClientConfig } from './types';
6
+ import { PTYManager } from './pty-manager';
7
+ export declare class WebSocketClient extends EventEmitter {
8
+ private ws;
9
+ private config;
10
+ private ptyManager;
11
+ private reconnectTimer;
12
+ private heartbeatTimer;
13
+ private isConnected;
14
+ private isShuttingDown;
15
+ constructor(config: ClientConfig);
16
+ /**
17
+ * Connect to the Seahorse Agent
18
+ */
19
+ connect(): Promise<void>;
20
+ /**
21
+ * Disconnect from the server
22
+ */
23
+ disconnect(): Promise<void>;
24
+ /**
25
+ * Register tools with the agent
26
+ */
27
+ private register;
28
+ /**
29
+ * Handle incoming WebSocket messages
30
+ */
31
+ private handleMessage;
32
+ /**
33
+ * Handle a tool call from the agent
34
+ */
35
+ private handleToolCall;
36
+ /**
37
+ * Execute a tool
38
+ */
39
+ private executeTool;
40
+ /**
41
+ * Send a tool response
42
+ */
43
+ private sendToolResponse;
44
+ /**
45
+ * Send a notification to the agent
46
+ */
47
+ private sendNotification;
48
+ /**
49
+ * Send a message through the WebSocket
50
+ */
51
+ private send;
52
+ /**
53
+ * Schedule a reconnection attempt
54
+ */
55
+ private scheduleReconnect;
56
+ /**
57
+ * Start heartbeat timer
58
+ */
59
+ private startHeartbeat;
60
+ /**
61
+ * Stop heartbeat timer
62
+ */
63
+ private stopHeartbeat;
64
+ /**
65
+ * Get connection status
66
+ */
67
+ get connected(): boolean;
68
+ /**
69
+ * Get PTY manager for direct access
70
+ */
71
+ get pty(): PTYManager;
72
+ }
73
+ //# sourceMappingURL=websocket-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../src/websocket-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,EACL,YAAY,EAMb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,EAAE,YAAY;IAmBhC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA0D9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC;;OAEG;IACH,OAAO,CAAC,QAAQ;IAgBhB;;OAEG;IACH,OAAO,CAAC,aAAa;IAoCrB;;OAEG;YACW,cAAc;IAiB5B;;OAEG;YACW,WAAW;IA2DzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,IAAI;IAMZ;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACH,IAAI,GAAG,IAAI,UAAU,CAEpB;CACF"}