@ellery/terminal-mcp 0.2.1 → 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 (75) hide show
  1. package/README.md +151 -5
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +2 -61
  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/terminal/index.d.ts +1 -0
  40. package/dist/terminal/index.d.ts.map +1 -1
  41. package/dist/terminal/manager.d.ts +58 -3
  42. package/dist/terminal/manager.d.ts.map +1 -1
  43. package/dist/terminal/manager.js +118 -3
  44. package/dist/terminal/manager.js.map +1 -1
  45. package/dist/terminal/session.d.ts +21 -1
  46. package/dist/terminal/session.d.ts.map +1 -1
  47. package/dist/terminal/session.js +44 -3
  48. package/dist/terminal/session.js.map +1 -1
  49. package/dist/tools/definitions.d.ts +18 -0
  50. package/dist/tools/definitions.d.ts.map +1 -0
  51. package/dist/tools/definitions.js +110 -0
  52. package/dist/tools/definitions.js.map +1 -0
  53. package/dist/tools/index.d.ts.map +1 -1
  54. package/dist/tools/index.js +7 -1
  55. package/dist/tools/index.js.map +1 -1
  56. package/dist/tools/startRecording.d.ts +68 -0
  57. package/dist/tools/startRecording.d.ts.map +1 -0
  58. package/dist/tools/startRecording.js +111 -0
  59. package/dist/tools/startRecording.js.map +1 -0
  60. package/dist/tools/stopRecording.d.ts +31 -0
  61. package/dist/tools/stopRecording.d.ts.map +1 -0
  62. package/dist/tools/stopRecording.js +76 -0
  63. package/dist/tools/stopRecording.js.map +1 -0
  64. package/dist/transport/socket.d.ts.map +1 -1
  65. package/dist/transport/socket.js +10 -0
  66. package/dist/transport/socket.js.map +1 -1
  67. package/dist/ui/index.d.ts +1 -0
  68. package/dist/ui/index.d.ts.map +1 -1
  69. package/dist/ui/index.js +17 -1
  70. package/dist/ui/index.js.map +1 -1
  71. package/dist/utils/platform.d.ts +6 -0
  72. package/dist/utils/platform.d.ts.map +1 -1
  73. package/dist/utils/platform.js +15 -0
  74. package/dist/utils/platform.js.map +1 -1
  75. package/package.json +3 -2
