pi-mega-compact 0.20.0 → 0.20.2

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 (111) hide show
  1. package/dist/config/vector-cortex.js +25 -0
  2. package/dist/config.js +1 -1
  3. package/dist/extensions/dashboard-server/routes-rag-settings-helpers.js +2 -0
  4. package/dist/extensions/dashboard-server/routes-vector-cortex-reconstruct.js +33 -0
  5. package/dist/extensions/dashboard-server/routes-vector-cortex-residual.js +51 -0
  6. package/dist/extensions/dashboard-server/routes-vector-cortex.js +2 -0
  7. package/dist/extensions/dashboard-server/routes.js +1 -1
  8. package/dist/extensions/dashboard-server/server.js +5 -1
  9. package/dist/src/config/vector-cortex.js +25 -0
  10. package/dist/src/config.js +1 -1
  11. package/dist/src/vector-cortex/reconstruct/_acceptance-helpers.js +365 -0
  12. package/dist/src/vector-cortex/reconstruct/assemble.js +137 -0
  13. package/dist/src/vector-cortex/reconstruct/closure.js +268 -0
  14. package/dist/src/vector-cortex/reconstruct/types.js +46 -0
  15. package/dist/src/vector-cortex/reconstruct/validate.js +152 -0
  16. package/dist/src/vector-cortex/residual/codec.js +224 -0
  17. package/dist/src/vector-cortex/residual/dct.js +158 -0
  18. package/dist/src/vector-cortex/residual/fixture-payload.js +77 -0
  19. package/dist/src/vector-cortex/residual/gf256.js +182 -0
  20. package/dist/src/vector-cortex/residual/parity.js +245 -0
  21. package/dist/src/vector-cortex/residual/quantize.js +200 -0
  22. package/dist/src/vector-cortex/residual/stream.js +124 -0
  23. package/dist/src/vector-cortex/residual/types.js +55 -0
  24. package/dist/vector-cortex/reconstruct/_acceptance-helpers.js +365 -0
  25. package/dist/vector-cortex/reconstruct/assemble.js +137 -0
  26. package/dist/vector-cortex/reconstruct/closure.js +268 -0
  27. package/dist/vector-cortex/reconstruct/types.js +46 -0
  28. package/dist/vector-cortex/reconstruct/validate.js +152 -0
  29. package/dist/vector-cortex/residual/codec.js +224 -0
  30. package/dist/vector-cortex/residual/dct.js +158 -0
  31. package/dist/vector-cortex/residual/fixture-payload.js +77 -0
  32. package/dist/vector-cortex/residual/gf256.js +182 -0
  33. package/dist/vector-cortex/residual/parity.js +245 -0
  34. package/dist/vector-cortex/residual/quantize.js +200 -0
  35. package/dist/vector-cortex/residual/stream.js +124 -0
  36. package/dist/vector-cortex/residual/types.js +55 -0
  37. package/extensions/dashboard-client/dist/assets/{AreaChart-n4z5w9Ox.js → AreaChart-XF3jPpvn.js} +2 -2
  38. package/extensions/dashboard-client/dist/assets/{AreaChart-n4z5w9Ox.js.map → AreaChart-XF3jPpvn.js.map} +1 -1
  39. package/extensions/dashboard-client/dist/assets/{BarChart-BLGjWWBr.js → BarChart-DnYYn0GF.js} +2 -2
  40. package/extensions/dashboard-client/dist/assets/{BarChart-BLGjWWBr.js.map → BarChart-DnYYn0GF.js.map} +1 -1
  41. package/extensions/dashboard-client/dist/assets/{CacheTab-CAnrKKVK.js → CacheTab-D3bVskCL.js} +2 -2
  42. package/extensions/dashboard-client/dist/assets/{CacheTab-CAnrKKVK.js.map → CacheTab-D3bVskCL.js.map} +1 -1
  43. package/extensions/dashboard-client/dist/assets/{EventsTab-D-GL7Ngq.js → EventsTab-CX_8myfc.js} +2 -2
  44. package/extensions/dashboard-client/dist/assets/{EventsTab-D-GL7Ngq.js.map → EventsTab-CX_8myfc.js.map} +1 -1
  45. package/extensions/dashboard-client/dist/assets/{HealthTab-C4x5qQ8s.js → HealthTab-CnVzBQvN.js} +2 -2
  46. package/extensions/dashboard-client/dist/assets/{HealthTab-C4x5qQ8s.js.map → HealthTab-CnVzBQvN.js.map} +1 -1
  47. package/extensions/dashboard-client/dist/assets/{MaintenanceTab-BSPs0eq5.js → MaintenanceTab-Cao--dtV.js} +2 -2
  48. package/extensions/dashboard-client/dist/assets/{MaintenanceTab-BSPs0eq5.js.map → MaintenanceTab-Cao--dtV.js.map} +1 -1
  49. package/extensions/dashboard-client/dist/assets/{MemoryMapTab-BWEUtTSu.js → MemoryMapTab-DZdI-9ig.js} +2 -2
  50. package/extensions/dashboard-client/dist/assets/{MemoryMapTab-BWEUtTSu.js.map → MemoryMapTab-DZdI-9ig.js.map} +1 -1
  51. package/extensions/dashboard-client/dist/assets/{MetricsTab-Dhm1c3Cx.js → MetricsTab-SlpSmNU4.js} +2 -2
  52. package/extensions/dashboard-client/dist/assets/{MetricsTab-Dhm1c3Cx.js.map → MetricsTab-SlpSmNU4.js.map} +1 -1
  53. package/extensions/dashboard-client/dist/assets/{OverviewTab-Cm6cySiQ.js → OverviewTab-C_-_4au9.js} +2 -2
  54. package/extensions/dashboard-client/dist/assets/{OverviewTab-Cm6cySiQ.js.map → OverviewTab-C_-_4au9.js.map} +1 -1
  55. package/extensions/dashboard-client/dist/assets/{ReposTab-DxLN1N4K.js → ReposTab-CyWedWZC.js} +2 -2
  56. package/extensions/dashboard-client/dist/assets/{ReposTab-DxLN1N4K.js.map → ReposTab-CyWedWZC.js.map} +1 -1
  57. package/extensions/dashboard-client/dist/assets/{SessionsTab-CZuI4ISW.js → SessionsTab-wqPBMIJZ.js} +2 -2
  58. package/extensions/dashboard-client/dist/assets/{SessionsTab-CZuI4ISW.js.map → SessionsTab-wqPBMIJZ.js.map} +1 -1
  59. package/extensions/dashboard-client/dist/assets/{SetupTab-C_0VOomm.js → SetupTab-MojXmuUf.js} +2 -2
  60. package/extensions/dashboard-client/dist/assets/{SetupTab-C_0VOomm.js.map → SetupTab-MojXmuUf.js.map} +1 -1
  61. package/extensions/dashboard-client/dist/assets/{TimeSavedCard-BhbaRLmi.js → TimeSavedCard-BxcplEOJ.js} +2 -2
  62. package/extensions/dashboard-client/dist/assets/{TimeSavedCard-BhbaRLmi.js.map → TimeSavedCard-BxcplEOJ.js.map} +1 -1
  63. package/extensions/dashboard-client/dist/assets/{TurnsTab-CXJmbjje.js → TurnsTab-D8_qWbjY.js} +2 -2
  64. package/extensions/dashboard-client/dist/assets/{TurnsTab-CXJmbjje.js.map → TurnsTab-D8_qWbjY.js.map} +1 -1
  65. package/extensions/dashboard-client/dist/assets/VectorCortexTab-B3yisAyB.js +2 -0
  66. package/extensions/dashboard-client/dist/assets/VectorCortexTab-B3yisAyB.js.map +1 -0
  67. package/extensions/dashboard-client/dist/assets/{WikiTab-C5uvMCzp.js → WikiTab-Cfd-QZYz.js} +2 -2
  68. package/extensions/dashboard-client/dist/assets/{WikiTab-C5uvMCzp.js.map → WikiTab-Cfd-QZYz.js.map} +1 -1
  69. package/extensions/dashboard-client/dist/assets/{button-Cl_fxJcg.js → button-tX5ht0bb.js} +2 -2
  70. package/extensions/dashboard-client/dist/assets/{button-Cl_fxJcg.js.map → button-tX5ht0bb.js.map} +1 -1
  71. package/extensions/dashboard-client/dist/assets/{card-BH8Le5YM.js → card-BT3Z5dDg.js} +2 -2
  72. package/extensions/dashboard-client/dist/assets/{card-BH8Le5YM.js.map → card-BT3Z5dDg.js.map} +1 -1
  73. package/extensions/dashboard-client/dist/assets/{generateCategoricalChart-sZ6ZNtBi.js → generateCategoricalChart-B6p2WnkY.js} +2 -2
  74. package/extensions/dashboard-client/dist/assets/{generateCategoricalChart-sZ6ZNtBi.js.map → generateCategoricalChart-B6p2WnkY.js.map} +1 -1
  75. package/extensions/dashboard-client/dist/assets/{index-CX9zv8cJ.js → index-CFLekP12.js} +3 -3
  76. package/extensions/dashboard-client/dist/assets/{index-CX9zv8cJ.js.map → index-CFLekP12.js.map} +1 -1
  77. package/extensions/dashboard-client/dist/assets/{switch-CXJhcjhM.js → switch-B52oAMSw.js} +2 -2
  78. package/extensions/dashboard-client/dist/assets/{switch-CXJhcjhM.js.map → switch-B52oAMSw.js.map} +1 -1
  79. package/extensions/dashboard-client/dist/assets/{toggle-CoLtIc6y.js → toggle-VxxVc5Tp.js} +2 -2
  80. package/extensions/dashboard-client/dist/assets/{toggle-CoLtIc6y.js.map → toggle-VxxVc5Tp.js.map} +1 -1
  81. package/extensions/dashboard-client/dist/assets/{useSSE-fSXho606.js → useSSE-DAVdZnG7.js} +2 -2
  82. package/extensions/dashboard-client/dist/assets/{useSSE-fSXho606.js.map → useSSE-DAVdZnG7.js.map} +1 -1
  83. package/extensions/dashboard-client/dist/index.html +1 -1
  84. package/extensions/dashboard-client/src/api/vector-cortex.ts +9 -0
  85. package/extensions/dashboard-client/src/tabs/VectorCortexTab.tsx +37 -0
  86. package/extensions/dashboard-client/src/types/vector-cortex.ts +16 -0
  87. package/extensions/dashboard-server/api-contracts/vector-cortex.ts +57 -0
  88. package/extensions/dashboard-server/routes-rag-settings-helpers.ts +12 -0
  89. package/extensions/dashboard-server/routes-vector-cortex-reconstruct.ts +41 -0
  90. package/extensions/dashboard-server/routes-vector-cortex-residual.ts +60 -0
  91. package/extensions/dashboard-server/routes-vector-cortex.ts +2 -0
  92. package/extensions/dashboard-server/routes.ts +2 -0
  93. package/extensions/dashboard-server/server.ts +4 -0
  94. package/package.json +1 -1
  95. package/src/config/vector-cortex.ts +27 -0
  96. package/src/config.ts +2 -0
  97. package/src/vector-cortex/reconstruct/_acceptance-helpers.ts +455 -0
  98. package/src/vector-cortex/reconstruct/assemble.ts +170 -0
  99. package/src/vector-cortex/reconstruct/closure.ts +299 -0
  100. package/src/vector-cortex/reconstruct/types.ts +330 -0
  101. package/src/vector-cortex/reconstruct/validate.ts +184 -0
  102. package/src/vector-cortex/residual/codec.ts +292 -0
  103. package/src/vector-cortex/residual/dct.ts +166 -0
  104. package/src/vector-cortex/residual/fixture-payload.ts +90 -0
  105. package/src/vector-cortex/residual/gf256.ts +196 -0
  106. package/src/vector-cortex/residual/parity.ts +283 -0
  107. package/src/vector-cortex/residual/quantize.ts +230 -0
  108. package/src/vector-cortex/residual/stream.ts +135 -0
  109. package/src/vector-cortex/residual/types.ts +236 -0
  110. package/extensions/dashboard-client/dist/assets/VectorCortexTab-BGe9hu3r.js +0 -2
  111. package/extensions/dashboard-client/dist/assets/VectorCortexTab-BGe9hu3r.js.map +0 -1
