@judaharagao/opencode-ssh 1.0.0 → 1.2.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.
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Per-host rate limiting for command execution.
3
+ * Guards against runaway loops hammering the same remote server.
4
+ */
5
+ export interface RateLimiterOptions {
6
+ /** Maximum commands allowed per host per minute. */
7
+ maxPerMinute: number;
8
+ /** Minimum number of seconds between two commands on the same host. */
9
+ cooldownSeconds: number;
10
+ /** Clock for deterministic tests (defaults to Date.now). */
11
+ now?: () => number;
12
+ }
13
+ export interface RateLimitResult {
14
+ allowed: boolean;
15
+ reason?: string;
16
+ retryAfterSeconds?: number;
17
+ }
18
+ export declare class RateLimiter {
19
+ private windows;
20
+ private readonly maxPerMinute;
21
+ private readonly cooldownSeconds;
22
+ private readonly nowFn;
23
+ constructor(options: RateLimiterOptions);
24
+ private now;
25
+ /** Check whether a command for `host` may run right now, without consuming the token. */
26
+ check(host: string): RateLimitResult;
27
+ /** Record that a command for `host` was executed (consumes capacity). */
28
+ record(host: string, executed: boolean): void;
29
+ /** Reset all windows (useful for tests / session cleanup). */
30
+ reset(): void;
31
+ }
32
+ //# sourceMappingURL=ratelimit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratelimit.d.ts","sourceRoot":"","sources":["../../src/ssh/ratelimit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAA;IACpB,uEAAuE;IACvE,eAAe,EAAE,MAAM,CAAA;IACvB,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBAExB,OAAO,EAAE,kBAAkB;IAMvC,OAAO,CAAC,GAAG;IAIX,yFAAyF;IACzF,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IA6BpC,yEAAyE;IACzE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAkB7C,8DAA8D;IAC9D,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Per-host rate limiting for command execution.
3
+ * Guards against runaway loops hammering the same remote server.
4
+ */
5
+ export class RateLimiter {
6
+ windows = new Map();
7
+ maxPerMinute;
8
+ cooldownSeconds;
9
+ nowFn;
10
+ constructor(options) {
11
+ this.maxPerMinute = options.maxPerMinute;
12
+ this.cooldownSeconds = options.cooldownSeconds;
13
+ this.nowFn = options.now ?? Date.now;
14
+ }
15
+ now() {
16
+ return this.nowFn();
17
+ }
18
+ /** Check whether a command for `host` may run right now, without consuming the token. */
19
+ check(host) {
20
+ const now = this.now();
21
+ const window = this.windows.get(host);
22
+ if (this.cooldownSeconds > 0 && window) {
23
+ const elapsed = (now - window.lastRun) / 1000;
24
+ if (elapsed < this.cooldownSeconds) {
25
+ const wait = Math.ceil(this.cooldownSeconds - elapsed);
26
+ return { allowed: false, reason: `Cooldown active for host "${host}"`, retryAfterSeconds: wait };
27
+ }
28
+ }
29
+ if (!window)
30
+ return { allowed: true };
31
+ const windowMs = 60_000;
32
+ const elapsed = (now - window.windowStart) / 1000;
33
+ if (elapsed >= 60) {
34
+ return { allowed: true };
35
+ }
36
+ if (window.count >= this.maxPerMinute) {
37
+ const wait = Math.max(1, Math.ceil(60 - elapsed));
38
+ return { allowed: false, reason: `Rate limit exceeded for host "${host}"`, retryAfterSeconds: wait };
39
+ }
40
+ return { allowed: true };
41
+ }
42
+ /** Record that a command for `host` was executed (consumes capacity). */
43
+ record(host, executed) {
44
+ const now = this.now();
45
+ let window = this.windows.get(host);
46
+ if (!window) {
47
+ window = { count: 0, windowStart: now, lastRun: now };
48
+ this.windows.set(host, window);
49
+ }
50
+ if (now - window.windowStart >= 60_000) {
51
+ window.count = 0;
52
+ window.windowStart = now;
53
+ }
54
+ if (executed)
55
+ window.count++;
56
+ window.lastRun = now;
57
+ }
58
+ /** Reset all windows (useful for tests / session cleanup). */
59
+ reset() {
60
+ this.windows.clear();
61
+ }
62
+ }
63
+ //# sourceMappingURL=ratelimit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratelimit.js","sourceRoot":"","sources":["../../src/ssh/ratelimit.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -3,5 +3,11 @@ import type { SecurityMode } from "./config/schema.js";
3
3
  /**
4
4
  * Create all SSH tools for the plugin.
5
5
  */