@@ -0,0 +1,111 @@
1
+ import { z } from "zod";
2
+ export const startRecordingSchema = z.object({
3
+ format: z.enum(['v2']).optional().default('v2'),
4
+ mode: z.enum(['always', 'on-failure']).optional().default('always'),
5
+ outputDir: z.string().optional(),
6
+ idleTimeLimit: z.number().optional().default(2),
7
+ maxDuration: z.number().optional().default(3600),
8
+ inactivityTimeout: z.number().optional().default(600),
9
+ });
10
+ export const startRecordingTool = {
11
+ name: "startRecording",
12
+ description: "Start recording terminal output to an asciicast v2 file. Returns the recording ID and path where the file will be saved. Only one recording can be active at a time.",
13
+ inputSchema: {
14
+ type: "object",
15
+ properties: {
16
+ format: {
17
+ type: "string",
18
+ enum: ["v2"],
19
+ description: "Recording format (default: v2, asciicast v2 format)",
20
+ },
21
+ mode: {
22
+ type: "string",
23
+ enum: ["always", "on-failure"],
24
+ description: "Recording mode: always saves the recording, on-failure only saves if session exits with non-zero code (default: always)",
25
+ },
26
+ outputDir: {
27
+ type: "string",
28
+ description: "Directory to save the recording (default: ~/.local/state/terminal-mcp/recordings, or TERMINAL_MCP_RECORD_DIR env var)",
29
+ },
30
+ idleTimeLimit: {
31
+ type: "number",
32
+ description: "Max seconds between events in the recording (default: 2). Caps idle time to prevent long pauses during playback.",
33
+ },
34
+ maxDuration: {
35
+ type: "number",
36
+ description: "Max recording duration in seconds (default: 3600 = 60 minutes). Recording will auto-stop when this limit is reached.",
37
+ },
38
+ inactivityTimeout: {
39
+ type: "number",
40
+ description: "Stop recording after N seconds of no terminal output (default: 600 = 10 minutes). Resets on each output event.",
41
+ },
42
+ },
43
+ required: [],
44
+ },
45
+ };
46
+ export function handleStartRecording(manager, args) {
47
+ const parsed = startRecordingSchema.parse(args ?? {});
48
+ const recordingManager = manager.getRecordingManager();
49
+ // Check if there's already an active recording
50
+ const activeRecordings = recordingManager.getActiveRecordings();
51
+ if (activeRecordings.length > 0) {
52
+ const existing = activeRecordings[0];
53
+ return {
54
+ content: [
55
+ {
56
+ type: "text",
57
+ text: JSON.stringify({
58
+ error: "A recording is already in progress",
59
+ activeRecordingId: existing.id,
60
+ activePath: existing.getFinalPath(),
61
+ }, null, 2),
62
+ },
63
+ ],
64
+ isError: true,
65
+ };
66
+ }
67
+ const recorder = recordingManager.createRecording({
68
+ format: parsed.format,
69
+ mode: parsed.mode,
70
+ outputDir: parsed.outputDir ?? recordingManager.getDefaultOutputDir(),
71
+ idleTimeLimit: parsed.idleTimeLimit,
72
+ maxDuration: parsed.maxDuration,
73
+ inactivityTimeout: parsed.inactivityTimeout,
74
+ });
75
+ // Get current dimensions and start recording
76
+ const dimensions = manager.getDimensions();
77
+ recorder.start(dimensions.cols, dimensions.rows, {
78
+ TERM: 'xterm-256color',
79
+ });
80
+ // Build timeout message
81
+ const timeoutParts = [];
82
+ if (parsed.maxDuration > 0) {
83
+ const mins = Math.floor(parsed.maxDuration / 60);
84
+ timeoutParts.push(`${mins} minute${mins !== 1 ? 's' : ''}`);
85
+ }
86
+ if (parsed.inactivityTimeout > 0) {
87
+ const mins = Math.floor(parsed.inactivityTimeout / 60);
88
+ timeoutParts.push(`${mins} minute${mins !== 1 ? 's' : ''} of inactivity`);
89
+ }
90
+ const timeoutMessage = timeoutParts.length > 0
91
+ ? `Recording will auto-stop after ${timeoutParts.join(' or ')}`
92
+ : undefined;
93
+ const result = {
94
+ recordingId: recorder.id,
95
+ path: recorder.getFinalPath(),
96
+ format: parsed.format,
97
+ mode: parsed.mode,
98
+ maxDuration: parsed.maxDuration,
99
+ inactivityTimeout: parsed.inactivityTimeout,
100
+ message: timeoutMessage,
101
+ };
102
+ return {
103
+ content: [
104
+ {
105
+ type: "text",
106
+ text: JSON.stringify(result, null, 2),
107
+ },
108
+ ],
109
+ };
110
+ }
111
+ //# sourceMappingURL=startRecording.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startRecording.js","sourceRoot":"","sources":["../../src/tools/startRecording.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ import { TerminalManager } from "../terminal/index.js";
3
+ export declare const stopRecordingSchema: z.ZodObject<{
4
+ recordingId: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ recordingId: string;
7
+ }, {
8
+ recordingId: string;
9
+ }>;
10
+ export declare const stopRecordingTool: {
11
+ name: string;
12
+ description: string;
13
+ inputSchema: {
14
+ type: "object";
15
+ properties: {
16
+ recordingId: {
17
+ type: string;
18
+ description: string;
19
+ };
20
+ };
21
+ required: string[];
22
+ };
23
+ };
24
+ export declare function handleStopRecording(manager: TerminalManager, args: unknown): Promise<{
25
+ content: Array<{
26
+ type: "text";
27
+ text: string;
28
+ }>;
29
+ isError?: boolean;
30
+ }>;
31
+ //# sourceMappingURL=stopRecording.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stopRecording.d.ts","sourceRoot":"","sources":["../../src/tools/stopRecording.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,eAAO,MAAM,mBAAmB;;;;;;EAE9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;CAa7B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA+DhF"}
@@ -0,0 +1,76 @@
1
+ import { z } from "zod";
2
+ export const stopRecordingSchema = z.object({
3
+ recordingId: z.string(),
4
+ });
5
+ export const stopRecordingTool = {
6
+ name: "stopRecording",
7
+ description: "Stop a recording and finalize the asciicast file. Returns metadata about the saved recording including the file path and duration.",
8
+ inputSchema: {
9
+ type: "object",
10
+ properties: {
11
+ recordingId: {
12
+ type: "string",
13
+ description: "The recording ID returned by startRecording",
14
+ },
15
+ },
16
+ required: ["recordingId"],
17
+ },
18
+ };
19
+ export async function handleStopRecording(manager, args) {
20
+ const parsed = stopRecordingSchema.parse(args);
21
+ const recordingManager = manager.getRecordingManager();
22
+ const recorder = recordingManager.getRecording(parsed.recordingId);
23
+ if (!recorder) {
24
+ return {
25
+ content: [
26
+ {
27
+ type: "text",
28
+ text: `Error: Recording not found: ${parsed.recordingId}`,
29
+ },
30
+ ],
31
+ isError: true,
32
+ };
33
+ }
34
+ if (!recorder.isActive()) {
35
+ return {
36
+ content: [
37
+ {
38
+ type: "text",
39
+ text: `Error: Recording already finalized: ${parsed.recordingId}`,
40
+ },
41
+ ],
42
+ isError: true,
43
+ };
44
+ }
45
+ // Finalize with exit code 0 (explicit stop means success)
46
+ const metadata = await recordingManager.finalizeRecording(parsed.recordingId, 0, 'explicit');
47
+ if (!metadata) {
48
+ return {
49
+ content: [
50
+ {
51
+ type: "text",
52
+ text: `Error: Failed to finalize recording: ${parsed.recordingId}`,
53
+ },
54
+ ],
55
+ isError: true,
56
+ };
57
+ }
58
+ const result = {
59
+ recordingId: metadata.id,
60
+ path: metadata.path,
61
+ durationMs: metadata.durationMs,
62
+ bytesWritten: metadata.bytesWritten,
63
+ saved: metadata.saved,
64
+ mode: metadata.mode,
65
+ stopReason: metadata.stopReason,
66
+ };
67
+ return {
68
+ content: [
69
+ {
70
+ type: "text",
71
+ text: JSON.stringify(result, null, 2),
72
+ },
73
+ ],
74
+ };
75
+ }
76
+ //# sourceMappingURL=stopRecording.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stopRecording.js","sourceRoot":"","sources":["../../src/tools/stopRecording.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,oIAAoI;IACjJ,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6CAA6C;aAC3D;SACF;QACD,QAAQ,EAAE,CAAC,aAAa,CAAC;KAC1B;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAwB,EACxB,IAAa;IAEb,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE/C,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IACvD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAEnE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,+BAA+B,MAAM,CAAC,WAAW,EAAE;iBAC1D;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,uCAAuC,MAAM,CAAC,WAAW,EAAE;iBAClE;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IAE7F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,wCAAwC,MAAM,CAAC,WAAW,EAAE;iBACnE;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG;QACb,WAAW,EAAE,QAAQ,CAAC,EAAE;QACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC;IAEF,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/transport/socket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAqBvD;;;GAGG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAM;IAEpB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;gBAET,MAAM,EAAE,MAAM;IAiB1B,OAAO,CAAC,aAAa;IAgBf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAYnD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,GACjD,SAAS,CAgBX;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,GACvB,SAAS,CA4CX"}
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/transport/socket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAuBvD;;;GAGG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAM;IAEpB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;gBAET,MAAM,EAAE,MAAM;IAiB1B,OAAO,CAAC,aAAa;IAgBf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAYnD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,GACjD,SAAS,CAgBX;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,GACvB,SAAS,CA4CX"}
@@ -6,6 +6,8 @@ import { handleType } from "../tools/type.js";
6
6
  import { handleSendKey } from "../tools/sendKey.js";
