hippo-memory 1.70.0 → 1.72.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 (855) hide show
  1. package/README.md +2 -2
  2. package/dist/agent-memories/apply.d.ts +0 -11
  3. package/dist/agent-memories/apply.js +6 -21
  4. package/dist/agent-memories/claude-code.d.ts +4 -2
  5. package/dist/agent-memories/claude-code.js +15 -6
  6. package/dist/agent-memories/codex.js +1 -1
  7. package/dist/agent-memories/copilot.d.ts +1 -3
  8. package/dist/agent-memories/copilot.js +1 -17
  9. package/dist/agent-memories/files.js +23 -12
  10. package/dist/agent-memories/markdown.d.ts +1 -3
  11. package/dist/agent-memories/markdown.js +1 -3
  12. package/dist/agent-memories/project-folds.d.ts +10 -0
  13. package/dist/agent-memories/project-folds.js +34 -0
  14. package/dist/agent-memories/report.js +2 -1
  15. package/dist/agent-memories/sync.d.ts +4 -2
  16. package/dist/agent-memories/sync.js +18 -11
  17. package/dist/api/assemble.d.ts +7 -44
  18. package/dist/api/assemble.js +3 -23
  19. package/dist/api/audit.d.ts +33 -1
  20. package/dist/api/audit.js +48 -1
  21. package/dist/api/auth.d.ts +20 -26
  22. package/dist/api/auth.js +43 -29
  23. package/dist/api/auto-sleep.d.ts +5 -2
  24. package/dist/api/auto-sleep.js +9 -5
  25. package/dist/api/availability.d.ts +2 -15
  26. package/dist/api/availability.js +4 -18
  27. package/dist/api/cards.d.ts +42 -0
  28. package/dist/api/cards.js +52 -0
  29. package/dist/api/conflicts.d.ts +28 -0
  30. package/dist/api/conflicts.js +61 -0
  31. package/dist/api/context-render.js +4 -3
  32. package/dist/api/context-select.js +12 -15
  33. package/dist/api/context-types.d.ts +10 -35
  34. package/dist/api/context.d.ts +5 -22
  35. package/dist/api/context.js +38 -46
  36. package/dist/api/continuity.d.ts +47 -0
  37. package/dist/api/continuity.js +66 -0
  38. package/dist/{cli → api}/correction-latency.d.ts +2 -14
  39. package/dist/{cli → api}/correction-latency.js +2 -14
  40. package/dist/api/dormant.d.ts +5 -21
  41. package/dist/api/dormant.js +11 -28
  42. package/dist/api/drill-down.d.ts +7 -46
  43. package/dist/api/drill-down.js +6 -27
  44. package/dist/api/embeddings.d.ts +17 -0
  45. package/dist/api/embeddings.js +28 -0
  46. package/dist/api/error-reply.d.ts +8 -0
  47. package/dist/api/error-reply.js +21 -0
  48. package/dist/api/forget.d.ts +11 -26
  49. package/dist/api/forget.js +23 -35
  50. package/dist/api/goals.d.ts +1 -1
  51. package/dist/api/goals.js +5 -9
  52. package/dist/api/graph.d.ts +8 -0
  53. package/dist/api/graph.js +7 -0
  54. package/dist/api/index.d.ts +6 -2
  55. package/dist/api/index.js +6 -2
  56. package/dist/api/instruction-detect.js +21 -6
  57. package/dist/api/learn.d.ts +4 -0
  58. package/dist/api/learn.js +53 -27
  59. package/dist/api/ledger-db.d.ts +2 -5
  60. package/dist/api/ledger-db.js +5 -35
  61. package/dist/api/memories.d.ts +23 -0
  62. package/dist/api/memories.js +46 -0
  63. package/dist/api/objects.d.ts +9 -0
  64. package/dist/api/objects.js +11 -0
  65. package/dist/api/on-store.js +5 -3
  66. package/dist/api/outcome.js +1 -1
  67. package/dist/api/pilot-arm.d.ts +1 -11
  68. package/dist/api/pilot-arm.js +5 -45
  69. package/dist/api/predictions.d.ts +11 -0
  70. package/dist/api/predictions.js +24 -0
  71. package/dist/api/projects.d.ts +21 -0
  72. package/dist/api/projects.js +24 -0
  73. package/dist/api/promote.d.ts +13 -17
  74. package/dist/api/promote.js +12 -20
  75. package/dist/api/prompt-hook.d.ts +19 -6
  76. package/dist/api/prompt-hook.js +54 -13
  77. package/dist/api/provenance-coverage.d.ts +14 -0
  78. package/dist/{cli → api}/provenance-coverage.js +2 -6
  79. package/dist/api/recall-cli.d.ts +58 -0
  80. package/dist/api/recall-cli.js +103 -0
  81. package/dist/api/recall-core.js +17 -9
  82. package/dist/api/recall-finish.d.ts +53 -0
  83. package/dist/api/recall-finish.js +30 -0
  84. package/dist/api/recall-history.d.ts +17 -84
  85. package/dist/api/recall-history.js +15 -88
  86. package/dist/api/recall-pipeline.d.ts +2 -3
  87. package/dist/api/recall-pipeline.js +21 -15
  88. package/dist/api/recall-request.js +1 -1
  89. package/dist/api/recall-types.d.ts +64 -304
  90. package/dist/api/recall.d.ts +3 -34
  91. package/dist/api/recall.js +63 -89
  92. package/dist/api/refine.d.ts +7 -0
  93. package/dist/api/refine.js +10 -0
  94. package/dist/api/remember-local.d.ts +57 -0
  95. package/dist/api/remember-local.js +90 -0
  96. package/dist/api/remember.d.ts +20 -2
  97. package/dist/api/remember.js +16 -3
  98. package/dist/api/session-end.d.ts +22 -0
  99. package/dist/api/session-end.js +101 -0
  100. package/dist/api/sleep-run.d.ts +2 -4
  101. package/dist/api/sleep-run.js +28 -28
  102. package/dist/api/sleep.d.ts +9 -28
  103. package/dist/api/status.d.ts +24 -0
  104. package/dist/api/status.js +40 -0
  105. package/dist/api/store-init.d.ts +4 -0
  106. package/dist/api/store-init.js +9 -0
  107. package/dist/api/tokens.d.ts +3 -10
  108. package/dist/api/tokens.js +4 -11
  109. package/dist/api/types.d.ts +8 -29
  110. package/dist/api/types.js +10 -23
  111. package/dist/capture/caller-session.d.ts +0 -3
  112. package/dist/capture/caller-session.js +1 -12
  113. package/dist/capture/capture-error.d.ts +2 -2
  114. package/dist/capture/capture-error.js +23 -18
  115. package/dist/capture/codex-patch.js +3 -1
  116. package/dist/capture/command.d.ts +4 -12
  117. package/dist/capture/command.js +39 -114
  118. package/dist/capture/compact.d.ts +4 -15
  119. package/dist/capture/compact.js +26 -30
  120. package/dist/capture/compaction-items-caller.js +11 -20
  121. package/dist/capture/compaction-record.d.ts +7 -93
  122. package/dist/capture/compaction-record.js +34 -399
  123. package/dist/capture/compaction-spool.d.ts +5 -3
  124. package/dist/capture/compaction-spool.js +21 -7
  125. package/dist/capture/copilot-transcript.d.ts +2 -1
  126. package/dist/capture/copilot-transcript.js +2 -1
  127. package/dist/capture/extract.d.ts +5 -2
  128. package/dist/capture/extract.js +4 -3
  129. package/dist/capture/failure-caller.d.ts +1 -1
  130. package/dist/capture/failure-caller.js +21 -16
  131. package/dist/capture/failure-reading.d.ts +2 -1
  132. package/dist/capture/failure-reading.js +7 -9
  133. package/dist/capture/pre-compact-caller.js +5 -4
  134. package/dist/capture/session-digest.d.ts +1 -1
  135. package/dist/capture/session-digest.js +17 -10
  136. package/dist/capture/session-end-caller.js +2 -1
  137. package/dist/capture/session-worker.js +3 -4
  138. package/dist/capture/transcript.d.ts +4 -11
  139. package/dist/capture/transcript.js +10 -21
  140. package/dist/capture/working-state.d.ts +4 -2
  141. package/dist/capture/working-state.js +4 -2
  142. package/dist/cli/api-context.d.ts +3 -0
  143. package/dist/cli/api-context.js +6 -0
  144. package/dist/cli/audit-prune.d.ts +1 -59
  145. package/dist/cli/audit-prune.js +2 -61
  146. package/dist/cli/audit.d.ts +1 -1
  147. package/dist/cli/audit.js +42 -43
  148. package/dist/cli/auth.d.ts +2 -2
  149. package/dist/cli/auth.js +61 -44
  150. package/dist/cli/briefs.d.ts +1 -4
  151. package/dist/cli/briefs.js +42 -301
  152. package/dist/cli/card.d.ts +2 -2
  153. package/dist/cli/card.js +63 -56
  154. package/dist/cli/client.d.ts +12 -27
  155. package/dist/cli/client.js +41 -44
  156. package/dist/cli/compact-resume-payload.js +4 -3
  157. package/dist/cli/context.d.ts +2 -3
  158. package/dist/cli/context.js +22 -18
  159. package/dist/cli/continuity.d.ts +6 -6
  160. package/dist/cli/continuity.js +81 -86
  161. package/dist/cli/curate.d.ts +13 -17
  162. package/dist/cli/curate.js +88 -116
  163. package/dist/cli/dag.d.ts +4 -4
  164. package/dist/cli/dag.js +55 -34
  165. package/dist/cli/decisions.d.ts +2 -4
  166. package/dist/cli/decisions.js +18 -309
  167. package/dist/cli/eval.d.ts +1 -1
  168. package/dist/cli/eval.js +27 -26
  169. package/dist/cli/exit.d.ts +6 -0
  170. package/dist/cli/exit.js +11 -0
  171. package/dist/cli/explain.d.ts +2 -3
  172. package/dist/cli/explain.js +25 -27
  173. package/dist/cli/flag-values.d.ts +6 -1
  174. package/dist/cli/flag-values.js +42 -15
  175. package/dist/cli/flags.d.ts +0 -288
  176. package/dist/cli/flags.js +3 -138
  177. package/dist/cli/github.d.ts +14 -0
  178. package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
  179. package/dist/cli/goals.d.ts +2 -2
  180. package/dist/cli/goals.js +46 -50
  181. package/dist/cli/graph.d.ts +3 -0
  182. package/dist/cli/graph.js +83 -0
  183. package/dist/cli/hook-runtime.d.ts +12 -32
  184. package/dist/cli/hook-runtime.js +21 -64
  185. package/dist/cli/incidents.d.ts +3 -0
  186. package/dist/cli/incidents.js +112 -0
  187. package/dist/cli/init.d.ts +2 -2
  188. package/dist/cli/init.js +33 -30
  189. package/dist/cli/install-steps.d.ts +2 -1
  190. package/dist/cli/install-steps.js +13 -14
  191. package/dist/cli/last-sleep.d.ts +2 -1
  192. package/dist/cli/last-sleep.js +4 -1
  193. package/dist/cli/lenient-id.d.ts +2 -0
  194. package/dist/cli/lenient-id.js +13 -0
  195. package/dist/cli/maintenance.d.ts +5 -5
  196. package/dist/cli/maintenance.js +37 -43
  197. package/dist/cli/notes.d.ts +2 -0
  198. package/dist/cli/notes.js +41 -0
  199. package/dist/cli/object-verbs.js +4 -3
  200. package/dist/cli/open-browser.d.ts +14 -0
  201. package/dist/cli/open-browser.js +26 -0
  202. package/dist/cli/owner-validation.d.ts +5 -28
  203. package/dist/cli/owner-validation.js +5 -28
  204. package/dist/cli/playbooks.d.ts +3 -4
  205. package/dist/cli/playbooks.js +131 -300
  206. package/dist/cli/predictions.d.ts +3 -0
  207. package/dist/cli/predictions.js +175 -0
  208. package/dist/cli/print.d.ts +2 -5
  209. package/dist/cli/print.js +3 -5
  210. package/dist/cli/projects.d.ts +2 -2
  211. package/dist/cli/projects.js +31 -25
  212. package/dist/cli/quality-repair-once.d.ts +1 -1
  213. package/dist/cli/quality-repair-once.js +7 -6
  214. package/dist/cli/recall.d.ts +2 -4
  215. package/dist/cli/recall.js +67 -137
  216. package/dist/cli/refine-llm.d.ts +5 -31
  217. package/dist/cli/refine-llm.js +23 -50
  218. package/dist/cli/remember.d.ts +3 -3
  219. package/dist/cli/remember.js +134 -192
  220. package/dist/cli/scheduler.d.ts +2 -17
  221. package/dist/cli/scheduler.js +14 -19
  222. package/dist/cli/serve.js +23 -14
  223. package/dist/cli/session-hooks.d.ts +11 -19
  224. package/dist/cli/session-hooks.js +143 -214
  225. package/dist/cli/setup.d.ts +4 -4
  226. package/dist/cli/setup.js +35 -30
  227. package/dist/cli/shared.d.ts +7 -25
  228. package/dist/cli/shared.js +17 -60
  229. package/dist/cli/slack.d.ts +2 -2
  230. package/dist/cli/slack.js +19 -23
  231. package/dist/cli/sleep-render.js +6 -3
  232. package/dist/cli/sleep.d.ts +3 -2
  233. package/dist/cli/sleep.js +17 -49
  234. package/dist/cli/status.d.ts +11 -14
  235. package/dist/cli/status.js +74 -120
  236. package/dist/cli/stdin.d.ts +4 -6
  237. package/dist/cli/stdin.js +2 -3
  238. package/dist/cli/transfer.d.ts +9 -9
  239. package/dist/cli/transfer.js +87 -108
  240. package/dist/cli/usage.d.ts +0 -79
  241. package/dist/cli/usage.js +1 -689
  242. package/dist/cli/verb-row.d.ts +32 -0
  243. package/dist/cli/verb-row.js +6 -0
  244. package/dist/cli/verbs/health.d.ts +27 -0
  245. package/dist/cli/verbs/health.js +232 -0
  246. package/dist/cli/verbs/memory.d.ts +16 -0
  247. package/dist/cli/verbs/memory.js +244 -0
  248. package/dist/cli/verbs/objects.d.ts +20 -0
  249. package/dist/cli/verbs/objects.js +254 -0
  250. package/dist/cli/verbs/sessions.d.ts +31 -0
  251. package/dist/cli/verbs/sessions.js +312 -0
  252. package/dist/cli/verbs.d.ts +81 -0
  253. package/dist/cli/verbs.js +7 -0
  254. package/dist/cli/versioned-verbs.d.ts +51 -0
  255. package/dist/cli/versioned-verbs.js +79 -0
  256. package/dist/cli.d.ts +1 -654
  257. package/dist/cli.js +44 -510
  258. package/dist/connectors/dlq.d.ts +39 -3
  259. package/dist/connectors/dlq.js +37 -3
  260. package/dist/connectors/github/backfill.d.ts +5 -25
  261. package/dist/connectors/github/backfill.js +26 -52
  262. package/dist/connectors/github/deletion.d.ts +4 -18
  263. package/dist/connectors/github/deletion.js +2 -15
  264. package/dist/connectors/github/dlq.d.ts +8 -33
  265. package/dist/connectors/github/dlq.js +34 -93
  266. package/dist/connectors/github/ingest.d.ts +4 -12
  267. package/dist/connectors/github/ingest.js +5 -36
  268. package/dist/connectors/github/octokit-client.d.ts +4 -16
  269. package/dist/connectors/github/octokit-client.js +27 -24
  270. package/dist/connectors/github/ratelimit.d.ts +3 -14
  271. package/dist/connectors/github/ratelimit.js +3 -14
  272. package/dist/connectors/github/scope.d.ts +3 -5
  273. package/dist/connectors/github/scope.js +3 -5
  274. package/dist/connectors/github/signature.d.ts +4 -26
  275. package/dist/connectors/github/signature.js +4 -26
  276. package/dist/connectors/github/tenant-routing.d.ts +2 -24
  277. package/dist/connectors/github/tenant-routing.js +4 -26
  278. package/dist/connectors/github/transform.js +2 -16
  279. package/dist/connectors/github/types.d.ts +3 -15
  280. package/dist/connectors/github/types.js +2 -9
  281. package/dist/connectors/github/webhook.d.ts +3 -16
  282. package/dist/connectors/github/webhook.js +38 -23
  283. package/dist/connectors/ingest.d.ts +10 -0
  284. package/dist/connectors/ingest.js +28 -0
  285. package/dist/connectors/slack/backfill.d.ts +4 -17
  286. package/dist/connectors/slack/backfill.js +4 -13
  287. package/dist/connectors/slack/dlq.d.ts +2 -19
  288. package/dist/connectors/slack/dlq.js +51 -90
  289. package/dist/connectors/slack/ingest.d.ts +4 -9
  290. package/dist/connectors/slack/ingest.js +4 -30
  291. package/dist/connectors/slack/scope.d.ts +2 -8
  292. package/dist/connectors/slack/scope.js +2 -8
  293. package/dist/connectors/slack/signature.d.ts +1 -6
  294. package/dist/connectors/slack/tenant-routing.d.ts +2 -19
  295. package/dist/connectors/slack/tenant-routing.js +2 -21
  296. package/dist/connectors/slack/transform.d.ts +2 -18
  297. package/dist/connectors/slack/transform.js +2 -18
  298. package/dist/connectors/slack/types.d.ts +3 -9
  299. package/dist/connectors/slack/types.js +2 -4
  300. package/dist/connectors/slack/web-client.js +33 -27
  301. package/dist/connectors/slack/webhook.d.ts +3 -19
  302. package/dist/connectors/slack/webhook.js +6 -26
  303. package/dist/connectors/slack/workspaces.d.ts +4 -24
  304. package/dist/connectors/slack/workspaces.js +4 -24
  305. package/dist/consolidate/conflicts.js +7 -15
  306. package/dist/consolidate/dag-summary.d.ts +8 -0
  307. package/dist/consolidate/dag-summary.js +41 -0
  308. package/dist/consolidate/dag.d.ts +5 -28
  309. package/dist/consolidate/dag.js +29 -84
  310. package/dist/consolidate/decay.js +7 -19
  311. package/dist/consolidate/dedupe.d.ts +13 -52
  312. package/dist/consolidate/dedupe.js +18 -74
  313. package/dist/consolidate/flush-units.d.ts +3 -4
  314. package/dist/consolidate/flush-units.js +3 -3
  315. package/dist/consolidate/half-life-migration.d.ts +3 -26
  316. package/dist/consolidate/half-life-migration.js +11 -28
  317. package/dist/consolidate/llm-passes.js +49 -40
  318. package/dist/consolidate/memory-value-weights.d.ts +2 -13
  319. package/dist/consolidate/memory-value-weights.js +2 -13
  320. package/dist/consolidate/memory-value.d.ts +11 -84
  321. package/dist/consolidate/memory-value.js +18 -105
  322. package/dist/consolidate/merge.js +12 -33
  323. package/dist/consolidate/physics-pass.d.ts +6 -1
  324. package/dist/consolidate/physics-pass.js +27 -9
  325. package/dist/consolidate/replay.d.ts +6 -38
  326. package/dist/consolidate/replay.js +25 -56
  327. package/dist/consolidate/run.js +1 -1
  328. package/dist/consolidate/sleep.d.ts +1 -8
  329. package/dist/consolidate/sleep.js +13 -22
  330. package/dist/consolidate/trace.d.ts +3 -18
  331. package/dist/consolidate/trace.js +3 -18
  332. package/dist/consolidate/traces.js +9 -25
  333. package/dist/core/ablation.d.ts +14 -91
  334. package/dist/core/ablation.js +16 -91
  335. package/dist/core/active-scope.d.ts +7 -0
  336. package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
  337. package/dist/core/ambient.d.ts +5 -8
  338. package/dist/core/ambient.js +40 -26
  339. package/dist/core/api-errors.d.ts +16 -0
  340. package/dist/core/api-errors.js +20 -0
  341. package/dist/core/capture-contract.d.ts +4 -2
  342. package/dist/core/capture-contract.js +4 -2
  343. package/dist/core/card.d.ts +4 -1
  344. package/dist/core/card.js +11 -1
  345. package/dist/core/compaction-timing.d.ts +7 -0
  346. package/dist/core/compaction-timing.js +9 -0
  347. package/dist/core/compare.d.ts +11 -67
  348. package/dist/core/compare.js +9 -63
  349. package/dist/core/config.d.ts +10 -24
  350. package/dist/core/config.js +20 -16
  351. package/dist/core/cosine.d.ts +3 -0
  352. package/dist/core/cosine.js +19 -0
  353. package/dist/core/handoff.d.ts +1 -7
  354. package/dist/core/handoff.js +1 -7
  355. package/dist/core/markdown.d.ts +6 -0
  356. package/dist/{store → core}/markdown.js +23 -22
  357. package/dist/core/memory-audit.d.ts +17 -0
  358. package/dist/core/memory-audit.js +54 -0
  359. package/dist/core/memory-quality.js +1 -1
  360. package/dist/core/memory.d.ts +51 -168
  361. package/dist/core/memory.js +76 -239
  362. package/dist/{consolidate → core}/merged-row.d.ts +1 -1
  363. package/dist/{consolidate → core}/merged-row.js +3 -2
  364. package/dist/core/package-root.d.ts +3 -0
  365. package/dist/core/package-root.js +5 -0
  366. package/dist/core/physics-config.d.ts +1 -4
  367. package/dist/core/physics-config.js +3 -8
  368. package/dist/core/physics.d.ts +15 -61
  369. package/dist/core/physics.js +65 -138
  370. package/dist/core/prediction.d.ts +3 -0
  371. package/dist/core/prediction.js +6 -0
  372. package/dist/core/project-identity.d.ts +20 -58
  373. package/dist/core/project-identity.js +27 -39
  374. package/dist/core/project-remote.js +13 -2
  375. package/dist/core/raw-append-only.d.ts +5 -0
  376. package/dist/core/raw-append-only.js +7 -0
  377. package/dist/core/recall-scope.d.ts +69 -0
  378. package/dist/core/recall-scope.js +138 -0
  379. package/dist/core/salience.d.ts +1 -7
  380. package/dist/core/salience.js +1 -7
  381. package/dist/dashboard/dashboard-actions.js +2 -2
  382. package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
  383. package/dist/dashboard/dashboard-snapshot.js +11 -2
  384. package/dist/dashboard/dashboard-types.d.ts +2 -1
  385. package/dist/dashboard/dashboard.d.ts +1 -0
  386. package/dist/dashboard/dashboard.js +50 -4
  387. package/dist/db/busy.d.ts +3 -8
  388. package/dist/db/busy.js +37 -33
  389. package/dist/db/connect.js +7 -8
  390. package/dist/db/index.d.ts +3 -3
  391. package/dist/db/index.js +3 -3
  392. package/dist/db/migrate.js +3 -3
  393. package/dist/db/migrations/index.d.ts +1 -1
  394. package/dist/db/migrations/index.js +3 -1
  395. package/dist/db/migrations/types.d.ts +2 -5
  396. package/dist/db/migrations/v14.js +2 -3
  397. package/dist/db/migrations/v15.js +2 -8
  398. package/dist/db/migrations/v16.js +2 -3
  399. package/dist/db/migrations/v17.js +2 -3
  400. package/dist/db/migrations/v19.js +2 -5
  401. package/dist/db/migrations/v20.js +2 -7
  402. package/dist/db/migrations/v22.js +4 -17
  403. package/dist/db/migrations/v23.js +3 -14
  404. package/dist/db/migrations/v24.js +2 -4
  405. package/dist/db/migrations/v25.js +3 -8
  406. package/dist/db/migrations/v26.js +2 -13
  407. package/dist/db/migrations/v27.js +3 -11
  408. package/dist/db/migrations/v28.js +2 -14
  409. package/dist/db/migrations/v29.js +4 -18
  410. package/dist/db/migrations/v30.js +4 -16
  411. package/dist/db/migrations/v31.js +2 -15
  412. package/dist/db/migrations/v32.js +4 -22
  413. package/dist/db/migrations/v33.js +2 -15
  414. package/dist/db/migrations/v34.js +2 -11
  415. package/dist/db/migrations/v35.js +2 -11
  416. package/dist/db/migrations/v36.js +2 -11
  417. package/dist/db/migrations/v37.js +8 -33
  418. package/dist/db/migrations/v38.js +5 -38
  419. package/dist/db/migrations/v39.js +9 -20
  420. package/dist/db/migrations/v40.js +2 -9
  421. package/dist/db/migrations/v41.js +2 -24
  422. package/dist/db/migrations/v43.js +1 -1
  423. package/dist/db/migrations/v44.js +2 -8
  424. package/dist/db/migrations/v45.js +2 -7
  425. package/dist/db/migrations/v47.js +2 -3
  426. package/dist/db/migrations/v51.js +1 -1
  427. package/dist/db/migrations/v55.d.ts +3 -0
  428. package/dist/db/migrations/v55.js +17 -0
  429. package/dist/db/open.d.ts +2 -2
  430. package/dist/db/open.js +21 -9
  431. package/dist/db/physics-state.d.ts +6 -22
  432. package/dist/db/physics-state.js +28 -39
  433. package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
  434. package/dist/db/raw-archive-mirror-cleanup.js +2 -17
  435. package/dist/db/tables.d.ts +2 -0
  436. package/dist/db/tables.js +6 -2
  437. package/dist/db/vector-store.d.ts +2 -0
  438. package/dist/db/vector-store.js +25 -5
  439. package/dist/db/wal-checkpointer.js +2 -1
  440. package/dist/doctor.js +85 -27
  441. package/dist/embeddings/local.d.ts +62 -0
  442. package/dist/embeddings/local.js +146 -0
  443. package/dist/embeddings/provider.d.ts +43 -0
  444. package/dist/{store/embeddings → embeddings}/provider.js +58 -83
  445. package/dist/embeddings/transformers.d.ts +26 -0
  446. package/dist/embeddings/transformers.js +89 -0
  447. package/dist/entry/session-text.d.ts +1 -1
  448. package/dist/entry/session-text.js +3 -2
  449. package/dist/eval/eval-stats.d.ts +15 -53
  450. package/dist/eval/eval-stats.js +12 -42
  451. package/dist/eval/eval-suite.d.ts +2 -13
  452. package/dist/eval/eval-suite.js +91 -45
  453. package/dist/eval/eval.d.ts +6 -24
  454. package/dist/eval/eval.js +8 -35
  455. package/dist/eval/judgment.d.ts +0 -3
  456. package/dist/eval/judgment.js +30 -15
  457. package/dist/extensions/openclaw-plugin/index.js +1 -1
  458. package/dist/graph/extract.d.ts +5 -27
  459. package/dist/graph/extract.js +10 -36
  460. package/dist/graph/recall.d.ts +7 -20
  461. package/dist/graph/recall.js +15 -77
  462. package/dist/graph/stream.d.ts +7 -39
  463. package/dist/graph/stream.js +11 -34
  464. package/dist/graph/view.d.ts +9 -35
  465. package/dist/graph/view.js +24 -44
  466. package/dist/graph/write.d.ts +1 -1
  467. package/dist/graph/write.js +9 -9
  468. package/dist/hooks/codex-session.js +3 -2
  469. package/dist/hooks/codex-wrapper.js +4 -3
  470. package/dist/hooks/copilot.js +2 -1
  471. package/dist/hooks/hook-blocks.d.ts +6 -2
  472. package/dist/hooks/hook-blocks.js +37 -124
  473. package/dist/hooks/json-hooks.d.ts +4 -36
  474. package/dist/hooks/json-hooks.js +22 -59
  475. package/dist/hooks/opencode.d.ts +0 -38
  476. package/dist/hooks/opencode.js +17 -81
  477. package/dist/hooks/shared.d.ts +6 -21
  478. package/dist/hooks/shared.js +31 -33
  479. package/dist/importers/core.d.ts +12 -37
  480. package/dist/importers/core.js +10 -28
  481. package/dist/importers/markdown-parse.d.ts +8 -22
  482. package/dist/importers/markdown-parse.js +8 -25
  483. package/dist/importers/markdown.js +3 -12
  484. package/dist/importers/sources.js +12 -39
  485. package/dist/importers/vault.d.ts +2 -8
  486. package/dist/importers/vault.js +31 -85
  487. package/dist/index.d.ts +8 -3
  488. package/dist/index.js +8 -3
  489. package/dist/learn/autolearn.d.ts +23 -42
  490. package/dist/learn/autolearn.js +45 -52
  491. package/dist/learn/churn-git.js +13 -4
  492. package/dist/learn/extract.d.ts +3 -2
  493. package/dist/learn/extract.js +8 -8
  494. package/dist/learn/forward-claim-detector.d.ts +6 -30
  495. package/dist/learn/forward-claim-detector.js +18 -68
  496. package/dist/learn/invalidation.d.ts +6 -18
  497. package/dist/learn/invalidation.js +18 -31
  498. package/dist/mcp/admin-tools.d.ts +2 -2
  499. package/dist/mcp/admin-tools.js +30 -53
  500. package/dist/mcp/format.js +3 -2
  501. package/dist/mcp/framing.d.ts +1 -0
  502. package/dist/mcp/framing.js +1 -1
  503. package/dist/mcp/memory-tools.js +7 -10
  504. package/dist/mcp/protocol.d.ts +15 -29
  505. package/dist/mcp/protocol.js +26 -16
  506. package/dist/mcp/recall-tools.js +14 -11
  507. package/dist/mcp/request.d.ts +3 -11
  508. package/dist/mcp/request.js +12 -27
  509. package/dist/mcp/server.d.ts +3 -9
  510. package/dist/mcp/server.js +5 -16
  511. package/dist/mcp/session-state.d.ts +1 -1
  512. package/dist/mcp/session-state.js +5 -11
  513. package/dist/mcp/stdio.d.ts +2 -6
  514. package/dist/mcp/stdio.js +68 -16
  515. package/dist/mcp/tool-args.js +2 -1
  516. package/dist/mcp/tools.js +47 -22
  517. package/dist/objects/customer-notes.d.ts +9 -44
  518. package/dist/objects/customer-notes.js +7 -48
  519. package/dist/objects/decisions.d.ts +14 -52
  520. package/dist/objects/decisions.js +15 -53
  521. package/dist/objects/descriptor.d.ts +1 -1
  522. package/dist/objects/incidents.d.ts +9 -40
  523. package/dist/objects/incidents.js +7 -41
  524. package/dist/objects/lifecycle.d.ts +1 -1
  525. package/dist/objects/lifecycle.js +2 -1
  526. package/dist/objects/policies.d.ts +13 -91
  527. package/dist/objects/policies.js +13 -99
  528. package/dist/objects/processes.d.ts +9 -54
  529. package/dist/objects/processes.js +7 -61
  530. package/dist/objects/project-briefs.d.ts +13 -57
  531. package/dist/objects/project-briefs.js +16 -78
  532. package/dist/objects/skills.d.ts +9 -44
  533. package/dist/objects/skills.js +8 -54
  534. package/dist/postinstall.js +7 -20
  535. package/dist/predictions/planning-fallacy.d.ts +11 -34
  536. package/dist/rerankers/clef.js +6 -37
  537. package/dist/rerankers/cross-encoder.d.ts +31 -2
  538. package/dist/rerankers/cross-encoder.js +65 -101
  539. package/dist/rerankers/index.js +5 -4
  540. package/dist/rerankers/jev.js +11 -10
  541. package/dist/rerankers/llm.d.ts +2 -11
  542. package/dist/rerankers/llm.js +14 -14
  543. package/dist/rerankers/outage-warning.d.ts +5 -2
  544. package/dist/rerankers/outage-warning.js +7 -4
  545. package/dist/rerankers/remote.d.ts +1 -0
  546. package/dist/rerankers/remote.js +2 -0
  547. package/dist/rerankers/types.d.ts +2 -14
  548. package/dist/search/bm25-search.js +1 -1
  549. package/dist/search/boosts.d.ts +0 -2
  550. package/dist/search/boosts.js +3 -3
  551. package/dist/search/embed-memories.d.ts +9 -0
  552. package/dist/search/embed-memories.js +377 -0
  553. package/dist/search/goal-boost.d.ts +23 -0
  554. package/dist/search/goal-boost.js +93 -0
  555. package/dist/search/hybrid.d.ts +11 -2
  556. package/dist/search/hybrid.js +9 -4
  557. package/dist/search/multihop.js +2 -3
  558. package/dist/search/path-context.d.ts +5 -18
  559. package/dist/search/path-context.js +5 -18
  560. package/dist/search/physics-search.d.ts +6 -3
  561. package/dist/search/physics-search.js +29 -19
  562. package/dist/search/rerank.js +1 -1
  563. package/dist/search/rrf.d.ts +7 -35
  564. package/dist/search/rrf.js +5 -30
  565. package/dist/search/vector.d.ts +13 -4
  566. package/dist/search/vector.js +40 -13
  567. package/dist/server/auth.d.ts +11 -28
  568. package/dist/server/auth.js +49 -32
  569. package/dist/server/boot.d.ts +2 -21
  570. package/dist/server/boot.js +69 -161
  571. package/dist/server/client-ip.d.ts +3 -21
  572. package/dist/server/client-ip.js +8 -30
  573. package/dist/server/deadline.d.ts +0 -2
  574. package/dist/server/deadline.js +1 -7
  575. package/dist/server/defaults.d.ts +4 -0
  576. package/dist/server/defaults.js +5 -0
  577. package/dist/server/key-check-bounds.d.ts +2 -1
  578. package/dist/server/lifecycle.d.ts +5 -4
  579. package/dist/server/lifecycle.js +19 -4
  580. package/dist/server/mcp-http.js +24 -53
  581. package/dist/server/rate-limit.d.ts +5 -18
  582. package/dist/server/rate-limit.js +4 -13
  583. package/dist/server/request.d.ts +4 -8
  584. package/dist/server/request.js +16 -19
  585. package/dist/server/route-checks.d.ts +7 -0
  586. package/dist/server/route-checks.js +42 -0
  587. package/dist/server/route-table.d.ts +9 -8
  588. package/dist/server/route-table.js +127 -139
  589. package/dist/server/routes/admin.d.ts +8 -8
  590. package/dist/server/routes/admin.js +35 -49
  591. package/dist/server/routes/customer-notes.d.ts +6 -6
  592. package/dist/server/routes/customer-notes.js +8 -14
  593. package/dist/server/routes/decisions.d.ts +6 -6
  594. package/dist/server/routes/decisions.js +12 -21
  595. package/dist/server/routes/incidents.d.ts +6 -6
  596. package/dist/server/routes/incidents.js +14 -25
  597. package/dist/server/routes/memories.d.ts +9 -9
  598. package/dist/server/routes/memories.js +20 -63
  599. package/dist/server/routes/object-routes.d.ts +6 -11
  600. package/dist/server/routes/object-routes.js +11 -22
  601. package/dist/server/routes/policies.d.ts +7 -7
  602. package/dist/server/routes/policies.js +12 -22
  603. package/dist/server/routes/predictions.d.ts +6 -6
  604. package/dist/server/routes/predictions.js +22 -38
  605. package/dist/server/routes/processes.d.ts +6 -6
  606. package/dist/server/routes/processes.js +17 -28
  607. package/dist/server/routes/project-briefs.d.ts +7 -7
  608. package/dist/server/routes/project-briefs.js +11 -20
  609. package/dist/server/routes/recall.d.ts +5 -5
  610. package/dist/server/routes/recall.js +16 -45
  611. package/dist/server/routes/skills.d.ts +7 -7
  612. package/dist/server/routes/skills.js +10 -22
  613. package/dist/server/server-detect.d.ts +15 -53
  614. package/dist/server/server-detect.js +55 -96
  615. package/dist/server/sleep-child.js +26 -7
  616. package/dist/server/sleep-offload.d.ts +11 -5
  617. package/dist/server/sleep-offload.js +21 -12
  618. package/dist/server/types.d.ts +32 -18
  619. package/dist/server/validation.d.ts +3 -2
  620. package/dist/server/validation.js +15 -33
  621. package/dist/server.d.ts +7 -6
  622. package/dist/server.js +8 -6
  623. package/dist/sharing/global-store.d.ts +19 -0
  624. package/dist/sharing/global-store.js +75 -0
  625. package/dist/sharing/global-sync.d.ts +6 -0
  626. package/dist/sharing/global-sync.js +73 -0
  627. package/dist/sharing/project-merge.d.ts +11 -19
  628. package/dist/sharing/project-merge.js +63 -125
  629. package/dist/sharing/search-both.d.ts +60 -0
  630. package/dist/sharing/search-both.js +138 -0
  631. package/dist/sharing/share.d.ts +40 -0
  632. package/dist/sharing/share.js +229 -0
  633. package/dist/store/ambient.js +9 -15
  634. package/dist/store/audit-event.d.ts +5 -13
  635. package/dist/store/audit-event.js +4 -12
  636. package/dist/store/audit.d.ts +2 -21
  637. package/dist/store/audit.js +8 -67
  638. package/dist/store/auth.d.ts +10 -8
  639. package/dist/store/auth.js +17 -12
  640. package/dist/store/candidates.d.ts +23 -5
  641. package/dist/store/candidates.js +119 -71
  642. package/dist/store/capture-write.d.ts +17 -0
  643. package/dist/store/capture-write.js +35 -0
  644. package/dist/store/card-detail.d.ts +2 -1
  645. package/dist/store/card-detail.js +2 -1
  646. package/dist/store/cards.d.ts +14 -9
  647. package/dist/store/cards.js +72 -126
  648. package/dist/store/compaction-caller.d.ts +18 -0
  649. package/dist/store/compaction-caller.js +29 -0
  650. package/dist/store/compactions-record.d.ts +115 -0
  651. package/dist/store/compactions-record.js +417 -0
  652. package/dist/store/compactions.js +6 -4
  653. package/dist/store/conflicts.d.ts +4 -21
  654. package/dist/store/conflicts.js +76 -152
  655. package/dist/store/connectors/dlq.d.ts +10 -0
  656. package/dist/store/connectors/dlq.js +32 -0
  657. package/dist/store/connectors/github.d.ts +14 -16
  658. package/dist/store/connectors/github.js +34 -57
  659. package/dist/store/connectors/slack.d.ts +2 -11
  660. package/dist/store/connectors/slack.js +18 -47
  661. package/dist/store/dashboard-reads.js +11 -14
  662. package/dist/store/delete-and-batch.d.ts +17 -31
  663. package/dist/store/delete-and-batch.js +84 -67
  664. package/dist/store/delivery-recorder.d.ts +15 -4
  665. package/dist/store/delivery-recorder.js +34 -17
  666. package/dist/store/descendant-page.js +6 -3
  667. package/dist/store/diagnostics.js +6 -13
  668. package/dist/store/dormant.d.ts +8 -30
  669. package/dist/store/dormant.js +18 -57
  670. package/dist/store/embeddings/index.d.ts +11 -90
  671. package/dist/store/embeddings/index.js +18 -523
  672. package/dist/store/entry-reads.d.ts +34 -61
  673. package/dist/store/entry-reads.js +111 -136
  674. package/dist/store/entry-row.d.ts +6 -35
  675. package/dist/store/entry-row.js +9 -37
  676. package/dist/store/entry-writes.d.ts +12 -18
  677. package/dist/store/entry-writes.js +46 -44
  678. package/dist/store/failure-log-at.d.ts +8 -0
  679. package/dist/store/failure-log-at.js +16 -0
  680. package/dist/store/failure-log.d.ts +2 -2
  681. package/dist/store/failure-log.js +5 -3
  682. package/dist/{trust → store}/gated-write.d.ts +3 -1
  683. package/dist/{trust → store}/gated-write.js +7 -5
  684. package/dist/store/goals.d.ts +3 -40
  685. package/dist/store/goals.js +41 -178
  686. package/dist/store/graph-queue.d.ts +6 -22
  687. package/dist/store/graph-queue.js +14 -45
  688. package/dist/store/graph-reads.d.ts +11 -35
  689. package/dist/store/graph-reads.js +24 -60
  690. package/dist/store/graph-rows.d.ts +3 -6
  691. package/dist/store/graph-rows.js +6 -9
  692. package/dist/store/graph-view-rows.d.ts +2 -1
  693. package/dist/store/graph-view-rows.js +2 -1
  694. package/dist/store/graph-writes.d.ts +10 -35
  695. package/dist/store/graph-writes.js +59 -106
  696. package/dist/store/half-life.d.ts +2 -1
  697. package/dist/store/half-life.js +14 -16
  698. package/dist/store/handoffs.d.ts +6 -12
  699. package/dist/store/handoffs.js +22 -40
  700. package/dist/store/index-and-stats.d.ts +6 -19
  701. package/dist/store/index-and-stats.js +36 -84
  702. package/dist/store/key-writes.js +1 -1
  703. package/dist/store/ledger-turn.d.ts +9 -0
  704. package/dist/store/ledger-turn.js +38 -0
  705. package/dist/store/mirrors.d.ts +2 -6
  706. package/dist/store/mirrors.js +24 -29
  707. package/dist/store/open.d.ts +0 -4
  708. package/dist/store/open.js +42 -62
  709. package/dist/store/pilot-arm.d.ts +12 -0
  710. package/dist/store/pilot-arm.js +42 -0
  711. package/dist/store/planning-fallacy-evidence.d.ts +2 -30
  712. package/dist/store/planning-fallacy-evidence.js +8 -37
  713. package/dist/store/port.d.ts +91 -82
  714. package/dist/store/port.js +8 -0
  715. package/dist/store/predictions.d.ts +12 -53
  716. package/dist/store/predictions.js +41 -125
  717. package/dist/store/project-tags.d.ts +62 -0
  718. package/dist/store/project-tags.js +67 -0
  719. package/dist/{cli → store}/quality-repair.js +15 -31
  720. package/dist/store/quarantine.js +2 -1
  721. package/dist/store/raw-archive.d.ts +4 -16
  722. package/dist/store/raw-archive.js +14 -29
  723. package/dist/store/recall-trace.d.ts +12 -77
  724. package/dist/store/recall-trace.js +37 -97
  725. package/dist/store/rejected-values.js +9 -20
  726. package/dist/store/rejection-probe.d.ts +4 -0
  727. package/dist/store/rejection-probe.js +19 -0
  728. package/dist/store/rejection.d.ts +10 -73
  729. package/dist/store/rejection.js +12 -84
  730. package/dist/store/report-reads.d.ts +6 -0
  731. package/dist/store/report-reads.js +29 -0
  732. package/dist/store/rows.d.ts +9 -19
  733. package/dist/store/rows.js +36 -34
  734. package/dist/store/rule-sql.d.ts +14 -0
  735. package/dist/store/rule-sql.js +56 -0
  736. package/dist/store/search-rows.d.ts +7 -38
  737. package/dist/store/search-rows.js +23 -54
  738. package/dist/store/sessions.d.ts +10 -47
  739. package/dist/store/sessions.js +21 -75
  740. package/dist/store/set-aside.d.ts +14 -0
  741. package/dist/store/set-aside.js +23 -0
  742. package/dist/store/sqlite/busy.d.ts +3 -0
  743. package/dist/store/sqlite/busy.js +8 -0
  744. package/dist/store/sqlite/connector-events-group.js +5 -8
  745. package/dist/store/sqlite/connector-writes-group.js +3 -3
  746. package/dist/store/sqlite/entry-writes-group.js +4 -4
  747. package/dist/store/sqlite/error-codec.js +8 -5
  748. package/dist/store/sqlite/executor.d.ts +2 -1
  749. package/dist/store/sqlite/executor.js +12 -5
  750. package/dist/store/sqlite/graph-reads-group.js +1 -1
  751. package/dist/store/sqlite/held-connection.d.ts +9 -0
  752. package/dist/store/sqlite/held-connection.js +41 -0
  753. package/dist/store/sqlite/local.d.ts +3 -3
  754. package/dist/store/sqlite/local.js +1 -0
  755. package/dist/store/sqlite/object-rows.d.ts +1 -1
  756. package/dist/store/sqlite/object-rows.js +6 -3
  757. package/dist/store/sqlite/objects-group.d.ts +1 -1
  758. package/dist/store/sqlite/objects-group.js +5 -3
  759. package/dist/store/sqlite/quarantine-group.js +2 -2
  760. package/dist/store/sqlite/store.d.ts +1 -4
  761. package/dist/store/sqlite/store.js +16 -15
  762. package/dist/store/sqlite/vector-reads-group.js +2 -2
  763. package/dist/store/sqlite/worker-jobs.js +1 -1
  764. package/dist/store/sqlite/worker-ops.d.ts +13 -2
  765. package/dist/store/sqlite/worker-ops.js +13 -2
  766. package/dist/store/sqlite/worker-store.js +5 -2
  767. package/dist/store/summaries.d.ts +11 -63
  768. package/dist/store/summaries.js +37 -148
  769. package/dist/store/summary-dirty.js +1 -1
  770. package/dist/store/tenant-lookup.d.ts +6 -1
  771. package/dist/store/tenant-lookup.js +7 -0
  772. package/dist/store/tenant.d.ts +2 -16
  773. package/dist/store/tenant.js +4 -19
  774. package/dist/store/token-ledger.d.ts +13 -50
  775. package/dist/store/token-ledger.js +19 -85
  776. package/dist/store/usage-reports.js +5 -13
  777. package/dist/store/vector-index.d.ts +46 -0
  778. package/dist/store/vector-index.js +171 -0
  779. package/dist/store/working-memory.d.ts +6 -25
  780. package/dist/store/working-memory.js +18 -52
  781. package/dist/support-bundle.js +9 -8
  782. package/dist/trust/reject-flow.js +3 -5
  783. package/dist/util/agent-homes.d.ts +15 -0
  784. package/dist/util/agent-homes.js +34 -0
  785. package/dist/util/anthropic-messages.d.ts +3 -0
  786. package/dist/util/anthropic-messages.js +35 -6
  787. package/dist/util/atomic-write.d.ts +2 -1
  788. package/dist/util/atomic-write.js +35 -4
  789. package/dist/util/capped-json.d.ts +6 -0
  790. package/dist/util/capped-json.js +46 -0
  791. package/dist/util/chunked.d.ts +3 -0
  792. package/dist/util/chunked.js +10 -0
  793. package/dist/util/crash-handlers.d.ts +8 -1
  794. package/dist/util/crash-handlers.js +52 -10
  795. package/dist/util/ellipsize.d.ts +3 -0
  796. package/dist/util/ellipsize.js +5 -0
  797. package/dist/util/env.d.ts +14 -6
  798. package/dist/util/env.js +15 -7
  799. package/dist/util/format.d.ts +3 -0
  800. package/dist/util/format.js +6 -0
  801. package/dist/util/home-path.d.ts +2 -1
  802. package/dist/util/home-path.js +4 -2
  803. package/dist/util/hook-payload.d.ts +8 -0
  804. package/dist/util/hook-payload.js +37 -0
  805. package/dist/util/http-retry.d.ts +9 -1
  806. package/dist/util/http-retry.js +67 -8
  807. package/dist/util/http-util.d.ts +0 -8
  808. package/dist/util/http-util.js +10 -21
  809. package/dist/util/limits.d.ts +7 -0
  810. package/dist/util/limits.js +14 -0
  811. package/dist/util/log.d.ts +7 -2
  812. package/dist/util/log.js +34 -9
  813. package/dist/util/request-scope.d.ts +5 -2
  814. package/dist/util/request-scope.js +13 -7
  815. package/dist/util/secret-detect.d.ts +5 -30
  816. package/dist/util/secret-detect.js +19 -40
  817. package/dist/util/sqlite-blocked.d.ts +2 -0
  818. package/dist/util/sqlite-blocked.js +5 -0
  819. package/dist/util/stored-json.d.ts +1 -1
  820. package/dist/util/stored-json.js +1 -1
  821. package/dist/util/stream-tee.d.ts +3 -0
  822. package/dist/util/stream-tee.js +35 -0
  823. package/dist/util/time.d.ts +4 -0
  824. package/dist/util/time.js +4 -0
  825. package/dist/util/token-text.d.ts +1 -4
  826. package/dist/util/token-text.js +1 -4
  827. package/dist/util/transcript-tail.d.ts +2 -0
  828. package/dist/util/transcript-tail.js +24 -23
  829. package/dist/util/version.d.ts +5 -20
  830. package/dist/util/version.js +5 -20
  831. package/dist/{store → util}/yaml.d.ts +1 -5
  832. package/dist/{store → util}/yaml.js +2 -6
  833. package/extensions/openclaw-plugin/index.ts +1 -1
  834. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  835. package/extensions/openclaw-plugin/package.json +1 -1
  836. package/openclaw.plugin.json +1 -1
  837. package/package.json +2 -2
  838. package/dist/cli/provenance-coverage.d.ts +0 -18
  839. package/dist/connectors/github/cli-impl.d.ts +0 -25
  840. package/dist/sharing/scope.d.ts +0 -14
  841. package/dist/sharing/shared.d.ts +0 -187
  842. package/dist/sharing/shared.js +0 -563
  843. package/dist/store/embeddings/local.d.ts +0 -15
  844. package/dist/store/embeddings/local.js +0 -192
  845. package/dist/store/embeddings/provider.d.ts +0 -77
  846. package/dist/store/markdown.d.ts +0 -10
  847. package/dist/store/recall-scope.d.ts +0 -138
  848. package/dist/store/recall-scope.js +0 -216
  849. package/dist/store/vector-writes.d.ts +0 -13
  850. package/dist/store/vector-writes.js +0 -89
  851. /package/dist/{store → core}/object-types.d.ts +0 -0
  852. /package/dist/{store → core}/object-types.js +0 -0
  853. /package/dist/{cli → store}/quality-repair.d.ts +0 -0
  854. /package/dist/{capture → util}/compaction-items.d.ts +0 -0
  855. /package/dist/{capture → util}/compaction-items.js +0 -0
