winhelm-mcp 1.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.
- package/CHANGELOG.md +96 -0
- package/LICENSE +21 -0
- package/README.md +646 -0
- package/dist/config/config-manager.d.ts +50 -0
- package/dist/config/config-manager.d.ts.map +1 -0
- package/dist/config/config-manager.js +300 -0
- package/dist/config/config-manager.js.map +1 -0
- package/dist/config/default-config.d.ts +4 -0
- package/dist/config/default-config.d.ts.map +1 -0
- package/dist/config/default-config.js +48 -0
- package/dist/config/default-config.js.map +1 -0
- package/dist/config/profiles.d.ts +16 -0
- package/dist/config/profiles.d.ts.map +1 -0
- package/dist/config/profiles.js +208 -0
- package/dist/config/profiles.js.map +1 -0
- package/dist/engine/filesystem.d.ts +52 -0
- package/dist/engine/filesystem.d.ts.map +1 -0
- package/dist/engine/filesystem.js +499 -0
- package/dist/engine/filesystem.js.map +1 -0
- package/dist/engine/http-client.d.ts +10 -0
- package/dist/engine/http-client.d.ts.map +1 -0
- package/dist/engine/http-client.js +93 -0
- package/dist/engine/http-client.js.map +1 -0
- package/dist/engine/pdf-generator.d.ts +15 -0
- package/dist/engine/pdf-generator.d.ts.map +1 -0
- package/dist/engine/pdf-generator.js +325 -0
- package/dist/engine/pdf-generator.js.map +1 -0
- package/dist/engine/powershell-runner.d.ts +23 -0
- package/dist/engine/powershell-runner.d.ts.map +1 -0
- package/dist/engine/powershell-runner.js +148 -0
- package/dist/engine/powershell-runner.js.map +1 -0
- package/dist/engine/ripgrep.d.ts +20 -0
- package/dist/engine/ripgrep.d.ts.map +1 -0
- package/dist/engine/ripgrep.js +173 -0
- package/dist/engine/ripgrep.js.map +1 -0
- package/dist/engine/system.d.ts +67 -0
- package/dist/engine/system.d.ts.map +1 -0
- package/dist/engine/system.js +558 -0
- package/dist/engine/system.js.map +1 -0
- package/dist/engine/task-manager.d.ts +66 -0
- package/dist/engine/task-manager.d.ts.map +1 -0
- package/dist/engine/task-manager.js +203 -0
- package/dist/engine/task-manager.js.map +1 -0
- package/dist/gateway/dashboard-html.d.ts +7 -0
- package/dist/gateway/dashboard-html.d.ts.map +1 -0
- package/dist/gateway/dashboard-html.js +624 -0
- package/dist/gateway/dashboard-html.js.map +1 -0
- package/dist/gateway/preview-html.d.ts +5 -0
- package/dist/gateway/preview-html.d.ts.map +1 -0
- package/dist/gateway/preview-html.js +351 -0
- package/dist/gateway/preview-html.js.map +1 -0
- package/dist/gateway/rate-limiter.d.ts +8 -0
- package/dist/gateway/rate-limiter.d.ts.map +1 -0
- package/dist/gateway/rate-limiter.js +51 -0
- package/dist/gateway/rate-limiter.js.map +1 -0
- package/dist/gateway/server.d.ts +18 -0
- package/dist/gateway/server.d.ts.map +1 -0
- package/dist/gateway/server.js +337 -0
- package/dist/gateway/server.js.map +1 -0
- package/dist/gateway/sse-gateway.d.ts +43 -0
- package/dist/gateway/sse-gateway.d.ts.map +1 -0
- package/dist/gateway/sse-gateway.js +161 -0
- package/dist/gateway/sse-gateway.js.map +1 -0
- package/dist/gateway/streamable-gateway.d.ts +39 -0
- package/dist/gateway/streamable-gateway.d.ts.map +1 -0
- package/dist/gateway/streamable-gateway.js +176 -0
- package/dist/gateway/streamable-gateway.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +164 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/desktop-tools.d.ts +3 -0
- package/dist/tools/desktop-tools.d.ts.map +1 -0
- package/dist/tools/desktop-tools.js +280 -0
- package/dist/tools/desktop-tools.js.map +1 -0
- package/dist/tools/file-tools.d.ts +3 -0
- package/dist/tools/file-tools.d.ts.map +1 -0
- package/dist/tools/file-tools.js +433 -0
- package/dist/tools/file-tools.js.map +1 -0
- package/dist/tools/index.d.ts +12 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +16 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/network-tools.d.ts +3 -0
- package/dist/tools/network-tools.d.ts.map +1 -0
- package/dist/tools/network-tools.js +108 -0
- package/dist/tools/network-tools.js.map +1 -0
- package/dist/tools/registry.d.ts +50 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +54 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/terminal-tools.d.ts +3 -0
- package/dist/tools/terminal-tools.d.ts.map +1 -0
- package/dist/tools/terminal-tools.js +152 -0
- package/dist/tools/terminal-tools.js.map +1 -0
- package/dist/tools/tool-wrapper.d.ts +7 -0
- package/dist/tools/tool-wrapper.d.ts.map +1 -0
- package/dist/tools/tool-wrapper.js +47 -0
- package/dist/tools/tool-wrapper.js.map +1 -0
- package/dist/types/index.d.ts +261 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/file-logger.d.ts +24 -0
- package/dist/utils/file-logger.d.ts.map +1 -0
- package/dist/utils/file-logger.js +117 -0
- package/dist/utils/file-logger.js.map +1 -0
- package/dist/utils/logger.d.ts +51 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +189 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/sanitizer.d.ts +13 -0
- package/dist/utils/sanitizer.d.ts.map +1 -0
- package/dist/utils/sanitizer.js +60 -0
- package/dist/utils/sanitizer.js.map +1 -0
- package/docs/EXAMPLES.md +171 -0
- package/docs/PROFILES.md +423 -0
- package/docs/SECURITY.md +190 -0
- package/docs/TOOLS.md +366 -0
- package/manifest.json +74 -0
- package/package.json +89 -0
- package/scripts/build-exe.ps1 +37 -0
- package/scripts/manage-service.ps1 +112 -0
- package/server.json +23 -0
- package/winhelm.config.example.json +30 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { spawn, execSync } from "node:child_process";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { ConfigManager } from "../config/config-manager.js";
|
|
4
|
+
import { logger } from "../utils/logger.js";
|
|
5
|
+
import { getPowerShellExecutable } from "./powershell-runner.js";
|
|
6
|
+
export class TaskManager {
|
|
7
|
+
static instance = null;
|
|
8
|
+
tasks = new Map();
|
|
9
|
+
maxBufferLines = 1000;
|
|
10
|
+
maxRetainedTasks = 50;
|
|
11
|
+
constructor() { }
|
|
12
|
+
static getInstance() {
|
|
13
|
+
if (!TaskManager.instance) {
|
|
14
|
+
TaskManager.instance = new TaskManager();
|
|
15
|
+
}
|
|
16
|
+
return TaskManager.instance;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Start a command as a long-running background task
|
|
20
|
+
*/
|
|
21
|
+
startTask(command, cwd = process.cwd()) {
|
|
22
|
+
const configManager = ConfigManager.getInstance();
|
|
23
|
+
// 1. Security Check
|
|
24
|
+
const check = configManager.isCommandAllowed(command);
|
|
25
|
+
if (!check.allowed) {
|
|
26
|
+
const reason = check.reason || "Command blocked by security policy";
|
|
27
|
+
logger.security(reason, command);
|
|
28
|
+
throw new Error(reason);
|
|
29
|
+
}
|
|
30
|
+
// 2. Validate CWD against allowedDirectories
|
|
31
|
+
const cwdCheck = configManager.isPathAllowed(cwd);
|
|
32
|
+
const config = configManager.getConfig();
|
|
33
|
+
if (!cwdCheck.allowed && config.allowSystemExecution === false) {
|
|
34
|
+
const reason = cwdCheck.reason || `Working directory "${cwd}" is not permitted`;
|
|
35
|
+
logger.security(reason, command);
|
|
36
|
+
throw new Error(reason);
|
|
37
|
+
}
|
|
38
|
+
const taskId = randomUUID().slice(0, 8);
|
|
39
|
+
const utf8Setup = "[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new(); " +
|
|
40
|
+
"[Console]::InputEncoding = [System.Text.UTF8Encoding]::new(); " +
|
|
41
|
+
"$OutputEncoding = [System.Text.UTF8Encoding]::new(); ";
|
|
42
|
+
const fullCommand = utf8Setup + command;
|
|
43
|
+
const preferPwsh = config.preferPwsh !== false;
|
|
44
|
+
const executable = getPowerShellExecutable(preferPwsh);
|
|
45
|
+
const child = spawn(executable, ["-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-Command", fullCommand], {
|
|
46
|
+
cwd,
|
|
47
|
+
windowsHide: true,
|
|
48
|
+
env: { ...process.env, PYTHONIOENCODING: "utf-8" },
|
|
49
|
+
});
|
|
50
|
+
const task = {
|
|
51
|
+
id: taskId,
|
|
52
|
+
command,
|
|
53
|
+
cwd,
|
|
54
|
+
pid: child.pid,
|
|
55
|
+
startTime: new Date().toISOString(),
|
|
56
|
+
status: "running",
|
|
57
|
+
outputBuffer: [],
|
|
58
|
+
process: child,
|
|
59
|
+
};
|
|
60
|
+
const appendOutput = (chunk) => {
|
|
61
|
+
const lines = chunk.toString("utf-8").split(/\r?\n/);
|
|
62
|
+
for (const line of lines) {
|
|
63
|
+
if (!line && lines.length === 1)
|
|
64
|
+
continue;
|
|
65
|
+
task.outputBuffer.push(line);
|
|
66
|
+
if (task.outputBuffer.length > this.maxBufferLines) {
|
|
67
|
+
task.outputBuffer.shift();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
child.stdout?.on("data", appendOutput);
|
|
72
|
+
child.stderr?.on("data", appendOutput);
|
|
73
|
+
child.on("close", (code) => {
|
|
74
|
+
task.endTime = new Date().toISOString();
|
|
75
|
+
task.exitCode = code;
|
|
76
|
+
if (task.status === "running") {
|
|
77
|
+
task.status = code === 0 ? "completed" : "failed";
|
|
78
|
+
}
|
|
79
|
+
logger.info(`Background task [${taskId}] exited`, `Exit code: ${code}`);
|
|
80
|
+
});
|
|
81
|
+
child.on("error", (err) => {
|
|
82
|
+
task.endTime = new Date().toISOString();
|
|
83
|
+
task.status = "failed";
|
|
84
|
+
task.outputBuffer.push(`[Process Error]: ${err.message}`);
|
|
85
|
+
logger.error(`Background task [${taskId}] error`, err.message);
|
|
86
|
+
});
|
|
87
|
+
this.tasks.set(taskId, task);
|
|
88
|
+
// Prune oldest completed tasks if exceeding retention limit
|
|
89
|
+
if (this.tasks.size > this.maxRetainedTasks) {
|
|
90
|
+
for (const [id, t] of this.tasks.entries()) {
|
|
91
|
+
if (t.status !== "running") {
|
|
92
|
+
this.tasks.delete(id);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
logger.info(`Background task started [${taskId}]`, `PID: ${child.pid} | Command: ${command}`);
|
|
98
|
+
return {
|
|
99
|
+
id: task.id,
|
|
100
|
+
command: task.command,
|
|
101
|
+
cwd: task.cwd,
|
|
102
|
+
pid: task.pid,
|
|
103
|
+
startTime: task.startTime,
|
|
104
|
+
status: task.status,
|
|
105
|
+
outputLinesCount: 0,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* List all background tasks
|
|
110
|
+
*/
|
|
111
|
+
listTasks() {
|
|
112
|
+
return Array.from(this.tasks.values()).map((t) => ({
|
|
113
|
+
id: t.id,
|
|
114
|
+
command: t.command,
|
|
115
|
+
cwd: t.cwd,
|
|
116
|
+
pid: t.pid,
|
|
117
|
+
startTime: t.startTime,
|
|
118
|
+
endTime: t.endTime,
|
|
119
|
+
status: t.status,
|
|
120
|
+
exitCode: t.exitCode,
|
|
121
|
+
outputLinesCount: t.outputBuffer.length,
|
|
122
|
+
}));
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get buffered logs for a task
|
|
126
|
+
*/
|
|
127
|
+
getTaskLogs(taskId, tailLines = 100) {
|
|
128
|
+
const task = this.tasks.get(taskId);
|
|
129
|
+
if (!task) {
|
|
130
|
+
throw new Error(`Background task "${taskId}" not found`);
|
|
131
|
+
}
|
|
132
|
+
const sliced = task.outputBuffer.slice(-tailLines);
|
|
133
|
+
return {
|
|
134
|
+
logs: sliced.join("\n"),
|
|
135
|
+
task: {
|
|
136
|
+
id: task.id,
|
|
137
|
+
command: task.command,
|
|
138
|
+
cwd: task.cwd,
|
|
139
|
+
pid: task.pid,
|
|
140
|
+
startTime: task.startTime,
|
|
141
|
+
endTime: task.endTime,
|
|
142
|
+
status: task.status,
|
|
143
|
+
exitCode: task.exitCode,
|
|
144
|
+
outputLinesCount: task.outputBuffer.length,
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Send text to standard input of a running background task
|
|
150
|
+
*/
|
|
151
|
+
sendInput(taskId, input) {
|
|
152
|
+
const task = this.tasks.get(taskId);
|
|
153
|
+
if (!task) {
|
|
154
|
+
throw new Error(`Background task "${taskId}" not found`);
|
|
155
|
+
}
|
|
156
|
+
if (task.status !== "running" || !task.process || !task.process.stdin) {
|
|
157
|
+
throw new Error(`Task "${taskId}" is not currently running (status: ${task.status})`);
|
|
158
|
+
}
|
|
159
|
+
task.process.stdin.write(input + "\n");
|
|
160
|
+
return { success: true };
|
|
161
|
+
}
|
|
162
|
+
terminateProcess(task) {
|
|
163
|
+
if (!task.process || task.status !== "running")
|
|
164
|
+
return;
|
|
165
|
+
task.status = "killed";
|
|
166
|
+
if (task.pid && process.platform === "win32") {
|
|
167
|
+
try {
|
|
168
|
+
execSync(`taskkill /pid ${task.pid} /T /F`, { stdio: "ignore" });
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
// Fallback to standard process kill
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
task.process.kill("SIGKILL");
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
// process might already be dead
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Terminate a background task
|
|
184
|
+
*/
|
|
185
|
+
killTask(taskId) {
|
|
186
|
+
const task = this.tasks.get(taskId);
|
|
187
|
+
if (!task) {
|
|
188
|
+
throw new Error(`Background task "${taskId}" not found`);
|
|
189
|
+
}
|
|
190
|
+
this.terminateProcess(task);
|
|
191
|
+
return { success: true };
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Terminate all background tasks on server shutdown
|
|
195
|
+
*/
|
|
196
|
+
killAll() {
|
|
197
|
+
for (const task of this.tasks.values()) {
|
|
198
|
+
this.terminateProcess(task);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
export const taskManager = TaskManager.getInstance();
|
|
203
|
+
//# sourceMappingURL=task-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-manager.js","sourceRoot":"","sources":["../../src/engine/task-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ToolProfile } from "../config/profiles.js";
|
|
2
|
+
/**
|
|
3
|
+
* Lightweight, zero-dependency, self-contained Web Monitor Dashboard for WinHelm.
|
|
4
|
+
* Served directly by Express without external CDN dependencies.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getDashboardHtml(activeProfile?: ToolProfile): string;
|
|
7
|
+
//# sourceMappingURL=dashboard-html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-html.d.ts","sourceRoot":"","sources":["../../src/gateway/dashboard-html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,GAAE,WAAoB,GAAG,MAAM,CA4mB5E"}
|