remote-access-mcp 3.0.1 → 3.1.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.
Files changed (91) hide show
  1. package/AGENTS.md +5 -4
  2. package/CHANGELOG.md +45 -0
  3. package/CONTRIBUTING.md +35 -0
  4. package/README.fa.md +27 -6
  5. package/README.md +42 -7
  6. package/SECURITY.md +41 -0
  7. package/dist/cli/main.d.ts.map +1 -1
  8. package/dist/cli/main.js +7 -3
  9. package/dist/cli/main.js.map +1 -1
  10. package/dist/core/approvals.d.ts +12 -0
  11. package/dist/core/approvals.d.ts.map +1 -0
  12. package/dist/core/approvals.js +7 -0
  13. package/dist/core/approvals.js.map +1 -0
  14. package/dist/core/config.d.ts +10 -0
  15. package/dist/core/config.d.ts.map +1 -1
  16. package/dist/core/config.js +3 -0
  17. package/dist/core/config.js.map +1 -1
  18. package/dist/core/integrations.d.ts +16 -0
  19. package/dist/core/integrations.d.ts.map +1 -1
  20. package/dist/core/integrations.js +45 -32
  21. package/dist/core/integrations.js.map +1 -1
  22. package/dist/core/jobs.d.ts +35 -0
  23. package/dist/core/jobs.d.ts.map +1 -0
  24. package/dist/core/jobs.js +122 -0
  25. package/dist/core/jobs.js.map +1 -0
  26. package/dist/core/policy.d.ts +5 -0
  27. package/dist/core/policy.d.ts.map +1 -1
  28. package/dist/core/policy.js +23 -1
  29. package/dist/core/policy.js.map +1 -1
  30. package/dist/core/webcrypto.d.ts +2 -0
  31. package/dist/core/webcrypto.d.ts.map +1 -0
  32. package/dist/core/webcrypto.js +15 -0
  33. package/dist/core/webcrypto.js.map +1 -0
  34. package/dist/server/app.d.ts +1 -0
  35. package/dist/server/app.d.ts.map +1 -1
  36. package/dist/server/app.js +6 -2
  37. package/dist/server/app.js.map +1 -1
  38. package/dist/server/run.d.ts.map +1 -1
  39. package/dist/server/run.js +2 -0
  40. package/dist/server/run.js.map +1 -1
  41. package/dist/tools/changes.d.ts +4 -0
  42. package/dist/tools/changes.d.ts.map +1 -0
  43. package/dist/tools/changes.js +33 -0
  44. package/dist/tools/changes.js.map +1 -0
  45. package/dist/tools/database.d.ts +4 -0
  46. package/dist/tools/database.d.ts.map +1 -0
  47. package/dist/tools/database.js +29 -0
  48. package/dist/tools/database.js.map +1 -0
  49. package/dist/tools/diagnostics.d.ts +4 -0
  50. package/dist/tools/diagnostics.d.ts.map +1 -0
  51. package/dist/tools/diagnostics.js +23 -0
  52. package/dist/tools/diagnostics.js.map +1 -0
  53. package/dist/tools/index.d.ts.map +1 -1
  54. package/dist/tools/index.js +17 -0
  55. package/dist/tools/index.js.map +1 -1
  56. package/dist/tools/{fleet.d.ts → jobs.d.ts} +2 -2
  57. package/dist/tools/jobs.d.ts.map +1 -0
  58. package/dist/tools/jobs.js +42 -0
  59. package/dist/tools/jobs.js.map +1 -0
  60. package/dist/tools/monitoring.d.ts +4 -0
  61. package/dist/tools/monitoring.d.ts.map +1 -0
  62. package/dist/tools/monitoring.js +16 -0
  63. package/dist/tools/monitoring.js.map +1 -0
  64. package/dist/tools/plugins.d.ts +5 -0
  65. package/dist/tools/plugins.d.ts.map +1 -0
  66. package/dist/tools/plugins.js +40 -0
  67. package/dist/tools/plugins.js.map +1 -0
  68. package/dist/tools/resources-prompts.d.ts +4 -0
  69. package/dist/tools/resources-prompts.d.ts.map +1 -0
  70. package/dist/tools/resources-prompts.js +20 -0
  71. package/dist/tools/resources-prompts.js.map +1 -0
  72. package/dist/tools/shell.d.ts.map +1 -1
  73. package/dist/tools/shell.js +24 -2
  74. package/dist/tools/shell.js.map +1 -1
  75. package/dist/tools/transfer.d.ts +4 -0
  76. package/dist/tools/transfer.d.ts.map +1 -0
  77. package/dist/tools/transfer.js +14 -0
  78. package/dist/tools/transfer.js.map +1 -0
  79. package/docs/ai/tools-and-cli.md +24 -2
  80. package/package.json +16 -9
  81. package/dist/cli.d.ts +0 -3
  82. package/dist/cli.d.ts.map +0 -1
  83. package/dist/cli.js +0 -7
  84. package/dist/cli.js.map +0 -1
  85. package/dist/core/fleet.d.ts +0 -71
  86. package/dist/core/fleet.d.ts.map +0 -1
  87. package/dist/core/fleet.js +0 -148
  88. package/dist/core/fleet.js.map +0 -1
  89. package/dist/tools/fleet.d.ts.map +0 -1
  90. package/dist/tools/fleet.js +0 -39
  91. package/dist/tools/fleet.js.map +0 -1
