zammy 1.2.1 → 1.3.2

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 (36) hide show
  1. package/README.md +322 -239
  2. package/assets/zammy.gif +0 -0
  3. package/dist/chunk-LLLEINP6.js +1229 -0
  4. package/dist/index.js +1886 -489
  5. package/dist/plugins.d.ts +168 -0
  6. package/dist/plugins.js +47 -0
  7. package/package.json +20 -2
  8. package/packages/plugins/docker/README.md +141 -0
  9. package/packages/plugins/docker/dist/index.d.ts +4 -0
  10. package/packages/plugins/docker/dist/index.d.ts.map +1 -0
  11. package/packages/plugins/docker/dist/index.js +402 -0
  12. package/packages/plugins/docker/dist/index.js.map +1 -0
  13. package/packages/plugins/docker/package.json +32 -0
  14. package/packages/plugins/docker/zammy-plugin.json +16 -0
  15. package/packages/plugins/faker/README.md +65 -0
  16. package/packages/plugins/faker/dist/index.d.ts +4 -0
  17. package/packages/plugins/faker/dist/index.d.ts.map +1 -0
  18. package/packages/plugins/faker/dist/index.js +349 -0
  19. package/packages/plugins/faker/dist/index.js.map +1 -0
  20. package/packages/plugins/faker/package.json +32 -0
  21. package/packages/plugins/faker/zammy-plugin.json +14 -0
  22. package/packages/plugins/network/README.md +126 -0
  23. package/packages/plugins/network/dist/index.d.ts +4 -0
  24. package/packages/plugins/network/dist/index.d.ts.map +1 -0
  25. package/packages/plugins/network/dist/index.js +405 -0
  26. package/packages/plugins/network/dist/index.js.map +1 -0
  27. package/packages/plugins/network/package.json +32 -0
  28. package/packages/plugins/network/zammy-plugin.json +17 -0
  29. package/packages/plugins/port/README.md +74 -0
  30. package/packages/plugins/port/dist/index.d.ts +4 -0
  31. package/packages/plugins/port/dist/index.d.ts.map +1 -0
  32. package/packages/plugins/port/dist/index.js +331 -0
  33. package/packages/plugins/port/dist/index.js.map +1 -0
  34. package/packages/plugins/port/package.json +32 -0
  35. package/packages/plugins/port/zammy-plugin.json +16 -0
  36. package/packages/plugins/tsconfig.base.json +17 -0
