instar 1.3.727 → 1.3.728
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/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +8 -0
- package/dist/commands/server.js.map +1 -1
- package/dist/core/IntelligenceRouter.d.ts +57 -0
- package/dist/core/IntelligenceRouter.d.ts.map +1 -1
- package/dist/core/IntelligenceRouter.js +135 -20
- package/dist/core/IntelligenceRouter.js.map +1 -1
- package/dist/core/types.d.ts +39 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +2 -2
- package/upgrades/{1.3.727.md → 1.3.728.md} +73 -1
- package/upgrades/side-effects/per-target-swap-timeout.md +120 -0
|
@@ -80,6 +80,37 @@ export interface IntelligenceRouterOptions {
|
|
|
80
80
|
* (legacy unbounded behavior, for callers that build the router without the policy).
|
|
81
81
|
*/
|
|
82
82
|
swapAttemptTimeoutMs?: number;
|
|
83
|
+
/**
|
|
84
|
+
* Per-TARGET-framework swap-attempt caps in ms (per-target-swap-timeout-spec.md).
|
|
85
|
+
* Resolution per swap target: `byFramework[target]` (if valid: finite number > 0)
|
|
86
|
+
* → the global `swapAttemptTimeoutMs` (if valid) → undefined (no cap). An INVALID
|
|
87
|
+
* per-framework value (0, negative, NaN, Infinity, non-number) FALLS THROUGH to
|
|
88
|
+
* the global — never "no cap", never an immediate-0ms kill (FD5). DEFAULT UNSET ⇒
|
|
89
|
+
* the global cap applies to every target — byte-identical routing behavior to today.
|
|
90
|
+
*/
|
|
91
|
+
swapAttemptTimeoutMsByFramework?: Partial<Record<IntelligenceFramework, number>>;
|
|
92
|
+
/**
|
|
93
|
+
* Clamp (ms) on any single resolved swap-attempt cap, so a huge/typo'd value
|
|
94
|
+
* cannot create an effectively unbounded subprocess that pins a host spawn-cap
|
|
95
|
+
* slot (FD7). The value is itself validated (finite > 0); invalid/unset ⇒ 120000.
|
|
96
|
+
*/
|
|
97
|
+
swapAttemptTimeoutMsMax?: number;
|
|
98
|
+
/**
|
|
99
|
+
* Wall-clock TOTAL budget (ms) over the WHOLE failure-swap tail (FD6). UNSET ⇒ no
|
|
100
|
+
* budget enforcement — semantics unchanged from today (the dark default). When set,
|
|
101
|
+
* each attempt's effective cap is `min(resolvedCap, budgetRemaining)` — measured on
|
|
102
|
+
* a MONOTONIC clock, never Date.now() — and the loop stops and falls closed once
|
|
103
|
+
* `budgetRemaining ≤ 250ms`, so worst-case swap-tail latency is literally ≤ this
|
|
104
|
+
* value (the budget clamps each IN-FLIGHT attempt, not just the loop gate). An
|
|
105
|
+
* invalid value (0, negative, NaN, non-number) is treated as unset.
|
|
106
|
+
*/
|
|
107
|
+
swapTotalBudgetMs?: number;
|
|
108
|
+
/**
|
|
109
|
+
* Test seam: the monotonic clock used for the total-budget elapsed measurement.
|
|
110
|
+
* Defaults to `performance.now()` — a wall-clock jump (NTP step, DST) must not
|
|
111
|
+
* make the budget spuriously short or long (round-3 external finding).
|
|
112
|
+
*/
|
|
113
|
+
monotonicNow?: () => number;
|
|
83
114
|
/**
|
|
84
115
|
* Build a provider for a non-default framework, with its OWN circuit breaker.
|
|
85
116
|
* Returns null when that framework's binary isn't available. Called at most
|
|
@@ -127,10 +158,36 @@ export interface IntelligenceRouterOptions {
|
|
|
127
158
|
queueAttemptTimeoutMs?: number;
|
|
128
159
|
};
|
|
129
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* resolveSwapCap — per-TARGET swap-attempt cap resolution
|
|
163
|
+
* (docs/specs/per-target-swap-timeout-spec.md, `resolveCap` contract).
|
|
164
|
+
*
|
|
165
|
+
* Resolution: `byFramework[target]` (if valid) → `globalCap` (if valid) →
|
|
166
|
+
* `undefined` (no cap — today's behavior when the global is ≤0/unset). An
|
|
167
|
+
* INVALID per-framework value (0, negative, NaN, Infinity, non-number) FALLS
|
|
168
|
+
* THROUGH to the global — it NEVER means "no cap" and NEVER produces an
|
|
169
|
+
* immediate-0ms kill (FD5: per-framework config cannot express "unbounded";
|
|
170
|
+
* only the global's ≤0/unset does — closes the accidental-uncap footgun).
|
|
171
|
+
* The resolved cap is clamped to `maxCap` (itself validated; invalid → 120s
|
|
172
|
+
* default) so a huge/typo'd value cannot pin a host spawn-cap slot unbounded.
|
|
173
|
+
*
|
|
174
|
+
* Exported for direct unit testing (pure function, no router state).
|
|
175
|
+
*/
|
|
176
|
+
export declare function resolveSwapCap(target: IntelligenceFramework, globalCap: number | undefined, byFramework: Partial<Record<IntelligenceFramework, number>> | undefined, maxCap: number | undefined): number | undefined;
|
|
130
177
|
export declare class IntelligenceRouter implements IntelligenceProvider {
|
|
131
178
|
private readonly opts;
|
|
132
179
|
private readonly cache;
|
|
180
|
+
/** Unknown byFramework keys already warned about (warn ONCE per key, never per call). */
|
|
181
|
+
private warnedUnknownCapKeys?;
|
|
133
182
|
constructor(opts: IntelligenceRouterOptions);
|
|
183
|
+
/**
|
|
184
|
+
* Unknown-key hygiene (per-target-swap-timeout-spec.md, change surface): a stray/
|
|
185
|
+
* misspelled key arriving from raw JSON config has NO effect (that target simply
|
|
186
|
+
* falls through to the global cap) — but it is logged once so the typo is visible
|
|
187
|
+
* instead of silently ignored. Type-level the map is keyed to the framework union;
|
|
188
|
+
* this is the runtime backstop.
|
|
189
|
+
*/
|
|
190
|
+
private warnUnknownSwapCapKeys;
|
|
134
191
|
/**
|
|
135
192
|
* The framework the default (shared, global-breaker) provider speaks — i.e. the
|
|
136
193
|
* framework a component routes to when nothing routes it elsewhere. The
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntelligenceRouter.d.ts","sourceRoot":"","sources":["../../src/core/IntelligenceRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EACL,KAAK,iBAAiB,EAGvB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,yBAAyB;IACxC,iGAAiG;IACjG,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,8DAA8D;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACvE,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAClD,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC9B;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,EAAE,EAAE,qBAAqB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,CACL,IAAI,EAAE,aAAa,GAAG,YAAY,EAClC,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,EAC5C,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,6HAA6H;IAC7H,eAAe,EAAE,oBAAoB,CAAC;IACtC,8CAA8C;IAC9C,gBAAgB,EAAE,qBAAqB,CAAC;IACxC,sHAAsH;IACtH,aAAa,EAAE,MAAM,yBAAyB,GAAG,SAAS,CAAC;IAC3D;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,aAAa,EAAE,CAAC,SAAS,EAAE,qBAAqB,KAAK,oBAAoB,GAAG,IAAI,CAAC;IACjF,wGAAwG;IACxG,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D;;;OAGG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE;QACP,mGAAmG;QACnG,oBAAoB,EAAE,MAAM,CAAC;QAC7B,sEAAsE;QACtE,cAAc,EAAE,OAAO,CAAC;QACxB,OAAO,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;QACvG,kGAAkG;QAClG,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,iGAAiG;QACjG,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"IntelligenceRouter.d.ts","sourceRoot":"","sources":["../../src/core/IntelligenceRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EACL,KAAK,iBAAiB,EAGvB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,yBAAyB;IACxC,iGAAiG;IACjG,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,8DAA8D;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACvE,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAClD,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC9B;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,EAAE,EAAE,qBAAqB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,CACL,IAAI,EAAE,aAAa,GAAG,YAAY,EAClC,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,EAC5C,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,6HAA6H;IAC7H,eAAe,EAAE,oBAAoB,CAAC;IACtC,8CAA8C;IAC9C,gBAAgB,EAAE,qBAAqB,CAAC;IACxC,sHAAsH;IACtH,aAAa,EAAE,MAAM,yBAAyB,GAAG,SAAS,CAAC;IAC3D;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;OAOG;IACH,+BAA+B,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC;IACjF;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B;;;;OAIG;IACH,aAAa,EAAE,CAAC,SAAS,EAAE,qBAAqB,KAAK,oBAAoB,GAAG,IAAI,CAAC;IACjF,wGAAwG;IACxG,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D;;;OAGG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE;QACP,mGAAmG;QACnG,oBAAoB,EAAE,MAAM,CAAC;QAC7B,sEAAsE;QACtE,cAAc,EAAE,OAAO,CAAC;QACxB,OAAO,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;QACvG,kGAAkG;QAClG,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,iGAAiG;QACjG,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAmCD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,EACvE,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,GAAG,SAAS,CAMpB;AAuCD,qBAAa,kBAAmB,YAAW,oBAAoB;IAMjD,OAAO,CAAC,QAAQ,CAAC,IAAI;IALjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqD;IAE3E,yFAAyF;IACzF,OAAO,CAAC,oBAAoB,CAAC,CAAc;gBAEd,IAAI,EAAE,yBAAyB;IAE5D;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAgB9B;;;;;OAKG;IACH,IAAI,gBAAgB,IAAI,qBAAqB,CAE5C;IAED,8EAA8E;IAC9E,gBAAgB,CACd,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,EAAE,yBAAyB,GAAG,SAAS,GACzC,qBAAqB;IAQxB;;;OAGG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,iBAAiB,GAAG;QAC5D,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,SAAS,EAAE,qBAAqB,CAAC;QACjC,SAAS,EAAE,OAAO,CAAC;KACpB;IAQD,+FAA+F;IAC/F,OAAO,CAAC,WAAW;IAcnB,4GAA4G;IAC5G,OAAO,CAAC,eAAe;IAIjB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAsL9E;;;;;;;;;;OAUG;YACW,kBAAkB;CAoCjC"}
|
|
@@ -24,6 +24,78 @@
|
|
|
24
24
|
* outage's worth of calls onto Claude all at once.
|
|
25
25
|
*/
|
|
26
26
|
import { isComponentCategory, categoryForComponent, } from './componentCategories.js';
|
|
27
|
+
/**
|
|
28
|
+
* Runtime framework ids for the unknown-key hygiene warning on
|
|
29
|
+
* `swapAttemptTimeoutMsByFramework` (per-target-swap-timeout-spec.md, change
|
|
30
|
+
* surface). The TYPE is the compile-time guard; this set catches a stray key
|
|
31
|
+
* arriving from raw JSON config at runtime (no effect — warn once, ignore).
|
|
32
|
+
*/
|
|
33
|
+
const KNOWN_FRAMEWORKS = new Set(['claude-code', 'codex-cli', 'gemini-cli', 'pi-cli']);
|
|
34
|
+
/** Default clamp on any single resolved swap-attempt cap (per-target-swap-timeout-spec.md FD7). */
|
|
35
|
+
const DEFAULT_SWAP_ATTEMPT_TIMEOUT_MAX_MS = 120_000;
|
|
36
|
+
/**
|
|
37
|
+
* Below this much remaining total budget (ms), a swap attempt is not worth
|
|
38
|
+
* admitting — the loop stops and falls closed (per-target-swap-timeout-spec.md
|
|
39
|
+
* FD6, fixed floor). A configured `swapTotalBudgetMs` below this value passes
|
|
40
|
+
* validation but simply disables swapping on the first attempt (fail-SAFE).
|
|
41
|
+
*/
|
|
42
|
+
const SWAP_BUDGET_MIN_REMAINING_MS = 250;
|
|
43
|
+
/**
|
|
44
|
+
* The spec's uniform validity contract for every timeout/budget value:
|
|
45
|
+
* `typeof x === 'number' && Number.isFinite(x) && x > 0`. `0`, negatives, NaN,
|
|
46
|
+
* Infinity, and non-numbers are all INVALID — selection never uses `||` (the
|
|
47
|
+
* zero-is-falsy lesson).
|
|
48
|
+
*/
|
|
49
|
+
function isValidMs(x) {
|
|
50
|
+
return typeof x === 'number' && Number.isFinite(x) && x > 0;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* resolveSwapCap — per-TARGET swap-attempt cap resolution
|
|
54
|
+
* (docs/specs/per-target-swap-timeout-spec.md, `resolveCap` contract).
|
|
55
|
+
*
|
|
56
|
+
* Resolution: `byFramework[target]` (if valid) → `globalCap` (if valid) →
|
|
57
|
+
* `undefined` (no cap — today's behavior when the global is ≤0/unset). An
|
|
58
|
+
* INVALID per-framework value (0, negative, NaN, Infinity, non-number) FALLS
|
|
59
|
+
* THROUGH to the global — it NEVER means "no cap" and NEVER produces an
|
|
60
|
+
* immediate-0ms kill (FD5: per-framework config cannot express "unbounded";
|
|
61
|
+
* only the global's ≤0/unset does — closes the accidental-uncap footgun).
|
|
62
|
+
* The resolved cap is clamped to `maxCap` (itself validated; invalid → 120s
|
|
63
|
+
* default) so a huge/typo'd value cannot pin a host spawn-cap slot unbounded.
|
|
64
|
+
*
|
|
65
|
+
* Exported for direct unit testing (pure function, no router state).
|
|
66
|
+
*/
|
|
67
|
+
export function resolveSwapCap(target, globalCap, byFramework, maxCap) {
|
|
68
|
+
const perTarget = byFramework?.[target];
|
|
69
|
+
const candidate = isValidMs(perTarget) ? perTarget : isValidMs(globalCap) ? globalCap : undefined;
|
|
70
|
+
if (candidate === undefined)
|
|
71
|
+
return undefined;
|
|
72
|
+
const effMax = isValidMs(maxCap) ? maxCap : DEFAULT_SWAP_ATTEMPT_TIMEOUT_MAX_MS;
|
|
73
|
+
return Math.min(candidate, effMax);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* withSwapTimeout — the shipped Promise.race crash-safe pattern (per-input
|
|
77
|
+
* settlement handlers; a late reject/resolve from the abandoned attempt is
|
|
78
|
+
* handled/ignored), PLUS timer hygiene: the pending timeout timer is CLEARED
|
|
79
|
+
* on settle in a `finally` so a fast success does not leak a timer per call
|
|
80
|
+
* (per-target-swap-timeout-spec.md FD7 / codex-review finding). The rejection
|
|
81
|
+
* message format (`swap-attempt-timeout: <target> (<cap>ms)`) is load-bearing —
|
|
82
|
+
* the swap loop's degrade-reason detection prefix-matches it.
|
|
83
|
+
*/
|
|
84
|
+
async function withSwapTimeout(promise, capMs, target) {
|
|
85
|
+
let timer;
|
|
86
|
+
try {
|
|
87
|
+
return await Promise.race([
|
|
88
|
+
promise,
|
|
89
|
+
new Promise((_, reject) => {
|
|
90
|
+
timer = setTimeout(() => reject(new Error(`swap-attempt-timeout: ${target} (${capMs}ms)`)), capMs);
|
|
91
|
+
}),
|
|
92
|
+
]);
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
if (timer !== undefined)
|
|
96
|
+
clearTimeout(timer);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
27
99
|
/**
|
|
28
100
|
* Is this a rate-limit / usage-limit / 429 error? The circuit-breaking provider wraps these as a
|
|
29
101
|
* `RateLimitError` (name-checked, no import needed); we also duck-type the message so a provider
|
|
@@ -38,9 +110,33 @@ function isRateLimitError(e) {
|
|
|
38
110
|
export class IntelligenceRouter {
|
|
39
111
|
opts;
|
|
40
112
|
cache = new Map();
|
|
113
|
+
/** Unknown byFramework keys already warned about (warn ONCE per key, never per call). */
|
|
114
|
+
warnedUnknownCapKeys;
|
|
41
115
|
constructor(opts) {
|
|
42
116
|
this.opts = opts;
|
|
43
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Unknown-key hygiene (per-target-swap-timeout-spec.md, change surface): a stray/
|
|
120
|
+
* misspelled key arriving from raw JSON config has NO effect (that target simply
|
|
121
|
+
* falls through to the global cap) — but it is logged once so the typo is visible
|
|
122
|
+
* instead of silently ignored. Type-level the map is keyed to the framework union;
|
|
123
|
+
* this is the runtime backstop.
|
|
124
|
+
*/
|
|
125
|
+
warnUnknownSwapCapKeys(byFramework) {
|
|
126
|
+
if (!byFramework)
|
|
127
|
+
return;
|
|
128
|
+
for (const key of Object.keys(byFramework)) {
|
|
129
|
+
if (KNOWN_FRAMEWORKS.has(key))
|
|
130
|
+
continue;
|
|
131
|
+
if (!this.warnedUnknownCapKeys)
|
|
132
|
+
this.warnedUnknownCapKeys = new Set();
|
|
133
|
+
if (this.warnedUnknownCapKeys.has(key))
|
|
134
|
+
continue;
|
|
135
|
+
this.warnedUnknownCapKeys.add(key);
|
|
136
|
+
console.warn(`IntelligenceRouter: unknown framework key '${key}' in swapAttemptTimeoutMsByFramework — ` +
|
|
137
|
+
`ignored (that key has no effect; targets fall through to the global cap)`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
44
140
|
/**
|
|
45
141
|
* The framework the default (shared, global-breaker) provider speaks — i.e. the
|
|
46
142
|
* framework a component routes to when nothing routes it elsewhere. The
|
|
@@ -180,18 +276,23 @@ export class IntelligenceRouter {
|
|
|
180
276
|
this.opts.onHeuristicFallthrough?.(component ?? '(none)', framework);
|
|
181
277
|
throw err; // not gating/deferrable, or no swap configured ⇒ today's behavior
|
|
182
278
|
}
|
|
183
|
-
// §4.5 bounded per-attempt swap timeout
|
|
184
|
-
//
|
|
185
|
-
//
|
|
186
|
-
//
|
|
279
|
+
// §4.5 bounded per-attempt swap timeout, now resolved PER TARGET
|
|
280
|
+
// (docs/specs/per-target-swap-timeout-spec.md): each attempt's cap resolves
|
|
281
|
+
// `byFramework[target]` → global → undefined, clamped to `maxCap`, so a
|
|
282
|
+
// slow-but-honest target (gemini p50 ≈ 8.5s) can be GIVEN its measured time
|
|
283
|
+
// instead of being killed at a one-size-fits-all 5s. When a TOTAL budget is
|
|
284
|
+
// set, each attempt is additionally clamped to the remaining budget (monotonic
|
|
285
|
+
// clock) and the loop falls closed once < 250ms remains — so the whole tail is
|
|
286
|
+
// literally ≤ swapTotalBudgetMs. All three knobs default UNSET ⇒ byte-identical
|
|
287
|
+
// routing behavior to the single global cap. The cap also flows through to the
|
|
187
288
|
// provider as `timeoutMs` so the CLI subprocess SIGTERMs itself at the same bound.
|
|
188
|
-
const
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
|
|
289
|
+
const globalCapMs = this.opts.swapAttemptTimeoutMs;
|
|
290
|
+
const byFramework = this.opts.swapAttemptTimeoutMsByFramework;
|
|
291
|
+
this.warnUnknownSwapCapKeys(byFramework);
|
|
292
|
+
const maxCapMs = this.opts.swapAttemptTimeoutMsMax;
|
|
293
|
+
const budgetMs = isValidMs(this.opts.swapTotalBudgetMs) ? this.opts.swapTotalBudgetMs : undefined;
|
|
294
|
+
const monotonicNow = this.opts.monotonicNow ?? (() => performance.now());
|
|
295
|
+
const swapStartedAt = monotonicNow();
|
|
195
296
|
for (const target of swapTargets) {
|
|
196
297
|
// GATING budget: if the awaited gate's total wall-clock budget is consumed, stop swapping
|
|
197
298
|
// and fail closed now (responsiveness over completeness — spec §3a). Deferrable calls have
|
|
@@ -203,16 +304,30 @@ export class IntelligenceRouter {
|
|
|
203
304
|
const tp = this.resolveProvider(target);
|
|
204
305
|
if (!tp)
|
|
205
306
|
continue; // target binary missing → skip
|
|
307
|
+
let cap = resolveSwapCap(target, globalCapMs, byFramework, maxCapMs);
|
|
308
|
+
if (budgetMs !== undefined) {
|
|
309
|
+
const remaining = budgetMs - (monotonicNow() - swapStartedAt);
|
|
310
|
+
// Too little budget left to be worth an attempt → stop, fall closed (FD6).
|
|
311
|
+
if (remaining <= SWAP_BUDGET_MIN_REMAINING_MS)
|
|
312
|
+
break;
|
|
313
|
+
// The budget clamps each IN-FLIGHT attempt, not just the loop gate — an
|
|
314
|
+
// attempt admitted at budget−ε must NOT run its full per-target cap
|
|
315
|
+
// (worst case would be budget + maxCap, not ≤ budget). It also bounds an
|
|
316
|
+
// otherwise-UNcapped attempt (no per-target cap, global ≤0/unset).
|
|
317
|
+
cap = cap === undefined ? remaining : Math.min(cap, remaining);
|
|
318
|
+
}
|
|
319
|
+
// Pass the cap through as the provider's per-call timeout so the subprocess
|
|
320
|
+
// self-terminates at the bound (no AbortSignal exists on IntelligenceOptions).
|
|
321
|
+
const attemptOptions = cap !== undefined ? { ...(options ?? {}), timeoutMs: cap } : options;
|
|
206
322
|
try {
|
|
207
|
-
//
|
|
208
|
-
// it attaches a settlement handler to EACH input,
|
|
209
|
-
// an abandoned attempt is already handled (no
|
|
210
|
-
// resolve is ignored. NEVER a detached/
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
])
|
|
323
|
+
// withSwapTimeout keeps the shipped, crash-safe Promise.race pattern
|
|
324
|
+
// (InputGuard precedent): it attaches a settlement handler to EACH input,
|
|
325
|
+
// so a late rejection from an abandoned attempt is already handled (no
|
|
326
|
+
// unhandledRejection) and a late resolve is ignored. NEVER a detached/
|
|
327
|
+
// awaited handle. It additionally CLEARS the timer on settle (FD7) so a
|
|
328
|
+
// fast success does not leak a pending timer.
|
|
329
|
+
const result = cap !== undefined
|
|
330
|
+
? await withSwapTimeout(tp.evaluate(prompt, attemptOptions), cap, target)
|
|
216
331
|
: await tp.evaluate(prompt, attemptOptions);
|
|
217
332
|
this.opts.onDegrade?.({
|
|
218
333
|
component: component ?? '(none)',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntelligenceRouter.js","sourceRoot":"","sources":["../../src/core/IntelligenceRouter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IntelligenceRouter.js","sourceRoot":"","sources":["../../src/core/IntelligenceRouter.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -3066,6 +3066,45 @@ export interface InstarConfig {
|
|
|
3066
3066
|
* so absence is the default state, never a persisted block.
|
|
3067
3067
|
*/
|
|
3068
3068
|
swapAttemptTimeoutMs?: number;
|
|
3069
|
+
/**
|
|
3070
|
+
* Per-TARGET-framework swap-attempt caps in ms for the failure-swap loop
|
|
3071
|
+
* (docs/specs/per-target-swap-timeout-spec.md). Resolution per swap target:
|
|
3072
|
+
* `byFramework[target]` (if a valid finite number > 0) → the global
|
|
3073
|
+
* `swapAttemptTimeoutMs` → no cap. An INVALID per-framework value (0, negative,
|
|
3074
|
+
* NaN, non-number) FALLS THROUGH to the global — it never means "no cap" and
|
|
3075
|
+
* never produces an immediate-0ms kill (FD5: per-framework config cannot
|
|
3076
|
+
* express "unbounded"; only the global's ≤0/unset does). DEFAULT UNSET ⇒ the
|
|
3077
|
+
* global cap applies to every target, byte-identical to today (dark ship;
|
|
3078
|
+
* deliberately kept out of ConfigDefaults/migrateConfig like
|
|
3079
|
+
* swapAttemptTimeoutMs, so absence is the default state).
|
|
3080
|
+
* Recommended opt-in package (set TOGETHER with swapTotalBudgetMs — FD8, so
|
|
3081
|
+
* the caps and their reachability ceiling arrive as one package):
|
|
3082
|
+
* `{ "claude-code": 8000, "pi-cli": 9000, "gemini-cli": 18000, "codex-cli": 45000 }`
|
|
3083
|
+
* with `swapTotalBudgetMs: 40000` (each cap ≥ the framework's measured p95 with
|
|
3084
|
+
* margin — llm-pathway-bench N=30). NOTE: the swap loop is sequential, so
|
|
3085
|
+
* `failureSwap` target ORDER is latency-load-bearing — order fastest-first
|
|
3086
|
+
* (cap ≠ priority), and keep caps ≤ the circuit breaker's failure sensitivity
|
|
3087
|
+
* so a chronically-slow target still trips the breaker.
|
|
3088
|
+
*/
|
|
3089
|
+
swapAttemptTimeoutMsByFramework?: Partial<Record<'claude-code' | 'codex-cli' | 'gemini-cli' | 'pi-cli', number>>;
|
|
3090
|
+
/**
|
|
3091
|
+
* Clamp (ms) on any single resolved swap-attempt cap, so a huge/typo'd
|
|
3092
|
+
* per-framework value cannot create an effectively unbounded subprocess that
|
|
3093
|
+
* pins a host spawn-cap slot (per-target-swap-timeout-spec.md FD7). The value
|
|
3094
|
+
* is itself validated (finite > 0); invalid/unset ⇒ 120000 (120s).
|
|
3095
|
+
*/
|
|
3096
|
+
swapAttemptTimeoutMsMax?: number;
|
|
3097
|
+
/**
|
|
3098
|
+
* Wall-clock TOTAL budget (ms) over the WHOLE failure-swap tail
|
|
3099
|
+
* (per-target-swap-timeout-spec.md FD6). UNSET ⇒ no total-budget enforcement —
|
|
3100
|
+
* semantics unchanged from today (the dark default). When set, each swap
|
|
3101
|
+
* attempt's effective cap is `min(resolvedCap, budgetRemaining)` on a MONOTONIC
|
|
3102
|
+
* clock and the loop stops and falls closed once ≤ 250ms remains — so the
|
|
3103
|
+
* worst-case swap-tail latency is literally ≤ this value. An invalid value
|
|
3104
|
+
* (0, negative, NaN, non-number) is treated as unset (no enforcement).
|
|
3105
|
+
* Recommended alongside the per-framework caps: 40000.
|
|
3106
|
+
*/
|
|
3107
|
+
swapTotalBudgetMs?: number;
|
|
3069
3108
|
/**
|
|
3070
3109
|
* Pinned-callsite model overrides (docs/LLM-ROUTING-REGISTRY.md "Risk items"
|
|
3071
3110
|
* #3/#5/#6/#7 — the hardcoded-model callsites that bypass the router).
|