@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.
- package/README.md +151 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +2 -61
- package/dist/client.js.map +1 -1
- package/dist/index.js +235 -13
- package/dist/index.js.map +1 -1
- package/dist/recording/index.d.ts +4 -0
- package/dist/recording/index.d.ts.map +1 -0
- package/dist/recording/index.js +3 -0
- package/dist/recording/index.js.map +1 -0
- package/dist/recording/manager.d.ts +62 -0
- package/dist/recording/manager.d.ts.map +1 -0
- package/dist/recording/manager.js +123 -0
- package/dist/recording/manager.js.map +1 -0
- package/dist/recording/recorder.d.ts +95 -0
- package/dist/recording/recorder.d.ts.map +1 -0
- package/dist/recording/recorder.js +296 -0
- package/dist/recording/recorder.js.map +1 -0
- package/dist/recording/types.d.ts +65 -0
- package/dist/recording/types.d.ts.map +1 -0
- package/dist/recording/types.js +2 -0
- package/dist/recording/types.js.map +1 -0
- package/dist/sandbox/config.d.ts +46 -0
- package/dist/sandbox/config.d.ts.map +1 -0
- package/dist/sandbox/config.js +144 -0
- package/dist/sandbox/config.js.map +1 -0
- package/dist/sandbox/controller.d.ts +72 -0
- package/dist/sandbox/controller.d.ts.map +1 -0
- package/dist/sandbox/controller.js +208 -0
- package/dist/sandbox/controller.js.map +1 -0
- package/dist/sandbox/index.d.ts +6 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +4 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/sandbox/prompt.d.ts +10 -0
- package/dist/sandbox/prompt.d.ts.map +1 -0
- package/dist/sandbox/prompt.js +434 -0
- package/dist/sandbox/prompt.js.map +1 -0
- package/dist/terminal/index.d.ts +1 -0
- package/dist/terminal/index.d.ts.map +1 -1
- package/dist/terminal/manager.d.ts +58 -3
- package/dist/terminal/manager.d.ts.map +1 -1
- package/dist/terminal/manager.js +118 -3
- package/dist/terminal/manager.js.map +1 -1
- package/dist/terminal/session.d.ts +21 -1
- package/dist/terminal/session.d.ts.map +1 -1
- package/dist/terminal/session.js +44 -3
- package/dist/terminal/session.js.map +1 -1
- package/dist/tools/definitions.d.ts +18 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +110 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +7 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/startRecording.d.ts +68 -0
- package/dist/tools/startRecording.d.ts.map +1 -0
- package/dist/tools/startRecording.js +111 -0
- package/dist/tools/startRecording.js.map +1 -0
- package/dist/tools/stopRecording.d.ts +31 -0
- package/dist/tools/stopRecording.d.ts.map +1 -0
- package/dist/tools/stopRecording.js +76 -0
- package/dist/tools/stopRecording.js.map +1 -0
- package/dist/transport/socket.d.ts.map +1 -1
- package/dist/transport/socket.js +10 -0
- package/dist/transport/socket.js.map +1 -1
- package/dist/ui/index.d.ts +1 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +17 -1
- package/dist/ui/index.js.map +1 -1
- package/dist/utils/platform.d.ts +6 -0
- package/dist/utils/platform.d.ts.map +1 -1
- package/dist/utils/platform.js +15 -0
- package/dist/utils/platform.js.map +1 -1
- package/package.json +3 -2
package/dist/terminal/manager.js
CHANGED
|
@@ -1,23 +1,123 @@
|
|
|
1
1
|
import { TerminalSession } from "./session.js";
|
|
2
|
+
import { RecordingManager } from "../recording/index.js";
|
|
3
|
+
import { getDefaultRecordDir } from "../utils/platform.js";
|
|
2
4
|
/**
|
|
3
5
|
* Manages the terminal session lifecycle
|
|
4
6
|
* Currently supports a single session for simplicity
|
|
5
7
|
*/
|
|
6
8
|
export class TerminalManager {
|
|
7
9
|
session = null;
|
|
10
|
+
sessionPromise = null;
|
|
8
11
|
options;
|
|
12
|
+
sandboxController;
|
|
13
|
+
recordingManager;
|
|
14
|
+
autoRecordingId = null;
|
|
9
15
|
constructor(options = {}) {
|
|
10
16
|
this.options = options;
|
|
17
|
+
this.sandboxController = options.sandboxController;
|
|
18
|
+
this.recordingManager = new RecordingManager({
|
|
19
|
+
mode: options.record ?? 'off',
|
|
20
|
+
outputDir: options.recordDir ?? getDefaultRecordDir(),
|
|
21
|
+
format: options.recordFormat ?? 'v2',
|
|
22
|
+
idleTimeLimit: options.idleTimeLimit ?? 2,
|
|
23
|
+
maxDuration: options.maxDuration ?? 3600,
|
|
24
|
+
inactivityTimeout: options.inactivityTimeout ?? 600,
|
|
25
|
+
});
|
|
11
26
|
}
|
|
12
27
|
/**
|
|
13
|
-
* Get or create the terminal session
|
|
28
|
+
* Get or create the terminal session (async)
|
|
29
|
+
*/
|
|
30
|
+
async getSessionAsync() {
|
|
31
|
+
if (this.session && this.session.isActive()) {
|
|
32
|
+
return this.session;
|
|
33
|
+
}
|
|
34
|
+
// If there's already a creation in progress, wait for it
|
|
35
|
+
if (this.sessionPromise) {
|
|
36
|
+
return this.sessionPromise;
|
|
37
|
+
}
|
|
38
|
+
// Create new session
|
|
39
|
+
this.sessionPromise = TerminalSession.create({
|
|
40
|
+
...this.options,
|
|
41
|
+
sandboxController: this.sandboxController,
|
|
42
|
+
});
|
|
43
|
+
try {
|
|
44
|
+
this.session = await this.sessionPromise;
|
|
45
|
+
return this.session;
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
this.sessionPromise = null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get the current session if it exists and is active
|
|
53
|
+
* Returns null if no session exists yet
|
|
54
|
+
*/
|
|
55
|
+
getCurrentSession() {
|
|
56
|
+
if (this.session && this.session.isActive()) {
|
|
57
|
+
return this.session;
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @deprecated Use getSessionAsync() instead. This method exists for backwards compatibility
|
|
63
|
+
* but will throw if the session hasn't been created yet.
|
|
14
64
|
*/
|
|
15
65
|
getSession() {
|
|
16
66
|
if (!this.session || !this.session.isActive()) {
|
|
17
|
-
|
|
67
|
+
throw new Error("Session not initialized. Use getSessionAsync() or call initSession() first.");
|
|
18
68
|
}
|
|
19
69
|
return this.session;
|
|
20
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Initialize the session eagerly
|
|
73
|
+
* Call this at startup to create the session before it's needed
|
|
74
|
+
*/
|
|
75
|
+
async initSession() {
|
|
76
|
+
const session = await this.getSessionAsync();
|
|
77
|
+
// Wire up recording hooks
|
|
78
|
+
session.onData((data) => this.recordingManager.recordOutputToAll(data));
|
|
79
|
+
session.onResize((cols, rows) => this.recordingManager.recordResizeToAll(cols, rows));
|
|
80
|
+
// Start auto-recording if CLI mode !== 'off'
|
|
81
|
+
if (this.options.record && this.options.record !== 'off') {
|
|
82
|
+
this.startAutoRecording();
|
|
83
|
+
}
|
|
84
|
+
return session;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Start auto-recording based on CLI options
|
|
88
|
+
*/
|
|
89
|
+
startAutoRecording() {
|
|
90
|
+
if (this.autoRecordingId) {
|
|
91
|
+
return; // Already recording
|
|
92
|
+
}
|
|
93
|
+
const recorder = this.recordingManager.createRecording({
|
|
94
|
+
mode: this.options.record,
|
|
95
|
+
outputDir: this.options.recordDir ?? getDefaultRecordDir(),
|
|
96
|
+
format: this.options.recordFormat ?? 'v2',
|
|
97
|
+
idleTimeLimit: this.options.idleTimeLimit ?? 2,
|
|
98
|
+
maxDuration: this.options.maxDuration ?? 3600,
|
|
99
|
+
inactivityTimeout: this.options.inactivityTimeout ?? 600,
|
|
100
|
+
});
|
|
101
|
+
const dimensions = this.session?.getDimensions() ?? { cols: 120, rows: 40 };
|
|
102
|
+
recorder.start(dimensions.cols, dimensions.rows, {
|
|
103
|
+
SHELL: this.options.shell ?? process.env.SHELL,
|
|
104
|
+
TERM: 'xterm-256color',
|
|
105
|
+
});
|
|
106
|
+
this.autoRecordingId = recorder.id;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get the RecordingManager instance
|
|
110
|
+
*/
|
|
111
|
+
getRecordingManager() {
|
|
112
|
+
return this.recordingManager;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Finalize all recordings and return their metadata
|
|
116
|
+
* Called by the caller when the session exits
|
|
117
|
+
*/
|
|
118
|
+
async finalizeRecordings(exitCode) {
|
|
119
|
+
return this.recordingManager.finalizeAll(exitCode);
|
|
120
|
+
}
|
|
21
121
|
/**
|
|
22
122
|
* Check if a session exists and is active
|
|
23
123
|
*/
|
|
@@ -67,7 +167,7 @@ export class TerminalManager {
|
|
|
67
167
|
return this.getSession().getDimensions();
|
|
68
168
|
}
|
|
69
169
|
/**
|
|
70
|
-
* Dispose of the current session
|
|
170
|
+
* Dispose of the current session and cleanup sandbox
|
|
71
171
|
*/
|
|
72
172
|
dispose() {
|
|
73
173
|
if (this.session) {
|
|
@@ -75,5 +175,20 @@ export class TerminalManager {
|
|
|
75
175
|
this.session = null;
|
|
76
176
|
}
|
|
77
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* Async dispose that also cleans up sandbox resources
|
|
180
|
+
*/
|
|
181
|
+
async disposeAsync() {
|
|
182
|
+
this.dispose();
|
|
183
|
+
if (this.sandboxController) {
|
|
184
|
+
await this.sandboxController.cleanup();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get the sandbox controller if one is configured
|
|
189
|
+
*/
|
|
190
|
+
getSandboxController() {
|
|
191
|
+
return this.sandboxController;
|
|
192
|
+
}
|
|
78
193
|
}
|
|
79
194
|
//# sourceMappingURL=manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/terminal/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA4C,MAAM,cAAc,CAAC;AAEzF;;;GAGG;AACH,MAAM,OAAO,eAAe;IAClB,OAAO,GAA2B,IAAI,CAAC;IACvC,OAAO,CAAyB;
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/terminal/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SandboxController } from "../sandbox/index.js";
|
|
1
2
|
export interface TerminalSessionOptions {
|
|
2
3
|
cols?: number;
|
|
3
4
|
rows?: number;
|
|
@@ -5,6 +6,7 @@ export interface TerminalSessionOptions {
|
|
|
5
6
|
cwd?: string;
|
|
6
7
|
env?: Record<string, string>;
|
|
7
8
|
startupBanner?: string;
|
|
9
|
+
sandboxController?: SandboxController;
|
|
8
10
|
}
|
|
9
11
|
export interface ScreenshotResult {
|
|
10
12
|
content: string;
|
|
@@ -27,14 +29,28 @@ export declare class TerminalSession {
|
|
|
27
29
|
private disposed;
|
|
28
30
|
private dataListeners;
|
|
29
31
|
private exitListeners;
|
|
32
|
+
private resizeListeners;
|
|
30
33
|
private rcFile;
|
|
31
34
|
private zdotdir;
|
|
35
|
+
/**
|
|
36
|
+
* Private constructor - use TerminalSession.create() instead
|
|
37
|
+
*/
|
|
38
|
+
private constructor();
|
|
39
|
+
/**
|
|
40
|
+
* Factory method to create a TerminalSession
|
|
41
|
+
* Use this instead of the constructor to support async sandbox initialization
|
|
42
|
+
*/
|
|
43
|
+
static create(options?: TerminalSessionOptions): Promise<TerminalSession>;
|
|
32
44
|
/**
|
|
33
45
|
* Set up shell-specific prompt customization
|
|
34
46
|
* Returns args to pass to shell and env modifications
|
|
35
47
|
*/
|
|
36
48
|
private setupShellPrompt;
|
|
37
|
-
|
|
49
|
+
/**
|
|
50
|
+
* Initialize the terminal session
|
|
51
|
+
* This is called by the create() factory method
|
|
52
|
+
*/
|
|
53
|
+
private initialize;
|
|
38
54
|
/**
|
|
39
55
|
* Subscribe to PTY output data
|
|
40
56
|
*/
|
|
@@ -43,6 +59,10 @@ export declare class TerminalSession {
|
|
|
43
59
|
* Subscribe to PTY exit
|
|
44
60
|
*/
|
|
45
61
|
onExit(listener: (code: number) => void): void;
|
|
62
|
+
/**
|
|
63
|
+
* Subscribe to terminal resize events
|
|
64
|
+
*/
|
|
65
|
+
onResize(listener: (cols: number, rows: number) => void): void;
|
|
46
66
|
/**
|
|
47
67
|
* Write data to the terminal (simulates typing)
|
|
48
68
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/terminal/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/terminal/session.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAK7D,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE;QACN,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;IACF,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,eAAe,CAAmD;IAE1E,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAAuB;IAEtC;;OAEG;IACH,OAAO;IAEP;;;OAGG;WACU,MAAM,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,eAAe,CAAC;IAMnF;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA6ExB;;;OAGG;YACW,UAAU;IA6DxB;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI9C;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI9C;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI9D;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOzB;;OAEG;IACH,UAAU,IAAI,MAAM;IAwBpB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAmB3B;;OAEG;IACH,cAAc,IAAI,gBAAgB;IAoBlC;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAaxC;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAO/C;;OAEG;IACH,OAAO,IAAI,IAAI;CAuBhB"}
|
package/dist/terminal/session.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as pty from "
|
|
1
|
+
import * as pty from "node-pty";
|
|
2
2
|
import * as fs from "fs";
|
|
3
3
|
import * as os from "os";
|
|
4
4
|
import * as path from "path";
|
|
@@ -17,8 +17,22 @@ export class TerminalSession {
|
|
|
17
17
|
disposed = false;
|
|
18
18
|
dataListeners = [];
|
|
19
19
|
exitListeners = [];
|
|
20
|
+
resizeListeners = [];
|
|
20
21
|
rcFile = null;
|
|
21
22
|
zdotdir = null;
|
|
23
|
+
/**
|
|
24
|
+
* Private constructor - use TerminalSession.create() instead
|
|
25
|
+
*/
|
|
26
|
+
constructor() { }
|
|
27
|
+
/**
|
|
28
|
+
* Factory method to create a TerminalSession
|
|
29
|
+
* Use this instead of the constructor to support async sandbox initialization
|
|
30
|
+
*/
|
|
31
|
+
static async create(options = {}) {
|
|
32
|
+
const session = new TerminalSession();
|
|
33
|
+
await session.initialize(options);
|
|
34
|
+
return session;
|
|
35
|
+
}
|
|
22
36
|
/**
|
|
23
37
|
* Set up shell-specific prompt customization
|
|
24
38
|
* Returns args to pass to shell and env modifications
|
|
@@ -86,7 +100,11 @@ ${bannerCmd}
|
|
|
86
100
|
env.PS1 = `${PROMPT_INDICATOR} $ `;
|
|
87
101
|
return { args: [], env };
|
|
88
102
|
}
|
|
89
|
-
|
|
103
|
+
/**
|
|
104
|
+
* Initialize the terminal session
|
|
105
|
+
* This is called by the create() factory method
|
|
106
|
+
*/
|
|
107
|
+
async initialize(options) {
|
|
90
108
|
const cols = options.cols ?? 120;
|
|
91
109
|
const rows = options.rows ?? 40;
|
|
92
110
|
const shell = options.shell ?? getDefaultShell();
|
|
@@ -100,8 +118,21 @@ ${bannerCmd}
|
|
|
100
118
|
// Determine shell type and set up custom prompt
|
|
101
119
|
const shellName = path.basename(shell);
|
|
102
120
|
const { args, env } = this.setupShellPrompt(shellName, options.env, options.startupBanner);
|
|
121
|
+
// Determine spawn command - may be wrapped by sandbox
|
|
122
|
+
let spawnCmd = shell;
|
|
123
|
+
let spawnArgs = args;
|
|
124
|
+
if (options.sandboxController?.isActive()) {
|
|
125
|
+
const wrapped = await options.sandboxController.wrapShellCommand(shell, args);
|
|
126
|
+
spawnCmd = wrapped.cmd;
|
|
127
|
+
spawnArgs = wrapped.args;
|
|
128
|
+
if (process.env.DEBUG_SANDBOX) {
|
|
129
|
+
console.error("[sandbox-debug] Spawn command:", spawnCmd);
|
|
130
|
+
console.error("[sandbox-debug] Spawn args:", spawnArgs.join(" "));
|
|
131
|
+
console.error("[sandbox-debug] CWD:", options.cwd ?? process.cwd());
|
|
132
|
+
}
|
|
133
|
+
}
|
|
103
134
|
// Spawn PTY process
|
|
104
|
-
this.ptyProcess = pty.spawn(
|
|
135
|
+
this.ptyProcess = pty.spawn(spawnCmd, spawnArgs, {
|
|
105
136
|
name: "xterm-256color",
|
|
106
137
|
cols,
|
|
107
138
|
rows,
|
|
@@ -137,6 +168,12 @@ ${bannerCmd}
|
|
|
137
168
|
onExit(listener) {
|
|
138
169
|
this.exitListeners.push(listener);
|
|
139
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Subscribe to terminal resize events
|
|
173
|
+
*/
|
|
174
|
+
onResize(listener) {
|
|
175
|
+
this.resizeListeners.push(listener);
|
|
176
|
+
}
|
|
140
177
|
/**
|
|
141
178
|
* Write data to the terminal (simulates typing)
|
|
142
179
|
*/
|
|
@@ -224,6 +261,10 @@ ${bannerCmd}
|
|
|
224
261
|
}
|
|
225
262
|
this.terminal.resize(cols, rows);
|
|
226
263
|
this.ptyProcess.resize(cols, rows);
|
|
264
|
+
// Notify all resize listeners
|
|
265
|
+
for (const listener of this.resizeListeners) {
|
|
266
|
+
listener(cols, rows);
|
|
267
|
+
}
|
|
227
268
|
}
|
|
228
269
|
/**
|
|
229
270
|
* Check if the session is still active
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/terminal/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/terminal/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared tool definitions used by both MCP client and UI
|
|
3
|
+
*/
|
|
4
|
+
export interface ToolDefinition {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: "object";
|
|
9
|
+
properties: Record<string, unknown>;
|
|
10
|
+
required?: string[];
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export declare const toolDefinitions: ToolDefinition[];
|
|
14
|
+
/**
|
|
15
|
+
* Get just the tool names as an array
|
|
16
|
+
*/
|
|
17
|
+
export declare function getToolNames(): string[];
|
|
18
|
+
//# sourceMappingURL=definitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,eAAO,MAAM,eAAe,EAAE,cAAc,EA4G3C,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared tool definitions used by both MCP client and UI
|
|
3
|
+
*/
|
|
4
|
+
export const toolDefinitions = [
|
|
5
|
+
{
|
|
6
|
+
name: "type",
|
|
7
|
+
description: "Type text into the terminal",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: "object",
|
|
10
|
+
properties: {
|
|
11
|
+
text: {
|
|
12
|
+
type: "string",
|
|
13
|
+
description: "The text to type",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
required: ["text"],
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: "sendKey",
|
|
21
|
+
description: "Send a special key to the terminal (e.g., enter, tab, ctrl+c)",
|
|
22
|
+
inputSchema: {
|
|
23
|
+
type: "object",
|
|
24
|
+
properties: {
|
|
25
|
+
key: {
|
|
26
|
+
type: "string",
|
|
27
|
+
description: "The key to send (e.g., enter, tab, escape, up, down, left, right, ctrl+c, ctrl+d)",
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
required: ["key"],
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: "getContent",
|
|
35
|
+
description: "Get the current content of the terminal buffer",
|
|
36
|
+
inputSchema: {
|
|
37
|
+
type: "object",
|
|
38
|
+
properties: {
|
|
39
|
+
visibleOnly: {
|
|
40
|
+
type: "boolean",
|
|
41
|
+
description: "If true, only return visible content (default: false)",
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: "takeScreenshot",
|
|
48
|
+
description: "Take a screenshot of the terminal showing current screen and cursor position",
|
|
49
|
+
inputSchema: {
|
|
50
|
+
type: "object",
|
|
51
|
+
properties: {},
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: "startRecording",
|
|
56
|
+
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.",
|
|
57
|
+
inputSchema: {
|
|
58
|
+
type: "object",
|
|
59
|
+
properties: {
|
|
60
|
+
format: {
|
|
61
|
+
type: "string",
|
|
62
|
+
enum: ["v2"],
|
|
63
|
+
description: "Recording format (default: v2, asciicast v2 format)",
|
|
64
|
+
},
|
|
65
|
+
mode: {
|
|
66
|
+
type: "string",
|
|
67
|
+
enum: ["always", "on-failure"],
|
|
68
|
+
description: "Recording mode: always saves the recording, on-failure only saves if session exits with non-zero code (default: always)",
|
|
69
|
+
},
|
|
70
|
+
outputDir: {
|
|
71
|
+
type: "string",
|
|
72
|
+
description: "Directory to save the recording (default: ~/.local/state/terminal-mcp/recordings, or TERMINAL_MCP_RECORD_DIR env var)",
|
|
73
|
+
},
|
|
74
|
+
idleTimeLimit: {
|
|
75
|
+
type: "number",
|
|
76
|
+
description: "Max seconds between events in the recording (default: 2). Caps idle time to prevent long pauses during playback.",
|
|
77
|
+
},
|
|
78
|
+
maxDuration: {
|
|
79
|
+
type: "number",
|
|
80
|
+
description: "Max recording duration in seconds (default: 3600 = 60 minutes). Recording will auto-stop when this limit is reached.",
|
|
81
|
+
},
|
|
82
|
+
inactivityTimeout: {
|
|
83
|
+
type: "number",
|
|
84
|
+
description: "Stop recording after N seconds of no terminal output (default: 600 = 10 minutes). Resets on each output event.",
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: "stopRecording",
|
|
91
|
+
description: "Stop a recording and finalize the asciicast file. Returns metadata about the saved recording including the file path and duration.",
|
|
92
|
+
inputSchema: {
|
|
93
|
+
type: "object",
|
|
94
|
+
properties: {
|
|
95
|
+
recordingId: {
|
|
96
|
+
type: "string",
|
|
97
|
+
description: "The recording ID returned by startRecording",
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
required: ["recordingId"],
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
];
|
|
104
|
+
/**
|
|
105
|
+
* Get just the tool names as an array
|
|
106
|
+
*/
|
|
107
|
+
export function getToolNames() {
|
|
108
|
+
return toolDefinitions.map((t) => t.name);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC/C;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,6BAA6B;QAC1C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kBAAkB;iBAChC;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,+DAA+D;QAC5E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,mFAAmF;iBACtF;aACF;YACD,QAAQ,EAAE,CAAC,KAAK,CAAC;SAClB;KACF;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,gDAAgD;QAC7D,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,WAAW,EAAE;oBACX,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,uDAAuD;iBACrE;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,8EAA8E;QAChF,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,sKAAsK;QACxK,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,IAAI,CAAC;oBACZ,WAAW,EAAE,qDAAqD;iBACnE;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;oBAC9B,WAAW,EACT,yHAAyH;iBAC5H;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,uHAAuH;iBAC1H;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,kHAAkH;iBACrH;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,sHAAsH;iBACzH;gBACD,iBAAiB,EAAE;oBACjB,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,gHAAgH;iBACnH;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,oIAAoI;QACtI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6CAA6C;iBAC3D;aACF;YACD,QAAQ,EAAE,CAAC,aAAa,CAAC;SAC1B;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAWvD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CA8C5E"}
|
package/dist/tools/index.js
CHANGED
|
@@ -3,7 +3,9 @@ import { typeTool, handleType } from "./type.js";
|
|
|
3
3
|
import { sendKeyTool, handleSendKey } from "./sendKey.js";
|
|
4
4
|
import { getContentTool, handleGetContent } from "./getContent.js";
|
|
5
5
|
import { screenshotTool, handleScreenshot } from "./screenshot.js";
|
|
6
|
-
|
|
6
|
+
import { startRecordingTool, handleStartRecording } from "./startRecording.js";
|
|
7
|
+
import { stopRecordingTool, handleStopRecording } from "./stopRecording.js";
|
|
8
|
+
const tools = [typeTool, sendKeyTool, getContentTool, screenshotTool, startRecordingTool, stopRecordingTool];
|
|
7
9
|
export function registerTools(server, manager) {
|
|
8
10
|
// Register list tools handler
|
|
9
11
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
@@ -22,6 +24,10 @@ export function registerTools(server, manager) {
|
|
|
22
24
|
return handleGetContent(manager, args);
|
|
23
25
|
case "takeScreenshot":
|
|
24
26
|
return handleScreenshot(manager, args);
|
|
27
|
+
case "startRecording":
|
|
28
|
+
return handleStartRecording(manager, args);
|
|
29
|
+
case "stopRecording":
|
|
30
|
+
return await handleStopRecording(manager, args);
|
|
25
31
|
default:
|
|
26
32
|
throw new Error(`Unknown tool: ${name}`);
|
|
27
33
|
}
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE5E,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;AAE7G,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,OAAwB;IACpE,8BAA8B;IAC9B,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK;KACN,CAAC,CAAC,CAAC;IAEJ,6BAA6B;IAC7B,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAEjD,IAAI,CAAC;YACH,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,MAAM;oBACT,OAAO,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAEnC,KAAK,SAAS;oBACZ,OAAO,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAEtC,KAAK,YAAY;oBACf,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAEzC,KAAK,gBAAgB;oBACnB,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAEzC,KAAK,gBAAgB;oBACnB,OAAO,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAE7C,KAAK,eAAe;oBAClB,OAAO,MAAM,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAElD;oBACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,OAAO,EAAE;qBAC1B;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { TerminalManager } from "../terminal/index.js";
|
|
3
|
+
export declare const startRecordingSchema: z.ZodObject<{
|
|
4
|
+
format: z.ZodDefault<z.ZodOptional<z.ZodEnum<["v2"]>>>;
|
|
5
|
+
mode: z.ZodDefault<z.ZodOptional<z.ZodEnum<["always", "on-failure"]>>>;
|
|
6
|
+
outputDir: z.ZodOptional<z.ZodString>;
|
|
7
|
+
idleTimeLimit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
8
|
+
maxDuration: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
9
|
+
inactivityTimeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
format: "v2";
|
|
12
|
+
mode: "always" | "on-failure";
|
|
13
|
+
idleTimeLimit: number;
|
|
14
|
+
maxDuration: number;
|
|
15
|
+
inactivityTimeout: number;
|
|
16
|
+
outputDir?: string | undefined;
|
|
17
|
+
}, {
|
|
18
|
+
format?: "v2" | undefined;
|
|
19
|
+
mode?: "always" | "on-failure" | undefined;
|
|
20
|
+
outputDir?: string | undefined;
|
|
21
|
+
idleTimeLimit?: number | undefined;
|
|
22
|
+
maxDuration?: number | undefined;
|
|
23
|
+
inactivityTimeout?: number | undefined;
|
|
24
|
+
}>;
|
|
25
|
+
export declare const startRecordingTool: {
|
|
26
|
+
name: string;
|
|
27
|
+
description: string;
|
|
28
|
+
inputSchema: {
|
|
29
|
+
type: "object";
|
|
30
|
+
properties: {
|
|
31
|
+
format: {
|
|
32
|
+
type: string;
|
|
33
|
+
enum: string[];
|
|
34
|
+
description: string;
|
|
35
|
+
};
|
|
36
|
+
mode: {
|
|
37
|
+
type: string;
|
|
38
|
+
enum: string[];
|
|
39
|
+
description: string;
|
|
40
|
+
};
|
|
41
|
+
outputDir: {
|
|
42
|
+
type: string;
|
|
43
|
+
description: string;
|
|
44
|
+
};
|
|
45
|
+
idleTimeLimit: {
|
|
46
|
+
type: string;
|
|
47
|
+
description: string;
|
|
48
|
+
};
|
|
49
|
+
maxDuration: {
|
|
50
|
+
type: string;
|
|
51
|
+
description: string;
|
|
52
|
+
};
|
|
53
|
+
inactivityTimeout: {
|
|
54
|
+
type: string;
|
|
55
|
+
description: string;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
required: never[];
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
export declare function handleStartRecording(manager: TerminalManager, args: unknown): {
|
|
62
|
+
content: Array<{
|
|
63
|
+
type: "text";
|
|
64
|
+
text: string;
|
|
65
|
+
}>;
|
|
66
|
+
isError?: boolean;
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=startRecording.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startRecording.d.ts","sourceRoot":"","sources":["../../src/tools/startRecording.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;EAO/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC9B,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,OAAO,GACZ;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,CAuEvE"}
|