hippo-memory 1.72.0 → 2.1.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 (995) hide show
  1. package/README.md +6 -4
  2. package/dist/agent-memories/apply.d.ts +7 -5
  3. package/dist/agent-memories/apply.js +66 -39
  4. package/dist/agent-memories/claude-code.d.ts +8 -2
  5. package/dist/agent-memories/claude-code.js +26 -7
  6. package/dist/agent-memories/copilot.js +2 -1
  7. package/dist/agent-memories/files.js +2 -1
  8. package/dist/agent-memories/legacy.d.ts +6 -3
  9. package/dist/agent-memories/legacy.js +35 -14
  10. package/dist/agent-memories/markdown.d.ts +3 -1
  11. package/dist/agent-memories/markdown.js +3 -1
  12. package/dist/agent-memories/openclaw.js +5 -2
  13. package/dist/agent-memories/plan.js +11 -1
  14. package/dist/agent-memories/project-folds.js +2 -1
  15. package/dist/agent-memories/report.d.ts +4 -1
  16. package/dist/agent-memories/report.js +43 -9
  17. package/dist/agent-memories/source.d.ts +8 -2
  18. package/dist/agent-memories/source.js +11 -3
  19. package/dist/agent-memories/sync.d.ts +7 -2
  20. package/dist/agent-memories/sync.js +141 -101
  21. package/dist/api/assemble.d.ts +6 -4
  22. package/dist/api/assemble.js +11 -5
  23. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  24. package/dist/api/auth/audit.js +58 -0
  25. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
  26. package/dist/api/{auth.js → auth/auth.js} +66 -54
  27. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  28. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
  29. package/dist/api/auth/session-owners.d.ts +10 -0
  30. package/dist/api/auth/session-owners.js +35 -0
  31. package/dist/api/availability.d.ts +3 -1
  32. package/dist/api/availability.js +3 -1
  33. package/dist/api/busy.d.ts +2 -0
  34. package/dist/api/busy.js +2 -0
  35. package/dist/api/cli-surface.d.ts +6 -0
  36. package/dist/api/cli-surface.js +6 -0
  37. package/dist/api/config-of.d.ts +5 -0
  38. package/dist/api/config-of.js +6 -0
  39. package/dist/api/context-auto.d.ts +4 -1
  40. package/dist/api/context-auto.js +14 -4
  41. package/dist/api/context-render.js +14 -7
  42. package/dist/api/context-select.d.ts +4 -1
  43. package/dist/api/context-select.js +31 -34
  44. package/dist/api/context-types.d.ts +38 -12
  45. package/dist/api/context.d.ts +8 -5
  46. package/dist/api/context.js +120 -63
  47. package/dist/api/continuity.d.ts +24 -21
  48. package/dist/api/continuity.js +18 -20
  49. package/dist/api/correction-latency.d.ts +3 -1
  50. package/dist/api/correction-latency.js +3 -1
  51. package/dist/api/error-reply.d.ts +4 -1
  52. package/dist/api/error-reply.js +12 -3
  53. package/dist/api/index.d.ts +39 -23
  54. package/dist/api/index.js +21 -23
  55. package/dist/api/instruction-detect.d.ts +4 -1
  56. package/dist/api/instruction-detect.js +75 -20
  57. package/dist/api/ledger-db.d.ts +15 -11
  58. package/dist/api/ledger-db.js +21 -23
  59. package/dist/api/memories/conflicts.d.ts +33 -0
  60. package/dist/api/memories/conflicts.js +67 -0
  61. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  62. package/dist/api/{forget.js → memories/forget.js} +23 -17
  63. package/dist/api/memories/memories.d.ts +27 -0
  64. package/dist/api/memories/memories.js +52 -0
  65. package/dist/api/memories/outcome.d.ts +22 -0
  66. package/dist/api/memories/outcome.js +28 -0
  67. package/dist/api/memories/promote.d.ts +40 -0
  68. package/dist/api/memories/promote.js +76 -0
  69. package/dist/api/memories/refine.d.ts +10 -0
  70. package/dist/api/memories/refine.js +12 -0
  71. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
  72. package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
  73. package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
  74. package/dist/api/{remember.js → memories/remember.js} +50 -32
  75. package/dist/api/objects/cards.d.ts +39 -0
  76. package/dist/api/{cards.js → objects/cards.js} +12 -14
  77. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  78. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
  79. package/dist/api/objects/goals.d.ts +18 -0
  80. package/dist/api/{goals.js → objects/goals.js} +12 -12
  81. package/dist/api/objects/graph.d.ts +11 -0
  82. package/dist/api/objects/graph.js +16 -0
  83. package/dist/api/objects/objects.d.ts +9 -0
  84. package/dist/api/{objects.js → objects/objects.js} +2 -3
  85. package/dist/api/objects/predictions.d.ts +11 -0
  86. package/dist/api/{predictions.js → objects/predictions.js} +7 -5
  87. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  88. package/dist/api/{projects.js → objects/projects.js} +8 -4
  89. package/dist/api/pilot-arm.d.ts +8 -4
  90. package/dist/api/pilot-arm.js +5 -4
  91. package/dist/api/prompt-hook.d.ts +35 -20
  92. package/dist/api/prompt-hook.js +66 -44
  93. package/dist/api/provenance-coverage.d.ts +3 -1
  94. package/dist/api/provenance-coverage.js +3 -1
  95. package/dist/api/recall/finish.d.ts +185 -0
  96. package/dist/api/recall/finish.js +301 -0
  97. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  98. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
  99. package/dist/api/recall/recall.d.ts +6 -0
  100. package/dist/api/{recall.js → recall/recall.js} +116 -72
  101. package/dist/api/recall/render.d.ts +39 -0
  102. package/dist/api/recall/render.js +60 -0
  103. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  104. package/dist/api/recall/request.js +261 -0
  105. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  106. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  107. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
  108. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  109. package/dist/api/session-end.d.ts +36 -8
  110. package/dist/api/session-end.js +71 -25
  111. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  112. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  113. package/dist/api/sleep/dormant.d.ts +25 -0
  114. package/dist/api/sleep/dormant.js +64 -0
  115. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  116. package/dist/api/sleep/learn.js +138 -0
  117. package/dist/api/sleep/sleep-run.d.ts +38 -0
  118. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
  119. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  120. package/dist/api/sleep/sleep.js +9 -0
  121. package/dist/api/status.d.ts +3 -1
  122. package/dist/api/status.js +3 -1
  123. package/dist/api/store-init.d.ts +4 -1
  124. package/dist/api/store-init.js +4 -1
  125. package/dist/api/tokens.d.ts +10 -9
  126. package/dist/api/tokens.js +9 -10
  127. package/dist/api/types.d.ts +27 -12
  128. package/dist/api/types.js +13 -4
  129. package/dist/capture/caller-session.d.ts +8 -2
  130. package/dist/capture/caller-session.js +16 -6
  131. package/dist/capture/capture-error.d.ts +3 -1
  132. package/dist/capture/capture-error.js +3 -1
  133. package/dist/capture/codex-patch.js +7 -2
  134. package/dist/capture/command.d.ts +4 -2
  135. package/dist/capture/command.js +34 -15
  136. package/dist/capture/compact-resume-caller.js +15 -8
  137. package/dist/capture/compact.d.ts +8 -5
  138. package/dist/capture/compact.js +34 -23
  139. package/dist/capture/compaction-items-caller.js +9 -3
  140. package/dist/capture/compaction-record.d.ts +4 -3
  141. package/dist/capture/compaction-record.js +20 -12
  142. package/dist/capture/compaction-spool.d.ts +18 -9
  143. package/dist/capture/compaction-spool.js +105 -63
  144. package/dist/capture/copilot-transcript.d.ts +11 -3
  145. package/dist/capture/copilot-transcript.js +16 -6
  146. package/dist/capture/extract.js +20 -8
  147. package/dist/capture/failure-caller.js +23 -12
  148. package/dist/capture/failure-reading.d.ts +10 -3
  149. package/dist/capture/failure-reading.js +24 -7
  150. package/dist/capture/pre-compact-caller.js +11 -4
  151. package/dist/capture/session-digest.d.ts +15 -4
  152. package/dist/capture/session-digest.js +39 -13
  153. package/dist/capture/session-end-caller.d.ts +4 -1
  154. package/dist/capture/session-end-caller.js +20 -8
  155. package/dist/capture/session-texts.d.ts +6 -2
  156. package/dist/capture/session-texts.js +22 -7
  157. package/dist/capture/session-worker.d.ts +4 -2
  158. package/dist/capture/session-worker.js +58 -17
  159. package/dist/capture/transcript.d.ts +13 -4
  160. package/dist/capture/transcript.js +32 -10
  161. package/dist/capture/working-state.d.ts +13 -4
  162. package/dist/capture/working-state.js +50 -56
  163. package/dist/cli/api-context.d.ts +14 -2
  164. package/dist/cli/api-context.js +45 -2
  165. package/dist/cli/audit.js +33 -33
  166. package/dist/cli/auth.js +23 -31
  167. package/dist/cli/briefs.d.ts +1 -1
  168. package/dist/cli/briefs.js +20 -15
  169. package/dist/cli/card.d.ts +1 -1
  170. package/dist/cli/card.js +56 -73
  171. package/dist/cli/client.d.ts +12 -5
  172. package/dist/cli/client.js +53 -23
  173. package/dist/cli/compact-resume-payload.d.ts +4 -1
  174. package/dist/cli/compact-resume-payload.js +12 -5
  175. package/dist/cli/context.js +43 -18
  176. package/dist/cli/continuity.d.ts +5 -5
  177. package/dist/cli/continuity.js +90 -107
  178. package/dist/cli/curate.d.ts +5 -4
  179. package/dist/cli/curate.js +55 -77
  180. package/dist/cli/dag.d.ts +1 -1
  181. package/dist/cli/dag.js +14 -17
  182. package/dist/cli/decisions.js +30 -30
  183. package/dist/cli/eval.js +16 -21
  184. package/dist/cli/exit.d.ts +4 -1
  185. package/dist/cli/exit.js +10 -2
  186. package/dist/cli/explain.js +12 -11
  187. package/dist/cli/flag-values.d.ts +1 -1
  188. package/dist/cli/flag-values.js +9 -18
  189. package/dist/cli/github.d.ts +6 -0
  190. package/dist/cli/github.js +25 -13
  191. package/dist/cli/goals.d.ts +1 -1
  192. package/dist/cli/goals.js +39 -56
  193. package/dist/cli/graph.d.ts +1 -1
  194. package/dist/cli/graph.js +15 -11
  195. package/dist/cli/hook-runtime.d.ts +34 -10
  196. package/dist/cli/hook-runtime.js +41 -16
  197. package/dist/cli/incidents.d.ts +1 -1
  198. package/dist/cli/incidents.js +25 -25
  199. package/dist/cli/init.d.ts +1 -1
  200. package/dist/cli/init.js +35 -20
  201. package/dist/cli/install-steps.d.ts +12 -3
  202. package/dist/cli/install-steps.js +42 -18
  203. package/dist/cli/last-sleep.d.ts +4 -1
  204. package/dist/cli/last-sleep.js +9 -4
  205. package/dist/cli/maintenance.d.ts +1 -1
  206. package/dist/cli/maintenance.js +11 -12
  207. package/dist/cli/notes.d.ts +1 -1
  208. package/dist/cli/notes.js +8 -5
  209. package/dist/cli/object-verbs.d.ts +5 -5
  210. package/dist/cli/object-verbs.js +13 -16
  211. package/dist/cli/open-browser.js +11 -2
  212. package/dist/cli/playbooks.d.ts +3 -3
  213. package/dist/cli/playbooks.js +40 -32
  214. package/dist/cli/predictions.js +17 -22
  215. package/dist/cli/print.js +4 -2
  216. package/dist/cli/projects.js +21 -11
  217. package/dist/cli/quality-repair-once.d.ts +1 -1
  218. package/dist/cli/quality-repair-once.js +7 -6
  219. package/dist/cli/recall.js +129 -93
  220. package/dist/cli/refine-llm.d.ts +15 -4
  221. package/dist/cli/refine-llm.js +17 -7
  222. package/dist/cli/remember.js +51 -55
  223. package/dist/cli/scheduler.d.ts +4 -1
  224. package/dist/cli/scheduler.js +9 -5
  225. package/dist/cli/serve.js +28 -18
  226. package/dist/cli/session-hooks.d.ts +2 -6
  227. package/dist/cli/session-hooks.js +140 -112
  228. package/dist/cli/setup.d.ts +1 -1
  229. package/dist/cli/setup.js +56 -34
  230. package/dist/cli/shared.d.ts +4 -2
  231. package/dist/cli/shared.js +26 -11
  232. package/dist/cli/slack.js +15 -24
  233. package/dist/cli/sleep-render.d.ts +3 -1
  234. package/dist/cli/sleep-render.js +8 -5
  235. package/dist/cli/sleep.js +16 -8
  236. package/dist/cli/status.d.ts +4 -4
  237. package/dist/cli/status.js +32 -27
  238. package/dist/cli/stdin.d.ts +10 -3
  239. package/dist/cli/stdin.js +10 -3
  240. package/dist/cli/transfer.d.ts +4 -4
  241. package/dist/cli/transfer.js +97 -82
  242. package/dist/cli/usage.d.ts +1 -1
  243. package/dist/cli/usage.js +1 -1
  244. package/dist/cli/verb-row.d.ts +2 -0
  245. package/dist/cli/verbs/health.js +2 -0
  246. package/dist/cli/verbs/memory.js +47 -53
  247. package/dist/cli/verbs/objects.js +16 -7
  248. package/dist/cli/verbs/sessions.js +4 -2
  249. package/dist/cli/versioned-verbs.d.ts +8 -7
  250. package/dist/cli/versioned-verbs.js +31 -21
  251. package/dist/cli.js +14 -18
  252. package/dist/connectors/dlq.d.ts +6 -6
  253. package/dist/connectors/dlq.js +12 -7
  254. package/dist/connectors/github/backfill.d.ts +4 -4
  255. package/dist/connectors/github/backfill.js +6 -4
  256. package/dist/connectors/github/deletion.d.ts +6 -4
  257. package/dist/connectors/github/deletion.js +5 -4
  258. package/dist/connectors/github/dlq.d.ts +8 -6
  259. package/dist/connectors/github/dlq.js +11 -5
  260. package/dist/connectors/github/ingest.d.ts +2 -2
  261. package/dist/connectors/github/ingest.js +9 -5
  262. package/dist/connectors/github/octokit-client.d.ts +3 -1
  263. package/dist/connectors/github/octokit-client.js +7 -2
  264. package/dist/connectors/github/ratelimit.d.ts +6 -2
  265. package/dist/connectors/github/ratelimit.js +6 -2
  266. package/dist/connectors/github/signature.d.ts +14 -3
  267. package/dist/connectors/github/signature.js +17 -3
  268. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  269. package/dist/connectors/github/tenant-routing.js +6 -5
  270. package/dist/connectors/github/transform.js +50 -67
  271. package/dist/connectors/github/types.d.ts +10 -3
  272. package/dist/connectors/github/types.js +6 -2
  273. package/dist/connectors/github/webhook.d.ts +5 -5
  274. package/dist/connectors/github/webhook.js +36 -23
  275. package/dist/connectors/ingest.d.ts +5 -3
  276. package/dist/connectors/ingest.js +3 -3
  277. package/dist/connectors/slack/backfill.d.ts +5 -5
  278. package/dist/connectors/slack/backfill.js +3 -3
  279. package/dist/connectors/slack/deletion.d.ts +4 -4
  280. package/dist/connectors/slack/deletion.js +6 -5
  281. package/dist/connectors/slack/dlq.d.ts +4 -4
  282. package/dist/connectors/slack/dlq.js +6 -6
  283. package/dist/connectors/slack/ingest.d.ts +6 -4
  284. package/dist/connectors/slack/ingest.js +5 -4
  285. package/dist/connectors/slack/signature.d.ts +4 -1
  286. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  287. package/dist/connectors/slack/tenant-routing.js +6 -5
  288. package/dist/connectors/slack/transform.d.ts +6 -2
  289. package/dist/connectors/slack/transform.js +6 -2
  290. package/dist/connectors/slack/types.d.ts +3 -1
  291. package/dist/connectors/slack/web-client.js +8 -3
  292. package/dist/connectors/slack/webhook.d.ts +5 -5
  293. package/dist/connectors/slack/webhook.js +19 -11
  294. package/dist/connectors/slack/workspaces.d.ts +7 -3
  295. package/dist/connectors/slack/workspaces.js +7 -3
  296. package/dist/connectors/store.d.ts +8 -0
  297. package/dist/connectors/store.js +2 -0
  298. package/dist/consolidate/conflicts.js +24 -10
  299. package/dist/consolidate/dag-summary.js +2 -1
  300. package/dist/consolidate/dag.d.ts +10 -5
  301. package/dist/consolidate/dag.js +45 -39
  302. package/dist/consolidate/decay.js +19 -6
  303. package/dist/consolidate/dedupe.d.ts +14 -5
  304. package/dist/consolidate/dedupe.js +28 -17
  305. package/dist/consolidate/flush-units.d.ts +4 -1
  306. package/dist/consolidate/flush-units.js +4 -1
  307. package/dist/consolidate/half-life-migration.d.ts +18 -8
  308. package/dist/consolidate/half-life-migration.js +48 -18
  309. package/dist/consolidate/llm-passes.js +27 -11
  310. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  311. package/dist/consolidate/memory-value-weights.js +6 -2
  312. package/dist/consolidate/memory-value.d.ts +30 -10
  313. package/dist/consolidate/memory-value.js +37 -14
  314. package/dist/consolidate/merge.d.ts +4 -1
  315. package/dist/consolidate/merge.js +47 -37
  316. package/dist/consolidate/overlap-index.d.ts +8 -2
  317. package/dist/consolidate/overlap-index.js +11 -4
  318. package/dist/consolidate/physics-pass.d.ts +3 -1
  319. package/dist/consolidate/physics-pass.js +10 -7
  320. package/dist/consolidate/replay.d.ts +11 -4
  321. package/dist/consolidate/replay.js +19 -7
  322. package/dist/consolidate/run.d.ts +13 -5
  323. package/dist/consolidate/run.js +4 -4
  324. package/dist/consolidate/sleep.d.ts +14 -6
  325. package/dist/consolidate/sleep.js +42 -39
  326. package/dist/consolidate/trace.d.ts +7 -2
  327. package/dist/consolidate/trace.js +7 -2
  328. package/dist/consolidate/traces.js +27 -30
  329. package/dist/core/ablation.d.ts +9 -3
  330. package/dist/core/ablation.js +14 -4
  331. package/dist/core/active-scope.d.ts +3 -1
  332. package/dist/core/active-scope.js +3 -1
  333. package/dist/core/agent-memory-tools.d.ts +2 -0
  334. package/dist/core/agent-memory-tools.js +2 -0
  335. package/dist/core/ambient.d.ts +4 -3
  336. package/dist/core/ambient.js +8 -6
  337. package/dist/core/api-errors.d.ts +9 -3
  338. package/dist/core/api-errors.js +9 -3
  339. package/dist/core/capture-contract.d.ts +4 -1
  340. package/dist/core/capture-contract.js +27 -8
  341. package/dist/core/compare.d.ts +24 -8
  342. package/dist/core/compare.js +24 -8
  343. package/dist/core/config.d.ts +18 -9
  344. package/dist/core/config.js +38 -29
  345. package/dist/core/cosine.d.ts +4 -1
  346. package/dist/core/cosine.js +4 -1
  347. package/dist/core/handoff.d.ts +7 -2
  348. package/dist/core/handoff.js +4 -1
  349. package/dist/core/markdown.js +22 -17
  350. package/dist/core/memory-audit.js +14 -3
  351. package/dist/core/memory-quality.d.ts +12 -3
  352. package/dist/core/memory-quality.js +57 -21
  353. package/dist/core/memory.d.ts +87 -30
  354. package/dist/core/memory.js +82 -33
  355. package/dist/core/merged-row.d.ts +8 -2
  356. package/dist/core/merged-row.js +10 -3
  357. package/dist/core/package-root.d.ts +3 -1
  358. package/dist/core/package-root.js +3 -1
  359. package/dist/core/particle-refresh.d.ts +8 -0
  360. package/dist/core/particle-refresh.js +22 -0
  361. package/dist/core/physics-config.d.ts +4 -1
  362. package/dist/core/physics-config.js +6 -2
  363. package/dist/core/physics.d.ts +39 -11
  364. package/dist/core/physics.js +71 -21
  365. package/dist/core/project-identity.d.ts +34 -17
  366. package/dist/core/project-identity.js +35 -18
  367. package/dist/core/project-remote.d.ts +8 -4
  368. package/dist/core/project-remote.js +31 -14
  369. package/dist/core/recall-scope.d.ts +33 -11
  370. package/dist/core/recall-scope.js +42 -15
  371. package/dist/core/rejection-digest.d.ts +7 -0
  372. package/dist/core/rejection-digest.js +13 -0
  373. package/dist/core/salience.d.ts +3 -1
  374. package/dist/core/salience.js +10 -4
  375. package/dist/core/search-types.d.ts +15 -2
  376. package/dist/core/search-types.js +11 -0
  377. package/dist/dashboard/dashboard-actions.d.ts +2 -2
  378. package/dist/dashboard/dashboard-actions.js +18 -7
  379. package/dist/dashboard/dashboard-queries.js +2 -7
  380. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  381. package/dist/dashboard/dashboard-snapshot.js +5 -7
  382. package/dist/dashboard/dashboard.js +22 -8
  383. package/dist/db/backup.js +2 -2
  384. package/dist/db/busy.d.ts +10 -3
  385. package/dist/db/busy.js +27 -5
  386. package/dist/db/connect.d.ts +10 -2
  387. package/dist/db/connect.js +8 -2
  388. package/dist/db/continuity.d.ts +1 -1
  389. package/dist/db/continuity.js +27 -11
  390. package/dist/db/meta.d.ts +4 -1
  391. package/dist/db/meta.js +4 -1
  392. package/dist/db/migrate.d.ts +10 -5
  393. package/dist/db/migrate.js +40 -20
  394. package/dist/db/migrations/index.d.ts +1 -1
  395. package/dist/db/migrations/index.js +3 -1
  396. package/dist/db/migrations/types.d.ts +2 -1
  397. package/dist/db/migrations/v11.js +1 -0
  398. package/dist/db/migrations/v12.js +2 -1
  399. package/dist/db/migrations/v14.js +2 -0
  400. package/dist/db/migrations/v15.js +4 -2
  401. package/dist/db/migrations/v16.js +6 -3
  402. package/dist/db/migrations/v17.js +2 -1
  403. package/dist/db/migrations/v19.js +4 -2
  404. package/dist/db/migrations/v20.js +2 -1
  405. package/dist/db/migrations/v22.js +12 -6
  406. package/dist/db/migrations/v23.js +6 -3
  407. package/dist/db/migrations/v24.js +6 -3
  408. package/dist/db/migrations/v25.js +4 -2
  409. package/dist/db/migrations/v26.js +4 -2
  410. package/dist/db/migrations/v27.js +6 -3
  411. package/dist/db/migrations/v28.js +4 -2
  412. package/dist/db/migrations/v29.js +4 -2
  413. package/dist/db/migrations/v30.js +6 -3
  414. package/dist/db/migrations/v31.js +4 -2
  415. package/dist/db/migrations/v32.js +6 -3
  416. package/dist/db/migrations/v33.js +4 -2
  417. package/dist/db/migrations/v34.js +2 -1
  418. package/dist/db/migrations/v35.js +2 -1
  419. package/dist/db/migrations/v36.js +2 -1
  420. package/dist/db/migrations/v37.js +10 -5
  421. package/dist/db/migrations/v38.js +10 -5
  422. package/dist/db/migrations/v39.js +14 -6
  423. package/dist/db/migrations/v40.js +4 -2
  424. package/dist/db/migrations/v41.js +4 -2
  425. package/dist/db/migrations/v42.js +2 -1
  426. package/dist/db/migrations/v44.js +4 -2
  427. package/dist/db/migrations/v45.js +4 -2
  428. package/dist/db/migrations/v49.js +2 -1
  429. package/dist/db/migrations/v50.js +4 -2
  430. package/dist/db/migrations/v51.js +4 -2
  431. package/dist/db/migrations/v52.js +2 -1
  432. package/dist/db/migrations/v53.js +8 -4
  433. package/dist/db/migrations/v54.js +2 -1
  434. package/dist/db/migrations/v55.js +4 -2
  435. package/dist/db/migrations/v56.d.ts +3 -0
  436. package/dist/db/migrations/v56.js +28 -0
  437. package/dist/db/open.d.ts +24 -12
  438. package/dist/db/open.js +25 -13
  439. package/dist/db/physics-state.d.ts +8 -8
  440. package/dist/db/physics-state.js +17 -50
  441. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  442. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  443. package/dist/db/request-stores.d.ts +20 -5
  444. package/dist/db/request-stores.js +15 -5
  445. package/dist/db/tables.d.ts +2 -1
  446. package/dist/db/tables.js +12 -4
  447. package/dist/db/vector-store.d.ts +13 -4
  448. package/dist/db/vector-store.js +35 -14
  449. package/dist/db/wal-checkpointer.d.ts +2 -1
  450. package/dist/db/wal-checkpointer.js +19 -7
  451. package/dist/doctor.d.ts +7 -1
  452. package/dist/doctor.js +128 -46
  453. package/dist/embeddings/local.d.ts +8 -4
  454. package/dist/embeddings/local.js +11 -7
  455. package/dist/embeddings/provider.d.ts +19 -10
  456. package/dist/embeddings/provider.js +32 -27
  457. package/dist/embeddings/transformers.d.ts +16 -4
  458. package/dist/embeddings/transformers.js +32 -15
  459. package/dist/entry/json-hooks.d.ts +1 -1
  460. package/dist/entry/json-hooks.js +1 -1
  461. package/dist/entry/project-identity.js +2 -1
  462. package/dist/entry/session-text.d.ts +1 -1
  463. package/dist/entry/session-text.js +1 -1
  464. package/dist/entry/sqlite-handles.d.ts +10 -0
  465. package/dist/entry/sqlite-handles.js +9 -0
  466. package/dist/entry/store-kit.d.ts +50 -0
  467. package/dist/entry/store-kit.js +27 -0
  468. package/dist/entry/testing.d.ts +6 -0
  469. package/dist/entry/testing.js +7 -0
  470. package/dist/eval/eval-stats.d.ts +27 -8
  471. package/dist/eval/eval-stats.js +17 -5
  472. package/dist/eval/eval-suite.d.ts +3 -1
  473. package/dist/eval/eval-suite.js +409 -187
  474. package/dist/eval/eval.d.ts +8 -2
  475. package/dist/eval/eval.js +8 -2
  476. package/dist/eval/judgment.js +17 -7
  477. package/dist/graph/delta.d.ts +9 -42
  478. package/dist/graph/delta.js +17 -11
  479. package/dist/graph/extract.d.ts +10 -7
  480. package/dist/graph/extract.js +57 -25
  481. package/dist/graph/recall.d.ts +12 -4
  482. package/dist/graph/recall.js +30 -13
  483. package/dist/graph/stream.d.ts +18 -6
  484. package/dist/graph/stream.js +32 -10
  485. package/dist/graph/view.d.ts +19 -6
  486. package/dist/graph/view.js +42 -17
  487. package/dist/hooks/codex-session.js +2 -2
  488. package/dist/hooks/codex-wrapper.d.ts +3 -1
  489. package/dist/hooks/codex-wrapper.js +9 -4
  490. package/dist/hooks/copilot.d.ts +19 -5
  491. package/dist/hooks/copilot.js +54 -15
  492. package/dist/hooks/hook-blocks.d.ts +4 -1
  493. package/dist/hooks/hook-blocks.js +8 -3
  494. package/dist/hooks/json-hooks.d.ts +9 -5
  495. package/dist/hooks/json-hooks.js +72 -33
  496. package/dist/hooks/opencode.js +15 -5
  497. package/dist/hooks/shared.d.ts +27 -8
  498. package/dist/hooks/shared.js +57 -16
  499. package/dist/importers/core.d.ts +12 -4
  500. package/dist/importers/core.js +11 -10
  501. package/dist/importers/markdown-parse.d.ts +15 -5
  502. package/dist/importers/markdown-parse.js +16 -7
  503. package/dist/importers/markdown.js +6 -9
  504. package/dist/importers/sources.js +10 -23
  505. package/dist/importers/vault.d.ts +3 -3
  506. package/dist/importers/vault.js +61 -45
  507. package/dist/index.d.ts +33 -7
  508. package/dist/index.js +26 -8
  509. package/dist/learn/autolearn.d.ts +21 -6
  510. package/dist/learn/autolearn.js +57 -26
  511. package/dist/learn/churn-git.d.ts +4 -1
  512. package/dist/learn/churn-git.js +29 -5
  513. package/dist/learn/extract.d.ts +4 -1
  514. package/dist/learn/extract.js +17 -10
  515. package/dist/learn/forward-claim-detector.d.ts +17 -5
  516. package/dist/learn/forward-claim-detector.js +34 -15
  517. package/dist/learn/invalidation.d.ts +12 -6
  518. package/dist/learn/invalidation.js +62 -28
  519. package/dist/learn/roots.d.ts +3 -0
  520. package/dist/learn/roots.js +5 -0
  521. package/dist/mcp/admin-tools.d.ts +5 -5
  522. package/dist/mcp/admin-tools.js +28 -23
  523. package/dist/mcp/format.d.ts +1 -1
  524. package/dist/mcp/format.js +4 -2
  525. package/dist/mcp/framing.d.ts +3 -1
  526. package/dist/mcp/framing.js +20 -8
  527. package/dist/mcp/memory-tools.d.ts +3 -3
  528. package/dist/mcp/memory-tools.js +21 -20
  529. package/dist/mcp/protocol.d.ts +32 -16
  530. package/dist/mcp/protocol.js +12 -9
  531. package/dist/mcp/recall-tools.d.ts +3 -3
  532. package/dist/mcp/recall-tools.js +62 -74
  533. package/dist/mcp/request.d.ts +7 -5
  534. package/dist/mcp/request.js +61 -77
  535. package/dist/mcp/server.d.ts +3 -1
  536. package/dist/mcp/server.js +8 -3
  537. package/dist/mcp/session-state.d.ts +1 -1
  538. package/dist/mcp/session-state.js +4 -3
  539. package/dist/mcp/shared-gate.d.ts +3 -2
  540. package/dist/mcp/shared-gate.js +3 -2
  541. package/dist/mcp/stdio.d.ts +6 -3
  542. package/dist/mcp/stdio.js +59 -23
  543. package/dist/mcp/tool-args.d.ts +4 -1
  544. package/dist/mcp/tool-args.js +8 -3
  545. package/dist/mcp/tools.js +76 -32
  546. package/dist/objects/customer-notes.d.ts +12 -10
  547. package/dist/objects/customer-notes.js +21 -15
  548. package/dist/objects/decisions.d.ts +18 -10
  549. package/dist/objects/decisions.js +23 -17
  550. package/dist/objects/descriptor.js +2 -1
  551. package/dist/objects/fields.d.ts +4 -1
  552. package/dist/objects/fields.js +6 -2
  553. package/dist/objects/incidents.d.ts +14 -16
  554. package/dist/objects/incidents.js +29 -30
  555. package/dist/objects/lifecycle.d.ts +0 -4
  556. package/dist/objects/lifecycle.js +21 -24
  557. package/dist/objects/policies.d.ts +12 -16
  558. package/dist/objects/policies.js +17 -21
  559. package/dist/objects/processes.d.ts +16 -10
  560. package/dist/objects/processes.js +20 -15
  561. package/dist/objects/project-briefs.d.ts +13 -14
  562. package/dist/objects/project-briefs.js +33 -39
  563. package/dist/objects/skills.d.ts +10 -12
  564. package/dist/objects/skills.js +17 -22
  565. package/dist/postinstall.js +15 -7
  566. package/dist/predictions/planning-fallacy.d.ts +19 -6
  567. package/dist/predictions/planning-fallacy.js +4 -2
  568. package/dist/rerankers/clef.d.ts +8 -2
  569. package/dist/rerankers/clef.js +14 -9
  570. package/dist/rerankers/cross-encoder.d.ts +2 -1
  571. package/dist/rerankers/cross-encoder.js +19 -9
  572. package/dist/rerankers/index.js +2 -1
  573. package/dist/rerankers/jev.js +2 -1
  574. package/dist/rerankers/llm.d.ts +6 -2
  575. package/dist/rerankers/llm.js +8 -3
  576. package/dist/rerankers/remote.d.ts +3 -1
  577. package/dist/rerankers/remote.js +5 -2
  578. package/dist/rerankers/types.d.ts +6 -2
  579. package/dist/search/bm25-search.d.ts +3 -1
  580. package/dist/search/bm25-search.js +15 -2
  581. package/dist/search/boosts.js +4 -3
  582. package/dist/search/embed-memories.d.ts +12 -4
  583. package/dist/search/embed-memories.js +96 -58
  584. package/dist/search/engine.d.ts +11 -0
  585. package/dist/search/engine.js +14 -0
  586. package/dist/search/goal-boost.d.ts +10 -3
  587. package/dist/search/goal-boost.js +13 -6
  588. package/dist/search/hybrid-score.d.ts +4 -1
  589. package/dist/search/hybrid-score.js +4 -1
  590. package/dist/search/hybrid.d.ts +23 -8
  591. package/dist/search/hybrid.js +12 -7
  592. package/dist/search/multihop.js +14 -13
  593. package/dist/search/path-context.d.ts +10 -3
  594. package/dist/search/path-context.js +10 -3
  595. package/dist/search/physics-search.d.ts +9 -4
  596. package/dist/search/physics-search.js +38 -14
  597. package/dist/search/rerank.d.ts +2 -1
  598. package/dist/search/rerank.js +2 -1
  599. package/dist/search/rrf.d.ts +14 -5
  600. package/dist/search/rrf.js +11 -4
  601. package/dist/search/vector.d.ts +8 -2
  602. package/dist/search/vector.js +14 -8
  603. package/dist/server/auth.d.ts +19 -15
  604. package/dist/server/auth.js +68 -38
  605. package/dist/server/boot.d.ts +4 -1
  606. package/dist/server/boot.js +115 -67
  607. package/dist/server/client-ip.d.ts +17 -5
  608. package/dist/server/client-ip.js +56 -21
  609. package/dist/server/cursor.d.ts +10 -3
  610. package/dist/server/cursor.js +10 -3
  611. package/dist/server/deadline.d.ts +5 -2
  612. package/dist/server/deadline.js +10 -3
  613. package/dist/server/key-check-bounds.js +12 -4
  614. package/dist/server/lifecycle.d.ts +4 -1
  615. package/dist/server/lifecycle.js +10 -4
  616. package/dist/server/mcp-http.d.ts +2 -1
  617. package/dist/server/mcp-http.js +37 -22
  618. package/dist/server/rate-limit.d.ts +17 -5
  619. package/dist/server/rate-limit.js +55 -26
  620. package/dist/server/ready.js +7 -4
  621. package/dist/server/request.d.ts +15 -4
  622. package/dist/server/request.js +42 -15
  623. package/dist/server/route-checks.d.ts +4 -1
  624. package/dist/server/route-checks.js +8 -3
  625. package/dist/server/route-table.d.ts +8 -6
  626. package/dist/server/route-table.js +550 -97
  627. package/dist/server/routes/admin.d.ts +7 -7
  628. package/dist/server/routes/admin.js +36 -15
  629. package/dist/server/routes/customer-notes.d.ts +5 -5
  630. package/dist/server/routes/customer-notes.js +5 -4
  631. package/dist/server/routes/decisions.d.ts +5 -5
  632. package/dist/server/routes/decisions.js +12 -6
  633. package/dist/server/routes/incidents.d.ts +5 -5
  634. package/dist/server/routes/incidents.js +10 -4
  635. package/dist/server/routes/memories.d.ts +8 -8
  636. package/dist/server/routes/memories.js +12 -17
  637. package/dist/server/routes/object-routes.d.ts +8 -5
  638. package/dist/server/routes/object-routes.js +4 -2
  639. package/dist/server/routes/policies.d.ts +6 -6
  640. package/dist/server/routes/policies.js +11 -4
  641. package/dist/server/routes/predictions.d.ts +5 -5
  642. package/dist/server/routes/predictions.js +9 -4
  643. package/dist/server/routes/processes.d.ts +5 -5
  644. package/dist/server/routes/processes.js +15 -6
  645. package/dist/server/routes/project-briefs.d.ts +6 -6
  646. package/dist/server/routes/project-briefs.js +3 -2
  647. package/dist/server/routes/recall.d.ts +3 -3
  648. package/dist/server/routes/recall.js +21 -10
  649. package/dist/server/routes/skills.d.ts +6 -6
  650. package/dist/server/routes/skills.js +12 -4
  651. package/dist/server/server-detect.d.ts +24 -8
  652. package/dist/server/server-detect.js +57 -22
  653. package/dist/server/sleep-child.js +16 -10
  654. package/dist/server/sleep-offload.d.ts +8 -5
  655. package/dist/server/sleep-offload.js +40 -18
  656. package/dist/server/tls.d.ts +10 -2
  657. package/dist/server/tls.js +25 -5
  658. package/dist/server/types.d.ts +41 -24
  659. package/dist/server/validation.d.ts +4 -1
  660. package/dist/server/validation.js +22 -9
  661. package/dist/server.d.ts +17 -49
  662. package/dist/server.js +33 -40
  663. package/dist/sharing/global-store.d.ts +6 -12
  664. package/dist/sharing/global-store.js +8 -48
  665. package/dist/sharing/global-sync.d.ts +3 -1
  666. package/dist/sharing/global-sync.js +17 -7
  667. package/dist/sharing/project-merge.d.ts +25 -7
  668. package/dist/sharing/project-merge.js +49 -17
  669. package/dist/sharing/search-both.d.ts +8 -4
  670. package/dist/sharing/search-both.js +28 -14
  671. package/dist/sharing/share.d.ts +8 -4
  672. package/dist/sharing/share.js +40 -18
  673. package/dist/store/ambient.js +10 -5
  674. package/dist/store/audit-event.d.ts +2 -2
  675. package/dist/store/audit-event.js +8 -3
  676. package/dist/store/audit.d.ts +6 -3
  677. package/dist/store/audit.js +16 -6
  678. package/dist/store/auth.d.ts +4 -2
  679. package/dist/store/auth.js +63 -20
  680. package/dist/store/busy.d.ts +9 -0
  681. package/dist/store/busy.js +16 -0
  682. package/dist/store/candidates.d.ts +12 -5
  683. package/dist/store/candidates.js +90 -41
  684. package/dist/store/capture-write.d.ts +2 -1
  685. package/dist/store/capture-write.js +2 -1
  686. package/dist/store/card-detail.d.ts +4 -4
  687. package/dist/store/card-detail.js +15 -8
  688. package/dist/store/cards.d.ts +24 -10
  689. package/dist/store/cards.js +97 -63
  690. package/dist/store/compaction-caller.d.ts +2 -1
  691. package/dist/store/compaction-caller.js +2 -1
  692. package/dist/store/compactions-record.d.ts +14 -8
  693. package/dist/store/compactions-record.js +101 -37
  694. package/dist/store/compactions.js +35 -15
  695. package/dist/store/conflicts.d.ts +16 -5
  696. package/dist/store/conflicts.js +104 -48
  697. package/dist/store/connectors/dlq.d.ts +17 -5
  698. package/dist/store/connectors/dlq.js +58 -6
  699. package/dist/store/connectors/event-log.d.ts +122 -0
  700. package/dist/store/connectors/event-log.js +25 -0
  701. package/dist/store/connectors/github.d.ts +6 -3
  702. package/dist/store/connectors/github.js +30 -48
  703. package/dist/store/connectors/slack.d.ts +2 -1
  704. package/dist/store/connectors/slack.js +31 -47
  705. package/dist/store/dashboard-reads.d.ts +7 -3
  706. package/dist/store/dashboard-reads.js +32 -10
  707. package/dist/store/delete-and-batch.d.ts +17 -11
  708. package/dist/store/delete-and-batch.js +70 -28
  709. package/dist/store/delivery-recorder.d.ts +10 -7
  710. package/dist/store/delivery-recorder.js +70 -37
  711. package/dist/store/descendant-page.d.ts +2 -1
  712. package/dist/store/descendant-page.js +26 -10
  713. package/dist/store/diagnostics.d.ts +2 -1
  714. package/dist/store/diagnostics.js +2 -1
  715. package/dist/store/doctor-reads.d.ts +2 -1
  716. package/dist/store/doctor-reads.js +13 -5
  717. package/dist/store/dormant.d.ts +19 -11
  718. package/dist/store/dormant.js +45 -19
  719. package/dist/store/embeddings/index.d.ts +13 -9
  720. package/dist/store/embeddings/index.js +19 -12
  721. package/dist/store/entry-reads.d.ts +72 -21
  722. package/dist/store/entry-reads.js +215 -69
  723. package/dist/store/entry-row.d.ts +10 -6
  724. package/dist/store/entry-row.js +26 -14
  725. package/dist/store/entry-writes.d.ts +28 -13
  726. package/dist/store/entry-writes.js +61 -22
  727. package/dist/store/failure-log-at.js +1 -1
  728. package/dist/store/failure-log.d.ts +4 -2
  729. package/dist/store/failure-log.js +13 -6
  730. package/dist/store/gated-write.d.ts +3 -3
  731. package/dist/store/gated-write.js +3 -3
  732. package/dist/store/goals.d.ts +5 -4
  733. package/dist/store/goals.js +11 -12
  734. package/dist/store/graph-apply.d.ts +21 -0
  735. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  736. package/dist/store/graph-queue.d.ts +9 -6
  737. package/dist/store/graph-queue.js +15 -10
  738. package/dist/store/graph-reads.d.ts +16 -11
  739. package/dist/store/graph-reads.js +29 -19
  740. package/dist/store/graph-rows.d.ts +41 -3
  741. package/dist/store/graph-rows.js +10 -7
  742. package/dist/store/graph-view-rows.js +15 -7
  743. package/dist/store/graph-writes.d.ts +16 -10
  744. package/dist/store/graph-writes.js +59 -36
  745. package/dist/store/half-life.js +2 -2
  746. package/dist/store/handoffs.d.ts +13 -7
  747. package/dist/store/handoffs.js +44 -22
  748. package/dist/store/index-and-stats.d.ts +2 -2
  749. package/dist/store/index-and-stats.js +6 -5
  750. package/dist/store/index.d.ts +4 -2
  751. package/dist/store/index.js +2 -1
  752. package/dist/store/key-audit.d.ts +2 -1
  753. package/dist/store/key-audit.js +2 -1
  754. package/dist/store/key-writes.d.ts +2 -1
  755. package/dist/store/key-writes.js +9 -2
  756. package/dist/store/ledger-turn.d.ts +4 -1
  757. package/dist/store/ledger-turn.js +7 -2
  758. package/dist/store/mirrors.d.ts +11 -4
  759. package/dist/store/mirrors.js +96 -19
  760. package/dist/store/narrow.d.ts +6 -0
  761. package/dist/store/narrow.js +11 -0
  762. package/dist/store/open.d.ts +6 -3
  763. package/dist/store/open.js +20 -10
  764. package/dist/store/pilot-arm.d.ts +2 -1
  765. package/dist/store/pilot-arm.js +18 -6
  766. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  767. package/dist/store/planning-fallacy-evidence.js +8 -5
  768. package/dist/store/port/agent-import.d.ts +62 -0
  769. package/dist/store/port/agent-import.js +2 -0
  770. package/dist/store/port/consolidation.d.ts +129 -0
  771. package/dist/store/port/consolidation.js +2 -0
  772. package/dist/store/port/learning.d.ts +19 -0
  773. package/dist/store/port/learning.js +2 -0
  774. package/dist/store/port/local-files.d.ts +18 -0
  775. package/dist/store/port/local-files.js +2 -0
  776. package/dist/store/port/promotion.d.ts +20 -0
  777. package/dist/store/port/promotion.js +3 -0
  778. package/dist/store/port-groups.d.ts +160 -0
  779. package/dist/store/port-groups.js +2 -0
  780. package/dist/store/port.d.ts +261 -219
  781. package/dist/store/port.js +3 -9
  782. package/dist/store/predictions.d.ts +14 -10
  783. package/dist/store/predictions.js +37 -17
  784. package/dist/store/project-tags.d.ts +4 -1
  785. package/dist/store/project-tags.js +16 -5
  786. package/dist/store/quality-repair.d.ts +8 -4
  787. package/dist/store/quality-repair.js +53 -20
  788. package/dist/store/quarantine.d.ts +1 -0
  789. package/dist/store/quarantine.js +23 -9
  790. package/dist/store/raw-archive.d.ts +5 -4
  791. package/dist/store/raw-archive.js +11 -10
  792. package/dist/store/recall-trace.d.ts +22 -17
  793. package/dist/store/recall-trace.js +128 -64
  794. package/dist/store/rejected-values.d.ts +15 -10
  795. package/dist/store/rejected-values.js +46 -20
  796. package/dist/store/rejection.d.ts +12 -11
  797. package/dist/store/rejection.js +18 -19
  798. package/dist/store/report-reads.d.ts +2 -1
  799. package/dist/store/report-reads.js +2 -1
  800. package/dist/store/rows.d.ts +7 -5
  801. package/dist/store/rows.js +20 -13
  802. package/dist/store/rule-sql.d.ts +7 -3
  803. package/dist/store/rule-sql.js +26 -13
  804. package/dist/store/search-rows.d.ts +16 -11
  805. package/dist/store/search-rows.js +54 -32
  806. package/dist/store/sessions.d.ts +12 -10
  807. package/dist/store/sessions.js +40 -21
  808. package/dist/store/set-aside.d.ts +2 -2
  809. package/dist/store/set-aside.js +18 -5
  810. package/dist/store/sqlite/agent-import.d.ts +3 -0
  811. package/dist/store/sqlite/agent-import.js +77 -0
  812. package/dist/store/sqlite/cards-group.d.ts +6 -0
  813. package/dist/store/sqlite/cards-group.js +37 -0
  814. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  815. package/dist/store/sqlite/conflicts-group.js +18 -0
  816. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  817. package/dist/store/sqlite/connector-events-group.js +17 -6
  818. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  819. package/dist/store/sqlite/connector-writes-group.js +12 -5
  820. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  821. package/dist/store/sqlite/consolidation-group.js +64 -0
  822. package/dist/store/sqlite/dag-reads-group.js +1 -1
  823. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  824. package/dist/store/sqlite/dormant-group.js +29 -0
  825. package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
  826. package/dist/store/sqlite/entry-writes-group.js +37 -14
  827. package/dist/store/sqlite/error-codec.d.ts +4 -2
  828. package/dist/store/sqlite/error-codec.js +32 -10
  829. package/dist/store/sqlite/executor-counts.js +2 -1
  830. package/dist/store/sqlite/executor.d.ts +8 -3
  831. package/dist/store/sqlite/executor.js +56 -18
  832. package/dist/store/sqlite/global-promote.d.ts +5 -0
  833. package/dist/store/sqlite/global-promote.js +48 -0
  834. package/dist/store/sqlite/goals-group.d.ts +6 -0
  835. package/dist/store/sqlite/goals-group.js +23 -0
  836. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  837. package/dist/store/sqlite/graph-reads-group.js +2 -1
  838. package/dist/store/sqlite/held-connection.d.ts +8 -0
  839. package/dist/store/sqlite/held-connection.js +34 -7
  840. package/dist/store/sqlite/last-recall-group.d.ts +15 -0
  841. package/dist/store/sqlite/last-recall-group.js +62 -0
  842. package/dist/store/sqlite/learning-group.d.ts +4 -0
  843. package/dist/store/sqlite/learning-group.js +17 -0
  844. package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
  845. package/dist/store/sqlite/maintenance-groups.js +61 -0
  846. package/dist/store/sqlite/object-rows.d.ts +6 -3
  847. package/dist/store/sqlite/object-rows.js +34 -5
  848. package/dist/store/sqlite/objects-group.d.ts +5 -4
  849. package/dist/store/sqlite/objects-group.js +97 -38
  850. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  851. package/dist/store/sqlite/predictions-group.js +4 -2
  852. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  853. package/dist/store/sqlite/promotion-group.js +10 -0
  854. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  855. package/dist/store/sqlite/quarantine-group.js +4 -2
  856. package/dist/store/sqlite/reports-group.d.ts +6 -0
  857. package/dist/store/sqlite/reports-group.js +33 -0
  858. package/dist/store/sqlite/request-scope.d.ts +6 -0
  859. package/dist/store/sqlite/request-scope.js +18 -0
  860. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  861. package/dist/store/sqlite/sessions-group.js +46 -0
  862. package/dist/store/sqlite/store.d.ts +22 -18
  863. package/dist/store/sqlite/store.js +95 -33
  864. package/dist/store/sqlite/vector-pack.js +2 -1
  865. package/dist/store/sqlite/vector-reads-group.js +2 -1
  866. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  867. package/dist/store/sqlite/worker-jobs.js +19 -7
  868. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  869. package/dist/store/sqlite/worker-ops.js +6 -3
  870. package/dist/store/sqlite/worker-store.d.ts +4 -3
  871. package/dist/store/sqlite/worker-store.js +24 -14
  872. package/dist/store/summaries.d.ts +25 -11
  873. package/dist/store/summaries.js +84 -27
  874. package/dist/store/summary-dirty.d.ts +2 -1
  875. package/dist/store/summary-dirty.js +2 -1
  876. package/dist/store/tenant.d.ts +3 -2
  877. package/dist/store/tenant.js +5 -4
  878. package/dist/store/token-ledger-rows.js +8 -4
  879. package/dist/store/token-ledger.d.ts +19 -13
  880. package/dist/store/token-ledger.js +27 -14
  881. package/dist/store/tombstone-checks.d.ts +4 -1
  882. package/dist/store/tombstone-checks.js +10 -1
  883. package/dist/store/usage-reports.js +2 -1
  884. package/dist/store/vector-index.d.ts +8 -5
  885. package/dist/store/vector-index.js +28 -11
  886. package/dist/store/working-memory.d.ts +6 -4
  887. package/dist/store/working-memory.js +14 -9
  888. package/dist/support-bundle.js +10 -5
  889. package/dist/trust/quarantine.d.ts +1 -2
  890. package/dist/trust/quarantine.js +1 -5
  891. package/dist/trust/reject-flow.d.ts +12 -3
  892. package/dist/trust/reject-flow.js +12 -4
  893. package/dist/util/anthropic-messages.d.ts +7 -2
  894. package/dist/util/anthropic-messages.js +18 -7
  895. package/dist/util/atomic-write.d.ts +8 -3
  896. package/dist/util/atomic-write.js +36 -21
  897. package/dist/util/compaction-items.d.ts +4 -1
  898. package/dist/util/compaction-items.js +8 -2
  899. package/dist/util/crash-handlers.d.ts +7 -2
  900. package/dist/util/crash-handlers.js +13 -4
  901. package/dist/util/env.d.ts +26 -5
  902. package/dist/util/env.js +87 -25
  903. package/dist/util/format.d.ts +2 -0
  904. package/dist/util/format.js +4 -0
  905. package/dist/util/home-path.js +12 -6
  906. package/dist/util/hook-payload.d.ts +3 -1
  907. package/dist/util/hook-payload.js +3 -1
  908. package/dist/util/http-retry.d.ts +12 -6
  909. package/dist/util/http-retry.js +16 -6
  910. package/dist/util/http-util.d.ts +20 -5
  911. package/dist/util/http-util.js +28 -9
  912. package/dist/util/json.d.ts +4 -1
  913. package/dist/util/json.js +4 -1
  914. package/dist/util/keyset.js +2 -1
  915. package/dist/util/limits.js +4 -2
  916. package/dist/util/log.d.ts +13 -5
  917. package/dist/util/log.js +29 -6
  918. package/dist/util/net.d.ts +5 -0
  919. package/dist/util/net.js +19 -0
  920. package/dist/util/real-path.d.ts +2 -1
  921. package/dist/util/real-path.js +4 -3
  922. package/dist/util/request-scope.d.ts +16 -4
  923. package/dist/util/request-scope.js +19 -6
  924. package/dist/util/same-text.d.ts +10 -3
  925. package/dist/util/same-text.js +10 -3
  926. package/dist/util/secret-detect.d.ts +24 -7
  927. package/dist/util/secret-detect.js +49 -14
  928. package/dist/util/spawn-argv.d.ts +11 -0
  929. package/dist/util/spawn-argv.js +66 -0
  930. package/dist/util/sql.d.ts +3 -0
  931. package/dist/util/sql.js +6 -0
  932. package/dist/util/sqlite-blocked.d.ts +15 -4
  933. package/dist/util/sqlite-blocked.js +19 -6
  934. package/dist/util/stored-json.d.ts +4 -1
  935. package/dist/util/stored-json.js +6 -2
  936. package/dist/util/stream-tee.d.ts +2 -1
  937. package/dist/util/stream-tee.js +8 -5
  938. package/dist/util/transcript-tail.d.ts +4 -1
  939. package/dist/util/transcript-tail.js +4 -1
  940. package/dist/util/vector-codec.d.ts +4 -0
  941. package/dist/util/vector-codec.js +15 -0
  942. package/dist/util/version.d.ts +8 -3
  943. package/dist/util/version.js +8 -3
  944. package/dist/util/write-budget.d.ts +7 -2
  945. package/dist/util/write-budget.js +5 -2
  946. package/dist/util/yaml.d.ts +4 -1
  947. package/dist/util/yaml.js +4 -1
  948. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  949. package/extensions/openclaw-plugin/package.json +1 -1
  950. package/openclaw.plugin.json +1 -1
  951. package/package.json +4 -1
  952. package/scripts/postinstall.cjs +3 -1
  953. package/dist/api/audit.js +0 -56
  954. package/dist/api/cards.d.ts +0 -42
  955. package/dist/api/conflicts.d.ts +0 -28
  956. package/dist/api/conflicts.js +0 -61
  957. package/dist/api/dormant.d.ts +0 -14
  958. package/dist/api/dormant.js +0 -58
  959. package/dist/api/goals.d.ts +0 -18
  960. package/dist/api/graph.d.ts +0 -8
  961. package/dist/api/graph.js +0 -7
  962. package/dist/api/learn.js +0 -124
  963. package/dist/api/memories.d.ts +0 -23
  964. package/dist/api/memories.js +0 -46
  965. package/dist/api/objects.d.ts +0 -9
  966. package/dist/api/on-store.d.ts +0 -16
  967. package/dist/api/on-store.js +0 -38
  968. package/dist/api/outcome.d.ts +0 -19
  969. package/dist/api/outcome.js +0 -21
  970. package/dist/api/predictions.d.ts +0 -11
  971. package/dist/api/promote.d.ts +0 -36
  972. package/dist/api/promote.js +0 -65
  973. package/dist/api/recall-core.d.ts +0 -4
  974. package/dist/api/recall-core.js +0 -120
  975. package/dist/api/recall-finish.d.ts +0 -53
  976. package/dist/api/recall-finish.js +0 -30
  977. package/dist/api/recall-history.d.ts +0 -64
  978. package/dist/api/recall-history.js +0 -159
  979. package/dist/api/recall-record.d.ts +0 -43
  980. package/dist/api/recall-record.js +0 -78
  981. package/dist/api/recall-request.js +0 -121
  982. package/dist/api/recall.d.ts +0 -6
  983. package/dist/api/refine.d.ts +0 -7
  984. package/dist/api/refine.js +0 -10
  985. package/dist/api/session-owners.d.ts +0 -4
  986. package/dist/api/session-owners.js +0 -17
  987. package/dist/api/sleep-run.d.ts +0 -26
  988. package/dist/api/sleep.js +0 -10
  989. package/dist/cli/lenient-id.d.ts +0 -2
  990. package/dist/cli/lenient-id.js +0 -13
  991. package/dist/graph/write.d.ts +0 -14
  992. package/dist/store/sqlite/busy.d.ts +0 -3
  993. package/dist/store/sqlite/busy.js +0 -8
  994. package/dist/store/sqlite/local.d.ts +0 -21
  995. package/dist/store/sqlite/local.js +0 -39
