peerllm-host-cli 2.6.2 → 2.7.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/CHANGELOG.md ADDED
@@ -0,0 +1,70 @@
1
+ # Changelog
2
+
3
+ All notable changes to the PeerLLM host CLI are documented here. This project follows
4
+ [Semantic Versioning](https://semver.org/).
5
+
6
+ ## [2.7.0]
7
+
8
+ ### Added
9
+
10
+ - **Hybrid Mode — reach the PeerLLM network from your local server.** The local OpenAI-compatible
11
+ REST API can now relay any request it can't serve on-device to the decentralized network, so a
12
+ single endpoint (`http://127.0.0.1:3000/v1`) reaches both your local models and the network. Manage
13
+ it with the new `peerllm-host hybrid` command:
14
+ - `peerllm-host hybrid mode <off|automatic|on>` — **off** (local only — the default), **automatic**
15
+ (serve locally, fall back to the network when this machine can't), or **on** (route by model name).
16
+ - `peerllm-host hybrid key <api-key>` — set the network key; `--clear` removes it. The key can come
17
+ from a personal, company, or shared-group account, and no login is required.
18
+ - `peerllm-host hybrid status` — show the current mode and whether a key is set.
19
+
20
+ Local always wins a name collision, and you can force either side with a `local/` or `network/`
21
+ model prefix. Every response carries an `X-PeerLLM-Served: local` or `network` header. A running
22
+ server applies mode and key changes on the next request — no restart needed.
23
+
24
+ - **`peerllm-host changelog` — What's New at the command line.** Prints the release notes for each
25
+ version: `peerllm-host changelog` shows the latest, `--all` shows every release, and
26
+ `peerllm-host changelog <version>` shows a specific one.
27
+
28
+ ## [2.6.2]
29
+
30
+ ### Added
31
+
32
+ - **The host now authenticates its connection to the network.** When the daemon connects to the
33
+ orchestrator it proves ownership with your account's signed token, verified once at connect time
34
+ (not on every request). This is a non-breaking, backwards-compatible security hardening — existing
35
+ hosts keep working — that stops anyone from impersonating a host by guessing its ID.
36
+
37
+ ## [2.6.1]
38
+
39
+ ### Fixed
40
+
41
+ - **A rejected sign-in no longer locks the host out for good.** Certain transient authentication
42
+ failures could delete the stored refresh token and strand the daemon at the login wall; only a
43
+ genuine "your session is invalid" (401) now clears it, and everything else self-heals.
44
+
45
+ ## [2.6.0]
46
+
47
+ ### Added
48
+
49
+ - **`peerllm-host start offline` — run as a standalone local LLM runner, no account required.**
50
+ Starting with `offline` (or `--offline`) skips login, host registration, the agreement, and
51
+ the subscription check entirely, and never connects to the orchestrator. The daemon comes up
52
+ serving the local OpenAI-compatible REST API immediately (enabled automatically in this mode),
53
+ so you get a working local endpoint with a single command and no prompts. Network pollers
54
+ (host/network/earnings stats, catalog, npm version check) are not started. `peerllm-host status`
55
+ shows a focused **Local Mode** view instead of network/auth fields. `peerllm-host restart`
56
+ transparently preserves Local Mode (so changing the REST port/key and restarting doesn't bounce
57
+ you to the login wall), and `restart offline` forces it. The REST port and API key are managed as
58
+ usual via `peerllm-host rest on --port <port> --rotate-key`. Run a plain `peerllm-host start` to
59
+ join the network as before.
60
+
61
+ ### Fixed
62
+
63
+ - **Host could silently drop off the network and never come back.** A host whose connection to
64
+ the orchestrator got stuck mid-reconnect would go invisible to the network with no crash, no
65
+ error, and a process that still looked perfectly healthy on the machine — in one case for over
66
+ 10 hours. The reconnect logic could only recover from a connection that *closed*, and this
67
+ failure never closed it. The CLI now watches whether its heartbeats are actually reaching the
68
+ orchestrator and, if none has for 3 minutes, tears down the wedged connection and builds a
69
+ fresh one. It also now recovers when the orchestrator is unreachable at startup instead of
70
+ giving up after the first attempt.
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function makeChangelogCommand(): Command;
3
+ //# sourceMappingURL=changelog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changelog.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/changelog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwEpC,wBAAgB,oBAAoB,IAAI,OAAO,CA0C9C"}
@@ -0,0 +1,101 @@
1
+ import { Command } from "commander";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { EXIT } from "../exit-codes.js";
6
+ import { paint } from "../tui.js";
7
+ // Locate the CHANGELOG.md shipped with the package. Walk up from this module: in the
8
+ // published package it sits at the package root (dist/cli/commands → up to the root).
9
+ function findChangelog() {
10
+ let dir = dirname(fileURLToPath(import.meta.url));
11
+ for (let i = 0; i < 7; i++) {
12
+ const candidate = join(dir, "CHANGELOG.md");
13
+ if (existsSync(candidate))
14
+ return candidate;
15
+ const parent = dirname(dir);
16
+ if (parent === dir)
17
+ break;
18
+ dir = parent;
19
+ }
20
+ return null;
21
+ }
22
+ // Split the markdown into release blocks keyed by "## [x]" headings.
23
+ function parseReleases(md) {
24
+ const releases = [];
25
+ let current = null;
26
+ for (const line of md.split(/\r?\n/)) {
27
+ const m = /^##\s+\[?([^\]]+?)\]?\s*(?:-.*)?$/.exec(line);
28
+ if (m && m[1]) {
29
+ current = { version: m[1].trim(), lines: [] };
30
+ releases.push(current);
31
+ }
32
+ else if (current) {
33
+ current.lines.push(line);
34
+ }
35
+ }
36
+ return releases;
37
+ }
38
+ // Inline markdown → terminal styling: **bold**, `code`, [text](url).
39
+ function fmtInline(s) {
40
+ return s
41
+ .replace(/\*\*(.+?)\*\*/g, (_, t) => paint("bold", t))
42
+ .replace(/\*([^*]+)\*/g, "$1") // strip single-asterisk italics (terminal italics are unreliable)
43
+ .replace(/`([^`]+)`/g, (_, t) => paint("cyan", t))
44
+ .replace(/\[([^\]]+)\]\(([^)]+)\)/g, (_, t, u) => `${t} (${paint("dim", u)})`);
45
+ }
46
+ function renderRelease(r) {
47
+ const out = [paint(["bold", "magenta"], `\n v${r.version}`)];
48
+ for (const raw of r.lines) {
49
+ const t = raw.trim();
50
+ if (!t) {
51
+ out.push("");
52
+ continue;
53
+ }
54
+ const sec = /^###\s+(.+)$/.exec(t);
55
+ if (sec && sec[1]) {
56
+ out.push(paint(["bold", "yellow"], ` ${sec[1].toUpperCase()}`));
57
+ continue;
58
+ }
59
+ const isBullet = /^-\s+/.test(t);
60
+ const body = fmtInline(t.replace(/^-\s+/, ""));
61
+ out.push(isBullet ? ` ${paint("dim", "•")} ${body}` : ` ${body}`);
62
+ }
63
+ return out.join("\n");
64
+ }
65
+ export function makeChangelogCommand() {
66
+ return new Command("changelog")
67
+ .description("Show what changed in each release (What's New)")
68
+ .argument("[version]", "show a specific version, e.g. 2.7.0")
69
+ .option("--all", "show the full changelog (every release)")
70
+ .action((versionArg, opts) => {
71
+ const file = findChangelog();
72
+ if (!file) {
73
+ process.stderr.write("Changelog is not available in this build.\n");
74
+ process.exit(EXIT.runtimeError);
75
+ }
76
+ const releases = parseReleases(readFileSync(file, "utf8"));
77
+ if (releases.length === 0) {
78
+ process.stderr.write("No releases found in the changelog.\n");
79
+ process.exit(EXIT.runtimeError);
80
+ }
81
+ if (versionArg) {
82
+ const want = versionArg.replace(/^v/i, "").trim();
83
+ const match = releases.find((r) => r.version === want || r.version.split(/[\s—-]/)[0] === want);
84
+ if (!match) {
85
+ process.stderr.write(`No changelog entry for '${versionArg}'. Available: ${releases.map((r) => r.version).join(", ")}\n`);
86
+ process.exit(EXIT.userError);
87
+ }
88
+ process.stdout.write(`${renderRelease(match)}\n`);
89
+ process.exit(EXIT.ok);
90
+ }
91
+ const toShow = opts.all ? releases : [releases[0]];
92
+ for (const r of toShow)
93
+ process.stdout.write(`${renderRelease(r)}\n`);
94
+ if (!opts.all && releases.length > 1) {
95
+ const older = releases.length - 1;
96
+ process.stdout.write(paint("dim", `\n ${older} older release${older === 1 ? "" : "s"} — run 'peerllm-host changelog --all' to see ${older === 1 ? "it" : "them"}.\n`));
97
+ }
98
+ process.exit(EXIT.ok);
99
+ });
100
+ }
101
+ //# sourceMappingURL=changelog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changelog.js","sourceRoot":"","sources":["../../../src/cli/commands/changelog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function makeHybridCommand(): Command;
3
+ //# sourceMappingURL=hybrid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/hybrid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2FpC,wBAAgB,iBAAiB,IAAI,OAAO,CAM3C"}
@@ -0,0 +1,92 @@
1
+ import { Command } from "commander";
2
+ import { EXIT } from "../exit-codes.js";
3
+ import { buildClientServices } from "../services.js";
4
+ const MODE_LABEL = {
5
+ off: "Off — local only, the network is never used",
6
+ auto: "Automatic — local first, fall back to the network when your machine can't serve it",
7
+ on: "On — route by model (local models run locally, network models use the network)",
8
+ };
9
+ function maskKey(k) {
10
+ if (!k)
11
+ return "(none)";
12
+ return k.length <= 12 ? "••••" : `${k.slice(0, 6)}••••${k.slice(-4)}`;
13
+ }
14
+ function printStatus(mode, key) {
15
+ process.stdout.write(`Hybrid Mode : ${MODE_LABEL[mode]}\n`);
16
+ process.stdout.write(`Network key : ${maskKey(key)}\n`);
17
+ if (mode !== "off" && !key) {
18
+ process.stdout.write(`\n⚠ This mode needs a network key. Add one:\n peerllm hybrid key <your-api-key>\n`);
19
+ process.stdout.write(` Get a key from the Hosts Portal (https://hosts.peerllm.com), or create an account at https://peerllm.com.\n`);
20
+ }
21
+ }
22
+ function normalizeMode(input) {
23
+ const v = input.trim().toLowerCase();
24
+ if (v === "off" || v === "local" || v === "disabled")
25
+ return "off";
26
+ if (v === "auto" || v === "automatic")
27
+ return "auto";
28
+ if (v === "on" || v === "enabled" || v === "network")
29
+ return "on";
30
+ return null;
31
+ }
32
+ function makeStatus() {
33
+ return new Command("status")
34
+ .description("Show the current Hybrid Mode and whether a network key is set")
35
+ .option("--config-dir <path>", "override config directory")
36
+ .action(async (opts) => {
37
+ const services = buildClientServices({ configDir: opts.configDir });
38
+ const cfg = await services.config.load();
39
+ printStatus((cfg.hybridMode ?? "off"), cfg.remoteApiKey);
40
+ process.exit(EXIT.ok);
41
+ });
42
+ }
43
+ function makeMode() {
44
+ return new Command("mode")
45
+ .description("Set how the local server may use the network: off | automatic | on")
46
+ .argument("<mode>", "off | automatic | on")
47
+ .option("--config-dir <path>", "override config directory")
48
+ .action(async (modeArg, opts) => {
49
+ const mode = normalizeMode(modeArg);
50
+ if (!mode) {
51
+ process.stderr.write(`Unknown mode '${modeArg}'. Use: off | automatic | on\n`);
52
+ process.exit(EXIT.userError);
53
+ }
54
+ const services = buildClientServices({ configDir: opts.configDir });
55
+ const updated = await services.config.update((c) => ({ ...c, hybridMode: mode }));
56
+ printStatus(mode, updated.remoteApiKey);
57
+ process.stdout.write(`\nA running local server applies this on the next request — no restart needed.\n`);
58
+ process.exit(EXIT.ok);
59
+ });
60
+ }
61
+ function makeKey() {
62
+ return new Command("key")
63
+ .description("Set (or clear) the PeerLLM network key used to relay to the network")
64
+ .argument("[key]", "the API key; omit with --clear to remove")
65
+ .option("--clear", "remove the stored network key")
66
+ .option("--config-dir <path>", "override config directory")
67
+ .action(async (keyArg, opts) => {
68
+ const services = buildClientServices({ configDir: opts.configDir });
69
+ if (opts.clear) {
70
+ const updated = await services.config.update((c) => ({ ...c, remoteApiKey: undefined }));
71
+ process.stdout.write("Network key cleared.\n");
72
+ printStatus((updated.hybridMode ?? "off"), undefined);
73
+ process.exit(EXIT.ok);
74
+ }
75
+ if (!keyArg || !keyArg.trim()) {
76
+ process.stderr.write("Provide a key, or use --clear to remove it.\n");
77
+ process.exit(EXIT.userError);
78
+ }
79
+ const updated = await services.config.update((c) => ({ ...c, remoteApiKey: keyArg.trim() }));
80
+ process.stdout.write("Network key saved.\n");
81
+ printStatus((updated.hybridMode ?? "off"), updated.remoteApiKey);
82
+ process.exit(EXIT.ok);
83
+ });
84
+ }
85
+ export function makeHybridCommand() {
86
+ return new Command("hybrid")
87
+ .description("Use the PeerLLM network from your local server (off / automatic / on + key)")
88
+ .addCommand(makeStatus())
89
+ .addCommand(makeMode())
90
+ .addCommand(makeKey());
91
+ }
92
+ //# sourceMappingURL=hybrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid.js","sourceRoot":"","sources":["../../../src/cli/commands/hybrid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAIrD,MAAM,UAAU,GAAyB;IACvC,GAAG,EAAE,6CAA6C;IAClD,IAAI,EAAE,oFAAoF;IAC1F,EAAE,EAAE,gFAAgF;CACrF,CAAC;AAEF,SAAS,OAAO,CAAC,CAAqB;IACpC,IAAI,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IACxB,OAAO,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,WAAW,CAAC,IAAU,EAAE,GAAuB;IACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sFAAsF,CAAC,CAAC;QAC7G,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gHAAgH,CAAC,CAAC;IACzI,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IACnE,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC;IACrD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAClE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,IAA4B,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzC,WAAW,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,KAAK,CAAS,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,oEAAoE,CAAC;SACjF,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;SAC1C,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,IAA4B,EAAE,EAAE;QAC9D,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,OAAO,gCAAgC,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAClF,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;QACzG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,OAAO;IACd,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;SACtB,WAAW,CAAC,qEAAqE,CAAC;SAClF,QAAQ,CAAC,OAAO,EAAE,0CAA0C,CAAC;SAC7D,MAAM,CAAC,SAAS,EAAE,+BAA+B,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,IAA6C,EAAE,EAAE;QAC1F,MAAM,QAAQ,GAAG,mBAAmB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YACzF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC/C,WAAW,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAS,EAAE,SAAS,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC7C,WAAW,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAS,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,6EAA6E,CAAC;SAC1F,UAAU,CAAC,UAAU,EAAE,CAAC;SACxB,UAAU,CAAC,QAAQ,EAAE,CAAC;SACtB,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3B,CAAC"}
package/dist/cli/index.js CHANGED
@@ -28,6 +28,14 @@ async function main() {
28
28
  const { makeRestCommand } = await import("./commands/rest.js");
29
29
  return makeRestCommand();
30
30
  })());