@@ -0,0 +1,20 @@
1
+ import os from 'node:os';
2
+ import fs from 'node:fs';
3
+ import { assertToolPermitted } from '../core/policy.js';
4
+ import { dataDir } from '../core/platform.js';
5
+ export function registerResourcesAndPrompts(server, ctx) {
6
+ const gate = (tool) => assertToolPermitted({ tool, scopes: ctx.token.scopes, readOnly: ctx.readOnly });
7
+ const json = (x) => JSON.stringify(x, null, 2);
8
+ server.registerResource('system_resource', 'ramcp://system', { description: 'Current local system information', mimeType: 'application/json' }, async () => ({ contents: [{ uri: 'ramcp://system', mimeType: 'application/json', text: json({ hostname: os.hostname(), platform: process.platform, release: os.release(), arch: os.arch(), cpus: os.cpus().length, totalMemory: os.totalmem(), freeMemory: os.freemem(), uptime: os.uptime() }) }] }));
9
+ server.registerResource('services_resource', 'ramcp://services', { description: 'Configured service and runtime overview', mimeType: 'application/json' }, async () => ({ contents: [{ uri: 'ramcp://services', mimeType: 'application/json', text: json({ platform: process.platform, pid: process.pid, uptime: process.uptime() }) }] }));
10
+ server.registerResource('network_resource', 'ramcp://network', { description: 'Local network interface information', mimeType: 'application/json' }, async () => ({ contents: [{ uri: 'ramcp://network', mimeType: 'application/json', text: json(os.networkInterfaces()) }] }));
11
+ server.registerResource('projects_resource', 'ramcp://projects', { description: 'Local Remote Access MCP data directory overview', mimeType: 'application/json' }, async () => ({ contents: [{ uri: 'ramcp://projects', mimeType: 'application/json', text: json({ dataDir: dataDir(), entries: fs.existsSync(dataDir()) ? fs.readdirSync(dataDir()) : [] }) }] }));
12
+ server.registerResource('audit_resource', 'ramcp://audit', { description: 'Recent audit entries for the authenticated operator', mimeType: 'application/json' }, async () => { gate('audit_resource'); const rows = ctx.cfg.audit.enabled ? [] : []; return { contents: [{ uri: 'ramcp://audit', mimeType: 'application/json', text: json(rows) }] }; });
13
+ const prompt = (name, title, description, text) => server.registerPrompt(name, { title, description }, async () => ({ description, messages: [{ role: 'user', content: { type: 'text', text } }] }));
14
+ prompt('diagnose_prompt', 'Diagnose Server', 'Systematic server diagnosis', 'Inspect system health, failed services, processes, ports, logs, disk and network. Prefer read-only diagnostics first and summarize evidence before proposing mutations.');
15
+ prompt('deploy_prompt', 'Deploy Project', 'Safe project deployment', 'Inspect the project, run tests/build, create a change snapshot, apply the smallest safe deployment steps, verify service health, and report rollback instructions.');
16
+ prompt('security_audit_prompt', 'Security Audit', 'Local security review', 'Audit exposed ports, permissions, secrets, services and configuration. Do not reveal secrets; report masked findings and prioritize remediation.');
17
+ prompt('inspect_project_prompt', 'Inspect Project', 'Developer project inspection', 'Analyze the project structure, framework, dependencies, Git state, tests and health. Return actionable findings with file paths.');
18
+ server.registerTool('system_resource', { description: 'Return the current system resource as structured JSON.', inputSchema: {} }, async () => { gate('system_resource'); return { content: [{ type: 'text', text: json({ hostname: os.hostname(), platform: process.platform, release: os.release(), cpus: os.cpus().length, totalMemory: os.totalmem(), freeMemory: os.freemem(), uptime: os.uptime() }) }] }; });
19
+ }
20
+ //# sourceMappingURL=resources-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources-prompts.js","sourceRoot":"","sources":["../../src/tools/resources-prompts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOtD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAqG5E"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOtD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAyH5E"}
@@ -1,7 +1,9 @@
1
1
  import { execFile } from 'node:child_process';
2
2
  import { promisify } from 'node:util';
3
3
  import { z } from 'zod';
4
- import { assertToolPermitted } from '../core/policy.js';
4
+ import { assertToolPermitted, assertCommandPolicy } from '../core/policy.js';
5
+ import { AuditLog } from '../core/audit.js';
6
+ import { requestApproval, getApproval, decideApproval } from '../core/approvals.js';
5
7
  import { shellCommand, childEnv, isWindows } from '../core/platform.js';