@@ -0,0 +1,135 @@
1
+ /**
2
+ * vector-cortex/residual/stream.ts — canonical PROTECTED STREAM serialization
3
+ * for the VC4B residual codec.
4
+ *
5
+ * The protected stream is `header + all block scales/coefficient arrays +
6
+ * corrections` (RESIDUAL_CODEC §erasure parity), serialized in exactly this
7
+ * canonical order so encode and decode are byte-symmetric:
8
+ *
9
+ * header (46 bytes) magic `VCR1` | u32 LE originalLength | 32-byte SHA-256
10
+ * | u16 LE blockSize | u16 LE k | u16 LE m
11
+ * blocks for each block in ascending index:
12
+ * float32 LE scale | 4096 * int16 LE coefficient
13
+ * corrections varint blockCount, then per non-empty block
14
+ * u32 LE blockIndex | varint count
15
+ * | count * (u16 LE offset, u8 original)
16
+ *
17
+ * Pure serialization: no storage, no console, no network (PREVENT-PI-004 /
18
+ * PREVENT-011).
19
+ */
20
+
21
+ import {
22
+ parseCorrections,
23
+ serializeCorrections,
24
+ } from "./quantize.js";
25
+ import {
26
+ RESIDUAL_BLOCK_SIZE,
27
+ RESIDUAL_HEADER_BYTES,
28
+ RESIDUAL_MAGIC,
29
+ RS_DATA_SHARDS,
30
+ RS_PARITY_SHARDS,
31
+ type QuantizedBlockV1,
32
+ type ResidualCodecV1,
33
+ type ResidualHeaderV1,
34
+ } from "./types.js";
35
+
36
+ /** Per-block serialized size: float32 scale + n int16 coefficients. */
37
+ export function blockBytes(blockSize: number = RESIDUAL_BLOCK_SIZE): number {
38
+ return 4 + blockSize * 2;
39
+ }
40
+
41
+ /** Serialize the canonical 46-byte header. */
42
+ export function serializeHeader(header: ResidualHeaderV1): Uint8Array {
43
+ const out = new Uint8Array(RESIDUAL_HEADER_BYTES);
44
+ const view = new DataView(out.buffer);
45
+ for (let i = 0; i < 4; i++) out[i] = RESIDUAL_MAGIC.charCodeAt(i);
46
+ view.setUint32(4, header.originalLength, true);
47
+ const digest = Buffer.from(header.payloadDigest, "hex");
48
+ out.set(digest.subarray(0, 32), 8);
49
+ view.setUint16(40, header.blockSize, true);
50
+ view.setUint16(42, header.dataShards, true);
51
+ view.setUint16(44, header.parityShards, true);
52
+ return out;
53
+ }
54
+
55
+ /** Parse the canonical header. Returns null on magic/geometry mismatch. */
56
+ export function parseHeader(bytes: Uint8Array): ResidualHeaderV1 | null {
57
+ if (bytes.length < RESIDUAL_HEADER_BYTES) return null;
58
+ for (let i = 0; i < 4; i++) {
59
+ if (bytes[i] !== RESIDUAL_MAGIC.charCodeAt(i)) return null;
60
+ }
61
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
62
+ const originalLength = view.getUint32(4, true);
63
+ const payloadDigest = Buffer.from(bytes.subarray(8, 40)).toString("hex");
64
+ const blockSize = view.getUint16(40, true);
65
+ const dataShards = view.getUint16(42, true);
66
+ const parityShards = view.getUint16(44, true);
67
+ if (blockSize !== RESIDUAL_BLOCK_SIZE) return null;
68
+ if (dataShards !== RS_DATA_SHARDS || parityShards !== RS_PARITY_SHARDS) return null;
69
+ return {
70
+ magic: RESIDUAL_MAGIC,
71
+ originalLength,
72
+ payloadDigest,
73
+ blockSize: RESIDUAL_BLOCK_SIZE,
74
+ dataShards: RS_DATA_SHARDS,
75
+ parityShards: RS_PARITY_SHARDS,
76
+ };
77
+ }
78
+
79
+ /** Serialize the full protected stream for one encoded artifact. */
80
+ export function serializeStream(codec: ResidualCodecV1): Uint8Array {
81
+ const head = serializeHeader(codec.header);
82
+ const perBlock = blockBytes(codec.header.blockSize);
83
+ const corrections = serializeCorrections(codec.corrections);
84
+ const out = new Uint8Array(
85
+ head.length + codec.blocks.length * perBlock + corrections.length,
86
+ );
87
+ out.set(head, 0);
88
+ const view = new DataView(out.buffer);
89
+ let pos = head.length;
90
+ for (const block of codec.blocks) {
91
+ view.setFloat32(pos, block.scale, true);
92
+ pos += 4;
93
+ for (let i = 0; i < block.coefficients.length; i++) {
94
+ view.setInt16(pos, block.coefficients[i]!, true);
95
+ pos += 2;
96
+ }
97
+ }
98
+ out.set(corrections, pos);
99
+ return out;
100
+ }
101
+
102
+ /** Parse a protected stream back into the codec artifact. Null on malformed. */
103
+ export function parseStream(stream: Uint8Array): ResidualCodecV1 | null {
104
+ const header = parseHeader(stream);
105
+ if (!header) return null;
106
+ const perBlock = blockBytes(header.blockSize);
107
+ const blockCount = Math.ceil(header.originalLength / header.blockSize);
108
+ const bodyEnd = RESIDUAL_HEADER_BYTES + blockCount * perBlock;
109
+ if (stream.length < bodyEnd) return null;
110
+ const view = new DataView(stream.buffer, stream.byteOffset, stream.byteLength);
111
+ const blocks: QuantizedBlockV1[] = [];
112
+ let pos = RESIDUAL_HEADER_BYTES;
113
+ for (let b = 0; b < blockCount; b++) {
114
+ const scale = view.getFloat32(pos, true);
115
+ pos += 4;
116
+ const coefficients = new Int16Array(header.blockSize);
117
+ for (let i = 0; i < header.blockSize; i++) {
118
+ coefficients[i] = view.getInt16(pos, true);
119
+ pos += 2;
120
+ }
121
+ blocks.push({ scale, coefficients });
122
+ }
123
+ const parsed = parseCorrections(stream, pos);
124
+ if (!parsed) return null;
125
+ // Every correction must name a block that exists.
126
+ for (const block of parsed.blocks) {
127
+ if (block.blockIndex >= blockCount) return null;
128
+ }
129
+ return {
130
+ schema: "residual-codec-v1",
131
+ header,
132
+ blocks,
133
+ corrections: parsed.blocks,
134
+ };
135
+ }
@@ -0,0 +1,236 @@
1
+ /**
2
+ * vector-cortex/residual/types.ts — reversible residual payload codec (VC4B).
3
+ *
4
+ * Owns `ResidualCodecV1` / `ParityShardV1` — the contract of the sprint failure
5
+ * triad:
6
+ *
7
+ * A = admitted residual (DCT + int16 + exact corrections) + RS(9,6) parity;
8
+ * B = exact compressed bytes (forced when the >95% accounting rejects A);
9
+ * C = ledger bytes (forced when A/B decode fails).
10
+ *
11
+ * Semantic vectors NEVER claim to recover exact text. Exact bytes come only from
12
+ * exact payload shards (VC4A `ExactShardV1`) or this REVERSIBLE codec: a block
13
+ * DCT-II analysis, int16 quantization, and a block-scoped exact correction
14
+ * stream that makes post-decode byte error exactly zero for admitted artifacts.
15
+ * Numeric erasure parity protects the codec bytes; it is not a substitute for
16
+ * the exact payload (RESIDUAL_CODEC.md).
17
+ *
18
+ * Consumes only reviewer-accepted predecessor contracts (VC1A EventV2 bytes via
19
+ * VC4A shard ranges) and the common contracts. Pure types + registered
20
+ * conformance IDs: no storage, no console, no network (PREVENT-PI-004 /
21
+ * PREVENT-011).
22
+ */
23
+
24
+ /** Fixed transform block length (RESIDUAL_CODEC §byte scope: 4096). */
25
+ export const RESIDUAL_BLOCK_SIZE = 4096;
26
+
27
+ /** Reed–Solomon shard geometry: k=6 data shards, m=3 parity shards. */
28
+ export const RS_DATA_SHARDS = 6;
29
+ export const RS_PARITY_SHARDS = 3;
30
+ export const RS_TOTAL_SHARDS = RS_DATA_SHARDS + RS_PARITY_SHARDS;
31
+
32
+ /** GF(2^8) primitive polynomial for the parity field (0x11d). */
33
+ export const GF_PRIMITIVE_POLYNOMIAL = 0x11d;
34
+
35
+ /** Header magic bytes `VCR1`. */
36
+ export const RESIDUAL_MAGIC = "VCR1";
37
+
38
+ /**
39
+ * Admission ratio: residual is admitted only when its FULL encoded size is at
40
+ * most `floor(0.95 * exactCompressedSize)` (RESIDUAL_CODEC §admission). The
41
+ * accounting counts every persisted byte — header, scales, coefficients,
42
+ * corrections, shard metadata, all 9 shards, and digests.
43
+ */
44
+ export const ADMISSION_NUMERATOR = 95;
45
+ export const ADMISSION_DENOMINATOR = 100;
46
+
47
+ /**
48
+ * Canonical header of an encoded residual artifact. Serialized (little-endian)
49
+ * as: magic `VCR1` (4 bytes), u32 original length, 32-byte SHA-256 of the
50
+ * ORIGINAL payload, u16 block size, u16 data shard count `k`, u16 parity count
51
+ * `m` — 46 bytes total.
52
+ */
53
+ export interface ResidualHeaderV1 {
54
+ readonly magic: typeof RESIDUAL_MAGIC;
55
+ /** Original (pre-padding) payload length in bytes. */
56
+ readonly originalLength: number;
57
+ /** SHA-256 of the original payload bytes, lowercase hex (64 chars). */
58
+ readonly payloadDigest: string;
59
+ readonly blockSize: typeof RESIDUAL_BLOCK_SIZE;
60
+ readonly dataShards: typeof RS_DATA_SHARDS;
61
+ readonly parityShards: typeof RS_PARITY_SHARDS;
62
+ }
63
+
64
+ /** Serialized header byte length: 4 + 4 + 32 + 2 + 2 + 2. */
65
+ export const RESIDUAL_HEADER_BYTES = 46;
66
+
67
+ /**
68
+ * One transform block's quantized coefficients. `scale` is the per-block float32
69
+ * scale `max(abs(c))/32767` (exactly 0 for an all-zero block); `coefficients`
70
+ * are the int16 quantized DCT-II coefficients in ascending frequency order.
71
+ */
72
+ export interface QuantizedBlockV1 {
73
+ /** Per-block float32 LE scale. Zero for an all-zero coefficient block. */
74
+ readonly scale: number;
75
+ /** Int16 coefficients, length exactly `RESIDUAL_BLOCK_SIZE`. */
76
+ readonly coefficients: Int16Array;
77
+ }
78
+
79
+ /**
80
+ * One exact byte correction inside a block: the reconstruction differed from
81
+ * the original at `offset`, and `original` is the authoritative byte.
82
+ */
83
+ export interface CorrectionV1 {
84
+ /** Offset within the block, 0..4095. */
85
+ readonly offset: number;
86
+ /** The original (authoritative) byte value, 0..255. */
87
+ readonly original: number;
88
+ }
89
+
90
+ /**
91
+ * The block-scoped exact correction stream. Blocks appear in ascending
92
+ * `blockIndex`; each block's corrections are sorted by ascending offset with no
93
+ * duplicate offset. Omitted blocks have an implicit count of zero.
94
+ */
95
+ export interface BlockCorrectionsV1 {
96
+ readonly blockIndex: number;
97
+ readonly corrections: readonly CorrectionV1[];
98
+ }
99
+
100
+ /**
101
+ * A fully encoded residual artifact before shard splitting: the header plus the
102
+ * per-block quantization and the exact correction stream. Serializing this in
103
+ * canonical order produces the PROTECTED STREAM that the parity layer splits.
104
+ */
105
+ export interface ResidualCodecV1 {
106
+ readonly schema: "residual-codec-v1";
107
+ readonly header: ResidualHeaderV1;
108
+ readonly blocks: readonly QuantizedBlockV1[];
109
+ readonly corrections: readonly BlockCorrectionsV1[];
110
+ }
111
+
112
+ /**
113
+ * One Reed–Solomon shard over the protected stream. Shards 0..5 are the
114
+ * systematic data shards (the protected stream split into `k=6` equal,
115
+ * zero-padded pieces); shards 6..8 are the parity shards, in that order. Every
116
+ * shard carries its own SHA-256 so an unknown corruption is DETECTED (and can
117
+ * then be marked as a known erasure) even though it is never blindly corrected.
118
+ */
119
+ export interface ParityShardV1 {
120
+ readonly schema: "parity-shard-v1";
121
+ /** Shard index 0..8 (0..5 data, 6..8 parity). */
122
+ readonly index: number;
123
+ readonly kind: "data" | "parity";
124
+ /** Shard payload bytes; every shard has the same length. */
125
+ readonly bytes: Uint8Array;
126
+ /** SHA-256 of `bytes`, lowercase hex. */
127
+ readonly digest: string;
128
+ /** Length of the UNPADDED protected stream (needed to truncate on recovery). */
129
+ readonly streamLength: number;
130
+ }
131
+
132
+ /** Byte accounting handed forward to VC4C (spec §next handoff). */
133
+ export interface ResidualAccountingV1 {
134
+ /** Every persisted residual byte: header + scales + coefficients + corrections + shards + digests. */
135
+ readonly encodedSize: number;
136
+ /** Size of the competing exact compressed representation. */
137
+ readonly exactCompressedSize: number;
138
+ /** `floor(0.95 * exactCompressedSize)` — the inclusive admission ceiling. */
139
+ readonly admissionCeiling: number;
140
+ /** Number of correction entries across every block (density numerator). */
141
+ readonly correctionCount: number;
142
+ /** Number of transform blocks. */
143
+ readonly blockCount: number;
144
+ }
145
+
146
+ /** Failure codes the residual codec / parity layer can return. */
147
+ export type ResidualFailureCode =
148
+ | "RES_QUANTIZE_RANGE"
149
+ | "RES_TOO_MANY_ERASURES"
150
+ | "RES_DUPLICATE_SHARD_INDEX"
151
+ | "RES_SHARD_DIGEST_MISMATCH"
152
+ | "RES_SHARD_LENGTH_MISMATCH"
153
+ | "RES_SINGULAR_MATRIX"
154
+ | "RES_PAYLOAD_DIGEST_MISMATCH"
155
+ | "RES_HEADER_INVALID"
156
+ | "RES_CORRECTION_DUPLICATE_OFFSET"
157
+ | "RES_CORRECTION_RANGE"
158
+ | "RES_NOT_ADMITTED";
159
+
160
+ /** Encode result: an admitted artifact, or the exact reason it was not admitted. */
161
+ export type ResidualEncodeResult =
162
+ | {
163
+ ok: true;
164
+ /** Mode A: the residual was admitted. */
165
+ admitted: true;
166
+ codec: ResidualCodecV1;
167
+ shards: readonly ParityShardV1[];
168
+ accounting: ResidualAccountingV1;
169
+ }
170
+ | {
171
+ ok: true;
172
+ /** Mode B: encode succeeded but accounting rejected it; store exact bytes. */
173
+ admitted: false;
174
+ code: "RES_NOT_ADMITTED";
175
+ accounting: ResidualAccountingV1;
176
+ }
177
+ | { ok: false; code: ResidualFailureCode };
178
+
179
+ /** Decode result: the exact original bytes, or the exact failure code. */
180
+ export type ResidualDecodeResult =
181
+ | { ok: true; bytes: Uint8Array }
182
+ | { ok: false; code: ResidualFailureCode };
183
+
184
+ /** Parity reconstruction result over a (possibly partial) shard set. */
185
+ export type ParityRecoveryResult =
186
+ | { ok: true; stream: Uint8Array; recoveredIndices: readonly number[] }
187
+ | { ok: false; code: ResidualFailureCode };
188
+
189
+ /** The two structured events the VC4B reporter emits. */
190
+ export type ResidualEventName =
191
+ | "vector_cortex_residual_admitted"
192
+ | "vector_cortex_parity_recovery_failed";
193
+
194
+ /** Injected emit callback — same (event, fields) shape as the other VC seams. */
195
+ export type ResidualEmitter = (
196
+ event: ResidualEventName,
197
+ fields: Record<string, unknown>,
198
+ ) => void;
199
+
200
+ /** Typed, best-effort reporter bound to the two residual event names. */
201
+ export interface ResidualReporter {
202
+ readonly residualAdmitted: (fields: Record<string, unknown>) => void;
203
+ readonly parityRecoveryFailed: (fields: Record<string, unknown>) => void;
204
+ }
205
+
206
+ /**
207
+ * Aggregate-only residual metrics exposed to the dashboard. NEVER payload:
208
+ * counts, byte totals and ratios only (SECURITY_PRIVACY — the exact ledger is
209
+ * not training data and residual payloads are never rendered).
210
+ */
211
+ export interface ResidualMetricsV1 {
212
+ readonly encodeAttempts: number;
213
+ readonly admittedCount: number;
214
+ readonly rejectedCount: number;
215
+ readonly recoveryFailures: number;
216
+ readonly encodedByteTotal: number;
217
+ readonly exactByteTotal: number;
218
+ }
219
+
220
+ /**
221
+ * Registered RES conformance ID range (RES-001..050). The acceptance test reads
222
+ * these rows from the v2 manifest and asserts each returns its manifest
223
+ * `ok`/`code`. The three named assertions (RES-DCT-001 / RES-RS-002 /
224
+ * RES-ADMIT-003) live alongside them.
225
+ */
226
+ export const RES_IDS: readonly string[] = Array.from(
227
+ { length: 50 },
228
+ (_v, i) => `RES-${String(i + 1).padStart(3, "0")}`,
229
+ );
230
+
231
+ /** Named RES conformance assertions (the sprint's headline rows). */
232
+ export const RES_NAMED_IDS = [
233
+ "RES-DCT-001",
234
+ "RES-RS-002",
235
+ "RES-ADMIT-003",
236
+ ] as const;
@@ -1,2 +0,0 @@
1
- import{r as c,j as e,B as o}from"./index-CX9zv8cJ.js";import{C as i,a as x,b as h,c as m}from"./card-BH8Le5YM.js";async function D(){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 I(){const s=await fetch("/api/vector-cortex/topology");if(!s.ok)throw new Error(`vector-cortex topology: ${s.status}`);return s.json()}async function R(){const s=await fetch("/api/vector-cortex/query");if(!s.ok)throw new Error(`vector-cortex query: ${s.status}`);return s.json()}async function B(){const s=await fetch("/api/vector-cortex/shards");if(!s.ok)throw new Error(`vector-cortex shards: ${s.status}`);return s.json()}async function O(s="default"){const n=await fetch(`/api/vector-cortex/ledger?session=${encodeURIComponent(s)}`);if(!n.ok)throw new Error(`vector-cortex ledger: ${n.status}`);return n.json()}async function L(s){const n=await fetch("/api/vector-cortex/breakers/reset",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({subsystem:s})});if(!n.ok)throw new Error(`vector-cortex reset: ${n.status}`);return n.json()}function f({mode:s,count:n}){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:n})]})}function r({label:s,value:n}){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:n})]})}function P(){const[s,n]=c.useState(null),[p,S]=c.useState(null),[E,V]=c.useState(!0),[a,b]=c.useState(null),[y,N]=c.useState(null),[d,$]=c.useState(null),[l,F]=c.useState(null),[g,k]=c.useState(null),[u,M]=c.useState(null),v=c.useCallback(()=>{D().then(n).catch(t=>S(t instanceof Error?t.message:String(t))).finally(()=>V(!1)),w().then(b).catch(()=>{}),O().then($).catch(()=>{}),I().then(F).catch(()=>{}),R().then(k).catch(()=>{}),B().then(M).catch(()=>{})},[]);c.useEffect(()=>{v();const t=setInterval(v,5e3);return()=>clearInterval(t)},[v]);const T=()=>{L("provider").then(t=>(N(`Breaker "${t.subsystem}" ${t.state}; evidence retained: ${t.failures} failures / ${t.attempts} attempts`),w())).then(b).catch(t=>N(t instanceof Error?t.message:String(t)))};if(E&&!s)return e.jsx("div",{className:"vc-loading",children:"Loading vector-cortex evaluation…"});if(p&&!s)return e.jsxs("div",{className:"vc-error",children:["Error: ",p]});if(!s)return e.jsx("div",{className:"vc-empty",children:"No evaluation data available."});const C=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(o,{variant:"warning",children:"OBSERVER PENDING (A)"}):e.jsx(o,{variant:"danger",children:"MODE C (OFF)"})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:[e.jsxs(i,{children:[e.jsx(x,{children:e.jsx(h,{children:"Samples"})}),e.jsxs(m,{children:[e.jsx("div",{className:"text-3xl font-bold",children:s.samples}),e.jsxs("div",{className:"mt-2 flex flex-col",children:[e.jsx(f,{mode:"A",count:s.byMode.A}),e.jsx(f,{mode:"B",count:s.byMode.B}),e.jsx(f,{mode:"C",count:s.byMode.C})]})]})]}),e.jsxs(i,{className:"md:col-span-2",children:[e.jsx(x,{children:e.jsx(h,{children:"Latency Histogram (ms, inclusive edges)"})}),e.jsxs(m,{children:[e.jsxs("div",{className:"flex items-end gap-2",style:{height:160},children:[s.histogram.edges.map((t,j)=>{const A=s.histogram.cells[j]/C*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[j]}),e.jsx("div",{className:"w-full rounded-t",style:{height:Math.max(2,A),background:"#6366f1"}}),e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["≤",t]})]},t)}),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/C*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(i,{children:[e.jsx(x,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(h,{children:"Live Safety Envelope (VC0C)"}),e.jsxs("div",{className:"flex items-center gap-2",children:[a?.stateSource==="ephemeral"&&e.jsx(o,{variant:"outline",children:"EPHEMERAL (non-live)"}),e.jsx("button",{onClick:T,disabled:!a?.enabled,className:"rounded border border-border px-2 py-1 text-xs disabled:opacity-50",children:"Reset Cooldown"})]})]})}),e.jsxs(m,{children:[y&&e.jsx("div",{className:"mb-2 text-xs text-muted-foreground",children:y}),a?e.jsxs("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-4",children:[e.jsx(r,{label:"State",value:a.state}),e.jsx(r,{label:"Mode",value:a.mode}),e.jsx(r,{label:"Window",value:`${a.windowMs}ms`}),e.jsx(r,{label:"Probes",value:String(a.probeCount)}),e.jsx(r,{label:"Backoff",value:`${a.backoffDelayMs}ms`}),e.jsx(r,{label:"Failures",value:`${a.failures}/${a.attempts}`}),e.jsx(r,{label:"Frontier",value:a.stateSource==="ephemeral"?"non-live":a.frontierFrozen?"FROZEN":"LIVE"}),e.jsx(r,{label:"Spool lag",value:String(a.spoolLag)}),e.jsx(r,{label:"Encoder mode",value:a.encoderMode}),e.jsx(r,{label:"Encoder asset",value:a.encoderAssetDigest?a.encoderAssetDigest.slice(0,12):"none"})]}):e.jsx("div",{className:"vc-empty",children:"Health unavailable (VC0C off)."})]})]}),e.jsxs(i,{children:[e.jsx(x,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(h,{children:"Derived Cortex Store (VC3A)"}),l?.enabled?e.jsx(o,{variant:"success",children:"ACTIVE"}):e.jsx(o,{variant:"danger",children:"OFF"})]})}),e.jsx(m,{children:l?.enabled?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-3",children:[e.jsx(r,{label:"Generation",value:l.generationId??"—"}),e.jsx(r,{label:"Ordinal",value:l.ordinal??"—"}),e.jsx(r,{label:"Records",value:String(l.recordCount)}),e.jsx(r,{label:"Frontier (HW)",value:l.sourceHighWater}),e.jsx(r,{label:"Root digest",value:l.rootDigest?l.rootDigest.slice(0,16):"—"}),l.nodes!==void 0&&e.jsxs(e.Fragment,{children:[e.jsx(r,{label:"Nodes",value:String(l.nodes?.length??0)}),e.jsx(r,{label:"Edges",value:String(l.edges?.length??0)}),e.jsx(r,{label:"Graph digest",value:l.generationDigest?l.generationDigest.slice(0,16):"—"})]})]}),l.nodes!==void 0&&(l.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:l.edges?.map((t,j)=>e.jsxs("tr",{className:"border-b border-border/30",children:[e.jsx("td",{className:"py-1 pr-2 font-mono",children:t.source}),e.jsx("td",{className:"py-1 pr-2 font-mono",children:t.target}),e.jsx("td",{className:"py-1 pr-2 font-mono",children:t.head}),e.jsx("td",{className:"py-1 pr-2",children:t.direction}),e.jsx("td",{className:"py-1 font-mono",children:t.score})]},`${t.source}-${t.target}-${t.head}-${j}`))})]})]})]}):e.jsx("div",{className:"vc-empty",children:"Cortex store disabled (VC3A off)."})})]}),e.jsxs(i,{children:[e.jsx(x,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(h,{children:"Topology Query Diagnostics (VC3C)"}),g?.enabled?e.jsx(o,{variant:"success",children:"ACTIVE"}):e.jsx(o,{variant:"danger",children:"OFF"})]})}),e.jsx(m,{children:g?.enabled?e.jsx("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-3",children:e.jsx(r,{label:"Router version",value:String(g.routerVersion)})}):e.jsx("div",{className:"vc-empty",children:"Query diagnostics unavailable (VC3C off)."})})]}),e.jsxs(i,{children:[e.jsx(x,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(h,{children:"Dual-Tier Shards (VC4A)"}),u?.enabled?e.jsx(o,{variant:"success",children:"ACTIVE"}):e.jsx(o,{variant:"danger",children:"OFF"})]})}),e.jsx(m,{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(r,{label:"Semantic shards",value:String(u.semanticCount)}),e.jsx(r,{label:"Exact shards",value:String(u.exactCount)}),e.jsx(r,{label:"Byte total",value:String(u.byteTotal)}),e.jsx(r,{label:"Protected bytes",value:String(u.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(i,{children:[e.jsx(x,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(h,{children:"Occurrence Ledger (VC1B)"}),d?.enabled?e.jsx(o,{variant:"success",children:"ACTIVE"}):e.jsx(o,{variant:"danger",children:"OFF"})]})}),e.jsx(m,{children:d?.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(r,{label:"Session",value:d.session}),e.jsx(r,{label:"High-water",value:d.highWater}),e.jsx(r,{label:"Occurrences",value:String(d.count)})]}),d.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:d.occurrences.map(t=>e.jsxs("tr",{className:"border-b border-border/30",children:[e.jsx("td",{className:"py-1 pr-2 font-mono",children:t.seq}),e.jsx("td",{className:"py-1 pr-2 font-mono",children:t.eventId}),e.jsx("td",{className:"py-1 pr-2",children:t.kind}),e.jsx("td",{className:"py-1 pr-2 font-mono",children:t.toolCallId??"—"}),e.jsx("td",{className:"max-w-[180px] truncate font-mono text-muted-foreground",children:t.digest})]},`${t.seq}-${t.eventId}`))})]})})]}):e.jsx("div",{className:"vc-empty",children:"Ledger disabled (VC1B off)."})})]})]})}export{P as default};
2
- //# sourceMappingURL=VectorCortexTab-BGe9hu3r.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"VectorCortexTab-BGe9hu3r.js","sources":["../../src/api/vector-cortex.ts","../../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\tVectorCortexQueryView,\n\tVectorCortexResetResult,\n\tVectorCortexShardsView,\n\tVectorCortexTopologyView,\n} from \"../types/vector-cortex\";\n\nexport type {\n\tVectorCortexEvaluationSummary,\n\tVectorCortexHealthCard,\n\tVectorCortexLedgerView,\n\tVectorCortexQueryView,\n\tVectorCortexResetResult,\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 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","/**\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\tfetchVectorCortexShards,\n\tfetchVectorCortexTopology,\n\tresetVectorCortexBreaker,\n\ttype VectorCortexEvaluationSummary,\n\ttype VectorCortexHealthCard,\n\ttype VectorCortexLedgerView,\n\ttype VectorCortexQueryView,\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\";\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\nfunction 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\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\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}, []);\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>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","fetchVectorCortexLedger","session","resetVectorCortexBreaker","subsystem","ModeChip","mode","count","jsxs","jsx","Metric","label","value","VectorCortexTab","data","setData","useState","err","setError","loading","setLoading","health","setHealth","resetMsg","setResetMsg","ledger","setLedger","topology","setTopology","query","setQuery","shards","setShards","poll","useCallback","e","useEffect","id","onReset","max","Badge","Card","CardHeader","CardTitle","CardContent","edge","i","h","Fragment","o"],"mappings":"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"}