hippo-memory 1.72.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (995) hide show
  1. package/README.md +6 -4
  2. package/dist/agent-memories/apply.d.ts +7 -5
  3. package/dist/agent-memories/apply.js +66 -39
  4. package/dist/agent-memories/claude-code.d.ts +8 -2
  5. package/dist/agent-memories/claude-code.js +26 -7
  6. package/dist/agent-memories/copilot.js +2 -1
  7. package/dist/agent-memories/files.js +2 -1
  8. package/dist/agent-memories/legacy.d.ts +6 -3
  9. package/dist/agent-memories/legacy.js +35 -14
  10. package/dist/agent-memories/markdown.d.ts +3 -1
  11. package/dist/agent-memories/markdown.js +3 -1
  12. package/dist/agent-memories/openclaw.js +5 -2
  13. package/dist/agent-memories/plan.js +11 -1
  14. package/dist/agent-memories/project-folds.js +2 -1
  15. package/dist/agent-memories/report.d.ts +4 -1
  16. package/dist/agent-memories/report.js +43 -9
  17. package/dist/agent-memories/source.d.ts +8 -2
  18. package/dist/agent-memories/source.js +11 -3
  19. package/dist/agent-memories/sync.d.ts +7 -2
  20. package/dist/agent-memories/sync.js +141 -101
  21. package/dist/api/assemble.d.ts +6 -4
  22. package/dist/api/assemble.js +11 -5
  23. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  24. package/dist/api/auth/audit.js +58 -0
  25. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
  26. package/dist/api/{auth.js → auth/auth.js} +66 -54
  27. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  28. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
  29. package/dist/api/auth/session-owners.d.ts +10 -0
  30. package/dist/api/auth/session-owners.js +35 -0
  31. package/dist/api/availability.d.ts +3 -1
  32. package/dist/api/availability.js +3 -1
  33. package/dist/api/busy.d.ts +2 -0
  34. package/dist/api/busy.js +2 -0
  35. package/dist/api/cli-surface.d.ts +6 -0
  36. package/dist/api/cli-surface.js +6 -0
  37. package/dist/api/config-of.d.ts +5 -0
  38. package/dist/api/config-of.js +6 -0
  39. package/dist/api/context-auto.d.ts +4 -1
  40. package/dist/api/context-auto.js +14 -4
  41. package/dist/api/context-render.js +14 -7
  42. package/dist/api/context-select.d.ts +4 -1
  43. package/dist/api/context-select.js +31 -34
  44. package/dist/api/context-types.d.ts +38 -12
  45. package/dist/api/context.d.ts +8 -5
  46. package/dist/api/context.js +120 -63
  47. package/dist/api/continuity.d.ts +24 -21
  48. package/dist/api/continuity.js +18 -20
  49. package/dist/api/correction-latency.d.ts +3 -1
  50. package/dist/api/correction-latency.js +3 -1
  51. package/dist/api/error-reply.d.ts +4 -1
  52. package/dist/api/error-reply.js +12 -3
  53. package/dist/api/index.d.ts +39 -23
  54. package/dist/api/index.js +21 -23
  55. package/dist/api/instruction-detect.d.ts +4 -1
  56. package/dist/api/instruction-detect.js +75 -20
  57. package/dist/api/ledger-db.d.ts +15 -11
  58. package/dist/api/ledger-db.js +21 -23
  59. package/dist/api/memories/conflicts.d.ts +33 -0
  60. package/dist/api/memories/conflicts.js +67 -0
  61. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  62. package/dist/api/{forget.js → memories/forget.js} +23 -17
  63. package/dist/api/memories/memories.d.ts +27 -0
  64. package/dist/api/memories/memories.js +52 -0
  65. package/dist/api/memories/outcome.d.ts +22 -0
  66. package/dist/api/memories/outcome.js +28 -0
  67. package/dist/api/memories/promote.d.ts +40 -0
  68. package/dist/api/memories/promote.js +76 -0
  69. package/dist/api/memories/refine.d.ts +10 -0
  70. package/dist/api/memories/refine.js +12 -0
  71. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
  72. package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
  73. package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
  74. package/dist/api/{remember.js → memories/remember.js} +50 -32
  75. package/dist/api/objects/cards.d.ts +39 -0
  76. package/dist/api/{cards.js → objects/cards.js} +12 -14
  77. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  78. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
  79. package/dist/api/objects/goals.d.ts +18 -0
  80. package/dist/api/{goals.js → objects/goals.js} +12 -12
  81. package/dist/api/objects/graph.d.ts +11 -0
  82. package/dist/api/objects/graph.js +16 -0
  83. package/dist/api/objects/objects.d.ts +9 -0
  84. package/dist/api/{objects.js → objects/objects.js} +2 -3
  85. package/dist/api/objects/predictions.d.ts +11 -0
  86. package/dist/api/{predictions.js → objects/predictions.js} +7 -5
  87. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  88. package/dist/api/{projects.js → objects/projects.js} +8 -4
  89. package/dist/api/pilot-arm.d.ts +8 -4
  90. package/dist/api/pilot-arm.js +5 -4
  91. package/dist/api/prompt-hook.d.ts +35 -20
  92. package/dist/api/prompt-hook.js +66 -44
  93. package/dist/api/provenance-coverage.d.ts +3 -1
  94. package/dist/api/provenance-coverage.js +3 -1
  95. package/dist/api/recall/finish.d.ts +185 -0
  96. package/dist/api/recall/finish.js +301 -0
  97. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  98. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
  99. package/dist/api/recall/recall.d.ts +6 -0
  100. package/dist/api/{recall.js → recall/recall.js} +116 -72
  101. package/dist/api/recall/render.d.ts +39 -0
  102. package/dist/api/recall/render.js +60 -0
  103. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  104. package/dist/api/recall/request.js +261 -0
  105. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  106. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  107. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
  108. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  109. package/dist/api/session-end.d.ts +36 -8
  110. package/dist/api/session-end.js +71 -25
  111. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  112. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  113. package/dist/api/sleep/dormant.d.ts +25 -0
  114. package/dist/api/sleep/dormant.js +64 -0
  115. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  116. package/dist/api/sleep/learn.js +138 -0
  117. package/dist/api/sleep/sleep-run.d.ts +38 -0
  118. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
  119. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  120. package/dist/api/sleep/sleep.js +9 -0
  121. package/dist/api/status.d.ts +3 -1
  122. package/dist/api/status.js +3 -1
  123. package/dist/api/store-init.d.ts +4 -1
  124. package/dist/api/store-init.js +4 -1
  125. package/dist/api/tokens.d.ts +10 -9
  126. package/dist/api/tokens.js +9 -10
  127. package/dist/api/types.d.ts +27 -12
  128. package/dist/api/types.js +13 -4
  129. package/dist/capture/caller-session.d.ts +8 -2
  130. package/dist/capture/caller-session.js +16 -6
  131. package/dist/capture/capture-error.d.ts +3 -1
  132. package/dist/capture/capture-error.js +3 -1
  133. package/dist/capture/codex-patch.js +7 -2
  134. package/dist/capture/command.d.ts +4 -2
  135. package/dist/capture/command.js +34 -15
  136. package/dist/capture/compact-resume-caller.js +15 -8
  137. package/dist/capture/compact.d.ts +8 -5
  138. package/dist/capture/compact.js +34 -23
  139. package/dist/capture/compaction-items-caller.js +9 -3
  140. package/dist/capture/compaction-record.d.ts +4 -3
  141. package/dist/capture/compaction-record.js +20 -12
  142. package/dist/capture/compaction-spool.d.ts +18 -9
  143. package/dist/capture/compaction-spool.js +105 -63
  144. package/dist/capture/copilot-transcript.d.ts +11 -3
  145. package/dist/capture/copilot-transcript.js +16 -6
  146. package/dist/capture/extract.js +20 -8
  147. package/dist/capture/failure-caller.js +23 -12
  148. package/dist/capture/failure-reading.d.ts +10 -3
  149. package/dist/capture/failure-reading.js +24 -7
  150. package/dist/capture/pre-compact-caller.js +11 -4
  151. package/dist/capture/session-digest.d.ts +15 -4
  152. package/dist/capture/session-digest.js +39 -13
  153. package/dist/capture/session-end-caller.d.ts +4 -1
  154. package/dist/capture/session-end-caller.js +20 -8
  155. package/dist/capture/session-texts.d.ts +6 -2
  156. package/dist/capture/session-texts.js +22 -7
  157. package/dist/capture/session-worker.d.ts +4 -2
  158. package/dist/capture/session-worker.js +58 -17
  159. package/dist/capture/transcript.d.ts +13 -4
  160. package/dist/capture/transcript.js +32 -10
  161. package/dist/capture/working-state.d.ts +13 -4
  162. package/dist/capture/working-state.js +50 -56
  163. package/dist/cli/api-context.d.ts +14 -2
  164. package/dist/cli/api-context.js +45 -2
  165. package/dist/cli/audit.js +33 -33
  166. package/dist/cli/auth.js +23 -31
  167. package/dist/cli/briefs.d.ts +1 -1
  168. package/dist/cli/briefs.js +20 -15
  169. package/dist/cli/card.d.ts +1 -1
  170. package/dist/cli/card.js +56 -73
  171. package/dist/cli/client.d.ts +12 -5
  172. package/dist/cli/client.js +53 -23
  173. package/dist/cli/compact-resume-payload.d.ts +4 -1
  174. package/dist/cli/compact-resume-payload.js +12 -5
  175. package/dist/cli/context.js +43 -18
  176. package/dist/cli/continuity.d.ts +5 -5
  177. package/dist/cli/continuity.js +90 -107
  178. package/dist/cli/curate.d.ts +5 -4
  179. package/dist/cli/curate.js +55 -77
  180. package/dist/cli/dag.d.ts +1 -1
  181. package/dist/cli/dag.js +14 -17
  182. package/dist/cli/decisions.js +30 -30
  183. package/dist/cli/eval.js +16 -21
  184. package/dist/cli/exit.d.ts +4 -1
  185. package/dist/cli/exit.js +10 -2
  186. package/dist/cli/explain.js +12 -11
  187. package/dist/cli/flag-values.d.ts +1 -1
  188. package/dist/cli/flag-values.js +9 -18
  189. package/dist/cli/github.d.ts +6 -0
  190. package/dist/cli/github.js +25 -13
  191. package/dist/cli/goals.d.ts +1 -1
  192. package/dist/cli/goals.js +39 -56
  193. package/dist/cli/graph.d.ts +1 -1
  194. package/dist/cli/graph.js +15 -11
  195. package/dist/cli/hook-runtime.d.ts +34 -10
  196. package/dist/cli/hook-runtime.js +41 -16
  197. package/dist/cli/incidents.d.ts +1 -1
  198. package/dist/cli/incidents.js +25 -25
  199. package/dist/cli/init.d.ts +1 -1
  200. package/dist/cli/init.js +35 -20
  201. package/dist/cli/install-steps.d.ts +12 -3
  202. package/dist/cli/install-steps.js +42 -18
  203. package/dist/cli/last-sleep.d.ts +4 -1
  204. package/dist/cli/last-sleep.js +9 -4
  205. package/dist/cli/maintenance.d.ts +1 -1
  206. package/dist/cli/maintenance.js +11 -12
  207. package/dist/cli/notes.d.ts +1 -1
  208. package/dist/cli/notes.js +8 -5
  209. package/dist/cli/object-verbs.d.ts +5 -5
  210. package/dist/cli/object-verbs.js +13 -16
  211. package/dist/cli/open-browser.js +11 -2
  212. package/dist/cli/playbooks.d.ts +3 -3
  213. package/dist/cli/playbooks.js +40 -32
  214. package/dist/cli/predictions.js +17 -22
  215. package/dist/cli/print.js +4 -2
  216. package/dist/cli/projects.js +21 -11
  217. package/dist/cli/quality-repair-once.d.ts +1 -1
  218. package/dist/cli/quality-repair-once.js +7 -6
  219. package/dist/cli/recall.js +129 -93
  220. package/dist/cli/refine-llm.d.ts +15 -4
  221. package/dist/cli/refine-llm.js +17 -7
  222. package/dist/cli/remember.js +51 -55
  223. package/dist/cli/scheduler.d.ts +4 -1
  224. package/dist/cli/scheduler.js +9 -5
  225. package/dist/cli/serve.js +28 -18
  226. package/dist/cli/session-hooks.d.ts +2 -6
  227. package/dist/cli/session-hooks.js +140 -112
  228. package/dist/cli/setup.d.ts +1 -1
  229. package/dist/cli/setup.js +56 -34
  230. package/dist/cli/shared.d.ts +4 -2
  231. package/dist/cli/shared.js +26 -11
  232. package/dist/cli/slack.js +15 -24
  233. package/dist/cli/sleep-render.d.ts +3 -1
  234. package/dist/cli/sleep-render.js +8 -5
  235. package/dist/cli/sleep.js +16 -8
  236. package/dist/cli/status.d.ts +4 -4
  237. package/dist/cli/status.js +32 -27
  238. package/dist/cli/stdin.d.ts +10 -3
  239. package/dist/cli/stdin.js +10 -3
  240. package/dist/cli/transfer.d.ts +4 -4
  241. package/dist/cli/transfer.js +97 -82
  242. package/dist/cli/usage.d.ts +1 -1
  243. package/dist/cli/usage.js +1 -1
  244. package/dist/cli/verb-row.d.ts +2 -0
  245. package/dist/cli/verbs/health.js +2 -0
  246. package/dist/cli/verbs/memory.js +47 -53
  247. package/dist/cli/verbs/objects.js +16 -7
  248. package/dist/cli/verbs/sessions.js +4 -2
  249. package/dist/cli/versioned-verbs.d.ts +8 -7
  250. package/dist/cli/versioned-verbs.js +31 -21
  251. package/dist/cli.js +14 -18
  252. package/dist/connectors/dlq.d.ts +6 -6
  253. package/dist/connectors/dlq.js +12 -7
  254. package/dist/connectors/github/backfill.d.ts +4 -4
  255. package/dist/connectors/github/backfill.js +6 -4
  256. package/dist/connectors/github/deletion.d.ts +6 -4
  257. package/dist/connectors/github/deletion.js +5 -4
  258. package/dist/connectors/github/dlq.d.ts +8 -6
  259. package/dist/connectors/github/dlq.js +11 -5
  260. package/dist/connectors/github/ingest.d.ts +2 -2
  261. package/dist/connectors/github/ingest.js +9 -5
  262. package/dist/connectors/github/octokit-client.d.ts +3 -1
  263. package/dist/connectors/github/octokit-client.js +7 -2
  264. package/dist/connectors/github/ratelimit.d.ts +6 -2
  265. package/dist/connectors/github/ratelimit.js +6 -2
  266. package/dist/connectors/github/signature.d.ts +14 -3
  267. package/dist/connectors/github/signature.js +17 -3
  268. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  269. package/dist/connectors/github/tenant-routing.js +6 -5
  270. package/dist/connectors/github/transform.js +50 -67
  271. package/dist/connectors/github/types.d.ts +10 -3
  272. package/dist/connectors/github/types.js +6 -2
  273. package/dist/connectors/github/webhook.d.ts +5 -5
  274. package/dist/connectors/github/webhook.js +36 -23
  275. package/dist/connectors/ingest.d.ts +5 -3
  276. package/dist/connectors/ingest.js +3 -3
  277. package/dist/connectors/slack/backfill.d.ts +5 -5
  278. package/dist/connectors/slack/backfill.js +3 -3
  279. package/dist/connectors/slack/deletion.d.ts +4 -4
  280. package/dist/connectors/slack/deletion.js +6 -5
  281. package/dist/connectors/slack/dlq.d.ts +4 -4
  282. package/dist/connectors/slack/dlq.js +6 -6
  283. package/dist/connectors/slack/ingest.d.ts +6 -4
  284. package/dist/connectors/slack/ingest.js +5 -4
  285. package/dist/connectors/slack/signature.d.ts +4 -1
  286. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  287. package/dist/connectors/slack/tenant-routing.js +6 -5
  288. package/dist/connectors/slack/transform.d.ts +6 -2
  289. package/dist/connectors/slack/transform.js +6 -2
  290. package/dist/connectors/slack/types.d.ts +3 -1
  291. package/dist/connectors/slack/web-client.js +8 -3
  292. package/dist/connectors/slack/webhook.d.ts +5 -5
  293. package/dist/connectors/slack/webhook.js +19 -11
  294. package/dist/connectors/slack/workspaces.d.ts +7 -3
  295. package/dist/connectors/slack/workspaces.js +7 -3
  296. package/dist/connectors/store.d.ts +8 -0
  297. package/dist/connectors/store.js +2 -0
  298. package/dist/consolidate/conflicts.js +24 -10
  299. package/dist/consolidate/dag-summary.js +2 -1
  300. package/dist/consolidate/dag.d.ts +10 -5
  301. package/dist/consolidate/dag.js +45 -39
  302. package/dist/consolidate/decay.js +19 -6
  303. package/dist/consolidate/dedupe.d.ts +14 -5
  304. package/dist/consolidate/dedupe.js +28 -17
  305. package/dist/consolidate/flush-units.d.ts +4 -1
  306. package/dist/consolidate/flush-units.js +4 -1
  307. package/dist/consolidate/half-life-migration.d.ts +18 -8
  308. package/dist/consolidate/half-life-migration.js +48 -18
  309. package/dist/consolidate/llm-passes.js +27 -11
  310. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  311. package/dist/consolidate/memory-value-weights.js +6 -2
  312. package/dist/consolidate/memory-value.d.ts +30 -10
  313. package/dist/consolidate/memory-value.js +37 -14
  314. package/dist/consolidate/merge.d.ts +4 -1
  315. package/dist/consolidate/merge.js +47 -37
  316. package/dist/consolidate/overlap-index.d.ts +8 -2
  317. package/dist/consolidate/overlap-index.js +11 -4
  318. package/dist/consolidate/physics-pass.d.ts +3 -1
  319. package/dist/consolidate/physics-pass.js +10 -7
  320. package/dist/consolidate/replay.d.ts +11 -4
  321. package/dist/consolidate/replay.js +19 -7
  322. package/dist/consolidate/run.d.ts +13 -5
  323. package/dist/consolidate/run.js +4 -4
  324. package/dist/consolidate/sleep.d.ts +14 -6
  325. package/dist/consolidate/sleep.js +42 -39
  326. package/dist/consolidate/trace.d.ts +7 -2
  327. package/dist/consolidate/trace.js +7 -2
  328. package/dist/consolidate/traces.js +27 -30
  329. package/dist/core/ablation.d.ts +9 -3
  330. package/dist/core/ablation.js +14 -4
  331. package/dist/core/active-scope.d.ts +3 -1
  332. package/dist/core/active-scope.js +3 -1
  333. package/dist/core/agent-memory-tools.d.ts +2 -0
  334. package/dist/core/agent-memory-tools.js +2 -0
  335. package/dist/core/ambient.d.ts +4 -3
  336. package/dist/core/ambient.js +8 -6
  337. package/dist/core/api-errors.d.ts +9 -3
  338. package/dist/core/api-errors.js +9 -3
  339. package/dist/core/capture-contract.d.ts +4 -1
  340. package/dist/core/capture-contract.js +27 -8
  341. package/dist/core/compare.d.ts +24 -8
  342. package/dist/core/compare.js +24 -8
  343. package/dist/core/config.d.ts +18 -9
  344. package/dist/core/config.js +38 -29
  345. package/dist/core/cosine.d.ts +4 -1
  346. package/dist/core/cosine.js +4 -1
  347. package/dist/core/handoff.d.ts +7 -2
  348. package/dist/core/handoff.js +4 -1
  349. package/dist/core/markdown.js +22 -17
  350. package/dist/core/memory-audit.js +14 -3
  351. package/dist/core/memory-quality.d.ts +12 -3
  352. package/dist/core/memory-quality.js +57 -21
  353. package/dist/core/memory.d.ts +87 -30
  354. package/dist/core/memory.js +82 -33
  355. package/dist/core/merged-row.d.ts +8 -2
  356. package/dist/core/merged-row.js +10 -3
  357. package/dist/core/package-root.d.ts +3 -1
  358. package/dist/core/package-root.js +3 -1
  359. package/dist/core/particle-refresh.d.ts +8 -0
  360. package/dist/core/particle-refresh.js +22 -0
  361. package/dist/core/physics-config.d.ts +4 -1
  362. package/dist/core/physics-config.js +6 -2
  363. package/dist/core/physics.d.ts +39 -11
  364. package/dist/core/physics.js +71 -21
  365. package/dist/core/project-identity.d.ts +34 -17
  366. package/dist/core/project-identity.js +35 -18
  367. package/dist/core/project-remote.d.ts +8 -4
  368. package/dist/core/project-remote.js +31 -14
  369. package/dist/core/recall-scope.d.ts +33 -11
  370. package/dist/core/recall-scope.js +42 -15
  371. package/dist/core/rejection-digest.d.ts +7 -0
  372. package/dist/core/rejection-digest.js +13 -0
  373. package/dist/core/salience.d.ts +3 -1
  374. package/dist/core/salience.js +10 -4
  375. package/dist/core/search-types.d.ts +15 -2
  376. package/dist/core/search-types.js +11 -0
  377. package/dist/dashboard/dashboard-actions.d.ts +2 -2
  378. package/dist/dashboard/dashboard-actions.js +18 -7
  379. package/dist/dashboard/dashboard-queries.js +2 -7
  380. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  381. package/dist/dashboard/dashboard-snapshot.js +5 -7
  382. package/dist/dashboard/dashboard.js +22 -8
  383. package/dist/db/backup.js +2 -2
  384. package/dist/db/busy.d.ts +10 -3
  385. package/dist/db/busy.js +27 -5
  386. package/dist/db/connect.d.ts +10 -2
  387. package/dist/db/connect.js +8 -2
  388. package/dist/db/continuity.d.ts +1 -1
  389. package/dist/db/continuity.js +27 -11
  390. package/dist/db/meta.d.ts +4 -1
  391. package/dist/db/meta.js +4 -1
  392. package/dist/db/migrate.d.ts +10 -5
  393. package/dist/db/migrate.js +40 -20
  394. package/dist/db/migrations/index.d.ts +1 -1
  395. package/dist/db/migrations/index.js +3 -1
  396. package/dist/db/migrations/types.d.ts +2 -1
  397. package/dist/db/migrations/v11.js +1 -0
  398. package/dist/db/migrations/v12.js +2 -1
  399. package/dist/db/migrations/v14.js +2 -0
  400. package/dist/db/migrations/v15.js +4 -2
  401. package/dist/db/migrations/v16.js +6 -3
  402. package/dist/db/migrations/v17.js +2 -1
  403. package/dist/db/migrations/v19.js +4 -2
  404. package/dist/db/migrations/v20.js +2 -1
  405. package/dist/db/migrations/v22.js +12 -6
  406. package/dist/db/migrations/v23.js +6 -3
  407. package/dist/db/migrations/v24.js +6 -3
  408. package/dist/db/migrations/v25.js +4 -2
  409. package/dist/db/migrations/v26.js +4 -2
  410. package/dist/db/migrations/v27.js +6 -3
  411. package/dist/db/migrations/v28.js +4 -2
  412. package/dist/db/migrations/v29.js +4 -2
  413. package/dist/db/migrations/v30.js +6 -3
  414. package/dist/db/migrations/v31.js +4 -2
  415. package/dist/db/migrations/v32.js +6 -3
  416. package/dist/db/migrations/v33.js +4 -2
  417. package/dist/db/migrations/v34.js +2 -1
  418. package/dist/db/migrations/v35.js +2 -1
  419. package/dist/db/migrations/v36.js +2 -1
  420. package/dist/db/migrations/v37.js +10 -5
  421. package/dist/db/migrations/v38.js +10 -5
  422. package/dist/db/migrations/v39.js +14 -6
  423. package/dist/db/migrations/v40.js +4 -2
  424. package/dist/db/migrations/v41.js +4 -2
  425. package/dist/db/migrations/v42.js +2 -1
  426. package/dist/db/migrations/v44.js +4 -2
  427. package/dist/db/migrations/v45.js +4 -2
  428. package/dist/db/migrations/v49.js +2 -1
  429. package/dist/db/migrations/v50.js +4 -2
  430. package/dist/db/migrations/v51.js +4 -2
  431. package/dist/db/migrations/v52.js +2 -1
  432. package/dist/db/migrations/v53.js +8 -4
  433. package/dist/db/migrations/v54.js +2 -1
  434. package/dist/db/migrations/v55.js +4 -2
  435. package/dist/db/migrations/v56.d.ts +3 -0
  436. package/dist/db/migrations/v56.js +28 -0
  437. package/dist/db/open.d.ts +24 -12
  438. package/dist/db/open.js +25 -13
  439. package/dist/db/physics-state.d.ts +8 -8
  440. package/dist/db/physics-state.js +17 -50
  441. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  442. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  443. package/dist/db/request-stores.d.ts +20 -5
  444. package/dist/db/request-stores.js +15 -5
  445. package/dist/db/tables.d.ts +2 -1
  446. package/dist/db/tables.js +12 -4
  447. package/dist/db/vector-store.d.ts +13 -4
  448. package/dist/db/vector-store.js +35 -14
  449. package/dist/db/wal-checkpointer.d.ts +2 -1
  450. package/dist/db/wal-checkpointer.js +19 -7
  451. package/dist/doctor.d.ts +7 -1
  452. package/dist/doctor.js +128 -46
  453. package/dist/embeddings/local.d.ts +8 -4
  454. package/dist/embeddings/local.js +11 -7
  455. package/dist/embeddings/provider.d.ts +19 -10
  456. package/dist/embeddings/provider.js +32 -27
  457. package/dist/embeddings/transformers.d.ts +16 -4
  458. package/dist/embeddings/transformers.js +32 -15
  459. package/dist/entry/json-hooks.d.ts +1 -1
  460. package/dist/entry/json-hooks.js +1 -1
  461. package/dist/entry/project-identity.js +2 -1
  462. package/dist/entry/session-text.d.ts +1 -1
  463. package/dist/entry/session-text.js +1 -1
  464. package/dist/entry/sqlite-handles.d.ts +10 -0
  465. package/dist/entry/sqlite-handles.js +9 -0
  466. package/dist/entry/store-kit.d.ts +50 -0
  467. package/dist/entry/store-kit.js +27 -0
  468. package/dist/entry/testing.d.ts +6 -0
  469. package/dist/entry/testing.js +7 -0
  470. package/dist/eval/eval-stats.d.ts +27 -8
  471. package/dist/eval/eval-stats.js +17 -5
  472. package/dist/eval/eval-suite.d.ts +3 -1
  473. package/dist/eval/eval-suite.js +409 -187
  474. package/dist/eval/eval.d.ts +8 -2
  475. package/dist/eval/eval.js +8 -2
  476. package/dist/eval/judgment.js +17 -7
  477. package/dist/graph/delta.d.ts +9 -42
  478. package/dist/graph/delta.js +17 -11
  479. package/dist/graph/extract.d.ts +10 -7
  480. package/dist/graph/extract.js +57 -25
  481. package/dist/graph/recall.d.ts +12 -4
  482. package/dist/graph/recall.js +30 -13
  483. package/dist/graph/stream.d.ts +18 -6
  484. package/dist/graph/stream.js +32 -10
  485. package/dist/graph/view.d.ts +19 -6
  486. package/dist/graph/view.js +42 -17
  487. package/dist/hooks/codex-session.js +2 -2
  488. package/dist/hooks/codex-wrapper.d.ts +3 -1
  489. package/dist/hooks/codex-wrapper.js +9 -4
  490. package/dist/hooks/copilot.d.ts +19 -5
  491. package/dist/hooks/copilot.js +54 -15
  492. package/dist/hooks/hook-blocks.d.ts +4 -1
  493. package/dist/hooks/hook-blocks.js +8 -3
  494. package/dist/hooks/json-hooks.d.ts +9 -5
  495. package/dist/hooks/json-hooks.js +72 -33
  496. package/dist/hooks/opencode.js +15 -5
  497. package/dist/hooks/shared.d.ts +27 -8
  498. package/dist/hooks/shared.js +57 -16
  499. package/dist/importers/core.d.ts +12 -4
  500. package/dist/importers/core.js +11 -10
  501. package/dist/importers/markdown-parse.d.ts +15 -5
  502. package/dist/importers/markdown-parse.js +16 -7
  503. package/dist/importers/markdown.js +6 -9
  504. package/dist/importers/sources.js +10 -23
  505. package/dist/importers/vault.d.ts +3 -3
  506. package/dist/importers/vault.js +61 -45
  507. package/dist/index.d.ts +33 -7
  508. package/dist/index.js +26 -8
  509. package/dist/learn/autolearn.d.ts +21 -6
  510. package/dist/learn/autolearn.js +57 -26
  511. package/dist/learn/churn-git.d.ts +4 -1
  512. package/dist/learn/churn-git.js +29 -5
  513. package/dist/learn/extract.d.ts +4 -1
  514. package/dist/learn/extract.js +17 -10
  515. package/dist/learn/forward-claim-detector.d.ts +17 -5
  516. package/dist/learn/forward-claim-detector.js +34 -15
  517. package/dist/learn/invalidation.d.ts +12 -6
  518. package/dist/learn/invalidation.js +62 -28
  519. package/dist/learn/roots.d.ts +3 -0
  520. package/dist/learn/roots.js +5 -0
  521. package/dist/mcp/admin-tools.d.ts +5 -5
  522. package/dist/mcp/admin-tools.js +28 -23
  523. package/dist/mcp/format.d.ts +1 -1
  524. package/dist/mcp/format.js +4 -2
  525. package/dist/mcp/framing.d.ts +3 -1
  526. package/dist/mcp/framing.js +20 -8
  527. package/dist/mcp/memory-tools.d.ts +3 -3
  528. package/dist/mcp/memory-tools.js +21 -20
  529. package/dist/mcp/protocol.d.ts +32 -16
  530. package/dist/mcp/protocol.js +12 -9
  531. package/dist/mcp/recall-tools.d.ts +3 -3
  532. package/dist/mcp/recall-tools.js +62 -74
  533. package/dist/mcp/request.d.ts +7 -5
  534. package/dist/mcp/request.js +61 -77
  535. package/dist/mcp/server.d.ts +3 -1
  536. package/dist/mcp/server.js +8 -3
  537. package/dist/mcp/session-state.d.ts +1 -1
  538. package/dist/mcp/session-state.js +4 -3
  539. package/dist/mcp/shared-gate.d.ts +3 -2
  540. package/dist/mcp/shared-gate.js +3 -2
  541. package/dist/mcp/stdio.d.ts +6 -3
  542. package/dist/mcp/stdio.js +59 -23
  543. package/dist/mcp/tool-args.d.ts +4 -1
  544. package/dist/mcp/tool-args.js +8 -3
  545. package/dist/mcp/tools.js +76 -32
  546. package/dist/objects/customer-notes.d.ts +12 -10
  547. package/dist/objects/customer-notes.js +21 -15
  548. package/dist/objects/decisions.d.ts +18 -10
  549. package/dist/objects/decisions.js +23 -17
  550. package/dist/objects/descriptor.js +2 -1
  551. package/dist/objects/fields.d.ts +4 -1
  552. package/dist/objects/fields.js +6 -2
  553. package/dist/objects/incidents.d.ts +14 -16
  554. package/dist/objects/incidents.js +29 -30
  555. package/dist/objects/lifecycle.d.ts +0 -4
  556. package/dist/objects/lifecycle.js +21 -24
  557. package/dist/objects/policies.d.ts +12 -16
  558. package/dist/objects/policies.js +17 -21
  559. package/dist/objects/processes.d.ts +16 -10
  560. package/dist/objects/processes.js +20 -15
  561. package/dist/objects/project-briefs.d.ts +13 -14
  562. package/dist/objects/project-briefs.js +33 -39
  563. package/dist/objects/skills.d.ts +10 -12
  564. package/dist/objects/skills.js +17 -22
  565. package/dist/postinstall.js +15 -7
  566. package/dist/predictions/planning-fallacy.d.ts +19 -6
  567. package/dist/predictions/planning-fallacy.js +4 -2
  568. package/dist/rerankers/clef.d.ts +8 -2
  569. package/dist/rerankers/clef.js +14 -9
  570. package/dist/rerankers/cross-encoder.d.ts +2 -1
  571. package/dist/rerankers/cross-encoder.js +19 -9
  572. package/dist/rerankers/index.js +2 -1
  573. package/dist/rerankers/jev.js +2 -1
  574. package/dist/rerankers/llm.d.ts +6 -2
  575. package/dist/rerankers/llm.js +8 -3
  576. package/dist/rerankers/remote.d.ts +3 -1
  577. package/dist/rerankers/remote.js +5 -2
  578. package/dist/rerankers/types.d.ts +6 -2
  579. package/dist/search/bm25-search.d.ts +3 -1
  580. package/dist/search/bm25-search.js +15 -2
  581. package/dist/search/boosts.js +4 -3
  582. package/dist/search/embed-memories.d.ts +12 -4
  583. package/dist/search/embed-memories.js +96 -58
  584. package/dist/search/engine.d.ts +11 -0
  585. package/dist/search/engine.js +14 -0
  586. package/dist/search/goal-boost.d.ts +10 -3
  587. package/dist/search/goal-boost.js +13 -6
  588. package/dist/search/hybrid-score.d.ts +4 -1
  589. package/dist/search/hybrid-score.js +4 -1
  590. package/dist/search/hybrid.d.ts +23 -8
  591. package/dist/search/hybrid.js +12 -7
  592. package/dist/search/multihop.js +14 -13
  593. package/dist/search/path-context.d.ts +10 -3
  594. package/dist/search/path-context.js +10 -3
  595. package/dist/search/physics-search.d.ts +9 -4
  596. package/dist/search/physics-search.js +38 -14
  597. package/dist/search/rerank.d.ts +2 -1
  598. package/dist/search/rerank.js +2 -1
  599. package/dist/search/rrf.d.ts +14 -5
  600. package/dist/search/rrf.js +11 -4
  601. package/dist/search/vector.d.ts +8 -2
  602. package/dist/search/vector.js +14 -8
  603. package/dist/server/auth.d.ts +19 -15
  604. package/dist/server/auth.js +68 -38
  605. package/dist/server/boot.d.ts +4 -1
  606. package/dist/server/boot.js +115 -67
  607. package/dist/server/client-ip.d.ts +17 -5
  608. package/dist/server/client-ip.js +56 -21
  609. package/dist/server/cursor.d.ts +10 -3
  610. package/dist/server/cursor.js +10 -3
  611. package/dist/server/deadline.d.ts +5 -2
  612. package/dist/server/deadline.js +10 -3
  613. package/dist/server/key-check-bounds.js +12 -4
  614. package/dist/server/lifecycle.d.ts +4 -1
  615. package/dist/server/lifecycle.js +10 -4
  616. package/dist/server/mcp-http.d.ts +2 -1
  617. package/dist/server/mcp-http.js +37 -22
  618. package/dist/server/rate-limit.d.ts +17 -5
  619. package/dist/server/rate-limit.js +55 -26
  620. package/dist/server/ready.js +7 -4
  621. package/dist/server/request.d.ts +15 -4
  622. package/dist/server/request.js +42 -15
  623. package/dist/server/route-checks.d.ts +4 -1
  624. package/dist/server/route-checks.js +8 -3
  625. package/dist/server/route-table.d.ts +8 -6
  626. package/dist/server/route-table.js +550 -97
  627. package/dist/server/routes/admin.d.ts +7 -7
  628. package/dist/server/routes/admin.js +36 -15
  629. package/dist/server/routes/customer-notes.d.ts +5 -5
  630. package/dist/server/routes/customer-notes.js +5 -4
  631. package/dist/server/routes/decisions.d.ts +5 -5
  632. package/dist/server/routes/decisions.js +12 -6
  633. package/dist/server/routes/incidents.d.ts +5 -5
  634. package/dist/server/routes/incidents.js +10 -4
  635. package/dist/server/routes/memories.d.ts +8 -8
  636. package/dist/server/routes/memories.js +12 -17
  637. package/dist/server/routes/object-routes.d.ts +8 -5
  638. package/dist/server/routes/object-routes.js +4 -2
  639. package/dist/server/routes/policies.d.ts +6 -6
  640. package/dist/server/routes/policies.js +11 -4
  641. package/dist/server/routes/predictions.d.ts +5 -5
  642. package/dist/server/routes/predictions.js +9 -4
  643. package/dist/server/routes/processes.d.ts +5 -5
  644. package/dist/server/routes/processes.js +15 -6
  645. package/dist/server/routes/project-briefs.d.ts +6 -6
  646. package/dist/server/routes/project-briefs.js +3 -2
  647. package/dist/server/routes/recall.d.ts +3 -3
  648. package/dist/server/routes/recall.js +21 -10
  649. package/dist/server/routes/skills.d.ts +6 -6
  650. package/dist/server/routes/skills.js +12 -4
  651. package/dist/server/server-detect.d.ts +24 -8
  652. package/dist/server/server-detect.js +57 -22
  653. package/dist/server/sleep-child.js +16 -10
  654. package/dist/server/sleep-offload.d.ts +8 -5
  655. package/dist/server/sleep-offload.js +40 -18
  656. package/dist/server/tls.d.ts +10 -2
  657. package/dist/server/tls.js +25 -5
  658. package/dist/server/types.d.ts +41 -24
  659. package/dist/server/validation.d.ts +4 -1
  660. package/dist/server/validation.js +22 -9
  661. package/dist/server.d.ts +17 -49
  662. package/dist/server.js +33 -40
  663. package/dist/sharing/global-store.d.ts +6 -12
  664. package/dist/sharing/global-store.js +8 -48
  665. package/dist/sharing/global-sync.d.ts +3 -1
  666. package/dist/sharing/global-sync.js +17 -7
  667. package/dist/sharing/project-merge.d.ts +25 -7
  668. package/dist/sharing/project-merge.js +49 -17
  669. package/dist/sharing/search-both.d.ts +8 -4
  670. package/dist/sharing/search-both.js +28 -14
  671. package/dist/sharing/share.d.ts +8 -4
  672. package/dist/sharing/share.js +40 -18
  673. package/dist/store/ambient.js +10 -5
  674. package/dist/store/audit-event.d.ts +2 -2
  675. package/dist/store/audit-event.js +8 -3
  676. package/dist/store/audit.d.ts +6 -3
  677. package/dist/store/audit.js +16 -6
  678. package/dist/store/auth.d.ts +4 -2
  679. package/dist/store/auth.js +63 -20
  680. package/dist/store/busy.d.ts +9 -0
  681. package/dist/store/busy.js +16 -0
  682. package/dist/store/candidates.d.ts +12 -5
  683. package/dist/store/candidates.js +90 -41
  684. package/dist/store/capture-write.d.ts +2 -1
  685. package/dist/store/capture-write.js +2 -1
  686. package/dist/store/card-detail.d.ts +4 -4
  687. package/dist/store/card-detail.js +15 -8
  688. package/dist/store/cards.d.ts +24 -10
  689. package/dist/store/cards.js +97 -63
  690. package/dist/store/compaction-caller.d.ts +2 -1
  691. package/dist/store/compaction-caller.js +2 -1
  692. package/dist/store/compactions-record.d.ts +14 -8
  693. package/dist/store/compactions-record.js +101 -37
  694. package/dist/store/compactions.js +35 -15
  695. package/dist/store/conflicts.d.ts +16 -5
  696. package/dist/store/conflicts.js +104 -48
  697. package/dist/store/connectors/dlq.d.ts +17 -5
  698. package/dist/store/connectors/dlq.js +58 -6
  699. package/dist/store/connectors/event-log.d.ts +122 -0
  700. package/dist/store/connectors/event-log.js +25 -0
  701. package/dist/store/connectors/github.d.ts +6 -3
  702. package/dist/store/connectors/github.js +30 -48
  703. package/dist/store/connectors/slack.d.ts +2 -1
  704. package/dist/store/connectors/slack.js +31 -47
  705. package/dist/store/dashboard-reads.d.ts +7 -3
  706. package/dist/store/dashboard-reads.js +32 -10
  707. package/dist/store/delete-and-batch.d.ts +17 -11
  708. package/dist/store/delete-and-batch.js +70 -28
  709. package/dist/store/delivery-recorder.d.ts +10 -7
  710. package/dist/store/delivery-recorder.js +70 -37
  711. package/dist/store/descendant-page.d.ts +2 -1
  712. package/dist/store/descendant-page.js +26 -10
  713. package/dist/store/diagnostics.d.ts +2 -1
  714. package/dist/store/diagnostics.js +2 -1
  715. package/dist/store/doctor-reads.d.ts +2 -1
  716. package/dist/store/doctor-reads.js +13 -5
  717. package/dist/store/dormant.d.ts +19 -11
  718. package/dist/store/dormant.js +45 -19
  719. package/dist/store/embeddings/index.d.ts +13 -9
  720. package/dist/store/embeddings/index.js +19 -12
  721. package/dist/store/entry-reads.d.ts +72 -21
  722. package/dist/store/entry-reads.js +215 -69
  723. package/dist/store/entry-row.d.ts +10 -6
  724. package/dist/store/entry-row.js +26 -14
  725. package/dist/store/entry-writes.d.ts +28 -13
  726. package/dist/store/entry-writes.js +61 -22
  727. package/dist/store/failure-log-at.js +1 -1
  728. package/dist/store/failure-log.d.ts +4 -2
  729. package/dist/store/failure-log.js +13 -6
  730. package/dist/store/gated-write.d.ts +3 -3
  731. package/dist/store/gated-write.js +3 -3
  732. package/dist/store/goals.d.ts +5 -4
  733. package/dist/store/goals.js +11 -12
  734. package/dist/store/graph-apply.d.ts +21 -0
  735. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  736. package/dist/store/graph-queue.d.ts +9 -6
  737. package/dist/store/graph-queue.js +15 -10
  738. package/dist/store/graph-reads.d.ts +16 -11
  739. package/dist/store/graph-reads.js +29 -19
  740. package/dist/store/graph-rows.d.ts +41 -3
  741. package/dist/store/graph-rows.js +10 -7
  742. package/dist/store/graph-view-rows.js +15 -7
  743. package/dist/store/graph-writes.d.ts +16 -10
  744. package/dist/store/graph-writes.js +59 -36
  745. package/dist/store/half-life.js +2 -2
  746. package/dist/store/handoffs.d.ts +13 -7
  747. package/dist/store/handoffs.js +44 -22
  748. package/dist/store/index-and-stats.d.ts +2 -2
  749. package/dist/store/index-and-stats.js +6 -5
  750. package/dist/store/index.d.ts +4 -2
  751. package/dist/store/index.js +2 -1
  752. package/dist/store/key-audit.d.ts +2 -1
  753. package/dist/store/key-audit.js +2 -1
  754. package/dist/store/key-writes.d.ts +2 -1
  755. package/dist/store/key-writes.js +9 -2
  756. package/dist/store/ledger-turn.d.ts +4 -1
  757. package/dist/store/ledger-turn.js +7 -2
  758. package/dist/store/mirrors.d.ts +11 -4
  759. package/dist/store/mirrors.js +96 -19
  760. package/dist/store/narrow.d.ts +6 -0
  761. package/dist/store/narrow.js +11 -0
  762. package/dist/store/open.d.ts +6 -3
  763. package/dist/store/open.js +20 -10
  764. package/dist/store/pilot-arm.d.ts +2 -1
  765. package/dist/store/pilot-arm.js +18 -6
  766. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  767. package/dist/store/planning-fallacy-evidence.js +8 -5
  768. package/dist/store/port/agent-import.d.ts +62 -0
  769. package/dist/store/port/agent-import.js +2 -0
  770. package/dist/store/port/consolidation.d.ts +129 -0
  771. package/dist/store/port/consolidation.js +2 -0
  772. package/dist/store/port/learning.d.ts +19 -0
  773. package/dist/store/port/learning.js +2 -0
  774. package/dist/store/port/local-files.d.ts +18 -0
  775. package/dist/store/port/local-files.js +2 -0
  776. package/dist/store/port/promotion.d.ts +20 -0
  777. package/dist/store/port/promotion.js +3 -0
  778. package/dist/store/port-groups.d.ts +160 -0
  779. package/dist/store/port-groups.js +2 -0
  780. package/dist/store/port.d.ts +261 -219
  781. package/dist/store/port.js +3 -9
  782. package/dist/store/predictions.d.ts +14 -10
  783. package/dist/store/predictions.js +37 -17
  784. package/dist/store/project-tags.d.ts +4 -1
  785. package/dist/store/project-tags.js +16 -5
  786. package/dist/store/quality-repair.d.ts +8 -4
  787. package/dist/store/quality-repair.js +53 -20
  788. package/dist/store/quarantine.d.ts +1 -0
  789. package/dist/store/quarantine.js +23 -9
  790. package/dist/store/raw-archive.d.ts +5 -4
  791. package/dist/store/raw-archive.js +11 -10
  792. package/dist/store/recall-trace.d.ts +22 -17
  793. package/dist/store/recall-trace.js +128 -64
  794. package/dist/store/rejected-values.d.ts +15 -10
  795. package/dist/store/rejected-values.js +46 -20
  796. package/dist/store/rejection.d.ts +12 -11
  797. package/dist/store/rejection.js +18 -19
  798. package/dist/store/report-reads.d.ts +2 -1
  799. package/dist/store/report-reads.js +2 -1
  800. package/dist/store/rows.d.ts +7 -5
  801. package/dist/store/rows.js +20 -13
  802. package/dist/store/rule-sql.d.ts +7 -3
  803. package/dist/store/rule-sql.js +26 -13
  804. package/dist/store/search-rows.d.ts +16 -11
  805. package/dist/store/search-rows.js +54 -32
  806. package/dist/store/sessions.d.ts +12 -10
  807. package/dist/store/sessions.js +40 -21
  808. package/dist/store/set-aside.d.ts +2 -2
  809. package/dist/store/set-aside.js +18 -5
  810. package/dist/store/sqlite/agent-import.d.ts +3 -0
  811. package/dist/store/sqlite/agent-import.js +77 -0
  812. package/dist/store/sqlite/cards-group.d.ts +6 -0
  813. package/dist/store/sqlite/cards-group.js +37 -0
  814. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  815. package/dist/store/sqlite/conflicts-group.js +18 -0
  816. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  817. package/dist/store/sqlite/connector-events-group.js +17 -6
  818. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  819. package/dist/store/sqlite/connector-writes-group.js +12 -5
  820. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  821. package/dist/store/sqlite/consolidation-group.js +64 -0
  822. package/dist/store/sqlite/dag-reads-group.js +1 -1
  823. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  824. package/dist/store/sqlite/dormant-group.js +29 -0
  825. package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
  826. package/dist/store/sqlite/entry-writes-group.js +37 -14
  827. package/dist/store/sqlite/error-codec.d.ts +4 -2
  828. package/dist/store/sqlite/error-codec.js +32 -10
  829. package/dist/store/sqlite/executor-counts.js +2 -1
  830. package/dist/store/sqlite/executor.d.ts +8 -3
  831. package/dist/store/sqlite/executor.js +56 -18
  832. package/dist/store/sqlite/global-promote.d.ts +5 -0
  833. package/dist/store/sqlite/global-promote.js +48 -0
  834. package/dist/store/sqlite/goals-group.d.ts +6 -0
  835. package/dist/store/sqlite/goals-group.js +23 -0
  836. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  837. package/dist/store/sqlite/graph-reads-group.js +2 -1
  838. package/dist/store/sqlite/held-connection.d.ts +8 -0
  839. package/dist/store/sqlite/held-connection.js +34 -7
  840. package/dist/store/sqlite/last-recall-group.d.ts +15 -0
  841. package/dist/store/sqlite/last-recall-group.js +62 -0
  842. package/dist/store/sqlite/learning-group.d.ts +4 -0
  843. package/dist/store/sqlite/learning-group.js +17 -0
  844. package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
  845. package/dist/store/sqlite/maintenance-groups.js +61 -0
  846. package/dist/store/sqlite/object-rows.d.ts +6 -3
  847. package/dist/store/sqlite/object-rows.js +34 -5
  848. package/dist/store/sqlite/objects-group.d.ts +5 -4
  849. package/dist/store/sqlite/objects-group.js +97 -38
  850. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  851. package/dist/store/sqlite/predictions-group.js +4 -2
  852. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  853. package/dist/store/sqlite/promotion-group.js +10 -0
  854. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  855. package/dist/store/sqlite/quarantine-group.js +4 -2
  856. package/dist/store/sqlite/reports-group.d.ts +6 -0
  857. package/dist/store/sqlite/reports-group.js +33 -0
  858. package/dist/store/sqlite/request-scope.d.ts +6 -0
  859. package/dist/store/sqlite/request-scope.js +18 -0
  860. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  861. package/dist/store/sqlite/sessions-group.js +46 -0
  862. package/dist/store/sqlite/store.d.ts +22 -18
  863. package/dist/store/sqlite/store.js +95 -33
  864. package/dist/store/sqlite/vector-pack.js +2 -1
  865. package/dist/store/sqlite/vector-reads-group.js +2 -1
  866. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  867. package/dist/store/sqlite/worker-jobs.js +19 -7
  868. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  869. package/dist/store/sqlite/worker-ops.js +6 -3
  870. package/dist/store/sqlite/worker-store.d.ts +4 -3
  871. package/dist/store/sqlite/worker-store.js +24 -14
  872. package/dist/store/summaries.d.ts +25 -11
  873. package/dist/store/summaries.js +84 -27
  874. package/dist/store/summary-dirty.d.ts +2 -1
  875. package/dist/store/summary-dirty.js +2 -1
  876. package/dist/store/tenant.d.ts +3 -2
  877. package/dist/store/tenant.js +5 -4
  878. package/dist/store/token-ledger-rows.js +8 -4
  879. package/dist/store/token-ledger.d.ts +19 -13
  880. package/dist/store/token-ledger.js +27 -14
  881. package/dist/store/tombstone-checks.d.ts +4 -1
  882. package/dist/store/tombstone-checks.js +10 -1
  883. package/dist/store/usage-reports.js +2 -1
  884. package/dist/store/vector-index.d.ts +8 -5
  885. package/dist/store/vector-index.js +28 -11
  886. package/dist/store/working-memory.d.ts +6 -4
  887. package/dist/store/working-memory.js +14 -9
  888. package/dist/support-bundle.js +10 -5
  889. package/dist/trust/quarantine.d.ts +1 -2
  890. package/dist/trust/quarantine.js +1 -5
  891. package/dist/trust/reject-flow.d.ts +12 -3
  892. package/dist/trust/reject-flow.js +12 -4
  893. package/dist/util/anthropic-messages.d.ts +7 -2
  894. package/dist/util/anthropic-messages.js +18 -7
  895. package/dist/util/atomic-write.d.ts +8 -3
  896. package/dist/util/atomic-write.js +36 -21
  897. package/dist/util/compaction-items.d.ts +4 -1
  898. package/dist/util/compaction-items.js +8 -2
  899. package/dist/util/crash-handlers.d.ts +7 -2
  900. package/dist/util/crash-handlers.js +13 -4
  901. package/dist/util/env.d.ts +26 -5
  902. package/dist/util/env.js +87 -25
  903. package/dist/util/format.d.ts +2 -0
  904. package/dist/util/format.js +4 -0
  905. package/dist/util/home-path.js +12 -6
  906. package/dist/util/hook-payload.d.ts +3 -1
  907. package/dist/util/hook-payload.js +3 -1
  908. package/dist/util/http-retry.d.ts +12 -6
  909. package/dist/util/http-retry.js +16 -6
  910. package/dist/util/http-util.d.ts +20 -5
  911. package/dist/util/http-util.js +28 -9
  912. package/dist/util/json.d.ts +4 -1
  913. package/dist/util/json.js +4 -1
  914. package/dist/util/keyset.js +2 -1
  915. package/dist/util/limits.js +4 -2
  916. package/dist/util/log.d.ts +13 -5
  917. package/dist/util/log.js +29 -6
  918. package/dist/util/net.d.ts +5 -0
  919. package/dist/util/net.js +19 -0
  920. package/dist/util/real-path.d.ts +2 -1
  921. package/dist/util/real-path.js +4 -3
  922. package/dist/util/request-scope.d.ts +16 -4
  923. package/dist/util/request-scope.js +19 -6
  924. package/dist/util/same-text.d.ts +10 -3
  925. package/dist/util/same-text.js +10 -3
  926. package/dist/util/secret-detect.d.ts +24 -7
  927. package/dist/util/secret-detect.js +49 -14
  928. package/dist/util/spawn-argv.d.ts +11 -0
  929. package/dist/util/spawn-argv.js +66 -0
  930. package/dist/util/sql.d.ts +3 -0
  931. package/dist/util/sql.js +6 -0
  932. package/dist/util/sqlite-blocked.d.ts +15 -4
  933. package/dist/util/sqlite-blocked.js +19 -6
  934. package/dist/util/stored-json.d.ts +4 -1
  935. package/dist/util/stored-json.js +6 -2
  936. package/dist/util/stream-tee.d.ts +2 -1
  937. package/dist/util/stream-tee.js +8 -5
  938. package/dist/util/transcript-tail.d.ts +4 -1
  939. package/dist/util/transcript-tail.js +4 -1
  940. package/dist/util/vector-codec.d.ts +4 -0
  941. package/dist/util/vector-codec.js +15 -0
  942. package/dist/util/version.d.ts +8 -3
  943. package/dist/util/version.js +8 -3
  944. package/dist/util/write-budget.d.ts +7 -2
  945. package/dist/util/write-budget.js +5 -2
  946. package/dist/util/yaml.d.ts +4 -1
  947. package/dist/util/yaml.js +4 -1
  948. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  949. package/extensions/openclaw-plugin/package.json +1 -1
  950. package/openclaw.plugin.json +1 -1
  951. package/package.json +4 -1
  952. package/scripts/postinstall.cjs +3 -1
  953. package/dist/api/audit.js +0 -56
  954. package/dist/api/cards.d.ts +0 -42
  955. package/dist/api/conflicts.d.ts +0 -28
  956. package/dist/api/conflicts.js +0 -61
  957. package/dist/api/dormant.d.ts +0 -14
  958. package/dist/api/dormant.js +0 -58
  959. package/dist/api/goals.d.ts +0 -18
  960. package/dist/api/graph.d.ts +0 -8
  961. package/dist/api/graph.js +0 -7
  962. package/dist/api/learn.js +0 -124
  963. package/dist/api/memories.d.ts +0 -23
  964. package/dist/api/memories.js +0 -46
  965. package/dist/api/objects.d.ts +0 -9
  966. package/dist/api/on-store.d.ts +0 -16
  967. package/dist/api/on-store.js +0 -38
  968. package/dist/api/outcome.d.ts +0 -19
  969. package/dist/api/outcome.js +0 -21
  970. package/dist/api/predictions.d.ts +0 -11
  971. package/dist/api/promote.d.ts +0 -36
  972. package/dist/api/promote.js +0 -65
  973. package/dist/api/recall-core.d.ts +0 -4
  974. package/dist/api/recall-core.js +0 -120
  975. package/dist/api/recall-finish.d.ts +0 -53
  976. package/dist/api/recall-finish.js +0 -30
  977. package/dist/api/recall-history.d.ts +0 -64
  978. package/dist/api/recall-history.js +0 -159
  979. package/dist/api/recall-record.d.ts +0 -43
  980. package/dist/api/recall-record.js +0 -78
  981. package/dist/api/recall-request.js +0 -121
  982. package/dist/api/recall.d.ts +0 -6
  983. package/dist/api/refine.d.ts +0 -7
  984. package/dist/api/refine.js +0 -10
  985. package/dist/api/session-owners.d.ts +0 -4
  986. package/dist/api/session-owners.js +0 -17
  987. package/dist/api/sleep-run.d.ts +0 -26
  988. package/dist/api/sleep.js +0 -10
  989. package/dist/cli/lenient-id.d.ts +0 -2
  990. package/dist/cli/lenient-id.js +0 -13
  991. package/dist/graph/write.d.ts +0 -14
  992. package/dist/store/sqlite/busy.d.ts +0 -3
  993. package/dist/store/sqlite/busy.js +0 -8
  994. package/dist/store/sqlite/local.d.ts +0 -21
  995. package/dist/store/sqlite/local.js +0 -39
