pi-smart-router 0.20.0 → 0.21.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/.pi/extensions/smart-router/session-lifecycle.ts +59 -0
- package/README.md +18 -0
- package/config/benchmark-profiles.json +2 -3
- package/dist/api/middleware/pi-router-middleware.d.ts +8 -0
- package/dist/api/middleware/pi-router-middleware.d.ts.map +1 -1
- package/dist/api/middleware/pi-router-middleware.js +12 -0
- package/dist/api/middleware/pi-router-middleware.js.map +1 -1
- package/dist/api/session-eviction.d.ts +27 -0
- package/dist/api/session-eviction.d.ts.map +1 -0
- package/dist/api/session-eviction.js +21 -0
- package/dist/api/session-eviction.js.map +1 -0
- package/dist/cli/smart-router-cli.d.ts +9 -5
- package/dist/cli/smart-router-cli.d.ts.map +1 -1
- package/dist/cli/smart-router-cli.js +23 -16
- package/dist/cli/smart-router-cli.js.map +1 -1
- package/dist/domain/matching/hydra-matcher.d.ts +47 -0
- package/dist/domain/matching/hydra-matcher.d.ts.map +1 -1
- package/dist/domain/matching/hydra-matcher.js +53 -0
- package/dist/domain/matching/hydra-matcher.js.map +1 -1
- package/dist/domain/matching/missing-weights-reason-codes.d.ts +18 -0
- package/dist/domain/matching/missing-weights-reason-codes.d.ts.map +1 -0
- package/dist/domain/matching/missing-weights-reason-codes.js +17 -0
- package/dist/domain/matching/missing-weights-reason-codes.js.map +1 -0
- package/dist/domain/matching/modernbert-heads.d.ts +6 -0
- package/dist/domain/matching/modernbert-heads.d.ts.map +1 -1
- package/dist/domain/matching/modernbert-heads.js +4 -0
- package/dist/domain/matching/modernbert-heads.js.map +1 -1
- package/dist/domain/pipeline/router-pipeline.d.ts.map +1 -1
- package/dist/domain/pipeline/router-pipeline.js +37 -2
- package/dist/domain/pipeline/router-pipeline.js.map +1 -1
- package/dist/domain/types/schemas.d.ts +2 -0
- package/dist/domain/types/schemas.d.ts.map +1 -1
- package/dist/domain/types/schemas.js +11 -0
- package/dist/domain/types/schemas.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/infra/telemetry.d.ts +15 -7
- package/dist/infra/telemetry.d.ts.map +1 -1
- package/dist/infra/telemetry.js +33 -13
- package/dist/infra/telemetry.js.map +1 -1
- package/package.json +1 -1
- package/specs/001-build-smart-router/contracts/telemetry-contrib.schema.json +3 -3
- package/src/api/middleware/pi-router-middleware.ts +14 -0
- package/src/api/session-eviction.ts +36 -0
- package/src/cli/smart-router-cli.ts +23 -13
- package/src/domain/matching/hydra-matcher.ts +85 -0
- package/src/domain/matching/missing-weights-reason-codes.ts +22 -0
- package/src/domain/matching/modernbert-heads.ts +12 -0
- package/src/domain/pipeline/router-pipeline.ts +50 -1
- package/src/domain/types/schemas.ts +11 -0
- package/src/index.ts +2 -0
- package/src/infra/telemetry.ts +38 -9
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';
|
|
2
2
|
|
|
3
|
+
import { evictInMemorySessionState } from '../../../src/api/session-eviction.js';
|
|
3
4
|
import { SessionPinner } from '../../../src/domain/pinning/session-pinner.js';
|
|
4
5
|
import {
|
|
5
6
|
bindSharedModelRegistry,
|
|
@@ -15,6 +16,15 @@ export const FLEET_MODE_ENTRY_TYPE = 'smart-router-fleet-mode' as const;
|
|
|
15
16
|
const SMART_ROUTER_PROVIDER = 'smart-router' as const;
|
|
16
17
|
const SMART_ROUTER_AUTO_ID = 'auto' as const;
|
|
17
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Orphan-session TTL fallback (SP-248, #145). `session_shutdown` is the primary
|
|
21
|
+
* teardown signal; if pi ever shuts a session down without delivering it
|
|
22
|
+
* (extension reload races, missed events), the session's in-memory routing
|
|
23
|
+
* state is evicted once it has been idle for ORPHAN_SESSION_TTL_MS. The sweep
|
|
24
|
+
* runs on `session_start` and fails open — eviction must never break startup.
|
|
25
|
+
*/
|
|
26
|
+
export const ORPHAN_SESSION_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
27
|
+
|
|
18
28
|
export function isSmartRouterActive(model: { provider: string; id: string }): boolean {
|
|
19
29
|
return model.provider === SMART_ROUTER_PROVIDER && model.id === SMART_ROUTER_AUTO_ID;
|
|
20
30
|
}
|
|
@@ -97,6 +107,39 @@ export function setupSessionHooks(
|
|
|
97
107
|
): void {
|
|
98
108
|
let activeModel: { provider: string; id: string } | undefined;
|
|
99
109
|
|
|
110
|
+
// Last-seen stamp per session for the orphan-TTL fallback (SP-248).
|
|
111
|
+
const lastSeenBySession = new Map<string, number>();
|
|
112
|
+
|
|
113
|
+
/** Evict all in-memory routing state for one session via the SP-247 helper. */
|
|
114
|
+
function evictSessionState(sessionId: string | undefined): void {
|
|
115
|
+
// Fail open: a missing/empty session id must never break teardown.
|
|
116
|
+
if (sessionId === undefined || sessionId === '') {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
evictInMemorySessionState(sessionId, {
|
|
120
|
+
executionLedger: runtime.executionLedger,
|
|
121
|
+
lifecycleHookState: runtime.lifecycleHookState,
|
|
122
|
+
sessionRouting: runtime.sessionRouting,
|
|
123
|
+
});
|
|
124
|
+
lastSeenBySession.delete(sessionId);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** Drop sessions idle longer than ORPHAN_SESSION_TTL_MS (never throws). */
|
|
128
|
+
function sweepOrphanedSessions(now: number): void {
|
|
129
|
+
try {
|
|
130
|
+
for (const [sessionId, lastSeen] of lastSeenBySession) {
|
|
131
|
+
if (now - lastSeen > ORPHAN_SESSION_TTL_MS) {
|
|
132
|
+
evictSessionState(sessionId);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
} catch (error) {
|
|
136
|
+
console.warn(
|
|
137
|
+
'[smart-router] orphan session sweep failed (fail open)',
|
|
138
|
+
error instanceof Error ? error.message : String(error),
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
100
143
|
pi.on('session_start', async (_event, ctx) => {
|
|
101
144
|
activeModel = ctx.model;
|
|
102
145
|
bindSharedModelRegistry(runtime, ctx.modelRegistry);
|
|
@@ -128,6 +171,10 @@ export function setupSessionHooks(
|
|
|
128
171
|
datasetNotify.fn = runtime.notifyDatasetEnabled;
|
|
129
172
|
|
|
130
173
|
const sessionId = ctx.sessionManager.getSessionId();
|
|
174
|
+
const now = Date.now();
|
|
175
|
+
lastSeenBySession.set(sessionId, now);
|
|
176
|
+
sweepOrphanedSessions(now);
|
|
177
|
+
|
|
131
178
|
await sessionPinner.restoreSessionPin(sessionId);
|
|
132
179
|
|
|
133
180
|
if (ctx.model !== undefined && isSmartRouterActive(ctx.model)) {
|
|
@@ -158,5 +205,17 @@ export function setupSessionHooks(
|
|
|
158
205
|
delete runtime.streamDeps.ensureFleetFresh;
|
|
159
206
|
datasetNotify.fn = undefined;
|
|
160
207
|
ctx.ui.setStatus('smart-router-lmu', undefined);
|
|
208
|
+
|
|
209
|
+
// SP-248 (#145): drop per-session routing state so long-running pi
|
|
210
|
+
// processes do not retain ledger/lifecycle/routing maps forever.
|
|
211
|
+
// Fail open — teardown cleanup must never crash the host agent.
|
|
212
|
+
try {
|
|
213
|
+
evictSessionState(ctx.sessionManager.getSessionId());
|
|
214
|
+
} catch (error) {
|
|
215
|
+
console.warn(
|
|
216
|
+
'[smart-router] session teardown eviction failed (fail open)',
|
|
217
|
+
error instanceof Error ? error.message : String(error),
|
|
218
|
+
);
|
|
219
|
+
}
|
|
161
220
|
});
|
|
162
221
|
}
|
package/README.md
CHANGED
|
@@ -489,6 +489,8 @@ v0.2.0 adds **Session-Aware Agentic Routing (SAAR)** pin knobs ([#72](https://gi
|
|
|
489
489
|
|
|
490
490
|
See [routing-roadmap.md](docs/routing-roadmap.md) §2 P0 for design context.
|
|
491
491
|
|
|
492
|
+
**Long-running pi sessions — in-memory state eviction (v0.21.0, [#145](https://github.com/beettlle/pi-smart-router/issues/145)).** Session pins and in-memory routing snapshots live in process memory, not in the SQLite telemetry store. When pi ends a session, the extension's `session_shutdown` handler (reason: `quit` / `reload` / `new` / `resume` / `fork`) calls `evictInMemorySessionState` (`src/api/session-eviction.ts`) and drops **all** in-memory routing state for that session — pins, cache-breakeven snapshots, turn metadata. A new session starts cold: no stale pin, no warm-cache assumption carries over. Persistent telemetry in `.pi-smart-router/state.db` is untouched. As a safety net for orphaned sessions (e.g. a crashed pi process that never emitted `session_shutdown`), a sweep on `session_start` evicts sessions idle longer than `ORPHAN_SESSION_TTL_MS` (**24 hours**, exported from `.pi/extensions/smart-router/session-lifecycle.ts`); the sweep fails open — a missing session id or sweep error never blocks session start.
|
|
493
|
+
|
|
492
494
|
### Planning delegate (v0.4.0 Delegate)
|
|
493
495
|
|
|
494
496
|
When a **planning** turn would route primary inference to frontier while a warm **economical** session pin is active, smart-router prefers **cache-preserving delegation** ([#71](https://github.com/beettlle/pi-smart-router/issues/71)):
|
|
@@ -570,6 +572,16 @@ Explain/telemetry expose `route_path` (`neural` \| `learned` \| `heuristic` \| `
|
|
|
570
572
|
| `learned_min_confidence` | `0.6` | Minimum learned-entry confidence to honor a tier suggestion |
|
|
571
573
|
| `learned_max_entries` | `512` | Learned-map cap per key space (FIFO eviction) |
|
|
572
574
|
| `pattern_tool_use_ceiling` | `0.3` | Tool-use cue ceiling for honoring cheaper-tier learned/pattern suggestions |
|
|
575
|
+
| `fail_closed_on_missing_weights` | `false` | When `true`, missing/placeholder neural weights fail **closed**: the matcher throws before paying embedding cost and the pipeline routes through the degraded sandwich (`neural_misconfigured`) with the SP-251 reason codes on the decision. When `false` (default), routing stays fail-open — placeholder weights score with neutral defaults and the reason codes are advisory telemetry only |
|
|
576
|
+
|
|
577
|
+
**Missing-weights reason codes (v0.21.0, [#148](https://github.com/beettlle/pi-smart-router/issues/148)).** When the HyDRA matcher cannot load real neural weights, the decision surfaces structured reason codes (`src/domain/matching/missing-weights-reason-codes.ts`) on the routing decision / `requirement_reason_codes` — visible in explain (`pi router explain` / `POST /v1/route/explain`), `/smart-router history`, and telemetry — not stderr-only:
|
|
578
|
+
|
|
579
|
+
| Reason code | Meaning | Operator action |
|
|
580
|
+
|-------------|---------|-----------------|
|
|
581
|
+
| `hydra_weights_missing` | HyDRA projection-head weights artifact is absent or unloadable, so neural scoring is running on fallback behavior | Restore the weights artifact (see [HyDRA model cache](#hydra-model-cache)); routing continues fail-open unless `fail_closed_on_missing_weights` is set |
|
|
582
|
+
| `k4_heads_placeholder` | ModernBERT K4 heads are placeholder (untrained) weights — scores are neutral defaults, not learned predictions | Regenerate/install the trained K4 heads artifact; treat current K4 scores as non-authoritative |
|
|
583
|
+
|
|
584
|
+
With the default fail-open behavior these codes are advisory: the route proceeds with safe defaults. Set `degraded_route.fail_closed_on_missing_weights: true` when you prefer an explicit degraded-route decision (sandwich chain above, `route_path` records the branch taken) over silently routing on placeholder neural scores.
|
|
573
585
|
|
|
574
586
|
Distinct from soft heat affinity (healthy-path bias): this is failover / skip-expensive-stage only. Routing remains **pre-generation** — no FrugalGPT-style cascades (see [routing-roadmap.md](docs/routing-roadmap.md) §1).
|
|
575
587
|
|
|
@@ -764,6 +776,12 @@ npx pi-smart-router export telemetry-contrib [--limit N]
|
|
|
764
776
|
|
|
765
777
|
This writes schema-valid JSON to `.pi-smart-router/exports/telemetry-contrib-<timestamp>.json`. Each row conforms to [`telemetry-contrib.schema.json`](specs/001-build-smart-router/contracts/telemetry-contrib.schema.json).
|
|
766
778
|
|
|
779
|
+
**Export schema v2 — session-hash migration (v0.21.0, [#146](https://github.com/beettlle/pi-smart-router/issues/146)).** The contrib export schema was bumped **v1 → v2** (`TELEMETRY_CONTRIB_VERSION = 2` in `src/cli/smart-router-cli.ts`). In v1, `session_id_hash` was an **unsalted SHA-256** of the raw session id; in v2 it is an **HMAC-SHA256 keyed with an install-local pepper** (`hashSessionIdForTelemetryExport` in `src/infra/telemetry.ts`). The pepper is generated once per install at `.pi-smart-router/.dataset-key` (mode 0600) and is **never** included in export payloads — ingest strips pepper fields before aggregation. Consequences for operators comparing exports:
|
|
780
|
+
|
|
781
|
+
- Hashes are **stable per install** (same session → same hash within one install/cwd) but **not correlatable across installs** — two machines routing the same prompt produce different hashes.
|
|
782
|
+
- **v1 hashes are not comparable with v2 hashes.** If you maintain baselines that join or diff older v1 contrib exports, **re-baseline** on v2 output — do not mix rows across the version boundary.
|
|
783
|
+
- Raw `session_id` / `request_id` values never appear in the JSONL in either version.
|
|
784
|
+
|
|
767
785
|
**How to contribute**
|
|
768
786
|
|
|
769
787
|
1. Opt in to dataset capture (`SMART_ROUTER_DATASET=1`) and dogfood with `/model smart-router/auto` for several sessions.
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
"livecodebench": "https://livecodebench.github.io/leaderboard.html",
|
|
8
8
|
"bfcl": "https://gorilla.cs.berkeley.edu/leaderboard.html"
|
|
9
9
|
},
|
|
10
|
-
"scrape_date": "2026-
|
|
11
|
-
"catalog_freeze_date": "2026-
|
|
10
|
+
"scrape_date": "2026-09-03",
|
|
11
|
+
"catalog_freeze_date": "2026-09-03"
|
|
12
12
|
},
|
|
13
13
|
"aliases": {
|
|
14
14
|
"anthropic/claude-opus-4": "claude-opus-4-5",
|
|
@@ -39,7 +39,6 @@
|
|
|
39
39
|
"gemini-2.5-flash-lite": "gemini-2.5-flash",
|
|
40
40
|
"gemini-2.5-flash-preview": "gemini-2.5-flash",
|
|
41
41
|
"gemini-flash-8b": "gemini-2.5-flash",
|
|
42
|
-
"gemini-flash-latest": "gemini-2.5-flash",
|
|
43
42
|
"github-copilot/claude-3.5-sonnet": "claude-sonnet-4-6",
|
|
44
43
|
"github-copilot/claude-sonnet-4": "claude-sonnet-4-6",
|
|
45
44
|
"github-copilot/claude-sonnet-4.5": "claude-sonnet-4-6",
|
|
@@ -62,6 +62,14 @@ export declare class LifecycleHookState {
|
|
|
62
62
|
private getOrCreate;
|
|
63
63
|
markCompaction(sessionId: string): void;
|
|
64
64
|
setForceModel(sessionId: string, modelId: string): void;
|
|
65
|
+
/**
|
|
66
|
+
* Evict all lifecycle state for a session (SP-247, #145).
|
|
67
|
+
* Unlike `consume`, this deletes the session bucket outright so long-lived
|
|
68
|
+
* pi processes can drop per-session routing state at session teardown.
|
|
69
|
+
*/
|
|
70
|
+
evict(sessionId: string): void;
|
|
71
|
+
/** Whether lifecycle state is currently retained for a session. */
|
|
72
|
+
has(sessionId: string): boolean;
|
|
65
73
|
/**
|
|
66
74
|
* Consume lifecycle flags for the next routing request.
|
|
67
75
|
* Compaction is one-shot; force_model_id is one-shot per consume.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-router-middleware.d.ts","sourceRoot":"","sources":["../../../src/api/middleware/pi-router-middleware.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pi-router-middleware.d.ts","sourceRoot":"","sources":["../../../src/api/middleware/pi-router-middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,18 @@ export class LifecycleHookState {
|
|
|
32
32
|
const state = this.getOrCreate(sessionId);
|
|
33
33
|
state.forceModelId = modelId;
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Evict all lifecycle state for a session (SP-247, #145).
|
|
37
|
+
* Unlike `consume`, this deletes the session bucket outright so long-lived
|
|
38
|
+
* pi processes can drop per-session routing state at session teardown.
|
|
39
|
+
*/
|
|
40
|
+
evict(sessionId) {
|
|
41
|
+
this.sessions.delete(sessionId);
|
|
42
|
+
}
|
|
43
|
+
/** Whether lifecycle state is currently retained for a session. */
|
|
44
|
+
has(sessionId) {
|
|
45
|
+
return this.sessions.has(sessionId);
|
|
46
|
+
}
|
|
35
47
|
/**
|
|
36
48
|
* Consume lifecycle flags for the next routing request.
|
|
37
49
|
* Compaction is one-shot; force_model_id is one-shot per consume.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-router-middleware.js","sourceRoot":"","sources":["../../../src/api/middleware/pi-router-middleware.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pi-router-middleware.js","sourceRoot":"","sources":["../../../src/api/middleware/pi-router-middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory session-state eviction — SP-247 (partial #145).
|
|
3
|
+
*
|
|
4
|
+
* Long-lived pi processes accumulate per-session routing state across several
|
|
5
|
+
* in-memory maps (execution ledger, lifecycle hook flags, extension session
|
|
6
|
+
* routing snapshots). `evictInMemorySessionState` drops all of it for one
|
|
7
|
+
* session id in a single call so extension code (SP-248) can wire session
|
|
8
|
+
* teardown without re-implementing each clear.
|
|
9
|
+
*/
|
|
10
|
+
import type { ExecutionLedger } from '../domain/delegation/execution-ledger.js';
|
|
11
|
+
import type { LifecycleHookState } from './middleware/pi-router-middleware.js';
|
|
12
|
+
export interface SessionEvictionTargets {
|
|
13
|
+
/** Per-session last-executing-model ledger. */
|
|
14
|
+
readonly executionLedger: ExecutionLedger;
|
|
15
|
+
/** Per-session compaction / force-model lifecycle flags. */
|
|
16
|
+
readonly lifecycleHookState: LifecycleHookState;
|
|
17
|
+
/** Optional extension-owned routing snapshot map (cleared when provided). */
|
|
18
|
+
readonly sessionRouting?: Map<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Delete all in-memory routing state retained for `sessionId`.
|
|
22
|
+
*
|
|
23
|
+
* Unknown session ids are a no-op per target. Clearing is idempotent: calling
|
|
24
|
+
* eviction twice for the same session is safe.
|
|
25
|
+
*/
|
|
26
|
+
export declare function evictInMemorySessionState(sessionId: string, targets: SessionEvictionTargets): void;
|
|
27
|
+
//# sourceMappingURL=session-eviction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-eviction.d.ts","sourceRoot":"","sources":["../../src/api/session-eviction.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,MAAM,WAAW,sBAAsB;IACrC,+CAA+C;IAC/C,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,4DAA4D;IAC5D,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChD,6EAA6E;IAC7E,QAAQ,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,sBAAsB,GAC9B,IAAI,CAIN"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory session-state eviction — SP-247 (partial #145).
|
|
3
|
+
*
|
|
4
|
+
* Long-lived pi processes accumulate per-session routing state across several
|
|
5
|
+
* in-memory maps (execution ledger, lifecycle hook flags, extension session
|
|
6
|
+
* routing snapshots). `evictInMemorySessionState` drops all of it for one
|
|
7
|
+
* session id in a single call so extension code (SP-248) can wire session
|
|
8
|
+
* teardown without re-implementing each clear.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Delete all in-memory routing state retained for `sessionId`.
|
|
12
|
+
*
|
|
13
|
+
* Unknown session ids are a no-op per target. Clearing is idempotent: calling
|
|
14
|
+
* eviction twice for the same session is safe.
|
|
15
|
+
*/
|
|
16
|
+
export function evictInMemorySessionState(sessionId, targets) {
|
|
17
|
+
targets.executionLedger.clear(sessionId);
|
|
18
|
+
targets.lifecycleHookState.evict(sessionId);
|
|
19
|
+
targets.sessionRouting?.delete(sessionId);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=session-eviction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-eviction.js","sourceRoot":"","sources":["../../src/api/session-eviction.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,SAAiB,EACjB,OAA+B;IAE/B,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -9,7 +9,12 @@ import type { RoutingDatasetRecord, RoutingOutcomeRecord } from '../domain/types
|
|
|
9
9
|
import type { StorePort } from '../domain/types/store-port.js';
|
|
10
10
|
export declare const UNPIN_SUBCOMMAND: "unpin";
|
|
11
11
|
export declare const EXPORT_TELEMETRY_CONTRIB_COMMAND: "export telemetry-contrib";
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Contrib export format version. v2 (SP-250): session_id_hash switched from
|
|
14
|
+
* unsalted SHA-256 to install-pepper-keyed HMAC-SHA256 (SP-249 helper), so
|
|
15
|
+
* hashes are stable per install/cwd but not correlatable across installs.
|
|
16
|
+
*/
|
|
17
|
+
export declare const TELEMETRY_CONTRIB_VERSION: 2;
|
|
13
18
|
export declare const TELEMETRY_CONTRIB_SCHEMA_PATH = "specs/001-build-smart-router/contracts/telemetry-contrib.schema.json";
|
|
14
19
|
export declare const DEFAULT_TELEMETRY_CONTRIB_EXPORT_DIR = ".pi-smart-router/exports";
|
|
15
20
|
export declare const DEFAULT_TELEMETRY_CONTRIB_EXPORT_LIMIT = 10000;
|
|
@@ -65,19 +70,18 @@ export declare function parseExportTelemetryContribArgs(args: string): {
|
|
|
65
70
|
* Does not modify SessionPinner break rules — operator-initiated unpin only.
|
|
66
71
|
*/
|
|
67
72
|
export declare function executeUnpinCommand(ctx: UnpinCommandContext): UnpinCommandResult;
|
|
68
|
-
export declare function hashSessionIdForContribExport(sessionId: string): string;
|
|
69
73
|
/** Map a dataset row plus linked outcomes to a privacy-safe telemetry contrib record. */
|
|
70
|
-
export declare function toTelemetryContribRecord(record: RoutingDatasetRecord, outcomes?: readonly RoutingOutcomeRecord[]): Record<string, unknown>;
|
|
74
|
+
export declare function toTelemetryContribRecord(record: RoutingDatasetRecord, outcomes?: readonly RoutingOutcomeRecord[], pepper?: Buffer): Record<string, unknown>;
|
|
71
75
|
export declare function formatTelemetryContribJson(records: readonly Record<string, unknown>[]): string;
|
|
72
76
|
export declare function formatTelemetryContribJsonl(records: readonly Record<string, unknown>[]): string;
|
|
73
77
|
export declare function formatTelemetryContribExportTimestamp(date?: Date): string;
|
|
74
78
|
export declare function getTelemetryContribExportPath(cwd: string, timestamp: string): string;
|
|
75
79
|
/** Defense-in-depth validation using SP-116 contrib safety checks. */
|
|
76
80
|
export declare function validateTelemetryContribRecord(record: unknown, context?: string): Record<string, unknown>;
|
|
77
|
-
export declare function buildTelemetryContribRecords(datasetRecords: readonly RoutingDatasetRecord[], outcomeRecords?: readonly RoutingOutcomeRecord[]): Record<string, unknown>[];
|
|
81
|
+
export declare function buildTelemetryContribRecords(datasetRecords: readonly RoutingDatasetRecord[], outcomeRecords?: readonly RoutingOutcomeRecord[], pepper?: Buffer): Record<string, unknown>[];
|
|
78
82
|
export declare function exportTelemetryContrib(ctx: TelemetryContribExportContext, options?: Pick<ExportTelemetryContribOptions, 'writeFile'>): Promise<ExportTelemetryContribResult>;
|
|
79
83
|
/** Join dataset export shape with outcome labels, then strip to contrib-safe fields. */
|
|
80
|
-
export declare function datasetExportRowToTelemetryContrib(exportRecord: Record<string, unknown>, outcomes: readonly RoutingOutcomeRecord[]): Record<string, unknown>;
|
|
84
|
+
export declare function datasetExportRowToTelemetryContrib(exportRecord: Record<string, unknown>, outcomes: readonly RoutingOutcomeRecord[], pepper?: Buffer): Record<string, unknown>;
|
|
81
85
|
export declare const smartRouterCliSubcommands: {
|
|
82
86
|
readonly unpin: typeof executeUnpinCommand;
|
|
83
87
|
readonly exportTelemetryContrib: typeof exportTelemetryContrib;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smart-router-cli.d.ts","sourceRoot":"","sources":["../../src/cli/smart-router-cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"smart-router-cli.d.ts","sourceRoot":"","sources":["../../src/cli/smart-router-cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAIpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,eAAO,MAAM,gBAAgB,EAAG,OAAgB,CAAC;AACjD,eAAO,MAAM,gCAAgC,EAAG,0BAAmC,CAAC;AAEpF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAG,CAAU,CAAC;AACpD,eAAO,MAAM,6BAA6B,yEAC8B,CAAC;AAEzE,eAAO,MAAM,oCAAoC,6BAA6B,CAAC;AAC/E,eAAO,MAAM,sCAAsC,QAAsB,CAAC;AAE1E,gGAAgG;AAChG,eAAO,MAAM,4BAA4B,4OAe/B,CAAC;AAEX,+EAA+E;AAC/E,eAAO,MAAM,6BAA6B,oFAMhC,CAAC;AAEX,iEAAiE;AACjE,eAAO,MAAM,qCAAqC,QAC4C,CAAC;AAE/F,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,SAAkB,IAAI,qCAAqC;gBAE/C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAGpD;AAsCD,yFAAyF;AACzF,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAe3C;AAED,sFAAsF;AACtF,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED,gEAAgE;AAChE,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOxE;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CA6BA;AAUD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,kBAAkB,CA4BhF;AAoBD,yFAAyF;AACzF,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,oBAAoB,EAC5B,QAAQ,GAAE,SAAS,oBAAoB,EAAO,EAC9C,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2CzB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAC1C,MAAM,CAKR;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAC1C,MAAM,CAKR;AAED,wBAAgB,qCAAqC,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAErF;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAMpF;AAED,sEAAsE;AACtE,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGzB;AAED,wBAAgB,4BAA4B,CAC1C,cAAc,EAAE,SAAS,oBAAoB,EAAE,EAC/C,cAAc,GAAE,SAAS,oBAAoB,EAAO,EACpD,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAS3B;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,6BAA6B,EAClC,OAAO,CAAC,EAAE,IAAI,CAAC,6BAA6B,EAAE,WAAW,CAAC,GACzD,OAAO,CAAC,4BAA4B,CAAC,CAqBvC;AAED,wFAAwF;AACxF,wBAAgB,kCAAkC,CAChD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,EACzC,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBzB;AAED,eAAO,MAAM,yBAAyB;;;CAG5B,CAAC"}
|
|
@@ -4,14 +4,20 @@
|
|
|
4
4
|
* Extension wiring lives in `.pi/extensions/smart-router/commands.ts`;
|
|
5
5
|
* this module holds reusable subcommand logic for dogfooding and tests.
|
|
6
6
|
*/
|
|
7
|
-
import { createHash } from 'node:crypto';
|
|
8
7
|
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
9
8
|
import { join } from 'node:path';
|
|
10
9
|
import { attachOutcomeLabelsToExport, deriveSuccessLabel, indexOutcomesByRequestId, } from '../domain/routing/p-success-classifier.js';
|
|
11
10
|
import { DATASET_MAX_ENTRIES } from '../infrastructure/telemetry/dataset-limits.js';
|
|
11
|
+
import { loadOrCreateDatasetPepper } from '../infrastructure/telemetry/dataset-recorder.js';
|
|
12
|
+
import { hashSessionIdForTelemetryExport } from '../infra/telemetry.js';
|
|
12
13
|
export const UNPIN_SUBCOMMAND = 'unpin';
|
|
13
14
|
export const EXPORT_TELEMETRY_CONTRIB_COMMAND = 'export telemetry-contrib';
|
|
14
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Contrib export format version. v2 (SP-250): session_id_hash switched from
|
|
17
|
+
* unsalted SHA-256 to install-pepper-keyed HMAC-SHA256 (SP-249 helper), so
|
|
18
|
+
* hashes are stable per install/cwd but not correlatable across installs.
|
|
19
|
+
*/
|
|
20
|
+
export const TELEMETRY_CONTRIB_VERSION = 2;
|
|
15
21
|
export const TELEMETRY_CONTRIB_SCHEMA_PATH = 'specs/001-build-smart-router/contracts/telemetry-contrib.schema.json';
|
|
16
22
|
export const DEFAULT_TELEMETRY_CONTRIB_EXPORT_DIR = '.pi-smart-router/exports';
|
|
17
23
|
export const DEFAULT_TELEMETRY_CONTRIB_EXPORT_LIMIT = DATASET_MAX_ENTRIES;
|
|
@@ -164,27 +170,24 @@ export function executeUnpinCommand(ctx) {
|
|
|
164
170
|
level: 'info',
|
|
165
171
|
};
|
|
166
172
|
}
|
|
167
|
-
|
|
168
|
-
return createHash('sha256').update(sessionId).digest('hex');
|
|
169
|
-
}
|
|
170
|
-
function resolveSessionIdHash(record, outcomes) {
|
|
173
|
+
function resolveSessionIdHash(record, outcomes, pepper) {
|
|
171
174
|
const sessionId = outcomes[0]?.session_id;
|
|
172
175
|
if (typeof sessionId === 'string' && sessionId.length > 0) {
|
|
173
|
-
return
|
|
176
|
+
return hashSessionIdForTelemetryExport(sessionId, pepper);
|
|
174
177
|
}
|
|
175
178
|
const raw = record;
|
|
176
179
|
if (typeof raw.session_id === 'string' && raw.session_id.length > 0) {
|
|
177
|
-
return
|
|
180
|
+
return hashSessionIdForTelemetryExport(raw.session_id, pepper);
|
|
178
181
|
}
|
|
179
|
-
return
|
|
182
|
+
return hashSessionIdForTelemetryExport('', pepper);
|
|
180
183
|
}
|
|
181
184
|
/** Map a dataset row plus linked outcomes to a privacy-safe telemetry contrib record. */
|
|
182
|
-
export function toTelemetryContribRecord(record, outcomes = []) {
|
|
185
|
+
export function toTelemetryContribRecord(record, outcomes = [], pepper) {
|
|
183
186
|
const { success, outcome_signals } = deriveSuccessLabel(outcomes);
|
|
184
187
|
const contrib = {
|
|
185
188
|
version: TELEMETRY_CONTRIB_VERSION,
|
|
186
189
|
timestamp: record.timestamp,
|
|
187
|
-
session_id_hash: resolveSessionIdHash(record, outcomes),
|
|
190
|
+
session_id_hash: resolveSessionIdHash(record, outcomes, pepper),
|
|
188
191
|
turn_type: record.turn_type,
|
|
189
192
|
stage: record.stage,
|
|
190
193
|
reason_code: record.reason_code,
|
|
@@ -243,11 +246,11 @@ export function validateTelemetryContribRecord(record, context) {
|
|
|
243
246
|
assertTelemetryContribRecordSafe(record, context);
|
|
244
247
|
return sanitizeTelemetryContribRecord(record);
|
|
245
248
|
}
|
|
246
|
-
export function buildTelemetryContribRecords(datasetRecords, outcomeRecords = []) {
|
|
249
|
+
export function buildTelemetryContribRecords(datasetRecords, outcomeRecords = [], pepper) {
|
|
247
250
|
const outcomesByRequest = indexOutcomesByRequestId(outcomeRecords);
|
|
248
251
|
return datasetRecords.map((record) => {
|
|
249
252
|
const linkedOutcomes = outcomesByRequest.get(record.request_id) ?? [];
|
|
250
|
-
const contrib = toTelemetryContribRecord(record, linkedOutcomes);
|
|
253
|
+
const contrib = toTelemetryContribRecord(record, linkedOutcomes, pepper);
|
|
251
254
|
validateTelemetryContribRecord(contrib, record.request_id);
|
|
252
255
|
return contrib;
|
|
253
256
|
});
|
|
@@ -255,7 +258,11 @@ export function buildTelemetryContribRecords(datasetRecords, outcomeRecords = []
|
|
|
255
258
|
export async function exportTelemetryContrib(ctx, options) {
|
|
256
259
|
const datasetRecords = await ctx.store.listDatasetRecords({ limit: ctx.limit });
|
|
257
260
|
const outcomeRecords = await ctx.store.listOutcomeRecords({ limit: ctx.limit });
|
|
258
|
-
|
|
261
|
+
// Install-local pepper keyed to the export cwd so hashes are stable per
|
|
262
|
+
// install but never correlatable across installs (SP-249/SP-250). Loaded
|
|
263
|
+
// lazily — no pepper file is created when there is nothing to export.
|
|
264
|
+
const pepper = datasetRecords.length > 0 ? loadOrCreateDatasetPepper(ctx.cwd) : undefined;
|
|
265
|
+
const records = buildTelemetryContribRecords(datasetRecords, outcomeRecords, pepper);
|
|
259
266
|
const json = formatTelemetryContribJson(records);
|
|
260
267
|
if (records.length === 0 || options?.writeFile === false) {
|
|
261
268
|
return { path: null, recordCount: records.length, json };
|
|
@@ -268,7 +275,7 @@ export async function exportTelemetryContrib(ctx, options) {
|
|
|
268
275
|
return { path: exportPath, recordCount: records.length, json };
|
|
269
276
|
}
|
|
270
277
|
/** Join dataset export shape with outcome labels, then strip to contrib-safe fields. */
|
|
271
|
-
export function datasetExportRowToTelemetryContrib(exportRecord, outcomes) {
|
|
278
|
+
export function datasetExportRowToTelemetryContrib(exportRecord, outcomes, pepper) {
|
|
272
279
|
const joined = attachOutcomeLabelsToExport(exportRecord, outcomes);
|
|
273
280
|
const contrib = {
|
|
274
281
|
version: TELEMETRY_CONTRIB_VERSION,
|
|
@@ -281,7 +288,7 @@ export function datasetExportRowToTelemetryContrib(exportRecord, outcomes) {
|
|
|
281
288
|
contrib.session_id_hash = exportRecord.session_id_hash;
|
|
282
289
|
}
|
|
283
290
|
else if (typeof exportRecord.session_id === 'string') {
|
|
284
|
-
contrib.session_id_hash =
|
|
291
|
+
contrib.session_id_hash = hashSessionIdForTelemetryExport(exportRecord.session_id, pepper);
|
|
285
292
|
}
|
|
286
293
|
delete contrib.session_id;
|
|
287
294
|
return validateTelemetryContribRecord(contrib);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smart-router-cli.js","sourceRoot":"","sources":["../../src/cli/smart-router-cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"smart-router-cli.js","sourceRoot":"","sources":["../../src/cli/smart-router-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,12 +23,27 @@ export interface RequirementVector {
|
|
|
23
23
|
}
|
|
24
24
|
export interface EmbeddingProvider {
|
|
25
25
|
extractRequirements(text: string): Promise<RequirementVector>;
|
|
26
|
+
/**
|
|
27
|
+
* Reason codes describing degraded requirement extraction (SP-251, #148) —
|
|
28
|
+
* e.g. `k4_heads_placeholder` when learned K=4 head weights are missing.
|
|
29
|
+
* Absent/empty when learned weights are active.
|
|
30
|
+
*/
|
|
31
|
+
requirementReasonCodes?(): readonly string[];
|
|
26
32
|
dispose(): Promise<void>;
|
|
27
33
|
}
|
|
28
34
|
export interface MatchResult {
|
|
29
35
|
readonly selected: CandidateScore | null;
|
|
30
36
|
readonly candidates: readonly CandidateScore[];
|
|
31
37
|
readonly requirements: RequirementVector;
|
|
38
|
+
/**
|
|
39
|
+
* Decision metadata reason codes for degraded requirement extraction
|
|
40
|
+
* (SP-251, #148): `hydra_weights_missing` when the learned projection
|
|
41
|
+
* artifact is missing/invalid, `k4_heads_placeholder` when ModernBERT K=4
|
|
42
|
+
* head weights are missing/invalid. Empty when learned weights are active.
|
|
43
|
+
* Optional on the type for legacy literal constructions; HydraMatcher.match
|
|
44
|
+
* always populates it.
|
|
45
|
+
*/
|
|
46
|
+
readonly requirement_reason_codes?: readonly string[];
|
|
32
47
|
readonly elapsedMs: number;
|
|
33
48
|
readonly budgetExceeded: boolean;
|
|
34
49
|
}
|
|
@@ -40,6 +55,24 @@ export interface HydraMatcherConfig {
|
|
|
40
55
|
readonly frugality?: FrugalityWeights;
|
|
41
56
|
readonly projectionWeightsPath?: string;
|
|
42
57
|
readonly k4HeadWeightsPath?: string;
|
|
58
|
+
/**
|
|
59
|
+
* SP-252 / #148: when true, match() refuses to score with placeholder
|
|
60
|
+
* requirement heads and throws {@link MissingWeightsFailClosedError} carrying
|
|
61
|
+
* the SP-251 reason codes. Default false keeps fail-open placeholders.
|
|
62
|
+
*/
|
|
63
|
+
readonly failClosedOnMissingWeights?: boolean;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Thrown by HydraMatcher.match when `failClosedOnMissingWeights` is enabled and
|
|
67
|
+
* learned weight artifacts are missing/invalid (SP-252, #148). Carries the
|
|
68
|
+
* SP-251 reason codes so callers (the router pipeline) can route through the
|
|
69
|
+
* degraded sandwich with the codes visible on the decision path.
|
|
70
|
+
*/
|
|
71
|
+
export declare class MissingWeightsFailClosedError extends Error {
|
|
72
|
+
readonly name = "MissingWeightsFailClosedError";
|
|
73
|
+
/** SP-251 reason codes (e.g. `hydra_weights_missing`, `k4_heads_placeholder`). */
|
|
74
|
+
readonly reasonCodes: readonly string[];
|
|
75
|
+
constructor(reasonCodes: readonly string[]);
|
|
43
76
|
}
|
|
44
77
|
export declare const DEFAULT_HYDRA_PROJECTION_WEIGHTS_PATH: string;
|
|
45
78
|
export declare const HYDRA_PROJECTION_OUTPUT_DIM = 3;
|
|
@@ -101,13 +134,27 @@ export declare class HydraMatcher {
|
|
|
101
134
|
private readonly frugality;
|
|
102
135
|
private readonly hydraHeads;
|
|
103
136
|
private readonly projectionWeights;
|
|
137
|
+
private readonly requirementReasonCodes;
|
|
138
|
+
private readonly failClosedOnMissingWeights;
|
|
104
139
|
constructor(provider: EmbeddingProvider, config: HydraMatcherConfig);
|
|
140
|
+
/**
|
|
141
|
+
* Decision-metadata reason codes for the requirement extraction path
|
|
142
|
+
* (SP-251, #148). Placeholder fallback stays fail-open; the codes make the
|
|
143
|
+
* degraded weight state explicit instead of stderr-only.
|
|
144
|
+
*/
|
|
145
|
+
private computeRequirementReasonCodes;
|
|
105
146
|
/** Active requirement head mode from operator hydra config. */
|
|
106
147
|
hydraHeadsMode(): HydraHeads;
|
|
107
148
|
/** Whether ModernBERT K=4 heads mode is active. */
|
|
108
149
|
usesModernBertK4(): boolean;
|
|
109
150
|
/** Whether learned SP-115 projection weights were loaded at init. */
|
|
110
151
|
usesLearnedProjection(): boolean;
|
|
152
|
+
/**
|
|
153
|
+
* Reason codes emitted into decision metadata when requirement extraction
|
|
154
|
+
* fell back to placeholders because learned weight artifacts were
|
|
155
|
+
* missing/invalid (SP-251, #148). Empty when learned weights are active.
|
|
156
|
+
*/
|
|
157
|
+
missingWeightsReasonCodes(): readonly string[];
|
|
111
158
|
match(request: RoutingRequest, fleet: readonly ModelProfile[]): Promise<MatchResult>;
|
|
112
159
|
dispose(): Promise<void>;
|
|
113
160
|
private validateRequirements;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydra-matcher.d.ts","sourceRoot":"","sources":["../../../src/domain/matching/hydra-matcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAEL,aAAa,EACb,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC9B,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"hydra-matcher.d.ts","sourceRoot":"","sources":["../../../src/domain/matching/hydra-matcher.ts"],"names":[],"mappings":"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"}
|