port-doctor-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +266 -0
  3. package/bin/port-doctor.js +8 -0
  4. package/dist/cli/commands/free.d.ts +3 -0
  5. package/dist/cli/commands/free.d.ts.map +1 -0
  6. package/dist/cli/commands/free.js +120 -0
  7. package/dist/cli/commands/free.js.map +1 -0
  8. package/dist/cli/commands/overview.d.ts +3 -0
  9. package/dist/cli/commands/overview.d.ts.map +1 -0
  10. package/dist/cli/commands/overview.js +19 -0
  11. package/dist/cli/commands/overview.js.map +1 -0
  12. package/dist/cli/commands/run.d.ts +4 -0
  13. package/dist/cli/commands/run.d.ts.map +1 -0
  14. package/dist/cli/commands/run.js +133 -0
  15. package/dist/cli/commands/run.js.map +1 -0
  16. package/dist/cli/commands/why.d.ts +3 -0
  17. package/dist/cli/commands/why.d.ts.map +1 -0
  18. package/dist/cli/commands/why.js +24 -0
  19. package/dist/cli/commands/why.js.map +1 -0
  20. package/dist/cli/index.d.ts +3 -0
  21. package/dist/cli/index.d.ts.map +1 -0
  22. package/dist/cli/index.js +200 -0
  23. package/dist/cli/index.js.map +1 -0
  24. package/dist/cli/output/formatter.d.ts +6 -0
  25. package/dist/cli/output/formatter.d.ts.map +1 -0
  26. package/dist/cli/output/formatter.js +177 -0
  27. package/dist/cli/output/formatter.js.map +1 -0
  28. package/dist/cli/output/json.d.ts +2 -0
  29. package/dist/cli/output/json.d.ts.map +1 -0
  30. package/dist/cli/output/json.js +6 -0
  31. package/dist/cli/output/json.js.map +1 -0
  32. package/dist/cli/output/tree.d.ts +3 -0
  33. package/dist/cli/output/tree.d.ts.map +1 -0
  34. package/dist/cli/output/tree.js +19 -0
  35. package/dist/cli/output/tree.js.map +1 -0
  36. package/dist/cli/prompts/confirm.d.ts +3 -0
  37. package/dist/cli/prompts/confirm.d.ts.map +1 -0
  38. package/dist/cli/prompts/confirm.js +53 -0
  39. package/dist/cli/prompts/confirm.js.map +1 -0
  40. package/dist/core/diagnosis/index.d.ts +4 -0
  41. package/dist/core/diagnosis/index.d.ts.map +1 -0
  42. package/dist/core/diagnosis/index.js +109 -0
  43. package/dist/core/diagnosis/index.js.map +1 -0
  44. package/dist/core/framework/index.d.ts +5 -0
  45. package/dist/core/framework/index.d.ts.map +1 -0
  46. package/dist/core/framework/index.js +211 -0
  47. package/dist/core/framework/index.js.map +1 -0
  48. package/dist/core/git/index.d.ts +3 -0
  49. package/dist/core/git/index.d.ts.map +1 -0
  50. package/dist/core/git/index.js +56 -0
  51. package/dist/core/git/index.js.map +1 -0
  52. package/dist/core/lifecycle/index.d.ts +8 -0
  53. package/dist/core/lifecycle/index.d.ts.map +1 -0
  54. package/dist/core/lifecycle/index.js +175 -0
  55. package/dist/core/lifecycle/index.js.map +1 -0
  56. package/dist/core/process/index.d.ts +9 -0
  57. package/dist/core/process/index.d.ts.map +1 -0
  58. package/dist/core/process/index.js +94 -0
  59. package/dist/core/process/index.js.map +1 -0
  60. package/dist/core/project/index.d.ts +3 -0
  61. package/dist/core/project/index.d.ts.map +1 -0
  62. package/dist/core/project/index.js +84 -0
  63. package/dist/core/project/index.js.map +1 -0
  64. package/dist/core/scanner/index.d.ts +5 -0
  65. package/dist/core/scanner/index.d.ts.map +1 -0
  66. package/dist/core/scanner/index.js +71 -0
  67. package/dist/core/scanner/index.js.map +1 -0
  68. package/dist/index.d.ts +11 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +11 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/platform/darwin.d.ts +27 -0
  73. package/dist/platform/darwin.d.ts.map +1 -0
  74. package/dist/platform/darwin.js +268 -0
  75. package/dist/platform/darwin.js.map +1 -0
  76. package/dist/platform/index.d.ts +4 -0
  77. package/dist/platform/index.d.ts.map +1 -0
  78. package/dist/platform/index.js +26 -0
  79. package/dist/platform/index.js.map +1 -0
  80. package/dist/platform/linux.d.ts +22 -0
  81. package/dist/platform/linux.d.ts.map +1 -0
  82. package/dist/platform/linux.js +217 -0
  83. package/dist/platform/linux.js.map +1 -0
  84. package/dist/platform/types.d.ts +40 -0
  85. package/dist/platform/types.d.ts.map +1 -0
  86. package/dist/platform/types.js +2 -0
  87. package/dist/platform/types.js.map +1 -0
  88. package/dist/platform/windows.d.ts +17 -0
  89. package/dist/platform/windows.d.ts.map +1 -0
  90. package/dist/platform/windows.js +138 -0
  91. package/dist/platform/windows.js.map +1 -0
  92. package/dist/types/index.d.ts +101 -0
  93. package/dist/types/index.d.ts.map +1 -0
  94. package/dist/types/index.js +2 -0
  95. package/dist/types/index.js.map +1 -0
  96. package/dist/utils/exec.d.ts +16 -0
  97. package/dist/utils/exec.d.ts.map +1 -0
  98. package/dist/utils/exec.js +51 -0
  99. package/dist/utils/exec.js.map +1 -0
  100. package/dist/utils/formatting.d.ts +10 -0
  101. package/dist/utils/formatting.d.ts.map +1 -0
  102. package/dist/utils/formatting.js +60 -0
  103. package/dist/utils/formatting.js.map +1 -0
  104. package/dist/utils/redaction.d.ts +5 -0
  105. package/dist/utils/redaction.d.ts.map +1 -0
  106. package/dist/utils/redaction.js +31 -0
  107. package/dist/utils/redaction.js.map +1 -0
  108. package/package.json +56 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAO7C,wBAAgB,kBAAkB,IAAI,eAAe,CAqBpD;AAED,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { DarwinPlatformAdapter } from './darwin.js';