@@ -17,6 +17,8 @@ export var Layer;
17
17
  Layer["Trace"] = "trace";
18
18
  })(Layer || (Layer = {}));
19
19
  export const MEMORY_KINDS = ['raw', 'distilled', 'superseded', 'archived'];
20
+ /** Named dag_level values; level 0 is a raw leaf. */
21
+ export const DAG_LEVEL = { extracted: 1, topic: 2, entity: 3 };
20
22
  /** Tag on a memory whose named file/symbol/script changed after it was stored. */
21
23
  export const CHURN_STALE_TAG = 'churn-stale';
22
24
  // Losses weigh ~2x gains (Lovallo-Kahneman), so negative is 2.0; HIPPO_LOSS_AVERSION_RATIO scales it per process.
@@ -47,17 +49,25 @@ function getLossAversionRatio() {
47
49
  _lossAversionRatioCache = parsed;
48
50
  return parsed;
49
51
  }
50
- /** Test-only: a test that sets HIPPO_LOSS_AVERSION_RATIO calls this in beforeEach and afterEach (tests/emotional-multipliers.test.ts). */
52
+ /**
53
+ * Test-only: a test that sets HIPPO_LOSS_AVERSION_RATIO calls this in beforeEach and afterEach
54
+ * (tests/emotional-multipliers.test.ts).
55
+ */
51
56
  export function _resetLossAversionRatioCacheForTests() {
52
57
  _lossAversionRatioCache = undefined;
53
58
  }
