@ellery/terminal-mcp 0.1.1

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 (73) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +207 -0
  3. package/dist/client.d.ts +5 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +185 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +192 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/prompts/index.d.ts +3 -0
  12. package/dist/prompts/index.d.ts.map +1 -0
  13. package/dist/prompts/index.js +79 -0
  14. package/dist/prompts/index.js.map +1 -0
  15. package/dist/server.d.ts +28 -0
  16. package/dist/server.d.ts.map +1 -0
  17. package/dist/server.js +58 -0
  18. package/dist/server.js.map +1 -0
  19. package/dist/terminal/index.d.ts +4 -0
  20. package/dist/terminal/index.d.ts.map +1 -0
  21. package/dist/terminal/index.js +3 -0
  22. package/dist/terminal/index.js.map +1 -0
  23. package/dist/terminal/manager.d.ts +54 -0
  24. package/dist/terminal/manager.d.ts.map +1 -0
  25. package/dist/terminal/manager.js +79 -0
  26. package/dist/terminal/manager.js.map +1 -0
  27. package/dist/terminal/session.d.ts +85 -0
  28. package/dist/terminal/session.d.ts.map +1 -0
  29. package/dist/terminal/session.js +246 -0
  30. package/dist/terminal/session.js.map +1 -0
  31. package/dist/tools/getContent.d.ts +32 -0
  32. package/dist/tools/getContent.d.ts.map +1 -0
  33. package/dist/tools/getContent.js +38 -0
  34. package/dist/tools/getContent.js.map +1 -0
  35. package/dist/tools/index.d.ts +4 -0
  36. package/dist/tools/index.d.ts.map +1 -0
  37. package/dist/tools/index.js +43 -0
  38. package/dist/tools/index.js.map +1 -0
  39. package/dist/tools/screenshot.d.ts +20 -0
  40. package/dist/tools/screenshot.d.ts.map +1 -0
  41. package/dist/tools/screenshot.js +28 -0
  42. package/dist/tools/screenshot.js.map +1 -0
  43. package/dist/tools/sendKey.d.ts +31 -0
  44. package/dist/tools/sendKey.d.ts.map +1 -0
  45. package/dist/tools/sendKey.js +38 -0
  46. package/dist/tools/sendKey.js.map +1 -0
  47. package/dist/tools/type.d.ts +31 -0
  48. package/dist/tools/type.d.ts.map +1 -0
  49. package/dist/tools/type.js +31 -0
  50. package/dist/tools/type.js.map +1 -0
  51. package/dist/transport/index.d.ts +2 -0
  52. package/dist/transport/index.d.ts.map +1 -0
  53. package/dist/transport/index.js +2 -0
  54. package/dist/transport/index.js.map +1 -0
  55. package/dist/transport/socket.d.ts +30 -0
  56. package/dist/transport/socket.d.ts.map +1 -0
  57. package/dist/transport/socket.js +168 -0
  58. package/dist/transport/socket.js.map +1 -0
  59. package/dist/ui/index.d.ts +24 -0
  60. package/dist/ui/index.d.ts.map +1 -0
  61. package/dist/ui/index.js +124 -0
  62. package/dist/ui/index.js.map +1 -0
  63. package/dist/utils/keys.d.ts +16 -0
  64. package/dist/utils/keys.d.ts.map +1 -0
  65. package/dist/utils/keys.js +98 -0
  66. package/dist/utils/keys.js.map +1 -0
  67. package/dist/utils/stats.d.ts +46 -0
  68. package/dist/utils/stats.d.ts.map +1 -0
  69. package/dist/utils/stats.js +89 -0
  70. package/dist/utils/stats.js.map +1 -0
  71. package/logo.png +0 -0
  72. package/package.json +47 -0
  73. package/tsconfig.json +18 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/terminal/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { z } from "zod";
