peerllm-host-cli 0.1.2 → 0.3.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/dist/cli/banner.d.ts +9 -0
- package/dist/cli/banner.d.ts.map +1 -0
- package/dist/cli/banner.js +50 -0
- package/dist/cli/banner.js.map +1 -0
- package/dist/cli/commands/dashboard.d.ts +3 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.js +316 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/models.d.ts.map +1 -1
- package/dist/cli/commands/models.js +231 -10
- package/dist/cli/commands/models.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +2 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/index.js +7 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/services.d.ts +2 -0
- package/dist/cli/services.d.ts.map +1 -1
- package/dist/cli/services.js +3 -1
- package/dist/cli/services.js.map +1 -1
- package/dist/cli/tui.d.ts +40 -0
- package/dist/cli/tui.d.ts.map +1 -0
- package/dist/cli/tui.js +128 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/core/catalog.d.ts +22 -0
- package/dist/core/catalog.d.ts.map +1 -0
- package/dist/core/catalog.js +22 -0
- package/dist/core/catalog.js.map +1 -0
- package/dist/core/model-download.d.ts +27 -0
- package/dist/core/model-download.d.ts.map +1 -0
- package/dist/core/model-download.js +160 -0
- package/dist/core/model-download.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Multi-line PeerLLM block banner. Returns the full multi-row string. */
|
|
2
|
+
export declare function renderBanner(): string;
|
|
3
|
+
/** Inline colored "PeerLLM" wordmark — for one-line headers and prompts. */
|
|
4
|
+
export declare function renderBrand(): string;
|
|
5
|
+
/** Tagline shown under the banner in help / dashboard. */
|
|
6
|
+
export declare function renderTagline(version: string): string;
|
|
7
|
+
/** Banner + tagline, separated by blank lines. Suitable for --help and dashboard. */
|
|
8
|
+
export declare function renderHeader(version: string): string;
|
|
9
|
+
//# sourceMappingURL=banner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/cli/banner.ts"],"names":[],"mappings":"AAyBA,0EAA0E;AAC1E,wBAAgB,YAAY,IAAI,MAAM,CAYrC;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,IAAI,MAAM,CAMpC;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { styleText } from "node:util";
|
|
2
|
+
function paint(color, text) {
|
|
3
|
+
// util.styleText handles NO_COLOR + TTY detection automatically.
|
|
4
|
+
return styleText(Array.isArray(color) ? color : [color], text);
|
|
5
|
+
}
|
|
6
|
+
const LETTERS = {
|
|
7
|
+
P: ["██████╗ ", "██╔══██╗", "██████╔╝", "██╔═══╝ ", "██║ "],
|
|
8
|
+
E: ["███████╗", "██╔════╝", "█████╗ ", "██╔══╝ ", "███████╗"],
|
|
9
|
+
R: ["██████╗ ", "██╔══██╗", "██████╔╝", "██╔══██╗", "██║ ██║"],
|
|
10
|
+
L: ["██╗ ", "██║ ", "██║ ", "██║ ", "███████╗"],
|
|
11
|
+
M: ["███╗ ███╗", "████╗ ████║", "██╔████╔██║", "██║╚██╔╝██║", "██║ ╚═╝ ██║"],
|
|
12
|
+
};
|
|
13
|
+
// Each banner letter is colored to match the requested branding:
|
|
14
|
+
// Peer = blue, LL = green, M = red.
|
|
15
|
+
const SEGMENTS = [
|
|
16
|
+
{ letters: "PEER", color: "blue" },
|
|
17
|
+
{ letters: "LL", color: "green" },
|
|
18
|
+
{ letters: "M", color: "red" },
|
|
19
|
+
];
|
|
20
|
+
/** Multi-line PeerLLM block banner. Returns the full multi-row string. */
|
|
21
|
+
export function renderBanner() {
|
|
22
|
+
const rows = ["", "", "", "", ""];
|
|
23
|
+
for (const seg of SEGMENTS) {
|
|
24
|
+
for (const ch of seg.letters) {
|
|
25
|
+
const letter = LETTERS[ch];
|
|
26
|
+
if (!letter)
|
|
27
|
+
continue;
|
|
28
|
+
for (let r = 0; r < 5; r++) {
|
|
29
|
+
rows[r] += paint(seg.color, letter[r] ?? "");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return rows.join("\n");
|
|
34
|
+
}
|
|
35
|
+
/** Inline colored "PeerLLM" wordmark — for one-line headers and prompts. */
|
|
36
|
+
export function renderBrand() {
|
|
37
|
+
return (paint(["blue", "bold"], "Peer") +
|
|
38
|
+
paint(["green", "bold"], "LL") +
|
|
39
|
+
paint(["red", "bold"], "M"));
|
|
40
|
+
}
|
|
41
|
+
/** Tagline shown under the banner in help / dashboard. */
|
|
42
|
+
export function renderTagline(version) {
|
|
43
|
+
return (paint("dim", " Serve decentralized AI compute from this machine ") +
|
|
44
|
+
paint("gray", `· v${version}`));
|
|
45
|
+
}
|
|
46
|
+
/** Banner + tagline, separated by blank lines. Suitable for --help and dashboard. */
|
|
47
|
+
export function renderHeader(version) {
|
|
48
|
+
return `\n${renderBanner()}\n\n${renderTagline(version)}\n`;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/cli/banner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC,SAAS,KAAK,CAAC,KAAsB,EAAE,IAAY;IACjD,iEAAiE;IACjE,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,OAAO,GAA6B;IACxC,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;IAC/D,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;IAC/D,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;IAC/D,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;IAC/D,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC;CAC/E,CAAC;AAEF,iEAAiE;AACjE,sCAAsC;AACtC,MAAM,QAAQ,GAA6C;IACzD,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IAClC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;IACjC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;CAC/B,CAAC;AAEF,0EAA0E;AAC1E,MAAM,UAAU,YAAY;IAC1B,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,WAAW;IACzB,OAAO,CACL,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAC/B,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QAC9B,KAAK,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,CACL,KAAK,CAAC,KAAK,EAAE,sDAAsD,CAAC;QACpE,KAAK,CAAC,MAAM,EAAE,MAAM,OAAO,EAAE,CAAC,CAC/B,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,KAAK,YAAY,EAAE,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmPpC,wBAAgB,oBAAoB,IAAI,OAAO,CAsI9C"}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import { cpus, totalmem, freemem } from "node:os";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { resolvePaths } from "../../core/paths.js";
|
|
4
|
+
import { METHOD } from "../../shared/protocol.js";
|
|
5
|
+
import { renderBanner, renderBrand } from "../banner.js";
|
|
6
|
+
import { EXIT } from "../exit-codes.js";
|
|
7
|
+
import { printError } from "../format.js";
|
|
8
|
+
import { DaemonUnreachableError, IpcClient } from "../ipc-client.js";
|
|
9
|
+
import { ANSI, bar, enterTui, moveTo, padRight, paint, sparkline, truncate, write, } from "../tui.js";
|
|
10
|
+
const MAX_CPU_SAMPLES = 60;
|
|
11
|
+
const MAX_LOG_LINES = 6;
|
|
12
|
+
function readCpuSnapshot() {
|
|
13
|
+
let idle = 0;
|
|
14
|
+
let total = 0;
|
|
15
|
+
for (const c of cpus()) {
|
|
16
|
+
const t = c.times;
|
|
17
|
+
idle += t.idle;
|
|
18
|
+
total += t.user + t.nice + t.sys + t.idle + t.irq;
|
|
19
|
+
}
|
|
20
|
+
return { idle, total };
|
|
21
|
+
}
|
|
22
|
+
function statusBadge(s) {
|
|
23
|
+
switch (s) {
|
|
24
|
+
case "connected":
|
|
25
|
+
return paint(["green", "bold"], "● connected");
|
|
26
|
+
case "connecting":
|
|
27
|
+
return paint(["yellow", "bold"], "◐ connecting");
|
|
28
|
+
case "error":
|
|
29
|
+
return paint(["red", "bold"], "✗ error");
|
|
30
|
+
default:
|
|
31
|
+
return paint("dim", "○ disconnected");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function formatUptime(seconds) {
|
|
35
|
+
if (seconds < 60)
|
|
36
|
+
return `${seconds}s`;
|
|
37
|
+
const m = Math.floor(seconds / 60);
|
|
38
|
+
if (m < 60)
|
|
39
|
+
return `${m}m ${seconds % 60}s`;
|
|
40
|
+
const h = Math.floor(m / 60);
|
|
41
|
+
if (h < 24)
|
|
42
|
+
return `${h}h ${m % 60}m`;
|
|
43
|
+
const d = Math.floor(h / 24);
|
|
44
|
+
return `${d}d ${h % 24}h`;
|
|
45
|
+
}
|
|
46
|
+
function row(label, value, labelWidth = 14) {
|
|
47
|
+
return paint("dim", padRight(label, labelWidth)) + value;
|
|
48
|
+
}
|
|
49
|
+
function panelTitle(title) {
|
|
50
|
+
return paint(["cyan", "bold"], `┌─ ${title} `) + paint("dim", "─".repeat(Math.max(0, 50 - title.length)));
|
|
51
|
+
}
|
|
52
|
+
function panelDivider(width) {
|
|
53
|
+
return paint("dim", "─".repeat(width));
|
|
54
|
+
}
|
|
55
|
+
function render(state, cols) {
|
|
56
|
+
// Clear + go home, then redraw.
|
|
57
|
+
write(ANSI.home + ANSI.clear);
|
|
58
|
+
write(renderBanner() + "\n");
|
|
59
|
+
write(" " +
|
|
60
|
+
renderBrand() +
|
|
61
|
+
paint("dim", " · ") +
|
|
62
|
+
paint("dim", "decentralized AI host · ") +
|
|
63
|
+
paint(state.lastUpdated ? "gray" : "dim", state.lastUpdated ? `last update ${state.lastUpdated.toLocaleTimeString()}` : "loading…") +
|
|
64
|
+
"\n\n");
|
|
65
|
+
if (state.lastError) {
|
|
66
|
+
write(" " + paint("yellow", `⚠ ${state.lastError}`) + "\n\n");
|
|
67
|
+
}
|
|
68
|
+
// Daemon + Orchestrator panel
|
|
69
|
+
write(panelTitle("Daemon") + "\n");
|
|
70
|
+
if (state.status) {
|
|
71
|
+
const s = state.status;
|
|
72
|
+
write(" " +
|
|
73
|
+
row("pid", String(s.daemon.pid)) +
|
|
74
|
+
paint("dim", " ") +
|
|
75
|
+
row("uptime", paint(["green"], formatUptime(s.daemon.uptimeSeconds)), 8) +
|
|
76
|
+
paint("dim", " ") +
|
|
77
|
+
row("version", paint("bold", s.daemon.version), 9) +
|
|
78
|
+
"\n");
|
|
79
|
+
write(" " + row("orchestrator", statusBadge(s.orchestrator.status)) + "\n");
|
|
80
|
+
const authStr = s.auth.loggedIn
|
|
81
|
+
? paint("green", "logged in") +
|
|
82
|
+
(s.auth.userId ? paint("dim", ` (user ${s.auth.userId.slice(0, 8)}…)`) : "")
|
|
83
|
+
: paint("yellow", "logged out");
|
|
84
|
+
write(" " + row("auth", authStr) + "\n");
|
|
85
|
+
const agreementStr = s.auth.agreementAccepted
|
|
86
|
+
? paint("green", "accepted")
|
|
87
|
+
: paint("yellow", "not accepted");
|
|
88
|
+
write(" " + row("agreement", agreementStr) + "\n");
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
write(" " + paint("dim", "(awaiting status…)") + "\n");
|
|
92
|
+
}
|
|
93
|
+
write("\n");
|
|
94
|
+
// Host panel
|
|
95
|
+
write(panelTitle("Host") + "\n");
|
|
96
|
+
if (state.status) {
|
|
97
|
+
const s = state.status;
|
|
98
|
+
const hostName = s.config.hostName ?? paint("dim", "(unset)");
|
|
99
|
+
const hostId = s.config.hostId ? `${s.config.hostId.slice(0, 8)}…` : paint("dim", "(unset)");
|
|
100
|
+
write(" " + row("name", hostName) + "\n");
|
|
101
|
+
write(" " + row("host id", paint("gray", hostId)) + "\n");
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
write(" " + paint("dim", "(awaiting status…)") + "\n");
|
|
105
|
+
}
|
|
106
|
+
write("\n");
|
|
107
|
+
// Model panel
|
|
108
|
+
write(panelTitle("Model") + "\n");
|
|
109
|
+
if (state.models?.loaded) {
|
|
110
|
+
const m = state.models.loaded;
|
|
111
|
+
write(" " + row("loaded", paint(["bold", "green"], m.modelName)) + "\n");
|
|
112
|
+
write(" " +
|
|
113
|
+
row("gpu layers", String(m.gpuLayers)) +
|
|
114
|
+
paint("dim", " ") +
|
|
115
|
+
row("active conv.", paint("cyan", String(m.activeContexts)), 14) +
|
|
116
|
+
"\n");
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
write(" " +
|
|
120
|
+
paint("dim", "(no model loaded — ") +
|
|
121
|
+
paint(["bold", "cyan"], "peerllm-host models download") +
|
|
122
|
+
paint("dim", " to fetch one)") +
|
|
123
|
+
"\n");
|
|
124
|
+
}
|
|
125
|
+
write("\n");
|
|
126
|
+
// Resources panel
|
|
127
|
+
const barWidth = Math.max(20, Math.min(40, cols - 40));
|
|
128
|
+
write(panelTitle("Resources") + "\n");
|
|
129
|
+
write(" " +
|
|
130
|
+
row("CPU", bar(state.cpuFraction, barWidth, "cyan")) +
|
|
131
|
+
paint("dim", ` ${(state.cpuFraction * 100).toFixed(0)}%`) +
|
|
132
|
+
"\n");
|
|
133
|
+
write(" " +
|
|
134
|
+
row("RAM", bar(state.ramFraction, barWidth, "magenta")) +
|
|
135
|
+
paint("dim", ` ${(state.ramFraction * 100).toFixed(0)}%`) +
|
|
136
|
+
"\n");
|
|
137
|
+
// Sparkline: CPU% over the last MAX_CPU_SAMPLES ticks
|
|
138
|
+
const sparkWidth = Math.min(MAX_CPU_SAMPLES, Math.max(20, cols - 20));
|
|
139
|
+
const padded = padSparkline(state.cpuSamples, sparkWidth);
|
|
140
|
+
write(" " + row("trend (60s)", sparkline(padded, "cyan")) + "\n");
|
|
141
|
+
write("\n");
|
|
142
|
+
// Logs panel (tails recent log lines if any have arrived from the daemon)
|
|
143
|
+
write(panelTitle("Recent activity") + "\n");
|
|
144
|
+
if (state.logs.length === 0) {
|
|
145
|
+
write(" " + paint("dim", "(no recent events — host idle)") + "\n");
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
for (const l of state.logs.slice(-MAX_LOG_LINES)) {
|
|
149
|
+
write(" " + formatLog(l, cols - 4) + "\n");
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
write("\n");
|
|
153
|
+
// Help bar
|
|
154
|
+
write(panelDivider(Math.min(cols, 60)) + "\n");
|
|
155
|
+
write(" " +
|
|
156
|
+
keyHint("q", "quit") +
|
|
157
|
+
keyHint("r", "refresh now") +
|
|
158
|
+
keyHint("l", "clear logs") +
|
|
159
|
+
keyHint("?", "help") +
|
|
160
|
+
"\n");
|
|
161
|
+
}
|
|
162
|
+
function padSparkline(values, width) {
|
|
163
|
+
if (values.length >= width)
|
|
164
|
+
return values.slice(-width);
|
|
165
|
+
const pad = new Array(width - values.length).fill(0);
|
|
166
|
+
return pad.concat(values);
|
|
167
|
+
}
|
|
168
|
+
function keyHint(key, label) {
|
|
169
|
+
return paint(["cyan", "bold"], `[${key}]`) + paint("dim", ` ${label} `);
|
|
170
|
+
}
|
|
171
|
+
function formatLog(l, maxWidth) {
|
|
172
|
+
const levelColors = {
|
|
173
|
+
debug: "gray",
|
|
174
|
+
info: "cyan",
|
|
175
|
+
warn: "yellow",
|
|
176
|
+
error: "red",
|
|
177
|
+
};
|
|
178
|
+
const color = levelColors[l.level] ?? "gray";
|
|
179
|
+
const ts = l.timestamp ? new Date(l.timestamp).toLocaleTimeString() : "";
|
|
180
|
+
const prefix = paint("dim", ts + " ") + paint(color, l.level.padEnd(5));
|
|
181
|
+
const visiblePrefixLen = ts.length + 1 + 5;
|
|
182
|
+
return prefix + " " + truncate(l.message, Math.max(0, maxWidth - visiblePrefixLen - 1));
|
|
183
|
+
}
|
|
184
|
+
export function makeDashboardCommand() {
|
|
185
|
+
return new Command("dashboard")
|
|
186
|
+
.description("Interactive TUI: watch live host status, model, and traffic")
|
|
187
|
+
.option("--config-dir <path>", "override config directory")
|
|
188
|
+
.option("--interval <ms>", "refresh interval in milliseconds (default 1000)", "1000")
|
|
189
|
+
.action(async (opts) => {
|
|
190
|
+
const intervalMs = Math.max(250, Number.parseInt(opts.interval ?? "1000", 10) || 1000);
|
|
191
|
+
const paths = resolvePaths({ configDirOverride: opts.configDir });
|
|
192
|
+
const client = new IpcClient(paths.ipcEndpoint);
|
|
193
|
+
try {
|
|
194
|
+
await client.connect();
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
if (err instanceof DaemonUnreachableError) {
|
|
198
|
+
printError("daemon is not running", {
|
|
199
|
+
hint: "Start it with: peerllm-host start",
|
|
200
|
+
});
|
|
201
|
+
process.exit(EXIT.daemonNotRunning);
|
|
202
|
+
}
|
|
203
|
+
printError(err.message);
|
|
204
|
+
process.exit(EXIT.runtimeError);
|
|
205
|
+
}
|
|
206
|
+
const tui = enterTui();
|
|
207
|
+
const state = {
|
|
208
|
+
cpuSamples: [],
|
|
209
|
+
ramFraction: 0,
|
|
210
|
+
cpuFraction: 0,
|
|
211
|
+
logs: [],
|
|
212
|
+
};
|
|
213
|
+
let prevCpu = readCpuSnapshot();
|
|
214
|
+
// Subscribe to daemon events for live updates between polls.
|
|
215
|
+
client.onNotification((method, params) => {
|
|
216
|
+
const name = method.startsWith("event:") ? method.slice("event:".length) : method;
|
|
217
|
+
if (name === "log") {
|
|
218
|
+
const p = params;
|
|
219
|
+
if (p && typeof p.message === "string")
|
|
220
|
+
state.logs.push(p);
|
|
221
|
+
while (state.logs.length > MAX_LOG_LINES * 2)
|
|
222
|
+
state.logs.shift();
|
|
223
|
+
}
|
|
224
|
+
else if (name === "orchestratorStatus") {
|
|
225
|
+
// Force an immediate poll on connection-state changes.
|
|
226
|
+
void pollOnce();
|
|
227
|
+
}
|
|
228
|
+
else if (name === "hostStats") {
|
|
229
|
+
const p = params;
|
|
230
|
+
if (typeof p.cpuPercent === "number") {
|
|
231
|
+
state.cpuFraction = Math.max(0, Math.min(1, p.cpuPercent / 100));
|
|
232
|
+
state.cpuSamples.push(state.cpuFraction);
|
|
233
|
+
while (state.cpuSamples.length > MAX_CPU_SAMPLES)
|
|
234
|
+
state.cpuSamples.shift();
|
|
235
|
+
}
|
|
236
|
+
if (typeof p.ramUsedMB === "number" && typeof p.ramTotalMB === "number" && p.ramTotalMB > 0) {
|
|
237
|
+
state.ramFraction = Math.max(0, Math.min(1, p.ramUsedMB / p.ramTotalMB));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
try {
|
|
242
|
+
await client.call("events.subscribe", { filter: "*" });
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
// Non-fatal: events are a nice-to-have; polling still works.
|
|
246
|
+
}
|
|
247
|
+
const pollOnce = async () => {
|
|
248
|
+
try {
|
|
249
|
+
const [status, models] = await Promise.all([
|
|
250
|
+
client.call(METHOD.getStatus),
|
|
251
|
+
client.call(METHOD.modelsState),
|
|
252
|
+
]);
|
|
253
|
+
state.status = status;
|
|
254
|
+
state.models = models;
|
|
255
|
+
state.lastError = undefined;
|
|
256
|
+
}
|
|
257
|
+
catch (err) {
|
|
258
|
+
state.lastError = `IPC: ${err.message}`;
|
|
259
|
+
}
|
|
260
|
+
state.lastUpdated = new Date();
|
|
261
|
+
};
|
|
262
|
+
const sampleLocal = () => {
|
|
263
|
+
const next = readCpuSnapshot();
|
|
264
|
+
const totalDelta = next.total - prevCpu.total;
|
|
265
|
+
const idleDelta = next.idle - prevCpu.idle;
|
|
266
|
+
prevCpu = next;
|
|
267
|
+
if (totalDelta > 0) {
|
|
268
|
+
state.cpuFraction = Math.max(0, Math.min(1, 1 - idleDelta / totalDelta));
|
|
269
|
+
}
|
|
270
|
+
state.cpuSamples.push(state.cpuFraction);
|
|
271
|
+
while (state.cpuSamples.length > MAX_CPU_SAMPLES)
|
|
272
|
+
state.cpuSamples.shift();
|
|
273
|
+
const total = totalmem();
|
|
274
|
+
const free = freemem();
|
|
275
|
+
if (total > 0)
|
|
276
|
+
state.ramFraction = Math.max(0, Math.min(1, 1 - free / total));
|
|
277
|
+
};
|
|
278
|
+
const tick = async () => {
|
|
279
|
+
sampleLocal();
|
|
280
|
+
await pollOnce();
|
|
281
|
+
render(state, tui.cols);
|
|
282
|
+
};
|
|
283
|
+
// Initial paint, then steady cadence.
|
|
284
|
+
await tick();
|
|
285
|
+
const timer = setInterval(() => void tick(), intervalMs);
|
|
286
|
+
const exit = (code) => {
|
|
287
|
+
clearInterval(timer);
|
|
288
|
+
client.close();
|
|
289
|
+
tui.teardown();
|
|
290
|
+
write(moveTo(1, 1));
|
|
291
|
+
process.exit(code);
|
|
292
|
+
};
|
|
293
|
+
tui.onKey((key) => {
|
|
294
|
+
if (key.name === "q" || (key.ctrl && key.name === "c")) {
|
|
295
|
+
exit(EXIT.ok);
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
if (key.name === "r") {
|
|
299
|
+
void tick();
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
if (key.name === "l") {
|
|
303
|
+
state.logs = [];
|
|
304
|
+
render(state, tui.cols);
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
if (key.name === "?") {
|
|
308
|
+
state.lastError = "keys: q=quit · r=refresh · l=clear logs · ?=this help";
|
|
309
|
+
render(state, tui.cols);
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
// Park forever (timer + key handler drive the rest).
|
|
313
|
+
await new Promise(() => { });
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/models.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/models.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAydpC,wBAAgB,iBAAiB,IAAI,OAAO,CAS3C"}
|