2
+ import { LinuxPlatformAdapter } from './linux.js';
3
+ import { WindowsPlatformAdapter } from './windows.js';
4
+ let cachedAdapter = null;
5
+ export function getPlatformAdapter() {
6
+ if (cachedAdapter)
7
+ return cachedAdapter;
8
+ const currentPlatform = process.platform;
9
+ switch (currentPlatform) {
10
+ case 'darwin':
11
+ cachedAdapter = new DarwinPlatformAdapter();
12
+ break;
13
+ case 'linux':
14
+ cachedAdapter = new LinuxPlatformAdapter();
15
+ break;
16
+ case 'win32':
17
+ cachedAdapter = new WindowsPlatformAdapter();
18
+ break;
19
+ default:
20
+ // Fallback to Linux adapter (POSIX-compatible)
21
+ cachedAdapter = new LinuxPlatformAdapter();
22
+ break;
23
+ }
24
+ return cachedAdapter;
25
+ }
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,IAAI,aAAa,GAA2B,IAAI,CAAC;AAEjD,MAAM,UAAU,kBAAkB;IAChC,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IACzC,QAAQ,eAAe,EAAE,CAAC;QACxB,KAAK,QAAQ;YACX,aAAa,GAAG,IAAI,qBAAqB,EAAE,CAAC;YAC5C,MAAM;QACR,KAAK,OAAO;YACV,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;YAC3C,MAAM;QACR,KAAK,OAAO;YACV,aAAa,GAAG,IAAI,sBAAsB,EAAE,CAAC;YAC7C,MAAM;QACR;YACE,+CAA+C;YAC/C,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;YAC3C,MAAM;IACV,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { PlatformAdapter, RawPortMatch } from './types.js';
2
+ import { ProcessInfo } from '../types/index.js';
3
+ export declare function parseLinuxStat(rawStat: string): {
4
+ pid?: number;
5
+ name?: string;
6
+ ppid?: number;
7
+ state?: string;
8
+ };
9
+ export declare class LinuxPlatformAdapter implements PlatformAdapter {
10
+ readonly platformName = "linux";
11
+ findListeningPorts(ports?: number[]): Promise<RawPortMatch[]>;
12
+ getProcessInfo(pid: number): Promise<Partial<ProcessInfo>>;
13
+ getProcessTree(pid: number): Promise<Array<{
14
+ pid: number;
15
+ ppid: number;
16
+ name: string;
17
+ command?: string;
18
+ }>>;
19
+ isPortListening(port: number): Promise<boolean>;
20
+ kill(pid: number, signal: 'SIGINT' | 'SIGTERM' | 'SIGKILL'): Promise<boolean>;
21
+ }
22
+ //# sourceMappingURL=linux.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linux.d.ts","sourceRoot":"","sources":["../../src/platform/linux.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAsB9G;AAED,qBAAa,oBAAqB,YAAW,eAAe;IAC1D,QAAQ,CAAC,YAAY,WAAW;IAE1B,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoF7D,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAwD1D,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAyC1G,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;CASpF"}
@@ -0,0 +1,217 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import { safeExec, safeExecFile } from '../utils/exec.js';
3
+ import { redactSensitiveData } from '../utils/redaction.js';
4
+ export function parseLinuxStat(rawStat) {
5
+ const firstOpen = rawStat.indexOf('(');
6
+ const lastClose = rawStat.lastIndexOf(')');
7
+ if (firstOpen === -1 || lastClose === -1 || lastClose < firstOpen) {
8
+ return {};
9
+ }
10
+ const pidStr = rawStat.substring(0, firstOpen).trim();
11
+ const pid = parseInt(pidStr, 10);
12
+ const name = rawStat.substring(firstOpen + 1, lastClose);
13
+ const afterClose = rawStat.substring(lastClose + 1).trim();
14
+ const fields = afterClose.split(/\s+/);
15
+ const state = fields[0];
16
+ const ppid = parseInt(fields[1], 10);
17
+ return {
18
+ pid: isNaN(pid) ? undefined : pid,
19
+ name,
20
+ state,
21
+ ppid: isNaN(ppid) ? undefined : ppid,
22
+ };
23
+ }
24
+ export class LinuxPlatformAdapter {
25
+ platformName = 'linux';
26
+ async findListeningPorts(ports) {
27
+ const matches = [];
28
+ // 1. Try ss -tulpn (fastest & standard on modern Linux)
29
+ const ssRes = await safeExec('ss -tulpn -H');
30
+ if (ssRes.exitCode === 0 && ssRes.stdout) {
31
+ const lines = ssRes.stdout.split('\n');
32
+ for (const line of lines) {
33
+ if (!line.trim())
34
+ continue;
35
+ // Example format: tcp LISTEN 0 511 0.0.0.0:3000 0.0.0.0:* users:(("node",pid=8212,fd=23))
36
+ const cols = line.trim().split(/\s+/);
37
+ if (cols.length < 5)
38
+ continue;
39
+ const protocol = cols[0].toLowerCase().includes('udp') ? 'udp' : 'tcp';
40
+ const localAddr = cols[3] || cols[4];
41
+ const portMatch = localAddr.match(/:(\d+)$/);
42
+ if (!portMatch)
43
+ continue;
44
+ const port = parseInt(portMatch[1], 10);
45
+ if (ports && ports.length > 0 && !ports.includes(port))
46
+ continue;
47
+ // Parse PID and process name from users:(("node",pid=8212,fd=23))
48
+ const usersCol = line.match(/users:\(\((.*?)\)\)/);
49
+ let pid = 0;
50
+ let processName = '';
51
+ if (usersCol) {
52
+ const pidMatch = usersCol[1].match(/pid=(\d+)/);
53
+ if (pidMatch)
54
+ pid = parseInt(pidMatch[1], 10);
55
+ const nameMatch = usersCol[1].match(/"([^"]+)"/);
56
+ if (nameMatch)
57
+ processName = nameMatch[1];
58
+ }
59
+ const address = localAddr.substring(0, localAddr.lastIndexOf(':')).replace(/^\[|\]$/g, '') || '0.0.0.0';
60
+ if (port && !matches.some((m) => m.port === port && m.pid === pid && m.address === address)) {
61
+ matches.push({
62
+ port,
63
+ pid,
64
+ protocol,
65
+ address,
66
+ processName,
67
+ });
68
+ }
69
+ }
70
+ if (matches.length > 0)
71
+ return matches;
72
+ }
73
+ // 2. Fallback to lsof if ss didn't return or lacked permissions
74
+ const lsofRes = await safeExec('lsof -nP -iTCP -sTCP:LISTEN');
75
+ if (lsofRes.exitCode === 0 && lsofRes.stdout) {
76
+ const lines = lsofRes.stdout.split('\n');
77
+ for (let i = 1; i < lines.length; i++) {
78
+ const line = lines[i].trim();
79
+ if (!line)
80
+ continue;
81
+ const parts = line.split(/\s+/);
82
+ if (parts.length < 9)
83
+ continue;
84
+ const processName = parts[0];
85
+ const pid = parseInt(parts[1], 10);
86
+ const nameCol = parts[8] || '';
87
+ const portMatch = nameCol.match(/:(\d+)$/);
88
+ if (!portMatch)
89
+ continue;
90
+ const port = parseInt(portMatch[1], 10);
91
+ if (ports && ports.length > 0 && !ports.includes(port))
92
+ continue;
93
+ const address = nameCol.substring(0, nameCol.lastIndexOf(':')).replace(/^\[|\]$/g, '') || '0.0.0.0';
94
+ if (!matches.some((m) => m.port === port && m.pid === pid && m.address === address)) {
95
+ matches.push({
96
+ port,
97
+ pid,
98
+ protocol: 'tcp',
99
+ address,
100
+ processName,
101
+ });
102
+ }
103
+ }
104
+ }
105
+ return matches;
106
+ }
107
+ async getProcessInfo(pid) {
108
+ if (!Number.isInteger(pid) || pid <= 0)
109
+ return {};
110
+ const info = { pid };
111
+ // 1. Read /proc/<pid>/cwd
112
+ try {
113
+ info.cwd = await fs.readlink(`/proc/${pid}/cwd`);
114
+ }
115
+ catch {
116
+ // Permission denied or process exited
117
+ }
118
+ // 2. Read /proc/<pid>/cmdline
119
+ try {
120
+ const rawCmd = await fs.readFile(`/proc/${pid}/cmdline`, 'utf8');
121
+ const cmdArgs = rawCmd.split('\0').filter(Boolean).join(' ');
122
+ if (cmdArgs) {
123
+ info.fullCommand = redactSensitiveData(cmdArgs);
124
+ info.command = info.fullCommand.length > 120 ? `${info.fullCommand.slice(0, 117)}...` : info.fullCommand;
125
+ }
126
+ }
127
+ catch {
128
+ // ignore
129
+ }
130
+ // 3. Read /proc/<pid>/stat with robust parser
131
+ try {
132
+ const stat = await fs.readFile(`/proc/${pid}/stat`, 'utf8');
133
+ const parsedStat = parseLinuxStat(stat);
134
+ if (parsedStat.name) {
135
+ info.name = parsedStat.name;
136
+ }
137
+ if (parsedStat.ppid !== undefined) {
138
+ info.ppid = parsedStat.ppid;
139
+ }
140
+ }
141
+ catch {
142
+ // Fallback via ps
143
+ const psRes = await safeExecFile('ps', ['-p', String(pid), '-o', 'comm=,ppid=,etime=,user=,rss=,%cpu=,args=']);
144
+ if (psRes.exitCode === 0 && psRes.stdout) {
145
+ const match = psRes.stdout.trim().match(/^(\S+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\d+)\s+([\d.]+)\s+(.*)$/s);
146
+ if (match) {
147
+ const [, comm, ppidStr, etimeStr, user, rssStr, cpuStr, fullArgs] = match;
148
+ info.name = comm.split('/').pop() || comm;
149
+ info.ppid = parseInt(ppidStr, 10);
150
+ info.user = user;
151
+ info.memoryBytes = parseInt(rssStr, 10) * 1024;
152
+ info.cpuPercent = parseFloat(cpuStr);
153
+ if (!info.fullCommand) {
154
+ info.fullCommand = redactSensitiveData(fullArgs.trim());
155
+ info.command = info.fullCommand.length > 120 ? `${info.fullCommand.slice(0, 117)}...` : info.fullCommand;
156
+ }
157
+ }
158
+ }
159
+ }
160
+ return info;
161
+ }
162
+ async getProcessTree(pid) {
163
+ if (!Number.isInteger(pid) || pid <= 0)
164
+ return [];
165
+ const chain = [];
166
+ let currentPid = pid;
167
+ const visited = new Set();
168
+ while (currentPid > 1 && !visited.has(currentPid) && chain.length < 10) {
169
+ visited.add(currentPid);
170
+ try {
171
+ const stat = await fs.readFile(`/proc/${currentPid}/stat`, 'utf8');
172
+ const parsedStat = parseLinuxStat(stat);
173
+ if (!parsedStat.name || parsedStat.ppid === undefined)
174
+ break;
175
+ const name = parsedStat.name;
176
+ const ppid = parsedStat.ppid;
177
+ let command = '';
178
+ try {
179
+ const rawCmd = await fs.readFile(`/proc/${currentPid}/cmdline`, 'utf8');
180
+ command = redactSensitiveData(rawCmd.split('\0').filter(Boolean).join(' '));
181
+ }
182
+ catch {
183
+ // ignore
184
+ }
185
+ chain.unshift({
186
+ pid: currentPid,
187
+ ppid,
188
+ name,
189
+ command,
190
+ });
191
+ if (ppid <= 1 || isNaN(ppid))
192
+ break;
193
+ currentPid = ppid;
194
+ }
195
+ catch {
196
+ break;
197
+ }
198
+ }
199
+ return chain;
200
+ }
201
+ async isPortListening(port) {
202
+ const matches = await this.findListeningPorts([port]);
203
+ return matches.some((m) => m.port === port);
204
+ }
205
+ async kill(pid, signal) {
206
+ try {
207
+ process.kill(pid, signal);
208
+ return true;
209
+ }
210
+ catch (err) {
211
+ if (err.code === 'ESRCH')
212
+ return true;
213
+ return false;
214
+ }
215
+ }
216
+ }
217
+ //# sourceMappingURL=linux.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linux.js","sourceRoot":"","sources":["../../src/platform/linux.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGvC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;QAClE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;IAEzD,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAErC,OAAO;QACL,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;QACjC,IAAI;QACJ,KAAK;QACL,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;KACrC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,oBAAoB;IACtB,YAAY,GAAG,OAAO,CAAC;IAEhC,KAAK,CAAC,kBAAkB,CAAC,KAAgB;QACvC,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,wDAAwD;QACxD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,SAAS;gBAC3B,0FAA0F;gBAC1F,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACtC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;oBAAE,SAAS;gBAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;gBACvE,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAI,CAAC,SAAS;oBAAE,SAAS;gBAEzB,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAEjE,kEAAkE;gBAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACnD,IAAI,GAAG,GAAG,CAAC,CAAC;gBACZ,IAAI,WAAW,GAAG,EAAE,CAAC;gBACrB,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAChD,IAAI,QAAQ;wBAAE,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAE9C,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBACjD,IAAI,SAAS;wBAAE,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC5C,CAAC;gBAED,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;gBAExG,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,CAAC;oBAC5F,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI;wBACJ,GAAG;wBACH,QAAQ;wBACR,OAAO;wBACP,WAAW;qBACZ,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,OAAO,CAAC;QACzC,CAAC;QAED,gEAAgE;QAChE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,6BAA6B,CAAC,CAAC;QAC9D,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,SAAS;gBAE/B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC3C,IAAI,CAAC,SAAS;oBAAE,SAAS;gBAEzB,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAEjE,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;gBAEpG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,CAAC;oBACpF,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI;wBACJ,GAAG;wBACH,QAAQ,EAAE,KAAK;wBACf,OAAO;wBACP,WAAW;qBACZ,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAW;QAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAClD,MAAM,IAAI,GAAyB,EAAE,GAAG,EAAE,CAAC;QAE3C,0BAA0B;QAC1B,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;QAED,8BAA8B;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;gBAChD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;YAC3G,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;YAC9B,CAAC;YACD,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;YAC9B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kBAAkB;YAClB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,2CAA2C,CAAC,CAAC,CAAC;YAC/G,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;gBACtG,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;oBAC1E,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;oBAC1C,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;oBACjB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;oBAC/C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;oBACrC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;wBACtB,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;wBACxD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;oBAC3G,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAW;QAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAClD,MAAM,KAAK,GAAyE,EAAE,CAAC;QACvF,IAAI,UAAU,GAAG,GAAG,CAAC;QACrB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAElC,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,UAAU,OAAO,EAAE,MAAM,CAAC,CAAC;gBACnE,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS;oBAAE,MAAM;gBAE7D,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;gBAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;gBAE7B,IAAI,OAAO,GAAG,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,UAAU,UAAU,EAAE,MAAM,CAAC,CAAC;oBACxE,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9E,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;gBAED,KAAK,CAAC,OAAO,CAAC;oBACZ,GAAG,EAAE,UAAU;oBACf,IAAI;oBACJ,IAAI;oBACJ,OAAO;iBACR,CAAC,CAAC;gBAEH,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;oBAAE,MAAM;gBACpC,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAY;QAChC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,MAAwC;QAC9D,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,40 @@
1
+ import { ProcessInfo } from '../types/index.js';
2
+ export interface RawPortMatch {
3
+ port: number;
4
+ pid: number;
5
+ protocol: 'tcp' | 'udp';
6
+ address: string;
7
+ processName?: string;
8
+ command?: string;
9
+ user?: string;
10
+ }
11
+ export interface PlatformAdapter {
12
+ readonly platformName: string;
13
+ /**
14
+ * Find listening ports. If ports array is provided, filter for those ports.
15
+ * If empty or undefined, scan all listening ports.
16
+ */
17
+ findListeningPorts(ports?: number[]): Promise<RawPortMatch[]>;
18
+ /**
19
+ * Get detailed process information for a specific PID.
20
+ */
21
+ getProcessInfo(pid: number): Promise<Partial<ProcessInfo>>;
22
+ /**
23
+ * Get process tree ancestry (PPID chain).
24
+ */
25
+ getProcessTree(pid: number): Promise<Array<{
26
+ pid: number;
27
+ ppid: number;
28
+ name: string;
29
+ command?: string;
30
+ }>>;
31
+ /**
32
+ * Check if a specific port is currently open/listening.
33
+ */
34
+ isPortListening(port: number): Promise<boolean>;
35
+ /**
36
+ * Send signal to a PID.
37
+ */
38
+ kill(pid: number, signal: 'SIGINT' | 'SIGTERM' | 'SIGKILL'): Promise<boolean>;
39
+ }
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/platform/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B;;;OAGG;IACH,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAE9D;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAE3D;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAE3G;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhD;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/E"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/platform/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { PlatformAdapter, RawPortMatch } from './types.js';
2
+ import { ProcessInfo } from '../types/index.js';
3
+ export declare function parseWindowsProcessData(rawJson: string): Partial<ProcessInfo>;
4
+ export declare class WindowsPlatformAdapter implements PlatformAdapter {
5
+ readonly platformName = "win32";
6
+ findListeningPorts(ports?: number[]): Promise<RawPortMatch[]>;
7
+ getProcessInfo(pid: number): Promise<Partial<ProcessInfo>>;
8
+ getProcessTree(pid: number): Promise<Array<{
9
+ pid: number;
10
+ ppid: number;
11
+ name: string;
12
+ command?: string;
13
+ }>>;
14
+ isPortListening(port: number): Promise<boolean>;
15
+ kill(pid: number, signal: 'SIGINT' | 'SIGTERM' | 'SIGKILL'): Promise<boolean>;
16
+ }
17
+ //# sourceMappingURL=windows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../../src/platform/windows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA0B7E;AAED,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,QAAQ,CAAC,YAAY,WAAW;IAE1B,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA0C7D,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAiB1D,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAgC1G,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM/C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;CAWpF"}
@@ -0,0 +1,138 @@
1
+ import { safeExecFile } from '../utils/exec.js';
2
+ import { redactSensitiveData } from '../utils/redaction.js';
3
+ export function parseWindowsProcessData(rawJson) {
4
+ const info = {};
5
+ try {
6
+ const data = JSON.parse(rawJson);
7
+ info.name = data.Name || '';
8
+ info.ppid = data.ParentProcessId ? parseInt(data.ParentProcessId, 10) : undefined;
9
+ if (data.CommandLine) {
10
+ info.fullCommand = redactSensitiveData(data.CommandLine);
11
+ info.command = info.fullCommand.length > 120 ? `${info.fullCommand.slice(0, 117)}...` : info.fullCommand;
12
+ }
13
+ if (data.ExecutablePath) {
14
+ info.executablePath = data.ExecutablePath;
15
+ // IMPORTANT: ExecutablePath is kept separate from cwd.
16
+ }
17
+ if (data.WorkingDirectory && typeof data.WorkingDirectory === 'string' && data.WorkingDirectory.trim()) {
18
+ info.cwd = data.WorkingDirectory.trim();
19
+ }
20
+ else if (data.CurrentWorkingDirectory && typeof data.CurrentWorkingDirectory === 'string' && data.CurrentWorkingDirectory.trim()) {
21
+ info.cwd = data.CurrentWorkingDirectory.trim();
22
+ }
23
+ if (data.WorkingSetSize) {
24
+ info.memoryBytes = parseInt(data.WorkingSetSize, 10);
25
+ }
26
+ }
27
+ catch {
28
+ // ignore parse error
29
+ }
30
+ return info;
31
+ }
32
+ export class WindowsPlatformAdapter {
33
+ platformName = 'win32';
34
+ async findListeningPorts(ports) {
35
+ const matches = [];
36
+ // 1. Try netstat -ano -p tcp (fast, standard on all Windows versions)
37
+ const netstatRes = await safeExecFile('netstat', ['-ano', '-p', 'tcp']);
38
+ if (netstatRes.exitCode === 0 && netstatRes.stdout) {
39
+ const lines = netstatRes.stdout.split('\n');
40
+ for (const line of lines) {
41
+ const trimmed = line.trim();
42
+ if (!trimmed.toUpperCase().includes('LISTENING'))
43
+ continue;
44
+ // Example: TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 8212
45
+ // Example: TCP [::]:5173 [::]:0 LISTENING 1234
46
+ const parts = trimmed.split(/\s+/);
47
+ if (parts.length < 5)
48
+ continue;
49
+ const localAddr = parts[1];
50
+ const pid = parseInt(parts[parts.length - 1], 10);
51
+ if (isNaN(pid) || pid <= 0)
52
+ continue;
53
+ const portMatch = localAddr.match(/:(\d+)$/);
54
+ if (!portMatch)
55
+ continue;
56
+ const port = parseInt(portMatch[1], 10);
57
+ if (ports && ports.length > 0 && !ports.includes(port))
58
+ continue;
59
+ const address = localAddr.substring(0, localAddr.lastIndexOf(':')).replace(/^\[|\]$/g, '') || '0.0.0.0';
60
+ if (!matches.some((m) => m.port === port && m.pid === pid && m.address === address)) {
61
+ matches.push({
62
+ port,
63
+ pid,
64
+ protocol: 'tcp',
65
+ address,
66
+ });
67
+ }
68
+ }
69
+ }
70
+ return matches;
71
+ }
72
+ async getProcessInfo(pid) {
73
+ if (!Number.isInteger(pid) || pid <= 0)
74
+ return {};
75
+ const info = { pid };
76
+ // Use PowerShell to get process metadata and working directory safely
77
+ const psFilter = `ProcessId = ${pid}`;
78
+ const psScript = `$proc = Get-CimInstance Win32_Process -Filter "${psFilter}"; if ($proc) { $cwd = $null; try { $p = Get-Process -Id ${pid} -ErrorAction SilentlyContinue; if ($p -and $p.StartInfo -and $p.StartInfo.WorkingDirectory) { $cwd = $p.StartInfo.WorkingDirectory } } catch {}; [PSCustomObject]@{ Name = $proc.Name; ProcessId = $proc.ProcessId; ParentProcessId = $proc.ParentProcessId; CommandLine = $proc.CommandLine; ExecutablePath = $proc.ExecutablePath; WorkingDirectory = $cwd; WorkingSetSize = $proc.WorkingSetSize } | ConvertTo-Json }`;
79
+ const res = await safeExecFile('powershell', ['-NoProfile', '-NonInteractive', '-Command', psScript], { timeout: 4000 });
80
+ if (res.exitCode === 0 && res.stdout) {
81
+ const parsed = parseWindowsProcessData(res.stdout);
82
+ Object.assign(info, parsed);
83
+ }
84
+ return info;
85
+ }
86
+ async getProcessTree(pid) {
87
+ if (!Number.isInteger(pid) || pid <= 0)
88
+ return [];
89
+ const chain = [];
90
+ let currentPid = pid;
91
+ const visited = new Set();
92
+ while (currentPid > 0 && !visited.has(currentPid) && chain.length < 8) {
93
+ visited.add(currentPid);
94
+ const psFilter = `ProcessId = ${currentPid}`;
95
+ const psScript = `Get-CimInstance Win32_Process -Filter "${psFilter}" | Select-Object Name, ProcessId, ParentProcessId, CommandLine | ConvertTo-Json`;
96
+ const res = await safeExecFile('powershell', ['-NoProfile', '-NonInteractive', '-Command', psScript], { timeout: 3000 });
97
+ if (res.exitCode !== 0 || !res.stdout)
98
+ break;
99
+ try {
100
+ const data = JSON.parse(res.stdout);
101
+ const ppid = data.ParentProcessId ? parseInt(data.ParentProcessId, 10) : 0;
102
+ chain.unshift({
103
+ pid: currentPid,
104
+ ppid,
105
+ name: data.Name || 'unknown',
106
+ command: data.CommandLine ? redactSensitiveData(data.CommandLine) : undefined,
107
+ });
108
+ if (ppid <= 0)
109
+ break;
110
+ currentPid = ppid;
111
+ }
112
+ catch {
113
+ break;
114
+ }
115
+ }
116
+ return chain;
117
+ }
118
+ async isPortListening(port) {
119
+ if (!Number.isInteger(port) || port <= 0 || port > 65535)
120
+ return false;
121
+ const matches = await this.findListeningPorts([port]);
122
+ return matches.some((m) => m.port === port);
123
+ }
124
+ async kill(pid, signal) {
125
+ if (!Number.isInteger(pid) || pid <= 0)
126
+ return false;
127
+ if (signal === 'SIGKILL') {
128
+ const res = await safeExecFile('taskkill', ['/F', '/PID', String(pid)]);
129
+ return res.exitCode === 0;
130
+ }
131
+ else {
132
+ // Graceful kill attempt
133
+ const res = await safeExecFile('taskkill', ['/PID', String(pid)]);
134
+ return res.exitCode === 0;
135
+ }
136
+ }
137
+ }
138
+ //# sourceMappingURL=windows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows.js","sourceRoot":"","sources":["../../src/platform/windows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ export interface PortInfo {
2
+ port: number;
3
+ status: 'free' | 'busy' | 'restricted';
4
+ protocol: 'tcp' | 'udp';
5
+ address: string;
6
+ allAddresses?: string[];
7
+ pid?: number;
8
+ allPids?: number[];
9
+ process?: ProcessInfo;
10
+ project?: ProjectContext;
11
+ git?: GitContext;
12
+ framework?: FrameworkInfo;
13
+ processTree?: ProcessTreeNode[];
14
+ diagnosis?: PortDiagnosis;
15
+ }
16
+ export interface ProcessInfo {
17
+ pid: number;
18
+ ppid?: number;
19
+ name: string;
20
+ command: string;
21
+ fullCommand?: string;
22
+ executablePath?: string;
23
+ cwd?: string;
24
+ user?: string;
25
+ uptimeSeconds?: number;
26
+ uptimeFormatted?: string;
27
+ memoryBytes?: number;
28
+ cpuPercent?: number;
29
+ isOrphan?: boolean;
30
+ }
31
+ export interface ProjectContext {
32
+ name: string;
33
+ rootDirectory: string;
34
+ packageJsonPath?: string;
35
+ version?: string;
36
+ isMonorepo?: boolean;
37
+ scripts?: Record<string, string>;
38
+ }
39
+ export interface GitContext {
40
+ isGitRepo: boolean;
41
+ repoName?: string;
42
+ branch?: string;
43
+ commitHash?: string;
44
+ isDirty?: boolean;
45
+ uncommittedFilesCount?: number;
46
+ }
47
+ export interface FrameworkInfo {
48
+ name: string;
49
+ category: 'web-framework' | 'api-server' | 'database' | 'tool' | 'runtime' | 'system';
50
+ confidence: 'high' | 'medium' | 'low';
51
+ details?: string;
52
+ defaultPort?: number;
53
+ }
54
+ export interface ProcessTreeNode {
55
+ pid: number;
56
+ name: string;
57
+ command?: string;
58
+ children?: ProcessTreeNode[];
59
+ }
60
+ export interface PortDiagnosis {
61
+ type: 'dev_server' | 'database' | 'system_service' | 'orphan_process' | 'port_conflict' | 'free';
62
+ severity: 'info' | 'warning' | 'error';
63
+ summary: string;
64
+ details?: string[];
65
+ suggestedAction?: string;
66
+ safeToFree?: boolean;
67
+ }
68
+ export interface ScanOptions {
69
+ ports?: number[];
70
+ deep?: boolean;
71
+ timeoutMs?: number;
72
+ }
73
+ export interface FreeResult {
74
+ port: number;
75
+ pid: number;
76
+ processName: string;
77
+ projectName?: string;
78
+ success: boolean;
79
+ method: 'SIGINT' | 'SIGTERM' | 'SIGKILL' | 'none';
80
+ timeTakenMs: number;
81
+ error?: string;
82
+ }
83
+ export interface RunOptions {
84
+ command: string;
85
+ cwd?: string;
86
+ env?: Record<string, string>;
87
+ interactive?: boolean;
88
+ }
89
+ export interface CLIArgs {
90
+ command?: 'overview' | 'why' | 'free' | 'run' | 'help' | 'version';
91
+ port?: number;
92
+ ports?: number[];
93
+ rawCommand?: string;
94
+ json?: boolean;
95
+ force?: boolean;
96
+ dryRun?: boolean;
97
+ help?: boolean;
98
+ version?: boolean;
99
+ timeout?: number;
100
+ }
101
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}