@@ -1,12 +1,10 @@
1
- /**
2
- * Core data model for Hippo memory entries.
3
- * Based on the strength formula from PLAN.md.
4
- */
5
- import { envLossAversionRatio } from '../util/env.js';
1
+ /** Core data model for Hippo memory entries, based on the strength formula from PLAN.md. */
2
+ import { DEFAULT_TENANT_ID, envLossAversionRatio } from '../util/env.js';
6
3
  import { BadRequestError } from './api-errors.js';
7
4
  import { randomUUID } from 'crypto';
8
- import { isDecayAblated, isOutcomeSlowAblated, isRecallBoostAblated, evalNow, } from './ablation.js';
5
+ import { evalNow, NO_STRENGTH_ABLATION } from './ablation.js';
9
6
  import { AGENT_MEMORY_TOOLS, toolSourcePrefix } from './agent-memory-tools.js';
7
+ import { isJsonString } from '../util/json.js';
10
8
  import { DAY_MS } from '../util/time.js';
11
9
  import { ID_SUFFIX_CHARS } from '../util/token-text.js';
12
10
  export const DEFAULT_SCHEMA_FIT = 0.5;
@@ -18,58 +16,20 @@ export var Layer;
18
16
  Layer["Semantic"] = "semantic";
19
17
  Layer["Trace"] = "trace";
