pi-mega-compact 0.16.3 → 0.17.1
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/config/vector-cortex.js +91 -0
- package/dist/dedup/digest.js +30 -0
- package/dist/dedup/l1-lsh-v2.js +60 -0
- package/dist/dedup/l1-lsh.js +52 -0
- package/dist/dedup/l1-minhash-v2.js +193 -0
- package/dist/dedup/l1-minhash.js +91 -0
- package/dist/dedup/l1-verify.js +54 -0
- package/dist/dedup/mmr.js +45 -0
- package/dist/dedup/normalize.js +39 -0
- package/dist/dedup/raptor/buildHistory.js +164 -0
- package/dist/dedup/raptor/guardrails.js +83 -0
- package/dist/dedup/raptor/incremental.js +304 -0
- package/dist/dedup/raptor/index.js +190 -0
- package/dist/dedup/raptor/kmeans.js +152 -0
- package/dist/dedup/raptor/multilevel.js +184 -0
- package/dist/dedup/raptor/retrieval.js +93 -0
- package/dist/dedup/raptor/summarizer.js +86 -0
- package/dist/dedup/raptor/tree.js +202 -0
- package/dist/dedup/topk.js +60 -0
- package/dist/extensions/dashboard-server/api-contracts/endpoints/registry-ext.js +30 -0
- package/dist/extensions/dashboard-server/api-contracts/endpoints/registry.js +4 -14
- package/dist/extensions/dashboard-server/api-contracts/vector-cortex.js +12 -0
- package/dist/extensions/dashboard-server/routes-rag-settings-helpers.js +11 -0
- package/dist/extensions/dashboard-server/routes-vector-cortex.js +292 -0
- package/dist/extensions/dashboard-server/routes.js +1 -0
- package/dist/extensions/dashboard-server/server.js +9 -1
- package/dist/extensions/mega-events/context-handler.js +11 -0
- package/dist/extensions/mega-runtime/vector-cortex-ledger.js +131 -0
- package/dist/extensions/mega-runtime/vector-cortex-safety.js +100 -0
- package/dist/src/config/vector-cortex.js +91 -0
- package/dist/src/config.js +6 -0
- package/dist/src/dedup/l1-lsh-v2.js +60 -0
- package/dist/src/dedup/l1-minhash-v2.js +193 -0
- package/dist/src/dedup/normalize.js +1 -1
- package/dist/src/vector-cortex/conformance/emit.js +46 -0
- package/dist/src/vector-cortex/conformance/manifest.js +235 -0
- package/dist/src/vector-cortex/conformance/runner.js +111 -0
- package/dist/src/vector-cortex/conformance/triadB-reader.js +95 -0
- package/dist/src/vector-cortex/eval/annotations.js +41 -0
- package/dist/src/vector-cortex/eval/metrics.js +86 -0
- package/dist/src/vector-cortex/eval/observer.js +61 -0
- package/dist/src/vector-cortex/eval/persist.js +67 -0
- package/dist/src/vector-cortex/eval/reader.js +29 -0
- package/dist/src/vector-cortex/eval/types.js +33 -0
- package/dist/src/vector-cortex/ledger/adapter.js +55 -0
- package/dist/src/vector-cortex/ledger/compat-journal.js +206 -0
- package/dist/src/vector-cortex/ledger/emit.js +53 -0
- package/dist/src/vector-cortex/ledger/event-codec.js +72 -0
- package/dist/src/vector-cortex/ledger/event-codecB.js +76 -0
- package/dist/src/vector-cortex/ledger/sqlite.js +200 -0
- package/dist/src/vector-cortex/ledger/store.js +184 -0
- package/dist/src/vector-cortex/ledger/types.js +52 -0
- package/dist/src/vector-cortex/ledger/validator.js +117 -0
- package/dist/src/vector-cortex/migrations/effective-cut-v2.js +103 -0
- package/dist/src/vector-cortex/migrations/minhash-v2.js +209 -0
- package/dist/src/vector-cortex/migrations/occurrence-v2.js +139 -0
- package/dist/src/vector-cortex/replay/cut.js +123 -0
- package/dist/src/vector-cortex/replay/emit.js +58 -0
- package/dist/src/vector-cortex/replay/replay.js +260 -0
- package/dist/src/vector-cortex/replay/replayB.js +73 -0
- package/dist/src/vector-cortex/replay/types.js +52 -0
- package/dist/src/vector-cortex/resilience/breaker-core.js +359 -0
- package/dist/src/vector-cortex/resilience/breaker.js +12 -0
- package/dist/src/vector-cortex/resilience/emit.js +56 -0
- package/dist/src/vector-cortex/resilience/spool-core.js +347 -0
- package/dist/src/vector-cortex/resilience/spool.js +12 -0
- package/dist/src/vector-cortex/resilience/types.js +32 -0
- package/dist/vector-cortex/conformance/emit.js +46 -0
- package/dist/vector-cortex/conformance/manifest.js +235 -0
- package/dist/vector-cortex/conformance/runner.js +111 -0
- package/dist/vector-cortex/conformance/triadB-reader.js +95 -0
- package/dist/vector-cortex/eval/annotations.js +41 -0
- package/dist/vector-cortex/eval/metrics.js +86 -0
- package/dist/vector-cortex/eval/observer.js +61 -0
- package/dist/vector-cortex/eval/persist.js +67 -0
- package/dist/vector-cortex/eval/reader.js +29 -0
- package/dist/vector-cortex/eval/types.js +33 -0
- package/dist/vector-cortex/ledger/adapter.js +55 -0
- package/dist/vector-cortex/ledger/compat-journal.js +206 -0
- package/dist/vector-cortex/ledger/emit.js +53 -0
- package/dist/vector-cortex/ledger/event-codec.js +72 -0
- package/dist/vector-cortex/ledger/event-codecB.js +76 -0
- package/dist/vector-cortex/ledger/sqlite.js +200 -0
- package/dist/vector-cortex/ledger/store.js +184 -0
- package/dist/vector-cortex/ledger/types.js +52 -0
- package/dist/vector-cortex/ledger/validator.js +117 -0
- package/dist/vector-cortex/migrations/effective-cut-v2.js +103 -0
- package/dist/vector-cortex/migrations/minhash-v2.js +209 -0
- package/dist/vector-cortex/migrations/occurrence-v2.js +139 -0
- package/dist/vector-cortex/replay/cut.js +123 -0
- package/dist/vector-cortex/replay/emit.js +58 -0
- package/dist/vector-cortex/replay/replay.js +260 -0
- package/dist/vector-cortex/replay/replayB.js +73 -0
- package/dist/vector-cortex/replay/types.js +52 -0
- package/dist/vector-cortex/resilience/breaker-core.js +359 -0
- package/dist/vector-cortex/resilience/breaker.js +12 -0
- package/dist/vector-cortex/resilience/emit.js +56 -0
- package/dist/vector-cortex/resilience/spool-core.js +347 -0
- package/dist/vector-cortex/resilience/spool.js +12 -0
- package/dist/vector-cortex/resilience/types.js +32 -0
- package/extensions/dashboard-client/dist/assets/{AreaChart-Y_X0Bbjd.js → AreaChart-BQXFF7UI.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{AreaChart-Y_X0Bbjd.js.map → AreaChart-BQXFF7UI.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{BarChart-B9XDb-Ob.js → BarChart-BVtoz9Eg.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{BarChart-B9XDb-Ob.js.map → BarChart-BVtoz9Eg.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{CacheTab-BUGVb1G1.js → CacheTab-trI2TIGy.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{CacheTab-BUGVb1G1.js.map → CacheTab-trI2TIGy.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{EventsTab-dOqLYTsy.js → EventsTab-CNUbk9__.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{EventsTab-dOqLYTsy.js.map → EventsTab-CNUbk9__.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{HealthTab-c2vezKg1.js → HealthTab-K-bd_CM-.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{HealthTab-c2vezKg1.js.map → HealthTab-K-bd_CM-.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{MaintenanceTab-bQYHIcdx.js → MaintenanceTab-CoEioKzx.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{MaintenanceTab-bQYHIcdx.js.map → MaintenanceTab-CoEioKzx.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{MemoryMapTab-2L8pH6y2.js → MemoryMapTab-CJo24ulv.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{MemoryMapTab-2L8pH6y2.js.map → MemoryMapTab-CJo24ulv.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{MetricsTab-CzUx1jpo.js → MetricsTab-DCNlQWWP.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{MetricsTab-CzUx1jpo.js.map → MetricsTab-DCNlQWWP.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{OverviewTab-eCNoaclv.js → OverviewTab-CQQlyIQ6.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{OverviewTab-eCNoaclv.js.map → OverviewTab-CQQlyIQ6.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{ReposTab-tb0IW3NF.js → ReposTab-Cqm82_yn.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{ReposTab-tb0IW3NF.js.map → ReposTab-Cqm82_yn.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{SessionsTab-C-IoLw5h.js → SessionsTab-A8xTAdET.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{SessionsTab-C-IoLw5h.js.map → SessionsTab-A8xTAdET.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{SetupTab-BvmFi8gf.js → SetupTab-CqaSgaZl.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{SetupTab-BvmFi8gf.js.map → SetupTab-CqaSgaZl.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{TimeSavedCard-DBH-cOlA.js → TimeSavedCard-C_f3q8GR.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{TimeSavedCard-DBH-cOlA.js.map → TimeSavedCard-C_f3q8GR.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{TurnsTab-DBMgmvnX.js → TurnsTab-BEsafACo.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{TurnsTab-DBMgmvnX.js.map → TurnsTab-BEsafACo.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/VectorCortexTab-DD1CMK80.js +2 -0
- package/extensions/dashboard-client/dist/assets/VectorCortexTab-DD1CMK80.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{WikiTab-1LcQrXk3.js → WikiTab-Bf01M2_Z.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{WikiTab-1LcQrXk3.js.map → WikiTab-Bf01M2_Z.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{button-DtEsZTUE.js → button-BEJPTk_E.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{button-DtEsZTUE.js.map → button-BEJPTk_E.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{card-DcfTmw-4.js → card-DK1V382s.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{card-DcfTmw-4.js.map → card-DK1V382s.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{generateCategoricalChart-BsIxUDyw.js → generateCategoricalChart-CRtaPphL.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{generateCategoricalChart-BsIxUDyw.js.map → generateCategoricalChart-CRtaPphL.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{index-B93cewiX.js → index-CB6BslE4.js} +34 -29
- package/extensions/dashboard-client/dist/assets/index-CB6BslE4.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/index-CfvziyBi.css +1 -0
- package/extensions/dashboard-client/dist/assets/{switch-Bowd7jCD.js → switch-C4FV6B9k.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{switch-Bowd7jCD.js.map → switch-C4FV6B9k.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{toggle-Bo7kJZ4u.js → toggle-GBmeENMd.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{toggle-Bo7kJZ4u.js.map → toggle-GBmeENMd.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{useSSE-zNhb0c3u.js → useSSE-BOKZGSn1.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{useSSE-zNhb0c3u.js.map → useSSE-BOKZGSn1.js.map} +1 -1
- package/extensions/dashboard-client/dist/index.html +2 -2
- package/extensions/dashboard-client/src/App.tsx +2 -0
- package/extensions/dashboard-client/src/api/vector-cortex.ts +54 -0
- package/extensions/dashboard-client/src/tabs/VectorCortexTab.tsx +272 -0
- package/extensions/dashboard-client/src/tabs/registry.ts +4 -1
- package/extensions/dashboard-client/src/types/vector-cortex.ts +84 -0
- package/extensions/dashboard-client/tsconfig.json +1 -1
- package/extensions/dashboard-server/api-contracts/endpoints/registry-ext.ts +67 -0
- package/extensions/dashboard-server/api-contracts/endpoints/registry.ts +4 -21
- package/extensions/dashboard-server/api-contracts/index.ts +3 -0
- package/extensions/dashboard-server/api-contracts/vector-cortex.ts +136 -0
- package/extensions/dashboard-server/routes-rag-settings-helpers.ts +41 -0
- package/extensions/dashboard-server/routes-vector-cortex.ts +332 -0
- package/extensions/dashboard-server/routes.ts +6 -0
- package/extensions/dashboard-server/server.ts +8 -0
- package/extensions/mega-events/context-handler.ts +16 -0
- package/extensions/mega-runtime/vector-cortex-ledger.ts +165 -0
- package/extensions/mega-runtime/vector-cortex-safety.ts +181 -0
- package/package.json +2 -1
- package/src/config/vector-cortex.ts +98 -0
- package/src/config.ts +28 -0
- package/src/dedup/l1-lsh-v2.ts +78 -0
- package/src/dedup/l1-minhash-v2.ts +221 -0
- package/src/dedup/normalize.ts +1 -1
- package/src/store/sqlite/game-scores.ts +2 -1
- package/src/vector-cortex/conformance/emit.ts +56 -0
- package/src/vector-cortex/conformance/manifest.ts +298 -0
- package/src/vector-cortex/conformance/runner.ts +165 -0
- package/src/vector-cortex/conformance/triadB-reader.ts +110 -0
- package/src/vector-cortex/eval/annotations.ts +70 -0
- package/src/vector-cortex/eval/metrics.ts +113 -0
- package/src/vector-cortex/eval/observer.ts +86 -0
- package/src/vector-cortex/eval/persist.ts +73 -0
- package/src/vector-cortex/eval/reader.ts +45 -0
- package/src/vector-cortex/eval/types.ts +89 -0
- package/src/vector-cortex/ledger/adapter.ts +71 -0
- package/src/vector-cortex/ledger/compat-journal.ts +234 -0
- package/src/vector-cortex/ledger/emit.ts +86 -0
- package/src/vector-cortex/ledger/event-codec.ts +79 -0
- package/src/vector-cortex/ledger/event-codecB.ts +87 -0
- package/src/vector-cortex/ledger/sqlite.ts +265 -0
- package/src/vector-cortex/ledger/store.ts +380 -0
- package/src/vector-cortex/ledger/types.ts +141 -0
- package/src/vector-cortex/ledger/validator.ts +124 -0
- package/src/vector-cortex/migrations/effective-cut-v2.ts +149 -0
- package/src/vector-cortex/migrations/minhash-v2.ts +263 -0
- package/src/vector-cortex/migrations/occurrence-v2.ts +192 -0
- package/src/vector-cortex/replay/cut.ts +169 -0
- package/src/vector-cortex/replay/emit.ts +89 -0
- package/src/vector-cortex/replay/replay.ts +308 -0
- package/src/vector-cortex/replay/replayB.ts +97 -0
- package/src/vector-cortex/replay/types.ts +145 -0
- package/src/vector-cortex/resilience/breaker-core.ts +444 -0
- package/src/vector-cortex/resilience/breaker.ts +22 -0
- package/src/vector-cortex/resilience/emit.ts +99 -0
- package/src/vector-cortex/resilience/spool-core.ts +411 -0
- package/src/vector-cortex/resilience/spool.ts +22 -0
- package/src/vector-cortex/resilience/types.ts +158 -0
- package/extensions/dashboard-client/dist/assets/index-B93cewiX.js.map +0 -1
- package/extensions/dashboard-client/dist/assets/index-C_tCbOI0.css +0 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* api-contracts/vector-cortex.ts — vector-cortex dashboard API contracts.
|
|
3
|
+
*
|
|
4
|
+
* Owned by the vector-cortex sprints. VC0A ships only the reader-only aggregate
|
|
5
|
+
* `GET /api/vector-cortex/evaluation`. VC0C adds the breaker health endpoint
|
|
6
|
+
* and reset mutation into this SAME file — keep entries small and additive so
|
|
7
|
+
* the file stays within extension limits (400 soft / 500 hard).
|
|
8
|
+
*
|
|
9
|
+
* PREVENT-PI-004: type definitions only, no network code.
|
|
10
|
+
* PREVENT-011: no `any` type.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Aggregate evaluation summary for GET /api/vector-cortex/evaluation.
|
|
15
|
+
* Reader-only: exposes aggregates (histogram cells, counts), never payloads or
|
|
16
|
+
* exact ledger text.
|
|
17
|
+
*/
|
|
18
|
+
export interface VectorCortexEvaluationSummary {
|
|
19
|
+
/** Whether the VC0A observer flag is enabled in this process. */
|
|
20
|
+
readonly enabled: boolean;
|
|
21
|
+
/** Triad observer mode reflected in the summary ("C" when observer absent). */
|
|
22
|
+
readonly mode: "A" | "B" | "C";
|
|
23
|
+
/** Total evaluation samples aggregated. */
|
|
24
|
+
readonly samples: number;
|
|
25
|
+
/** Per-mode sample distribution. */
|
|
26
|
+
readonly byMode: {
|
|
27
|
+
readonly A: number;
|
|
28
|
+
readonly B: number;
|
|
29
|
+
readonly C: number;
|
|
30
|
+
};
|
|
31
|
+
/** Fixed latency histogram (inclusive edges, separate overflow). */
|
|
32
|
+
readonly histogram: {
|
|
33
|
+
readonly edges: readonly number[];
|
|
34
|
+
readonly cells: readonly number[];
|
|
35
|
+
readonly overflow: number;
|
|
36
|
+
readonly total: number;
|
|
37
|
+
};
|
|
38
|
+
/** Evaluator rejections (EVAL_*) observed in this window. */
|
|
39
|
+
readonly rejects: readonly string[];
|
|
40
|
+
/** ISO timestamp of the summary. */
|
|
41
|
+
readonly updatedAt: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Health-card aggregate for GET /api/vector-cortex/health. Reader-only: exposes
|
|
46
|
+
* breaker state, window/probe/backoff, and durable spool frontier/authority/lag
|
|
47
|
+
* aggregates — never payloads, prompts, or exact ledger text.
|
|
48
|
+
*/
|
|
49
|
+
export interface VectorCortexHealthCard {
|
|
50
|
+
/** Whether the VC0C safety envelope is enabled in this process. */
|
|
51
|
+
readonly enabled: boolean;
|
|
52
|
+
/** Selected triad mode ("A" healthy, "B" spool fallback, "C" unchanged). */
|
|
53
|
+
readonly mode: "A" | "B" | "C";
|
|
54
|
+
/** Breaker state: CLOSED_A | OPEN_B | OPEN_C | PROBE_B | PROBE_A | MANUAL_HALT. */
|
|
55
|
+
readonly state: string;
|
|
56
|
+
/** Tracked subsystem (this shell owns the "provider" breaker). */
|
|
57
|
+
readonly subsystem: string;
|
|
58
|
+
/** Milliseconds since the last transition. */
|
|
59
|
+
readonly sinceMs: number;
|
|
60
|
+
/** Manual halt reason, when MANUAL_HALT. */
|
|
61
|
+
readonly reason?: string;
|
|
62
|
+
/** Rolling window length (ms). */
|
|
63
|
+
readonly windowMs: number;
|
|
64
|
+
/** Consecutive successful probes. */
|
|
65
|
+
readonly probeCount: number;
|
|
66
|
+
/** Current exponential backoff delay (ms). */
|
|
67
|
+
readonly backoffDelayMs: number;
|
|
68
|
+
/** Derived frontier frozen by an authority outage. */
|
|
69
|
+
readonly frontierFrozen: boolean;
|
|
70
|
+
/** Authority (mode-A ledger) currently in outage. */
|
|
71
|
+
readonly authorityOutage: boolean;
|
|
72
|
+
/** Durable spool unacknowledged tail (records awaiting authority commit). */
|
|
73
|
+
readonly spoolLag: number;
|
|
74
|
+
/** Rolling window attempt count. */
|
|
75
|
+
readonly attempts: number;
|
|
76
|
+
/** Rolling window failure count. */
|
|
77
|
+
readonly failures: number;
|
|
78
|
+
/** Rolling window p95 latency (ms). */
|
|
79
|
+
readonly p95Ms: number;
|
|
80
|
+
/** Rolling window failure rate (0..1). */
|
|
81
|
+
readonly failureRate: number;
|
|
82
|
+
/** ISO timestamp of the snapshot. */
|
|
83
|
+
readonly updatedAt: string;
|
|
84
|
+
/** Worst aggregate state across all health cards (this shell has one). */
|
|
85
|
+
readonly aggregate: string;
|
|
86
|
+
/**
|
|
87
|
+
* Breaker state source. "ephemeral" (the ONLY value until VC0D) = this breaker
|
|
88
|
+
* is per-process/in-memory, rebuilt on every request — NOT a live persistent
|
|
89
|
+
* breaker; the dashboard/README must not present it as live. "live" appears
|
|
90
|
+
* only once the persistent breaker runtime + producer wiring land (VC0D).
|
|
91
|
+
*/
|
|
92
|
+
readonly stateSource: "ephemeral" | "live";
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Response for POST /api/vector-cortex/breakers/reset. Admin capability: clears
|
|
97
|
+
* cooldown but never evidence (failures/attempts retained) or unwires a
|
|
98
|
+
* MANUAL_HALT. Returns the post-reset breaker record (aggregate, never payloads).
|
|
99
|
+
*/
|
|
100
|
+
export interface VectorCortexResetResult {
|
|
101
|
+
readonly subsystem: string;
|
|
102
|
+
readonly state: string;
|
|
103
|
+
readonly cooldownCleared: boolean;
|
|
104
|
+
readonly attempts: number;
|
|
105
|
+
readonly failures: number;
|
|
106
|
+
readonly probeCount: number;
|
|
107
|
+
readonly manualReason?: string;
|
|
108
|
+
readonly updatedAt: string;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Reader-only occurrence-ledger view for GET /api/vector-cortex/ledger (VC1B).
|
|
113
|
+
* Built on the LedgerReader capability surface. Exposes occurrence IDENTITY
|
|
114
|
+
* (seq/eventId/kind/digest/toolCallId) and the per-session high-water/count —
|
|
115
|
+
* NEVER sourceBytes or prompt text, honoring the reader-only no-ledger-text rule.
|
|
116
|
+
*/
|
|
117
|
+
export interface VectorCortexLedgerView {
|
|
118
|
+
/** Whether the VC1B occurrence ledger flag is enabled in this process. */
|
|
119
|
+
readonly enabled: boolean;
|
|
120
|
+
/** The ledger session whose occurrences are returned. */
|
|
121
|
+
readonly session: string;
|
|
122
|
+
/** Durable contiguous high-water (stringified bigint) for the session. */
|
|
123
|
+
readonly highWater: string;
|
|
124
|
+
/** Number of accepted occurrences for the session. */
|
|
125
|
+
readonly count: number;
|
|
126
|
+
/** Capped identity rows (ascending seq). No source bytes, never payload text. */
|
|
127
|
+
readonly occurrences: readonly {
|
|
128
|
+
readonly seq: string;
|
|
129
|
+
readonly eventId: string;
|
|
130
|
+
readonly kind: string;
|
|
131
|
+
readonly digest: string;
|
|
132
|
+
readonly toolCallId?: string;
|
|
133
|
+
}[];
|
|
134
|
+
/** ISO timestamp of the snapshot. */
|
|
135
|
+
readonly updatedAt: string;
|
|
136
|
+
}
|
|
@@ -272,6 +272,47 @@ export const SETTINGS: ReadonlyArray<{
|
|
|
272
272
|
num("MEGACOMPACT_EMBED_CACHE", "Embed Cache Size", "Embedding cache entries (0 = disabled)", 256, 0, 10000),
|
|
273
273
|
],
|
|
274
274
|
},
|
|
275
|
+
{
|
|
276
|
+
name: "Vector Cortex",
|
|
277
|
+
settings: [
|
|
278
|
+
boolDirect(
|
|
279
|
+
"MEGACOMPACT_VC0A",
|
|
280
|
+
"VC0A Baseline Observability",
|
|
281
|
+
"Structured evaluation observer (MetricEventV1 + latency histogram). OFF = mode C, byte-identical to predecessor.",
|
|
282
|
+
true,
|
|
283
|
+
),
|
|
284
|
+
boolDirect(
|
|
285
|
+
"MEGACOMPACT_VC0B",
|
|
286
|
+
"VC0B Replay Correctness",
|
|
287
|
+
"ReplayCutV2 effective-cut (min of boundary-safe/commit/capture high-water + pair retreat + anchor floor) and M3 effective-cut-v2 migration. OFF = legacy capped replay, byte-identical.",
|
|
288
|
+
true,
|
|
289
|
+
),
|
|
290
|
+
boolDirect(
|
|
291
|
+
"MEGACOMPACT_VC1A",
|
|
292
|
+
"VC1A Canonical Byte Events",
|
|
293
|
+
"EventV2 byte-authority ledger codec (original bytes + SHA-256, strict UTF-8, derived NFC) and canonical validator (EVT_DIGEST_MISMATCH / EVT_UTF8_TAG_INVALID / EVT_DUPLICATE_ID). OFF = mode C, transcript codec unchanged, byte-identical.",
|
|
294
|
+
true,
|
|
295
|
+
),
|
|
296
|
+
boolDirect(
|
|
297
|
+
"MEGACOMPACT_VC1B",
|
|
298
|
+
"VC1B Occurrence Ledger + Tool Identity",
|
|
299
|
+
"Neutral occurrence ledger (LedgerReader/Writer/Admin + CompatJournalV1): per-session monotonic seq, tool result references one earlier call, uniqueness by (eventId,digest) only, and the M2 copy-validate-switch downgrade journal. OFF = mode C, ledger unwritten, byte-identical.",
|
|
300
|
+
true,
|
|
301
|
+
),
|
|
302
|
+
boolDirect(
|
|
303
|
+
"MEGACOMPACT_VC0C",
|
|
304
|
+
"VC0C Live Safety Envelope",
|
|
305
|
+
"TriadResult/Breaker live circuit breaker (60s window, 20 attempts, 30s cooldown, 3 probes, 5min healthy residence) + durable spool before provider invocation; manual reset clears cooldown but never evidence. OFF = mode C, unchanged transcript, byte-identical.",
|
|
306
|
+
true,
|
|
307
|
+
),
|
|
308
|
+
boolDirect(
|
|
309
|
+
"MEGACOMPACT_VC1C",
|
|
310
|
+
"VC1C Cross-Language Conformance v2",
|
|
311
|
+
"FixtureManifestV2 canonical manifest validator + DowngradeReport deterministic downgrade export + MinHashV2 exact big-integer signatures and the M4 copy/validate/switch minhash-v2 migration (seed table frozen, cross-language byte-exact). OFF = mode C, v1 sync dedup scan unchanged, byte-identical.",
|
|
312
|
+
true,
|
|
313
|
+
),
|
|
314
|
+
],
|
|
315
|
+
},
|
|
275
316
|
{
|
|
276
317
|
name: "Cost API",
|
|
277
318
|
settings: [
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dashboard-server/routes-vector-cortex.ts — vector-cortex dashboard routes.
|
|
3
|
+
*
|
|
4
|
+
* VC0A ships a single reader-only GET /api/vector-cortex/evaluation that
|
|
5
|
+
* aggregates redacted evaluation rows (persisted JSONL under the state dir)
|
|
6
|
+
* via the reader. No writable capability — no reset/mutation here; VC0C adds
|
|
7
|
+
* breaker health + reset endpoints into this same file, keeping it additive
|
|
8
|
+
* and within extension limits.
|
|
9
|
+
*
|
|
10
|
+
* VC0C (task 5) adds:
|
|
11
|
+
* GET /api/vector-cortex/health — reader-only aggregate health card
|
|
12
|
+
* POST /api/vector-cortex/breakers/reset — explicit admin capability
|
|
13
|
+
*
|
|
14
|
+
* Guardrails: PREVENT-PI-004 (local filesystem read only), PREVENT-011 (no
|
|
15
|
+
* `any`), reader-only aggregate (never payloads/prompts/ledger — EVAL-REDACT-002).
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
19
|
+
import type { RouteContext } from "./routes-core.js";
|
|
20
|
+
import { VC0A_ENABLED, VC0C_ENABLED, VC1B_ENABLED } from "../../src/config.js";
|
|
21
|
+
import { readEvalRows } from "../../src/vector-cortex/eval/persist.js";
|
|
22
|
+
import { summarizeEvalRows } from "../../src/vector-cortex/eval/reader.js";
|
|
23
|
+
import { createVectorCortexSafety } from "../mega-runtime/vector-cortex-safety.js";
|
|
24
|
+
import { createLedgerStore } from "../../src/vector-cortex/ledger/store.js";
|
|
25
|
+
import type {
|
|
26
|
+
VectorCortexEvaluationSummary,
|
|
27
|
+
VectorCortexHealthCard,
|
|
28
|
+
VectorCortexLedgerView,
|
|
29
|
+
VectorCortexResetResult,
|
|
30
|
+
} from "./api-contracts/vector-cortex.js";
|
|
31
|
+
|
|
32
|
+
/** Admin capability: an actor-supplied subsystem selector for breaker reset. */
|
|
33
|
+
function readJsonBody(
|
|
34
|
+
req: IncomingMessage,
|
|
35
|
+
cb: (
|
|
36
|
+
result: { ok: true; value: Record<string, unknown> } | { ok: false; error: string },
|
|
37
|
+
) => void,
|
|
38
|
+
): void {
|
|
39
|
+
let body = "";
|
|
40
|
+
let tooBig = false;
|
|
41
|
+
req.on("data", (chunk: Buffer) => {
|
|
42
|
+
if (body.length > 65536) {
|
|
43
|
+
tooBig = true;
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
body += chunk.toString();
|
|
47
|
+
});
|
|
48
|
+
req.on("end", () => {
|
|
49
|
+
if (tooBig) return cb({ ok: false, error: "body_too_large" });
|
|
50
|
+
try {
|
|
51
|
+
const v = body ? JSON.parse(body) : {};
|
|
52
|
+
if (typeof v !== "object" || v === null || Array.isArray(v)) {
|
|
53
|
+
return cb({ ok: false, error: "invalid_object" });
|
|
54
|
+
}
|
|
55
|
+
cb({ ok: true, value: v as Record<string, unknown> });
|
|
56
|
+
} catch {
|
|
57
|
+
cb({ ok: false, error: "invalid_json" });
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function sendJson(res: ServerResponse, status: number, body: unknown): void {
|
|
63
|
+
// guardrails-allow PREVENT-PI-004: loopback dashboard response (local)
|
|
64
|
+
res.writeHead(status, { "Content-Type": "application/json" });
|
|
65
|
+
res.end(JSON.stringify(body));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Reader-only aggregate GET /api/vector-cortex/evaluation. */
|
|
69
|
+
export function handleVectorCortexEvaluation(
|
|
70
|
+
req: IncomingMessage,
|
|
71
|
+
res: ServerResponse,
|
|
72
|
+
ctx: RouteContext,
|
|
73
|
+
): boolean {
|
|
74
|
+
const url = req.url ?? "";
|
|
75
|
+
if (url !== "/api/vector-cortex/evaluation") return false;
|
|
76
|
+
if (req.method !== "GET") {
|
|
77
|
+
// Reader-only: no mutation endpoints exist on this path.
|
|
78
|
+
// guardrails-allow PREVENT-PI-004: loopback dashboard response (local)
|
|
79
|
+
res.writeHead(405, { "Content-Type": "application/json" });
|
|
80
|
+
res.end(JSON.stringify({ error: "method_not_allowed" }));
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const enabled = VC0A_ENABLED();
|
|
85
|
+
const rows = enabled ? readEvalRows(ctx.stateDir) : [];
|
|
86
|
+
const summary = summarizeEvalRows(rows);
|
|
87
|
+
|
|
88
|
+
const body: VectorCortexEvaluationSummary = {
|
|
89
|
+
enabled,
|
|
90
|
+
mode: enabled ? "A" : "C",
|
|
91
|
+
samples: summary.samples,
|
|
92
|
+
byMode: {
|
|
93
|
+
A: summary.byMode.A,
|
|
94
|
+
B: summary.byMode.B,
|
|
95
|
+
C: summary.byMode.C,
|
|
96
|
+
},
|
|
97
|
+
histogram: {
|
|
98
|
+
edges: [...summary.histogram.edges],
|
|
99
|
+
cells: [...summary.histogram.cells],
|
|
100
|
+
overflow: summary.histogram.overflow,
|
|
101
|
+
total: summary.histogram.total,
|
|
102
|
+
},
|
|
103
|
+
rejects: [], // VC0C wires live breaker/reject telemetry here
|
|
104
|
+
updatedAt: new Date().toISOString(),
|
|
105
|
+
};
|
|
106
|
+
sendJson(res, 200, body);
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Reader-only GET /api/vector-cortex/health (VC0C).
|
|
112
|
+
*
|
|
113
|
+
* Aggregate health card: breaker state (window/probe/backoff), durable spool
|
|
114
|
+
* frontier/authority/lag, and a worst-state aggregate. Constructs the safety
|
|
115
|
+
* adapter over the state dir — durable spool state (frontier-frozen, lag) is
|
|
116
|
+
* read from disk, so it reflects restart. Purely read: no mutation, never
|
|
117
|
+
* payloads/prompts/ledger.
|
|
118
|
+
*/
|
|
119
|
+
export function handleVectorCortexHealth(
|
|
120
|
+
req: IncomingMessage,
|
|
121
|
+
res: ServerResponse,
|
|
122
|
+
ctx: RouteContext,
|
|
123
|
+
): boolean {
|
|
124
|
+
const url = req.url ?? "";
|
|
125
|
+
if (url !== "/api/vector-cortex/health") return false;
|
|
126
|
+
if (req.method !== "GET") {
|
|
127
|
+
// Reader-only path: no mutation endpoint lives at /health.
|
|
128
|
+
sendJson(res, 405, { error: "method_not_allowed" });
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const enabled = VC0C_ENABLED();
|
|
133
|
+
const safety = enabled ? createVectorCortexSafety({ stateDir: ctx.stateDir }) : null;
|
|
134
|
+
const card = safety ? safety.health() : null;
|
|
135
|
+
|
|
136
|
+
const fallback: VectorCortexHealthCard = {
|
|
137
|
+
enabled: false,
|
|
138
|
+
mode: "C",
|
|
139
|
+
state: "CLOSED_A",
|
|
140
|
+
subsystem: "provider",
|
|
141
|
+
sinceMs: 0,
|
|
142
|
+
windowMs: 0,
|
|
143
|
+
probeCount: 0,
|
|
144
|
+
backoffDelayMs: 0,
|
|
145
|
+
frontierFrozen: false,
|
|
146
|
+
authorityOutage: false,
|
|
147
|
+
spoolLag: 0,
|
|
148
|
+
attempts: 0,
|
|
149
|
+
failures: 0,
|
|
150
|
+
p95Ms: 0,
|
|
151
|
+
failureRate: 0,
|
|
152
|
+
updatedAt: new Date().toISOString(),
|
|
153
|
+
aggregate: "CLOSED_A",
|
|
154
|
+
stateSource: "ephemeral",
|
|
155
|
+
};
|
|
156
|
+
if (!card) {
|
|
157
|
+
sendJson(res, 200, fallback);
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const mode: "A" | "B" | "C" =
|
|
162
|
+
card.state === "CLOSED_A" ? "A" : card.state === "MANUAL_HALT" ? "C" : "B";
|
|
163
|
+
const aggregate =
|
|
164
|
+
card.state === "MANUAL_HALT"
|
|
165
|
+
? "MANUAL_HALT"
|
|
166
|
+
: card.state === "OPEN_C"
|
|
167
|
+
? "OPEN_C"
|
|
168
|
+
: card.state === "OPEN_B"
|
|
169
|
+
? "OPEN_B"
|
|
170
|
+
: card.state === "PROBE_B" || card.state === "PROBE_A"
|
|
171
|
+
? "PROBE"
|
|
172
|
+
: "CLOSED_A";
|
|
173
|
+
|
|
174
|
+
const body: VectorCortexHealthCard = {
|
|
175
|
+
enabled,
|
|
176
|
+
mode,
|
|
177
|
+
state: card.state,
|
|
178
|
+
subsystem: card.subsystem,
|
|
179
|
+
sinceMs: card.sinceMs,
|
|
180
|
+
reason: card.reason,
|
|
181
|
+
windowMs: card.windowMs,
|
|
182
|
+
probeCount: card.probeCount,
|
|
183
|
+
backoffDelayMs: card.backoffDelayMs,
|
|
184
|
+
frontierFrozen: card.frontierFrozen,
|
|
185
|
+
authorityOutage: card.authorityOutage,
|
|
186
|
+
spoolLag: card.spoolLag,
|
|
187
|
+
attempts: card.attempts,
|
|
188
|
+
failures: card.failures,
|
|
189
|
+
p95Ms: card.p95Ms,
|
|
190
|
+
failureRate: card.failureRate,
|
|
191
|
+
updatedAt: new Date().toISOString(),
|
|
192
|
+
aggregate,
|
|
193
|
+
stateSource: card.stateSource,
|
|
194
|
+
};
|
|
195
|
+
sendJson(res, 200, body);
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Admin POST /api/vector-cortex/breakers/reset (VC0C).
|
|
201
|
+
*
|
|
202
|
+
* Explicit admin capability (separate from the reader GET). Clears a breaker's
|
|
203
|
+
* cooldown — or unwires a MANUAL_HALT — but NEVER evidence (attempts/failures
|
|
204
|
+
* are retained, per TRIAD_RESILIENCE). The subsystem is actor-supplied via the
|
|
205
|
+
* JSON body `{ subsystem }`. Every reset is documented in the returned record
|
|
206
|
+
* (state, retained evidence, updatedAt) — an auditable mutation surface; the
|
|
207
|
+
* GET path can never mutate.
|
|
208
|
+
*/
|
|
209
|
+
export function handleVectorCortexBreakersReset(
|
|
210
|
+
req: IncomingMessage,
|
|
211
|
+
res: ServerResponse,
|
|
212
|
+
ctx: RouteContext,
|
|
213
|
+
): boolean {
|
|
214
|
+
const url = req.url ?? "";
|
|
215
|
+
if (url !== "/api/vector-cortex/breakers/reset") return false;
|
|
216
|
+
if (req.method !== "POST") {
|
|
217
|
+
sendJson(res, 405, { error: "method_not_allowed" });
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
if (!VC0C_ENABLED()) {
|
|
221
|
+
sendJson(res, 409, { error: "vco_c_disabled" });
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
readJsonBody(req, (parsed) => {
|
|
226
|
+
if (!parsed.ok) {
|
|
227
|
+
sendJson(res, 400, { error: parsed.error });
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const subsystem = parsed.value.subsystem;
|
|
231
|
+
if (typeof subsystem !== "string" || subsystem.length === 0) {
|
|
232
|
+
sendJson(res, 400, { error: "subsystem_required" });
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
try {
|
|
236
|
+
const safety = createVectorCortexSafety({ stateDir: ctx.stateDir });
|
|
237
|
+
const rec = safety.reset(subsystem);
|
|
238
|
+
const body: VectorCortexResetResult = {
|
|
239
|
+
subsystem: rec.subsystem,
|
|
240
|
+
state: rec.state,
|
|
241
|
+
cooldownCleared: true,
|
|
242
|
+
attempts: rec.attempts,
|
|
243
|
+
failures: rec.failures,
|
|
244
|
+
probeCount: rec.probeCount,
|
|
245
|
+
manualReason: rec.manualReason,
|
|
246
|
+
updatedAt: rec.updatedAt,
|
|
247
|
+
};
|
|
248
|
+
sendJson(res, 200, body);
|
|
249
|
+
} catch {
|
|
250
|
+
sendJson(res, 500, { error: "reset_failed" });
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Reader-only GET /api/vector-cortex/ledger (VC1B).
|
|
258
|
+
*
|
|
259
|
+
* Built on the LedgerReader capability: opens the occurrence-v2 ledger for this
|
|
260
|
+
* repo's state dir and returns the session's occurrence IDENTITY rows
|
|
261
|
+
* (seq/eventId/kind/digest/toolCallId) plus high-water/count. NEVER ships
|
|
262
|
+
* sourceBytes or prompt text (reader-only no-ledger-text rule). Optional
|
|
263
|
+
* `?session=<id>` query selects the session (default "default").
|
|
264
|
+
*/
|
|
265
|
+
export function handleVectorCortexLedger(
|
|
266
|
+
req: IncomingMessage,
|
|
267
|
+
res: ServerResponse,
|
|
268
|
+
ctx: RouteContext,
|
|
269
|
+
): boolean {
|
|
270
|
+
const url = req.url ?? "";
|
|
271
|
+
const path = url.split("?")[0] ?? url;
|
|
272
|
+
if (path !== "/api/vector-cortex/ledger") return false;
|
|
273
|
+
if (req.method !== "GET") {
|
|
274
|
+
// Reader-only path: no mutation endpoint lives at /ledger.
|
|
275
|
+
sendJson(res, 405, { error: "method_not_allowed" });
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Parse the optional session query parameter.
|
|
280
|
+
let session = "default";
|
|
281
|
+
const qs = url.split("?")[1];
|
|
282
|
+
if (qs !== undefined) {
|
|
283
|
+
for (const pair of qs.split("&")) {
|
|
284
|
+
const [k, v] = pair.split("=");
|
|
285
|
+
if (k === "session" && v !== undefined && v.length > 0) {
|
|
286
|
+
session = decodeURIComponent(v);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
const enabled = VC1B_ENABLED();
|
|
292
|
+
let active = enabled;
|
|
293
|
+
let highWater = "0";
|
|
294
|
+
let count = 0;
|
|
295
|
+
let occurrences: VectorCortexLedgerView["occurrences"] = [];
|
|
296
|
+
|
|
297
|
+
if (enabled) {
|
|
298
|
+
try {
|
|
299
|
+
const store = createLedgerStore({ stateDir: ctx.stateDir });
|
|
300
|
+
try {
|
|
301
|
+
const reader = store.reader();
|
|
302
|
+
highWater = reader.highWater(session).toString();
|
|
303
|
+
const rows = reader.readSession(session);
|
|
304
|
+
count = rows.length;
|
|
305
|
+
// Identity only: never sourceBytes or prompt text (reader-only rule).
|
|
306
|
+
occurrences = rows.slice(-500).map((occ) => ({
|
|
307
|
+
seq: occ.seq.toString(),
|
|
308
|
+
eventId: occ.eventId,
|
|
309
|
+
kind: occ.kind,
|
|
310
|
+
digest: occ.digest,
|
|
311
|
+
...(occ.toolCallId !== undefined ? { toolCallId: occ.toolCallId } : {}),
|
|
312
|
+
}));
|
|
313
|
+
} finally {
|
|
314
|
+
store.close();
|
|
315
|
+
}
|
|
316
|
+
} catch {
|
|
317
|
+
// Non-fatal: a missing/corrupt ledger DB degrades to `enabled:false`.
|
|
318
|
+
active = false;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
const body: VectorCortexLedgerView = {
|
|
323
|
+
enabled: active,
|
|
324
|
+
session,
|
|
325
|
+
highWater,
|
|
326
|
+
count,
|
|
327
|
+
occurrences,
|
|
328
|
+
updatedAt: new Date().toISOString(),
|
|
329
|
+
};
|
|
330
|
+
sendJson(res, 200, body);
|
|
331
|
+
return true;
|
|
332
|
+
}
|
|
@@ -40,3 +40,9 @@ export { handleRagSettings } from "./routes-rag-settings.js";
|
|
|
40
40
|
export { handleRagMetrics } from "./routes-rag-metrics.js";
|
|
41
41
|
export { handleModelThresholds } from "./routes-model-thresholds.js";
|
|
42
42
|
export { handleWiki } from "./routes-wiki.js";
|
|
43
|
+
export {
|
|
44
|
+
handleVectorCortexEvaluation,
|
|
45
|
+
handleVectorCortexHealth,
|
|
46
|
+
handleVectorCortexBreakersReset,
|
|
47
|
+
handleVectorCortexLedger,
|
|
48
|
+
} from "./routes-vector-cortex.js";
|
|
@@ -56,6 +56,10 @@ import {
|
|
|
56
56
|
handleRagMetrics,
|
|
57
57
|
handleModelThresholds,
|
|
58
58
|
handleWiki,
|
|
59
|
+
handleVectorCortexEvaluation,
|
|
60
|
+
handleVectorCortexHealth,
|
|
61
|
+
handleVectorCortexBreakersReset,
|
|
62
|
+
handleVectorCortexLedger,
|
|
59
63
|
handleStatic,
|
|
60
64
|
} from "./routes.js";
|
|
61
65
|
|
|
@@ -275,6 +279,10 @@ export async function launchDashboardServer(
|
|
|
275
279
|
if (handleRagMetrics(req, res, ctx)) return;
|
|
276
280
|
if (handleModelThresholds(req, res, ctx)) return;
|
|
277
281
|
if (handleWiki(req, res, ctx)) return;
|
|
282
|
+
if (handleVectorCortexEvaluation(req, res, ctx)) return;
|
|
283
|
+
if (handleVectorCortexHealth(req, res, ctx)) return;
|
|
284
|
+
if (handleVectorCortexBreakersReset(req, res, ctx)) return;
|
|
285
|
+
if (handleVectorCortexLedger(req, res, ctx)) return;
|
|
278
286
|
handleStatic(req, res, ctx);
|
|
279
287
|
});
|
|
280
288
|
|
|
@@ -35,6 +35,7 @@ import {
|
|
|
35
35
|
type MegaConfig,
|
|
36
36
|
} from "../mega-config.js";
|
|
37
37
|
import { appendMirrorMessages } from "./mirror-append.js";
|
|
38
|
+
import { appendMessagesToLedger } from "../mega-runtime/vector-cortex-ledger.js";
|
|
38
39
|
import { epochIdFor } from "../../src/mirror/epoch.js";
|
|
39
40
|
import { computeLiveTrimCut, liveTrimSummaryMessage } from "../mega-trim.js";
|
|
40
41
|
import { messageContentText } from "./context-handler/messageText.js";
|
|
@@ -149,6 +150,21 @@ export function registerContextHandler(
|
|
|
149
150
|
}
|
|
150
151
|
}
|
|
151
152
|
|
|
153
|
+
// VC1B (S1): canonical messages -> v2 ledger occurrences. Flag-OFF opens
|
|
154
|
+
// no DB (byte-identical predecessor); non-fatal. onFailure surfaces
|
|
155
|
+
// per-append rejections (e.g. EVT_SEQ_REGRESSION on rewind/fork) as
|
|
156
|
+
// structured warnings rather than swallowing them silently.
|
|
157
|
+
try {
|
|
158
|
+
appendMessagesToLedger(
|
|
159
|
+
runtime.currentStateDir,
|
|
160
|
+
runtime.rt.sessionId,
|
|
161
|
+
messages,
|
|
162
|
+
runtime.logger,
|
|
163
|
+
);
|
|
164
|
+
} catch (e) {
|
|
165
|
+
runtime.logger.warn("vc1b-ledger-append-fail", { error: String(e) });
|
|
166
|
+
}
|
|
167
|
+
|
|
152
168
|
// S52 / v0.16.1: per-model threshold override. The user can tune the
|
|
153
169
|
// fire point + safety margin PER MODEL (different providers' models range
|
|
154
170
|
// 8K-1M+ context, so one global tier % is wrong). Falls back to env/default
|