6
8
  const exec = promisify(execFile);
7
9
  const MAX_OUTPUT = 60_000;
@@ -20,12 +22,20 @@ export function registerShellTools(server, ctx) {
20
22
  command: z.string().describe('Command line to run'),
21
23
  cwd: z.string().optional().describe('Working directory (policy-checked when local)'),
22
24
  timeout_ms: z.number().optional().default(120_000).describe('Timeout in ms (max 600000)'),
25
+ approval_id: z.string().optional().describe('Approval id previously approved by an authorized operator'),
23
26
  },
24
- }, async ({ command, cwd, timeout_ms }) => {
27
+ }, async ({ command, cwd, timeout_ms, approval_id }) => {
25
28
  if (!ctx.token.shell_enabled) {
26
29
  return { content: [{ type: 'text', text: 'Shell execution is disabled for this token. Enable with `ramcp policy shell on`.' }], isError: true };
27
30
  }
28
31
  assertToolPermitted({ tool: 'run_command', scopes: ctx.token.scopes, readOnly: ctx.readOnly, policy: policy(), target: cwd });
32
+ const tokenId = AuditLog.fingerprint(ctx.token.token);
33
+ const approval = approval_id ? getApproval(approval_id, tokenId) : undefined;
34
+ if (ctx.token.approval_mode === 'approval-required' && approval?.status !== 'approved') {
35
+ const pending = requestApproval(tokenId, command, cwd);
36
+ return { content: [{ type: 'text', text: `Approval required. Ask an authorized operator to approve approval_id=${pending.id}, then retry with approval_id.` }], isError: true };
37
+ }
38
+ assertCommandPolicy({ command_allowlist: ctx.token.command_allowlist, approval_mode: 'auto' }, command, true);
29
39
  const timeout = Math.min(timeout_ms, 600_000);
30
40
  const { file, args } = shellCommand(command);
31
41
  try {
@@ -54,6 +64,18 @@ export function registerShellTools(server, ctx) {
54
64
  return { content: [{ type: 'text', text: msg.slice(0, MAX_OUTPUT) }], isError: true };
55
65
  }
56
66
  });
67
+ server.registerTool('approval_decide', {
68
+ description: 'Approve or reject a pending shell command approval request.',
69
+ inputSchema: { id: z.string(), approved: z.boolean() },
70
+ }, async ({ id, approved }) => {
71
+ assertToolPermitted({ tool: 'approval_decide', scopes: ctx.token.scopes, readOnly: ctx.readOnly });
72
+ const requesterId = AuditLog.fingerprint(ctx.token.token);
73
+ const a = getApproval(id, ctx.token.role === 'admin' || ctx.token.role === 'deployer' ? undefined : requesterId);
74
+ if (!a)
75
+ return { content: [{ type: 'text', text: 'Approval not found or not authorized.' }], isError: true };
76
+ decideApproval(id, ctx.token.role === 'admin' || ctx.token.role === 'deployer' ? undefined : requesterId, approved);
77
+ return { content: [{ type: 'text', text: `Approval ${id}: ${approved ? 'approved' : 'rejected'}.` }] };
78
+ });
57
79
  // ---- process_list ---------------------------------------------------------
