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.
@@ -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,3 @@
1
+ import { Command } from "commander";
2
+ export declare function makeDashboardCommand(): Command;
3
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -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;AAoOpC,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C"}
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"}