54
- /** Scales only the `negative` multiplier; `critical` stays unscaled so the knob moves just the losses-vs-gains claim. */
59
+ /**
60
+ * Scales only the `negative` multiplier; `critical` stays unscaled so the knob moves just the losses-vs-gains claim.
61
+ */
55
62
  export function applyLossAversionRatio(valence, baseMultiplier) {
56
63
  if (valence !== 'negative')
57
64
  return baseMultiplier;
58
65
  return baseMultiplier * getLossAversionRatio();
59
66
  }
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. */
67
+ /**
68
+ * 1 + REWARD_SLOPE * (pos - neg) / (pos + neg + 1), in (0.5, 1.5), 1.0 with no outcomes; it scales the effective
69
+ * half-life.
70
+ */
61
71
  export function calculateRewardFactor(entry, ablation = NO_STRENGTH_ABLATION) {
62
72
  // EVAL-ONLY ablation (see ablation.ts): the slow outcome channel.
63
73
  if (ablation.outcomeSlow)
@@ -75,13 +85,18 @@ export const MAX_WRONG_HALVINGS = 3;
75
85
  export const DECAY_BASE = 0.5;
76
86
  export const REWARD_SLOPE = 0.5;
77
87
  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. */
88
+ /**
89
+ * Bad outcome marks past good ones, floored at zero; each halves strength and stops recall strengthening, so a
90
+ * correction outranks pinning.
91
+ */
79
92
  export function netWrong(entry, ablation = NO_STRENGTH_ABLATION) {
80
93
  if (ablation.outcomeSlow || ablation.decay)
81
94
  return 0;
82
95
  return Math.max(0, (entry.outcome_negative ?? 0) - (entry.outcome_positive ?? 0));
83
96
  }
84
- /** Strength at `now` = decay * retrieval boost * emotional multiplier, clamped to [0, 1]; the basis modes are on DecayOptions.
97
+ /**
98
+ * Strength at `now` = decay * retrieval boost * emotional multiplier, clamped to [0, 1]; the basis modes are on
99
+ * DecayOptions.
85
100
  * Pinned memories skip time decay, but being marked wrong still fades them (netWrong). */
86
101
  export function calculateStrength(entry,
87
102
  // evalNow() is the real clock unless HIPPO_FAKE_NOW is set (eval-only); an explicit `now` wins.
@@ -91,7 +106,8 @@ now = evalNow(), options = {}) {
91
106
  const wrongPenalty = Math.pow(DECAY_BASE, Math.min(netWrong(entry, ablation), MAX_WRONG_HALVINGS));
92
107
  if (entry.pinned)
93
108
  return wrongPenalty;
94
- // EVAL-ONLY ablation (see ablation.ts): anchor decay at creation so clock resets from earlier unflagged runs cannot leak in.
109
+ // EVAL-ONLY ablation (see ablation.ts): anchor decay at creation so clock resets from earlier unflagged runs cannot
110
+ // leak in.
95
111
  const lastRetrieved = new Date(ablation.recallBoost ? entry.created : entry.last_retrieved);
96
112
  const daysSince = (now.getTime() - lastRetrieved.getTime()) / DAY_MS;
97
113
  const rewardFactor = calculateRewardFactor(entry, ablation);
@@ -113,7 +129,8 @@ function decayExponentFor(options, daysSince, halfLifeDays) {
113
129
  let effectiveHalfLife = halfLifeDays;
114
130
  const basis = options.decayBasis ?? 'clock';
115
131
  if (basis === 'session') {
116
- // Each sleep cycle counts as one "day"; sessions since last retrieval are estimated from wall time and the average interval.
132
+ // Each sleep cycle counts as one "day"; sessions since last retrieval are estimated from wall time and the average
133
+ // interval.
117
134
  const avgInterval = options.avgSessionIntervalDays ?? 1;
118
135
  const sessionsSince = avgInterval > 0 ? Math.max(0, daysSince / avgInterval) : daysSince;
119
136
  return sessionsSince / effectiveHalfLife;
@@ -134,7 +151,8 @@ function retrievalBoostFor(entry, ablation) {
134
151
  ? 1.0
135
152
  : 1 + RETRIEVAL_BOOST_SLOPE * Math.log2(entry.retrieval_count + 1);
136
153
  }
137
- const HIGH_SCHEMA_FIT = 0.7;
154
+ /** A memory counts as high schema fit strictly above this. */
155
+ export const HIGH_SCHEMA_FIT = 0.7;
138
156
  const HIGH_FIT_HALF_LIFE_FACTOR = 1.5;
139
157
  const LOW_SCHEMA_FIT = 0.3;
140
158
  const LOW_FIT_HALF_LIFE_FACTOR = 0.5;
@@ -161,7 +179,10 @@ export function deriveHalfLife(base, entry) {
161
179
  }
162
180
  return hl;
163
181
  }
164
- /** Counts the outcome; calculateStrength turns the counts into a reward factor on the half-life, so there is no fixed delta here. */
182
+ /**
183
+ * Counts the outcome; calculateStrength turns the counts into a reward factor on the half-life, so there is no fixed
184
+ * delta here.
185
+ */
165
186
  export function applyOutcome(entry, good) {
166
187
  const updated = {
167
188
  ...entry,
@@ -205,18 +226,30 @@ export function confidenceLabel(entry, now = evalNow()) {
205
226
  warn: agedOut || tier === 'stale' || tier === 'inferred',
206
227
  };
207
228
  }
208
- /** The stored confidence, or 'stale' once the entry is aged out (not retrieved for AGED_OUT_AFTER_DAYS; pinned and verified exempt). */
229
+ /**
230
+ * The stored confidence, or 'stale' once the entry is aged out (not retrieved for AGED_OUT_AFTER_DAYS; pinned and
231
+ * verified exempt).
232
+ */
209
233
  export function resolveConfidence(entry, now = evalNow()) {
210
234
  return isAgedOut(entry, now) ? 'stale' : entry.confidence;
211
235
  }
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.
236
+ /**
237
+ * Base half-life in days before deriveHalfLife's multipliers: 365 because 7 lost the current fact far more often and
238
+ * 730 did no better.
213
239
  * `hippo sleep` moves memories still on an older base (src/consolidate/half-life-migration.ts). */
214
240
  export const DEFAULT_HALF_LIFE_DAYS = 365;
241
+ /** The flat half-life the decision, incident and other object writers gave their memories before they took the
242
+ * default. */
243
+ export const LEGACY_TYPED_HALF_LIFE = 90;
215
244
  export const COMPACTION_MEMORY_TAG = 'compaction-memory';
216
245
  export const COMPACTION_SOURCE_PREFIX = 'compaction:';
217
- export const KEEP_PAIRS = AGENT_MEMORY_TOOLS.map((t) => ({ tag: t.tag, sourcePrefix: toolSourcePrefix(t.id) }));
246
+ export const KEEP_PAIRS = AGENT_MEMORY_TOOLS.map((t) => ({
247
+ tag: t.tag,
248
+ sourcePrefix: toolSourcePrefix(t.id),
249
+ }));
218
250
  export function isKeptForGood(entry) {
219
- return !entry.superseded_by && KEEP_PAIRS.some((p) => entry.tags.includes(p.tag) && entry.source.startsWith(p.sourcePrefix));
251
+ return (!entry.superseded_by &&
252
+ KEEP_PAIRS.some((p) => entry.tags.includes(p.tag) && entry.source.startsWith(p.sourcePrefix)));
220
253
  }
221
254
  export function canAutoDelete(entry) {
222
255
  return !entry.pinned && entry.kind !== 'raw' && !isKeptForGood(entry);
@@ -226,8 +259,8 @@ export function createMemory(content, options = {}) {
226
259
  const now = evalNow().toISOString(); // honors HIPPO_FAKE_NOW (eval-only)
227
260
  const layer = options.layer ?? Layer.Episodic;
228
261
  const tags = options.tags ?? [];
229
- const emotional_valence = options.emotional_valence ?? inferValence(tags);
230
- const schema_fit = options.schema_fit ?? DEFAULT_SCHEMA_FIT;
262
+ const emotional_valence = options.emotionalValence ?? inferValence(tags);
263
+ const schema_fit = options.schemaFit ?? DEFAULT_SCHEMA_FIT;
231
264
  const half_life_days = deriveHalfLife(options.baseHalfLifeDays ?? DEFAULT_HALF_LIFE_DAYS, { tags, schema_fit });
232
265
  const entry = {
233
266
  id: generateId(layer === Layer.Semantic ? 'sem' : 'mem'),
@@ -250,18 +283,18 @@ export function createMemory(content, options = {}) {
250
283
  content,
251
284
  parents: [],
252
285
  starred: false,
253
- trace_outcome: options.trace_outcome ?? null,
254
- source_session_id: options.source_session_id ?? null,
255
- valid_from: options.valid_from ?? now,
286
+ trace_outcome: options.traceOutcome ?? null,
287
+ source_session_id: options.sourceSessionId ?? null,
288
+ valid_from: options.validFrom ?? now,
256
289
  superseded_by: null,
257
- extracted_from: options.extracted_from ?? null,
258
- dag_level: options.dag_level ?? 0,
259
- dag_parent_id: options.dag_parent_id ?? null,
290
+ extracted_from: options.extractedFrom ?? null,
291
+ dag_level: options.dagLevel ?? 0,
292
+ dag_parent_id: options.dagParentId ?? null,
260
293
  kind: options.kind ?? 'distilled',
261
294
  scope: options.scope ?? null,
262
295
  owner: options.owner ?? null,
263
- artifact_ref: options.artifact_ref ?? null,
264
- tenantId: options.tenantId ?? DEFAULT_TENANT_ID,
296
+ artifact_ref: options.artifactRef ?? null,
297
+ tenant_id: options.tenantId ?? DEFAULT_TENANT_ID,
265
298
  };
266
299
  entry.strength = calculateStrength(entry);
267
300
  return entry;
@@ -272,11 +305,14 @@ function assertValidMemoryInput(content, options) {
272
305
  throw new BadRequestError(`Memory content too short (${trimmed.length} chars, minimum 3): "${trimmed}"`);
273
306
  }
274
307
  const validOutcomes = ['success', 'failure', 'partial', null];
275
- if (options.trace_outcome !== undefined && !validOutcomes.includes(options.trace_outcome)) {
276
- throw new BadRequestError(`Invalid trace_outcome: ${options.trace_outcome}. Must be 'success', 'failure', 'partial', or null.`);
308
+ if (options.traceOutcome !== undefined && !validOutcomes.includes(options.traceOutcome)) {
309
+ throw new BadRequestError(`Invalid trace_outcome: ${options.traceOutcome}. Must be 'success', 'failure', 'partial', or null.`);
277
310
  }
278
311
  }
279
- /** The row that replaces `old`: a supersede never changes where a memory belongs, so source, scope, session and a stamped origin carry over. */
312
+ /**
313
+ * The row that replaces `old`: a supersede never changes where a memory belongs, so source, scope, session and a
314
+ * stamped origin carry over.
315
+ */
280
316
  export function createSuccessor(old, content, opts) {
281
317
  const next = createMemory(content, {
282
318
  layer: opts.layer ?? old.layer,
@@ -286,7 +322,7 @@ export function createSuccessor(old, content, opts) {
286
322
  confidence: 'verified',
287
323
  tenantId: opts.tenantId,
288
324
  scope: old.scope,
289
- source_session_id: old.source_session_id,
325
+ sourceSessionId: old.source_session_id,
290
326
  baseHalfLifeDays: opts.baseHalfLifeDays,
291
327
  });
292
328
  // A legacy null origin has nothing to carry, so the store stamps it from its own location.
@@ -295,7 +331,9 @@ export function createSuccessor(old, content, opts) {
295
331
  }
296
332
  return next;
297
333
  }
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.
334
+ /**
335
+ * How well new content fits existing knowledge, 0..1: above 0.7 consolidates faster, below 0.3 is novel and decays
336
+ * faster if unused.
299
337
  * Tags shared with existing memories count by rarity (a rare shared tag fits more), plus content-token overlap. */
300
338
  export function computeSchemaFit(content, tags, existingEntries) {
301
339
  return schemaFitFrom(content, tags, schemaFitSourceOf(existingEntries));
@@ -310,8 +348,18 @@ export function schemaFitSourceOf(entries) {
310
348
  }
311
349
  return { rows: entries.length, tagCounts, contents: entries.map((e) => e.content) };
312
350
  }
351
+ // Tokens of this length or shorter are filler for schema fit.
352
+ const FILLER_TOKEN_MAX_LENGTH = 3;
353
+ // Matching half the tags at average weight scores about 0.5, so the raw overlap ratio is doubled.
354
+ const TAG_OVERLAP_SCALE = 2;
355
+ // Floor on the matches that saturate the content score, so a tiny store cannot saturate it on one hit.
356
+ const CONTENT_ENOUGH_MIN_MATCHES = 5;
313
357
  function significantTokens(text) {
314
- return new Set(text.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter((t) => t.length > 3));
358
+ return new Set(text
359
+ .toLowerCase()
360
+ .replace(/[^\w\s]/g, ' ')
361
+ .split(/\s+/)
362
+ .filter((t) => t.length > FILLER_TOKEN_MAX_LENGTH));
315
363
  }
316
364
  /** computeSchemaFit against `source`, for a caller that holds counts and texts but no rows. */
317
365
  export function schemaFitFrom(content, tags, source) {
@@ -331,13 +379,12 @@ export function schemaFitFrom(content, tags, source) {
331
379
  weightedOverlap += Math.log(N / freq) + 1;
332
380
  totalWeight += maxIdf;
333
381
  }
334
- // Scaled so that matching half the tags at average weight gives about 0.5.
335
- const tagScore = totalWeight > 0 ? Math.min(1, (weightedOverlap / totalWeight) * 2) : 0;
382
+ const tagScore = totalWeight > 0 ? Math.min(1, (weightedOverlap / totalWeight) * TAG_OVERLAP_SCALE) : 0;
336
383
  const newTokens = significantTokens(content);
337
384
  if (newTokens.size === 0)
338
385
  return Math.min(1, Math.max(0, tagScore));
339
386
  // The content score is capped at 1, which this many matching memories reach.
340
- const enough = Math.max(5, N * CONTENT_ENOUGH_FRACTION);
387
+ const enough = Math.max(CONTENT_ENOUGH_MIN_MATCHES, N * CONTENT_ENOUGH_FRACTION);
341
388
  let contentMatches = 0;
342
389
  for (const text of source.contents) {
343
390
  const entryTokens = significantTokens(text);
@@ -363,7 +410,9 @@ function inferValence(tags) {
363
410
  return 'neutral';
364
411
  }
365
412
  /** 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. */
413
+ * Under HIPPO_ABLATE_RECALL_BOOST (eval-only) the entries come back unchanged, not empty, since callers derive
414
+ * last_retrieval_ids from them.
415
+ */
367
416
  export function markRetrieved(entries, now = evalNow(), options = {}) {
368
417
  const ablation = options.ablation ?? NO_STRENGTH_ABLATION;
369
418
  if (ablation.recallBoost)
@@ -1,6 +1,12 @@
1
1
  import { type MemoryEntry } from './memory.js';
2
- /** The row that replaces a merged row once its retired texts leave: undefined when it holds none, null when nothing else is left. */
2
+ /**
3
+ * The row that replaces a merged row once its retired texts leave: undefined when it holds none, null when nothing else
4
+ * is left.
5
+ */
3
6
  export declare function mergedSuccessor(row: MemoryEntry, retired: (text: string) => boolean, retiredIds: ReadonlySet<string>): MemoryEntry | null | undefined;
4
- /** Sleep's check on a merged row: drops texts whose source was superseded since the merge, or that a rejection now covers. */
7
+ /**
8
+ * Sleep's check on a merged row: drops texts whose source was superseded since the merge, or that a rejection now
9
+ * covers.
10
+ */
5
11
  export declare function successorAfterRetirement(row: MemoryEntry, byId: ReadonlyMap<string, MemoryEntry>, rejected: (text: string) => boolean): MemoryEntry | null | undefined;
6
12
  //# sourceMappingURL=merged-row.d.ts.map
@@ -1,9 +1,13 @@
1
- // A sleep-merged row copies its sources' texts, so retiring a text (reject, or superseding its source) must reach the row too.
1
+ // A sleep-merged row copies its sources' texts, so retiring a text (reject, or superseding its source) must reach the
2
+ // row too.
2
3
  // SHORTCUT: reject rewrites merged rows at once, live and dormant; supersede and `resolve
3
4
  // --reject-loser` wait for the next sleep's check, which sees a dormant row only once restored.
4
5
  import { generateId } from './memory.js';
5
6
  import { duplicateKey, heldTexts, mergedText } from '../util/same-text.js';
6
- /** The row that replaces a merged row once its retired texts leave: undefined when it holds none, null when nothing else is left. */
7
+ /**
8
+ * The row that replaces a merged row once its retired texts leave: undefined when it holds none, null when nothing else
9
+ * is left.
10
+ */
7
11
  export function mergedSuccessor(row, retired, retiredIds) {
8
12
  const texts = heldTexts(row);
9
13
  const kept = texts.filter((t) => !retired(t));
@@ -22,7 +26,10 @@ export function mergedSuccessor(row, retired, retiredIds) {
22
26
  conflicts_with: [],
23
27
  };
24
28
  }
25
- /** Sleep's check on a merged row: drops texts whose source was superseded since the merge, or that a rejection now covers. */
29
+ /**
30
+ * Sleep's check on a merged row: drops texts whose source was superseded since the merge, or that a rejection now
31
+ * covers.
32
+ */
26
33
  export function successorAfterRetirement(row, byId, rejected) {
27
34
  if (row.source !== 'consolidation' || row.superseded_by)
28
35
  return undefined;
@@ -1,3 +1,5 @@
1
- /** The package folder: it holds package.json, bin/ and dist-ui/. The same two steps up from src/core and from dist/core. */
1
+ /**
2
+ * The package folder: it holds package.json, bin/ and dist-ui/. The same two steps up from src/core and from dist/core.
3
+ */
2
4
  export declare const PACKAGE_ROOT: string;
3
5
  //# sourceMappingURL=package-root.d.ts.map
@@ -1,5 +1,7 @@
1
1
  import * as path from 'path';
2
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. */
3
+ /**
4
+ * The package folder: it holds package.json, bin/ and dist-ui/. The same two steps up from src/core and from dist/core.
5
+ */
4
6
  export const PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
5
7
  //# sourceMappingURL=package-root.js.map
@@ -0,0 +1,8 @@
1
+ import { type MemoryEntry } from './memory.js';
2
+ import { type PhysicsParticle } from './physics.js';
3
+ /**
4
+ * Refresh mass, charge and temperature for existing particles
5
+ * from current memory attributes (called during consolidation).
6
+ */
7
+ export declare function refreshParticleProperties(particles: PhysicsParticle[], entries: Map<string, MemoryEntry>, now?: Date): void;
8
+ //# sourceMappingURL=particle-refresh.d.ts.map
@@ -0,0 +1,22 @@
1
+ // Particle properties follow the memory they stand for; pure, so sleep refreshes them without reaching the store.
2
+ import { evalNow, strengthAblation } from './ablation.js';
3
+ import { calculateStrength } from './memory.js';
4
+ import { computeCharge, computeMass, computeTemperature } from './physics.js';
5
+ import { DAY_MS } from '../util/time.js';
6
+ /**
7
+ * Refresh mass, charge and temperature for existing particles
8
+ * from current memory attributes (called during consolidation).
9
+ */
10
+ export function refreshParticleProperties(particles, entries, now = evalNow()) {
11
+ for (const p of particles) {
12
+ const entry = entries.get(p.memoryId);
13
+ if (!entry)
14
+ continue;
15
+ const strength = calculateStrength(entry, now, { ablation: strengthAblation() });
16
+ const ageDays = (now.getTime() - new Date(entry.created).getTime()) / DAY_MS;
17
+ p.mass = computeMass(strength, entry.retrieval_count);
18
+ p.charge = computeCharge(entry.emotional_valence);
19
+ p.temperature = computeTemperature(ageDays, 1.0);
20
+ }
21
+ }
22
+ //# sourceMappingURL=particle-refresh.js.map
@@ -1,4 +1,7 @@
1
- /** Physics engine configuration for Hippo memory-as-physics. All constants are tunable; defaults calibrated for ~500 memory corpus. */
1
+ /**
2
+ * Physics engine configuration for Hippo memory-as-physics. All constants are tunable; defaults calibrated for ~500
3
+ * memory corpus.
4
+ */
2
5
  export interface PhysicsConfig {
3
6
  /** Use physics scoring when embeddings available. 'auto' = yes if embeddings exist. */
4
7
  enabled: boolean | 'auto';
@@ -1,6 +1,10 @@
1
- /** Physics engine configuration for Hippo memory-as-physics. All constants are tunable; defaults calibrated for ~500 memory corpus. */
1
+ /**
2
+ * Physics engine configuration for Hippo memory-as-physics. All constants are tunable; defaults calibrated for ~500
3
+ * memory corpus.
4
+ */
2
5
  export const DEFAULT_PHYSICS_CONFIG = {
3
- // Off by default: the paired ablation (benchmarks/physics-ablation/) found physics worse than classic hybrid on every metric, CI excluding zero
6
+ // Off by default: the paired ablation (benchmarks/physics-ablation/) found physics worse than classic hybrid on every
7
+ // metric, CI excluding zero
4
8
  // (MRR 0.68 vs 0.84, R@5 74% vs 84%). Opt in with physics.enabled 'auto' or true.
5
9
  enabled: false,
6
10
  G_query: 2.0,
@@ -1,7 +1,10 @@
1
- /** Memory-as-Physics engine: pure math (forces, Velocity Verlet integration, physics-based scoring, cluster amplification), no I/O.
2
- * Memories are particles on the unit hypersphere in embedding space (384-dim); query gravity, attraction, conflict repulsion and drag act on them,
1
+ /**
2
+ * Memory-as-Physics engine: pure math (forces, Velocity Verlet integration, physics-based scoring, cluster
3
+ * amplification), no I/O.
4
+ * Memories are particles on the unit hypersphere in embedding space (384-dim); query gravity, attraction, conflict
5
+ * repulsion and drag act on them,
3
6
  * and nearby high-scoring memories amplify each other. */
4
- import { type EmotionalValence } from './memory.js';
7
+ import { type EmotionalValence, type MemoryEntry } from './memory.js';
5
8
  import type { PhysicsConfig } from './physics-config.js';
6
9
  export interface PhysicsParticle {
7
10
  memoryId: string;
@@ -43,16 +46,29 @@ export declare function vecClampMagnitude(v: number[], maxMag: number): number[]
43
46
  export declare function computeMass(strength: number, retrievalCount: number): number;
44
47
  export declare function computeCharge(valence: EmotionalValence): number;
45
48
  export declare function computeTemperature(ageDays: number, temperatureDecay: number): number;
46
- /** Query gravity (retrieval-time, virtual: does not move the particle): scalar ranking magnitude F = G_Q * mass * max(0, cosine(pos, query))^2. */
49
+ /**
50
+ * Query gravity (retrieval-time, virtual: does not move the particle): scalar ranking magnitude F = G_Q * mass * max(0,
51
+ * cosine(pos, query))^2.
52
+ */
47
53
  export declare function queryGravityMagnitude(particle: PhysicsParticle, queryEmbedding: number[], G_query: number): number;
48
54
  /** Momentum bonus in [0, 1]: how aligned the particle's velocity is with the query direction. */
49
55
  export declare function velocityAlignmentBonus(particle: PhysicsParticle, queryEmbedding: number[]): number;
50
- /** Attraction force on particle i from j (consolidation-time): G_M m_i m_j max(0, cosine)^3, directed along (pos_j - pos_i) projected tangent to the unit
51
- * sphere at pos_i (positions are re-normalized to the sphere after integration). Adds into `out` (a fresh zero vector by default) using `diff` as scratch. */
56
+ /**
57
+ * Attraction force on particle i from j (consolidation-time): G_M m_i m_j max(0, cosine)^3, directed along (pos_j -
58
+ * pos_i) projected tangent to the unit
59
+ * sphere at pos_i (positions are re-normalized to the sphere after integration). Adds into `out` (a fresh zero vector
60
+ * by default) using `diff` as scratch.
61
+ */
52
62
  export declare function attractionForce(pi: PhysicsParticle, pj: PhysicsParticle, G_memory: number, out?: number[], diff?: number[]): number[];
53
- /** Conflict repulsion on i away from j (consolidation-time): K_R * m_i * m_j / max(0.01, cosine_distance)^2, where cosine_distance = 1 - cosine_similarity. */
63
+ /**
64
+ * Conflict repulsion on i away from j (consolidation-time): K_R * m_i * m_j / max(0.01, cosine_distance)^2, where
65
+ * cosine_distance = 1 - cosine_similarity.
66
+ */
54
67
  export declare function repulsionForce(pi: PhysicsParticle, pj: PhysicsParticle, K_repulsion: number): number[];
55
- /** Drag force (consolidation-time): -drag * velocity / max(1, effectiveHalfLife), with effectiveHalfLife from the memory's current half_life_days. */
68
+ /**
69
+ * Drag force (consolidation-time): -drag * velocity / max(1, effectiveHalfLife), with effectiveHalfLife from the
70
+ * memory's current half_life_days.
71
+ */
56
72
  export declare function dragForce(particle: PhysicsParticle, drag: number, effectiveHalfLife: number): number[];
57
73
  export interface ForceContext {
58
74
  /** Map of memory ID -> list of conflicting memory IDs */
@@ -64,11 +80,23 @@ export interface ForceContext {
64
80
  /** Full physics simulation for one sleep cycle; mutates particles in place and returns simulation statistics. */
65
81
  export declare function simulate(particles: PhysicsParticle[], ctx: ForceContext): SimulationStats;
66
82
  export declare function computeSystemEnergy(particles: PhysicsParticle[], G_memory: number): SystemEnergy;
67
- /** Scores all particles against a query embedding; virtual force computation, so it does NOT modify particle positions. */
83
+ /**
84
+ * Scores all particles against a query embedding; virtual force computation, so it does NOT modify particle positions.
85
+ */
68
86
  export declare function physicsScore(particles: PhysicsParticle[], queryEmbedding: number[], config: PhysicsConfig,
69
- /** Cross-ingest-stable tie key per memoryId (typically the memory content, from a caller with entries in scope); without it ties fall to memoryId,
87
+ /**
88
+ * Cross-ingest-stable tie key per memoryId (typically the memory content, from a caller with entries in scope);
89
+ * without it ties fall to memoryId,
70
90
  * which is per-instance only and lets the cluster_top_k amplification set vary across fresh ingests. */
71
91
  tieKeyOf?: (memoryId: string) => string): ScoredPhysicsResult[];
72
- /** Nudges a particle toward (good outcome) or away from (bad outcome) the query embedding; new memories respond more (temperature). Mutates in place. */
92
+ /**
93
+ * Nudges a particle toward (good outcome) or away from (bad outcome) the query embedding; new memories respond more
94
+ * (temperature). Mutates in place.
95
+ */
73
96
  export declare function applyOutcomeFeedback(particle: PhysicsParticle, queryEmbedding: number[], good: boolean, feedbackAlpha: number): void;
97
+ /**
98
+ * Initialize physics state for a memory from its embedding vector; returns the new particle without persisting (the
99
+ * caller must save).
100
+ */
101
+ export declare function initializeParticle(entry: MemoryEntry, embedding: number[], now?: Date): PhysicsParticle;
74
102
  //# sourceMappingURL=physics.d.ts.map
@@ -1,10 +1,20 @@
1
- /** Memory-as-Physics engine: pure math (forces, Velocity Verlet integration, physics-based scoring, cluster amplification), no I/O.
2
- * Memories are particles on the unit hypersphere in embedding space (384-dim); query gravity, attraction, conflict repulsion and drag act on them,
1
+ /**
2
+ * Memory-as-Physics engine: pure math (forces, Velocity Verlet integration, physics-based scoring, cluster
3
+ * amplification), no I/O.
4
+ * Memories are particles on the unit hypersphere in embedding space (384-dim); query gravity, attraction, conflict
5
+ * repulsion and drag act on them,
3
6
  * and nearby high-scoring memories amplify each other. */
4
7
  import { cosineOf } from './cosine.js';
5
- import { isRecallBoostAblated } from './ablation.js';
6
- import { FALLBACK_HALF_LIFE_DAYS } from './memory.js';
8
+ import { evalNow, isRecallBoostAblated, strengthAblation } from './ablation.js';
9
+ import { calculateStrength, FALLBACK_HALF_LIFE_DAYS } from './memory.js';
10
+ import { DAY_MS } from '../util/time.js';
7
11
  import { comparePhysicsResultsBy } from './compare.js';
12
+ // Floors that stop a near-zero mass or a coincident pair from dividing a force by about zero.
13
+ const MIN_MASS = 0.01;
14
+ const MIN_COSINE_DISTANCE = 0.01;
15
+ // Mass gained per doubling of the retrieval count.
16
+ const RETRIEVAL_MASS_GAIN = 0.1;
17
+ const NEAR_ZERO = 1e-10;
8
18
  export function vecDot(a, b) {
9
19
  let sum = 0;
10
20
  for (let i = 0; i < a.length; i++)
@@ -38,7 +48,7 @@ export function vecZero(dim) {
38
48
  /** Normalize to unit length. Returns zero vector if magnitude < epsilon. */
39
49
  export function vecNormalize(v) {
40
50
  const mag = vecNorm(v);
41
- if (mag < 1e-10)
51
+ if (mag < NEAR_ZERO)
42
52
  return vecZero(v.length);
43
53
  return vecScale(v, 1 / mag);
44
54
  }
@@ -56,10 +66,12 @@ const CHARGE_MAP = {
56
66
  critical: -1.0,
57
67
  };
58
68
  export function computeMass(strength, retrievalCount) {
59
- // EVAL-ONLY ablation (ablation.ts): under the recall-boost flag mass ignores retrieval history, which would otherwise leak strengthening into the ablated
60
- // arm's physics-pool rankings (query gravity ranks by mass). Covers both init and refresh callers in physics-state.ts.
69
+ // EVAL-ONLY ablation (ablation.ts): under the recall-boost flag mass ignores retrieval history, which would otherwise
70
+ // leak strengthening into the ablated
71
+ // arm's physics-pool rankings (query gravity ranks by mass). Covers both init and refresh callers in
72
+ // physics-state.ts.
61
73
  const effectiveCount = isRecallBoostAblated() ? 0 : retrievalCount;
62
- return Math.max(0.01, strength * (1 + 0.1 * Math.log2(effectiveCount + 1)));
74
+ return Math.max(MIN_MASS, strength * (1 + RETRIEVAL_MASS_GAIN * Math.log2(effectiveCount + 1)));
63
75
  }
64
76
  export function computeCharge(valence) {
65
77
  return CHARGE_MAP[valence] ?? 0;
@@ -67,7 +79,10 @@ export function computeCharge(valence) {
67
79
  export function computeTemperature(ageDays, temperatureDecay) {
68
80
  return 1 / (ageDays * temperatureDecay + 1);
69
81
  }
70
- /** Query gravity (retrieval-time, virtual: does not move the particle): scalar ranking magnitude F = G_Q * mass * max(0, cosine(pos, query))^2. */
82
+ /**
83
+ * Query gravity (retrieval-time, virtual: does not move the particle): scalar ranking magnitude F = G_Q * mass * max(0,
84
+ * cosine(pos, query))^2.
85
+ */
71
86
  export function queryGravityMagnitude(particle, queryEmbedding, G_query) {
72
87
  const cos = cosineOf(particle.position, queryEmbedding);
73
88
  return G_query * particle.mass * Math.pow(Math.max(0, cos), 2);
@@ -78,13 +93,17 @@ export function velocityAlignmentBonus(particle, queryEmbedding) {
78
93
  return 0;
79
94
  const velMag = vecNorm(particle.velocity);
80
95
  const qNorm = vecNorm(queryEmbedding);
81
- if (velMag < 1e-10 || qNorm < 1e-10)
96
+ if (velMag < NEAR_ZERO || qNorm < NEAR_ZERO)
82
97
  return 0;
83
98
  const alignment = vecDot(particle.velocity, queryEmbedding) / (velMag * qNorm);
84
99
  return Math.max(0, alignment);
85
100
  }
86
- /** Attraction force on particle i from j (consolidation-time): G_M m_i m_j max(0, cosine)^3, directed along (pos_j - pos_i) projected tangent to the unit
87
- * sphere at pos_i (positions are re-normalized to the sphere after integration). Adds into `out` (a fresh zero vector by default) using `diff` as scratch. */
101
+ /**
102
+ * Attraction force on particle i from j (consolidation-time): G_M m_i m_j max(0, cosine)^3, directed along (pos_j -
103
+ * pos_i) projected tangent to the unit
104
+ * sphere at pos_i (positions are re-normalized to the sphere after integration). Adds into `out` (a fresh zero vector
105
+ * by default) using `diff` as scratch.
106
+ */
88
107
  export function attractionForce(pi, pj, G_memory, out = vecZero(pi.position.length), diff = vecZero(pi.position.length)) {
89
108
  const cos = cosineOf(pi.position, pj.position);
90
109
  if (cos <= 0)
@@ -94,23 +113,29 @@ export function attractionForce(pi, pj, G_memory, out = vecZero(pi.position.leng
94
113
  for (let k = 0; k < out.length; k++)
95
114
  diff[k] = pj.position[k] - pi.position[k];
96
115
  const norm = vecNorm(diff);
97
- if (norm < 1e-10)
116
+ if (norm < NEAR_ZERO)
98
117
  return out;
99
118
  const inv = 1 / norm;
100
119
  for (let k = 0; k < out.length; k++)
101
120
  out[k] += diff[k] * inv * magnitude;
102
121
  return out;
103
122
  }
104
- /** Conflict repulsion on i away from j (consolidation-time): K_R * m_i * m_j / max(0.01, cosine_distance)^2, where cosine_distance = 1 - cosine_similarity. */
123
+ /**
124
+ * Conflict repulsion on i away from j (consolidation-time): K_R * m_i * m_j / max(0.01, cosine_distance)^2, where
125
+ * cosine_distance = 1 - cosine_similarity.
126
+ */
105
127
  export function repulsionForce(pi, pj, K_repulsion) {
106
128
  const cos = cosineOf(pi.position, pj.position);
107
- const dist = Math.max(0.01, 1 - cos);
129
+ const dist = Math.max(MIN_COSINE_DISTANCE, 1 - cos);
108
130
  const magnitude = K_repulsion * pi.mass * pj.mass / (dist * dist);
109
131
  // Direction: away from j
110
132
  const direction = vecNormalize(vecSub(pi.position, pj.position));
111
133
  return vecScale(direction, magnitude);
112
134
  }
113
- /** Drag force (consolidation-time): -drag * velocity / max(1, effectiveHalfLife), with effectiveHalfLife from the memory's current half_life_days. */
135
+ /**
136
+ * Drag force (consolidation-time): -drag * velocity / max(1, effectiveHalfLife), with effectiveHalfLife from the
137
+ * memory's current half_life_days.
138
+ */
114
139
  export function dragForce(particle, drag, effectiveHalfLife) {
115
140
  const damping = drag / Math.max(1, effectiveHalfLife);
116
141
  return vecScale(particle.velocity, -damping);
@@ -142,7 +167,7 @@ function computeNetForce(i, particles, ctx, diff) {
142
167
  /** Acceleration of particle i: its net force divided by mass, scaled in place. */
143
168
  function computeAcceleration(i, particles, ctx, diff) {
144
169
  const accel = computeNetForce(i, particles, ctx, diff);
145
- const inv = 1 / Math.max(0.01, particles[i].mass);
170
+ const inv = 1 / Math.max(MIN_MASS, particles[i].mass);
146
171
  for (let k = 0; k < accel.length; k++)
147
172
  accel[k] *= inv;
148
173
  return accel;
@@ -233,9 +258,13 @@ export function computeSystemEnergy(particles, G_memory) {
233
258
  }
234
259
  return { kinetic, potential, total: kinetic + potential };
235
260
  }
236
- /** Scores all particles against a query embedding; virtual force computation, so it does NOT modify particle positions. */
261
+ /**
262
+ * Scores all particles against a query embedding; virtual force computation, so it does NOT modify particle positions.
263
+ */
237
264
  export function physicsScore(particles, queryEmbedding, config,
238
- /** Cross-ingest-stable tie key per memoryId (typically the memory content, from a caller with entries in scope); without it ties fall to memoryId,
265
+ /**
266
+ * Cross-ingest-stable tie key per memoryId (typically the memory content, from a caller with entries in scope);
267
+ * without it ties fall to memoryId,
239
268
  * which is per-instance only and lets the cluster_top_k amplification set vary across fresh ingests. */
240
269
  tieKeyOf) {
241
270
  if (particles.length === 0 || queryEmbedding.length === 0)
@@ -251,7 +280,8 @@ tieKeyOf) {
251
280
  finalScore: gravity + momentum,
252
281
  };
253
282
  });
254
- // Base-score order picks the cluster_top_k amplification SET (which mutates scores), so ties must be cross-ingest-stable
283
+ // Base-score order picks the cluster_top_k amplification SET (which mutates scores), so ties must be
284
+ // cross-ingest-stable
255
285
  // when the caller supplies a content tie key (see comparePhysicsResultsBy in compare.ts).
256
286
  const tie = tieKeyOf ? (r) => tieKeyOf(r.memoryId) : undefined;
257
287
  results.sort(comparePhysicsResultsBy((r) => r.baseScore, tie));
@@ -292,7 +322,10 @@ function applyClusterAmplification(results, particles, config) {
292
322
  top[i].finalScore = top[i].baseScore * amplification;
293
323
  }
294
324
  }
295
- /** Nudges a particle toward (good outcome) or away from (bad outcome) the query embedding; new memories respond more (temperature). Mutates in place. */
325
+ /**
326
+ * Nudges a particle toward (good outcome) or away from (bad outcome) the query embedding; new memories respond more
327
+ * (temperature). Mutates in place.
328
+ */
296
329
  export function applyOutcomeFeedback(particle, queryEmbedding, good, feedbackAlpha) {
297
330
  if (particle.position.length === 0 || particle.position.length !== queryEmbedding.length)
298
331
  return;
@@ -301,4 +334,21 @@ export function applyOutcomeFeedback(particle, queryEmbedding, good, feedbackAlp
301
334
  const nudge = vecScale(direction, sign * feedbackAlpha * particle.temperature);
302
335
  particle.position = vecNormalize(vecAdd(particle.position, nudge));
303
336
  }
337
+ /**
338
+ * Initialize physics state for a memory from its embedding vector; returns the new particle without persisting (the
339
+ * caller must save).
340
+ */
341
+ export function initializeParticle(entry, embedding, now = evalNow()) {
342
+ const strength = calculateStrength(entry, now, { ablation: strengthAblation() });
343
+ const ageDays = (now.getTime() - new Date(entry.created).getTime()) / DAY_MS;
344
+ return {
345
+ memoryId: entry.id,
346
+ position: [...embedding], // copy: position will diverge from original embedding
347
+ velocity: vecZero(embedding.length),
348
+ mass: computeMass(strength, entry.retrieval_count),
349
+ charge: computeCharge(entry.emotional_valence),
350
+ temperature: computeTemperature(ageDays, 1.0),
351
+ lastSimulation: now.toISOString(),
352
+ };
353
+ }
304
354
  //# sourceMappingURL=physics.js.map