@nerdvana/parism 0.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/README.md +242 -0
- package/dist/config/loader.d.ts +16 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +34 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/engine/executor.d.ts +8 -0
- package/dist/engine/executor.d.ts.map +1 -0
- package/dist/engine/executor.js +44 -0
- package/dist/engine/executor.js.map +1 -0
- package/dist/engine/guard.d.ts +18 -0
- package/dist/engine/guard.d.ts.map +1 -0
- package/dist/engine/guard.js +42 -0
- package/dist/engine/guard.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/env/env.d.ts +4 -0
- package/dist/parsers/env/env.d.ts.map +1 -0
- package/dist/parsers/env/env.js +13 -0
- package/dist/parsers/env/env.js.map +1 -0
- package/dist/parsers/env/index.d.ts +4 -0
- package/dist/parsers/env/index.d.ts.map +1 -0
- package/dist/parsers/env/index.js +4 -0
- package/dist/parsers/env/index.js.map +1 -0
- package/dist/parsers/env/pwd.d.ts +4 -0
- package/dist/parsers/env/pwd.d.ts.map +1 -0
- package/dist/parsers/env/pwd.js +4 -0
- package/dist/parsers/env/pwd.js.map +1 -0
- package/dist/parsers/env/which.d.ts +4 -0
- package/dist/parsers/env/which.d.ts.map +1 -0
- package/dist/parsers/env/which.js +4 -0
- package/dist/parsers/env/which.js.map +1 -0
- package/dist/parsers/fs/df.d.ts +12 -0
- package/dist/parsers/fs/df.d.ts.map +1 -0
- package/dist/parsers/fs/df.js +19 -0
- package/dist/parsers/fs/df.js.map +1 -0
- package/dist/parsers/fs/du.d.ts +8 -0
- package/dist/parsers/fs/du.d.ts.map +1 -0
- package/dist/parsers/fs/du.js +13 -0
- package/dist/parsers/fs/du.js.map +1 -0
- package/dist/parsers/fs/find.d.ts +4 -0
- package/dist/parsers/fs/find.d.ts.map +1 -0
- package/dist/parsers/fs/find.js +5 -0
- package/dist/parsers/fs/find.js.map +1 -0
- package/dist/parsers/fs/index.d.ts +7 -0
- package/dist/parsers/fs/index.d.ts.map +1 -0
- package/dist/parsers/fs/index.js +7 -0
- package/dist/parsers/fs/index.js.map +1 -0
- package/dist/parsers/fs/ls.d.ts +14 -0
- package/dist/parsers/fs/ls.d.ts.map +1 -0
- package/dist/parsers/fs/ls.js +26 -0
- package/dist/parsers/fs/ls.js.map +1 -0
- package/dist/parsers/fs/stat.d.ts +4 -0
- package/dist/parsers/fs/stat.d.ts.map +1 -0
- package/dist/parsers/fs/stat.js +4 -0
- package/dist/parsers/fs/stat.js.map +1 -0
- package/dist/parsers/fs/tree.d.ts +12 -0
- package/dist/parsers/fs/tree.d.ts.map +1 -0
- package/dist/parsers/fs/tree.js +45 -0
- package/dist/parsers/fs/tree.js.map +1 -0
- package/dist/parsers/git/branch.d.ts +13 -0
- package/dist/parsers/git/branch.d.ts.map +1 -0
- package/dist/parsers/git/branch.js +26 -0
- package/dist/parsers/git/branch.js.map +1 -0
- package/dist/parsers/git/diff.d.ts +5 -0
- package/dist/parsers/git/diff.d.ts.map +1 -0
- package/dist/parsers/git/diff.js +5 -0
- package/dist/parsers/git/diff.js.map +1 -0
- package/dist/parsers/git/index.d.ts +5 -0
- package/dist/parsers/git/index.d.ts.map +1 -0
- package/dist/parsers/git/index.js +5 -0
- package/dist/parsers/git/index.js.map +1 -0
- package/dist/parsers/git/log.d.ts +8 -0
- package/dist/parsers/git/log.d.ts.map +1 -0
- package/dist/parsers/git/log.js +12 -0
- package/dist/parsers/git/log.js.map +1 -0
- package/dist/parsers/git/status.d.ts +8 -0
- package/dist/parsers/git/status.d.ts.map +1 -0
- package/dist/parsers/git/status.js +32 -0
- package/dist/parsers/git/status.js.map +1 -0
- package/dist/parsers/index.d.ts +6 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +56 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/network/curl.d.ts +9 -0
- package/dist/parsers/network/curl.d.ts.map +1 -0
- package/dist/parsers/network/curl.js +20 -0
- package/dist/parsers/network/curl.js.map +1 -0
- package/dist/parsers/network/dig.d.ts +16 -0
- package/dist/parsers/network/dig.d.ts.map +1 -0
- package/dist/parsers/network/dig.js +52 -0
- package/dist/parsers/network/dig.js.map +1 -0
- package/dist/parsers/network/index.d.ts +7 -0
- package/dist/parsers/network/index.d.ts.map +1 -0
- package/dist/parsers/network/index.js +7 -0
- package/dist/parsers/network/index.js.map +1 -0
- package/dist/parsers/network/lsof.d.ts +14 -0
- package/dist/parsers/network/lsof.d.ts.map +1 -0
- package/dist/parsers/network/lsof.js +26 -0
- package/dist/parsers/network/lsof.js.map +1 -0
- package/dist/parsers/network/netstat.d.ts +4 -0
- package/dist/parsers/network/netstat.d.ts.map +1 -0
- package/dist/parsers/network/netstat.js +14 -0
- package/dist/parsers/network/netstat.js.map +1 -0
- package/dist/parsers/network/ping.d.ts +12 -0
- package/dist/parsers/network/ping.d.ts.map +1 -0
- package/dist/parsers/network/ping.js +16 -0
- package/dist/parsers/network/ping.js.map +1 -0
- package/dist/parsers/network/ss.d.ts +14 -0
- package/dist/parsers/network/ss.d.ts.map +1 -0
- package/dist/parsers/network/ss.js +32 -0
- package/dist/parsers/network/ss.js.map +1 -0
- package/dist/parsers/process/index.d.ts +3 -0
- package/dist/parsers/process/index.d.ts.map +1 -0
- package/dist/parsers/process/index.js +3 -0
- package/dist/parsers/process/index.js.map +1 -0
- package/dist/parsers/process/kill.d.ts +4 -0
- package/dist/parsers/process/kill.d.ts.map +1 -0
- package/dist/parsers/process/kill.js +4 -0
- package/dist/parsers/process/kill.js.map +1 -0
- package/dist/parsers/process/ps.d.ts +17 -0
- package/dist/parsers/process/ps.d.ts.map +1 -0
- package/dist/parsers/process/ps.js +24 -0
- package/dist/parsers/process/ps.js.map +1 -0
- package/dist/parsers/registry.d.ts +18 -0
- package/dist/parsers/registry.d.ts.map +1 -0
- package/dist/parsers/registry.js +26 -0
- package/dist/parsers/registry.js.map +1 -0
- package/dist/parsers/system/free.d.ts +15 -0
- package/dist/parsers/system/free.d.ts.map +1 -0
- package/dist/parsers/system/free.js +27 -0
- package/dist/parsers/system/free.js.map +1 -0
- package/dist/parsers/system/id.d.ts +12 -0
- package/dist/parsers/system/id.d.ts.map +1 -0
- package/dist/parsers/system/id.js +13 -0
- package/dist/parsers/system/id.js.map +1 -0
- package/dist/parsers/system/index.d.ts +4 -0
- package/dist/parsers/system/index.d.ts.map +1 -0
- package/dist/parsers/system/index.js +4 -0
- package/dist/parsers/system/index.js.map +1 -0
- package/dist/parsers/system/uname.d.ts +11 -0
- package/dist/parsers/system/uname.d.ts.map +1 -0
- package/dist/parsers/system/uname.js +13 -0
- package/dist/parsers/system/uname.js.map +1 -0
- package/dist/parsers/text/cat.d.ts +4 -0
- package/dist/parsers/text/cat.d.ts.map +1 -0
- package/dist/parsers/text/cat.js +4 -0
- package/dist/parsers/text/cat.js.map +1 -0
- package/dist/parsers/text/grep.d.ts +9 -0
- package/dist/parsers/text/grep.d.ts.map +1 -0
- package/dist/parsers/text/grep.js +16 -0
- package/dist/parsers/text/grep.js.map +1 -0
- package/dist/parsers/text/head.d.ts +4 -0
- package/dist/parsers/text/head.d.ts.map +1 -0
- package/dist/parsers/text/head.js +4 -0
- package/dist/parsers/text/head.js.map +1 -0
- package/dist/parsers/text/index.d.ts +6 -0
- package/dist/parsers/text/index.d.ts.map +1 -0
- package/dist/parsers/text/index.js +6 -0
- package/dist/parsers/text/index.js.map +1 -0
- package/dist/parsers/text/tail.d.ts +4 -0
- package/dist/parsers/text/tail.d.ts.map +1 -0
- package/dist/parsers/text/tail.js +4 -0
- package/dist/parsers/text/tail.js.map +1 -0
- package/dist/parsers/text/wc.d.ts +7 -0
- package/dist/parsers/text/wc.d.ts.map +1 -0
- package/dist/parsers/text/wc.js +8 -0
- package/dist/parsers/text/wc.js.map +1 -0
- package/dist/parsers/windows/dir.d.ts +19 -0
- package/dist/parsers/windows/dir.d.ts.map +1 -0
- package/dist/parsers/windows/dir.js +58 -0
- package/dist/parsers/windows/dir.js.map +1 -0
- package/dist/parsers/windows/index.d.ts +5 -0
- package/dist/parsers/windows/index.d.ts.map +1 -0
- package/dist/parsers/windows/index.js +5 -0
- package/dist/parsers/windows/index.js.map +1 -0
- package/dist/parsers/windows/ipconfig.d.ts +23 -0
- package/dist/parsers/windows/ipconfig.d.ts.map +1 -0
- package/dist/parsers/windows/ipconfig.js +101 -0
- package/dist/parsers/windows/ipconfig.js.map +1 -0
- package/dist/parsers/windows/systeminfo.d.ts +24 -0
- package/dist/parsers/windows/systeminfo.d.ts.map +1 -0
- package/dist/parsers/windows/systeminfo.js +102 -0
- package/dist/parsers/windows/systeminfo.js.map +1 -0
- package/dist/parsers/windows/tasklist.d.ts +16 -0
- package/dist/parsers/windows/tasklist.d.ts.map +1 -0
- package/dist/parsers/windows/tasklist.js +84 -0
- package/dist/parsers/windows/tasklist.js.map +1 -0
- package/dist/server.d.ts +12 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +59 -0
- package/dist/server.js.map +1 -0
- package/dist/types/envelope.d.ts +33 -0
- package/dist/types/envelope.d.ts.map +1 -0
- package/dist/types/envelope.js +2 -0
- package/dist/types/envelope.js.map +1 -0
- package/package.json +28 -0
- package/prism.config.json +19 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface DirEntry {
|
|
2
|
+
name: string;
|
|
3
|
+
type: "file" | "directory";
|
|
4
|
+
size_bytes: number | null;
|
|
5
|
+
modified_at: string | null;
|
|
6
|
+
}
|
|
7
|
+
export interface DirResult {
|
|
8
|
+
directory: string | null;
|
|
9
|
+
entries: DirEntry[];
|
|
10
|
+
total_files: number;
|
|
11
|
+
total_dirs: number;
|
|
12
|
+
free_bytes: number | null;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Parses Windows `dir` command output.
|
|
16
|
+
* Handles both /b (bare) and default verbose output.
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseDir(_cmd: string, _args: string[], raw: string): DirResult;
|
|
19
|
+
//# sourceMappingURL=dir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dir.d.ts","sourceRoot":"","sources":["../../../src/parsers/windows/dir.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAS,MAAM,CAAC;IACpB,IAAI,EAAS,MAAM,GAAG,WAAW,CAAC;IAClC,UAAU,EAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAI,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAM,QAAQ,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAG,MAAM,CAAC;IACpB,UAAU,EAAG,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAwD9E"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses Windows `dir` command output.
|
|
3
|
+
* Handles both /b (bare) and default verbose output.
|
|
4
|
+
*/
|
|
5
|
+
export function parseDir(_cmd, _args, raw) {
|
|
6
|
+
const lines = raw.split(/\r?\n/);
|
|
7
|
+
const entries = [];
|
|
8
|
+
let directory = null;
|
|
9
|
+
let totalFiles = 0;
|
|
10
|
+
let totalDirs = 0;
|
|
11
|
+
let freeBytes = null;
|
|
12
|
+
// Detect bare mode (/b): no header, no summary
|
|
13
|
+
const hasDirHeader = raw.includes("Directory of ") || raw.includes("Volume in drive");
|
|
14
|
+
if (!hasDirHeader) {
|
|
15
|
+
for (const line of lines) {
|
|
16
|
+
const name = line.trim();
|
|
17
|
+
if (!name)
|
|
18
|
+
continue;
|
|
19
|
+
entries.push({ name, type: "file", size_bytes: null, modified_at: null });
|
|
20
|
+
}
|
|
21
|
+
return { directory: null, entries, total_files: entries.length, total_dirs: 0, free_bytes: null };
|
|
22
|
+
}
|
|
23
|
+
// Verbose mode
|
|
24
|
+
const dirMatch = raw.match(/Directory of (.+)/);
|
|
25
|
+
if (dirMatch)
|
|
26
|
+
directory = dirMatch[1].trim();
|
|
27
|
+
// Entry: "01/15/2026 10:30 AM <DIR> Desktop"
|
|
28
|
+
// "01/15/2026 10:30 AM 1,234,567 file.txt"
|
|
29
|
+
const entryRe = /^(\d{2}\/\d{2}\/\d{4})\s+(\d{2}:\d{2} [AP]M)\s+(<DIR>|[\d,]+)\s+(.+)$/;
|
|
30
|
+
for (const line of lines) {
|
|
31
|
+
const m = line.match(entryRe);
|
|
32
|
+
if (!m)
|
|
33
|
+
continue;
|
|
34
|
+
const [, datePart, timePart, sizePart, name] = m;
|
|
35
|
+
if (name === "." || name === "..")
|
|
36
|
+
continue;
|
|
37
|
+
const isDir = sizePart === "<DIR>";
|
|
38
|
+
const sizeBytes = isDir ? null : parseInt(sizePart.replace(/,/g, ""), 10);
|
|
39
|
+
entries.push({
|
|
40
|
+
name,
|
|
41
|
+
type: isDir ? "directory" : "file",
|
|
42
|
+
size_bytes: sizeBytes,
|
|
43
|
+
modified_at: `${datePart} ${timePart}`,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
// " 2 File(s) 1,234 bytes"
|
|
47
|
+
const fileM = raw.match(/(\d[\d,]*) File\(s\)/);
|
|
48
|
+
if (fileM)
|
|
49
|
+
totalFiles = parseInt(fileM[1].replace(/,/g, ""), 10);
|
|
50
|
+
// " 3 Dir(s) 50,000,000 bytes free"
|
|
51
|
+
const dirM = raw.match(/(\d[\d,]*) Dir\(s\)\s+([\d,]+) bytes free/);
|
|
52
|
+
if (dirM) {
|
|
53
|
+
totalDirs = parseInt(dirM[1].replace(/,/g, ""), 10);
|
|
54
|
+
freeBytes = parseInt(dirM[2].replace(/,/g, ""), 10);
|
|
55
|
+
}
|
|
56
|
+
return { directory, entries, total_files: totalFiles, total_dirs: totalDirs, free_bytes: freeBytes };
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=dir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dir.js","sourceRoot":"","sources":["../../../src/parsers/windows/dir.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/parsers/windows/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAa,UAAU,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAQ,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAQ,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/parsers/windows/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAa,UAAU,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAQ,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAQ,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface IpconfigAdapter {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string | null;
|
|
4
|
+
ipv4: string | null;
|
|
5
|
+
ipv6: string | null;
|
|
6
|
+
subnet_mask: string | null;
|
|
7
|
+
gateway: string | null;
|
|
8
|
+
dns_servers: string[];
|
|
9
|
+
mac_address: string | null;
|
|
10
|
+
dhcp_enabled: boolean | null;
|
|
11
|
+
dhcp_server: string | null;
|
|
12
|
+
media_state: string | null;
|
|
13
|
+
}
|
|
14
|
+
export interface IpconfigResult {
|
|
15
|
+
hostname: string | null;
|
|
16
|
+
dns_suffix: string | null;
|
|
17
|
+
adapters: IpconfigAdapter[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Parses Windows `ipconfig` (or `ipconfig /all`) command output.
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseIpconfig(_cmd: string, _args: string[], raw: string): IpconfigResult;
|
|
23
|
+
//# sourceMappingURL=ipconfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipconfig.d.ts","sourceRoot":"","sources":["../../../src/parsers/windows/ipconfig.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAW,MAAM,CAAC;IACtB,WAAW,EAAI,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAW,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAW,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAI,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAQ,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAI,MAAM,EAAE,CAAC;IACxB,WAAW,EAAI,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAG,OAAO,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAI,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAI,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAO,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAK,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAO,eAAe,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,CAmExF"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses Windows `ipconfig` (or `ipconfig /all`) command output.
|
|
3
|
+
*/
|
|
4
|
+
export function parseIpconfig(_cmd, _args, raw) {
|
|
5
|
+
const lines = raw.split(/\r?\n/);
|
|
6
|
+
const adapters = [];
|
|
7
|
+
let hostname = null;
|
|
8
|
+
let dnsSuffix = null;
|
|
9
|
+
let current = null;
|
|
10
|
+
const val = (line) => line.split(":").slice(1).join(":").trim() || null;
|
|
11
|
+
for (const line of lines) {
|
|
12
|
+
const trimmed = line.trim();
|
|
13
|
+
// Top-level fields (before any adapter)
|
|
14
|
+
if (!current) {
|
|
15
|
+
const hostM = line.match(/Host Name[. ]+:\s*(.+)/i);
|
|
16
|
+
if (hostM) {
|
|
17
|
+
hostname = hostM[1].trim();
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const dnsM = line.match(/(?:Primary )?DNS Suffix[. ]+:\s*(.*)/i);
|
|
21
|
+
if (dnsM) {
|
|
22
|
+
dnsSuffix = dnsM[1].trim() || null;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Adapter header: "Ethernet adapter Local Area Connection:"
|
|
27
|
+
// "Wireless LAN adapter Wi-Fi:"
|
|
28
|
+
// "Tunnel adapter isatap:"
|
|
29
|
+
if (/^(?:Ethernet adapter|Wireless LAN adapter|Tunnel adapter|PPP adapter)\s+(.+):$/i.test(trimmed)) {
|
|
30
|
+
if (current)
|
|
31
|
+
adapters.push(current);
|
|
32
|
+
const nameM = trimmed.match(/^(?:Ethernet adapter|Wireless LAN adapter|Tunnel adapter|PPP adapter)\s+(.+):$/i);
|
|
33
|
+
current = {
|
|
34
|
+
name: nameM ? nameM[1] : trimmed,
|
|
35
|
+
description: null,
|
|
36
|
+
ipv4: null,
|
|
37
|
+
ipv6: null,
|
|
38
|
+
subnet_mask: null,
|
|
39
|
+
gateway: null,
|
|
40
|
+
dns_servers: [],
|
|
41
|
+
mac_address: null,
|
|
42
|
+
dhcp_enabled: null,
|
|
43
|
+
dhcp_server: null,
|
|
44
|
+
media_state: null,
|
|
45
|
+
};
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (!current)
|
|
49
|
+
continue;
|
|
50
|
+
if (/Description/.test(line)) {
|
|
51
|
+
current.description = val(line);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (/Physical Address/.test(line)) {
|
|
55
|
+
current.mac_address = val(line);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (/DHCP Enabled/.test(line)) {
|
|
59
|
+
current.dhcp_enabled = val(line)?.toLowerCase() === "yes";
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (/DHCP Server/.test(line)) {
|
|
63
|
+
current.dhcp_server = val(line);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (/Media State/.test(line)) {
|
|
67
|
+
current.media_state = val(line);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (/IPv4 Address/.test(line)) {
|
|
71
|
+
current.ipv4 = val(line)?.replace(/\(Preferred\)/, "").trim() ?? null;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (/IPv6 Address/.test(line)) {
|
|
75
|
+
current.ipv6 = val(line)?.replace(/\(Preferred\)/, "").trim() ?? null;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (/Subnet Mask/.test(line)) {
|
|
79
|
+
current.subnet_mask = val(line);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (/Default Gateway/.test(line)) {
|
|
83
|
+
current.gateway = val(line) || null;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (/DNS Servers/.test(line)) {
|
|
87
|
+
const v = val(line);
|
|
88
|
+
if (v)
|
|
89
|
+
current.dns_servers.push(v);
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
// Continuation DNS server (indented value on next line)
|
|
93
|
+
if (/^\s{20,}[\d.:a-f]+$/i.test(line) && current.dns_servers.length > 0) {
|
|
94
|
+
current.dns_servers.push(trimmed);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (current)
|
|
98
|
+
adapters.push(current);
|
|
99
|
+
return { hostname, dns_suffix: dnsSuffix, adapters };
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=ipconfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipconfig.js","sourceRoot":"","sources":["../../../src/parsers/windows/ipconfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface SysteminfoResult {
|
|
2
|
+
hostname: string | null;
|
|
3
|
+
os_name: string | null;
|
|
4
|
+
os_version: string | null;
|
|
5
|
+
os_build: string | null;
|
|
6
|
+
os_manufacturer: string | null;
|
|
7
|
+
system_type: string | null;
|
|
8
|
+
processor: string | null;
|
|
9
|
+
total_memory_mb: number | null;
|
|
10
|
+
available_memory_mb: number | null;
|
|
11
|
+
domain: string | null;
|
|
12
|
+
logon_server: string | null;
|
|
13
|
+
hotfixes: string[];
|
|
14
|
+
network_cards: string[];
|
|
15
|
+
boot_device: string | null;
|
|
16
|
+
system_locale: string | null;
|
|
17
|
+
time_zone: string | null;
|
|
18
|
+
bios_version: string | null;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parses Windows `systeminfo` command output.
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseSysteminfo(_cmd: string, _args: string[], raw: string): SysteminfoResult;
|
|
24
|
+
//# sourceMappingURL=systeminfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systeminfo.d.ts","sourceRoot":"","sources":["../../../src/parsers/windows/systeminfo.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAS,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAU,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAO,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAS,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAM,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAQ,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,EAAW,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAK,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAS,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAI,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAM,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAI,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAQ,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAK,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAuE5F"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses Windows `systeminfo` command output.
|
|
3
|
+
*/
|
|
4
|
+
export function parseSysteminfo(_cmd, _args, raw) {
|
|
5
|
+
const lines = raw.split(/\r?\n/);
|
|
6
|
+
const result = {
|
|
7
|
+
hostname: null,
|
|
8
|
+
os_name: null,
|
|
9
|
+
os_version: null,
|
|
10
|
+
os_build: null,
|
|
11
|
+
os_manufacturer: null,
|
|
12
|
+
system_type: null,
|
|
13
|
+
processor: null,
|
|
14
|
+
total_memory_mb: null,
|
|
15
|
+
available_memory_mb: null,
|
|
16
|
+
domain: null,
|
|
17
|
+
logon_server: null,
|
|
18
|
+
hotfixes: [],
|
|
19
|
+
network_cards: [],
|
|
20
|
+
boot_device: null,
|
|
21
|
+
system_locale: null,
|
|
22
|
+
time_zone: null,
|
|
23
|
+
bios_version: null,
|
|
24
|
+
};
|
|
25
|
+
let mode = null;
|
|
26
|
+
for (const line of lines) {
|
|
27
|
+
// Multi-line list items (indented with [N])
|
|
28
|
+
const listItemM = line.match(/^\s+\[(\d+)\][:\s]+(.+)/);
|
|
29
|
+
if (listItemM) {
|
|
30
|
+
if (mode === "hotfix") {
|
|
31
|
+
result.hotfixes.push(listItemM[2].trim());
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (mode === "nic") {
|
|
35
|
+
result.network_cards.push(listItemM[2].trim());
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Key: Value lines
|
|
40
|
+
const colonIdx = line.indexOf(":");
|
|
41
|
+
if (colonIdx < 0)
|
|
42
|
+
continue;
|
|
43
|
+
const key = line.slice(0, colonIdx).trim();
|
|
44
|
+
const val = line.slice(colonIdx + 1).trim() || null;
|
|
45
|
+
mode = null; // reset list mode on new key
|
|
46
|
+
switch (true) {
|
|
47
|
+
case /Host Name/i.test(key):
|
|
48
|
+
result.hostname = val;
|
|
49
|
+
break;
|
|
50
|
+
case /OS Name/i.test(key):
|
|
51
|
+
result.os_name = val;
|
|
52
|
+
break;
|
|
53
|
+
case /OS Version/i.test(key):
|
|
54
|
+
result.os_version = val;
|
|
55
|
+
break;
|
|
56
|
+
case /OS Build/i.test(key):
|
|
57
|
+
result.os_build = val;
|
|
58
|
+
break;
|
|
59
|
+
case /OS Manufacturer/i.test(key):
|
|
60
|
+
result.os_manufacturer = val;
|
|
61
|
+
break;
|
|
62
|
+
case /System Type/i.test(key):
|
|
63
|
+
result.system_type = val;
|
|
64
|
+
break;
|
|
65
|
+
case /Processor\(s\)/i.test(key):
|
|
66
|
+
result.processor = val;
|
|
67
|
+
break;
|
|
68
|
+
case /BIOS Version/i.test(key):
|
|
69
|
+
result.bios_version = val;
|
|
70
|
+
break;
|
|
71
|
+
case /Boot Device/i.test(key):
|
|
72
|
+
result.boot_device = val;
|
|
73
|
+
break;
|
|
74
|
+
case /System Locale/i.test(key):
|
|
75
|
+
result.system_locale = val;
|
|
76
|
+
break;
|
|
77
|
+
case /Time Zone/i.test(key):
|
|
78
|
+
result.time_zone = val;
|
|
79
|
+
break;
|
|
80
|
+
case /Domain/i.test(key):
|
|
81
|
+
result.domain = val;
|
|
82
|
+
break;
|
|
83
|
+
case /Logon Server/i.test(key):
|
|
84
|
+
result.logon_server = val;
|
|
85
|
+
break;
|
|
86
|
+
case /Total Physical Memory/i.test(key):
|
|
87
|
+
result.total_memory_mb = val ? parseInt(val.replace(/[^0-9]/g, ""), 10) : null;
|
|
88
|
+
break;
|
|
89
|
+
case /Available Physical Memory/i.test(key):
|
|
90
|
+
result.available_memory_mb = val ? parseInt(val.replace(/[^0-9]/g, ""), 10) : null;
|
|
91
|
+
break;
|
|
92
|
+
case /Hotfix\(s\)/i.test(key):
|
|
93
|
+
mode = "hotfix";
|
|
94
|
+
break;
|
|
95
|
+
case /Network Card\(s\)/i.test(key):
|
|
96
|
+
mode = "nic";
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=systeminfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systeminfo.js","sourceRoot":"","sources":["../../../src/parsers/windows/systeminfo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface TasklistEntry {
|
|
2
|
+
name: string;
|
|
3
|
+
pid: number;
|
|
4
|
+
session_name: string;
|
|
5
|
+
session_number: number;
|
|
6
|
+
mem_usage_kb: number;
|
|
7
|
+
}
|
|
8
|
+
export interface TasklistResult {
|
|
9
|
+
processes: TasklistEntry[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parses Windows `tasklist` command output.
|
|
13
|
+
* Supports both default (table) and CSV (/fo csv) formats.
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseTasklist(_cmd: string, _args: string[], raw: string): TasklistResult;
|
|
16
|
+
//# sourceMappingURL=tasklist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasklist.d.ts","sourceRoot":"","sources":["../../../src/parsers/windows/tasklist.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAY,MAAM,CAAC;IACvB,GAAG,EAAa,MAAM,CAAC;IACvB,YAAY,EAAI,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAI,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,CAkFxF"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses Windows `tasklist` command output.
|
|
3
|
+
* Supports both default (table) and CSV (/fo csv) formats.
|
|
4
|
+
*/
|
|
5
|
+
export function parseTasklist(_cmd, _args, raw) {
|
|
6
|
+
const lines = raw.split(/\r?\n/);
|
|
7
|
+
const processes = [];
|
|
8
|
+
// CSV format: "Image Name","PID","Session Name","Session#","Mem Usage"
|
|
9
|
+
if (lines[0]?.startsWith('"')) {
|
|
10
|
+
for (let i = 1; i < lines.length; i++) {
|
|
11
|
+
const line = lines[i].trim();
|
|
12
|
+
if (!line)
|
|
13
|
+
continue;
|
|
14
|
+
// Split CSV, removing surrounding quotes
|
|
15
|
+
const cols = line.split('","').map(c => c.replace(/^"|"$/g, ""));
|
|
16
|
+
if (cols.length < 5)
|
|
17
|
+
continue;
|
|
18
|
+
processes.push({
|
|
19
|
+
name: cols[0],
|
|
20
|
+
pid: parseInt(cols[1], 10),
|
|
21
|
+
session_name: cols[2],
|
|
22
|
+
session_number: parseInt(cols[3], 10),
|
|
23
|
+
mem_usage_kb: parseInt(cols[4].replace(/[^0-9]/g, ""), 10),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return { processes };
|
|
27
|
+
}
|
|
28
|
+
// Default table format — fixed-width columns
|
|
29
|
+
// "Image Name PID Session Name Session# Mem Usage"
|
|
30
|
+
// "========================= ======== ================ =========== ============"
|
|
31
|
+
// "System Idle Process 0 Services 0 24 K"
|
|
32
|
+
let headerParsed = false;
|
|
33
|
+
let pidStart = -1;
|
|
34
|
+
let sessionStart = -1;
|
|
35
|
+
let sessionNumStart = -1;
|
|
36
|
+
let memStart = -1;
|
|
37
|
+
for (const line of lines) {
|
|
38
|
+
if (!line.trim())
|
|
39
|
+
continue;
|
|
40
|
+
// Separator line defines column widths
|
|
41
|
+
if (line.match(/^[= ]+$/)) {
|
|
42
|
+
const segs = line.split(/ (?=[^ ])/);
|
|
43
|
+
let pos = 0;
|
|
44
|
+
const widths = [];
|
|
45
|
+
for (const seg of segs) {
|
|
46
|
+
widths.push(seg.length);
|
|
47
|
+
pos += seg.length + 1;
|
|
48
|
+
}
|
|
49
|
+
// columns: name(0), pid(1), session(2), session#(3), mem(4)
|
|
50
|
+
if (widths.length >= 5) {
|
|
51
|
+
pidStart = widths[0] + 1;
|
|
52
|
+
sessionStart = pidStart + widths[1] + 1;
|
|
53
|
+
sessionNumStart = sessionStart + widths[2] + 1;
|
|
54
|
+
memStart = sessionNumStart + widths[3] + 1;
|
|
55
|
+
headerParsed = true;
|
|
56
|
+
}
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (!headerParsed)
|
|
60
|
+
continue;
|
|
61
|
+
// Skip the header text line
|
|
62
|
+
if (line.startsWith("Image Name"))
|
|
63
|
+
continue;
|
|
64
|
+
if (pidStart < 0 || line.length < pidStart)
|
|
65
|
+
continue;
|
|
66
|
+
const name = line.slice(0, pidStart).trim();
|
|
67
|
+
const pidStr = line.slice(pidStart, sessionStart).trim();
|
|
68
|
+
const sessionName = line.slice(sessionStart, sessionNumStart).trim();
|
|
69
|
+
const sessionNumStr = line.slice(sessionNumStart, memStart).trim();
|
|
70
|
+
const memStr = line.slice(memStart).trim();
|
|
71
|
+
const pid = parseInt(pidStr, 10);
|
|
72
|
+
if (isNaN(pid))
|
|
73
|
+
continue;
|
|
74
|
+
processes.push({
|
|
75
|
+
name,
|
|
76
|
+
pid,
|
|
77
|
+
session_name: sessionName,
|
|
78
|
+
session_number: parseInt(sessionNumStr, 10) || 0,
|
|
79
|
+
mem_usage_kb: parseInt(memStr.replace(/[^0-9]/g, ""), 10) || 0,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return { processes };
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=tasklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasklist.js","sourceRoot":"","sources":["../../../src/parsers/windows/tasklist.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAe,EAAE,GAAW;IACtE,MAAM,KAAK,GAAO,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,SAAS,GAAoB,EAAE,CAAC;IAEtC,uEAAuE;IACvE,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,yCAAyC;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YACjE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAC9B,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAY,IAAI,CAAC,CAAC,CAAC;gBACvB,GAAG,EAAa,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACrC,YAAY,EAAI,IAAI,CAAC,CAAC,CAAC;gBACvB,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACrC,YAAY,EAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;aAC7D,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;IAED,6CAA6C;IAC7C,iFAAiF;IACjF,iFAAiF;IACjF,iFAAiF;IACjF,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,QAAQ,GAAO,CAAC,CAAC,CAAC;IACtB,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IACtB,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC;IACzB,IAAI,QAAQ,GAAO,CAAC,CAAC,CAAC;IAEtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAE3B,uCAAuC;QACvC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACrC,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACxB,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YACxB,CAAC;YACD,4DAA4D;YAC5D,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACvB,QAAQ,GAAU,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChC,YAAY,GAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3C,eAAe,GAAG,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC/C,QAAQ,GAAU,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClD,YAAY,GAAM,IAAI,CAAC;YACzB,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,CAAC,YAAY;YAAE,SAAS;QAE5B,4BAA4B;QAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,SAAS;QAE5C,IAAI,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ;YAAE,SAAS;QAErD,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,MAAM,MAAM,GAAU,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;QAChE,MAAM,WAAW,GAAK,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;QACvE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACnE,MAAM,MAAM,GAAU,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAElD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,GAAG,CAAC;YAAE,SAAS;QAEzB,SAAS,CAAC,IAAI,CAAC;YACb,IAAI;YACJ,GAAG;YACH,YAAY,EAAI,WAAW;YAC3B,cAAc,EAAE,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,IAAI,CAAC;YAChD,YAAY,EAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;SACjE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { PrismConfig } from "./config/loader.js";
|
|
3
|
+
/**
|
|
4
|
+
* Guard 검사 → 실행 → JSON 직렬화까지의 파이프라인.
|
|
5
|
+
* MCP 서버와 테스트 코드가 공통으로 사용한다.
|
|
6
|
+
*/
|
|
7
|
+
export declare function buildRunResult(cmd: string, args: string[], cwd: string, config: PrismConfig): Promise<string>;
|
|
8
|
+
/**
|
|
9
|
+
* MCP 서버를 생성하고 `run` 도구를 등록한다.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createServer(config: PrismConfig): McpServer;
|
|
12
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAmB,yCAAyC,CAAC;AAMjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAY,oBAAoB,CAAC;AAI5D;;;GAGG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAK,MAAM,EACd,IAAI,EAAI,MAAM,EAAE,EAChB,GAAG,EAAK,MAAM,EACd,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAwB3D"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { execute } from "./engine/executor.js";
|
|
4
|
+
import { checkGuard, GuardError } from "./engine/guard.js";
|
|
5
|
+
import { defaultRegistry } from "./parsers/index.js";
|
|
6
|
+
const PACKAGE_VERSION = "0.1.0";
|
|
7
|
+
/**
|
|
8
|
+
* Guard 검사 → 실행 → JSON 직렬화까지의 파이프라인.
|
|
9
|
+
* MCP 서버와 테스트 코드가 공통으로 사용한다.
|
|
10
|
+
*/
|
|
11
|
+
export async function buildRunResult(cmd, args, cwd, config) {
|
|
12
|
+
try {
|
|
13
|
+
checkGuard(cmd, args, cwd, config);
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
if (err instanceof GuardError) {
|
|
17
|
+
const envelope = {
|
|
18
|
+
ok: false,
|
|
19
|
+
exitCode: -1,
|
|
20
|
+
cmd,
|
|
21
|
+
args,
|
|
22
|
+
cwd,
|
|
23
|
+
duration_ms: 0,
|
|
24
|
+
stdout: { raw: "", parsed: null },
|
|
25
|
+
stderr: { raw: err.message, parsed: null },
|
|
26
|
+
diff: null,
|
|
27
|
+
guard_error: { reason: err.reason, message: err.message },
|
|
28
|
+
};
|
|
29
|
+
return JSON.stringify(envelope, null, 2);
|
|
30
|
+
}
|
|
31
|
+
throw err;
|
|
32
|
+
}
|
|
33
|
+
const envelope = await execute(cmd, args, cwd);
|
|
34
|
+
const parsed = defaultRegistry.parse(cmd, args, envelope.stdout.raw);
|
|
35
|
+
const enriched = { ...envelope, stdout: { ...envelope.stdout, parsed } };
|
|
36
|
+
return JSON.stringify(enriched, null, 2);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* MCP 서버를 생성하고 `run` 도구를 등록한다.
|
|
40
|
+
*/
|
|
41
|
+
export function createServer(config) {
|
|
42
|
+
const server = new McpServer({
|
|
43
|
+
name: "parism",
|
|
44
|
+
version: PACKAGE_VERSION,
|
|
45
|
+
});
|
|
46
|
+
server.tool("run", "Execute a shell command and receive structured JSON output. " +
|
|
47
|
+
"All commands are filtered through an execution guard (whitelist + injection prevention).", {
|
|
48
|
+
cmd: z.string().describe("Command name (e.g. 'ls', 'git')"),
|
|
49
|
+
args: z.array(z.string()).default([]).describe("Command arguments"),
|
|
50
|
+
cwd: z.string().default(process.cwd()).describe("Working directory"),
|
|
51
|
+
}, async ({ cmd, args, cwd }) => {
|
|
52
|
+
const result = await buildRunResult(cmd, args, cwd, config);
|
|
53
|
+
return {
|
|
54
|
+
content: [{ type: "text", text: result }],
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
return server;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 명령 stdout/stderr 필드. raw는 항상 보존되고, parsed는 파서 존재 시 채워진다.
|
|
3
|
+
*/
|
|
4
|
+
export interface OutputField {
|
|
5
|
+
raw: string;
|
|
6
|
+
parsed: unknown | null;
|
|
7
|
+
}
|
|
8
|
+
export type StdoutField = OutputField;
|
|
9
|
+
/**
|
|
10
|
+
* 파일시스템 변경 diff (Phase 2에서 채워짐).
|
|
11
|
+
*/
|
|
12
|
+
export interface DiffField {
|
|
13
|
+
created: string[];
|
|
14
|
+
deleted: string[];
|
|
15
|
+
modified: string[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Prism의 모든 명령 실행 결과가 따르는 응답 봉투.
|
|
19
|
+
* - ok: 실행 성공 여부 (exitCode === 0)
|
|
20
|
+
* - diff: State Tracker 미활성 시 null
|
|
21
|
+
*/
|
|
22
|
+
export interface ResponseEnvelope {
|
|
23
|
+
ok: boolean;
|
|
24
|
+
exitCode: number;
|
|
25
|
+
cmd: string;
|
|
26
|
+
args: string[];
|
|
27
|
+
cwd: string;
|
|
28
|
+
duration_ms: number;
|
|
29
|
+
stdout: OutputField;
|
|
30
|
+
stderr: OutputField;
|
|
31
|
+
diff: DiffField | null;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/types/envelope.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAK,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACxB;AAGD,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAG,MAAM,EAAE,CAAC;IACnB,OAAO,EAAG,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAW,OAAO,CAAC;IACrB,QAAQ,EAAK,MAAM,CAAC;IACpB,GAAG,EAAU,MAAM,CAAC;IACpB,IAAI,EAAS,MAAM,EAAE,CAAC;IACtB,GAAG,EAAU,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAO,WAAW,CAAC;IACzB,MAAM,EAAO,WAAW,CAAC;IACzB,IAAI,EAAS,SAAS,GAAG,IAAI,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/types/envelope.ts"],"names":[],"mappings":""}
|