harness-dispatch 0.7.8 → 0.8.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 +706 -1
- package/README.md +35 -5
- package/config.default.yaml +30 -2
- package/dist/auth.d.ts +29 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +58 -5
- package/dist/auth.js.map +1 -1
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +449 -21
- package/dist/bin.js.map +1 -1
- package/dist/breaker-store.d.ts +25 -1
- package/dist/breaker-store.d.ts.map +1 -1
- package/dist/breaker-store.js +193 -25
- package/dist/breaker-store.js.map +1 -1
- package/dist/client-register.d.ts +147 -0
- package/dist/client-register.d.ts.map +1 -0
- package/dist/client-register.js +380 -0
- package/dist/client-register.js.map +1 -0
- package/dist/config/validation.d.ts +29 -0
- package/dist/config/validation.d.ts.map +1 -1
- package/dist/config/validation.js +88 -0
- package/dist/config/validation.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +55 -2
- package/dist/config.js.map +1 -1
- package/dist/dispatch-log.d.ts +14 -0
- package/dist/dispatch-log.d.ts.map +1 -1
- package/dist/dispatch-log.js +3 -0
- package/dist/dispatch-log.js.map +1 -1
- package/dist/dispatchers/generic-cli.d.ts.map +1 -1
- package/dist/dispatchers/generic-cli.js +35 -0
- package/dist/dispatchers/generic-cli.js.map +1 -1
- package/dist/dispatchers/openai-compatible.d.ts +20 -4
- package/dist/dispatchers/openai-compatible.d.ts.map +1 -1
- package/dist/dispatchers/openai-compatible.js +145 -17
- package/dist/dispatchers/openai-compatible.js.map +1 -1
- package/dist/dispatchers/shared/rate-limit-headers.d.ts +4 -2
- package/dist/dispatchers/shared/rate-limit-headers.d.ts.map +1 -1
- package/dist/dispatchers/shared/rate-limit-headers.js +4 -2
- package/dist/dispatchers/shared/rate-limit-headers.js.map +1 -1
- package/dist/http/answer-stream.d.ts +52 -0
- package/dist/http/answer-stream.d.ts.map +1 -0
- package/dist/http/answer-stream.js +47 -0
- package/dist/http/answer-stream.js.map +1 -0
- package/dist/http/parse.d.ts.map +1 -1
- package/dist/http/parse.js +41 -0
- package/dist/http/parse.js.map +1 -1
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +102 -9
- package/dist/http/server.js.map +1 -1
- package/dist/jobs/store.d.ts.map +1 -1
- package/dist/jobs/store.js +45 -4
- package/dist/jobs/store.js.map +1 -1
- package/dist/jobs.d.ts +24 -0
- package/dist/jobs.d.ts.map +1 -1
- package/dist/jobs.js +101 -1
- package/dist/jobs.js.map +1 -1
- package/dist/mcp/config-hot-reload.d.ts.map +1 -1
- package/dist/mcp/config-hot-reload.js +10 -0
- package/dist/mcp/config-hot-reload.js.map +1 -1
- package/dist/mcp/near-miss-guard.d.ts +45 -0
- package/dist/mcp/near-miss-guard.d.ts.map +1 -0
- package/dist/mcp/near-miss-guard.js +98 -0
- package/dist/mcp/near-miss-guard.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +36 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-schemas.d.ts.map +1 -1
- package/dist/mcp/tool-schemas.js +21 -4
- package/dist/mcp/tool-schemas.js.map +1 -1
- package/dist/mcp/tools.d.ts +32 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +41 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp-clients.d.ts +63 -0
- package/dist/mcp-clients.d.ts.map +1 -0
- package/dist/mcp-clients.js +117 -0
- package/dist/mcp-clients.js.map +1 -0
- package/dist/near-miss.d.ts +63 -0
- package/dist/near-miss.d.ts.map +1 -0
- package/dist/near-miss.js +132 -0
- package/dist/near-miss.js.map +1 -0
- package/dist/quota.d.ts +31 -1
- package/dist/quota.d.ts.map +1 -1
- package/dist/quota.js +68 -6
- package/dist/quota.js.map +1 -1
- package/dist/route-policy.d.ts +10 -0
- package/dist/route-policy.d.ts.map +1 -1
- package/dist/route-policy.js +20 -2
- package/dist/route-policy.js.map +1 -1
- package/dist/router.d.ts +61 -2
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +165 -29
- package/dist/router.js.map +1 -1
- package/dist/safety.d.ts.map +1 -1
- package/dist/safety.js +31 -1
- package/dist/safety.js.map +1 -1
- package/dist/status.d.ts +30 -21
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +152 -8
- package/dist/status.js.map +1 -1
- package/dist/types.d.ts +43 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/working-dir.d.ts.map +1 -1
- package/dist/working-dir.js +16 -0
- package/dist/working-dir.js.map +1 -1
- package/dist/workspace-resolve.d.ts.map +1 -1
- package/dist/workspace-resolve.js +119 -15
- package/dist/workspace-resolve.js.map +1 -1
- package/dist/workspaces.d.ts +83 -0
- package/dist/workspaces.d.ts.map +1 -1
- package/dist/workspaces.js +288 -15
- package/dist/workspaces.js.map +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Did you mean…" for a top-level key that is one typo from a hint name.
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS EXISTS. Neither surface's outer object can be strict — MCP carries
|
|
5
|
+
* `_meta`, and the HTTP surface must tolerate OpenAI's own fields — so an
|
|
6
|
+
* unknown top-level key was accepted and dropped on both. The named traps in
|
|
7
|
+
* mcp/tool-schemas.ts and http/parse.ts catch the snake_case spellings, which
|
|
8
|
+
* are the predictable slip. A plain typo is not enumerable and had the same
|
|
9
|
+
* consequence: `safteyProfile` returned success and the dispatch ran at the
|
|
10
|
+
* default `workspace_edit` — more access than the caller asked for, with no
|
|
11
|
+
* signal — while the correct spelling produced `read_only`.
|
|
12
|
+
*
|
|
13
|
+
* ONE COPY ON PURPOSE. This file exists because the alternative is the same
|
|
14
|
+
* rule written twice, and tool-schemas.ts already records where that leads:
|
|
15
|
+
* "Three independent copies of one rule is how they diverged". The surfaces
|
|
16
|
+
* disagreeing about which keys are typos would be exactly the "same input, two
|
|
17
|
+
* answers" class the parity suite was built to end.
|
|
18
|
+
*/
|
|
19
|
+
/** The hint names a caller can plausibly mistype at the top level. */
|
|
20
|
+
export const HINT_KEY_NAMES = [
|
|
21
|
+
"safetyProfile",
|
|
22
|
+
"routePolicy",
|
|
23
|
+
"taskType",
|
|
24
|
+
"workspacePolicy",
|
|
25
|
+
"preferLargeContext",
|
|
26
|
+
"timeoutMs",
|
|
27
|
+
"workingDir",
|
|
28
|
+
];
|
|
29
|
+
/**
|
|
30
|
+
* The hint name this key is one typo away from, or undefined.
|
|
31
|
+
*
|
|
32
|
+
* Returns undefined for an exact match: that is a correct key, not a near miss.
|
|
33
|
+
*/
|
|
34
|
+
export function nearMissHintKey(key) {
|
|
35
|
+
if (HINT_KEY_NAMES.includes(key))
|
|
36
|
+
return undefined;
|
|
37
|
+
return HINT_KEY_NAMES.find((known) => withinOneTypo(key, known));
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* One typo apart: an insertion, deletion, substitution, or a swap of two
|
|
41
|
+
* adjacent characters.
|
|
42
|
+
*
|
|
43
|
+
* The swap is not an extra. `safteyProfile` is the exact spelling an acceptance
|
|
44
|
+
* pass typed, and plain edit distance scores a transposition as TWO
|
|
45
|
+
* substitutions — so a rule without it misses the case it was written for.
|
|
46
|
+
*
|
|
47
|
+
* Deliberately tight in the other direction too: at a true distance of two,
|
|
48
|
+
* short field names from the OpenAI protocol start matching, and refusing a
|
|
49
|
+
* legitimate request would be its own defect.
|
|
50
|
+
*/
|
|
51
|
+
export function withinOneTypo(a, b) {
|
|
52
|
+
if (a === b)
|
|
53
|
+
return false;
|
|
54
|
+
if (isAdjacentSwap(a, b))
|
|
55
|
+
return true;
|
|
56
|
+
if (Math.abs(a.length - b.length) > 1)
|
|
57
|
+
return false;
|
|
58
|
+
const [short, long] = a.length <= b.length ? [a, b] : [b, a];
|
|
59
|
+
let i = 0;
|
|
60
|
+
let j = 0;
|
|
61
|
+
let edits = 0;
|
|
62
|
+
while (i < short.length && j < long.length) {
|
|
63
|
+
if (short[i] === long[j]) {
|
|
64
|
+
i += 1;
|
|
65
|
+
j += 1;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (++edits > 1)
|
|
69
|
+
return false;
|
|
70
|
+
if (short.length === long.length)
|
|
71
|
+
i += 1;
|
|
72
|
+
j += 1;
|
|
73
|
+
}
|
|
74
|
+
return edits + (long.length - j) + (short.length - i) <= 1;
|
|
75
|
+
}
|
|
76
|
+
/** Two adjacent characters swapped, and otherwise identical. */
|
|
77
|
+
function isAdjacentSwap(a, b) {
|
|
78
|
+
if (a.length !== b.length)
|
|
79
|
+
return false;
|
|
80
|
+
const diff = [];
|
|
81
|
+
for (let i = 0; i < a.length; i += 1) {
|
|
82
|
+
if (a[i] !== b[i])
|
|
83
|
+
diff.push(i);
|
|
84
|
+
if (diff.length > 2)
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
if (diff.length !== 2)
|
|
88
|
+
return false;
|
|
89
|
+
const [x, y] = diff;
|
|
90
|
+
return y === x + 1 && a[x] === b[y] && a[y] === b[x];
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Where each hint name legitimately goes on the MCP surface.
|
|
94
|
+
*
|
|
95
|
+
* Only these two are top-level `dispatch` parameters; the rest are `z.never()`
|
|
96
|
+
* traps there and belong inside `hints`. The HTTP surface reads ALL SEVEN from
|
|
97
|
+
* the top level of the request body (`http/parse.ts`), which is why the advice
|
|
98
|
+
* below has to know which surface is asking.
|
|
99
|
+
*/
|
|
100
|
+
const MCP_TOP_LEVEL_NAMES = new Set(["workingDir", "workspacePolicy"]);
|
|
101
|
+
/**
|
|
102
|
+
* The message both surfaces give — same RULE, correct advice for each.
|
|
103
|
+
*
|
|
104
|
+
* The rule is shared on purpose (see this file's header). The advice cannot
|
|
105
|
+
* be: a single "did you mean X?" sent the caller somewhere the surface would
|
|
106
|
+
* refuse or ignore, which is the failure `tool-schemas.ts` already records
|
|
107
|
+
* from its own snake_case traps — "a refusal that confidently points at the
|
|
108
|
+
* wrong landing spot costs the round trip it exists to save". An acceptance
|
|
109
|
+
* pass measured the new message repeating it: correcting `safteyProfile` to
|
|
110
|
+
* `safetyProfile` on MCP `dispatch` produced a SECOND rejection, because the
|
|
111
|
+
* corrected spelling is a trap at that level.
|
|
112
|
+
*
|
|
113
|
+
* `toolName` is MCP-only and names the tool the call was for. On a tool that
|
|
114
|
+
* takes no hints at all — `job_status`, `usage`, `cancel_job`, `retry_job`,
|
|
115
|
+
* `workspace` — the corrected spelling is simply not a field, and the old
|
|
116
|
+
* message's "the dispatch runs with MORE access than you asked for" was false
|
|
117
|
+
* on every one of them: none of them dispatch anything.
|
|
118
|
+
*/
|
|
119
|
+
export function nearMissMessage(key, meant, opts = { surface: "http" }) {
|
|
120
|
+
const head = `${key} is not a field — did you mean ${meant}?`;
|
|
121
|
+
const ignored = "As written it is accepted and silently ignored";
|
|
122
|
+
const safetyTail = ", which for a safety setting means the run gets MORE access than you asked for.";
|
|
123
|
+
if (opts.surface === "mcp" && opts.toolName !== undefined && opts.toolName !== "dispatch") {
|
|
124
|
+
return (`${head} Neither spelling is a field on \`${opts.toolName}\` — hints apply to ` +
|
|
125
|
+
`\`dispatch\`. ${ignored}.`);
|
|
126
|
+
}
|
|
127
|
+
const where = opts.surface === "mcp" && !MCP_TOP_LEVEL_NAMES.has(meant)
|
|
128
|
+
? `On this surface it goes inside \`hints\` — hints: { ${meant}: ... }.`
|
|
129
|
+
: `It belongs at the top level of the request.`;
|
|
130
|
+
return `${head} ${where} ${ignored}${safetyTail}`;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=near-miss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"near-miss.js","sourceRoot":"","sources":["../src/near-miss.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,sEAAsE;AACtE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,eAAe;IACf,aAAa;IACb,UAAU;IACV,iBAAiB;IACjB,oBAAoB;IACpB,WAAW;IACX,YAAY;CACJ,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAK,cAAoC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1E,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,CAAS;IAChD,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACpD,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,CAAC,IAAI,CAAC,CAAC;YACP,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YAAE,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IACD,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,gEAAgE;AAChE,SAAS,cAAc,CAAC,CAAS,EAAE,CAAS;IAC1C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAwB,CAAC;IACxC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAIvE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAW,EACX,KAAa,EACb,OAAwD,EAAE,OAAO,EAAE,MAAM,EAAE;IAE3E,MAAM,IAAI,GAAG,GAAG,GAAG,kCAAkC,KAAK,GAAG,CAAC;IAC9D,MAAM,OAAO,GAAG,gDAAgD,CAAC;IACjE,MAAM,UAAU,GACd,iFAAiF,CAAC;IAEpF,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC1F,OAAO,CACL,GAAG,IAAI,qCAAqC,IAAI,CAAC,QAAQ,sBAAsB;YAC/E,iBAAiB,OAAO,GAAG,CAC5B,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GACT,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;QACvD,CAAC,CAAC,uDAAuD,KAAK,UAAU;QACxE,CAAC,CAAC,6CAA6C,CAAC;IACpD,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;AACpD,CAAC"}
|
package/dist/quota.d.ts
CHANGED
|
@@ -117,6 +117,8 @@ export declare class QuotaCache {
|
|
|
117
117
|
*/
|
|
118
118
|
private pendingDelta;
|
|
119
119
|
private persistCounter;
|
|
120
|
+
/** Last failure to persist local counts; surfaced by status. */
|
|
121
|
+
private persistError;
|
|
120
122
|
constructor(dispatchers: Record<string, Dispatcher>, opts?: QuotaCacheOptions);
|
|
121
123
|
getQuotaScore(service: string): Promise<number>;
|
|
122
124
|
private bumpDelta;
|
|
@@ -178,7 +180,35 @@ export declare class QuotaCache {
|
|
|
178
180
|
* an absolute value simply take turns writing the same number.
|
|
179
181
|
*/
|
|
180
182
|
saveLocalCountsSync(): void;
|
|
181
|
-
/**
|
|
183
|
+
/**
|
|
184
|
+
* Why local counters are not reaching disk, or undefined if they are.
|
|
185
|
+
*
|
|
186
|
+
* Read by `buildStatus`. Deliberately not thrown: a dispatch that produced a
|
|
187
|
+
* real answer must not fail because a counter could not be written.
|
|
188
|
+
*/
|
|
189
|
+
localCountsPersistError(): string | undefined;
|
|
190
|
+
/**
|
|
191
|
+
* Current on-disk state, or {} if unreadable.
|
|
192
|
+
*
|
|
193
|
+
* `{}` used to mean two different things — "no file yet" and "a file I could
|
|
194
|
+
* not read" — and the caller applies its delta to whatever this returns and
|
|
195
|
+
* writes the result back. So one unparseable read did not merely stop
|
|
196
|
+
* counting: it REPLACED every route's history with a single route at 1.
|
|
197
|
+
* Measured — two routes with 5 and 3 calls became one route with 1, and
|
|
198
|
+
* `usage` then reported that as fact, on the surface this project's own
|
|
199
|
+
* instructions tell an orchestrator to consult before delegating.
|
|
200
|
+
*
|
|
201
|
+
* The file is moved aside rather than overwritten. Counters are
|
|
202
|
+
* informational, so this does not try to recover them; it just declines to
|
|
203
|
+
* be the thing that destroys them, and leaves the evidence next to the file.
|
|
204
|
+
*/
|
|
182
205
|
private readStateFile;
|
|
206
|
+
/**
|
|
207
|
+
* Move an unreadable state file aside so the write that follows cannot
|
|
208
|
+
* destroy it. Best-effort in every direction: this runs on the counter path,
|
|
209
|
+
* which must never fail a dispatch, and a failed rename simply leaves the
|
|
210
|
+
* previous behaviour.
|
|
211
|
+
*/
|
|
212
|
+
private quarantineUnreadableState;
|
|
183
213
|
}
|
|
184
214
|
//# sourceMappingURL=quota.d.ts.map
|
package/dist/quota.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quota.d.ts","sourceRoot":"","sources":["../src/quota.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAeH,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAMxD,eAAO,MAAM,oBAAoB,SAAU,CAAC;AAC5C,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAoBjD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+EAA+E;IAC/E,qBAAqB,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,kEAAkE;AAClE,qBAAa,UAAU;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9B,MAAM,EAAE,MAAM,CAAa;IAC3B,YAAY,SAAK;gBAEL,OAAO,EAAE,MAAM;IAI3B,IAAI,KAAK,IAAI,MAAM,CAQlB;IAED,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAS1C,MAAM,IAAI,IAAI,CACZ,cAAc,EACZ,gBAAgB,GAChB,mBAAmB,GACnB,mBAAmB,GACnB,uBAAuB,GACvB,kBAAkB,GAClB,mBAAmB,CACtB;CAYF;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAkC;IAChD,qEAAqE;IACrE,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,sBAAsB,CAAyB;IACvD;;;;;;;;;OASG;IACH,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,iBAAiB,CAAyB;IAClD;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,YAAY,CAA2I;IAC/J,OAAO,CAAC,cAAc,CAAK;
|
|
1
|
+
{"version":3,"file":"quota.d.ts","sourceRoot":"","sources":["../src/quota.ts"],"names":[],"mappings":"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"}
|
package/dist/quota.js
CHANGED
|
@@ -139,6 +139,8 @@ export class QuotaCache {
|
|
|
139
139
|
*/
|
|
140
140
|
pendingDelta = {};
|
|
141
141
|
persistCounter = 0;
|
|
142
|
+
/** Last failure to persist local counts; surfaced by status. */
|
|
143
|
+
persistError;
|
|
142
144
|
constructor(dispatchers, opts = {}) {
|
|
143
145
|
this.dispatchers = dispatchers;
|
|
144
146
|
this.ttlMs = opts.ttlMs ?? DEFAULT_QUOTA_TTL_MS;
|
|
@@ -214,8 +216,18 @@ export class QuotaCache {
|
|
|
214
216
|
const remaining = parseRemaining(result.rateLimitHeaders);
|
|
215
217
|
const limit = parseLimit(result.rateLimitHeaders);
|
|
216
218
|
if (remaining !== null || limit !== null) {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
+
// Each field is assigned only when it ARRIVED. Both were assigned
|
|
220
|
+
// unconditionally under a guard that only asks whether EITHER did, so a
|
|
221
|
+
// response carrying `remaining` and no `limit` — which providers send —
|
|
222
|
+
// nulled the limit this cache already knew. With no limit there is no
|
|
223
|
+
// ratio, so the score went back to a full 1.0: measured at
|
|
224
|
+
// `remaining: 2` scoring the same as an untouched route, and the router
|
|
225
|
+
// then preferred it. Right about "some header arrived", wrong one case
|
|
226
|
+
// over. Headers are a partial update, not a replacement.
|
|
227
|
+
if (remaining !== null)
|
|
228
|
+
state.remaining = remaining;
|
|
229
|
+
if (limit !== null)
|
|
230
|
+
state.limit = limit;
|
|
219
231
|
state.source = "headers";
|
|
220
232
|
state.updatedAtSec = monotonicSec();
|
|
221
233
|
}
|
|
@@ -448,23 +460,73 @@ export class QuotaCache {
|
|
|
448
460
|
// Only cleared once the write succeeded, so a failure is retried rather
|
|
449
461
|
// than silently dropped.
|
|
450
462
|
this.pendingDelta = {};
|
|
463
|
+
this.persistError = undefined;
|
|
451
464
|
}
|
|
452
|
-
catch {
|
|
453
|
-
//
|
|
465
|
+
catch (err) {
|
|
466
|
+
// Never fail a dispatch over a counter — but do not pretend it worked.
|
|
467
|
+
//
|
|
468
|
+
// The in-process view keeps serving the numbers it accumulated, so
|
|
469
|
+
// nothing looks wrong until the server restarts and every count is zero.
|
|
470
|
+
// Two acceptance passes measured that: four recorded results, no file on
|
|
471
|
+
// disk, no error, and `usage` reporting the counts as fact until the
|
|
472
|
+
// next boot. Recorded here so `status` can say the numbers are not
|
|
473
|
+
// durable, which is the honest answer to "how much have I used this?".
|
|
474
|
+
this.persistError = err instanceof Error ? err.message : String(err);
|
|
454
475
|
}
|
|
455
476
|
}
|
|
456
|
-
/**
|
|
477
|
+
/**
|
|
478
|
+
* Why local counters are not reaching disk, or undefined if they are.
|
|
479
|
+
*
|
|
480
|
+
* Read by `buildStatus`. Deliberately not thrown: a dispatch that produced a
|
|
481
|
+
* real answer must not fail because a counter could not be written.
|
|
482
|
+
*/
|
|
483
|
+
localCountsPersistError() {
|
|
484
|
+
return this.persistError;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Current on-disk state, or {} if unreadable.
|
|
488
|
+
*
|
|
489
|
+
* `{}` used to mean two different things — "no file yet" and "a file I could
|
|
490
|
+
* not read" — and the caller applies its delta to whatever this returns and
|
|
491
|
+
* writes the result back. So one unparseable read did not merely stop
|
|
492
|
+
* counting: it REPLACED every route's history with a single route at 1.
|
|
493
|
+
* Measured — two routes with 5 and 3 calls became one route with 1, and
|
|
494
|
+
* `usage` then reported that as fact, on the surface this project's own
|
|
495
|
+
* instructions tell an orchestrator to consult before delegating.
|
|
496
|
+
*
|
|
497
|
+
* The file is moved aside rather than overwritten. Counters are
|
|
498
|
+
* informational, so this does not try to recover them; it just declines to
|
|
499
|
+
* be the thing that destroys them, and leaves the evidence next to the file.
|
|
500
|
+
*/
|
|
457
501
|
readStateFile() {
|
|
458
502
|
try {
|
|
459
503
|
if (!existsSync(this.stateFile))
|
|
460
504
|
return {};
|
|
461
505
|
const parsed = JSON.parse(readFileSync(this.stateFile, "utf-8"));
|
|
462
|
-
|
|
506
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed))
|
|
507
|
+
return parsed;
|
|
508
|
+
this.quarantineUnreadableState();
|
|
509
|
+
return {};
|
|
463
510
|
}
|
|
464
511
|
catch {
|
|
512
|
+
this.quarantineUnreadableState();
|
|
465
513
|
return {};
|
|
466
514
|
}
|
|
467
515
|
}
|
|
516
|
+
/**
|
|
517
|
+
* Move an unreadable state file aside so the write that follows cannot
|
|
518
|
+
* destroy it. Best-effort in every direction: this runs on the counter path,
|
|
519
|
+
* which must never fail a dispatch, and a failed rename simply leaves the
|
|
520
|
+
* previous behaviour.
|
|
521
|
+
*/
|
|
522
|
+
quarantineUnreadableState() {
|
|
523
|
+
try {
|
|
524
|
+
renameSync(this.stateFile, `${this.stateFile}.corrupt`);
|
|
525
|
+
}
|
|
526
|
+
catch {
|
|
527
|
+
// Nothing to do — the caller returns {} either way.
|
|
528
|
+
}
|
|
529
|
+
}
|
|
468
530
|
}
|
|
469
531
|
// ---------------------------------------------------------------------------
|
|
470
532
|
// Helpers
|
package/dist/quota.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quota.js","sourceRoot":"","sources":["../src/quota.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"quota.js","sourceRoot":"","sources":["../src/quota.ts"],"names":[],"mappings":"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"}
|
package/dist/route-policy.d.ts
CHANGED
|
@@ -21,4 +21,14 @@ export declare function evaluateRoutePolicy(route: string, svc: ServiceConfig, o
|
|
|
21
21
|
* subscription you're already paying for or a free local model.
|
|
22
22
|
*/
|
|
23
23
|
export declare function nonLocalIncludedRoutePenalty(billing: RouteBilling): number;
|
|
24
|
+
/**
|
|
25
|
+
* Exported because `taskType: "local"` needs the SAME answer this file gives
|
|
26
|
+
* `routePolicy: "local_only"`. It had its own narrower test — a loopback
|
|
27
|
+
* hostname — so a route declaring provider `local`, surface `local_endpoint`,
|
|
28
|
+
* auth `local_network` and billing `local_compute` was "local" enough to be
|
|
29
|
+
* the only thing `local_only` would run, and not local enough for the task
|
|
30
|
+
* type named after it. One word, two meanings, and the narrow one silently
|
|
31
|
+
* excluded a real local box on a LAN or tailnet address.
|
|
32
|
+
*/
|
|
33
|
+
export declare function isLocalRoute(billing: RouteBilling): boolean;
|
|
24
34
|
//# sourceMappingURL=route-policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-policy.d.ts","sourceRoot":"","sources":["../src/route-policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,aAAa,EACb,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,aAAa,EAClB,IAAI,GAAE;IACJ,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sBAAsB,CAAC,EAAE,aAAa,CAAC;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;CACtB,GACL,iBAAiB,
|
|
1
|
+
{"version":3,"file":"route-policy.d.ts","sourceRoot":"","sources":["../src/route-policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,aAAa,EACb,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,aAAa,EAClB,IAAI,GAAE;IACJ,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sBAAsB,CAAC,EAAE,aAAa,CAAC;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;CACtB,GACL,iBAAiB,CAwEnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAI1E;AAwCD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAO3D"}
|
package/dist/route-policy.js
CHANGED
|
@@ -20,7 +20,16 @@ export function evaluateRoutePolicy(route, svc, opts = {}) {
|
|
|
20
20
|
if (billingIsUnknown(billing) &&
|
|
21
21
|
!isIncludedOrLocalRoute(billing) &&
|
|
22
22
|
!billing.allowPaidUsage) {
|
|
23
|
-
|
|
23
|
+
// Two different conditions reach here and they need different words.
|
|
24
|
+
// `billingIsUnknown` is true when the KIND is unknown OR the CONFIDENCE
|
|
25
|
+
// is. Saying "billing source is unknown" for both told an operator that
|
|
26
|
+
// about a route `status` prints as `billing=metered_api` — the kind is
|
|
27
|
+
// known perfectly well; what is unknown is how sure we are of it. An
|
|
28
|
+
// acceptance pass caught the two surfaces contradicting each other.
|
|
29
|
+
const why = billing.kind === "unknown"
|
|
30
|
+
? "billing source is unknown"
|
|
31
|
+
: `billing is recorded as ${billing.kind} but its confidence is unknown`;
|
|
32
|
+
return skip(route, "unknown_billing", `${why} and paid usage is not allowed — this is a config-level ` +
|
|
24
33
|
`block, not an availability problem; the operator must add \`allow_paid_usage: true\` ` +
|
|
25
34
|
`to '${route}' in config.yaml to enable it`);
|
|
26
35
|
}
|
|
@@ -79,7 +88,16 @@ function evaluateOperationalRoutePolicy(route, billing, routePolicy) {
|
|
|
79
88
|
}
|
|
80
89
|
return { blocked: false };
|
|
81
90
|
}
|
|
82
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Exported because `taskType: "local"` needs the SAME answer this file gives
|
|
93
|
+
* `routePolicy: "local_only"`. It had its own narrower test — a loopback
|
|
94
|
+
* hostname — so a route declaring provider `local`, surface `local_endpoint`,
|
|
95
|
+
* auth `local_network` and billing `local_compute` was "local" enough to be
|
|
96
|
+
* the only thing `local_only` would run, and not local enough for the task
|
|
97
|
+
* type named after it. One word, two meanings, and the narrow one silently
|
|
98
|
+
* excluded a real local box on a LAN or tailnet address.
|
|
99
|
+
*/
|
|
100
|
+
export function isLocalRoute(billing) {
|
|
83
101
|
return (billing.kind === "local_compute" ||
|
|
84
102
|
billing.provider === "local" ||
|
|
85
103
|
billing.surface === "local_endpoint" ||
|
package/dist/route-policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-policy.js","sourceRoot":"","sources":["../src/route-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAErF,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAc9E,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,GAAkB,EAClB,OAKI,EAAE;IAEN,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE,4CAA4C,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,6CAA6C,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,+BAA+B,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,8BAA8B,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACrF,IAAI,WAAW,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC;IAE5C,IACE,gBAAgB,CAAC,OAAO,CAAC;QACzB,CAAC,sBAAsB,CAAC,OAAO,CAAC;QAChC,CAAC,OAAO,CAAC,cAAc,EACvB,CAAC;QACD,OAAO,IAAI,CACT,KAAK,EACL,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"route-policy.js","sourceRoot":"","sources":["../src/route-policy.ts"],"names":[],"mappings":"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"}
|
package/dist/router.d.ts
CHANGED
|
@@ -34,8 +34,19 @@
|
|
|
34
34
|
* - Under prefer_large_context, +0.3 for routes declaring >=2M
|
|
35
35
|
* max_input_tokens and +0.15 for >=1M — declared context size, not
|
|
36
36
|
* harness name.
|
|
37
|
-
*
|
|
38
|
-
*
|
|
37
|
+
*
|
|
38
|
+
* One rule crosses tiers, and only one: task_type="local" picks the
|
|
39
|
+
* best-scoring LOCAL route wherever it sits, falling back to normal tier order
|
|
40
|
+
* when none is eligible. Local means what `routePolicy: "local_only"` means —
|
|
41
|
+
* declared provider/surface/auth/billing, and NOT a loopback URL. The "or a
|
|
42
|
+
* loopback URL" half was deleted deliberately: a metered proxy on 127.0.0.1
|
|
43
|
+
* declares itself metered, and the URL check overruled that, so the one task
|
|
44
|
+
* type meaning "free local endpoint" preferred the PAID route. This line kept
|
|
45
|
+
* the deleted half for a while after the code lost it. This used to be
|
|
46
|
+
* a +0.3 score bonus, which could not work: a bonus only reorders within a
|
|
47
|
+
* tier, and local endpoints sit in the cheap tier, so a healthy tier-1 route
|
|
48
|
+
* won before it was consulted. Tier ranks CAPABILITY, and this task type means
|
|
49
|
+
* "capability is not what matters here".
|
|
39
50
|
*
|
|
40
51
|
* Tier auto-derivation
|
|
41
52
|
* --------------------
|
|
@@ -54,6 +65,33 @@ import { QuotaCache } from "./quota.js";
|
|
|
54
65
|
import { LeaderboardCache } from "./leaderboard.js";
|
|
55
66
|
import type { Dispatcher } from "./dispatchers/base.js";
|
|
56
67
|
import { drainDispatcherStream } from "./dispatchers/base.js";
|
|
68
|
+
/**
|
|
69
|
+
* Every scoring adjustment, named and in one place.
|
|
70
|
+
*
|
|
71
|
+
* These were inline literals, restated as prose in this file's header several
|
|
72
|
+
* hundred lines away. One of those restatements went stale — the header still
|
|
73
|
+
* described a taskType=local bonus for a release after it was deleted — and
|
|
74
|
+
* nothing could have caught it: check-claims.mjs verifies that things prose
|
|
75
|
+
* NAMES exist, never that what it SAYS is true.
|
|
76
|
+
*
|
|
77
|
+
* Naming them does not by itself keep the header honest. `tests/router.test.ts`
|
|
78
|
+
* pins these values with a message pointing at the header, so changing one
|
|
79
|
+
* fails a test that tells you the other half to update. That is the cheap
|
|
80
|
+
* version of a doc-accuracy check: not parsing prose, just refusing to let the
|
|
81
|
+
* numbers move quietly.
|
|
82
|
+
*/
|
|
83
|
+
export declare const SCORING: {
|
|
84
|
+
/** hints.model names this route or one of its declared models. */
|
|
85
|
+
readonly modelMatchBonus: 0.5;
|
|
86
|
+
/** Route declares >= 2M max_input_tokens, under preferLargeContext. */
|
|
87
|
+
readonly largeContextBonus: 0.3;
|
|
88
|
+
/** Route declares >= 1M max_input_tokens, under preferLargeContext. */
|
|
89
|
+
readonly mediumContextBonus: 0.15;
|
|
90
|
+
readonly largeContextThreshold: 2000000;
|
|
91
|
+
readonly mediumContextThreshold: 1000000;
|
|
92
|
+
/** Extra attempts after the first, when a dispatch fails. */
|
|
93
|
+
readonly defaultMaxFallbacks: 2;
|
|
94
|
+
};
|
|
57
95
|
/**
|
|
58
96
|
* Options for explicit-service dispatch (routeTo / streamTo).
|
|
59
97
|
*
|
|
@@ -103,6 +141,20 @@ export interface ExplicitDispatchOpts {
|
|
|
103
141
|
* route is PICKED, which an explicit route has already decided.
|
|
104
142
|
*/
|
|
105
143
|
export declare function explicitOptsFromHints(hints: RouteHints): ExplicitDispatchOpts;
|
|
144
|
+
/**
|
|
145
|
+
* Does this route actually DECLARE this model? The route's own name does not
|
|
146
|
+
* count.
|
|
147
|
+
*
|
|
148
|
+
* Distinct from modelMatchesService, which includes the name because a route
|
|
149
|
+
* id is a legitimate routing nudge and should score like one. The reported
|
|
150
|
+
* flag is a different question, and the schema is explicit about which:
|
|
151
|
+
* "modelHintMatched: true means the picked route actually declares this
|
|
152
|
+
* model; false means it was forwarded blind and you should treat the result
|
|
153
|
+
* with more suspicion". Reporting a name match as true told the agent the
|
|
154
|
+
* opposite of the truth on the one signal the schema points it at for
|
|
155
|
+
* self-correction.
|
|
156
|
+
*/
|
|
157
|
+
export declare function declaresModel(svc: ServiceConfig, model: string | undefined): boolean;
|
|
106
158
|
/**
|
|
107
159
|
* Router streaming events wrap the dispatcher event with the active routing
|
|
108
160
|
* decision. The decision is emitted on the first event of each dispatch
|
|
@@ -213,6 +265,13 @@ export declare class Router {
|
|
|
213
265
|
* moving the readers with it. This is the readers catching up.
|
|
214
266
|
*/
|
|
215
267
|
circuitBreakerStatus(): Record<string, ReturnType<CircuitBreaker["status"]>>;
|
|
268
|
+
/**
|
|
269
|
+
* Routes whose persisted breaker record could not be read, as of the last
|
|
270
|
+
* store refresh. Reported rather than swallowed: an unreadable record is
|
|
271
|
+
* indistinguishable from a healthy one in the in-memory breaker, so without
|
|
272
|
+
* this the only honest answer available ("unknown") could not be given.
|
|
273
|
+
*/
|
|
274
|
+
breakerStateUnreadable(): string[];
|
|
216
275
|
/**
|
|
217
276
|
* Adopt any breaker state written by another process.
|
|
218
277
|
*
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|