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,23 +1,7 @@
1
- /**
2
- * Learned memory-value scorer, wired into the sleep decay pass as a
3
- * rescue-only veto.
4
- *
5
- * computeMvFeatures mirrors benchmarks/memory-value/extract.mjs's
6
- * computeFeatures for the 8 live dims the fitter optimized over
7
- * (FIT_DIMS) — the only dims MEMORY_VALUE_WEIGHTS carries a weight for.
8
- * Any future edit to either side must keep them byte-equivalent; the parity
9
- * test in tests/memory-value-wiring.test.ts enforces this.
10
- *
11
- * scoreEntries mirrors benchmarks/memory-value/evaluate.mjs's per-store
12
- * min-max normalization + weighted scorer (no additional orientation
13
- * multiply — the frozen weights already encode sign/orientation).
14
- *
15
- * rescueSet implements rescue-only semantics: a condemned entry is
16
- * rescued iff its learned score ranks in the top 30% (RESCUE_BUDGET, the
17
- * measured keep-budget operating point) of its own tenant's non-pinned
18
- * candidate set. Deletes(flag-on) subset Deletes(flag-off) by construction — this
19
- * function can only ever shrink the condemned set, never grow it.
20
- */
1
+ /** Learned memory-value scorer, a rescue-only veto in the sleep decay pass (it can only shrink the condemned set); mirrors benchmarks/memory-value/*.mjs.
2
+ * rescueSet rescues a condemned entry iff it ranks in the top 30% (RESCUE_BUDGET) of its tenant's non-pinned set; memory-value-wiring.test.ts guards parity. */
3
+ import { DEFAULT_TENANT_ID } from '../util/env.js';
4
+ import { strengthAblation } from '../core/ablation.js';
21
5
  import { calculateStrength } from '../core/memory.js';
22
6
  import { compareEntryIdentity } from '../core/compare.js';
23
7
  import { MEMORY_VALUE_WEIGHTS, SOURCE_ARTIFACT_SHA256 } from './memory-value-weights.js';