6
- export declare function createSshTools(mode?: SecurityMode, maxSessions?: number, defaultTimeout?: number, extraBlocklist?: string[]): Record<string, ToolDefinition>;
6
+ export declare function createSshTools(mode?: SecurityMode, maxSessions?: number, defaultTimeout?: number, extraBlocklist?: string[], sshConfigPath?: string, autoConnect?: boolean, opts?: {
7
+ strictHostKey?: boolean;
8
+ knownHostsPath?: string;
9
+ rateLimitPerMinute?: number;
10
+ cooldownSeconds?: number;
11
+ autoReconnect?: boolean;
12
+ }): Record<string, ToolDefinition>;
7
13
  //# sourceMappingURL=tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAe/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAatD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,GAAE,YAAqB,EAC3B,WAAW,GAAE,MAAU,EACvB,cAAc,GAAE,MAAW,EAC3B,cAAc,GAAE,MAAM,EAAO,GAC5B,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAmnBhC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAwB/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AA4GtD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,GAAE,YAAqB,EAC3B,WAAW,GAAE,MAAU,EACvB,cAAc,GAAE,MAAW,EAC3B,cAAc,GAAE,MAAM,EAAO,EAC7B,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,GAAE,OAAe,EAC5B,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9I,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAurBhC"}
package/dist/tools.js CHANGED
@@ -5,82 +5,190 @@ import { validateCommand } from "./security/validator.js";
5
5
  import { getPolicy, addBlocklistPattern, removeBlocklistPattern, addAllowlistPattern, removeAllowlistPattern } from "./security/policy.js";
6
6
  import { readAuditLog, formatAuditLog, getAuditStats } from "./ssh/audit.js";
7
7
  import { sanitizeHost, sanitizeUsername, sanitizePath } from "./ssh/sanitizer.js";
8
+ import { loadSshConfig, findHostConfig, getAutoConnectHosts, expandHomePath, parseProxyJump, } from "./ssh/config.js";
9
+ import { RateLimiter } from "./ssh/ratelimit.js";
8
10
  import { formatExecResult, formatSessionList, formatConnectResult, formatDisconnectResult, formatCheckResult, formatSecurityPolicy, } from "./display/formatter.js";