@@ -7,8 +7,12 @@ import { isJsonObject, isJsonString } from '../util/json.js';
7
7
  import { errorMessage } from '../util/log.js';
8
8
  const DEFAULT_LLM_RERANK_TOP_K = 20;
9
9
  const DEFAULT_TIMEOUT_MS = 30_000;
10
- /** Track 3 reranker (skeleton): listwise LLM rerank on a customer-supplied OpenAI-compatible endpoint, gated on HIPPO_LLM_RERANKER_URL against accidental cost.
11
- * Timeout is 30s for the whole call, retries included (HIPPO_LLM_RERANKER_TIMEOUT_MS); any failure falls back to identity ordering, so recall never hangs. */
10
+ /**
11
+ * Track 3 reranker (skeleton): listwise LLM rerank on a customer-supplied OpenAI-compatible endpoint, gated on
12
+ * HIPPO_LLM_RERANKER_URL against accidental cost.
13
+ * Timeout is 30s for the whole call, retries included (HIPPO_LLM_RERANKER_TIMEOUT_MS); any failure falls back to
14
+ * identity ordering, so recall never hangs.
15
+ */
12
16
  export function createLlmReranker() {
13
17
  const outage = createOutageWarning('llm', 'keeping the input order');
14
18
  return async (query, results, options) => {
@@ -47,7 +51,8 @@ function replyText(body) {
47
51
  async function requestPermutation(url, query, head) {
48
52
  const key = envLlmRerankerKey();
49
53
  const prompt = [
50
- `Rerank the candidates below by relevance to the query. Output a JSON array of indices (zero-indexed) in best-first order.`,
54
+ `Rerank the candidates below by relevance to the query. Output a JSON array of indices (zero-indexed) in ` +
55
+ `best-first order.`,
51
56
  `Query: ${redactSecretsStrict(query)}`,
52
57
  ...head.map((r, i) => `[${i}] ${redactSecretsStrict(r.entry.content)}`),
53
58
  `Output format: [<int>, <int>, ...] with all ${head.length} indices.`,
@@ -1,4 +1,6 @@
1
1
  export declare const RERANKER_MAX_REPLY_BYTES: number;
2
- /** POST a scoring request. A dropped connection, 429 or 5xx is retried, since scoring changes nothing on the far side. */
2
+ /**
3
+ * POST a scoring request. A dropped connection, 429 or 5xx is retried, since scoring changes nothing on the far side.
4
+ */
3
5
  export declare function rerankerPost(url: string, init: RequestInit, budgetMs: number): Promise<Response>;
4
6
  //# sourceMappingURL=remote.d.ts.map
@@ -2,9 +2,12 @@
2
2
  import { fetchWithRetry } from '../util/http-retry.js';
3
3
  // A Retry-After longer than this would outlast most budgets, so the answer is handed back and the reranker falls back.
4
4
  const RETRY_WAIT_CAP_MS = 2_000;
5
- // Every reranker reads its reply through this cap; the largest honest reply is a few KB, and 1 MiB leaves room for a verbose envelope.
5
+ // Every reranker reads its reply through this cap; the largest honest reply is a few KB, and 1 MiB leaves room for a
6
+ // verbose envelope.
6
7
  export const RERANKER_MAX_REPLY_BYTES = 1024 * 1024;
7
- /** POST a scoring request. A dropped connection, 429 or 5xx is retried, since scoring changes nothing on the far side. */
8
+ /**
9
+ * POST a scoring request. A dropped connection, 429 or 5xx is retried, since scoring changes nothing on the far side.
10
+ */
8
11
  export async function rerankerPost(url, init, budgetMs) {
9
12
  // The budget bounds the whole call, retries included, so recall never waits past the configured timeout.
10
13
  const budget = AbortSignal.timeout(budgetMs);
@@ -1,6 +1,10 @@
1
1
  import type { SearchResult } from '../core/search-types.js';
2
- /** Reorders hybridSearch's candidates AFTER MMR de-duplication and BEFORE token-budget filtering, so it sees the full diverse pool.
3
- * MUST be deterministic for a given (query, results) unless documented stochastic (LLM track, hosted jev): paired A/B and the validity gate need it. */
2
+ /**
3
+ * Reorders hybridSearch's candidates AFTER MMR de-duplication and BEFORE token-budget filtering, so it sees the full
4
+ * diverse pool.
5
+ * MUST be deterministic for a given (query, results) unless documented stochastic (LLM track, hosted jev): paired A/B
6
+ * and the validity gate need it.
7
+ */
4
8
  export type RerankerFn = (query: string, results: SearchResult[], options?: RerankerOptions) => Promise<RerankResult[]>;
5
9
  /** JSON-serializable value. Per-track reranker config is opaque to the seam
6
10
  * but must still be a concrete, serializable shape rather than `unknown`. */
@@ -9,6 +9,8 @@ export interface SearchOptions {
9
9
  includeSuperseded?: boolean;
10
10
  asOf?: string;
11
11
  }
12
- /** Synchronous BM25 search: relevance * strength * recency and the rank boosts, without embeddings or the outcome nudge. */
12
+ /**
13
+ * Synchronous BM25 search: relevance * strength * recency and the rank boosts, without embeddings or the outcome nudge.
14
+ */
13
15
  export declare function search(query: string, entries: MemoryEntry[], options?: SearchOptions): SearchResult[];
14
16
  //# sourceMappingURL=bm25-search.d.ts.map
@@ -10,7 +10,20 @@ import { applyRankBoosts, strengthRecencyMultipliers, NO_SUMMARY_SCORING } from
10
10
  import { temporalContext } from './temporal.js';
11
11
  import { dedupeExtracted, fitBudget, withDagChildren } from './finalize.js';
12
12
  import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
13
- /** Synchronous BM25 search: relevance * strength * recency and the rank boosts, without embeddings or the outcome nudge. */
13
+ // Keyed on the caller's array so multihop's two passes share one build;
14
+ // the pool identity check keeps a mutated array honest.
15
+ const corpusCache = new WeakMap();
16
+ function corpusFor(entries, pool) {
17
+ const hit = corpusCache.get(entries);
18
+ if (hit && hit.pool.length === pool.length && hit.pool.every((e, i) => e === pool[i]))
19
+ return hit.corpus;
20
+ const corpus = buildCorpus(pool.map(entryText));
21
+ corpusCache.set(entries, { pool: pool.slice(), corpus });
22
+ return corpus;
23
+ }
24
+ /**
25
+ * Synchronous BM25 search: relevance * strength * recency and the rank boosts, without embeddings or the outcome nudge.
26
+ */
14
27
  export function search(query, entries, options = {}) {
15
28
  const now = options.now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
16
29
  const pool = currentEntries(entries, options);
@@ -19,7 +32,7 @@ export function search(query, entries, options = {}) {
19
32
  const queryTerms = tokenize(query);
20
33
  if (queryTerms.length === 0)
21
34
  return [];
22
- const corpus = buildCorpus(pool.map(entryText));
35
+ const corpus = corpusFor(entries, pool);
23
36
  const ctx = {
24
37
  now,
25
38
  pathTags: extractPathTags(process.cwd()),
@@ -1,5 +1,5 @@
1
1
  import { envSummaryDeboost } from '../util/env.js';
2
- import { calculateStrength, CHURN_STALE_TAG } from '../core/memory.js';
2
+ import { calculateStrength, CHURN_STALE_TAG, DAG_LEVEL } from '../core/memory.js';
3
3
  import { isOutcomeFastAblated, isRecencyAblated, evalRecencyScaleDays } from '../core/ablation.js';
4
4
  import { pathBoostMultiplier } from './path-context.js';
5
5
  import { scopeMatch } from '../core/active-scope.js';
@@ -15,7 +15,8 @@ const EXTRACTION_TAG_BOOST = 1.3;
15
15
  const OUTCOME_NUDGE_SLOPE = 0.15;
16
16
  const OUTCOME_NUDGE_MIN = 0.85;
17
17
  const OUTCOME_NUDGE_MAX = 1.15;
18
- // Strength and recency enter the rank as floor + span * signal, so a weak or old memory keeps most of its lexical score.
18
+ // Strength and recency enter the rank as floor + span * signal, so a weak or old memory keeps most of its lexical
19
+ // score.
19
20
  export const STRENGTH_RANK_FLOOR = 0.5;
20
21
  export const STRENGTH_RANK_SPAN = 0.5;
21
22
  const RECENCY_RANK_FLOOR = 0.8;
@@ -44,7 +45,7 @@ export function outcomeMultiplier(entry) {
44
45
  }
45
46
  /** A DAG summary is a topic summary (level 2) or an entity profile (level 3); both take the same deboost. */
46
47
  export function isDagSummary(entry) {
47
- return entry.dag_level === 2 || entry.dag_level === 3;
48
+ return entry.dag_level === DAG_LEVEL.topic || entry.dag_level === DAG_LEVEL.entity;
48
49
  }
49
50
  /** Summary deboost: per-call, then HIPPO_SUMMARY_DEBOOST, then 0.85; values outside (0, 1] fall through. */
50
51
  export function resolveSummaryDeboost(perCall) {
@@ -1,9 +1,17 @@
1
1
  import type { MemoryEntry } from '../core/memory.js';
2
2
  import { type EmbeddingProvider } from '../embeddings/provider.js';
3
3
  import { type HippoStore } from '../store/port.js';
4
- /** Embed a single memory entry and cache the result in the embedding index; with `store`, through its vectorWrites, never opening hippo.db. */
5
- export declare function embedMemory(hippoRoot: string, entry: MemoryEntry, model?: string, store?: HippoStore): Promise<void>;
6
- /** Embeds every entry with no cached vector, prunes vectors of deleted memories, and returns how many it embedded; `provider` defaults to the
7
- * configured one. With `store`, every tenant's memories with no vector for the provider's model go through its `vectorWrites`, never hippo.db. */
4
+ /** `off` is a provider that is disabled or not installed, which is a choice; `failed` is a memory that stays out of
5
+ * the vector index. */
6
+ export type EmbedOutcome = 'indexed' | 'off' | 'failed';
7
+ /** Embed a single memory entry and cache the result in the embedding index; with `store`, through its vectorWrites,
8
+ * never opening hippo.db.
9
+ * Resolves whatever fails, so a caller that fires and forgets stays safe; the outcome says whether the memory
10
+ * reached the index. */
11
+ export declare function embedMemory(hippoRoot: string, entry: MemoryEntry, model?: string, store?: HippoStore): Promise<EmbedOutcome>;
12
+ /** Embeds every entry with no cached vector, prunes vectors of deleted memories, and returns how many it embedded;
13
+ * `provider` defaults to the
14
+ * configured one. With `store`, every tenant's memories with no vector for the provider's model go through its
15
+ * `vectorWrites`, never hippo.db. */
8
16
  export declare function embedAll(hippoRoot: string, model?: string, provider?: EmbeddingProvider, store?: HippoStore): Promise<number>;
9
17
  //# sourceMappingURL=embed-memories.d.ts.map
@@ -4,16 +4,17 @@ import * as fs from 'fs';
4
4
  import * as path from 'path';
5
5
  import { randomUUID } from 'crypto';
6
6
  import { loadConfig } from '../core/config.js';
7
- import { initializeParticle } from '../db/physics-state.js';
7
+ import { initializeParticle } from '../core/physics.js';
8
8
  import { resolveEmbeddingProvider } from '../embeddings/provider.js';
9
9
  import { embeddingIndexIdentity, embeddingInputText, embeddingModelRequiresReindex, indexNeedsRebuild, saveStoredEmbeddingModel, } from '../store/embeddings/index.js';
10
- import { loadAllEntryIds, loadEntriesByIds } from '../store/entry-reads.js';
10
+ import { countAllEntries, loadAllEntryIds, loadEntriesByIds } from '../store/entry-reads.js';
11
11
  import { requireGroup, } from '../store/port.js';
12
- import { indexedModel, pruneStoredVectors, replacesIndex, resetStoredParticles, saveEmbeddingIndex, saveStoredVectors, seedStoredParticle, } from '../store/vector-index.js';
12
+ import { indexedModel, pruneStoredVectorsListPending, replacesIndex, resetStoredParticles, saveEmbeddingIndex, saveStoredVectors, seedStoredParticle, } from '../store/vector-index.js';
13
13
  import { chunked } from '../util/chunked.js';
14
14
  import { envByName } from '../util/env.js';
15
- import { errorCode, errorMessage, log } from '../util/log.js';
15
+ import { errorCode, errorMessage, log, errorFields } from '../util/log.js';
16
16
  import { redactSecretsStrict } from '../util/secret-detect.js';
17
+ import { MINUTE_MS } from '../util/time.js';
17
18
  const STORE_PAGE = 64;
18
19
  /** The rows for `ids`, a page at a time and in that order; an id deleted since it was listed is skipped. */
19
20
  function* entryPages(hippoRoot, ids) {
@@ -48,7 +49,7 @@ function resetPhysicsFromIndex(hippoRoot, ids, index) {
48
49
  }
49
50
  catch (err) {
50
51
  // Best effort: retrieval still falls back without physics state.
51
- log.warn(`physics reset after reindex failed: ${errorMessage(err)}`);
52
+ log.warn(`physics reset after reindex failed: ${errorMessage(err)}`, errorFields(err));
52
53
  }
53
54
  }
54
55
  /** A provider's `[]` row is a swallowed per-item failure; name the memory so the gap can be traced. */
@@ -112,7 +113,8 @@ async function acquireEmbedFileLock(hippoRoot) {
112
113
  if (!(err instanceof Error && 'code' in err && err.code === 'EEXIST'))
113
114
  throw err;
114
115
  }
115
- // SHORTCUT: two waiters can both break one dead holder's lock; a vector lost that way is backfilled by the next `hippo embed`.
116
+ // SHORTCUT: two waiters can both break one dead holder's lock; a vector lost that way is backfilled by the next
117
+ // `hippo embed`.
116
118
  if (!embedLockHolderAlive(lockPath)) {
117
119
  fs.rmSync(lockPath, { force: true });
118
120
  continue;
@@ -133,7 +135,8 @@ async function withEmbedLock(hippoRoot, fn) {
133
135
  }
134
136
  });
135
137
  }
136
- // A store keeps each write whole in its own transaction, and a lock file in hippoRoot would not reach a worker on another host.
138
+ // A store keeps each write whole in its own transaction, and a
139
+ // lock file in hippoRoot would not reach a worker on another host.
137
140
  async function withProcessEmbedLock(fn) {
138
141
  let resolve;
139
142
  const next = new Promise(r => { resolve = r; });
@@ -147,9 +150,10 @@ async function withProcessEmbedLock(fn) {
147
150
  resolve();
148
151
  }
149
152
  }
150
- // A bad key fails every write; one full warning per distinct failure tells the user, and a count of the repeats follows at most once per interval.
153
+ // A bad key fails every write; one full warning per distinct failure tells the user, and a count of the repeats follows
154
+ // at most once per interval.
151
155
  const EMBED_WARN_KEY_CAP = 64;
152
- const EMBED_SUPPRESSED_SUMMARY_INTERVAL_MS = 60_000;
156
+ const EMBED_SUPPRESSED_SUMMARY_INTERVAL_MS = MINUTE_MS;
153
157
  const embedFailureSeen = new Map();
154
158
  function embedFailureKey(source, cause) {
155
159
  const kind = errorCode(cause) || (cause instanceof Error ? cause.constructor.name : 'NonError');
@@ -162,7 +166,8 @@ function warnEmbedFailureOnce(source, rawMessage, cause) {
162
166
  if (seen) {
163
167
  seen.suppressed += 1;
164
168
  if (now - seen.lastNoticeAt >= EMBED_SUPPRESSED_SUMMARY_INTERVAL_MS) {
165
- log.warn(`${seen.suppressed} more embedding errors from ${source} since the last notice; memories are still stored without embeddings.`);
169
+ log.warn(`${seen.suppressed} more embedding errors from ${source} since ` +
170
+ `the last notice; memories are still stored without embeddings.`);
166
171
  seen.suppressed = 0;
167
172
  seen.lastNoticeAt = now;
168
173
  }
@@ -183,15 +188,18 @@ function warnEmbedFailureOnce(source, rawMessage, cause) {
183
188
  function vectorGroups(store) {
184
189
  return [requireGroup(store, 'vectors'), requireGroup(store, 'vectorWrites')];
185
190
  }
186
- /** Writes one page's vectors, one writeVectors per tenant, and stops at the first refused write; `withParticles` seeds each memory's particle. */
191
+ /** Writes one page's vectors, one writeVectors per tenant, and stops at the first refused write; `withParticles`
192
+ * seeds each memory's particle. */
187
193
  async function writeVectorPage(writes, write, page, vectors, withParticles) {
188
194
  const byTenant = new Map();
189
195
  page.forEach((entry, i) => {
190
196
  const vector = vectors[i];
191
197
  if (!vector || vector.length === 0)
192
198
  return noteSkippedEmbedding(entry.id);
193
- const row = withParticles ? { memoryId: entry.id, vector, particle: initializeParticle(entry, vector) } : { memoryId: entry.id, vector };
194
- byTenant.set(entry.tenantId, [...(byTenant.get(entry.tenantId) ?? []), row]);
199
+ const row = withParticles
200
+ ? { memoryId: entry.id, vector, particle: initializeParticle(entry, vector) }
201
+ : { memoryId: entry.id, vector };
202
+ byTenant.set(entry.tenant_id, [...(byTenant.get(entry.tenant_id) ?? []), row]);
195
203
  });
196
204
  let written = 0;
197
205
  for (const [tenantId, rows] of byTenant) {
@@ -203,7 +211,8 @@ async function writeVectorPage(writes, write, page, vectors, withParticles) {
203
211
  return { written, modelMismatch: false };
204
212
  }
205
213
  const OTHER_MODEL_INDEX = "the vector index was built by another embedding model; run 'hippo embed' to rebuild it";
206
- /** Embeds every memory with no vector under `model`, page by page, so a provider failure keeps the pages written; a rebuild reseeds the particles it drops. */
214
+ /** Embeds every memory with no vector under `model`, page by page, so a provider failure keeps the pages written; a
215
+ * rebuild reseeds the particles it drops. */
207
216
  async function backfillInStore(writes, provider, model, rebuild) {
208
217
  let count = 0;
209
218
  let afterId;
@@ -214,7 +223,8 @@ async function backfillInStore(writes, provider, model, rebuild) {
214
223
  afterId = page[page.length - 1].id;
215
224
  const vectors = await provider.embed(page.map((e) => embeddingInputText(e)), 'passage');
216
225
  const result = await writeVectorPage(writes, { model, replaceIndex: rebuild }, page, vectors, rebuild);
217
- // Another process rebuilt the index mid-run; every later page would be refused too, after paying the provider for it.
226
+ // Another process rebuilt the index mid-run; every later page
227
+ // would be refused too, after paying the provider for it.
218
228
  if (result.modelMismatch)
219
229
  throw new Error(OTHER_MODEL_INDEX);
220
230
  count += result.written;
@@ -226,8 +236,10 @@ async function embedAllInStore(store, provider) {
226
236
  const rebuild = indexNeedsRebuild(indexedModel(await reads.embeddingIndexState()), provider.id);
227
237
  return backfillInStore(writes, provider, embeddingIndexIdentity(provider.id), rebuild);
228
238
  }
229
- /** embedMemory on a store; like the hippo.db path it resolves whatever fails. Unlike it, it leaves a model change to embedAll, so a stale
230
- * read here never drops another process's rebuild; the read only saves a paid embed call, as the write refuses another model itself. */
239
+ /** embedMemory on a store; like the hippo.db path it resolves whatever fails. Unlike it, it leaves a model change to
240
+ * embedAll, so a stale
241
+ * read here never drops another process's rebuild; the read only saves a paid embed call, as the write refuses
242
+ * another model itself. */
231
243
  function embedMemoryInStore(store, provider, entry) {
232
244
  return withProcessEmbedLock(async () => {
233
245
  const [reads, writes] = vectorGroups(store);
@@ -237,60 +249,81 @@ function embedMemoryInStore(store, provider, entry) {
237
249
  || (await writeVectorPage(writes, { model, replaceIndex: false }, [entry], await provider.embed([embeddingInputText(entry)], 'passage'), true)).modelMismatch;
238
250
  if (refused)
239
251
  warnEmbedFailureOnce('index', OTHER_MODEL_INDEX);
252
+ return refused ? 'failed' : 'indexed';
240
253
  }
241
254
  catch (err) {
242
255
  warnEmbedFailureOnce(provider.kind, errorMessage(err), err);
256
+ return 'failed';
243
257
  }
244
258
  }).catch((err) => {
245
- log.warn(`skipped embedding ${entry.id} (${errorMessage(err)})`);
259
+ log.warn(`skipped embedding ${entry.id} (${errorMessage(err)})`, errorFields(err));
260
+ return 'failed';
246
261
  });
247
262
  }
248
- /** Embed a single memory entry and cache the result in the embedding index; with `store`, through its vectorWrites, never opening hippo.db. */
263
+ const INLINE_REINDEX_MAX_ROWS = 256;
264
+ /** Embed a single memory entry and cache the result in the embedding index; with `store`, through its vectorWrites,
265
+ * never opening hippo.db.
266
+ * Resolves whatever fails, so a caller that fires and forgets stays safe; the outcome says whether the memory
267
+ * reached the index. */
249
268
  export async function embedMemory(hippoRoot, entry, model, store) {
250
269
  let provider;
270
+ let available;
251
271
  try {
252
272
  provider = resolveEmbeddingProvider(hippoRoot, { model });
273
+ available = provider.isAvailable();
253
274
  }
254
275
  catch (err) {
255
276
  // Callers fire and forget, so this must resolve: a bad config warns once instead of rejecting.
256
277
  warnEmbedFailureOnce('config', errorMessage(err), err);
257
- return;
278
+ return 'failed';
258
279
  }
259
- if (!provider.isAvailable())
260
- return;
280
+ if (!available)
281
+ return 'off';
261
282
  if (store)
262
283
  return embedMemoryInStore(store, provider, entry);
263
- return withEmbedLock(hippoRoot, async () => {
264
- // Best-effort: an embedding failure (API down, bad key, 5xx) must not reject the caller's write; the existing index is left as-is.
265
- // Failures surface on the explicit `hippo embed` / `embedAll` path.
266
- try {
267
- const identity = provider.id;
268
- if (embeddingModelRequiresReindex(hippoRoot, identity)) {
269
- await rebuildIndexForProvider(hippoRoot, provider);
270
- return;
284
+ return withEmbedLock(hippoRoot, () => embedMemoryLocked(hippoRoot, provider, entry)).catch((err) => {
285
+ log.warn(`skipped embedding ${entry.id} (${errorMessage(err)}); run 'hippo embed' to backfill`, errorFields(err));
286
+ return 'failed';
287
+ });
288
+ }
289
+ /** Best-effort: an embedding failure (API down, bad key, 5xx) must not reject the caller's write; the existing index is
290
+ * left as-is.
291
+ * Failures surface on the explicit `hippo embed` / `embedAll` path. */
292
+ async function embedMemoryLocked(hippoRoot, provider, entry) {
293
+ try {
294
+ const identity = provider.id;
295
+ if (embeddingModelRequiresReindex(hippoRoot, identity)) {
296
+ // A fire-and-forget write heals a small index inline; a large one is left to `hippo embed`, so no write holds the
297
+ // lock for a whole-store embed.
298
+ if (countAllEntries(hippoRoot) > INLINE_REINDEX_MAX_ROWS) {
299
+ warnEmbedFailureOnce('index', OTHER_MODEL_INDEX);
300
+ return 'failed';
271
301
  }
272
- const text = embeddingInputText(entry);
273
- const [vector] = await provider.embed([text], 'passage');
274
- if (!vector || vector.length === 0)
275
- return;
276
- saveStoredVectors(hippoRoot, [[entry.id, vector]], embeddingIndexIdentity(identity));
277
- saveStoredEmbeddingModel(hippoRoot, identity);
278
- // Initialize physics state for this memory
279
- initializePhysicsIfMissing(hippoRoot, entry, vector);
302
+ await rebuildIndexForProvider(hippoRoot, provider);
303
+ return 'indexed';
280
304
  }
281
- catch (err) {
282
- // Provider failure (API down / bad key). Best-effort: leave the index as-is, but say so once.
283
- warnEmbedFailureOnce(provider.kind, errorMessage(err), err);
284
- }
285
- }).catch((err) => {
286
- log.warn(`skipped embedding ${entry.id} (${errorMessage(err)}); run 'hippo embed' to backfill`);
287
- });
305
+ const [vector] = await provider.embed([embeddingInputText(entry)], 'passage');
306
+ if (!vector || vector.length === 0)
307
+ return 'failed';
308
+ saveStoredVectors(hippoRoot, [[entry.id, vector]], embeddingIndexIdentity(identity));
309
+ saveStoredEmbeddingModel(hippoRoot, identity);
310
+ initializePhysicsIfMissing(hippoRoot, entry, vector);
311
+ return 'indexed';
312
+ }
313
+ catch (err) {
314
+ // Provider failure (API down / bad key). Best-effort: leave the index as-is, but say so once.
315
+ warnEmbedFailureOnce(provider.kind, errorMessage(err), err);
316
+ return 'failed';
317
+ }
288
318
  }
289
- // Every page is embedded before one transaction replaces the index, and the identity is saved only after that: a provider failure or a crash
290
- // at any earlier point leaves the old identity, so embeddingModelRequiresReindex has the next run rebuild from the start.
319
+ // Every page is embedded before one transaction replaces the index, and
320
+ // the identity is saved only after that: a provider failure or a crash
321
+ // at any earlier point leaves the old identity, so
322
+ // embeddingModelRequiresReindex has the next run rebuild from the start.
291
323
  async function rebuildIndexForProvider(hippoRoot, provider) {
292
324
  const identity = provider.id;
293
- // Host-wide rebuild: one embedding index per hippoRoot, keyed by tenant-scoped entry.id; per-tenant indices would be a larger architecture change.
325
+ // Host-wide rebuild: one embedding index per hippoRoot, keyed by tenant-scoped entry.id; per-tenant indices would be
326
+ // a larger architecture change.
294
327
  const ids = loadAllEntryIds(hippoRoot);
295
328
  const rebuiltIndex = await rebuildEmbeddingIndex(hippoRoot, ids, provider);
296
329
  saveEmbeddingIndex(hippoRoot, rebuiltIndex, embeddingIndexIdentity(identity));
@@ -304,12 +337,13 @@ function initializePhysicsIfMissing(hippoRoot, entry, vector) {
304
337
  }
305
338
  catch (err) {
306
339
  // Physics init is best-effort and must not fail the embedding that just landed.
307
- log.debug(`physics state not initialised for ${entry.id}: ${errorMessage(err)}`);
340
+ log.warnThenDebug('physics-state-seed', `physics state not initialised for ${entry.id}: ${errorMessage(err)}`, errorFields(err));
308
341
  }
309
342
  }
310
343
  /** Throws when an unavailable provider is a misconfiguration rather than an intentional no-op. */
311
344
  function throwIfProviderKeyMissing(hippoRoot, provider) {
312
- // A configured API provider with a missing key is a misconfiguration: surface it so callers of the exported embedAll() learn nothing was written.
345
+ // A configured API provider with a missing key is a misconfiguration: surface it so callers of the exported
346
+ // embedAll() learn nothing was written.
313
347
  // Local-not-installed and an explicit enabled=false stay silent no-ops.
314
348
  const cfg = loadConfig(hippoRoot).embeddings;
315
349
  if (provider.kind !== 'local' &&
@@ -319,8 +353,10 @@ function throwIfProviderKeyMissing(hippoRoot, provider) {
319
353
  throw new Error(`Embedding provider '${provider.kind}' is configured but ${provider.keyEnv} is not set.`);
320
354
  }
321
355
  }
322
- // Embeds entries without a cached vector in save-checkpointed chunks; a `[]` row means that item could not be embedded and is retried next run.
323
- // On a hard provider failure mid-backfill the chunks already embedded are persisted (paid progress), then it stops and resumes next run.
356
+ // Embeds entries without a cached vector in save-checkpointed chunks; a `[]` row means that item could not be embedded
357
+ // and is retried next run.
358
+ // On a hard provider failure mid-backfill the chunks already embedded are persisted (paid progress), then it stops and
359
+ // resumes next run.
324
360
  async function backfillPending(hippoRoot, provider, pending, model) {
325
361
  let count = 0;
326
362
  // Initialized to `undefined` so it stays a plain `unknown` binding for the arbitrary caught value; falsy either way.
@@ -348,8 +384,10 @@ async function backfillPending(hippoRoot, provider, pending, model) {
348
384
  }
349
385
  return { count, backfillError };
350
386
  }
351
- /** Embeds every entry with no cached vector, prunes vectors of deleted memories, and returns how many it embedded; `provider` defaults to the
352
- * configured one. With `store`, every tenant's memories with no vector for the provider's model go through its `vectorWrites`, never hippo.db. */
387
+ /** Embeds every entry with no cached vector, prunes vectors of deleted memories, and returns how many it embedded;
388
+ * `provider` defaults to the
389
+ * configured one. With `store`, every tenant's memories with no vector for the provider's model go through its
390
+ * `vectorWrites`, never hippo.db. */
353
391
  export async function embedAll(hippoRoot, model, provider = resolveEmbeddingProvider(hippoRoot, { model }), store) {
354
392
  if (!provider.isAvailable()) {
355
393
  throwIfProviderKeyMissing(hippoRoot, provider);
@@ -361,10 +399,10 @@ export async function embedAll(hippoRoot, model, provider = resolveEmbeddingProv
361
399
  const identity = provider.id;
362
400
  if (embeddingModelRequiresReindex(hippoRoot, identity))
363
401
  return rebuildIndexForProvider(hippoRoot, provider);
364
- // Host-wide by design: embedAll backfills all tenants' entries into the per-host index; per-tenant filtering would produce partial indices and break
365
- // recall.
366
- const embedded = pruneStoredVectors(hippoRoot);
367
- const pending = loadAllEntryIds(hippoRoot).filter((id) => !embedded.has(id));
402
+ // Host-wide by design: embedAll backfills all tenants'
403
+ // entries into the per-host index; per-tenant filtering
404
+ // would produce partial indices and break recall.
405
+ const pending = pruneStoredVectorsListPending(hippoRoot);
368
406
  const { count, backfillError } = await backfillPending(hippoRoot, provider, pending, embeddingIndexIdentity(identity));
369
407
  saveStoredEmbeddingModel(hippoRoot, identity);
370
408
  // Partial progress is now persisted; surface a hard backfill failure so the
@@ -0,0 +1,11 @@
1
+ import type { MemoryEntry } from '../core/memory.js';
2
+ import type { PhysicsConfig } from '../core/physics-config.js';
3
+ import type { SearchResult } from '../core/search-types.js';
4
+ import { type HybridSearchOptions } from './hybrid.js';
5
+ import type { VectorSource } from './vector.js';
6
+ /**
7
+ * Physics scoring when `physics` holds its config, hybrid otherwise, both on the store `source` names; each caller
8
+ * keeps its own options.
9
+ */
10
+ export declare function searchByEngine(source: VectorSource, query: string, pool: MemoryEntry[], physics: PhysicsConfig | null, options: Omit<HybridSearchOptions, 'hippoRoot' | 'store'>): Promise<SearchResult[]>;
11
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1,14 @@
1
+ // The one search-engine choice every ranker over a candidate pool makes: recall's band, MCP's wide list, the CLI core
2
+ // and context.
3
+ import { hybridSearch } from './hybrid.js';
4
+ import { physicsSearchIn } from './physics-search.js';
5
+ /**
6
+ * Physics scoring when `physics` holds its config, hybrid otherwise, both on the store `source` names; each caller
7
+ * keeps its own options.
8
+ */
9
+ export function searchByEngine(source, query, pool, physics, options) {
10
+ return physics
11
+ ? physicsSearchIn(source, query, pool, { ...options, physicsConfig: physics })
12
+ : hybridSearch(query, pool, { ...options, hippoRoot: source.root, store: source.store });
13
+ }
14
+ //# sourceMappingURL=engine.js.map
@@ -6,7 +6,10 @@ export interface GoalStackBoostOpts {
6
6
  sessionId: string;
7
7
  tenantId: string;
8
8
  limit: number;
9
- /** Side-channel: one goal-boost `RerankStep` per boosted row, keyed by `entry.id` (a map because the helper re-spreads rows); only populated when passed. */
9
+ /**
10
+ * Side-channel: one goal-boost `RerankStep` per boosted row, keyed by `entry.id` (a map because the helper re-spreads
11
+ * rows); only populated when passed.
12
+ */
10
13
  trace?: Map<string, RerankStep>;
11
14
  }
12
15
  /** The boosted, re-sorted rows and the `goal_recall_log` rows they earn. */
@@ -14,8 +17,12 @@ export interface GoalStackBoost<R> {
14
17
  results: R[];
15
18
  log: GoalRecallLogRow[];
16
19
  }
17
- /** The goal-stack boost over goals already read, touching no store; a caller skips it under an explicit goal tag. Its log covers the top
18
- * `limit` rows and keeps those whose memory is global, since only the store can tell them apart; {@link localGoalRecallRows} drops those before the write. */
20
+ /**
21
+ * The goal-stack boost over goals already read, touching no store; a caller skips it under an explicit goal tag. Its
22
+ * log covers the top
23
+ * `limit` rows and keeps those whose memory is global, since only the store can tell them apart; {@link
24
+ * localGoalRecallRows} drops those before the write.
25
+ */
19
26
  export declare function boostByGoals<R extends {
20
27
  entry: MemoryEntry;
21
28
  score: number;
@@ -53,15 +53,20 @@ function buildGoalRecallLog(boosted, matchesByEntryId, goalsByTag, opts) {
53
53
  }
54
54
  return log;
55
55
  }
56
- /** The goal-stack boost over goals already read, touching no store; a caller skips it under an explicit goal tag. Its log covers the top
57
- * `limit` rows and keeps those whose memory is global, since only the store can tell them apart; {@link localGoalRecallRows} drops those before the write. */
56
+ /**
57
+ * The goal-stack boost over goals already read, touching no store; a caller skips it under an explicit goal tag. Its
58
+ * log covers the top
59
+ * `limit` rows and keeps those whose memory is global, since only the store can tell them apart; {@link
60
+ * localGoalRecallRows} drops those before the write.
61
+ */
58
62
  export function boostByGoals(results, active, opts) {
59
63
  const { trace } = opts;
60
64
  if (active.goals.length === 0)
61
65
  return { results, log: [] };
62
66
  const goalsByTag = new Map(active.goals.map((g) => [g.goalName, g]));
63
67
  const policiesByGoalId = active.policies;
64
- // Goal-tag matches per boosted row, keyed by entry id; a side table (not a spread-on marker property) so `boosted` stays exactly R[] with no cast-then-strip.
68
+ // Goal-tag matches per boosted row, keyed by entry id; a side table (not a spread-on marker property) so `boosted`
69
+ // stays exactly R[] with no cast-then-strip.
65
70
  const matchesByEntryId = new Map();
66
71
  const boosted = results
67
72
  .map((r) => {
@@ -82,11 +87,13 @@ export function boostByGoals(results, active, opts) {
82
87
  });
83
88
  }
84
89
  matchesByEntryId.set(r.entry.id, matches);
85
- // SAFETY: spreading a generic-constrained `r: R` widens to the spread's plain object type; only `score` changes, so the value still satisfies R.
90
+ // SAFETY: spreading a generic-constrained `r: R` widens to the spread's plain object type; only `score` changes,
91
+ // so the value still satisfies R.
86
92
  return { ...r, score: r.score * multiplier };
87
93
  })
88
- // Deliberately a PLAIN stable score sort with no compareEntryIdentity tail: re-sorting an already deterministic ranking inherits its determinism via
89
- // stability, and ties keep the prior (meaningful) rank instead of reordering by content.
94
+ // Deliberately a PLAIN stable score sort with no compareEntryIdentity tail:
95
+ // re-sorting an already deterministic ranking inherits its determinism via stability,
96
+ // and ties keep the prior (meaningful) rank instead of reordering by content.
90
97
  .sort((a, b) => compareScoresDesc(a.score, b.score));
91
98
  return { results: boosted, log: buildGoalRecallLog(boosted, matchesByEntryId, goalsByTag, opts) };
92
99
  }
@@ -15,6 +15,9 @@ export interface HybridScoreInput {
15
15
  explain: boolean;
16
16
  boosts: BoostContext;
17
17
  }
18
- /** Scores every pool entry; rows with no lexical hit drop out unless vectors are in play, and non-positive scores always do. */
18
+ /**
19
+ * Scores every pool entry; rows with no lexical hit drop out unless vectors are in play, and non-positive scores always
20
+ * do.
21
+ */
19
22
  export declare function scoreHybridPool(input: HybridScoreInput): SearchResult[];
20
23
  //# sourceMappingURL=hybrid-score.d.ts.map
@@ -2,7 +2,10 @@ import { estimateTokens } from '../util/token-text.js';
2
2
  import { matchedQueryTerms } from './bm25.js';
3
3
  import { applyRankBoosts, strengthRecencyMultipliers } from './boosts.js';
4
4
  import { addDagFields, ageInDays } from './breakdown.js';
5
- /** Scores every pool entry; rows with no lexical hit drop out unless vectors are in play, and non-positive scores always do. */
5
+ /**
6
+ * Scores every pool entry; rows with no lexical hit drop out unless vectors are in play, and non-positive scores always
7
+ * do.
8
+ */
6
9
  export function scoreHybridPool(input) {
7
10
  const scored = [];
8
11
  const queryTermSet = new Set(input.queryTerms);