@ellery/terminal-mcp 0.2.0 → 0.2.2

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.
Files changed (82) hide show
  1. package/README.md +151 -5
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +4 -62
  4. package/dist/client.js.map +1 -1
  5. package/dist/index.js +235 -13
  6. package/dist/index.js.map +1 -1
  7. package/dist/recording/index.d.ts +4 -0
  8. package/dist/recording/index.d.ts.map +1 -0
  9. package/dist/recording/index.js +3 -0
  10. package/dist/recording/index.js.map +1 -0
  11. package/dist/recording/manager.d.ts +62 -0
  12. package/dist/recording/manager.d.ts.map +1 -0
  13. package/dist/recording/manager.js +123 -0
  14. package/dist/recording/manager.js.map +1 -0
  15. package/dist/recording/recorder.d.ts +95 -0
  16. package/dist/recording/recorder.d.ts.map +1 -0
  17. package/dist/recording/recorder.js +296 -0
  18. package/dist/recording/recorder.js.map +1 -0
  19. package/dist/recording/types.d.ts +65 -0
  20. package/dist/recording/types.d.ts.map +1 -0
  21. package/dist/recording/types.js +2 -0
  22. package/dist/recording/types.js.map +1 -0
  23. package/dist/sandbox/config.d.ts +46 -0
  24. package/dist/sandbox/config.d.ts.map +1 -0
  25. package/dist/sandbox/config.js +144 -0
  26. package/dist/sandbox/config.js.map +1 -0
  27. package/dist/sandbox/controller.d.ts +72 -0
  28. package/dist/sandbox/controller.d.ts.map +1 -0
  29. package/dist/sandbox/controller.js +208 -0
  30. package/dist/sandbox/controller.js.map +1 -0
  31. package/dist/sandbox/index.d.ts +6 -0
  32. package/dist/sandbox/index.d.ts.map +1 -0
  33. package/dist/sandbox/index.js +4 -0
  34. package/dist/sandbox/index.js.map +1 -0
  35. package/dist/sandbox/prompt.d.ts +10 -0
  36. package/dist/sandbox/prompt.d.ts.map +1 -0
  37. package/dist/sandbox/prompt.js +434 -0
  38. package/dist/sandbox/prompt.js.map +1 -0
  39. package/dist/server.d.ts.map +1 -1
  40. package/dist/server.js +2 -1
  41. package/dist/server.js.map +1 -1
  42. package/dist/terminal/index.d.ts +1 -0
  43. package/dist/terminal/index.d.ts.map +1 -1
  44. package/dist/terminal/manager.d.ts +58 -3
  45. package/dist/terminal/manager.d.ts.map +1 -1
  46. package/dist/terminal/manager.js +118 -3
  47. package/dist/terminal/manager.js.map +1 -1
  48. package/dist/terminal/session.d.ts +21 -1
  49. package/dist/terminal/session.d.ts.map +1 -1
  50. package/dist/terminal/session.js +44 -3
  51. package/dist/terminal/session.js.map +1 -1
  52. package/dist/tools/definitions.d.ts +18 -0
  53. package/dist/tools/definitions.d.ts.map +1 -0
  54. package/dist/tools/definitions.js +110 -0
  55. package/dist/tools/definitions.js.map +1 -0
  56. package/dist/tools/index.d.ts.map +1 -1
  57. package/dist/tools/index.js +7 -1
  58. package/dist/tools/index.js.map +1 -1
  59. package/dist/tools/startRecording.d.ts +68 -0
  60. package/dist/tools/startRecording.d.ts.map +1 -0
  61. package/dist/tools/startRecording.js +111 -0
  62. package/dist/tools/startRecording.js.map +1 -0
  63. package/dist/tools/stopRecording.d.ts +31 -0
  64. package/dist/tools/stopRecording.d.ts.map +1 -0
  65. package/dist/tools/stopRecording.js +76 -0
  66. package/dist/tools/stopRecording.js.map +1 -0
  67. package/dist/transport/socket.d.ts.map +1 -1
  68. package/dist/transport/socket.js +10 -0
  69. package/dist/transport/socket.js.map +1 -1
  70. package/dist/ui/index.d.ts +1 -0
  71. package/dist/ui/index.d.ts.map +1 -1
  72. package/dist/ui/index.js +18 -2
  73. package/dist/ui/index.js.map +1 -1
  74. package/dist/utils/platform.d.ts +6 -0
  75. package/dist/utils/platform.d.ts.map +1 -1
  76. package/dist/utils/platform.js +15 -0
  77. package/dist/utils/platform.js.map +1 -1
  78. package/dist/utils/version.d.ts +2 -0
  79. package/dist/utils/version.d.ts.map +1 -0
  80. package/dist/utils/version.js +9 -0
  81. package/dist/utils/version.js.map +1 -0
  82. package/package.json +3 -2
