hippo-memory 1.60.0 → 1.62.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 (593) hide show
  1. package/README.md +29 -54
  2. package/dist/ablation.js +9 -27
  3. package/dist/agent-memories/apply.d.ts +1 -1
  4. package/dist/agent-memories/apply.js +4 -1
  5. package/dist/agent-memories/claude-code.d.ts +3 -1
  6. package/dist/agent-memories/claude-code.js +54 -10
  7. package/dist/agent-memories/codex.js +1 -1
  8. package/dist/agent-memories/gemini.js +1 -1
  9. package/dist/agent-memories/legacy.js +1 -1
  10. package/dist/agent-memories/source.js +1 -1
  11. package/dist/agent-memories/sync.d.ts +3 -3
  12. package/dist/agent-memories/sync.js +22 -9
  13. package/dist/agent-memories/types.d.ts +0 -2
  14. package/dist/ambient-store.d.ts +14 -0
  15. package/dist/ambient-store.js +90 -0
  16. package/dist/ambient.d.ts +23 -0
  17. package/dist/ambient.js +72 -50
  18. package/dist/api/assemble.d.ts +93 -0
  19. package/dist/api/assemble.js +153 -0
  20. package/dist/api/audit.d.ts +17 -0
  21. package/dist/api/audit.js +23 -0
  22. package/dist/api/auth.d.ts +79 -0
  23. package/dist/api/auth.js +178 -0
  24. package/dist/api/context-select.d.ts +49 -0
  25. package/dist/api/context-select.js +344 -0
  26. package/dist/api/context-types.d.ts +105 -0
  27. package/dist/api/context-types.js +3 -0
  28. package/dist/api/context.d.ts +31 -0
  29. package/dist/api/context.js +378 -0
  30. package/dist/api/dormant.d.ts +30 -0
  31. package/dist/api/dormant.js +140 -0
  32. package/dist/api/drill-down.d.ts +84 -0
  33. package/dist/api/drill-down.js +126 -0
  34. package/dist/api/forget.d.ts +57 -0
  35. package/dist/api/forget.js +87 -0
  36. package/dist/api/goals.d.ts +18 -0
  37. package/dist/api/goals.js +33 -0
  38. package/dist/api/learn.d.ts +31 -0
  39. package/dist/api/learn.js +88 -0
  40. package/dist/api/outcome.d.ts +61 -0
  41. package/dist/api/outcome.js +66 -0
  42. package/dist/api/promote.d.ts +54 -0
  43. package/dist/api/promote.js +192 -0
  44. package/dist/api/quarantine.d.ts +24 -0
  45. package/dist/api/quarantine.js +121 -0
  46. package/dist/api/recall-types.d.ts +390 -0
  47. package/dist/api/recall-types.js +3 -0
  48. package/dist/api/recall.d.ts +36 -0
  49. package/dist/api/recall.js +499 -0
  50. package/dist/api/remember.d.ts +35 -0
  51. package/dist/api/remember.js +43 -0
  52. package/dist/api/sleep.d.ts +136 -0
  53. package/dist/api/sleep.js +256 -0
  54. package/dist/api/tokens.d.ts +26 -0
  55. package/dist/api/tokens.js +60 -0
  56. package/dist/api/types.d.ts +56 -0
  57. package/dist/api/types.js +38 -0
  58. package/dist/api.d.ts +20 -1262
  59. package/dist/api.js +25 -2727
  60. package/dist/audit.d.ts +3 -0
  61. package/dist/audit.js +6 -3
  62. package/dist/auth.d.ts +45 -4
  63. package/dist/auth.js +125 -48
  64. package/dist/autolearn.js +2 -2
  65. package/dist/capture/command.d.ts +33 -0
  66. package/dist/capture/command.js +264 -0
  67. package/dist/capture/compact.d.ts +44 -0
  68. package/dist/capture/compact.js +354 -0
  69. package/dist/capture/extract.d.ts +21 -0
  70. package/dist/capture/extract.js +464 -0
  71. package/dist/capture/transcript.d.ts +40 -0
  72. package/dist/capture/transcript.js +193 -0
  73. package/dist/capture-error.js +2 -1
  74. package/dist/churn-git.js +4 -2
  75. package/dist/cli/audit.d.ts +3 -0
  76. package/dist/cli/audit.js +159 -0
  77. package/dist/cli/auth.d.ts +2 -0
  78. package/dist/cli/auth.js +171 -0
  79. package/dist/cli/briefs.d.ts +4 -0
  80. package/dist/cli/briefs.js +453 -0
  81. package/dist/cli/card.d.ts +3 -0
  82. package/dist/cli/card.js +333 -0
  83. package/dist/cli/context.d.ts +15 -0
  84. package/dist/cli/context.js +376 -0
  85. package/dist/cli/continuity.d.ts +6 -0
  86. package/dist/cli/continuity.js +457 -0
  87. package/dist/cli/curate.d.ts +19 -0
  88. package/dist/cli/curate.js +556 -0
  89. package/dist/cli/dag.d.ts +5 -0
  90. package/dist/cli/dag.js +177 -0
  91. package/dist/cli/decisions.d.ts +4 -0
  92. package/dist/cli/decisions.js +528 -0
  93. package/dist/cli/eval.d.ts +5 -0
  94. package/dist/cli/eval.js +213 -0
  95. package/dist/cli/explain.d.ts +4 -0
  96. package/dist/cli/explain.js +156 -0
  97. package/dist/cli/goals.d.ts +2 -0
  98. package/dist/cli/goals.js +196 -0
  99. package/dist/cli/hook-blocks.d.ts +18 -0
  100. package/dist/cli/hook-blocks.js +233 -0
  101. package/dist/cli/init.d.ts +2 -0
  102. package/dist/cli/init.js +305 -0
  103. package/dist/cli/maintenance.d.ts +4 -0
  104. package/dist/cli/maintenance.js +190 -0
  105. package/dist/cli/playbooks.d.ts +4 -0
  106. package/dist/cli/playbooks.js +573 -0
  107. package/dist/cli/projects.js +9 -6
  108. package/dist/cli/recall.d.ts +7 -0
  109. package/dist/cli/recall.js +582 -0
  110. package/dist/cli/remember.d.ts +5 -0
  111. package/dist/cli/remember.js +485 -0
  112. package/dist/cli/serve.d.ts +5 -0
  113. package/dist/cli/serve.js +40 -0
  114. package/dist/cli/session-hooks.d.ts +29 -0
  115. package/dist/cli/session-hooks.js +647 -0
  116. package/dist/cli/setup.d.ts +4 -0
  117. package/dist/cli/setup.js +397 -0
  118. package/dist/cli/shared.d.ts +15 -19
  119. package/dist/cli/shared.js +50 -341
  120. package/dist/cli/slack.d.ts +2 -0
  121. package/dist/cli/slack.js +171 -0
  122. package/dist/cli/status.d.ts +18 -0
  123. package/dist/cli/status.js +409 -0
  124. package/dist/cli/transfer.d.ts +10 -0
  125. package/dist/cli/transfer.js +424 -0
  126. package/dist/cli/usage.d.ts +85 -0
  127. package/dist/cli/usage.js +741 -0
  128. package/dist/cli.d.ts +71 -120
  129. package/dist/cli.js +170 -8469
  130. package/dist/client.js +15 -8
  131. package/dist/compaction-record.d.ts +0 -2
  132. package/dist/compaction-record.js +7 -5
  133. package/dist/connectors/github/backfill.js +94 -87
  134. package/dist/connectors/github/cli-impl.js +4 -3
  135. package/dist/connectors/github/dlq.js +67 -54
  136. package/dist/connectors/github/ingest.js +34 -35
  137. package/dist/connectors/github/tenant-routing.js +3 -2
  138. package/dist/connectors/github/webhook.js +135 -216
  139. package/dist/connectors/slack/dlq.js +49 -61
  140. package/dist/connectors/slack/ingest.js +55 -48
  141. package/dist/connectors/slack/tenant-routing.js +4 -3
  142. package/dist/connectors/slack/webhook.js +72 -74
  143. package/dist/consolidate/conflicts.d.ts +10 -0
  144. package/dist/consolidate/conflicts.js +178 -0
  145. package/dist/consolidate/decay.d.ts +12 -0
  146. package/dist/consolidate/decay.js +145 -0
  147. package/dist/consolidate/llm-passes.d.ts +3 -0
  148. package/dist/consolidate/llm-passes.js +141 -0
  149. package/dist/consolidate/merge.d.ts +7 -0
  150. package/dist/consolidate/merge.js +251 -0
  151. package/dist/consolidate/physics-pass.d.ts +3 -0
  152. package/dist/consolidate/physics-pass.js +60 -0
  153. package/dist/consolidate/run.d.ts +69 -0
  154. package/dist/consolidate/run.js +76 -0
  155. package/dist/consolidate/sleep.d.ts +18 -0
  156. package/dist/consolidate/sleep.js +209 -0
  157. package/dist/consolidate/traces.d.ts +4 -0
  158. package/dist/consolidate/traces.js +178 -0
  159. package/dist/context-auto.js +7 -11
  160. package/dist/context-render.d.ts +1 -1
  161. package/dist/context-render.js +1 -1
  162. package/dist/customer-notes.d.ts +3 -0
  163. package/dist/customer-notes.js +83 -72
  164. package/dist/dag.js +225 -188
  165. package/dist/dashboard-actions.d.ts +20 -0
  166. package/dist/dashboard-actions.js +88 -0
  167. package/dist/dashboard-params.d.ts +45 -0
  168. package/dist/dashboard-params.js +127 -0
  169. package/dist/dashboard-queries.d.ts +15 -0
  170. package/dist/dashboard-queries.js +355 -0
  171. package/dist/dashboard-snapshot.d.ts +138 -0
  172. package/dist/dashboard-snapshot.js +308 -0
  173. package/dist/dashboard-types.d.ts +163 -0
  174. package/dist/dashboard-types.js +3 -0
  175. package/dist/dashboard.d.ts +6 -7
  176. package/dist/dashboard.js +228 -202
  177. package/dist/db/busy.d.ts +5 -0
  178. package/dist/db/busy.js +24 -0
  179. package/dist/db/continuity.d.ts +5 -0
  180. package/dist/db/continuity.js +145 -0
  181. package/dist/db/meta.d.ts +8 -0
  182. package/dist/db/meta.js +35 -0
  183. package/dist/db/migrate.d.ts +9 -0
  184. package/dist/db/migrate.js +138 -0
  185. package/dist/db/migrations/index.d.ts +5 -0
  186. package/dist/db/migrations/index.js +109 -0
  187. package/dist/db/migrations/types.d.ts +14 -0
  188. package/dist/db/migrations/types.js +2 -0
  189. package/dist/db/migrations/v01.d.ts +3 -0
  190. package/dist/db/migrations/v01.js +38 -0
  191. package/dist/db/migrations/v02.d.ts +3 -0
  192. package/dist/db/migrations/v02.js +21 -0
  193. package/dist/db/migrations/v03.d.ts +3 -0
  194. package/dist/db/migrations/v03.js +22 -0
  195. package/dist/db/migrations/v04.d.ts +3 -0
  196. package/dist/db/migrations/v04.js +28 -0
  197. package/dist/db/migrations/v05.d.ts +3 -0
  198. package/dist/db/migrations/v05.js +21 -0
  199. package/dist/db/migrations/v06.d.ts +3 -0
  200. package/dist/db/migrations/v06.js +25 -0
  201. package/dist/db/migrations/v07.d.ts +3 -0
  202. package/dist/db/migrations/v07.js +13 -0
  203. package/dist/db/migrations/v08.d.ts +3 -0
  204. package/dist/db/migrations/v08.js +8 -0
  205. package/dist/db/migrations/v09.d.ts +3 -0
  206. package/dist/db/migrations/v09.js +13 -0
  207. package/dist/db/migrations/v10.d.ts +3 -0
  208. package/dist/db/migrations/v10.js +17 -0
  209. package/dist/db/migrations/v11.d.ts +3 -0
  210. package/dist/db/migrations/v11.js +15 -0
  211. package/dist/db/migrations/v12.d.ts +3 -0
  212. package/dist/db/migrations/v12.js +11 -0
  213. package/dist/db/migrations/v13.d.ts +3 -0
  214. package/dist/db/migrations/v13.js +15 -0
  215. package/dist/db/migrations/v14.d.ts +3 -0
  216. package/dist/db/migrations/v14.js +66 -0
  217. package/dist/db/migrations/v15.d.ts +3 -0
  218. package/dist/db/migrations/v15.js +42 -0
  219. package/dist/db/migrations/v16.d.ts +3 -0
  220. package/dist/db/migrations/v16.js +61 -0
  221. package/dist/db/migrations/v17.d.ts +3 -0
  222. package/dist/db/migrations/v17.js +46 -0
  223. package/dist/db/migrations/v18.d.ts +3 -0
  224. package/dist/db/migrations/v18.js +60 -0
  225. package/dist/db/migrations/v19.d.ts +3 -0
  226. package/dist/db/migrations/v19.js +28 -0
  227. package/dist/db/migrations/v20.d.ts +3 -0
  228. package/dist/db/migrations/v20.js +42 -0
  229. package/dist/db/migrations/v21.d.ts +3 -0
  230. package/dist/db/migrations/v21.js +16 -0
  231. package/dist/db/migrations/v22.d.ts +3 -0
  232. package/dist/db/migrations/v22.js +82 -0
  233. package/dist/db/migrations/v23.d.ts +3 -0
  234. package/dist/db/migrations/v23.js +48 -0
  235. package/dist/db/migrations/v24.d.ts +3 -0
  236. package/dist/db/migrations/v24.js +72 -0
  237. package/dist/db/migrations/v25.d.ts +3 -0
  238. package/dist/db/migrations/v25.js +46 -0
  239. package/dist/db/migrations/v26.d.ts +3 -0
  240. package/dist/db/migrations/v26.js +23 -0
  241. package/dist/db/migrations/v27.d.ts +3 -0
  242. package/dist/db/migrations/v27.js +57 -0
  243. package/dist/db/migrations/v28.d.ts +3 -0
  244. package/dist/db/migrations/v28.js +38 -0
  245. package/dist/db/migrations/v29.d.ts +3 -0
  246. package/dist/db/migrations/v29.js +78 -0
  247. package/dist/db/migrations/v30.d.ts +3 -0
  248. package/dist/db/migrations/v30.js +92 -0
  249. package/dist/db/migrations/v31.d.ts +3 -0
  250. package/dist/db/migrations/v31.js +74 -0
  251. package/dist/db/migrations/v32.d.ts +3 -0
  252. package/dist/db/migrations/v32.js +102 -0
  253. package/dist/db/migrations/v33.d.ts +3 -0
  254. package/dist/db/migrations/v33.js +104 -0
  255. package/dist/db/migrations/v34.d.ts +3 -0
  256. package/dist/db/migrations/v34.js +93 -0
  257. package/dist/db/migrations/v35.d.ts +3 -0
  258. package/dist/db/migrations/v35.js +98 -0
  259. package/dist/db/migrations/v36.d.ts +3 -0
  260. package/dist/db/migrations/v36.js +98 -0
  261. package/dist/db/migrations/v37.d.ts +3 -0
  262. package/dist/db/migrations/v37.js +219 -0
  263. package/dist/db/migrations/v38.d.ts +3 -0
  264. package/dist/db/migrations/v38.js +277 -0
  265. package/dist/db/migrations/v39.d.ts +3 -0
  266. package/dist/db/migrations/v39.js +59 -0
  267. package/dist/db/migrations/v40.d.ts +3 -0
  268. package/dist/db/migrations/v40.js +74 -0
  269. package/dist/db/migrations/v41.d.ts +3 -0
  270. package/dist/db/migrations/v41.js +43 -0
  271. package/dist/db/migrations/v42.d.ts +3 -0
  272. package/dist/db/migrations/v42.js +41 -0
  273. package/dist/db/migrations/v43.d.ts +3 -0
  274. package/dist/db/migrations/v43.js +67 -0
  275. package/dist/db/migrations/v44.d.ts +3 -0
  276. package/dist/db/migrations/v44.js +28 -0
  277. package/dist/db/migrations/v45.d.ts +3 -0
  278. package/dist/db/migrations/v45.js +30 -0
  279. package/dist/db/migrations/v46.d.ts +3 -0
  280. package/dist/db/migrations/v46.js +25 -0
  281. package/dist/db/migrations/v47.d.ts +3 -0
  282. package/dist/db/migrations/v47.js +17 -0
  283. package/dist/db/migrations/v48.d.ts +3 -0
  284. package/dist/db/migrations/v48.js +10 -0
  285. package/dist/db/migrations/v49.d.ts +3 -0
  286. package/dist/db/migrations/v49.js +31 -0
  287. package/dist/db/migrations/v50.d.ts +3 -0
  288. package/dist/db/migrations/v50.js +67 -0
  289. package/dist/db/migrations/v51.d.ts +3 -0
  290. package/dist/db/migrations/v51.js +14 -0
  291. package/dist/db/migrations/v52.d.ts +3 -0
  292. package/dist/db/migrations/v52.js +7 -0
  293. package/dist/db/open.d.ts +23 -0
  294. package/dist/db/open.js +146 -0
  295. package/dist/db/sqlite.d.ts +21 -0
  296. package/dist/db/sqlite.js +8 -0
  297. package/dist/db/tables.d.ts +7 -0
  298. package/dist/db/tables.js +38 -0
  299. package/dist/db.d.ts +6 -46
  300. package/dist/db.js +5 -3049
  301. package/dist/decisions.d.ts +4 -1
  302. package/dist/decisions.js +102 -83
  303. package/dist/dedupe.js +3 -2
  304. package/dist/delivery-recorder.js +4 -1
  305. package/dist/doctor.js +14 -10
  306. package/dist/embedding-provider.d.ts +1 -1
  307. package/dist/embedding-provider.js +4 -3
  308. package/dist/embeddings.d.ts +9 -52
  309. package/dist/embeddings.js +43 -297
  310. package/dist/env.d.ts +75 -0
  311. package/dist/env.js +119 -0
  312. package/dist/eval-suite.js +1 -1
  313. package/dist/eval.js +2 -2
  314. package/dist/extract.js +1 -1
  315. package/dist/gated-write.js +3 -1
  316. package/dist/goals.d.ts +3 -1
  317. package/dist/goals.js +117 -86
  318. package/dist/graph/read.d.ts +73 -0
  319. package/dist/graph/read.js +325 -0
  320. package/dist/graph/rows.d.ts +45 -0
  321. package/dist/graph/rows.js +51 -0
  322. package/dist/graph/types.d.ts +83 -0
  323. package/dist/graph/types.js +11 -0
  324. package/dist/graph/write.d.ts +93 -0
  325. package/dist/{graph.js → graph/write.js} +6 -384
  326. package/dist/graph-extract.js +2 -1
  327. package/dist/graph-recall.d.ts +1 -1
  328. package/dist/graph-recall.js +2 -2
  329. package/dist/graph-stream.js +1 -1
  330. package/dist/graph-view.d.ts +1 -1
  331. package/dist/graph-view.js +1 -1
  332. package/dist/half-life-migration.d.ts +1 -1
  333. package/dist/half-life-migration.js +2 -1
  334. package/dist/hooks/codex-session.d.ts +8 -0
  335. package/dist/hooks/codex-session.js +76 -0
  336. package/dist/hooks/codex-wrapper.d.ts +55 -0
  337. package/dist/hooks/codex-wrapper.js +288 -0
  338. package/dist/hooks/json-hooks.d.ts +63 -0
  339. package/dist/hooks/json-hooks.js +356 -0
  340. package/dist/hooks/opencode.d.ts +50 -0
  341. package/dist/hooks/opencode.js +202 -0
  342. package/dist/hooks/shared.d.ts +54 -0
  343. package/dist/hooks/shared.js +77 -0
  344. package/dist/http-retry.d.ts +2 -0
  345. package/dist/http-retry.js +4 -3
  346. package/dist/http-util.d.ts +3 -0
  347. package/dist/http-util.js +10 -0
  348. package/dist/{importers.d.ts → importers/core.d.ts} +13 -17
  349. package/dist/importers/core.js +141 -0
  350. package/dist/importers/markdown-parse.d.ts +41 -0
  351. package/dist/importers/markdown-parse.js +132 -0
  352. package/dist/importers/markdown.d.ts +3 -0
  353. package/dist/importers/markdown.js +92 -0
  354. package/dist/importers/sources.d.ts +7 -0
  355. package/dist/importers/sources.js +229 -0
  356. package/dist/importers/vault.d.ts +11 -0
  357. package/dist/importers/vault.js +352 -0
  358. package/dist/incidents.d.ts +3 -0
  359. package/dist/incidents.js +52 -43
  360. package/dist/index.d.ts +25 -6
  361. package/dist/index.js +23 -6
  362. package/dist/invalidation.js +2 -1
  363. package/dist/judgment.js +2 -1
  364. package/dist/keyset.d.ts +13 -0
  365. package/dist/keyset.js +8 -0
  366. package/dist/local-embedding.d.ts +13 -0
  367. package/dist/local-embedding.js +165 -0
  368. package/dist/log.d.ts +7 -0
  369. package/dist/log.js +19 -1
  370. package/dist/mcp/admin-tools.d.ts +8 -0
  371. package/dist/mcp/admin-tools.js +116 -0
  372. package/dist/mcp/format.d.ts +27 -0
  373. package/dist/mcp/format.js +135 -0
  374. package/dist/mcp/memory-tools.d.ts +5 -0
  375. package/dist/mcp/memory-tools.js +83 -0
  376. package/dist/mcp/protocol.d.ts +83 -0
  377. package/dist/mcp/protocol.js +55 -0
  378. package/dist/mcp/recall-tools.d.ts +6 -0
  379. package/dist/mcp/recall-tools.js +320 -0
  380. package/dist/mcp/request.d.ts +10 -0
  381. package/dist/mcp/request.js +163 -0
  382. package/dist/mcp/server.d.ts +4 -75
  383. package/dist/mcp/server.js +7 -1190
  384. package/dist/mcp/session-state.d.ts +11 -0
  385. package/dist/mcp/session-state.js +28 -0
  386. package/dist/mcp/stdio.d.ts +8 -0
  387. package/dist/mcp/stdio.js +79 -0
  388. package/dist/mcp/tools.d.ts +11 -0
  389. package/dist/mcp/tools.js +247 -0
  390. package/dist/memory.d.ts +3 -0
  391. package/dist/memory.js +27 -1
  392. package/dist/multihop.d.ts +1 -1
  393. package/dist/multihop.js +2 -1
  394. package/dist/owner-validation.js +2 -1
  395. package/dist/physics-state.js +10 -7
  396. package/dist/policies.d.ts +3 -0
  397. package/dist/policies.js +93 -74
  398. package/dist/postinstall.js +3 -2
  399. package/dist/predictions/planning-fallacy.d.ts +100 -0
  400. package/dist/predictions/planning-fallacy.js +190 -0
  401. package/dist/{predictions.d.ts → predictions/store.d.ts} +7 -102
  402. package/dist/predictions/store.js +434 -0
  403. package/dist/processes.d.ts +3 -0
  404. package/dist/processes.js +94 -76
  405. package/dist/project-briefs.d.ts +3 -0
  406. package/dist/project-briefs.js +142 -113
  407. package/dist/project-identity.js +3 -2
  408. package/dist/project-merge.d.ts +12 -4
  409. package/dist/project-merge.js +132 -45
  410. package/dist/quarantine.d.ts +2 -1
  411. package/dist/quarantine.js +8 -5
  412. package/dist/raw-archive.js +1 -1
  413. package/dist/recall-history.js +3 -2
  414. package/dist/recall-pipeline.d.ts +2 -2
  415. package/dist/recall-pipeline.js +16 -8
  416. package/dist/recall-scope.js +1 -1
  417. package/dist/recall-trace.d.ts +1 -1
  418. package/dist/refine-llm.js +2 -1
  419. package/dist/reject-flow.js +6 -1
  420. package/dist/rerankers/clef.js +6 -5
  421. package/dist/rerankers/jev.d.ts +1 -1
  422. package/dist/rerankers/jev.js +4 -4
  423. package/dist/rerankers/llm.d.ts +4 -2
  424. package/dist/rerankers/llm.js +58 -38
  425. package/dist/rerankers/types.d.ts +1 -1
  426. package/dist/salience.js +1 -1
  427. package/dist/scheduler.d.ts +1 -0
  428. package/dist/scheduler.js +26 -4
  429. package/dist/scope.js +4 -3
  430. package/dist/search/as-of.d.ts +10 -0
  431. package/dist/search/as-of.js +22 -0
  432. package/dist/search/bm25-search.d.ts +14 -0
  433. package/dist/search/bm25-search.js +43 -0
  434. package/dist/search/bm25.d.ts +15 -0
  435. package/dist/search/bm25.js +54 -0
  436. package/dist/search/boosts.d.ts +54 -0
  437. package/dist/search/boosts.js +94 -0
  438. package/dist/search/breakdown.d.ts +7 -0
  439. package/dist/search/breakdown.js +20 -0
  440. package/dist/search/explain.d.ts +25 -0
  441. package/dist/search/explain.js +31 -0
  442. package/dist/search/finalize.d.ts +8 -0
  443. package/dist/search/finalize.js +52 -0
  444. package/dist/search/fusion.d.ts +27 -0
  445. package/dist/search/fusion.js +42 -0
  446. package/dist/search/hybrid-score.d.ts +20 -0
  447. package/dist/search/hybrid-score.js +73 -0
  448. package/dist/search/hybrid.d.ts +46 -0
  449. package/dist/search/hybrid.js +64 -0
  450. package/dist/search/physics-search.d.ts +29 -0
  451. package/dist/search/physics-search.js +162 -0
  452. package/dist/search/rerank.d.ts +10 -0
  453. package/dist/search/rerank.js +72 -0
  454. package/dist/search/temporal.d.ts +15 -0
  455. package/dist/search/temporal.js +45 -0
  456. package/dist/search/types.d.ts +91 -0
  457. package/dist/search/types.js +2 -0
  458. package/dist/search/vector.d.ts +30 -0
  459. package/dist/search/vector.js +71 -0
  460. package/dist/secret-detect.d.ts +2 -0
  461. package/dist/secret-detect.js +2 -1
  462. package/dist/server/auth.d.ts +52 -0
  463. package/dist/server/auth.js +221 -0
  464. package/dist/server/client-ip.d.ts +25 -0
  465. package/dist/server/client-ip.js +92 -0
  466. package/dist/server/cursor.d.ts +23 -0
  467. package/dist/server/cursor.js +58 -0
  468. package/dist/server/lifecycle.d.ts +7 -0
  469. package/dist/server/lifecycle.js +29 -0
  470. package/dist/server/mcp-http.d.ts +5 -0
  471. package/dist/server/mcp-http.js +199 -0
  472. package/dist/server/request.d.ts +33 -0
  473. package/dist/server/request.js +103 -0
  474. package/dist/server/routes/admin.d.ts +9 -0
  475. package/dist/server/routes/admin.js +158 -0
  476. package/dist/server/routes/customer-notes.d.ts +7 -0
  477. package/dist/server/routes/customer-notes.js +112 -0
  478. package/dist/server/routes/decisions.d.ts +7 -0
  479. package/dist/server/routes/decisions.js +133 -0
  480. package/dist/server/routes/incidents.d.ts +7 -0
  481. package/dist/server/routes/incidents.js +126 -0
  482. package/dist/server/routes/memories.d.ts +10 -0
  483. package/dist/server/routes/memories.js +179 -0
  484. package/dist/server/routes/policies.d.ts +8 -0
  485. package/dist/server/routes/policies.js +151 -0
  486. package/dist/server/routes/predictions.d.ts +7 -0
  487. package/dist/server/routes/predictions.js +164 -0
  488. package/dist/server/routes/processes.d.ts +7 -0
  489. package/dist/server/routes/processes.js +161 -0
  490. package/dist/server/routes/project-briefs.d.ts +8 -0
  491. package/dist/server/routes/project-briefs.js +136 -0
  492. package/dist/server/routes/recall.d.ts +8 -0
  493. package/dist/server/routes/recall.js +340 -0
  494. package/dist/server/routes/skills.d.ts +8 -0
  495. package/dist/server/routes/skills.js +150 -0
  496. package/dist/server/types.d.ts +56 -0
  497. package/dist/server/types.js +2 -0
  498. package/dist/server/validation.d.ts +14 -0
  499. package/dist/server/validation.js +91 -0
  500. package/dist/server.d.ts +7 -61
  501. package/dist/server.js +69 -2362
  502. package/dist/session-digest.d.ts +1 -1
  503. package/dist/session-digest.js +9 -2
  504. package/dist/shared.d.ts +12 -1
  505. package/dist/shared.js +33 -27
  506. package/dist/skills.d.ts +3 -0
  507. package/dist/skills.js +88 -70
  508. package/dist/stdin.js +2 -2
  509. package/dist/store/audit-event.d.ts +19 -0
  510. package/dist/store/audit-event.js +33 -0
  511. package/dist/store/candidates.d.ts +42 -0
  512. package/dist/store/candidates.js +152 -0
  513. package/dist/store/conflicts.d.ts +44 -0
  514. package/dist/store/conflicts.js +444 -0
  515. package/dist/store/delete-and-batch.d.ts +63 -0
  516. package/dist/store/delete-and-batch.js +310 -0
  517. package/dist/store/entry-reads.d.ts +92 -0
  518. package/dist/store/entry-reads.js +255 -0
  519. package/dist/store/entry-row.d.ts +67 -0
  520. package/dist/store/entry-row.js +208 -0
  521. package/dist/store/entry-writes.d.ts +46 -0
  522. package/dist/store/entry-writes.js +148 -0
  523. package/dist/store/handoffs.d.ts +26 -0
  524. package/dist/store/handoffs.js +184 -0
  525. package/dist/store/index-and-stats.d.ts +52 -0
  526. package/dist/store/index-and-stats.js +214 -0
  527. package/dist/store/markdown.d.ts +10 -0
  528. package/dist/store/markdown.js +108 -0
  529. package/dist/store/mirrors.d.ts +49 -0
  530. package/dist/store/mirrors.js +312 -0
  531. package/dist/store/open.d.ts +15 -0
  532. package/dist/store/open.js +223 -0
  533. package/dist/store/rows.d.ts +178 -0
  534. package/dist/store/rows.js +158 -0
  535. package/dist/store/search-rows.d.ts +86 -0
  536. package/dist/store/search-rows.js +260 -0
  537. package/dist/store/sessions.d.ts +83 -0
  538. package/dist/store/sessions.js +272 -0
  539. package/dist/store/summaries.d.ts +94 -0
  540. package/dist/store/summaries.js +377 -0
  541. package/dist/store/tenant-lookup.d.ts +12 -0
  542. package/dist/store/tenant-lookup.js +16 -0
  543. package/dist/store-cards.js +2 -1
  544. package/dist/summary-dirty.d.ts +4 -0
  545. package/dist/summary-dirty.js +32 -0
  546. package/dist/support-bundle.js +4 -3
  547. package/dist/tenant.js +2 -2
  548. package/dist/tokenize.d.ts +2 -0
  549. package/dist/tokenize.js +16 -0
  550. package/dist/transcript-tail.d.ts +7 -0
  551. package/dist/transcript-tail.js +48 -0
  552. package/dist/vector-store.d.ts +27 -0
  553. package/dist/vector-store.js +210 -0
  554. package/dist/version.d.ts +2 -2
  555. package/dist/version.js +2 -2
  556. package/dist/working-memory.js +1 -1
  557. package/dist/yaml.js +36 -11
  558. package/dist-ui/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  559. package/dist-ui/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  560. package/dist-ui/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  561. package/dist-ui/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  562. package/dist-ui/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
  563. package/dist-ui/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
  564. package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  565. package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  566. package/dist-ui/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  567. package/dist-ui/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  568. package/dist-ui/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  569. package/dist-ui/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  570. package/dist-ui/assets/index-DPN7cP19.js +33 -0
  571. package/dist-ui/assets/index-dFloKRVr.css +1 -0
  572. package/dist-ui/index.html +3 -25
  573. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  574. package/extensions/openclaw-plugin/package.json +1 -1
  575. package/openclaw.plugin.json +1 -1
  576. package/package.json +1 -1
  577. package/dist/capture.d.ts +0 -155
  578. package/dist/capture.js +0 -1295
  579. package/dist/consolidate.d.ts +0 -58
  580. package/dist/consolidate.js +0 -1124
  581. package/dist/graph.d.ts +0 -245
  582. package/dist/hooks.d.ts +0 -208
  583. package/dist/hooks.js +0 -1076
  584. package/dist/importers.js +0 -900
  585. package/dist/predictions.js +0 -620
  586. package/dist/search.d.ts +0 -320
  587. package/dist/search.js +0 -970
  588. package/dist/store.d.ts +0 -776
  589. package/dist/store.js +0 -3473
  590. package/dist-ui/assets/d3-BiWEKnn4.js +0 -1
  591. package/dist-ui/assets/index-BhT8RvO6.js +0 -61
  592. package/dist-ui/assets/index-RoXXJ5dq.css +0 -1
  593. package/dist-ui/assets/three-BDgTxR1l.js +0 -4112
