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,418 @@
|
|
|
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, SetupConfigureResponse } from "@contracts";
|
|
14
|
+
import { fetchSetupStatus, fetchSetupDetect, configureEmbedder } 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
|
+
const [configuring, setConfiguring] = useState<string | null>(null);
|
|
94
|
+
const [configResult, setConfigResult] = useState<SetupConfigureResponse | null>(null);
|
|
95
|
+
const [configError, setConfigError] = useState<string | null>(null);
|
|
96
|
+
|
|
97
|
+
const applyEmbedder = useCallback((embedder: "ollama" | "llama" | "trigram") => {
|
|
98
|
+
setConfiguring(embedder);
|
|
99
|
+
setConfigError(null);
|
|
100
|
+
setConfigResult(null);
|
|
101
|
+
configureEmbedder({ embedder })
|
|
102
|
+
.then((r) => {
|
|
103
|
+
setConfigResult(r);
|
|
104
|
+
setConfiguring(null);
|
|
105
|
+
loadStatus();
|
|
106
|
+
})
|
|
107
|
+
.catch((e: unknown) => {
|
|
108
|
+
setConfigError(e instanceof Error ? e.message : String(e));
|
|
109
|
+
setConfiguring(null);
|
|
110
|
+
});
|
|
111
|
+
}, [loadStatus]);
|
|
112
|
+
|
|
113
|
+
const loadStatus = useCallback(() => {
|
|
114
|
+
fetchSetupStatus()
|
|
115
|
+
.then(setStatus)
|
|
116
|
+
.catch((e: unknown) =>
|
|
117
|
+
setStatusError(e instanceof Error ? e.message : String(e)),
|
|
118
|
+
);
|
|
119
|
+
}, []);
|
|
120
|
+
|
|
121
|
+
const runDetect = useCallback(() => {
|
|
122
|
+
setRunningDetect(true);
|
|
123
|
+
setDetectError(null);
|
|
124
|
+
fetchSetupDetect()
|
|
125
|
+
.then((d) => {
|
|
126
|
+
setDetect(d);
|
|
127
|
+
setRunningDetect(false);
|
|
128
|
+
})
|
|
129
|
+
.catch((e: unknown) => {
|
|
130
|
+
setDetectError(e instanceof Error ? e.message : String(e));
|
|
131
|
+
setRunningDetect(false);
|
|
132
|
+
});
|
|
133
|
+
}, []);
|
|
134
|
+
|
|
135
|
+
useEffect(() => {
|
|
136
|
+
loadStatus();
|
|
137
|
+
}, [loadStatus]);
|
|
138
|
+
|
|
139
|
+
// Poll status every 30s
|
|
140
|
+
useEffect(() => {
|
|
141
|
+
const id = setInterval(loadStatus, 30000);
|
|
142
|
+
return () => clearInterval(id);
|
|
143
|
+
}, [loadStatus]);
|
|
144
|
+
|
|
145
|
+
// -----------------------------------------------------------------------
|
|
146
|
+
// Render helpers
|
|
147
|
+
// -----------------------------------------------------------------------
|
|
148
|
+
|
|
149
|
+
const embedderLabel = (e: string): string => {
|
|
150
|
+
switch (e) {
|
|
151
|
+
case "trigram":
|
|
152
|
+
return "TrigramEmbedder (heuristic, default)";
|
|
153
|
+
case "http":
|
|
154
|
+
return "HTTP Embedder (BYO localhost)";
|
|
155
|
+
case "minilm":
|
|
156
|
+
return "MiniLM (experimental)";
|
|
157
|
+
default:
|
|
158
|
+
return "Unknown";
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
const trigramWarning = status?.currentEmbedder === "trigram" && (
|
|
163
|
+
<div style={styles.warning}>
|
|
164
|
+
<strong>Note:</strong> TrigramEmbedder is a heuristic-strength default
|
|
165
|
+
embedder. It works without any setup but recall quality may be lower
|
|
166
|
+
than a dedicated embedding backend. If you notice poor recall results,
|
|
167
|
+
consider installing Ollama and running the{" "}
|
|
168
|
+
<code>/megasetup</code> command, or set{" "}
|
|
169
|
+
<code>MEGACOMPACT_EMBEDDING_URL</code> to point at your own localhost
|
|
170
|
+
embedding server.
|
|
171
|
+
</div>
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
const detectBadge = (installed: boolean): React.ReactElement => {
|
|
175
|
+
const bg = installed ? "#1a5a1a" : "#3a1a1a";
|
|
176
|
+
const color = installed ? "#4caf50" : "#f44336";
|
|
177
|
+
return (
|
|
178
|
+
<span style={{ ...styles.badge, background: bg, color }}>
|
|
179
|
+
{installed ? "Detected" : "Not found"}
|
|
180
|
+
</span>
|
|
181
|
+
);
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
// -----------------------------------------------------------------------
|
|
185
|
+
// Main render
|
|
186
|
+
// -----------------------------------------------------------------------
|
|
187
|
+
|
|
188
|
+
return (
|
|
189
|
+
<div style={styles.container}>
|
|
190
|
+
<h2 style={{ fontSize: "1.3rem", marginTop: 0, marginBottom: "1rem" }}>
|
|
191
|
+
Embedder Setup
|
|
192
|
+
</h2>
|
|
193
|
+
|
|
194
|
+
{/* Current Config Section */}
|
|
195
|
+
<div style={styles.section}>
|
|
196
|
+
<h3 style={styles.sectionTitle}>Current Embedder Configuration</h3>
|
|
197
|
+
{statusError && (
|
|
198
|
+
<p style={{ color: "#f44336", fontSize: "0.85rem" }}>
|
|
199
|
+
Error: {statusError}
|
|
200
|
+
</p>
|
|
201
|
+
)}
|
|
202
|
+
{status && (
|
|
203
|
+
<>
|
|
204
|
+
<div style={styles.row}>
|
|
205
|
+
<span style={styles.label}>Active Embedder:</span>
|
|
206
|
+
<span style={styles.value}>
|
|
207
|
+
{embedderLabel(status.currentEmbedder)}
|
|
208
|
+
</span>
|
|
209
|
+
</div>
|
|
210
|
+
<div style={styles.row}>
|
|
211
|
+
<span style={styles.label}>Embedding URL:</span>
|
|
212
|
+
<span style={styles.value}>
|
|
213
|
+
{status.embeddingUrl ?? (
|
|
214
|
+
<span style={{ color: "#888" }}>not set</span>
|
|
215
|
+
)}
|
|
216
|
+
</span>
|
|
217
|
+
</div>
|
|
218
|
+
<div style={styles.row}>
|
|
219
|
+
<span style={styles.label}>Embed Cache:</span>
|
|
220
|
+
<span style={styles.value}>
|
|
221
|
+
{status.embedCache ?? (
|
|
222
|
+
<span style={{ color: "#888" }}>not set</span>
|
|
223
|
+
)}
|
|
224
|
+
</span>
|
|
225
|
+
</div>
|
|
226
|
+
<div style={styles.row}>
|
|
227
|
+
<span style={styles.label}>MiniLM:</span>
|
|
228
|
+
<span style={styles.value}>{status.minilm ? "enabled" : "disabled"}</span>
|
|
229
|
+
</div>
|
|
230
|
+
{trigramWarning}
|
|
231
|
+
</>
|
|
232
|
+
)}
|
|
233
|
+
{!status && !statusError && (
|
|
234
|
+
<p style={{ color: "#888", fontSize: "0.85rem" }}>
|
|
235
|
+
Loading configuration...
|
|
236
|
+
</p>
|
|
237
|
+
)}
|
|
238
|
+
</div>
|
|
239
|
+
|
|
240
|
+
{/* Detection Section */}
|
|
241
|
+
<div style={styles.section}>
|
|
242
|
+
<h3 style={styles.sectionTitle}>Local Embedder Detection</h3>
|
|
243
|
+
<p style={{ fontSize: "0.85rem", color: "#a0a0c0", marginTop: 0 }}>
|
|
244
|
+
Detect which local embedding backends are available on this machine.
|
|
245
|
+
No software is installed — detection only.
|
|
246
|
+
</p>
|
|
247
|
+
|
|
248
|
+
{detect && (
|
|
249
|
+
<>
|
|
250
|
+
{/* Ollama */}
|
|
251
|
+
<div style={styles.detectRow}>
|
|
252
|
+
<span>
|
|
253
|
+
<strong>Ollama</strong>
|
|
254
|
+
</span>
|
|
255
|
+
{detect.ollama !== null ? (
|
|
256
|
+
<span>
|
|
257
|
+
{detectBadge(detect.ollama.installed)}
|
|
258
|
+
{detect.ollama.installed && (
|
|
259
|
+
<span style={{ fontSize: "0.8rem", color: "#a0a0c0", marginLeft: "0.5rem" }}>
|
|
260
|
+
{detect.ollama.running
|
|
261
|
+
? `server running, ${detect.ollama.models.length} model(s)`
|
|
262
|
+
: "server not running"}
|
|
263
|
+
</span>
|
|
264
|
+
)}
|
|
265
|
+
</span>
|
|
266
|
+
) : (
|
|
267
|
+
<span style={{ color: "#888", fontSize: "0.85rem" }}>
|
|
268
|
+
not checked
|
|
269
|
+
</span>
|
|
270
|
+
)}
|
|
271
|
+
</div>
|
|
272
|
+
|
|
273
|
+
{/* llama.cpp */}
|
|
274
|
+
<div style={styles.detectRow}>
|
|
275
|
+
<span>
|
|
276
|
+
<strong>llama.cpp</strong>
|
|
277
|
+
</span>
|
|
278
|
+
{detect.llamaCpp !== null ? (
|
|
279
|
+
<span>
|
|
280
|
+
{detectBadge(detect.llamaCpp.installed)}
|
|
281
|
+
{detect.llamaCpp.installed && detect.llamaCpp.detail && (
|
|
282
|
+
<span style={{ fontSize: "0.8rem", color: "#a0a0c0", marginLeft: "0.5rem" }}>
|
|
283
|
+
{detect.llamaCpp.detail}
|
|
284
|
+
</span>
|
|
285
|
+
)}
|
|
286
|
+
</span>
|
|
287
|
+
) : (
|
|
288
|
+
<span style={{ color: "#888", fontSize: "0.85rem" }}>
|
|
289
|
+
not checked
|
|
290
|
+
</span>
|
|
291
|
+
)}
|
|
292
|
+
</div>
|
|
293
|
+
|
|
294
|
+
{/* ONNX */}
|
|
295
|
+
<div style={styles.detectRow}>
|
|
296
|
+
<span>
|
|
297
|
+
<strong>ONNX Runtime</strong>
|
|
298
|
+
</span>
|
|
299
|
+
{detect.onnx !== null ? (
|
|
300
|
+
<span>
|
|
301
|
+
{detectBadge(detect.onnx.installed)}
|
|
302
|
+
{detect.onnx.installed && detect.onnx.detail && (
|
|
303
|
+
<span style={{ fontSize: "0.8rem", color: "#a0a0c0", marginLeft: "0.5rem" }}>
|
|
304
|
+
{detect.onnx.detail}
|
|
305
|
+
</span>
|
|
306
|
+
)}
|
|
307
|
+
</span>
|
|
308
|
+
) : (
|
|
309
|
+
<span style={{ color: "#888", fontSize: "0.85rem" }}>
|
|
310
|
+
not checked
|
|
311
|
+
</span>
|
|
312
|
+
)}
|
|
313
|
+
</div>
|
|
314
|
+
|
|
315
|
+
{detect.error && (
|
|
316
|
+
<p style={{ color: "#f44336", fontSize: "0.8rem", marginTop: "0.5rem" }}>
|
|
317
|
+
Detection error: {detect.error}
|
|
318
|
+
</p>
|
|
319
|
+
)}
|
|
320
|
+
</>
|
|
321
|
+
)}
|
|
322
|
+
|
|
323
|
+
{detectError && (
|
|
324
|
+
<p style={{ color: "#f44336", fontSize: "0.85rem" }}>
|
|
325
|
+
Error: {detectError}
|
|
326
|
+
</p>
|
|
327
|
+
)}
|
|
328
|
+
|
|
329
|
+
<div style={{ marginTop: "1rem" }}>
|
|
330
|
+
<button
|
|
331
|
+
style={styles.button}
|
|
332
|
+
onClick={runDetect}
|
|
333
|
+
disabled={runningDetect}
|
|
334
|
+
>
|
|
335
|
+
{runningDetect ? "Detecting..." : "Run Detection"}
|
|
336
|
+
</button>
|
|
337
|
+
<span style={{ fontSize: "0.8rem", color: "#888", marginLeft: "0.75rem" }}>
|
|
338
|
+
Or run <code>/megasetup</code> in the chat for an interactive wizard.
|
|
339
|
+
</span>
|
|
340
|
+
</div>
|
|
341
|
+
|
|
342
|
+
{/* Configure buttons — appear after detection runs */}
|
|
343
|
+
{detect && (
|
|
344
|
+
<div style={{ marginTop: "1rem", paddingTop: "0.75rem", borderTop: "1px solid #2a2a4e" }}>
|
|
345
|
+
<div style={{ fontSize: "0.9rem", fontWeight: 600, marginBottom: "0.5rem" }}>
|
|
346
|
+
Configure
|
|
347
|
+
</div>
|
|
348
|
+
<div style={{ display: "flex", gap: "0.5rem", flexWrap: "wrap" }}>
|
|
349
|
+
<button
|
|
350
|
+
style={{ ...styles.button, opacity: detect.ollama?.installed ? 1 : 0.4 }}
|
|
351
|
+
onClick={() => applyEmbedder("ollama")}
|
|
352
|
+
disabled={!detect.ollama?.installed || configuring !== null}
|
|
353
|
+
>
|
|
354
|
+
{configuring === "ollama" ? "Writing..." : "Use Ollama"}
|
|
355
|
+
</button>
|
|
356
|
+
<button
|
|
357
|
+
style={{ ...styles.button, opacity: detect.llamaCpp?.installed ? 1 : 0.4 }}
|
|
358
|
+
onClick={() => applyEmbedder("llama")}
|
|
359
|
+
disabled={!detect.llamaCpp?.installed || configuring !== null}
|
|
360
|
+
>
|
|
361
|
+
{configuring === "llama" ? "Writing..." : "Use llama.cpp"}
|
|
362
|
+
</button>
|
|
363
|
+
<button
|
|
364
|
+
style={{ ...styles.button, background: "#444" }}
|
|
365
|
+
onClick={() => applyEmbedder("trigram")}
|
|
366
|
+
disabled={configuring !== null}
|
|
367
|
+
>
|
|
368
|
+
{configuring === "trigram" ? "Writing..." : "Use Trigram (default)"}
|
|
369
|
+
</button>
|
|
370
|
+
</div>
|
|
371
|
+
{configResult && (
|
|
372
|
+
<div style={styles.warning}>
|
|
373
|
+
{configResult.alreadyActive
|
|
374
|
+
? "Already active — no restart needed."
|
|
375
|
+
: `Configured ${configResult.embedder}. Restart pi to activate (config written to ${configResult.envPath}).`}
|
|
376
|
+
</div>
|
|
377
|
+
)}
|
|
378
|
+
{configError && (
|
|
379
|
+
<p style={{ color: "#f44336", fontSize: "0.85rem", marginTop: "0.5rem" }}>
|
|
380
|
+
Configure error: {configError}
|
|
381
|
+
</p>
|
|
382
|
+
)}
|
|
383
|
+
</div>
|
|
384
|
+
)}
|
|
385
|
+
</div>
|
|
386
|
+
|
|
387
|
+
{/* Help Section */}
|
|
388
|
+
<div style={styles.section}>
|
|
389
|
+
<h3 style={styles.sectionTitle}>How to Upgrade</h3>
|
|
390
|
+
<ul style={{ fontSize: "0.85rem", lineHeight: 1.6, paddingLeft: "1.25rem" }}>
|
|
391
|
+
<li>
|
|
392
|
+
<strong>Ollama:</strong> Install from{" "}
|
|
393
|
+
<a
|
|
394
|
+
href="https://ollama.com"
|
|
395
|
+
style={{ color: "#6a9fff" }}
|
|
396
|
+
target="_blank"
|
|
397
|
+
rel="noopener noreferrer"
|
|
398
|
+
>
|
|
399
|
+
ollama.com
|
|
400
|
+
</a>
|
|
401
|
+
, then <code>ollama pull nomic-embed-text</code> and restart pi.
|
|
402
|
+
Set <code>MEGACOMPACT_EMBEDDING_URL=http://localhost:11434/api/embeddings</code>.
|
|
403
|
+
</li>
|
|
404
|
+
<li>
|
|
405
|
+
<strong>llama.cpp:</strong> Build or install llama.cpp, run{" "}
|
|
406
|
+
<code>llama-server</code> with an embedding model, and set
|
|
407
|
+
the URL accordingly.
|
|
408
|
+
</li>
|
|
409
|
+
<li>
|
|
410
|
+
<strong>ONNX Runtime:</strong> Install{" "}
|
|
411
|
+
<code>onnxruntime-node</code> in the project root. Not yet
|
|
412
|
+
integrated — see docs for manual setup.
|
|
413
|
+
</li>
|
|
414
|
+
</ul>
|
|
415
|
+
</div>
|
|
416
|
+
</div>
|
|
417
|
+
);
|
|
418
|
+
}
|
|
@@ -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
|
});
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* api-contracts/cache-stripes.ts — Cache stripe API contract (A3, PLAN_V2 Phase 4).
|
|
3
|
+
*
|
|
4
|
+
* Response shape for GET /api/cache-stripes: per-stripe distribution counts,
|
|
5
|
+
* average stability, and a top-level health score. Loopback-only data;
|
|
6
|
+
* zero network (PREVENT-PI-004).
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** A single stripe bucket with aggregate metadata. */
|
|
10
|
+
export interface StripeBucket {
|
|
11
|
+
/** Stripe index 0–4 (0=permanent, 1=epoch, 2=topic, 3=thread, 4=volatile). */
|
|
12
|
+
readonly stripe: number;
|
|
13
|
+
/** Human-readable label for this stripe. */
|
|
14
|
+
readonly label: string;
|
|
15
|
+
/** Number of chunks assigned to this stripe. */
|
|
16
|
+
readonly count: number;
|
|
17
|
+
/** Average stability score (0.0–1.0) within this stripe. */
|
|
18
|
+
readonly avgStability: number;
|
|
19
|
+
/** Minimum stability in this stripe. */
|
|
20
|
+
readonly minStability: number;
|
|
21
|
+
/** Maximum stability in this stripe. */
|
|
22
|
+
readonly maxStability: number;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Overall cache health assessment. */
|
|
26
|
+
export interface CacheHealthScore {
|
|
27
|
+
/** Composite health score 0.0–1.0 (1.0 = perfect). */
|
|
28
|
+
readonly score: number;
|
|
29
|
+
/** Human-readable label: "good" | "fair" | "degraded" | "poor". */
|
|
30
|
+
readonly label: string;
|
|
31
|
+
/** Dominant stability tier fraction. */
|
|
32
|
+
readonly dominantTier: number;
|
|
33
|
+
/** Stripe churn rate (0.0–1.0) — fraction of assignments changed since last epoch. */
|
|
34
|
+
readonly churnRate: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Response body for GET /api/cache-stripes. */
|
|
38
|
+
export interface CacheStripesResponse {
|
|
39
|
+
/** Per-stripe bucket arrays (always 5 entries, stripes 0–4). */
|
|
40
|
+
readonly buckets: StripeBucket[];
|
|
41
|
+
/** Overall health assessment. */
|
|
42
|
+
readonly health: CacheHealthScore;
|
|
43
|
+
/** Epoch id these assignments belong to. */
|
|
44
|
+
readonly epochId: string | null;
|
|
45
|
+
/** Timestamp (epoch ms) of the last refresh. */
|
|
46
|
+
readonly lastRefreshAt: number;
|
|
47
|
+
/** Total chunk count across all stripes. */
|
|
48
|
+
readonly totalChunks: number;
|
|
49
|
+
}
|
|
@@ -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, SetupConfigureRequest, SetupConfigureResponse } from "./setup.js";
|
|
18
20
|
import type {
|
|
19
21
|
TurnsResponse,
|
|
20
22
|
ConversationTurnsResponse,
|
|
@@ -34,6 +36,8 @@ import type {
|
|
|
34
36
|
SchemaHealthResponse,
|
|
35
37
|
} from "./maintenance.js";
|
|
36
38
|
|
|
39
|
+
import type { CacheStripesResponse } from "./cache-stripes.js";
|
|
40
|
+
|
|
37
41
|
import type {
|
|
38
42
|
GameScoreRow,
|
|
39
43
|
GameScoresQuery,
|
|
@@ -298,6 +302,14 @@ export interface PerfLatest {
|
|
|
298
302
|
readonly n: number;
|
|
299
303
|
}
|
|
300
304
|
|
|
305
|
+
/** A single cache hit rate sample with timestamp. */
|
|
306
|
+
export interface CacheHitSample {
|
|
307
|
+
/** Cache hit percentage (0–100). */
|
|
308
|
+
readonly pct: number;
|
|
309
|
+
/** Epoch ms timestamp of the sample. */
|
|
310
|
+
readonly ts: number;
|
|
311
|
+
}
|
|
312
|
+
|
|
301
313
|
/** Average + latest statistics for cache hit percentage. */
|
|
302
314
|
export interface PerfCacheHit {
|
|
303
315
|
/** Average cache hit percentage (0–100). */
|
|
@@ -306,6 +318,8 @@ export interface PerfCacheHit {
|
|
|
306
318
|
readonly latest: number;
|
|
307
319
|
/** Number of samples in the window. */
|
|
308
320
|
readonly n: number;
|
|
321
|
+
/** Raw cache hit samples with timestamps for time-series charting. */
|
|
322
|
+
readonly samples: CacheHitSample[];
|
|
309
323
|
}
|
|
310
324
|
|
|
311
325
|
/** Diagnostic counters from the live dashboard snapshot. */
|
|
@@ -586,15 +600,21 @@ export const ENDPOINTS = {
|
|
|
586
600
|
schemaHealth: {
|
|
587
601
|
method: "GET",
|
|
588
602
|
path: "/api/maintenance/schema-health",
|
|
589
|
-
description:
|
|
603
|
+
description:
|
|
604
|
+
"SCHEMA_VERSION, PRAGMA integrity_check, FK check, and per-column audit.",
|
|
590
605
|
} as const satisfies EndpointDef<"GET", undefined, SchemaHealthResponse>,
|
|
591
606
|
|
|
592
607
|
/** POST /api/maintenance/action — Trigger a maintenance action. */
|
|
593
608
|
maintenanceAction: {
|
|
594
609
|
method: "POST",
|
|
595
610
|
path: "/api/maintenance/action",
|
|
596
|
-
description:
|
|
597
|
-
|
|
611
|
+
description:
|
|
612
|
+
"Run vacuum, checkpoint, reindex, fts5-rebuild, reconcile-dedup, prune, or integrity-check.",
|
|
613
|
+
} as const satisfies EndpointDef<
|
|
614
|
+
"POST",
|
|
615
|
+
MaintenanceAction,
|
|
616
|
+
MaintenanceActionResult
|
|
617
|
+
>,
|
|
598
618
|
|
|
599
619
|
// ─── Provider Cache (Sprint A.2) ─────────────────────────────────
|
|
600
620
|
|
|
@@ -606,4 +626,47 @@ export const ENDPOINTS = {
|
|
|
606
626
|
"Lifetime provider prompt cache hit-rate aggregates + dollar savings estimate.",
|
|
607
627
|
} as const satisfies EndpointDef<"GET", undefined, ProviderCacheResponse>,
|
|
608
628
|
|
|
629
|
+
|
|
630
|
+
// ─── A3 Cache Stripes (PLAN_V2 Phase 4) ───────────────────────────
|
|
631
|
+
|
|
632
|
+
/** GET /api/cache-stripes — Per-stripe distribution + health score. */
|
|
633
|
+
cacheStripes: {
|
|
634
|
+
method: "GET",
|
|
635
|
+
path: "/api/cache-stripes",
|
|
636
|
+
description:
|
|
637
|
+
"Per-stripe distribution counts, average stability scores, and composite cache health.",
|
|
638
|
+
} as const satisfies EndpointDef<"GET", undefined, CacheStripesResponse>,
|
|
639
|
+
// ─── Memory Effectiveness (S53B) ───────────────────────────────────────
|
|
640
|
+
|
|
641
|
+
/** GET /api/memory-status — Memory store aggregate statistics. */
|
|
642
|
+
memoryStatus: {
|
|
643
|
+
method: "GET",
|
|
644
|
+
path: "/api/memory-status",
|
|
645
|
+
description:
|
|
646
|
+
"Memory store statistics: total count, 30-day window, top-N stable memories, avg recall score.",
|
|
647
|
+
} as const satisfies EndpointDef<"GET", undefined, MemoryStatusResponse>,
|
|
648
|
+
|
|
649
|
+
/** GET /api/setup-status — Current embedder configuration. */
|
|
650
|
+
setupStatus: {
|
|
651
|
+
method: "GET",
|
|
652
|
+
path: "/api/setup-status",
|
|
653
|
+
description:
|
|
654
|
+
"Current embedder configuration (which embedder is active, embedding URL, cache, MiniLM flag).",
|
|
655
|
+
} as const satisfies EndpointDef<"GET", undefined, SetupStatusResponse>,
|
|
656
|
+
|
|
657
|
+
/** GET /api/setup-detect — Detect available local embedder backends. */
|
|
658
|
+
setupDetect: {
|
|
659
|
+
method: "GET",
|
|
660
|
+
path: "/api/setup-detect",
|
|
661
|
+
description:
|
|
662
|
+
"Best-effort detection of local embedder backends (ollama, llama.cpp, ONNX) available on the machine.",
|
|
663
|
+
} as const satisfies EndpointDef<"GET", undefined, SetupDetectResponse>,
|
|
664
|
+
|
|
665
|
+
/** POST /api/setup-configure — Write embedder config to .mega-compact.env. */
|
|
666
|
+
setupConfigure: {
|
|
667
|
+
method: "POST",
|
|
668
|
+
path: "/api/setup-configure",
|
|
669
|
+
description:
|
|
670
|
+
"Write the chosen embedder configuration to .mega-compact.env (loaded at next startup). Returns whether a restart is required.",
|
|
671
|
+
} as const satisfies EndpointDef<"POST", SetupConfigureRequest, SetupConfigureResponse>,
|
|
609
672
|
} 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,24 @@ 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, SetupConfigureRequest, SetupConfigureResponse, DetectResult, OllamaDetectResult } from "./setup.js";
|
|
212
|
+
|
|
213
|
+
// S46 — memory graph (visual memory map)
|
|
214
|
+
export type {
|
|
215
|
+
MemoryMapResponse,
|
|
216
|
+
MemoryMapNode,
|
|
217
|
+
MemoryMapEdgeEntry,
|
|
218
|
+
MemoryMapQuery,
|
|
219
|
+
} from "./memory-map.js";
|
|
220
|
+
|
|
221
|
+
// A3 — cache stripe distribution + health
|
|
222
|
+
export type {
|
|
223
|
+
StripeBucket,
|
|
224
|
+
CacheHealthScore,
|
|
225
|
+
CacheStripesResponse,
|
|
226
|
+
} from "./cache-stripes.js";
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* api-contracts/memory-map.ts — Memory graph API contract (S46).
|
|
3
|
+
*
|
|
4
|
+
* Response shape for GET /api/memory-map: graph nodes, edges, and metadata.
|
|
5
|
+
* This is a read-only JSON payload consumed by the MemoryMapTab React component.
|
|
6
|
+
*/
|
|
7
|
+
import type { GraphMetadata } from "../../../src/memoryGraph.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Query parameters for GET /api/memory-map.
|
|
11
|
+
* All fields are optional.
|
|
12
|
+
*/
|
|
13
|
+
export interface MemoryMapQuery {
|
|
14
|
+
/** Filter to a single session ID. */
|
|
15
|
+
readonly sessionId?: string;
|
|
16
|
+
/** Cosine similarity threshold (0..1). Default 0.7. */
|
|
17
|
+
readonly threshold?: number;
|
|
18
|
+
/** Max semantic edges per node. Default 3. */
|
|
19
|
+
readonly maxEdgesPerNode?: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Response body for GET /api/memory-map. */
|
|
23
|
+
export interface MemoryMapResponse {
|
|
24
|
+
readonly nodes: MemoryMapNode[];
|
|
25
|
+
readonly edges: MemoryMapEdgeEntry[];
|
|
26
|
+
readonly metadata: GraphMetadata;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** A node in the response (client-safe subset — no full embedding vector). */
|
|
30
|
+
export interface MemoryMapNode {
|
|
31
|
+
readonly id: string;
|
|
32
|
+
readonly sessionId: string;
|
|
33
|
+
readonly label: string;
|
|
34
|
+
readonly summaryTruncated: string;
|
|
35
|
+
readonly tokenEstimate: number;
|
|
36
|
+
readonly timestamp: number;
|
|
37
|
+
readonly dedupStatus: string | undefined;
|
|
38
|
+
readonly raptorLevel: number;
|
|
39
|
+
readonly topicSummary: string | undefined;
|
|
40
|
+
readonly decisionCount: number;
|
|
41
|
+
readonly textSnippet: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** An edge entry in the response. */
|
|
45
|
+
export interface MemoryMapEdgeEntry {
|
|
46
|
+
readonly source: string;
|
|
47
|
+
readonly target: string;
|
|
48
|
+
readonly weight: number;
|
|
49
|
+
readonly type: "temporal" | "semantic" | "raptor_parent";
|
|
50
|
+
}
|