58
80
  server.registerTool('process_list', {
59
81
  description: 'List running processes with CPU/memory. Uses ps on POSIX, Get-Process on Windows.',
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { ToolContext } from '../core/context.js';
3
+ export declare function registerTransferTools(server: McpServer, ctx: ToolContext): void;
4
+ //# sourceMappingURL=transfer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../src/tools/transfer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,wBAAgB,qBAAqB,CAAC,MAAM,EAAC,SAAS,EAAC,GAAG,EAAC,WAAW,GAAE,IAAI,CAI3E"}
@@ -0,0 +1,14 @@
1
+ import fs from 'node:fs/promises';
2
+ import crypto from 'node:crypto';
3
+ import { z } from 'zod';
4
+ import { assertToolPermitted } from '../core/policy.js';
5
+ const MAX = 32 * 1024 * 1024;
6
+ export function registerTransferTools(server, ctx) {
7
+ const policy = () => ({ allowed_paths: ctx.token.allowed_paths, denied_paths: ctx.token.denied_paths, shell_enabled: ctx.token.shell_enabled });
8
+ server.registerTool('download_file', { description: 'Download a local file as base64 with size and SHA-256 metadata. Binary-safe and path-policy checked.', inputSchema: { path: z.string() } }, async ({ path }) => { assertToolPermitted({ tool: 'download_file', scopes: ctx.token.scopes, readOnly: ctx.readOnly, policy: policy(), target: path }); const st = await fs.stat(path); if (st.size > MAX)
9
+ return { content: [{ type: 'text', text: `File exceeds ${MAX} bytes.` }], isError: true }; const b = await fs.readFile(path); return { content: [{ type: 'text', text: JSON.stringify({ path, size: b.length, sha256: crypto.createHash('sha256').update(b).digest('hex'), encoding: 'base64', data: b.toString('base64') }) }] }; });
10
+ server.registerTool('upload_file', { description: 'Upload base64 data to a local file. Binary-safe, size-limited and path-policy checked.', inputSchema: { path: z.string(), data: z.string().describe('Base64-encoded file content'), sha256: z.string().optional() } }, async ({ path, data, sha256 }) => { assertToolPermitted({ tool: 'upload_file', scopes: ctx.token.scopes, readOnly: ctx.readOnly, policy: policy(), target: path }); const b = Buffer.from(data, 'base64'); if (b.length > MAX)
11
+ return { content: [{ type: 'text', text: `Payload exceeds ${MAX} bytes.` }], isError: true }; const actual = crypto.createHash('sha256').update(b).digest('hex'); if (sha256 && sha256 !== actual)
12
+ return { content: [{ type: 'text', text: 'SHA-256 mismatch; file was not written.' }], isError: true }; await fs.writeFile(path, b, { mode: 0o600 }); return { content: [{ type: 'text', text: JSON.stringify({ path, size: b.length, sha256: actual }) }] }; });
13
+ }
14
+ //# sourceMappingURL=transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/tools/transfer.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  # Tools & CLI Reference
2
2
 
3
- Complete inventory of what the gateway exposes, as of v3.0.0.
4
- Counts: **44 tools / 17 suites**, **17 CLI commands**.
3
+ Complete inventory of what the gateway exposes, as of v3.0.2.
4
+ Counts: **45 built-in tools / 16 suites**. Optional MCP integrations may add additional namespaced tools. CLI commands are documented by group below.
5
5
 
6
6
  Every tool handler runs inside the audit wrapper (app.ts): execution is
7
7
  timed, arguments redacted, outcome appended to the hash chain, webhooks
@@ -105,6 +105,28 @@ Snapshot/rollback are in `MUTATING_TOOLS`.
105
105
  `list_allowed_paths` · `allow_path` · `deny_path` · `shell_enabled`. Mutations
106
106
  persist via `saveConfig` and hot-reload; they cannot touch other tokens.
107
107
 
108
+ ## New operational tools
109
+
110
+ ### Jobs / workers
111
+ - `run_background` — asynchronous shell execution through a bounded worker pool
112
+ - `run_parallel` — queue multiple commands for bounded parallel execution
113
+ - `job_status` / `job_output` / `job_list` / `job_cancel` — inspect and control jobs
114
+
115
+ ### Transfers / safety
116
+ - `upload_file` / `download_file` — binary-safe transfer with SHA-256
117
+ - `approval_decide` — approve or reject sensitive shell operations
118
+ - `change_set_begin` / `change_set_add` / `change_set_status` / `change_set_commit` / `change_set_rollback`
119
+
120
+ ### Diagnostics / data
121
+ - `system_diagnostics` / `diagnose_service`
122
+ - `health_watch` / `health_status` / `health_stop`
123
+ - `database_query` / `database_schema`
124
+
125
+ ### MCP context / extensibility
126
+ - Resources: system, services, network, projects and audit
127
+ - Prompts: diagnose, deploy, security audit and project inspection
128
+ - `plugin_list` / `plugin_install` / `plugin_remove`
129
+
108
130
  ## CLI (`ramcp`)
109
131
 
110
132
  | Command | Subcommands / flags | Notes |
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "remote-access-mcp",
3
- "version": "3.0.1",
4
- "description": "Turn any Linux server into an AI-agent-accessible machine via MCP. ChatGPT, Claude, and Grok connect over HTTPS and control files, shell, git, and more — securely and with zero Python dependencies.",
3
+ "version": "3.1.0",
4
+ "description": "Turn any machine into a secure AI-agent-accessible endpoint via MCP. Connect ChatGPT, Claude, Grok, and other MCP clients to files, shell, git, services, and more.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "remote-access-mcp": "dist/cli.js",
@@ -14,10 +14,13 @@
14
14
  "LICENSE",
15
15
  "install.sh",
16
16
  "AGENTS.md",
17
+ "SECURITY.md",
18
+ "CHANGELOG.md",
19
+ "CONTRIBUTING.md",
17
20
  "docs/ai"
18
21
  ],
19
22
  "engines": {
20
- "node": ">=20.18.1"
23
+ "node": ">=18"
21
24
  },
22
25
  "scripts": {
23
26
  "build": "tsc",
@@ -30,14 +33,18 @@
30
33
  },
31
34
  "keywords": [
32
35
  "mcp",
36
+ "mcp-server",
37
+ "mcp-gateway",
33
38
  "model-context-protocol",
34
- "ai",
35
- "agent",
39
+ "ai-agent",
40
+ "ai-ops",
36
41
  "remote-access",
37
42
  "server-management",
43
+ "infrastructure",
44
+ "devops",
45
+ "linux",
38
46
  "chatgpt",
39
- "claude",
40
- "devops"
47
+ "claude"
41
48
  ],
42
49
  "author": "Amir Ali Manzar (https://amiralimanzar.ir)",
43
50
  "license": "MIT",
@@ -51,13 +58,13 @@
51
58
  "homepage": "https://github.com/AmirAliManzar/remote-access-mcp#readme",
52
59
  "dependencies": {
53
60
  "@modelcontextprotocol/sdk": "^1.20.0",
54
- "@upstash/context7-mcp": "^4.0.4",
55
61
  "better-sqlite3": "^11.6.0",
56
- "codebase-memory-mcp": "^0.10.8",
57
62
  "express": "^4.21.0",
58
63
  "zod": "^3.24.0"
59
64
  },
60
65
  "optionalDependencies": {
66
+ "@upstash/context7-mcp": "^4.0.4",
67
+ "codebase-memory-mcp": "^0.10.8",
61
68
  "context-mode": "^1.0.169"
62
69
  },
63
70
  "devDependencies": {
package/dist/cli.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js DELETED
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env node
2
- import { main } from './cli/main.js';
3
- main(process.argv.slice(2)).catch((e) => {
4
- console.error(e);
5
- process.exit(1);
6
- });
7
- //# sourceMappingURL=cli.js.map
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACtC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,71 +0,0 @@
1
- /**
2
- * Fleet: run tools on remote machines over SSH.
3
- *
4
- * Design decisions, deliberately narrow:
5
- *
6
- * - Outbound SSH only. The gateway machine holds one private key; remote
7
- * machines need nothing installed except an SSH server and a POSIX shell.
8
- * No agent daemons, no listening ports, no new attack surface inbound.
9
- *
10
- * - Per-host allowlists of tools. `ramcp fleet add --tools shell,fs` is the
11
- * whole security model: a host that was never granted a tool group
12
- * refuses it with a clear error. Local-only tools (schedule, policy
13
- * management, ops) ignore `host` entirely.
14
- *
15
- * - File transfer for fs tools is piped over stdin via base64, so writes
16
- * don't touch the remote disk with temp files (which would race, leak
17
- * into other users' listings, or fail on full filesystems).
18
- *
19
- * - SSH_BIN env override exists for tests (fake ssh) and for Windows hosts
20
- * that want a specific OpenSSH path.
21
- */
22
- export interface FleetHost {
23
- name: string;
24
- host: string;
25
- port?: number;
26
- tools: string[];
27
- note?: string;
28
- added: string;
29
- }
30
- /** Tool group → fleet capability check. Local-only groups have no remote path. */
31
- export declare const FLEET_CAPABILITIES: readonly ["shell", "fs", "services", "packages", "logs"];
32
- export declare function isFleetCapability(g: string): boolean;
33
- export declare function sshBin(): string;
34
- export interface SshOpts {
35
- timeoutMs?: number;
36
- stdin?: string;
37
- }
38
- /** Run one command over SSH. Throws on non-zero exit with combined output. */
39
- export declare function sshRun(host: string, port: number | undefined, command: string, opts?: SshOpts): Promise<{
40
- stdout: string;
41
- stderr: string;
42
- }>;
43
- /** Exit status of a probe command; 0 = reachable. */
44
- export declare function fleetProbe(host: FleetHost): Promise<{
45
- ok: boolean;
46
- detail: string;
47
- }>;
48
- /** shell group */
49
- export declare function buildRunCommand(command: string, cwd?: string, timeoutMs?: number): string;
50
- /** fs group */
51
- export declare function buildReadCommand(path: string): string;
52
- export declare function buildWriteCommand(path: string, content: string, mkdir: boolean): string;
53
- export declare function buildDeleteCommand(path: string): string;
54
- export declare function buildListCommand(path: string): string;
55
- export declare function buildFileInfoCommand(path: string): string;
56
- export declare function buildTailCommand(path: string, lines: number): string;
57
- export declare function buildSearchCommand(path: string, pattern: string, maxResults: number): string;
58
- /** services group */
59
- export declare function buildServiceStatusCommand(unit: string): string;
60
- export declare function buildServiceActionCommand(unit: string, action: string): string;
61
- /** packages group */
62
- export declare function buildPackageListCommand(filter?: string): string;
63
- /** logs group */
64
- export declare function buildJournalCommand(unit: string, lines: number): string;
65
- export declare class FleetError extends Error {
66
- constructor(msg: string);
67
- }
68
- export declare function findHost(hosts: FleetHost[], name: string): FleetHost;
69
- /** Throws unless the host was granted the tool group at `ramcp fleet add` time. */
70
- export declare function assertCapability(hosts: FleetHost[], name: string, group: string): FleetHost;
71
- //# sourceMappingURL=fleet.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fleet.d.ts","sourceRoot":"","sources":["../../src/core/fleet.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,0DAA2D,CAAC;AAE3F,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,8EAA8E;AAC9E,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,OAAY,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA0C7C;AAED,qDAAqD;AACrD,wBAAsB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAO1F;AAYD,kBAAkB;AAClB,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,SAAU,GAAG,MAAM,CAM1F;AAED,eAAe;AACf,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAIvF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAI5F;AAED,qBAAqB;AACrB,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,qBAAqB;AACrB,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED,iBAAiB;AACjB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvE;AAMD,qBAAa,UAAW,SAAQ,KAAK;gBACvB,GAAG,EAAE,MAAM;CACxB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAIpE;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAM3F"}
@@ -1,148 +0,0 @@
1
- import { execFile, spawn } from 'node:child_process';
2
- import { promisify } from 'node:util';
3
- const exec = promisify(execFile);
4
- /** Tool group → fleet capability check. Local-only groups have no remote path. */
5
- export const FLEET_CAPABILITIES = ['shell', 'fs', 'services', 'packages', 'logs'];
6
- export function isFleetCapability(g) {
7
- return FLEET_CAPABILITIES.includes(g);
8
- }
9
- export function sshBin() {
10
- return process.env.SSH_BIN || 'ssh';
11
- }
12
- /** Run one command over SSH. Throws on non-zero exit with combined output. */
13
- export async function sshRun(host, port, command, opts = {}) {
14
- const args = [
15
- // -T: no pty (we want clean pipes), BatchMode: never prompt — a hung
16
- // password prompt inside an AI tool call is a deadlock.
17
- '-o', 'BatchMode=yes',
18
- '-o', 'StrictHostKeyChecking=accept-new',
19
- '-o', 'ConnectTimeout=10',
20
- '-o', 'ServerAliveInterval=15',
21
- ];
22
- if (port)
23
- args.push('-p', String(port));
24
- args.push(host, '--', command);
25
- // NOTE: promisify(execFile) does not forward the `input` option (a known
26
- // footgun — the child's stdin never closes and the call hangs to timeout).
27
- // stdin piping is therefore done by hand: write, then end.
28
- if (opts.stdin !== undefined) {
29
- return await new Promise((resolve, reject) => {
30
- const child = spawn(sshBin(), args, { stdio: ['pipe', 'pipe', 'pipe'] });
31
- let stdout = '';
32
- let stderr = '';
33
- const timer = setTimeout(() => {
34
- child.kill();
35
- reject(new Error(`ssh timed out after ${Math.round((opts.timeoutMs ?? 120_000) / 1000)}s`));
36
- }, opts.timeoutMs ?? 120_000);
37
- child.stdout.on('data', c => { stdout += c; });
38
- child.stderr.on('data', c => { stderr += c; });
39
- child.on('error', e => { clearTimeout(timer); reject(e); });
40
- child.on('close', code => {
41
- clearTimeout(timer);
42
- if (code === 0)
43
- resolve({ stdout, stderr });
44
- else
45
- reject(Object.assign(new Error(`ssh exited with ${code}`), { stdout, stderr }));
46
- });
47
- child.stdin.write(opts.stdin);
48
- child.stdin.end();
49
- });
50
- }
51
- const { stdout, stderr } = await exec(sshBin(), args, {
52
- timeout: opts.timeoutMs ?? 120_000,
53
- maxBuffer: 10 * 1024 * 1024,
54
- });
55
- return { stdout, stderr };
56
- }
57
- /** Exit status of a probe command; 0 = reachable. */
58
- export async function fleetProbe(host) {
59
- try {
60
- const { stdout } = await sshRun(host.host, host.port, 'echo ramcp-ok', { timeoutMs: 15_000 });
61
- return { ok: stdout.includes('ramcp-ok'), detail: stdout.trim() };
62
- }
63
- catch (e) {
64
- return { ok: false, detail: (e.stderr || e.stdout || e.message || '').split('\n')[0].slice(0, 120) };
65
- }
66
- }
67
- // ---------------------------------------------------------------------------
68
- // Command builders — single source of truth for what runs remotely.
69
- // All of these are invoked via `ssh … -- command`, so each one gets ONE
70
- // shell string. Keep them quoting-tight: paths arrive validated from the
71
- // tool schema (zod), but we still quote everything with double quotes.
72
- // ---------------------------------------------------------------------------
73
- const q = (s) => `"${s.replace(/(["\\$`])/g, '\\$1')}"`;
74
- const b64 = (s) => Buffer.from(s, 'utf8').toString('base64');
75
- /** shell group */
76
- export function buildRunCommand(command, cwd, timeoutMs = 120_000) {
77
- const secs = Math.min(Math.round(timeoutMs / 1000), 600);
78
- const inner = cwd
79
- ? `cd ${q(cwd)} 2>/dev/null && ${command}`
80
- : command;
81
- return `timeout ${secs} sh -c ${q(inner)} 2>&1`;
82
- }
83
- /** fs group */
84
- export function buildReadCommand(path) {
85
- return `[ -f ${q(path)} ] && base64 ${q(path)}`;
86
- }
87
- export function buildWriteCommand(path, content, mkdir) {
88
- const pre = mkdir ? `mkdir -p ${q(path.replace(/\/[^/]*$/, ''))} && ` : '';
89
- // stdin carries the base64; the command decodes it. No temp files.
90
- return `${pre}base64 -d > ${q(path)}`;
91
- }
92
- export function buildDeleteCommand(path) {
93
- return `rm -rf ${q(path)}`;
94
- }
95
- export function buildListCommand(path) {
96
- // trailing / on dirs; -F suffixes symlinks with @
97
- return `ls -1F ${q(path)} 2>&1 | head -2000`;
98
- }
99
- export function buildFileInfoCommand(path) {
100
- return `stat ${q(path)} 2>&1`;
101
- }
102
- export function buildTailCommand(path, lines) {
103
- return `tail -n ${Math.max(1, Math.min(lines, 1000))} ${q(path)} 2>&1`;
104
- }
105
- export function buildSearchCommand(path, pattern, maxResults) {
106
- // pattern is ERE; validated as a string by zod, quoted single to avoid interpolation
107
- const p = pattern.replace(/'/g, `'\\''`);
108
- return `grep -rEn ${q(p)} ${q(path)} 2>/dev/null | head -${Math.min(maxResults, 200)} || echo "(no matches)"`;
109
- }
110
- /** services group */
111
- export function buildServiceStatusCommand(unit) {
112
- return `systemctl is-active ${q(unit)}; systemctl is-enabled ${q(unit)} 2>&1`;
113
- }
114
- export function buildServiceActionCommand(unit, action) {
115
- return `systemctl ${q(action)} ${q(unit)} 2>&1`;
116
- }
117
- /** packages group */
118
- export function buildPackageListCommand(filter) {
119
- const base = `dpkg-query -W -f '\"\${Package}\\t\${Version}\\n\"' 2>/dev/null`;
120
- if (!filter)
121
- return base;
122
- return `${base} | grep -i ${q(filter)} || true`;
123
- }
124
- /** logs group */
125
- export function buildJournalCommand(unit, lines) {
126
- return `journalctl -u ${q(unit)} -n ${Math.min(lines, 500)} --no-pager -o short-iso 2>&1 | tail -${Math.min(lines, 500)}`;
127
- }
128
- // ---------------------------------------------------------------------------
129
- // Host lookup + capability gate
130
- // ---------------------------------------------------------------------------
131
- export class FleetError extends Error {
132
- constructor(msg) { super(msg); this.name = 'FleetError'; }
133
- }
134
- export function findHost(hosts, name) {
135
- const h = hosts.find(h => h.name === name);
136
- if (!h)
137
- throw new FleetError(`Unknown fleet host "${name}". Known: ${hosts.map(h => h.name).join(', ') || '(none)'}`);
138
- return h;
139
- }
140
- /** Throws unless the host was granted the tool group at `ramcp fleet add` time. */
141
- export function assertCapability(hosts, name, group) {
142
- const h = findHost(hosts, name);
143
- if (!h.tools.includes(group)) {
144
- throw new FleetError(`Host "${name}" does not allow the ${group} tool group (allowed: ${h.tools.join(', ') || 'none'}). Grant it with: ramcp fleet edit ${name} --tools ${group}`);
145
- }
146
- return h;
147
- }
148
- //# sourceMappingURL=fleet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../src/core/fleet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAiCjC,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAU,CAAC;AAE3F,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,OAAQ,kBAAwC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC;AACtC,CAAC;AAOD,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,IAAY,EACZ,IAAwB,EACxB,OAAe,EACf,OAAgB,EAAE;IAElB,MAAM,IAAI,GAAG;QACX,qEAAqE;QACrE,wDAAwD;QACxD,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,kCAAkC;QACxC,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,wBAAwB;KAC/B,CAAC;IACF,IAAI,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAE/B,yEAAyE;IACzE,2EAA2E;IAC3E,2DAA2D;IAC3D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACzE,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,KAAK,CAAC,IAAI,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9F,CAAC,EAAE,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC;YAC9B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBACvB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,IAAI,KAAK,CAAC;oBAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;;oBACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACvF,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAM,CAAC,CAAC;YAC/B,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;QACpD,OAAO,EAAE,IAAI,CAAC,SAAS,IAAI,OAAO;QAClC,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;KAC5B,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED,qDAAqD;AACrD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAe;IAC9C,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9F,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;IACpE,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACvG,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,oEAAoE;AACpE,wEAAwE;AACxE,yEAAyE;AACzE,uEAAuE;AACvE,8EAA8E;AAE9E,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC;AAChE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAErE,kBAAkB;AAClB,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,GAAY,EAAE,SAAS,GAAG,OAAO;IAChF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,GAAG;QACf,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,mBAAmB,OAAO,EAAE;QAC1C,CAAC,CAAC,OAAO,CAAC;IACZ,OAAO,WAAW,IAAI,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;AAClD,CAAC;AAED,eAAe;AACf,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,OAAe,EAAE,KAAc;IAC7E,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,mEAAmE;IACnE,OAAO,GAAG,GAAG,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,kDAAkD;IAClD,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAa;IAC1D,OAAO,WAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,OAAe,EAAE,UAAkB;IAClF,qFAAqF;IACrF,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,yBAAyB,CAAC;AAChH,CAAC;AAED,qBAAqB;AACrB,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,OAAO,uBAAuB,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAY,EAAE,MAAc;IACpE,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AAClD,CAAC;AAED,qBAAqB;AACrB,MAAM,UAAU,uBAAuB,CAAC,MAAe;IACrD,MAAM,IAAI,GAAG,iEAAiE,CAAC;IAC/E,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,GAAG,IAAI,cAAc,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;AAClD,CAAC;AAED,iBAAiB;AACjB,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,KAAa;IAC7D,OAAO,iBAAiB,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,yCAAyC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;AAC5H,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,GAAW,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC;CACnE;AAED,MAAM,UAAU,QAAQ,CAAC,KAAkB,EAAE,IAAY;IACvD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,uBAAuB,IAAI,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IACtH,OAAO,CAAC,CAAC;AACX,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAAC,KAAkB,EAAE,IAAY,EAAE,KAAa;IAC9E,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,SAAS,IAAI,wBAAwB,KAAK,yBAAyB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,sCAAsC,IAAI,YAAY,KAAK,EAAE,CAAC,CAAC;IACrL,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fleet.d.ts","sourceRoot":"","sources":["../../src/tools/fleet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAetD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CA+B5E"}
@@ -1,39 +0,0 @@
1
- import { fleetProbe } from '../core/fleet.js';
2
- /**
3
- * Fleet meta-tools: listing and probing the machines this gateway can drive.
4
- * The actual remote operations (run_command, read_file, …) live in their own
5
- * suites — each gained an optional `host` parameter that routes over SSH
6
- * when provided. This split keeps one tool per verb (the AI does not have
7
- * to learn "remote_run_command") while the per-host allowlist gates access.
8
- */
9
- function hostList(ctx) {
10
- return ctx.cfg.fleet?.hosts || [];
11
- }
12
- export function registerFleetTools(server, ctx) {
13
- // ---- fleet_list ---------------------------------------------------------
14
- server.registerTool('fleet_list', {
15
- description: 'List fleet machines this gateway can reach over SSH, with their granted tool groups.',
16
- inputSchema: {},
17
- }, async () => {
18
- const hosts = hostList(ctx);
19
- if (!hosts.length)
20
- return { content: [{ type: 'text', text: '(no fleet hosts — add with `ramcp fleet add`)' }] };
21
- const out = hosts.map(h => `${h.name.padEnd(14)} ${h.host}${h.port ? ':' + h.port : ''} tools: ${h.tools.join(',') || '(none)'}${h.note ? ' — ' + h.note : ''}`);
22
- return { content: [{ type: 'text', text: out.join('\n') }] };
23
- });
24
- // ---- fleet_status ----------------------------------------------------------
25
- server.registerTool('fleet_status', {
26
- description: 'Probe every fleet machine over SSH. Reports reachable/unreachable per host.',
27
- inputSchema: {},
28
- }, async () => {
29
- const hosts = hostList(ctx);
30
- if (!hosts.length)
31
- return { content: [{ type: 'text', text: '(no fleet hosts)' }] };
32
- const results = await Promise.all(hosts.map(async (h) => {
33
- const r = await fleetProbe(h);
34
- return `${r.ok ? '✔' : '✖'} ${h.name.padEnd(14)} ${h.host}${h.port ? ':' + h.port : ''} ${r.ok ? 'reachable' : 'unreachable — ' + r.detail}`;
35
- }));
36
- return { content: [{ type: 'text', text: results.join('\n') }] };
37
- });
38
- }
39
- //# sourceMappingURL=fleet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../src/tools/fleet.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAkB,MAAM,kBAAkB,CAAC;AAE9D;;;;;;GAMG;AAEH,SAAS,QAAQ,CAAC,GAAgB;IAChC,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,GAAgB;IACpE,4EAA4E;IAC5E,MAAM,CAAC,YAAY,CAAC,YAAY,EAC9B;QACE,WAAW,EAAE,sFAAsF;QACnG,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+CAA+C,EAAE,CAAC,EAAE,CAAC;QACjH,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACxB,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACvI,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEL,+EAA+E;IAC/E,MAAM,CAAC,YAAY,CAAC,cAAc,EAChC;QACE,WAAW,EAAE,6EAA6E;QAC1F,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;QACpF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;YACpD,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;YAC9B,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QAC/I,CAAC,CAAC,CAAC,CAAC;QACJ,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;AACP,CAAC"}