package/dist/eval.js CHANGED
@@ -8,9 +8,9 @@
8
8
  * weights, and future scoring tweaks can be tuned against evidence instead
9
9
  * of intuition.
10
10
  */
11
- import { hybridSearch } from './search.js';
11
+ import { hybridSearch } from './search/hybrid.js';
12
12
  import { searchBothHybrid } from './shared.js';
13
- import { isInitialized } from './store.js';
13
+ import { isInitialized } from './store/open.js';
14
14
  // ---------------------------------------------------------------------------
15
15
  // Metrics — pure functions. K is inclusive of position K.
16
16
  // ---------------------------------------------------------------------------
package/dist/extract.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Layer, createMemory } from './memory.js';
2
- import { writeEntry } from './store.js';
2
+ import { writeEntry } from './store/entry-writes.js';
3
3
  import { loadConfig } from './config.js';
4
4
  import { RejectedValueError } from './rejection.js';
5
5
  import { redactSecretsStrict } from './secret-detect.js';
@@ -2,7 +2,9 @@
2
2
  import { isContentWorthStoring } from './audit.js';
3
3
  import { RejectedValueError } from './rejection.js';
4
4
  import { detectSecret } from './secret-detect.js';
5
- import { auditRejectionRefusal, stampOriginProject, writeEntryDbOnly } from './store.js';
5
+ import { auditRejectionRefusal } from './store/audit-event.js';
6
+ import { stampOriginProject } from './store/entry-row.js';
7
+ import { writeEntryDbOnly } from './store/entry-writes.js';
6
8
  /** Runs on the caller's handle so it nests in the caller's transaction (writeEntry would open a second handle and wait on that lock); the caller mirrors after commit with an entry it stamped itself. The rejection audit lands inside that transaction, which is safe because a batch that rolls back stays `summarised` and replay writes the audit again. */
