instar 1.3.770 → 1.3.772

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.
@@ -26,6 +26,7 @@
26
26
  import type { IntelligenceProvider, IntelligenceOptions } from './types.js';
27
27
  import type { IntelligenceFramework } from './intelligenceProviderFactory.js';
28
28
  import { type ComponentCategory } from './componentCategories.js';
29
+ import { type RoutingNature, type TaskNature, type RoutingChain, type RoutingDoor, type ChainPosition, type NatureRoutingChains } from '../data/llmBenchCoverage.js';
29
30
  export interface ComponentFrameworksConfig {
30
31
  /** Framework for anything not otherwise specified. Defaults to the router's defaultFramework. */
31
32
  default?: IntelligenceFramework;
@@ -157,6 +158,23 @@ export interface IntelligenceRouterOptions {
157
158
  /** Bound (ms) for a single enqueued deferrable call so a stuck/abandoned one self-terminates. */
158
159
  queueAttemptTimeoutMs?: number;
159
160
  };
161
+ /**
162
+ * S4 A2 — the live, dev-gate-RESOLVED view of `sessions.natureRouting` (read on EVERY
163
+ * call so the kill switch is hot). `enabled` is already the gate-resolved boolean
164
+ * (resolved at the construction boundary, like `ladder`). Absent OR `enabled:false`
165
+ * ⇒ the nature router is inert and routing is BYTE-IDENTICAL to today. When enabled +
166
+ * dryRun (the dev-agent default) the resolver OBSERVES (computes + logs the plan via
167
+ * `onNatureRoutePlan`) and still passes through to today's selection. Enforcing
168
+ * selection (dryRun:false) is a tracked A2.2 remainder.
169
+ */
170
+ resolveNatureRouting?: () => NatureRoutingRuntime | undefined;
171
+ /**
172
+ * S4 A2 — the dryRun observation sink (FD11 readable canary). Invoked with the resolved
173
+ * plan when nature routing is enabled + dryRun. No-op downstream by default; the router
174
+ * calls it freely. The durable `logs/nature-routing.jsonl` + `GET /intelligence/routing`
175
+ * surfaces that consume this are a tracked A2.2 remainder.
176
+ */
177
+ onNatureRoutePlan?: (plan: NatureRoutePlan) => void;
160
178
  }
