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
@@ -3,7 +3,8 @@ import { jaccardMinShared, overlapPartners } from './overlap-index.js';
3
3
  import { isQuarantineScope } from '../trust/quarantine.js';
4
4
  import { isPersonalScope } from '../core/recall-scope.js';
5
5
  import { DECAY_THRESHOLD } from './decay.js';
6
- // Gate contradictions on content overlap, not shared tags (`feedback`/`policy` are too coarse). The Jaccard threshold on stopword-filtered tokens
6
+ // Gate contradictions on content overlap, not shared tags (`feedback`/`policy` are too coarse). The Jaccard threshold
7
+ // on stopword-filtered tokens
7
8
  // only applies after a polarity signal, so it filters drive-by topic similarity, not semantic drift.
8
9
  const CONFLICT_OVERLAP_THRESHOLD = 0.5;
9
10
  // Minimum distinctive shared tokens before we trust an overlap score. Filters
@@ -45,8 +46,9 @@ rescuedIds = new Set()) {
45
46
  continue;
46
47
  if (!recalledTogether(survivors[i], survivors[j]))
47
48
  continue;
48
- if ([survivors[i], survivors[j]].some((e) => e.tags.includes('extracted') || e.tags.includes('session-digest')))
49
+ if ([survivors[i], survivors[j]].some((e) => e.tags.includes('extracted') || e.tags.includes('session-digest'))) {
49
50
  continue;
51
+ }
50
52
  const reasonAndScore = describeConflict(profiles[i], profiles[j]);
51
53
  if (!reasonAndScore)
52
54
  continue;
@@ -60,21 +62,29 @@ rescuedIds = new Set()) {
60
62
  }
61
63
  return detected;
62
64
  }
63
- /** One project's ambient context can show both: same tenant, and the same project or a user-global row beside a project's. */
65
+ /**
66
+ * One project's ambient context can show both: same tenant, and the same project or a user-global row beside a
67
+ * project's.
68
+ */
64
69
  function recalledTogether(a, b) {
65
70
  // A personal row pairs only inside its own scope; any other pair shows its id to someone else.
66
71
  if ((isPersonalScope(a.scope) || isPersonalScope(b.scope)) && a.scope !== b.scope)
67
72
  return false;
68
- if (a.tenantId !== b.tenantId)
73
+ if (a.tenant_id !== b.tenant_id)
69
74
  return false;
70
75
  const [x, y] = [a.origin_project ?? null, b.origin_project ?? null];
71
76
  return x === y || (x === '' && y !== null) || (y === '' && x !== null);
72
77
  }
73
78
  function conflictProfile(text) {
74
79
  const opening = openingWindow(text);
75
- // Polarity is measured only in the first POLARITY_WINDOW_WORDS, so a stray negation deep in a prose memory doesn't flip the intent.
80
+ // Polarity is measured only in the first POLARITY_WINDOW_WORDS, so a stray negation deep in a prose memory doesn't
81
+ // flip the intent.
76
82
  // Pad with spaces so space-delimited patterns match words at the start/end.
77
- return { distinct: distinctiveTokens(text), polarity: inferConflictPolarity(opening), window: ' ' + opening.toLowerCase() + ' ' };
83
+ return {
84
+ distinct: distinctiveTokens(text),
85
+ polarity: inferConflictPolarity(opening),
86
+ window: ' ' + opening.toLowerCase() + ' ',
87
+ };
78
88
  }
