pyre-cli 10.2.0 → 10.4.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 +75 -18
- package/dist/{alertChannels-TPSQIJ7S.js → alertChannels-MNX4XH6J.js} +1 -0
- package/dist/{anomaliesCmd-25OFKYPK.js → anomaliesCmd-HHTY5LYL.js} +2 -0
- package/dist/benchGitCmd-HIXUC5EK.js +87 -0
- package/dist/{benchmarkCmd-A3ETK6VY.js → benchmarkCmd-B7DLP2VC.js} +2 -0
- package/dist/{blender-FGH3ASEQ.js → blender-6ZX5SPYC.js} +3 -1
- package/dist/{brewHealth-P2GW5Y5C.js → brewHealth-VFW33QB3.js} +1 -0
- package/dist/budgetCmd-TGO3RYLN.js +11 -0
- package/dist/{buildCmd-CDPZ2ZFA.js → buildCmd-E7KUCFYG.js} +3 -1
- package/dist/{checkCmd-WQAHAUWO.js → checkCmd-QLYTP77Y.js} +5 -3
- package/dist/chunk-3RG5ZIWI.js +10 -0
- package/dist/{chunk-VIACN2RU.js → chunk-FYCBGUTW.js} +41 -19
- package/dist/chunk-JH7P6KLN.js +143 -0
- package/dist/{chunk-QM5L43EK.js → chunk-LDJB5V4N.js} +5 -1
- package/dist/chunk-NMGQVRCA.js +111 -0
- package/dist/chunk-OCL7P7N7.js +936 -0
- package/dist/{chunk-23YWCI3O.js → chunk-QEH4LR6P.js} +28 -686
- package/dist/{chunk-KVUMOA6C.js → chunk-RKPGPVTO.js} +77 -4
- package/dist/chunk-UF3XQ3R3.js +3800 -0
- package/dist/{collectors-JDN5Y7EV.js → collectors-V7SCIIDH.js} +5 -3
- package/dist/{completions-ZVTNE52B.js → completions-FTPXDSR2.js} +44 -3
- package/dist/{config-J4YMADEF.js → config-5WW5M63G.js} +2 -1
- package/dist/containersCmd-FSMYOBG2.js +84 -0
- package/dist/{doctor-LHFW4UJP.js → doctor-O4DIAMHK.js} +3 -2
- package/dist/{explainCmd-MF6PIMLW.js → explainCmd-7PBPA7O5.js} +1 -0
- package/dist/{extensions-XJGHG7X3.js → extensions-QQEV7U3D.js} +1 -0
- package/dist/{firebaseSync-ON3RZ6KX.js → firebaseSync-LRN67UTV.js} +2 -0
- package/dist/flightRecorder-GJIAQOXC.js +162 -0
- package/dist/index.js +737 -4125
- package/dist/inspectCmd-5FXJBJTK.js +137 -0
- package/dist/menu-AJFGDLBP.js +1233 -0
- package/dist/monitors/platform/windows-ui.ps1 +31 -29
- package/dist/{netUsageCmd-67IBZZYN.js → netUsageCmd-JP6YKBPF.js} +7 -5
- package/dist/optimizeCmd-WZKLFYZU.js +1110 -0
- package/dist/{pipeCmd-2N4JPKYE.js → pipeCmd-CPK6FVKB.js} +5 -3
- package/dist/playbookCmd-FRROIEXR.js +145 -0
- package/dist/{profileProcCmd-N4H6MCBT.js → profileProcCmd-5Y3733E7.js} +64 -13
- package/dist/{prometheus-5BL5PVLC.js → prometheus-CYNUR3QT.js} +1 -0
- package/dist/{prometheusCmd-LEUM5WCZ.js → prometheusCmd-G2CSEZRQ.js} +5 -3
- package/dist/{replayCmd-Z3PYXY7V.js → replayCmd-ODB5SPOQ.js} +25 -6
- package/dist/{run-HOGQDDTA.js → run-UJQYT2TO.js} +1 -0
- package/dist/{serveCmd-L7LVJOZN.js → serveCmd-KDPWLVQI.js} +5 -3
- package/dist/{service-7GIX3YNC.js → service-LIYYR3UI.js} +1 -0
- package/dist/{smartCmd-ODWKSFNG.js → smartCmd-2BJJ37GV.js} +130 -5
- package/dist/statuslineCmd-EUKYRR2G.js +75 -0
- package/dist/{stressCmd-MFXMFXYX.js → stressCmd-GKHGY26X.js} +2 -0
- package/dist/{syncCmd-42IRF633.js → syncCmd-MIBFKX24.js} +16 -5
- package/dist/topoCmd-RTXQJ6XA.js +189 -0
- package/dist/{updateCheck-52X6LJG5.js → updateCheck-LJHEMG3G.js} +2 -0
- package/dist/{watchdogCmd-6GR4UN6B.js → watchdogCmd-XM6OPTKM.js} +41 -6
- package/dist/{wizard-JQMQWFAW.js → wizard-PRDOJROQ.js} +2 -1
- package/package.json +2 -2
- package/src/benchGitCmd.ts +110 -0
- package/src/budgetCmd.ts +199 -0
- package/src/completions.ts +42 -3
- package/src/containersCmd.ts +106 -0
- package/src/doctor.ts +86 -6
- package/src/easy_features.test.ts +83 -0
- package/src/flightRecorder.ts +214 -0
- package/src/index.ts +183 -9
- package/src/inspectCmd.ts +165 -0
- package/src/live/input.ts +70 -3
- package/src/live/render.ts +1 -1
- package/src/live/state.ts +2 -1
- package/src/menu/commands.ts +754 -0
- package/src/menu/index.ts +358 -0
- package/src/menu/render.ts +272 -0
- package/src/menu/types.ts +63 -0
- package/src/menu.test.ts +110 -0
- package/src/monitors/blender.ts +49 -19
- package/src/monitors/buildTracker.ts +72 -54
- package/src/monitors/platform/windows-ui.ps1 +31 -29
- package/src/monitors/platform/windows.ts +613 -280
- package/src/optimizeCmd.ts +1248 -0
- package/src/platform.test.ts +135 -0
- package/src/playbookCmd.ts +156 -0
- package/src/power_features.test.ts +251 -0
- package/src/profileProcCmd.ts +68 -21
- package/src/replayCmd.ts +15 -6
- package/src/smartCmd.ts +149 -10
- package/src/state/config.ts +13 -0
- package/src/statuslineCmd.ts +87 -0
- package/src/syncCmd.ts +12 -0
- package/src/topoCmd.ts +83 -50
- package/src/watchdogCmd.ts +40 -3
- package/src/xbar.ts +195 -17
- package/dist/chunk-M73HCQD2.js +0 -95
- package/dist/topoCmd-DZ3YS5IL.js +0 -148
package/dist/topoCmd-DZ3YS5IL.js
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
collectNetwork
|
|
3
|
-
} from "./chunk-23YWCI3O.js";
|
|
4
|
-
import "./chunk-M73HCQD2.js";
|
|
5
|
-
import "./chunk-VIACN2RU.js";
|
|
6
|
-
import {
|
|
7
|
-
run
|
|
8
|
-
} from "./chunk-MZO5QKUR.js";
|
|
9
|
-
|
|
10
|
-
// src/topoCmd.ts
|
|
11
|
-
import net from "net";
|
|
12
|
-
import os from "os";
|
|
13
|
-
import chalk from "chalk";
|
|
14
|
-
async function probePort(ip, port, timeoutMs = 400) {
|
|
15
|
-
return new Promise((resolve) => {
|
|
16
|
-
const socket = new net.Socket();
|
|
17
|
-
socket.setTimeout(timeoutMs);
|
|
18
|
-
socket.once("connect", () => {
|
|
19
|
-
socket.destroy();
|
|
20
|
-
resolve(true);
|
|
21
|
-
});
|
|
22
|
-
socket.once("timeout", () => {
|
|
23
|
-
socket.destroy();
|
|
24
|
-
resolve(false);
|
|
25
|
-
});
|
|
26
|
-
socket.once("error", () => {
|
|
27
|
-
socket.destroy();
|
|
28
|
-
resolve(false);
|
|
29
|
-
});
|
|
30
|
-
socket.connect(port, ip);
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
async function getDefaultGateway() {
|
|
34
|
-
try {
|
|
35
|
-
const raw = await run("route -n get default 2>/dev/null | grep gateway | awk '{print $2}'", "");
|
|
36
|
-
if (raw.trim()) return raw.trim();
|
|
37
|
-
} catch {
|
|
38
|
-
}
|
|
39
|
-
try {
|
|
40
|
-
const raw = await run("netstat -nr | grep default | awk '{print $2}' | head -n1", "");
|
|
41
|
-
if (raw.trim()) return raw.trim();
|
|
42
|
-
} catch {
|
|
43
|
-
}
|
|
44
|
-
return "192.168.1.1";
|
|
45
|
-
}
|
|
46
|
-
async function getArpNeighbors(gatewayIp) {
|
|
47
|
-
const peers = [];
|
|
48
|
-
try {
|
|
49
|
-
const raw = await run("arp -a -n 2>/dev/null", "");
|
|
50
|
-
const lines = raw.split("\n");
|
|
51
|
-
for (const line of lines) {
|
|
52
|
-
const match = line.match(/\(([\d.]+)\)\s+at\s+([0-9a-fA-F:]+)\s+on\s+(\S+)/);
|
|
53
|
-
if (match) {
|
|
54
|
-
const ip = match[1];
|
|
55
|
-
const mac = match[2];
|
|
56
|
-
const iface = match[3];
|
|
57
|
-
if (ip === "255.255.255.255" || ip.startsWith("224.") || mac.includes("incomplete")) continue;
|
|
58
|
-
peers.push({
|
|
59
|
-
ip,
|
|
60
|
-
mac,
|
|
61
|
-
interface: iface,
|
|
62
|
-
isGateway: ip === gatewayIp
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
} catch {
|
|
67
|
-
}
|
|
68
|
-
return peers;
|
|
69
|
-
}
|
|
70
|
-
async function runTopoCommand(opts = {}) {
|
|
71
|
-
const localNet = await collectNetwork();
|
|
72
|
-
const gatewayIp = await getDefaultGateway();
|
|
73
|
-
const lanPeers = await getArpNeighbors(gatewayIp);
|
|
74
|
-
const hostname = os.hostname();
|
|
75
|
-
if (opts.scan || lanPeers.length <= 15) {
|
|
76
|
-
await Promise.all(
|
|
77
|
-
lanPeers.map(async (peer) => {
|
|
78
|
-
const [hasP2P, hasRest] = await Promise.all([
|
|
79
|
-
probePort(peer.ip, 9876, 250),
|
|
80
|
-
probePort(peer.ip, 8080, 250)
|
|
81
|
-
]);
|
|
82
|
-
peer.pyreP2P = hasP2P;
|
|
83
|
-
peer.pyreRest = hasRest;
|
|
84
|
-
})
|
|
85
|
-
);
|
|
86
|
-
}
|
|
87
|
-
const establishedConns = (localNet.topRemoteHosts || []).slice(0, 6);
|
|
88
|
-
if (opts.json) {
|
|
89
|
-
console.log(
|
|
90
|
-
JSON.stringify(
|
|
91
|
-
{
|
|
92
|
-
localNode: {
|
|
93
|
-
hostname,
|
|
94
|
-
ip: localNet.ip,
|
|
95
|
-
interface: localNet.interface
|
|
96
|
-
},
|
|
97
|
-
gateway: gatewayIp,
|
|
98
|
-
lanPeers,
|
|
99
|
-
activeRemoteConnections: establishedConns
|
|
100
|
-
},
|
|
101
|
-
null,
|
|
102
|
-
2
|
|
103
|
-
)
|
|
104
|
-
);
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
console.log(chalk.bold("\n \u{1F525} pyre topo \u2014 Network Topology Map\n"));
|
|
108
|
-
console.log(` ${chalk.bgCyan.black.bold(" LOCAL HOST ")} ${chalk.bold(hostname)}`);
|
|
109
|
-
console.log(` \u251C\u2500\u2500 IP Address: ${chalk.green.bold(localNet.ip || "127.0.0.1")} (${localNet.interface})`);
|
|
110
|
-
console.log(` \u251C\u2500\u2500 Active RX / TX: \u2193 ${chalk.cyan(localNet.rxBytes ? `${(localNet.rxBytes / 1e6).toFixed(1)} MB` : "0 MB")} \u2191 ${chalk.blue(localNet.txBytes ? `${(localNet.txBytes / 1e6).toFixed(1)} MB` : "0 MB")}`);
|
|
111
|
-
console.log(" \u2502");
|
|
112
|
-
console.log(` \u251C\u2500\u2500 ${chalk.yellow.bold("DEFAULT GATEWAY / ROUTER")}`);
|
|
113
|
-
console.log(` \u2502 \u2514\u2500\u2500 IP: ${chalk.yellow(gatewayIp)} [Route \u2192 WAN / Internet]`);
|
|
114
|
-
console.log(" \u2502");
|
|
115
|
-
console.log(` \u251C\u2500\u2500 ${chalk.magenta.bold("LAN NEIGHBORS & PEERS")} (${lanPeers.length} discovered via ARP)`);
|
|
116
|
-
if (lanPeers.length === 0) {
|
|
117
|
-
console.log(` \u2502 \u2514\u2500\u2500 ${chalk.dim("No neighboring ARP entries currently cached.")}`);
|
|
118
|
-
} else {
|
|
119
|
-
for (let i = 0; i < lanPeers.length; i++) {
|
|
120
|
-
const peer = lanPeers[i];
|
|
121
|
-
const isLast = i === lanPeers.length - 1;
|
|
122
|
-
const prefix = isLast ? " \u2502 \u2514\u2500\u2500" : " \u2502 \u251C\u2500\u2500";
|
|
123
|
-
const gwBadge = peer.isGateway ? chalk.yellow(" [Gateway]") : "";
|
|
124
|
-
let pyreBadge = "";
|
|
125
|
-
if (peer.pyreP2P) pyreBadge += chalk.hex("#ff5500").bold(" [\u{1F525} pyre P2P :9876]");
|
|
126
|
-
if (peer.pyreRest) pyreBadge += chalk.hex("#00ffcc").bold(" [\u{1F525} pyre REST :8080]");
|
|
127
|
-
console.log(`${prefix} ${peer.ip.padEnd(16)} ${chalk.dim(peer.mac)}${gwBadge}${pyreBadge}`);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
console.log(" \u2502");
|
|
131
|
-
console.log(` \u2514\u2500\u2500 ${chalk.cyan.bold("TOP ACTIVE REMOTE CONNECTIONS")}`);
|
|
132
|
-
if (establishedConns.length === 0) {
|
|
133
|
-
console.log(` \u2514\u2500\u2500 ${chalk.dim("No active established sockets detected.")}`);
|
|
134
|
-
} else {
|
|
135
|
-
for (let i = 0; i < establishedConns.length; i++) {
|
|
136
|
-
const conn = establishedConns[i];
|
|
137
|
-
const isLast = i === establishedConns.length - 1;
|
|
138
|
-
const prefix = isLast ? " \u2514\u2500\u2500" : " \u251C\u2500\u2500";
|
|
139
|
-
const connsBadge = chalk.dim(`(${conn.connectionCount} socket${conn.connectionCount > 1 ? "s" : ""})`);
|
|
140
|
-
console.log(`${prefix} ${chalk.white(conn.host.padEnd(24))} ${chalk.green("ESTABLISHED")} ${connsBadge}`);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
console.log();
|
|
144
|
-
console.log(chalk.dim(' Tip: Run "pyre p2p server" on any node to allow automatic live cluster streaming.\n'));
|
|
145
|
-
}
|
|
146
|
-
export {
|
|
147
|
-
runTopoCommand
|
|
148
|
-
};
|