7
7
  import { handleGetContent } from "../tools/getContent.js";
8
8
  import { handleScreenshot } from "../tools/screenshot.js";
9
+ import { handleStartRecording } from "../tools/startRecording.js";
10
+ import { handleStopRecording } from "../tools/stopRecording.js";
9
11
  /**
10
12
  * Transport that communicates over a Unix socket connection
11
13
  * (Used for full MCP protocol when needed)
@@ -149,6 +151,14 @@ async function handleToolRequest(manager, request) {
149
151
  stats.recordToolCall("takeScreenshot");
150
152
  result = handleScreenshot(manager, params);
151
153
  break;
154
+ case "startRecording":
155
+ stats.recordToolCall("startRecording");
156
+ result = handleStartRecording(manager, params);
157
+ break;
158
+ case "stopRecording":
159
+ stats.recordToolCall("stopRecording");
160
+ result = await handleStopRecording(manager, params);
161
+ break;
152
162
  default:
153
163
  return {
154
164
  id,
@@ -1 +1 @@
1
- {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/transport/socket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/transport/socket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,MAAM,IAAI,SAAS,EAAU,MAAM,KAAK,CAAC;AAIlD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAchE;;;GAGG;AACH,MAAM,OAAO,eAAe;IAClB,MAAM,CAAS;IACf,MAAM,GAAG,EAAE,CAAC;IAEpB,SAAS,CAAqC;IAC9C,OAAO,CAA0B;IACjC,OAAO,CAAc;IAErB,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAChC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC3B,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;oBACnD,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;gBAC5B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,8BAA8B;IAChC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAuB;QAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChC,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAkB,EAClB,YAAkD;IAElD,2CAA2C;IAC3C,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;QACtC,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAC9C,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE1B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAAkB,EAClB,OAAwB;IAExB,2CAA2C;IAC3C,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;QACtC,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC/B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;oBAChB,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAkB,CAAC;wBAClD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;wBAC3D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;oBAChD,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACzD,MAAM,CAAC,KAAK,CACV,IAAI,CAAC,SAAS,CAAC;4BACb,EAAE,EAAE,CAAC;4BACL,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,YAAY,EAAE,EAAE;yBACnD,CAAC,GAAG,IAAI,CACV,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,8BAA8B;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE1B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAC9B,OAAwB,EACxB,OAAsB;IAEtB,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,IAAI,CAAC;QACH,IAAI,MAAe,CAAC;QAEpB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC7B,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACrC,MAAM;YAER,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gBAChC,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACxC,MAAM;YAER,KAAK,YAAY;gBACf,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;gBACnC,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC3C,MAAM;YAER,KAAK,gBAAgB;gBACnB,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;gBACvC,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC3C,MAAM;YAER,KAAK,gBAAgB;gBACnB,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;gBACvC,MAAM,GAAG,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC/C,MAAM;YAER,KAAK,eAAe;gBAClB,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;gBACtC,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACpD,MAAM;YAER;gBACE,OAAO;oBACL,EAAE;oBACF,KAAK,EAAE,EAAE,OAAO,EAAE,mBAAmB,MAAM,EAAE,EAAE;iBAChD,CAAC;QACN,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,EAAE;YACF,KAAK,EAAE,EAAE,OAAO,EAAE;SACnB,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -3,6 +3,7 @@ export interface BannerOptions {
3
3
  cols: number;
4
4
  rows: number;
5
5
  shell: string;
6
+ sandboxEnabled?: boolean;
6
7
  }
7
8
  /**
8
9
  * Generate the startup banner string
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA4CxD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA2DxD"}
package/dist/ui/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { VERSION } from "../utils/version.js";
2
+ import { getToolNames } from "../tools/definitions.js";
2
3
  // Custom color #31cae1 as 24-bit ANSI escape (RGB: 49, 202, 225)
3
4
  const BRAND_COLOR = "\x1b[38;2;49;202;225m";
4
5
  // Pink accent color for MCP (RGB: 255, 105, 180 - hot pink)
@@ -7,6 +8,8 @@ const PINK_COLOR = "\x1b[38;2;255;105;180m";
7
8
  const YELLOW_COLOR = "\x1b[38;2;255;255;0m";
8
9
  // White for text content
9
10
  const WHITE_COLOR = "\x1b[38;2;255;255;255m";
11
+ // Green for sandbox indicator (RGB: 50, 205, 50 - lime green)
12
+ const GREEN_COLOR = "\x1b[38;2;50;205;50m";
10
13
  const RESET = "\x1b[0m";
11
14
  // ANSI Shadow style figlet logo for "TERMINAL" + "MCP" stacked
12
15
  const LOGO = `
@@ -40,6 +43,13 @@ export function getBanner(options) {
40
43
  const color = index < 6 ? BRAND_COLOR : PINK_COLOR;
41
44
  return YELLOW_COLOR + "│ " + color + line + " ".repeat(rightPad) + " " + YELLOW_COLOR + "│";
42
45
  });
46
+ // Generate tool lines - first line has "Tools:" label, rest are indented
47
+ const toolNames = getToolNames();
48
+ const toolLines = toolNames.map((tool, index) => {
49
+ const prefix = index === 0 ? " Tools: " : " ";
50
+ const bullet = "• ";
51
+ return `${YELLOW_COLOR}│${WHITE_COLOR}${prefix}${bullet}${padRight(tool, boxWidth - prefix.length - 3)}${YELLOW_COLOR}│`;
52
+ });
43
53
  const mcpConfig = `{
44
54
  "mcpServers": {
45
55
  "terminal": {
@@ -47,13 +57,19 @@ export function getBanner(options) {
47
57
  }
48
58
  }
49
59
  }`;
60
+ // Build sandbox status line if enabled
61
+ const sandboxLine = options.sandboxEnabled
62
+ ? `${YELLOW_COLOR}│${WHITE_COLOR} Sandbox: ${GREEN_COLOR}ENABLED${WHITE_COLOR} (restricted filesystem/network)${" ".repeat(boxWidth - 47)}${YELLOW_COLOR}│\n`
63
+ : "";
50
64
  return `
51
65
  ${YELLOW_COLOR}╭${horizontalLine}╮
52
66
  ${centeredLogo.join("\n")}
53
67
  ${YELLOW_COLOR}├${horizontalLine}┤
54
68
  ${YELLOW_COLOR}│${WHITE_COLOR} Socket: ${padRight(options.socketPath, boxWidth - 11)}${YELLOW_COLOR}│
55
69
  ${YELLOW_COLOR}│${WHITE_COLOR} Terminal: ${padRight(`${options.cols}x${options.rows}`, 12)}Shell: ${padRight(options.shell, boxWidth - 30)}${YELLOW_COLOR}│
56
- ${YELLOW_COLOR}│${WHITE_COLOR} Tools: type, sendKey, getContent, takeScreenshot, clear${" ".repeat(boxWidth - 58)}${YELLOW_COLOR}
70
+ ${sandboxLine}${YELLOW_COLOR}├${horizontalLine}
71
+ ${toolLines.join("\n")}
72
+ ${YELLOW_COLOR}├${horizontalLine}┤
57
73
  ${YELLOW_COLOR}│${WHITE_COLOR}${" ".repeat(boxWidth - 7)}v${VERSION} ${YELLOW_COLOR}│
58
74
  ${YELLOW_COLOR}╰${horizontalLine}╯${RESET}
59
75
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Get the default recording directory.
3
+ * Uses XDG_STATE_HOME or falls back to ~/.local/state/terminal-mcp/recordings.
4
+ * Can be overridden with TERMINAL_MCP_RECORD_DIR environment variable.
5
+ */
6
+ export declare function getDefaultRecordDir(): string;
1
7
  /**
2
8
  * Get the default IPC path for cross-platform communication.
3
9
  * Uses named pipes on Windows, Unix sockets elsewhere.
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAK7C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAKxC"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAW5C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAK7C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAKxC"}
@@ -1,5 +1,20 @@
1
1
  import * as path from "path";
2
2
  import * as os from "os";
3
+ /**
4
+ * Get the default recording directory.
5
+ * Uses XDG_STATE_HOME or falls back to ~/.local/state/terminal-mcp/recordings.
6
+ * Can be overridden with TERMINAL_MCP_RECORD_DIR environment variable.
7
+ */
8
+ export function getDefaultRecordDir() {
9
+ // Check env var override first
10
+ if (process.env.TERMINAL_MCP_RECORD_DIR) {
11
+ return process.env.TERMINAL_MCP_RECORD_DIR;
12
+ }
13
+ // Use XDG_STATE_HOME or fallback
14
+ const stateHome = process.env.XDG_STATE_HOME
15
+ || path.join(os.homedir(), '.local', 'state');
16
+ return path.join(stateHome, 'terminal-mcp', 'recordings');
17
+ }
3
18
  /**
4
19
  * Get the default IPC path for cross-platform communication.
5
20
  * Uses named pipes on Windows, Unix sockets elsewhere.
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,2BAA2B,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IAC1C,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,+BAA+B;IAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAC7C,CAAC;IAED,iCAAiC;IACjC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc;WACvC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEhD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,2BAA2B,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IAC1C,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC;AAC1C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ellery/terminal-mcp",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "A headless terminal emulator exposed via MCP for AI assistants",
5
5
  "author": "Ellery Familia",
6
6
  "repository": {
@@ -22,9 +22,10 @@
22
22
  "prepare": "npm run build"
23
23
  },
24
24
  "dependencies": {
25
+ "@anthropic-ai/sandbox-runtime": "^0.0.32",
25
26
  "@modelcontextprotocol/sdk": "^1.0.0",
26
27
  "@xterm/headless": "^5.3.0",
27
- "@homebridge/node-pty-prebuilt-multiarch": "^0.13.1",
28
+ "node-pty": "^1.2.0-beta.8",
28
29
  "zod": "^3.23.0"
29
30
  },
30
31
  "devDependencies": {