llm-relay 0.52.0 → 0.53.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/availability-snapshot.js +5 -4
- package/dist/availability-snapshot.js.map +1 -1
- package/dist/availability.d.ts +21 -1
- package/dist/availability.js +45 -4
- package/dist/availability.js.map +1 -1
- package/dist/breaker-persistence.d.ts +39 -0
- package/dist/breaker-persistence.js +166 -0
- package/dist/breaker-persistence.js.map +1 -0
- package/dist/candidates.d.ts +7 -1
- package/dist/candidates.js.map +1 -1
- package/dist/circuit-breaker.d.ts +44 -0
- package/dist/circuit-breaker.js +91 -0
- package/dist/circuit-breaker.js.map +1 -1
- package/dist/cli.d.ts +23 -0
- package/dist/cli.js +152 -9
- package/dist/cli.js.map +1 -1
- package/dist/ping/metrics.d.ts +25 -1
- package/dist/ping/metrics.js +36 -9
- package/dist/ping/metrics.js.map +1 -1
- package/dist/quota-demotion.d.ts +10 -8
- package/dist/quota-demotion.js +23 -9
- package/dist/quota-demotion.js.map +1 -1
- package/dist/server.js +14 -0
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/skills/llm-relay/SKILL.md +26 -0
package/dist/circuit-breaker.js
CHANGED
|
@@ -278,6 +278,7 @@ export class CircuitBreaker {
|
|
|
278
278
|
if (state.pings.length > MAX_PING_HISTORY)
|
|
279
279
|
state.pings.shift();
|
|
280
280
|
if (outcome.ok) {
|
|
281
|
+
const wasCooling = state.cooldownUntil > now;
|
|
281
282
|
state.consecutiveFailures = 0;
|
|
282
283
|
state.cooldownUntil = 0;
|
|
283
284
|
state.cooldownSource = null;
|
|
@@ -286,6 +287,10 @@ export class CircuitBreaker {
|
|
|
286
287
|
state.credentialFailures = 0;
|
|
287
288
|
state.credentialFaultUntil = 0;
|
|
288
289
|
delete state.lastCredentialStatus;
|
|
290
|
+
// A success RETRACTS a persisted cooldown, so the file must be rewritten too. Skipping the
|
|
291
|
+
// notify when nothing was cooling keeps a healthy relay from writing on every request.
|
|
292
|
+
if (wasCooling)
|
|
293
|
+
this.notifyCoolingChanged();
|
|
289
294
|
return;
|
|
290
295
|
}
|
|
291
296
|
state.consecutiveFailures += 1;
|
|
@@ -322,6 +327,10 @@ export class CircuitBreaker {
|
|
|
322
327
|
state.cooldownUntil = now + DEFAULT_COOLDOWN_MS;
|
|
323
328
|
state.cooldownSource = "default";
|
|
324
329
|
}
|
|
330
|
+
// One notify for the whole ladder above, whichever branch set the cooldown. A failure that
|
|
331
|
+
// set none (below the trip threshold, no Retry-After) leaves nothing new to persist.
|
|
332
|
+
if (state.cooldownUntil > now)
|
|
333
|
+
this.notifyCoolingChanged();
|
|
325
334
|
}
|
|
326
335
|
/** Retain a fresh axis/period tuple without discarding another axis from an earlier response. */
|
|
327
336
|
recordQuotaObservations(target, observations) {
|
|
@@ -402,6 +411,10 @@ export class CircuitBreaker {
|
|
|
402
411
|
}
|
|
403
412
|
breakerCells.sort(compareClearedCells);
|
|
404
413
|
credentialFaults.sort(compareClearedCells);
|
|
414
|
+
// `llm-relay cooldowns clear` must reach the FILE too. Without this a cleared cooldown would
|
|
415
|
+
// come back on the next restart, which is exactly the state the operator just retracted.
|
|
416
|
+
if (breakerCells.length > 0)
|
|
417
|
+
this.notifyCoolingChanged();
|
|
405
418
|
return { breakerCells, credentialFaults };
|
|
406
419
|
}
|
|
407
420
|
/** Exact-cell credential fault only. */
|
|
@@ -429,6 +442,7 @@ export class CircuitBreaker {
|
|
|
429
442
|
return; // an existing longer cooldown keeps its own source
|
|
430
443
|
state.cooldownUntil = until;
|
|
431
444
|
state.cooldownSource = "quota";
|
|
445
|
+
this.notifyCoolingChanged();
|
|
432
446
|
}
|
|
433
447
|
/** Active backend attempts for one credential slot across all of its deployments. */
|
|
434
448
|
inFlightCredential(credentialId) {
|
|
@@ -442,6 +456,83 @@ export class CircuitBreaker {
|
|
|
442
456
|
getAllStates() {
|
|
443
457
|
return this.states;
|
|
444
458
|
}
|
|
459
|
+
/**
|
|
460
|
+
* The cooling half of every cell that is still cooling, for `breaker-persistence.ts`.
|
|
461
|
+
*
|
|
462
|
+
* Pure and IO-free on purpose: this module holds no file handles, so persistence stays a
|
|
463
|
+
* separate concern that a bare programmatic proxy can simply not install. Cells that are not
|
|
464
|
+
* cooling are omitted rather than written as empty rows.
|
|
465
|
+
*/
|
|
466
|
+
exportCooldowns(now = Date.now()) {
|
|
467
|
+
const rows = [];
|
|
468
|
+
for (const state of this.states.values()) {
|
|
469
|
+
if (state.cooldownUntil <= now)
|
|
470
|
+
continue;
|
|
471
|
+
rows.push({
|
|
472
|
+
provider: state.target.provider,
|
|
473
|
+
model: state.target.model,
|
|
474
|
+
kind: state.target.kind,
|
|
475
|
+
credentialId: state.target.credentialId,
|
|
476
|
+
...(state.target.base === undefined ? {} : { base: state.target.base }),
|
|
477
|
+
cooldownUntil: state.cooldownUntil,
|
|
478
|
+
cooldownSource: state.cooldownSource,
|
|
479
|
+
unexplained429s: state.unexplained429s,
|
|
480
|
+
...(state.lastStatus === undefined ? {} : { lastStatus: state.lastStatus }),
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
return rows;
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Re-apply persisted cooling rows, returning how many were applied.
|
|
487
|
+
*
|
|
488
|
+
* ⚠ NEVER overwrites a cooldown this process has already learned. A restore runs at startup, but
|
|
489
|
+
* making it defensive costs nothing and means a late or repeated call cannot shorten or extend
|
|
490
|
+
* live state — the same rule `recordQuotaCooldown` follows ("a quota demotion never SHORTENS
|
|
491
|
+
* someone else's cooldown"). Rows at or before `now` are already excluded by
|
|
492
|
+
* `loadBreakerCooldowns`; the check is repeated here so a direct caller cannot bypass it.
|
|
493
|
+
*/
|
|
494
|
+
restoreCooldowns(rows, now = Date.now()) {
|
|
495
|
+
let applied = 0;
|
|
496
|
+
for (const row of rows) {
|
|
497
|
+
if (row.cooldownUntil <= now)
|
|
498
|
+
continue;
|
|
499
|
+
const target = {
|
|
500
|
+
provider: row.provider,
|
|
501
|
+
model: row.model,
|
|
502
|
+
kind: row.kind,
|
|
503
|
+
credentialId: row.credentialId,
|
|
504
|
+
...(row.base === undefined ? {} : { base: row.base }),
|
|
505
|
+
};
|
|
506
|
+
const state = this.getOrCreate(target);
|
|
507
|
+
if (state.cooldownUntil > now)
|
|
508
|
+
continue;
|
|
509
|
+
state.cooldownUntil = row.cooldownUntil;
|
|
510
|
+
state.cooldownSource = row.cooldownSource;
|
|
511
|
+
state.unexplained429s = row.unexplained429s;
|
|
512
|
+
if (row.lastStatus !== undefined)
|
|
513
|
+
state.lastStatus = row.lastStatus;
|
|
514
|
+
applied += 1;
|
|
515
|
+
}
|
|
516
|
+
return applied;
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* Register the persistence listener. At most one: a second install would double every write,
|
|
520
|
+
* and there is exactly one file.
|
|
521
|
+
*/
|
|
522
|
+
onCoolingChanged(listener) {
|
|
523
|
+
this.#coolingChanged = listener;
|
|
524
|
+
}
|
|
525
|
+
/** Fired wherever cooling state changes; a no-op until persistence is installed. */
|
|
526
|
+
#coolingChanged = null;
|
|
527
|
+
notifyCoolingChanged() {
|
|
528
|
+
// Never let a persistence failure reach the request path — this runs inside outcome recording.
|
|
529
|
+
try {
|
|
530
|
+
this.#coolingChanged?.();
|
|
531
|
+
}
|
|
532
|
+
catch {
|
|
533
|
+
/* best-effort persistence */
|
|
534
|
+
}
|
|
535
|
+
}
|
|
445
536
|
/** Deployment measurement merges timestamp-sorted pings without inflating confidence. */
|
|
446
537
|
getDeploymentMeasurement(deployment) {
|
|
447
538
|
const cells = [...this.states.values()].filter((state) => sameDeployment(state.target, deployment) && state.pings.length > 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../src/circuit-breaker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../src/circuit-breaker.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -9,8 +9,31 @@ export declare function argValue(...flags: string[]): string | undefined;
|
|
|
9
9
|
export declare function hasFlag(...flags: string[]): boolean;
|
|
10
10
|
/** Extract non-flag positional arguments from an argv array, skipping flags and their values. */
|
|
11
11
|
export declare function getPositionalArgs(argv?: string[]): string[];
|
|
12
|
+
/**
|
|
13
|
+
* The shipped template, exposed for `test/first-run.test.ts`.
|
|
14
|
+
*
|
|
15
|
+
* A test that rebuilt this object would be testing itself: the defect being pinned was that the
|
|
16
|
+
* SHIPPED bytes routed `claude-*` to a free pool while three user-facing documents said Anthropic.
|
|
17
|
+
* Only the real constant can observe that.
|
|
18
|
+
*/
|
|
19
|
+
export declare const DEFAULT_CONFIG_TEMPLATE_FOR_TEST: string;
|
|
12
20
|
export { splitSpec };
|
|
13
21
|
export declare function resolveConfigPath(): string;
|
|
22
|
+
/** The first-run marker file, beside `config.json` in whichever config dir won. */
|
|
23
|
+
export declare const FIRST_RUN_MARKER = "first-run";
|
|
24
|
+
/** Is the first-run routing question still unanswered? Absent file ⇒ no. Never throws. */
|
|
25
|
+
export declare function firstRunPending(configDir?: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Tell whoever is reading that the first-run routing question is still open.
|
|
28
|
+
*
|
|
29
|
+
* ⚠ STDERR, never stdout. `routing show` and `offload status` are JSON surfaces that scripts and
|
|
30
|
+
* agents parse; a synthetic key inside `cfg.routing` would also be a lie about the config, since
|
|
31
|
+
* nothing in the file says this. A notice beside the JSON reaches a human and an agent both,
|
|
32
|
+
* and breaks no parser.
|
|
33
|
+
*/
|
|
34
|
+
export declare function printFirstRunNotice(configDir?: string): void;
|
|
35
|
+
/** Record that the operator has been asked and has answered. Idempotent; never throws. */
|
|
36
|
+
export declare function clearFirstRun(configDir?: string): boolean;
|
|
14
37
|
/**
|
|
15
38
|
* Merge every credential source into the environment, once per process, before anything reads a
|
|
16
39
|
* key or expands a `${ENV}` in the config. Already-set variables always win, at every layer.
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { relayStatePath } from "./state-paths.js";
|
|
3
3
|
import { isRecord } from "./json-shape.js";
|
|
4
|
-
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { join } from "node:path";
|
|
6
6
|
import { tmpdir } from "node:os";
|
|
7
7
|
import { spawn } from "node:child_process";
|
|
@@ -178,7 +178,9 @@ ${formatTextTable([
|
|
|
178
178
|
["llm-relay keys <action> ...", "action: add|list|rotate|revoke|remove|disable|enable|export|import|unlock."],
|
|
179
179
|
["llm-relay pools [--probe]", "List members; --probe tests each deployment once."],
|
|
180
180
|
["llm-relay pools <action> <name> [<spec>...]", "action: set|add|remove|delete."],
|
|
181
|
-
["llm-relay routing <action> ...", "action: show|get|default|tier|subagent|sort|benchmark|set|unset."],
|
|
181
|
+
["llm-relay routing <action> ...", "action: show|get|default|tier|subagent|sort|benchmark|set|unset|answered."],
|
|
182
|
+
["llm-relay route <action> ...", "Alias for routing."],
|
|
183
|
+
["llm-relay lanes [--probe]", "What each cli dispatch lane's own tool says it serves."],
|
|
182
184
|
["llm-relay config <action> [<path>] [<value>]", "action: show|get|set|unset."],
|
|
183
185
|
["llm-relay models [-p <name>] [-r]", "List provider models."],
|
|
184
186
|
["llm-relay ping [-p <name>]", "Probe providers."],
|
|
@@ -291,9 +293,35 @@ Control reads (/registry, /candidates, /ping, /health) and control writes requir
|
|
|
291
293
|
capability token; the CLI attaches it automatically. /telemetry stays provider-aggregate, and
|
|
292
294
|
/health strips nested credential details.
|
|
293
295
|
`;
|
|
296
|
+
/**
|
|
297
|
+
* The config written on a FIRST RUN, when no config exists anywhere.
|
|
298
|
+
*
|
|
299
|
+
* ⚠ It declares the Anthropic passthrough and points every tier at it, and that is load-bearing
|
|
300
|
+
* rather than a preference. It used to declare no `anthropic` provider at all and set
|
|
301
|
+
* `routing.default: "pool/medium"`, so a `claude-opus-5` request resolved to a FREE POOL — and
|
|
302
|
+
* with no free keys yet configured, to nothing at all (`resolveTargets` returned `[]` on a clean
|
|
303
|
+
* HOME). Meanwhile `README.md` promised "Claude traffic keeps your own credentials and reaches
|
|
304
|
+
* real Anthropic untouched", `docs/QUICKSTART.md` said "At this point everything still goes to
|
|
305
|
+
* Anthropic. Nothing is saved yet — but nothing is broken either", and `skills/llm-relay/SKILL.md`
|
|
306
|
+
* said a Claude model id reaches the Anthropic passthrough. All three were false for a stranger
|
|
307
|
+
* following README plus `llm-relay onboard`, which `docs/project-goals.md` makes an explicit goal.
|
|
308
|
+
*
|
|
309
|
+
* The safe default is the one where nothing changes until the operator asks for it: install the
|
|
310
|
+
* relay, keep working exactly as before, then move traffic deliberately. `pools`, `subagents` and
|
|
311
|
+
* the offload switches are all still here and still off, so turning offload on is one command.
|
|
312
|
+
*
|
|
313
|
+
* ⚠ `credentialMode: "passthrough"` is stated rather than left to omission. Omitting it forwards
|
|
314
|
+
* too, but "needs no key of its own" and "may be sent the user's subscription credential" are
|
|
315
|
+
* different intentions and only the first should follow from silence.
|
|
316
|
+
*/
|
|
294
317
|
const DEFAULT_CONFIG_TEMPLATE = JSON.stringify({
|
|
295
318
|
listen: "127.0.0.1:8791",
|
|
296
319
|
providers: {
|
|
320
|
+
anthropic: {
|
|
321
|
+
base: "https://api.anthropic.com",
|
|
322
|
+
kind: "anthropic",
|
|
323
|
+
credentialMode: "passthrough",
|
|
324
|
+
},
|
|
297
325
|
nim: {
|
|
298
326
|
base: "https://integrate.api.nvidia.com/v1",
|
|
299
327
|
kind: "openai",
|
|
@@ -321,12 +349,14 @@ const DEFAULT_CONFIG_TEMPLATE = JSON.stringify({
|
|
|
321
349
|
},
|
|
322
350
|
},
|
|
323
351
|
routing: {
|
|
324
|
-
|
|
352
|
+
// Nothing moves until the operator asks. Claude ids reach real Anthropic, exactly as the
|
|
353
|
+
// README, QUICKSTART and skill all describe; `pool/*` is addressable from day one.
|
|
354
|
+
default: "anthropic",
|
|
325
355
|
tiers: {
|
|
326
|
-
opus: "
|
|
327
|
-
fable: "
|
|
328
|
-
sonnet: "
|
|
329
|
-
haiku: "
|
|
356
|
+
opus: "anthropic",
|
|
357
|
+
fable: "anthropic",
|
|
358
|
+
sonnet: "anthropic",
|
|
359
|
+
haiku: "anthropic",
|
|
330
360
|
},
|
|
331
361
|
// Addressable as `model: pool/<name>` — including from subagent frontmatter, which only
|
|
332
362
|
// accepts a single string and so cannot express a candidate list on its own.
|
|
@@ -352,12 +382,27 @@ const DEFAULT_CONFIG_TEMPLATE = JSON.stringify({
|
|
|
352
382
|
},
|
|
353
383
|
},
|
|
354
384
|
mode: "repair",
|
|
385
|
+
// ⚠ Required once an `anthropic`-kind provider is declared: `mode: "repair"` needs somewhere
|
|
386
|
+
// to reshape a malformed tool call, and an anthropic passthrough has no fixed model of its
|
|
387
|
+
// own to do it on, so `loadConfig` refuses to start without this. A POOL rather than a fixed
|
|
388
|
+
// {base, model, authEnv} for the reason the error message itself gives — ranked candidates
|
|
389
|
+
// that survive a de-listed model. Adding the passthrough without this line made every fresh
|
|
390
|
+
// install fail to load; `test/first-run.test.ts` caught it.
|
|
391
|
+
reshaper: { pool: "medium" },
|
|
355
392
|
repair: {
|
|
356
393
|
maxAttempts: 2,
|
|
357
394
|
destructiveTools: [...DEFAULT_DESTRUCTIVE],
|
|
358
395
|
},
|
|
359
396
|
log: { level: "metadata", file: null },
|
|
360
397
|
}, null, 2);
|
|
398
|
+
/**
|
|
399
|
+
* The shipped template, exposed for `test/first-run.test.ts`.
|
|
400
|
+
*
|
|
401
|
+
* A test that rebuilt this object would be testing itself: the defect being pinned was that the
|
|
402
|
+
* SHIPPED bytes routed `claude-*` to a free pool while three user-facing documents said Anthropic.
|
|
403
|
+
* Only the real constant can observe that.
|
|
404
|
+
*/
|
|
405
|
+
export const DEFAULT_CONFIG_TEMPLATE_FOR_TEST = DEFAULT_CONFIG_TEMPLATE;
|
|
361
406
|
export { splitSpec };
|
|
362
407
|
export function resolveConfigPath() {
|
|
363
408
|
const explicit = argValue("--config", "-c");
|
|
@@ -383,12 +428,87 @@ export function resolveConfigPath() {
|
|
|
383
428
|
mkdirSync(userConfigDir, { recursive: true });
|
|
384
429
|
writeFileSync(userConfig, DEFAULT_CONFIG_TEMPLATE, "utf8");
|
|
385
430
|
process.stderr.write(`llm-relay: initialized global config at ${userConfig}\n`);
|
|
431
|
+
markFirstRun(userConfigDir);
|
|
386
432
|
return userConfig;
|
|
387
433
|
}
|
|
388
434
|
catch {
|
|
389
435
|
return "config.json";
|
|
390
436
|
}
|
|
391
437
|
}
|
|
438
|
+
/** The first-run marker file, beside `config.json` in whichever config dir won. */
|
|
439
|
+
export const FIRST_RUN_MARKER = "first-run";
|
|
440
|
+
function firstRunDir(configDir) {
|
|
441
|
+
if (configDir !== undefined)
|
|
442
|
+
return configDir;
|
|
443
|
+
// ⚠ Under vitest, share the same temp root the config resolver uses, so a test never reads or
|
|
444
|
+
// writes the developer's real marker. Guarded here, at the resolver, per CLAUDE.md.
|
|
445
|
+
return process.env.VITEST ? join(tmpdir(), "llm-relay-vitest") : relayStatePath("config");
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Record that this install has never been steered.
|
|
449
|
+
*
|
|
450
|
+
* The shipped default deliberately changes nothing — every Claude id still reaches real Anthropic
|
|
451
|
+
* — which is the right SAFE default and the wrong FINAL state for somebody who installed a traffic
|
|
452
|
+
* router. Nobody reads a config file they did not write, so the relay leaves one flag, and
|
|
453
|
+
* `skills/llm-relay/SKILL.md` tells the agent to ASK the operator what they want the first time it
|
|
454
|
+
* is used, apply the answer with the ordinary verbs, and clear the flag.
|
|
455
|
+
*
|
|
456
|
+
* ⚠ A flag, not a prompt. `resolveConfigPath` runs inside every CLI command and inside the proxy
|
|
457
|
+
* itself, usually with no terminal attached, so asking here would block a headless start. The
|
|
458
|
+
* agent holds the conversation; the relay only records that the question is unanswered.
|
|
459
|
+
*
|
|
460
|
+
* ⚠ Best-effort: failing to write it must never stop a first run, and its absence simply means
|
|
461
|
+
* "no question pending" — the same fail-open direction as every other optional file here.
|
|
462
|
+
*/
|
|
463
|
+
function markFirstRun(configDir) {
|
|
464
|
+
try {
|
|
465
|
+
writeFileSync(join(configDir, FIRST_RUN_MARKER), `${new Date().toISOString()}\n`, "utf8");
|
|
466
|
+
}
|
|
467
|
+
catch {
|
|
468
|
+
/* best-effort: a missing marker only means no question is pending */
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
/** Is the first-run routing question still unanswered? Absent file ⇒ no. Never throws. */
|
|
472
|
+
export function firstRunPending(configDir) {
|
|
473
|
+
try {
|
|
474
|
+
return existsSync(join(firstRunDir(configDir), FIRST_RUN_MARKER));
|
|
475
|
+
}
|
|
476
|
+
catch {
|
|
477
|
+
return false;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Tell whoever is reading that the first-run routing question is still open.
|
|
482
|
+
*
|
|
483
|
+
* ⚠ STDERR, never stdout. `routing show` and `offload status` are JSON surfaces that scripts and
|
|
484
|
+
* agents parse; a synthetic key inside `cfg.routing` would also be a lie about the config, since
|
|
485
|
+
* nothing in the file says this. A notice beside the JSON reaches a human and an agent both,
|
|
486
|
+
* and breaks no parser.
|
|
487
|
+
*/
|
|
488
|
+
export function printFirstRunNotice(configDir) {
|
|
489
|
+
if (!firstRunPending(configDir))
|
|
490
|
+
return;
|
|
491
|
+
process.stderr.write("\nllm-relay: first run — this install has never been steered.\n" +
|
|
492
|
+
" Every Claude model id currently reaches real Anthropic, which is the safe default and\n" +
|
|
493
|
+
" probably not why you installed a traffic router. Ask the operator what they want, then:\n" +
|
|
494
|
+
" llm-relay offload claude on # marked subagents to the free pools\n" +
|
|
495
|
+
" llm-relay routing subagent <tier> <spec> # choose where each tier lands\n" +
|
|
496
|
+
" llm-relay routing default <spec> # move the MAIN conversation (deliberate)\n" +
|
|
497
|
+
" Then run `llm-relay routing answered` to stop showing this.\n");
|
|
498
|
+
}
|
|
499
|
+
/** Record that the operator has been asked and has answered. Idempotent; never throws. */
|
|
500
|
+
export function clearFirstRun(configDir) {
|
|
501
|
+
try {
|
|
502
|
+
const marker = join(firstRunDir(configDir), FIRST_RUN_MARKER);
|
|
503
|
+
if (!existsSync(marker))
|
|
504
|
+
return false;
|
|
505
|
+
rmSync(marker, { force: true });
|
|
506
|
+
return true;
|
|
507
|
+
}
|
|
508
|
+
catch {
|
|
509
|
+
return false;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
392
512
|
let envFileLoaded = false;
|
|
393
513
|
/**
|
|
394
514
|
* Merge every credential source into the environment, once per process, before anything reads a
|
|
@@ -1943,6 +2063,10 @@ export async function runOffload(arg, nextArg) {
|
|
|
1943
2063
|
// and the relay-routed CLI children this ladder spawns. What it cannot do is affect the session
|
|
1944
2064
|
// running this command, when that session's traffic never arrives. Saying so here is the point:
|
|
1945
2065
|
// the switch reporting ON while nothing changes is precisely how the no-op went unnoticed.
|
|
2066
|
+
// The other surface an agent reaches for when it is about to steer traffic. Stderr, so the
|
|
2067
|
+
// stdout report stays exactly what it was for anything parsing it.
|
|
2068
|
+
if (want === null)
|
|
2069
|
+
printFirstRunNotice();
|
|
1946
2070
|
const hostRouting = detectHostRouting();
|
|
1947
2071
|
if (hostRouting.state === "bypassed" && state.enabled) {
|
|
1948
2072
|
process.stdout.write(` ⚠ ${hostRouting.reason}\n`);
|
|
@@ -2578,6 +2702,7 @@ export function runRoutingCommand() {
|
|
|
2578
2702
|
const action = positionals[1] ?? "show";
|
|
2579
2703
|
if (action === "show" || action === "get") {
|
|
2580
2704
|
outputJson(cfg.routing);
|
|
2705
|
+
printFirstRunNotice();
|
|
2581
2706
|
return;
|
|
2582
2707
|
}
|
|
2583
2708
|
if (action === "default") {
|
|
@@ -2645,6 +2770,15 @@ export function runRoutingCommand() {
|
|
|
2645
2770
|
changedConfig(path);
|
|
2646
2771
|
return;
|
|
2647
2772
|
}
|
|
2773
|
+
if (action === "answered") {
|
|
2774
|
+
// Retires the first-run notice without touching routing. Separate from the steering verbs on
|
|
2775
|
+
// purpose: "I have decided to change nothing" is a real answer, and forcing an edit to silence
|
|
2776
|
+
// a prompt is how a default gets changed for the wrong reason.
|
|
2777
|
+
process.stdout.write(clearFirstRun()
|
|
2778
|
+
? "llm-relay: first-run question marked answered.\n"
|
|
2779
|
+
: "llm-relay: no first-run question was pending.\n");
|
|
2780
|
+
return;
|
|
2781
|
+
}
|
|
2648
2782
|
configCommandError(`routing: unknown action "${action}"`);
|
|
2649
2783
|
}
|
|
2650
2784
|
/**
|
|
@@ -3009,9 +3143,16 @@ export function main() {
|
|
|
3009
3143
|
const res = setupClaudeDesktop();
|
|
3010
3144
|
process.stdout.write(`${res.message}\n`);
|
|
3011
3145
|
}
|
|
3012
|
-
else {
|
|
3146
|
+
else if (arg3 === undefined || arg3 === "claude-cli" || arg3 === "cli" || arg3 === "claude") {
|
|
3013
3147
|
setupClaudeCli();
|
|
3014
3148
|
}
|
|
3149
|
+
else {
|
|
3150
|
+
// ⚠ This used to be a bare `else`, so `setup clade-desktop` (a typo) silently ran the CLI
|
|
3151
|
+
// setup and exited 0 — the user believed they had configured Desktop. HELP has always
|
|
3152
|
+
// documented `claude-cli`, which matched no branch and only worked by that fall-through;
|
|
3153
|
+
// it is a real target now, and anything else is named and refused.
|
|
3154
|
+
configCommandError(`setup: unknown target "${arg3}" (targets: claude-cli, claude-desktop)`);
|
|
3155
|
+
}
|
|
3015
3156
|
return;
|
|
3016
3157
|
}
|
|
3017
3158
|
if (arg2 === "telemetry") {
|
|
@@ -3235,8 +3376,10 @@ export function classifyCommand(argv) {
|
|
|
3235
3376
|
return arg3 === "set" || arg3 === "unset" ? "mutating" : "read-only";
|
|
3236
3377
|
case "routing":
|
|
3237
3378
|
case "route":
|
|
3379
|
+
// `answered` writes too — it removes the first-run marker. It touches no routing, but a
|
|
3380
|
+
// command that deletes a file the relay wrote is not a read.
|
|
3238
3381
|
return arg3 === "set" || arg3 === "unset" || arg3 === "default" || arg3 === "tier" ||
|
|
3239
|
-
arg3 === "subagent" || arg3 === "sort" || arg3 === "benchmark"
|
|
3382
|
+
arg3 === "subagent" || arg3 === "sort" || arg3 === "benchmark" || arg3 === "answered"
|
|
3240
3383
|
? "mutating"
|
|
3241
3384
|
: "read-only";
|
|
3242
3385
|
case "pools":
|