2
+ import { TerminalManager } from "../terminal/index.js";
3
+ export declare const getContentSchema: z.ZodObject<{
4
+ visibleOnly: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
5
+ }, "strip", z.ZodTypeAny, {
6
+ visibleOnly: boolean;
7
+ }, {
8
+ visibleOnly?: boolean | undefined;
9
+ }>;
10
+ export type GetContentArgs = z.infer<typeof getContentSchema>;
11
+ export declare const getContentTool: {
12
+ name: string;
13
+ description: string;
14
+ inputSchema: {
15
+ type: "object";
16
+ properties: {
17
+ visibleOnly: {
18
+ type: string;
19
+ description: string;
20
+ default: boolean;
21
+ };
22
+ };
23
+ required: never[];
24
+ };
25
+ };
26
+ export declare function handleGetContent(manager: TerminalManager, args: unknown): {
27
+ content: Array<{
28
+ type: "text";
29
+ text: string;
30
+ }>;
31
+ };
32
+ //# sourceMappingURL=getContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getContent.d.ts","sourceRoot":"","sources":["../../src/tools/getContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,eAAO,MAAM,gBAAgB;;;;;;EAM3B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE9D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;CAc1B,CAAC;AAEF,wBAAgB,gBAAgB,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,CAe5H"}
@@ -0,0 +1,38 @@
1
+ import { z } from "zod";
2
+ export const getContentSchema = z.object({
3
+ visibleOnly: z
4
+ .boolean()
5
+ .optional()
6
+ .default(false)
7
+ .describe("If true, only return the visible viewport content. If false, include scrollback buffer."),
8
+ });
9
+ export const getContentTool = {
10
+ name: "getContent",
11
+ description: "Get terminal content as plain text. Use after sending commands to see output. Returns full scrollback buffer by default (up to 1000 lines). Set visibleOnly=true for just the current viewport. Prefer this over takeScreenshot for reading command output.",
12
+ inputSchema: {
13
+ type: "object",
14
+ properties: {
15
+ visibleOnly: {
16
+ type: "boolean",
17
+ description: "If true, only return the visible viewport content. If false (default), include scrollback buffer.",
18
+ default: false,
19
+ },
20
+ },
21
+ required: [],
22
+ },
23
+ };
24
+ export function handleGetContent(manager, args) {
25
+ const parsed = getContentSchema.parse(args);
26
+ const content = parsed.visibleOnly
27
+ ? manager.getVisibleContent()
28
+ : manager.getContent();
29
+ return {
30
+ content: [
31
+ {
32
+ type: "text",
33
+ text: content || "(empty terminal)",
34
+ },
35
+ ],
36
+ };
37
+ }
38
+ //# sourceMappingURL=getContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getContent.js","sourceRoot":"","sources":["../../src/tools/getContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,WAAW,EAAE,CAAC;SACX,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,yFAAyF,CAAC;CACvG,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,6PAA6P;IAC1Q,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,mGAAmG;gBAChH,OAAO,EAAE,KAAK;aACf;SACF;QACD,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,OAAwB,EAAE,IAAa;IACtE,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW;QAChC,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE;QAC7B,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;IAEzB,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO,IAAI,kBAAkB;aACpC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ import { TerminalManager } from "../terminal/index.js";
3
+ export declare function registerTools(server: Server, manager: TerminalManager): void;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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;AASvD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAwC5E"}
@@ -0,0 +1,43 @@
1
+ import { ListToolsRequestSchema, CallToolRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
2
+ import { typeTool, handleType } from "./type.js";
3
+ import { sendKeyTool, handleSendKey } from "./sendKey.js";
4
+ import { getContentTool, handleGetContent } from "./getContent.js";
5
+ import { screenshotTool, handleScreenshot } from "./screenshot.js";
6
+ const tools = [typeTool, sendKeyTool, getContentTool, screenshotTool];
7
+ export function registerTools(server, manager) {
8
+ // Register list tools handler
9
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
10
+ tools,
11
+ }));
12
+ // Register call tool handler
13
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
14
+ const { name, arguments: args } = request.params;
15
+ try {
16
+ switch (name) {
17
+ case "type":
18
+ return handleType(manager, args);
19
+ case "sendKey":
20
+ return handleSendKey(manager, args);
21
+ case "getContent":
22
+ return handleGetContent(manager, args);
23
+ case "takeScreenshot":
24
+ return handleScreenshot(manager, args);
25
+ default:
26
+ throw new Error(`Unknown tool: ${name}`);
27
+ }
28
+ }
29
+ catch (error) {
30
+ const message = error instanceof Error ? error.message : String(error);
31
+ return {
32
+ content: [
33
+ {
34
+ type: "text",
35
+ text: `Error: ${message}`,
36
+ },
37
+ ],
38
+ isError: true,
39
+ };
40
+ }
41
+ });
42
+ }
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;AAEnE,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;AAEtE,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;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,20 @@
1
+ import { z } from "zod";
2
+ import { TerminalManager } from "../terminal/index.js";
3
+ export declare const screenshotSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
4
+ export type ScreenshotArgs = z.infer<typeof screenshotSchema>;
5
+ export declare const screenshotTool: {
6
+ name: string;
7
+ description: string;
8
+ inputSchema: {
9
+ type: "object";
10
+ properties: {};
11
+ required: never[];
12
+ };
13
+ };
14
+ export declare function handleScreenshot(manager: TerminalManager, _args: unknown): {
15
+ content: Array<{
16
+ type: "text";
17
+ text: string;
18
+ }>;
19
+ };
20
+ //# sourceMappingURL=screenshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,eAAO,MAAM,gBAAgB,gDAAe,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE9D,eAAO,MAAM,cAAc;;;;;;;;CAQ1B,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAiB7H"}
@@ -0,0 +1,28 @@
1
+ import { z } from "zod";
2
+ export const screenshotSchema = z.object({});
3
+ export const screenshotTool = {
4
+ name: "takeScreenshot",
5
+ description: "Capture terminal state as structured JSON with: content (visible text), cursor {x, y} position, and dimensions {cols, rows}. Use when you need cursor position (e.g., for interactive apps, vim) or terminal dimensions. For simple command output, prefer getContent().",
6
+ inputSchema: {
7
+ type: "object",
8
+ properties: {},
9
+ required: [],
10
+ },
11
+ };
12
+ export function handleScreenshot(manager, _args) {
13
+ const screenshot = manager.takeScreenshot();
14
+ const result = {
15
+ content: screenshot.content,
16
+ cursor: screenshot.cursor,
17
+ dimensions: screenshot.dimensions,
18
+ };
19
+ return {
20
+ content: [
21
+ {
22
+ type: "text",
23
+ text: JSON.stringify(result, null, 2),
24
+ },
25
+ ],
26
+ };
27
+ }
28
+ //# sourceMappingURL=screenshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAI7C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,0QAA0Q;IACvR,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,OAAwB,EAAE,KAAc;IACvE,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAE5C,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,UAAU,EAAE,UAAU,CAAC,UAAU;KAClC,CAAC;IAEF,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ import { TerminalManager } from "../terminal/index.js";
3
+ export declare const sendKeySchema: z.ZodObject<{
4
+ key: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ key: string;
7
+ }, {
8
+ key: string;
9
+ }>;
10
+ export type SendKeyArgs = z.infer<typeof sendKeySchema>;
11
+ export declare const sendKeyTool: {
12
+ name: string;
13
+ description: string;
14
+ inputSchema: {
15
+ type: "object";
16
+ properties: {
17
+ key: {
18
+ type: string;
19
+ description: string;
20
+ };
21
+ };
22
+ required: string[];
23
+ };
24
+ };
25
+ export declare function handleSendKey(manager: TerminalManager, args: unknown): {
26
+ content: Array<{
27
+ type: "text";
28
+ text: string;
29
+ }>;
30
+ };
31
+ //# sourceMappingURL=sendKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendKey.d.ts","sourceRoot":"","sources":["../../src/tools/sendKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,eAAO,MAAM,aAAa;;;;;;EAExB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAIxD,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAavB,CAAC;AAEF,wBAAgB,aAAa,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,CAqBzH"}
@@ -0,0 +1,38 @@
1
+ import { z } from "zod";
2
+ import { getKeySequence, getAvailableKeys } from "../utils/keys.js";
3
+ export const sendKeySchema = z.object({
4
+ key: z.string().describe("The key to send (e.g., 'Enter', 'Tab', 'Ctrl+C', 'ArrowUp')"),
5
+ });
6
+ const availableKeys = getAvailableKeys();
7
+ export const sendKeyTool = {
8
+ name: "sendKey",
9
+ description: "Send a special key or key combination to the terminal. Common keys: Enter, Tab, Escape, Backspace, Delete, ArrowUp/Down/Left/Right, Home, End, PageUp, PageDown. Control sequences: Ctrl+C (interrupt), Ctrl+D (EOF), Ctrl+Z (suspend), Ctrl+L (clear screen), Ctrl+A (line start), Ctrl+E (line end), Ctrl+U (clear line). Function keys: F1-F12.",
10
+ inputSchema: {
11
+ type: "object",
12
+ properties: {
13
+ key: {
14
+ type: "string",
15
+ description: "The key to send (e.g., 'Enter', 'Tab', 'Ctrl+C', 'ArrowUp', 'Escape')",
16
+ },
17
+ },
18
+ required: ["key"],
19
+ },
20
+ };
21
+ export function handleSendKey(manager, args) {
22
+ const parsed = sendKeySchema.parse(args);
23
+ const sequence = getKeySequence(parsed.key);
24
+ if (sequence === null) {
25
+ const available = getAvailableKeys();
26
+ throw new Error(`Unknown key: "${parsed.key}". Available keys include: ${available.slice(0, 15).join(", ")}...`);
27
+ }
28
+ manager.write(sequence);
29
+ return {
30
+ content: [
31
+ {
32
+ type: "text",
33
+ text: `Sent key: ${parsed.key}`,
34
+ },
35
+ ],
36
+ };
37
+ }
38
+ //# sourceMappingURL=sendKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendKey.js","sourceRoot":"","sources":["../../src/tools/sendKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;CACxF,CAAC,CAAC;AAIH,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;AAEzC,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,oVAAoV;IACjW,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uEAAuE;aACrF;SACF;QACD,QAAQ,EAAE,CAAC,KAAK,CAAC;KAClB;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,OAAwB,EAAE,IAAa;IACnE,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,iBAAiB,MAAM,CAAC,GAAG,8BAA8B,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAChG,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAExB,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa,MAAM,CAAC,GAAG,EAAE;aAChC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ import { TerminalManager } from "../terminal/index.js";
3
+ export declare const typeSchema: z.ZodObject<{
4
+ text: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ text: string;
7
+ }, {
8
+ text: string;
9
+ }>;
10
+ export type TypeArgs = z.infer<typeof typeSchema>;
11
+ export declare const typeTool: {
12
+ name: string;
13
+ description: string;
14
+ inputSchema: {
15
+ type: "object";
16
+ properties: {
17
+ text: {
18
+ type: string;
19
+ description: string;
20
+ };
21
+ };
22
+ required: string[];
23
+ };
24
+ };
25
+ export declare function handleType(manager: TerminalManager, args: unknown): {
26
+ content: Array<{
27
+ type: "text";
28
+ text: string;
29
+ }>;
30
+ };
31
+ //# sourceMappingURL=type.d.ts.map
@@ -0,0 +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;;;;;;EAErB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAElD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;CAapB,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"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ export const typeSchema = z.object({
3
+ text: z.string().describe("The text to type into the terminal"),
4
+ });
5
+ export const typeTool = {
6
+ 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()",
8
+ inputSchema: {
9
+ type: "object",
10
+ properties: {
11
+ text: {
12
+ type: "string",
13
+ description: "The text to type into the terminal",
14
+ },
15
+ },
16
+ required: ["text"],
17
+ },
18
+ };
19
+ export function handleType(manager, args) {
20
+ const parsed = typeSchema.parse(args);
21
+ manager.write(parsed.text);
22
+ return {
23
+ content: [
24
+ {
25
+ type: "text",
26
+ text: `Typed ${parsed.text.length} character(s) to terminal`,
27
+ },
28
+ ],
29
+ };
30
+ }
31
+ //# sourceMappingURL=type.js.map
@@ -0,0 +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;CAChE,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,8OAA8O;IAC3P,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oCAAoC;aAClD;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,CAAC,CAAC;IAE3B,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"}
@@ -0,0 +1,2 @@
1
+ export { SocketTransport, createSocketServer, createToolProxyServer } from "./socket.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { SocketTransport, createSocketServer, createToolProxyServer } from "./socket.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { Server as NetServer, Socket } from "net";
2
+ import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
3
+ import { JSONRPCMessage } from "@modelcontextprotocol/sdk/types.js";
4
+ import { TerminalManager } from "../terminal/index.js";
5
+ /**
6
+ * Transport that communicates over a Unix socket connection
7
+ * (Used for full MCP protocol when needed)
8
+ */
9
+ export declare class SocketTransport implements Transport {
10
+ private socket;
11
+ private buffer;
12
+ onmessage?: (message: JSONRPCMessage) => void;
13
+ onerror?: (error: Error) => void;
14
+ onclose?: () => void;
15
+ constructor(socket: Socket);
16
+ private processBuffer;
17
+ start(): Promise<void>;
18
+ close(): Promise<void>;
19
+ send(message: JSONRPCMessage): Promise<void>;
20
+ }
21
+ /**
22
+ * Create a Unix socket server that accepts MCP connections
23
+ */
24
+ export declare function createSocketServer(socketPath: string, onConnection: (transport: SocketTransport) => void): NetServer;
25
+ /**
26
+ * Create a simple request/response socket server for tool proxying
27
+ * This is the protocol used between interactive mode and MCP client mode
28
+ */
29
+ export declare function createToolProxyServer(socketPath: string, manager: TerminalManager): NetServer;
30
+ //# sourceMappingURL=socket.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,168 @@
1
+ import * as fs from "fs";
2
+ import { Server as NetServer } from "net";
3
+ import { getStats } from "../utils/stats.js";
4
+ // Tool handlers
5
+ import { handleType } from "../tools/type.js";
6
+ import { handleSendKey } from "../tools/sendKey.js";
7
+ import { handleGetContent } from "../tools/getContent.js";
8
+ import { handleScreenshot } from "../tools/screenshot.js";
9
+ /**
10
+ * Transport that communicates over a Unix socket connection
11
+ * (Used for full MCP protocol when needed)
12
+ */
13
+ export class SocketTransport {
14
+ socket;
15
+ buffer = "";
16
+ onmessage;
17
+ onerror;
18
+ onclose;
19
+ constructor(socket) {
20
+ this.socket = socket;
21
+ this.socket.on("data", (data) => {
22
+ this.buffer += data.toString();
23
+ this.processBuffer();
24
+ });
25
+ this.socket.on("error", (error) => {
26
+ this.onerror?.(error);
27
+ });
28
+ this.socket.on("close", () => {
29
+ this.onclose?.();
30
+ });
31
+ }
32
+ processBuffer() {
33
+ const lines = this.buffer.split("\n");
34
+ this.buffer = lines.pop() || "";
35
+ for (const line of lines) {
36
+ if (line.trim()) {
37
+ try {
38
+ const message = JSON.parse(line);
39
+ this.onmessage?.(message);
40
+ }
41
+ catch (error) {
42
+ this.onerror?.(new Error(`Failed to parse message: ${line}`));
43
+ }
44
+ }
45
+ }
46
+ }
47
+ async start() {
48
+ // Socket is already connected
49
+ }
50
+ async close() {
51
+ this.socket.end();
52
+ }
53
+ async send(message) {
54
+ return new Promise((resolve, reject) => {
55
+ const data = JSON.stringify(message) + "\n";
56
+ this.socket.write(data, (error) => {
57
+ if (error) {
58
+ reject(error);
59
+ }
60
+ else {
61
+ resolve();
62
+ }
63
+ });
64
+ });
65
+ }
66
+ }
67
+ /**
68
+ * Create a Unix socket server that accepts MCP connections
69
+ */
70
+ export function createSocketServer(socketPath, onConnection) {
71
+ // Remove existing socket file if it exists
72
+ try {
73
+ fs.unlinkSync(socketPath);
74
+ }
75
+ catch {
76
+ // Ignore if doesn't exist
77
+ }
78
+ const server = new NetServer((socket) => {
79
+ const transport = new SocketTransport(socket);
80
+ onConnection(transport);
81
+ });
82
+ server.listen(socketPath);
83
+ return server;
84
+ }
85
+ /**
86
+ * Create a simple request/response socket server for tool proxying
87
+ * This is the protocol used between interactive mode and MCP client mode
88
+ */
89
+ export function createToolProxyServer(socketPath, manager) {
90
+ // Remove existing socket file if it exists
91
+ try {
92
+ fs.unlinkSync(socketPath);
93
+ }
94
+ catch {
95
+ // Ignore if doesn't exist
96
+ }
97
+ const server = new NetServer((socket) => {
98
+ let buffer = "";
99
+ socket.on("data", async (data) => {
100
+ buffer += data.toString();
101
+ const lines = buffer.split("\n");
102
+ buffer = lines.pop() || "";
103
+ for (const line of lines) {
104
+ if (line.trim()) {
105
+ try {
106
+ const request = JSON.parse(line);
107
+ const response = await handleToolRequest(manager, request);
108
+ socket.write(JSON.stringify(response) + "\n");
109
+ }
110
+ catch (error) {
111
+ const errorMessage = error instanceof Error ? error.message : String(error);
112
+ socket.write(JSON.stringify({
113
+ id: 0,
114
+ error: { message: `Parse error: ${errorMessage}` },
115
+ }) + "\n");
116
+ }
117
+ }
118
+ }
119
+ });
120
+ socket.on("error", () => {
121
+ // Client disconnected, ignore
122
+ });
123
+ });
124
+ server.listen(socketPath);
125
+ return server;
126
+ }
127
+ /**
128
+ * Handle a tool request from the MCP client
129
+ */
130
+ async function handleToolRequest(manager, request) {
131
+ const { id, method, params } = request;
132
+ const stats = getStats();
133
+ try {
134
+ let result;
135
+ switch (method) {
136
+ case "type":
137
+ stats.recordToolCall("type");
138
+ result = handleType(manager, params);
139
+ break;
140
+ case "sendKey":
141
+ stats.recordToolCall("sendKey");
142
+ result = handleSendKey(manager, params);
143
+ break;
144
+ case "getContent":
145
+ stats.recordToolCall("getContent");
146
+ result = handleGetContent(manager, params);
147
+ break;
148
+ case "takeScreenshot":
149
+ stats.recordToolCall("takeScreenshot");
150
+ result = handleScreenshot(manager, params);
151
+ break;
152
+ default:
153
+ return {
154
+ id,
155
+ error: { message: `Unknown method: ${method}` },
156
+ };
157
+ }
158
+ return { id, result };
159
+ }
160
+ catch (error) {
161
+ const message = error instanceof Error ? error.message : String(error);
162
+ return {
163
+ id,
164
+ error: { message },
165
+ };
166
+ }
167
+ }
168
+ //# sourceMappingURL=socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/transport/socket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { Stats } from "../utils/stats.js";
2
+ export interface BannerOptions {
3
+ socketPath: string;
4
+ cols: number;
5
+ rows: number;
6
+ shell: string;
7
+ }
8
+ /**
9
+ * Print the startup banner to stderr (so it doesn't interfere with shell output)
10
+ */
11
+ export declare function printBanner(options: BannerOptions): void;
12
+ /**
13
+ * Generate the /info output
14
+ */
15
+ export declare function getInfoOutput(socketPath: string, cols: number, rows: number, shell: string, stats: Stats): string;
16
+ /**
17
+ * Print the /info output
18
+ */
19
+ export declare function printInfo(socketPath: string, cols: number, rows: number, shell: string, stats: Stats): void;
20
+ /**
21
+ * Check if input is the /info command
22
+ */
23
+ export declare function isInfoCommand(input: string): boolean;
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AA8B1C,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,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAgCxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,GACX,MAAM,CA2CR;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,GACX,IAAI,CAEN;AAYD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpD"}