llm-relay 0.77.0 → 0.78.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/accounting-store-schema.js +5 -6
- package/dist/accounting-store-schema.js.map +1 -1
- package/dist/accounting-store.d.ts +10 -0
- package/dist/accounting-store.js +60 -6
- package/dist/accounting-store.js.map +1 -1
- package/dist/backend/envelope-validator.d.ts +1 -1
- package/dist/backend/envelope-validator.js +89 -52
- package/dist/backend/envelope-validator.js.map +1 -1
- package/dist/backend/health-prober.js +3 -1
- package/dist/backend/health-prober.js.map +1 -1
- package/dist/backend.d.ts +48 -0
- package/dist/backend.js +831 -7
- package/dist/backend.js.map +1 -1
- package/dist/candidate-runner.d.ts +135 -50
- package/dist/candidate-runner.js +160 -55
- package/dist/candidate-runner.js.map +1 -1
- package/dist/cli.d.ts +24 -2
- package/dist/cli.js +122 -20
- package/dist/cli.js.map +1 -1
- package/dist/config/routing-parser.d.ts +13 -8
- package/dist/config/routing-parser.js +369 -183
- package/dist/config/routing-parser.js.map +1 -1
- package/dist/config-types.d.ts +202 -0
- package/dist/config-types.js +2 -0
- package/dist/config-types.js.map +1 -1
- package/dist/config.d.ts +45 -1
- package/dist/config.js +87 -22
- package/dist/config.js.map +1 -1
- package/dist/dashboard-contract.d.ts +38 -0
- package/dist/dashboard-contract.js +19 -3
- package/dist/dashboard-contract.js.map +1 -1
- package/dist/dispatch-lane-stats.d.ts +33 -4
- package/dist/dispatch-lane-stats.js +65 -16
- package/dist/dispatch-lane-stats.js.map +1 -1
- package/dist/dispatch.d.ts +9 -0
- package/dist/dispatch.js +36 -4
- package/dist/dispatch.js.map +1 -1
- package/dist/key-checker.d.ts +21 -1
- package/dist/key-checker.js +38 -12
- package/dist/key-checker.js.map +1 -1
- package/dist/lane-affinity.d.ts +94 -1
- package/dist/lane-affinity.js +52 -4
- package/dist/lane-affinity.js.map +1 -1
- package/dist/mcp/lane-runner.d.ts +69 -16
- package/dist/mcp/lane-runner.js +30 -1
- package/dist/mcp/lane-runner.js.map +1 -1
- package/dist/mcp/server.d.ts +39 -4
- package/dist/mcp/server.js +70 -13
- package/dist/mcp/server.js.map +1 -1
- package/dist/openai-request.d.ts +21 -0
- package/dist/openai-request.js +1 -1
- package/dist/openai-request.js.map +1 -1
- package/dist/ping/cadence.js +9 -1
- package/dist/ping/cadence.js.map +1 -1
- package/dist/ping/probe-cache.d.ts +13 -0
- package/dist/ping/probe-cache.js +12 -0
- package/dist/ping/probe-cache.js.map +1 -1
- package/dist/responses-request.d.ts +20 -0
- package/dist/responses-request.js +7 -7
- package/dist/responses-request.js.map +1 -1
- package/dist/routes/admin.d.ts +8 -1
- package/dist/routes/admin.js +42 -6
- package/dist/routes/admin.js.map +1 -1
- package/dist/routes/messages.d.ts +1 -0
- package/dist/routes/messages.js +13 -8
- package/dist/routes/messages.js.map +1 -1
- package/dist/routes/openai-front.js +20 -7
- package/dist/routes/openai-front.js.map +1 -1
- package/dist/server.d.ts +9 -1
- package/dist/server.js +21 -3
- package/dist/server.js.map +1 -1
- package/dist/setup-claude.d.ts +2 -2
- package/dist/setup-claude.js +9 -7
- package/dist/setup-claude.js.map +1 -1
- package/dist/stream-pipeline.d.ts +116 -0
- package/dist/stream-pipeline.js +151 -0
- package/dist/stream-pipeline.js.map +1 -1
- package/dist/target-facts.d.ts +5 -4
- package/dist/target-facts.js +5 -0
- package/dist/target-facts.js.map +1 -1
- package/dist/telemetry.d.ts +15 -2
- package/dist/telemetry.js +4 -1
- package/dist/telemetry.js.map +1 -1
- package/dist/tier-data.d.ts +22 -0
- package/dist/tier-data.js +12 -2
- package/dist/tier-data.js.map +1 -1
- package/package.json +2 -1
- package/skills/llm-relay/SKILL.md +8 -3
- package/skills/llm-relay/references/dispatch-lanes.md +2 -1
- package/skills/llm-relay/references/operations.md +1 -1
package/dist/telemetry.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { configStaleness } from "./config.js";
|
|
1
2
|
import { aggregateHasKey } from "./credential-fleet.js";
|
|
2
3
|
import { ALL_PROVIDER_PRESETS } from "./presets.js";
|
|
3
4
|
import { getStabilityScore } from "./ping/metrics.js";
|
|
@@ -32,7 +33,7 @@ function lastSeen(state) {
|
|
|
32
33
|
const last = state.pings[state.pings.length - 1];
|
|
33
34
|
return last ? last.timestamp : 0;
|
|
34
35
|
}
|
|
35
|
-
export function getTelemetryReport(cfg, cb, now = Date.now()) {
|
|
36
|
+
export function getTelemetryReport(cfg, cb, now = Date.now(), accounting = null) {
|
|
36
37
|
const providers = [];
|
|
37
38
|
const deployments = deploymentAggregates(cb);
|
|
38
39
|
for (const [name, p] of Object.entries(cfg.providers)) {
|
|
@@ -87,6 +88,8 @@ export function getTelemetryReport(cfg, cb, now = Date.now()) {
|
|
|
87
88
|
subscriptionProvidersCount,
|
|
88
89
|
providers,
|
|
89
90
|
routingTiers: cfg.routing.tiers,
|
|
91
|
+
accounting,
|
|
92
|
+
config: configStaleness(cfg),
|
|
90
93
|
};
|
|
91
94
|
}
|
|
92
95
|
//# sourceMappingURL=telemetry.js.map
|
package/dist/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
package/dist/tier-data.d.ts
CHANGED
|
@@ -63,7 +63,28 @@ export interface TierMatch {
|
|
|
63
63
|
rec: TierModel;
|
|
64
64
|
/** `fuzzy` means a DIFFERENT model's row whose name contains this one's — indicative, not measured. */
|
|
65
65
|
match: "exact" | "fuzzy";
|
|
66
|
+
/**
|
|
67
|
+
* Price suffix stripped to reach the row, or null when the id matched as written.
|
|
68
|
+
*
|
|
69
|
+
* A price suffix names what the deployment COSTS, not what the model CAN DO — unlike an
|
|
70
|
+
* effort suffix (`-high`), which `normName()` rightly never strips. So a suffixed id that
|
|
71
|
+
* resolves through its base still reports `match: "exact"`: the base id matched exactly.
|
|
72
|
+
* The deployment's own PRICE still comes from `resolveMetadata`/the catalog — the tier row
|
|
73
|
+
* lends weights, never a price.
|
|
74
|
+
*/
|
|
75
|
+
priceSuffix: PriceSuffix | null;
|
|
66
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Closed list of trailing PRICE suffixes `findTierModel` may strip — longest first, so
|
|
79
|
+
* `-contributor-free` wins over `-free` on an id carrying the longer one.
|
|
80
|
+
*
|
|
81
|
+
* ⚠ ONE suffix is stripped, never two, and never from the middle: `foo-free-high` keeps its
|
|
82
|
+
* effort tail and resolves as written (or not at all). An effort suffix names a different
|
|
83
|
+
* capability and is never a price suffix — stripping it would be the borrowed-score bug.
|
|
84
|
+
*/
|
|
85
|
+
export declare const PRICE_SUFFIXES: readonly ["-contributor-free", "-free"];
|
|
86
|
+
/** One member of `PRICE_SUFFIXES` — the suffix a suffixed id was resolved through. */
|
|
87
|
+
export type PriceSuffix = (typeof PRICE_SUFFIXES)[number];
|
|
67
88
|
/**
|
|
68
89
|
* Look a routing spec up in the snapshot. Matches on the id's last segment, which is exactly the
|
|
69
90
|
* key `sync-tiers.mjs` stores for OpenRouter models — so a spec like `nim/z-ai/glm-5.2` hits the
|
|
@@ -78,6 +99,7 @@ export declare function findTierModel<T = TierModel>(modelId: string, byNorm: Ar
|
|
|
78
99
|
}>, exactByNorm?: ReadonlyMap<string, T>): {
|
|
79
100
|
rec: T;
|
|
80
101
|
match: "exact" | "fuzzy";
|
|
102
|
+
priceSuffix: PriceSuffix | null;
|
|
81
103
|
} | null;
|
|
82
104
|
/**
|
|
83
105
|
* Context window the synced snapshot publishes for a spec, with how it was matched.
|
package/dist/tier-data.js
CHANGED
|
@@ -46,17 +46,27 @@ export function loadTierData(opts = {}) {
|
|
|
46
46
|
return null;
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
+
export const PRICE_SUFFIXES = ["-contributor-free", "-free"];
|
|
49
50
|
export function findTierModel(modelId, byNorm, exactByNorm) {
|
|
50
51
|
const seg = (modelId.split("/").pop() ?? modelId).toLowerCase().trim();
|
|
51
52
|
if (!seg)
|
|
52
53
|
return null;
|
|
53
54
|
const exact = exactByNorm?.get(seg) ?? byNorm.find((e) => e.norm === seg)?.rec;
|
|
54
55
|
if (exact)
|
|
55
|
-
return { rec: exact, match: "exact" };
|
|
56
|
+
return { rec: exact, match: "exact", priceSuffix: null };
|
|
57
|
+
for (const suffix of PRICE_SUFFIXES) {
|
|
58
|
+
if (!seg.endsWith(suffix) || seg.length === suffix.length)
|
|
59
|
+
continue;
|
|
60
|
+
const base = seg.slice(0, seg.length - suffix.length);
|
|
61
|
+
const baseHit = exactByNorm?.get(base) ?? byNorm.find((e) => e.norm === base)?.rec;
|
|
62
|
+
if (baseHit)
|
|
63
|
+
return { rec: baseHit, match: "exact", priceSuffix: suffix };
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
56
66
|
if (seg.length < 5)
|
|
57
67
|
return null;
|
|
58
68
|
const contained = byNorm.find((e) => e.norm.includes(seg));
|
|
59
|
-
return contained ? { rec: contained.rec, match: "fuzzy" } : null;
|
|
69
|
+
return contained ? { rec: contained.rec, match: "fuzzy", priceSuffix: null } : null;
|
|
60
70
|
}
|
|
61
71
|
export function snapshotContextWindow(spec) {
|
|
62
72
|
const data = loadTierData();
|
package/dist/tier-data.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tier-data.js","sourceRoot":"","sources":["../src/tier-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAwDzC,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAE9C,IAAI,MAAM,GAAgF,IAAI,CAAC;AAE/F,MAAM,UAAU,YAAY,CAC1B,OAA8D,EAAE;IAEhE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,uBAAuB,CAAC;IAG5D,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,GAAG,SAAS;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAEpF,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACtC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;YACvB,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QACD,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QACzC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;QACvB,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAiD,CAAC;QACjG,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;aACzC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,IAAI,GAAa;YACrB,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,MAAM;YACN,MAAM;YACN,WAAW,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YAChE,QAAQ,EAAE,GAAG,OAAO,EAAE;SACvB,CAAC;QACF,MAAM,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"tier-data.js","sourceRoot":"","sources":["../src/tier-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAwDzC,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAE9C,IAAI,MAAM,GAAgF,IAAI,CAAC;AAE/F,MAAM,UAAU,YAAY,CAC1B,OAA8D,EAAE;IAEhE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,uBAAuB,CAAC;IAG5D,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,GAAG,SAAS;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAEpF,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACtC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;YACvB,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QACD,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QACzC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;QACvB,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAiD,CAAC;QACjG,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;aACzC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,IAAI,GAAa;YACrB,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,MAAM;YACN,MAAM;YACN,WAAW,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YAChE,QAAQ,EAAE,GAAG,OAAO,EAAE;SACvB,CAAC;QACF,MAAM,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AA2BD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAU,CAAC;AAatE,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,MAAuC,EACvC,WAAoC;IAEpC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACvE,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAMtB,MAAM,KAAK,GAAG,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;IAC/E,IAAI,KAAK;QAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAOpE,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;YAAE,SAAS;QACpE,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC;QACnF,IAAI,OAAO;YAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACtF,CAAC;AASD,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,GAAG,GAAG,aAAa,CAAY,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC;IACvC,OAAO,GAAG,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "llm-relay",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.78.0",
|
|
4
4
|
"description": "Loopback bidirectional Anthropic/OpenAI API proxy with tool-call validation and multi-provider routing.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
41
41
|
"typecheck:test": "tsc -p tsconfig.test.json",
|
|
42
42
|
"check": "npm run typecheck && npm run typecheck:test && npm test && npm run check:dashboard && npm run check:package",
|
|
43
|
+
"gate": "npm run build && npm run check",
|
|
43
44
|
"postinstall": "node scripts/install-skill.mjs || node -e \"process.stderr.write('llm-relay: the postinstall hook crashed, so the bundled host skills and Codex setup were NOT fully installed. The package itself is fine. Retry with: node scripts/install-skill.mjs --force\\n')\"",
|
|
44
45
|
"analysis:run": "node scripts/analysis-run.mjs",
|
|
45
46
|
"prepack": "npm run build",
|
|
@@ -58,7 +58,7 @@ you cannot reverse.
|
|
|
58
58
|
⚠ Pass `mode: "answer"` for a question, draft, summary, or second opinion that needs no file
|
|
59
59
|
access — it skips spawning a harness and posts straight to the relay, so it answers in seconds
|
|
60
60
|
rather than tens of seconds. Keep the default agent mode when the lane must read or edit files
|
|
61
|
-
or run commands.
|
|
61
|
+
or run commands. Full `mode` details: [references/dispatch-lanes.md](references/dispatch-lanes.md).
|
|
62
62
|
2. `llm-relay dispatch --next-command -t "<task>"` — when the MCP tools are absent. Exit 0 prints
|
|
63
63
|
one runnable command line. Exit 2 means the rung is a relay target, so address the named spec
|
|
64
64
|
as an ordinary subagent.
|
|
@@ -121,6 +121,9 @@ that marker exists. When you see it:
|
|
|
121
121
|
- **Free lanes only, never spend money** — add `"freeOnly": true` to the rule. It refuses with a
|
|
122
122
|
clean 503 rather than falling through to paid.
|
|
123
123
|
- **Nothing yet** — a real answer. Leave the routing alone.
|
|
124
|
+
> Operational details: the `--scope` parameter, `freeOnly` flag, and the PreToolUse(Agent) hook
|
|
125
|
+
> installed by `offload claude on` on bypassed hosts are documented in
|
|
126
|
+
> [references/direct-routing.md](references/direct-routing.md).
|
|
124
127
|
2. Apply the answer with the ordinary verbs. Do not hand-edit `config.json`.
|
|
125
128
|
3. Run `llm-relay routing answered` to retire the notice — including when the answer was "nothing
|
|
126
129
|
yet". Forcing a config edit just to silence a prompt is how a default gets changed for the
|
|
@@ -141,8 +144,10 @@ llm-relay offload status # inspect direct-routing rules
|
|
|
141
144
|
```
|
|
142
145
|
|
|
143
146
|
When MCP `dispatch` outlives its initial wait, use `dispatch_status`, then
|
|
144
|
-
`dispatch_result`; use `dispatch_cancel` only when the task should stop.
|
|
145
|
-
still-running job.
|
|
147
|
+
`dispatch_result`; use `dispatch_cancel` only when the task should stop. Use
|
|
148
|
+
`dispatch_lanes` to pick a rung deliberately. Do not relaunch a still-running job.
|
|
149
|
+
> Full dispatch tool reference including `dispatch_cancel` and `dispatch_lanes` is in
|
|
150
|
+
> [references/dispatch-lanes.md](references/dispatch-lanes.md).
|
|
146
151
|
|
|
147
152
|
## Load only the reference needed
|
|
148
153
|
|
|
@@ -108,7 +108,8 @@ dispatch(task: "...", lane: "agy-gemini") -> force one rung
|
|
|
108
108
|
dispatch(task: "...", mode: "answer") -> no harness — a direct call, for speed
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
-
If the lane outlives `
|
|
111
|
+
If the lane outlives the wait (`routing.mcp.maxWaitMs`, default 40 s; a larger `waitMs` is
|
|
112
|
+
clamped to it and the reply says so) you get a `jobId` instead. Then:
|
|
112
113
|
`dispatch_status(jobId)` -> `dispatch_result(jobId)`, and `dispatch_cancel(jobId)` to stop it.
|
|
113
114
|
`dispatch_lanes()` shows the ladder if you want to choose deliberately.
|
|
114
115
|
|
|
@@ -109,7 +109,7 @@ pool you addressed and whether the task then succeeded elsewhere.
|
|
|
109
109
|
When there is a pending item you can interpret, **propose it and ask the user to confirm**:
|
|
110
110
|
|
|
111
111
|
```
|
|
112
|
-
llm-relay eligibility propose 1 --class subscription-required --scope deployment --
|
|
112
|
+
llm-relay eligibility propose 1 --class subscription-required --scope deployment --sig 3f2a91c04d
|
|
113
113
|
```
|
|
114
114
|
|
|
115
115
|
Then say what you read and why, and let them decide. Hand them the accept command `propose`
|