@@ -36,32 +20,11 @@ export const MV_FEATURE_NAMES = [
36
20
  /** The keep-budget operating point (the only point with measured
37
21
  * evidence): a code constant tied to that evidence, not user-tunable. */
38
22
  const RESCUE_BUDGET = 0.3;
39
- /**
40
- * Small-tenant degeneracy: below this per-tenant non-pinned candidate-set
41
- * size, a rank statistic is noise (the measured evidence says nothing about
42
- * tiny scale), and the floor prevents immortal-entry
43
- * convergence: keepN=ceil(0.3*N) guarantees >=1 rescue at N=1, so without a
44
- * floor a condemned-only 1-entry tenant would be rescued every single sleep
45
- * forever. A condemned-only tenant below the floor instead drains normally
46
- * as entries are deleted: the surviving rescued subset only ever shrinks
47
- * toward 0, never regrows past 10 to regain eligibility on its own. Code
48
- * constant tied to that reasoning, not user-tunable (same posture as
49
- * RESCUE_BUDGET).
50
- */
23
+ /** Per-tenant floor on the non-pinned candidate set: below it ranks are noise, and keepN=ceil(0.3*N) would rescue a 1-entry tenant's entry every sleep forever.
24
+ * A code constant tied to that reasoning, not user-tunable (like RESCUE_BUDGET). */
51
25
  const MIN_RESCUE_GROUP = 10;
52
- /**
53
- * Blind v1 feature dict for one MemoryEntry, restricted to the 8 dims the
54
- * frozen weights carry (mirrors extract.mjs's computeFeatures).
55
- *
56
- * CRITICAL: `strength` is CLOCK-BASIS `calculateStrength(entry, now)` with
57
- * NO DecayOptions — that is how the frozen weights' training features were
58
- * computed (extract.mjs never passes decayOpts). Passing the production
59
- * decay basis (config.decayBasis via consolidate.ts's decayOpts) into this
60
- * feature would silently break parity with the frozen weight vector. This
61
- * is an intentional divergence from the condemnation TRIGGER in
62
- * consolidate.ts, which keeps using decayOpts as today — only the rescue
63
- * FEATURE is clock-basis.
64
- */
26
+ /** Blind v1 feature dict for one entry, restricted to the 8 dims the frozen weights carry. `strength` is CLOCK-BASIS `calculateStrength(entry, now)` with no
27
+ * DecayOptions, as in the weights' training; passing the production decay basis would silently break parity with the frozen weights. */
65
28
  export function computeMvFeatures(entry, now) {
66
29
  const ageDays = (now.getTime() - Date.parse(entry.created)) / DAY_MS;
67
30
  const pos = entry.outcome_positive ?? 0;
@@ -69,7 +32,7 @@ export function computeMvFeatures(entry, now) {
69
32
  return {
70
33
  age_days: ageDays,
71
34
  half_life_days: entry.half_life_days,
72
- strength: calculateStrength(entry, now), // clock-basis, never decayOpts — see doc comment above
35
+ strength: calculateStrength(entry, now, { ablation: strengthAblation() }), // clock-basis, never the production decay basis — see doc comment above
73
36
  retrieval_count: entry.retrieval_count,
74
37
  outcome_positive: pos,
75
38
  outcome_negative: neg,
@@ -77,16 +40,8 @@ export function computeMvFeatures(entry, now) {
77
40
  content_length: entry.content.length,
78
41
  };
79
42
  }
80
- /**
81
- * Throws if the weight constant is malformed: fewer/extra dims, a
82
- * non-finite weight value, or a missing source digest. Flag-on + a broken
83
- * constant must THROW, never silently behave as flag-off.
84
- *
85
- * Parameterized (defaults to the real frozen singleton) so the throw
86
- * conditions are directly unit-testable without mutating the frozen
87
- * MEMORY_VALUE_WEIGHTS export — mirrors fit.mjs's verifyFrozenWeights
88
- * (see tests/memory-value-fit.test.ts's `describe('verifyFrozenWeights')`).
89
- */
43
+ /** Throws on a malformed weight constant (wrong dims, non-finite weight, missing digest): flag-on with a broken constant must throw, never act as flag-off.
44
+ * Parameterized (default: the frozen singleton) so the throw paths are unit-testable. */
90
45
  function isFiniteWeightValue(value) {
91
46
  return typeof value === 'number' && Number.isFinite(value);
92
47
  }
@@ -105,25 +60,8 @@ export function validateWeights(weights = MEMORY_VALUE_WEIGHTS, digest = SOURCE_
105
60
  throw new Error('memory-value: weights constant is malformed — SOURCE_ARTIFACT_SHA256 digest missing (src/consolidate/memory-value-weights.ts)');
106
61
  }
107
62
  }
108
- /**
109
- * Min-max normalize each of the 8 features over the given entry set
110
- * (constant feature -> 0, matching evaluate.mjs), then score = dot(weights,
111
- * normalized). The normalization context is exactly the entries passed in —
112
- * callers control the bounded scope (per-tenant, non-pinned).
113
- *
114
- * `weights` defaults to the real frozen singleton; parameterized (like
115
- * validateWeights) so callers/tests can score against an explicit vector
116
- * without touching the module singleton.
117
- *
118
- * Non-finite features: Date.parse on a malformed `created`
119
- * string yields NaN, and NaN would silently corrupt every OTHER entry's
120
- * min-max in the same group. An entry with ANY non-finite computed feature
121
- * is excluded from the normalization context entirely (its raw values never
122
- * touch min/max) and always scores -Infinity — the lowest possible score, so
123
- * it sorts to the bottom of its tenant deterministically and (via rescueSet's
124
- * explicit finite-score guard below) can never be rescued. Conservative
125
- * direction: deletes(flag-on) subset deletes(flag-off) still holds.
126
- */
63
+ /** Min-max normalize the 8 features over the given entries (constant -> 0), then score = dot(weights, normalized); callers set the scope.
64
+ * An entry with any non-finite feature (NaN from a malformed `created`) is excluded from normalization and scores -Infinity, so it can never be rescued. */
127
65
  export function scoreEntries(entries, now, weights = MEMORY_VALUE_WEIGHTS) {
128
66
  const raw = new Map();
129
67
  for (const e of entries)
@@ -166,17 +104,8 @@ export function scoreEntries(entries, now, weights = MEMORY_VALUE_WEIGHTS) {
166
104
  }
167
105
  return scores;
168
106
  }
169
- /**
170
- * Groups non-pinned entries by tenantId, scores + ranks each tenant's
171
- * group independently, and returns per-entry rank context for every
172
- * non-pinned entry (not just condemned ones) — the shared basis for both
173
- * rescueSet's rescue decision and consolidate.ts's audit-row rank context,
174
- * so the two never compute the ranking differently.
175
- *
176
- * `weights`/`digest` default to the real frozen singleton — parameterized
177
- * (like validateWeights/scoreEntries) purely for direct unit-testability of
178
- * the fail-loud path, never overridden by production callers.
179
- */
107
+ /** Group non-pinned entries by tenantId, score and rank each group independently, and return rank context for every non-pinned entry;
108
+ * rescueSet and the consolidate audit rows share it so they never compute the ranking differently. */
180
109
  export function rankNonPinnedByTenant(entries, now, weights = MEMORY_VALUE_WEIGHTS, digest = SOURCE_ARTIFACT_SHA256) {
181
110
  validateWeights(weights, digest);
182
111
  const byTenant = new Map();
@@ -185,7 +114,7 @@ export function rankNonPinnedByTenant(entries, now, weights = MEMORY_VALUE_WEIGH
185
114
  continue; // pinned entries never compete for rescue (never condemned)
186
115
  // Default an undefined tenantId as dag.ts:341 does: a raw/legacy row can carry one at runtime,
187
116
  // and keying it "undefined" would split it into its own singleton tenant.
188
- const tenantId = e.tenantId ?? 'default';
117
+ const tenantId = e.tenantId ?? DEFAULT_TENANT_ID;
189
118
  const list = byTenant.get(tenantId);
190
119
  if (list)
191
120
  list.push(e);
@@ -217,24 +146,8 @@ export function rankNonPinnedByTenant(entries, now, weights = MEMORY_VALUE_WEIGH
217
146
  }
218
147
  return result;
219
148
  }
220
- /**
221
- * Rescue decision: a condemned entry is rescued iff it ranks in the top
222
- * 30% of its tenant's non-pinned candidate set by learned score. Returns the
223
- * subset of condemnedIds that are rescued — the caller filters commits
224
- * (rescued -> survivors) and threads the same set into detectConflicts.
225
- *
226
- * `weights`/`digest` default to the real frozen singleton; production
227
- * callers (consolidate.ts) never pass overrides — the params exist purely so
228
- * "flag on + a broken constant throws" is directly testable end-to-end
229
- * through this function without mutating the frozen module singleton.
230
- *
231
- * `precomputedRanks`: when the caller has already
232
- * computed the per-tenant ranking (e.g. consolidate.ts needs it separately
233
- * for detail/audit rank context), pass it here to skip the internal
234
- * rankNonPinnedByTenant call — the whole-store ranking pass then runs
235
- * exactly once per sleep instead of twice. Omitted (the default), rescueSet
236
- * computes it internally as before — existing callers/tests are unaffected.
237
- */
149
+ /** Rescue decision: the subset of condemnedIds ranking in the top 30% of their tenant's non-pinned set by learned score.
150
+ * Pass `precomputedRanks` to skip the internal ranking so the whole-store pass runs once per sleep; `weights`/`digest` overrides exist for tests only. */
238
151
  export function rescueSet(entries, condemnedIds, now, options = {}) {
239
152
  const { weights = MEMORY_VALUE_WEIGHTS, digest = SOURCE_ARTIFACT_SHA256, precomputedRanks } = options;
240
153
  validateWeights(weights, digest); // fail loud before any rescue computation
@@ -3,10 +3,10 @@ import { tokenize } from '../util/tokenize.js';
3
3
  import { jaccardMinShared, overlapPartners } from './overlap-index.js';
4
4
  import { compareEntryIdentity } from '../core/compare.js';
5
5
  import { duplicateKey, mergedText } from '../util/same-text.js';
6
- import { successorAfterRetirement } from './merged-row.js';
6
+ import { successorAfterRetirement } from '../core/merged-row.js';
7
7
  import { rejectionDigest } from '../store/rejection.js';
8
8
  import { reportAuditWriteFailure } from '../store/audit.js';
9
- import { derivationScope, derivationPartitionKey } from '../store/recall-scope.js';
9
+ import { derivationScope, derivationPartitionKey } from '../core/recall-scope.js';
10
10
  import { jaccardSets } from './conflicts.js';
11
11
  import { keptAsWritten } from './run.js';
12
12
  import { isReusable } from '../core/memory-quality.js';
@@ -14,11 +14,8 @@ const MERGE_OVERLAP_THRESHOLD = 0.35; // Jaccard similarity for "related"
14
14
  const MERGE_MIN_CLUSTER = 2; // minimum cluster size to merge
15
15
  const MERGE_MAX_SOURCES = 5; // with MERGE_MAX_CHARS, keeps a merged row near 500 tokens, a third of the 1,500-token context budget
16
16
  const MERGE_MAX_CHARS = 2000; // total source text; sources past either cap stay unmerged and keep their half-life
17
- // Half-life scale for merged source episodics. Demotion must go through
18
- // half_life_days: calculateStrength() recomputes live strength from
19
- // last_retrieved/half_life and never reads the stored strength field, so a
20
- // stored-strength write is inert for ranking and gets overwritten by the
21
- // next sleep's decay pass anyway.
17
+ // Half-life scale for merged source episodics. Demote via half_life_days: calculateStrength() recomputes live strength and never reads the stored field,
18
+ // so a stored-strength write is inert for ranking and overwritten by the next decay pass.
22
19
  const MERGE_SOURCE_HALF_LIFE_FACTOR = 0.3;
23
20
  export function retireHeldTexts(run) {
24
21
  const { survivors } = run;
@@ -63,9 +60,7 @@ function partitionMergeCandidates(survivors) {
63
60
  }
64
61
  return mergeCandidatesByTenant;
65
62
  }
66
- // -------------------------------------------------------------------------
67
63
  // 3. Merge pass - episodic entries only
68
- // -------------------------------------------------------------------------
69
64
  /** Returns how many clusters were skipped because their merged text matches a rejected value. */
70
65
  export function mergePass(run) {
71
66
  const used = new Set();
@@ -123,16 +118,8 @@ function mergeCluster(run, partition, cluster, related, used) {
123
118
  run.pendingWrites.push(semantic);
124
119
  run.units.push([semantic.id, ...cluster.map((e) => e.id)]);
125
120
  result.semanticCreated++;
126
- // Demote source episodics (they've been compressed into neocortex):
127
- // scale half_life_days so they decay sooner while staying recoverable.
128
- // Immediate ranking is deliberately unchanged: dropping children below a
129
- // worse-retrieving summary regresses budget-bounded QA. The stored
130
- // strength is refreshed to the live value so inspect, replay sampling,
131
- // and strength-sorted assembly see the truth instead of a fake 0.3.
132
- // Mutate in place (not a copy): `cluster` holds the same object
133
- // references as `survivors`, and the later detectConflicts(survivors)
134
- // pass in this same run must see the post-demotion half-life, or it
135
- // can persist conflicts for entries the just-written state excludes.
121
+ // Scale half_life_days so merged sources decay sooner but stay recoverable; ranking is unchanged on purpose (demoting children regresses QA).
122
+ // Mutate in place: `cluster` shares references with `survivors`, and the later detectConflicts(survivors) must see the post-demotion half-life.
136
123
  demoteMergedSources(run, cluster);
137
124
  }
138
125
  return true;
@@ -163,14 +150,8 @@ function demoteMergedSources(run, cluster) {
163
150
  run.pendingWrites.push(e);
164
151
  }
165
152
  }
166
- // mergeContents is DETERMINISTIC CONCATENATION (not an LLM paraphrase)
167
- // — if a human rejected exactly this byte-identical rollup before, an
168
- // unguarded sleep would regenerate it every cycle and
169
- // batchWriteAndDelete's guard bypass (store.ts) would silently
170
- // re-assert it forever. This producer-side check is what makes that
171
- // bypass safe. A hit skips the WHOLE cluster: sources stay unmerged —
172
- // not demoted, not deleted — so a later sleep gets another chance if
173
- // the tombstone is lifted.
153
+ // mergeContents is deterministic, so a rollup a human already rejected would regenerate each cycle and batchWriteAndDelete's guard bypass would re-assert it;
154
+ // this producer-side check makes that bypass safe. A hit skips the whole cluster (no demote, no delete) so a later sleep can retry.
174
155
  function mergeRejected(run, semantic, cluster, related, used) {
175
156
  const { tombstones } = run;
176
157
  const newDigest = rejectionDigest(semantic.content);
@@ -180,9 +161,7 @@ function mergeRejected(run, semantic, cluster, related, used) {
180
161
  const mergeDigest = newHit ? newDigest : oldDigest;
181
162
  if (!tombstone)
182
163
  return false;
183
- // Still mark used — these members are not re-tried against a
184
- // DIFFERENT cluster within this same pass; next sleep re-clusters
185
- // them fresh.
164
+ // Still mark used: these members are not re-tried against a different cluster in this pass; the next sleep re-clusters them fresh.
186
165
  const rejected = newHit ? cluster : related; // the old format digested the uncapped list, so rows past the cap were rejected too
187
166
  for (const e of rejected)
188
167
  used.add(e.id);
@@ -203,9 +182,7 @@ function mergeRejected(run, semantic, cluster, related, used) {
203
182
  }
204
183
  return true;
205
184
  }
206
- // ---------------------------------------------------------------------------
207
185
  // Helpers
208
- // ---------------------------------------------------------------------------
209
186
  function mergeContents(entries) {
210
187
  // Each distinct text goes in once and in full (the merge demotes every source), one bullet with its lines indented, so heldTextKeys can read it back.
211
188
  // Newest first says which version is current; compareEntryIdentity settles ties, so the row and its rejection digest depend only on the sources.
@@ -215,7 +192,9 @@ function mergeContents(entries) {
215
192
  if (!texts.has(duplicateKey(e.content)))
216
193
  texts.set(duplicateKey(e.content), e.content);
217
194
  }
218
- const header = entries.length === 2 ? '[Consolidated from 2 related memories, newest first]' : `[Consolidated pattern from ${entries.length} related memories, newest first]`;
195
+ const header = entries.length === 2
196
+ ? '[Consolidated from 2 related memories, newest first]'
197
+ : `[Consolidated pattern from ${entries.length} related memories, newest first]`;
219
198
  return mergedText(header, [...texts.values()]);
220
199
  }
221
200
  function legacyMergeContents(entries) {
@@ -1,3 +1,8 @@
1
+ import { type PhysicsParticle } from '../core/physics.js';
2
+ import type { MemoryEntry } from '../core/memory.js';
1
3
  import type { SleepRun } from './run.js';
2
- export declare function physicsPass(run: SleepRun): void;
4
+ export declare function physicsPass(run: SleepRun, maxParticles?: number): void;
5
+ /** Every stored particle in load order up to the cap; past it, the most recently recalled survivors (memory id breaks ties),
6
+ * then particles with no survivor. */
7
+ export declare function particlesToSimulate(stored: PhysicsParticle[], entries: ReadonlyMap<string, MemoryEntry>, max?: number): PhysicsParticle[];
3
8
  //# sourceMappingURL=physics-pass.d.ts.map
@@ -1,12 +1,12 @@
1
1
  import { refreshParticleProperties } from '../db/physics-state.js';
2
- import { loadStoredParticles, saveStoredParticles } from '../store/vector-writes.js';
2
+ import { loadStoredParticles, saveStoredParticles } from '../store/vector-index.js';
3
3
  import { simulate } from '../core/physics.js';
4
4
  import { errorMessage } from '../util/log.js';
5
5
  const STATS_DECIMALS = 4;
6
- // -------------------------------------------------------------------------
6
+ // Every substep is all-pairs, so one sleep moves at most this many particles; the rest keep their stored state until they are recalled.
7
+ const SLEEP_PHYSICS_MAX_PARTICLES = 1000;
7
8
  // 2. Physics simulation pass
8
- // -------------------------------------------------------------------------
9
- export function physicsPass(run) {
9
+ export function physicsPass(run, maxParticles = SLEEP_PHYSICS_MAX_PARTICLES) {
10
10
  if (run.dryRun)
11
11
  return;
12
12
  const { config, result } = run;
@@ -14,27 +14,45 @@ export function physicsPass(run) {
14
14
  const physicsEnabled = config.physics.enabled === true
15
15
  || (config.physics.enabled === 'auto');
16
16
  if (physicsEnabled)
17
- simulateStoredParticles(run);
17
+ simulateStoredParticles(run, maxParticles);
18
18
  }
19
19
  catch (error) {
20
20
  result.details.push(` ⚠️ physics simulation skipped: ${errorMessage(error)}`);
21
21
  }
22
22
  }
23
- function simulateStoredParticles(run) {
23
+ function simulateStoredParticles(run, maxParticles) {
24
24
  const { result, survivors } = run;
25
- const particles = loadStoredParticles(run.hippoRoot);
26
- if (particles.length === 0)
25
+ const stored = loadStoredParticles(run.hippoRoot);
26
+ if (stored.length === 0)
27
27
  return;
28
28
  // Build entry lookup for property refresh
29
29
  const entryMap = new Map(survivors.map(e => [e.id, e]));
30
+ const particles = particlesToSimulate(stored, entryMap, maxParticles);
30
31
  refreshParticleProperties(particles, entryMap, run.now);
31
32
  const stats = simulate(particles, survivorForces(run));
32
33
  saveStoredParticles(run.hippoRoot, particles);
33
34
  result.physicsSimulated = stats.particleCount;
34
- result.details.push(` ⚛️ physics: ${stats.particleCount} particles, ` +
35
+ const capped = particles.length < stored.length ? ` (the ${particles.length} most recently recalled of ${stored.length})` : '';
36
+ result.details.push(` ⚛️ physics: ${stats.particleCount} particles${capped}, ` +
35
37
  `avg vel ${stats.avgVelocityMagnitude.toFixed(STATS_DECIMALS)}, ` +
36
38
  `energy ${stats.energy.total.toFixed(STATS_DECIMALS)}`);
37
39
  }
40
+ /** Every stored particle in load order up to the cap; past it, the most recently recalled survivors (memory id breaks ties),
41
+ * then particles with no survivor. */
42
+ export function particlesToSimulate(stored, entries, max = SLEEP_PHYSICS_MAX_PARTICLES) {
43
+ if (stored.length <= max)
44
+ return stored;
45
+ const recalled = (p) => entries.get(p.memoryId)?.last_retrieved ?? '';
46
+ const ranked = [...stored].sort((a, b) => {
47
+ const [ra, rb] = [recalled(a), recalled(b)];
48
+ if (ra !== rb)
49
+ return ra < rb ? 1 : -1;
50
+ return a.memoryId < b.memoryId ? -1 : a.memoryId > b.memoryId ? 1 : 0;
51
+ });
52
+ const kept = new Set(ranked.slice(0, max));
53
+ // Load order, not rank order: the force sums run in this order, so a capped run matches an uncapped one over the same set.
54
+ return stored.filter((p) => kept.has(p));
55
+ }
38
56
  function survivorForces(run) {
39
57
  // Build conflict pairs from survivors
40
58
  const conflictPairs = new Map();
@@ -1,41 +1,9 @@
1
- /**
2
- * Replay — biologically-inspired rehearsal during consolidation.
3
- *
4
- * Hippocampal replay is internally-driven reactivation of memories during
5
- * slow-wave sleep: the brain picks important recent experiences and "plays
6
- * them back" without external input, strengthening them before they decay.
7
- * In McClelland's complementary-learning-systems framing, replay is also
8
- * how episodic memories train the neocortex (interleaved rehearsal); in
9
- * reward-modulated STDP, replay is gated by dopamine so rewarded
10
- * experiences get preferentially consolidated.
11
- *
12
- * This module implements a lightweight, deterministic analog. During each
13
- * `hippo sleep`, we sample N surviving memories by a priority score that
14
- * weighs reward feedback, emotional valence, under-rehearsal, and age —
15
- * then apply the same retrieval-strengthening dynamics `markRetrieved`
16
- * applies to real queries. The effect is that important memories stay
17
- * strong even when the user hasn't explicitly queried them recently.
18
- *
19
- * Distinct from the other consolidation passes:
20
- * - decay: removes what's too weak
21
- * - physics: moves particles in embedding space
22
- * - merge: collapses near-duplicate episodics into semantics
23
- * - REPLAY: picks winners and rehearses them (this file)
24
- */
1
+ /** Replay: during `hippo sleep`, sample N survivors weighted by reward, valence, under-rehearsal and age, then apply the `markRetrieved` strengthening.
2
+ * A lightweight deterministic analog of hippocampal replay, so important memories stay strong without being queried; distinct from decay, physics and merge. */
25
3
  import { type MemoryEntry } from '../core/memory.js';
26
- /**
27
- * Priority score used to rank survivors for replay. Higher = more likely
28
- * to be sampled. Pure function of the entry and current time.
29
- */
30
- export declare function replayPriority(entry: MemoryEntry, now: Date): number;
31
- /**
32
- * Pick `count` memories for replay, weighted by `replayPriority`, without
33
- * replacement. Deterministic given the same seed.
34
- *
35
- * The sampler is weighted but not greedy — picking by priority alone would
36
- * always pick the top-N, which overfits. Biological replay shows both
37
- * preferential-for-reward AND stochastic-exploration characteristics; we
38
- * keep the stochastic element so adjacent survivors aren't always ignored.
39
- */
4
+ /** Priority score for ranking survivors for replay (higher = more likely sampled); pure in the entry and current time. */
5
+ export declare function replayPriority(entry: MemoryEntry, now: Date, outcomeAblated: boolean): number;
6
+ /** Pick `count` memories for replay, weighted by `replayPriority`, without replacement; deterministic for a seed.
7
+ * Weighted but not greedy: always taking the top-N overfits, so a stochastic element keeps adjacent survivors in play. */
40
8
  export declare function sampleForReplay(survivors: MemoryEntry[], count: number, now: Date, seed?: number): MemoryEntry[];
41
9
  //# sourceMappingURL=replay.d.ts.map
@@ -1,27 +1,6 @@
1
- /**
2
- * Replay — biologically-inspired rehearsal during consolidation.
3
- *
4
- * Hippocampal replay is internally-driven reactivation of memories during
5
- * slow-wave sleep: the brain picks important recent experiences and "plays
6
- * them back" without external input, strengthening them before they decay.
7
- * In McClelland's complementary-learning-systems framing, replay is also
8
- * how episodic memories train the neocortex (interleaved rehearsal); in
9
- * reward-modulated STDP, replay is gated by dopamine so rewarded
10
- * experiences get preferentially consolidated.
11
- *
12
- * This module implements a lightweight, deterministic analog. During each
13
- * `hippo sleep`, we sample N surviving memories by a priority score that
14
- * weighs reward feedback, emotional valence, under-rehearsal, and age —
15
- * then apply the same retrieval-strengthening dynamics `markRetrieved`
16
- * applies to real queries. The effect is that important memories stay
17
- * strong even when the user hasn't explicitly queried them recently.
18
- *
19
- * Distinct from the other consolidation passes:
20
- * - decay: removes what's too weak
21
- * - physics: moves particles in embedding space
22
- * - merge: collapses near-duplicate episodics into semantics
23
- * - REPLAY: picks winners and rehearses them (this file)
24
- */
1
+ /** Replay: during `hippo sleep`, sample N survivors weighted by reward, valence, under-rehearsal and age, then apply the `markRetrieved` strengthening.
2
+ * A lightweight deterministic analog of hippocampal replay, so important memories stay strong without being queried; distinct from decay, physics and merge. */
3
+ import { HOUR_MS } from '../util/time.js';
25
4
  import { isOutcomeSlowAblated } from '../core/ablation.js';
26
5
  import { resolveConfidence } from '../core/memory.js';
27
6
  const VALENCE_WEIGHT = {
@@ -30,38 +9,35 @@ const VALENCE_WEIGHT = {
30
9
  negative: 1.5,
31
10
  critical: 2.0,
32
11
  };
33
- /**
34
- * Priority score used to rank survivors for replay. Higher = more likely
35
- * to be sampled. Pure function of the entry and current time.
36
- */
37
- export function replayPriority(entry, now) {
12
+ // Floor keeps every weight positive for sampleForReplay; the rest scale reward and idle boosts.
13
+ const REWARD_FLOOR = 0.1;
14
+ const REWARD_POSITIVE_GAIN = 0.5;
15
+ const REWARD_NET_GAIN = 0.25;
16
+ const IDLE_BOOST_GAIN = 0.1;
17
+ const STRENGTH_FLOOR = 0.1;
18
+ /** Priority score for ranking survivors for replay (higher = more likely sampled); pure in the entry and current time. */
19
+ export function replayPriority(entry, now, outcomeAblated) {
38
20
  const pos = entry.outcome_positive ?? 0;
39
21
  const neg = entry.outcome_negative ?? 0;
40
- // Reward signal: neutral memories get 1, strongly-rewarded memories > 1,
41
- // negative-dominated memories floor at 0.1 (so they're still eligible, just
42
- // much less likely to be sampled than neutral peers). Clamp is required
43
- // because sampleForReplay depends on all weights being positive.
44
- const rewardSignal = isOutcomeSlowAblated()
22
+ // Reward signal: neutral = 1, strongly rewarded > 1, negative-dominated floors at 0.1 (still eligible, just unlikely).
23
+ // The clamp is required because sampleForReplay needs all weights positive.
24
+ const rewardSignal = outcomeAblated
45
25
  ? 1.0 // EVAL-ONLY ablation (see ablation.ts): outcome-off also silences replay's reward bias
46
- : Math.max(0.1, 1 + pos * 0.5 + (pos - neg) * 0.25);
26
+ : Math.max(REWARD_FLOOR, 1 + pos * REWARD_POSITIVE_GAIN + (pos - neg) * REWARD_NET_GAIN);
47
27
  const valence = VALENCE_WEIGHT[entry.emotional_valence] ?? 1.0;
48
28
  // Under-rehearsed memories benefit most from replay.
49
29
  const underRehearsed = 1 / (1 + (entry.retrieval_count ?? 0));
50
30
  // Idle-time boost: memories that haven't been touched recently need rehearsal more.
51
31
  const lastRetrieved = new Date(entry.last_retrieved);
52
32
  const deltaMs = now.getTime() - lastRetrieved.getTime();
53
- const ageHours = Number.isFinite(deltaMs) ? Math.max(0, deltaMs / 3_600_000) : 0;
54
- const idleBoost = 1 + Math.log1p(ageHours) * 0.1;
33
+ const ageHours = Number.isFinite(deltaMs) ? Math.max(0, deltaMs / HOUR_MS) : 0;
34
+ const idleBoost = 1 + Math.log1p(ageHours) * IDLE_BOOST_GAIN;
55
35
  // Weight by current strength so dead-and-decaying memories don't waste replay slots.
56
36
  const rawStrength = Number.isFinite(entry.strength) ? entry.strength : 0;
57
- const strengthFloor = Math.max(0.1, rawStrength);
37
+ const strengthFloor = Math.max(STRENGTH_FLOOR, rawStrength);
58
38
  return rewardSignal * valence * underRehearsed * idleBoost * strengthFloor;
59
39
  }
60
- /**
61
- * Deterministic 32-bit RNG (Mulberry32). Same seed → same sequence.
62
- * Keeps replay reproducible for tests and audit runs without bringing
63
- * in a random-number dependency.
64
- */
40
+ /** Deterministic 32-bit RNG (Mulberry32): same seed, same sequence, so replay is reproducible without a random-number dependency. */
65
41
  function mulberry32(seed) {
66
42
  let s = seed >>> 0;
67
43
  return () => {
@@ -71,29 +47,22 @@ function mulberry32(seed) {
71
47
  return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
72
48
  };
73
49
  }
74
- /**
75
- * Pick `count` memories for replay, weighted by `replayPriority`, without
76
- * replacement. Deterministic given the same seed.
77
- *
78
- * The sampler is weighted but not greedy — picking by priority alone would
79
- * always pick the top-N, which overfits. Biological replay shows both
80
- * preferential-for-reward AND stochastic-exploration characteristics; we
81
- * keep the stochastic element so adjacent survivors aren't always ignored.
82
- */
50
+ /** Pick `count` memories for replay, weighted by `replayPriority`, without replacement; deterministic for a seed.
51
+ * Weighted but not greedy: always taking the top-N overfits, so a stochastic element keeps adjacent survivors in play. */
83
52
  export function sampleForReplay(survivors, count, now, seed = Date.now() >>> 0) {
84
53
  if (count <= 0 || survivors.length === 0)
85
54
  return [];
86
55
  const rng = mulberry32(seed);
87
- // Deliberately-marked and aged-out memories are both untrusted; rehearsing
88
- // them would defeat the purpose of staleness, so derive rather than trust
89
- // the stored value (it no longer carries the age-out case, see memory.ts).
56
+ // Deliberately-marked and aged-out memories are both untrusted and rehearsing them defeats staleness, so derive rather than trust
57
+ // the stored value (it no longer carries the age-out case).
90
58
  const eligible = survivors.filter((e) => resolveConfidence(e, now) !== 'stale');
91
59
  if (eligible.length === 0)
92
60
  return [];
61
+ const outcomeAblated = isOutcomeSlowAblated();
93
62
  const pool = eligible.map((entry, idx) => ({
94
63
  entry,
95
64
  idx,
96
- weight: replayPriority(entry, now),
65
+ weight: replayPriority(entry, now, outcomeAblated),
97
66
  }));
98
67
  const want = Math.min(count, pool.length);
99
68
  const chosen = [];
@@ -1,5 +1,5 @@
1
1
  import { ftsDrift } from '../store/entry-row.js';
2
- import { NO_MERGE_TAGS } from '../sharing/shared.js';
2
+ import { NO_MERGE_TAGS } from '../sharing/share.js';
3
3
  export const REPLAY_COUNT_DEFAULT = 5;
4
4
  export function keptAsWritten(entry) {
5
5
  return entry.tags.some((tag) => NO_MERGE_TAGS.has(tag));
@@ -1,11 +1,4 @@
1
- /**
2
- * Consolidation engine ("Sleep") for Hippo.
3
- *
4
- * Steps:
5
- * 1. Decay pass - remove entries below strength threshold
6
- * 2. Merge pass - find episodic entries with high text overlap, create semantic summaries
7
- * 3. Stats tracking
8
- */
1
+ /** Consolidation engine ("Sleep"): decay pass (drop entries below the strength threshold), merge pass (semantic summaries of overlapping episodics), stats. */
9
2
  import { type WriteBudget } from '../util/write-budget.js';
10
3
  import { type ConsolidationResult } from './run.js';
11
4
  /**