9
- // ── Shared session manager (one per plugin instance) ──
10
- let sessionManager = null;
11
- function getManager(maxSessions = 5) {
12
- if (!sessionManager) {
13
- sessionManager = new SshSessionManager({ maxSessions });
11
+ /**
12
+ * Build an ssh.connect connection config, applying defaults from the
13
+ * ~/.ssh/config file (alias HostName, User, Port, IdentityFile,
14
+ * ProxyJump, ProxyCommand).
15
+ */
16
+ function resolveHostConfig(args, opts = {}) {
17
+ const loaded = loadSshConfig(opts.sshConfigPath);
18
+ const entry = loaded.entries.length
19
+ ? findHostConfig(loaded.entries, args.host)
20
+ : undefined;
21
+ const displayHost = args.host;
22
+ const realHost = entry?.hostName && entry.hostName !== args.host ? entry.hostName : args.host;
23
+ const port = args.port || entry?.port || 22;
24
+ const username = args.username || entry?.user;
25
+ const authMethod = args.auth_method || (entry?.identityFile ? "key" : "password");
26
+ const keyPath = args.key_path || (entry?.identityFile ? expandHomePath(entry.identityFile) : undefined);
27
+ const alias = args.alias || (realHost !== args.host ? args.host : undefined);
28
+ // ProxyJump / ProxyCommand from the ssh config
29
+ let proxy;
30
+ if (entry?.proxyCommand) {
31
+ proxy = { command: entry.proxyCommand };
32
+ }
33
+ else if (entry?.proxyJump) {
34
+ proxy = {
35
+ jumps: parseProxyJump(entry.proxyJump, username, keyPath),
36
+ };
37
+ }
38
+ return {
39
+ config: {
40
+ host: realHost,
41
+ port,
42
+ username,
43
+ authMethod,
44
+ password: args.password,
45
+ keyPath,
46
+ passphrase: args.passphrase,
47
+ alias,
48
+ timeout: 10000,
49
+ strictHostKey: opts.strictHostKey,
50
+ knownHostsPath: opts.knownHostsPath,
51
+ sshConfigPath: opts.sshConfigPath,
52
+ proxy,
53
+ autoReconnect: opts.autoReconnect ?? true,
54
+ },
55
+ displayHost,
56
+ resolvedFrom: entry ? loaded.path : undefined,
57
+ sshConfigExists: loaded.exists,
58
+ };
59
+ }
60
+ /** Wait helper for auto-connect retries. */
61
+ function sleep(ms) {
62
+ return new Promise((r) => setTimeout(r, ms));
63
+ }
64
+ /**
65
+ * Auto-connect to every ssh config host that resolves to a real HostName.
66
+ * Best-effort with retry/backoff: each host is attempted up to MAX_ATTEMPTS
67
+ * times with increasing delays, and individual failures are swallowed so
68
+ * the plugin always loads.
69
+ */
70
+ async function startAutoConnect(manager, sshConfigPath) {
71
+ const MAX_ATTEMPTS = 3;
72
+ const hosts = getAutoConnectHosts(sshConfigPath);
73
+ for (const host of hosts) {
74
+ for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
75
+ try {
76
+ await manager.createSession({
77
+ host: host.hostName,
78
+ port: host.port || 22,
79
+ username: host.user || process.env.USER || process.env.USERNAME || "root",
80
+ authMethod: host.identityFile ? "key" : "password",
81
+ keyPath: host.identityFile ? expandHomePath(host.identityFile) : undefined,
82
+ alias: host.alias,
83
+ timeout: 10000,
84
+ });
85
+ break; // connected
86
+ }
87
+ catch {
88
+ if (attempt < MAX_ATTEMPTS) {
89
+ await sleep(1000 * attempt); // backoff: 1s, 2s
90
+ }
91
+ }
92
+ }
14
93
  }
15
- return sessionManager;
16
94
  }
17
95
  /**
18
96
  * Create all SSH tools for the plugin.
19
97
  */
20
- export function createSshTools(mode = "full", maxSessions = 5, defaultTimeout = 30, extraBlocklist = []) {
98
+ export function createSshTools(mode = "full", maxSessions = 5, defaultTimeout = 30, extraBlocklist = [], sshConfigPath, autoConnect = false, opts = {}) {
99
+ const sessionManager = new SshSessionManager({ maxSessions });
100
+ const rateLimiter = new RateLimiter({
101
+ maxPerMinute: opts.rateLimitPerMinute ?? 120,
102
+ cooldownSeconds: opts.cooldownSeconds ?? 0,
103
+ });
104
+ const sshOpts = {
105
+ sshConfigPath,
106
+ strictHostKey: opts.strictHostKey ?? false,
107
+ knownHostsPath: opts.knownHostsPath,
108
+ autoReconnect: opts.autoReconnect ?? true,
109
+ };
110
+ if (autoConnect) {
111
+ // Best-effort auto-connect to hosts defined in the ssh config with
112
+ // retry/backoff. Non-blocking: failures are swallowed and do not
113
+ // prevent the plugin from loading.
114
+ void startAutoConnect(sessionManager, sshConfigPath);
115
+ }
21
116
  return {
22
117
  // ═══════════════════════════════════════════════════════════════
23
118
  // ssh.connect — Establish SSH connection
24
119
  // ═══════════════════════════════════════════════════════════════
25
120
  "ssh.connect": tool({
26
121
  description: "Establish an SSH connection to a remote server. Returns a session_id for use with other ssh.* tools. " +
27
- "Supports password and key-based authentication. Credentials are never stored in logs or output.",
122
+ "Supports password and key-based authentication. Credentials are never stored in logs or output. " +
123
+ "If ssh_config_path is set, host aliases from the ssh config are resolved and their " +
124
+ "User/Port/IdentityFile defaults are applied automatically.",
28
125
  args: {
29
- host: tool.schema.string().describe("Remote server hostname or IP address"),
30
- port: tool.schema.number().optional().describe("SSH port (default: 22)"),
31
- username: tool.schema.string().describe("SSH username"),
32
- auth_method: tool.schema.enum(["password", "key"]).describe("Authentication method"),
126
+ host: tool.schema.string().describe("Remote server hostname, IP, or ssh config alias"),
127
+ port: tool.schema.number().optional().describe("SSH port (default: 22, or port from ssh config)"),
128
+ username: tool.schema.string().optional().describe("SSH username (default: from ssh config)"),
129
+ auth_method: tool.schema.enum(["password", "key"]).optional().describe("Authentication method (default: key if an identity file is configured, else password)"),
33
130
  password: tool.schema.string().optional().describe("Password (only for password auth)"),
34
- key_path: tool.schema.string().optional().describe("Path to private key file (default: ~/.ssh/id_rsa)"),
131
+ key_path: tool.schema.string().optional().describe("Path to private key file (default: identity file from ssh config, else ~/.ssh/id_rsa)"),
35
132
  passphrase: tool.schema.string().optional().describe("Passphrase for the private key"),
36
133
  alias: tool.schema.string().optional().describe("Friendly name for this session"),
37
134
  },
38
135
  async execute(args, ctx) {
136
+ // ── Resolve defaults from the ssh config (alias, user, port, identity, proxy) ──
137
+ const { config: resolvedConfig, displayHost, resolvedFrom, sshConfigExists } = resolveHostConfig(args, sshOpts);
39
138
  // ── Input validation ──
40
- const hostCheck = sanitizeHost(args.host);
139
+ const hostCheck = sanitizeHost(displayHost);
41
140
  if (!hostCheck.clean) {
42
141
  return `❌ Invalid host: ${hostCheck.reason}`;
43
142
  }
44
- const userCheck = sanitizeUsername(args.username);
45
- if (!userCheck.clean) {
46
- return `❌ Invalid username: ${userCheck.reason}`;
143
+ if (resolvedConfig.username) {
144
+ const userCheck = sanitizeUsername(resolvedConfig.username);
145
+ if (!userCheck.clean) {
146
+ return `❌ Invalid username: ${userCheck.reason}`;
147
+ }
148
+ }
149
+ else {
150
+ return "❌ A username is required. Provide one or add a User directive in your ssh config.";
47
151
  }
152
+ const displayPort = args.port || resolvedConfig.port || 22;
48
153
  // ── Ask for permission ──
49
154
  await ctx.ask({
50
155
  permission: "ssh.connect",
51
- patterns: [`${args.username}@${args.host}:${args.port || 22}`],
52
- always: [`${args.username}@${args.host}:${args.port || 22}`],
156
+ patterns: [`${resolvedConfig.username}@${displayHost}:${displayPort}`],
157
+ always: [`${resolvedConfig.username}@${displayHost}:${displayPort}`],
53
158
  metadata: {
54
- host: args.host,
55
- port: args.port || 22,
56
- username: args.username,
57
- auth_method: args.auth_method,
159
+ host: displayHost,
160
+ resolved_host: resolvedConfig.host !== displayHost ? resolvedConfig.host : undefined,
161
+ port: displayPort,
162
+ username: resolvedConfig.username,
163
+ auth_method: resolvedConfig.authMethod,
58
164
  alias: args.alias,
165
+ ssh_config: resolvedFrom || undefined,
59
166
  },
60
167
  });
61
168
  // ── Connect ──
62
- const manager = getManager(maxSessions);
63
- const config = {
64
- host: args.host,
65
- port: args.port || 22,
66
- username: args.username,
67
- authMethod: args.auth_method,
68
- password: args.password,
69
- keyPath: args.key_path,
70
- passphrase: args.passphrase,
71
- alias: args.alias,
72
- timeout: 10000,
73
- };
169
+ const manager = sessionManager;
74
170
  try {
75
- const sessionId = await manager.createSession(config);
76
- return formatConnectResult(sessionId, args.host, args.port || 22, args.username, args.alias);
171
+ const sessionId = await manager.createSession(resolvedConfig);
172
+ const lines = [
173
+ formatConnectResult(sessionId, displayHost, displayPort, resolvedConfig.username, args.alias),
174
+ ];
175
+ if (resolvedConfig.host !== displayHost) {
176
+ lines.push(`> Resolved via ssh config: ${displayHost} → ${resolvedConfig.host}`);
177
+ }
178
+ if (sshConfigPath && !sshConfigExists) {
179
+ lines.push(`> ⚠️ Configured ssh config file not found: \`${sshConfigPath}\` — defaults were not applied.`);
180
+ }
181
+ if (resolvedConfig.proxy) {
182
+ lines.push(`> 🛤️ Connecting through proxy (${resolvedConfig.proxy.jumps?.length ?? 0} hop(s))`);
183
+ }
184
+ return lines.join("\n");
77
185
  }
78
186
  catch (error) {
79
187
  const msg = error instanceof Error ? error.message : String(error);
80
188
  return [
81
189
  `## ❌ SSH Connection Failed`,
82
190
  "",
83
- `**Host:** ${args.username}@${args.host}:${args.port || 22}`,
191
+ `**Host:** ${resolvedConfig.username}@${displayHost}:${displayPort}`,
84
192
  `**Error:** ${msg}`,
85
193
  "",
86
194
  "Troubleshooting:",
@@ -107,7 +215,7 @@ export function createSshTools(mode = "full", maxSessions = 5, defaultTimeout =
107
215
  always: [],
108
216
  metadata: { session_id: args.session_id },
109
217
  });
110
- const manager = getManager(maxSessions);
218
+ const manager = sessionManager;
111
219
  const closed = await manager.closeSession(args.session_id);
112
220
  if (!closed) {
113
221
  return `Session \`${args.session_id}\` not found or already closed.`;
@@ -122,7 +230,7 @@ export function createSshTools(mode = "full", maxSessions = 5, defaultTimeout =
122
230
  description: "List all active SSH sessions with their status, host, and uptime.",
123
231
  args: {},
124
232
  async execute(_args, _ctx) {
125
- const manager = getManager(maxSessions);
233
+ const manager = sessionManager;
126
234
  const sessions = manager.listSessions();
127
235
  return formatSessionList(sessions);
128
236
  },
@@ -144,13 +252,24 @@ export function createSshTools(mode = "full", maxSessions = 5, defaultTimeout =
144
252
  },
145
253
  async execute(args, ctx) {
146
254
  // ── Validate session ──
147
- const manager = getManager(maxSessions);
255
+ const manager = sessionManager;
148
256
  const connection = manager.getSession(args.session_id);
149
257
  if (!connection) {
150
258
  return `❌ Session \`${args.session_id}\` not found. Use ssh.list_sessions to see active sessions.`;
151
259
  }
152
- if (!connection.connected) {
153
- return `❌ Session \`${args.session_id}\` is disconnected. Reconnect with ssh.connect.`;
260
+ // ── Rate limit per host ──
261
+ const hostKey = connection.config.alias || connection.config.host;
262
+ const rateCheck = rateLimiter.check(hostKey);
263
+ if (!rateCheck.allowed) {
264
+ return [
265
+ `## ⏳ Command Rate Limited`,
266
+ "",
267
+ `**Host:** \`${hostKey}\``,
268
+ `**Reason:** ${rateCheck.reason}`,
269
+ rateCheck.retryAfterSeconds ? `**Retry after:** ~${rateCheck.retryAfterSeconds}s` : "",
270
+ ]
271
+ .filter(Boolean)
272
+ .join("\n");
154
273
  }
155
274
  // ── Validate command against blocklist BEFORE asking for permission ──
156
275
  const validation = validateCommand(args.command, mode, extraBlocklist);
@@ -210,11 +329,17 @@ export function createSshTools(mode = "full", maxSessions = 5, defaultTimeout =
210
329
  });
211
330
  }
212
331
  // ── Execute ──
213
- const result = await executeCommand(connection, args.command, mode, extraBlocklist, args.session_id, {
214
- cwd: args.cwd,
215
- timeout: args.timeout || defaultTimeout,
216
- sudo: args.sudo,
217
- }, ctx.directory);
332
+ let result;
333
+ try {
334
+ result = await executeCommand(connection, args.command, mode, extraBlocklist, args.session_id, {
335
+ cwd: args.cwd,
336
+ timeout: args.timeout || defaultTimeout,
337
+ sudo: args.sudo,
338
+ }, ctx.directory);
339
+ }
340
+ finally {
341
+ rateLimiter.record(hostKey, true);
342
+ }
218
343
  return formatExecResult(result);
219
344
  },
220
345
  }),
@@ -233,11 +358,25 @@ export function createSshTools(mode = "full", maxSessions = 5, defaultTimeout =
233
358
  timeout: tool.schema.number().optional().describe("Timeout per command in seconds"),
234
359
  },
235
360
  async execute(args, ctx) {
236
- const manager = getManager(maxSessions);
361
+ const manager = sessionManager;
237
362
  const connection = manager.getSession(args.session_id);
238
363
  if (!connection) {
239
364
  return `❌ Session \`${args.session_id}\` not found.`;
240
365
  }
366
+ // ── Rate limit per host ──
367
+ const batchHostKey = connection.config.alias || connection.config.host;
368
+ const batchRateCheck = rateLimiter.check(batchHostKey);
369
+ if (!batchRateCheck.allowed) {
370
+ return [
371
+ `## ⏳ Batch Rate Limited`,
372
+ "",
373
+ `**Host:** \`${batchHostKey}\``,
374
+ `**Reason:** ${batchRateCheck.reason}`,
375
+ batchRateCheck.retryAfterSeconds ? `**Retry after:** ~${batchRateCheck.retryAfterSeconds}s` : "",
376
+ ]
377
+ .filter(Boolean)
378
+ .join("\n");
379
+ }
241
380
  const commands = args.commands.split("\n").filter((c) => c.trim());
242
381
  if (commands.length === 0) {
243
382
  return "No commands to execute.";
@@ -294,10 +433,16 @@ export function createSshTools(mode = "full", maxSessions = 5, defaultTimeout =
294
433
  const results = [];
295
434
  const stopOnError = args.stop_on_error !== false;
296
435
  for (const cmd of commands) {
297
- const result = await executeCommand(connection, cmd.trim(), mode, extraBlocklist, args.session_id, {
298
- cwd: args.cwd,
299
- timeout: args.timeout || defaultTimeout,
300
- }, ctx.directory);
436
+ let result;
437
+ try {
438
+ result = await executeCommand(connection, cmd.trim(), mode, extraBlocklist, args.session_id, {
439
+ cwd: args.cwd,
440
+ timeout: args.timeout || defaultTimeout,
441
+ }, ctx.directory);
442
+ }
443
+ finally {
444
+ rateLimiter.record(batchHostKey, true);
445
+ }
301
446
  results.push(result);
302
447
  if (stopOnError && result.exitCode !== 0) {
303
448
  break;
@@ -331,7 +476,7 @@ export function createSshTools(mode = "full", maxSessions = 5, defaultTimeout =
331
476
  remote_path: tool.schema.string().describe("Remote destination path"),
332
477
  },
333
478
  async execute(args, ctx) {
334
- const manager = getManager(maxSessions);
479
+ const manager = sessionManager;
335
480
  const connection = manager.getSession(args.session_id);
336
481
  if (!connection) {
337
482
  return `❌ Session \`${args.session_id}\` not found.`;
@@ -389,7 +534,7 @@ export function createSshTools(mode = "full", maxSessions = 5, defaultTimeout =
389
534
  local_path: tool.schema.string().describe("Local destination path"),
390
535
  },
391
536
  async execute(args, ctx) {
392
- const manager = getManager(maxSessions);
537
+ const manager = sessionManager;
393
538
  const connection = manager.getSession(args.session_id);
394
539
  if (!connection) {
395
540
  return `❌ Session \`${args.session_id}\` not found.`;
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@judaharagao/opencode-ssh",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "SSH access plugin for OpenCode - secure remote command execution with command blocking",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -59,6 +59,6 @@
59
59
  "typescript": "^5.5.0"
60
60
  },
61
61
  "peerDependencies": {
62
- "@opencode-ai/plugin": "latest"
62
+ "@opencode-ai/plugin": "^1.18.0"
63
63
  }
64
64
  }