pi-mega-compact 0.20.6 → 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.
- package/dist/config/vector-cortex.js +12 -0
- package/dist/config.js +1 -1
- package/dist/extensions/dashboard-server/api-contracts/vector-cortex-heal.js +11 -0
- package/dist/extensions/dashboard-server/route-dispatch.js +102 -0
- package/dist/extensions/dashboard-server/routes-rag-settings-helpers.js +3 -32
- package/dist/extensions/dashboard-server/routes-rag-settings-types.js +11 -0
- package/dist/extensions/dashboard-server/routes-rag-settings-vector-cortex.js +44 -0
- package/dist/extensions/dashboard-server/routes-vector-cortex-heal.js +47 -0
- package/dist/extensions/dashboard-server/routes-vector-cortex.js +1 -0
- package/dist/extensions/dashboard-server/routes.js +1 -1
- package/dist/extensions/dashboard-server/server.js +3 -82
- package/dist/src/config/dedup.js +1 -0
- package/dist/src/config/vector-cortex.js +12 -0
- package/dist/src/config.js +1 -1
- package/dist/src/dedup-audit.test-helpers.js +43 -0
- package/dist/src/monitoring.js +9 -0
- package/dist/src/vector-cortex/heal/_acceptance-fixture.js +56 -0
- package/dist/src/vector-cortex/heal/closure-metrics.js +66 -0
- package/dist/src/vector-cortex/heal/closure-opt.js +242 -0
- package/dist/src/vector-cortex/heal/emit.js +69 -0
- package/dist/src/vector-cortex/heal/proof.js +210 -0
- package/dist/src/vector-cortex/heal/types.js +42 -0
- package/dist/src/vectorStore/add-l0.js +108 -0
- package/dist/src/vectorStore/add-l1.js +35 -0
- package/dist/src/vectorStore/add.js +229 -0
- package/dist/src/vectorStore/class.js +15 -291
- package/dist/src/vectorStore/dedup-audit.js +104 -0
- package/dist/src/vectorStore.js +1 -0
- package/dist/vector-cortex/heal/_acceptance-fixture.js +56 -0
- package/dist/vector-cortex/heal/closure-metrics.js +66 -0
- package/dist/vector-cortex/heal/closure-opt.js +242 -0
- package/dist/vector-cortex/heal/emit.js +69 -0
- package/dist/vector-cortex/heal/proof.js +210 -0
- package/dist/vector-cortex/heal/types.js +42 -0
- package/extensions/dashboard-client/dist/assets/{AreaChart-DqTbaSRA.js → AreaChart-5yxaI8IO.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{AreaChart-DqTbaSRA.js.map → AreaChart-5yxaI8IO.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{BarChart-BfNBeOvF.js → BarChart-BoHhCqH-.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{BarChart-BfNBeOvF.js.map → BarChart-BoHhCqH-.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{CacheTab-C9SOMYB5.js → CacheTab-Di6L3CsF.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{CacheTab-C9SOMYB5.js.map → CacheTab-Di6L3CsF.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{EventsTab-GsMKP10_.js → EventsTab-Cdff3h6s.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{EventsTab-GsMKP10_.js.map → EventsTab-Cdff3h6s.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{HealthTab-DAOCXwRP.js → HealthTab-MthYYVLw.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{HealthTab-DAOCXwRP.js.map → HealthTab-MthYYVLw.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{MaintenanceTab-BtBeMkB5.js → MaintenanceTab-D9G4ntsG.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{MaintenanceTab-BtBeMkB5.js.map → MaintenanceTab-D9G4ntsG.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{MemoryMapTab-DzndtgkZ.js → MemoryMapTab-CN8Lr5Qf.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{MemoryMapTab-DzndtgkZ.js.map → MemoryMapTab-CN8Lr5Qf.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{MetricsTab-DyxJ4eb8.js → MetricsTab-CgO32kSo.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{MetricsTab-DyxJ4eb8.js.map → MetricsTab-CgO32kSo.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{OverviewTab-DCiEdVWR.js → OverviewTab-Cb4kR0h1.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{OverviewTab-DCiEdVWR.js.map → OverviewTab-Cb4kR0h1.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{ReposTab-B5SIqVHA.js → ReposTab-Dt1FGnMR.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{ReposTab-B5SIqVHA.js.map → ReposTab-Dt1FGnMR.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{SessionsTab-DLWFJ9xI.js → SessionsTab-D7D2RW6U.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{SessionsTab-DLWFJ9xI.js.map → SessionsTab-D7D2RW6U.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{SetupTab-CvGXZyej.js → SetupTab-CgV5xCzz.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{SetupTab-CvGXZyej.js.map → SetupTab-CgV5xCzz.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{TimeSavedCard-wZuQGxLS.js → TimeSavedCard-CCNuJjyO.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{TimeSavedCard-wZuQGxLS.js.map → TimeSavedCard-CCNuJjyO.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{TurnsTab-B7aOejch.js → TurnsTab-Cv1OCttJ.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{TurnsTab-B7aOejch.js.map → TurnsTab-Cv1OCttJ.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/VectorCortexTab-DTabQo6h.js +2 -0
- package/extensions/dashboard-client/dist/assets/VectorCortexTab-DTabQo6h.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{WikiTab-DhWHjAtt.js → WikiTab-B48QnQrK.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{WikiTab-DhWHjAtt.js.map → WikiTab-B48QnQrK.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{button-BrC-W87h.js → button-BBQl2MiF.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{button-BrC-W87h.js.map → button-BBQl2MiF.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{card-0rgfRgr3.js → card-BYbefUur.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{card-0rgfRgr3.js.map → card-BYbefUur.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{generateCategoricalChart-DRresOQF.js → generateCategoricalChart-swm0YZe0.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{generateCategoricalChart-DRresOQF.js.map → generateCategoricalChart-swm0YZe0.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{index-DohmtZWL.js → index-DeIky7xm.js} +3 -3
- package/extensions/dashboard-client/dist/assets/{index-DohmtZWL.js.map → index-DeIky7xm.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{switch-Bs8g_zB5.js → switch-CctU78ww.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{switch-Bs8g_zB5.js.map → switch-CctU78ww.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{toggle-DVVauIo8.js → toggle-BRCNCoiI.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{toggle-DVVauIo8.js.map → toggle-BRCNCoiI.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{useSSE-DxH1PTAR.js → useSSE-WfOiWDH_.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{useSSE-DxH1PTAR.js.map → useSSE-WfOiWDH_.js.map} +1 -1
- package/extensions/dashboard-client/dist/index.html +1 -1
- package/extensions/dashboard-client/src/api/vector-cortex.ts +9 -0
- package/extensions/dashboard-client/src/tabs/VectorCortexClosureCard.tsx +46 -0
- package/extensions/dashboard-client/src/tabs/VectorCortexLedgerCard.tsx +80 -0
- package/extensions/dashboard-client/src/tabs/VectorCortexTab.tsx +12 -164
- package/extensions/dashboard-client/src/tabs/VectorCortexTopologyCard.tsx +131 -0
- package/extensions/dashboard-client/src/types/vector-cortex.ts +14 -0
- package/extensions/dashboard-server/api-contracts/vector-cortex-heal.ts +43 -0
- package/extensions/dashboard-server/api-contracts/vector-cortex.ts +2 -0
- package/extensions/dashboard-server/route-dispatch.ts +112 -0
- package/extensions/dashboard-server/routes-rag-settings-helpers.ts +11 -135
- package/extensions/dashboard-server/routes-rag-settings-types.ts +34 -0
- package/extensions/dashboard-server/routes-rag-settings-vector-cortex.ts +148 -0
- package/extensions/dashboard-server/routes-vector-cortex-heal.ts +56 -0
- package/extensions/dashboard-server/routes-vector-cortex.ts +1 -0
- package/extensions/dashboard-server/routes.ts +1 -0
- package/extensions/dashboard-server/server.ts +3 -86
- package/package.json +1 -1
- package/src/config/dedup.ts +9 -0
- package/src/config/vector-cortex.ts +13 -0
- package/src/config.ts +1 -0
- package/src/dedup-audit.test-helpers.ts +49 -0
- package/src/monitoring.ts +10 -0
- package/src/vector-cortex/heal/_acceptance-fixture.ts +108 -0
- package/src/vector-cortex/heal/closure-metrics.ts +73 -0
- package/src/vector-cortex/heal/closure-opt.ts +266 -0
- package/src/vector-cortex/heal/emit.ts +93 -0
- package/src/vector-cortex/heal/proof.ts +234 -0
- package/src/vector-cortex/heal/types.ts +226 -0
- package/src/vectorStore/add-l0.ts +152 -0
- package/src/vectorStore/add-l1.ts +57 -0
- package/src/vectorStore/add.ts +269 -0
- package/src/vectorStore/class.ts +17 -327
- package/src/vectorStore/dedup-audit.ts +199 -0
- package/src/vectorStore.ts +1 -0
- package/extensions/dashboard-client/dist/assets/VectorCortexTab-eHVt9yDx.js +0 -2
- package/extensions/dashboard-client/dist/assets/VectorCortexTab-eHVt9yDx.js.map +0 -1
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
fetchVectorCortexPlans,
|
|
18
18
|
fetchVectorCortexRender,
|
|
19
19
|
fetchVectorCortexRollout,
|
|
20
|
+
fetchVectorCortexClosureProof,
|
|
20
21
|
fetchVectorCortexShards,
|
|
21
22
|
fetchVectorCortexTopology,
|
|
22
23
|
resetVectorCortexBreaker,
|
|
@@ -28,6 +29,7 @@ import {
|
|
|
28
29
|
type VectorCortexPlansView,
|
|
29
30
|
type VectorCortexRenderView,
|
|
30
31
|
type VectorCortexRolloutView,
|
|
32
|
+
type VectorCortexClosureProofView,
|
|
31
33
|
type VectorCortexShardsView,
|
|
32
34
|
type VectorCortexTopologyView,
|
|
33
35
|
} from "../api/vector-cortex";
|
|
@@ -36,7 +38,10 @@ import { Badge } from "../components/ui/badge";
|
|
|
36
38
|
import { Metric } from "./VectorCortexMetric";
|
|
37
39
|
import { VectorCortexRenderCard } from "./VectorCortexRenderCard";
|
|
38
40
|
import { VectorCortexRolloutCard } from "./VectorCortexRolloutCard";
|
|
41
|
+
import { VectorCortexClosureCard } from "./VectorCortexClosureCard";
|
|
39
42
|
import { VectorCortexPlansCard } from "./VectorCortexPlansCard";
|
|
43
|
+
import { VectorCortexTopologyCard } from "./VectorCortexTopologyCard";
|
|
44
|
+
import { VectorCortexLedgerCard } from "./VectorCortexLedgerCard";
|
|
40
45
|
|
|
41
46
|
function ModeChip({ mode, count }: { mode: string; count: number }): React.ReactElement {
|
|
42
47
|
return (
|
|
@@ -61,6 +66,7 @@ export default function VectorCortexTab(): React.ReactElement {
|
|
|
61
66
|
const [plans, setPlans] = useState<VectorCortexPlansView | null>(null);
|
|
62
67
|
const [render, setRender] = useState<VectorCortexRenderView | null>(null);
|
|
63
68
|
const [rollout, setRollout] = useState<VectorCortexRolloutView | null>(null);
|
|
69
|
+
const [closureProof, setClosureProof] = useState<VectorCortexClosureProofView | null>(null);
|
|
64
70
|
|
|
65
71
|
const poll = useCallback(() => {
|
|
66
72
|
fetchVectorCortexEvaluation()
|
|
@@ -96,6 +102,9 @@ export default function VectorCortexTab(): React.ReactElement {
|
|
|
96
102
|
fetchVectorCortexRollout().then(setRollout).catch(() => {
|
|
97
103
|
/* rollout card is best-effort (VC5C) */
|
|
98
104
|
});
|
|
105
|
+
fetchVectorCortexClosureProof().then(setClosureProof).catch(() => {
|
|
106
|
+
/* closure-optimization card is best-effort (VC6A) */
|
|
107
|
+
});
|
|
99
108
|
}, []);
|
|
100
109
|
|
|
101
110
|
useEffect(() => {
|
|
@@ -246,110 +255,7 @@ export default function VectorCortexTab(): React.ReactElement {
|
|
|
246
255
|
)}
|
|
247
256
|
</CardContent>
|
|
248
257
|
</Card>
|
|
249
|
-
<
|
|
250
|
-
<CardHeader>
|
|
251
|
-
<div className="flex items-center justify-between">
|
|
252
|
-
<CardTitle>Derived Cortex Store (VC3A)</CardTitle>
|
|
253
|
-
{topology?.enabled ? (
|
|
254
|
-
<Badge variant="success">ACTIVE</Badge>
|
|
255
|
-
) : (
|
|
256
|
-
<Badge variant="danger">OFF</Badge>
|
|
257
|
-
)}
|
|
258
|
-
</div>
|
|
259
|
-
</CardHeader>
|
|
260
|
-
<CardContent>
|
|
261
|
-
{!topology?.enabled ? (
|
|
262
|
-
<div className="vc-empty">Cortex store disabled (VC3A off).</div>
|
|
263
|
-
) : (
|
|
264
|
-
<>
|
|
265
|
-
<div className="grid grid-cols-2 gap-4 md:grid-cols-3">
|
|
266
|
-
<Metric label="Generation" value={topology.generationId ?? "—"} />
|
|
267
|
-
<Metric label="Ordinal" value={topology.ordinal ?? "—"} />
|
|
268
|
-
<Metric label="Records" value={String(topology.recordCount)} />
|
|
269
|
-
<Metric label="Frontier (HW)" value={topology.sourceHighWater} />
|
|
270
|
-
<Metric
|
|
271
|
-
label="Root digest"
|
|
272
|
-
value={topology.rootDigest ? topology.rootDigest.slice(0, 16) : "—"}
|
|
273
|
-
/>
|
|
274
|
-
{topology.nodes !== undefined && (
|
|
275
|
-
<>
|
|
276
|
-
<Metric
|
|
277
|
-
label="Nodes"
|
|
278
|
-
value={String(topology.nodes?.length ?? 0)}
|
|
279
|
-
/>
|
|
280
|
-
<Metric
|
|
281
|
-
label="Edges"
|
|
282
|
-
value={String(topology.edges?.length ?? 0)}
|
|
283
|
-
/>
|
|
284
|
-
<Metric
|
|
285
|
-
label="Graph digest"
|
|
286
|
-
value={
|
|
287
|
-
topology.generationDigest
|
|
288
|
-
? topology.generationDigest.slice(0, 16)
|
|
289
|
-
: "—"
|
|
290
|
-
}
|
|
291
|
-
/>
|
|
292
|
-
</>
|
|
293
|
-
)}
|
|
294
|
-
</div>
|
|
295
|
-
{topology.nodes !== undefined &&
|
|
296
|
-
(topology.edges?.length ?? 0) > 0 && (
|
|
297
|
-
<div className="mt-4 max-h-56 overflow-y-auto">
|
|
298
|
-
<div className="mb-1 text-xs font-medium text-muted-foreground">
|
|
299
|
-
Topology edges (VC3B)
|
|
300
|
-
</div>
|
|
301
|
-
<table className="w-full text-left text-xs">
|
|
302
|
-
<thead>
|
|
303
|
-
<tr className="border-b border-border/50 text-muted-foreground">
|
|
304
|
-
<th className="py-1 pr-2">source</th>
|
|
305
|
-
<th className="py-1 pr-2">target</th>
|
|
306
|
-
<th className="py-1 pr-2">head</th>
|
|
307
|
-
<th className="py-1 pr-2">dir</th>
|
|
308
|
-
<th className="py-1">score</th>
|
|
309
|
-
</tr>
|
|
310
|
-
</thead>
|
|
311
|
-
<tbody>
|
|
312
|
-
{topology.edges?.map((e, i) => (
|
|
313
|
-
<tr
|
|
314
|
-
key={`${e.source}-${e.target}-${e.head}-${i}`}
|
|
315
|
-
className="border-b border-border/30"
|
|
316
|
-
>
|
|
317
|
-
<td className="py-1 pr-2 font-mono">{e.source}</td>
|
|
318
|
-
<td className="py-1 pr-2 font-mono">{e.target}</td>
|
|
319
|
-
<td className="py-1 pr-2 font-mono">{e.head}</td>
|
|
320
|
-
<td className="py-1 pr-2">{e.direction}</td>
|
|
321
|
-
<td className="py-1 font-mono">{e.score}</td>
|
|
322
|
-
</tr>
|
|
323
|
-
))}
|
|
324
|
-
</tbody>
|
|
325
|
-
</table>
|
|
326
|
-
</div>
|
|
327
|
-
)}
|
|
328
|
-
</>
|
|
329
|
-
)}
|
|
330
|
-
</CardContent>
|
|
331
|
-
</Card>
|
|
332
|
-
<Card>
|
|
333
|
-
<CardHeader>
|
|
334
|
-
<div className="flex items-center justify-between">
|
|
335
|
-
<CardTitle>Topology Query Diagnostics (VC3C)</CardTitle>
|
|
336
|
-
{query?.enabled ? (
|
|
337
|
-
<Badge variant="success">ACTIVE</Badge>
|
|
338
|
-
) : (
|
|
339
|
-
<Badge variant="danger">OFF</Badge>
|
|
340
|
-
)}
|
|
341
|
-
</div>
|
|
342
|
-
</CardHeader>
|
|
343
|
-
<CardContent>
|
|
344
|
-
{!query?.enabled ? (
|
|
345
|
-
<div className="vc-empty">Query diagnostics unavailable (VC3C off).</div>
|
|
346
|
-
) : (
|
|
347
|
-
<div className="grid grid-cols-2 gap-4 md:grid-cols-3">
|
|
348
|
-
<Metric label="Router version" value={String(query.routerVersion)} />
|
|
349
|
-
</div>
|
|
350
|
-
)}
|
|
351
|
-
</CardContent>
|
|
352
|
-
</Card>
|
|
258
|
+
<VectorCortexTopologyCard topology={topology} query={query} />
|
|
353
259
|
<Card>
|
|
354
260
|
<CardHeader>
|
|
355
261
|
<div className="flex items-center justify-between">
|
|
@@ -413,66 +319,8 @@ export default function VectorCortexTab(): React.ReactElement {
|
|
|
413
319
|
<VectorCortexPlansCard view={plans} />
|
|
414
320
|
<VectorCortexRenderCard view={render} />
|
|
415
321
|
<VectorCortexRolloutCard view={rollout} />
|
|
416
|
-
<
|
|
417
|
-
|
|
418
|
-
<div className="flex items-center justify-between">
|
|
419
|
-
<CardTitle>Occurrence Ledger (VC1B)</CardTitle>
|
|
420
|
-
{ledger?.enabled ? (
|
|
421
|
-
<Badge variant="success">ACTIVE</Badge>
|
|
422
|
-
) : (
|
|
423
|
-
<Badge variant="danger">OFF</Badge>
|
|
424
|
-
)}
|
|
425
|
-
</div>
|
|
426
|
-
</CardHeader>
|
|
427
|
-
<CardContent>
|
|
428
|
-
{!ledger?.enabled ? (
|
|
429
|
-
<div className="vc-empty">Ledger disabled (VC1B off).</div>
|
|
430
|
-
) : (
|
|
431
|
-
<>
|
|
432
|
-
<div className="mb-3 grid grid-cols-2 gap-4 md:grid-cols-3">
|
|
433
|
-
<Metric label="Session" value={ledger.session} />
|
|
434
|
-
<Metric label="High-water" value={ledger.highWater} />
|
|
435
|
-
<Metric label="Occurrences" value={String(ledger.count)} />
|
|
436
|
-
</div>
|
|
437
|
-
{ledger.occurrences.length === 0 ? (
|
|
438
|
-
<div className="vc-empty">No occurrences recorded.</div>
|
|
439
|
-
) : (
|
|
440
|
-
<div className="max-h-64 overflow-y-auto">
|
|
441
|
-
<table className="w-full text-left text-xs">
|
|
442
|
-
<thead>
|
|
443
|
-
<tr className="border-b border-border/50 text-muted-foreground">
|
|
444
|
-
<th className="py-1 pr-2">seq</th>
|
|
445
|
-
<th className="py-1 pr-2">eventId</th>
|
|
446
|
-
<th className="py-1 pr-2">kind</th>
|
|
447
|
-
<th className="py-1 pr-2">toolCall</th>
|
|
448
|
-
<th className="py-1">digest</th>
|
|
449
|
-
</tr>
|
|
450
|
-
</thead>
|
|
451
|
-
<tbody>
|
|
452
|
-
{ledger.occurrences.map((o) => (
|
|
453
|
-
<tr
|
|
454
|
-
key={`${o.seq}-${o.eventId}`}
|
|
455
|
-
className="border-b border-border/30"
|
|
456
|
-
>
|
|
457
|
-
<td className="py-1 pr-2 font-mono">{o.seq}</td>
|
|
458
|
-
<td className="py-1 pr-2 font-mono">{o.eventId}</td>
|
|
459
|
-
<td className="py-1 pr-2">{o.kind}</td>
|
|
460
|
-
<td className="py-1 pr-2 font-mono">
|
|
461
|
-
{o.toolCallId ?? "\u2014"}
|
|
462
|
-
</td>
|
|
463
|
-
<td className="max-w-[180px] truncate font-mono text-muted-foreground">
|
|
464
|
-
{o.digest}
|
|
465
|
-
</td>
|
|
466
|
-
</tr>
|
|
467
|
-
))}
|
|
468
|
-
</tbody>
|
|
469
|
-
</table>
|
|
470
|
-
</div>
|
|
471
|
-
)}
|
|
472
|
-
</>
|
|
473
|
-
)}
|
|
474
|
-
</CardContent>
|
|
475
|
-
</Card>
|
|
322
|
+
<VectorCortexClosureCard view={closureProof} />
|
|
323
|
+
<VectorCortexLedgerCard ledger={ledger} />
|
|
476
324
|
</div>
|
|
477
325
|
);
|
|
478
326
|
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VectorCortexTopologyCard.tsx — VC3A/VC3B topology + VC3C query diagnostics cards.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from VectorCortexTab.tsx to keep the parent tab under the 400-line
|
|
5
|
+
* extension soft limit (delegate-shell + impl-card pattern).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type {
|
|
9
|
+
VectorCortexTopologyView,
|
|
10
|
+
VectorCortexQueryView,
|
|
11
|
+
} from "../api/vector-cortex";
|
|
12
|
+
import { Card, CardContent, CardHeader, CardTitle } from "../components/ui/card";
|
|
13
|
+
import { Badge } from "../components/ui/badge";
|
|
14
|
+
import { Metric } from "./VectorCortexMetric";
|
|
15
|
+
|
|
16
|
+
export function VectorCortexTopologyCard({
|
|
17
|
+
topology,
|
|
18
|
+
query,
|
|
19
|
+
}: {
|
|
20
|
+
topology: VectorCortexTopologyView | null;
|
|
21
|
+
query: VectorCortexQueryView | null;
|
|
22
|
+
}): React.ReactElement {
|
|
23
|
+
return (
|
|
24
|
+
<>
|
|
25
|
+
<Card>
|
|
26
|
+
<CardHeader>
|
|
27
|
+
<div className="flex items-center justify-between">
|
|
28
|
+
<CardTitle>Derived Cortex Store (VC3A)</CardTitle>
|
|
29
|
+
{topology?.enabled ? (
|
|
30
|
+
<Badge variant="success">ACTIVE</Badge>
|
|
31
|
+
) : (
|
|
32
|
+
<Badge variant="danger">OFF</Badge>
|
|
33
|
+
)}
|
|
34
|
+
</div>
|
|
35
|
+
</CardHeader>
|
|
36
|
+
<CardContent>
|
|
37
|
+
{!topology?.enabled ? (
|
|
38
|
+
<div className="vc-empty">Cortex store disabled (VC3A off).</div>
|
|
39
|
+
) : (
|
|
40
|
+
<>
|
|
41
|
+
<div className="grid grid-cols-2 gap-4 md:grid-cols-3">
|
|
42
|
+
<Metric label="Generation" value={topology.generationId ?? "—"} />
|
|
43
|
+
<Metric label="Ordinal" value={topology.ordinal ?? "—"} />
|
|
44
|
+
<Metric label="Records" value={String(topology.recordCount)} />
|
|
45
|
+
<Metric label="Frontier (HW)" value={topology.sourceHighWater} />
|
|
46
|
+
<Metric
|
|
47
|
+
label="Root digest"
|
|
48
|
+
value={topology.rootDigest ? topology.rootDigest.slice(0, 16) : "—"}
|
|
49
|
+
/>
|
|
50
|
+
{topology.nodes !== undefined && (
|
|
51
|
+
<>
|
|
52
|
+
<Metric
|
|
53
|
+
label="Nodes"
|
|
54
|
+
value={String(topology.nodes?.length ?? 0)}
|
|
55
|
+
/>
|
|
56
|
+
<Metric
|
|
57
|
+
label="Edges"
|
|
58
|
+
value={String(topology.edges?.length ?? 0)}
|
|
59
|
+
/>
|
|
60
|
+
<Metric
|
|
61
|
+
label="Graph digest"
|
|
62
|
+
value={
|
|
63
|
+
topology.generationDigest
|
|
64
|
+
? topology.generationDigest.slice(0, 16)
|
|
65
|
+
: "—"
|
|
66
|
+
}
|
|
67
|
+
/>
|
|
68
|
+
</>
|
|
69
|
+
)}
|
|
70
|
+
</div>
|
|
71
|
+
{topology.nodes !== undefined &&
|
|
72
|
+
(topology.edges?.length ?? 0) > 0 && (
|
|
73
|
+
<div className="mt-4 max-h-56 overflow-y-auto">
|
|
74
|
+
<div className="mb-1 text-xs font-medium text-muted-foreground">
|
|
75
|
+
Topology edges (VC3B)
|
|
76
|
+
</div>
|
|
77
|
+
<table className="w-full text-left text-xs">
|
|
78
|
+
<thead>
|
|
79
|
+
<tr className="border-b border-border/50 text-muted-foreground">
|
|
80
|
+
<th className="py-1 pr-2">source</th>
|
|
81
|
+
<th className="py-1 pr-2">target</th>
|
|
82
|
+
<th className="py-1 pr-2">head</th>
|
|
83
|
+
<th className="py-1 pr-2">dir</th>
|
|
84
|
+
<th className="py-1">score</th>
|
|
85
|
+
</tr>
|
|
86
|
+
</thead>
|
|
87
|
+
<tbody>
|
|
88
|
+
{topology.edges?.map((e, i) => (
|
|
89
|
+
<tr
|
|
90
|
+
key={`${e.source}-${e.target}-${e.head}-${i}`}
|
|
91
|
+
className="border-b border-border/30"
|
|
92
|
+
>
|
|
93
|
+
<td className="py-1 pr-2 font-mono">{e.source}</td>
|
|
94
|
+
<td className="py-1 pr-2 font-mono">{e.target}</td>
|
|
95
|
+
<td className="py-1 pr-2 font-mono">{e.head}</td>
|
|
96
|
+
<td className="py-1 pr-2">{e.direction}</td>
|
|
97
|
+
<td className="py-1 font-mono">{e.score}</td>
|
|
98
|
+
</tr>
|
|
99
|
+
))}
|
|
100
|
+
</tbody>
|
|
101
|
+
</table>
|
|
102
|
+
</div>
|
|
103
|
+
)}
|
|
104
|
+
</>
|
|
105
|
+
)}
|
|
106
|
+
</CardContent>
|
|
107
|
+
</Card>
|
|
108
|
+
<Card>
|
|
109
|
+
<CardHeader>
|
|
110
|
+
<div className="flex items-center justify-between">
|
|
111
|
+
<CardTitle>Topology Query Diagnostics (VC3C)</CardTitle>
|
|
112
|
+
{query?.enabled ? (
|
|
113
|
+
<Badge variant="success">ACTIVE</Badge>
|
|
114
|
+
) : (
|
|
115
|
+
<Badge variant="danger">OFF</Badge>
|
|
116
|
+
)}
|
|
117
|
+
</div>
|
|
118
|
+
</CardHeader>
|
|
119
|
+
<CardContent>
|
|
120
|
+
{!query?.enabled ? (
|
|
121
|
+
<div className="vc-empty">Query diagnostics unavailable (VC3C off).</div>
|
|
122
|
+
) : (
|
|
123
|
+
<div className="grid grid-cols-2 gap-4 md:grid-cols-3">
|
|
124
|
+
<Metric label="Router version" value={String(query.routerVersion)} />
|
|
125
|
+
</div>
|
|
126
|
+
)}
|
|
127
|
+
</CardContent>
|
|
128
|
+
</Card>
|
|
129
|
+
</>
|
|
130
|
+
);
|
|
131
|
+
}
|
|
@@ -208,3 +208,17 @@ export interface VectorCortexRolloutView {
|
|
|
208
208
|
promotionBlocked: boolean;
|
|
209
209
|
updatedAt: string;
|
|
210
210
|
}
|
|
211
|
+
|
|
212
|
+
/** Reader-only closure-optimization diagnostics view (VC6A). Aggregate only. */
|
|
213
|
+
export interface VectorCortexClosureProofView {
|
|
214
|
+
enabled: boolean;
|
|
215
|
+
mode: "A" | "B" | "C";
|
|
216
|
+
optimizations: number;
|
|
217
|
+
proofRejections: number;
|
|
218
|
+
retainedEdgeTotal: number;
|
|
219
|
+
removedEdgeTotal: number;
|
|
220
|
+
conservativeTraversalTotal: number;
|
|
221
|
+
optimizedTraversalTotal: number;
|
|
222
|
+
lastRejection: string | null;
|
|
223
|
+
updatedAt: string;
|
|
224
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* api-contracts/vector-cortex-heal.ts — VC6A+ heal API contracts.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from vector-cortex.ts to keep both files under the 400-line
|
|
5
|
+
* extension soft limit. Owns the reader-only closure-optimization and
|
|
6
|
+
* restoration diagnostic views emitted by the heal sprint handlers.
|
|
7
|
+
*
|
|
8
|
+
* PREVENT-PI-004: type definitions only, no network code.
|
|
9
|
+
* PREVENT-011: no `any` type.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Reader-only closure-optimization diagnostics view for
|
|
14
|
+
* GET /api/vector-cortex/closure-proof (VC6A).
|
|
15
|
+
*
|
|
16
|
+
* AGGREGATE + IDENTITY ONLY: counts and the runtime mode. It deliberately does
|
|
17
|
+
* NOT carry the per-edge proof rows, node ids, the closed selection, or any
|
|
18
|
+
* source payload (SECURITY_PRIVACY — reader-only, no ledger text rendered through
|
|
19
|
+
* a diagnostic surface). The detailed proof lives in the structured event log,
|
|
20
|
+
* not the dashboard.
|
|
21
|
+
*/
|
|
22
|
+
export interface VectorCortexClosureProofView {
|
|
23
|
+
/** Whether the VC6A advanced-closure-optimization flag is enabled. */
|
|
24
|
+
readonly enabled: boolean;
|
|
25
|
+
/** Runtime triad mode of the most recent closure: "A" | "B" | "C". */
|
|
26
|
+
readonly mode: "A" | "B" | "C";
|
|
27
|
+
/** Total optimizations produced (event counter). */
|
|
28
|
+
readonly optimizations: number;
|
|
29
|
+
/** Total proofs rejected by the verifier (event counter). */
|
|
30
|
+
readonly proofRejections: number;
|
|
31
|
+
/** Cumulative retained edges across observed optimizations. */
|
|
32
|
+
readonly retainedEdgeTotal: number;
|
|
33
|
+
/** Cumulative removed edges across observed optimizations. */
|
|
34
|
+
readonly removedEdgeTotal: number;
|
|
35
|
+
/** Cumulative conservative traversal-walk count. */
|
|
36
|
+
readonly conservativeTraversalTotal: number;
|
|
37
|
+
/** Cumulative optimized traversal-walk count. */
|
|
38
|
+
readonly optimizedTraversalTotal: number;
|
|
39
|
+
/** Last rejection reason (a HEAL_* code), or null if none yet. */
|
|
40
|
+
readonly lastRejection: string | null;
|
|
41
|
+
/** ISO timestamp of the snapshot. */
|
|
42
|
+
readonly updatedAt: string;
|
|
43
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dashboard-server/route-dispatch.ts — extracted from server.ts.
|
|
3
|
+
*
|
|
4
|
+
* The dispatch chain: each handler returns true if it ended the response.
|
|
5
|
+
* Extracted to keep server.ts under the 400-line extension soft limit
|
|
6
|
+
* (delegate-shell pattern: server.ts calls this and handles the static fallback).
|
|
7
|
+
*
|
|
8
|
+
* PREVENT-PI-004: local filesystem read only, no network.
|
|
9
|
+
* PREVENT-011: no `any` type.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
13
|
+
import type { RouteContext } from "./routes-core.js";
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
handleIndex,
|
|
17
|
+
handleRepoIndex,
|
|
18
|
+
handleEvents,
|
|
19
|
+
handleGameState,
|
|
20
|
+
handleGameScores,
|
|
21
|
+
handlePerfSamples,
|
|
22
|
+
handlePerf,
|
|
23
|
+
handleAchievements,
|
|
24
|
+
handleSessions,
|
|
25
|
+
handleTopics,
|
|
26
|
+
handleTurns,
|
|
27
|
+
handleMaintenance,
|
|
28
|
+
handleProviderCache,
|
|
29
|
+
handleMemoryStatus,
|
|
30
|
+
handleCacheStripes,
|
|
31
|
+
handleSetupStatus,
|
|
32
|
+
handleSetupDetect,
|
|
33
|
+
handleSetupConfigure,
|
|
34
|
+
handleMemoryMap,
|
|
35
|
+
handleRaptorTree,
|
|
36
|
+
handleRaptorBuildHistory,
|
|
37
|
+
handleContextHealth,
|
|
38
|
+
handleCachePoison,
|
|
39
|
+
handleHealthSettings,
|
|
40
|
+
handleEmbedderHealth,
|
|
41
|
+
handleRagSettings,
|
|
42
|
+
handleRagMetrics,
|
|
43
|
+
handleModelThresholds,
|
|
44
|
+
handleWiki,
|
|
45
|
+
handleVectorCortexEvaluation,
|
|
46
|
+
handleVectorCortexHealth,
|
|
47
|
+
handleVectorCortexBreakersReset,
|
|
48
|
+
handleVectorCortexLedger,
|
|
49
|
+
handleVectorCortexTopology,
|
|
50
|
+
handleVectorCortexQuery,
|
|
51
|
+
handleVectorCortexShards,
|
|
52
|
+
handleVectorCortexResidual,
|
|
53
|
+
handleVectorCortexReconstruct,
|
|
54
|
+
handleVectorCortexPlans,
|
|
55
|
+
handleVectorCortexRender,
|
|
56
|
+
handleVectorCortexRollout,
|
|
57
|
+
handleVectorCortexClosureProof,
|
|
58
|
+
} from "./routes.js";
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Dispatch a request through every registered route handler.
|
|
62
|
+
* Returns true if a handler claimed the request (ended the response).
|
|
63
|
+
*/
|
|
64
|
+
export function dispatchRoutes(
|
|
65
|
+
req: IncomingMessage,
|
|
66
|
+
res: ServerResponse,
|
|
67
|
+
ctx: RouteContext,
|
|
68
|
+
): boolean {
|
|
69
|
+
if (handleIndex(req, res, ctx)) return true;
|
|
70
|
+
if (handleRepoIndex(req, res, ctx)) return true;
|
|
71
|
+
if (handleEvents(req, res, ctx)) return true;
|
|
72
|
+
if (handleGameState(req, res, ctx)) return true;
|
|
73
|
+
if (handleGameScores(req, res, ctx)) return true;
|
|
74
|
+
if (handlePerfSamples(req, res, ctx)) return true;
|
|
75
|
+
if (handlePerf(req, res, ctx)) return true;
|
|
76
|
+
if (handleAchievements(req, res, ctx)) return true;
|
|
77
|
+
if (handleSessions(req, res, ctx)) return true;
|
|
78
|
+
if (handleTopics(req, res, ctx)) return true;
|
|
79
|
+
if (handleTurns(req, res, ctx)) return true;
|
|
80
|
+
if (handleMaintenance(req, res, ctx)) return true;
|
|
81
|
+
if (handleProviderCache(req, res, ctx)) return true;
|
|
82
|
+
if (handleMemoryStatus(req, res, ctx)) return true;
|
|
83
|
+
if (handleCacheStripes(req, res, ctx)) return true;
|
|
84
|
+
if (handleSetupStatus(req, res, ctx)) return true;
|
|
85
|
+
if (handleSetupDetect(req, res, ctx)) return true;
|
|
86
|
+
if (handleSetupConfigure(req, res, ctx)) return true;
|
|
87
|
+
if (handleMemoryMap(req, res, ctx)) return true;
|
|
88
|
+
if (handleRaptorTree(req, res, ctx)) return true;
|
|
89
|
+
if (handleRaptorBuildHistory(req, res, ctx)) return true;
|
|
90
|
+
if (handleContextHealth(req, res, ctx)) return true;
|
|
91
|
+
if (handleCachePoison(req, res, ctx)) return true;
|
|
92
|
+
if (handleHealthSettings(req, res, ctx)) return true;
|
|
93
|
+
if (handleEmbedderHealth(req, res, ctx)) return true;
|
|
94
|
+
if (handleRagSettings(req, res, ctx)) return true;
|
|
95
|
+
if (handleRagMetrics(req, res, ctx)) return true;
|
|
96
|
+
if (handleModelThresholds(req, res, ctx)) return true;
|
|
97
|
+
if (handleWiki(req, res, ctx)) return true;
|
|
98
|
+
if (handleVectorCortexEvaluation(req, res, ctx)) return true;
|
|
99
|
+
if (handleVectorCortexHealth(req, res, ctx)) return true;
|
|
100
|
+
if (handleVectorCortexBreakersReset(req, res, ctx)) return true;
|
|
101
|
+
if (handleVectorCortexLedger(req, res, ctx)) return true;
|
|
102
|
+
if (handleVectorCortexTopology(req, res, ctx)) return true;
|
|
103
|
+
if (handleVectorCortexQuery(req, res, ctx)) return true;
|
|
104
|
+
if (handleVectorCortexShards(req, res, ctx)) return true;
|
|
105
|
+
if (handleVectorCortexResidual(req, res, ctx)) return true;
|
|
106
|
+
if (handleVectorCortexReconstruct(req, res, ctx)) return true;
|
|
107
|
+
if (handleVectorCortexPlans(req, res, ctx)) return true;
|
|
108
|
+
if (handleVectorCortexRender(req, res, ctx)) return true;
|
|
109
|
+
if (handleVectorCortexRollout(req, res, ctx)) return true;
|
|
110
|
+
if (handleVectorCortexClosureProof(req, res, ctx)) return true;
|
|
111
|
+
return false;
|
|
112
|
+
}
|