79
89
  function describeConflict(a, b) {
80
90
  // Jaccard on stopword-stripped tokens. Defer the threshold check until we
@@ -122,20 +132,24 @@ function openingWindow(text) {
122
132
  }
123
133
  // Takes opening windows only, so " on " and " off " as prepositions deep in long prose don't read as enabled/disabled.
124
134
  function classifyConflictType(a, b, aPolarity, bPolarity) {
125
- // Whole-word boundaries so " on " alone doesn't match "on/off"; pair only `enabled` <-> `disabled` and explicit on/off in imperative context.
135
+ // Whole-word boundaries so " on " alone doesn't match "on/off"; pair only `enabled` <-> `disabled` and explicit
136
+ // on/off in imperative context.
126
137
  const enabledDisabled = (containsAny(a, [' enabled ', ' enable ']) && containsAny(b, [' disabled ', ' disable ']))
127
138
  || (containsAny(b, [' enabled ', ' enable ']) && containsAny(a, [' disabled ', ' disable ']));
128
139
  if (enabledDisabled)
129
140
  return 'enabled/disabled mismatch on overlapping statement';
130
- const trueFalse = (containsAny(a, [' true ', ' true.', ' true,', ' yes ']) && containsAny(b, [' false ', ' false.', ' false,', ' no ']))
131
- || (containsAny(b, [' true ', ' true.', ' true,', ' yes ']) && containsAny(a, [' false ', ' false.', ' false,', ' no ']));
141
+ const trueFalse = (containsAny(a, [' true ', ' true.', ' true,', ' yes ']) &&
142
+ containsAny(b, [' false ', ' false.', ' false,', ' no '])) ||
143
+ (containsAny(b, [' true ', ' true.', ' true,', ' yes ']) &&
144
+ containsAny(a, [' false ', ' false.', ' false,', ' no ']));
132
145
  if (trueFalse)
133
146
  return 'true/false mismatch on overlapping statement';
134
147
  const alwaysNever = (containsAny(a, [' always ', ' must ']) && containsAny(b, [' never ', ' must not ']))
135
148
  || (containsAny(b, [' always ', ' must ']) && containsAny(a, [' never ', ' must not ']));
136
149
  if (alwaysNever)
137
150
  return 'always/never mismatch on overlapping statement';
138
- if ((aPolarity === 'positive' && bPolarity === 'negative') || (aPolarity === 'negative' && bPolarity === 'positive')) {
151
+ if ((aPolarity === 'positive' && bPolarity === 'negative') ||
152
+ (aPolarity === 'negative' && bPolarity === 'positive')) {
139
153
  return 'negation polarity mismatch on overlapping statement';
140
154
  }
141
155
  return null;
@@ -1,4 +1,5 @@
1
- // The one LLM call behind every DAG summary, kept apart from the graph writes so its request bytes are tested on their own.
1
+ // The one LLM call behind every DAG summary, kept apart from the graph writes so its request bytes are tested on their
2
+ // own.
2
3
  import { redactSecretsStrict } from '../util/secret-detect.js';
3
4
  import { describeMessageFailure, sendAnthropicMessage } from '../util/anthropic-messages.js';
4
5
  import { certainDefect } from '../core/memory-quality.js';
@@ -1,5 +1,8 @@
1
1
  import { type MemoryEntry } from '../core/memory.js';
2
+ import type { Consolidation, LocalFiles } from '../store/port.js';
2
3
  import { type DagSummaryOptions } from './dag-summary.js';
4
+ /** Sleep's store, with the folder whose config sets a new summary's half-life. */
5
+ type DagStore = Pick<LocalFiles, 'hippoRoot' | 'consolidation'>;
3
6
  export interface FactCluster {
4
7
  label: string;
5
8
  members: MemoryEntry[];
@@ -14,7 +17,7 @@ export interface DagBuildResult {
14
17
  * guard-exempt (same id + content), so only summary-creation refusals count. */
15
18
  rejected: number;
16
19
  }
17
- export declare function buildDag(hippoRoot: string, facts: MemoryEntry[], opts: DagSummaryOptions): Promise<DagBuildResult>;
20
+ export declare function buildDag(local: DagStore, facts: MemoryEntry[], opts: DagSummaryOptions): Promise<DagBuildResult>;
18
21
  export interface DagRebuildResult {
19
22
  attempted: number;
20
23
  rebuilt: number;
@@ -23,9 +26,10 @@ export interface DagRebuildResult {
23
26
  failed: number;
24
27
  capped: boolean;
25
28
  }
26
- /** Sleep-cycle phase draining the dirty L2 summary queue; one throwing rebuild does not abort the rest.
27
- * A concurrent sleep's second writer gets changed=false (UPDATE requires summary_dirty=1) and is skipped silently; a tombstone hit counts as `refused`. */
28
- export declare function rebuildDirtySummaries(hippoRoot: string, opts: DagSummaryOptions & {
29
+ /** Sleep-cycle phase draining the dirty L2 summary queue; one throwing rebuild does not abort the rest. A concurrent
30
+ * sleep's second writer gets changed=false (UPDATE requires summary_dirty=1) and is skipped silently; a tombstone hit
31
+ * counts as `refused`. */
32
+ export declare function rebuildDirtySummaries(store: Consolidation, opts: DagSummaryOptions & {
29
33
  cap?: number;
30
34
  }): Promise<DagRebuildResult>;
31
35
  export interface EntityProfilesBuildResult {
@@ -39,5 +43,6 @@ export interface EntityProfilesBuildResult {
39
43
  }
40
44
  /** Build L3 entity profiles by clustering L2 summaries sharing entity tags (2+ L2s per entity).
41
45
  * Each L2 link write marks the new L3 dirty, so clear it or the same cycle re-rebuilds it. */
42
- export declare function buildEntityProfiles(hippoRoot: string, l2Summaries: MemoryEntry[], opts: DagSummaryOptions): Promise<EntityProfilesBuildResult>;
46
+ export declare function buildEntityProfiles(local: DagStore, l2Summaries: MemoryEntry[], opts: DagSummaryOptions): Promise<EntityProfilesBuildResult>;
47
+ export {};
43
48
  //# sourceMappingURL=dag.d.ts.map
@@ -1,6 +1,4 @@
1
1
  import { createMemory, Layer } from '../core/memory.js';
2
- import { writeEntry, writeEntriesTogether } from '../store/entry-writes.js';
3
- import { loadAllDirtySummaries, loadChildrenOfSummary, applyRebuildResult, clearSummaryDirtyAfterBuild, } from '../store/summaries.js';
4
2
  import { RejectedValueError } from '../core/api-errors.js';
5
3
  import { generateDagSummary } from './dag-summary.js';
6
4
  import { overlapPartners } from './overlap-index.js';
@@ -17,7 +15,8 @@ export function clusterFacts(facts) {
17
15
  return [];
18
16
  const entityTags = facts.map((f) => f.tags.filter((t) => t.startsWith('speaker:') || t.startsWith('topic:')));
19
17
  const tagSets = entityTags.map((tags) => new Set(tags));
20
- // Every tag indexed, not a prefix: a repeated tag counts twice in `shared`, so the prefix-filter bound would not hold.
18
+ // Every tag indexed, not a prefix: a repeated tag counts twice in `shared`, so the prefix-filter bound would not
19
+ // hold.
21
20
  const partnersOf = overlapPartners(tagSets, () => 1);
22
21
  const assigned = new Set();
23
22
  const clusters = [];
@@ -45,12 +44,12 @@ export function clusterFacts(facts) {
45
44
  }
46
45
  return clusters;
47
46
  }
48
- // Partition before clustering so one LLM summary never mixes tenants; Map keeps insertion order, so a single-tenant store iterates as before.
49
- // buildEntityProfiles partitions its L2s with this same key.
47
+ // Partition before clustering so one LLM summary never mixes tenants; Map keeps insertion order, so a single-tenant
48
+ // store iterates as before. buildEntityProfiles partitions its L2s with this same key.
50
49
  function partitionFactsByTenant(unparented) {
51
50
  const unparentedByTenant = new Map();
52
51
  for (const fact of unparented) {
53
- const key = derivationPartitionKey(fact.tenantId, fact.scope, fact.origin_project);
52
+ const key = derivationPartitionKey(fact.tenant_id, fact.scope, fact.origin_project);
54
53
  const bucket = unparentedByTenant.get(key);
55
54
  if (bucket)
56
55
  bucket.push(fact);
@@ -62,12 +61,13 @@ function partitionFactsByTenant(unparented) {
62
61
  /** The L2 summary entry for one cluster, landing in the facts' own tenant and scope. */
63
62
  function createClusterSummaryEntry(summary, cluster, home) {
64
63
  const memberCreatedAts = cluster.members.map((m) => m.created).sort();
65
- // Every cluster member shares home.tenantId (tenant partition above), so the summary lands in the facts' tenant, not 'default'.
64
+ // Every cluster member shares home.tenantId (tenant partition above), so the summary lands in the facts' tenant,
65
+ // not 'default'.
66
66
  const summaryEntry = createMemory(summary, {
67
67
  layer: Layer.Semantic,
68
68
  tags: [...cluster.entityTags, ...neverAutoShareTags(cluster.members), 'dag-summary'],
69
69
  confidence: 'inferred',
70
- dag_level: 2,
70
+ dagLevel: 2,
71
71
  tenantId: home.tenantId,
72
72
  scope: home.scope,
73
73
  baseHalfLifeDays: home.baseHalfLifeDays,
@@ -81,7 +81,7 @@ function createClusterSummaryEntry(summary, cluster, home) {
81
81
  return summaryEntry;
82
82
  }
83
83
  /** Summarize one eligible cluster, write the summary, then re-parent its members under it. */
84
- async function summarizeCluster(hippoRoot, cluster, home, opts, result) {
84
+ async function summarizeCluster(store, cluster, home, opts, result) {
85
85
  const summary = await generateDagSummary(cluster.label, cluster.members.map((m) => m.content), opts);
86
86
  if (!summary)
87
87
  return;
@@ -89,29 +89,29 @@ async function summarizeCluster(hippoRoot, cluster, home, opts, result) {
89
89
  // A refused summary skips only this cluster. writeEntry's guard reads tenantId off the entry
90
90
  // (home.tenantId), so it already checks this tenant's tombstones: no separate check here.
91
91
  try {
92
- writeEntry(hippoRoot, summaryEntry);
92
+ store.writeEntry(summaryEntry);
93
93
  }
94
94
  catch (err) {
95
95
  if (err instanceof RejectedValueError) {
96
96
  result.rejected++;
97
- log.warn(`buildDag: cluster "${cluster.label}" skipped: summary matches a rejected value`);
97
+ log.warn(`buildDag: cluster "${cluster.label}" skipped: summary matches a rejected value`, errorFields(err));
98
98
  return;
99
99
  }
100
100
  throw err;
101
101
  }
102
102
  result.summariesCreated++;
103
- result.factsLinked += writeEntriesTogether(hippoRoot, cluster.members.map((member) => ({ ...member, dag_parent_id: summaryEntry.id })));
103
+ result.factsLinked += store.writeTogether(cluster.members.map((member) => ({ ...member, dag_parent_id: summaryEntry.id })));
104
104
  // Member writes just marked this fresh summary dirty; clear it, or the same sleep cycle's
105
105
  // rebuild pass would re-rebuild every new summary at twice the LLM cost.
106
- clearSummaryDirtyAfterBuild(hippoRoot, summaryEntry.id, summaryEntry.tenantId, 'buildDag');
106
+ store.clearSummaryDirty(summaryEntry.id, summaryEntry.tenant_id, 'buildDag');
107
107
  }
108
- export async function buildDag(hippoRoot, facts, opts) {
108
+ export async function buildDag(local, facts, opts) {
109
109
  const result = { candidateClusters: 0, summariesCreated: 0, factsLinked: 0, rejected: 0 };
110
- const baseHalfLifeDays = loadConfig(hippoRoot).defaultHalfLifeDays;
110
+ const baseHalfLifeDays = loadConfig(local.hippoRoot).defaultHalfLifeDays;
111
111
  const unparented = facts.filter((f) => f.dag_level === 1 && !f.dag_parent_id && f.tags.includes('extracted'));
112
112
  for (const [, tenantFacts] of partitionFactsByTenant(unparented)) {
113
113
  const home = {
114
- tenantId: tenantFacts[0].tenantId,
114
+ tenantId: tenantFacts[0].tenant_id,
115
115
  scope: derivationScope(tenantFacts[0].scope),
116
116
  originProject: tenantFacts[0].origin_project,
117
117
  baseHalfLifeDays,
@@ -120,16 +120,19 @@ export async function buildDag(hippoRoot, facts, opts) {
120
120
  const eligibleClusters = clusters.filter((c) => c.members.length >= 3);
121
121
  result.candidateClusters += eligibleClusters.length;
122
122
  for (const cluster of eligibleClusters) {
123
- await summarizeCluster(hippoRoot, cluster, home, opts, result);
123
+ await summarizeCluster(local.consolidation, cluster, home, opts, result);
124
124
  }
125
125
  }
126
126
  return result;
127
127
  }
128
128
  /** Regenerate one dirty summary from its children and tally the outcome; throws reach the caller's isolation. */
129
- async function rebuildOneSummary(hippoRoot, summary, opts, result) {
130
- const children = loadChildrenOfSummary(hippoRoot, summary.id, summary.tenantId);
129
+ async function rebuildOneSummary(store, summary, opts, result, preloaded, queuedIds) {
130
+ // A queued child may have been rebuilt earlier in this drain, so its preloaded content is stale: reread then.
131
+ const children = preloaded.some((c) => queuedIds.has(c.id))
132
+ ? store.childrenOfSummary(summary.id, summary.tenant_id)
133
+ : preloaded;
131
134
  if (children.length === 0) {
132
- clearZeroChildSummary(hippoRoot, summary, result);
135
+ clearZeroChildSummary(store, summary, result);
133
136
  return;
134
137
  }
135
138
  const newContent = await generateDagSummary(summaryLabel(summary), children.map((c) => c.content), opts);
@@ -139,7 +142,7 @@ async function rebuildOneSummary(hippoRoot, summary, opts, result) {
139
142
  return;
140
143
  }
141
144
  const childCreatedAts = children.map((c) => c.created).sort();
142
- const { changed, refused } = applyRebuildResult(hippoRoot, summary, {
145
+ const { changed, refused } = store.applyRebuild(summary, {
143
146
  content: newContent,
144
147
  descendant_count: children.length,
145
148
  earliest_at: childCreatedAts[0],
@@ -158,8 +161,8 @@ async function rebuildOneSummary(hippoRoot, summary, opts, result) {
158
161
  // success, silently skip
159
162
  }
160
163
  /** Zero-child case: clear dirty + zero counts, no LLM call, no rebuild_count bump. */
161
- function clearZeroChildSummary(hippoRoot, summary, result) {
162
- const { changed } = applyRebuildResult(hippoRoot, summary, {
164
+ function clearZeroChildSummary(store, summary, result) {
165
+ const { changed } = store.applyRebuild(summary, {
163
166
  content: summary.content,
164
167
  descendant_count: 0,
165
168
  earliest_at: null,
@@ -180,12 +183,13 @@ function summaryLabel(summary) {
180
183
  ? entityTags.map((t) => t.split(':')[1]).join(': ')
181
184
  : summary.content.slice(0, SUMMARY_FALLBACK_CHARS);
182
185
  }
183
- /** Sleep-cycle phase draining the dirty L2 summary queue; one throwing rebuild does not abort the rest.
184
- * A concurrent sleep's second writer gets changed=false (UPDATE requires summary_dirty=1) and is skipped silently; a tombstone hit counts as `refused`. */
185
- export async function rebuildDirtySummaries(hippoRoot, opts) {
186
+ /** Sleep-cycle phase draining the dirty L2 summary queue; one throwing rebuild does not abort the rest. A concurrent
187
+ * sleep's second writer gets changed=false (UPDATE requires summary_dirty=1) and is skipped silently; a tombstone hit
188
+ * counts as `refused`. */
189
+ export async function rebuildDirtySummaries(store, opts) {
186
190
  const cap = opts.cap ?? DEFAULT_REBUILD_CAP;
187
191
  // One past the cap tells whether more were waiting without reading the rest.
188
- const dirty = loadAllDirtySummaries(hippoRoot, cap + 1);
192
+ const dirty = store.dirtySummaries(cap + 1);
189
193
  const capped = dirty.length > cap;
190
194
  const queue = dirty.slice(0, cap);
191
195
  const result = {
@@ -196,6 +200,8 @@ export async function rebuildDirtySummaries(hippoRoot, opts) {
196
200
  failed: 0,
197
201
  capped,
198
202
  };
203
+ const childrenOf = store.childrenOfSummaries(queue);
204
+ const queuedIds = new Set(queue.map((s) => s.id));
199
205
  for (const [index, summary] of queue.entries()) {
200
206
  // Yield the macrotask queue every 25 summaries: each iteration is synchronous SQLite, so a batch of up to 1000
201
207
  // would starve timers and IPC (server keep-alives, Vitest's birpc heartbeat).
@@ -203,13 +209,13 @@ export async function rebuildDirtySummaries(hippoRoot, opts) {
203
209
  await new Promise((resolve) => setImmediate(resolve));
204
210
  }
205
211
  try {
206
- await rebuildOneSummary(hippoRoot, summary, opts, result);
212
+ await rebuildOneSummary(store, summary, opts, result, childrenOf(summary), queuedIds);
207
213
  }
208
214
  catch (err) {
209
215
  // One throw doesn't abort the queue; log enough to triage an exotic
210
216
  // failure (SQLite I/O, prepare), since audit() already catches its own.
211
217
  result.failed++;
212
- log.error(`rebuildDirtySummaries: summary ${summary.id} (tenant ${summary.tenantId}) failed: ${errorMessage(err)}`, errorFields(err));
218
+ log.error(`rebuildDirtySummaries: summary ${summary.id} (tenant ${summary.tenant_id}) failed: ${errorMessage(err)}`, errorFields(err));
213
219
  }
214
220
  }
215
221
  return result;
@@ -222,7 +228,7 @@ function createProfileEntry(summary, cluster, home) {
222
228
  layer: Layer.Semantic,
223
229
  tags: [...cluster.entityTags, ...neverAutoShareTags(cluster.members), 'dag-entity-profile'],
224
230
  confidence: 'inferred',
225
- dag_level: 3,
231
+ dagLevel: 3,
226
232
  tenantId: home.tenantId,
227
233
  scope: home.scope,
228
234
  baseHalfLifeDays: home.baseHalfLifeDays,
@@ -235,7 +241,7 @@ function createProfileEntry(summary, cluster, home) {
235
241
  return profileEntry;
236
242
  }
237
243
  /** Profile one eligible cluster of L2s, write it, then re-link the L2s under it. */
238
- async function profileCluster(hippoRoot, cluster, home, opts, result) {
244
+ async function profileCluster(store, cluster, home, opts, result) {
239
245
  const summary = await generateDagSummary(cluster.label, cluster.members.map((m) => m.content), opts);
240
246
  if (!summary) {
241
247
  result.failed++;
@@ -244,25 +250,25 @@ async function profileCluster(hippoRoot, cluster, home, opts, result) {
244
250
  const profileEntry = createProfileEntry(summary, cluster, home);
245
251
  // A refused profile skips only this cluster; the re-linking below never runs for it.
246
252
  try {
247
- writeEntry(hippoRoot, profileEntry);
253
+ store.writeEntry(profileEntry);
248
254
  }
249
255
  catch (err) {
250
256
  if (err instanceof RejectedValueError) {
251
257
  result.rejected++;
252
- log.warn(`buildEntityProfiles: cluster "${cluster.label}" skipped: profile matches a rejected value`);
258
+ log.warn(`buildEntityProfiles: cluster "${cluster.label}" skipped: profile matches a rejected value`, errorFields(err));
253
259
  return;
254
260
  }
255
261
  throw err;
256
262
  }
257
263
  result.profilesCreated++;
258
- result.l2sLinked += writeEntriesTogether(hippoRoot, cluster.members.map((member) => ({ ...member, dag_parent_id: profileEntry.id })));
264
+ result.l2sLinked += store.writeTogether(cluster.members.map((member) => ({ ...member, dag_parent_id: profileEntry.id })));
259
265
  // Re-linking just marked the fresh L3 dirty; clear it so this cycle's rebuild skips it.
260
266
  // The distinct source tags the audit row.
261
- clearSummaryDirtyAfterBuild(hippoRoot, profileEntry.id, home.tenantId, 'buildEntityProfiles', 'buildEntityProfiles-clean');
267
+ store.clearSummaryDirty(profileEntry.id, home.tenantId, 'buildEntityProfiles', 'buildEntityProfiles-clean');
262
268
  }
263
269
  /** Build L3 entity profiles by clustering L2 summaries sharing entity tags (2+ L2s per entity).
264
270
  * Each L2 link write marks the new L3 dirty, so clear it or the same cycle re-rebuilds it. */
265
- export async function buildEntityProfiles(hippoRoot, l2Summaries, opts) {
271
+ export async function buildEntityProfiles(local, l2Summaries, opts) {
266
272
  const result = {
267
273
  candidateClusters: 0,
268
274
  profilesCreated: 0,
@@ -270,12 +276,12 @@ export async function buildEntityProfiles(hippoRoot, l2Summaries, opts) {
270
276
  failed: 0,
271
277
  rejected: 0,
272
278
  };
273
- const baseHalfLifeDays = loadConfig(hippoRoot).defaultHalfLifeDays;
279
+ const baseHalfLifeDays = loadConfig(local.hippoRoot).defaultHalfLifeDays;
274
280
  // Only L2 with no L3 parent yet (avoid re-clustering already-profiled L2s).
275
281
  const unparented = l2Summaries.filter((s) => s.dag_level === 2 && !s.dag_parent_id);
276
282
  for (const [, tenantL2s] of partitionFactsByTenant(unparented)) {
277
283
  const home = {
278
- tenantId: tenantL2s[0].tenantId,
284
+ tenantId: tenantL2s[0].tenant_id,
279
285
  scope: derivationScope(tenantL2s[0].scope),
280
286
  originProject: tenantL2s[0].origin_project,
281
287
  baseHalfLifeDays,
@@ -284,7 +290,7 @@ export async function buildEntityProfiles(hippoRoot, l2Summaries, opts) {
284
290
  const eligible = clusters.filter((c) => c.members.length >= 2);
285
291
  result.candidateClusters += eligible.length;
286
292
  for (const cluster of eligible) {
287
- await profileCluster(hippoRoot, cluster, home, opts, result);
293
+ await profileCluster(local.consolidation, cluster, home, opts, result);
288
294
  }
289
295
  }
290
296
  return result;
@@ -4,7 +4,8 @@ import { rescueSet, rankNonPinnedByTenant, validateWeights } from './memory-valu
4
4
  import { MEMORY_VALUE_WEIGHTS, SOURCE_ARTIFACT_SHA256 } from './memory-value-weights.js';
5
5
  const STRENGTH_DECIMALS = 4;
6
6
  export const DECAY_THRESHOLD = 0.05;
7
- // Leaving active memory: a raw receipt stays (the append-only trigger aborts DELETE for the whole batch; stored strength refreshed) but sits out this cycle;
7
+ // Leaving active memory: a raw receipt stays (the append-only trigger aborts DELETE for the whole batch; stored
8
+ // strength refreshed) but sits out this cycle;
8
9
  // others go dormant when config.dormant is on, else are deleted. Only called for rows `retirable` allows.
9
10
  function retireFaded(run, entry, strength) {
10
11
  const { result } = run;
@@ -14,7 +15,12 @@ function retireFaded(run, entry, strength) {
14
15
  if (run.config.dormant.enabled && !detectSecret(entry).flagged) {
15
16
  result.dormant++;
16
17
  result.details.push(` 💤 dormant ${entry.id} ${why}`);
17
- run.pendingDormant.push({ entry: { ...entry, strength }, strength, reason: 'decay', dormantAt: run.now.toISOString() });
18
+ run.pendingDormant.push({
19
+ entry: { ...entry, strength },
20
+ strength,
21
+ reason: 'decay',
22
+ dormantAt: run.now.toISOString(),
23
+ });
18
24
  return;
19
25
  }
20
26
  result.removed++;
@@ -31,7 +37,8 @@ function keepSurvivor(run, entry, strength) {
31
37
  run.result.decayed++;
32
38
  return updated;
33
39
  }
34
- // 1. Decay pass. Memory-value flag OFF runs the single-phase loop below; ON classifies every entry with zero commits, runs rescueSet per tenant, then commits.
40
+ // 1. Decay pass. Memory-value flag OFF runs the single-phase loop below; ON classifies every entry with zero commits,
41
+ // runs rescueSet per tenant, then commits.
35
42
  // Rescued entries stay full survivors for this cycle's later passes.
36
43
  export function decayPass(run) {
37
44
  if (run.config.memoryValue.enabled)
@@ -85,14 +92,19 @@ function decayWithMemoryValue(run) {
85
92
  let rescuedIds = new Set();
86
93
  let rankById = new Map();
87
94
  const { strengthById, condemnedIds } = classifyByStrength(run);
88
- // Phase 2a: rescue decision (pure compute); runs under --dry-run too (only the pendingDeletes flush and the logRun audit write are !dryRun-gated).
95
+ // Phase 2a: rescue decision (pure compute); runs under --dry-run too (only the pendingDeletes flush and the logRun
96
+ // audit write are !dryRun-gated).
89
97
  // Fail-loud must not depend on condemnation traffic: validate the frozen weights even when nothing is condemned.
90
98
  validateWeights();
91
99
  if (condemnedIds.size > 0) {
92
100
  // Rank per tenant ONCE: rankById feeds both rescueSet (via precomputedRanks) and the detail/audit
93
101
  // context below, so the whole-store ranking runs once per sleep and only when something is condemned.
94
102
  rankById = rankNonPinnedByTenant(all, now);
95
- rescuedIds = rescueSet(all, condemnedIds, now, { weights: MEMORY_VALUE_WEIGHTS, digest: SOURCE_ARTIFACT_SHA256, precomputedRanks: rankById });
103
+ rescuedIds = rescueSet(all, condemnedIds, now, {
104
+ weights: MEMORY_VALUE_WEIGHTS,
105
+ digest: SOURCE_ARTIFACT_SHA256,
106
+ precomputedRanks: rankById,
107
+ });
96
108
  reportNonFiniteScores(result, rankById);
97
109
  }
98
110
  // --- Phase 2b: commit, one pass over `all` in ITS ORIGINAL ORDER ---
@@ -101,7 +113,8 @@ function decayWithMemoryValue(run) {
101
113
  const strength = strengthById.get(entry.id);
102
114
  if (run.retirable(entry) && strength < DECAY_THRESHOLD) {
103
115
  if (rescuedIds.has(entry.id)) {
104
- // Rescued: standard survivor stored-strength refresh. Confidence is left alone: it is an epistemic tier, not a cached
116
+ // Rescued: standard survivor stored-strength refresh. Confidence is left alone: it is an epistemic tier, not a
117
+ // cached
105
118
  // computation, so resolveConfidence derives it on read.
106
119
  rescuedEntries.push(keepSurvivor(run, entry, strength));
107
120
  reportRescue(result, entry, strength, rankById.get(entry.id));
@@ -1,5 +1,10 @@
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. */
1
+ /**
2
+ * Store-level dedup: same text apart from spacing, keeping the stronger copy; split out so `api.sleep` can dedupe
3
+ * without cli -> api imports.
4
+ * Survivor order is total and tenant-scoped: strength bucket, retrieval_count, then compareEntryIdentity; raw and
5
+ * superseded rows are not candidates.
6
+ */
7
+ import type { Consolidation } from '../store/port.js';
3
8
  import { type MemoryEntry } from '../core/memory.js';
4
9
  export interface DedupPair {
5
10
  kept: string;
@@ -17,7 +22,9 @@ export interface DedupResult {
17
22
  removed: number;
18
23
  pairs: DedupPair[];
19
24
  }
20
- /** Quantize strength to an integer bucket so ties are a true equivalence relation (equal iff same multiple of `STRENGTH_TIE_EPSILON`).
25
+ /**
26
+ * Quantize strength to an integer bucket so ties are a true equivalence relation (equal iff same multiple of
27
+ * `STRENGTH_TIE_EPSILON`).
21
28
  * Non-finite input maps to 0: a NaN bucket would make the comparator return NaN and break the total order. */
22
29
  export declare function strengthBucket(strength: number | null | undefined): number;
23
30
  /** Every row of the store, read once by a caller that also needs them, with the ids of rows backing an object. */
@@ -25,9 +32,11 @@ export interface LoadedStore {
25
32
  readonly entries: readonly MemoryEntry[];
26
33
  readonly backing: ReadonlySet<string>;
27
34
  }
28
- /** Remove the weaker copy of same-text (apart from spacing) memories within one tenant; cross-tenant pairs are never duplicates (isolation boundary).
35
+ /**
36
+ * Remove the weaker copy of same-text (apart from spacing) memories within one tenant; cross-tenant pairs are never
37
+ * duplicates (isolation boundary).
29
38
  * Higher strength wins, then more retrievals; `threshold` is accepted for old callers and ignored. */
30
- export declare function deduplicateStore(hippoRoot: string, options?: {
39
+ export declare function deduplicateStore(store: Consolidation, options?: {
31
40
  threshold?: number;
32
41
  dryRun?: boolean;
33
42
  actor?: string;
@@ -1,15 +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. */
1
+ /**
2
+ * Store-level dedup: same text apart from spacing, keeping the stronger copy; split out so `api.sleep` can dedupe
3
+ * without cli -> api imports.
4
+ * Survivor order is total and tenant-scoped: strength bucket, retrieval_count, then compareEntryIdentity; raw and
5
+ * superseded rows are not candidates.
6
+ */
3
7
  import { textOverlap } from '../util/tokenize.js';
4
- import { loadCurrentDistilledEntries } from '../store/entry-reads.js';
5
- import { deleteEntriesOneByOne, memoriesBackingObjects } from '../store/delete-and-batch.js';
6
8
  import { compareEntryIdentity } from '../core/compare.js';
7
9
  import { canAutoDelete } from '../core/memory.js';
8
10
  import { derivationPartitionKey } from '../core/recall-scope.js';
9
11
  import { duplicateKey } from '../util/same-text.js';
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. */
12
+ /**
13
+ * Quantization step for strength-tie comparisons: the 0.01 epsilon applied by rounding instead of an abs-diff
14
+ * threshold, so the tiebreak is transitive.
15
+ */
11
16
  const STRENGTH_TIE_EPSILON = 0.01;
12
- /** Quantize strength to an integer bucket so ties are a true equivalence relation (equal iff same multiple of `STRENGTH_TIE_EPSILON`).
17
+ /**
18
+ * Quantize strength to an integer bucket so ties are a true equivalence relation (equal iff same multiple of
19
+ * `STRENGTH_TIE_EPSILON`).
13
20
  * Non-finite input maps to 0: a NaN bucket would make the comparator return NaN and break the total order. */
14
21
  export function strengthBucket(strength) {
15
22
  const s = strength ?? 0;
@@ -28,13 +35,14 @@ function survivorOrder(a, b) {
28
35
  return retrievalDiff;
29
36
  return compareEntryIdentity(a, b);
30
37
  }
31
- // Tenant partition: group by tenantId before sorting so a duplicate pair never forms across tenants; Map keeps insertion order,
38
+ // Tenant partition: group by tenantId before sorting so a duplicate pair never forms across tenants; Map keeps
39
+ // insertion order,
32
40
  // so a single-tenant store gets one group and the same result as a global pass.
33
41
  function entriesByPartition(entries) {
34
42
  const entriesByTenant = new Map();
35
43
  for (const entry of entries) {
36
44
  // EI2: also split by restricted scope, else a private copy can delete the readable one.
37
- const key = derivationPartitionKey(entry.tenantId, entry.scope, entry.origin_project);
45
+ const key = derivationPartitionKey(entry.tenant_id, entry.scope, entry.origin_project);
38
46
  const bucket = entriesByTenant.get(key);
39
47
  if (bucket)
40
48
  bucket.push(entry);
@@ -73,33 +81,36 @@ function partitionPairs(tenantEntries, removed, backing) {
73
81
  }
74
82
  return [...groups.values()].flatMap((group) => group.pairs);
75
83
  }
76
- /** The rows loadCurrentDistilledEntries selects, picked from a whole-store read. */
84
+ /** The rows currentDistilledEntries selects, picked from a whole-store read. */
77
85
  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).
86
+ /**
87
+ * Remove the weaker copy of same-text (apart from spacing) memories within one tenant; cross-tenant pairs are never
88
+ * duplicates (isolation boundary).
79
89
  * Higher strength wins, then more retrievals; `threshold` is accepted for old callers and ignored. */
80
- export function deduplicateStore(hippoRoot, options = {}) {
90
+ export function deduplicateStore(store, options = {}) {
81
91
  const dryRun = options.dryRun ?? false;
82
92
  // Only current distilled rows compete: raw rows are append-only (the delete
83
93
  // trigger would abort sleep mid-loop) and superseded rows are history.
84
- const entries = options.loaded?.entries.filter(isCurrentDistilled) ?? loadCurrentDistilledEntries(hippoRoot);
94
+ const entries = options.loaded?.entries.filter(isCurrentDistilled) ?? store.currentDistilledEntries();
85
95
  const entriesByTenant = entriesByPartition(entries);
86
- // Shared across tenant groups: ids are globally unique UUIDs, so `removed` cannot collide across tenants and deleteEntry deletes by primary key alone.
96
+ // Shared across tenant groups: ids are globally unique UUIDs, so `removed` cannot collide across tenants and
97
+ // deleteEntry deletes by primary key alone.
87
98
  const removed = new Set();
88
99
  const pairs = [];
89
- const backing = options.loaded?.backing ?? memoriesBackingObjects(hippoRoot);
100
+ const backing = options.loaded?.backing ?? store.objectBackedIds();
90
101
  for (const tenantEntries of entriesByTenant.values()) {
91
102
  // The survivor total order (see the file-level docstring), scoped per
92
103
  // tenant group: the total order holds within a tenant only, matching the partition above.
93
104
  tenantEntries.sort(survivorOrder);
94
105
  pairs.push(...partitionPairs(tenantEntries, removed, backing));
95
106
  }
96
- const done = dryRun ? pairs : deletePairs(hippoRoot, pairs, options.actor);
107
+ const done = dryRun ? pairs : deletePairs(store, pairs, options.actor);
97
108
  return { removed: done.length, pairs: done };
98
109
  }
99
110
  /** The pairs whose loser was deleted; one store handle, one transaction per delete. */
100
- function deletePairs(hippoRoot, pairs, actor) {
111
+ function deletePairs(store, pairs, actor) {
101
112
  const targets = pairs.map((p) => ({ id: p.removed, reason: `dedup: duplicate of ${p.kept}` }));
102
- const gone = deleteEntriesOneByOne(hippoRoot, targets, { actor, automatic: true });
113
+ const gone = store.deleteOneByOne(targets, { actor, automatic: true });
103
114
  return pairs.filter((_, i) => gone[i]);
104
115
  }
105
116
  //# sourceMappingURL=dedupe.js.map
@@ -3,6 +3,9 @@ import type { DormantMove } from '../store/dormant.js';
3
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] per queued op on a child whose DAG parent the run removes: the parent-dirty mark otherwise lands after the parent is gone. */
6
+ /**
7
+ * [child, parent] per queued op on a child whose DAG parent the run removes: the parent-dirty mark otherwise lands
8
+ * after the parent is gone.
9
+ */
7
10
  export declare function familyUnits(writes: readonly MemoryEntry[], deletes: readonly string[], dormant: readonly DormantMove[], snapshot: LoadedRows): string[][];
8
11
  //# sourceMappingURL=flush-units.d.ts.map
@@ -42,7 +42,10 @@ function unionFind(units) {
42
42
  }
43
43
  return find;
44
44
  }
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. */
45
+ /**
46
+ * [child, parent] per queued op on a child whose DAG parent the run removes: the parent-dirty mark otherwise lands
47
+ * after the parent is gone.
48
+ */
46
49
  // SHORTCUT: a removed parent and all its changed children commit as one component, so
47
50
  // one hold can pass holdMs by a family's size; split by child if a family grows large.
48
51
  export function familyUnits(writes, deletes, dormant, snapshot) {