pi-mega-compact 0.11.4 → 0.11.6
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/cache-stripes.js +8 -0
- package/dist/extensions/dashboard-server/api-contracts/endpoints.js +32 -0
- package/dist/extensions/dashboard-server/api-contracts/memory-map.js +1 -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 +135 -47
- package/dist/extensions/dashboard-server/routes-game.js +3 -0
- package/dist/extensions/dashboard-server/routes-memory-map.js +50 -0
- 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 +267 -0
- package/dist/extensions/dashboard-server/routes.js +4 -0
- package/dist/extensions/dashboard-server/server.js +13 -1
- package/dist/extensions/mega-commands.js +189 -1
- package/dist/extensions/mega-compact.js +5 -0
- package/dist/extensions/mega-config.js +7 -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 +45 -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 +134 -2
- package/dist/extensions/mega-events/recall-tail.js +59 -0
- package/dist/extensions/mega-events/separated-prompt.js +248 -0
- package/dist/extensions/mega-events/session-handlers.js +15 -8
- package/dist/extensions/mega-runtime/env-loader.js +56 -0
- package/dist/extensions/mega-runtime/reset-runtime.js +6 -0
- package/dist/extensions/mega-runtime/runtime-snapshot.js +1 -0
- package/dist/extensions/mega-runtime/runtime.js +7 -0
- package/dist/extensions/mega-runtime/snapshot.js +1 -0
- package/dist/extensions/mega-runtime/widget.js +5 -0
- package/dist/src/cache-stripe-impl.js +288 -0
- package/dist/src/cache-stripe.js +11 -0
- package/dist/src/config/stopwords.js +24 -0
- package/dist/src/config.js +17 -0
- package/dist/src/embedder.js +41 -2
- package/dist/src/memoryGraph.js +299 -0
- package/dist/src/memoryStats.js +75 -0
- package/dist/src/monitoring.js +13 -0
- package/dist/src/prefix-break.js +43 -0
- package/dist/src/pricing.js +1 -1
- package/dist/src/queryExpansion.js +163 -0
- package/dist/src/queryReformulation/cache.js +123 -0
- package/dist/src/queryReformulation/rrf.js +29 -0
- package/dist/src/queryReformulation/tfidf.js +61 -0
- package/dist/src/queryReformulation/vagueness.js +33 -0
- package/dist/src/queryReformulation.js +225 -0
- package/dist/src/recallMetrics.js +258 -0
- package/dist/src/store/sqlite/cache-stripes.js +133 -0
- package/dist/src/store/sqlite/fts5-search.js +68 -0
- package/dist/src/store/sqlite/perf-samples.js +145 -16
- package/dist/src/store/sqlite/schema.js +60 -1
- package/dist/src/store/sqlite.js +1 -0
- 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 +55 -10
- package/dist/src/tiered-router/types.js +18 -0
- package/dist/src/tieredRouter.js +421 -0
- package/dist/src/vectorStore.js +8 -6
- package/extensions/dashboard-client/dist/assets/{AchievementTiles-vEo2MtE2.js → AchievementTiles-DR9cLGDL.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{AchievementTiles-vEo2MtE2.js.map → AchievementTiles-DR9cLGDL.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/AchievementsTab-svNUgJ1e.js +2 -0
- package/extensions/dashboard-client/dist/assets/{AchievementsTab-DjxfYrDc.js.map → AchievementsTab-svNUgJ1e.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/CacheTab-ASwhOMjR.js +2 -0
- package/extensions/dashboard-client/dist/assets/CacheTab-ASwhOMjR.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{ConfigTab-Cm6ymbmx.js → ConfigTab-CmmWheuW.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{ConfigTab-Cm6ymbmx.js.map → ConfigTab-CmmWheuW.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{EventsTab-DXWl_YzI.js → EventsTab-CFE7jLsa.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{EventsTab-DXWl_YzI.js.map → EventsTab-CFE7jLsa.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/GameTab-CJAX_th_.js +2 -0
- package/extensions/dashboard-client/dist/assets/{GameTab-BLDudcO5.js.map → GameTab-CJAX_th_.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{MaintenanceTab-DLkKCztn.js → MaintenanceTab-P4SUsvMf.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{MaintenanceTab-DLkKCztn.js.map → MaintenanceTab-P4SUsvMf.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/MemoryMapTab-BBiH76eF.js +2 -0
- package/extensions/dashboard-client/dist/assets/MemoryMapTab-BBiH76eF.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{MetricsTab-Cq4u-rZF.js → MetricsTab-CHQscixy.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{MetricsTab-Cq4u-rZF.js.map → MetricsTab-CHQscixy.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/OverviewTab-DBs4DJdd.js +2 -0
- package/extensions/dashboard-client/dist/assets/{OverviewTab-D4kGvsiQ.js.map → OverviewTab-DBs4DJdd.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/ReposTab-DeFz76L5.js +2 -0
- package/extensions/dashboard-client/dist/assets/ReposTab-DeFz76L5.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{SessionsTab-DZC2-GCn.js → SessionsTab-BWNsj1OB.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{SessionsTab-DZC2-GCn.js.map → SessionsTab-BWNsj1OB.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/SetupTab-uS6A0xmw.js +2 -0
- package/extensions/dashboard-client/dist/assets/SetupTab-uS6A0xmw.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/TimeSavedCard-CiqCOQuL.js +2 -0
- package/extensions/dashboard-client/dist/assets/TimeSavedCard-CiqCOQuL.js.map +1 -0
- package/extensions/dashboard-client/dist/assets/{TopicsTab-01G71hv1.js → TopicsTab-BWWQxltv.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{TopicsTab-01G71hv1.js.map → TopicsTab-BWWQxltv.js.map} +1 -1
- package/extensions/dashboard-client/dist/assets/{TurnsTab-DLRg0LZT.js → TurnsTab-CVz4f4-o.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{TurnsTab-DLRg0LZT.js.map → TurnsTab-CVz4f4-o.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-CUNn22iV.css +1 -0
- package/extensions/dashboard-client/dist/assets/index-DrktNOoT.js +42 -0
- package/extensions/dashboard-client/dist/assets/index-DrktNOoT.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-Bf5LOLSi.js} +2 -2
- package/extensions/dashboard-client/dist/assets/{useSSE-BBYt5UPB.js.map → useSSE-Bf5LOLSi.js.map} +1 -1
- package/extensions/dashboard-client/dist/index.html +2 -2
- package/extensions/dashboard-client/src/App.tsx +28 -8
- package/extensions/dashboard-client/src/api/client.ts +29 -0
- package/extensions/dashboard-client/src/components/ActiveReposTable.tsx +21 -12
- package/extensions/dashboard-client/src/components/CacheHitRateTrendCard.tsx +100 -0
- 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/components/StripeDistributionCard.tsx +110 -0
- package/extensions/dashboard-client/src/components/TabBar.tsx +49 -4
- package/extensions/dashboard-client/src/main.tsx +1 -0
- package/extensions/dashboard-client/src/styles/base.css +30 -0
- package/extensions/dashboard-client/src/styles/cache.css +167 -0
- package/extensions/dashboard-client/src/tabs/CacheTab.tsx +75 -12
- package/extensions/dashboard-client/src/tabs/MemoryMapTab.tsx +440 -0
- package/extensions/dashboard-client/src/tabs/SetupTab.tsx +418 -0
- package/extensions/dashboard-client/tsconfig.json +3 -2
- package/extensions/dashboard-client/vite.config.ts +2 -0
- package/extensions/dashboard-server/api-contracts/cache-stripes.ts +49 -0
- package/extensions/dashboard-server/api-contracts/endpoints.ts +66 -3
- package/extensions/dashboard-server/api-contracts/index.ts +22 -0
- package/extensions/dashboard-server/api-contracts/memory-map.ts +50 -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 +80 -0
- package/extensions/dashboard-server/index-reader.ts +138 -121
- package/extensions/dashboard-server/routes-cache.ts +186 -75
- package/extensions/dashboard-server/routes-game.ts +3 -0
- package/extensions/dashboard-server/routes-memory-map.ts +105 -0
- 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 +293 -0
- package/extensions/dashboard-server/routes.ts +4 -0
- package/extensions/dashboard-server/server.ts +12 -0
- package/extensions/mega-commands.ts +211 -1
- package/extensions/mega-compact.ts +5 -0
- package/extensions/mega-config.ts +27 -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 +53 -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 +190 -6
- package/extensions/mega-events/recall-tail.ts +88 -0
- package/extensions/mega-events/separated-prompt.ts +329 -0
- package/extensions/mega-events/session-handlers.ts +14 -7
- package/extensions/mega-runtime/env-loader.ts +55 -0
- package/extensions/mega-runtime/helpers.ts +14 -0
- package/extensions/mega-runtime/reset-runtime.ts +6 -0
- package/extensions/mega-runtime/runtime-snapshot.ts +1 -0
- package/extensions/mega-runtime/runtime.ts +7 -0
- package/extensions/mega-runtime/snapshot.ts +6 -0
- package/extensions/mega-runtime/widget-types.ts +3 -0
- package/extensions/mega-runtime/widget.ts +5 -0
- package/package.json +5 -2
- package/src/cache-stripe-impl.ts +385 -0
- package/src/cache-stripe.ts +18 -0
- package/src/config/stopwords.ts +25 -0
- package/src/config.ts +26 -0
- package/src/embedder.ts +42 -2
- package/src/memoryGraph.ts +438 -0
- package/src/memoryStats.ts +107 -0
- package/src/monitoring.ts +35 -0
- package/src/prefix-break.ts +83 -0
- package/src/pricing.ts +2 -2
- package/src/queryExpansion.ts +206 -0
- package/src/queryReformulation/cache.ts +169 -0
- package/src/queryReformulation/rrf.ts +51 -0
- package/src/queryReformulation/tfidf.ts +79 -0
- package/src/queryReformulation/vagueness.ts +38 -0
- package/src/queryReformulation.ts +355 -0
- package/src/recallMetrics.ts +388 -0
- package/src/store/sqlite/cache-stripes.ts +196 -0
- package/src/store/sqlite/fts5-search.ts +90 -0
- package/src/store/sqlite/perf-samples.ts +218 -23
- package/src/store/sqlite/schema.ts +60 -1
- package/src/store/sqlite.ts +1 -0
- 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 +71 -11
- package/src/tiered-router/types.ts +64 -0
- package/src/tieredRouter.ts +489 -0
- package/src/vectorStore.ts +9 -5
- 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/GameTab-BLDudcO5.js +0 -2
- 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-BEdKlpAB.css +0 -1
- package/extensions/dashboard-client/dist/assets/index-BX0bcgLu.js +0 -42
- 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,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dashboard-client/src/components/StripeDistributionCard.tsx — Cache stripe
|
|
3
|
+
* distribution visualization (A3, PLAN_V2 Phase 4).
|
|
4
|
+
*
|
|
5
|
+
* Renders a horizontal bar chart of stripe buckets (0–4) with stability
|
|
6
|
+
* indicators, plus a health-score summary box.
|
|
7
|
+
*
|
|
8
|
+
* Uses only CSS-based bar rendering — no external charting dependencies.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type React from "react";
|
|
12
|
+
import type { CacheStripesResponse } from "@contracts";
|
|
13
|
+
import { fmtPctFromFraction } from "../utils/format";
|
|
14
|
+
|
|
15
|
+
const STRIPE_COLORS = [
|
|
16
|
+
"ov-bar-green", // 0 permanent
|
|
17
|
+
"ov-bar-blue", // 1 epoch
|
|
18
|
+
"ov-bar-teal", // 2 topic
|
|
19
|
+
"ov-bar-yellow", // 3 thread
|
|
20
|
+
"ov-bar-gray", // 4 volatile
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
const STRIPE_LABELS = [
|
|
24
|
+
"Permanent",
|
|
25
|
+
"Epoch",
|
|
26
|
+
"Topic",
|
|
27
|
+
"Thread",
|
|
28
|
+
"Volatile",
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
const HEALTH_LABEL_COLOR: Record<string, string> = {
|
|
32
|
+
good: "ov-text-green",
|
|
33
|
+
fair: "ov-text-yellow",
|
|
34
|
+
degraded: "ov-text-orange",
|
|
35
|
+
poor: "ov-text-red",
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export interface StripeDistributionCardProps {
|
|
39
|
+
data: CacheStripesResponse;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function StripeDistributionCard({
|
|
43
|
+
data,
|
|
44
|
+
}: StripeDistributionCardProps): React.ReactElement {
|
|
45
|
+
const maxCount = Math.max(...data.buckets.map((b) => b.count), 1);
|
|
46
|
+
const healthColor = HEALTH_LABEL_COLOR[data.health.label] ?? "ov-text-gray";
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<div className="ov-card">
|
|
50
|
+
<h3 className="ov-card-title">Cache Stripe Distribution</h3>
|
|
51
|
+
|
|
52
|
+
{/* Health score summary */}
|
|
53
|
+
<div className="ov-stripe-health-summary">
|
|
54
|
+
<span className={`ov-stripe-health-badge ${healthColor}`}>
|
|
55
|
+
{data.health.label}
|
|
56
|
+
</span>
|
|
57
|
+
<span className="ov-stripe-health-score">
|
|
58
|
+
{fmtPctFromFraction(data.health.score)}
|
|
59
|
+
</span>
|
|
60
|
+
<span className="ov-stripe-churn">
|
|
61
|
+
Churn: {fmtPctFromFraction(data.health.churnRate)}
|
|
62
|
+
</span>
|
|
63
|
+
<span className="ov-stripe-total">
|
|
64
|
+
{data.totalChunks} total chunks
|
|
65
|
+
</span>
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
{/* Bar chart — one row per stripe */}
|
|
69
|
+
<div className="ov-stripe-bars">
|
|
70
|
+
{data.buckets.map((bucket) => {
|
|
71
|
+
const pct =
|
|
72
|
+
maxCount > 0
|
|
73
|
+
? Math.max(0, Math.min(100, (bucket.count / maxCount) * 100))
|
|
74
|
+
: 0;
|
|
75
|
+
const colorClass =
|
|
76
|
+
STRIPE_COLORS[bucket.stripe] ?? "ov-bar-gray";
|
|
77
|
+
const label =
|
|
78
|
+
bucket.label || (STRIPE_LABELS[bucket.stripe] ?? `Stripe ${bucket.stripe}`);
|
|
79
|
+
return (
|
|
80
|
+
<div key={bucket.stripe} className="ov-stripe-row">
|
|
81
|
+
<span className="ov-stripe-label" title={label}>
|
|
82
|
+
{label}
|
|
83
|
+
</span>
|
|
84
|
+
<div className="ov-bar-track">
|
|
85
|
+
<div
|
|
86
|
+
className={`ov-bar-fill ${colorClass}`}
|
|
87
|
+
style={{ width: `${pct}%` }}
|
|
88
|
+
/>
|
|
89
|
+
</div>
|
|
90
|
+
<span className="ov-stripe-count">{bucket.count}</span>
|
|
91
|
+
<span
|
|
92
|
+
className="ov-stripe-stability"
|
|
93
|
+
title={`min ${fmtPctFromFraction(bucket.minStability)} / max ${fmtPctFromFraction(bucket.maxStability)}`}
|
|
94
|
+
>
|
|
95
|
+
{fmtPctFromFraction(bucket.avgStability)}
|
|
96
|
+
</span>
|
|
97
|
+
</div>
|
|
98
|
+
);
|
|
99
|
+
})}
|
|
100
|
+
</div>
|
|
101
|
+
|
|
102
|
+
{/* Epoch info */}
|
|
103
|
+
<div className="ov-stripe-footer">
|
|
104
|
+
Epoch: {data.epochId ?? "—"}
|
|
105
|
+
·
|
|
106
|
+
Dominant tier: {fmtPctFromFraction(data.health.dominantTier)}
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
);
|
|
110
|
+
}
|
|
@@ -1,23 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* dashboard-client/src/components/TabBar.tsx — tab navigation.
|
|
2
|
+
* dashboard-client/src/components/TabBar.tsx — tab navigation with Advanced collapse.
|
|
3
|
+
*
|
|
4
|
+
* PRIMARY_TABS are always visible. The remaining tabs collapse behind an
|
|
5
|
+
* "Advanced" toggle button.
|
|
3
6
|
*/
|
|
4
7
|
|
|
8
|
+
import React, { useState } from "react";
|
|
5
9
|
import type { TabId } from "../App";
|
|
6
10
|
|
|
7
11
|
export interface TabBarProps {
|
|
8
|
-
|
|
12
|
+
primaryTabs: Array<{ id: TabId; label: string }>;
|
|
13
|
+
advancedTabs: Array<{ id: TabId; label: string }>;
|
|
14
|
+
advancedTabIds: Set<TabId>;
|
|
9
15
|
active: TabId;
|
|
10
16
|
onTabChange: (id: TabId) => void;
|
|
11
17
|
}
|
|
12
18
|
|
|
13
19
|
export function TabBar({
|
|
14
|
-
|
|
20
|
+
primaryTabs,
|
|
21
|
+
advancedTabs,
|
|
22
|
+
advancedTabIds,
|
|
15
23
|
active,
|
|
16
24
|
onTabChange,
|
|
17
25
|
}: TabBarProps): React.ReactElement {
|
|
26
|
+
const [advancedOpen, setAdvancedOpen] = useState(
|
|
27
|
+
() => advancedTabIds.has(active), // start open if an advanced tab is active
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
const isAdvancedActive = advancedTabIds.has(active);
|
|
31
|
+
|
|
18
32
|
return (
|
|
19
33
|
<nav className="tab-bar" role="tablist">
|
|
20
|
-
{
|
|
34
|
+
{primaryTabs.map((tab) => (
|
|
21
35
|
<button
|
|
22
36
|
key={tab.id}
|
|
23
37
|
type="button"
|
|
@@ -29,6 +43,37 @@ export function TabBar({
|
|
|
29
43
|
{tab.label}
|
|
30
44
|
</button>
|
|
31
45
|
))}
|
|
46
|
+
|
|
47
|
+
<button
|
|
48
|
+
type="button"
|
|
49
|
+
className="advanced-toggle"
|
|
50
|
+
aria-expanded={advancedOpen}
|
|
51
|
+
onClick={() => setAdvancedOpen((o) => !o)}
|
|
52
|
+
>
|
|
53
|
+
Advanced {advancedOpen ? "▲" : "▼"}
|
|
54
|
+
</button>
|
|
55
|
+
|
|
56
|
+
{advancedOpen && (
|
|
57
|
+
<div className="advanced-tabs">
|
|
58
|
+
{advancedTabs.map((tab) => (
|
|
59
|
+
<button
|
|
60
|
+
key={tab.id}
|
|
61
|
+
type="button"
|
|
62
|
+
role="tab"
|
|
63
|
+
aria-selected={active === tab.id}
|
|
64
|
+
className={
|
|
65
|
+
active === tab.id ? "active" : ""
|
|
66
|
+
}
|
|
67
|
+
onClick={() => {
|
|
68
|
+
onTabChange(tab.id);
|
|
69
|
+
// Keep the panel open so users can browse.
|
|
70
|
+
}}
|
|
71
|
+
>
|
|
72
|
+
{tab.label}
|
|
73
|
+
</button>
|
|
74
|
+
))}
|
|
75
|
+
</div>
|
|
76
|
+
)}
|
|
32
77
|
</nav>
|
|
33
78
|
);
|
|
34
79
|
}
|
|
@@ -93,6 +93,36 @@ body {
|
|
|
93
93
|
color: var(--text);
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
+
/* Advanced toggle — visually same as a tab button but toggles open/closed */
|
|
97
|
+
.tab-bar .advanced-toggle {
|
|
98
|
+
background: none;
|
|
99
|
+
border: none;
|
|
100
|
+
color: var(--muted);
|
|
101
|
+
padding: 8px 14px;
|
|
102
|
+
cursor: pointer;
|
|
103
|
+
font-size: clamp(12px, 0.85vw, 14px);
|
|
104
|
+
border-bottom: 2px solid transparent;
|
|
105
|
+
white-space: nowrap;
|
|
106
|
+
margin-left: 6px;
|
|
107
|
+
}
|
|
108
|
+
.tab-bar .advanced-toggle:hover {
|
|
109
|
+
color: var(--text);
|
|
110
|
+
}
|
|
111
|
+
.tab-bar .advanced-toggle[aria-expanded="true"] {
|
|
112
|
+
color: var(--text);
|
|
113
|
+
border-bottom-color: var(--border);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/* Wrapper for the advanced-tab row — appears underneath on a fresh line */
|
|
117
|
+
.tab-bar .advanced-tabs {
|
|
118
|
+
display: flex;
|
|
119
|
+
gap: 4px;
|
|
120
|
+
flex-basis: 100%;
|
|
121
|
+
border-top: 1px dashed var(--border);
|
|
122
|
+
padding-top: 6px;
|
|
123
|
+
margin-top: -1px;
|
|
124
|
+
}
|
|
125
|
+
|
|
96
126
|
.dashboard-content {
|
|
97
127
|
min-height: 400px;
|
|
98
128
|
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dashboard-client/src/styles/cache.css — Cache tab styles (B.3 + A3).
|
|
3
|
+
*
|
|
4
|
+
* Stripe distribution bars, sparkline trend chart, health badge, and
|
|
5
|
+
* per-cache-section layout. All colors use CSS variables from base.css.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/* ─── Stripe Distribution Card ─────────────────────────────────────────── */
|
|
9
|
+
|
|
10
|
+
.ov-stripe-health-summary {
|
|
11
|
+
display: flex;
|
|
12
|
+
gap: 12px;
|
|
13
|
+
align-items: center;
|
|
14
|
+
margin-bottom: 12px;
|
|
15
|
+
font-size: clamp(11px, 0.85vw, 14px);
|
|
16
|
+
flex-wrap: wrap;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.ov-stripe-health-badge {
|
|
20
|
+
display: inline-block;
|
|
21
|
+
padding: 2px 10px;
|
|
22
|
+
border-radius: 10px;
|
|
23
|
+
background: var(--panel);
|
|
24
|
+
border: 1px solid var(--border);
|
|
25
|
+
font-weight: 600;
|
|
26
|
+
text-transform: capitalize;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.ov-text-green { color: var(--ok); }
|
|
30
|
+
.ov-text-yellow { color: var(--warn); }
|
|
31
|
+
.ov-text-orange { color: #d4761e; }
|
|
32
|
+
.ov-text-red { color: var(--err); }
|
|
33
|
+
.ov-text-gray { color: var(--muted); }
|
|
34
|
+
|
|
35
|
+
.ov-stripe-health-score,
|
|
36
|
+
.ov-stripe-churn,
|
|
37
|
+
.ov-stripe-total {
|
|
38
|
+
color: var(--muted);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Bar chart rows */
|
|
42
|
+
.ov-stripe-bars {
|
|
43
|
+
display: flex;
|
|
44
|
+
flex-direction: column;
|
|
45
|
+
gap: 6px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.ov-stripe-row {
|
|
49
|
+
display: grid;
|
|
50
|
+
grid-template-columns: 80px 1fr 40px 48px;
|
|
51
|
+
align-items: center;
|
|
52
|
+
gap: 8px;
|
|
53
|
+
font-size: clamp(11px, 0.8vw, 13px);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.ov-stripe-label {
|
|
57
|
+
overflow: hidden;
|
|
58
|
+
text-overflow: ellipsis;
|
|
59
|
+
white-space: nowrap;
|
|
60
|
+
color: var(--text);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.ov-bar-track {
|
|
64
|
+
height: 18px;
|
|
65
|
+
background: var(--bg);
|
|
66
|
+
border-radius: 4px;
|
|
67
|
+
overflow: hidden;
|
|
68
|
+
position: relative;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.ov-bar-fill {
|
|
72
|
+
height: 100%;
|
|
73
|
+
border-radius: 4px;
|
|
74
|
+
transition: width 0.5s ease;
|
|
75
|
+
min-width: 2px;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.ov-bar-green { background: var(--ok); }
|
|
79
|
+
.ov-bar-blue { background: var(--accent); }
|
|
80
|
+
.ov-bar-teal { background: #3d9cb0; }
|
|
81
|
+
.ov-bar-yellow { background: var(--warn); }
|
|
82
|
+
.ov-bar-gray { background: var(--muted); }
|
|
83
|
+
.ov-bar-red { background: var(--err); }
|
|
84
|
+
.ov-bar-orange { background: #d4761e; }
|
|
85
|
+
|
|
86
|
+
.ov-bar-latest {
|
|
87
|
+
box-shadow: 0 0 6px rgba(255, 255, 255, 0.5);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.ov-stripe-count {
|
|
91
|
+
text-align: right;
|
|
92
|
+
color: var(--text);
|
|
93
|
+
font-variant-numeric: tabular-nums;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.ov-stripe-stability {
|
|
97
|
+
color: var(--muted);
|
|
98
|
+
font-size: clamp(10px, 0.75vw, 12px);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.ov-stripe-footer {
|
|
102
|
+
margin-top: 10px;
|
|
103
|
+
font-size: clamp(10px, 0.75vw, 12px);
|
|
104
|
+
color: var(--muted);
|
|
105
|
+
display: flex;
|
|
106
|
+
gap: 8px;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* ─── Hit-Rate Trend Card ──────────────────────────────────────────────── */
|
|
110
|
+
|
|
111
|
+
.ov-perf-summary {
|
|
112
|
+
display: flex;
|
|
113
|
+
gap: 14px;
|
|
114
|
+
align-items: center;
|
|
115
|
+
margin-bottom: 10px;
|
|
116
|
+
font-size: clamp(11px, 0.85vw, 14px);
|
|
117
|
+
flex-wrap: wrap;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.ov-perf-stat strong {
|
|
121
|
+
font-variant-numeric: tabular-nums;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* Sparkline bars */
|
|
125
|
+
.ov-sparkline {
|
|
126
|
+
display: flex;
|
|
127
|
+
align-items: flex-end;
|
|
128
|
+
gap: 3px;
|
|
129
|
+
height: 60px;
|
|
130
|
+
padding: 4px 2px;
|
|
131
|
+
margin-bottom: 6px;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.ov-sparkline-bar {
|
|
135
|
+
flex: 1;
|
|
136
|
+
min-width: 4px;
|
|
137
|
+
border-radius: 2px 2px 0 0;
|
|
138
|
+
transition: height 0.4s ease;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.ov-empty-state {
|
|
142
|
+
font-size: clamp(11px, 0.8vw, 13px);
|
|
143
|
+
color: var(--muted);
|
|
144
|
+
padding: 16px 0;
|
|
145
|
+
text-align: center;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.ov-card-footer {
|
|
149
|
+
font-size: clamp(10px, 0.75vw, 12px);
|
|
150
|
+
color: var(--muted);
|
|
151
|
+
margin-top: 4px;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/* ─── Overrides for card container ─────────────────────────────────────── */
|
|
155
|
+
|
|
156
|
+
.ov-card {
|
|
157
|
+
background: var(--panel);
|
|
158
|
+
border: 1px solid var(--border);
|
|
159
|
+
border-radius: 8px;
|
|
160
|
+
padding: clamp(8px, 1.5vw, 16px);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.ov-card-title {
|
|
164
|
+
margin: 0 0 10px;
|
|
165
|
+
font-size: clamp(13px, 0.9vw, 15px);
|
|
166
|
+
font-weight: 600;
|
|
167
|
+
}
|
|
@@ -1,22 +1,36 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* dashboard-client/src/tabs/CacheTab.tsx
|
|
2
|
+
* dashboard-client/src/tabs/CacheTab.tsx -- Cache tab (B.3 + A3).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* 1. Provider Prompt Cache
|
|
6
|
-
* 2.
|
|
4
|
+
* Sections:
|
|
5
|
+
* 1. Provider Prompt Cache -> ProviderCacheCard (/api/provider-cache)
|
|
6
|
+
* 2. Cache Stripe Distribution -> StripeDistributionCard (/api/cache-stripes)
|
|
7
|
+
* 3. Cache Hit-Rate Trend -> CacheHitRateTrendCard (/api/perf)
|
|
8
|
+
* 4. Mega-Compact Dedup Cache -> CacheHitsCard + TimeSavedCard (/api/snapshot)
|
|
7
9
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
+
* Each section fetches independently; failures in one do not affect others.
|
|
11
|
+
* 5s polling on provider cache and activity snapshot; 15s on stripes + trend.
|
|
10
12
|
*/
|
|
11
13
|
|
|
12
14
|
import type React from "react";
|
|
13
15
|
import { useCallback } from "react";
|
|
14
|
-
import type {
|
|
16
|
+
import type {
|
|
17
|
+
SnapshotResponse,
|
|
18
|
+
ProviderCacheResponse,
|
|
19
|
+
CacheStripesResponse,
|
|
20
|
+
PerfResponse,
|
|
21
|
+
} from "@contracts";
|
|
15
22
|
import { useApi } from "../hooks/useApi";
|
|
16
|
-
import {
|
|
23
|
+
import {
|
|
24
|
+
fetchSnapshot,
|
|
25
|
+
fetchProviderCache,
|
|
26
|
+
fetchCacheStripes,
|
|
27
|
+
fetchPerf,
|
|
28
|
+
} from "../api/client";
|
|
17
29
|
import { CacheHitsCard } from "../components/CacheHitsCard";
|
|
18
30
|
import { TimeSavedCard } from "../components/TimeSavedCard";
|
|
19
31
|
import { ProviderCacheCard } from "../components/ProviderCacheCard";
|
|
32
|
+
import { StripeDistributionCard } from "../components/StripeDistributionCard";
|
|
33
|
+
import { CacheHitRateTrendCard } from "../components/CacheHitRateTrendCard";
|
|
20
34
|
|
|
21
35
|
export default function CacheTab(): React.ReactElement {
|
|
22
36
|
/* --- Provider prompt cache (5s poll) --- */
|
|
@@ -29,6 +43,26 @@ export default function CacheTab(): React.ReactElement {
|
|
|
29
43
|
{ pollInterval: 5000 },
|
|
30
44
|
);
|
|
31
45
|
|
|
46
|
+
/* --- Cache stripe distribution (15s poll) --- */
|
|
47
|
+
const {
|
|
48
|
+
data: stripes,
|
|
49
|
+
loading: stripesLoading,
|
|
50
|
+
error: stripesError,
|
|
51
|
+
} = useApi<CacheStripesResponse>(
|
|
52
|
+
useCallback(() => fetchCacheStripes(), []),
|
|
53
|
+
{ pollInterval: 15000 },
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
/* --- Cache hit-rate trend from perf samples (15s poll) --- */
|
|
57
|
+
const {
|
|
58
|
+
data: perf,
|
|
59
|
+
loading: perfLoading,
|
|
60
|
+
error: perfError,
|
|
61
|
+
} = useApi<PerfResponse>(
|
|
62
|
+
useCallback(() => fetchPerf({ minutes: 30 }), []),
|
|
63
|
+
{ pollInterval: 15000 },
|
|
64
|
+
);
|
|
65
|
+
|
|
32
66
|
/* --- Dedup cache snapshot (5s poll) --- */
|
|
33
67
|
const {
|
|
34
68
|
data: snapshot,
|
|
@@ -42,11 +76,11 @@ export default function CacheTab(): React.ReactElement {
|
|
|
42
76
|
return (
|
|
43
77
|
<div className="cache-tab">
|
|
44
78
|
{/* ==============================================================
|
|
45
|
-
Section 1
|
|
79
|
+
Section 1 -- Provider Prompt Cache
|
|
46
80
|
============================================================== */}
|
|
47
81
|
<h2>Provider Prompt Cache</h2>
|
|
48
82
|
{pcLoading ? (
|
|
49
|
-
<p className="tab-stub">Loading
|
|
83
|
+
<p className="tab-stub">Loading...</p>
|
|
50
84
|
) : pcError ? (
|
|
51
85
|
<p className="tab-stub">
|
|
52
86
|
Provider cache unavailable: {pcError.message}
|
|
@@ -64,15 +98,44 @@ export default function CacheTab(): React.ReactElement {
|
|
|
64
98
|
modelLabel={providerCache.savings?.model ?? null}
|
|
65
99
|
firstTurnAt={providerCache.cache.firstTurnAt}
|
|
66
100
|
latestTurnAt={providerCache.cache.latestTurnAt}
|
|
101
|
+
byModel={providerCache.cache.byModel ?? []}
|
|
67
102
|
/>
|
|
68
103
|
) : null}
|
|
69
104
|
|
|
70
105
|
{/* ==============================================================
|
|
71
|
-
Section 2
|
|
106
|
+
Section 2 -- Cache Stripe Distribution
|
|
107
|
+
============================================================== */}
|
|
108
|
+
<h2>Cache Stripe Distribution</h2>
|
|
109
|
+
{stripesLoading ? (
|
|
110
|
+
<p className="tab-stub">Loading...</p>
|
|
111
|
+
) : stripesError ? (
|
|
112
|
+
<p className="tab-stub">
|
|
113
|
+
Cache stripe data unavailable: {stripesError.message}
|
|
114
|
+
</p>
|
|
115
|
+
) : stripes ? (
|
|
116
|
+
<StripeDistributionCard data={stripes} />
|
|
117
|
+
) : null}
|
|
118
|
+
|
|
119
|
+
{/* ==============================================================
|
|
120
|
+
Section 3 -- Cache Hit-Rate Trend
|
|
121
|
+
============================================================== */}
|
|
122
|
+
<h2>Cache Hit-Rate Trend</h2>
|
|
123
|
+
{perfLoading ? (
|
|
124
|
+
<p className="tab-stub">Loading...</p>
|
|
125
|
+
) : perfError ? (
|
|
126
|
+
<p className="tab-stub">
|
|
127
|
+
Hit-rate trend unavailable: {perfError.message}
|
|
128
|
+
</p>
|
|
129
|
+
) : perf ? (
|
|
130
|
+
<CacheHitRateTrendCard perf={perf} />
|
|
131
|
+
) : null}
|
|
132
|
+
|
|
133
|
+
{/* ==============================================================
|
|
134
|
+
Section 4 -- Mega-Compact Dedup Cache
|
|
72
135
|
============================================================== */}
|
|
73
136
|
<h2>Mega-Compact Dedup Cache</h2>
|
|
74
137
|
{snapLoading ? (
|
|
75
|
-
<p className="tab-stub">Loading
|
|
138
|
+
<p className="tab-stub">Loading...</p>
|
|
76
139
|
) : snapError ? (
|
|
77
140
|
<p className="tab-stub">Snapshot unavailable: {snapError.message}</p>
|
|
78
141
|
) : (
|