161
179
  /**
162
180
  * resolveSwapCap — per-TARGET swap-attempt cap resolution
@@ -201,6 +219,139 @@ export declare function clampClaudeCliSwapModel(target: IntelligenceFramework, r
201
219
  model: IntelligenceOptions['model'] | undefined;
202
220
  clamped: boolean;
203
221
  };
222
+ /**
223
+ * Resolve a component's static routing nature from the merged S1 map
224
+ * (`LLM_ROUTING_NATURE`). Mirrors `categoryForComponent`'s per-operation key
225
+ * handling (FD3): an exact key (incl. a "/segment" operation suffix) wins, else the
226
+ * base component name (`split('/')[0]`, `server:` prefix stripped) is the fallback.
227
+ * Returns `undefined` for an unmapped component. Pure map lookup — always available,
228
+ * independent of `sessions.natureRouting`.
229
+ */
230
+ export declare function routingNatureFor(component: string | undefined): RoutingNature | undefined;
231
+ /**
232
+ * LA4 (S4 A1) degrade-path safety predicate (FD4 / codex CR6-3). A binary-missing
233
+ * degrade to the default door is a bounded/gating call — and so must be clamped OFF
234
+ * the Opus-via-Claude-CLI landing — iff either:
235
+ * (a) the caller declared `attribution.gating === true`, OR
236
+ * (b) the component maps to a NON-`WRITE` chain in `LLM_ROUTING_NATURE`
237
+ * (mapped nature A/B, or D-non-WRITE — all bounded/gating).
238
+ * A `WRITE`-chain component (Opus-via-CLI is its legitimate open-ended-writing quality
239
+ * lane) or an unmapped, non-gating call is left UNCHANGED — the clamp stays exactly as
240
+ * narrow as bench rules R1/R2. This is a pure lookup over `attribution` + the static
241
+ * map, so it never depends on `sessions.natureRouting` being set.
242
+ */
243
+ export declare function isBoundedGatingDegrade(component: string | undefined, options?: IntelligenceOptions): boolean;
244
+ /**
245
+ * The critical-gate fail-closed outcome (spec CR10-3/CR8-4): a DISTINCT typed error
246
+ * so a caller can never mistake it for an ordinary model failure. A mapped FD6
247
+ * critical gate whose chain has NO available door throws this; the caller applies its
248
+ * existing gating fail-closed semantics (block/deny). The low-stakes empty-set case is
249
+ * deliberately the ordinary non-gating error instead ('no-route'), typed apart on purpose.
250
+ */
251
+ export declare class RouterFailClosedError extends Error {
252
+ readonly component: string | undefined;
253
+ readonly resolvedChain: RoutingChain;
254
+ constructor(component: string | undefined, resolvedChain: RoutingChain);
255
+ }
256
+ /** A chain position resolved to a concrete model id, after the FD4 allowlist clamp. */
257
+ export interface ResolvedRoutePosition {
258
+ readonly door: RoutingDoor;
259
+ /** The original benchmark label / tier hint from the chain position. */
260
+ readonly label: string;
261
+ /** The concrete model id the door should be asked for (post-registry, post-clamp). */
262
+ readonly modelId: string;
263
+ /** Whether the FD4 harness-door allowlist clamp rewrote this position to the reserve id. */
264
+ readonly clamped: boolean;
265
+ }
266
+ /** The four load-bearing `resolveRoute` outcomes (verifier r7 — never collapse them). */
267
+ export type RouteResolution = {
268
+ outcome: 'route';
269
+ resolvedNature: TaskNature;
270
+ resolvedChain: RoutingChain;
271
+ primary: ResolvedRoutePosition;
272
+ swapTail: ResolvedRoutePosition[];
273
+ } | {
274
+ outcome: 'fall-through';
275
+ } | {
276
+ outcome: 'no-route';
277
+ };
278
+ /**
279
+ * FD3 — resolve `{ resolvedNature, resolvedChain }` from the component's static map row
280
+ * and an optional caller-declared `attribution.nature`. The component's OWN map row
281
+ * `{nature, chain}` is authoritative by default (preserving a per-component A/FAST vs
282
+ * A/SORT choice a pure nature→chain function could not). A caller-declared nature that
283
+ * TIGHTENS (strictly raises the tier) replaces the chain with the deterministically
284
+ * safe `JUDGE`; anything else is ignored. Returns `undefined` for an unmapped component.
285
+ * Pure — always available, independent of `sessions.natureRouting`.
286
+ */
287
+ export declare function resolveNatureAndChain(component: string | undefined, declaredNature?: unknown): {
288
+ resolvedNature: TaskNature;
289
+ resolvedChain: RoutingChain;
290
+ } | undefined;
291
+ /**
292
+ * FD-LABEL / FD4.1 — resolve a chain position's `model` label to a concrete model id via
293
+ * `ROUTING_LABEL_TO_MODEL_ID`. A label absent from the registry (a tier hint like `fast`
294
+ * / `capable`) passes through unchanged and is resolved downstream by the existing
295
+ * per-adapter tier map. Pure.
296
+ */
297
+ export declare function resolvePositionModelId(pos: ChainPosition): string;
298
+ /**
299
+ * FD4 place 3 — the harness-door ALLOWLIST clamp (deny-by-default), the nature-routing
300
+ * RUNTIME safety guarantee. For a bounded/gating (FAST/SORT/JUDGE) chain, the ONLY
301
+ * permitted `claude-code` position is the single sanctioned CONCRETE reserve id
302
+ * (`CLAUDE_CODE_RESERVE_MODEL_ID`); any OTHER claude-code id is clamped down to it. This
303
+ * is an allowlist, NOT a denylist — a future/unrecognized capable Claude id can never
304
+ * slip past. `WRITE` is exempt (its Opus-via-CLI quality lane is legitimate), and every
305
+ * non-claude-code door passes through.
306
+ *
307
+ * DELIBERATELY SEPARATE from A1's `clampClaudeCliSwapModel` (which returns the `balanced`
308
+ * TIER token and fires UNCONDITIONALLY on the always-on degrade/swap path): touching that
309
+ * function would change A1's shipped, byte-identical-when-off behavior. This clamp is
310
+ * nature-routing-scoped and concrete-id-based (FD4.1), applied only inside `resolveRoute`.
311
+ */
312
+ export declare function clampToReserveOnCleanDoor(pos: ResolvedRoutePosition, resolvedChain: RoutingChain): ResolvedRoutePosition;
313
+ /**
314
+ * The PURE nature-routing fold (spec §Resolver, steps 1–7). Deps are injected so the
315
+ * function is side-effect-free + trivially testable: `isDoorReachable` reports CLI-door
316
+ * reachability (the class wraps its provider cache). Metered doors are ALWAYS skipped in
317
+ * Increment A. The empty-`available` branch splits by authority class (CR6-2/CR3-1):
318
+ * unmapped → 'fall-through'; low-stakes mapped → 'no-route'; FD6 critical gate → throw
319
+ * RouterFailClosedError. (The R6 doc-tree refuse-to-author branch is a tracked A2.2
320
+ * remainder; until it lands a `claudeBanned` component falls into the low-stakes 'no-route'
321
+ * path — never onto Claude, since resolveRoute never emits a claude-code position for it
322
+ * unless its chain contains one, and R6 chains are authored off-Claude.)
323
+ */
324
+ export declare function resolveRoute(component: string | undefined, declaredNature: unknown, chains: NatureRoutingChains, deps: {
325
+ isDoorReachable: (door: RoutingDoor) => boolean;
326
+ }): RouteResolution;
327
+ /**
328
+ * Merge an operator's partial `chains` override (config) over the built-in v3 defaults,
329
+ * per-chain. A chain the operator did not override keeps its default. (The FD4.3
330
+ * resolve-time validation that REJECTS a harness-door-violating override → defaults +
331
+ * notice is a tracked A2.2 remainder; the FD4 place-3 runtime clamp above already keeps
332
+ * the banned route closed on every resolved position regardless.)
333
+ */
334
+ export declare function mergeNatureRoutingChains(override: Partial<Record<RoutingChain, ReadonlyArray<ChainPosition>>> | undefined): NatureRoutingChains;
335
+ /**
336
+ * The dev-gate-resolved live view of `sessions.natureRouting` the router reads per call.
337
+ * `enabled` is ALREADY gate-resolved at the construction boundary (like `ladder`), so the
338
+ * router just reads the boolean. Absent ⇒ feature off ⇒ byte-identical routing.
339
+ */
340
+ export interface NatureRoutingRuntime {
341
+ enabled: boolean;
342
+ /** Observe-only (default true on first enable): compute + log the plan, do NOT re-route. */
343
+ dryRun: boolean;
344
+ chains?: Partial<Record<RoutingChain, ReadonlyArray<ChainPosition>>>;
345
+ }
346
+ /** The dryRun observation record handed to `onNatureRoutePlan` (FD11 readable canary). */
347
+ export interface NatureRoutePlan {
348
+ component: string | undefined;
349
+ category: ComponentCategory;
350
+ dryRun: boolean;
351
+ resolution?: RouteResolution;
352
+ /** Set when the resolver would FAIL CLOSED (critical-gate empty set). */
353
+ failClosed?: boolean;
354
+ }
204
355
  export declare class IntelligenceRouter implements IntelligenceProvider {
205
356
  private readonly opts;
206
357
  private readonly cache;
@@ -238,6 +389,22 @@ export declare class IntelligenceRouter implements IntelligenceProvider {
238
389
  private providerFor;
239
390
  /** Default framework → shared provider; else the cached per-framework provider (null if binary missing). */
240
391
  private resolveProvider;
392
+ /** Already warned that nature-routing enforcing mode is not yet wired (warn ONCE). */
393
+ private warnedNatureEnforceNotWired;
394
+ /**
395
+ * S4 A2 — CLI-door reachability probe for the nature router (FD5 availability walk).
396
+ * CLI doors coincide 1:1 with `IntelligenceFramework`. `resolveRoute` skips metered
397
+ * doors before ever calling this, so `door` is always a CLI door. The default framework
398
+ * is always reachable (shared provider); a non-default door is reachable iff its provider
399
+ * builds (binary present). Result is cached by `providerFor`.
400
+ */
401
+ private isCliDoorReachable;
402
+ /**
403
+ * S4 A2 — enforcing-mode honesty guard. Flipping `dryRun:false` in A2.1 does NOT re-route
404
+ * (the selection integration is a tracked A2.2 remainder); routing stays byte-identical.
405
+ * Warn ONCE so the flip is an honest no-op rather than a silent dead switch.
406
+ */
407
+ private warnNatureEnforceNotWired;
241
408
  evaluate(prompt: string, options?: IntelligenceOptions): Promise<string>;
242
409
  /**
243
410
  * Queue rung (Resilient Degradation Ladder §3b.3) — DEFERRABLE calls only. Enqueue the SAME
@@ -1 +1 @@
1
- {"version":3,"file":"IntelligenceRouter.d.ts","sourceRoot":"","sources":["../../src/core/IntelligenceRouter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IntelligenceRouter.d.ts","sourceRoot":"","sources":["../../src/core/IntelligenceRouter.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@
24
24
  * outage's worth of calls onto Claude all at once.
25
25
  */
26
26
  import { isComponentCategory, categoryForComponent, } from './componentCategories.js';
27
+ import { LLM_ROUTING_NATURE, NATURE_ROUTING_DEFAULT_CHAINS, ROUTING_LABEL_TO_MODEL_ID, CLAUDE_CODE_RESERVE_MODEL_ID, METERED_ROUTING_DOORS, NATURE_ROUTING_CRITICAL_GATES, } from '../data/llmBenchCoverage.js';
27
28
  /**
28
29
  * Runtime framework ids for the unknown-key hygiene warning on
29
30
  * `swapAttemptTimeoutMsByFramework` (per-target-swap-timeout-spec.md, change
@@ -136,6 +137,206 @@ export function clampClaudeCliSwapModel(target, requested) {
136
137
  }
137
138
  return { model: requested, clamped: false };
138
139
  }
140
+ /**
141
+ * Resolve a component's static routing nature from the merged S1 map
142
+ * (`LLM_ROUTING_NATURE`). Mirrors `categoryForComponent`'s per-operation key
143
+ * handling (FD3): an exact key (incl. a "/segment" operation suffix) wins, else the
144
+ * base component name (`split('/')[0]`, `server:` prefix stripped) is the fallback.
145
+ * Returns `undefined` for an unmapped component. Pure map lookup — always available,
146
+ * independent of `sessions.natureRouting`.
147
+ */
148
+ export function routingNatureFor(component) {
149
+ if (!component)
150
+ return undefined;
151
+ const exact = LLM_ROUTING_NATURE[component];
152
+ if (exact)
153
+ return exact;
154
+ const base = component.split('/')[0].replace(/^server:/, '').trim();
155
+ return LLM_ROUTING_NATURE[base];
156
+ }
157
+ /**
158
+ * LA4 (S4 A1) degrade-path safety predicate (FD4 / codex CR6-3). A binary-missing
159
+ * degrade to the default door is a bounded/gating call — and so must be clamped OFF
160
+ * the Opus-via-Claude-CLI landing — iff either:
161
+ * (a) the caller declared `attribution.gating === true`, OR
162
+ * (b) the component maps to a NON-`WRITE` chain in `LLM_ROUTING_NATURE`
163
+ * (mapped nature A/B, or D-non-WRITE — all bounded/gating).
164
+ * A `WRITE`-chain component (Opus-via-CLI is its legitimate open-ended-writing quality
165
+ * lane) or an unmapped, non-gating call is left UNCHANGED — the clamp stays exactly as
166
+ * narrow as bench rules R1/R2. This is a pure lookup over `attribution` + the static
167
+ * map, so it never depends on `sessions.natureRouting` being set.
168
+ */
169
+ export function isBoundedGatingDegrade(component, options) {
170
+ if (options?.attribution?.gating === true)
171
+ return true;
172
+ const row = routingNatureFor(component);
173
+ if (!row)
174
+ return false; // unmapped + not gating ⇒ out of R1's scope, unchanged
175
+ return row.chain !== 'WRITE'; // WRITE is the sanctioned Opus-CLI lane; everything else is bounded/gating
176
+ }
177
+ /* ────────────────────────────────────────────────────────────────────────────
178
+ * S4 Increment A2 — the nature-axis routing RESOLVER (dark/dryRun mechanism).
179
+ *
180
+ * `resolveRoute` is a PURE, side-effect-free evaluator (spec CR2-5): a stateless
181
+ * fold `component → resolvedNature → ordered eligible positions → { primary, swapTail }
182
+ * | 'fall-through' | 'no-route' | throw`. It owns no retry/backoff/breaker/budget
183
+ * machinery — those stay in the existing IntelligenceRouter primitives. Wired into
184
+ * `evaluate()` ONLY when `sessions.natureRouting.enabled` (dev-gated dark). In dryRun
185
+ * (the dev-agent default) it OBSERVES: computes + logs the plan, then passes through to
186
+ * today's routing (byte-identical selection). Enforcing selection (dryRun:false) is a
187
+ * tracked A2.2 remainder — see the honest guard in `evaluate()`.
188
+ * Spec: docs/specs/nature-axis-routing.md §Resolver / FD3 / FD4 / FD9.
189
+ * ──────────────────────────────────────────────────────────────────────────── */
190
+ /**
191
+ * The critical-gate fail-closed outcome (spec CR10-3/CR8-4): a DISTINCT typed error
192
+ * so a caller can never mistake it for an ordinary model failure. A mapped FD6
193
+ * critical gate whose chain has NO available door throws this; the caller applies its
194
+ * existing gating fail-closed semantics (block/deny). The low-stakes empty-set case is
195
+ * deliberately the ordinary non-gating error instead ('no-route'), typed apart on purpose.
196
+ */
197
+ export class RouterFailClosedError extends Error {
198
+ component;
199
+ resolvedChain;
200
+ constructor(component, resolvedChain) {
201
+ super(`RouterFailClosedError: critical gate '${component ?? '(none)'}' has no available door on ` +
202
+ `chain ${resolvedChain} — failing closed (never legacy category routing, never the harness door)`);
203
+ this.component = component;
204
+ this.resolvedChain = resolvedChain;
205
+ this.name = 'RouterFailClosedError';
206
+ }
207
+ }
208
+ /**
209
+ * Tier ordering for the FD3 nature tighten rule `E, B ≥ D ≥ A`. E and B are
210
+ * EQUIVALENT (both JUDGE-tier). A caller-declared nature may only ever RAISE the tier
211
+ * (tighten, the safe direction); a same-tier or lower declared nature is ignored (map
212
+ * wins), and a value outside {A,B,D,E} is ignored.
213
+ */
214
+ const NATURE_TIER_RANK = { A: 0, D: 1, B: 2, E: 2 };
215
+ function isTaskNature(v) {
216
+ return v === 'A' || v === 'B' || v === 'D' || v === 'E';
217
+ }
218
+ /**
219
+ * FD3 — resolve `{ resolvedNature, resolvedChain }` from the component's static map row
220
+ * and an optional caller-declared `attribution.nature`. The component's OWN map row
221
+ * `{nature, chain}` is authoritative by default (preserving a per-component A/FAST vs
222
+ * A/SORT choice a pure nature→chain function could not). A caller-declared nature that
223
+ * TIGHTENS (strictly raises the tier) replaces the chain with the deterministically
224
+ * safe `JUDGE`; anything else is ignored. Returns `undefined` for an unmapped component.
225
+ * Pure — always available, independent of `sessions.natureRouting`.
226
+ */
227
+ export function resolveNatureAndChain(component, declaredNature) {
228
+ const row = routingNatureFor(component);
229
+ if (!row)
230
+ return undefined;
231
+ const tightened = isTaskNature(declaredNature) && NATURE_TIER_RANK[declaredNature] > NATURE_TIER_RANK[row.nature];
232
+ if (tightened) {
233
+ // A tightened nature is always B or E (you only tighten UP a tier) → JUDGE ladder.
234
+ return { resolvedNature: declaredNature, resolvedChain: 'JUDGE' };
235
+ }
236
+ return { resolvedNature: row.nature, resolvedChain: row.chain };
237
+ }
238
+ /**
239
+ * FD-LABEL / FD4.1 — resolve a chain position's `model` label to a concrete model id via
240
+ * `ROUTING_LABEL_TO_MODEL_ID`. A label absent from the registry (a tier hint like `fast`
241
+ * / `capable`) passes through unchanged and is resolved downstream by the existing
242
+ * per-adapter tier map. Pure.
243
+ */
244
+ export function resolvePositionModelId(pos) {
245
+ return ROUTING_LABEL_TO_MODEL_ID[pos.door]?.[pos.model] ?? pos.model;
246
+ }
247
+ /**
248
+ * FD4 place 3 — the harness-door ALLOWLIST clamp (deny-by-default), the nature-routing
249
+ * RUNTIME safety guarantee. For a bounded/gating (FAST/SORT/JUDGE) chain, the ONLY
250
+ * permitted `claude-code` position is the single sanctioned CONCRETE reserve id
251
+ * (`CLAUDE_CODE_RESERVE_MODEL_ID`); any OTHER claude-code id is clamped down to it. This
252
+ * is an allowlist, NOT a denylist — a future/unrecognized capable Claude id can never
253
+ * slip past. `WRITE` is exempt (its Opus-via-CLI quality lane is legitimate), and every
254
+ * non-claude-code door passes through.
255
+ *
256
+ * DELIBERATELY SEPARATE from A1's `clampClaudeCliSwapModel` (which returns the `balanced`
257
+ * TIER token and fires UNCONDITIONALLY on the always-on degrade/swap path): touching that
258
+ * function would change A1's shipped, byte-identical-when-off behavior. This clamp is
259
+ * nature-routing-scoped and concrete-id-based (FD4.1), applied only inside `resolveRoute`.
260
+ */
261
+ export function clampToReserveOnCleanDoor(pos, resolvedChain) {
262
+ if (resolvedChain === 'WRITE')
263
+ return pos; // WRITE is the sole Opus-via-CLI-exempt lane
264
+ if (pos.door !== 'claude-code')
265
+ return pos; // the ban applies only to the harness door
266
+ if (pos.modelId === CLAUDE_CODE_RESERVE_MODEL_ID)
267
+ return pos; // allowlisted — the sanctioned reserve
268
+ return { ...pos, modelId: CLAUDE_CODE_RESERVE_MODEL_ID, clamped: true }; // deny-by-default → reserve
269
+ }
270
+ /** The base component key (strip a "/segment" operation suffix + a `server:` prefix). */
271
+ function baseComponentKey(component) {
272
+ if (!component)
273
+ return undefined;
274
+ return component.split('/')[0].replace(/^server:/, '').trim();
275
+ }
276
+ /**
277
+ * The PURE nature-routing fold (spec §Resolver, steps 1–7). Deps are injected so the
278
+ * function is side-effect-free + trivially testable: `isDoorReachable` reports CLI-door
279
+ * reachability (the class wraps its provider cache). Metered doors are ALWAYS skipped in
280
+ * Increment A. The empty-`available` branch splits by authority class (CR6-2/CR3-1):
281
+ * unmapped → 'fall-through'; low-stakes mapped → 'no-route'; FD6 critical gate → throw
282
+ * RouterFailClosedError. (The R6 doc-tree refuse-to-author branch is a tracked A2.2
283
+ * remainder; until it lands a `claudeBanned` component falls into the low-stakes 'no-route'
284
+ * path — never onto Claude, since resolveRoute never emits a claude-code position for it
285
+ * unless its chain contains one, and R6 chains are authored off-Claude.)
286
+ */
287
+ export function resolveRoute(component, declaredNature, chains, deps) {
288
+ const nc = resolveNatureAndChain(component, declaredNature);
289
+ if (!nc)
290
+ return { outcome: 'fall-through' }; // unmapped ⇒ legacy category routing (LA5 byte-identical)
291
+ const positions = chains[nc.resolvedChain] ?? NATURE_ROUTING_DEFAULT_CHAINS[nc.resolvedChain];
292
+ const available = [];
293
+ for (const p of positions) {
294
+ // Increment A: metered-API doors are DEFINED but always unavailable (skipped) until Increment B.
295
+ if (METERED_ROUTING_DOORS.has(p.door))
296
+ continue;
297
+ if (!deps.isDoorReachable(p.door))
298
+ continue;
299
+ const resolved = {
300
+ door: p.door,
301
+ label: p.model,
302
+ modelId: resolvePositionModelId(p),
303
+ clamped: false,
304
+ };
305
+ available.push(clampToReserveOnCleanDoor(resolved, nc.resolvedChain));
306
+ }
307
+ if (available.length === 0) {
308
+ // FD6 critical gate with no door ⇒ FAIL CLOSED (distinct typed error). NEVER legacy routing.
309
+ if (NATURE_ROUTING_CRITICAL_GATES.has(baseComponentKey(component) ?? '')) {
310
+ throw new RouterFailClosedError(component, nc.resolvedChain);
311
+ }
312
+ // Low-stakes mapped ⇒ the caller's own non-gating heuristic (the ordinary provider-down contract).
313
+ return { outcome: 'no-route' };
314
+ }
315
+ return {
316
+ outcome: 'route',
317
+ resolvedNature: nc.resolvedNature,
318
+ resolvedChain: nc.resolvedChain,
319
+ primary: available[0],
320
+ swapTail: available.slice(1),
321
+ };
322
+ }
323
+ /**
324
+ * Merge an operator's partial `chains` override (config) over the built-in v3 defaults,
325
+ * per-chain. A chain the operator did not override keeps its default. (The FD4.3
326
+ * resolve-time validation that REJECTS a harness-door-violating override → defaults +
327
+ * notice is a tracked A2.2 remainder; the FD4 place-3 runtime clamp above already keeps
328
+ * the banned route closed on every resolved position regardless.)
329
+ */
330
+ export function mergeNatureRoutingChains(override) {
331
+ if (!override)
332
+ return NATURE_ROUTING_DEFAULT_CHAINS;
333
+ return {
334
+ FAST: override.FAST ?? NATURE_ROUTING_DEFAULT_CHAINS.FAST,
335
+ SORT: override.SORT ?? NATURE_ROUTING_DEFAULT_CHAINS.SORT,
336
+ JUDGE: override.JUDGE ?? NATURE_ROUTING_DEFAULT_CHAINS.JUDGE,
337
+ WRITE: override.WRITE ?? NATURE_ROUTING_DEFAULT_CHAINS.WRITE,
338
+ };
339
+ }
139
340
  export class IntelligenceRouter {
140
341
  opts;
141
342
  cache = new Map();
@@ -218,6 +419,32 @@ export class IntelligenceRouter {
218
419
  resolveProvider(framework) {
219
420
  return framework === this.opts.defaultFramework ? this.opts.defaultProvider : this.providerFor(framework);
220
421
  }
422
+ /** Already warned that nature-routing enforcing mode is not yet wired (warn ONCE). */
423
+ warnedNatureEnforceNotWired = false;
424
+ /**
425
+ * S4 A2 — CLI-door reachability probe for the nature router (FD5 availability walk).
426
+ * CLI doors coincide 1:1 with `IntelligenceFramework`. `resolveRoute` skips metered
427
+ * doors before ever calling this, so `door` is always a CLI door. The default framework
428
+ * is always reachable (shared provider); a non-default door is reachable iff its provider
429
+ * builds (binary present). Result is cached by `providerFor`.
430
+ */
431
+ isCliDoorReachable(door) {
432
+ return this.resolveProvider(door) !== null;
433
+ }
434
+ /**
435
+ * S4 A2 — enforcing-mode honesty guard. Flipping `dryRun:false` in A2.1 does NOT re-route
436
+ * (the selection integration is a tracked A2.2 remainder); routing stays byte-identical.
437
+ * Warn ONCE so the flip is an honest no-op rather than a silent dead switch.
438
+ */
439
+ warnNatureEnforceNotWired() {
440
+ if (this.warnedNatureEnforceNotWired)
441
+ return;
442
+ this.warnedNatureEnforceNotWired = true;
443
+ console.warn('IntelligenceRouter: sessions.natureRouting.dryRun is false, but nature-routing ENFORCING ' +
444
+ 'selection is not wired in this build (Increment A2.1 ships the dark/dryRun observation ' +
445
+ 'mechanism; enforcing selection is the tracked A2.2 remainder). Routing stays byte-identical — ' +
446
+ 'the resolver plan is logged but not applied.');
447
+ }
221
448
  async evaluate(prompt, options) {
222
449
  const component = options?.attribution?.component;
223
450
  const explicitCategory = options?.attribution?.category;
@@ -225,6 +452,31 @@ export class IntelligenceRouter {
225
452
  ? explicitCategory
226
453
  : categoryForComponent(component);
227
454
  const cfg = this.opts.resolveConfig();
455
+ // ── S4 A2 — nature-axis routing OBSERVATION (dev-gated dark; dryRun-first). ──
456
+ // Byte-identical when unset/off: when the feature is absent OR `enabled:false` this
457
+ // whole block is skipped and NOTHING about selection changes. In dryRun (the dev-agent
458
+ // default) it OBSERVES only — computes + logs the plan via `onNatureRoutePlan` — and
459
+ // still falls through to today's selection below. Enforcing SELECTION (dryRun:false) is
460
+ // a tracked A2.2 remainder; guarded here so a flip is an HONEST no-op, never a silent
461
+ // dead switch and never a mis-route. A resolver error can never break routing here.
462
+ const natureRt = this.opts.resolveNatureRouting?.();
463
+ if (natureRt?.enabled) {
464
+ const dryRun = natureRt.dryRun !== false; // default true on first enable
465
+ try {
466
+ const resolution = resolveRoute(component, options?.attribution?.nature, mergeNatureRoutingChains(natureRt.chains), { isDoorReachable: (d) => this.isCliDoorReachable(d) });
467
+ this.opts.onNatureRoutePlan?.({ component, category, dryRun, resolution });
468
+ }
469
+ catch (e) {
470
+ if (e instanceof RouterFailClosedError) {
471
+ this.opts.onNatureRoutePlan?.({ component, category, dryRun, failClosed: true });
472
+ }
473
+ else {
474
+ this.opts.onNatureRoutePlan?.({ component, category, dryRun });
475
+ }
476
+ }
477
+ if (!dryRun)
478
+ this.warnNatureEnforceNotWired();
479
+ }
228
480
  // Unconfigured ⇒ exactly today's behavior.
229
481
  if (!cfg)
230
482
  return this.opts.defaultProvider.evaluate(prompt, options);
@@ -243,7 +495,35 @@ export class IntelligenceRouter {
243
495
  to: this.opts.defaultFramework,
244
496
  reason: `framework '${framework}' unavailable (binary missing / not built) — degraded to default`,
245
497
  });
246
- return this.opts.defaultProvider.evaluate(prompt, options);
498
+ // LA4 (S4 A1) — UNCONDITIONAL degrade-path safety clamp. This degrade lands on
499
+ // `defaultFramework`; if that door is `claude-code` and the requested tier is
500
+ // `capable`, the landing is Opus-via-Claude-CLI — the one MEASURED-BANNED route for a
501
+ // bounded/gating verdict (81.7% vs 99.1% API; missed canonical STOPs at 73%). The
502
+ // shipped router leaves this exit UNCLAMPED (the S2 clamp only guards the failure-swap
503
+ // loop), so a binary-missing bounded/gating `capable` degrade with a `claude-code`
504
+ // default fails OPEN onto Opus-via-CLI. Clamp it to the Sonnet-4.6-CLI reserve
505
+ // (`balanced`, the SAME reserve `clampClaudeCliSwapModel` already uses) for
506
+ // bounded/gating calls ONLY — `WRITE` keeps its legitimate Opus-CLI quality lane, and
507
+ // an unmapped non-gating call is out of R1's scope. This fires REGARDLESS of
508
+ // `sessions.natureRouting`: it is a standalone safety narrowing, NOT gated on the S4
509
+ // feature flag (FD4 LA4-r2). Strictly the safe direction (a measured-worse route → the
510
+ // sanctioned reserve) — never an upgrade, never a block.
511
+ let degradeOptions = options;
512
+ if (isBoundedGatingDegrade(component, options)) {
513
+ const { model: clampedModel, clamped } = clampClaudeCliSwapModel(this.opts.defaultFramework, options?.model);
514
+ if (clamped) {
515
+ degradeOptions = { ...(options ?? {}), model: clampedModel };
516
+ this.opts.onDegrade?.({
517
+ component: component ?? '(none)',
518
+ category,
519
+ from: framework,
520
+ to: this.opts.defaultFramework,
521
+ reason: `degrade-path-model-clamp (LA4): '${this.opts.defaultFramework}' capable→balanced ` +
522
+ `(Opus-via-Claude-CLI is banned for bounded/gating verdicts — R1/R2; unconditional)`,
523
+ });
524
+ }
525
+ }
526
+ return this.opts.defaultProvider.evaluate(prompt, degradeOptions);
247
527
  }
248
528
  // Failure-swap: ONLY a safety-gating call with configured failureSwap targets
249
529
  // swaps on a RUNTIME failure (rate-limit / circuit-open / error). Non-gating
@@ -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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"}
@@ -150,6 +150,20 @@ export declare function migrateConfigConversationFollowThroughDevGate(config: Re
150
150
  * shape → safe no-op). Idempotent + existence-checked.
151
151
  */
152
152
  export declare function migrateConfigActionClaimSlackDevGate(config: Record<string, unknown>): boolean;
153
+ /**
154
+ * S4 Nature-Axis Routing (docs/specs/nature-axis-routing.md, § Migration Parity): SEED
155
+ * `sessions.natureRouting` DARK on existing agents so the update path reaches deployed
156
+ * agents (not only new agents via init). Adds the block ONLY when ABSENT — an operator/agent
157
+ * that already configured it is never clobbered (existence-checked, idempotent).
158
+ *
159
+ * CRITICAL — `enabled` is DELIBERATELY OMITTED (enable-path integrity, the #1001 pattern):
160
+ * the construction boundary resolves it via `resolveDevAgentGate(cfg.enabled, config)`, so a
161
+ * seeded `enabled:false` would force-dark even a development agent. `dryRun:true` is the
162
+ * observe-only canary; `metered.goLive:false` keeps Increment B inert. Chain defaults live in
163
+ * CODE (`NATURE_ROUTING_DEFAULT_CHAINS`) — the seed stays small and a future chain reslot
164
+ * reaches agents on a `schemaVersion` bump, not by writing a chain blob into every config.
165
+ */
166
+ export declare function migrateConfigNatureRoutingDark(config: Record<string, unknown>): boolean;
153
167
  /**
154
168
  * "Self-Unblock Before Escalating" (docs/specs/self-unblock-before-escalating.md):
155
169
  * the two nested blockerLedger sub-features — selfUnblockChecklist + durableVaultSession