31
+ program.addCommand(await (async () => {
32
+ const { makeHybridCommand } = await import("./commands/hybrid.js");
33
+ return makeHybridCommand();
34
+ })());
35
+ program.addCommand(await (async () => {
36
+ const { makeChangelogCommand } = await import("./commands/changelog.js");
37
+ return makeChangelogCommand();
38
+ })());
31
39
  program.addCommand(await (async () => {
32
40
  const { makeLoginCommand } = await import("./commands/login.js");
33
41
  return makeLoginCommand();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type * as http from "node:http";
2
+ export interface RelayOptions {
3
+ orchestratorUrl: string;
4
+ apiKey: string;
5
+ path: string;
6
+ body: unknown;
7
+ stream: boolean;
8
+ res: http.ServerResponse;
9
+ }
10
+ /**
11
+ * Relays to the network and writes the response to `res`. Returns true once bytes have been
12
+ * committed to `res`. Throws only on a TRANSPORT failure before anything is written — so a caller
13
+ * in Automatic mode can still fall back after a failed local attempt without a half-written reply.
14
+ */
15
+ export declare function relayToNetwork(opts: RelayOptions): Promise<void>;
16
+ //# sourceMappingURL=hybrid-relay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid-relay.d.ts","sourceRoot":"","sources":["../../src/core/hybrid-relay.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCtE"}
@@ -0,0 +1,56 @@
1
+ // src/core/hybrid-relay.ts
2
+ //
3
+ // Hybrid Mode relay — forwards an OpenAI-compatible request from the local /v1 server out to the
4
+ // PeerLLM network (api.peerllm.com) using the stored network key, and pipes the response back
5
+ // verbatim (streaming or not). Stamps provenance so the caller always knows where it ran:
6
+ // X-PeerLLM-Served: network (+ the upstream X-LLooMA-Decider: host:<id> | centralized)
7
+ // The key is injected here, server-side — the client that hit localhost never sees it.
8
+ /**
9
+ * Relays to the network and writes the response to `res`. Returns true once bytes have been
10
+ * committed to `res`. Throws only on a TRANSPORT failure before anything is written — so a caller
11
+ * in Automatic mode can still fall back after a failed local attempt without a half-written reply.
12
+ */
13
+ export async function relayToNetwork(opts) {
14
+ const url = opts.orchestratorUrl.replace(/\/+$/, "") + opts.path;
15
+ const upstream = await fetch(url, {
16
+ method: "POST",
17
+ headers: { "Content-Type": "application/json", Authorization: `Bearer ${opts.apiKey}` },
18
+ body: JSON.stringify(opts.body),
19
+ });
20
+ // Provenance — set before writeHead so it survives the streaming path too.
21
+ opts.res.setHeader("X-PeerLLM-Served", "network");
22
+ const decider = upstream.headers.get("x-llooma-decider");
23
+ if (decider)
24
+ opts.res.setHeader("X-LLooMA-Decider", decider);
25
+ if (!upstream.ok) {
26
+ const errText = await upstream.text().catch(() => "");
27
+ opts.res.writeHead(upstream.status, { "Content-Type": "application/json" });
28
+ opts.res.end(errText || JSON.stringify({
29
+ error: { message: `Network relay failed (${upstream.status}).`, type: "server_error", code: "relay_failed" },
30
+ }));
31
+ return;
32
+ }
33
+ const contentType = upstream.headers.get("content-type")
34
+ ?? (opts.stream ? "text/event-stream" : "application/json");
35
+ opts.res.writeHead(200, opts.stream
36
+ ? { "Content-Type": contentType, "Cache-Control": "no-cache", Connection: "keep-alive" }
37
+ : { "Content-Type": contentType });
38
+ if (!upstream.body) {
39
+ opts.res.end();
40
+ return;
41
+ }
42
+ const reader = upstream.body.getReader();
43
+ try {
44
+ for (;;) {
45
+ const { done, value } = await reader.read();
46
+ if (done)
47
+ break;
48
+ if (value)
49
+ opts.res.write(Buffer.from(value));
50
+ }
51
+ }
52
+ finally {
53
+ opts.res.end();
54
+ }
55
+ }
56
+ //# sourceMappingURL=hybrid-relay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid-relay.js","sourceRoot":"","sources":["../../src/core/hybrid-relay.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,EAAE;AACF,iGAAiG;AACjG,8FAA8F;AAC9F,0FAA0F;AAC1F,2FAA2F;AAC3F,uFAAuF;AAavF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAkB;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IAEjE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE;QACvF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;KAChC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACzD,IAAI,OAAO;QAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAE7D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC;YACrC,KAAK,EAAE,EAAE,OAAO,EAAE,yBAAyB,QAAQ,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE;SAC7G,CAAC,CAAC,CAAC;QACJ,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;WACnD,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAC9D,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM;QACjC,CAAC,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE;QACxF,CAAC,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IAErC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,SAAS,CAAC;YACR,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAChB,IAAI,KAAK;gBAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ export type HybridMode = "off" | "auto" | "on";
2
+ export type RouteTarget = {
3
+ kind: "local";
4
+ model: string;
5
+ fallbackToNetwork: boolean;
6
+ } | {
7
+ kind: "network";
8
+ model: string;
9
+ } | {
10
+ kind: "unavailable";
11
+ model: string;
12
+ reason: string;
13
+ };
14
+ export interface RouteInput {
15
+ /** Model name exactly as requested — may carry a "local/" or "network/" prefix. */
16
+ requested: string;
17
+ /** Ids of models available locally right now (any case; a trailing ".gguf" is ignored). */
18
+ localModels: string[];
19
+ mode: HybridMode;
20
+ /** Whether a network API key is configured (required to relay). */
21
+ hasNetworkKey: boolean;
22
+ }
23
+ export declare function resolveRoute(input: RouteInput): RouteTarget;
24
+ //# sourceMappingURL=hybrid-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid-router.d.ts","sourceRoot":"","sources":["../../src/core/hybrid-router.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;AAE/C,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,MAAM,WAAW,UAAU;IACzB,mFAAmF;IACnF,SAAS,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,mEAAmE;IACnE,aAAa,EAAE,OAAO,CAAC;CACxB;AAoBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAgC3D"}
@@ -0,0 +1,61 @@
1
+ // src/core/hybrid-router.ts
2
+ //
3
+ // Hybrid Mode routing — the PURE decision for where a requested model should run:
4
+ // on this machine (local) or relayed to the PeerLLM network. No I/O, no HTTP — just
5
+ // the rule, so it is unit-tested as a table. See docs/hybrid-mode-design.md.
6
+ //
7
+ // Modes (user-chosen, default "off"):
8
+ // off — local only; the network is never used.
9
+ // on — deterministic route-by-model; a local failure just fails (no surprise hop).
10
+ // auto — like "on", but a LOCAL model that fails/OOMs falls back to the network
11
+ // (mechanical failure only — the resolver marks the target fallbackToNetwork).
12
+ //
13
+ // The collision rule (PRIVACY-FIRST, every mode): a bare model name that exists BOTH
14
+ // locally and on the network is served LOCALLY. Your machine is the default home for
15
+ // your data — nothing leaves it just because a network model shares a name.
16
+ //
17
+ // Explicit addressing (the escape hatch / the only way to reach a colliding model's
18
+ // network copy): "local/<model>" forces local, "network/<model>" forces the network.
19
+ /** Strip a directory prefix and a trailing ".gguf" so names compare on their basename. */
20
+ function normalize(name) {
21
+ const base = name.trim().replace(/\.gguf$/i, "");
22
+ return base.toLowerCase();
23
+ }
24
+ function parsePrefix(requested) {
25
+ const m = /^(local|network|peerllm)\/(.+)$/i.exec(requested.trim());
26
+ if (!m || !m[1] || !m[2])
27
+ return { model: requested, force: null };
28
+ const kw = m[1].toLowerCase();
29
+ return { model: m[2], force: kw === "local" ? "local" : "network" };
30
+ }
31
+ export function resolveRoute(input) {
32
+ const { model, force } = parsePrefix(input.requested);
33
+ const wanted = normalize(model);
34
+ const isLocal = input.localModels.some((m) => normalize(m) === wanted);
35
+ const networkUsable = input.mode !== "off" && input.hasNetworkKey;
36
+ // Explicit override always wins — it's the whole point of the prefix.
37
+ if (force === "local") {
38
+ return isLocal
39
+ ? { kind: "local", model, fallbackToNetwork: false }
40
+ : { kind: "unavailable", model, reason: `'${model}' is not available locally.` };
41
+ }
42
+ if (force === "network") {
43
+ if (input.mode === "off")
44
+ return { kind: "unavailable", model, reason: "The network is off. Turn on Automatic or On to use it." };
45
+ if (!input.hasNetworkKey)
46
+ return { kind: "unavailable", model, reason: "No network key. Add one to use the network." };
47
+ return { kind: "network", model };
48
+ }
49
+ // Bare name. Collision rule: local ALWAYS wins.
50
+ if (isLocal) {
51
+ // In Automatic, a local failure may fall back to the network (mechanical only).
52
+ return { kind: "local", model, fallbackToNetwork: input.mode === "auto" && input.hasNetworkKey };
53
+ }
54
+ // Not local. Reachable only through the network.
55
+ if (networkUsable)
56
+ return { kind: "network", model };
57
+ if (input.mode === "off")
58
+ return { kind: "unavailable", model, reason: `'${model}' isn't installed locally, and the network is off.` };
59
+ return { kind: "unavailable", model, reason: `'${model}' isn't installed locally, and no network key is set.` };
60
+ }
61
+ //# sourceMappingURL=hybrid-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid-router.js","sourceRoot":"","sources":["../../src/core/hybrid-router.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rest-server.d.ts","sourceRoot":"","sources":["../../src/daemon/rest-server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAgBtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,qBAAa,aAAa;IAMZ,OAAO,CAAC,QAAQ,CAAC,IAAI;IALjC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;gBAEpB,IAAI,EAAE,cAAc;IAEjD,OAAO,CAAC,WAAW;IAIb,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,SAAS,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;YAMjC,MAAM;YA6CN,cAAc;YASd,QAAQ;YA2BR,YAAY;YAgBZ,gBAAgB;IAwF9B,WAAW,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;CAUrD"}
1
+ {"version":3,"file":"rest-server.d.ts","sourceRoot":"","sources":["../../src/daemon/rest-server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAkBtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,qBAAa,aAAa;IAMZ,OAAO,CAAC,QAAQ,CAAC,IAAI;IALjC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;gBAEpB,IAAI,EAAE,cAAc;IAEjD,OAAO,CAAC,WAAW;IAIb,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,SAAS,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;YAMjC,MAAM;YA6CN,cAAc;YASd,QAAQ;YA2BR,YAAY;YAgBZ,gBAAgB;IAsI9B,WAAW,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;CAUrD"}
@@ -13,6 +13,8 @@ import * as os from "node:os";
13
13
  import { CapacityExceededError } from "../core/runner-pool.js";
14
14
  import { listModelsSync } from "../core/models-fs.js";
15
15
  import { getLogger } from "../core/logger.js";
16
+ import { resolveRoute } from "../core/hybrid-router.js";
17
+ import { relayToNetwork } from "../core/hybrid-relay.js";
16
18
  const MAX_BODY_BYTES = 10 * 1024 * 1024; // 10 MB
17
19
  export class RestApiServer {
18
20
  deps;
@@ -179,14 +181,51 @@ export class RestApiServer {
179
181
  return;
180
182
  }
181
183
  const cfg = await this.deps.config.load();
184
+ // ── Hybrid routing — local vs network, per the mode and the collision rule (local wins) ──
185
+ const route = resolveRoute({
186
+ requested: model,
187
+ localModels: listModelsSync(this.deps.paths, cfg),
188
+ mode: cfg.hybridMode ?? "off",
189
+ hasNetworkKey: Boolean(cfg.remoteApiKey),
190
+ });
191
+ if (route.kind === "unavailable") {
192
+ res.writeHead(404, { "Content-Type": "application/json" });
193
+ res.end(JSON.stringify({
194
+ error: { message: route.reason, type: "invalid_request_error", code: "model_unavailable" },
195
+ }));
196
+ return;
197
+ }
198
+ // Relay the ORIGINAL request (with the prefix-stripped model) out to the network. The key is
199
+ // injected here, server-side — the localhost client never holds it.
200
+ const relayPath = kind === "chat" ? "/v1/chat/completions" : "/v1/completions";
201
+ const doRelay = () => relayToNetwork({
202
+ orchestratorUrl: cfg.orchestratorUrl ?? "https://api.peerllm.com",
203
+ apiKey: cfg.remoteApiKey,
204
+ path: relayPath,
205
+ body: { ...parsed, model: route.model },
206
+ stream,
207
+ res,
208
+ });
209
+ if (route.kind === "network") {
210
+ await doRelay();
211
+ return;
212
+ }
213
+ // route.kind === "local" — serve on this machine. In Automatic, a local failure (capacity or a
214
+ // failed load/generation) falls back to the network, but only before any bytes are written.
215
+ res.setHeader("X-PeerLLM-Served", "local");
216
+ const canFallback = route.fallbackToNetwork;
182
217
  const convId = `rest-api-${kind}-${Date.now()}-${Math.random().toString(36).slice(2)}`;
183
218
  // Admit through the shared pool: warm fast-path, else single-flight cold load
184
219
  // with idle-LRU eviction. CapacityExceededError → 503 ("can't take more now").
185
220
  let runner;
186
221
  try {
187
- runner = await this.deps.pool.acquire(model.replace(/\.gguf$/i, ""), cfg);
222
+ runner = await this.deps.pool.acquire(route.model.replace(/\.gguf$/i, ""), cfg);
188
223
  }
189
224
  catch (err) {
225
+ if (canFallback && !res.headersSent) {
226
+ await doRelay();
227
+ return;
228
+ }
190
229
  if (err instanceof CapacityExceededError) {
191
230
  res.writeHead(503, { "Content-Type": "application/json" });
192
231
  res.end(JSON.stringify({
@@ -210,7 +249,7 @@ export class RestApiServer {
210
249
  const choices = kind === "chat"
211
250
  ? [{ delta: { content: token }, index: 0, finish_reason: null }]
212
251
  : [{ text: token, index: 0, logprobs: null, finish_reason: null }];
213
- res.write(`data: ${JSON.stringify({ id: `${idPrefix}-${this.unixSeconds()}`, object: objStream, created: this.unixSeconds(), model, choices })}\n\n`);
252
+ res.write(`data: ${JSON.stringify({ id: `${idPrefix}-${this.unixSeconds()}`, object: objStream, created: this.unixSeconds(), model: route.model, choices })}\n\n`);
214
253
  }, options);
215
254
  res.write("data: [DONE]\n\n");
216
255
  res.end();
@@ -225,13 +264,20 @@ export class RestApiServer {
225
264
  id: `${idPrefix}-${this.unixSeconds()}`,
226
265
  object: objFinal,
227
266
  created: this.unixSeconds(),
228
- model,
267
+ model: route.model,
229
268
  choices,
230
269
  usage: { prompt_tokens: promptTokens, completion_tokens: completionTokens, total_tokens: promptTokens + completionTokens },
231
270
  }));
232
271
  }
233
272
  }
234
273
  catch (err) {
274
+ // Local generation failed. In Automatic, fall back to the network if nothing was written yet.
275
+ if (canFallback && !res.headersSent) {
276
+ getLogger().info(`rest: local '${route.model}' failed; Automatic fallback to network`);
277
+ runner.clearConversation(convId);
278
+ await doRelay();
279
+ return;
280
+ }
235
281
  getLogger().error(`rest: ${kind} generation error: ${err.message}`);
236
282
  if (!res.headersSent) {
237
283
  res.writeHead(500, { "Content-Type": "application/json" });
@@ -1 +1 @@
1
- {"version":3,"file":"rest-server.js","sourceRoot":"","sources":["../../src/daemon/rest-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rest-server.js","sourceRoot":"","sources":["../../src/daemon/rest-server.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,13 @@ export interface HostConfig {
30
30
  coexistenceEnabled?: boolean;
31
31
  /** LLooMA 2.0: when false, the host serves chat-only and opts out of agentic (tool-calling) traffic — heavier/longer load when on. Default true (opt-out). */
32
32
  agenticEnabled?: boolean;
33
+ /** How the local server may use the network: "off" local-only (default), "auto" local-first with
34
+ * failure fallback, "on" route-by-model. Independent of whether a key is present. */
35
+ hybridMode?: "off" | "auto" | "on";
36
+ /** The PeerLLM network key. THE SAME key Remote Chat / local-chat use to switch local→remote —
37
+ * Hybrid Mode reuses it, it is not a separate credential. Can come from anywhere (personal /
38
+ * enterprise / group). Stored locally; injected server-side on relay. */
39
+ remoteApiKey?: string;
33
40
  /** Scheduler runs. Default true. */
34
41
  recycleEnabled?: boolean;
35
42
  /** Log "would recycle" only, no teardown. Default true (safe rollout). */
@@ -1 +1 @@
1
- {"version":3,"file":"config-types.d.ts","sourceRoot":"","sources":["../../src/shared/config-types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,UAAU,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,YAAY,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mGAAmG;IACnG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oGAAoG;IACpG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sHAAsH;IACtH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,8JAA8J;IAC9J,cAAc,CAAC,EAAE,OAAO,CAAC;IAIzB,oCAAoC;IACpC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oEAAoE;IACpE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,0EAA0E;IAC1E,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,4EAA4E;IAC5E,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,0DAA0D;IAC1D,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,aAAa,IAAI,UAAU,CAa1C"}
1
+ {"version":3,"file":"config-types.d.ts","sourceRoot":"","sources":["../../src/shared/config-types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,UAAU,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,YAAY,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mGAAmG;IACnG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oGAAoG;IACpG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sHAAsH;IACtH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,8JAA8J;IAC9J,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB;0FACsF;IACtF,UAAU,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IACnC;;8EAE0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IAItB,oCAAoC;IACpC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oEAAoE;IACpE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,0EAA0E;IAC1E,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,4EAA4E;IAC5E,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,0DAA0D;IAC1D,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,aAAa,IAAI,UAAU,CAc1C"}
@@ -11,6 +11,7 @@ export function defaultConfig() {
11
11
  capacityOffer: 0.8,
12
12
  coexistenceEnabled: true,
13
13
  agenticEnabled: true,
14
+ hybridMode: "off",
14
15
  };
15
16
  }
16
17
  //# sourceMappingURL=config-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-types.js","sourceRoot":"","sources":["../../src/shared/config-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAoDvC,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,aAAa,EAAE,qBAAqB;QACpC,UAAU,EAAE,KAAK;QACjB,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACzC,eAAe,EAAE,yBAAyB;QAC1C,iBAAiB,EAAE,KAAK;QACxB,cAAc,EAAE,IAAI;QACpB,WAAW,EAAE,SAAS;QACtB,aAAa,EAAE,GAAG;QAClB,kBAAkB,EAAE,IAAI;QACxB,cAAc,EAAE,IAAI;KACrB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config-types.js","sourceRoot":"","sources":["../../src/shared/config-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AA6DvC,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,aAAa,EAAE,qBAAqB;QACpC,UAAU,EAAE,KAAK;QACjB,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACzC,eAAe,EAAE,yBAAyB;QAC1C,iBAAiB,EAAE,KAAK;QACxB,cAAc,EAAE,IAAI;QACpB,WAAW,EAAE,SAAS;QACtB,aAAa,EAAE,GAAG;QAClB,kBAAkB,EAAE,IAAI;QACxB,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,KAAK;KAClB,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peerllm-host-cli",
3
- "version": "2.6.2",
3
+ "version": "2.7.0",
4
4
  "description": "Command-line PeerLLM host: serve decentralized AI compute from a headless machine.",
5
5
  "author": {
6
6
  "name": "Hassan Habib",
@@ -41,6 +41,7 @@
41
41
  "dist/",
42
42
  "templates/",
43
43
  "README.md",
44
+ "CHANGELOG.md",
44
45
  "LICENSE"
45
46
  ],
46
47
  "scripts": {