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.
Files changed (381) hide show
  1. package/dist/extensions/dashboard-server/api-contracts/cache-stripes.js +8 -0
  2. package/dist/extensions/dashboard-server/api-contracts/endpoints.js +32 -0
  3. package/dist/extensions/dashboard-server/api-contracts/memory-map.js +1 -0
  4. package/dist/extensions/dashboard-server/api-contracts/memory.js +8 -0
  5. package/dist/extensions/dashboard-server/api-contracts/provider-cache.js +1 -0
  6. package/dist/extensions/dashboard-server/api-contracts/setup.js +10 -0
  7. package/dist/extensions/dashboard-server/index-reader.js +6 -2
  8. package/dist/extensions/dashboard-server/routes-cache.js +135 -47
  9. package/dist/extensions/dashboard-server/routes-game.js +3 -0
  10. package/dist/extensions/dashboard-server/routes-memory-map.js +50 -0
  11. package/dist/extensions/dashboard-server/routes-memory.js +51 -0
  12. package/dist/extensions/dashboard-server/routes-repo.js +2 -2
  13. package/dist/extensions/dashboard-server/routes-setup.js +267 -0
  14. package/dist/extensions/dashboard-server/routes.js +4 -0
  15. package/dist/extensions/dashboard-server/server.js +13 -1
  16. package/dist/extensions/mega-commands.js +189 -1
  17. package/dist/extensions/mega-compact.js +5 -0
  18. package/dist/extensions/mega-config.js +7 -0
  19. package/dist/extensions/mega-events/agent-handlers.js +19 -4
  20. package/dist/extensions/mega-events/compact-handlers.js +1 -0
  21. package/dist/extensions/mega-events/context-handler.js +45 -92
  22. package/dist/extensions/mega-events/context-hwm.js +51 -0
  23. package/dist/extensions/mega-events/error-classifier.js +16 -5
  24. package/dist/extensions/mega-events/mirror-append.js +107 -0
  25. package/dist/extensions/mega-events/outage-advisor.js +7 -1
  26. package/dist/extensions/mega-events/perf-handler.js +134 -2
  27. package/dist/extensions/mega-events/recall-tail.js +59 -0
  28. package/dist/extensions/mega-events/separated-prompt.js +248 -0
  29. package/dist/extensions/mega-events/session-handlers.js +15 -8
  30. package/dist/extensions/mega-runtime/env-loader.js +56 -0
  31. package/dist/extensions/mega-runtime/reset-runtime.js +6 -0
  32. package/dist/extensions/mega-runtime/runtime-snapshot.js +1 -0
  33. package/dist/extensions/mega-runtime/runtime.js +7 -0
  34. package/dist/extensions/mega-runtime/snapshot.js +1 -0
  35. package/dist/extensions/mega-runtime/widget.js +5 -0
  36. package/dist/src/cache-stripe-impl.js +288 -0
  37. package/dist/src/cache-stripe.js +11 -0
  38. package/dist/src/config/stopwords.js +24 -0
  39. package/dist/src/config.js +17 -0
  40. package/dist/src/embedder.js +41 -2
  41. package/dist/src/memoryGraph.js +299 -0
  42. package/dist/src/memoryStats.js +75 -0
  43. package/dist/src/monitoring.js +13 -0
  44. package/dist/src/prefix-break.js +43 -0
  45. package/dist/src/pricing.js +1 -1
  46. package/dist/src/queryExpansion.js +163 -0
  47. package/dist/src/queryReformulation/cache.js +123 -0
  48. package/dist/src/queryReformulation/rrf.js +29 -0
  49. package/dist/src/queryReformulation/tfidf.js +61 -0
  50. package/dist/src/queryReformulation/vagueness.js +33 -0
  51. package/dist/src/queryReformulation.js +225 -0
  52. package/dist/src/recallMetrics.js +258 -0
  53. package/dist/src/store/sqlite/cache-stripes.js +133 -0
  54. package/dist/src/store/sqlite/fts5-search.js +68 -0
  55. package/dist/src/store/sqlite/perf-samples.js +145 -16
  56. package/dist/src/store/sqlite/schema.js +60 -1
  57. package/dist/src/store/sqlite.js +1 -0
  58. package/dist/src/store/turns/memory-store.js +8 -0
  59. package/dist/src/store/turns/sqlite-store.js +14 -3
  60. package/dist/src/store/turns/types.js +18 -1
  61. package/dist/src/store/vectorIndex.js +55 -10
  62. package/dist/src/tiered-router/types.js +18 -0
  63. package/dist/src/tieredRouter.js +421 -0
  64. package/dist/src/vectorStore.js +8 -6
  65. package/extensions/dashboard-client/dist/assets/{AchievementTiles-vEo2MtE2.js → AchievementTiles-DR9cLGDL.js} +2 -2
  66. package/extensions/dashboard-client/dist/assets/{AchievementTiles-vEo2MtE2.js.map → AchievementTiles-DR9cLGDL.js.map} +1 -1
  67. package/extensions/dashboard-client/dist/assets/AchievementsTab-svNUgJ1e.js +2 -0
  68. package/extensions/dashboard-client/dist/assets/{AchievementsTab-DjxfYrDc.js.map → AchievementsTab-svNUgJ1e.js.map} +1 -1
  69. package/extensions/dashboard-client/dist/assets/CacheTab-ASwhOMjR.js +2 -0
  70. package/extensions/dashboard-client/dist/assets/CacheTab-ASwhOMjR.js.map +1 -0
  71. package/extensions/dashboard-client/dist/assets/{ConfigTab-Cm6ymbmx.js → ConfigTab-CmmWheuW.js} +2 -2
  72. package/extensions/dashboard-client/dist/assets/{ConfigTab-Cm6ymbmx.js.map → ConfigTab-CmmWheuW.js.map} +1 -1
  73. package/extensions/dashboard-client/dist/assets/{EventsTab-DXWl_YzI.js → EventsTab-CFE7jLsa.js} +2 -2
  74. package/extensions/dashboard-client/dist/assets/{EventsTab-DXWl_YzI.js.map → EventsTab-CFE7jLsa.js.map} +1 -1
  75. package/extensions/dashboard-client/dist/assets/GameTab-CJAX_th_.js +2 -0
  76. package/extensions/dashboard-client/dist/assets/{GameTab-BLDudcO5.js.map → GameTab-CJAX_th_.js.map} +1 -1
  77. package/extensions/dashboard-client/dist/assets/{MaintenanceTab-DLkKCztn.js → MaintenanceTab-P4SUsvMf.js} +2 -2
  78. package/extensions/dashboard-client/dist/assets/{MaintenanceTab-DLkKCztn.js.map → MaintenanceTab-P4SUsvMf.js.map} +1 -1
  79. package/extensions/dashboard-client/dist/assets/MemoryMapTab-BBiH76eF.js +2 -0
  80. package/extensions/dashboard-client/dist/assets/MemoryMapTab-BBiH76eF.js.map +1 -0
  81. package/extensions/dashboard-client/dist/assets/{MetricsTab-Cq4u-rZF.js → MetricsTab-CHQscixy.js} +2 -2
  82. package/extensions/dashboard-client/dist/assets/{MetricsTab-Cq4u-rZF.js.map → MetricsTab-CHQscixy.js.map} +1 -1
  83. package/extensions/dashboard-client/dist/assets/OverviewTab-DBs4DJdd.js +2 -0
  84. package/extensions/dashboard-client/dist/assets/{OverviewTab-D4kGvsiQ.js.map → OverviewTab-DBs4DJdd.js.map} +1 -1
  85. package/extensions/dashboard-client/dist/assets/ReposTab-DeFz76L5.js +2 -0
  86. package/extensions/dashboard-client/dist/assets/ReposTab-DeFz76L5.js.map +1 -0
  87. package/extensions/dashboard-client/dist/assets/{SessionsTab-DZC2-GCn.js → SessionsTab-BWNsj1OB.js} +2 -2
  88. package/extensions/dashboard-client/dist/assets/{SessionsTab-DZC2-GCn.js.map → SessionsTab-BWNsj1OB.js.map} +1 -1
  89. package/extensions/dashboard-client/dist/assets/SetupTab-uS6A0xmw.js +2 -0
  90. package/extensions/dashboard-client/dist/assets/SetupTab-uS6A0xmw.js.map +1 -0
  91. package/extensions/dashboard-client/dist/assets/TimeSavedCard-CiqCOQuL.js +2 -0
  92. package/extensions/dashboard-client/dist/assets/TimeSavedCard-CiqCOQuL.js.map +1 -0
  93. package/extensions/dashboard-client/dist/assets/{TopicsTab-01G71hv1.js → TopicsTab-BWWQxltv.js} +2 -2
  94. package/extensions/dashboard-client/dist/assets/{TopicsTab-01G71hv1.js.map → TopicsTab-BWWQxltv.js.map} +1 -1
  95. package/extensions/dashboard-client/dist/assets/{TurnsTab-DLRg0LZT.js → TurnsTab-CVz4f4-o.js} +2 -2
  96. package/extensions/dashboard-client/dist/assets/{TurnsTab-DLRg0LZT.js.map → TurnsTab-CVz4f4-o.js.map} +1 -1
  97. package/extensions/dashboard-client/dist/assets/format-COjDIVGj.js +2 -0
  98. package/extensions/dashboard-client/dist/assets/format-COjDIVGj.js.map +1 -0
  99. package/extensions/dashboard-client/dist/assets/index-CUNn22iV.css +1 -0
  100. package/extensions/dashboard-client/dist/assets/index-DrktNOoT.js +42 -0
  101. package/extensions/dashboard-client/dist/assets/index-DrktNOoT.js.map +1 -0
  102. package/extensions/dashboard-client/dist/assets/pricing-CvE4NllQ.js +2 -0
  103. package/extensions/dashboard-client/dist/assets/pricing-CvE4NllQ.js.map +1 -0
  104. package/extensions/dashboard-client/dist/assets/{useSSE-BBYt5UPB.js → useSSE-Bf5LOLSi.js} +2 -2
  105. package/extensions/dashboard-client/dist/assets/{useSSE-BBYt5UPB.js.map → useSSE-Bf5LOLSi.js.map} +1 -1
  106. package/extensions/dashboard-client/dist/index.html +2 -2
  107. package/extensions/dashboard-client/src/App.tsx +28 -8
  108. package/extensions/dashboard-client/src/api/client.ts +29 -0
  109. package/extensions/dashboard-client/src/components/ActiveReposTable.tsx +21 -12
  110. package/extensions/dashboard-client/src/components/CacheHitRateTrendCard.tsx +100 -0
  111. package/extensions/dashboard-client/src/components/ProviderCacheCard.tsx +56 -0
  112. package/extensions/dashboard-client/src/components/SavingsByModelTable.tsx +38 -57
  113. package/extensions/dashboard-client/src/components/StripeDistributionCard.tsx +110 -0
  114. package/extensions/dashboard-client/src/components/TabBar.tsx +49 -4
  115. package/extensions/dashboard-client/src/main.tsx +1 -0
  116. package/extensions/dashboard-client/src/styles/base.css +30 -0
  117. package/extensions/dashboard-client/src/styles/cache.css +167 -0
  118. package/extensions/dashboard-client/src/tabs/CacheTab.tsx +75 -12
  119. package/extensions/dashboard-client/src/tabs/MemoryMapTab.tsx +440 -0
  120. package/extensions/dashboard-client/src/tabs/SetupTab.tsx +418 -0
  121. package/extensions/dashboard-client/tsconfig.json +3 -2
  122. package/extensions/dashboard-client/vite.config.ts +2 -0
  123. package/extensions/dashboard-server/api-contracts/cache-stripes.ts +49 -0
  124. package/extensions/dashboard-server/api-contracts/endpoints.ts +66 -3
  125. package/extensions/dashboard-server/api-contracts/index.ts +22 -0
  126. package/extensions/dashboard-server/api-contracts/memory-map.ts +50 -0
  127. package/extensions/dashboard-server/api-contracts/memory.ts +27 -0
  128. package/extensions/dashboard-server/api-contracts/multi-repo.ts +231 -231
  129. package/extensions/dashboard-server/api-contracts/provider-cache.ts +37 -0
  130. package/extensions/dashboard-server/api-contracts/setup.ts +80 -0
  131. package/extensions/dashboard-server/index-reader.ts +138 -121
  132. package/extensions/dashboard-server/routes-cache.ts +186 -75
  133. package/extensions/dashboard-server/routes-game.ts +3 -0
  134. package/extensions/dashboard-server/routes-memory-map.ts +105 -0
  135. package/extensions/dashboard-server/routes-memory.ts +63 -0
  136. package/extensions/dashboard-server/routes-repo.ts +36 -36
  137. package/extensions/dashboard-server/routes-setup.ts +293 -0
  138. package/extensions/dashboard-server/routes.ts +4 -0
  139. package/extensions/dashboard-server/server.ts +12 -0
  140. package/extensions/mega-commands.ts +211 -1
  141. package/extensions/mega-compact.ts +5 -0
  142. package/extensions/mega-config.ts +27 -0
  143. package/extensions/mega-events/agent-handlers.ts +20 -4
  144. package/extensions/mega-events/compact-handlers.ts +1 -0
  145. package/extensions/mega-events/context-handler.ts +53 -110
  146. package/extensions/mega-events/context-hwm.ts +85 -0
  147. package/extensions/mega-events/error-classifier.ts +15 -4
  148. package/extensions/mega-events/mirror-append.ts +155 -0
  149. package/extensions/mega-events/outage-advisor.ts +11 -5
  150. package/extensions/mega-events/perf-handler.ts +190 -6
  151. package/extensions/mega-events/recall-tail.ts +88 -0
  152. package/extensions/mega-events/separated-prompt.ts +329 -0
  153. package/extensions/mega-events/session-handlers.ts +14 -7
  154. package/extensions/mega-runtime/env-loader.ts +55 -0
  155. package/extensions/mega-runtime/helpers.ts +14 -0
  156. package/extensions/mega-runtime/reset-runtime.ts +6 -0
  157. package/extensions/mega-runtime/runtime-snapshot.ts +1 -0
  158. package/extensions/mega-runtime/runtime.ts +7 -0
  159. package/extensions/mega-runtime/snapshot.ts +6 -0
  160. package/extensions/mega-runtime/widget-types.ts +3 -0
  161. package/extensions/mega-runtime/widget.ts +5 -0
  162. package/package.json +5 -2
  163. package/src/cache-stripe-impl.ts +385 -0
  164. package/src/cache-stripe.ts +18 -0
  165. package/src/config/stopwords.ts +25 -0
  166. package/src/config.ts +26 -0
  167. package/src/embedder.ts +42 -2
  168. package/src/memoryGraph.ts +438 -0
  169. package/src/memoryStats.ts +107 -0
  170. package/src/monitoring.ts +35 -0
  171. package/src/prefix-break.ts +83 -0
  172. package/src/pricing.ts +2 -2
  173. package/src/queryExpansion.ts +206 -0
  174. package/src/queryReformulation/cache.ts +169 -0
  175. package/src/queryReformulation/rrf.ts +51 -0
  176. package/src/queryReformulation/tfidf.ts +79 -0
  177. package/src/queryReformulation/vagueness.ts +38 -0
  178. package/src/queryReformulation.ts +355 -0
  179. package/src/recallMetrics.ts +388 -0
  180. package/src/store/sqlite/cache-stripes.ts +196 -0
  181. package/src/store/sqlite/fts5-search.ts +90 -0
  182. package/src/store/sqlite/perf-samples.ts +218 -23
  183. package/src/store/sqlite/schema.ts +60 -1
  184. package/src/store/sqlite.ts +1 -0
  185. package/src/store/turns/memory-store.ts +10 -1
  186. package/src/store/turns/sqlite-store.ts +27 -15
  187. package/src/store/turns/types.ts +21 -0
  188. package/src/store/vectorIndex.ts +71 -11
  189. package/src/tiered-router/types.ts +64 -0
  190. package/src/tieredRouter.ts +489 -0
  191. package/src/vectorStore.ts +9 -5
  192. package/dist/extensions/conflict-scan.test.js +0 -115
  193. package/dist/extensions/dashboard-server/api-contracts.test.js +0 -884
  194. package/dist/extensions/dashboard-server/html.test.js +0 -52
  195. package/dist/extensions/dashboard-server/perf-server.test.js +0 -80
  196. package/dist/extensions/dashboard-server/routes-cache.test.js +0 -248
  197. package/dist/extensions/dashboard-server/server.test.js +0 -120
  198. package/dist/extensions/dashboard-server-s32.test.js +0 -181
  199. package/dist/extensions/dashboard-server.test.js +0 -339
  200. package/dist/extensions/mega-cache-replay.test.js +0 -400
  201. package/dist/extensions/mega-compact-s38.test.js +0 -1383
  202. package/dist/extensions/mega-compact.test.js +0 -1112
  203. package/dist/extensions/mega-events.test.js +0 -47
  204. package/dist/extensions/mega-game-cmds.test.js +0 -163
  205. package/dist/extensions/mega-runtime/snapshot.test.js +0 -127
  206. package/dist/extensions/mega-runtime/state.test.js +0 -266
  207. package/dist/extensions/mega-runtime/widget.test.js +0 -343
  208. package/dist/extensions/mega-shutdown-widget.test.js +0 -121
  209. package/dist/extensions/mega-teamrun.test.js +0 -156
  210. package/dist/extensions/mega-trim.test.js +0 -58
  211. package/dist/extensions/mega-turn-store.test.js +0 -68
  212. package/dist/src/boundary.test.js +0 -170
  213. package/dist/src/compact.test.js +0 -78
  214. package/dist/src/config/themes.test.js +0 -94
  215. package/dist/src/dedup/dedup.test.js +0 -41
  216. package/dist/src/dedup/l1.test.js +0 -50
  217. package/dist/src/dedup/raptor/buildHistory.test.js +0 -292
  218. package/dist/src/dedup/raptor/multilevel-serve.test.js +0 -229
  219. package/dist/src/dedup/raptor/multilevel.test.js +0 -238
  220. package/dist/src/dedup/raptor/promote.test.js +0 -69
  221. package/dist/src/dedup/raptor/raptor.test.js +0 -248
  222. package/dist/src/dedup/raptor/retrieval.test.js +0 -95
  223. package/dist/src/dedup/raptor/serve-gate.test.js +0 -298
  224. package/dist/src/dedup/sprint12.test.js +0 -219
  225. package/dist/src/dedup-engine.test.js +0 -472
  226. package/dist/src/driftDetection.test.js +0 -87
  227. package/dist/src/e2e.test.js +0 -698
  228. package/dist/src/engine.test.js +0 -111
  229. package/dist/src/extractive.test.js +0 -147
  230. package/dist/src/fork.test.js +0 -81
  231. package/dist/src/game/scoring.test.js +0 -98
  232. package/dist/src/httpEmbedder.test.js +0 -277
  233. package/dist/src/importance.test.js +0 -372
  234. package/dist/src/intent.test.js +0 -78
  235. package/dist/src/log.test.js +0 -42
  236. package/dist/src/mechanical-fix.test.js +0 -65
  237. package/dist/src/memory.test.js +0 -70
  238. package/dist/src/memoryConsolidate.test.js +0 -38
  239. package/dist/src/memoryOps.test.js +0 -129
  240. package/dist/src/memoryRecall.test.js +0 -171
  241. package/dist/src/memoryRoundtrip.test.js +0 -137
  242. package/dist/src/metrics/turns.test.js +0 -152
  243. package/dist/src/mirror/mirror.test.js +0 -185
  244. package/dist/src/raptor-inject-summaries.test.js +0 -162
  245. package/dist/src/ratio.bench.test.js +0 -897
  246. package/dist/src/recall.integration.test.js +0 -77
  247. package/dist/src/recall.test.js +0 -379
  248. package/dist/src/sprint14.test.js +0 -219
  249. package/dist/src/sprint4x-rag-verification.test.js +0 -93
  250. package/dist/src/store/compression.test.js +0 -139
  251. package/dist/src/store/memoryIndex.test.js +0 -51
  252. package/dist/src/store/migrate.test.js +0 -139
  253. package/dist/src/store/pgOpenGuard.test.js +0 -74
  254. package/dist/src/store/phase01.test.js +0 -81
  255. package/dist/src/store/phase04.test.js +0 -54
  256. package/dist/src/store/sprint10.test.js +0 -186
  257. package/dist/src/store/sqlite/game-achievements.test.js +0 -67
  258. package/dist/src/store/sqlite/game-scores.test.js +0 -106
  259. package/dist/src/store/sqlite/game-state.test.js +0 -76
  260. package/dist/src/store/sqlite/global-index.test.js +0 -136
  261. package/dist/src/store/sqlite/mechanical-fix.test.js +0 -146
  262. package/dist/src/store/sqlite/perf-samples.test.js +0 -146
  263. package/dist/src/store/sqlite/raptor.test.js +0 -106
  264. package/dist/src/store/sqlite/turns.test.js +0 -183
  265. package/dist/src/store/sqlite.cachehit.test.js +0 -55
  266. package/dist/src/store/sqlite.dbmaint.test.js +0 -158
  267. package/dist/src/store/sqlite.dbmirror.test.js +0 -184
  268. package/dist/src/store/turns/contract-compliance.test.js +0 -428
  269. package/dist/src/store/turns/memory-store.test.js +0 -9
  270. package/dist/src/store/turns/migrations.test.js +0 -138
  271. package/dist/src/store/turns/sqlite-store.test.js +0 -144
  272. package/dist/src/store/vectorIndex.test.js +0 -123
  273. package/dist/src/store.test.js +0 -161
  274. package/dist/src/supersede.test.js +0 -36
  275. package/dist/src/topics/cluster.test.js +0 -150
  276. package/dist/src/topics/store.test.js +0 -117
  277. package/dist/src/types.test.js +0 -9
  278. package/dist/src/vector-search-cache.test.js +0 -157
  279. package/dist/src/vectorStore.test.js +0 -479
  280. package/dist/src/wiki.test.js +0 -171
  281. package/extensions/conflict-scan.test.ts +0 -129
  282. package/extensions/dashboard-client/dist/assets/AchievementsTab-DjxfYrDc.js +0 -2
  283. package/extensions/dashboard-client/dist/assets/CacheTab-Dnpv94wq.js +0 -2
  284. package/extensions/dashboard-client/dist/assets/CacheTab-Dnpv94wq.js.map +0 -1
  285. package/extensions/dashboard-client/dist/assets/GameTab-BLDudcO5.js +0 -2
  286. package/extensions/dashboard-client/dist/assets/OverviewTab-D4kGvsiQ.js +0 -2
  287. package/extensions/dashboard-client/dist/assets/ReposTab-C0Wnrf2u.js +0 -2
  288. package/extensions/dashboard-client/dist/assets/ReposTab-C0Wnrf2u.js.map +0 -1
  289. package/extensions/dashboard-client/dist/assets/TimeSavedCard-UqljSyP-.js +0 -2
  290. package/extensions/dashboard-client/dist/assets/TimeSavedCard-UqljSyP-.js.map +0 -1
  291. package/extensions/dashboard-client/dist/assets/index-BEdKlpAB.css +0 -1
  292. package/extensions/dashboard-client/dist/assets/index-BX0bcgLu.js +0 -42
  293. package/extensions/dashboard-client/dist/assets/index-BX0bcgLu.js.map +0 -1
  294. package/extensions/dashboard-server/api-contracts.test.ts +0 -1065
  295. package/extensions/dashboard-server/html.test.ts +0 -62
  296. package/extensions/dashboard-server/perf-server.test.ts +0 -101
  297. package/extensions/dashboard-server/routes-cache.test.ts +0 -302
  298. package/extensions/dashboard-server/server.test.ts +0 -131
  299. package/extensions/dashboard-server-s32.test.ts +0 -195
  300. package/extensions/dashboard-server.test.ts +0 -382
  301. package/extensions/mega-cache-replay.test.ts +0 -526
  302. package/extensions/mega-compact-s38.test.ts +0 -1433
  303. package/extensions/mega-compact.test.ts +0 -1509
  304. package/extensions/mega-events.test.ts +0 -55
  305. package/extensions/mega-game-cmds.test.ts +0 -197
  306. package/extensions/mega-runtime/snapshot.test.ts +0 -139
  307. package/extensions/mega-runtime/state.test.ts +0 -262
  308. package/extensions/mega-runtime/widget.test.ts +0 -468
  309. package/extensions/mega-shutdown-widget.test.ts +0 -141
  310. package/extensions/mega-teamrun.test.ts +0 -176
  311. package/extensions/mega-trim.test.ts +0 -64
  312. package/extensions/mega-turn-store.test.ts +0 -108
  313. package/src/boundary.test.ts +0 -187
  314. package/src/compact.test.ts +0 -99
  315. package/src/config/themes.test.ts +0 -116
  316. package/src/dedup/dedup.test.ts +0 -46
  317. package/src/dedup/l1.test.ts +0 -57
  318. package/src/dedup/raptor/buildHistory.test.ts +0 -353
  319. package/src/dedup/raptor/multilevel-serve.test.ts +0 -273
  320. package/src/dedup/raptor/multilevel.test.ts +0 -325
  321. package/src/dedup/raptor/promote.test.ts +0 -82
  322. package/src/dedup/raptor/raptor.test.ts +0 -297
  323. package/src/dedup/raptor/retrieval.test.ts +0 -118
  324. package/src/dedup/raptor/serve-gate.test.ts +0 -348
  325. package/src/dedup/sprint12.test.ts +0 -242
  326. package/src/dedup-engine.test.ts +0 -670
  327. package/src/driftDetection.test.ts +0 -100
  328. package/src/e2e.test.ts +0 -843
  329. package/src/engine.test.ts +0 -123
  330. package/src/extractive.test.ts +0 -174
  331. package/src/fork.test.ts +0 -94
  332. package/src/game/scoring.test.ts +0 -103
  333. package/src/httpEmbedder.test.ts +0 -286
  334. package/src/importance.test.ts +0 -538
  335. package/src/intent.test.ts +0 -87
  336. package/src/log.test.ts +0 -47
  337. package/src/mechanical-fix.test.ts +0 -70
  338. package/src/memory.test.ts +0 -92
  339. package/src/memoryConsolidate.test.ts +0 -47
  340. package/src/memoryOps.test.ts +0 -148
  341. package/src/memoryRecall.test.ts +0 -194
  342. package/src/memoryRoundtrip.test.ts +0 -155
  343. package/src/metrics/turns.test.ts +0 -165
  344. package/src/mirror/mirror.test.ts +0 -240
  345. package/src/raptor-inject-summaries.test.ts +0 -228
  346. package/src/ratio.bench.test.ts +0 -1316
  347. package/src/recall.integration.test.ts +0 -96
  348. package/src/recall.test.ts +0 -467
  349. package/src/sprint14.test.ts +0 -245
  350. package/src/sprint4x-rag-verification.test.ts +0 -119
  351. package/src/store/compression.test.ts +0 -168
  352. package/src/store/memoryIndex.test.ts +0 -61
  353. package/src/store/migrate.test.ts +0 -158
  354. package/src/store/pgOpenGuard.test.ts +0 -89
  355. package/src/store/phase01.test.ts +0 -88
  356. package/src/store/phase04.test.ts +0 -58
  357. package/src/store/sprint10.test.ts +0 -214
  358. package/src/store/sqlite/game-achievements.test.ts +0 -80
  359. package/src/store/sqlite/game-scores.test.ts +0 -132
  360. package/src/store/sqlite/game-state.test.ts +0 -89
  361. package/src/store/sqlite/global-index.test.ts +0 -222
  362. package/src/store/sqlite/mechanical-fix.test.ts +0 -162
  363. package/src/store/sqlite/perf-samples.test.ts +0 -169
  364. package/src/store/sqlite/raptor.test.ts +0 -139
  365. package/src/store/sqlite/turns.test.ts +0 -218
  366. package/src/store/sqlite.cachehit.test.ts +0 -68
  367. package/src/store/sqlite.dbmaint.test.ts +0 -193
  368. package/src/store/sqlite.dbmirror.test.ts +0 -229
  369. package/src/store/turns/contract-compliance.test.ts +0 -562
  370. package/src/store/turns/memory-store.test.ts +0 -15
  371. package/src/store/turns/migrations.test.ts +0 -161
  372. package/src/store/turns/sqlite-store.test.ts +0 -161
  373. package/src/store/vectorIndex.test.ts +0 -140
  374. package/src/store.test.ts +0 -191
  375. package/src/supersede.test.ts +0 -42
  376. package/src/topics/cluster.test.ts +0 -176
  377. package/src/topics/store.test.ts +0 -132
  378. package/src/types.test.ts +0 -10
  379. package/src/vector-search-cache.test.ts +0 -190
  380. package/src/vectorStore.test.ts +0 -533
  381. package/src/wiki.test.ts +0 -217
