ssh-mcp-pro 1.2.3 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +55 -0
- package/README.md +12 -2
- package/dist/agent-bin.js +5 -2
- package/dist/agent-bin.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +38 -47
- package/dist/cli.js.map +1 -1
- package/dist/config-security-env.d.ts +4 -0
- package/dist/config-security-env.d.ts.map +1 -0
- package/dist/config-security-env.js +64 -0
- package/dist/config-security-env.js.map +1 -0
- package/dist/config.d.ts +2 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -67
- package/dist/config.js.map +1 -1
- package/dist/connector-profile.d.ts +1 -1
- package/dist/connector-profile.d.ts.map +1 -1
- package/dist/detect.d.ts.map +1 -1
- package/dist/detect.js +226 -192
- package/dist/detect.js.map +1 -1
- package/dist/ensure-package-service.d.ts +9 -0
- package/dist/ensure-package-service.d.ts.map +1 -0
- package/dist/ensure-package-service.js +146 -0
- package/dist/ensure-package-service.js.map +1 -0
- package/dist/ensure-pkg.js +4 -4
- package/dist/ensure-pkg.js.map +1 -1
- package/dist/ensure.d.ts.map +1 -1
- package/dist/ensure.js +15 -144
- package/dist/ensure.js.map +1 -1
- package/dist/fs-sftp.js +1 -1
- package/dist/fs-sftp.js.map +1 -1
- package/dist/fs-stat.d.ts +10 -0
- package/dist/fs-stat.d.ts.map +1 -0
- package/dist/fs-stat.js +62 -0
- package/dist/fs-stat.js.map +1 -0
- package/dist/fs-tools.d.ts.map +1 -1
- package/dist/fs-tools.js +6 -58
- package/dist/fs-tools.js.map +1 -1
- package/dist/http-security.d.ts.map +1 -1
- package/dist/http-security.js +6 -6
- package/dist/http-security.js.map +1 -1
- package/dist/http-server-runtime.d.ts.map +1 -1
- package/dist/http-server-runtime.js +41 -7
- package/dist/http-server-runtime.js.map +1 -1
- package/dist/index.js +6 -23
- package/dist/index.js.map +1 -1
- package/dist/mcp-http-web.d.ts +8 -0
- package/dist/mcp-http-web.d.ts.map +1 -0
- package/dist/mcp-http-web.js +35 -0
- package/dist/mcp-http-web.js.map +1 -0
- package/dist/mcp.d.ts +6 -2
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +22 -14
- package/dist/mcp.js.map +1 -1
- package/dist/policy.d.ts +8 -0
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +147 -105
- package/dist/policy.js.map +1 -1
- package/dist/process.d.ts.map +1 -1
- package/dist/process.js +11 -7
- package/dist/process.js.map +1 -1
- package/dist/remote/agent-activity-log.d.ts +26 -0
- package/dist/remote/agent-activity-log.d.ts.map +1 -0
- package/dist/remote/agent-activity-log.js +211 -0
- package/dist/remote/agent-activity-log.js.map +1 -0
- package/dist/remote/agent-cli.d.ts.map +1 -1
- package/dist/remote/agent-cli.js +92 -25
- package/dist/remote/agent-cli.js.map +1 -1
- package/dist/remote/agent-executor.d.ts.map +1 -1
- package/dist/remote/agent-executor.js +22 -10
- package/dist/remote/agent-executor.js.map +1 -1
- package/dist/remote/agent-handler.d.ts +2 -0
- package/dist/remote/agent-handler.d.ts.map +1 -1
- package/dist/remote/agent-handler.js +4 -0
- package/dist/remote/agent-handler.js.map +1 -1
- package/dist/remote/config.d.ts.map +1 -1
- package/dist/remote/config.js +12 -1
- package/dist/remote/config.js.map +1 -1
- package/dist/remote/control-plane.d.ts +12 -0
- package/dist/remote/control-plane.d.ts.map +1 -1
- package/dist/remote/control-plane.js +164 -56
- package/dist/remote/control-plane.js.map +1 -1
- package/dist/remote/crypto.d.ts +9 -4
- package/dist/remote/crypto.d.ts.map +1 -1
- package/dist/remote/crypto.js +41 -9
- package/dist/remote/crypto.js.map +1 -1
- package/dist/remote/http-util.d.ts.map +1 -1
- package/dist/remote/http-util.js +14 -7
- package/dist/remote/http-util.js.map +1 -1
- package/dist/remote/mcp-tools.d.ts +7 -0
- package/dist/remote/mcp-tools.d.ts.map +1 -1
- package/dist/remote/mcp-tools.js +28 -0
- package/dist/remote/mcp-tools.js.map +1 -1
- package/dist/remote/oauth-handler.d.ts +30 -3
- package/dist/remote/oauth-handler.d.ts.map +1 -1
- package/dist/remote/oauth-handler.js +232 -18
- package/dist/remote/oauth-handler.js.map +1 -1
- package/dist/remote/policy.js +2 -2
- package/dist/remote/policy.js.map +1 -1
- package/dist/remote/schemas.d.ts +9 -9
- package/dist/remote/schemas.js +6 -6
- package/dist/remote/schemas.js.map +1 -1
- package/dist/remote/store.d.ts +38 -1
- package/dist/remote/store.d.ts.map +1 -1
- package/dist/remote/store.js +149 -11
- package/dist/remote/store.js.map +1 -1
- package/dist/remote/types.d.ts +14 -0
- package/dist/remote/types.d.ts.map +1 -1
- package/dist/remote/types.js.map +1 -1
- package/dist/remote/web-dashboard-client-config.d.ts +77 -0
- package/dist/remote/web-dashboard-client-config.d.ts.map +1 -0
- package/dist/remote/web-dashboard-client-config.js +81 -0
- package/dist/remote/web-dashboard-client-config.js.map +1 -0
- package/dist/remote/web-dashboard-html.d.ts +2 -0
- package/dist/remote/web-dashboard-html.d.ts.map +1 -0
- package/dist/remote/web-dashboard-html.js +433 -0
- package/dist/remote/web-dashboard-html.js.map +1 -0
- package/dist/remote/web-dashboard-oauth-users.d.ts +4 -0
- package/dist/remote/web-dashboard-oauth-users.d.ts.map +1 -0
- package/dist/remote/web-dashboard-oauth-users.js +78 -0
- package/dist/remote/web-dashboard-oauth-users.js.map +1 -0
- package/dist/remote/web-dashboard-static.d.ts +4 -0
- package/dist/remote/web-dashboard-static.d.ts.map +1 -0
- package/dist/remote/web-dashboard-static.js +19 -0
- package/dist/remote/web-dashboard-static.js.map +1 -0
- package/dist/remote/web-dashboard-styles.d.ts +2 -0
- package/dist/remote/web-dashboard-styles.d.ts.map +1 -0
- package/dist/remote/web-dashboard-styles.js +187 -0
- package/dist/remote/web-dashboard-styles.js.map +1 -0
- package/dist/remote/web-dashboard.d.ts +62 -0
- package/dist/remote/web-dashboard.d.ts.map +1 -0
- package/dist/remote/web-dashboard.js +467 -0
- package/dist/remote/web-dashboard.js.map +1 -0
- package/dist/retry.d.ts.map +1 -1
- package/dist/retry.js +6 -3
- package/dist/retry.js.map +1 -1
- package/dist/safety.d.ts.map +1 -1
- package/dist/safety.js +56 -6
- package/dist/safety.js.map +1 -1
- package/dist/session-auth.js +7 -7
- package/dist/session-auth.js.map +1 -1
- package/dist/session.d.ts +1 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +44 -40
- package/dist/session.js.map +1 -1
- package/dist/shell.d.ts.map +1 -1
- package/dist/shell.js +5 -4
- package/dist/shell.js.map +1 -1
- package/dist/ssh-config.d.ts +2 -2
- package/dist/ssh-config.d.ts.map +1 -1
- package/dist/ssh-config.js +24 -20
- package/dist/ssh-config.js.map +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +9 -2
- package/dist/telemetry.js.map +1 -1
- package/dist/tools/connector.provider.d.ts +1 -1
- package/dist/tools/connector.provider.d.ts.map +1 -1
- package/dist/tools/ensure.provider.d.ts +1 -1
- package/dist/tools/ensure.provider.d.ts.map +1 -1
- package/dist/tools/fs.provider.d.ts +1 -1
- package/dist/tools/fs.provider.d.ts.map +1 -1
- package/dist/tools/metadata.d.ts +1 -1
- package/dist/tools/metadata.d.ts.map +1 -1
- package/dist/tools/output-schemas.d.ts +27 -135
- package/dist/tools/output-schemas.d.ts.map +1 -1
- package/dist/tools/process.provider.d.ts +1 -1
- package/dist/tools/process.provider.d.ts.map +1 -1
- package/dist/tools/registry.d.ts +1 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +16 -13
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/session.provider.d.ts +1 -1
- package/dist/tools/session.provider.d.ts.map +1 -1
- package/dist/tools/system.provider.d.ts +1 -1
- package/dist/tools/system.provider.d.ts.map +1 -1
- package/dist/tools/transfer.provider.d.ts +1 -1
- package/dist/tools/transfer.provider.d.ts.map +1 -1
- package/dist/tools/tunnel.provider.d.ts +1 -1
- package/dist/tools/tunnel.provider.d.ts.map +1 -1
- package/dist/tools/types.d.ts +1 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/transfer.js +2 -2
- package/dist/transfer.js.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/docs/adding-a-device.md +39 -17
- package/docs/agent-activity-monitor.md +34 -0
- package/docs/coolify.md +29 -0
- package/docs/development/dependency-management.md +1 -1
- package/docs/development/mcp-protocol-2026.md +33 -0
- package/docs/doppler-guide.md +34 -0
- package/docs/reference/compatibility.md +1 -1
- package/docs/security/dependency-audit-exceptions.md +3 -7
- package/docs/security/hosted-data-inventory.md +81 -0
- package/docs/sonarcloud-analysis.md +9 -0
- package/mcp.json +1 -1
- package/package.json +26 -21
- package/registry/ssh-mcp-pro/mcp.json +1 -1
- package/server.json +3 -3
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type AgentActivityLevel = "info" | "ok" | "warn" | "error";
|
|
2
|
+
export interface AgentActivityEntry {
|
|
3
|
+
timestamp: string;
|
|
4
|
+
level: AgentActivityLevel;
|
|
5
|
+
event: string;
|
|
6
|
+
message: string;
|
|
7
|
+
}
|
|
8
|
+
/** Local, bounded diagnostics. Never record shell arguments, outputs, keys or tokens. */
|
|
9
|
+
export declare function agentActivityLogPath(agentConfigPath: string): string;
|
|
10
|
+
export declare class AgentActivityLog {
|
|
11
|
+
private readonly options;
|
|
12
|
+
readonly file: string;
|
|
13
|
+
private fileWarningEmitted;
|
|
14
|
+
constructor(configFile: string, options?: {
|
|
15
|
+
maxBytes?: number;
|
|
16
|
+
maxArchives?: number;
|
|
17
|
+
});
|
|
18
|
+
banner(alias: string, profile: string, version: number): void;
|
|
19
|
+
event(level: AgentActivityLevel, event: string, message: string): void;
|
|
20
|
+
private append;
|
|
21
|
+
private rotate;
|
|
22
|
+
}
|
|
23
|
+
export declare function readAgentActivity(configFile: string, tail?: number): AgentActivityEntry[];
|
|
24
|
+
/** Local Windows/Linux monitor; never performs remote commands or accesses secrets. */
|
|
25
|
+
export declare function showAgentActivityLogs(configFile: string, argv: string[]): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=agent-activity-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-activity-log.d.ts","sourceRoot":"","sources":["../../src/remote/agent-activity-log.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAEpE;AA2BD,qBAAa,gBAAgB;IAMzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,kBAAkB,CAAS;gBAGjC,UAAU,EAAE,MAAM,EACD,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO;IAK5E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAiB7D,KAAK,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAsBtE,OAAO,CAAC,MAAM;IAuBd,OAAO,CAAC,MAAM;CAaf;AA8BD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,SAAe,GAAG,kBAAkB,EAAE,CAgC/F;AAED,uFAAuF;AACvF,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B7F"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { lstatSync, mkdirSync, readFileSync, renameSync, rmSync, watchFile, closeSync, constants, fstatSync, openSync, writeSync, } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const MAX_LOG_BYTES = 512 * 1024;
|
|
4
|
+
const MAX_ARCHIVES = 2;
|
|
5
|
+
const DEFAULT_TAIL = 60;
|
|
6
|
+
/** Local, bounded diagnostics. Never record shell arguments, outputs, keys or tokens. */
|
|
7
|
+
export function agentActivityLogPath(agentConfigPath) {
|
|
8
|
+
return path.join(path.dirname(agentConfigPath), "logs", "agent-activity.jsonl");
|
|
9
|
+
}
|
|
10
|
+
function cleanLabel(value, limit = 72) {
|
|
11
|
+
return value
|
|
12
|
+
.replaceAll(/[\u0000-\u001f\u007f-\u009f]/gu, " ")
|
|
13
|
+
.replaceAll(/[^\p{L}\p{N} .:_()/-]/gu, "?")
|
|
14
|
+
.trim()
|
|
15
|
+
.slice(0, limit);
|
|
16
|
+
}
|
|
17
|
+
function paint(value, level, color) {
|
|
18
|
+
if (!color)
|
|
19
|
+
return value;
|
|
20
|
+
const code = { info: "36", ok: "32", warn: "33", error: "31" }[level];
|
|
21
|
+
return "\u001b[" + code + "m" + value + "\u001b[0m";
|
|
22
|
+
}
|
|
23
|
+
function formatEntry(entry, color) {
|
|
24
|
+
const time = entry.timestamp.slice(11, 19);
|
|
25
|
+
return (time +
|
|
26
|
+
" " +
|
|
27
|
+
paint(entry.level.toUpperCase().padEnd(5), entry.level, color) +
|
|
28
|
+
" " +
|
|
29
|
+
entry.message);
|
|
30
|
+
}
|
|
31
|
+
export class AgentActivityLog {
|
|
32
|
+
options;
|
|
33
|
+
file;
|
|
34
|
+
fileWarningEmitted = false;
|
|
35
|
+
constructor(configFile, options = {}) {
|
|
36
|
+
this.options = options;
|
|
37
|
+
this.file = agentActivityLogPath(configFile);
|
|
38
|
+
}
|
|
39
|
+
banner(alias, profile, version) {
|
|
40
|
+
const tty = Boolean(process.stdout.isTTY && !process.env.NO_COLOR);
|
|
41
|
+
const lines = [
|
|
42
|
+
"",
|
|
43
|
+
"╭" + "─".repeat(57) + "╮",
|
|
44
|
+
"│ " + paint("SSH MCP PRO", "info", tty) + " · OUTBOUND AGENT ACTIVITY",
|
|
45
|
+
"│ DEVICE " + cleanLabel(alias, 30),
|
|
46
|
+
"│ ACCESS " + cleanLabel(profile, 24) + " · Policy v" + version,
|
|
47
|
+
"│ STATUS CONNECTING / waiting for authenticated server",
|
|
48
|
+
"╰" + "─".repeat(57) + "╯",
|
|
49
|
+
" Activity log: " + this.file,
|
|
50
|
+
" Review: ssh-mcp-pro-agent logs --follow",
|
|
51
|
+
"",
|
|
52
|
+
];
|
|
53
|
+
process.stdout.write(lines.join("\n") + "\n");
|
|
54
|
+
}
|
|
55
|
+
event(level, event, message) {
|
|
56
|
+
// Callers supply fixed local event labels and sanitized diagnostic descriptions.
|
|
57
|
+
const entry = {
|
|
58
|
+
timestamp: new Date().toISOString(),
|
|
59
|
+
level,
|
|
60
|
+
event: cleanLabel(event, 48),
|
|
61
|
+
message: cleanLabel(message, 180),
|
|
62
|
+
};
|
|
63
|
+
process.stdout.write(formatEntry(entry, Boolean(process.stdout.isTTY && !process.env.NO_COLOR)) + "\n");
|
|
64
|
+
try {
|
|
65
|
+
this.append(entry);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Losing a diagnostic file must not interrupt an authenticated agent.
|
|
69
|
+
if (!this.fileWarningEmitted) {
|
|
70
|
+
this.fileWarningEmitted = true;
|
|
71
|
+
process.stderr.write("Agent activity log unavailable; console events will continue.\n");
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
append(entry) {
|
|
76
|
+
const dir = path.dirname(this.file);
|
|
77
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
78
|
+
if (lstatSync(dir).isSymbolicLink())
|
|
79
|
+
return;
|
|
80
|
+
// O_NOFOLLOW and the open descriptor avoid the check-then-append race.
|
|
81
|
+
// Windows supports the same path with its platform-specific open flags.
|
|
82
|
+
const flags = constants.O_WRONLY | constants.O_CREAT | constants.O_APPEND | (constants.O_NOFOLLOW ?? 0);
|
|
83
|
+
const row = JSON.stringify(entry) + "\n";
|
|
84
|
+
const descriptor = openSync(this.file, flags, 0o600);
|
|
85
|
+
let rotate = false;
|
|
86
|
+
try {
|
|
87
|
+
writeSync(descriptor, row);
|
|
88
|
+
rotate = fstatSync(descriptor).size > (this.options.maxBytes ?? MAX_LOG_BYTES);
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
closeSync(descriptor);
|
|
92
|
+
}
|
|
93
|
+
// Rotate only after closing the descriptor. Never check one file and reopen
|
|
94
|
+
// it to write, which would introduce a symlink/TOCTOU window.
|
|
95
|
+
if (rotate)
|
|
96
|
+
this.rotate();
|
|
97
|
+
}
|
|
98
|
+
rotate() {
|
|
99
|
+
const archives = this.options.maxArchives ?? MAX_ARCHIVES;
|
|
100
|
+
for (let n = archives; n >= 1; n--) {
|
|
101
|
+
const target = this.file + "." + n;
|
|
102
|
+
const source = n === 1 ? this.file : this.file + "." + (n - 1);
|
|
103
|
+
rmSync(target, { force: true });
|
|
104
|
+
try {
|
|
105
|
+
renameSync(source, target);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
if (!isMissingFile(error))
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function isMissingFile(error) {
|
|
115
|
+
return error instanceof Error && "code" in error && error.code === "ENOENT";
|
|
116
|
+
}
|
|
117
|
+
function parseActivityEntry(line) {
|
|
118
|
+
if (!line)
|
|
119
|
+
return undefined;
|
|
120
|
+
try {
|
|
121
|
+
const entry = JSON.parse(line);
|
|
122
|
+
if (typeof entry.timestamp !== "string" ||
|
|
123
|
+
typeof entry.event !== "string" ||
|
|
124
|
+
typeof entry.message !== "string")
|
|
125
|
+
return undefined;
|
|
126
|
+
if (entry.level !== "info" &&
|
|
127
|
+
entry.level !== "ok" &&
|
|
128
|
+
entry.level !== "warn" &&
|
|
129
|
+
entry.level !== "error")
|
|
130
|
+
return undefined;
|
|
131
|
+
return entry;
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// Ignore partial lines during rotation or concurrent append.
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
export function readAgentActivity(configFile, tail = DEFAULT_TAIL) {
|
|
139
|
+
if (!Number.isInteger(tail) || tail < 1 || tail > 200) {
|
|
140
|
+
throw new Error("--tail must be an integer from 1 to 200");
|
|
141
|
+
}
|
|
142
|
+
const file = agentActivityLogPath(configFile);
|
|
143
|
+
const flags = constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0);
|
|
144
|
+
let data;
|
|
145
|
+
let descriptor;
|
|
146
|
+
try {
|
|
147
|
+
descriptor = openSync(file, flags);
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
if (!isMissingFile(error))
|
|
151
|
+
throw error;
|
|
152
|
+
// A completed rotation temporarily has no active file. The latest
|
|
153
|
+
// archived file still contains the most recent event until the next write.
|
|
154
|
+
try {
|
|
155
|
+
descriptor = openSync(file + ".1", flags);
|
|
156
|
+
}
|
|
157
|
+
catch (archiveError) {
|
|
158
|
+
if (isMissingFile(archiveError))
|
|
159
|
+
return [];
|
|
160
|
+
throw archiveError;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
data = readFileSync(descriptor, "utf8").slice(-(MAX_LOG_BYTES + 2048));
|
|
165
|
+
}
|
|
166
|
+
finally {
|
|
167
|
+
closeSync(descriptor);
|
|
168
|
+
}
|
|
169
|
+
const entries = [];
|
|
170
|
+
for (const line of data.split("\n")) {
|
|
171
|
+
const entry = parseActivityEntry(line);
|
|
172
|
+
if (entry)
|
|
173
|
+
entries.push(entry);
|
|
174
|
+
}
|
|
175
|
+
return entries.slice(-tail);
|
|
176
|
+
}
|
|
177
|
+
/** Local Windows/Linux monitor; never performs remote commands or accesses secrets. */
|
|
178
|
+
export async function showAgentActivityLogs(configFile, argv) {
|
|
179
|
+
const follow = argv.includes("--follow") || argv.includes("-f");
|
|
180
|
+
const index = argv.indexOf("--tail");
|
|
181
|
+
const tail = index >= 0 ? Number(argv[index + 1]) : DEFAULT_TAIL;
|
|
182
|
+
const events = readAgentActivity(configFile, tail);
|
|
183
|
+
const logPath = agentActivityLogPath(configFile);
|
|
184
|
+
const color = Boolean(process.stdout.isTTY && !process.env.NO_COLOR);
|
|
185
|
+
process.stdout.write("SSH MCP PRO · Agent activity\n" + logPath + "\n\n");
|
|
186
|
+
for (const entry of events) {
|
|
187
|
+
process.stdout.write(formatEntry(entry, color) + "\n");
|
|
188
|
+
}
|
|
189
|
+
if (!follow)
|
|
190
|
+
return;
|
|
191
|
+
process.stdout.write("\nFollowing events · Press Ctrl+C to stop\n");
|
|
192
|
+
let previous = events.at(-1);
|
|
193
|
+
await new Promise(() => {
|
|
194
|
+
watchFile(logPath, { interval: 1_000 }, () => {
|
|
195
|
+
const current = readAgentActivity(configFile, 200);
|
|
196
|
+
let previousIndex = -1;
|
|
197
|
+
for (let i = current.length - 1; i >= 0; i--) {
|
|
198
|
+
if (previous && JSON.stringify(current[i]) === JSON.stringify(previous)) {
|
|
199
|
+
previousIndex = i;
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
const unseen = previousIndex < 0 ? current.slice(-tail) : current.slice(previousIndex + 1);
|
|
204
|
+
for (const entry of unseen) {
|
|
205
|
+
process.stdout.write(formatEntry(entry, color) + "\n");
|
|
206
|
+
}
|
|
207
|
+
previous = current.at(-1);
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=agent-activity-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-activity-log.js","sourceRoot":"","sources":["../../src/remote/agent-activity-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-cli.d.ts","sourceRoot":"","sources":["../../src/remote/agent-cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-cli.d.ts","sourceRoot":"","sources":["../../src/remote/agent-cli.ts"],"names":[],"mappings":"AAsbA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B/D"}
|
package/dist/remote/agent-cli.js
CHANGED
|
@@ -2,6 +2,7 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { AgentExecutor, defaultHostMetadata } from "./agent-executor.js";
|
|
5
|
+
import { AgentActivityLog, agentActivityLogPath, showAgentActivityLogs, } from "./agent-activity-log.js";
|
|
5
6
|
import { ensurePemKeyPair, nowIso, randomToken, signEnvelope, verifyEnvelope, } from "./crypto.js";
|
|
6
7
|
import { rememberAcceptedPolicyUpdate, validatePolicyUpdate, } from "./policy-update-guard.js";
|
|
7
8
|
import { parseControlPlaneEnvelope, parseAgentPolicy } from "./schemas.js";
|
|
@@ -83,8 +84,15 @@ function runtimeWebSocket() {
|
|
|
83
84
|
}
|
|
84
85
|
return candidate;
|
|
85
86
|
}
|
|
87
|
+
function removeTrailingSlashes(value) {
|
|
88
|
+
let end = value.length;
|
|
89
|
+
while (end > 0 && value[end - 1] === "/") {
|
|
90
|
+
end--;
|
|
91
|
+
}
|
|
92
|
+
return value.slice(0, end);
|
|
93
|
+
}
|
|
86
94
|
async function enroll(argv) {
|
|
87
|
-
const server = parseFlag(argv, "--server")
|
|
95
|
+
const server = removeTrailingSlashes(parseFlag(argv, "--server") ?? "");
|
|
88
96
|
const token = parseFlag(argv, "--token");
|
|
89
97
|
const alias = parseFlag(argv, "--alias") ?? os.hostname();
|
|
90
98
|
if (!server || !token) {
|
|
@@ -113,10 +121,57 @@ async function enroll(argv) {
|
|
|
113
121
|
output(`Agent enrolled: ${config.agentId} (${config.alias})`);
|
|
114
122
|
output(`Config: ${configPath()}`);
|
|
115
123
|
}
|
|
124
|
+
/** A server-side ready acknowledgement is distinct from an open WebSocket. */
|
|
125
|
+
function handleAgentControlMessage(payload, config, activity) {
|
|
126
|
+
if (payload.type === "agent.ready") {
|
|
127
|
+
if (payload.agent_id === config.agentId) {
|
|
128
|
+
activity.event("ok", "agent_ready", "Identity confirmed. Agent ready for requests.");
|
|
129
|
+
output(`Agent connected: ${config.agentId}`);
|
|
130
|
+
}
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
if (payload.type === "error") {
|
|
134
|
+
activity.event("error", "control_plane_error", "Server rejected an agent message.");
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
function applyAgentPolicyUpdate(update, config, executor, activity, seenPolicyUpdateNonces) {
|
|
140
|
+
const validation = validatePolicyUpdate(update, config.policy.version, seenPolicyUpdateNonces);
|
|
141
|
+
if (!validation.accepted) {
|
|
142
|
+
recordPolicyUpdateRejection(validation.reason);
|
|
143
|
+
activity.event("warn", "policy_rejected", "Policy update rejected: " + validation.reason);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
saveConfig({ ...config, policy: update.policy });
|
|
147
|
+
rememberAcceptedPolicyUpdate(seenPolicyUpdateNonces, update.nonce);
|
|
148
|
+
config.policy = update.policy;
|
|
149
|
+
executor.updatePolicy(update.policy);
|
|
150
|
+
activity.event("ok", "policy_updated", "Policy updated: " + update.policy.profile + " v" + update.policy.version);
|
|
151
|
+
}
|
|
152
|
+
function acceptAgentAction(action, config, activity, seenActions) {
|
|
153
|
+
if (seenActions.has(action.action_id)) {
|
|
154
|
+
activity.event("warn", "action_replay", "Duplicate action ignored.");
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
if (new Date(action.deadline).getTime() < Date.now()) {
|
|
158
|
+
activity.event("warn", "action_expired", "Expired action ignored.");
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
if (action.policy_version !== config.policy.version &&
|
|
162
|
+
action.policy_version !== config.policy.version + 1) {
|
|
163
|
+
activity.event("warn", "policy_mismatch", "Action policy version mismatch.");
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
116
168
|
async function runAgent() {
|
|
117
169
|
const config = requireConfig();
|
|
118
170
|
const WebSocketCtor = runtimeWebSocket();
|
|
119
171
|
const executor = new AgentExecutor(config.policy, config.privateKeyPem);
|
|
172
|
+
const activity = new AgentActivityLog(configPath());
|
|
173
|
+
activity.banner(config.alias, config.policy.profile, config.policy.version);
|
|
174
|
+
activity.event("info", "agent_starting", "Agent starting. Preparing outbound connection.");
|
|
120
175
|
const seenActions = new Map();
|
|
121
176
|
const seenPolicyUpdateNonces = new Map();
|
|
122
177
|
function rememberAction(actionId, deadline) {
|
|
@@ -156,7 +211,8 @@ async function runAgent() {
|
|
|
156
211
|
};
|
|
157
212
|
hello.signature = signEnvelope(hello, config.privateKeyPem);
|
|
158
213
|
ws.send(JSON.stringify(hello));
|
|
159
|
-
|
|
214
|
+
activity.event("info", "transport_open", "Transport open. Validating agent identity.");
|
|
215
|
+
// An open socket is not an authenticated agent; wait for agent.ready.
|
|
160
216
|
};
|
|
161
217
|
ws.onmessage = (event) => {
|
|
162
218
|
void (async () => {
|
|
@@ -165,6 +221,10 @@ async function runAgent() {
|
|
|
165
221
|
: Buffer.from(event.data).toString("utf8");
|
|
166
222
|
const payload = JSON.parse(raw);
|
|
167
223
|
if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
|
|
224
|
+
activity.event("warn", "message_rejected", "Malformed control-plane message ignored.");
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
if (handleAgentControlMessage(payload, config, activity)) {
|
|
168
228
|
return;
|
|
169
229
|
}
|
|
170
230
|
let envelope;
|
|
@@ -172,48 +232,50 @@ async function runAgent() {
|
|
|
172
232
|
envelope = parseControlPlaneEnvelope(payload);
|
|
173
233
|
}
|
|
174
234
|
catch {
|
|
235
|
+
activity.event("warn", "message_rejected", "Invalid control-plane envelope ignored.");
|
|
175
236
|
return;
|
|
176
237
|
}
|
|
177
238
|
if (envelope.agent_id !== config.agentId) {
|
|
178
239
|
return;
|
|
179
240
|
}
|
|
180
241
|
if (!verifyEnvelope(envelope, config.controlPlanePublicKeyPem)) {
|
|
242
|
+
activity.event("warn", "signature_rejected", "Unverified control-plane message ignored.");
|
|
181
243
|
return;
|
|
182
244
|
}
|
|
183
245
|
if (envelope.type === "policy.update") {
|
|
184
|
-
|
|
185
|
-
const validation = validatePolicyUpdate(update, config.policy.version, seenPolicyUpdateNonces);
|
|
186
|
-
if (!validation.accepted) {
|
|
187
|
-
recordPolicyUpdateRejection(validation.reason);
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
const nextConfig = { ...config, policy: update.policy };
|
|
191
|
-
saveConfig(nextConfig);
|
|
192
|
-
rememberAcceptedPolicyUpdate(seenPolicyUpdateNonces, update.nonce);
|
|
193
|
-
config.policy = update.policy;
|
|
194
|
-
executor.updatePolicy(update.policy);
|
|
246
|
+
applyAgentPolicyUpdate(envelope, config, executor, activity, seenPolicyUpdateNonces);
|
|
195
247
|
return;
|
|
196
248
|
}
|
|
197
249
|
const action = envelope;
|
|
198
|
-
if (
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
if (new Date(action.deadline).getTime() < Date.now()) {
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
if (action.policy_version !== config.policy.version &&
|
|
205
|
-
action.policy_version !== config.policy.version + 1) {
|
|
250
|
+
if (!acceptAgentAction(action, config, activity, seenActions)) {
|
|
206
251
|
return;
|
|
207
252
|
}
|
|
208
253
|
rememberAction(action.action_id, action.deadline);
|
|
254
|
+
const startedAt = Date.now();
|
|
255
|
+
activity.event("info", "action_started", "Request received: " + action.tool);
|
|
209
256
|
const result = await executor.execute(action);
|
|
210
257
|
ws.send(JSON.stringify(result));
|
|
211
|
-
|
|
212
|
-
|
|
258
|
+
activity.event(result.status === "ok" ? "ok" : "warn", "action_finished", "Request " +
|
|
259
|
+
action.tool +
|
|
260
|
+
" completed: " +
|
|
261
|
+
result.status +
|
|
262
|
+
" (" +
|
|
263
|
+
(Date.now() - startedAt) +
|
|
264
|
+
" ms)");
|
|
265
|
+
})().catch(() => {
|
|
266
|
+
// Never print command/output/provider error text: it can contain credentials.
|
|
267
|
+
activity.event("error", "action_failed", "Action processing failed; details withheld.");
|
|
213
268
|
});
|
|
214
269
|
};
|
|
215
|
-
ws.onerror = (
|
|
216
|
-
|
|
270
|
+
ws.onerror = () => {
|
|
271
|
+
activity.event("error", "socket_error", "Connection error. Service restart may be required.");
|
|
272
|
+
reject(new Error("WebSocket transport error"));
|
|
273
|
+
};
|
|
274
|
+
// A disconnected agent must exit nonzero so its service supervisor can restart it.
|
|
275
|
+
ws.onclose = () => {
|
|
276
|
+
activity.event("warn", "disconnected", "Connection closed. Awaiting service restart.");
|
|
277
|
+
reject(new Error("Agent WebSocket connection closed"));
|
|
278
|
+
};
|
|
217
279
|
});
|
|
218
280
|
}
|
|
219
281
|
function status() {
|
|
@@ -227,6 +289,7 @@ function status() {
|
|
|
227
289
|
output(`Server: ${config.server}`);
|
|
228
290
|
output(`Profile: ${config.policy.profile}`);
|
|
229
291
|
output(`Config: ${configPath()}`);
|
|
292
|
+
output(`Activity log: ${agentActivityLogPath(configPath())}`);
|
|
230
293
|
}
|
|
231
294
|
function installService() {
|
|
232
295
|
const config = existsSync(configPath()) ? loadConfig() : undefined;
|
|
@@ -271,6 +334,9 @@ export async function runAgentCli(argv) {
|
|
|
271
334
|
case "status":
|
|
272
335
|
status();
|
|
273
336
|
break;
|
|
337
|
+
case "logs":
|
|
338
|
+
await showAgentActivityLogs(configPath(), argv.slice(1));
|
|
339
|
+
break;
|
|
274
340
|
case "install-service":
|
|
275
341
|
installService();
|
|
276
342
|
break;
|
|
@@ -282,6 +348,7 @@ export async function runAgentCli(argv) {
|
|
|
282
348
|
output(" ssh-mcp-pro-agent enroll --server <url> --token <token> --alias <alias>");
|
|
283
349
|
output(" ssh-mcp-pro-agent run");
|
|
284
350
|
output(" ssh-mcp-pro-agent status");
|
|
351
|
+
output(" ssh-mcp-pro-agent logs [--tail 60] [--follow]");
|
|
285
352
|
output(" ssh-mcp-pro-agent install-service");
|
|
286
353
|
output(" ssh-mcp-pro-agent uninstall-service");
|
|
287
354
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-cli.js","sourceRoot":"","sources":["../../src/remote/agent-cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-cli.js","sourceRoot":"","sources":["../../src/remote/agent-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-executor.d.ts","sourceRoot":"","sources":["../../src/remote/agent-executor.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EAEZ,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-executor.d.ts","sourceRoot":"","sources":["../../src/remote/agent-executor.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EAEZ,MAAM,YAAY,CAAC;AA4RpB,qBAAa,aAAa;IAEtB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ,CAAC,aAAa;gBADtB,MAAM,EAAE,WAAW,EACV,aAAa,EAAE,MAAM;IAGxC,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAIjC,OAAO,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAwC7D,cAAc;IA0E5B,OAAO,CAAC,eAAe;YAYT,QAAQ;IAiDtB,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,aAAa;YAaP,QAAQ;YAkBR,SAAS;YAWT,QAAQ;IAgBtB,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,UAAU;CAMnB;AAED,wBAAgB,mBAAmB;;;;;EAOlC"}
|
|
@@ -6,6 +6,17 @@ import { withAuthorizedRead, writeAuthorizedFileAtomic } from "./safe-file.js";
|
|
|
6
6
|
import { TOOL_CAPABILITY_MAP } from "./types.js";
|
|
7
7
|
import { nowIso, randomToken, signEnvelope } from "./crypto.js";
|
|
8
8
|
const SAFE_IDENTIFIER_PATTERN = /^[A-Za-z0-9_.@:-]{1,128}$/u;
|
|
9
|
+
function scalarActionArgument(value) {
|
|
10
|
+
if (value === null || value === undefined) {
|
|
11
|
+
return "";
|
|
12
|
+
}
|
|
13
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
14
|
+
return String(value);
|
|
15
|
+
}
|
|
16
|
+
throw Object.assign(new Error("Action arguments must be scalar values"), {
|
|
17
|
+
code: "POLICY_DENIED",
|
|
18
|
+
});
|
|
19
|
+
}
|
|
9
20
|
function truncateBuffer(buffer, maxBytes) {
|
|
10
21
|
if (buffer.byteLength <= maxBytes) {
|
|
11
22
|
return { value: buffer, truncated: false };
|
|
@@ -28,7 +39,8 @@ function powerShell(command, args = []) {
|
|
|
28
39
|
};
|
|
29
40
|
}
|
|
30
41
|
function posixSingleQuote(value) {
|
|
31
|
-
|
|
42
|
+
const escaped = value.replaceAll("'", String.raw `'\''`);
|
|
43
|
+
return `'${escaped}'`;
|
|
32
44
|
}
|
|
33
45
|
function truncationMarker(maxBytes) {
|
|
34
46
|
return Buffer.from(`\n[truncated after ${maxBytes} bytes]\n`);
|
|
@@ -261,26 +273,26 @@ export class AgentExecutor {
|
|
|
261
273
|
case "get_system_status":
|
|
262
274
|
return this.getSystemStatus(timeoutSeconds);
|
|
263
275
|
case "tail_logs":
|
|
264
|
-
return this.tailLogs(
|
|
276
|
+
return this.tailLogs(scalarActionArgument(action.args.unit_or_file), timeoutSeconds);
|
|
265
277
|
case "restart_service":
|
|
266
|
-
return this.restartService(
|
|
278
|
+
return this.restartService(scalarActionArgument(action.args.service ?? ""), timeoutSeconds);
|
|
267
279
|
case "docker_ps":
|
|
268
280
|
return runCommand("docker", ["ps", "--format", "json"], {
|
|
269
281
|
timeoutSeconds,
|
|
270
282
|
maxOutputBytes: this.policy.maxOutputBytes,
|
|
271
283
|
});
|
|
272
284
|
case "docker_logs":
|
|
273
|
-
return this.dockerLogs(
|
|
285
|
+
return this.dockerLogs(scalarActionArgument(action.args.container ?? ""), Number(action.args.lines ?? 100), timeoutSeconds);
|
|
274
286
|
case "docker_restart":
|
|
275
|
-
return this.dockerRestart(
|
|
287
|
+
return this.dockerRestart(scalarActionArgument(action.args.container ?? ""), timeoutSeconds);
|
|
276
288
|
case "file_read":
|
|
277
|
-
return this.fileRead(
|
|
289
|
+
return this.fileRead(scalarActionArgument(action.args.path ?? ""));
|
|
278
290
|
case "file_write":
|
|
279
|
-
return this.fileWrite(
|
|
291
|
+
return this.fileWrite(scalarActionArgument(action.args.path ?? ""), scalarActionArgument(action.args.content ?? ""));
|
|
280
292
|
case "run_shell":
|
|
281
|
-
return this.runShell(
|
|
293
|
+
return this.runShell(scalarActionArgument(action.args.command ?? ""), action.args.cwd ? scalarActionArgument(action.args.cwd) : undefined, timeoutSeconds);
|
|
282
294
|
case "run_shell_as_root":
|
|
283
|
-
return this.runShellAsRoot(
|
|
295
|
+
return this.runShellAsRoot(scalarActionArgument(action.args.command ?? ""), action.args.cwd ? scalarActionArgument(action.args.cwd) : undefined, timeoutSeconds);
|
|
284
296
|
default:
|
|
285
297
|
throw Object.assign(new Error(`Unsupported action ${action.tool}`), {
|
|
286
298
|
code: "UNSUPPORTED_PLATFORM",
|
|
@@ -317,7 +329,7 @@ export class AgentExecutor {
|
|
|
317
329
|
}
|
|
318
330
|
if (process.platform === "win32") {
|
|
319
331
|
assertSafeIdentifier(target, "Log target");
|
|
320
|
-
const escapedTarget = target.
|
|
332
|
+
const escapedTarget = target.replaceAll("'", "''");
|
|
321
333
|
return runCommand("powershell.exe", [
|
|
322
334
|
"-NoLogo",
|
|
323
335
|
"-NoProfile",
|