pi-mega-compact 0.20.7 → 0.20.8

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.
Files changed (95) hide show
  1. package/dist/config/vector-cortex.js +12 -0
  2. package/dist/config.js +1 -1
  3. package/dist/extensions/dashboard-server/api-contracts/vector-cortex-heal.js +11 -0
  4. package/dist/extensions/dashboard-server/route-dispatch.js +102 -0
  5. package/dist/extensions/dashboard-server/routes-rag-settings-vector-cortex.js +1 -0
  6. package/dist/extensions/dashboard-server/routes-vector-cortex-heal.js +47 -0
  7. package/dist/extensions/dashboard-server/routes-vector-cortex.js +1 -0
  8. package/dist/extensions/dashboard-server/routes.js +1 -1
  9. package/dist/extensions/dashboard-server/server.js +3 -82
  10. package/dist/src/config/vector-cortex.js +12 -0
  11. package/dist/src/config.js +1 -1
  12. package/dist/src/vector-cortex/heal/_acceptance-fixture.js +56 -0
  13. package/dist/src/vector-cortex/heal/closure-metrics.js +66 -0
  14. package/dist/src/vector-cortex/heal/closure-opt.js +242 -0
  15. package/dist/src/vector-cortex/heal/emit.js +69 -0
  16. package/dist/src/vector-cortex/heal/proof.js +210 -0
  17. package/dist/src/vector-cortex/heal/types.js +42 -0
  18. package/dist/vector-cortex/heal/_acceptance-fixture.js +56 -0
  19. package/dist/vector-cortex/heal/closure-metrics.js +66 -0
  20. package/dist/vector-cortex/heal/closure-opt.js +242 -0
  21. package/dist/vector-cortex/heal/emit.js +69 -0
  22. package/dist/vector-cortex/heal/proof.js +210 -0
  23. package/dist/vector-cortex/heal/types.js +42 -0
  24. package/extensions/dashboard-client/dist/assets/{AreaChart-DqTbaSRA.js → AreaChart-5yxaI8IO.js} +2 -2
  25. package/extensions/dashboard-client/dist/assets/{AreaChart-DqTbaSRA.js.map → AreaChart-5yxaI8IO.js.map} +1 -1
  26. package/extensions/dashboard-client/dist/assets/{BarChart-BfNBeOvF.js → BarChart-BoHhCqH-.js} +2 -2
  27. package/extensions/dashboard-client/dist/assets/{BarChart-BfNBeOvF.js.map → BarChart-BoHhCqH-.js.map} +1 -1
  28. package/extensions/dashboard-client/dist/assets/{CacheTab-C9SOMYB5.js → CacheTab-Di6L3CsF.js} +2 -2
  29. package/extensions/dashboard-client/dist/assets/{CacheTab-C9SOMYB5.js.map → CacheTab-Di6L3CsF.js.map} +1 -1
  30. package/extensions/dashboard-client/dist/assets/{EventsTab-GsMKP10_.js → EventsTab-Cdff3h6s.js} +2 -2
  31. package/extensions/dashboard-client/dist/assets/{EventsTab-GsMKP10_.js.map → EventsTab-Cdff3h6s.js.map} +1 -1
  32. package/extensions/dashboard-client/dist/assets/{HealthTab-DAOCXwRP.js → HealthTab-MthYYVLw.js} +2 -2
  33. package/extensions/dashboard-client/dist/assets/{HealthTab-DAOCXwRP.js.map → HealthTab-MthYYVLw.js.map} +1 -1
  34. package/extensions/dashboard-client/dist/assets/{MaintenanceTab-BtBeMkB5.js → MaintenanceTab-D9G4ntsG.js} +2 -2
  35. package/extensions/dashboard-client/dist/assets/{MaintenanceTab-BtBeMkB5.js.map → MaintenanceTab-D9G4ntsG.js.map} +1 -1
  36. package/extensions/dashboard-client/dist/assets/{MemoryMapTab-DzndtgkZ.js → MemoryMapTab-CN8Lr5Qf.js} +2 -2
  37. package/extensions/dashboard-client/dist/assets/{MemoryMapTab-DzndtgkZ.js.map → MemoryMapTab-CN8Lr5Qf.js.map} +1 -1
  38. package/extensions/dashboard-client/dist/assets/{MetricsTab-DyxJ4eb8.js → MetricsTab-CgO32kSo.js} +2 -2
  39. package/extensions/dashboard-client/dist/assets/{MetricsTab-DyxJ4eb8.js.map → MetricsTab-CgO32kSo.js.map} +1 -1
  40. package/extensions/dashboard-client/dist/assets/{OverviewTab-DCiEdVWR.js → OverviewTab-Cb4kR0h1.js} +2 -2
  41. package/extensions/dashboard-client/dist/assets/{OverviewTab-DCiEdVWR.js.map → OverviewTab-Cb4kR0h1.js.map} +1 -1
  42. package/extensions/dashboard-client/dist/assets/{ReposTab-B5SIqVHA.js → ReposTab-Dt1FGnMR.js} +2 -2
  43. package/extensions/dashboard-client/dist/assets/{ReposTab-B5SIqVHA.js.map → ReposTab-Dt1FGnMR.js.map} +1 -1
  44. package/extensions/dashboard-client/dist/assets/{SessionsTab-DLWFJ9xI.js → SessionsTab-D7D2RW6U.js} +2 -2
  45. package/extensions/dashboard-client/dist/assets/{SessionsTab-DLWFJ9xI.js.map → SessionsTab-D7D2RW6U.js.map} +1 -1
  46. package/extensions/dashboard-client/dist/assets/{SetupTab-CvGXZyej.js → SetupTab-CgV5xCzz.js} +2 -2
  47. package/extensions/dashboard-client/dist/assets/{SetupTab-CvGXZyej.js.map → SetupTab-CgV5xCzz.js.map} +1 -1
  48. package/extensions/dashboard-client/dist/assets/{TimeSavedCard-wZuQGxLS.js → TimeSavedCard-CCNuJjyO.js} +2 -2
  49. package/extensions/dashboard-client/dist/assets/{TimeSavedCard-wZuQGxLS.js.map → TimeSavedCard-CCNuJjyO.js.map} +1 -1
  50. package/extensions/dashboard-client/dist/assets/{TurnsTab-B7aOejch.js → TurnsTab-Cv1OCttJ.js} +2 -2
  51. package/extensions/dashboard-client/dist/assets/{TurnsTab-B7aOejch.js.map → TurnsTab-Cv1OCttJ.js.map} +1 -1
  52. package/extensions/dashboard-client/dist/assets/VectorCortexTab-DTabQo6h.js +2 -0
  53. package/extensions/dashboard-client/dist/assets/VectorCortexTab-DTabQo6h.js.map +1 -0
  54. package/extensions/dashboard-client/dist/assets/{WikiTab-DhWHjAtt.js → WikiTab-B48QnQrK.js} +2 -2
  55. package/extensions/dashboard-client/dist/assets/{WikiTab-DhWHjAtt.js.map → WikiTab-B48QnQrK.js.map} +1 -1
  56. package/extensions/dashboard-client/dist/assets/{button-BrC-W87h.js → button-BBQl2MiF.js} +2 -2
  57. package/extensions/dashboard-client/dist/assets/{button-BrC-W87h.js.map → button-BBQl2MiF.js.map} +1 -1
  58. package/extensions/dashboard-client/dist/assets/{card-0rgfRgr3.js → card-BYbefUur.js} +2 -2
  59. package/extensions/dashboard-client/dist/assets/{card-0rgfRgr3.js.map → card-BYbefUur.js.map} +1 -1
  60. package/extensions/dashboard-client/dist/assets/{generateCategoricalChart-DRresOQF.js → generateCategoricalChart-swm0YZe0.js} +2 -2
  61. package/extensions/dashboard-client/dist/assets/{generateCategoricalChart-DRresOQF.js.map → generateCategoricalChart-swm0YZe0.js.map} +1 -1
  62. package/extensions/dashboard-client/dist/assets/{index-DohmtZWL.js → index-DeIky7xm.js} +3 -3
  63. package/extensions/dashboard-client/dist/assets/{index-DohmtZWL.js.map → index-DeIky7xm.js.map} +1 -1
  64. package/extensions/dashboard-client/dist/assets/{switch-Bs8g_zB5.js → switch-CctU78ww.js} +2 -2
  65. package/extensions/dashboard-client/dist/assets/{switch-Bs8g_zB5.js.map → switch-CctU78ww.js.map} +1 -1
  66. package/extensions/dashboard-client/dist/assets/{toggle-DVVauIo8.js → toggle-BRCNCoiI.js} +2 -2
  67. package/extensions/dashboard-client/dist/assets/{toggle-DVVauIo8.js.map → toggle-BRCNCoiI.js.map} +1 -1
  68. package/extensions/dashboard-client/dist/assets/{useSSE-DxH1PTAR.js → useSSE-WfOiWDH_.js} +2 -2
  69. package/extensions/dashboard-client/dist/assets/{useSSE-DxH1PTAR.js.map → useSSE-WfOiWDH_.js.map} +1 -1
  70. package/extensions/dashboard-client/dist/index.html +1 -1
  71. package/extensions/dashboard-client/src/api/vector-cortex.ts +9 -0
  72. package/extensions/dashboard-client/src/tabs/VectorCortexClosureCard.tsx +46 -0
  73. package/extensions/dashboard-client/src/tabs/VectorCortexLedgerCard.tsx +80 -0
  74. package/extensions/dashboard-client/src/tabs/VectorCortexTab.tsx +12 -164
  75. package/extensions/dashboard-client/src/tabs/VectorCortexTopologyCard.tsx +131 -0
  76. package/extensions/dashboard-client/src/types/vector-cortex.ts +14 -0
  77. package/extensions/dashboard-server/api-contracts/vector-cortex-heal.ts +43 -0
  78. package/extensions/dashboard-server/api-contracts/vector-cortex.ts +2 -0
  79. package/extensions/dashboard-server/route-dispatch.ts +112 -0
  80. package/extensions/dashboard-server/routes-rag-settings-vector-cortex.ts +6 -0
  81. package/extensions/dashboard-server/routes-vector-cortex-heal.ts +56 -0
  82. package/extensions/dashboard-server/routes-vector-cortex.ts +1 -0
  83. package/extensions/dashboard-server/routes.ts +1 -0
  84. package/extensions/dashboard-server/server.ts +3 -86
  85. package/package.json +1 -1
  86. package/src/config/vector-cortex.ts +13 -0
  87. package/src/config.ts +1 -0
  88. package/src/vector-cortex/heal/_acceptance-fixture.ts +108 -0
  89. package/src/vector-cortex/heal/closure-metrics.ts +73 -0
  90. package/src/vector-cortex/heal/closure-opt.ts +266 -0
  91. package/src/vector-cortex/heal/emit.ts +93 -0
  92. package/src/vector-cortex/heal/proof.ts +234 -0
  93. package/src/vector-cortex/heal/types.ts +226 -0
  94. package/extensions/dashboard-client/dist/assets/VectorCortexTab-eHVt9yDx.js +0 -2
  95. package/extensions/dashboard-client/dist/assets/VectorCortexTab-eHVt9yDx.js.map +0 -1
