llm-relay 0.32.2 → 0.33.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/backend.d.ts +24 -2
- package/dist/backend.js +81 -6
- package/dist/backend.js.map +1 -1
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +79 -0
- package/dist/cli.js.map +1 -1
- package/dist/dispatch.d.ts +16 -1
- package/dist/dispatch.js +101 -1
- package/dist/dispatch.js.map +1 -1
- package/dist/lane-manifest.d.ts +78 -0
- package/dist/lane-manifest.js +100 -0
- package/dist/lane-manifest.js.map +1 -0
- package/dist/lane-probe.d.ts +28 -0
- package/dist/lane-probe.js +113 -0
- package/dist/lane-probe.js.map +1 -0
- package/dist/routes/admin.js +3 -0
- package/dist/routes/admin.js.map +1 -1
- package/dist/tool-dialects.d.ts +58 -0
- package/dist/tool-dialects.js +205 -0
- package/dist/tool-dialects.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a `cli` lane's own tool says it can serve.
|
|
3
|
+
*
|
|
4
|
+
* A `cli` rung is opaque config rendered verbatim into a command the host runs, so nothing
|
|
5
|
+
* validated it. Measured 2026-08-08: the ladder handed an agent
|
|
6
|
+
* `agy --model claude-opus-5 --effort medium`, in which BOTH halves were wrong independently —
|
|
7
|
+
* AGY serves no Claude 5 at all, and `--effort` is rejected outright for its Claude models. The
|
|
8
|
+
* lane looked healthy and completed nothing. See docs/lane-discovery.md.
|
|
9
|
+
*
|
|
10
|
+
* ⚠ A model the vendor does not serve is `not-servable` — an EXISTENCE fact, so the rung is
|
|
11
|
+
* REMOVED, not demoted. `target-facts.ts` already draws that line: `allowance-exhausted` demotes
|
|
12
|
+
* because it expires, `not-servable` removes because it will not start existing.
|
|
13
|
+
*
|
|
14
|
+
* ⚠ Eviction requires POSITIVE evidence. "This lane's roster is known and the model is not in it"
|
|
15
|
+
* evicts; "no manifest, or this lane was never probed" is UNKNOWN and changes nothing. Same
|
|
16
|
+
* fail-safe as a signature miss in `refusal-interpretation.ts`, and the same reasoning that makes
|
|
17
|
+
* an unset `${ENV}` disable one provider rather than abort startup — a stale manifest must never
|
|
18
|
+
* be able to empty the ladder, because this proxy fronts every session.
|
|
19
|
+
*/
|
|
20
|
+
export interface LaneModel {
|
|
21
|
+
id: string;
|
|
22
|
+
/** Argument values the tool states this model supports, keyed by argument name. */
|
|
23
|
+
supports?: Record<string, string[]>;
|
|
24
|
+
}
|
|
25
|
+
export interface LaneEntry {
|
|
26
|
+
/** Which command produced this roster, so a reader can tell a listing from an attempt. */
|
|
27
|
+
via: string;
|
|
28
|
+
probedAt: string;
|
|
29
|
+
models: LaneModel[];
|
|
30
|
+
/**
|
|
31
|
+
* Arguments this lane's tool REJECTED for a given model, learned from an observed failure
|
|
32
|
+
* rather than probed. AGY publishes no flag support, so its facts can only arrive this way.
|
|
33
|
+
*/
|
|
34
|
+
rejectedArgs?: Record<string, string[]>;
|
|
35
|
+
}
|
|
36
|
+
export interface LaneManifest {
|
|
37
|
+
version: 1;
|
|
38
|
+
lanes: Record<string, LaneEntry>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* ⚠ Under vitest, never read the developer's real manifest — same rule and same reason as
|
|
42
|
+
* `getProbeCachePath()`. A suite fixture naming a made-up model (`agy-gemini`, `codex`) would be
|
|
43
|
+
* evicted by the machine's ACTUAL roster, so three pre-existing dispatch tests went red the moment
|
|
44
|
+
* a real `lanes --probe` had been run. A test's ladder must be decided by its own config, not by
|
|
45
|
+
* whichever CLIs happen to be installed. Tests needing a manifest pass one explicitly.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getLaneManifestPath(): string;
|
|
48
|
+
export declare const DEFAULT_MANIFEST_PATH: string;
|
|
49
|
+
export declare function loadLaneManifest(path?: string): LaneManifest | null;
|
|
50
|
+
export declare function saveLaneManifest(m: LaneManifest, path?: string): void;
|
|
51
|
+
/** The lane a command belongs to. Closed set — an unrecognized command is UNKNOWN, never evicted. */
|
|
52
|
+
export declare function laneOfCommand(command: string): string | null;
|
|
53
|
+
export type ModelVerdict = {
|
|
54
|
+
status: "unknown";
|
|
55
|
+
reason: string;
|
|
56
|
+
} | {
|
|
57
|
+
status: "servable";
|
|
58
|
+
} | {
|
|
59
|
+
status: "not-servable";
|
|
60
|
+
reason: string;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Is this model one the lane's tool says it serves?
|
|
64
|
+
*
|
|
65
|
+
* ⚠ Every negative path that is not positive evidence returns `unknown`. Only a KNOWN roster that
|
|
66
|
+
* omits the model produces `not-servable`.
|
|
67
|
+
*/
|
|
68
|
+
export declare function verifyModel(manifest: LaneManifest | null, command: string, model: string): ModelVerdict;
|
|
69
|
+
/**
|
|
70
|
+
* Argument values the lane is KNOWN to reject for this model — from a stated support list where the
|
|
71
|
+
* tool publishes one (Codex), or from an observed rejection where it does not (AGY).
|
|
72
|
+
*/
|
|
73
|
+
export declare function unsupportedArgValues(manifest: LaneManifest | null, command: string, model: string, arg: string, value: string): {
|
|
74
|
+
unsupported: boolean;
|
|
75
|
+
reason?: string;
|
|
76
|
+
};
|
|
77
|
+
/** Record an argument this lane rejected for a model. An existence fact — it does not expire. */
|
|
78
|
+
export declare function recordRejectedArg(m: LaneManifest, lane: string, model: string, arg: string): LaneManifest;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { homedir, tmpdir } from "node:os";
|
|
4
|
+
/**
|
|
5
|
+
* ⚠ Under vitest, never read the developer's real manifest — same rule and same reason as
|
|
6
|
+
* `getProbeCachePath()`. A suite fixture naming a made-up model (`agy-gemini`, `codex`) would be
|
|
7
|
+
* evicted by the machine's ACTUAL roster, so three pre-existing dispatch tests went red the moment
|
|
8
|
+
* a real `lanes --probe` had been run. A test's ladder must be decided by its own config, not by
|
|
9
|
+
* whichever CLIs happen to be installed. Tests needing a manifest pass one explicitly.
|
|
10
|
+
*/
|
|
11
|
+
export function getLaneManifestPath() {
|
|
12
|
+
if (process.env.VITEST)
|
|
13
|
+
return join(tmpdir(), "llm-relay-vitest", "lane-manifest.json");
|
|
14
|
+
return join(homedir(), ".llm-relay", "lane-manifest.json");
|
|
15
|
+
}
|
|
16
|
+
export const DEFAULT_MANIFEST_PATH = getLaneManifestPath();
|
|
17
|
+
export function loadLaneManifest(path = DEFAULT_MANIFEST_PATH) {
|
|
18
|
+
try {
|
|
19
|
+
if (!existsSync(path))
|
|
20
|
+
return null;
|
|
21
|
+
const j = JSON.parse(readFileSync(path, "utf8"));
|
|
22
|
+
if (j?.version !== 1 || typeof j.lanes !== "object" || j.lanes === null)
|
|
23
|
+
return null;
|
|
24
|
+
return j;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Unreadable is UNKNOWN, never "nothing is servable". A corrupt manifest that evicted every
|
|
28
|
+
// rung would turn a hygiene feature into a total outage.
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function saveLaneManifest(m, path = DEFAULT_MANIFEST_PATH) {
|
|
33
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
34
|
+
writeFileSync(path, JSON.stringify(m, null, 2) + "\n");
|
|
35
|
+
}
|
|
36
|
+
/** The lane a command belongs to. Closed set — an unrecognized command is UNKNOWN, never evicted. */
|
|
37
|
+
export function laneOfCommand(command) {
|
|
38
|
+
const base = (command.split(/[\\/]/).pop() ?? command).toLowerCase().replace(/\.(exe|cmd|bat)$/, "");
|
|
39
|
+
if (base === "agy")
|
|
40
|
+
return "agy";
|
|
41
|
+
if (base === "codex")
|
|
42
|
+
return "codex";
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Is this model one the lane's tool says it serves?
|
|
47
|
+
*
|
|
48
|
+
* ⚠ Every negative path that is not positive evidence returns `unknown`. Only a KNOWN roster that
|
|
49
|
+
* omits the model produces `not-servable`.
|
|
50
|
+
*/
|
|
51
|
+
export function verifyModel(manifest, command, model) {
|
|
52
|
+
const lane = laneOfCommand(command);
|
|
53
|
+
if (!lane)
|
|
54
|
+
return { status: "unknown", reason: "command is not a lane this relay can probe" };
|
|
55
|
+
const entry = manifest?.lanes[lane];
|
|
56
|
+
if (!entry)
|
|
57
|
+
return { status: "unknown", reason: `lane "${lane}" has never been probed` };
|
|
58
|
+
if (entry.models.length === 0)
|
|
59
|
+
return { status: "unknown", reason: `lane "${lane}" probed but returned no roster` };
|
|
60
|
+
if (entry.models.some((m) => m.id === model))
|
|
61
|
+
return { status: "servable" };
|
|
62
|
+
return {
|
|
63
|
+
status: "not-servable",
|
|
64
|
+
reason: `"${model}" is not in ${lane}'s roster (probed ${entry.probedAt} via \`${entry.via}\`)`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Argument values the lane is KNOWN to reject for this model — from a stated support list where the
|
|
69
|
+
* tool publishes one (Codex), or from an observed rejection where it does not (AGY).
|
|
70
|
+
*/
|
|
71
|
+
export function unsupportedArgValues(manifest, command, model, arg, value) {
|
|
72
|
+
const lane = laneOfCommand(command);
|
|
73
|
+
if (!lane)
|
|
74
|
+
return { unsupported: false };
|
|
75
|
+
const entry = manifest?.lanes[lane];
|
|
76
|
+
if (!entry)
|
|
77
|
+
return { unsupported: false };
|
|
78
|
+
const rejected = entry.rejectedArgs?.[model];
|
|
79
|
+
if (rejected?.includes(arg)) {
|
|
80
|
+
return { unsupported: true, reason: `${lane} rejects "${arg}" for "${model}" (observed)` };
|
|
81
|
+
}
|
|
82
|
+
const stated = entry.models.find((m) => m.id === model)?.supports?.[arg];
|
|
83
|
+
// Absence of a support list is UNKNOWN — only a stated list that omits the value is evidence.
|
|
84
|
+
if (stated && !stated.includes(value)) {
|
|
85
|
+
return { unsupported: true, reason: `${lane} states "${model}" supports ${arg}: ${stated.join(",")} (not "${value}")` };
|
|
86
|
+
}
|
|
87
|
+
return { unsupported: false };
|
|
88
|
+
}
|
|
89
|
+
/** Record an argument this lane rejected for a model. An existence fact — it does not expire. */
|
|
90
|
+
export function recordRejectedArg(m, lane, model, arg) {
|
|
91
|
+
const entry = m.lanes[lane];
|
|
92
|
+
if (!entry)
|
|
93
|
+
return m;
|
|
94
|
+
const rejected = entry.rejectedArgs ?? {};
|
|
95
|
+
const forModel = new Set(rejected[model] ?? []);
|
|
96
|
+
forModel.add(arg);
|
|
97
|
+
entry.rejectedArgs = { ...rejected, [model]: [...forModel] };
|
|
98
|
+
return m;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=lane-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lane-manifest.js","sourceRoot":"","sources":["../src/lane-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Config } from "./config.js";
|
|
2
|
+
/**
|
|
3
|
+
* `llm-relay lanes --probe` — ask each `cli` lane's own tool what it serves.
|
|
4
|
+
*
|
|
5
|
+
* ⚠ This is the ONE place the relay runs a `cli` lane's command, and the boundary is worth stating
|
|
6
|
+
* because CLAUDE.md says flatly that the relay never spawns one. That invariant is about the
|
|
7
|
+
* REQUEST PATH: a cli lane's quota is client-bound, it runs its own tool loop, and it returns only
|
|
8
|
+
* final text, so a relay that shelled out mid-request could never return the `tool_use` blocks an
|
|
9
|
+
* HTTP turn owes its caller. An operator running a diagnostic is not the request path — exactly as
|
|
10
|
+
* `pools --probe` sends real completions the request path would never send. Nothing here is
|
|
11
|
+
* reachable from `handle()`, and the request path reads only the CACHED manifest.
|
|
12
|
+
*
|
|
13
|
+
* Discovery is not symmetric (docs/lane-discovery.md):
|
|
14
|
+
* codex — `codex debug models` returns JSON including per-model `supported_reasoning_levels`,
|
|
15
|
+
* so both the id and the effort argument are validated with no API call spent.
|
|
16
|
+
* agy — `agy models` returns `id<TAB>label` and states nothing about flags, so its argument
|
|
17
|
+
* facts can only be learned from an observed rejection.
|
|
18
|
+
*/
|
|
19
|
+
export interface LaneProbeResult {
|
|
20
|
+
lane: string;
|
|
21
|
+
ok: boolean;
|
|
22
|
+
via: string;
|
|
23
|
+
modelCount: number;
|
|
24
|
+
error?: string;
|
|
25
|
+
}
|
|
26
|
+
/** Distinct `cli` commands the configured ladders actually reference. */
|
|
27
|
+
export declare function laneCommands(cfg: Config): Map<string, string>;
|
|
28
|
+
export declare function probeLanes(cfg: Config, path?: string): LaneProbeResult[];
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { execFileSync, execSync } from "node:child_process";
|
|
2
|
+
import { laneOfCommand, loadLaneManifest, saveLaneManifest, DEFAULT_MANIFEST_PATH, } from "./lane-manifest.js";
|
|
3
|
+
function run(command, args) {
|
|
4
|
+
const opts = {
|
|
5
|
+
encoding: "utf8",
|
|
6
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
7
|
+
timeout: 60_000,
|
|
8
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
9
|
+
};
|
|
10
|
+
try {
|
|
11
|
+
return execFileSync(command, args, opts);
|
|
12
|
+
}
|
|
13
|
+
catch (e) {
|
|
14
|
+
// ⚠ On Windows an npm-installed CLI is a `.cmd` shim, which execFileSync will not resolve
|
|
15
|
+
// without a shell — `codex` fails ENOENT while running fine in any terminal. Retry through the
|
|
16
|
+
// shell rather than defaulting to it: shell:true re-parses the command line, so it is the
|
|
17
|
+
// fallback, not the norm. Args here are fixed literals from the probers, never task content.
|
|
18
|
+
if (process.platform === "win32" && e.code === "ENOENT") {
|
|
19
|
+
// Passed as ONE command line rather than command+args: node deprecates the args form under
|
|
20
|
+
// `shell: true` because it concatenates without escaping. Every token here is a fixed literal
|
|
21
|
+
// from a prober above — no task content, no user input — and the path is quoted.
|
|
22
|
+
return execSync(`"${command}" ${args.join(" ")}`, opts);
|
|
23
|
+
}
|
|
24
|
+
throw e;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function probeCodex(command) {
|
|
28
|
+
const via = `${command} debug models`;
|
|
29
|
+
const raw = run(command, ["debug", "models"]);
|
|
30
|
+
const parsed = JSON.parse(raw);
|
|
31
|
+
if (!Array.isArray(parsed.models)) {
|
|
32
|
+
throw new Error(`codex catalog had no "models" array — keys: ${Object.keys(parsed).join(" | ")}`);
|
|
33
|
+
}
|
|
34
|
+
const models = [];
|
|
35
|
+
for (const m of parsed.models) {
|
|
36
|
+
const id = typeof m.slug === "string" ? m.slug : null;
|
|
37
|
+
if (!id)
|
|
38
|
+
continue;
|
|
39
|
+
const levels = Array.isArray(m.supported_reasoning_levels)
|
|
40
|
+
? m.supported_reasoning_levels
|
|
41
|
+
.map((r) => (typeof r.effort === "string" ? r.effort : null))
|
|
42
|
+
.filter((e) => e !== null)
|
|
43
|
+
: [];
|
|
44
|
+
models.push(levels.length > 0 ? { id, supports: { model_reasoning_effort: levels } } : { id });
|
|
45
|
+
}
|
|
46
|
+
if (models.length === 0)
|
|
47
|
+
throw new Error("codex catalog parsed to zero models — schema likely changed");
|
|
48
|
+
return { via, probedAt: new Date().toISOString(), models };
|
|
49
|
+
}
|
|
50
|
+
function probeAgy(command) {
|
|
51
|
+
const via = `${command} models`;
|
|
52
|
+
const raw = run(command, ["models"]);
|
|
53
|
+
const models = [];
|
|
54
|
+
for (const line of raw.split("\n")) {
|
|
55
|
+
// `id<TAB>Display Name`. A header/status line ("Fetching available models...") has no tab.
|
|
56
|
+
const [id] = line.split("\t");
|
|
57
|
+
const trimmed = id?.trim();
|
|
58
|
+
if (!trimmed || !line.includes("\t"))
|
|
59
|
+
continue;
|
|
60
|
+
models.push({ id: trimmed });
|
|
61
|
+
}
|
|
62
|
+
if (models.length === 0)
|
|
63
|
+
throw new Error("agy models parsed to zero models — output format likely changed");
|
|
64
|
+
// ⚠ No `supports` recorded: agy publishes nothing about flags, and inventing an empty support
|
|
65
|
+
// list would read as "supports nothing" and evict every argument.
|
|
66
|
+
return { via, probedAt: new Date().toISOString(), models };
|
|
67
|
+
}
|
|
68
|
+
const PROBERS = {
|
|
69
|
+
codex: probeCodex,
|
|
70
|
+
agy: probeAgy,
|
|
71
|
+
};
|
|
72
|
+
/** Distinct `cli` commands the configured ladders actually reference. */
|
|
73
|
+
export function laneCommands(cfg) {
|
|
74
|
+
const found = new Map();
|
|
75
|
+
const ladders = cfg.routing.ladders ?? {};
|
|
76
|
+
const all = [...Object.values(ladders).flat(), ...(cfg.routing.ladder ?? [])];
|
|
77
|
+
for (const rung of all) {
|
|
78
|
+
if (rung?.kind !== "cli" || typeof rung.command !== "string")
|
|
79
|
+
continue;
|
|
80
|
+
const lane = laneOfCommand(rung.command);
|
|
81
|
+
if (lane && !found.has(lane))
|
|
82
|
+
found.set(lane, rung.command);
|
|
83
|
+
}
|
|
84
|
+
return found;
|
|
85
|
+
}
|
|
86
|
+
export function probeLanes(cfg, path = DEFAULT_MANIFEST_PATH) {
|
|
87
|
+
const existing = loadLaneManifest(path);
|
|
88
|
+
const manifest = existing ?? { version: 1, lanes: {} };
|
|
89
|
+
const results = [];
|
|
90
|
+
for (const [lane, command] of laneCommands(cfg)) {
|
|
91
|
+
const prober = PROBERS[lane];
|
|
92
|
+
if (!prober) {
|
|
93
|
+
results.push({ lane, ok: false, via: command, modelCount: 0, error: "no prober for this lane" });
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
const entry = prober(command);
|
|
98
|
+
// Learned argument rejections survive a re-probe: they are existence facts about a flag,
|
|
99
|
+
// and the roster reading that replaces the model list says nothing about them.
|
|
100
|
+
const previous = manifest.lanes[lane]?.rejectedArgs;
|
|
101
|
+
manifest.lanes[lane] = previous ? { ...entry, rejectedArgs: previous } : entry;
|
|
102
|
+
results.push({ lane, ok: true, via: entry.via, modelCount: entry.models.length });
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
// A failed probe leaves any PREVIOUS entry untouched — losing a good roster because the tool
|
|
106
|
+
// was momentarily unavailable would evict working rungs.
|
|
107
|
+
results.push({ lane, ok: false, via: command, modelCount: 0, error: e.message });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
saveLaneManifest(manifest, path);
|
|
111
|
+
return results;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=lane-probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lane-probe.js","sourceRoot":"","sources":["../src/lane-probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,GAItB,MAAM,oBAAoB,CAAC;AA4B5B,SAAS,GAAG,CAAC,OAAe,EAAE,IAAc;IAC1C,MAAM,IAAI,GAAG;QACX,QAAQ,EAAE,MAAe;QACzB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;QAC3B,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAA0B;KAC3D,CAAC;IACF,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,0FAA0F;QAC1F,+FAA+F;QAC/F,0FAA0F;QAC1F,6FAA6F;QAC7F,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnF,2FAA2F;YAC3F,8FAA8F;YAC9F,iFAAiF;YACjF,OAAO,QAAQ,CAAC,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,OAAe;IACjC,MAAM,GAAG,GAAG,GAAG,OAAO,eAAe,CAAC;IACtC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgD,CAAC;IAC9E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,+CAA+C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACtD,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;YACxD,CAAC,CAAE,CAAC,CAAC,0BAA6D;iBAC7D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBAC5D,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;YAC3C,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,sBAAsB,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACxG,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAC/B,MAAM,GAAG,GAAG,GAAG,OAAO,SAAS,CAAC;IAChC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,2FAA2F;QAC3F,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IAC5G,8FAA8F;IAC9F,kEAAkE;IAClE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC;AAC7D,CAAC;AAED,MAAM,OAAO,GAAmD;IAC9D,KAAK,EAAE,UAAU;IACjB,GAAG,EAAE,QAAQ;CACd,CAAC;AAEF,yEAAyE;AACzE,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9E,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,EAAE,IAAI,KAAK,KAAK,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;YAAE,SAAS;QACvE,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,OAAe,qBAAqB;IAC1E,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAiB,QAAQ,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACrE,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;YACjG,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9B,yFAAyF;YACzF,+EAA+E;YAC/E,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;YACpD,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACpF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,6FAA6F;YAC7F,yDAAyD;YACzD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAG,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjC,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/routes/admin.js
CHANGED
|
@@ -2,6 +2,7 @@ import { unroutableOffloadClient } from "../config.js";
|
|
|
2
2
|
import { buildRegistry } from "../registry.js";
|
|
3
3
|
import { buildCandidates } from "../candidates.js";
|
|
4
4
|
import { offloadState, setOffload } from "../offload.js";
|
|
5
|
+
import { loadLaneManifest } from "../lane-manifest.js";
|
|
5
6
|
import { buildDispatch, markExhausted, clearExhausted, OUTCOME_DEFAULT_MS } from "../dispatch.js";
|
|
6
7
|
import { parseHostRoutingState } from "../host-routing.js";
|
|
7
8
|
import { contextWindowResolver } from "../metadata.js";
|
|
@@ -229,6 +230,8 @@ export async function handleAdminRoutes(req, res, pathname, path, started, reqJs
|
|
|
229
230
|
const hostParam = parseHostRoutingState(pickQuery(path, "host"));
|
|
230
231
|
const entrypointParam = pickQuery(path, "entrypoint");
|
|
231
232
|
const view = buildDispatch(cfg, {
|
|
233
|
+
// Cached manifest only — the request path never probes. Absent ⇒ nothing is evicted.
|
|
234
|
+
manifest: loadLaneManifest(),
|
|
232
235
|
...(taskParam ? { task: taskParam } : {}),
|
|
233
236
|
...(pickQuery(path, "lane") ? { lane: pickQuery(path, "lane") } : {}),
|
|
234
237
|
...(pickQuery(path, "after") ? { after: pickQuery(path, "after") } : {}),
|
package/dist/routes/admin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/routes/admin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/routes/admin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recovering tool calls a HOST failed to parse.
|
|
3
|
+
*
|
|
4
|
+
* A model emits tool calls in its own dialect; the serving host is supposed to parse that into the
|
|
5
|
+
* OpenAI `message.tool_calls` field. NIM and OpenRouter do. Some free hosts do not, and hand back
|
|
6
|
+
* the raw envelope as ordinary assistant TEXT. Before this module the consequence was silent and
|
|
7
|
+
* total: no `tool_calls` ⇒ `stop_reason: end_turn` ⇒ zero `tool_use` blocks ⇒ the validator finds
|
|
8
|
+
* nothing malformed and PASSES ⇒ repair never engages ⇒ the client receives markup it treats as a
|
|
9
|
+
* final answer. Measured 2026-08-08: a task wrote its output correctly and then emitted
|
|
10
|
+
* `</|DSML|parameter></|DSML|invoke></|DSML|tool_calls>` as its entire visible response.
|
|
11
|
+
* See docs/tool-call-dialect-leak.md.
|
|
12
|
+
*
|
|
13
|
+
* ⚠ This is PARSING, not inference — the same side of the repair boundary as fixing args that
|
|
14
|
+
* violate a schema. The envelope set is CLOSED (same reasoning as the effort vocabulary in
|
|
15
|
+
* sync-tiers.mjs and the alias list in authEnv.ts): prose that merely mentions a tool name is not a
|
|
16
|
+
* tool call, and promoting it to one would be fabricating intent, which is the one thing the repair
|
|
17
|
+
* path must never do. A dialect we do not recognize yields `detected` at most, never a guess.
|
|
18
|
+
*/
|
|
19
|
+
/** JSON Schema fragment, only the parts used to coerce a stringly-typed parameter. */
|
|
20
|
+
interface SchemaLike {
|
|
21
|
+
type?: unknown;
|
|
22
|
+
properties?: Record<string, SchemaLike>;
|
|
23
|
+
items?: SchemaLike;
|
|
24
|
+
}
|
|
25
|
+
export interface DialectToolCall {
|
|
26
|
+
name: string;
|
|
27
|
+
input: Record<string, unknown>;
|
|
28
|
+
}
|
|
29
|
+
export type DialectOutcome =
|
|
30
|
+
/** No tool-call framing present. The text is just text. */
|
|
31
|
+
{
|
|
32
|
+
status: "none";
|
|
33
|
+
}
|
|
34
|
+
/** Framing found and fully parsed. `text` is what remains after removing the envelope. */
|
|
35
|
+
| {
|
|
36
|
+
status: "parsed";
|
|
37
|
+
calls: DialectToolCall[];
|
|
38
|
+
text: string;
|
|
39
|
+
dialect: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Framing markers present but unparseable — truncated mid-stream, or a dialect variant we do not
|
|
43
|
+
* model. NEVER guessed at: the caller fails clean so failover reaches a host that parses.
|
|
44
|
+
*/
|
|
45
|
+
| {
|
|
46
|
+
status: "detected";
|
|
47
|
+
dialect: string;
|
|
48
|
+
};
|
|
49
|
+
export declare function detectDialect(text: string): string | null;
|
|
50
|
+
/**
|
|
51
|
+
* Recover tool calls from a text block a host failed to parse.
|
|
52
|
+
*
|
|
53
|
+
* `schemas` supplies declared parameter types for the dialects that carry parameters as strings;
|
|
54
|
+
* without it those values stay strings and the validator reports the type error, which is the
|
|
55
|
+
* correct visible failure rather than a silent coercion.
|
|
56
|
+
*/
|
|
57
|
+
export declare function recoverToolCalls(text: string, schemas?: Map<string, SchemaLike>): DialectOutcome;
|
|
58
|
+
export {};
|