ssh-agent-workspace 1.0.5 → 1.0.6
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 +471 -471
- package/dist/__tests__/SSHManager.test.js +59 -37
- package/dist/__tests__/SSHManager.test.js.map +1 -1
- package/dist/__tests__/SessionManager.test.js +53 -51
- package/dist/__tests__/SessionManager.test.js.map +1 -1
- package/dist/__tests__/StorageManager.test.js +74 -74
- package/dist/__tests__/StorageManager.test.js.map +1 -1
- package/dist/__tests__/ansi.test.js +33 -33
- package/dist/__tests__/ansi.test.js.map +1 -1
- package/dist/__tests__/security.test.js +54 -54
- package/dist/__tests__/security.test.js.map +1 -1
- package/dist/__tests__/validation.test.js +17 -17
- package/dist/__tests__/validation.test.js.map +1 -1
- package/dist/core/HostSecurityManager.d.ts.map +1 -1
- package/dist/core/HostSecurityManager.js +9 -9
- package/dist/core/HostSecurityManager.js.map +1 -1
- package/dist/core/SSHManager.d.ts +1 -1
- package/dist/core/SSHManager.d.ts.map +1 -1
- package/dist/core/SSHManager.js +31 -31
- package/dist/core/SSHManager.js.map +1 -1
- package/dist/core/SessionManager.d.ts +4 -4
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +14 -14
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/StorageManager.d.ts.map +1 -1
- package/dist/core/StorageManager.js +11 -11
- package/dist/core/StorageManager.js.map +1 -1
- package/dist/core/TmuxManager.d.ts +3 -3
- package/dist/core/TmuxManager.d.ts.map +1 -1
- package/dist/core/TmuxManager.js +16 -16
- package/dist/core/TmuxManager.js.map +1 -1
- package/dist/core/ToolConfigManager.d.ts.map +1 -1
- package/dist/core/ToolConfigManager.js +10 -10
- package/dist/core/ToolConfigManager.js.map +1 -1
- package/dist/index.js +35 -35
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +4 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +41 -41
- package/dist/server.js.map +1 -1
- package/dist/tools/backup.d.ts +3 -3
- package/dist/tools/backup.d.ts.map +1 -1
- package/dist/tools/backup.js +86 -49
- package/dist/tools/backup.js.map +1 -1
- package/dist/tools/connect.d.ts +4 -4
- package/dist/tools/connect.d.ts.map +1 -1
- package/dist/tools/connect.js +54 -42
- package/dist/tools/connect.js.map +1 -1
- package/dist/tools/connection_status.d.ts +4 -4
- package/dist/tools/connection_status.d.ts.map +1 -1
- package/dist/tools/connection_status.js +23 -16
- package/dist/tools/connection_status.js.map +1 -1
- package/dist/tools/db_query.d.ts +3 -3
- package/dist/tools/db_query.d.ts.map +1 -1
- package/dist/tools/db_query.js +130 -78
- package/dist/tools/db_query.js.map +1 -1
- package/dist/tools/deploy.d.ts +3 -3
- package/dist/tools/deploy.d.ts.map +1 -1
- package/dist/tools/deploy.js +103 -53
- package/dist/tools/deploy.js.map +1 -1
- package/dist/tools/disconnect.d.ts +3 -3
- package/dist/tools/disconnect.d.ts.map +1 -1
- package/dist/tools/disconnect.js +16 -19
- package/dist/tools/disconnect.js.map +1 -1
- package/dist/tools/exec.d.ts +3 -3
- package/dist/tools/exec.d.ts.map +1 -1
- package/dist/tools/exec.js +40 -45
- package/dist/tools/exec.js.map +1 -1
- package/dist/tools/group_exec.d.ts +3 -3
- package/dist/tools/group_exec.d.ts.map +1 -1
- package/dist/tools/group_exec.js +60 -44
- package/dist/tools/group_exec.js.map +1 -1
- package/dist/tools/health_check.d.ts +3 -3
- package/dist/tools/health_check.d.ts.map +1 -1
- package/dist/tools/health_check.js +27 -23
- package/dist/tools/health_check.js.map +1 -1
- package/dist/tools/host_security.d.ts +1 -1
- package/dist/tools/host_security.d.ts.map +1 -1
- package/dist/tools/host_security.js +30 -36
- package/dist/tools/host_security.js.map +1 -1
- package/dist/tools/index.d.ts +23 -23
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +23 -23
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/interrupt.d.ts +3 -3
- package/dist/tools/interrupt.d.ts.map +1 -1
- package/dist/tools/interrupt.js +18 -18
- package/dist/tools/interrupt.js.map +1 -1
- package/dist/tools/list_hosts.d.ts.map +1 -1
- package/dist/tools/list_hosts.js +5 -7
- package/dist/tools/list_hosts.js.map +1 -1
- package/dist/tools/list_sessions.d.ts +1 -1
- package/dist/tools/list_sessions.js +4 -4
- package/dist/tools/list_sessions.js.map +1 -1
- package/dist/tools/read_output.d.ts +3 -3
- package/dist/tools/read_output.d.ts.map +1 -1
- package/dist/tools/read_output.js +17 -17
- package/dist/tools/read_output.js.map +1 -1
- package/dist/tools/reconnect_to_tmux.d.ts +4 -4
- package/dist/tools/reconnect_to_tmux.d.ts.map +1 -1
- package/dist/tools/reconnect_to_tmux.js +44 -37
- package/dist/tools/reconnect_to_tmux.js.map +1 -1
- package/dist/tools/send_input.d.ts +3 -3
- package/dist/tools/send_input.d.ts.map +1 -1
- package/dist/tools/send_input.js +18 -18
- package/dist/tools/send_input.js.map +1 -1
- package/dist/tools/sftp_download.d.ts +3 -3
- package/dist/tools/sftp_download.d.ts.map +1 -1
- package/dist/tools/sftp_download.js +41 -27
- package/dist/tools/sftp_download.js.map +1 -1
- package/dist/tools/sftp_list.d.ts +3 -3
- package/dist/tools/sftp_list.d.ts.map +1 -1
- package/dist/tools/sftp_list.js +35 -26
- package/dist/tools/sftp_list.js.map +1 -1
- package/dist/tools/sftp_upload.d.ts +3 -3
- package/dist/tools/sftp_upload.d.ts.map +1 -1
- package/dist/tools/sftp_upload.js +43 -29
- package/dist/tools/sftp_upload.js.map +1 -1
- package/dist/tools/ssh_tunnel.d.ts +3 -3
- package/dist/tools/ssh_tunnel.d.ts.map +1 -1
- package/dist/tools/ssh_tunnel.js +130 -76
- package/dist/tools/ssh_tunnel.js.map +1 -1
- package/dist/tools/sync.d.ts +3 -3
- package/dist/tools/sync.d.ts.map +1 -1
- package/dist/tools/sync.js +103 -61
- package/dist/tools/sync.js.map +1 -1
- package/dist/tools/tail_log.d.ts +3 -3
- package/dist/tools/tail_log.d.ts.map +1 -1
- package/dist/tools/tail_log.js +38 -26
- package/dist/tools/tail_log.js.map +1 -1
- package/dist/tools/tools_config.d.ts +1 -1
- package/dist/tools/tools_config.d.ts.map +1 -1
- package/dist/tools/tools_config.js +25 -35
- package/dist/tools/tools_config.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/ansi.js +1 -1
- package/dist/utils/ansi.js.map +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.js +2 -2
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/security.d.ts +1 -1
- package/dist/utils/security.js +3 -3
- package/dist/utils/security.js.map +1 -1
- package/dist/utils/ssh.d.ts +2 -2
- package/dist/utils/ssh.js +5 -5
- package/dist/utils/ssh.js.map +1 -1
- package/dist/utils/sshConfig.d.ts +1 -1
- package/dist/utils/sshConfig.d.ts.map +1 -1
- package/dist/utils/sshConfig.js +21 -21
- package/dist/utils/sshConfig.js.map +1 -1
- package/dist/utils/validation.d.ts +1 -1
- package/dist/utils/validation.js +3 -3
- package/dist/utils/validation.js.map +1 -1
- package/docs/SECURITY.md +213 -213
- package/docs/TOOLS.md +425 -425
- package/package.json +59 -48
- package/vitest.config.ts +10 -10
package/dist/tools/exec.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { z } from
|
|
2
|
-
import { MCP_PROMPT } from
|
|
3
|
-
import { isReadOnlyMode, isCommandDenied } from
|
|
4
|
-
import { logger } from
|
|
5
|
-
import { stripAnsi } from
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { MCP_PROMPT } from "../core/TmuxManager.js";
|
|
3
|
+
import { isReadOnlyMode, isCommandDenied } from "../utils/security.js";
|
|
4
|
+
import { logger } from "../utils/logger.js";
|
|
5
|
+
import { stripAnsi } from "../utils/ansi.js";
|
|
6
6
|
export const execSchema = z.object({
|
|
7
7
|
session_id: z.string().min(1),
|
|
8
8
|
command: z.string().min(1),
|
|
@@ -11,58 +11,53 @@ export const execSchema = z.object({
|
|
|
11
11
|
.min(0)
|
|
12
12
|
.max(60000)
|
|
13
13
|
.default(200)
|
|
14
|
-
.describe(
|
|
14
|
+
.describe("Minimum milliseconds to wait before starting prompt detection"),
|
|
15
15
|
max_wait_ms: z
|
|
16
16
|
.number()
|
|
17
17
|
.min(0)
|
|
18
18
|
.max(300000)
|
|
19
19
|
.default(10000)
|
|
20
|
-
.describe(
|
|
21
|
-
lines: z
|
|
22
|
-
.number()
|
|
23
|
-
.min(1)
|
|
24
|
-
.max(10000)
|
|
25
|
-
.default(200)
|
|
26
|
-
.describe('Number of output lines to capture'),
|
|
20
|
+
.describe("Maximum total milliseconds to wait for prompt stabilization"),
|
|
21
|
+
lines: z.number().min(1).max(10000).default(200).describe("Number of output lines to capture"),
|
|
27
22
|
});
|
|
28
23
|
export const execTool = {
|
|
29
|
-
name:
|
|
30
|
-
description:
|
|
24
|
+
name: "exec",
|
|
25
|
+
description: "Execute a command in a persistent tmux session with prompt stabilization. Sends the command, waits for the deterministic prompt to appear, then captures output.",
|
|
31
26
|
inputSchema: {
|
|
32
|
-
type:
|
|
27
|
+
type: "object",
|
|
33
28
|
properties: {
|
|
34
29
|
session_id: {
|
|
35
|
-
type:
|
|
36
|
-
description:
|
|
30
|
+
type: "string",
|
|
31
|
+
description: "Session ID returned by connect",
|
|
37
32
|
},
|
|
38
33
|
command: {
|
|
39
|
-
type:
|
|
40
|
-
description:
|
|
34
|
+
type: "string",
|
|
35
|
+
description: "Command to execute",
|
|
41
36
|
},
|
|
42
37
|
wait_ms: {
|
|
43
|
-
type:
|
|
44
|
-
description:
|
|
38
|
+
type: "number",
|
|
39
|
+
description: "Minimum milliseconds to wait before starting prompt detection (default: 200)",
|
|
45
40
|
default: 200,
|
|
46
41
|
},
|
|
47
42
|
max_wait_ms: {
|
|
48
|
-
type:
|
|
49
|
-
description:
|
|
43
|
+
type: "number",
|
|
44
|
+
description: "Maximum total milliseconds to wait for prompt stabilization (default: 10000)",
|
|
50
45
|
default: 10000,
|
|
51
46
|
},
|
|
52
47
|
lines: {
|
|
53
|
-
type:
|
|
54
|
-
description:
|
|
48
|
+
type: "number",
|
|
49
|
+
description: "Number of output lines to capture (default: 200)",
|
|
55
50
|
default: 200,
|
|
56
51
|
},
|
|
57
52
|
},
|
|
58
|
-
required: [
|
|
53
|
+
required: ["session_id", "command"],
|
|
59
54
|
},
|
|
60
55
|
};
|
|
61
56
|
function outputContainsPrompt(output) {
|
|
62
|
-
const lines = output.split(
|
|
57
|
+
const lines = output.split("\n");
|
|
63
58
|
for (let i = lines.length - 1; i >= 0; i--) {
|
|
64
59
|
const line = lines[i].trim();
|
|
65
|
-
if (line ===
|
|
60
|
+
if (line === "")
|
|
66
61
|
continue;
|
|
67
62
|
// The prompt should be at the very end of the last non-empty line
|
|
68
63
|
return line.includes(MCP_PROMPT.trim());
|
|
@@ -70,20 +65,20 @@ function outputContainsPrompt(output) {
|
|
|
70
65
|
return false;
|
|
71
66
|
}
|
|
72
67
|
function stripPrompts(output) {
|
|
73
|
-
const lines = output.split(
|
|
68
|
+
const lines = output.split("\n");
|
|
74
69
|
const cleaned = [];
|
|
75
70
|
for (const line of lines) {
|
|
76
71
|
if (line.trim() === MCP_PROMPT.trim()) {
|
|
77
72
|
continue;
|
|
78
73
|
}
|
|
79
74
|
if (line.trimEnd().endsWith(MCP_PROMPT.trim())) {
|
|
80
|
-
cleaned.push(line.trimEnd().replace(MCP_PROMPT.trim(),
|
|
75
|
+
cleaned.push(line.trimEnd().replace(MCP_PROMPT.trim(), "").trimEnd());
|
|
81
76
|
}
|
|
82
77
|
else {
|
|
83
78
|
cleaned.push(line);
|
|
84
79
|
}
|
|
85
80
|
}
|
|
86
|
-
return cleaned.join(
|
|
81
|
+
return cleaned.join("\n").trimEnd();
|
|
87
82
|
}
|
|
88
83
|
export async function handleExec(args, sessionManager, tmuxManager) {
|
|
89
84
|
const parsed = execSchema.safeParse(args);
|
|
@@ -91,7 +86,7 @@ export async function handleExec(args, sessionManager, tmuxManager) {
|
|
|
91
86
|
return {
|
|
92
87
|
content: [
|
|
93
88
|
{
|
|
94
|
-
type:
|
|
89
|
+
type: "text",
|
|
95
90
|
text: `Invalid arguments: ${parsed.error.message}`,
|
|
96
91
|
},
|
|
97
92
|
],
|
|
@@ -100,11 +95,11 @@ export async function handleExec(args, sessionManager, tmuxManager) {
|
|
|
100
95
|
}
|
|
101
96
|
const { session_id, command, wait_ms, max_wait_ms, lines } = parsed.data;
|
|
102
97
|
if (isCommandDenied(command)) {
|
|
103
|
-
logger.warn({ sessionId: session_id, command },
|
|
98
|
+
logger.warn({ sessionId: session_id, command }, "Command rejected by denylist");
|
|
104
99
|
return {
|
|
105
100
|
content: [
|
|
106
101
|
{
|
|
107
|
-
type:
|
|
102
|
+
type: "text",
|
|
108
103
|
text: `Error: Command '${command}' is denied by security policy`,
|
|
109
104
|
},
|
|
110
105
|
],
|
|
@@ -116,7 +111,7 @@ export async function handleExec(args, sessionManager, tmuxManager) {
|
|
|
116
111
|
return {
|
|
117
112
|
content: [
|
|
118
113
|
{
|
|
119
|
-
type:
|
|
114
|
+
type: "text",
|
|
120
115
|
text: `Error: Session '${session_id}' not found or has been disconnected`,
|
|
121
116
|
},
|
|
122
117
|
],
|
|
@@ -127,7 +122,7 @@ export async function handleExec(args, sessionManager, tmuxManager) {
|
|
|
127
122
|
return {
|
|
128
123
|
content: [
|
|
129
124
|
{
|
|
130
|
-
type:
|
|
125
|
+
type: "text",
|
|
131
126
|
text: `Error: Host '${session.host}' is in read-only mode. Command execution is disabled.`,
|
|
132
127
|
},
|
|
133
128
|
],
|
|
@@ -136,14 +131,14 @@ export async function handleExec(args, sessionManager, tmuxManager) {
|
|
|
136
131
|
}
|
|
137
132
|
try {
|
|
138
133
|
await tmuxManager.sendCommand(session.ssh, session.tmuxSession, command);
|
|
139
|
-
logger.info({ sessionId: session_id, command },
|
|
134
|
+
logger.info({ sessionId: session_id, command }, "Command sent");
|
|
140
135
|
}
|
|
141
136
|
catch (err) {
|
|
142
|
-
logger.error({ sessionId: session_id, error: err.message },
|
|
137
|
+
logger.error({ sessionId: session_id, error: err.message }, "Failed to send command");
|
|
143
138
|
return {
|
|
144
139
|
content: [
|
|
145
140
|
{
|
|
146
|
-
type:
|
|
141
|
+
type: "text",
|
|
147
142
|
text: `Error: Failed to send command: ${err.message}`,
|
|
148
143
|
},
|
|
149
144
|
],
|
|
@@ -157,7 +152,7 @@ export async function handleExec(args, sessionManager, tmuxManager) {
|
|
|
157
152
|
await new Promise((resolve) => setTimeout(resolve, wait_ms));
|
|
158
153
|
elapsed += wait_ms;
|
|
159
154
|
}
|
|
160
|
-
let output =
|
|
155
|
+
let output = "";
|
|
161
156
|
let stabilized = false;
|
|
162
157
|
while (elapsed < max_wait_ms) {
|
|
163
158
|
let captureFailed = false;
|
|
@@ -166,23 +161,23 @@ export async function handleExec(args, sessionManager, tmuxManager) {
|
|
|
166
161
|
}
|
|
167
162
|
catch (err) {
|
|
168
163
|
captureFailed = true;
|
|
169
|
-
logger.warn({ sessionId: session_id, error: err.message, attempt: Math.floor(elapsed / pollInterval) },
|
|
164
|
+
logger.warn({ sessionId: session_id, error: err.message, attempt: Math.floor(elapsed / pollInterval) }, "capturePane failed, retrying");
|
|
170
165
|
}
|
|
171
166
|
if (!captureFailed && outputContainsPrompt(output)) {
|
|
172
167
|
stabilized = true;
|
|
173
|
-
logger.info({ sessionId: session_id, elapsedMs: elapsed },
|
|
168
|
+
logger.info({ sessionId: session_id, elapsedMs: elapsed }, "Prompt stabilized");
|
|
174
169
|
break;
|
|
175
170
|
}
|
|
176
171
|
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
177
172
|
elapsed += pollInterval;
|
|
178
173
|
}
|
|
179
174
|
if (!stabilized) {
|
|
180
|
-
logger.warn({ sessionId: session_id, max_wait_ms },
|
|
175
|
+
logger.warn({ sessionId: session_id, max_wait_ms }, "Prompt did not stabilize within max_wait_ms; returning current output");
|
|
181
176
|
}
|
|
182
177
|
const cleanedOutput = stripPrompts(output);
|
|
183
178
|
const sanitizedOutput = stripAnsi(cleanedOutput);
|
|
184
179
|
return {
|
|
185
|
-
content: [{ type:
|
|
180
|
+
content: [{ type: "text", text: sanitizedOutput }],
|
|
186
181
|
};
|
|
187
182
|
}
|
|
188
183
|
//# sourceMappingURL=exec.js.map
|
package/dist/tools/exec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/tools/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAe,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/tools/exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { z } from
|
|
2
|
-
import { SessionManager } from
|
|
3
|
-
import { TmuxManager } from
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { SessionManager } from "../core/SessionManager.js";
|
|
3
|
+
import { TmuxManager } from "../core/TmuxManager.js";
|
|
4
4
|
export declare const groupExecSchema: z.ZodObject<{
|
|
5
5
|
session_ids: z.ZodArray<z.ZodString, "many">;
|
|
6
6
|
command: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group_exec.d.ts","sourceRoot":"","sources":["../../src/tools/group_exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAc,MAAM,wBAAwB,CAAC;AAKjE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;EAO1B,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"group_exec.d.ts","sourceRoot":"","sources":["../../src/tools/group_exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAc,MAAM,wBAAwB,CAAC;AAKjE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;EAO1B,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwBzB,CAAC;AA2FF,wBAAsB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW;;;;;;;;;;;;GAmE5G"}
|
package/dist/tools/group_exec.js
CHANGED
|
@@ -1,74 +1,83 @@
|
|
|
1
|
-
import { z } from
|
|
2
|
-
import { MCP_PROMPT } from
|
|
3
|
-
import { isReadOnlyMode, isCommandDenied } from
|
|
4
|
-
import { logger } from
|
|
5
|
-
import { stripAnsi } from
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { MCP_PROMPT } from "../core/TmuxManager.js";
|
|
3
|
+
import { isReadOnlyMode, isCommandDenied } from "../utils/security.js";
|
|
4
|
+
import { logger } from "../utils/logger.js";
|
|
5
|
+
import { stripAnsi } from "../utils/ansi.js";
|
|
6
6
|
export const groupExecSchema = z.object({
|
|
7
|
-
session_ids: z.array(z.string().min(1)).min(1).max(20).describe(
|
|
8
|
-
command: z.string().min(1).describe(
|
|
9
|
-
wait_ms: z.number().min(0).max(60000).default(200).describe(
|
|
10
|
-
max_wait_ms: z.number().min(0).max(300000).default(10000).describe(
|
|
11
|
-
lines: z.number().min(1).max(10000).default(200).describe(
|
|
12
|
-
parallel: z.boolean().default(true).describe(
|
|
7
|
+
session_ids: z.array(z.string().min(1)).min(1).max(20).describe("Array of session IDs to execute the command on"),
|
|
8
|
+
command: z.string().min(1).describe("Command to execute on all sessions"),
|
|
9
|
+
wait_ms: z.number().min(0).max(60000).default(200).describe("Minimum ms before prompt detection per session"),
|
|
10
|
+
max_wait_ms: z.number().min(0).max(300000).default(10000).describe("Maximum ms to wait for prompt per session"),
|
|
11
|
+
lines: z.number().min(1).max(10000).default(200).describe("Output lines per session"),
|
|
12
|
+
parallel: z.boolean().default(true).describe("Run commands in parallel (true) or sequentially (false)"),
|
|
13
13
|
});
|
|
14
14
|
export const groupExecTool = {
|
|
15
|
-
name:
|
|
16
|
-
description:
|
|
15
|
+
name: "group_exec",
|
|
16
|
+
description: "Execute the same command across multiple tmux sessions simultaneously or sequentially. Useful for managing clusters. Returns per-session results with host and exit status.",
|
|
17
17
|
inputSchema: {
|
|
18
|
-
type:
|
|
18
|
+
type: "object",
|
|
19
19
|
properties: {
|
|
20
20
|
session_ids: {
|
|
21
|
-
type:
|
|
22
|
-
items: { type:
|
|
23
|
-
description:
|
|
21
|
+
type: "array",
|
|
22
|
+
items: { type: "string" },
|
|
23
|
+
description: "Array of session IDs to target",
|
|
24
24
|
},
|
|
25
|
-
command: { type:
|
|
26
|
-
wait_ms: { type:
|
|
27
|
-
max_wait_ms: {
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
command: { type: "string", description: "Command to execute" },
|
|
26
|
+
wait_ms: { type: "number", description: "Min ms before prompt detection (default: 200)", default: 200 },
|
|
27
|
+
max_wait_ms: {
|
|
28
|
+
type: "number",
|
|
29
|
+
description: "Max ms for prompt per session (default: 10000)",
|
|
30
|
+
default: 10000,
|
|
31
|
+
},
|
|
32
|
+
lines: { type: "number", description: "Output lines per session (default: 200)", default: 200 },
|
|
33
|
+
parallel: { type: "boolean", description: "Execute in parallel (default: true)", default: true },
|
|
30
34
|
},
|
|
31
|
-
required: [
|
|
35
|
+
required: ["session_ids", "command"],
|
|
32
36
|
},
|
|
33
37
|
};
|
|
34
38
|
function outputContainsPrompt(output) {
|
|
35
|
-
const lines = output.split(
|
|
39
|
+
const lines = output.split("\n");
|
|
36
40
|
for (let i = lines.length - 1; i >= 0; i--) {
|
|
37
41
|
const line = lines[i].trim();
|
|
38
|
-
if (line ===
|
|
42
|
+
if (line === "")
|
|
39
43
|
continue;
|
|
40
44
|
return line.includes(MCP_PROMPT.trim());
|
|
41
45
|
}
|
|
42
46
|
return false;
|
|
43
47
|
}
|
|
44
48
|
function stripPrompts(output) {
|
|
45
|
-
const lines = output.split(
|
|
49
|
+
const lines = output.split("\n");
|
|
46
50
|
const cleaned = [];
|
|
47
51
|
for (const line of lines) {
|
|
48
52
|
if (line.trim() === MCP_PROMPT.trim())
|
|
49
53
|
continue;
|
|
50
54
|
if (line.trimEnd().endsWith(MCP_PROMPT.trim())) {
|
|
51
|
-
cleaned.push(line.trimEnd().replace(MCP_PROMPT.trim(),
|
|
55
|
+
cleaned.push(line.trimEnd().replace(MCP_PROMPT.trim(), "").trimEnd());
|
|
52
56
|
}
|
|
53
57
|
else {
|
|
54
58
|
cleaned.push(line);
|
|
55
59
|
}
|
|
56
60
|
}
|
|
57
|
-
return cleaned.join(
|
|
61
|
+
return cleaned.join("\n").trimEnd();
|
|
58
62
|
}
|
|
59
63
|
async function executeOnSession(session_id, command, wait_ms, max_wait_ms, lines, sessionManager, tmuxManager) {
|
|
60
64
|
const session = sessionManager.get(session_id);
|
|
61
65
|
if (!session) {
|
|
62
|
-
return { session_id, host:
|
|
66
|
+
return { session_id, host: "unknown", status: "error", error: "Session not found" };
|
|
63
67
|
}
|
|
64
68
|
if (isReadOnlyMode(session.host)) {
|
|
65
|
-
return {
|
|
69
|
+
return {
|
|
70
|
+
session_id,
|
|
71
|
+
host: session.host,
|
|
72
|
+
status: "error",
|
|
73
|
+
error: `Host '${session.host}' is in read-only mode`,
|
|
74
|
+
};
|
|
66
75
|
}
|
|
67
76
|
try {
|
|
68
77
|
await tmuxManager.sendCommand(session.ssh, session.tmuxSession, command);
|
|
69
78
|
}
|
|
70
79
|
catch (err) {
|
|
71
|
-
return { session_id, host: session.host, status:
|
|
80
|
+
return { session_id, host: session.host, status: "error", error: `Send failed: ${err.message}` };
|
|
72
81
|
}
|
|
73
82
|
const pollInterval = 250;
|
|
74
83
|
let elapsed = 0;
|
|
@@ -76,7 +85,7 @@ async function executeOnSession(session_id, command, wait_ms, max_wait_ms, lines
|
|
|
76
85
|
await new Promise((r) => setTimeout(r, wait_ms));
|
|
77
86
|
elapsed += wait_ms;
|
|
78
87
|
}
|
|
79
|
-
let output =
|
|
88
|
+
let output = "";
|
|
80
89
|
let stabilized = false;
|
|
81
90
|
while (elapsed < max_wait_ms) {
|
|
82
91
|
try {
|
|
@@ -86,7 +95,9 @@ async function executeOnSession(session_id, command, wait_ms, max_wait_ms, lines
|
|
|
86
95
|
break;
|
|
87
96
|
}
|
|
88
97
|
}
|
|
89
|
-
catch {
|
|
98
|
+
catch {
|
|
99
|
+
/* retry */
|
|
100
|
+
}
|
|
90
101
|
await new Promise((r) => setTimeout(r, pollInterval));
|
|
91
102
|
elapsed += pollInterval;
|
|
92
103
|
}
|
|
@@ -94,7 +105,7 @@ async function executeOnSession(session_id, command, wait_ms, max_wait_ms, lines
|
|
|
94
105
|
return {
|
|
95
106
|
session_id,
|
|
96
107
|
host: session.host,
|
|
97
|
-
status: stabilized ?
|
|
108
|
+
status: stabilized ? "success" : "timeout",
|
|
98
109
|
output: cleaned,
|
|
99
110
|
stabilized,
|
|
100
111
|
};
|
|
@@ -102,12 +113,15 @@ async function executeOnSession(session_id, command, wait_ms, max_wait_ms, lines
|
|
|
102
113
|
export async function handleGroupExec(args, sessionManager, tmuxManager) {
|
|
103
114
|
const parsed = groupExecSchema.safeParse(args);
|
|
104
115
|
if (!parsed.success) {
|
|
105
|
-
return {
|
|
116
|
+
return {
|
|
117
|
+
content: [{ type: "text", text: `Invalid arguments: ${parsed.error.message}` }],
|
|
118
|
+
isError: true,
|
|
119
|
+
};
|
|
106
120
|
}
|
|
107
121
|
const { session_ids, command, wait_ms, max_wait_ms, lines, parallel } = parsed.data;
|
|
108
122
|
if (isCommandDenied(command)) {
|
|
109
123
|
return {
|
|
110
|
-
content: [{ type:
|
|
124
|
+
content: [{ type: "text", text: `Error: Command '${command}' is denied by security policy` }],
|
|
111
125
|
isError: true,
|
|
112
126
|
};
|
|
113
127
|
}
|
|
@@ -115,7 +129,7 @@ export async function handleGroupExec(args, sessionManager, tmuxManager) {
|
|
|
115
129
|
const missing = uniqueIds.filter((id) => !sessionManager.has(id));
|
|
116
130
|
if (missing.length > 0) {
|
|
117
131
|
return {
|
|
118
|
-
content: [{ type:
|
|
132
|
+
content: [{ type: "text", text: `Error: Sessions not found: ${missing.join(", ")}` }],
|
|
119
133
|
isError: true,
|
|
120
134
|
};
|
|
121
135
|
}
|
|
@@ -129,13 +143,14 @@ export async function handleGroupExec(args, sessionManager, tmuxManager) {
|
|
|
129
143
|
results.push(await executeOnSession(id, command, wait_ms, max_wait_ms, lines, sessionManager, tmuxManager));
|
|
130
144
|
}
|
|
131
145
|
}
|
|
132
|
-
const succeeded = results.filter((r) => r.status ===
|
|
133
|
-
const failed = results.filter((r) => r.status ===
|
|
134
|
-
const timedOut = results.filter((r) => r.status ===
|
|
135
|
-
logger.info({ command, sessions: uniqueIds.length, succeeded, failed, timedOut },
|
|
146
|
+
const succeeded = results.filter((r) => r.status === "success").length;
|
|
147
|
+
const failed = results.filter((r) => r.status === "error").length;
|
|
148
|
+
const timedOut = results.filter((r) => r.status === "timeout").length;
|
|
149
|
+
logger.info({ command, sessions: uniqueIds.length, succeeded, failed, timedOut }, "Group exec complete");
|
|
136
150
|
return {
|
|
137
|
-
content: [
|
|
138
|
-
|
|
151
|
+
content: [
|
|
152
|
+
{
|
|
153
|
+
type: "text",
|
|
139
154
|
text: JSON.stringify({
|
|
140
155
|
command,
|
|
141
156
|
sessions_targeted: uniqueIds.length,
|
|
@@ -144,7 +159,8 @@ export async function handleGroupExec(args, sessionManager, tmuxManager) {
|
|
|
144
159
|
timed_out: timedOut,
|
|
145
160
|
results,
|
|
146
161
|
}, null, 2),
|
|
147
|
-
}
|
|
162
|
+
},
|
|
163
|
+
],
|
|
148
164
|
};
|
|
149
165
|
}
|
|
150
166
|
//# sourceMappingURL=group_exec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group_exec.js","sourceRoot":"","sources":["../../src/tools/group_exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAe,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"group_exec.js","sourceRoot":"","sources":["../../src/tools/group_exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { z } from
|
|
2
|
-
import { SessionManager } from
|
|
3
|
-
import { SSHManager } from
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { SessionManager } from "../core/SessionManager.js";
|
|
3
|
+
import { SSHManager } from "../core/SSHManager.js";
|
|
4
4
|
export declare const healthCheckSchema: z.ZodObject<{
|
|
5
5
|
session_id: z.ZodString;
|
|
6
6
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health_check.d.ts","sourceRoot":"","sources":["../../src/tools/health_check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,eAAO,MAAM,iBAAiB;;;;;;EAE5B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;CAc3B,CAAC;AAcF,wBAAsB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"health_check.d.ts","sourceRoot":"","sources":["../../src/tools/health_check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,eAAO,MAAM,iBAAiB;;;;;;EAE5B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;CAc3B,CAAC;AAcF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU;;;;;;;;;;;;GAmJ5G"}
|