@@ -0,0 +1,234 @@
1
+ /**
2
+ * vector-cortex/heal/proof.ts — VC6A proof verifier (task 4).
3
+ *
4
+ * The optimizer (`closure-opt.ts`) is PURE and cheap, but a proof is cheap to
5
+ * LIE about: a buggy or tampered producer could ship a proof that removes an
6
+ * edge the conservative closure actually needs. The verifier does not trust the
7
+ * proof — it REPLAYS it against the conservative oracle from scratch.
8
+ *
9
+ * REPLAY. From the conservative `ClosureResult` we rebuild the requirement
10
+ * adjacency (`to ⇒ from` for `depends`, both directions for `tool-pair`) over
11
+ * the in-selection edges — exactly the relation `closure-opt` reduced over.
12
+ * For every row the proof claims to REMOVE, the verifier independently confirms
13
+ * the same alternate path exists. For every row it claims to RETAIN, it confirms
14
+ * the protection reason holds (or that no alternate path exists). Any row that
15
+ * fails its own predicate is a witness violation.
16
+ *
17
+ * SELECTED-SET DIVERGENCE (the cardinal sin). The proof must contain the SAME
18
+ * selected set as the conservative oracle, byte for byte. Closure optimization
19
+ * is allowed to make the plan cheaper, never smaller — so if the proof's
20
+ * `selected` differs from the oracle's, that is `HEAL_PROOF_SET_MISMATCH` and the
21
+ * repaired triad must fall back to mode B (the conservative closure) and
22
+ * ultimately C (VC5C's legacy prompt) if even that fails.
23
+ *
24
+ * PURE / DETERMINISTIC / LOCAL, like everything in `heal/`: no storage, no
25
+ * console, no clock, no network (PREVENT-PI-004 / PREVENT-011). The verifier
26
+ * reads only types and the two ClosureEdge/ClosureGraph/ClosureResult shapes.
27
+ */
28
+
29
+ import type { ClosureGraph, ClosureResult } from "../reconstruct/types.js";
30
+ import type {
31
+ ClosureProofRow,
32
+ ClosureProofV2,
33
+ HealFailureCode,
34
+ HealMode,
35
+ HealTriadOutcome,
36
+ ProofVerification,
37
+ } from "./types.js";
38
+
39
+ /** Bytewise id comparator — matches `closure-opt.ts` / `reconstruct/closure.ts`. */
40
+ function byBytes(a: string, b: string): number {
41
+ return a < b ? -1 : a > b ? 1 : 0;
42
+ }
43
+
44
+ /** Requirement adjacency over an edge list, identical to `closure-opt`. */
45
+ function requirementAdjacency(edges: readonly ClosureProofRow[]): Map<string, string[]> {
46
+ const adj = new Map<string, string[]>();
47
+ const add = (key: string, value: string): void => {
48
+ const list = adj.get(key);
49
+ if (list === undefined) adj.set(key, [value]);
50
+ else list.push(value);
51
+ };
52
+ for (const row of edges) {
53
+ if (row.kind === "contradicts") continue; // not a traversal edge
54
+ if (row.kind === "depends") add(row.to, row.from);
55
+ else if (row.kind === "tool-pair") {
56
+ add(row.to, row.from);
57
+ add(row.from, row.to);
58
+ }
59
+ }
60
+ for (const list of adj.values()) list.sort(byBytes);
61
+ return adj;
62
+ }
63
+
64
+ /** Does a detour `start ⇒ via ⇒ ... ⇒ target` exist, excluding the direct hop? */
65
+ function alternatePathVia(
66
+ adj: ReadonlyMap<string, string[]>,
67
+ start: string,
68
+ target: string,
69
+ ): string | null {
70
+ for (const hop of (adj.get(start) ?? []).filter((n) => n !== target)) {
71
+ const seen = new Set<string>([start]);
72
+ const worklist: string[] = [hop];
73
+ while (worklist.length > 0) {
74
+ worklist.sort(byBytes);
75
+ const current = worklist.shift();
76
+ if (current === undefined) break;
77
+ if (current === target) return hop;
78
+ if (seen.has(current)) continue;
79
+ seen.add(current);
80
+ for (const next of adj.get(current) ?? []) {
81
+ if (!seen.has(next)) worklist.push(next);
82
+ }
83
+ }
84
+ }
85
+ return null;
86
+ }
87
+
88
+ /**
89
+ * Verify a `ClosureProofV2` produced for an already-closed graph.
90
+ *
91
+ * Returns `{ ok: true, selected }` when the replay confirms the optimized plan is
92
+ * provably equivalent to the conservative closure — mode A may be used. On any
93
+ * divergence it returns `{ ok: false, codes }` listing every failure code; the
94
+ * caller routes to mode B (conservative) and, if that also fails, mode C (legacy,
95
+ * with `semanticLossStated`). The verifier is idempotent — replaying the same
96
+ * proof twice yields the same verdict, which `vc6a-acceptance.test.ts` asserts.
97
+ */
98
+ export function verifyProof(
99
+ proof: ClosureProofV2,
100
+ conservative: ClosureResult,
101
+ graph?: ClosureGraph,
102
+ ): ProofVerification {
103
+ const codes: HealFailureCode[] = [];
104
+ const inSelection = new Set(conservative.selected);
105
+ const anchors = new Set(
106
+ (graph?.nodes ?? []).filter((n) => n.anchor === true).map((n) => n.id),
107
+ );
108
+
109
+ // 1. Selected-set divergence is the hard gate (task 4: HEAL_PROOF_SET_MISMATCH).
110
+ const oracleSelected = [...conservative.selected].sort(byBytes);
111
+ const proofSelected = [...proof.selected].sort(byBytes);
112
+ const selectedMatch =
113
+ oracleSelected.length === proofSelected.length &&
114
+ oracleSelected.every((id, i) => id === proofSelected[i]);
115
+ if (!selectedMatch) codes.push("HEAL_PROOF_SET_MISMATCH");
116
+
117
+ // 2. Re-check each row against its own predicate. For a removal, the witness
118
+ // is validated against the OTHER rows (the reduced graph), so a removal
119
+ // never justifies another's witness — this catches both a missing-witness
120
+ // removal (HEAL-PROOF-003) and a protected edge that was removed
121
+ // (HEAL_PROOF_PROTECTED_REMOVED).
122
+
123
+ for (const row of proof.rows) {
124
+ // Out-of-scope rows (touch an unselected node) should never have been
125
+ // emitted; treat as a witness violation so a malformed proof fails loudly.
126
+ if (!inSelection.has(row.from) || !inSelection.has(row.to)) {
127
+ codes.push("HEAL_PROOF_WITNESS_INVALID");
128
+ continue;
129
+ }
130
+ if (row.decision === "removed") {
131
+ // A removal MUST carry a witness and the witness MUST still validate
132
+ // against the OTHER rows (the reduced graph) — never the row itself, so a
133
+ // removal never justifies another's witness (matches the optimizer's
134
+ // exclusion rule).
135
+ if (row.via === undefined) {
136
+ codes.push("HEAL_PROOF_WITNESS_INVALID");
137
+ continue;
138
+ }
139
+ const others = proof.rows.filter((r) => r !== row);
140
+ const witness = alternatePathVia(requirementAdjacency(others), row.to, row.from);
141
+ if (witness === null) {
142
+ codes.push("HEAL_PROOF_WITNESS_INVALID");
143
+ continue;
144
+ }
145
+ if (anchors.has(row.from) || anchors.has(row.to)) {
146
+ // Topology says removable, but an anchor edge is NEVER removable.
147
+ codes.push("HEAL_PROOF_PROTECTED_REMOVED");
148
+ continue;
149
+ }
150
+ if (row.kind === "tool-pair" || row.kind === "contradicts") {
151
+ // Both are protected regardless of topology.
152
+ codes.push("HEAL_PROOF_PROTECTED_REMOVED");
153
+ }
154
+ } else {
155
+ // A retained plain depends edge that claims `no-alternate-path` but
156
+ // actually HAS one (through the other rows) is an internal inconsistency:
157
+ // the optimizer kept a removable edge without removing it. The proof is
158
+ // internally contradictory, so it fails replay.
159
+ if (row.kind === "depends" && row.reason === "no-alternate-path") {
160
+ const others = proof.rows.filter((r) => r !== row);
161
+ const hasPath = alternatePathVia(requirementAdjacency(others), row.to, row.from);
162
+ if (hasPath !== null) codes.push("HEAL_PROOF_WITNESS_INVALID");
163
+ }
164
+ }
165
+ }
166
+
167
+ // 3. Completeness: every in-selection edge the optimizer considered must appear
168
+ // in the proof. A dropped row (the unique-injection test drops one) surfaces
169
+ // as HEAL_PROOF_INCOMPLETE even if the remaining rows replay fine — the proof
170
+ // must account for EVERY considered edge. `conservativeTraversals` is the
171
+ // optimizer's own record of how many edges it fed through, so `rows.length`
172
+ // must equal it exactly.
173
+ if (proof.rows.length < proof.conservativeTraversals) {
174
+ codes.push("HEAL_PROOF_INCOMPLETE");
175
+ }
176
+
177
+ if (codes.length === 0) {
178
+ return { ok: true, selected: proofSelected };
179
+ }
180
+ return { ok: false, codes: [...new Set(codes)] };
181
+ }
182
+
183
+ /**
184
+ * Drive the A/B/C resilient triad for one closure (task 5 wiring; VC6A exposes
185
+ * the decision; the actual selection/budget work is VC4C/VC5A respectively).
186
+ *
187
+ * - A: the optimized proof verified cleanly → ship the optimized plan.
188
+ * - B: proof rejected → fall back to the conservative VC4C closure (no opt).
189
+ * - C: B also failed (should not happen for a sound conservative closure) →
190
+ * state the legacy prompt path with `semanticLossStated`.
191
+ *
192
+ * This is PURE: it returns the verdict and which mode to use; it does not emit,
193
+ * store, or touch the network. The emit seam (`emit.ts`) consumes the outcome.
194
+ */
195
+ export function selectHealMode(
196
+ proof: ClosureProofV2,
197
+ conservative: ClosureResult,
198
+ graph?: ClosureGraph,
199
+ ): HealTriadOutcome {
200
+ const verification = verifyProof(proof, conservative, graph);
201
+ if (verification.ok) {
202
+ return {
203
+ mode: "A" as HealMode,
204
+ proof,
205
+ selected: [...proof.selected],
206
+ codes: [],
207
+ semanticLossStated: false,
208
+ };
209
+ }
210
+ // Mode B: conservative closure is sound by construction (it is the oracle the
211
+ // proof was measured against). Use it directly.
212
+ return {
213
+ mode: "B" as HealMode,
214
+ proof: null,
215
+ selected: [...conservative.selected],
216
+ codes: verification.codes,
217
+ semanticLossStated: false,
218
+ };
219
+ }
220
+
221
+ /**
222
+ * Convenience for the rare B-failure path: if even the conservative oracle's
223
+ * selection cannot be honored, state the legacy prompt and MARK semantic loss.
224
+ * Mode C is the last resort and the only place semantic loss is ever admitted.
225
+ */
226
+ export function legacyFallback(conservative: ClosureResult, reason: HealFailureCode): HealTriadOutcome {
227
+ return {
228
+ mode: "C" as HealMode,
229
+ proof: null,
230
+ selected: [...conservative.selected],
231
+ codes: [reason, "HEAL_CLOSURE_REJECTED"],
232
+ semanticLossStated: true,
233
+ };
234
+ }
@@ -0,0 +1,226 @@
1
+ /**
2
+ * vector-cortex/heal/types.ts — VC6A closure-optimization contract.
3
+ *
4
+ * Owns `ClosureProofV2` and `RestoreHintV1`.
5
+ *
6
+ * VC4C already performs the MANDATORY conservative closure (CONTRACTS §plan and
7
+ * closure): it recursively adds every `depends`/tool-pair predecessor to a fixed
8
+ * point, resolves contradictions, and preserves the anchor floor. VC6A does NOT
9
+ * re-close and does NOT change WHICH NODES ARE SELECTED — "VC6 only optimizes
10
+ * restoration/self-healing". It optimizes the PROOF EDGES of that already-closed
11
+ * graph by transitive reduction: an edge `a -> c` whose requirement is already
12
+ * carried by a path `a -> b -> c` is redundant and can be dropped from the
13
+ * traversal plan without changing the closed set.
14
+ *
15
+ * The optimization is therefore a claim, and a claim needs a receipt:
16
+ * `ClosureProofV2` records EVERY considered edge — retained or removed — with
17
+ * the reason. `proof.ts` replays those rows against the conservative VC4C oracle
18
+ * and rejects the optimization if the selected set diverges
19
+ * (`HEAL_PROOF_SET_MISMATCH`) or if a considered edge has no proof row
20
+ * (`HEAL_PROOF_INCOMPLETE`).
21
+ *
22
+ * PROTECTED EDGES ARE NEVER REMOVED. A tool-pair edge (PREVENT-PI-002), an edge
23
+ * touching an anchor node (PREVENT-PI-001's anchor floor), a
24
+ * contradiction-resolution edge, and a SOLE dependency edge (the only edge that
25
+ * pulls its prerequisite in) are all retained unconditionally, even when an
26
+ * alternate path exists. Only a redundant `depends` edge may go.
27
+ *
28
+ * Pure types + registered conformance IDs: no storage, no console, no network
29
+ * (PREVENT-PI-004 / PREVENT-011).
30
+ */
31
+
32
+ import type { ClosureEdge, ClosureEdgeKind } from "../reconstruct/types.js";
33
+
34
+ /**
35
+ * Why an edge survived the reduction. Ordered from strongest guarantee to
36
+ * weakest:
37
+ *
38
+ * - `tool-pair` — a tool call/result pair is atomic and never split
39
+ * (PREVENT-PI-002), so its edge is structural, not
40
+ * merely a traversal hint;
41
+ * - `anchor` — an endpoint is in the preserved anchor floor
42
+ * (PREVENT-PI-001), so the edge documents a floor
43
+ * obligation and is never elided;
44
+ * - `contradiction` — a `contradicts` edge participates in resolution; the
45
+ * resolver reads it directly, so removing it would
46
+ * change the resolved set, not just the traversal;
47
+ * - `sole-dependency`— the ONLY edge requiring this prerequisite; removing it
48
+ * would drop the prerequisite from the closure;
49
+ * - `no-alternate-path` — a plain `depends` edge with no `a -> ... -> c`
50
+ * detour, so it still carries its own requirement.
51
+ */
52
+ export type RetainReason =
53
+ | "tool-pair"
54
+ | "anchor"
55
+ | "contradiction"
56
+ | "sole-dependency"
57
+ | "no-alternate-path";
58
+
59
+ /**
60
+ * Why an edge was removed. Exactly one reason exists today — a redundant
61
+ * `depends` edge shadowed by a longer path — and it is spelled out rather than
62
+ * implied so a proof row can never be "removed, reason unstated"
63
+ * (HEAL-PROOF-003).
64
+ */
65
+ export type RemoveReason = "transitively-implied";
66
+
67
+ /**
68
+ * One proof row: an edge the optimizer CONSIDERED, and what it decided.
69
+ *
70
+ * Every considered edge produces exactly one row — including retained ones. A
71
+ * proof that lists only removals cannot be replayed against the oracle, because
72
+ * the verifier could not distinguish "retained deliberately" from "never
73
+ * examined" (the `HEAL_PROOF_INCOMPLETE` injection).
74
+ *
75
+ * `via` names the intermediate vertex of the witnessing path `from -> via -> to`
76
+ * for a removal. It is REQUIRED on a removal row (the witness IS the reason) and
77
+ * absent on a retention row.
78
+ */
79
+ export interface ClosureProofRow {
80
+ readonly from: string;
81
+ readonly to: string;
82
+ readonly kind: ClosureEdgeKind;
83
+ readonly decision: "retained" | "removed";
84
+ /** The stated reason. A removal without a reason fails verification. */
85
+ readonly reason: RetainReason | RemoveReason;
86
+ /** Witness vertex of the implying path (removals only). */
87
+ readonly via?: string;
88
+ }
89
+
90
+ /**
91
+ * The optimization receipt (`ClosureProofV2`).
92
+ *
93
+ * `selected` is copied UNCHANGED from the conservative VC4C closure — the
94
+ * optimizer never edits it, and the verifier re-derives it independently to
95
+ * prove that. `retainedEdges`/`removedEdges` are the optimized traversal plan;
96
+ * `rows` is the full considered-edge ledger, sorted deterministically.
97
+ *
98
+ * `conservativeTraversals` / `optimizedTraversals` are the edge-walk counts of
99
+ * the conservative and reduced plans; the sprint's acceptance bar is a >=20%
100
+ * median reduction across the fixture corpus, measured from these two numbers.
101
+ */
102
+ export interface ClosureProofV2 {
103
+ readonly schema: "closure-proof-v2";
104
+ readonly sessionId: string;
105
+ /** The closed selection, byte-identical to the conservative VC4C result. */
106
+ readonly selected: readonly string[];
107
+ /** Edges kept in the optimized traversal plan (sorted). */
108
+ readonly retainedEdges: readonly ClosureEdge[];
109
+ /** Edges dropped as transitively implied (sorted). */
110
+ readonly removedEdges: readonly ClosureEdge[];
111
+ /** One row per CONSIDERED edge — retained and removed alike (sorted). */
112
+ readonly rows: readonly ClosureProofRow[];
113
+ /** Edge walks the conservative plan performs. */
114
+ readonly conservativeTraversals: number;
115
+ /** Edge walks the optimized plan performs. */
116
+ readonly optimizedTraversals: number;
117
+ }
118
+
119
+ /**
120
+ * `RestoreHintV1` — the reader-only hint VC6B consumes to fetch missing sources.
121
+ *
122
+ * A hint names a node the optimized plan still needs and the CHEAPEST retained
123
+ * edge that reaches it (`viaEdgeFrom`), so the restorer can walk one edge rather
124
+ * than re-deriving the closure. `protectedNode` marks a node whose edge set was
125
+ * retained for a hard-safety reason (tool pair / anchor), telling VC6B to treat
126
+ * it as non-negotiable.
127
+ *
128
+ * Reader-only by contract: node IDENTITY plus the traversal hint, NEVER source
129
+ * bytes or prompt text (SECURITY_PRIVACY — the exact ledger is not training
130
+ * data and is never rendered through a diagnostic surface).
131
+ */
132
+ export interface RestoreHintV1 {
133
+ readonly schema: "restore-hint-v1";
134
+ readonly nodeId: string;
135
+ /** The retained edge's prerequisite endpoint, if the node has one. */
136
+ readonly viaEdgeFrom?: string;
137
+ /** True when the node is anchor-floor or tool-pair protected. */
138
+ readonly protectedNode: boolean;
139
+ /** Deterministic reason label mirroring the retention reason. */
140
+ readonly reason: RetainReason;
141
+ }
142
+
143
+ /** VC6A failure codes (registered HEAL codes). */
144
+ export type HealFailureCode =
145
+ /** The replayed selected set diverges from the conservative oracle. */
146
+ | "HEAL_PROOF_SET_MISMATCH"
147
+ /** A considered edge has no proof row (or a removal states no reason). */
148
+ | "HEAL_PROOF_INCOMPLETE"
149
+ /** A proof row removes an edge that is protected and must be retained. */
150
+ | "HEAL_PROOF_PROTECTED_REMOVED"
151
+ /** A removal row's witness path `from -> via -> to` does not exist. */
152
+ | "HEAL_PROOF_WITNESS_INVALID"
153
+ /** The underlying conservative closure itself failed — nothing to optimize. */
154
+ | "HEAL_CLOSURE_REJECTED";
155
+
156
+ /**
157
+ * Verifier verdict. `ok:true` means the optimized plan is provably equivalent to
158
+ * the conservative closure and mode A may be used. `ok:false` routes to mode B
159
+ * (the conservative VC4C closure, unoptimized) — never to a partially reduced
160
+ * plan.
161
+ */
162
+ export type ProofVerification =
163
+ | { readonly ok: true; readonly selected: readonly string[] }
164
+ | { readonly ok: false; readonly codes: readonly HealFailureCode[] };
165
+
166
+ /**
167
+ * The triad mode VC6A selects (TRIAD_RESILIENCE).
168
+ *
169
+ * A = the optimized closure whose proof verified;
170
+ * B = the VC4C conservative closure, forced by proof rejection — an
171
+ * INDEPENDENT algorithm (fixed-point worklist, no reduction) reached by a
172
+ * different code path in `reconstruct/closure.ts`;
173
+ * C = the legacy prompt, forced when BOTH closure paths fail (an unresolved
174
+ * contradiction or a structurally invalid graph), stating its loss of old
175
+ * semantic context.
176
+ */
177
+ export type HealMode = "A" | "B" | "C";
178
+
179
+ /** The outcome of the VC6A triad selection. */
180
+ export interface HealTriadOutcome {
181
+ readonly mode: HealMode;
182
+ /** The verified optimized proof (mode A only). */
183
+ readonly proof: ClosureProofV2 | null;
184
+ /** The selected node set actually used (empty only in mode C). */
185
+ readonly selected: readonly string[];
186
+ readonly codes: readonly HealFailureCode[];
187
+ /** Set only in mode C (TRIAD_RESILIENCE — "C states its semantic loss"). */
188
+ readonly semanticLossStated: boolean;
189
+ }
190
+
191
+ /** The two structured events the VC6A reporter emits. */
192
+ export type HealEventName =
193
+ | "vector_cortex_closure_optimized"
194
+ | "vector_cortex_closure_proof_rejected";
195
+
196
+ /**
197
+ * Aggregate-only closure-proof metrics for the dashboard (counts only, never
198
+ * node ids, edges, or source payloads).
199
+ */
200
+ export interface HealMetricsV1 {
201
+ readonly optimizations: number;
202
+ readonly proofRejections: number;
203
+ readonly retainedEdgeTotal: number;
204
+ readonly removedEdgeTotal: number;
205
+ readonly conservativeTraversalTotal: number;
206
+ readonly optimizedTraversalTotal: number;
207
+ }
208
+
209
+ /**
210
+ * Registered HEAL conformance ID range (HEAL-001..015). The acceptance test
211
+ * reads these rows from the v2 manifest and asserts each returns its manifest
212
+ * `ok`/`code`.
213
+ */
214
+ export const HEAL_IDS: readonly string[] = Array.from(
215
+ { length: 15 },
216
+ (_v, i) => `HEAL-${String(i + 1).padStart(3, "0")}`,
217
+ );
218
+
219
+ /** Named VC6A conformance assertions (the sprint's headline rows). */
220
+ export const HEAL_NAMED_IDS = [
221
+ "HEAL-REDUCE-001",
222
+ "HEAL-PROTECT-002",
223
+ "HEAL-PROOF-003",
224
+ ] as const;
225
+
226
+ export type { ClosureEdge, ClosureEdgeKind };
@@ -1,2 +0,0 @@
1
- import{j as e,B as a,r as c}from"./index-DohmtZWL.js";import{C as d,a as i,b as x,c as h}from"./card-0rgfRgr3.js";async function q(){const s=await fetch("/api/vector-cortex/evaluation");if(!s.ok)throw new Error(`vector-cortex evaluation: ${s.status}`);return s.json()}async function w(){const s=await fetch("/api/vector-cortex/health");if(!s.ok)throw new Error(`vector-cortex health: ${s.status}`);return s.json()}async function G(){const s=await fetch("/api/vector-cortex/topology");if(!s.ok)throw new Error(`vector-cortex topology: ${s.status}`);return s.json()}async function Q(){const s=await fetch("/api/vector-cortex/query");if(!s.ok)throw new Error(`vector-cortex query: ${s.status}`);return s.json()}async function W(){const s=await fetch("/api/vector-cortex/shards");if(!s.ok)throw new Error(`vector-cortex shards: ${s.status}`);return s.json()}async function Z(){const s=await fetch("/api/vector-cortex/reconstruct");if(!s.ok)throw new Error(`vector-cortex reconstruct: ${s.status}`);return s.json()}async function z(){const s=await fetch("/api/vector-cortex/plans");if(!s.ok)throw new Error(`vector-cortex plans: ${s.status}`);return s.json()}async function J(){const s=await fetch("/api/vector-cortex/render");if(!s.ok)throw new Error(`vector-cortex render: ${s.status}`);return s.json()}async function K(){const s=await fetch("/api/vector-cortex/rollout");if(!s.ok)throw new Error(`vector-cortex rollout: ${s.status}`);return s.json()}async function U(s="default"){const o=await fetch(`/api/vector-cortex/ledger?session=${encodeURIComponent(s)}`);if(!o.ok)throw new Error(`vector-cortex ledger: ${o.status}`);return o.json()}async function X(s){const o=await fetch("/api/vector-cortex/breakers/reset",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({subsystem:s})});if(!o.ok)throw new Error(`vector-cortex reset: ${o.status}`);return o.json()}function t({label:s,value:o}){return e.jsxs("div",{children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:s}),e.jsx("div",{className:"font-mono text-sm",children:o})]})}function Y({view:s}){return e.jsxs(d,{children:[e.jsx(i,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(x,{children:"Validated Prompt Renderer (VC5B)"}),s?.enabled?e.jsx(a,{variant:"success",children:"ACTIVE"}):e.jsx(a,{variant:"danger",children:"OFF"})]})}),e.jsx(h,{children:s?.enabled?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-4",children:[e.jsx(t,{label:"Render fixtures",value:String(s.renderCount)}),e.jsx(t,{label:"Provider profiles",value:String(s.providerCount)}),e.jsx(t,{label:"Known profiles",value:String(s.knownProfiles.length)})]}),e.jsx("div",{className:"mt-3 text-xs text-muted-foreground",children:"Reader-only render conformance route — no prompt text or session payloads exposed."})]}):e.jsx("div",{className:"vc-empty",children:"Renderer disabled (VC5B off)."})})]})}function _({view:s}){return e.jsxs(d,{children:[e.jsx(i,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(x,{children:"Live Graduated Rollout (VC5C)"}),s?.enabled?e.jsx(a,{variant:"success",children:"ACTIVE"}):e.jsx(a,{variant:"danger",children:"OFF"})]})}),e.jsx(h,{children:s?.enabled?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-4",children:[e.jsx(t,{label:"Gate",value:`${s.gatePct}%`}),e.jsx(t,{label:"Exposed buckets",value:String(s.bucketCount)}),e.jsx(t,{label:"Total buckets",value:String(s.buckets)}),e.jsx(t,{label:"Promotion",value:s.promotionBlocked?"FROZEN":"OPEN"}),e.jsx(t,{label:"Events",value:String(s.events)}),e.jsx(t,{label:"Sessions",value:String(s.sessions)})]}),e.jsx("div",{className:"mt-3 text-xs text-muted-foreground",children:"Reader-only rollout route — no session payloads or bucket→session mappings exposed."})]}):e.jsx("div",{className:"vc-empty",children:"Rollout disabled (VC5C off)."})})]})}function ee({view:s}){return e.jsxs(d,{children:[e.jsx(i,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(x,{children:"Plan Manifests (VC5A)"}),s?.enabled?e.jsx(a,{variant:"success",children:"ACTIVE"}):e.jsx(a,{variant:"danger",children:"OFF"})]})}),e.jsx(h,{children:s?.enabled?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-4",children:[e.jsx(t,{label:"DAG fixtures",value:String(s.dagCount)}),e.jsx(t,{label:"Plan fixtures",value:String(s.plannerCount)}),e.jsx(t,{label:"Plans exposed",value:String(s.plans.length)})]}),e.jsx("div",{className:"mt-3 text-xs text-muted-foreground",children:"Reader-only plan manifests only — no session payloads or prompt text. Per-run plan outputs are staged in-memory this sprint."})]}):e.jsx("div",{className:"vc-empty",children:"PromptDagV1 + budgeted planner disabled (VC5A off)."})})]})}function p({mode:s,count:o}){return e.jsxs("div",{className:"flex items-center justify-between border-b border-border/50 py-1 text-sm",children:[e.jsxs("span",{className:"text-muted-foreground",children:["Mode ",s]}),e.jsx("span",{className:"font-mono",children:o})]})}function re(){const[s,o]=c.useState(null),[b,V]=c.useState(null),[E,R]=c.useState(!0),[l,y]=c.useState(null),[N,C]=c.useState(null),[j,F]=c.useState(null),[n,k]=c.useState(null),[v,$]=c.useState(null),[m,T]=c.useState(null),[u,A]=c.useState(null),[I,O]=c.useState(null),[P,M]=c.useState(null),[B,D]=c.useState(null),f=c.useCallback(()=>{q().then(o).catch(r=>V(r instanceof Error?r.message:String(r))).finally(()=>R(!1)),w().then(y).catch(()=>{}),U().then(F).catch(()=>{}),G().then(k).catch(()=>{}),Q().then($).catch(()=>{}),W().then(T).catch(()=>{}),Z().then(A).catch(()=>{}),z().then(O).catch(()=>{}),J().then(M).catch(()=>{}),K().then(D).catch(()=>{})},[]);c.useEffect(()=>{f();const r=setInterval(f,5e3);return()=>clearInterval(r)},[f]);const L=()=>{X("provider").then(r=>(C(`Breaker "${r.subsystem}" ${r.state}; evidence retained: ${r.failures} failures / ${r.attempts} attempts`),w())).then(y).catch(r=>C(r instanceof Error?r.message:String(r)))};if(E&&!s)return e.jsx("div",{className:"vc-loading",children:"Loading vector-cortex evaluation…"});if(b&&!s)return e.jsxs("div",{className:"vc-error",children:["Error: ",b]});if(!s)return e.jsx("div",{className:"vc-empty",children:"No evaluation data available."});const S=Math.max(1,...s.histogram.cells,s.histogram.overflow);return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{className:"text-lg font-semibold",children:"Vector Cortex Evaluation"}),s.enabled?e.jsx(a,{variant:"warning",children:"OBSERVER PENDING (A)"}):e.jsx(a,{variant:"danger",children:"MODE C (OFF)"})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:[e.jsxs(d,{children:[e.jsx(i,{children:e.jsx(x,{children:"Samples"})}),e.jsxs(h,{children:[e.jsx("div",{className:"text-3xl font-bold",children:s.samples}),e.jsxs("div",{className:"mt-2 flex flex-col",children:[e.jsx(p,{mode:"A",count:s.byMode.A}),e.jsx(p,{mode:"B",count:s.byMode.B}),e.jsx(p,{mode:"C",count:s.byMode.C})]})]})]}),e.jsxs(d,{className:"md:col-span-2",children:[e.jsx(i,{children:e.jsx(x,{children:"Latency Histogram (ms, inclusive edges)"})}),e.jsxs(h,{children:[e.jsxs("div",{className:"flex items-end gap-2",style:{height:160},children:[s.histogram.edges.map((r,g)=>{const H=s.histogram.cells[g]/S*140;return e.jsxs("div",{className:"flex flex-1 flex-col items-center gap-1",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:s.histogram.cells[g]}),e.jsx("div",{className:"w-full rounded-t",style:{height:Math.max(2,H),background:"#6366f1"}}),e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["≤",r]})]},r)}),e.jsxs("div",{className:"flex flex-1 flex-col items-center gap-1",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:s.histogram.overflow}),e.jsx("div",{className:"w-full rounded-t",style:{height:Math.max(2,s.histogram.overflow/S*140),background:"#f87171"}}),e.jsx("span",{className:"text-[10px] text-muted-foreground",children:">250"})]})]}),e.jsxs("div",{className:"mt-1 text-xs text-muted-foreground",children:["Total: ",s.histogram.total," · Rejects: ",s.rejects.length]})]})]})]}),e.jsxs(d,{children:[e.jsx(i,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(x,{children:"Live Safety Envelope (VC0C)"}),e.jsxs("div",{className:"flex items-center gap-2",children:[l?.stateSource==="ephemeral"&&e.jsx(a,{variant:"outline",children:"EPHEMERAL (non-live)"}),e.jsx("button",{onClick:L,disabled:!l?.enabled,className:"rounded border border-border px-2 py-1 text-xs disabled:opacity-50",children:"Reset Cooldown"})]})]})}),e.jsxs(h,{children:[N&&e.jsx("div",{className:"mb-2 text-xs text-muted-foreground",children:N}),l?e.jsxs("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-4",children:[e.jsx(t,{label:"State",value:l.state}),e.jsx(t,{label:"Mode",value:l.mode}),e.jsx(t,{label:"Window",value:`${l.windowMs}ms`}),e.jsx(t,{label:"Probes",value:String(l.probeCount)}),e.jsx(t,{label:"Backoff",value:`${l.backoffDelayMs}ms`}),e.jsx(t,{label:"Failures",value:`${l.failures}/${l.attempts}`}),e.jsx(t,{label:"Frontier",value:l.stateSource==="ephemeral"?"non-live":l.frontierFrozen?"FROZEN":"LIVE"}),e.jsx(t,{label:"Spool lag",value:String(l.spoolLag)}),e.jsx(t,{label:"Encoder mode",value:l.encoderMode}),e.jsx(t,{label:"Encoder asset",value:l.encoderAssetDigest?l.encoderAssetDigest.slice(0,12):"none"})]}):e.jsx("div",{className:"vc-empty",children:"Health unavailable (VC0C off)."})]})]}),e.jsxs(d,{children:[e.jsx(i,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(x,{children:"Derived Cortex Store (VC3A)"}),n?.enabled?e.jsx(a,{variant:"success",children:"ACTIVE"}):e.jsx(a,{variant:"danger",children:"OFF"})]})}),e.jsx(h,{children:n?.enabled?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-3",children:[e.jsx(t,{label:"Generation",value:n.generationId??"—"}),e.jsx(t,{label:"Ordinal",value:n.ordinal??"—"}),e.jsx(t,{label:"Records",value:String(n.recordCount)}),e.jsx(t,{label:"Frontier (HW)",value:n.sourceHighWater}),e.jsx(t,{label:"Root digest",value:n.rootDigest?n.rootDigest.slice(0,16):"—"}),n.nodes!==void 0&&e.jsxs(e.Fragment,{children:[e.jsx(t,{label:"Nodes",value:String(n.nodes?.length??0)}),e.jsx(t,{label:"Edges",value:String(n.edges?.length??0)}),e.jsx(t,{label:"Graph digest",value:n.generationDigest?n.generationDigest.slice(0,16):"—"})]})]}),n.nodes!==void 0&&(n.edges?.length??0)>0&&e.jsxs("div",{className:"mt-4 max-h-56 overflow-y-auto",children:[e.jsx("div",{className:"mb-1 text-xs font-medium text-muted-foreground",children:"Topology edges (VC3B)"}),e.jsxs("table",{className:"w-full text-left text-xs",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-border/50 text-muted-foreground",children:[e.jsx("th",{className:"py-1 pr-2",children:"source"}),e.jsx("th",{className:"py-1 pr-2",children:"target"}),e.jsx("th",{className:"py-1 pr-2",children:"head"}),e.jsx("th",{className:"py-1 pr-2",children:"dir"}),e.jsx("th",{className:"py-1",children:"score"})]})}),e.jsx("tbody",{children:n.edges?.map((r,g)=>e.jsxs("tr",{className:"border-b border-border/30",children:[e.jsx("td",{className:"py-1 pr-2 font-mono",children:r.source}),e.jsx("td",{className:"py-1 pr-2 font-mono",children:r.target}),e.jsx("td",{className:"py-1 pr-2 font-mono",children:r.head}),e.jsx("td",{className:"py-1 pr-2",children:r.direction}),e.jsx("td",{className:"py-1 font-mono",children:r.score})]},`${r.source}-${r.target}-${r.head}-${g}`))})]})]})]}):e.jsx("div",{className:"vc-empty",children:"Cortex store disabled (VC3A off)."})})]}),e.jsxs(d,{children:[e.jsx(i,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(x,{children:"Topology Query Diagnostics (VC3C)"}),v?.enabled?e.jsx(a,{variant:"success",children:"ACTIVE"}):e.jsx(a,{variant:"danger",children:"OFF"})]})}),e.jsx(h,{children:v?.enabled?e.jsx("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-3",children:e.jsx(t,{label:"Router version",value:String(v.routerVersion)})}):e.jsx("div",{className:"vc-empty",children:"Query diagnostics unavailable (VC3C off)."})})]}),e.jsxs(d,{children:[e.jsx(i,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(x,{children:"Dual-Tier Shards (VC4A)"}),m?.enabled?e.jsx(a,{variant:"success",children:"ACTIVE"}):e.jsx(a,{variant:"danger",children:"OFF"})]})}),e.jsx(h,{children:m?.enabled?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-4",children:[e.jsx(t,{label:"Semantic shards",value:String(m.semanticCount)}),e.jsx(t,{label:"Exact shards",value:String(m.exactCount)}),e.jsx(t,{label:"Byte total",value:String(m.byteTotal)}),e.jsx(t,{label:"Protected bytes",value:String(m.protectedByteTotal)})]}),e.jsx("div",{className:"mt-3 text-xs text-muted-foreground",children:"Reader-only count/byte aggregate; staged in-memory this sprint."})]}):e.jsx("div",{className:"vc-empty",children:"Dual-tier shards disabled (VC4A off)."})})]}),e.jsxs(d,{children:[e.jsx(i,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(x,{children:"Reconstruction Fidelity (VC4C)"}),u?.enabled?e.jsx(a,{variant:"success",children:"ACTIVE"}):e.jsx(a,{variant:"danger",children:"OFF"})]})}),e.jsx(h,{children:u?.enabled?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-4",children:[e.jsx(t,{label:"Closure attempts",value:String(u.closureAttempts)}),e.jsx(t,{label:"Closure rejections",value:String(u.closureRejections)}),e.jsx(t,{label:"Validated",value:String(u.validatedCount)}),e.jsx(t,{label:"Invalidated",value:String(u.invalidatedCount)}),e.jsx(t,{label:"Span total",value:String(u.spanTotal)}),e.jsx(t,{label:"Byte total",value:String(u.byteTotal)})]}),e.jsx("div",{className:"mt-3 text-xs text-muted-foreground",children:"Reader-only closure/validation aggregate; staged in-memory this sprint."})]}):e.jsx("div",{className:"vc-empty",children:"Reconstruction fidelity disabled (VC4C off)."})})]}),e.jsx(ee,{view:I}),e.jsx(Y,{view:P}),e.jsx(_,{view:B}),e.jsxs(d,{children:[e.jsx(i,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(x,{children:"Occurrence Ledger (VC1B)"}),j?.enabled?e.jsx(a,{variant:"success",children:"ACTIVE"}):e.jsx(a,{variant:"danger",children:"OFF"})]})}),e.jsx(h,{children:j?.enabled?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mb-3 grid grid-cols-2 gap-4 md:grid-cols-3",children:[e.jsx(t,{label:"Session",value:j.session}),e.jsx(t,{label:"High-water",value:j.highWater}),e.jsx(t,{label:"Occurrences",value:String(j.count)})]}),j.occurrences.length===0?e.jsx("div",{className:"vc-empty",children:"No occurrences recorded."}):e.jsx("div",{className:"max-h-64 overflow-y-auto",children:e.jsxs("table",{className:"w-full text-left text-xs",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-border/50 text-muted-foreground",children:[e.jsx("th",{className:"py-1 pr-2",children:"seq"}),e.jsx("th",{className:"py-1 pr-2",children:"eventId"}),e.jsx("th",{className:"py-1 pr-2",children:"kind"}),e.jsx("th",{className:"py-1 pr-2",children:"toolCall"}),e.jsx("th",{className:"py-1",children:"digest"})]})}),e.jsx("tbody",{children:j.occurrences.map(r=>e.jsxs("tr",{className:"border-b border-border/30",children:[e.jsx("td",{className:"py-1 pr-2 font-mono",children:r.seq}),e.jsx("td",{className:"py-1 pr-2 font-mono",children:r.eventId}),e.jsx("td",{className:"py-1 pr-2",children:r.kind}),e.jsx("td",{className:"py-1 pr-2 font-mono",children:r.toolCallId??"—"}),e.jsx("td",{className:"max-w-[180px] truncate font-mono text-muted-foreground",children:r.digest})]},`${r.seq}-${r.eventId}`))})]})})]}):e.jsx("div",{className:"vc-empty",children:"Ledger disabled (VC1B off)."})})]})]})}export{re as default};
2
- //# sourceMappingURL=VectorCortexTab-eHVt9yDx.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"VectorCortexTab-eHVt9yDx.js","sources":["../../src/api/vector-cortex.ts","../../src/tabs/VectorCortexMetric.tsx","../../src/tabs/VectorCortexRenderCard.tsx","../../src/tabs/VectorCortexRolloutCard.tsx","../../src/tabs/VectorCortexPlansCard.tsx","../../src/tabs/VectorCortexTab.tsx"],"sourcesContent":["/**\n * dashboard-client/src/api/vector-cortex.ts — vector-cortex API client.\n * PREVENT-PI-004: relative path only (loopback dashboard).\n */\n\nimport type {\n\tVectorCortexEvaluationSummary,\n\tVectorCortexHealthCard,\n\tVectorCortexLedgerView,\n\tVectorCortexPlansView,\n\tVectorCortexQueryView,\n\tVectorCortexReconstructView,\n\tVectorCortexRenderView,\n\tVectorCortexResetResult,\n\tVectorCortexRolloutView,\n\tVectorCortexShardsView,\n\tVectorCortexTopologyView,\n} from \"../types/vector-cortex\";\n\nexport type {\n\tVectorCortexEvaluationSummary,\n\tVectorCortexHealthCard,\n\tVectorCortexLedgerView,\n\tVectorCortexPlansView,\n\tVectorCortexQueryView,\n\tVectorCortexReconstructView,\n\tVectorCortexRenderView,\n\tVectorCortexResetResult,\n\tVectorCortexRolloutView,\n\tVectorCortexShardsView,\n\tVectorCortexTopologyView,\n};\n\nexport async function fetchVectorCortexEvaluation(): Promise<VectorCortexEvaluationSummary> {\n\tconst r = await fetch(\"/api/vector-cortex/evaluation\");\n\tif (!r.ok) throw new Error(`vector-cortex evaluation: ${r.status}`);\n\treturn r.json() as Promise<VectorCortexEvaluationSummary>;\n}\n\nexport async function fetchVectorCortexHealth(): Promise<VectorCortexHealthCard> {\n\tconst r = await fetch(\"/api/vector-cortex/health\");\n\tif (!r.ok) throw new Error(`vector-cortex health: ${r.status}`);\n\treturn r.json() as Promise<VectorCortexHealthCard>;\n}\n\n/** Reader-only cortex topology view (VC3A). */\nexport async function fetchVectorCortexTopology(): Promise<VectorCortexTopologyView> {\n\tconst r = await fetch(\"/api/vector-cortex/topology\");\n\tif (!r.ok) throw new Error(`vector-cortex topology: ${r.status}`);\n\treturn r.json() as Promise<VectorCortexTopologyView>;\n}\n\n/** Reader-only query-layer diagnostics view (VC3C). */\nexport async function fetchVectorCortexQuery(): Promise<VectorCortexQueryView> {\n\tconst r = await fetch(\"/api/vector-cortex/query\");\n\tif (!r.ok) throw new Error(`vector-cortex query: ${r.status}`);\n\treturn r.json() as Promise<VectorCortexQueryView>;\n}\n\n/** Reader-only dual-tier shard aggregate (VC4A). */\nexport async function fetchVectorCortexShards(): Promise<VectorCortexShardsView> {\n\tconst r = await fetch(\"/api/vector-cortex/shards\");\n\tif (!r.ok) throw new Error(`vector-cortex shards: ${r.status}`);\n\treturn r.json() as Promise<VectorCortexShardsView>;\n}\n\n/** Reader-only reconstruction-fidelity aggregate (VC4C). */\nexport async function fetchVectorCortexReconstruct(): Promise<VectorCortexReconstructView> {\n\tconst r = await fetch(\"/api/vector-cortex/reconstruct\");\n\tif (!r.ok) throw new Error(`vector-cortex reconstruct: ${r.status}`);\n\treturn r.json() as Promise<VectorCortexReconstructView>;\n}\n\n/** Reader-only plan manifest view (VC5A). Exposes only plan manifests. */\nexport async function fetchVectorCortexPlans(): Promise<VectorCortexPlansView> {\n\tconst r = await fetch(\"/api/vector-cortex/plans\");\n\tif (!r.ok) throw new Error(`vector-cortex plans: ${r.status}`);\n\treturn r.json() as Promise<VectorCortexPlansView>;\n}\n\n/** Reader-only render + provider-profile view (VC5B). */\nexport async function fetchVectorCortexRender(): Promise<VectorCortexRenderView> {\n\tconst r = await fetch(\"/api/vector-cortex/render\");\n\tif (!r.ok) throw new Error(`vector-cortex render: ${r.status}`);\n\treturn r.json() as Promise<VectorCortexRenderView>;\n}\n\n/** Reader-only live graduated-rollout view (VC5C). */\nexport async function fetchVectorCortexRollout(): Promise<VectorCortexRolloutView> {\n\tconst r = await fetch(\"/api/vector-cortex/rollout\");\n\tif (!r.ok) throw new Error(`vector-cortex rollout: ${r.status}`);\n\treturn r.json() as Promise<VectorCortexRolloutView>;\n}\n\n/** Reader-only occurrence-ledger identity view (VC1B). */\nexport async function fetchVectorCortexLedger(\n\tsession = \"default\",\n): Promise<VectorCortexLedgerView> {\n\tconst r = await fetch(\n\t\t`/api/vector-cortex/ledger?session=${encodeURIComponent(session)}`,\n\t);\n\tif (!r.ok) throw new Error(`vector-cortex ledger: ${r.status}`);\n\treturn r.json() as Promise<VectorCortexLedgerView>;\n}\n\n/** Admin capability: reset a breaker's cooldown (never evidence). */\nexport async function resetVectorCortexBreaker(\n\tsubsystem: string,\n): Promise<VectorCortexResetResult> {\n\tconst r = await fetch(\"/api/vector-cortex/breakers/reset\", {\n\t\tmethod: \"POST\",\n\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\tbody: JSON.stringify({ subsystem }),\n\t});\n\tif (!r.ok) throw new Error(`vector-cortex reset: ${r.status}`);\n\treturn r.json() as Promise<VectorCortexResetResult>;\n}\n","import type React from \"react\";\n\nexport function Metric({ label, value }: { label: string; value: string }): React.ReactElement {\n\treturn (\n\t\t<div>\n\t\t\t<div className=\"text-xs text-muted-foreground\">{label}</div>\n\t\t\t<div className=\"font-mono text-sm\">{value}</div>\n\t\t</div>\n\t);\n}\n","import type React from \"react\";\nimport type { VectorCortexRenderView } from \"../api/vector-cortex\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"../components/ui/card\";\nimport { Badge } from \"../components/ui/badge\";\nimport { Metric } from \"./VectorCortexMetric\";\n\nexport function VectorCortexRenderCard({ view }: { view: VectorCortexRenderView | null }): React.ReactElement {\n\treturn (\n\t\t<Card>\n\t\t\t<CardHeader>\n\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t<CardTitle>Validated Prompt Renderer (VC5B)</CardTitle>\n\t\t\t\t\t{view?.enabled ? (\n\t\t\t\t\t\t<Badge variant=\"success\">ACTIVE</Badge>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Badge variant=\"danger\">OFF</Badge>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</CardHeader>\n\t\t\t<CardContent>\n\t\t\t\t{!view?.enabled ? (\n\t\t\t\t\t<div className=\"vc-empty\">Renderer disabled (VC5B off).</div>\n\t\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"grid grid-cols-2 gap-4 md:grid-cols-4\">\n\t\t\t\t\t\t<Metric label=\"Render fixtures\" value={String(view.renderCount)} />\n\t\t\t\t\t\t<Metric label=\"Provider profiles\" value={String(view.providerCount)} />\n\t\t\t\t\t\t<Metric label=\"Known profiles\" value={String(view.knownProfiles.length)} />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"mt-3 text-xs text-muted-foreground\">\n\t\t\t\t\t\tReader-only render conformance route — no prompt text or session payloads exposed.\n\t\t\t\t\t</div>\n\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</CardContent>\n\t\t</Card>\n\t);\n}\n","import type React from \"react\";\nimport type { VectorCortexRolloutView } from \"../api/vector-cortex\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"../components/ui/card\";\nimport { Badge } from \"../components/ui/badge\";\nimport { Metric } from \"./VectorCortexMetric\";\n\nexport function VectorCortexRolloutCard({ view }: { view: VectorCortexRolloutView | null }): React.ReactElement {\n\treturn (\n\t\t<Card>\n\t\t\t<CardHeader>\n\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t<CardTitle>Live Graduated Rollout (VC5C)</CardTitle>\n\t\t\t\t\t{view?.enabled ? (\n\t\t\t\t\t\t<Badge variant=\"success\">ACTIVE</Badge>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Badge variant=\"danger\">OFF</Badge>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</CardHeader>\n\t\t\t<CardContent>\n\t\t\t\t{!view?.enabled ? (\n\t\t\t\t\t<div className=\"vc-empty\">Rollout disabled (VC5C off).</div>\n\t\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"grid grid-cols-2 gap-4 md:grid-cols-4\">\n\t\t\t\t\t\t<Metric label=\"Gate\" value={`${view.gatePct}%`} />\n\t\t\t\t\t\t<Metric label=\"Exposed buckets\" value={String(view.bucketCount)} />\n\t\t\t\t\t\t<Metric label=\"Total buckets\" value={String(view.buckets)} />\n\t\t\t\t\t\t<Metric\n\t\t\t\t\t\t\tlabel=\"Promotion\"\n\t\t\t\t\t\t\tvalue={view.promotionBlocked ? \"FROZEN\" : \"OPEN\"}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Metric label=\"Events\" value={String(view.events)} />\n\t\t\t\t\t\t<Metric label=\"Sessions\" value={String(view.sessions)} />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"mt-3 text-xs text-muted-foreground\">\n\t\t\t\t\t\tReader-only rollout route — no session payloads or bucket→session mappings exposed.\n\t\t\t\t\t</div>\n\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</CardContent>\n\t\t</Card>\n\t);\n}\n","import type React from \"react\";\nimport type { VectorCortexPlansView } from \"../api/vector-cortex\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"../components/ui/card\";\nimport { Badge } from \"../components/ui/badge\";\nimport { Metric } from \"./VectorCortexMetric\";\n\nexport function VectorCortexPlansCard({ view }: { view: VectorCortexPlansView | null }): React.ReactElement {\n\treturn (\n\t\t<Card>\n\t\t\t<CardHeader>\n\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t<CardTitle>Plan Manifests (VC5A)</CardTitle>\n\t\t\t\t\t{view?.enabled ? (\n\t\t\t\t\t\t<Badge variant=\"success\">ACTIVE</Badge>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Badge variant=\"danger\">OFF</Badge>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</CardHeader>\n\t\t\t<CardContent>\n\t\t\t\t{!view?.enabled ? (\n\t\t\t\t\t<div className=\"vc-empty\">PromptDagV1 + budgeted planner disabled (VC5A off).</div>\n\t\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"grid grid-cols-2 gap-4 md:grid-cols-4\">\n\t\t\t\t\t\t<Metric label=\"DAG fixtures\" value={String(view.dagCount)} />\n\t\t\t\t\t\t<Metric label=\"Plan fixtures\" value={String(view.plannerCount)} />\n\t\t\t\t\t\t<Metric label=\"Plans exposed\" value={String(view.plans.length)} />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"mt-3 text-xs text-muted-foreground\">\n\t\t\t\t\t\tReader-only plan manifests only — no session payloads or prompt text.\n\t\t\t\t\t\tPer-run plan outputs are staged in-memory this sprint.\n\t\t\t\t\t</div>\n\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</CardContent>\n\t\t</Card>\n\t);\n}\n","/**\n * VectorCortexTab.tsx — vector-cortex dashboard tab.\n * VC0A: reader-only aggregate latency histogram + per-mode sample counts from\n * GET /api/vector-cortex/evaluation. VC0C (task 5): live safety envelope health\n * card (breaker state, window/probe/backoff, durable spool frontier/lag) from\n * GET /api/vector-cortex/health plus an admin \"reset cooldown\" action. Polls\n * every 5s.\n */\n\nimport { useState, useEffect, useCallback } from \"react\";\nimport {\n\tfetchVectorCortexEvaluation,\n\tfetchVectorCortexHealth,\n\tfetchVectorCortexLedger,\n\tfetchVectorCortexQuery,\n\tfetchVectorCortexReconstruct,\n\tfetchVectorCortexPlans,\n\tfetchVectorCortexRender,\n\tfetchVectorCortexRollout,\n\tfetchVectorCortexShards,\n\tfetchVectorCortexTopology,\n\tresetVectorCortexBreaker,\n\ttype VectorCortexEvaluationSummary,\n\ttype VectorCortexHealthCard,\n\ttype VectorCortexLedgerView,\n\ttype VectorCortexQueryView,\n\ttype VectorCortexReconstructView,\n\ttype VectorCortexPlansView,\n\ttype VectorCortexRenderView,\n\ttype VectorCortexRolloutView,\n\ttype VectorCortexShardsView,\n\ttype VectorCortexTopologyView,\n} from \"../api/vector-cortex\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"../components/ui/card\";\nimport { Badge } from \"../components/ui/badge\";\nimport { Metric } from \"./VectorCortexMetric\";\nimport { VectorCortexRenderCard } from \"./VectorCortexRenderCard\";\nimport { VectorCortexRolloutCard } from \"./VectorCortexRolloutCard\";\nimport { VectorCortexPlansCard } from \"./VectorCortexPlansCard\";\n\nfunction ModeChip({ mode, count }: { mode: string; count: number }): React.ReactElement {\n\treturn (\n\t\t<div className=\"flex items-center justify-between border-b border-border/50 py-1 text-sm\">\n\t\t\t<span className=\"text-muted-foreground\">Mode {mode}</span>\n\t\t\t<span className=\"font-mono\">{count}</span>\n\t\t</div>\n\t);\n}\n\nexport default function VectorCortexTab(): React.ReactElement {\n\tconst [data, setData] = useState<VectorCortexEvaluationSummary | null>(null);\n\tconst [err, setError] = useState<string | null>(null);\n\tconst [loading, setLoading] = useState(true);\n\tconst [health, setHealth] = useState<VectorCortexHealthCard | null>(null);\n\tconst [resetMsg, setResetMsg] = useState<string | null>(null);\n\tconst [ledger, setLedger] = useState<VectorCortexLedgerView | null>(null);\n\tconst [topology, setTopology] = useState<VectorCortexTopologyView | null>(null);\n\tconst [query, setQuery] = useState<VectorCortexQueryView | null>(null);\n\tconst [shards, setShards] = useState<VectorCortexShardsView | null>(null);\n\tconst [reconstruct, setReconstruct] = useState<VectorCortexReconstructView | null>(null);\n\tconst [plans, setPlans] = useState<VectorCortexPlansView | null>(null);\n\tconst [render, setRender] = useState<VectorCortexRenderView | null>(null);\n\tconst [rollout, setRollout] = useState<VectorCortexRolloutView | null>(null);\n\n\tconst poll = useCallback(() => {\n\t\tfetchVectorCortexEvaluation()\n\t\t\t.then(setData)\n\t\t\t.catch((e: unknown) =>\n\t\t\t\tsetError(e instanceof Error ? e.message : String(e)),\n\t\t\t)\n\t\t\t.finally(() => setLoading(false));\n\t\tfetchVectorCortexHealth().then(setHealth).catch(() => {\n\t\t\t/* health card is best-effort (VC0C) */\n\t\t});\n\t\tfetchVectorCortexLedger().then(setLedger).catch(() => {\n\t\t\t/* ledger card is best-effort (VC1B) */\n\t\t});\n\t\tfetchVectorCortexTopology().then(setTopology).catch(() => {\n\t\t\t/* topology card is best-effort (VC3A) */\n\t\t});\n\t\tfetchVectorCortexQuery().then(setQuery).catch(() => {\n\t\t\t/* query diagnostics card is best-effort (VC3C) */\n\t\t});\n\t\tfetchVectorCortexShards().then(setShards).catch(() => {\n\t\t\t/* dual-tier shards card is best-effort (VC4A) */\n\t\t});\n\t\tfetchVectorCortexReconstruct().then(setReconstruct).catch(() => {\n\t\t\t/* reconstruction-fidelity card is best-effort (VC4C) */\n\t\t});\n\t\tfetchVectorCortexPlans().then(setPlans).catch(() => {\n\t\t\t/* plan manifest card is best-effort (VC5A) */\n\t\t});\n\t\tfetchVectorCortexRender().then(setRender).catch(() => {\n\t\t\t/* render conformance card is best-effort (VC5B) */\n\t\t});\n\t\tfetchVectorCortexRollout().then(setRollout).catch(() => {\n\t\t\t/* rollout card is best-effort (VC5C) */\n\t\t});\n\t}, []);\n\n\tuseEffect(() => {\n\t\tpoll();\n\t\tconst id = setInterval(poll, 5000);\n\t\treturn () => clearInterval(id);\n\t}, [poll]);\n\n\tconst onReset = () => {\n\t\tresetVectorCortexBreaker(\"provider\")\n\t\t\t.then((r) => {\n\t\t\t\tsetResetMsg(\n\t\t\t\t\t`Breaker \"${r.subsystem}\" ${r.state}; evidence retained: ${r.failures} failures / ${r.attempts} attempts`,\n\t\t\t\t);\n\t\t\t\treturn fetchVectorCortexHealth();\n\t\t\t})\n\t\t\t.then(setHealth)\n\t\t\t.catch((e: unknown) =>\n\t\t\t\tsetResetMsg(e instanceof Error ? e.message : String(e)),\n\t\t\t);\n\t};\n\n\tif (loading && !data)\n\t\treturn <div className=\"vc-loading\">Loading vector-cortex evaluation…</div>;\n\tif (err && !data)\n\t\treturn <div className=\"vc-error\">Error: {err}</div>;\n\tif (!data)\n\t\treturn <div className=\"vc-empty\">No evaluation data available.</div>;\n\n\tconst max = Math.max(1, ...data.histogram.cells, data.histogram.overflow);\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t<h2 className=\"text-lg font-semibold\">Vector Cortex Evaluation</h2>\n\t\t\t\t{data.enabled ? (\n\t\t\t\t\t<Badge variant=\"warning\">OBSERVER PENDING (A)</Badge>\n\t\t\t\t) : (\n\t\t\t\t\t<Badge variant=\"danger\">MODE C (OFF)</Badge>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t<div className=\"grid grid-cols-1 gap-4 md:grid-cols-3\">\n\t\t\t\t<Card>\n\t\t\t\t\t<CardHeader>\n\t\t\t\t\t\t<CardTitle>Samples</CardTitle>\n\t\t\t\t\t</CardHeader>\n\t\t\t\t\t<CardContent>\n\t\t\t\t\t\t<div className=\"text-3xl font-bold\">{data.samples}</div>\n\t\t\t\t\t\t<div className=\"mt-2 flex flex-col\">\n\t\t\t\t\t\t\t<ModeChip mode=\"A\" count={data.byMode.A} />\n\t\t\t\t\t\t\t<ModeChip mode=\"B\" count={data.byMode.B} />\n\t\t\t\t\t\t\t<ModeChip mode=\"C\" count={data.byMode.C} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</CardContent>\n\t\t\t\t</Card>\n\n\t\t\t\t<Card className=\"md:col-span-2\">\n\t\t\t\t\t<CardHeader>\n\t\t\t\t\t\t<CardTitle>Latency Histogram (ms, inclusive edges)</CardTitle>\n\t\t\t\t\t</CardHeader>\n\t\t\t\t\t<CardContent>\n\t\t\t\t\t\t<div className=\"flex items-end gap-2\" style={{ height: 160 }}>\n\t\t\t\t\t\t\t{data.histogram.edges.map((edge, i) => {\n\t\t\t\t\t\t\t\tconst h = (data.histogram.cells[i] / max) * 140;\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<div key={edge} className=\"flex flex-1 flex-col items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t{data.histogram.cells[i]}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full rounded-t\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ height: Math.max(2, h), background: \"#6366f1\" }}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-[10px] text-muted-foreground\">&le;{edge}</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t<div className=\"flex flex-1 flex-col items-center gap-1\">\n\t\t\t\t\t\t\t\t<span className=\"text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{data.histogram.overflow}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName=\"w-full rounded-t\"\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\theight: Math.max(2, (data.histogram.overflow / max) * 140),\n\t\t\t\t\t\t\t\t\t\tbackground: \"#f87171\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<span className=\"text-[10px] text-muted-foreground\">&gt;250</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"mt-1 text-xs text-muted-foreground\">\n\t\t\t\t\t\t\tTotal: {data.histogram.total} · Rejects: {data.rejects.length}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</CardContent>\n\t\t\t\t</Card>\n\t\t\t</div>\n\n\t\t\t<Card>\n\t\t\t\t<CardHeader>\n\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t<CardTitle>Live Safety Envelope (VC0C)</CardTitle>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t{health?.stateSource === \"ephemeral\" && (\n\t\t\t\t\t\t\t\t<Badge variant=\"outline\">EPHEMERAL (non-live)</Badge>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonClick={onReset}\n\t\t\t\t\t\t\t\tdisabled={!health?.enabled}\n\t\t\t\t\t\t\t\tclassName=\"rounded border border-border px-2 py-1 text-xs disabled:opacity-50\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tReset Cooldown\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</CardHeader>\n\t\t\t\t<CardContent>\n\t\t\t\t\t{resetMsg && (\n\t\t\t\t\t\t<div className=\"mb-2 text-xs text-muted-foreground\">{resetMsg}</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{!health ? (\n\t\t\t\t\t\t<div className=\"vc-empty\">Health unavailable (VC0C off).</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"grid grid-cols-2 gap-4 md:grid-cols-4\">\n\t\t\t\t\t\t\t<Metric label=\"State\" value={health.state} />\n\t\t\t\t\t\t\t<Metric label=\"Mode\" value={health.mode} />\n\t\t\t\t\t\t\t<Metric label=\"Window\" value={`${health.windowMs}ms`} />\n\t\t\t\t\t\t\t<Metric label=\"Probes\" value={String(health.probeCount)} />\n\t\t\t\t\t\t\t<Metric label=\"Backoff\" value={`${health.backoffDelayMs}ms`} />\n\t\t\t\t\t\t\t<Metric\n\t\t\t\t\t\t\t\tlabel=\"Failures\"\n\t\t\t\t\t\t\t\tvalue={`${health.failures}/${health.attempts}`}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Metric\n\t\t\t\t\t\t\t\tlabel=\"Frontier\"\n\t\t\t\t\t\t\t\tvalue={\n\t\t\t\t\t\t\t\t\thealth.stateSource === \"ephemeral\"\n\t\t\t\t\t\t\t\t\t\t? \"non-live\"\n\t\t\t\t\t\t\t\t\t\t: health.frontierFrozen\n\t\t\t\t\t\t\t\t\t\t\t? \"FROZEN\"\n\t\t\t\t\t\t\t\t\t\t\t: \"LIVE\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Metric label=\"Spool lag\" value={String(health.spoolLag)} />\n\t\t\t\t\t\t\t\t<Metric label=\"Encoder mode\" value={health.encoderMode} />\n\t\t\t\t\t\t\t\t<Metric label=\"Encoder asset\" value={health.encoderAssetDigest ? health.encoderAssetDigest.slice(0, 12) : \"none\"} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\t\t\t<Card>\n\t\t\t\t<CardHeader>\n\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t<CardTitle>Derived Cortex Store (VC3A)</CardTitle>\n\t\t\t\t\t\t{topology?.enabled ? (\n\t\t\t\t\t\t\t<Badge variant=\"success\">ACTIVE</Badge>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Badge variant=\"danger\">OFF</Badge>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</CardHeader>\n\t\t\t\t<CardContent>\n\t\t\t\t\t{!topology?.enabled ? (\n\t\t\t\t\t\t<div className=\"vc-empty\">Cortex store disabled (VC3A off).</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t<div className=\"grid grid-cols-2 gap-4 md:grid-cols-3\">\n\t\t\t\t\t\t\t<Metric label=\"Generation\" value={topology.generationId ?? \"—\"} />\n\t\t\t\t\t\t\t<Metric label=\"Ordinal\" value={topology.ordinal ?? \"—\"} />\n\t\t\t\t\t\t\t<Metric label=\"Records\" value={String(topology.recordCount)} />\n\t\t\t\t\t\t\t<Metric label=\"Frontier (HW)\" value={topology.sourceHighWater} />\n\t\t\t\t\t\t\t<Metric\n\t\t\t\t\t\t\t\tlabel=\"Root digest\"\n\t\t\t\t\t\t\t\tvalue={topology.rootDigest ? topology.rootDigest.slice(0, 16) : \"—\"}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{topology.nodes !== undefined && (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<Metric\n\t\t\t\t\t\t\t\t\t\tlabel=\"Nodes\"\n\t\t\t\t\t\t\t\t\t\tvalue={String(topology.nodes?.length ?? 0)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<Metric\n\t\t\t\t\t\t\t\t\t\tlabel=\"Edges\"\n\t\t\t\t\t\t\t\t\t\tvalue={String(topology.edges?.length ?? 0)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<Metric\n\t\t\t\t\t\t\t\t\t\tlabel=\"Graph digest\"\n\t\t\t\t\t\t\t\t\t\tvalue={\n\t\t\t\t\t\t\t\t\t\t\ttopology.generationDigest\n\t\t\t\t\t\t\t\t\t\t\t\t? topology.generationDigest.slice(0, 16)\n\t\t\t\t\t\t\t\t\t\t\t\t: \"—\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{topology.nodes !== undefined &&\n\t\t\t\t\t\t\t(topology.edges?.length ?? 0) > 0 && (\n\t\t\t\t\t\t\t\t<div className=\"mt-4 max-h-56 overflow-y-auto\">\n\t\t\t\t\t\t\t\t\t<div className=\"mb-1 text-xs font-medium text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\tTopology edges (VC3B)\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<table className=\"w-full text-left text-xs\">\n\t\t\t\t\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t\t\t\t\t<tr className=\"border-b border-border/50 text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t<th className=\"py-1 pr-2\">source</th>\n\t\t\t\t\t\t\t\t\t\t\t\t<th className=\"py-1 pr-2\">target</th>\n\t\t\t\t\t\t\t\t\t\t\t\t<th className=\"py-1 pr-2\">head</th>\n\t\t\t\t\t\t\t\t\t\t\t\t<th className=\"py-1 pr-2\">dir</th>\n\t\t\t\t\t\t\t\t\t\t\t\t<th className=\"py-1\">score</th>\n\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t\t\t\t{topology.edges?.map((e, i) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<tr\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={`${e.source}-${e.target}-${e.head}-${i}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"border-b border-border/30\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td className=\"py-1 pr-2 font-mono\">{e.source}</td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td className=\"py-1 pr-2 font-mono\">{e.target}</td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td className=\"py-1 pr-2 font-mono\">{e.head}</td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td className=\"py-1 pr-2\">{e.direction}</td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td className=\"py-1 font-mono\">{e.score}</td>\n\t\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\t\t\t<Card>\n\t\t\t\t<CardHeader>\n\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t<CardTitle>Topology Query Diagnostics (VC3C)</CardTitle>\n\t\t\t\t\t\t{query?.enabled ? (\n\t\t\t\t\t\t\t<Badge variant=\"success\">ACTIVE</Badge>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Badge variant=\"danger\">OFF</Badge>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</CardHeader>\n\t\t\t\t<CardContent>\n\t\t\t\t\t{!query?.enabled ? (\n\t\t\t\t\t\t<div className=\"vc-empty\">Query diagnostics unavailable (VC3C off).</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"grid grid-cols-2 gap-4 md:grid-cols-3\">\n\t\t\t\t\t\t\t<Metric label=\"Router version\" value={String(query.routerVersion)} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\t\t\t<Card>\n\t\t\t\t<CardHeader>\n\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t<CardTitle>Dual-Tier Shards (VC4A)</CardTitle>\n\t\t\t\t\t\t{shards?.enabled ? (\n\t\t\t\t\t\t\t<Badge variant=\"success\">ACTIVE</Badge>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Badge variant=\"danger\">OFF</Badge>\n\t\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t</CardHeader>\n\t\t\t\t<CardContent>\n\t\t\t\t\t{!shards?.enabled ? (\n\t\t\t\t\t\t<div className=\"vc-empty\">Dual-tier shards disabled (VC4A off).</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<div className=\"grid grid-cols-2 gap-4 md:grid-cols-4\">\n\t\t\t\t\t\t\t\t<Metric label=\"Semantic shards\" value={String(shards.semanticCount)} />\n\t\t\t\t\t\t\t\t<Metric label=\"Exact shards\" value={String(shards.exactCount)} />\n\t\t\t\t\t\t\t\t<Metric label=\"Byte total\" value={String(shards.byteTotal)} />\n\t\t\t\t\t\t\t\t<Metric label=\"Protected bytes\" value={String(shards.protectedByteTotal)} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"mt-3 text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t\tReader-only count/byte aggregate; staged in-memory this sprint.\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\t\t\t<Card>\n\t\t\t\t<CardHeader>\n\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t<CardTitle>Reconstruction Fidelity (VC4C)</CardTitle>\n\t\t\t\t\t\t{reconstruct?.enabled ? (\n\t\t\t\t\t\t\t<Badge variant=\"success\">ACTIVE</Badge>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Badge variant=\"danger\">OFF</Badge>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</CardHeader>\n\t\t\t\t<CardContent>\n\t\t\t\t\t{!reconstruct?.enabled ? (\n\t\t\t\t\t\t<div className=\"vc-empty\">Reconstruction fidelity disabled (VC4C off).</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<div className=\"grid grid-cols-2 gap-4 md:grid-cols-4\">\n\t\t\t\t\t\t\t\t<Metric label=\"Closure attempts\" value={String(reconstruct.closureAttempts)} />\n\t\t\t\t\t\t\t\t<Metric label=\"Closure rejections\" value={String(reconstruct.closureRejections)} />\n\t\t\t\t\t\t\t\t<Metric label=\"Validated\" value={String(reconstruct.validatedCount)} />\n\t\t\t\t\t\t\t\t<Metric label=\"Invalidated\" value={String(reconstruct.invalidatedCount)} />\n\t\t\t\t\t\t\t\t<Metric label=\"Span total\" value={String(reconstruct.spanTotal)} />\n\t\t\t\t\t\t\t\t<Metric label=\"Byte total\" value={String(reconstruct.byteTotal)} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"mt-3 text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t\tReader-only closure/validation aggregate; staged in-memory this sprint.\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\t\t\t<VectorCortexPlansCard view={plans} />\n\t\t\t<VectorCortexRenderCard view={render} />\n\t\t\t<VectorCortexRolloutCard view={rollout} />\n\t\t\t<Card>\n\t\t\t\t<CardHeader>\n\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t<CardTitle>Occurrence Ledger (VC1B)</CardTitle>\n\t\t\t\t\t\t{ledger?.enabled ? (\n\t\t\t\t\t\t\t<Badge variant=\"success\">ACTIVE</Badge>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Badge variant=\"danger\">OFF</Badge>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</CardHeader>\n\t\t\t\t<CardContent>\n\t\t\t\t\t{!ledger?.enabled ? (\n\t\t\t\t\t\t<div className=\"vc-empty\">Ledger disabled (VC1B off).</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<div className=\"mb-3 grid grid-cols-2 gap-4 md:grid-cols-3\">\n\t\t\t\t\t\t\t\t<Metric label=\"Session\" value={ledger.session} />\n\t\t\t\t\t\t\t\t<Metric label=\"High-water\" value={ledger.highWater} />\n\t\t\t\t\t\t\t\t<Metric label=\"Occurrences\" value={String(ledger.count)} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{ledger.occurrences.length === 0 ? (\n\t\t\t\t\t\t\t\t<div className=\"vc-empty\">No occurrences recorded.</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<div className=\"max-h-64 overflow-y-auto\">\n\t\t\t\t\t\t\t\t\t<table className=\"w-full text-left text-xs\">\n\t\t\t\t\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t\t\t\t\t<tr className=\"border-b border-border/50 text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t<th className=\"py-1 pr-2\">seq</th>\n\t\t\t\t\t\t\t\t\t\t\t\t<th className=\"py-1 pr-2\">eventId</th>\n\t\t\t\t\t\t\t\t\t\t\t\t<th className=\"py-1 pr-2\">kind</th>\n\t\t\t\t\t\t\t\t\t\t\t\t<th className=\"py-1 pr-2\">toolCall</th>\n\t\t\t\t\t\t\t\t\t\t\t\t<th className=\"py-1\">digest</th>\n\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t\t\t\t{ledger.occurrences.map((o) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<tr\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={`${o.seq}-${o.eventId}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"border-b border-border/30\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td className=\"py-1 pr-2 font-mono\">{o.seq}</td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td className=\"py-1 pr-2 font-mono\">{o.eventId}</td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td className=\"py-1 pr-2\">{o.kind}</td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td className=\"py-1 pr-2 font-mono\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{o.toolCallId ?? \"\\u2014\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<td className=\"max-w-[180px] truncate font-mono text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{o.digest}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\t\t</div>\n\t);\n}\n"],"names":["fetchVectorCortexEvaluation","r","fetchVectorCortexHealth","fetchVectorCortexTopology","fetchVectorCortexQuery","fetchVectorCortexShards","fetchVectorCortexReconstruct","fetchVectorCortexPlans","fetchVectorCortexRender","fetchVectorCortexRollout","fetchVectorCortexLedger","session","resetVectorCortexBreaker","subsystem","Metric","label","value","jsx","VectorCortexRenderCard","view","Card","CardHeader","jsxs","CardTitle","Badge","CardContent","Fragment","VectorCortexRolloutCard","VectorCortexPlansCard","ModeChip","mode","count","VectorCortexTab","data","setData","useState","err","setError","loading","setLoading","health","setHealth","resetMsg","setResetMsg","ledger","setLedger","topology","setTopology","query","setQuery","shards","setShards","reconstruct","setReconstruct","plans","setPlans","render","setRender","rollout","setRollout","poll","useCallback","e","useEffect","id","onReset","max","edge","i","h","o"],"mappings":"kHAiCA,eAAsBA,GAAsE,CAC3F,MAAMC,EAAI,MAAM,MAAM,+BAA+B,EACrD,GAAI,CAACA,EAAE,GAAI,MAAM,IAAI,MAAM,6BAA6BA,EAAE,MAAM,EAAE,EAClE,OAAOA,EAAE,KAAA,CACV,CAEA,eAAsBC,GAA2D,CAChF,MAAMD,EAAI,MAAM,MAAM,2BAA2B,EACjD,GAAI,CAACA,EAAE,GAAI,MAAM,IAAI,MAAM,yBAAyBA,EAAE,MAAM,EAAE,EAC9D,OAAOA,EAAE,KAAA,CACV,CAGA,eAAsBE,GAA+D,CACpF,MAAMF,EAAI,MAAM,MAAM,6BAA6B,EACnD,GAAI,CAACA,EAAE,GAAI,MAAM,IAAI,MAAM,2BAA2BA,EAAE,MAAM,EAAE,EAChE,OAAOA,EAAE,KAAA,CACV,CAGA,eAAsBG,GAAyD,CAC9E,MAAMH,EAAI,MAAM,MAAM,0BAA0B,EAChD,GAAI,CAACA,EAAE,GAAI,MAAM,IAAI,MAAM,wBAAwBA,EAAE,MAAM,EAAE,EAC7D,OAAOA,EAAE,KAAA,CACV,CAGA,eAAsBI,GAA2D,CAChF,MAAMJ,EAAI,MAAM,MAAM,2BAA2B,EACjD,GAAI,CAACA,EAAE,GAAI,MAAM,IAAI,MAAM,yBAAyBA,EAAE,MAAM,EAAE,EAC9D,OAAOA,EAAE,KAAA,CACV,CAGA,eAAsBK,GAAqE,CAC1F,MAAML,EAAI,MAAM,MAAM,gCAAgC,EACtD,GAAI,CAACA,EAAE,GAAI,MAAM,IAAI,MAAM,8BAA8BA,EAAE,MAAM,EAAE,EACnE,OAAOA,EAAE,KAAA,CACV,CAGA,eAAsBM,GAAyD,CAC9E,MAAMN,EAAI,MAAM,MAAM,0BAA0B,EAChD,GAAI,CAACA,EAAE,GAAI,MAAM,IAAI,MAAM,wBAAwBA,EAAE,MAAM,EAAE,EAC7D,OAAOA,EAAE,KAAA,CACV,CAGA,eAAsBO,GAA2D,CAChF,MAAMP,EAAI,MAAM,MAAM,2BAA2B,EACjD,GAAI,CAACA,EAAE,GAAI,MAAM,IAAI,MAAM,yBAAyBA,EAAE,MAAM,EAAE,EAC9D,OAAOA,EAAE,KAAA,CACV,CAGA,eAAsBQ,GAA6D,CAClF,MAAMR,EAAI,MAAM,MAAM,4BAA4B,EAClD,GAAI,CAACA,EAAE,GAAI,MAAM,IAAI,MAAM,0BAA0BA,EAAE,MAAM,EAAE,EAC/D,OAAOA,EAAE,KAAA,CACV,CAGA,eAAsBS,EACrBC,EAAU,UACwB,CAClC,MAAMV,EAAI,MAAM,MACf,qCAAqC,mBAAmBU,CAAO,CAAC,EAAA,EAEjE,GAAI,CAACV,EAAE,GAAI,MAAM,IAAI,MAAM,yBAAyBA,EAAE,MAAM,EAAE,EAC9D,OAAOA,EAAE,KAAA,CACV,CAGA,eAAsBW,EACrBC,EACmC,CACnC,MAAMZ,EAAI,MAAM,MAAM,oCAAqC,CAC1D,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAA,EAC3B,KAAM,KAAK,UAAU,CAAE,UAAAY,EAAW,CAAA,CAClC,EACD,GAAI,CAACZ,EAAE,GAAI,MAAM,IAAI,MAAM,wBAAwBA,EAAE,MAAM,EAAE,EAC7D,OAAOA,EAAE,KAAA,CACV,CClHO,SAASa,EAAO,CAAE,MAAAC,EAAO,MAAAC,GAA+D,CAC9F,cACE,MAAA,CACA,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,gCAAiC,SAAAF,EAAM,EACtDE,EAAAA,IAAC,MAAA,CAAI,UAAU,oBAAqB,SAAAD,CAAA,CAAM,CAAA,EAC3C,CAEF,CCHO,SAASE,EAAuB,CAAE,KAAAC,GAAqE,CAC7G,cACEC,EAAA,CACA,SAAA,CAAAH,MAACI,EAAA,CACA,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAL,EAAAA,IAACM,GAAU,SAAA,kCAAA,CAAgC,EAC1CJ,GAAM,QACNF,EAAAA,IAACO,EAAA,CAAM,QAAQ,UAAU,SAAA,QAAA,CAAM,EAE/BP,EAAAA,IAACO,EAAA,CAAM,QAAQ,SAAS,SAAA,KAAA,CAAG,CAAA,CAAA,CAE7B,CAAA,CACD,EACAP,EAAAA,IAACQ,EAAA,CACC,SAACN,GAAM,QAGRG,OAAAI,EAAAA,SAAA,CACC,SAAA,CAAAJ,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACd,SAAA,CAAAL,MAACH,GAAO,MAAM,kBAAkB,MAAO,OAAOK,EAAK,WAAW,EAAG,EACjEF,MAACH,GAAO,MAAM,oBAAoB,MAAO,OAAOK,EAAK,aAAa,EAAG,EACrEF,MAACH,GAAO,MAAM,iBAAiB,MAAO,OAAOK,EAAK,cAAc,MAAM,CAAA,CAAG,CAAA,EAC1E,EACAF,EAAAA,IAAC,MAAA,CAAI,UAAU,qCAAqC,SAAA,oFAAA,CAEpD,CAAA,CAAA,CACD,EAXCA,EAAAA,IAAC,MAAA,CAAI,UAAU,WAAW,SAAA,+BAAA,CAA6B,CAWxD,CAED,CAAA,EACD,CAEF,CC/BO,SAASU,EAAwB,CAAE,KAAAR,GAAsE,CAC/G,cACEC,EAAA,CACA,SAAA,CAAAH,MAACI,EAAA,CACA,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAL,EAAAA,IAACM,GAAU,SAAA,+BAAA,CAA6B,EACvCJ,GAAM,QACNF,EAAAA,IAACO,EAAA,CAAM,QAAQ,UAAU,SAAA,QAAA,CAAM,EAE/BP,EAAAA,IAACO,EAAA,CAAM,QAAQ,SAAS,SAAA,KAAA,CAAG,CAAA,CAAA,CAE7B,CAAA,CACD,EACAP,EAAAA,IAACQ,EAAA,CACC,SAACN,GAAM,QAGRG,OAAAI,EAAAA,SAAA,CACC,SAAA,CAAAJ,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACd,SAAA,CAAAL,EAAAA,IAACH,GAAO,MAAM,OAAO,MAAO,GAAGK,EAAK,OAAO,IAAK,EAChDF,MAACH,GAAO,MAAM,kBAAkB,MAAO,OAAOK,EAAK,WAAW,EAAG,EACjEF,MAACH,GAAO,MAAM,gBAAgB,MAAO,OAAOK,EAAK,OAAO,EAAG,EAC3DF,EAAAA,IAACH,EAAA,CACA,MAAM,YACN,MAAOK,EAAK,iBAAmB,SAAW,MAAA,CAAA,EAE3CF,MAACH,GAAO,MAAM,SAAS,MAAO,OAAOK,EAAK,MAAM,EAAG,EACnDF,MAACH,GAAO,MAAM,WAAW,MAAO,OAAOK,EAAK,QAAQ,CAAA,CAAG,CAAA,EACxD,EACAF,EAAAA,IAAC,MAAA,CAAI,UAAU,qCAAqC,SAAA,qFAAA,CAEpD,CAAA,CAAA,CACD,EAjBCA,EAAAA,IAAC,MAAA,CAAI,UAAU,WAAW,SAAA,8BAAA,CAA4B,CAiBvD,CAED,CAAA,EACD,CAEF,CCrCO,SAASW,GAAsB,CAAE,KAAAT,GAAoE,CAC3G,cACEC,EAAA,CACA,SAAA,CAAAH,MAACI,EAAA,CACA,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAL,EAAAA,IAACM,GAAU,SAAA,uBAAA,CAAqB,EAC/BJ,GAAM,QACNF,EAAAA,IAACO,EAAA,CAAM,QAAQ,UAAU,SAAA,QAAA,CAAM,EAE/BP,EAAAA,IAACO,EAAA,CAAM,QAAQ,SAAS,SAAA,KAAA,CAAG,CAAA,CAAA,CAE7B,CAAA,CACD,EACAP,EAAAA,IAACQ,EAAA,CACC,SAACN,GAAM,QAGRG,OAAAI,EAAAA,SAAA,CACC,SAAA,CAAAJ,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACd,SAAA,CAAAL,MAACH,GAAO,MAAM,eAAe,MAAO,OAAOK,EAAK,QAAQ,EAAG,EAC3DF,MAACH,GAAO,MAAM,gBAAgB,MAAO,OAAOK,EAAK,YAAY,EAAG,EAChEF,MAACH,GAAO,MAAM,gBAAgB,MAAO,OAAOK,EAAK,MAAM,MAAM,CAAA,CAAG,CAAA,EACjE,EACAF,EAAAA,IAAC,MAAA,CAAI,UAAU,qCAAqC,SAAA,8HAAA,CAGpD,CAAA,CAAA,CACD,EAZCA,EAAAA,IAAC,MAAA,CAAI,UAAU,WAAW,SAAA,qDAAA,CAAmD,CAY9E,CAED,CAAA,EACD,CAEF,CCEA,SAASY,EAAS,CAAE,KAAAC,EAAM,MAAAC,GAA8D,CACvF,OACCT,EAAAA,KAAC,MAAA,CAAI,UAAU,2EACd,SAAA,CAAAA,EAAAA,KAAC,OAAA,CAAK,UAAU,wBAAwB,SAAA,CAAA,QAAMQ,CAAA,EAAK,EACnDb,EAAAA,IAAC,OAAA,CAAK,UAAU,YAAa,SAAAc,CAAA,CAAM,CAAA,EACpC,CAEF,CAEA,SAAwBC,IAAsC,CAC7D,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAA+C,IAAI,EACrE,CAACC,EAAKC,CAAQ,EAAIF,EAAAA,SAAwB,IAAI,EAC9C,CAACG,EAASC,CAAU,EAAIJ,EAAAA,SAAS,EAAI,EACrC,CAACK,EAAQC,CAAS,EAAIN,EAAAA,SAAwC,IAAI,EAClE,CAACO,EAAUC,CAAW,EAAIR,EAAAA,SAAwB,IAAI,EACtD,CAACS,EAAQC,CAAS,EAAIV,EAAAA,SAAwC,IAAI,EAClE,CAACW,EAAUC,CAAW,EAAIZ,EAAAA,SAA0C,IAAI,EACxE,CAACa,EAAOC,CAAQ,EAAId,EAAAA,SAAuC,IAAI,EAC/D,CAACe,EAAQC,CAAS,EAAIhB,EAAAA,SAAwC,IAAI,EAClE,CAACiB,EAAaC,CAAc,EAAIlB,EAAAA,SAA6C,IAAI,EACjF,CAACmB,EAAOC,CAAQ,EAAIpB,EAAAA,SAAuC,IAAI,EAC/D,CAACqB,EAAQC,CAAS,EAAItB,EAAAA,SAAwC,IAAI,EAClE,CAACuB,EAASC,CAAU,EAAIxB,EAAAA,SAAyC,IAAI,EAErEyB,EAAOC,EAAAA,YAAY,IAAM,CAC9B7D,IACE,KAAKkC,CAAO,EACZ,MAAO4B,GACPzB,EAASyB,aAAa,MAAQA,EAAE,QAAU,OAAOA,CAAC,CAAC,CAAA,EAEnD,QAAQ,IAAMvB,EAAW,EAAK,CAAC,EACjCrC,EAAA,EAA0B,KAAKuC,CAAS,EAAE,MAAM,IAAM,CAEtD,CAAC,EACD/B,EAAA,EAA0B,KAAKmC,CAAS,EAAE,MAAM,IAAM,CAEtD,CAAC,EACD1C,EAAA,EAA4B,KAAK4C,CAAW,EAAE,MAAM,IAAM,CAE1D,CAAC,EACD3C,EAAA,EAAyB,KAAK6C,CAAQ,EAAE,MAAM,IAAM,CAEpD,CAAC,EACD5C,EAAA,EAA0B,KAAK8C,CAAS,EAAE,MAAM,IAAM,CAEtD,CAAC,EACD7C,EAAA,EAA+B,KAAK+C,CAAc,EAAE,MAAM,IAAM,CAEhE,CAAC,EACD9C,EAAA,EAAyB,KAAKgD,CAAQ,EAAE,MAAM,IAAM,CAEpD,CAAC,EACD/C,EAAA,EAA0B,KAAKiD,CAAS,EAAE,MAAM,IAAM,CAEtD,CAAC,EACDhD,EAAA,EAA2B,KAAKkD,CAAU,EAAE,MAAM,IAAM,CAExD,CAAC,CACF,EAAG,CAAA,CAAE,EAELI,EAAAA,UAAU,IAAM,CACfH,EAAA,EACA,MAAMI,EAAK,YAAYJ,EAAM,GAAI,EACjC,MAAO,IAAM,cAAcI,CAAE,CAC9B,EAAG,CAACJ,CAAI,CAAC,EAET,MAAMK,EAAU,IAAM,CACrBrD,EAAyB,UAAU,EACjC,KAAM,IACN+B,EACC,YAAY,EAAE,SAAS,KAAK,EAAE,KAAK,wBAAwB,EAAE,QAAQ,eAAe,EAAE,QAAQ,WAAA,EAExFzC,EAAA,EACP,EACA,KAAKuC,CAAS,EACd,MAAOqB,GACPnB,EAAYmB,aAAa,MAAQA,EAAE,QAAU,OAAOA,CAAC,CAAC,CAAA,CAEzD,EAEA,GAAIxB,GAAW,CAACL,EACf,OAAOhB,EAAAA,IAAC,MAAA,CAAI,UAAU,aAAa,SAAA,oCAAiC,EACrE,GAAImB,GAAO,CAACH,EACX,OAAOX,EAAAA,KAAC,MAAA,CAAI,UAAU,WAAW,SAAA,CAAA,UAAQc,CAAA,EAAI,EAC9C,GAAI,CAACH,EACJ,OAAOhB,EAAAA,IAAC,MAAA,CAAI,UAAU,WAAW,SAAA,gCAA6B,EAE/D,MAAMiD,EAAM,KAAK,IAAI,EAAG,GAAGjC,EAAK,UAAU,MAAOA,EAAK,UAAU,QAAQ,EACxE,OACCX,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACd,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACd,SAAA,CAAAL,EAAAA,IAAC,KAAA,CAAG,UAAU,wBAAwB,SAAA,2BAAwB,EAC7DgB,EAAK,QACLhB,EAAAA,IAACO,EAAA,CAAM,QAAQ,UAAU,SAAA,sBAAA,CAAoB,EAE7CP,EAAAA,IAACO,EAAA,CAAM,QAAQ,SAAS,SAAA,cAAA,CAAY,CAAA,EAEtC,EAEAF,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACd,SAAA,CAAAA,OAACF,EAAA,CACA,SAAA,CAAAH,MAACI,EAAA,CACA,SAAAJ,EAAAA,IAACM,EAAA,CAAU,SAAA,SAAA,CAAO,EACnB,SACCE,EAAA,CACA,SAAA,CAAAR,EAAAA,IAAC,MAAA,CAAI,UAAU,qBAAsB,SAAAgB,EAAK,QAAQ,EAClDX,EAAAA,KAAC,MAAA,CAAI,UAAU,qBACd,SAAA,CAAAL,MAACY,GAAS,KAAK,IAAI,MAAOI,EAAK,OAAO,EAAG,QACxCJ,EAAA,CAAS,KAAK,IAAI,MAAOI,EAAK,OAAO,EAAG,QACxCJ,EAAA,CAAS,KAAK,IAAI,MAAOI,EAAK,OAAO,CAAA,CAAG,CAAA,CAAA,CAC1C,CAAA,CAAA,CACD,CAAA,EACD,EAEAX,EAAAA,KAACF,EAAA,CAAK,UAAU,gBACf,SAAA,CAAAH,MAACI,EAAA,CACA,SAAAJ,EAAAA,IAACM,EAAA,CAAU,SAAA,yCAAA,CAAuC,EACnD,SACCE,EAAA,CACA,SAAA,CAAAH,OAAC,OAAI,UAAU,uBAAuB,MAAO,CAAE,OAAQ,KACrD,SAAA,CAAAW,EAAK,UAAU,MAAM,IAAI,CAACkC,EAAMC,IAAM,CACtC,MAAMC,EAAKpC,EAAK,UAAU,MAAMmC,CAAC,EAAIF,EAAO,IAC5C,OACC5C,EAAAA,KAAC,MAAA,CAAe,UAAU,0CACzB,SAAA,CAAAL,EAAAA,IAAC,QAAK,UAAU,gCACd,WAAK,UAAU,MAAMmD,CAAC,EACxB,EACAnD,EAAAA,IAAC,MAAA,CACA,UAAU,mBACV,MAAO,CAAE,OAAQ,KAAK,IAAI,EAAGoD,CAAC,EAAG,WAAY,SAAA,CAAU,CAAA,EAExD/C,EAAAA,KAAC,OAAA,CAAK,UAAU,oCAAoC,SAAA,CAAA,IAAK6C,CAAA,CAAA,CAAK,CAAA,CAAA,EARrDA,CASV,CAEF,CAAC,EACD7C,EAAAA,KAAC,MAAA,CAAI,UAAU,0CACd,SAAA,CAAAL,MAAC,OAAA,CAAK,UAAU,gCACd,SAAAgB,EAAK,UAAU,SACjB,EACAhB,EAAAA,IAAC,MAAA,CACA,UAAU,mBACV,MAAO,CACN,OAAQ,KAAK,IAAI,EAAIgB,EAAK,UAAU,SAAWiC,EAAO,GAAG,EACzD,WAAY,SAAA,CACb,CAAA,EAEDjD,EAAAA,IAAC,OAAA,CAAK,UAAU,oCAAoC,SAAA,MAAA,CAAO,CAAA,CAAA,CAC5D,CAAA,EACD,EACAK,EAAAA,KAAC,MAAA,CAAI,UAAU,qCAAqC,SAAA,CAAA,UAC3CW,EAAK,UAAU,MAAM,eAAaA,EAAK,QAAQ,MAAA,CAAA,CACxD,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAAA,EACD,SAECb,EAAA,CACA,SAAA,CAAAH,MAACI,EAAA,CACA,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAL,EAAAA,IAACM,GAAU,SAAA,6BAAA,CAA2B,EACtCD,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAkB,GAAQ,cAAgB,aACxBvB,MAACO,EAAA,CAAM,QAAQ,UAAU,SAAA,uBAAoB,EAE9CP,EAAAA,IAAC,SAAA,CACA,QAASgD,EACT,SAAU,CAACzB,GAAQ,QACnB,UAAU,qEACV,SAAA,gBAAA,CAAA,CAED,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CACD,SACCf,EAAA,CACC,SAAA,CAAAiB,GACAzB,EAAAA,IAAC,MAAA,CAAI,UAAU,qCAAsC,SAAAyB,EAAS,EAE7DF,EAGDlB,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACd,SAAA,CAAAL,EAAAA,IAACH,EAAA,CAAO,MAAM,QAAQ,MAAO0B,EAAO,MAAO,QAC1C1B,EAAA,CAAO,MAAM,OAAO,MAAO0B,EAAO,KAAM,EACzCvB,EAAAA,IAACH,GAAO,MAAM,SAAS,MAAO,GAAG0B,EAAO,QAAQ,KAAM,EACtDvB,MAACH,GAAO,MAAM,SAAS,MAAO,OAAO0B,EAAO,UAAU,EAAG,EACzDvB,EAAAA,IAACH,GAAO,MAAM,UAAU,MAAO,GAAG0B,EAAO,cAAc,KAAM,EAC7DvB,EAAAA,IAACH,EAAA,CACA,MAAM,WACN,MAAO,GAAG0B,EAAO,QAAQ,IAAIA,EAAO,QAAQ,EAAA,CAAA,EAE7CvB,EAAAA,IAACH,EAAA,CACA,MAAM,WACN,MACC0B,EAAO,cAAgB,YACpB,WACAA,EAAO,eACN,SACA,MAAA,CAAA,EAGNvB,MAACH,GAAO,MAAM,YAAY,MAAO,OAAO0B,EAAO,QAAQ,EAAG,QACxD1B,EAAA,CAAO,MAAM,eAAe,MAAO0B,EAAO,YAAa,EACxDvB,EAAAA,IAACH,EAAA,CAAO,MAAM,gBAAgB,MAAO0B,EAAO,mBAAqBA,EAAO,mBAAmB,MAAM,EAAG,EAAE,EAAI,MAAA,CAAQ,CAAA,CAAA,CACpH,EAzBAvB,EAAAA,IAAC,MAAA,CAAI,UAAU,WAAW,SAAA,gCAAA,CAA8B,CAyBxD,CAAA,CAEF,CAAA,EACD,SACCG,EAAA,CACA,SAAA,CAAAH,MAACI,EAAA,CACA,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAL,EAAAA,IAACM,GAAU,SAAA,6BAAA,CAA2B,EACrCuB,GAAU,QACV7B,EAAAA,IAACO,EAAA,CAAM,QAAQ,UAAU,SAAA,QAAA,CAAM,EAE/BP,EAAAA,IAACO,EAAA,CAAM,QAAQ,SAAS,SAAA,KAAA,CAAG,CAAA,CAAA,CAE7B,CAAA,CACD,EACAP,EAAAA,IAACQ,EAAA,CACC,SAACqB,GAAU,QAGXxB,OAAAI,EAAAA,SAAA,CACA,SAAA,CAAAJ,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACd,SAAA,CAAAL,MAACH,GAAO,MAAM,aAAa,MAAOgC,EAAS,cAAgB,IAAK,QAC/DhC,EAAA,CAAO,MAAM,UAAU,MAAOgC,EAAS,SAAW,IAAK,EACxD7B,MAACH,GAAO,MAAM,UAAU,MAAO,OAAOgC,EAAS,WAAW,EAAG,QAC5DhC,EAAA,CAAO,MAAM,gBAAgB,MAAOgC,EAAS,gBAAiB,EAC/D7B,EAAAA,IAACH,EAAA,CACA,MAAM,cACN,MAAOgC,EAAS,WAAaA,EAAS,WAAW,MAAM,EAAG,EAAE,EAAI,GAAA,CAAA,EAEhEA,EAAS,QAAU,QACnBxB,EAAAA,KAAAI,EAAAA,SAAA,CACC,SAAA,CAAAT,EAAAA,IAACH,EAAA,CACA,MAAM,QACN,MAAO,OAAOgC,EAAS,OAAO,QAAU,CAAC,CAAA,CAAA,EAE1C7B,EAAAA,IAACH,EAAA,CACA,MAAM,QACN,MAAO,OAAOgC,EAAS,OAAO,QAAU,CAAC,CAAA,CAAA,EAE1C7B,EAAAA,IAACH,EAAA,CACA,MAAM,eACN,MACCgC,EAAS,iBACNA,EAAS,iBAAiB,MAAM,EAAG,EAAE,EACrC,GAAA,CAAA,CAEL,CAAA,CACD,CAAA,EAEF,EACCA,EAAS,QAAU,SAClBA,EAAS,OAAO,QAAU,GAAK,GAC/BxB,EAAAA,KAAC,MAAA,CAAI,UAAU,gCACd,SAAA,CAAAL,EAAAA,IAAC,MAAA,CAAI,UAAU,iDAAiD,SAAA,wBAEhE,EACAK,EAAAA,KAAC,QAAA,CAAM,UAAU,2BAChB,SAAA,CAAAL,MAAC,QAAA,CACA,SAAAK,EAAAA,KAAC,KAAA,CAAG,UAAU,kDACb,SAAA,CAAAL,EAAAA,IAAC,KAAA,CAAG,UAAU,YAAY,SAAA,SAAM,EAChCA,EAAAA,IAAC,KAAA,CAAG,UAAU,YAAY,SAAA,SAAM,EAChCA,EAAAA,IAAC,KAAA,CAAG,UAAU,YAAY,SAAA,OAAI,EAC9BA,EAAAA,IAAC,KAAA,CAAG,UAAU,YAAY,SAAA,MAAG,EAC7BA,EAAAA,IAAC,KAAA,CAAG,UAAU,OAAO,SAAA,OAAA,CAAK,CAAA,CAAA,CAC3B,CAAA,CACD,QACC,QAAA,CACC,SAAA6B,EAAS,OAAO,IAAI,CAACgB,EAAGM,IACxB9C,EAAAA,KAAC,KAAA,CAEA,UAAU,4BAEV,SAAA,CAAAL,EAAAA,IAAC,KAAA,CAAG,UAAU,sBAAuB,SAAA6C,EAAE,OAAO,EAC9C7C,EAAAA,IAAC,KAAA,CAAG,UAAU,sBAAuB,WAAE,OAAO,EAC9CA,EAAAA,IAAC,KAAA,CAAG,UAAU,sBAAuB,WAAE,KAAK,EAC5CA,EAAAA,IAAC,KAAA,CAAG,UAAU,YAAa,WAAE,UAAU,EACvCA,EAAAA,IAAC,KAAA,CAAG,UAAU,iBAAkB,WAAE,KAAA,CAAM,CAAA,CAAA,EAPnC,GAAG6C,EAAE,MAAM,IAAIA,EAAE,MAAM,IAAIA,EAAE,IAAI,IAAIM,CAAC,EAAA,CAS5C,CAAA,CACF,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CAAA,CAEF,EAlEAnD,EAAAA,IAAC,MAAA,CAAI,UAAU,WAAW,SAAA,mCAAA,CAAiC,CAkE3D,CAEF,CAAA,EACD,SACCG,EAAA,CACA,SAAA,CAAAH,MAACI,EAAA,CACA,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAL,EAAAA,IAACM,GAAU,SAAA,mCAAA,CAAiC,EAC3CyB,GAAO,QACP/B,EAAAA,IAACO,EAAA,CAAM,QAAQ,UAAU,SAAA,QAAA,CAAM,EAE/BP,EAAAA,IAACO,EAAA,CAAM,QAAQ,SAAS,SAAA,KAAA,CAAG,CAAA,CAAA,CAE7B,CAAA,CACD,EACAP,EAAAA,IAACQ,EAAA,CACC,SAACuB,GAAO,QAGR/B,EAAAA,IAAC,OAAI,UAAU,wCACd,SAAAA,EAAAA,IAACH,EAAA,CAAO,MAAM,iBAAiB,MAAO,OAAOkC,EAAM,aAAa,CAAA,CAAG,CAAA,CACpE,QAJC,MAAA,CAAI,UAAU,WAAW,SAAA,2CAAA,CAAyC,CAInE,CAEF,CAAA,EACD,SACC5B,EAAA,CACA,SAAA,CAAAH,MAACI,EAAA,CACA,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAL,EAAAA,IAACM,GAAU,SAAA,yBAAA,CAAuB,EACjC2B,GAAQ,QACRjC,EAAAA,IAACO,EAAA,CAAM,QAAQ,UAAU,SAAA,QAAA,CAAM,EAE/BP,EAAAA,IAACO,EAAA,CAAM,QAAQ,SAAS,SAAA,KAAA,CAAG,CAAA,CAAA,CAE9B,CAAA,CACA,EACAP,EAAAA,IAACQ,EAAA,CACC,SAACyB,GAAQ,QAGT5B,OAAAI,EAAAA,SAAA,CACC,SAAA,CAAAJ,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACd,SAAA,CAAAL,MAACH,GAAO,MAAM,kBAAkB,MAAO,OAAOoC,EAAO,aAAa,EAAG,EACrEjC,MAACH,GAAO,MAAM,eAAe,MAAO,OAAOoC,EAAO,UAAU,EAAG,EAC/DjC,MAACH,GAAO,MAAM,aAAa,MAAO,OAAOoC,EAAO,SAAS,EAAG,EAC5DjC,MAACH,GAAO,MAAM,kBAAkB,MAAO,OAAOoC,EAAO,kBAAkB,CAAA,CAAG,CAAA,EAC3E,EACAjC,EAAAA,IAAC,MAAA,CAAI,UAAU,qCAAqC,SAAA,iEAAA,CAEpD,CAAA,CAAA,CACD,EAZAA,EAAAA,IAAC,MAAA,CAAI,UAAU,WAAW,SAAA,uCAAA,CAAqC,CAY/D,CAEF,CAAA,EACD,SACCG,EAAA,CACA,SAAA,CAAAH,MAACI,EAAA,CACA,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAL,EAAAA,IAACM,GAAU,SAAA,gCAAA,CAA8B,EACxC6B,GAAa,QACbnC,EAAAA,IAACO,EAAA,CAAM,QAAQ,UAAU,SAAA,QAAA,CAAM,EAE/BP,EAAAA,IAACO,EAAA,CAAM,QAAQ,SAAS,SAAA,KAAA,CAAG,CAAA,CAAA,CAE7B,CAAA,CACD,EACAP,EAAAA,IAACQ,EAAA,CACC,SAAC2B,GAAa,QAGd9B,OAAAI,EAAAA,SAAA,CACC,SAAA,CAAAJ,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACd,SAAA,CAAAL,MAACH,GAAO,MAAM,mBAAmB,MAAO,OAAOsC,EAAY,eAAe,EAAG,EAC7EnC,MAACH,GAAO,MAAM,qBAAqB,MAAO,OAAOsC,EAAY,iBAAiB,EAAG,EACjFnC,MAACH,GAAO,MAAM,YAAY,MAAO,OAAOsC,EAAY,cAAc,EAAG,EACrEnC,MAACH,GAAO,MAAM,cAAc,MAAO,OAAOsC,EAAY,gBAAgB,EAAG,EACzEnC,MAACH,GAAO,MAAM,aAAa,MAAO,OAAOsC,EAAY,SAAS,EAAG,EACjEnC,MAACH,GAAO,MAAM,aAAa,MAAO,OAAOsC,EAAY,SAAS,CAAA,CAAG,CAAA,EAClE,EACAnC,EAAAA,IAAC,MAAA,CAAI,UAAU,qCAAqC,SAAA,yEAAA,CAEpD,CAAA,CAAA,CACD,EAdAA,EAAAA,IAAC,MAAA,CAAI,UAAU,WAAW,SAAA,8CAAA,CAA4C,CActE,CAEF,CAAA,EACD,EACAA,EAAAA,IAACW,GAAA,CAAsB,KAAM0B,CAAA,CAAO,EACpCrC,EAAAA,IAACC,EAAA,CAAuB,KAAMsC,CAAA,CAAQ,EACtCvC,EAAAA,IAACU,EAAA,CAAwB,KAAM+B,CAAA,CAAS,SACvCtC,EAAA,CACA,SAAA,CAAAH,MAACI,EAAA,CACA,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAL,EAAAA,IAACM,GAAU,SAAA,0BAAA,CAAwB,EAClCqB,GAAQ,QACR3B,EAAAA,IAACO,EAAA,CAAM,QAAQ,UAAU,SAAA,QAAA,CAAM,EAE/BP,EAAAA,IAACO,EAAA,CAAM,QAAQ,SAAS,SAAA,KAAA,CAAG,CAAA,CAAA,CAE7B,CAAA,CACD,EACAP,EAAAA,IAACQ,EAAA,CACC,SAACmB,GAAQ,QAGTtB,OAAAI,EAAAA,SAAA,CACC,SAAA,CAAAJ,EAAAA,KAAC,MAAA,CAAI,UAAU,6CACd,SAAA,CAAAL,EAAAA,IAACH,EAAA,CAAO,MAAM,UAAU,MAAO8B,EAAO,QAAS,QAC9C9B,EAAA,CAAO,MAAM,aAAa,MAAO8B,EAAO,UAAW,EACpD3B,MAACH,GAAO,MAAM,cAAc,MAAO,OAAO8B,EAAO,KAAK,CAAA,CAAG,CAAA,EAC1D,EACCA,EAAO,YAAY,SAAW,EAC9B3B,EAAAA,IAAC,OAAI,UAAU,WAAW,SAAA,0BAAA,CAAwB,QAEjD,MAAA,CAAI,UAAU,2BACd,SAAAK,OAAC,QAAA,CAAM,UAAU,2BAChB,SAAA,CAAAL,MAAC,QAAA,CACA,SAAAK,EAAAA,KAAC,KAAA,CAAG,UAAU,kDACb,SAAA,CAAAL,EAAAA,IAAC,KAAA,CAAG,UAAU,YAAY,SAAA,MAAG,EAC7BA,EAAAA,IAAC,KAAA,CAAG,UAAU,YAAY,SAAA,UAAO,EACjCA,EAAAA,IAAC,KAAA,CAAG,UAAU,YAAY,SAAA,OAAI,EAC9BA,EAAAA,IAAC,KAAA,CAAG,UAAU,YAAY,SAAA,WAAQ,EAClCA,EAAAA,IAAC,KAAA,CAAG,UAAU,OAAO,SAAA,QAAA,CAAM,CAAA,CAAA,CAC5B,CAAA,CACD,QACC,QAAA,CACC,SAAA2B,EAAO,YAAY,IAAK0B,GACxBhD,EAAAA,KAAC,KAAA,CAEA,UAAU,4BAEV,SAAA,CAAAL,EAAAA,IAAC,KAAA,CAAG,UAAU,sBAAuB,SAAAqD,EAAE,IAAI,EAC3CrD,EAAAA,IAAC,KAAA,CAAG,UAAU,sBAAuB,WAAE,QAAQ,EAC/CA,EAAAA,IAAC,KAAA,CAAG,UAAU,YAAa,WAAE,KAAK,QACjC,KAAA,CAAG,UAAU,sBACZ,SAAAqD,EAAE,YAAc,IAClB,EACArD,EAAAA,IAAC,KAAA,CAAG,UAAU,yDACZ,WAAE,MAAA,CACJ,CAAA,CAAA,EAXK,GAAGqD,EAAE,GAAG,IAAIA,EAAE,OAAO,EAAA,CAa3B,CAAA,CACF,CAAA,CAAA,CACD,CAAA,CACD,CAAA,CAAA,CAEF,EA3CArD,EAAAA,IAAC,MAAA,CAAI,UAAU,WAAW,SAAA,6BAAA,CAA2B,CA2CrD,CAEF,CAAA,CAAA,CACD,CAAA,EACD,CAEF"}