package/README.md CHANGED
@@ -27,7 +27,9 @@ curl -fsSL https://raw.githubusercontent.com/elleryfamilia/terminal-mcp/main/ins
27
27
  - **Full Terminal Emulation**: Uses xterm.js headless for accurate VT100/ANSI emulation
28
28
  - **Cross-Platform PTY**: Native pseudo-terminal support via node-pty (macOS, Linux, Windows)
29
29
  - **MCP Protocol**: Implements Model Context Protocol for AI assistant integration
30
- - **Simple API**: Four intuitive tools for complete terminal control
30
+ - **Session Recording**: Record terminal sessions to asciicast format for playback with asciinema
31
+ - **Simple API**: Six intuitive tools for complete terminal control
32
+ - **Sandbox Mode**: Optional security restrictions for filesystem and network access
31
33
 
32
34
  ## Building from Source
33
35
 
@@ -71,10 +73,22 @@ With custom options:
71
73
  terminal-mcp [OPTIONS]
72
74
 
73
75
  Options:
74
- --cols <number> Terminal width in columns (default: 120)
75
- --rows <number> Terminal height in rows (default: 40)
76
- --shell <path> Shell to use (default: $SHELL or bash)
77
- --help, -h Show help message
76
+ --cols <number> Terminal width in columns (default: 120)
77
+ --rows <number> Terminal height in rows (default: 40)
78
+ --shell <path> Shell to use (default: $SHELL or bash)
79
+ --sandbox Enable sandbox mode (restricts filesystem/network)
80
+ --sandbox-config <path> Load sandbox config from JSON file
81
+ --version, -v Show version number
82
+ --help, -h Show help message
83
+
84
+ Recording Options:
85
+ --record [mode] Enable recording (default mode: always)
86
+ Modes: always, on-failure, off
87
+ --record-dir <dir> Recording output directory
88
+ (default: ~/.local/state/terminal-mcp/recordings)
89
+ --idle-time-limit <sec> Max idle time between events (default: 2s)
90
+ --max-duration <sec> Max recording duration (default: 3600s)
91
+ --inactivity-timeout <sec> Stop after no output (default: 600s)
78
92
  ```
79
93
 
80
94
  ## MCP Tools
@@ -132,6 +146,136 @@ Capture the terminal state with cursor position and dimensions.
132
146
  }
133
147
  ```
134
148
 
