llm-relay 0.84.0 → 0.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -2
- package/dist/availability.d.ts +1 -1
- package/dist/backend.d.ts +1 -1
- package/dist/circuit-breaker.d.ts +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/config-types.d.ts +10 -10
- package/dist/config.d.ts +1 -1
- package/dist/dashboard/.vite/manifest.json +2 -2
- package/dist/dashboard/assets/index-C-I6hPeY.js +403 -0
- package/dist/dashboard/assets/index-CrSNlLMD.css +1 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/dashboard-auth.d.ts +2 -0
- package/dist/dashboard-auth.js +5 -0
- package/dist/dashboard-auth.js.map +1 -1
- package/dist/dashboard-routes.d.ts +2 -1
- package/dist/dashboard-routes.js +12 -4
- package/dist/dashboard-routes.js.map +1 -1
- package/dist/dashboard-static.js +34 -4
- package/dist/dashboard-static.js.map +1 -1
- package/dist/dispatch-lane-stats.d.ts +1 -1
- package/dist/dispatch.d.ts +3 -3
- package/dist/hedge-trigger.d.ts +1 -1
- package/dist/lane-cadence.d.ts +1 -1
- package/dist/lane-manifest.d.ts +1 -1
- package/dist/lane-probe.d.ts +2 -2
- package/dist/latency-demotion.d.ts +1 -1
- package/dist/mcp/lane-runner.d.ts +1 -1
- package/dist/mcp/protocol.d.ts +1 -1
- package/dist/mcp/readonly-boundary.d.ts +1 -1
- package/dist/mcp/server.d.ts +4 -4
- package/dist/process-safety-net.d.ts +1 -1
- package/dist/responses-request.d.ts +1 -1
- package/dist/routes/admin.js +1 -1
- package/dist/routes/admin.js.map +1 -1
- package/dist/stream-commit.d.ts +1 -1
- package/dist/stream-pipeline.d.ts +1 -1
- package/dist/tool-dialects.d.ts +1 -1
- package/docs/README.md +43 -0
- package/package.json +1 -1
- package/scripts/install-skill.mjs +1 -0
- package/skills/llm-relay/SKILL.md +4 -0
- package/skills/llm-relay/references/lane-field-notes.md +202 -0
- package/dist/dashboard/assets/index-B2UQHoym.js +0 -74
- package/dist/dashboard/assets/index-DFEP3XPr.css +0 -1
package/README.md
CHANGED
|
@@ -65,10 +65,17 @@ at login.
|
|
|
65
65
|
## Learn more
|
|
66
66
|
|
|
67
67
|
- [docs/reference.md](docs/reference.md) — full reference: config, routing, pools, offload,
|
|
68
|
-
repair, CLI, endpoints, and every caveat.
|
|
68
|
+
repair, CLI, endpoints, and every caveat. It opens with a table of contents.
|
|
69
|
+
- [docs/architecture.md](docs/architecture.md) — a map of the code, for a person who wants to
|
|
70
|
+
change it.
|
|
71
|
+
- [CONTRIBUTING.md](CONTRIBUTING.md) — how to set up, how to prove a change, and how to report a
|
|
72
|
+
problem without leaking a credential.
|
|
69
73
|
- [docs/subagent-routing.md](docs/subagent-routing.md) — offload design and wire evidence.
|
|
70
74
|
- [docs/pool-failover.md](docs/pool-failover.md) — how failover and health tracking behave.
|
|
71
75
|
- [docs/capability-sources.md](docs/capability-sources.md) — where capability scores come from.
|
|
72
76
|
- [docs/project-goals.md](docs/project-goals.md) — what this project is and is not.
|
|
73
77
|
|
|
74
|
-
`llm-relay help` lists the main commands.
|
|
78
|
+
`llm-relay help` lists the main commands. To contribute, start at
|
|
79
|
+
[CONTRIBUTING.md](CONTRIBUTING.md) and [docs/architecture.md](docs/architecture.md).
|
|
80
|
+
[CLAUDE.md](CLAUDE.md) holds the same source map in full detail, written for an AI coding
|
|
81
|
+
assistant.
|
package/dist/availability.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Availability ladders — spec §5.1-5.3 of docs/quota-metering-spec-2026-08-16.md.
|
|
2
|
+
* Availability ladders — spec §5.1-5.3 of docs/history/quota-metering-spec-2026-08-16.md.
|
|
3
3
|
*
|
|
4
4
|
* `remaining` and `resetsAt` are resolved per (scope, axis, period) through fixed rungs, and
|
|
5
5
|
* staleness is handled HERE, at read time, as a pure function of the caller's clock — never by a
|
package/dist/backend.d.ts
CHANGED
|
@@ -29,7 +29,7 @@ export declare class DialectUnparseableError extends Error {
|
|
|
29
29
|
* fine. It is a config decision, so it is carried as a LOCAL failure — the walk must not fail over
|
|
30
30
|
* (re-asking N models to produce the same refused action) and the deployment must not be charged,
|
|
31
31
|
* the same rule under which a hard cap "never registers on the breaker — it is config, not
|
|
32
|
-
* health". See docs/dialect-rescue-destructive-refusal-2026-08-24.md.
|
|
32
|
+
* health". See docs/history/dialect-rescue-destructive-refusal-2026-08-24.md.
|
|
33
33
|
*/
|
|
34
34
|
export declare class DialectDestructiveError extends Error {
|
|
35
35
|
readonly dialect: string;
|
|
@@ -186,7 +186,7 @@ export declare const UNMEASURED_STABILITY = 50;
|
|
|
186
186
|
* ladder: a `Retry-After`, a 429 escalation and a 402 all still win where they applied before.
|
|
187
187
|
*
|
|
188
188
|
* Pure, so it is pinned directly rather than through the breaker's state machine.
|
|
189
|
-
* Evidence: `docs/latency-demotion-regression-2026-08-30.md` §3.
|
|
189
|
+
* Evidence: `docs/history/latency-demotion-regression-2026-08-30.md` §3.
|
|
190
190
|
*/
|
|
191
191
|
export declare function failureCooldown(elapsedMs: number): {
|
|
192
192
|
ms: number;
|
package/dist/cli.d.ts
CHANGED
|
@@ -403,7 +403,7 @@ export declare function renderCommand(invoke: {
|
|
|
403
403
|
* ⚠ `--probe` spawns lane commands as an explicit operator action — same precedent as
|
|
404
404
|
* `pools --probe` sending real completions. The request path reads the cached manifest and never
|
|
405
405
|
* spawns anything; outside it the only OTHER spawn site is the relay's background lane cadence
|
|
406
|
-
* (owner decision 2026-08-29, docs/quota-reprobe-design-2026-08-29.md). Without `--probe` this
|
|
406
|
+
* (owner decision 2026-08-29, docs/history/quota-reprobe-design-2026-08-29.md). Without `--probe` this
|
|
407
407
|
* just prints the cache.
|
|
408
408
|
*/
|
|
409
409
|
export declare function runLanes(): Promise<void>;
|
package/dist/config-types.d.ts
CHANGED
|
@@ -98,7 +98,7 @@ export type ThoughtSignatureMode = "none" | "sentinel";
|
|
|
98
98
|
* `thinking: {type:"disabled"}` — DeepSeek's thinking mode requires the prior turn's
|
|
99
99
|
* `reasoning_content` to be replayed on a multi-turn conversation (HTTP 400 otherwise), and
|
|
100
100
|
* this relay deliberately holds no store to round-trip it (see
|
|
101
|
-
* docs/deepseek-responses-truncation-2026-09-09.md), so the default must not think.
|
|
101
|
+
* docs/history/deepseek-responses-truncation-2026-09-09.md), so the default must not think.
|
|
102
102
|
*/
|
|
103
103
|
export type ReasoningMode = "none" | "deepseek";
|
|
104
104
|
/**
|
|
@@ -126,7 +126,7 @@ export interface ProviderCompatConfig {
|
|
|
126
126
|
*
|
|
127
127
|
* OpenCode Zen's contributor SKUs — Muse Spark 1.3 included — answer HTTP 500 on
|
|
128
128
|
* `/chat/completions` and on Zen's Anthropic-shaped `/messages`, and 200 only on `/responses`
|
|
129
|
-
* (measured 2026-09-04, `docs/muse-spark-1.3-opencode-zen-2026-09-04.md` rows 3 and 6-8). A third
|
|
129
|
+
* (measured 2026-09-04, `docs/history/muse-spark-1.3-opencode-zen-2026-09-04.md` rows 3 and 6-8). A third
|
|
130
130
|
* `Kind` value for this would touch roughly 55 `kind === "openai"` sites across 19 files (same
|
|
131
131
|
* doc, §3 route B); this narrower option forks only the request/response builders `src/backend.ts`
|
|
132
132
|
* selects on, leaving discovery, catalog and key-check paths unchanged. Declaring it on an
|
|
@@ -329,7 +329,7 @@ export interface Routing {
|
|
|
329
329
|
latency?: LatencyDemotionConfig;
|
|
330
330
|
/**
|
|
331
331
|
* Hedged attempts (owner proposal + decisions 2026-08-30,
|
|
332
|
-
* docs/hedged-attempts-design-2026-08-30.md §7). **Default ON**, and confined to deployments
|
|
332
|
+
* docs/history/hedged-attempts-design-2026-08-30.md §7). **Default ON**, and confined to deployments
|
|
333
333
|
* `assessCost()` calls FREE.
|
|
334
334
|
*
|
|
335
335
|
* ⚠ This is the FIRST behaviour here that does not merely reorder — it DUPLICATES a request onto
|
|
@@ -366,7 +366,7 @@ export interface Routing {
|
|
|
366
366
|
pacing?: PacingConfig;
|
|
367
367
|
/**
|
|
368
368
|
* Post-commit CRAWL abort (backlog item 18, built 2026-09-09 after
|
|
369
|
-
* `docs/post-commit-stall-measurement-2026-09-09.md` measured that both Claude Code and Codex
|
|
369
|
+
* `docs/history/post-commit-stall-measurement-2026-09-09.md` measured that both Claude Code and Codex
|
|
370
370
|
* retry a stream that goes bad after content has already arrived — Claude Code once, downgraded
|
|
371
371
|
* to non-streaming; Codex up to five times, staying streaming). A silent stall after commit is
|
|
372
372
|
* already caught by `withStallWatchdog` at `stallTimeoutMs`; this catches the case nothing else
|
|
@@ -381,7 +381,7 @@ export interface Routing {
|
|
|
381
381
|
crawl?: CrawlWatchdogConfig;
|
|
382
382
|
/**
|
|
383
383
|
* Background lane re-probing (owner decision 2026-08-29,
|
|
384
|
-
* docs/quota-reprobe-design-2026-08-29.md): keeping lane metadata fresh is the relay's own
|
|
384
|
+
* docs/history/quota-reprobe-design-2026-08-29.md): keeping lane metadata fresh is the relay's own
|
|
385
385
|
* job, the way the ping loop already does for HTTP. **Default ON** — catalog probes are
|
|
386
386
|
* metadata commands that spend no quota, and quota probes fire only for buckets carrying an
|
|
387
387
|
* ACTIVE recorded death (an alive lane is re-tested by real use for free). Boolean shorthand
|
|
@@ -391,7 +391,7 @@ export interface Routing {
|
|
|
391
391
|
laneProbe?: LaneProbeSettings;
|
|
392
392
|
/**
|
|
393
393
|
* The automatic dispatch lane WALK (owner request 2026-09-06,
|
|
394
|
-
* docs/dispatch-lane-walk-design-2026-09-06.md). **Default ON.**
|
|
394
|
+
* docs/history/dispatch-lane-walk-design-2026-09-06.md). **Default ON.**
|
|
395
395
|
*
|
|
396
396
|
* Before it, `dispatch` ran ONE lane and reported a failure when that lane was slow; the calling
|
|
397
397
|
* agent then picked the next lane by hand, which is the friction the owner reported. With it,
|
|
@@ -495,7 +495,7 @@ export interface LatencyDemotionConfig {
|
|
|
495
495
|
/**
|
|
496
496
|
* `routing.hedge` — start the NEXT candidate beside a slow in-flight attempt, instead of after it
|
|
497
497
|
* (owner proposal 2026-08-30; the four decisions are in
|
|
498
|
-
* `docs/hedged-attempts-design-2026-08-30.md` §7).
|
|
498
|
+
* `docs/history/hedged-attempts-design-2026-08-30.md` §7).
|
|
499
499
|
*
|
|
500
500
|
* **Default ON, free deployments only.** That is owner decision D1, taken against the
|
|
501
501
|
* recommendation of off-by-default. `assessCost()` treats an UNKNOWN price as paid, so the rule is
|
|
@@ -876,7 +876,7 @@ export interface DispatchWalkSettings {
|
|
|
876
876
|
* answer-mode call. Default 600000 (10 minutes).
|
|
877
877
|
*
|
|
878
878
|
* ⚠ Two floors because the two modes are two different populations
|
|
879
|
-
* (`docs/dispatch-giveup-diagnosis-2026-09-10.md` §3): an answer-mode call is one HTTP round trip
|
|
879
|
+
* (`docs/history/dispatch-giveup-diagnosis-2026-09-10.md` §3): an answer-mode call is one HTTP round trip
|
|
880
880
|
* that answers in seconds, while an agent-mode lane runs a whole tool loop for minutes. One floor
|
|
881
881
|
* fitted to both stopped every real agent task on `free-pool` at 90 s, because a burst of short
|
|
882
882
|
* answer-mode calls had set the lane's p80 to 39.5 s. Like `attemptMs` it is an operator budget,
|
|
@@ -977,7 +977,7 @@ export interface McpSettings {
|
|
|
977
977
|
/**
|
|
978
978
|
* Default `routing.mcp.blockingWaitMs` — 25 minutes.
|
|
979
979
|
*
|
|
980
|
-
* Measured and documented 2026-09-17 (`docs/mcp-host-timeouts-2026-09-17.md`): Claude Code's
|
|
980
|
+
* Measured and documented 2026-09-17 (`docs/history/mcp-host-timeouts-2026-09-17.md`): Claude Code's
|
|
981
981
|
* wall-clock tool limit (`MCP_TOOL_TIMEOUT`) defaults to about 28 hours, and a 240 s call succeeded
|
|
982
982
|
* headless with and without progress. Its stdio idle timeout is 30 minutes, and the documentation
|
|
983
983
|
* says a progress notification resets it. The default stays under 30 minutes so the call survives
|
|
@@ -993,7 +993,7 @@ export declare const DEFAULT_MCP_BLOCKING_WAIT_MS = 1500000;
|
|
|
993
993
|
* somewhere between 45 s and 100 s, and Codex's code-mode `exec` tool yields its script at 31.0 s
|
|
994
994
|
* with empty output ("Script running with cell ID N / Wall time 31.0 seconds"). The 2026-09-10
|
|
995
995
|
* transcript sweep counted 29 of 266 first Codex dispatch calls that lost their job id that way
|
|
996
|
-
* while this default was 40 s (`docs/dispatch-giveup-diagnosis-2026-09-10.md` §8). 25 s sits under
|
|
996
|
+
* while this default was 40 s (`docs/history/dispatch-giveup-diagnosis-2026-09-10.md` §8). 25 s sits under
|
|
997
997
|
* both. The tool description names the config key rather than this figure, so an operator override
|
|
998
998
|
* never leaves the text stale.
|
|
999
999
|
*/
|
package/dist/config.d.ts
CHANGED
|
@@ -48,7 +48,7 @@ export declare function resolveThoughtSignatureMode(p: {
|
|
|
48
48
|
* labelled provider fact in `src/` only while config can override it. DeepSeek's own API states its
|
|
49
49
|
* thinking/reasoning vocabulary (thinking ON by default; `thinking: {type:"disabled"}` /
|
|
50
50
|
* `reasoning_effort: low|high|max`; first-party evidence in
|
|
51
|
-
* docs/deepseek-responses-truncation-2026-09-09.md), so `api.deepseek.com` defaults to `"deepseek"`
|
|
51
|
+
* docs/history/deepseek-responses-truncation-2026-09-09.md), so `api.deepseek.com` defaults to `"deepseek"`
|
|
52
52
|
* and every other host to `"none"`. An explicit `compat.reasoning` wins in BOTH directions —
|
|
53
53
|
* `"none"` on deepseek, `"deepseek"` on anything else.
|
|
54
54
|
*/
|