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 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/config/profiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { ArchiveResult, DirectoryEntry, FileCopyResult, FileDeleteResult, FileEditResult, FileHashResult, FileMoveResult, FileReadResult, FileTailResult, FileWriteResult, SearchMatch } from "../types/index.js";
|
|
2
|
+
export declare const DEFAULT_EXCLUDED_DIRS: Set<string>;
|
|
3
|
+
export declare function isExcludedDirectory(name: string, customExcludes?: string[]): boolean;
|
|
4
|
+
/**
|
|
5
|
+
* Read file with optional line range and line limit safeguard
|
|
6
|
+
*/
|
|
7
|
+
export declare function readFileContent(filePath: string, startLine?: number, endLine?: number): Promise<FileReadResult>;
|
|
8
|
+
/**
|
|
9
|
+
* Write file, creating parent directories if needed
|
|
10
|
+
*/
|
|
11
|
+
export declare function writeFileContent(filePath: string, content: string): Promise<FileWriteResult>;
|
|
12
|
+
/**
|
|
13
|
+
* Surgical file edit - replace unique occurrence of oldText with newText
|
|
14
|
+
*/
|
|
15
|
+
export declare function editFileContent(filePath: string, oldText: string, newText: string): Promise<FileEditResult>;
|
|
16
|
+
/**
|
|
17
|
+
* List files and directories
|
|
18
|
+
*/
|
|
19
|
+
export declare function listDirectory(dirPath?: string, recursive?: boolean): Promise<DirectoryEntry[]>;
|
|
20
|
+
/**
|
|
21
|
+
* Search text inside files (simple & fast recursive search)
|
|
22
|
+
*/
|
|
23
|
+
export declare function searchInFiles(query: string, targetPath?: string, filePattern?: string): Promise<SearchMatch[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Safely delete a file or directory by sending it to the Windows Recycle Bin
|
|
26
|
+
*/
|
|
27
|
+
export declare function deleteFileToRecycleBin(targetPath: string): Promise<FileDeleteResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Move or rename a file or directory
|
|
30
|
+
*/
|
|
31
|
+
export declare function moveFile(sourcePath: string, destPath: string, overwrite?: boolean): Promise<FileMoveResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Copy a file or directory recursively
|
|
34
|
+
*/
|
|
35
|
+
export declare function copyFileOrDir(sourcePath: string, destPath: string, overwrite?: boolean): Promise<FileCopyResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Compress a directory into a .zip file using native .NET
|
|
38
|
+
*/
|
|
39
|
+
export declare function createZip(sourceDir: string, zipPath: string): Promise<ArchiveResult>;
|
|
40
|
+
/**
|
|
41
|
+
* Extract a .zip archive to a target directory using native PowerShell Expand-Archive
|
|
42
|
+
*/
|
|
43
|
+
export declare function extractZip(zipPath: string, targetDir: string, overwrite?: boolean): Promise<ArchiveResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Read the last N lines of a file with line numbers
|
|
46
|
+
*/
|
|
47
|
+
export declare function tailFileContent(filePath: string, linesCount?: number): Promise<FileTailResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Compute cryptographic hash (SHA-256, MD5, SHA-1) of a file via streaming
|
|
50
|
+
*/
|
|
51
|
+
export declare function hashFile(filePath: string, algorithm?: "sha256" | "md5" | "sha1"): Promise<FileHashResult>;
|
|
52
|
+
//# sourceMappingURL=filesystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/engine/filesystem.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAI3B,eAAO,MAAM,qBAAqB,aAOhC,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAKpF;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC,CAyDzB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC,CAmB1B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CA2BzB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,SAAM,EACb,SAAS,UAAQ,GAChB,OAAO,CAAC,cAAc,EAAE,CAAC,CAkD3B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,UAAU,SAAM,EAChB,WAAW,SAAK,GACf,OAAO,CAAC,WAAW,EAAE,CAAC,CAoDxB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8B1F;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,UAAQ,GAChB,OAAO,CAAC,cAAc,CAAC,CA6CzB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,UAAO,GACf,OAAO,CAAC,cAAc,CAAC,CA+BzB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA2C1F;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,UAAO,GACf,OAAO,CAAC,aAAa,CAAC,CAwCxB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,SAAK,GACd,OAAO,CAAC,cAAc,CAAC,CAuDzB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,QAAQ,GAAG,KAAK,GAAG,MAAiB,GAC9C,OAAO,CAAC,cAAc,CAAC,CA6CzB"}
|
|
@@ -0,0 +1,499 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import { existsSync, createReadStream, statSync } from "node:fs";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { ConfigManager } from "../config/config-manager.js";
|
|
6
|
+
import { runPowerShell } from "./powershell-runner.js";
|
|
7
|
+
export const DEFAULT_EXCLUDED_DIRS = new Set([
|
|
8
|
+
"node_modules",
|
|
9
|
+
".git",
|
|
10
|
+
"dist",
|
|
11
|
+
"logs",
|
|
12
|
+
"build",
|
|
13
|
+
"out",
|
|
14
|
+
]);
|
|
15
|
+
export function isExcludedDirectory(name, customExcludes) {
|
|
16
|
+
if (name.startsWith("."))
|
|
17
|
+
return true;
|
|
18
|
+
if (DEFAULT_EXCLUDED_DIRS.has(name))
|
|
19
|
+
return true;
|
|
20
|
+
if (customExcludes && customExcludes.includes(name))
|
|
21
|
+
return true;
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Read file with optional line range and line limit safeguard
|
|
26
|
+
*/
|
|
27
|
+
export async function readFileContent(filePath, startLine, endLine) {
|
|
28
|
+
const configManager = ConfigManager.getInstance();
|
|
29
|
+
const pathCheck = configManager.isPathAllowed(filePath);
|
|
30
|
+
if (!pathCheck.allowed) {
|
|
31
|
+
throw new Error(pathCheck.reason);
|
|
32
|
+
}
|
|
33
|
+
const resolved = path.resolve(filePath);
|
|
34
|
+
const data = await fs.readFile(resolved, "utf-8");
|
|
35
|
+
const lines = data.split(/\r?\n/);
|
|
36
|
+
const total = lines.length;
|
|
37
|
+
const config = configManager.getConfig();
|
|
38
|
+
const maxLimit = config.fileReadLineLimit || 2000;
|
|
39
|
+
if (startLine !== undefined || endLine !== undefined) {
|
|
40
|
+
const s = Math.max(1, startLine || 1);
|
|
41
|
+
const e = Math.min(total, endLine || total);
|
|
42
|
+
const count = e - s + 1;
|
|
43
|
+
if (count > maxLimit) {
|
|
44
|
+
throw new Error(`Requested line count (${count}) exceeds fileReadLineLimit (${maxLimit}). Please specify a smaller range.`);
|
|
45
|
+
}
|
|
46
|
+
const sliced = lines.slice(s - 1, e);
|
|
47
|
+
const numbered = sliced.map((line, idx) => `${s + idx}: ${line}`).join("\n");
|
|
48
|
+
return {
|
|
49
|
+
content: numbered,
|
|
50
|
+
totalLines: total,
|
|
51
|
+
startLine: s,
|
|
52
|
+
endLine: e,
|
|
53
|
+
filePath: resolved,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (total > maxLimit) {
|
|
57
|
+
// If the file is very large and no range specified, truncate to maxLimit with notice
|
|
58
|
+
const sliced = lines.slice(0, maxLimit);
|
|
59
|
+
const numbered = sliced.map((line, idx) => `${idx + 1}: ${line}`).join("\n");
|
|
60
|
+
return {
|
|
61
|
+
content: `${numbered}\n\n[Note: Output truncated at line ${maxLimit} of ${total}. Use start_line and end_line to inspect further lines.]`,
|
|
62
|
+
totalLines: total,
|
|
63
|
+
startLine: 1,
|
|
64
|
+
endLine: maxLimit,
|
|
65
|
+
filePath: resolved,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
content: data,
|
|
70
|
+
totalLines: total,
|
|
71
|
+
startLine: 1,
|
|
72
|
+
endLine: total,
|
|
73
|
+
filePath: resolved,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Write file, creating parent directories if needed
|
|
78
|
+
*/
|
|
79
|
+
export async function writeFileContent(filePath, content) {
|
|
80
|
+
const configManager = ConfigManager.getInstance();
|
|
81
|
+
if (configManager.isReadOnly()) {
|
|
82
|
+
throw new Error("File write operation is blocked: Server is operating in read-only mode.");
|
|
83
|
+
}
|
|
84
|
+
const pathCheck = configManager.isPathAllowed(filePath);
|
|
85
|
+
if (!pathCheck.allowed) {
|
|
86
|
+
throw new Error(pathCheck.reason);
|
|
87
|
+
}
|
|
88
|
+
const resolved = path.resolve(filePath);
|
|
89
|
+
await fs.mkdir(path.dirname(resolved), { recursive: true });
|
|
90
|
+
await fs.writeFile(resolved, content, "utf-8");
|
|
91
|
+
return {
|
|
92
|
+
success: true,
|
|
93
|
+
filePath: resolved,
|
|
94
|
+
bytesWritten: Buffer.byteLength(content, "utf-8"),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Surgical file edit - replace unique occurrence of oldText with newText
|
|
99
|
+
*/
|
|
100
|
+
export async function editFileContent(filePath, oldText, newText) {
|
|
101
|
+
const configManager = ConfigManager.getInstance();
|
|
102
|
+
if (configManager.isReadOnly()) {
|
|
103
|
+
throw new Error("File edit operation is blocked: Server is operating in read-only mode.");
|
|
104
|
+
}
|
|
105
|
+
const pathCheck = configManager.isPathAllowed(filePath);
|
|
106
|
+
if (!pathCheck.allowed) {
|
|
107
|
+
throw new Error(pathCheck.reason);
|
|
108
|
+
}
|
|
109
|
+
const resolved = path.resolve(filePath);
|
|
110
|
+
const content = await fs.readFile(resolved, "utf-8");
|
|
111
|
+
const occurrences = content.split(oldText).length - 1;
|
|
112
|
+
if (occurrences === 0) {
|
|
113
|
+
throw new Error(`old_text not found in file: ${resolved}`);
|
|
114
|
+
}
|
|
115
|
+
if (occurrences > 1) {
|
|
116
|
+
throw new Error(`old_text found ${occurrences} times. Please provide more surrounding lines/context to make it unique.`);
|
|
117
|
+
}
|
|
118
|
+
const updated = content.replace(oldText, newText);
|
|
119
|
+
await fs.writeFile(resolved, updated, "utf-8");
|
|
120
|
+
return { success: true, filePath: resolved };
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* List files and directories
|
|
124
|
+
*/
|
|
125
|
+
export async function listDirectory(dirPath = ".", recursive = false) {
|
|
126
|
+
const configManager = ConfigManager.getInstance();
|
|
127
|
+
const pathCheck = configManager.isPathAllowed(dirPath);
|
|
128
|
+
if (!pathCheck.allowed) {
|
|
129
|
+
throw new Error(pathCheck.reason);
|
|
130
|
+
}
|
|
131
|
+
const customExcludes = configManager.getConfig().searchExcludeDirs;
|
|
132
|
+
const resolved = path.resolve(dirPath);
|
|
133
|
+
async function scan(currentDir, depth = 0) {
|
|
134
|
+
const entries = await fs.readdir(currentDir, { withFileTypes: true });
|
|
135
|
+
const results = [];
|
|
136
|
+
for (const entry of entries) {
|
|
137
|
+
const full = path.join(currentDir, entry.name);
|
|
138
|
+
const isDir = entry.isDirectory();
|
|
139
|
+
let size = null;
|
|
140
|
+
let mtime = null;
|
|
141
|
+
try {
|
|
142
|
+
const stat = await fs.stat(full);
|
|
143
|
+
size = stat.size;
|
|
144
|
+
mtime = stat.mtime;
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// ignore inaccessible files
|
|
148
|
+
}
|
|
149
|
+
results.push({
|
|
150
|
+
name: entry.name,
|
|
151
|
+
path: full,
|
|
152
|
+
type: isDir ? "directory" : "file",
|
|
153
|
+
sizeBytes: isDir ? null : size,
|
|
154
|
+
modifiedAt: mtime ? mtime.toISOString() : null,
|
|
155
|
+
});
|
|
156
|
+
if (recursive &&
|
|
157
|
+
isDir &&
|
|
158
|
+
depth < 3 &&
|
|
159
|
+
!isExcludedDirectory(entry.name, customExcludes)) {
|
|
160
|
+
const sub = await scan(full, depth + 1);
|
|
161
|
+
results.push(...sub);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return results;
|
|
165
|
+
}
|
|
166
|
+
return await scan(resolved);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Search text inside files (simple & fast recursive search)
|
|
170
|
+
*/
|
|
171
|
+
export async function searchInFiles(query, targetPath = ".", filePattern = "") {
|
|
172
|
+
const configManager = ConfigManager.getInstance();
|
|
173
|
+
const pathCheck = configManager.isPathAllowed(targetPath);
|
|
174
|
+
if (!pathCheck.allowed) {
|
|
175
|
+
throw new Error(pathCheck.reason);
|
|
176
|
+
}
|
|
177
|
+
const customExcludes = configManager.getConfig().searchExcludeDirs;
|
|
178
|
+
const resolved = path.resolve(targetPath);
|
|
179
|
+
const matches = [];
|
|
180
|
+
async function walk(dir, depth = 0) {
|
|
181
|
+
if (depth > 4)
|
|
182
|
+
return;
|
|
183
|
+
let entries;
|
|
184
|
+
try {
|
|
185
|
+
entries = await fs.readdir(dir, { withFileTypes: true });
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
for (const entry of entries) {
|
|
191
|
+
if (isExcludedDirectory(entry.name, customExcludes)) {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
const full = path.join(dir, entry.name);
|
|
195
|
+
if (entry.isDirectory()) {
|
|
196
|
+
await walk(full, depth + 1);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
if (filePattern && !entry.name.includes(filePattern.replace("*", ""))) {
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
try {
|
|
203
|
+
const content = await fs.readFile(full, "utf-8");
|
|
204
|
+
const lines = content.split(/\r?\n/);
|
|
205
|
+
lines.forEach((line, idx) => {
|
|
206
|
+
if (line.toLowerCase().includes(query.toLowerCase())) {
|
|
207
|
+
matches.push({
|
|
208
|
+
file: full,
|
|
209
|
+
line: idx + 1,
|
|
210
|
+
text: line.trim(),
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
// ignore binary / unreadable files
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
await walk(resolved);
|
|
222
|
+
return matches.slice(0, 100); // cap to 100 matches
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Safely delete a file or directory by sending it to the Windows Recycle Bin
|
|
226
|
+
*/
|
|
227
|
+
export async function deleteFileToRecycleBin(targetPath) {
|
|
228
|
+
const configManager = ConfigManager.getInstance();
|
|
229
|
+
if (configManager.isReadOnly()) {
|
|
230
|
+
throw new Error("Operation blocked: Server is running in read-only mode.");
|
|
231
|
+
}
|
|
232
|
+
const pathCheck = configManager.isPathAllowed(targetPath);
|
|
233
|
+
if (!pathCheck.allowed) {
|
|
234
|
+
throw new Error(pathCheck.reason);
|
|
235
|
+
}
|
|
236
|
+
const resolved = path.resolve(targetPath);
|
|
237
|
+
if (!existsSync(resolved)) {
|
|
238
|
+
throw new Error(`Path not found: ${targetPath}`);
|
|
239
|
+
}
|
|
240
|
+
const stat = await fs.stat(resolved);
|
|
241
|
+
const isDir = stat.isDirectory();
|
|
242
|
+
const safePath = resolved.replace(/'/g, "''");
|
|
243
|
+
const psCmd = isDir
|
|
244
|
+
? `Add-Type -AssemblyName Microsoft.VisualBasic; [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteDirectory('${safePath}', 'OnlyErrorDialogs', 'SendToRecycleBin')`
|
|
245
|
+
: `Add-Type -AssemblyName Microsoft.VisualBasic; [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile('${safePath}', 'OnlyErrorDialogs', 'SendToRecycleBin')`;
|
|
246
|
+
await runPowerShell(psCmd, { timeoutMs: 15000 });
|
|
247
|
+
return {
|
|
248
|
+
success: true,
|
|
249
|
+
path: resolved,
|
|
250
|
+
movedToRecycleBin: true,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Move or rename a file or directory
|
|
255
|
+
*/
|
|
256
|
+
export async function moveFile(sourcePath, destPath, overwrite = false) {
|
|
257
|
+
const configManager = ConfigManager.getInstance();
|
|
258
|
+
if (configManager.isReadOnly()) {
|
|
259
|
+
throw new Error("Operation blocked: Server is running in read-only mode.");
|
|
260
|
+
}
|
|
261
|
+
const srcCheck = configManager.isPathAllowed(sourcePath);
|
|
262
|
+
if (!srcCheck.allowed) {
|
|
263
|
+
throw new Error(srcCheck.reason);
|
|
264
|
+
}
|
|
265
|
+
const dstCheck = configManager.isPathAllowed(destPath);
|
|
266
|
+
if (!dstCheck.allowed) {
|
|
267
|
+
throw new Error(dstCheck.reason);
|
|
268
|
+
}
|
|
269
|
+
const resolvedSource = path.resolve(sourcePath);
|
|
270
|
+
const resolvedDest = path.resolve(destPath);
|
|
271
|
+
if (!existsSync(resolvedSource)) {
|
|
272
|
+
throw new Error(`Source path not found: ${sourcePath}`);
|
|
273
|
+
}
|
|
274
|
+
if (existsSync(resolvedDest) && !overwrite) {
|
|
275
|
+
throw new Error(`Destination already exists: ${destPath}`);
|
|
276
|
+
}
|
|
277
|
+
await fs.mkdir(path.dirname(resolvedDest), { recursive: true });
|
|
278
|
+
try {
|
|
279
|
+
await fs.rename(resolvedSource, resolvedDest);
|
|
280
|
+
}
|
|
281
|
+
catch (err) {
|
|
282
|
+
// Cross-partition fallback (EXDEV)
|
|
283
|
+
if (err?.code === "EXDEV") {
|
|
284
|
+
await fs.cp(resolvedSource, resolvedDest, { recursive: true, force: overwrite });
|
|
285
|
+
await fs.rm(resolvedSource, { recursive: true, force: true });
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
throw err;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return {
|
|
292
|
+
success: true,
|
|
293
|
+
from: resolvedSource,
|
|
294
|
+
to: resolvedDest,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Copy a file or directory recursively
|
|
299
|
+
*/
|
|
300
|
+
export async function copyFileOrDir(sourcePath, destPath, overwrite = true) {
|
|
301
|
+
const configManager = ConfigManager.getInstance();
|
|
302
|
+
if (configManager.isReadOnly()) {
|
|
303
|
+
throw new Error("Operation blocked: Server is running in read-only mode.");
|
|
304
|
+
}
|
|
305
|
+
const srcCheck = configManager.isPathAllowed(sourcePath);
|
|
306
|
+
if (!srcCheck.allowed) {
|
|
307
|
+
throw new Error(srcCheck.reason);
|
|
308
|
+
}
|
|
309
|
+
const dstCheck = configManager.isPathAllowed(destPath);
|
|
310
|
+
if (!dstCheck.allowed) {
|
|
311
|
+
throw new Error(dstCheck.reason);
|
|
312
|
+
}
|
|
313
|
+
const resolvedSource = path.resolve(sourcePath);
|
|
314
|
+
const resolvedDest = path.resolve(destPath);
|
|
315
|
+
if (!existsSync(resolvedSource)) {
|
|
316
|
+
throw new Error(`Source path not found: ${sourcePath}`);
|
|
317
|
+
}
|
|
318
|
+
await fs.mkdir(path.dirname(resolvedDest), { recursive: true });
|
|
319
|
+
await fs.cp(resolvedSource, resolvedDest, { recursive: true, force: overwrite });
|
|
320
|
+
return {
|
|
321
|
+
success: true,
|
|
322
|
+
from: resolvedSource,
|
|
323
|
+
to: resolvedDest,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Compress a directory into a .zip file using native .NET
|
|
328
|
+
*/
|
|
329
|
+
export async function createZip(sourceDir, zipPath) {
|
|
330
|
+
const configManager = ConfigManager.getInstance();
|
|
331
|
+
if (configManager.isReadOnly()) {
|
|
332
|
+
throw new Error("Operation blocked: Server is running in read-only mode.");
|
|
333
|
+
}
|
|
334
|
+
const srcCheck = configManager.isPathAllowed(sourceDir);
|
|
335
|
+
if (!srcCheck.allowed) {
|
|
336
|
+
throw new Error(srcCheck.reason);
|
|
337
|
+
}
|
|
338
|
+
const dstCheck = configManager.isPathAllowed(zipPath);
|
|
339
|
+
if (!dstCheck.allowed) {
|
|
340
|
+
throw new Error(dstCheck.reason);
|
|
341
|
+
}
|
|
342
|
+
const resolvedSource = path.resolve(sourceDir);
|
|
343
|
+
const resolvedZip = path.resolve(zipPath);
|
|
344
|
+
if (!existsSync(resolvedSource)) {
|
|
345
|
+
throw new Error(`Source path not found: ${sourceDir}`);
|
|
346
|
+
}
|
|
347
|
+
await fs.mkdir(path.dirname(resolvedZip), { recursive: true });
|
|
348
|
+
if (existsSync(resolvedZip)) {
|
|
349
|
+
await fs.unlink(resolvedZip);
|
|
350
|
+
}
|
|
351
|
+
const safeSource = resolvedSource.replace(/'/g, "''");
|
|
352
|
+
const safeZip = resolvedZip.replace(/'/g, "''");
|
|
353
|
+
const psCmd = `Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::CreateFromDirectory('${safeSource}', '${safeZip}', [System.IO.Compression.CompressionLevel]::Optimal, $false)`;
|
|
354
|
+
const res = await runPowerShell(psCmd, { timeoutMs: 30000 });
|
|
355
|
+
if (res.exitCode !== 0 && res.stderr) {
|
|
356
|
+
throw new Error(`Failed to create zip archive: ${res.stderr}`);
|
|
357
|
+
}
|
|
358
|
+
return {
|
|
359
|
+
success: true,
|
|
360
|
+
zipPath: resolvedZip,
|
|
361
|
+
targetPath: resolvedSource,
|
|
362
|
+
action: "create",
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Extract a .zip archive to a target directory using native PowerShell Expand-Archive
|
|
367
|
+
*/
|
|
368
|
+
export async function extractZip(zipPath, targetDir, overwrite = true) {
|
|
369
|
+
const configManager = ConfigManager.getInstance();
|
|
370
|
+
if (configManager.isReadOnly()) {
|
|
371
|
+
throw new Error("Operation blocked: Server is running in read-only mode.");
|
|
372
|
+
}
|
|
373
|
+
const zipCheck = configManager.isPathAllowed(zipPath);
|
|
374
|
+
if (!zipCheck.allowed) {
|
|
375
|
+
throw new Error(zipCheck.reason);
|
|
376
|
+
}
|
|
377
|
+
const dstCheck = configManager.isPathAllowed(targetDir);
|
|
378
|
+
if (!dstCheck.allowed) {
|
|
379
|
+
throw new Error(dstCheck.reason);
|
|
380
|
+
}
|
|
381
|
+
const resolvedZip = path.resolve(zipPath);
|
|
382
|
+
const resolvedTarget = path.resolve(targetDir);
|
|
383
|
+
if (!existsSync(resolvedZip)) {
|
|
384
|
+
throw new Error(`Zip archive not found: ${zipPath}`);
|
|
385
|
+
}
|
|
386
|
+
await fs.mkdir(resolvedTarget, { recursive: true });
|
|
387
|
+
const safeZip = resolvedZip.replace(/'/g, "''");
|
|
388
|
+
const safeTarget = resolvedTarget.replace(/'/g, "''");
|
|
389
|
+
const psCmd = `Expand-Archive -LiteralPath '${safeZip}' -DestinationPath '${safeTarget}' ${overwrite ? "-Force" : ""}`;
|
|
390
|
+
const res = await runPowerShell(psCmd, { timeoutMs: 30000 });
|
|
391
|
+
if (res.exitCode !== 0 && res.stderr) {
|
|
392
|
+
throw new Error(`Failed to extract zip archive: ${res.stderr}`);
|
|
393
|
+
}
|
|
394
|
+
return {
|
|
395
|
+
success: true,
|
|
396
|
+
zipPath: resolvedZip,
|
|
397
|
+
targetPath: resolvedTarget,
|
|
398
|
+
action: "extract",
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Read the last N lines of a file with line numbers
|
|
403
|
+
*/
|
|
404
|
+
export async function tailFileContent(filePath, linesCount = 50) {
|
|
405
|
+
const configManager = ConfigManager.getInstance();
|
|
406
|
+
const pathCheck = configManager.isPathAllowed(filePath);
|
|
407
|
+
if (!pathCheck.allowed) {
|
|
408
|
+
throw new Error(pathCheck.reason);
|
|
409
|
+
}
|
|
410
|
+
const resolved = path.resolve(filePath);
|
|
411
|
+
if (!existsSync(resolved)) {
|
|
412
|
+
throw new Error(`File not found: ${filePath}`);
|
|
413
|
+
}
|
|
414
|
+
const stats = statSync(resolved);
|
|
415
|
+
if (stats.isDirectory()) {
|
|
416
|
+
throw new Error(`Target path is a directory, not a file: ${filePath}`);
|
|
417
|
+
}
|
|
418
|
+
const config = configManager.getConfig();
|
|
419
|
+
const maxLimit = config.fileReadLineLimit || 2000;
|
|
420
|
+
const count = Math.min(Math.max(1, linesCount), maxLimit);
|
|
421
|
+
// For very large files (> 512KB), read only the tail chunk
|
|
422
|
+
const CHUNK_SIZE = 512 * 1024;
|
|
423
|
+
let rawText = "";
|
|
424
|
+
if (stats.size > CHUNK_SIZE) {
|
|
425
|
+
const handle = await fs.open(resolved, "r");
|
|
426
|
+
try {
|
|
427
|
+
const buffer = Buffer.alloc(CHUNK_SIZE);
|
|
428
|
+
const position = stats.size - CHUNK_SIZE;
|
|
429
|
+
const { bytesRead } = await handle.read(buffer, 0, CHUNK_SIZE, position);
|
|
430
|
+
rawText = buffer.subarray(0, bytesRead).toString("utf-8");
|
|
431
|
+
}
|
|
432
|
+
finally {
|
|
433
|
+
await handle.close();
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
rawText = await fs.readFile(resolved, "utf-8");
|
|
438
|
+
}
|
|
439
|
+
const allLines = rawText.split(/\r?\n/);
|
|
440
|
+
if (allLines.length > 1 && allLines[allLines.length - 1] === "") {
|
|
441
|
+
allLines.pop();
|
|
442
|
+
}
|
|
443
|
+
const tailLines = allLines.slice(-count);
|
|
444
|
+
const startIdx = Math.max(1, allLines.length - tailLines.length + 1);
|
|
445
|
+
const content = tailLines
|
|
446
|
+
.map((line, idx) => `${startIdx + idx}: ${line}`)
|
|
447
|
+
.join("\n");
|
|
448
|
+
return {
|
|
449
|
+
filePath: resolved,
|
|
450
|
+
totalLines: allLines.length,
|
|
451
|
+
linesReturned: tailLines.length,
|
|
452
|
+
content,
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Compute cryptographic hash (SHA-256, MD5, SHA-1) of a file via streaming
|
|
457
|
+
*/
|
|
458
|
+
export async function hashFile(filePath, algorithm = "sha256") {
|
|
459
|
+
const configManager = ConfigManager.getInstance();
|
|
460
|
+
const pathCheck = configManager.isPathAllowed(filePath);
|
|
461
|
+
if (!pathCheck.allowed) {
|
|
462
|
+
throw new Error(pathCheck.reason);
|
|
463
|
+
}
|
|
464
|
+
const resolved = path.resolve(filePath);
|
|
465
|
+
if (!existsSync(resolved)) {
|
|
466
|
+
throw new Error(`File not found: ${filePath}`);
|
|
467
|
+
}
|
|
468
|
+
const stats = statSync(resolved);
|
|
469
|
+
if (stats.isDirectory()) {
|
|
470
|
+
throw new Error(`Target path is a directory, not a file: ${filePath}`);
|
|
471
|
+
}
|
|
472
|
+
const validAlgos = ["sha256", "md5", "sha1"];
|
|
473
|
+
if (!validAlgos.includes(algorithm)) {
|
|
474
|
+
throw new Error(`Unsupported hash algorithm '${algorithm}'. Choose from: ${validAlgos.join(", ")}`);
|
|
475
|
+
}
|
|
476
|
+
const hash = await new Promise((resolve, reject) => {
|
|
477
|
+
const hasher = createHash(algorithm);
|
|
478
|
+
const stream = createReadStream(resolved);
|
|
479
|
+
stream.on("data", (chunk) => hasher.update(chunk));
|
|
480
|
+
stream.on("end", () => resolve(hasher.digest("hex")));
|
|
481
|
+
stream.on("error", (err) => reject(err));
|
|
482
|
+
});
|
|
483
|
+
const sizeBytes = stats.size;
|
|
484
|
+
let sizeFormatted = `${sizeBytes} B`;
|
|
485
|
+
if (sizeBytes >= 1024 * 1024) {
|
|
486
|
+
sizeFormatted = `${(sizeBytes / (1024 * 1024)).toFixed(2)} MB`;
|
|
487
|
+
}
|
|
488
|
+
else if (sizeBytes >= 1024) {
|
|
489
|
+
sizeFormatted = `${(sizeBytes / 1024).toFixed(2)} KB`;
|
|
490
|
+
}
|
|
491
|
+
return {
|
|
492
|
+
filePath: resolved,
|
|
493
|
+
algorithm,
|
|
494
|
+
hash,
|
|
495
|
+
sizeBytes,
|
|
496
|
+
sizeFormatted,
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
//# sourceMappingURL=filesystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/engine/filesystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { HttpPingResult, HttpRequestOptions, HttpRequestResult } from "../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Fast HTTP health check ping for local/remote servers
|
|
4
|
+
*/
|
|
5
|
+
export declare function pingEndpoint(url: string, timeoutMs?: number, expectedStatus?: number): Promise<HttpPingResult>;
|
|
6
|
+
/**
|
|
7
|
+
* Execute HTTP request to test APIs, microservices, and web endpoints
|
|
8
|
+
*/
|
|
9
|
+
export declare function executeHttpRequest(options: HttpRequestOptions): Promise<HttpRequestResult>;
|
|
10
|
+
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/engine/http-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE/F;;GAEG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,SAAS,SAAO,EAChB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,cAAc,CAAC,CA0BzB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8DhG"}
|