@ellery/terminal-mcp 0.2.1 → 0.3.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/README.md +301 -9
- 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 +286 -14
- package/dist/index.js.map +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +8 -0
- package/dist/prompts/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/server.d.ts +2 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +21 -0
- package/dist/server.js.map +1 -1
- package/dist/terminal/index.d.ts +1 -0
- package/dist/terminal/index.d.ts.map +1 -1
- package/dist/terminal/manager.d.ts +89 -31
- package/dist/terminal/manager.d.ts.map +1 -1
- package/dist/terminal/manager.js +313 -44
- package/dist/terminal/manager.js.map +1 -1
- package/dist/terminal/session.d.ts +34 -1
- package/dist/terminal/session.d.ts.map +1 -1
- package/dist/terminal/session.js +160 -3
- package/dist/terminal/session.js.map +1 -1
- package/dist/tools/createSession.d.ts +44 -0
- package/dist/tools/createSession.d.ts.map +1 -0
- package/dist/tools/createSession.js +41 -0
- package/dist/tools/createSession.js.map +1 -0
- package/dist/tools/definitions.d.ts +18 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +116 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/destroySession.d.ts +31 -0
- package/dist/tools/destroySession.d.ts.map +1 -0
- package/dist/tools/destroySession.js +32 -0
- package/dist/tools/destroySession.js.map +1 -0
- package/dist/tools/getContent.d.ts +7 -0
- package/dist/tools/getContent.d.ts.map +1 -1
- package/dist/tools/getContent.js +8 -3
- package/dist/tools/getContent.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +26 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/listSessions.d.ts +19 -0
- package/dist/tools/listSessions.d.ts.map +1 -0
- package/dist/tools/listSessions.js +23 -0
- package/dist/tools/listSessions.js.map +1 -0
- package/dist/tools/screenshot.d.ts +26 -3
- package/dist/tools/screenshot.d.ts.map +1 -1
- package/dist/tools/screenshot.js +55 -5
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/sendKey.d.ts +7 -0
- package/dist/tools/sendKey.d.ts.map +1 -1
- package/dist/tools/sendKey.js +7 -2
- package/dist/tools/sendKey.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/tools/type.d.ts +7 -0
- package/dist/tools/type.d.ts.map +1 -1
- package/dist/tools/type.js +7 -2
- package/dist/tools/type.js.map +1 -1
- 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/dist/utils/render.d.ts +21 -0
- package/dist/utils/render.d.ts.map +1 -0
- package/dist/utils/render.js +162 -0
- package/dist/utils/render.js.map +1 -0
- package/package.json +6 -2
- package/sandbox-permissions.png +0 -0
package/dist/tools/type.d.ts
CHANGED
|
@@ -2,10 +2,13 @@ import { z } from "zod";
|
|
|
2
2
|
import { TerminalManager } from "../terminal/index.js";
|
|
3
3
|
export declare const typeSchema: z.ZodObject<{
|
|
4
4
|
text: z.ZodString;
|
|
5
|
+
sessionId: z.ZodOptional<z.ZodString>;
|
|
5
6
|
}, "strip", z.ZodTypeAny, {
|
|
6
7
|
text: string;
|
|
8
|
+
sessionId?: string | undefined;
|
|
7
9
|
}, {
|
|
8
10
|
text: string;
|
|
11
|
+
sessionId?: string | undefined;
|
|
9
12
|
}>;
|
|
10
13
|
export type TypeArgs = z.infer<typeof typeSchema>;
|
|
11
14
|
export declare const typeTool: {
|
|
@@ -18,6 +21,10 @@ export declare const typeTool: {
|
|
|
18
21
|
type: string;
|
|
19
22
|
description: string;
|
|
20
23
|
};
|
|
24
|
+
sessionId: {
|
|
25
|
+
type: string;
|
|
26
|
+
description: string;
|
|
27
|
+
};
|
|
21
28
|
};
|
|
22
29
|
required: string[];
|
|
23
30
|
};
|
package/dist/tools/type.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/tools/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/tools/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,eAAO,MAAM,UAAU;;;;;;;;;EAGrB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAElD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;CAiBpB,CAAC;AAEF,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAYtH"}
|
package/dist/tools/type.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export const typeSchema = z.object({
|
|
3
3
|
text: z.string().describe("The text to type into the terminal"),
|
|
4
|
+
sessionId: z.string().optional().describe("Target session ID. Omit to target the default session."),
|
|
4
5
|
});
|
|
5
6
|
export const typeTool = {
|
|
6
7
|
name: "type",
|
|
7
|
-
description: "Send text input to the terminal. Text is written exactly as provided - no Enter key is sent automatically. To execute a command, use type() followed by sendKey('Enter'). Example workflow: type('ls -la') → sendKey('Enter') → getContent(). IMPORTANT: In zsh, avoid '!' inside double quotes as it triggers history expansion - use single quotes instead (e.g., echo 'Hello!' not echo \"Hello!\").",
|
|
8
|
+
description: "Send text input to the terminal. Text is written exactly as provided - no Enter key is sent automatically. To execute a command, use type() followed by sendKey('Enter'). Example workflow: type('ls -la') → sendKey('Enter') → getContent(). Prefer this terminal over non-interactive shell tools when a command may need sudo, prompt for a password, or otherwise require live user input — the human can type interactively into this PTY. Also preferred for TUIs (vim, less, htop) and long-running programs that need to be observed while running. IMPORTANT: In zsh, avoid '!' inside double quotes as it triggers history expansion - use single quotes instead (e.g., echo 'Hello!' not echo \"Hello!\"). Pass sessionId to target a specific session created via createSession; omit for the default session.",
|
|
8
9
|
inputSchema: {
|
|
9
10
|
type: "object",
|
|
10
11
|
properties: {
|
|
@@ -12,13 +13,17 @@ export const typeTool = {
|
|
|
12
13
|
type: "string",
|
|
13
14
|
description: "The text to type into the terminal",
|
|
14
15
|
},
|
|
16
|
+
sessionId: {
|
|
17
|
+
type: "string",
|
|
18
|
+
description: "Target session ID. Omit to target the default session.",
|
|
19
|
+
},
|
|
15
20
|
},
|
|
16
21
|
required: ["text"],
|
|
17
22
|
},
|
|
18
23
|
};
|
|
19
24
|
export function handleType(manager, args) {
|
|
20
25
|
const parsed = typeSchema.parse(args);
|
|
21
|
-
manager.write(parsed.text);
|
|
26
|
+
manager.write(parsed.text, parsed.sessionId);
|
|
22
27
|
return {
|
|
23
28
|
content: [
|
|
24
29
|
{
|
package/dist/tools/type.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/tools/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/tools/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAC/D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;CACpG,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,4xBAA4xB;IACzyB,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oCAAoC;aAClD;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wDAAwD;aACtE;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACF,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,OAAwB,EAAE,IAAa;IAChE,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAE7C,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,MAAM,2BAA2B;aAC7D;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;
|
|
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"}
|
package/dist/transport/socket.js
CHANGED
|
@@ -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":"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;
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/transport/socket.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/index.d.ts
CHANGED
package/dist/ui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"
|
|
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
|
-
${
|
|
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
|
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,iEAAiE;AACjE,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAC5C,4DAA4D;AAC5D,MAAM,UAAU,GAAG,wBAAwB,CAAC;AAC5C,+CAA+C;AAC/C,MAAM,YAAY,GAAG,sBAAsB,CAAC;AAC5C,yBAAyB;AACzB,MAAM,WAAW,GAAG,wBAAwB,CAAC;AAC7C,8DAA8D;AAC9D,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAC3C,MAAM,KAAK,GAAG,SAAS,CAAC;AAExB,+DAA+D;AAC/D,MAAM,IAAI,GAAG;;;;;;;;;;;;;CAaZ,CAAC,IAAI,EAAE,CAAC;AAUT;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,OAAsB;IAC9C,oCAAoC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEnC,mDAAmD;IACnD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,+BAA+B;IAElE,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE5C,+DAA+D;IAC/D,iEAAiE;IACjE,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5C,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;QACnD,OAAO,YAAY,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC;QACpB,OAAO,GAAG,YAAY,IAAI,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC;IAC3H,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG;;;;;;EAMlB,CAAC;IAED,uCAAuC;IACvC,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc;QACxC,CAAC,CAAC,GAAG,YAAY,IAAI,WAAW,cAAc,WAAW,UAAU,WAAW,mCAAmC,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,GAAG,YAAY,KAAK;QAC9J,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;EACP,YAAY,IAAI,cAAc;EAC9B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;EACvB,YAAY,IAAI,cAAc;EAC9B,YAAY,IAAI,WAAW,aAAa,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,GAAG,EAAE,CAAC,GAAG,YAAY;EAClG,YAAY,IAAI,WAAW,eAAe,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,UAAU,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,EAAE,CAAC,GAAG,YAAY;EACxJ,WAAW,GAAG,YAAY,IAAI,cAAc;EAC5C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;EACpB,YAAY,IAAI,cAAc;EAC9B,YAAY,IAAI,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,OAAO,IAAI,YAAY;EACjF,YAAY,IAAI,cAAc,IAAI,KAAK;;EAEvC,WAAW,8CAA8C,KAAK;;EAE9D,SAAS;;EAET,YAAY,IAAI,cAAc;GAC7B,WAAW,wCAAwC,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,GAAG,YAAY;GAC3F,cAAc,IAAI,KAAK;CACzB,CAAC;AACF,CAAC;AAGD;;GAEG;AACH,SAAS,QAAQ,CAAC,GAAW,EAAE,MAAc;IAC3C,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC"}
|
package/dist/utils/platform.d.ts
CHANGED
|
@@ -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"}
|
package/dist/utils/platform.js
CHANGED
|
@@ -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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders the terminal buffer to a PNG image via SVG.
|
|
3
|
+
* Uses @xterm/headless buffer cell API for color extraction
|
|
4
|
+
* and @resvg/resvg-js for SVG-to-PNG conversion.
|
|
5
|
+
*/
|
|
6
|
+
import type { Terminal } from "@xterm/headless";
|
|
7
|
+
export interface RenderOptions {
|
|
8
|
+
/** Font family name (must be available to resvg). Default: 'JetBrains Mono' */
|
|
9
|
+
fontFamily?: string;
|
|
10
|
+
/** Directories to search for font files */
|
|
11
|
+
fontDirs?: string[];
|
|
12
|
+
/** Show macOS-style window chrome (traffic lights). Default: true */
|
|
13
|
+
windowChrome?: boolean;
|
|
14
|
+
/** Output scale multiplier. Default: 2 (retina) */
|
|
15
|
+
scale?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Render an xterm.js Terminal buffer to a PNG image buffer.
|
|
19
|
+
*/
|
|
20
|
+
export declare function renderTerminalToPng(terminal: Terminal, options?: RenderOptions): Buffer;
|
|
21
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/utils/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AA8EhD,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,qEAAqE;IACrE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAkG3F"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders the terminal buffer to a PNG image via SVG.
|
|
3
|
+
* Uses @xterm/headless buffer cell API for color extraction
|
|
4
|
+
* and @resvg/resvg-js for SVG-to-PNG conversion.
|
|
5
|
+
*/
|
|
6
|
+
import { createRequire } from "module";
|
|
7
|
+
import * as os from "os";
|
|
8
|
+
import * as path from "path";
|
|
9
|
+
import * as fs from "fs";
|
|
10
|
+
const require = createRequire(import.meta.url);
|
|
11
|
+
function defaultFontDirs() {
|
|
12
|
+
const dirs = [];
|
|
13
|
+
const home = os.homedir();
|
|
14
|
+
// Common font directories
|
|
15
|
+
const candidates = [
|
|
16
|
+
path.join(home, '.local/share/fonts'),
|
|
17
|
+
'/usr/share/fonts',
|
|
18
|
+
'/usr/local/share/fonts',
|
|
19
|
+
'/System/Library/Fonts',
|
|
20
|
+
path.join(home, 'Library/Fonts'),
|
|
21
|
+
];
|
|
22
|
+
for (const d of candidates) {
|
|
23
|
+
try {
|
|
24
|
+
if (fs.statSync(d).isDirectory())
|
|
25
|
+
dirs.push(d);
|
|
26
|
+
}
|
|
27
|
+
catch { /* skip */ }
|
|
28
|
+
}
|
|
29
|
+
return dirs;
|
|
30
|
+
}
|
|
31
|
+
// xterm.js CellColorMode bitmask values from IBufferCell.getFgColorMode():
|
|
32
|
+
const CM_DEFAULT = 0;
|
|
33
|
+
const CM_P16 = 16777216; // 0x1000000 — 16-color palette (SGR 30-37, 90-97)
|
|
34
|
+
const CM_P256 = 33554432; // 0x2000000 — 256-color palette (SGR 38;5;N)
|
|
35
|
+
const CM_RGB = 50331648; // 0x3000000 — 24-bit truecolor (SGR 38;2;R;G;B)
|
|
36
|
+
// One Dark color palette for the basic 16 ANSI colors
|
|
37
|
+
const palette16 = [
|
|
38
|
+
'#282c34', '#e06c75', '#98c379', '#e5c07b', '#61afef', '#c678dd', '#56b6c2', '#abb2bf',
|
|
39
|
+
'#5c6370', '#e06c75', '#98c379', '#e5c07b', '#61afef', '#c678dd', '#56b6c2', '#ffffff',
|
|
40
|
+
];
|
|
41
|
+
const BG_COLOR = '#282c34';
|
|
42
|
+
const FG_COLOR = '#abb2bf';
|
|
43
|
+
function color256(n) {
|
|
44
|
+
if (n < 16)
|
|
45
|
+
return palette16[n];
|
|
46
|
+
if (n < 232) {
|
|
47
|
+
n -= 16;
|
|
48
|
+
const r = Math.floor(n / 36) * 51;
|
|
49
|
+
const g = Math.floor((n % 36) / 6) * 51;
|
|
50
|
+
const b = (n % 6) * 51;
|
|
51
|
+
return `rgb(${r},${g},${b})`;
|
|
52
|
+
}
|
|
53
|
+
const gray = (n - 232) * 10 + 8;
|
|
54
|
+
return `rgb(${gray},${gray},${gray})`;
|
|
55
|
+
}
|
|
56
|
+
function resolveColor(color, mode, isBackground) {
|
|
57
|
+
if (mode === CM_DEFAULT || color < 0) {
|
|
58
|
+
return isBackground ? BG_COLOR : FG_COLOR;
|
|
59
|
+
}
|
|
60
|
+
if (mode === CM_P16) {
|
|
61
|
+
return palette16[color] || (isBackground ? BG_COLOR : FG_COLOR);
|
|
62
|
+
}
|
|
63
|
+
if (mode === CM_P256) {
|
|
64
|
+
if (color < 16)
|
|
65
|
+
return palette16[color];
|
|
66
|
+
return color256(color);
|
|
67
|
+
}
|
|
68
|
+
if (mode === CM_RGB) {
|
|
69
|
+
const r = (color >> 16) & 0xff;
|
|
70
|
+
const g = (color >> 8) & 0xff;
|
|
71
|
+
const b = color & 0xff;
|
|
72
|
+
return `rgb(${r},${g},${b})`;
|
|
73
|
+
}
|
|
74
|
+
return isBackground ? BG_COLOR : FG_COLOR;
|
|
75
|
+
}
|
|
76
|
+
function escapeXml(s) {
|
|
77
|
+
return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Render an xterm.js Terminal buffer to a PNG image buffer.
|
|
81
|
+
*/
|
|
82
|
+
export function renderTerminalToPng(terminal, options = {}) {
|
|
83
|
+
const { fontFamily = 'JetBrains Mono', fontDirs: userFontDirs = [], windowChrome = true, scale = 2, } = options;
|
|
84
|
+
// Default font search paths if none provided
|
|
85
|
+
const fontDirs = userFontDirs.length > 0
|
|
86
|
+
? userFontDirs
|
|
87
|
+
: defaultFontDirs();
|
|
88
|
+
const cols = terminal.cols;
|
|
89
|
+
const rows = terminal.rows;
|
|
90
|
+
const buffer = terminal.buffer.active;
|
|
91
|
+
// Character metrics (approximate for 13px monospace)
|
|
92
|
+
const charW = 8.4;
|
|
93
|
+
const charH = 17;
|
|
94
|
+
const padX = 16;
|
|
95
|
+
const padY = windowChrome ? 44 : 16;
|
|
96
|
+
const padBottom = 12;
|
|
97
|
+
const width = cols * charW + padX * 2;
|
|
98
|
+
const height = rows * charH + padY + padBottom;
|
|
99
|
+
const cornerR = 10;
|
|
100
|
+
// Build SVG
|
|
101
|
+
let svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}">
|
|
102
|
+
<defs>
|
|
103
|
+
<style>
|
|
104
|
+
text { font-family: '${fontFamily}'; font-size: 13px; }
|
|
105
|
+
</style>
|
|
106
|
+
</defs>
|
|
107
|
+
<rect width="${width}" height="${height}" rx="${cornerR}" ry="${cornerR}" fill="${BG_COLOR}"/>`;
|
|
108
|
+
if (windowChrome) {
|
|
109
|
+
svg += `
|
|
110
|
+
<circle cx="20" cy="18" r="6" fill="#ff5f57"/>
|
|
111
|
+
<circle cx="40" cy="18" r="6" fill="#febc2e"/>
|
|
112
|
+
<circle cx="60" cy="18" r="6" fill="#28c840"/>`;
|
|
113
|
+
}
|
|
114
|
+
svg += '\n';
|
|
115
|
+
// Render each character individually at its exact grid position
|
|
116
|
+
// (grouping into text runs causes drift with Unicode box/block characters)
|
|
117
|
+
for (let y = 0; y < rows; y++) {
|
|
118
|
+
const line = buffer.getLine(y);
|
|
119
|
+
if (!line)
|
|
120
|
+
continue;
|
|
121
|
+
for (let x = 0; x < cols; x++) {
|
|
122
|
+
const cell = line.getCell(x);
|
|
123
|
+
if (!cell)
|
|
124
|
+
continue;
|
|
125
|
+
const char = cell.getChars();
|
|
126
|
+
if (!char || char === ' ')
|
|
127
|
+
continue;
|
|
128
|
+
const bgColor = resolveColor(cell.getBgColor(), cell.getBgColorMode(), true);
|
|
129
|
+
const fgColor = resolveColor(cell.getFgColor(), cell.getFgColorMode(), false);
|
|
130
|
+
const bold = cell.isBold() === 1;
|
|
131
|
+
const cx = padX + x * charW;
|
|
132
|
+
const cy = padY + y * charH;
|
|
133
|
+
// Render non-default backgrounds
|
|
134
|
+
if (bgColor !== BG_COLOR) {
|
|
135
|
+
svg += `<rect x="${cx}" y="${cy}" width="${charW}" height="${charH}" fill="${bgColor}"/>`;
|
|
136
|
+
}
|
|
137
|
+
const weight = bold ? ' font-weight="bold"' : '';
|
|
138
|
+
svg += `<text x="${cx}" y="${cy + charH - 4}" fill="${fgColor}"${weight}>${escapeXml(char)}</text>\n`;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
svg += '</svg>';
|
|
142
|
+
// Convert SVG to PNG
|
|
143
|
+
// Dynamic import to avoid hard failure if resvg is not installed
|
|
144
|
+
let Resvg;
|
|
145
|
+
try {
|
|
146
|
+
Resvg = require('@resvg/resvg-js').Resvg;
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
throw new Error('PNG screenshot requires @resvg/resvg-js. Install it with: npm install @resvg/resvg-js');
|
|
150
|
+
}
|
|
151
|
+
const resvg = new Resvg(svg, {
|
|
152
|
+
fitTo: { mode: 'width', value: Math.round(width * scale) },
|
|
153
|
+
font: {
|
|
154
|
+
loadSystemFonts: fontDirs.length === 0,
|
|
155
|
+
fontDirs,
|
|
156
|
+
defaultFontFamily: fontFamily,
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
const pngData = resvg.render();
|
|
160
|
+
return Buffer.from(pngData.asPng());
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/utils/render.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ellery/terminal-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "A headless terminal emulator exposed via MCP for AI assistants",
|
|
5
5
|
"author": "Ellery Familia",
|
|
6
6
|
"repository": {
|
|
@@ -22,11 +22,15 @@
|
|
|
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
|
-
"
|
|
28
|
+
"node-pty": "^1.2.0-beta.8",
|
|
28
29
|
"zod": "^3.23.0"
|
|
29
30
|
},
|
|
31
|
+
"optionalDependencies": {
|
|
32
|
+
"@resvg/resvg-js": "^2.6.0"
|
|
33
|
+
},
|
|
30
34
|
"devDependencies": {
|
|
31
35
|
"@types/node": "^20.0.0",
|
|
32
36
|
"tsx": "^4.0.0",
|
|
Binary file
|