7
9
  export function gatedWrite(db, hippoRoot, entry, opts) {
8
10
  // Off for imported agent memories: a person wrote those notes, and a one-line preference fails the check.
package/dist/goals.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { type DatabaseSyncLike } from './db.js';
2
2
  import type { MemoryEntry } from './memory.js';
3
- import type { RerankStep } from './search.js';
3
+ import type { RerankStep } from './search/types.js';
4
4
  export type GoalStatus = 'active' | 'suspended' | 'completed';
5
5
  export type PolicyType = 'schema-fit-biased' | 'error-prioritized' | 'recency-first' | 'hybrid';
6
6
  export interface GoalRow {
@@ -78,6 +78,8 @@ export interface GetActiveGoalsOpts {
78
78
  tenantId: string;
79
79
  }
80
80
  export declare function getActiveGoals(hippoRoot: string, opts: GetActiveGoalsOpts): Goal[];
81
+ /** Every goal of a (tenant, session), whatever its status, oldest first. */
82
+ export declare function getSessionGoals(hippoRoot: string, opts: GetActiveGoalsOpts): Goal[];
81
83
  export declare function getActiveGoalsWithDb(db: DatabaseSyncLike, opts: GetActiveGoalsOpts): Goal[];
82
84
  /** One `goal_recall_log` row: a boosted local memory recalled while its goal was active. */
83
85
  export interface GoalRecallLogRow {
package/dist/goals.js CHANGED
@@ -129,6 +129,24 @@ export function getActiveGoals(hippoRoot, opts) {
129
129
  closeHippoDb(db);
130
130
  }
131
131
  }
132
+ /** Every goal of a (tenant, session), whatever its status, oldest first. */
133
+ export function getSessionGoals(hippoRoot, opts) {
134
+ const db = openHippoDb(hippoRoot);
135
+ try {
136
+ // SAFETY: rows come from the SELECT below, which projects exactly GoalRow's columns.
137
+ const rows = db.prepare(`
138
+ SELECT id, session_id, tenant_id, goal_name, level, parent_goal_id, status,
139
+ success_condition, retrieval_policy_id, created_at, completed_at, outcome_score
140
+ FROM goal_stack
141
+ WHERE tenant_id = ? AND session_id = ?
142
+ ORDER BY created_at ASC
143
+ `).all(opts.tenantId, opts.sessionId);
144
+ return rows.map(rowToGoal);
145
+ }
146
+ finally {
147
+ closeHippoDb(db);
148
+ }
149
+ }
132
150
  export function getActiveGoalsWithDb(db, opts) {
133
151
  // SAFETY: rows come from the SELECT above, which projects exactly
134
152
  // GoalRow's columns (in the same order goal_stack defines them).
@@ -141,6 +159,101 @@ export function getActiveGoalsWithDb(db, opts) {
141
159
  `).all(opts.tenantId, opts.sessionId);
142
160
  return rows.map(rowToGoal);
143
161
  }
162
+ // Load retrieval_policy rows for active goals so per-policy multipliers
163
+ // can compose onto the base goal-tag boost. Composed result is hard-capped
164
+ // at MAX_FINAL_MULTIPLIER (3.0x) BEFORE applying to score -- even an
165
+ // `errorPriority: 9.0` policy cannot exceed 3.0x.
166
+ function loadGoalPolicies(db, active) {
167
+ const policiesByGoalId = new Map();
168
+ for (const g of active) {
169
+ if (!g.retrievalPolicyId)
170
+ continue;
171
+ // SAFETY: the row comes from the SELECT above, which projects exactly
172
+ // these seven retrieval_policy columns.
173
+ const row = db.prepare(`
174
+ SELECT id, goal_id, policy_type, weight_schema_fit, weight_recency, weight_outcome, error_priority
175
+ FROM retrieval_policy WHERE id = ?
176
+ `).get(g.retrievalPolicyId);
177
+ if (row) {
178
+ policiesByGoalId.set(g.id, {
179
+ id: row.id,
180
+ goalId: row.goal_id,
181
+ policyType: row.policy_type,
182
+ weightSchemaFit: row.weight_schema_fit,
183
+ weightRecency: row.weight_recency,
184
+ weightOutcome: row.weight_outcome,
185
+ errorPriority: row.error_priority,
186
+ });
187
+ }
188
+ }
189
+ return policiesByGoalId;
190
+ }
191
+ /** The capped boost for one row whose tags match `matches` active goals. */
192
+ function goalBoostMultiplier(entry, tags, matches, goalsByTag, policiesByGoalId) {
193
+ // Base 2.0x for first match, +0.5x per additional, capped at 3.0x.
194
+ let multiplier = Math.min(2.0 + 0.5 * (matches.length - 1), MAX_FINAL_MULTIPLIER);
195
+ // Compose per-policy multipliers per matched tag.
196
+ for (const tag of matches) {
197
+ const goal = goalsByTag.get(tag);
198
+ const policy = policiesByGoalId.get(goal.id);
199
+ if (!policy)
200
+ continue;
201
+ if (policy.policyType === 'error-prioritized' && tags.includes('error')) {
202
+ multiplier *= policy.errorPriority;
203
+ }
204
+ else if (policy.policyType === 'schema-fit-biased') {
205
+ // Linearly weight schema_fit in [0,1] up to (weightSchemaFit)x.
206
+ // Default 1.0 is a no-op.
207
+ multiplier *=
208
+ 1.0 +
209
+ Math.max(0, policy.weightSchemaFit - 1.0) *
210
+ (entry.schema_fit ?? 0.5);
211
+ }
212
+ else if (policy.policyType === 'recency-first') {
213
+ multiplier *= policy.weightRecency;
214
+ }
215
+ else if (policy.policyType === 'hybrid') {
216
+ multiplier *= policy.weightOutcome;
217
+ }
218
+ }
219
+ // Hard cap AFTER all composition.
220
+ return Math.min(multiplier, MAX_FINAL_MULTIPLIER);
221
+ }
222
+ /** Log rows for the top `limit` boosted rows, one per matched goal. */
223
+ function buildGoalRecallLog(db, boosted, matchesByEntryId, goalsByTag, opts) {
224
+ const { sessionId, tenantId, limit } = opts;
225
+ // Filter to local memories only -- global memory IDs aren't in this DB's
226
+ // memories table, so the FK on goal_recall_log.memory_id would fail.
227
+ // dlPFC depth's outcome propagation is session-scoped to local; boost on
228
+ // ranking still applies to global results, just no log row -> no
229
+ // propagation.
230
+ const topKIds = boosted.slice(0, limit).map((r) => r.entry.id);
231
+ const localIds = new Set();
232
+ if (topKIds.length > 0) {
233
+ const placeholders = topKIds.map(() => '?').join(',');
234
+ // SAFETY: rows come from the SELECT above, which projects exactly one
235
+ // column, `id`, from memories.
236
+ const localRows = db.prepare(`SELECT id FROM memories WHERE id IN (${placeholders})`).all(...topKIds);
237
+ for (const row of localRows)
238
+ localIds.add(row.id);
239
+ }
240
+ const recalledAt = new Date().toISOString();
241
+ const log = [];
242
+ for (const r of boosted.slice(0, limit)) {
243
+ if (!localIds.has(r.entry.id))
244
+ continue; // global -> skip log insert
245
+ const matches = matchesByEntryId.get(r.entry.id);
246
+ if (!matches || matches.length === 0)
247
+ continue;
248
+ for (const tag of matches) {
249
+ const goal = goalsByTag.get(tag);
250
+ if (!goal)
251
+ continue;
252
+ log.push({ goalId: goal.id, memoryId: r.entry.id, tenantId, sessionId, recalledAt, score: r.score });
253
+ }
254
+ }
255
+ return log;
256
+ }
144
257
  /**
145
258
  * dlPFC goal-stack boost. Applies the multi-goal boost to entry-backed scored
146
259
  * rows when (tenant, session) has active goals and returns the log rows to
@@ -161,37 +274,12 @@ export function getActiveGoalsWithDb(db, opts) {
161
274
  * @internal Recall ranking helper. Subject to change.
162
275
  */
163
276
  export function computeGoalStackBoost(db, results, opts) {
164
- const { sessionId, tenantId, limit, trace } = opts;
277
+ const { sessionId, tenantId, trace } = opts;
165
278
  const active = getActiveGoalsWithDb(db, { sessionId, tenantId });
166
279
  if (active.length === 0)
167
280
  return { results, log: [] };
168
281
  const goalsByTag = new Map(active.map((g) => [g.goalName, g]));
169
- // Load retrieval_policy rows for active goals so per-policy multipliers
170
- // can compose onto the base goal-tag boost. Composed result is hard-capped
171
- // at MAX_FINAL_MULTIPLIER (3.0x) BEFORE applying to score -- even an
172
- // `errorPriority: 9.0` policy cannot exceed 3.0x.
173
- const policiesByGoalId = new Map();
174
- for (const g of active) {
175
- if (!g.retrievalPolicyId)
176
- continue;
177
- // SAFETY: the row comes from the SELECT above, which projects exactly
178
- // these seven retrieval_policy columns.
179
- const row = db.prepare(`
180
- SELECT id, goal_id, policy_type, weight_schema_fit, weight_recency, weight_outcome, error_priority
181
- FROM retrieval_policy WHERE id = ?
182
- `).get(g.retrievalPolicyId);
183
- if (row) {
184
- policiesByGoalId.set(g.id, {
185
- id: row.id,
186
- goalId: row.goal_id,
187
- policyType: row.policy_type,
188
- weightSchemaFit: row.weight_schema_fit,
189
- weightRecency: row.weight_recency,
190
- weightOutcome: row.weight_outcome,
191
- errorPriority: row.error_priority,
192
- });
193
- }
194
- }
282
+ const policiesByGoalId = loadGoalPolicies(db, active);
195
283
  // Goal-tag matches per boosted row, keyed by entry id. Kept as a side table
196
284
  // (rather than a spread-on `_goalMatches` marker property) so `boosted`
197
285
  // stays exactly R[] end to end, with no cast-tag-then-strip round trip.
@@ -202,34 +290,7 @@ export function computeGoalStackBoost(db, results, opts) {
202
290
  const matches = tags.filter((t) => goalsByTag.has(t));
203
291
  if (matches.length === 0)
204
292
  return r;
205
- // Base 2.0x for first match, +0.5x per additional, capped at 3.0x.
206
- let multiplier = Math.min(2.0 + 0.5 * (matches.length - 1), MAX_FINAL_MULTIPLIER);
207
- // Compose per-policy multipliers per matched tag.
208
- for (const tag of matches) {
209
- const goal = goalsByTag.get(tag);
210
- const policy = policiesByGoalId.get(goal.id);
211
- if (!policy)
212
- continue;
213
- if (policy.policyType === 'error-prioritized' && tags.includes('error')) {
214
- multiplier *= policy.errorPriority;
215
- }
216
- else if (policy.policyType === 'schema-fit-biased') {
217
- // Linearly weight schema_fit in [0,1] up to (weightSchemaFit)x.
218
- // Default 1.0 is a no-op.
219
- multiplier *=
220
- 1.0 +
221
- Math.max(0, policy.weightSchemaFit - 1.0) *
222
- (r.entry.schema_fit ?? 0.5);
223
- }
224
- else if (policy.policyType === 'recency-first') {
225
- multiplier *= policy.weightRecency;
226
- }
227
- else if (policy.policyType === 'hybrid') {
228
- multiplier *= policy.weightOutcome;
229
- }
230
- }
231
- // Hard cap AFTER all composition.
232
- multiplier = Math.min(multiplier, MAX_FINAL_MULTIPLIER);
293
+ const multiplier = goalBoostMultiplier(r.entry, tags, matches, goalsByTag, policiesByGoalId);
233
294
  // A7 recall-trace side-channel: record the goal-boost step BEFORE the
234
295
  // score is mutated, keyed by entry id. Pure read of r.score here; the
235
296
  // mutation below is byte-identical to pre-A7.
@@ -253,37 +314,7 @@ export function computeGoalStackBoost(db, results, opts) {
253
314
  // inherits its determinism via sort stability, and ties preserve the
254
315
  // prior (meaningful) rank instead of reordering by content.
255
316
  .sort((a, b) => b.score - a.score);
256
- // Filter to local memories only -- global memory IDs aren't in this DB's
257
- // memories table, so the FK on goal_recall_log.memory_id would fail.
258
- // dlPFC depth's outcome propagation is session-scoped to local; boost on
259
- // ranking still applies to global results, just no log row -> no
260
- // propagation.
261
- const topKIds = boosted.slice(0, limit).map((r) => r.entry.id);
262
- const localIds = new Set();
263
- if (topKIds.length > 0) {
264
- const placeholders = topKIds.map(() => '?').join(',');
265
- // SAFETY: rows come from the SELECT above, which projects exactly one
266
- // column, `id`, from memories.
267
- const localRows = db.prepare(`SELECT id FROM memories WHERE id IN (${placeholders})`).all(...topKIds);
268
- for (const row of localRows)
269
- localIds.add(row.id);
270
- }
271
- const recalledAt = new Date().toISOString();
272
- const log = [];
273
- for (const r of boosted.slice(0, limit)) {
274
- if (!localIds.has(r.entry.id))
275
- continue; // global -> skip log insert
276
- const matches = matchesByEntryId.get(r.entry.id);
277
- if (!matches || matches.length === 0)
278
- continue;
279
- for (const tag of matches) {
280
- const goal = goalsByTag.get(tag);
281
- if (!goal)
282
- continue;
283
- log.push({ goalId: goal.id, memoryId: r.entry.id, tenantId, sessionId, recalledAt, score: r.score });
284
- }
285
- }
286
- return { results: boosted, log };
317
+ return { results: boosted, log: buildGoalRecallLog(db, boosted, matchesByEntryId, goalsByTag, opts) };
287
318
  }
288
319
  /**
289
320
  * Writes goal-boost log rows. INSERT OR IGNORE because UNIQUE(memory_id, goal_id)
@@ -0,0 +1,73 @@
1
+ import { type GraphTxDb, type EntityType, type GraphQueueStatus, type Entity, type Relation, type GraphQueueItem } from './types.js';
2
+ export declare function loadEntityById(hippoRoot: string, tenantId: string, id: number): Entity | null;
3
+ /** Entities with an exact `name` (read), bounded by `limit` in SQL with a
4
+ * deterministic order. Lets the graph-view focus query find the `--entity NAME`
5
+ * entity DIRECTLY (not from a globally-capped list) WITHOUT materializing every
6
+ * same-name row when a name maps to many entities. */
7
+ export declare function loadEntitiesByName(hippoRoot: string, tenantId: string, name: string, opts?: {
8
+ limit?: number;
9
+ }, txDb?: GraphTxDb): Entity[];
10
+ export declare function loadEntities(hippoRoot: string, tenantId: string, opts?: {
11
+ entityType?: EntityType;
12
+ limit?: number;
13
+ }, txDb?: GraphTxDb): Entity[];
14
+ export declare function loadRelations(hippoRoot: string, tenantId: string, opts?: {
15
+ fromEntityId?: number;
16
+ limit?: number;
17
+ }, txDb?: GraphTxDb): Relation[];
18
+ /**
19
+ * Map consolidated source memory ids -> their graph entities. The SEED step of E3.2
20
+ * multi-hop recall (recall result memory ids -> entities to traverse from). Tenant-
21
+ * scoped, read-only; chunks the IN-list under the SQLite variable cap.
22
+ */
23
+ export declare function loadEntitiesByMemoryId(hippoRoot: string, tenantId: string, memoryIds: string[]): Entity[];
24
+ /**
25
+ * Load entities by their primary ids. Resolves the entity rows reached during the BFS
26
+ * (whose `memory_id` maps back to a recall result). Tenant-scoped, read-only.
27
+ */
28
+ export declare function loadEntitiesByIds(hippoRoot: string, tenantId: string, ids: number[], txDb?: GraphTxDb): Entity[];
29
+ /**
30
+ * All relations touching ANY of `entityIds` in EITHER direction (from OR to) — the
31
+ * per-hop neighbour query for E3.2 multi-hop traversal. ONE query for the whole frontier
32
+ * (not one per node): this is the bidirectional read `loadRelations` (from-only) lacks,
33
+ * and avoids an N+1 across BFS frontier nodes. `limit` caps rows for the frontier and
34
+ * must be a non-negative integer (the raw `LIMIT ?` rejects a fractional value).
35
+ */
36
+ export declare function loadNeighborRelations(hippoRoot: string, tenantId: string, entityIds: number[], opts?: {
37
+ limit?: number;
38
+ }, txDb?: GraphTxDb): Relation[];
39
+ /**
40
+ * Relations with BOTH endpoints in `entityIds` (edges AMONG the set, not merely
41
+ * touching it). Read. Used by the graph-view focus subgraph so the displayed
42
+ * edges are exactly the intra-union edges: the `LIMIT` only caps genuinely-many
43
+ * intra-union edges — no out-of-union row can evict a valid in-set edge. The
44
+ * caller bounds `entityIds` (<= the view limit), so a single query is safe.
45
+ */
46
+ export declare function loadRelationsAmong(hippoRoot: string, tenantId: string, entityIds: number[], opts?: {
47
+ limit?: number;
48
+ }, txDb?: GraphTxDb): Relation[];
49
+ /**
50
+ * Run `fn` inside ONE read transaction (a single WAL snapshot) so every graph read
51
+ * it performs — pass the supplied `txDb` to the `load*` functions — sees a consistent
52
+ * view, even if a `graph extract` / sleep-drain rebuild commits concurrently between
53
+ * reads (the rebuild clears + reinserts entities, so separate reads could otherwise
54
+ * mix old entity ids with new relation ids). Reads only; the connection is opened
55
+ * once and closed after.
56
+ */
57
+ export declare function withGraphReadSnapshot<T>(hippoRoot: string, fn: (txDb: GraphTxDb) => T): T;
58
+ export declare function loadExtractionQueue(hippoRoot: string, tenantId: string, opts?: {
59
+ status?: GraphQueueStatus;
60
+ limit?: number;
61
+ }): GraphQueueItem[];
62
+ /**
63
+ * The dirty tenants awaiting graph re-extraction, each with the MAX pending
64
+ * queue id at read time (a watermark). The sleep drain rebuilds each tenant's
65
+ * graph, then marks only items at or below the watermark processed, so items
66
+ * enqueued DURING the rebuild stay pending for the next sleep (no lost-update
67
+ * race). Host-wide read (the queue is per-tenant but sleep is cross-tenant).
68
+ */
69
+ export declare function loadPendingExtractionTenants(hippoRoot: string): {
70
+ tenantId: string;
71
+ maxPendingId: number;
72
+ }[];
73
+ //# sourceMappingURL=read.d.ts.map