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
@@ -1,543 +0,0 @@
1
- /**
2
- * Optional embedding-based semantic search for Hippo.
3
- * Uses @huggingface/transformers (local, zero API keys, ~22MB model).
4
- * Falls back silently if the library is not installed.
5
- */
6
- import * as fs from 'fs';
7
- import * as path from 'path';
8
- import { createRequire } from 'module';
9
- import { loadAllEntries } from './store.js';
10
- import { openHippoDb, closeHippoDb, getMeta, setMeta } from './db.js';
11
- import { initializeParticle, savePhysicsState, loadPhysicsState, resetAllPhysicsState } from './physics-state.js';
12
- import { loadConfig } from './config.js';
13
- import { resolveEmbeddingProvider } from './embedding-provider.js';
14
- // Use createRequire for synchronous module resolution check in ESM
15
- const _require = createRequire(import.meta.url);
16
- // Cached availability check
17
- let _embeddingAvailable = null;
18
- // Lazy-loaded pipeline (expensive to initialize)
19
- const _pipelineInstances = new Map();
20
- const _pipelineLoading = new Map();
21
- export const DEFAULT_EMBEDDING_MODEL = 'Xenova/all-MiniLM-L6-v2';
22
- export const EMBEDDING_MODEL_META_KEY = 'embedding_model';
23
- /**
24
- * Bump whenever `embeddingInputText`'s composition changes in a way that
25
- * changes the resulting vectors for existing entries. Folded into the stored
26
- * index identity (see `embeddingIndexIdentity`) so a text-format change is
27
- * treated exactly like an embedding-model change: the next embed-touching
28
- * operation detects the mismatch and reindexes automatically. Format 2 =
29
- * `path:*` tags excluded (see `embeddingInputText`); format 1 (implicit, no
30
- * suffix) = `${content} ${tags.join(' ')}` including path tags.
31
- */
32
- export const EMBED_TEXT_FORMAT = 2;
33
- /**
34
- * The stored-index identity for a given embedding provider id: folds
35
- * `EMBED_TEXT_FORMAT` into the provider id so index-identity comparisons
36
- * automatically invalidate on either a model change OR a text-format change.
37
- * This is the ONE choke point both `embeddingModelRequiresReindex` (compare
38
- * side) and `saveStoredEmbeddingModel` (save side) go through — they MUST
39
- * version identically, or every call reindexes in a loop (or none ever do).
40
- */
41
- export function embeddingIndexIdentity(providerId) {
42
- return `${providerId}#t${EMBED_TEXT_FORMAT}`;
43
- }
44
- /**
45
- * Build the text embedded for a memory entry: content plus its tags, joined
46
- * by a space and trimmed — the same shape as the legacy
47
- * `` `${e.content} ${e.tags.join(' ')}`.trim() `` composition, minus `path:*`
48
- * tags.
49
- *
50
- * `path:*` tags are excluded because they are auto-derived from
51
- * `process.cwd()` (see `extractPathTags` in cli.ts) and carry every path
52
- * component of the store's location, INCLUDING the store directory name
53
- * itself. That means identical content embeds to a DIFFERENT vector
54
- * depending on WHERE the store happens to live — e.g. a fresh benchmark run
55
- * under `tempfile.mkdtemp()` gets a new directory name (hence new path
56
- * tokens, hence a new vector) every single run, even with byte-identical
57
- * content ingested in byte-identical order. This was diagnosed as the
58
- * DOMINANT root cause of cross-fresh-ingest recall-rank variance measured on
59
- * LoCoMo (mean evidence-recall@5 stdev 0.0175 across 4 fresh re-ingests of
60
- * identical data; see `benchmarks/LOCOMO_INVESTIGATION.md`, "Determinism
61
- * characterization"). It is a real product defect beyond benchmarks too:
62
- * retrieval semantics should not depend on a project directory's name.
63
- *
64
- * Only `path:*` is excluded. Other tags (`conv:`, `session:`, `speaker:`,
65
- * `dia:`, `error`, `scope:`, etc.) remain embedded — they carry semantic
66
- * meaning. Path relevance at recall time is already handled explicitly by
67
- * the v39 scope-isolation layer (`origin_project`, `pathOverlapScore`), so
68
- * embedding-level path tokens are redundant with a dedicated mechanism
69
- * rather than a feature.
70
- */
71
- export function embeddingInputText(entry) {
72
- const tags = entry.tags.filter((t) => !t.startsWith('path:'));
73
- return `${entry.content} ${tags.join(' ')}`.trim();
74
- }
75
- /**
76
- * Per-model pooling dispatch for Transformers.js's feature-extraction
77
- * pipeline. BGE family models were trained with CLS pooling (per BAAI's
78
- * official inference code in `FlagEmbedding`); MiniLM and most sentence-
79
- * transformers models use mean pooling. Unknown model ids default to mean
80
- * — that is the safe choice because most third-party models adopt the
81
- * sentence-transformers convention, and the alternative ('cls') silently
82
- * degrades vector quality for mean-pooling models.
83
- */
84
- export function poolingFor(model) {
85
- return /\bbge\b/i.test(model) ? 'cls' : 'mean';
86
- }
87
- export function prefixFor(model, role) {
88
- if (!role)
89
- return '';
90
- if (/\be5\b/i.test(model)) {
91
- return role === 'query' ? 'query: ' : 'passage: ';
92
- }
93
- return '';
94
- }
95
- // Use Function constructor to bypass TypeScript static module resolution
96
- // for optional peer dependencies that may not be installed.
97
- // SAFETY: `import(s)` always resolves to a module namespace object (or rejects);
98
- // Promise<object> names that honestly without claiming a specific module shape.
99
- const _dynImport = new Function('s', 'return import(s)');
100
- /**
101
- * Check (synchronously) if @xenova/transformers or @huggingface/transformers is installed.
102
- */
103
- export function isEmbeddingAvailable() {
104
- if (_embeddingAvailable !== null)
105
- return _embeddingAvailable;
106
- try {
107
- _require.resolve('@xenova/transformers');
108
- _embeddingAvailable = true;
109
- return true;
110
- }
111
- catch {
112
- // fall through
113
- }
114
- try {
115
- _require.resolve('@huggingface/transformers');
116
- _embeddingAvailable = true;
117
- return true;
118
- }
119
- catch {
120
- // fall through
121
- }
122
- _embeddingAvailable = false;
123
- return false;
124
- }
125
- /**
126
- * Pick exactly one Transformers.js implementation before importing either.
127
- *
128
- * Importing both packages in one process loads incompatible native
129
- * onnxruntime-node versions (Xenova v2 uses ORT 1.14; Hugging Face v4 uses a
130
- * current ORT). Their finalizers can double-free an InferenceSession on exit.
131
- * Prefer the maintained package shipped by Hippo, with Xenova retained only as
132
- * a compatibility fallback for users who installed it themselves.
133
- */
134
- function resolveTransformersPackage() {
135
- try {
136
- _require.resolve('@huggingface/transformers');
137
- return '@huggingface/transformers';
138
- }
139
- catch {
140
- // fall through
141
- }
142
- try {
143
- _require.resolve('@xenova/transformers');
144
- return '@xenova/transformers';
145
- }
146
- catch {
147
- return null;
148
- }
149
- }
150
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
151
- async function loadPipeline(model) {
152
- if (_pipelineInstances.has(model))
153
- return _pipelineInstances.get(model);
154
- if (_pipelineLoading.has(model))
155
- return _pipelineLoading.get(model);
156
- const loading = (async () => {
157
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
158
- const pkg = resolveTransformersPackage();
159
- if (!pkg)
160
- return null;
161
- let pipelineFn = null;
162
- try {
163
- // SAFETY: the resolved module's shape is untyped by design (optional peer
164
- // dependency); pipelineFn/mod.env are read defensively below and any
165
- // failure to find a usable pipeline falls through to `return null`.
166
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
167
- const mod = await _dynImport(pkg);
168
- if (process.env.HIPPO_MODEL_CACHE) {
169
- if (mod.env) {
170
- mod.env.cacheDir = process.env.HIPPO_MODEL_CACHE;
171
- mod.env.localModelPath = process.env.HIPPO_MODEL_CACHE;
172
- mod.env.allowRemoteModels = false;
173
- }
174
- }
175
- pipelineFn = mod.pipeline ?? mod.default?.pipeline;
176
- }
177
- catch {
178
- return null;
179
- }
180
- if (!pipelineFn)
181
- return null;
182
- // The Qdrant-vendored bundle (used in egress-restricted sandboxes) ships
183
- // only `onnx/model.onnx` (FP32). The HF default ships `model_quantized.onnx`
184
- // too. When pointing at a local cache, pick the variant that's on disk.
185
- const cacheRoot = process.env.HIPPO_MODEL_CACHE?.trim();
186
- const quantized = !cacheRoot
187
- || fs.existsSync(path.join(cacheRoot, model, 'onnx', 'model_quantized.onnx'));
188
- try {
189
- const instance = await pipelineFn('feature-extraction', model, { quantized });
190
- _pipelineInstances.set(model, instance);
191
- return instance;
192
- }
193
- catch {
194
- return null;
195
- }
196
- finally {
197
- _pipelineLoading.delete(model);
198
- }
199
- })();
200
- _pipelineLoading.set(model, loading);
201
- return loading;
202
- }
203
- export function resolveEmbeddingModel(hippoRoot, explicitModel) {
204
- const direct = explicitModel?.trim();
205
- if (direct)
206
- return direct;
207
- try {
208
- const configured = loadConfig(hippoRoot).embeddings.model?.trim();
209
- if (configured)
210
- return configured;
211
- }
212
- catch {
213
- // Fall back to the default model when config cannot be read.
214
- }
215
- return DEFAULT_EMBEDDING_MODEL;
216
- }
217
- function loadStoredEmbeddingModel(hippoRoot) {
218
- try {
219
- const db = openHippoDb(hippoRoot);
220
- try {
221
- const model = getMeta(db, EMBEDDING_MODEL_META_KEY, '').trim();
222
- return model || null;
223
- }
224
- finally {
225
- closeHippoDb(db);
226
- }
227
- }
228
- catch {
229
- return null;
230
- }
231
- }
232
- /**
233
- * Persist the stored-index identity for `model` (see `embeddingIndexIdentity`).
234
- * Versioning happens INSIDE this function, not at call sites, so every caller
235
- * — current and future — gets the identity format for free. Must stay
236
- * consistent with the compare side in `embeddingModelRequiresReindex`.
237
- */
238
- export function saveStoredEmbeddingModel(hippoRoot, model) {
239
- const db = openHippoDb(hippoRoot);
240
- try {
241
- setMeta(db, EMBEDDING_MODEL_META_KEY, embeddingIndexIdentity(model));
242
- }
243
- finally {
244
- closeHippoDb(db);
245
- }
246
- }
247
- export function resolveIndexedEmbeddingModel(hippoRoot, index = loadEmbeddingIndex(hippoRoot)) {
248
- const stored = loadStoredEmbeddingModel(hippoRoot);
249
- if (stored)
250
- return stored;
251
- return Object.keys(index).length > 0 ? DEFAULT_EMBEDDING_MODEL : null;
252
- }
253
- export function embeddingModelRequiresReindex(hippoRoot, model, index = loadEmbeddingIndex(hippoRoot)) {
254
- const stored = resolveIndexedEmbeddingModel(hippoRoot, index);
255
- return stored !== null && stored !== embeddingIndexIdentity(model);
256
- }
257
- async function rebuildEmbeddingIndex(entries, provider) {
258
- const rebuilt = {};
259
- if (entries.length === 0)
260
- return rebuilt;
261
- const texts = entries.map((e) => embeddingInputText(e));
262
- // provider.embed batches internally; on a hard transport/auth failure it
263
- // throws, so the caller aborts WITHOUT saving a partial index (atomic
264
- // reindex: the old index + stored identity are preserved).
265
- const vectors = await provider.embed(texts, 'passage');
266
- for (let i = 0; i < entries.length; i++) {
267
- const vec = vectors[i];
268
- if (vec && vec.length > 0) {
269
- rebuilt[entries[i].id] = vec;
270
- }
271
- }
272
- return rebuilt;
273
- }
274
- function resetPhysicsFromIndex(hippoRoot, entries, index) {
275
- try {
276
- const db = openHippoDb(hippoRoot);
277
- try {
278
- resetAllPhysicsState(db, entries, index);
279
- }
280
- finally {
281
- closeHippoDb(db);
282
- }
283
- }
284
- catch {
285
- // Physics reset is best-effort; retrieval will still fall back gracefully.
286
- }
287
- }
288
- /**
289
- * Get an embedding vector for a piece of text.
290
- * Returns an empty array if transformers is not available or fails.
291
- *
292
- * Pass `role: 'query'` / `'passage'` to engage asymmetric prefixing for
293
- * model families that require it (currently intfloat/e5-*). Omitting `role`
294
- * keeps the legacy symmetric behavior (no prefix), so BGE / MiniLM callers
295
- * don't need to change.
296
- */
297
- export async function getEmbedding(text, model = DEFAULT_EMBEDDING_MODEL, role) {
298
- if (!isEmbeddingAvailable())
299
- return [];
300
- try {
301
- const pipe = await loadPipeline(model);
302
- if (!pipe)
303
- return [];
304
- const prefix = prefixFor(model, role);
305
- const input = prefix ? `${prefix}${text}` : text;
306
- // SAFETY: pipe() is a Transformers.js feature-extraction pipeline call;
307
- // its untyped output is read defensively below (only `.data`, cast on
308
- // the return line to the documented Float32Array tensor shape).
309
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
310
- const output = await pipe(input, { pooling: poolingFor(model), normalize: true });
311
- // SAFETY: output.data is a Float32Array per the feature-extraction
312
- // pipeline's documented tensor output shape.
313
- return Array.from(output.data);
314
- }
315
- catch {
316
- return [];
317
- }
318
- }
319
- /**
320
- * Cosine similarity between two vectors. Handles unnormalized vectors.
321
- * Returns 0 for empty or mismatched vectors.
322
- */
323
- export function cosineSimilarity(a, b) {
324
- if (a.length === 0 || b.length === 0 || a.length !== b.length)
325
- return 0;
326
- let dot = 0;
327
- let normA = 0;
328
- let normB = 0;
329
- for (let i = 0; i < a.length; i++) {
330
- dot += a[i] * b[i];
331
- normA += a[i] * a[i];
332
- normB += b[i] * b[i];
333
- }
334
- const denom = Math.sqrt(normA) * Math.sqrt(normB);
335
- if (denom < 1e-10)
336
- return 0;
337
- // Clamp to [-1, 1] to handle floating point drift
338
- return Math.min(1, Math.max(-1, dot / denom));
339
- }
340
- const EMBEDDINGS_FILE = 'embeddings.json';
341
- /**
342
- * Load the cached embedding index from disk.
343
- * Returns an empty object if the file doesn't exist or is corrupt.
344
- */
345
- export function loadEmbeddingIndex(hippoRoot) {
346
- const fp = path.join(hippoRoot, EMBEDDINGS_FILE);
347
- if (!fs.existsSync(fp))
348
- return {};
349
- try {
350
- // SAFETY: embeddings.json is written exclusively by saveEmbeddingIndex with
351
- // this exact shape; a corrupt or foreign file is caught by the try/catch
352
- // below and treated as an empty index.
353
- return JSON.parse(fs.readFileSync(fp, 'utf8'));
354
- }
355
- catch {
356
- return {};
357
- }
358
- }
359
- /**
360
- * Save the embedding index to disk.
361
- */
362
- export function saveEmbeddingIndex(hippoRoot, index) {
363
- const fp = path.join(hippoRoot, EMBEDDINGS_FILE);
364
- const tmp = fp + '.tmp';
365
- fs.writeFileSync(tmp, JSON.stringify(index), 'utf8');
366
- try {
367
- fs.renameSync(tmp, fp);
368
- }
369
- catch (err) {
370
- try {
371
- fs.unlinkSync(tmp);
372
- }
373
- catch { /* best-effort cleanup */ }
374
- throw err;
375
- }
376
- }
377
- // Mutex to serialize embedding writes and prevent read-modify-write races
378
- let _embedWriteLock = Promise.resolve();
379
- async function withEmbedLock(fn) {
380
- let resolve;
381
- const next = new Promise(r => { resolve = r; });
382
- const prev = _embedWriteLock;
383
- _embedWriteLock = next;
384
- await prev;
385
- try {
386
- return await fn();
387
- }
388
- finally {
389
- resolve();
390
- }
391
- }
392
- /**
393
- * Embed a single memory entry and cache the result in the embedding index.
394
- */
395
- export async function embedMemory(hippoRoot, entry, model) {
396
- const provider = resolveEmbeddingProvider(hippoRoot, { model });
397
- if (!provider.isAvailable())
398
- return;
399
- return withEmbedLock(async () => {
400
- // embedMemory is best-effort: an embedding failure (API down / bad key / 5xx)
401
- // must not reject the caller's write — `getEmbedding` historically swallowed
402
- // failures and returned []. The explicit `hippo embed` / `embedAll` path is
403
- // where failures surface. On any failure we leave the existing index as-is.
404
- try {
405
- const identity = provider.id;
406
- const existingIndex = loadEmbeddingIndex(hippoRoot);
407
- if (embeddingModelRequiresReindex(hippoRoot, identity, existingIndex)) {
408
- // L9: host-wide rebuild. The embedding index is keyed by entry.id
409
- // (which is tenant-scoped) but the index itself is one per hippoRoot.
410
- // Cross-tenant content equivalence is visible at the vector level.
411
- // Per-tenant indices would be a larger architecture change.
412
- const entries = loadAllEntries(hippoRoot);
413
- const rebuiltIndex = await rebuildEmbeddingIndex(entries, provider);
414
- saveEmbeddingIndex(hippoRoot, rebuiltIndex);
415
- saveStoredEmbeddingModel(hippoRoot, identity);
416
- resetPhysicsFromIndex(hippoRoot, entries, rebuiltIndex);
417
- return;
418
- }
419
- const text = embeddingInputText(entry);
420
- const [vector] = await provider.embed([text], 'passage');
421
- if (!vector || vector.length === 0)
422
- return;
423
- const index = existingIndex;
424
- index[entry.id] = vector;
425
- saveEmbeddingIndex(hippoRoot, index);
426
- saveStoredEmbeddingModel(hippoRoot, identity);
427
- // Initialize physics state for this memory
428
- try {
429
- const db = openHippoDb(hippoRoot);
430
- try {
431
- const existing = loadPhysicsState(db, [entry.id]);
432
- if (!existing.has(entry.id)) {
433
- const particle = initializeParticle(entry, vector);
434
- savePhysicsState(db, [particle]);
435
- }
436
- }
437
- finally {
438
- closeHippoDb(db);
439
- }
440
- }
441
- catch {
442
- // Physics init is best-effort — don't break embedding
443
- }
444
- }
445
- catch {
446
- // Provider failure (API down / bad key). Best-effort: leave the index as-is.
447
- }
448
- });
449
- }
450
- /**
451
- * Embed all entries in hippoRoot that don't already have cached vectors.
452
- * Prunes orphaned embeddings for memories that no longer exist.
453
- * Returns the count of newly embedded entries.
454
- */
455
- export async function embedAll(hippoRoot, model) {
456
- const provider = resolveEmbeddingProvider(hippoRoot, { model });
457
- if (!provider.isAvailable()) {
458
- // A configured (non-disabled) API provider with a missing key is a
459
- // misconfiguration, not a no-op: surface it so programmatic callers of the
460
- // exported embedAll() learn nothing was written. Local-not-installed and an
461
- // explicit enabled=false stay silent no-ops (best-effort / intentional).
462
- const cfg = loadConfig(hippoRoot).embeddings;
463
- if (provider.kind !== 'local' &&
464
- cfg.enabled !== false &&
465
- provider.keyEnv &&
466
- !process.env[provider.keyEnv]?.trim()) {
467
- throw new Error(`Embedding provider '${provider.kind}' is configured but ${provider.keyEnv} is not set.`);
468
- }
469
- return 0;
470
- }
471
- return withEmbedLock(async () => {
472
- const identity = provider.id;
473
- // L9: host-wide by design. embedAll backfills vectors for all tenants'
474
- // entries into the per-host embedding index. Per-tenant filtering would
475
- // produce partial indices and break recall.
476
- const entries = loadAllEntries(hippoRoot);
477
- const index = loadEmbeddingIndex(hippoRoot);
478
- if (embeddingModelRequiresReindex(hippoRoot, identity, index)) {
479
- const rebuiltIndex = await rebuildEmbeddingIndex(entries, provider);
480
- saveEmbeddingIndex(hippoRoot, rebuiltIndex);
481
- saveStoredEmbeddingModel(hippoRoot, identity);
482
- resetPhysicsFromIndex(hippoRoot, entries, rebuiltIndex);
483
- return Object.keys(rebuiltIndex).length;
484
- }
485
- let dirty = false;
486
- // Prune orphaned embeddings for deleted memories
487
- const activeIds = new Set(entries.map((e) => e.id));
488
- for (const id of Object.keys(index)) {
489
- if (!activeIds.has(id)) {
490
- delete index[id];
491
- dirty = true;
492
- }
493
- }
494
- // Embed entries without a cached vector in save-checkpointed chunks.
495
- // provider.embed batches internally (one HTTP request per batchSize for API
496
- // providers; sequential for local). A `[]` row means that single item could
497
- // not be embedded and is left for a later run (resumable). On a hard provider
498
- // failure mid-backfill we persist the chunks already embedded this run rather
499
- // than discarding paid progress, then stop and resume on the next run.
500
- const pending = entries.filter((e) => !index[e.id]);
501
- let count = 0;
502
- // Initialized to `undefined` (not a known-evidence literal like `null`) so
503
- // it stays a plain `unknown` binding for the arbitrary caught value below;
504
- // falsy either way, so `if (backfillError)` behaves identically.
505
- let backfillError = undefined;
506
- const SAVE_CHUNK = 64;
507
- for (let i = 0; i < pending.length; i += SAVE_CHUNK) {
508
- const chunk = pending.slice(i, i + SAVE_CHUNK);
509
- let vectors;
510
- try {
511
- vectors = await provider.embed(chunk.map((e) => embeddingInputText(e)), 'passage');
512
- }
513
- catch (err) {
514
- // Preserve the chunks already saved this run, then surface the failure
515
- // below so the explicit `hippo embed` path never reports a false success.
516
- backfillError = err;
517
- break;
518
- }
519
- let chunkDirty = false;
520
- for (let j = 0; j < chunk.length; j++) {
521
- const vec = vectors[j];
522
- if (vec && vec.length > 0) {
523
- index[chunk[j].id] = vec;
524
- count++;
525
- dirty = true;
526
- chunkDirty = true;
527
- }
528
- }
529
- if (chunkDirty)
530
- saveEmbeddingIndex(hippoRoot, index);
531
- }
532
- if (dirty) {
533
- saveEmbeddingIndex(hippoRoot, index);
534
- }
535
- saveStoredEmbeddingModel(hippoRoot, identity);
536
- // Partial progress is now persisted; surface a hard backfill failure so the
537
- // explicit embed path reports it (best-effort callers go via embedMemory).
538
- if (backfillError)
539
- throw backfillError;
540
- return count;
541
- });
542
- }
543
- //# sourceMappingURL=embeddings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/embeddings.ts"],"names":[],"mappings":"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"}