@@ -0,0 +1,440 @@
1
+ /**
2
+ * MemoryMapTab.tsx — S46 visual memory map (force-directed graph of checkpoints).
3
+ *
4
+ * Fetches graph data from /api/memory-map and renders an SVG-based
5
+ * force-directed layout. Uses no external graph library (no @xyflow/react).
6
+ * The simulation uses Coulomb repulsion + Hooke attraction + center gravity.
7
+ */
8
+ import type React from "react";
9
+ import { useEffect, useRef, useState, useCallback, useMemo } from "react";
10
+
11
+ // ---------------------------------------------------------------------------
12
+ // Types (mirror of api-contracts/memory-map.ts — client-side only)
13
+ // ---------------------------------------------------------------------------
14
+
15
+ interface GraphNode {
16
+ id: string;
17
+ sessionId: string;
18
+ label: string;
19
+ summaryTruncated: string;
20
+ tokenEstimate: number;
21
+ timestamp: number;
22
+ dedupStatus: string | undefined;
23
+ raptorLevel: number;
24
+ topicSummary: string | undefined;
25
+ decisionCount: number;
26
+ textSnippet: string;
27
+ }
28
+
29
+ interface GraphEdge {
30
+ source: string;
31
+ target: string;
32
+ weight: number;
33
+ type: "temporal" | "semantic" | "raptor_parent";
34
+ }
35
+
36
+ interface GraphMetadata {
37
+ sessionCount: number;
38
+ totalCheckpoints: number;
39
+ totalEdges: number;
40
+ semanticEdgeCount: number;
41
+ temporalEdgeCount: number;
42
+ raptorEdgeCount: number;
43
+ similarityThresholdUsed: number;
44
+ builtAt: number;
45
+ }
46
+
47
+ interface MemoryMapResponse {
48
+ nodes: GraphNode[];
49
+ edges: GraphEdge[];
50
+ metadata: GraphMetadata;
51
+ }
52
+
53
+ // ---------------------------------------------------------------------------
54
+ // Force-directed layout types
55
+ // ---------------------------------------------------------------------------
56
+
57
+ interface Position {
58
+ x: number;
59
+ y: number;
60
+ }
61
+
62
+ interface LayoutNode extends GraphNode {
63
+ pos: Position;
64
+ vx: number;
65
+ vy: number;
66
+ pinned: boolean;
67
+ }
68
+
69
+ interface LayoutEdge {
70
+ source: number;
71
+ target: number;
72
+ weight: number;
73
+ type: GraphEdge["type"];
74
+ }
75
+
76
+ // ---------------------------------------------------------------------------
77
+ // Force simulation constants
78
+ // ---------------------------------------------------------------------------
79
+
80
+ const REPULSION = 5_000;
81
+ const ATTRACTION = 0.005;
82
+ const CENTER_GRAVITY = 0.01;
83
+ const DAMPING = 0.9;
84
+ const MIN_VELOCITY = 0.1;
85
+ const MAX_ITERATIONS = 300;
86
+ const EDGE_ALPHA = 0.3;
87
+ const SVG_WIDTH = 900;
88
+ const SVG_HEIGHT = 600;
89
+ const PADDING = 40;
90
+
91
+ // ---------------------------------------------------------------------------
92
+ // Helpers
93
+ // ---------------------------------------------------------------------------
94
+
95
+ function edgeColor(type: GraphEdge["type"]): string {
96
+ switch (type) {
97
+ case "temporal":
98
+ return "#6366f1"; // indigo
99
+ case "semantic":
100
+ return "#22c55e"; // green
101
+ case "raptor_parent":
102
+ return "#f59e0b"; // amber
103
+ }
104
+ }
105
+
106
+ function nodeOpacity(dedupStatus: string | undefined): number {
107
+ if (!dedupStatus || dedupStatus === "active") return 1;
108
+ return 0.5;
109
+ }
110
+
111
+ // ---------------------------------------------------------------------------
112
+ // Force simulation engine
113
+ // ---------------------------------------------------------------------------
114
+
115
+ function buildLayout(data: MemoryMapResponse): { nodes: LayoutNode[]; edges: LayoutEdge[] } {
116
+ const nodes: LayoutNode[] = data.nodes.map((n, i) => {
117
+ const angle = (2 * Math.PI * i) / Math.max(data.nodes.length, 1);
118
+ const radius = 200;
119
+ return {
120
+ ...n,
121
+ pos: { x: Math.cos(angle) * radius + 300, y: Math.sin(angle) * radius + 200 },
122
+ vx: 0,
123
+ vy: 0,
124
+ pinned: false,
125
+ };
126
+ });
127
+
128
+ const nodeIndex = new Map<string, number>();
129
+ nodes.forEach((n, i) => nodeIndex.set(n.id, i));
130
+
131
+ const edges: LayoutEdge[] = data.edges
132
+ .map((e) => {
133
+ const si = nodeIndex.get(e.source);
134
+ const ti = nodeIndex.get(e.target);
135
+ if (si === undefined || ti === undefined || si === ti) return null;
136
+ return { source: si, target: ti, weight: e.weight, type: e.type };
137
+ })
138
+ .filter((e): e is LayoutEdge => e !== null);
139
+
140
+ return { nodes, edges };
141
+ }
142
+
143
+ function applyForces(layout: { nodes: LayoutNode[]; edges: LayoutEdge[] }): void {
144
+ const { nodes, edges } = layout;
145
+ const n = nodes.length;
146
+ if (n === 0) return;
147
+
148
+ for (let i = 0; i < n; i++) {
149
+ if (nodes[i].pinned) continue;
150
+ let fx = 0;
151
+ let fy = 0;
152
+
153
+ for (let j = 0; j < n; j++) {
154
+ if (i === j) continue;
155
+ const dx = nodes[i].pos.x - nodes[j].pos.x;
156
+ const dy = nodes[i].pos.y - nodes[j].pos.y;
157
+ const distSq = dx * dx + dy * dy || 1;
158
+ const force = REPULSION / distSq;
159
+ const dist = Math.sqrt(distSq);
160
+ fx += (dx / dist) * force;
161
+ fy += (dy / dist) * force;
162
+ }
163
+
164
+ for (const e of edges) {
165
+ let other: number;
166
+ if (e.source === i) other = e.target;
167
+ else if (e.target === i) other = e.source;
168
+ else continue;
169
+ const dx = nodes[other].pos.x - nodes[i].pos.x;
170
+ const dy = nodes[other].pos.y - nodes[i].pos.y;
171
+ const dist = Math.sqrt(dx * dx + dy * dy) || 1;
172
+ fx += dx * ATTRACTION * e.weight;
173
+ fy += dy * ATTRACTION * e.weight;
174
+ }
175
+
176
+ fx -= nodes[i].pos.x * CENTER_GRAVITY;
177
+ fy -= nodes[i].pos.y * CENTER_GRAVITY;
178
+
179
+ nodes[i].vx = (nodes[i].vx + fx) * DAMPING;
180
+ nodes[i].vy = (nodes[i].vy + fy) * DAMPING;
181
+
182
+ const speed = Math.sqrt(nodes[i].vx * nodes[i].vx + nodes[i].vy * nodes[i].vy);
183
+ if (speed > 50) {
184
+ nodes[i].vx = (nodes[i].vx / speed) * 50;
185
+ nodes[i].vy = (nodes[i].vy / speed) * 50;
186
+ }
187
+
188
+ if (speed > MIN_VELOCITY) {
189
+ nodes[i].pos.x += nodes[i].vx;
190
+ nodes[i].pos.y += nodes[i].vy;
191
+ }
192
+ }
193
+ }
194
+
195
+ // ---------------------------------------------------------------------------
196
+ // Component
197
+ // ---------------------------------------------------------------------------
198
+
199
+ const MemoryMapTab: React.FC = () => {
200
+ const [data, setData] = useState<MemoryMapResponse | null>(null);
201
+ const [loading, setLoading] = useState<boolean>(true);
202
+ const [error, setError] = useState<string | null>(null);
203
+ const [selectedNode, setSelectedNode] = useState<GraphNode | null>(null);
204
+ const [searchQuery, setSearchQuery] = useState<string>("");
205
+ const [filterSession, setFilterSession] = useState<string>("");
206
+ const [frame, setFrame] = useState<number>(0);
207
+
208
+ const layoutRef = useRef<{ nodes: LayoutNode[]; edges: LayoutEdge[] } | null>(null);
209
+ const animRef = useRef<number>(0);
210
+
211
+ // Fetch graph data when filterSession changes
212
+ useEffect(() => {
213
+ let cancelled = false;
214
+ const params = new URLSearchParams();
215
+ if (filterSession) params.set("sessionId", filterSession);
216
+ params.set("threshold", "0.7");
217
+ params.set("maxEdgesPerNode", "4");
218
+
219
+ setLoading(true);
220
+ setError(null);
221
+
222
+ fetch(`/api/memory-map?${params.toString()}`)
223
+ .then((r) => {
224
+ if (!r.ok) throw new Error(`HTTP ${r.status}`);
225
+ return r.json() as Promise<MemoryMapResponse>;
226
+ })
227
+ .then((d) => {
228
+ if (!cancelled) {
229
+ setData(d);
230
+ layoutRef.current = buildLayout(d);
231
+ setFrame(1);
232
+ setLoading(false);
233
+ }
234
+ })
235
+ .catch((e: unknown) => {
236
+ if (!cancelled) {
237
+ setError(e instanceof Error ? e.message : "Unknown error");
238
+ setLoading(false);
239
+ }
240
+ });
241
+
242
+ return () => {
243
+ cancelled = true;
244
+ cancelAnimationFrame(animRef.current);
245
+ };
246
+ }, [filterSession]);
247
+
248
+ // Run force simulation via requestAnimationFrame
249
+ useEffect(() => {
250
+ if (!layoutRef.current || frame === 0) return;
251
+
252
+ const layout = layoutRef.current;
253
+ let iter = 0;
254
+
255
+ const tick = () => {
256
+ if (iter >= MAX_ITERATIONS) return;
257
+ applyForces(layout);
258
+ iter++;
259
+ setFrame(iter);
260
+ animRef.current = requestAnimationFrame(tick);
261
+ };
262
+
263
+ animRef.current = requestAnimationFrame(tick);
264
+ return () => cancelAnimationFrame(animRef.current);
265
+ }, [frame]);
266
+
267
+ // Toggle pin / select a node
268
+ const handleNodeClick = useCallback((node: LayoutNode, index: number) => {
269
+ const layout = layoutRef.current;
270
+ if (!layout) return;
271
+ layout.nodes[index].pinned = !layout.nodes[index].pinned;
272
+ if (!layout.nodes[index].pinned) {
273
+ layout.nodes[index].vx = 0;
274
+ layout.nodes[index].vy = 0;
275
+ }
276
+ setSelectedNode((prev) => (prev?.id === node.id ? null : (node as unknown as GraphNode)));
277
+ setFrame((s) => s + 1);
278
+ }, []);
279
+
280
+ // Filtered node indices for search
281
+ const filteredSet = useMemo<Set<number> | null>(() => {
282
+ const layout = layoutRef.current;
283
+ if (!layout || !searchQuery) return null;
284
+ const q = searchQuery.toLowerCase();
285
+ return new Set(
286
+ layout.nodes
287
+ .map((n, i) =>
288
+ n.summaryTruncated.toLowerCase().includes(q) || n.label.toLowerCase().includes(q) ? i : -1,
289
+ )
290
+ .filter((i) => i >= 0),
291
+ );
292
+ }, [searchQuery]);
293
+
294
+ // ---------- Loading state ----------
295
+
296
+ if (loading) {
297
+ return <div className="memory-map-loading">Loading memory graph...</div>;
298
+ }
299
+
300
+ // ---------- Error state ----------
301
+
302
+ if (error) {
303
+ return (
304
+ <div className="memory-map-error">
305
+ <p>Failed to load memory map: {error}</p>
306
+ <button
307
+ className="memory-map-retry-btn"
308
+ onClick={() => setFrame((s) => s + 1)}
309
+ >
310
+ Retry
311
+ </button>
312
+ </div>
313
+ );
314
+ }
315
+
316
+ // ---------- Empty state ----------
317
+
318
+ if (!data || !layoutRef.current) {
319
+ return <div className="memory-map-empty">No memory data available.</div>;
320
+ }
321
+
322
+ const layout = layoutRef.current;
323
+
324
+ // ---------- Render ----------
325
+
326
+ return (
327
+ <div className="memory-map-container">
328
+ {/* Toolbar */}
329
+ <div className="memory-map-toolbar">
330
+ <input
331
+ type="text"
332
+ placeholder="Search memories..."
333
+ value={searchQuery}
334
+ onInput={(e: React.FormEvent<HTMLInputElement>) =>
335
+ setSearchQuery((e.target as HTMLInputElement).value)
336
+ }
337
+ className="memory-map-search"
338
+ />
339
+ <span className="memory-map-stats">
340
+ {data.nodes.length} memories, {data.edges.length} edges
341
+ <br />
342
+ Sessions: {data.metadata.sessionCount} | Threshold:{" "}
343
+ {data.metadata.similarityThresholdUsed.toFixed(2)}
344
+ </span>
345
+ </div>
346
+
347
+ {/* Legend */}
348
+ <div className="memory-map-legend">
349
+ <span style={{ color: edgeColor("semantic") }}>Semantic</span>
350
+ <span style={{ color: edgeColor("temporal") }}>Temporal</span>
351
+ <span style={{ color: edgeColor("raptor_parent") }}>Raptor</span>
352
+ </div>
353
+
354
+ {/* SVG graph */}
355
+ <svg
356
+ width={SVG_WIDTH}
357
+ height={SVG_HEIGHT}
358
+ viewBox={`0 0 ${SVG_WIDTH} ${SVG_HEIGHT}`}
359
+ className="memory-map-svg"
360
+ >
361
+ {/* Edges */}
362
+ {layout.edges.map((e, i) => {
363
+ const src = layout.nodes[e.source];
364
+ const tgt = layout.nodes[e.target];
365
+ const color = edgeColor(e.type);
366
+ const strokeW = Math.max(1, e.weight * 2.5);
367
+ return (
368
+ <line
369
+ key={`edge-${i}`}
370
+ x1={PADDING + (src.pos.x / (layout.nodes.length || 1)) * (SVG_WIDTH - 2 * PADDING)}
371
+ y1={PADDING + (src.pos.y / (layout.nodes.length || 1)) * (SVG_HEIGHT - 2 * PADDING)}
372
+ x2={PADDING + (tgt.pos.x / (layout.nodes.length || 1)) * (SVG_WIDTH - 2 * PADDING)}
373
+ y2={PADDING + (tgt.pos.y / (layout.nodes.length || 1)) * (SVG_HEIGHT - 2 * PADDING)}
374
+ stroke={color}
375
+ strokeWidth={strokeW}
376
+ opacity={EDGE_ALPHA}
377
+ />
378
+ );
379
+ })}
380
+
381
+ {/* Nodes */}
382
+ {layout.nodes.map((n, i) => {
383
+ const cx =
384
+ PADDING + (n.pos.x / (layout.nodes.length || 1)) * (SVG_WIDTH - 2 * PADDING);
385
+ const cy =
386
+ PADDING + (n.pos.y / (layout.nodes.length || 1)) * (SVG_HEIGHT - 2 * PADDING);
387
+ const radius = Math.min(20, 8 + n.tokenEstimate / 500);
388
+ const isFiltered = filteredSet ? filteredSet.has(i) : true;
389
+ const isSelected = selectedNode?.id === n.id;
390
+ const nodeLabel = n.label.length > 20 ? n.label.slice(0, 18) + "..." : n.label;
391
+
392
+ return (
393
+ <g key={`node-${i}`} className="memory-map-node-group">
394
+ <circle
395
+ cx={cx}
396
+ cy={cy}
397
+ r={isSelected ? radius + 3 : radius}
398
+ fill={isFiltered ? (n.raptorLevel > 0 ? "#f59e0b" : "#6366f1") : "#d1d5db"}
399
+ opacity={nodeOpacity(n.dedupStatus)}
400
+ stroke={isSelected ? "#ef4444" : "none"}
401
+ strokeWidth={isSelected ? 2 : 0}
402
+ className="memory-map-node"
403
+ onClick={() => handleNodeClick(n, i)}
404
+ />
405
+ <text
406
+ x={cx}
407
+ y={cy + radius + 12}
408
+ textAnchor="middle"
409
+ fontSize="9px"
410
+ fill="#374151"
411
+ className="memory-map-label"
412
+ >
413
+ {nodeLabel}
414
+ </text>
415
+ </g>
416
+ );
417
+ })}
418
+ </svg>
419
+
420
+ {/* Node detail panel */}
421
+ {selectedNode ? (
422
+ <div className="memory-map-detail">
423
+ <h3>{selectedNode.label}</h3>
424
+ <p>{selectedNode.summaryTruncated}</p>
425
+ {selectedNode.topicSummary ? (
426
+ <p className="memory-map-topic">Topic: {selectedNode.topicSummary}</p>
427
+ ) : null}
428
+ <p>
429
+ Tokens: {selectedNode.tokenEstimate} | Decisions: {selectedNode.decisionCount}
430
+ </p>
431
+ <p>Session: {selectedNode.sessionId}</p>
432
+ <p>Raptor Level: {selectedNode.raptorLevel}</p>
433
+ <p className="memory-map-snippet">{selectedNode.textSnippet}</p>
434
+ </div>
435
+ ) : null}
436
+ </div>
437
+ );
438
+ };
439
+
440
+ export default MemoryMapTab;