149
+ ### `startRecording`
150
+ Start recording terminal output to an asciicast v2 file.
151
+
152
+ ```json
153
+ {
154
+ "name": "startRecording",
155
+ "arguments": {
156
+ "mode": "always",
157
+ "idleTimeLimit": 2,
158
+ "maxDuration": 3600
159
+ }
160
+ }
161
+ ```
162
+
163
+ Options:
164
+ - `mode`: `always` (save all) or `on-failure` (save only on non-zero exit)
165
+ - `outputDir`: Custom output directory
166
+ - `idleTimeLimit`: Max seconds between events (caps pauses in playback)
167
+ - `maxDuration`: Auto-stop after N seconds
168
+ - `inactivityTimeout`: Auto-stop after N seconds of no output
169
+
170
+ ### `stopRecording`
171
+ Stop a recording and finalize the asciicast file.
172
+
173
+ ```json
174
+ {
175
+ "name": "stopRecording",
176
+ "arguments": {
177
+ "recordingId": "abc123"
178
+ }
179
+ }
180
+ ```
181
+
182
+ ## Sandbox Mode
183
+
184
+ Run the terminal with restricted filesystem and network access:
185
+
186
+ ```bash
187
+ # Interactive permission configuration
188
+ terminal-mcp --sandbox
189
+
190
+ # With a config file
191
+ terminal-mcp --sandbox --sandbox-config ~/.terminal-mcp-sandbox.json
192
+ ```
193
+
194
+ The interactive mode shows a TUI dialog to configure permissions:
195
+ - **Read/Write**: Full access (current directory, /tmp, caches)
196
+ - **Read-Only**: Can read but not modify (home directory)
197
+ - **Blocked**: No access (SSH keys, cloud credentials, auth tokens)
198
+
199
+ Example config file:
200
+
201
+ ```json
202
+ {
203
+ "filesystem": {
204
+ "readWrite": [".", "/tmp", "~/.cache"],
205
+ "readOnly": ["~"],
206
+ "blocked": ["~/.ssh", "~/.aws", "~/.gnupg"]
207
+ },
208
+ "network": {
209
+ "mode": "all"
210
+ }
211
+ }
212
+ ```
213
+
214
+ Platform support:
215
+ - **macOS**: Full support via sandbox-exec (Seatbelt)
216
+ - **Linux**: Full support via bubblewrap (requires `bwrap` installed)
217
+ - **Windows**: Graceful fallback (runs without sandbox)
218
+
219
+ See [Sandbox Documentation](./docs/sandbox.md) for detailed configuration options.
220
+
221
+ ## Recording
222
+
223
+ Terminal MCP can record sessions to [asciicast v2](https://docs.asciinema.org/manual/asciicast/v2/) format, compatible with [asciinema](https://asciinema.org/) for playback.
224
+
225
+ ### Quick Start
226
+
227
+ ```bash
228
+ # Start with recording enabled
229
+ terminal-mcp --record
230
+
231
+ # Run your commands, then exit
232
+ exit
233
+
234
+ # Output shows the saved file path:
235
+ # Recordings saved:
236
+ # ~/.local/state/terminal-mcp/recordings/20240115_143022.cast
237
+ #
238
+ # Play with: asciinema play <file>
239
+ ```
240
+
241
+ ### Playback
242
+
243
+ Install asciinema to play back recordings:
244
+
245
+ ```bash
246
+ # macOS
247
+ brew install asciinema
248
+
249
+ # Linux/pip
250
+ pip install asciinema
251
+
252
+ # Play a recording
253
+ asciinema play ~/.local/state/terminal-mcp/recordings/20240115_143022.cast
254
+
255
+ # Play at 2x speed
256
+ asciinema play -s 2 recording.cast
257
+ ```
258
+
259
+ ### Recording Modes
260
+
261
+ - **`always`** (default): Save every recording
262
+ - **`on-failure`**: Only save if the session exits with a non-zero code (useful for debugging failed CI runs)
263
+
264
+ ```bash
265
+ # Only save recordings when something fails
266
+ terminal-mcp --record=on-failure
267
+ ```
268
+
269
+ ### MCP Tool Recording
270
+
271
+ AI assistants can also control recording programmatically via MCP tools:
272
+
273
+ 1. Call `startRecording` to begin capturing
274
+ 2. Perform terminal operations
275
+ 3. Call `stopRecording` to finalize and save
276
+
277
+ This enables AI-driven workflows like "record this debugging session" or "capture this demo".
278
+
135
279
  ## Architecture
136
280
 
137
281
  ```
@@ -174,7 +318,9 @@ See the [docs](./docs/) folder for detailed documentation:
174
318
  - [Overview](./docs/index.md)
175
319
  - [Installation](./docs/installation.md)
176
320
  - [Tools Reference](./docs/tools.md)
321
+ - [Recording](./docs/recording.md)
177
322
  - [Configuration](./docs/configuration.md)
323
+ - [Sandbox Mode](./docs/sandbox.md)
178
324
  - [Examples](./docs/examples.md)
179
325
  - [Architecture](./docs/architecture.md)
180
326
 
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAoBA;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoL1E"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAsBA;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoH1E"}
package/dist/client.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import * as net from "net";
2
2
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { VERSION } from "./utils/version.js";
4
5
  import { ListToolsRequestSchema, CallToolRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
6
+ import { toolDefinitions } from "./tools/definitions.js";
5
7
  /**
6
8
  * MCP Client Mode - connects to existing terminal socket and serves MCP over stdio
7
9
  */
@@ -11,7 +13,7 @@ export async function startMcpClientMode(socketPath) {
11
13
  // Create MCP server
12
14
  const server = new Server({
13
15
  name: "terminal-mcp",
14
- version: "0.1.0",
16
+ version: VERSION,
15
17
  }, {
16
18
  capabilities: {
17
19
  tools: {},
@@ -71,69 +73,9 @@ export async function startMcpClientMode(socketPath) {
71
73
  });
72
74
  });
73
75
  }
74
- // Define tools that proxy to the interactive terminal
75
- const tools = [
76
- {
77
- name: "type",
78
- description: "Type text into the terminal",
79
- inputSchema: {
80
- type: "object",
81
- properties: {
82
- text: {
83
- type: "string",
84
- description: "The text to type",
85
- },
86
- },
87
- required: ["text"],
88
- },
89
- },
90
- {
91
- name: "sendKey",
92
- description: "Send a special key to the terminal (e.g., enter, tab, ctrl+c)",
93
- inputSchema: {
94
- type: "object",
95
- properties: {
96
- key: {
97
- type: "string",
98
- description: "The key to send (e.g., enter, tab, escape, up, down, left, right, ctrl+c, ctrl+d)",
99
- },
100
- },
101
- required: ["key"],
102
- },
103
- },
104
- {
105
- name: "getContent",
106
- description: "Get the current content of the terminal buffer",
107
- inputSchema: {
108
- type: "object",
109
- properties: {
110
- visibleOnly: {
111
- type: "boolean",
112
- description: "If true, only return visible content (default: false)",
113
- },
114
- },
115
- },
116
- },
117
- {
118
- name: "takeScreenshot",
119
- description: "Take a screenshot of the terminal showing current screen and cursor position",
120
- inputSchema: {
121
- type: "object",
122
- properties: {},
123
- },
124
- },
125
- {
126
- name: "clear",
127
- description: "Clear the terminal screen",
128
- inputSchema: {
129
- type: "object",
130
- properties: {},
131
- },
132
- },
133
- ];
134
76
  // Register list tools handler
135
77
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
136
- tools,
78
+ tools: toolDefinitions,
137
79
  }));
138
80
  // Register call tool handler - proxy to socket
139
81
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,10 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import * as fs from "fs";
3
+ import { createRequire } from "module";
3
4
  import { startMcpClientMode } from "./client.js";
4
5
  import { TerminalManager } from "./terminal/index.js";
5
6
  import { createToolProxyServer } from "./transport/index.js";
6
7
  import { getBanner } from "./ui/index.js";
7
8
  import { getDefaultSocketPath, getDefaultShell } from "./utils/platform.js";
9
+ import { SandboxController, loadConfigFromFile, promptForPermissions, } from "./sandbox/index.js";
10
+ const require = createRequire(import.meta.url);
11
+ const { version } = require("../package.json");
8
12
  // Default socket path
9
13
  const DEFAULT_SOCKET_PATH = getDefaultSocketPath();
10
14
  // Parse command line arguments
@@ -38,29 +42,135 @@ for (let i = 0; i < args.length; i++) {
38
42
  i++;
39
43
  }
40
44
  break;
45
+ case "--sandbox":
46
+ options.sandbox = true;
47
+ break;
48
+ case "--sandbox-config":
49
+ if (next) {
50
+ options.sandboxConfig = next;
51
+ options.sandbox = true; // Implicitly enable sandbox
52
+ i++;
53
+ }
54
+ break;
55
+ case "--record":
56
+ // Support bare --record (defaults to 'always')
57
+ if (!next || next.startsWith('-')) {
58
+ options.record = 'always';
59
+ }
60
+ else if (['always', 'on-failure', 'off'].includes(next)) {
61
+ options.record = next;
62
+ i++;
63
+ }
64
+ else {
65
+ // Unknown value, treat as bare --record
66
+ options.record = 'always';
67
+ }
68
+ break;
69
+ case "--record-dir":
70
+ if (next) {
71
+ options.recordDir = next;
72
+ i++;
73
+ }
74
+ break;
75
+ case "--record-format":
76
+ if (next) {
77
+ options.recordFormat = next;
78
+ i++;
79
+ }
80
+ break;
81
+ case "--idle-time-limit":
82
+ if (next) {
83
+ options.idleTimeLimit = parseFloat(next);
84
+ i++;
85
+ }
86
+ break;
87
+ case "--max-duration":
88
+ if (next) {
89
+ options.maxDuration = parseFloat(next);
90
+ i++;
91
+ }
92
+ break;
93
+ case "--inactivity-timeout":
94
+ if (next) {
95
+ options.inactivityTimeout = parseFloat(next);
96
+ i++;
97
+ }
98
+ break;
99
+ case "--version":
100
+ case "-v":
101
+ console.log(`terminal-mcp v${version}`);
102
+ process.exit(0);
41
103
  case "--help":
42
104
  case "-h":
43
105
  console.log(`
44
- terminal-mcp - A headless terminal emulator exposed via MCP
106
+ terminal-mcp v${version} - A headless terminal emulator exposed via MCP
45
107
 
46
108
  Usage: terminal-mcp [options]
47
109
 
48
110
  Options:
49
- --cols <number> Terminal width in columns (default: auto or 120)
50
- --rows <number> Terminal height in rows (default: auto or 40)
51
- --shell <path> Shell to use (default: $SHELL or bash)
52
- --socket <path> Unix socket path for MCP (default: ${DEFAULT_SOCKET_PATH})
53
- --help, -h Show this help message
111
+ --cols <number> Terminal width in columns (default: auto or 120)
112
+ --rows <number> Terminal height in rows (default: auto or 40)
113
+ --shell <path> Shell to use (default: $SHELL or bash)
114
+ --socket <path> Unix socket path for MCP (default: ${DEFAULT_SOCKET_PATH})
115
+ --sandbox Enable sandbox mode (restricts filesystem/network access)
116
+ --sandbox-config <path> Load sandbox config from JSON file
117
+ --version, -v Show version number
118
+ --help, -h Show this help message
119
+
120
+ Recording Options:
121
+ --record [mode] Enable recording (default mode: always)
122
+ Modes: always, on-failure, off
123
+ - always: Save all recordings
124
+ - on-failure: Only save recordings on non-zero exit
125
+ - off: Disable recording
126
+ --record-dir <dir> Recording output directory
127
+ Default: ~/.local/state/terminal-mcp/recordings
128
+ Override: TERMINAL_MCP_RECORD_DIR env var
129
+ --record-format <f> Recording format: v2 (default: v2, asciicast v2 format)
130
+ --idle-time-limit <sec> Max idle time between events (default: 2s)
131
+ Caps idle time in recordings to prevent long pauses
132
+ --max-duration <sec> Max recording duration (default: 3600 = 60 min)
133
+ Recording auto-stops when this limit is reached
134
+ --inactivity-timeout <sec> Stop after no output (default: 600 = 10 min)
135
+ Resets on each terminal output event
136
+
137
+ Environment Variables:
138
+ TERMINAL_MCP_RECORD_DIR Default recording output directory
54
139
 
55
140
  Mode Detection:
56
141
  - If stdin is a TTY: Interactive mode (gives you a shell, exposes socket)
57
142
  - If stdin is not a TTY: MCP client mode (connects to socket, serves MCP)
58
143
 
59
144
  Interactive Mode (run in your terminal):
60
- terminal-mcp
145
+ terminal-mcp # Normal mode
146
+ terminal-mcp --sandbox # With sandbox (interactive permission prompt)
61
147
 
62
148
  This gives you an interactive shell. AI can observe/interact via MCP.
63
149
 
150
+ With recording:
151
+ terminal-mcp --record
152
+ terminal-mcp --record --record-dir=./project-recordings
153
+ terminal-mcp --record=on-failure --idle-time-limit=5
154
+
155
+ Sandbox Mode:
156
+ When --sandbox is enabled, the terminal runs with restricted access:
157
+ - Filesystem: Configurable read/write, read-only, and blocked paths
158
+ - Network: Allow all, block all, or custom domain allowlist
159
+
160
+ Without --sandbox-config, an interactive prompt lets you configure permissions.
161
+
162
+ Example config file (~/.terminal-mcp-sandbox.json):
163
+ {
164
+ "filesystem": {
165
+ "readWrite": [".", "/tmp"],
166
+ "readOnly": ["~"],
167
+ "blocked": ["~/.ssh", "~/.aws"]
168
+ },
169
+ "network": {
170
+ "mode": "all"
171
+ }
172
+ }
173
+
64
174
  MCP Client Mode (add to your MCP client config):
65
175
  {
66
176
  "mcpServers": {
@@ -76,6 +186,13 @@ MCP Client Mode (add to your MCP client config):
76
186
  async function main() {
77
187
  const socketPath = options.socket || DEFAULT_SOCKET_PATH;
78
188
  const isInteractive = process.stdin.isTTY;
189
+ // Prevent recursive invocation
190
+ if (process.env.TERMINAL_MCP === '1') {
191
+ console.error('Error: terminal-mcp cannot be run from within itself.\n' +
192
+ 'You are already inside a terminal-mcp session.\n\n' +
193
+ 'To use MCP tools, configure your MCP client to connect to this session.');
194
+ process.exit(1);
195
+ }
79
196
  if (isInteractive) {
80
197
  // Interactive mode: Shell on stdin/stdout, tool proxy on Unix socket
81
198
  await startInteractiveMode(socketPath);
@@ -90,17 +207,100 @@ async function startInteractiveMode(socketPath) {
90
207
  const cols = options.cols ?? (process.stdout.columns || 120);
91
208
  const rows = options.rows ?? (process.stdout.rows || 40);
92
209
  const shell = options.shell || getDefaultShell();
210
+ // Initialize sandbox if enabled
211
+ let sandboxController;
212
+ let sandboxEnabled = false;
213
+ if (options.sandbox) {
214
+ sandboxController = new SandboxController();
215
+ // Check platform support and dependencies BEFORE showing the modal
216
+ if (!sandboxController.isSupported()) {
217
+ const platform = sandboxController.getPlatform();
218
+ if (platform === "win32") {
219
+ console.error("[terminal-mcp] Error: Sandbox mode is not supported on Windows.");
220
+ }
221
+ else {
222
+ console.error(`[terminal-mcp] Error: Sandbox mode is not supported on platform '${platform}'.`);
223
+ }
224
+ console.error("[terminal-mcp] Please run without the --sandbox flag.");
225
+ process.exit(1);
226
+ }
227
+ // Check Linux-specific dependencies
228
+ const depCheck = sandboxController.checkLinuxDependencies();
229
+ if (!depCheck.supported) {
230
+ console.error(`[terminal-mcp] Error: Sandbox dependencies not available.`);
231
+ console.error(`[terminal-mcp] Missing: ${depCheck.message}`);
232
+ console.error("");
233
+ console.error("To install on Arch Linux:");
234
+ console.error(" sudo pacman -S bubblewrap socat");
235
+ console.error("");
236
+ console.error("To install on Debian/Ubuntu:");
237
+ console.error(" sudo apt install bubblewrap socat");
238
+ console.error("");
239
+ console.error("Or run without the --sandbox flag.");
240
+ process.exit(1);
241
+ }
242
+ // Determine permissions
243
+ let permissions;
244
+ if (options.sandboxConfig) {
245
+ try {
246
+ permissions = loadConfigFromFile(options.sandboxConfig);
247
+ console.log(`[terminal-mcp] Loaded sandbox config from ${options.sandboxConfig}`);
248
+ }
249
+ catch (error) {
250
+ console.error(`[terminal-mcp] Failed to load sandbox config: ${error}`);
251
+ process.exit(1);
252
+ }
253
+ }
254
+ else {
255
+ // Interactive permission prompt
256
+ try {
257
+ permissions = await promptForPermissions();
258
+ }
259
+ catch (error) {
260
+ if (error instanceof Error && error.message === "cancelled") {
261
+ console.log("[terminal-mcp] Cancelled.");
262
+ process.exit(0);
263
+ }
264
+ throw error;
265
+ }
266
+ }
267
+ // Initialize sandbox
268
+ const status = await sandboxController.initialize(permissions);
269
+ sandboxEnabled = status.enabled;
270
+ if (status.enabled) {
271
+ console.log(`[terminal-mcp] Sandbox enabled (${status.platform})`);
272
+ }
273
+ else {
274
+ // If we get here, something unexpected failed during initialization
275
+ console.error(`[terminal-mcp] Error: Failed to initialize sandbox: ${status.reason}`);
276
+ console.error("[terminal-mcp] Please run without the --sandbox flag or fix the issue above.");
277
+ process.exit(1);
278
+ }
279
+ }
93
280
  // Generate startup banner
94
- const startupBanner = getBanner({ socketPath, cols, rows, shell });
281
+ const startupBanner = getBanner({
282
+ socketPath,
283
+ cols,
284
+ rows,
285
+ shell,
286
+ sandboxEnabled,
287
+ });
95
288
  // Create terminal manager (prompt customization handled in session.ts)
96
289
  const manager = new TerminalManager({
97
290
  cols,
98
291
  rows,
99
292
  shell: options.shell,
100
293
  startupBanner,
294
+ sandboxController,
295
+ record: options.record,
296
+ recordDir: options.recordDir,
297
+ recordFormat: options.recordFormat,
298
+ idleTimeLimit: options.idleTimeLimit,
299
+ maxDuration: options.maxDuration,
300
+ inactivityTimeout: options.inactivityTimeout,
101
301
  });
102
302
  // Get the session and set up interactive I/O
103
- const session = manager.getSession();
303
+ const session = await manager.initSession();
104
304
  // Track if we've shown the banner (for Windows, show after shell init)
105
305
  let bannerShown = false;
106
306
  const isWindows = process.platform === "win32";
@@ -120,8 +320,20 @@ async function startInteractiveMode(socketPath) {
120
320
  bannerShown = true;
121
321
  }
122
322
  // Handle PTY exit
123
- session.onExit((code) => {
323
+ session.onExit(async (code) => {
324
+ // Finalize recordings and get results
325
+ const recordings = await manager.finalizeRecordings(code);
124
326
  console.log(`\n[terminal-mcp] Shell exited with code ${code}`);
327
+ // Show recording info if any were saved
328
+ const savedRecordings = recordings.filter(r => r.saved);
329
+ if (savedRecordings.length > 0) {
330
+ console.log('\nRecordings saved:');
331
+ for (const rec of savedRecordings) {
332
+ console.log(` ${rec.path}`);
333
+ }
334
+ console.log('\nPlay with: asciinema play <file>');
335
+ console.log('Install: pip install asciinema or brew install asciinema');
336
+ }
125
337
  cleanup();
126
338
  process.exit(code);
127
339
  });
@@ -142,7 +354,7 @@ async function startInteractiveMode(socketPath) {
142
354
  });
143
355
  // Start tool proxy socket server
144
356
  const socketServer = createToolProxyServer(socketPath, manager);
145
- // Cleanup function
357
+ // Cleanup function (sync version for exit handler)
146
358
  function cleanup() {
147
359
  manager.dispose();
148
360
  socketServer.close();
@@ -153,14 +365,24 @@ async function startInteractiveMode(socketPath) {
153
365
  // Ignore
154
366
  }
155
367
  }
368
+ // Async cleanup that also cleans up sandbox resources
369
+ async function cleanupAsync() {
370
+ await manager.disposeAsync();
371
+ socketServer.close();
372
+ try {
373
+ fs.unlinkSync(socketPath);
374
+ }
375
+ catch {
376
+ // Ignore
377
+ }
378
+ }
156
379
  // Handle signals
157
380
  process.on("SIGINT", () => {
158
381
  // Pass Ctrl+C to the shell instead of exiting
159
382
  session.write("\x03");
160
383
  });
161
384
  process.on("SIGTERM", () => {
162
- cleanup();
163
- process.exit(0);
385
+ cleanupAsync().then(() => process.exit(0));
164
386
  });
165
387
  process.on("exit", () => {
166
388
  cleanup();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { Recorder } from "./recorder.js";
2
+ export { RecordingManager } from "./manager.js";
3
+ export type { RecordingMode, RecordingFormat, RecordingOptions, AsciicastHeader, AsciicastEvent, AsciicastOutputEvent, AsciicastResizeEvent, RecordingMetadata, StopReason, } from "./types.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recording/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,YAAY,EACV,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,GACX,MAAM,YAAY,CAAC"}