@@ -0,0 +1,405 @@
1
+ // Zammy Plugin: Network Tools
2
+ // Network utilities and diagnostics
3
+ import { platform, networkInterfaces } from 'os';
4
+ import { promises as dns } from 'dns';
5
+ import https from 'https';
6
+ import http from 'http';
7
+ const isWindows = platform() === 'win32';
8
+ // ============ COMMON PORTS ============
9
+ const COMMON_PORTS = [
10
+ { port: 20, service: 'FTP Data', protocol: 'TCP' },
11
+ { port: 21, service: 'FTP Control', protocol: 'TCP' },
12
+ { port: 22, service: 'SSH', protocol: 'TCP' },
13
+ { port: 23, service: 'Telnet', protocol: 'TCP' },
14
+ { port: 25, service: 'SMTP', protocol: 'TCP' },
15
+ { port: 53, service: 'DNS', protocol: 'TCP/UDP' },
16
+ { port: 67, service: 'DHCP Server', protocol: 'UDP' },
17
+ { port: 68, service: 'DHCP Client', protocol: 'UDP' },
18
+ { port: 80, service: 'HTTP', protocol: 'TCP' },
19
+ { port: 110, service: 'POP3', protocol: 'TCP' },
20
+ { port: 143, service: 'IMAP', protocol: 'TCP' },
21
+ { port: 443, service: 'HTTPS', protocol: 'TCP' },
22
+ { port: 465, service: 'SMTPS', protocol: 'TCP' },
23
+ { port: 587, service: 'SMTP Submission', protocol: 'TCP' },
24
+ { port: 993, service: 'IMAPS', protocol: 'TCP' },
25
+ { port: 995, service: 'POP3S', protocol: 'TCP' },
26
+ { port: 3000, service: 'Dev Server', protocol: 'TCP' },
27
+ { port: 3306, service: 'MySQL', protocol: 'TCP' },
28
+ { port: 3389, service: 'RDP', protocol: 'TCP' },
29
+ { port: 5432, service: 'PostgreSQL', protocol: 'TCP' },
30
+ { port: 5672, service: 'RabbitMQ', protocol: 'TCP' },
31
+ { port: 6379, service: 'Redis', protocol: 'TCP' },
32
+ { port: 8080, service: 'HTTP Alt', protocol: 'TCP' },
33
+ { port: 8443, service: 'HTTPS Alt', protocol: 'TCP' },
34
+ { port: 27017, service: 'MongoDB', protocol: 'TCP' },
35
+ ];
36
+ // ============ HELPERS ============
37
+ function getLocalIPs() {
38
+ const interfaces = networkInterfaces();
39
+ const ips = [];
40
+ for (const name of Object.keys(interfaces)) {
41
+ for (const iface of interfaces[name] || []) {
42
+ if (iface.family === 'IPv4' && !iface.internal) {
43
+ ips.push(iface.address);
44
+ }
45
+ }
46
+ }
47
+ return ips;
48
+ }
49
+ async function getPublicIP() {
50
+ return new Promise((resolve) => {
51
+ const timeout = setTimeout(() => resolve(null), 5000);
52
+ https.get('https://api.ipify.org', (res) => {
53
+ let data = '';
54
+ res.on('data', (chunk) => { data += chunk.toString(); });
55
+ res.on('end', () => {
56
+ clearTimeout(timeout);
57
+ resolve(data.trim());
58
+ });
59
+ }).on('error', () => {
60
+ clearTimeout(timeout);
61
+ resolve(null);
62
+ });
63
+ });
64
+ }
65
+ async function lookupDns(domain) {
66
+ const records = [];
67
+ try {
68
+ const addresses = await dns.resolve4(domain);
69
+ for (const addr of addresses) {
70
+ records.push({ type: 'A', value: addr });
71
+ }
72
+ }
73
+ catch { /* ignore */ }
74
+ try {
75
+ const addresses = await dns.resolve6(domain);
76
+ for (const addr of addresses) {
77
+ records.push({ type: 'AAAA', value: addr });
78
+ }
79
+ }
80
+ catch { /* ignore */ }
81
+ try {
82
+ const mx = await dns.resolveMx(domain);
83
+ for (const record of mx) {
84
+ records.push({ type: 'MX', value: `${record.priority} ${record.exchange}` });
85
+ }
86
+ }
87
+ catch { /* ignore */ }
88
+ try {
89
+ const ns = await dns.resolveNs(domain);
90
+ for (const record of ns) {
91
+ records.push({ type: 'NS', value: record });
92
+ }
93
+ }
94
+ catch { /* ignore */ }
95
+ try {
96
+ const txt = await dns.resolveTxt(domain);
97
+ for (const record of txt) {
98
+ records.push({ type: 'TXT', value: record.join('') });
99
+ }
100
+ }
101
+ catch { /* ignore */ }
102
+ if (records.length === 0) {
103
+ return { records: [], error: 'No DNS records found' };
104
+ }
105
+ return { records };
106
+ }
107
+ async function ping(shell, host, count = 4) {
108
+ try {
109
+ const args = isWindows
110
+ ? ['-n', count.toString(), host]
111
+ : ['-c', count.toString(), host];
112
+ const result = await shell.spawn('ping', args);
113
+ if (result.code !== 0 && !result.stdout.includes('time')) {
114
+ return { results: [], error: result.stderr || 'Host unreachable' };
115
+ }
116
+ const results = [];
117
+ const lines = result.stdout.split('\n');
118
+ for (const line of lines) {
119
+ // Windows: Reply from 8.8.8.8: bytes=32 time=15ms TTL=117
120
+ // Unix: 64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=15.2 ms
121
+ const timeMatch = line.match(/time[=<](\d+\.?\d*)\s*ms/i);
122
+ const ttlMatch = line.match(/ttl[=:](\d+)/i);
123
+ if (timeMatch) {
124
+ results.push({
125
+ success: true,
126
+ time: parseFloat(timeMatch[1]),
127
+ ttl: ttlMatch ? parseInt(ttlMatch[1]) : undefined,
128
+ });
129
+ }
130
+ }
131
+ return { results };
132
+ }
133
+ catch (error) {
134
+ return { results: [], error: String(error) };
135
+ }
136
+ }
137
+ async function runSpeedTest(onProgress) {
138
+ const testUrl = 'https://speed.cloudflare.com/__down?bytes=5000000'; // 5MB
139
+ const testSize = 5_000_000;
140
+ return new Promise((resolve) => {
141
+ const timeout = setTimeout(() => {
142
+ resolve({ error: 'Speed test timed out' });
143
+ }, 30000);
144
+ const startTime = Date.now();
145
+ let latency = 0;
146
+ https.get(testUrl, (res) => {
147
+ latency = Date.now() - startTime;
148
+ let downloaded = 0;
149
+ res.on('data', (chunk) => {
150
+ downloaded += chunk.length;
151
+ if (onProgress) {
152
+ onProgress(Math.min(100, (downloaded / testSize) * 100));
153
+ }
154
+ });
155
+ res.on('end', () => {
156
+ clearTimeout(timeout);
157
+ const duration = Date.now() - startTime;
158
+ const speedBps = (downloaded * 8) / (duration / 1000);
159
+ const speedMbps = speedBps / 1_000_000;
160
+ resolve({
161
+ downloadSpeed: Math.round(speedMbps * 100) / 100,
162
+ latency,
163
+ testSize: downloaded,
164
+ duration,
165
+ });
166
+ });
167
+ }).on('error', (error) => {
168
+ clearTimeout(timeout);
169
+ resolve({ error: error.message });
170
+ });
171
+ });
172
+ }
173
+ async function getHeaders(url) {
174
+ return new Promise((resolve) => {
175
+ const timeout = setTimeout(() => {
176
+ resolve({ statusCode: 0, statusMessage: '', headers: {}, error: 'Request timed out' });
177
+ }, 10000);
178
+ try {
179
+ const parsedUrl = new URL(url.startsWith('http') ? url : `https://${url}`);
180
+ const client = parsedUrl.protocol === 'https:' ? https : http;
181
+ const req = client.request(parsedUrl, { method: 'HEAD' }, (res) => {
182
+ clearTimeout(timeout);
183
+ resolve({
184
+ statusCode: res.statusCode || 0,
185
+ statusMessage: res.statusMessage || '',
186
+ headers: res.headers,
187
+ });
188
+ });
189
+ req.on('error', (error) => {
190
+ clearTimeout(timeout);
191
+ resolve({ statusCode: 0, statusMessage: '', headers: {}, error: error.message });
192
+ });
193
+ req.end();
194
+ }
195
+ catch (error) {
196
+ clearTimeout(timeout);
197
+ resolve({ statusCode: 0, statusMessage: '', headers: {}, error: String(error) });
198
+ }
199
+ });
200
+ }
201
+ // ============ PLUGIN ============
202
+ const plugin = {
203
+ activate(api) {
204
+ const { theme, symbols, progressBar } = api.ui;
205
+ if (!api.shell) {
206
+ api.log.error('Network plugin requires shell permission');
207
+ return;
208
+ }
209
+ const shell = api.shell;
210
+ api.registerCommand({
211
+ name: 'net',
212
+ description: 'Network utilities and diagnostics',
213
+ usage: '/net <action> [args]\n\n Actions: ip, ping, dns, speed, headers, ports',
214
+ async execute(args) {
215
+ const action = args[0]?.toLowerCase();
216
+ if (!action) {
217
+ console.log('');
218
+ console.log(` ${symbols.sparkles} ${theme.gradient('NETWORK TOOLS')}`);
219
+ console.log('');
220
+ console.log(` ${theme.dim('Usage:')} /net <action> [args]`);
221
+ console.log('');
222
+ console.log(` ${theme.dim('Actions:')}`);
223
+ console.log(` ${theme.primary('ip')} ${theme.dim('Show local + public IP')}`);
224
+ console.log(` ${theme.primary('ping <host>')} ${theme.dim('Ping a host')}`);
225
+ console.log(` ${theme.primary('dns <domain>')} ${theme.dim('DNS lookup')}`);
226
+ console.log(` ${theme.primary('speed')} ${theme.dim('Speed test')}`);
227
+ console.log(` ${theme.primary('headers <url>')} ${theme.dim('Show HTTP headers')}`);
228
+ console.log(` ${theme.primary('ports')} ${theme.dim('Common ports reference')}`);
229
+ console.log('');
230
+ return;
231
+ }
232
+ console.log('');
233
+ switch (action) {
234
+ case 'ip': {
235
+ console.log(` ${symbols.sparkles} ${theme.gradient('IP ADDRESSES')}`);
236
+ console.log('');
237
+ const localIPs = getLocalIPs();
238
+ if (localIPs.length > 0) {
239
+ console.log(` ${theme.dim('Local:')}`);
240
+ for (const ip of localIPs) {
241
+ console.log(` ${symbols.arrow} ${theme.primary(ip)}`);
242
+ }
243
+ }
244
+ else {
245
+ console.log(` ${theme.dim('Local:')} ${theme.warning('No network interfaces found')}`);
246
+ }
247
+ console.log('');
248
+ console.log(` ${theme.dim('Fetching public IP...')}`);
249
+ const publicIP = await getPublicIP();
250
+ // Move cursor up and clear line
251
+ process.stdout.write('\x1b[1A\x1b[2K');
252
+ if (publicIP) {
253
+ console.log(` ${theme.dim('Public:')} ${theme.success(publicIP)}`);
254
+ }
255
+ else {
256
+ console.log(` ${theme.dim('Public:')} ${theme.warning('Could not determine (offline?)')}`);
257
+ }
258
+ break;
259
+ }
260
+ case 'ping': {
261
+ const host = args[1];
262
+ if (!host) {
263
+ console.log(` ${symbols.warning} ${theme.warning('Usage:')} /net ping <host>`);
264
+ break;
265
+ }
266
+ console.log(` ${theme.dim('Pinging')} ${theme.primary(host)}...`);
267
+ console.log('');
268
+ const { results, error } = await ping(shell, host);
269
+ if (error) {
270
+ console.log(` ${symbols.cross} ${theme.error(error)}`);
271
+ break;
272
+ }
273
+ if (results.length === 0) {
274
+ console.log(` ${symbols.cross} ${theme.error('No response from host')}`);
275
+ break;
276
+ }
277
+ for (let i = 0; i < results.length; i++) {
278
+ const r = results[i];
279
+ if (r.success) {
280
+ console.log(` ${symbols.check} ${theme.dim(`Reply ${i + 1}:`)} ` +
281
+ `${theme.success(`${r.time}ms`)} ` +
282
+ `${r.ttl ? theme.dim(`TTL=${r.ttl}`) : ''}`);
283
+ }
284
+ }
285
+ const times = results.filter(r => r.time).map(r => r.time);
286
+ if (times.length > 0) {
287
+ const avg = times.reduce((a, b) => a + b, 0) / times.length;
288
+ const min = Math.min(...times);
289
+ const max = Math.max(...times);
290
+ console.log('');
291
+ console.log(` ${theme.dim('Min:')} ${min}ms ${theme.dim('Max:')} ${max}ms ${theme.dim('Avg:')} ${avg.toFixed(1)}ms`);
292
+ }
293
+ break;
294
+ }
295
+ case 'dns': {
296
+ const domain = args[1];
297
+ if (!domain) {
298
+ console.log(` ${symbols.warning} ${theme.warning('Usage:')} /net dns <domain>`);
299
+ break;
300
+ }
301
+ console.log(` ${symbols.sparkles} ${theme.gradient(`DNS: ${domain.toUpperCase()}`)}`);
302
+ console.log('');
303
+ const { records, error } = await lookupDns(domain);
304
+ if (error) {
305
+ console.log(` ${symbols.cross} ${theme.error(error)}`);
306
+ break;
307
+ }
308
+ console.log(` ${theme.dim('TYPE'.padEnd(8))}${theme.dim('VALUE')}`);
309
+ console.log(` ${theme.dim('─'.repeat(50))}`);
310
+ for (const record of records) {
311
+ const typeColor = record.type === 'A' ? theme.success :
312
+ record.type === 'AAAA' ? theme.primary :
313
+ record.type === 'MX' ? theme.warning :
314
+ theme.secondary;
315
+ console.log(` ${typeColor(record.type.padEnd(8))}${record.value}`);
316
+ }
317
+ console.log('');
318
+ console.log(` ${theme.dim(`Found: ${records.length} records`)}`);
319
+ break;
320
+ }
321
+ case 'speed': {
322
+ console.log(` ${symbols.sparkles} ${theme.gradient('SPEED TEST')}`);
323
+ console.log('');
324
+ console.log(` ${theme.dim('Testing download speed...')}`);
325
+ console.log(` ${progressBar(0, 100, 30)}`);
326
+ const result = await runSpeedTest((percent) => {
327
+ // Move cursor up and update progress
328
+ process.stdout.write('\x1b[1A\x1b[2K');
329
+ console.log(` ${progressBar(percent, 100, 30)}`);
330
+ });
331
+ // Clear progress line
332
+ process.stdout.write('\x1b[1A\x1b[2K');
333
+ process.stdout.write('\x1b[1A\x1b[2K');
334
+ if ('error' in result) {
335
+ console.log(` ${symbols.cross} ${theme.error(result.error)}`);
336
+ break;
337
+ }
338
+ console.log(` ${symbols.check} ${theme.success('Test complete')}`);
339
+ console.log('');
340
+ console.log(` ${theme.dim('Download:')} ${theme.primary(`${result.downloadSpeed} Mbps`)}`);
341
+ console.log(` ${theme.dim('Latency:')} ${theme.secondary(`${result.latency}ms`)}`);
342
+ console.log(` ${theme.dim('Data:')} ${(result.testSize / 1_000_000).toFixed(1)} MB in ${(result.duration / 1000).toFixed(1)}s`);
343
+ break;
344
+ }
345
+ case 'headers': {
346
+ let url = args[1];
347
+ if (!url) {
348
+ console.log(` ${symbols.warning} ${theme.warning('Usage:')} /net headers <url>`);
349
+ break;
350
+ }
351
+ if (!url.startsWith('http')) {
352
+ url = `https://${url}`;
353
+ }
354
+ console.log(` ${theme.dim('Fetching headers from')} ${theme.primary(url)}...`);
355
+ console.log('');
356
+ const result = await getHeaders(url);
357
+ if (result.error) {
358
+ console.log(` ${symbols.cross} ${theme.error(result.error)}`);
359
+ break;
360
+ }
361
+ const statusColor = result.statusCode >= 200 && result.statusCode < 300 ? theme.success :
362
+ result.statusCode >= 300 && result.statusCode < 400 ? theme.warning :
363
+ theme.error;
364
+ console.log(` ${theme.dim('Status:')} ${statusColor(`${result.statusCode} ${result.statusMessage}`)}`);
365
+ console.log('');
366
+ console.log(` ${theme.dim('Headers:')}`);
367
+ console.log(` ${theme.dim('─'.repeat(50))}`);
368
+ const importantHeaders = [
369
+ 'content-type', 'content-length', 'server', 'cache-control',
370
+ 'x-powered-by', 'x-frame-options', 'strict-transport-security'
371
+ ];
372
+ for (const header of importantHeaders) {
373
+ if (result.headers[header]) {
374
+ const value = Array.isArray(result.headers[header])
375
+ ? result.headers[header].join(', ')
376
+ : result.headers[header];
377
+ console.log(` ${theme.primary(header)}: ${theme.dim(String(value))}`);
378
+ }
379
+ }
380
+ break;
381
+ }
382
+ case 'ports': {
383
+ console.log(` ${symbols.sparkles} ${theme.gradient('COMMON PORTS')}`);
384
+ console.log('');
385
+ console.log(` ${theme.dim('PORT'.padEnd(8))}${theme.dim('SERVICE'.padEnd(18))}${theme.dim('PROTOCOL')}`);
386
+ console.log(` ${theme.dim('─'.repeat(40))}`);
387
+ for (const p of COMMON_PORTS) {
388
+ console.log(` ${theme.primary(p.port.toString().padEnd(8))}` +
389
+ `${theme.secondary(p.service.padEnd(18))}` +
390
+ `${theme.dim(p.protocol)}`);
391
+ }
392
+ break;
393
+ }
394
+ default:
395
+ console.log(` ${symbols.cross} ${theme.error(`Unknown action: ${action}`)}`);
396
+ console.log(` ${theme.dim('Run /net to see available actions')}`);
397
+ }
398
+ console.log('');
399
+ }
400
+ });
401
+ api.log.info('Network Tools plugin activated');
402
+ }
403
+ };
404
+ export default plugin;
405
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "zammy-plugin-network",
3
+ "version": "1.0.1",
4
+ "description": "Network utilities and diagnostics",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": ["dist", "zammy-plugin.json", "README.md"],
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "tsc --watch"
12
+ },
13
+ "keywords": ["zammy-plugin", "zammy", "cli", "network", "ping", "dns", "ip", "speed-test"],
14
+ "author": "Aayush Adhikari",
15
+ "license": "MIT",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/aayushadhikari7/zammy-cli.git",
19
+ "directory": "packages/plugins/network"
20
+ },
21
+ "bugs": {
22
+ "url": "https://github.com/aayushadhikari7/zammy-cli/issues"
23
+ },
24
+ "homepage": "https://github.com/aayushadhikari7/zammy-cli/tree/main/packages/plugins/network#readme",
25
+ "peerDependencies": {
26
+ "zammy": "^1.0.0"
27
+ },
28
+ "devDependencies": {
29
+ "zammy": "*",
30
+ "typescript": "^5.3.0"
31
+ }
32
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "zammy-plugin-network",
3
+ "version": "1.0.0",
4
+ "displayName": "Network Tools",
5
+ "description": "Network utilities and diagnostics",
6
+ "author": "Zammy CLI",
7
+ "license": "MIT",
8
+ "main": "./dist/index.js",
9
+ "commands": ["net"],
10
+ "zammy": {
11
+ "minVersion": "1.2.0"
12
+ },
13
+ "permissions": {
14
+ "shell": true,
15
+ "network": true
16
+ }
17
+ }
@@ -0,0 +1,74 @@
1
+ # zammy-plugin-port
2
+
3
+ Manage ports and processes from your terminal.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ /plugin install zammy-plugin-port
9
+ ```
10
+
11
+ ## Commands
12
+
13
+ ### `/port list`
14
+
15
+ Show all listening ports on your system.
16
+
17
+ ```
18
+ PORT PID PROCESS
19
+ ────────────────────────────────────────
20
+ 3000 12345 node
21
+ 5432 6789 postgres
22
+ 8080 11111 java
23
+
24
+ Total: 3 ports
25
+ ```
26
+
27
+ ### `/port check <port>`
28
+
29
+ Check if a specific port is in use.
30
+
31
+ ```bash
32
+ /port check 3000
33
+ # Port 3000 is in use
34
+ # PID: 12345
35
+ # Process: node
36
+ ```
37
+
38
+ ### `/port kill <port>`
39
+
40
+ Kill the process running on a specific port.
41
+
42
+ ```bash
43
+ /port kill 3000
44
+ # Process killed (PID: 12345)
45
+ ```
46
+
47
+ **Note:** May require administrator/root privileges for some processes.
48
+
49
+ ### `/port find <name>`
50
+
51
+ Find all ports used by processes matching a name.
52
+
53
+ ```bash
54
+ /port find node
55
+ # PORTS FOR "NODE"
56
+ # PORT PID PROCESS
57
+ # 3000 12345 node
58
+ # 3001 12346 node
59
+ ```
60
+
61
+ ## Cross-Platform Support
62
+
63
+ This plugin works on:
64
+ - **Windows** - Uses `netstat` and `taskkill`
65
+ - **macOS** - Uses `lsof` and `kill`
66
+ - **Linux** - Uses `lsof`/`netstat` and `kill`
67
+
68
+ ## Permissions
69
+
70
+ This plugin requires shell access to run system commands.
71
+
72
+ ## License
73
+
74
+ MIT
@@ -0,0 +1,4 @@
1
+ import type { ZammyPlugin } from 'zammy/plugins';
2
+ declare const plugin: ZammyPlugin;
3
+ export default plugin;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,eAAe,CAAC;AAsN5D,QAAA,MAAM,MAAM,EAAE,WAyJb,CAAC;AAEF,eAAe,MAAM,CAAC"}