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,66 +1,22 @@
1
- /**
2
- * Store-level deduplication. Scans for memories with the same text apart
3
- * from spacing, keeps the stronger copy (by strength + retrieval count),
4
- * removes the rest.
5
- *
6
- * Extracted from cli.ts in Episode A (v1.11.3) so `api.sleep` can dedupe
7
- * during the consolidation pipeline without violating the cli -> api
8
- * dependency direction. `cmdDedup` in cli.ts continues to import and use
9
- * this function unchanged.
10
- *
11
- * Survivor selection is a total order as of v1.26.3
12
- * (docs/plans/2026-07-16-dedupe-survivor-determinism.md): strength bucket
13
- * desc -> retrieval_count desc -> compareEntryIdentity (content asc ->
14
- * layer rank -> tags -> source -> id asc; the metadata keys arrived in
15
- * v1.38.1, docs/plans/2026-09-04-dedupe-survivor-metadata.md). Previously
16
- * the strength/retrieval-count comparator could tie exactly with no terminal
17
- * key, so the survivor fell to load order (arrival-order-dependent); see
18
- * `strengthBucket` below for the bucket encoding. As of the tenant-partition
19
- * fix (docs/plans/2026-08-15-dedupe-tenant-partition.md) the order is scoped
20
- * WITHIN each tenant group; cross-tenant pairs are never compared. Raw and
21
- * superseded rows are not candidates at all (v1.38.1).
22
- */
1
+ /** Store-level dedup: same text apart from spacing, keeping the stronger copy; split out so `api.sleep` can dedupe without cli -> api imports.
2
+ * Survivor order is total and tenant-scoped: strength bucket, retrieval_count, then compareEntryIdentity; raw and superseded rows are not candidates. */
23
3
  import { textOverlap } from '../util/tokenize.js';
24
4
  import { loadCurrentDistilledEntries } from '../store/entry-reads.js';
25
5
  import { deleteEntriesOneByOne, memoriesBackingObjects } from '../store/delete-and-batch.js';
26
6
  import { compareEntryIdentity } from '../core/compare.js';
27
7
  import { canAutoDelete } from '../core/memory.js';
28
- import { derivationPartitionKey } from '../store/recall-scope.js';
8
+ import { derivationPartitionKey } from '../core/recall-scope.js';
29
9
  import { duplicateKey } from '../util/same-text.js';
30
- /** Quantization step for strength-tie comparisons. The historical 0.01
31
- * epsilon (see `strengthBucket` below) applied via rounding instead of a
32
- * raw abs-diff threshold, so the tiebreak is transitive. */
10
+ /** Quantization step for strength-tie comparisons: the 0.01 epsilon applied by rounding instead of an abs-diff threshold, so the tiebreak is transitive. */
33
11
  const STRENGTH_TIE_EPSILON = 0.01;
34
- /**
35
- * Quantize a strength value into an integer "bucket" for tie comparison.
36
- *
37
- * Encodes the historical 0.01 epsilon transitively: two strengths compare
38
- * equal here iff they round to the same multiple of `STRENGTH_TIE_EPSILON`,
39
- * which (unlike a raw `Math.abs(a - b) > epsilon` check) is a genuine
40
- * equivalence relation — no more "A ties B, B ties C, but A beats C"
41
- * (see the file-level history note above).
42
- *
43
- * Non-finite input (`NaN`, `+/-Infinity`) maps to bucket `0` rather than
44
- * propagating: a NaN bucket would make the sort comparator return NaN,
45
- * silently reintroducing the non-total-order class this fix exists to kill.
46
- * (`null`/`undefined` already default to strength `0` via `?? 0`, same as
47
- * before this change.)
48
- *
49
- * Bucket-edge nuance: two strengths straddling a bucket edge (e.g. 0.0049 vs
50
- * 0.0051) now compare as different, where the old raw-epsilon check called
51
- * them tied. The flip always favors the not-weaker entry, and the OLD
52
- * behavior at such pairs was itself order/engine-dependent (the defect this
53
- * fix exists to kill) — so there is no stable prior behavior being broken.
54
- */
12
+ /** Quantize strength to an integer bucket so ties are a true equivalence relation (equal iff same multiple of `STRENGTH_TIE_EPSILON`).
13
+ * Non-finite input maps to 0: a NaN bucket would make the comparator return NaN and break the total order. */
55
14
  export function strengthBucket(strength) {
56
15
  const s = strength ?? 0;
57
16
  return Number.isFinite(s) ? Math.round(s / STRENGTH_TIE_EPSILON) : 0;
58
17
  }
