hippo-memory 1.44.0 → 1.45.0

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 (528) hide show
  1. package/README.md +12 -10
  2. package/bin/hippo.js +3 -1
  3. package/dist/api.d.ts +21 -21
  4. package/dist/api.js +69 -42
  5. package/dist/audit.d.ts +1 -1
  6. package/dist/audit.js +9 -0
  7. package/dist/autolearn.d.ts +1 -1
  8. package/dist/autolearn.js +2 -1
  9. package/dist/cli.d.ts +3 -0
  10. package/dist/cli.js +151 -72
  11. package/dist/client.d.ts +4 -21
  12. package/dist/client.js +3 -112
  13. package/dist/config.js +2 -1
  14. package/dist/consolidate.d.ts +3 -0
  15. package/dist/consolidate.js +44 -42
  16. package/dist/dag.d.ts +1 -0
  17. package/dist/dag.js +10 -5
  18. package/dist/dashboard.js +7 -3
  19. package/dist/db.js +12 -23
  20. package/dist/dedupe.d.ts +1 -0
  21. package/dist/dedupe.js +4 -7
  22. package/dist/embedding-provider.js +2 -1
  23. package/dist/embeddings.js +81 -8
  24. package/dist/extract.d.ts +2 -0
  25. package/dist/extract.js +9 -4
  26. package/dist/mcp/server.js +21 -36
  27. package/dist/memory.d.ts +3 -0
  28. package/dist/memory.js +7 -1
  29. package/dist/refine-llm.js +3 -2
  30. package/dist/rerankers/jev.js +3 -2
  31. package/dist/rerankers/llm.js +3 -2
  32. package/dist/search.js +3 -3
  33. package/dist/server.d.ts +5 -0
  34. package/dist/server.js +39 -29
  35. package/dist/shared.js +1 -1
  36. package/dist/store.d.ts +18 -11
  37. package/dist/store.js +144 -63
  38. package/dist/version.d.ts +4 -6
  39. package/dist/version.js +4 -7
  40. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  41. package/extensions/openclaw-plugin/package.json +1 -1
  42. package/openclaw.plugin.json +1 -1
  43. package/package.json +6 -3
  44. package/dist/ablation.d.ts.map +0 -1
  45. package/dist/ablation.js.map +0 -1
  46. package/dist/ambient.d.ts.map +0 -1
  47. package/dist/ambient.js.map +0 -1
  48. package/dist/api.d.ts.map +0 -1
  49. package/dist/api.js.map +0 -1
  50. package/dist/audit-prune.d.ts.map +0 -1
  51. package/dist/audit-prune.js.map +0 -1
  52. package/dist/audit.d.ts.map +0 -1
  53. package/dist/audit.js.map +0 -1
  54. package/dist/auth.d.ts.map +0 -1
  55. package/dist/auth.js.map +0 -1
  56. package/dist/autolearn.d.ts.map +0 -1
  57. package/dist/autolearn.js.map +0 -1
  58. package/dist/availability.d.ts.map +0 -1
  59. package/dist/availability.js.map +0 -1
  60. package/dist/benchmarks/e1.3/incident-recall-eval.js +0 -78
  61. package/dist/benchmarks/e1.3/incident-recall-eval.js.map +0 -1
  62. package/dist/benchmarks/e1.3/slack-1000-event-smoke.js +0 -103
  63. package/dist/benchmarks/e1.3/slack-1000-event-smoke.js.map +0 -1
  64. package/dist/capture.d.ts.map +0 -1
  65. package/dist/capture.js.map +0 -1
  66. package/dist/card-detail.d.ts.map +0 -1
  67. package/dist/card-detail.js.map +0 -1
  68. package/dist/card.d.ts.map +0 -1
  69. package/dist/card.js.map +0 -1
  70. package/dist/cli.d.ts.map +0 -1
  71. package/dist/cli.js.map +0 -1
  72. package/dist/client.d.ts.map +0 -1
  73. package/dist/client.js.map +0 -1
  74. package/dist/compare.d.ts.map +0 -1
  75. package/dist/compare.js.map +0 -1
  76. package/dist/config.d.ts.map +0 -1
  77. package/dist/config.js.map +0 -1
  78. package/dist/connectors/github/backfill.d.ts.map +0 -1
  79. package/dist/connectors/github/backfill.js.map +0 -1
  80. package/dist/connectors/github/cli-impl.d.ts.map +0 -1
  81. package/dist/connectors/github/cli-impl.js.map +0 -1
  82. package/dist/connectors/github/deletion.d.ts.map +0 -1
  83. package/dist/connectors/github/deletion.js.map +0 -1
  84. package/dist/connectors/github/dlq.d.ts.map +0 -1
  85. package/dist/connectors/github/dlq.js.map +0 -1
  86. package/dist/connectors/github/idempotency.d.ts.map +0 -1
  87. package/dist/connectors/github/idempotency.js.map +0 -1
  88. package/dist/connectors/github/ingest.d.ts.map +0 -1
  89. package/dist/connectors/github/ingest.js.map +0 -1
  90. package/dist/connectors/github/octokit-client.d.ts.map +0 -1
  91. package/dist/connectors/github/octokit-client.js.map +0 -1
  92. package/dist/connectors/github/ratelimit.d.ts.map +0 -1
  93. package/dist/connectors/github/ratelimit.js.map +0 -1
  94. package/dist/connectors/github/scope.d.ts.map +0 -1
  95. package/dist/connectors/github/scope.js.map +0 -1
  96. package/dist/connectors/github/signature.d.ts.map +0 -1
  97. package/dist/connectors/github/signature.js.map +0 -1
  98. package/dist/connectors/github/tenant-routing.d.ts.map +0 -1
  99. package/dist/connectors/github/tenant-routing.js.map +0 -1
  100. package/dist/connectors/github/transform.d.ts.map +0 -1
  101. package/dist/connectors/github/transform.js.map +0 -1
  102. package/dist/connectors/github/types.d.ts.map +0 -1
  103. package/dist/connectors/github/types.js.map +0 -1
  104. package/dist/connectors/slack/backfill.d.ts.map +0 -1
  105. package/dist/connectors/slack/backfill.js.map +0 -1
  106. package/dist/connectors/slack/deletion.d.ts.map +0 -1
  107. package/dist/connectors/slack/deletion.js.map +0 -1
  108. package/dist/connectors/slack/dlq.d.ts.map +0 -1
  109. package/dist/connectors/slack/dlq.js.map +0 -1
  110. package/dist/connectors/slack/idempotency.d.ts.map +0 -1
  111. package/dist/connectors/slack/idempotency.js.map +0 -1
  112. package/dist/connectors/slack/ingest.d.ts.map +0 -1
  113. package/dist/connectors/slack/ingest.js.map +0 -1
  114. package/dist/connectors/slack/ratelimit.d.ts.map +0 -1
  115. package/dist/connectors/slack/ratelimit.js.map +0 -1
  116. package/dist/connectors/slack/scope.d.ts.map +0 -1
  117. package/dist/connectors/slack/scope.js.map +0 -1
  118. package/dist/connectors/slack/signature.d.ts.map +0 -1
  119. package/dist/connectors/slack/signature.js.map +0 -1
  120. package/dist/connectors/slack/tenant-routing.d.ts.map +0 -1
  121. package/dist/connectors/slack/tenant-routing.js.map +0 -1
  122. package/dist/connectors/slack/transform.d.ts.map +0 -1
  123. package/dist/connectors/slack/transform.js.map +0 -1
  124. package/dist/connectors/slack/types.d.ts.map +0 -1
  125. package/dist/connectors/slack/types.js.map +0 -1
  126. package/dist/connectors/slack/web-client.d.ts.map +0 -1
  127. package/dist/connectors/slack/web-client.js.map +0 -1
  128. package/dist/connectors/slack/workspaces.d.ts.map +0 -1
  129. package/dist/connectors/slack/workspaces.js.map +0 -1
  130. package/dist/consolidate.d.ts.map +0 -1
  131. package/dist/consolidate.js.map +0 -1
  132. package/dist/correction-latency.d.ts.map +0 -1
  133. package/dist/correction-latency.js.map +0 -1
  134. package/dist/customer-notes.d.ts.map +0 -1
  135. package/dist/customer-notes.js.map +0 -1
  136. package/dist/dag.d.ts.map +0 -1
  137. package/dist/dag.js.map +0 -1
  138. package/dist/dashboard.d.ts.map +0 -1
  139. package/dist/dashboard.js.map +0 -1
  140. package/dist/db.d.ts.map +0 -1
  141. package/dist/db.js.map +0 -1
  142. package/dist/decisions.d.ts.map +0 -1
  143. package/dist/decisions.js.map +0 -1
  144. package/dist/dedupe.d.ts.map +0 -1
  145. package/dist/dedupe.js.map +0 -1
  146. package/dist/embedding-provider.d.ts.map +0 -1
  147. package/dist/embedding-provider.js.map +0 -1
  148. package/dist/embeddings.d.ts.map +0 -1
  149. package/dist/embeddings.js.map +0 -1
  150. package/dist/eval-suite.d.ts.map +0 -1
  151. package/dist/eval-suite.js.map +0 -1
  152. package/dist/eval.d.ts.map +0 -1
  153. package/dist/eval.js.map +0 -1
  154. package/dist/extensions/openclaw-plugin/index.js.map +0 -1
  155. package/dist/extract.d.ts.map +0 -1
  156. package/dist/extract.js.map +0 -1
  157. package/dist/forward-claim-detector.d.ts.map +0 -1
  158. package/dist/forward-claim-detector.js.map +0 -1
  159. package/dist/goals.d.ts.map +0 -1
  160. package/dist/goals.js.map +0 -1
  161. package/dist/graph-extract.d.ts.map +0 -1
  162. package/dist/graph-extract.js.map +0 -1
  163. package/dist/graph-recall.d.ts.map +0 -1
  164. package/dist/graph-recall.js.map +0 -1
  165. package/dist/graph-stream.d.ts.map +0 -1
  166. package/dist/graph-stream.js.map +0 -1
  167. package/dist/graph-view.d.ts.map +0 -1
  168. package/dist/graph-view.js.map +0 -1
  169. package/dist/graph.d.ts.map +0 -1
  170. package/dist/graph.js.map +0 -1
  171. package/dist/handoff.d.ts.map +0 -1
  172. package/dist/handoff.js.map +0 -1
  173. package/dist/hooks.d.ts.map +0 -1
  174. package/dist/hooks.js.map +0 -1
  175. package/dist/importers.d.ts.map +0 -1
  176. package/dist/importers.js.map +0 -1
  177. package/dist/incidents.d.ts.map +0 -1
  178. package/dist/incidents.js.map +0 -1
  179. package/dist/index.d.ts.map +0 -1
  180. package/dist/index.js.map +0 -1
  181. package/dist/invalidation.d.ts.map +0 -1
  182. package/dist/invalidation.js.map +0 -1
  183. package/dist/mcp/framing.d.ts.map +0 -1
  184. package/dist/mcp/framing.js.map +0 -1
  185. package/dist/mcp/server.d.ts.map +0 -1
  186. package/dist/mcp/server.js.map +0 -1
  187. package/dist/memory-value-weights.d.ts.map +0 -1
  188. package/dist/memory-value-weights.js.map +0 -1
  189. package/dist/memory-value.d.ts.map +0 -1
  190. package/dist/memory-value.js.map +0 -1
  191. package/dist/memory.d.ts.map +0 -1
  192. package/dist/memory.js.map +0 -1
  193. package/dist/multihop.d.ts.map +0 -1
  194. package/dist/multihop.js.map +0 -1
  195. package/dist/owner-validation.d.ts.map +0 -1
  196. package/dist/owner-validation.js.map +0 -1
  197. package/dist/path-context.d.ts.map +0 -1
  198. package/dist/path-context.js.map +0 -1
  199. package/dist/physics-config.d.ts.map +0 -1
  200. package/dist/physics-config.js.map +0 -1
  201. package/dist/physics-state.d.ts.map +0 -1
  202. package/dist/physics-state.js.map +0 -1
  203. package/dist/physics.d.ts.map +0 -1
  204. package/dist/physics.js.map +0 -1
  205. package/dist/policies.d.ts.map +0 -1
  206. package/dist/policies.js.map +0 -1
  207. package/dist/postinstall.d.ts.map +0 -1
  208. package/dist/postinstall.js.map +0 -1
  209. package/dist/predictions.d.ts.map +0 -1
  210. package/dist/predictions.js.map +0 -1
  211. package/dist/processes.d.ts.map +0 -1
  212. package/dist/processes.js.map +0 -1
  213. package/dist/project-briefs.d.ts.map +0 -1
  214. package/dist/project-briefs.js.map +0 -1
  215. package/dist/project-identity.d.ts.map +0 -1
  216. package/dist/project-identity.js.map +0 -1
  217. package/dist/provenance-coverage.d.ts.map +0 -1
  218. package/dist/provenance-coverage.js.map +0 -1
  219. package/dist/rate-limit.d.ts.map +0 -1
  220. package/dist/rate-limit.js.map +0 -1
  221. package/dist/raw-archive-mirror-cleanup.d.ts.map +0 -1
  222. package/dist/raw-archive-mirror-cleanup.js.map +0 -1
  223. package/dist/raw-archive.d.ts.map +0 -1
  224. package/dist/raw-archive.js.map +0 -1
  225. package/dist/recall-history.d.ts.map +0 -1
  226. package/dist/recall-history.js.map +0 -1
  227. package/dist/recall-scope.d.ts.map +0 -1
  228. package/dist/recall-scope.js.map +0 -1
  229. package/dist/recall-trace.d.ts.map +0 -1
  230. package/dist/recall-trace.js.map +0 -1
  231. package/dist/refine-llm.d.ts.map +0 -1
  232. package/dist/refine-llm.js.map +0 -1
  233. package/dist/reject-flow.d.ts.map +0 -1
  234. package/dist/reject-flow.js.map +0 -1
  235. package/dist/rejection.d.ts.map +0 -1
  236. package/dist/rejection.js.map +0 -1
  237. package/dist/replay.d.ts.map +0 -1
  238. package/dist/replay.js.map +0 -1
  239. package/dist/rerankers/cross-encoder.d.ts.map +0 -1
  240. package/dist/rerankers/cross-encoder.js.map +0 -1
  241. package/dist/rerankers/index.d.ts.map +0 -1
  242. package/dist/rerankers/index.js.map +0 -1
  243. package/dist/rerankers/jev.d.ts.map +0 -1
  244. package/dist/rerankers/jev.js.map +0 -1
  245. package/dist/rerankers/llm.d.ts.map +0 -1
  246. package/dist/rerankers/llm.js.map +0 -1
  247. package/dist/rerankers/types.d.ts.map +0 -1
  248. package/dist/rerankers/types.js.map +0 -1
  249. package/dist/rrf.d.ts.map +0 -1
  250. package/dist/rrf.js.map +0 -1
  251. package/dist/salience.d.ts.map +0 -1
  252. package/dist/salience.js.map +0 -1
  253. package/dist/scheduler.d.ts.map +0 -1
  254. package/dist/scheduler.js.map +0 -1
  255. package/dist/scope.d.ts.map +0 -1
  256. package/dist/scope.js.map +0 -1
  257. package/dist/search.d.ts.map +0 -1
  258. package/dist/search.js.map +0 -1
  259. package/dist/secret-detect.d.ts.map +0 -1
  260. package/dist/secret-detect.js.map +0 -1
  261. package/dist/server-detect.d.ts.map +0 -1
  262. package/dist/server-detect.js.map +0 -1
  263. package/dist/server.d.ts.map +0 -1
  264. package/dist/server.js.map +0 -1
  265. package/dist/shared.d.ts.map +0 -1
  266. package/dist/shared.js.map +0 -1
  267. package/dist/skills.d.ts.map +0 -1
  268. package/dist/skills.js.map +0 -1
  269. package/dist/sleep-redact.d.ts +0 -58
  270. package/dist/sleep-redact.d.ts.map +0 -1
  271. package/dist/sleep-redact.js +0 -80
  272. package/dist/sleep-redact.js.map +0 -1
  273. package/dist/src/ablation.js +0 -138
  274. package/dist/src/ablation.js.map +0 -1
  275. package/dist/src/ambient.js +0 -148
  276. package/dist/src/ambient.js.map +0 -1
  277. package/dist/src/api.js +0 -2109
  278. package/dist/src/api.js.map +0 -1
  279. package/dist/src/audit-prune.js +0 -109
  280. package/dist/src/audit-prune.js.map +0 -1
  281. package/dist/src/audit.js +0 -213
  282. package/dist/src/audit.js.map +0 -1
  283. package/dist/src/auth.js +0 -97
  284. package/dist/src/auth.js.map +0 -1
  285. package/dist/src/autolearn.js +0 -174
  286. package/dist/src/autolearn.js.map +0 -1
  287. package/dist/src/availability.js +0 -94
  288. package/dist/src/availability.js.map +0 -1
  289. package/dist/src/capture.js +0 -1346
  290. package/dist/src/capture.js.map +0 -1
  291. package/dist/src/card-detail.js +0 -15
  292. package/dist/src/card-detail.js.map +0 -1
  293. package/dist/src/card.js +0 -19
  294. package/dist/src/card.js.map +0 -1
  295. package/dist/src/cli.js +0 -9387
  296. package/dist/src/cli.js.map +0 -1
  297. package/dist/src/client.js +0 -237
  298. package/dist/src/client.js.map +0 -1
  299. package/dist/src/compare.js +0 -122
  300. package/dist/src/compare.js.map +0 -1
  301. package/dist/src/config.js +0 -135
  302. package/dist/src/config.js.map +0 -1
  303. package/dist/src/connectors/github/backfill.js +0 -281
  304. package/dist/src/connectors/github/backfill.js.map +0 -1
  305. package/dist/src/connectors/github/cli-impl.js +0 -234
  306. package/dist/src/connectors/github/cli-impl.js.map +0 -1
  307. package/dist/src/connectors/github/deletion.js +0 -85
  308. package/dist/src/connectors/github/deletion.js.map +0 -1
  309. package/dist/src/connectors/github/dlq.js +0 -190
  310. package/dist/src/connectors/github/dlq.js.map +0 -1
  311. package/dist/src/connectors/github/idempotency.js +0 -27
  312. package/dist/src/connectors/github/idempotency.js.map +0 -1
  313. package/dist/src/connectors/github/ingest.js +0 -156
  314. package/dist/src/connectors/github/ingest.js.map +0 -1
  315. package/dist/src/connectors/github/octokit-client.js +0 -70
  316. package/dist/src/connectors/github/octokit-client.js.map +0 -1
  317. package/dist/src/connectors/github/ratelimit.js +0 -31
  318. package/dist/src/connectors/github/ratelimit.js.map +0 -1
  319. package/dist/src/connectors/github/scope.js +0 -13
  320. package/dist/src/connectors/github/scope.js.map +0 -1
  321. package/dist/src/connectors/github/signature.js +0 -81
  322. package/dist/src/connectors/github/signature.js.map +0 -1
  323. package/dist/src/connectors/github/tenant-routing.js +0 -69
  324. package/dist/src/connectors/github/tenant-routing.js.map +0 -1
  325. package/dist/src/connectors/github/transform.js +0 -103
  326. package/dist/src/connectors/github/transform.js.map +0 -1
  327. package/dist/src/connectors/github/types.js +0 -100
  328. package/dist/src/connectors/github/types.js.map +0 -1
  329. package/dist/src/connectors/slack/backfill.js +0 -78
  330. package/dist/src/connectors/slack/backfill.js.map +0 -1
  331. package/dist/src/connectors/slack/deletion.js +0 -59
  332. package/dist/src/connectors/slack/deletion.js.map +0 -1
  333. package/dist/src/connectors/slack/dlq.js +0 -224
  334. package/dist/src/connectors/slack/dlq.js.map +0 -1
  335. package/dist/src/connectors/slack/idempotency.js +0 -31
  336. package/dist/src/connectors/slack/idempotency.js.map +0 -1
  337. package/dist/src/connectors/slack/ingest.js +0 -109
  338. package/dist/src/connectors/slack/ingest.js.map +0 -1
  339. package/dist/src/connectors/slack/ratelimit.js +0 -18
  340. package/dist/src/connectors/slack/ratelimit.js.map +0 -1
  341. package/dist/src/connectors/slack/scope.js +0 -13
  342. package/dist/src/connectors/slack/scope.js.map +0 -1
  343. package/dist/src/connectors/slack/signature.js +0 -27
  344. package/dist/src/connectors/slack/signature.js.map +0 -1
  345. package/dist/src/connectors/slack/tenant-routing.js +0 -41
  346. package/dist/src/connectors/slack/tenant-routing.js.map +0 -1
  347. package/dist/src/connectors/slack/transform.js +0 -47
  348. package/dist/src/connectors/slack/transform.js.map +0 -1
  349. package/dist/src/connectors/slack/types.js +0 -35
  350. package/dist/src/connectors/slack/types.js.map +0 -1
  351. package/dist/src/connectors/slack/web-client.js +0 -43
  352. package/dist/src/connectors/slack/web-client.js.map +0 -1
  353. package/dist/src/connectors/slack/workspaces.js +0 -62
  354. package/dist/src/connectors/slack/workspaces.js.map +0 -1
  355. package/dist/src/consolidate.js +0 -978
  356. package/dist/src/consolidate.js.map +0 -1
  357. package/dist/src/correction-latency.js +0 -74
  358. package/dist/src/correction-latency.js.map +0 -1
  359. package/dist/src/customer-notes.js +0 -325
  360. package/dist/src/customer-notes.js.map +0 -1
  361. package/dist/src/dag.js +0 -352
  362. package/dist/src/dag.js.map +0 -1
  363. package/dist/src/dashboard.js +0 -258
  364. package/dist/src/dashboard.js.map +0 -1
  365. package/dist/src/db.js +0 -2731
  366. package/dist/src/db.js.map +0 -1
  367. package/dist/src/decisions.js +0 -304
  368. package/dist/src/decisions.js.map +0 -1
  369. package/dist/src/dedupe.js +0 -141
  370. package/dist/src/dedupe.js.map +0 -1
  371. package/dist/src/embedding-provider.js +0 -314
  372. package/dist/src/embedding-provider.js.map +0 -1
  373. package/dist/src/embeddings.js +0 -543
  374. package/dist/src/embeddings.js.map +0 -1
  375. package/dist/src/eval-suite.js +0 -294
  376. package/dist/src/eval-suite.js.map +0 -1
  377. package/dist/src/eval.js +0 -187
  378. package/dist/src/eval.js.map +0 -1
  379. package/dist/src/extract.js +0 -117
  380. package/dist/src/extract.js.map +0 -1
  381. package/dist/src/forward-claim-detector.js +0 -117
  382. package/dist/src/forward-claim-detector.js.map +0 -1
  383. package/dist/src/goals.js +0 -399
  384. package/dist/src/goals.js.map +0 -1
  385. package/dist/src/graph-extract.js +0 -314
  386. package/dist/src/graph-extract.js.map +0 -1
  387. package/dist/src/graph-recall.js +0 -277
  388. package/dist/src/graph-recall.js.map +0 -1
  389. package/dist/src/graph-stream.js +0 -176
  390. package/dist/src/graph-stream.js.map +0 -1
  391. package/dist/src/graph-view.js +0 -310
  392. package/dist/src/graph-view.js.map +0 -1
  393. package/dist/src/graph.js +0 -762
  394. package/dist/src/graph.js.map +0 -1
  395. package/dist/src/handoff.js +0 -65
  396. package/dist/src/handoff.js.map +0 -1
  397. package/dist/src/hooks.js +0 -926
  398. package/dist/src/hooks.js.map +0 -1
  399. package/dist/src/importers.js +0 -881
  400. package/dist/src/importers.js.map +0 -1
  401. package/dist/src/incidents.js +0 -336
  402. package/dist/src/incidents.js.map +0 -1
  403. package/dist/src/index.js +0 -32
  404. package/dist/src/index.js.map +0 -1
  405. package/dist/src/invalidation.js +0 -129
  406. package/dist/src/invalidation.js.map +0 -1
  407. package/dist/src/mcp/framing.js +0 -45
  408. package/dist/src/mcp/framing.js.map +0 -1
  409. package/dist/src/mcp/server.js +0 -1298
  410. package/dist/src/mcp/server.js.map +0 -1
  411. package/dist/src/memory-value-weights.js +0 -31
  412. package/dist/src/memory-value-weights.js.map +0 -1
  413. package/dist/src/memory-value.js +0 -261
  414. package/dist/src/memory-value.js.map +0 -1
  415. package/dist/src/memory.js +0 -425
  416. package/dist/src/memory.js.map +0 -1
  417. package/dist/src/multihop.js +0 -35
  418. package/dist/src/multihop.js.map +0 -1
  419. package/dist/src/owner-validation.js +0 -56
  420. package/dist/src/owner-validation.js.map +0 -1
  421. package/dist/src/path-context.js +0 -48
  422. package/dist/src/path-context.js.map +0 -1
  423. package/dist/src/physics-config.js +0 -26
  424. package/dist/src/physics-config.js.map +0 -1
  425. package/dist/src/physics-state.js +0 -172
  426. package/dist/src/physics-state.js.map +0 -1
  427. package/dist/src/physics.js +0 -378
  428. package/dist/src/physics.js.map +0 -1
  429. package/dist/src/policies.js +0 -414
  430. package/dist/src/policies.js.map +0 -1
  431. package/dist/src/postinstall.js +0 -101
  432. package/dist/src/postinstall.js.map +0 -1
  433. package/dist/src/predictions.js +0 -629
  434. package/dist/src/predictions.js.map +0 -1
  435. package/dist/src/processes.js +0 -349
  436. package/dist/src/processes.js.map +0 -1
  437. package/dist/src/project-briefs.js +0 -492
  438. package/dist/src/project-briefs.js.map +0 -1
  439. package/dist/src/project-identity.js +0 -200
  440. package/dist/src/project-identity.js.map +0 -1
  441. package/dist/src/provenance-coverage.js +0 -23
  442. package/dist/src/provenance-coverage.js.map +0 -1
  443. package/dist/src/rate-limit.js +0 -60
  444. package/dist/src/rate-limit.js.map +0 -1
  445. package/dist/src/raw-archive-mirror-cleanup.js +0 -55
  446. package/dist/src/raw-archive-mirror-cleanup.js.map +0 -1
  447. package/dist/src/raw-archive.js +0 -91
  448. package/dist/src/raw-archive.js.map +0 -1
  449. package/dist/src/recall-history.js +0 -235
  450. package/dist/src/recall-history.js.map +0 -1
  451. package/dist/src/recall-scope.js +0 -89
  452. package/dist/src/recall-scope.js.map +0 -1
  453. package/dist/src/recall-trace.js +0 -186
  454. package/dist/src/recall-trace.js.map +0 -1
  455. package/dist/src/refine-llm.js +0 -156
  456. package/dist/src/refine-llm.js.map +0 -1
  457. package/dist/src/reject-flow.js +0 -209
  458. package/dist/src/reject-flow.js.map +0 -1
  459. package/dist/src/rejection.js +0 -160
  460. package/dist/src/rejection.js.map +0 -1
  461. package/dist/src/replay.js +0 -122
  462. package/dist/src/replay.js.map +0 -1
  463. package/dist/src/rerankers/cross-encoder.js +0 -137
  464. package/dist/src/rerankers/cross-encoder.js.map +0 -1
  465. package/dist/src/rerankers/index.js +0 -20
  466. package/dist/src/rerankers/index.js.map +0 -1
  467. package/dist/src/rerankers/jev.js +0 -119
  468. package/dist/src/rerankers/jev.js.map +0 -1
  469. package/dist/src/rerankers/llm.js +0 -80
  470. package/dist/src/rerankers/llm.js.map +0 -1
  471. package/dist/src/rerankers/types.js +0 -2
  472. package/dist/src/rerankers/types.js.map +0 -1
  473. package/dist/src/rrf.js +0 -61
  474. package/dist/src/rrf.js.map +0 -1
  475. package/dist/src/salience.js +0 -74
  476. package/dist/src/salience.js.map +0 -1
  477. package/dist/src/scheduler.js +0 -77
  478. package/dist/src/scheduler.js.map +0 -1
  479. package/dist/src/scope.js +0 -35
  480. package/dist/src/scope.js.map +0 -1
  481. package/dist/src/search.js +0 -1003
  482. package/dist/src/search.js.map +0 -1
  483. package/dist/src/secret-detect.js +0 -95
  484. package/dist/src/secret-detect.js.map +0 -1
  485. package/dist/src/server-detect.js +0 -231
  486. package/dist/src/server-detect.js.map +0 -1
  487. package/dist/src/server.js +0 -3255
  488. package/dist/src/server.js.map +0 -1
  489. package/dist/src/shared.js +0 -502
  490. package/dist/src/shared.js.map +0 -1
  491. package/dist/src/skills.js +0 -346
  492. package/dist/src/skills.js.map +0 -1
  493. package/dist/src/sleep-redact.js +0 -80
  494. package/dist/src/sleep-redact.js.map +0 -1
  495. package/dist/src/sso.js +0 -22
  496. package/dist/src/sso.js.map +0 -1
  497. package/dist/src/stdin.js +0 -41
  498. package/dist/src/stdin.js.map +0 -1
  499. package/dist/src/store.js +0 -3749
  500. package/dist/src/store.js.map +0 -1
  501. package/dist/src/tenant.js +0 -17
  502. package/dist/src/tenant.js.map +0 -1
  503. package/dist/src/trace.js +0 -72
  504. package/dist/src/trace.js.map +0 -1
  505. package/dist/src/version.js +0 -40
  506. package/dist/src/version.js.map +0 -1
  507. package/dist/src/working-memory.js +0 -157
  508. package/dist/src/working-memory.js.map +0 -1
  509. package/dist/src/yaml.js +0 -107
  510. package/dist/src/yaml.js.map +0 -1
  511. package/dist/sso.d.ts +0 -13
  512. package/dist/sso.d.ts.map +0 -1
  513. package/dist/sso.js +0 -22
  514. package/dist/sso.js.map +0 -1
  515. package/dist/stdin.d.ts.map +0 -1
  516. package/dist/stdin.js.map +0 -1
  517. package/dist/store.d.ts.map +0 -1
  518. package/dist/store.js.map +0 -1
  519. package/dist/tenant.d.ts.map +0 -1
  520. package/dist/tenant.js.map +0 -1
  521. package/dist/trace.d.ts.map +0 -1
  522. package/dist/trace.js.map +0 -1
  523. package/dist/version.d.ts.map +0 -1
  524. package/dist/version.js.map +0 -1
  525. package/dist/working-memory.d.ts.map +0 -1
  526. package/dist/working-memory.js.map +0 -1
  527. package/dist/yaml.d.ts.map +0 -1
  528. package/dist/yaml.js.map +0 -1