20
18
  })(Layer || (Layer = {}));
19
+ export const MEMORY_KINDS = ['raw', 'distilled', 'superseded', 'archived'];
21
20
  /** Tag on a memory whose named file/symbol/script changed after it was stored. */
22
21
  export const CHURN_STALE_TAG = 'churn-stale';
23
- // Emotional multipliers from PLAN.md. Losses weigh ~2x equivalent gains (Lovallo-Kahneman TFAS empirics),
24
- // so negative is 2.0. `negative` is further scaled per-process by HIPPO_LOSS_AVERSION_RATIO
25
- // (env var, default 1.0; see getLossAversionRatio + applyLossAversionRatio).
26
- const EMOTIONAL_MULTIPLIERS = {
22
+ // Losses weigh ~2x gains (Lovallo-Kahneman), so negative is 2.0; HIPPO_LOSS_AVERSION_RATIO scales it per process.
23
+ export const EMOTIONAL_MULTIPLIERS = {
27
24
  neutral: 1.0,
28
25
  positive: 1.0,
29
26
  negative: 2.0, // error-tagged
30
27
  critical: 2.0,
31
28
  };
32
- /**
33
- * Module-level lazy-cached read of HIPPO_LOSS_AVERSION_RATIO.
34
- *
35
- * `calculateStrength` is called per-entry inside hot recall loops
36
- * (api.ts/consolidate.ts/search.ts), so a per-call `process.env` lookup
37
- * would multiply N entries by M recalls of lookup cost. Lazy module-cache
38
- * reads the env ONCE on first call and memoizes for the process lifetime.
39
- * Test isolation via `_resetLossAversionRatioCacheForTests()` below.
40
- */
41
- /**
42
- * Minimum acceptable ratio. Below this, the negative multiplier
43
- * (2.0 * ratio) becomes small enough that calculateStrength * decay can fall
44
- * below `DECAY_THRESHOLD = 0.05` in `src/consolidate.ts:146`, which would
45
- * permanently delete non-pinned error-tagged memories on the next sleep
46
- * cycle. 0.5 is chosen as the floor because (a) it recovers the pre-calibration
47
- * effective multiplier (2.0 * 0.5 = 1.0 + the negative premium, i.e. 1.5x
48
- * the pre-calibration default), and (b) below this the user is asking for LESS
49
- * loss aversion than has ever shipped — that's outside the supported
50
- * tuning range.
51
- */
29
+ // A lower ratio can drop an error-tagged memory under sleep's DECAY_THRESHOLD (src/consolidate/decay.ts),
30
+ // so values below it fall back to 1.0.
52
31
  const LOSS_AVERSION_RATIO_MIN = 0.5;
53
- /**
54
- * Validation policy:
55
- * - Valid: finite numbers >= 0.5.
56
- * - Invalid (silent fallback to 1.0): empty string, non-numeric,
57
- * numbers below 0.5 (including 0 and negatives), NaN, +/-Infinity.
58
- * Silent because opt-in env vars should not crash production recall
59
- * on a typo.
60
- *
61
- * Why the 0.5 floor and not 0:
62
- * - Rejecting only `0` leaves the same silent data-loss surface for any ratio
63
- * below ~0.025 (and worse for aged memories, where even ratio=0.25
64
- * can produce strength < DECAY_THRESHOLD = 0.05 in consolidate.ts).
65
- * Floor at the pre-calibration equivalent (0.5) so the env var's tuning
66
- * range never crosses into the deletion regime.
67
- * - Users wanting LESS loss aversion than the pre-calibration 1.5 multiplier
68
- * should reconsider the design intent (the calibration was
69
- * toward MORE loss aversion, not less). If a future use case
70
- * genuinely needs ratio < 0.5, the right path is a separate
71
- * `HIPPO_NEGATIVE_MULTIPLIER` env override.
72
- */
32
+ // Read once: calculateStrength runs per entry inside hot loops (src/api, src/consolidate, src/search).
73
33
  let _lossAversionRatioCache;
74
34
  function getLossAversionRatio() {
75
35
  if (_lossAversionRatioCache !== undefined)
@@ -80,8 +40,6 @@ function getLossAversionRatio() {
80
40
  return 1.0;
81
41
  }
82
42
  const parsed = Number(raw);
83
- // Finite + >= 0.5 floor. Anything below 0.5 silently falls back to 1.0
84
- // to avoid the consolidation-deletion vector (see JSDoc above).
85
43
  if (!Number.isFinite(parsed) || parsed < LOSS_AVERSION_RATIO_MIN) {
86
44
  _lossAversionRatioCache = 1.0;
87
45
  return 1.0;
@@ -89,42 +47,20 @@ function getLossAversionRatio() {
89
47
  _lossAversionRatioCache = parsed;
90
48
  return parsed;
91
49
  }
92
- /**
93
- * Test-only helper. Tests that mutate `process.env.HIPPO_LOSS_AVERSION_RATIO`
94
- * MUST call this in BOTH `beforeEach` AND `afterEach`:
95
- * - beforeEach: clear any stale cache from a previous test before setting
96
- * the env var for this test.
97
- * - afterEach: clear the cache so the next test (which may not set the env
98
- * var) reads the clean default instead of this test's value.
99
- * See `tests/emotional-multipliers.test.ts` for the pattern.
100
- */
50
+ /** Test-only: a test that sets HIPPO_LOSS_AVERSION_RATIO calls this in beforeEach and afterEach (tests/emotional-multipliers.test.ts). */
101
51
  export function _resetLossAversionRatioCacheForTests() {
102
52
  _lossAversionRatioCache = undefined;
103
53
  }
104
- /**
105
- * Apply the loss-aversion ratio scalar to the `negative` multiplier ONLY.
106
- * Other valences (positive, critical, neutral) pass through unchanged.
107
- * `critical` is deliberately NOT scaled, so the calibration only touches the
108
- * specific empirical claim (TFAS 2x losses-vs-gains).
109
- */
110
- function applyLossAversionRatio(valence, baseMultiplier) {
54
+ /** Scales only the `negative` multiplier; `critical` stays unscaled so the knob moves just the losses-vs-gains claim. */
55
+ export function applyLossAversionRatio(valence, baseMultiplier) {
111
56
  if (valence !== 'negative')
112
57
  return baseMultiplier;
113
58
  return baseMultiplier * getLossAversionRatio();
114
59
  }
115
- /**
116
- * Compute the reward factor from cumulative outcome counts.
117
- *
118
- * reward_ratio = (positive - negative) / (positive + negative + 1)
119
- * reward_factor = 1 + 0.5 * reward_ratio
120
- *
121
- * Range: (0.5, 1.5). Neutral (no outcomes) returns 1.0.
122
- * Modulates effective half-life: memories with consistent positive outcomes
123
- * decay slower; consistent negative outcomes decay faster.
124
- */
125
- export function calculateRewardFactor(entry) {
60
+ /** 1 + REWARD_SLOPE * (pos - neg) / (pos + neg + 1), in (0.5, 1.5), 1.0 with no outcomes; it scales the effective half-life. */
61
+ export function calculateRewardFactor(entry, ablation = NO_STRENGTH_ABLATION) {
126
62
  // EVAL-ONLY ablation (see ablation.ts): the slow outcome channel.
127
- if (isOutcomeSlowAblated())
63
+ if (ablation.outcomeSlow)
128
64
  return 1.0;
129
65
  const pos = entry.outcome_positive ?? 0;
130
66
  const neg = entry.outcome_negative ?? 0;
@@ -134,65 +70,42 @@ export function calculateRewardFactor(entry) {
134
70
  return 1 + REWARD_SLOPE * ratio;
135
71
  }
136
72
  /** Bad marks alone never push a memory under sleep's 0.05 retire line; supersede is the hard correction. */
137
- const MAX_WRONG_HALVINGS = 3;
138
- // Shared by calculateStrength and strengthSql so the two cannot drift.
139
- const DECAY_BASE = 0.5;
140
- const REWARD_SLOPE = 0.5;
141
- const RETRIEVAL_BOOST_SLOPE = 0.1;
142
- const SQL_DEFAULT_HALF_LIFE_DAYS = 7;
143
- const UNIX_EPOCH_JULIAN_DAY = 2440587.5;
144
- /**
145
- * Net wrongness: bad outcome marks past good ones, never below zero.
146
- * Strength halves per unit (capped at 3) and recall stops strengthening
147
- * the memory, so a correction outranks pinning, error tags and heavy recall.
148
- */
149
- export function netWrong(entry) {
150
- if (isOutcomeSlowAblated() || isDecayAblated())
73
+ export const MAX_WRONG_HALVINGS = 3;
74
+ // Shared by calculateStrength and strengthSql (src/store/rule-sql.ts) so the two cannot drift.
75
+ export const DECAY_BASE = 0.5;
76
+ export const REWARD_SLOPE = 0.5;
77
+ export const RETRIEVAL_BOOST_SLOPE = 0.1;
78
+ /** Bad outcome marks past good ones, floored at zero; each halves strength and stops recall strengthening, so a correction outranks pinning. */
79
+ export function netWrong(entry, ablation = NO_STRENGTH_ABLATION) {
80
+ if (ablation.outcomeSlow || ablation.decay)
151
81
  return 0;
152
82
  return Math.max(0, (entry.outcome_negative ?? 0) - (entry.outcome_positive ?? 0));
153
83
  }
154
- /**
155
- * Calculate current strength at a given time.
156
- * strength(t) = base_strength * decay * retrieval_boost * emotional_multiplier
157
- *
158
- * Decay basis modes:
159
- * - clock: classic wall-clock decay (daysSince / halfLife)
160
- * - session: decay by sleep cycles instead of days (sessionsSince / halfLife)
161
- * - adaptive: wall-clock decay with half-life scaled by session frequency
162
- *
163
- * Pinned memories skip time decay; being marked wrong still fades them (netWrong).
164
- */
84
+ /** Strength at `now` = decay * retrieval boost * emotional multiplier, clamped to [0, 1]; the basis modes are on DecayOptions.
85
+ * Pinned memories skip time decay, but being marked wrong still fades them (netWrong). */
165
86
  export function calculateStrength(entry,
166
- // evalNow(): the real clock unless HIPPO_FAKE_NOW is set (eval-only,
167
- // simulated-time protocols; see ablation.ts). Explicit `now` always wins.
87
+ // evalNow() is the real clock unless HIPPO_FAKE_NOW is set (eval-only); an explicit `now` wins.
168
88
  now = evalNow(), options = {}) {
89
+ const ablation = options.ablation ?? NO_STRENGTH_ABLATION;
169
90
  // Being marked wrong outranks every shield: pinning, error tags, heavy recall.
170
- const wrongPenalty = Math.pow(DECAY_BASE, Math.min(netWrong(entry), MAX_WRONG_HALVINGS));
91
+ const wrongPenalty = Math.pow(DECAY_BASE, Math.min(netWrong(entry, ablation), MAX_WRONG_HALVINGS));
171
92
  if (entry.pinned)
172
93
  return wrongPenalty;
173
- // EVAL-ONLY ablation (see ablation.ts): anchor decay at CREATION, so clock resets persisted by PRIOR
174
- // unflagged runs cannot leak strengthening into an ablated arm. Prior-run half_life increments are
175
- // NOT reconstructed - see the ablation.ts caveat (fresh stores per arm).
176
- const lastRetrieved = new Date(isRecallBoostAblated() ? entry.created : entry.last_retrieved);
94
+ // EVAL-ONLY ablation (see ablation.ts): anchor decay at creation so clock resets from earlier unflagged runs cannot leak in.
95
+ const lastRetrieved = new Date(ablation.recallBoost ? entry.created : entry.last_retrieved);
177
96
  const daysSince = (now.getTime() - lastRetrieved.getTime()) / DAY_MS;
178
- // Reward-proportional half-life modulation
179
- const rewardFactor = calculateRewardFactor(entry);
97
+ const rewardFactor = calculateRewardFactor(entry, ablation);
180
98
  const effectiveHalfLife = entry.half_life_days * rewardFactor;
181
99
  // Guard: zero half-life causes 0/0 = NaN in the exponent
182
100
  if (effectiveHalfLife <= 0)
183
101
  return 0.0;
184
102
  const decayExponent = decayExponentFor(options, daysSince, effectiveHalfLife);
185
- // EVAL-ONLY ablation (see ablation.ts): decay term := 1. NOTE the [0,1]
186
- // clamp below then caps retrievalBoost at baseline - see ablation.ts
187
- // formula note.
188
- const decay = isDecayAblated() ? 1.0 : Math.pow(DECAY_BASE, decayExponent);
189
- const retrievalBoost = retrievalBoostFor(entry);
190
- // Emotional multiplier. HIPPO_LOSS_AVERSION_RATIO scales the negative one ONLY; the lazy
191
- // module cache makes this one lookup + one multiply, not a per-call process.env read.
103
+ // EVAL-ONLY ablation (see ablation.ts): decay := 1, so the [0,1] clamp below caps the boost at baseline.
104
+ const decay = ablation.decay ? 1.0 : Math.pow(DECAY_BASE, decayExponent);
105
+ const retrievalBoost = retrievalBoostFor(entry, ablation);
192
106
  const baseMultiplier = EMOTIONAL_MULTIPLIERS[entry.emotional_valence] ?? 1.0;
193
107
  const emotionalMultiplier = applyLossAversionRatio(entry.emotional_valence, baseMultiplier);
194
108
  const raw = decay * retrievalBoost * emotionalMultiplier;
195
- // Clamp to [0, 1] with NaN guard
196
109
  const clamped = Math.min(1.0, Math.max(0.0, raw));
197
110
  return Number.isFinite(clamped) ? clamped * wrongPenalty : 0.0;
198
111
  }
@@ -200,8 +113,7 @@ function decayExponentFor(options, daysSince, halfLifeDays) {
200
113
  let effectiveHalfLife = halfLifeDays;
201
114
  const basis = options.decayBasis ?? 'clock';
202
115
  if (basis === 'session') {
203
- // Decay by session count: each sleep cycle = 1 "day" in the decay formula.
204
- // Estimate sessions since last retrieval from wall-clock time and avg interval.
116
+ // Each sleep cycle counts as one "day"; sessions since last retrieval are estimated from wall time and the average interval.
205
117
  const avgInterval = options.avgSessionIntervalDays ?? 1;
206
118
  const sessionsSince = avgInterval > 0 ? Math.max(0, daysSince / avgInterval) : daysSince;
207
119
  return sessionsSince / effectiveHalfLife;
@@ -214,44 +126,14 @@ function decayExponentFor(options, daysSince, halfLifeDays) {
214
126
  }
215
127
  return daysSince / effectiveHalfLife;
216
128
  }
217
- // clock: classic wall-clock decay
218
129
  return daysSince / effectiveHalfLife;
219
130
  }
220
- // Retrieval boost: 1 + 0.1 * log2(retrieval_count + 1). EVAL-ONLY ablation (see ablation.ts) neutralizes
221
- // the READ side too, so counts written before the flag cannot leak strengthening into an ablated arm.
222
- function retrievalBoostFor(entry) {
223
- return isRecallBoostAblated() || netWrong(entry) > 0
131
+ // EVAL-ONLY ablation (see ablation.ts) neutralizes the read side too, so counts written before the flag cannot leak in.
132
+ function retrievalBoostFor(entry, ablation) {
133
+ return ablation.recallBoost || netWrong(entry, ablation) > 0
224
134
  ? 1.0
225
135
  : 1 + RETRIEVAL_BOOST_SLOPE * Math.log2(entry.retrieval_count + 1);
226
136
  }
227
- /** calculateStrength's clock-basis formula as SQL over `memories` columns, flags and multipliers baked in; keep in step.
228
- * An unparseable date scores NULL here and 0 in JS, so sums agree. */
229
- export function strengthSql(now) {
230
- const num = (n) => (Number.isInteger(n) ? n.toFixed(1) : String(n));
231
- const pos = 'COALESCE(outcome_positive, 0)';
232
- const neg = 'COALESCE(outcome_negative, 0)';
233
- const wrong = isOutcomeSlowAblated() || isDecayAblated() ? '0' : `MAX(0, ${neg} - ${pos})`;
234
- const reward = isOutcomeSlowAblated()
235
- ? '1.0'
236
- : `(CASE WHEN ${pos} = 0 AND ${neg} = 0 THEN 1.0 ELSE 1.0 + ${REWARD_SLOPE} * (${pos} - ${neg}) / (${pos} + ${neg} + 1.0) END)`;
237
- const halfLife = `(COALESCE(half_life_days, ${SQL_DEFAULT_HALF_LIFE_DAYS}) * ${reward})`;
238
- const anchor = isRecallBoostAblated() ? 'created' : 'last_retrieved';
239
- const nowJulian = num(now.getTime() / DAY_MS + UNIX_EPOCH_JULIAN_DAY);
240
- const decay = isDecayAblated() ? '1.0' : `pow(${DECAY_BASE}, (${nowJulian} - julianday(${anchor})) / ${halfLife})`;
241
- const boost = isRecallBoostAblated()
242
- ? '1.0'
243
- : `(CASE WHEN ${wrong} > 0 THEN 1.0 ELSE 1.0 + ${RETRIEVAL_BOOST_SLOPE} * log2(COALESCE(retrieval_count, 0) + 1) END)`;
244
- const valences = /* SAFETY: a Record keyed by EmotionalValence */ Object.keys(EMOTIONAL_MULTIPLIERS);
245
- const emotion = `(CASE COALESCE(emotional_valence, 'neutral') ${valences
246
- .map((v) => `WHEN '${v}' THEN ${num(applyLossAversionRatio(v, EMOTIONAL_MULTIPLIERS[v]))}`)
247
- .join(' ')} ELSE 1.0 END)`;
248
- const penalty = `pow(${DECAY_BASE}, MIN(${wrong}, ${MAX_WRONG_HALVINGS}))`;
249
- return `(CASE WHEN pinned THEN ${penalty} WHEN ${halfLife} <= 0 THEN 0.0
250
- ELSE MIN(1.0, MAX(0.0, ${decay} * ${boost} * ${emotion})) * ${penalty} END)`;
251
- }
252
- /**
253
- * Derive half-life based on signals, as per PLAN.md table.
254
- */
255
137
  const HIGH_SCHEMA_FIT = 0.7;
256
138
  const HIGH_FIT_HALF_LIFE_FACTOR = 1.5;
257
139
  const LOW_SCHEMA_FIT = 0.3;
@@ -261,35 +143,25 @@ const TAG_FIT_WEIGHT = 0.6;
261
143
  const CONTENT_FIT_WEIGHT = 0.4;
262
144
  const CONTENT_TOKEN_SHARE_MIN = 0.2;
263
145
  const CONTENT_ENOUGH_FRACTION = 0.1;
146
+ // An error is worth remembering longer than a neutral note (PLAN.md half-life table).
147
+ const ERROR_TAG_HALF_LIFE_FACTOR = 2;
148
+ // Each retrieval lengthens the half-life by this many days (PLAN.md).
149
+ const RETRIEVAL_HALF_LIFE_GAIN_DAYS = 2;
150
+ /** The base half-life scaled by the PLAN.md signals: an error tag, and high or low schema fit. */
264
151
  export function deriveHalfLife(base, entry) {
265
152
  let hl = base;
266
- // Error-tagged: 2x half-life
267
153
  if (entry.tags?.includes('error')) {
268
- hl *= 2;
154
+ hl *= ERROR_TAG_HALF_LIFE_FACTOR;
269
155
  }
270
- // High schema fit: consolidates faster (1.5x)
271
156
  if (entry.schema_fit !== undefined && entry.schema_fit > HIGH_SCHEMA_FIT) {
272
157
  hl *= HIGH_FIT_HALF_LIFE_FACTOR;
273
158
  }
274
- // Low schema fit: decay faster (0.5x)
275
159
  if (entry.schema_fit !== undefined && entry.schema_fit < LOW_SCHEMA_FIT) {
276
160
  hl *= LOW_FIT_HALF_LIFE_FACTOR;
277
161
  }
278
162
  return hl;
279
163
  }
280
- /**
281
- * Apply outcome feedback to a memory entry.
282
- *
283
- * Increments outcome_positive or outcome_negative counters.
284
- * The reward factor in calculateStrength() uses these counts to
285
- * continuously modulate the effective half-life:
286
- * reward_ratio = (pos - neg) / (pos + neg + 1)
287
- * reward_factor = 1 + 0.5 * reward_ratio // range (0.5, 1.5)
288
- * effective_hl = half_life_days * reward_factor
289
- *
290
- * No fixed half-life delta. Decay rate adjusts proportionally to
291
- * cumulative reward signal, inspired by R-STDP in spiking networks.
292
- */
164
+ /** Counts the outcome; calculateStrength turns the counts into a reward factor on the half-life, so there is no fixed delta here. */
293
165
  export function applyOutcome(entry, good) {
294
166
  const updated = {
295
167
  ...entry,
@@ -307,17 +179,17 @@ export function entryAfterOutcome(entry, good) {
307
179
  return updated;
308
180
  return { ...updated, tags: updated.tags.filter((t) => t !== CHURN_STALE_TAG) };
309
181
  }
310
- /**
311
- * Generate a random memory ID using crypto.randomUUID().
312
- */
182
+ /** A new id: `prefix_` plus the first ID_SUFFIX_CHARS hex characters of a random UUID. */
313
183
  export function generateId(prefix = 'mem') {
314
184
  return `${prefix}_${randomUUID().replace(/-/g, '').slice(0, ID_SUFFIX_CHARS)}`;
315
185
  }
186
+ // Days without a retrieval before trust lapses; pinned and verified rows are exempt by policy.
187
+ const AGED_OUT_AFTER_DAYS = 30;
316
188
  function isAgedOut(entry, now) {
317
189
  if (entry.pinned || entry.confidence === 'verified')
318
190
  return false;
319
191
  const lastRetrieved = new Date(entry.last_retrieved);
320
- return (now.getTime() - lastRetrieved.getTime()) / DAY_MS > 30;
192
+ return (now.getTime() - lastRetrieved.getTime()) / DAY_MS > AGED_OUT_AFTER_DAYS;
321
193
  }
322
194
  export function confidenceFacets(entry, now = evalNow()) {
323
195
  return facetsOf(entry, now);
@@ -325,8 +197,7 @@ export function confidenceFacets(entry, now = evalNow()) {
325
197
  export function facetsOf(entry, now) {
326
198
  return { tier: entry.confidence, agedOut: isAgedOut(entry, now) };
327
199
  }
328
- // `warn` covers exactly the rows the old collapsed-value rule did: an aged-out row
329
- // used to read 'stale', so warning on it separately keeps the same set.
200
+ // An aged-out row warns on its own, since its stored tier alone would hide it.
330
201
  export function confidenceLabel(entry, now = evalNow()) {
331
202
  const { tier, agedOut } = confidenceFacets(entry, now);
332
203
  return {
@@ -334,29 +205,16 @@ export function confidenceLabel(entry, now = evalNow()) {
334
205
  warn: agedOut || tier === 'stale' || tier === 'inferred',
335
206
  };
336
207
  }
337
- /**
338
- * Resolve the effective confidence for a memory entry.
339
- * If the entry has not been retrieved in 30+ days and is not 'verified',
340
- * returns 'stale'. Otherwise returns the stored confidence value.
341
- */
208
+ /** The stored confidence, or 'stale' once the entry is aged out (not retrieved for AGED_OUT_AFTER_DAYS; pinned and verified exempt). */
342
209
  export function resolveConfidence(entry, now = evalNow()) {
343
210
  return isAgedOut(entry, now) ? 'stale' : entry.confidence;
344
211
  }
345
- /**
346
- * Base half-life for a new memory, in days, before `deriveHalfLife`'s
347
- * write-time multipliers. 365 because 7 days lost the current fact far more
348
- * often, and 730 days or no decay did no better. `hippo sleep` moves memories still
349
- * on an older base (src/consolidate/half-life-migration.ts).
350
- */
212
+ /** Base half-life in days before deriveHalfLife's multipliers: 365 because 7 lost the current fact far more often and 730 did no better.
213
+ * `hippo sleep` moves memories still on an older base (src/consolidate/half-life-migration.ts). */
351
214
  export const DEFAULT_HALF_LIFE_DAYS = 365;
352
215
  export const COMPACTION_MEMORY_TAG = 'compaction-memory';
353
216
  export const COMPACTION_SOURCE_PREFIX = 'compaction:';
354
217
  export const KEEP_PAIRS = AGENT_MEMORY_TOOLS.map((t) => ({ tag: t.tag, sourcePrefix: toolSourcePrefix(t.id) }));
355
- const sqlText = (s) => `'${s.replace(/'/g, "''")}'`;
356
- // json_each matches the tag as a whole element; substr, not LIKE, keeps the prefix case-sensitive like startsWith.
357
- const keepPairSql = (p) => `(COALESCE(superseded_by, '') = '' AND EXISTS (SELECT 1 FROM json_each(CASE WHEN json_valid(tags_json) THEN tags_json ELSE '[]' END) WHERE value = ${sqlText(p.tag)}) AND substr(source, 1, ${p.sourcePrefix.length}) = ${sqlText(p.sourcePrefix)})`;
358
- // Pinned and kept rows stay (a superseded row is not kept: its successor carries the tag and source); raw rows leave only through archiveRawMemory. The SQL twin guards the DELETE itself.
359
- export const AUTO_DELETABLE_SQL = `pinned = 0 AND kind != 'raw'${KEEP_PAIRS.map((p) => ` AND NOT ${keepPairSql(p)}`).join('')}`;
360
218
  export function isKeptForGood(entry) {
361
219
  return !entry.superseded_by && KEEP_PAIRS.some((p) => entry.tags.includes(p.tag) && entry.source.startsWith(p.sourcePrefix));
362
220
  }
@@ -403,9 +261,8 @@ export function createMemory(content, options = {}) {
403
261
  scope: options.scope ?? null,
404
262
  owner: options.owner ?? null,
405
263
  artifact_ref: options.artifact_ref ?? null,
406
- tenantId: options.tenantId ?? 'default',
264
+ tenantId: options.tenantId ?? DEFAULT_TENANT_ID,
407
265
  };
408
- // Recalculate strength with the emotional multiplier applied
409
266
  entry.strength = calculateStrength(entry);
410
267
  return entry;
411
268
  }
@@ -433,29 +290,25 @@ export function createSuccessor(old, content, opts) {
433
290
  baseHalfLifeDays: opts.baseHalfLifeDays,
434
291
  });
435
292
  // A legacy null origin has nothing to carry, so the store stamps it from its own location.
436
- if (typeof old.origin_project === 'string') {
293
+ if (isJsonString(old.origin_project)) {
437
294
  next.origin_project = old.origin_project;
438
295
  }
439
296
  return next;
440
297
  }
441
- /**
442
- * Compute how well new content fits existing knowledge patterns.
443
- * Returns 0..1 where:
444
- * >0.7 = high fit (consistent with existing knowledge, consolidates faster)
445
- * 0.3-0.7 = moderate fit
446
- * <0.3 = novel (doesn't match existing patterns, decays faster if unused)
447
- *
448
- * Uses tag overlap (always available) weighted by how common each tag is.
449
- * Rare shared tags signal stronger schema fit than common ones.
450
- */
298
+ /** How well new content fits existing knowledge, 0..1: above 0.7 consolidates faster, below 0.3 is novel and decays faster if unused.
299
+ * Tags shared with existing memories count by rarity (a rare shared tag fits more), plus content-token overlap. */
451
300
  export function computeSchemaFit(content, tags, existingEntries) {
301
+ return schemaFitFrom(content, tags, schemaFitSourceOf(existingEntries));
302
+ }
303
+ /** What schema fit reads from `entries`, built once for a caller that scores many contents against the same rows. */
304
+ export function schemaFitSourceOf(entries) {
452
305
  const tagCounts = new Map();
453
- for (const entry of existingEntries) {
306
+ for (const entry of entries) {
454
307
  for (const tag of entry.tags) {
455
308
  tagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);
456
309
  }
457
310
  }
458
- return schemaFitFrom(content, tags, { rows: existingEntries.length, tagCounts, contents: existingEntries.map((e) => e.content) });
311
+ return { rows: entries.length, tagCounts, contents: entries.map((e) => e.content) };
459
312
  }
460
313
  function significantTokens(text) {
461
314
  return new Set(text.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter((t) => t.length > 3));
@@ -464,10 +317,10 @@ function significantTokens(text) {
464
317
  export function schemaFitFrom(content, tags, source) {
465
318
  const N = source.rows;
466
319
  if (N === 0)
467
- return 0.5; // no schema yet, neutral
320
+ return DEFAULT_SCHEMA_FIT;
468
321
  const tagFreq = source.tagCounts;
469
322
  if (tags.length === 0 && tagFreq.size === 0)
470
- return 0.5;
323
+ return DEFAULT_SCHEMA_FIT;
471
324
  // Tag overlap, weighted so a shared rare tag counts for more than a shared common one.
472
325
  let weightedOverlap = 0;
473
326
  let totalWeight = 0;
@@ -509,41 +362,25 @@ function inferValence(tags) {
509
362
  return 'positive';
510
363
  return 'neutral';
511
364
  }
512
- /**
513
- * Update retrieval metadata on entries that were returned by a search.
514
- * Returns the mutated copies (caller must persist to disk).
515
- *
516
- * EVAL-ONLY ablation (see ablation.ts): with HIPPO_ABLATE_RECALL_BOOST set,
517
- * this returns the entries UNMUTATED - neutralizing all three strengthening
518
- * sub-effects (clock reset, retrieval_count, half-life increment) at the
519
- * single shared write site. The entries (not an empty array) must be
520
- * returned because callers derive `last_retrieval_ids` from the return
521
- * value, and a later `hippo outcome --good/--bad` targets those ids - an
522
- * empty return would silently co-ablate the outcome channel in the
523
- * strengthen-off arm. PERSISTENCE is gated separately at
524
- * each persisting caller (CLI recall, api context, MCP recall/context,
525
- * consolidation replay): writeEntry on identical rows still refreshes
526
- * updated_at, rewrites mirrors, and marks DAG parents dirty,
527
- * so those write loops skip under the flag.
528
- * The default `now` honors HIPPO_FAKE_NOW (simulated-time protocols).
529
- */
530
- // Confidence is deliberately absent below: it is an epistemic tier, not a
531
- // recency signal, and a stored 'stale' is always a deliberate mark.
532
- export function markRetrieved(entries, now = evalNow()) {
533
- if (isRecallBoostAblated())
365
+ /** Returns copies with the retrieval count, clock and half-life updated; the caller persists them.
366
+ * Under HIPPO_ABLATE_RECALL_BOOST (eval-only) the entries come back unchanged, not empty, since callers derive last_retrieval_ids from them. */
367
+ export function markRetrieved(entries, now = evalNow(), options = {}) {
368
+ const ablation = options.ablation ?? NO_STRENGTH_ABLATION;
369
+ if (ablation.recallBoost)
534
370
  return entries;
535
371
  return entries.map((e) => {
536
372
  if (e.superseded_by)
537
373
  return e;
538
- const wrong = netWrong(e) > 0;
374
+ const wrong = netWrong(e, ablation) > 0;
375
+ // Confidence stays untouched: it is an epistemic tier, not a recency signal.
539
376
  const updated = {
540
377
  ...e,
541
378
  retrieval_count: e.retrieval_count + 1,
379
+ // A wrong memory keeps both, since last_retrieved is the decay anchor.
542
380
  last_retrieved: wrong ? e.last_retrieved : now.toISOString(),
543
- // +2 days half-life per retrieval (PLAN.md); a wrong memory keeps both, since last_retrieved is the decay anchor
544
- half_life_days: wrong ? e.half_life_days : e.half_life_days + 2,
381
+ half_life_days: wrong ? e.half_life_days : e.half_life_days + RETRIEVAL_HALF_LIFE_GAIN_DAYS,
545
382
  };
546
- updated.strength = calculateStrength(updated, now);
383
+ updated.strength = calculateStrength(updated, now, { ablation });
547
384
  return updated;
548
385
  });
549
386
  }
@@ -1,4 +1,4 @@
1
- import { type MemoryEntry } from '../core/memory.js';
1
+ import { type MemoryEntry } from './memory.js';
2
2
  /** The row that replaces a merged row once its retired texts leave: undefined when it holds none, null when nothing else is left. */
3
3
  export declare function mergedSuccessor(row: MemoryEntry, retired: (text: string) => boolean, retiredIds: ReadonlySet<string>): MemoryEntry | null | undefined;
4
4
  /** Sleep's check on a merged row: drops texts whose source was superseded since the merge, or that a rejection now covers. */
@@ -1,6 +1,7 @@
1
1
  // A sleep-merged row copies its sources' texts, so retiring a text (reject, or superseding its source) must reach the row too.
2
- // SHORTCUT: reject rewrites merged rows at once, live and dormant; supersede and `resolve --reject-loser` wait for the next sleep's check, which sees a dormant row only once restored.
3
- import { generateId } from '../core/memory.js';
2
+ // SHORTCUT: reject rewrites merged rows at once, live and dormant; supersede and `resolve
3
+ // --reject-loser` wait for the next sleep's check, which sees a dormant row only once restored.
4
+ import { generateId } from './memory.js';
4
5
  import { duplicateKey, heldTexts, mergedText } from '../util/same-text.js';
5
6
  /** The row that replaces a merged row once its retired texts leave: undefined when it holds none, null when nothing else is left. */
6
7
  export function mergedSuccessor(row, retired, retiredIds) {
@@ -0,0 +1,3 @@
1
+ /** The package folder: it holds package.json, bin/ and dist-ui/. The same two steps up from src/core and from dist/core. */
2
+ export declare const PACKAGE_ROOT: string;
3
+ //# sourceMappingURL=package-root.d.ts.map
@@ -0,0 +1,5 @@
1
+ import * as path from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ /** The package folder: it holds package.json, bin/ and dist-ui/. The same two steps up from src/core and from dist/core. */
4
+ export const PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
5
+ //# sourceMappingURL=package-root.js.map
@@ -1,7 +1,4 @@
1
- /**
2
- * Physics engine configuration for Hippo memory-as-physics.
3
- * All constants are tunable; defaults calibrated for ~500 memory corpus.
4
- */
1
+ /** Physics engine configuration for Hippo memory-as-physics. All constants are tunable; defaults calibrated for ~500 memory corpus. */
5
2
  export interface PhysicsConfig {
6
3
  /** Use physics scoring when embeddings available. 'auto' = yes if embeddings exist. */
7
4
  enabled: boolean | 'auto';
@@ -1,12 +1,7 @@
1
- /**
2
- * Physics engine configuration for Hippo memory-as-physics.
3
- * All constants are tunable; defaults calibrated for ~500 memory corpus.
4
- */
1
+ /** Physics engine configuration for Hippo memory-as-physics. All constants are tunable; defaults calibrated for ~500 memory corpus. */
5
2
  export const DEFAULT_PHYSICS_CONFIG = {
6
- // Off by default: the paired ablation (benchmarks/physics-ablation/) found
7
- // physics worse than classic hybrid on every metric, CI excluding zero
8
- // (MRR 0.68 vs 0.84, R@5 74% vs 84%). Opt in with physics.enabled 'auto'
9
- // or true.
3
+ // Off by default: the paired ablation (benchmarks/physics-ablation/) found physics worse than classic hybrid on every metric, CI excluding zero
4
+ // (MRR 0.68 vs 0.84, R@5 74% vs 84%). Opt in with physics.enabled 'auto' or true.
10
5
  enabled: false,
11
6
  G_query: 2.0,
12
7
  G_memory: 0.01,