59
- // finiteCount mirrors strengthBucket's non-finite hardening on the
60
- // retrieval leg: a NaN retrieval_count would make the comparator return
61
- // NaN and break the total order the same way a NaN bucket would.
62
- // Unreachable via the schema (non-nullable INTEGER column), so this is
63
- // symmetry, not a live bug.
18
+ // finiteCount hardens the retrieval leg like strengthBucket: a NaN would break the total order.
19
+ // Unreachable via the schema (non-nullable INTEGER column); kept for symmetry.
64
20
  const finiteCount = (n) => Number.isFinite(n ?? 0) ? (n ?? 0) : 0;
65
21
  /** The v1.26.3 survivor total order: strength bucket desc, then retrieval_count desc, then compareEntryIdentity. */
66
22
  function survivorOrder(a, b) {
@@ -72,12 +28,8 @@ function survivorOrder(a, b) {
72
28
  return retrievalDiff;
73
29
  return compareEntryIdentity(a, b);
74
30
  }
75
- // Tenant partition (mirrors consolidate.ts mergeCandidatesByTenant and
76
- // dag.ts unparentedByTenant): group by tenantId BEFORE the sort so a
77
- // duplicate pair can never form across tenants. Map preserves insertion
78
- // order, so a single-tenant store (every row 'default') gets exactly one
79
- // group and the sort plus pair loop below run byte-identical to the
80
- // pre-fix global pass.
31
+ // Tenant partition: group by tenantId before sorting so a duplicate pair never forms across tenants; Map keeps insertion order,
32
+ // so a single-tenant store gets one group and the same result as a global pass.
81
33
  function entriesByPartition(entries) {
82
34
  const entriesByTenant = new Map();
83
35
  for (const entry of entries) {
@@ -121,28 +73,20 @@ function partitionPairs(tenantEntries, removed, backing) {
121
73
  }
122
74
  return [...groups.values()].flatMap((group) => group.pairs);
123
75
  }
124
- /**
125
- * Scan the store for duplicates and remove the weaker copy: same text apart
126
- * from spacing, since a near-duplicate can differ in a value (port, version,
127
- * path, name), AND the same tenant: the scan is partitioned by
128
- * tenantId, so byte-identical content in two tenants is never a duplicate
129
- * pair (the tenant boundary is an isolation boundary; cross-tenant removal
130
- * was the v1.32.0 known-issue data-loss bug).
131
- * Keeps the one with higher strength (or more retrievals if tied). `threshold` is accepted for old callers and ignored.
132
- */
76
+ /** The rows loadCurrentDistilledEntries selects, picked from a whole-store read. */
77
+ const isCurrentDistilled = (e) => (e.kind ?? 'distilled') === 'distilled' && !e.superseded_by;
78
+ /** Remove the weaker copy of same-text (apart from spacing) memories within one tenant; cross-tenant pairs are never duplicates (isolation boundary).
79
+ * Higher strength wins, then more retrievals; `threshold` is accepted for old callers and ignored. */
133
80
  export function deduplicateStore(hippoRoot, options = {}) {
134
81
  const dryRun = options.dryRun ?? false;
135
82
  // Only current distilled rows compete: raw rows are append-only (the delete
136
- // trigger would abort sleep mid-loop) and superseded rows are history, as in consolidate.ts.
137
- const entries = loadCurrentDistilledEntries(hippoRoot);
83
+ // trigger would abort sleep mid-loop) and superseded rows are history.
84
+ const entries = options.loaded?.entries.filter(isCurrentDistilled) ?? loadCurrentDistilledEntries(hippoRoot);
138
85
  const entriesByTenant = entriesByPartition(entries);
139
- // Shared across tenant groups: safe because memory ids are globally
140
- // unique (crypto.randomUUID at creation), so an id in `removed` can never
141
- // collide with another tenant's row, and deleteEntry below deletes by
142
- // primary-key id alone.
86
+ // Shared across tenant groups: ids are globally unique UUIDs, so `removed` cannot collide across tenants and deleteEntry deletes by primary key alone.
143
87
  const removed = new Set();
144
88
  const pairs = [];
145
- const backing = memoriesBackingObjects(hippoRoot);
89
+ const backing = options.loaded?.backing ?? memoriesBackingObjects(hippoRoot);
146
90
  for (const tenantEntries of entriesByTenant.values()) {
147
91
  // The survivor total order (see the file-level docstring), scoped per
148
92
  // tenant group: the total order holds within a tenant only, matching the partition above.
@@ -1,9 +1,8 @@
1
1
  import type { MemoryEntry } from '../core/memory.js';
2
2
  import type { DormantMove } from '../store/dormant.js';
3
- import type { FlushComponent } from '../store/delete-and-batch.js';
3
+ import type { FlushComponent, LoadedRows } from '../store/delete-and-batch.js';
4
4
  /** Components that share no id, ordered by each one's first op across writes, then deletes, then dormant moves. */
5
5
  export declare function groupFlush(writes: readonly MemoryEntry[], deletes: readonly string[], dormant: readonly DormantMove[], units: readonly (readonly string[])[]): FlushComponent[];
6
- /** [child, parent] for each queued op on a child whose DAG parent the run removes: a child's change marks the parent
7
- * dirty, and one transaction always applied that mark after the parent was gone, so it audited nothing. */
8
- export declare function familyUnits(writes: readonly MemoryEntry[], deletes: readonly string[], dormant: readonly DormantMove[], snapshot: ReadonlyMap<string, MemoryEntry>): string[][];
6
+ /** [child, parent] per queued op on a child whose DAG parent the run removes: the parent-dirty mark otherwise lands after the parent is gone. */
7
+ export declare function familyUnits(writes: readonly MemoryEntry[], deletes: readonly string[], dormant: readonly DormantMove[], snapshot: LoadedRows): string[][];
9
8
  //# sourceMappingURL=flush-units.d.ts.map
@@ -42,9 +42,9 @@ function unionFind(units) {
42
42
  }
43
43
  return find;
44
44
  }
45
- /** [child, parent] for each queued op on a child whose DAG parent the run removes: a child's change marks the parent
46
- * dirty, and one transaction always applied that mark after the parent was gone, so it audited nothing. */
47
- // SHORTCUT: a removed parent and all its changed children commit as one component, so one hold can pass holdMs by a family's size; split by child if a family grows large.
45
+ /** [child, parent] per queued op on a child whose DAG parent the run removes: the parent-dirty mark otherwise lands after the parent is gone. */
46
+ // SHORTCUT: a removed parent and all its changed children commit as one component, so
47
+ // one hold can pass holdMs by a family's size; split by child if a family grows large.
48
48
  export function familyUnits(writes, deletes, dormant, snapshot) {
49
49
  const removing = new Set([...deletes, ...dormant.map((m) => m.entry.id)]);
50
50
  const units = [];
@@ -1,24 +1,5 @@
1
- /**
2
- * Moving a store's memories to a new default half-life.
3
- *
4
- * Each memory stores its own `half_life_days`, set at write from the
5
- * default base and a few write-time multipliers (`deriveHalfLife`). Changing
6
- * the default therefore reaches only new memories; without this migration a
7
- * store would mix old-base and new-base memories, a state the decay
8
- * evaluation never tested. The rule, declared before any run:
9
- *
10
- * - only a memory still on the old base is rescaled: its half-life is
11
- * `deriveHalfLife(from, entry)` plus its recall bonus. A memory hippo shortened since
12
- * (invalidated, superseded, a merge source, marked bad) or one with its own
13
- * fixed half-life (decisions, incidents, customer notes) keeps its value;
14
- * - every rescale is written to the audit log with the ids, so it can be
15
- * undone, and the store records the base it is on (`meta`), so the
16
- * migration runs once.
17
- *
18
- * `hippo sleep` runs it before its decay pass, from the base the store is on
19
- * (7 days when never recorded) to the configured `defaultHalfLifeDays`. Once per store it also
20
- * moves memories of live decisions, incidents and other objects off the flat 90 days they used to get.
21
- */
1
+ /** Moves a store's memories to a new default half-life: only memories still on the old base are rescaled (`deriveHalfLife(from, entry)` plus recall bonus).
2
+ * Memories hippo shortened since, or with their own fixed half-life, keep theirs; rescales are audit-logged and `meta` records the base, so it runs once. */
22
3
  import { type MemoryEntry } from '../core/memory.js';
23
4
  import { HALF_LIFE_BASE_META_KEY, LEGACY_TYPED_HALF_LIFE } from '../store/open.js';
24
5
  export { HALF_LIFE_BASE_META_KEY, LEGACY_TYPED_HALF_LIFE };
@@ -45,11 +26,7 @@ export declare function planHalfLifeMigration(entries: readonly MemoryEntry[], f
45
26
  export declare function planTypedHalfLifeMigration(entries: readonly MemoryEntry[], to: number): MemoryEntry[];
46
27
  /** The base this store's memories are on. */
47
28
  export declare function storeHalfLifeBase(hippoRoot: string): number;
48
- /**
49
- * Move the store's memories from the base they are on, and those of objects from
50
- * the old flat 90 days, to `to`, once. Under `dryRun` nothing is written, the recorded
51
- * base included.
52
- */
29
+ /** Move the store's memories, and those of objects on the old flat 90 days, from their recorded base to `to`, once; `dryRun` writes nothing. */
53
30
  export declare function migrateDefaultHalfLife(hippoRoot: string, to: number, opts?: {
54
31
  dryRun?: boolean;
55
32
  actor?: string;
@@ -1,24 +1,5 @@
1
- /**
2
- * Moving a store's memories to a new default half-life.
3
- *
4
- * Each memory stores its own `half_life_days`, set at write from the
5
- * default base and a few write-time multipliers (`deriveHalfLife`). Changing
6
- * the default therefore reaches only new memories; without this migration a
7
- * store would mix old-base and new-base memories, a state the decay
8
- * evaluation never tested. The rule, declared before any run:
9
- *
10
- * - only a memory still on the old base is rescaled: its half-life is
11
- * `deriveHalfLife(from, entry)` plus its recall bonus. A memory hippo shortened since
12
- * (invalidated, superseded, a merge source, marked bad) or one with its own
13
- * fixed half-life (decisions, incidents, customer notes) keeps its value;
14
- * - every rescale is written to the audit log with the ids, so it can be
15
- * undone, and the store records the base it is on (`meta`), so the
16
- * migration runs once.
17
- *
18
- * `hippo sleep` runs it before its decay pass, from the base the store is on
19
- * (7 days when never recorded) to the configured `defaultHalfLifeDays`. Once per store it also
20
- * moves memories of live decisions, incidents and other objects off the flat 90 days they used to get.
21
- */
1
+ /** Moves a store's memories to a new default half-life: only memories still on the old base are rescaled (`deriveHalfLife(from, entry)` plus recall bonus).
2
+ * Memories hippo shortened since, or with their own fixed half-life, keep theirs; rescales are audit-logged and `meta` records the base, so it runs once. */
22
3
  import { deriveHalfLife } from '../core/memory.js';
23
4
  import { HALF_LIFE_BASE_META_KEY, LEGACY_TYPED_HALF_LIFE } from '../store/open.js';
24
5
  import { moveHalfLives, recordedHalfLifeBase } from '../store/half-life.js';
@@ -53,11 +34,7 @@ export function planTypedHalfLifeMigration(entries, to) {
53
34
  export function storeHalfLifeBase(hippoRoot) {
54
35
  return recordedHalfLifeBase(hippoRoot);
55
36
  }
56
- /**
57
- * Move the store's memories from the base they are on, and those of objects from
58
- * the old flat 90 days, to `to`, once. Under `dryRun` nothing is written, the recorded
59
- * base included.
60
- */
37
+ /** Move the store's memories, and those of objects on the old flat 90 days, from their recorded base to `to`, once; `dryRun` writes nothing. */
61
38
  export function migrateDefaultHalfLife(hippoRoot, to, opts = {}) {
62
39
  const dryRun = opts.dryRun ?? false;
63
40
  const { from, outcome } = moveHalfLives(hippoRoot, to, { dryRun, actor: opts.actor ?? 'system' }, (rows) => {
@@ -65,7 +42,12 @@ export function migrateDefaultHalfLife(hippoRoot, to, opts = {}) {
65
42
  const plan = [...basePlan, ...typedPlan];
66
43
  return {
67
44
  moves: [{ from: rows.from, to, entries: basePlan }, { from: LEGACY_TYPED_HALF_LIFE, to, entries: typedPlan }],
68
- outcome: { rescaled: basePlan.length, typed: typedPlan.length, kept: rows.all.length - plan.length, halfLives: new Map(plan.map((e) => [e.id, e.half_life_days])) },
45
+ outcome: {
46
+ rescaled: basePlan.length,
47
+ typed: typedPlan.length,
48
+ kept: rows.all.length - plan.length,
49
+ halfLives: new Map(plan.map((e) => [e.id, e.half_life_days]))
50
+ },
69
51
  };
70
52
  });
71
53
  const moved = outcome ?? { rescaled: 0, typed: 0, kept: 0, halfLives: new Map() };
@@ -94,7 +76,8 @@ function objectMemoryIds(objectRows) {
94
76
  }
95
77
  return { all, retired };
96
78
  }
97
- /** Memories that lost a conflict, which resolveConflict halved untagged. A resolved conflict with no audit row (resolved before resolves were audited, or found stale) names no winner, so both sides count. */
79
+ /** Memories that lost a conflict, which resolveConflict halved untagged. A resolved conflict with no audit
80
+ * row (resolved before resolves were audited, or found stale) names no winner, so both sides count. */
98
81
  function conflictLosers(audited, resolved) {
99
82
  const losers = new Set(audited.map((a) => a.loserId));
100
83
  const named = new Set(audited.map((a) => a.conflictId));
@@ -1,8 +1,11 @@
1
1
  import { envAnthropicApiKey, envDagRebuildCap } from '../util/env.js';
2
2
  import { Layer } from '../core/memory.js';
3
- import { log } from '../util/log.js';
3
+ import { errorFields, errorMessage, log } from '../util/log.js';
4
4
  import { keptAsWritten } from './run.js';
5
5
  import { isReusable } from '../core/memory-quality.js';
6
+ import { isPermanentFailure } from '../util/anthropic-messages.js';
7
+ // Bounds the LLM calls one sleep spends on extraction.
8
+ const EXTRACTION_BATCH_LIMIT = 20;
6
9
  /** The key, model options and once-per-line error reporter every LLM phase shares. */
7
10
  function sleepLlm(run, fetcher) {
8
11
  const { config, result } = run;
@@ -21,30 +24,17 @@ function sleepLlm(run, fetcher) {
21
24
  return { apiKey, llmError, llmOpts };
22
25
  }
23
26
  export async function llmPasses(run, fetcher) {
24
- // -------------------------------------------------------------------------
25
27
  // 1.6. Batch extraction — extract facts from episodic memories missing them
26
- // -------------------------------------------------------------------------
27
28
  const extractedFromIds = new Set(run.survivors.filter((e) => e.extracted_from).map((e) => e.extracted_from));
28
29
  const extractionCandidates = run.survivors.filter((e) => e.layer === Layer.Episodic && !e.superseded_by && !extractedFromIds.has(e.id) && !keptAsWritten(e)
29
30
  && e.trace_outcome === null && e.source !== 'auto-promote' && isReusable(e));
30
31
  run.result.extractionCandidates = extractionCandidates.length;
31
32
  const llm = sleepLlm(run, fetcher);
32
33
  if (llm.apiKey && extractionCandidates.length > 0 && !run.dryRun) {
33
- const { extractFacts, storeExtractedFacts } = await import('../learn/extract.js');
34
- const batchLimit = 20;
35
- let extractedCount = 0;
36
- for (const candidate of extractionCandidates.slice(0, batchLimit)) {
37
- try {
38
- const facts = await extractFacts(candidate.content, { ...llm.llmOpts, onError: llm.llmError('extraction') });
39
- if (facts.length > 0) {
40
- extractedCount += storeExtractedFacts(run.hippoRoot, candidate, facts).length;
41
- }
42
- }
43
- catch (err) {
44
- llm.llmError('extraction')(String(err));
45
- }
46
- }
47
- run.result.extracted = extractedCount;
34
+ const stopped = await extractionPass(run, llm, extractionCandidates.slice(0, EXTRACTION_BATCH_LIMIT));
35
+ // The DAG passes call the same API with the same key and model, so they would fail the same way.
36
+ if (stopped)
37
+ return;
48
38
  }
49
39
  await dagBuildPass(run, llm);
50
40
  if (llm.apiKey && !run.dryRun) {
@@ -52,9 +42,38 @@ export async function llmPasses(run, fetcher) {
52
42
  await entityProfilePass(run, llm);
53
43
  }
54
44
  }
55
- // -------------------------------------------------------------------------
45
+ /** Extracts facts from each candidate; true when it stopped on a failure every later call would repeat (bad key, no credit, unknown model). */
46
+ async function extractionPass(run, llm, batch) {
47
+ const { extractFacts, storeExtractedFacts } = await import('../learn/extract.js');
48
+ const report = llm.llmError('extraction');
49
+ let extractedCount = 0;
50
+ let stopped = false;
51
+ const onError = (msg, failure) => {
52
+ report(msg);
53
+ if (failure && isPermanentFailure(failure))
54
+ stopped = true;
55
+ };
56
+ for (const [index, candidate] of batch.entries()) {
57
+ try {
58
+ const facts = await extractFacts(candidate.content, { ...llm.llmOpts, onError });
59
+ if (facts.length > 0) {
60
+ extractedCount += storeExtractedFacts(run.hippoRoot, candidate, facts).length;
61
+ }
62
+ }
63
+ catch (err) {
64
+ report(errorMessage(err));
65
+ log.warn('consolidate extraction threw', errorFields(err));
66
+ }
67
+ if (stopped) {
68
+ const skipped = batch.length - index - 1;
69
+ report(`stopped after a failure that will not clear on retry; ${skipped} of ${batch.length} candidates skipped, and the DAG passes with them`);
70
+ break;
71
+ }
72
+ }
73
+ run.result.extracted = extractedCount;
74
+ return stopped;
75
+ }
56
76
  // 1.7. DAG summarization — cluster extracted facts and generate summaries
57
- // -------------------------------------------------------------------------
58
77
  async function dagBuildPass(run, { apiKey, llmError, llmOpts }) {
59
78
  const extractedFacts = run.survivors.filter((e) => e.tags.includes('extracted') && e.dag_level === 1 && !e.superseded_by && isReusable(e));
60
79
  if (!(apiKey && extractedFacts.length >= 3 && !run.dryRun))
@@ -69,17 +88,12 @@ async function dagBuildPass(run, { apiKey, llmError, llmOpts }) {
69
88
  }
70
89
  }
71
90
  catch (err) {
72
- llmError('dag')(String(err));
91
+ llmError('dag')(errorMessage(err));
92
+ log.warn('consolidate dag threw', errorFields(err));
73
93
  }
74
94
  }
75
- // -------------------------------------------------------------------------
76
- // 1.8. DAG summary rebuild — drain dirty queue from the child-write hooks
77
- // -------------------------------------------------------------------------
78
- // Consumer of the summary_dirty flag. Walks dirty L2 summaries, regenerates
79
- // each via generateDagSummary, atomically refreshes content + 6 metadata
80
- // columns + clears summary_dirty (with FTS sync). Same apiKey/dryRun gate
81
- // as buildDag above. Cap HIPPO_DAG_REBUILD_CAP (default 20, hard ceiling
82
- // 1000) prevents runaway LLM cost.
95
+ // 1.8. DAG summary rebuild: drain the summary_dirty queue set by child-write hooks; same apiKey/dryRun gate as buildDag.
96
+ // Cap HIPPO_DAG_REBUILD_CAP (default 20, hard ceiling 1000) prevents runaway LLM cost.
83
97
  async function dagRebuildPass(run, { llmError, llmOpts }) {
84
98
  const { result } = run;
85
99
  try {
@@ -109,18 +123,12 @@ async function dagRebuildPass(run, { llmError, llmOpts }) {
109
123
  }
110
124
  }
111
125
  catch (err) {
112
- llmError('dag rebuild')(String(err));
126
+ llmError('dag rebuild')(errorMessage(err));
127
+ log.warn('consolidate dag rebuild threw', errorFields(err));
113
128
  }
114
129
  }
115
- // -------------------------------------------------------------------------
116
- // 1.9. DAG entity profiles — cluster L2 topic summaries into L3 profiles
117
- // -------------------------------------------------------------------------
118
- // Aggregate per-entity L2 summaries (e.g. all the speaker:Alice
119
- // topic summaries) into a single L3 entity profile. Runs even when phase
120
- // 1.7 buildDag was skipped (re-clusters existing L2s every sleep).
121
- //
122
- // Uses loadAllL2Summaries (not `survivors`) because phase 1.7 wrote new
123
- // L2s directly via writeEntry without pushing back into survivors.
130
+ // 1.9. DAG entity profiles: cluster L2 summaries into per-entity L3 profiles; runs even when 1.7 was skipped (re-clusters existing L2s every sleep).
131
+ // Uses loadAllL2Summaries, not `survivors`: phase 1.7 wrote new L2s via writeEntry without pushing them into survivors.
124
132
  async function entityProfilePass(run, { llmError, llmOpts }) {
125
133
  try {
126
134
  const { buildEntityProfiles } = await import('./dag.js');
@@ -135,7 +143,8 @@ async function entityProfilePass(run, { llmError, llmOpts }) {
135
143
  }
136
144
  }
137
145
  catch (err) {
138
- llmError('dag profiles')(String(err));
146
+ llmError('dag profiles')(errorMessage(err));
147
+ log.warn('consolidate dag profiles threw', errorFields(err));
139
148
  }
140
149
  }
141
150
  //# sourceMappingURL=llm-passes.js.map
@@ -1,16 +1,5 @@
1
- /**
2
- * Frozen learned memory-value weight vector.
3
- *
4
- * GENERATED FROM the frozen artifact
5
- * (benchmarks/memory-value/weights-learned.json +
6
- * benchmarks/memory-value/weights-learned.meta.json). NEVER EDIT BY HAND —
7
- * tests/memory-value-wiring.test.ts's weights-sync test asserts this constant
8
- * equals the committed JSON artifact (value equality + digest match), so
9
- * drift between the artifact and this file fails CI.
10
- *
11
- * CAVEAT: usage-feature signs reflect an anti-oracle simulation, NOT real usage
12
- * value. Never read this as production ranking advice.
13
- */
1
+ /** Frozen learned memory-value weight vector, GENERATED from benchmarks/memory-value/weights-learned.json; never edit by hand (a sync test fails CI on drift).
2
+ * CAVEAT: usage-feature signs come from an anti-oracle simulation, not real usage value; never read this as production ranking advice. */
14
3
  /** The 8 live feature dims the fitter optimized over (FIT_DIMS). */
15
4
  export declare const MEMORY_VALUE_WEIGHTS: Readonly<Record<string, number>>;
16
5
  /** sha256 of benchmarks/memory-value/weights-learned.json at freeze time
@@ -1,16 +1,5 @@
1
- /**
2
- * Frozen learned memory-value weight vector.
3
- *
4
- * GENERATED FROM the frozen artifact
5
- * (benchmarks/memory-value/weights-learned.json +
6
- * benchmarks/memory-value/weights-learned.meta.json). NEVER EDIT BY HAND —
7
- * tests/memory-value-wiring.test.ts's weights-sync test asserts this constant
8
- * equals the committed JSON artifact (value equality + digest match), so
9
- * drift between the artifact and this file fails CI.
10
- *
11
- * CAVEAT: usage-feature signs reflect an anti-oracle simulation, NOT real usage
12
- * value. Never read this as production ranking advice.
13
- */
1
+ /** Frozen learned memory-value weight vector, GENERATED from benchmarks/memory-value/weights-learned.json; never edit by hand (a sync test fails CI on drift).
2
+ * CAVEAT: usage-feature signs come from an anti-oracle simulation, not real usage value; never read this as production ranking advice. */
14
3
  /** The 8 live feature dims the fitter optimized over (FIT_DIMS). */
15
4
  export const MEMORY_VALUE_WEIGHTS = Object.freeze({
16
5
  age_days: -0.3245577821391783,
@@ -1,23 +1,5 @@
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. */
21
3
  import { type MemoryEntry } from '../core/memory.js';
22
4
  /** The 8 live feature dims (FIT_DIMS) — canonical order for iteration. */
23
5
  export declare const MV_FEATURE_NAMES: ReadonlyArray<keyof MvFeatureVector>;
@@ -31,44 +13,14 @@ export interface MvFeatureVector {
31
13
  outcome_ratio: number;
32
14
  content_length: number;
33
15
  }
34
- /**
35
- * Blind v1 feature dict for one MemoryEntry, restricted to the 8 dims the
36
- * frozen weights carry (mirrors extract.mjs's computeFeatures).
37
- *
38
- * CRITICAL: `strength` is CLOCK-BASIS `calculateStrength(entry, now)` with
39
- * NO DecayOptions — that is how the frozen weights' training features were
40
- * computed (extract.mjs never passes decayOpts). Passing the production
41
- * decay basis (config.decayBasis via consolidate.ts's decayOpts) into this
42
- * feature would silently break parity with the frozen weight vector. This
43
- * is an intentional divergence from the condemnation TRIGGER in
44
- * consolidate.ts, which keeps using decayOpts as today — only the rescue
45
- * FEATURE is clock-basis.
46
- */
16
+ /** 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
17
+ * DecayOptions, as in the weights' training; passing the production decay basis would silently break parity with the frozen weights. */
47
18
  export declare function computeMvFeatures(entry: MemoryEntry, now: Date): MvFeatureVector;
48
19
  export declare function validateWeights(weights?: Readonly<Record<string, number>>, digest?: string): void;
49
- /**
50
- * Min-max normalize each of the 8 features over the given entry set
51
- * (constant feature -> 0, matching evaluate.mjs), then score = dot(weights,
52
- * normalized). The normalization context is exactly the entries passed in —
53
- * callers control the bounded scope (per-tenant, non-pinned).
54
- *
55
- * `weights` defaults to the real frozen singleton; parameterized (like
56
- * validateWeights) so callers/tests can score against an explicit vector
57
- * without touching the module singleton.
58
- *
59
- * Non-finite features: Date.parse on a malformed `created`
60
- * string yields NaN, and NaN would silently corrupt every OTHER entry's
61
- * min-max in the same group. An entry with ANY non-finite computed feature
62
- * is excluded from the normalization context entirely (its raw values never
63
- * touch min/max) and always scores -Infinity — the lowest possible score, so
64
- * it sorts to the bottom of its tenant deterministically and (via rescueSet's
65
- * explicit finite-score guard below) can never be rescued. Conservative
66
- * direction: deletes(flag-on) subset deletes(flag-off) still holds.
67
- */
20
+ /** Min-max normalize the 8 features over the given entries (constant -> 0), then score = dot(weights, normalized); callers set the scope.
21
+ * 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. */
68
22
  export declare function scoreEntries(entries: MemoryEntry[], now: Date, weights?: Readonly<Record<string, number>>): Map<string, number>;
69
- /** Per-entry rank context within its tenant's non-pinned candidate set —
70
- * the score-rank basis both rescueSet's rescue decision and consolidate.ts's
71
- * audit-row metadata read from. */
23
+ /** Per-entry rank context within its tenant's non-pinned candidate set: the basis both rescueSet and the consolidate audit-row metadata read. */
72
24
  export interface MvRankInfo {
73
25
  tenantId: string;
74
26
  score: number;
@@ -79,40 +31,15 @@ export interface MvRankInfo {
79
31
  /** ceil(RESCUE_BUDGET * totalNonPinned) — the rescue cutoff; rank <= keepN rescues. */
80
32
  keepN: number;
81
33
  }
82
- /**
83
- * Groups non-pinned entries by tenantId, scores + ranks each tenant's
84
- * group independently, and returns per-entry rank context for every
85
- * non-pinned entry (not just condemned ones) — the shared basis for both
86
- * rescueSet's rescue decision and consolidate.ts's audit-row rank context,
87
- * so the two never compute the ranking differently.
88
- *
89
- * `weights`/`digest` default to the real frozen singleton — parameterized
90
- * (like validateWeights/scoreEntries) purely for direct unit-testability of
91
- * the fail-loud path, never overridden by production callers.
92
- */
34
+ /** Group non-pinned entries by tenantId, score and rank each group independently, and return rank context for every non-pinned entry;
35
+ * rescueSet and the consolidate audit rows share it so they never compute the ranking differently. */
93
36
  export declare function rankNonPinnedByTenant(entries: MemoryEntry[], now: Date, weights?: Readonly<Record<string, number>>, digest?: string): Map<string, MvRankInfo>;
94
37
  export interface RescueSetOptions {
95
38
  readonly weights?: Readonly<Record<string, number>>;
96
39
  readonly digest?: string;
97
40
  readonly precomputedRanks?: Map<string, MvRankInfo>;
98
41
  }
99
- /**
100
- * Rescue decision: a condemned entry is rescued iff it ranks in the top
101
- * 30% of its tenant's non-pinned candidate set by learned score. Returns the
102
- * subset of condemnedIds that are rescued — the caller filters commits
103
- * (rescued -> survivors) and threads the same set into detectConflicts.
104
- *
105
- * `weights`/`digest` default to the real frozen singleton; production
106
- * callers (consolidate.ts) never pass overrides — the params exist purely so
107
- * "flag on + a broken constant throws" is directly testable end-to-end
108
- * through this function without mutating the frozen module singleton.
109
- *
110
- * `precomputedRanks`: when the caller has already
111
- * computed the per-tenant ranking (e.g. consolidate.ts needs it separately
112
- * for detail/audit rank context), pass it here to skip the internal
113
- * rankNonPinnedByTenant call — the whole-store ranking pass then runs
114
- * exactly once per sleep instead of twice. Omitted (the default), rescueSet
115
- * computes it internally as before — existing callers/tests are unaffected.
116
- */
42
+ /** Rescue decision: the subset of condemnedIds ranking in the top 30% of their tenant's non-pinned set by learned score.
43
+ * Pass `precomputedRanks` to skip the internal ranking so the whole-store pass runs once per sleep; `weights`/`digest` overrides exist for tests only. */
117
44
  export declare function rescueSet(entries: MemoryEntry[], condemnedIds: Set<string>, now: Date, options?: RescueSetOptions): Set<string>;
118
45
  //# sourceMappingURL=memory-value.d.ts.map