package/dist/store.d.ts CHANGED
@@ -203,9 +203,7 @@ export declare function buildIndexFromDb(db: ReturnType<typeof openHippoDb>): Hi
203
203
  * `buildIndexFromDb`'s query.
204
204
  */
205
205
  export declare function writeIndexMirror(hippoRoot: string, index: HippoIndex): void;
206
- /**
207
- * Load the current derived index from SQLite and refresh the mirror file.
208
- */
206
+ /** Load the derived index from SQLite. Read-only: writers refresh index.json, so readers never race on it. */
209
207
  export declare function loadIndex(hippoRoot: string): HippoIndex;
210
208
  /**
211
209
  * Persist mutable index metadata. Entry rows themselves are derived from SQLite.
@@ -298,6 +296,9 @@ export declare function readEntry(hippoRoot: string, id: string, tenantId?: stri
298
296
  * to fetch parent summaries for a set of overflowed leaves.
299
297
  */
300
298
  export declare function loadEntriesByIds(hippoRoot: string, ids: readonly string[], tenantId?: string): MemoryEntry[];
299
+ /** Strengthen what a read returned: update only the four retrieval columns on the live row, never a stale copy.
300
+ * Best effort: a failure logs and never fails the read. Returns the ids found in this store. */
301
+ export declare function strengthenRetrieved(hippoRoot: string, ids: readonly string[], tenantId?: string): Set<string>;
301
302
  /**
302
303
  * All `kind='raw'` rows for a given session, tenant-scoped, returned
303
304
  * oldest-first. Used by `api.assemble` to walk a session's chronological
@@ -375,12 +376,14 @@ export declare function loadChildrenOf(hippoRoot: string, parentId: string, tena
375
376
  * removed) and `resolveConflict` (`conflict_resolve` row per resolution).
376
377
  * Default keeps `deleteEntry` byte-identical to its pre-split behavior.
377
378
  *
378
- * Returns `{tenantId, dagParentId}` for the removed row, or `null` if no row
379
- * with `id` existed.
379
+ * Returns `{tenantId, dagParentId}` for the removed row, or `null` if no row with `id`
380
+ * existed or `automatic` refused it (pinned or raw at DELETE time, so a late pin wins).
380
381
  */
