pi-mega-compact 0.11.4 → 0.11.5
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/extensions/dashboard-server/api-contracts/endpoints.js +19 -0
- package/dist/extensions/dashboard-server/api-contracts/memory.js +8 -0
- package/dist/extensions/dashboard-server/api-contracts/provider-cache.js +1 -0
- package/dist/extensions/dashboard-server/api-contracts/setup.js +10 -0
- package/dist/extensions/dashboard-server/index-reader.js +6 -2
- package/dist/extensions/dashboard-server/routes-cache.js +115 -55
- package/dist/extensions/dashboard-server/routes-memory.js +51 -0
- package/dist/extensions/dashboard-server/routes-repo.js +2 -2
- package/dist/extensions/dashboard-server/routes-setup.js +162 -0
- package/dist/extensions/dashboard-server/routes.js +2 -0
- package/dist/extensions/dashboard-server/server.js +7 -1
- package/dist/extensions/mega-commands.js +189 -1
- package/dist/extensions/mega-config.js +2 -0
- package/dist/extensions/mega-events/agent-handlers.js +19 -4
- package/dist/extensions/mega-events/compact-handlers.js +1 -0
- package/dist/extensions/mega-events/context-handler.js +37 -92
- package/dist/extensions/mega-events/context-hwm.js +51 -0
- package/dist/extensions/mega-events/error-classifier.js +16 -5
- package/dist/extensions/mega-events/mirror-append.js +107 -0
- package/dist/extensions/mega-events/outage-advisor.js +7 -1
- package/dist/extensions/mega-events/perf-handler.js +51 -1
- package/dist/extensions/mega-events/recall-tail.js +59 -0
- package/dist/extensions/mega-events/session-handlers.js +15 -8
- package/dist/extensions/mega-runtime/reset-runtime.js +5 -0
- package/dist/extensions/mega-runtime/runtime.js +6 -0
- package/dist/src/embedder.js +41 -2
- package/dist/src/memoryStats.js +75 -0
- package/dist/src/prefix-break.js +43 -0
- package/dist/src/pricing.js +1 -1
- package/dist/src/store/sqlite/perf-samples.js +144 -16
- package/dist/src/store/turns/memory-store.js +8 -0
- package/dist/src/store/turns/sqlite-store.js +14 -3
- package/dist/src/store/turns/types.js +18 -1
- package/dist/src/store/vectorIndex.js +26 -5
- package/extensions/dashboard-client/dist/assets/{AchievementTiles-vEo2MtE2.js → AchievementTiles-BoL7qBOJ.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{AchievementTiles-vEo2MtE2.js.map → AchievementTiles-BoL7qBOJ.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/AchievementsTab-BFDE3HYc.js +2 -0
- package/extensions/dashboard-client/dist/assets/{AchievementsTab-DjxfYrDc.js.map → AchievementsTab-BFDE3HYc.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/CacheTab-eKVc-NV1.js +2 -0
- package/extensions/dashboard-client/dist/assets/CacheTab-eKVc-NV1.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{ConfigTab-Cm6ymbmx.js → ConfigTab-DDFE-ckA.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{ConfigTab-Cm6ymbmx.js.map → ConfigTab-DDFE-ckA.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{EventsTab-DXWl_YzI.js → EventsTab-B6UxZ7PM.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{EventsTab-DXWl_YzI.js.map → EventsTab-B6UxZ7PM.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{GameTab-BLDudcO5.js → GameTab-DehUX-KE.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{GameTab-BLDudcO5.js.map → GameTab-DehUX-KE.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{MaintenanceTab-DLkKCztn.js → MaintenanceTab-0GWRt4wn.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{MaintenanceTab-DLkKCztn.js.map → MaintenanceTab-0GWRt4wn.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{MetricsTab-Cq4u-rZF.js → MetricsTab-C3rwMVsN.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{MetricsTab-Cq4u-rZF.js.map → MetricsTab-C3rwMVsN.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/OverviewTab-39O9_x5j.js +2 -0
- package/extensions/dashboard-client/dist/assets/{OverviewTab-D4kGvsiQ.js.map → OverviewTab-39O9_x5j.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/ReposTab-Cfj6Q5sH.js +2 -0
- package/extensions/dashboard-client/dist/assets/ReposTab-Cfj6Q5sH.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{SessionsTab-DZC2-GCn.js → SessionsTab-DXDTCi3r.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{SessionsTab-DZC2-GCn.js.map → SessionsTab-DXDTCi3r.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/SetupTab-mMlfunJa.js +2 -0
- package/extensions/dashboard-client/dist/assets/SetupTab-mMlfunJa.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/TimeSavedCard-Cw1dJ4e9.js +2 -0
- package/extensions/dashboard-client/dist/assets/TimeSavedCard-Cw1dJ4e9.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{TopicsTab-01G71hv1.js → TopicsTab-BAw972BV.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{TopicsTab-01G71hv1.js.map → TopicsTab-BAw972BV.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{TurnsTab-DLRg0LZT.js → TurnsTab-Cf5mGIdl.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{TurnsTab-DLRg0LZT.js.map → TurnsTab-Cf5mGIdl.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/format-COjDIVGj.js +2 -0
- package/extensions/dashboard-client/dist/assets/format-COjDIVGj.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{index-BX0bcgLu.js → index-4gQ7auad.js} +10 -10
- package/extensions/dashboard-client/dist/assets/index-4gQ7auad.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/pricing-CvE4NllQ.js +2 -0
- package/extensions/dashboard-client/dist/assets/pricing-CvE4NllQ.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{useSSE-BBYt5UPB.js → useSSE-DNgMuyP6.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{useSSE-BBYt5UPB.js.map → useSSE-DNgMuyP6.js.map} +1 -1
- package/extensions/dashboard-client/dist/index.html +1 -1
- package/extensions/dashboard-client/src/App.tsx +4 -0
- package/extensions/dashboard-client/src/api/client.ts +14 -0
- package/extensions/dashboard-client/src/components/ActiveReposTable.tsx +21 -12
- package/extensions/dashboard-client/src/components/ProviderCacheCard.tsx +56 -0
- package/extensions/dashboard-client/src/components/SavingsByModelTable.tsx +38 -57
- package/extensions/dashboard-client/src/tabs/CacheTab.tsx +1 -0
- package/extensions/dashboard-client/src/tabs/SetupTab.tsx +355 -0
- package/extensions/dashboard-client/tsconfig.json +3 -2
- package/extensions/dashboard-client/vite.config.ts +2 -0
- package/extensions/dashboard-server/api-contracts/endpoints.ts +36 -3
- package/extensions/dashboard-server/api-contracts/index.ts +7 -0
- package/extensions/dashboard-server/api-contracts/memory.ts +27 -0
- package/extensions/dashboard-server/api-contracts/multi-repo.ts +231 -231
- package/extensions/dashboard-server/api-contracts/provider-cache.ts +37 -0
- package/extensions/dashboard-server/api-contracts/setup.ts +58 -0
- package/extensions/dashboard-server/index-reader.ts +138 -121
- package/extensions/dashboard-server/routes-cache.ts +161 -85
- package/extensions/dashboard-server/routes-memory.ts +63 -0
- package/extensions/dashboard-server/routes-repo.ts +36 -36
- package/extensions/dashboard-server/routes-setup.ts +181 -0
- package/extensions/dashboard-server/routes.ts +2 -0
- package/extensions/dashboard-server/server.ts +6 -0
- package/extensions/mega-commands.ts +211 -1
- package/extensions/mega-config.ts +10 -0
- package/extensions/mega-events/agent-handlers.ts +20 -4
- package/extensions/mega-events/compact-handlers.ts +1 -0
- package/extensions/mega-events/context-handler.ts +45 -110
- package/extensions/mega-events/context-hwm.ts +85 -0
- package/extensions/mega-events/error-classifier.ts +15 -4
- package/extensions/mega-events/mirror-append.ts +155 -0
- package/extensions/mega-events/outage-advisor.ts +11 -5
- package/extensions/mega-events/perf-handler.ts +79 -5
- package/extensions/mega-events/recall-tail.ts +88 -0
- package/extensions/mega-events/session-handlers.ts +14 -7
- package/extensions/mega-runtime/helpers.ts +12 -0
- package/extensions/mega-runtime/reset-runtime.ts +5 -0
- package/extensions/mega-runtime/runtime.ts +6 -0
- package/package.json +5 -2
- package/src/embedder.ts +42 -2
- package/src/memoryStats.ts +107 -0
- package/src/prefix-break.ts +83 -0
- package/src/pricing.ts +2 -2
- package/src/store/sqlite/perf-samples.ts +215 -22
- package/src/store/turns/memory-store.ts +10 -1
- package/src/store/turns/sqlite-store.ts +27 -15
- package/src/store/turns/types.ts +21 -0
- package/src/store/vectorIndex.ts +33 -4
- package/dist/extensions/conflict-scan.test.js +0 -115
- package/dist/extensions/dashboard-server/api-contracts.test.js +0 -884
- package/dist/extensions/dashboard-server/html.test.js +0 -52
- package/dist/extensions/dashboard-server/perf-server.test.js +0 -80
- package/dist/extensions/dashboard-server/routes-cache.test.js +0 -248
- package/dist/extensions/dashboard-server/server.test.js +0 -120
- package/dist/extensions/dashboard-server-s32.test.js +0 -181
- package/dist/extensions/dashboard-server.test.js +0 -339
- package/dist/extensions/mega-cache-replay.test.js +0 -400
- package/dist/extensions/mega-compact-s38.test.js +0 -1383
- package/dist/extensions/mega-compact.test.js +0 -1112
- package/dist/extensions/mega-events.test.js +0 -47
- package/dist/extensions/mega-game-cmds.test.js +0 -163
- package/dist/extensions/mega-runtime/snapshot.test.js +0 -127
- package/dist/extensions/mega-runtime/state.test.js +0 -266
- package/dist/extensions/mega-runtime/widget.test.js +0 -343
- package/dist/extensions/mega-shutdown-widget.test.js +0 -121
- package/dist/extensions/mega-teamrun.test.js +0 -156
- package/dist/extensions/mega-trim.test.js +0 -58
- package/dist/extensions/mega-turn-store.test.js +0 -68
- package/dist/src/boundary.test.js +0 -170
- package/dist/src/compact.test.js +0 -78
- package/dist/src/config/themes.test.js +0 -94
- package/dist/src/dedup/dedup.test.js +0 -41
- package/dist/src/dedup/l1.test.js +0 -50
- package/dist/src/dedup/raptor/buildHistory.test.js +0 -292
- package/dist/src/dedup/raptor/multilevel-serve.test.js +0 -229
- package/dist/src/dedup/raptor/multilevel.test.js +0 -238
- package/dist/src/dedup/raptor/promote.test.js +0 -69
- package/dist/src/dedup/raptor/raptor.test.js +0 -248
- package/dist/src/dedup/raptor/retrieval.test.js +0 -95
- package/dist/src/dedup/raptor/serve-gate.test.js +0 -298
- package/dist/src/dedup/sprint12.test.js +0 -219
- package/dist/src/dedup-engine.test.js +0 -472
- package/dist/src/driftDetection.test.js +0 -87
- package/dist/src/e2e.test.js +0 -698
- package/dist/src/engine.test.js +0 -111
- package/dist/src/extractive.test.js +0 -147
- package/dist/src/fork.test.js +0 -81
- package/dist/src/game/scoring.test.js +0 -98
- package/dist/src/httpEmbedder.test.js +0 -277
- package/dist/src/importance.test.js +0 -372
- package/dist/src/intent.test.js +0 -78
- package/dist/src/log.test.js +0 -42
- package/dist/src/mechanical-fix.test.js +0 -65
- package/dist/src/memory.test.js +0 -70
- package/dist/src/memoryConsolidate.test.js +0 -38
- package/dist/src/memoryOps.test.js +0 -129
- package/dist/src/memoryRecall.test.js +0 -171
- package/dist/src/memoryRoundtrip.test.js +0 -137
- package/dist/src/metrics/turns.test.js +0 -152
- package/dist/src/mirror/mirror.test.js +0 -185
- package/dist/src/raptor-inject-summaries.test.js +0 -162
- package/dist/src/ratio.bench.test.js +0 -897
- package/dist/src/recall.integration.test.js +0 -77
- package/dist/src/recall.test.js +0 -379
- package/dist/src/sprint14.test.js +0 -219
- package/dist/src/sprint4x-rag-verification.test.js +0 -93
- package/dist/src/store/compression.test.js +0 -139
- package/dist/src/store/memoryIndex.test.js +0 -51
- package/dist/src/store/migrate.test.js +0 -139
- package/dist/src/store/pgOpenGuard.test.js +0 -74
- package/dist/src/store/phase01.test.js +0 -81
- package/dist/src/store/phase04.test.js +0 -54
- package/dist/src/store/sprint10.test.js +0 -186
- package/dist/src/store/sqlite/game-achievements.test.js +0 -67
- package/dist/src/store/sqlite/game-scores.test.js +0 -106
- package/dist/src/store/sqlite/game-state.test.js +0 -76
- package/dist/src/store/sqlite/global-index.test.js +0 -136
- package/dist/src/store/sqlite/mechanical-fix.test.js +0 -146
- package/dist/src/store/sqlite/perf-samples.test.js +0 -146
- package/dist/src/store/sqlite/raptor.test.js +0 -106
- package/dist/src/store/sqlite/turns.test.js +0 -183
- package/dist/src/store/sqlite.cachehit.test.js +0 -55
- package/dist/src/store/sqlite.dbmaint.test.js +0 -158
- package/dist/src/store/sqlite.dbmirror.test.js +0 -184
- package/dist/src/store/turns/contract-compliance.test.js +0 -428
- package/dist/src/store/turns/memory-store.test.js +0 -9
- package/dist/src/store/turns/migrations.test.js +0 -138
- package/dist/src/store/turns/sqlite-store.test.js +0 -144
- package/dist/src/store/vectorIndex.test.js +0 -123
- package/dist/src/store.test.js +0 -161
- package/dist/src/supersede.test.js +0 -36
- package/dist/src/topics/cluster.test.js +0 -150
- package/dist/src/topics/store.test.js +0 -117
- package/dist/src/types.test.js +0 -9
- package/dist/src/vector-search-cache.test.js +0 -157
- package/dist/src/vectorStore.test.js +0 -479
- package/dist/src/wiki.test.js +0 -171
- package/extensions/conflict-scan.test.ts +0 -129
- package/extensions/dashboard-client/dist/assets/AchievementsTab-DjxfYrDc.js +0 -2
- package/extensions/dashboard-client/dist/assets/CacheTab-Dnpv94wq.js +0 -2
- package/extensions/dashboard-client/dist/assets/CacheTab-Dnpv94wq.js.map +0 -1
- package/extensions/dashboard-client/dist/assets/OverviewTab-D4kGvsiQ.js +0 -2
- package/extensions/dashboard-client/dist/assets/ReposTab-C0Wnrf2u.js +0 -2
- package/extensions/dashboard-client/dist/assets/ReposTab-C0Wnrf2u.js.map +0 -1
- package/extensions/dashboard-client/dist/assets/TimeSavedCard-UqljSyP-.js +0 -2
- package/extensions/dashboard-client/dist/assets/TimeSavedCard-UqljSyP-.js.map +0 -1
- package/extensions/dashboard-client/dist/assets/index-BX0bcgLu.js.map +0 -1
- package/extensions/dashboard-server/api-contracts.test.ts +0 -1065
- package/extensions/dashboard-server/html.test.ts +0 -62
- package/extensions/dashboard-server/perf-server.test.ts +0 -101
- package/extensions/dashboard-server/routes-cache.test.ts +0 -302
- package/extensions/dashboard-server/server.test.ts +0 -131
- package/extensions/dashboard-server-s32.test.ts +0 -195
- package/extensions/dashboard-server.test.ts +0 -382
- package/extensions/mega-cache-replay.test.ts +0 -526
- package/extensions/mega-compact-s38.test.ts +0 -1433
- package/extensions/mega-compact.test.ts +0 -1509
- package/extensions/mega-events.test.ts +0 -55
- package/extensions/mega-game-cmds.test.ts +0 -197
- package/extensions/mega-runtime/snapshot.test.ts +0 -139
- package/extensions/mega-runtime/state.test.ts +0 -262
- package/extensions/mega-runtime/widget.test.ts +0 -468
- package/extensions/mega-shutdown-widget.test.ts +0 -141
- package/extensions/mega-teamrun.test.ts +0 -176
- package/extensions/mega-trim.test.ts +0 -64
- package/extensions/mega-turn-store.test.ts +0 -108
- package/src/boundary.test.ts +0 -187
- package/src/compact.test.ts +0 -99
- package/src/config/themes.test.ts +0 -116
- package/src/dedup/dedup.test.ts +0 -46
- package/src/dedup/l1.test.ts +0 -57
- package/src/dedup/raptor/buildHistory.test.ts +0 -353
- package/src/dedup/raptor/multilevel-serve.test.ts +0 -273
- package/src/dedup/raptor/multilevel.test.ts +0 -325
- package/src/dedup/raptor/promote.test.ts +0 -82
- package/src/dedup/raptor/raptor.test.ts +0 -297
- package/src/dedup/raptor/retrieval.test.ts +0 -118
- package/src/dedup/raptor/serve-gate.test.ts +0 -348
- package/src/dedup/sprint12.test.ts +0 -242
- package/src/dedup-engine.test.ts +0 -670
- package/src/driftDetection.test.ts +0 -100
- package/src/e2e.test.ts +0 -843
- package/src/engine.test.ts +0 -123
- package/src/extractive.test.ts +0 -174
- package/src/fork.test.ts +0 -94
- package/src/game/scoring.test.ts +0 -103
- package/src/httpEmbedder.test.ts +0 -286
- package/src/importance.test.ts +0 -538
- package/src/intent.test.ts +0 -87
- package/src/log.test.ts +0 -47
- package/src/mechanical-fix.test.ts +0 -70
- package/src/memory.test.ts +0 -92
- package/src/memoryConsolidate.test.ts +0 -47
- package/src/memoryOps.test.ts +0 -148
- package/src/memoryRecall.test.ts +0 -194
- package/src/memoryRoundtrip.test.ts +0 -155
- package/src/metrics/turns.test.ts +0 -165
- package/src/mirror/mirror.test.ts +0 -240
- package/src/raptor-inject-summaries.test.ts +0 -228
- package/src/ratio.bench.test.ts +0 -1316
- package/src/recall.integration.test.ts +0 -96
- package/src/recall.test.ts +0 -467
- package/src/sprint14.test.ts +0 -245
- package/src/sprint4x-rag-verification.test.ts +0 -119
- package/src/store/compression.test.ts +0 -168
- package/src/store/memoryIndex.test.ts +0 -61
- package/src/store/migrate.test.ts +0 -158
- package/src/store/pgOpenGuard.test.ts +0 -89
- package/src/store/phase01.test.ts +0 -88
- package/src/store/phase04.test.ts +0 -58
- package/src/store/sprint10.test.ts +0 -214
- package/src/store/sqlite/game-achievements.test.ts +0 -80
- package/src/store/sqlite/game-scores.test.ts +0 -132
- package/src/store/sqlite/game-state.test.ts +0 -89
- package/src/store/sqlite/global-index.test.ts +0 -222
- package/src/store/sqlite/mechanical-fix.test.ts +0 -162
- package/src/store/sqlite/perf-samples.test.ts +0 -169
- package/src/store/sqlite/raptor.test.ts +0 -139
- package/src/store/sqlite/turns.test.ts +0 -218
- package/src/store/sqlite.cachehit.test.ts +0 -68
- package/src/store/sqlite.dbmaint.test.ts +0 -193
- package/src/store/sqlite.dbmirror.test.ts +0 -229
- package/src/store/turns/contract-compliance.test.ts +0 -562
- package/src/store/turns/memory-store.test.ts +0 -15
- package/src/store/turns/migrations.test.ts +0 -161
- package/src/store/turns/sqlite-store.test.ts +0 -161
- package/src/store/vectorIndex.test.ts +0 -140
- package/src/store.test.ts +0 -191
- package/src/supersede.test.ts +0 -42
- package/src/topics/cluster.test.ts +0 -176
- package/src/topics/store.test.ts +0 -132
- package/src/types.test.ts +0 -10
- package/src/vector-search-cache.test.ts +0 -190
- package/src/vectorStore.test.ts +0 -533
- package/src/wiki.test.ts +0 -217
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dashboard-client/src/tabs/SetupTab.tsx — Setup wizard tab (P0b).
|
|
3
|
+
*
|
|
4
|
+
* Shows current embedder configuration, warns about trigram recall quality,
|
|
5
|
+
* and mirrors the /megasetup command with detection results.
|
|
6
|
+
*
|
|
7
|
+
* PREVENT-PI-004: all data comes from localhost dashboard API endpoints —
|
|
8
|
+
* no external network calls.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type React from "react";
|
|
12
|
+
import { useState, useEffect, useCallback } from "react";
|
|
13
|
+
import type { SetupStatusResponse, SetupDetectResponse } from "@contracts";
|
|
14
|
+
import { fetchSetupStatus, fetchSetupDetect } from "../api/client";
|
|
15
|
+
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Style constants
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
|
|
20
|
+
const styles: Record<string, React.CSSProperties> = {
|
|
21
|
+
container: {
|
|
22
|
+
padding: "1rem",
|
|
23
|
+
maxWidth: "720px",
|
|
24
|
+
margin: "0 auto",
|
|
25
|
+
fontFamily: "system-ui, sans-serif",
|
|
26
|
+
color: "#e0e0e0",
|
|
27
|
+
},
|
|
28
|
+
section: {
|
|
29
|
+
background: "#1a1a2e",
|
|
30
|
+
borderRadius: "8px",
|
|
31
|
+
padding: "1rem",
|
|
32
|
+
marginBottom: "1rem",
|
|
33
|
+
border: "1px solid #2a2a4e",
|
|
34
|
+
},
|
|
35
|
+
sectionTitle: {
|
|
36
|
+
fontSize: "1.1rem",
|
|
37
|
+
fontWeight: 700,
|
|
38
|
+
marginTop: 0,
|
|
39
|
+
marginBottom: "0.75rem",
|
|
40
|
+
color: "#e0e0e0",
|
|
41
|
+
borderBottom: "1px solid #333",
|
|
42
|
+
paddingBottom: "0.5rem",
|
|
43
|
+
},
|
|
44
|
+
label: { fontWeight: 600, color: "#a0a0c0", marginRight: "0.5rem" },
|
|
45
|
+
value: { color: "#e0e0e0" },
|
|
46
|
+
row: { marginBottom: "0.4rem", fontSize: "0.9rem" },
|
|
47
|
+
warning: {
|
|
48
|
+
background: "#3a2a00",
|
|
49
|
+
border: "1px solid #665500",
|
|
50
|
+
borderRadius: "8px",
|
|
51
|
+
padding: "0.75rem",
|
|
52
|
+
marginTop: "0.5rem",
|
|
53
|
+
color: "#ffcc00",
|
|
54
|
+
fontSize: "0.85rem",
|
|
55
|
+
},
|
|
56
|
+
badge: {
|
|
57
|
+
display: "inline-block",
|
|
58
|
+
padding: "0.15rem 0.5rem",
|
|
59
|
+
borderRadius: "4px",
|
|
60
|
+
fontSize: "0.8rem",
|
|
61
|
+
fontWeight: 600,
|
|
62
|
+
marginLeft: "0.5rem",
|
|
63
|
+
},
|
|
64
|
+
detectRow: {
|
|
65
|
+
display: "flex",
|
|
66
|
+
justifyContent: "space-between",
|
|
67
|
+
alignItems: "center",
|
|
68
|
+
padding: "0.5rem 0",
|
|
69
|
+
borderBottom: "1px solid #2a2a4e",
|
|
70
|
+
},
|
|
71
|
+
button: {
|
|
72
|
+
background: "#3a5a9f",
|
|
73
|
+
color: "#fff",
|
|
74
|
+
border: "none",
|
|
75
|
+
borderRadius: "6px",
|
|
76
|
+
padding: "0.5rem 1rem",
|
|
77
|
+
cursor: "pointer",
|
|
78
|
+
fontSize: "0.9rem",
|
|
79
|
+
fontWeight: 600,
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
// SetupTab component
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
|
|
87
|
+
export default function SetupTab(): React.ReactElement {
|
|
88
|
+
const [status, setStatus] = useState<SetupStatusResponse | null>(null);
|
|
89
|
+
const [detect, setDetect] = useState<SetupDetectResponse | null>(null);
|
|
90
|
+
const [statusError, setStatusError] = useState<string | null>(null);
|
|
91
|
+
const [detectError, setDetectError] = useState<string | null>(null);
|
|
92
|
+
const [runningDetect, setRunningDetect] = useState(false);
|
|
93
|
+
|
|
94
|
+
const loadStatus = useCallback(() => {
|
|
95
|
+
fetchSetupStatus()
|
|
96
|
+
.then(setStatus)
|
|
97
|
+
.catch((e: unknown) =>
|
|
98
|
+
setStatusError(e instanceof Error ? e.message : String(e)),
|
|
99
|
+
);
|
|
100
|
+
}, []);
|
|
101
|
+
|
|
102
|
+
const runDetect = useCallback(() => {
|
|
103
|
+
setRunningDetect(true);
|
|
104
|
+
setDetectError(null);
|
|
105
|
+
fetchSetupDetect()
|
|
106
|
+
.then((d) => {
|
|
107
|
+
setDetect(d);
|
|
108
|
+
setRunningDetect(false);
|
|
109
|
+
})
|
|
110
|
+
.catch((e: unknown) => {
|
|
111
|
+
setDetectError(e instanceof Error ? e.message : String(e));
|
|
112
|
+
setRunningDetect(false);
|
|
113
|
+
});
|
|
114
|
+
}, []);
|
|
115
|
+
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
loadStatus();
|
|
118
|
+
}, [loadStatus]);
|
|
119
|
+
|
|
120
|
+
// Poll status every 30s
|
|
121
|
+
useEffect(() => {
|
|
122
|
+
const id = setInterval(loadStatus, 30000);
|
|
123
|
+
return () => clearInterval(id);
|
|
124
|
+
}, [loadStatus]);
|
|
125
|
+
|
|
126
|
+
// -----------------------------------------------------------------------
|
|
127
|
+
// Render helpers
|
|
128
|
+
// -----------------------------------------------------------------------
|
|
129
|
+
|
|
130
|
+
const embedderLabel = (e: string): string => {
|
|
131
|
+
switch (e) {
|
|
132
|
+
case "trigram":
|
|
133
|
+
return "TrigramEmbedder (heuristic, default)";
|
|
134
|
+
case "http":
|
|
135
|
+
return "HTTP Embedder (BYO localhost)";
|
|
136
|
+
case "minilm":
|
|
137
|
+
return "MiniLM (experimental)";
|
|
138
|
+
default:
|
|
139
|
+
return "Unknown";
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
const trigramWarning = status?.currentEmbedder === "trigram" && (
|
|
144
|
+
<div style={styles.warning}>
|
|
145
|
+
<strong>Note:</strong> TrigramEmbedder is a heuristic-strength default
|
|
146
|
+
embedder. It works without any setup but recall quality may be lower
|
|
147
|
+
than a dedicated embedding backend. If you notice poor recall results,
|
|
148
|
+
consider installing Ollama and running the{" "}
|
|
149
|
+
<code>/megasetup</code> command, or set{" "}
|
|
150
|
+
<code>MEGACOMPACT_EMBEDDING_URL</code> to point at your own localhost
|
|
151
|
+
embedding server.
|
|
152
|
+
</div>
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
const detectBadge = (installed: boolean): React.ReactElement => {
|
|
156
|
+
const bg = installed ? "#1a5a1a" : "#3a1a1a";
|
|
157
|
+
const color = installed ? "#4caf50" : "#f44336";
|
|
158
|
+
return (
|
|
159
|
+
<span style={{ ...styles.badge, background: bg, color }}>
|
|
160
|
+
{installed ? "Detected" : "Not found"}
|
|
161
|
+
</span>
|
|
162
|
+
);
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
// -----------------------------------------------------------------------
|
|
166
|
+
// Main render
|
|
167
|
+
// -----------------------------------------------------------------------
|
|
168
|
+
|
|
169
|
+
return (
|
|
170
|
+
<div style={styles.container}>
|
|
171
|
+
<h2 style={{ fontSize: "1.3rem", marginTop: 0, marginBottom: "1rem" }}>
|
|
172
|
+
Embedder Setup
|
|
173
|
+
</h2>
|
|
174
|
+
|
|
175
|
+
{/* Current Config Section */}
|
|
176
|
+
<div style={styles.section}>
|
|
177
|
+
<h3 style={styles.sectionTitle}>Current Embedder Configuration</h3>
|
|
178
|
+
{statusError && (
|
|
179
|
+
<p style={{ color: "#f44336", fontSize: "0.85rem" }}>
|
|
180
|
+
Error: {statusError}
|
|
181
|
+
</p>
|
|
182
|
+
)}
|
|
183
|
+
{status && (
|
|
184
|
+
<>
|
|
185
|
+
<div style={styles.row}>
|
|
186
|
+
<span style={styles.label}>Active Embedder:</span>
|
|
187
|
+
<span style={styles.value}>
|
|
188
|
+
{embedderLabel(status.currentEmbedder)}
|
|
189
|
+
</span>
|
|
190
|
+
</div>
|
|
191
|
+
<div style={styles.row}>
|
|
192
|
+
<span style={styles.label}>Embedding URL:</span>
|
|
193
|
+
<span style={styles.value}>
|
|
194
|
+
{status.embeddingUrl ?? (
|
|
195
|
+
<span style={{ color: "#888" }}>not set</span>
|
|
196
|
+
)}
|
|
197
|
+
</span>
|
|
198
|
+
</div>
|
|
199
|
+
<div style={styles.row}>
|
|
200
|
+
<span style={styles.label}>Embed Cache:</span>
|
|
201
|
+
<span style={styles.value}>
|
|
202
|
+
{status.embedCache ?? (
|
|
203
|
+
<span style={{ color: "#888" }}>not set</span>
|
|
204
|
+
)}
|
|
205
|
+
</span>
|
|
206
|
+
</div>
|
|
207
|
+
<div style={styles.row}>
|
|
208
|
+
<span style={styles.label}>MiniLM:</span>
|
|
209
|
+
<span style={styles.value}>{status.minilm ? "enabled" : "disabled"}</span>
|
|
210
|
+
</div>
|
|
211
|
+
{trigramWarning}
|
|
212
|
+
</>
|
|
213
|
+
)}
|
|
214
|
+
{!status && !statusError && (
|
|
215
|
+
<p style={{ color: "#888", fontSize: "0.85rem" }}>
|
|
216
|
+
Loading configuration...
|
|
217
|
+
</p>
|
|
218
|
+
)}
|
|
219
|
+
</div>
|
|
220
|
+
|
|
221
|
+
{/* Detection Section */}
|
|
222
|
+
<div style={styles.section}>
|
|
223
|
+
<h3 style={styles.sectionTitle}>Local Embedder Detection</h3>
|
|
224
|
+
<p style={{ fontSize: "0.85rem", color: "#a0a0c0", marginTop: 0 }}>
|
|
225
|
+
Detect which local embedding backends are available on this machine.
|
|
226
|
+
No software is installed — detection only.
|
|
227
|
+
</p>
|
|
228
|
+
|
|
229
|
+
{detect && (
|
|
230
|
+
<>
|
|
231
|
+
{/* Ollama */}
|
|
232
|
+
<div style={styles.detectRow}>
|
|
233
|
+
<span>
|
|
234
|
+
<strong>Ollama</strong>
|
|
235
|
+
</span>
|
|
236
|
+
{detect.ollama !== null ? (
|
|
237
|
+
<span>
|
|
238
|
+
{detectBadge(detect.ollama.installed)}
|
|
239
|
+
{detect.ollama.installed && (
|
|
240
|
+
<span style={{ fontSize: "0.8rem", color: "#a0a0c0", marginLeft: "0.5rem" }}>
|
|
241
|
+
{detect.ollama.running
|
|
242
|
+
? `server running, ${detect.ollama.models.length} model(s)`
|
|
243
|
+
: "server not running"}
|
|
244
|
+
</span>
|
|
245
|
+
)}
|
|
246
|
+
</span>
|
|
247
|
+
) : (
|
|
248
|
+
<span style={{ color: "#888", fontSize: "0.85rem" }}>
|
|
249
|
+
not checked
|
|
250
|
+
</span>
|
|
251
|
+
)}
|
|
252
|
+
</div>
|
|
253
|
+
|
|
254
|
+
{/* llama.cpp */}
|
|
255
|
+
<div style={styles.detectRow}>
|
|
256
|
+
<span>
|
|
257
|
+
<strong>llama.cpp</strong>
|
|
258
|
+
</span>
|
|
259
|
+
{detect.llamaCpp !== null ? (
|
|
260
|
+
<span>
|
|
261
|
+
{detectBadge(detect.llamaCpp.installed)}
|
|
262
|
+
{detect.llamaCpp.installed && detect.llamaCpp.detail && (
|
|
263
|
+
<span style={{ fontSize: "0.8rem", color: "#a0a0c0", marginLeft: "0.5rem" }}>
|
|
264
|
+
{detect.llamaCpp.detail}
|
|
265
|
+
</span>
|
|
266
|
+
)}
|
|
267
|
+
</span>
|
|
268
|
+
) : (
|
|
269
|
+
<span style={{ color: "#888", fontSize: "0.85rem" }}>
|
|
270
|
+
not checked
|
|
271
|
+
</span>
|
|
272
|
+
)}
|
|
273
|
+
</div>
|
|
274
|
+
|
|
275
|
+
{/* ONNX */}
|
|
276
|
+
<div style={styles.detectRow}>
|
|
277
|
+
<span>
|
|
278
|
+
<strong>ONNX Runtime</strong>
|
|
279
|
+
</span>
|
|
280
|
+
{detect.onnx !== null ? (
|
|
281
|
+
<span>
|
|
282
|
+
{detectBadge(detect.onnx.installed)}
|
|
283
|
+
{detect.onnx.installed && detect.onnx.detail && (
|
|
284
|
+
<span style={{ fontSize: "0.8rem", color: "#a0a0c0", marginLeft: "0.5rem" }}>
|
|
285
|
+
{detect.onnx.detail}
|
|
286
|
+
</span>
|
|
287
|
+
)}
|
|
288
|
+
</span>
|
|
289
|
+
) : (
|
|
290
|
+
<span style={{ color: "#888", fontSize: "0.85rem" }}>
|
|
291
|
+
not checked
|
|
292
|
+
</span>
|
|
293
|
+
)}
|
|
294
|
+
</div>
|
|
295
|
+
|
|
296
|
+
{detect.error && (
|
|
297
|
+
<p style={{ color: "#f44336", fontSize: "0.8rem", marginTop: "0.5rem" }}>
|
|
298
|
+
Detection error: {detect.error}
|
|
299
|
+
</p>
|
|
300
|
+
)}
|
|
301
|
+
</>
|
|
302
|
+
)}
|
|
303
|
+
|
|
304
|
+
{detectError && (
|
|
305
|
+
<p style={{ color: "#f44336", fontSize: "0.85rem" }}>
|
|
306
|
+
Error: {detectError}
|
|
307
|
+
</p>
|
|
308
|
+
)}
|
|
309
|
+
|
|
310
|
+
<div style={{ marginTop: "1rem" }}>
|
|
311
|
+
<button
|
|
312
|
+
style={styles.button}
|
|
313
|
+
onClick={runDetect}
|
|
314
|
+
disabled={runningDetect}
|
|
315
|
+
>
|
|
316
|
+
{runningDetect ? "Detecting..." : "Run Detection"}
|
|
317
|
+
</button>
|
|
318
|
+
<span style={{ fontSize: "0.8rem", color: "#888", marginLeft: "0.75rem" }}>
|
|
319
|
+
Or run <code>/megasetup</code> in the chat for an interactive wizard.
|
|
320
|
+
</span>
|
|
321
|
+
</div>
|
|
322
|
+
</div>
|
|
323
|
+
|
|
324
|
+
{/* Help Section */}
|
|
325
|
+
<div style={styles.section}>
|
|
326
|
+
<h3 style={styles.sectionTitle}>How to Upgrade</h3>
|
|
327
|
+
<ul style={{ fontSize: "0.85rem", lineHeight: 1.6, paddingLeft: "1.25rem" }}>
|
|
328
|
+
<li>
|
|
329
|
+
<strong>Ollama:</strong> Install from{" "}
|
|
330
|
+
<a
|
|
331
|
+
href="https://ollama.com"
|
|
332
|
+
style={{ color: "#6a9fff" }}
|
|
333
|
+
target="_blank"
|
|
334
|
+
rel="noopener noreferrer"
|
|
335
|
+
>
|
|
336
|
+
ollama.com
|
|
337
|
+
</a>
|
|
338
|
+
, then <code>ollama pull nomic-embed-text</code> and restart pi.
|
|
339
|
+
Set <code>MEGACOMPACT_EMBEDDING_URL=http://localhost:11434/api/embeddings</code>.
|
|
340
|
+
</li>
|
|
341
|
+
<li>
|
|
342
|
+
<strong>llama.cpp:</strong> Build or install llama.cpp, run{" "}
|
|
343
|
+
<code>llama-server</code> with an embedding model, and set
|
|
344
|
+
the URL accordingly.
|
|
345
|
+
</li>
|
|
346
|
+
<li>
|
|
347
|
+
<strong>ONNX Runtime:</strong> Install{" "}
|
|
348
|
+
<code>onnxruntime-node</code> in the project root. Not yet
|
|
349
|
+
integrated — see docs for manual setup.
|
|
350
|
+
</li>
|
|
351
|
+
</ul>
|
|
352
|
+
</div>
|
|
353
|
+
</div>
|
|
354
|
+
);
|
|
355
|
+
}
|
|
@@ -20,9 +20,10 @@
|
|
|
20
20
|
"baseUrl": ".",
|
|
21
21
|
"paths": {
|
|
22
22
|
"@/*": ["./src/*"],
|
|
23
|
-
"@contracts": ["../dashboard-server/api-contracts/index.ts"]
|
|
23
|
+
"@contracts": ["../dashboard-server/api-contracts/index.ts"],
|
|
24
|
+
"@pricing": ["../../src/pricing.ts"]
|
|
24
25
|
}
|
|
25
26
|
},
|
|
26
|
-
"include": ["src/**/*.ts", "src/**/*.tsx"],
|
|
27
|
+
"include": ["src/**/*.ts", "src/**/*.tsx", "../../src/pricing.ts"],
|
|
27
28
|
"exclude": ["node_modules", "dist"]
|
|
28
29
|
}
|
|
@@ -33,6 +33,8 @@ export default defineConfig({
|
|
|
33
33
|
"@contracts": fileURLToPath(
|
|
34
34
|
new URL("../dashboard-server/api-contracts", import.meta.url),
|
|
35
35
|
),
|
|
36
|
+
// Shared pricing module (computeCacheSavings, constants).
|
|
37
|
+
"@pricing": fileURLToPath(new URL("../../src/pricing.ts", import.meta.url)),
|
|
36
38
|
},
|
|
37
39
|
},
|
|
38
40
|
});
|
|
@@ -15,6 +15,8 @@ import type { IndexesIndexRow, IndexesSummaryResponse } from "./multi-repo.js";
|
|
|
15
15
|
import type { GameStateResponse } from "./game.js";
|
|
16
16
|
import type { SseEvent } from "./index.js";
|
|
17
17
|
import type { ProviderCacheResponse } from "./provider-cache.js";
|
|
18
|
+
import type { MemoryStatusResponse } from "./memory.js";
|
|
19
|
+
import type { SetupStatusResponse, SetupDetectResponse } from "./setup.js";
|
|
18
20
|
import type {
|
|
19
21
|
TurnsResponse,
|
|
20
22
|
ConversationTurnsResponse,
|
|
@@ -586,15 +588,21 @@ export const ENDPOINTS = {
|
|
|
586
588
|
schemaHealth: {
|
|
587
589
|
method: "GET",
|
|
588
590
|
path: "/api/maintenance/schema-health",
|
|
589
|
-
description:
|
|
591
|
+
description:
|
|
592
|
+
"SCHEMA_VERSION, PRAGMA integrity_check, FK check, and per-column audit.",
|
|
590
593
|
} as const satisfies EndpointDef<"GET", undefined, SchemaHealthResponse>,
|
|
591
594
|
|
|
592
595
|
/** POST /api/maintenance/action — Trigger a maintenance action. */
|
|
593
596
|
maintenanceAction: {
|
|
594
597
|
method: "POST",
|
|
595
598
|
path: "/api/maintenance/action",
|
|
596
|
-
description:
|
|
597
|
-
|
|
599
|
+
description:
|
|
600
|
+
"Run vacuum, checkpoint, reindex, fts5-rebuild, reconcile-dedup, prune, or integrity-check.",
|
|
601
|
+
} as const satisfies EndpointDef<
|
|
602
|
+
"POST",
|
|
603
|
+
MaintenanceAction,
|
|
604
|
+
MaintenanceActionResult
|
|
605
|
+
>,
|
|
598
606
|
|
|
599
607
|
// ─── Provider Cache (Sprint A.2) ─────────────────────────────────
|
|
600
608
|
|
|
@@ -606,4 +614,29 @@ export const ENDPOINTS = {
|
|
|
606
614
|
"Lifetime provider prompt cache hit-rate aggregates + dollar savings estimate.",
|
|
607
615
|
} as const satisfies EndpointDef<"GET", undefined, ProviderCacheResponse>,
|
|
608
616
|
|
|
617
|
+
// ─── Memory Effectiveness (S53B) ───────────────────────────────────────
|
|
618
|
+
|
|
619
|
+
/** GET /api/memory-status — Memory store aggregate statistics. */
|
|
620
|
+
memoryStatus: {
|
|
621
|
+
method: "GET",
|
|
622
|
+
path: "/api/memory-status",
|
|
623
|
+
description:
|
|
624
|
+
"Memory store statistics: total count, 30-day window, top-N stable memories, avg recall score.",
|
|
625
|
+
} as const satisfies EndpointDef<"GET", undefined, MemoryStatusResponse>,
|
|
626
|
+
|
|
627
|
+
/** GET /api/setup-status — Current embedder configuration. */
|
|
628
|
+
setupStatus: {
|
|
629
|
+
method: "GET",
|
|
630
|
+
path: "/api/setup-status",
|
|
631
|
+
description:
|
|
632
|
+
"Current embedder configuration (which embedder is active, embedding URL, cache, MiniLM flag).",
|
|
633
|
+
} as const satisfies EndpointDef<"GET", undefined, SetupStatusResponse>,
|
|
634
|
+
|
|
635
|
+
/** GET /api/setup-detect — Detect available local embedder backends. */
|
|
636
|
+
setupDetect: {
|
|
637
|
+
method: "GET",
|
|
638
|
+
path: "/api/setup-detect",
|
|
639
|
+
description:
|
|
640
|
+
"Best-effort detection of local embedder backends (ollama, llama.cpp, ONNX) available on the machine.",
|
|
641
|
+
} as const satisfies EndpointDef<"GET", undefined, SetupDetectResponse>,
|
|
609
642
|
} as const;
|
|
@@ -147,6 +147,7 @@ export type {
|
|
|
147
147
|
export type {
|
|
148
148
|
ProviderCacheSavings,
|
|
149
149
|
ProviderCacheResponse,
|
|
150
|
+
ProviderCacheByModel,
|
|
150
151
|
} from "./provider-cache.js";
|
|
151
152
|
|
|
152
153
|
export { ENDPOINTS } from "./endpoints.js";
|
|
@@ -202,3 +203,9 @@ export type {
|
|
|
202
203
|
PruneTurnsResponse,
|
|
203
204
|
TopicMemoriesResponse,
|
|
204
205
|
} from "./turns.js";
|
|
206
|
+
|
|
207
|
+
// S53B — memory effectiveness stats
|
|
208
|
+
export type { MemoryStatusResponse, MemoryStatsTopMemory } from "./memory.js";
|
|
209
|
+
|
|
210
|
+
// Setup wizard — embedder configuration + backend detection
|
|
211
|
+
export type { SetupStatusResponse, SetupDetectResponse, DetectResult, OllamaDetectResult } from "./setup.js";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* api-contracts/memory.ts — Memory effectiveness stats contract (S53B).
|
|
3
|
+
*
|
|
4
|
+
* Response shape for GET /api/memory-status: aggregate memory-store statistics
|
|
5
|
+
* including total count, 30-day window, top-N stable memories by recall, and
|
|
6
|
+
* average recall score.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export interface MemoryStatsTopMemory {
|
|
10
|
+
readonly id: number;
|
|
11
|
+
readonly text: string;
|
|
12
|
+
/** Number of times the memory was injected at a turn (turn_recall.source='memory'). */
|
|
13
|
+
readonly recallCount: number;
|
|
14
|
+
/** Unix timestamp (seconds) of last recall, or null if never. */
|
|
15
|
+
readonly lastRecalledAt: number | null;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** Response body for GET /api/memory-status. */
|
|
19
|
+
export interface MemoryStatusResponse {
|
|
20
|
+
readonly totalMemories: number;
|
|
21
|
+
/** Memories created within the last 30 days. */
|
|
22
|
+
readonly memoriesInLast30Days: number;
|
|
23
|
+
/** Top-N memories sorted by recallCount descending. */
|
|
24
|
+
readonly topStableMemories: MemoryStatsTopMemory[];
|
|
25
|
+
/** Mean recallCount across all recalled memories (0 when none). */
|
|
26
|
+
readonly avgRecallScore: number;
|
|
27
|
+
}
|