381
382
  export declare function deleteEntryCore(db: ReturnType<typeof openHippoDb>, id: string, opts?: {
382
383
  actor?: string;
383
384
  suppressForgetAudit?: boolean;
385
+ reason?: string;
386
+ automatic?: boolean;
384
387
  }): {
385
388
  tenantId: string;
386
389
  dagParentId: string | null;
@@ -398,12 +401,14 @@ export declare function deleteEntryCore(db: ReturnType<typeof openHippoDb>, id:
398
401
  */
399
402
  export declare function deleteEntry(hippoRoot: string, id: string, opts?: {
400
403
  actor?: string;
404
+ reason?: string;
405
+ automatic?: boolean;
401
406
  }): boolean;
402
- /**
403
- * Batch-write and batch-delete entries in a single transaction.
404
- * Used by consolidation to avoid N open/close cycles.
405
- */
406
- export declare function batchWriteAndDelete(hippoRoot: string, toWrite: MemoryEntry[], toDeleteIds: string[]): void;
407
+ /** Consolidation's flush, one transaction. With `snapshot` (rows as the caller loaded them), a write keeps only
408
+ * the fields the caller changed, takes the rest from the live row, and never resurrects a row that is gone. */
409
+ export declare function batchWriteAndDelete(hippoRoot: string, toWrite: MemoryEntry[], toDeleteIds: string[], opts?: {
410
+ snapshot?: ReadonlyMap<string, MemoryEntry>;
411
+ }): string[];
407
412
  /**
408
413
  * Load all entries from SQLite.
409
414
  *
@@ -445,7 +450,7 @@ export declare function loadSearchEntries(hippoRoot: string, query: string, limi
445
450
  * mode (its `tenantId` option is optional); `loadSearchRows` already treats
446
451
  * undefined as "no tenant filter" for legacy callers.
447
452
  */
448
- export declare function loadRecallSearchEntries(hippoRoot: string, query: string, limit?: number, tenantId?: string, requestedScope?: string, explicitScopeMode?: 'exact' | 'additive'): MemoryEntry[];
453
+ export declare function loadRecallSearchEntries(hippoRoot: string, query: string, limit?: number, tenantId?: string, requestedScope?: string, explicitScopeMode?: 'exact' | 'additive', includeSuperseded?: boolean): MemoryEntry[];
449
454
  /**
450
455
  * Rebuild mirrors from SQLite, importing any legacy markdown files not already present.
451
456
  */
@@ -462,6 +467,8 @@ export declare function appendConsolidationRun(hippoRoot: string, run: {
462
467
  merged: number;
463
468
  removed: number;
464
469
  }): void;
470
+ /** Rows a tenant created since the last sleep (runs are host-wide), looking back at most 24 hours. */
471
+ export declare function countCreatedSinceLastSleep(hippoRoot: string, tenantId: string, now?: Date): number;
465
472
  /**
466
473
  * Session decay context: provides the data needed for session-based and adaptive decay.
467
474
  */
package/dist/store.js CHANGED
@@ -6,12 +6,13 @@
6
6
  */
7
7
  import * as fs from 'fs';
8
8
  import * as path from 'path';
9
- import { Layer, generateId } from './memory.js';
9
+ import { Layer, generateId, AUTO_DELETABLE_SQL } from './memory.js';
10
10
  import { dumpFrontmatter, parseFrontmatter } from './yaml.js';
11
11
  import { openHippoDb, closeHippoDb, getMeta, setMeta, isFtsAvailable, pruneConsolidationRuns, getHippoDbPath, } from './db.js';
12
12
  import { rowToSessionHandoff, isHandoffOutcome } from './handoff.js';
13
13
  import { CARD_TRANSITIONS, CARD_LEASE_MS } from './card.js';
14
- import { tokenize } from './search.js';
14
+ import { tokenize, markRetrieved } from './search.js';
15
+ import { isRecallBoostAblated } from './ablation.js';
15
16
  import { appendAuditEvent } from './audit.js';
16
17
  import { resolveTenantId } from './tenant.js';
17
18
  import { deriveOriginProject, originFromSource, findHippoStoreDir, realpathOrResolve } from './project-identity.js';
@@ -504,7 +505,7 @@ function canonicalConflictPair(aId, bId) {
504
505
  ? { memory_a_id: aId, memory_b_id: bId }
505
506
  : { memory_a_id: bId, memory_b_id: aId };
506
507
  }
507
- function loadSearchRows(db, query, limit, tenantId, scopeFilter) {
508
+ function loadSearchRows(db, query, limit, tenantId, scopeFilter, includeSuperseded = true) {
508
509
  // tenantId undefined = no tenant filter (legacy callers / cross-deployment
509
510
  // helpers). tenantId set = strict tenant isolation, leveraging the composite
510
511
  // idx_memories_tenant_created (leading column tenant_id, O(log n) lookup).
@@ -597,13 +598,15 @@ function loadSearchRows(db, query, limit, tenantId, scopeFilter) {
597
598
  scopeParams.push(scopeFilter.value);
598
599
  }
599
600
  }
601
+ const currentAlias = includeSuperseded ? '' : ' AND m.superseded_by IS NULL';
602
+ const currentNoAlias = includeSuperseded ? '' : ' AND superseded_by IS NULL';
600
603
  const terms = Array.from(new Set(tokenize(query)));
601
604
  if (terms.length === 0) {
602
605
  // F3 (v1.7.0) self-review: empty-query path is the second uncapped
603
606
  // path (codex diff-pass caught the full-store fallback at the bottom;
604
607
  // this no-terms path had the same shape). Apply LIMIT so all four
605
608
  // candidate paths honour the caller's cap when set.
606
- const sql = `SELECT ${MEMORY_SELECT_COLUMNS} FROM memories${tenantOnlyPredicate}${archivedClauseTenantOnly}${scopeClauseTenantOnly} ORDER BY created ASC, id ASC LIMIT ?`;
609
+ const sql = `SELECT ${MEMORY_SELECT_COLUMNS} FROM memories${tenantOnlyPredicate}${archivedClauseTenantOnly}${scopeClauseTenantOnly}${currentNoAlias} ORDER BY created ASC, id ASC LIMIT ?`;
607
610
  // SAFETY: sql selects exactly MEMORY_SELECT_COLUMNS, whose column list
608
611
  // matches MemoryRow's field set.
609
612
  return db.prepare(sql).all(...tenantParams, ...scopeParams, limit);
@@ -630,7 +633,7 @@ function loadSearchRows(db, query, limit, tenantId, scopeFilter) {
630
633
  SELECT ${MEMORY_SEARCH_COLUMNS}
631
634
  FROM memories m
632
635
  JOIN memories_fts f ON f.id = m.id
633
- WHERE memories_fts MATCH ?${tenantPredicate}${archivedClauseAlias}${scopeClauseAlias}
636
+ WHERE memories_fts MATCH ?${tenantPredicate}${archivedClauseAlias}${scopeClauseAlias}${currentAlias}
634
637
  ORDER BY bm25(memories_fts), m.updated_at DESC, m.content ASC, m.id ASC
635
638
  LIMIT ?
636
639
  `).all(ftsQuery, ...tenantParams, ...scopeParams, limit);
@@ -652,7 +655,7 @@ function loadSearchRows(db, query, limit, tenantId, scopeFilter) {
652
655
  const rows = db.prepare(`
653
656
  SELECT ${MEMORY_SELECT_COLUMNS}
654
657
  FROM memories
655
- WHERE (${where})${tenantPredicateNoAlias}${archivedClauseNoAlias}${scopeClauseNoAlias}
658
+ WHERE (${where})${tenantPredicateNoAlias}${archivedClauseNoAlias}${scopeClauseNoAlias}${currentNoAlias}
656
659
  ORDER BY updated_at DESC, created DESC, content ASC, id ASC
657
660
  LIMIT ?
658
661
  `).all(...params, ...tenantParams, ...scopeParams, limit);
@@ -663,7 +666,7 @@ function loadSearchRows(db, query, limit, tenantId, scopeFilter) {
663
666
  // now reported on RecallResult, an unbounded fallback would lie about
664
667
  // candidate-pool size. Apply LIMIT here so all four paths honour the
665
668
  // caller's cap.
666
- const fallback = `SELECT ${MEMORY_SELECT_COLUMNS} FROM memories${tenantOnlyPredicate}${archivedClauseTenantOnly}${scopeClauseTenantOnly} ORDER BY created ASC, id ASC LIMIT ?`;
669
+ const fallback = `SELECT ${MEMORY_SELECT_COLUMNS} FROM memories${tenantOnlyPredicate}${archivedClauseTenantOnly}${scopeClauseTenantOnly}${currentNoAlias} ORDER BY created ASC, id ASC LIMIT ?`;
667
670
  // SAFETY: fallback selects exactly MEMORY_SELECT_COLUMNS, matching
668
671
  // MemoryRow's field set.
669
672
  return db.prepare(fallback).all(...tenantParams, ...scopeParams, limit);
@@ -1064,18 +1067,28 @@ function buildStatsFromDb(db) {
1064
1067
  * `buildIndexFromDb`'s query.
1065
1068
  */
1066
1069
  export function writeIndexMirror(hippoRoot, index) {
1067
- fs.writeFileSync(path.join(hippoRoot, 'index.json'), JSON.stringify(index, null, 2), 'utf8');
1070
+ mirrorBestEffort('index.json', () => fs.writeFileSync(path.join(hippoRoot, 'index.json'), JSON.stringify(index, null, 2), 'utf8'));
1068
1071
  }
1069
1072
  function writeStatsMirror(hippoRoot, stats) {
1070
- fs.writeFileSync(path.join(hippoRoot, 'stats.json'), JSON.stringify(stats, null, 2), 'utf8');
1073
+ mirrorBestEffort('stats.json', () => fs.writeFileSync(path.join(hippoRoot, 'stats.json'), JSON.stringify(stats, null, 2), 'utf8'));
1074
+ }
1075
+ /** Mirrors are derived from SQLite and written after COMMIT, so a failed write warns instead of failing a committed change. */
1076
+ function mirrorBestEffort(what, write) {
1077
+ try {
1078
+ write();
1079
+ }
1080
+ catch (err) {
1081
+ console.error(`hippo: ${what} not refreshed (${err instanceof Error ? err.message : String(err)}); the database write succeeded`);
1082
+ }
1071
1083
  }
1072
1084
  function syncMirrorFiles(hippoRoot, db) {
1073
1085
  // SAFETY: this query selects exactly MEMORY_SELECT_COLUMNS, matching
1074
1086
  // MemoryRow's field set.
1075
1087
  const entries = db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories ORDER BY created ASC, id ASC`).all();
1076
- for (const entry of entries.map(rowToEntry)) {
1077
- writeMarkdownMirror(hippoRoot, entry);
1078
- }
1088
+ mirrorBestEffort('markdown mirrors', () => {
1089
+ for (const entry of entries.map(rowToEntry))
1090
+ writeMarkdownMirror(hippoRoot, entry);
1091
+ });
1079
1092
  // SAFETY: conflicts' shape matches the eight columns named in the SELECT
1080
1093
  // above.
1081
1094
  const conflicts = db.prepare(`
@@ -1084,20 +1097,16 @@ function syncMirrorFiles(hippoRoot, db) {
1084
1097
  WHERE status = 'open'
1085
1098
  ORDER BY updated_at DESC, id DESC
1086
1099
  `).all();
1087
- writeConflictMirrors(hippoRoot, conflicts.map(rowToMemoryConflict));
1100
+ mirrorBestEffort('conflict mirrors', () => writeConflictMirrors(hippoRoot, conflicts.map(rowToMemoryConflict)));
1088
1101
  writeIndexMirror(hippoRoot, buildIndexFromDb(db));
1089
1102
  writeStatsMirror(hippoRoot, buildStatsFromDb(db));
1090
1103
  }
1091
- /**
1092
- * Load the current derived index from SQLite and refresh the mirror file.
1093
- */
1104
+ /** Load the derived index from SQLite. Read-only: writers refresh index.json, so readers never race on it. */
1094
1105
  export function loadIndex(hippoRoot) {
1095
1106
  initStore(hippoRoot);
1096
1107
  const db = openHippoDb(hippoRoot);
1097
1108
  try {
1098
- const index = buildIndexFromDb(db);
1099
- writeIndexMirror(hippoRoot, index);
1100
- return index;
1109
+ return buildIndexFromDb(db);
1101
1110
  }
1102
1111
  finally {
1103
1112
  closeHippoDb(db);
@@ -1267,7 +1276,7 @@ export function writeEntryDbOnly(db, entry, opts) {
1267
1276
  * during a tx that subsequently rolls back would leave orphan markdown.
1268
1277
  */
1269
1278
  export function writeEntryMirrors(hippoRoot, db, entry) {
1270
- writeMarkdownMirror(hippoRoot, entry);
1279
+ mirrorBestEffort(`${entry.id}.md`, () => writeMarkdownMirror(hippoRoot, entry));
1271
1280
  writeIndexMirror(hippoRoot, buildIndexFromDb(db));
1272
1281
  }
1273
1282
  /**
@@ -1320,6 +1329,46 @@ export function loadEntriesByIds(hippoRoot, ids, tenantId) {
1320
1329
  closeHippoDb(db);
1321
1330
  }
1322
1331
  }
1332
+ /** Strengthen what a read returned: update only the four retrieval columns on the live row, never a stale copy.
1333
+ * Best effort: a failure logs and never fails the read. Returns the ids found in this store. */
1334
+ export function strengthenRetrieved(hippoRoot, ids, tenantId) {
1335
+ const found = new Set();
1336
+ if (ids.length === 0 || isRecallBoostAblated())
1337
+ return found;
1338
+ let db;
1339
+ try {
1340
+ db = openHippoDb(hippoRoot);
1341
+ db.exec('BEGIN IMMEDIATE');
1342
+ const tenantClause = tenantId !== undefined ? ' AND tenant_id = ?' : '';
1343
+ const select = db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE id = ?${tenantClause}`);
1344
+ const live = [];
1345
+ for (const id of ids) {
1346
+ // SAFETY: the SELECT names exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
1347
+ const row = (tenantId !== undefined ? select.get(id, tenantId) : select.get(id));
1348
+ if (row)
1349
+ live.push(rowToEntry(row));
1350
+ }
1351
+ const update = db.prepare('UPDATE memories SET retrieval_count = ?, last_retrieved = ?, half_life_days = ?, strength = ? WHERE id = ?');
1352
+ for (const e of markRetrieved(live)) {
1353
+ update.run(e.retrieval_count, e.last_retrieved, e.half_life_days, e.strength, e.id);
1354
+ found.add(e.id);
1355
+ }
1356
+ db.exec('COMMIT');
1357
+ }
1358
+ catch (error) {
1359
+ try {
1360
+ db?.exec('ROLLBACK');
1361
+ }
1362
+ catch { /* already rolled back; keep the original error */ }
1363
+ console.error(`hippo: retrieval stats not saved (${error instanceof Error ? error.message : String(error)})`);
1364
+ found.clear();
1365
+ }
1366
+ finally {
1367
+ if (db)
1368
+ closeHippoDb(db);
1369
+ }
1370
+ return found;
1371
+ }
1323
1372
  /**
1324
1373
  * All `kind='raw'` rows for a given session, tenant-scoped, returned
1325
1374
  * oldest-first. Used by `api.assemble` to walk a session's chronological
@@ -1499,8 +1548,8 @@ export function loadChildrenOf(hippoRoot, parentId, tenantId) {
1499
1548
  * removed) and `resolveConflict` (`conflict_resolve` row per resolution).
1500
1549
  * Default keeps `deleteEntry` byte-identical to its pre-split behavior.
1501
1550
  *
1502
- * Returns `{tenantId, dagParentId}` for the removed row, or `null` if no row
1503
- * with `id` existed.
1551
+ * Returns `{tenantId, dagParentId}` for the removed row, or `null` if no row with `id`
1552
+ * existed or `automatic` refused it (pinned or raw at DELETE time, so a late pin wins).
1504
1553
  */
1505
1554
  export function deleteEntryCore(db, id, opts) {
1506
1555
  // SAFETY: row's shape matches the three columns named in the SELECT above.
@@ -1509,10 +1558,12 @@ export function deleteEntryCore(db, id, opts) {
1509
1558
  .get(id);
1510
1559
  if (!row?.id)
1511
1560
  return null;
1512
- db.prepare(`DELETE FROM memories WHERE id = ?`).run(id);
1561
+ const guard = opts?.automatic ? ` AND ${AUTO_DELETABLE_SQL}` : '';
1562
+ if (Number(db.prepare(`DELETE FROM memories WHERE id = ?${guard}`).run(id).changes ?? 0) === 0)
1563
+ return null;
1513
1564
  deleteFtsRow(db, id);
1514
1565
  if (!opts?.suppressForgetAudit) {
1515
- audit(db, 'forget', id, undefined, opts?.actor ?? 'cli', row.tenant_id);
1566
+ audit(db, 'forget', id, opts?.reason ? { reason: opts.reason } : undefined, opts?.actor ?? 'cli', row.tenant_id);
1516
1567
  }
1517
1568
  // v0.30 / E2 — DAG live-coupling: forget of a child under a level-2
1518
1569
  // summary marks parent dirty. Non-atomic with the DELETE (no SAVEPOINT
@@ -1542,7 +1593,7 @@ export function deleteEntry(hippoRoot, id, opts) {
1542
1593
  const result = deleteEntryCore(db, id, opts);
1543
1594
  if (!result)
1544
1595
  return false;
1545
- removeEntryMirrors(hippoRoot, id);
1596
+ purgeMirrorBestEffort(hippoRoot, id, false, 'deleteEntry');
1546
1597
  writeIndexMirror(hippoRoot, buildIndexFromDb(db));
1547
1598
  return true;
1548
1599
  }
@@ -1550,13 +1601,22 @@ export function deleteEntry(hippoRoot, id, opts) {
1550
1601
  closeHippoDb(db);
1551
1602
  }
1552
1603
  }
1553
- /**
1554
- * Batch-write and batch-delete entries in a single transaction.
1555
- * Used by consolidation to avoid N open/close cycles.
1556
- */
1557
- export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds) {
1604
+ // The child fields a level-2/3 summary is built from (loadChildrenOfSummary, generateDagSummary).
1605
+ const SUMMARY_INPUTS = ['content', 'created', 'dag_parent_id', 'kind'];
1606
+ function mergeOwnChanges(base, ours, live) {
1607
+ const row = { ...live };
1608
+ const loaded = new Map(Object.entries(base));
1609
+ for (const [key, value] of Object.entries(ours)) {
1610
+ if (JSON.stringify(value) !== JSON.stringify(loaded.get(key)))
1611
+ Object.assign(row, { [key]: value });
1612
+ }
1613
+ return row;
1614
+ }
1615
+ /** Consolidation's flush, one transaction. With `snapshot` (rows as the caller loaded them), a write keeps only
1616
+ * the fields the caller changed, takes the rest from the live row, and never resurrects a row that is gone. */
1617
+ export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds, opts) {
1558
1618
  if (toWrite.length === 0 && toDeleteIds.length === 0)
1559
- return;
1619
+ return [];
1560
1620
  initStore(hippoRoot);
1561
1621
  const db = openHippoDb(hippoRoot);
1562
1622
  try {
@@ -1576,23 +1636,23 @@ export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds) {
1576
1636
  // dirty for the dominant mutation source (decay, merge, garbage-collect).
1577
1637
  const dirtyParents = new Set();
1578
1638
  const tenantById = new Map();
1639
+ const deletableIds = [];
1579
1640
  if (toDeleteIds.length > 0) {
1580
1641
  const placeholders = toDeleteIds.map(() => '?').join(',');
1581
- // SAFETY: rows' shape matches the two columns named in the SELECT
1582
- // above.
1583
- const rows = db.prepare(`SELECT dag_parent_id, tenant_id FROM memories WHERE id IN (${placeholders})`).all(...toDeleteIds);
1642
+ // A row pinned after the caller decided to delete it survives.
1643
+ // SAFETY: rows' shape matches the three columns named in the SELECT.
1644
+ const rows = db.prepare(`SELECT id, dag_parent_id, tenant_id FROM memories WHERE id IN (${placeholders}) AND ${AUTO_DELETABLE_SQL}`).all(...toDeleteIds);
1584
1645
  for (const row of rows) {
1646
+ deletableIds.push(row.id);
1585
1647
  if (row.dag_parent_id) {
1586
1648
  dirtyParents.add(row.dag_parent_id);
1587
1649
  tenantById.set(row.dag_parent_id, row.tenant_id ?? 'default');
1588
1650
  }
1589
1651
  }
1590
1652
  }
1591
- // v39: consolidate's new semantic rows (and any other batch writer)
1592
- // bypass writeEntry, so stamp store-derived origins here too - a NULL
1593
- // origin would make freshly consolidated memories vanish from ambient
1594
- // context (codex gating review P1).
1595
- const stampedWrites = toWrite.map((e) => stampOriginProject(hippoRoot, e));
1653
+ // v39: batch writers bypass writeEntry, so stamp store-derived origins here too (a NULL origin hides new
1654
+ // memories from ambient context). A row queued twice keeps only its last version, the one the merge compares.
1655
+ const stampedWrites = [...new Map(toWrite.map((e) => [e.id, stampOriginProject(hippoRoot, e)])).values()];
1596
1656
  // AT1 P1 fix (codex, batch-transaction rejection race): the producer-side
1597
1657
  // check (e.g. consolidate.ts's merge pass) runs BEFORE this transaction,
1598
1658
  // on a different connection. A `hippo reject X` that commits in that
@@ -1611,9 +1671,15 @@ export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds) {
1611
1671
  // demotion/replay re-persist of a rejected-removed row means it stays
1612
1672
  // gone, which is the entire point of the tombstone.
1613
1673
  let batchRejectedSkips = 0;
1614
- const skippedWriteIds = new Set();
1674
+ const written = [];
1675
+ const readLiveRow = db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE id = ?`);
1615
1676
  for (const entry of stampedWrites) {
1616
- const entryTenantId = entry.tenantId ?? 'default';
1677
+ const base = opts?.snapshot?.get(entry.id);
1678
+ // SAFETY: MEMORY_SELECT_COLUMNS is the MemoryRow shape rowToEntry reads.
1679
+ const liveRow = readLiveRow.get(entry.id);
1680
+ const live = liveRow ? rowToEntry(liveRow) : undefined;
1681
+ const row = base && live ? mergeOwnChanges(base, entry, live) : entry;
1682
+ const entryTenantId = row.tenantId ?? 'default';
1617
1683
  // Codex delta-review P2 fix: reuse checkRejectionGuard rather than a
1618
1684
  // bare tombstone probe — the guard's content-INTRODUCTION
1619
1685
  // classification must apply here too. A tombstone can legitimately
@@ -1624,17 +1690,19 @@ export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds) {
1624
1690
  // changes content TO the rejected value; unchanged same-id re-persists
1625
1691
  // pass through, exactly as on the writeEntry path.
1626
1692
  try {
1627
- checkRejectionGuard(db, entryTenantId, entry.id, entry.content);
1693
+ checkRejectionGuard(db, entryTenantId, row.id, row.content);
1628
1694
  }
1629
1695
  catch (err) {
1630
1696
  if (err instanceof RejectedValueError) {
1631
1697
  batchRejectedSkips++;
1632
- skippedWriteIds.add(entry.id);
1633
- audit(db, 'reject_refusal', entry.id, { digest: err.digest, reason: err.reason }, 'sleep-batch', entryTenantId);
1698
+ audit(db, 'reject_refusal', row.id, { digest: err.digest, reason: err.reason }, 'sleep-batch', entryTenantId);
1634
1699
  continue;
1635
1700
  }
1636
1701
  throw err;
1637
1702
  }
1703
+ if (base && !live)
1704
+ continue;
1705
+ written.push(row);
1638
1706
  // AT1 (plan §3, corrected): bypass the rejection guard here.
1639
1707
  // Consolidation merges are DETERMINISTIC CONCATENATION (mergeContents,
1640
1708
  // consolidate.ts:736-751) of already-guarded leaf facts, not an LLM
@@ -1647,14 +1715,14 @@ export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds) {
1647
1715
  // check and this COMMIT. The guard itself still belongs on leaf
1648
1716
  // inserts, which write through writeEntry / writeEntryDbOnly and stay
1649
1717
  // guarded (bypassRejectionGuard defaults false).
1650
- upsertEntryRow(db, entry, true);
1651
- // Hook for writes: child upserted under a level-2 summary marks parent dirty.
1652
- if (entry.dag_parent_id) {
1653
- dirtyParents.add(entry.dag_parent_id);
1654
- tenantById.set(entry.dag_parent_id, entry.tenantId);
1718
+ upsertEntryRow(db, row, true);
1719
+ // Hook for writes: a new child, or a change to what its summary reads, marks the parent dirty; decay alone does not.
1720
+ if (row.dag_parent_id && (!live || SUMMARY_INPUTS.some((k) => row[k] !== live[k]))) {
1721
+ dirtyParents.add(row.dag_parent_id);
1722
+ tenantById.set(row.dag_parent_id, row.tenantId);
1655
1723
  }
1656
1724
  }
1657
- for (const id of toDeleteIds) {
1725
+ for (const id of deletableIds) {
1658
1726
  db.prepare('DELETE FROM memories WHERE id = ?').run(id);
1659
1727
  deleteFtsRow(db, id);
1660
1728
  }
@@ -1670,15 +1738,14 @@ export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds) {
1670
1738
  // Sync mirrors once after all DB writes. Entries skipped above were
1671
1739
  // never inserted — writing their markdown mirror would resurrect the
1672
1740
  // exact content the skip just kept out of the DB.
1673
- for (const entry of stampedWrites) {
1674
- if (skippedWriteIds.has(entry.id))
1675
- continue;
1676
- writeMarkdownMirror(hippoRoot, entry);
1677
- }
1678
- for (const id of toDeleteIds) {
1679
- removeEntryMirrors(hippoRoot, id);
1680
- }
1741
+ mirrorBestEffort('markdown mirrors', () => {
1742
+ for (const entry of written)
1743
+ writeMarkdownMirror(hippoRoot, entry);
1744
+ });
1745
+ for (const id of deletableIds)
1746
+ purgeMirrorBestEffort(hippoRoot, id, false, 'batchWriteAndDelete');
1681
1747
  writeIndexMirror(hippoRoot, buildIndexFromDb(db));
1748
+ return deletableIds;
1682
1749
  }
1683
1750
  catch (error) {
1684
1751
  try {
@@ -1799,7 +1866,7 @@ export function loadSearchEntries(hippoRoot, query, limit = DEFAULT_SEARCH_CANDI
1799
1866
  * mode (its `tenantId` option is optional); `loadSearchRows` already treats
1800
1867
  * undefined as "no tenant filter" for legacy callers.
1801
1868
  */
1802
- export function loadRecallSearchEntries(hippoRoot, query, limit = DEFAULT_SEARCH_CANDIDATE_LIMIT, tenantId, requestedScope, explicitScopeMode = 'exact') {
1869
+ export function loadRecallSearchEntries(hippoRoot, query, limit = DEFAULT_SEARCH_CANDIDATE_LIMIT, tenantId, requestedScope, explicitScopeMode = 'exact', includeSuperseded = true) {
1803
1870
  initStore(hippoRoot);
1804
1871
  const db = openHippoDb(hippoRoot);
1805
1872
  try {
@@ -1812,7 +1879,7 @@ export function loadRecallSearchEntries(hippoRoot, query, limit = DEFAULT_SEARCH
1812
1879
  ? { mode: 'default-deny-or-exact', value: requestedScope }
1813
1880
  : { mode: 'exact', value: requestedScope }
1814
1881
  : { mode: 'default-deny' };
1815
- return loadSearchRows(db, query, limit, tenantId, scopeFilter).map(rowToEntry);
1882
+ return loadSearchRows(db, query, limit, tenantId, scopeFilter, includeSuperseded).map(rowToEntry);
1816
1883
  }
1817
1884
  finally {
1818
1885
  closeHippoDb(db);
@@ -1903,9 +1970,7 @@ export function loadStats(hippoRoot) {
1903
1970
  initStore(hippoRoot);
1904
1971
  const db = openHippoDb(hippoRoot);
1905
1972
  try {
1906
- const stats = buildStatsFromDb(db);
1907
- writeStatsMirror(hippoRoot, stats);
1908
- return stats;
1973
+ return buildStatsFromDb(db);
1909
1974
  }
1910
1975
  finally {
1911
1976
  closeHippoDb(db);
@@ -1923,6 +1988,20 @@ export function appendConsolidationRun(hippoRoot, run) {
1923
1988
  closeHippoDb(db);
1924
1989
  }
1925
1990
  }
1991
+ /** Rows a tenant created since the last sleep (runs are host-wide), looking back at most 24 hours. */
1992
+ export function countCreatedSinceLastSleep(hippoRoot, tenantId, now = new Date()) {
1993
+ initStore(hippoRoot);
1994
+ const db = openHippoDb(hippoRoot);
1995
+ try {
1996
+ const dayAgo = new Date(now.getTime() - 86_400_000).toISOString();
1997
+ const row = db.prepare(`SELECT COUNT(*) AS n FROM memories WHERE tenant_id = ?
1998
+ AND created > MAX(?, COALESCE((SELECT MAX(timestamp) FROM consolidation_runs), ''))`).get(tenantId, dayAgo);
1999
+ return row.n;
2000
+ }
2001
+ finally {
2002
+ closeHippoDb(db);
2003
+ }
2004
+ }
1926
2005
  /**
1927
2006
  * Load the session decay context from the store.
1928
2007
  * Uses consolidation_runs timestamps to compute session intervals.
@@ -3492,6 +3571,7 @@ export function loadAllL2Summaries(hippoRoot) {
3492
3571
  WHERE dag_level = 2
3493
3572
  AND dag_parent_id IS NULL
3494
3573
  AND kind != 'archived'
3574
+ AND superseded_by IS NULL
3495
3575
  ORDER BY created ASC, id ASC
3496
3576
  `).all();
3497
3577
  return rows.map(rowToEntry);
@@ -3548,6 +3628,7 @@ export function loadChildrenOfSummary(hippoRoot, summaryId, tenantId) {
3548
3628
  WHERE dag_parent_id = ?
3549
3629
  AND tenant_id = ?
3550
3630
  AND kind != 'archived'
3631
+ AND superseded_by IS NULL
3551
3632
  ORDER BY created ASC
3552
3633
  `).all(summaryId, tenantId);
3553
3634
  return rows.map(rowToEntry);
package/dist/version.d.ts CHANGED
@@ -1,11 +1,9 @@
1
1
  /**
2
2
  * Single source of truth for the hippo-memory binary's package version.
3
3
  *
4
- * Bumped manually on every release alongside this file + four other package
5
- * manifests (package.json, openclaw.plugin.json,
6
- * extensions/openclaw-plugin/package.json,
7
- * extensions/openclaw-plugin/openclaw.plugin.json) and the lockfile —
8
- * five manifests in total carrying the version field.
4
+ * Written by `npm version <x> --no-git-tag-version` through
5
+ * scripts/sync-version.mjs, with the three plugin manifests; never edit it by
6
+ * hand. scripts/check-manifest-versions.mjs gates publish on all seven sites.
9
7
  *
10
8
  * Used by:
11
9
  * - src/db.ts rollback-safety guard (refuses to open a DB stamped with
@@ -18,7 +16,7 @@
18
16
  * an ESM `import` can resolve cleanly, and a hardcoded constant survives
19
17
  * any packager that drops .json files.
20
18
  */
21
- export declare const PACKAGE_VERSION = "1.44.0";
19
+ export declare const PACKAGE_VERSION = "1.45.0";
22
20
  /** Compares plain x.y.z versions, positive if a > b; tags throw so the rollback guard never misfires silently. */
23
21
  export declare function compareSemver(a: string, b: string): number;
24
22
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,11 +1,9 @@
1
1
  /**
2
2
  * Single source of truth for the hippo-memory binary's package version.
3
3
  *
4
- * Bumped manually on every release alongside this file + four other package
5
- * manifests (package.json, openclaw.plugin.json,
6
- * extensions/openclaw-plugin/package.json,
7
- * extensions/openclaw-plugin/openclaw.plugin.json) and the lockfile —
8
- * five manifests in total carrying the version field.
4
+ * Written by `npm version <x> --no-git-tag-version` through
5
+ * scripts/sync-version.mjs, with the three plugin manifests; never edit it by
6
+ * hand. scripts/check-manifest-versions.mjs gates publish on all seven sites.
9
7
  *
10
8
  * Used by:
11
9
  * - src/db.ts rollback-safety guard (refuses to open a DB stamped with
@@ -18,8 +16,7 @@
18
16
  * an ESM `import` can resolve cleanly, and a hardcoded constant survives
19
17
  * any packager that drops .json files.
20
18
  */
21
- export const PACKAGE_VERSION = '1.44.0';
22
- // Bump on every release alongside the 4 other manifests + lockfile.
19
+ export const PACKAGE_VERSION = '1.45.0';
23
20
  /** Compares plain x.y.z versions, positive if a > b; tags throw so the rollback guard never misfires silently. */
24
21
  export function compareSemver(a, b) {
25
22
  const parse = (v) => {
@@ -2,7 +2,7 @@
2
2
  "id": "hippo-memory",
3
3
  "name": "Hippo Memory",
4
4
  "description": "Biologically-inspired memory for AI agents. Decay by default, retrieval strengthening, sleep consolidation.",
5
- "version": "1.44.0",
5
+ "version": "1.45.0",
6
6
 
7
7
  "configSchema": {
8
8
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hippo-memory",
3
- "version": "1.44.0",
3
+ "version": "1.45.0",
4
4
  "type": "module",
5
5
  "description": "Hippo Memory plugin for OpenClaw - biologically-inspired agent memory",
6
6
  "main": "index.ts",
@@ -2,7 +2,7 @@
2
2
  "id": "hippo-memory",
3
3
  "name": "Hippo Memory",
4
4
  "description": "Biologically-inspired memory for AI agents. Decay by default, retrieval strengthening, sleep consolidation.",
5
- "version": "1.44.0",
5
+ "version": "1.45.0",
6
6
  "configSchema": {
7
7
  "type": "object",
8
8
  "additionalProperties": false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hippo-memory",
3
- "version": "1.44.0",
3
+ "version": "1.45.0",
4
4
  "description": "Biologically-inspired memory for AI agents. Zero runtime deps, SQLite, MCP server, and an opt-in hosted TypeSafe Jev reranker. Decay, retrieval strengthening, consolidation.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -17,6 +17,8 @@
17
17
  },
18
18
  "files": [
19
19
  "dist",
20
+ "!dist/src",
21
+ "!dist/**/*.map",
20
22
  "dist-ui",
21
23
  "bin",
22
24
  "scripts/postinstall.cjs",
@@ -25,7 +27,7 @@
25
27
  ],
26
28
  "scripts": {
27
29
  "baseline": "npm run build && npm test",
28
- "build": "tsc && tsc -p tsconfig.benchmarks.json && tsc -p tsconfig.extensions.json",
30
+ "build": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc && tsc -p tsconfig.benchmarks.json && tsc -p tsconfig.extensions.json",
29
31
  "dev": "tsc --watch",
30
32
  "pretest": "npm run build",
31
33
  "test": "vitest run",
@@ -37,6 +39,7 @@
37
39
  "smoke:openclaw-install": "node scripts/smoke-openclaw-install.mjs",
38
40
  "build:ui": "cd ui && npm install && npm run build",
39
41
  "build:all": "npm run build && npm run build:ui",
42
+ "version": "node scripts/sync-version.mjs && node scripts/check-manifest-versions.mjs",
40
43
  "prepublishOnly": "node scripts/check-manifest-versions.mjs && node scripts/changelog-fragments.mjs check && node scripts/check-em-dashes-in-release-notes.mjs && node scripts/check-graph-writes.mjs && npm run build:all && node scripts/check-openclaw-dist.mjs && npm run smoke:openclaw-install && node scripts/check-tests-pass.mjs"
41
44
  },
42
45
  "keywords": [
@@ -74,7 +77,7 @@
74
77
  },
75
78
  "devDependencies": {
76
79
  "@oxlint/plugins": "^1.78.0",
77
- "@types/node": "^20.11.0",
80
+ "@types/node": "^22.16.0",
78
81
  "oxlint": "^1.78.0",
79
82
  "typescript": "^5.4.0",
80
83
  "vitest": "^3.2.6"
@@ -1 +0,0 @@
1
- {"version":3,"file":"ablation.d.ts","sourceRoot":"","sources":["../src/ablation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AA6CH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;;;GAIG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAG9B;AAED,0EAA0E;AAC1E,wBAAgB,2BAA2B,IAAI,IAAI,CAElD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ablation.js","sourceRoot":"","sources":["../src/ablation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AAWH,IAAI,MAAiC,CAAC;AAEtC,SAAS,QAAQ,CAAC,KAAyB;IACzC,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,CAAC;AAC3C,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC/D,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1C,sEAAsE;QACtE,qEAAqE;QACrE,oEAAoE;QACpE,gEAAgE;QAChE,oEAAoE;QACpE,uEAAuE;QACvE,gCAAgC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;YACzE,SAAS,GAAG,MAAM,CAAC;QACrB,CAAC;IACH,CAAC;IACD,MAAM,GAAG;QACP,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAC/C,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;QAC5D,WAAW,EAAE,WAAW,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;QAC3E,WAAW,EAAE,WAAW,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;QAC3E,SAAS;KACV,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,SAAS,EAAE,CAAC,KAAK,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,SAAS,EAAE,CAAC,WAAW,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,SAAS,EAAE,CAAC,WAAW,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,SAAS,EAAE,CAAC,WAAW,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO;IACrB,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC,SAAS,CAAC;IACjC,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,2BAA2B;IACzC,MAAM,GAAG,SAAS,CAAC;AACrB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ambient.d.ts","sourceRoot":"","sources":["../src/ambient.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,YAAY,CAgFpF;AAaD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CA6BhE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAe/D"}